From fc9eacc85ec9ad7b0d31f50acdf66f154b2ba45b Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Wed, 3 Apr 2024 13:14:00 +0000 Subject: [PATCH] Built from commit '18235d5' --- .nojekyll | 0 404.html | 13 + assets/css/styles.7d0c748d.css | 1 + ...cling-8cbf643933baa1262460838cc4b483ae.png | Bin 0 -> 44134 bytes ...pling-1618c246583304921e59eced813219f2.png | Bin 0 -> 237031 bytes ..._line-98e32f3b0d5332a371ec4bb2dbc66da8.png | Bin 0 -> 43526 bytes ...chart-74501f10294f5dd339dba1a305bbe3f6.png | Bin 0 -> 31408 bytes ...oking-e0ac6b7a8379c76a8f29199d7aa9086c.png | Bin 0 -> 45513 bytes ...ssure-c971bb4cd1ee2f4d1cd9827d6231364c.png | Bin 0 -> 157773 bytes ...rview-26f2e87a69f9a685f123b818e6bed313.png | Bin 0 -> 38869 bytes ...ation-9c9342f8d3a926d760096a17ccb76556.svg | 4330 ++ ...chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png | Bin 0 -> 43536 bytes ..._plot-d4eee4126032e046bf374ef66ceb9946.png | Bin 0 -> 16617 bytes ..._plot-527cac79a8c53527147492b170308459.png | Bin 0 -> 14318 bytes ...essor-3493b127c832898d93b5231594efa8d3.png | Bin 0 -> 69926 bytes ...chart-28c5f110972461aba840e82b0962c3d2.png | Bin 0 -> 66545 bytes ...reams-415751902a6078520845f70740eaa1af.png | Bin 0 -> 59154 bytes ...t_eff-136e9a9dd1af0700084ddf17be0d4453.PNG | Bin 0 -> 12910 bytes ..._head-ec0fc7f624752c8c95bd7c3f828090a3.PNG | Bin 0 -> 14284 bytes ...arity-3e43516a1e0246a2e125d4980006b137.png | Bin 0 -> 19396 bytes ...y_pfd-ad59578d69ea3d3267f646b9d8141822.jpg | Bin 0 -> 1261426 bytes ...oking-dc5aedeb280843ea22445ce83731b8dc.png | Bin 0 -> 46036 bytes ...ample-5b8c9832693a18b6500cf408c0b4873b.png | Bin 0 -> 150701 bytes assets/js/00440000.cceb5e85.js | 1 + assets/js/00bdc23f.a7fe7f57.js | 1 + assets/js/0425b884.948254ce.js | 1 + assets/js/0477162f.6c398dc7.js | 1 + assets/js/06adec10.4c91d0a5.js | 1 + assets/js/06dd1efa.556a007e.js | 1 + assets/js/0745e7f0.012598cb.js | 1 + assets/js/074935d7.787161b6.js | 1 + assets/js/07b341f3.a32e4fb7.js | 1 + assets/js/084f7ebf.d2478f08.js | 1 + assets/js/0aeda122.cbb99604.js | 1 + assets/js/0f7b5825.3ef7c2f4.js | 1 + assets/js/0fd76486.e7925637.js | 1 + assets/js/10c684b0.11d7ac8c.js | 1 + assets/js/11516e85.7d67d8fc.js | 1 + assets/js/1287dd43.379819cf.js | 1 + assets/js/1300feb7.787000b1.js | 1 + assets/js/14eb3368.1716a525.js | 1 + assets/js/15962da1.478c8ccb.js | 1 + assets/js/163041ea.3ded8d57.js | 1 + assets/js/1644.956c5f9d.js | 1 + assets/js/1736.5a1f964c.js | 1 + assets/js/1772.dbafd945.js | 1 + assets/js/17896441.1c4eee25.js | 2 + assets/js/17896441.1c4eee25.js.LICENSE.txt | 9 + assets/js/17e50ecd.84c65831.js | 1 + assets/js/18b0ec42.7932013a.js | 1 + assets/js/1a4e3797.b588d37a.js | 1 + assets/js/1c663d3d.3b2eb3c1.js | 1 + assets/js/1df93b7f.9c9986b4.js | 1 + assets/js/1e7de7fe.48c2fda9.js | 1 + assets/js/1f60d0d4.12f89e4f.js | 1 + assets/js/1f7805b6.cb8ffae1.js | 1 + assets/js/2237.660f8cae.js | 1 + assets/js/22f0e129.700978f3.js | 1 + assets/js/237.c377d557.js | 1815 + assets/js/2465.bf434e4e.js | 1 + assets/js/2661.122dc9a7.js | 1 + assets/js/2689.61fc2af9.js | 1 + assets/js/2781f0ad.5961fd92.js | 1 + assets/js/29367e59.5e394ff1.js | 1 + assets/js/295.c0a028c4.js | 1242 + assets/js/295.e011aaa9.js | 1 + assets/js/2955.1a515cc6.js | 1 + assets/js/295f424e.f4b1ea30.js | 1 + assets/js/2995.5d18433e.js | 1 + assets/js/29d00dd8.f86ec347.js | 1 + assets/js/2b15d891.72863a33.js | 1 + assets/js/2b2be347.ab9ace89.js | 1 + assets/js/2c19a041.f0278a48.js | 1 + assets/js/2c73e373.a47cc11b.js | 1 + assets/js/2ce3b5da.c94b7f25.js | 1 + assets/js/2cedaf2f.533693ab.js | 1 + assets/js/2df92a48.3a6cca1e.js | 1 + assets/js/2f04f592.7ecac6a9.js | 1 + assets/js/3261da49.5ea59cab.js | 1 + assets/js/33498b04.af3705af.js | 1 + assets/js/3409ab5c.da6f95e5.js | 1 + assets/js/3449.f5c6982a.js | 1 + assets/js/3594.f73537cc.js | 1 + assets/js/3720c009.e2cfbcc1.js | 1 + assets/js/3727.85fa440d.js | 1 + assets/js/381.d1de7a2e.js | 10824 ++++ assets/js/3810e8e5.936df7c3.js | 1 + assets/js/382d59b5.fac6029d.js | 1 + assets/js/38d592cf.39635619.js | 1 + assets/js/3920.5e403fe8.js | 1 + assets/js/3952.a9404373.js | 1 + assets/js/3966.e4cb16cd.js | 1 + assets/js/3aeef25a.1896e4de.js | 1 + assets/js/3b0e82f8.eaddd6fc.js | 1 + assets/js/3e38e310.bc8854f8.js | 1 + assets/js/3fbb770c.39674007.js | 1 + assets/js/40d6382c.6514d67d.js | 1 + assets/js/4147f87e.4efdf1e5.js | 1 + assets/js/417.defab4a9.js | 2095 + assets/js/41d1792a.1467e923.js | 1 + assets/js/428320b6.53300601.js | 1 + assets/js/43a1031a.8029b5e8.js | 1 + assets/js/43a26e71.875cfcf4.js | 1 + assets/js/45c974ba.3fe59b9a.js | 1 + assets/js/465.e0f045fd.js | 3422 + assets/js/47daf389.f427e7eb.js | 1 + assets/js/496.499e45e0.js | 10814 ++++ assets/js/496ed8d5.a66004a5.js | 1 + assets/js/497.ad2ad4f4.js | 51748 ++++++++++++++++ assets/js/498bfcff.7cb5395f.js | 1 + assets/js/4aa4fc36.546789e2.js | 1 + assets/js/4b5a01f9.f1b16e5a.js | 1 + assets/js/4b80f681.649f2d17.js | 1 + assets/js/4c3c1dc2.2d79bead.js | 1 + assets/js/4da8ac19.740674be.js | 1 + assets/js/4ee97ba8.5de44dbc.js | 1 + assets/js/502e1773.15957f54.js | 1 + assets/js/5054.62d51cca.js | 1 + assets/js/5114.198e5e9e.js | 1 + assets/js/51ad0f66.4bc6fee4.js | 1 + assets/js/54.232956f2.js | 1410 + assets/js/54094f37.9512c0c0.js | 1 + assets/js/54d7341e.d7e29d8d.js | 1 + assets/js/5525.1fda8ddb.js | 1 + assets/js/55960ee5.ffe88e68.js | 1 + assets/js/5718.548e327d.js | 1 + assets/js/577.c4cd051f.js | 10323 +++ assets/js/577efb1d.bff2fbed.js | 1 + assets/js/594.eec51fb4.js | 26091 ++++++++ assets/js/5989d566.0ca83421.js | 1 + assets/js/5a5e553d.66840528.js | 1 + assets/js/5c08a402.b9d91040.js | 1 + assets/js/5c8ec56d.8762b795.js | 1 + assets/js/5e10e9e1.7ace1ffa.js | 1 + assets/js/5e3ed04b.4cc7e731.js | 1 + assets/js/5e95c892.3970a74d.js | 1 + assets/js/60746895.21f8ec3d.js | 1 + assets/js/61639be2.ecdff55a.js | 1 + assets/js/63ecd22d.27ad13ee.js | 1 + assets/js/661.bc10841b.js | 1227 + assets/js/66286265.54c83ec6.js | 1 + assets/js/66a649c0.fe4ad4d1.js | 1 + assets/js/6733.06beca23.js | 1 + assets/js/676abc7a.03893271.js | 1 + assets/js/689.a8f72dd5.js | 742 + assets/js/69fd9be6.5e6f3b90.js | 1 + assets/js/6adcc868.7dba0b56.js | 1 + assets/js/6bd3279d.a0920aed.js | 1 + assets/js/70f31d65.fe06b9e1.js | 1 + assets/js/718.c8a6130e.js | 540 + assets/js/7180.ddfad669.js | 1 + assets/js/72083b41.ebdce974.js | 1 + assets/js/721cfe60.59c0aa13.js | 1 + assets/js/727.ff3685b0.js | 26799 ++++++++ assets/js/733.97aa22de.js | 1320 + assets/js/7381.77f96fa1.js | 1 + assets/js/7497.e58bfc8c.js | 2 + assets/js/7497.e58bfc8c.js.LICENSE.txt | 9 + assets/js/7514af75.19e992cc.js | 1 + assets/js/7557b935.3c07d124.js | 1 + assets/js/7b02141e.f6863e42.js | 1 + assets/js/7c623a68.59eed68b.js | 1 + assets/js/7cebed78.799c5db3.js | 1 + assets/js/7d3b81bb.d3992b48.js | 1 + assets/js/7db788f5.2315ec42.js | 1 + assets/js/7e6991bb.55d8ba6f.js | 1 + assets/js/817.75222051.js | 2600 + assets/js/81dd00c5.6a7d0b4d.js | 1 + assets/js/8314.51d97488.js | 1 + assets/js/841adc37.c737b647.js | 1 + assets/js/8443.c83222a4.js | 2 + assets/js/8443.c83222a4.js.LICENSE.txt | 1 + assets/js/85.0502304d.js | 20431 ++++++ assets/js/85.cab88e4e.js | 1 + assets/js/858.75944404.js | 23921 +++++++ assets/js/86262f09.b577aac6.js | 1 + assets/js/880bbd08.13a8ec3c.js | 1 + assets/js/8817.619f555e.js | 1 + assets/js/8932.33d18fca.js | 1 + assets/js/8961bfac.d8e88269.js | 1 + assets/js/90184672.c0455df2.js | 1 + assets/js/905.bff7f89c.js | 1 + assets/js/9206.44aba7e5.js | 1 + assets/js/935f2afb.bd203e90.js | 1 + assets/js/9417.f108e646.js | 1 + assets/js/9496.ce93e692.js | 1 + assets/js/952.2576dcf8.js | 28486 +++++++++ assets/js/955.0221cbc8.js | 26178 ++++++++ assets/js/96533a10.c15c51f0.js | 1 + assets/js/966.e26e751e.js | 14570 +++++ assets/js/97732f4b.b6556d43.js | 1 + assets/js/977fea76.20ac3fb4.js | 1 + assets/js/995.b5d03916.js | 10065 +++ assets/js/9a118db7.62ebf45b.js | 1 + assets/js/9e136365.e03d4aca.js | 1 + assets/js/9e4a10de.2da2b698.js | 1 + assets/js/9e7755e6.acc3cd32.js | 1 + assets/js/9e91bf8d.760beddb.js | 1 + assets/js/a2e97e20.bbf524d9.js | 1 + assets/js/a5dcc804.8a68248d.js | 1 + assets/js/a7bd4aaa.2d920f9f.js | 1 + assets/js/a94703ab.e28c5e5d.js | 1 + assets/js/ad129716.ec7faabf.js | 1 + assets/js/af105519.55536628.js | 1 + assets/js/b0a5d2c7.758cd55a.js | 1 + assets/js/b15ba3bd.1515f234.js | 1 + assets/js/b2781c74.a424ad9a.js | 1 + assets/js/b2b17913.970b4d8a.js | 1 + assets/js/b677d687.464b512b.js | 1 + assets/js/b8c59810.aec9431a.js | 1 + assets/js/bb45b332.89053c6c.js | 1 + assets/js/bdf25f4c.fe9eff3a.js | 1 + assets/js/bfdf430b.79bacaf3.js | 1 + assets/js/c21bc46a.dffda344.js | 1 + assets/js/c3d1f0cd.43748911.js | 1 + assets/js/c5daebe9.57e3eaf1.js | 1 + assets/js/c8caddd1.c09a1e7d.js | 1 + assets/js/c90bf1e8.db11fafc.js | 1 + assets/js/c93dcb87.3428dcd7.js | 1 + assets/js/c9b29382.c2e26cd6.js | 1 + assets/js/cb266b33.dd733855.js | 1 + assets/js/cbe196b2.4b99558d.js | 1 + assets/js/cc88a418.debf1f02.js | 1 + assets/js/ccf7588a.7ca310d4.js | 1 + assets/js/cda37ba5.21794b26.js | 1 + assets/js/d17664a7.93f64476.js | 1 + assets/js/d185ab52.4428bb46.js | 1 + assets/js/d19423a2.bfad80c3.js | 1 + assets/js/d2b7592b.3c905ba4.js | 1 + assets/js/d2eeb42a.df54ed09.js | 1 + assets/js/d547c67b.5e9fddc4.js | 1 + assets/js/d5b0ea4b.3c6603c6.js | 1 + assets/js/d5cd246e.17723f6d.js | 1 + assets/js/d77448ee.e9054d1c.js | 1 + assets/js/df203c0f.d40f6615.js | 1 + assets/js/df3c944d.47411cb6.js | 1 + assets/js/dfbab2f3.47acfba7.js | 1 + assets/js/e023757a.8ac686a4.js | 1 + assets/js/e0edce1a.658a6fe8.js | 1 + assets/js/e1df8231.d15fcb5c.js | 1 + assets/js/e26167e6.5bb19507.js | 1 + assets/js/e2712b99.e6b7fbca.js | 1 + assets/js/e7fdd821.0aea6554.js | 1 + assets/js/e862d0e9.ff1189cf.js | 1 + assets/js/e8ebc025.d321550d.js | 1 + assets/js/e9e63826.5ad2ec79.js | 1 + assets/js/ebdd570f.490a72f9.js | 1 + assets/js/ec96df16.a887ab97.js | 1 + assets/js/edb3a98b.198e2662.js | 1 + assets/js/eee46244.b69274dc.js | 1 + assets/js/f054b415.0c59b1a7.js | 1 + assets/js/f52ed7e3.574da84b.js | 1 + assets/js/f54e894e.8fedba0d.js | 1 + assets/js/f571fee5.08c2d17b.js | 1 + assets/js/f577f5c2.837972fc.js | 1 + assets/js/f59fd0ba.07e13be5.js | 1 + assets/js/f5b92c38.0bf0df97.js | 1 + assets/js/f85d2ba9.8dbe7681.js | 1 + assets/js/f92867ed.9c565ea8.js | 1 + assets/js/fa0b6059.5e02f31b.js | 1 + assets/js/fa17a3e5.6dd1bddc.js | 1 + assets/js/fa3d98bd.5bbcc4ed.js | 1 + assets/js/fb7e7841.024cb53d.js | 1 + assets/js/fba8a418.31a34e34.js | 1 + assets/js/fd734e2c.5ebf1c81.js | 1 + assets/js/fe44757f.d3cb6819.js | 1 + assets/js/main.a150b672.js | 2 + assets/js/main.a150b672.js.LICENSE.txt | 126 + assets/js/runtime~main.5c08b6d2.js | 1 + docs/about/getting_started/cli/faq/index.html | 43 + docs/about/getting_started/cli/index.html | 37 + docs/about/getting_started/index.html | 35 + docs/about/getting_started/library/index.html | 17 + docs/about/getting_started/yaml/index.html | 17 + docs/about/index.html | 25 + docs/about/migration_guides/index.html | 13 + .../migration_guides/v7_to_v8/index.html | 109 + .../migration_guides/v8-1_to_v8-2/index.html | 62 + .../migration_guides/v8-2_to_v8-3/index.html | 14 + .../migration_guides/v8-3_to_v8-4/index.html | 14 + .../migration_guides/v8-5_to_v8-6/index.html | 17 + .../migration_guides/v8-6_to_v8-7/index.html | 14 + .../migration_guides/v8.7_to_v8.8/index.html | 35 + .../migration_guides/v8_to_v81/index.html | 64 + docs/about/miscellaneous/index.html | 43 + .../modelling/examples/advanced/index.html | 144 + .../modelling/examples/drogon/index.html | 73 + docs/about/modelling/examples/index.html | 20 + .../modelling/examples/simple/index.html | 130 + docs/about/modelling/index.html | 17 + .../generator_modelling/index.html | 29 + .../setup/facility_inputs/index.html | 43 + .../facility_inputs/pump_modelling/index.html | 19 + .../pump_modelling/pump_charts/index.html | 67 + .../sampled_compressor_model/index.html | 67 + .../setup/facility_inputs/tabular/index.html | 37 + .../expressions/index.html | 50 + .../setup/file_format_and_syntax/index.html | 55 + .../modelling/setup/fuel_types/index.html | 24 + docs/about/modelling/setup/index.html | 17 + .../compressor/index.html | 22 + .../compressor_system/index.html | 25 + .../index.html | 22 + .../index.html | 22 + .../installations/direct_consumers/index.html | 25 + .../generator_sets_in_calculations/index.html | 63 + .../modelling/setup/installations/index.html | 62 + .../pump_models_in_calculations/index.html | 37 + .../tabular_models_in_calculations/index.html | 25 + .../compressor_charts/index.html | 90 + .../compressor_models_types/index.html | 20 + .../index.html | 44 + .../index.html | 27 + .../index.html | 32 + .../index.html | 80 + .../fixed_speed_pressure_control/index.html | 103 + .../models/compressor_modelling/index.html | 36 + .../setup/models/fluid_model/index.html | 57 + docs/about/modelling/setup/models/index.html | 28 + .../setup/models/turbine_modeling/index.html | 38 + .../modelling/setup/time_series/index.html | 42 + .../modelling/setup/variables/index.html | 30 + .../theory/compressor_modelling/index.html | 55 + docs/about/modelling/theory/index.html | 13 + .../theory/pump_modelling/index.html | 21 + .../workflow/generic_workflow/index.html | 56 + docs/about/modelling/workflow/index.html | 13 + docs/about/references/api/index.html | 14 + docs/about/references/api/libecalc.html | 238 + .../about/references/api/libecalc/common.html | 268 + .../api/libecalc/common/component_info.html | 238 + .../component_info/component_level.html | 431 + .../common/component_info/compressor.html | 363 + .../api/libecalc/common/datetime.html | 237 + .../api/libecalc/common/datetime/utils.html | 461 + .../api/libecalc/common/decorators.html | 238 + .../libecalc/common/decorators/capturer.html | 602 + .../common/decorators/feature_flags.html | 607 + .../common/discriminator_fallback.html | 314 + .../api/libecalc/common/errors.html | 237 + .../libecalc/common/errors/exceptions.html | 915 + .../references/api/libecalc/common/graph.html | 710 + .../references/api/libecalc/common/list.html | 238 + .../api/libecalc/common/list/adjustment.html | 292 + .../api/libecalc/common/list/list_utils.html | 626 + .../api/libecalc/common/logger.html | 258 + .../references/api/libecalc/common/math.html | 238 + .../api/libecalc/common/math/math_utils.html | 409 + .../api/libecalc/common/math/numbers.html | 598 + .../api/libecalc/common/priorities.html | 248 + .../libecalc/common/priority_optimizer.html | 557 + .../api/libecalc/common/run_info.html | 332 + .../libecalc/common/stream_conditions.html | 785 + .../api/libecalc/common/string.html | 237 + .../libecalc/common/string/string_utils.html | 396 + .../libecalc/common/tabular_time_series.html | 612 + .../api/libecalc/common/temporal_model.html | 559 + .../api/libecalc/common/time_utils.html | 1391 + .../references/api/libecalc/common/units.html | 1322 + .../api/libecalc/common/version.html | 516 + .../about/references/api/libecalc/domain.html | 237 + .../libecalc/domain/stream_conditions.html | 740 + docs/about/references/api/libecalc/dto.html | 310 + .../references/api/libecalc/dto/base.html | 1396 + .../api/libecalc/dto/component_graph.html | 551 + .../api/libecalc/dto/components.html | 3094 + .../api/libecalc/dto/core_specs.html | 240 + .../api/libecalc/dto/core_specs/base.html | 237 + .../core_specs/base/operational_settings.html | 341 + .../libecalc/dto/core_specs/compressor.html | 237 + .../compressor/operational_settings.html | 394 + .../api/libecalc/dto/core_specs/pump.html | 237 + .../core_specs/pump/operational_settings.html | 394 + .../api/libecalc/dto/core_specs/system.html | 233 + .../references/api/libecalc/dto/emission.html | 379 + .../references/api/libecalc/dto/models.html | 332 + .../api/libecalc/dto/models/base.html | 423 + .../api/libecalc/dto/models/chart.html | 944 + .../api/libecalc/dto/models/compressor.html | 283 + .../libecalc/dto/models/compressor/base.html | 485 + .../libecalc/dto/models/compressor/chart.html | 262 + .../libecalc/dto/models/compressor/fluid.html | 762 + .../dto/models/compressor/sampled.html | 454 + .../libecalc/dto/models/compressor/stage.html | 522 + .../libecalc/dto/models/compressor/train.html | 999 + .../libecalc/dto/models/consumer_system.html | 1079 + .../api/libecalc/dto/models/direct.html | 398 + .../libecalc/dto/models/generator_set.html | 416 + .../api/libecalc/dto/models/pump.html | 442 + .../api/libecalc/dto/models/sampled.html | 315 + .../api/libecalc/dto/models/tabulated.html | 559 + .../api/libecalc/dto/models/turbine.html | 379 + .../api/libecalc/dto/node_info.html | 343 + .../references/api/libecalc/dto/result.html | 262 + .../api/libecalc/dto/result/base.html | 335 + .../api/libecalc/dto/result/emission.html | 640 + .../api/libecalc/dto/result/results.html | 2281 + .../dto/result/tabular_time_series.html | 671 + .../api/libecalc/dto/result/types.html | 455 + .../api/libecalc/dto/result_options.html | 343 + .../references/api/libecalc/dto/types.html | 2907 + .../references/api/libecalc/dto/utils.html | 238 + .../api/libecalc/dto/utils/aggregators.html | 533 + .../api/libecalc/dto/utils/validators.html | 405 + .../api/libecalc/dto/variables.html | 545 + .../references/api/libecalc/examples.html | 244 + .../api/libecalc/examples/advanced.html | 304 + .../api/libecalc/examples/simple.html | 357 + .../references/api/libecalc/expression.html | 243 + .../api/libecalc/expression/expression.html | 873 + .../expression/expression_evaluator.html | 1608 + .../api/libecalc/infrastructure.html | 238 + .../api/libecalc/infrastructure/file_io.html | 2356 + .../libecalc/infrastructure/file_utils.html | 773 + .../references/api/libecalc/version.html | 285 + .../about/references/cli_reference/index.html | 106 + docs/about/references/index.html | 13 + .../references/keywords/ADJUSTMENT/index.html | 35 + .../references/keywords/CATEGORY/index.html | 37 + .../keywords/COMPRESSOR_MODEL/index.html | 22 + .../keywords/COMPRESSOR_SYSTEM/index.html | 31 + .../COMPRESSOR_TRAIN_MODEL/index.html | 26 + .../references/keywords/CONDITION/index.html | 32 + .../references/keywords/CONDITIONS/index.html | 22 + .../references/keywords/CONSTANT/index.html | 28 + .../references/keywords/CONSUMERS/index.html | 25 + .../keywords/CONSUMPTION_RATE_TYPE/index.html | 42 + .../keywords/CONTROL_MARGIN/index.html | 53 + .../keywords/CONTROL_MARGIN_UNIT/index.html | 26 + .../references/keywords/CROSSOVER/index.html | 24 + .../references/keywords/CURVE/index.html | 20 + .../references/keywords/CURVES/index.html | 20 + .../keywords/DIRECT_EMITTERS/index.html | 30 + .../keywords/DISCHARGE_PRESSURE/index.html | 26 + .../DOWNSTREAM_PRESSURE_CONTROL/index.html | 25 + .../references/keywords/EFFICIENCY/index.html | 29 + .../keywords/ELECTRICITY2FUEL/index.html | 36 + .../references/keywords/EMISSION/index.html | 30 + .../references/keywords/EMISSIONS/index.html | 25 + .../keywords/EMISSION_NAME/index.html | 30 + .../keywords/EMISSION_RATE/index.html | 27 + .../keywords/EMITTER_MODEL/index.html | 32 + docs/about/references/keywords/END/index.html | 28 + .../keywords/ENERGYFUNCTION/index.html | 30 + .../keywords/ENERGY_USAGE_MODEL/index.html | 38 + .../references/keywords/EXPRESSION/index.html | 25 + .../keywords/EXTRAPOLATION/index.html | 27 + .../keywords/FACILITY_INPUTS/index.html | 34 + .../references/keywords/FACTOR/index.html | 39 + .../about/references/keywords/FILE/index.html | 22 + .../keywords/FLUID_DENSITY/index.html | 24 + .../keywords/FLUID_MODEL/index.html | 19 + .../about/references/keywords/FUEL/index.html | 29 + .../keywords/FUELCONSUMERS/index.html | 26 + .../references/keywords/FUELRATE/index.html | 28 + .../references/keywords/FUEL_TYPES/index.html | 21 + .../keywords/GENERATORSETS/index.html | 24 + .../references/keywords/HCEXPORT/index.html | 36 + .../about/references/keywords/HEAD/index.html | 30 + .../keywords/HEAD_MARGIN/index.html | 29 + .../keywords/INFLUENCE_TIME_VECTOR/index.html | 23 + .../keywords/INLET_TEMPERATURE/index.html | 22 + .../keywords/INSTALLATIONS/index.html | 19 + .../keywords/INTERPOLATION_TYPE/index.html | 47 + .../INTERSTAGE_CONTROL_PRESSURE/index.html | 37 + .../about/references/keywords/LOAD/index.html | 24 + .../keywords/LOWER_HEATING_VALUE/index.html | 21 + .../MAXIMUM_DISCHARGE_PRESSURE/index.html | 27 + .../index.html | 26 + .../references/keywords/MODELS/index.html | 35 + .../about/references/keywords/NAME/index.html | 25 + .../keywords/OPERATIONAL_SETTINGS/index.html | 83 + .../keywords/POWERLOSSFACTOR/index.html | 28 + .../POWER_ADJUSTMENT_CONSTANT/index.html | 21 + .../keywords/PRESSURE_CONTROL/index.html | 28 + .../references/keywords/PUMPS/index.html | 25 + .../about/references/keywords/RATE/index.html | 38 + .../keywords/RATE_FRACTIONS/index.html | 21 + .../keywords/RATE_PER_STREAM/index.html | 24 + .../references/keywords/REGULARITY/index.html | 60 + .../references/keywords/STAGES/index.html | 37 + .../references/keywords/START/index.html | 32 + .../references/keywords/STREAM/index.html | 24 + .../references/keywords/STREAMS/index.html | 27 + .../keywords/SUCTION_PRESSURE/index.html | 27 + .../keywords/TIME_SERIES/index.html | 32 + .../keywords/TOTAL_SYSTEM_RATE/index.html | 25 + .../keywords/TURBINE_EFFICIENCIES/index.html | 20 + .../keywords/TURBINE_LOAD/index.html | 20 + .../keywords/TURBINE_MODEL/index.html | 20 + .../about/references/keywords/TYPE/index.html | 53 + .../references/keywords/UNITS/index.html | 26 + .../UPSTREAM_PRESSURE_CONTROL/index.html | 25 + .../references/keywords/VARIABLES/index.html | 18 + .../keywords/VENTING_EMITTERS/index.html | 39 + .../references/keywords/include/index.html | 37 + docs/about/references/keywords/index.html | 18 + docs/category/documentation/index.html | 13 + docs/category/guides/index.html | 13 + docs/changelog/index.html | 597 + docs/changelog/latest/index.html | 16 + docs/changelog/separator/index.html | 13 + docs/changelog/v7-0-release/index.html | 65 + docs/changelog/v7-1-release/index.html | 63 + docs/changelog/v7-2-release/index.html | 59 + docs/changelog/v7-3-release/index.html | 33 + docs/changelog/v7-4-release/index.html | 64 + docs/changelog/v7-5-release/index.html | 66 + docs/changelog/v7-6-release/index.html | 18 + docs/changelog/v8.0-release/index.html | 62 + docs/changelog/v8.1-release/index.html | 32 + docs/changelog/v8.10-release/index.html | 21 + docs/changelog/v8.2-release/index.html | 28 + docs/changelog/v8.3-release/index.html | 29 + docs/changelog/v8.4-release/index.html | 26 + docs/changelog/v8.5-release/index.html | 28 + docs/changelog/v8.6-release/index.html | 28 + docs/changelog/v8.7-release/index.html | 29 + docs/changelog/v8.8-release/index.html | 21 + .../documentation/index.html | 44 + .../documentation-guide/markdown/index.html | 21 + docs/contribute/get-started/index.html | 92 + .../guides/conventional-commits/index.html | 24 + docs/contribute/guides/git/index.html | 135 + docs/tags/e-calc/index.html | 13 + docs/tags/index.html | 13 + docs/tags/release/index.html | 13 + img/docs/asgb/asgb_lpp3_pd.png | Bin 0 -> 8296 bytes ...sgb_lpp3_predef_fuel_result_comparison.png | Bin 0 -> 150658 bytes img/docs/asgb/asgb_lpp3_predef_stage1.png | Bin 0 -> 19860 bytes .../asgb/asgb_lpp3_predef_stage1_2031.png | Bin 0 -> 19734 bytes img/docs/asgb/asgb_lpp3_predef_stage2.png | Bin 0 -> 18719 bytes .../asgb/asgb_lpp3_predef_stage2_2031.png | Bin 0 -> 16372 bytes img/docs/asgb/asgb_lpp3_ps.png | Bin 0 -> 9080 bytes img/docs/asgb/asgb_lpp3_sketch.png | Bin 0 -> 62437 bytes .../asgb_lpp3_sys26_capacity_and_rate.png | Bin 0 -> 11469 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd200.png | Bin 0 -> 7903 bytes .../asgb_lpp3_sys26_maxcapacity_at_pd250.png | Bin 0 -> 6555 bytes ...gb_lpp3_sys26_maxcapacity_at_pdsurface.png | Bin 0 -> 25407 bytes .../asgb_lpp3_sys26_stage1_at_ps31pd250.png | Bin 0 -> 40153 bytes .../asgb_lpp3_sys26_stage2_at_ps31pd250.png | Bin 0 -> 50587 bytes .../asgb_lpp3_sys27_capacity_and_rate.png | Bin 0 -> 13313 bytes .../asgb_lpp3_sys27_crossover_and_mode.png | Bin 0 -> 12063 bytes img/docs/asgb/asgb_lpp3_sys27_gasrate.png | Bin 0 -> 12245 bytes .../asgb/asgb_lpp3_sys27_rate_and_mode.png | Bin 0 -> 16959 bytes img/docs/asgb/asgb_lpp3_timeline.png | Bin 0 -> 12064 bytes img/docs/asgb/asgb_lpp3_unisim_stage1.png | Bin 0 -> 40526 bytes .../asgb/asgb_lpp3_unisim_stage1_filtered.png | Bin 0 -> 28371 bytes img/docs/asgb/asgb_lpp3_unisim_stage2.png | Bin 0 -> 46287 bytes .../asgb/asgb_lpp3_unisim_stage2_filtered.png | Bin 0 -> 40488 bytes img/docs/asgb/asgb_sys27a_unisim_model.png | Bin 0 -> 11965 bytes .../asgb_sys27a_unisim_model_filtered.png | Bin 0 -> 7718 bytes .../asgb/ecalc_generic_chart_normalized.png | Bin 0 -> 21903 bytes .../asgb/ecalc_generic_chart_original.png | Bin 0 -> 26035 bytes img/docs/changed_rate_resampling.png | Bin 0 -> 237031 bytes img/docs/interpolation_plot.png | Bin 0 -> 16617 bytes img/docusaurus.png | Bin 0 -> 5142 bytes img/favicon.svg | 3 + img/logo.svg | 16 + img/undraw_docusaurus_mountain.svg | 171 + img/undraw_docusaurus_react.svg | 170 + img/undraw_docusaurus_tree.svg | 40 + index.html | 13 + katex/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 63632 bytes katex/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 33516 bytes katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 28076 bytes katex/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 12368 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 7716 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 6912 bytes katex/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 12344 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 7656 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 6908 bytes katex/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 19584 bytes katex/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 13296 bytes katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 11348 bytes katex/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 19572 bytes katex/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 13208 bytes katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 11316 bytes katex/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 51336 bytes katex/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 29912 bytes katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 25324 bytes katex/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 32968 bytes katex/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 19412 bytes katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 16780 bytes katex/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 33580 bytes katex/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 19676 bytes katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 16988 bytes katex/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 53580 bytes katex/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 30772 bytes katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 26272 bytes katex/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 31196 bytes katex/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 18668 bytes katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 16400 bytes katex/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 31308 bytes katex/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 18748 bytes katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 16440 bytes katex/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 24504 bytes katex/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 14408 bytes katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 12216 bytes katex/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 22364 bytes katex/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 14112 bytes katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 12028 bytes katex/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 19436 bytes katex/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 12316 bytes katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 10344 bytes katex/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 16648 bytes katex/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 10588 bytes katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 9644 bytes katex/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12228 bytes katex/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6496 bytes katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5468 bytes katex/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 11508 bytes katex/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6188 bytes katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5208 bytes katex/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 7588 bytes katex/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4420 bytes katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3624 bytes katex/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 10364 bytes katex/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 5980 bytes katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4928 bytes katex/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 27556 bytes katex/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 16028 bytes katex/fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 13568 bytes katex/katex.min.css | 1 + search-index.json | 1 + search/index.html | 13 + sitemap.xml | 1 + versions/index.html | 13 + 628 files changed, 339211 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 assets/css/styles.7d0c748d.css create mode 100644 assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png create mode 100644 assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png create mode 100644 assets/images/compressor_chart_surge_control_margin_line-98e32f3b0d5332a371ec4bb2dbc66da8.png create mode 100644 assets/images/control_mechanisms_variable_speed_compressor_chart-74501f10294f5dd339dba1a305bbe3f6.png create mode 100644 assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png create mode 100644 assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png create mode 100644 assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png create mode 100644 assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg create mode 100644 assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png create mode 100644 assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png create mode 100644 assets/images/make_recirculation_pressure_control_plot-527cac79a8c53527147492b170308459.png create mode 100644 assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png create mode 100644 assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png create mode 100644 assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png create mode 100644 assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG create mode 100644 assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG create mode 100644 assets/images/regularity-3e43516a1e0246a2e125d4980006b137.png create mode 100644 assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg create mode 100644 assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png create mode 100644 assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png create mode 100644 assets/js/00440000.cceb5e85.js create mode 100644 assets/js/00bdc23f.a7fe7f57.js create mode 100644 assets/js/0425b884.948254ce.js create mode 100644 assets/js/0477162f.6c398dc7.js create mode 100644 assets/js/06adec10.4c91d0a5.js create mode 100644 assets/js/06dd1efa.556a007e.js create mode 100644 assets/js/0745e7f0.012598cb.js create mode 100644 assets/js/074935d7.787161b6.js create mode 100644 assets/js/07b341f3.a32e4fb7.js create mode 100644 assets/js/084f7ebf.d2478f08.js create mode 100644 assets/js/0aeda122.cbb99604.js create mode 100644 assets/js/0f7b5825.3ef7c2f4.js create mode 100644 assets/js/0fd76486.e7925637.js create mode 100644 assets/js/10c684b0.11d7ac8c.js create mode 100644 assets/js/11516e85.7d67d8fc.js create mode 100644 assets/js/1287dd43.379819cf.js create mode 100644 assets/js/1300feb7.787000b1.js create mode 100644 assets/js/14eb3368.1716a525.js create mode 100644 assets/js/15962da1.478c8ccb.js create mode 100644 assets/js/163041ea.3ded8d57.js create mode 100644 assets/js/1644.956c5f9d.js create mode 100644 assets/js/1736.5a1f964c.js create mode 100644 assets/js/1772.dbafd945.js create mode 100644 assets/js/17896441.1c4eee25.js create mode 100644 assets/js/17896441.1c4eee25.js.LICENSE.txt create mode 100644 assets/js/17e50ecd.84c65831.js create mode 100644 assets/js/18b0ec42.7932013a.js create mode 100644 assets/js/1a4e3797.b588d37a.js create mode 100644 assets/js/1c663d3d.3b2eb3c1.js create mode 100644 assets/js/1df93b7f.9c9986b4.js create mode 100644 assets/js/1e7de7fe.48c2fda9.js create mode 100644 assets/js/1f60d0d4.12f89e4f.js create mode 100644 assets/js/1f7805b6.cb8ffae1.js create mode 100644 assets/js/2237.660f8cae.js create mode 100644 assets/js/22f0e129.700978f3.js create mode 100644 assets/js/237.c377d557.js create mode 100644 assets/js/2465.bf434e4e.js create mode 100644 assets/js/2661.122dc9a7.js create mode 100644 assets/js/2689.61fc2af9.js create mode 100644 assets/js/2781f0ad.5961fd92.js create mode 100644 assets/js/29367e59.5e394ff1.js create mode 100644 assets/js/295.c0a028c4.js create mode 100644 assets/js/295.e011aaa9.js create mode 100644 assets/js/2955.1a515cc6.js create mode 100644 assets/js/295f424e.f4b1ea30.js create mode 100644 assets/js/2995.5d18433e.js create mode 100644 assets/js/29d00dd8.f86ec347.js create mode 100644 assets/js/2b15d891.72863a33.js create mode 100644 assets/js/2b2be347.ab9ace89.js create mode 100644 assets/js/2c19a041.f0278a48.js create mode 100644 assets/js/2c73e373.a47cc11b.js create mode 100644 assets/js/2ce3b5da.c94b7f25.js create mode 100644 assets/js/2cedaf2f.533693ab.js create mode 100644 assets/js/2df92a48.3a6cca1e.js create mode 100644 assets/js/2f04f592.7ecac6a9.js create mode 100644 assets/js/3261da49.5ea59cab.js create mode 100644 assets/js/33498b04.af3705af.js create mode 100644 assets/js/3409ab5c.da6f95e5.js create mode 100644 assets/js/3449.f5c6982a.js create mode 100644 assets/js/3594.f73537cc.js create mode 100644 assets/js/3720c009.e2cfbcc1.js create mode 100644 assets/js/3727.85fa440d.js create mode 100644 assets/js/381.d1de7a2e.js create mode 100644 assets/js/3810e8e5.936df7c3.js create mode 100644 assets/js/382d59b5.fac6029d.js create mode 100644 assets/js/38d592cf.39635619.js create mode 100644 assets/js/3920.5e403fe8.js create mode 100644 assets/js/3952.a9404373.js create mode 100644 assets/js/3966.e4cb16cd.js create mode 100644 assets/js/3aeef25a.1896e4de.js create mode 100644 assets/js/3b0e82f8.eaddd6fc.js create mode 100644 assets/js/3e38e310.bc8854f8.js create mode 100644 assets/js/3fbb770c.39674007.js create mode 100644 assets/js/40d6382c.6514d67d.js create mode 100644 assets/js/4147f87e.4efdf1e5.js create mode 100644 assets/js/417.defab4a9.js create mode 100644 assets/js/41d1792a.1467e923.js create mode 100644 assets/js/428320b6.53300601.js create mode 100644 assets/js/43a1031a.8029b5e8.js create mode 100644 assets/js/43a26e71.875cfcf4.js create mode 100644 assets/js/45c974ba.3fe59b9a.js create mode 100644 assets/js/465.e0f045fd.js create mode 100644 assets/js/47daf389.f427e7eb.js create mode 100644 assets/js/496.499e45e0.js create mode 100644 assets/js/496ed8d5.a66004a5.js create mode 100644 assets/js/497.ad2ad4f4.js create mode 100644 assets/js/498bfcff.7cb5395f.js create mode 100644 assets/js/4aa4fc36.546789e2.js create mode 100644 assets/js/4b5a01f9.f1b16e5a.js create mode 100644 assets/js/4b80f681.649f2d17.js create mode 100644 assets/js/4c3c1dc2.2d79bead.js create mode 100644 assets/js/4da8ac19.740674be.js create mode 100644 assets/js/4ee97ba8.5de44dbc.js create mode 100644 assets/js/502e1773.15957f54.js create mode 100644 assets/js/5054.62d51cca.js create mode 100644 assets/js/5114.198e5e9e.js create mode 100644 assets/js/51ad0f66.4bc6fee4.js create mode 100644 assets/js/54.232956f2.js create mode 100644 assets/js/54094f37.9512c0c0.js create mode 100644 assets/js/54d7341e.d7e29d8d.js create mode 100644 assets/js/5525.1fda8ddb.js create mode 100644 assets/js/55960ee5.ffe88e68.js create mode 100644 assets/js/5718.548e327d.js create mode 100644 assets/js/577.c4cd051f.js create mode 100644 assets/js/577efb1d.bff2fbed.js create mode 100644 assets/js/594.eec51fb4.js create mode 100644 assets/js/5989d566.0ca83421.js create mode 100644 assets/js/5a5e553d.66840528.js create mode 100644 assets/js/5c08a402.b9d91040.js create mode 100644 assets/js/5c8ec56d.8762b795.js create mode 100644 assets/js/5e10e9e1.7ace1ffa.js create mode 100644 assets/js/5e3ed04b.4cc7e731.js create mode 100644 assets/js/5e95c892.3970a74d.js create mode 100644 assets/js/60746895.21f8ec3d.js create mode 100644 assets/js/61639be2.ecdff55a.js create mode 100644 assets/js/63ecd22d.27ad13ee.js create mode 100644 assets/js/661.bc10841b.js create mode 100644 assets/js/66286265.54c83ec6.js create mode 100644 assets/js/66a649c0.fe4ad4d1.js create mode 100644 assets/js/6733.06beca23.js create mode 100644 assets/js/676abc7a.03893271.js create mode 100644 assets/js/689.a8f72dd5.js create mode 100644 assets/js/69fd9be6.5e6f3b90.js create mode 100644 assets/js/6adcc868.7dba0b56.js create mode 100644 assets/js/6bd3279d.a0920aed.js create mode 100644 assets/js/70f31d65.fe06b9e1.js create mode 100644 assets/js/718.c8a6130e.js create mode 100644 assets/js/7180.ddfad669.js create mode 100644 assets/js/72083b41.ebdce974.js create mode 100644 assets/js/721cfe60.59c0aa13.js create mode 100644 assets/js/727.ff3685b0.js create mode 100644 assets/js/733.97aa22de.js create mode 100644 assets/js/7381.77f96fa1.js create mode 100644 assets/js/7497.e58bfc8c.js create mode 100644 assets/js/7497.e58bfc8c.js.LICENSE.txt create mode 100644 assets/js/7514af75.19e992cc.js create mode 100644 assets/js/7557b935.3c07d124.js create mode 100644 assets/js/7b02141e.f6863e42.js create mode 100644 assets/js/7c623a68.59eed68b.js create mode 100644 assets/js/7cebed78.799c5db3.js create mode 100644 assets/js/7d3b81bb.d3992b48.js create mode 100644 assets/js/7db788f5.2315ec42.js create mode 100644 assets/js/7e6991bb.55d8ba6f.js create mode 100644 assets/js/817.75222051.js create mode 100644 assets/js/81dd00c5.6a7d0b4d.js create mode 100644 assets/js/8314.51d97488.js create mode 100644 assets/js/841adc37.c737b647.js create mode 100644 assets/js/8443.c83222a4.js create mode 100644 assets/js/8443.c83222a4.js.LICENSE.txt create mode 100644 assets/js/85.0502304d.js create mode 100644 assets/js/85.cab88e4e.js create mode 100644 assets/js/858.75944404.js create mode 100644 assets/js/86262f09.b577aac6.js create mode 100644 assets/js/880bbd08.13a8ec3c.js create mode 100644 assets/js/8817.619f555e.js create mode 100644 assets/js/8932.33d18fca.js create mode 100644 assets/js/8961bfac.d8e88269.js create mode 100644 assets/js/90184672.c0455df2.js create mode 100644 assets/js/905.bff7f89c.js create mode 100644 assets/js/9206.44aba7e5.js create mode 100644 assets/js/935f2afb.bd203e90.js create mode 100644 assets/js/9417.f108e646.js create mode 100644 assets/js/9496.ce93e692.js create mode 100644 assets/js/952.2576dcf8.js create mode 100644 assets/js/955.0221cbc8.js create mode 100644 assets/js/96533a10.c15c51f0.js create mode 100644 assets/js/966.e26e751e.js create mode 100644 assets/js/97732f4b.b6556d43.js create mode 100644 assets/js/977fea76.20ac3fb4.js create mode 100644 assets/js/995.b5d03916.js create mode 100644 assets/js/9a118db7.62ebf45b.js create mode 100644 assets/js/9e136365.e03d4aca.js create mode 100644 assets/js/9e4a10de.2da2b698.js create mode 100644 assets/js/9e7755e6.acc3cd32.js create mode 100644 assets/js/9e91bf8d.760beddb.js create mode 100644 assets/js/a2e97e20.bbf524d9.js create mode 100644 assets/js/a5dcc804.8a68248d.js create mode 100644 assets/js/a7bd4aaa.2d920f9f.js create mode 100644 assets/js/a94703ab.e28c5e5d.js create mode 100644 assets/js/ad129716.ec7faabf.js create mode 100644 assets/js/af105519.55536628.js create mode 100644 assets/js/b0a5d2c7.758cd55a.js create mode 100644 assets/js/b15ba3bd.1515f234.js create mode 100644 assets/js/b2781c74.a424ad9a.js create mode 100644 assets/js/b2b17913.970b4d8a.js create mode 100644 assets/js/b677d687.464b512b.js create mode 100644 assets/js/b8c59810.aec9431a.js create mode 100644 assets/js/bb45b332.89053c6c.js create mode 100644 assets/js/bdf25f4c.fe9eff3a.js create mode 100644 assets/js/bfdf430b.79bacaf3.js create mode 100644 assets/js/c21bc46a.dffda344.js create mode 100644 assets/js/c3d1f0cd.43748911.js create mode 100644 assets/js/c5daebe9.57e3eaf1.js create mode 100644 assets/js/c8caddd1.c09a1e7d.js create mode 100644 assets/js/c90bf1e8.db11fafc.js create mode 100644 assets/js/c93dcb87.3428dcd7.js create mode 100644 assets/js/c9b29382.c2e26cd6.js create mode 100644 assets/js/cb266b33.dd733855.js create mode 100644 assets/js/cbe196b2.4b99558d.js create mode 100644 assets/js/cc88a418.debf1f02.js create mode 100644 assets/js/ccf7588a.7ca310d4.js create mode 100644 assets/js/cda37ba5.21794b26.js create mode 100644 assets/js/d17664a7.93f64476.js create mode 100644 assets/js/d185ab52.4428bb46.js create mode 100644 assets/js/d19423a2.bfad80c3.js create mode 100644 assets/js/d2b7592b.3c905ba4.js create mode 100644 assets/js/d2eeb42a.df54ed09.js create mode 100644 assets/js/d547c67b.5e9fddc4.js create mode 100644 assets/js/d5b0ea4b.3c6603c6.js create mode 100644 assets/js/d5cd246e.17723f6d.js create mode 100644 assets/js/d77448ee.e9054d1c.js create mode 100644 assets/js/df203c0f.d40f6615.js create mode 100644 assets/js/df3c944d.47411cb6.js create mode 100644 assets/js/dfbab2f3.47acfba7.js create mode 100644 assets/js/e023757a.8ac686a4.js create mode 100644 assets/js/e0edce1a.658a6fe8.js create mode 100644 assets/js/e1df8231.d15fcb5c.js create mode 100644 assets/js/e26167e6.5bb19507.js create mode 100644 assets/js/e2712b99.e6b7fbca.js create mode 100644 assets/js/e7fdd821.0aea6554.js create mode 100644 assets/js/e862d0e9.ff1189cf.js create mode 100644 assets/js/e8ebc025.d321550d.js create mode 100644 assets/js/e9e63826.5ad2ec79.js create mode 100644 assets/js/ebdd570f.490a72f9.js create mode 100644 assets/js/ec96df16.a887ab97.js create mode 100644 assets/js/edb3a98b.198e2662.js create mode 100644 assets/js/eee46244.b69274dc.js create mode 100644 assets/js/f054b415.0c59b1a7.js create mode 100644 assets/js/f52ed7e3.574da84b.js create mode 100644 assets/js/f54e894e.8fedba0d.js create mode 100644 assets/js/f571fee5.08c2d17b.js create mode 100644 assets/js/f577f5c2.837972fc.js create mode 100644 assets/js/f59fd0ba.07e13be5.js create mode 100644 assets/js/f5b92c38.0bf0df97.js create mode 100644 assets/js/f85d2ba9.8dbe7681.js create mode 100644 assets/js/f92867ed.9c565ea8.js create mode 100644 assets/js/fa0b6059.5e02f31b.js create mode 100644 assets/js/fa17a3e5.6dd1bddc.js create mode 100644 assets/js/fa3d98bd.5bbcc4ed.js create mode 100644 assets/js/fb7e7841.024cb53d.js create mode 100644 assets/js/fba8a418.31a34e34.js create mode 100644 assets/js/fd734e2c.5ebf1c81.js create mode 100644 assets/js/fe44757f.d3cb6819.js create mode 100644 assets/js/main.a150b672.js create mode 100644 assets/js/main.a150b672.js.LICENSE.txt create mode 100644 assets/js/runtime~main.5c08b6d2.js create mode 100644 docs/about/getting_started/cli/faq/index.html create mode 100644 docs/about/getting_started/cli/index.html create mode 100644 docs/about/getting_started/index.html create mode 100644 docs/about/getting_started/library/index.html create mode 100644 docs/about/getting_started/yaml/index.html create mode 100644 docs/about/index.html create mode 100644 docs/about/migration_guides/index.html create mode 100644 docs/about/migration_guides/v7_to_v8/index.html create mode 100644 docs/about/migration_guides/v8-1_to_v8-2/index.html create mode 100644 docs/about/migration_guides/v8-2_to_v8-3/index.html create mode 100644 docs/about/migration_guides/v8-3_to_v8-4/index.html create mode 100644 docs/about/migration_guides/v8-5_to_v8-6/index.html create mode 100644 docs/about/migration_guides/v8-6_to_v8-7/index.html create mode 100644 docs/about/migration_guides/v8.7_to_v8.8/index.html create mode 100644 docs/about/migration_guides/v8_to_v81/index.html create mode 100644 docs/about/miscellaneous/index.html create mode 100644 docs/about/modelling/examples/advanced/index.html create mode 100644 docs/about/modelling/examples/drogon/index.html create mode 100644 docs/about/modelling/examples/index.html create mode 100644 docs/about/modelling/examples/simple/index.html create mode 100644 docs/about/modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/generator_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html create mode 100644 docs/about/modelling/setup/facility_inputs/tabular/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/expressions/index.html create mode 100644 docs/about/modelling/setup/file_format_and_syntax/index.html create mode 100644 docs/about/modelling/setup/fuel_types/index.html create mode 100644 docs/about/modelling/setup/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/installations/direct_consumers/index.html create mode 100644 docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/index.html create mode 100644 docs/about/modelling/setup/installations/pump_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html create mode 100644 docs/about/modelling/setup/models/compressor_modelling/index.html create mode 100644 docs/about/modelling/setup/models/fluid_model/index.html create mode 100644 docs/about/modelling/setup/models/index.html create mode 100644 docs/about/modelling/setup/models/turbine_modeling/index.html create mode 100644 docs/about/modelling/setup/time_series/index.html create mode 100644 docs/about/modelling/setup/variables/index.html create mode 100644 docs/about/modelling/theory/compressor_modelling/index.html create mode 100644 docs/about/modelling/theory/index.html create mode 100644 docs/about/modelling/theory/pump_modelling/index.html create mode 100644 docs/about/modelling/workflow/generic_workflow/index.html create mode 100644 docs/about/modelling/workflow/index.html create mode 100644 docs/about/references/api/index.html create mode 100644 docs/about/references/api/libecalc.html create mode 100644 docs/about/references/api/libecalc/common.html create mode 100644 docs/about/references/api/libecalc/common/component_info.html create mode 100644 docs/about/references/api/libecalc/common/component_info/component_level.html create mode 100644 docs/about/references/api/libecalc/common/component_info/compressor.html create mode 100644 docs/about/references/api/libecalc/common/datetime.html create mode 100644 docs/about/references/api/libecalc/common/datetime/utils.html create mode 100644 docs/about/references/api/libecalc/common/decorators.html create mode 100644 docs/about/references/api/libecalc/common/decorators/capturer.html create mode 100644 docs/about/references/api/libecalc/common/decorators/feature_flags.html create mode 100644 docs/about/references/api/libecalc/common/discriminator_fallback.html create mode 100644 docs/about/references/api/libecalc/common/errors.html create mode 100644 docs/about/references/api/libecalc/common/errors/exceptions.html create mode 100644 docs/about/references/api/libecalc/common/graph.html create mode 100644 docs/about/references/api/libecalc/common/list.html create mode 100644 docs/about/references/api/libecalc/common/list/adjustment.html create mode 100644 docs/about/references/api/libecalc/common/list/list_utils.html create mode 100644 docs/about/references/api/libecalc/common/logger.html create mode 100644 docs/about/references/api/libecalc/common/math.html create mode 100644 docs/about/references/api/libecalc/common/math/math_utils.html create mode 100644 docs/about/references/api/libecalc/common/math/numbers.html create mode 100644 docs/about/references/api/libecalc/common/priorities.html create mode 100644 docs/about/references/api/libecalc/common/priority_optimizer.html create mode 100644 docs/about/references/api/libecalc/common/run_info.html create mode 100644 docs/about/references/api/libecalc/common/stream_conditions.html create mode 100644 docs/about/references/api/libecalc/common/string.html create mode 100644 docs/about/references/api/libecalc/common/string/string_utils.html create mode 100644 docs/about/references/api/libecalc/common/tabular_time_series.html create mode 100644 docs/about/references/api/libecalc/common/temporal_model.html create mode 100644 docs/about/references/api/libecalc/common/time_utils.html create mode 100644 docs/about/references/api/libecalc/common/units.html create mode 100644 docs/about/references/api/libecalc/common/version.html create mode 100644 docs/about/references/api/libecalc/domain.html create mode 100644 docs/about/references/api/libecalc/domain/stream_conditions.html create mode 100644 docs/about/references/api/libecalc/dto.html create mode 100644 docs/about/references/api/libecalc/dto/base.html create mode 100644 docs/about/references/api/libecalc/dto/component_graph.html create mode 100644 docs/about/references/api/libecalc/dto/components.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/base.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/compressor.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/pump.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html create mode 100644 docs/about/references/api/libecalc/dto/core_specs/system.html create mode 100644 docs/about/references/api/libecalc/dto/emission.html create mode 100644 docs/about/references/api/libecalc/dto/models.html create mode 100644 docs/about/references/api/libecalc/dto/models/base.html create mode 100644 docs/about/references/api/libecalc/dto/models/chart.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/base.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/chart.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/fluid.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/sampled.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/stage.html create mode 100644 docs/about/references/api/libecalc/dto/models/compressor/train.html create mode 100644 docs/about/references/api/libecalc/dto/models/consumer_system.html create mode 100644 docs/about/references/api/libecalc/dto/models/direct.html create mode 100644 docs/about/references/api/libecalc/dto/models/generator_set.html create mode 100644 docs/about/references/api/libecalc/dto/models/pump.html create mode 100644 docs/about/references/api/libecalc/dto/models/sampled.html create mode 100644 docs/about/references/api/libecalc/dto/models/tabulated.html create mode 100644 docs/about/references/api/libecalc/dto/models/turbine.html create mode 100644 docs/about/references/api/libecalc/dto/node_info.html create mode 100644 docs/about/references/api/libecalc/dto/result.html create mode 100644 docs/about/references/api/libecalc/dto/result/base.html create mode 100644 docs/about/references/api/libecalc/dto/result/emission.html create mode 100644 docs/about/references/api/libecalc/dto/result/results.html create mode 100644 docs/about/references/api/libecalc/dto/result/tabular_time_series.html create mode 100644 docs/about/references/api/libecalc/dto/result/types.html create mode 100644 docs/about/references/api/libecalc/dto/result_options.html create mode 100644 docs/about/references/api/libecalc/dto/types.html create mode 100644 docs/about/references/api/libecalc/dto/utils.html create mode 100644 docs/about/references/api/libecalc/dto/utils/aggregators.html create mode 100644 docs/about/references/api/libecalc/dto/utils/validators.html create mode 100644 docs/about/references/api/libecalc/dto/variables.html create mode 100644 docs/about/references/api/libecalc/examples.html create mode 100644 docs/about/references/api/libecalc/examples/advanced.html create mode 100644 docs/about/references/api/libecalc/examples/simple.html create mode 100644 docs/about/references/api/libecalc/expression.html create mode 100644 docs/about/references/api/libecalc/expression/expression.html create mode 100644 docs/about/references/api/libecalc/expression/expression_evaluator.html create mode 100644 docs/about/references/api/libecalc/infrastructure.html create mode 100644 docs/about/references/api/libecalc/infrastructure/file_io.html create mode 100644 docs/about/references/api/libecalc/infrastructure/file_utils.html create mode 100644 docs/about/references/api/libecalc/version.html create mode 100644 docs/about/references/cli_reference/index.html create mode 100644 docs/about/references/index.html create mode 100644 docs/about/references/keywords/ADJUSTMENT/index.html create mode 100644 docs/about/references/keywords/CATEGORY/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_MODEL/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html create mode 100644 docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html create mode 100644 docs/about/references/keywords/CONDITION/index.html create mode 100644 docs/about/references/keywords/CONDITIONS/index.html create mode 100644 docs/about/references/keywords/CONSTANT/index.html create mode 100644 docs/about/references/keywords/CONSUMERS/index.html create mode 100644 docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html create mode 100644 docs/about/references/keywords/CONTROL_MARGIN/index.html create mode 100644 docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html create mode 100644 docs/about/references/keywords/CROSSOVER/index.html create mode 100644 docs/about/references/keywords/CURVE/index.html create mode 100644 docs/about/references/keywords/CURVES/index.html create mode 100644 docs/about/references/keywords/DIRECT_EMITTERS/index.html create mode 100644 docs/about/references/keywords/DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/EFFICIENCY/index.html create mode 100644 docs/about/references/keywords/ELECTRICITY2FUEL/index.html create mode 100644 docs/about/references/keywords/EMISSION/index.html create mode 100644 docs/about/references/keywords/EMISSIONS/index.html create mode 100644 docs/about/references/keywords/EMISSION_NAME/index.html create mode 100644 docs/about/references/keywords/EMISSION_RATE/index.html create mode 100644 docs/about/references/keywords/EMITTER_MODEL/index.html create mode 100644 docs/about/references/keywords/END/index.html create mode 100644 docs/about/references/keywords/ENERGYFUNCTION/index.html create mode 100644 docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html create mode 100644 docs/about/references/keywords/EXPRESSION/index.html create mode 100644 docs/about/references/keywords/EXTRAPOLATION/index.html create mode 100644 docs/about/references/keywords/FACILITY_INPUTS/index.html create mode 100644 docs/about/references/keywords/FACTOR/index.html create mode 100644 docs/about/references/keywords/FILE/index.html create mode 100644 docs/about/references/keywords/FLUID_DENSITY/index.html create mode 100644 docs/about/references/keywords/FLUID_MODEL/index.html create mode 100644 docs/about/references/keywords/FUEL/index.html create mode 100644 docs/about/references/keywords/FUELCONSUMERS/index.html create mode 100644 docs/about/references/keywords/FUELRATE/index.html create mode 100644 docs/about/references/keywords/FUEL_TYPES/index.html create mode 100644 docs/about/references/keywords/GENERATORSETS/index.html create mode 100644 docs/about/references/keywords/HCEXPORT/index.html create mode 100644 docs/about/references/keywords/HEAD/index.html create mode 100644 docs/about/references/keywords/HEAD_MARGIN/index.html create mode 100644 docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html create mode 100644 docs/about/references/keywords/INLET_TEMPERATURE/index.html create mode 100644 docs/about/references/keywords/INSTALLATIONS/index.html create mode 100644 docs/about/references/keywords/INTERPOLATION_TYPE/index.html create mode 100644 docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html create mode 100644 docs/about/references/keywords/LOAD/index.html create mode 100644 docs/about/references/keywords/LOWER_HEATING_VALUE/index.html create mode 100644 docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html create mode 100644 docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html create mode 100644 docs/about/references/keywords/MODELS/index.html create mode 100644 docs/about/references/keywords/NAME/index.html create mode 100644 docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html create mode 100644 docs/about/references/keywords/POWERLOSSFACTOR/index.html create mode 100644 docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html create mode 100644 docs/about/references/keywords/PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/PUMPS/index.html create mode 100644 docs/about/references/keywords/RATE/index.html create mode 100644 docs/about/references/keywords/RATE_FRACTIONS/index.html create mode 100644 docs/about/references/keywords/RATE_PER_STREAM/index.html create mode 100644 docs/about/references/keywords/REGULARITY/index.html create mode 100644 docs/about/references/keywords/STAGES/index.html create mode 100644 docs/about/references/keywords/START/index.html create mode 100644 docs/about/references/keywords/STREAM/index.html create mode 100644 docs/about/references/keywords/STREAMS/index.html create mode 100644 docs/about/references/keywords/SUCTION_PRESSURE/index.html create mode 100644 docs/about/references/keywords/TIME_SERIES/index.html create mode 100644 docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html create mode 100644 docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html create mode 100644 docs/about/references/keywords/TURBINE_LOAD/index.html create mode 100644 docs/about/references/keywords/TURBINE_MODEL/index.html create mode 100644 docs/about/references/keywords/TYPE/index.html create mode 100644 docs/about/references/keywords/UNITS/index.html create mode 100644 docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html create mode 100644 docs/about/references/keywords/VARIABLES/index.html create mode 100644 docs/about/references/keywords/VENTING_EMITTERS/index.html create mode 100644 docs/about/references/keywords/include/index.html create mode 100644 docs/about/references/keywords/index.html create mode 100644 docs/category/documentation/index.html create mode 100644 docs/category/guides/index.html create mode 100644 docs/changelog/index.html create mode 100644 docs/changelog/latest/index.html create mode 100644 docs/changelog/separator/index.html create mode 100644 docs/changelog/v7-0-release/index.html create mode 100644 docs/changelog/v7-1-release/index.html create mode 100644 docs/changelog/v7-2-release/index.html create mode 100644 docs/changelog/v7-3-release/index.html create mode 100644 docs/changelog/v7-4-release/index.html create mode 100644 docs/changelog/v7-5-release/index.html create mode 100644 docs/changelog/v7-6-release/index.html create mode 100644 docs/changelog/v8.0-release/index.html create mode 100644 docs/changelog/v8.1-release/index.html create mode 100644 docs/changelog/v8.10-release/index.html create mode 100644 docs/changelog/v8.2-release/index.html create mode 100644 docs/changelog/v8.3-release/index.html create mode 100644 docs/changelog/v8.4-release/index.html create mode 100644 docs/changelog/v8.5-release/index.html create mode 100644 docs/changelog/v8.6-release/index.html create mode 100644 docs/changelog/v8.7-release/index.html create mode 100644 docs/changelog/v8.8-release/index.html create mode 100644 docs/contribute/documentation-guide/documentation/index.html create mode 100644 docs/contribute/documentation-guide/markdown/index.html create mode 100644 docs/contribute/get-started/index.html create mode 100644 docs/contribute/guides/conventional-commits/index.html create mode 100644 docs/contribute/guides/git/index.html create mode 100644 docs/tags/e-calc/index.html create mode 100644 docs/tags/index.html create mode 100644 docs/tags/release/index.html create mode 100644 img/docs/asgb/asgb_lpp3_pd.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage1_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_predef_stage2_2031.png create mode 100644 img/docs/asgb/asgb_lpp3_ps.png create mode 100644 img/docs/asgb/asgb_lpp3_sketch.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pdsurface.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys26_stage2_at_ps31pd250.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_capacity_and_rate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_gasrate.png create mode 100644 img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png create mode 100644 img/docs/asgb/asgb_lpp3_timeline.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2.png create mode 100644 img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model.png create mode 100644 img/docs/asgb/asgb_sys27a_unisim_model_filtered.png create mode 100644 img/docs/asgb/ecalc_generic_chart_normalized.png create mode 100644 img/docs/asgb/ecalc_generic_chart_original.png create mode 100644 img/docs/changed_rate_resampling.png create mode 100644 img/docs/interpolation_plot.png create mode 100644 img/docusaurus.png create mode 100644 img/favicon.svg create mode 100644 img/logo.svg create mode 100644 img/undraw_docusaurus_mountain.svg create mode 100644 img/undraw_docusaurus_react.svg create mode 100644 img/undraw_docusaurus_tree.svg create mode 100644 index.html create mode 100644 katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 katex/fonts/KaTeX_Main-Bold.woff create mode 100644 katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 katex/fonts/KaTeX_Main-Italic.woff create mode 100644 katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 katex/fonts/KaTeX_Main-Regular.woff create mode 100644 katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 katex/fonts/KaTeX_Math-Italic.woff create mode 100644 katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 katex/fonts/KaTeX_Script-Regular.woff create mode 100644 katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 katex/katex.min.css create mode 100644 search-index.json create mode 100644 search/index.html create mode 100644 sitemap.xml create mode 100644 versions/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..1605352df3 --- /dev/null +++ b/404.html @@ -0,0 +1,13 @@ + + + + + +Page Not Found | eCalc™ Docs + + + + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/assets/css/styles.7d0c748d.css b/assets/css/styles.7d0c748d.css new file mode 100644 index 0000000000..e275af02dc --- /dev/null +++ b/assets/css/styles.7d0c748d.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.loadingRing_RJI3 div{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2e8555;--ifm-color-primary-dark:#29784c;--ifm-color-primary-darker:#277148;--ifm-color-primary-darkest:#205d3b;--ifm-color-primary-light:#33925d;--ifm-color-primary-lighter:#359962;--ifm-color-primary-lightest:#3cad6e;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}.container_lyt7,.container_lyt7>svg,img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.searchBarContainer_NW3z.searchIndexLoading_EJ1f .searchBarLoadingRing_YnHq{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.searchResultItem_U687>h2{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}.code-block-old-line,.major-change-deprecation{background-color:#ff000020;border-left:3px solid #ff000080}.code-block-new-line,.code-block-old-line,.major-change-deprecation,.major-change-new-feature{display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.code-block-new-line,.major-change-new-feature{background-color:#0d8a0940;border-left:3px solid #0ec929e0}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.hideAction_vcyE>svg,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,#f5f6f7);border-radius:6px;box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64);left:auto!important;margin-top:8px;padding:var(--search-local-spacing,12px);position:relative;right:0!important;width:var(--search-local-modal-width,560px)}html[data-theme=dark] .searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,var(--ifm-background-color));box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309)}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2{align-items:center;background:var(--search-local-hit-background,#fff);border-radius:4px;box-shadow:var(--search-local-hit-shadow,0 1px 3px 0 #d4d9e1);color:var(--search-local-hit-color,#444950);cursor:pointer;display:flex;flex-direction:row;height:var(--search-local-hit-height,56px);padding:0 var(--search-local-spacing,12px);width:100%}.hitTree_kk6K,.noResults_l6Q3{align-items:center;display:flex}html[data-theme=dark] .dropdownMenu_qbY6 .suggestion_fB_2{background:var(--search-local-hit-background,var(--ifm-color-emphasis-100));box-shadow:var(--search-local-hit-shadow,none);color:var(--search-local-hit-color,var(--ifm-font-color-base))}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2:not(:last-child){margin-bottom:4px}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2.cursor_eG29{background-color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitFooter_E9YW a,.hitIcon_a7Zy,.hitPath_ieM4,.hitTree_kk6K,.noResultsIcon_EBY5{color:var(--search-local-muted-color,#969faf)}html[data-theme=dark] .hitIcon_a7Zy,html[data-theme=dark] .hitPath_ieM4,html[data-theme=dark] .hitTree_kk6K,html[data-theme=dark] .noResultsIcon_EBY5{color:var(--search-local-muted-color,var(--ifm-color-secondary-darkest))}.hitTree_kk6K>svg{height:var(--search-local-hit-height,56px);opacity:.5;width:24px}.hitIcon_a7Zy,.hitTree_kk6K>svg{stroke-width:var(--search-local-icon-stroke-width,1.4)}.hitAction_NqkB,.hitIcon_a7Zy{height:20px;width:20px}.hitWrapper_sAK8{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;margin:0 8px;overflow-x:hidden;width:80%}.hitWrapper_sAK8 mark{background:none;color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitTitle_vyVt{font-size:.9em}.hitPath_ieM4{font-size:.75em}.hitPath_ieM4,.hitTitle_vyVt{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.noResults_l6Q3{flex-direction:column;justify-content:center;padding:var(--search-local-spacing,12px) 0}.noResultsIcon_EBY5{margin-bottom:var(--search-local-spacing,12px)}.hitFooter_E9YW{font-size:.85em;margin-top:var(--search-local-spacing,12px);text-align:center}.cursor_eG29 .hideAction_vcyE>svg,.tocCollapsibleContent_vkbj a{display:block}.suggestion_fB_2.cursor_eG29,.suggestion_fB_2.cursor_eG29 .hitIcon_a7Zy,.suggestion_fB_2.cursor_eG29 .hitPath_ieM4,.suggestion_fB_2.cursor_eG29 .hitTree_kk6K,.suggestion_fB_2.cursor_eG29 mark{color:var(--search-local-hit-active-color,var(--ifm-color-white))!important}.searchBarContainer_NW3z{margin-left:16px}.searchBarContainer_NW3z .searchBarLoadingRing_YnHq{display:none;left:10px;position:absolute;top:6px}.searchBarContainer_NW3z .searchClearButton_qk4g{background:none;border:none;line-height:1rem;padding:0;position:absolute;right:.8rem;top:50%;transform:translateY(-50%)}.navbar__search{position:relative}.searchIndexLoading_EJ1f .navbar__search-input{background-image:none}.searchHintContainer_Pkmr{align-items:center;display:flex;gap:4px;height:100%;justify-content:center;pointer-events:none;position:absolute;right:10px;top:0}.searchHint_iIMx{background-color:var(--ifm-navbar-search-input-background-color);border:1px solid var(--ifm-color-emphasis-500);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-500);color:var(--ifm-navbar-search-input-placeholder-color)}.loadingRing_RJI3{display:inline-block;height:20px;opacity:var(--search-local-loading-icon-opacity,.5);position:relative;width:20px}.loadingRing_RJI3 div{animation:1.2s cubic-bezier(.5,0,.5,1) infinite a;border:2px solid var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color));border-color:var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color)) #0000 #0000 #0000;border-radius:50%;display:block;height:16px;margin:2px;position:absolute;width:16px}.loadingRing_RJI3 div:first-child{animation-delay:-.45s}.loadingRing_RJI3 div:nth-child(2){animation-delay:-.3s}.loadingRing_RJI3 div:nth-child(3){animation-delay:-.15s}@keyframes a{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@supports selector(:has(*)){.navbarSearchContainer_Bca1:not(:has(>*)){display:none}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.searchContextInput_mXoe,.searchQueryInput_CFBF{background:var(--ifm-background-color);border:var(--ifm-global-border-width) solid var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-font-color-base);font-size:var(--ifm-font-size-base);margin-bottom:1rem;padding:.5rem;width:100%}.searchResultItem_U687{border-bottom:1px solid #dfe3e8;padding:1rem 0}.searchResultItemPath_uIbk{color:var(--ifm-color-content-secondary);font-size:.8rem;margin:.5rem 0 0}.searchResultItemSummary_oZHr{font-style:italic;margin:.5rem 0 0}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_YfHR,.sidebarLogo_isFc{display:none}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media not (max-width:996px){.searchBar_RVTs.searchBarLeft_MXDe .dropdownMenu_qbY6{left:0!important;right:auto!important}}@media only screen and (max-width:996px){.searchQueryColumn_q7nx{max-width:60%!important}.searchContextColumn_oWAF{max-width:40%!important}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.navbar__search-input:not(:focus){width:2rem}.searchBar_RVTs .dropdownMenu_qbY6{max-width:calc(100vw - var(--ifm-navbar-padding-horizontal)*2);width:var(--search-local-modal-width-sm,340px)}.searchBarContainer_NW3z:not(.focused_OWtg) .searchClearButton_qk4g,.searchHintContainer_Pkmr{display:none}}@media screen and (max-width:576px){.searchQueryColumn_q7nx{max-width:100%!important}.searchContextColumn_oWAF{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png b/assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png new file mode 100644 index 0000000000000000000000000000000000000000..07d2ee8c95711c1350623ada5abc2f3e6308626f GIT binary patch literal 44134 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 literal 0 HcmV?d00001 diff --git a/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png b/assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png b/assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png new file mode 100644 index 0000000000000000000000000000000000000000..081590629fdec32ef2618b23c2ac8b2b9b847043 GIT binary patch literal 157773 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

>3-JXP1^3y0$N-5uTzF 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 literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png b/assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png new file mode 100644 index 0000000000000000000000000000000000000000..aa408a4e5bbe1828b0b13d557a07d7b340f08d1a GIT binary patch literal 38869 zcmZ^L1z42ZyRV9<8wnK# z=Usz)pZ_`M-n*Y?KYJs5YgWAPuhxg5>ZFYY93waHlr4n|G$-DFIb9$4b)#l=;Dgrhn`;{zOrmg}W|dnV*5*6ap1&8u zjZd#>cii6m+ES5hWN0`sI;vQ!u0>ia)ZAdY@8?2 zws?+yb^PkSJ{I7=>w0Q-vi3!dWrWh*#pTO0N6+!6J!4~ItLIzRbFpF>$7>(7@;Q*~ zUn(mr%gV~CsuC&doVH&xn1VUn!_I-|n20naNWy(>1mk_dTOq~Wem_C_UYfBd-nqEr zs|WR{%;$>ZPl*eerN{i9yRpQcaKa z_KV>0!~GY}qO=r!Y}Aj4#CDNZJ?VpsA1w#J8xID=Yl>6JDYj>(mlK{ z+mp?Z5tuRbmH$ZzOwZiS&CSoR_Ar8Ku{-Un^Slyb>CX80c&HVeC!z&9mgr-~PeI`I zbNtSC`QAW%=MnZMc(dG>Y^8*R1e1ecc^#PD_r3`hqYuybvz^>Hj@IO6v&prs^d*!n zvT1C8_3I$eOO`9qgu3FXI1(9;6rF`)P!SX?JsM6N!po?rnj$^qO$$fI&C{db;M9b7 z<)~CLSdti&q<&}4U*UYmz$twc@isg=tM4OcUIb6k_dhc-Sncf#H2B$+(5yq)Cp)I+ zZP7+&qNK;zpm*d-VA?;Q;k*AA3(dR>Ve4(5ean@s&X`E?Wc1uY`d^HtBE+#tv3wHV zd#vRKB`~7Kp`oFP3BxvZg6jvTr#?p|2}z`n1NZ+96nO-BoW}QwLE~*#S68Fx-)VDW z!abv-qcT=^o5}mHb08zyn01lSx3X^ck0mgRdy~?amX+;(myx8f`(AR=fHa_Nww)(G z3yXp-uq;0-{`RXZxjZ_*GW}ewF zOy}(JB$4F3p>ucB=6KQ5+1cAUciV?BA>)2~CR$pg&E^ViX+=f+bBMW00O(34+9DWI zebalqHs?K;b|;TSyHv8yk!D}mPxT30c{UBzy?7467@Zvz$k&G`dXXbPhn8w=GqAJI3DR|X40eQM>73Hq;o z)DsaZD}f%lQpr9fP>k0N=E!Txw(fV1uMhROt#hvcLxpNDJ$!C<&@uV8y)DOiy`4cP zZ_ex+Pcz@uKb_(F2396M;KhHe?l4isBPl5vBza%<`avucV}$c5-u-@K1l1K1;$bH+~IlvYD=~Zf`FR zuCq3i9xUd=pfw^aiRtEgIJZ^Z5~phjRphmKb0P03hpkY*s(VAv&`bp*0bR)Kqj5RmzbOg zo@Uoeu!UIj8`$;q_39T91nns7ZwkcFQx%vHjjip_s#t|@) z{;>BLETO3c|F`-X72Wiw3fl*G9d1^;NT8OQme$04(?X>iV2uH$Cw8rpqR7o|;Nd*$ z2Z~RJ0Ij3Fnl*`9G;1rSpgL49j~S;3mSODKJ{k}b4q$2q0SWJ1 z`54r!x@fx#>Y;i|If082dyv$Z2ZE~1j<_UeFM39-gRsnZrko|xqIm%D=R7%78mt&brIMaWxYgX3NRwzAWFV{ug~sE zy2uj4>bF6)PO~tCKr=ZnHI^{d3Sk-I-q`I@RxQ@VKLON+WzX64Q<>wQz%O6E9MevE zIU1dkHP{UomkLhV1{)b0*KXR&@3IcOmr(Ne4H-? z8i%SC(6Uwtmguedy=-h0FPiSGD_er1>64>fJ?ql!)aT<7*6h^KbZqRu5N-S{ICTY$ zMi*7e|Ma|=&56rx(&!nGf%q!bR0NGXl)xPA?ZI9eRXa0cYcUCmg?jk{42waVbrDre zhMfl5;0<DY_y=T^2fzelH&E?;|+Ck!pqh z*^e42`n>h}9~W1m;>r`_}MnrF4PXlKtruq^18GMTh| zv~2HitX-e7-Q8OqUR+qv)%$}+tj&M8w??0}UE*lYT%+%E6XVHf$ixz2eZ+Qmz9XSJ zJ4Miu30qJ75!esMFQc$eu@n75f&TjSYgJWMS=pQvp}9&C00M#S8;c{Q=B6j5pb9^I zde6|=d#UWC3NRJb6_f>-;Sv)`rtp;!K%+Q! zZe3Q^Z$0E*(DDp4rkq+oqV^9Mc6X~{A8dHG;d`_*AI{o-;my=$t-V=af9%@jP6do z2)s>(Z5OH=&Ylhqk<|x%eVW;sL{(mUwwf~!AHlS62(xwT^%Uu{s8INkJG|a;IXB`o z?EB_#o?H+ta}-=tN=E$CM62Sib8~ERPb`0XOkD__wum1Elc&VScxv4|Qj<8+M_UC@ z#mO&2Qx!d9qPiu}J0#6j-cwt$&Y#%X*^hToH%&kfm@s~1*h5)L=#`fyl*XC&dx_Zo zO)Ggu_+I3Nw;pnMc-ZrPg)i$QIj?G>H?Kpi$*XS0=Vh|?LI$rEJm1jb=_gTTL)#PP zpS;FFG(jMo%J;O51=bUx*cnFYA~i~n57@I@Po4zPa0Da|6rHbT@fA-Uz=N8ztu-pS zy$|f+X0bmsX$rhr^KYOpxXzJuW64k!XIpdbF}>r&EMAEO3L%-5d@;rk!O++_{hd8l z4V-z1{t=09e0Lq;c;Da>peGJ4E)f7uymyq9l@qv4RPX7u#bMxchw!bwTFsg{-tO6F zI{HVZ!g#T8ywbx`ipN)%UoiGZvIhKV3km`@NLQ<7CRyo{HecmXs73)>k9wdNtVolH zo@^x^5#@P`B;SiwBRtX|!b#orvNoA-$&Vr4vo0xI!Dz5SYTNVeZl!RU1lv#A^7VQ8 z`JMOWDq}f9iT6~KPoZgt3RC}uiiS&!d!*cVYxs?rv^Ku71nQxxKA`ip2{k3bm{6HC zjVrJ48Z~TMVt@QW|A>H@=b6H;gZImo6q~DV(j03r9cVUa7NBfx44aJ9Q?fa>Aa&ZB zdzl^(+HFW{8B>wZV1ve-dOBU4j|6T3bnbmmzV%rO;_xm(eSVHz2r}nWTT4kpg&jXu zkTI*KR{5P>Hk97mL&hU*%J#k|Sjy;@{8E6MDey4Yjd z;J&Y8%8?IbvT1DW=H-*DGJLN|7$iYs8?Cs#jCkk_s25RF6rWP#y0tQ(&g1ceO8{NZ z9G7>OCj(4WBY5(z{c9~A_FvkuMqAfXO{yZD7ci%!`=h#rSj2ToZ;4lwqMra|-qf@|>-wSw%iE0<% zA)NjW=CNc*mGG@OJ;{13c==O`MKF&x0e5~cJ3BiEhi(mcbE3wN&eOx~S>mL4TG2I9 zx0IBW+l=RebbBET_DavNx@*=XVk08VQg&!u0D1%|IFKPrND8rEu;p8UT&i+FY<$Yd zS2nKv?YB(OtR?ujHs%BTi5%K5pGF!*44o{5bWik@68L@`<#a1pMmT zOv=ZsfT(v$?^ATYmU)Ia!ud=0VKO|SCviiTQ0aperSD-74d zy226W3?B}ezArrzrk0j4rDUog-XoydtlPin0iDxc2l#BJsBca^YU*W6X)GP>3GGF{ z|9dq>-x?*$6^*mm$_Rr9!063DXs)c-VzD*LR3RxPg>vxX1p?k2eXDtT+2xa!2~|l^ z(R8Mhj84qloj46BRpGnCjSU9_7`wbhtahM~RP8@dh6M_g#d$bg!yVg1%px#FB*L0) zbG)x|UDRvvqfI~Xo*5Iyg(3!+3OpXo^3Ji!&o}6`2{m*w!;ZGc7Ybn}wLTDnbwDVc z3cw#NfE|pamGoQaOu9?Rk>w$+q$jYB>da!K|4TziE66JBeh&Q{y>INl{qJRAAqO=m zsK@;njagJ|q3KFB_A)5I9H1jiSAJd$|7|`Rqb6}byk;JyKCU5ClQWc9Isi)(Q4(gO ztyO~AqxW(oEmAA~D!>401L}XFRtO75VymmG3X9mR1E7JZsHoyb$g{>F+p_Z$K|=bY zAL+h8Mu^>wPe{01JJv*Jpv|PnL~qQX;|Kga^z1pGPN`nf`~Am|f5d^cbaUoR2;pdp z*tv$vszwhlFK_H3i#ET^wEwBvg|zoJYum3t3d^~$iwEJN{-^oYLNW2!+-hw6pzik^Znmy+$ObfFJnW)LT&*SCZ=RS1<)}P)=<;q?cW+AJLog}Ps5*SmXokcRTmfSuM@H$VvtUOq3ahqU)z zm(@ic$)@{&lTsW@+<*Cdp(~ug^1+vx?FJ(u|MS!B*_NI(QIFZ?2!`QAG3-eM-)w%a zhZKF*Qb*Ahlm1m;r|yKuQY>>k-SelGO*6OH0rK$|Ktht+@H4+jQy`bf$jCNpR*U1} z;wBYOB_H*RU`M%mCOBv7I{ym(7mPP*DAI+WVp&X5vgfyiB4z(0zwHFS>Gn8wTwmL_ z`xDF;?8o==y&rl#bX{6^qdueymsgufI>v5#hN&(Ri_jyla3-bpdp+zpxVg=NwcGot z@7%%H7-`R+%={C0iei(x^qdGAW&pe=)we5WNe&7_M}RtWcjPy4ERm6-M^f&v553=P zmy#*Cf&Lu89Jtfe_v6A|@t*Hi1|{L8-f6Vm^>q~eTv4IBmdh@!1Nihu__eoDU z5C0!0olc7nL-oxt6T2K>5API92aGP|+&DuxmFG9<0<+ERuycijSsxSNEhF#Je-X6j_u3urILtiq46G`N zFNV2{k#QOJj;|(5t}g65Ma=~h5;E_%|FF%XDA+Sk4QUBMvb>JE-x5X9sxdvK#B#@A zf-3AEVV3`^8c_k44r_T&tLyEFCjq*>4Rb;L?e}@h9!>eTZz>RnH&; z0aXbLzTeF9y5_g<3p3J|r+s+iDSoIC_yxr%3ZG=}> z3tz}w@7KWtl-C@Re$(Nsoacz=qjiyii%p?lM_)3Zg}R)<8%xJS{Zm&0{S~!@A8O+j zg|N-FwagTa9zZV+ljE!EZFHv9)Sb3-EWsb{dW5NPR4RV0n$>sD3MxaXV;wUM9u5WNfOY2-; zd64alDxaqvNJb)9%+WnJbsk5amY0`fnbt>%W#>?Kw7D3zIdxg~K1fjX5rKh$wsb58 z$~5;Rl8F`WG`+lf zA8MVM+S@g6!LOoraA|N*hp7)N+J^pe(S)s72MM1uDI@PEU@L@40?Me*PQROZY!b9& zx$6`giZG~*|EPO3k$f^5T>|Uh-rKJMu=nbLy#W@c>~ja9$?`iu3WEzO;Oi~F3%Yf7 zcVnR{HxXo1Z`C5tiRsuNMew?^GKPYk5fCR~(?Z>r_zTL$y8!!3O6b$>_F`uwdO4&0 z_N4;762J#XblZ2+e^v zdTJ962XW-AhSx$T{GRq`h;ifzg|XR`_j2<-0HfWtZj zt%J3zc}09rV4E8oJI}>EHc~H8t%-_1#Ns6q8DJ4p#vU_`p<4N>N8o2|fm#xNCWO*IAUl#(7lactt7dM-$ljKw6-pd;eT`{fdgV<`P1U0H*c{}abKhI-Af|cu zEB*TkV2nt|sc+clfeQ#91N&;;rw>b^;-K&3o85P;`LPAXT5$kvpma_b1Dbb1jO+Xf z{;(fDUblQB&Z2C}IM_?V_qgn*v6afzcns6cj$6E4Rc9#<>e5(1PLlx}g3Z~gn-eAe z`^eIs5RlvER}Ode^nBf>)S~IIjtQ`Mmt;9{{#cNO9-G^OOUKR1VTcyN|M*rs_Q1h} z+S}WKQ$yInAt3Ml&!eqzSp9*O#i_!x;Avil|30br(HN}fu>w7sc=vxS1%b6j;K`Yp z8DJPc_mK1AaUdTP#^1F}b~+K9{MA5vzV#)2j|2PUF*sRaeORJR^ZHL$oaei~2a`b5 zCV=`wg4A*D8Q5J2c6Y6t`4+$(><4f!^q&c0tHR;G4~>naYq014Un2tWSot3Vfl~iK z*VCpnEkX`i8%Fyc-<9>7U zesip9p6y^e&hi*|b+G3m)t`H{A8ymhX9GUQ7NGWXVc%oE1};O;X>CwT+m~RquWuB_ ztHh{&hF>n|Ip%F@!c3>@3@C^<_j7DIjl%@;KqUN_5ODpzW@?fF_RKON-mGJZ2BmO^ z2Snn#z2|C9dHrIu5J{bWuSIYJ-k-i-HV3j+e)X)2jkUFjBY1{Vq#$Q7PencSVrIt7 z`J0U-$owX>I+mJ$^!f}Nc^EypcyK-_d6I0;ydHSqS5~W&4H)X+V#>-XtmntjP(^al zkiY->50g5dBWI_silR@+cL_wIYP|MVd?mkDZBpsh+5hJ3dD4aCKvK4x_q-(fMwtKW ze6(T`Mnok{^TFPJwSx4RyMDF!>xRL}Y{?ASz>9Ib4&Ita6T>d)g34c5i$^O+;}_S? z4(hJaav)Q1zdT*2!mq+T=&4v2n8cBfl(&64ZeU-2{uSJ$b~t_u(Nh0n&%PG7#|@?b z_=&_9T!GFc+mD-VN*qljDm;Y=h9A^joWU#3HYSu!j*`t=BE>HT&OkDJ){bxcVSTLJ zF8WJ#^-+IMN)P9gXFciSCly3K57Kx=MNg*H#3!Ei-A~zggUscn-vcQ-XN-GbQ@-0Y zS?s3OGB>Wb-Dk9wau4u5%bYgju&0-sd^(rbBlU`O*av0w^l7-Cw5sK9B$TN3x6E=X z)ct{YZf?94pPKFI8x)ltnTMfA-9aST(~UJu#w#YZxwp^?oKY2(1Pj*ymdLPk|8(b* zogJuz(gDAtkCj6bJa^M#z&;5|%ID?yQ)1U8e@KL_2A+FHCG32?z&$WGf;6^ep<;h} z+%#}ecXKrI<&>T16VXwW_1Iv2{iEIR2>~_8PQS1PM^D0AbcJaPEvYy!ua-~CZH{DV zbIfe|Rs&1$Tf|x6q8?g+xZeUY`8Qs6w#m^LBdkY7LOiULsC;{aJ%j0H#(g!#_1vD* z%_u*7@3zodvgFr3?Ysp;RfXnlM7UBV=I3F9Y!ql7Ey?&EM)}1|zwW{WDxbli!Q?WD z1alqZ-&cJdHr?FDFK1ugyZ<2gKBL7Qdma1p{0za8`*Akw?fKt0yxn5QDpqp*oImYe z+jlM;`xwcXq1&Fng&$KgrmdM#OksT7J}jGdOj6h_FxgS{z-QTJuSJOc?3@@)Z~MhQ zGwp>oA1Cu<&|q;`2Py)io10BO7>7h-0;~(>R2CD(-c$Q)^U*&&teJ&t*Vq}DGcl)s zOJe3{to{PmD5Z!f!Km1cCuxMFlAE(OX!z8e3I(%PqIrzsF^{u^*bI7%eD>mZV@`f} z_$hdMk9$#(BJJlMeuRNboq5k5W9QakRL$3~%27%QdbK_h8g(?zx&u9>7(F)=x3vrZKJjwLM92jJOoPB`0y$FgPIQRCu; zp@$eRp6OtA_WW~LHEU%x_TVEjh1e)M@Db;k`_#TL5t#yOHpuF85jL-D^LwI%zO4O% zEW}^b+CS-)%Zamnm{L&nDtbExExq>X_O-J)V{yB~Un{*vB~g zVs@f+T3-S;!!PTLCS{0_F&pN#3iOGm8rY&FmpX8g(Vc^U@n6b5$iMY-K; z)coS+J5uha8ko<0?K^HQr3T!}QATVss>h05rCwvuoyHKQf@i517fD{c4}PcQ2TN4qGL^pXCcnxgIZDDznsA207+nPaP1J;>?OMOr0x3-}$i?edKw{+CXY|E#19r>NKV>MQDZ}=9cKM>LVqP|D6pJ(@;R(PQK$?^*w-lG8( z@k4|4@SVef4^&?9D^ci*h|e(*Vez?VvUPvUud|K4%!7~JTMt8HR$|p6k3+of=<+`s z6}{X8&CM{?C~~J3H`>yyHjmiRHXLf1gj|Pr{nu$ zq4IL$szW<)8h`CFdzTl|0NZ!p3G;zraE3H66&35{k3+&L(lXPu|J(OjiNOf&|BS#S z3r6TwWdo1URS1F3^Fj!*c~QJ@BBHt%HBeDeK4yD1tbs`@jSQ>cj9mTOTY2w zX#;sVwQ4u*-Pmy%^BN8$a}Y8+|Az?M*iZ!;e7u$eHL1O~HFi#oFSU31^uc7uDuzKp zw-LJV0>1S3v6J;m~pjp?oa-m9Pmns=8sbQQbEV5PINO={1bGR z>VwHi^G}ZR8wRGgbvKTf!lUd1yNs@``*0WZ=&sg9hHb#zz&evI_vxjzHlNV}^QO;@ zo+w>#F%2;=t+Si^P`C9tfl=;h2UffI9T!q+V65MQw@v13pLUd*w;c63mz0kC7Ez+t zfPEpGI>Ag86b$}n#&GP6ui$?UhRGp~mKubL7S2yhGzyJgt*j;3aT*%dwT3y!%9WgL z>)908*F6rQt1a~#9+|EkiZE_oXHSe6eojp)J|Ay9i&|o>WW3z7E3+@0w9CqspR$A$ zvW()eKkSZ9t_XvEcjRBn^0P~t+^|c_h#0nF-!(C~Yae<)&;%<;3bFeKor}fJheoi| zfhZ!Z!rcbfmAAO`VCB=i_cPpP0Zp|A1Iyr(F}}`byU&Bi+`RV}IE8Te$1Cc=303%D zkEMzgLMqTYX)3j+_Aap2_creXSt+(gmnQp@Mfe7+z^IoU70=)lK05k@i)|-vVscW)8DEG^ zL}tT2d(g?`kyGS_0BNB`WKM~_gM+hNrj3ltu|c58Jqm>%FTP0tVbvFAtz5=(`Zn4A zsp;hj(OG3;t7!Yjn){pv#^9)7`lzenDN*Sg6F*D$ zY0*U=d1B=+60AlA4K*%}Er=F*Y7LCo81`DBm;KNy-cAwDEJEas5Ia$fyY^jUY2EZ!3PI;MUU?2K}L8JROjyxtE4_|v(eUusmN^aW%T3Mg$$676wU4_cVuww zl8`HQ`bFaMTB)y03Whq8VcRdhF@dE*%}u8?4MFX4pqsJS;Ax955?ukOA%=h9N3$m{ zibUC`&-_g-qgi0q$NrqnQ~jIqN-x*!Zg`;Pm;JRwNN@A^USCN`+?vJ2-@;3NUDyAHGOPZ7k2?Pm zwikq+xvzT2dC(ijI5hL`8&g*p5OFBRAhRiN{T#HW52sLYFk%1Mkx0}ky-R;KFK$vNVZTbJzTm~w6U_cZ-Tg@Al0Qc!-&>{<3pW;W?YjtZAveHRABI)-Eg&e8Q zoN#|}b8~}tC4bpv8LV#LeaKGxq}K#f{_k@|0mJds)TRf(uH{qCyxSZ|yI|>fVFyqq zkCDH}0>fRjU4KjCgZg%_Dj^u?V0c?XeVTh!lU%Wg%3aYI8AnQb{}F_s=rvWGl_Q6F z)ccvySC0X+STxsv%e|}uuLvxh>ESn~XxV@Z|IZ_c7)@DjJ-T^ZHD zL@rZ^5qBq`lSzX0e;ZAONDN3sqU%3(7U{#CPYeQ$gE(%auCLq2IvH@8&+14`(^jz5o!%q23cndYO>u9ou+%PkzvXGGdn*Timv z>G^=ZBU-oP6P7!(lu~C)%)*Z?-18+n184(zdo69AK5cem)~@XdR3tv*jnVTJl*n_} z4g4&Je<28*b?G3VSAV8`<cFC3{u;advir&2HY0gIK?N7?bqh-<&Syw_8m+wR5hR z6YAx6;_1VNZ;1z=_kTxO(*z^WdQHo2YsX`jZ-3aco138`HM%*$?_h=?r?_zdkXGho z>>*TyE5`wnHa^_G`+1??F-W}tcaM+h5FJB zNFmTdYlCFhw$rQ~`H%O?BZ~-UqPqS-ou;f1$%w(?h&es473!fb-+OX)+la8@JWL8~ zLGfLB-Z0gg4bNTH?}G$K-q9AWMmdWj3@+=Lv(fM9yT`_oX?hquzjrLsaZZNLI}x@= zT@zc5<_8r!^8Q)_Z;ty_Bkfd4tMGwe3>Zd+(p28(2p`Jj+Zv2(ajx`=Z&cDw=5GZ5 z!4vmG8ht5%CpJdM3#Es)NpPimE||WV_*}=Z4PZvA+zE(&>ijUUOsZ{8TFMp@=VI&5 zP-!)UqHJukl2wdCsP-53CDdh#U=Aj$BP)NOkGv>9SEjd`dJ7VY7rriQrP5!OdLV3Y zQUZqNFdkVsz22qA^uHO#>h|}!3z6;T@F;gi=_v#_Be!lj- zqpx_|(&z^4v0_F;q(19=ANgvEc~nGaYLR*+4u3pez_bUF~+1#>{Z}kxu(NQ^dEyeSFupxQ+bouS2#z&s5SKB_{v3ih}qhc7s z7K--a^)X5kDYyH(N=RPr;1Q12D&FDwQFl2Xr3anMO*gGRkD?vlw(q};KgB=!T+$RO zrxqIjSCTRlbBs!5*~s|#37GT*7O?q~{CMACGocQ6pw&yKuFrd2r7bYa?%vX$;#GI# z3p@dJI=4amTH@y@4-tYwmDGFc2#K+UX~Iq)H-j7_@)eYNZhZ0PY}Q^U1;6p}>aq z5SEanfD7-NKI;s;f`OD-KEGJp6`crWK+PQ0-e+!RWtAsPil$8{tY{(qpkjE7aj;K2 z5t=kb)-AQWYB%rwq>lSZf-VA)!Ow#GW&8L=;JGq;HmBS>nKwmlk>UbSm!NiYIb=v_ zy#^*2;dxJ(O@ypt2@{jP`o6Q=4KBZZN<#^zeD=#Ar-td)B;0NdEwYC4ddBq_oSF=O zu0Eu;03git35B@bt1L-|YG3YDhW|lfLy6z_Q{N_AV9%XkOvkHRyI|K=}D_EJ!7?G zfbO@xn+pE_ps0v|?n}DJFp1dCm{twU*(W#+56^JhZo#J^F8d!En4-*QoL|O4TNvMm z8sG_0wJj;4iSnNb7-tmq`rF8r<%Yau`BdKhPp$puTxza#ENLJv&t-_K==DGFQYQXT zW*nK_f`5r3!B|4niB~d^#|}XjdCy92D|_A zatSR^uUHi}Hm}acSFzp^lf7L3MQvXvu|m=eQuJ#faJ!a>*&|53@^Y@rw}P)Jn-@C% zsiVjUQp0d$cKEcnl4R%-AWN?AP_O5IdUnD^L%4WY}@Y3e4O;ri}Fg72b;?fWXm7 zyxQdKuv_MjlCplOV{3Xh>v_5?r~ndB*6%M*EFe<;n3GigBbkZwJ7$yPlG(O=--kn} zmviQxQqH%IC_?9C6-P%%{dkarT(@p7;|D2s3%CZQf>%MhGjh69JKnXbncQkYG%BS% zn>Sa4MV^{1SsI#e4w|kmy^#j=BJZ4%ZPDjt(;zeeBLKf96U*VBa##$2nYnNH2}IW=l!%&OI)jHOoC_!e`hUk&gF``qQW-CEok)T)jn$04*sq+bXTj?f8+V2posb}Nr0@`Ph)P3p2_oAB^QK*#DlfiA<+Hsdh z_kYsOF?K~#Ud8?6U!SvElQq+a;{UkA5v)SfxqWNXx6E$(eH4y+(;+4Q_0r<_?Gqk@ z^=qlT=D9xIS|ao?wI^JFFo*9gvN8u56jyq1#&jOu==0;cG)Ry(`v);bLS<8~4fofS zezwevH)1*Ga!JlJl($<4ron2;jfeRDVetCkt5gfAGix;L+7TcogR!Y$1iY()c|`L&u!pE4kTBXu4-vL1KFUS{UXr zzxDSAp@T26t9D+$7IyttzZ*gXO>XZdVfaXhEidc-3`^nn;XrkqVfKttp><}t-vG?H z=&K*=yH8)y`D^2LTx-5m+vPF-0LS=UF8aeYhH4fcQslSd?aXHqKpmGG3pgK!Riy$C zKf|u1^&g{psotOzXU_dL4a zF<8lo4!6BDTamAsdwV;0_sDMZPua?}iG>1$yVtQ~s@UVEurOvjmP>(e#lsL0e{J2_ z;w&7zoXkSJA$+e-X8l%Hic-nf~=t_2v~;jLDpWgVJl5sl~PAxaVcxUycM8Nm+J3 zT+;vXmlQ(iHScqgu$byTFwd2#2}<x_c-6h10Z`Ow)k*rAht%&WSl@s`_j6*Ma+5+#Zh;;p?yUTYFYf7RTZJ94O z`&@#gTkuq`AR2$HRQc7{FE+YP&;24X6na;J*kLC&#~tnih%m+dvGbh(&L19y_-pUB z>dlbz+C^X`r%ZJE>h3<*XwWI4CT(O$2{Q_DL|pS|SP?^t_j zLfM9InzuN~YIFC-+!rzehDmx>;vbl?Yny(4&y1*S<6tHO~~=B|i(scltK%*J#n{T29rV_pZ%YRCO$%PeBm z_SKJ!kV-)!GI{A?qrS%aUpiZ|ts_th@kxFbwR?S)p^iby3p*XVNc?4P^(|_`k2$<* z*>AG5`Gpul18%E)lWz5)llpwn*WN%~BFbi<4TcD`wMA0`O4+&{=khTN^?L=na%L zNCDFFR`Gt+|^}4&uL& zPoU8d5vS1>YkQ@>3`|^05b~6TN&FqMq3sYE#ZuLLK?sq=5Jmg5_^5%f;4JqMxbq8O8b3BHRzY+6cmaA1AHxX%t?#o73SbmoDkyw+Z3lhV_ zHqfa{Z8$%ggxP8&U~Vb@>Q0!D49Z=1``v9eL+3ikBka{c7uMMxFI+m?CH?2x<;>bY zi0RBBE=sn$#*j3PU`$87v`1gQ(EHTZ>x3<249K50)RlVnSii!juI)-8;RFIS=I_-! zt*Z=6dPneTOS$}q&RVOMFFi0OWbESi} zVPK&ER0}-@^nr<>e&0a>Zi=#blE}Sb$ zhQlMrW4EksZHG|bD&}*!W@tX4Tk5?P9IE&r>VNe?q-mTT{__QVb8_}(DL5&((YOzR zr0KqYK+jjYqOR{_K|?YjX;`<}76jKtNT`~owsJH5X7~thl(sP6ABL1*G>`5q(nc0< zKUQC|5A|}`8Qa{VksX-wfq`L>3Xu>=0T75fC-eg(b}w^Td*dbRT0jRFJcx?j`bhIp z3}bUxkgVM8jgntaXR`7%9uNqZq03~Zag1tAgrIMpmKYsZ*x*xyC|o;YL!yJBKH9F| zZC;uw&iwKbf;cC-wH)PByXOv5@RjW(h9DL4*g5|4NIj8AzwDquaO0DI5}It_^+Jb` zAUY4iS?)7@kB4U7nEt2Kqy`2PDC81~Xblb5G0{oDDc0*BMPO~$?)yd|!WwC?Fn|zX zS($V+u5wOB>UP*P;@QHAZ8`Q@fQ5Qm{h19MnPx7Zz$#O7M1Vst-Hmh9cH-;m{8COruv*a5^@T;%jkvyiuvUO;F=40_y>C z)UXpU88kE-O<7P1wx3Lw=@-u~|1HSld@V@|857DL5WD>^!4>HfS!9XKxNq}Y}x`atK4uz1}ffl>p8x5KJOX?%nJ@jEz zUbki9nkROVX*{=-iF2+{8#ml1q*{|qHCu-Up{#$+3A+S6E7tz4O;9zKYlqQsL9=Dv z<_-l~|5_LPB%5}2#`A*_kXzV;S+z5yNccX#)YsfU+{`P3O8H;CG{n=Q`xWc@?F^)> zxpjZ*?8AN+r~pNBs{ex(!~L=fFO9}FvExmZ$b8H|W>$wri)q3!Vb000RHHs76}8k1 zk^ur@(n+djDlD7aq!%BiOR{T08eKPkj4w#xF9)w*zV>|o+`2F7+B&rR=a(wHZb?;9 z8qPUu>*mmFBjh1Of&b*|Lo_3~s3j>6x{dBzj>P}C*0B*FruzQNq+U`BwaW`P;wSGT zbBv;Kj&aI6jgPQ`4+hnJsf55drHk0Bt1g_>uD zV*3#M9v{MnTwG3abBT;-!4hc@(S13YcZ8A68POQroaBUVgU6tr0^v3NbLM@fH}m9r0xsCj^BCSbym6dMdF|46vV%!1zp~c1$EvD z`uEbv66-e~ySzA)2ymA*y!IK9ql+93e9W9wF}+Ev8`_y_s%?&&pL33~yP77z5}ad( zl;LWb|J5?RGn&ht#lWMh?fr;U>@Kt-8Rkfl#Ef~4tt1a0aBmNq?aH4>H(&az>&`)8 z84$qnv>$>i(@d~rx_bJb>$1C`(_6l^>ktElGSVETKInGGJP?^p#Q2-R8K8weEP?T| zHbhH|M2@_5$AH8Tg^(K2{wp#1fyi$IvAmcs76$(fo|}br@ylw&?(paevDM&%4(5!< zSbz)bvspDsckt$axcx$X;B6oy9iRF6NwAI?sHO^Gj!@RcJk?`EJ8#Lpz31jUpa40= zD^yFlLn^g59W}8TZB*xSJq3EA&vJw zS{dftzGYL62EQ0oXXi8A&WychUO#XxDZd#{^+DbY0tv5sqdUT`S4?7P9(+Qvo^y!O z9l7cM+c#kJnhLB}uDlE^2xM5+uj+g|k9>gt<$@K)Q?aa(XFAB;%i1#g)oQUiH0D4X;Bx_Hs9au)TF+j@{3-!FjHb1p6D{+9JB*(V!Av% zNy^CRLDxh?MC42C*(hcS{NDIENh<`^(=#FBkkpK7hvrTAolv(8RwS9Ax1OT)hS!ZP zpJH=)S7O&3WcE{n18@wCm%dE=5eG6HOU3u~z04E*XqVB=8$~Veu&b41tBK+9`JA?C zQ9%kq?>}ocoTnfKYc|gWiMjx4YeF==G>uB*pad`&J&;!+I~o}36W@2w$K0L8nO^vc ze>znVXB%%Lul+Q+VNo#%($8^6*rc6}BZ#7yfag-Pl+CSkwGlU)IR<}E4)<`j>= zAuGw=&U+sXJe+VIyQ?4@UWU8PSi0gZ}H zl@T}WSG4`+{Mux-+wdLmlw#-y`l4j?NEB2-6z1Q`TORi0nbs4YzgjQ?1_k*6YEtFG zzLY3h=T-du2$#@w9P}_iB&)6u>j|%H9%(3=9dlLc-Eh6N9^tB4(tkSBd}(v2e6Yz1 zPn4y@=<=S8L|Y)m{*nbvaO31z^>bhLU%$@XT@XcYQP)lXvYgRTy=juF z5w}t<-Zo?Nn(_bB4LRU%D0b;afRT45zq7Djq1z1CZOd722D#~z{VKIT8k{TPil2Sl zu&qKkVMU#$KMdX#r*xb1;IzSt+I^9BZT)dteEqnlrsTR-??kI;ie)aDoh1J9R;%W2 zw{10cLdk7#TgEyWLllh~bm*<3Q#Nva7V@7xr|F==Uux!-Eq0ISphhE6wrVbaprRSd zTKQNhHal?hOq7(Ab2{rrdDdTh!t(R;zre>Kn{-35_~9{=lMIHlYtcRqX2Ij3+1TKf zE08ITt!yafRe-w|-%rpNSykaIrdQZ(n+5d`R2*K;&Hx?7<1T1!FxUI}ZTu#s4ctGT z(Eoe??6gqwbEoNz-nlP6eQR-svsN>O#!C&o&(NL+$GzMJ^#v0*aweg;0SZ_f#O=o( zB9{S*>fJjZZtTrhvIr{1)iZRt?ntK`3&9Agb4g*qyOMv7*6y|0l4Ct!2L67DbtQYQ zYOTNVQdRWr$^SkqxPPk+-N%IOCeecW`d+eGiBeWn<&jE~@^r*Is(Z&E1E z#Q9Y48`O5s-yI-ygYM0OR?5VcYr3%=xKOCkJG{|yh6ODxdl(bLkZb5c(cX0?{D}%y zH|l^IjdlJ_dJxOjX~U~uq4Yve_pWBqmxq^hS}j|X+14*uCXbgxnlLN5U8lRJCkp!_ z`Nua*_8EP1Me74NizaR%?^cb4(jFjt;-$pg%K`?}t}ZUuy*q+d+btZ$5kym4C*S$< ztn%NGli?5lG?%{!MBqa$rMa|&ZncwEEnSku_35cyGru(pq| zDn9)>!^3mbUzEg9n#Bf}+S`LdYU}oS$V3j(KiHhiF{`xB;!+K%b0jN1(n$(d*kYt@uYZ^i+%8Y>+sEE+j$=J-H9U=4%>R{SAiq z3`8hvlu_gqnGB`jBOMcgMrhA1%6qZ#ZMA~viOCs8q_~Rg#8ab>?wj=1z#Tkl~G^OU{_}PBCeP8jYMVXJpJM_c8zY;EictXfKB>hc0d@h z7Jr9eUSYkxc||e@hxg3+C~R=^$kelh_=irA^J)}t(lJH!vcYDhn(F#NMURv`2X*8M zgenr_LcW;u)m!38wy3fAnG4|{1RXE(%vWrt03^~#T^!M)3PE0 zS!yCeJgs;;pHfy66fp9!KTpe?WrEVpbW$TwMxCM^o75iH&}Qek*^mk%pEU=e;(K}& zNqXafROrT$N~#SCF(aXyH}+qv(_5G7yv@hM0!0cdiE0x%thCIbIq{AHp*aHn`LyGP zvydOVGhpPwJUpHt5Al zK8i&WyV8m>Ba5BQ{ZF9kZ(QD(_RpxcFgXu8W|kk*TI^eUk}rIr?L~K=lwq&^i2wJt zhGUk*iYaitQPxq*4Mk0p3sn`dRHjn<6yN{2)jcQenu9Ty2iTj%4E-|FB8AY$!}HQ@ z^=3~x)znONc%!p#CBbL;2q?htQxsD(J7>Xua_s(9`evZ37k!PfVX@@Uqtt(8ME5|Q!_r@4lT2nT*Cf-A%-z2Ky6}m7gcfxCe zs3dah&oRj}T~oKce1xy|oKY*y>tpGqt=^wOv$!5Nd%}YRLQ<}@V2<97@ zI6^&I!Sohq##4;*3mFW1x$j7=PK^2S1!T5?K58gwQ0p*oHFo?doryOR&Fjq${bN?l zX~cUe>OCQM=Hu~O^hHuN+)gy#SRm^;aQT;Ph7TX#6+VscpBaCC9E&c-B!g4aP%;7w zDj4%7XM=uBrZqjh-NI{B6kR}7UvKvCoevdZz-d%{{^BiF7V?7*Ue(F1aQLXrit8=C zD^PFyC~d3osZ*?X#pUCa{6+3hlc7S*=I}?R)3+6N_sAsBx>9Suv}3K0AgsO4VckBg z6l~1vHX7FX%;?LJ#tT%hkM0Y=-02NA?g{5kuxnTADCT~W)jQ{w_%vaPXe;Lg;lFu3 z#j0pX9_Uo9n7m}+xieVHFY{AX8Q<|Xn$g??5>5UlFt90fY|P})y86Xdt+f_S+e;Fg z3KsQ85kwDfUAaeK8cf^eL6s^Z7a^UL`wXBEHNU3aq1`2d(3ifFpT2v8YGE8`k|=!1 zd&72vh{kvlFAu>2D6=~q7DQ7tetehstcuAm*-Y*vy?*xf+0u1Tt9_TmS#^{!Xb#-K z%)wDU2imbRpR70^J7-NU68RxNT}~Pr@z9`x#7_;Bcir2o+-FxSl%GA?cP(ObqejpA zrbNKU<_xQ@^z^CyMJ_rr^AdF@l%FFbe3TO6cRF=cUKk1pQOUh`y87_;=+C!9LpVFu z`yTNV>s!Slypu<+@7s8YNoQ*P&|oH{3Q{is-DC8Ibj^`zUErbN`jk7J%j{?D_aAo8 zIyt5m#_CyA-wNoC@OOD0KjX`FdG~2Su$-8cE96G)6P@a+45Ajicb5?Lcwc`o?Xfnb zR%vR)>r)`Ye^`vv*8Hc9b-;EUY`Hc@mVTk>(2QnY`QC^c~{490D39+k-DalEd z-6YPB-oZFb-1NCw_JyVYsz9~I&h>5~yyfQ~La8IxZKJ8yF<;e5?!s$!3!!xWIvc#` zehsEw9-b6PWZbr@ohYLbjlIn)%~a`cLP{@AFuC-Ma{P9x+RIx>rqs1ZG7u>Q%x*h;6`Wx zZ=}8SdT955mC3{T>s^XzWHL=C)v*U#%^ODo=u3W7Pi?zo?*|5YLRPH>`+lI-QO2!9 zj}qW}Thpl#ge}S}xw&CfZp2IS8q8v1p;nXjBf*D`8h<#7VXDrP)ow5*dLdzo$#`mS zaIIV<2NRodE6G~%gWA4Na^PMQ5`9fYe3v@KhjN%+##BV0yK|D3INY~sT84_A2}FOI zvyRgvGbJ|-4nc;hBxaN=G17ivzR;i~7iM)sKkWRYde1>Nh>2un}&>m|{UlCi>TQj0tLayu^Fq+wbh$%Hegd{BGpuk{Ah$1UcbM@c(R zx<=iOZ?j4q7!X^lzEaFT8+qWQmh>y-(jNvJ9=6p>++w2A=#9`b7vqJvl9|>aM1KS6 zWG+yyzWi26PEp@!->&EdD~*66kRt5L0G*sNLlSvXb)Z(yD@*zRWdfZukd3ZloTLZJ zIii95sj2d*u<`!c!eK@P$}}IrIT?w<-ei?!6cb#7;$3xuH=pye-O5EoH5i(%>`I9u z;+L`)LJusIG z{r>4eX=>IA#ny|_Ua`fk+|RB7WBbR36;oc-EMh(~okI#DC4eQe1Kgqfi>;wlxlmAk zjAjur*cXOZYL@aJ)C$yD*5htdK`{KD#9?{D3>GW_+_2QjixXVFoo-(%1kF;pN%}#t zpnm$!LOtp(#RBJLBqWbF6`csFwSP8clOBogRj5^~z_=cQtJT~!*$0nc(hu?Ls5JLJ zXQ1th88Mh*skzp#K0xK6{@6UCL*$3T&Wesp618AOe1tnQBi8 zPEyj)tlgL55>@P6M;f;8Gk$W3nE$Yorc?e;J>&AFgl24WYnKou&SGNacO8 z(Gyk|r(N~_(<3gR=GMX9|0Lrr#Eb*?C!egkmS`{~>TEYvteEhVoXMl_mO-NlDh1;O zuBFH5w_av)Q@K-%CrFM9M%IkbJz9Ta*UKiDZV(Z6sEAt-X_rnww|E6Hn=@I`KIb;$ z4ABV_kWhmX|D`DK3)I`?z=mYbx-8q}0%z@Cw<~#Pn^j@t=zvAX63dDMbDI=dp! zlo^8jy3gaan*`u}+1ko+kJ)3<-6u-!%zPvyTsbj+SO_X|J+DAy{eK-S%2WCLcy<0u z8jY!Soc0dR-1P`&bCw#`rYg~2y|3Y2!mvV2kc$Lu8_nx`(oMBFdhTObgXD;^jRVIb zM{Y%Quwsz%&NE>wlEo;cRbTM3CQHIME1dp{O%ym$sYO};kGd=2V%2ffmwkkrEgl&C zcEpe-D8@$IAVx?+2$L4|o;`>SIskMbl7u%D`b(r`>L?^p>)x5)dFx4T7L+IZ3!R7x}i9Z38E)Nv}iv_4=P6Sk~Oqz zD{xS~9_ERx$csGCF(Qx-!WA44e{_)SVW^^~61+DbZNn@ma3bXPdbjwvTD%!K;f;ge z#nuULWQZ_ViTw772MSc7)xza-%+{>agVApX!DSktbUK5#O9sjQ91Xg!{FIQaI@}a3 z$m9nmk(e5p$TM#q-Aj+7>T9;OJD`SFt>ATsP?qmTA})A1*XK;eiJ{nLvtd(>Q>|~PiYIW{S?r%?ypVuTvrg?bYKckxW!u^8c5GEJIQ+8i}qArSfs`gV`r3M z1p1@GI;(~^UVmLDSRuqa_F();$;t$y(X|#guQ&8kmWn+j_$OLTU0FV!0ZJ#Mrk?J; zs##rMAc%N-b1=Q$NYF3K|2M#ikG_G0-%)!qbNmBfVK$PFORHOk8!6C?&}B=!I4b8h z&({9;%Mx>Q>jbyhc^Pst)ADw7enKr!d=PoouX~Ck_OZG<1Q-U}nFgbON=cywJLmJ@ z4#Ahp{t0M;3H3X63^Cti%U`jQf4|x}Nv>6b#p6P0UtEC(jLKQ?7E%AK9k^*9$;~oo z0`pg-%_+7k`STD1dIJSHlPDm+^96ZehX3^4jMj1{&-HzGvBjfhNO*TFK@^`qiMa8n zaVRW~w~dR;cbziO`2>+aE&Bd$85z|F|G8)Sz@Wzh@I+$N(SIZt1OxUT2>C$&{NrP0 zWz6uZ37_GBitzK84T^(a)y#5mQ9Z)jg7(&zT%a3j-gB)KLK> z{nmixgmqndy0vw7+5S1JH)4^yw`J?c-)6f4bzv(C~ zD~xZA^boz18qp761wK&wdQ$Ia+o2=krM9cWd`!uQg``<+&7w&kv3B?{TOK$nU(%O?Z-M}@bCRVKy)dfyYkL} zb?Knna4@v;eAL_gG|{5>@=h8)tT+QbFgrc8UP9x+RU=;qAYfjF56%ihURdV>1_6zZ zgD%k2hVN2^ZUn>O;)MoC6qO8ov9!uHmestg$s6mUgOA&Sd7^tKWVV>ppuAru*tiIK zk=}Oq95_r3Xb#qg@nr??^4y`Vv)USRJ0(P=BBuE7=x4h0mP3sH~?u5SCF!AkPh&{j6f8Ad)$i34|L8`ocD81E8x|5 zuI%VDG%72%OhnT*#l@;=+VL#em&w15s`>y#=X;*hfKcxEuLF0)2m*dMU|&S8m3j$7T0>Ca z#j}!mZ%@bgoB^r)P<`D|7g1JMV;Js`4JcyI%gYm@FS`8C zJCt+Rn_XzU2UuQQ?dFIOo9@eeVs4p_F>mhq2who!XwEjZ-{#e9$$OqGc)P#essL@Y z1gPP}Wa9ae#dP^f`P$W>^%oM{?Q2g{hD4g&S`L=nfN2K*e!9s<=6{4{&DIeo8Y2SV z>0Q4bK~irhqkof7?X*Z`&7uDu zk|J+$jcnBrfPBqW-E<-^{`)BKncqmyjD9IXS&H~`(zO4A^%0f)a>%9F$6pr3bTsM< zhIV_>y4LX_w6rsZ3@Fk5A>GGxqq}%T!NI``$_cBLs}g(VAU{};_u;88=1 z?f`sDON;XQ8xDIDQ`7k_oXVl4AhV?HQCq=YKfgl?k44>LF?W_~Cv)`WWYlqQWHQ7b zI?ypWoFR^x8D=2HBLu+^gvbYFet>X=KmPC4uM`B{P1RcFJbDrf2U0IZo_zn%F!GE5 z^Gnq=`<#IN0+XYI2hMv{wX-utotc;HoENB&%UvK$6893@=Dd|fNW%_UOu$?^OCkV` z^#Fbc7<^0gFLCeN0nF@=)F3KrByV9Ie2SAJCywP-&s5V^K^n$i7i7K_dMYB`nQl7Z z3x@SsVPW-;ay-z|t3yyiPGCcLIlh79G9tYGh%pD1mz|v&x2uy=Oe8SuX9=t=(!Hd;7$zC4bp4UzT1EX2G}_^8)__bk@93RAC;}Lr^cvopOv$jnrO=jS{pVM-W-# zq^k4t*~jL9S2F!0Y91OsM(C)Cg|}n_Dpeat!IFfgEtQb`+9>jpMwXWf<-b?QQ%6)*|HM~ z3%&Bh1@Co-H@X3cmgy+Wp#bUkOX}GidH7X(w&18EtAghI@u)A*9$T-UK&8G06)~HZ z_1P+E#wQ!)!f38Wy057FM*=9tQ~dN2C6K;-In+<1XW|3o?-pKmciUX*HoFcK>KT^<0f zvWoxEcKIW3Bgc)wwza7Yb8emR6?LF|%0GV#ReT=)nb{=c;(A(%o#us`fmbTOeSa&i@jlR? zVw|!yad@E{pV$V=D$#20)m&v%n~RNIJWJ7P#Tr9#Wx)Ws#^FB?PaIyQV?u2A^y4J7 z0gYpf?Uuw3$>_)yo~1>)0Bi$u;6iO0IpD$?^+o8<+PvPES1wc$$4i0!3+U} zt-JZ|_J)SlB{z31kuVxjp{hd_?5V}3ffbo5C0!&efg zv+4Qo6ft@{<8jHCL)z5`j+_$taMhZW2KnP`X*ajX>3t3 zTG^z0#~;veLtd$hoz0fW>$}wTeRg&maIb#AYg$8f&QEirV_b4UK`&c!blR3sZvS+A zf9f@Cso&DPmm4>Lcm{KTf824s8MW$dxzEs`b0VWn%D}7+`1lE|`c(p~f}zVk?9Q zN!i#p8+$m^^p>f%15KwjI@#Vo@piaE6yL^>f_a8@85QnRwC-=p&ZB8;Yi&*MiGi^a zxb2RxqqK@H9)#n$OszNEoEVj#g#ysq$3Gm=j}DT=q<6G1tC(N0&+t&I?o2hizF<6> zqaBhp28d=9wARC?TxywMYN`k z0fd?0hqmnZ@t7w(d`j)$M#Yu;MDqJ?0vD> zoDtNih2Y^Ue+ft$f@rzdNyKOR(7p!2%ogKsR#q+@x}RXzH?hA1Sk93U!*0jFRVY!xgJaPJ$kyqo#RsIRj~x!_4taU zz;rQ3_O#EKImr1Tvr!gv^q5<W2H*VQ&+7Z=+Vn6fr2w?-RWMuq?t>Y3^tlhZd%rV(&IxeUPJn;- zw?Yq)1mSdwi@i0AEvC>v;UnmnB*# zU1G(gaN@$rO+Z7jBYZGij(erGUz>Ceu*0S8L8K^=6M3mUeIR z_yHmEz@*rB$Z=_6I_u0pnVj2ij+*C5eUT7+A~N=ZIQn#*LA4sA>jvH2H}H{Sl~!ce zxl>QZ-%fuLRW!9n=vnwm=mYL=;buNc3^q#Ao~?&sJ?p+Abm-OF#ArjcvFBT_^(SMc z#K;irC!ZRdFi4RZR-cRFRtS;@fqNFL^!Se-KO%3_?Ac%~05iC|Nlg=D<3sVs(kx>* zXOA_$-5;N$JAQ0j@q>D`q%sPzKoW#(eYYlsN5~qlnlKJ60_k zods|+q8_*aBq{_VSkIO~^@K$~xYBd_X{z=D^;%HAM`puFlR{6ha|n*^*B->LcjS zR8LzI%#Rj(9t?( z88%EVi&nmutbz?DfE>F1l#lg2N948Vi2l4S`NqJ7_zEf-T=jm+X+bRv3-+d6{Y79) zr3Vp3LxFF2f|;&GUM$@^%9Py95GnQCRsw!RXXvD9!<~^oJ=B0l1Jrrhnie+#YIIC*CpmlsKf(*tXOM%b2UxJJOCp@9BrQAofo!e zD?b`wG-t({Ryn;_dqQcC1e$w!0o7%piA=w>& zG_jmC!x_x8$asgD?SWwnD{E`6lgmDif0U+K)a^!S8Fnckd4Nf8ITE3H=nSh+43+z= zflkch>n!B1Bi&U*oeA@A(@^WZq&XsF`;;U5FWJ`cMzP4{T$+`Uje0*NTB^OjXLv`; zzq&0&JO!CWv&S>XyQoM*6pnb%oey;=x&ayy!6JXv{L@I;dBOJb;S1ef1Ym8AK*^)^7Xsc_Z< z&t0H-Je5D28*cCPK1nJ`WsBzcIy0ohqTmflW#)ZHEv@SPkN5>O`i0hnUZk_2gH40{ z$v zx<@TSbD~*dRX$;iopIo{4or=ia@KT|0z)JIjL6mH)QNo*s$;&QM@r@gV@|CJV0BCOS4-fzXo?8M>5_m3<9c@-*Kz6qKosLNK zu{ceXxL+{w;ioeXKO3#mqgY*$4RT_UQkV+r4{H4DlGL5pwdvym$Yn|*E#(xdAamPP zmGhG(35lI8W>?inmmMxNOa`2&q?+!?P7Uk2$v^!l3T5*0&dB9Xq^)FtAc*4A?HLcI z@X>34hMWhRi-%?D2thtd@~b%wN>Hch-8FTsR6_X|{GJKj=P5{B7hE>#7I?JAogNaZ zQVBIpPfx?(MTS$S{00tK=w3cgM1S?Xy+$h6sfa`abu1z9a$=>IK~A@-YSiOee|m2= zX0qfHA5hY3PmoU(dQb>ub-}KaX8wX(FceW2!~aJI7&vxOB?|MKDjC4^KR;hcU$lVT*(5yjp}Ky({^q+ zdi@g{2D2mY6Us_LaWXRwsRR+~E&yJs1E>S#07>!5j+Bg+2OzH!x5T*)8Wlw*D12{Y zwiPr=59_M&iSaFUPt9kMQuoYa6+B|*EP2rLN}Qe?G3q*U=z&$n;`i2hys zXz2sKGR7}T3@fw_I6?xO-6x2xIZQt6sdAzuX(${611mtaXSd;0uRgEUX zuW5m(c>dgO`a|x|zXIyUuW!Wv72%Cmsd`gz6QXL=qOKn}!@t*XyAu8~khx5fKq@Iq z8S|2=TSw+ZZOiq4%tO8V1ig9v&`W&}Nc-2ngrd6>C|Eq& z;bgA!r>j+qrz zzAHPtl_JPZvCTRXEFzPAKEk2S3~F2pjXl7DZI%eOHPQ=k<;66m^R5@L=3g zLrX$-(FZ*g+_n6d0VY6&2R(_i(p-XB7uH>Gfy{rq zU2*%tcF8j1qcC-Iqx7Q)x6`v8|m+y ze0BKHX(YxwGU#4y4~NAS1|JG$U-dfG9x0QJPo07aT82L-`(eKwf$UKL_=*F>kbAa9 z!_?Apn;;({f8@J_14fSZ!wVTRh>vB1IP%C0xO@dqpCYes z=gt*VR{KVZIea~Caf+!Sfe}U>z$}E?B5FMCYs+Tq4~W2IIv$=Vt?K$o%hDa|#;;$q z^fb>B_b0r2ek3`fV=PLF=uDRzMzVP74IyU}<*AG@m?)O@L*GvqQULJnyFnkGIJE4P z!U_7UI`y-xycU8g&qsQZUOwEE}_@|9#++o&~01tvQKWbk-i*a?_SBRi z3thC)qYoC*=U7mpl4hYd_&ObIY=|cyy5Or|G4?XrCP8{43$%!jkqw0yZ$}wR`>TfU zXJFu(BC7&Ejpwcxt%KL?CzfsnU$i_ECPJA!R8*Qi03Q^|>6AWslkW?s8aECyMC zNk_-Fy~TGcRBBQFMlZVSK9c`ia!(4e-Zf4RI?#` z2bcAq*o>)kSPthX~$g_Jvms&c23<8$o+q2k} zZy6dI8XJ#)sR_=uv8$slW$R9lO6_-wca$h__3%iRyR~qW+_3rcU;7A$;X$4I)tXm_ z_;Cq6Vn4o??reNi70;N(+Ip_r;yhpF4V>MXDH%DVVQbx(>{{xb0D{=L198aX*FPt`rP zS-$bw@3H4{o_+-kT6ez-85-JMxrZOZk~oh~gh0Zr3;PM?d#?0y`8 zRl_79#Y#CtbVK!?e{Ta~6!L<&PZN)~zTvif(Mn6slPk-%JLA4po;%-P&Fy^17K?FD zgYWsvdC9*4DUj=T#TP~A+^)$|yHc8MehCrZu;tXhHy^D3?Y_C85`YZ;j+87*&TPai zPV880Dhdy;TiRCJrfe+DiLRD0Rjt){;<2X?IN@q?VrJ z|B7tG#h1a{vaw*8VELCTFWcJMN~}JYRy^DyFJVjHSGm%Hy-?{sB0A@yy5IyO#f=@e zf0a#`_4W5(meSwEsG7b{DebVSvfufH-I>NR>X&nwOan*$;vd90$iYfT;rc>ClIPq% z>JAPFKk^zq>otEi3Ohv31DUHxZ*K$H^bu7ih+;C#9a@tyCAaQ8H($=L(H?6SfVI zmsD*ea*Dw{;ij=WtYxQb<8t@%LMHcMW|N-d+%cYo)`8xVwx?e9FdR8$XDTIf^ENsj zrri9>+gbZRc)qzV&a*n9zaE7yp)}bXoAbI5)zv)frMJ1Qq*67z#CDdX1!3Ygv0%H^ zh}}}KSA@ypdokRW@aDEQ+{gw~)$(0k`o5v9Zhn#ZK-?;u-uesS(4Bfq{ng<33Zgy% zlwgvP5t-GE*2cNloKe>odKU)1cx{%2d2Nk0+~lfNLhR8*^_}JEs~>b_+pZ3EWAig> z#=D2NIKM4(dJ-cjA}K@_B9$15pYv--yojN=bEV>(dsl#57S*@uIb7(<6YXyw1@E{b z*Hi1ZQgGt4$~`AO+FxK`$#S@5Xh6rbJtbhbCSPJnc}?}P$a))YtF55|zWelF-+hsv zKftwVvaC^;S<#3&NQ--;bZGIC`%&X5t4Q^t{`$1ziPF=9Z96Q4;iyxGk2Y~|=L$O9 zlXn)3cJJ_L%f85ZowiOb0{cY1@olZQcAyFAXR0L@WMwb5SK{dYy$X5#XbOr&;P}gKUaVMVgJR%C1&Ez z(;5hDzVgdJ8$WJ^Q|^`MOrLm-f8~b-9zpS~_c*up!K$?8 zHcy*bW!vqK4p?C+Zeq!p7r`M0-;B=^$9rwm;MUvw<*o+8!9F})5O^X-dLA>*98eLR zmJ!4fppgELTW->Rg)fVC=5mKk#Hi(B(9W;sV*=)0FRF0LQ}S5vF`TBMjm>ul{WVS5 z>JTF-n{=_~3JOHHaeaML`an+WgrUxHCjmK@T+F)$Dh~ZRSt2zF!L<6A2C{~wb82*p zfmV|yF-m9Yc~tC+24?hdihALf@Pp2NGk)%yw>VuFN!bb~r{Js8jg%A{GOMEEQG)Kp z+a;=4?2tp7=#K4$S|!pwIwE~}Z~hDA@RmQ?b+J2XHdNSVwdydx$&Aw?ab5SxXMgx z;|l)HYVgMC3pfa2243@7Y&KrQ4nqZ;*XmubN1u2Mm3saXW6>~0Z)-(vD6zwO^poe# z(z{tXuLnc{W2R!OD2Bcvrz!qUhQot7BdR-AqEQG++SRPmEepoN=L4c`DHRYsv~NRm z-P|)9Os;%?Il6*%UskP}pRJ0kU&$&>^6DOJ3&#!6y6~?Aq^x;u4>5`RR9_#lyf(KI z-9dHR5m$f^CeVWi9HPeW^8^|zPxam#Zab8ZdRJhhG#d!**w z+u!fnUFf+nGrSXwvM#0Fj!<=9ppV$9Zp%NPOfTp)Cu%k$Un}crg%li%zbk$qrTtXBSxG*IKfd!_Q9_~)#44f_v!?^8Xrn{}= zUFLtifdNl z)uqM)RL4Ku_ZZb}t<$qgl0Z6SZpD?hRQ2B5=t`*s)%;1&Q0cFLF5-wz6K9f3O;6SK zL{z_x_(suzhy*0=hXV<9PA@Xhb>}_PwVf|{UOuV~_2S_jZ2g_Dh>eyiF-i4aEu6Uh z0bBDa9*ncNt*MmJJJ(4edJz!0xH7n zE?()5TdRYr`$}Po^7kaJtgbz7JpR73v$N)IB?Em=?dx;a9at+Jc9W>|8rHyY(T65G zt5Us=N6wRrpSdJxA5E`_Sa9k3ZsM_x zQotVZvk)LWpq>{{`4tQ(OlLJ{o9g*&TRwS?e8k>sa~oP5oby~=7;mZzqZNnof8TSt z{$wNfAw0gkKUx&QwSBKqiI*Zv#d#g4H_H)6H$)qRRslHSwYq=6eply;d=O zwLzJ$)-eLGF~&MWZy-n8j zhob>l+z5&IJZ@t#KLF)vuw1Iv*&j31tB3$xM3`TT>CKT=VJlfbJ6rYRyW8-lp8X;$ zs0qcRlTc=CRAgkgTgG>Ee2K!r zH6{U2Vs=QW{l-rqoxWMGt$a+xHQ|nbA~%%97XzATgN5`}e~AZC)7_kZm(O)a#vuaj zG_Lw|$5{s&S!>UwNEMwGRrU*dZd0@37l0L8jBnf8=&5=P%!}rdf>GFLL@c~&w)l3P zt>=tl%dnp3v(Bygk0c&0ioykXVpM;;oGsxXAM%ATZJKs0Yl95#|=i4%X5Hf5&fp^Gc-`u=AxLk*u;X!nC zH(O7&V5JVy`^88fjxwSbCwzbd9x7l{=A-h7wO&4^b3*?7+l6xQ9w-mP3r z9`na98vUrf zW#~sqvG;1^#8!sT_Y=RB%x7Q2HIaz#%R@%$5UUGt#~c^07`l)WsYYkyc;*^`9r2niU_|endKKF;qG+{ ziAAeD!%Iy<(!__-MdBkntOStNY7FArPgBsY358sx*R{2K;i89DD<6Gg#a}c&?1Nws z$1RFiEj(Y{Y2n8`JvZRxR+Gy{;_=T!cFOW;+;~8Wg!;Ns73_0bi@Saoe&psNi*K2$f(P2fEqd@V3D{me` zZM7fp({WAS^IA(%tOv)*eimEH>hT|A(0{k8=(X?xf)3`|b zQr-E=%s&G&o@gTX>4vaK|5ntM^&-_*EEne%7yihhEx#BwT;l5lyTaOvt zHjnQPSg)xyX=< z+p1nxFc00*a%R^&=YeI>6!?fw$m>~aTelw}*rtafw#7F38;uiq-{eO%2}J7F^u6FV zJn*+MJwDFqwI1L#G3d3uJTp}L%wrsjoAg^;65TE@$=++?qfY%f=c9c)9~ z!a{b%g>nSwKLv_As_e%JDK=<#Mrb3!%{5d4vzyYe_HEV9OqJN$XWy!OD=~=q32Wp) zc8_?d|4uWoLq1#;UYSI34#EeLcRx_K36$*jsA7!Gt75)KAE#l9>Gxb6os*Li-}+IF zKf(4eVF;Ir)$V^c&TS9P;YpKrb8WL~V_AIp(imuz6yen-tY?Fw-U8f4pO=Oin#&L$ z2IH}*TmodjEj@P&&rwy}=RAGfY1@w_celC|!CPp>%Rw-Mpr*KV*UZL;72=-b&mI5I zFzk!Qbutal#aOTEzLu)B6omI={=Loj{Q)Xs6Ww*(2}oR?S&=cU4eMuYcmK+GrJ?6LDD>lM`Dwd2k87kfV_GiCy2{r z!5z0bj2i$+6Xv;u!Mgz&*_;(~{5xBDDY!hCxW;RHO?>kec70qw+|?6b!VN@3pIWuE zjP+W5HLP4I0FND2jSm{0!QaAGwfI&w+>G_q6y8jfpFZ0GR{s+?yE zCEJkuu8osju)ZsBzW{#Qh}*Jde>M2Rlx+|yTIkpI9BN=8Mx;PNe>{{vEDGz$O# literal 0 HcmV?d00001 diff --git a/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg new file mode 100644 index 0000000000..9a1d6fc639 --- /dev/null +++ b/assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg @@ -0,0 +1,4330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Energy and Emission calculations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Injection + + + + + + + + Drilling + + + + + + + + + + + + + + + + + + + + + + Processing + + + + + + + + + + Export + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Power generation + + + + + + + + + + + + + + + + + + + + + + + + + Power from shore + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Emissions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png b/assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png new file mode 100644 index 0000000000000000000000000000000000000000..1539208055f52808dbf41c157105db23b214f01c GIT binary patch literal 43536 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 b^`E(9`39BPkSyTL0|RhVfS=1cr-UW|D53y@ literal 0 HcmV?d00001 diff --git a/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png b/assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png new file mode 100644 index 0000000000000000000000000000000000000000..a73169a2d68a331d534865d391085d6c158cf199 GIT binary patch literal 16617 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�T+RaHT_$QDCP}4Z_^s?z1jCyA| z%Rf9UOq3}BSLq*WkLcf6zW*pja*AjzBH|*k5{oQsv{H%QjsXK-PN8 ziCbiCQ$z!@bE)Ts%^M%$+}zx4V0f3l?UeuH1$ZqGrIn>UmgjfCse{4ue+|t%ME)^F zw_|kZ1;V7B?uW#1bVak&m~;9{m*+3SO!9u-O{w>wh~NNpr){x9v#20lB4_p{NE>@wODP~AeV@v!X1{Xh+Zj}%`)JvQ4n=fybS|3_RVW!%U0n^& zPYO77WE4n7RNn>m5#+5vbbJtYoqe%hnszPD{L52j_o;Zd(ciyuL4UYd#iLh<3!^vu zU3AFv1*wdtWqM&D5~lvzfdN`*QLfbqCVmHJK^gXskEe%~97_fGBy@Kjce0`g<0btV zQWPR(K&VU7xWEg21I!Pz^YPW2{kEvUX?o|*2`j59g(K-C$^2w~-r697(?5!Aby8DP zyF6;BFI$>|0*cD99UraKsi>%G8ynFDZ7)_V>EG5{TV2)A)@D1nkv*%Jqx~43t1{Mj z9T_|ujuX4(yJeXliuCPL6iYLA_kj2h%*x_~1t#6h(9qPxOQVNS&)nlNC?*1SToG6bXtNQXwrz+M>79n2GG{BGQD!=S49jioX^Q9W zCWJhEhz0o135*eJX={y*azxbpxDfbCDk}BRBb=5;rL9RZh+3iqail`vG1`OxfT{Z- z%*Lq54!2T!bTD$1oRlQ>dI{8eA}E)JRi0;$4!3I31|&hoh3Y{Etr3-&mrH66h>y7w z@4bbRmmmR2>@Umyo|>`%#oT=|MrU^DjX}OC7LcCzot^pMeo(m^*0aHV6bK0b{WlCS zl~j&4D;N!cbKfz=(Jy>=boET;{HiXDclLs(6LY)#lFznrYmrSNH1jZ1jvHBBl zAq3%SQZ_amsPu@$gjPdQ0E~klsld9S2r?iAmwph;223#YC;DtszgJIu0*dl%>s4s@ z%~6bsH*S!F8k4#Ja6;04q&gD#Tr()Ponz`n`jNG@QetbZmrGseC_vGE3+&6fv)d$4(e<;Ua8`Nm=GT+Zx<)Y zZ}Li&%`ObY%aQ43iIv9FFRxgig1*TIo*@_u$3UFlSX^mrY8nTHE(H8Oz$C%8p8yw% zH>k9o2bl_|K^rE5xn^b)bq%PCt>B`PJhWT*`(|@JIfy?rZ;Sp<)>M4vxbV^FBenkd zzI!*67OAYNTIsr_j@p~p*w}Q-T`u0{r}l+{s8Dl=>TGFgX<-o&L9bp>m%A-J0kgzt z#Zq+xJfpNdao9f$2ICL$oZ#_?8l>{GM?39)eNvWu)f*RYNkDus0*Loy>*0Xj{_@qUV}Tk_lS{EWh*l`cEb2Oo3jb9 zz5SE%@o~{5lcL@|&~EjtEM9|A2^GD3VMr+oc{N)!*O7wH|37#pNQ(50<_ZCXqHRPa z?UYfu%R`V-A3b`MO77nTBaZ*$$B)0`p&07*5o6A2fuX@N=NlRt{`>phXmNxJoa4My zVne!K=bGyB&(mN80hHDR zv)Y@%cEly2x37;1ZjQb>ks8t0>vpPoZ?8d9(QJD6E(V5n7$e2so^49{!!ZFK2L#2f z-<#G^vs1pQbXC*|jwl1|8e>=E05C5A>UDkp;ll?&;XR^xsFexujFPglG*kjGHgu$2 zqqMfr@8uW!0@e$gB7G}XgCZhVaUOAfn18mxEaS8>s}*liOS%dIY(>SM?7^ot#)X*> z&!4rmNy=k~bya@o4Bpo#Rw;??y1ov^f_FdLLBy$euwb)XK)m6+5p@9;&;Viup<}lq z%Y((ia0qc0s8CRifvb6;HbgUP4IEuO10DzI#fr%6}vbaaq{ zkS7`oViY*pP#l_?iVFZLQnb+(Xu3x`iVAIVpb7=&;e%MI${^~WD$QaedH(t0D zFHR-;4W}=kVqie=Bvh6Ou(rsWo4>na_~B;8aveUSDG1zXW@P16KY}5h44g}OuEs!% ze1>Vt3_u^+hPmVByuT&qPWowp|0N$L@3#^@G(Z-C@iVld!mBD#A}JPSWx)a|r=ZXy z>eCoTz70Z$BghLx3}RHMhZQOa7(&9i42nm?*%RDZY)M@mLoVHdf%6&^eg%r&m+Pj&XBDRf^k_ud+Eg9V2~MUf(-MZLxiFlCX$ z{ehtc2Dyoxl3^RoWhxKoCRKWPw(_xw#2lq&EFV zijDWpq;F7}#^&dVU@8S~f;-MoaO+Wy{uD zur;Cn#@0kh##`@It-C(G*DpJje%Mj~Y=6mVxORHODXzxPpXJd!2BrvXR6)>=FK}|6 zmcf9Zf*B@-MzF5U#rKev85&O%A5)kdM>z|kH*C}GjJkE^jouaisvx$GaYmqJ98)n< z+W$~70syLK-)e6}XJ03$BWnDN#oRs|nz>i=ba@Zc_*rXMP0lXWjcb!Bc{(pFx?Rz+ z5sN8cNj{KG4VQw)l0JRoUtArNbtXPp)yy~a=B4lb!K7>MPpEgj_bl0~Av2&N(u%9X zEZ+D3Y#YI;IjTy?6>Vr*#3ug#Hszxm*N-Dre`wQ=QH-2H|2t6ZflVB)^8bF++REfaz0&4Al z&ax5x>(SYxAzODQa&}a~YOD$q{87=ZfD4)$mg$lN-NJ0M{~1F0p~UmKyO-|k)7)a5 z*((3$sp0J8)$CeCzO7XYJQ@A5@!?-0>c8Me)Kl?Sxc=uqyeJPrUAm}q86-v&3851P z@};fqGhmysu`w(M2M0O{@0Uwwo-vq#?Z-zUXQOdvX9xB10!AB~oD2r}pXuB=+?vB( zPKryq{tt2R%~A87vT_}CBFBY(0aX5{XSKOAZv+W;<(j9bDEQprZ=OKhSHH3Y^9O!h z<$D9g#BeV89A_30d9_6GjKOs26b$!|!O^w4y6OmgIZ_L%EKnp7Py*3{^yJBt zP9Gy9Blwsdd-549unO({un9%b>9tL0WE5(2h(bzTl62sY59*9}ue?@hXXW5P&C;D4 z@5N$KI}{O;b9;Mvj7q{=7(x3Ce5Ct$I6Ke-LD1qPkAS@!q+Qi;D{`B6^M(!j6s(#2+d^Z1p|=Sj4_2*G7osRc+G5avMDY(v$VV1xz&C^?Dd$ zQTuso{MER>tPCtR+NfR&WtjK9>MLw!Tp3weETpck4npV7iSYF^aI@gNVAxMc%3M0k zwWA@Qp+wifi3ke|C#9!j5Hea?&Y^_p=s>_2AOF5MI50{Ol$p?X5W0L>Rz?Qg6m@Z{E$6#Ph0DF*CZX12B`0e!>AE7j~=m)m^|PX}%WT(N?v z;$2wC{~|V4<>=HiUyG$vH$GzfgI@-uhuTNvMSKvMnb%X=v0h5}h@$5Qpek!m5t*mm z{K|1^hVQR+zj*NiodwWi5N3cv5#X%$Wyo2?n}^T8vpnIC@@-(;15(qXJFK4!{!aJ% zjwuA{6Y6I>-hW$MCMG7tp?ZgnP3>*EGhIh>bEww2P7Am?>?W!JA*LWc!3UGcNU=qa z!Q7wC@{HlH<<=J2_96&agMpmJ9~>G&E!<#CXfJRJPZuOkzyX_27$8hU3feJhm2_J& zZha#}3Xzq~^eh1!dvMEA+S(NR`}+t2zR>d_B=nEqu};9}g*|?3@o&%UKejj=ZzzoA zUqBO6NRhsOpC3Mi<9dbH7HXo&Yion8_+R@QV6UT8G0ZgOKhdFnu7_)TdmC;SD_tx@ zDXV+7dn=st3?UdUdn7tqvQ|evU8$Z+9hsYz?c(-~d;MhKYHk*(1ul}lFHkUB!?^hS zccZ|=zqWxJ?-CZ;zNH?cMq=Pj@qzaOw-~FSAO-UD&6~&1SQYCV8gRh%APk3XMlSxH zV)_dorDQN-NBe8SF4JT{20I??y23O;3s|ce_#a-!Q7L$|_<%oA+yX!b54e?T3$ELf z-@Y}3)zuwUa9zw;eQGX;JNNThf!l!8NPy2ZPl^9MV?(t8*O!))7=nyJcTGDv5LMmm z$zAV(;b&>!9kR(avxET`j4Z@>Qxqeqv$Hcw(m<440OSRZ&F|sYfd2*Vq0O(8Q>Tw0 z@(dAEt}P4oeEYf-)A#}AFWMg4yjPQqZBa;T!aBbsh*xr5h# zy>t;lV&-WZ-|tGNjWhb$qz$LBf$d@Ge4}vgQacj}xqWih0IWKn}t|3}OTw_O!KQzxTfE zOwnye44G<+k z?E`Bo%m3tSOOPJ~ZH+^Sp^h9s)$B7^Nd`PFBw1K26+f&d#@maf=}OPTw&&b-eHVq) z+9UM`K<_1oLm!H2LxSuCL zokq}!z{J9Us;__ncGSpc2++1`+NH04&(`)al%bhjAbX;Knnd{@I0nUn9?t?>=Re1m zpqQE7yVvR#vEK77#y^gdjBdYX;Q4bfhcL0cJE&CKA#zw9mCz3 zCzww{;2@x^q6H|NT@PcBGU#=VLzg~1|$eeg&ZN1>Oop^k?YivPe3zMIrp+RlFZ^s7KO?>iR zEgwcKrsK)!%HzL`?z3-mJMIDvU*}d8u3Hjn@)72yl+@IqVDqIyhhG&$2-m}gh-_Nh zCeK34#&WH3bnyDmdlB@TV8-EdUp7TgI)Jgy`skoM4FF3+clTNTSE^H6O|~D+8t{O? zt8Hr|=BZjg1>P?N0VLN9#}H7ZLQ=BEbE*KGcxa^ut$>Qx6onp&*80E@82fB!m6ny& z0hog=iGH7BR6zl413fo~TKD&w_!0lrU>ZO^Vf0?cn(GNGKhMTi-`tE3w$bUI zA4p+mmU;0$^gFj@4pz940=;7GNL@-&tOk3bC*(6dq+irTN=C#eVR*0qlQNhOWMl$h zA^xDkLh?ZKW;Qf5Y|OazVb*&ejF2eRDG$XG)$u`3AcwWV)Q4IMp3sS~R39CBK{OaF z-JkC-x;9wlr2`*mW0N`EnfCa{-7BEun_F1OOG)_yb;82KqkbVqWo0g}hLAa^ug0$i z=shwS48Z8%oSYnx93R0Nfa6q=47sVH!2}9ZV_hJ=UJ2f;wx;GeAO*m^0FVd+aJ|51 z??F#?!fP!LI36hv(Hz)P>zeQC8RyedJ|nx-^ZqkV?SC|;rtMu>Z>k0&*Bs7`bZ#*E zZcB>+-7UH$0?#)3k-o7pH^?oYpT|RkV74v?b5eh5bFU@n;?uuAez-EyB+(378ytQj_47NT`3aac6wm=H zFYi-VTe%_BC<=#(zze_tf);vQ7j+2088lvy6usd98np9;f5dT}DP;N$oTVdxLtAKH zzs;|g!srHvKv5cNWn~3agWgxMPzoR~S-^lz7#x6J11vWYU|iex znv*9fxr3^z#J%EBo5j+s9|FQYP=6$!^zFJuFaQp~F&dcwBTOT36{+AtFmdRdV0`iR zZ3IM?IS8g8TXs<<+*;%U z&Jv6t$@XvpJ5G%aIK@-4Aw=YGOIE0A@BHLWVFFk0-zEqh9yRPUGGVYgVK9`Umc))4 zKfer95b7ww-UY|93BA0$z_QFHZV5WbIA|Erxo}L{7&Q-|zbZjjfA{H=CeSQE*ajJL zQ^Iki(;yk3js!5*fo9CLKW#uv(fvcpYu}0`8_adp=j{vezc5S zF9m4{RejbWkD3|0Q~?KLKtM-N%fWbBhwg7rUs%4I z-pAN!gH8LEQ6a2TIqFo7W!}{L|I-|05p$U3%RN~KcSD#@B9WKG$PkrI-9 zr!lfGnaMgBGxOXtqQ0N&`CZrZJlFTH=O1->Z|A=6bI$8^UgvmdsISGom3J!yLG0S+ zG%i9A9Q+rCVqpgV^b7Q1An0VFwuYLqkM#_e_2sV4PU@^3ZuFmC5tayXe_HNf`IVA6G(Vh2)lfinB4nzWur#g2KJr*9?FOBo^?)UXW&#*#q!H zm0Jk>48QmP@2|y%;Z;vg4v3w9B^wbJw?F2jtM%GSO(>7vh>aSZvp}qe9!Ev8MQ=66PPoS`uSp zkGi54FSS)Bx4@X7Br);M$JuO9%GoDJ!pEGtb7yQAA(Sd3O2+U~2qeya2ofj+cbsE{ zI@5Hc;XBC+o)dUqYyk0^{SrYD?r|rwfBghN0S2XO^he0k3ENfj_G6wPhNK zBHku)FE=Zb#3`@rky|c1O2eSctC{5=EgZVoaIsMU+QX{{ zsXCdx-OC862eU%wBy{D1A=~S}pW}kI{kCWu9QFDmW7~PDy2Z~s4bBAyR$|zsKmLA$ z0M^>)2NMFUlQ-SkJ5~U47VrH1z)jN9jEwhBQzBI-7-jvi}Wxxrx09gJM^8;gz64@M;%9Avt!&Z%U4pOatGqS$3oYOB4- z@73PU=qdF`Ut4JodhzASzS`g_2F}x}T&iE*8y{zZ?lbRvz{?IdP+m!ub!__#Ucw=- zfyYn-dke0H23-&kHU+zf3THlEeD;<_*{QBP8#2;*UN5#RD6vS{S4CpJ=Ovj`h;=6$ zG)!Cx!kj?nXa&8&*u++D3BxoyXSY+3eWvM=c}BHPLh3F7Mz2oX#0K0vM*6gyvz#5+@;gG<*81cZzWk4e)bx1OHo{tVQqE4cex7g8irb( z%E}w5W|Q(1OuCq+GZ%|nJA2}0pYbmy)xE&)==+eb%DG*H&(DxhNy_z{Xc1IaQ8hSd z9|*N=97RDo4t1UbW(qYcrzm_YK-JcCQ=D0gp#@B5%*0>&HX$StA|7k`8p@YU)ocIC(P zhBtBcyuTI(ZrQbY%dV4;p&&idnq-j9UCW}pCk*bdhgVEq;#pzIqh=IBT1H#(b4*Bv-fMEuo{O< z2YP7Os_g-H-RPAm{aMhE8n7}a$r9&}FP*CwOxDZ<5RL^X+gsows3f+?}TfD_@#dgmF!C;6GuO^ z>xbH?+k&;tHJ-$Q&n#WpwB`s0jIq^-aq(icXo62N8{BVP4gIoZb#a;;3U}Mwp}X>| z`C_sxdaq=)`#v}h-%-smFC4*_6UN@&VX@zQm)RC5%vx_EE!sMgTf)3V;8vYrNL`eH z@}$i+v!;!O-SK3C!Uh~n^N#o|{|G4;xK(=qaZ6L}^X9pR&?POe>tFBYt_%-)JeQ2TH z;&+ec((-Lnj(7M2e%;3G`|`(L?I?(CeswxecX6sS&AiY_#&^y>=;XFdzYy38Q*C@D zr^}(VV3=w6`i|a9>5n+}l#PTZ{y+yZ^wa$T(nz^4j8l18fM?rR_~zF&4nrCLWL?sp z?#i)Z*&}2BK=BIXz4>vjLMRD@oJe|{`y)0Ok4?b4pWjQ{F)WYsH~iMNufsI-)y@7Q zZNdQBie;j&FzW`ktP{hsjed(AyMuntV9|BAY#YofsbVbVv=>$RW-05q#uMK6L71W} zX7Y!}%1cD&_HMt0YpbNfN&jEVq>3*JGr068UYFzDIU=o8m{D>nMU5&&UejIV58L!u zavbbYbxf$kMsMnXdrEU39x0vI|ylvclwyV@rJ`%%J z+m%-jRjMm#FCUlVoHovX?i9}viKMc_R*Baq+tO4dLh9IPFF(fw#oPJ+`naVbJuz^q z(xx(?)Hw5E&5YB&Q@4_~?K|;JNyUHZ#>sPj>;xJPqL?nkF>p;_1nF>bt!aOdl+f3U zjSnoLmMmA_M7$h}?2Vq5^Cg)VQtpFzJydza#U;05Wh{17BHK?!2)i#_7@UJw zP~sc?^F5z#*MSTtv>STH?S)>xpWttibxDFqzR$id)qV6U(~If;;=ITEPUcp5r~!nw zy`2LY>JIo5l#0hMO6`#anTC4t!5&>X;fpX^A|BfYfP0w_!gk`4)ELaly>CV^RApR9 z`40Kzc+d1vG@;Z8aLx-~)CQP>fk!J#?%8F>h>~p`zTOynQtFpw?b8FJfW_SE9v$O? zxRBfoD08%5VQfXV;9#F~-g71YB@yw*8Q{Eu!3$A=z!`^&e^?gSKkP3ox?Hn$ue7b| zZEcjoNt8B9b-|P!a%y-X5g8plenvIV8ZDxtf>BkGNlbgSJrhcz%td2L8eEDT+rJ=@ zKko5-pXcRR7~1F8cOE=LONo^x%96+j2$PO zW!^-Vs=56r0V&K{fnsRAV$R-}#?4G{gAJORDaLuHiE}j*F%6#q*Kw6rs|%CEXR4TZELBU!8zVCd#&QCD|oeuMQS z-bc+htKjaTLM6){aD|`U_zpK0bjOk96ro}sz(OqRc6i&TjlBWP;Kzdg9e}w{L!jK9 zhD)1iNB|N^7fdqAvzBCBAm9?Y48Qz!Y5&Xns01bdGOk;bY0*32U&A-eK+av3m~)@M zETJjONJBD7MoaJBt9MZ{mp4G@XTgnhNJ_DAr*b1UX_&Zs`x zc&(`_Bqq-eyB6>Df(>S3<+WQ-fa$NbJbQW{1!!X_*RL!a@*^%TnawR{fzr|i2YE2d z_t;=3zuyY}*nbI+OE%! zHMSMqwBUgs(t9~bILo?W8We~Nn12FDp~ey841p+7gC#`D%MII50&F~z&uE16?LS$E z-a9nTAyW2iTofPVQgyoi0|aCl8=RNLP-gS6rCFuD-sr^)aWG8?-tNpYA(dZX+`PyI zUDOq2m`bezC{dz)M~v^U#b&0bGdZ!ev@wO)~uLz^g{is8Kg)mF>q5neVuLqtd^a-<=siTa+OP z_%l@xwhOOe%{EFDh$XfOcD=VC?b%Ti{X^$pjS!j?HV#Ggh`2?O-c(1Xu$*((GXoWJ z2QL1fKg;A$b?_UHN2CJA+g9Rs1>ivrM$vi0gTPYjEdBDJc+Qqmk823w*EfIzYDhw$ z==s#Bce5)y=7S5?JaDDKrfi%?%KB&E;n zu5nifk@|6K*f+p=BDO*bBx6@IU(!smZV1PLk#QAjsa~S8)kZ;_Pef!|_72-p=vk&8LSesmsG*SgWjsuIHNUwA$I7VWP0F z(3!*o3qMQ8CJFQX&i9dkL(nP$hm#jy|j;v;*ayYJWOgU z5CU2lPzdWl8BMb{*`~aDRUqNZPU3^eztRK;Yj|uH5V3Zd4tM#WUK;a7AYH9K5ODi;RPdd>`Lu_F6LBph!#^+_&%XHxUzc@aLJK^S$&kI;CVD&!-rwgE z?$G$EzV}+9gaKe$UlOPUI*$(nY@lwR+@Y@UXMFG$b(mj?DJQ!W*NRdGdMbO{5Cy_ zygcQ0`Sr|Xdg2R^2ehrN$Kv)muRBKXc~|b#lk5r;Nx}9X?=VsDA3#-kh7(Gd=`SWF zMuK{)G*6-bxDhR4?pWl871otI8D_ukarpM~hYNpp@%E+)Ze}PZ{lA;I?XeuXFu=6dckC9OMrA; zFl28YxMbNx^5arBKm%#f?Ab#36{1pNq4JbZsSg*wo$gK{&|q&lBCkC9@qLs(0o{#@ z=cezEEdYtxH??aX9v)VY<`aIqwKnQpYV?clPqn;o5XYF6@&>>PK!O!B$&Gs^Wm8#Y zk~c|=`JGb+(}}DZAp0BVSzC?Kssc$P`l|(;)*TsA8vrPiX<1qz>+=0n;8`<;ztB_F zj>gG2nBoHF>S@e02oVD+Be1D{tGL^{uErGn#+Y+sW3jH@g0_QIw;kn=0~LZr3F^qP zFbM>JAbQg;vzDHK*h&saN4AzTc@qY(_fRU7*)R(J+4><7fn)&duZs{SOX=>TIeM=x zpoQ+=j@6bt9KDKcrh)DP#3cuO4l1}e;9yPIYY1w;m7!3nHSFO(5=~--X=ugw3RCs3 z02Q%V`Fx;D7q|_d4MON_E~`pJbyscAyDQiL6hJ>CV9gAHBmNJWfp&!?u-n`Dv z_W5NSgqYam8v;;L38*qh@$xBxgFuE_K!kwW7%bK&dQBqxDm~g&AysW45LiDwHN=u> z`Ysu$;O)2ryz7yC(q$RYsL@IiKI*l4$XAemtjgz`6tVHJlJm@j$K=b&`TxZA-VB-MMlAokydN>(Cesbom-H zsBUogAf;Ug4z0hkF;T^avXHJ)`li-FCW02Hwj5A(K9b}u|KsjXOBNqc=B{B60tGKs z7Sd2N4VHJ-*SBqGwwYL6%mR9B0{cGEneOzNb|w|8bd_{o<>FvN=B~7 zISjI!Ut+!s^jwx}p^SBnjb1j2-ap0mow#u;{j#j{QoCe)8?Q=WMeO%kAV!oD7Q@xS zseZ?_f+9!AhV|<@4dFTgSIxgwbPi<$6o%Yi0ENt-DolwX)~KNFU68sY)DSI&@L=-{ zyTb!9bL-yz+r$6^B`AR$A>hXXUJes5J!K(+vR=N{nyfjSMLqvgTCGWm zXo(o)V zdlaZJZ5Y!&Gdkads?S0!+)dnv?Q-)BZowM!2_M!;jDX zd!p~tfoU+F`Q;=X54ai-Por`LXc!b>6tJo@Ol1R(mx`WS)W6g4;6 zP@ZQ!U)i0v0XrK$diOuq`A~Yjwo&b2fj(CE3T>ySvel6q^O4c98s0X1J5!@2Tk!8> zyxxZ#I(C^~y|H_a*Ctgk4 zijSKrMYwlp^ddrH+eTUXzwPgtRtZ9PpQuA0*Sk6YWn*B)3}<^v4&0Ka_X?rZjq>}i zP0CL)u+G-BcCpSDoKd!F`Bo_XH|X7cqK*2q=l@zNY%?S@{^h_dbcvD?tPJ83kCWJ8 zN6#NLrM#lv2;`4qyJ3;;>P`KE)?i)lPW~|w#q?gU7EmEuhy!*p?Hj{=$c{jbMX}-snXjNlT>!ARZqDRjOOqmj6hrv_2sfdG*J? z!Y8#pPTnI`JL(YL?Fp}(J&=-TE5CoY^qp@!IgI1^&CfRc^A&(v8)i;EaR3J4fEVyg z{7V=Ab3&;fL5o%j#Cqh~+S+9%6wqc%VGHIneTC#u=$tToGi6*6KKnQv(EPeL=VOPO z|H-qCSBFrr&7-_{e_>|;=pbJm{_=z=fqz}uX5V+heun^;+Mm15f*$^1d3kwv&_&h( zDb`An2K6|=jMG37kC&}_Az|_L@!sPBc^tH8rsILe5h(QzjRSAGDT=B6%@^~L^9j7p z=gI*KDCPd6l)Yp?f1x$hK998`Mfu`>6 z?jtnj*Ar3ylEH9{&RB6#CN{{zs`+m)8sM%2(I6*u+~HgJqkrCNr}0wNA=Qh#(2))W zbPyayz_$&rvPynr0oc0bj|ImmoLSvW!G<~ z)f&Xp>!gA1%C~u-x%v6giA%NG`XLFC9wb>f#39B9xdd4q;YUV#)+-t<{p?kT#54fS zSbu^IlGAJ=_`f!mPku7;T_y%X39TH4^rGSf^Rx?B&yS8-xEzFb32mfeRR-1hxPVN* zTgdv-A89@O9&qSUk}A~V-FYh068%OmRv%*7v9Vz3u^-)OmQBYZJ$ic*DdEly^$(2| zS22y$(>Xu;?btm=f;p|{sBfSDX#j!7$kS(8rrPdJ`z}dC#@TZ?m5I^oAI|iJVfaVC z>gtb9sT4kXo_0A+r@(XaA~nza;U?zfd%mj^4)Rk!@=unayovH&tU5%?(OhCq^( zpo^JKa=rvK=3F4<40Y(>Mi0dHHiEm#HH722lNV=nTr7pV5vtmck}(m0EQxW(nTslO zpLYg1?64Kwqz@HPK7wE^KcCHav9#u4q{p=J`W^?)8)UA&=XM{>%k^&FNkrk4?35v3OYO}Rk?iTZCA#@(W52@A%Vl}&}iVA zQl=4A+U&i<`8D5l;?8UeWZ#ar|LD?c&&uxdkj^|Cn-}6{Lly-BG=2o!Qis5palC>G zW@fm5)=6VXSi;E4cp@T9Ys5HOG4RF~8BnN|PQHmf*NG-wlEpm1JE zMZV%L6(el~=iXWFUGXm{a){)jIaX z&F^Jopp4#X25qB8d`m{4g39PKBl{oKiTY34mBhhZOS*+ryw>PUz2Uu^qHcI`V5?c6~dpa#=y&xqRg zSrCG17D3ze3qL2nvSn`R7%y=dfHF-~tRdkmNiHjmu7SgR(+9>Dn2%4D6Dp%X&C@`W z8;SQoEwsB5h$%!LaB8`APJ#k zX^XlXk%Gjid?=tclqKhRmdjpmNotXfas(vpI84Ys(f;QAFfqEDb2sR=B=|oGOwIxQ{|X?*=H}%?N&JSZM1m9$ zH@y>|6_zMdmWO9YB{6I6L{rDtr-vR0FOl{F{^Uhar=GvL`u@Ypq^LXDlV3yqE*{-N z%=H&qP>-mQjLJvXsFtbTvnL&ED0D54}z1)3nutyUzuePrUP12x(B zvirTm;!w8fyJ{v*LS#u|;Hu+o^&}88L>ZBO{e$e#RC1`KJ4~JGfB}6zrd1ixcm|d| zy9)@Ap{Jk2ZEhKCTJCu0G=AYTl<&9blxdXy6!bI<`22sqTb>8{WHf-LPNf8Sk2gTS zqo81_VY6ZT<=d3HIFA4&NIX9dUtj}TTckiRm*l?K`HrnegtATPP@dhV{`kD|eih2{ z72>G~zT_6GDT+F@dixwTer+v)$9h3J7_0`9?%7Qh4B0~Sf%&h+p(|UqLgpD>#8U3+0knU))xg7s#mRQ9rc=X@8T8@%k2^e8yqk1hRKV|b zwL$2#wrKnaMG2W`{<#yV>{vTStoqxX+sQE1acEf-#&=!ue2h#D`83ji*H9UV0n5$v zMg2wwN~3{qDka?vP%b-_5Gp`4UoS6Ekvif%SJlR06A4=h=CBK(53o+{o*A1lLulJb z%1rzzw`9ywnl%4ElN|a)=)Vh=zgXCM3DLC$1%kI6CULW!&1pIDeMfd);)&_$x>Ze# znN6)&b|RQdEl`H;Y6cw>e_t8+bycAtu=N`9Ku(^`8&DK}UX{vSTr}$Hj#vy;o}Rvr zB+IbF1Vp-m+;Z{~3o4&x+bo#bXiZN?JF-B6t^L8~4oLE|MK61Da`UQ!xeZ279n2OB zuz~SosO}7Cut5b}u%u_)Qr6-$Z41b{x}Y+-N>jZxgp{CIn9nop~oYa($wvyO?pnfwVw{pmO4=6ijxG=w>u#nq(b+x zm}_4n59(UtXw$jB$B-O5-#!O==5b0H?b!mapKWQOvVemrKMev+so^}`BEI_7w%4F6 za0eN))N2{wmn47C+B;wa!9ts47{G|SsPG@7z=4NT&ar7-7MvBaz}O=v-vlj#a-$UI zchJB2;EZlabyqVLnY?b_hg147GMb>28?WS7^v*u|$O-7pG$17U01o9cww!BKuG1OK zQQvg|QwatOS#_x*y?!Fox*=daHT+aEAqb(Sb&!NS>d5~n3^LsMs>r$X?ZI*c!5cRn zGy(=xYK;P(G46h9KOLPd6(y2uQb4q9tMr@?i>3M-6nLHMiatE{EoQjueCKZ|jL^{7 z_#B8`?~Rc$0&WMQm{9i95!q7M54WZhQ1%$tgEQ*&T#$|({(Gql!dZySN$j$4-R&c} zb%8Ss|JE5>R!CD_=Kzo#vI47*5qT$Yh`#QVK_5AJwVvNN5V?5u5rs@@0P%7a5MGki zBS3>IWn8|O>>ys<>U!WgGYT|R`kq_?W1X}X4t|AhK|F1)56tvNI42^P%-V3pkxQ@b z!N`W~B#(Q|quux{ykx~pQGcpG5wG1XWoC1zz6j!yeR`xU`H<@w2`2^y$BLS z>iQ;f*Vz+FQ<0NnoY2DxH{<#)K{K1OCwq>ap^aV-n!1BlG8?wh3T*RMb1lq~f8LhB z^CEM!3M%ysL6?;_;Po2gS|7+0wMbt;YWdU-(X@%6k&KleA^cm{W?Qq|;@!U<#=8|P z>VorGW0L9hmvppIIGAfwu<^MG64*2JjqfGzs^)>j7jF0Ierc^jYYzB#_Mr=Kv*;wR z4tTm|+dLT3)dAJ;FizAW%pQ65d=L*%4GvJP$7Lr{H6*^*2jX=4LWYE)XKmH@*s!^Z zN)nnudl&bZbWF_F(3Hop14J zuAQ`~dt!aZb+;&eQZsNn4TR6(^y>Iq)vUP&p(zR0Z_>*O*LB71K~~zNw%7Sy9RlfB zlCEUDA8S4}ylrJ9%3x?c=)U#=2pL^c^_h-{j^^Ra+O+il_-_)HC+-<9=-*6BvKgQe8S0oANP}s z5x~=NOsSE*MK@zfF@C}c)h>e!_Cj!IFooxuwzpYV^44#`-?hnf^zqCG( z2WFg@a-)<1i$kcmp><*c@5IVEzp(UZl#_&f5_c`G4pT0B16Qn-Dpo+QdLpjMpy7$u zzO>fiQ>pQw_;Jpl<=}0+vSJj#+k&J3d&)2OzyW44^1{N!Ezz(Ld+QTBerKl6n(rzB z=h=RKHu3ez$E|^B(K?-3xsJ!$W9vNe-_2-x?IgCmc)!QDV|X36Ro5fr4u3G6QGT>& za&@Zl%3AcmKYp4Yfml+$Z`%PtaPi1pMR>n3e=C0Uwj7EcA!-dwDNN^jrss9*?h>`e zN=9Ior#c7pl~?SE3Ra0Ee7V#>dcPWO9!!M|=W-x`#@+x1@HnxUy+&T9_P$`V2$mtP_m*&kZFclsD~{ar_L4(L}YA{xEXpR?vLO(_V! z_8@-%ICv763}^sl34u>#spm>=`1QoVvX1g}CD3Qe%{v7fObX_BgxhQAdORySb}?5f zPxB%opqO+G#}{%SslA%S?KhfWL=vMV2osSB@sep2trjKT2r*jm7rBe^StQ18Z}2) z2kF_C!}?H*VnjSB7VzW#wYNdiTde9n*k+JH8=myf)&yI-8ttF0R#o2naFv9k;*}e- zh8Q6ULq04skF}588VStxiBinTBYCy`Xy?{x(HjKr>W8wB@mu4}s`SaBY*J3~0548> zP>#%)%Y<#_hdiYo-`_)cHCKlC0p>Lj$g%?!hUxdW?HyXW?gL2lT-C9b#a4mW-7ie| zkqZ(1>Labh@KYgb(V$8~V6R9lfMFQRie?~QbbvE`LHXEa;AO7bp+a3TF!3>Vqtjcn z!S-Z)B@vF|zJ^YT4ZLGq7Tb3eP7!)Z8$frzcgb}yiauz6h5-+69XSQ z?Z#zj0`wdzq>k+uL*^h@&T!t=i#;JRV6un6rJ6jHUC!49{scjB2q!ws36+rx^ZonJ zscYG(i5-hOjLdO~72w@p;YOZu4LS;DGwdsxseG~;6tHRDVQfbi?kREFAAv*PUI9tx z=yF-Cd05J{=xHfvBHaWXYTY6Tp~p)G>c6FgaDXEm=bKjQ^@@IPV!v=H*RTANoX40R zm^%u1ttlOWZ_5RI+S04@AACuf7AI`N?J5#u{>u|V2IGMvt2=@Qz|hOYQ?==`(ed%} z+Jmf+0{@Tf_f769>XY4I(Cc&bA|nmBbIY5(41%=~E7Pfpg#5dB?U%=|=~t+Lcytn* z+gccSIS=R2c2b}5asRrLJcro=hs1@TDshP^^AfLajK1%>;+utjrkaov%`hwDnt-Z>$wVHq%6Gb@zBq~VHw+u#(@$%@cq zg>=FSrw5p&?utoFn18O&Mww>>AA(JJnD1FcPWhMP%cga9L9+G}_9wCE+?@vtmB5_I z>{TT-m_TpYGiV=C7JeB(YhJ9`=0%VNrpd6vf}J|n&V3@%pRzN3GCv*pTv)3)+3Cq?U>CyrD3~59P@R~9l$y$H2vRV~ zcvg}zHRM!A=t00jwymJ$$Y1VND!kq+q&>29S%1lb6PAR$uHQX<_Uq9`F!(k&nj z(o)Y{8~y$M_jCW>@9&3aA0CG&*IsK~vu4gYXV%OLx+gDj_6+$M6bf}#N>WS-g*v5$ zLSaqdoPz%;pun|9p=eN2Vz*UX;}?c~?nQ3ZY#plKN=W=#UQcZ%sV=xPS&Tcv!&^=% zpBwq@#s&%HCp%wMM$o;^xW!8h9TYiKi=SgAhzN@L$pg9!o9|nwpyIyu7F{#{XK*^xf`!^Vx+36(^@6S;iMIzp9E#+WPwX z*yylr8M|Kfo6XIK8|&+z=Qrm13XD$4?-@L!63kZDbGsWA6_uTxea$`IZTw-Cs=E4> z{9YNFV}F*{82N^PEiW%Gg2%*FQb9r8-M!M$(NRTPndT!Pp!HdUyBW)I{9ZHU(KMoZ=HjKEOnzCMg0PkbI)>fSxZVvLbVsq z*}!t)txXCvGHS%4L2hQkyZvtQt*(qOq*|icxZUyo;(#eb_MMitI6j7}KUA4JC^hK= zij_=uHy0IssKTRTVn{Z^|32#b#k2G0v5X>v_gGS$64YMCEA(qu6pikrB=Y?kjHdMN z#?$E5R#~ZtmZ^xYSrs)kHI3c=BD1g&_j$HU0lI z7yWV-ASWe#KDr#!V;R+N{r%}h7L|MV2tAj+=V?#b-}q!>SJdx!Snakp?GSUfXmF9= zX*xt&S~{az=hfii_m9CO4<|0IX&b=AM6KEmqLURqkOPGMuiDt@dhRQnfv+kTZUX*Mnc=nn#E|X*ZY-=Hot9_&L37GtJX3 zlb@QJnp6{B-`t%0@#TfqJA>ORs|74~3X6&uq}qiKJvEA!`->z51qH#(-RH7087b?E zij*&1y5v})Gw|;IWBCOB>r=G@gM%j5Vj0B<$_Dc)EBW07sQRr-E!1DiW>i$%EN?Jd z*f+(>(b4nS-#G1H!Ef|I&erzr)8OE!m>53Wk?-HtZc^g+^z_J8B<+sYJ$?Grfs27t z-@~H{kMwitsEVA$~@$;}3o|qPN{`vgZ+S=nBbH?+ohoD#s4|n~^u-2~g z@JN!M6&Fh4_;K?u?gU+(yA!-VL;XHqry}Ljt%pp)!uo&)-gUy|5y|h~-2(`8a`Xh@ zzJ1FM%Uc9Y(^Ky};q2@z8NtlLk}2qIX_@_Sp^sK-4%Fxxaawx19GL(}s>F7fU#c^d zf=@J&i;#cM+ed84sk6WTYJM+8wM(<}=F%_=z|-vLr&^ylUYl1BOa1(?reyg#eJ5c(--S6!tQ zJF^QWV0rN+t)ZcTEGa1_=1TBKIw|+HHohxf^78Uui+5euJ0uvSdh_)O+`d*#Xx&8?HOW`H#(%YdKI2WDM2j<6c4Smk`b?sS zJV(uXguAgM+g-CZrtylI2lcJ%@HF>yNeOwzjCI$&P%V{rL(?8^6cc z1lgsfYWRV7c6N3Owep%#)aE>*a&g1eX}s3FcD6gr4@*Hmr^ZQa`C# z92+w@aV1t$O)a{zveJ2P+o5LTyEYgQ{IRsNivd&xvqn(0v$k5#PR#VoLeu<)xOLKB zKOpIFP74e0Hgj`xb4(g7srk;}5&fiJ%N+v23!A05BehMd#<1%G)+_1iCXBevTv{BeaQd|WvTYjeA6~y(=C)?4s;Vlua`1N&9CU?8F)1xK zw{nET)&kCu-N$iz|7y9h3ZMO6AHgf!0nCDex+W$j{0|pi{#7;bBk>M{^={ZpJ=b2u z@!5$R3;!L?pV{(GaQjTxld}}XX6=d3%TDJSpWb^%MY!G09S{L%E&qEvrf$y!aYtva z5{hYobXrY|=)oAu_>%VvsWX8XxQE z0rr%bm?(7^otXHxvr|b*$;Kvc$kydeCK1=gix(r(qNAfN!j{)|06|%$n%moxHqQQ} z_V1eQMqJ<8PKKxaSRz-_{(_m=kpBJq$*}r8@48p7US)XMDl2zI#*no%H=j9`2sm#s z^Wwmh>hB_3=`HWb+`fH#MM)W!r692C59EY@T*5J_{YusFTL4h0R0moP4!a?z=9U%! z)*l=0CHFr(IlcRHaZ%OAX0do}VW>hGJfnA=K5v|yL>N`VN<4@RG&QHP(!JB`gkL*& z_NF%Kr(m-fd#>Fq$(M8A`}$QrDmuD(exup4WUgW+5!YfgytAW&Ht<7oXJ_YW7CVHv zE%aXo^DXMnt=k{0OK|W36}L1uf6n7xQ2_9Annh{IwhYWQ`|aDeW7$bxczAhFrOE;F z@!z_2MWAWc*|I%Ru(016JQi&p)jxJysxVaLvYgm)M;0ELOFEcM0(a;a278>Io^D}m zY&;aYEF&Y6S^cFF*a>U}2s5pNB9B9-{NC~7$A9ha7izF-RXxnp($WI1Sk&)rh zRHnfSEQNgQ_mAo6xxvwcQUJ><*1}x}$FWu|vU?4$2_-4Oa;f-a#x_n1nDWM{Dk>%e z=sXXba^?p)ljszjb3Mey#(o?&H9c+F_Ud|ePEOqBew;;Zy%A`gvYecpl1IU3 zYi?j50GzALVJtM+E1C0QBtY^&j1}%%hgEs^YfD`BM|V0 ztsL6}jB~6Se$NEt(9goG{BRrL?I2C9ylZi7KnXUA^FPS$5^%=K(hAz;0)YnyBnuv= z(tX2nWrK{A6sJ}JINN!wZrP^h=H||wwV9s&{;b+sA-5X63LSP$R$>qV^OY+SfDUtu ziwO^XUbOMuxIr3k_ulU$V5`dg`{QZhNGy+he0T5eKP5i;8UAH{v1H5quOCFAANv3M zE6%(7f)Mp1pL5||vypA4ale+qEm~MuAfvjuxwQ`4bps_&kJ0PYwyQ~JQGZJ+h(C=6 z*a0PQ-v9kz#0=#S{3pmJ3_vtW7&~hBEFRwHDaS8Uj#)J|x*#3^@a2%*jU7)#A`{!u zT0jK^dQv6c^H8m?Iqq)S06#%S3jI6M)U!*scxNYV%d|;2^i+VUfd2u~_*ywr9!Lz( zs^)R~H+gw-09#Ji*(d4)a7nrc2AF}d-U-Af6U0Y}U0>=rvJAphU>T~)%BiKLyf7)? zmQCNg`^_`AD4)5-;}V10Dbz8YY6-G zP`@>V6I{rn?mGNOp#cp(C|y=zp%NP#8~7S^H@6*s539ZHCSf%QZf>8ai;j$mQTR=U zg_3Rjvn#$g6jfCjfM84U`yA}~*PYiS%m%HX!$tX{FaAknI2aFCK0wCP*H40Q>eIdr z*u49EUYYaC*lkb)xxP}MiQs@b$HrcRV+8C5)dXtC=yjk0VgrwWIAq}dz)9?P!NGYI0AOc3m1ZEcgjnr3@U$-NU12U?981s`r_P4OUoO z+w^HZZ-Q#Z%a`9l20mKBp4KNWI9i0&$A3x>*-~`{~pR%I95g1Iu zG50By;(iS_ca6{$g+#os=Dcww_Tvo>+#^2n$~BBe4={m-f?hsf?v~BM>RY`Ua?e8~ zOtBf-#YS~J{i_HPR9@?fQfCe{1l1H2+S3NNJ%wsk8gLWz#^s z?zOx5W!zpe0z&0K;YO2?!-PLLCchcJs8ort?3x;{p_{Ba<@Q4!e?oBis-!O=US7w! z@$vDW#T5XN276PkW!!S&Pq4JL#rHOCHFdJD0|y3wARYk5+*Mp8w@IFno*wFPwyLtS z*r*8~qV2ZdL&pq+2>%%JgydM0W8J7QEuQSu_Uhz&>K>PcKCUI~E$~bbY?+TY1e`CW zpfCq*0WZrpUP}c?#P9YijhIz~)53UlcONE??y>BF^g>gcRoP$<&^}Jm9p2kOv8aUc6-_^H>5w0;)}_*`H9$EG{c+ zF)fnw7^=VdQkGG0qgz=y@eWO78)NBFNGu%z_}i3+e>&IkbZ*1xsDB)kqmz@Wj*h?* z_xT$cAI9(L>JCTlRvfM=D=KoaXMi#!2zhBOE-t>m7l~6~((^)L{#TALVxUDLe=rZN z{HTYN`}Cf#kB@P(^BwzWO~hBa{iW1hf>k;fwJ#i>7Cn2%Ha}LtG-iGwDY2c6;CZX2MqopZT9ZpVNa+ zll9nx)sb=BX9(3RT^M`+7$KeDdotp`EI!1Z{EXz5_Q&hs1pvL34+P&0q!kuA4md&1 zh9L0+P#-ga7~e3V-%LMdo}>T}fgQUpN6sz`SGhFHgoW0muGLflS6sOxFeECjaC)v6_tz{)S| zW`aC8Lcs1koeIZKlm3oht`_xEc2=DD>eXLpLaY1A=Ht_gFNB0PDZzW24JnKX9FO6} zy$gYmeH_@{lj>m=BEVLc2l%h^roVl_>{%jww@s=Sj;jMCKQj8o$C}$TJ z&mK6v$&szyU$nzsj=B%Y7rr$80>h7y!hYD^EBJfQg-5ZP^h>QZKgUFXi!XY5f&0=e zZf@?h8IlVZWZm;4>O+4pSOAA8di8$R`N{f$sfh`)A7EB$;K=mcrY-{KmW6B#Gb?NS zhDkXVci`_@;om<~UkDv6RV_{;SuQ z`Rqm_c`B7?RDeDLHb*WztQv8hJPQsELHG28MEAL?J>A_QgN&UqX|LEWhf!x4`D~8| zMu>9+69=I{$-FGTCJN@1jkwDkp$xb%cq8|NotZn&9AQi8xKD1LFXzB#Tqn@v)3it>K3rJo$&vj>wIgzkx(0nN$ zTm5#2fXq=xN_oV^xD+e@KBOohl)n(}CC|XZ!a}MXFP{k+sbp@muLyTAEy@B&JbCgY z_fnHJuLOMv?DpDp+xy)WgX+j1^ssA}%O#Ey`Xcc-LvMzRug$jTA2{~y0&`QneftrF z-Z}rce8??~Ibp@LU7JfJ1J4lg!~TZo2%}PtxX@NbyVRNeAt1q=vy(}Odov7eOO$l9 zEG#k*y@7xBTwz>mYipymp>Q2OzGWFJWf0Kwcj#)4M~#5XP0ic1b(1RYUi6= z%h#*npPd9R0I8q|(OZEP?_8Gkq*7xzaHqWRPLx7&l_6~(TTNq_gP?b#rk!a@dpG10PO|-+qI+~fdp&Str`$|BEe-xd%NuW zW{6*qsPQXFKAKI$`SPE0h(;!e7QtGZO^Z%mmN7C)g?Qo4NE2{j&?Dob{%&y2A?DR9attJ$#m9tvR3|o7wY0L2(v!`Z z{Z*=HXxx|$0icaYGiiwqC_cjsAbs}i*@!f7lMuNm;0OZ&1Hr@3y~Q&leSM@MybyxD zc*_rg$pAP|NTyNZ2i|A#NjU~4r3ax4il$?z(n~^yJDOAwIe|mbh;Q#7NL~JjA#f0; z`L1kFhRuH@(T`U(4o}O@X7&P0hG6l`L5uMQz?-VhBl}K0Tvb>3r32%L42uYS^}S zX}Ibrzf0jc41fd)ProKxb90R?9UqHeTg3C1FQECRx zR3xd3f95VI0FWUF5wFCwFvPVH$Gh0ubCy44;Nw%b`ks6GQ~d7mAvrG}ANGgth5+2A z8gDxA%-!xx4#F30EyxX3)n56SEJc*={!#HW&kho>r*d^eN-W-5_o`W}zQ4`{sz4ITv*Dk>^G1TSdAf#m!I zB8L|d5zk{AbOmM5-OG1jRw8e-hl4$Vwi2-u<{eKV^v)BDTpH6>; zOpppi%DgCJb$z9Xk5NEKU_yP%D#p2@Ou_D!-P}CI(_&`3fM_!la!v-Aos(Rtc6WHW zdCKu5H8hUO~NOeJtdT`LXH#zHdsptJiB$#|%QU zL|Zh(NMIbX^8kK-f+lh@vhb$K@Q;RyN=gyexVcMA+sM@l4b&RWvYjh9$=RG4LWPnv zew3c@h@*ZYl=nfBHMct}3T^pCiqXsKPIzr?vSi(*J&~BhbcJ2~eUY-^Iyyv91|y)O z=amSrFCFGt08u`#?dw*L>?yqTmk~#it6!w%s=nvLh^Z1-zAsnRafNg8?U*``xqF)a ztp%ufrdH!tdMCIosi*di@K_={jEg!)46im#oqQ6FMZlq##(gQ3Mf3ODjhwfuzVFW; z6IsA)6RMuc5SOzKhfO3><5hv!Fm+RO>3NQM=dGKMuVDH1-E~G16wiO6+3NRbi&2X7 zW^NBTORf7=6|9f>;?N-LM@gzQ5*v6EYWXs~C=$>dHm4G8GdMpH^$N-$;z&)DZtY6NC}2Avrh*N>Ly?N)a!dcY2ae7_~&}0^XfK5q2PX za*+kF^l%`BhMzwKlYH@B_obf&sg@+T_KyXjP)2{&NN$L`G6ri5`J$PaxAcrxN=bL} zSi+K!*@_s-_sbuNoPmc7;32$b%|tejmY>bhY*lkTPCIh2M=06Aqa_c(l2?#dimJ0r zCx2-7f?o9q6wZQ(3C|qugZW+SV+|lV!VjW3H)kuo;LL zTv11(iC->7C4*mZXaHpfKl*dYV>u_S!4#0r7pFqFl0Hs$pkfP!5n6pb@-Qfx1KrBU zt(A$pl@E5GJ>@&6jiMPbPV>>@*jqMxFl8O66*q^*Y{N8V!O53ou++D&V! zO6>vp>fEm38AMGv_5aLy21cTUk(6(?6g@65X?g2zh>N19Ig+p>jBp;d;YKvZ7$lav z3Qg2&evd5ixzeG06*Hc)D_l@DA5C7KFWpra55qz9Sse6v74|p2NL2{&nh|N)uWXQ4 z2RlWD@bXsjEcRy@zmRHQ-ormquFqhQNifR^dsm;D=HOl{b5}8ji@dN78uXDm=zvjP zNIoe^i0t8?&9PkLg*_q_JcpubKH9@p;)0Xl3{I!-{`eU)GQ2gSE)~%B(*cE23^^JG zY@4266!*EoC-2#dcJ!qvl&LtzggDO|;+_M^OL9Kqs5z4Q738-8nC}@d!}plsd%jru z?h)NCdHN4Ru@NB>1|JD=Ny7Rz9T?bY%l{BGAP)i>G|@-Kae`3$xjBdht3@;MQV1K2 z;9R*IkH}==7)A`Jf|Ei1->~S*FAxfZGlU6x{g z`)>C8;;mB(Cs1e!<-0K(7vnHX5{aiPr6GcBjbsE^kFwjUyOh%Df|DrDCcqv$yM0E? zlxU+y;>KH|xW2DH?9NB6X_P*BBB7#mzw6ryy5sUO)VU))M*F~1-0+k`r9vstqwFh5 zj3Aupi$`PV!*5yOx2G4_u#0(&f|hExYO{ImxZNpHB7PXBfLaag^K%t5KgM}`40n0_ zV=yAZj}#cCmbAwh7L7NdHlZDqOEE?PKrOwnk(QEI0-vb{6Q!Iwn#c<#Iu8?FMI7l@ z=VGY{clNrh%1_6Ux370S8s{OAHX#R$lTiXosT6+3W^+aF`|Oev=9wQyvRR-lrJ(}Z zv@)5wl`gQQ=4h5KWUIGN@gd;iJKJ_a*ZbD?qmIi6Ja3a0oGf_u4U2|;Cr2&&{?<<~ zEqFQQ(ZPLWL=khwVD@&~fwyLSHof802S@5EcFYjh5VT3;vvpMan`+k@`mAizINRY` zBfvpa>({=YzZwp`)gq2o6G>A_qecX)X-4p0zeMQ>|7QVNC_uSU_m8%|17xUy$k1vt z`uJZrF=GCAuU15kMq7u`zQeoufBatng%WG+`>CX%@;Y>X!YcO@cv zq)Sd$2(_v7s?mLZZ$!mmk138a?%GJJ+SPap? zn+^a}j#Mq*!BC``t;xx$xZLSMQI8(Op@#MQeZw;N>YQZV)fvL@9;toEI6@lJus%O? zAe)?-U!6lfMFVGjgAuy#Jq(8Vek0O0;6bK9?11~yUpoLnql&~Z3pEwDeiRN1oYtW! zl|*dBreD<#k#Xan9ldUd8v>%?Kb9kEHf00!T#K zDDYL7dFZbh;!fixpY)}zRb7+&zg@KNHby2QbabVd%rfcp%7Ht?4Oz+KL{Tbz&QJ{+ zN_86L>o0=5xCk9>sli(?6w+o;?VDjHh?@Wu`78Z%&HEiwWsj-NO%zXJ0K*}m&#wY3 z#^45oBW!INDd6(+BhJKiOacjfhv>MRN2$e_nH@&*gf3{dmn@)~Ph_OzJ7b^mA}9kk zn>rB++J_1`TB-mnl^yIrEC9R&kYZ(N#|VUmf-?d_i$YOf#)J!rphOlhmf|F$R2ivq z5#2y=dahG(A{u8ej1k@hgyrF|K0?($8T^%bF1^(q*{Lz{rgodMPD21$L|dHlFz3JL8Lkv2&VNgxZ|i@D^OOfH-FS1Bh$+ zcRMDCFzfE{?epsg&_R=dtrwP2-aFck^PqufCyWM?!kgU#rD==|B;i1|RSGegzdON6 zjd?Rptb&ut$S^m7(!JT8?CX3uVe*H!q6~yE0LPgG`f(a|LKb){IB@NUJ;*eY_b}76 zVjJRS02L)H0)xuAzr`z+T9CfH=#6k%l=x9-#7?Bmc@f0-(lp0Y93lsLsgDQ?GkNje`RENhi1452z!&+58-Bb4eGZTarVuGYqnE-=*btv4q=!TF@a zl&pmI%CGxizQA)$frq1LPQB|qDMEKz$DItdGN#dw6?BoUzS`(+%Mb-QRR?g6?+Bs$ zYSiCIO!MSj%1M#p`{}s8uIDs58V+TsP;_BYY(Yom+TqdvgF+zih?zkAq*?{u-on|7 z7jwTaK62UM%aJLzm~rX$p38kAv4>%=zD$G~{g4K@pwsWy2t12023(D#8NaxCVf>O% z=JKWeM~H{<)xh|SdS^6S5FAU>*dpk%6lT=2^=wZhv#Om8cpnN)(seh6J71T_T>y9l zsefMtQVu?$_4Su^zc#*P#D8!ORAbz3YRmPRThhCoS_n1(aVn*!0yQX)`7iMgs*wc) zAoPYZDG**r;`|easuum@)(Dp|svQ*C7jXmTJ@@IqvkOT=M6rAu#jK_9z}ikDwBdha z>vMyn!2k>H@kj{& z5*L2pq$*$#YST8qS)CNcR<99e%-R8NSUfEJ+b8b=a4=T^b^xx=K?H?j1mi?s5XD7_ zVH?Wq#g=_*h`Hfw&a+wh5~SJbj-PZy!w5s`#YuTpTie0Az0prXXx# z9+9*LNvsB8UQ%}{jBSto;y&gPfU<;H^FQu&EgiDe6I2M~)9{Cc{_|9*h;=xU&G^eQ zQEQKpkqlT3WflO=>+$}>v0C0*EktY=)yjbwk1rQ2{1Ggi_VfQ8kD*90qj1)t*)ZoG zv;g>d5Fjx~0p{oY1$9nhWI2#3(oUfOH8M>Go)6AbGU6$V_1|b0bPAcPeu%DAj004x zRq4Z$4G5k?ikTK@B}x`UY+h0{M*jpJ;LC|X`kpGwbsm8f;3-HTg@j=!v2;L({$BR0 zkTBdxH%#sGgplHibijOZ?8C zAyD@p|3jB@5=B!BEA?aX=x4Q zmc2l-;Bd|b-JX ze30A}@!xAd+za!DisY7=wJ%VR^npOQ+vi}$XRhvWw{AoKa6`WmO5cRmV%vXmC+&nB zOmG~C!Vv%e5>Zf#8pZkSR}*Jjjl+?5mM`5Sscv z9o`rsrBEtd6rrEbZkbOPQqn)wd~tu8uP&(18}>*TX&9*V-gjRqfb#>dDHi>XffB13 z=Z)(ygKwj#b*xVkkGrpi8E@Qah|}Mx3Z1XE)=+Kxhr%fDbR`|6!NKYqs8ebe+RcSx z7&>yzjLzQP%>CW1`5gWIY~;irs^MC9xInK_^iM>rrKIG~d?IeWB-(PEiGw3%*j8Om zF0>;Rg%S87R?R8)IrQHD6;sD!{0u2t=J(jltz8YZdsABa z{oPGOD2*hBEs*9F@P(qM^o$I0!Bf6Wrgk@9$2S!s2A176$ipLGh%kfD5v%++ZzQ3D zsQa_z`kspu9I3zo$OggT3IRDe`85Q~0E(aWT@yaXTMRY!mLHy+9jJUTAJSejxCrO# zk;Ar08$zIOa5#>f3TkM)Sy-@!0D-NPZEby1akXY}5nnv|Pya`Q)30B@5NjaO zbG_fJ$^{3`lM{HpeVdSIg*PSMyOv`m@cPN{AaDxQ!~pfd3ijea35%&(f$S9MHB`NR z55Fu??7C{0+JxvLVJe!<=`y2eFnxv2TZ_Y5sIqi>Wo!yc5lN4!HWH6UGzrT7e_HA9 z4tR#1syF!mgc7t2wdcyCgM;Nmz2)jP`Nl09-ngjv_}s|I$g#S^aRQ%j%RYx5`%ON3 zfr!{=x9SdS4pst%#TH)H?X=kyd+k2Fbkos43R9-nAZ{I04crl=4>kK-?jg^Sy7P#% zo*eb|?Vb4T)n%$SytyY=EbH} zEGZMi-a}Hma#HZu=gaOt!X?%LSoqUyM!mLlH@3D~prn_iZacvHaCcPr8!H?z50=@f zLzjTiM%K&iq+f^~q!1P`6e8?r_0!_RmgOzvWSE14Bh3a*k!D<(Q5}rHU{(t6|LZJ$ zw}CPW_Vo4&+Z$^ZnTG1Q&oU(3a*;=xTQ>X6ppf9sGuDXpigqt~IG_9tQjvheVX22z zx^Qai_PWA$q&f?_$%MWMA@kD^YQrgoU%|<7+G4SnNKNGl6jy`Vj;uX{%)egej@#aS9jsErzXv=3X=ZIxd`{Jj)PNB%<3&*VU= zrz^&jY?_5)F!}G*FrQow@73V@i<3}q^}81e@NpE7V|SVkNMTVXGcNq}3nfgJ}n z!i^3^1LD`x-_ywFDHu^m%N3B!Xryl%;#;oL8d&9dJ`ELAdj4)$u}ON-lY&vDi;?m) zHviMKv|C2+rJW!0zPmB_<@?lbpobmn`iDZc+2&ts4)`L-dD zP)0+}Oox0@(x2RK*<B#IuXqA)vXGO zwKI~*F>`4>B`s}jk2tG!;mk>Bs5pjtr@^XtUxw*ILxEA#nEeeJoQC*KT^*eesH{VE z-G&N8T+!rvViYkg0bm4lggA}5y&q@R-cLE+wUH64u-GZ|#9Qxoy?mMORVuhjdQW@C zXn63e)d|^3XpFjujZgWqi`Qjo=)Lg4q;N(SW)XB+mavLpSOw~JZ7mgl0)D-7Um-Yi zC}=SNy!|%oY|o$YZGM9Zs=?N3L&YzH?$hF6#mirD=D!3bdH0l+A4Bs54-XFwDV}J4 zuhC$s4cFG{@Uk}v6rHTO7lxyWGpAa9tqz3woIsKKOfuK5?h(bZ(9tz}^Tyf8FM{%- z?Y!o-EwW9=!3W;wB%Llkn@MmPvmGjieb@MIQWv-KlBeh8orOBnZ{|GrvQ#?VufkHH zQ`6kiQdCb*uhnLj8FGe8uM>woS@Er2q!cRQ-rEb49azVQG9o6G~r#MxEtDkp>*u=zwRlg|D zuXc9KW_>^;dqdwtcls$BUDz_!67vFI6E#-<=y))r@iAWxuUQ$5B2&4}MF|OsE{(H9 z$cIgpvj5txQ!tKZZuSJ3r`6%%aTMu1{{6ieb(6PfG?T~Pk1N7bm5X3}Pt20Mctd;A znjnmSVY^FxxJtdg4pE%1plT zrJAcMYH{|v!?zq`#Kh=xe12#8NLMZ@D+mTap<-IWt9AF^vzf4-@4qQN{{)c4+zX&> zmtJu0$js(QOB+AE4nUiS|D5H27QvC*H0+`Lrq8AU{=y6y2fmGA_`3mTT0z8mmt~1m z8MFde9Re$lqh13RjxI*6#Fa|3(7e*drkdHK9T*Xn@rE#m7ab zRY~Qux0*HpmU_J{%J|ca@ZnC{08&O(4o>}54lQO7Fo*MqgzuUn*1kEI7WcAX>G==? z5s}FdAgh-r#2`rzlDBOJOHJOStZP*`nsnMM4~_HdVe~hW3{N`)BVK=G?&Ds(DBrb` z-ut$~>`r&Z#9~W4cN{$zt@Ixc+cpvSY~O)4qw`5St!8usdpk*oH`VgA7?cCDuE)G) zpv2GoBi|HBJZ;iqLLxRTE4BQFvE>Hh!Puf3!mf&l7XByzxb~da9&PyflL=`3JvB9G z2;+SX-gK!`iLw8>77Ecl_(ZzN2wLCANGD35MDL9De=75j^d3tG=){cYf51HZK!^D8 z=x)uZOeGtL0{KLIP{Kc2gCm1No`lufIzQW|$~&ZoQ>qBiq^Rt6X9`6*4=Q+0od3J8 zOttCcrJSH?&BrnX_3x^Fga%rpecGXNHyLE%Oi|OXY_wKi11K9)U^SosVyrI9a_==4t`i;IYO-z* zHtlFcoXBUIu~(whUQFhdMTr({4NmU1Da_!&(rwi zsoxoP8k2T90Tuh@trv+96fAeRJX>nj`&Q0~0i!ZvYcVaCVc(5?MUzELOc+oGo}L1E zO`Y=_;7Jjy(F(gG7X0B=PY&mH)w_=mr&+%e=tUyd_$sHPqa$tbt#%oEXcXZQ5X!!N z!iJ}H?Z;{pH8u*W8;hwVboid2B~^ZPyI-~5`LrfMS_)cDR|l2XtI)+wKb&|Q7xPt< zDxE(jaO_C^Xi;7FTedm!n*sQU7$&3C_1+^*lngza&=2|v@hg92Ld@RV5UtRxTW{?t zM4hX~0{j9clG^dQw3HZ{6RxTA^4Znx^P*k@(X@@b#{_wf`ypXrMvji>-Ww1yN1cIc zRtSD292^Rq1yN&-LFZAv&=(}#D`9-iYyD#`xWW$e5I0$HVjUfdva+(0O)5D(_n4zP zxq_JZUT%6`JlwP;Eaf&+RJ3WZ5R!?XB-$Ik?aewvFQITOIi$%&#lz)F8u zbqR_(`PHMOPnKw%ts4yk{mJY)U85IPT`d6Z73MtT7TQtL0lQnv$5GXK94L`IHJRm^ zsi}_wrei&isinH8a5k5a3MP+ER^_@>$6?JGa{0+E8uDZ&bT(5Q;$K0 zeT616Dil@2_`x5sZWF%lntcbCz@Uk4vB%)5~BGWba1p`3#HaccnEQf-$gXC63evKjZF}68SsF@5X5u~6lDd#$qzU{@-LSzG!c>F!1R46rVHjaHgZxm6XYC_Ns+oSm;UAr4&1+i z@=Z=oj--r37Y5$2=?jf3Bi{Ej5)-RPtEeD@Zu{9y7PZ`ZBqf(#fH)S=n==6hWrIX# z0)DUupoziN0o=tjL_=%WW8x_3>-k&P+Dwbaq3MRmr}4f!SfqF=*OL3S7!LhY&xa<` z!HBs658DEoCU0|+`qSVrv9QFI>_fLV%CmSAmuTu4Fk`N7W*?d*)L1LyNQe~Ke2kjGuK zAzGPt2~R8xmMLUpM-+K%*#h|Apu~s&;4u9*vFb{Q9|**~Sj$FfR~I_Q{6xcImBXNA zr`uy|cXM=anlC&lDQO}boY@3!fandlq=aV|EuAiEV`I}<#i2LsiiBy z#S(;2j?cu-9{u(zDvM(t3gqpphKY8s#R|>&=jG%CzqzRwO5nb-7Pt7o;P)B@1qEms z^uLGf*q67@d;mtr$jF$s_Q#{RnX;@p;elc9?svMVq$_<)_$c8#(RdoUm8Uh98zM8< z0kF!ppY3>6!_Nu|3hufLTMQVI_eX5pZZS0FB>mRg8)(3ZPE1UE6Q`u8NOa=1$PLOT zEmP8Sfvt^=jeeHyd#g>yXy#1C#1N;v?tCe*V2KdniLBbu1jAi%m`$76oAEig0-Zy_ z5Nl67CJ=hrE0pN9sVPq;E+$6SJ2XVewRV?=P~^^?;~*tRW@|DsvPT~c!%gWFvsCWo z^e8KgP0!+A?-{KU8hatPOq@3#yQdHMg<~K64T10bD+*exM>0X z)#CAcUr54Y`SM)S^ziU#bbtpThjdJKizGla`QJ4XIoO0TLC^A!$F+81$01<@0Csg+jP82l8A(b6TW$r~0gU!LBpAZd#2RWb`dQ zylQL#v`5=RLL#txITmkqSpmAV0EF!9IKVaxz4=I_@$#wgG#dv30|R$FHt1d~T0uzo z1;y0|dLQBrXF)j7tb)q0Qv(Sr^4&Yi)Jb2prkmhwPEMwsEy3P`j(Ls}D|2%ZXs=VD z0AdbS3akdqB24L3PjS1YHFtvRwCy<$uW=6#IX=wGwn3E57qDmJRN3)zZhJkAQ6Tf-!{hC z)dnG_w@q-9#0rvvH@CG#(sbwdwtNmP_BvGN3L~YWWRDBgaJ$#g+a$RT` z+>uvmGZ@{iMFz>+6R2u9s^J>txO!E}Qh4IQGZL{j=sLPkuqn;^lFk2kMy4_DsmBmR zz_~|J>1eTqyH|GrJK6Iy+*Ty>()6+OTra>wzkiIK-l1qHY@QuN5UZW1_O<(kQQ>v# zadI}Y*Y}v-0W5%jFf=!3nzk1OD}@8H`>w8}larI3enyrh`&RvMZP&C5A z!qWwfUIb^)zMtO^%~BD~?0P@5c6Zn_?$xV%dV0@}B1{8IOKE;aRIY9nFGxd^5*HaPq5o&f;O!u*LKpbjP363ri%MC(y{v;Y!2GB6pG8GJU7h%TKvJ9_cAG- z_&Pz5axFxo5bL&9CVlzx1-&@^VRDs*68{Qb3RUsL#erNLnrXx7>(K9<*i}juc4g73 zjh^m%E%aTdk>n&*eDea zof)sGYCN|NU}xOYte?v>~$rUu<&B7^$_fNAo? z%bSVwOLI%%$@wmjsy=7u&Qw0ve)EOZ0&CQ4eB<@dhVhk@T_FaoFpFAncW~brkCG`A zTorBFu}6v~*TWSO5GOrG+Snm_f%x5lS%F^e=rco zn7d;1!KJ08=w~mTw;_)f0ASu=-29Ao1>zDq@LGWK@j4<}Is_1X=)m#Yv}NZVfu`6) zYUm*?>c7V8XINSi=yVraetl4_uhi_Vdo@ z#GOU>U%T2J#iSaUTNYRyM*{6Z0h$zYm6 z>QJT~o7(gF=JTn3v!stK`PB{213-Wu8eh{=;y39o2oBP750juQY7A}@(qUb6I7{k~ z7cI*KR*IEqobOaP6DtQfSO-*BS0Nkk#K0Y=EWwdC2~cPP;0zF0Tv`f_-$S{QJInkV;U4fg(P#vROTTHnTI41 zWhyd65k*2OlqqDWWUkCo<}^@*5JD)5|NUC_-e;fR`LD~h&pz9-*7v>N`#!^c-_P?z z?NGk@eo$c>^R3*EZ{E;*hp=R?4YVylO)S@V*=Ej`Yqic3zubAF&Z*L^wxG4g(qw%) zLF28HdP9Mp|MAt|ot>R~n@>J@-&GVD8MzeT3Zm#V1E|Zy%G3 zu;p_*+J}fikXynwgGmpVgl|l!M^WjXY<62SvqcDaj~*$c01P=vX>8TsXwMYVW_RrS zhsXp4vn1u)9oqdjQ)nv|P--+71xO%G&xuMVE5h$XZiWMN+(>1u5wrE3@w% z`(=zMxX26sfA^j}GIx(86qL)$-lbo~E^+hwxuVJT^AvC39|vz7u-po|t$U4~(0F5mRTYmW*2s2anj7ei2vCGgh2+5K|P+!L2%+ zg2KWVQKpSfBVw_2iw{54(bD2EvdnG^Ml-P_+pnkdGSQz6&Q!nEnL&=(@yjajq(1C;G&g)NI}5 z!UGC!9kB1R49~%eU!_5UEga9K<5mL256kC+bw)>()i7}@-vW1qU+os~$DUvWHeFd$ zHT0tOEMCsn=vuLdKqd!EkRUv9UcgR1coFrC4Fa}n+fC22o2YithHU;$Y`Zc zDZLX%Sy>st00N{fTA=ZkQ*s&OvPB7x0iGbEcw>`Go9@x$>>?i9AkGdr3;EYJN$ zKaDZPia9QzW@03oBbefAWeEX6Hm$E`#5ana;xs)!a<<~?)vE#H&ca+egSZsvRT|Em z?3}cOWwg>#AyP!pcu+6D z-BFvU@^q|Dm&Yly_;~o}(G4OF?ZJ;82?3lA5Jx-*GDXCeUJDE{U}40shQ*$2fQ11P zT;xRRBbThziJIep4J|xQ0*`77>fqS%tbh|B8Uj9Qm1|(V`+%pXXYHQ=TQ9o*a_hg@ zbqo#Z{9jx^v)>b@rVH??_yOMBkoyd_?}JlJ1|mZ=k2-PY3^NlG6L7t-Iwnd>x=|1w zj{KiG>~-wTyE>`6*s}r`l5`ig7Luc+O`&LUT}&KCRG`& zsK0lkinx97vljy!{XRZ*+YwKD1wl({h{v}Rrz53dTjYaoD#Xh`pk-%EVd%bm@Dd0H zc&<|T*b3=5{!NFMflye&F)QZvY70Rdf1#^#?{yP--mt*TOS20QB3-9{!7@jh*A7+? zFQO#5u^!3>ysqzWV57S1>-u0Nmw2sx{I)LU(qOGVfz0M#Dh^besF4DjsPWeHq}0{F z+|ihrGb`Y`MAfrrMbX}BMST6Xv%I+CL(iVG%+Q7g1Zbq=Z(RGnGEhoHZ%bVqIezR0 zsFQoOolPcl7a-qet?wyG7%s~9)Z-n`37A^&`mliOYGy9x6`#?av0{9n^)nv$vPG16 z%t|lcg&%1!f={#b>jB#e!IGE4`uO9jwX~wYLn7e2Csnt~h=oC2fpBx=RV@kX?DMBF z#ZT^o&enyWwSMRdSt;K|+63oFgKUSwxokm`%^ph0@Z^huaaielPoAtr_=>oR&M-@U z8?(W8%WIcC=(}&V^vFHkx91X;KwaNnrR^2ME9%QipkYlGB}SZYGkgpBFp!vo;(h3W z&nt@;=qC2&8VUe+#!10l z+>F=jRNuz@b!h0&3Fqr+M0b;vw5{iSpu)4-ACOR0d|b+)#^hje*z4Dhx%|K-TJWty zI2_RYt6C;%g+2wWW+*Hlr3B(h5_(0Y-uV@s)71)_2ZD6^VNUcduWG@IL$AiT8bH7EsVHQa0@|V(M9{d=8kRKZsxXV#g6&(!WQCmkaR+8J4&b{ZeDon(@R4^Hx`C? zedHf48DNi!Us(jPmZH7w#hS>S$p1GDRc-;YfM$oB^vkg6<=|nNnWYmoOwbd0`Ge5t zyxAK&bX7E4V6OVa5f1M99)G~3d()1DYy5Ss$NcmDh#5q$drGA}0pLG37dNBHlK6|v zV`~TQ)tYVu)H2lBo(Y^U1z}FIvwjccqa|}$)&k0PmCe`^TefaZTs47U4Sc?kMejL) z(C-KRIG15Z&ILy_a2HgMbE$Qp4APek2;%N0CLUOE^<`IpJ?TU?b}l3&M0Ff3C+SxC zZ%WZ|Is^r-_ni1njM^anTJ>U>WMALElYqr!qp-* z;BD)5uXG%eZvD3V|gX^Kim7D-4$ z!HV9oyTEQh16pLSqjb)Mk+ANO-ksKgO$urOpMzd}_HG>jYVB?C@Ty+M%kI;qco1MF z(QzmEybpn3HF6F3SWwUQIH5BJ`);(&eey){n_O!1y+@B2u(sIScaLoA5qf#*OX;9x%hXGz!+3u9F-Aj6_2OEx zdWwoP6eLXnDqXn-5BWrc!?zw*X`KYNsNSl0_Xv^65sMIY5LVe05mx6COVi5HPe05I z9YRC8X?FD;#25_AXUbee$-Q=nUl!6UG`8VpPnFrJ_xn-$h zL_&W|S&rmUv@EptRl^!TAJ9ZxNpM>VknhgNQ1u=C5PggY4eY`CupHT|-UF=+ZLhxo zns1yhswSy6UJd2Of_EM~SV|RlAmk3u=Lw4fgoH2y=9Z$A{fKX|>aP#Hla*{)6n*xb zB&`&;!pP-BL*?Ccb_mvB;mx5Vhb>m#8XY}NDS?RXL{Xg8%BU!|iCuD$O9LC@A%HpW z*m2n6=|jC#F+<(!DNZb}(KeEnb=|rsXHd9k^R}_%$GEb^ZZ&P~HQs&o2I#eJ5iK9b zG>1w-e`Bzb#CA{!5wEPh=Jlr|h01doFM_-ZUgi~O1hp`rBT`oNFt~5;mmb1>VSQcu zmFk?fs$8;LHn&BwoLjHlzo|?mT>UOfa@Xa4ot)NucHB`Vr%k-+Kqs>%VsY%X#9SU* z$=tf%rLieaBI~aJkAyuy?gJ`V4$RRvm-8CaYPo0I-Ihv^_9hnG=h zLr*#ieGnAg9seZ`(@HJY8s+Pe}aN!Lb#YL@R0{UmYUpi zwzhBrT6Mko+R4wS^rnWjZaX3Ez~Lo{CfyRqFJP21p$^T-$uaw}HtAA~Zb7}Ae4cc{ z@^)+nA^?+)yTS!xI|i*0tBn@G^_B@`AGQ`6Pdsw2yZ7*H{_aK(VWe^Mv5cD96~51L zhP{V!=-ZgHC?#9X_ni&{T-+(}jz={15IV^RmX?-Y=g&#k+TPnNvvZkjZM{_6*HUp! zk2=Txc^lJfZUkpDgjv)wb7rzEZ;%wBFDmA z&5LvKbE>uY>TCBN*m?xi*H6QJJUATZ2d)&HBbCyvo{|?n@U7A_^Y~rtXf!%ZN=x&F zp2kW_LLwMk8^i_-X!9&Ii8iE;Xf})t9u`^jeZN(hKa7f z;tJ9fPmP4DjeSRSbwvky!&L(7K6alrL6frq$(;u8viK1IxXY_PW?CC{Hvc2Aoc2$Aq-1I1PhXQ zcw}s12&05;yx2pQ?mIi=TV{HpvG3)VFA2N%JcaWF|Ap`RJmPBF(lz1=&szWfJuOnh z=g(#F$f#Ngd=SF6IrjAt_yV9N$hB`)xPQ-f`@WHhVPS6DF&Jx%i6}*)IVaJ+xI1?0 zAi56&nfcn^fARg`5(+|T>;yoT0D(xK_6P_r^NclfM#_4IDg%-jWvrBWGt^L z0;wtigv2(&nmDcJg-9jSYt|EbDgqs4L|(rRh=dgRFl1Eh!iJJ=@8gBOO!n@Zw8p%$ z)IChSX-Bq!mk9!s0!;#c-ylmTDQ-BkaKcq0Te9uc%x^aoubT8sGcQsX$)-Y?kAPku z+PFV#ji?Owy*zXaTnz$N9h5i-DF6z;QMpn?m|cd%*pDauTL-TEy4`GJv^(Aai4`0P zg#t$s)MkO*iu0twi4y@(Bom=;k|#$4=GvUwOk;kvT zg8=5*V=4EanLmoes=J$Yj{{Ra_EMzNlZG(A!RHth^8zkNKLd}Z+`H=KX$C>laqcxPfw5Ua8Pk*S;`*m zUiWWrANkUD1Qm0d+vF%g3IVM>1+n*5y8-ai*te7<6kMIRmyfd8=fu)8(WOy&@BF!N zl3Bj0xxN29w&t7m_NxG51kJd(?``h-GuaU`-EOKc{r=>W7goE800aa-2sVp-I0De0 zTv71B92S7=t8mvs9O-N17(tZ{4GkrgD911!&uCp3FvNkNrorkW*xG;-+n85imz@Az zw8V$YG@k%m8e)x2P0aPnkE4zQOg2&4jmsQ*@}B?F>VN3k3njHjP)ox=!njtA)aFi1 zr68&85+B<2Y{F}yodb}J_zCMobf@=h*2>LsyJ%G5tkTb6xNT%#V|_hMqQ-I{oQ21B zzWN@vJv(+9S`>;gq7C)Nn^2dYIeRufKmX{2bB=XiWl!khPXQ5&HMcQ~p@krG3?9qP zJ`uq`FWdlJp}dl4Oy-hqTdjO70kjWFa#GN`#P<|1hue=VEi`QOqY3rP9s)RP@es2F zG#0RDv|PHKUD0&`!VXICl`97%XcoBtK(7%yh`0Nka4rE?0+|3LJ5{zNia~;M>Qe~~ ziqaM>pg}`&g;(m^C1bh$_|6sH9y_X0w^z!Qp<f-@wDNN;FHi(RS&5 zOKoMXeA&C9Hiy?d)S<;v!&aRV3x;HN@8mlEFCVf$?^EEZo*>9Y7$d-MfZ}ps2$4B( z@)xXE`UMx2@WAusR%wlK)kW%$38GM|7}A9r0wQ)rs8>le*m%A2dAiD)uk&4M z8_HJ74SnR3wM>x#5K&bwhdB!Vl=r{czC;|>N_9I=8xZh~tCkY^C9hS~FYjJth2gik zQxX#74H^@H&nG9p)qDt#pKP%6co7{XDJkh@u04*e)^=?z&Rlw!@1C5qo#HzXcOdKw zauYBe>=b{M-HiON>(C?7wGb(#>ZJDWSy(MwSD28n2=Wi?%o5aGlrQyB775}qqhZZS z(DLxukB9l4bT$qO3Y4lvD1Zq=kl4Sw>2yvq30x0636gJC4vq@QG%=S9@GGQ0q2HHs zc_;MxGCTAHN{Fqt;=}19kVScUIRIJmHjQM9KX>;x%D!&MFbwuH%ZYuK-tu)S;V9ehUR zeKjf@-nlEy$Jti5A3Jnhg&6Z@>|^LMg|(QEf(>fgt=PvcDbeSWFNBxv^c;UHkEE*M zViz`nP42mtnN1@XG=s`6B1a|oA2O&HfMLS>eX5u-K4sjJgjKoe{;byv|4h8+U2cG+ z1C*ms@8HXKi)ECaT?K+8AZA50U(GfL09fGYo11qR6gQ6TKZ}N$R~mepktSjv0zo9B zS-!3IXl!_-Ckxz6wHmnrE1lo|4{UojJO)V|=6LuO4F)qAtDP0};7=hy(9~|xi=K-7pKOjRc;Rf(HYwH&+@u2~4 zAtxtC1b}e#_(5_EqI!hLlANzZnAL7Hx_ZnB}+<5i0b>`7AB+_ z=CPy7F^&i5eG@piU$Lkp3ZJN8jNDXNP9a%I!&x-m{tQ{H#;4Q2M$Mt#(Qmza|3l7O zS+uWs`e89WgZdD?gDK(_=2r2ozIa^8z?I;r+h+WX1&j^)EJn~ z62T{je#2*iY^|vERxosOdF*i|IJh>q=_yH?jS;AuPuE_D4w^l3g0`-?F~X?N${`}ZwcCJ?lW zxqQ=mX^U`q>1uZ1Sk9FVFkEu#V%??@wiYp^0NZ?>%Ffx6uCBO>iIHeV5u%w7Aac zax!Lcp)3(`5Qsm8oW6kpAHa>rGEhl(_$5k0iLQ+*&37HG+L|~CjUcQxT*$qveGrcv zn#KAZIP=LCyq9lqmD%N6S0Ql6Vr)sIEyaJtJPjHOs6j_45R*cIj*$X^v@|-1hzR4# zDrv3)_(Lnd%}xO+o0bu*9?}eX;8am>N&y2xb!htN4nD4b41>KIuA898_KkS?YN4S0 zsJ=sy2ZjF_L~Dc^(l0?VO3~T=rKB2X>s59c5c1umya%ssn_yWWoB*l?Y?y#`pW=C+ zEx6#_qyx<^h%D1TS0G`cp@N-AI%JVFAR|Qo=LG8{{0oXG0XrlNLfuL}gKkL|yQW0D z53I{0qz8x{pwypp$Fh(DtK2;V>!H$mR_H%?UBCG>rtc~D6$K{eB5V%;y9y^xY(gPG zb^k5f!A|b)otD(10-#Di&g}!E%C@R8-rsX5c0qDUc|b@_Em@Y=;H=7(!0s zBsXk$f$a|4gSbKDmu7uFOL@t)%%kiMUqo$)}1h)?b_6va?S zCoWfnpEC5B)|#WUJqOFqa_bC&U1exJh%f@xPav@ynyh~P8a7`a2McgS|A@Q!mp{N{`;wH(+F_H|+$`wb6ZM8KEU@$G8x= zXb**LTgp6Brt{NlL^H33llvasr`PWHYEN*i8=(+N*F zcB-p~pVv%i@YikMVVtIub%u+aH-lRoH;8;goEg_ z=3dq6WWd=Yh)Qp2UIwum9)u@2r@vW+%ex5uHMvSa=3-h7bE2+bi2q&`&kPiAvCFn= z6GkGl5H%H*N3_Y)%?ldvrtiLLxN_bw@(7vb{TX5-#c0?E&qvKi1->iFUsr}ENS+8U z>>WNlrHOv^cL^Dbzac7G53xZWtW59Vhw`vF{GMv+RqM!nzl8TQP>>y6zk|vi8c3YR z=_53)IwK;%7r)*O=%EZ4+HuQy?|{q7HdrygFD+0CNhng1=AL_Y^+fk3LnrUKV~Kw- z9^F27^F0rNt$jY_S_j%l93r5^yP!qKTqOjfdY-VJ!zo#tb99lNW!-b^aYFS5#w(tl zu%KeT__pNi>m-_}DL||Ba`%tJlZY+l=9s2)Hf%EV4MywL6%ha4%s5}z?mMhGfy|rM zY1)z3tbYIBFeR}QHT=26f(knjiR|%=JD)O~>zh3|(5~h<~K0krOPR9`a{|v;$kqeyN=8SCJfgKShEgJCwy33TmBcSu#f@=3ieMOuHDHz z8A>BTaq-K6fy?LXBj)rI_fVoXbg>hb9swZ?38qkZqcj$(1(=ORGK7shqOMMZiWd7Z z<7gmBL=S;bMJS~HZ@O+F)GmOgOOc`iy#t2#4}f=;V>Qa<<~1O5=$^F3G(#~H>?Wa| z@1>XFn;^u-5A%uxwF7%ZMEoF@b)10}A))H{BZG$xzZOVi2*69Lh*M&G{6AMwFh;^A zI;mW5y!Q8Ri}OZl4t92QAj;+luRq5Cl_GwJl7oUehGmeNpfIJZK;$$jXQ4usENZWS z=W_iU&sC=b-S|@K_Y0{{Pm2H8KX-}y`EskU*8J+avu3&Tr20ev`a=h$`n*Axd`EO5 z0^1hTe`fI8H+l5M`7sMCOyoQu=t%t^&;^JJlk7W?R8jL;V9JmT5n<^=ofqKpf&2`* zpi9G=!;-&vCWhw<2W99JL}1hLgE$wY@>Ovlwu=PW1P~V}IYVP)O$ua?q~Lj>JAk7P z7X@oi$~z?A>rEqKc#*96;GSeJJj$E_r?@k}rK6)m4yZDH9#s>Yp5H>1B}8z^E+fAm zAekJKLdga?d7wB>>lH~hkXH%q*|XWG80qZI-bv#tfmmn8e?VJaBTFUE5%bs;#5R`qH9n|sYT}X8PTuOb2{063kEE28%gffjtY2gL zmSKk-4X5)rskiI+hdS&;h+#n?1i{DXzxMUXAXdQEMUS6O7mMgu7DzOJd6Ghidp;fA zrwIp%wVkhesJ*5L1Y?D8=U@dqBe-U(-KMUtVix@12E;{;#gCvDgOK72Us*0*V~u1j zWW52)*1f#OjDSfn$}~fj>*{vQO9t;s@xFOiD`oM53jwE8;UJ+J7gF5&O5$*$Mj)ui zr@g$MOWGJ82b4w|JS_kG!as4?S8t5;Wx(l+O0C`B6JL?I!SryeW173!rGL~D>MSQJ z8TnC%=Xgez5AdqbjfB^88voju`!-vkXGXYJY9?IT_f|#6=`St78B-|Q93M1eqWG15 zF$Z|e`&FPe;XT#4Zu~9rx@aqgWin*H|B&2M3dAsyZ7`_5s} z=cAS=4i0gtIR({G)LeW;?(!rZRDRLc)vml?ZJGVkH&?XRtqiCYtL9fuc&7M@!)3yn zaYo6|caomx+{L93^NLu<$Ffy?_g(2&v05SURag7cHW#MR*S~trw+=_{zSVN<*uX&U z2LWe~pEE`Nt6r@?4TGNg^r;wwCy=+-%al7+ZIo|i$8#6OK~=GXc|{+@rA~e}m}{+* zx`!dNHaFn|8aCWNvW*ABXQ1MG{WVM|`W2$XM%A5#yKO~-uA%zJbY0&5^AlD;T%BB; zJbraY1`1j~K6&Toq&xl{qb{4@z7-pu(I^|9-1^M-Sb^jS*{^hIr|d`1xTN;JTWSC9 zW?~O*T>A6|Zqob)-Mtknh4YK|Jo6qGU>7I7T=JWAFt`#h6Azj98|SrLlqvxvf}7aTL3)~A!E+)Z>o7|L8%=VPgfX|+p9?${MIcy{pJX65x8HyR$hu;UIk zh0yCBhz*>Uc<8O$-+Hq0W9K!VyhHnz=~J&-aHnjjX8`HS~NI*cg0M)V1iZ{J$ zeoeUS_{`{9LYyAFQZu!g%_0S7|VfWSSEN%jS z&Ae<8ewr}j7NcYCs|*sV zy5li^{EEN{ZIm?2G?=;O=oFuD-`Ru-M*_Po)c$!$4;iupIA)p8wTeC-Xf8zej7r5}*~^n(MLM_NelRn@E-C z>obwz;qee_dtlNL8P&^!1*jUH++e8Rvo0#aucA0OIEX&I_2u`>WbyG+(MmkrXa?90#ZbYrz z6v~9mId<*bdAPwWDd&xl?slu7*LRdB&RY=jR^BSo?ybM_NT@j)ZSNaB-R%BZ6L!M< z%=~Ut()8sEQhZ~YdA7qtHw<|6GvloXco^$3w{N9K0Q-td&^ieZi^O?MM43LinWi%k z9JL;L(XcHqE?t_~q>L;dQ)Z3MmEQUm47~Ol55l6l{6S1zW#pf9&2Q5$=i2yl{s9V zoc(DzSXtBDEU=mj4LHfGN4_#^_ago!si~=|XWU?VQxg--%U|>u3nqbjL<34CSX^M2 z3fH$=pKe!HRIEr_UAA<|k{@VWsDfXy1Z{rwp-~G_Aa==(gqNNdOF!kfyNG_@olj_9pJ94OiZ?k-b3_!LQsw3BTf7#Y+CTt!VeE& zv=kKHqVKgInd>hax2%S5vA1MLBvG{1Rs2edh)Z}`!F zr~?&0Fa0u}q7D>cw`26E-p-ibkNtTrCxp$c9c`x{Km5mb9H`8aSj2DL z38|3ysZZWylrTy=4#cY?^m(aqgtS1!sQA;TPg}UVU=e7Cq}tL0T_2RY4|{*#tGtm_$=%xRf)>DVX+5?VjIwe2NMyQ@l|_XPwWT0mJIuT zc;7K~b@fieSIz2Swa!Lg&r7;~m%e*M2}^~}ZEA)Oe*gY$-LYo~@~*H12v#hWD~_eK z*|6hxO?J5k&QKxgd(GagYHZ^_Z23gQzE)%G(qZkN<+lG?A$PAa(mpHm*3!%`hg|mf zDz>zo8XE7(ZQa7rbWY;--hJAkzgBTbros2aeWW}2A=0REYv)&<^4jU1Qa$=-iS8o4 zLla(Y59(*f&&StLC<&C=x}_Q+mb)q5YZ+@txcM&=@ThttPS*}8LYKi|yI zmU@-d2-7sktAUxTrkdM|hEut^s>)=Eir;#47%z>VkpH(a=ar4PQPE&R2`#-X;c>s; zz`uO!y%fHVorl58nh#*!q}k16(elCfk5dYp z)c`P&m$yFFMDijFrBZN+<#1>D+xGsJ3Hzg01eQ}T1z)jw&oToFr;n?6es|xumit%q zZHm70iYiclUwb)pvora<9QnP(@F8Em&Bbr+&nQ!Wtt98mmpslCj|=8YLqM2!6r+z@ zt(Ow>St-U;f74Hqqc3D;c(=q<<=4~rn-)IVh^9?wK)hRYw*+_Z;wM<0EL}Er^Ix9v zs<>pmH}bphJN)kG?@;7O_4-t_<(|-=Gc^|7-39kjs=eNf%ucArtHN9BIW5xgwuWi;zJmmW5gl8`LR35FcL7w;X4AHqZroJYUSwzf7hvkpc8u&jn5TX2cPf*t1W z+$q=%WK*!Y<(-aov1%;mi?6{w4>UFX+TQVV=^lwGz4wppS~e`s=r8FQuHV|0v2ADX zn)n)Wzmd3K#Wz`WBTM_yIIsMCy_FWuH*o}H3Ow`!*IWFXxuBD&^p9`; z+J=hwGwz!ixaiEs_*xG983|AEHz1d<2rRa~*s`hL&xl1)3WAj!8kAXf5r{qB3Yu&tE-=$x~hfu#v0oRz3v)bTd z=^gN5u$DZ^h=x*WC3ZZu7UPM#-$YiOF4fqu$>iFkBNd zqlh0uy;E1Sn;XFfqJ?ok1W?DmkGt|Ct{gpAh#&AQ*+Y{MBqAMXLOk>Qb0#Ku!uPJ) zC?@EjmTH~e;k(<-{yaw1i;3O*>RMG-M+Ru4$)v@f+m#2~_nqxNIieJ1Xt@za%Hh-j zJm1)|NSY0+ByS5H?;f_x==Z7i;v`#L&j-8asKHYHYfADi`TIwt4Z={&$1drfR8&+H zeD3XU60wG_u6cl~YMd#0@1ctLH9S52s@TY(k~83DGKCvzBWj=_j9dO2jbO{ z-qe?oH1BVkn-;BrF%g%o44Y{XxBB%h`}O@xe2z$3k9+<~JQOQ#F0CEZJ2_4I91BO~ zAf(oR(%0XAYvhy%WJGZ9lfie)Y?L%KH0~k1^D^*%ji--&2N$hnWb_bHrbE;21#_+vUp_#r4o9;+KW4uk2lBovhs>OS{l* z_}cDumuqulBGH_o%(VWfL*bs`(>j`RVGwx1TGhV2|MaOILSk{Kxxiiu94ipxzfKa~ zP}k5|Q@tDE;kzt9otmDoS8hOW@_q5q+@7_~Jy^S3116dpL)A*Pm6v)9veNF|lLZHd zHrhCE%{VM9h9~XwSfV zuM=%D2#{!(Z@sVMUQg%c@r^s}C^HjI2IX2h%+Jf9fMU;A`+PQU-Kq#h1zLJEp-4)X z&q}}FfxEq)IjBt7##(}BCwrEJ+tfkiPTk^zu!Ot3cEI=!nvgw43B#4?)9P44!6`;MaDf_~=vc(jX4UOMm(vS1IBg-NnlX-r~e+=GJ5l=yf#cn{=K z%4e1E|F_dG`wD9P98e$K!s!ztRladHvZ(p!Oy$2|wpBP?*~Gyr4dvqxYMaCXmt=o^Hf5^*$w z+32xSPvqR}Ql5OsRxuF({CS(5$e-W6Qir!wly4++RYdKwWEs~l?kMJNJ-xR$@PDEa zH~eZp6?}@AtTVFjc&t76@Fdg(lor;x-EEwAj86a7PIr~cFdAGv(6doj32J&1&V#6& zJXNC^-r3|`wh`|=5Ib`r(E+_SfW9NhxbS0RZ-3*JMI#}m^nETm_10Mf+eiK6W7ti2 zF#I5m(Z-=?+Ioo9(|!iM0F-VSdfINz*V0J5b4MB$XbM$Q&S--@ZwJqusWg3*bpL*N z=t*wAkgkk_gvPY7WisuuFHxg5eI;4g?}jg< zy5Nr$BCoMv_;BZJF>*lj;S4mDVYrW@vvSp{ezY_LY=P7fTz0nPo1OgpY6X&lf_K0L z^DKx2YE{)W!urk)O%RqShu<~4KjVVz19mPEZIgIe>H2}=_74y1a?*!3_BA2V7agwU zNLY)!KqB_zZ(hVR!f)-yv>)5IrNy0WtDQS?d>gn_EmWuPES9?L&;3Zx?p^JT8}H6y zRyy1v$#vx;t7T)EU^TW22(-X`o%#LK5vLsTp>^v|6^vGY5pNw4NIFQckeHZ_Ff&Q; zKsdcPkd3$ZpV!DTV~eOja?cmRF@xuwcvZ)q+hnQT29!)y~>H&hL8dzGor~z#4iY5Ak>Xz)#yObgA5_+FlhD3S(k=G(3 zBI#eO0T{=^9O4*acZ_3r0%lK~e&^^@dWU4~AiK7)1OateU&M^Q-;sD5{4SYmjtkt{ z9wg5_1qaXAN^n5YOpRL0|IR@4TIYgD?=y0hS&#Aj?)3NDkg*Q9I9P>1eIDfGNUHL^#G4y9CxpLNXU=FL`T#(HU8-ekJ8(Jn!T$%xVXC;XW#3s9 z6&18=3$%{&njU<@)Vo8QrWWwWJyiE?qhFRp#Xtg`)+}4Zqvk?a=&E*2@_%NxdS~bF zT%j^+flQn_}t9zJZM_rln|@ppEz`T9vE$F5G7rm#HQZ+x?Up|`eAfHe}h&rd&I<&tahhJbB5k@3X6-&K=5^Fpzhk1d^^C6 zb|UZZ$wqX~Z21RF`3kuw0(abeaXM+DuD-M3#ZP&y=G;|4a{qDC`U;VYkxq&-Tf%$-`+q_uz331>J3%F|D{SYNp?yFPXD5^tW3i2PPFFX*gf4T*^VdVm-S@+UI)3bK(<) z?b}?nk=uP;Tb8f4gpSfvvTHp>kOf}@P(Uz9nv-*mbosTGjYVX9OCJ0L+{JRhv3gup zwYnzj1aVaf`(z_>uiROD^8nVBOj_ua5tFZYYFopF523Z&MYdhYoXS+8&ecyCm=WYm${sQk$oDgUHT&hR0UB^{3C5<#)^-JHkh_Qm`Xyk!G zf*tNRf@Z%M&jmCsbg~iSK6e&VBJTVLfFKGpV^KQi7}9io`37i#mhd%Ta3-?K^>G3H z@m(A#S?qe7U&+_izCBpv+1|)3+XuOa4B5 zEIht0eIBjx)_yT}shn=O)D7fPIX&YyB5A;K%&)a=o%@*f)!D9{`glSu^uw|F3Xv4f z%a}>pEqQzBhTMy zF3+Kaiu>}pGT_q-N{B=KRVCGjNcEG#a*EPE>Z%6IR9ky9gRU5oG0}?UBXu&SG}Cd>!q{D~ILHGsL-pzLDpYCZ`!mGhHrKNnPNT z^jXG|xVSr2q1~U<&vTnO#yS#&&N%j_eNpw{Cw4l=>UL1Cp@G6h%YqL!{&*hn8c;Uu z8?t9MI=jq$u*s~@L?Oa{i`b0k!p67~>2q9WGQ!vkX|_Ot(7XNhgZ~T6Whzj2cBP>& zpOQ}X#fXtWtCUrX%@(ouY}o0UT`*fAWlM$Uo(fRB&7*9KRE|yTn99ExN4?!jdS5=h z;OmR|^D<`RlEs-r86?GL?nOU}^-tM_@lwu1~g2lGkhlSm6 zL1X>L8|)wW*@0~m#IWffR4%pOXkiE|_`vY}fc<+8Wx6H;KTxO*jiFSR06s4uN>rU={ou8+_fMRjewx}BD zl!^ z7wnhtHfU@PW-Is>8AZSzO4f^RPLDO!tb_=gxW6P&+*<+#R`9s!dZ`pviFp;;EHMWs+$|zb3bdZ=ISDLv1m6E`S zx4@=&?|CsFy&j|}?V@gRV`f>FgazbxrT85cAM<+rI@ zPr8~Ri&GmbVMf*zQ0>1BX~{Do*yUM+0@aGy_dBVNfwOy=ey9p=QTQEf?<)4(d0gB> zYw|8^Z^^Clx&1=vL&1nf)Ez(jSa-P&wgDw!k1Px8r8|qI%LD!S0L{aIr9yFFL&Z+LgLmPQ z7kU*d#+emUGk40m3!#e@0Mm!6cZ$B6_WGR-V4dnmDPh#zO|fO*q75cj8!xu=DU;}{ z2^~=`n95C($GhuF76Rj?nmO-1aK3%s&T-xYo9n z^TaxMi^^lpF9C-eYXhMIns=yHw@TRl&Ft;571Vw8NeU04yWrCnGnsc>Sgr_6aX<4t zX+J~O(>k$W93Y)qJe3ji66zzQI0gCh!I;x$aSp<;EA9JVczGt@*el&%U%vQLx2Lxo z-u)40NNERw)&JLV8<|EQJ!$#oI;*jEj*5@sX+X*D_dsm`0C!@)%>yc|a)=hMlN%JaSHgqivWln$NW z5=z)-X6y0z{0KDM*cSWL5zd&v)&p;Gg+(J?sh<(j{o3xpT#!=mO?UokQ-ebnM`7)~ z?;^21efz9a*COKpv!2vUI@Y<}y98gp29EN@kH1N%!B6GO=aF;-gG_kCI=n&dUx^m+ zlz4V&GV|;BgDi?77Nz^Y9#YBr`AtyC2U|o-c2raNgV$O{18;E9Zgfv~CuMIiV)Uk) ziw(fZ*x_wE$lGfFKQSz)9M%3&T2{%jq;1C9YM8>VhCh&Mh6VWhER__@uYfJ?poJ`4 zssMYI>+pwWuuIMD{aegv1pPVA^v6WcKPdp}#{4*znf>z)?q6<8`qnvqFMp6K7IPaP zcaG~!#dW5obmY2A4))}2+S!T~Nq96n;uc=NnJg|vhX!Ar1+@`{VjBs)PI3N^y`qQb ze&y|q2V={I$F7ao6oKba(0_xUdX~@qHggp&W_;1jE|> z*Atn$4vGe@asYvpw>b_M4pbxJMF@9DuvTwQqEk4lOZb*!#1A3TNIG4I|6{)fyrj)glvhy7z*71QfgaN$235%~(~6%1JvJm`qZdCRrr z8FjVEFDaq2zI-J-c)&pk1n z-xXv-5ndR1m^z41-LTCGLFM55F9iTIc@J6TC5J61bE3b_=R)K{r7z>-gUH{nryBeZ z^3=!M!i7s4A?x(_B4VFzA&DY#7;;gn_$%o!44s^3OQ*j6^e0r!96gCQDUq8aD{Y0F z0uj1LlHmq+>0Cq^Huo`Uo<0d=OZrzuKZgN6RJkVNAn%fcy#acij*K0dDIW<(|wArC-&4)~b#B{d<%_7l1hf#_16~jw{W`0vy+51%9 zfiKxFF~(APmyIVdj&bO*FwOC#vNJ2>jj2#fKi5fKUS& zw#6r^Y~!vO&UWbOAVw01wAEkTSyNpN1yu^v66i<)h3M8lZKylqWeKV>6SkflN}Tm? z!eTPEI;DV1yY%Aofj&-T?E$WZ7z!3moC9I|%A0g8KvuYhVB6uQyX2uf&9LUfBSn;v4 z#DF55(?T5}XcVf@YAwccJY1ZeH!p|*Q<7n&`vQHIb$AK_0j<4q@Z1E|A0P`N5JLm4 zAV~`VLSS#ehM7HiAKou~D+s6;a0)^{O1Newo$3Te6PEC#{haN)alN!WSzlMq8{Zt7 zx<=4dRt>X{a3wYUS^D;X87o3K4*wn-?Hm@z&cr4`J>S9KPNV22u+ET-to^HZs&Y6MOT9; zmMp%r`a7WD0&c0I!Tnt?1vm6E%#!ew{kwqhs?}EN2kHy$NPhOr01E?AA4@S|og1NA zI!L?Pl9s0nl8G;;^LUhxWrz-Ra!qU-X->fbxtY>Z8RZ73Kx3LD8y!!%3bJZZm1|eo_lpnvjF$zxKCs;X zg_Fyo%>xggw1@rZI&DlFwca}sLdwf8e@8<_=93yVgj(CMExltrOi#(-DpJ+eZB1!e zf{UspxSY`<{u1#wPJ@2P#BouaFxji1A_}L6@*5}iG(&a8 z^GA$FlBtX%Z5RZ@fqeV>eg=ncOX#;0fvo48ThKQE^SAWW0+zSbuP{rrZ9E*~bm9=?zt0cW7 zWKpbihtBVW{S5=9c4PCf7hv;@!iihQ&JX5Z-&x2UC=XG|W@TtDcN94&3r8IcOe~H_ z!RCdStl>+R@z^gSO;*O4-_a7Ay}s7M=^oP;nD8aKyZV5%hi%DdGp#d{k&)?KKTGCM z-$1ny#XAqKEE$5GG?V`dmN?a3Muxm2JiOnt3Jmqe##5G(d>OK1$BuAN*nBLS`uh6i zuaW}%S#(mJ+nn@!-aV-@Gq|?7vE8kgO=FChw z6pFUH@?uZk%t9p)-ab61A6EI@zIGG1(y$-sim`Jl8`nlseM<5eQ88tT|1VfO;o8rI z$5Wf1ee=K}AZk9JuVUEbR7Me1rZp#@)Y#lI<8+s?cK7P}8k`3#_6p?e<_YVI1~%p@j^ewd3kry^I|wZF(C#Ne=C`e;Z%f{}ahrSREd@9*w=k_#{`W={3Q8Rv9Xa0g z{(WkCx&SU79j0D3*w%o~Cmsz&sdzlEr#w1UPXU|HP+F_D9rJLAQ*yot;wB}eGj{wk?(=^-4L zHyEV@kbfKQ6t@O;7(dakL@Yl&+K5&R3^!{xLrpz(4%}qU&-A#w=doyQ@$yk;$JxC# zj|-Cu3Jl@X5OaWbj2@W*JHYejDUa@!OoNB`k7q98!YImUbxFi$XJG@Vs z!w@q4ut6|XX=h*d$mhNtBM*LbP3vv@0qVH%nJrPj!2eYaj1#&YG){O$mwx@`=RN&j z_0^m%?ZfecnnBCNJZ&I!|zEHn8dqO>lLa|A?J6-P<|simk*lo`;@2 zWL7wiL1bf}7N|Jz>_t=ksphR_Je!`gSqoQ!w1GOO5i{lPFD8m3s*634Z`Ghq)zgH% za}jE_+52%%P1GcD%q4yKz!?EK5U$b4`sV<1?i zN=$&3lJZiXuB@tp18g`yTqtTQ>Zg8iOJhvU<-}AheRc0xA6%ZebH7&S_|Gg82poh` za?JG)Zmop>L}g1v)8n8%jliXWBb&Qfx`_4hq!S|!?uLBj0@e^XxP|kH`L4yGIj9Yw z9xJ%mop}r6A3RWmLDQ?zAKd|83Q`X7A1QDMy0aM;0{;iHtsT!|+HA<6bgT{{Sn?3D za75|`ehunw{<;BEbOTi}Fx;wi;6Pal->b*y@vR)L`eLz9X+rOEsEXk>qYmCb@Oqk9 zY!=zd1quFhNo!5x->xIaCz{tgfo=aet+1xHwqzxqtgo*zd&meAJl_?yg#DBoIk@5F zOv_OR9-ayysq~WMq@+-gX?!e=BV841$J?O(hnNB(EL2d4r>%#l|9FyK z8W3iwor~-Hal|Ohb7m|~)!?0mx&n!kd8)9V83QYO$6&zBKV+F`?vp_|c(8zC*pHd% zVbw5jv?vu{`@s`#h8hvUv!oiaS&F)~rBt8%=H~KKcN7?x? znrg90c^V=}$2lQJC)gg1m(~Q8LG+e{rbLS;+Zr0e^xC%@v8O~vL{yszZ;tp}%{*fM znWql}sKO$ObD|kKV>ulP$0I=Ql{O!Qj(`M_Jjq2x$4ZS))!Bnkjyd!op=vnPy5=#S z6{iRMLZAPg#g)?k3+xiUPUT*~Um~v|3~|ufopn=`HgM^P+#sGHk#U#B{tmc=76E~MQ!{KLbvFFMf?w?l1 zZh`Ats`!?z^31!4L))%*JI4Pmpz_D>Sk-BmZu4r)9S!p@rs70+WQhDWF`3x-&sBb_ z1^KTtVcl!&n^`i-x0$hVw}ZB;>v%eA^{Q1L8}F$P4h+0PJ6U+=lkvA0SD~=>Zt*xz3kH#ba5}par#A-WdL2f59nrB2ys z-?uP|(rXN_+HV$*i@pE}5cK$5zT^pig!=ZCxY%Lq#r6fBH9cGVKfEicFVXo3^c&3@PHeb%o{Sg5m=<2X8od-i!0odJgedCUfKGkHWuq9tiEY|M0(O zbL-_d6JW2p76J3aX_a5Ee!$5w+kLO0=+1ZhHeiZS3%s|P=-P%74ByJBo9MSV!5i6P zW>JWC9eLIbo4$i}jO+9-2x+beX|^x^U6J{P%NC7GfQ#y(@?AqM;uE;}u_W`bKP`Bo zc)o9Jo_AUhg@S{n`CnCW5W24J!COXmGR3=t@}!~wp7~ct+&8mTc{~x9&Y$QxEc%1k zzL@opo&UQkfjos5c?zj-#0@xI`l;clfBM|<6sn-2;O)jsCxkDo>fg3U-CAYBb`gIA z`8c-<=tpY#{$H>D^fp%XzsX20E(@*;Yql)=#zaC^OZith0xSd)(&j@)97 zFy6JWZTswJr+^~nCSC!gdgNDUo+OL-_Q??4kMkk=L@QXFOFzpyb3TBmvrt4jAK%9K zX7k2|k|7emQku=w};0!iT%d@;9Jn2ZFABbo$h zW48;ZbF&|RdLEJpw;5z;!bn?4H1IPY%>u!J3oNKwRzQI|6x3F*((3{$n;7I(qQ5)64Bd-b*PimdgYK^s zAh^DqX>_}ZDqEg@3mGtw2Pu)k$LVhHdphaw)|SBdk$4oHR|RmkA{7+(2|(}=im>gN zd;AD5giZT`V^I^>E<0$rLKl!7EggRTn)_r#V-jA|SN z%!A8Lhop_j>uDxs-fZgSrC5G+-BnHvMaS4IoK=2@0 z7!1`-p?t7$WoQ5?fFNn=8G@@kAfWv2tNR4s?g^WQQytUiY-Moo(U<6`Rj$|L7?{7% zZ6>b$2sp?(tDB54&sg+wxH)-?gdj8-`(OV3EVL7~c36Dt6+h(L1vH3x?|HpC!uPQl{K3Sh$~g7l z|GEq0C&-w=bSzRy)+@2e+q10a=>t!|xzju4M%uxEm1D3UDQFNr<|@4*mR9=Bl9jDxmVA)Vbd<%}@=bS7V4^gsOi-;DP^@{f%#+)e2>AN21VcYoWDZqZopf^Q}aADEwCZB;ps(7eD)IHp$XaQL)EHDid1Ih7GN)P+wHf-87wPIT z;ewS|ZyDauj}pIAUQ2^;2Uqb)#5W89Zo_S9y5f#;PNjy$^`sQsI70XxuKCR)5d&SX zompqu7h2t?Ca^+^`=DNyso471&o~Kl=1%kpslvZ`S>?mKaW6j{YvF6pA+3%nA>k2V0uF^|gJhMlI_?x6B(aa;`hao`gNw2l$5;Pqepf$n*PyUOW=_`hrTIq-n^kV$jZu=3Ew-~)Qp+2chYaZ0`o5UJ7zw(p)4Pl zBO@zot>4-Zm9lWbNV;hL15tH^@)Ijp0?KFWzfk8Mp_TUZn3j2t9SAyf0JZJnhSpYS z*UF~KOon8C`x(y4JhKCD!7-Fn8A(*^bVIku%f0b?158tN)le!gI;(iI&YR!iAxzaK zL)K@{YG;|2rOIXSvS04z3yTgke05tH#q~xz%;)xcSUf`w0Qv|_%lu&`fl(qJ^9yA1 zpkPX(c>tzZ)A7QKiX%iDPwJ#Zxz59KDo7O!wCh+v1wUQ)+7`9sCX~iti9lOOHLP;v zckc4``TQ;jqfA?J?2ue!+xr#wn{HoqO*6Typ?h`!DPv(=J}Ii-MxX)j?!7~Q+`%X4B4902ihC--Z|d#sBq{iaxwu~Y9li@3 zA{}{V9XPW~QD;Gpg$tOJ`3&`}GicC9xN(kanoGK~&=2*1!&}^%&>)!SA`o#*-8ej{?lP zK&okB5cSJn7uKvPZ(!OyxDSYTT`}xkU3da%0rIGI^`K3b96sX_u2Y(5$ ze6pX>6Wf9L$SbYcLZH)=udN8#OA-q^Pd+A+ok7z2vT9b zFJpKf2PRrAgoWv82qiYzBGZcW^+!zHr@ZvITE$b?FWEXw;c?F1$xjcwm{F za9JgRnCDUV`!H;Jq@ee?v<9LcnEGoPZg>G`er{`Ff!3+17Vnpm4XZYW(!+EaeG=2ye74v2JMfd+6gn{z2nLl5n*%G^ zcK-gRceMYOF=1cN&82%~6!6vAFJ1ME^P)fZszOx3S&=HEj?3vH>pI|mWT)j)%Mp{q}V{Y6)JB{P0dK6e8 z9MmDL0iNYBD*Oe9^3aS3vvq8+nr|FcLEXkFK?;Lv@9NsLv91yI<~Sbx;yp5Gtqotk z6mnOffA&qpDY0tjQrDYtaZ{N@IYUr7#12YkhK7byCV}jgx~wC))$@7C$M$-#1Hd|J zLJ@{0CMU$Bj|)YFTN>n0jiM|EFuMVe(w#40TYN)59}DCF?#0cUH#^(guTq(IwzkK7 zd`bwPGCm^`wQJ9w6u=*3f=5I9Y|PCM78%!HDMC_+i-h-L*~f>1K*&;grKRc6zwVBY z4i4%-WrRaoJ=AERbXsR~iOCY?khPD`^(0{?qot$6;M!M7?gYDy?49;Wc{U6i^C6W+ zG*G#iw_}B}v+$}PspDbey>kbvH{dwoy3fSz6rgH&knD-;(WSphJmI?h;>8Oa2Z!`Q z8g2$IW#Ad)tBb$=!P&&!73^RAgab@)#ZoLPlG&r@?MuAnE3GLtR=M6^KHXUn^ryf8 zDp9b8>wY0*7RJ$An#VjiVrd+aAIte(|e+z(sye`t#)hc{{IvCP9zN6pSzT zpEnHcd$yAswE>ac1=`z(=f2GNnkvUT^}fIDY_pR63S)-$_CQ``bnM3koTmsyY}mXx z`pmjnbXDhhw{CoV+#AQmx6AhZo}cX2hE?Z3c(A25M_N|4ZTKwvIli3ER>5t(UxSSK zpi1R!N&m%pkM}M`R+l({c1akyBKL1t8q8uAOAOyn3!9syEe%fQR{i>=e5D{Fj3a1Tp3ZtC)Cr>UA=s=L&#}ZWPwX~eTiWFQClvCYcm1}5V z@M?Cp7;Ec_*(kf7>HY>+<@mPGpL4)2l}d@$>L3E>1#V1E%yEyavzq+$<{*HRrPO-- zZ6FWSt*&XAo^oZHvLcoD-k$>8Km{23V~mG-0a)i`vv2DsW&T(A!Y&7eF|@Hs97Gzp zsnUqA8p7eKs&s_?GwVQT(i3qm4h#&?4+ZT2f?SxNyIg73V~xO(5T@LSw}+7YWH-|vrEJXqe|%l>jSqk8Tmy;DY!ZK zgtlSh?QMvDgqB0|TRIbT=2btx#Vd?KU|b<--4K_d&)Hq99pqN~o&!X(#~Pw*&d#ge z)1fEA!r+v6F)#AV7ZArdrx4&RW2|bnL+8)RdN})B{Wo-|&$O5i$9)1Xl?rG$tQvga zj`lVEo!kdaOibi438};4LP^G%bp%@0jCK8R*~qlW;>yh}lH3O|y1LkR#^u#2`%%>} zebEns7igWzjh5EkMG3}GIVeD}`cl{HQsf?^O{BGvApmz{1S+O015Nz_OwDVZ?($^md~ z4jtJ8P#IooB2FAr#YCEe1@-1N$(Sv}{P{c>OmWc$cRkeE10bGV1icR5h=_5A5| zfhdkWIW~uEMV*f2ZZP4s`{tyIFUBM{=LxCZ>(e@Vltgv__o~bw0goSQFwEFPDXy2* z#ugYLMj!4a-Hhm@Mkt4}28F#%6BBNgtX|Z%kCn{dFHjOdOrp@G<>ia*=W&Q;`Lnn1 z7j1U@T?UCQd+6=ps11e@-*%H9@mm0yrbb7Jb84u5idDg%mv+Qz?!d0y$&It>ME3$t zF8aF+>RW=`1jxa7q80_(J+ndz*i+u`8yXt)#L`YqGODL$JE-$(qK!Byp6~tZ@?dbJ zTd->r_pabsLY-S>3M|ms^l-q<@ch1g`0rl__6MG6zQt>YS)i0wRilIh=}*dVlJzeendn)1bYCyEjO zoW}c9%T_&>jN+bVYA?~*k?M^f!W%-FjY{TtjkQRaOB*dPWCR1%a|MJW)mlsfF?EiOK!7-8MslOafBoS*6d5%lBA^eT0OgMM z{Y?Go=Q*NqOGHc9cPhs>?4q*GtFJGraNZ?SRY9uQPvw5crY<&icZ*f*6rj90TR7@M z`m|AIQ9YjKh;D*Inkron{fu-5?oKWdguKT_ibW0MLx^o|)}_!%uX8#>rAk*_^@od(FZZIEPTh+ax?g)T zmRIa7{o&RA5>RA`8ONkc@{h>Jwt{N8^AyFUfFUK9$$_-_Hu7LZ3t#2lVQm2lDBB!S zb=-e!wV3#Li4MR~J5Nu2^v$1B?g`l_izd*5wmXV;!5pEp7LWmlBji`@Kf+&v<$pB| zWJQ`g-;5qg#@mxEf(t(5YT*Wk~Z{diVVf+1GR3PGo!f2C)3P>1_ zAj~yMw_v}7ge*gFrqHQOT(>z*`4@F{wpLb2A3XuFfOOgahp>q{I#FSB8yi(bZ9{#1 zya#-459-*-O&SEjQx>k8m>3Mqhb$dOmW1=0%!s#gq0E;D&`Ryeh08+uU%=@0Pcru&Iuw*ijJCnwK@eO);z55F;CFYE5r3#kdhz9kC)mETc zhl)m>@oY9?@jUgl8s}Z_ZiS!met0#2ns7cKjYfWPX?GbLZE~@GX(b8WzHU-xPLa}x z5FpT&>-EJ$WMgn01|&w?ibRLqB}23Uw@xFE4-eX|vY-C7$>ZiTc*u4sMa5w;$6lPS z*j;NwPNJo{_t!7kaf)7d5eYdvUS@|ed0MU*_L}9o3{>1*9&jpKKmDUClQB6vX}>45 z&u=%#5j2j#6Y$Zlvmal&k_|m?r{jEl|K1YR#t>);00k+H<5&q;>L{{5?&0B)TfyEG zw^RNdst)YE$;W;g@}Eb?*l9KA``el%efjn=$a$~q@BS}-aE{-?!Qm**)gnymm@0L` zw(XA($OQ8(605m+pIan0xb*u%&R<^=LU!?yXDHbGHoo(wej zzYe_74htHDIV1NV`?p>{BXH``?~P364ic)yJbkt1&?V5A?lwCy5Lo?Jf;CD7KQ-Tdj{~lnmq6N?d zAtu@1C3%^G^V>ha`Y)cZ3{0qGP@Vo<#eVGl~TqB!))$UZrQgA!UyRz?P8)|?tWLa#}zs;(BKU_m3P^a&M2taEoiQDm&i zNyosCW2QKcg4Cj09JUY(2$?P#S!gn-wbB}s)6;FdM$#J)bYfhJZt+%!+s2@y!3k_v zFvYOf=;ir=sRj)=i9wXBDsMLQ=Ofp|QALQ)m|M5fJxjq`diAq5IZ5=NQs+}iI0mS0 zL!&VqOb#U+%gD@ZHTFQ?9Gvl96ffr9#YHe*S|Grq`{WMyxAyj)a&62s_R){JhcaYR z&5unAO0E@aWrFl~)FpMETwJUboXdvj%%H+EW@Bl2&+IN*-R+1}tJxVGsI@T)^ee1Y zo>x*g639w+6d*c2Vba@&>vN(Or-7cpim?UEImFKSC)Oqe)I+}#v-R+yL289%)=Uuu zI_6!Y+0Mk2YXldw)&N=jAK{;#cXV}$?lF~*g$O|JlcNhD{b4dl;!t0%WA-$o0=8VQ z{vsp3zyo(KTl#{HG35mkYzs8<0C0sSw4<{@sXVr;fv@@%s0G;#&lyyzgM+6t!uJ56 znPu($lY7B1;uGTsh*er(#hDEDIsGV{?A>$xgFs1m<+Ig$7w&A7b-dPHWl~Wot>NzB z5$)UC-JOA0Pw8y3i5iKWL(1@VX8dr?uO8Q6Tz>WJ*|SVbPPTzu(xmY09gF551$u=B z*EMwp?v%vu7^F_P?zOR58yog6j4gNayBUiNXkudExWs^&K@_+jH}nyuA37-?J4OEu zOdw9~!_~D&p>XzKC=6QjVyy5by3~dfmq!0y*(5C^DS2$w5v(q_HeiX^F?x!ED`y*n zY(ZRP*Nvkh>$smg^AeIv;4G~bGaj^R?#F<7zjsgYo({TeK31yc5Dq2p{w=*NL$^^j z-&Kb;M;eKk*-Q!T`-sJoemywl(oJ6Q<4CWlHEzb4BTIivar4gcRLlgwU$K+MHxpiG zB?FcpaT!V0UE4H9fb7nl+Rm4=)G+1jipn)NH#g5F!xL{??emZA-nDBN&ifqEG>eHN z34@>DQwJZpI_tceGSE)W`=a;~N|Xx~@U85fR*`T&SR3essfOT61hWtRlhsGov4hW9U3Lik*|p6isM1WZ zHzPe=l|Xrs%r`n=$naZs6hsYF;n+5r8pj^qf`RG5BJgBrGJIw}-$Sw?*#b*Ty2D-eIdLxG0{iGPMo$9t6)-LJd?RSc z2wUTPb5FKYB zE4`Bo<*f!~8No?x54QEEB(0~iPp^Hu*p$%U3VySB_(RD5(J4|G2_cvaicynPi&R;Q zskEI&2-=lWjEO}Ph@em?}sm+>; zh1xMBzANvJU;Ju~zkIf3$8SG-)*+(p*;5x!~Y$`KPszPtMhL_ESB$((H3 zsC{5Xi<5X|m!3txrPPGoxO%`fYAeVvQm{6-b|9Nm-mjXvmzC9UQ`y1Ovv6<<>ry}* z)@+OOq z7>U~nhaaKaVamd729Ot-?O{#Zo0%P;qpuSvH)9uNM@9H^x~5l|gWbr@&80I2XOZt% z)&^JiZP>KwBs}#PvbH#sa%Jukk_&a4Nrhj z4)-Rrr3(;SywAKj_6*)64$uE`9k9bm@Zov+Tf6{UTl~IZ7+b9?C778CrJwjN0bfu9 zgio9@kj@Y+8(Y2k$f3M`eTsf-SJy2oD=WMQfjX)ccj8uy`)1d zITr6|zXY>l-&t+Ke{T~mG3g>Gb)$K3FcokMFAFi6%7noL#X|AE%BNb)H8eF-LGb@) z{&Y+p{y8vT!QfRZrHV^RT5#5b#LLf@k=Vp!lzBpAGSwkNi%j}Amd(bSB21GPd1T>}kv^S;S;lZ-NdM!_XZ z1F(SK#DubN#b5{a;^aNCIEG`QppJ(`rp-bg(oJY%2kGo4A7?lDuvuU(o6A`7hyDO{ zfHpcYyzFbkHMx~=pyvXM-3I9BOy4r{aOT5CB)TBAdU|>e{tZ?KKdxdkrRM?x&~e{^ zdr#on+M1^0Tw=9Juq^ zZ?~l69Zb2j(ie_>{ZB6dM>u%&kWE}YI(!J)8Ve5*xpZi?~#+c)Xd9-zp&KnsSLASD{ty{J-=un|YucV^Z zMigzyD*VZh9!DAg${lBLxA@s-V0*#oovN3x0$6{e2yJp=Vy6gl?$=idh~Sz7UY-Cp zmsSYohf7~%L&$CgZs}vd(Tba#XzS>So{9@SZuKrsZw^i>hw>ur_Kap9c;8>Gvs#|+ z0D^+*KKSxZkq4MPqSryXcsZ>7QUJ0OSRN4gwzTb}&os=o&@OThcF2y3`F>UBIg zR9;^s@AusDN2oSSCQ7U76U=lxj<85iMBn7^H3mz=^e=Ha^_1Guevb1Hj+%el^W@U- zrOo~?VNi#&`6eHfrbkQ8lY?UOIh?XMz{;UT;*QvQ&JeoaHU`Lo$Wy|Ve7sPriab&+XA!8Ci>zK9~iJjMBN@yvz?d69+568(XtzI<0OvPgSbIHBIcya>zXp>Q@Hvw z{qa5l65`^hO3)4N=ZKD&fC?^zLn3e#i?kg{BRL)EDDnHimw+Re9W%_ULr-KZ#!fnN zMA%gKsG~weI|96yl}$#N0SL+JAr*%UUuW*xd-U(dUxy_oYn}POGDo~ERopz{+k%F{ zTb(kqp~Ilw5y$8RU?PA#UfA|nO?wNAM4OwsBJWMU2RM#C<)5N&%AYwj((jD8dA9+~ z;gDY|5N}aY(d9X)Li6Yeh8TgXgglF?J+Pri948*+p`oE6#AjXc=<&>a!`gPoz0)Vb zH}+MBfoL_IE;Dsv4wtGJkCt6m6_A#cd}Gqa%qoZZ8D%#5DZ0-~0;$YaG%76P@tE#n zIGGznp>3|taX#6>qT{UbJaiDnUj$2-)wu>+5$8V$L?RJT{9s!a#$Ckzz}2NE0t3OY zJyaF4ahXCGTXgx0zFR4nk>;jEE$Hnpt@Vo=nd<6Xcrk~Gd?G>@G~*P7ZHJV_3N*^v z&g{O~!cndaRwOW^peh6%x|?Lb2dWUpVIcnmgvV7$D+blV>P#lu$Mq9l9ECn?t zsfCOFOsjsG9HsLgqo(Ir45CV0}#Sw@Hiz-FeuFYB{ zAx>e=FU}tw?}@PBkL}{Bd1&%%1gl&LvL=rv?S(%yMivgfc9OiN7Su?rgbMvN`9Q}&yTMH#z z75!$LeL{_*?ggOudYlSg0G zGFAu^Fw{QTLJ*SG&@H6s!rp0mv*u4P!Y;>FBU~u!L7@&^cj@KsQU30UU#?7~8tf&B z!_0i9f)3<*pz9W{&3ZrXMY+N^8fHpc-SUuR#0solSFpnZZc_QJ61BN(4L!J z`JG}Qw= z&iU2rxu9wUhT$^r$y5hs;nEehLmkIP%l9C4-D+#Us@qYL)jy4{gsTMqURI%vzKC`F zmbHQg8^&^Q{>jaWm>b!7GxfbI*6TD1+tm~N?<4M8B#@&s3v7w z3B*TeHHgj5+pjp5jDa6S!YCO>_$^W{s<^4QNfN>d%iTglON#_pK|WQe(&U*t>M^-P zKfedQmJGZ`A0}L*m&Y*jHp*=Zeplv3zc+HB$PuLX>@ir?k8HS&u@^qC%Fo@JV@~Ds z46}6P8FWTwib~h!xmSM=6~F3Axxr{FzxmQ#K^qBAyAXHNRD%lqtoTfpDWFE3%7$>xuWbe!8(OB9ySj2 zoh9+7sAvxz=9tsH9FCm0dOSTn+XApeWg;7BbkzssI^^m>>JZNQ&|U5C!-X%%Y| zHmJd1D)je;rgp-8;?cxJp1^7izdxvDKeA{ayWs08IuHN13o=v@Ls0dJ`tJJ zL_r58rIx0q<0H*emOhGbXqHsq*w2km&4mPLc^io-WGL>as(nk9utDuKm1vGB94oZZC$Cjl6sO+`?kC`SpxWQxL2l_`ta*# zb&`>SAWoWl0H`!fLj)vNLRxt|>UMUdcs@PfT-dM4AD>LffV{|Hk?1eRrlwO#ajDJD zJ+Oz2O;_SJlU}oG%$Y6zYk5*fL^@cm{<2uDxbwK}iPWw|h8)C&Xwf;~v?~nCH@jzo zMaW&1g@vO2g^#cJy9=EYJ_u_z4dg*mE&X9H1pxB_JJkqX=Mj6Qdm(bDy-OJA$HC!+ zPi`^PL8#lyf}Cw^p84GLlW=M&ae7kBmsc_dg`HW-R1j@zZ55!p$Fw#seM_7D3Xsra z?U<~6PxC>ni2Ic6^C?f-L*Y~PfQo`tlO6e?PuhnhX`S|E)6>)HB8yYGc`_qf_gogx zi&?#MaA(@8p()xN@wDbJF)y>Fx#mNap}qBo{WeeCyKPGH!v(UaKoiHFxcgkP6Kmit zh?u!O6wq%pp#XfOE;4e?38U<3w9%CBJqilDtu4f+o9ZV6H%xZfz8h~wBwm{35>x=@ zKy8-)AICKFX$!2y1t-eArB5z?F_F8^NV6z!n6VQHk#k{%BgcKQaptW*!*ydpu(x^U z`)Q}FrhN;roAkK(1M;J+ayPkn+81P?fXSKJ8Q9;BnVIoY^7{PLXWRqU-#4-1gawp= z7>C3tB_$?I zBA&Yyb|qz1gz)__g0DJ7_{Qtj6B*U*H5uiG(<~G!fK|bn3=5Z9@(HDEv}cd$J?EIH zV%)~MJR%AH!(MAHsc9ha;a|N!vyL+z+V1yjCd4O0cI|o6&un}1cXgkS+Ut=P)A;Zu z^CjA0^UD2cr1AEOphK_xt~T_S2|p%%rok_w_`};?v8b!O`%v)EPXEPJ=Qda8WHm^I z+b^+`nXBxy`JKB8fn=6z6RAHSBf*SJD8}$e#VY%Gw}mE;IK3O~uX8WBHScEDI!pU> zrbA1S@K|=8qd0-xHy`Xg6}&hdu;^jY!=oHL>G>R>YCiMJboru~ZJPMaJ!CsoU!j$IH|34o+I>|1R&Ti-P9%~G zIcdnL6t)JU>Lu{|+gzNI-XvAm<*-u7J& z&^2AHKcM%D*4}wHElb{a7y24|`Z|dy4g39|Hl@h}OBJ-&qR#J43^zh6;HD^~u!Sm`GCm{Nq0;_(b`@@w;7JDA|N z{IKhXT42~R+X`caHWQa2xBk2{jc>j#oERr0D~)zC@C;g<5a+_y_us)*^(z}hav{Ya zjti6=IytfKY{D^U3r|_&$!ZWzc9ql;LcH#U{lB}~Rly4?x{k+sM{8YTwSHPc@2*ez z9c)Kf%4NBMLLm0{oP+P@_(89^Pegq{fDi40$&lT5 z%3uCU9W7_>k-5;znwDRE@$u_SW>S+apcmNxq2c%I*h~fz5X;;SrAj$DxsM^n7=+j9 z&cqHYbMETxEl=)~Hq5VVPk3chso!0Ybv&gxb21+uHkRB*XOnVuAXXHdqj__S>>{ET z@^YSZbIp%>ZW5|F2m}3= z(B~X^{@1UiXu9z*X`6HJs08NfQW9eM#fW55n*)Ik^9*W$2ZMuE={QQK6upV1CCU=) zA-q?K4mms6hM_`-OP_&fU_6F12%~z{jA4aOAHCP*j*J8F0 zEN|MC`Y-^N*?W^GSr5C>iMC8<1>S;f4m3tULgtWNmp-v)`kk!3A74hwXWC|zm6bDr zm+5^tUFsSd?BTy828g9;hOCTv`E-VDAScWWPS2IutID^(63s;Rxam3Yd?#6wB+nIa zIzJa08cL^jg^P@iI~U};^Yl$;on%IcJwAQa0({k{uN>de@@kk1GvL^V9CVq*uZ-3>ucP&`M44iVk+#VBnSH} zl!u`%V0cJ?`X8e{la%y~M4mB-!hJ90iSwSAm_P_X86vEMH8<_v!wGSC3}`6XP7z+F zD70fIs)P1)~;Eme@0Q;1dh9D z-(bVh3>CTHZ?|XAtFxykQ&&W=NxDopji>R%9v!8EhN+dtmJ{$gy+nu?vFhd#py#CvPe6P2V)t0hD!;Ee)fkK2Wk zB@^HR6jSWu;JUs;on_p|5aIWj-P)+2pP--$7#nM zxQ^^$-U7vw?z5PZB8)R}V7y^3iTTh#FDCr(x|5~kqu*s+QL0gU&G?pFbu5jp6i8}2?X+93D>p?))Q#rkX1kSN~_}#HU5bEJHOB+ls-dU<76i zTL(MGANV`biY_^j@;=cF5`4MxYs58eCd+q7SJl(PBa9b=;B0zkRFA zAlHQd@01Gi|DQZjfYm}JWxsHqY#Ml_o`0+V*f>fIL2$_`uobr>s|YTGTEqMPhuXPd z0UR1AA|Y$)(eEpHE=|G!M5b?o!$awFE1Y5|5)_~SZNiJ(2A0N7L}Eh-QffUAwxD@A z@+hdPbgyF{5qZ!G@tO0jyK><7^6lH~294`Er5buFaJ^BPJ|YL{P}HNMqlpO`MiT5Z zgD6B67y?QC#_>H^y9g?#>qp(Re1y%Dk*fjuuvjP~Y}mVKOotxmKl6Sq#mGGyX$8`7 z@Ax9@wv&2#s4oC^e%`7MD*gHM%dKr~q>=&NAMo-}R3O|snOt}Imk0srggD?iRBV(b z%1fZeuHmz1OB%&q<5u02zrcK>y&$xivZNtlAO%#BCE1=dIqly+e|+FeZEY=R=O)OA z9;Sfkn8amMj>e4`1-E7-0KkEji!9>qb-SSaE*a=rkmOTM0~Bh*s{5c~g~Q+X-UYON zlI>`bAJ!gBD3_Jf+~%Wl$M-;lAT@AGO4g|z4N68M#V{HZxhHc;!KSosEuHt)H*I6& zX~X(0?Oi@7o=(WLJ|@<1a=Lhr&y>Tf8P>GHJI6jo$(eQN3AV#-nk`2Bh+uj$y;eo3 z4e{XI#RF`MS=ETD@A!uhm|g`?^7il4zt`tOFw(8=ZPxs!G|<>u{5ylXHWGu3FQ&$x z>h&ED0qrH=Er^ zY(GG0c|qGf0R&Bm66nAd86ruFYar}GNofxLv{_q`@0N4!WM*h!MaS zgQKH8$N5kz3G22G)rLu{nRLUT;k)&(!GzZhoy)8$3lKp|L3DvR@A1`TqmMC`US7mG})~PiRcV83sawBYT>**j1rke7dv-yvlP=z z%9;36NKdos3)+%>#E4T7)T6scls$*;NM&^3T1Ij=8yJf*M zw+sgiYM4yoDGDsf>GsiGZ?OY0<1m)yv&kWVQ5G9 zBkmue)*0deO2C|?W2KV!#QnF~7%lI>6gMn+lCc?URv;c0!|T^S4cg94uI2v8gYUie zK;fu+(R};pDcMz9)E_sebm^ThODS0(St>WO-Jd3T z?aO36z>O#cXJ0|wVa#m0@c4A2-ak5?3kB8<73AmN(@2b2*#*}o^Wk?$i{NF80xCgI ztoLs6yZpnqQpGYXh5Be{t-p`T$Nqwc-d<4+;tE%Ga-=Z@xfyH-JF_V%%!ZpQ*-VFj_~{?4*{_S~3=Y}Wj1 z9eb(V{Tm|CG{(p2y~R|tF}Q8MK)ItfbhNks9gi{27%Tky=FOY6 z<(CrHjn|kQe&PHcve=%MTHejOLa4MAbM3fVI*gzWN80r9``I$_+0Pt?+}yR&6K0&O zm421UByP9LPx14b69~RvuSG`QGY+kNbC&3P^hETjp;lX2TW1uc<0`~VZ2&)k3G?s@ zqTfZHKSrpda+7#2dwSw%MNzOl;5R6Au;b+;?Z`(3Qo!nu7)@>p+cuK37X?MF8%GAB zwntcq?T;$F6`I!~{=t+NXQif5)uTuIPS)y8CKxOv&U>B*B;K4OV1Jr)G2Zs(0Tsww14G_E0r)fm5%7&sXBR_VUGImoQJ>6 zL7ixtGS6zWpQk=J{9WF3s{vk>L)KE$qoE{j#vOh)%e@o05ALonOJNWO#6{7PmHdTR8|plk5SjbHJ482yP?ve1+@xc~b5tgI~SbS<;87Xq5r*4EDj zwC}v{^!M2sy^aP*^}{4sG-|^h-!Er7<#x|ybPM=xeJ5X!)@o|rOr9cRbBVe18#{S7 zZmcbib>Z85T#}o=k9BitYS{)OSEYv1X^1e%8r(NulrN+GBFR}-Pc{L5`ksEF5&Ql5 zeT{A6v=>1x*lP7gVJO`8fZVaSLd{9q+bzo6m6epJe(SG> z76pyN=WD595i?nH?UB@tpmdM@%2Zh4GXQ9a8B`)IDi?VU#zUb4^!?0CO~(SGOFVpy zs7KFnMIN4$7gw4#;-0t?`oA#UK-L|KV*Y!UUKZx@*s)V8T0-;kr!%WY90wiY_BR);N?NR3dE=b;0&(7#)Hp% z>2{oQ!1dW99#aZ&Q{%IL71RFLE8{*06$^vcYkXMe&`yog2tSMM$jYmvhk2>L(>B)> z;fkFTFg3h432hqiwceJot3$(xG`l`0Bg~C$g+migs_o!T;AlY);bV{uQ0GKynIXGh zFlh+xpO3lSQ|G_8vVF()%`;Po2kFXXdTq}xVJIuu8947zLU;!!EWo}!ST3+AFpRYp z&GBjdwZUlo*nLmY=0f7zTlK3C=WtdKTgN))rTuNXQoy2DJ|HSd&DeROoR(bAU= z=IvcKD~B6cF~)OE0Ah(5L6Z*Ae>20BhtA5u_?U&F;BF-SV2k0MF*AE2UyYj|W!3d7 zd68qiiwk->Q`3&h)3LvNi<)etx;(hZ=@DGNg+o#}HhWg~fTs4g-{VY|itOm=_WYh=-Wjta|!BqGq=xt;RE6c%Y1!3o3d zT1&cx(i-2H;Th52(kxrQaefrTpug0M?SflYlmb;mgBgWP3VZ}T5r9gGd0Kh1)vd%U z+g!D7gelKHo9zhaKazf3Q`S}y0r;~%N`MkGrqm~+=0Up-&=WJ()k}}fqeX}aI?um% zS?yaMb70K7>|_AyA=Q0Gq4r}>fi8t=+}hSYq>Mf!Xg6_Vx4~yvfhf%A*E=L6^w484 zF=I^9B%o`@2hRu0Y#BY^Ky=}aU^g$ZZNU4@U-7>$Q*gzbmq`8-Gh{O*j0;bfNY`Q! zAM9?FDqPNYoEjNkFYp-tL_R$4{Md(g=mbinkyk{06)~>B{O@Ftxg>eI0R+C!QvBrUQ%uff_ODjPQns2A&b{Gk~{=Ke{%O=3s=@TFAUlE@c^e zmGxW*&X_3#$$|BS2sqLk&FS_G%i{KtUBXW}ain%})B_~ezA-PwO=M3a%wv;5*r89* zsEcRi9AbxDikiE+&?Pg5YAMIdgH9|TZ#q3hY-`3Fl5wVedi|KHE{!>vgfxVSJw==} z$dFm8j9w_XQ5eC@CwKOdNX39#YEe-~=WpGih;*170la~N!Swm1U5*9F^b5-BOmS90 zm)*k~dTnF{_fMoswPL64$&-wXU?3JUE)uVGjb7M2Vh*}8kBS)$kidt2#p&7zNwfv($HBpz&br~S5BW}Ag=YkP zhF6&xlOmO-F2Axh%udkg5%t1thngSp?`T0E=bPweV_4`HLj<`X7SdO;a_VV#u zf-y4<_72x<{nvU=C`NruQ~REh@?W2><(p3VH?t)}e`gMnRs( zxX_pL-!E|pcz9FFgYh110g&ZP9>s}yV``yJu&}X4=%?I}rbDzb6s1^I9yb$hCp{g& z*-e7Cpf;e!q`ugxL~wY;jIT2ME;cBc0Q5bn7#$gjNSBhDs)m;14?_C!I+rb9Zf|F& z275m4RjcyK4u-lJH%2GhVmTE1IB_gsdXEORQQR{Q1P|dJJ~Ew)_k=-;rG{_N#zGV# z519ODwBLrc$6t@!=Vu$qd5@3FqokoWBkDVnjr3T5D+>NmQcmu=bC5CxX|y)GPaW=@ z=z%&s=3H3?ftL8f1Z^JCwg=Y%Zqh=yXOe+potPK50kA;NMKqx|<95093gXeP{T_e& zwF^K0bzl~54D@x%hzG#NdqYv`juk=rd+l-1HS{yHQVE;=<3SD$u8kTBRZOgT?L*M84xH&H6X?`Q5*>&vF0X{9s^_ YOBFS4pG|IECNG(CSo2WkfzucMAI9d?W&i*H literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png b/assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9815bb08e949f71a8ae32b772e600f24473a32 GIT binary patch literal 66545 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

  • 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

    9Cc{z(n$lD^%LlNnJBeGJI2? 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

    Hq13(;Pb8auH{F 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 z zoEGCGwqwlfUHc4oa^DA-s&+i~=2)9$l2l(gMd_5}n&jS-|9#c%J#-wZV9B)cf*%Sa z;M5s(5MBVG`g+Mygmobxh!jRgBJBrI(*S6##m3#o%TANI{B{;x;2`d}m2IDF4Rk^t z4i5*a9u*aPdB0lPg)pQb?`g7N5z~fZ&SjjGKfzy~N#w4a2Au$jZ%Oi;saOd`4=#{-Fa_WrLwn5995NamN%Hr4K%Y<&&JF>!cxssTk!Tpceq+*P$JTIsI4^WHZ)E6*&FLx69l`a_|H zE!TmjLCftX7GNO0vrqp}SnGgt3A3PD_CgU|N&$iKxR)mjb|fJd1W7VtAIa~IW5K6s z%WOerZR}dr=Zk!Vr6+nQ24ZfD>G3BD{U$#Yls!_gV578cH@cXlMh5KwU4#3UpGqGi z8LbP6sc(eR9}4pH9|~9gt;PKrIaea{m)}MAA$TG72HmP#S;URUZB6!s8%wSR*Vwe6 z2jILS^|T}kMsSRG!8ltnsVc?b?Am=^`jwo{)n64L8dheFlSV;3Z1gWIq9UgKP{<9# zikGrPa{wMskZyu_cI^-vHh^Y@o>Kh&2>Ms|?h4v+XVMVUAjxy!IWAG(G#bdu&|R`f zc^)MS)D_9JCaMM#=C;&Qx3Uty;4FyGtRGIyYjg?-OZ+`ths$^SxzjC1kN!frF?Qnj z*SGLfK7=leOb2klwx36uK3jlH&zoVNhT;#eu2Zv+nDAvt(XL@Y18=~4-qG8hx?T8vYZr~v;Dh`0p=Nj zoCaier4#0kpBG72q0Ou+Cz+a)BoT(D2c#xsE8wd8TGOLyJO^i}Jwd#gc&jyxmo@QT z$W8GQueh;~#@LmgcZ6VQ_>8NM1G8h>Y2eXeCKgx;b5REN4L=mTKx|+qQ|Xh~gLUyk zyXstN(ew`TPl`gd7i zc%4d5%4EM3jgEGPgqI>|?x3i~XiP>|f-hZKD9>f_GFX+2tfrZm>eC2-QY8BHg+ZzK zjbTxyW9)XkhRi33v_&cBkM#46F}#LlUr0vaJA)iLQ}8X>QEgpqU2o|EBB7P4H~2&0 z)a1m#lcQIk950+W8^a8AzMFrb-a~xXBmElDfADtF-HE|lPXA&T-a%934)(~sX3mIgk0`%M|YVy5OS2%vh6Yuil1G+(Z2IiIb z?5iqQB^vCg*_Pg8__@mNyVLBm0y~Uw_toREJ3|A?N;U=N?z~#Ebj;JfI)B;v;<0C) zE^4j-6P6}h*C{ELzrdAq`IwgEzbNb3c)xzD9Y||8pBA?e{Cc&kc9=9LpqTxIh*b(J zA|G#QHE(O2y*`WZx1B=^@t3g3W`pV1uz?iUM%(!DheBK$l0y9OUY^!!iXCRH3Jq#& znXZ8GxxbHX`|6&zayNh#J`Kncm$~lXr|jer2_-=U-{@B|FdppJ7gZ z-)>@5cs2c;UTo*N_vbUs8??UUjOQP2s3mlgLwLA^Mt$=Gf6{kc_qIJZzp=bnD}ut+C2{1+7!mDMR1YpN=%s*j08j0_v*r=b4H2BJ>MDpOt*4la-%M+*K+xna?SShHnz=W zSHHKd*j1zCt!(dvdwupP{~_OGLtkm?llvEU^d~(zT(0?r{}+BCC>mP z1yJ-p3#ClSgG*(1{u|@Z(NKKRe~;oX<_3@*2ak&UDM}ocR{S(GPb^+c)0iN+Z_V9ahT(={VU!=6Os7^?C5#$99^r`|!=Oryhn%?qx#^{Bts3cj>u5%r@9){Cn%<=ax8^rD2c598b2`_L=DTovTagaOk}f zJZE`a^7|3fYZ@9~y}Z3n9NKD2BB`bSb!h7r)kPMrAH!v9g_2^Lqyyal8MKY2HRmwu za9Vr;vG;{LI@p}QUDgKHrKL5loQ%k7#%cs*T@CoX^U@PRu4|JsxzfpBmZ;y$7+LwH zEOeySudn4Y@Jickv z>|D=`?ZDl^aH>{XdzSaE^o6&dERQ#LSl2i9wsKM!WvVxzdk66e5U&&v4>ox*i6(5( zfb_R5i(3QpcEhyj#(lD1-Gry?*}IIT_&DmKfqN=YACS){U=ZK4faaIJ6apj`nQpRl z^Y9d*0uW8^NKYaA57$TIhbsj~pTJJuj9%5@&|Cw+Ap(7_fUlp;7MQ;uW+(gcS?ekL z;F-8kgPQszrN}g_mrZyOdH!0)1Q>5Zfc;t10{~y&0%)*&TH-=VYK1{OZU<5#ri@39Mo*St@g2H)gPXtf3wz^a5eo+RlGa`&Dd1Mm-R6s^WcoK!_d2L zsM3C^QH=;3l%);wDs+h(LM5n?=^lulfV5s__O5)!)v>-G-AUQuM%^yk*C)b#Z0IX5 zFX@*NdGd893{Evx_ZG)Vf`}L1-ZK$AR}|*}8qW!|zmFUuxg{_Eq2LpBQ8GILsR2$& zxNtn0SQK=ja0sFCk2a8iXspLb%$Bhq3Pf^g3rj_2NpU$)%!u00|Jc%HRQArZXlB90 z6=6V4t62doqMEsU}i=_yr@Q8LMrCqpD8MoBx#=8R^ia zcgSjQjo7P=AvAWdx=D;&oIK@V?*o{U9ttumU?EcR{vYJoEM6+Mnp(fO!>U&7^U8%= znR?S#|MPRHkBl-DKQxqWR=0NQ(b#)GVQ}J;crV=cMG+Xam^|I#WfN^&U)e!M| zY$F*i+r+4@uJ7Mcm$~q^`y>mEW%1@ooZw!J5}<`w6lXmSaMk4Gv4jK;sYB~b;GXK5 zLXN*jSa&lkHsaR8@!*#+$HlA1wjdqEfXDAwBv5s0$ueB z+nrZea#R1sRf*hcVzUDJDd;N(Rce!ZQLf12Al^M111mC+9t`A!$6M_oTLE7jPtg

    S6cxVIst6!MHJ(HnWJA}puK5Ec==}zKAALQaUd+m(e7xCcxi<1;FH2BjZ$4OU=3B$>r?AgxiNzr1?B%8aDX%==}weh3-<(?~E{mb{{Ura`0uiC1q z*ezADTfL|Kj?L<06>Vy#A0HE@8ZS~cKBTU4=-eswLkg?X!R6D@Rh{6tyr&MaUbxi1D^{EIBn4mhOa8bpF2ATV$fuP(y~4*uHPv7=XJ&x;~C)Mj)1^`j#r zN6yts&!r47;q#m^n`LdxcU`K-Sb}Zn9fROMt#Wjz#v8Pv>o+M_LMOf zN!;=oS`BYY!pe^hJ&!+m=NSlg;=@whNAIbq)z|;=H0fdH<%?hwuiW~F!qSYSFseS( z)QV?R*Ge}6NpE~0JwbQPz!zg&0<@NiFQhC%pr-)~10C^VIB5uife&m@oQ2PDJtJKgmnGlJMEF*FhWgq4S<@*q<~RP12k3URp}v zu!Q>BYUO|lb``l#kkvw4dwzn$7VRw^a*}wt2s+x#9Y(xIWb2bYZJ4fdJZRUTL0CJ@ z91VA??U&&nPnZ)~e?mk! zMk_wX!l#HipS>&V8{xB7Y}`W}4==(Hnt@u#uyhYum2?Ywp(x7nDRB?rs#ehxvpc2- z1YRcxo0|=1G{^_rtk#LmTDdDmrXrF?QjUMYEuKUb#n<7v%J(@Ac*Kc$WX$P7=xqf& zh#C-sa8Var4`!lEH_0~1pINQ52`~B#sTxP#XIk?u?OU^1H<%EAWOx>*L)LS?Ylq>` zT2Q@;hM1EBnPX$vwV#~|k<_*_eOa>peqc5!4%N2VxH@@D?iP2ILf1d+HI_CmIi(q zwKOa-0en;ApmtDc4h}hi8d(#AqBIHshBpuic@^D#jA8EEk!0cJ^V=fX zSMou0_0Mq;(Txb5-<~7voWc#4zFHV7Dr|e27HhQ^X)CoA>$Z(EQYS49&XCq1imfz^ z$OIaT%68N4=pqqA({01T6b{eHlfiO5qdj*Of%{l0kw>FA*>?FeRQEh(JCY{Ea{4+T zl~CH^_vDP`v7PDc<_yX%#DrJx80_fT6fvJ5GyWRn!HO{{Ox$JS@Q8DbRx;}Fi}biP zNxrS;(6awWndXY(o8S>tL9cI7UxU;(yaJkhfaDVX1`Nt9R4JVc+yC6MX`%p_#T$#} z%!tCp<3g*LCzQSYa}Aqu6eYN`dC*%S#A5U(<*r;Rh679 zG-xJlljyG<-yqxmfMba!)e z_b7B3yykMP$CeZnL{j_Bvq{TVb*ul=-R~5UQm}Gc!BKt6(gEQsfuVSdx*Jhy_1-bi zs2s>)JbNGpZ-x~=p(#ATaY66bF5(3E_9odBw6~N<7-kJ?C{iX?+P>uuv z@b4|+wrW<4Lwyax=3!P*PKj+h;(QxZ^lD*IRx3`8+;OPNac@y?Rb;uwd`l*AeUCQ> zGn)il=#|EufFBR?Q574>dNC$xwQ?yE)I?irrLH$(v&&Qj%vub0J-UUm2ljZ{9Uf`e ztr=}$$o~uXai5JE=dSAu503jVqk;J=wl)miM}U7blNI}+tCRqk^est#goz_ej}V0V z;DjuJ-du)w4_T7)pMd0pL-Xt+w1@`VV!j^q;0z{bJIiy?jr>jI5aBYAks-M*BfiRcJt)*~+L({&DpMs^*0{IfK? z7xfy{rfbKhgr#YXeKtQM7~_x5XdHN$ZFg*F2?FXWF_{ogz`~O41d6FFP^x*3YxSfl zj*?A3eFNxJwn&L*86c85DJDH~zaq1So%tOJRe~&CEhfxp%5Xr^1mzkM{91Q%x)OJJ z06W`qFj0VEpax(c?Sgn5Xe0z(mBt&w`_nbaopy47!t~>=cX&!bNCH;tsHU5^B+Y8a zn0B$$F2O<*p44$Z#9~{Rg;9gsI#MW(f^KEE$*h&T#&k)lvGtiF-}KOx_oVy4grKG) zU?Ub0Dh;OR#Ou5V!aAWetoCxcID|0Bi1MCqrEY^Wlh;&=Z3J^&+ypC5-FtMq*z6Y5 zOmH{NE9(^c&iqq>Zjoi*30)g>IAVFsBeJV?58y|a?`$~?kH^iXm>qg&Y`JsL&d|!%4zAgKyS>uFXJoP^cux$GNiT$*kvaZ|J=eHMAr}Ks61$^zo)|bwodH8 zR|L{z=!zv$B0?qFoncd#$gaT+`GYbQpk7he&|U$vg^Ddxxwe~FT9*s-%QJI@fT|tw z@zecktF3TWVpVBSPGpWJ890Br;n|uBe-`IB>n?zUYf65F4ch34{-4~cqeUg|)?%#W zG*SW26JT1RYIDSQ#=&ta}J*V z_SEq@Z)U^i?3DNfCjPfKpPGYGT$|@LH6zmEX1@5!L+Ibug1v}qG)Ll_u<&Vm3Vv}x zy%MiG6>NK#n)1Nx@H=`;)C9o`xR}63Oh09o_`I0LXKBdns>1GV*cRozM`!C1cYI&t z4g5XsPp+{Nqa145Z-pgCO8n*b>7lRjS7@oa>l@fvZ8a;40wuIcZp)6{mwPvf2ijwz zB#*;zSaQv&80Y5*sU)y2Y%u0hoo<5wlp*d{jjpp1<&^}cALNe-bl-pl>j8e04)ipryAXm9lUN05QFd#ssky?%KtY&c zc3WLuJ=_c~GtO}*&&^(Fsmpa3VD1i6`rhXN%sNgm6UWrKF4TWMpwZcqw+Wv8-Kz`j zRBxBrAmKb*GF4IR)Phg)UJZA&;^V1iJ#>qMLd;Tf_mMuC9iOz$KjIek+^2ixpR>yw z25FCn&u=qp3R#+1d&X92i{5s{53DBX3~&RmOEywFKhFI`10ZPwx@ zl~s+5U{?g7ctAe43~%ZZ98A%6N{_6!T>j1d(m+_0q2qp~NW;<*Bde8Lju~}-m!pGN zIFKb%icV-N{v8S!51KK`Hsgj9p)0^bY>J&`}>= zTKsHhmvuJZ;xQ?#+;sV(CcW+_({D$5-WqGWx1=^&Bcv4TBsU{8i4KF8C{M+>VZ6a0h$JMD^_EXoj^$qKNJbBliQ9* z-1>jq|9S~y{h5=oW$ zm2Kj(j}5fHfUB6sen0FdQU}ghNdjn;10%dT^bf=DEO0f?p^qzRRj%M-hJiVCB}IQ; z@_jLQ-3lf9WmmH&hb+W+t^fNq+E#Gh&;lq zk*$#5r*5z-#ow^lVAMRSU!21uE$#^0mX}=^5i&YTt`X?gewxb4CNjo~1khSfK!A$Y zF`V~AF$d%?Oh}2eYHl-jsN=ABWyUL7r9q1_z8&5B&R7&2U_=udwEJgx*a)K5j1G2% zkuVg)D%h4Ax2^vSNbP%N(6i282Q#g<)JnrA=4BfarHc?kGgpC%`{|gOB))$Mk|uU) zuj4imqO;!?*ICX>fd1l=mLjuM3tN87>X1oulkt?s&F?20*Rr)1K5-U;aB-PaK|Z9y z$rs*1H?R+|mGQC-zS3Zd9lVAnU~%*$e;_!iDN^EE^`bF`pO^J82(N8n|IjYXk7Tjn zmtvBunXU)@C(cE4v3(?Fzi#R=J;CIMziiKorQqCljK zx*i>ZhB8CEgIH^1mPM0jQEtTRft$>B(v7a z%jMB@&VTOHQEaW#OtLU}JYt&9b4u_Cz2;avLS`MWcrGTygQ3jr-LCO&Jy&LAdmls3 zanl#1p0aK7I-m>^!(xz{48K1^v6PE&3N2y!3hray2R6m9Os}&9DR?!uBkee|-&jh} zAnUbeM$ltr_CbD8*8?=li@dZC*4LZX)aJ;f;3Ry*4B50`m*WF5AX}?ux6s$vJet5W zj>Ze{iZX)N?zeCI95RHOEi03q`2L5Zn&&GW3hjj->`4ZJ@lPV4-_?oW!GWe8e!x-&Vt}q(af)!l0)k4mroeQ5 zc(O0by)Ea1s6OVfRSks1lU&mx-qC}59keX6STThW-h{m z4MObj{`N*w_LhE`jRuV$lhEq}P#ND#o4Li!#nv4$zG^Jj!M}zl?MG3c7UB`zYr?SMz5p z3;-iKbhY*dJOX1D~&?=dyI5P*PwTrDcx?VF7^^y0tb7nn4USE~?GZd>c zzbMt8%^v&}BWZt>v>k}*{I~y}L2b0JJ3(c$P3{MDA=xJHT=9bL@9Gps5FnwIKNO0m zvcX2)LO@J9P-nUnlqW|2{-H3XOMQ3tG^km;1j7%*0BM*et)+w|t^qJ-E8+hpPzm2s2ui`FX z67qkS2+V($|0ipgS3w`X;dxmEi3b(*B<}W4&3uDJF;IqHdkM_sDP#~ayPtpjKVrPN;a^sk6bf=sij!>-cXU8$thE-FFpF>2lB?wv z(l)kVY|>NRS2cAcGN@vM2M&qE&x@^qtGiNs~>d6>~^JdW` zJF7Y(EO#vbv6rWto13T8^{A-p7B1D-u3f7zo;M2*-~YmfL?o@U=+Q#d zY5Z>!)tDpqa?6Qc#6xk1;Vs!=hej%5mjjke;A#|SKs}cHI zAR-qp=-++CNT%W&8ak6e*cdt$@Wvwu(qcrJPoAo?6tve25?0Ly)xeE^er=`LhYKxT zo%&21@!$K9t1wrf*pAU56ZmP(tmR}tZw8e8z`+I0TTD%!TvzH1$k1Vt_Y|H?;8^tV}59<@t?z;PW#b_(a|PVA8KJH|00 zeL_qgh}9Z(`+`}FEhrtV)?F4Hh->Lq7$Q3hfmBMhCzOa?n`;!7dr;yDe|d`K(_+Rq z2NR9Zo#e`+wVr7S3!;Mija+`3^4JivnDb?9+=(?{rRQH0?2MyU?8Ntu7IlQyxvYNV0>oN;pSK)fx9vsx;mmU2LoR z7~m6fA;f?!(_SZ4Ks)e5-lj-r(QD}?%9TD3B`$IdHS({{q+3Q_qkkQGxY)tLg!|1KY9wllV7&v!GV>?hH|JQ$OBHQv*;F2_oSvlFP19V{l>;Nlp zSXsqVAv?Ea@6HhbAsUYFtHr{TgH=WsIo})xb{QzFESo9!tGTP7YuX0wBEY8z2q6AT zEadq>!hsSg-8eOmeSvLrVC0D{wAC40P;>ATMV==1e#h|xg7JKPBwX_PT8o6fJdjP* z>M2Kqu<_x$>#+-sK;@(zD;Wp&g#-k6K_w~y$htE$o1YMtA*aP_ z)-Q38(3c`#2FEP-pT5tz#jJ(Vhjp&WRYBMDbvMIb?i@@o?8N&LMwEc+dP1XN08NYK z3*Dyf1+ua0993F&m+~Wr-saFJp6oks8Y9H64m`yr`?NP|<&lNi!j`;UJ##4<0R?gV z>6F$zomlB13J7lC0wJKtcdN*@AtPWqJXQ_WCRhJG1S)#e1MkW#tRGIE_6uESl9|8y zHR-Y2->P7}h{}y6g@GzyB)0Ep(Hv7#1!&0sEW*$b6GL}+%>x0H2D0hb6l-A`#$CHB zsFm;{Jb|P?NFf$X{G}`Sh^``6e|71%2vPo%;z_}aogIbt4{QGL&)X@^V_f&)Pb$b6 zV8M0*+uK81$_nmGTTOinRVN`flHcWJb1R9VgjGnMQetS@O|DMZFTwY0>t{Q9=`_(;#32*Q(2*_qg zrn4DHoLuN+r7Gq;$Y ze3C9gXc;qu@rlN`^@v$pooTKBr$nZ=XqBhd^Sf0(Yc-U)a$FesQy!P*&99Xf1-dx5 zg!@3gS1rp2m=#^C>Dr~(4lIJ3nf4Kb8SjgLdHObp_azO30@j>U0#^k+Kv{V#c&>i7 zmubd_)=cOgtQ@d7EyS&xJdxfR1cG~|&zbCq>POY4H46=sud;&^f!1@EC@wb?j3mK7 zr%xM7L2dtMeczv^h;|VwU1L6o4N@%Z4MxHmg6BmVjcbq)-jruDIgFctU28H#{Nij4 z=S64j`Tp&@nO5AB$L9l3ER52Ca)oPeXbyMoE7$>Npr##oKN7NaW?JM6NAg5>srpE) zz-@MvAWZAfAvo4B#A$7;^_-EvqCb7unuU9a;H)EaI)P}iR_|A#6a0yGHRNhYNGX!z zDhB$tmH%_pFh2i>$;N+_jQs!T{Uu*DQKgkqT}q&wL0uB9CbPVoastL^u^ z^}WxQ56J(1#5(>8sp)WcRlM+0TmS9OOSL+yUUCMC?mf8>vhhmAz(?=0tH0d7EI#$< z&ruUQMGGVIyE&;_OlCs9tqzZQza&Te%rGs4nVEN;=2~>K;OH-vskmLQIu;#P+up5| zd0a`!yz8)u&Xr4h!*&eJKkv=2aQeT5FLwo+*rvb#9(*SFOh)h-V)aNkv8I$bIWkZ= z`?*N1K&@bX(fanCZ*~}NP4C%SW$*uoYd5G>X34TUL?Ge24B+rtKNQZf6Q(||`VL&z z3jnS9-_2s$O#7G&5?2~XT#1k$PHON&p~?<@40^Eag;CeuCyAO5+12j#k^Y1WHB8+DLx(yb^*%P97HFKR&fMXWe26?RqyEh_j4 zkBwu53rUO5+pj;;KjJBNji*EjMs{2d*nI{60@Zc1-FVGR<;_CY!d};JEg<+jN_}&h z+7AYL{7^_UFN%Ax?1uuF8)NC&f(3ox)HsCAAi$ScqWz%ffu9}*h1%Cz#Bb-i-}SOmo5d$+Tjnj$YJmF6@Sj)m`<{4>VCcB?YizD|AD56Yi;lZ-CF^ z^ZuRUgH7i7eX^SBfw`5;0C>a}&b{kwSvHtCw!1%A6ztVAE3yG&*ZSo}o^kg=nQpquOB=QWl$El%9G&AFsgT>&y;`;l&hgg9PfKabC`#| z=uzDs`!&V0ou>9Pe)u~2{`FF}?(!F@Zw3d-Nd_!*SjWZoQkbjVnbg$$djmIDmldvk z^Xd=lrE8Drsek{8sIdY7W_|{qcb8CsX_A&}&4AvgY=@inQ-kjrqx1p+m#QL#aK(O(jjfDqlstESK#|WQSS2Qf#FX6{v=t?jA9ekm67F z8RshU$2&+Hx_DmukJ;-ze~x$wf&5o2oISW*cd(1-8_%aD$+l-*J9T*QnrpP6w|#Qq z&3argekcT8SuZ{1hH|ja{ibsPg8HS0gLHj3&(SaRwq?~_Xt^aqXUx6y4#Zt-XvNj;&jcTjofoHLt4ThU$LP;mW5TbAe9hCJ>Pqc zI9eq>Ltad^h;uw2ly9l(C6va zy`2}mogcTpcl!m9WIReTS-J6Q`;9F}6Ba+(zUt}X#|n!Msk#^>QXKf)Gz->}2qcr(dh%wD%d z4bhI2I!rcd4+I;#A|ql&FWM{CGRDE=NayiDs^Yt<`be%WGIJ#6%++6U3}<+Zdq%4B zQ4)Xkseg^u$w~-WDIg%`QdB8c44g|1?9`NE$H(7b`aC;+si%r|16%1E4^-5D%RZr5 z*Iu&xPCmssOBh5r5?UJcVD4~e@^HCvgO%rBmn-&+deyjs9a;f3>HNgtHQ7@4%6#Mx zS%EAi9Dob>%?v+sS{|UK*m7_rC&y7y;Ma~@_ueZ=5+HbD+~qPTJq3r~VB-1WZ~(*FWt1i zr=N27fDHJnXbLDTNzqokB%D<{A#c@Shq^o{X0y>bH^_yc*Sdi475>iuJ{W6gU_!%(*C}~UfO8z~UW0&J> z{XZtzx~2@=>EE-3^*)1-m8H|-@DeAACMa}`i#)5!c2weJ zBk6fJ=N^BbPwgq7tU(3>i1)3(jxrmr&0M*y)T*@W(ym@VsUiIX8^vrxtm(4DU=dCu zPJ%UY)!VvxW+HdErXvq$cJxv$VI}C#vsA29^82*39q#B4i|MWSrDfIg&O;tnd8AeJuKv-+Pg*m!L{PG3-U3@K>ce!qm^`gA1`cd7vG|4RjXB%fmvLDq2<$J|*Kw&OO z@)H!=Y7_&c;aDOd#mkm}U%b|DvA;ZU(1Qpj$P5EINefPCWc0oD(rj+RE{oG} zy$t^O{8ujLoE^G)5!uyjS)w2Y--{& z@-?<+(s(m|xymR3L&zG{n5&?<-hpy`!T0vLl+ ziTCg31PNVV;S<3Pq3R>lzqRIHiS|ha<2NmQ;Bgl*AiXOt5_XJ&v4jEp( zvqp;i)aPRc{i2U0#B0meNWmj9(@ZY+B)OcmGUsiUiQzcRI>wDIX&_7D%;+G&)fV|lgGaSLm5Ez z^KKiGhIV!H{Lni{DvN>iV6dcB9b02SQS& zz$4#A*~CUcC9O#v3dUlP3s*edK))aKl_@EQ{{ACn39qA#v{-ghTyLx2P&D1c#oeUf z1U@Cpk`4sp+8T;Jj;6%64NNOwKk%hm6elqCQyJ|gtg+fkZOxz@s*#s4e*uwvyv%S% zqXx1AOa&9+t1XrZQWV>vA@4OL4Eae|3Kzq0Qh!#GyZncO6mLhgIg9l*C0wbIkAO3m z3pEWuvs!ZSIK@i8f&&@_AZ)x*OkyJz0rq>@Q~6Dqr-10uY1=!8Nu=&ULUbhmg}wKH zYHHp0MRD0hjDUcG5)}oNW}zqoS&D*)7_m@=sE80EMg$~6$W#!Jnx!Z#L5K*5NQu-a zEkY=EI!F*wQ0X#*5T+!V>wWI=&KqakyY@Nzly}cLcW=jtpd^#zn_u~tU&-`eSXkT* zPOtSy0vye`su@&ozJCyu7ZL*tH-0eJOBx{TTd!Kz&t0pwX$`B9PEmQM4Ro^dLV2j#FCwz{d7!mxs2-vr*`h;mQUbd(n!R zoKb&yck6|B+z!O@?JrGnbmr!O!|4~Wy)3E)W4;IH*FPVSDS<{Y$eqA#hT_3!(UfQ{ z0~$z&5C=#}8~%8kA` z#M!z=rQdOJ?6k267g=p5VBLF&UpcJ)A?o|qWvxYpxu-uGJ#E?(UUrWE+;i1K#Uu^- z-Rn@q&`bI+L}*p*ZmK%sRpjogYG&9#j^$y@mlk-8;K{0a-Z@BBBNrD9WXnzL-jd!P znvoB+-%q>dj8GoHxqZaE4=jsp#h50+|@a)aE{AG+(;hEB35|$i|L8|ON=eHjdUxV z*xwWQIxALUU*oUR|MZhf|90muxNjq{m5?2Y?v<`V@S@T>v-HGL0Va;I!dyk9!!awm zzcsa9VkKfl8%-*XuvCj|p{)}^tKmCBpI1BH{)j&b-|17g17A%=KqW(R;ofEzX> zWXSZ|$7bHJH-QbO+HqEm0NX&wmO#f=d;g8-``R7PefTk7gIJ|^>c4%vdZ_DnD-vlz zkEzn_5_yVOs-yGZRXOZe0+0jVpl354Q1_pk{Ea z8l1IH?Sw&4@fSH2DR@oYN8HrS7OpO!gp7j-FrQTyBwO$F9Rf=mESERR03j^dLMUxU zi+BrL7f*q`XAuZc-hd+i&t2tbMdAehW)PZNjye7O)ZwYqh9;$o;|mbk&n~Z@-XQ zmYLpKd~?$Kdsb*#;R;gB#pw~RPIIh;OpK1CpBOSi~r8P$v=voUzrl zD=8SOPRFs+vJ9FY^%~+dxK}ltbS?0`cLSts+>#jLi!oarIZ?=qvfMr#ynR%)FyKOu ze(2*k28$RhPQH%qQ2A+A+%zQBtRsODg^%KTlV=_+8s&+5;l_epUaZYELoXSLC7+rW zUA?WBY!YvK{AGRS;qW^4e2D*c#EXtDV~Ngc-8o~4uDDly4d6gsRo<3UcD2QCJKX(jbH>&)QG03)z))(Ta;Hh`vdM}2l4I^} zqoR+}T?kfyy)kFOaT|waXs#%!S#`j)yW;fg3-;Zthaah{+K<%{X`q89Jx*{ay*nCm z5|)FqYM?}{bS-#4TT5lNxbaNNVxV@A!chmjYjEPN#UXpU3473omg|`!HxQ0^f_ZGq=4bH4R9s0g%4Ev* zNRHDwu~UAyGMwzUmN>%PbtIhKNJf`}y>+WLcu6SK3!|@jbG6m;f5mveO~%av;n3TWX1ar_Y)9BS8XU(AQs~ zIs^82nG~%2uB~}JKhX#@E^g`?1GZyI^l=*OnZv$8a{&bZM(mV5;s>T~Eg6J^J*teQ z_3Wt=6tJgyc{uzbSAbaz$Yg{SVITia2lT)DWCJ%Ggqa{Yx&y+$1zZ4I{sIT14{5uZ z9jX5UI3=uE5qiB@Fe!_pM1!X0#RlXk*cR_pHIOCh0GU$q;+Vrh6?mvW@+Xt<-}P`x zp^}g;xKtd7I1IKV0{;VYCUrM*0&d~-(6)$J3FbC|z!hE1wzPNkh4tpMDYLTyZp2iR z+h-NJ^NUEP73wCpy+fZ8xUNU$HK1Kkxy{STkEMLW21Bl$I95~`eZx{kYTTC76;yb9 zBrEAymmzl6)h4pq@Uc-bUI<*_84f;1kOGDFDy_!pWMz22`SW+B2hl?W*oBSgvnRli zExdxfsB-bM5=4)e^4IxJLE-GunW#tS%Swc#-9RJ=)E*m|akX1~Q>i5fW+UAW!dKIS z0t6rg-lyb_M7WAfL6EW#q(9+3)RW+EmNaB)I=P3sP_jX~wL54x?H4Jw^7)}l=?d+|DxR~)p`UMJ2S&yj}t>3aiBkR()+$xdHEvb`;AXNr6;@6@fbQwuv z?ZcQyTjrc#dW3bzxFwdcs+^=z#aJxWhBtn?MK-r(TD+i7q^1up)ic)-P%il~r6&sS zmd1uEnDCss1AkkgAzm$u0EMR(WDC?BwwSLr&g0MaR9jKcvPDj@LAbJBiiRNfW^I>B zMdlzGI|lc;8_*w)pgxL?3N>F#3kQA=B(EU4)|Lkob6e1C2)4r@TKMsNFw;umwM2OG z5M5|EF;A$Vsez3llo8^}-r|uXGvC)og#k;573GV*Vxt+DglUpKJF?8}KG}FvMaN@N z)C*y{ojq{Dn=?h1&Vp-+WMI4Dr{R7vV%}hvHb-{1ZFbYQ0^n2kbGiVDf>kwlBVTHL zFJx$twp%GazrDO?>m#45apZ>-k9wg!ZvV5gShtiHl1JD7RwFVT1CQw0NLR}LR09c5 z9!>>D7*Oayh_JW}Hl;sLQ zx6v1^;2O@S`oUKjAjV$iIruH^@xA~deg3F2`MEpBJtC}>!WMkU53w2>z|>Sl5R?5* za9DGy>@TCS^Q1eWx zNT1;Fr^6-g$R*)OQ|6#yl%Kz5`jZ#cB21*y5t01|rdlk!i!5L@(C1Ol!iytnw^8*) zS0e^_(YTe=y*ZT9I*(m&Q|6-lhm;gfYJYZcrAJ{7p>Nkge^RjDHnRr>w=0G(9QvAg zs7DGCdlI`>XOKQ_A)0L_ltxc173`626=7cX)U8W;_q>&Q;-Py=(moM0qWo&?>T=#v z%ANO?z1gFev#)5$r|&vZ(J@oA_hg42`(X=Wx)+t7ECd6#+Z@V8-{Q(9Zy8&V#OgpO zWV?7Sr@r4eHF~^l(EZAgUrQp@f~=Ny%^&V?ufA_!xfwb9LHGVeFDFsY&2a$OQER9) zO}LKha*ch{THdeLsIHwLBq;dKdEYYMBh=T$_XH}09;~hCGV&uI=$hEjX;etC?HtcZ zZE@%@*44OWc+s#>8`L?veTvp6AIi2dEBo($jQp3pzkhT8Sq@4z{EKwU)^gbc_BaD= z!_H+%$%L^W!sj@UIWj=R{l7P+|K<4kpJMCNxQ5B-3>Bmb?h~rjL+gkpuCw8mItaFr zfid^Y9CdugBXV0JsicQIgxp|uG}G$}lYGtV$%uOTm-McJ;nq+4jDCAlkoa zvt86IRqhjuwowbcg*M|j$?4y&-Y;`DCTO7Vacg#Pwz3(vu@Vp1Y58L@X+g^RPt^n* zTdLn?+=6UlN>%zes;L>bi+p)-AC@JL&>KSzaI+K$wn(VRP}tZUD(KbIDRAqlR&LW7i`_YCFr?yhs2ZC!&A1DqeKB2!l>%AYW3uWQow;|z^RU!)|!i$ zQRVmr?!b+iRl5b&;iMZLZVv99%AIEYn(kDJH77uxQlX6|S zBY;@q>f+qD5B&3&CH#u=ikP!3R+Mpl_ObeywLT9Q9$dCt_oP>X@KzmgPa0Q{5B3LGMXoPuX+Y4%!>W5}Y440;e!J(8s}5G`|ef<$KewC*k+y zd>r8^Q8x=;NUfHerkXsSi|n7h?q{hj)gf)FY`@cIgS;rDM9CKy4y$V%L_hxQ$ugJH zIzWKd(*)|&Z<`a0JXQe9;@oETQmIYA#mGrLBeo{R`#9X+ly_#qGsPz(c25%Q@Ie`> ziQ?|1s?NPu%pc`Q9J;&$oLQO9W86kYRIM@EsJR}VsLcshjVvNa4bOCf1clg2AA@RF9BY*|((JVwdyX-_KOGna_tMP28ioUL*|<3s%DT`P9+& zwuFj2H2EHq2?k#iytiXxSoje8W6vpM!(hug3Q1_wWEcY}mlNXHD(3e5S2H-oO3yfL zayiARKEykMsu5H;Vy0U4ltSX9k|VpnDiBV$mDS)+bsHC6l1=v;d=S1p1jdatEXNe+ zq8NYK1M@H;Aqrb;I&nfUVPJ0uBC>j>63`3U2SPUPy8XgIPGxlCA*wvEUvw>O?{jJK zB0eOXMiw{DX=gqiHBAk18|y)p+WorGA&&%o9B>|*j_*szqx_jJ3GjXC@>F$ z(?CIP2D=35tM8fW=Ne>YkM5Y*+3V}-*O-z2XiPnL9jQ=m%Isi=|G;q{N8Um0{UIQ=@K_WuJ!$vC_pN(?%s1;=lqJ+lXJ# zN1D5k>p5tD?O~$3yfvsK)e!7hc*QZNTuv>vi>jQ{_esIPP|?>F#40%$sS)NSc^rcr z20Y`d(v1M(L6G1iZm1F-aj{fDU!rfOq>~f43Hk(cd=eaJILnVhHyuzC9Z~c5u=Rg3>`1_5iFk<<e9$%c5WjiRZzm1f> zti1(Q`rH2!iJ6$@XOgVs{CtV&@tQ`oZnlXQQN zk)KY(z-m!h2-Q-r9niM(N%D`I3!pP&`kq3CT@D?EC2an4P`SLss%Im*N6WLQp-7l$ zlXRi1kgCHUHdj`Q4btB^)PP-%Zlw?oS66nL@6DuIx9NS2JJnY1{>z|4mwp);OF46T z^zw+=-BiM@Y73!6U$_1l5`au~;rJ~e3s8v4(!ZC(8m}wtv)TBFq)uq+`&c&8Ik>Y? zwUqCt<+P;68K1-1TGyws_WXRAGTWPpY#Wj)kBLiVk7mH;=_dA;JqFsQZwE0^mg=Jf z)u4RCsA3X0=T2+Nx0~C5y=mE~=~c!mqX}(7)LcalDIdw&ZyRWjZ8V*GR$l8iSrT?< z>lb=21d1@db}xA>?06C=l#7obu^Zwz*tLKkXNf^OQ|miUK+7rgSu<9+xu2(3m_lPg zCHscC-(yN>ldD$s!G~SbAoBFsDoi|yUWEAlOvE%)d;@I9&eUM!p5zojz^T&INVS$C zLcKdsmyAHyNY~YhurXy8h8%P=Q1z0!7f=|D1NtJHNb0%`J?*nEyDJ^j1QUyGJB^;} z8F+Vot3DVU{fzwH|t*o_1U85>8n+h<-pgl0hDKm0OO_l6B0 z#r7o$dLmPVPEF)_fSO*m<5^n))gO)+WW<(D&iBz5=JTfa-~=vIJCS*%Q-n0=;b_Q% z;|WS_#%@^kePrVYu9K0|Bj5a7Cr2icZB9}}L$MCH`ZJ1eJ0a0hwH7vQ;$ev0T&Hk0 z5fkM=G;?Zn#~doDdS1(di(UkP7BtagFTA_5ntj`RhcI8aEvq&!zaO!3fNKk%dW?cD zvl65UYUFHWOUe!DzAFqlbT{oiPqSM6*~@NM#;qW{DiuuYSxmsD6OF-qnbiRiJE}ks zj@dZk9U(j@d8aN^ymZHENhRo_+VnBGC&Ymz?LDV!5D9#|Xz1*b|T+Lbzoi()nAzJXK^N6 z|46ftu^b_tlBi6SdD@%Z@gRyBIgC?-h+h*UVrQsLSD= zINEj!$U3L}$Oc(wK|N)0e4(YXkEWVvp)jsW!wv~-(ImP$ko;WT+({R?T5^yVkgf$c z)0@LYbQ$A)K=so`kX!$UoVs*#o4K;6rwN)rX>L3S^eww)?D{6<5x18frlq2VBEuR+!6Jo zDLKSBkK4IKvFi4HzE!oO4>5m**F5sG>~RdV&1|5$Jj*GMnFCNJoox`e*Nox%0?G(aV$<9LZ4`p$BDPZ@p{C6{js z`gYMg`RaW_LxsXQ3gpry)e=Z7v?a&dQchNsc3P(g_+OfG4XbG9ey%_He!)YBK(DXkP(w^! zqc}m;j`VxMmx^6=dc`%=7a+diL3J3mFJLi{Z{d6)RkTCX0@)x8Whc7gIG7a(P%+;l z#Hdq#Csv@p)QD)gp-)L6DRDrx{^ZS3C8QA0$}Scf-e1Hp`u=Hs#+H|hXY4@MyZFZ; zaEEw|so&X(;OKcFUH*q$J5I4joCAJiA@pVi?mSL{p|#`YIv8qWQ*2Zov^f_E&`$u4 zkL&vYaT($OBtc?C)LhU-TS>Kmjk{w+o=ptJYF%Of-UiF%epd#5H0DOtDkFo|)on~a z!!k*n{O4{#jp^cJWmWBdo@Hg#o$N;tqGdR4D$+ogHiAX*1(_$=Ky?%0BdDGtWkDW7 z&qK1@5Xhi3K(MIOa)Z=Cl+r*RpHThYpzau%KdL&XXSprzP?+_1>vk?m+Ip$IzI*GP z&2qAXe~w%MU1d-t|5LQfL(GgGI48D1Z?xF_2W-$~UcjD_?;uTE33aZUYl#S84@|68 zmHyf~PPOObVmwxefCh)3pyoJN{{5~7O+`^+OqhVD3H*|i*F!M(c{Nrr*2ImI)<`TwK_xD{%NjkAJ{6^f?uA9atIm_|1N{2llW6J zOPMz|r(FuqHdFwh=K|^RcEfLh>2_eCmVYzu>*Gb@Kn=W*XoXKZ+FjSi<(*79MA;0p z8!#A3^g$px>Uh%|H|zq26*L$lvT^5t;(Mt;ErJT9rht%}_jtab6tqFqYLr`p!W z)ngZ+Til5|`dsV=nMm=!>(Myts+BQi8+G+x~4$%Q`_-06QQ8Lf3le$p&<02Vt zA%z(yrdyT@{H`>+!Gv31Is#tzg_mpEr^#a7mU*z0JyG0wQ8zlci5n-6%M37 z8m&9~5bte*cMD~!jWYiKHRDQnaB2AZ~G-(}F8{=K<)j2UUqIaLXJ}|X2 z=GF6M`!s%-}538?_5bo`XXP8XhHy zqHlq2{knpkl%gJv>1Erq0bW6XWopH7wTQ|tCZ;CldP4zzWYZtxE>PWL0_>t;~dca5r1{e!iXy<9TN~jAXb5kVq;$s#0=q@g+DT*RntUnDhEB z-{Gg7=KmyY1lB;8XUd*a3D@+1n$3j0WVdu>Ys+u?bWY)}X2v?{$%fb428_Q&KN;aI zs^06j)_=+Q5)xsp?@srs_v_x7U5?sgAP4AI$R;58z~eKds;0+ePdpJrI8?}}uhA7> z?5b7S-@{&IAlIcFT@mN!>z6jswj{mjWQcrpkiGv>ZBc)BV z9;@uH8ZHGz9M9J2_gJeo^SuJ+YJ1_5>2;d*bvcpc3D#o{ok4bz*OS;8SK!gyfvy0Z zgYZj0?h#ay!(%B!;&8YpQab{${7Pp?lW|~)YTnPaS#;x})PsG1F=)eif7r)h)0Fu> ze_>LP$n0f{*JGDav&D&mk~SdfDI$J& z`#kKlH29jqgL$$NK<4DL`FA03sP-}7Dg4KPaSx~T&)~lusB6%VykXc&~JHIBPlleTv8I+$Y%fF@ zb+v0NA!Exrzpxl{_JH9>EV}$T0`X;JD^ZVhmDAuSteRF?c=zZeNLzRO93Jg42cIIx zQBDI-Z3Z_^&?KeqyjD^08^wl0SP_ITciW3uS(EkqW;ygW#J>snPthRf9YmMzlWd^1 zvdfx^gM_#Q2por^El5=Zt8%U7x+;-zZlt9t^$3iQklF|2xc2paY{uQH#t7I7W5)-G z6<0$X3uc=g+Y9vr`^KEL<_ytg#Gl!DnGV3Kig}0*KaO01^a;JkOGTXejOEY1AJEOC zR5>8mn1)e-ueG=63+t%qZH{otE%9v8+4k0UorinxgbK}a%Ymp&w2-0l8%0(9SHF{`wuE-UpdkW~_gdFkM z+-1He*LM!c=oJ}W2Nf{|-te6JjI5s#ZEp9Fa$%iD{TyB(P669N2vm25JhQr>Xo7t~ zL5XX-2J75qX)^FO_t&i5$da#SCL3&chcc0(j$^!seew_ffu%C2Q{b)^*Pl$c= zjR|edjos5>^2fRj4U392_O(4+>1;Iu!ETt3rb0-%ih(Ze6UBkLgsG6e08|1E6O8H6 z9vk7Wg(B4l1-YC1whm7bVS?LmWi0m-er<|mn^M2UTZ~aVtb^@&@BAm$X6tm-iPCE}(=$4hS`6*CEa}1j}$+Z#U#zzV%uH+l& zcEmjk2^L^u(e)H&gBq6|4?>1@&ZBAxLMV#1u%m2ZuN@1{veAB9HJ0|GeD%%C2a>0% zAmXZd(o-PT74YCA3D98kOD4cPz{hwuHC3PYP=h4fhglg*k?)?5h^2(F5XShAywQ>| zGkm;{5$4UvqH-&pS+7G=iaR3 zttxj8TyQ#`9gFV3@pIU)H+_5p6pl`daE)|CXSP8fL@Ofng(b7lgQ_A5OUz@^K2#P} zQG@IcSP9b7HyBoX!lWZL-3Ak9Qt+*TEo%`gPKcf^fbmDq9ZXNJNabT&TVCRRHp-PI z#VPI8`VgEYo{-&V8WUD?>---f%8hJQ>IQg77@uT!ZZ5tu5QL?c>wPoSMW58u6Ut06 zPh8h6%;7K{$4!Ud)YK7MWzEMJ z=oe7WSVCJURfC-wuK1-CN589nIzVg$FaODwObQdapBr)&t@=J{R^6Svlakdmu&H|{ z&Ru7JY3GEIzNrjouSSC2JxFL56w9ttm%_UmI*8nqrb$hbS#%SbtLD<~Rhx1oNeIP_ z8&z$FKinmgfrLE+L&ZKq2ro(3a*G(bl;{&Mnm@R@EZt2+-DPtrq8oF&d4Sn{_+zQ{Ac8j;xEuI4A>ci7*~l=*$W*15de)$c*BN5 z`Z$vej}2Zb77!GPuJ{H>LwW>e#g*wMU|-g*frG>;dCoqBCDooeN6jY{ARpknL^@j1 z$7^1m4BL~n`IyoCKj(okJJo+Ei|5PIsWuWVS_7aqw2X5G6+#b)Y+`BisTiO@U)7+w z5$5u8qi50y^_JMuc5=DGnjkxp#Q|cEsp{nB+&(}3q9dD+v>y2UNEZC7<{HT{=ye&| z3W~H=mio}>eBrXcr~zu@q}gfcQVBkVQferi6rK=#m z;Y6CmKzbQT16!~KA(}m(?SsF`Q*u0SZV)}qavY;a!y6qXS!fv#KJ z1a)}pW7pce0^-V#ag(gm-%Og`oWV@{|1EL>|0|C4ANpqh5YCeOhrZc=ns(U#1WCMq z0Yds;r*Fo7%R*QD1_Ft0dSAfcX?8KdH4499ljxu=8Cw~sGF!>Vv}&3Tl;Njs4ay|_ z$2I!AcaX3vXc~L_hig|%-JfPEQf`;GtZAC7O~>AtQNYasMoUCK#AmujkK0I0Mxf&6 zmw2^wHF3J^X_g%sMI8rP+8OGtbv)R#oh1;#h3w9~5MCY@f#4jd^l&ZsKjS1ez&201{3DXb@b0 zuABWr(liwnb|!g@rcCIwqo^2x{_aM=E)N~lKf2|y86i??>b3&{ z5YU@S(6X!fL(UC{X!l5!)A+#pN>_ZT)pDM6b+LMK{vK8jO_vJXE(<55ZX#0i;IaIf?43B85je{<{Xz`Jb zAPjeKFgZPk#M6*kVS6WmX~~s`)vcDxDFF^QU#p36H>uxov4$5f+`%X#-FA}6a-L7B zQ>14HJNVx$hBIHpLFGXoenB+i1j>+($S-qi8NHfIWI44O&ZDl;FA4F=+-GPD`@TYB z4`*_%9dUUNm(C%pp0-i)RcurNg_Fo~LMbKJiuEFycd{)AXqbc|EpUL40Bi=_n!%N6 zJ1F?$Fb>2IQJOlP(hY-ndEZyzlZU&@^5T!*`WpGAywhmxRlI8yJ%8l;r;(8Eq+rkd z5vSl(zlp+k>~A`R*F5Rk*Wf}I!4+x|e6WO!ei%@Z;3rIB)B1L({uNvi=~ZC02BUBi`6x8c;fraLv%D!SwA9RLu<*VX$*VA^F&GH_~|MD%?kr$GtU zd%{9ErQ}`35bqQ<-(p(7`a%YUOJ`Ynxx(QusKc(XTo2>`>&UzZV;OQ4RXgorkfROB ztbty!`Fs;lL}rz8YqTkyC|7822%TJhkg81~Eifh|$& zvI|L86U`E8*FX)%d5xU|e5v z!)c-=p-&+DQrWursnizX!1?@1&g4p|Ba$aluH#`)4ay1Y&T0Ta*FcyJ>X+z(8ej%8 zaiO}CoZDsaO^bEDg2lS`?s9eMtJhzwRweCh;t9bhE?gtaDa2hQ^s&X|vRtF&3ox$< zPsgs5y78I2j)rM}rdlKsDm&11k27;$P3l+VV{eR8ahe62$tL#pm%iL~_{4(;(pZ!!ma%7EZfzfXW`_+Z$$S$wj?lM8nQ zr`9s3LE(DA&x7m)Z7;TTA z-4FVGE7B`8xb#TgKfrJKl&!jq{x`@%{YRNc|GO&lur5R7Esd=O<+5T3w8uJv-pfI^ z0kjy@*S7Y^qM&bIp&2^PXWJGqnx~;JU?Y9jBKy>W77tA<1d1BWu74LL=HE-D`F~$W zlapTfL+;*P=-i~l8uL@cAfIl>T)y@sIMG#1pDTYs4;y*mJAPp{KmXl#C6-N98(9LClE zDIfmt?S1~$Oa;ht^D}W%ju1bMAg0y=noTFBS>-1!vVkyV`%{eh+yIDfyVG`9Do3$D z7Xgq$Q?&(PMHZa|V@TaId-k8$1OJw<9`hw9Y3*!z$dldMCj_VVUQxcYnGVM=99`Ba z^%jzT54V_s%cdp*=_`hx9TsgKx+QgCx{uJ*;O>m}24n0>lDZ%L{+j12EauqPF^Ksr zx=dH+K1@QFGT_06EgP3UmO`>@K}V7Et9I2FrHDRX;Z)`Z2Sw{D5!R*c(%Z6lP^c|$ zjNPD8mLvzMu~~$PB$1O?Cd;SoM7y!8i|$vu0WBOSvz&}bl}|mXPB)|*&c{4P3_)xd zJ>ZoP70qv1&Lvi=+P?_eOC>w&pVOg<>g+R}C+0Utnw z>v!TffE#o?_U%5;MUsS1`{Kx|(xc%T_Z0g_7z)#4P4H~gq@zZfEj8%rXi7z}W5^_@ z+G*;&WCiUt?WeYxFGwtu^?3R0jTz@Na@c__C3 zR*+Pbp51rrbEom%dx!cQdV=!1E4!=r-`;Do6RZjf>iOT$wxXj=9 z75BCjT>-L_a5u)s6XKe*L3TYGlZNe06F=(;YEeV3Dp+>fWJ~uTm0o55;1VU!?{p*1 zIcE9?19%+!hF^t?TY}oDE~#-g*Upbms>-v}02kAP>W)ZHfMdT{_5#(UhS((>p5^mm zxP~C!4vr|e$*R@Xs=q)>G5qV;@wW5u*nm|Q66X>- zBs&03_AKZbj|1p}x#N){g7`EN0n`TxYDAk;Na)~Fzk^-P9CmE#awj#91)|1B^M=Y? zJ)V4h>rq;k%pG)tlXHbwjC?+&{F)a*Q~|_IBu%)bwd*N^0&;`?vhN&#TJjh26e$`_ z8EZRNZWc!h8OwZoLNsf#`?n<%EIB8OD=Ti_PBq;znb5n&`8rgCy=m?yU|ZSgSfGMuc|GFR}| zvcE#pKvL~JUj`p@+fv$Et*gUvTYrkFvUq0X-^qsk4<7yh72(F;`a7vW7RLp8T|jFG z1#tkB0MZ=pl*HQWf10PXF8%>PNPk5o^b~rC4TB(7`nX4Y1yt%G$pL7TE~!yKz8>h)*(245BA4V z_V}(p`*4yA3=_R2OLe%aNXL4E|sPHon+j=+A)_BEH7Wagy} z<>eKzwnNFgZ~uOBgIQ97ng89PJ=QC4Zv3+6gT3{R_@9c~ehWo)3q&-`w~hXY1jgPdafWiMT24Qd7CgRI}97W*qD@HZc-CNVreB`473Tm2~71 z{bLGBR~9=1slx~a{QP}TC}WfbsuXQ|7?2=qJ9rvoJe#35*IUnbtTzkv@k^4Su z=sg=g#`vL&gYB6TOTuDkbn##;@V{vw_hpGoWXb04K+STg3=-hEZemDe5gmcMNM8n; z;A*v+$ZL4awG7UUDwL`XYPiuADak|jB7j^}ja=B(RbIxecp|Q(p7^v+{*zvkb>SR% zuL^AvCGehvw6|E~H)tvJqlj51T%jS{3Nz(8qV}a9%~@MzdFt%i{B>K~1B6HFFQ3}@ zWY4}2O7X(%q`T*{i&DKg@T4;QX?JPEwj|;5#8qP#?k{-q!KLDt?fI)OH#r?Wo}+Wi z;YpUmZri%@HMwd;ZF=4?GZ`nS#GNC|nd5ss0bCFxF#JQ#xNC%a`IOLOB7+x~Z}h6#CfRpf zTE6m|g3-Wf+wYaJfXaa3O2lc%4ao(x14uCe&@eexxw_UE85Cg~Jj^=_6*^fJa|@$# zt^$F{i0P`Bd)i_0b(U*bZPE>b>D#9St<(0Fs%sM2?YZa*iL4wyJ_$C%zIF&yNECd( zazM?#B85Itt!!>G^~3Zv94g4>;uBCEkGhSfzZVloczCQXBz`Zos$Z?itfsW${V?#R z`~mj~W@Ax(>H!#A&z?7OWsJ5PNg2c~r_8V88twTWL|%n71EiDq#^a{_#hB2iqbA93 z_E&UhU-plcLt!?*70@8K6i>lyqam`TgB0F77G8VvSp`T$RPMu43 zilN6)y>gr>I`&n!>cY-qZ&VX}`o=-$fgvIOjGVl1y_5Bf5@@^!-X*>WAF_dYK%&%g zB@*f#^6b{8?xJd3wwvpi=BBD!N@@-w>oQ}kqVLVMmRWiIyX8z4xBlyD>wm4R22|Lg zx;`F^7bB*?G*4MP2CukY!C1j2R_Q{Eq$gABKjma3iDv6kPZVb4T>Dbs*qtEK6##eh zVB&%u)jizF>r`^#sB(GtlN_)L6WIn3zm#3vNBhKp?Ri{pepFI6s9;lnEr(C@lxr31 zR#{$p2(-W~)qsht<(l^CtP(4g$+!-CHmvbR4R=Q5K6+{2h9FSK-ZhDAWK0a@g8q5xsl%d?IeHx?Mm;$#i_$%GEOBRHz#no;F2?0h54G#R zZMs8=t8?9+j=mq#0-dzaS8R;@-zsMpACB8}ys2*Rj_I-2n=WPNXXODs@%*g|loX)r zr=SuWsYaIsFJ(*r~emeIG_2_80b&(1e-r8e9xEBp8OZUU3C9M@{I=E2>F;M@(&jq zu>n}NXV5li?)h}3oDBWfX4l{G&*y*F5Vrv}Vu05UcZYh3NIy{KJaOVLvS6}5u_&w^ zjKzIUgZt3eR2~2b6zN+kM?#+;i%iis)gak$)?5M9m1@^Y{;`AoE4HBjr{~;Lvy8Od zG1p6(S)*dd%H(_b&ix~)8R=mQf=yhb7|?=bR)te?dp=NK3i8tfrV-o9t~6>jjh?!d z-+3ZFXU*1w&)?`D-WliXa3|Q__$hHTwaemIj>?wjZ?-wy@xOaMDgIGcDsi~O)o7Yz z4L#riK)d)vC(aY%W(jTTI178E8-GD4ECDU+%K6_$c?wi}t zWBjS!++=jQt=2weYkXsntQef56zDt_@xYZHWC8t?5r~MyNOsGrTsv#ut{8joEiiZj z;Fa~>B%S2U$AD~dl%iMdP2SuPrN8&kGm&@ips9M=B~(XOMuGP>tVZGl=&96m+n(O< zc1^ZtG?q_nzJDg~1mX0Zw!WR5qfvYBA3Sj?-!V&GveZp_Ni@W{Paz5o{O$^#R9;gB z0b|AUtF}1rwWS)zvnac3PEEZ#xnuPTCmn~j%>C8l`AuJd03wqS9|>K9U~8y%F}j8% zwr&NXn$ie#4#^jdN%ji86VNtH3Y6m$Y+?@>|FiX`8sTrTV#8=A*14wid4d7JMk`Vn z4XQi8sfq@FfCM2NkG`@I*UE~h>oQ4mXKN8B_!UQFD$GpP7prl#BSOitIDu~X%Y$1* zDYqE-c7yST;!m#yz#5NS$TCSq{*e3ix*Yg3UvA!Yxna3=KpcghGkc4Aw}h=QHHyxV zJv02VrOBNF9T`34WGRb%eAm1D)>_I_njM#I*@2 ziPsFcf4ma^DQDX?uVv3J?G(SrSrghh?Fy`gBIwgg{%w%8C%%=B8JQy?$>sS2`vA!4 zVC2`lJYN6qL~irZj)~7zHPz356RlP4ZhdQ1L~(BWeflA0st|Nss{u9XHO&;v66bRK zO?BF%9!)h_QZ4Z6Mw}F~mCLxnQtgZ#&&YA;uC5L4@0CXJeuM1g6gQ_Gp66>7!rQ&n zRIkK-Z$XU7Vu#|N27LV75TNd)A>Aw;t7TbN!@hnB#-$ zi!S8lQ=t97Hm2)W<1$YZD>py5_^!>B2wQ*nB9EQaMVF7sG9bYcSv-(G=UO=wODw^p z84ROG7=^}Y{g^bzz)kOfRTM=WEkj}+4~LwDLM5hktbz5NQiY2xFFqn?XU%hWvZp~abPluO*WBuJtBGmJ@$N?&?*RciFDKp-F?|Gegyx?r5D zvi6C2oLv;*C*t89&ih6-)m=u1d<%EJyyme7#w64(Kq}{!RF_2`LxPH|1{n)v<(=E! zU(5eUwGurrnM(g2mc+3<5Wj&{eozWh^#~e7jF4;tlg@*Ej;ZNB5QkHs^a zf3yewBQ1e{{@Q=E2mXCZwEqnk#edQ!@sIYv-_wj(6=Y$G?=I`NvgsNx4AR$iEUxM> zwlJGp^6g@|f+f0CpL~(2pW_%S>>lO1oOvF83K%rmBy{F05{6Cyc;Z6Y-5JbBp7;rJ z8@^lz!q+9&Yc=%|!jn(;H<__G1ZDexAOTBqgl+Mq`&OF=f_JLg7H3%{m^gl@^*~z^ z8h;Nt1ui3y{RRmr=zCS3rc@_KmMhd59~4iJj!X3RGL0EGE3>QsU?IIA!!;@mRoufb z5v5nBD6KA=*vM&Qc*lS8^{blOJN#CNol9w+z7ih1Qr^@v#i4$0{iHVc% zwvVyp+f_E}tlpn!8T53oLjpV1@@@tIJTNsi9Y1Ve4Urfyf%V}s^>)o^>yrZP#JlAe zALLMt)vrbFK6p5QnbMJEujAo_>VU8nv?=&Wph>1EW3ow%#Xhd+@8nt)>CWv^d*sQ5 zxUfiZ%)@~`fb>BQ^Pedmrg{l=I;P{QcIXA~qy(c%8e@L%AJ^jA(M>H=sOqZ#+Q#?3 zp?YlXm*;jM_qAUPsjs|}pnlkXt5d_t&m6(Xz>IEJu03fJltSIX>7}dsudwI1*c+05 zAG#K$VOal|u}R0{QG9+k(R8_`I>S;+@pyOc{(Fb%hf3!jfUs&8`U(fXC6t&%Fp(5H ziCQCpPUz(+o0G-2s8upus~06?#Hm*C`6pG-gDIw3Q05vZ(i?~YxxhURU0_NGBwYfR* z?B$U$^;N{?O!N~>U;gFO8qOXad9UqXUY@@nwp?M&?k69rN1Bj$cdvDp#R&~>DhyY4 z-(k9DC&z=F;K%pj@PA&4`uTnJkkF=aG7^Y#6q@gPB0VV@in7!k$=D(CO1VKb&8JkI zs%V`~uxsQd-zyk%y&7)pHXD7ktcKlDjmv*~-mu8;QDsJ_%f3x1JtoN=bH+5lu?02N zsq<`k_V~z8WbD(F!LYED=;~e3g9b)|0ky_+q%-i30gE$F&pi{}96L6Y__T~f0I<{K3RS$hmh{(Rh-)UxcryxFiXUUz_EBCGM7?X;j z^LS*N&IDPq&N4lVqScHaBt)5z)otMvp_Kk5{FolO7XV+y1)1OUeCLIU!Q*W z^gHl<`Gj3orE1mQYp>y7|GM8(o9e2*PrdG0H19zg@k5zX>) zfsgnwAMCH;8|-RIG-@%lpA|irczNZ%y1dzDB^<-mixLJQ?-loLmhOsLy(htD>FTR5 zv}ATFJ^STUke=(p9Y>BVTeCQHb9T>XkyPcx-v&h(YzQ%Mu7{C*pr{qpEY{r^3K)A zaL|kCtXC@79I`NyYKw=9g9R&m+hJccqtk?z4{X#t3%#D=y? zXwxtrN;Gf9bZLf2?45ojqDF@x{92u1-}&WxQ~l~+ZB|*Ixj&o|@YdPFtL(0SQuo=0 zusm0eZ(nmPxL&ZIB67z0WAYz+hsS0}y>l3=5j{~E&v{H+m|Kn4s+xmvwgQk@8Q&~| z!pF~{vTA!~pM&;y3=vcdUo3i{HkkU*uk0!)#u|uv=Q~xuCH+K5EOm!%iXVO`Dw$Am#=pS+d@f#-y0!7_-1I$9xC~Wa9mBS)7R!9++7#yf!t9+1T3UqF zykld>yzhJhiFo8&&Bj?s;lZmB0ydd5 z%RPpE(f-}_C68>7(N-DB2gJDktaBWS=hV15|CCvU%HLZv6?gZ{L<10LOU|{$8!yA04jq;={lYa?u`0u4I|JCDvDnj!=3eEMe zy3XHbum1aujhw#&-j8a4_8x>00}VhWxx#1cq>wBQKtA84%|fh%Dgt)B;`u5y;qj|N zXRdRcPp1ZVJl2#E(H9>R#8UbZ-4aaV=6eidtGY}8fWtP#%HF_ihyia0cK~ef_ut{qt}Jgh2KavYD>#S| zONu98Wb@H8KRSE<8*mT4LO`v7%{!}S5|{Z7fNhRSVVhVYRSK#>!s3$w_9Rto`J*9WCbkp=EJH^?E*|VXgT?g545?ztk48_< z-=~9+rvppq2~QA7XgB56=O6t`K#nYqN#Q8C)Pzj1q5IKBlP#m)N2|5Q&*p5 zar1~vq*<045)v8D^yvfDt{D*-b1iLzKGi^{10wzH^yX4f(uG&3bkD2jE6%4)H?{UY>R)U@Rap z`cD?z)N=k0^Yc%uk?z62P!J2yfkcZUu|ws`ka~&DdsqwfJb+Xym3SN-nn@2flg=h8 zmxu_LDy{ie=G(i+Mp0W~504Z|bH6*X_d`#ahNe!YPeFcGL9X__zVx)*4<7>WzXp}o zLH{c%kbbAEIR#(VQ_Jbo-v=5&ETSEgrW56?MW3Ce8CA>BEh2m*hR=wi&qbWAKBn=< zBYJeyiqjz#YTuELJJIqt-zFSk7IhJ9^ORzgW_EbF9fWH^@VVL!{-B)ky^2&k`2(4I zed4}Bgvi6T29>pBtm8SZF4k>6u>d9dHN4ik;(g-P0}-t3&D(Q-29aI#8^v(9j=8*7 znlJB-=9PS%T?ziXpu|Je7}?rIj*Xq4j}^zbH5-p+uX%QOUHUA+@g>!VA6?-NENmLu zmwu=gg;EZlc_28kKF?~`y1MO8H?$>Nt*@_c`f3r40$@=%_=KhaCUZULGmYgliNkzA z5&us{4I03v8dQh>vIdagxOpvvzj%a@M9PnYu}iN(z$ZGho`8kLcMcnTYQ!`fK{v)p z+>UF&3;QGm=}=9z?dGIA*_>*< z{ITorN*=a(xV>?=U9B;HSN@{H9isB0(ySmgbU-PVKCKQ)}tRReL z=g8jF1Qpl+c1y@MBOGiFTe29iu^G~z_swJRJqe>EHM$k-L)$H4^)2}{{w06j;0qSd3)wC> z;p&am3%?3RG)jY&vRX3u1QjH-!Lw$-lD1Rgjp|EFp<|OcZNUA!5xD@0d~TU(ux41E zNEyub(HJX}SPrj2cL-M}Y<}R6R|x8L-}NYgZCllI>do@6K}*Y1T|SKS?bdbdiG!7Q zK6rKR6GT=-R^G-bBFk>z=Heg^BWbo z$E|9r19XLl7I_)0OsRcWc$uS~;~aiy1srf#p!jR}%0qtE1J~Ly4`Jqo$NOu?RoC~# z3|$k|6~+6lS|q!js7B4$a8P)&L|xzb)`J4YleL{q*V1jmu5qkry7i6;Ot%0myN#3t z3A-WTe$vFYY>bjT`U4p9+dKSE#$aQ(&VsKvvEYP0W=NRJnlOSMKzzLu<5Ky@Kh9FK zi6%*9@DDnj-^HV*pebPwb`><=OnoPTCUKuP*!*;CYXNvwcOs_4{B~i}Bt;j+N5 zffH%gbO2HM2~6qQ&#+6^{`R>QktmOilejG(!GqO1@B!>*bK`K3+7H$q1@M_=I*Gft z3m*JVXM=}marnK_`6H3g`$Nw%kdn%E0H*W!{~KX~x)pR03G@N76;@y^8P(9l1G;%n zCun&4_tSvB6#%(>F>~w{q|7?Pn&wL?Q5@X>ngg)8{r2%y>RlylfDEd&MF~i=G@nl; zYNPv$i-gJOQcSk}n5nyB*$3x|?qccFKx02K>lM`dso{8#?RNVPnkJVvVkEK&4SaQ( zBGZ`}-tyqUgSm>49@A31_0)D1mEs9a>r*x2>pOdPxpUuq>_@T{f#$uj__<2 zan~R^#@QsbgacW7&O}7$EP1zn{fnO4SGHqsUg+A(N98(>ux}iCqNBKO z@cPrN-PZVm^+vl~UaovCW!J{vBSa1?3Yn{;vJQL0oA3ajHs{a1j`ci02Pco4rw!7) ze{FI39I}dfmOX1>Q=enC^I7PtY23E!$}VZk;An1rV(mqBIeCIHflq|Fvl>fLBAjnf{h*Y&${dXvevk{!nnoq*Z) z>Xr*z&=vKqagf=I;$tlB4Xas7mm2og4mvJ=l9H~!l;J9P-}pKqjkd0VyRs?amZ&gy zU)lyZGkreNf0bGh#;|0qX!&%xY1*91MunJa=el>-2ESA08l8){TQo7wiMcd)|FffN zOSAVaSm=;#5hL9VN(7FftAP?r7XHwO@`QQtry&H=6FiiO2kG^rNoj@6Z5u{8nCp_yk_%#ePB{>#@t z|I>@-eqRrGjGki#RB%a5)>GJ2JD??sxP)%bp~j255QihC;Sr4Y6U?_x>X0mvNKW)> z3h>U^8K`#4*~0O9WwO`qLcRJodGm65RxX8a1gTCN$Kgdh)xU|{j$`}_ruk|^#ckN)_u>=p%R9vuY4PEewmjC? zjelU7G{k#H>iC9gDM|w9{TZ^XWAXE_my@^|s0tq+$0=qvXuAf*$3k=ORhgyWYwVWK z@Hv!6Z%r|JO5byxTLE@PH)d=p>&UOdS2X)lPyK58wt+RN&nDvHreU`Z{7!xQe{der zcoJ{lcs`|9MVuq#uM8H+jPgXa+qTW#XV-i=chQ5cZ9|V^LlZ4v{y{F}`(9$+GKqW`6hdVwqiVL0_YY?X(>W;$9~k(I&4Z9Ezu=kX zPGuyad%RZv>wb@IiT$tL*^*%YK)ad3m-&lYo3%`StzTNSf4c%pmiM+R4A*%?|y-!U~%gBLU@Ea?1(iUmLmuf@aN=IB5<9g4$z~ zxUUBhI_uTodC;a{>N6#S|G7DU%7G|b%p~sZ3%Ul}+kxm$;v5ML6Vk7YXAERL3)`K{ z3znuqq43vzD235&DG$1ER6HYziJ6nQ`{ax(R0)XAQ|j=N`G8Ng^YRAN%fS;ApvwwK zQC`d2Q4Qhe8ZTW@V+`|2eN`flA?Mo{&MNRX4l?k&@0aw={N$V-fRqcv8zSHS_SSPsdq27i87Y?jHKG;rV7g5+akYT^@h2QhQL> zAfUv4f&UU(6S>Jsb1YbYBC#P|_k>Rb0_BUG&RlHDTEBt!NX}j<#XI0sl8Vvo?C5+A zlRK-hmi7Mo$o<_}_%raeMM^w|7BwbzB187=`rlrzNeS22;XnHBG+P`XFkbaBUHS4g zyv3a{z35z3=_R?MZ=}z?+>Ghe9=>x_32PQ=DNK$;1Nmde11a|qa!rca9mYt?*HAaf@2Wq*K5gJvXYUEe46_6pAz()CyiAc74Z{VG|B_+Uzu z3wU{S1K0fwH(J}>wX`e*R74}Ocl&Bc%1Fij5VjKemtC5^0prYttB<9m(zS^bT=Z<#J4YhJuak#o7+{Epa**SGH&ClwMS>pqz%+Ln4seLzN7$*e1RV zw#=qc5es+^WNr_Le4|KTj+5p?qNT+3@Mj9C?W5LXdbPEUz%-jWd(tiDs$Bj}F zf#`bbS%|L!LJv!wrCP~#is+8`I6T_l^W~g1?w|Y;)oCcmTh@VfF5JeLFegOfk*oMc z(DyRNP$D+Z14vg3t|mg{zS>dv*>$8vy&hDV zI#|BSgq+;%@WIQdhnYs~8$%s<_Of>Bcjh{MTf14Ixv0gvoC=a!)+yK_@W>y>r*n`B zY)+S;ncgxpiNk{%8Rs#JF3+-$rH?u-ZO#c>He|lqG9Iv>zdZFgt#yCXW16CI)8ZK@ zlRndzs3~%8R1EXd5M^a@kd1X2YE?SE#MO`D#6xx=90jtDQQH^k={8fXb!BHmUVjMI z*qcB0KtnyNPN=lnpDeWklmHs`h%QO0H53OPe-cOY0b~U&tR|b9aw+?gr2~(p+IuHq zyw(kiXY@5JPk8;bAwH*nc+KL+G3%bWxgT*bIru_pW5=Ka>7y+#L&=X$5ON|aUGLb7 z^Hu6KbrSi8IwQDq*}J;)48Ix@X$BVY7VU!z*A&za@^1XP37QW5^!wwHOC8u8K#aHj zyMTp4oP_|@Q_Oh32ejb}`Kz7*XtyU;F!JHU@T&~Lzga{gkdlIn8KWb-4L>q|N;}2P zKCYFY$7s6XMb?-V_t)oB#~aUfI(?J9OC@cyjja5RJ{bSH@%yNW_Uu|m(d^u;55ebU zM(rgkprJeqgAjXhkTi{^uOC@?h`*B9n>S*fevWaGjz_k4hftXeZDiandVptQFaJI& zP$L7nZiQvTR^ef{U-?%p?mG3<=(F@7#7*W1ZO6~!g|_kM)nQq>a&IG_po2tPZFEH1 zM465qx0#~gdV3A`O~Xb;)2(XXrz^JU@IUrc)8&~J>9w_DmDe5~9{yEJyJ(yF3J1aJ zBf-^#DjZyGM8vtGdWfwLKC&`|zv9c7v%sby)_G58Pd!J?(lcO2&f~{(zA4_NLfb-O zDoC>sqwbF(ii)r71HsQjB*sxB6KNXXUXJ@mZEl2&z8H6+rt~Jum!XuaO2i{-qLc3P zrs>VQ&Q+XG3dikK(%ZcdXN$N08ucv#iFTG4!_@~+*hg54$!1H=AT8p}^B+kQFiXGE zxw{XVJ>gR#h>L|~5le{vJ9YGXzNVQ?*W55o*}Li2EqKw*+lt~JCdVNZEXO%R=zM`# zyX;gyF*_TjiWF+c`i@`&(rluM|LM2`w(DY30_v~HIVS$L!^tLkrKf;2FpMSvASaAH~N1sN-s%!P)}cF3SrgAeY(8Lc#A{L41pe=~b{akM*`2@OMkhCvlfq z69ttvoAB>|r8qld68ACy_8~~X9#Ue1t&tXPQgL~!Qw?x)zX)un?^xl**A`yxnydi6`D7^J!xsetyLiw=`T+Wa);)8w%)n2 ze!bl;+L%01c9%jUsXDu zjkmFQ75zEQEum=F=hV|XkHvl(EhD^K<3g)g^^E)JHA{Y$twQLtLpi)PH_noM9co)I zSsV~_w}v_ge5{FHQD9v1x0Z{+r!Y)DQ<#Zq*r3Ytn4B7ySt2=A3KcuY(Uem&;Qq53rc$zCWoBY zW;N#WS+%e-s)b~M7Sl49$Lg~$1KcZUqYf#c&b~8pm?FZ3O6wfN+p}!C^-f&Gf%cD? z)3-TKJMl9A3e=u~DHu!duy_H$KuqN=zjJPg3>V`YSa=i)ZFjZozbEvG(_qad=c;Vu7_(sU+5U ztr4ka9P18BWfOa9AVpM{Y*p#j6Nd)pTT@P?=wJG>?Qsk{<7N6JZa*u%c5~}7Q__6@ zahE(vgWAbkYX=qH- z;eD}}c^@AbOy;s?^}S&q;z?vb8W|axl9YhGEt>rZJT?oM+c;oz<8iAoWmK;?zRt@^ zqzc+pi!ue)Mx_@zJv?THM6_Ar?^@NrVT7U@cvSmxYJ(L5e}9NTO(|W8}Taahda$OZct=*DL+wQS??P#kJ>UB-_!Mh#y(#&LvgDVMzwc zy|m?sop6Ykmh$Y*L3h%0Dr6&Mme)M|O?`>_wNTT!&z9p3Z(z9o3%V=+t#+l#wTlF z8-kH{W~}05DR{?yx|6sAaO{ZmcnNHe&l3lDU((H@{8dMs(<{2LKv#Ho*J81WgJKWk{Z6NWIy8a?!ZYKYEFODuU`* z61#7gSzjxIR!!o(A5P*Hk$yJ*4_)X#)71O#+zSu@1zANwffpyf4JPg+t_=8tVY~?- z9Y90+|8VdxBclI~c&E;d{vVqsfVrN9Y#0*zz`YDi9xt)o>2tW0s3E<5M;Jf0mba@P@`7h&W=OZl-n7 zBWWf!&kaee5uddEG|ZZh$@mAC*WbVCBacTW5_#j7iMk{EExirNyhi14r3P>5S)i;z zdCK8h0pUDYK*3`I-nrFHd8mfSv*#HcU1s)3Bi%lNqhh5P<} zvmPtYPCS4VPXE5o$P3TS7Mn=#RqmAF>0K}m@?*=L0pCB1z5?0b@cD!I(+#|r5X;DE z)QF)OuD)|6D?7$=Wnez_sAS&7UjH6B?VYc2Q2+Aicc_v8QlM=Yk}eXLP>mhSdT4k7 zTmHR{vG9JGudN$dM^m&t(J%kKTYfJ7DJ91*xV!8`8Fg^K=RfEF{AYiWvW zSxA2lmq24%`B2eLKcP1-IEv<)))VizEKw|0Zr6|2+A|LtIP}O;02D7poTjG*O z%lp-jq;Bacc%$Q?{@Hzxin4iR$CqGi?lbAle!eqk^DZEb89Z=_iIo>0Mic_G{LHtn zPF0M;YX_YcwuD*y_Uxf7Q3oOMn=>0KjwX&d6g`ewz7xK}Py?;obk>XPqiAG)^S&Vu zk^N;;sZTvoubbgwHOOEfVGd8am}&dQI#-0GZFQ)4Qjr##<9Fm&oQxWl%M$vk1{aP58y;Q&ma+T8|1n+lXW9q;K0g>U+^Dsti`DT{T)N=D3+#=w4* z-mP^@o0lNH!i>5B)z~=Q$v_wAuuF8UwVO0AAKt+t$_oj-u;FPheT!kfLRciFU(v-Mdeo0B` zH9u^T^fn0f-0!3ESN^h%9I_3Gy8ZgS*Ty0Zm6)fbI*zcgV97Ya z;X0O;kIJ5i^j`b!xJkrQ6FO>H^LHO!dE6+V(m42j|EzPH9!=uBayK^FZE5euYK8|U z8YTwhn+*ClWIidWEO`=jw6vW0&>d6)mUPCtWhjw#}# zRRO2)(`X=h7aD}%_bU`2!=HB{pG9r?M>iA-y)J}2@B<}{mfBQZpYZ*Bdv&+r0n^T7 zLoSq4JZ`)UX>o{Mpew704HARubUZ49xQk>2P(4Yhmukyv1Tp0~BUS4~*^%S@>Jy|0 zbYnI1qB61H-|e`u)Uf?9ZH>xemUZJ@!K4MjaOqO7n>3SQmbN zpKlO5hHl2{E*Vp|O)8J5@tRk(ql7Y@y8Pu~TtZVdHm{?^eqQzZZDjVSxayW^bLU4c z2x%8OkJj?X`)$O$zM(rW%?@Tf$>Zr*7QJWcQX( zsNDlQ^BqC3)y(WT7bInU{9lLfU2l48Vj+v?X_}15HkMe;U!z z6VeMa{jRc4u5`)gh4jBtcYS*#ZkeI(m4_g{e{CGqgaHPZDZRxS&A{656PYN5G!jJO z&jK%(%RyC}!~~=#ke?Bbp93Gm_eun;+6u;e zKM7eKG5SUXyGqlm2ndN6U+pO)D2uFGh75sNxFXG&2hF9PZUVm-_teAT^o6CVuAY%~F0e%9`g#m-EOv3=4;$=+UJ(WGjUuDmow?!S6 zn<*!A5yiTmN40^0WFA3dq{FS>?(`KydK%#W;`#{K(~(*p9E*~K{d|pxAp1Gg&(Cz0 z_gHEPAi0s#&3<{*ll3~9odu`P1#jydyOF3MzWJc{b?@s2`4vg(eZM{S#$riAG9Fbk zz%)a|r^=-f#5L5*p0pro61veBkZ_GNZHt#b5GjhO(Sr&GHamXHV+TDzb*jocXc{>O zw?Mr4ohYtN@7e<6rw)Z3z$i$XTK^FM<680 zZkl2@0PJH+X@;V?ZY`-pXA=C}KHdzRTOJ&V>hcX--bOJhP5E!8k2?s(6-SG#O;S$Z z+1TgdHqaOlgp-l@JCGL8pFw5%)#J#D_|d1rZ{jp$EmdWQ$T8QiiXgny_1fGGFjhj5 z<-5&l>sgAl-Ai1ehtH~Y)fu~bnKJXd77NF)2!5=EQWiN0@P_)dPP10s`_FyUzT-g* z>N-$g_o!N!ELoyILQ?)EaaRw~3f&g(C=4EbCmj9?#CV0ub-hzAI{L(WQQ;ftJf>Y6 z;#Ytaxb(fD3?*+9-g2IxXYyl-ALlC$Qm}cTHZ?SB5*I+$v_Vzy+{Vb-4{kI2Wa5E( zeCocVV)@25@GocCwd^qGb=#_ciP#!$w~=oiGqxjLy{mvG<6EZwZDL-_-aY6tSxf7Y~D|Ue!8kLv2mp=7bHYds<6A6%Fg?iQ-txWS4ahED+jC0)`MC#dm5H&7*nIyPzeSth8K?#}sA)(+EeE%agDmU#5rD**;*k|_ z14o{j+`#HPSv!(NQ*Qs7s;iU9CG_^$=7zkl+^Ook*2XlhP?UY3xTNRsb*C+K9bZhb z{82?5UTx&`wiy$t(m23Z8UYnTU=Bdy1Bksm;{sgRd_9SHifnj84eSWI0>Tug)=%K$tF+L~ zt)S9Em1^8TTvX{krbTM~x_(=Ca%p0Y^Y&`rsv63G0Y42%V3|%VTcE{M95_LvCHAcJ~iDxWioOgff zy5e=c%zR zExrYY$H$H)EWCTwb3vG==|7?QysSkWK~FU(9**Zhm$CKe8Id?l$maQ+H+f(huS%_` zb5>MKyCv78#!O2qQDWziH3xEomsuRY#FJ{a1NMy`COOqk-=<@nsRf9;aT^GI72=18 zoaXS~R8G6kd^1)%GsC%u>G#e0E-0-_aY$InRRkh(aqN;3ho+x=tMYN>g6h*NRo=aPd94lj=$)Xt{ zp7#elnr>4Mw{I$}4bFYdtefD(FiS!e$2h9~7S~73#BLPv>6?eX^q}f7n7phA!sK#A zoH3`2ew{heq^bqO&SKW|DrJwBD6>XIpCFNOW1E|u;r%-zm3sAFoqe`J*;L~#Nzh#1 zlOE3p7WbgGe7tZM42q%}!Q$bJZOEj_A=ZE-oSUyQN?d~QL^-ytgWC4lTe!M%vuF?5C&3m!$Mz6U zY^E`=q1|*N^z~Xv3G)%Nw6Ks_R#aG27T(^{(!O9UKfo{`(_>j(cSFQewoY%6^`jpYO9PS&~Q*TskM z@e8TN4rQgq@y?>)80LfVAkO?@TXMkMzDuKpuXbk@%OZ^ik$yh>mk}9W5DR>FJAlgtOu?OaF)W_MO+2DOq|uY4 z-#_%15zo}h`EzRzJV;gu-2fp|Ml}mDNFE&_Tnq}!LNvrzkO1%8;f!KdLu1M5@B>0&%!5)W}Mr9(}bf!wI!9=m-*`GwG|kB z$#-hLnA9^X!3B^G1zVsAzyN&=SL;mTjv+ECP^ol7Ov<=-K6HG-=sHyz({Ew<2==DB0MI$Qzl=OJ(3{(JdL6w2f zix8b5+zqS0LYE)~pg=J?qmUHMyhDhzlvk^+6q#4Q*}A{N&lJ)|b=`XfWiEqBXMz;f zsMGz%OkmaB%UF+|w4z(By0dcN?1*QRxVVftupe}3KpE)}>hm?i=__aiQNyj2jPS}s zJi9GcTkW1+M3dE%<)(XnaBI2wYmwi?;DucGS0iWVJ)i_-kuA=}Ws*;lHITRTH=IW@ zV}PD#rT`f$K&MG_==cGueO;2Vmj~6k-pOIW3pga1yqJ(g3Ryr2PhXkd@={TmdK_7B za}pQmm-jw-Uuiu5obJ}1e1=H{#T^Lo7_f4kV9--a4{(nOKyg&nDosZ1_|fK|FCuPf2&Q*2eB`%MC_Zys;fKq_Ha) zFCk=k1gdT>wg8t;rxNTlc>0$EDpf?~9kvou9PFd0?SI;gq++@DBze9?*5CytGoT)o zXj(I{iT(znN*sT{VBu&)R0&6JWIy|MAHCqe5II#t)&h-t5PTzwyrcIoa9LD-c#Tld8LgzZX4(ta4g_7Fs ze0jDi!f;et!|WJy+eqFRl;PApUXnJuc3&5eag#nK#{+kGS$dnreaKOt1*X-q3M5Ek zLDfG{k<1-`W<}Vaa87sI_Rsm5qWCzYyYp*76g0{$_G135Zl;NBwy*lh*S-VlMIB>C zOmdo!V7#9s{wU3cxVKpgzADCMlzgiL?^BZ+XJ67s^{MS1IG)OdB8d3(KufwR63jDw zoZeXLrmDB(bE#DeBj2OWl%hP`H&ABUogMh43{}p=WECX);c6GmWHXl#rm4ohRHZ_t zIF#TQ!oCzGKl221BjS1Qx$fhn9=3Bye7zUcdF-`$I8o<=`HS4)q8-T-*CsSBjWJR8S&VvX+`1HyD;j1k$te zXFB#gy1eYs2MZ5b;uHQk2k*8@tL$OTi+91)Jjh0tvr(0J@i}l&682k_x-=D=?za>! zo)g51%258gQOg}(NIQr`S>0PhCaxF#(rR+wcx|LBHDputpuk?39lNj?ip?7DUO~~pB;8U#ENBR6me*qk$eH6$eMgkK#8=FKF!Y- z-!D8>7@0R35HMOoQ1s&)>eiM!C1+J@=SY(NG8Hp_){=-n(|tidEvlL-wfa3S<*8Du zsZy&y)B63rdm-+WmcWM?yRNcMnynMf%WW2KUo+n6!fDGRzxGh&GH z=iJ2?q%lTccXaGPI85rmin303g^N^YxvU_a2Y@nTMg3tz=#1f z&vC%9ZQ!UY&O+5&znWJfXC&q*^tAIBQG>c;`!8`#j@<$8Zg_&+?MwF^A5IELYUl0_ z%NkL*!iEf<=e%)=+C6>Hga;V}c-PVmg!hXdP=o8z z@m-_$lzWHEmsi~L=p9aR%JN&G>`rp=+yw|sOmpA>Xwr8Bg@}4q(Rc$(f!g5^USq&frkQtU+s{K?g%bRM8*&BaZXe!-KuO$gjJCCs>kh^b{y!0Vz zz+?5x^S+)BZ$(n~SH$y%8aHaGt*yCK8Ib9hJfI;uQCO!vS@598mh@f-EUaeorAdsF< zwq`NAOw#te4C2fh%*c7wWR*6S_k62$V1UWh9ofHbSkyW@?Qa8HYR{1&zRY=S0oBJr z#HeFwQ9*(t>=d=GoE1Ym$+y$0@mko<-%ytl_mna4VZ!mUkBs8UAZ6hhZVy*x?9wDo z1_JA44SaOHsTJra758<#ub;1Xw@Fn;8&Sy4?+LwIInC}#SCtVGBOz3;`*1R}nt{qg zb@COb?TS8-)|gC_s`r4_x2hlou|y&Zu4QiGxg8$|spVB}6&*EL5_lJ5v*u=Xpzfjw z=OpUIQmD^ju5-7TIJ=!O|9k5QM(jjQv);JZuW!HKMM&5v%L*g(7i056!E%Yhdel=G zVMOKO6w)YJn7hw)>}?w+@1Js=U2nIm=7dczlO3BZa-oLz`4(+?L)*}XX_mC9D2xUN z7SF~4DPQHKPT02tU4-Lb4ej?;JYjVPX-RG}2;<}9%K_JIe}6?p0)P19Fn_21lPBpr zm#6#bxO%4DjFkCe3Z}9ec-_|_3ag*w)JZcICf290M+1dM8yhX0LoqpOv1>bh89B+9 z^CXck)8M)Kefo+nz3XlVp0ru&X@ptopY&VT>)*G$%i-b9(hoMiuN0fzbXKM?wdcYMxkA zMlm}EJ;O^=?r}_YKrTEWrg9nKFW{^``xCT{WDsRoIPl&}t+UeMjOE@B;sJa|knPhw zTB-fy*j)GQhqMYb{1fZ;|D_75) z?_|~&m-wJMAo%z%QG&;1S2I5yA3GBMv3qC!{b*+#mIHI6AR(F4K(2Z)#<@i~OdBVFXkS;}V@r1IitQK3EV3Pue}gI^DL zJa0A>GxGg|XWNcZ>MXhj?l8!Gw|Xq@GarzK&CNCT0ZIpFR2h%W)0P%O+@y*7mxMzO zodn<(_RjUXcb4@GuQlR~Cks6<)i!cI^Jws9)0)bNqrrH?3hnvqDZ|2?EZRQET3 zKj4%q;LI|8)75-!pS@ahK^ot4>5!|?CvtglCCFr)tV=2H^C;PbzkOf|YV%K|2>-Zb z_@5P6@N;m@&qx0%i%LwPsI+LgF>xZ@?fjlF~q$38bQNV07GaorNU?{zd zo=%CVvm)-KBZOD2MhZn6 z>ywxEZxzB}ryek^b_F?YKAGcXFluzsrg2f1^#Cp+2KbqkZI*60DQXh55xjxdX3yN3vl(9-Yw^*xV&gfj z2GTF>=mD7FawxoSLH-yodSGB+1ut}tx67UI1y`0iSgRh|w?5PQK%9x=Hfy=txLG(_ zphOvf#fuoIN(b)%Bn!Y$;hH|7Cb<_2lk2MtD*AKLZAg6XtJ-COBa^uKG@n4_VfvEJ z8SG%gw4?w_tK0JZxdi$5DLOZozS3`pl&dsorbsilnapF?b0V<02yhscs>Plm)uj2B z#+g)BO?e&eB-d*wOmh2M0{F~hCPA;y?90T99ZNfKZj7dN#(q*g#(zxG+ zo{`9)){mt((SS21-x$J-#`Y2VdPFPdwQaJ57?V5X04SH=={-rXje2b>QnV?Hv<5gb z^|pK^OV(R`aXpaZGPv3nJ_N{JJe~R9MmzW%C7M-xY+VuRfo#;Gxgf_(`VScpiysbG zsYH*v2)%ANX&4adtYoUcE%@}Ue@TjxzGNCGLf}CpJB$sNCXZ1h`U5-9NX+Q%&_Ybk zu=%Bzzb2`c6X~@KSc>6aQzPTN&%rgNWrAAb5=YBO=2QK>F_xo@ud&hxEN(0;+&$i} zySJ0JS;Q9aM94YR4o79HZ*}QTow=1L@5s|y;u^ITyIxk zz3SoSlXJx{7c-vW`wXzTebQ8#o%oHd*hBgdTaD^f!Df6#1)7(T{iC?S_qQ|g_C;Nl zAdw}HT4%bPatO}JSU}pguBFUJ4hJdFW#H;pc%dWbl37xDaC{JafmGsoYx)AO&-})k zoG!la(B2J82D$- zaB*^@{DRla^Frr(+j033jlB!&0%Ix^qv@)`<;h2=OCjI%IZTPfrOj)7ko?Wlx>x`T zNNa!e67nD_*_r4VNJEK`KYM!dM%o&{Tqr76mtS)EyE%TgDFwgzM1Qzrz}xF7mb-4( zZEckiJM-cZOCLO_ zY1P43_eso{y|nje*jj*~Zy|u_2W8BGD<2pvVD)B-&kG&zSYH7>$hbX#{-^)Oz^PIj z6*6&A(dEq7FSN@a1>|qMx9R4>1K*7bxvT}q*)9qbG_IkhZY?^~-b*lzl{wI1=*8cb zu&vBJrr%|$-@y8;Q~w8hZyMHA)~$}MnDk4n^ zQj{W5LY9K`hA5U$LP1125h2oqC|#sYDI(HC5YkX8t*j`7B}tZNy6?|j-+lIe&Ufy! z&vWaKz(OXAx#k+pJKph*gxz;ix31lK^1Kqh8v{ydF;!gQZ#E~VwPHEbcyVCgyCde6 zgqZ5}YIcRMzbQGMl3<(hn0LuH%6{z#tzy%^&IrfeI<)({<&~PF|sBs1%d7p1tqBpEA%owK#X<#@}vC)6^760GneZ{K!8; zQIWbT3aI2|IYxQznuwzi--6d@iZstz|LcHrkTG54-Sa$Ex-}=Yb7KJM_xE(s>hi4{ zu>C}EpzIg(JfJ`}vQD;=LfE^!*^9)~cGxv(U?w}X_Km@4V?73Tj;1xf+@Zw7-eND> z9C$FzI9;7~oC@^#V)F6AQoL@-his^?I{`p_>8WPf|H+U=5xckN4dqG{Ci;2scnnd+(B8S`+H6LqaY^hLHmT$o9j-?8;XD_#L}$Lw_bJC&HY}uShHDNH0_7l+tWc0tGlNd zDRyC-_r$E$eEsjE|Ld{B0>|SKD5tFEE()9 zlt9f5ix{s`G05o=8^By(^o@vq?YAltTd=dxs~ayWUB`Sms7Qf?BLFvcp1ys##LpR7 zaTPWZ_2q5)o$9K{`%s6R$Wx?*w5xu|5>B>TA4LjT{E@wS9fcD%*z2rH@89`+7fVuP zWSe&)RE9xJ=HJB#Jx7-viFpv{tKE5-rHc3+=%Vfx4XxR+rc4=Q?aa+iChplj8O~z@QTvJS8 ztFAs5elJQaXrc0vGm|BUoxbu%BCL{a|@lmPW@Tx#L@23uf@kiJo>w3=}xC zC@8%{SlpL=$_?)<8OfNAh=O^o)~4IHWMC7_O}fIp%fgj!+PR6JRmvtap*PIINht%F zmTduC7y)Qk1%s-Xw;V9wt3O)ZbXpx$da*~i-d7DwYP!N*15Q_Vs8J$Ls_|B{MGQ61 ziERCTvy+39y8d&yc4jC)+Y|(QwO2(Ymm0Evg8O1dvC0VZa80M3i-@>pY=OoVb*Kf- zODuHw?(B!bRrA+EftdZCY1Q6)bCuHW*4L@6uMV$JiwoF7>xoYfMkE6cu0R$Jox0*vHva2veAhy!&6VyU-6E-B2gWldtC$vwDdRU zJaY^EM2NS!*X46&kdoY3?i=K*jvbKiIuN$zM8oz=4R%2myY@|PK5<}Ee2Qn@zL%SS zHB@%qcj~ve<9nBJUo^G)u984aTrCp16p#>NYaNA5UF5{cnzwR-2&)~)XT;aKiiR&X zo>2XCuVm~RyRINVf5IxYC`J56%3miAi@&9dCgX(+BK#}!`xK@nea~TT!%XtsNvLvW ziX328{|9Xyh2imqwu!o>^G{E&k3t6B^0d#BCl&+E5$e=k5{r2U<(iZcSJh?2MI#gG zBZfyYbA=DA1k==+Yzt{2VI5LJGd6Bv_^;y!>-7-2 zFq5a-5zD3y4V(SJ+2NW?dh69*gb+RYEiT3!&zxTQ{|h11|4E{(|5NYfUkT*@tLy)s zgTrbfB0mjDe@EWSjGzW1d?5K2v7!)U;vzzes~aSokF8{4DWs`Rxu3+l(HASx z8?)vdJwrD=!F|iZ%|2sCdUl`a-c*VCtmmp|@>y~Sej`vz?El5Z?ZQk%FC{%+?YboitP zQVlf%ZdvrFZ%UmPz(=sQs7X-tmZ~+AW zmXsMU2 z%}zTtiuKy`WO{!d7k5cteH#9YQ(aljN!>kNdN%c7K-~T`lMDXm7lr;ibRKF)Td-?U zb&8>T@?J?{3qIaJtv^)TIOc%FImK?*gW&G%GP}6sBfV@_*O%Jlo%k(z+c%G7?s|S{ zY!2NB(xX9|@%KvRE=8R{EYIGW&dZguks0lWBRfLe=I-P+Ni==q8#-Tv9}iWI-w0oz zVUrsYL!oj*_}4&}2a9q_{{Su7l%aRt!$S=bL3Y;eoTDvaA(zOT+{j_%o!f7BEa|Lp z-oCT7ZS!&9zYI+cwKnwhB09i-HG}z+oj?F`3ynvF*?7@b^sNln0wIog(T`{^3LJPW z5u|nu9uqFDZ&OsDAYxd~ksA{IKv6*llui;ou>*iP2~Ue8~JD5fA;FXbOugZ`gk0ETUqDo z-8ZMFiapRdg|qY_di0XbW)-+YU9+;Q<}-6g;eUH3&k1rO>dTH z!O8&d1^1W?(#mIci(wj33+=$ehm`?of|Ynh{Lx8*nf58>4^2YLsXABVIMsxkHma{O zp(MWIRyKK1e(uR8`A&9qG=I{y47r~-axetyuod^W%p?&FXqza7VnHi2!N4308?$cZ z|CYf?l3yClia094CWg0tJVoDJ*E6@Z@L6C;$!Of0#y3_e9d1uKRo%0)NRnxw*=VvT zpplWtTyF=7n6Z#@t+JSv$W)j6KPtEj1?#p8VSr4nCcZbfD z{&ljld+O{nZhiL1n~|%d=-hX}6b}ajMT2$DA~FMlk3YN2N+hZu^_sNNnPTS?_ZCri z!2Vs;XZXxygALt<6bIwUs@G*v#f@H;jdGi+4BJe5cNv%mO(_aoB#9x}4)A~NwMtG4MW>&m&D;S|3=v~$68emnS)yEWO zX;a9XdgKSglRYg|9Tmphvw%jPK6M8K-vh`6!D{YBV*D@THYu#7wdma4ZQteAX)%m<>a3LM z8#;Gw53y)BJ=ATs;c55fcB{q_TW@_lp^Tkk>TRlL>iMt=$W|wrMv^GGacjFQPU-x& z^?nzB2H<@Jxc3VR2H59E+3L@rBnLf0Jk!8pc-NG#vLerJMS*9NMA=bh^P%aG#HYrx zB)yrr%yH9ANCn9tJ2du@L?W|@#%uK1g)AteP`;-4J3;#_7`9d$nnC1YR+uEx)=ctm zNg+%<9?{SnCWsif){s+&2z7O-OKM<`TVA~euFPeW$ENy+97CW>qObA;IedC3S-P$i zC&o1~lmO1@oCta_PQb)ChfRR8mU7=ASfkR(rEN z?~!rrtzEn|aOI@~>ys9t+nMF8>8rAXXfso%5}(2>|JcIP0!~;0qvo%prtym)i~z=g zLy>4kZOn`Q;ZA9w*9T@q-lUCHNnwXk33~tWcmzB&GR~*ddyWtJp7v=_ZLgHPT-CWb z;gu3zkO~01Z7k5~Dc4t(9ihD_r+5n^rca_<6d=mIK+*!(##p$jlP%~RAuhX2(F&R7 zH8Hd%({DSAXH>@1a?Ztwxb!)TN^nNYp2G1-)OCgYj&qNo{Pd}KSrF|t#DN+VCZo)$ zVhOnk546804ySQAx)z_kNh53e+G{;_Aw-^oR*xZD0%$eIf>w39ImC<2Y#QgLFIM%0 zXnZ_eTVD4}X(8p`5j*~~#{boFVwiuWAoqV(S`PC8^i8e?mAv1KX`MvrQEmW3;Zv`| z8g)ih7lW%U$R)JBW0Z;BL4F0aNW@kdJ$heu02yEMkE{Pw0p`WY+i; zXu(=iH*`osj38$$zviCxYHwjwhDE1+}uvw-2CK{_sv3077{x#%%wBYMO5Yn_d z7*cF`c-X_1?z1dp$*xhp zn8hH1_}QzpINzte%KijFmzhw|dEt4bb5+c#&Tw1JOGd*b!*vgorQ`!zpPAFSzzlmimV#nhut6d(8GYJbB1%Gm(ygzqbMs=5g5pDHnla)|Cy4+vr*%sW=b8JHpH8 z`G{B;R!{c??3vhO^mWH$R6c7@=p@Rf5cWh8w{`lB;?mkS@pBiodxM!^l8RAiUb+fbKq zpLMZAbj59s2n)_^*12*V85LP4e=5m)=BC%Ie)_3vyXgtn$To%wQl({Yy`je8m24Y*V^QKt6`rk`&rk4Cpc4L^f` zsD=rj5F~O&)DbrcS(?H)_UtaIk!2!OmTP`#+v_+D+-V}+z!>HY zu@9PX2?-9?lB`?TK9yXc4jlHnOFVSR7nKeUBZG^NtB?c;aYM43pG>{ z;a_mmIkI2TE)MZ2D0?%kW9xD6I^c>{tePE0!sj(DfO6PIF9BkGj9t@XfzcoL)voB0 zYl)+_$(;JmS9FGlV4Jen_01MlZb^BLOAhEa4>!ZfQh_u0%%ThQ&^6yh%2ratB-~Lb z#R3M9`AXf_VRjl)KGV(g=r3lKm!)vUzT#!(0$A!JQ z>pUq{L6(2oISOT%q14gFdCA1hVD*;|K#|H1?#;f{>EpEE%Y3kxl!XQpN)G{bd<)(9U9*FyemFd9w`b_eRE&`k6l&2r&ou(P+pK9BPMZSCnjRX027Q&I~q$4 zeQ8{{M%}K+b#Fq*&Jy=!(8b6xyec4dB{}Bdq-3<6~bC zQj>fA*1kEMnv>MVm?5&Y?lljez7l2V`gXRMe*Sacy6gCQ8&mmxyzmhhzQmjUA|q3s zBu??N-SWed`Kd4&Zh+*W21XZ0G(u`46vI(WqJ^n#vR@%39wejqmBA#jq1fzHiSNQp zql0pPC38vOm59+MoyDycLET7`&lfVX*+j05L01NeFvu42RFu%RW5`sRfRqTabS7J8 zN&%;fotv1qh?=!TNpjQ378q*ACK(vOM`{Yk`>^VkxHYb#x?msE=Jb+65>3bEVv#|< zcBa|ubZKAEc_DW4yJV1)`))kF zP1I&)Z00`m0yTZ>%x9BIw%HbzOG@KO_H(moQ|FY>>i?(&u*CD|>hC7!Pa41(pVo6^ zmS~%xjMeHYxQW%WBj-@kN0nQ#YbX~ntAZW2JVj{zCn(mUkMV}d&A$5mP`O#{vC=_g z$TRaqcc?|X?`}J6q4OGgz||dOXW+UH<4FvlVmQr#JEXP9OW8T}t*;3XoGNU}{t1bI zxgxCGSUX!Ugm?(Fl8kxrl4)DlTB?3;OMUROW>dWxa%L&}Q$F4J%|KmMSIb73bbMe9q)fUN+d`Mv zoI&-G7JET7)dM#muB(lA?U~IwbuRVKiC?^VmkL`hg)TxnE_-~f0~s`42zM~JnA#KI zV8wy{LjpBmf9?(4U;U9T*B5QEATE_V!f)=JyXwD6 zg19yrtd+205a?{6(w`#DH`V(^g+y zZp_KIc5b39TC2XRQ(q;0-*ARrvHreRv0lRF6Im>Fum0&h%KpCoVn#G`S#8)8raGlx zWYUDwL9REEL&F7YC@PKh8~P4w-`9Ssf5N@1bmp+t3uXoH<5av!+o|?zA<*v-*mYFp z9C({t6pZN}i~pOc2RC@+M24-N6X8-jwCSXEU$Z6Sw*kTo31Wb(@G zzceh_@tC(}hg0$TV@{9nJbe5xR_SCf4B7?yM={N0J{YpZlWE99kvg#p)lcFqPM_+9 znXUEqk~0gmd-()0Zp~!2X7`LG{bH2uzOrtM$lY@)oYW72mxpa$wfoa60?qVdMyxx&3Tj^Kur>$}A9W*(j2KPt;hClw(b{^w0kkunrdkDO zjY=|3(xHD5B=Gq*j9h1y;IcUM!tV(nSE@fdw+F% zK@PRd+rEweVv$V!zpY98pCR&p>KFfpP5dw6?*IIr|NX+7ZWDN%z@x2F?#l3zE3JZ)ofc4{wZXa`F>GG+WIUa$RhpY0gl>s4pE+9gJk2(;=HNxn z{jS~X;&TDbRyZd+D8Hn5fDi1rHS!ZuEF;MGNjjQ4=+{OnBFUq8b?UzQ=hc#>Y?K)u zMmD~lwlhz=UazZi-A(?Lbdj3@&-HDsHEHFzm(#t%LGKn4HqK+g6y@XLizo|#s(nN- zp;;MjlXk%5M)Fc>D8e4aCslhiML7yDvcy~E`jHovlZd8_IMn>nXXM$hw0o zC{LBRhe>(z{X2lq0UYey_YwiB1}(#X<@e8mqNbV+_2f6DyhJMayg5vQ{ibBU@b|aV zq5OA?fUrt^71ZF5ANxuL2Ky$qfq`COD?kmYc{NiDKfZ|wK9#Jef^eyW#z1a#iwhN- zU4dIi4H*ewe(=m&OTL=pW)0@62 z$(^z4-;}-xa?uT!5rEFRXdn;}?Hd*2(a70FauDwR%^FyV8c(i$0%fH0AY`w6E!b@m z@hwT{(7)8;-3)4H>GTa5@h#xYdHVi{`|Aa z|7`N#p2B}l^8Y2~f<~crGubR2=xE?cNpj>EWEyB+w%_fMm@Oj}HH)vbym3OyeVcy^F4F40n?L;q#72*(o(K``yir4y^j zjohJmDH$%Da+Z)4_lq2g41jW&CQ+HfY|1v4_{U{E_LjTC{!<>;l#{90 zoS^jT>^jJxqVS!|gQ3A;Qnh{Gz2ei}!S3Ibx@Z2z;7!i9p(}I%=2;5R^9E}u1h8`i zRoG@GpV=rdNEZdf+ePR^*J|ZaH}uH0`)F1`7=mTDE<{YKJ8@hxlQ>-%a{&HOCq6;C zXwhIp(y{T)Cx?@*{)oMffBN`;*l_WGB_s0B_5X8nH~*hYFW~`Y>~G3X9TDjA10W(& zLjXa430F}!%jBnz&cvcykQ&ikJRoowEXj06_CBN#0CEbS%-)(N#Ee{$c$1iN` zen47BpKTYfd7kLCiyUy-b;&oSeYn5*J#Rju%fTHic@N{{TDznopxf+^PhhIsdBfbM zbii#xHz0HJQ^Go1=U&TaGgQ50>1HK>n38C8gI#O=$$YcvhX-_O`Od(_vP2Mz^m2u1 z#MwRHl*k}lv1C@TfTGMP>JHgOsA0-LqYid26mbU(r5=*^@$~Q#YxhbvQY3Q=Hc;;} zt5v0pFR^hiDxhvfpc3kya!LN6rqA$B5?)PiUliiLK>pzrw-u z`{)iDGy$YpyGtC%T2lT_?u2X=5!a7-RH=mgT5?XG5eM{=XO4E`HrJAN$CdKqSgWkw zo*B~DxElJfrUG?=gpVND89xN(qo@L`Ut6GmnV^dBMCr-wOaXEVuV1T9!X=a@>T3~2#MsLXTFlN3r%ss;0z*Qp+b?*;_}RSzuO99tHw?mwPTR|@{Fb8-Ygo;bOV zo|Gve+_J-y#SAUSQ9`1QjbPeH<|B9FJc9tTc(VV!?#Bd6eG*Wo1d~pZJ%WC?|i!Sl@#2^8!HrC!SRD_=<-bdIaz>t`=>82pf~qe0y4CxnUM0P6 z9LoFr*TBvpJv{=lRql$!h{?%B^;$@BqBZ@P0O5%P=(VRL$}Q<{o6jYEX&%|tPnJ8g zd|FmqU3KgoP&4Uyxh~aF_u27jdh=q%UV!rqa1le3M&h83^ayfV77S(}t-dG51882F z0$<6JXgc>(35CYFVX&)+ki1csbzQzg80qHiR`m?#Ce^x#Y_o994){KCwEd;&j57G9 zwP1k1zvS^ZC693VsWBpa4U%hqY{~#I{j`bHMZq$gty4bKJsV;*d=}YOyo{O8ck~Nb z`2^A!rSEr#oo@Ki)s{9sEL{@}@|Y0pQ)h)PG#&X(iB`V~q#JJ@V7jr$PZ8*f9WWPN zX(-d6o|XVdX{Y?KN#-kG3>$MKCPHqrnWe^o1@h>h>0ge)s z9`tCeTD86`(y}m)N(_HUN$NAyD$O|uvKS>U9Fji$Qj8lY28!wMvQBn#GC7vZR!*>B z4knB1laAzuor}UWPoL+xB4MS9xV}$%Kg|(UsK=m{KF+1SUPOmT0- zj#LUYOk$rNDS0@ta8z*@ba>sGxaONv$Z){Kn5`z88C4nl%1A7!#*NS)7rpQfD+hu{%-3cbbby!3fip+t@!oS?`=6P)IG>mv8^iUFkJWo8^c@*2z;My zC#Uy?V12r3J%mxVVw5W$UfuYitFN_f+IK6GTugC1k$EI)zwak}#pKJ46?qQp5$pXn(wcnAt|op;%@d0C zsMFntLGI<0c(1Z9Jt7xoHQx=)cv6jtpQh@Ij};D30`^O)o)=yROr3^OPy+(Lff>UE zf!JVSD|c0YWA(>m)Ycmr5))fyuwxnSOj7aWh-Ic2lXMw}9I$MYMP|x|5*@V1ZOpUa zG4C^iO-b3w)@IeCdlcw~0b;5-g34d&|F~1?1l%DICJBEv+ zAfZVL+gq{B2YaTjEHY9NAR;!a=-Hp25q-*ka;7Q&9jUKBTTc=n%eE|k_B+L^->1j8 zzgzJG{u}|>4WvTP$;iGGsG(f$U8}h7@FVHtlvJRK4>I+}FZLRlFe~DZTUB4VA#qX} zb`~9}h$hQ^Se=)I|v`3C&3o^FNI2&lnMpTsXZkdqwWW6ilz{c6!1q~Z`WQTt*slb3~a?%NPZJtv88 zmHM56P2y@j&Mjr~b2vxHCZTOt|{Cyp~Dx(=)h71X#h)23Cm!I#Q3Ayalk3CqGN}ANeuM1pQ z_FTX2uLZXU`04zBt09lPyaa=X)2$+^-um#*IJu-ml73GMG`@9vh0FQN;Xkc&U+;mq z0DMj7GM29_EmjoN+fzJTdS1MyVDyn>Z)8SHP)7DTXi=<>_i6~l z5edS+{n;zK<`@{hPecA>*SOd45HU!T6y_R|bLOQ(!QFw!9lvrX>VOSB3&wA1;saT- zEyM~QS}IuDF9E!zWi-UPF&l)((e?abK=1g(U=b-g(g5V;C~nzsFh8npc4VEzYhpwR zuBId(ASL`|rTdy@Ai*bGPGGARLeMxTo~HTe$Yeu>-yj-6-J zDnDu3uGs>Kh&rx$S&-AcP_vNGD}%%q_2+E%v%uGVZ|$Ic05a}i%GV2IYuvs^)Fw2` zc2UV{dp~jfR9ko<+ReqBv?}0S6o`6DbCp|EZMw{iyB20nJnNyUkqm4?cI{8=^VWB6 zuA&)`(#uo(1SiS>nhGc=I4KWX2FbMwrNI)Xk|?eC>!@`w2V0@joai5YH5!3N?LXYh zrv(31t5G-@GRsK17SU7}d8{VG_V*24mBpXoXm<*JAkw|7aysHr&#c?|H~Nk)eV1kJ zrYE01_mR%?ujGUn^Zl59(6mIQp`WhykKh0=6lN` zy<0hDNW6%p;ao86_CrBoepHNmMcNF3TUq<;ivZcqn~uj$eNVsMDxPoyz1@!3<65r~ zo6HCeSQTSZ5P7}a6ZxYPQ5MN1{QZ*3@!ZJ;1t)v3biG?=zz@60VUed>BFd}CZE!!GTBP}d{b(%#TZ zGNt6Y>%RQ-rOl}oHH*+fJbZvWz(v<$(G}^kZD@zhJ=UGkV!|SmW%QJjzL4UxuS0QvZ1GoMVPi_T!aSOZA^|$C}6! z8}!a%V|)$DDta7tBI!=;SySQ}uZmvkZn(}oWavNMRDItXn~zGZEC+8aJ(JAKF%w^VN0#a{ZHajc76 zZ#bc?TRlR`h^kH3CB#y9i<6U0>+n7yt1l|HfxGPjLN<(M(77Op#;!6C*Gq$;CfuM- zqi$*P!&<90QjnODfY+pL8K$tjIrp_n-=}+a+3gn6twf>5YWwZ1l?Ox4T{SNyLznQv zSHxId2z2LW3o2QyTWf!`;A+T^D@wxgE3g{x0s)P$PU3N+UQ50e2@4bb#_7#tCq68>y}pPd}HI&Q9CMlk`{?>HXgN2aBi3OtVhOi3 z1#KG}S%HL$vT%+3rB67!?Axbj)2{i{J*(?w+rGS5-#eEnt?mtv+9w`8+B0K56Kb4& zq=}ck2*$PGl#yi7OmoLFinmzjdMzGPnd zya|5D+>`R5;Xxvw5E8bEvA(Q)hjPio>-bj@=xPw#M(?C(qAS4Eq!$pVf?T98o7}6o z2L&a!UmNLY2--ZKL2O_pXRJRu;nja*Hgc#YIk^{(Pqv6mmpDgn$N6W6m{kgN0^Pfe z89C$XxM>~vI*`RIUEXJRTKG+g4&X&MhQTBTTwBRGT(8LC1`L!^rIDD$r24H-yJ$O* zeSHUKXUpQ6TqN_!cDqL1thzp)h;m=}ro|}nx|B_fVd^+6lJA4*@BS=^+U4Enuz4K6f))DnyXL7>f{2-zp}3Xfs|NeHJRb^7 zB8ai5>KULzfmH%7Gz9NoqIZB2mnrdX;_9P%lkWX2PM=Y_G)B^r#zG^y4V{YO2$f)-MW z!-FKw&5kYVl+sr-jnyP?3g;^k++Ym!Qicu*q!HZ8LbQ~u>mduKz428AJf)67nK1qa zRYf$6ZFEotfB`wa8WTs|A)0m&03`=|JvX@EUWi}8ct%uSm^Yt4v?u9Ki^ie`zqE_z z7nvmB1IPf1XklVXX&Okbklct-r*5z5GJ+NTO(A3vD<+(>6%q-*n<>b2na z^!7P01|cYStor94JqPwW3}73rTn`JcTf%7|Eg`kT_dJ1Fpfd~&V-H>Hx%A`h9q$G`fE zM@1%+hgTTF@0Fn9aHMyleX2b@&oWaAkZj36&Z3V9LNeN z11}cyM7~S%*ACB-@$`xoQHQqIcsCI4sn5MozY+c`qd$&SU~{n|Y7O@a5E>F$!);}A94Aem;F9{m2X}&#w%ni7v;EWA)GZ@cd(ra(IKpJg9y`_Y z{g201>cnlQy@bC=-@(b$qbWZ%tMdn`KJdPA19haXaIj(Ny|Pn1RPbM^dwN36&BIkP z>mqpz%_Vk66U@$`*YU#F_@O&AWAqhs9T@ZjbQT1Q#pFRo3j?T$-O^BG>j5J&>0FIKHe_3y(%>Kx$W3v77z%ZkH zMP-EhCj;zySC#m|!H;4R@my)*wu!Rx`Twx+K8_HGVN;aaPE9DExHxr!LPf)|r z+V6)=OL2py6X?ZCws;8zV+NZVve$uT8W7w@*ksk#Z>fe>dKSjpZInbz?Q1&}nWZ95 zi_IULjPO{9y3tk1TxXqFyCvO2Be3{Vxa{K|ECA```@Tn`u7JZ8j>H1(3yg&GO)1lB zRuDske`d+mxk6$K?g#lfm^{@{N(5ClZlVQuEyWE0qM72EWIKF-*k|R0z2p8~GS#{m zc@?5}I>hu?wBRVayw40**&Mimg1s8J0+*N z;}&3|>&Y!@K`q9*8Iwp`0y|%~Tt3690G0!ijEXlQ27@6R(G6>M%Webb3e%m3OL#MQTp zxbWd%?;nO~H$Ux}(kfs4<2wA9H8|qnp~eJ5LXZ&u*6(i}A8d`y>50b=R{#6C{EaWD_~Tx#kf+ z3#0&IPSl!-T?{Lf7TVB_K-VoAc;e1#Igll7jz_@LZ!f`0R?N%QaVWiCtb=aGw+he@ z(!w497-ZRF{vT^*G?wuu{Rz~x6U>M~+j`6_7v)bfu{3Mq7(d4A$la2HqVsl_me)Pa zx@|O^`DdBW9^Vx)2MmiL$7=U`1!G>mnGXZ|tg0_EatBV2d%0)&t@IuY;)gQH`uTKv zR_$KD=)SJL@5;OMQ=5`3_AffQvY}rdB_ysS8EC`vNz@<_PL+iI)bm#-RV!x_HSC-X z@oUw6?Ox&AmWOyB?jf78sC$ce0pzdFo-J)tLIHQcX zYaN4qFGDZ(0HFna=hh74+z9i0%i3$?rjFG^Ljzte(&EgS*~6?qnV_3_3V3f0QLZrr z25|4l1t>dS-2%77RdQFfwB$E;%;R@d0^;D^y0AJi&!uP)DI{_4wYaJ*ow1P{TBnE!P~T{fT|* zd*jjIYpKZ@MKQW%ytV&mWSi~%hyC@Ma?Qx7y}tGaJItPN*9+Xc*WuXVDTLKTYpH!~ zkFqZsh!fCIXZvr1K_HQqj0A^G z!Mc{8H)q_mA>67rJQG-LUL3R;J`h$U-&C13y;-|2!c4*IZzX=8Lbz+cB9?m|H<&3s z(y4R!4yq#G0t@2p2u0(%7i@It1wE&dtf+lyrb}S-lZrdOW+gqY)ayh{^GlKbZ*+UW{onFhas$hIN=M?b|Z*08}V5IKB$QKlIT0ysS9>v}S{rJ-zBKseGgSgAsWOeE) zglowzydUW&VkPSEL!ZMuVqLW+>rPG}`eQd}hkDNOZmaP|Vsl!{TRz&feO(M3(LLaZ z2(>F@IP+lcdsHr71a`Z{s}Nm5NP&a5Vj4 z`34~1y8gtY#a}^BU<}L7IX@7B_cQo}!#(C2DnLE>i}VU8)M@T4s_hM-*&vvfZtvE$ z(VwbKV%f>%kJjD1Qu^1=?uG~$lM>@aRTh(Vp@vZIg(%lO-Fda$H2ol^0gy{K?M)pv z?6ljZ^8%abs}X-J%Q$;$fGbN2;WRER2^-9BZ#*;UKCiK->Zs4Vy$g3h$`S=NoT^_- z>k_EbKwRA5fG(o24odoO0(sl@lXx`;2MWhAyyvo^WJDEv489m6R8>AxRZY_0_eGQ* z&+b^qN2aH8>e!VM=fwWTX^6z4I5t;bz@G$b-GiQ{Cs=$`#g9qk*wUw>YcQ9 z>>{?_``#ySxc&we`4k>dz@3$u)~H17I`y_>j;s=+ z6yajo97_Tmam;P}dn<^;1GW{!zZ0p5A93pHzd}r}WD?_gE53V$jxP&{W(oLFMb{*fOiLO-rrercBBSV8DXcu$gd2JAJ z`U}iJT?kEBnMpkej(f;%EXj9SsQ-*iQssuHaPqa_{ej!S4&DlLpK5{(M4{GPWtDD zCFL!CfuoJ?E5fgC4sHtxouBV>ceQKTM5<}?KHEx408YC%>0p=V$kt<H z{?4;)V`DFhbBngUdQtqt-X*$)e)&Ne0hx--f`K5E)?qtkbw!#TkiuEYD2H9XNy2s4|t`t1nG zU~{J(z99G-riHM4FKJo&?W|a~_OnWL7rQFo z)&2SK$L6B?SMcF-$|mir^heL*$kH=U9$DCH^!?>K6u5AzPF$J7`6Wnt`(50<(?;j) zetD9U=MjE8zODG_c}KN9mLzx*RRK?Fi913DA$l~TDH_%uYOW?W68S{Y(qXh1J~68G zAzo2ZXrEoErVI2}LCkwaO7ktd3V&%i-V|_+Q+=|W1cvOH#WBTE#vP~2024O7(ZF2M z0+Q91m{H=C4_Fyc3IX#jG?_PI1e@@fgSjmuOMC9w?UEgkZ>#NRiVB|lJ5)-w@c^IE zk?VF-oKJSjPgpU3o~JF9SSm`3BMU}6$47R;|BJmhjcO|G+6Hk%M2G@{fDjdsvKZpP zpiC*H6csTlB_IeXr5Gbn6d+MTj)KfXN+?00AR;0nLsTXiBZQ$8HOdqTN(QQAjGUto zjwCtu?c3k#Ufun^@2~IcwYs0@2MZRkl9O}xecyXu``XtPRxVAE`eR8nQ12x+K*Gns z5vY|&xjnm$RROFbsG3G=pxElP!RiC@%KCj`$}Kmk!c;fdr6g)_6=-yzqNjb z!l_dl_uff7_JPu(Z-2`qq`D*;q-5q~aMR)6l;t{R(xxFJG(;%i6S|AFnvlFg+vIt` zG5)IbnBB=-hr0IIwG9sQsxMsLqnjP&b38#0M1CyrqG|`g)XS3s{4$o8cjbrxMzc~FzqFLR|v999hR{*vPg!U`| z^&|ycl}r=rIK&PijAjT43GMr)p|$O1aw=LTJ4mxrltF>KGxy zXNcFF^bPfRbaVOl=-g&p7SS7klF$!qWIHo>Ykit|c0K%IMpQri_i?>a&Vr>r9 zj`Vx)QbqLKl$DG1c4g1#oPDYnZpBTNHJkzu3G48uJzqlpZI;>+mHSw zF+P^r#XJnVbh4B2>#F~*LnFYWCF80Cf6S&ttfUe-V_J=Qd;2$yXCIC>uv#+RhW3CTat3nl%fXBy*X8eZ6VI zqDv-?L;7xj*Cf$*FI3zL$vKqMgB(pWK4s)${M&cbzq2|#T@J1CH8|qovC2zh&6d~7 zUyNyhoB55DRZCQ!KOC**GtK~YR+jW)&eIDum^E!HoLyTz%HJQpMYeKmEBuq+a-KEy z-p`gn?Yw$5AMc!TQ`w0hU#hSW7fd}D+#PNEZo$*N^wlKV)aGrAEbi4aPheYZ?8mAW2x8hg&d3i)31K0B~;g zfieY;Nwd$8-`>Z3SAQc>9Q%}#4_w0ptW;RW6-S7ULoaz50r*ICpR!9dxT8BnH#M0l*!i-a(nQbvv}Cju%}L7VTb|@yc5~oBY|Wb>JR= zs~>!K8#l2BQ?DI}F>uG$FlC3k?@cW>XXdqAqbe1?F8&n9(a{ioY!6x4cUosrC1P`y z+Kr^DQ}4!n4{NLXP{%_422#h+7BU>zQ+OX-=&JKbc*SaFoXxFr`ZK(C*n-+2von7` zdiZ3J76d<>g8h8&hDA`U;m55uk)&;ouj`sVZIq{7gerb{bkO0{eutAU*S%?VcmCe| zx~o?Dsly;vT(Vx@i2nKXA2)v9zwH4~2n)RR0c0vu4SEo>_LWSnsI9!{pSe$R!M43} zF5yLPpnP^r7Ww4w<%<8|c#I!c0hh&9BwCYEQ?6VqUz(1dyoZ{)!{r?e9qOn%S|W2A zv&o1kqx!g`{^J6pZW}(Bs5qXWw#|(o>Zzy_(CqS_zuId8d|e`4qJqM6N38^a4%AV@ zet55129Dp3Q`mYSiJ+6XVBsz-pS{;y-aDsD0doa|b2L0L+hLQH47xU^ncua|Ef5>!Md4FZLO1IOio<35>tW^7A!%m&un=VMi4XJ-UT@6`k{W#X~llJJ7B&Fh2 zO5S(UzgzLl$&sdt`pDd9o6uXpg5&~R&B|)m0&PortuVrX8u*b?xxXUV?tQJ#t1xSQ zmFjv6yvL*8yYEjHe7q4GR5|J0U6%dm?%0`W50A!O&<&P+qYtKbL(%jNRn?<%dYH={ z)WmcA0qODhz>hN>?T%=~T`uqxH&ln;zZhnYG`sWw+Zw|G|KY8}b-k_m$6F9)LUg>( z)1~g3TR=0$dQraR@iZGw4Z+X2f;=#jHTw)aFAT(d3;i!_Jyhi1YC|<~2CO2*^cJw)Oq)xCZn7`NwDN|#` z7g=Sk{XW4Lm;5Tkir7=Uc}25dOH7U8@n;D%Q-+Yh6Bip9=MpAZ3czEd_9dQ96v4$fO(RBjNO7SN+ z7T5_=?~8?Stk9){b#3Y5^$@k>+;i}N2ug5J3ApDqTHDrETtpFt;f^Le?^n(_lsv}Y zTatG7;*Y0Z99I4USnVC4%OT{kM+wqNB#<#K;8%7!5fuP+3W)Pp`&d>(9d!oDBY7O^ zit~@W6u#ub!KKi541`;|t+XA{5R*33oZ*j55qEY*K|BSw7mcTWC>|SC9BE%i+l*3V zj`AI_atA)KSYyCJ6^L@BBwKOUP)$28JA@e|XOx8OObx4k-QvL0(P+FC6CWRA%qvKe zFWT~Ixv`N}tf{&a%gEyZ22%Nr_tX`?Hk~*t6s_`OTJ$`_F5q^^V_yb|2byhIPRr zyv*yytzqjNYEjp@_iwjsb++HBd;YNU2hin7aT|<=P~$ndCdYMXUiRM1{gEQaY3-;W zgr8LWT&v{g5Z@k#K~2HyjJ`B$FT#Zn1E;?8W!-6M$QeAE+r`D+ z3D$1Q!zHoRN(%OEEx;?Gc011B(A#%DkElKcJbexccOTAN+q`pK)tW8q561i!-0Z+h zJW+ULz=W-F@VoY$&Y`)L4_B@~Z0T*ZGiSr*^QO4wovG`yDzohVr&N^RO6~s^wEJ)W z_&@Cu{=ZQ1|N9#MjZFPJ2LAsW1OF9r_h0?~UuN_BZ;ycg_K*KEx9H#d!vDH`!R$HR zjur}3ANJC8(NbhlJX{@HLfeJz6OuLLhmeo8{-x8+iVr~XK_$e~uBSdO?9SxH{H2C6 zD{Y&{&E9YMZdTXghkkg~UVT=%n~_|sg>vCWu?t{T7)<3A@Dk|XQ*qq_buecXs{K3p z?KE8%skwTe8gcef%j0I3hL*!rEYaNgG-90%xyr^xtyiqyE!2|e)|oPWX~yH zP`_H2_qArHqKZ(P-_Lqa6=deI8?3SK!JK0kZaqjnfrKjyrj$UI!Ox$3!U z-o1V}1EiWA<2km=uD=<)5goJj#m{vA4M{ucf{|8gv!;StW!3C>R!eZj1?5F$;hvtHsZ-mXysK(hAo@lGj zx;`rL{;K2?-aMJ6O0$Grl0!S=-teC9D6GzI;+i`d9(l#QOcEd z6}7+wp}!~&u|91BxYJoERFycw#8frmwOsF(0js%nSihZ4CObfJ5e)6I-5j^JqFJkp zSTx7l$CqwxX&PLZ%P3YsFNrEuRrKR$`L7#m&%`L#C6gB318x)%Tq@{_!|sd`9Hx>4 z%R0y!L<+Q-Lf3rLz74%I(}AfBwC)lrpq^#`_gfbcUGvWjcDLUu@jh;GA-Yd1jTK{X zRQ&wa4p7&4cs^-K-mXw$eYONw+W%E4_%os^omViSz&`EAg@+Y|*s_=6_(NXdnT>gv z9l9Xa8eC}GEqzP>_~vKWlQWmxTy)=5qIvI;an5&%vt?jZor#(PU`fkg>I0(pmfR3g z?!}MTcRLv&q^qQrdg^lB~1!{5w@vg8klzk9c zooL*gl3f4Z=a`O;_vtR_0eCFrlXvJ&@3H-8C1?#5K^-J0oDD$QEOr=q9ngQl*E6%0 zNF3Z+xh9XcvS2RB2_Nj~w|S6ux>D{kAU_~oN=bAu5w*Y2Cq>3O5a2~0+V~l$!wexL2f%NL~J?i^!C+oeiw5Y zHD}l?)uMI3kiB_Q4@#3;)cAD7ZftwEGn8*w;SXtfo^X!b9J@C6;O48>;|kCfn2J3h zvVg8oLI@zTT%q@TRa$z*R;SD@{U67?*_Y?w&($CZo{?)!?h)eFUal8Xa}-T>lAmtOyLBmb+?^%9$k_?4H9^#U4-9)!59 zuDld$vQU&VPa*da2SN}H&7}~;4~O)DBh#~7pGQO5!#zvGVTNL}zlW5FG0@NC(I}Cr zT+3a00`&yaM;f(=Q?8JZ?$P|I<2JRwhkG0$C)W#9&_XXbHr;_(JsQGWx>vBM7nEvc zaY&!?-u`6Eqe0MIdNl3PpIS3)CDU#PsCL2ydIz==d=I7f2vi_{c1ke;(djb4iGD`{ z7ACT3o&jZ3%@gUggX4@%GoT-%U2b!$v?tFl;M!$Ys%5l7^_XU;j`zi@{$+0k(@R5& zwpW#x7Edc_fv)NQ^^5$1CpXw9i=hv(fw#yG*i#%kn})=mM0btP>0v|kO=y&uq&elZ z84gMX((*d7aPGKHx@FzrQlv4(!8M?~x~D}Hzk114VKdA<-BWC#@#R7|tGeb2@t(KY z7YJ-W9_)w+0QJcgS#%k`5!OY1uYCofI?~}h z?Hy6EMu*RNnaDwxB;h#J(Mx{3DBlQ;^HKq74CWwc251xPFZRn7T9CyyDLRbsR9>NAsa0c4gLl%!YKywO@p;hli<2!!J+ZYE z*+#jKBD?j>xFSLn(AX6ziYFaJlWtEA(~X;8R(h+ZxX7r-P;Zb$+Y=vOwqNY4Df2wk z*ubmP8m?1)Njm(bwPB!je@Uns@ z%UYDmrllcwl%SJ?|Bq<-Kck0MEAt0(ytUA*Dr|dJQA!MDrv5IsMo*Va^G#Ejo_dyS zahT_6#5Bz^t2jwCheIiy{J=+IwJ6U)<0BI`OY|bEi+TZhW!2NQUcm((<@fn?&_C|- zBEmnim-ez!$tVM_4}D2z{mvFHM0`1z|CA^Lhh!2H>>c%|Axj7jCxg*pDVQ}*0Bs+R zKg2m8KZ=gSpE2E0Om`03fJ5Ewdau+mB@EPu3AYkKlTQS?Bi96=f0Nz*Mgj1|wY>+i zUhDH@{ z{d9xS{KALbn2(3=ea^*CAW*=`@Hpk$3AstpWZpg?GsOm>HFPV%c7{J|3?*^s+mrjm z+cWNl?o`e2;cC!!A?q&Nc9GWYIQ9D7K`~x+DtE-sIqF>8#k z;>Eh~e9traHK@alDEx!iz?QF1k*1*J@x$#~1=Dn$!G#cO0kBrDMSqN8to{PbDddrT z52$gcANn3xJdIvLR=CzT`Bbzz##GMe5mQ_D#hEV|wu$xQ$XaiMf5y*-9fa)3Fn~Gb z8+m{%{1fZ#qQ?N;229igLzn=W^|ZHbLi--U+qYhmm54H@S<)sKs5@C&W}Mqq_lS+0 z&SO*sW4khr)eS^5P&b-w_4MUKjN6k1!;Cv4(2sRWCl6}<`|Drl9xTK5vbCXqeu2^; zY2lnMG((*}4P2f7)87I&ntzQO18#}{{z>qK1eVl((CPs*ieQsb<}6^n*8laNto~JQ z&%ZzC|Jr4+40B_`7s<1&z$93{aX_rxrM8=MGO?3cPXg|!@{0rEcOT|h7&shnh$X7g zE|rBer;m11F43Cju6TAAbl)$C8`TD0WQ}y+HpSIkg$_}eDX9C5y#-1}%(waD-5A?8 z-NC&^t_JreVq0f;9(@7v59BA&fo>hJF~qZE;Po!0W|9lS?Ir+DkfoG;xi z4Y9S^{Y?HDq(0N+$IpIZGW%zi;&lV+3Ep<&uJSVmP6=g~sB-eG9k!-Ws{w#iw^we-n#as+y1la63 z-9Yp^`C%`1=!GzGPJ4rQyC|6Vj$QASR#GDHz!A2%mX>41(~hN^WxV*^$9Keey|T27 z{C5TDQ=T2J$D!Y|)9;|=$XaN9sPuAPA;sTX+8DJ54dt7pC`iN*M%I|VqJSMl&SuvUGA*6@ zM2rOD8f+`=r{NEuwl_ze1EXNm#YTCX!oo`P#M9ylnS+my_h`5AqOGRO%ESGKA3!fA zFtt6XsTjvE#Z)(l@qB-=m3MynNBT-IA6kn{bU6{4f=e2kQ4ZpvpyQ|9rxCuQShwCF z9GFh+M=WmCdGrP67vl>g{?|sHUR&{b6d)inq5urYu!VKRO;y+$l#X8kCL$+#=9XcD z?ArLu=CD5uH@&GNZ5RtCZ=&tEOO0^t_dI^pVFM`0dM3QkxI0sC6vg7vWAM)d<;?{j zR0tn{#wtDmOaT%Qo^Ya*kyX5=J<%PG=mwTV;0=mIz6XX67L0x7jM>A(h2nTa>fKWv zd9G^5S5F__=fPQShJJ%+0Ou$m;32}E4UKE*XI!@x*H&Zg;#D)nX2`4S_}XA{NH zaP8{yJxb8wjhHnc;jZKJv}=2>D34)i?JTw`NPo)mtzC0lGM-*UhnuV$GhJ2>vyJxy^r5G zr*v*rUSYYzVtgkC^bGfSWW<1lw}@Bsz!d z(84?Dz)!GWbANjsVLuMBWvuw|_x!JqFsW*!=IHiR9yH5(D z;akK7zmGc6{z#Ea^oJ6e>Q+AS^iTFcnI|6c%%odVnz>0OaZl!Dx8ww&nc$ip`C6;< z{o4=Q+iQVB@^E44heemhwqfqb!U9YJ{dKU#!KZxj-F5+UUC@Y3x)f!jkN4&>de)r|YU{k8L3K3MzLNHI<0~it~47Zm!au#M19o1gHKMY z4&>Fnbax-9ulRZJ&4R1Jp{4#W<&7;*vPm5bbWfqwTXFNNQivc8YK%{j>;R^XYZN6H zXj_HkD~)uG$Dqhh0WsBGNK$=2qX&N26cfi%A4L~Ae7T)TPlY=3oOY>AL0&)E#XrcP z?`Xs8Yf6e$3IN84_^ z-sG6_!(nq8F%A|SY#i1n4O;j4RLtuCRGSkQ{K3nh#^F9w_K=l{83K7SqOh2~rZogy zR2qIQ@#n8fZ@HqBE|Q90Lz#$dD0figgHy|_r&xDTZ;Wz?4W3&%%~lw1d-e^>d-#KR zq^53WCgf%7=L6)v8$)e^aaIp;75x>61)#1RkLJd2FN9^nat>fyc_8)k+KW1|HW(m> ziK<<@?Z!t&ybnfRil;?OEJfxQ%q1TQgc`oStLvqYf$647@^7rTyWqi}hy20HGG=qy zaNWc@oBA5Ch3aHGh+wYJlS8#?^AV?HZ>?`iA2`9w<9ZBP#p5~jb#KaU8u)bk84a16 z{~a7|CBSuv@$0L+Hv^=G)k8oX6Qxo_C*6(rlsOV5^*~PxuTnI6Z_5vp)5*H>vk_gq z?UyEyyrl7nL_6a=LiliGhrjX_i}0VHBz(9OV}HL!T>n^JqbQ*3(P$v*!5J%jY{}l# zN*4Qm&jp^Ga#w^PZg0EiH`V;7UF;1Tbshn$j-SiemuN$A57^-Xfq z<_c5w6Nz~KD%rB zaz#Uyhp&HkvC*GyV%#QbzWXijMQ?9n~+e-;1gUB zldOEnb(skbkIW_1SZ@S~<$C(7e9RK1j9X|PiH@-OfK!wIh>*cPfVP}$yqUP_I--0< zQe%d)$Ha+ z|LXdHx~F$cYjAle=vbIsv$bhVi-_5rr}v5xe~+5WDM+pt75N_?j=%u1G=T*kwlNgQ zLciCUof+pYL&u*Qs`fiM@KH~IU`F)*)w-{|dz_U*x3^)%mc*BKX;T8KrpJ^A7b@d6 zwfc+n+gxR~UIWK!4>c5YHxxcN12Nfhy&0K5%|ih&sVXM}#UBpjn2KOX9W2tes4lir zySbb=Ot{lf2hV{NZJqZ_E{%vRAF0y;H%28ee>_Z^oU*$+B=&rML2PCWuI?pdSy=YN zZTvKk+}qnDK=<{E8#{@pc{CY5HUnt*B59M5fKmw8n6(aUjSuJzu{~a=p4Igd>Y(c} zdp1mkh$^e~?6bB_bib@PcxQK?!Qa{|Nb#q}TyyVtC=z)n$VY!`jS>rhfu%2D)KyHr zVm&HQMdw5l5@HED(c!m!fL3y!8r$8j(ch}WLZf^i?&-B!zIYfQ@Qw!tU#@#}Njml6 z(A14B_)!exjf0khKb3ou)gi*7m$t z^fFw)v2CW;kFyNCeB*Q6B08Hr*uXV)wP{Y@X#o4Zi`8>%1XDZkAqHv(Nna`eG#Nom zU_M%un816azvXkt1~H8Flir?L?dzx58vrU!Tt%MrTY*GmYJZY)x}6-+8+WO!<86hU zi_O0dh%z`jd9IgYX)zSUpuM<_EY}BH(P}a6yJ2ht8YczCQo^6|9r@$99#ZCjFI6VW z@4#h_(c45URg~BjDX3>MoOV(PrzwRbLsTZVZYVR&2#Y4;4FWlw%YJ30p?biHp?!<_ zr(oh>O42t-5r|i&uyxxvflkyq=zPS;s7R*=pIFdS3HqG~vxAjlN9dTE&m#H2_Zo%O zhkTt~&;VSLgQK|e63tO;;XP(R>~22PQa(cFu5Rf!PG&b^~VgLM=o9vEcG&LCI2BJsS%5v1ewFi0Wevt zq{srp%SH6fya=$kRDe)7=`B-gswg9dN;EsQ4IPKDm2$$cJnkN9e|jj~%F(t5PW9^f0e7qA>!Dzb zNPj1QFV|F-qpY(qFjino!{GK>QPKBHu4aTRsE#K$K2@H6itFCi0O<3;-?+mLfaWo7 zraumuZ>b%$QgiKgA~y0eZT|r^$nwejh8!>UCknW6PZjCJP+-6u)O%94mj0@J#}ilp zQj2$h(cIfhQMjCVlJe9~3%2d_>65G-5a(xEx%yB;%)ENE1 zIeupT32S0_p1Y6;ZUh8w#AfJc7HUf5sOdiytiqI0`z|MIU&H4>J7+U!ZbvvHLEYR` z{+~OH{HDFRY1a0-uQJMg&vG3a#x&r%%eG1LZwvNT&-dOkZuxTs+NAgsY{LZp#D1jc z4t*H^mMtU_X89nMoUMsi84XP88W+ zM2JZ=w+e4pv3@KN`1Xwnt_wR)70SurjQkD=T4_@$(ua!sU~pd6^8Ub#XrdcRI6;f) zuL`%$XtLtsoW-o~q40S^{P34BwKpf5uRR+zp zWpM3RC2uq7gWI_Iz2Keb*kC@pfjjF1Fr1;K{KRTHewt{2Z3?D4vEhKcN0#gWQQynM zT(#lCkSgxEGVXn!gO0UzI+|YI&(BAnF&Zl?oVAl@fmc$6o*RHP43dV^wZAI$zdZGX zfbIn~vBd)re^wx|D1@}=mQ>v7c%yM%@@)|Rt%8v3P%8{yVVP@U~ z{ZLA=GCY^*5P1&@I|H2$HQf3-nurq|&!Jp=^kUhk6aa@|>S2l;@S?Yht-eiX0pAcR z@h1g%t5Dz7-zlfbRYYWsDNGBc!0l3>EXTrwC=;=mr8&n0iRWeu`-+YWIxr15KRu%Q z!y~<*OhW4h%M$-6!Y8(vh&q~KYZIZG=|;LPY9iC5#&QNibr^So8`j1WO?49q~8NIn{a?P@r_fS@^ zo&nI-?k(uebTBQS=I60QWkBQ28d_KZ18RYpNNssvXR!thN-u&a%;wDnD-d|G2M40v zmUnhWo~F+!XH6*_{D6CHv?ZXSKUFfZM~x@N@r{v`inQq|PJ zSufzjQtltAHdORaRll>tZlluQDd;p*f{Ij1|)cygC62=WeDQNB7Hq#5&3A7iO|9_DShZx+n`i;C57D8KY(jwvg-v1JWUc zmoO`&czpzZ<=RM6O$sX{!a_2YFe6qkE&nl3Tl?~bb;}gpo}b@?WA0b*(wUGy12riw zsgRo_^naFKS3HnZpDsrYgt+w~mwi*N1hw^_8=6l8%H(6g^8Oew7EAUjJ^{!BMpZaPm+wI-h$E0*9SvkAL~B`_FG7JQ|wt#>nq=r zJ0Q%|dHhPSa~xm?Wk88}1y>%{ve6lM?L=4mPT1)N?e#k-IF!BxJy=!Kh$y?jpGXFe zGO!I18)-**rP<=cJq&7C>le@xW+n#dJZOm!P0$j?^8Xus)jte4$x%h zs!r)qTq2_hHGj8zS-r8TxD-!!65I!lR=j+E78b#(3AeoY0sK1%&MgBD@?MI2fep<~uj#flBe*&*t87NE&qX)M>3iC~H>SYDYJ60`$wHXCc!pXx zr#Cv9FH=rCPn^G8euuN!KO5nljlsc&~r3*}*JzbeV> z2F}Xh=?|P_JP}O z0})UPewCcq?|`d0JME-CbdP7wb4Kh!7EiqtNsdl(Zybo!9(hWSM=!dBpD*|I*OqgY6|O!$ek>W=`p=0=njN)`Uxy8t3h=- z3)Cy167GW#JC8D(+?W`PYmG~ROsZ5884zatGalGjY+z#Qx(N9GSs2t!NO00qnQ)9U4-mEJht>ThlD7n={k)>XAPRP)5xwMACNsE{AS{maQNy;M)T_(9p zg&?+1KpjKH1n@&PeGI<}@+SZk&l}fSNy>akJDA?v3yR>D2dMb-p}|%axEE+{X-b+` z0lci$dUJvAKlzD-sv6d|!DGW}k!o)m^2YY@iGM)C*CYVifZ=YiOdvj`8>)*1md94~ z*M{G{CWfA&IhIg!$0MFHlGq#T6*@oQRRH6`*||T4VF1d=!Dz|mP+MN(__5li9Ua(hZ6fb`WzDp^JEh_=q)I4%_xl-6IF5jf167+uKP zr?8m}PB_%8QDTd@N-v-pGAooQ{8%DnT(#r%8t8P>*CIXjVsL(PIna8i%~aK&U};6! zOu^~9@L4XgtH}1$L*Si}Lohqu-uR@!g=zu~a8UwDUNQjA2awoIh?xrW{u%Tl*oMD{ z{@KCC6K9_~?f9xRbCCWVXpb>tJ_{r+vY+J36&aWc%8@23%G!;=pmDnvb=y$DP^)t_ zKv&7+SC64UG?sJO`VUXL-gF1g>X-UH!F1i%7a|slP6>DOz3qDU^v;_=xsZJG5ZDNG zP;kVr0#I?nb(AFyL!%y0GrI80LFa>@C!nnaX!&Q3lwUST--8PLD;R3D)5srwhKwWi zgA1&U)5Uh#6Czf!hxKq+IUopG^>I}W>vT8Q72H;y>6N5`)%=)xpE9-uo|x5_nNocn z>_hDMlf;e05QV$<;M~H^@s{hB3pn&AqS}H$-IB5KWkDtA8(csuD@a<8O@=GW7?!>! z?Yi)U-0%jt&ixO0(UojX;QIhbNTSIYRomftA3_SG+e*AYZFlrt7eDJ>ehq_RSLN+g z9vN7>|J(!LVE#YF%otV#65y6mv{ zD9(~o6S7Arg^l5V?HPh96;9^TeQR)^c zjvMZ09)+bDvU3PU8loryGpPi3Gzw`HdUg^roK_5PO*e4qB(BE{sHATGs;7-l5Nm^|$>I^p&Bp1eoU-t`X&MLcC;_uidscuECK=y3-C=0cVlRAJWbOr7E0o6x1 zouBBvM17zlFbxHT!S=P_dl5aEu_FDxm6eWKFpS*`IgE#ePjM@9Uv-E zTR6?ThOFHHeG~?P8V~d)6o);(m_i*r0@!5^@V`vhq2y$2m!eS6w>QCsV&$tbYS!{Iu)@LTzI9LKrE_JYGjtt9=W2Z$*{>ZrJyiCwA_$6%jS}6m zt|rL<;GPJgSy)m4mXB5trc&}vbh*nn&^K;8rK39HH1I#NnbFzR8tbCx-CD0tWFwdr?jg+h8bxw3V{DRB=+zpq`xd>4Pp7`?)&|9VapLiv%@*d9BPt2 zo;2EF%E7~Kzzxt@6e~FhqGAFCmG`REirRU?G9Wd*7F9(W&!WziE~O~z406}dvUuPr z5GSGem-LF<^d=70A=|->?r-D086pL-)6PLp^3VKI$l!PZzn^lm?jr$Hp9EOL9@-&r zj!(ckVBU0ug4%*73HIU+OLj09HMi|P37O#IYv3S-W+atVMPP*oiU? z79zBLLqNAldA0)X?VvBKWuFWZGx_1<4d`62q45CyneOhh)IB0*mcvF7cg6b*=`FQ7 zx)qwDmG^7+Hh~ZKH-tZnfjtzyJl8FQ^e3B@B@;4&+-jI^Fx~vRVF)wAUQ~-&D%9GJ z%jR%VbFSPLO%ihrrizKh{j%jB_(E@cFBu@kmlix`&)OpZMyDX3|#PjDd;;n z@KFq^sbhm-z_aE6A9yKJjpnDZ&ELp){KW3!UFa&=dHOTMZEb_rICVJ=yd-eH5~%$% zXr0lvKf1_vJdi1_*6AtMdNV&${bte-KhWw7_i(y@9|_6HP!()IW!;yn8axVaNF*Ps z6}|tVtML^b+0I+wl+wkeGZ3X6&bA~w@RJqLaGlg#VQ$L;Ay>SQyl)zq18x?%B$m%?IS z!r4Ld;zRY#Pm;-#pO%*Tz@a~AZPw@O)cIW3GJ?RW*;ZFu*O=zo=lJr)+~%Fm8q51# z&F*YVc=2={@5?_>$6EoAY)K&F9aKx9j=jWRxTyuiuJ;5N^m+i;WcVp!LL$rkC)g*{ zNx4zxl8CKGA+oD#kxq}Qa+>vC`I&Kps80Ti209+mNvI>L7LK-j78ltbQ~DBwt*b!t zGeC8Z?jTCkgcf#7kwU>ndiR(mLQJ>%^-vhX0%g0?Ul1SXOZLf*j#5Jjy6@;*Vy&Quk$r;d6n}bt6V21M z6Kt@?$h@Ck;aLW0NN^~_7sA!#Z?7uwxVQA1uYUKy+_7zZ^4~t#y61|k?OWsq=tktT zbP_Er2{qJDk>1MfWaH?{Qs__hVyA z|9q1%DS6RpOMRio8wck*W2W=pioEk+I|3VoE66Q~7Z{2la_ZnR6ok&o(_pi{iCKWy zaA${QkVjkqg&9!WlkA+zU~X@*Q$51ChHa%5`VLlobl6mI;ms6J&*M?aeoCBriGl3L z&%H7JCbeBAULQPmGG;!ppSxgcE5LhoqfyvP?l=>>j{e3TYQFMaXro}Hz^|<0k{=|E zPx@yu7ie>}KZ`KNJa0WF5ng85^m6$C~m4r{MaULe}5tZ;rc{tTLQGCyfh6 z>sh}yfHE%_`yMd;{ktIPvSH%9Ad)=J0YJ9^I28aM@XrwN9CG^RIfU3y&`;fw??K_cs<&`M6r+5o2dP7Qa*k3+*ksp(komS?n zdi7V!vZmsXVtDy~d++;omPWn`xM)GkTtEG<>}Px=Pnx8)Gg`+rBM&Hhi+pzo($43~rRhDuAt? zP}igZdkW`g((I84u}j*8u<^!gzQEuxY>$}DDKxnF;lupdXPcLT5?TprZJBuukbl86 zKmPb)If#}xNSN4e1kSRXXQ`&rZ%x9)>C1x5|3Ii$PkFm=psU1n^;z_#FqiSHln%21 z)VDOGpy;2hzdeifP#yS@+!$L||2kS$XyDq-pG%3TyR|AM#p=DA+#O5Mo0#1r(?N5E zUlhz3?g&vDGuXaHZ9DhJ6w&G44t5GSmlF6P{OIeXdoJbZMaN}U5}WZOEkF;ypD??% zf!$y48W-k%yt!d8Ow{zlH?^5HV4qd~iG~N)nLzs)&Yxugd6Mmo3Xq%x6YyN8LLkh6 zZRSlNrX8d-zpV|A5~hhN@hq=&UKdkc9#C^*5U{^D_FLaW@G138R`YLidmd6*9`IsH z3~Nw;em^1CUX*@AB#%)~@o^cKySZIV2HmLt&QPne%!cMTSeK8cREOlp>Ri0&_Z{*R zFV~vI5h%U9bPl>uY{s*g$p5ME_@IPlb_XpyF%VG&7Qk*cYQdg0z{xcj*xE1zC!Fhu z59;#UjK(d4$-V567ViecrouE+zEue1r`&8xOT0N^>dTtOh$^`~^5LqOtcF6q6j}9U zAN;yW{=&yck=4Fu-!Uc$*qU=-%@a^?A6K~`(t7ZX3@*KajE;-RiF6aR6K_D<1Cz3? zQ!>01GR9R7zE3$#sN>nv&)TYk({-FomFRp-A&0?*@8Ve^t_*Vs3K6 z`%v=ta3{iB`e`O2ubelx6YNczfc!EOBvII!Zt(n^KWTJ)FxvI4xV=AocJ5p{_~6^vs9Ef6`~$GmOdw$eTdQ3Ict*=zMQtlY zvDq{gq(vHt#J`v8jBV?uSyb;Y1?qollJ>ijNQ;kU@aL{)aiWbw)`yK+2N#H|T_3y~ zwe!83s|3}l(SL$E0@=bl^zXojKTGG(%@kE~19;#Ew3apL=KxFzTS#lrLcc-UzS8H# zHpAJsoJu3_hg`H>tQy{6bYx>yWS8mn{P?cWyTnoAV@8h*4`_{Szs`>Op!y|0NaoAGM&~^ zBB#d8hvdHg;y9psEC8X9s)v_vD~K6m1c)6yd;E+e($qxnO`q~D8dE{R^4U4;z;p8V zOB4&jmjOjJQ7DD7E|;gV>ez3i0BIyrIJeR}^l*dWZpD2|x$`(fkIFdg^Q*)PQ$o*; z<5r=uPYZI#8gqs@fPz{{e%SfRWH8pVLQ#nB18d-0*#82Aj$toi+H0)Oo7lzFqH0R5 z(XHc~oc7W{Rfkbn>QuZJngq3T?Xk^v=i_mhk+hyCEO2fU16TNoa#Setb@q`ss{G*q&KEhXO8# zSzBe7cot27-}B2-7T*A?%pnM*jG)Wpw^~sOfCz!%6cEMMl>hK3Z{pDKY-#Z;Y0uKD zz`9`vd$FUQbgwlLM`ivnXjDiVo_9PoHYR;OZ9bdB_o1Y*ZxYdch1eQMW+V4gFhB$A z9kZ6#39Y0Ve?y6a7`QP&KarLS-Sl{!-Yz|aB)?4!*%7HWW4qr(du@3`aPSn7*ZTOP zwFi)M1DbxVB-}GmHR%+S)Lt7;KycW)enqpjAc@^T>|(tobrsAyiy9^N!j}{=?#eu6 z<{s&x{5RD7uA2A!q|FB%hQ!bUCHadlIUHE`x_%JCwOaku^k~Bq<)xqhMJ53L6)5ii z9{u=Fg8AR0AO9Zz`cJ~*|E>LC*_SDhQJz!e^-7rFj1?;$K|%UqW^P0BBjbVuL(3)< zqExD^%AuWt10J9=qL{&2P)J6FTC_sIx&ArNqaj~sXHU(W{ks%^9`h$8*K?E|V_qf0 zp7^!2J%bSoH(PCGrvdwz0sB$(DG!_1AmLd-K}c-J(s0u`>%X->`}(jsSwWqA!xFXn zj}`t=ks#H< z{{E}c*zGMFbL`wMY2vQ3h0mEI*`($4USb_j;#n2EsO{Y-S%H)u2BmNOfe$e`7ViIB zdv6}qM7p()Vk4p=MnFJ8h>C~ zQ2`M#M23Jem5=}`jmQ`YLI&D_Nh%7VB$e{M^zWW^*ZoePwZ7lF>wN3`eV0F2xD2aO zwQIlo-S6Jdejds6(}4wnzOHUnE+>3^-p~|Mv-FD4=cWh3!#~!VUmCLMt&DX20?e;| zhw(Z)riqY7dGu9ftV4Y3NBML^y%A~#DcnQ4e5|j5V#yO!QdE`5SoP90@m**UH%t{I zWdyqO{S8~2{Ef3@-}Jiru=n^BUk7ia975MJ$9@-;Sz_8%aual8?Cm#bAitL~-`;LW zL=4L6%DLrq2nbJK_*idFn`y+U4#S!+bEKS=BiSbt7yVIDp88_*=Cze)Uv0WbzX@*d zJ4P!{ehb)aC!-7M6P~^SNkIkc6LBe{D_84rj|mmM;f!Rt+mf^<#=?ID^5fiYazmJp zG~m|N)D1&5kE@yFy6Un=HPv-h_$iY3IZK#HUCMX`bK$XwhZK>~W`HFo5P(YA(R_B0 zRjlQ5`bNPxedUm0>`yPNME#5nfNz^h@EcFv5w@<&fq0^hpV{RYlEwOvFvL<1qG;Lc z3=xv>jiq3Gq&)*DJQ37sOtyY2}q3xe%`3bnaNeBF*2Cn-FfkuJFws;e*$ z-uci5U#l#{tw|}?1Li{Cc8h5q;iB+DZrwwuV6R%{-=E7&n&8DHt9|;^UgjCym~0ILsv*aivG<6)CCUZ09m%4aqA#+diowH5uRVdB_uHPI;ayT z&SlAhDa+2_TSLwsyb>0s&-c>e7e||pl0N%`mwAryO4u?E3iE2G5Yd=Kd@~wa?!#!K zECd?vn;#*k)AQem22NlnQSQ%QRkWx6c*Pz+!*Ul`vzF0fn?#GToo6bh>o1GY^O`%G z2X}cX+}3|pahdHi(mLT&tUeR@8RgBWU;}BpIIw||MA2Mde{HN8jEMsgFe@Ms-dp1R z!Z6girg!QY*U0aa4{dF#PjTO=z4Jb(4nL4VLUlmHYNXgi-zc+fAqXv{Ntf%F(KjHM z&rWbqLG$@vhlRcsg7SirTZP{Hi>>7xc1YE)&H;HJcJ3;`xy6IejdE|EjEP*k_rhJc z)eK)csjPHZi-E#XTxKY->>w?RZv(4Ar$`Iw4qc$8sJha>5@{}$g-UHNRWMT+o6##_ ztNSC0MnuRJbckoHT2bA*BrUHW4LoXWTv=8nTgr{)s4%ARE+TRs5RZUv$l=~7a$k)6 zB-*an?^bxCfSr_PA0ag&h|MlpKkM@kwsu=n*y*qioq8z#yvjM0gA#c9(~-N8+Ou0- zjK=AvAke8d)5*baLje!1*F{O?mgW^DK#pqJoAyElXbnA zB?2hMZ*6fUs-YC#vQhoq3&YqppPMa#hfvp}fn74K8!!V#UNu(&P|P^M=e>$Iym#`UUs z^n_biRrQ!T{VNPgBw{HsZu+Z=F-Z*S{#Ed0tD4Mm7-?_xwH?}Xf*n6%UP&x}&!n%B zwes~E`>5t;HC=fSft$X`^Ra1j;Ay$3A$9NeToPr+@;~Y6`m34)@?FBB6nDXw;a| zK8qlL5El{P!N7FL`0uK6;CQ{!Xrv#g6-$6M0o&2KG;o=9gKJri}b2Nb@LXQo;EQP*DGjXyD?ksCi#N zfm$uNDsdEF1olU@O{vmv*IEM6NXnZ{zdoIPeSxB6+q0eY{8dd6^W87q%D=s2rHeWS zD!KnG5(vLi;ES97Z=Rq`2+#!e5dqVORxyS^|NPgpl7jH>Iyk`-Jo!CLbr$rE9tUe% zS8)`GxC*|+f%2v3({&MOlKqVcdSrLukOwNb6cWdYJ|%$?JxiIxN`NQJk8s|Ra6&p7 zFZCgV5`DuChOT$Wc1Q7ethe%B{p!(~-KibyDY7a z2%o`y!BM#;Hzq6!vtKs*P=|T=LePZy6A=zV2!Mq907$s?K|B&XGfIe?o@sf?d2K0A zu6hzQ2`5qX>bKJMd)R96&#J0`UtvZP>MHd7+bL4z+T%7isfZz8=IpOz{WSAiPr+l` zOn;YU6cxw;I06OzP9!B^+GM$ZFMJwKB$g%dh$)qWW@xFDnTDImTGAM+LBq4xnyG~{ z9g(brym-a-L#4HkN=rL2JMk@5a%EiS0cqy3aOxkI{V2YzmcWUy{a-)^+>wec0Zq+< zp$XhWFe1QK27_hY3?YYLCQ)^w_Hf~d-+C}i<33v5!%XPCU|~&Ng4v*Ku-!csvXaam zca8s;c6g^>l}wdK(F>1KQjXYKoIAIGeNX6nA!nbfD|yWGBI$PxISd@D)`5fz;4)E* zs4tdJEEP0Ns0Xo(ab1)rIbAGe6Q!2v)<#}Dxx?1ZEmmpiKIBJrop&p0YRWRiZJKqz zr!2|1;~V#Ds559qAb}a-Byj=7&|%Fn)Te11X5R_>Gn4C=0XYzMh3^s6riGs^YHGij z-JB%x_2NhL1LPBr6VjWlmsdROt=1;)<~*EqbMmOD$P^u{&J`)`0MY#)n{mQ^SyFNo z0X2Q!z|kBwxSY9@3`P*bh)L(2Q^mBg~mWjSre z{1i{q?2Y&l@T5dcQ_@emD5@&tKMo_}+9ECN1iDM?yZ_5u%N58(9A+r3gZ6Q`30Zn2 z(IjGM7p2uum7eG3(hb&;&sDhyGj;*=Tcl-R6d_k%)(a$8{K0T!DN2^9H*b!#l08BS zQ|wJ;+a>eKCs)~cZH~BaneJdp`*wbe*Usn%!M}!FyKp!3+1SI6&{kOdjL57$6$#K} zW%8mT8l(SMHRUqJ*j_8&Fd?aFXInxcX6m4V=FlrU2eZ1PED3HA$X%jM>!B;b`h)AD zyE$ffU#FxJ?EJeoZMb`JF%Bl+rY64ZZyytYyXA?$swjVeD*#e08v7Y)7!`d=XZ3OL z_M`?t{dETlTCDO8tcT~&m#s`84}S?5(LG2@0Gf|81lrhHUsbLxR6Zn)O$2~e-gcxJ zE}v2P6XHDyvJHUozQY0-?~St?m4p0ASOy#c!k$kG35;z(=Wt-01mAN z9JxGFM#eLPqcJCJM$fHb*KA`n+{tAe8joPJ0mXOSPr#^ylsi{0kZ?lYEA zUxa%T@y>TIPA5NjQR=$~InYs_cl#HUUlXo&Z&kaR=m^p)(d(9`7!h)ajBXY@z2zj; z15EX4ij9mn-nJKK^4uIf5dYboZWY16IInj(9z?OVHQS&Iu(!!5$sXOqXC@NEyB zw#olaUE$YpxXIk3X%*tK>Q$S8>ynP0&zF}T0Mn>DmR+X}EIb9KQ4a*HTNZLq1-An) zwN0PQ!WZ3A?4V^FhzY6o8t)Q^>Ae_wtL$ZQuzAWnOYV1!VXEj28tTF@@=_AtdDVW!WX@9K48bd* z&%hw%HN|_NEpkE5-zvq#P^e*m_$iT^ERvtVzX5`dJ{AnH1z&+aU#BR_s7ghu669|2 z)ugveL|X9J6AWYu-Id;06!=dt74m)qJbg-}m|i|liFvIrzfvYtpySohc}nfc>k_{$z!lmE<^Ih23ox6KBb>8ruQD zK==T@%tF_=XjT-Kq26eDO|i615QfDH2WweF1eW{BH{FH$ldWQCLRt&iWy_ z&EoB?M)csZ)viAA@@L`My@o8|1iF42Tgj48=FwO@%5q4Y589dbB-xK{gdft5ko#K1 z^!n9YG@=;jOrH;9JFKRA2&{mcp)lWjS6h`lpa%?b(Kkw1YSn(GFIi@3))zKBvxI6w zHmDMK4l8Gax!oO_Q=@_2H3@Su>hIDuNnA>cbnF_BV(aYbu*y01u%gY(rOW(o;!ED4 zN9BozK6b9h{DA^^=Z33?cM}1a?-=}64~+h|E4C8)!FxO|kXl~=xgj_kG`QI7voRNN zt~$#Y1jnq}ZJ8V?iO6Vzxt4L5Lsr!{ozJJ><(MYeA_^=9I=u9H+0X@*$B#EiSEM~V zS}DE=AJ+ZgpoS3Q=maT6i&oWyZ|G)MTu|lBtk20GAjcMk zWT*de)u-QwXD}5ruOyP#v9y+Ji^O1FXkXFvq6V~ZpC1xvYNwD^DeTI#?vTgZ(D|)PA zM?>#F`5acrtLihesdeaf8!}G{S zv`CK=4d#|lCI>vnb&vmU{=1%Zqj;O6*-RTQVpXiaq}Tw|x4B;9y3*slMkI;ZQ&x)c z=8DS$7T2o_lW!wE%EHU`q`;r2_2MjC`Ss>C9duHG^xY!j;qGz&)O}Zf5q$B38Xk!j z**nT8xQ3Tvty}(wiJ}i8jZ=W_huWNV=?*BM@xVwwd1$kd*|F;5r;eX;p~se>mX4J^ z$KKzJHVS{?m0@?_V+s2yNiZ|3rat%cKf(qCSrb|g7K{nz3OIp8v{n#STHHDEot%I5 z!T*TI{?E8CLDmeSi ze^lPMhk%BNVgsYk+d4tk34|-R3+m^i!jInuDgk^MPB7>mG)L%NmlN$I4?#NVKoXeq zueAgIoLk}*{&9A;+}{SFymb0iMIhb?m1SYeO(f>T`J_rw_g|k#w>usu@aUqJOtyIo6>im!D}GVM zXrurZ;m@IMz)J22{Ybb((Jtt=r>dt$gZdL${( zfw|D4Fv(#lZL^Qe@3Gb99M`n*C^YRv=U5`Q_>1;emC7s2cwtLydS5kBsnq2^InLL5 z_(Q{z116xbd1aIH@}LJ-n^W&6-#Mb9!g)sOGsG8Kg5;t|nOJWfM5=HGaH%Z~64I62 zvbyZHYkMfV053;c zR2!BTyfel7n2KU zIA#vSC@NPMeRjZ>^UfDq%l^^l0c||Qe@mTrVS1uZ{E-y1w`q~Cx9G0TwwCs z>tn-bVfCnYvcPzt-8xlA)$GUib>aFnRkzMHIqo?MJNGWO^|z4)Ef0JPXGXl;%VhnH;g3x)^|R;YSIwlgnYqnDrGa#Jc=K(lSc&5)kv z!ux*h4{32!!@dSnc4by!pV!Pefu?M;B#XzoQolfE2D(swYM_J#Co#V5+G0i3r4d^k zh@IGB33XX;%mMdU3m>Q6Fpkye>lH>X%KM*W>@I6|-|PGXLE4Hh0;#cj7~`2YX{-hi z7PVl@^~lNa5_}uo2n>(bs#`V@2{iq~=p`{L&D$%{>h9VIBZ1Ubp$#e@LWrmuR@G>t#e$)R^$5b1{ z_pG)^sAX^Hn!L3nxZ0CNwR}Bpez!cXQ-fLuij@S^#2M3x!52v$v`Sfk+vqe>m{`B& z_brF(H=&^Ae*(QJbLcf}jScl_-9>25b?B~jET)m&Y7;xP&K1!1xT$|%6KP&$^K+~H z#A@{~w$BlLd9pGa65nU3Gj#A?8(~}FxGq((m(eO(#@OsArE0lIMS4)9v#e}d0yS4; zHRrC)9hrIWA!};Rl4+11%N|z6Oi!269{BnRKh1m^Sy>VQDx(J2z1cym`3Hg12F~(r zrE|vXWGs0ESr6|#J2TB=>9h~s$IUPbqRc4fU}oj7qD1pT&I{t{wnGDE4d*MW*Jnwf zrNKWt#ol%eE)Eu2+{olo?>D>$2lZmBd0(!AC6=YU&YkE7V`-NZ0eBluc(n!d7!s|d zuX`dR@F<$W)1H+ENy&`$*cO2mC3W_oO!AMt5D^$ajo_f|4Li4_YL34xxY9AA?L&FP z3$W(LW5CAZWD;`JHxOUgqd1KgOKtg@7d=1KxP%~h)+0u2*#1&)p8y{4d>GDQI0>~)!L>wxtsXMM)0Odz-B))dLd*ttN$}_b1=%) zE@f{Pf6S7FIhf!rtO}cJOYfgLU`lCbD<=<*xI9K0(C+YVGDBOO4Sgt$sQg ziLNYWHx-^hsV90S>+EJSl~+jO&tR7{Y-Y?y>eCbvm?2sSc>b05l1ovz8Q=iy0sw5k zq>g=zw>)yh+c+me`WrykyU`tOb7BG{X?4VA&zXhm8z))}?x$EAGRGjPC6AKC(#Q0r z#6&OxgK01BA$L#V^PGkM*&WW|OEf1~J)lXE^cUfy3zjL)iQeAm< zq5nmKHTo?$Bx-_%6labdkr@|AFDq|y0r6>eBKy4M#6uv&>W9v18Jw&4X<4_EdikUM zzGBp$CwI@x@Hh#8*DmF$2Y%>x{O0*j*Dlfvz_keLz_r{_;-S(k$#en~LQOx=+p5uQu%tg2&f`WCxrXE9U1uE{1o!>s`PYnu%OT*jVvnEbh-#GvIlB- zMj?V_@(@BiPAhL&L4f!PY)j0(>=rSV4;#Pf1F1SKO-g9G(QChv9h8}EnapiB%A-*l ztNl{WXXDI#H%TjH-htlgx<8U|?Yi&%j`0HJ?H5VnZZO5QmU)RAYVqS&6?wQUi|;Zy zigFD@$wcfd3ZKib=$#0&sIaXDlR7?Dy$p>y%g0LRghh z`Fk*cW5sx0uUmsSk3C0pB*dqH7}tw;q}K{cFrEjppw$BI$uPCwdhPdZi7z~U0!=%n zFk-W_qp) z+WR5rE0{+<+SPo%{*H_?6b2{S9|!Pj3x`4BXFoLdq|8|G)GO1=MhJp@@dqc~RT|`* zxH8MTlk@UUQO+wu-{RS}%Iwcyb%VJ$eDn)J;R`h^B#CdpRn9F&{_kGC=%5R!HE~~4`wYs{S)D{Uw1OMy|)Bo%ZgQN`fhBpa7Z}^?<*lel_ zvZ=UesKJ&VF+@y(N~g!Z5O}0y2Yci$O`p%$+6~6{en3-7T*V#5!!sCe&=n41bbC|i zonY^bs{A0~z0w6K#<{|_!IZl$4|cuom~7%IcibibM}A0|WeVFE2$;gg!A|vXRAvCT ztK&-s!2LW%lW>5QvBdAO7LF>N7;8|~23XI2-ViH+rB%D@q;w()*2aiZstRqQG5f)@ z8A=Maa>zn&npeL8k>~&Ndk#d4@Y8y06nfUPAh zo7F-A#$} zcfKs0@43IX{fA0!UH6?j6{Yw8>i++8NfOW*;C?LRyk}uBIGd|^qT55mCGR?*lY|6= zfSJVf+TtgSop|TWi#1x$#xB1e>2)8!`QtAss>#1wE-zDoB1woN^@~#>rqd3_3mZi< z#~*mr1DA7yPg*X38eB*}Qquvj!uCq^3TzjNPbM^-6O&iEP$SNQqt_it>|?qkGTrp4 zPx!|BjcB-ufC2BiCO~p1qIsu>`sLc?* zc#(8`dlOMJXRjViz+Jbnsc#Qr8W~N7xJJ{YTPh(Rgv+kaY<}J)C(4{+kHb!@b zSp%j;DDt7tiD3hFddn5MVG$HYQHRB#9*LS#GHSPEGn)vSV0uLr^HT4-3nR_ti0FIS zz~yOepLJE+P>7$aDzkZ5osku`BlhSMK@<}Nu_bW<9eF8baL4SVsv+Zrs1k}_gF=8= zLKOuhPmR5iuF?5@C}`5yc(XyDf>X$ST$bgIaFTUT$_SUIJS%Fds|gC*B)9amGEGJpD8Q6DR&T4j?v?ixDp!J}CKeVKgL;@P zrppt*A9s|M4`uP%lPF6om@4?I&0=CgHHnvQ$G>{~IL&>iLFk;45iiw@<$J#?8Qd&8 zl%&VGXGHNWEl1w6M?((#?vvCR2;X%!FD(|cFhe`w4L&IGp`+BoR=%U7-efdW-WqJw z-rR1C9Y9O-%54 z&7<3#c-5RZ+#J)DIdJ{&k&C@YUSS)Rc@A13r}})`PR0gA>N2n324G1|HQhin2IWIP zAW(8|L$qs{x|A57U)D+L6W04Fi%CCn`dsBwG}f$f0*tjfg9pzr)@&LI?ycY2>7$_X zykg|G24OGRV$O2Mi0QNh1ZY)C4%Pt{s|A{&9{KL4NVzh2b5G?aBc+bPG=u{8V;NZ?1sdh9CU5l z$NSbA)Oe!aWE$CK2kFt|giuv_s`~ieUut%r?%`hW@cvXldGl=lqxD)Bf6U$yxlw61 zn^#_ikwZ+>Y>I!r1&pei)9n#Lx_j@Zrh2oH=f!kKw50d^l~T9+uX%vrREOWr+@kphFB;FD8va0-%`6rCDXWwf2L<)YROvK?GuD9wI-(W1 z=DkF|!=_5vV2*f~wt%naw?W`H?Qy}Me^$Tac|gfXSW$>(>;s>HH-@9-X2NwC*cL(G z*uQ-x<24a+fl_{=TO((yhS~v^uDpeB`3>G_tdF!LcDu4i3}WK%2(UFW?NC?ZwjI%z z?qZu|)9KjvGp1E6sK_B<$$7VoI}h*W1dt}l`&6J`V=zOI|Ecu?x)&|Lc|loazeZLr z5is!$cspg46sfN{cM^F?)@&W3ssi2k^C6x#xvM*@AYDMQ)DhiE(Ei|EKI~vpUL!k{ zZbiOJJ1c*2+@bYcaEvk&kWL^`g0b1+$~Vd<_&mG`aPE-;i9*Bul=PqJyW@tW&P~&3 zq$Ch&YQF?JDJ@cWXF@z(3&f`ssNYkVjXJz{&6bmw2W#F-OXj%U8aY?$G({e_080hX zU^Ng)Atd8bicalG#g-Pa{qu7GCKbK6T>7QQ* zh);Fw{f8hU`hHnJA~QyZSL97&P*&37Jv-@}qG|cR8l8UMC_I!N{XqDr6wZxZA*sBg zYWJ5+qqx!RsKJ+m)Rx&saVj*^K`CQH1;iH0C6NXxm>Lfp-(emWj^z7&hq}uA8)umD zbV#z1>l?GjEtZ%4V18YxfgsV^O^5IOeTlBIrt{vO$pQD5r!u53t&r1`BrHDBn0DA+LrPi^LRrSxK;J7cMS^-Jl?+HTxQe8O1xmTE zD%j3GomOEU$Kv-g$zi7__I9l6F&+z=`B8Y0@pr)&KDe#`%!2P@rQ|L}`-i}Co*o+& zkBao@hUg9d!VwXdkc3$mzVRKQEULYbfBbcj7e&|d3>#~PRM3yjM%zaD*|#c)GB>oo z-={ZP;AYD|d;+}9Jg!p&l^R3cRq$rnfcJotMO_=0?_yooRQs%>Z9ejhz3Ne`q1De# zYs(H?c`Tcq@FJPU4q$9qX3J0(*Ip`|E!V}+yG(ef+?5leHVH@L>XrPQIF~?VQ zkyI8!l7(jGqFTcdYJ+U7OY zGGvPx-vr+>j#OO^c!HWBhVnwRYG_oX-XD72CPfPBxb}c6t&PN=mb<$W-zQk2pO1fv>%p?{@$HbJt@h?m7!+qlJ3C@|Z zaf{nuMggZzFrY3YJHkF~USbk>M+W_g=@~bqkdPpKTM$2AJAD7OhI)|j6jl0;oZ4Kp zIet0AgTLhNZi2Wk3PLvkW-5^Cs;#e=?SqrpCDBSxlIDkIg>Opq0q;lvozq7%)Ur* z)z}>*y!TkG8bWEvbkHyDrdmXey7@Qltg#nnrPfABtvbWZqrT7&4>6ZhLU41LX%jnt z8TsMJblJY;5zF_D4=?ve3+nD(B>gt=PaX3X@_%4z=_dfb%~kkIs4Awx zC=%pFMYu6D1@Of0dl2OPE>Ch*3atS2&*PjWqI*TRN6zN1LClivw@Y0&-`a^=-*gvv zX7qmAZjqTsJ$Eu9BGmF%Ko^O8&wR}Uli9byc0Dl`fVc}J7M!LqFUMYoHKH~U>x^j= z6xq@C1a`C?X^GE>@ftKq3h9P^3j}wQd<2Hh9cL!OqS7?jkv?$Tb1L`3{&#<Ex=T~1Zr#WVtBX5#iHBO9KptSX+$)eJn4b|l`VcM{eK66npq zNzq0ozMat)`uy|jnVg`RlB-3pM|Os@?;ZCOo@laK+&vF7fEqI3Pe;K-JV{Q50?A4j zhb>++M6dT?)*392TxC2-obAQZj<$T=CBD_tSmz;qTa|c*u{y*{q+P!W+w-J%%-(2A zd4!~OMV6G5PCp)&*HHL|mUR5q%M@xM`Tq0sc}KEm?2N3<;eCIK!m57x2CQswjM1aa zA}atL0f1KQ#Cwh+>ez}FK&K8Mg#<+)1PW4!Xg%p$F9fW&4e#Xbl2X zY0o=nR17SA&o|zJ+>)mZ?OM>{)n&!h`QT@Y*uWBwPOt$xH-|Ht?eF4W%+r+LC?3f^ zRG{|p=6%28?eF17;Iv~V2fIRC2nw~}tCUyj7xrN$T(qd@gE!3g-A`UY14X;s)j-N4 zfj#9zS+cK)2B>jT>0S?=@6pa`#`qZ6q!bPw59+lwcv%iS#SK zgvutyt%1$KCK#8!KIitEP*9V@7t%eu@T~v}vOK)-adj8Ij=rs{_P|WxMeA0j^Fc1s zbFV^}k+zuTDt(`LW_(hiRm{|*dB(#A^W`ziMst^UgXPc_9u3c@!JrIF z_YtR`ciosPQiL{U4_+-g7yHAT8~YBUdHR@v4|rfN<_X{9_#(PjZo}!%aj=cvp z{i<@`FUJ*3cQhD)Bm;mw5qCnegEq=m{Eg8Lh>G}>`7~<>V-z%lWB44E5eJqDn?Rs;=i zfE{hhrt(E;ECRK}-l9@tA48Fo+R_FV66KDqoiE+m6pDzuuUX*;05wZ%$Kb7YjJ!6nzmg`7ByBnxm@vn8t-&1pQi?iydT zxI~PGNp}&YWL8*g-thU;cl>RWEu)vUi2D&3sDvA~aOmc6OK(J?yZ6CTgNArtc{BeKx(VJqn+X zOreNzPISz!R&s3gZ2V4+qi~F zClXoZW41O9YqV*O!W}%mI@G(y5^TM~VI)iu7~8|4+4vDi*;o2OzX(VB#4_vDyxT z?Xg$ZT?|^+|MHXj|EE6e|L%PQUQ+9erk?G6gpVs@5$hbqjJ_gQ}afx8} zYJ!l%phZy?|AVZBPff00gS>5TYERvYGTzN9<&BAu;_*d!!J50+6^$)Ch9;7DDIhXX zELvDnXbCDC7w!!bD`{y>)tN8{%+{0=uQ2rK+tFk|rJ>H_d_x<4xW9irVELqzq>-n$ zuW2gkom32kZ?|gEIF#}cxH0! z?jxk-65Xzl7PyCdgna$n&eJ!~T>05`>*>>{O_}+J_x(9owEW-nTNi8j=P@kkkad!j zw1gJgymOxbU}q%bgr=REh-2(s8q?*Gz$&f5FvUdQJG_t@9q^OMRnNVjPhQBlleJ{t zZGyNEUlLGOm(hwZj=f)3&>1}KMJY|c!B+IYsPwX}rc<~_rsbK_`{wKT9(ODn?(*$# z9=E9QPPl$;t!eiH^2CcL#ELH^$HGEy zo|z1_+Z=4R>6@Fm+t;kpYl@EguOjxD`<{QVX7)eq3;4U{^z8p(jDP$FMw!#I|F7}C zf0%sk_nf`weBi&256tZgf5B=vw=c|*UH*kz%*Cz$K5=XAUHp6B#oWH|7Xe^yUzpn$ z{=zNhV$r`h7R}lBzmI+A_JzL)0CW4o+`jM^ZZQ|P{`f8pV4046VPInW6)1sO#09ae?ASJA>qlJNK$^d?FZbn0KH+yhp-PD02hN4-vo8qF#y_F>P%yPRk@`GIg4Z(Ol(;megyy-Z35+B zxamV&-rUX3S$571<`&poG?pA_i;Jv3i0IpB4P`}+yJ+skipQiDOuxT?YnB}wP!&hO;9vUHqo52DPL zY>h1`{>3i$hGV>2ZmfTO=T=3HOZdu*dN25@_`nn(&CT0BHv+)@%$ec5IvGp*Pm s#T36<)bBmw9oEF2V%PDZ^6PUo=YMa_dCtCb_MP*A{~8~d_qFf;0y+$(#sB~S literal 0 HcmV?d00001 diff --git a/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png b/assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6d07508979697db9b52569d032fc3c94088287 GIT binary patch literal 46036 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%0A%{;l2R-P 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 Q%WY&&op7`z9`jE67tAbFCjbBd literal 0 HcmV?d00001 diff --git a/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png b/assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png new file mode 100644 index 0000000000000000000000000000000000000000..d6810cbb41cb61e786a264d250b2b2e9802b8a76 GIT binary patch literal 150701 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.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var s=r(85893),o=r(11151);const t={},c="CONDITION",i={id:"about/references/keywords/CONDITION",title:"CONDITION",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONDITION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONDITION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"},next:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"condition",children:"CONDITION"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["All energy usage models may have a keyword ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"}),"\nwhich specifies conditions for the consumer to be used. At points in the time series where the condition\nevaluates to ",(0,s.jsx)(n.code,{children:"0"})," (or ",(0,s.jsx)(n.code,{children:"False"}),"), the energy consumption will be ",(0,s.jsx)(n.code,{children:"0"}),".\nThis is practical for some otherwise\nconstant consumers.\nFor example, if you use the category ",(0,s.jsx)(n.code,{children:"FIXED-PRODUCTION-LOAD"})," and you want it to depend on whether or not there is production, the ",(0,s.jsx)(n.code,{children:"CONDITION"})," keyword can be specified."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"CONDITION"})," supports the functionality described in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"}),", but is ",(0,s.jsx)(n.strong,{children:"required"})," to evaluate to ",(0,s.jsx)(n.code,{children:"True/False"})," or ",(0,s.jsx)(n.code,{children:"1/0"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"CONDITION: \n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.p,{children:"A simple example is shown below where the load is only present whenever the oil production is positive:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: production_load\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n LOAD: 5\n CONDITION: SIM1;OIL_PROD:PLA > 0\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This condition is an expression. See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>c});var s=r(67294);const o={},t=s.createContext(o);function c(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/00bdc23f.a7fe7f57.js b/assets/js/00bdc23f.a7fe7f57.js new file mode 100644 index 0000000000..5baff8a4c9 --- /dev/null +++ b/assets/js/00bdc23f.a7fe7f57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8088],{20312:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var t=i(85893),s=i(11151);const l={},a="Pump chart",d={id:"about/modelling/setup/facility_inputs/pump_modelling/pump_charts",title:"Pump chart",description:"Energy usage for pumps is not based on pre-sampled data between rates,",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"},next:{title:"Sampled compressor model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"}},r={},o=[{value:"PUMP_CHART_SINGLE_SPEED",id:"pump_chart_single_speed",level:2},{value:"Header Requirements",id:"header-requirements",level:3},{value:"Required",id:"required",level:4},{value:"Optional",id:"optional",level:4},{value:"Format",id:"format",level:3},{value:"PUMP_CHART_VARIABLE_SPEED",id:"pump_chart_variable_speed",level:2},{value:"Description",id:"description",level:3},{value:"Header Requirements",id:"header-requirements-1",level:3},{value:"Format",id:"format-1",level:3},{value:"Examples",id:"examples",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pump-chart",children:"Pump chart"}),"\n",(0,t.jsxs)(n.p,{children:["Energy usage for pumps is not based on pre-sampled data between rates,\npressures and energy usage, but on ",(0,t.jsx)(n.strong,{children:"equations and the pump chart"})," defining the pumps."]}),"\n",(0,t.jsx)(n.p,{children:"There are two types of pump models supported:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Variable speed pumps"}),"\n",(0,t.jsx)(n.li,{children:"Single speed pumps"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The pump chart defines the pump's operational area. When rates below minimum flow\n(a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs.\nhead for each speed for variable speed) are requested, the rate is projected up and\nevaluated at minimum flow to mimic the ",(0,t.jsx)(n.code,{children:"ASV"})," (anti-surge valve)."]}),"\n",(0,t.jsx)(n.p,{children:"For heads below minimum head/minimum speed, i.e., when the requested pressure\ndifference between the outlet and the inlet is smaller than the minimum pressure difference,\nthe head will be lifted up to minimum head to mimic that the pump will then be run on\nits minimum speed and the pressure will be choked back downstream of the pump.\nFor single speed pumps, the minimum speed/minimum head curve is the same as\nthe head vs. rate curve."}),"\n",(0,t.jsxs)(n.admonition,{title:"Tip",type:"tip",children:[(0,t.jsx)(n.p,{children:"When calibrating pump charts to historical data, the head values for maximum speed could be\nput in the cloud of data to be unbiased. However, eCalc will treat all head values above the\nmaximum defined in the chart as infeasible (outside pump capacity)."}),(0,t.jsxs)(n.p,{children:["To mitigate this when\nrunning through historical data for power calibration, the keyword ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",children:"HEAD_MARGIN"})," may be used to move points outside capacity (but inside the margin) to the capacity limit."]})]}),"\n",(0,t.jsx)(n.h2,{id:"pump_chart_single_speed",children:"PUMP_CHART_SINGLE_SPEED"}),"\n",(0,t.jsxs)(n.p,{children:["Pump chart data for single speed pump. The required fields are ",(0,t.jsx)(n.code,{children:"RATE"})," and ",(0,t.jsx)(n.code,{children:"HEAD"}),". Optionally (and most likely) ",(0,t.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,t.jsx)(n.code,{children:"UNITS"})," should be supplied as well.\n(if not given, efficiency is set to 100%)."]}),"\n",(0,t.jsx)(n.h3,{id:"header-requirements",children:"Header Requirements"}),"\n",(0,t.jsx)(n.h4,{id:"required",children:"Required"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"RATE"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"HEAD"})}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"optional",children:"Optional"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"EFFICIENCY"}),", if not set the efficiency is assumed to be 100%."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"SPEED"}),", if set all values must be equal."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be\npresent in the input file without the run failing. There is still a check that all speeds are equal if speed is present\nto avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data."}),"\n",(0,t.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"pump_chart_variable_speed",children:"PUMP_CHART_VARIABLE_SPEED"}),"\n",(0,t.jsx)(n.h3,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Pump chart data for variable speed (VSD) pump. The required fields are ",(0,t.jsx)(n.code,{children:"SPEED"}),",\n",(0,t.jsx)(n.code,{children:"RATE"})," and ",(0,t.jsx)(n.code,{children:"HEAD"}),". Optionally (and most likely) ",(0,t.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,t.jsx)(n.code,{children:"UNITS"})," should be supplied as well.\n(if not given, efficiency is set to 100%)."]}),"\n",(0,t.jsx)(n.h3,{id:"header-requirements-1",children:"Header Requirements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"RATE"}),", ",(0,t.jsx)(n.code,{children:"HEAD"})," and ",(0,t.jsx)(n.code,{children:"SPEED"})," required."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"EFFICIENCY"}),", ",(0,t.jsx)(n.code,{children:"UNITS"})," optional."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n FILE: \n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: \n HEAD: \n EFFICIENCY: \n"})}),"\n",(0,t.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: a_single_speed_pump\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n \n - NAME: a_variable_speed_pump\n FILE: inputs/variable_speed_pumpchart.csv\n TYPE: PUMP_CHART_VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n\n - NAME: a_single_speed_pump_with_head_margin_applied\n FILE: inputs/single_speed_pumpchart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n HEAD_MARGIN: 10\n"})})]})}function c(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>a});var t=i(67294);const s={},l=t.createContext(s);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0425b884.948254ce.js b/assets/js/0425b884.948254ce.js new file mode 100644 index 0000000000..630188b439 --- /dev/null +++ b/assets/js/0425b884.948254ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9336],{50025:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=n(85893),i=n(11151);const o={title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},a="Python Library",s={id:"about/getting_started/library/index",title:"Python Library",description:"Getting started with eCalc Python Library",source:"@site/docs/about/getting_started/library/index.md",sourceDirName:"about/getting_started/library",slug:"/about/getting_started/library/",permalink:"/ecalc/docs/about/getting_started/library/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/library/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Python Library",sidebar_position:3,description:"Getting started with eCalc Python Library"},sidebar:"about",previous:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"},next:{title:"YAML",permalink:"/ecalc/docs/about/getting_started/yaml/"}},c={},d=[];function l(t){const e={a:"a",admonition:"admonition",h1:"h1",p:"p",strong:"strong",...(0,i.a)(),...t.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{id:"python-library",children:"Python Library"}),"\n",(0,r.jsx)(e.admonition,{type:"warning",children:(0,r.jsxs)(e.p,{children:["It is currently ",(0,r.jsx)(e.strong,{children:"not recommended"})," to use the Python library due to upcoming breaking changes."]})}),"\n",(0,r.jsx)(e.p,{children:"If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in\ndynamically changing the eCalc models."}),"\n",(0,r.jsxs)(e.p,{children:["See all commands and options in the ",(0,r.jsx)(e.a,{href:"/ecalc/docs/about/references/api/",children:"API reference"})]})]})}function u(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,r.jsx)(e,{...t,children:(0,r.jsx)(l,{...t})}):l(t)}},11151:(t,e,n)=>{n.d(e,{Z:()=>s,a:()=>a});var r=n(67294);const i={},o=r.createContext(i);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:a(t.components),r.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/0477162f.6c398dc7.js b/assets/js/0477162f.6c398dc7.js new file mode 100644 index 0000000000..109e1c392b --- /dev/null +++ b/assets/js/0477162f.6c398dc7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6173],{83954:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>E,frontMatter:()=>o,metadata:()=>t,toc:()=>d});var s=r(85893),c=r(11151);const o={},i="VENTING_EMITTERS",t={id:"about/references/keywords/VENTING_EMITTERS",title:"VENTING_EMITTERS",description:"New definition of VENTING_EMITTERS from eCalc v8.8!",source:"@site/docs/about/references/keywords/VENTING_EMITTERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/VENTING_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/VENTING_EMITTERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES"},next:{title:"!include",permalink:"/ecalc/docs/about/references/keywords/include"}},a={},d=[{value:"eCalc version 8.7 and before: Description",id:"ecalc-version-87-and-before-description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"eCalc from version 8.8: Description",id:"ecalc-from-version-88-description",level:2},{value:"Format",id:"format-1",level:2},{value:"Example",id:"example-1",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"venting_emitters",children:"VENTING_EMITTERS"}),"\n",(0,s.jsx)("span",{className:"major-change-new-feature",children:(0,s.jsx)(n.p,{children:"New definition of VENTING_EMITTERS from eCalc v8.8!"})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"INSTALLATIONS"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"NAME"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(n.code,{children:"EMISSION_NAME"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(n.code,{children:"CATEGORY"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(n.code,{children:"EMITTER_MODEL"})]})]})})]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.8: Updated definition of VENTING_EMITTERS. New keyword ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," is replacing ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"}),". Now possible to define ",(0,s.jsx)(n.code,{children:"UNIT"})," and ",(0,s.jsx)(n.code,{children:"TYPE"})," for emission rate."]}),"\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.7: ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword is replacing the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword."]}),"\n",(0,s.jsx)(n.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"ecalc-version-87-and-before-description",children:"eCalc version 8.7 and before: Description"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword covers the direct emissions on the installation\nthat are not consuming energy. The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"}),", ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," are required."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n EMISSION_NAME: \n CATEGORY: \n EMITTER_MODEL: \n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n EMISSION_NAME: CH4\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n \n ...\n - NAME: SomeOtherVentingEmitter\n EMISSION_NAME: C2H6\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n \n"})}),"\n",(0,s.jsx)(n.h2,{id:"ecalc-from-version-88-description",children:"eCalc from version 8.8: Description"}),"\n",(0,s.jsxs)(n.p,{children:["The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),", ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," are required."]}),"\n",(0,s.jsx)(n.h2,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n CATEGORY: \n EMISSION:\n \n\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example-1",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n EMISSION:\n \n ...\n - NAME: SomeOtherVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n EMISSION:\n \n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>i});var s=r(67294);const c={},o=s.createContext(c);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06adec10.4c91d0a5.js b/assets/js/06adec10.4c91d0a5.js new file mode 100644 index 0000000000..0d5f2248d6 --- /dev/null +++ b/assets/js/06adec10.4c91d0a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2153],{50904:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>m,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>t});var n=a(85893),l=a(11151);const r={},m="POWERLOSSFACTOR",i={id:"about/references/keywords/POWERLOSSFACTOR",title:"POWERLOSSFACTOR",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/POWERLOSSFACTOR.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/POWERLOSSFACTOR.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"},next:{title:"POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT"}},c={},t=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(s){const e={a:"a",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"powerlossfactor",children:"POWERLOSSFACTOR"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(e.p,{children:["A factor that may be added to account for power line losses. E.g. if you have a subsea installation with a power line to\nanother installation, there may be line losses. For a power line loss of 5%, ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"}),"\nis set to 0.05 and the power required from the power source (generator set) will be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"q"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"b"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"})]})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mi,{children:"O"}),(0,n.jsx)(e.mi,{children:"W"}),(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsx)(e.mi,{children:"L"}),(0,n.jsx)(e.mi,{children:"O"}),(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"S"}),(0,n.jsx)(e.mi,{children:"F"}),(0,n.jsx)(e.mi,{children:"A"}),(0,n.jsx)(e.mi,{children:"C"}),(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mi,{children:"O"}),(0,n.jsx)(e.mi,{children:"R"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power_{required} = \\frac{power_{subsea}}{1-POWERLOSSFACTOR}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7167em",verticalAlign:"-0.2861em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"re"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",style:{marginRight:"0.03588em"},children:"q"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"re"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"d"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.8769em",verticalAlign:"-0.7693em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1076em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"PO"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"ER"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"L"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"OSSF"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"A"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"CTOR"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"b"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"se"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"b"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power_{subsea}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"b"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"se"}),(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"a"})]})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the power calculated from the energy function (before power loss is taken into account)."]}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"POWERLOSSFACTOR: \n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"POWERLOSSFACTOR: 0.05\n"})}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"POWERLOSSFACTOR: SIM1;POWERLOSS {+} 0.05\n"})})]})}function d(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},11151:(s,e,a)=>{a.d(e,{Z:()=>i,a:()=>m});var n=a(67294);const l={},r=n.createContext(l);function m(s){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function i(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:m(s.components),n.createElement(r.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/06dd1efa.556a007e.js b/assets/js/06dd1efa.556a007e.js new file mode 100644 index 0000000000..cc854d8c96 --- /dev/null +++ b/assets/js/06dd1efa.556a007e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6039],{50332:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var r=n(85893),o=n(11151);const s={},a="END",d={id:"about/references/keywords/END",title:"END",description:"END",source:"@site/docs/about/references/keywords/END.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/END",permalink:"/ecalc/docs/about/references/keywords/END",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/END.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"},next:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"}},i={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"end",children:"END"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/END",children:"END"})}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Required"}),(0,r.jsx)(t.th,{children:"Child of"}),(0,r.jsx)(t.th,{children:"Children/Options"})]})}),(0,r.jsx)(t.tbody,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"No"}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"None"})}),(0,r.jsx)(t.td,{children:(0,r.jsx)(t.code,{children:"None"})})]})})]}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(t.p,{children:"Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for."}),"\n",(0,r.jsx)(t.p,{children:'If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to "00:00:00", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59).'}),"\n",(0,r.jsx)(t.p,{children:"You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point,\nand will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data."}),"\n",(0,r.jsxs)(t.p,{children:["The ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/START",children:"START"})," keyword have similar behaviour."]}),"\n",(0,r.jsxs)(t.p,{children:["If END is not specified, eCalc will make an educated (but possibly incorrect) ",(0,r.jsx)(t.em,{children:"guess"})," on when the output data should end."]}),"\n",(0,r.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"END: \n"})}),"\n",(0,r.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,r.jsxs)(t.p,{children:["Given an input dataset from ",(0,r.jsx)(t.strong,{children:"01-01-2000 - 01-01-2040"}),", ignoring the last 20 years of data\ncan be achieved as follows:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"END: 2020-01-01\n"})})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>a});var r=n(67294);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0745e7f0.012598cb.js b/assets/js/0745e7f0.012598cb.js new file mode 100644 index 0000000000..3b57bc8713 --- /dev/null +++ b/assets/js/0745e7f0.012598cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4069],{98273:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var r=a(85893),s=a(11151);const t={slug:"v8.5-release",title:"v8.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:15},i="eCalc",l={id:"changelog/v8-5",title:"v8.5",description:"New Features",source:"@site/docs/changelog/v8-5.md",sourceDirName:"changelog",slug:"/changelog/v8.5-release",permalink:"/ecalc/docs/changelog/v8.5-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-5.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:15,frontMatter:{slug:"v8.5-release",title:"v8.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:15},sidebar:"changelog",previous:{title:"v8.4",permalink:"/ecalc/docs/changelog/v8.4-release"},next:{title:"v8.6",permalink:"/ecalc/docs/changelog/v8.6-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,r.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added chart area flag NO_FLOW_RATE to the possible statuses for an operational point in a variable speed compressor chart. The chart area flags can currently only be found in the json result file, but we will also try to find a way of displaying this information in the WebApp as well."}),"\n",(0,r.jsx)(n.li,{children:"Whenever there is a variable speed compressor only recirculation fluid (can happen in a multiple streams and pressures compressor train) a warning will be logged."}),"\n",(0,r.jsx)(n.li,{children:"Add rate type to more equipment in results"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"nmvoc"})," emissions were incorrectly reported for the ltp categories ",(0,r.jsx)(n.code,{children:"HEATER"})," and ",(0,r.jsx)(n.code,{children:"BOILER"}),": The emission query filters included ",(0,r.jsx)(n.code,{children:"nox"}),", and are now corrected to ",(0,r.jsx)(n.code,{children:"nmvoc"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Instead of applying the surge control margin to the average of the minimum flow rate for all speed curves in the compressor chart, a more robust calculation is implemented for variable speed compressors: The updated minimum flow is calculated individually for each speed, using the control margin as the increase in minimum flow, in percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. This solves the problem of eCalc failing when the new calculated minimum rate was outside the compressor chart for a given speed."}),"\n",(0,r.jsx)(n.li,{children:"Improved error messages"}),"\n",(0,r.jsx)(n.li,{children:"Other fixes"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsx)(n.p,{children:"None"})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>i});var r=a(67294);const s={},t=r.createContext(s);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/074935d7.787161b6.js b/assets/js/074935d7.787161b6.js new file mode 100644 index 0000000000..7d3a027643 --- /dev/null +++ b/assets/js/074935d7.787161b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1042],{52926:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(85893),t=n(11151);const o={},c="RATE_PER_STREAM",a={id:"about/references/keywords/RATE_PER_STREAM",title:"RATE_PER_STREAM",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/RATE_PER_STREAM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE_PER_STREAM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS"},next:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"rate_per_stream",children:"RATE_PER_STREAM"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",children:"RATE_PER_STREAM"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Used to define the rate for each stream for the VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," types using a list of ",(0,s.jsx)(r.code,{children:"expression"})]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"RATE_PER_STREAM:\n - \n - \n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"RATE_PER_STREAM:\n - SIM1:GAS_PROD\n - SIM1:GAS_SALES\n"})})]})}function l(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>c});var s=n(67294);const t={},o=s.createContext(t);function c(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/07b341f3.a32e4fb7.js b/assets/js/07b341f3.a32e4fb7.js new file mode 100644 index 0000000000..b0cfb0fca2 --- /dev/null +++ b/assets/js/07b341f3.a32e4fb7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8267],{73985:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=t(85893),s=t(11151);const o={},c="VARIABLES",a={id:"about/references/keywords/VARIABLES",title:"VARIABLES",description:"VARIABLES",source:"@site/docs/about/references/keywords/VARIABLES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/VARIABLES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"},next:{title:"VENTING_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS"}},i={},d=[{value:"Description",id:"description",level:2}];function u(e){const n={a:"a",h1:"h1",h2:"h2",p:"p",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"variables",children:"VARIABLES"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(n.p,{children:"This keyword is used to define variables which can be used throughout the YAML file via the use of expressions.\nThese variables can be based on time or can be independent."}),"\n",(0,r.jsxs)(n.p,{children:["Information about defining and using variables can be seen ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/variables",children:"here"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>c});var r=t(67294);const s={},o=r.createContext(s);function c(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/084f7ebf.d2478f08.js b/assets/js/084f7ebf.d2478f08.js new file mode 100644 index 0000000000..3f814c9e3f --- /dev/null +++ b/assets/js/084f7ebf.d2478f08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3847],{54395:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>R,contentTitle:()=>E,default:()=>d,frontMatter:()=>t,metadata:()=>c,toc:()=>S});var s=n(85893),o=n(11151);const t={},E="DOWNSTREAM_PRESSURE_CONTROL",c={id:"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",title:"DOWNSTREAM_PRESSURE_CONTROL",description:"MODELS /",source:"@site/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"},next:{title:"EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY"}},R={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"downstream_pressure_control",children:"DOWNSTREAM_PRESSURE_CONTROL"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"}),"\n/ ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",children:"DOWNSTREAM_PRESSURE_CONTROL"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["This keyword is used only for ",(0,s.jsx)(r.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," type. It is used within the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword."]}),"\n",(0,s.jsxs)(r.p,{children:["The pressure control method downstream (after) the interstage pressure is specified in this keyword.\nFor more explanation see ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n DOWNSTREAM_PRESSURE_CONTROL: \n ...\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE\n"})})]})}function d(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>c,a:()=>E});var s=n(67294);const o={},t=s.createContext(o);function E(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function c(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:E(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0aeda122.cbb99604.js b/assets/js/0aeda122.cbb99604.js new file mode 100644 index 0000000000..13b0b7fb5e --- /dev/null +++ b/assets/js/0aeda122.cbb99604.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7832],{88870:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>c,metadata:()=>i,toc:()=>a});var r=s(85893),o=s(11151);const c={},t="HEAD",i={id:"about/references/keywords/HEAD",title:"HEAD",description:"Description",source:"@site/docs/about/references/keywords/HEAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HEAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT"},next:{title:"HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"COMPRESSORS",id:"compressors",level:3},{value:"PUMPS",id:"pumps",level:3},{value:"Example",id:"example",level:2},{value:"COMPRESSORS",id:"compressors-1",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"head",children:"HEAD"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"HEAD"})," is a keyword that is used defining ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),".\nHead can either be given as a M, KJ_PER_KG, JOULE_PER_KG."]}),"\n",(0,r.jsxs)(n.p,{children:["For compressors, it is used in two separate ways under the ",(0,r.jsx)(n.code,{children:"MODELS"})," or section:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Defining the ",(0,r.jsx)(n.code,{children:"UNITS"})," of ",(0,r.jsx)(n.code,{children:"HEAD"})]}),"\n",(0,r.jsxs)(n.li,{children:["Defining the set of values for ",(0,r.jsx)(n.code,{children:"HEAD"})," under ",(0,r.jsx)(n.code,{children:"CURVES"})," section. Here, this ",(0,r.jsx)(n.strong,{children:"must"})," be given as a set of values whose length (number of variables) match the correlating ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})," and ",(0,r.jsx)(n.code,{children:"RATE"})," values."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For pumps, it is defined under the ",(0,r.jsx)(n.code,{children:"FACILITY_INPUTS"})," section."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.h3,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n ...\n UNITS:\n HEAD: \n ...\n ....\n"})}),"\n",(0,r.jsx)(n.h3,{id:"pumps",children:"PUMPS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: \n ...\n UNITS:\n HEAD: \n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h3,{id:"compressors-1",children:"COMPRESSORS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n"})})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>t});var r=s(67294);const o={},c=r.createContext(o);function t(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f7b5825.3ef7c2f4.js b/assets/js/0f7b5825.3ef7c2f4.js new file mode 100644 index 0000000000..fd72553c3a --- /dev/null +++ b/assets/js/0f7b5825.3ef7c2f4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7238],{8418:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var t=n(85893),c=n(11151);const s={},o="ELECTRICITY2FUEL",a={id:"about/references/keywords/ELECTRICITY2FUEL",title:"ELECTRICITY2FUEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ELECTRICITY2FUEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ELECTRICITY2FUEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY"},next:{title:"EMISSION",permalink:"/ecalc/docs/about/references/keywords/EMISSION"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Example 1",id:"example-1",level:3},{value:"Example 2",id:"example-2",level:3}];function l(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"electricity2fuel",children:"ELECTRICITY2FUEL"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Yes"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"GENERATORSETS"})}),(0,t.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," specifies the correlation between the electric power\ndelivered and the fuel consumed by a generator set."]}),"\n",(0,t.jsx)(r.admonition,{type:"note",children:(0,t.jsxs)(r.p,{children:["Note that this describes the relation for a ",(0,t.jsx)(r.em,{children:"set"}),' of generators and if there is more than one\ngenerator, the power vs. fuel usually makes a "jump" when the capacity of the generator(s) is\nexceeded and an additional generator is started.']})}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," may be modelled with a constant function through time or\nwith different power vs. fuel relations for different time intervals."]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL: \n"})}),"\n",(0,t.jsx)(r.p,{children:"or"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL:\n : \n : \n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.h3,{id:"example-1",children:"Example 1"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL: generatorset_electricity_to_fuel_reference\n"})}),"\n",(0,t.jsx)(r.h3,{id:"example-2",children:"Example 2"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"ELECTRICITY2FUEL:\n 2001-01-01: generatorset_electricity_to_fuel_reference1\n 2005-01-01: generatorset_electricity_to_fuel_reference2\n"})}),"\n",(0,t.jsxs)(r.p,{children:["Where ",(0,t.jsx)(r.code,{children:"generatorset_electricity_to_fuel_reference"})," is a ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"\nof ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," ",(0,t.jsx)(r.code,{children:"ELECTRICITY2FUEL"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,c.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>o});var t=n(67294);const c={},s=t.createContext(c);function o(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0fd76486.e7925637.js b/assets/js/0fd76486.e7925637.js new file mode 100644 index 0000000000..843fda99ac --- /dev/null +++ b/assets/js/0fd76486.e7925637.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8746],{39632:(e,n,l)=>{l.r(n),l.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>t,metadata:()=>i,toc:()=>r});var o=l(85893),a=l(11151);const t={sidebar_position:7,description:"Examples of eCalc usage"},s="Examples",i={id:"about/modelling/examples/index",title:"Examples",description:"Examples of eCalc usage",source:"@site/docs/about/modelling/examples/index.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/",permalink:"/ecalc/docs/about/modelling/examples/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/index.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,description:"Examples of eCalc usage"},sidebar:"about",previous:{title:"Generic Workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow"},next:{title:"Simple model",permalink:"/ecalc/docs/about/modelling/examples/simple"}},c={},r=[];function d(e){const n={a:"a",h1:"h1",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"examples",children:"Examples"}),"\n",(0,o.jsx)(n.p,{children:"Here you find some examples."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/simple",children:"Simple example"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/advanced",children:"Advanced example"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/drogon",children:"Drogon example"})}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"The models are also available in the Python library under the libecalc.examples module."})]})}function m(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,l)=>{l.d(n,{Z:()=>i,a:()=>s});var o=l(67294);const a={},t=o.createContext(a);function s(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10c684b0.11d7ac8c.js b/assets/js/10c684b0.11d7ac8c.js new file mode 100644 index 0000000000..08957f9442 --- /dev/null +++ b/assets/js/10c684b0.11d7ac8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5870],{30047:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=n(85893),a=n(11151);const o={},s="START",i={id:"about/references/keywords/START",title:"START",description:"START",source:"@site/docs/about/references/keywords/START.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/START",permalink:"/ecalc/docs/about/references/keywords/START",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/START.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES"},next:{title:"STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"start",children:"START"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/START",children:"START"})}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(t.p,{children:"The global start date for eCalc to begin energy and emission calculations. It is recommended that you have control\nof which date you want data to be calculated and exported for, in particular when using LTP and FDE workflows."}),"\n",(0,r.jsx)(t.p,{children:'The is , meaning that if you specify 2020-01-01, the whole year of 2020 is included in the output. The hours, minutes and seconds\nof the day are implicitly set to "00:00:00", so the counting starts from midnight on January 1st 2020.'}),"\n",(0,r.jsxs)(t.p,{children:["You can provide a date that is before the global time vector, but it is recommended to set it to the start of your timeseries data. Normally the\ntimeseries data provides this information directly, when specifying the first time step e.g. 2020-01-01, meaning that the data is valid from January 1st 2020,\nbut data by default has (",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"}),"), which means that it backfills data, and then we will know how far back\nto backfill data (ie defines this for the first period)."]}),"\n",(0,r.jsxs)(t.p,{children:["The cousin of is ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/END",children:"END"})," and have similar behaviour, but check the reference for details, to make sure you have the correct understanding."]}),"\n",(0,r.jsxs)(t.p,{children:["If is not specified, eCalc will make and educated ",(0,r.jsx)(t.em,{children:"GUESS"})," on when the output data should start, but that may be incorrect, therefore it is recommended that you\nstay in control of that to make sure you get correct output."]}),"\n",(0,r.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"START: \n"})}),"\n",(0,r.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,r.jsxs)(t.p,{children:["Given an input dataset from ",(0,r.jsx)(t.strong,{children:"01-01-2000 - 01-01-2040"}),", ignoring the first 20 years of data\ncan be achieved as follows:"]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"START: 2020-01-01\n"})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var r=n(67294);const a={},o=r.createContext(a);function s(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/11516e85.7d67d8fc.js b/assets/js/11516e85.7d67d8fc.js new file mode 100644 index 0000000000..26396b2273 --- /dev/null +++ b/assets/js/11516e85.7d67d8fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3054],{14788:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>R,contentTitle:()=>c,default:()=>d,frontMatter:()=>t,metadata:()=>E,toc:()=>a});var s=n(85893),o=n(11151);const t={},c="UPSTREAM_PRESSURE_CONTROL",E={id:"about/references/keywords/UPSTREAM_PRESSURE_CONTROL",title:"UPSTREAM_PRESSURE_CONTROL",description:"MODELS /",source:"@site/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS"},next:{title:"VARIABLES",permalink:"/ecalc/docs/about/references/keywords/VARIABLES"}},R={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function S(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"upstream_pressure_control",children:"UPSTREAM_PRESSURE_CONTROL"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"}),"\n/ ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",children:"UPSTREAM_PRESSURE_CONTROL"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["This keyword is used only for ",(0,s.jsx)(r.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," type. It is used within the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword."]}),"\n",(0,s.jsxs)(r.p,{children:["The pressure control method upstream (before) the interstage pressure is specified in this keyword.\nFor more explanation see ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: \n ...\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n ...\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE\n"})})]})}function d(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(S,{...e})}):S(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>E,a:()=>c});var s=n(67294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function E(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1287dd43.379819cf.js b/assets/js/1287dd43.379819cf.js new file mode 100644 index 0000000000..f54d047cf6 --- /dev/null +++ b/assets/js/1287dd43.379819cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3700],{49474:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>a});var i=t(85893),s=t(11151);const o={},r="Git",l={id:"contribute/guides/git",title:"Git",description:"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base.",source:"@site/docs/contribute/guides/01-git.md",sourceDirName:"contribute/guides",slug:"/contribute/guides/git",permalink:"/ecalc/docs/contribute/guides/git",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/guides/01-git.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",previous:{title:"Guides",permalink:"/ecalc/docs/category/guides"},next:{title:"Conventional Commits",permalink:"/ecalc/docs/contribute/guides/conventional-commits"}},c={},a=[{value:"Setting up Git",id:"setting-up-git",level:2},{value:"Using Git",id:"using-git",level:2},{value:"Cloning a git repository",id:"cloning-a-git-repository",level:3},{value:"Tell Git who you are",id:"tell-git-who-you-are",level:3},{value:"Create your own branch",id:"create-your-own-branch",level:3},{value:"Switch between existing branches",id:"switch-between-existing-branches",level:3},{value:"Fetch changes from GitHub",id:"fetch-changes-from-github",level:3},{value:"Send your changes to GitHub",id:"send-your-changes-to-github",level:3},{value:"Check status of changes",id:"check-status-of-changes",level:3},{value:"Add files",id:"add-files",level:3},{value:"Commit changes",id:"commit-changes",level:3},{value:"Send changes to GitHub",id:"send-changes-to-github",level:3},{value:"Workflow examples",id:"workflow-examples",level:2},{value:"Pull Requests",id:"pull-requests",level:3},{value:"Fork the repository",id:"fork-the-repository",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"git",children:"Git"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://git-scm.com/",children:"Git"})," is the version control system (VCS) that is responsible for tracking all changes done to the code base.\nGit is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development\nof source code and documentation. We use Git as a service through GitHub. See ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started",children:"GitHub Docs"}),"\nfor more information about GitHub and how to get started."]}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsx)(n.p,{children:"If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=the%20browser%2C%20including%3A-,Creating%20a%20repository,-Forking%20a%20repository",children:"Creating a repository"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=Creating%20a%20repository-,Forking%20a%20repository,-Managing%20files",children:"Forking a repository"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git#:~:text=Forking%20a%20repository-,Managing%20files,-Being%20social",children:"Managing files"})}),"\n"]})]}),"\n",(0,i.jsx)(n.h2,{id:"setting-up-git",children:"Setting up Git"}),"\n",(0,i.jsxs)(n.p,{children:["Go to ",(0,i.jsx)(n.a,{href:"https://git-scm.com/downloads",children:"git-scm.com"})," to download the appropriate git client unless it is already installed on your system."]}),"\n",(0,i.jsx)(n.p,{children:"To verify that git is installed, you can run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git --version\n"})}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/set-up-git",children:"GitHub Docs - Set up Git"})," for detailed instructions."]}),"\n",(0,i.jsx)(n.h2,{id:"using-git",children:"Using Git"}),"\n",(0,i.jsx)(n.p,{children:"Git is a powerful tool that can be used in many ways. We recommend the following resources:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Introduction to git - ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/using-git/about-git",children:"GitHub - About git"})]}),"\n",(0,i.jsxs)(n.li,{children:["How to get out of git trouble ",(0,i.jsx)(n.a,{href:"https://ohshitgit.com/",children:"Oh shit, Git!?!"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Below we will describe the most commonly used commands and scenarios when working with git."}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsx)(n.p,{children:"In the following sections we use the syntax <some text> where you should fill in your own values, such as:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"<change type>"}),": ",(0,i.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"})," change types such as feat, fix, docs, test, chore, refactor, etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"<issue number>"}),": the GitHub ",(0,i.jsx)(n.a,{href:"https://github.com/equinor/ecalc",children:"Issue Number"})," that you are solving. This may be omitted if you are fixing something tiny."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"<description>"}),": a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string."]}),"\n"]})]}),"\n",(0,i.jsx)(n.h3,{id:"cloning-a-git-repository",children:"Cloning a git repository"}),"\n",(0,i.jsx)(n.p,{children:"Navigate to the location where you want to store the code, and clone the repository:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git clone git@github.com:equinor/ecalc.git\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the\nsame name as the repository, ecalc/."}),"\n",(0,i.jsx)(n.h3,{id:"tell-git-who-you-are",children:"Tell Git who you are"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git config --global user.name "My name"\ngit config --global user.email example@email.com\n'})}),"\n",(0,i.jsx)(n.p,{children:"This is what will show in the git log when you make changes."}),"\n",(0,i.jsx)(n.h3,{id:"create-your-own-branch",children:"Create your own branch"}),"\n",(0,i.jsx)(n.p,{children:"In order to create a new local branch and switch to it:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git checkout -b /-\n"})}),"\n",(0,i.jsx)(n.p,{children:"for new versions of git you may also use the more intuitive."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git switch -c /-\n"})}),"\n",(0,i.jsx)(n.h3,{id:"switch-between-existing-branches",children:"Switch between existing branches"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git checkout \n"})}),"\n",(0,i.jsx)(n.h3,{id:"fetch-changes-from-github",children:"Fetch changes from GitHub"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git pull\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will update the local branch you are currently in, with changes done in GitHub."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push --set-upstream origin /-\n"})}),"\n",(0,i.jsx)(n.h3,{id:"send-your-changes-to-github",children:"Send your changes to GitHub"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push\n"})}),"\n",(0,i.jsx)(n.p,{children:"This will update the remove repository on GitHub. If it is the first time for a new branch you will also\nhave to tell git that you are creating a new remote branch by using the command:"}),"\n",(0,i.jsx)(n.h3,{id:"check-status-of-changes",children:"Check status of changes"}),"\n",(0,i.jsx)(n.p,{children:"List the files you have changed and those you still need to add or commit:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git status\n"})}),"\n",(0,i.jsx)(n.h3,{id:"add-files",children:"Add files"}),"\n",(0,i.jsx)(n.p,{children:"Add new or changed files"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add \n"})}),"\n",(0,i.jsx)(n.p,{children:"or adding everything in and below your working directory"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add .\n"})}),"\n",(0,i.jsx)(n.h3,{id:"commit-changes",children:"Commit changes"}),"\n",(0,i.jsx)(n.p,{children:"Commit any files you've added with git add, and also commit any files you've changed since then:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git commit -m ": : /-\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Add the changed files","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add \n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Commit your changes using the ",(0,i.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"})," formatting for the commit messages.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git commit -m ": "\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git fetch\ngit rebase origin/main\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Push changes to GitHub","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push --set-upstream origin /-\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["You can now ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request",children:"Create a Pull Request"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"fork-the-repository",children:"Fork the repository"}),"\n",(0,i.jsxs)(n.p,{children:["For external developers, you will ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/get-started/quickstart/contributing-to-projects",children:"contribute to the project through forking"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Here's a quick guide:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Create your own fork of the repository"}),"\n",(0,i.jsxs)(n.li,{children:["Clone the project to your machine","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git clone git@github.com:equinor/ecalc.git\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["To keep track of the original repository add another remote named upstream","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git remote add upstream git@github.com:equinor/template-fastapi-react.git\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Create a branch locally with a succinct but descriptive name and prefixed with change type.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git checkout -b /-\n"})}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Make the changes in the created branch."}),"\n",(0,i.jsx)(n.li,{children:"Add and run tests for your changes if needed (we only take pull requests with passing tests)."}),"\n",(0,i.jsxs)(n.li,{children:["Add the changed files","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git add \n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Commit your changes using the ",(0,i.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"})," formatting for the commit messages.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'git commit -m ": "\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git fetch upstream\ngit rebase upstream/main\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Push to your fork.","\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"git push origin feature/my-new-feature\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Submit a ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork",children:"Pull Request from a fork"}),". Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"That's it... thank you for your contribution!"}),"\n",(0,i.jsx)(n.p,{children:"After your pull request is merged, you can safely delete your branch."})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>r});var i=t(67294);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1300feb7.787000b1.js b/assets/js/1300feb7.787000b1.js new file mode 100644 index 0000000000..7693f5da4c --- /dev/null +++ b/assets/js/1300feb7.787000b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8269],{72256:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>E,frontMatter:()=>o,metadata:()=>i,toc:()=>t});var s=r(85893),c=r(11151);const o={},a="RATE",i={id:"about/references/keywords/RATE",title:"RATE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE",permalink:"/ecalc/docs/about/references/keywords/RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS"},next:{title:"RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS"}},l={},t=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)",id:"use-in-emission-for-venting_emitters-from-ecalc-v88",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"rate",children:"RATE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/RATE",children:"RATE"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"This can be used in three ways:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Used to define the rate for some ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\ntypes using an ",(0,s.jsx)(n.code,{children:"Expression"})]}),"\n",(0,s.jsxs)(n.li,{children:["Used defining the units of a ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["From eCalc v8.8: Used to define the rate for ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"RATE: \n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: \n TYPE: \n ...\n UNITS:\n RATE: \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"RATE: SIM1:GAS_PROD\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: pump\n TYPE: PUMP_CHART_VARIABLE_SPEED\n ...\n UNITS:\n RATE: \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"use-in-emission-for-venting_emitters-from-ecalc-v88",children:"Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)"}),"\n",(0,s.jsxs)(n.p,{children:["The attribute ",(0,s.jsx)(n.code,{children:"VALUE"})," is required, while ",(0,s.jsx)(n.code,{children:"UNIT"})," and ",(0,s.jsx)(n.code,{children:"TYPE"})," are optional. Allowed values for\n",(0,s.jsx)(n.code,{children:"UNIT"})," are kg/d and t/d, while STREAM_DAY and CALENDAR_DAY are valid for ",(0,s.jsx)(n.code,{children:"TYPE"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: \n CATEGORY: \n EMISSION:\n NAME: \n RATE:\n VALUE: \n UNIT: \n TYPE: \n"})}),"\n",(0,s.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n EMISSION:\n NAME: CH4\n RATE:\n VALUE: 4\n UNIT: kg/d\n TYPE: STREAM_DAY\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var s=r(67294);const c={},o=s.createContext(c);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.1716a525.js b/assets/js/14eb3368.1716a525.js new file mode 100644 index 0000000000..bb4dfd35bc --- /dev/null +++ b/assets/js/14eb3368.1716a525.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9817],{1310:(e,t,s)=>{s.d(t,{Z:()=>p});s(67294);var n=s(90512),i=s(35281),a=s(52802),r=s(48596),c=s(33692),o=s(95999),l=s(44996),d=s(85893);function m(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const u={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,l.Z)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(c.Z,{"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(m,{className:u.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function x(e){let{children:t,href:s,isLast:n}=e;const i="breadcrumbs__link";return n?(0,d.jsx)("span",{className:i,itemProp:"name",children:t}):s?(0,d.jsx)(c.Z,{className:i,href:s,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:i,children:t})}function v(e){let{children:t,active:s,index:i,addMicrodata:a}=e;return(0,d.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,n.Z)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(i+1)})]})}function p(){const e=(0,a.s1)(),t=(0,r.Ns)();return e?(0,d.jsx)("nav",{className:(0,n.Z)(i.k.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,s)=>{const n=s===e.length-1,i="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(v,{active:n,index:s,addMicrodata:!!i,children:(0,d.jsx)(x,{href:i,isLast:n,children:t.label})},s)}))]})}):null}},34228:(e,t,s)=>{s.r(t),s.d(t,{default:()=>I});s(67294);var n=s(1944),i=s(52802),a=s(44996),r=s(90512),c=s(33692),o=s(13919),l=s(95999),d=s(92503);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var u=s(85893);function h(e){let{href:t,children:s}=e;return(0,u.jsx)(c.Z,{href:t,className:(0,r.Z)("card padding--lg",m.cardContainer),children:s})}function b(e){let{href:t,icon:s,title:n,description:i}=e;return(0,u.jsxs)(h,{href:t,children:[(0,u.jsxs)(d.Z,{as:"h2",className:(0,r.Z)("text--truncate",m.cardTitle),title:n,children:[s," ",n]}),i&&(0,u.jsx)("p",{className:(0,r.Z)("text--truncate",m.cardDescription),title:i,children:i})]})}function x(e){let{item:t}=e;const s=(0,i.LM)(t);return s?(0,u.jsx)(b,{href:s,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function v(e){let{item:t}=e;const s=(0,o.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,i.xz)(t.docId??void 0);return(0,u.jsx)(b,{href:t.href,icon:s,title:t.label,description:t.description??n?.description})}function p(e){let{item:t}=e;switch(t.type){case"link":return(0,u.jsx)(v,{item:t});case"category":return(0,u.jsx)(x,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e;const s=(0,i.jA)();return(0,u.jsx)(j,{items:s.items,className:t})}function j(e){const{items:t,className:s}=e;if(!t)return(0,u.jsx)(g,{...e});const n=(0,i.MN)(t);return(0,u.jsx)("section",{className:(0,r.Z)("row",s),children:n.map(((e,t)=>(0,u.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,u.jsx)(p,{item:e})},t)))})}var f=s(4966),N=s(23120),Z=s(44364),L=s(1310);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function k(e){let{categoryGeneratedIndex:t}=e;return(0,u.jsx)(n.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,a.Z)(t.image)})}function T(e){let{categoryGeneratedIndex:t}=e;const s=(0,i.jA)();return(0,u.jsxs)("div",{className:_.generatedIndexPage,children:[(0,u.jsx)(N.Z,{}),(0,u.jsx)(L.Z,{}),(0,u.jsx)(Z.Z,{}),(0,u.jsxs)("header",{children:[(0,u.jsx)(d.Z,{as:"h1",className:_.title,children:t.title}),t.description&&(0,u.jsx)("p",{children:t.description})]}),(0,u.jsx)("article",{className:"margin-top--lg",children:(0,u.jsx)(j,{items:s.items,className:_.list})}),(0,u.jsx)("footer",{className:"margin-top--lg",children:(0,u.jsx)(f.Z,{previous:t.navigation.previous,next:t.navigation.next})})]})}function I(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(k,{...e}),(0,u.jsx)(T,{...e})]})}},4966:(e,t,s)=>{s.d(t,{Z:()=>o});s(67294);var n=s(95999),i=s(90512),a=s(33692),r=s(85893);function c(e){const{permalink:t,title:s,subLabel:n,isNext:c}=e;return(0,r.jsxs)(a.Z,{className:(0,i.Z)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[n&&(0,r.jsx)("div",{className:"pagination-nav__sublabel",children:n}),(0,r.jsx)("div",{className:"pagination-nav__label",children:s})]})}function o(e){const{previous:t,next:s}=e;return(0,r.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,n.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,r.jsx)(c,{...t,subLabel:(0,r.jsx)(n.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),s&&(0,r.jsx)(c,{...s,subLabel:(0,r.jsx)(n.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},44364:(e,t,s)=>{s.d(t,{Z:()=>o});s(67294);var n=s(90512),i=s(95999),a=s(35281),r=s(74477),c=s(85893);function o(e){let{className:t}=e;const s=(0,r.E)();return s.badge?(0,c.jsx)("span",{className:(0,n.Z)(t,a.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,c.jsx)(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},23120:(e,t,s)=>{s.d(t,{Z:()=>v});s(67294);var n=s(90512),i=s(52263),a=s(33692),r=s(95999),c=s(80143),o=s(35281),l=s(60373),d=s(74477),m=s(85893);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=u[e.versionMetadata.banner];return(0,m.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:s,onClick:n}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,m.jsx)("b",{children:(0,m.jsx)(a.Z,{to:s,onClick:n,children:(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x(e){let{className:t,versionMetadata:s}=e;const{siteConfig:{title:a}}=(0,i.Z)(),{pluginId:r}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,l.J)(r),{latestDocSuggestion:u,latestVersionSuggestion:x}=(0,c.Jo)(r),v=u??(p=x).docs.find((e=>e.id===p.mainDocId));var p;return(0,m.jsxs)("div",{className:(0,n.Z)(t,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,m.jsx)("div",{children:(0,m.jsx)(h,{siteTitle:a,versionMetadata:s})}),(0,m.jsx)("div",{className:"margin-top--md",children:(0,m.jsx)(b,{versionLabel:x.label,to:v.path,onClick:()=>d(x.name)})})]})}function v(e){let{className:t}=e;const s=(0,d.E)();return s.banner?(0,m.jsx)(x,{className:t,versionMetadata:s}):null}}}]); \ No newline at end of file diff --git a/assets/js/15962da1.478c8ccb.js b/assets/js/15962da1.478c8ccb.js new file mode 100644 index 0000000000..5c0e87edb1 --- /dev/null +++ b/assets/js/15962da1.478c8ccb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[996],{25730:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>c,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>i});var s=n(85893),o=n(11151);const t={},c="GENERATORSETS",a={id:"about/references/keywords/GENERATORSETS",title:"GENERATORSETS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/GENERATORSETS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/GENERATORSETS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES"},next:{title:"HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT"}},d={},i=[{value:"Description",id:"description",level:2}];function E(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"generatorsets",children:"GENERATORSETS"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Under ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," one or\nseveral ",(0,s.jsx)(r.code,{children:"generator sets"})," (a 'set' of an engine of some sort and a generator) are specified in a list.\nEach generator set requires three sub-keywords, ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," and\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["This keyword is optional. However, the only requirement is that each\ninstallation must have at least one of ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),"\nand ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["See ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",children:"GENERATOR SETS"})," for more details about usage."]})]})}function l(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>c});var s=n(67294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/163041ea.3ded8d57.js b/assets/js/163041ea.3ded8d57.js new file mode 100644 index 0000000000..4840bd6437 --- /dev/null +++ b/assets/js/163041ea.3ded8d57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9480],{17498:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>t,metadata:()=>l,toc:()=>a});var r=o(85893),n=o(11151);const t={title:"Single speed compressor train",sidebar_position:1},i=void 0,l={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",title:"Single speed compressor train",description:"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Single speed compressor train",sidebar_position:1},sidebar:"about",previous:{title:"Compressor train types",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},next:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"}},d={},a=[{value:"Format",id:"format",level:2}];function m(e){const s={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.p,{children:"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.\nBeing single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and\nthis shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate,\nsuction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able\nto calculate the energy usage for given rates, suction pressures and discharge pressures."}),"\n",(0,r.jsx)(s.p,{children:"This means that a single speed compressor model needs the following to be defined:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc\nonly supports user defined single speed compressor charts."}),"\n",(0,r.jsxs)(s.li,{children:["A ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"}),"."]}),"\n",(0,r.jsxs)(s.li,{children:["A ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",children:"PRESSURE_CONTROL"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," in the format"]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: \n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: \n PRESSURE_CONTROL: \n MAXIMUM_DISCHARGE_PRESSURE: \n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - INLET_TEMPERATURE: \n COMPRESSOR_CHART: \n PRESSURE_DROP_AHEAD_OF_STAGE: \n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: \n MAXIMUM_POWER: \n CALCULATE_MAX_RATE: \n"})})]})}function c(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},11151:(e,s,o)=>{o.d(s,{Z:()=>l,a:()=>i});var r=o(67294);const n={},t=r.createContext(n);function i(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1644.956c5f9d.js b/assets/js/1644.956c5f9d.js new file mode 100644 index 0000000000..c477bd96fb --- /dev/null +++ b/assets/js/1644.956c5f9d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1644],{41644:(n,e,r)=>{r.d(e,{bK:()=>Ce});var t=r(70870),o=r(66749),i=r(17452),u=r(62002),a=r(27961),d=r(43836),c=r(74379),f=r(45625);class s{constructor(){var n={};n._next=n._prev=n,this._sentinel=n}dequeue(){var n=this._sentinel,e=n._prev;if(e!==n)return v(e),e}enqueue(n){var e=this._sentinel;n._prev&&n._next&&v(n),n._next=e._next,e._next._prev=n,e._next=n,n._prev=e}toString(){for(var n=[],e=this._sentinel,r=e._prev;r!==e;)n.push(JSON.stringify(r,g)),r=r._prev;return"["+n.join(", ")+"]"}}function v(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function g(n,e){if("_next"!==n&&"_prev"!==n)return e}var h=u.Z(1);function l(n,e){if(n.nodeCount()<=1)return[];var r=function(n,e){var r=new f.k,o=0,i=0;t.Z(n.nodes(),(function(n){r.setNode(n,{v:n,in:0,out:0})})),t.Z(n.edges(),(function(n){var t=r.edge(n.v,n.w)||0,u=e(n),a=t+u;r.setEdge(n.v,n.w,a),i=Math.max(i,r.node(n.v).out+=u),o=Math.max(o,r.node(n.w).in+=u)}));var u=c.Z(i+o+3).map((function(){return new s})),a=o+1;return t.Z(r.nodes(),(function(n){p(u,a,r.node(n))})),{graph:r,buckets:u,zeroIdx:a}}(n,e||h),o=function(n,e,r){var t,o=[],i=e[e.length-1],u=e[0];for(;n.nodeCount();){for(;t=u.dequeue();)Z(n,e,r,t);for(;t=i.dequeue();)Z(n,e,r,t);if(n.nodeCount())for(var a=e.length-2;a>0;--a)if(t=e[a].dequeue()){o=o.concat(Z(n,e,r,t,!0));break}}return o}(r.graph,r.buckets,r.zeroIdx);return a.Z(d.Z(o,(function(e){return n.outEdges(e.v,e.w)})))}function Z(n,e,r,o,i){var u=i?[]:void 0;return t.Z(n.inEdges(o.v),(function(t){var o=n.edge(t),a=n.node(t.v);i&&u.push({v:t.v,w:t.w}),a.out-=o,p(e,r,a)})),t.Z(n.outEdges(o.v),(function(t){var o=n.edge(t),i=t.w,u=n.node(i);u.in-=o,p(e,r,u)})),n.removeNode(o.v),u}function p(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function w(n){var e="greedy"===n.graph().acyclicer?l(n,function(n){return function(e){return n.edge(e).weight}}(n)):function(n){var e=[],r={},o={};function u(a){i.Z(o,a)||(o[a]=!0,r[a]=!0,t.Z(n.outEdges(a),(function(n){i.Z(r,n.w)?e.push(n):u(n.w)})),delete r[a])}return t.Z(n.nodes(),u),e}(n);t.Z(e,(function(e){var r=n.edge(e);n.removeEdge(e),r.forwardName=e.name,r.reversed=!0,n.setEdge(e.w,e.v,r,o.Z("rev"))}))}var m=r(59236),b=r(61666),y=r(3688),k=r(72714);const x=function(n,e,r){for(var t=-1,o=n.length;++te};var N=r(69203);const _=function(n){return n&&n.length?x(n,N.Z,E):void 0};const I=function(n){var e=null==n?0:n.length;return e?n[e-1]:void 0};var R=r(74752),M=r(2693),T=r(74765);const L=function(n,e){var r={};return e=(0,T.Z)(e,3),(0,M.Z)(n,(function(n,t,o){(0,R.Z)(r,t,e(n,t,o))})),r};var C=r(49360);const O=function(n,e){return nMath.abs(u)*c?(a<0&&(c=-c),r=c*u/a,t=c):(u<0&&(d=-d),r=d,t=d*a/u),{x:o+r,y:i+t}}function B(n){var e=d.Z(c.Z(Y(n)+1),(function(){return[]}));return t.Z(n.nodes(),(function(r){var t=n.node(r),o=t.rank;C.Z(o)||(e[o][t.order]=r)})),e}function q(n,e,r,t){var o={width:0,height:0};return arguments.length>=4&&(o.rank=r,o.order=t),F(n,"border",o,e)}function Y(n){return _(d.Z(n.nodes(),(function(e){var r=n.node(e).rank;if(!C.Z(r))return r})))}function z(n,e){var r=j();try{return e()}finally{console.log(n+" time: "+(j()-r)+"ms")}}function A(n,e){return e()}function D(n,e,r,t,o,i){var u={width:0,height:0,rank:i,borderType:e},a=o[e][i-1],d=F(n,"border",u,r);o[e][i]=d,n.setParent(d,t),a&&n.setEdge(a,d,{weight:1})}function $(n){var e=n.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(n){t.Z(n.nodes(),(function(e){H(n.node(e))})),t.Z(n.edges(),(function(e){var r=n.edge(e);t.Z(r.points,H),i.Z(r,"y")&&H(r)}))}(n),"lr"!==e&&"rl"!==e||(!function(n){t.Z(n.nodes(),(function(e){Q(n.node(e))})),t.Z(n.edges(),(function(e){var r=n.edge(e);t.Z(r.points,Q),i.Z(r,"x")&&Q(r)}))}(n),J(n))}function J(n){t.Z(n.nodes(),(function(e){K(n.node(e))})),t.Z(n.edges(),(function(e){K(n.edge(e))}))}function K(n){var e=n.width;n.width=n.height,n.height=e}function H(n){n.y=-n.y}function Q(n){var e=n.x;n.x=n.y,n.y=e}function U(n){n.graph().dummyChains=[],t.Z(n.edges(),(function(e){!function(n,e){var r,t,o,i=e.v,u=n.node(i).rank,a=e.w,d=n.node(a).rank,c=e.name,f=n.edge(e),s=f.labelRank;if(d===u+1)return;for(n.removeEdge(e),o=0,++u;u-1?o[i?e[u]:u]:void 0}};var cn=r(21692),fn=r(94099);const sn=function(n){var e=(0,fn.Z)(n),r=e%1;return e==e?r?e-r:e:0};var vn=Math.max;const gn=dn((function(n,e,r){var t=null==n?0:n.length;if(!t)return-1;var o=null==r?0:sn(r);return o<0&&(o=vn(t+o,0)),(0,cn.Z)(n,(0,T.Z)(e,3),o)}));var hn=r(13445);u.Z(1);u.Z(1);r(39473),r(83970),r(93589);var ln=r(27771);r(18533);(0,r(54193).Z)("length");RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var Zn="\\ud800-\\udfff",pn="["+Zn+"]",wn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",mn="\\ud83c[\\udffb-\\udfff]",bn="[^"+Zn+"]",yn="(?:\\ud83c[\\udde6-\\uddff]){2}",kn="[\\ud800-\\udbff][\\udc00-\\udfff]",xn="(?:"+wn+"|"+mn+")"+"?",En="[\\ufe0e\\ufe0f]?",Nn=En+xn+("(?:\\u200d(?:"+[bn,yn,kn].join("|")+")"+En+xn+")*"),_n="(?:"+[bn+wn+"?",wn,yn,kn,pn].join("|")+")";RegExp(mn+"(?="+mn+")|"+_n+Nn,"g");function In(){}function Rn(n,e,r){ln.Z(e)||(e=[e]);var o=(n.isDirected()?n.successors:n.neighbors).bind(n),i=[],u={};return t.Z(e,(function(e){if(!n.hasNode(e))throw new Error("Graph does not have node: "+e);Mn(n,e,"post"===r,u,o,i)})),i}function Mn(n,e,r,o,u,a){i.Z(o,e)||(o[e]=!0,r||a.push(e),t.Z(u(e),(function(e){Mn(n,e,r,o,u,a)})),r&&a.push(e))}In.prototype=new Error;r(52544);function Tn(n){n=function(n){var e=(new f.k).setGraph(n.graph());return t.Z(n.nodes(),(function(r){e.setNode(r,n.node(r))})),t.Z(n.edges(),(function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},o=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+o.weight,minlen:Math.max(t.minlen,o.minlen)})})),e}(n),X(n);var e,r=en(n);for(On(r),Ln(r,n);e=Sn(r);)Fn(r,n,e,jn(r,n,e))}function Ln(n,e){var r=function(n,e){return Rn(n,e,"post")}(n,n.nodes());r=r.slice(0,r.length-1),t.Z(r,(function(r){!function(n,e,r){var t=n.node(r),o=t.parent;n.edge(r,o).cutvalue=Cn(n,e,r)}(n,e,r)}))}function Cn(n,e,r){var o=n.node(r).parent,i=!0,u=e.edge(r,o),a=0;return u||(i=!1,u=e.edge(o,r)),a=u.weight,t.Z(e.nodeEdges(r),(function(t){var u,d,c=t.v===r,f=c?t.w:t.v;if(f!==o){var s=c===i,v=e.edge(t).weight;if(a+=s?v:-v,u=r,d=f,n.hasEdge(u,d)){var g=n.edge(r,f).cutvalue;a+=s?-g:g}}})),a}function On(n,e){arguments.length<2&&(e=n.nodes()[0]),Pn(n,{},1,e)}function Pn(n,e,r,o,u){var a=r,d=n.node(o);return e[o]=!0,t.Z(n.neighbors(o),(function(t){i.Z(e,t)||(r=Pn(n,e,r,t,o))})),d.low=a,d.lim=r++,u?d.parent=u:delete d.parent,r}function Sn(n){return gn(n.edges(),(function(e){return n.edge(e).cutvalue<0}))}function jn(n,e,r){var t=r.v,o=r.w;e.hasEdge(t,o)||(t=r.w,o=r.v);var i=n.node(t),u=n.node(o),a=i,d=!1;i.lim>u.lim&&(a=u,d=!0);var c=hn.Z(e.edges(),(function(e){return d===Gn(n,n.node(e.v),a)&&d!==Gn(n,n.node(e.w),a)}));return W(c,(function(n){return nn(e,n)}))}function Fn(n,e,r,o){var i=r.v,u=r.w;n.removeEdge(i,u),n.setEdge(o.v,o.w,{}),On(n),Ln(n,e),function(n,e){var r=gn(n.nodes(),(function(n){return!e.node(n).parent})),o=function(n,e){return Rn(n,e,"pre")}(n,r);o=o.slice(1),t.Z(o,(function(r){var t=n.node(r).parent,o=e.edge(r,t),i=!1;o||(o=e.edge(t,r),i=!0),e.node(r).rank=e.node(t).rank+(i?o.minlen:-o.minlen)}))}(n,e)}function Gn(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function Vn(n){switch(n.graph().ranker){case"network-simplex":default:qn(n);break;case"tight-tree":!function(n){X(n),en(n)}(n);break;case"longest-path":Bn(n)}}Tn.initLowLimValues=On,Tn.initCutValues=Ln,Tn.calcCutValue=Cn,Tn.leaveEdge=Sn,Tn.enterEdge=jn,Tn.exchangeEdges=Fn;var Bn=X;function qn(n){Tn(n)}var Yn=r(34148),zn=r(92344);function An(n){var e=F(n,"root",{},"_root"),r=function(n){var e={};function r(o,i){var u=n.children(o);u&&u.length&&t.Z(u,(function(n){r(n,i+1)})),e[o]=i}return t.Z(n.children(),(function(n){r(n,1)})),e}(n),o=_(Yn.Z(r))-1,i=2*o+1;n.graph().nestingRoot=e,t.Z(n.edges(),(function(e){n.edge(e).minlen*=i}));var u=function(n){return zn.Z(n.edges(),(function(e,r){return e+n.edge(r).weight}),0)}(n)+1;t.Z(n.children(),(function(t){Dn(n,e,i,u,o,r,t)})),n.graph().nodeRankFactor=i}function Dn(n,e,r,o,i,u,a){var d=n.children(a);if(d.length){var c=q(n,"_bt"),f=q(n,"_bb"),s=n.node(a);n.setParent(c,a),s.borderTop=c,n.setParent(f,a),s.borderBottom=f,t.Z(d,(function(t){Dn(n,e,r,o,i,u,t);var d=n.node(t),s=d.borderTop?d.borderTop:t,v=d.borderBottom?d.borderBottom:t,g=d.borderTop?o:2*o,h=s!==v?1:i-u[a]+1;n.setEdge(c,s,{weight:g,minlen:h,nestingEdge:!0}),n.setEdge(v,f,{weight:g,minlen:h,nestingEdge:!0})})),n.parent(a)||n.setEdge(e,c,{weight:0,minlen:i+u[a]})}else a!==e&&n.setEdge(e,a,{weight:0,minlen:r})}var $n=r(48451);const Jn=function(n){return(0,$n.Z)(n,5)};function Kn(n,e,r){var u=function(n){var e;for(;n.hasNode(e=o.Z("_root")););return e}(n),a=new f.k({compound:!0}).setGraph({root:u}).setDefaultNodeLabel((function(e){return n.node(e)}));return t.Z(n.nodes(),(function(o){var d=n.node(o),c=n.parent(o);(d.rank===e||d.minRank<=e&&e<=d.maxRank)&&(a.setNode(o),a.setParent(o,c||u),t.Z(n[r](o),(function(e){var r=e.v===o?e.w:e.v,t=a.edge(r,o),i=C.Z(t)?0:t.weight;a.setEdge(r,o,{weight:n.edge(e).weight+i})})),i.Z(d,"minRank")&&a.setNode(o,{borderLeft:d.borderLeft[e],borderRight:d.borderRight[e]}))})),a}var Hn=r(72954);const Qn=function(n,e,r){for(var t=-1,o=n.length,i=e.length,u={};++te||i&&u&&d&&!a&&!c||t&&u&&d||!r&&d||!o)return 1;if(!t&&!i&&!c&&n=a?d:d*("desc"==r[t]?-1:1)}return n.index-e.index};const ue=function(n,e,r){e=e.length?(0,Xn.Z)(e,(function(n){return(0,ln.Z)(n)?function(e){return(0,ne.Z)(e,1===n.length?n[0]:n)}:n})):[N.Z];var t=-1;e=(0,Xn.Z)(e,(0,te.Z)(T.Z));var o=(0,ee.Z)(n,(function(n,r,o){return{criteria:(0,Xn.Z)(e,(function(e){return e(n)})),index:++t,value:n}}));return re(o,(function(n,e){return ie(n,e,r)}))};var ae=r(69581),de=r(50439);const ce=(0,ae.Z)((function(n,e){if(null==n)return[];var r=e.length;return r>1&&(0,de.Z)(n,e[0],e[1])?e=[]:r>2&&(0,de.Z)(e[0],e[1],e[2])&&(e=[e[0]]),ue(n,(0,Wn.Z)(e,1),[])}));function fe(n,e){for(var r=0,t=1;t0;)e%2&&(r+=f[e+1]),f[e=e-1>>1]+=n.weight;s+=n.weight*r}))),s}function ve(n,e){var r={};return t.Z(n,(function(n,e){var t=r[n.v]={indegree:0,in:[],out:[],vs:[n.v],i:e};C.Z(n.barycenter)||(t.barycenter=n.barycenter,t.weight=n.weight)})),t.Z(e.edges(),(function(n){var e=r[n.v],t=r[n.w];C.Z(e)||C.Z(t)||(t.indegree++,e.out.push(r[n.w]))})),function(n){var e=[];function r(n){return function(e){e.merged||(C.Z(e.barycenter)||C.Z(n.barycenter)||e.barycenter>=n.barycenter)&&function(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight);e.weight&&(r+=e.barycenter*e.weight,t+=e.weight);n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}(n,e)}}function o(e){return function(r){r.in.push(e),0==--r.indegree&&n.push(r)}}for(;n.length;){var i=n.pop();e.push(i),t.Z(i.in.reverse(),r(i)),t.Z(i.out,o(i))}return d.Z(hn.Z(e,(function(n){return!n.merged})),(function(n){return b.Z(n,["vs","i","barycenter","weight"])}))}(hn.Z(r,(function(n){return!n.indegree})))}function ge(n,e){var r,o=function(n,e){var r={lhs:[],rhs:[]};return t.Z(n,(function(n){e(n)?r.lhs.push(n):r.rhs.push(n)})),r}(n,(function(n){return i.Z(n,"barycenter")})),u=o.lhs,d=ce(o.rhs,(function(n){return-n.i})),c=[],f=0,s=0,v=0;u.sort((r=!!e,function(n,e){return n.barycentere.barycenter?1:r?e.i-n.i:n.i-e.i})),v=he(c,d,v),t.Z(u,(function(n){v+=n.vs.length,c.push(n.vs),f+=n.barycenter*n.weight,s+=n.weight,v=he(c,d,v)}));var g={vs:a.Z(c)};return s&&(g.barycenter=f/s,g.weight=s),g}function he(n,e,r){for(var t;e.length&&(t=I(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function le(n,e,r,o){var u=n.children(e),c=n.node(e),f=c?c.borderLeft:void 0,s=c?c.borderRight:void 0,v={};f&&(u=hn.Z(u,(function(n){return n!==f&&n!==s})));var g=function(n,e){return d.Z(e,(function(e){var r=n.inEdges(e);if(r.length){var t=zn.Z(r,(function(e,r){var t=n.edge(r),o=n.node(r.v);return{sum:e.sum+t.weight*o.order,weight:e.weight+t.weight}}),{sum:0,weight:0});return{v:e,barycenter:t.sum/t.weight,weight:t.weight}}return{v:e}}))}(n,u);t.Z(g,(function(e){if(n.children(e.v).length){var t=le(n,e.v,r,o);v[e.v]=t,i.Z(t,"barycenter")&&(u=e,a=t,C.Z(u.barycenter)?(u.barycenter=a.barycenter,u.weight=a.weight):(u.barycenter=(u.barycenter*u.weight+a.barycenter*a.weight)/(u.weight+a.weight),u.weight+=a.weight))}var u,a}));var h=ve(g,r);!function(n,e){t.Z(n,(function(n){n.vs=a.Z(n.vs.map((function(n){return e[n]?e[n].vs:n})))}))}(h,v);var l=ge(h,o);if(f&&(l.vs=a.Z([f,l.vs,s]),n.predecessors(f).length)){var Z=n.node(n.predecessors(f)[0]),p=n.node(n.predecessors(s)[0]);i.Z(l,"barycenter")||(l.barycenter=0,l.weight=0),l.barycenter=(l.barycenter*l.weight+Z.order+p.order)/(l.weight+2),l.weight+=2}return l}function Ze(n){var e=Y(n),r=pe(n,c.Z(1,e+1),"inEdges"),o=pe(n,c.Z(e-1,-1,-1),"outEdges"),u=function(n){var e={},r=hn.Z(n.nodes(),(function(e){return!n.children(e).length})),o=_(d.Z(r,(function(e){return n.node(e).rank}))),u=d.Z(c.Z(o+1),(function(){return[]})),a=ce(r,(function(e){return n.node(e).rank}));return t.Z(a,(function r(o){if(!i.Z(e,o)){e[o]=!0;var a=n.node(o);u[a.rank].push(o),t.Z(n.successors(o),r)}})),u}(n);me(n,u);for(var a,f=Number.POSITIVE_INFINITY,s=0,v=0;v<4;++s,++v){we(s%2?r:o,s%4>=2);var g=fe(n,u=B(n));gd||c>e[o].lim));i=o,o=t;for(;(o=n.parent(o))!==i;)a.push(o);return{path:u.concat(a.reverse()),lca:i}}(n,e,o.v,o.w),u=i.path,a=i.lca,d=0,c=u[d],f=!0;r!==o.w;){if(t=n.node(r),f){for(;(c=u[d])!==a&&n.node(c).maxRankr){var t=e;e=r,r=t}var o=n[e];o||(n[e]=o={}),o[r]=!0}function Re(n,e,r){if(e>r){var t=e;e=r,r=t}return i.Z(n[e],r)}function Me(n,e,r,o,u){var a={},d=function(n,e,r,o){var u=new f.k,a=n.graph(),d=function(n,e,r){return function(t,o,u){var a,d=t.node(o),c=t.node(u),f=0;if(f+=d.width/2,i.Z(d,"labelpos"))switch(d.labelpos.toLowerCase()){case"l":a=-d.width/2;break;case"r":a=d.width/2}if(a&&(f+=r?a:-a),a=0,f+=(d.dummy?e:n)/2,f+=(c.dummy?e:n)/2,f+=c.width/2,i.Z(c,"labelpos"))switch(c.labelpos.toLowerCase()){case"l":a=c.width/2;break;case"r":a=-c.width/2}return a&&(f+=r?a:-a),a=0,f}}(a.nodesep,a.edgesep,o);return t.Z(e,(function(e){var o;t.Z(e,(function(e){var t=r[e];if(u.setNode(t),o){var i=r[o],a=u.edge(i,t);u.setEdge(i,t,Math.max(d(n,e,o),a||0))}o=e}))})),u}(n,e,r,u),c=u?"borderLeft":"borderRight";function s(n,e){for(var r=d.nodes(),t=r.pop(),o={};t;)o[t]?n(t):(o[t]=!0,r.push(t),r=r.concat(e(t))),t=r.pop()}return s((function(n){a[n]=d.inEdges(n).reduce((function(n,e){return Math.max(n,a[e.v]+d.edge(e))}),0)}),d.predecessors.bind(d)),s((function(e){var r=d.outEdges(e).reduce((function(n,e){return Math.min(n,a[e.w]-d.edge(e))}),Number.POSITIVE_INFINITY),t=n.node(e);r!==Number.POSITIVE_INFINITY&&t.borderType!==c&&(a[e]=Math.max(a[e],r))}),d.successors.bind(d)),t.Z(o,(function(n){a[n]=a[r[n]]})),a}function Te(n){var e,r=B(n),o=m.Z(_e(n,r),function(n,e){var r={};function o(e,o,i,u,a){var d;t.Z(c.Z(o,i),(function(o){d=e[o],n.node(d).dummy&&t.Z(n.predecessors(d),(function(e){var t=n.node(e);t.dummy&&(t.ordera)&&Ie(r,e,d)}))}))}return zn.Z(e,(function(e,r){var i,u=-1,a=0;return t.Z(r,(function(t,d){if("border"===n.node(t).dummy){var c=n.predecessors(t);c.length&&(i=n.node(c[0]).order,o(r,a,d,u,i),a=d,u=i)}o(r,a,r.length,i,e.length)})),r})),r}(n,r)),i={};t.Z(["u","d"],(function(u){e="u"===u?r:Yn.Z(r).reverse(),t.Z(["l","r"],(function(r){"r"===r&&(e=d.Z(e,(function(n){return Yn.Z(n).reverse()})));var a=("u"===u?n.predecessors:n.successors).bind(n),c=function(n,e,r,o){var i={},u={},a={};return t.Z(e,(function(n){t.Z(n,(function(n,e){i[n]=n,u[n]=n,a[n]=e}))})),t.Z(e,(function(n){var e=-1;t.Z(n,(function(n){var t=o(n);if(t.length){t=ce(t,(function(n){return a[n]}));for(var d=(t.length-1)/2,c=Math.floor(d),f=Math.ceil(d);c<=f;++c){var s=t[c];u[n]===n&&e{r.d(e,{Z:()=>i});var t=r(49811),o=r(50585);const i=function(n,e){var r=-1,i=(0,o.Z)(n)?Array(n.length):[];return(0,t.Z)(n,(function(n,t,o){i[++r]=e(n,t,o)})),i}},3688:(n,e,r)=>{r.d(e,{Z:()=>c});var t=r(69581),o=r(79651),i=r(50439),u=r(32957),a=Object.prototype,d=a.hasOwnProperty;const c=(0,t.Z)((function(n,e){n=Object(n);var r=-1,t=e.length,c=t>2?e[2]:void 0;for(c&&(0,i.Z)(e[0],e[1],c)&&(t=1);++r{r.d(e,{Z:()=>o});var t=r(10626);const o=function(n){return(null==n?0:n.length)?(0,t.Z)(n,1):[]}},43836:(n,e,r)=>{r.d(e,{Z:()=>a});var t=r(74073),o=r(74765),i=r(21018),u=r(27771);const a=function(n,e){return((0,u.Z)(n)?t.Z:i.Z)(n,(0,o.Z)(e,3))}},61666:(n,e,r)=>{r.d(e,{Z:()=>Z});var t=r(13317),o=r(72954),i=r(22823),u=r(56009),a=r(77226),d=r(62281);const c=function(n,e,r,t){if(!(0,a.Z)(n))return n;for(var c=-1,f=(e=(0,i.Z)(e,n)).length,s=f-1,v=n;null!=v&&++c{r.d(e,{Z:()=>d});var t=Math.ceil,o=Math.max;const i=function(n,e,r,i){for(var u=-1,a=o(t((e-n)/(r||1)),0),d=Array(a);a--;)d[i?a:++u]=n,n+=r;return d};var u=r(50439),a=r(94099);const d=function(n){return function(e,r,t){return t&&"number"!=typeof t&&(0,u.Z)(e,r,t)&&(r=t=void 0),e=(0,a.Z)(e),void 0===r?(r=e,e=0):r=(0,a.Z)(r),t=void 0===t?e{r.d(e,{Z:()=>l});var t=/\s/;const o=function(n){for(var e=n.length;e--&&t.test(n.charAt(e)););return e};var i=/^\s+/;const u=function(n){return n?n.slice(0,o(n)+1).replace(i,""):n};var a=r(77226),d=r(72714),c=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,s=/^0o[0-7]+$/i,v=parseInt;const g=function(n){if("number"==typeof n)return n;if((0,d.Z)(n))return NaN;if((0,a.Z)(n)){var e="function"==typeof n.valueOf?n.valueOf():n;n=(0,a.Z)(e)?e+"":e}if("string"!=typeof n)return 0===n?n:+n;n=u(n);var r=f.test(n);return r||s.test(n)?v(n.slice(2),r?2:8):c.test(n)?NaN:+n};var h=1/0;const l=function(n){return n?(n=g(n))===h||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}},66749:(n,e,r)=>{r.d(e,{Z:()=>i});var t=r(50751),o=0;const i=function(n){var e=++o;return(0,t.Z)(n)+e}}}]); \ No newline at end of file diff --git a/assets/js/1736.5a1f964c.js b/assets/js/1736.5a1f964c.js new file mode 100644 index 0000000000..c64a5c52c7 --- /dev/null +++ b/assets/js/1736.5a1f964c.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1736],{17295:(n,t,e)=>{n.exports=function(){function n(t,e,i){function r(a,o){if(!e[a]){if(!t[a]){if(c)return c(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=e[a]={exports:{}};t[a][0].call(s.exports,(function(n){return r(t[a][1][n]||n)}),s,s.exports,n,t,e,i)}return e[a].exports}for(var c=void 0,a=0;a0&&void 0!==arguments[0]?arguments[0]:{},i=e.defaultLayoutOptions,c=void 0===i?{}:i,o=e.algorithms,u=void 0===o?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:o,s=e.workerFactory,h=e.workerUrl;if(r(this,n),this.defaultLayoutOptions=c,this.initialized=!1,void 0===h&&void 0===s)throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var f=s;void 0!==h&&void 0===s&&(f=function(n){return new Worker(n)});var l=f(h);if("function"!=typeof l.postMessage)throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new a(l),this.worker.postMessage({cmd:"register",algorithms:u}).then((function(n){return t.initialized=!0})).catch(console.err)}return i(n,[{key:"layout",value:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=t.layoutOptions,i=void 0===e?this.defaultLayoutOptions:e,r=t.logging,c=void 0!==r&&r,a=t.measureExecutionTime,o=void 0!==a&&a;return n?this.worker.postMessage({cmd:"layout",graph:n,layoutOptions:i,options:{logging:c,measureExecutionTime:o}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),n}();e.default=c;var a=function(){function n(t){var e=this;if(r(this,n),void 0===t)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=t,this.worker.onmessage=function(n){setTimeout((function(){e.receive(e,n)}),0)}}return i(n,[{key:"postMessage",value:function(n){var t=this.id||0;this.id=t+1,n.id=t;var e=this;return new Promise((function(i,r){e.resolvers[t]=function(n,t){n?(e.convertGwtStyleError(n),r(n)):i(t)},e.worker.postMessage(n)}))}},{key:"receive",value:function(n,t){var e=t.data,i=n.resolvers[e.id];i&&(delete n.resolvers[e.id],e.error?i(e.error):i(null,e.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(n){if(n){var t=n.__java$exception;t&&(t.cause&&t.cause.backingJsObject&&(n.cause=t.cause.backingJsObject,this.convertGwtStyleError(n.cause)),delete n.__java$exception)}}}]),n}()},{}],2:[function(n,t,i){(function(n){(function(){"use strict";var e;function r(){}function c(){}function a(){}function o(){}function u(){}function s(){}function h(){}function f(){}function l(){}function b(){}function w(){}function d(){}function g(){}function p(){}function m(){}function v(){}function k(){}function y(){}function M(){}function T(){}function j(){}function E(){}function S(){}function P(){}function C(){}function I(){}function O(){}function A(){}function L(){}function N(){}function $(){}function D(){}function x(){}function R(){}function K(){}function F(){}function _(){}function B(){}function H(){}function U(){}function G(){}function q(){}function X(){}function z(){}function V(){}function W(){}function Q(){}function J(){}function Y(){}function Z(){}function nn(){}function tn(){}function en(){}function rn(){}function cn(){}function an(){}function on(){}function un(){}function sn(){}function hn(){}function fn(){}function ln(){}function bn(){}function wn(){}function dn(){}function gn(){}function pn(){}function mn(){}function vn(){}function kn(){}function yn(){}function Mn(){}function Tn(){}function jn(){}function En(){}function Sn(){}function Pn(){}function Cn(){}function In(){}function On(){}function An(){}function Ln(){}function Nn(){}function $n(){}function Dn(){}function xn(){}function Rn(){}function Kn(){}function Fn(){}function _n(){}function Bn(){}function Hn(){}function Un(){}function Gn(){}function qn(){}function Xn(){}function zn(){}function Vn(){}function Wn(){}function Qn(){}function Jn(){}function Yn(){}function Zn(){}function nt(){}function tt(){}function et(){}function it(){}function rt(){}function ct(){}function at(){}function ot(){}function ut(){}function st(){}function ht(){}function ft(){}function lt(){}function bt(){}function wt(){}function dt(){}function gt(){}function pt(){}function mt(){}function vt(){}function kt(){}function yt(){}function Mt(){}function Tt(){}function jt(){}function Et(){}function St(){}function Pt(){}function Ct(){}function It(){}function Ot(){}function At(){}function Lt(){}function Nt(){}function $t(){}function Dt(){}function xt(){}function Rt(){}function Kt(){}function Ft(){}function _t(){}function Bt(){}function Ht(){}function Ut(){}function Gt(){}function qt(){}function Xt(){}function zt(){}function Vt(){}function Wt(){}function Qt(){}function Jt(){}function Yt(){}function Zt(){}function ne(){}function te(){}function ee(){}function ie(){}function re(){}function ce(){}function ae(){}function oe(){}function ue(){}function se(){}function he(){}function fe(){}function le(){}function be(){}function we(){}function de(){}function ge(){}function pe(){}function me(){}function ve(){}function ke(){}function ye(){}function Me(){}function Te(){}function je(){}function Ee(){}function Se(){}function Pe(){}function Ce(){}function Ie(){}function Oe(){}function Ae(){}function Le(){}function Ne(){}function $e(){}function De(){}function xe(){}function Re(){}function Ke(){}function Fe(){}function _e(){}function Be(){}function He(){}function Ue(){}function Ge(){}function qe(){}function Xe(){}function ze(){}function Ve(){}function We(){}function Qe(){}function Je(){}function Ye(){}function Ze(){}function ni(){}function ti(){}function ei(){}function ii(){}function ri(){}function ci(){}function ai(){}function oi(){}function ui(){}function si(){}function hi(){}function fi(){}function li(){}function bi(){}function wi(){}function di(){}function gi(){}function pi(){}function mi(){}function vi(){}function ki(){}function yi(){}function Mi(){}function Ti(){}function ji(){}function Ei(){}function Si(){}function Pi(){}function Ci(){}function Ii(){}function Oi(){}function Ai(){}function Li(){}function Ni(){}function $i(){}function Di(){}function xi(){}function Ri(){}function Ki(){}function Fi(){}function _i(){}function Bi(){}function Hi(){}function Ui(){}function Gi(){}function qi(){}function Xi(){}function zi(){}function Vi(){}function Wi(){}function Qi(){}function Ji(){}function Yi(){}function Zi(){}function nr(){}function tr(){}function er(){}function ir(){}function rr(){}function cr(){}function ar(){}function or(){}function ur(){}function sr(){}function hr(){}function fr(){}function lr(){}function br(){}function wr(){}function dr(){}function gr(){}function pr(){}function mr(){}function vr(){}function kr(){}function yr(){}function Mr(){}function Tr(){}function jr(){}function Er(){}function Sr(){}function Pr(){}function Cr(){}function Ir(){}function Or(){}function Ar(){}function Lr(){}function Nr(){}function $r(){}function Dr(){}function xr(){}function Rr(){}function Kr(){}function Fr(){}function _r(){}function Br(){}function Hr(){}function Ur(){}function Gr(){}function qr(){}function Xr(){}function zr(){}function Vr(){}function Wr(){}function Qr(){}function Jr(){}function Yr(){}function Zr(){}function nc(){}function tc(){}function ec(){}function ic(){}function rc(){}function cc(){}function ac(){}function oc(){}function uc(){}function sc(){}function hc(){}function fc(){}function lc(){}function bc(){}function wc(){}function dc(){}function gc(){}function pc(){}function mc(){}function vc(){}function kc(){}function yc(){}function Mc(){}function Tc(){}function jc(){}function Ec(){}function Sc(){}function Pc(){}function Cc(){}function Ic(){}function Oc(){}function Ac(){}function Lc(){}function Nc(){}function $c(){}function Dc(){}function xc(){}function Rc(){}function Kc(){}function Fc(){}function _c(){}function Bc(){}function Hc(){}function Uc(){}function Gc(){}function qc(){}function Xc(){}function zc(){}function Vc(){}function Wc(){}function Qc(){}function Jc(){}function Yc(){}function Zc(){}function na(){}function ta(){}function ea(){}function ia(){}function ra(){}function ca(){}function aa(){}function oa(){}function ua(){}function sa(){}function ha(){}function fa(){}function la(){}function ba(){}function wa(){}function da(){}function ga(){}function pa(){}function ma(){}function va(){}function ka(){}function ya(){}function Ma(){}function Ta(){}function ja(){}function Ea(){}function Sa(){}function Pa(){}function Ca(){}function Ia(){}function Oa(){}function Aa(){}function La(){}function Na(){}function $a(){}function Da(){}function xa(){}function Ra(){}function Ka(){}function Fa(){}function _a(){}function Ba(){}function Ha(){}function Ua(){}function Ga(){}function qa(){}function Xa(){}function za(){}function Va(){}function Wa(){}function Qa(){}function Ja(){}function Ya(){}function Za(){}function no(){}function to(){}function eo(){}function io(){}function ro(){}function co(){}function ao(){}function oo(){}function uo(){}function so(){}function ho(){}function fo(){}function lo(){}function bo(){}function wo(){}function go(){}function po(){}function mo(){}function vo(){}function ko(){}function yo(){}function Mo(){}function To(){}function jo(){}function Eo(){}function So(){}function Po(){}function Co(){}function Io(){}function Oo(){}function Ao(){}function Lo(){}function No(){}function $o(){}function Do(){}function xo(){}function Ro(){}function Ko(){}function Fo(){}function _o(){}function Bo(){}function Ho(){}function Uo(){}function Go(){}function qo(){}function Xo(){}function zo(){}function Vo(){}function Wo(){}function Qo(){}function Jo(){}function Yo(){}function Zo(){}function nu(){}function tu(){}function eu(){}function iu(){}function ru(){}function cu(){}function au(){}function ou(){}function uu(){}function su(){}function hu(){}function fu(){}function lu(){}function bu(){}function wu(){}function du(){}function gu(){}function pu(){}function mu(){}function vu(){}function ku(){}function yu(){}function Mu(){}function Tu(){}function ju(){}function Eu(){}function Su(){}function Pu(){}function Cu(){}function Iu(){}function Ou(){}function Au(){}function Lu(){}function Nu(){}function $u(){}function Du(){}function xu(){}function Ru(){}function Ku(){}function Fu(){}function _u(){}function Bu(){}function Hu(){}function Uu(){}function Gu(){}function qu(){}function Xu(){}function zu(){}function Vu(){}function Wu(){}function Qu(){}function Ju(){}function Yu(){}function Zu(){}function ns(){}function ts(){}function es(){}function is(){}function rs(){}function cs(){}function as(){}function os(){}function us(){}function ss(){}function hs(){}function fs(){}function ls(){}function bs(){}function ws(){}function ds(){}function gs(){}function ps(){}function ms(){}function vs(){}function ks(){}function ys(){}function Ms(){}function Ts(){}function js(){}function Es(){}function Ss(){}function Ps(){}function Cs(){}function Is(){}function Os(){}function As(){}function Ls(){}function Ns(){}function $s(){}function Ds(){}function xs(){}function Rs(){}function Ks(){}function Fs(){}function _s(){}function Bs(){}function Hs(){}function Us(){}function Gs(){}function qs(){}function Xs(){}function zs(){}function Vs(){}function Ws(){}function Qs(){}function Js(){}function Ys(){}function Zs(){}function nh(){}function th(){}function eh(){}function ih(){}function rh(){}function ch(){}function ah(){}function oh(){}function uh(){}function sh(){}function hh(){}function fh(){}function lh(){}function bh(){}function wh(){}function dh(){}function gh(){}function ph(){}function mh(){}function vh(){}function kh(){}function yh(){}function Mh(){}function Th(){}function jh(){}function Eh(){}function Sh(){}function Ph(){}function Ch(){}function Ih(){}function Oh(){}function Ah(){}function Lh(){}function Nh(){}function $h(){}function Dh(){}function xh(){}function Rh(){}function Kh(){}function Fh(){}function _h(){}function Bh(){}function Hh(){}function Uh(){}function Gh(){}function qh(){}function Xh(){}function zh(){}function Vh(){}function Wh(){}function Qh(){}function Jh(){}function Yh(){}function Zh(){}function nf(){}function tf(){}function ef(){}function rf(){}function cf(){}function af(){}function of(){}function uf(){}function sf(){}function hf(){}function ff(){}function lf(){}function bf(){}function wf(){}function df(){}function gf(){}function pf(){}function mf(){}function vf(){}function kf(){}function yf(){}function Mf(){}function Tf(){}function jf(){}function Ef(){}function Sf(){}function Pf(){}function Cf(){}function If(){}function Of(){}function Af(){}function Lf(){}function Nf(){}function $f(){}function Df(){}function xf(){}function Rf(n){}function Kf(n){}function Ff(){gy()}function _f(){VS()}function Bf(){MEn()}function Hf(){pbn()}function Uf(){ryn()}function Gf(){oOn()}function qf(){cGn()}function Xf(){yjn()}function zf(){Bjn()}function Vf(){WS()}function Wf(){HB()}function Qf(){QS()}function Jf(){Pun()}function Yf(){F7()}function Zf(){Ean()}function nl(){Y0()}function tl(){Pan()}function el(){Unn()}function il(){Q0()}function rl(){Cln()}function cl(){Ian()}function al(){Can()}function ol(){c6()}function ul(){Oan()}function sl(){jIn()}function hl(){YS()}function fl(){VYn()}function ll(){jYn()}function bl(){Aan()}function wl(){Iun()}function dl(){Z0()}function gl(){Pjn()}function pl(){t2()}function ml(){gUn()}function vl(){eDn()}function kl(){tcn()}function yl(){Kdn()}function Ml(){QGn()}function Tl(){e3()}function jl(){ncn()}function El(){EHn()}function Sl(){jOn()}function Pl(){IHn()}function Cl(){S_n()}function Il(){fIn()}function Ol(){uBn()}function Al(){jMn()}function Ll(){oB()}function Nl(){Stn()}function $l(){lIn()}function Dl(){XYn()}function xl(){Iln()}function Rl(){Wmn()}function Kl(){Oun()}function Fl(){tXn()}function _l(){vGn()}function Bl(n){tJ(n)}function Hl(n){this.a=n}function Ul(n){this.a=n}function Gl(n){this.a=n}function ql(n){this.a=n}function Xl(n){this.a=n}function zl(n){this.a=n}function Vl(n){this.a=n}function Wl(n){this.a=n}function Ql(n){this.a=n}function Jl(n){this.a=n}function Yl(n){this.a=n}function Zl(n){this.a=n}function nb(n){this.a=n}function tb(n){this.a=n}function eb(n){this.a=n}function ib(n){this.a=n}function rb(n){this.a=n}function cb(n){this.a=n}function ab(n){this.a=n}function ob(n){this.a=n}function ub(n){this.a=n}function sb(n){this.a=n}function hb(n){this.b=n}function fb(n){this.c=n}function lb(n){this.a=n}function bb(n){this.a=n}function wb(n){this.a=n}function db(n){this.a=n}function gb(n){this.a=n}function pb(n){this.a=n}function mb(n){this.a=n}function vb(n){this.a=n}function kb(n){this.a=n}function yb(n){this.a=n}function Mb(n){this.a=n}function Tb(n){this.a=n}function jb(n){this.a=n}function Eb(n){this.a=n}function Sb(n){this.a=n}function Pb(n){this.a=n}function Cb(n){this.a=n}function Ib(){this.a=[]}function Ob(n,t){n.a=t}function Ab(n,t){n.a=t}function Lb(n,t){n.b=t}function Nb(n,t){n.b=t}function $b(n,t){n.b=t}function Db(n,t){n.j=t}function xb(n,t){n.g=t}function Rb(n,t){n.i=t}function Kb(n,t){n.c=t}function Fb(n,t){n.c=t}function _b(n,t){n.d=t}function Bb(n,t){n.d=t}function Hb(n,t){n.k=t}function Ub(n,t){n.c=t}function Gb(n,t){n.c=t}function qb(n,t){n.a=t}function Xb(n,t){n.a=t}function zb(n,t){n.f=t}function Vb(n,t){n.a=t}function Wb(n,t){n.b=t}function Qb(n,t){n.d=t}function Jb(n,t){n.i=t}function Yb(n,t){n.o=t}function Zb(n,t){n.r=t}function nw(n,t){n.a=t}function tw(n,t){n.b=t}function ew(n,t){n.e=t}function iw(n,t){n.f=t}function rw(n,t){n.g=t}function cw(n,t){n.e=t}function aw(n,t){n.f=t}function ow(n,t){n.f=t}function uw(n,t){n.a=t}function sw(n,t){n.b=t}function hw(n,t){n.n=t}function fw(n,t){n.a=t}function lw(n,t){n.c=t}function bw(n,t){n.c=t}function ww(n,t){n.c=t}function dw(n,t){n.a=t}function gw(n,t){n.a=t}function pw(n,t){n.d=t}function mw(n,t){n.d=t}function vw(n,t){n.e=t}function kw(n,t){n.e=t}function yw(n,t){n.g=t}function Mw(n,t){n.f=t}function Tw(n,t){n.j=t}function jw(n,t){n.a=t}function Ew(n,t){n.a=t}function Sw(n,t){n.b=t}function Pw(n){n.b=n.a}function Cw(n){n.c=n.d.d}function Iw(n){this.a=n}function Ow(n){this.a=n}function Aw(n){this.a=n}function Lw(n){this.a=n}function Nw(n){this.a=n}function $w(n){this.a=n}function Dw(n){this.a=n}function xw(n){this.a=n}function Rw(n){this.a=n}function Kw(n){this.a=n}function Fw(n){this.a=n}function _w(n){this.a=n}function Bw(n){this.a=n}function Hw(n){this.a=n}function Uw(n){this.b=n}function Gw(n){this.b=n}function qw(n){this.b=n}function Xw(n){this.a=n}function zw(n){this.a=n}function Vw(n){this.c=n}function Ww(n){this.c=n}function Qw(n){this.c=n}function Jw(n){this.d=n}function Yw(n){this.a=n}function Zw(n){this.a=n}function nd(n){this.a=n}function td(n){this.a=n}function ed(n){this.a=n}function id(n){this.a=n}function rd(n){this.a=n}function cd(n){this.a=n}function ad(n){this.a=n}function od(n){this.a=n}function ud(n){this.a=n}function sd(n){this.a=n}function hd(n){this.a=n}function fd(n){this.a=n}function ld(n){this.a=n}function bd(n){this.a=n}function wd(n){this.a=n}function dd(n){this.a=n}function gd(n){this.a=n}function pd(n){this.a=n}function md(n){this.a=n}function vd(n){this.a=n}function kd(n){this.a=n}function yd(n){this.a=n}function Md(n){this.a=n}function Td(n){this.a=n}function jd(n){this.a=n}function Ed(n){this.a=n}function Sd(n){this.a=n}function Pd(n){this.a=n}function Cd(n){this.a=n}function Id(n){this.a=n}function Od(n){this.a=n}function Ad(n){this.a=n}function Ld(n){this.a=n}function Nd(n){this.a=n}function $d(n){this.a=n}function Dd(n){this.a=n}function xd(n){this.a=n}function Rd(n){this.a=n}function Kd(n){this.a=n}function Fd(n){this.a=n}function _d(n){this.a=n}function Bd(n){this.a=n}function Hd(n){this.a=n}function Ud(n){this.a=n}function Gd(n){this.a=n}function qd(n){this.a=n}function Xd(n){this.e=n}function zd(n){this.a=n}function Vd(n){this.a=n}function Wd(n){this.a=n}function Qd(n){this.a=n}function Jd(n){this.a=n}function Yd(n){this.a=n}function Zd(n){this.a=n}function ng(n){this.a=n}function tg(n){this.a=n}function eg(n){this.a=n}function ig(n){this.a=n}function rg(n){this.a=n}function cg(n){this.a=n}function ag(n){this.a=n}function og(n){this.a=n}function ug(n){this.a=n}function sg(n){this.a=n}function hg(n){this.a=n}function fg(n){this.a=n}function lg(n){this.a=n}function bg(n){this.a=n}function wg(n){this.a=n}function dg(n){this.a=n}function gg(n){this.a=n}function pg(n){this.a=n}function mg(n){this.a=n}function vg(n){this.a=n}function kg(n){this.a=n}function yg(n){this.a=n}function Mg(n){this.a=n}function Tg(n){this.a=n}function jg(n){this.a=n}function Eg(n){this.a=n}function Sg(n){this.a=n}function Pg(n){this.a=n}function Cg(n){this.a=n}function Ig(n){this.a=n}function Og(n){this.a=n}function Ag(n){this.a=n}function Lg(n){this.a=n}function Ng(n){this.a=n}function $g(n){this.a=n}function Dg(n){this.a=n}function xg(n){this.a=n}function Rg(n){this.a=n}function Kg(n){this.a=n}function Fg(n){this.a=n}function _g(n){this.a=n}function Bg(n){this.a=n}function Hg(n){this.a=n}function Ug(n){this.a=n}function Gg(n){this.a=n}function qg(n){this.a=n}function Xg(n){this.a=n}function zg(n){this.c=n}function Vg(n){this.b=n}function Wg(n){this.a=n}function Qg(n){this.a=n}function Jg(n){this.a=n}function Yg(n){this.a=n}function Zg(n){this.a=n}function np(n){this.a=n}function tp(n){this.a=n}function ep(n){this.a=n}function ip(n){this.a=n}function rp(n){this.a=n}function cp(n){this.a=n}function ap(n){this.a=n}function op(n){this.a=n}function up(n){this.a=n}function sp(n){this.a=n}function hp(n){this.a=n}function fp(n){this.a=n}function lp(n){this.a=n}function bp(n){this.a=n}function wp(n){this.a=n}function dp(n){this.a=n}function gp(n){this.a=n}function pp(n){this.a=n}function mp(n){this.a=n}function vp(n){this.a=n}function kp(n){this.a=n}function yp(n){this.a=n}function Mp(n){this.a=n}function Tp(n){this.a=n}function jp(n){this.a=n}function Ep(n){this.a=n}function Sp(n){this.a=n}function Pp(n){this.a=n}function Cp(n){this.a=n}function Ip(n){this.a=n}function Op(n){this.a=n}function Ap(n){this.a=n}function Lp(n){this.a=n}function Np(n){this.a=n}function $p(n){this.a=n}function Dp(n){this.a=n}function xp(n){this.a=n}function Rp(n){this.a=n}function Kp(n){this.a=n}function Fp(n){this.a=n}function _p(n){this.a=n}function Bp(n){this.a=n}function Hp(n){this.a=n}function Up(n){this.a=n}function Gp(n){this.a=n}function qp(n){this.a=n}function Xp(n){this.a=n}function zp(n){this.a=n}function Vp(n){this.a=n}function Wp(n){this.a=n}function Qp(n){this.a=n}function Jp(n){this.f=n}function Yp(n){this.a=n}function Zp(n){this.a=n}function nm(n){this.a=n}function tm(n){this.a=n}function em(n){this.a=n}function im(n){this.a=n}function rm(n){this.a=n}function cm(n){this.a=n}function am(n){this.a=n}function om(n){this.a=n}function um(n){this.a=n}function sm(n){this.a=n}function hm(n){this.a=n}function fm(n){this.a=n}function lm(n){this.a=n}function bm(n){this.a=n}function wm(n){this.a=n}function dm(n){this.a=n}function gm(n){this.a=n}function pm(n){this.a=n}function mm(n){this.a=n}function vm(n){this.a=n}function km(n){this.a=n}function ym(n){this.a=n}function Mm(n){this.a=n}function Tm(n){this.a=n}function jm(n){this.a=n}function Em(n){this.a=n}function Sm(n){this.a=n}function Pm(n){this.a=n}function Cm(n){this.b=n}function Im(n){this.a=n}function Om(n){this.a=n}function Am(n){this.a=n}function Lm(n){this.a=n}function Nm(n){this.a=n}function $m(n){this.a=n}function Dm(n){this.a=n}function xm(n){this.b=n}function Rm(n){this.a=n}function Km(n){this.a=n}function Fm(n){this.a=n}function _m(n){this.a=n}function Bm(n){this.c=n}function Hm(n){this.e=n}function Um(n){this.a=n}function Gm(n){this.a=n}function qm(n){this.a=n}function Xm(n){this.d=n}function zm(n){this.a=n}function Vm(n){this.a=n}function Wm(n){this.a=n}function Qm(n){this.e=n}function Jm(){this.a=0}function Ym(){$V(this)}function Zm(){IN(this)}function nv(){XQ(this)}function tv(){Rf(this)}function ev(){this.c=nBt}function iv(n,t){n.b+=t}function rv(n,t){t.Wb(n)}function cv(n){return n.a}function av(n){return n.a}function ov(n){return n.a}function uv(n){return n.a}function sv(n){return n.a}function hv(n){return n.e}function fv(){return null}function lv(){return null}function bv(){mj(),xJn()}function wv(n){n.b.Of(n.e)}function dv(n){n.b=new rT}function gv(n,t){n.b=t-n.b}function pv(n,t){n.a=t-n.a}function mv(n,t){n.push(t)}function vv(n,t){n.sort(t)}function kv(n,t){t.jd(n.a)}function yv(n,t){NLn(t,n)}function Mv(n,t,e){n.Yd(e,t)}function Tv(n,t){n.e=t,t.b=n}function jv(n){sB(),this.a=n}function Ev(n){sB(),this.a=n}function Sv(n){sB(),this.a=n}function Pv(n){ZW(),this.a=n}function Cv(n){EZ(),_at.le(n)}function Iv(){Iv=E,new Ym}function Ov(){vx.call(this)}function Av(){vx.call(this)}function Lv(){Ov.call(this)}function Nv(){Ov.call(this)}function $v(){Ov.call(this)}function Dv(){Ov.call(this)}function xv(){Ov.call(this)}function Rv(){Ov.call(this)}function Kv(){Ov.call(this)}function Fv(){Ov.call(this)}function _v(){Ov.call(this)}function Bv(){Ov.call(this)}function Hv(){Ov.call(this)}function Uv(){this.a=this}function Gv(){this.Bb|=256}function qv(){this.b=new hL}function Xv(n,t){n.length=t}function zv(n,t){kD(n.a,t)}function Vv(n,t){LOn(n.c,t)}function Wv(n,t){FV(n.b,t)}function Qv(n,t){bMn(n.a,t)}function Jv(n,t){Vdn(n.a,t)}function Yv(n,t){Msn(n.e,t)}function Zv(n){C$n(n.c,n.b)}function nk(n,t){n.kc().Nb(t)}function tk(n){this.a=Agn(n)}function ek(){this.a=new Ym}function ik(){this.a=new Ym}function rk(){this.a=new hS}function ck(){this.a=new Zm}function ak(){this.a=new Zm}function ok(){this.a=new Zm}function uk(){this.a=new kn}function sk(){this.a=new g7}function hk(){this.a=new lt}function fk(){this.a=new V0}function lk(){this.a=new NF}function bk(){this.a=new Zm}function wk(){this.a=new Zm}function dk(){this.a=new Zm}function gk(){this.a=new Zm}function pk(){this.d=new Zm}function mk(){this.a=new i4}function vk(){this.a=new ek}function kk(){this.a=new Ym}function yk(){this.b=new Ym}function Mk(){this.b=new Zm}function Tk(){this.e=new Zm}function jk(){this.a=new sl}function Ek(){this.d=new Zm}function Sk(){BZ.call(this)}function Pk(){BZ.call(this)}function Ck(){Zm.call(this)}function Ik(){Lv.call(this)}function Ok(){ck.call(this)}function Ak(){HF.call(this)}function Lk(){gk.call(this)}function Nk(){tv.call(this)}function $k(){Nk.call(this)}function Dk(){tv.call(this)}function xk(){Dk.call(this)}function Rk(){oy.call(this)}function Kk(){oy.call(this)}function Fk(){oy.call(this)}function _k(){hy.call(this)}function Bk(){ts.call(this)}function Hk(){ts.call(this)}function Uk(){lS.call(this)}function Gk(){wy.call(this)}function qk(){wy.call(this)}function Xk(){Ym.call(this)}function zk(){Ym.call(this)}function Vk(){Ym.call(this)}function Wk(){Kan.call(this)}function Qk(){ek.call(this)}function Jk(){Gv.call(this)}function Yk(){$D.call(this)}function Zk(){Ym.call(this)}function ny(){$D.call(this)}function ty(){Ym.call(this)}function ey(){Ym.call(this)}function iy(){ps.call(this)}function ry(){iy.call(this)}function cy(){ps.call(this)}function ay(){$f.call(this)}function oy(){this.a=new ek}function uy(){this.a=new Ym}function sy(){this.a=new Zm}function hy(){this.a=new Ym}function fy(){this.a=new lS}function ly(){this.j=new Zm}function by(){this.a=new zj}function wy(){this.a=new gs}function dy(){this.a=new Do}function gy(){gy=E,wat=new c}function py(){py=E,Mat=new ky}function my(){my=E,Tat=new vy}function vy(){ib.call(this,"")}function ky(){ib.call(this,"")}function yy(n){Arn.call(this,n)}function My(n){Arn.call(this,n)}function Ty(n){Ql.call(this,n)}function jy(n){HE.call(this,n)}function Ey(n){HE.call(this,n)}function Sy(n){jy.call(this,n)}function Py(n){jy.call(this,n)}function Cy(n){jy.call(this,n)}function Iy(n){c8.call(this,n)}function Oy(n){c8.call(this,n)}function Ay(n){K_.call(this,n)}function Ly(n){XE.call(this,n)}function Ny(n){WE.call(this,n)}function $y(n){WE.call(this,n)}function Dy(n){WE.call(this,n)}function xy(n){cOn.call(this,n)}function Ry(n){xy.call(this,n)}function Ky(n){Uz.call(this,n)}function Fy(n){Ky.call(this,n)}function _y(){Cb.call(this,{})}function By(){By=E,Vat=new T}function Hy(){Hy=E,Iat=new X$}function Uy(){Uy=E,Dat=new r}function Gy(){Gy=E,Fat=new p}function qy(){qy=E,Hat=new k}function Xy(n){UD(),this.a=n}function zy(n){Cun(),this.a=n}function Vy(n){rz(),this.f=n}function Wy(n){rz(),this.f=n}function Qy(n){aB(),this.a=n}function Jy(n){n.b=null,n.c=0}function Yy(n,t){n.e=t,yFn(n,t)}function Zy(n,t){n.a=t,WAn(n)}function nM(n,t,e){n.a[t.g]=e}function tM(n,t,e){nSn(e,n,t)}function eM(n,t){F_(t.i,n.n)}function iM(n,t){yln(n).Cd(t)}function rM(n,t){n.a.ec().Mc(t)}function cM(n,t){return n.g-t.g}function aM(n,t){return n*n/t}function oM(n){return tJ(n),n}function uM(n){return tJ(n),n}function sM(n){return tJ(n),n}function hM(n){return new Pb(n)}function fM(n){return new QW(n)}function lM(n){return tJ(n),n}function bM(n){return tJ(n),n}function wM(n){Ky.call(this,n)}function dM(n){Ky.call(this,n)}function gM(n){Ky.call(this,n)}function pM(n){Uz.call(this,n)}function mM(n){Ky.call(this,n)}function vM(n){Ky.call(this,n)}function kM(n){Ky.call(this,n)}function yM(n){Ky.call(this,n)}function MM(n){Ky.call(this,n)}function TM(n){Ky.call(this,n)}function jM(n){Ky.call(this,n)}function EM(n){Ky.call(this,n)}function SM(n){Ky.call(this,n)}function PM(n){Ky.call(this,n)}function CM(n){Ky.call(this,n)}function IM(n){tJ(n),this.a=n}function OM(n){return hln(n),n}function AM(n){zV(n,n.length)}function LM(n){return n.b==n.c}function NM(n){return!!n&&n.b}function $M(n){return!!n&&n.k}function DM(n){return!!n&&n.j}function xM(n,t,e){n.c.Ef(t,e)}function RM(n,t){n.be(t),t.ae(n)}function KM(n){sB(),this.a=WW(n)}function FM(){this.a=mK(WW(TZn))}function _M(){throw hv(new Kv)}function BM(){throw hv(new Kv)}function HM(){throw hv(new Kv)}function UM(){throw hv(new Kv)}function GM(){throw hv(new Kv)}function qM(){throw hv(new Kv)}function XM(){XM=E,EZ()}function zM(){$w.call(this,"")}function VM(){$w.call(this,"")}function WM(){$w.call(this,"")}function QM(){$w.call(this,"")}function JM(n){dM.call(this,n)}function YM(n){dM.call(this,n)}function ZM(n){vM.call(this,n)}function nT(n){qw.call(this,n)}function tT(n){nT.call(this,n)}function eT(n){gx.call(this,n)}function iT(n){Qx.call(this,n,0)}function rT(){L2.call(this,12,3)}function cT(n,t){return B0(n,t)}function aT(n,t){return Ltn(n,t)}function oT(n,t){return n.a-t.a}function uT(n,t){return n.a-t.a}function sT(n,t){return n.a-t.a}function hT(n,t){return t in n.a}function fT(n){return n.a?n.b:0}function lT(n){return n.a?n.b:0}function bT(n,t,e){t.Cd(n.a[e])}function wT(n,t,e){t.Pe(n.a[e])}function dT(n,t){n.b=new eN(t)}function gT(n,t){return n.b=t,n}function pT(n,t){return n.c=t,n}function mT(n,t){return n.f=t,n}function vT(n,t){return n.g=t,n}function kT(n,t){return n.a=t,n}function yT(n,t){return n.f=t,n}function MT(n,t){return n.k=t,n}function TT(n,t){return n.a=t,n}function jT(n,t){return n.e=t,n}function ET(n,t){return n.e=t,n}function ST(n,t){return n.f=t,n}function PT(n,t){n.b=!0,n.d=t}function CT(n,t){return n.b-t.b}function IT(n,t){return n.g-t.g}function OT(n,t){return n?0:t-1}function AT(n,t){return n?0:t-1}function LT(n,t){return n?t-1:0}function NT(n,t){return n.s-t.s}function $T(n,t){return t.rg(n)}function DT(n,t){return n.b=t,n}function xT(n,t){return n.a=t,n}function RT(n,t){return n.c=t,n}function KT(n,t){return n.d=t,n}function FT(n,t){return n.e=t,n}function _T(n,t){return n.f=t,n}function BT(n,t){return n.a=t,n}function HT(n,t){return n.b=t,n}function UT(n,t){return n.c=t,n}function GT(n,t){return n.c=t,n}function qT(n,t){return n.b=t,n}function XT(n,t){return n.d=t,n}function zT(n,t){return n.e=t,n}function VT(n,t){return n.f=t,n}function WT(n,t){return n.g=t,n}function QT(n,t){return n.a=t,n}function JT(n,t){return n.i=t,n}function YT(n,t){return n.j=t,n}function ZT(n,t){jIn(),o2(t,n)}function nj(n,t,e){az(n.a,t,e)}function tj(n){Y_.call(this,n)}function ej(n){dpn.call(this,n)}function ij(n){TY.call(this,n)}function rj(n){TY.call(this,n)}function cj(n){Drn.call(this,n)}function aj(n){HY.call(this,n)}function oj(n){HY.call(this,n)}function uj(){S$.call(this,"")}function sj(){this.a=0,this.b=0}function hj(){this.b=0,this.a=0}function fj(n,t){n.b=0,Ccn(n,t)}function lj(n,t){return n.k=t,n}function bj(n,t){return n.j=t,n}function wj(n,t){n.c=t,n.b=!0}function dj(){dj=E,rut=ePn()}function gj(){gj=E,xKt=AEn()}function pj(){pj=E,RKt=VPn()}function mj(){mj=E,NFt=aan()}function vj(){vj=E,y_t=LEn()}function kj(){kj=E,xBt=NEn()}function yj(){yj=E,RBt=qAn()}function Mj(n){return n.e&&n.e()}function Tj(n){return n.l|n.m<<22}function jj(n,t){return n.c._b(t)}function Ej(n,t){return Uwn(n.b,t)}function Sj(n){return n?n.d:null}function Pj(n){return n?n.g:null}function Cj(n){return n?n.i:null}function Ij(n){return vK(n),n.o}function Oj(n,t){return n.a+=t,n}function Aj(n,t){return n.a+=t,n}function Lj(n,t){return n.a+=t,n}function Nj(n,t){return n.a+=t,n}function $j(n,t){for(;n.Bd(t););}function Dj(n){this.a=new sS(n)}function xj(){throw hv(new Kv)}function Rj(){throw hv(new Kv)}function Kj(){throw hv(new Kv)}function Fj(){throw hv(new Kv)}function _j(){throw hv(new Kv)}function Bj(){throw hv(new Kv)}function Hj(n){this.a=new Hz(n)}function Uj(){this.a=new mKn(iIt)}function Gj(){this.b=new mKn(ZSt)}function qj(){this.a=new mKn(dOt)}function Xj(){this.b=new mKn(VAt)}function zj(){this.b=new mKn(VAt)}function Vj(n){this.a=0,this.b=n}function Wj(n){CQn(),uYn(this,n)}function Qj(n){return GQ(n),n.a}function Jj(n){return n.b!=n.d.c}function Yj(n,t){return n.d[t.p]}function Zj(n,t){return vFn(n,t)}function nE(n,t,e){n.splice(t,e)}function tE(n,t){for(;n.Re(t););}function eE(n){n.c?P_n(n):C_n(n)}function iE(){throw hv(new Kv)}function rE(){throw hv(new Kv)}function cE(){throw hv(new Kv)}function aE(){throw hv(new Kv)}function oE(){throw hv(new Kv)}function uE(){throw hv(new Kv)}function sE(){throw hv(new Kv)}function hE(){throw hv(new Kv)}function fE(){throw hv(new Kv)}function lE(){throw hv(new Kv)}function bE(){throw hv(new Bv)}function wE(){throw hv(new Bv)}function dE(n){this.a=new gE(n)}function gE(n){Zan(this,n,fOn())}function pE(n){return!n||FQ(n)}function mE(n){return-1!=dHt[n]}function vE(){0!=Uat&&(Uat=0),qat=-1}function kE(){null==hZn&&(hZn=[])}function yE(n,t){RD.call(this,n,t)}function ME(n,t){yE.call(this,n,t)}function TE(n,t){this.a=n,this.b=t}function jE(n,t){this.a=n,this.b=t}function EE(n,t){this.a=n,this.b=t}function SE(n,t){this.a=n,this.b=t}function PE(n,t){this.a=n,this.b=t}function CE(n,t){this.a=n,this.b=t}function IE(n,t){this.a=n,this.b=t}function OE(n,t){this.e=n,this.d=t}function AE(n,t){this.b=n,this.c=t}function LE(n,t){this.b=n,this.a=t}function NE(n,t){this.b=n,this.a=t}function $E(n,t){this.b=n,this.a=t}function DE(n,t){this.b=n,this.a=t}function xE(n,t){this.a=n,this.b=t}function RE(n,t){this.a=n,this.b=t}function KE(n,t){this.a=n,this.f=t}function FE(n,t){this.g=n,this.i=t}function _E(n,t){this.f=n,this.g=t}function BE(n,t){this.b=n,this.c=t}function HE(n){FD(n.dc()),this.c=n}function UE(n,t){this.a=n,this.b=t}function GE(n,t){this.a=n,this.b=t}function qE(n){this.a=uG(WW(n),15)}function XE(n){this.a=uG(WW(n),15)}function zE(n){this.a=uG(WW(n),85)}function VE(n){this.b=uG(WW(n),85)}function WE(n){this.b=uG(WW(n),51)}function QE(){this.q=new e.Date}function JE(n,t){this.a=n,this.b=t}function YE(n,t){return PV(n.b,t)}function ZE(n,t){return n.b.Hc(t)}function nS(n,t){return n.b.Ic(t)}function tS(n,t){return n.b.Qc(t)}function eS(n,t){return n.b.Hc(t)}function iS(n,t){return n.c.uc(t)}function rS(n,t){return udn(n.c,t)}function cS(n,t){return n.a._b(t)}function aS(n,t){return n>t&&t0}function $P(n,t){return dwn(n,t)<0}function DP(n,t){return RX(n.a,t)}function xP(n,t){U0.call(this,n,t)}function RP(n){nQ(),K_.call(this,n)}function KP(n,t){zX(n,n.length,t)}function FP(n,t){dW(n,n.length,t)}function _P(n,t){return n.a.get(t)}function BP(n,t){return PV(n.e,t)}function HP(n){return tJ(n),!1}function UP(n){this.a=uG(WW(n),229)}function GP(n){h3.call(this,n,21)}function qP(n,t){_E.call(this,n,t)}function XP(n,t){_E.call(this,n,t)}function zP(n,t){this.b=n,this.a=t}function VP(n,t){this.d=n,this.e=t}function WP(n,t){this.a=n,this.b=t}function QP(n,t){this.a=n,this.b=t}function JP(n,t){this.a=n,this.b=t}function YP(n,t){this.a=n,this.b=t}function ZP(n,t){this.a=n,this.b=t}function nC(n,t){this.b=n,this.a=t}function tC(n,t){this.b=n,this.a=t}function eC(n,t){_E.call(this,n,t)}function iC(n,t){_E.call(this,n,t)}function rC(n,t){_E.call(this,n,t)}function cC(n,t){_E.call(this,n,t)}function aC(n,t){_E.call(this,n,t)}function oC(n,t){_E.call(this,n,t)}function uC(n,t){_E.call(this,n,t)}function sC(n,t){this.b=n,this.a=t}function hC(n,t){_E.call(this,n,t)}function fC(n,t){this.b=n,this.a=t}function lC(n,t){_E.call(this,n,t)}function bC(n,t){this.b=n,this.a=t}function wC(n,t){_E.call(this,n,t)}function dC(n,t){_E.call(this,n,t)}function gC(n,t){_E.call(this,n,t)}function pC(n,t,e){n.splice(t,0,e)}function mC(n,t,e){n.Mb(e)&&t.Cd(e)}function vC(n,t,e){t.Pe(n.a.Ye(e))}function kC(n,t,e){t.Dd(n.a.Ze(e))}function yC(n,t,e){t.Cd(n.a.Kb(e))}function MC(n,t){return $x(n.c,t)}function TC(n,t){return $x(n.e,t)}function jC(n,t){_E.call(this,n,t)}function EC(n,t){_E.call(this,n,t)}function SC(n,t){_E.call(this,n,t)}function PC(n,t){_E.call(this,n,t)}function CC(n,t){_E.call(this,n,t)}function IC(n,t){_E.call(this,n,t)}function OC(n,t){this.a=n,this.b=t}function AC(n,t){this.a=n,this.b=t}function LC(n,t){this.a=n,this.b=t}function NC(n,t){this.a=n,this.b=t}function $C(n,t){this.a=n,this.b=t}function DC(n,t){this.a=n,this.b=t}function xC(n,t){this.b=n,this.a=t}function RC(n,t){this.b=n,this.a=t}function KC(n,t){this.b=n,this.a=t}function FC(n,t){this.c=n,this.d=t}function _C(n,t){this.e=n,this.d=t}function BC(n,t){this.a=n,this.b=t}function HC(n,t){this.a=n,this.b=t}function UC(n,t){this.a=n,this.b=t}function GC(n,t){this.b=n,this.a=t}function qC(n,t){this.b=t,this.c=n}function XC(n,t){_E.call(this,n,t)}function zC(n,t){_E.call(this,n,t)}function VC(n,t){_E.call(this,n,t)}function WC(n,t){_E.call(this,n,t)}function QC(n,t){_E.call(this,n,t)}function JC(n,t){_E.call(this,n,t)}function YC(n,t){_E.call(this,n,t)}function ZC(n,t){_E.call(this,n,t)}function nI(n,t){_E.call(this,n,t)}function tI(n,t){_E.call(this,n,t)}function eI(n,t){_E.call(this,n,t)}function iI(n,t){_E.call(this,n,t)}function rI(n,t){_E.call(this,n,t)}function cI(n,t){_E.call(this,n,t)}function aI(n,t){_E.call(this,n,t)}function oI(n,t){_E.call(this,n,t)}function uI(n,t){_E.call(this,n,t)}function sI(n,t){_E.call(this,n,t)}function hI(n,t){_E.call(this,n,t)}function fI(n,t){_E.call(this,n,t)}function lI(n,t){_E.call(this,n,t)}function bI(n,t){_E.call(this,n,t)}function wI(n,t){_E.call(this,n,t)}function dI(n,t){_E.call(this,n,t)}function gI(n,t){_E.call(this,n,t)}function pI(n,t){_E.call(this,n,t)}function mI(n,t){_E.call(this,n,t)}function vI(n,t){_E.call(this,n,t)}function kI(n,t){_E.call(this,n,t)}function yI(n,t){_E.call(this,n,t)}function MI(n,t){_E.call(this,n,t)}function TI(n,t){_E.call(this,n,t)}function jI(n,t){_E.call(this,n,t)}function EI(n,t){this.b=n,this.a=t}function SI(n,t){_E.call(this,n,t)}function PI(n,t){this.a=n,this.b=t}function CI(n,t){this.a=n,this.b=t}function II(n,t){this.a=n,this.b=t}function OI(n,t){_E.call(this,n,t)}function AI(n,t){_E.call(this,n,t)}function LI(n,t){this.a=n,this.b=t}function NI(n,t){return PU(),t!=n}function $I(n){return MK(n.a),n.b}function DI(n){return K$n(n,n.c),n}function xI(){return dj(),new rut}function RI(){UB(),this.a=new xF}function KI(){oFn(),this.a=new ek}function FI(){e2(),this.b=new ek}function _I(n,t){this.b=n,this.d=t}function BI(n,t){this.a=n,this.b=t}function HI(n,t){this.a=n,this.b=t}function UI(n,t){this.a=n,this.b=t}function GI(n,t){this.b=n,this.a=t}function qI(n,t){_E.call(this,n,t)}function XI(n,t){_E.call(this,n,t)}function zI(n,t){_E.call(this,n,t)}function VI(n,t){_E.call(this,n,t)}function WI(n,t){_E.call(this,n,t)}function QI(n,t){_E.call(this,n,t)}function JI(n,t){_E.call(this,n,t)}function YI(n,t){_E.call(this,n,t)}function ZI(n,t){_E.call(this,n,t)}function nO(n,t){_E.call(this,n,t)}function tO(n,t){_E.call(this,n,t)}function eO(n,t){_E.call(this,n,t)}function iO(n,t){_E.call(this,n,t)}function rO(n,t){_E.call(this,n,t)}function cO(n,t){_E.call(this,n,t)}function aO(n,t){_E.call(this,n,t)}function oO(n,t){_E.call(this,n,t)}function uO(n,t){_E.call(this,n,t)}function sO(n,t){_E.call(this,n,t)}function hO(n,t){_E.call(this,n,t)}function fO(n,t){_E.call(this,n,t)}function lO(n,t){_E.call(this,n,t)}function bO(n,t){_E.call(this,n,t)}function wO(n,t){_E.call(this,n,t)}function dO(n,t){this.b=n,this.a=t}function gO(n,t){this.b=n,this.a=t}function pO(n,t){this.b=n,this.a=t}function mO(n,t){this.b=n,this.a=t}function vO(n,t){this.a=n,this.b=t}function kO(n,t){this.a=n,this.b=t}function yO(n,t){this.a=n,this.b=t}function MO(n,t){this.a=n,this.b=t}function TO(n,t){_E.call(this,n,t)}function jO(n,t){_E.call(this,n,t)}function EO(n,t){_E.call(this,n,t)}function SO(n,t){_E.call(this,n,t)}function PO(n,t){_E.call(this,n,t)}function CO(n,t){_E.call(this,n,t)}function IO(n,t){_E.call(this,n,t)}function OO(n,t){_E.call(this,n,t)}function AO(n,t){_E.call(this,n,t)}function LO(n,t){_E.call(this,n,t)}function NO(n,t){_E.call(this,n,t)}function $O(n,t){_E.call(this,n,t)}function DO(n,t){_E.call(this,n,t)}function xO(n,t){_E.call(this,n,t)}function RO(n,t){_E.call(this,n,t)}function KO(n,t){_E.call(this,n,t)}function FO(n,t){_E.call(this,n,t)}function _O(n,t){_E.call(this,n,t)}function BO(n,t){_E.call(this,n,t)}function HO(n,t){_E.call(this,n,t)}function UO(n,t){this.a=n,this.b=t}function GO(n,t){this.a=n,this.b=t}function qO(n,t){this.a=n,this.b=t}function XO(n,t){this.a=n,this.b=t}function zO(n,t){this.a=n,this.b=t}function VO(n,t){this.a=n,this.b=t}function WO(n,t){this.a=n,this.b=t}function QO(n,t){this.a=n,this.b=t}function JO(n,t){this.a=n,this.b=t}function YO(n,t){this.a=n,this.b=t}function ZO(n,t){this.a=n,this.b=t}function nA(n,t){this.a=n,this.b=t}function tA(n,t){this.a=n,this.b=t}function eA(n,t){this.b=n,this.a=t}function iA(n,t){this.b=n,this.a=t}function rA(n,t){this.b=n,this.a=t}function cA(n,t){this.b=n,this.a=t}function aA(n,t){this.a=n,this.b=t}function oA(n,t){this.a=n,this.b=t}function uA(n,t){_E.call(this,n,t)}function sA(n,t){this.a=n,this.b=t}function hA(n,t){this.a=n,this.b=t}function fA(n,t){_E.call(this,n,t)}function lA(n,t){this.f=n,this.c=t}function bA(n,t){return $x(n.g,t)}function wA(n,t){return $x(t.b,n)}function dA(n,t){return ymn(n.a,t)}function gA(n,t){return-n.b.af(t)}function pA(n,t){n&&vJ(AFt,n,t)}function mA(n,t){n.i=null,lon(n,t)}function vA(n,t,e){MSn(t,jAn(n,e))}function kA(n,t,e){MSn(t,jAn(n,e))}function yA(n,t){BRn(n.a,uG(t,58))}function MA(n,t){aen(n.a,uG(t,12))}function TA(n,t){this.a=n,this.b=t}function jA(n,t){this.a=n,this.b=t}function EA(n,t){this.a=n,this.b=t}function SA(n,t){this.a=n,this.b=t}function PA(n,t){this.a=n,this.b=t}function CA(n,t){this.d=n,this.b=t}function IA(n,t){this.e=n,this.a=t}function OA(n,t){this.b=n,this.c=t}function AA(n,t){this.i=n,this.g=t}function LA(n,t){this.d=n,this.e=t}function NA(n,t){Iin(new DD(n),t)}function $A(n){return kmn(n.c,n.b)}function DA(n){return n?n.md():null}function xA(n){return null==n?null:n}function RA(n){return typeof n===pZn}function KA(n){return typeof n===dZn}function FA(n){return typeof n===gZn}function _A(n,t){return 0==dwn(n,t)}function BA(n,t){return dwn(n,t)>=0}function HA(n,t){return 0!=dwn(n,t)}function UA(n,t){return Zun(n.Kc(),t)}function GA(n,t){return n.Rd().Xb(t)}function qA(n){return bpn(n),n.d.gc()}function XA(n){return Fq(null==n),n}function zA(n,t){return n.a+=""+t,n}function VA(n,t){return n.a+=""+t,n}function WA(n,t){return n.a+=""+t,n}function QA(n,t){return n.a+=""+t,n}function JA(n,t){return n.a+=""+t,n}function YA(n,t){return n.a+=""+t,n}function ZA(n){return""+(tJ(n),n)}function nL(n){$V(this),xun(this,n)}function tL(){J0(),ez.call(this)}function eL(n,t){Bz.call(this,n,t)}function iL(n,t){Bz.call(this,n,t)}function rL(n,t){Bz.call(this,n,t)}function cL(n,t){s8(n,t,n.c.b,n.c)}function aL(n,t){s8(n,t,n.a,n.a.a)}function oL(n){return u3(n,0),null}function uL(){this.b=0,this.a=!1}function sL(){this.b=0,this.a=!1}function hL(){this.b=new sS(orn(12))}function fL(){fL=E,fht=Abn(Nkn())}function lL(){lL=E,_wt=Abn(bKn())}function bL(){bL=E,bPt=Abn(usn())}function wL(){wL=E,Iv(),Bat=new Ym}function dL(n){return n.a=0,n.b=0,n}function gL(n,t){return n.a=t.g+1,n}function pL(n,t){w_.call(this,n,t)}function mL(n,t){uF.call(this,n,t)}function vL(n,t){AA.call(this,n,t)}function kL(n,t){zx.call(this,n,t)}function yL(n,t){Zsn.call(this,n,t)}function ML(n,t){TP(),vJ(_Ft,n,t)}function TL(n,t){n.q.setTime(W4(t))}function jL(n){e.clearTimeout(n)}function EL(n){return WW(n),new iN(n)}function SL(n,t){return xA(n)===xA(t)}function PL(n,t){return n.a.a.a.cc(t)}function CL(n,t){return r1(n.a,0,t)}function IL(n){return jW(uG(n,74))}function OL(n){return t0((tJ(n),n))}function AL(n){return t0((tJ(n),n))}function LL(n){return p$(n.l,n.m,n.h)}function NL(n,t){return d$(n.a,t.a)}function $L(n,t){return rW(n.a,t.a)}function DL(n,t){return ugn(n.a,t.a)}function xL(n,t){return n.indexOf(t)}function RL(n,t){return 2==n.j[t.p]}function KL(n,t){return n==t?0:n?1:-1}function FL(n){return n<10?"0"+n:""+n}function _L(n){return typeof n===gZn}function BL(n){return n==Flt||n==Hlt}function HL(n){return n==Flt||n==_lt}function UL(n,t){return d$(n.g,t.g)}function GL(n){return Ten(n.b.b,n,0)}function qL(){lX.call(this,0,0,0,0)}function XL(){td.call(this,new u8)}function zL(n,t){Ntn(n,0,n.length,t)}function VL(n,t){return kD(n.a,t),t}function WL(n,t){return GB(),t.a+=n}function QL(n,t){return GB(),t.a+=n}function JL(n,t){return GB(),t.c+=n}function YL(n,t){return kD(n.c,t),n}function ZL(n,t){return gsn(n.a,t),n}function nN(n){this.a=xI(),this.b=n}function tN(n){this.a=xI(),this.b=n}function eN(n){this.a=n.a,this.b=n.b}function iN(n){this.a=n,Ff.call(this)}function rN(n){this.a=n,Ff.call(this)}function cN(){gY.call(this,0,0,0,0)}function aN(n){return gsn(new wJ,n)}function oN(n){return xJ(uG(n,123))}function uN(n){return n.vh()&&n.wh()}function sN(n){return n!=uRt&&n!=sRt}function hN(n){return n==JDt||n==YDt}function fN(n){return n==nxt||n==QDt}function lN(n){return n==wjt||n==bjt}function bN(n,t){return d$(n.g,t.g)}function wN(n,t){return new Zsn(t,n)}function dN(n,t){return new Zsn(t,n)}function gN(n){return nG(n.b.Kc(),n.a)}function pN(n,t){sbn(n,t),Ocn(n,n.D)}function mN(n,t,e){Scn(n,t),pcn(n,e)}function vN(n,t,e){kcn(n,t),vcn(n,e)}function kN(n,t,e){ycn(n,t),Mcn(n,e)}function yN(n,t,e){mcn(n,t),jcn(n,e)}function MN(n,t,e){Tcn(n,t),Ecn(n,e)}function TN(n,t,e){AK.call(this,n,t,e)}function jN(n){lA.call(this,n,!0)}function EN(){qP.call(this,"Tail",3)}function SN(){qP.call(this,"Head",1)}function PN(n){cHn(),Bun.call(this,n)}function CN(n){lX.call(this,n,n,n,n)}function IN(n){n.c=Inn(dat,EZn,1,0,5,1)}function ON(n){return n.b&&sXn(n),n.a}function AN(n){return n.b&&sXn(n),n.c}function LN(n,t){Nut||(n.b=t)}function NN(n,t){return n[n.length]=t}function $N(n,t){return n[n.length]=t}function DN(n,t){return Ern(t,h0(n))}function xN(n,t){return Ern(t,h0(n))}function RN(n,t){return kan(UW(n.d),t)}function KN(n,t){return kan(UW(n.g),t)}function FN(n,t){return kan(UW(n.j),t)}function _N(n,t){uF.call(this,n.b,t)}function BN(n,t){ttn(z5(n.a),v2(t))}function HN(n,t){ttn(Aen(n.a),k2(t))}function UN(n,t,e){kN(e,e.i+n,e.j+t)}function GN(n,t,e){uQ(n.c[t.g],t.g,e)}function qN(n,t,e){uG(n.c,71).Gi(t,e)}function XN(n,t,e){return uQ(n,t,e),e}function zN(n){Prn(n.Sf(),new Od(n))}function VN(n){return null!=n?Hon(n):0}function WN(n){return null==n?0:Hon(n)}function QN(n){QYn(),Qm.call(this,n)}function JN(n){this.a=n,WU.call(this,n)}function YN(){YN=E,e.Math.log(2)}function ZN(){ZN=E,kP(),rBt=WKt}function n$(){n$=E,vSt=new rpn(kxt)}function t$(){t$=E,new e$,new Zm}function e$(){new Ym,new Ym,new Ym}function i$(){throw hv(new TM(hat))}function r$(){throw hv(new TM(hat))}function c$(){throw hv(new TM(fat))}function a$(){throw hv(new TM(fat))}function o$(n){this.a=n,VE.call(this,n)}function u$(n){this.a=n,VE.call(this,n)}function s$(n,t){ZW(),this.a=n,this.b=t}function h$(n,t){WW(t),uY(n).Jc(new b)}function f$(n,t){UX(n.c,n.c.length,t)}function l$(n){return n.at?1:0}function g$(n,t){return dwn(n,t)>0?n:t}function p$(n,t,e){return{l:n,m:t,h:e}}function m$(n,t){null!=n.a&&MA(t,n.a)}function v$(n){c2(n,null),u2(n,null)}function k$(n,t,e){return vJ(n.g,e,t)}function y$(n,t,e){return avn(t,e,n.c)}function M$(n,t,e){return vJ(n.k,e,t)}function T$(n,t,e){return gWn(n,t,e),e}function j$(n,t){return n2(),t.n.b+=n}function E$(n){HZ.call(this),this.b=n}function S$(n){LF.call(this),this.a=n}function P$(){qP.call(this,"Range",2)}function C$(n){this.b=n,this.a=new Zm}function I$(n){this.b=new tt,this.a=n}function O$(n){n.a=new R,n.c=new R}function A$(n){n.a=new Ym,n.d=new Ym}function L$(n){s2(n,null),h2(n,null)}function N$(n,t){return kWn(n.a,t,null)}function $$(n,t){return vJ(n.a,t.a,t)}function D$(n){return new MO(n.a,n.b)}function x$(n){return new MO(n.c,n.d)}function R$(n){return new MO(n.c,n.d)}function K$(n,t){return rVn(n.c,n.b,t)}function F$(n,t){return null!=n&&Eyn(n,t)}function _$(n,t){return-1!=Yhn(n.Kc(),t)}function B$(n){return n.Ob()?n.Pb():null}function H$(n){this.b=(hZ(),new Vw(n))}function U$(n){this.a=n,Ym.call(this)}function G$(){zx.call(this,null,null)}function q$(){Vx.call(this,null,null)}function X$(){_E.call(this,"INSTANCE",0)}function z$(){FEn(),this.a=new mKn(Llt)}function V$(n){return mvn(n,0,n.length)}function W$(n,t){return new ex(n.Kc(),t)}function Q$(n,t){return null!=n.a.Bc(t)}function J$(n,t){Czn(n),n.Gc(uG(t,15))}function Y$(n,t,e){n.c.bd(t,uG(e,136))}function Z$(n,t,e){n.c.Ui(t,uG(e,136))}function nD(n,t){n.c&&(cq(t),B1(t))}function tD(n,t){n.q.setHours(t),Iqn(n,t)}function eD(n,t){KR(t,n.a.a.a,n.a.a.b)}function iD(n,t,e,i){uQ(n.a[t.g],e.g,i)}function rD(n,t,e){return n.a[t.g][e.g]}function cD(n,t){return n.e[t.c.p][t.p]}function aD(n,t){return n.c[t.c.p][t.p]}function oD(n,t){return n.a[t.c.p][t.p]}function uD(n,t){return n.j[t.p]=oRn(t)}function sD(n,t){return null!=n.a.Bc(t)}function hD(n,t){return uM(pK(t.a))<=n}function fD(n,t){return uM(pK(t.a))>=n}function lD(n,t){return r7(n.f,t.Pg())}function bD(n,t){return n.a*t.a+n.b*t.b}function wD(n,t){return n.a0?t/(n*n):100*t}function jR(n,t){return n>0?t*t/n:t*t*100}function ER(n,t){return uG(ain(n.a,t),34)}function SR(n,t){return jIn(),UNn(n,t.e,t)}function PR(n,t,e){return ZS(),e.Mg(n,t)}function CR(n){return tcn(),n.e.a+n.f.a/2}function IR(n,t,e){return tcn(),e.e.a-n*t}function OR(n){return tcn(),n.e.b+n.f.b/2}function AR(n,t,e){return tcn(),e.e.b-n*t}function LR(n){n.d=new bR(n),n.e=new Ym}function NR(){this.a=new K1,this.b=new K1}function $R(n){this.c=n,this.a=1,this.b=1}function DR(n){aYn(),dv(this),this.Ff(n)}function xR(n,t,e){Stn(),n.pf(t)&&e.Cd(n)}function RR(n,t,e){return kD(t,xpn(n,e))}function KR(n,t,e){return n.a+=t,n.b+=e,n}function FR(n,t,e){return n.a*=t,n.b*=e,n}function _R(n,t){return n.a=t.a,n.b=t.b,n}function BR(n){return n.a=-n.a,n.b=-n.b,n}function HR(n,t,e){return n.a-=t,n.b-=e,n}function UR(n){lS.call(this),dan(this,n)}function GR(){_E.call(this,"GROW_TREE",0)}function qR(){_E.call(this,"POLYOMINO",0)}function XR(n,t,e){ltn.call(this,n,t,e,2)}function zR(n,t,e){$dn(z5(n.a),t,v2(e))}function VR(n,t){jP(),zx.call(this,n,t)}function WR(n,t){EP(),Vx.call(this,n,t)}function QR(n,t){EP(),WR.call(this,n,t)}function JR(n,t){EP(),Vx.call(this,n,t)}function YR(n,t){return n.c.Fc(uG(t,136))}function ZR(n,t,e){$dn(Aen(n.a),t,k2(e))}function nK(n){this.c=n,ycn(n,0),Mcn(n,0)}function tK(n,t){ZN(),OX.call(this,n,t)}function eK(n,t){ZN(),tK.call(this,n,t)}function iK(n,t){ZN(),tK.call(this,n,t)}function rK(n,t){ZN(),OX.call(this,n,t)}function cK(n,t){ZN(),iK.call(this,n,t)}function aK(n,t){ZN(),rK.call(this,n,t)}function oK(n,t){ZN(),OX.call(this,n,t)}function uK(n,t,e){return t.zl(n.e,n.c,e)}function sK(n,t,e){return t.Al(n.e,n.c,e)}function hK(n,t,e){return JXn(Len(n,t),e)}function fK(n,t){return mwn(n.e,uG(t,54))}function lK(n){return null==n?null:AQn(n)}function bK(n){return null==n?null:mOn(n)}function wK(n){return null==n?null:cpn(n)}function dK(n){return null==n?null:cpn(n)}function gK(n){return Fq(null==n||KA(n)),n}function pK(n){return Fq(null==n||FA(n)),n}function mK(n){return Fq(null==n||RA(n)),n}function vK(n){null==n.o&&axn(n)}function kK(n){if(!n)throw hv(new Dv)}function yK(n){if(!n)throw hv(new Nv)}function MK(n){if(!n)throw hv(new Bv)}function TK(n){if(!n)throw hv(new xv)}function jK(n){if(!n)throw hv(new Fv)}function EK(){EK=E,KFt=new Gk,new qk}function SK(){SK=E,zCt=new Cm("root")}function PK(){Kan.call(this),this.Bb|=P0n}function CK(n,t){this.d=n,Cw(this),this.b=t}function IK(n,t){Fnn.call(this,n),this.a=t}function OK(n,t){Fnn.call(this,n),this.a=t}function AK(n,t,e){A7.call(this,n,t,e,null)}function LK(n,t,e){A7.call(this,n,t,e,null)}function NK(n,t){this.c=n,OE.call(this,n,t)}function $K(n,t){this.a=n,NK.call(this,n,t)}function DK(n){this.q=new e.Date(W4(n))}function xK(n){return n>8?0:n+1}function RK(n,t){Nut||kD(n.a,t)}function KK(n,t){return WS(),jsn(t.d.i,n)}function FK(n,t){return Pun(),new oHn(t,n)}function _K(n,t,e){return n.Ne(t,e)<=0?e:t}function BK(n,t,e){return n.Ne(t,e)<=0?t:e}function HK(n,t){return uG(ain(n.b,t),143)}function UK(n,t){return uG(ain(n.c,t),233)}function GK(n){return uG(zq(n.a,n.b),293)}function qK(n){return new MO(n.c,n.d+n.a)}function XK(n){return tJ(n),n?1231:1237}function zK(n){return n2(),lN(uG(n,203))}function VK(){VK=E,lht=ggn((Qmn(),JRt))}function WK(n,t){t.a?W$n(n,t):sD(n.a,t.b)}function QK(n,t,e){++n.j,n.tj(),Ann(n,t,e)}function JK(n,t,e){++n.j,n.qj(t,n.Zi(t,e))}function YK(n,t,e){n.fd(t).Rb(e)}function ZK(n,t,e){return e=DUn(n,t,6,e)}function nF(n,t,e){return e=DUn(n,t,3,e)}function tF(n,t,e){return e=DUn(n,t,9,e)}function eF(n,t){return ZZ(t,W2n),n.f=t,n}function iF(n,t){return(t&vZn)%n.d.length}function rF(n,t,e){return fXn(n.c,n.b,t,e)}function cF(n,t){this.c=n,Drn.call(this,t)}function aF(n,t){this.a=n,xm.call(this,t)}function oF(n,t){this.a=n,xm.call(this,t)}function uF(n,t){Cm.call(this,n),this.a=t}function sF(n,t){Bm.call(this,n),this.a=t}function hF(n,t){Bm.call(this,n),this.a=t}function fF(n){smn.call(this,0,0),this.f=n}function lF(n,t,e){return n.a+=mvn(t,0,e),n}function bF(n){return!n.a&&(n.a=new M),n.a}function wF(n,t){var e;return e=n.e,n.e=t,e}function dF(n,t){var e;return e=t,!!n.Fe(e)}function gF(n,t){return qx(),n==t?0:n?1:-1}function pF(n,t){n.a.bd(n.b,t),++n.b,n.c=-1}function mF(n){n.b?mF(n.b):n.f.c.zc(n.e,n.d)}function vF(n){$V(n.e),n.d.b=n.d,n.d.a=n.d}function kF(n,t,e){vS(),Ob(n,t.Ve(n.a,e))}function yF(n,t,e){return UV(n,uG(t,22),e)}function MF(n,t){return aT(new Array(t),n)}function TF(n){return pz(Dz(n,32))^pz(n)}function jF(n){return String.fromCharCode(n)}function EF(n){return null==n?null:n.message}function SF(n,t,e){return n.apply(t,e)}function PF(n,t){n[U0n].call(n,t)}function CF(n,t){n[U0n].call(n,t)}function IF(n,t){return WS(),!jsn(t.d.i,n)}function OF(n,t,e,i){lX.call(this,n,t,e,i)}function AF(){HF.call(this),this.a=new sj}function LF(){this.n=new sj,this.o=new sj}function NF(){this.b=new sj,this.c=new Zm}function $F(){this.a=new Zm,this.b=new Zm}function DF(){this.a=new lt,this.b=new qv}function xF(){this.b=new u8,this.a=new u8}function RF(){this.b=new ek,this.a=new ek}function KF(){this.b=new Ym,this.a=new Ym}function FF(){this.b=new Gj,this.a=new Ma}function _F(){this.a=new hl,this.b=new oc}function BF(){this.a=new Zm,this.d=new Zm}function HF(){this.n=new Dk,this.i=new cN}function UF(n){this.a=(man(n,g1n),new R7(n))}function GF(n){this.a=(man(n,g1n),new R7(n))}function qF(n){return n<100?null:new cj(n)}function XF(n,t){return n.n.a=(tJ(t),t+10)}function zF(n,t){return n.n.a=(tJ(t),t+10)}function VF(n,t){return t==n||sSn(mRn(t),n)}function WF(n,t){return null==vJ(n.a,t,"")}function QF(n,t){return t.qi(n.a)}function JF(n,t){return n.a+=t.a,n.b+=t.b,n}function YF(n,t){return n.a-=t.a,n.b-=t.b,n}function ZF(n){return Xv(n.j.c,0),n.a=-1,n}function n_(n,t,e){return e=DUn(n,t,11,e)}function t_(n,t,e){null!=e&&Xan(t,gTn(n,e))}function e_(n,t,e){null!=e&&zan(t,gTn(n,e))}function i_(n,t,e,i){fV.call(this,n,t,e,i)}function r_(n,t,e,i){fV.call(this,n,t,e,i)}function c_(n,t,e,i){r_.call(this,n,t,e,i)}function a_(n,t,e,i){wV.call(this,n,t,e,i)}function o_(n,t,e,i){wV.call(this,n,t,e,i)}function u_(n,t,e,i){wV.call(this,n,t,e,i)}function s_(n,t,e,i){o_.call(this,n,t,e,i)}function h_(n,t,e,i){o_.call(this,n,t,e,i)}function f_(n,t,e,i){u_.call(this,n,t,e,i)}function l_(n,t,e,i){h_.call(this,n,t,e,i)}function b_(n,t,e,i){kV.call(this,n,t,e,i)}function w_(n,t){dM.call(this,Hit+n+Vet+t)}function d_(n,t){return n.jk().wi().ri(n,t)}function g_(n,t){return n.jk().wi().ti(n,t)}function p_(n,t){return tJ(n),xA(n)===xA(t)}function m_(n,t){return tJ(n),xA(n)===xA(t)}function v_(n,t){return n.b.Bd(new QP(n,t))}function k_(n,t){return n.b.Bd(new JP(n,t))}function y_(n,t){return n.b.Bd(new YP(n,t))}function M_(n,t){return n.e=uG(n.d.Kb(t),159)}function T_(n,t,e){return n.lastIndexOf(t,e)}function j_(n,t,e){return ugn(n[t.a],n[e.a])}function E_(n,t){return kfn(t,(jYn(),Oyt),n)}function S_(n,t){return d$(t.a.d.p,n.a.d.p)}function P_(n,t){return d$(n.a.d.p,t.a.d.p)}function C_(n,t){return ugn(n.c-n.s,t.c-t.s)}function I_(n,t){return ugn(n.b.e.a,t.b.e.a)}function O_(n,t){return ugn(n.c.e.a,t.c.e.a)}function A_(n){return n.c?Ten(n.c.a,n,0):-1}function L_(n){return n==rRt||n==aRt||n==cRt}function N_(n,t){this.c=n,QV.call(this,n,t)}function $_(n,t,e){this.a=n,Qx.call(this,t,e)}function D_(n){this.c=n,rL.call(this,YZn,0)}function x_(n,t,e){this.c=t,this.b=e,this.a=n}function R_(n){PU(),this.d=n,this.a=new ND}function K_(n){sB(),this.a=(hZ(),new nT(n))}function F_(n,t){hN(n.f)?JDn(n,t):wCn(n,t)}function __(n,t){sG.call(this,n,n.length,t)}function B_(n,t){Nut||t&&(n.d=t)}function H_(n,t){return F$(t,15)&&G_n(n.c,t)}function U_(n,t,e){return uG(n.c,71).Wk(t,e)}function G_(n,t,e){return uG(n.c,71).Xk(t,e)}function q_(n,t,e){return uK(n,uG(t,343),e)}function X_(n,t,e){return sK(n,uG(t,343),e)}function z_(n,t,e){return yPn(n,uG(t,343),e)}function V_(n,t,e){return FCn(n,uG(t,343),e)}function W_(n,t){return null==t?null:Xwn(n.b,t)}function Q_(n){return FA(n)?(tJ(n),n):n.ue()}function J_(n){return!isNaN(n)&&!isFinite(n)}function Y_(n){O$(this),BY(this),Qon(this,n)}function Z_(n){IN(this),dG(this.c,0,n.Pc())}function nB(n,t,e){this.a=n,this.b=t,this.c=e}function tB(n,t,e){this.a=n,this.b=t,this.c=e}function eB(n,t,e){this.d=n,this.b=e,this.a=t}function iB(n){this.a=n,bS(),Bsn(Date.now())}function rB(n){LQ(n.a),Lnn(n.c,n.b),n.b=null}function cB(){cB=E,out=new K,uut=new F}function aB(){aB=E,DFt=Inn(dat,EZn,1,0,5,1)}function oB(){oB=E,X_t=Inn(dat,EZn,1,0,5,1)}function uB(){uB=E,z_t=Inn(dat,EZn,1,0,5,1)}function sB(){sB=E,new jv((hZ(),hZ(),zot))}function hB(n){return Rtn(),Fcn((xtn(),Mut),n)}function fB(n){return ybn(),Fcn((bnn(),xut),n)}function lB(n){return _kn(),Fcn((k8(),Jut),n)}function bB(n){return Xin(),Fcn((y8(),tst),n)}function wB(n){return W_n(),Fcn((uhn(),kst),n)}function dB(n){return Yrn(),Fcn((fnn(),Cst),n)}function gB(n){return Ktn(),Fcn((hnn(),Dst),n)}function pB(n){return Yen(),Fcn((lnn(),Bst),n)}function mB(n){return JYn(),Fcn((fL(),fht),n)}function vB(n){return ehn(),Fcn((_tn(),vht),n)}function kB(n){return vyn(),Fcn((Htn(),Eht),n)}function yB(n){return myn(),Fcn((Btn(),Rht),n)}function MB(n){return BS(),Fcn((r6(),_ht),n)}function TB(n){return zin(),Fcn((M8(),vft),n)}function jB(n){return Jen(),Fcn((wnn(),vlt),n)}function EB(n){return uIn(),Fcn(($in(),Ilt),n)}function SB(n){return Xhn(),Fcn((Gtn(),Glt),n)}function PB(n){return Uvn(),Fcn((Utn(),ibt),n)}function CB(n,t){if(!n)throw hv(new vM(t))}function IB(n){if(!n)throw hv(new kM(PZn))}function OB(n,t){if(n!=t)throw hv(new Fv)}function AB(n,t,e){this.a=n,this.b=t,this.c=e}function LB(n,t,e){this.a=n,this.b=t,this.c=e}function NB(n,t,e){this.a=n,this.b=t,this.c=e}function $B(n,t,e){this.b=n,this.a=t,this.c=e}function DB(n,t,e){this.b=n,this.c=t,this.a=e}function xB(n,t,e){this.a=n,this.b=t,this.c=e}function RB(n,t,e){this.e=t,this.b=n,this.d=e}function KB(n,t,e){this.b=n,this.a=t,this.c=e}function FB(n,t,e){return vS(),n.a.Yd(t,e),t}function _B(n){var t;return(t=new yn).e=n,t}function BB(n){var t;return(t=new pk).b=n,t}function HB(){HB=E,Nbt=new $e,$bt=new De}function UB(){UB=E,Jwt=new ui,Qwt=new si}function GB(){GB=E,rdt=new mr,cdt=new vr}function qB(n){return gon(),Fcn((X7(),Cdt),n)}function XB(n){return zYn(),Fcn((lL(),_wt),n)}function zB(n){return Ghn(),Fcn((Xtn(),Wwt),n)}function VB(n){return qhn(),Fcn((qtn(),ldt),n)}function WB(n){return gPn(),Fcn((Din(),vdt),n)}function QB(n){return h_n(),Fcn((osn(),Kdt),n)}function JB(n){return vAn(),Fcn((ecn(),zdt),n)}function YB(n){return H7(),Fcn((S8(),Jdt),n)}function ZB(n){return jan(),Fcn((U7(),egt),n)}function nH(n){return ran(),Fcn((G7(),ogt),n)}function tH(n){return kvn(),Fcn((xin(),wgt),n)}function eH(n){return Vin(),Fcn((E8(),mgt),n)}function iH(n){return RIn(),Fcn((ccn(),Jgt),n)}function rH(n){return r_n(),Fcn((Efn(),spt),n)}function cH(n){return ihn(),Fcn((V7(),wpt),n)}function aH(n){return Zen(),Fcn((z7(),vpt),n)}function oH(n){return Y6(),Fcn((L8(),Tpt),n)}function uH(n){return ESn(),Fcn((rcn(),Ugt),n)}function sH(n){return Pfn(),Fcn((q7(),Tgt),n)}function hH(n){return tOn(),Fcn((icn(),Agt),n)}function fH(n){return Wtn(),Fcn((j8(),Dgt),n)}function lH(n){return Gpn(),Fcn((Kin(),$mt),n)}function bH(n){return MKn(),Fcn((chn(),ojt),n)}function wH(n){return Cwn(),Fcn((W7(),ljt),n)}function dH(n){return Yyn(),Fcn((ztn(),mjt),n)}function gH(n){return pyn(),Fcn((Rin(),Ejt),n)}function pH(n){return THn(),Fcn((Sfn(),Rjt),n)}function mH(n){return yvn(),Fcn((Vtn(),Ujt),n)}function vH(n){return nin(),Fcn((P8(),zjt),n)}function kH(n){return can(),Fcn((Y7(),Yjt),n)}function yH(n){return isn(),Fcn((Q7(),iEt),n)}function MH(n){return Sln(),Fcn((J7(),uEt),n)}function TH(n){return kbn(),Fcn((nnn(),bEt),n)}function jH(n){return ian(),Fcn((Z7(),mEt),n)}function EH(n){return zhn(),Fcn((tnn(),TEt),n)}function SH(n){return ean(),Fcn((snn(),GEt),n)}function PH(n){return Z6(),Fcn((C8(),nSt),n)}function CH(n){return b0(),Fcn((I8(),bSt),n)}function IH(n){return w0(),Fcn((O8(),pSt),n)}function OH(n){return _7(),Fcn((A8(),RSt),n)}function AH(n){return l0(),Fcn((N8(),XSt),n)}function LH(n){return Cjn(),Fcn((sen(),YSt),n)}function NH(n){return OHn(),Fcn((bL(),bPt),n)}function $H(n){return Pln(),Fcn((enn(),mPt),n)}function DH(n){return mbn(),Fcn((uen(),KCt),n)}function xH(n){return i3(),Fcn((D8(),HCt),n)}function RH(n){return pon(),Fcn((x8(),JCt),n)}function KH(n){return zPn(),Fcn((Fin(),rIt),n)}function FH(n){return vbn(),Fcn((inn(),bIt),n)}function _H(n){return Ptn(),Fcn(($8(),uIt),n)}function BH(n){return dTn(),Fcn((oen(),tOt),n)}function HH(n){return esn(),Fcn((rnn(),aOt),n)}function UH(n){return Jmn(),Fcn((cnn(),fOt),n)}function GH(n){return Zyn(),Fcn((ann(),gOt),n)}function qH(n){return Bgn(),Fcn((onn(),LOt),n)}function XH(n){return a9(),Fcn((R8(),jAt),n)}function zH(n){return Aun(),Fcn((T8(),Lbt),n)}function VH(n){return zIn(),Fcn((acn(),mbt),n)}function WH(n){return den(),Fcn((unn(),IAt),n)}function QH(n){return rhn(),Fcn((K8(),NAt),n)}function JH(n){return _Rn(),Fcn((_in(),BAt),n)}function YH(n){return nP(),Fcn(($6(),WAt),n)}function ZH(n){return Rdn(),Fcn((gnn(),XAt),n)}function nU(n){return tP(),Fcn((D6(),YAt),n)}function tU(n){return B7(),Fcn((F8(),eLt),n)}function eU(n){return pOn(),Fcn((Bin(),sLt),n)}function iU(n){return eP(),Fcn((x6(),XLt),n)}function rU(n){return Vhn(),Fcn((_8(),QLt),n)}function cU(n){return Rkn(),Fcn((Uin(),bNt),n)}function aU(n){return lAn(),Fcn((csn(),TNt),n)}function oU(n){return nMn(),Fcn((ocn(),DNt),n)}function uU(n){return ZSn(),Fcn((ucn(),t$t),n)}function sU(n){return xdn(),Fcn((Hin(),ext),n)}function hU(n){return Zrn(),Fcn((pnn(),oxt),n)}function fU(n){return _gn(),Fcn((hen(),bxt),n)}function lU(n){return RCn(),Fcn((scn(),yxt),n)}function bU(n){return Own(),Fcn((dnn(),Nxt),n)}function wU(n){return Ajn(),Fcn((fen(),Fxt),n)}function dU(n){return VDn(),Fcn((ohn(),Qxt),n)}function gU(n){return Vkn(),Fcn((Gin(),iRt),n)}function pU(n){return $Pn(),Fcn((hcn(),fRt),n)}function mU(n){return eNn(),Fcn((fcn(),vRt),n)}function vU(n){return KQn(),Fcn((qin(),HRt),n)}function kU(n){return Qmn(),Fcn((len(),ZRt),n)}function yU(n){return oUn(),Fcn((ahn(),hKt),n)}function MU(n){return Iwn(),Fcn((mnn(),dKt),n)}function TU(n,t){return tJ(n),n+(tJ(t),t)}function jU(n){return CU(),Fcn((B8(),vKt),n)}function EU(n){return qpn(),Fcn((ben(),EKt),n)}function SU(n){return Eln(),Fcn((wen(),LKt),n)}function PU(){PU=E,KQn(),zEt=_Rt,VEt=kRt}function CU(){CU=E,gKt=new Pq,pKt=new gV}function IU(n){return!n.e&&(n.e=new Zm),n.e}function OU(n,t){this.c=n,this.a=t,this.b=t-n}function AU(n,t,e){this.a=n,this.b=t,this.c=e}function LU(n,t,e){this.a=n,this.b=t,this.c=e}function NU(n,t,e){this.a=n,this.b=t,this.c=e}function $U(n,t,e){this.a=n,this.b=t,this.c=e}function DU(n,t,e){this.a=n,this.b=t,this.c=e}function xU(n,t,e){this.a=n,this.b=t,this.c=e}function RU(n,t,e){this.e=n,this.a=t,this.c=e}function KU(n,t,e){ZN(),_1.call(this,n,t,e)}function FU(n,t,e){ZN(),CQ.call(this,n,t,e)}function _U(n,t,e){ZN(),CQ.call(this,n,t,e)}function BU(n,t,e){ZN(),CQ.call(this,n,t,e)}function HU(n,t,e){ZN(),FU.call(this,n,t,e)}function UU(n,t,e){ZN(),FU.call(this,n,t,e)}function GU(n,t,e){ZN(),UU.call(this,n,t,e)}function qU(n,t,e){ZN(),_U.call(this,n,t,e)}function XU(n,t,e){ZN(),BU.call(this,n,t,e)}function zU(n){lX.call(this,n.d,n.c,n.a,n.b)}function VU(n){lX.call(this,n.d,n.c,n.a,n.b)}function WU(n){this.d=n,Cw(this),this.b=Ez(n.d)}function QU(n){return rDn(),Fcn((asn(),SFt),n)}function JU(n,t){return WW(n),WW(t),new jE(n,t)}function YU(n,t){return WW(n),WW(t),new WG(n,t)}function ZU(n,t){return WW(n),WW(t),new QG(n,t)}function nG(n,t){return WW(n),WW(t),new DE(n,t)}function tG(n){return MK(0!=n.b),Lrn(n,n.a.a)}function eG(n){return MK(0!=n.b),Lrn(n,n.c.b)}function iG(n){return!n.c&&(n.c=new Ks),n.c}function rG(n){var t;return cin(t=new Zm,n),t}function cG(n){var t;return cin(t=new ek,n),t}function aG(n){var t;return Fon(t=new rk,n),t}function oG(n){var t;return Fon(t=new lS,n),t}function uG(n,t){return Fq(null==n||Eyn(n,t)),n}function sG(n,t,e){_z.call(this,t,e),this.a=n}function hG(n,t){this.c=n,this.b=t,this.a=!1}function fG(){this.a=";,;",this.b="",this.c=""}function lG(n,t,e){this.b=n,eL.call(this,t,e)}function bG(n,t,e){this.c=n,VP.call(this,t,e)}function wG(n,t,e){FC.call(this,n,t),this.b=e}function dG(n,t,e){b$n(e,0,n,t,e.length,!1)}function gG(n,t,e,i,r){n.b=t,n.c=e,n.d=i,n.a=r}function pG(n,t,e,i,r){n.d=t,n.c=e,n.a=i,n.b=r}function mG(n,t){t&&(n.b=t,n.a=(GQ(t),t.a))}function vG(n,t){if(!n)throw hv(new vM(t))}function kG(n,t){if(!n)throw hv(new kM(t))}function yG(n,t){if(!n)throw hv(new gM(t))}function MG(n,t){return YS(),d$(n.d.p,t.d.p)}function TG(n,t){return tcn(),ugn(n.e.b,t.e.b)}function jG(n,t){return tcn(),ugn(n.e.a,t.e.a)}function EG(n,t){return d$(wq(n.d),wq(t.d))}function SG(n,t){return t&&$Q(n,t.d)?t:null}function PG(n,t){return t==(KQn(),_Rt)?n.c:n.d}function CG(n){return Esn(LV(_L(n)?Gsn(n):n))}function IG(n){return new MO(n.c+n.b,n.d+n.a)}function OG(n){return null!=n&&!mpn(n,n_t,t_t)}function AG(n,t){return(ldn(n)<<4|ldn(t))&D1n}function LG(n,t,e,i,r){n.c=t,n.d=e,n.b=i,n.a=r}function NG(n){var t,e;t=n.b,e=n.c,n.b=e,n.c=t}function $G(n){var t,e;e=n.d,t=n.a,n.d=t,n.a=e}function DG(n,t){var e;return e=n.c,Jan(n,t),e}function xG(n,t){return n.g=t<0?-1:t,n}function RG(n,t){return Brn(n),n.a*=t,n.b*=t,n}function KG(n,t,e){Orn.call(this,t,e),this.d=n}function FG(n,t,e){LA.call(this,n,t),this.c=e}function _G(n,t,e){LA.call(this,n,t),this.c=e}function BG(n){uB(),ps.call(this),this.ci(n)}function HG(){N7(),OQ.call(this,(MP(),l_t))}function UG(n){return QYn(),new IX(0,n)}function GG(){GG=E,hZ(),CBt=new Xw(bct)}function qG(){qG=E,new Gyn((my(),Tat),(py(),Mat))}function XG(){XG=E,bot=Inn(dot,zZn,17,256,0,1)}function zG(){this.b=uM(pK(Jkn((cGn(),Bft))))}function VG(n){this.b=n,this.a=Mz(this.b.a).Od()}function WG(n,t){this.b=n,this.a=t,Ff.call(this)}function QG(n,t){this.a=n,this.b=t,Ff.call(this)}function JG(n,t,e){this.a=n,vL.call(this,t,e)}function YG(n,t,e){this.a=n,vL.call(this,t,e)}function ZG(n,t,e){nrn(n,t,new QW(e))}function nq(n,t,e){var i;return i=n[t],n[t]=e,i}function tq(n){return Ltn(n.slice(),n)}function eq(n){var t;return t=n.n,n.a.b+t.d+t.a}function iq(n){var t;return t=n.n,n.e.b+t.d+t.a}function rq(n){var t;return t=n.n,n.e.a+t.b+t.c}function cq(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function aq(n,t){return s8(n,t,n.c.b,n.c),!0}function oq(n){return n.a?n.a:sY(n)}function uq(n){return lZ(),bIn(n)==R0(gIn(n))}function sq(n){return lZ(),gIn(n)==R0(bIn(n))}function hq(n,t){return CEn(n,new FC(t.a,t.b))}function fq(n,t){return TJ(),IMn(n,t),new bJ(n,t)}function lq(n,t){return n.c=t)throw hv(new Ik)}function Wz(n,t){return cdn(n,(tJ(t),new ud(t)))}function Qz(n,t){return cdn(n,(tJ(t),new sd(t)))}function Jz(n,t,e){return BYn(n,uG(t,12),uG(e,12))}function Yz(n){return Lun(),0!=uG(n,12).g.c.length}function Zz(n){return Lun(),0!=uG(n,12).e.c.length}function nV(n,t){return Pun(),ugn(t.a.o.a,n.a.o.a)}function tV(n,t){0!=(t.Bb&Qtt)&&!n.a.o&&(n.a.o=t)}function eV(n,t){t.Ug("General 'Rotator",1),lQn(n)}function iV(n,t,e){t.qf(e,uM(pK(cQ(n.b,e)))*n.a)}function rV(n,t,e){return l_n(),qun(n,t)&&qun(n,e)}function cV(n){return eNn(),!n.Hc(wRt)&&!n.Hc(gRt)}function aV(n){return n.e?T7(n.e):null}function oV(n){return _L(n)?""+n:K_n(n)}function uV(n){var t;for(t=n;t.f;)t=t.f;return t}function sV(n,t,e){return uQ(t,0,nX(t[0],e[0])),t}function hV(n,t,e,i){var r;(r=n.i).i=t,r.a=e,r.b=i}function fV(n,t,e,i){MD.call(this,n,t,e),this.b=i}function lV(n,t,e,i,r){btn.call(this,n,t,e,i,r,-1)}function bV(n,t,e,i,r){wtn.call(this,n,t,e,i,r,-1)}function wV(n,t,e,i){FG.call(this,n,t,e),this.b=i}function dV(n){lA.call(this,n,!1),this.a=!1}function gV(){BO.call(this,"LOOKAHEAD_LAYOUT",1)}function pV(n){this.b=n,Zx.call(this,n),qD(this)}function mV(n){this.b=n,tR.call(this,n),XD(this)}function vV(n,t,e){this.a=n,i_.call(this,t,e,5,6)}function kV(n,t,e,i){this.b=n,MD.call(this,t,e,i)}function yV(n,t){this.b=n,fb.call(this,n.b),this.a=t}function MV(n){this.a=Fyn(n.a),this.b=new Z_(n.b)}function TV(n,t){ZW(),UE.call(this,n,Dwn(new IM(t)))}function jV(n,t){return QYn(),new PQ(n,t,0)}function EV(n,t){return QYn(),new PQ(6,n,t)}function SV(n,t){for(tJ(t);n.Ob();)t.Cd(n.Pb())}function PV(n,t){return RA(t)?AZ(n,t):!!FX(n.f,t)}function CV(n,t){return t.Vh()?mwn(n.b,uG(t,54)):t}function IV(n,t){return m_(n.substr(0,t.length),t)}function OV(n){return new Fz(new YD(n.a.length,n.a))}function AV(n){return new MO(n.c+n.b/2,n.d+n.a/2)}function LV(n){return p$(~n.l&f0n,~n.m&f0n,~n.h&l0n)}function NV(n){return typeof n===wZn||typeof n===mZn}function $V(n){n.f=new nN(n),n.i=new tN(n),++n.g}function DV(n){if(!n)throw hv(new Bv);return n.d}function xV(n){var t;return MK(null!=(t=Rfn(n))),t}function RV(n){var t;return MK(null!=(t=sgn(n))),t}function KV(n,t){var e;return e7(t,e=n.a.gc()),e-t}function FV(n,t){return null==n.a.zc(t,n)}function _V(n,t){return null==n.a.zc(t,(qx(),tot))}function BV(n){return new fX(null,oW(n,n.length))}function HV(n,t,e){return HXn(n,uG(t,42),uG(e,176))}function UV(n,t,e){return Mon(n.a,t),nq(n.b,t.g,e)}function GV(n,t,e){Vz(e,n.a.c.length),Y8(n.a,e,t)}function qV(n,t,e,i){ubn(t,e,n.length),XV(n,t,e,i)}function XV(n,t,e,i){var r;for(r=t;r0?e.Math.log(n/t):-100}function rW(n,t){return dwn(n,t)<0?-1:dwn(n,t)>0?1:0}function cW(n,t){J$(n,F$(t,160)?t:uG(t,2036).Rl())}function aW(n,t){if(null==n)throw hv(new MM(t))}function oW(n,t){return $rn(t,n.length),new Sq(n,t)}function uW(n,t){return!!t&&Qon(n,t)}function sW(){return Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])}function hW(n){return 0==n.e?n:new VV(-n.e,n.d,n.a)}function fW(n,t){return ugn(n.c.c+n.c.b,t.c.c+t.c.b)}function lW(n,t){s8(n.d,t,n.b.b,n.b),++n.a,n.c=null}function bW(n,t){return n.c?bW(n.c,t):kD(n.b,t),n}function wW(n,t,e){var i;return i=uin(n,t),W5(n,t,e),i}function dW(n,t,e){var i;for(i=0;i=n.g}function uQ(n,t,e){return yK(null==e||aGn(n,e)),n[t]=e}function sQ(n,t){return s3(t,n.length+1),n.substr(t)}function hQ(n,t){for(tJ(t);n.c=n?new mS:ton(n-1)}function HQ(n){return!n.a&&n.c?n.c.b:n.a}function UQ(n){return F$(n,616)?n:new e0(n)}function GQ(n){n.c?GQ(n.c):(vgn(n),n.d=!0)}function qQ(n){n.c?n.c.$e():(n.d=!0,uKn(n))}function XQ(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function zQ(n){return n.c.i.c==n.d.i.c}function VQ(n,t){var e;(e=n.Ih(t))>=0?n.ki(e):zLn(n,t)}function WQ(n,t){n.c<0||n.b.b0;)n=n<<1|(n<0?1:0);return n}function CJ(n,t){var e;return e=new bQ(n),mv(t.c,e),e}function IJ(n,t){n.u.Hc((eNn(),wRt))&&vNn(n,t),knn(n,t)}function OJ(n,t){return xA(n)===xA(t)||null!=n&&udn(n,t)}function AJ(n,t){return RX(n.a,t)?n.b[uG(t,22).g]:null}function LJ(){return BS(),Uhn(cT(oft,1),p1n,488,0,[Kht])}function NJ(){return nP(),Uhn(cT(JAt,1),p1n,489,0,[zAt])}function $J(){return tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])}function DJ(){return eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])}function xJ(n){return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n}function RJ(n){return!n.c&&(n.c=new fV(wFt,n,9,9)),n.c}function KJ(n){return!n.c&&(n.c=new f_(cFt,n,5,8)),n.c}function FJ(n){return!n.b&&(n.b=new f_(cFt,n,4,7)),n.b}function _J(n){return n.j.c.length=0,oY(n.c),ZF(n.a),n}function BJ(n){return n.e==wct&&kw(n,akn(n.g,n.b)),n.e}function HJ(n){return n.f==wct&&Mw(n,tEn(n.g,n.b)),n.f}function UJ(n,t,e,i){return Dsn(n,t,e,!1),pdn(n,i),n}function GJ(n,t){this.b=n,QV.call(this,n,t),qD(this)}function qJ(n,t){this.b=n,N_.call(this,n,t),XD(this)}function XJ(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function zJ(n,t){this.b=n,this.c=t,this.a=new fS(this.b)}function VJ(n,t){return s3(t,n.length),n.charCodeAt(t)}function WJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function QJ(n,t){jgn(n,uM($cn(t,"x")),uM($cn(t,"y")))}function JJ(n,t){return vgn(n),new fX(n,new ien(t,n.a))}function YJ(n,t){return vgn(n),new fX(n,new f7(t,n.a))}function ZJ(n,t){return vgn(n),new IK(n,new s7(t,n.a))}function nY(n,t){return vgn(n),new OK(n,new h7(t,n.a))}function tY(n,t){return new MZ(uG(WW(n),50),uG(WW(t),50))}function eY(n,t){return ugn(n.d.c+n.d.b/2,t.d.c+t.d.b/2)}function iY(n,t,e){e.a?Mcn(n,t.b-n.f/2):ycn(n,t.a-n.g/2)}function rY(n,t){return ugn(n.g.c+n.g.b/2,t.g.c+t.g.b/2)}function cY(n,t){return qS(),ugn((tJ(n),n),(tJ(t),t))}function aY(n){return null!=n&&ZE(UFt,n.toLowerCase())}function oY(n){var t;for(t=n.Kc();t.Ob();)t.Pb(),t.Qb()}function uY(n){var t;return!(t=n.b)&&(n.b=t=new Yl(n)),t}function sY(n){return con(n)||null}function hY(n,t){var e,i;return(e=n/t)>(i=t0(e))&&++i,i}function fY(n,t,e){var i;(i=uG(n.d.Kb(e),159))&&i.Nb(t)}function lY(n,t,e){KXn(n.a,e),jhn(e),EDn(n.b,e),Tzn(t,e)}function bY(n,t,e,i){this.a=n,this.c=t,this.b=e,this.d=i}function wY(n,t,e,i){this.c=n,this.b=t,this.a=e,this.d=i}function dY(n,t,e,i){this.c=n,this.b=t,this.d=e,this.a=i}function gY(n,t,e,i){this.c=n,this.d=t,this.b=e,this.a=i}function pY(n,t,e,i){this.a=n,this.d=t,this.c=e,this.b=i}function mY(n,t,e,i){this.a=n,this.e=t,this.d=e,this.c=i}function vY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function kY(n,t,e){this.a=L1n,this.d=n,this.b=t,this.c=e}function yY(n,t,e,i){_E.call(this,n,t),this.a=e,this.b=i}function MY(n,t){this.d=(tJ(n),n),this.a=16449,this.c=t}function TY(n){this.a=new Zm,this.e=Inn(YHt,zZn,53,n,0,2)}function jY(n){n.Ug("No crossing minimization",1),n.Vg()}function EY(){Ky.call(this,"There is no more element.")}function SY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function PY(n,t,e,i){this.a=n,this.b=t,this.c=e,this.d=i}function CY(n,t,e,i){this.e=n,this.a=t,this.c=e,this.d=i}function IY(n,t,e,i){this.a=n,this.c=t,this.d=e,this.b=i}function OY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function AY(n,t,e,i){ZN(),l7.call(this,t,e,i),this.a=n}function LY(n,t,e){var i;return i=eJn(n),t.ti(e,i)}function NY(n){var t;return Urn(t=new ev,n),t}function $Y(n){var t;return MIn(t=new ev,n),t}function DY(n,t){return Qun(t,cQ(n.f,t)),null}function xY(n){return!n.b&&(n.b=new fV(aFt,n,12,3)),n.b}function RY(n){return Fq(null==n||NV(n)&&!(n.Tm===j)),n}function KY(n){return n.n&&(n.e!==E1n&&n.je(),n.j=null),n}function FY(n){if(bpn(n.d),n.d.d!=n.c)throw hv(new Fv)}function _Y(n){return MK(n.b0&&XEn(this)}function UY(n,t){this.a=n,CK.call(this,n,uG(n.d,15).fd(t))}function GY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function qY(n,t){return ugn(EX(n)*jX(n),EX(t)*jX(t))}function XY(n){return BNn(n)&&oM(gK(zDn(n,(jYn(),hMt))))}function zY(n,t){return UNn(n,uG(oIn(t,(jYn(),UMt)),17),t)}function VY(n,t){return uG(oIn(n,(GYn(),Vpt)),15).Fc(t),t}function WY(n,t){return n.b=t.b,n.c=t.c,n.d=t.d,n.a=t.a,n}function QY(n,t,e,i){this.b=n,this.c=i,rL.call(this,t,e)}function JY(n,t,e){n.i=0,n.e=0,t!=e&&tln(n,t,e)}function YY(n,t,e){n.i=0,n.e=0,t!=e&&eln(n,t,e)}function ZY(n,t,e){return JS(),opn(uG(cQ(n.e,t),529),e)}function nZ(n){return n.f||(n.f=new OE(n,n.c))}function tZ(n,t){return Hwn(n.j,t.s,t.c)+Hwn(t.e,n.s,n.c)}function eZ(n,t){n.e&&!n.e.a&&(iv(n.e,t),eZ(n.e,t))}function iZ(n,t){n.d&&!n.d.a&&(iv(n.d,t),iZ(n.d,t))}function rZ(n,t){return-ugn(EX(n)*jX(n),EX(t)*jX(t))}function cZ(n){return uG(n.ld(),149).Pg()+":"+cpn(n.md())}function aZ(){HIn(this,new Fl),this.wb=(tQ(),M_t),vj()}function oZ(n){this.b=new Zm,Ohn(this.b,this.b),this.a=n}function uZ(n,t){new lS,this.a=new Uk,this.b=n,this.c=t}function sZ(){sZ=E,Jot=new N,Yot=new N,Zot=new $}function hZ(){hZ=E,zot=new C,Vot=new O,Wot=new A}function fZ(){fZ=E,Gut=new dn,Xut=new tz,qut=new gn}function lZ(){lZ=E,aft=new Zm,cft=new Ym,rft=new Zm}function bZ(n,t){if(null==n)throw hv(new MM(t));return n}function wZ(n){return!n.a&&(n.a=new fV(bFt,n,10,11)),n.a}function dZ(n){return!n.q&&(n.q=new fV(p_t,n,11,10)),n.q}function gZ(n){return!n.s&&(n.s=new fV(o_t,n,21,17)),n.s}function pZ(n){return WW(n),KMn(new Fz(ix(n.a.Kc(),new h)))}function mZ(n,t){return Tbn(n),Tbn(t),cM(uG(n,22),uG(t,22))}function vZ(n,t,e){nrn(n,t,new Pb(Q_(e)))}function kZ(n,t,e,i,r,c){wtn.call(this,n,t,e,i,r,c?-2:-1)}function yZ(n,t,e,i){LA.call(this,t,e),this.b=n,this.a=i}function MZ(n,t){Sy.call(this,new Hz(n)),this.a=n,this.b=t}function TZ(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function jZ(n){var t;GB(),(t=uG(n.g,10)).n.a=n.d.c+t.d.b}function EZ(){var n,t;EZ=E,t=!ovn(),n=new v,_at=t?new m:n}function SZ(n){return hZ(),F$(n,59)?new eT(n):new gx(n)}function PZ(n){return F$(n,16)?new oX(uG(n,16)):cG(n.Kc())}function CZ(n){return new WD(n,n.e.Rd().gc()*n.c.Rd().gc())}function IZ(n){return new QD(n,n.e.Rd().gc()*n.c.Rd().gc())}function OZ(n){return n&&n.hashCode?n.hashCode():xx(n)}function AZ(n,t){return null==t?!!FX(n.f,null):_X(n.i,t)}function LZ(n,t){var e;return(e=Q$(n.a,t))&&(t.d=null),e}function NZ(n,t,e){return!!n.f&&n.f.ef(t,e)}function $Z(n,t,e,i){uQ(n.c[t.g],e.g,i),uQ(n.c[e.g],t.g,i)}function DZ(n,t,e,i){uQ(n.c[t.g],t.g,e),uQ(n.b[t.g],t.g,i)}function xZ(n,t,e){return uM(pK(e.a))<=n&&uM(pK(e.b))>=t}function RZ(n,t){this.g=n,this.d=Uhn(cT(pbt,1),e6n,10,0,[t])}function KZ(n){this.c=n,this.b=new Hj(uG(WW(new pn),50))}function FZ(n){this.c=n,this.b=new Hj(uG(WW(new jt),50))}function _Z(n){this.b=n,this.a=new Hj(uG(WW(new nt),50))}function BZ(){this.b=new ek,this.d=new lS,this.e=new Ok}function HZ(){this.c=new sj,this.d=new sj,this.e=new sj}function UZ(){this.a=new Uk,this.b=(man(3,g1n),new R7(3))}function GZ(n,t){this.e=n,this.a=dat,this.b=$Bn(t),this.c=t}function qZ(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function XZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function zZ(n,t,e,i,r,c){this.a=n,Ran.call(this,t,e,i,r,c)}function VZ(n,t,e,i,r,c,a){return new i8(n.e,t,e,i,r,c,a)}function WZ(n,t,e){return e>=0&&m_(n.substr(e,t.length),t)}function QZ(n,t){return F$(t,149)&&m_(n.b,uG(t,149).Pg())}function JZ(n,t){return n.a?t.Gh().Kc():uG(t.Gh(),71).Ii()}function YZ(n,t){var e;return w8(e=n.b.Qc(t),n.b.gc()),e}function ZZ(n,t){if(null==n)throw hv(new MM(t));return n}function n1(n){return n.u||(y9(n),n.u=new aF(n,n)),n.u}function t1(n){this.a=(hZ(),F$(n,59)?new eT(n):new gx(n))}function e1(n){return uG(Lsn(n,16),29)||n.ii()}function i1(n,t){var e;return e=Ij(n.Rm),null==t?e:e+": "+t}function r1(n,t,e){return Knn(t,e,n.length),n.substr(t,e-t)}function c1(n,t){HF.call(this),Qrn(this),this.a=n,this.c=t}function a1(n){n&&i1(n,n.ie()),String.fromCharCode(10)}function o1(n){XM(),e.setTimeout((function(){throw n}),0)}function u1(){return _kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])}function s1(){return Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])}function h1(){return zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])}function f1(){return Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])}function l1(){return Wtn(),Uhn(cT(Hgt,1),p1n,487,0,[Ngt,Lgt])}function b1(){return Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])}function w1(){return H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])}function d1(){return nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])}function g1(){return Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])}function p1(){return b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])}function m1(){return w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])}function v1(){return _7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])}function k1(){return Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])}function y1(){return a9(),Uhn(cT(CAt,1),p1n,490,0,[yAt,MAt])}function M1(){return rhn(),Uhn(cT($At,1),p1n,491,0,[OAt,AAt])}function T1(){return i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])}function j1(){return Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])}function E1(){return l0(),Uhn(cT(JSt,1),p1n,464,0,[USt,GSt])}function S1(){return pon(),Uhn(cT(iIt,1),p1n,500,0,[VCt,WCt])}function P1(){return B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])}function C1(){return Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])}function I1(){return CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])}function O1(n,t,e,i){return e>=0?n.Uh(t,e,i):n.Ch(null,e,i)}function A1(n){return 0==n.b.b?n.a.sf():tG(n.b)}function L1(n){if(5!=n.p)throw hv(new xv);return pz(n.f)}function N1(n){if(5!=n.p)throw hv(new xv);return pz(n.k)}function $1(n){return xA(n.a)===xA((Oun(),Q_t))&&eVn(n),n.a}function D1(n,t){n.b=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function x1(n,t){n.c=t,n.c>0&&n.b>0&&(n.g=mX(n.c,n.b,n.a))}function R1(n,t){nw(this,new MO(n.a,n.b)),tw(this,oG(t))}function K1(){Py.call(this,new sS(orn(12))),FD(!0),this.a=2}function F1(n,t,e){QYn(),Qm.call(this,n),this.b=t,this.a=e}function _1(n,t,e){ZN(),Hm.call(this,t),this.a=n,this.b=e}function B1(n){var t;t=n.c.d.b,n.b=t,n.a=n.c.d,t.a=n.c.d.b=n}function H1(n){return 0==n.b?null:(MK(0!=n.b),Lrn(n,n.a.a))}function U1(n,t){return null==t?DA(FX(n.f,null)):_P(n.i,t)}function G1(n,t,e,i,r){return new AOn(n,(Rtn(),vut),t,e,i,r)}function q1(n,t){return V5(t),Jcn(n,Inn(YHt,W1n,28,t,15,1),t)}function X1(n,t){return bZ(n,"set1"),bZ(t,"set2"),new GE(n,t)}function z1(n,t){var e=Rat[n.charCodeAt(0)];return null==e?n:e}function V1(n,t){var e;return pWn(n,t,e=new B),e.d}function W1(n,t,e,i){var r;r=new AF,t.a[e.g]=r,UV(n.b,i,r)}function Q1(n,t){return JF(BR(Lcn(n.f,t)),n.f.d)}function J1(n){Lan(n.a),zN(n.a),Apn(new Ad(n.a))}function Y1(n,t){iBn(n,!0),Prn(n.e.Rf(),new DB(n,!0,t))}function Z1(n,t){return lZ(),n==R0(bIn(t))||n==R0(gIn(t))}function n0(n,t){return tcn(),uG(oIn(t,(QGn(),ACt)),17).a==n}function t0(n){return 0|Math.max(Math.min(n,vZn),-2147483648)}function e0(n){this.a=uG(WW(n),277),this.b=(hZ(),new mx(n))}function i0(n,t,e){this.i=new Zm,this.b=n,this.g=t,this.a=e}function r0(n,t,e){this.a=new Zm,this.e=n,this.f=t,this.c=e}function c0(n,t,e){this.c=new Zm,this.e=n,this.f=t,this.b=e}function a0(n){HF.call(this),Qrn(this),this.a=n,this.c=!0}function o0(n){function t(){}return t.prototype=n||{},new t}function u0(n){if(n.Ae())return null;var t=n.n;return sZn[t]}function s0(n){return n.Db>>16!=3?null:uG(n.Cb,27)}function h0(n){return n.Db>>16!=9?null:uG(n.Cb,27)}function f0(n){return n.Db>>16!=6?null:uG(n.Cb,74)}function l0(){l0=E,USt=new XI(z2n,0),GSt=new XI(V2n,1)}function b0(){b0=E,fSt=new OI(V2n,0),hSt=new OI(z2n,1)}function w0(){w0=E,wSt=new AI(c3n,0),dSt=new AI("UP",1)}function d0(){d0=E,Aat=Abn((Hy(),Uhn(cT(Lat,1),p1n,549,0,[Iat])))}function g0(n){var t;return Dfn(t=new Dj(orn(n.length)),n),t}function p0(n,t){return n.b+=t.b,n.c+=t.c,n.d+=t.d,n.a+=t.a,n}function m0(n,t){return!!Chn(n,t)&&(lan(n),!0)}function v0(n,t){if(null==t)throw hv(new Rv);return Tvn(n,t)}function k0(n,t){var e;e=n.q.getHours(),n.q.setDate(t),Iqn(n,e)}function y0(n,t,e){var i;(i=n.Ih(t))>=0?n.bi(i,e):lRn(n,t,e)}function M0(n,t){var e;return(e=n.Ih(t))>=0?n.Wh(e):$Nn(n,t)}function T0(n,t){var e;for(WW(t),e=n.a;e;e=e.c)t.Yd(e.g,e.i)}function j0(n,t,e){var i;i=Ufn(n,t,e),n.b=new Don(i.c.length)}function E0(n,t,e){W0(),n&&vJ(LFt,n,t),n&&vJ(AFt,n,e)}function S0(n,t){return UB(),qx(),uG(t.a,17).a0}function O0(n){var t;return t=n.d,t=n.bj(n.f),ttn(n,t),t.Ob()}function A0(n,t){var e;return zCn(e=new aX(t),n),new Z_(e)}function L0(n){if(0!=n.p)throw hv(new xv);return HA(n.f,0)}function N0(n){if(0!=n.p)throw hv(new xv);return HA(n.k,0)}function $0(n){return n.Db>>16!=7?null:uG(n.Cb,241)}function D0(n){return n.Db>>16!=6?null:uG(n.Cb,241)}function x0(n){return n.Db>>16!=7?null:uG(n.Cb,167)}function R0(n){return n.Db>>16!=11?null:uG(n.Cb,27)}function K0(n){return n.Db>>16!=17?null:uG(n.Cb,29)}function F0(n){return n.Db>>16!=3?null:uG(n.Cb,155)}function _0(n){return vgn(n),JJ(n,new Md(new ek))}function B0(n,t){var e=n.a=n.a||[];return e[t]||(e[t]=n.ve(t))}function H0(n,t){var e;e=n.q.getHours(),n.q.setMonth(t),Iqn(n,e)}function U0(n,t){LD(this),this.f=t,this.g=n,KY(this),this.je()}function G0(n,t){this.a=n,this.c=D$(this.a),this.b=new qZ(t)}function q0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function X0(n,t,e){this.a=t,this.c=n,this.b=(WW(e),new Z_(e))}function z0(n){this.a=n,this.b=Inn(WEt,zZn,2043,n.e.length,0,2)}function V0(){this.a=new XL,this.e=new ek,this.g=0,this.i=0}function W0(){W0=E,LFt=new Ym,AFt=new Ym,pA(iut,new fs)}function Q0(){Q0=E,jEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function J0(){J0=E,EEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Y0(){Y0=E,PEt=wz(new wJ,(uIn(),Plt),(zYn(),Owt))}function Z0(){Z0=E,tSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function n2(){n2=E,aSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function t2(){t2=E,sSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function e2(){e2=E,mSt=Aq(new wJ,(uIn(),Plt),(zYn(),ewt))}function i2(n,t,e,i,r,c){return new Ken(n.e,t,n.Lj(),e,i,r,c)}function r2(n,t,e){return null==t?VAn(n.f,null,e):kgn(n.i,t,e)}function c2(n,t){n.c&&men(n.c.g,n),n.c=t,n.c&&kD(n.c.g,n)}function a2(n,t){n.c&&men(n.c.a,n),n.c=t,n.c&&kD(n.c.a,n)}function o2(n,t){n.i&&men(n.i.j,n),n.i=t,n.i&&kD(n.i.j,n)}function u2(n,t){n.d&&men(n.d.e,n),n.d=t,n.d&&kD(n.d.e,n)}function s2(n,t){n.a&&men(n.a.k,n),n.a=t,n.a&&kD(n.a.k,n)}function h2(n,t){n.b&&men(n.b.f,n),n.b=t,n.b&&kD(n.b.f,n)}function f2(n,t){dQ(n,n.b,n.c),uG(n.b.b,68),t&&uG(t.b,68).b}function l2(n,t){return ugn(uG(n.c,65).c.e.b,uG(t.c,65).c.e.b)}function b2(n,t){return ugn(uG(n.c,65).c.e.a,uG(t.c,65).c.e.a)}function w2(n){return Mbn(),qx(),0!=uG(n.a,86).d.e}function d2(n,t){F$(n.Cb,184)&&(uG(n.Cb,184).tb=null),qon(n,t)}function g2(n,t){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,t)}function p2(n,t){Pgn(n,t),F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),2)}function m2(n,t){null!=t.c&&pQ(n,new QW(t.c))}function v2(n){var t;return vj(),Urn(t=new ev,n),t}function k2(n){var t;return vj(),Urn(t=new ev,n),t}function y2(n){for(var t;;)if(t=n.Pb(),!n.Ob())return t}function M2(n,t,e){return kD(n.a,(TJ(),IMn(t,e),new FE(t,e))),n}function T2(n,t){return PP(),ein(t)?new Cq(t,n):new OA(t,n)}function j2(n){return cHn(),dwn(n,0)>=0?Rmn(n):hW(Rmn(Men(n)))}function E2(n){var t;return t=uG(tq(n.b),9),new nB(n.a,t,n.c)}function S2(n,t){var e;return(e=uG(Xwn(nZ(n.a),t),16))?e.gc():0}function P2(n,t,e){var i;hdn(t,e,n.c.length),i=e-t,nE(n.c,t,i)}function C2(n,t,e){hdn(t,e,n.gc()),this.c=n,this.a=t,this.b=e-t}function I2(n){this.c=new lS,this.b=n.b,this.d=n.c,this.a=n.a}function O2(n){this.a=e.Math.cos(n),this.b=e.Math.sin(n)}function A2(n,t,e,i){this.c=n,this.d=i,s2(this,t),h2(this,e)}function L2(n,t){Ey.call(this,new sS(orn(n))),man(t,XZn),this.a=t}function N2(n,t,e){return new AOn(n,(Rtn(),mut),null,!1,t,e)}function $2(n,t,e){return new AOn(n,(Rtn(),kut),t,e,null,!1)}function D2(){return ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])}function x2(){return Yen(),Uhn(cT(hht,1),p1n,471,0,[Fst,Kst,Rst])}function R2(){return Ktn(),Uhn(cT(xst,1),p1n,470,0,[Ast,Ost,Lst])}function K2(){return Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])}function F2(){return Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])}function _2(){return gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])}function B2(){return jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])}function H2(){return ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])}function U2(){return Pfn(),Uhn(cT(Ogt,1),p1n,459,0,[kgt,vgt,ygt])}function G2(){return ihn(),Uhn(cT(mpt,1),p1n,298,0,[fpt,lpt,hpt])}function q2(){return Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])}function X2(){return Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])}function z2(){return can(),Uhn(cT(eEt,1),p1n,462,0,[Qjt,Vjt,Wjt])}function V2(){return isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])}function W2(){return Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])}function Q2(){return kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])}function J2(){return ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])}function Y2(){return zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])}function Z2(){return ean(),Uhn(cT(qEt,1),p1n,463,0,[_Et,BEt,HEt])}function n3(n){return Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a]))}function t3(){return Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])}function e3(){e3=E,UCt=wz(new wJ,(Cjn(),WSt),(OHn(),ePt))}function i3(){i3=E,_Ct=new JI("DFS",0),FCt=new JI("BFS",1)}function r3(n,t,e){var i;(i=new ia).b=t,i.a=e,++t.b,kD(n.d,i)}function c3(n,t,e){var i;JF(i=new eN(e.d),n),jgn(t,i.a,i.b)}function a3(n,t){pD(n,pz(E3($z(t,24),W0n)),pz(E3(t,W0n)))}function o3(n,t){if(n<0||n>t)throw hv(new dM(h2n+n+f2n+t))}function u3(n,t){if(n<0||n>=t)throw hv(new dM(h2n+n+f2n+t))}function s3(n,t){if(n<0||n>=t)throw hv(new JM(h2n+n+f2n+t))}function h3(n,t){this.b=(tJ(n),n),this.a=0==(t&j0n)?64|t|VZn:t}function f3(n){return vgn(n),sZ(),sZ(),krn(n,Yot)}function l3(n,t,e){var i;return(i=uXn(n,t,!1)).b<=t&&i.a<=e}function b3(){return den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])}function w3(){return Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])}function d3(){return Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])}function g3(){return Zyn(),Uhn(cT(AOt,1),p1n,455,0,[lOt,wOt,bOt])}function p3(){return vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])}function m3(){return esn(),Uhn(cT(hOt,1),p1n,299,0,[iOt,rOt,eOt])}function v3(){return Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])}function k3(){return Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])}function y3(){return Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])}function M3(){return Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])}function T3(n){return WW(n),F$(n,16)?new Z_(uG(n,16)):rG(n.Kc())}function j3(n,t){return n&&n.equals?n.equals(t):xA(n)===xA(t)}function E3(n,t){return Esn(Oz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function S3(n,t){return Esn(Az(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function P3(n,t){return Esn(Lz(_L(n)?Gsn(n):n,_L(t)?Gsn(t):t))}function C3(n,t){var e;return kK(!!(e=(tJ(n),n).g)),tJ(t),e(t)}function I3(n,t){var e,i;return i=KV(n,t),e=n.a.fd(i),new BE(n,e)}function O3(n){return n.Db>>16!=6?null:uG(J$n(n),241)}function A3(n){if(2!=n.p)throw hv(new xv);return pz(n.f)&D1n}function L3(n){if(2!=n.p)throw hv(new xv);return pz(n.k)&D1n}function N3(n){return MK(n.ai?1:0}function Y3(n,t){var e;return e=jen(t),uG(cQ(n.c,e),17).a}function Z3(n,t,e){var i;i=n.d[t.p],n.d[t.p]=n.d[e.p],n.d[e.p]=i}function n4(n,t,e){var i;n.n&&t&&e&&(i=new Yu,kD(n.e,i))}function t4(n,t){if(FV(n.a,t),t.d)throw hv(new Ky(p2n));t.d=n}function e4(n,t){this.a=new Zm,this.d=new Zm,this.f=n,this.c=t}function i4(){this.c=new z$,this.a=new p7,this.b=new yk,XS()}function r4(){Whn(),this.b=new Ym,this.a=new Ym,this.c=new Zm}function c4(n,t,e){this.d=n,this.j=t,this.e=e,this.o=-1,this.p=3}function a4(n,t,e){this.d=n,this.k=t,this.f=e,this.o=-1,this.p=5}function o4(n,t,e,i,r,c){Bcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function u4(n,t,e,i,r,c){Hcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function s4(n,t,e,i,r,c){E9.call(this,n,t,e,i,r),c&&(this.o=-2)}function h4(n,t,e,i,r,c){qcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function f4(n,t,e,i,r,c){S9.call(this,n,t,e,i,r),c&&(this.o=-2)}function l4(n,t,e,i,r,c){Ucn.call(this,n,t,e,i,r),c&&(this.o=-2)}function b4(n,t,e,i,r,c){Gcn.call(this,n,t,e,i,r),c&&(this.o=-2)}function w4(n,t,e,i,r,c){P9.call(this,n,t,e,i,r),c&&(this.o=-2)}function d4(n,t,e,i){Hm.call(this,e),this.b=n,this.c=t,this.d=i}function g4(n,t){this.f=n,this.a=(N7(),MBt),this.c=MBt,this.b=t}function p4(n,t){this.g=n,this.d=(N7(),TBt),this.a=TBt,this.b=t}function m4(n,t){!n.c&&(n.c=new wsn(n,0)),BXn(n.c,(uVn(),nHt),t)}function v4(n,t){return lxn(n,t,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function k4(n,t){return rW(Bsn(n.q.getTime()),Bsn(t.q.getTime()))}function y4(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),16,new zl(n))}function M4(n){return!(!n.u||0==z5(n.u.a).i||n.n&&yMn(n.n))}function T4(n){return!(!n.a||0==Aen(n.a.a).i||n.b&&MMn(n.b))}function j4(n,t){return 0==t?!!n.o&&0!=n.o.f:Wkn(n,t)}function E4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Hc(e)}function S4(n,t,e){var i;return!!(i=uG(n.Zb().xc(t),16))&&i.Mc(e)}function P4(n,t){var e;return e=1-t,n.a[e]=Ton(n.a[e],e),Ton(n,t)}function C4(n,t){var e;return e=E3(n,L0n),S3(Nz(t,32),e)}function I4(n,t,e){WW(n),mjn(new q0(new Z_(n),t,e))}function O4(n,t,e){WW(n),vjn(new X0(new Z_(n),t,e))}function A4(n,t,e,i,r,c){return Dsn(n,t,e,c),gdn(n,i),vdn(n,r),n}function L4(n,t,e,i){return n.a+=""+r1(null==t?IZn:cpn(t),e,i),n}function N4(n,t){this.a=n,Jw.call(this,n),o3(t,n.gc()),this.b=t}function $4(n){this.a=Inn(dat,EZn,1,pfn(e.Math.max(8,n))<<1,5,1)}function D4(n){return uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199)}function x4(n){return uG(Ekn(n,Inn(obt,t6n,18,n.c.length,0,1)),482)}function R4(n){return n.a?0==n.e.length?n.a.a:n.a.a+""+n.e:n.c}function K4(n){for(;n.d>0&&0==n.a[--n.d];);0==n.a[n.d++]&&(n.e=0)}function F4(n){return MK(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function _4(n,t,e){n.a=t,n.c=e,n.b.a.$b(),BY(n.d),Xv(n.e.a.c,0)}function B4(n,t){var e;n.e=new dy,f$(e=GFn(t),n.c),T_n(n,e,0)}function H4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.a,r)}function U4(n,t,e,i){var r;(r=new gu).a=t,r.b=e,r.c=i,aq(n.b,r)}function G4(n,t,e){if(n<0||te)throw hv(new dM(QOn(n,t,e)))}function q4(n,t){if(n<0||n>=t)throw hv(new dM(TLn(n,t)));return n}function X4(n){if(!("stack"in n))try{throw n}catch(t){}return n}function z4(n){return JS(),F$(n.g,10)?uG(n.g,10):null}function V4(n){return!uY(n).dc()&&(h$(n,new w),!0)}function W4(n){var t;return _L(n)?-0==(t=n)?0:t:Gen(n)}function Q4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function J4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Y4(n,t){return!!F$(t,44)&&sTn(n.a,uG(t,44))}function Z4(n){var t;return GQ(n),t=new D,tE(n.a,new vd(t)),t}function n6(){var n,t;return n=new ev,kD(gBt,t=n),t}function t6(n){var t;return GQ(n),t=new x,tE(n.a,new kd(t)),t}function e6(n,t){return n.a<=n.b&&(t.Dd(n.a++),!0)}function i6(n){dun.call(this,n,(Rtn(),put),null,!1,null,!1)}function r6(){r6=E,_ht=Abn((BS(),Uhn(cT(oft,1),p1n,488,0,[Kht])))}function c6(){c6=E,$Et=MJ(xwn(1),xwn(4)),NEt=MJ(xwn(1),xwn(2))}function a6(n,t){return new LU(t,HR(D$(t.e),n,n),(qx(),!0))}function o6(n){return new R7((man(n,v1n),arn(Lgn(Lgn(5,n),n/10|0))))}function u6(n){return Dq(n.e.Rd().gc()*n.c.Rd().gc(),273,new Xl(n))}function s6(n){return uG(Ekn(n,Inn(Abt,i6n,12,n.c.length,0,1)),2042)}function h6(n){return n2(),!(v9(n)||!v9(n)&&n.c.i.c==n.d.i.c)}function f6(n,t){return ncn(),uG(oIn(t,(QGn(),kCt)),17).a>=n.gc()}function l6(n,t){_Jn(t,n),NG(n.d),NG(uG(oIn(n,(jYn(),SMt)),214))}function b6(n,t){BJn(t,n),$G(n.d),$G(uG(oIn(n,(jYn(),SMt)),214))}function w6(n,t,e){n.d&&men(n.d.e,n),n.d=t,n.d&&GX(n.d.e,e,n)}function d6(n,t,e){return e.f.c.length>0?HV(n.a,t,e):HV(n.b,t,e)}function g6(n,t,e){var i;i=bkn();try{return SF(n,t,e)}finally{m8(i)}}function p6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.pe()),i}function m6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=e.se()),i}function v6(n,t){var e,i;return i=null,(e=uin(n,t))&&(i=e.se()),i}function k6(n,t){var e,i;return i=null,(e=v0(n,t))&&(i=uAn(e)),i}function y6(n,t,e){var i;return i=jvn(e),yHn(n.g,i,t),yHn(n.i,t,e),t}function M6(n,t,e){this.d=new qg(this),this.e=n,this.i=t,this.f=e}function T6(n,t,e,i){this.e=null,this.c=n,this.d=t,this.a=e,this.b=i}function j6(n,t,e,i){A$(this),this.c=n,this.e=t,this.f=e,this.b=i}function E6(n,t,e,i){this.d=n,this.n=t,this.g=e,this.o=i,this.p=-1}function S6(n,t,e,i){return F$(e,59)?new Yx(n,t,e,i):new qz(n,t,e,i)}function P6(n){return F$(n,16)?uG(n,16).dc():!n.Kc().Ob()}function C6(n){if(n.e.g!=n.b)throw hv(new Fv);return!!n.c&&n.d>0}function I6(n){return MK(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function O6(n,t){tJ(t),uQ(n.a,n.c,t),n.c=n.c+1&n.a.length-1,JTn(n)}function A6(n,t){tJ(t),n.b=n.b-1&n.a.length-1,uQ(n.a,n.b,t),JTn(n)}function L6(n){var t;t=n.Gh(),this.a=F$(t,71)?uG(t,71).Ii():t.Kc()}function N6(n){return new h3(Vrn(uG(n.a.md(),16).gc(),n.a.ld()),16)}function $6(){$6=E,WAt=Abn((nP(),Uhn(cT(JAt,1),p1n,489,0,[zAt])))}function D6(){D6=E,YAt=Abn((tP(),Uhn(cT(tLt,1),p1n,558,0,[QAt])))}function x6(){x6=E,XLt=Abn((eP(),Uhn(cT(WLt,1),p1n,539,0,[GLt])))}function R6(){return Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])}function K6(){return Rtn(),Uhn(cT(Tut,1),p1n,303,0,[put,mut,vut,kut])}function F6(){return vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])}function _6(){return myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])}function B6(){return ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])}function H6(){return Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])}function U6(){return qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])}function G6(){return Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])}function q6(){return Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])}function X6(){return yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])}function z6(n){return n.j==(KQn(),KRt)&&$x(_$n(n),kRt)}function V6(n,t){var e;c2(e=t.a,t.c.d),u2(e,t.d.d),Xun(e.a,n.n)}function W6(n,t){var e;return!(e=uG(ain(n.b,t),67))&&(e=new lS),e}function Q6(n){return JS(),F$(n.g,154)?uG(n.g,154):null}function J6(n){n.a=null,n.e=null,Xv(n.b.c,0),Xv(n.f.c,0),n.c=null}function Y6(){Y6=E,kpt=new sI(G2n,0),ypt=new sI("TOP_LEFT",1)}function Z6(){Z6=E,YEt=new SI("UPPER",0),JEt=new SI("LOWER",1)}function n5(n,t){return bD(new MO(t.e.a+t.f.a/2,t.e.b+t.f.b/2),n)}function t5(n,t){return uG(yx(Wz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function e5(n,t){return uG(yx(Qz(uG(Y9(n.k,t),15).Oc(),Fdt)),113)}function i5(){return Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])}function r5(){return mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])}function c5(){return dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])}function a5(){return Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])}function o5(){return Ajn(),Uhn(cT(Wxt,1),p1n,290,0,[Rxt,$xt,Dxt,xxt])}function u5(){return _gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])}function s5(){return qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])}function h5(){return Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])}function f5(n){return W0(),PV(LFt,n)?uG(cQ(LFt,n),341).Qg():null}function l5(n,t,e){return t<0?$Nn(n,e):uG(e,69).wk().Bk(n,n.hi(),t)}function b5(n,t,e){var i;return i=jvn(e),yHn(n.j,i,t),vJ(n.k,t,e),t}function w5(n,t,e){var i;return i=jvn(e),yHn(n.d,i,t),vJ(n.e,t,e),t}function d5(n){var t;return gj(),t=new es,n&&ARn(t,n),t}function g5(n){var t;return t=n.aj(n.i),n.i>0&&qGn(n.g,0,t,0,n.i),t}function p5(n,t){var e;for(e=n.j.c.length;e>24}function y5(n){if(1!=n.p)throw hv(new xv);return pz(n.k)<<24>>24}function M5(n){if(7!=n.p)throw hv(new xv);return pz(n.k)<<16>>16}function T5(n){if(7!=n.p)throw hv(new xv);return pz(n.f)<<16>>16}function j5(n,t){return 0==t.e||0==n.e?_ot:(b_n(),yKn(n,t))}function E5(n,t){return xA(t)===xA(n)?"(this Map)":null==t?IZn:cpn(t)}function S5(n,t,e){return Rz(pK(DA(FX(n.f,t))),pK(DA(FX(n.f,e))))}function P5(n,t,e){var i;i=uG(cQ(n.g,e),60),kD(n.a.c,new WO(t,i))}function C5(n,t,e){n.i=0,n.e=0,t!=e&&(eln(n,t,e),tln(n,t,e))}function I5(n,t,e,i,r){kD(t,uLn(r,Bxn(r,e,i))),LIn(n,r,t)}function O5(n,t,e,i,r){this.i=n,this.a=t,this.e=e,this.j=i,this.f=r}function A5(n,t){HZ.call(this),this.a=n,this.b=t,kD(this.a.b,this)}function L5(n){this.b=new Ym,this.c=new Ym,this.d=new Ym,this.a=n}function N5(n,t){var e;return e=new QM,n.Gd(e),e.a+="..",t.Hd(e),e.a}function $5(n,t){var e;for(e=t;e;)KR(n,e.i,e.j),e=R0(e);return n}function D5(n,t,e){var i;return i=jvn(e),vJ(n.b,i,t),vJ(n.c,t,e),t}function x5(n){var t;for(t=0;n.Ob();)n.Pb(),t=Lgn(t,1);return arn(t)}function R5(n,t){var e;return PP(),uOn(e=uG(n,69).vk(),t),e.xl(t)}function K5(n,t,e){if(e){var i=e.oe();n.a[t]=i(e)}else delete n.a[t]}function F5(n,t){var e;e=n.q.getHours(),n.q.setFullYear(t+V1n),Iqn(n,e)}function _5(n,t){return uG(null==t?DA(FX(n.f,null)):_P(n.i,t),288)}function B5(n,t){return n==(zIn(),dbt)&&t==dbt?4:n==dbt||t==dbt?8:32}function H5(n,t,e){return aqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function U5(n,t,e){return Dqn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function G5(n,t,e){return Cxn(n,t,e,F$(t,102)&&0!=(uG(t,19).Bb&P0n))}function q5(n){n.b!=n.c&&(n.a=Inn(dat,EZn,1,8,5,1),n.b=0,n.c=0)}function X5(n){return MK(n.a=0&&n.a[e]===t[e];e--);return e<0}function g8(n){var t;return n?new aX(n):(Fon(t=new XL,n),t)}function p8(n,t){var e,i;i=!1;do{i|=e=Tfn(n,t)}while(e);return i}function m8(n){n&&Cin((Gy(),Fat)),--Uat,n&&-1!=qat&&(jL(qat),qat=-1)}function v8(n){aCn(),pD(this,pz(E3($z(n,24),W0n)),pz(E3(n,W0n)))}function k8(){k8=E,Jut=Abn((_kn(),Uhn(cT(nst,1),p1n,436,0,[Wut,Vut])))}function y8(){y8=E,tst=Abn((Xin(),Uhn(cT(mst,1),p1n,435,0,[Yut,Zut])))}function M8(){M8=E,vft=Abn((zin(),Uhn(cT(mlt,1),p1n,432,0,[gft,pft])))}function T8(){T8=E,Lbt=Abn((Aun(),Uhn(cT(Dbt,1),p1n,517,0,[Obt,Ibt])))}function j8(){j8=E,Dgt=Abn((Wtn(),Uhn(cT(Hgt,1),p1n,487,0,[Ngt,Lgt])))}function E8(){E8=E,mgt=Abn((Vin(),Uhn(cT(Mgt,1),p1n,428,0,[dgt,ggt])))}function S8(){S8=E,Jdt=Abn((H7(),Uhn(cT(tgt,1),p1n,431,0,[Vdt,Wdt])))}function P8(){P8=E,zjt=Abn((nin(),Uhn(cT(Jjt,1),p1n,430,0,[Gjt,qjt])))}function C8(){C8=E,nSt=Abn((Z6(),Uhn(cT(cSt,1),p1n,531,0,[YEt,JEt])))}function I8(){I8=E,bSt=Abn((b0(),Uhn(cT(gSt,1),p1n,523,0,[fSt,hSt])))}function O8(){O8=E,pSt=Abn((w0(),Uhn(cT(xSt,1),p1n,522,0,[wSt,dSt])))}function A8(){A8=E,RSt=Abn((_7(),Uhn(cT(qSt,1),p1n,528,0,[DSt,$St])))}function L8(){L8=E,Tpt=Abn((Y6(),Uhn(cT(Nmt,1),p1n,429,0,[kpt,ypt])))}function N8(){N8=E,XSt=Abn((l0(),Uhn(cT(JSt,1),p1n,464,0,[USt,GSt])))}function $8(){$8=E,uIt=Abn((Ptn(),Uhn(cT(lIt,1),p1n,434,0,[cIt,aIt])))}function D8(){D8=E,HCt=Abn((i3(),Uhn(cT(QCt,1),p1n,433,0,[_Ct,FCt])))}function x8(){x8=E,JCt=Abn((pon(),Uhn(cT(iIt,1),p1n,500,0,[VCt,WCt])))}function R8(){R8=E,jAt=Abn((a9(),Uhn(cT(CAt,1),p1n,490,0,[yAt,MAt])))}function K8(){K8=E,NAt=Abn((rhn(),Uhn(cT($At,1),p1n,491,0,[OAt,AAt])))}function F8(){F8=E,eLt=Abn((B7(),Uhn(cT(uLt,1),p1n,438,0,[nLt,ZAt])))}function _8(){_8=E,QLt=Abn((Vhn(),Uhn(cT(JLt,1),p1n,437,0,[VLt,zLt])))}function B8(){B8=E,vKt=Abn((CU(),Uhn(cT(jKt,1),p1n,347,0,[gKt,pKt])))}function H8(){return xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])}function U8(){return KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])}function G8(n,t,e){return uG(null==t?VAn(n.f,null,e):kgn(n.i,t,e),288)}function q8(n){return(n.k==(zIn(),dbt)||n.k==lbt)&&vR(n,(GYn(),$pt))}function X8(n){return n.c&&n.d?z3(n.c)+"->"+z3(n.d):"e_"+xx(n)}function z8(n,t){var e,i;for(tJ(t),i=n.Kc();i.Ob();)e=i.Pb(),t.Cd(e)}function V8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function W8(n,t){var e;vZ(e=new _y,"x",t.a),vZ(e,"y",t.b),pQ(n,e)}function Q8(n,t){var e;for(e=t;e;)KR(n,-e.i,-e.j),e=R0(e);return n}function J8(n,t){var e,i;for(e=t,i=0;e>0;)i+=n.a[e],e-=e&-e;return i}function Y8(n,t,e){var i;return u3(t,n.c.length),i=n.c[t],n.c[t]=e,i}function Z8(n,t,e){n.a.c.length=0,sVn(n,t,e),0==n.a.c.length||mUn(n,t)}function n9(n){n.i=0,FP(n.b,null),FP(n.c,null),n.a=null,n.e=null,++n.g}function t9(){t9=E,Nut=!0,Aut=!1,Lut=!1,Dut=!1,$ut=!1}function e9(n){t9(),Nut||(this.c=n,this.e=!0,this.a=new Zm)}function i9(n,t){this.c=0,this.b=t,iL.call(this,n,17493),this.a=this.c}function r9(n){NYn(),dv(this),this.a=new lS,Lln(this,n),aq(this.a,n)}function c9(){IN(this),this.b=new MO(M0n,M0n),this.a=new MO(T0n,T0n)}function a9(){a9=E,yAt=new oO(x6n,0),MAt=new oO("TARGET_WIDTH",1)}function o9(n,t){return(vgn(n),Qj(new fX(n,new ien(t,n.a)))).Bd(Kut)}function u9(){return uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])}function s9(){return gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])}function h9(){return kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])}function f9(){return pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])}function l9(){return Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])}function b9(){return zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])}function w9(){return _Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])}function d9(){return pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])}function g9(){return Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])}function p9(){return Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])}function m9(n){return XM(),function(){return g6(n,this,arguments)}}function v9(n){return!(!n.c||!n.d||!n.c.i||n.c.i!=n.d.i)}function k9(n,t){return!!F$(t,143)&&m_(n.c,uG(t,143).c)}function y9(n){return n.t||(n.t=new $m(n),$dn(new Qy(n),0,n.t)),n.t}function M9(n){this.b=n,DD.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function T9(n){this.b=n,nR.call(this,n),this.a=uG(Lsn(this.b.a,4),129)}function j9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.b=e}function E9(n,t,e,i,r){c4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function S9(n,t,e,i,r){a4.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function P9(n,t,e,i,r){b7.call(this,t,i,r),Kf(this),this.c=n,this.a=e}function C9(n,t){return uG(ain(n.d,t),23)||uG(ain(n.e,t),23)}function I9(n,t){var e,i;return e=t.ld(),!!(i=n.Fe(e))&&OJ(i.e,t.md())}function O9(n,t){var e;return new FE(e=t.ld(),n.e.pc(e,uG(t.md(),16)))}function A9(n,t){var e;return null==(e=n.a.get(t))?Inn(dat,EZn,1,0,5,1):e}function L9(n){var t;return t=n.length,m_(S0n.substr(S0n.length-t,t),n)}function N9(n){if(hDn(n))return n.c=n.a,n.a.Pb();throw hv(new Bv)}function $9(n,t){return 0==t||0==n.e?n:t>0?MFn(n,t):rvn(n,-t)}function D9(n,t){return 0==t||0==n.e?n:t>0?rvn(n,t):MFn(n,-t)}function x9(n){xP.call(this,null==n?IZn:cpn(n),F$(n,82)?uG(n,82):null)}function R9(n){var t;return n.c||F$(t=n.r,90)&&(n.c=uG(t,29)),n.c}function K9(n){var t;return zsn(t=new UZ,n),kfn(t,(jYn(),bMt),null),t}function F9(n){var t,e;return t=n.c.i,e=n.d.i,t.k==(zIn(),lbt)&&e.k==lbt}function _9(n){return p$(n&f0n,n>>22&f0n,n<0?l0n:0)}function B9(n){var t,e,i;for(e=0,i=(t=n).length;e=0?n.Lh(i,e,!0):YNn(n,t,e)}function G9(n,t,e){return ugn(bD($kn(n),D$(t.b)),bD($kn(n),D$(e.b)))}function q9(n,t,e){return ugn(bD($kn(n),D$(t.e)),bD($kn(n),D$(e.e)))}function X9(n,t){return e.Math.min(atn(t.a,n.d.d.c),atn(t.b,n.d.d.c))}function z9(n,t){n._i(n.i+1),yD(n,n.i,n.Zi(n.i,t)),n.Mi(n.i++,t),n.Ni()}function V9(n){var t,e;++n.j,t=n.g,e=n.i,n.g=null,n.i=0,n.Oi(e,t),n.Ni()}function W9(n,t,e){var i;xun(i=new U$(n.a),n.a.a),VAn(i.f,t,e),n.a.a=i}function Q9(n,t,e,i){var r;for(r=0;r<$st;r++)qX(n.a[r][t.g],e,i[t.g])}function J9(n,t,e,i){var r;for(r=0;rt)throw hv(new dM(iLn(n,t,"index")));return n}function i7(n,t){var e;return u3(t,n.c.length),e=n.c[t],nE(n.c,t,1),e}function r7(n,t){var e,i;return tJ(n),e=n,tJ(t),e==(i=t)?0:et.p?-1:0}function E7(n){var t;return n.a||F$(t=n.r,156)&&(n.a=uG(t,156)),n.a}function S7(n,t,e){return++n.e,--n.f,uG(n.d[t].gd(e),136).md()}function P7(n){var t;return t=n.ld(),JU(uG(n.md(),16).Nc(),new Wl(t))}function C7(n,t){return!!PV(n.a,t)&&(u7(n.a,t),!0)}function I7(n,t,e){return q4(t,n.e.Rd().gc()),q4(e,n.c.Rd().gc()),n.a[t][e]}function O7(n,t,e){this.a=n,this.b=t,this.c=e,kD(n.t,this),kD(t.i,this)}function A7(n,t,e,i){this.f=n,this.e=t,this.d=e,this.b=i,this.c=i?i.d:null}function L7(){this.b=new lS,this.a=new lS,this.b=new lS,this.a=new lS}function N7(){var n,t;N7=E,vj(),t=new Gv,MBt=t,n=new Wk,TBt=n}function $7(n){return vgn(n),new IK(n,new lG(n,n.a.e,4|n.a.d))}function D7(n){var t;for(GQ(n),t=0;n.a.Bd(new hn);)t=Lgn(t,1);return t}function x7(n,t){return tJ(t),n.c=0,"Initial capacity must not be negative")}function K7(){K7=E,jNt=new Cm("org.eclipse.elk.labels.labelManager")}function F7(){F7=E,Uwt=new uF("separateLayerConnections",(Ghn(),zwt))}function _7(){_7=E,DSt=new qI("REGULAR",0),$St=new qI("CRITICAL",1)}function B7(){B7=E,nLt=new lO("FIXED",0),ZAt=new lO("CENTER_NODE",1)}function H7(){H7=E,Vdt=new WC("QUADRATIC",0),Wdt=new WC("SCANLINE",1)}function U7(){U7=E,egt=Abn((jan(),Uhn(cT(agt,1),p1n,322,0,[Zdt,Ydt,ngt])))}function G7(){G7=E,ogt=Abn((ran(),Uhn(cT(bgt,1),p1n,351,0,[igt,cgt,rgt])))}function q7(){q7=E,Tgt=Abn((Pfn(),Uhn(cT(Ogt,1),p1n,459,0,[kgt,vgt,ygt])))}function X7(){X7=E,Cdt=Abn((gon(),Uhn(cT(Rdt,1),p1n,372,0,[Sdt,Edt,jdt])))}function z7(){z7=E,vpt=Abn((Zen(),Uhn(cT(Mpt,1),p1n,311,0,[gpt,ppt,dpt])))}function V7(){V7=E,wpt=Abn((ihn(),Uhn(cT(mpt,1),p1n,298,0,[fpt,lpt,hpt])))}function W7(){W7=E,ljt=Abn((Cwn(),Uhn(cT(pjt,1),p1n,390,0,[ujt,sjt,hjt])))}function Q7(){Q7=E,iEt=Abn((isn(),Uhn(cT(oEt,1),p1n,387,0,[Zjt,nEt,tEt])))}function J7(){J7=E,uEt=Abn((Sln(),Uhn(cT(lEt,1),p1n,349,0,[aEt,rEt,cEt])))}function Y7(){Y7=E,Yjt=Abn((can(),Uhn(cT(eEt,1),p1n,462,0,[Qjt,Vjt,Wjt])))}function Z7(){Z7=E,mEt=Abn((ian(),Uhn(cT(MEt,1),p1n,352,0,[gEt,wEt,dEt])))}function nnn(){nnn=E,bEt=Abn((kbn(),Uhn(cT(pEt,1),p1n,350,0,[sEt,hEt,fEt])))}function tnn(){tnn=E,TEt=Abn((zhn(),Uhn(cT(xEt,1),p1n,388,0,[kEt,yEt,vEt])))}function enn(){enn=E,mPt=Abn((Pln(),Uhn(cT(RCt,1),p1n,392,0,[gPt,dPt,wPt])))}function inn(){inn=E,bIt=Abn((vbn(),Uhn(cT(nOt,1),p1n,393,0,[sIt,hIt,fIt])))}function rnn(){rnn=E,aOt=Abn((esn(),Uhn(cT(hOt,1),p1n,299,0,[iOt,rOt,eOt])))}function cnn(){cnn=E,fOt=Abn((Jmn(),Uhn(cT(dOt,1),p1n,445,0,[oOt,uOt,sOt])))}function ann(){ann=E,gOt=Abn((Zyn(),Uhn(cT(AOt,1),p1n,455,0,[lOt,wOt,bOt])))}function onn(){onn=E,LOt=Abn((Bgn(),Uhn(cT(kAt,1),p1n,394,0,[IOt,OOt,COt])))}function unn(){unn=E,IAt=Abn((den(),Uhn(cT(LAt,1),p1n,439,0,[EAt,PAt,SAt])))}function snn(){snn=E,GEt=Abn((ean(),Uhn(cT(qEt,1),p1n,463,0,[_Et,BEt,HEt])))}function hnn(){hnn=E,Dst=Abn((Ktn(),Uhn(cT(xst,1),p1n,470,0,[Ast,Ost,Lst])))}function fnn(){fnn=E,Cst=Abn((Yrn(),Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])))}function lnn(){lnn=E,Bst=Abn((Yen(),Uhn(cT(hht,1),p1n,471,0,[Fst,Kst,Rst])))}function bnn(){bnn=E,xut=Abn((ybn(),Uhn(cT(Rut,1),p1n,108,0,[Cut,Iut,Out])))}function wnn(){wnn=E,vlt=Abn((Jen(),Uhn(cT(Clt,1),p1n,391,0,[glt,dlt,plt])))}function dnn(){dnn=E,Nxt=Abn((Own(),Uhn(cT(Kxt,1),p1n,346,0,[Oxt,Ixt,Axt])))}function gnn(){gnn=E,XAt=Abn((Rdn(),Uhn(cT(VAt,1),p1n,444,0,[HAt,UAt,GAt])))}function pnn(){pnn=E,oxt=Abn((Zrn(),Uhn(cT(lxt,1),p1n,278,0,[ixt,rxt,cxt])))}function mnn(){mnn=E,dKt=Abn((Iwn(),Uhn(cT(mKt,1),p1n,280,0,[lKt,fKt,bKt])))}function vnn(n,t){return!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),ymn(n.o,t)}function knn(n,t){var e;n.C&&((e=uG(AJ(n.b,t),127).n).d=n.C.d,e.a=n.C.a)}function ynn(n){var t,e,i,r;r=n.d,t=n.a,e=n.b,i=n.c,n.d=e,n.a=i,n.b=r,n.c=t}function Mnn(n){return!n.g&&(n.g=new ds),!n.g.b&&(n.g.b=new Om(n)),n.g.b}function Tnn(n){return!n.g&&(n.g=new ds),!n.g.c&&(n.g.c=new Nm(n)),n.g.c}function jnn(n){return!n.g&&(n.g=new ds),!n.g.d&&(n.g.d=new Am(n)),n.g.d}function Enn(n){return!n.g&&(n.g=new ds),!n.g.a&&(n.g.a=new Lm(n)),n.g.a}function Snn(n,t,e,i){return e&&(i=e.Rh(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Pnn(n,t,e,i){return e&&(i=e.Th(t,emn(e.Dh(),n.c.uk()),null,i)),i}function Cnn(n,t,e,i){var r;return KGn(r=Inn(YHt,W1n,28,t+1,15,1),n,t,e,i),r}function Inn(n,t,e,i,r,c){var a;return a=PTn(r,i),10!=r&&Uhn(cT(n,c),t,e,r,a),a}function Onn(n,t,e){var i,r;for(r=new Zsn(t,n),i=0;ie||t=0?n.Lh(e,!0,!0):YNn(n,t,!0)}function ktn(n,t,e){var i;return i=Ufn(n,t,e),n.b=new Don(i.c.length),ZFn(n,i)}function ytn(n){if(n.b<=0)throw hv(new Bv);return--n.b,n.a-=n.c.c,xwn(n.a)}function Mtn(n){var t;if(!n.a)throw hv(new EY);return t=n.a,n.a=R0(n.a),t}function Ttn(n){for(;!n.a;)if(!y_(n.c,new yd(n)))return!1;return!0}function jtn(n){return WW(n),F$(n,204)?uG(n,204):new sb(n)}function Etn(n){Stn(),uG(n.of((XYn(),bDt)),181).Fc((eNn(),dRt)),n.qf(lDt,null)}function Stn(){Stn=E,tNt=new hu,iNt=new fu,eNt=Rln((XYn(),lDt),tNt,q$t,iNt)}function Ptn(){Ptn=E,cIt=new nO("LEAF_NUMBER",0),aIt=new nO("NODE_SIZE",1)}function Ctn(n){n.a=Inn(YHt,W1n,28,n.b+1,15,1),n.c=Inn(YHt,W1n,28,n.b,15,1),n.d=0}function Itn(n,t){n.a.Ne(t.d,n.b)>0&&(kD(n.c,new wG(t.c,t.d,n.d)),n.b=t.d)}function Otn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.g[t]}function Atn(n,t,e){if(gln(n,e),null!=e&&!n.fk(e))throw hv(new Nv);return e}function Ltn(n,t){return 10!=Min(t)&&Uhn(Tbn(t),t.Sm,t.__elementTypeId$,Min(t),n),n}function Ntn(n,t,e,i){sZ(),i=i||Jot,rLn(n.slice(t,e),n,t,e,-t,i)}function $tn(n,t,e,i,r){return t<0?YNn(n,e,i):uG(e,69).wk().yk(n,n.hi(),t,i,r)}function Dtn(n,t){return ugn(uM(pK(oIn(n,(GYn(),bmt)))),uM(pK(oIn(t,bmt))))}function xtn(){xtn=E,Mut=Abn((Rtn(),Uhn(cT(Tut,1),p1n,303,0,[put,mut,vut,kut])))}function Rtn(){Rtn=E,put=new qP("All",0),mut=new SN,vut=new P$,kut=new EN}function Ktn(){Ktn=E,Ast=new aC(z2n,0),Ost=new aC(G2n,1),Lst=new aC(V2n,2)}function Ftn(){Ftn=E,tXn(),sHt=M0n,uHt=T0n,fHt=new Rw(M0n),hHt=new Rw(T0n)}function _tn(){_tn=E,vht=Abn((ehn(),Uhn(cT(jht,1),p1n,417,0,[pht,wht,dht,ght])))}function Btn(){Btn=E,Rht=Abn((myn(),Uhn(cT(Fht,1),p1n,406,0,[Nht,Lht,$ht,Dht])))}function Htn(){Htn=E,Eht=Abn((vyn(),Uhn(cT(Sht,1),p1n,332,0,[yht,kht,Mht,Tht])))}function Utn(){Utn=E,ibt=Abn((Uvn(),Uhn(cT(abt,1),p1n,389,0,[tbt,Zlt,Ylt,nbt])))}function Gtn(){Gtn=E,Glt=Abn((Xhn(),Uhn(cT(ebt,1),p1n,416,0,[Flt,Hlt,_lt,Blt])))}function qtn(){qtn=E,ldt=Abn((qhn(),Uhn(cT(mdt,1),p1n,421,0,[odt,udt,sdt,hdt])))}function Xtn(){Xtn=E,Wwt=Abn((Ghn(),Uhn(cT(adt,1),p1n,371,0,[zwt,qwt,Xwt,Gwt])))}function ztn(){ztn=E,mjt=Abn((Yyn(),Uhn(cT(jjt,1),p1n,203,0,[djt,gjt,wjt,bjt])))}function Vtn(){Vtn=E,Ujt=Abn((yvn(),Uhn(cT(Xjt,1),p1n,284,0,[Fjt,Kjt,_jt,Bjt])))}function Wtn(){Wtn=E,Ngt=new iI(q4n,0),Lgt=new iI("IMPROVE_STRAIGHTNESS",1)}function Qtn(n,t){var e,i;return i=t/n.c.Rd().gc()|0,e=t%n.c.Rd().gc(),I7(n,i,e)}function Jtn(n){var t;if(n.nl())for(t=n.i-1;t>=0;--t)zrn(n,t);return g5(n)}function Ytn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[0];)e=t;return e}function Ztn(n){var t,e;if(!n.b)return null;for(e=n.b;t=e.a[1];)e=t;return e}function nen(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function ten(n){return F$(n,180)?""+uG(n,180).a:null==n?null:cpn(n)}function een(n,t){if(t.a)throw hv(new Ky(p2n));FV(n.a,t),t.a=n,!n.j&&(n.j=t)}function ien(n,t){rL.call(this,t.zd(),-16449&t.yd()),tJ(n),this.a=n,this.c=t}function ren(n,t){return new LU(t,KR(D$(t.e),t.f.a+n,t.f.b+n),(qx(),!1))}function cen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function aen(n,t){return PU(),kD(n,new WO(t,xwn(t.e.c.length+t.g.c.length)))}function oen(){oen=E,tOt=Abn((dTn(),Uhn(cT(cOt,1),p1n,354,0,[ZIt,JIt,YIt,QIt])))}function uen(){uen=E,KCt=Abn((mbn(),Uhn(cT(BCt,1),p1n,353,0,[xCt,$Ct,DCt,NCt])))}function sen(){sen=E,YSt=Abn((Cjn(),Uhn(cT(ZSt,1),p1n,405,0,[zSt,VSt,WSt,QSt])))}function hen(){hen=E,bxt=Abn((_gn(),Uhn(cT(kxt,1),p1n,223,0,[fxt,sxt,uxt,hxt])))}function fen(){fen=E,Fxt=Abn((Ajn(),Uhn(cT(Wxt,1),p1n,290,0,[Rxt,$xt,Dxt,xxt])))}function len(){len=E,ZRt=Abn((Qmn(),Uhn(cT(sKt,1),p1n,386,0,[QRt,JRt,WRt,VRt])))}function ben(){ben=E,EKt=Abn((qpn(),Uhn(cT(SKt,1),p1n,320,0,[TKt,kKt,MKt,yKt])))}function wen(){wen=E,LKt=Abn((Eln(),Uhn(cT(DKt,1),p1n,415,0,[CKt,IKt,PKt,OKt])))}function den(){den=E,EAt=new uO(g7n,0),PAt=new uO(k9n,1),SAt=new uO(q4n,2)}function gen(n,t,e,i,r){return tJ(n),tJ(t),tJ(e),tJ(i),tJ(r),new WV(n,t,i)}function pen(n,t){var e;return(e=uG(u7(n.e,t),400))?(cq(e),e.e):null}function men(n,t){var e;return-1!=(e=Ten(n,t,0))&&(i7(n,e),!0)}function ven(n,t,e){var i;return GQ(n),(i=new un).a=t,n.a.Nb(new nC(i,e)),i.a}function ken(n){var t;return GQ(n),t=Inn(eUt,I0n,28,0,15,1),tE(n.a,new md(t)),t}function yen(n){var t;if(!oon(n))throw hv(new Bv);return n.e=1,t=n.d,n.d=null,t}function Men(n){var t;return _L(n)&&(t=0-n,!isNaN(t))?t:Esn(gfn(n))}function Ten(n,t,e){for(;e=0?Dyn(n,e,!0,!0):YNn(n,t,!0)}function Ven(n){var t;return null==(t=Kcn(Lsn(n,32)))&&($vn(n),t=Kcn(Lsn(n,32))),t}function Wen(n){var t;return n.Oh()||(t=iQ(n.Dh())-n.ji(),n.$h().Mk(t)),n.zh()}function Qen(n,t){Iht=new et,xht=t,uG((Cht=n).b,68),Rnn(Cht,Iht,null),Szn(Cht)}function Jen(){Jen=E,glt=new dC("XY",0),dlt=new dC("X",1),plt=new dC("Y",2)}function Yen(){Yen=E,Fst=new oC("TOP",0),Kst=new oC(G2n,1),Rst=new oC(Q2n,2)}function Zen(){Zen=E,gpt=new uI(q4n,0),ppt=new uI("TOP",1),dpt=new uI(Q2n,2)}function nin(){nin=E,Gjt=new pI("INPUT_ORDER",0),qjt=new pI("PORT_DEGREE",1)}function tin(){tin=E,Jat=p$(f0n,f0n,524287),Yat=p$(0,0,b0n),Zat=_9(1),_9(2),not=_9(0)}function ein(n){var t;return n.d!=n.r&&(t=bEn(n),n.e=!!t&&t.lk()==srt,n.d=t),n.e}function iin(n,t,e){var i;return i=n.g[t],yD(n,t,n.Zi(t,e)),n.Ri(t,e,i),n.Ni(),i}function rin(n,t){var e;return(e=n.dd(t))>=0&&(n.gd(e),!0)}function cin(n,t){var e;for(WW(n),WW(t),e=!1;t.Ob();)e|=n.Fc(t.Pb());return e}function ain(n,t){var e;return(e=uG(cQ(n.e,t),400))?(nD(n,e),e.e):null}function oin(n){var t,e;return t=n/60|0,0==(e=n%60)?""+t:t+":"+e}function uin(n,t){var e=n.a[t],i=(Cfn(),Wat)[typeof e];return i?i(e):Vbn(typeof e)}function sin(n,t){return vgn(n),new fX(n,new D_(new f7(t,n.a)))}function hin(n){var t;return null!=(t=0==n.b.c.length?null:zq(n.b,0))&&Con(n,0),t}function fin(n,t){var e,i,r;r=t.c.i,i=(e=uG(cQ(n.f,r),60)).d.c-e.e.c,fun(t.a,i,0)}function lin(n,t){var e;for(++n.d,++n.c[t],e=t+1;e=0;)++t[0]}function din(n,t){ycn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function gin(n,t){Mcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function pin(n,t){kcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function min(n,t){vcn(n,null==t||J_((tJ(t),t))||isNaN((tJ(t),t))?0:(tJ(t),t))}function vin(n,t,e){return bD(new MO(e.e.a+e.f.a/2,e.e.b+e.f.b/2),n)==(tJ(t),t)}function kin(n,t){return F$(t,102)&&0!=(uG(t,19).Bb&P0n)?new yL(t,n):new Zsn(t,n)}function yin(n,t){return F$(t,102)&&0!=(uG(t,19).Bb&P0n)?new yL(t,n):new Zsn(t,n)}function Min(n){return null==n.__elementTypeCategory$?10:n.__elementTypeCategory$}function Tin(n,t){return t==(cB(),cB(),uut)?n.toLocaleLowerCase():n.toLowerCase()}function jin(n){if(!n.e)throw hv(new Bv);return n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function Ein(n){if(!n.c)throw hv(new Bv);return n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function Sin(n){var t;for(++n.a,t=n.c.a.length;n.an.a[i]&&(i=e);return i}function Lin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.a==n}function Nin(n){var t;return!!(t=uG(oIn(n,(GYn(),Spt)),313))&&t.i==n}function $in(){$in=E,Ilt=Abn((uIn(),Uhn(cT(Llt,1),p1n,367,0,[Tlt,jlt,Elt,Slt,Plt])))}function Din(){Din=E,vdt=Abn((gPn(),Uhn(cT(Pdt,1),p1n,375,0,[wdt,gdt,pdt,ddt,bdt])))}function xin(){xin=E,wgt=Abn((kvn(),Uhn(cT(pgt,1),p1n,348,0,[sgt,ugt,fgt,lgt,hgt])))}function Rin(){Rin=E,Ejt=Abn((pyn(),Uhn(cT(xjt,1),p1n,323,0,[Tjt,kjt,yjt,vjt,Mjt])))}function Kin(){Kin=E,$mt=Abn((Gpn(),Uhn(cT(ajt,1),p1n,171,0,[Lmt,Cmt,Imt,Omt,Amt])))}function Fin(){Fin=E,rIt=Abn((zPn(),Uhn(cT(oIt,1),p1n,368,0,[tIt,YCt,eIt,ZCt,nIt])))}function _in(){_in=E,BAt=Abn((_Rn(),Uhn(cT(qAt,1),p1n,373,0,[xAt,DAt,KAt,RAt,FAt])))}function Bin(){Bin=E,sLt=Abn((pOn(),Uhn(cT(qLt,1),p1n,324,0,[iLt,rLt,oLt,cLt,aLt])))}function Hin(){Hin=E,ext=Abn((xdn(),Uhn(cT(axt,1),p1n,88,0,[ZDt,YDt,JDt,QDt,nxt])))}function Uin(){Uin=E,bNt=Abn((Rkn(),Uhn(cT(MNt,1),p1n,170,0,[hNt,sNt,oNt,fNt,uNt])))}function Gin(){Gin=E,iRt=Abn((Vkn(),Uhn(cT(hRt,1),p1n,256,0,[Zxt,tRt,Jxt,Yxt,nRt])))}function qin(){qin=E,HRt=Abn((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])))}function Xin(){Xin=E,Yut=new iC("BY_SIZE",0),Zut=new iC("BY_SIZE_AND_SHAPE",1)}function zin(){zin=E,gft=new wC("EADES",0),pft=new wC("FRUCHTERMAN_REINGOLD",1)}function Vin(){Vin=E,dgt=new nI("READING_DIRECTION",0),ggt=new nI("ROTATION",1)}function Win(){Win=E,zlt=new Pt,Vlt=new At,qlt=new Lt,Xlt=new Ot,Wlt=new Nt}function Qin(n){this.b=new Zm,this.a=new Zm,this.c=new Zm,this.d=new Zm,this.e=n}function Jin(n){this.g=n,this.f=new Zm,this.a=e.Math.min(this.g.c.c,this.g.d.c)}function Yin(n,t,e){HF.call(this),Qrn(this),this.a=n,this.c=e,this.b=t.d,this.f=t.e}function Zin(n,t,e){var i;for(i=new Ww(e);i.a=0&&t0?t-1:t,lj(bj(xcn(xG(new fy,e),n.n),n.j),n.k)}function rrn(n){var t;t=new Yk,ttn((!n.q&&(n.q=new fV(p_t,n,11,10)),n.q),t)}function crn(n){return(0!=(2&n.i)?"interface ":0!=(1&n.i)?"":"class ")+(vK(n),n.o)}function arn(n){return dwn(n,vZn)>0?vZn:dwn(n,j1n)<0?j1n:pz(n)}function orn(n){return n<3?(man(n,b1n),n+1):n=-.01&&n.a<=Z2n&&(n.a=0),n.b>=-.01&&n.b<=Z2n&&(n.b=0),n}function Trn(n){var t,e;for(l_n(),e=G9n,t=0;te&&(e=n[t]);return e}function jrn(n,t){var e;if(!(e=EKn(n.Dh(),t)))throw hv(new vM(Gtt+t+ztt));return e}function Ern(n,t){var e;for(e=n;R0(e);)if((e=R0(e))==t)return!0;return!1}function Srn(n,t){var e,i,r;for(i=t.a.ld(),e=uG(t.a.md(),16).gc(),r=0;rn||n>t)throw hv(new YM("fromIndex: 0, toIndex: "+n+Q0n+t))}function Drn(n){if(n<0)throw hv(new vM("Illegal Capacity: "+n));this.g=this.aj(n)}function xrn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)}function Rrn(n,t){var e,i,r,c;for(r=0,c=(i=n.d).length;r0&&(n.a/=t,n.b/=t),n}function Hrn(n){var t;return n.w?n.w:((t=O3(n))&&!t.Vh()&&(n.w=t),t)}function Urn(n,t){var e,i;i=n.a,e=kdn(n,t,null),i!=t&&!n.e&&(e=PWn(n,t,e)),e&&e.oj()}function Grn(n,t,e){var i,r;i=t;do{r=uM(n.p[i.p])+e,n.p[i.p]=r,i=n.a[i.p]}while(i!=t)}function qrn(n,t,e){var i=function(){return n.apply(i,arguments)};return t.apply(i,e),i}function Xrn(n){var t;return null==n?null:NCn(t=uG(n,195),t.length)}function zrn(n,t){if(null==n.g||t>=n.i)throw hv(new pL(t,n.i));return n.Wi(t,n.g[t])}function Vrn(n,t){var e,i;for(hZ(),i=new Zm,e=0;e=14&&t<=16)),n}function Fcn(n,t){var e;return tJ(t),vG(!!(e=n[":"+t]),"Enum constant undefined: "+t),e}function _cn(n,t,e,i,r,c){var a;return Rcn(e,a=VW(n,t)),a.i=r?8:0,a.f=i,a.e=r,a.g=c,a}function Bcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=e}function Hcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=e}function Ucn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=e}function Gcn(n,t,e,i,r){this.d=t,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=e}function qcn(n,t,e,i,r){this.d=t,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=e}function Xcn(n,t){var e,i,r,c;for(r=0,c=(i=t).length;r=0))throw hv(new vM("tolerance ("+n+") must be >= 0"));return n}function uan(n,t){var e;return F$(t,44)?n.c.Mc(t):(e=ymn(n,t),Svn(n,t),e)}function san(n,t,e){return Kbn(n,t),qon(n,e),Pcn(n,0),Ccn(n,1),mdn(n,!0),ddn(n,!0),n}function han(n,t){var e;if(e=n.gc(),t<0||t>e)throw hv(new w_(t,e));return new N_(n,t)}function fan(n,t){n.b=e.Math.max(n.b,t.d),n.e+=t.r+(0==n.a.c.length?0:n.c),kD(n.a,t)}function lan(n){TK(n.c>=0),Rvn(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function ban(n){var t;for(t=n.c.Cc().Kc();t.Ob();)uG(t.Pb(),16).$b();n.c.$b(),n.d=0}function wan(n){var t,e,i,r;for(i=0,r=(e=n.a).length;i=0}function Ban(n,t){n.r>0&&n.c0&&0!=n.g&&Ban(n.i,t/n.r*n.i.d))}function Han(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Uan(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,4,e,n.c))}function Gan(n,t){var e;e=n.k,n.k=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.k))}function qan(n,t){var e;e=n.D,n.D=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,2,e,n.D))}function Xan(n,t){var e;e=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.f))}function zan(n,t){var e;e=n.i,n.i=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,7,e,n.i))}function Van(n,t){var e;e=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,8,e,n.a))}function Wan(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Qan(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,0,e,n.b))}function Jan(n,t){var e;e=n.c,n.c=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.c))}function Yan(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,1,e,n.d))}function Zan(n,t,e){var i;n.b=t,n.a=e,i=512==(512&n.a)?new ay:new $f,n.c=qFn(i,n.b,n.a)}function non(n,t){return EFn(n.e,t)?(PP(),ein(t)?new Cq(t,n):new OA(t,n)):new PA(t,n)}function ton(n){return 0>n?new mS:new OK(null,new i9(n+1,n))}function eon(n,t){var e;return hZ(),e=new sS(1),RA(n)?r2(e,n,t):VAn(e.f,n,t),new Vw(e)}function ion(n,t){var e,i;return e=n.c,(i=t.e[n.p])>0?uG(zq(e.a,i-1),10):null}function ron(n,t){var e,i;return(e=n.o+n.p)<(i=t.o+t.p)?-1:e==i?0:1}function con(n){var t;return F$(t=oIn(n,(GYn(),rmt)),167)?Qpn(uG(t,167)):null}function aon(n){var t;return(n=e.Math.max(n,2))>(t=pfn(n))?(t<<=1)>0?t:d1n:t}function oon(n){switch(_D(3!=n.e),n.e){case 2:return!1;case 0:return!0}return a7(n)}function uon(n,t){var e;return!!F$(t,8)&&(e=uG(t,8),n.a==e.a&&n.b==e.b)}function son(n,t){var e;e=new et,uG(t.b,68),uG(t.b,68),uG(t.b,68),Prn(t.a,new $U(n,e,t))}function hon(n,t){var e,i;for(i=t.vc().Kc();i.Ob();)rSn(n,(e=uG(i.Pb(),44)).ld(),e.md())}function fon(n,t){var e;e=n.d,n.d=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,11,e,n.d))}function lon(n,t){var e;e=n.j,n.j=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,13,e,n.j))}function bon(n,t){var e;e=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,21,e,n.b))}function won(n,t){0==(t9(),Nut?null:t.c).length&&RK(t,new G),r2(n.a,Nut?null:t.c,t)}function don(n,t){t.Ug("Hierarchical port constraint processing",1),ayn(n),yYn(n),t.Vg()}function gon(){gon=E,Sdt=new VC("START",0),Edt=new VC("MIDDLE",1),jdt=new VC("END",2)}function pon(){pon=E,VCt=new YI("P1_NODE_PLACEMENT",0),WCt=new YI("P2_EDGE_ROUTING",1)}function mon(){mon=E,Wft=new Cm(E4n),Qft=new Cm(S4n),Vft=new Cm(P4n),zft=new Cm(C4n)}function von(n){var t;return OB(n.f.g,n.d),MK(n.b),n.c=n.a,t=uG(n.a.Pb(),44),n.b=Phn(n),t}function kon(n){return null==n.b?(EP(),EP(),eBt):n.ul()?n.tl():n.sl()}function yon(n,t){var e;return!((e=null==t?-1:Ten(n.b,t,0))<0||(Con(n,e),0))}function Mon(n,t){var e;return tJ(t),e=t.g,!n.b[e]&&(uQ(n.b,e,t),++n.c,!0)}function Ton(n,t){var e,i;return e=1-t,i=n.a[e],n.a[e]=i.a[t],i.a[t]=n,n.b=!0,i.b=!1,i}function jon(n,t){var e,i;for(i=t.Kc();i.Ob();)e=uG(i.Pb(),272),n.b=!0,FV(n.e,e),e.b=n}function Eon(n,t){var e,i;return e=uG(oIn(n,(jYn(),rTt)),8),i=uG(oIn(t,rTt),8),ugn(e.b,i.b)}function Son(n,t,e){var i,r;return r=t>>5,i=31&t,E3(Dz(n.n[e][r],pz(Nz(i,1))),3)}function Pon(n,t,e){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i0?1:0:(!n.c&&(n.c=j2(Bsn(n.f))),n.c).e}function tun(n,t){t?null==n.B&&(n.B=n.D,n.D=null):null!=n.B&&(n.D=n.B,n.B=null)}function eun(n,t){return Xhn(),n==Flt&&t==Hlt||n==Hlt&&t==Flt||n==Blt&&t==_lt||n==_lt&&t==Blt}function iun(n,t){return Xhn(),n==Flt&&t==_lt||n==Flt&&t==Blt||n==Hlt&&t==Blt||n==Hlt&&t==_lt}function run(n,t){return YN(),oan(Z2n),e.Math.abs(0-t)<=Z2n||0==t||isNaN(0)&&isNaN(t)?0:n/t}function cun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new _g(n)),t))))}function aun(n,t){return uM(pK(yx(cdn(YJ(new fX(null,new h3(n.c.b,16)),new Fg(n)),t))))}function oun(){return r_n(),Uhn(cT(bpt,1),p1n,259,0,[Zgt,tpt,ept,ipt,rpt,cpt,opt,Ygt,npt,apt])}function uun(){return THn(),Uhn(cT(Hjt,1),p1n,243,0,[$jt,Ijt,Ljt,Ojt,Ajt,Sjt,Njt,Djt,Pjt,Cjt])}function sun(n,t){t.Ug("General Compactor",1),Bpn(uG(zDn(n,(jOn(),LIt)),393)).Cg(n)}function hun(n,t){var e,i;return e=uG(zDn(n,(jOn(),FIt)),17),i=uG(zDn(t,FIt),17),d$(e.a,i.a)}function fun(n,t,e){var i,r;for(r=Fkn(n,0);r.b!=r.d.c;)(i=uG(I6(r),8)).a+=t,i.b+=e;return n}function lun(n,t,e){var i;for(i=n.b[e&n.f];i;i=i.b)if(e==i.a&&xQ(t,i.g))return i;return null}function bun(n,t,e){var i;for(i=n.c[e&n.f];i;i=i.d)if(e==i.f&&xQ(t,i.i))return i;return null}function wun(n,t,e){var i,r,c;for(i=0,r=0;r>>31;0!=i&&(n[e]=i)}function dun(n,t,e,i,r,c){var a;this.c=n,tTn(n,a=new Zm,t,n.b,e,i,r,c),this.a=new N4(a,0)}function gun(){this.c=new Vj(0),this.b=new Vj(F9n),this.d=new Vj(K9n),this.a=new Vj(_3n)}function pun(n,t,e,i,r,c,a){_E.call(this,n,t),this.d=e,this.e=i,this.c=r,this.b=c,this.a=n7(a)}function mun(n,t,e,i,r,c,a,o,u,s,h,f,l){return eLn(n,t,e,i,r,c,a,o,u,s,h,f,l),Sgn(n,!1),n}function vun(n){return n.b.c.i.k==(zIn(),lbt)?uG(oIn(n.b.c.i,(GYn(),rmt)),12):n.b.c}function kun(n){return n.b.d.i.k==(zIn(),lbt)?uG(oIn(n.b.d.i,(GYn(),rmt)),12):n.b.d}function yun(n){var t;return _A((t=t6(n)).a,0)?(gS(),gS(),fut):(gS(),new dR(t.b))}function Mun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.b))}function Tun(n){var t;return _A((t=Z4(n)).a,0)?(dS(),dS(),hut):(dS(),new wR(t.c))}function jun(n){switch(n.g){case 2:return KQn(),_Rt;case 4:return KQn(),kRt;default:return n}}function Eun(n){switch(n.g){case 1:return KQn(),KRt;case 3:return KQn(),yRt;default:return n}}function Sun(n){switch(n.g){case 0:return new Wo;case 1:return new Qo;default:return null}}function Pun(){Pun=E,Hwt=new uF("edgelabelcenterednessanalysis.includelabel",(qx(),tot))}function Cun(){Cun=E,FEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Iun(){Iun=E,XEt=Lvn(gL(Aq(Aq(new wJ,(uIn(),Elt),(zYn(),kwt)),Slt,hwt),Plt),vwt)}function Oun(){Oun=E,V_t=new Qk,Q_t=Uhn(cT(o_t,1),krt,179,0,[]),W_t=Uhn(cT(p_t,1),yrt,62,0,[])}function Aun(){Aun=E,Obt=new PC("TO_INTERNAL_LTR",0),Ibt=new PC("TO_INPUT_DIRECTION",1)}function Lun(){Lun=E,Tbt=new Bt,ybt=new Ht,Mbt=new Ut,kbt=new Gt,jbt=new qt,Ebt=new Xt}function Nun(n,t){t.Ug(g6n,1),Apn(FS(new Ad((zS(),new mY(n,!1,!1,new Ft))))),t.Vg()}function $un(n,t,e){e.Ug("DFS Treeifying phase",1),qmn(n,t),qKn(n,t),n.a=null,n.b=null,e.Vg()}function Dun(n,t){return qx(),RA(n)?r7(n,mK(t)):FA(n)?Rz(n,pK(t)):KA(n)?xz(n,gK(t)):n.Fd(t)}function xun(n,t){var e,i;for(tJ(t),i=t.vc().Kc();i.Ob();)e=uG(i.Pb(),44),n.zc(e.ld(),e.md())}function Run(n,t,e){var i;for(i=e.Kc();i.Ob();)if(!H5(n,t,i.Pb()))return!1;return!0}function Kun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Rh(t,-1-(-1==c?i:c),null,r)),r}function Fun(n,t,e,i,r){var c;return e&&(c=emn(t.Dh(),n.c),r=e.Th(t,-1-(-1==c?i:c),null,r)),r}function _un(n){var t;if(-2==n.b){if(0==n.e)t=-1;else for(t=0;0==n.a[t];t++);n.b=t}return n.b}function Bun(n){if(tJ(n),0==n.length)throw hv(new ZM("Zero length BigInteger"));XHn(this,n)}function Hun(n){this.i=n.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Uun(n,t,e){this.g=n,this.d=t,this.e=e,this.a=new Zm,RLn(this),hZ(),f$(this.a,null)}function Gun(n,t){t.q=n,n.d=e.Math.max(n.d,t.r),n.b+=t.d+(0==n.a.c.length?0:n.c),kD(n.a,t)}function qun(n,t){var e,i,r,c;return r=n.c,e=n.c+n.b,c=n.d,i=n.d+n.a,t.a>r&&t.ac&&t.b(r=n.a.length)?e=r:s3(t,e+1),n.a=r1(n.a,0,t)+""+i+sQ(n.a,e)}function msn(n,t){n.a=Lgn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d=Lgn(n.d,t)}function vsn(n,t){return t1||n.Ob())return++n.a,n.g=0,t=n.i,n.Ob(),t;throw hv(new Bv)}function Fsn(n){switch(n.a.g){case 1:return new KI;case 3:return new zTn;default:return new ml}}function _sn(n,t){switch(t){case 1:return!!n.n&&0!=n.n.i;case 2:return null!=n.k}return j4(n,t)}function Bsn(n){return p0n>22),r=n.h+t.h+(i>>22),p$(e&f0n,i&f0n,r&l0n)}function Thn(n,t){var e,i,r;return e=n.l-t.l,i=n.m-t.m+(e>>22),r=n.h-t.h+(i>>22),p$(e&f0n,i&f0n,r&l0n)}function jhn(n){var t,e;for(BQn(n),e=new Ww(n.d);e.a(i=n.gc()))throw hv(new w_(t,i));return n.Si()&&(e=A0(n,e)),n.Ei(t,e)}function wfn(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)eTn(n,c,a)||HBn(n,c,a,!0,!1)}function dfn(n){var t,e,i;for(l_n(),e=Inn(PNt,zZn,8,2,0,1),i=0,t=0;t<2;t++)i+=.5,e[t]=WMn(i,n);return e}function gfn(n){var t,e;return p$(t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,~n.h+(0==t&&0==e?1:0)&l0n)}function pfn(n){var t;if(n<0)return j1n;if(0==n)return 0;for(t=d1n;0==(t&n);t>>=1);return t}function mfn(n,t,e){return!(n>=128)&&HA(n<64?E3(Nz(1,n),e):E3(Nz(1,n-64),t),0)}function vfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function kfn(n,t,e){return null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e)),n}function yfn(n){var t,e;return zsn(e=new d7,n),kfn(e,(mon(),Wft),n),kqn(n,e,t=new Ym),zWn(n,e,t),e}function Mfn(n){var t,e;return t=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,e=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,t||e}function Tfn(n,t){var e,i,r;for(e=!1,i=n.a[t].length,r=0;r=0,"Negative initial capacity"),vG(t>=0,"Non-positive load factor"),$V(this)}function $fn(n,t,e,i,r){var c,a;if(a=n.length,c=e.length,t<0||i<0||r<0||t+r>a||i+r>c)throw hv(new Lv)}function Dfn(n,t){var e,i,r,c,a;for(hZ(),a=!1,r=0,c=(i=t).length;r1||t>=0&&n.b<3)}function Yfn(n){var t,e,i;t=1+~n.l&f0n,e=~n.m+(0==t?1:0)&f0n,i=~n.h+(0==t&&0==e?1:0)&l0n,n.l=t,n.m=e,n.h=i}function Zfn(n){var t,e,i;for(hZ(),i=1,e=n.Kc();e.Ob();)i=31*i+(null!=(t=e.Pb())?Hon(t):0),i|=0;return i}function nln(n,t,e,i,r){var c;return c=gDn(n,t),e&&Yfn(c),r&&(n=hTn(n,t),Qat=i?gfn(n):p$(n.l,n.m,n.h)),c}function tln(n,t,e){n.g=mAn(n,t,(KQn(),kRt),n.b),n.d=mAn(n,e,kRt,n.b),0!=n.g.c&&0!=n.d.c&&AIn(n)}function eln(n,t,e){n.g=mAn(n,t,(KQn(),_Rt),n.j),n.d=mAn(n,e,_Rt,n.j),0!=n.g.c&&0!=n.d.c&&AIn(n)}function iln(n,t){switch(t){case 7:return!!n.e&&0!=n.e.i;case 8:return!!n.d&&0!=n.d.i}return Kpn(n,t)}function rln(n,t){switch(t.g){case 0:F$(n.b,641)||(n.b=new lsn);break;case 1:F$(n.b,642)||(n.b=new zG)}}function cln(n){if(0===n.g)return new eu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function aln(n){if(0===n.g)return new nu;throw hv(new vM(lnt+(null!=n.f?n.f:""+n.g)))}function oln(n,t,e){return!Qj(JJ(new fX(null,new h3(n.c,16)),new hd(new GO(t,e)))).Bd((vS(),Kut))}function uln(n,t){return bD($kn(uG(oIn(t,(QGn(),cCt)),88)),new MO(n.c.e.a-n.b.e.a,n.c.e.b-n.b.e.b))<=0}function sln(n,t){for(;null!=n.g||n.c?null==n.g||0!=n.i&&uG(n.g[n.i-1],51).Ob():O0(n);)yA(t,Wxn(n))}function hln(n){var t;for(t=new Ww(n.a.b);t.ai?1:0}function yln(n){return kD(n.c,(Whn(),ZLt)),xrn(n.a,uM(pK(Jkn((lmn(),WTt)))))?new zu:new zp(n)}function Mln(n){for(;!n.d||!n.d.Ob();){if(!n.b||LM(n.b))return null;n.d=uG(xV(n.b),51)}return n.d}function Tln(n){switch(n.g){case 1:return K9n;default:case 2:return 0;case 3:return _3n;case 4:return F9n}}function jln(){var n;return QYn(),VHt||(n=eR(kJn("M",!0)),n=CX(kJn("M",!1),n),VHt=n)}function Eln(){Eln=E,CKt=new uA("ELK",0),IKt=new uA("JSON",1),PKt=new uA("DOT",2),OKt=new uA("SVG",3)}function Sln(){Sln=E,aEt=new kI("STACKED",0),rEt=new kI("REVERSE_STACKED",1),cEt=new kI("SEQUENCED",2)}function Pln(){Pln=E,gPt=new WI(q4n,0),dPt=new WI("MIDDLE_TO_MIDDLE",1),wPt=new WI("AVOID_OVERLAP",2)}function Cln(){Cln=E,tdt=new ji,edt=new Ei,ndt=new Mi,Zwt=new Si,tJ(new Ti),Ywt=new L}function Iln(){Iln=E,Pxt=new CN(15),Sxt=new _N((XYn(),W$t),Pxt),Cxt=mDt,Mxt=a$t,Txt=_$t,Ext=U$t,jxt=H$t}function Oln(n,t){var e,i,r,c,a;for(r=0,c=(i=t).length;r=n.b.c.length||(_ln(n,2*t+1),(e=2*t+2)0&&(t.Cd(e),e.i&&Zdn(e))}function Hln(n,t,e){var i;for(i=e-1;i>=0&&n[i]===t[i];i--);return i<0?0:$P(E3(n[i],L0n),E3(t[i],L0n))?-1:1}function Uln(n,t,e){var i,r;this.g=n,this.c=t,this.a=this,this.d=this,r=aon(e),i=Inn($at,l1n,227,r,0,1),this.b=i}function Gln(n,t,e,i,r){var c,a;for(a=e;a<=r;a++)for(c=t;c<=i;c++)if(eTn(n,c,a))return!0;return!1}function qln(n,t){var e;for(e=n.Zb().Cc().Kc();e.Ob();)if(uG(e.Pb(),16).Hc(t))return!0;return!1}function Xln(n,t,e){var i,r,c,a;for(tJ(e),a=!1,c=n.fd(t),r=e.Kc();r.Ob();)i=r.Pb(),c.Rb(i),a=!0;return a}function zln(n,t){var e,i;return i=uG(Lsn(n.a,4),129),e=Inn(xFt,Uit,424,t,0,1),null!=i&&qGn(i,0,e,0,i.length),e}function Vln(n,t){var e;return e=new Z_n(0!=(256&n.f),n.i,n.a,n.d,0!=(16&n.f),n.j,n.g,t),null!=n.e||(e.c=n),e}function Wln(n,t){var e;return n===t||!!F$(t,85)&&(e=uG(t,85),OOn(Mz(n),e.vc()))}function Qln(n,t,e){var i,r;for(r=e.Kc();r.Ob();)if(i=uG(r.Pb(),44),n.Be(t,i.md()))return!0;return!1}function Jln(n,t,e){return n.d[t.p][e.p]||(Kyn(n,t,e),n.d[t.p][e.p]=!0,n.d[e.p][t.p]=!0),n.a[t.p][e.p]}function Yln(n,t){return!(!n||n==t||!vR(t,(GYn(),zpt)))&&uG(oIn(t,(GYn(),zpt)),10)!=n}function Zln(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.$l()}}function nbn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n._l()}}function tbn(n){U0.call(this,"The given string does not match the expected format for individual spacings.",n)}function ebn(n,t){var e;t.Ug("Min Size Preprocessing",1),e=xAn(n),Myn(n,(lBn(),EOt),e.a),Myn(n,MOt,e.b),t.Vg()}function ibn(n){var t,e,i;for(t=0,i=Inn(PNt,zZn,8,n.b,0,1),e=Fkn(n,0);e.b!=e.d.c;)i[t++]=uG(I6(e),8);return i}function rbn(n,t,e){var i,r;for(i=new lS,r=Fkn(e,0);r.b!=r.d.c;)aq(i,new eN(uG(I6(r),8)));Xln(n,t,i)}function cbn(n,t){var e;return e=Lgn(n,t),$P(P3(n,t),0)|BA(P3(n,e),0)?e:Lgn(YZn,P3(Dz(e,63),1))}function abn(n,t){var e,i;return(e=uG(n.d.Bc(t),16))?((i=n.e.hc()).Gc(e),n.e.d-=e.gc(),e.$b(),i):null}function obn(n){var t;if((t=n.a.c.length)>0)return Vz(t-1,n.a.c.length),i7(n.a,t-1);throw hv(new _v)}function ubn(n,t,e){if(n>t)throw hv(new vM(o2n+n+u2n+t));if(n<0||t>e)throw hv(new YM(o2n+n+s2n+t+Q0n+e))}function sbn(n,t){null==n.D&&null!=n.B&&(n.D=n.B,n.B=null),qan(n,null==t?null:(tJ(t),t)),n.C&&n.hl(null)}function hbn(n,t){var e;e=null!=Jkn((lmn(),WTt))&&null!=t.Sg()?uM(pK(t.Sg()))/uM(pK(Jkn(WTt))):1,vJ(n.b,t,e)}function fbn(n,t){var e,i;if(0!=(i=n.c[t]))for(n.c[t]=0,n.d-=i,e=t+1;eR9n?n-i>R9n:i-n>R9n)}function Qbn(n,t){var e;for(e=0;er&&(USn(t.q,r),i=e!=t.q.d)),i}function Zbn(n,t){var i,r,c,a,o;return a=t.i,o=t.j,r=a-(i=n.f).i,c=o-i.j,e.Math.sqrt(r*r+c*c)}function nwn(n,t){var e;return(e=Kvn(n))||(!ZKt&&(ZKt=new Ps),ZXn(),ttn((e=new Xm(sxn(t))).El(),n)),e}function twn(n,t){var e,i;return(e=uG(n.c.Bc(t),16))?((i=n.hc()).Gc(e),n.d-=e.gc(),e.$b(),n.mc(i)):n.jc()}function ewn(n,t){var e,i;for(i=0!=uRn(n.d,1),e=!0;e;)e=!1,e=t.c.mg(t.e,i),e|=PKn(n,t,i,!1),i=!i;Gon(n)}function iwn(n,t,e,i){var r,c;n.a=t,c=i?0:1,n.f=(r=new _On(n.c,n.a,e,c),new eBn(e,n.a,r,n.e,n.b,n.c==(ean(),BEt)))}function rwn(n){var t;return MK(n.a!=n.b),t=n.d.a[n.a],jK(n.b==n.d.c&&null!=t),n.c=n.a,n.a=n.a+1&n.d.a.length-1,t}function cwn(n){var t;if(0!=n.c)return n.c;for(t=0;t=n.c.b:n.a<=n.c.b))throw hv(new Bv);return t=n.a,n.a+=n.c.c,++n.b,xwn(t)}function own(n){var t;return zsn(t=new S$(n.a),n),kfn(t,(GYn(),rmt),n),t.o.a=n.g,t.o.b=n.f,t.n.a=n.i,t.n.b=n.j,t}function uwn(n){return(KQn(),LRt).Hc(n.j)?uM(pK(oIn(n,(GYn(),Mmt)))):Gfn(Uhn(cT(PNt,1),zZn,8,0,[n.i.n,n.n,n.a])).b}function swn(n){var t;return t=aN(KEt),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),rpt))&&Aq(t,(uIn(),Elt),(zYn(),Cwt)),t}function hwn(n){var t,e;for(e=new ek,t=new Ww(n);t.a=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function pwn(n,t){var e,i,r;for(r=1,e=n,i=t>=0?t:-t;i>0;)i%2==0?(e*=e,i=i/2|0):(r*=e,i-=1);return t<0?1/r:r}function mwn(n,t){var e,i,r,c;return(c=fLn((i=t,(r=n?Kvn(n):null)&&r.Gl(),i)))==t&&(e=Kvn(n))&&e.Gl(),c}function vwn(n,t,e){var i,r;return r=n.f,n.f=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,0,r,t),e?e.nj(i):e=i),e}function kwn(n,t,e){var i,r;return r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,3,r,t),e?e.nj(i):e=i),e}function ywn(n,t,e){var i,r;return r=n.a,n.a=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,1,r,t),e?e.nj(i):e=i),e}function Mwn(n){var t,e,i,r;if(null!=n)for(e=0;e=i||t-129&&n<128?(XG(),!(e=bot[t=n+128])&&(e=bot[t]=new Iw(n)),e):new Iw(n)}function Rwn(n){var t,e;return n>-129&&n<128?(eX(),!(e=Mot[t=n+128])&&(e=Mot[t]=new Aw(n)),e):new Aw(n)}function Kwn(n,t){n.a.c.length>0&&Lln(uG(zq(n.a,n.a.c.length-1),579),t)||kD(n.a,new r9(t))}function Fwn(n){var t,e;GB(),t=n.d.c-n.e.c,Prn((e=uG(n.g,154)).b,new Pg(t)),Prn(e.c,new Cg(t)),z8(e.i,new Ig(t))}function _wn(n){var t;return(t=new WM).a+="VerticalSegment ",QA(t,n.e),t.a+=" ",JA(t,KD(new FM,new Ww(n.k))),t.a}function Bwn(n,t){var e,i;for(e=0,i=Dgn(n,t).Kc();i.Ob();)e+=null!=oIn(uG(i.Pb(),12),(GYn(),lmt))?1:0;return e}function Hwn(n,t,e){var i,r,c;for(i=0,c=Fkn(n,0);c.b!=c.d.c&&!((r=uM(pK(I6(c))))>e);)r>=t&&++i;return i}function Uwn(n,t){WW(n);try{return n._b(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Gwn(n,t){WW(n);try{return n.Hc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function qwn(n,t){WW(n);try{return n.Mc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return!1;throw hv(e)}}function Xwn(n,t){WW(n);try{return n.xc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function zwn(n,t){WW(n);try{return n.Bc(t)}catch(e){if(F$(e=Ehn(e),212)||F$(e,169))return null;throw hv(e)}}function Vwn(n,t){switch(t.g){case 2:case 1:return Dgn(n,t);case 3:case 4:return Spn(Dgn(n,t))}return hZ(),hZ(),zot}function Wwn(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (name: ",VA(t,n.zb),t.a+=")",t.a)}function Qwn(n){var t;return(t=uG(ain(n.c.c,""),233))||(t=new I2(UT(HT(new du,""),"Other")),Akn(n.c.c,"",t)),t}function Jwn(n,t,e){var i,r;return r=n.sb,n.sb=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),e}function Ywn(n,t,e){var i,r;return r=n.r,n.r=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,8,r,n.r),e?e.nj(i):e=i),e}function Zwn(n,t,e){var i;return i=new Ken(n.e,4,13,t.c||(YYn(),N_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function ndn(n,t,e){var i;return i=new Ken(n.e,3,13,null,t.c||(YYn(),N_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function tdn(n,t){var e,i;return!(i=(e=uG(t,691)).el())&&e.fl(i=F$(t,90)?new CA(n,uG(t,29)):new g4(n,uG(t,156))),i}function edn(n,t,e){var i;n._i(n.i+1),i=n.Zi(t,e),t!=n.i&&qGn(n.g,t,n.g,t+1,n.i-t),uQ(n.g,t,i),++n.i,n.Mi(t,e),n.Ni()}function idn(n,t){var e;return t.a&&(e=t.a.a.length,n.a?JA(n.a,n.b):n.a=new lx(n.d),L4(n.a,t.a,t.d.length,e)),n}function rdn(n,t){var e;n.c=t,n.a=Jpn(t),n.a<54&&(n.f=(e=t.d>1?C4(t.a[0],t.a[1]):C4(t.a[0],0),W4(t.e>0?e:Men(e))))}function cdn(n,t){var e;return e=new un,n.a.Bd(e)?(UD(),new Xy(tJ(ven(n,e.a,t)))):(GQ(n),UD(),UD(),sut)}function adn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Oe),WNn(e,t))}function odn(n,t){var e;0!=n.c.length&&(zL(e=uG(Ekn(n,Inn(pbt,e6n,10,n.c.length,0,1)),199),new Ae),WNn(e,t))}function udn(n,t){return RA(n)?m_(n,t):FA(n)?p_(n,t):KA(n)?(tJ(n),xA(n)===xA(t)):Cz(n)?n.Fb(t):xX(n)?SL(n,t):j3(n,t)}function sdn(n,t,e){if(t<0)zLn(n,e);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ek(n,n.hi(),t)}}function hdn(n,t,e){if(n<0||t>e)throw hv(new dM(o2n+n+s2n+t+", size: "+e));if(n>t)throw hv(new vM(o2n+n+u2n+t))}function fdn(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (source: ",VA(t,n.d),t.a+=")",t.a)}function ldn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function bdn(n){var t,e,i,r;for(JYn(),i=0,r=(e=Nkn()).length;i=0?Rmn(n):hW(Rmn(Men(n))))}function Sdn(n,t,e,i,r,c){this.e=new Zm,this.f=(can(),Qjt),kD(this.e,n),this.d=t,this.a=e,this.b=i,this.f=r,this.c=c}function Pdn(n,t,i){n.n=Jq(nUt,[zZn,E0n],[376,28],14,[i,t0(e.Math.ceil(t/32))],2),n.o=t,n.p=i,n.j=t-1>>1,n.k=i-1>>1}function Cdn(n){return n=((n=((n-=n>>1&1431655765)>>2&858993459)+(858993459&n))>>4)+n&252645135,n+=n>>8,63&(n+=n>>16)}function Idn(n,t){var e,i;for(i=new DD(n);i.e!=i.i.gc();)if(e=uG(Zkn(i),142),xA(t)===xA(e))return!0;return!1}function Odn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(JXn(Len(n,r),""),29))?hxn(n,i,t,e):null}function Adn(n,t,e){var i,r;return(r=jxn(n.b,t))&&(i=uG(JXn(Len(n,r),""),29))?fxn(n,i,t,e):null}function Ldn(n,t){var e;if(null==(e=dcn(n.i,t)))throw hv(new SM("Node did not exist in input."));return Qun(t,e),null}function Ndn(n,t){var e;if(F$(e=EKn(n,t),331))return uG(e,35);throw hv(new vM(Gtt+t+"' is not a valid attribute"))}function $dn(n,t,e){var i;if(t>(i=n.gc()))throw hv(new w_(t,i));if(n.Si()&&n.Hc(e))throw hv(new vM(Xet));n.Gi(t,e)}function Ddn(n,t){t.Ug("Sort end labels",1),kS(JJ(sin(new fX(null,new h3(n.b,16)),new we),new de),new ge),t.Vg()}function xdn(){xdn=E,ZDt=new PO(Y2n,0),YDt=new PO(V2n,1),JDt=new PO(z2n,2),QDt=new PO(c3n,3),nxt=new PO("UP",4)}function Rdn(){Rdn=E,HAt=new fO("P1_STRUCTURE",0),UAt=new fO("P2_PROCESSING_ORDER",1),GAt=new fO("P3_EXECUTION",2)}function Kdn(){Kdn=E,qCt=Lvn(Lvn(gP(Lvn(Lvn(gP(Aq(new wJ,(Cjn(),VSt),(OHn(),fPt)),WSt),oPt),sPt),QSt),iPt),hPt)}function Fdn(n){switch(uG(oIn(n,(GYn(),Xpt)),311).g){case 1:kfn(n,Xpt,(Zen(),dpt));break;case 2:kfn(n,Xpt,(Zen(),ppt))}}function _dn(n){switch(n){case 0:return new Fk;case 1:return new Rk;case 2:return new Kk;default:throw hv(new Dv)}}function Bdn(n){switch(n.g){case 2:return YDt;case 1:return JDt;case 4:return QDt;case 3:return nxt;default:return ZDt}}function Hdn(n,t){switch(n.b.g){case 0:case 1:return t;case 2:case 3:return new gY(t.d,0,t.a,t.b);default:return null}}function Udn(n){switch(n.g){case 1:return _Rt;case 2:return yRt;case 3:return kRt;case 4:return KRt;default:return FRt}}function Gdn(n){switch(n.g){case 1:return KRt;case 2:return _Rt;case 3:return yRt;case 4:return kRt;default:return FRt}}function qdn(n){switch(n.g){case 1:return kRt;case 2:return KRt;case 3:return _Rt;case 4:return yRt;default:return FRt}}function Xdn(n,t,e,i){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),n.n;case 2:return n.k}return ajn(n,t,e,i)}function zdn(n,t,e){var i,r;return n.Pj()?(r=n.Qj(),i=HNn(n,t,e),n.Jj(n.Ij(7,xwn(e),i,t,r)),i):HNn(n,t,e)}function Vdn(n,t){var e,i,r;null==n.d?(++n.e,--n.f):(r=t.ld(),S7(n,i=((e=t.Bi())&vZn)%n.d.length,Txn(n,i,e,r)))}function Wdn(n,t){var e;e=0!=(n.Bb&w1n),t?n.Bb|=w1n:n.Bb&=-1025,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,10,e,t))}function Qdn(n,t){var e;e=0!=(n.Bb&j0n),t?n.Bb|=j0n:n.Bb&=-4097,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,12,e,t))}function Jdn(n,t){var e;e=0!=(n.Bb&hrt),t?n.Bb|=hrt:n.Bb&=-8193,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,15,e,t))}function Ydn(n,t){var e;e=0!=(n.Bb&frt),t?n.Bb|=frt:n.Bb&=-2049,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,11,e,t))}function Zdn(n){var t;n.g&&(CFn((t=n.c.kg()?n.f:n.a).a,n.o,!0),CFn(t.a,n.o,!1),kfn(n.o,(jYn(),JMt),($Pn(),rRt)))}function ngn(n){var t;if(!n.a)throw hv(new kM("Cannot offset an unassigned cut."));t=n.c-n.b,n.b+=t,iZ(n,t),eZ(n,t)}function tgn(n,t){var e;if(null==(e=cQ(n.k,t)))throw hv(new SM("Port did not exist in input."));return Qun(t,e),null}function egn(n){var t,e;for(e=bxn(Hrn(n)).Kc();e.Ob();)if(qUn(n,t=mK(e.Pb())))return h8((yP(),r_t),t);return null}function ign(n){var t,e;for(e=n.p.a.ec().Kc();e.Ob();)if((t=uG(e.Pb(),218)).f&&n.b[t.c]<-1e-10)return t;return null}function rgn(n){var t,e;for(e=jQ(new WM,91),t=!0;n.Ob();)t||(e.a+=TZn),t=!1,QA(e,n.Pb());return(e.a+="]",e).a}function cgn(n){var t,e,i;for(t=new Zm,i=new Ww(n.b);i.at?1:n==t?0==n?ugn(1/n,1/t):0:isNaN(n)?isNaN(t)?0:1:-1}function sgn(n){var t;return null==(t=n.a[n.c-1&n.a.length-1])?null:(n.c=n.c-1&n.a.length-1,uQ(n.a,n.c,null),t)}function hgn(n){var t,e,i;for(i=0,e=n.length,t=0;t=1?YDt:QDt:t}function mgn(n){switch(uG(oIn(n,(jYn(),Vyt)),223).g){case 1:return new ic;case 3:return new uc;default:return new ec}}function vgn(n){if(n.c)vgn(n.c);else if(n.d)throw hv(new kM("Stream already terminated, can't be modified or used"))}function kgn(n,t,e){var i;return i=n.a.get(t),n.a.set(t,void 0===e?null:e),void 0===i?(++n.c,++n.b.g):++n.d,i}function ygn(n,t,e){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=uG(r.Pb(),10),yhn(e,uG(zq(t,i.p),16)))return i;return null}function Mgn(n,t,e){var i;return i=0,t&&(fN(n.a)?i+=t.f.a/2:i+=t.f.b/2),e&&(fN(n.a)?i+=e.f.a/2:i+=e.f.b/2),i}function Tgn(n,t,e){var i;!(i=e)&&(i=xG(new fy,0)),i.Ug(K4n,2),zyn(n.b,t,i.eh(1)),Xzn(n,t,i.eh(1)),hJn(t,i.eh(1)),i.Vg()}function jgn(n,t,e){var i;return gj(),Scn(i=new ns,t),pcn(i,e),n&&ttn((!n.a&&(n.a=new MD(eFt,n,5)),n.a),i),i}function Egn(n){var t;return 0!=(64&n.Db)?vxn(n):((t=new fx(vxn(n))).a+=" (identifier: ",VA(t,n.k),t.a+=")",t.a)}function Sgn(n,t){var e;e=0!=(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Pgn(n,t){var e;e=0!=(n.Bb&Qtt),t?n.Bb|=Qtt:n.Bb&=-32769,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,18,e,t))}function Cgn(n,t){var e;e=0!=(n.Bb&VZn),t?n.Bb|=VZn:n.Bb&=-16385,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,16,e,t))}function Ign(n,t){var e;e=0!=(n.Bb&P0n),t?n.Bb|=P0n:n.Bb&=-65537,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new j9(n,1,20,e,t))}function Ogn(n){var t;return t=Inn(JHt,N1n,28,2,15,1),n-=P0n,t[0]=(n>>10)+C0n&D1n,t[1]=56320+(1023&n)&D1n,mvn(t,0,t.length)}function Agn(n){var t;return(t=YIn(n))>34028234663852886e22?M0n:t<-34028234663852886e22?T0n:t}function Lgn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n+t)&&e"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Kgn(n,t){return m_(t.b&&t.c?V3(t.b)+"->"+V3(t.c):"e_"+Hon(t),n.b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))}function Fgn(n,t){return YN(),oan(T1n),e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t))}function _gn(){_gn=E,fxt=new IO(Y2n,0),sxt=new IO("POLYLINE",1),uxt=new IO("ORTHOGONAL",2),hxt=new IO("SPLINES",3)}function Bgn(){Bgn=E,IOt=new aO("ASPECT_RATIO_DRIVEN",0),OOt=new aO("MAX_SCALE_DRIVEN",1),COt=new aO("AREA_DRIVEN",2)}function Hgn(n,t,e){try{Vfn(n,t,e)}catch(i){throw F$(i=Ehn(i),606)?hv(new x9(i)):hv(i)}return t}function Ugn(n){var t,e;for(t=0,e=n.length;tt&&i.Ne(n[c-1],n[c])>0;--c)a=n[c],uQ(n,c,n[c-1]),uQ(n,c-1,a)}function Zgn(n,t){var e,i,r,c,a;if(e=t.f,Akn(n.c.d,e,t),null!=t.g)for(c=0,a=(r=t.g).length;ct){F4(e);break}}lW(e,t)}function tpn(n,t){var i,r;r=uM(pK(Omn(z4(t),(jYn(),dTt)))),TEn(t,i=e.Math.max(0,r/2-.5),1),kD(n,new xC(t,i))}function epn(n,t,e){e.Ug("Straight Line Edge Routing",1),e.dh(t,l7n),DXn(n,uG(zDn(t,(SK(),zCt)),27)),e.dh(t,w7n)}function ipn(n,t){0==n.n.c.length&&kD(n.n,new c0(n.s,n.t,n.i)),kD(n.b,t),zMn(uG(zq(n.n,n.n.c.length-1),209),t),nqn(n,t)}function rpn(n){var t;this.a=new nB(t=uG(n.e&&n.e(),9),uG(MF(t,t.length),9),0),this.b=Inn(dat,EZn,1,this.a.a.length,5,1)}function cpn(n){return Array.isArray(n)&&n.Tm===j?Ij(Tbn(n))+"@"+(Hon(n)>>>0).toString(16):n.toString()}function apn(n,t){return n.h==b0n&&0==n.m&&0==n.l?(t&&(Qat=p$(0,0,0)),LL((tin(),Zat))):(t&&(Qat=p$(n.l,n.m,n.h)),p$(0,0,0))}function opn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function upn(n,t){switch(t.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function spn(n,t,e,i){switch(t){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return Xdn(n,t,e,i)}function hpn(n,t){if(t==n.d)return n.e;if(t==n.e)return n.d;throw hv(new vM("Node "+t+" not part of edge "+n))}function fpn(n,t){var e;if(F$(e=EKn(n.Dh(),t),102))return uG(e,19);throw hv(new vM(Gtt+t+"' is not a valid reference"))}function lpn(n,t,e,i){if(t<0)lRn(n,e,i);else{if(!e.rk())throw hv(new vM(Gtt+e.xe()+qtt));uG(e,69).wk().Ck(n,n.hi(),t,i)}}function bpn(n){var t;if(n.b){if(bpn(n.b),n.b.d!=n.c)throw hv(new Fv)}else n.d.dc()&&(t=uG(n.f.c.xc(n.e),16))&&(n.d=t)}function wpn(n){var t,e;for(VK(),t=n.o.b,e=uG(uG(Y9(n.r,(KQn(),KRt)),21),87).Kc();e.Ob();)uG(e.Pb(),117).e.b+=t}function dpn(n){var t,e,i;for(this.a=new XL,i=new Ww(n);i.a=r)return t.c+e;return t.c+t.b.gc()}function ppn(n,t){var e,i,r,c;for(EK(),r=t,Ntn(i=Jtn(n),0,i.length,r),e=0;e0&&(i+=r,++e);return e>1&&(i+=n.d*(e-1)),i}function Mpn(n){var t,e,i;return i=gCn(n),!pE(n.c)&&(nrn(i,"knownLayouters",e=new Ib),t=new jm(e),z8(n.c,t)),i}function Tpn(n){var t,e,i;for((i=new zM).a+="[",t=0,e=n.gc();t0&&(s3(t-1,n.length),58==n.charCodeAt(t-1))&&!mpn(n,n_t,t_t)}function Cpn(n,t){var e;return xA(n)===xA(t)||!!F$(t,92)&&(e=uG(t,92),n.e==e.e&&n.d==e.d&&d8(n,e.a))}function Ipn(n){switch(KQn(),n.g){case 4:return yRt;case 1:return kRt;case 3:return KRt;case 2:return _Rt;default:return FRt}}function Opn(n){var t,e;if(n.b)return n.b;for(e=Nut?null:n.d;e;){if(t=Nut?null:e.b)return t;e=Nut?null:e.d}return pS(),Eut}function Apn(n){var t,e;for(e=uM(pK(n.a.of((XYn(),LDt)))),t=new Ww(n.a.Sf());t.a>5),15,1))[e]=1<3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function emn(n,t){var e,i,r;if(null==n.i&&eqn(n),e=n.i,-1!=(i=t.Lj()))for(r=e.length;i=0;--i)for(t=e[i],r=0;r>1,this.k=t-1>>1}function hmn(n){Stn(),uG(n.of((XYn(),q$t)),181).Hc((oUn(),oKt))&&(uG(n.of(bDt),181).Fc((eNn(),pRt)),uG(n.of(q$t),181).Mc(oKt))}function fmn(n){var t,e;t=n.d==(vAn(),Bdt),e=dPn(n),kfn(n.a,(jYn(),byt),t&&!e||!t&&e?(nMn(),LNt):(nMn(),ANt))}function lmn(){lmn=E,ZS(),jYn(),WTt=ETt,QTt=n7(Uhn(cT(lNt,1),m9n,149,0,[wTt,dTt,pTt,mTt,yTt,MTt,TTt,jTt,PTt,ITt,gTt,vTt,STt]))}function bmn(n,t){var e;return(e=uG(l8(n,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15)).Qc(Nq(e.gc()))}function wmn(n,t){var e,i;if((i=new od(n.a.ad(t,!0))).a.gc()<=1)throw hv(new Rv);return(e=i.a.ec().Kc()).Pb(),uG(e.Pb(),39)}function dmn(n,t,e){var i;return i=uM(n.p[t.i.p])+uM(n.d[t.i.p])+t.n.b+t.a.b,uM(n.p[e.i.p])+uM(n.d[e.i.p])+e.n.b+e.a.b-i}function gmn(n,t){return n.i>0&&(t.lengthn.i&&uQ(t,n.i,null),t}function pmn(n){var t;return 0!=(64&n.Db)?Wwn(n):((t=new fx(Wwn(n))).a+=" (instanceClassName: ",VA(t,n.D),t.a+=")",t.a)}function mmn(n){var t,e,i,r;for(r=0,e=0,i=n.length;e0&&(n._j(),-1!=Txn(n,((e=null==t?0:Hon(t))&vZn)%n.d.length,e,t))}function Mmn(n,t){var i,r;n.a=Lgn(n.a,1),n.c=e.Math.min(n.c,t),n.b=e.Math.max(n.b,t),n.d+=t,i=t-n.f,r=n.e+i,n.f=r-n.e-i,n.e=r}function Tmn(n,t){switch(t){case 3:return void vcn(n,0);case 4:return void kcn(n,0);case 5:return void ycn(n,0);case 6:return void Mcn(n,0)}Awn(n,t)}function jmn(n,t){switch(t.g){case 1:return YU(n.j,(Lun(),ybt));case 2:return YU(n.j,(Lun(),Tbt));default:return hZ(),hZ(),zot}}function Emn(n){var t;switch(ZW(),(t=n.Pc()).length){case 0:return jat;case 1:return new Uq(WW(t[0]));default:return new t1(Ugn(t))}}function Smn(n,t){n.Xj();try{n.d.bd(n.e++,t),n.f=n.d.j,n.g=-1}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function Pmn(){Pmn=E,lBt=new Is,cBt=new Os,aBt=new As,oBt=new Ls,uBt=new Ns,sBt=new $s,hBt=new Ds,fBt=new xs,bBt=new Rs}function Cmn(n,t){var e,i;return wL(),i=null,t==(e=bF((qy(),qy(),Hat)))&&(i=uG(U1(Bat,n),624)),i||(i=new JW(n),t==e&&r2(Bat,n,i)),i}function Imn(n){return Yyn(),(n.q?n.q:(hZ(),hZ(),Vot))._b((jYn(),LMt))?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203)}function Omn(n,t){var e,i;return i=null,vR(n,(jYn(),kTt))&&(e=uG(oIn(n,kTt),96)).pf(t)&&(i=e.of(t)),null==i&&(i=oIn(HQ(n),t)),i}function Amn(n,t){var e,i,r;return!!F$(t,44)&&(i=(e=uG(t,44)).ld(),xQ(r=Xwn(n.Rc(),i),e.md())&&(null!=r||n.Rc()._b(i)))}function Lmn(n,t){var e,i;return n.f>0&&(n._j(),e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?e.md():null}function Nmn(n,t,e){var i,r,c;return n.Pj()?(i=n.i,c=n.Qj(),edn(n,i,t),r=n.Ij(3,null,t,i,c),e?e.nj(r):e=r):edn(n,n.i,t),e}function $mn(n,t,e){var i,r;return i=new Ken(n.e,4,10,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),null,Hyn(n,t),!1),e?e.nj(i):e=i,e}function Dmn(n,t,e){var i,r;return i=new Ken(n.e,3,10,null,F$(r=t.c,90)?uG(r,29):(YYn(),x_t),Hyn(n,t),!1),e?e.nj(i):e=i,e}function xmn(n){var t;return VK(),t=new eN(uG(n.e.of((XYn(),U$t)),8)),n.B.Hc((oUn(),eKt))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function Rmn(n){var t,e;return cHn(),e=pz(n),0!=(t=pz(Dz(n,32)))?new x3(e,t):e>10||e<0?new Z5(1,e):Rot[e]}function Kmn(n,t){var e;return _L(n)&&_L(t)&&p0n<(e=n%t)&&e=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function nvn(n,t,e){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.Ne(t,c.d),e&&0==i)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function tvn(n,t,e,i){var r,c,a;return r=!1,nWn(n.f,e,i)&&(hkn(n.f,n.a[t][e],n.a[t][i]),a=(c=n.a[t])[i],c[i]=c[e],c[e]=a,r=!0),r}function evn(n,t,e){var i,r,c;for(r=uG(cQ(n.b,e),183),i=0,c=new Ww(t.j);c.a>5,t&=31,r=n.d+e+(0==t?0:1),kCn(i=Inn(YHt,W1n,28,r,15,1),n.a,e,t),K4(c=new VV(n.e,r,i)),c}function cvn(n,t){var e;for(e=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(e);)if(uG(N9(e),18).d.i.c==t)return!1;return!0}function avn(n,t,i){var r,c,a,o,u;return o=n.k,u=t.k,c=pK(Omn(n,r=i[o.g][u.g])),a=pK(Omn(t,r)),e.Math.max((tJ(c),c),(tJ(a),a))}function ovn(){return Error.stackTraceLimit>0?(e.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function uvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t)))>0}function svn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t)))<0}function hvn(n,t){return YN(),YN(),oan(T1n),(e.Math.abs(n-t)<=T1n||n==t||isNaN(n)&&isNaN(t)?0:nt?1:KL(isNaN(n),isNaN(t)))<=0}function fvn(n,t){for(var e=0;!t[e]||""==t[e];)e++;for(var i=t[e++];e0&&this.b>0&&(this.g=mX(this.c,this.b,this.a))}function Tvn(n,t){var e,i=n.a;t=String(t),i.hasOwnProperty(t)&&(e=i[t]);var r=(Cfn(),Wat)[typeof e];return r?r(e):Vbn(typeof e)}function jvn(n){if(!(Iet in n.a))throw hv(new SM("Every element must have an id."));return fNn(v0(n,Iet))}function Evn(n){var t,e;for(e=WOn(n),t=null;2==n.c;)EYn(n),t||(QYn(),QYn(),kzn(t=new QN(2),e),e=t),e.Jm(WOn(n));return e}function Svn(n,t){var e,i;return n._j(),(e=ZNn(n,((i=null==t?0:Hon(t))&vZn)%n.d.length,i,t))?(uan(n,e),e.md()):null}function Pvn(n,t){return n.e>t.e?1:n.et.d?n.e:n.d=48&&n<48+e.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function Ivn(n,t){if(t.c==n)return t.d;if(t.d==n)return t.c;throw hv(new vM("Input edge is not connected to the input port."))}function Ovn(n){if(Bvn(Fnt,n))return qx(),eot;if(Bvn(_nt,n))return qx(),tot;throw hv(new vM("Expecting true or false"))}function Avn(n){switch(typeof n){case pZn:return pln(n);case gZn:return OL(n);case dZn:return XK(n);default:return null==n?0:xx(n)}}function Lvn(n,t){if(n.a<0)throw hv(new kM("Did not call before(...) or after(...) before calling add(...)."));return hR(n,n.a,t),n}function Nvn(n){return W0(),F$(n,162)?uG(cQ(AFt,iut),294).Rg(n):PV(AFt,Tbn(n))?uG(cQ(AFt,Tbn(n)),294).Rg(n):null}function $vn(n){var t;return 0==(32&n.Db)&&0!=(t=iQ(uG(Lsn(n,16),29)||n.ii())-iQ(n.ii()))&&Dvn(n,32,Inn(dat,EZn,1,t,5,1)),n}function Dvn(n,t,e){var i;0!=(n.Db&t)?null==e?H$n(n,t):-1==(i=jTn(n,t))?n.Eb=e:uQ(Kcn(n.Eb),i,e):null!=e&&lFn(n,t,e)}function xvn(n,t,e,i){var r;0!=t.c.length&&(r=gRn(e,i),kS(krn(new fX(null,new h3(WLn(t),1)),new ba),new pY(n,e,r,i)))}function Rvn(n,t){var e,i,r;return i=n.a.length-1,e=t-n.b&i,r=n.c-t&i,jK(e<(n.c-n.b&i)),e>=r?(Pbn(n,t),-1):(Sbn(n,t),1)}function Kvn(n){var t,e,i;if(!(i=n.Jh()))for(t=0,e=n.Ph();e;e=e.Ph()){if(++t>O0n)return e.Qh();if((i=e.Jh())||e==n)break}return i}function Fvn(n,t){var e;return xA(t)===xA(n)||!!F$(t,21)&&(e=uG(t,21)).gc()==n.gc()&&n.Ic(e)}function _vn(n,t){return n.et.e?1:n.ft.f?1:Hon(n)-Hon(t)}function Bvn(n,t){return tJ(n),null!=t&&(!!m_(n,t)||n.length==t.length&&m_(n.toLowerCase(),t.toLowerCase()))}function Hvn(n){var t,e;return dwn(n,-129)>0&&dwn(n,128)<0?(tX(),t=pz(n)+128,!(e=got[t])&&(e=got[t]=new Ow(n)),e):new Ow(n)}function Uvn(){Uvn=E,tbt=new EC(q4n,0),Zlt=new EC("INSIDE_PORT_SIDE_GROUPS",1),Ylt=new EC("GROUP_MODEL_ORDER",2),nbt=new EC(X4n,3)}function Gvn(n){var t;return n.b||wj(n,!(t=QF(n.e,n.a))||!m_(_nt,Lmn((!t.b&&(t.b=new XR((YYn(),H_t),wBt,t)),t.b),"qualified"))),n.c}function qvn(n,t){var e,i;for(s3(t,n.length),e=n.charCodeAt(t),i=t+1;i2e3&&(Gat=n,qat=e.setTimeout(vE,10)),0==Uat++&&(Pin((Gy(),Fat)),!0)}function wkn(n,t,e){var i;(Aut?(Opn(n),1):Lut||Dut?(pS(),1):$ut&&(pS(),0))&&((i=new iB(t)).b=e,qIn(n,i))}function dkn(n,t){var e;e=!n.A.Hc((Qmn(),JRt))||n.q==($Pn(),cRt),n.u.Hc((eNn(),wRt))?e?QQn(n,t):TQn(n,t):n.u.Hc(gRt)&&(e?YWn(n,t):MJn(n,t))}function gkn(n){var t;xA(zDn(n,(XYn(),E$t)))===xA((Own(),Oxt))&&(R0(n)?(t=uG(zDn(R0(n),E$t),346),Myn(n,E$t,t)):Myn(n,E$t,Axt))}function pkn(n){var t,e;return!!vR(n.d.i,(jYn(),UMt))&&(t=uG(oIn(n.c.i,UMt),17),e=uG(oIn(n.d.i,UMt),17),d$(t.a,e.a)>0)}function mkn(n,t,i){return new gY(e.Math.min(n.a,t.a)-i/2,e.Math.min(n.b,t.b)-i/2,e.Math.abs(n.a-t.a)+i,e.Math.abs(n.b-t.b)+i)}function vkn(n){var t;this.d=new Zm,this.j=new sj,this.g=new sj,t=n.g.b,this.f=uG(oIn(HQ(t),(jYn(),Byt)),88),this.e=uM(pK(eyn(t,yTt)))}function kkn(n){this.d=new Zm,this.e=new u8,this.c=Inn(YHt,W1n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=n}function ykn(n,t,e){var i;switch(i=e[n.g][t],n.g){case 1:case 3:return new MO(0,i);case 2:case 4:return new MO(i,0);default:return null}}function Mkn(n,t,e){var i;i=uG(A1(t.f),205);try{i.rf(n,e),WQ(t.f,i)}catch(r){throw F$(r=Ehn(r),103),hv(r)}}function Tkn(n,t,e){var i,r,c,a;return i=null,(c=DVn(aan(),t))&&(r=null,null!=(a=vVn(c,e))&&(r=n.qf(c,a)),i=r),i}function jkn(n,t,e,i){var r;if(t>=(r=n.length))return r;for(t=t>0?t:0;ti&&uQ(t,i,null),t}function Skn(n,t){var e,i;for(i=n.a.length,t.lengthi&&uQ(t,i,null),t}function Pkn(n,t){var e,i;++n.j,null!=t&&e$n(t,e=F$(i=n.a.Cb,99)?uG(i,99).th():null)?Dvn(n.a,4,e):Dvn(n.a,4,uG(t,129))}function Ckn(n){var t;if(null==n)return null;if(null==(t=Exn(yXn(n,!0))))throw hv(new PM("Invalid hexBinary value: '"+n+"'"));return t}function Ikn(n,t,e){var i;t.a.length>0&&(kD(n.b,new hG(t.a,e)),0<(i=t.a.length)?t.a=r1(t.a,0,0):0>i&&(t.a+=V$(Inn(JHt,N1n,28,-i,15,1))))}function Okn(n,t,e){var i;if(!e[t.d])for(e[t.d]=!0,i=new Ww(Ebn(t));i.a=n.b>>1)for(i=n.c,e=n.b;e>t;--e)i=i.b;else for(i=n.a.a,e=0;e=0?n.Wh(r):$Nn(n,i):e<0?$Nn(n,i):uG(i,69).wk().Bk(n,n.hi(),e)}function Qkn(n){var t,e;for(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),t=(e=n.o).c.Kc();t.e!=t.i.gc();)uG(t.Yj(),44).md();return Tnn(e)}function Jkn(n){var t;if(F$(n.a,4)){if(null==(t=Nvn(n.a)))throw hv(new kM(Bnt+n.b+"'. "+Rnt+(vK($Ft),$Ft.k)+Knt));return t}return n.a}function Ykn(n,t){var e,i;if(n.j.length!=t.j.length)return!1;for(e=0,i=n.j.length;e=64&&t<128&&(r=S3(r,Nz(1,t-64)));return r}function eyn(n,t){var e,i;return i=null,vR(n,(XYn(),ODt))&&(e=uG(oIn(n,ODt),96)).pf(t)&&(i=e.of(t)),null==i&&HQ(n)&&(i=oIn(HQ(n),t)),i}function iyn(n,t){var e;return e=uG(oIn(n,(jYn(),bMt)),75),_$(t,cbt)?e?BY(e):(e=new Uk,kfn(n,bMt,e)):e&&kfn(n,bMt,null),e}function ryn(){ryn=E,XYn(),ift=SDt,Jht=M$t,Xht=c$t,Yht=W$t,MEn(),tft=cst,nft=ist,eft=ost,Zht=est,pbn(),Vht=Hht,zht=Bht,Wht=Ght,Qht=qht}function cyn(n){switch(qS(),this.c=new Zm,this.d=n,n.g){case 0:case 2:this.a=kJ(Qlt),this.b=M0n;break;case 3:case 1:this.a=Qlt,this.b=T0n}}function ayn(n){var t;L_(uG(oIn(n,(jYn(),JMt)),101))&&(c$n((u3(0,(t=n.b).c.length),uG(t.c[0],30))),c$n(uG(zq(t,t.c.length-1),30)))}function oyn(n,t){t.Ug("Self-Loop post-processing",1),kS(JJ(JJ(sin(new fX(null,new h3(n.b,16)),new Di),new xi),new Ri),new Ki),t.Vg()}function uyn(n,t,e){var i;if(n.c)ycn(n.c,n.c.i+t),Mcn(n.c,n.c.j+e);else for(i=new Ww(n.b);i.a=0&&(e.d=n.t);break;case 3:n.t>=0&&(e.a=n.t)}n.C&&(e.b=n.C.b,e.c=n.C.c)}function pyn(){pyn=E,Tjt=new wI(k9n,0),kjt=new wI(D6n,1),yjt=new wI("LINEAR_SEGMENTS",2),vjt=new wI("BRANDES_KOEPF",3),Mjt=new wI(v9n,4)}function myn(){myn=E,Nht=new lC(o3n,0),Lht=new lC(u3n,1),$ht=new lC(s3n,2),Dht=new lC(h3n,3),Nht.a=!1,Lht.a=!0,$ht.a=!1,Dht.a=!0}function vyn(){vyn=E,yht=new hC(o3n,0),kht=new hC(u3n,1),Mht=new hC(s3n,2),Tht=new hC(h3n,3),yht.a=!1,kht.a=!0,Mht.a=!1,Tht.a=!0}function kyn(n,t,e,i){var r;return e>=0?n.Sh(t,e,i):(n.Ph()&&(i=(r=n.Fh())>=0?n.Ah(i):n.Ph().Th(n,-1-r,null,i)),n.Ch(t,e,i))}function yyn(n,t){switch(t){case 7:return!n.e&&(n.e=new f_(aFt,n,7,4)),void Czn(n.e);case 8:return!n.d&&(n.d=new f_(aFt,n,8,5)),void Czn(n.d)}Tmn(n,t)}function Myn(n,t,e){return null==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Svn(n.o,t)):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),rSn(n.o,t,e)),n}function Tyn(n,t){var e,i,r,c;for(hZ(),e=n,c=t,F$(n,21)&&!F$(t,21)&&(e=t,c=n),r=e.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function jyn(n,t,e,i){if(t.ae.b)return!0}return!1}function Eyn(n,t){return RA(n)?!!bZn[t]:n.Sm?!!n.Sm[t]:FA(n)?!!lZn[t]:!!KA(n)&&!!fZn[t]}function Syn(n){var t;t=n.a;do{(t=uG(N9(new Fz(ix(qgn(t).a.Kc(),new h))),18).c.i).k==(zIn(),wbt)&&n.b.Fc(t)}while(t.k==(zIn(),wbt));n.b=Spn(n.b)}function Pyn(n,t){var i,r,c;for(c=n,r=new Fz(ix(qgn(t).a.Kc(),new h));hDn(r);)(i=uG(N9(r),18)).c.i.c&&(c=e.Math.max(c,i.c.i.c.p));return c}function Cyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.d+e.b.Mf().b+e.d.a,i.Ob()&&(r+=n.w);return r}function Iyn(n,t){var e,i,r;for(r=0,i=uG(uG(Y9(n.r,t),21),87).Kc();i.Ob();)r+=(e=uG(i.Pb(),117)).d.b+e.b.Mf().a+e.d.c,i.Ob()&&(r+=n.w);return r}function Oyn(n){var t,e,i;if(e=0,0==(i=GFn(n)).c.length)return 1;for(t=new Ww(i);t.a=0?n.Lh(a,e,!0):YNn(n,c,e):uG(c,69).wk().yk(n,n.hi(),r,e,i)}function xyn(n,t,e,i){var r;(r=bdn(t.pf((XYn(),K$t))?uG(t.of(K$t),21):n.j))!=(JYn(),sht)&&(e&&!vvn(r)||LOn(Sxn(n,r,i),t))}function Ryn(n){switch(n.g){case 1:return ehn(),pht;case 3:return ehn(),wht;case 2:return ehn(),ght;case 4:return ehn(),dht;default:return null}}function Kyn(n,t,e){if(n.e)switch(n.b){case 1:JY(n.c,t,e);break;case 0:YY(n.c,t,e)}else C5(n.c,t,e);n.a[t.p][e.p]=n.c.i,n.a[e.p][t.p]=n.c.e}function Fyn(n){var t,e;if(null==n)return null;for(e=Inn(pbt,zZn,199,n.length,0,2),t=0;t=0)return i;if(n.ol())for(e=0;e=(r=n.gc()))throw hv(new w_(t,r));if(n.Si()&&(i=n.dd(e))>=0&&i!=t)throw hv(new vM(Xet));return n.Xi(t,e)}function Gyn(n,t){if(this.a=uG(WW(n),253),this.b=uG(WW(t),253),n.Ed(t)>0||n==(py(),Mat)||t==(my(),Tat))throw hv(new vM("Invalid range: "+N5(n,t)))}function qyn(n){var t,e;for(this.b=new Zm,this.c=n,this.a=!1,e=new Ww(n.a);e.a0),(t&-t)==t)return t0(t*uRn(n,31)*4.656612873077393e-10);do{i=(e=uRn(n,31))%t}while(e-i+(t-1)<0);return t0(i)}function rMn(n,t,e){switch(e.g){case 1:n.a=t.a/2,n.b=0;break;case 2:n.a=t.a,n.b=t.b/2;break;case 3:n.a=t.a/2,n.b=t.b;break;case 4:n.a=0,n.b=t.b/2}}function cMn(n,t,e,i){var r,c;for(r=t;r1&&(r=Xyn(n,t)),r}function sMn(n){var t;return new MO(t=uM(pK(zDn(n,(XYn(),BDt))))*e.Math.sqrt((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i),t/uM(pK(zDn(n,_Dt))))}function hMn(n){var t;return n.f&&n.f.Vh()&&(t=uG(n.f,54),n.f=uG(mwn(n,t),84),n.f!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.f))),n.f}function fMn(n){var t;return n.i&&n.i.Vh()&&(t=uG(n.i,54),n.i=uG(mwn(n,t),84),n.i!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,7,t,n.i))),n.i}function lMn(n){var t;return n.b&&0!=(64&n.b.Db)&&(t=n.b,n.b=uG(mwn(n,t),19),n.b!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,21,t,n.b))),n.b}function bMn(n,t){var e,i,r;null==n.d?(++n.e,++n.f):(i=t.Bi(),eKn(n,n.f+1),r=(i&vZn)%n.d.length,!(e=n.d[r])&&(e=n.d[r]=n.dk()),e.Fc(t),++n.f)}function wMn(n,t,e){var i;return!t.tk()&&(-2!=t.Ik()?null==(i=t.ik())?null==e:udn(i,e):t.qk()==n.e.Dh()&&null==e)}function dMn(){var n;man(16,b1n),n=aon(16),this.b=Inn(Cat,l1n,302,n,0,1),this.c=Inn(Cat,l1n,302,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function gMn(n){LF.call(this),this.k=(zIn(),dbt),this.j=(man(6,g1n),new R7(6)),this.b=(man(2,g1n),new R7(2)),this.d=new $k,this.f=new xk,this.a=n}function pMn(n){var t,e;n.c.length<=1||(iAn(n,uG((t=w_n(n,(KQn(),KRt))).a,17).a,uG(t.b,17).a),iAn(n,uG((e=w_n(n,_Rt)).a,17).a,uG(e.b,17).a))}function mMn(n,t,e){var i,r;for(i=(r=n.a.b).c.length;i102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function IMn(n,t){if(null==n)throw hv(new MM("null key in entry: null="+t));if(null==t)throw hv(new MM("null value in entry: "+n+"=null"))}function OMn(n,t){for(var e,i;n.Ob();){if(!t.Ob())return!1;if(e=n.Pb(),i=t.Pb(),!(xA(e)===xA(i)||null!=e&&udn(e,i)))return!1}return!t.Ob()}function AMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[Nbn(n.a[0],t),Nbn(n.a[1],t),Nbn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LMn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[$bn(n.a[0],t),$bn(n.a[1],t),$bn(n.a[2],t)]),n.d&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function NMn(n,t,e){L_(uG(oIn(t,(jYn(),JMt)),101))||(Z8(n,t,yOn(t,e)),Z8(n,t,yOn(t,(KQn(),KRt))),Z8(n,t,yOn(t,yRt)),hZ(),f$(t.j,new Gg(n)))}function $Mn(n){var t,e;for(n.c||oVn(n),e=new Uk,N3(t=new Ww(n.a));t.a0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function nTn(n){var t;return null==n?null:new PN((t=yXn(n,!0)).length>0&&(s3(0,t.length),43==t.charCodeAt(0))?(s3(1,t.length+1),t.substr(1)):t)}function tTn(n,t,e,i,r,c,a,o){var u,s;i&&((u=i.a[0])&&tTn(n,t,e,u,r,c,a,o),ljn(n,e,i.d,r,c,a,o)&&t.Fc(i),(s=i.a[1])&&tTn(n,t,e,s,r,c,a,o))}function eTn(n,t,e){try{return _A(Son(n,t,e),1)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function iTn(n,t,e){try{return _A(Son(n,t,e),0)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function rTn(n,t,e){try{return _A(Son(n,t,e),2)}catch(i){throw F$(i=Ehn(i),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(i)}}function cTn(n,t){if(-1==n.g)throw hv(new xv);n.Xj();try{n.d.hd(n.g,t),n.f=n.d.j}catch(e){throw F$(e=Ehn(e),77)?hv(new Fv):hv(e)}}function aTn(n){var t,e,i;for(e=new Ww(n.b);e.ac&&uQ(t,c,null),t}function uTn(n,t){var e,i;if(i=n.gc(),null==t){for(e=0;e0&&(u+=r),s[h]=a,a+=o*(u+i)}function TTn(n){var t,e,i;for(i=n.f,n.n=Inn(eUt,I0n,28,i,15,1),n.d=Inn(eUt,I0n,28,i,15,1),t=0;t0?n.c:0),++c;n.b=r,n.d=a}function ATn(n,t){var i;return i=Uhn(cT(eUt,1),I0n,28,15,[eMn(n,(Yrn(),jst),t),eMn(n,Est,t),eMn(n,Sst,t)]),n.f&&(i[0]=e.Math.max(i[0],i[2]),i[2]=i[0]),i}function LTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!1,!0)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function NTn(n,t,e){try{HBn(n,t+n.j,e+n.k,!0,!1)}catch(i){throw F$(i=Ehn(i),77)?hv(new dM(i.g+g3n+t+TZn+e+").")):hv(i)}}function $Tn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Bxt))?(t.Mc(Bxt),t.Fc(Uxt)):t.Hc(Uxt)&&(t.Mc(Uxt),t.Fc(Bxt)))}function DTn(n){var t;vR(n,(jYn(),PMt))&&((t=uG(oIn(n,PMt),21)).Hc((VDn(),Vxt))?(t.Mc(Vxt),t.Fc(Xxt)):t.Hc(Xxt)&&(t.Mc(Xxt),t.Fc(Vxt)))}function xTn(n,t,e,i){var r,c,a;return null==n.a&&nOn(n,t),a=t.b.j.c.length,c=e.d.p,(r=i.d.p-1)<0&&(r=a-1),c<=r?n.a[r]-n.a[c]:n.a[a-1]-n.a[c]+n.a[r]}function RTn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,27).kh().i),e=new DD(uG(n.f,27).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function KTn(n){var t,e;if(!n.e)for(n.e=o6(RJ(uG(n.f,27)).i),e=new DD(RJ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),123),kD(n.e,new Jp(t));return n.e}function FTn(n){var t,e;if(!n.a)for(n.a=o6(wZ(uG(n.f,27)).i),e=new DD(wZ(uG(n.f,27)));e.e!=e.i.gc();)t=uG(Zkn(e),27),kD(n.a,new Wx(n,t));return n.a}function _Tn(n){var t;if(!n.C&&(null!=n.D||null!=n.B))if(t=KWn(n))n.hl(t);else try{n.hl(null)}catch(e){if(!F$(e=Ehn(e),63))throw hv(e)}return n.C}function BTn(n){switch(n.q.g){case 5:QEn(n,(KQn(),yRt)),QEn(n,KRt);break;case 4:TVn(n,(KQn(),yRt)),TVn(n,KRt);break;default:PAn(n,(KQn(),yRt)),PAn(n,KRt)}}function HTn(n){switch(n.q.g){case 5:JEn(n,(KQn(),kRt)),JEn(n,_Rt);break;case 4:jVn(n,(KQn(),kRt)),jVn(n,_Rt);break;default:CAn(n,(KQn(),kRt)),CAn(n,_Rt)}}function UTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),c.a,0),c.a+=i.f.a+t,c.b=e.Math.max(c.b,i.f.b);return c.b>0&&(c.b+=t),c}function GTn(n,t){var i,r,c;for(c=new sj,r=n.Kc();r.Ob();)tHn(i=uG(r.Pb(),36),0,c.b),c.b+=i.f.b+t,c.a=e.Math.max(c.a,i.f.a);return c.a>0&&(c.a+=t),c}function qTn(n){var t,i,r;for(r=vZn,i=new Ww(n.a);i.a>16==6?n.Cb.Th(n,5,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function WTn(n){EZ();var t=n.e;if(t&&t.stack){var e=t.stack,i=t+"\n";return e.substring(0,i.length)==i&&(e=e.substring(i.length)),e.split("\n")}return[]}function QTn(n){var t;return Tan(),(t=wot)[n>>>28]|t[n>>24&15]<<4|t[n>>20&15]<<8|t[n>>16&15]<<12|t[n>>12&15]<<16|t[n>>8&15]<<20|t[n>>4&15]<<24|t[15&n]<<28}function JTn(n){var t,i,r;n.b==n.c&&(r=n.a.length,i=pfn(e.Math.max(8,r))<<1,0!=n.b?(Pon(n,t=MF(n.a,i),r),n.a=t,n.b=0):Xv(n.a,i),n.c=r)}function YTn(n,t){var e;return(e=n.b).pf((XYn(),uDt))?e.ag()==(KQn(),_Rt)?-e.Mf().a-uM(pK(e.of(uDt))):t+uM(pK(e.of(uDt))):e.ag()==(KQn(),_Rt)?-e.Mf().a:t}function ZTn(n){var t;return 0!=n.b.c.length&&uG(zq(n.b,0),72).a?uG(zq(n.b,0),72).a:null!=(t=sY(n))?t:""+(n.c?Ten(n.c.a,n,0):-1)}function njn(n){var t;return 0!=n.f.c.length&&uG(zq(n.f,0),72).a?uG(zq(n.f,0),72).a:null!=(t=sY(n))?t:""+(n.i?Ten(n.i.j,n,0):-1)}function tjn(n,t){var e,i;if(t<0||t>=n.gc())return null;for(e=t;e0?n.c:0),c=e.Math.max(c,t.d),++r;n.e=a,n.b=c}function rjn(n){var t,e;if(!n.b)for(n.b=o6(uG(n.f,123).kh().i),e=new DD(uG(n.f,123).kh());e.e!=e.i.gc();)t=uG(Zkn(e),135),kD(n.b,new Wy(t));return n.b}function cjn(n,t){var e,i,r;if(t.dc())return EK(),EK(),KFt;for(e=new cF(n,t.gc()),r=new DD(n);r.e!=r.i.gc();)i=Zkn(r),t.Hc(i)&&ttn(e,i);return e}function ajn(n,t,e,i){return 0==t?i?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),n.o):(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),Tnn(n.o)):Dyn(n,t,e,i)}function ojn(n){var t,e;if(n.rb)for(t=0,e=n.rb.i;t>22))>>22)<0||(n.l=e&f0n,n.m=i&f0n,n.h=r&l0n,0)))}function ljn(n,t,e,i,r,c,a){var o,u;return!(t.Te()&&(u=n.a.Ne(e,i),u<0||!r&&0==u)||t.Ue()&&(o=n.a.Ne(e,c),o>0||!a&&0==o))}function bjn(n,t){if(Cln(),0!=n.j.g-t.j.g)return 0;switch(n.j.g){case 2:return Wgn(t,edt)-Wgn(n,edt);case 4:return Wgn(n,tdt)-Wgn(t,tdt)}return 0}function wjn(n){switch(n.g){case 0:return jgt;case 1:return Egt;case 2:return Sgt;case 3:return Pgt;case 4:return Cgt;case 5:return Igt;default:return null}}function djn(n,t,e){var i,r;return Kbn(r=new ny,t),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(i=r,0),Ccn(i,1),mdn(i,!0),ddn(i,!0),i}function gjn(n,t){var e,i;if(t>=n.i)throw hv(new pL(t,n.i));return++n.j,e=n.g[t],(i=n.i-t-1)>0&&qGn(n.g,t+1,n.g,t,i),uQ(n.g,--n.i,null),n.Qi(t,e),n.Ni(),e}function pjn(n,t){var e;return n.Db>>16==17?n.Cb.Th(n,21,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||n.ii(),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function mjn(n){var t,e,i;for(hZ(),f$(n.c,n.a),i=new Ww(n.c);i.ae.a.c.length))throw hv(new vM("index must be >= 0 and <= layer node count"));n.c&&men(n.c.a,n),n.c=e,e&&GX(e.a,t,n)}function Djn(n,t){var e,i,r;for(i=new Fz(ix(Ggn(n).a.Kc(),new h));hDn(i);)return e=uG(N9(i),18),new Ul(WW((r=uG(t.Kb(e),10)).n.b+r.o.b/2));return gy(),gy(),wat}function xjn(n,t){this.c=new Ym,this.a=n,this.b=t,this.d=uG(oIn(n,(GYn(),kmt)),312),xA(oIn(n,(jYn(),CMt)))===xA((Wtn(),Lgt))?this.e=new Pk:this.e=new Sk}function Rjn(n,t){var e,i;return i=null,n.pf((XYn(),ODt))&&(e=uG(n.of(ODt),96)).pf(t)&&(i=e.of(t)),null==i&&n.Tf()&&(i=n.Tf().of(t)),null==i&&(i=Jkn(t)),i}function Kjn(n,t){var e,i;e=n.fd(t);try{return i=e.Pb(),e.Qb(),i}catch(r){throw F$(r=Ehn(r),112)?hv(new dM("Can't remove element "+t)):hv(r)}}function Fjn(n,t){var e,i,r;if(0==(e=Wqn(n,t,r=new Lfn((i=new QE).q.getFullYear()-V1n,i.q.getMonth(),i.q.getDate())))||e0?t:0),++i;return new MO(r,c)}function zjn(n,t){var e;return n.Db>>16==6?n.Cb.Th(n,6,aFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),BKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Vjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,1,iFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),UKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Wjn(n,t){var e;return n.Db>>16==9?n.Cb.Th(n,9,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),qKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Qjn(n,t){var e;return n.Db>>16==5?n.Cb.Th(n,9,w_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),O_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Jjn(n,t){var e;return n.Db>>16==7?n.Cb.Th(n,6,fFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),F_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Yjn(n,t){var e;return n.Db>>16==3?n.Cb.Th(n,0,uFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),T_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function Zjn(){this.a=new ss,this.g=new dMn,this.j=new dMn,this.b=new Ym,this.d=new dMn,this.i=new dMn,this.k=new Ym,this.c=new Ym,this.e=new Ym,this.f=new Ym}function nEn(n,t,e){var i,r,c;for(e<0&&(e=0),c=n.i,r=e;rO0n)return eEn(n,i);if(i==n)return!0}}return!1}function iEn(n){switch(Gx(),n.q.g){case 5:uNn(n,(KQn(),yRt)),uNn(n,KRt);break;case 4:Kxn(n,(KQn(),yRt)),Kxn(n,KRt);break;default:$Qn(n,(KQn(),yRt)),$Qn(n,KRt)}}function rEn(n){switch(Gx(),n.q.g){case 5:k$n(n,(KQn(),kRt)),k$n(n,_Rt);break;case 4:fyn(n,(KQn(),kRt)),fyn(n,_Rt);break;default:DQn(n,(KQn(),kRt)),DQn(n,_Rt)}}function cEn(n){var t,e;(t=uG(oIn(n,(cGn(),Dft)),17))?(e=t.a,kfn(n,(mon(),Qft),0==e?new Upn:new v8(e))):kfn(n,(mon(),Qft),new v8(1))}function aEn(n,t){var e;switch(e=n.i,t.g){case 1:return-(n.n.b+n.o.b);case 2:return n.n.a-e.o.a;case 3:return n.n.b-e.o.b;case 4:return-(n.n.a+n.o.a)}return 0}function oEn(n,t){switch(n.g){case 0:return t==(Gpn(),Imt)?qwt:Xwt;case 1:return t==(Gpn(),Imt)?qwt:Gwt;case 2:return t==(Gpn(),Imt)?Gwt:Xwt;default:return Gwt}}function uEn(n,t){var i,r,c;for(men(n.a,t),n.e-=t.r+(0==n.a.c.length?0:n.c),c=b7n,r=new Ww(n.a);r.a>16==3?n.Cb.Th(n,12,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),_Kt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function hEn(n,t){var e;return n.Db>>16==11?n.Cb.Th(n,10,bFt,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(tYn(),GKt),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function fEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,11,h_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),R_t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function lEn(n,t){var e;return n.Db>>16==10?n.Cb.Th(n,12,p_t,t):(e=lMn(uG(ern(uG(Lsn(n,16),29)||(YYn(),__t),n.Db>>16),19)),n.Cb.Th(n,e.n,e.f,t))}function bEn(n){var t;return 0==(1&n.Bb)&&n.r&&n.r.Vh()&&(t=uG(n.r,54),n.r=uG(mwn(n,t),142),n.r!=t&&0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,9,8,t,n.r))),n.r}function wEn(n,t,i){var r;return r=Uhn(cT(eUt,1),I0n,28,15,[BCn(n,(Yrn(),jst),t,i),BCn(n,Est,t,i),BCn(n,Sst,t,i)]),n.f&&(r[0]=e.Math.max(r[0],r[2]),r[2]=r[0]),r}function dEn(n,t){var e,i,r;if(0!=(r=lyn(n,t)).c.length)for(f$(r,new ti),e=r.c.length,i=0;i>19)!=(o=t.h>>19)?o-a:(i=n.h)!=(c=t.h)?i-c:(e=n.m)!=(r=t.m)?e-r:n.l-t.l}function MEn(){MEn=E,W_n(),ost=new mL($2n,ust=dst),Xin(),cst=new mL(D2n,ast=Zut),_kn(),ist=new mL(x2n,rst=Wut),est=new mL(R2n,(qx(),!0))}function TEn(n,t,e){var i,r;i=t*e,F$(n.g,154)?(r=Q6(n)).f.d?r.f.a||(n.d.a+=i+Z2n):(n.d.d-=i+Z2n,n.d.a+=i+Z2n):F$(n.g,10)&&(n.d.d-=i,n.d.a+=2*i)}function jEn(n,t,i){var r,c,a,o,u;for(c=n[i.g],u=new Ww(t.d);u.a0?n.b:0),++i;t.b=r,t.e=c}function SEn(n){var t,e,i;if(i=n.b,aS(n.i,i.length)){for(e=2*i.length,n.b=Inn(Cat,l1n,302,e,0,1),n.c=Inn(Cat,l1n,302,e,0,1),n.f=e-1,n.i=0,t=n.a;t;t=t.c)HLn(n,t,t);++n.g}}function PEn(n,t,e,i){var r,c,a,o;for(r=0;ro&&(u=o/r),(c=e.Math.abs(n.b))>a&&(s=a/c),vD(n,e.Math.min(u,s)),n}function AEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),aet),2113))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new rs}function LEn(){var n,t;tXn();try{if(t=uG(ASn((MP(),l_t),Drt),2040))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new _s}function NEn(){var n,t;Ftn();try{if(t=uG(ASn((MP(),l_t),lct),2122))return t}catch(e){if(!F$(e=Ehn(e),103))throw hv(e);n=e,AW((t$(),n))}return new Nh}function $En(n,t,e){var i,r;return r=n.e,n.e=t,0!=(4&n.Db)&&0==(1&n.Db)&&(i=new lV(n,1,4,r,t),e?e.nj(i):e=i),r!=t&&(e=PWn(n,t?bRn(n,t):n.a,e)),e}function DEn(){QE.call(this),this.e=-1,this.a=!1,this.p=j1n,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=j1n}function xEn(n,t){var e,i,r;if(i=n.b.d.d,n.a||(i+=n.b.d.a),r=t.b.d.d,t.a||(r+=t.b.d.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function REn(n,t){var e,i,r;if(i=n.b.b.d,n.a||(i+=n.b.b.a),r=t.b.b.d,t.a||(r+=t.b.b.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function KEn(n,t){var e,i,r;if(i=n.b.g.d,n.a||(i+=n.b.g.a),r=t.b.g.d,t.a||(r+=t.b.g.a),0==(e=ugn(i,r))){if(!n.a&&t.a)return-1;if(!t.a&&n.a)return 1}return e}function FEn(){FEn=E,klt=wz(Aq(Aq(Aq(new wJ,(uIn(),Slt),(zYn(),owt)),Slt,fwt),Plt,mwt),Plt,Wbt),Mlt=Aq(Aq(new wJ,Slt,Fbt),Slt,Qbt),ylt=wz(new wJ,Plt,Ybt)}function _En(n){var t,e,i,r,c;for(t=uG(oIn(n,(GYn(),$pt)),85),c=n.n,i=t.Cc().Kc();i.Ob();)(r=(e=uG(i.Pb(),314)).i).c+=c.a,r.d+=c.b,e.c?P_n(e):C_n(e);kfn(n,$pt,null)}function BEn(n,t,e){var i,r;switch(i=(r=n.b).d,t.g){case 1:return-i.d-e;case 2:return r.o.a+i.c+e;case 3:return r.o.b+i.a+e;case 4:return-i.b-e;default:return-1}}function HEn(n,t,e){var i;for(e.Ug("Interactive node placement",1),n.a=uG(oIn(t,(GYn(),kmt)),312),i=new Ww(t.b);i.a0&&(r=ZNn(n,(c&vZn)%n.d.length,c,t))?r.nd(e):(i=n.ck(c,t,e),n.c.Fc(i),null)}function cSn(n,t){var e,i,r,c;switch(tdn(n,t).Kl()){case 3:case 2:for(r=0,c=(e=hXn(t)).i;r=0;r--)if(m_(n[r].d,t)||m_(n[r].d,i)){n.length>=r+1&&n.splice(0,r+1);break}return n}function bSn(n,t){var i;return _L(n)&&_L(t)&&p0n<(i=n/t)&&i0&&(n.b+=2,n.a+=r):(n.b+=1,n.a+=e.Math.min(r,c))}function ySn(n){var t;t=uG(oIn(uG(hyn(n.b,0),39),(QGn(),pCt)),107),kfn(n,(OQn(),kPt),new MO(0,0)),rUn(new L7,n,t.b+t.c-uM(pK(oIn(n,PPt))),t.d+t.a-uM(pK(oIn(n,IPt))))}function MSn(n,t){var e;if(e=!1,RA(t)&&(e=!0,pQ(n,new QW(mK(t)))),e||F$(t,242)&&(e=!0,pQ(n,new Pb(Q_(uG(t,242))))),!e)throw hv(new pM(Cet))}function TSn(n,t,e,i){var r,c,a;return r=new Ken(n.e,1,10,F$(a=t.c,90)?uG(a,29):(YYn(),x_t),F$(c=e.c,90)?uG(c,29):(YYn(),x_t),Hyn(n,t),!1),i?i.nj(r):i=r,i}function jSn(n){var t,e;switch(uG(oIn(HQ(n),(jYn(),lMt)),429).g){case 0:return t=n.n,e=n.o,new MO(t.a+e.a/2,t.b+e.b/2);case 1:return new eN(n.n);default:return null}}function ESn(){ESn=E,Fgt=new rI(q4n,0),Kgt=new rI("LEFTUP",1),Bgt=new rI("RIGHTUP",2),Rgt=new rI("LEFTDOWN",3),_gt=new rI("RIGHTDOWN",4),xgt=new rI("BALANCED",5)}function SSn(n,t,e){var i,r,c;if(0==(i=ugn(n.a[t.p],n.a[e.p]))){if(r=uG(oIn(t,(GYn(),Vpt)),15),c=uG(oIn(e,Vpt),15),r.Hc(e))return-1;if(c.Hc(t))return 1}return i}function PSn(n){switch(n.g){case 1:return new So;case 2:return new Po;case 3:return new Eo;case 0:return null;default:throw hv(new vM(k7n+(null!=n.f?n.f:""+n.g)))}}function CSn(n,t,e){switch(t){case 1:return!n.n&&(n.n=new fV(lFt,n,1,7)),Czn(n.n),!n.n&&(n.n=new fV(lFt,n,1,7)),void CW(n.n,uG(e,16));case 2:return void Gan(n,mK(e))}bln(n,t,e)}function ISn(n,t,e){switch(t){case 3:return void vcn(n,uM(pK(e)));case 4:return void kcn(n,uM(pK(e)));case 5:return void ycn(n,uM(pK(e)));case 6:return void Mcn(n,uM(pK(e)))}CSn(n,t,e)}function OSn(n,t,e){var i,r;(i=CCn(r=new ny,t,null))&&i.oj(),qon(r,e),ttn((!n.c&&(n.c=new fV(m_t,n,12,10)),n.c),r),Pcn(r,0),Ccn(r,1),mdn(r,!0),ddn(r,!0)}function ASn(n,t){var e,i;return F$(e=_P(n.i,t),241)?((i=uG(e,241)).zi(),i.wi()):F$(e,507)?i=uG(e,2037).b:null}function LSn(n,t,e,i){var r,c;return WW(t),WW(e),Ren(!!(c=uG(W_(n.d,t),17)),"Row %s not in %s",t,n.e),Ren(!!(r=uG(W_(n.b,e),17)),"Column %s not in %s",e,n.c),Hhn(n,c.a,r.a,i)}function NSn(n,t,e,i,r,c,a){var o,u,s,h,f;if(f=PTn(o=(s=c==a-1)?i:0,h=r[c]),10!=i&&Uhn(cT(n,a-c),t[c],e[c],o,f),!s)for(++c,u=0;u1||-1==o?(c=uG(u,15),r.Wb(Vpn(n,c))):r.Wb(uUn(n,uG(u,58))))}function zSn(n,t,e,i){kE();var r=hZn;function c(){for(var n=0;n0)return!1;return!0}function QSn(n){var t,e,i,r,c;for(i=new bsn(new Nw(n.b).a);i.b;)t=uG((e=von(i)).ld(),10),c=uG(uG(e.md(),42).a,10),r=uG(uG(e.md(),42).b,8),JF(dL(t.n),JF(D$(c.n),r))}function JSn(n){switch(uG(oIn(n.b,(jYn(),Jyt)),387).g){case 1:kS(YJ(sin(new fX(null,new h3(n.d,16)),new Vr),new Wr),new Qr);break;case 2:gBn(n);break;case 0:mLn(n)}}function YSn(n,t,e){var i,r,c;for(!(i=e)&&(i=new fy),i.Ug("Layout",n.a.c.length),c=new Ww(n.a);c.a$9n)return e;i>-1e-6&&++e}return e}function rPn(n,t){var e;t!=n.b?(e=null,n.b&&(e=O1(n.b,n,-4,e)),t&&(e=kyn(t,n,-4,e)),(e=kwn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function cPn(n,t){var e;t!=n.f?(e=null,n.f&&(e=O1(n.f,n,-1,e)),t&&(e=kyn(t,n,-1,e)),(e=vwn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,0,t,t))}function aPn(n,t,e,i){var r,c,a;return uN(n.e)&&(a=VZ(n,1,r=t.Lk(),t.md(),c=e.md(),r.Jk()?Dqn(n,r,c,F$(r,102)&&0!=(uG(r,19).Bb&P0n)):-1,!0),i?i.nj(a):i=a),i}function oPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function uPn(n){var t,e,i;if(null==n)return null;if((e=uG(n,15)).dc())return"";for(i=new zM,t=e.Kc();t.Ob();)VA(i,(uVn(),mK(t.Pb()))),i.a+=" ";return CL(i,i.a.length-1)}function sPn(n,t,e){var i,r;return i=n.c[t.c.p][t.p],r=n.c[e.c.p][e.p],null!=i.a&&null!=r.a?Rz(i.a,r.a):null!=i.a?-1:null!=r.a?1:0}function hPn(n,t,e){return e.Ug("Tree layout",1),_J(n.b),JV(n.b,(Cjn(),zSt),zSt),JV(n.b,VSt,VSt),JV(n.b,WSt,WSt),JV(n.b,QSt,QSt),n.a=Qzn(n.b,t),YSn(n,t,e.eh(1)),e.Vg(),t}function fPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),QJ(new om(n).a,i)}function lPn(n,t){var e,i,r;if(t)for(r=((e=new Gz(t.a.length)).b-e.a)*e.c<0?(CP(),XHt):new xD(e);r.Ob();)i=v6(t,uG(r.Pb(),17).a),WJ(new Yp(n).a,i)}function bPn(n){if(null!=n&&n.length>0&&33==VJ(n,n.length-1))try{return null==sxn(r1(n,0,n.length-1)).e}catch(t){if(!F$(t=Ehn(t),33))throw hv(t)}return!1}function wPn(n,t,e){var i,r;switch(i=pgn(HQ(t)),o2(r=new lOn,t),e.g){case 1:NLn(r,Gdn(Ipn(i)));break;case 2:NLn(r,Ipn(i))}return kfn(r,(jYn(),QMt),pK(oIn(n,QMt))),r}function dPn(n){var t,e;return t=uG(N9(new Fz(ix(qgn(n.a).a.Kc(),new h))),18),e=uG(N9(new Fz(ix(Xgn(n.a).a.Kc(),new h))),18),oM(gK(oIn(t,(GYn(),pmt))))||oM(gK(oIn(e,pmt)))}function gPn(){gPn=E,wdt=new zC("ONE_SIDE",0),gdt=new zC("TWO_SIDES_CORNER",1),pdt=new zC("TWO_SIDES_OPPOSING",2),ddt=new zC("THREE_SIDES",3),bdt=new zC("FOUR_SIDES",4)}function pPn(n,t){var e,i,r,c;for(c=new Zm,r=0,i=t.Kc();i.Ob();){for(e=xwn(uG(i.Pb(),17).a+r);e.a=n.f)break;mv(c.c,e)}return c}function mPn(n,t){var e,i,r;for(i=new Ww(t.a);i.a0&&Mjn(this,this.c-1,(KQn(),kRt)),this.c0&&n[0].length>0&&(this.c=oM(gK(oIn(HQ(n[0][0]),(GYn(),Wpt))))),this.a=Inn(REt,zZn,2117,n.length,0,2),this.b=Inn(UEt,zZn,2118,n.length,0,2),this.d=new zbn}function LPn(n){return 0!=n.c.length&&((u3(0,n.c.length),uG(n.c[0],18)).c.i.k==(zIn(),wbt)||o9(YJ(new fX(null,new h3(n,16)),new xc),new Rc))}function NPn(n,t){var i,r,c,a,o,u;for(o=GFn(t),c=t.f,u=t.g,a=e.Math.sqrt(c*c+u*u),r=0,i=new Ww(o);i.a=0?(e=bSn(n,g0n),i=Kmn(n,g0n)):(e=bSn(t=Dz(n,1),5e8),i=Lgn(Nz(i=Kmn(t,5e8),1),E3(n,1))),S3(Nz(i,32),E3(e,L0n))}function YPn(n,t,e){var i;switch(MK(0!=t.b),i=uG(Lrn(t,t.a.a),8),e.g){case 0:i.b=0;break;case 2:i.b=n.f;break;case 3:i.a=0;break;default:i.a=n.g}return lW(Fkn(t,0),i),t}function ZPn(n,t,e,i){var r,c,a,o,u;switch(u=n.b,o=ykn(a=(c=t.d).j,u.d[a.g],e),r=JF(D$(c.n),c.a),c.j.g){case 1:case 3:o.a+=r.a;break;case 2:case 4:o.b+=r.b}s8(i,o,i.c.b,i.c)}function nCn(n,t,e){var i,r,c,a;for(a=Ten(n.e,t,0),(c=new Tk).b=e,i=new N4(n.e,a);i.b1;t>>=1)0!=(1&t)&&(i=j5(i,e)),e=1==e.d?j5(e,e):new nkn(_Un(e.a,e.d,Inn(YHt,W1n,28,e.d<<1,15,1)));return i=j5(i,e)}function aCn(){var n,t,e,i;for(aCn=E,but=Inn(eUt,I0n,28,25,15,1),wut=Inn(eUt,I0n,28,33,15,1),i=152587890625e-16,t=32;t>=0;t--)wut[t]=i,i*=.5;for(e=1,n=24;n>=0;n--)but[n]=e,e*=.5}function oCn(n){var t,e;if(oM(gK(zDn(n,(jYn(),sMt)))))for(e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)if(BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,hMt))))return!0;return!1}function uCn(n,t){var e,i,r;FV(n.f,t)&&(t.b=n,i=t.c,-1!=Ten(n.j,i,0)||kD(n.j,i),r=t.d,-1!=Ten(n.j,r,0)||kD(n.j,r),0!=(e=t.a.b).c.length&&(!n.i&&(n.i=new vkn(n)),Psn(n.i,e)))}function sCn(n){var t,e,i,r;return(e=(t=n.c.d).j)==(r=(i=n.d.d).j)?t.p=0&&m_(n.substr(t,3),"GMT")||t>=0&&m_(n.substr(t,3),"UTC")?(e[0]=t+3,PUn(n,e,i)):PUn(n,e,i)}function wCn(n,t){var e,i,r,c,a;for(c=n.g.a,a=n.g.b,i=new Ww(n.d);i.ae;c--)n[c]|=t[c-e-1]>>>a,n[c-1]=t[c-e-1]<0&&qGn(n.g,t,n.g,t+i,o),a=e.Kc(),n.i+=i,r=0;r>4&15,c=15&n[i],a[r++]=JKt[e],a[r++]=JKt[c];return mvn(a,0,a.length)}function $Cn(n){var t,e;return n>=P0n?(t=C0n+(n-P0n>>10&1023)&D1n,e=56320+(n-P0n&1023)&D1n,String.fromCharCode(t)+""+String.fromCharCode(e)):String.fromCharCode(n&D1n)}function DCn(n,t){var e,i,r,c;return VK(),(r=uG(uG(Y9(n.r,t),21),87)).gc()>=2&&(i=uG(r.Kc().Pb(),117),e=n.u.Hc((eNn(),bRt)),c=n.u.Hc(pRt),!i.a&&!e&&(2==r.gc()||c))}function xCn(n,t,e,i,r){var c,a,o;for(c=zFn(n,t,e,i,r),o=!1;!c;)gxn(n,r,!0),o=!0,c=zFn(n,t,e,i,r);o&&gxn(n,r,!1),0!=(a=Jhn(r)).c.length&&(n.d&&n.d.Gg(a),xCn(n,r,e,i,a))}function RCn(){RCn=E,mxt=new OO(q4n,0),gxt=new OO("DIRECTED",1),vxt=new OO("UNDIRECTED",2),wxt=new OO("ASSOCIATION",3),pxt=new OO("GENERALIZATION",4),dxt=new OO("DEPENDENCY",5)}function KCn(n,t){var e;if(!h0(n))throw hv(new kM(Stt));switch(e=h0(n),t.g){case 1:return-(n.j+n.f);case 2:return n.i-e.g;case 3:return n.j-e.f;case 4:return-(n.i+n.g)}return 0}function FCn(n,t,e){var i,r,c;return i=t.Lk(),c=t.md(),r=i.Jk()?VZ(n,4,i,c,null,Dqn(n,i,c,F$(i,102)&&0!=(uG(i,19).Bb&P0n)),!0):VZ(n,i.tk()?2:1,i,c,i.ik(),-1,!0),e?e.nj(r):e=r,e}function _Cn(n,t){var e,i;for(tJ(t),i=n.b.c.length,kD(n.b,t);i>0;){if(e=i,i=(i-1)/2|0,n.a.Ne(zq(n.b,i),t)<=0)return Y8(n.b,e,t),!0;Y8(n.b,e,zq(n.b,i))}return Y8(n.b,i,t),!0}function BCn(n,t,i,r){var c,a;if(c=0,i)c=$bn(n.a[i.g][t.g],r);else for(a=0;a<$st;a++)c=e.Math.max(c,$bn(n.a[a][t.g],r));return t==(Yrn(),Est)&&n.b&&(c=e.Math.max(c,n.b.a)),c}function HCn(n,t){var e,i,r,c,a;return i=n.i,r=t.i,!(!i||!r)&&i.i==r.i&&i.i!=(KQn(),kRt)&&i.i!=(KQn(),_Rt)&&(e=(c=i.g.a)+i.j.a,c<=(a=r.g.a)+r.j.a&&e>=a)}function UCn(n){switch(n.g){case 0:return new Uo;case 1:return new qo;default:throw hv(new vM("No implementation is available for the width approximator "+(null!=n.f?n.f:""+n.g)))}}function GCn(n,t,e,i){var r;if(r=!1,RA(i)&&(r=!0,ZG(t,e,mK(i))),r||KA(i)&&(r=!0,GCn(n,t,e,i)),r||F$(i,242)&&(r=!0,vZ(t,e,uG(i,242))),!r)throw hv(new pM(Cet))}function qCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),mBt).length;++i)if(m_(mBt[i],r))return i;return 0}function XCn(n,t){var e,i,r;if((e=t.qi(n.a))&&null!=(r=Lmn((!e.b&&(e.b=new XR((YYn(),H_t),wBt,e)),e.b),Srt)))for(i=1;i<(gAn(),vBt).length;++i)if(m_(vBt[i],r))return i;return 0}function zCn(n,t){var e,i,r,c;if(tJ(t),(c=n.a.gc())0?1:0;c.a[r]!=e;)c=c.a[r],r=n.a.Ne(e.d,c.d)>0?1:0;c.a[r]=i,i.b=e.b,i.a[0]=e.a[0],i.a[1]=e.a[1],e.a[0]=null,e.a[1]=null}function ZCn(n){var t,e,i,r;for(t=new Zm,zV(e=Inn(ZHt,B2n,28,n.a.c.length,16,1),e.length),r=new Ww(n.a);r.a0&&lUn((u3(0,e.c.length),uG(e.c[0],30)),n),e.c.length>1&&lUn(uG(zq(e,e.c.length-1),30),n),t.Vg()}function eIn(n){return eNn(),!(qsn(X1(WX(wRt,Uhn(cT(BRt,1),p1n,279,0,[gRt])),n))>1||qsn(X1(WX(bRt,Uhn(cT(BRt,1),p1n,279,0,[lRt,pRt])),n))>1)}function iIn(n,t){F$(U1((MP(),l_t),n),507)?r2(l_t,n,new EA(this,t)):r2(l_t,n,this),HIn(this,t),t==(vj(),y_t)?(this.wb=uG(this,2038),uG(t,2040)):this.wb=(tQ(),M_t)}function rIn(n){var t,e;if(null==n)return null;for(t=null,e=0;e=$1n?"error":i>=900?"warn":i>=800?"info":"log",n.a),n.b&&SKn(t,e,n.b,"Exception: ",!0))}function oIn(n,t){var e,i;return!n.q&&(n.q=new Ym),null!=(i=cQ(n.q,t))?i:(F$(e=t.Sg(),4)&&(null==e?(!n.q&&(n.q=new Ym),u7(n.q,t)):(!n.q&&(n.q=new Ym),vJ(n.q,t,e))),e)}function uIn(){uIn=E,Tlt=new gC("P1_CYCLE_BREAKING",0),jlt=new gC("P2_LAYERING",1),Elt=new gC("P3_NODE_ORDERING",2),Slt=new gC("P4_NODE_PLACEMENT",3),Plt=new gC("P5_EDGE_ROUTING",4)}function sIn(n,t){var e;if(Win(),n.c==t.c){if(n.b==t.b||eun(n.b,t.b)){if(e=BL(n.b)?1:-1,n.a&&!t.a)return e;if(!n.a&&t.a)return-e}return d$(n.b.g,t.b.g)}return ugn(n.c,t.c)}function hIn(n,t){var e,i;if(kIn(n,t))return!0;for(i=new Ww(t);i.a=(r=n.Ej())||t<0)throw hv(new dM(zet+t+Vet+r));if(e>=r||e<0)throw hv(new dM(Wet+e+Vet+r));return t!=e?(c=n.Cj(e),n.qj(t,c),i=c):i=n.xj(e),i}function mIn(n){var t,e,i;if(i=n,n)for(t=0,e=n.Eh();e;e=e.Eh()){if(++t>O0n)return mIn(e);if(i=e,e==n)throw hv(new kM("There is a cycle in the containment hierarchy of "+n))}return i}function vIn(n){var t,e,i;for(i=new Ysn(TZn,"[","]"),e=n.Kc();e.Ob();)o7(i,xA(t=e.Pb())===xA(n)?"(this Collection)":null==t?IZn:cpn(t));return i.a?0==i.e.length?i.a.a:i.a.a+""+i.e:i.c}function kIn(n,t){var e,i;if(i=!1,t.gc()<2)return!1;for(e=0;e1&&(n.j.b+=n.e)):(n.j.a+=i.a,n.j.b=e.Math.max(n.j.b,i.b),n.d.c.length>1&&(n.j.a+=n.e))}function jIn(){jIn=E,ydt=Uhn(cT(YRt,1),z4n,64,0,[(KQn(),yRt),kRt,KRt]),kdt=Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt]),Mdt=Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt,yRt]),Tdt=Uhn(cT(YRt,1),z4n,64,0,[_Rt,yRt,kRt])}function EIn(n,t,e,i){var r,c,a,o,u;if(c=n.c.d,a=n.d.d,c.j!=a.j)for(u=n.b,r=c.j,o=null;r!=a.j;)o=0==t?qdn(r):Udn(r),aq(i,JF(ykn(r,u.d[r.g],e),ykn(o,u.d[o.g],e))),r=o}function SIn(n,t,e,i){var r,c,a,o,u;return o=uG((a=Sjn(n.a,t,e)).a,17).a,c=uG(a.b,17).a,i&&(u=uG(oIn(t,(GYn(),lmt)),10),r=uG(oIn(e,lmt),10),u&&r&&(C5(n.b,u,r),o+=n.b.i,c+=n.b.e)),o>c}function PIn(n){var t,e,i,r,c,a,o,u;for(this.a=Fyn(n),this.b=new Zm,i=0,r=(e=n).length;iGK(n.d).c?(n.i+=n.g.c,Bmn(n.d)):GK(n.d).c>GK(n.g).c?(n.e+=n.d.c,Bmn(n.g)):(n.i+=TX(n.g),n.e+=TX(n.d),Bmn(n.g),Bmn(n.d))}function LIn(n,t,e){var i,r,c,a;for(c=t.q,a=t.r,new A2((_7(),$St),t,c,1),new A2($St,c,a,1),r=new Ww(e);r.au&&(s=u/r),(c=e.Math.abs(t.b-n.b))>a&&(h=a/c),o=e.Math.min(s,h),n.a+=o*(t.a-n.a),n.b+=o*(t.b-n.b)}function FIn(n,t,e,i,r){var c,a;for(a=!1,c=uG(zq(e.b,0),27);Sqn(n,t,c,i,r)&&(a=!0,HSn(e,c),0!=e.b.c.length);)c=uG(zq(e.b,0),27);return 0==e.b.c.length&&uEn(e.j,e),a&&OTn(t.q),a}function _In(n,t){var e,i,r,c;if(l_n(),t.b<2)return!1;for(i=e=uG(I6(c=Fkn(t,0)),8);c.b!=c.d.c;){if(VRn(n,i,r=uG(I6(c),8)))return!0;i=r}return!!VRn(n,i,e)}function BIn(n,t,e,i){return 0==e?(!n.o&&(n.o=new ltn((tYn(),XKt),EFt,n,0)),G_(n.o,t,i)):uG(ern(uG(Lsn(n,16),29)||n.ii(),e),69).wk().Ak(n,$vn(n),e-iQ(n.ii()),t,i)}function HIn(n,t){var e;t!=n.sb?(e=null,n.sb&&(e=uG(n.sb,54).Th(n,1,sFt,e)),t&&(e=uG(t,54).Rh(n,1,sFt,e)),(e=Jwn(n,t,e))&&e.oj()):0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,4,t,t))}function UIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need an end point."));e=$cn(t,"x"),mcn(new rm(n).a,(tJ(e),e)),i=$cn(t,"y"),jcn(new cm(n).a,(tJ(i),i))}function GIn(n,t){var e,i;if(!t)throw hv(new SM("All edge sections need a start point."));e=$cn(t,"x"),Tcn(new tm(n).a,(tJ(e),e)),i=$cn(t,"y"),Ecn(new em(n).a,(tJ(i),i))}function qIn(n,t){var e,i,r,c,a;for(i=0,c=xln(n).length;i>22-t,r=n.h<>22-t):t<44?(e=0,i=n.l<>44-t):(e=0,i=0,r=n.l<n)throw hv(new vM("k must be smaller than n"));return 0==t||t==n?1:0==n?0:uSn(n)/(uSn(t)*uSn(n-t))}function iOn(n,t){var e,i,r,c;for(e=new jN(n);null!=e.g||e.c?null==e.g||0!=e.i&&uG(e.g[e.i-1],51).Ob():O0(e);)if(F$(c=uG(Wxn(e),58),167))for(i=uG(c,167),r=0;r>4],t[2*e+1]=mHt[15&r];return mvn(t,0,t.length)}function vOn(n){var t;switch(TJ(),n.c.length){case 0:return Eat;case 1:return fq((t=uG(ULn(new Ww(n)),44)).ld(),t.md());default:return new xy(uG(Ekn(n,Inn(Sat,c1n,44,n.c.length,0,1)),173))}}function kOn(n){var t,e,i,r,c;for(t=new ND,e=new ND,A6(t,n),A6(e,n);e.b!=e.c;)for(c=new Ww(uG(xV(e),36).a);c.a0&&sHn(n,e,t),r):j$n(n,t,e)}function jOn(){jOn=E,XYn(),BIt=mDt,VIt=DDt,$It=_$t,DIt=U$t,xIt=q$t,NIt=K$t,RIt=V$t,_It=bDt,EHn(),AIt=dIt,LIt=gIt,UIt=MIt,XIt=EIt,GIt=TIt,qIt=jIt,KIt=mIt,FIt=kIt,HIt=yIt,zIt=SIt,WIt=CIt,OIt=wIt}function EOn(n,t){var e,i,r,c,a;if(n.e<=t)return n.g;if(l3(n,n.g,t))return n.g;for(c=n.r,i=n.g,a=n.r,r=(c-i)/2+i;i+11&&(n.e.b+=n.a)):(n.e.a+=i.a,n.e.b=e.Math.max(n.e.b,i.b),n.d.c.length>1&&(n.e.a+=n.a))}function NOn(n){var t,e,i,r;switch(t=(r=n.i).b,i=r.j,e=r.g,r.a.g){case 0:e.a=(n.g.b.o.a-i.a)/2;break;case 1:e.a=t.d.n.a+t.d.a.a;break;case 2:e.a=t.d.n.a+t.d.a.a-i.a;break;case 3:e.b=t.d.n.b+t.d.a.b}}function $On(n,t,e){var i,r,c;for(r=new Fz(ix(Ggn(e).a.Kc(),new h));hDn(r);)v9(i=uG(N9(r),18))||!v9(i)&&i.c.i.c==i.d.i.c||(c=aRn(n,i,e,new Ck)).c.length>1&&mv(t.c,c)}function DOn(n,t,e,i,r){if(ii&&(n.a=i),n.br&&(n.b=r),n}function xOn(n){if(F$(n,143))return dKn(uG(n,143));if(F$(n,233))return Mpn(uG(n,233));if(F$(n,23))return WIn(uG(n,23));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[n])))))}function ROn(n,t,e,i,r){var c,a,o;for(c=!0,a=0;a>>r|e[a+i+1]<>>r,++a}return c}function KOn(n,t,e,i){var r,c;if(t.k==(zIn(),wbt))for(c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if((r=uG(N9(c),18)).c.i.k==wbt&&n.c.a[r.c.i.c.p]==i&&n.c.a[t.c.p]==e)return!0;return!1}function FOn(n,t){var e,i,r,c;return t&=63,e=n.h&l0n,t<22?(c=e>>>t,r=n.m>>t|e<<22-t,i=n.l>>t|n.m<<22-t):t<44?(c=0,r=e>>>t-22,i=n.m>>t-22|n.h<<44-t):(c=0,r=0,i=e>>>t-44),p$(i&f0n,r&f0n,c&l0n)}function _On(n,t,e,i){var r;this.b=i,this.e=n==(ean(),BEt),r=t[e],this.d=Jq(ZHt,[zZn,B2n],[183,28],16,[r.length,r.length],2),this.a=Jq(YHt,[zZn,W1n],[53,28],15,[r.length,r.length],2),this.c=new IPn(t,e)}function BOn(n){var t,e,i;for(n.k=new L2((KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,n.j.c.length),i=new Ww(n.j);i.a=e)return YOn(n,t,i.p),!0;return!1}function XOn(n,t,e,i){var r,c,a,o,u,s;for(a=e.length,c=0,r=-1,s=Tin((s3(t,n.length+1),n.substr(t)),(cB(),out)),o=0;oc&&IV(s,Tin(e[o],out))&&(r=o,c=u);return r>=0&&(i[0]=t+c),r}function zOn(n){var t;return 0!=(64&n.Db)?rOn(n):(t=new lx(Ftt),!n.a||JA(JA((t.a+=' "',t),n.a),'"'),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VOn(n,t,e){var i,r,c,a,o;for(o=VKn(n.e.Dh(),t),r=uG(n.g,124),i=0,a=0;ae?iLn(n,e,"start index"):t<0||t>e?iLn(t,e,"end index"):LBn("end index (%s) must not be less than start index (%s)",Uhn(cT(dat,1),EZn,1,5,[xwn(t),xwn(n)]))}function JOn(n,t){var e,i,r,c;for(i=0,r=n.length;i0&&nAn(n,c,e));t.p=0}function tAn(n){var t;this.c=new lS,this.f=n.e,this.e=n.d,this.i=n.g,this.d=n.c,this.b=n.b,this.k=n.j,this.a=n.a,n.i?this.j=n.i:this.j=new nB(t=uG(Mj(MNt),9),uG(MF(t,t.length),9),0),this.g=n.f}function eAn(n){var t,e,i,r;for(t=jQ(JA(new lx("Predicates."),"and"),40),e=!0,r=new Jw(n);r.b0?o[a-1]:Inn(pbt,e6n,10,0,0,1),r=o[a],s=a=0?n.ki(r):zLn(n,i)}else sdn(n,e,i)}function uAn(n){var t,e;if(e=null,t=!1,F$(n,211)&&(t=!0,e=uG(n,211).a),t||F$(n,263)&&(t=!0,e=""+uG(n,263).a),t||F$(n,492)&&(t=!0,e=""+uG(n,492).a),!t)throw hv(new pM(Cet));return e}function sAn(n,t,e){var i,r,c,a,o,u;for(u=VKn(n.e.Dh(),t),i=0,o=n.i,r=uG(n.g,124),a=0;a=n.d.b.c.length&&((t=new bQ(n.d)).p=i.p-1,kD(n.d.b,t),(e=new bQ(n.d)).p=i.p,kD(n.d.b,e)),a2(i,uG(zq(n.d.b,i.p),30))}function yAn(n,t,e){var i,r,c;if(!n.b[t.g]){for(n.b[t.g]=!0,!(i=e)&&(i=new L7),aq(i.b,t),c=n.a[t.g].Kc();c.Ob();)(r=uG(c.Pb(),65)).b!=t&&yAn(n,r.b,i),r.c!=t&&yAn(n,r.c,i),aq(i.a,r);return i}return null}function MAn(n){switch(n.g){case 0:case 1:case 2:return KQn(),yRt;case 3:case 4:case 5:return KQn(),KRt;case 6:case 7:case 8:return KQn(),_Rt;case 9:case 10:case 11:return KQn(),kRt;default:return KQn(),FRt}}function TAn(n,t){var e;return 0!=n.c.length&&(e=Imn((u3(0,n.c.length),uG(n.c[0],18)).c.i),n2(),e==(Yyn(),wjt)||e==bjt||o9(YJ(new fX(null,new h3(n,16)),new Kc),new up(t)))}function jAn(n,t){if(F$(t,207))return KN(n,uG(t,27));if(F$(t,193))return FN(n,uG(t,123));if(F$(t,451))return RN(n,uG(t,166));throw hv(new vM(Aet+vIn(new IM(Uhn(cT(dat,1),EZn,1,5,[t])))))}function EAn(n,t,e){var i,r;if(this.f=n,e7(e,r=(i=uG(cQ(n.b,t),260))?i.a:0),e>=(r/2|0))for(this.e=i?i.c:null,this.d=r;e++0;)Ein(this);this.b=t,this.a=null}function SAn(n,t){var e,i;t.a?WKn(n,t):(!!(e=uG(jS(n.b,t.b),60))&&e==n.a[t.b.f]&&!!e.a&&e.a!=t.b.a&&e.c.Fc(t.b),!!(i=uG(TS(n.b,t.b),60))&&n.a[i.f]==t.b&&!!i.a&&i.a!=t.b.a&&t.b.c.Fc(i),sD(n.b,t.b))}function PAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).dc())return e.n.b=0,void(e.n.c=0);e.n.b=n.C.b,e.n.c=n.C.c,n.A.Hc((Qmn(),JRt))&&vBn(n,t),i=Iyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.a=i}function CAn(n,t){var e,i;if(e=uG(AJ(n.b,t),127),uG(uG(Y9(n.r,t),21),87).dc())return e.n.d=0,void(e.n.a=0);e.n.d=n.C.d,e.n.a=n.C.a,n.A.Hc((Qmn(),JRt))&&kBn(n,t),i=Cyn(n,t),M_n(n,t)==(Vkn(),Zxt)&&(i+=2*n.w),e.a.b=i}function IAn(n,t){var e,i,r,c;for(c=new Zm,i=new Ww(t);i.ai&&(s3(t-1,n.length),n.charCodeAt(t-1)<=32);)--t;return i>0||te.a&&(i.Hc((ZSn(),VNt))?r=(t.a-e.a)/2:i.Hc(QNt)&&(r=t.a-e.a)),t.b>e.b&&(i.Hc((ZSn(),YNt))?c=(t.b-e.b)/2:i.Hc(JNt)&&(c=t.b-e.b)),JCn(n,r,c)}function eLn(n,t,e,i,r,c,a,o,u,s,h,f,l){F$(n.Cb,90)&&yLn(y9(uG(n.Cb,90)),4),qon(n,e),n.f=a,Qdn(n,o),Ydn(n,u),Wdn(n,s),Jdn(n,h),mdn(n,f),Cgn(n,l),ddn(n,!0),Pcn(n,r),n.Zk(c),Kbn(n,t),null!=i&&(n.i=null,lon(n,i))}function iLn(n,t,e){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,[e,xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must not be greater than size (%s)",Uhn(cT(dat,1),EZn,1,5,[e,xwn(n),xwn(t)]))}function rLn(n,t,e,i,r,c){var a,o,u;if(i-e<7)Ygn(t,e,i,c);else if(rLn(t,n,o=e+r,u=o+((a=i+r)-o>>1),-r,c),rLn(t,n,u,a,-r,c),c.Ne(n[u-1],n[u])<=0)for(;e=0?n.bi(c,e):lRn(n,r,e)}else lpn(n,i,r,e)}function hLn(n){var t,e;if(n.f){for(;n.n>0;){if(F$(e=(t=uG(n.k.Xb(n.n-1),76)).Lk(),102)&&0!=(uG(e,19).Bb&Qtt)&&(!n.e||e.pk()!=tFt||0!=e.Lj())&&null!=t.md())return!0;--n.n}return!1}return n.n>0}function fLn(n){var t,e,i,r;if(e=uG(n,54)._h())try{if(i=null,(t=jxn((MP(),l_t),xUn(jpn(e))))&&(r=t.ai())&&(i=r.Fl(bM(e.e))),i&&i!=n)return fLn(i)}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}return n}function lLn(n,t,e){var i,r;e.Ug("Remove overlaps",1),e.dh(t,l7n),i=uG(zDn(t,(SK(),zCt)),27),n.f=i,n.a=aMn(uG(zDn(t,(jOn(),zIt)),299)),rw(n,(tJ(r=pK(zDn(t,(XYn(),DDt)))),r)),xWn(n,t,GFn(i),e),e.dh(t,w7n)}function bLn(n){var t,e,i;if(oM(gK(zDn(n,(XYn(),C$t))))){for(i=new Zm,e=new Fz(ix(eRn(n).a.Kc(),new h));hDn(e);)BNn(t=uG(N9(e),74))&&oM(gK(zDn(t,I$t)))&&mv(i.c,t);return i}return hZ(),hZ(),zot}function wLn(n){if(!n)return By(),Vat;var t=n.valueOf?n.valueOf():n;if(t!==n){var i=Wat[typeof t];return i?i(t):Vbn(typeof t)}return n instanceof Array||n instanceof e.Array?new Eb(n):new Cb(n)}function dLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(r),c.b=e.Math.max(c.b,a.a),c.b>a.a&&!t&&(c.b=a.a),c.c=-(c.b-a.a)/2,i.g){case 1:c.d=-c.a;break;case 3:c.d=a.b}YGn(r),rqn(r)}function gLn(n,t,i){var r,c,a;switch(a=n.o,(c=(r=uG(AJ(n.p,i),252)).i).b=gNn(r),c.a=dNn(r),c.a=e.Math.max(c.a,a.b),c.a>a.b&&!t&&(c.a=a.b),c.d=-(c.a-a.b)/2,i.g){case 4:c.c=-c.b;break;case 2:c.c=a.a}YGn(r),rqn(r)}function pLn(n,t){var e,i,r,c,a;if(!t.dc())if(r=uG(t.Xb(0),131),1!=t.gc())for(e=1;e0)try{i=vUn(t,j1n,vZn)}catch(r){throw F$(r=Ehn(r),130)?hv(new Pen(r)):hv(r)}return!n.a&&(n.a=new qm(n)),i<(e=n.a).i&&i>=0?uG(zrn(e,i),58):null}function TLn(n,t){if(n<0)return LBn(jZn,Uhn(cT(dat,1),EZn,1,5,["index",xwn(n)]));if(t<0)throw hv(new vM(SZn+t));return LBn("%s (%s) must be less than size (%s)",Uhn(cT(dat,1),EZn,1,5,["index",xwn(n),xwn(t)]))}function jLn(n){var t,e,i,r,c;if(null==n)return IZn;for(c=new Ysn(TZn,"[","]"),i=0,r=(e=n).length;i=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Zl(t)}function VLn(n){var t,i;return n>-0x800000000000&&n<0x800000000000?0==n?0:((t=n<0)&&(n=-n),i=t0(e.Math.floor(e.Math.log(n)/.6931471805599453)),(!t||n!=e.Math.pow(2,i))&&++i,i):dhn(Bsn(n))}function WLn(n){var t,e,i,r,c,a,o;for(c=new XL,e=new Ww(n);e.a2&&o.e.b+o.j.b<=2&&(r=o,i=a),c.a.zc(r,c),r.q=i);return c}function QLn(n,t,e){e.Ug("Eades radial",1),e.dh(t,w7n),n.d=uG(zDn(t,(SK(),zCt)),27),n.c=uM(pK(zDn(t,(jOn(),HIt)))),n.e=aMn(uG(zDn(t,zIt),299)),n.a=_pn(uG(zDn(t,WIt),434)),n.b=PSn(uG(zDn(t,KIt),354)),UEn(n),e.dh(t,w7n)}function JLn(n,t){if(t.Ug("Target Width Setter",1),!vnn(n,(S_n(),vAt)))throw hv(new jM("A target width has to be set if the TargetWidthWidthApproximator should be used."));Myn(n,(lBn(),POt),pK(zDn(n,vAt))),t.Vg()}function YLn(n,t){var e,i,r;return zsn(i=new gMn(n),t),kfn(i,(GYn(),Kpt),t),kfn(i,(jYn(),JMt),($Pn(),cRt)),kfn(i,byt,(nMn(),ONt)),Hb(i,(zIn(),lbt)),o2(e=new lOn,i),NLn(e,(KQn(),_Rt)),o2(r=new lOn,i),NLn(r,kRt),i}function ZLn(n){switch(n.g){case 0:return new zy((ean(),_Et));case 1:return new bl;case 2:return new wl;default:throw hv(new vM("No implementation is available for the crossing minimizer "+(null!=n.f?n.f:""+n.g)))}}function nNn(n,t){var e,i,r,c;for(n.c[t.p]=!0,kD(n.a,t),c=new Ww(t.j);c.a=(c=a.gc()))a.$b();else for(r=a.Kc(),i=0;i0?HM():c<0&&bNn(n,t,-c),!0)}function dNn(n){var t,e,i,r,c,a;if(a=0,0==n.b){for(t=0,r=0,c=(i=AMn(n,!0)).length;r0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}else a=fT(Mun(ZJ(JJ(BV(n.a),new jn),new En)));return a>0?a+n.n.d+n.n.a:0}function gNn(n){var t,e,i,r,c,a;if(a=0,0==n.b)a=fT(Mun(ZJ(JJ(BV(n.a),new Mn),new Tn)));else{for(t=0,r=0,c=(i=LMn(n,!0)).length;r0&&(a+=e,++t);t>1&&(a+=n.c*(t-1))}return a>0?a+n.n.b+n.n.c:0}function pNn(n){var t,e;if(2!=n.c.length)throw hv(new kM("Order only allowed for two paths."));u3(0,n.c.length),t=uG(n.c[0],18),u3(1,n.c.length),e=uG(n.c[1],18),t.d.i!=e.c.i&&(n.c.length=0,mv(n.c,e),mv(n.c,t))}function mNn(n,t,e){var i;for(vN(e,t.g,t.f),kN(e,t.i,t.j),i=0;i<(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i;i++)mNn(n,uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),i),27),uG(zrn((!e.a&&(e.a=new fV(bFt,e,10,11)),e.a),i),27))}function vNn(n,t){var i,r,c,a;for(i=(a=uG(AJ(n.b,t),127)).a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).c&&(i.a=e.Math.max(i.a,rq(r.c)));if(i.a>0)switch(t.g){case 2:a.n.c=n.s;break;case 4:a.n.b=n.s}}function kNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(cGn(),$ft)),17).a-uG(oIn(n,$ft),17).a)?(i=YF(D$(uG(oIn(n,(mon(),zft)),8)),uG(oIn(n,Vft),8)),r=YF(D$(uG(oIn(t,zft),8)),uG(oIn(t,Vft),8)),ugn(i.a*i.b,r.a*r.b)):e}function yNn(n,t){var e,i,r;return 0==(e=uG(oIn(t,(QGn(),yCt)),17).a-uG(oIn(n,yCt),17).a)?(i=YF(D$(uG(oIn(n,(OQn(),vPt)),8)),uG(oIn(n,kPt),8)),r=YF(D$(uG(oIn(t,vPt),8)),uG(oIn(t,kPt),8)),ugn(i.a*i.b,r.a*r.b)):e}function MNn(n){var t,e;return(e=new WM).a+="e_",null!=(t=bhn(n))&&(e.a+=""+t),n.c&&n.d&&(JA((e.a+=" ",e),njn(n.c)),JA(QA((e.a+="[",e),n.c.i),"]"),JA((e.a+=Y4n,e),njn(n.d)),JA(QA((e.a+="[",e),n.d.i),"]")),e.a}function TNn(n){switch(n.g){case 0:return new Tl;case 1:return new jl;case 2:return new yl;case 3:return new kl;default:throw hv(new vM("No implementation is available for the layout phase "+(null!=n.f?n.f:""+n.g)))}}function jNn(n,t,i,r,c){var a;switch(a=0,c.g){case 1:a=e.Math.max(0,t.b+n.b-(i.b+r));break;case 3:a=e.Math.max(0,-n.b-r);break;case 2:a=e.Math.max(0,-n.a-r);break;case 4:a=e.Math.max(0,t.a+n.a-(i.a+r))}return a}function ENn(n,t,e){var i,r,c;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)r=v6(e,uG(c.Pb(),17).a),vet in r.a||ket in r.a?bHn(n,r,t):JJn(n,r,t),GD(uG(cQ(n.b,jvn(r)),74))}function SNn(n){var t,e;switch(n.b){case-1:return!0;case 0:return(e=n.t)>1||-1==e||(t=bEn(n))&&(PP(),t.lk()==srt)?(n.b=-1,!0):(n.b=1,!1);default:return!1}}function PNn(n,t){var e,i,r,c;if(EYn(n),0!=n.c||123!=n.a)throw hv(new CM(rZn((t$(),bit))));if(c=112==t,i=n.d,(e=aR(n.i,125,i))<0)throw hv(new CM(rZn((t$(),wit))));return r=r1(n.i,i,e),n.d=e+1,itn(r,c,512==(512&n.e))}function CNn(n){var t,e,i,r,c,a,o;if((i=n.a.c.length)>0)for(a=n.c.d,r=vD(YF(new MO((o=n.d.d).a,o.b),a),1/(i+1)),c=new MO(a.a,a.b),e=new Ww(n.a);e.a=0&&i=0?n.Lh(e,!0,!0):YNn(n,r,!0),160),uG(i,220).Wl(t);throw hv(new vM(Gtt+t.xe()+ztt))}function DNn(){var n;return IP(),pBt?uG(jxn((MP(),l_t),Drt),2038):(ML(Sat,new Eh),yWn(),n=uG(F$(U1((MP(),l_t),Drt),560)?U1(l_t,Drt):new dJ,560),pBt=!0,HYn(n),oZn(n),vJ((pP(),k_t),n,new Bs),r2(l_t,Drt,n),n)}function xNn(n,t){var e,i,r,c;n.j=-1,uN(n.e)?(e=n.i,c=0!=n.i,z9(n,t),i=new Ken(n.e,3,n.c,null,t,e,c),r=t.zl(n.e,n.c,null),(r=yPn(n,t,r))?(r.nj(i),r.oj()):Msn(n.e,i)):(z9(n,t),(r=t.zl(n.e,n.c,null))&&r.oj())}function RNn(n,t){var e,i,r;if(r=0,(i=t[0])>=n.length)return-1;for(s3(i,n.length),e=n.charCodeAt(i);e>=48&&e<=57&&(r=10*r+(e-48),!(++i>=n.length));)s3(i,n.length),e=n.charCodeAt(i);return i>t[0]?t[0]=i:r=-1,r}function KNn(n){var t,i,r,c,a;return i=c=uG(n.a,17).a,r=a=uG(n.b,17).a,t=e.Math.max(e.Math.abs(c),e.Math.abs(a)),c<=0&&c==a?(i=0,r=a-1):c==-t&&a!=t?(i=a,r=c,a>=0&&++i):(i=-a,r=c),new WO(xwn(i),xwn(r))}function FNn(n,t,e,i){var r,c,a,o,u,s;for(r=0;r=0&&s>=0&&u=n.i)throw hv(new dM(zet+t+Vet+n.i));if(e>=n.i)throw hv(new dM(Wet+e+Vet+n.i));return i=n.g[e],t!=e&&(t>16))>>16&16),e+=t=(i=(n>>=t)-256)>>16&8,e+=t=(i=(n<<=t)-j0n)>>16&4,(e+=t=(i=(n<<=t)-VZn)>>16&2)+2-(t=(i=(n<<=t)>>14)&~(i>>1)))}function qNn(n){var t,e,i,r;for(lZ(),aft=new Zm,cft=new Ym,rft=new Zm,!n.a&&(n.a=new fV(bFt,n,10,11)),JQn(t=n.a),r=new DD(t);r.e!=r.i.gc();)i=uG(Zkn(r),27),-1==Ten(aft,i,0)&&(e=new Zm,kD(rft,e),skn(i,e));return rft}function XNn(n,t,e){var i,r,c,a;n.a=e.b.d,F$(t,326)?(z8(c=COn(r=JFn(uG(t,74),!1,!1)),i=new Kd(n)),sqn(c,r),null!=t.of((XYn(),L$t))&&z8(uG(t.of(L$t),75),i)):((a=uG(t,422)).rh(a.nh()+n.a.a),a.sh(a.oh()+n.a.b))}function zNn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).c.g==n.g&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new kp(e))&&mv(r.c,e);return f$(r,new ja),r}function VNn(n,t,e){var i,r,c,a;return F$(t,153)&&F$(e,153)?(c=uG(t,153),a=uG(e,153),n.a[c.a][a.a]+n.a[a.a][c.a]):F$(t,250)&&F$(e,250)&&(i=uG(t,250),r=uG(e,250),i.a==r.a)?uG(oIn(r.a,(cGn(),$ft)),17).a:0}function WNn(n,t){var i,r,c,a,o,u,s,h;for(h=uM(pK(oIn(t,(jYn(),ITt)))),s=n[0].n.a+n[0].o.a+n[0].d.c+h,u=1;u=0?e:(o=NQ(YF(new MO(a.c+a.b/2,a.d+a.a/2),new MO(c.c+c.b/2,c.d+c.a/2))),-(oGn(c,a)-1)*o)}function JNn(n,t,e){var i;kS(new fX(null,(!e.a&&(e.a=new fV(oFt,e,6,6)),new h3(e.a,16))),new zO(n,t)),kS(new fX(null,(!e.n&&(e.n=new fV(lFt,e,1,7)),new h3(e.n,16))),new VO(n,t)),(i=uG(zDn(e,(XYn(),L$t)),75))&&fun(i,n,t)}function YNn(n,t,e){var i,r,c;if(c=iVn((gAn(),kBt),n.Dh(),t))return PP(),uG(c,69).xk()||(c=_3(Nen(kBt,c))),r=uG((i=n.Ih(c))>=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Sl(t,e);throw hv(new vM(Gtt+t.xe()+ztt))}function ZNn(n,t,e,i){var r,c,a,o,u;if(r=n.d[t])if(c=r.g,u=r.i,null!=i){for(o=0;o=e&&(i=t,c=(u=(o.c+o.a)/2)-e,o.c<=u-e&&GX(n,i++,new OU(o.c,c)),(a=u+e)<=o.a&&(r=new OU(a,o.a),o3(i,n.c.length),pC(n.c,i,r)))}function o$n(n,t,e){var i,r,c,a;if(!t.dc()){for(i=new lS,a=t.Kc();a.Ob();)for(c=uG(a.Pb(),39),vJ(n.a,xwn(c.g),xwn(e)),r=new Tp(Fkn(new Mp(c).a.d,0));Jj(r.a);)s8(i,uG(I6(r.a),65).c,i.c.b,i.c);o$n(n,i,e+1)}}function u$n(n){var t;if(n.c||null!=n.g){if(null==n.g)return!0;if(0==n.i)return!1;t=uG(n.g[n.i-1],51)}else n.d=n.bj(n.f),ttn(n,n.d),t=n.d;return t==n.b&&null.Vm>=null.Um()?(Wxn(n),u$n(n)):t.Ob()}function s$n(n){if(this.a=n,n.c.i.k==(zIn(),lbt))this.c=n.c,this.d=uG(oIn(n.c.i,(GYn(),Fpt)),64);else{if(n.d.i.k!=lbt)throw hv(new vM("Edge "+n+" is not an external edge."));this.c=n.d,this.d=uG(oIn(n.d.i,(GYn(),Fpt)),64)}}function h$n(n,t){var e,i,r;r=n.b,n.b=t,0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,r,n.b)),t?t!=n&&(qon(n,t.zb),Icn(n,t.d),Uan(n,null==(e=null==(i=t.c)?t.zb:i)||m_(e,t.zb)?null:e)):(qon(n,null),Icn(n,0),Uan(n,null))}function f$n(n,t){var e;this.e=(ZW(),WW(n),ZW(),Emn(n)),this.c=(WW(t),Emn(t)),FD(this.e.Rd().dc()==this.c.Rd().dc()),this.d=Qgn(this.e),this.b=Qgn(this.c),e=Jq(dat,[zZn,EZn],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2),this.a=e,wan(this)}function l$n(n){var t=(!Rat&&(Rat=mJn()),Rat);return'"'+n.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,(function(n){return z1(n,t)}))+'"'}function b$n(n,t,i,r,c,a){var o,u,s,h,f;if(0!=c)for(xA(n)===xA(i)&&(n=n.slice(t,t+c),t=0),s=i,u=t,h=t+c;u=(a=null==(e=uG(Lsn(n.a,4),129))?0:e.length))throw hv(new w_(t,a));return r=e[t],1==a?i=null:(qGn(e,0,i=Inn(xFt,Uit,424,a-1,0,1),0,t),(c=a-t-1)>0&&qGn(e,t+1,i,t,c)),Pkn(n,i),GAn(n,t,r),r}function p$n(n){var t,e;if(n.f){for(;n.n0?Ipn(e):Gdn(Ipn(e)),Myn(t,eTt,r)}function M$n(n,t){t.Ug("Partition preprocessing",1),kS(uG(l8(JJ(sin(JJ(new fX(null,new h3(n.a,16)),new mi),new vi),new ki),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Oc(),new yi),t.Vg()}function T$n(n,t){var e,i,r,c,a;for(a=n.j,t.a!=t.b&&f$(a,new Yr),r=a.c.length/2|0,i=0;i0&&sHn(n,e,t),c):null!=i.a?(sHn(n,t,e),-1):null!=r.a?(sHn(n,e,t),1):0}function E$n(n,t){var e,i,r,c,a;for(r=t.b.b,n.a=Inn(yat,H3n,15,r,0,1),n.b=Inn(ZHt,B2n,28,r,16,1),a=Fkn(t.b,0);a.b!=a.d.c;)c=uG(I6(a),39),n.a[c.g]=new lS;for(i=Fkn(t.a,0);i.b!=i.d.c;)e=uG(I6(i),65),n.a[e.b.g].Fc(e),n.a[e.c.g].Fc(e)}function S$n(n,t){var e,i,r,c;n.Pj()?(e=n.Ej(),c=n.Qj(),++n.j,n.qj(e,n.Zi(e,t)),i=n.Ij(3,null,t,e,c),n.Mj()&&(r=n.Nj(t,null))?(r.nj(i),r.oj()):n.Jj(i)):(vQ(n,t),n.Mj()&&(r=n.Nj(t,null))&&r.oj())}function P$n(n,t,e){var i,r,c;n.Pj()?(c=n.Qj(),edn(n,t,e),i=n.Ij(3,null,e,t,c),n.Mj()?(r=n.Nj(e,null),n.Tj()&&(r=n.Uj(e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):n.Jj(i)):(edn(n,t,e),n.Mj()&&(r=n.Nj(e,null))&&r.oj())}function C$n(n,t){var e,i,r,c,a;for(a=VKn(n.e.Dh(),t),r=new ls,e=uG(n.g,124),c=n.i;--c>=0;)i=e[c],a.am(i.Lk())&&ttn(r,i);!PJn(n,r)&&uN(n.e)&&Yv(n,t.Jk()?VZ(n,6,t,(hZ(),zot),null,-1,!1):VZ(n,t.tk()?2:1,t,null,null,-1,!1))}function I$n(n,t){var e,i,r,c;return n.a==(RIn(),Vgt)||(r=t.a.c,e=t.a.c+t.a.b,!(t.j&&(c=(i=t.A).c.c.a-i.o.a/2,r-(i.n.a+i.o.a)>c)||t.q&&(c=(i=t.C).c.c.a-i.o.a/2,i.n.a-e>c)))}function O$n(n){var t,e,i,r,c,a;for(e2(),e=new u8,i=new Ww(n.e.b);i.a1?n.e*=uM(n.a):n.f/=uM(n.a),_bn(n),Vvn(n),EBn(n),kfn(n.b,(ryn(),Qht),n.g)}function x$n(n,t,e){var i,r,c,a,o;for(i=0,o=e,t||(i=e*(n.c.length-1),o*=-1),c=new Ww(n);c.a=0?n.Ah(null):n.Ph().Th(n,-1-t,null,null),n.Bh(uG(r,54),e),i&&i.oj(),n.vh()&&n.wh()&&e>-1&&Msn(n,new lV(n,9,e,c,r)),r):c}function Y$n(n,t){var e,i,r,c,a;for(c=n.b.Ce(t),i=null==(e=n.a.get(c))?Inn(dat,EZn,1,0,5,1):e,a=0;a>5)>=n.d)return n.e<0;if(e=n.a[r],t=1<<(31&t),n.e<0){if(r<(i=_un(n)))return!1;e=i==r?-e:~e}return 0!=(e&t)}function oDn(n,t,e,i){var r;uG(e.b,68),uG(e.b,68),uG(i.b,68),uG(i.b,68),RG(r=YF(D$(uG(e.b,68).c),uG(i.b,68).c),LLn(uG(e.b,68),uG(i.b,68),r)),uG(i.b,68),uG(i.b,68),uG(i.b,68).c.a,r.a,uG(i.b,68).c.b,r.b,uG(i.b,68),Prn(i.a,new $U(n,t,i))}function uDn(n,t){var e,i,r,c,a,o,u;if(c=t.e)for(e=J$n(c),i=uG(n.g,689),a=0;a>16)),15).dd(c))0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d+=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a-=r-1))}function bDn(n){var t,i,r,c,a;if(a=VUn(n,c=new Zm),t=uG(oIn(n,(GYn(),lmt)),10))for(r=new Ww(t.j);r.a>t,c=n.m>>t|e<<22-t,r=n.l>>t|n.m<<22-t):t<44?(a=i?l0n:0,c=e>>t-22,r=n.m>>t-22|e<<44-t):(a=i?l0n:0,c=i?f0n:0,r=e>>t-44),p$(r&f0n,c&f0n,a&l0n)}function pDn(n){var t,i,r,c,a,o;for(this.c=new Zm,this.d=n,r=M0n,c=M0n,t=T0n,i=T0n,o=Fkn(n,0);o.b!=o.d.c;)a=uG(I6(o),8),r=e.Math.min(r,a.a),c=e.Math.min(c,a.b),t=e.Math.max(t,a.a),i=e.Math.max(i,a.b);this.a=new gY(r,c,t-r,i-c)}function mDn(n,t){var e,i,r,c;for(i=new Ww(n.b);i.a0&&F$(t,44)&&(n.a._j(),c=null==(u=(s=uG(t,44)).ld())?0:Hon(u),a=iF(n.a,c),e=n.a.d[a]))for(i=uG(e.g,379),h=e.i,o=0;o=2)for(t=pK((i=c.Kc()).Pb());i.Ob();)a=t,t=pK(i.Pb()),r=e.Math.min(r,(tJ(t),t-(tJ(a),a)));return r}function xDn(n,t){var e,i,r;for(r=new Zm,i=Fkn(t.a,0);i.b!=i.d.c;)(e=uG(I6(i),65)).b.g==n.g&&!m_(e.b.c,H9n)&&xA(oIn(e.b,(QGn(),ACt)))!==xA(oIn(e.c,ACt))&&!o9(new fX(null,new h3(r,16)),new yp(e))&&mv(r.c,e);return f$(r,new Ca),r}function RDn(n,t){var e,i,r;if(xA(t)===xA(WW(n)))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),(r=n.gc())!=i.gc())return!1;if(F$(i,59)){for(e=0;e0&&(r=e),a=new Ww(n.f.e);a.a0?(t-=1,e-=1):i>=0&&r<0?(t+=1,e+=1):i>0&&r>=0?(t-=1,e+=1):(t+=1,e-=1),new WO(xwn(t),xwn(e))}function exn(n,t){return n.ct.c?1:n.bt.b?1:n.a!=t.a?Hon(n.a)-Hon(t.a):n.d==(Z6(),YEt)&&t.d==JEt?-1:n.d==JEt&&t.d==YEt?1:0}function ixn(n,t){var e,i,r,c,a;return a=(c=t.a).c.i==t.b?c.d:c.c,i=c.c.i==t.b?c.c:c.d,(r=dmn(n.a,a,i))>0&&r0):r<0&&-r0)}function rxn(n,t,e,i){var r,c,a,o,u,s;for(r=(t-n.d)/n.c.c.length,c=0,n.a+=e,n.d=t,s=new Ww(n.c);s.a>24;return a}function axn(n){if(n.ze()){var t=n.c;return t.Ae()?n.o="["+t.n:t.ze()?n.o="["+t.xe():n.o="[L"+t.xe()+";",n.b=t.we()+"[]",void(n.k=t.ye()+"[]")}var e=n.j,i=n.d;i=i.split("/"),n.o=fvn(".",[e,fvn("$",i)]),n.b=fvn(".",[e,fvn(".",i)]),n.k=i[i.length-1]}function oxn(n,t){var e,i,r,c,a;for(a=null,c=new Ww(n.e.a);c.a=0;t-=2)for(e=0;e<=t;e+=2)(n.b[e]>n.b[e+2]||n.b[e]===n.b[e+2]&&n.b[e+1]>n.b[e+3])&&(i=n.b[e+2],n.b[e+2]=n.b[e],n.b[e]=i,i=n.b[e+3],n.b[e+3]=n.b[e+1],n.b[e+1]=i);n.c=!0}}function mxn(n,t){var e,i,r,c,a,o,u,s,h;for(s=-1,h=0,o=0,u=(a=n).length;o0&&++h;++s}return h}function vxn(n){var t;return(t=new lx(Ij(n.Rm))).a+="@",JA(t,(Hon(n)>>>0).toString(16)),n.Vh()?(t.a+=" (eProxyURI: ",QA(t,n._h()),n.Kh()&&(t.a+=" eClass: ",QA(t,n.Kh())),t.a+=")"):n.Kh()&&(t.a+=" (eClass: ",QA(t,n.Kh()),t.a+=")"),t.a}function kxn(n){var t,e,i;if(n.e)throw hv(new kM((vK(Qut),v2n+Qut.k+k2n)));for(n.d==(xdn(),ZDt)&&GWn(n,JDt),e=new Ww(n.a.a);e.a>24}return e}function Sxn(n,t,e){var i,r,c;if(!(r=uG(AJ(n.i,t),314)))if(r=new Yin(n.d,t,e),UV(n.i,t,r),vvn(t))iD(n.a,t.c,t.b,r);else switch(c=MAn(t),i=uG(AJ(n.p,c),252),c.g){case 1:case 3:r.j=!0,nM(i,t.b,r);break;case 4:case 2:r.k=!0,nM(i,t.c,r)}return r}function Pxn(n,t){var e,i,r,c,a,o,u,s,h;for(u=iR(n.c-n.b&n.a.length-1),s=null,h=null,c=new XJ(n);c.a!=c.b;)r=uG(rwn(c),10),e=(o=uG(oIn(r,(GYn(),Zpt)),12))?o.i:null,i=(a=uG(oIn(r,nmt),12))?a.i:null,s==e&&h==i||(F$n(u,t),s=e,h=i),mv(u.c,r);F$n(u,t)}function Cxn(n,t,e,i){var r,c,a,o,u,s;if(o=new ls,u=VKn(n.e.Dh(),t),r=uG(n.g,124),PP(),uG(t,69).xk())for(a=0;a=0)return r;for(c=1,a=new Ww(t.j);a.a=0)return r;for(c=1,a=new Ww(t.j);a.a0&&t.Ne((u3(r-1,n.c.length),uG(n.c[r-1],10)),c)>0;)Y8(n,r,(u3(r-1,n.c.length),uG(n.c[r-1],10))),--r;u3(r,n.c.length),n.c[r]=c}e.a=new Ym,e.b=new Ym}function Lxn(n,t,e){var i,r,c,a,o,u,s;for(s=new nB(i=uG(t.e&&t.e(),9),uG(MF(i,i.length),9),0),a=0,o=(c=WGn(e,"[\\[\\]\\s,]+")).length;a=0?(t||(t=new VM,i>0&&VA(t,(Knn(0,i,n.length),n.substr(0,i)))),t.a+="\\",TQ(t,e&D1n)):t&&TQ(t,e&D1n);return t?t.a:n}function $xn(n){var t,i,r;for(i=new Ww(n.a.a.b);i.a0&&((!hN(n.a.c)||!t.n.d)&&(!fN(n.a.c)||!t.n.b)&&(t.g.d-=e.Math.max(0,r/2-.5)),(!hN(n.a.c)||!t.n.a)&&(!fN(n.a.c)||!t.n.c)&&(t.g.a+=e.Math.max(0,r-1)))}function Dxn(n,t,e){var i;if(2==(n.c-n.b&n.a.length-1))t==(KQn(),yRt)||t==kRt?(prn(uG(Rfn(n),15),(Ajn(),$xt)),prn(uG(Rfn(n),15),Dxt)):(prn(uG(Rfn(n),15),(Ajn(),Dxt)),prn(uG(Rfn(n),15),$xt));else for(i=new XJ(n);i.a!=i.b;)prn(uG(rwn(i),15),e)}function xxn(n,t){var e,i,r,c,a,o;for(a=new N4(i=rG(new Pm(n)),i.c.length),o=new N4(r=rG(new Pm(t)),r.c.length),c=null;a.b>0&&o.b>0&&(MK(a.b>0),e=uG(a.a.Xb(a.c=--a.b),27),MK(o.b>0),e==uG(o.a.Xb(o.c=--o.b),27));)c=e;return c}function Rxn(n,t,e){var i,r,c,a;Y3(n,t)>Y3(n,e)?(i=Dgn(e,(KQn(),kRt)),n.d=i.dc()?0:dq(uG(i.Xb(0),12)),a=Dgn(t,_Rt),n.b=a.dc()?0:dq(uG(a.Xb(0),12))):(r=Dgn(e,(KQn(),_Rt)),n.d=r.dc()?0:dq(uG(r.Xb(0),12)),c=Dgn(t,kRt),n.b=c.dc()?0:dq(uG(c.Xb(0),12)))}function Kxn(n,t){var e,i,r,c;for(e=n.o.a,c=uG(uG(Y9(n.r,t),21),87).Kc();c.Ob();)(r=uG(c.Pb(),117)).e.a=e*uM(pK(r.b.of(bht))),r.e.b=(i=r.b).pf((XYn(),uDt))?i.ag()==(KQn(),yRt)?-i.Mf().b-uM(pK(i.of(uDt))):uM(pK(i.of(uDt))):i.ag()==(KQn(),yRt)?-i.Mf().b:0}function Fxn(n,t){var e,i,r,c;for(t.Ug("Self-Loop pre-processing",1),i=new Ww(n.a);i.an.c));a++)r.a>=n.s&&(c<0&&(c=a),o=a);return u=(n.s+n.c)/2,c>=0&&(u=wP((u3(i=fHn(n,t,c,o),t.c.length),uG(t.c[i],339))),a$n(t,i,e)),u}function Hxn(n,t,e){var i,r,c,a,o;for(Yan(r=new vs,(tJ(t),t)),!r.b&&(r.b=new XR((YYn(),H_t),wBt,r)),o=r.b,a=1;a0&&tVn(this,r)}function Gxn(n,t,e,i,r,c){var a,o,u;if(!r[t.a]){for(r[t.a]=!0,!(a=i)&&(a=new d7),kD(a.e,t),u=c[t.a].Kc();u.Ob();)(o=uG(u.Pb(),289)).d!=e&&o.c!=e&&(o.c!=t&&Gxn(n,o.c,t,a,r,c),o.d!=t&&Gxn(n,o.d,t,a,r,c),kD(a.c,o),Ohn(a.d,o.b));return a}return null}function qxn(n){var t,e,i;for(t=0,e=new Ww(n.e);e.a=2}function Xxn(n,t,e,i,r){var c,a,o,u,s;for(c=n.c.d.j,a=uG(hyn(e,0),8),s=1;s1||qsn(X1(WX(Bxt,Uhn(cT(eRt,1),p1n,95,0,[_xt,Uxt])),n))>1||qsn(X1(WX(Vxt,Uhn(cT(eRt,1),p1n,95,0,[zxt,Xxt])),n))>1)}function Vxn(n,t,e){var i,r,c;for(c=new Ww(n.t);c.a0&&(i.b.n-=i.c,i.b.n<=0&&i.b.u>0&&aq(t,i.b));for(r=new Ww(n.i);r.a0&&(i.a.u-=i.c,i.a.u<=0&&i.a.n>0&&aq(e,i.a))}function Wxn(n){var t,e,i;if(null==n.g&&(n.d=n.bj(n.f),ttn(n,n.d),n.c))return n.f;if(i=(t=uG(n.g[n.i-1],51)).Pb(),n.e=t,(e=n.bj(i)).Ob())n.d=e,ttn(n,e);else for(n.d=null;!t.Ob()&&(uQ(n.g,--n.i,null),0!=n.i);)t=uG(n.g[n.i-1],51);return i}function Qxn(n,t){var e,i,r,c,a,o;if(r=(i=t).Lk(),EFn(n.e,r)){if(r.Si()&&H5(n,r,i.md()))return!1}else for(o=VKn(n.e.Dh(),r),e=uG(n.g,124),c=0;c1||e>1)return 2;return t+e==1?2:0}function uRn(n,t){var i,r,c,a;return c=n.a*X0n+1502*n.b,a=n.b*X0n+11,c+=i=e.Math.floor(a*z0n),a-=i*V0n,c%=V0n,n.a=c,n.b=a,t<=24?e.Math.floor(n.a*but[t]):((r=n.a*(1<=2147483648&&(r-=4294967296),r)}function sRn(n,t,e){var i,r,c,a,o,u,s;for(c=new Zm,Uqn(n,s=new lS,a=new lS,t),RVn(n,s,a,t,e),u=new Ww(n);u.ai.b.g&&mv(c.c,i);return c}function hRn(n,t,e){var i,r,c,a,o;for(a=n.c,c=(e.q?e.q:(hZ(),hZ(),Vot)).vc().Kc();c.Ob();)r=uG(c.Pb(),44),!Qj(JJ(new fX(null,new h3(a,16)),new hd(new kO(t,r)))).Bd((vS(),Kut))&&(F$(o=r.md(),4)&&null!=(i=Nvn(o))&&(o=i),t.qf(uG(r.ld(),149),o))}function fRn(n,t,e){var i;if(_J(n.b),JV(n.b,(Rdn(),HAt),(eP(),GLt)),JV(n.b,UAt,t.g),JV(n.b,GAt,t.a),n.a=Qzn(n.b,t),e.Ug("Compaction by shrinking a tree",n.a.c.length),t.i.c.length>1)for(i=new Ww(n.a);i.a=0?n.Lh(i,!0,!0):YNn(n,c,!0),160),uG(r,220).Xl(t,e)}function bRn(n,t){var e,i,r,c;if(t){for(c=!(r=F$(n.Cb,90)||F$(n.Cb,102))&&F$(n.Cb,331),e=new DD((!t.a&&(t.a=new AX(t,g_t,t)),t.a));e.e!=e.i.gc();)if(i=MGn(uG(Zkn(e),89)),r?F$(i,90):c?F$(i,156):i)return i;return r?(YYn(),x_t):(YYn(),N_t)}return null}function wRn(n,t){var e,i,r;for(t.Ug("Resize child graph to fit parent.",1),i=new Ww(n.b);i.a=2*t&&kD(e,new OU(a[i-1]+t,a[i]-t));return e}function pRn(n,t,e){var i,r,c,a,o;if(e)for(c=((i=new Gz(e.a.length)).b-i.a)*i.c<0?(CP(),XHt):new xD(i);c.Ob();)(r=v6(e,uG(c.Pb(),17).a))&&(Gan(a=b5(n,(gj(),o=new Hk,!!t&&LRn(o,t),o),r),k6(r,Iet)),fCn(r,a),kLn(r,a),qfn(n,r,a))}function mRn(n){var t,e,i,r;if(!n.j){if(r=new Ss,null==(t=V_t).a.zc(n,t)){for(i=new DD(n1(n));i.e!=i.i.gc();)CW(r,mRn(e=uG(Zkn(i),29))),ttn(r,e);t.a.Bc(n)}lbn(r),n.j=new vL((uG(zrn(gZ((tQ(),M_t).o),11),19),r.i),r.g),y9(n).b&=-33}return n.j}function vRn(n){var t,e,i,r;if(null==n)return null;if(i=yXn(n,!0),r=yct.length,m_(i.substr(i.length-r,r),yct))if(4==(e=i.length)){if(s3(0,i.length),43==(t=i.charCodeAt(0)))return fHt;if(45==t)return hHt}else if(3==e)return fHt;return new tk(i)}function kRn(n){var t,e,i;return 0!=((e=n.l)&e-1)||0!=((i=n.m)&i-1)||0!=((t=n.h)&t-1)||0==t&&0==i&&0==e?-1:0==t&&0==i&&0!=e?pan(e):0==t&&0!=i&&0==e?pan(i)+22:0!=t&&0==i&&0==e?pan(t)+44:-1}function yRn(n,t){var e,i,r,c,a;for(r=t.a&n.f,c=null,i=n.b[r];;i=i.b){if(i==t){c?c.b=t.b:n.b[r]=t.b;break}c=i}for(a=t.f&n.f,c=null,e=n.c[a];;e=e.d){if(e==t){c?c.d=t.d:n.c[a]=t.d;break}c=e}t.e?t.e.c=t.c:n.a=t.c,t.c?t.c.e=t.e:n.e=t.e,--n.i,++n.g}function MRn(n,t){var e;t.d?t.d.b=t.b:n.a=t.b,t.b?t.b.d=t.d:n.e=t.d,t.e||t.c?(--(e=uG(nJ(uG(cQ(n.b,t.a),260)),260)).a,t.e?t.e.c=t.c:e.b=uG(nJ(t.c),511),t.c?t.c.e=t.e:e.c=uG(nJ(t.e),511)):((e=uG(nJ(uG(u7(n.b,t.a),260)),260)).a=0,++n.c),--n.d}function TRn(n){var t,i,r,c,a,o,u,s,h,f;for(i=n.o,t=n.p,o=vZn,c=j1n,u=vZn,a=j1n,h=0;h0),c.a.Xb(c.c=--c.b),pF(c,r),MK(c.b3&&Fen(n,0,t-3))}function CRn(n){var t,e,i,r;return xA(oIn(n,(jYn(),rMt)))===xA((Own(),Ixt))?!n.e&&xA(oIn(n,Oyt))!==xA((ihn(),hpt)):(i=uG(oIn(n,Ayt),298),r=oM(gK(oIn(n,Ryt)))||xA(oIn(n,Kyt))===xA((jan(),Ydt)),t=uG(oIn(n,Iyt),17).a,e=n.a.c.length,!r&&i!=(ihn(),hpt)&&(0==t||t>e))}function IRn(n){var t,e;for(e=0;e0);e++);if(e>0&&e0);t++);return t>0&&e>16!=6&&t){if(eEn(n,t))throw hv(new vM(net+A$n(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?zjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,6,i)),(i=ZK(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,6,t,t))}function ARn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+SXn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?sEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,12,i)),(i=nF(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function LRn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=9&&t){if(eEn(n,t))throw hv(new vM(net+VBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Wjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,9,i)),(i=tF(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,9,t,t))}function NRn(n){var t,e,i,r,c;if(i=bEn(n),null==(c=n.j)&&i)return n.Jk()?null:i.ik();if(F$(i,156)){if((e=i.jk())&&(r=e.wi())!=n.i){if((t=uG(i,156)).nk())try{n.g=r.ti(t,c)}catch(a){if(!F$(a=Ehn(a),82))throw hv(a);n.g=null}n.i=r}return n.g}return null}function $Rn(n){var t;return kD(t=new Zm,new ZP(new MO(n.c,n.d),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c,n.d),new MO(n.c,n.d+n.a))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c+n.b,n.d))),kD(t,new ZP(new MO(n.c+n.b,n.d+n.a),new MO(n.c,n.d+n.a))),t}function DRn(n){var t,e;if(null==n)return IZn;try{return cpn(n)}catch(i){if(F$(i=Ehn(i),103))return t=i,e=Ij(Tbn(n))+"@"+(bS(),(Avn(n)>>>0).toString(16)),wkn(ghn(),(pS(),"Exception during lenientFormat for "+e),t),"<"+e+" threw "+Ij(t.Rm)+">";throw hv(i)}}function xRn(n,t,e){var i,r;for(r=t.a.ec().Kc();r.Ob();)i=uG(r.Pb(),74),!uG(cQ(n.b,i),272)&&(R0(bIn(i))==R0(gIn(i))?QKn(n,i,e):bIn(i)==R0(gIn(i))?null==cQ(n.c,i)&&null!=cQ(n.b,gIn(i))&&bWn(n,i,e,!1):null==cQ(n.d,i)&&null!=cQ(n.b,bIn(i))&&bWn(n,i,e,!0))}function RRn(n,t){var e,i,r,c,a,o,u;for(r=n.Kc();r.Ob();)for(i=uG(r.Pb(),10),o2(o=new lOn,i),NLn(o,(KQn(),kRt)),kfn(o,(GYn(),fmt),(qx(),!0)),a=t.Kc();a.Ob();)c=uG(a.Pb(),10),o2(u=new lOn,c),NLn(u,_Rt),kfn(u,fmt,!0),kfn(e=new UZ,fmt,!0),c2(e,o),u2(e,u)}function KRn(n,t,e,i){var r,c,a,o;r=evn(n,t,e),c=evn(n,e,t),a=uG(cQ(n.c,t),118),o=uG(cQ(n.c,e),118),r1)for(t=jx((e=new sk,++n.b,e),n.d),o=Fkn(c,0);o.b!=o.d.c;)a=uG(I6(o),125),RKn(xS(DS(RS($S(new uk,1),0),t),a))}function URn(n,t,e){var i,r,c,a;for(e.Ug("Breaking Point Removing",1),n.a=uG(oIn(t,(jYn(),Vyt)),223),r=new Ww(t.b);r.a>16!=11&&t){if(eEn(n,t))throw hv(new vM(net+zBn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?hEn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=kyn(t,n,10,i)),(i=n_(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,11,t,t))}function qRn(n){var t,e,i,r;for(i=new bsn(new Nw(n.b).a);i.b;)r=uG((e=von(i)).ld(),12),kfn(t=uG(e.md(),10),(GYn(),rmt),r),kfn(r,lmt,t),kfn(r,qpt,(qx(),!0)),NLn(r,uG(oIn(t,Fpt),64)),oIn(t,Fpt),kfn(r.i,(jYn(),JMt),($Pn(),oRt)),uG(oIn(HQ(r.i),Hpt),21).Fc((r_n(),rpt))}function XRn(n,t,e){var i,r,c;if(i=0,r=0,n.c)for(c=new Ww(n.d.i.j);c.ac.a)return-1;if(r.a(u=null==n.d?0:n.d.length)){for(h=n.d,n.d=Inn(IFt,qit,66,2*u+4,0,1),c=0;c=0x8000000000000000?(tin(),Jat):(i=!1,n<0&&(i=!0,n=-n),e=0,n>=d0n&&(n-=(e=t0(n/d0n))*d0n),t=0,n>=w0n&&(n-=(t=t0(n/w0n))*w0n),r=p$(t0(n),t,e),i&&Yfn(r),r)}function uKn(n){var t,e,i,r,c;if(c=new Zm,Prn(n.b,new Ed(c)),n.b.c.length=0,0!=c.c.length){for(u3(0,c.c.length),t=uG(c.c[0],82),e=1,i=c.c.length;e=-t&&r==t?new WO(xwn(i-1),xwn(r)):new WO(xwn(i),xwn(r-1))}function bKn(){return zYn(),Uhn(cT(Vwt,1),p1n,81,0,[qbt,Hbt,Xbt,uwt,Pwt,lwt,Nwt,pwt,Ewt,iwt,ywt,gwt,Swt,Zbt,Dwt,xbt,kwt,Iwt,swt,Cwt,Rwt,Twt,Rbt,jwt,Kwt,Awt,xwt,hwt,Qbt,fwt,owt,$wt,_bt,Vbt,wwt,Fbt,dwt,cwt,nwt,mwt,ewt,Ubt,Bbt,awt,twt,vwt,Lwt,Kbt,Mwt,rwt,bwt,Jbt,Wbt,Owt,zbt,Ybt,Gbt])}function wKn(n,t,e){n.d=0,n.b=0,t.k==(zIn(),gbt)&&e.k==gbt&&uG(oIn(t,(GYn(),rmt)),10)==uG(oIn(e,rmt),10)&&(jen(t).j==(KQn(),yRt)?Rxn(n,t,e):Rxn(n,e,t)),t.k==gbt&&e.k==wbt?jen(t).j==(KQn(),yRt)?n.d=1:n.b=1:e.k==gbt&&t.k==wbt&&(jen(e).j==(KQn(),yRt)?n.b=1:n.d=1),GMn(n,t,e)}function dKn(n){var t,e,i,r,c;return c=gCn(n),null!=n.a&&ZG(c,"category",n.a),!pE(new Lw(n.d))&&(nrn(c,"knownOptions",i=new Ib),t=new Mm(i),z8(new Lw(n.d),t)),!pE(n.g)&&(nrn(c,"supportedFeatures",r=new Ib),e=new Tm(r),z8(n.g,e)),c}function gKn(n){var t,e,i,r,c,a,o,u;for(t=336,e=0,r=new UF(n.length),o=0,u=(a=n).length;o>16!=7&&t){if(eEn(n,t))throw hv(new vM(net+zOn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Vjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,1,iFt,i)),(i=dz(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,7,t,t))}function kKn(n,t){var e,i;if(t!=n.Cb||n.Db>>16!=3&&t){if(eEn(n,t))throw hv(new vM(net+fdn(n)));i=null,n.Cb&&(i=(e=n.Db>>16)>=0?Yjn(n,i):n.Cb.Th(n,-1-e,null,i)),t&&(i=uG(t,54).Rh(n,0,uFt,i)),(i=gz(n,t,i))&&i.oj()}else 0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,3,t,t))}function yKn(n,t){var e,i,r,c,a,o,u,s,h;return b_n(),t.d>n.d&&(o=n,n=t,t=o),t.d<63?KFn(n,t):(s=$9(n,a=(-2&n.d)<<4),h=$9(t,a),i=mXn(n,D9(s,a)),r=mXn(t,D9(h,a)),u=yKn(s,h),e=yKn(i,r),c=D9(c=Zzn(Zzn(c=yKn(mXn(s,i),mXn(r,h)),u),e),a),Zzn(Zzn(u=D9(u,a<<1),c),e))}function MKn(){MKn=E,rjt=new fI(v9n,0),tjt=new fI("LONGEST_PATH",1),ejt=new fI("LONGEST_PATH_SOURCE",2),YTt=new fI("COFFMAN_GRAHAM",3),njt=new fI(D6n,4),cjt=new fI("STRETCH_WIDTH",5),ijt=new fI("MIN_WIDTH",6),JTt=new fI("BF_MODEL_ORDER",7),ZTt=new fI("DF_MODEL_ORDER",8)}function TKn(n,t,e){var i,r,c,a,o;for(a=Vwn(n,e),o=Inn(pbt,e6n,10,t.length,0,1),i=0,c=a.Kc();c.Ob();)oM(gK(oIn(r=uG(c.Pb(),12),(GYn(),qpt))))&&(o[i++]=uG(oIn(r,lmt),10));if(i=0;r+=e?1:-1)c|=t.c.lg(o,r,e,i&&!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,(GYn(),mmt))))),c|=t.q.ug(o,r,e),c|=wBn(n,o[r],e,i);return FV(n.c,t),c}function CKn(n,t,e){var i,r,c,a,o,u,s,h;for(s=0,h=(u=s6(n.j)).length;s1&&(n.a=!0),YX(uG(e.b,68),JF(D$(uG(t.b,68).c),vD(YF(D$(uG(e.b,68).a),uG(t.b,68).a),r))),f2(n,t),AKn(n,e)}function LKn(n){var t,e,i,r,c,a;for(r=new Ww(n.a.a);r.a0&&c>0?t++:i>0?e++:c>0?r++:e++}hZ(),f$(n.j,new bi)}function $Kn(n){var t,e;e=null,t=uG(zq(n.g,0),18);do{if(vR(e=t.d.i,(GYn(),nmt)))return uG(oIn(e,nmt),12).i;if(e.k!=(zIn(),dbt)&&hDn(new Fz(ix(Xgn(e).a.Kc(),new h))))t=uG(N9(new Fz(ix(Xgn(e).a.Kc(),new h))),18);else if(e.k!=dbt)return null}while(e&&e.k!=(zIn(),dbt));return e}function DKn(n,t){var e,i,r,c,a,o,u,s,h;for(o=t.j,a=t.g,u=uG(zq(o,o.c.length-1),113),u3(0,o.c.length),s=xTn(n,a,u,h=uG(o.c[0],113)),c=1;cs&&(u=e,h=r,s=i);t.a=h,t.c=u}function xKn(n,t,e){var i,r,c,a,o,u,s;for(s=new Hj(new ip(n)),o=0,u=(a=Uhn(cT(Abt,1),i6n,12,0,[t,e])).length;ou-n.b&&ou-n.a&&o0?c.a?e>(o=c.b.Mf().a)&&(r=(e-o)/2,c.d.b=r,c.d.c=r):c.d.c=n.s+e:cV(n.u)&&((i=ECn(c.b)).c<0&&(c.d.b=-i.c),i.c+i.b>c.b.Mf().a&&(c.d.c=i.c+i.b-c.b.Mf().a))}function rFn(n,t){var e,i,r,c,a;a=new Zm,e=t;do{(c=uG(cQ(n.b,e),131)).B=e.c,c.D=e.d,mv(a.c,c),e=uG(cQ(n.k,e),18)}while(e);return u3(0,a.c.length),(i=uG(a.c[0],131)).j=!0,i.A=uG(i.d.a.ec().Kc().Pb(),18).c.i,(r=uG(zq(a,a.c.length-1),131)).q=!0,r.C=uG(r.d.a.ec().Kc().Pb(),18).d.i,a}function cFn(n){var t,i;if(t=uG(n.a,17).a,i=uG(n.b,17).a,t>=0){if(t==i)return new WO(xwn(-t-1),xwn(-t-1));if(t==-i)return new WO(xwn(-t),xwn(i+1))}return e.Math.abs(t)>e.Math.abs(i)?new WO(xwn(-t),xwn(t<0?i:i+1)):new WO(xwn(t+1),xwn(i))}function aFn(n){var t,e;e=uG(oIn(n,(jYn(),gMt)),171),t=uG(oIn(n,(GYn(),Xpt)),311),e==(Gpn(),Imt)?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),ppt))):e==Amt?(kfn(n,gMt,Lmt),kfn(n,Xpt,(Zen(),dpt))):t==(Zen(),ppt)?(kfn(n,gMt,Imt),kfn(n,Xpt,gpt)):t==dpt&&(kfn(n,gMt,Amt),kfn(n,Xpt,gpt))}function oFn(){oFn=E,LSt=new oa,CSt=Aq(new wJ,(uIn(),Elt),(zYn(),swt)),ASt=wz(Aq(new wJ,Elt,Twt),Plt,Mwt),NSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),ISt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),OSt=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function uFn(){uFn=E,KSt=Aq(wz(new wJ,(uIn(),Plt),(zYn(),Jbt)),Elt,swt),HSt=Lvn(Lvn(gP(wz(Aq(new wJ,Tlt,Nwt),Plt,Lwt),Slt),Awt),$wt),FSt=wz(Aq(Aq(Aq(new wJ,jlt,lwt),Slt,wwt),Slt,dwt),Plt,bwt),BSt=Aq(Aq(new wJ,Elt,Twt),Plt,Mwt),_St=wz(Aq(Aq(new wJ,Slt,dwt),Slt,Vbt),Plt,zbt)}function sFn(n,t,e,i,r){var c,a;(v9(t)||t.c.i.c!=t.d.i.c)&&uon(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])),e)||v9(t)||(t.c==r?sR(t.a,0,new eN(e)):aq(t.a,new eN(e)),i&&!cS(n.a,e)&&((a=uG(oIn(t,(jYn(),bMt)),75))||(a=new Uk,kfn(t,bMt,a)),s8(a,c=new eN(e),a.c.b,a.c),FV(n.a,c)))}function hFn(n,t){var e,i,r,c;for(e=(c=pz(Ngn(h1n,PJ(pz(Ngn(null==t?0:Hon(t),f1n)),15))))&n.b.length-1,r=null,i=n.b[e];i;r=i,i=i.a)if(i.d==c&&xQ(i.i,t))return r?r.a=i.a:n.b[e]=i.a,RM(uG(nJ(i.c),604),uG(nJ(i.f),604)),Tv(uG(nJ(i.b),227),uG(nJ(i.e),227)),--n.f,++n.e,!0;return!1}function fFn(n){var t;for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(uG(N9(t),18).c.i.k!=(zIn(),bbt))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function lFn(n,t,e){var i,r,c,a,o,u;if(0==(r=Cdn(254&n.Db)))n.Eb=e;else{if(1==r)a=Inn(dat,EZn,1,2,5,1),0==jTn(n,t)?(a[0]=e,a[1]=n.Eb):(a[0]=n.Eb,a[1]=e);else for(a=Inn(dat,EZn,1,r+1,5,1),c=Kcn(n.Eb),i=2,o=0,u=0;i<=128;i<<=1)i==t?a[u++]=e:0!=(n.Db&i)&&(a[u++]=c[o++]);n.Eb=a}n.Db|=t}function bFn(n,t,i){var r,c,a,o;for(this.b=new Zm,c=0,r=0,o=new Ww(n);o.a0&&(c+=(a=uG(zq(this.b,0),176)).o,r+=a.p),c*=2,r*=2,t>1?c=t0(e.Math.ceil(c*t)):r=t0(e.Math.ceil(r/t)),this.a=new smn(c,r)}function wFn(n,t,i,r,c,a){var o,u,s,h,f,l,b,w,d,g;for(h=r,t.j&&t.o?(d=(b=uG(cQ(n.f,t.A),60)).d.c+b.d.b,--h):d=t.a.c+t.a.b,f=c,i.q&&i.o?(s=(b=uG(cQ(n.f,i.C),60)).d.c,++f):s=i.a.c,w=d+(u=(s-d)/e.Math.max(2,f-h)),l=h;l=0;a+=r?1:-1){for(o=t[a],u=i==(KQn(),kRt)?r?Dgn(o,i):Spn(Dgn(o,i)):r?Spn(Dgn(o,i)):Dgn(o,i),c&&(n.c[o.p]=u.gc()),f=u.Kc();f.Ob();)h=uG(f.Pb(),12),n.d[h.p]=s++;Ohn(e,u)}}function pFn(n,t,e){var i,r,c,a,o,u,s,h;for(c=uM(pK(n.b.Kc().Pb())),s=uM(pK(whn(t.b))),i=vD(D$(n.a),s-e),r=vD(D$(t.a),e-c),vD(h=JF(i,r),1/(s-c)),this.a=h,this.b=new Zm,o=!0,(a=n.b.Kc()).Pb();a.Ob();)u=uM(pK(a.Pb())),o&&u-e>$9n&&(this.b.Fc(e),o=!1),this.b.Fc(u);o&&this.b.Fc(e)}function mFn(n){var t,e,i,r;if(wHn(n,n.n),n.d.c.length>0){for(AM(n.c);fDn(n,uG(N3(new Ww(n.e.a)),125))>5,t&=31,i>=n.d)return n.e<0?(cHn(),Dot):(cHn(),_ot);if(c=n.d-i,ROn(r=Inn(YHt,W1n,28,c+1,15,1),c,n.a,i,t),n.e<0){for(e=0;e0&&n.a[e]<<32-t!=0){for(e=0;e=0)&&(!(e=iVn((gAn(),kBt),r,t))||((i=e.Ik())>1||-1==i)&&3!=sJ(Nen(kBt,e))))}function SFn(n,t,e,i){var r,c,a,o,u;return o=lCn(uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84)),u=lCn(uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84)),R0(o)==R0(u)||Ern(u,o)?null:(a=s0(t))==e?i:(c=uG(cQ(n.a,a),10))&&(r=c.e)?r:null}function PFn(n,t,e){var i,r,c,a;for(e.Ug("Longest path to source layering",1),n.a=t,a=n.a.a,n.b=Inn(YHt,W1n,28,a.c.length,15,1),i=0,c=new Ww(a);c.a0&&(i[0]+=n.d,o-=i[0]),i[2]>0&&(i[2]+=n.d,o-=i[2]),a=e.Math.max(0,o),i[1]=e.Math.max(i[1],o),Q9(n,Est,c.c+r.b+i[0]-(i[1]-o)/2,i),t==Est&&(n.c.b=a,n.c.c=c.c+r.b+(a-o)/2)}function BFn(){this.c=Inn(eUt,I0n,28,(KQn(),Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt])).length,15,1),this.b=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),this.a=Inn(eUt,I0n,28,Uhn(cT(YRt,1),z4n,64,0,[FRt,yRt,kRt,KRt,_Rt]).length,15,1),KP(this.c,M0n),KP(this.b,T0n),KP(this.a,T0n)}function HFn(n,t,e){var i,r,c,a;if(t<=e?(r=t,c=e):(r=e,c=t),i=0,null==n.b)n.b=Inn(YHt,W1n,28,2,15,1),n.b[0]=r,n.b[1]=c,n.c=!0;else{if(i=n.b.length,n.b[i-1]+1==r)return void(n.b[i-1]=c);a=Inn(YHt,W1n,28,i+2,15,1),qGn(n.b,0,a,0,i),n.b=a,n.b[i-1]>=r&&(n.c=!1,n.a=!1),n.b[i++]=r,n.b[i]=c,n.c||pxn(n)}}function UFn(n,t,e){var i,r,c,a,o,u,s;for(s=t.d,n.a=new R7(s.c.length),n.c=new Ym,o=new Ww(s);o.a=0?n.Lh(s,!1,!0):YNn(n,e,!1),61).Kc();c.Ob();){for(r=uG(c.Pb(),58),h=0;h1;)e_n(r,r.i-1);return i}function YFn(n,t){var e,i,r,c,a,o;for(e=new ND,r=new Ww(n.b);r.an.d[a.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function n_n(n){var t,e,i,r,c,a,o;for(n.a=new xF,o=0,r=0,i=new Ww(n.i.b);i.au.d&&(f=u.d+u.a+h));i.c.d=f,t.a.zc(i,t),s=e.Math.max(s,i.c.d+i.c.a)}return s}function r_n(){r_n=E,Zgt=new aI("COMMENTS",0),tpt=new aI("EXTERNAL_PORTS",1),ept=new aI("HYPEREDGES",2),ipt=new aI("HYPERNODES",3),rpt=new aI("NON_FREE_PORTS",4),cpt=new aI("NORTH_SOUTH_PORTS",5),opt=new aI(F6n,6),Ygt=new aI("CENTER_LABELS",7),npt=new aI("END_LABELS",8),apt=new aI("PARTITIONS",9)}function c_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function a_n(n,t,e,i,r){return i<0?((i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n]),t))<0&&(i=XOn(n,r,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),!(i<0||(e.k=i,0))):i>0&&(e.k=i-1,!0)}function o_n(n,t,e,i,r,c){var a,o,u;if(o=32,i<0){if(t[0]>=n.length)return!1;if(43!=(o=VJ(n,t[0]))&&45!=o)return!1;if(++t[0],(i=RNn(n,t))<0)return!1;45==o&&(i=-i)}return 32==o&&t[0]-e==2&&2==r.b&&(a=(u=(new QE).q.getFullYear()-V1n+V1n-80)%100,c.a=i==a,i+=100*(u/100|0)+(i=0?Rmn(n):hW(Rmn(Men(n)))),qot[t]=BA(Nz(n,t),0)?Rmn(Nz(n,t)):hW(Rmn(Men(Nz(n,t)))),n=Ngn(n,5);for(;t=h&&(s=r);s&&(f=e.Math.max(f,s.a.o.a)),f>b&&(l=h,b=f)}return l}function v_n(n){var t,e,i,r,c,a,o;for(c=new Hj(uG(WW(new Dn),50)),o=T0n,e=new Ww(n.d);e.aF7n?f$(s,n.b):r<=F7n&&r>_7n?f$(s,n.d):r<=_7n&&r>B7n?f$(s,n.c):r<=B7n&&f$(s,n.a),a=T_n(n,s,a);return c}function j_n(n,t,e,i){var r,c,a,o,u;for(r=(i.c+i.a)/2,BY(t.j),aq(t.j,r),BY(e.e),aq(e.e,r),u=new hj,a=new Ww(n.f);a.a1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function O_n(n,t,e){var i,r;for(t=48;e--)pHt[e]=e-48<<24>>24;for(i=70;i>=65;i--)pHt[i]=i-65+10<<24>>24;for(r=102;r>=97;r--)pHt[r]=r-97+10<<24>>24;for(c=0;c<10;c++)mHt[c]=48+c&D1n;for(n=10;n<=15;n++)mHt[n]=65+n-10&D1n}function N_n(n,t){t.Ug("Process graph bounds",1),kfn(n,(OQn(),PPt),$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Ka)))),kfn(n,IPt,$I(Tun(ZJ(new fX(null,new h3(n.b,16)),new Fa)))),kfn(n,SPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new _a)))),kfn(n,CPt,$I(Mun(ZJ(new fX(null,new h3(n.b,16)),new Ba)))),t.Vg()}function $_n(n){var t,i,r,c,a;c=uG(oIn(n,(jYn(),DMt)),21),a=uG(oIn(n,KMt),21),t=new eN(i=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a)),c.Hc((Qmn(),VRt))&&(r=uG(oIn(n,RMt),8),a.Hc((oUn(),eKt))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=e.Math.max(i.a,r.a),t.b=e.Math.max(i.b,r.b)),oM(gK(oIn(n,xMt)))||cXn(n,i,t)}function D_n(n,t){var e,i,r,c;for(c=Dgn(t,(KQn(),KRt)).Kc();c.Ob();)i=uG(c.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[t.p].d),n.i[e.p].a));for(r=Dgn(t,yRt).Kc();r.Ob();)i=uG(r.Pb(),12),(e=uG(oIn(i,(GYn(),lmt)),10))&&RKn(xS(DS(RS($S(new uk,0),.1),n.i[e.p].d),n.i[t.p].a))}function x_n(n){var t,e,i,r,c;if(!n.c){if(c=new ks,null==(t=V_t).a.zc(n,t)){for(i=new DD(z5(n));i.e!=i.i.gc();)F$(r=MGn(e=uG(Zkn(i),89)),90)&&CW(c,x_n(uG(r,29))),ttn(c,e);t.a.Bc(n),t.a.gc()}imn(c),lbn(c),n.c=new vL((uG(zrn(gZ((tQ(),M_t).o),15),19),c.i),c.g),y9(n).b&=-33}return n.c}function R_n(n){var t;if(10!=n.c)throw hv(new CM(rZn((t$(),eit))));switch(t=n.a){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw hv(new CM(rZn((t$(),Lit))))}return t}function K_n(n){var t,e,i,r;if(0==n.l&&0==n.m&&0==n.h)return"0";if(n.h==b0n&&0==n.m&&0==n.l)return"-9223372036854775808";if(n.h>>19!=0)return"-"+K_n(gfn(n));for(e=n,i="";0!=e.l||0!=e.m||0!=e.h;){if(e=Yzn(e,_9(g0n),!0),t=""+Tj(Qat),0!=e.l||0!=e.m||0!=e.h)for(r=9-t.length;r>0;r--)t="0"+t;i=t+i}return i}function F_n(n){var t,e,i,r,c,a,o;for(t=!1,e=0,r=new Ww(n.d.b);r.a=n.a)return-1;if(!_Pn(t,i))return-1;if(P6(uG(r.Kb(t),20)))return 1;for(c=0,o=uG(r.Kb(t),20).Kc();o.Ob();){if(-1==(u=U_n(n,(a=uG(o.Pb(),18)).c.i==t?a.d.i:a.c.i,i,r)))return-1;if((c=e.Math.max(c,u))>n.c-1)return-1}return c+1}function G_n(n,t){var e,i,r,c,a,o;if(xA(t)===xA(n))return!0;if(!F$(t,15))return!1;if(i=uG(t,15),o=n.gc(),i.gc()!=o)return!1;if(a=i.Kc(),n.Yi()){for(e=0;e0)if(n._j(),null!=t){for(c=0;c>24;case 97:case 98:case 99:case 100:case 101:case 102:return n-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return n-65+10<<24>>24;default:throw hv(new ZM("Invalid hexadecimal"))}}function W_n(){W_n=E,pst=new rC("SPIRAL",0),lst=new rC("LINE_BY_LINE",1),bst=new rC("MANHATTAN",2),fst=new rC("JITTER",3),dst=new rC("QUADRANTS_LINE_BY_LINE",4),gst=new rC("QUADRANTS_MANHATTAN",5),wst=new rC("QUADRANTS_JITTER",6),hst=new rC("COMBINE_LINE_BY_LINE_MANHATTAN",7),sst=new rC("COMBINE_JITTER_MANHATTAN",8)}function Q_n(n,t,e,i){var r,c,a,o,u,s;for(u=pSn(n,e),s=pSn(t,e),r=!1;u&&s&&(i||ejn(u,s,e));)a=pSn(u,e),o=pSn(s,e),Ien(t),Ien(n),c=u.c,pVn(u,!1),pVn(s,!1),e?($jn(t,s.p,c),t.p=s.p,$jn(n,u.p+1,c),n.p=u.p):($jn(n,u.p,c),n.p=u.p,$jn(t,s.p+1,c),t.p=s.p),a2(u,null),a2(s,null),u=a,s=o,r=!0;return r}function J_n(n){switch(n.g){case 0:return new ul;case 1:return new al;case 3:return new iP;case 4:return new Sc;case 5:return new RF;case 6:return new ol;case 2:return new cl;case 7:return new Zf;case 8:return new tl;default:throw hv(new vM("No implementation is available for the layerer "+(null!=n.f?n.f:""+n.g)))}}function Y_n(n,t,e,i){var r,c,a,o,u;for(r=!1,c=!1,o=new Ww(i.j);o.a=t.length)throw hv(new dM("Greedy SwitchDecider: Free layer not in graph."));this.c=t[n],this.e=new R_(i),Aon(this.e,this.c,(KQn(),_Rt)),this.i=new R_(i),Aon(this.i,this.c,kRt),this.f=new sX(this.c),this.a=!c&&r.i&&!r.s&&this.c[0].k==(zIn(),lbt),this.a&&rAn(this,n,t.length)}function iBn(n,t){var e,i,r,c,a,o;c=!n.B.Hc((oUn(),nKt)),a=n.B.Hc(iKt),n.a=new umn(a,c,n.c),n.n&&WY(n.a.n,n.n),nM(n.g,(Yrn(),Est),n.a),t||((i=new tkn(1,c,n.c)).n.a=n.k,UV(n.p,(KQn(),yRt),i),(r=new tkn(1,c,n.c)).n.d=n.k,UV(n.p,KRt,r),(o=new tkn(0,c,n.c)).n.c=n.k,UV(n.p,_Rt,o),(e=new tkn(0,c,n.c)).n.b=n.k,UV(n.p,kRt,e))}function rBn(n){var t,e,i;switch((t=uG(oIn(n.d,(jYn(),Vyt)),223)).g){case 2:e=UJn(n);break;case 3:i=new Zm,kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Or),new Ar),new Lr),new pr),new Ng(i)),e=i;break;default:throw hv(new kM("Compaction not supported for "+t+" edges."))}xzn(n,e),z8(new Lw(n.g),new Ag(n))}function cBn(n,t){var e,i,r,c,a,o,u;if(t.Ug("Process directions",1),(e=uG(oIn(n,(QGn(),cCt)),88))!=(xdn(),QDt))for(r=Fkn(n.b,0);r.b!=r.d.c;){switch(i=uG(I6(r),39),o=uG(oIn(i,(OQn(),GPt)),17).a,u=uG(oIn(i,qPt),17).a,e.g){case 4:u*=-1;break;case 1:c=o,o=u,u=c;break;case 2:a=o,o=-u,u=a}kfn(i,GPt,xwn(o)),kfn(i,qPt,xwn(u))}t.Vg()}function aBn(n,t){var e;return e=new Yn,t&&zsn(e,uG(cQ(n.a,iFt),96)),F$(t,422)&&zsn(e,uG(cQ(n.a,rFt),96)),F$(t,366)?(zsn(e,uG(cQ(n.a,lFt),96)),e):(F$(t,84)&&zsn(e,uG(cQ(n.a,cFt),96)),F$(t,207)?(zsn(e,uG(cQ(n.a,bFt),96)),e):F$(t,193)?(zsn(e,uG(cQ(n.a,wFt),96)),e):(F$(t,326)&&zsn(e,uG(cQ(n.a,aFt),96)),e))}function oBn(n){var t,e,i,r,c,a,o;for(o=new c9,a=new Ww(n.a);a.a0&&t=0)return!1;if(t.p=e.b,kD(e.e,t),i==(zIn(),wbt)||i==gbt)for(r=new Ww(t.j);r.an.d[o.p]&&(e+=J8(n.b,c),A6(n.a,xwn(c))):++a;for(e+=n.b.d*a;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function $Bn(n){var t,e,i,r,c,a;return c=0,(t=bEn(n)).kk()&&(c|=4),0!=(n.Bb&hrt)&&(c|=2),F$(n,102)?(r=lMn(e=uG(n,19)),0!=(e.Bb&Qtt)&&(c|=32),r&&(iQ(K0(r)),c|=8,((a=r.t)>1||-1==a)&&(c|=16),0!=(r.Bb&Qtt)&&(c|=64)),0!=(e.Bb&P0n)&&(c|=frt),c|=w1n):F$(t,468)?c|=512:(i=t.kk())&&0!=(1&i.i)&&(c|=256),0!=(512&n.Bb)&&(c|=128),c}function DBn(n,t){var e;return n.f==CBt?(e=sJ(Nen((gAn(),kBt),t)),n.e?4==e&&t!=(m$n(),NBt)&&t!=(m$n(),OBt)&&t!=(m$n(),ABt)&&t!=(m$n(),LBt):2==e):!(!n.d||!(n.d.Hc(t)||n.d.Hc(_3(Nen((gAn(),kBt),t)))||n.d.Hc(iVn((gAn(),kBt),n.b,t))))||!(!n.f||!WRn((gAn(),n.f),HJ(Nen(kBt,t))))&&(e=sJ(Nen(kBt,t)),n.e?4==e:2==e)}function xBn(n){var t,e,i,r,c,a,o,u,s,h,f,l;for(f=-1,l=0,s=0,h=(u=n).length;s0&&++l;++f}return l}function RBn(n,t,i,r){var c,a,o,u,s,h,f,l;return s=(o=uG(zDn(i,(XYn(),mDt)),8)).a,f=o.b+n,(c=e.Math.atan2(f,s))<0&&(c+=f7n),(c+=t)>f7n&&(c-=f7n),h=(u=uG(zDn(r,mDt),8)).a,l=u.b+n,(a=e.Math.atan2(l,h))<0&&(a+=f7n),(a+=t)>f7n&&(a-=f7n),YN(),oan(1e-10),e.Math.abs(c-a)<=1e-10||c==a||isNaN(c)&&isNaN(a)?0:ca?1:KL(isNaN(c),isNaN(a))}function KBn(n){var t,e,i,r,c,a,o;for(o=new Ym,i=new Ww(n.a.b);i.a=n.o)throw hv(new Ik);a=t>>5,c=Nz(1,pz(Nz(31&t,1))),n.n[e][a]=r?S3(n.n[e][a],c):E3(n.n[e][a],CG(c)),c=Nz(c,1),n.n[e][a]=i?S3(n.n[e][a],c):E3(n.n[e][a],CG(c))}catch(o){throw F$(o=Ehn(o),333)?hv(new dM(b3n+n.o+"*"+n.p+w3n+t+TZn+e+d3n)):hv(o)}}function UBn(n,t,e,i){var r,c,a,o,u,s,h,f;for(f=new Hj(new ep(n)),o=0,u=(a=Uhn(cT(pbt,1),e6n,10,0,[t,e])).length;o0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function VBn(n){var t,e,i;return 0!=(64&n.Db)?rOn(n):(t=new lx(Btt),(e=n.k)?JA(JA((t.a+=' "',t),e),'"'):(!n.n&&(n.n=new fV(lFt,n,1,7)),n.n.i>0&&(!(i=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),i),'"'))),JA(Nj(JA(Nj(JA(Nj(JA(Nj((t.a+=" (",t),n.i),","),n.j)," | "),n.g),","),n.f),")"),t.a)}function WBn(n,t){var e,i,r,c,a;for(t==(Sln(),rEt)&&_An(uG(Y9(n.a,(gPn(),wdt)),15)),r=uG(Y9(n.a,(gPn(),wdt)),15).Kc();r.Ob();)switch(i=uG(r.Pb(),105),e=uG(zq(i.j,0),113).d.j,f$(c=new Z_(i.j),new Fr),t.g){case 2:TCn(n,c,e,(gon(),Edt),1);break;case 1:case 0:TCn(n,new C2(c,0,a=IRn(c)),e,(gon(),Edt),0),TCn(n,new C2(c,a,c.c.length),e,Edt,1)}}function QBn(n,t){var e,i,r,c,a,o;if(null==t||0==t.length)return null;if(!(r=uG(U1(n.a,t),143))){for(i=new _w(new Fw(n.b).a.vc().Kc());i.a.Ob();)if(c=uG(i.a.Pb(),44),a=(e=uG(c.md(),143)).c,o=t.length,m_(a.substr(a.length-o,o),t)&&(t.length==a.length||46==VJ(a,a.length-t.length-1))){if(r)return null;r=e}r&&r2(n.a,t,r)}return r}function JBn(n,t){var e,i,r;return e=new Bn,(i=uG(l8(YJ(new fX(null,new h3(n.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Out),Iut]))),21).gc())<(r=uG(l8(YJ(new fX(null,new h3(t.f,16)),e),gen(new W,new Q,new rn,new cn,Uhn(cT(Rut,1),p1n,108,0,[Out,Iut]))),21).gc())?-1:i==r?0:1}function YBn(n){var t,e,i;vR(n,(jYn(),PMt))&&((i=uG(oIn(n,PMt),21)).dc()||(e=new nB(t=uG(Mj(eRt),9),uG(MF(t,t.length),9),0),i.Hc((VDn(),Gxt))?Mon(e,Gxt):Mon(e,qxt),i.Hc(Hxt)||Mon(e,Hxt),i.Hc(Bxt)?Mon(e,Vxt):i.Hc(_xt)?Mon(e,zxt):i.Hc(Uxt)&&Mon(e,Xxt),i.Hc(Vxt)?Mon(e,Bxt):i.Hc(zxt)?Mon(e,_xt):i.Hc(Xxt)&&Mon(e,Uxt),kfn(n,PMt,e)))}function ZBn(n){var t,e,i,r,c,a,o;for(r=uG(oIn(n,(GYn(),zpt)),10),u3(0,(i=n.j).c.length),e=uG(i.c[0],12),a=new Ww(r.j);a.ar.p?(NLn(c,KRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=o-t)):c.j==KRt&&r.p>n.p&&(NLn(c,yRt),c.d&&(o=c.o.b,t=c.a.b,c.a.b=-(o-t)));break}return r}function nHn(n,t,e,i,r){var c,a,o,u,s,h,f;if(!(F$(t,207)||F$(t,366)||F$(t,193)))throw hv(new vM("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return a=n.a/2,u=t.i+i-a,h=t.j+r-a,s=u+t.g+n.a,f=h+t.f+n.a,aq(c=new Uk,new MO(u,h)),aq(c,new MO(u,f)),aq(c,new MO(s,f)),aq(c,new MO(s,h)),zsn(o=new pDn(c),t),e&&vJ(n.b,t,o),o}function tHn(n,t,e){var i,r,c,a,o,u,s,h;for(c=new MO(t,e),s=new Ww(n.a);s.a1&&(i=new MO(r,e.b),aq(t.a,i)),dan(t.a,Uhn(cT(PNt,1),zZn,8,0,[f,h]))}function THn(){THn=E,$jt=new dI(q4n,0),Ijt=new dI("NIKOLOV",1),Ljt=new dI("NIKOLOV_PIXEL",2),Ojt=new dI("NIKOLOV_IMPROVED",3),Ajt=new dI("NIKOLOV_IMPROVED_PIXEL",4),Sjt=new dI("DUMMYNODE_PERCENTAGE",5),Njt=new dI("NODECOUNT_PERCENTAGE",6),Djt=new dI("NO_BOUNDARY",7),Pjt=new dI("MODEL_ORDER_LEFT_TO_RIGHT",8),Cjt=new dI("MODEL_ORDER_RIGHT_TO_LEFT",9)}function jHn(n){var t,e,i,r,c;for(i=n.length,t=new VM,c=0;c=40)&&IGn(n),rzn(n),mFn(n),e=ign(n),i=0;e&&i0&&aq(n.f,c)):(n.c[a]-=s+1,n.c[a]<=0&&n.a[a]>0&&aq(n.e,c))))}function rUn(n,t,e,i){var r,c,a,o,u,s,h;for(YF(u=new MO(e,i),uG(oIn(t,(OQn(),kPt)),8)),h=Fkn(t.b,0);h.b!=h.d.c;)JF((s=uG(I6(h),39)).e,u),aq(n.b,s);for(o=uG(l8(_0(new fX(null,new h3(t.a,16))),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15).Kc();o.Ob();){for(c=Fkn((a=uG(o.Pb(),65)).a,0);c.b!=c.d.c;)(r=uG(I6(c),8)).a+=u.a,r.b+=u.b;aq(n.a,a)}}function cUn(n,t){var e,i,r,c;if(0<(F$(n,16)?uG(n,16).gc():x5(n.Kc()))){if(1<(r=t)){for(--r,c=new Ea,i=n.Kc();i.Ob();)e=uG(i.Pb(),39),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));return cUn(c,r)}if(r<0){for(c=new Sa,i=n.Kc();i.Ob();)e=uG(i.Pb(),39),c=zcn(Uhn(cT(vat,1),EZn,20,0,[c,new Mp(e)]));if(0<(F$(c,16)?uG(c,16).gc():x5(c.Kc())))return cUn(c,r)}}return uG(B$(n.Kc()),39)}function aUn(n,t,e){var i,r,c,a;for(e.Ug("Processor order nodes",2),n.b=uM(pK(oIn(t,(QGn(),ECt)))),n.a=uG(oIn(t,cCt),88),n.a==(xdn(),ZDt)&&(n.a=QDt,kfn(t,cCt,n.a)),r=new lS,a=Fkn(t.b,0);a.b!=a.d.c;)oM(gK(oIn(c=uG(I6(a),39),(OQn(),UPt))))&&s8(r,c,r.c.b,r.c);MK(0!=r.b),izn(n,i=uG(r.a.a.c,39)),e.fh(1),GBn(n,i,0-uM(pK(oIn(i,(OQn(),NPt))))/2,0),e.fh(1),e.Vg()}function oUn(){oUn=E,eKt=new FO("DEFAULT_MINIMUM_SIZE",0),rKt=new FO("MINIMUM_SIZE_ACCOUNTS_FOR_PADDING",1),tKt=new FO("COMPUTE_PADDING",2),cKt=new FO("OUTSIDE_NODE_LABELS_OVERHANG",3),aKt=new FO("PORTS_OVERHANG",4),uKt=new FO("UNIFORM_PORT_SPACING",5),oKt=new FO("SPACE_EFFICIENT_PORT_LABELS",6),iKt=new FO("FORCE_TABULAR_NODE_LABELS",7),nKt=new FO("ASYMMETRICAL",8)}function uUn(n,t){var e,i,r,c,a,o,u,s;if(t){if(e=(c=t.Dh())?Hrn(c).wi().si(c):null){for(Akn(n,t,e),u=0,s=(null==(r=t.Dh()).i&&eqn(r),r.i).length;u=0&&u2*c?(h=new Jrn(f),s=EX(a)/jX(a),u=KJn(h,t,new Dk,e,i,r,s),JF(dL(h.e),u),f.c.length=0,c=0,mv(f.c,h),mv(f.c,a),c=EX(h)*jX(h)+EX(a)*jX(a)):(mv(f.c,a),c+=EX(a)*jX(a));return f}function lUn(n,t){var e,i,r,c,a,o;if((o=uG(oIn(t,(jYn(),JMt)),101))==($Pn(),aRt)||o==cRt)for(r=new MO(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,a=new Ww(n.a);a.ae?t:e;s<=f;++s)s==e?o=i++:(c=r[s],h=w.am(c.Lk()),s==t&&(u=s!=f||h?i:i-1),h&&++i);return l=uG(zdn(n,t,e),76),o!=u&&Yv(n,new wtn(n.e,7,a,xwn(o),b.md(),u)),l}return uG(zdn(n,t,e),76)}function wUn(n,t){var e,i,r,c,a,o;for(t.Ug("Port order processing",1),o=uG(oIn(n,(jYn(),iTt)),430),e=new Ww(n.b);e.a=0&&(!fjn(n,a)||(u<22?o.l|=1<>>1,a.m=s>>>1|(1&h)<<21,a.l=f>>>1|(1&s)<<21,--u;return e&&Yfn(o),c&&(i?(Qat=gfn(n),r&&(Qat=Thn(Qat,(tin(),Zat)))):Qat=p$(n.l,n.m,n.h)),o}function mUn(n,t){var e,i,r,c,a,o,u,s,h,f;for(s=n.e[t.c.p][t.p]+1,u=t.c.a.c.length+1,o=new Ww(n.a);o.a0&&(s3(0,n.length),45==n.charCodeAt(0)||(s3(0,n.length),43==n.charCodeAt(0)))?1:0;ie)throw hv(new ZM(y0n+n+'"'));return a}function kUn(n){var t,i,r,c,a,o;for(a=new lS,c=new Ww(n.a);c.a1)&&1==t&&uG(n.a[n.b],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.b],10),(Ajn(),$xt)):i&&(!e||(n.c-n.b&n.a.length-1)>1)&&1==t&&uG(n.a[n.c-1&n.a.length-1],10).k==(zIn(),bbt)?Gqn(uG(n.a[n.c-1&n.a.length-1],10),(Ajn(),Dxt)):2==(n.c-n.b&n.a.length-1)?(Gqn(uG(Rfn(n),10),(Ajn(),$xt)),Gqn(uG(Rfn(n),10),Dxt)):Pxn(n,r),q5(n)}function EUn(n,t,i){var r,c,a,o,u;for(a=0,c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)o="",0==(!(r=uG(Zkn(c),27)).n&&(r.n=new fV(lFt,r,1,7)),r.n).i||(o=uG(zrn((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n),0),135).a),zsn(u=new wln(a++,t,o),r),kfn(u,(OQn(),RPt),r),u.e.b=r.j+r.f/2,u.f.a=e.Math.max(r.g,1),u.e.a=r.i+r.g/2,u.f.b=e.Math.max(r.f,1),aq(t.b,u),VAn(i.f,r,u)}function SUn(n){var t,e,i,r,c;i=uG(oIn(n,(GYn(),rmt)),27),c=uG(zDn(i,(jYn(),DMt)),181).Hc((Qmn(),JRt)),n.e||(r=uG(oIn(n,Hpt),21),t=new MO(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),r.Hc((r_n(),tpt))?(Myn(i,JMt,($Pn(),cRt)),ZQn(i,t.a,t.b,!1,!0)):oM(gK(zDn(i,xMt)))||ZQn(i,t.a,t.b,!0,!0)),Myn(i,DMt,c?ggn(JRt):new nB(e=uG(Mj(sKt),9),uG(MF(e,e.length),9),0))}function PUn(n,t,e){var i,r,c,a;if(t[0]>=n.length)return e.o=0,!0;switch(VJ(n,t[0])){case 43:r=1;break;case 45:r=-1;break;default:return e.o=0,!0}if(++t[0],c=t[0],0==(a=RNn(n,t))&&t[0]==c)return!1;if(t[0]a&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.c.i,e)));hZ(),f$(s,n.c),GX(n.b,o.p,s)}}function AUn(n,t){var e,i,r,c,a,o,u,s;for(c=new Ww(t.b);c.aa&&(a=r,s.c.length=0),r==a&&kD(s,new WO(e.d.i,e)));hZ(),f$(s,n.c),GX(n.f,o.p,s)}}function LUn(n,t){var e,i,r,c,a,o,u;if(null==(u=gK(oIn(t,(QGn(),TCt))))||(tJ(u),u)){for(E$n(n,t),r=new Zm,o=Fkn(t.b,0);o.b!=o.d.c;)(e=yAn(n,uG(I6(o),39),null))&&(zsn(e,t),mv(r.c,e));if(n.a=null,n.b=null,r.c.length>1)for(i=new Ww(r);i.a=0&&o!=e&&(c=new lV(n,1,o,a,null),i?i.nj(c):i=c),e>=0&&(c=new lV(n,1,e,o==e?a:null,t),i?i.nj(c):i=c)),i}function xUn(n){var t,e,i;if(null==n.b){if(i=new zM,null!=n.i&&(VA(i,n.i),i.a+=":"),0!=(256&n.f)){for(0!=(256&n.f)&&null!=n.a&&(aY(n.i)||(i.a+="//"),VA(i,n.a)),null!=n.d&&(i.a+="/",VA(i,n.d)),0!=(16&n.f)&&(i.a+="/"),t=0,e=n.j.length;ts)&&(u+o+uXn(i,s,!1).a<=t.b&&(dtn(e,c-e.s),e.c=!0,dtn(i,c-e.s),oMn(i,e.s,e.t+e.d+o),i.k=!0,Gun(e.q,i),h=!0,r&&(fan(t,i),i.j=t,n.c.length>a&&(uEn((u3(a,n.c.length),uG(n.c[a],186)),i),0==(u3(a,n.c.length),uG(n.c[a],186)).a.c.length&&i7(n,a)))),h)}function UUn(n,t){var e,i,r,c,a;if(t.Ug("Partition midprocessing",1),r=new K1,kS(JJ(new fX(null,new h3(n.a,16)),new di),new kg(r)),0!=r.d){for(a=uG(l8(f3(new fX(null,(r.i||(r.i=new RD(r,r.c))).Nc())),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),e=uG((i=a.Kc()).Pb(),17);i.Ob();)c=uG(i.Pb(),17),RRn(uG(Y9(r,e),21),uG(Y9(r,c),21)),e=c;t.Vg()}}function GUn(n,t,e){var i,r,c,a,o;if(0==t.p){for(t.p=1,(r=e)||(r=new WO(new Zm,new nB(i=uG(Mj(YRt),9),uG(MF(i,i.length),9),0))),uG(r.a,15).Fc(t),t.k==(zIn(),lbt)&&uG(r.b,21).Fc(uG(oIn(t,(GYn(),Fpt)),64)),a=new Ww(t.j);a.a0)if(r=uG(n.Ab.g,2033),null==t){for(c=0;ci.s&&ua)return KQn(),kRt;break;case 4:case 3:if(h<0)return KQn(),yRt;if(h+e>c)return KQn(),KRt}return(u=(s+o/2)/a)+(i=(h+e/2)/c)<=1&&u-i<=0?(KQn(),_Rt):u+i>=1&&u-i>=0?(KQn(),kRt):i<.5?(KQn(),yRt):(KQn(),KRt)}function tGn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b;for(e=!1,u=uM(pK(oIn(t,(jYn(),ETt)))),l=T1n*u,r=new Ww(t.b);r.aa.n.b-a.d.d+h.a+l&&(b=s.g+h.g,h.a=(h.g*h.a+s.g*s.a)/b,h.g=b,s.f=h,e=!0)),c=a,s=h;return e}function eGn(n,t,e,i,r,c,a){var o,u,s,h,f;for(f=new cN,u=t.Kc();u.Ob();)for(h=new Ww(uG(u.Pb(),853).Rf());h.a0?o.a?r>(s=o.b.Mf().b)&&(n.v||1==o.c.d.c.length?(a=(r-s)/2,o.d.d=a,o.d.a=a):(i=(uG(zq(o.c.d,0),187).Mf().b-s)/2,o.d.d=e.Math.max(0,i),o.d.a=r-i-s)):o.d.a=n.t+r:cV(n.u)&&((c=ECn(o.b)).d<0&&(o.d.d=-c.d),c.d+c.a>o.b.Mf().b&&(o.d.a=c.d+c.a-o.b.Mf().b))}function cGn(){cGn=E,$ft=new _N((XYn(),vDt),xwn(1)),_ft=new _N(DDt,80),Fft=new _N(CDt,5),kft=new _N(c$t,r4n),Dft=new _N(kDt,xwn(1)),Kft=new _N(TDt,(qx(),!0)),Aft=new CN(50),Oft=new _N(W$t,Aft),Mft=O$t,Lft=sDt,yft=new _N(p$t,!1),Ift=V$t,Pft=H$t,Cft=q$t,Sft=_$t,Eft=K$t,Nft=bDt,oOn(),jft=sft,Bft=wft,Tft=uft,xft=fft,Rft=bft,Gft=HDt,Xft=XDt,Uft=BDt,Hft=_Dt,Iwn(),new _N(UDt,qft=fKt)}function aGn(n,t){var e;switch(Min(n)){case 6:return RA(t);case 7:return FA(t);case 8:return KA(t);case 3:return Array.isArray(t)&&!((e=Min(t))>=14&&e<=16);case 11:return null!=t&&typeof t===mZn;case 12:return null!=t&&(typeof t===wZn||typeof t==mZn);case 0:return Eyn(t,n.__elementTypeId$);case 2:return NV(t)&&!(t.Tm===j);case 1:return NV(t)&&!(t.Tm===j)||Eyn(t,n.__elementTypeId$);default:return!0}}function oGn(n,t){var i,r,c,a;return r=e.Math.min(e.Math.abs(n.c-(t.c+t.b)),e.Math.abs(n.c+n.b-t.c)),a=e.Math.min(e.Math.abs(n.d-(t.d+t.a)),e.Math.abs(n.d+n.a-t.d)),(i=e.Math.abs(n.c+n.b/2-(t.c+t.b/2)))>n.b/2+t.b/2||(c=e.Math.abs(n.d+n.a/2-(t.d+t.a/2)))>n.a/2+t.a/2?1:0==i&&0==c?0:0==i?a/c+1:0==c?r/i+1:e.Math.min(r/i,a/c)+1}function uGn(n,t){var e,i,r,c,a,o,u;for(c=0,o=0,u=0,r=new Ww(n.f.e);r.a0&&n.d!=(Jen(),plt)&&(o+=a*(i.d.a+n.a[t.a][i.a]*(t.d.a-i.d.a)/e)),e>0&&n.d!=(Jen(),dlt)&&(u+=a*(i.d.b+n.a[t.a][i.a]*(t.d.b-i.d.b)/e)));switch(n.d.g){case 1:return new MO(o/c,t.d.b);case 2:return new MO(t.d.a,u/c);default:return new MO(o/c,u/c)}}function sGn(n){var t,e,i,r,c;for(kD(c=new R7((!n.a&&(n.a=new MD(eFt,n,5)),n.a).i+2),new MO(n.j,n.k)),kS(new fX(null,(!n.a&&(n.a=new MD(eFt,n,5)),new h3(n.a,16))),new Vp(c)),kD(c,new MO(n.b,n.c)),t=1;t0&&(hfn(u,!1,(xdn(),JDt)),hfn(u,!0,YDt)),Prn(t.g,new UC(n,e)),vJ(n.g,t,e)}function lGn(){var n;for(lGn=E,pot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),mot=Inn(YHt,W1n,28,37,15,1),vot=Uhn(cT(YHt,1),W1n,28,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),kot=Inn(nUt,E0n,28,37,14,1),n=2;n<=36;n++)mot[n]=t0(e.Math.pow(n,pot[n])),kot[n]=bSn(YZn,mot[n])}function bGn(n){var t;if(1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));return t=new Uk,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.b&&(n.b=new f_(cFt,n,4,7)),n.b),0),84)),!1)),Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84))&&Qon(t,pYn(n,Shn(uG(zrn((!n.c&&(n.c=new f_(cFt,n,5,8)),n.c),0),84)),!0)),t}function wGn(n,t){var e,i,r;for(r=!1,i=new Fz(ix((t.d?n.a.c==(b0(),fSt)?qgn(t.b):Xgn(t.b):n.a.c==(b0(),hSt)?qgn(t.b):Xgn(t.b)).a.Kc(),new h));hDn(i);)if(e=uG(N9(i),18),(oM(n.a.f[n.a.g[t.b.p].p])||v9(e)||e.c.i.c!=e.d.i.c)&&!oM(n.a.n[n.a.g[t.b.p].p])&&!oM(n.a.n[n.a.g[t.b.p].p])&&(r=!0,cS(n.b,n.a.g[vTn(e,t.b).p])))return t.c=!0,t.a=e,t;return t.c=r,t.a=null,t}function dGn(n,t,e){var i,r,c,a,o,u,s;if(0==(i=e.gc()))return!1;if(n.Pj())if(u=n.Qj(),nmn(n,t,e),a=1==i?n.Ij(3,null,e.Kc().Pb(),t,u):n.Ij(5,null,e,t,u),n.Mj()){for(o=i<100?null:new cj(i),c=t+i,r=t;r0){for(o=0;o>16==-15&&n.Cb.Yh()&&Cen(new btn(n.Cb,9,13,e,n.c,Hyn(Aen(uG(n.Cb,62)),n))):F$(n.Cb,90)&&n.Db>>16==-23&&n.Cb.Yh()&&(F$(t=n.c,90)||(YYn(),t=x_t),F$(e,90)||(YYn(),e=x_t),Cen(new btn(n.Cb,9,10,e,t,Hyn(z5(uG(n.Cb,29)),n)))))),n.c}function TGn(n,t,e){var i,r,c,a,o,u,s,h;for(e.Ug("Hyperedge merging",1),CDn(n,t),o=new N4(t.b,0);o.b0,o=hpn(t,c),Px(e?o.b:o.g,t),1==Ebn(o).c.length&&s8(i,o,i.c.b,i.c),r=new WO(c,t),A6(n.o,r),men(n.e.a,c))}function OGn(n,t){var i,r,c,a;return r=e.Math.abs(AV(n.b).a-AV(t.b).a),a=e.Math.abs(AV(n.b).b-AV(t.b).b),i=1,c=1,r>n.b.b/2+t.b.b/2&&(i=1-e.Math.min(e.Math.abs(n.b.c-(t.b.c+t.b.b)),e.Math.abs(n.b.c+n.b.b-t.b.c))/r),a>n.b.a/2+t.b.a/2&&(c=1-e.Math.min(e.Math.abs(n.b.d-(t.b.d+t.b.a)),e.Math.abs(n.b.d+n.b.a-t.b.d))/a),(1-e.Math.min(i,c))*e.Math.sqrt(r*r+a*a)}function AGn(n){var t,e,i;for(wQn(n,n.e,n.f,(l0(),USt),!0,n.c,n.i),wQn(n,n.e,n.f,USt,!1,n.c,n.i),wQn(n,n.e,n.f,GSt,!0,n.c,n.i),wQn(n,n.e,n.f,GSt,!1,n.c,n.i),yGn(n,n.c,n.e,n.f,n.i),e=new N4(n.i,0);e.b=65;e--)dHt[e]=e-65<<24>>24;for(i=122;i>=97;i--)dHt[i]=i-97+26<<24>>24;for(r=57;r>=48;r--)dHt[r]=r-48+52<<24>>24;for(dHt[43]=62,dHt[47]=63,c=0;c<=25;c++)gHt[c]=65+c&D1n;for(a=26,u=0;a<=51;++a,u++)gHt[a]=97+u&D1n;for(n=52,o=0;n<=61;++n,o++)gHt[n]=48+o&D1n;gHt[62]=43,gHt[63]=47}function $Gn(n,t){var i,r,c,a,o,u;return(c=nun(n))==(u=nun(t))?n.e==t.e&&n.a<54&&t.a<54?n.ft.f?1:0:(r=n.e-t.e,(i=(n.d>0?n.d:e.Math.floor((n.a-1)*A0n)+1)-(t.d>0?t.d:e.Math.floor((t.a-1)*A0n)+1))>r+1?c:i0&&(o=j5(o,_qn(r))),Pvn(a,o))):cs&&(l=0,b+=u+t,u=0),tHn(a,l,b),i=e.Math.max(i,l+h.a),u=e.Math.max(u,h.b),l+=h.a+t;return new MO(i+t,b+u+t)}function RGn(n,t){var e,i,r,c,a,o,u;if(!h0(n))throw hv(new kM(Stt));if(c=(i=h0(n)).g,r=i.f,c<=0&&r<=0)return KQn(),FRt;switch(o=n.i,u=n.j,t.g){case 2:case 1:if(o<0)return KQn(),_Rt;if(o+n.g>c)return KQn(),kRt;break;case 4:case 3:if(u<0)return KQn(),yRt;if(u+n.f>r)return KQn(),KRt}return(a=(o+n.g/2)/c)+(e=(u+n.f/2)/r)<=1&&a-e<=0?(KQn(),_Rt):a+e>=1&&a-e>=0?(KQn(),kRt):e<.5?(KQn(),yRt):(KQn(),KRt)}function KGn(n,t,e,i,r){var c,a;if(c=Lgn(E3(t[0],L0n),E3(i[0],L0n)),n[0]=pz(c),c=$z(c,32),e>=r){for(a=1;a0&&(r.b[a++]=0,r.b[a++]=c.b[0]-1),t=1;t0&&(Qb(u,u.d-r.d),r.c==(_7(),$St)&&Vb(u,u.a-r.d),u.d<=0&&u.i>0&&s8(t,u,t.c.b,t.c));for(c=new Ww(n.f);c.a0&&(Jb(o,o.i-r.d),r.c==(_7(),$St)&&Wb(o,o.b-r.d),o.i<=0&&o.d>0&&s8(e,o,e.c.b,e.c))}function GGn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b;for(hZ(),f$(n,new Bu),a=oG(n),b=new Zm,l=new Zm,o=null,u=0;0!=a.b;)c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),163),!o||EX(o)*jX(o)/21&&(u>EX(o)*jX(o)/2||0==a.b)&&(f=new Jrn(l),h=EX(o)/jX(o),s=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),s),o=f,mv(b.c,f),u=0,l.c.length=0));return Ohn(b,l),b}function qGn(n,t,e,i,r){var c,a,o,u,s,h,f;if(bS(),aW(n,"src"),aW(e,"dest"),f=Tbn(n),u=Tbn(e),yG(0!=(4&f.i),"srcType is not an array"),yG(0!=(4&u.i),"destType is not an array"),h=f.c,a=u.c,yG(0!=(1&h.i)?h==a:0==(1&a.i),"Array types don't match"),$fn(n,t,e,i,r),0==(1&h.i)&&f!=u)if(s=Kcn(n),c=Kcn(e),xA(n)===xA(e)&&ti;)uQ(c,o,s[--t]);else for(o=i+r;i0),i.a.Xb(i.c=--i.b),h>f+o&&LQ(i);for(c=new Ww(l);c.a0),i.a.Xb(i.c=--i.b)}}function VGn(){var n,t,e,i,r,c;if(QYn(),WHt)return WHt;for(TXn(n=new K3(4),kJn(iat,!0)),lWn(n,kJn("M",!0)),lWn(n,kJn("C",!0)),c=new K3(4),i=0;i<11;i++)HFn(c,i,i);return TXn(t=new K3(4),kJn("M",!0)),HFn(t,4448,4607),HFn(t,65438,65439),kzn(r=new QN(2),n),kzn(r,OHt),(e=new QN(2)).Jm(CX(c,kJn("L",!0))),e.Jm(t),e=new n8(3,e),e=new eW(r,e),WHt=e}function WGn(n,t){var e,i,r,c,a,o,u,s;for(e=new RegExp(t,"g"),u=Inn($ot,zZn,2,0,6,1),i=0,s=n,c=null;;){if(null==(o=e.exec(s))||""==s){u[i]=s;break}a=o.index,u[i]=(Knn(0,a,s.length),s.substr(0,a)),s=r1(s,a+o[0].length,s.length),e.lastIndex=0,c==s&&(u[i]=(Knn(0,1,s.length),s.substr(0,1)),s3(1,s.length+1),s=s.substr(1)),c=s,++i}if(n.length>0){for(r=u.length;r>0&&""==u[r-1];)--r;r0&&(l-=r[0]+n.c,r[0]+=n.c),r[2]>0&&(l-=r[2]+n.c),r[1]=e.Math.max(r[1],l),qX(n.a[1],i.c+t.b+r[0]-(r[1]-l)/2,r[1]);for(u=0,h=(a=n.a).length;u0?(n.n.c.length-1)*n.i:0,i=new Ww(n.n);i.a1)for(i=Fkn(r,0);i.b!=i.d.c;)for(c=0,o=new Ww((e=uG(I6(i),235)).e);o.a0&&(t[0]+=n.c,l-=t[0]),t[2]>0&&(l-=t[2]+n.c),t[1]=e.Math.max(t[1],l),XX(n.a[1],r.d+i.d+t[0]-(t[1]-l)/2,t[1]);else for(w=r.d+i.d,b=r.a-i.d-i.a,s=0,f=(o=n.a).length;s0||0==Fgn(c.b.d,n.b.d+n.b.a)&&r.b<0||0==Fgn(c.b.d+c.b.a,n.b.d)&&r.b>0){u=0;break}}else u=e.Math.min(u,LLn(n,c,r));u=e.Math.min(u,uqn(n,a,u,r))}return u}function sqn(n,t){var e,i,r,c,a,o;if(n.b<2)throw hv(new vM("The vector chain must contain at least a source and a target point."));for(MK(0!=n.b),MN(t,(i=uG(n.a.a.c,8)).a,i.b),o=new Zx((!t.a&&(t.a=new MD(eFt,t,5)),t.a)),c=Fkn(n,1);c.a=0&&c!=e)throw hv(new vM(Xet));for(r=0,u=0;uuM(oD(a.g,a.d[0]).a)?(MK(u.b>0),u.a.Xb(u.c=--u.b),pF(u,a),r=!0):o.e&&o.e.gc()>0&&(c=(!o.e&&(o.e=new Zm),o.e).Mc(t),s=(!o.e&&(o.e=new Zm),o.e).Mc(e),(c||s)&&((!o.e&&(o.e=new Zm),o.e).Fc(a),++a.c));r||mv(i.c,a)}function bqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;return h=n.a.i+n.a.g/2,f=n.a.i+n.a.g/2,a=new MO(t.i+t.g/2,t.j+t.f/2),(u=uG(zDn(t,(XYn(),mDt)),8)).a=u.a+h,u.b=u.b+f,r=(a.b-u.b)/(a.a-u.a),i=a.b-r*a.a,o=new MO(e.i+e.g/2,e.j+e.f/2),(s=uG(zDn(e,mDt),8)).a=s.a+h,s.b=s.b+f,c=(o.b-s.b)/(o.a-s.a),l=(i-(o.b-c*o.a))/(c-r),!(u.a>>0).toString(16),t.length-2,t.length):n>=P0n?"\\v"+r1(t="0"+(n>>>0).toString(16),t.length-6,t.length):""+String.fromCharCode(n&D1n)}return e}function Tqn(n){var t,e,i;if(sN(uG(oIn(n,(jYn(),JMt)),101)))for(e=new Ww(n.j);e.a=t.o&&e.f<=t.f||.5*t.a<=e.f&&1.5*t.a>=e.f){if((c=uG(zq(t.n,t.n.c.length-1),209)).e+c.d+e.g+r<=i&&(uG(zq(t.n,t.n.c.length-1),209).f-n.f+e.f<=n.b||1==n.a.c.length))return ipn(t,e),!0;if(t.s+e.g<=i&&(t.t+t.d+e.f+r<=n.b||1==n.a.c.length))return kD(t.b,e),a=uG(zq(t.n,t.n.c.length-1),209),kD(t.n,new c0(t.s,a.f+a.a+t.i,t.i)),zMn(uG(zq(t.n,t.n.c.length-1),209),e),nqn(t,e),!0}return!1}function Pqn(n,t,e){var i,r,c,a;return n.Pj()?(r=null,c=n.Qj(),i=n.Ij(1,a=iin(n,t,e),e,t,c),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))?(null!=a&&(r=n.Oj(a,r)),r=n.Nj(e,r),n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)):(n.Tj()&&(r=n.Wj(a,e,r)),r?(r.nj(i),r.oj()):n.Jj(i)),a):(a=iin(n,t,e),n.Mj()&&!(n.Yi()&&null!=a?udn(a,e):xA(a)===xA(e))&&(r=null,null!=a&&(r=n.Oj(a,null)),(r=n.Nj(e,r))&&r.oj()),a)}function Cqn(n,t){var e,i,r,c;if(t.Ug("Path-Like Graph Wrapping",1),0!=n.b.c.length)if(null==(r=new dDn(n)).i&&(r.i=aun(r,new pc)),e=uM(r.i)*r.f/(null==r.i&&(r.i=aun(r,new pc)),uM(r.i)),r.b>e)t.Vg();else{switch(uG(oIn(n,(jYn(),BTt)),351).g){case 2:c=new kc;break;case 0:c=new hc;break;default:c=new yc}if(i=c.og(n,r),!c.pg())switch(uG(oIn(n,zTt),352).g){case 2:i=KLn(r,i);break;case 1:i=pPn(r,i)}yzn(n,r,i),t.Vg()}else t.Vg()}function Iqn(n,t){var i,r,c,a,o,u,s;t%=24,n.q.getHours()!=t&&((i=new e.Date(n.q.getTime())).setDate(i.getDate()+1),(o=n.q.getTimezoneOffset()-i.getTimezoneOffset())>0&&(u=o/60|0,s=o%60,r=n.q.getDate(),n.q.getHours()+u>=24&&++r,c=new e.Date(n.q.getFullYear(),n.q.getMonth(),r,t+u,n.q.getMinutes()+s,n.q.getSeconds(),n.q.getMilliseconds()),n.q.setTime(c.getTime()))),a=n.q.getTime(),n.q.setTime(a+36e5),n.q.getHours()!=t&&n.q.setTime(a)}function Oqn(n,t){var e,i,r,c;if(a3(n.d,n.e),n.c.a.$b(),0!=uM(pK(oIn(t.j,(jYn(),yyt))))||0!=uM(pK(oIn(t.j,yyt))))for(e=B3n,xA(oIn(t.j,Syt))!==xA((yvn(),Fjt))&&kfn(t.j,(GYn(),Bpt),(qx(),!0)),c=uG(oIn(t.j,OTt),17).a,r=0;r(u3(c+1,t.c.length),uG(t.c[c+1],17)).a-i&&++o,kD(r,(u3(c+o,t.c.length),uG(t.c[c+o],17))),a+=(u3(c+o,t.c.length),uG(t.c[c+o],17)).a-i,++e;e=g&&n.e[s.p]>w*n.b||v>=i*g)&&(mv(l.c,u),u=new Zm,Qon(o,a),a.a.$b(),h-=f,b=e.Math.max(b,h*n.b+d),h+=v,m=v,v=0,f=0,d=0);return new WO(b,l)}function $qn(n){var t,e,i,r,c;if(!n.d){if(c=new js,null==(t=V_t).a.zc(n,t)){for(e=new DD(n1(n));e.e!=e.i.gc();)CW(c,$qn(uG(Zkn(e),29)));t.a.Bc(n),t.a.gc()}for(r=c.i,!n.q&&(n.q=new fV(p_t,n,11,10)),i=new DD(n.q);i.e!=i.i.gc();++r)uG(Zkn(i),411);CW(c,(!n.q&&(n.q=new fV(p_t,n,11,10)),n.q)),lbn(c),n.d=new vL((uG(zrn(gZ((tQ(),M_t).o),9),19),c.i),c.g),n.e=uG(c.g,688),null==n.e&&(n.e=W_t),y9(n).b&=-17}return n.d}function Dqn(n,t,e,i){var r,c,a,o,u,s;if(s=VKn(n.e.Dh(),t),u=0,r=uG(n.g,124),PP(),uG(t,69).xk()){for(a=0;a1||-1==w)if(f=uG(d,71),l=uG(h,71),f.dc())l.$b();else for(a=!!lMn(t),c=0,o=n.a?f.Kc():f.Ii();o.Ob();)s=uG(o.Pb(),58),(r=uG(ain(n,s),58))?(a?-1==(u=l.dd(r))?l.Gi(c,r):c!=u&&l.Ui(c,r):l.Gi(c,r),++c):n.b&&!a&&(l.Gi(c,s),++c);else null==d?h.Wb(null):null==(r=ain(n,d))?n.b&&!lMn(t)&&h.Wb(d):h.Wb(r)}function Rqn(n,t){var i,r,c,a,o,u,s,f;for(i=new Ne,c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)if(!v9(r=uG(N9(c),18))&&_Pn(u=r.c.i,$bt)){if(-1==(f=U_n(n,u,$bt,Nbt)))continue;i.b=e.Math.max(i.b,f),!i.a&&(i.a=new Zm),kD(i.a,u)}for(o=new Fz(ix(Xgn(t).a.Kc(),new h));hDn(o);)if(!v9(a=uG(N9(o),18))&&_Pn(s=a.d.i,Nbt)){if(-1==(f=U_n(n,s,Nbt,$bt)))continue;i.d=e.Math.max(i.d,f),!i.c&&(i.c=new Zm),kD(i.c,s)}return i}function Kqn(n,t,e,i){var r,c,a,o,u,s,h;if(e.d.i!=t.i){for(Hb(r=new gMn(n),(zIn(),wbt)),kfn(r,(GYn(),rmt),e),kfn(r,(jYn(),JMt),($Pn(),cRt)),mv(i.c,r),o2(a=new lOn,r),NLn(a,(KQn(),_Rt)),o2(o=new lOn,r),NLn(o,kRt),h=e.d,u2(e,a),zsn(c=new UZ,e),kfn(c,bMt,null),c2(c,o),u2(c,h),s=new N4(e.b,0);s.b1e6)throw hv(new wM("power of ten too big"));if(n<=vZn)return D9(t$n(Got[1],t),t);for(r=i=t$n(Got[1],vZn),e=Bsn(n-vZn),t=t0(n%vZn);dwn(e,vZn)>0;)r=j5(r,i),e=$gn(e,vZn);for(r=D9(r=j5(r,t$n(Got[1],t)),vZn),e=Bsn(n-vZn);dwn(e,vZn)>0;)r=D9(r,vZn),e=$gn(e,vZn);return r=D9(r,t)}function Bqn(n){var t,e,i,r,c,a,o,u;for(a=new Ww(n.a);a.as&&i>s)){r=!1,e._g()&&e.bh("bk node placement breaks on "+o+" which should have been after "+h);break}h=o,s=uM(t.p[o.p])+uM(t.d[o.p])+o.o.b+o.d.a}if(!r)break}return e._g()&&e.bh(t+" is feasible: "+r),r}function Xqn(n,t,e,i){var r,c,a,o,u,s,h;if(Hb(c=new gMn(n),(zIn(),gbt)),kfn(c,(jYn(),JMt),($Pn(),cRt)),r=0,t){for(kfn(a=new lOn,(GYn(),rmt),t),kfn(c,rmt,t.i),NLn(a,(KQn(),_Rt)),o2(a,c),s=0,h=(u=x4(t.e)).length;s0)){if(r=-1,32==VJ(h.c,0)){if(f=s[0],win(t,s),s[0]>f)continue}else if(WZ(t,h.c,s[0])){s[0]+=h.c.length;continue}return 0}if(r<0&&h.a&&(r=u,c=s[0],i=0),r>=0){if(o=h.b,u==r&&0==(o-=i++))return 0;if(!rJn(t,s,h,o,a)){u=r-1,s[0]=c;continue}}else if(r=-1,!rJn(t,s,h,0,a))return 0}return LQn(a,e)?s[0]:0}function Qqn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(h=new Kz(new Fd(e)),zV(o=Inn(ZHt,B2n,28,n.f.e.c.length,16,1),o.length),e[t.a]=0,s=new Ww(n.f.e);s.a=0&&!eTn(n,h,f);)--f;r[h]=f}for(b=0;b=0&&!eTn(n,o,w);)--o;c[w]=o}for(u=0;ut[l]&&li[u]&&HBn(n,u,l,!1,!0)}function Yqn(n){var t,e,i,r,c,a,o,u;e=oM(gK(oIn(n,(cGn(),yft)))),c=n.a.c.d,o=n.a.d.d,e?(a=vD(YF(new MO(o.a,o.b),c),.5),u=vD(D$(n.e),.5),t=YF(JF(new MO(c.a,c.b),a),u),_R(n.d,t)):(r=uM(pK(oIn(n.a,Fft))),i=n.d,c.a>=o.a?c.b>=o.b?(i.a=o.a+(c.a-o.a)/2+r,i.b=o.b+(c.b-o.b)/2-r-n.e.b):(i.a=o.a+(c.a-o.a)/2+r,i.b=c.b+(o.b-c.b)/2+r):c.b>=o.b?(i.a=c.a+(o.a-c.a)/2+r,i.b=o.b+(c.b-o.b)/2+r):(i.a=c.a+(o.a-c.a)/2+r,i.b=c.b+(o.b-c.b)/2-r-n.e.b))}function Zqn(n){var t,e,i,r,c,a;if(!n.f){if(a=new Ms,c=new Ms,null==(t=V_t).a.zc(n,t)){for(r=new DD(n1(n));r.e!=r.i.gc();)CW(a,Zqn(uG(Zkn(r),29)));t.a.Bc(n),t.a.gc()}for(!n.s&&(n.s=new fV(o_t,n,21,17)),i=new DD(n.s);i.e!=i.i.gc();)F$(e=uG(Zkn(i),179),102)&&ttn(c,uG(e,19));lbn(c),n.r=new JG(n,(uG(zrn(gZ((tQ(),M_t).o),6),19),c.i),c.g),CW(a,n.r),lbn(a),n.f=new vL((uG(zrn(gZ(M_t.o),5),19),a.i),a.g),y9(n).b&=-3}return n.f}function nXn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,$3n),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new ct))),U4(n,$3n,D3n,Jkn(ift)),U4(n,$3n,x3n,Jkn(Jht)),U4(n,$3n,R3n,Jkn(Xht)),U4(n,$3n,K3n,Jkn(Yht)),U4(n,$3n,D2n,Jkn(tft)),U4(n,$3n,x2n,Jkn(nft)),U4(n,$3n,$2n,Jkn(eft)),U4(n,$3n,R2n,Jkn(Zht)),U4(n,$3n,I3n,Jkn(Vht)),U4(n,$3n,O3n,Jkn(zht)),U4(n,$3n,A3n,Jkn(Wht)),U4(n,$3n,L3n,Jkn(Qht))}function tXn(){tXn=E,JKt=Uhn(cT(JHt,1),N1n,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),YKt=new RegExp("[ \t\n\r\f]+");try{QKt=Uhn(cT(iBt,1),EZn,2114,0,[new Km((wL(),Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",bF((qy(),qy(),Hat))))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss'.'SSS",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm:ss",bF(Hat))),new Km(Cmn("yyyy-MM-dd'T'HH:mm",bF(Hat))),new Km(Cmn("yyyy-MM-dd",bF(Hat)))])}catch(n){if(!F$(n=Ehn(n),82))throw hv(n)}}function eXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==rHn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=rHn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=rHn(n,t)}while(r>e);return r}function iXn(n,t){var e,i,r;if(i=0!=uRn(n.d,1),0==BAn(n,t)&&oM(gK(oIn(t.j,(GYn(),Bpt)))))return 0;!oM(gK(oIn(t.j,(GYn(),Bpt))))&&!oM(gK(oIn(t.j,mmt)))||xA(oIn(t.j,(jYn(),Syt)))===xA((yvn(),Fjt))?t.c.mg(t.e,i):i=oM(gK(oIn(t.j,Bpt))),PKn(n,t,i,!0),oM(gK(oIn(t.j,mmt)))&&kfn(t.j,mmt,(qx(),!1)),oM(gK(oIn(t.j,Bpt)))&&(kfn(t.j,Bpt,(qx(),!1)),kfn(t.j,mmt,!0)),e=BAn(n,t);do{if(Gon(n),0==e)return 0;r=e,PKn(n,t,i=!i,!1),e=BAn(n,t)}while(r>e);return r}function rXn(n,t,i,r){var c,a,o,u,s,h,f,l,b;return h=(s=YF(new MO(i.a,i.b),n)).a*t.b-s.b*t.a,f=t.a*r.b-t.b*r.a,l=(s.a*r.b-s.b*r.a)/f,b=h/f,0==f?0==h?(a=atn(n,c=JF(new MO(i.a,i.b),vD(new MO(r.a,r.b),.5))),o=atn(JF(new MO(n.a,n.b),t),c),u=.5*e.Math.sqrt(r.a*r.a+r.b*r.b),a=0&&l<=1&&b>=0&&b<=1?JF(new MO(n.a,n.b),vD(new MO(t.a,t.b),l)):null}function cXn(n,t,e){var i,r,c,a,o;if(i=uG(oIn(n,(jYn(),Pyt)),21),e.a>t.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(o=new Ww(n.a);o.at.a&&(i.Hc((ZSn(),VNt))?n.c.a+=(e.a-t.a)/2:i.Hc(QNt)&&(n.c.a+=e.a-t.a)),e.b>t.b&&(i.Hc((ZSn(),YNt))?n.c.b+=(e.b-t.b)/2:i.Hc(JNt)&&(n.c.b+=e.b-t.b)),uG(oIn(n,(GYn(),Hpt)),21).Hc((r_n(),tpt))&&(e.a>t.a||e.b>t.b))for(a=new Ww(n.a);a.a0?n.i:0)>t&&s>0&&(a=0,o+=s+n.i,c=e.Math.max(c,b),r+=s+n.i,s=0,b=0,i&&(++l,kD(n.n,new c0(n.s,o,n.i))),u=0),b+=h.g+(u>0?n.i:0),s=e.Math.max(s,h.f),i&&zMn(uG(zq(n.n,l),209),h),a+=h.g+(u>0?n.i:0),++u;return c=e.Math.max(c,b),r+=s,i&&(n.r=c,n.d=r,ijn(n.j)),new gY(n.s,n.t,c,r)}function sXn(n){var t,i,r,c,a,o,u,s,h,f,l;for(n.b=!1,f=M0n,u=T0n,l=M0n,s=T0n,i=n.e.a.ec().Kc();i.Ob();)for(r=(t=uG(i.Pb(),272)).a,f=e.Math.min(f,r.c),u=e.Math.max(u,r.c+r.b),l=e.Math.min(l,r.d),s=e.Math.max(s,r.d+r.a),a=new Ww(t.c);a.an.o.a&&(f=(s-n.o.a)/2,u.b=e.Math.max(u.b,f),u.c=e.Math.max(u.c,f))}}function wXn(n){var t,e,i,r,c,a;for(YL(r=new r4,(Whn(),YLt)),i=new Jw(new IM(new JE(n,Yon(n,Inn($ot,zZn,2,0,6,1))).b));i.bo?1:-1:Hln(n.a,t.a,c)))f=-u,h=a==u?t7(t.a,o,n.a,c):Cnn(t.a,o,n.a,c);else if(f=a,a==u){if(0==r)return cHn(),_ot;h=t7(n.a,c,t.a,o)}else h=Cnn(n.a,c,t.a,o);return K4(s=new VV(f,h.length,h)),s}function vXn(n,t){var e,i,r;if(r=PGn(t),!t.c&&(t.c=new fV(wFt,t,9,9)),kS(new fX(null,(!t.c&&(t.c=new fV(wFt,t,9,9)),new h3(t.c,16))),new Jd(r)),CWn(t,i=uG(oIn(r,(GYn(),Hpt)),21)),i.Hc((r_n(),tpt)))for(e=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));e.e!=e.i.gc();)pQn(n,t,r,uG(Zkn(e),123));return 0!=uG(zDn(t,(jYn(),DMt)),181).gc()&&u_n(t,r),oM(gK(oIn(r,HMt)))&&i.Fc(apt),vR(r,fTt)&&iM(new omn(uM(pK(oIn(r,fTt)))),r),xA(zDn(t,rMt))===xA((Own(),Ixt))?UYn(n,t,r):dYn(n,t,r),r}function kXn(n){var t,e,i,r,c,a,o;for(i=new Ww(n.b);i.a0?r1(e.a,0,c-1):"":(Knn(0,c-1,n.length),n.substr(0,c-1)):e?e.a:n}function MXn(n,t){var e,i,r,c,a,o,u;for(t.Ug("Sort By Input Model "+oIn(n,(jYn(),Syt)),1),r=0,i=new Ww(n.b);i.a=n.b.length?(c[r++]=a.b[i++],c[r++]=a.b[i++]):i>=a.b.length?(c[r++]=n.b[e++],c[r++]=n.b[e++]):a.b[i]0?n.i:0)),++t;for(dgn(n.n,s),n.d=i,n.r=r,n.g=0,n.f=0,n.e=0,n.o=M0n,n.p=M0n,a=new Ww(n.b);a.a0&&(!(r=(!n.n&&(n.n=new fV(lFt,n,1,7)),uG(zrn(n.n,0),135)).a)||JA(JA((t.a+=' "',t),r),'"'))),!n.b&&(n.b=new f_(cFt,n,4,7)),e=!(n.b.i<=1&&(!n.c&&(n.c=new f_(cFt,n,5,8)),n.c.i<=1)),t.a+=e?" [":" ",JA(t,KD(new FM,new DD(n.b))),e&&(t.a+="]"),t.a+=Y4n,e&&(t.a+="["),JA(t,KD(new FM,new DD(n.c))),e&&(t.a+="]"),t.a)}function PXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(k=n.c,y=t.c,e=Ten(k.a,n,0),i=Ten(y.a,t,0),m=uG(jmn(n,(can(),Vjt)).Kc().Pb(),12),j=uG(jmn(n,Wjt).Kc().Pb(),12),v=uG(jmn(t,Vjt).Kc().Pb(),12),E=uG(jmn(t,Wjt).Kc().Pb(),12),g=x4(m.e),M=x4(j.g),p=x4(v.e),T=x4(E.g),$jn(n,i,y),s=0,b=(c=p).length;sh?new A2((_7(),DSt),i,t,s-h):s>0&&h>0&&(new A2((_7(),DSt),t,i,0),new A2(DSt,i,t,0))),a)}function AXn(n,t,e){var i,r,c;for(n.a=new Zm,c=Fkn(t.b,0);c.b!=c.d.c;){for(r=uG(I6(c),39);uG(oIn(r,(QGn(),ACt)),17).a>n.a.c.length-1;)kD(n.a,new WO(B3n,G9n));i=uG(oIn(r,ACt),17).a,e==(xdn(),JDt)||e==YDt?(r.e.auM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.a+r.f.a)):(r.e.buM(pK(uG(zq(n.a,i),42).b))&&sw(uG(zq(n.a,i),42),r.e.b+r.f.b))}}function LXn(n,t,e,i){var r,c,a,o,u,s;if(c=pgn(i),!oM(gK(oIn(i,(jYn(),jMt))))&&!oM(gK(oIn(n,uMt)))||sN(uG(oIn(n,JMt),101)))switch(o2(o=new lOn,n),t?((s=o.n).a=t.a-n.n.a,s.b=t.b-n.n.b,DOn(s,0,0,n.o.a,n.o.b),NLn(o,nGn(o,c))):(r=Ipn(c),NLn(o,e==(can(),Wjt)?r:Gdn(r))),a=uG(oIn(i,(GYn(),Hpt)),21),u=o.j,c.g){case 2:case 1:(u==(KQn(),yRt)||u==KRt)&&a.Fc((r_n(),cpt));break;case 4:case 3:(u==(KQn(),kRt)||u==_Rt)&&a.Fc((r_n(),cpt))}else r=Ipn(c),o=zUn(n,e,e==(can(),Wjt)?r:Gdn(r));return o}function NXn(n,t){var i,r,c,a,o;for(o=new bsn(new Nw(n.f.b).a);o.b;){if(c=uG((a=von(o)).ld(),602),1==t){if(c.Af()!=(xdn(),nxt)&&c.Af()!=QDt)continue}else if(c.Af()!=(xdn(),JDt)&&c.Af()!=YDt)continue;switch(r=uG(uG(a.md(),42).b,86),i=uG(uG(a.md(),42).a,194).c,c.Af().g){case 2:r.g.c=n.e.a,r.g.b=e.Math.max(1,r.g.b+i);break;case 1:r.g.c=r.g.c+i,r.g.b=e.Math.max(1,r.g.b-i);break;case 4:r.g.d=n.e.b,r.g.a=e.Math.max(1,r.g.a+i);break;case 3:r.g.d=r.g.d+i,r.g.a=e.Math.max(1,r.g.a-i)}}}function $Xn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(u=Inn(YHt,W1n,28,t.b.c.length,15,1),h=Inn(vbt,p1n,273,t.b.c.length,0,1),s=Inn(pbt,e6n,10,t.b.c.length,0,1),b=0,w=(l=n.a).length;b0&&s[r]&&(d=y$(n.b,s[r],c)),g=e.Math.max(g,c.c.c.b+d);for(a=new Ww(f.e);a.a1)throw hv(new vM(dct));u||(c=R5(t,i.Kc().Pb()),a.Fc(c))}return bfn(n,sAn(n,t,e),a)}function BXn(n,t,e){var i,r,c,a,o,u,s;if(EFn(n.e,t))PP(),C$n((o=uG(t,69).xk()?new Cq(t,n):new OA(t,n)).c,o.b),K$(o,uG(e,16));else{for(s=VKn(n.e.Dh(),t),i=uG(n.g,124),c=0;c"}null!=u&&(t.a+=""+u)}else n.e?null!=(o=n.e.zb)&&(t.a+=""+o):(t.a+="?",n.b?(t.a+=" super ",XXn(n.b,t)):n.f&&(t.a+=" extends ",XXn(n.f,t)))}function zXn(n){n.b=null,n.a=null,n.o=null,n.q=null,n.v=null,n.w=null,n.B=null,n.p=null,n.Q=null,n.R=null,n.S=null,n.T=null,n.U=null,n.V=null,n.W=null,n.bb=null,n.eb=null,n.ab=null,n.H=null,n.db=null,n.c=null,n.d=null,n.f=null,n.n=null,n.r=null,n.s=null,n.u=null,n.G=null,n.J=null,n.e=null,n.j=null,n.i=null,n.g=null,n.k=null,n.t=null,n.F=null,n.I=null,n.L=null,n.M=null,n.O=null,n.P=null,n.$=null,n.N=null,n.Z=null,n.cb=null,n.K=null,n.D=null,n.A=null,n.C=null,n._=null,n.fb=null,n.X=null,n.Y=null,n.gb=!1,n.hb=!1}function VXn(n){var t,i,r,c;if(r=bYn((!n.c&&(n.c=j2(Bsn(n.f))),n.c),0),0==n.e||0==n.a&&-1!=n.f&&n.e<0)return r;if(t=nun(n)<0?1:0,i=n.e,r.length,e.Math.abs(t0(n.e)),c=new QM,1==t&&(c.a+="-"),n.e>0)if((i-=r.length-t)>=0){for(c.a+="0.";i>Pot.length;i-=Pot.length)Xq(c,Pot);lF(c,Pot,t0(i)),JA(c,(s3(t,r.length+1),r.substr(t)))}else JA(c,r1(r,t,t0(i=t-i))),c.a+=".",JA(c,sQ(r,t0(i)));else{for(JA(c,(s3(t,r.length+1),r.substr(t)));i<-Pot.length;i+=Pot.length)Xq(c,Pot);lF(c,Pot,t0(-i))}return c.a}function WXn(n){var t,e,i,r,c;if(n.k!=(zIn(),dbt))return!1;if(n.j.c.length<=1)return!1;if(uG(oIn(n,(jYn(),JMt)),101)==($Pn(),cRt))return!1;if(Yyn(),(i=(n.q?n.q:(hZ(),hZ(),Vot))._b(LMt)?uG(oIn(n,LMt),203):uG(oIn(HQ(n),NMt),203))==djt)return!1;if(i!=wjt&&i!=bjt){if(r=uM(pK(Omn(n,ITt))),!(t=uG(oIn(n,CTt),140))&&(t=new OF(r,r,r,r)),c=Dgn(n,(KQn(),_Rt)),t.d+t.a+(c.gc()-1)*r>n.o.b)return!1;if(e=Dgn(n,kRt),t.d+t.a+(e.gc()-1)*r>n.o.b)return!1}return!0}function QXn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;t.Ug("Orthogonal edge routing",1),s=uM(pK(oIn(n,(jYn(),STt)))),e=uM(pK(oIn(n,gTt))),i=uM(pK(oIn(n,vTt))),l=new NW(0,e),d=0,a=new N4(n.b,0),o=null,h=null,u=null,f=null;do{f=(h=a.b0?(b=(w-1)*e,o&&(b+=i),h&&(b+=i),bt||oM(gK(zDn(o,(S_n(),nAt)))))&&(r=0,c+=s.b+e,mv(h.c,s),fan(s=new e4(c,e),i=new dln(0,s.f,s,e)),r=0),0==i.b.c.length||!oM(gK(zDn(R0(o),(S_n(),uAt))))&&(o.f>=i.o&&o.f<=i.f||.5*i.a<=o.f&&1.5*i.a>=o.f)?ipn(i,o):(fan(s,a=new dln(i.s+i.r+e,s.f,s,e)),ipn(a,o)),r=o.i+o.g;return mv(h.c,s),h}function szn(n){var t,e,i,r;if(!(null==n.b||n.b.length<=2||n.a)){for(t=0,r=0;r=n.b[r+1])r+=2;else{if(!(e0)for(i=new Z_(uG(Y9(n.a,c),21)),hZ(),f$(i,new Gd(t)),r=new N4(c.b,0);r.b0&&i>=-6?i>=0?Ex(c,e-t0(n.e),String.fromCharCode(46)):(psn(c,t-1,t-1,"0."),Ex(c,t+1,mvn(Pot,0,-t0(i)-1))):(e-t>=1&&(Ex(c,t,String.fromCharCode(46)),++e),Ex(c,e,String.fromCharCode(69)),i>0&&Ex(c,++e,String.fromCharCode(43)),Ex(c,++e,""+oV(Bsn(i)))),n.g=c.a,n.g))}function gzn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;r=uM(pK(oIn(t,(jYn(),AMt)))),l=4,c=3,M=20/(y=uG(oIn(t,OTt),17).a),b=!1,s=0,o=vZn;do{for(a=1!=s,f=0!=s,T=0,m=0,k=(g=n.a).length;my)?(s=2,o=vZn):0==s?(s=1,o=T):(s=0,o=T):(b=T>=o||o-T0?1:KL(isNaN(r),isNaN(0)))>=0^(oan(I9n),(e.Math.abs(u)<=I9n||0==u||isNaN(u)&&isNaN(0)?0:u<0?-1:u>0?1:KL(isNaN(u),isNaN(0)))>=0)?e.Math.max(u,r):(oan(I9n),(e.Math.abs(r)<=I9n||0==r||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:KL(isNaN(r),isNaN(0)))>0?e.Math.sqrt(u*u+r*r):-e.Math.sqrt(u*u+r*r))}function kzn(n,t){var e,i,r,c,a;if(t)if(!n.a&&(n.a=new ck),2!=n.e)if(1!=t.e)0!=(a=n.a.a.c.length)?0!=(c=uG(DQ(n.a,a-1),122)).e&&10!=c.e||0!=t.e&&10!=t.e?zv(n.a,t):(0==t.e||t.Mm().length,0==c.e?(e=new VM,(i=c.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n),c=new F1(10,null,0),GV(n.a,c,a-1)):(c.Mm().length,VA(e=new VM,c.Mm())),0==t.e?(i=t.Km())>=P0n?VA(e,Ogn(i)):TQ(e,i&D1n):VA(e,t.Mm()),uG(c,530).b=e.a):zv(n.a,t);else for(r=0;r1&&(u=s.Hg(u,n.a,o));return 1==u.c.length?uG(zq(u,u.c.length-1),238):2==u.c.length?ezn((u3(0,u.c.length),uG(u.c[0],238)),(u3(1,u.c.length),uG(u.c[1],238)),a,c):null}function Ezn(n,t,e){var i,r,c,a,o,u,s;for(e.Ug("Find roots",1),n.a.c.length=0,r=Fkn(t.b,0);r.b!=r.d.c;)0==(i=uG(I6(r),39)).b.b&&(kfn(i,(OQn(),UPt),(qx(),!0)),kD(n.a,i));switch(n.a.c.length){case 0:kfn(c=new wln(0,t,"DUMMY_ROOT"),(OQn(),UPt),(qx(),!0)),kfn(c,jPt,!0),aq(t.b,c);break;case 1:break;default:for(a=new wln(0,t,H9n),u=new Ww(n.a);u.a=e.Math.abs(r.b)?(r.b=0,a.d+a.a>o.d&&a.do.c&&a.c0){if(t=new AA(n.i,n.g),c=(e=n.i)<100?null:new cj(e),n.Tj())for(i=0;i0){for(o=n.g,s=n.i,V9(n),c=s<100?null:new cj(s),i=0;i>13|(15&n.m)<<9,r=n.m>>4&8191,c=n.m>>17|(255&n.h)<<5,a=(1048320&n.h)>>8,g=i*(o=8191&t.l),p=r*o,m=c*o,v=a*o,0!=(u=t.l>>13|(15&t.m)<<9)&&(g+=e*u,p+=i*u,m+=r*u,v+=c*u),0!=(s=t.m>>4&8191)&&(p+=e*s,m+=i*s,v+=r*s),0!=(h=t.m>>17|(255&t.h)<<5)&&(m+=e*h,v+=i*h),0!=(f=(1048320&t.h)>>8)&&(v+=e*f),b=((d=e*o)>>22)+(g>>9)+((262143&p)<<4)+((31&m)<<17),w=(p>>18)+(m>>5)+((4095&v)<<8),w+=(b+=(l=(d&f0n)+((511&g)<<13))>>22)>>22,p$(l&=f0n,b&=f0n,w&=l0n)}function Azn(n){var t,i,r,c,a,o,u;if(0!=(u=uG(zq(n.j,0),12)).g.c.length&&0!=u.e.c.length)throw hv(new kM("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(0!=u.g.c.length){for(a=M0n,i=new Ww(u.g);i.a4){if(!n.fk(t))return!1;if(n.al()){if(o=(e=(i=uG(t,54)).Eh())==n.e&&(n.ml()?i.yh(i.Fh(),n.il())==n.jl():-1-i.Fh()==n.Lj()),n.nl()&&!o&&!e&&i.Jh())for(r=0;r0&&nAn(n,o,h);for(r=new Ww(h);r.an.d[r.p]&&(e+=J8(n.b,i)*uG(a.b,17).a,A6(n.a,xwn(i)));for(;!LM(n.a);)lin(n.b,uG(xV(n.a),17).a)}return e}function Dzn(n,t){var e,i,r,c,a,o,u,s,h,f;if(h=uG(oIn(n,(GYn(),Fpt)),64),i=uG(zq(n.j,0),12),h==(KQn(),yRt)?NLn(i,KRt):h==KRt&&NLn(i,yRt),uG(oIn(t,(jYn(),DMt)),181).Hc((Qmn(),JRt))){if(u=uM(pK(oIn(n,TTt))),s=uM(pK(oIn(n,jTt))),a=uM(pK(oIn(n,yTt))),(o=uG(oIn(t,nTt),21)).Hc((eNn(),wRt)))for(e=s,f=n.o.a/2-i.n.a,c=new Ww(i.f);c.a0&&(s=n.n.a/c);break;case 2:case 4:(r=n.i.o.b)>0&&(s=n.n.b/r)}kfn(n,(GYn(),bmt),s)}if(u=n.o,a=n.a,i)a.a=i.a,a.b=i.b,n.d=!0;else if(t!=uRt&&t!=sRt&&o!=FRt)switch(o.g){case 1:a.a=u.a/2;break;case 2:a.a=u.a,a.b=u.b/2;break;case 3:a.a=u.a/2,a.b=u.b;break;case 4:a.b=u.b/2}else a.a=u.a/2,a.b=u.b/2}function _zn(n){var t,e,i,r,c,a,o,u,s,h;if(n.Pj())if(h=n.Ej(),u=n.Qj(),h>0)if(t=new Hun(n.pj()),c=(e=h)<100?null:new cj(e),QK(n,e,t.g),r=1==e?n.Ij(4,zrn(t,0),null,0,u):n.Ij(6,t,null,-1,u),n.Mj()){for(i=new DD(t);i.e!=i.i.gc();)c=n.Oj(Zkn(i),c);c?(c.nj(r),c.oj()):n.Jj(r)}else c?(c.nj(r),c.oj()):n.Jj(r);else QK(n,n.Ej(),n.Fj()),n.Jj(n.Ij(6,(hZ(),zot),null,-1,u));else if(n.Mj())if((h=n.Ej())>0){for(o=n.Fj(),s=h,QK(n,h,o),c=s<100?null:new cj(s),i=0;i1&&EX(a)*jX(a)/2>o[0]){for(c=0;co[c];)++c;f=new Jrn(new C2(b,0,c+1)),h=EX(a)/jX(a),u=KJn(f,t,new Dk,e,i,r,h),JF(dL(f.e),u),kG(_Cn(l,f),D0n),_jn(l,new C2(b,c+1,b.c.length)),b.c.length=0,s=0,zX(o,o.length,0)}else null!=(0==l.b.c.length?null:zq(l.b,0))&&Con(l,0),s>0&&(o[s]=o[s-1]),o[s]+=EX(a)*jX(a),++s,mv(b.c,a);return b}function Hzn(n,t){var e,i,r,c;c=new Z_((e=t.b).j),r=0,(i=e.j).c.length=0,mW(uG(ssn(n.b,(KQn(),yRt),(gon(),Sdt)),15),e),r=cMn(c,r,new Br,i),mW(uG(ssn(n.b,yRt,Edt),15),e),r=cMn(c,r,new $r,i),mW(uG(ssn(n.b,yRt,jdt),15),e),mW(uG(ssn(n.b,kRt,Sdt),15),e),mW(uG(ssn(n.b,kRt,Edt),15),e),r=cMn(c,r,new Hr,i),mW(uG(ssn(n.b,kRt,jdt),15),e),mW(uG(ssn(n.b,KRt,Sdt),15),e),r=cMn(c,r,new Ur,i),mW(uG(ssn(n.b,KRt,Edt),15),e),r=cMn(c,r,new Gr,i),mW(uG(ssn(n.b,KRt,jdt),15),e),mW(uG(ssn(n.b,_Rt,Sdt),15),e),r=cMn(c,r,new Rr,i),mW(uG(ssn(n.b,_Rt,Edt),15),e),mW(uG(ssn(n.b,_Rt,jdt),15),e)}function Uzn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;for(o=new Ww(t);o.a.5?p-=2*a*(w-.5):w<.5&&(p+=2*c*(.5-w)),p<(r=o.d.b)&&(p=r),d=o.d.c,p>g.a-d-h&&(p=g.a-d-h),o.n.a=t+p}}function Wzn(n){var t,e,i;if((e=uG(oIn(n,(jYn(),gMt)),171))==(Gpn(),Imt)){for(t=new Fz(ix(qgn(n).a.Kc(),new h));hDn(t);)if(!F9(uG(N9(t),18)))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(e==Amt)for(i=new Fz(ix(Xgn(n).a.Kc(),new h));hDn(i);)if(!F9(uG(N9(i),18)))throw hv(new jM(y6n+ZTn(n)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}function Qzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(n.e&&n.c.c>19!=0&&(t=gfn(t),u=!u),a=kRn(t),c=!1,r=!1,i=!1,n.h==b0n&&0==n.m&&0==n.l){if(r=!0,c=!0,-1!=a)return o=gDn(n,a),u&&Yfn(o),e&&(Qat=p$(0,0,0)),o;n=LL((tin(),Jat)),i=!0,u=!u}else n.h>>19!=0&&(c=!0,n=gfn(n),i=!0,u=!u);return-1!=a?nln(n,a,u,c,e):yEn(n,t)<0?(e&&(Qat=c?gfn(n):p$(n.l,n.m,n.h)),p$(0,0,0)):pUn(i?n:p$(n.l,n.m,n.h),t,u,c,r,e)}function Zzn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w;if(a=n.e,u=t.e,0==a)return t;if(0==u)return n;if((c=n.d)+(o=t.d)==2)return e=E3(n.a[0],L0n),i=E3(t.a[0],L0n),a==u?(w=pz(h=Lgn(e,i)),0==(b=pz(Dz(h,32)))?new Z5(a,w):new VV(a,2,Uhn(cT(YHt,1),W1n,28,15,[w,b]))):(cHn(),BA(a<0?$gn(i,e):$gn(e,i),0)?Rmn(a<0?$gn(i,e):$gn(e,i)):hW(Rmn(Men(a<0?$gn(i,e):$gn(e,i)))));if(a==u)l=a,f=c>=o?Cnn(n.a,c,t.a,o):Cnn(t.a,o,n.a,c);else{if(0==(r=c!=o?c>o?1:-1:Hln(n.a,t.a,c)))return cHn(),_ot;1==r?(l=a,f=t7(n.a,c,t.a,o)):(l=u,f=t7(t.a,o,n.a,c))}return K4(s=new VV(l,f.length,f)),s}function nVn(n,t){var e,i,r,c,a,o,u;if(!(n.g>t.f||t.g>n.f)){for(e=0,i=0,a=n.w.a.ec().Kc();a.Ob();)r=uG(a.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&++e;for(o=n.r.a.ec().Kc();o.Ob();)r=uG(o.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,t.g,t.f)&&--e;for(u=t.w.a.ec().Kc();u.Ob();)r=uG(u.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&++i;for(c=t.r.a.ec().Kc();c.Ob();)r=uG(c.Pb(),12),Wbn(Gfn(Uhn(cT(PNt,1),zZn,8,0,[r.i.n,r.n,r.a])).b,n.g,n.f)&&--i;e=0)return e;switch(sJ(Nen(n,e))){case 2:if(m_("",tdn(n,e.qk()).xe())){if(u=hxn(n,t,o=HJ(Nen(n,e)),BJ(Nen(n,e))))return u;for(a=0,s=(r=AHn(n,t)).gc();a1)throw hv(new vM(dct));for(h=VKn(n.e.Dh(),t),i=uG(n.g,124),a=0;a1,h=new w7(b.b);l$(h.a)||l$(h.b);)l=(s=uG(l$(h.a)?N3(h.a):N3(h.b),18)).c==b?s.d:s.c,e.Math.abs(Gfn(Uhn(cT(PNt,1),zZn,8,0,[l.i.n,l.n,l.a])).b-o.b)>1&&sFn(n,s,o,a,b)}}function oVn(n){var t,i,r,c,a,o;if(c=new N4(n.e,0),r=new N4(n.a,0),n.d)for(i=0;i$9n;){for(a=t,o=0;e.Math.abs(t-a)<$9n;)++o,t=uM((MK(c.b0),c.a.Xb(c.c=--c.b),zGn(n,n.b-o,a,r,c),MK(c.b0),r.a.Xb(r.c=--r.b)}if(!n.d)for(i=0;i0?(n.f[s.p]=l/(s.e.c.length+s.g.c.length),n.c=e.Math.min(n.c,n.f[s.p]),n.b=e.Math.max(n.b,n.f[s.p])):o&&(n.f[s.p]=l)}}function hVn(n){n.b=null,n.bb=null,n.fb=null,n.qb=null,n.a=null,n.c=null,n.d=null,n.e=null,n.f=null,n.n=null,n.M=null,n.L=null,n.Q=null,n.R=null,n.K=null,n.db=null,n.eb=null,n.g=null,n.i=null,n.j=null,n.k=null,n.gb=null,n.o=null,n.p=null,n.q=null,n.r=null,n.$=null,n.ib=null,n.S=null,n.T=null,n.t=null,n.s=null,n.u=null,n.v=null,n.w=null,n.B=null,n.A=null,n.C=null,n.D=null,n.F=null,n.G=null,n.H=null,n.I=null,n.J=null,n.P=null,n.Z=null,n.U=null,n.V=null,n.W=null,n.X=null,n.Y=null,n._=null,n.ab=null,n.cb=null,n.hb=null,n.nb=null,n.lb=null,n.mb=null,n.ob=null,n.pb=null,n.jb=null,n.kb=null,n.N=!1,n.O=!1}function fVn(n,t,e){var i,r;for(e.Ug("Graph transformation ("+n.a+")",1),r=T3(t.a),i=new Ww(t.b);i.a=o.b.c)&&(o.b=t),(!o.c||t.c<=o.c.c)&&(o.d=o.c,o.c=t),(!o.e||t.d>=o.e.d)&&(o.e=t),(!o.f||t.d<=o.f.d)&&(o.f=t);return i=new cyn((Xhn(),Flt)),O4(n,Vlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[i]))),a=new cyn(Hlt),O4(n,zlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[a]))),r=new cyn(_lt),O4(n,Xlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[r]))),c=new cyn(Blt),O4(n,qlt,new IM(Uhn(cT(Klt,1),EZn,382,0,[c]))),jRn(i.c,Flt),jRn(r.c,_lt),jRn(c.c,Blt),jRn(a.c,Hlt),o.a.c.length=0,Ohn(o.a,i.c),Ohn(o.a,Spn(r.c)),Ohn(o.a,c.c),Ohn(o.a,Spn(a.c)),o}function wVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d;for(t.Ug(snt,1),w=uM(pK(zDn(n,(lBn(),POt)))),o=uM(pK(zDn(n,(S_n(),bAt)))),u=uG(zDn(n,hAt),107),Non((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a)),f=uzn((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a),w,o),!n.a&&(n.a=new fV(bFt,n,10,11)),h=new Ww(f);h.a0&&(n.a=o+(l-1)*r,t.c.b+=n.a,t.f.b+=n.a),0!=b.a.gc()&&(l=YVn(new NW(1,r),t,b,w,t.f.b+o-t.c.b))>0&&(t.f.b+=o+(l-1)*r)}function gVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(f=uM(pK(oIn(n,(jYn(),mTt)))),r=uM(pK(oIn(n,RTt))),kfn(b=new Qu,mTt,f+r),m=(h=t).d,g=h.c.i,v=h.d.i,p=GL(g.c),k=GL(v.c),c=new Zm,l=p;l<=k;l++)Hb(u=new gMn(n),(zIn(),wbt)),kfn(u,(GYn(),rmt),h),kfn(u,JMt,($Pn(),cRt)),kfn(u,kTt,b),w=uG(zq(n.b,l),30),l==p?$jn(u,w.a.c.length-i,w):a2(u,w),(y=uM(pK(oIn(h,tMt))))<0&&kfn(h,tMt,y=0),u.o.b=y,d=e.Math.floor(y/2),NLn(o=new lOn,(KQn(),_Rt)),o2(o,u),o.n.b=d,NLn(s=new lOn,kRt),o2(s,u),s.n.b=d,u2(h,o),zsn(a=new UZ,h),kfn(a,bMt,null),c2(a,s),u2(a,m),IEn(u,h,a),mv(c.c,a),h=a;return c}function pVn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(o=uG(yOn(n,(KQn(),_Rt)).Kc().Pb(),12).e,f=uG(yOn(n,kRt).Kc().Pb(),12).g,a=o.c.length,g=n3(uG(zq(n.j,0),12));a-- >0;){for(u3(0,o.c.length),b=uG(o.c[0],18),u3(0,f.c.length),r=Ten((i=uG(f.c[0],18)).d.e,i,0),w6(b,i.d,r),c2(i,null),u2(i,null),l=b.a,t&&aq(l,new eN(g)),e=Fkn(i.a,0);e.b!=e.d.c;)aq(l,new eN(uG(I6(e),8)));for(d=b.b,h=new Ww(i.b);h.aa)&&FV(n.b,uG(g.b,18));++o}c=a}}}function vVn(n,t){var e;if(null==t||m_(t,IZn))return null;if(0==t.length&&n.k!=(lAn(),pNt))return null;switch(n.k.g){case 1:return Bvn(t,Fnt)?(qx(),eot):Bvn(t,_nt)?(qx(),tot):null;case 2:try{return xwn(vUn(t,j1n,vZn))}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 4:try{return YIn(t)}catch(i){if(F$(i=Ehn(i),130))return null;throw hv(i)}case 3:return t;case 5:return wbn(n),NNn(n,t);case 6:return wbn(n),Lxn(n,n.a,t);case 7:try{return(e=Q$n(n)).cg(t),e}catch(i){if(F$(i=Ehn(i),33))return null;throw hv(i)}default:throw hv(new kM("Invalid type set for this layout option."))}}function kVn(n){var t;switch(n.d){case 1:if(n.Sj())return-2!=n.o;break;case 2:if(n.Sj())return-2==n.o;break;case 3:case 5:case 4:case 6:case 7:return n.o>-2;default:return!1}switch(t=n.Rj(),n.p){case 0:return null!=t&&oM(gK(t))!=HA(n.k,0);case 1:return null!=t&&uG(t,222).a!=pz(n.k)<<24>>24;case 2:return null!=t&&uG(t,180).a!=(pz(n.k)&D1n);case 6:return null!=t&&HA(uG(t,168).a,n.k);case 5:return null!=t&&uG(t,17).a!=pz(n.k);case 7:return null!=t&&uG(t,191).a!=pz(n.k)<<16>>16;case 3:return null!=t&&uM(pK(t))!=n.j;case 4:return null!=t&&uG(t,161).a!=n.j;default:return null==t?null!=n.n:!udn(t,n.n)}}function yVn(n,t,e){var i,r,c,a;return n.ol()&&n.nl()&&xA(a=CV(n,uG(e,58)))!==xA(e)?(n.xj(t),n.Dj(t,Atn(n,t,a)),n.al()&&(r=uG(e,54),c=n.ml()?n.kl()?r.Th(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),null):r.Th(n.b,emn(r.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,null):r.Th(n.b,-1-n.Lj(),null,null),!uG(a,54).Ph()&&(i=uG(a,54),c=n.ml()?n.kl()?i.Rh(n.b,lMn(uG(ern(e1(n.b),n.Lj()),19)).n,uG(ern(e1(n.b),n.Lj()).Hk(),29).kk(),c):i.Rh(n.b,emn(i.Dh(),lMn(uG(ern(e1(n.b),n.Lj()),19))),null,c):i.Rh(n.b,-1-n.Lj(),null,c)),c&&c.oj()),uN(n.b)&&n.Jj(n.Ij(9,e,a,t,!1)),a):e}function MVn(n){var t,e,i,r,c,a,o,u,s,h;for(i=new Zm,a=new Ww(n.e.a);a.a0&&(o=e.Math.max(o,run(n.C.b+r.d.b,c))),f=r,l=c,b=a;n.C&&n.C.c>0&&(w=b+n.C.c,h&&(w+=f.d.c),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(l-1)<=Z2n||1==l||isNaN(l)&&isNaN(1)?0:w/(1-l)))),i.n.b=0,i.a.a=o}function jVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w;if(i=uG(AJ(n.b,t),127),(s=uG(uG(Y9(n.r,t),21),87)).dc())return i.n.d=0,void(i.n.a=0);for(h=n.u.Hc((eNn(),wRt)),o=0,n.A.Hc((Qmn(),JRt))&&kBn(n,t),u=s.Kc(),f=null,b=0,l=0;u.Ob();)a=uM(pK((r=uG(u.Pb(),117)).b.of((Gx(),bht)))),c=r.b.Mf().b,f?(w=l+f.d.a+n.w+r.d.d,o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-a)<=Z2n||b==a||isNaN(b)&&isNaN(a)?0:w/(a-b)))):n.C&&n.C.d>0&&(o=e.Math.max(o,run(n.C.d+r.d.d,a))),f=r,b=a,l=c;n.C&&n.C.a>0&&(w=l+n.C.a,h&&(w+=f.d.a),o=e.Math.max(o,(YN(),oan(Z2n),e.Math.abs(b-1)<=Z2n||1==b||isNaN(b)&&isNaN(1)?0:w/(1-b)))),i.n.d=0,i.a.b=o}function EVn(n,t,e,i,r,c,a,o){var u,s,h,f,l,b,w,d;if(b=!1,u=cKn(e.q,t.f+t.b-e.q.f),l=i.f>t.b&&o,h=uXn(i,d=r-(e.q.e+u-a),!1).a,l&&h>i.f)return!1;if(l){for(f=0,w=new Ww(t.d);w.a=(u3(c,n.c.length),uG(n.c[c],186)).e,!(!l&&h>t.b&&!s)&&((s||l||h<=t.b)&&(s&&h>t.b?(e.d=h,dtn(e,EOn(e,h))):(USn(e.q,u),e.c=!0),dtn(i,r-(e.s+e.r)),oMn(i,e.q.e+e.q.d,t.f),fan(t,i),n.c.length>c&&(uEn((u3(c,n.c.length),uG(n.c[c],186)),i),0==(u3(c,n.c.length),uG(n.c[c],186)).a.c.length&&i7(n,c)),b=!0),b))}function SVn(n,t,e){var i,r,c,a,o,u;for(this.g=n,o=t.d.length,u=e.d.length,this.d=Inn(pbt,e6n,10,o+u,0,1),a=0;a0?Rrn(this,this.f/this.a):null!=oD(t.g,t.d[0]).a&&null!=oD(e.g,e.d[0]).a?Rrn(this,(uM(oD(t.g,t.d[0]).a)+uM(oD(e.g,e.d[0]).a))/2):null!=oD(t.g,t.d[0]).a?Rrn(this,oD(t.g,t.d[0]).a):null!=oD(e.g,e.d[0]).a&&Rrn(this,oD(e.g,e.d[0]).a)}function PVn(n,t){var e,i,r,c,a,o,u,s,h;for(n.a=new wQ(efn(axt)),i=new Ww(t.a);i.a=1&&(g-a>0&&f>=0?(u.n.a+=d,u.n.b+=c*a):g-a<0&&h>=0&&(u.n.a+=d*g,u.n.b+=c));n.o.a=t.a,n.o.b=t.b,kfn(n,(jYn(),DMt),(Qmn(),new nB(i=uG(Mj(sKt),9),uG(MF(i,i.length),9),0)))}function LVn(n,t,e,i,r,c){if(null!=t&&mpn(t,YFt,ZFt))throw hv(new vM("invalid scheme: "+t));if(!(n||null!=e&&-1==xL(e,$Cn(35))&&e.length>0&&(s3(0,e.length),47!=e.charCodeAt(0))))throw hv(new vM("invalid opaquePart: "+e));if(n&&(null==t||!ZE(UFt,t.toLowerCase()))&&null!=e&&mpn(e,n_t,t_t))throw hv(new vM(Vit+e));if(n&&null!=t&&ZE(UFt,t.toLowerCase())&&!bPn(e))throw hv(new vM(Vit+e));if(!Ppn(i))throw hv(new vM("invalid device: "+i));if(!Jbn(r))throw hv(new vM(null==r?"invalid segments: null":"invalid segment: "+Lbn(r)));if(null!=c&&-1!=xL(c,$Cn(35)))throw hv(new vM("invalid query: "+c))}function NVn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(i.Ug("Network simplex layering",1),n.b=t,p=4*uG(oIn(t,(jYn(),OTt)),17).a,(g=n.b.a).c.length<1)i.Vg();else{for(d=null,c=Fkn(a=RHn(n,g),0);c.b!=c.d.c;){for(r=uG(I6(c),15),u=p*t0(e.Math.sqrt(r.gc())),YHn(kT(MT(yT(_B(o=dUn(r)),u),d),!0),i.eh(1)),l=n.b.b,w=new Ww(o.a);w.a1)for(d=Inn(YHt,W1n,28,n.b.b.c.length,15,1),f=0,h=new Ww(n.b.b);h.a0?(Ikn(n,e,0),e.a+=String.fromCharCode(i),Ikn(n,e,r=qvn(t,c)),c+=r-1):39==i?c+10&&w.a<=0){u.c.length=0,mv(u.c,w);break}(b=w.i-w.d)>=o&&(b>o&&(u.c.length=0,o=b),mv(u.c,w))}0!=u.c.length&&(a=uG(zq(u,iMn(r,u.c.length)),118),v.a.Bc(a),a.g=h++,UGn(a,t,e,i),u.c.length=0)}for(g=n.c.length+1,l=new Ww(n);l.aT0n||t.o==wSt&&s=o&&r<=u)o<=r&&c<=u?(e[h++]=r,e[h++]=c,i+=2):o<=r?(e[h++]=r,e[h++]=u,n.b[i]=u+1,a+=2):c<=u?(e[h++]=o,e[h++]=c,i+=2):(e[h++]=o,e[h++]=u,n.b[i]=u+1);else{if(!(uT1n)&&u<10);ET(n.c,new yt),_Vn(n),YV(n.c),lVn(n.f)}function XVn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(i=uG(oIn(n,(jYn(),JMt)),101),o=n.f,a=n.d,u=o.a+a.b+a.c,s=0-a.d-n.c.b,f=o.b+a.d+a.a-n.c.b,h=new Zm,l=new Zm,c=new Ww(t);c.a=2){for(a=uG(I6(u=Fkn(e,0)),8),o=uG(I6(u),8);o.a0&&hfn(u,!0,(xdn(),YDt)),a.k==(zIn(),lbt)&&XQ(u),vJ(n.f,a,t)):((s=(i=uG(pZ(Ggn(a)),18)).c.i)==a&&(s=i.d.i),f=new WO(s,YF(D$(a.n),s.n)),vJ(n.b,a,f))}function WVn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(i=uG(oIn(n,(OQn(),RPt)),27),u=vZn,s=vZn,a=j1n,o=j1n,m=Fkn(n.b,0);m.b!=m.d.c;)l=(g=uG(I6(m),39)).e,b=g.f,u=e.Math.min(u,l.a-b.a/2),s=e.Math.min(s,l.b-b.b/2),a=e.Math.max(a,l.a+b.a/2),o=e.Math.max(o,l.b+b.b/2);for(f=uG(zDn(i,(QGn(),pCt)),107),p=Fkn(n.b,0);p.b!=p.d.c;)F$(h=oIn(g=uG(I6(p),39),RPt),207)&&(kN(r=uG(h,27),g.e.a,g.e.b),aKn(r,g));for(d=Fkn(n.a,0);d.b!=d.d.c;)w=uG(I6(d),65),(t=uG(oIn(w,RPt),74))&&sqn(w.a,JFn(t,!0,!0));v=a-u+(f.b+f.c),c=o-s+(f.d+f.a),oM(gK(zDn(i,(XYn(),H$t))))||ZQn(i,v,c,!1,!1),Myn(i,h$t,v-(f.b+f.c)),Myn(i,s$t,c-(f.d+f.a))}function QVn(n,t){var e,i,r,c,a,o,u,s,f;for(o=!0,r=0,u=n.g[t.p],s=t.o.b+n.o,e=n.d[t.p][2],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a-1+e)),Y8(n.c,u,uM(pK(zq(n.c,u)))-s+e*n.f),++u>=n.j?(++n.j,kD(n.b,xwn(1)),kD(n.c,s)):(i=n.d[t.p][1],Y8(n.b,u,xwn(uG(zq(n.b,u),17).a+1-i)),Y8(n.c,u,uM(pK(zq(n.c,u)))+s-i*n.f)),(n.r==(THn(),Ijt)&&(uG(zq(n.b,u),17).a>n.k||uG(zq(n.b,u-1),17).a>n.k)||n.r==Ljt&&(uM(pK(zq(n.c,u)))>n.n||uM(pK(zq(n.c,u-1)))>n.n))&&(o=!1),c=new Fz(ix(qgn(t).a.Kc(),new h));hDn(c);)a=uG(N9(c),18).c.i,n.g[a.p]==u&&(r+=uG((f=QVn(n,a)).a,17).a,o=o&&oM(gK(f.b)));return n.g[t.p]=u,new WO(xwn(r+=n.d[t.p][0]),(qx(),!!o))}function JVn(n,t){var e,i;uM(pK(oIn(t,(jYn(),dTt))))<2&&kfn(t,dTt,2),uG(oIn(t,Byt),88)==(xdn(),ZDt)&&kfn(t,Byt,pgn(t)),0==(e=uG(oIn(t,sTt),17)).a?kfn(t,(GYn(),dmt),new Upn):kfn(t,(GYn(),dmt),new v8(e.a)),null==gK(oIn(t,OMt))&&kfn(t,OMt,(qx(),xA(oIn(t,Vyt))===xA((_gn(),uxt)))),kS(new fX(null,new h3(t.a,16)),new Hd(n)),kS(sin(new fX(null,new h3(t.b,16)),new dt),new Ud(n)),i=new CVn(t),kfn(t,(GYn(),kmt),i),_J(n.a),JV(n.a,(uIn(),Tlt),uG(oIn(t,Fyt),188)),JV(n.a,jlt,uG(oIn(t,MMt),188)),JV(n.a,Elt,uG(oIn(t,Kyt),188)),JV(n.a,Slt,uG(oIn(t,$Mt),188)),JV(n.a,Plt,Rsn(uG(oIn(t,Vyt),223))),ZL(n.a,iYn(t)),kfn(t,wmt,Qzn(n.a,t))}function YVn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m;for(l=new Ym,o=new Zm,HAn(n,i,n.d.Ag(),o,l),HAn(n,r,n.d.Bg(),o,l),n.b=.2*(g=DDn(sin(new fX(null,new h3(o,16)),new pa)),p=DDn(sin(new fX(null,new h3(o,16)),new ma)),e.Math.min(g,p)),a=0,u=0;u=2&&(m=sRn(o,!0,b),!n.e&&(n.e=new pp(n)),xvn(n.e,m,o,n.b)),BPn(o,b),oWn(o),w=-1,f=new Ww(o);f.ao)}function tWn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(h=M0n,f=M0n,u=T0n,s=T0n,b=new Ww(t.i);b.a-1){for(r=Fkn(o,0);r.b!=r.d.c;)(i=uG(I6(r),131)).v=a;for(;0!=o.b;)for(t=new Ww((i=uG(Kjn(o,0),131)).i);t.a-1){for(c=new Ww(o);c.a0||(Yb(u,e.Math.min(u.o,r.o-1)),Jb(u,u.i-1),0==u.i&&mv(o.c,u))}}function uWn(n,t,i,r,c){var a,o,u,s;return s=M0n,o=!1,a=!!(u=rXn(n,YF(new MO(t.a,t.b),n),JF(new MO(i.a,i.b),c),YF(new MO(r.a,r.b),i)))&&!(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt||e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt),(u=rXn(n,YF(new MO(t.a,t.b),n),i,c))&&((e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a?s=e.Math.min(s,NQ(YF(u,i))):o=!0),(u=rXn(n,YF(new MO(t.a,t.b),n),r,c))&&(o||(e.Math.abs(u.a-n.a)<=Hnt&&e.Math.abs(u.b-n.b)<=Hnt)==(e.Math.abs(u.a-t.a)<=Hnt&&e.Math.abs(u.b-t.b)<=Hnt)||a)&&(s=e.Math.min(s,NQ(YF(u,r)))),s}function sWn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,$4n),D4n),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new gt),c4n))),U4(n,$4n,f4n,Jkn(olt)),U4(n,$4n,b4n,(qx(),!0)),U4(n,$4n,p4n,Jkn(hlt)),U4(n,$4n,x4n,Jkn(flt)),U4(n,$4n,g4n,Jkn(llt)),U4(n,$4n,m4n,Jkn(slt)),U4(n,$4n,w4n,Jkn(blt)),U4(n,$4n,v4n,Jkn(wlt)),U4(n,$4n,I4n,Jkn(alt)),U4(n,$4n,A4n,Jkn(rlt)),U4(n,$4n,L4n,Jkn(clt)),U4(n,$4n,N4n,Jkn(ult)),U4(n,$4n,O4n,Jkn(ilt))}function hWn(n){var t,e,i,r,c,a,o,u;for(t=null,i=new Ww(n);i.a0&&0==e.c&&(!t&&(t=new Zm),mv(t.c,e));if(t)for(;0!=t.c.length;){if((e=uG(i7(t,0),239)).b&&e.b.c.length>0)for(!e.b&&(e.b=new Zm),c=new Ww(e.b);c.aTen(n,e,0))return new WO(r,e)}else if(uM(oD(r.g,r.d[0]).a)>uM(oD(e.g,e.d[0]).a))return new WO(r,e);for(o=(!e.e&&(e.e=new Zm),e.e).Kc();o.Ob();)!(a=uG(o.Pb(),239)).b&&(a.b=new Zm),o3(0,(u=a.b).c.length),pC(u.c,0,e),a.c==u.c.length&&mv(t.c,a)}return null}function fWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(t.Ug("Interactive crossing minimization",1),a=0,c=new Ww(n.b);c.a0&&(e+=u.n.a+u.o.a/2,++f),b=new Ww(u.j);b.a0&&(e/=f),g=Inn(eUt,I0n,28,i.a.c.length,15,1),o=0,s=new Ww(i.a);s.a=o&&r<=u)o<=r&&c<=u?i+=2:o<=r?(n.b[i]=u+1,a+=2):c<=u?(e[h++]=r,e[h++]=o-1,i+=2):(e[h++]=r,e[h++]=o-1,n.b[i]=u+1,a+=2);else{if(!(u2?(Ohn(s=new Zm,new C2(w,1,w.b)),zsn(d=new pDn(vYn(s,g+n.a)),t),mv(i.c,d)):d=uG(cQ(n.b,r?bIn(t):gIn(t)),272),o=bIn(t),r&&(o=gIn(t)),a=GOn(b,o),u=g+n.a,a.a?(u+=e.Math.abs(b.b-h.b),l=new MO(h.a,(h.b+b.b)/2)):(u+=e.Math.abs(b.a-h.a),l=new MO((h.a+b.a)/2,h.b)),vJ(r?n.d:n.c,t,new bTn(d,a,l,u)),vJ(n.b,t,d),!t.n&&(t.n=new fV(lFt,t,1,7)),f=new DD(t.n);f.e!=f.i.gc();)c=nHn(n,uG(Zkn(f),135),!0,0,0),mv(i.c,c)}function wWn(n){var t,e,i,r,c,a,o;if(!n.A.dc()){if(n.A.Hc((Qmn(),QRt))&&(uG(AJ(n.b,(KQn(),yRt)),127).k=!0,uG(AJ(n.b,KRt),127).k=!0,t=n.q!=($Pn(),aRt)&&n.q!=cRt,Db(uG(AJ(n.b,kRt),127),t),Db(uG(AJ(n.b,_Rt),127),t),Db(n.g,t),n.A.Hc(JRt)&&(uG(AJ(n.b,yRt),127).j=!0,uG(AJ(n.b,KRt),127).j=!0,uG(AJ(n.b,kRt),127).k=!0,uG(AJ(n.b,_Rt),127).k=!0,n.g.k=!0)),n.A.Hc(WRt))for(n.a.j=!0,n.a.k=!0,n.g.j=!0,n.g.k=!0,o=n.B.Hc((oUn(),cKt)),c=0,a=(r=Nkn()).length;c0),c=uG(s.a.Xb(s.c=--s.b),18);c!=i&&s.b>0;)n.a[c.p]=!0,n.a[i.p]=!0,MK(s.b>0),c=uG(s.a.Xb(s.c=--s.b),18);s.b>0&&LQ(s)}}function pWn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;if(!n.b)return!1;for(a=null,l=null,r=1,(u=new _nn(null,null)).a[1]=n.b,f=u;f.a[r];)s=r,o=l,l=f,f=f.a[r],r=(i=n.a.Ne(t,f.d))<0?0:1,0==i&&(!e.c||OJ(f.e,e.d))&&(a=f),f&&f.b||NM(f.a[r])||(NM(f.a[1-r])?l=l.a[s]=Ton(f,r):NM(f.a[1-r])||(b=l.a[1-s])&&(NM(b.a[1-s])||NM(b.a[s])?(c=o.a[1]==l?1:0,NM(b.a[s])?o.a[c]=P4(l,s):NM(b.a[1-s])&&(o.a[c]=Ton(l,s)),f.b=o.a[c].b=!0,o.a[c].a[0].b=!1,o.a[c].a[1].b=!1):(l.b=!1,b.b=!0,f.b=!0)));return a&&(e.b=!0,e.d=a.e,f!=a&&(YCn(n,u,a,h=new _nn(f.d,f.e)),l==a&&(l=h)),l.a[l.a[1]==f?1:0]=f.a[f.a[0]?0:1],--n.c),n.b=u.a[1],n.b&&(n.b.b=!1),e.b}function mWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;for(c=new Ww(n.a.a.b);c.a0?r-=864e5:r+=864e5,u=new DK(Lgn(Bsn(t.q.getTime()),r))),h=new QM,s=n.a.length,c=0;c=97&&i<=122||i>=65&&i<=90){for(a=c+1;a=s)throw hv(new vM("Missing trailing '"));a+1=14&&o<=16?F$(i,183)?o7(e,PLn(uG(i,183))):F$(i,195)?o7(e,xPn(uG(i,195))):F$(i,201)?o7(e,aOn(uG(i,201))):F$(i,2111)?o7(e,RPn(uG(i,2111))):F$(i,53)?o7(e,SLn(uG(i,53))):F$(i,376)?o7(e,aNn(uG(i,376))):F$(i,846)?o7(e,ELn(uG(i,846))):F$(i,109)&&o7(e,jLn(uG(i,109))):t.a._b(i)?(e.a?JA(e.a,e.b):e.a=new lx(e.d),WA(e.a,"[...]")):o7(e,MWn(Kcn(i),new oX(t))):o7(e,null==i?IZn:cpn(i));return e.a?0==e.e.length?e.a.a:e.a.a+""+e.e:e.c}function TWn(n,t){var e,i,r,c;c=n.F,null==t?(n.F=null,sbn(n,null)):(n.F=(tJ(t),t),-1!=(i=xL(t,$Cn(60)))?(Knn(0,i,t.length),r=t.substr(0,i),-1==xL(t,$Cn(46))&&!m_(r,dZn)&&!m_(r,lrt)&&!m_(r,brt)&&!m_(r,wrt)&&!m_(r,drt)&&!m_(r,grt)&&!m_(r,prt)&&!m_(r,mrt)&&(r=vrt),-1!=(e=ax(t,$Cn(62)))&&(r+=""+(s3(e+1,t.length+1),t.substr(e+1))),sbn(n,r)):(r=t,-1==xL(t,$Cn(46))&&(-1!=(i=xL(t,$Cn(91)))&&(Knn(0,i,t.length),r=t.substr(0,i)),m_(r,dZn)||m_(r,lrt)||m_(r,brt)||m_(r,wrt)||m_(r,drt)||m_(r,grt)||m_(r,prt)||m_(r,mrt)?r=t:(r=vrt,-1!=i&&(r+=""+(s3(i,t.length+1),t.substr(i))))),sbn(n,r),r==t&&(n.F=n.D))),0!=(4&n.Db)&&0==(1&n.Db)&&Msn(n,new lV(n,1,5,c,t))}function jWn(n,t){var e,i,r,c,a,o,u,s;if(s3(o=t.length-1,t.length),93==(a=t.charCodeAt(o))){if((c=xL(t,$Cn(91)))>=0)return r=fpn(n,(Knn(1,c,t.length),t.substr(1,c-1))),Knn(c+1,o,t.length),GJn(n,t.substr(c+1,o-(c+1)),r)}else{if(e=-1,null==oot&&(oot=new RegExp("\\d")),oot.test(String.fromCharCode(a))&&(e=T_(t,$Cn(46),o-1))>=0){i=uG(U9(n,jrn(n,(Knn(1,e,t.length),t.substr(1,e-1))),!1),61),u=0;try{u=vUn((s3(e+1,t.length+1),t.substr(e+1)),j1n,vZn)}catch(h){throw F$(h=Ehn(h),130)?hv(new Pen(h)):hv(h)}if(u>16==-10?e=uG(n.Cb,291).Yk(t,e):n.Db>>16==-15&&(!t&&(YYn(),t=N_t),!o&&(YYn(),o=N_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,13,o,t,Hyn(Aen(uG(n.Cb,62)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,90))n.Db>>16==-23&&(F$(t,90)||(YYn(),t=x_t),F$(o,90)||(YYn(),o=x_t),n.Cb.Yh()&&(a=new Ken(n.Cb,1,10,o,t,Hyn(z5(uG(n.Cb,29)),n),!1),e?e.nj(a):e=a));else if(F$(n.Cb,456))for(!(c=uG(n.Cb,850)).b&&(c.b=new Um(new ty)),r=new Gm(new bsn(new Nw(c.b.a).a));r.a.b;)e=PWn(i=uG(von(r.a).ld(),89),bRn(i,c),e);return e}function CWn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(a=oM(gK(zDn(n,(jYn(),sMt)))),l=uG(zDn(n,nTt),21),u=!1,s=!1,f=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));!(f.e==f.i.gc()||u&&s);){for(c=uG(Zkn(f),123),o=0,r=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!c.d&&(c.d=new f_(aFt,c,8,5)),c.d),(!c.e&&(c.e=new f_(aFt,c,7,4)),c.e)])));hDn(r)&&(i=uG(N9(r),74),h=a&&BNn(i)&&oM(gK(zDn(i,hMt))),e=Lzn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),c)?n==R0(lCn(uG(zrn((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c),0),84))):n==R0(lCn(uG(zrn((!i.b&&(i.b=new f_(cFt,i,4,7)),i.b),0),84))),!((h||e)&&++o>1)););(o>0||l.Hc((eNn(),wRt))&&(!c.n&&(c.n=new fV(lFt,c,1,7)),c.n).i>0)&&(u=!0),o>1&&(s=!0)}u&&t.Fc((r_n(),tpt)),s&&t.Fc((r_n(),ept))}function IWn(n){var t,i,r,c,a,o,u,s,h,f,l,b;if((b=uG(zDn(n,(XYn(),_$t)),21)).dc())return null;if(u=0,o=0,b.Hc((Qmn(),QRt))){for(f=uG(zDn(n,sDt),101),r=2,i=2,c=2,a=2,t=R0(n)?uG(zDn(R0(n),d$t),88):uG(zDn(n,d$t),88),h=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));h.e!=h.i.gc();)if(s=uG(Zkn(h),123),(l=uG(zDn(s,gDt),64))==(KQn(),FRt)&&(l=RGn(s,t),Myn(s,gDt,l)),f==($Pn(),cRt))switch(l.g){case 1:r=e.Math.max(r,s.i+s.g);break;case 2:i=e.Math.max(i,s.j+s.f);break;case 3:c=e.Math.max(c,s.i+s.g);break;case 4:a=e.Math.max(a,s.j+s.f)}else switch(l.g){case 1:r+=s.g+2;break;case 2:i+=s.f+2;break;case 3:c+=s.g+2;break;case 4:a+=s.f+2}u=e.Math.max(r,c),o=e.Math.max(i,a)}return ZQn(n,u,o,!0,!0)}function OWn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(v=uG(l8(krn(JJ(new fX(null,new h3(t.d,16)),new Rg(i)),new Kg(i)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),l=vZn,f=j1n,s=new Ww(t.b.j);s.a0)?s&&(h=d.p,a?++h:--h,f=!(VRn(i=afn(uG(zq(d.c.a,h),10)),k,e[0])||rV(i,k,e[0]))):f=!0),l=!1,(v=t.D.i)&&v.c&&o.e&&(a&&v.p>0||!a&&v.p=0){for(u=null,o=new N4(h.a,s+1);o.ba?1:KL(isNaN(0),isNaN(a)))<0&&(oan(I9n),(e.Math.abs(a-1)<=I9n||1==a||isNaN(a)&&isNaN(1)?0:a<1?-1:a>1?1:KL(isNaN(a),isNaN(1)))<0)&&(oan(I9n),(e.Math.abs(0-o)<=I9n||0==o||isNaN(0)&&isNaN(o)?0:0o?1:KL(isNaN(0),isNaN(o)))<0)&&(oan(I9n),(e.Math.abs(o-1)<=I9n||1==o||isNaN(o)&&isNaN(1)?0:o<1?-1:o>1?1:KL(isNaN(o),isNaN(1)))<0))}function KWn(n){var t,e,i,r;if(-1!=(t=xL(e=null!=n.D?n.D:n.B,$Cn(91)))){Knn(0,t,e.length),i=e.substr(0,t),r=new zM;do{r.a+="["}while(-1!=(t=aR(e,91,++t)));m_(i,dZn)?r.a+="Z":m_(i,lrt)?r.a+="B":m_(i,brt)?r.a+="C":m_(i,wrt)?r.a+="D":m_(i,drt)?r.a+="F":m_(i,grt)?r.a+="I":m_(i,prt)?r.a+="J":m_(i,mrt)?r.a+="S":(r.a+="L",r.a+=""+i,r.a+=";");try{return null}catch(c){if(!F$(c=Ehn(c),63))throw hv(c)}}else if(-1==xL(e,$Cn(46))){if(m_(e,dZn))return ZHt;if(m_(e,lrt))return tUt;if(m_(e,brt))return JHt;if(m_(e,wrt))return eUt;if(m_(e,drt))return iUt;if(m_(e,grt))return YHt;if(m_(e,prt))return nUt;if(m_(e,mrt))return rUt}return null}function FWn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(n.e=t,o=qNn(t),v=new Zm,i=new Ww(o);i.a=0&&d=s.c.c.length?B5((zIn(),dbt),wbt):B5((zIn(),wbt),wbt),h*=2,c=i.a.g,i.a.g=e.Math.max(c,c+(h-c)),a=i.b.g,i.b.g=e.Math.max(a,a+(h-a)),r=t}else pNn(o),WXn((u3(0,o.c.length),uG(o.c[0],18)).d.i)||kD(n.o,o)}function UWn(n){var t,i,r,c;for(kS(JJ(new fX(null,new h3(n.a.b,16)),new kr),new yr),QSn(n),kS(JJ(new fX(null,new h3(n.a.b,16)),new Mr),new Tr),n.c==(_gn(),hxt)&&(kS(JJ(sin(new fX(null,new h3(new Lw(n.f),1)),new jr),new Er),new Og(n)),kS(JJ(YJ(sin(sin(new fX(null,new h3(n.d.b,16)),new Sr),new Pr),new Cr),new Ir),new Lg(n))),c=new MO(M0n,M0n),t=new MO(T0n,T0n),r=new Ww(n.a.b);r.a0&&(t.a+=TZn),XWn(uG(Zkn(a),167),t);for(t.a+=Y4n,o=new Zx((!i.c&&(i.c=new f_(cFt,i,5,8)),i.c));o.e!=o.i.gc();)o.e>0&&(t.a+=TZn),XWn(uG(Zkn(o),167),t);t.a+=")"}}}function zWn(n,t,i){var r,c,a,o,u,s,f,l;for(s=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));s.e!=s.i.gc();)for(c=new Fz(ix(eRn(u=uG(Zkn(s),27)).a.Kc(),new h));hDn(c);){if(!(r=uG(N9(c),74)).b&&(r.b=new f_(cFt,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new f_(cFt,r,5,8)),r.c.i<=1)))throw hv(new EM("Graph must not contain hyperedges."));if(!z$n(r)&&u!=lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84)))for(zsn(f=new $F,r),kfn(f,(mon(),Wft),r),Kb(f,uG(DA(FX(i.f,u)),153)),Bb(f,uG(cQ(i,lCn(uG(zrn((!r.c&&(r.c=new f_(cFt,r,5,8)),r.c),0),84))),153)),kD(t.c,f),o=new DD((!r.n&&(r.n=new fV(lFt,r,1,7)),r.n));o.e!=o.i.gc();)zsn(l=new A5(f,(a=uG(Zkn(o),135)).a),a),kfn(l,Wft,a),l.e.a=e.Math.max(a.g,1),l.e.b=e.Math.max(a.f,1),Yqn(l),kD(t.d,l)}}function VWn(n,t,i){var r,c,a,o,u,s,h,f;switch(i.Ug("Node promotion heuristic",1),n.i=t,n.r=uG(oIn(t,(jYn(),yMt)),243),n.r!=(THn(),Pjt)&&n.r!=Cjt?RQn(n):n_n(n),f=uG(oIn(n.i,kMt),17).a,a=new hi,n.r.g){case 2:case 1:default:tzn(n,a);break;case 3:for(n.r=Djt,tzn(n,a),s=0,u=new Ww(n.b);u.an.k&&(n.r=Ijt,tzn(n,a));break;case 4:for(n.r=Djt,tzn(n,a),h=0,c=new Ww(n.c);c.an.n&&(n.r=Ljt,tzn(n,a));break;case 6:tzn(n,new mg(t0(e.Math.ceil(n.g.length*f/100))));break;case 5:tzn(n,new vg(t0(e.Math.ceil(n.e*f/100))));break;case 8:IYn(n,!0);break;case 9:IYn(n,!1)}n.r!=Pjt&&n.r!=Cjt?JKn(n,t):BBn(n,t),i.Vg()}function WWn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;for(pF(u=new N4(s=n.b,0),new bQ(n)),g=!1,c=1;u.b0&&(b.d+=f.n.d,b.d+=f.d),b.a>0&&(b.a+=f.n.a,b.a+=f.d),b.b>0&&(b.b+=f.n.b,b.b+=f.d),b.c>0&&(b.c+=f.n.c,b.c+=f.d),b}function JWn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d;for(b=i.d,l=i.c,o=(a=new MO(i.f.a+i.d.b+i.d.c,i.f.b+i.d.d+i.d.a)).b,h=new Ww(n.a);h.a0&&(n.c[t.c.p][t.p].d+=uRn(n.i,24)*z0n*.07000000029802322-.03500000014901161,n.c[t.c.p][t.p].a=n.c[t.c.p][t.p].d/n.c[t.c.p][t.p].b)}}function tQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w;for(l=new Ww(n);l.ar.d,r.d=e.Math.max(r.d,t),u&&i&&(r.d=e.Math.max(r.d,r.a),r.a=r.d+c);break;case 3:i=t>r.a,r.a=e.Math.max(r.a,t),u&&i&&(r.a=e.Math.max(r.a,r.d),r.d=r.a+c);break;case 2:i=t>r.c,r.c=e.Math.max(r.c,t),u&&i&&(r.c=e.Math.max(r.b,r.c),r.b=r.c+c);break;case 4:i=t>r.b,r.b=e.Math.max(r.b,t),u&&i&&(r.b=e.Math.max(r.b,r.c),r.c=r.b+c)}}}function rQn(n,t){var e,i,r,c,a,o,u,s,h;return s="",0==t.length?n.ne(L1n,O1n,-1,-1):(m_((h=KAn(t)).substr(0,3),"at ")&&(s3(3,h.length+1),h=h.substr(3)),-1==(a=(h=h.replace(/\[.*?\]/g,"")).indexOf("("))?-1==(a=h.indexOf("@"))?(s=h,h=""):(s=KAn((s3(a+1,h.length+1),h.substr(a+1))),h=KAn((Knn(0,a,h.length),h.substr(0,a)))):(Knn(a+1,e=h.indexOf(")",a),h.length),s=h.substr(a+1,e-(a+1)),h=KAn((Knn(0,a,h.length),h.substr(0,a)))),-1!=(a=xL(h,$Cn(46)))&&(s3(a+1,h.length+1),h=h.substr(a+1)),(0==h.length||m_(h,"Anonymous function"))&&(h=O1n),o=ax(s,$Cn(58)),r=T_(s,$Cn(58),o-1),u=-1,i=-1,c=L1n,-1!=o&&-1!=r&&(Knn(0,r,s.length),c=s.substr(0,r),u=rR((Knn(r+1,o,s.length),s.substr(r+1,o-(r+1)))),i=rR((s3(o+1,s.length+1),s.substr(o+1)))),n.ne(c,h,u,i))}function cQn(n){var t,e,i,r,c,a,o,u,s,h,f;for(s=new Ww(n);s.a0||h.j==_Rt&&h.e.c.length-h.g.c.length<0)){t=!1;break}for(r=new Ww(h.g);r.a=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u));if(i)for(o=new Ww(v.e);o.a=h&&M>=p&&(b+=d.n.b+g.n.b+g.a.b-y,++u))}u>0&&(T+=b/u,++w)}w>0?(t.a=c*T/w,t.g=w):(t.a=0,t.g=0)}function oQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(l=(c=n.f.b).a,h=c.b,w=n.e.g,b=n.e.f,vN(n.e,c.a,c.b),M=l/w,T=h/b,s=new DD(xJ(n.e));s.e!=s.i.gc();)ycn(u=uG(Zkn(s),135),u.i*M),Mcn(u,u.j*T);for(m=new DD(RJ(n.e));m.e!=m.i.gc();)k=(p=uG(Zkn(m),123)).i,y=p.j,k>0&&ycn(p,k*M),y>0&&Mcn(p,y*T);for(Yun(n.b,new ft),t=new Zm,o=new bsn(new Nw(n.c).a);o.b;)i=uG((a=von(o)).ld(),74),e=uG(a.md(),407).a,r=JFn(i,!1,!1),sqn(f=YPn(bIn(i),COn(r),e),r),(v=wIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.a.a.c,8)),e));for(g=new bsn(new Nw(n.d).a);g.b;)i=uG((d=von(g)).ld(),74),e=uG(d.md(),407).a,r=JFn(i,!1,!1),f=YPn(gIn(i),fln(COn(r)),e),sqn(f=fln(f),r),(v=dIn(i))&&-1==Ten(t,v,0)&&(mv(t.c,v),iY(v,(MK(0!=f.b),uG(f.c.b.c,8)),e))}function uQn(n,t,e,i){var r,c,a,o,u;return sKn(o=new kQn(t),i),r=!0,n&&n.pf((XYn(),d$t))&&(r=(c=uG(n.of((XYn(),d$t)),88))==(xdn(),ZDt)||c==JDt||c==YDt),iBn(o,!1),Prn(o.e.Rf(),new DB(o,!1,r)),W1(o,o.f,(Yrn(),jst),(KQn(),yRt)),W1(o,o.f,Sst,KRt),W1(o,o.g,jst,_Rt),W1(o,o.g,Sst,kRt),gyn(o,yRt),gyn(o,KRt),IJ(o,kRt),IJ(o,_Rt),VK(),(a=o.A.Hc((Qmn(),VRt))&&o.B.Hc((oUn(),rKt))?xmn(o):null)&&dT(o.a,a),iQn(o),BTn(o),HTn(o),wWn(o),NHn(o),iEn(o),dkn(o,yRt),dkn(o,KRt),IBn(o),UXn(o),e?(wpn(o),rEn(o),dkn(o,kRt),dkn(o,_Rt),u=o.B.Hc((oUn(),cKt)),dLn(o,u,yRt),dLn(o,u,KRt),gLn(o,u,kRt),gLn(o,u,_Rt),kS(new fX(null,new h3(new Fw(o.i),0)),new Cn),kS(JJ(new fX(null,FW(o.r).a.oc()),new In),new On),jPn(o),o.e.Pf(o.o),kS(new fX(null,FW(o.r).a.oc()),new An),o.o):o.o}function sQn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.a1)for(z8(v,new BI(n,b=new Izn(w,v,r))),mv(o.c,b),f=v.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b);if(u.a.gc()>1)for(z8(u,new HI(n,b=new Izn(w,u,r))),mv(o.c,b),f=u.a.ec().Kc();f.Ob();)men(a,uG(f.Pb(),42).b)}}function dQn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(g=n.n,p=n.o,b=n.d,l=uM(pK(Omn(n,(jYn(),lTt)))),t){for(f=l*(t.gc()-1),w=0,s=t.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b-b.d+w,c=r=p.a/(t.gc()+1),u=t.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a-o.o.b,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=o.o.b,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=0,o2(d,n)),c+=r}if(i){for(f=l*(i.gc()-1),w=0,s=i.Kc();s.Ob();)f+=(o=uG(s.Pb(),10)).o.a,w=e.Math.max(w,o.o.b);for(m=g.a-(f-p.a)/2,a=g.b+p.b+b.a-w,c=r=p.a/(i.gc()+1),u=i.Kc();u.Ob();)(o=uG(u.Pb(),10)).n.a=m,o.n.b=a,m+=o.o.a+l,(h=ERn(o)).n.a=o.o.a/2-h.a.a,h.n.b=0,(d=uG(oIn(o,(GYn(),Ppt)),12)).e.c.length+d.g.c.length==1&&(d.n.a=c-d.a.a,d.n.b=p.b,o2(d,n)),c+=r}}function gQn(n,t){var i,r,c,a,o,u;if(uG(oIn(t,(GYn(),Hpt)),21).Hc((r_n(),tpt))){for(u=new Ww(t.a);u.a=0&&a0&&(uG(AJ(n.b,t),127).a.b=i)}function jQn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d;if(l=uM(pK(oIn(n,(jYn(),TTt)))),b=uM(pK(oIn(n,jTt))),f=uM(pK(oIn(n,yTt))),o=n.o,a=(c=uG(zq(n.j,0),12)).n,d=hAn(c,f)){if(t.Hc((eNn(),wRt)))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:d.c=(o.a-d.b)/2-a.a,d.d=b;break;case 3:d.c=(o.a-d.b)/2-a.a,d.d=-b-d.a;break;case 2:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.b+b-a.b,d.c=-l-d.b;break;case 4:e&&0==c.e.c.length&&0==c.g.c.length?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=o.b+b-a.b,d.c=l}else if(t.Hc(gRt))switch(uG(oIn(n,(GYn(),Fpt)),64).g){case 1:case 3:d.c=a.a+l;break;case 2:case 4:e&&!c.c?(h=i?d.a:uG(zq(c.f,0),72).o.b,d.d=(o.b-h)/2-a.b):d.d=a.b+b}for(r=d.d,s=new Ww(c.f);s.a=n.length)return{done:!0};var i=n[e++];return{value:[i,t.get(i)],done:!1}}}},__n()||(n.prototype.createObject=function(){return{}},n.prototype.get=function(n){return this.obj[":"+n]},n.prototype.set=function(n,t){this.obj[":"+n]=t},n.prototype[U0n]=function(n){delete this.obj[":"+n]},n.prototype.keys=function(){var n=[];for(var t in this.obj)58==t.charCodeAt(0)&&n.push(t.substring(1));return n}),n}function OQn(){OQn=E,RPt=new Cm(E4n),new Cm(S4n),new uF("DEPTH",xwn(0)),EPt=new uF("FAN",xwn(0)),TPt=new uF(Q9n,xwn(0)),UPt=new uF("ROOT",(qx(),!1)),APt=new uF("LEFTNEIGHBOR",null),BPt=new uF("RIGHTNEIGHBOR",null),LPt=new uF("LEFTSIBLING",null),HPt=new uF("RIGHTSIBLING",null),jPt=new uF("DUMMY",!1),new uF("LEVEL",xwn(0)),_Pt=new uF("REMOVABLE_EDGES",new lS),GPt=new uF("XCOOR",xwn(0)),qPt=new uF("YCOOR",xwn(0)),NPt=new uF("LEVELHEIGHT",0),DPt=new uF("LEVELMIN",0),$Pt=new uF("LEVELMAX",0),PPt=new uF("GRAPH_XMIN",0),IPt=new uF("GRAPH_YMIN",0),SPt=new uF("GRAPH_XMAX",0),CPt=new uF("GRAPH_YMAX",0),MPt=new uF("COMPACT_LEVEL_ASCENSION",!1),yPt=new uF("COMPACT_CONSTRAINTS",new Zm),OPt=new uF("ID",""),KPt=new uF("POSITION",xwn(0)),FPt=new uF("PRELIM",0),xPt=new uF("MODIFIER",0),kPt=new Cm(P4n),vPt=new Cm(C4n)}function AQn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(NGn(),null==n)return null;if(0==(f=8*n.length))return"";for(l=f/24|0,c=null,c=Inn(JHt,N1n,28,4*(0!=(o=f%24)?l+1:l),15,1),s=0,h=0,t=0,e=0,i=0,a=0,r=0,u=0;u>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,d=0==(-128&(i=n[r++]))?i>>6<<24>>24:(i>>6^252)<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2|d],c[a++]=gHt[63&i];return 8==o?(s=(3&(t=n[r]))<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,c[a++]=gHt[b],c[a++]=gHt[s<<4],c[a++]=61,c[a++]=61):16==o&&(t=n[r],h=(15&(e=n[r+1]))<<24>>24,s=(3&t)<<24>>24,b=0==(-128&t)?t>>2<<24>>24:(t>>2^192)<<24>>24,w=0==(-128&e)?e>>4<<24>>24:(e>>4^240)<<24>>24,c[a++]=gHt[b],c[a++]=gHt[w|s<<4],c[a++]=gHt[h<<2],c[a++]=61),mvn(c,0,c.length)}function LQn(n,t){var i,r,c,a,o,u;if(0==n.e&&n.p>0&&(n.p=-(n.p-1)),n.p>j1n&&F5(t,n.p-V1n),o=t.q.getDate(),k0(t,1),n.k>=0&&H0(t,n.k),n.c>=0?k0(t,n.c):n.k>=0?(r=35-new Lfn(t.q.getFullYear()-V1n,t.q.getMonth(),35).q.getDate(),k0(t,e.Math.min(r,o))):k0(t,o),n.f<0&&(n.f=t.q.getHours()),n.b>0&&n.f<12&&(n.f+=12),tD(t,24==n.f&&n.g?0:n.f),n.j>=0&&y7(t,n.j),n.n>=0&&Nnn(t,n.n),n.i>=0&&TL(t,Lgn(Ngn(bSn(Bsn(t.q.getTime()),$1n),$1n),n.i)),n.a&&(F5(c=new QE,c.q.getFullYear()-V1n-80),$P(Bsn(t.q.getTime()),Bsn(c.q.getTime()))&&F5(t,c.q.getFullYear()-V1n+100)),n.d>=0)if(-1==n.c)(i=(7+n.d-t.q.getDay())%7)>3&&(i-=7),u=t.q.getMonth(),k0(t,t.q.getDate()+i),t.q.getMonth()!=u&&k0(t,t.q.getDate()+(i>0?-7:7));else if(t.q.getDay()!=n.d)return!1;return n.o>j1n&&(a=t.q.getTimezoneOffset(),TL(t,Lgn(Bsn(t.q.getTime()),60*(n.o-a)*$1n))),!0}function NQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;if(F$(r=oIn(t,(GYn(),rmt)),207)){for(b=uG(r,27),w=t.e,f=new eN(t.c),c=t.d,f.a+=c.b,f.b+=c.d,$x(uG(zDn(b,(jYn(),KMt)),181),(oUn(),tKt))&&(Ab(l=uG(zDn(b,_Mt),107),c.a),_b(l,c.d),Lb(l,c.b),Fb(l,c.c)),e=new Zm,s=new Ww(t.a);s.ai.c.length-1;)kD(i,new WO(B3n,G9n));e=uG(oIn(r,ACt),17).a,hN(uG(oIn(n,cCt),88))?(r.e.auM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.a+r.f.a)):(r.e.buM(pK((u3(e,i.c.length),uG(i.c[e],42)).b))&&sw((u3(e,i.c.length),uG(i.c[e],42)),r.e.b+r.f.b))}for(c=Fkn(n.b,0);c.b!=c.d.c;)r=uG(I6(c),39),e=uG(oIn(r,(QGn(),ACt)),17).a,kfn(r,(OQn(),DPt),pK((u3(e,i.c.length),uG(i.c[e],42)).a)),kfn(r,$Pt,pK((u3(e,i.c.length),uG(i.c[e],42)).b));t.Vg()}function RQn(n){var t,i,r,c,a,o,u,s,f,l,b,w,d,g,p;for(n.o=uM(pK(oIn(n.i,(jYn(),ETt)))),n.f=uM(pK(oIn(n.i,vTt))),n.j=n.i.b.c.length,u=n.j-1,w=0,n.k=0,n.n=0,n.b=n7(Inn(dot,zZn,17,n.j,0,1)),n.c=n7(Inn(fot,zZn,345,n.j,7,1)),o=new Ww(n.i.b);o.a0&&kD(n.q,l),kD(n.p,l);d=s+(t-=r),f+=t*n.f,Y8(n.b,u,xwn(d)),Y8(n.c,u,f),n.k=e.Math.max(n.k,d),n.n=e.Math.max(n.n,f),n.e+=t,t+=p}}function KQn(){var n;KQn=E,FRt=new RO(Y2n,0),yRt=new RO(o3n,1),kRt=new RO(u3n,2),KRt=new RO(s3n,3),_Rt=new RO(h3n,4),hZ(),SRt=new nT(new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),PRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[]))),MRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[]))),DRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[]))),RRt=Nwn(WX(_Rt,Uhn(cT(YRt,1),z4n,64,0,[]))),LRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ERt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),$Rt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),CRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt]))),xRt=Nwn(WX(KRt,Uhn(cT(YRt,1),z4n,64,0,[_Rt]))),TRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt]))),ARt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,_Rt]))),jRt=Nwn(WX(kRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),NRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[KRt,_Rt]))),IRt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt]))),ORt=Nwn(WX(yRt,Uhn(cT(YRt,1),z4n,64,0,[kRt,KRt,_Rt])))}function FQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;for(t.Ug(j6n,1),w=new Zm,k=new Zm,s=new Ww(n.b);s.a0&&(y-=d),Vzn(o,y),l=0,w=new Ww(o.a);w.a0),u.a.Xb(u.c=--u.b)),s=.4*r*l,!a&&u.b0&&(s3(0,t.length),64!=(o=t.charCodeAt(0)))){if(37==o&&(u=!1,0!=(h=t.lastIndexOf("%"))&&(h==f-1||(s3(h+1,t.length),u=46==t.charCodeAt(h+1))))){if(Knn(1,h,t.length),m=m_("%",a=t.substr(1,h-1))?null:eJn(a),i=0,u)try{i=vUn((s3(h+2,t.length+1),t.substr(h+2)),j1n,vZn)}catch(v){throw F$(v=Ehn(v),130)?hv(new Pen(v)):hv(v)}for(d=kon(n.Gh());d.Ob();)if(F$(b=Ksn(d),519)&&(p=(r=uG(b,598)).d,(null==m?null==p:m_(m,p))&&0==i--))return r;return null}if(l=-1==(s=t.lastIndexOf("."))?t:(Knn(0,s,t.length),t.substr(0,s)),e=0,-1!=s)try{e=vUn((s3(s+1,t.length+1),t.substr(s+1)),j1n,vZn)}catch(v){if(!F$(v=Ehn(v),130))throw hv(v);l=t}for(l=m_("%",l)?null:eJn(l),w=kon(n.Gh());w.Ob();)if(F$(b=Ksn(w),197)&&(g=(c=uG(b,197)).xe(),(null==l?null==g:m_(l,g))&&0==e--))return c;return null}return jWn(n,t)}function WQn(n){var t,e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m;for(s=new Ym,o=new K1,i=new Ww(n.a.a.b);i.at.d.c){if((b=n.c[t.a.d])==(g=n.c[f.a.d]))continue;RKn(xS(DS(RS($S(new uk,1),100),b),g))}}}function QQn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(b=uG(uG(Y9(n.r,t),21),87),t!=(KQn(),kRt)&&t!=_Rt){for(a=t==yRt?(ehn(),wht):(ehn(),pht),y=t==yRt?(Yen(),Fst):(Yen(),Rst),c=(r=(i=uG(AJ(n.b,t),127)).i).c+Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.b,n.C.b,n.k])),m=r.c+r.b-Trn(Uhn(cT(eUt,1),I0n,28,15,[i.n.c,n.C.c,n.k])),o=TT(BB(a),n.t),v=t==yRt?T0n:M0n,l=b.Kc();l.Ob();)!(h=uG(l.Pb(),117)).c||h.c.d.c.length<=0||(p=h.b.Mf(),g=h.e,(d=(w=h.c).i).b=(s=w.n,w.e.a+s.b+s.c),d.a=(u=w.n,w.e.b+u.d+u.a),ZZ(y,W2n),w.f=y,etn(w,(Ktn(),Lst)),d.c=g.a-(d.b-p.a)/2,M=e.Math.min(c,g.a),T=e.Math.max(m,g.a+p.a),d.cT&&(d.c=T-d.b),kD(o.d,new ZX(d,Hdn(o,d))),v=t==yRt?e.Math.max(v,g.b+h.b.Mf().b):e.Math.min(v,g.b));for(v+=t==yRt?n.t:-n.t,(k=cmn((o.e=v,o)))>0&&(uG(AJ(n.b,t),127).a.b=k),f=b.Kc();f.Ob();)!(h=uG(f.Pb(),117)).c||h.c.d.c.length<=0||((d=h.c.i).c-=h.e.a,d.d-=h.e.b)}else TQn(n,t)}function JQn(n){var t,e,i,r,c,a,o,u,s,f;for(t=new Ym,a=new DD(n);a.e!=a.i.gc();){for(c=uG(Zkn(a),27),e=new ek,vJ(cft,c,e),f=new at,i=uG(l8(new fX(null,new LW(new Fz(ix(tRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)])))),85),Ycn(e,uG(i.xc((qx(),!0)),16),new ot),r=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ut),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();r.Ob();)(s=wIn(uG(r.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o));for(i=uG(l8(new fX(null,new LW(new Fz(ix(eRn(c).a.Kc(),new h)))),HX(f,ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut])))),85),Ycn(e,uG(i.xc(!0),16),new st),u=uG(l8(JJ(uG(i.xc(!1),15).Lc(),new ht),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15).Kc();u.Ob();)(s=dIn(uG(u.Pb(),74)))&&((o=uG(DA(FX(t.f,s)),21))||(o=TFn(s),VAn(t.f,s,o)),Qon(e,o))}}function YQn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d;if(pXn(),(u=dwn(n,0)<0)&&(n=Men(n)),0==dwn(n,0))switch(t){case 0:return"0";case 1:return N0n;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(b=new WM).a+=t<0?"0E+":"0E",b.a+=t==j1n?"2147483648":""+-t,b.a}f=Inn(JHt,N1n,28,1+(h=18),15,1),e=h,d=n;do{s=d,d=bSn(d,10),f[--e]=pz(Lgn(48,$gn(s,Ngn(d,10))))&D1n}while(0!=dwn(d,0));if(r=$gn($gn($gn(h,e),t),1),0==t)return u&&(f[--e]=45),mvn(f,e,h-e);if(t>0&&dwn(r,-6)>=0){if(dwn(r,0)>=0){for(c=e+pz(r),o=h-1;o>=c;o--)f[o+1]=f[o];return f[++c]=46,u&&(f[--e]=45),mvn(f,e,h-e+1)}for(a=2;$P(a,Lgn(Men(r),1));a++)f[--e]=48;return f[--e]=46,f[--e]=48,u&&(f[--e]=45),mvn(f,e,h-e)}return w=e+1,i=h,l=new QM,u&&(l.a+="-"),i-w>=1?(jQ(l,f[e]),l.a+=".",l.a+=mvn(f,e+1,h-e-1)):l.a+=mvn(f,e,h-e),l.a+="E",dwn(r,0)>0&&(l.a+="+"),l.a+=""+oV(r),l.a}function ZQn(n,t,i,r,c){var a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;if(p=new MO(n.g,n.f),(g=xAn(n)).a=e.Math.max(g.a,t),g.b=e.Math.max(g.b,i),T=g.a/p.a,f=g.b/p.b,y=g.a-p.a,s=g.b-p.b,r)for(o=R0(n)?uG(zDn(R0(n),(XYn(),d$t)),88):uG(zDn(n,(XYn(),d$t)),88),u=xA(zDn(n,(XYn(),sDt)))===xA(($Pn(),cRt)),v=new DD((!n.c&&(n.c=new fV(wFt,n,9,9)),n.c));v.e!=v.i.gc();)switch(m=uG(Zkn(v),123),(k=uG(zDn(m,gDt),64))==(KQn(),FRt)&&(k=RGn(m,o),Myn(m,gDt,k)),k.g){case 1:u||ycn(m,m.i*T);break;case 2:ycn(m,m.i+y),u||Mcn(m,m.j*f);break;case 3:u||ycn(m,m.i*T),Mcn(m,m.j+s);break;case 4:u||Mcn(m,m.j*f)}if(vN(n,g.a,g.b),c)for(b=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));b.e!=b.i.gc();)w=(l=uG(Zkn(b),135)).i+l.g/2,d=l.j+l.f/2,(M=w/p.a)+(h=d/p.b)>=1&&(M-h>0&&d>=0?(ycn(l,l.i+y),Mcn(l,l.j+s*h)):M-h<0&&w>=0&&(ycn(l,l.i+y*M),Mcn(l,l.j+s)));return Myn(n,(XYn(),_$t),(Qmn(),new nB(a=uG(Mj(sKt),9),uG(MF(a,a.length),9),0))),new MO(T,f)}function nJn(n){hP(n,new hCn(xT(FT(DT(KT(RT(new bu,x7n),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new Oo),x7n))),U4(n,x7n,b9n,Jkn(BIt)),U4(n,x7n,o4n,Jkn(VIt)),U4(n,x7n,p4n,Jkn($It)),U4(n,x7n,x4n,Jkn(DIt)),U4(n,x7n,g4n,Jkn(xIt)),U4(n,x7n,m4n,Jkn(NIt)),U4(n,x7n,w4n,Jkn(RIt)),U4(n,x7n,v4n,Jkn(_It)),U4(n,x7n,P7n,Jkn(AIt)),U4(n,x7n,S7n,Jkn(LIt)),U4(n,x7n,E7n,Jkn(UIt)),U4(n,x7n,A7n,Jkn(XIt)),U4(n,x7n,L7n,Jkn(GIt)),U4(n,x7n,N7n,Jkn(qIt)),U4(n,x7n,O7n,Jkn(KIt)),U4(n,x7n,T7n,Jkn(FIt)),U4(n,x7n,j7n,Jkn(HIt)),U4(n,x7n,C7n,Jkn(zIt)),U4(n,x7n,I7n,Jkn(WIt)),U4(n,x7n,M7n,Jkn(OIt))}function tJn(n){var t,e,i,r,c,a,o,u,s,h,f;if(null==n)throw hv(new ZM(IZn));if(s=n,u=!1,(c=n.length)>0&&(s3(0,n.length),45!=(t=n.charCodeAt(0))&&43!=t||(s3(1,n.length+1),n=n.substr(1),--c,u=45==t)),0==c)throw hv(new ZM(y0n+s+'"'));for(;n.length>0&&(s3(0,n.length),48==n.charCodeAt(0));)s3(1,n.length+1),n=n.substr(1),--c;if(c>(lGn(),vot)[10])throw hv(new ZM(y0n+s+'"'));for(r=0;r0&&(f=-parseInt((Knn(0,i,n.length),n.substr(0,i)),10),s3(i,n.length+1),n=n.substr(i),c-=i,e=!1);c>=a;){if(i=parseInt((Knn(0,a,n.length),n.substr(0,a)),10),s3(a,n.length+1),n=n.substr(a),c-=a,e)e=!1;else{if(dwn(f,o)<0)throw hv(new ZM(y0n+s+'"'));f=Ngn(f,h)}f=$gn(f,i)}if(dwn(f,0)>0)throw hv(new ZM(y0n+s+'"'));if(!u&&dwn(f=Men(f),0)<0)throw hv(new ZM(y0n+s+'"'));return f}function eJn(n){var t,e,i,r,c,a,o,u;if(ZXn(),null==n)return null;if((r=xL(n,$Cn(37)))<0)return n;for(u=new lx((Knn(0,r,n.length),n.substr(0,r))),t=Inn(tUt,ret,28,4,15,1),o=0,i=0,a=n.length;rr+2&&mfn((s3(r+1,n.length),n.charCodeAt(r+1)),QFt,JFt)&&mfn((s3(r+2,n.length),n.charCodeAt(r+2)),QFt,JFt))if(e=AG((s3(r+1,n.length),n.charCodeAt(r+1)),(s3(r+2,n.length),n.charCodeAt(r+2))),r+=2,i>0?128==(192&e)?t[o++]=e<<24>>24:i=0:e>=128&&(192==(224&e)?(t[o++]=e<<24>>24,i=2):224==(240&e)?(t[o++]=e<<24>>24,i=3):240==(248&e)&&(t[o++]=e<<24>>24,i=4)),i>0){if(o==i){switch(o){case 2:jQ(u,((31&t[0])<<6|63&t[1])&D1n);break;case 3:jQ(u,((15&t[0])<<12|(63&t[1])<<6|63&t[2])&D1n)}o=0,i=0}}else{for(c=0;c=2){if(0==(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)gj(),i=new is,ttn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),i);else if((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i>1)for(l=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));l.e!=l.i.gc();)$Sn(l);sqn(t,uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166))}if(f)for(r=new DD((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));r.e!=r.i.gc();)for(s=new DD((!(i=uG(Zkn(r),166)).a&&(i.a=new MD(eFt,i,5)),i.a));s.e!=s.i.gc();)u=uG(Zkn(s),377),o.a=e.Math.max(o.a,u.a),o.b=e.Math.max(o.b,u.b);for(a=new DD((!n.n&&(n.n=new fV(lFt,n,1,7)),n.n));a.e!=a.i.gc();)c=uG(Zkn(a),135),(h=uG(zDn(c,Cxt),8))&&kN(c,h.a,h.b),f&&(o.a=e.Math.max(o.a,c.i+c.g),o.b=e.Math.max(o.b,c.j+c.f));return o}function rJn(n,t,e,i,r){var c,a,o;if(win(n,t),a=t[0],c=VJ(e.c,0),o=-1,Jfn(e))if(i>0){if(a+i>n.length)return!1;o=RNn((Knn(0,a+i,n.length),n.substr(0,a+i)),t)}else o=RNn(n,t);switch(c){case 71:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n]),t),r.e=o,!0;case 77:return c_n(n,t,r,o,a);case 76:return a_n(n,t,r,o,a);case 69:return XAn(n,t,a,r);case 99:return zAn(n,t,a,r);case 97:return o=XOn(n,a,Uhn(cT($ot,1),zZn,2,6,["AM","PM"]),t),r.b=o,!0;case 121:return o_n(n,t,a,o,e,r);case 100:return!(o<=0||(r.c=o,0));case 83:return!(o<0)&&tmn(o,a,t[0],r);case 104:12==o&&(o=0);case 75:case 72:return!(o<0||(r.f=o,r.g=!1,0));case 107:return!(o<0||(r.f=o,r.g=!0,0));case 109:return!(o<0||(r.j=o,0));case 115:return!(o<0||(r.n=o,0));case 90:if(aT[s]&&(d=s),f=new Ww(n.a.b);f.a1;){if(c=nKn(t),l=a.g,d=uG(zDn(t,hAt),107),g=uM(pK(zDn(t,VOt))),(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i>1&&uM(pK(zDn(t,(lBn(),jOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))1&&uM(pK(zDn(t,(lBn(),TOt))))!=M0n&&(a.c+(d.b+d.c))/(a.b+(d.d+d.a))>g&&Myn(c,(lBn(),POt),e.Math.max(uM(pK(zDn(t,EOt))),uM(pK(zDn(c,POt)))-uM(pK(zDn(t,TOt))))),(h=(s=kYn(w=new vO(r,f),c,b)).g)>=l&&h==h){for(o=0;o<(!c.a&&(c.a=new fV(bFt,c,10,11)),c.a).i;o++)mNn(n,uG(zrn((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a),o),27),uG(zrn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),o),27));Irn(t,w),x1(a,s.c),D1(a,s.b)}--u}Myn(t,(lBn(),mOt),a.b),Myn(t,vOt,a.c),i.Vg()}function uJn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug("Interactive node layering",1),i=new Zm,b=new Ww(n.a);b.a=u){MK(v.b>0),v.a.Xb(v.c=--v.b);break}p.a>s&&(r?(Ohn(r.b,p.b),r.a=e.Math.max(r.a,p.a),LQ(v)):(kD(p.b,f),p.c=e.Math.min(p.c,s),p.a=e.Math.max(p.a,u),r=p))}r||((r=new Mk).c=s,r.a=u,pF(v,r),kD(r.b,f))}for(o=n.b,h=0,m=new Ww(i);m.aw&&(a&&(cL(M,b),cL(j,xwn(h.b-1))),I=i.b,O+=b+t,b=0,f=e.Math.max(f,i.b+i.c+C)),ycn(u,I),Mcn(u,O),f=e.Math.max(f,I+C+i.c),b=e.Math.max(b,l),I+=C+t;if(f=e.Math.max(f,r),(P=O+b+i.a)t4n,S=e.Math.abs(b.b-d.b)>t4n,(!i&&E&&S||i&&(E||S))&&aq(p.a,y)),Qon(p.a,r),0==r.b?b=y:(MK(0!=r.b),b=uG(r.c.b.c,8)),hhn(w,l,g),kun(c)==j&&(HQ(j.i)!=c.a&&pAn(g=new sj,HQ(j.i),v),kfn(p,Smt,g)),sOn(w,p,v),f.a.zc(w,f);c2(p,M),u2(p,j)}for(h=f.a.ec().Kc();h.Ob();)c2(s=uG(h.Pb(),18),null),u2(s,null);t.Vg()}function fJn(n,t){var e,i,r,c,a,o,u,s,h,f,l;for(h=(r=uG(oIn(n,(QGn(),cCt)),88))==(xdn(),JDt)||r==YDt?QDt:YDt,e=uG(l8(JJ(new fX(null,new h3(n.b,16)),new $a),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),(u=uG(l8(YJ(e.Oc(),new Pp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15)).Gc(uG(l8(YJ(e.Oc(),new Cp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),16)),u.jd(new Ip(h)),l=new Hj(new Op(r)),i=new Ym,o=u.Kc();o.Ob();)a=uG(o.Pb(),240),s=uG(a.a,39),oM(gK(a.c))?(l.a.zc(s,(qx(),tot)),new od(l.a.Zc(s,!1)).a.gc()>0&&vJ(i,s,uG(new od(l.a.Zc(s,!1)).a.Vc(),39)),new od(l.a.ad(s,!0)).a.gc()>1&&vJ(i,wmn(l,s),s)):(new od(l.a.Zc(s,!1)).a.gc()>0&&xA(c=uG(new od(l.a.Zc(s,!1)).a.Vc(),39))===xA(DA(FX(i.f,s)))&&uG(oIn(s,(OQn(),yPt)),15).Fc(c),new od(l.a.ad(s,!0)).a.gc()>1&&(f=wmn(l,s),xA(DA(FX(i.f,f)))===xA(s)&&uG(oIn(f,(OQn(),yPt)),15).Fc(s)),l.a.Bc(s))}function lJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;if(1==n.gc())return uG(n.Xb(0),235);if(n.gc()<=0)return new d7;for(c=n.Kc();c.Ob();){for(i=uG(c.Pb(),235),d=0,f=vZn,l=vZn,s=j1n,h=j1n,w=new Ww(i.e);w.au&&(k=0,y+=o+m,o=0),eUn(g,i,k,y),t=e.Math.max(t,k+p.a),o=e.Math.max(o,p.b),k+=p.a+m;return g}function bJn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b,w,d,g;if(NGn(),null==n)return null;if((w=hgn(c=_en(n)))%4!=0)return null;if(0==(d=w/4|0))return Inn(tUt,ret,28,0,15,1);for(f=null,t=0,e=0,i=0,r=0,a=0,o=0,u=0,s=0,b=0,l=0,h=0,f=Inn(tUt,ret,28,3*d,15,1);b>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24}return mE(a=c[h++])&&mE(o=c[h++])?(t=dHt[a],e=dHt[o],u=c[h++],s=c[h++],-1==dHt[u]||-1==dHt[s]?61==u&&61==s?0!=(15&e)?null:(qGn(f,0,g=Inn(tUt,ret,28,3*b+1,15,1),0,3*b),g[l]=(t<<2|e>>4)<<24>>24,g):61!=u&&61==s?0!=(3&(i=dHt[u]))?null:(qGn(f,0,g=Inn(tUt,ret,28,3*b+2,15,1),0,3*b),g[l++]=(t<<2|e>>4)<<24>>24,g[l]=((15&e)<<4|i>>2&15)<<24>>24,g):null:(i=dHt[u],r=dHt[s],f[l++]=(t<<2|e>>4)<<24>>24,f[l++]=((15&e)<<4|i>>2&15)<<24>>24,f[l++]=(i<<6|r)<<24>>24,f)):null}function wJn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;for(t.Ug(j6n,1),l=uG(oIn(n,(jYn(),Vyt)),223),i=new Ww(n.b);i.a=2){for(b=!0,e=uG(N3(h=new Ww(r.j)),12),f=null;h.a0)if(r=f.gc(),s=t0(e.Math.floor((r+1)/2))-1,c=t0(e.Math.ceil((r+1)/2))-1,t.o==dSt)for(h=c;h>=s;h--)t.a[k.p]==k&&(d=uG(f.Xb(h),42),w=uG(d.a,10),!cS(i,d.b)&&b>n.b.e[w.p]&&(t.a[w.p]=k,t.g[k.p]=t.g[w.p],t.a[k.p]=t.g[k.p],t.f[t.g[k.p].p]=(qx(),!!(oM(t.f[t.g[k.p].p])&k.k==(zIn(),wbt))),b=n.b.e[w.p]));else for(h=s;h<=c;h++)t.a[k.p]==k&&(p=uG(f.Xb(h),42),g=uG(p.a,10),!cS(i,p.b)&&b0&&(c=uG(zq(p.c.a,T-1),10),o=n.i[c.p],E=e.Math.ceil(y$(n.n,c,p)),a=M.a.e-p.d.d-(o.a.e+c.o.b+c.d.a)-E),h=M0n,T0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)<0,d=k.a.e.e-k.a.a-(k.b.e.e-k.b.a)<0&&j.a.e.e-j.a.a-(j.b.e.e-j.b.a)>0,w=k.a.e.e+k.b.aj.b.e.e+j.a.a,y=0,!g&&!d&&(b?a+l>0?y=l:h-r>0&&(y=r):w&&(a+u>0?y=u:h-v>0&&(y=v))),M.a.e+=y,M.b&&(M.d.e+=y),1)))}function pJn(n,t,i){var r,c,a,o,u,s,h,f,l,b;if(r=new gY(t.Lf().a,t.Lf().b,t.Mf().a,t.Mf().b),c=new cN,n.c)for(o=new Ww(t.Rf());o.as&&(i.a+=V$(Inn(JHt,N1n,28,-s,15,1))),i.a+="Is",xL(u,$Cn(32))>=0)for(r=0;r=i.o.b/2}p?(g=uG(oIn(i,(GYn(),Pmt)),15))?l?c=g:(r=uG(oIn(i,Ept),15))?c=g.gc()<=r.gc()?g:r:(c=new Zm,kfn(i,Ept,c)):(c=new Zm,kfn(i,Pmt,c)):(r=uG(oIn(i,(GYn(),Ept)),15))?f?c=r:(g=uG(oIn(i,Pmt),15))?c=r.gc()<=g.gc()?r:g:(c=new Zm,kfn(i,Pmt,c)):(c=new Zm,kfn(i,Ept,c)),c.Fc(n),kfn(n,(GYn(),Ppt),e),t.d==e?(u2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null),Nln(e)):(c2(t,null),e.e.c.length+e.g.c.length==0&&o2(e,null)),BY(t.a)}function jJn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(i.Ug("MinWidth layering",1),w=t.b,j=t.a,A=uG(oIn(t,(jYn(),mMt)),17).a,u=uG(oIn(t,vMt),17).a,n.b=uM(pK(oIn(t,dTt))),n.d=M0n,y=new Ww(j);y.a0?(h=0,p&&(h+=u),h+=(E-1)*o,v&&(h+=u),j&&v&&(h=e.Math.max(h,GKn(v,o,m,T))),h=n.a&&(r=Rqn(n,m),l=e.Math.max(l,r.b),k=e.Math.max(k,r.d),kD(u,new WO(m,r)));for(T=new Zm,f=0;f0),g.a.Xb(g.c=--g.b),pF(g,j=new bQ(n.b)),MK(g.b0){for(l=h<100?null:new cj(h),w=(s=new Hun(t)).g,g=Inn(YHt,W1n,28,h,15,1),i=0,v=new Drn(h),r=0;r=0;)if(null!=b?udn(b,w[u]):xA(b)===xA(w[u])){g.length<=i&&qGn(g,0,g=Inn(YHt,W1n,28,2*g.length,15,1),0,i),g[i++]=r,ttn(v,w[u]);break n}if(xA(b)===xA(o))break}}if(s=v,w=v.g,h=i,i>g.length&&qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i),i>0){for(m=!0,c=0;c=0;)gjn(n,g[a]);if(i!=h){for(r=h;--r>=i;)gjn(s,r);qGn(g,0,g=Inn(YHt,W1n,28,i,15,1),0,i)}t=s}}}else for(t=cjn(n,t),r=n.i;--r>=0;)t.Hc(n.g[r])&&(gjn(n,r),m=!0);if(m){if(null!=g){for(f=1==(e=t.gc())?i2(n,4,t.Kc().Pb(),null,g[0],d):i2(n,6,t,g,g[0],d),l=e<100?null:new cj(e),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l?(l.nj(f),l.oj()):Msn(n.e,f)}else{for(l=qF(t.gc()),r=t.Kc();r.Ob();)l=X_(n,uG(b=r.Pb(),76),l);l&&l.oj()}return!0}return!1}function CJn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v;for((e=new qyn(t)).a||TUn(t),s=oBn(t),u=new K1,g=new BFn,d=new Ww(t.a);d.a0||i.o==dSt&&c=e}function AJn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;for(f=t,h=new K1,l=new K1,c=p6(f,yet),IOn((i=new SY(n,e,h,l)).a,i.b,i.c,i.d,c),d=(h.i||(h.i=new RD(h,h.c))).Kc();d.Ob();)for(w=uG(d.Pb(),166),o=uG(Y9(h,w),21).Kc();o.Ob();){if(a=o.Pb(),!(b=uG(dcn(n.d,a),166)))throw r=k6(f,Iet),hv(new SM(Det+a+xet+r+$et));!w.e&&(w.e=new f_(oFt,w,10,9)),ttn(w.e,b)}for(p=(l.i||(l.i=new RD(l,l.c))).Kc();p.Ob();)for(g=uG(p.Pb(),166),s=uG(Y9(l,g),21).Kc();s.Ob();){if(u=s.Pb(),!(b=uG(dcn(n.d,u),166)))throw r=k6(f,Iet),hv(new SM(Det+u+xet+r+$et));!g.g&&(g.g=new f_(oFt,g,9,10)),ttn(g.g,b)}!e.b&&(e.b=new f_(cFt,e,4,7)),0!=e.b.i&&(!e.c&&(e.c=new f_(cFt,e,5,8)),0!=e.c.i)&&(!e.b&&(e.b=new f_(cFt,e,4,7)),e.b.i<=1&&(!e.c&&(e.c=new f_(cFt,e,5,8)),e.c.i<=1))&&1==(!e.a&&(e.a=new fV(oFt,e,6,6)),e.a).i&&(hMn(m=uG(zrn((!e.a&&(e.a=new fV(oFt,e,6,6)),e.a),0),166))||fMn(m)||(Xan(m,uG(zrn((!e.b&&(e.b=new f_(cFt,e,4,7)),e.b),0),84)),zan(m,uG(zrn((!e.c&&(e.c=new f_(cFt,e,5,8)),e.c),0),84))))}function LJn(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(k=0,y=(v=n.a).length;k0?(f=uG(zq(l.c.a,a-1),10),j=y$(n.b,l,f),g=l.n.b-l.d.d-(f.n.b+f.o.b+f.d.a+j)):g=l.n.b-l.d.d,s=e.Math.min(g,s),a1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,1),8).b-f.b)))));else for(d=new Ww(t.j);d.ac&&(a=b.a-c,o=vZn,r.c.length=0,c=b.a),b.a>=c&&(mv(r.c,u),u.a.b>1&&(o=e.Math.min(o,e.Math.abs(uG(hyn(u.a,u.a.b-2),8).b-b.b)))));if(0!=r.c.length&&a>t.o.a/2&&o>t.o.b/2){for(o2(w=new lOn,t),NLn(w,(KQn(),yRt)),w.n.a=t.o.a/2,o2(g=new lOn,t),NLn(g,KRt),g.n.a=t.o.a/2,g.n.b=t.o.b,s=new Ww(r);s.a=h.b?c2(u,g):c2(u,w)):(h=uG(eG(u.a),8),(0==u.a.b?n3(u.c):uG(pR(u.a),8)).b>=h.b?u2(u,g):u2(u,w)),(l=uG(oIn(u,(jYn(),bMt)),75))&&Wpn(l,h,!0);t.n.a=c-t.o.a/2}}function $Jn(n,t,i){var r,c,a,o,u,s,h,f,l;for(u=Fkn(n.b,0);u.b!=u.d.c;)if(!m_((o=uG(I6(u),39)).c,H9n))for(h=xDn(o,n),t==(xdn(),JDt)||t==YDt?f$(h,new co):f$(h,new ao),s=h.c.length,r=0;r=0?Ipn(o):Gdn(Ipn(o)),n.qf(eTt,b)),s=new sj,l=!1,n.pf(WMt)?(_R(s,uG(n.of(WMt),8)),l=!0):mD(s,a.a/2,a.b/2),b.g){case 4:kfn(h,gMt,(Gpn(),Imt)),kfn(h,Npt,(Pfn(),ygt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),kRt)),l||(s.a=a.a),s.a-=a.a;break;case 2:kfn(h,gMt,(Gpn(),Amt)),kfn(h,Npt,(Pfn(),vgt)),h.o.b=a.b,d<0&&(h.o.a=-d),NLn(f,(KQn(),_Rt)),l||(s.a=0);break;case 1:kfn(h,Xpt,(Zen(),ppt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),KRt)),l||(s.b=a.b),s.b-=a.b;break;case 3:kfn(h,Xpt,(Zen(),dpt)),h.o.a=a.a,d<0&&(h.o.b=-d),NLn(f,(KQn(),yRt)),l||(s.b=0)}if(_R(f.n,s),kfn(h,WMt,s),t==rRt||t==aRt||t==cRt){if(w=0,t==rRt&&n.pf(YMt))switch(b.g){case 1:case 2:w=uG(n.of(YMt),17).a;break;case 3:case 4:w=-uG(n.of(YMt),17).a}else switch(b.g){case 4:case 2:w=c.b,t==aRt&&(w/=r.b);break;case 1:case 3:w=c.a,t==aRt&&(w/=r.a)}kfn(h,bmt,w)}return kfn(h,Fpt,b),h}function xJn(){function n(n){var t=this;this.dispatch=function(t){var e=t.data;switch(e.cmd){case"algorithms":var i=rmn((hZ(),new qw(new Fw(NFt.b))));n.postMessage({id:e.id,data:i});break;case"categories":var r=rmn((hZ(),new qw(new Fw(NFt.c))));n.postMessage({id:e.id,data:r});break;case"options":var c=rmn((hZ(),new qw(new Fw(NFt.d))));n.postMessage({id:e.id,data:c});break;case"register":OVn(e.algorithms),n.postMessage({id:e.id});break;case"layout":Vqn(e.graph,e.layoutOptions||{},e.options||{}),n.postMessage({id:e.id,data:e.graph})}},this.saveDispatch=function(e){try{t.dispatch(e)}catch(i){n.postMessage({id:e.data.id,error:i})}}}function e(t){var e=this;this.dispatcher=new n({postMessage:function(n){e.onmessage({data:n})}}),this.postMessage=function(n){setTimeout((function(){e.dispatcher.saveDispatch({data:n})}),0)}}if(mj(),typeof document===r2n&&typeof self!==r2n){var r=new n(self);self.onmessage=r.saveDispatch}else typeof t!==r2n&&t.exports&&(Object.defineProperty(i,"__esModule",{value:!0}),t.exports={default:e,Worker:e})}function RJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(zsn(h=new gMn(e),t),kfn(h,(GYn(),rmt),t),h.o.a=t.g,h.o.b=t.f,h.n.a=t.i,h.n.b=t.j,kD(e.a,h),vJ(n.a,t,h),(0!=(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a).i||oM(gK(zDn(t,(jYn(),sMt)))))&&kfn(h,Cpt,(qx(),!0)),s=uG(oIn(e,Hpt),21),(f=uG(oIn(h,(jYn(),JMt)),101))==($Pn(),sRt)?kfn(h,JMt,uRt):f!=uRt&&s.Fc((r_n(),rpt)),l=0,i=uG(oIn(e,Byt),88),u=new DD((!t.c&&(t.c=new fV(wFt,t,9,9)),t.c));u.e!=u.i.gc();)o=uG(Zkn(u),123),(xA(zDn(r=R0(t),Syt))!==xA((yvn(),Fjt))||xA(zDn(r,Fyt))===xA((kvn(),lgt))||xA(zDn(r,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(r,Cyt)))||xA(zDn(r,kyt))!==xA((Uvn(),tbt))||xA(zDn(r,yMt))===xA((THn(),Pjt))||xA(zDn(r,yMt))===xA((THn(),Cjt))||xA(zDn(r,MMt))===xA((MKn(),JTt))||xA(zDn(r,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(t,jyt)))&&Myn(o,imt,xwn(l++)),oM(gK(zDn(o,FMt)))||mQn(n,o,h,s,i,f);for(a=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));a.e!=a.i.gc();)!oM(gK(zDn(c=uG(Zkn(a),135),FMt)))&&c.a&&kD(h.b,own(c));return oM(gK(oIn(h,gyt)))&&s.Fc((r_n(),Zgt)),oM(gK(oIn(h,uMt)))&&(s.Fc((r_n(),ipt)),s.Fc(ept),kfn(h,JMt,uRt)),h}function KJn(n,t,i,r,c,a,o){var u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A;for(g=0,P=0,h=new Ww(n.b);h.ag&&(a&&(cL(T,w),cL(E,xwn(f.b-1)),kD(n.d,d),u.c.length=0),O=i.b,A+=w+t,w=0,l=e.Math.max(l,i.b+i.c+I)),mv(u.c,s),uyn(s,O,A),l=e.Math.max(l,O+I+i.c),w=e.Math.max(w,b),O+=I+t,d=s;if(Ohn(n.a,u),kD(n.d,uG(zq(u,u.c.length-1),163)),l=e.Math.max(l,r),(C=A+w+i.a)r.d.d+r.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))),i.b!=i.d.c&&(t=e);f&&(c=uG(cQ(n.f,a.d.i),60),t.bc.d.d+c.d.a?f.f.d=!0:(f.f.d=!0,f.f.a=!0))}for(o=new Fz(ix(qgn(b).a.Kc(),new h));hDn(o);)0!=(a=uG(N9(o),18)).a.b&&(t=uG(pR(a.a),8),a.d.j==(KQn(),yRt)&&((g=new Hqn(t,new MO(t.a,r.d.d),r,a)).f.a=!0,g.a=a.d,mv(d.c,g)),a.d.j==KRt&&((g=new Hqn(t,new MO(t.a,r.d.d+r.d.a),r,a)).f.d=!0,g.a=a.d,mv(d.c,g)))}return d}function GJn(n,t,e){var i,r,c,a,o,u,s,h,f,l;for(u=new Zm,f=t.length,a=Ffn(e),s=0;s=w&&(m>w&&(b.c.length=0,w=m),mv(b.c,a));0!=b.c.length&&(l=uG(zq(b,iMn(t,b.c.length)),131),P.a.Bc(l),l.s=d++,Vxn(l,E,M),b.c.length=0)}for(k=n.c.length+1,o=new Ww(n);o.aS.s&&(LQ(e),men(S.i,i),i.c>0&&(i.a=S,kD(S.t,i),i.b=T,kD(T.i,i)))}function zJn(n,t,e,i,r){var c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(w=new R7(t.b),m=new R7(t.b),l=new R7(t.b),M=new R7(t.b),d=new R7(t.b),y=Fkn(t,0);y.b!=y.d.c;)for(o=new Ww((v=uG(I6(y),12)).g);o.a0,g=v.g.c.length>0,s&&g?mv(l.c,v):s?mv(w.c,v):g&&mv(m.c,v);for(b=new Ww(w);b.av.nh()-h.b&&(b=v.nh()-h.b),w>v.oh()-h.d&&(w=v.oh()-h.d),f0){for(k=Fkn(n.f,0);k.b!=k.d.c;)uG(I6(k),10).p+=w-n.e;kAn(n),BY(n.f),O_n(n,r,d)}else{for(aq(n.f,d),d.p=r,n.e=e.Math.max(n.e,r),a=new Fz(ix(qgn(d).a.Kc(),new h));hDn(a);)(c=uG(N9(a),18)).c.i.c||c.c.i.k!=(zIn(),bbt)||(aq(n.f,c.c.i),c.c.i.p=r-1);n.c=r}else kAn(n),BY(n.f),r=0,hDn(new Fz(ix(qgn(d).a.Kc(),new h)))?O_n(n,r=(w=Pyn(w=0,d))+2,d):(aq(n.f,d),d.p=0,n.e=e.Math.max(n.e,0),n.b=uG(zq(n.d.b,0),30),n.c=0);for(0==n.f.b||kAn(n),n.d.a.c.length=0,v=new Zm,f=new Ww(n.d.b);f.a=48&&t<=57))throw hv(new CM(rZn((t$(),Nit))));for(i=t-48;r=48&&t<=57;)if((i=10*i+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(e=i,44==t){if(r>=n.j)throw hv(new CM(rZn((t$(),Dit))));if((t=VJ(n.i,r++))>=48&&t<=57){for(e=t-48;r=48&&t<=57;)if((e=10*e+t-48)<0)throw hv(new CM(rZn((t$(),Rit))));if(i>e)throw hv(new CM(rZn((t$(),xit))))}else e=-1}if(125!=t)throw hv(new CM(rZn((t$(),$it))));n.bm(r)?(QYn(),QYn(),c=new n8(9,c),n.d=r+1):(QYn(),QYn(),c=new n8(3,c),n.d=r),c.Om(i),c.Nm(e),EYn(n)}}return c}function iYn(n){var t,e,i;switch(e=uG(oIn(n,(GYn(),Hpt)),21),t=aN(klt),uG(oIn(n,(jYn(),rMt)),346)==(Own(),Ixt)&&gsn(t,ylt),oM(gK(oIn(n,eMt)))?Aq(t,(uIn(),Tlt),(zYn(),Iwt)):Aq(t,(uIn(),Elt),(zYn(),Iwt)),null!=oIn(n,(K7(),jNt))&&gsn(t,Mlt),(oM(gK(oIn(n,fMt)))||oM(gK(oIn(n,iMt))))&&wz(t,(uIn(),Plt),(zYn(),Ubt)),uG(oIn(n,Byt),88).g){case 2:case 3:case 4:wz(Aq(t,(uIn(),Tlt),(zYn(),qbt)),Plt,Gbt)}switch(e.Hc((r_n(),Zgt))&&wz(Aq(Aq(t,(uIn(),Tlt),(zYn(),Hbt)),Slt,_bt),Plt,Bbt),xA(oIn(n,yMt))!==xA((THn(),$jt))&&Aq(t,(uIn(),Elt),(zYn(),ywt)),e.Hc(apt)&&(Aq(t,(uIn(),Tlt),(zYn(),Pwt)),Aq(t,jlt,Ewt),Aq(t,Elt,Swt)),xA(oIn(n,vyt))!==xA((RIn(),Vgt))&&xA(oIn(n,Vyt))!==xA((_gn(),sxt))&&wz(t,(uIn(),Plt),(zYn(),rwt)),oM(gK(oIn(n,aMt)))&&Aq(t,(uIn(),Elt),(zYn(),iwt)),oM(gK(oIn(n,Ryt)))&&Aq(t,(uIn(),Elt),(zYn(),Dwt)),CRn(n)&&(i=(xA(oIn(n,rMt))===xA(Ixt)?uG(oIn(n,Oyt),298):uG(oIn(n,Ayt),298))==(ihn(),fpt)?(zYn(),jwt):(zYn(),Kwt),Aq(t,(uIn(),Slt),i)),uG(oIn(n,qTt),388).g){case 1:Aq(t,(uIn(),Slt),(zYn(),xwt));break;case 2:wz(Aq(Aq(t,(uIn(),Elt),(zYn(),xbt)),Slt,Rbt),Plt,Kbt)}return xA(oIn(n,Syt))!==xA((yvn(),Fjt))&&Aq(t,(uIn(),Elt),(zYn(),Rwt)),t}function rYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v;if(PV(n.a,t)){if(cS(uG(cQ(n.a,t),49),e))return 1}else vJ(n.a,t,new ek);if(PV(n.a,e)){if(cS(uG(cQ(n.a,e),49),t))return-1}else vJ(n.a,e,new ek);if(PV(n.e,t)){if(cS(uG(cQ(n.e,t),49),e))return-1}else vJ(n.e,t,new ek);if(PV(n.e,e)){if(cS(uG(cQ(n.a,e),49),t))return 1}else vJ(n.e,e,new ek);if(n.c==(yvn(),_jt)||!vR(t,(GYn(),imt))||!vR(e,(GYn(),imt))){for(f=null,s=new Ww(t.j);s.a(a=_Sn(n,e))?uHn(n,t,e):uHn(n,e,t),ra?1:0}return(i=uG(oIn(t,(GYn(),imt)),17).a)>(c=uG(oIn(e,imt),17).a)?uHn(n,t,e):uHn(n,e,t),ic?1:0}function cYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d;if(null==e)return null;if(n.a!=t.jk())throw hv(new vM(tet+t.xe()+eet));if(F$(t,468)){if(!(d=y_n(uG(t,685),e)))throw hv(new vM(iet+e+"' is not a valid enumerator of '"+t.xe()+"'"));return d}switch(tdn((gAn(),kBt),t).Nl()){case 2:e=yXn(e,!1);break;case 3:e=yXn(e,!0)}if(i=tdn(kBt,t).Jl())return i.jk().wi().ti(i,e);if(f=tdn(kBt,t).Ll()){for(d=new Zm,s=0,h=(u=Fln(e)).length;s1)for(b=new Zx((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a));b.e!=b.i.gc();)$Sn(b);for(d=C,C>k+v?d=k+v:Cy+w?g=y+w:Ik-v&&dy-w&&gC+P?T=C+P:kI+M?j=I+M:yC-P&&TI-M&&ji&&(f=i-1),(l=N+uRn(t,24)*z0n*h-h/2)<0?l=1:l>r&&(l=r-1),gj(),Scn(c=new ns,f),pcn(c,l),ttn((!o.a&&(o.a=new MD(eFt,o,5)),o.a),c)}function lYn(n){hP(n,new hCn(FT(DT(KT(RT(new bu,ant),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new _o))),U4(n,ant,R3n,1.3),U4(n,ant,d4n,(qx(),!1)),U4(n,ant,K3n,fAt),U4(n,ant,o4n,15),U4(n,ant,r9n,Jkn(WOt)),U4(n,ant,p4n,Jkn(eAt)),U4(n,ant,x4n,Jkn(rAt)),U4(n,ant,g4n,Jkn(cAt)),U4(n,ant,m4n,Jkn(tAt)),U4(n,ant,w4n,Jkn(aAt)),U4(n,ant,v4n,Jkn(lAt)),U4(n,ant,J7n,Jkn(pAt)),U4(n,ant,Y7n,Jkn(gAt)),U4(n,ant,Q7n,Jkn(vAt)),U4(n,ant,W7n,Jkn(mAt)),U4(n,ant,Z7n,Jkn(sAt)),U4(n,ant,nnt,Jkn(uAt)),U4(n,ant,tnt,Jkn(oAt)),U4(n,ant,ent,Jkn(dAt)),U4(n,ant,f4n,Jkn(YOt)),U4(n,ant,g9n,Jkn(ZOt)),U4(n,ant,z7n,Jkn(JOt)),U4(n,ant,X7n,Jkn(QOt)),U4(n,ant,V7n,Jkn(nAt)),U4(n,ant,q7n,Jkn(wAt))}function bYn(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(pXn(),j=n.e,w=n.d,r=n.a,0==j)switch(t){case 0:return"0";case 1:return N0n;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(M=new WM).a+=t<0?"0E+":"0E",M.a+=-t,M.a}if(k=Inn(JHt,N1n,28,1+(v=10*w+1+7),15,1),e=v,1==w)if((o=r[0])<0){C=E3(o,L0n);do{d=C,C=bSn(C,10),k[--e]=48+pz($gn(d,Ngn(C,10)))&D1n}while(0!=dwn(C,0))}else{C=o;do{d=C,C=C/10|0,k[--e]=d-10*C+48&D1n}while(0!=C)}else{qGn(r,0,S=Inn(YHt,W1n,28,w,15,1),0,P=w);n:for(;;){for(T=0,s=P-1;s>=0;s--)p=JPn(Lgn(Nz(T,32),E3(S[s],L0n))),S[s]=pz(p),T=pz($z(p,32));m=pz(T),g=e;do{k[--e]=48+m%10&D1n}while(0!=(m=m/10|0)&&0!=e);for(i=9-g+e,u=0;u0;u++)k[--e]=48;for(f=P-1;0==S[f];f--)if(0==f)break n;P=f+1}for(;48==k[e];)++e}if(b=j<0,a=v-e-t-1,0==t)return b&&(k[--e]=45),mvn(k,e,v-e);if(t>0&&a>=-6){if(a>=0){for(h=e+a,l=v-1;l>=h;l--)k[l+1]=k[l];return k[++h]=46,b&&(k[--e]=45),mvn(k,e,v-e+1)}for(f=2;f<1-a;f++)k[--e]=48;return k[--e]=46,k[--e]=48,b&&(k[--e]=45),mvn(k,e,v-e)}return E=e+1,c=v,y=new QM,b&&(y.a+="-"),c-E>=1?(jQ(y,k[e]),y.a+=".",y.a+=mvn(k,e+1,v-e-1)):y.a+=mvn(k,e,v-e),y.a+="E",a>0&&(y.a+="+"),y.a+=""+a,y.a}function wYn(n,t){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y;switch(n.c=t,n.g=new Ym,vP(),Apn(new Ad(new Vy(n.c))),m=mK(zDn(n.c,(fIn(),dLt))),o=uG(zDn(n.c,pLt),324),k=uG(zDn(n.c,mLt),437),c=uG(zDn(n.c,hLt),489),v=uG(zDn(n.c,gLt),438),n.j=uM(pK(zDn(n.c,vLt))),a=n.a,o.g){case 0:a=n.a;break;case 1:a=n.b;break;case 2:a=n.i;break;case 3:a=n.e;break;case 4:a=n.f;break;default:throw hv(new vM(lnt+(null!=o.f?o.f:""+o.g)))}if(n.d=new i0(a,k,c),kfn(n.d,(rsn(),Oht),gK(zDn(n.c,lLt))),n.d.c=oM(gK(zDn(n.c,fLt))),0==wZ(n.c).i)return n.d;for(h=new DD(wZ(n.c));h.e!=h.i.gc();){for(l=(s=uG(Zkn(h),27)).g/2,f=s.f/2,y=new MO(s.i+l,s.j+f);PV(n.g,y);)KR(y,(e.Math.random()-.5)*t4n,(e.Math.random()-.5)*t4n);w=uG(zDn(s,(XYn(),$$t)),140),d=new G0(y,new gY(y.a-l-n.j/2-w.b,y.b-f-n.j/2-w.d,s.g+n.j+(w.b+w.c),s.f+n.j+(w.d+w.a))),kD(n.d.i,d),vJ(n.g,y,new WO(d,s))}switch(v.g){case 0:if(null==m)n.d.d=uG(zq(n.d.i,0),68);else for(p=new Ww(n.d.i);p.a0?S+1:1);for(a=new Ww(y.g);a.a0?S+1:1)}0==n.c[s]?aq(n.e,d):0==n.a[s]&&aq(n.f,d),++s}for(w=-1,b=1,f=new Zm,n.d=uG(oIn(t,(GYn(),dmt)),234);A>0;){for(;0!=n.e.b;)C=uG(tG(n.e),10),n.b[C.p]=w--,iUn(n,C),--A;for(;0!=n.f.b;)I=uG(tG(n.f),10),n.b[I.p]=b++,iUn(n,I),--A;if(A>0){for(l=j1n,m=new Ww(v);m.a=l&&(k>l&&(f.c.length=0,l=k),mv(f.c,d));h=n.sg(f),n.b[h.p]=b++,iUn(n,h),--A}}for(P=v.c.length+1,s=0;sn.b[O]&&(pqn(i,!0),kfn(t,Lpt,(qx(),!0)));n.a=null,n.c=null,n.b=null,BY(n.f),BY(n.e),e.Vg()}function pYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T;for(M=uG(zrn((!n.a&&(n.a=new fV(oFt,n,6,6)),n.a),0),166),f=new Uk,y=new Ym,T=sGn(M),VAn(y.f,M,T),b=new Ym,r=new lS,d=OV(zcn(Uhn(cT(vat,1),EZn,20,0,[(!t.d&&(t.d=new f_(aFt,t,8,5)),t.d),(!t.e&&(t.e=new f_(aFt,t,7,4)),t.e)])));hDn(d);){if(w=uG(N9(d),74),1!=(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i)throw hv(new vM(Ptt+(!n.a&&(n.a=new fV(oFt,n,6,6)),n.a).i));w!=n&&(s8(r,p=uG(zrn((!w.a&&(w.a=new fV(oFt,w,6,6)),w.a),0),166),r.c.b,r.c),(g=uG(DA(FX(y.f,p)),13))||(g=sGn(p),VAn(y.f,p,g)),l=i?YF(new eN(uG(zq(T,T.c.length-1),8)),uG(zq(g,g.c.length-1),8)):YF(new eN((u3(0,T.c.length),uG(T.c[0],8))),(u3(0,g.c.length),uG(g.c[0],8))),VAn(b.f,p,l))}if(0!=r.b)for(m=uG(zq(T,i?T.c.length-1:0),8),h=1;h1&&s8(f,m,f.c.b,f.c),yrn(c)));m=v}return f}function mYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S;for(e.Ug(o7n,1),S=uG(l8(JJ(new fX(null,new h3(t,16)),new wo),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),h=uG(l8(JJ(new fX(null,new h3(t,16)),new Lp(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),w=uG(l8(JJ(new fX(null,new h3(t,16)),new Ap(t)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[Iut]))),15),d=Inn(lPt,z9n,39,t.gc(),0,1),a=0;a=0&&E=0&&!d[b]){d[b]=r,h.gd(o),--o;break}if((b=E-l)=0&&!d[b]){d[b]=r,h.gd(o),--o;break}}for(w.jd(new go),u=d.length-1;u>=0;u--)d[u]||w.dc()||(d[u]=uG(w.Xb(0),39),w.gd(0));for(s=0;s=0;u--)aq(e,(u3(u,a.c.length),uG(a.c[u],8)));return e}function kYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(v=uM(pK(zDn(t,(lBn(),POt)))),b=uM(pK(zDn(t,EOt))),l=uM(pK(zDn(t,MOt))),Non((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a)),p=uzn((!t.a&&(t.a=new fV(bFt,t,10,11)),t.a),v,n.b),g=0;gl&&uEn((u3(l,t.c.length),uG(t.c[l],186)),h),h=null;t.c.length>l&&0==(u3(l,t.c.length),uG(t.c[l],186)).a.c.length;)men(t,(u3(l,t.c.length),t.c[l]));if(!h){--a;continue}if(!oM(gK(uG(zq(h.b,0),27).of((S_n(),nAt))))&&HUn(t,w,c,h,g,e,l,i)){d=!0;continue}if(g){if(b=w.b,f=h.f,!oM(gK(uG(zq(h.b,0),27).of(nAt)))&&EVn(t,w,c,h,e,l,i,r)){if(d=!0,b=n.j)return n.a=-1,void(n.c=1);if(t=VJ(n.i,n.d++),n.a=t,1!=n.b){switch(t){case 124:i=2;break;case 42:i=3;break;case 43:i=4;break;case 63:i=5;break;case 41:i=7;break;case 46:i=8;break;case 91:i=9;break;case 94:i=11;break;case 36:i=12;break;case 40:if(i=6,n.d>=n.j)break;if(63!=VJ(n.i,n.d))break;if(++n.d>=n.j)throw hv(new CM(rZn((t$(),iit))));switch(t=VJ(n.i,n.d++)){case 58:i=13;break;case 61:i=14;break;case 33:i=15;break;case 91:i=19;break;case 62:i=18;break;case 60:if(n.d>=n.j)throw hv(new CM(rZn((t$(),iit))));if(61==(t=VJ(n.i,n.d++)))i=16;else{if(33!=t)throw hv(new CM(rZn((t$(),rit))));i=17}break;case 35:for(;n.d=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;default:i=0}n.c=i}else{switch(t){case 92:if(i=10,n.d>=n.j)throw hv(new CM(rZn((t$(),eit))));n.a=VJ(n.i,n.d++);break;case 45:512==(512&n.e)&&n.df&&(f=d.e.a+d.f.a+b),l=f+u.f.a;break;case 4:f=g.b-b-u.f.b,d.e.b-b-u.f.bf&&(f=d.e.b+d.f.b+b),l=f+u.f.b}else if(d)switch(r.g){case 2:l=(f=d.e.a-b-u.f.a)+u.f.a;break;case 1:l=(f=d.e.a+d.f.a+b)+u.f.a;break;case 4:l=(f=d.e.b-b-u.f.b)+u.f.b;break;case 3:l=(f=d.e.b+d.f.b+b)+u.f.b}xA(oIn(t,uCt))===xA((Pln(),wPt))?(c=f,a=l,null!=(o=lln(JJ(new fX(null,new h3(n.a,16)),new GI(c,a)))).a?r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f:null!=(o=r==(xdn(),JDt)||r==nxt?lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Ep(c))):lln(JJ(Wrn(new fX(null,new h3(n.a,16))),new Sp(c)))).a&&(r==JDt||r==YDt?u.e.a=uM(pK((MK(null!=o.a),uG(o.a,42)).a)):u.e.b=uM(pK((MK(null!=o.a),uG(o.a,42)).a))),null!=o.a&&(h=Ten(n.a,(MK(null!=o.a),o.a),0))>0&&h!=uG(oIn(u,ACt),17).a&&(kfn(u,MPt,(qx(),!0)),kfn(u,ACt,xwn(h)))):r==(xdn(),JDt)||r==YDt?u.e.a=f:u.e.b=f}e.Vg()}}function PYn(n){var t,e,i,r,c,a,o,u;for(n.b=1,EYn(n),t=null,0==n.c&&94==n.a?(EYn(n),QYn(),QYn(),HFn(t=new K3(4),0,zct),a=new K3(4)):(QYn(),QYn(),a=new K3(4)),r=!0;1!=(u=n.c);){if(0==u&&93==n.a&&!r){t&&(lWn(t,a),a=t);break}if(e=n.a,i=!1,10==u)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:TXn(a,MUn(e)),i=!0;break;case 105:case 73:case 99:case 67:TXn(a,MUn(e)),(e=-1)<0&&(i=!0);break;case 112:case 80:if(!(o=PNn(n,e)))throw hv(new CM(rZn((t$(),git))));TXn(a,o),i=!0;break;default:e=R_n(n)}else if(24==u&&!r){if(t&&(lWn(t,a),a=t),lWn(a,PYn(n)),0!=n.c||93!=n.a)throw hv(new CM(rZn((t$(),kit))));break}if(EYn(n),!i){if(0==u){if(91==e)throw hv(new CM(rZn((t$(),yit))));if(93==e)throw hv(new CM(rZn((t$(),Mit))));if(45==e&&!r&&93!=n.a)throw hv(new CM(rZn((t$(),Tit))))}if(0!=n.c||45!=n.a||45==e&&r)HFn(a,e,e);else{if(EYn(n),1==(u=n.c))throw hv(new CM(rZn((t$(),mit))));if(0==u&&93==n.a)HFn(a,e,e),HFn(a,45,45);else{if(0==u&&93==n.a||24==u)throw hv(new CM(rZn((t$(),Tit))));if(c=n.a,0==u){if(91==c)throw hv(new CM(rZn((t$(),yit))));if(93==c)throw hv(new CM(rZn((t$(),Mit))));if(45==c)throw hv(new CM(rZn((t$(),Tit))))}else 10==u&&(c=R_n(n));if(EYn(n),e>c)throw hv(new CM(rZn((t$(),Sit))));HFn(a,e,c)}}}r=!1}if(1==n.c)throw hv(new CM(rZn((t$(),mit))));return pxn(a),szn(a),n.b=0,EYn(n),a}function CYn(n,t,e){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M;if(e.Ug("Coffman-Graham Layering",1),0!=t.a.c.length){for(M=uG(oIn(t,(jYn(),wMt)),17).a,u=0,a=0,b=new Ww(t.a);b.a=M||!cvn(m,i))&&(i=CJ(t,f)),a2(m,i),c=new Fz(ix(qgn(m).a.Kc(),new h));hDn(c);)r=uG(N9(c),18),n.a[r.p]||(g=r.c.i,--n.e[g.p],0==n.e[g.p]&&kG(_Cn(w,g),D0n));for(s=f.c.length-1;s>=0;--s)kD(t.b,(u3(s,f.c.length),uG(f.c[s],30)));t.a.c.length=0,e.Vg()}else e.Vg()}function IYn(n,t){var e,i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k;k=!1;do{for(k=!1,c=t?new Lw(n.a.b).a.gc()-2:1;t?c>=0:cuG(oIn(g,imt),17).a)&&(v=!1);if(v){for(o=t?c+1:c-1,a=!1,m=!0,i=!1,s=Fkn(W6(n.a,xwn(o)),0);s.b!=s.d.c;)vR(u=uG(I6(s),10),imt)?u.p!=f.p&&(a|=t?uG(oIn(u,imt),17).auG(oIn(f,imt),17).a,m=!1):!a&&m&&u.k==(zIn(),bbt)&&(i=!0,(l=t?uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i:uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i)==f&&(e=t?uG(N9(new Fz(ix(Xgn(u).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(u).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,l),17).a:uG(ER(n.a,l),17).a-uG(ER(n.a,e),17).a)<=2&&(m=!1)));if(i&&m&&(e=t?uG(N9(new Fz(ix(Xgn(f).a.Kc(),new h))),18).d.i:uG(N9(new Fz(ix(qgn(f).a.Kc(),new h))),18).c.i,(t?uG(ER(n.a,e),17).a-uG(ER(n.a,f),17).a:uG(ER(n.a,f),17).a-uG(ER(n.a,e),17).a)<=2&&e.k==(zIn(),dbt)&&(m=!1)),a||m){for(d=SRn(n,f,t);0!=d.a.gc();)w=uG(d.a.ec().Kc().Pb(),10),d.a.Bc(w),Qon(d,SRn(n,w,t));--b,k=!0}}}}while(k)}function OYn(n){Hxn(n.c,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#decimal"])),Hxn(n.d,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#integer"])),Hxn(n.e,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#boolean"])),Hxn(n.f,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EBoolean",Bet,"EBoolean:Object"])),Hxn(n.i,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#byte"])),Hxn(n.g,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Hxn(n.j,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EByte",Bet,"EByte:Object"])),Hxn(n.n,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EChar",Bet,"EChar:Object"])),Hxn(n.t,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#double"])),Hxn(n.u,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EDouble",Bet,"EDouble:Object"])),Hxn(n.F,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#float"])),Hxn(n.G,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EFloat",Bet,"EFloat:Object"])),Hxn(n.I,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#int"])),Hxn(n.J,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EInt",Bet,"EInt:Object"])),Hxn(n.N,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#long"])),Hxn(n.O,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"ELong",Bet,"ELong:Object"])),Hxn(n.Z,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#short"])),Hxn(n.$,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"EShort",Bet,"EShort:Object"])),Hxn(n._,Ert,Uhn(cT($ot,1),zZn,2,6,[Krt,"http://www.w3.org/2001/XMLSchema#string"]))}function AYn(n,t,e,i,r,c,a){var o,u,s,h,f,l,b,w;return l=uG(i.a,17).a,b=uG(i.b,17).a,f=n.b,w=n.c,o=0,h=0,t==(xdn(),JDt)||t==YDt?(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new mo),new Ya))),f.e.b+f.f.b/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new pO(r,s)),new Za))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new mO(r,u)),new no)))))):(h=$I(jdn(ZJ(YJ(new fX(null,new h3(e.b,16)),new ro),new Ja))),f.e.a+f.f.a/2>h?(s=++b,o=uM(pK(yx(Wz(YJ(new fX(null,new h3(e.b,16)),new dO(r,s)),new to))))):(u=++l,o=uM(pK(yx(Qz(YJ(new fX(null,new h3(e.b,16)),new gO(r,u)),new eo)))))),t==JDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),DPt))))-r,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,o)),cL(n.a,new MO(w.e.a+w.f.a+r+c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a+w.f.a,w.e.b+w.f.b/2))):t==YDt?(cL(n.a,new MO(uM(pK(oIn(f,(OQn(),$Pt))))+r,f.e.b+f.f.b/2)),cL(n.a,new MO(f.e.a+f.f.a+r,o)),cL(n.a,new MO(w.e.a-r-c,o)),cL(n.a,new MO(w.e.a-r-c,w.e.b+w.f.b/2)),cL(n.a,new MO(w.e.a,w.e.b+w.f.b/2))):t==nxt?(cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),DPt))))-r)),cL(n.a,new MO(o,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r+c)),cL(n.a,new MO(w.e.a+w.f.a/2,w.e.b+w.f.b+r))):(0==n.a.b||(uG(pR(n.a),8).b=uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a),cL(n.a,new MO(o,uM(pK(oIn(f,(OQn(),$Pt))))+r*uG(a.b,17).a)),cL(n.a,new MO(o,w.e.b-r*uG(a.a,17).a-c))),new WO(xwn(l),xwn(b))}function LYn(n){var t,e,i,r,c,a,o,u,s,h,f,l,b;if(a=!0,f=null,i=null,r=null,t=!1,b=HFt,s=null,c=null,(u=jkn(n,o=0,YFt,ZFt))=0&&m_(n.substr(o,2),"//")?(Knn(o+=2,u=jkn(n,o,n_t,t_t),n.length),i=n.substr(o,u-o),o=u):null==f||o!=n.length&&(s3(o,n.length),47==n.charCodeAt(o))||(a=!1,-1==(u=cx(n,$Cn(35),o))&&(u=n.length),Knn(o,u,n.length),i=n.substr(o,u-o),o=u);if(!e&&o0&&58==VJ(h,h.length-1)&&(r=h,o=u)),ouxn(c))&&(f=c);for(!f&&(u3(0,d.c.length),f=uG(d.c[0],185)),w=new Ww(t.b);w.al&&(P=0,C+=f+T,f=0),rUn(y,o,P,C),t=e.Math.max(t,P+M.a),f=e.Math.max(f,M.b),P+=M.a+T;for(k=new Ym,i=new Ym,E=new Ww(n);E.a=-1900?1:0,JA(n,e>=4?Uhn(cT($ot,1),zZn,2,6,[Q1n,J1n])[a]:Uhn(cT($ot,1),zZn,2,6,["BC","AD"])[a]);break;case 121:Kkn(n,e,i);break;case 77:tUn(n,e,i);break;case 107:Fen(n,0==(o=r.q.getHours())?24:o,e);break;case 83:PRn(n,e,r);break;case 69:u=i.q.getDay(),JA(n,5==e?Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[u]:4==e?Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[u]:Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[u]);break;case 97:r.q.getHours()>=12&&r.q.getHours()<24?JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[1]):JA(n,Uhn(cT($ot,1),zZn,2,6,["AM","PM"])[0]);break;case 104:Fen(n,0==(s=r.q.getHours()%12)?12:s,e);break;case 75:Fen(n,r.q.getHours()%12,e);break;case 72:Fen(n,r.q.getHours(),e);break;case 99:h=i.q.getDay(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["S","M","T","W","T","F","S"])[h]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[Y1n,Z1n,n0n,t0n,e0n,i0n,r0n])[h]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[h]):Fen(n,h,1);break;case 76:f=i.q.getMonth(),5==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[f]):4==e?JA(n,Uhn(cT($ot,1),zZn,2,6,[x1n,R1n,K1n,F1n,_1n,B1n,H1n,U1n,G1n,q1n,X1n,z1n])[f]):3==e?JA(n,Uhn(cT($ot,1),zZn,2,6,["Jan","Feb","Mar","Apr",_1n,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[f]):Fen(n,f+1,e);break;case 81:l=i.q.getMonth()/3|0,JA(n,e<4?Uhn(cT($ot,1),zZn,2,6,["Q1","Q2","Q3","Q4"])[l]:Uhn(cT($ot,1),zZn,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[l]);break;case 100:Fen(n,i.q.getDate(),e);break;case 109:Fen(n,r.q.getMinutes(),e);break;case 115:Fen(n,r.q.getSeconds(),e);break;case 122:JA(n,e<4?c.c[0]:c.c[1]);break;case 118:JA(n,c.b);break;case 90:JA(n,e<3?GLn(c):3==e?rNn(c):cNn(c.a));break;default:return!1}return!0}function FYn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C;if(iHn(t),u=uG(zrn((!t.b&&(t.b=new f_(cFt,t,4,7)),t.b),0),84),h=uG(zrn((!t.c&&(t.c=new f_(cFt,t,5,8)),t.c),0),84),o=lCn(u),s=lCn(h),a=0==(!t.a&&(t.a=new fV(oFt,t,6,6)),t.a).i?null:uG(zrn((!t.a&&(t.a=new fV(oFt,t,6,6)),t.a),0),166),M=uG(cQ(n.a,o),10),S=uG(cQ(n.a,s),10),T=null,P=null,F$(u,193)&&(F$(y=uG(cQ(n.a,u),304),12)?T=uG(y,12):F$(y,10)&&(M=uG(y,10),T=uG(zq(M.j,0),12))),F$(h,193)&&(F$(E=uG(cQ(n.a,h),304),12)?P=uG(E,12):F$(E,10)&&(S=uG(E,10),P=uG(zq(S.j,0),12))),!M||!S)throw hv(new EM("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(zsn(d=new UZ,t),kfn(d,(GYn(),rmt),t),kfn(d,(jYn(),bMt),null),b=uG(oIn(i,Hpt),21),M==S&&b.Fc((r_n(),opt)),T||(can(),k=Wjt,j=null,a&&sN(uG(oIn(M,JMt),101))&&($5(j=new MO(a.j,a.k),s0(t)),Q8(j,e),Ern(s,o)&&(k=Vjt,JF(j,M.n))),T=LXn(M,j,k,i)),P||(can(),k=Vjt,C=null,a&&sN(uG(oIn(S,JMt),101))&&($5(C=new MO(a.b,a.c),s0(t)),Q8(C,e)),P=LXn(S,C,k,HQ(S))),c2(d,T),u2(d,P),(T.e.c.length>1||T.g.c.length>1||P.e.c.length>1||P.g.c.length>1)&&b.Fc((r_n(),ept)),l=new DD((!t.n&&(t.n=new fV(lFt,t,1,7)),t.n));l.e!=l.i.gc();)if(!oM(gK(zDn(f=uG(Zkn(l),135),FMt)))&&f.a)switch(g=own(f),kD(d.b,g),uG(oIn(g,Xyt),278).g){case 1:case 2:b.Fc((r_n(),npt));break;case 0:b.Fc((r_n(),Ygt)),kfn(g,Xyt,(Zrn(),ixt))}if(c=uG(oIn(i,Kyt),322),p=uG(oIn(i,$Mt),323),r=c==(jan(),Ydt)||p==(pyn(),kjt),a&&0!=(!a.a&&(a.a=new MD(eFt,a,5)),a.a).i&&r){for(m=COn(a),w=new Uk,v=Fkn(m,0);v.b!=v.d.c;)aq(w,new eN(uG(I6(v),8)));kfn(d,cmt,w)}return d}function _Yn(n,t,e,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I;for(j=0,E=0,M=new Ym,k=uG(yx(Wz(YJ(new fX(null,new h3(n.b,16)),new io),new fo)),17).a+1,T=Inn(YHt,W1n,28,k,15,1),d=Inn(YHt,W1n,28,k,15,1),w=0;w1)for(o=P+1;ou.b.e.b*(1-g)+u.c.e.b*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),39).e),uG(y.Xb(y.gc()-1),39).f),f=JF(D$(uG(y.Xb(0),39).e),uG(y.Xb(0),39).f),b>=y.gc()-1&&C.b>m.b&&u.c.e.b>m.b)continue;if(b<=0&&C.bu.b.e.a*(1-g)+u.c.e.a*g));b++);if(y.gc()>0){if(C=0==u.a.b?D$(u.b.e):uG(pR(u.a),8),m=JF(D$(uG(y.Xb(y.gc()-1),39).e),uG(y.Xb(y.gc()-1),39).f),f=JF(D$(uG(y.Xb(0),39).e),uG(y.Xb(0),39).f),b>=y.gc()-1&&C.a>m.a&&u.c.e.a>m.a)continue;if(b<=0&&C.a=uM(pK(oIn(n,(OQn(),CPt))))&&++E):(l.f&&l.d.e.a<=uM(pK(oIn(n,(OQn(),PPt))))&&++j,l.g&&l.c.e.a+l.c.f.a>=uM(pK(oIn(n,(OQn(),SPt))))&&++E)}else 0==v?hNn(u):v<0&&(++T[P],++d[I],j=uG((S=AYn(u,t,n,new WO(xwn(j),xwn(E)),e,i,new WO(xwn(d[I]),xwn(T[P])))).a,17).a,E=uG(S.b,17).a)}function BYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m;if(i=t,u=e,n.b&&i.j==(KQn(),_Rt)&&u.j==(KQn(),_Rt)&&(m=i,i=u,u=m),PV(n.a,i)){if(cS(uG(cQ(n.a,i),49),u))return 1}else vJ(n.a,i,new ek);if(PV(n.a,u)){if(cS(uG(cQ(n.a,u),49),i))return-1}else vJ(n.a,u,new ek);if(PV(n.d,i)){if(cS(uG(cQ(n.d,i),49),u))return-1}else vJ(n.d,i,new ek);if(PV(n.d,u)){if(cS(uG(cQ(n.a,u),49),i))return 1}else vJ(n.d,u,new ek);if(i.j!=u.j)return-1==(p=bN(i.j,u.j))?hHn(n,u,i):hHn(n,i,u),p;if(0!=i.e.c.length&&0!=u.e.c.length){if(n.b&&0!=(p=Dbn(i,u)))return-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p;if((c=uG(zq(i.e,0),18).c.i)==(h=uG(zq(u.e,0),18).c.i))return(r=uG(oIn(uG(zq(i.e,0),18),(GYn(),imt)),17).a)>(s=uG(oIn(uG(zq(u.e,0),18),imt),17).a)?hHn(n,i,u):hHn(n,u,i),rs?1:0;for(d=0,g=(w=n.c).length;d(s=uG(oIn(l,imt),17).a)?hHn(n,i,u):hHn(n,u,i),rs?1:0):n.b&&0!=(p=Dbn(i,u))?(-1==p?hHn(n,u,i):1==p&&hHn(n,i,u),p):(a=0,f=0,vR(uG(zq(i.g,0),18),imt)&&(a=uG(oIn(uG(zq(i.g,0),18),imt),17).a),vR(uG(zq(u.g,0),18),imt)&&(f=uG(oIn(uG(zq(i.g,0),18),imt),17).a),o&&o==l?oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&!oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,i,u),1):!oM(gK(oIn(uG(zq(i.g,0),18),pmt)))&&oM(gK(oIn(uG(zq(u.g,0),18),pmt)))?(hHn(n,u,i),-1):(a>f?hHn(n,i,u):hHn(n,u,i),af?1:0):(n.f&&(n.f._b(o)&&(a=uG(n.f.xc(o),17).a),n.f._b(l)&&(f=uG(n.f.xc(l),17).a)),a>f?hHn(n,i,u):hHn(n,u,i),af?1:0))):0!=i.e.c.length&&0!=u.g.c.length?(hHn(n,i,u),1):0!=i.g.c.length&&0!=u.e.c.length?(hHn(n,u,i),-1):vR(i,(GYn(),imt))&&vR(u,imt)?((r=uG(oIn(i,imt),17).a)>(s=uG(oIn(u,imt),17).a)?hHn(n,i,u):hHn(n,u,i),rs?1:0):(hHn(n,u,i),-1)}function HYn(n){n.gb||(n.gb=!0,n.b=Nsn(n,0),Von(n.b,18),Won(n.b,19),n.a=Nsn(n,1),Von(n.a,1),Won(n.a,2),Won(n.a,3),Won(n.a,4),Won(n.a,5),n.o=Nsn(n,2),Von(n.o,8),Von(n.o,9),Won(n.o,10),Won(n.o,11),Won(n.o,12),Won(n.o,13),Won(n.o,14),Won(n.o,15),Won(n.o,16),Won(n.o,17),Won(n.o,18),Won(n.o,19),Won(n.o,20),Won(n.o,21),Won(n.o,22),Won(n.o,23),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),rrn(n.o),n.p=Nsn(n,3),Von(n.p,2),Von(n.p,3),Von(n.p,4),Von(n.p,5),Won(n.p,6),Won(n.p,7),rrn(n.p),rrn(n.p),n.q=Nsn(n,4),Von(n.q,8),n.v=Nsn(n,5),Won(n.v,9),rrn(n.v),rrn(n.v),rrn(n.v),n.w=Nsn(n,6),Von(n.w,2),Von(n.w,3),Von(n.w,4),Won(n.w,5),n.B=Nsn(n,7),Won(n.B,1),rrn(n.B),rrn(n.B),rrn(n.B),n.Q=Nsn(n,8),Won(n.Q,0),rrn(n.Q),n.R=Nsn(n,9),Von(n.R,1),n.S=Nsn(n,10),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),rrn(n.S),n.T=Nsn(n,11),Won(n.T,10),Won(n.T,11),Won(n.T,12),Won(n.T,13),Won(n.T,14),rrn(n.T),rrn(n.T),n.U=Nsn(n,12),Von(n.U,2),Von(n.U,3),Won(n.U,4),Won(n.U,5),Won(n.U,6),Won(n.U,7),rrn(n.U),n.V=Nsn(n,13),Won(n.V,10),n.W=Nsn(n,14),Von(n.W,18),Von(n.W,19),Von(n.W,20),Won(n.W,21),Won(n.W,22),Won(n.W,23),n.bb=Nsn(n,15),Von(n.bb,10),Von(n.bb,11),Von(n.bb,12),Von(n.bb,13),Von(n.bb,14),Von(n.bb,15),Von(n.bb,16),Won(n.bb,17),rrn(n.bb),rrn(n.bb),n.eb=Nsn(n,16),Von(n.eb,2),Von(n.eb,3),Von(n.eb,4),Von(n.eb,5),Von(n.eb,6),Von(n.eb,7),Won(n.eb,8),Won(n.eb,9),n.ab=Nsn(n,17),Von(n.ab,0),Von(n.ab,1),n.H=Nsn(n,18),Won(n.H,0),Won(n.H,1),Won(n.H,2),Won(n.H,3),Won(n.H,4),Won(n.H,5),rrn(n.H),n.db=Nsn(n,19),Won(n.db,2),n.c=$sn(n,20),n.d=$sn(n,21),n.e=$sn(n,22),n.f=$sn(n,23),n.i=$sn(n,24),n.g=$sn(n,25),n.j=$sn(n,26),n.k=$sn(n,27),n.n=$sn(n,28),n.r=$sn(n,29),n.s=$sn(n,30),n.t=$sn(n,31),n.u=$sn(n,32),n.fb=$sn(n,33),n.A=$sn(n,34),n.C=$sn(n,35),n.D=$sn(n,36),n.F=$sn(n,37),n.G=$sn(n,38),n.I=$sn(n,39),n.J=$sn(n,40),n.L=$sn(n,41),n.M=$sn(n,42),n.N=$sn(n,43),n.O=$sn(n,44),n.P=$sn(n,45),n.X=$sn(n,46),n.Y=$sn(n,47),n.Z=$sn(n,48),n.$=$sn(n,49),n._=$sn(n,50),n.cb=$sn(n,51),n.K=$sn(n,52))}function UYn(n,t,e){var i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E;for(a=new lS,v=uG(oIn(e,(jYn(),Byt)),88),d=0,Qon(a,(!t.a&&(t.a=new fV(bFt,t,10,11)),t.a));0!=a.b;)(xA(zDn(s=R0(h=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)),Syt))!==xA((yvn(),Fjt))||xA(zDn(s,Fyt))===xA((kvn(),lgt))||xA(zDn(s,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(s,Cyt)))||xA(zDn(s,kyt))!==xA((Uvn(),tbt))||xA(zDn(s,yMt))===xA((THn(),Pjt))||xA(zDn(s,yMt))===xA((THn(),Cjt))||xA(zDn(s,MMt))===xA((MKn(),JTt))||xA(zDn(s,MMt))===xA((MKn(),ZTt)))&&!oM(gK(zDn(h,jyt)))&&Myn(h,(GYn(),imt),xwn(d++)),!oM(gK(zDn(h,FMt)))&&(l=0!=(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a).i,w=oCn(h),b=xA(zDn(h,rMt))===xA((Own(),Ixt)),p=null,(E=!vnn(h,(XYn(),e$t))||L9(mK(zDn(h,e$t))))&&b&&(l||w)&&(kfn(p=PGn(h),Byt,v),vR(p,fTt)&&iM(new omn(uM(pK(oIn(p,fTt)))),p),0!=uG(zDn(h,DMt),181).gc()&&(f=p,kS(new fX(null,(!h.c&&(h.c=new fV(wFt,h,9,9)),new h3(h.c,16))),new Yd(f)),u_n(h,p))),k=e,(y=uG(cQ(n.a,R0(h)),10))&&(k=y.e),g=RJn(n,h,k),p&&(g.e=p,p.e=g,Qon(a,(!h.a&&(h.a=new fV(bFt,h,10,11)),h.a))));for(d=0,s8(a,t,a.c.b,a.c);0!=a.b;){for(u=new DD((!(c=uG(0==a.b?null:(MK(0!=a.b),Lrn(a,a.a.a)),27)).b&&(c.b=new fV(aFt,c,12,3)),c.b));u.e!=u.i.gc();)iHn(o=uG(Zkn(u),74)),(xA(zDn(t,Syt))!==xA((yvn(),Fjt))||xA(zDn(t,Fyt))===xA((kvn(),lgt))||xA(zDn(t,Fyt))===xA((kvn(),hgt))||oM(gK(zDn(t,Cyt)))||xA(zDn(t,kyt))!==xA((Uvn(),tbt))||xA(zDn(t,yMt))===xA((THn(),Pjt))||xA(zDn(t,yMt))===xA((THn(),Cjt))||xA(zDn(t,MMt))===xA((MKn(),JTt))||xA(zDn(t,MMt))===xA((MKn(),ZTt)))&&Myn(o,(GYn(),imt),xwn(d++)),T=lCn(uG(zrn((!o.b&&(o.b=new f_(cFt,o,4,7)),o.b),0),84)),j=lCn(uG(zrn((!o.c&&(o.c=new f_(cFt,o,5,8)),o.c),0),84)),oM(gK(zDn(o,FMt)))||oM(gK(zDn(T,FMt)))||oM(gK(zDn(j,FMt)))||(m=c,BNn(o)&&oM(gK(zDn(T,sMt)))&&oM(gK(zDn(o,hMt)))||Ern(j,T)?m=T:Ern(T,j)&&(m=j),k=e,(y=uG(cQ(n.a,m),10))&&(k=y.e),kfn(FYn(n,o,m,k),(GYn(),Ipt),SFn(n,o,t,e)));if(b=xA(zDn(c,rMt))===xA((Own(),Ixt)))for(r=new DD((!c.a&&(c.a=new fV(bFt,c,10,11)),c.a));r.e!=r.i.gc();)E=!vnn(i=uG(Zkn(r),27),(XYn(),e$t))||L9(mK(zDn(i,e$t))),M=xA(zDn(i,rMt))===xA(Ixt),E&&M&&s8(a,i,a.c.b,a.c)}}function GYn(){var n,t;GYn=E,rmt=new Cm(E4n),Ipt=new Cm("coordinateOrigin"),wmt=new Cm("processors"),Cpt=new uF("compoundNode",(qx(),!1)),qpt=new uF("insideConnections",!1),cmt=new Cm("originalBendpoints"),amt=new Cm("originalDummyNodePosition"),omt=new Cm("originalLabelEdge"),gmt=new Cm("representedLabels"),$pt=new Cm("endLabels"),Dpt=new Cm("endLabel.origin"),Qpt=new uF("labelSide",(Ajn(),Rxt)),emt=new uF("maxEdgeThickness",0),pmt=new uF("reversed",!1),dmt=new Cm(S4n),Zpt=new uF("longEdgeSource",null),nmt=new uF("longEdgeTarget",null),Ypt=new uF("longEdgeHasLabelDummies",!1),Jpt=new uF("longEdgeBeforeLabelDummy",!1),Npt=new uF("edgeConstraint",(Pfn(),kgt)),zpt=new Cm("inLayerLayoutUnit"),Xpt=new uF("inLayerConstraint",(Zen(),gpt)),Vpt=new uF("inLayerSuccessorConstraint",new Zm),Wpt=new uF("inLayerSuccessorConstraintBetweenNonDummies",!1),lmt=new Cm("portDummy"),Opt=new uF("crossingHint",xwn(0)),Hpt=new uF("graphProperties",new nB(t=uG(Mj(bpt),9),uG(MF(t,t.length),9),0)),Fpt=new uF("externalPortSide",(KQn(),FRt)),_pt=new uF("externalPortSize",new sj),Rpt=new Cm("externalPortReplacedDummies"),Kpt=new Cm("externalPortReplacedDummy"),xpt=new uF("externalPortConnections",new nB(n=uG(Mj(YRt),9),uG(MF(n,n.length),9),0)),bmt=new uF(i3n,0),jpt=new Cm("barycenterAssociates"),Pmt=new Cm("TopSideComments"),Ept=new Cm("BottomSideComments"),Ppt=new Cm("CommentConnectionPort"),Gpt=new uF("inputCollect",!1),hmt=new uF("outputCollect",!1),Lpt=new uF("cyclic",!1),Apt=new Cm("crossHierarchyMap"),Smt=new Cm("targetOffset"),new uF("splineLabelSize",new sj),kmt=new Cm("spacings"),fmt=new uF("partitionConstraint",!1),Spt=new Cm("breakingPoint.info"),jmt=new Cm("splines.survivingEdge"),Tmt=new Cm("splines.route.start"),ymt=new Cm("splines.edgeChain"),smt=new Cm("originalPortConstraints"),vmt=new Cm("selfLoopHolder"),Mmt=new Cm("splines.nsPortY"),imt=new Cm("modelOrder"),tmt=new Cm("longEdgeTargetNode"),Bpt=new uF(_6n,!1),mmt=new uF(_6n,!1),Upt=new Cm("layerConstraints.hiddenNodes"),umt=new Cm("layerConstraints.opposidePort"),Emt=new Cm("targetNode.modelOrder")}function qYn(n,t,i,r){var c,a,o,u,s,h,f,l,b,w,d;for(l=Fkn(n.b,0);l.b!=l.d.c;)if(!m_((f=uG(I6(l),39)).c,H9n))for(a=uG(l8(new fX(null,new h3(zNn(f,n),16)),ftn(new V,new z,new en,Uhn(cT(Rut,1),p1n,108,0,[(ybn(),Iut)]))),15),t==(xdn(),JDt)||t==YDt?a.jd(new oo):a.jd(new uo),d=a.gc(),c=0;c0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a+r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a,f.e.b+f.f.b*o))):t==YDt?(h=uM(pK(oIn(f,(OQn(),DPt)))),f.e.a-r>h?cL(uG(a.Xb(c),65).a,new MO(h-i,f.e.b+f.f.b*o)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(s-w)/(e.Math.abs(u-b)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(f.e.a-r/5.3,w>s?f.e.b+f.f.b*o-r/2:f.e.b+f.f.b*o+r/2))),cL(uG(a.Xb(c),65).a,new MO(f.e.a,f.e.b+f.f.b*o))):t==nxt?(h=uM(pK(oIn(f,(OQn(),$Pt)))),f.e.b+f.f.b+r0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b+r/5.3+f.f.b))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b+f.f.b))):(h=uM(pK(oIn(f,(OQn(),DPt)))),uln(uG(a.Xb(c),65),n)?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,uG(pR(uG(a.Xb(c),65).a),8).b)):f.e.b-r>h?cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,h-i)):uG(a.Xb(c),65).a.b>0&&(u=uG(pR(uG(a.Xb(c),65).a),8).a,b=f.e.a+f.f.a/2,s=uG(pR(uG(a.Xb(c),65).a),8).b,w=f.e.b+f.f.b/2,r>0&&e.Math.abs(u-b)/(e.Math.abs(s-w)/40)>50&&cL(uG(a.Xb(c),65).a,new MO(b>u?f.e.a+f.f.a*o-r/2:f.e.a+f.f.a*o+r/2,f.e.b-r/5.3))),cL(uG(a.Xb(c),65).a,new MO(f.e.a+f.f.a*o,f.e.b)))}function XYn(){var n,t;XYn=E,e$t=new Cm(Vnt),yDt=new Cm(Wnt),nMn(),i$t=new mL(X8n,r$t=CNt),new Jm,c$t=new mL(R3n,null),a$t=new Cm(Qnt),ZSn(),b$t=WX(ZNt,Uhn(cT(txt,1),p1n,297,0,[WNt])),l$t=new mL(r9n,b$t),w$t=new mL(q8n,(qx(),!1)),xdn(),d$t=new mL(W8n,g$t=ZDt),_gn(),k$t=new mL(m8n,y$t=fxt),j$t=new mL(Xnt,!1),Own(),E$t=new mL(b8n,S$t=Oxt),Q$t=new CN(12),W$t=new mL(K3n,Q$t),O$t=new mL(f4n,!1),A$t=new mL(g9n,!1),V$t=new mL(w4n,!1),$Pn(),sDt=new mL(l4n,hDt=sRt),mDt=new Cm(b9n),vDt=new Cm(a4n),kDt=new Cm(s4n),TDt=new Cm(h4n),N$t=new Uk,L$t=new mL(c9n,N$t),f$t=new mL(u9n,!1),P$t=new mL(s9n,!1),new Cm(Jnt),D$t=new Nk,$$t=new mL(w9n,D$t),z$t=new mL(U8n,!1),new Jm,MDt=new mL(Ynt,1),h$t=new Cm(Znt),s$t=new Cm(ntt),HDt=new mL(k4n,!1),new mL(ttt,!0),xwn(0),new mL(ett,xwn(100)),new mL(itt,!1),xwn(0),new mL(rtt,xwn(4e3)),xwn(0),new mL(ctt,xwn(400)),new mL(att,!1),new mL(ott,!1),new mL(utt,!0),new mL(stt,!1),qpn(),o$t=new mL(znt,u$t=TKt),jDt=new mL(A8n,10),EDt=new mL(L8n,10),SDt=new mL(D3n,20),PDt=new mL(N8n,10),CDt=new mL(u4n,2),IDt=new mL($8n,10),ADt=new mL(D8n,0),LDt=new mL(K8n,5),NDt=new mL(x8n,1),$Dt=new mL(R8n,1),DDt=new mL(o4n,20),xDt=new mL(F8n,10),FDt=new mL(_8n,10),ODt=new Cm(B8n),KDt=new qL,RDt=new mL(d9n,KDt),Z$t=new Cm(l9n),J$t=new mL(f9n,Y$t=!1),R$t=new CN(5),x$t=new mL(Q8n,R$t),VDn(),t=uG(Mj(eRt),9),F$t=new nB(t,uG(MF(t,t.length),9),0),K$t=new mL(m4n,F$t),Vkn(),tDt=new mL(Z8n,eDt=Zxt),rDt=new Cm(n9n),cDt=new Cm(t9n),aDt=new Cm(e9n),iDt=new Cm(i9n),n=uG(Mj(sKt),9),B$t=new nB(n,uG(MF(n,n.length),9),0),_$t=new mL(p4n,B$t),X$t=ggn((oUn(),eKt)),q$t=new mL(g4n,X$t),G$t=new MO(0,0),U$t=new mL(x4n,G$t),H$t=new mL(d4n,!1),Zrn(),m$t=new mL(a9n,v$t=ixt),p$t=new mL(b4n,!1),new Cm(htt),xwn(1),new mL(ftt,null),oDt=new Cm(h9n),fDt=new Cm(o9n),KQn(),gDt=new mL(G8n,pDt=FRt),uDt=new Cm(H8n),eNn(),wDt=ggn(gRt),bDt=new mL(v4n,wDt),lDt=new mL(J8n,!1),dDt=new mL(Y8n,!0),new Jm,XDt=new mL(y4n,1),VDt=new mL(ltt,null),BDt=new mL(M4n,150),_Dt=new mL(T4n,1.414),UDt=new mL(j4n,null),GDt=new mL(btt,1),C$t=new mL(z8n,!1),I$t=new mL(V8n,!1),M$t=new mL(x3n,1),RCn(),new mL(wtt,T$t=mxt),nDt=!0,Iwn(),zDt=fKt,WDt=fKt,qDt=fKt}function zYn(){zYn=E,qbt=new CC("DIRECTION_PREPROCESSOR",0),Hbt=new CC("COMMENT_PREPROCESSOR",1),Xbt=new CC("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),uwt=new CC("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),Pwt=new CC("PARTITION_PREPROCESSOR",4),lwt=new CC("LABEL_DUMMY_INSERTER",5),Nwt=new CC("SELF_LOOP_PREPROCESSOR",6),pwt=new CC("LAYER_CONSTRAINT_PREPROCESSOR",7),Ewt=new CC("PARTITION_MIDPROCESSOR",8),iwt=new CC("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),ywt=new CC("NODE_PROMOTION",10),gwt=new CC("LAYER_CONSTRAINT_POSTPROCESSOR",11),Swt=new CC("PARTITION_POSTPROCESSOR",12),Zbt=new CC("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),Dwt=new CC("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),xbt=new CC("BREAKING_POINT_INSERTER",15),kwt=new CC("LONG_EDGE_SPLITTER",16),Iwt=new CC("PORT_SIDE_PROCESSOR",17),swt=new CC("INVERTED_PORT_PROCESSOR",18),Cwt=new CC("PORT_LIST_SORTER",19),Rwt=new CC("SORT_BY_INPUT_ORDER_OF_MODEL",20),Twt=new CC("NORTH_SOUTH_PORT_PREPROCESSOR",21),Rbt=new CC("BREAKING_POINT_PROCESSOR",22),jwt=new CC(p6n,23),Kwt=new CC(m6n,24),Awt=new CC("SELF_LOOP_PORT_RESTORER",25),xwt=new CC("SINGLE_EDGE_GRAPH_WRAPPER",26),hwt=new CC("IN_LAYER_CONSTRAINT_PROCESSOR",27),Qbt=new CC("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),fwt=new CC("LABEL_AND_NODE_SIZE_PROCESSOR",29),owt=new CC("INNERMOST_NODE_MARGIN_CALCULATOR",30),$wt=new CC("SELF_LOOP_ROUTER",31),_bt=new CC("COMMENT_NODE_MARGIN_CALCULATOR",32),Vbt=new CC("END_LABEL_PREPROCESSOR",33),wwt=new CC("LABEL_DUMMY_SWITCHER",34),Fbt=new CC("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),dwt=new CC("LABEL_SIDE_SELECTOR",36),cwt=new CC("HYPEREDGE_DUMMY_MERGER",37),nwt=new CC("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),mwt=new CC("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),ewt=new CC("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),Ubt=new CC("CONSTRAINTS_POSTPROCESSOR",41),Bbt=new CC("COMMENT_POSTPROCESSOR",42),awt=new CC("HYPERNODE_PROCESSOR",43),twt=new CC("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),vwt=new CC("LONG_EDGE_JOINER",45),Lwt=new CC("SELF_LOOP_POSTPROCESSOR",46),Kbt=new CC("BREAKING_POINT_REMOVER",47),Mwt=new CC("NORTH_SOUTH_PORT_POSTPROCESSOR",48),rwt=new CC("HORIZONTAL_COMPACTOR",49),bwt=new CC("LABEL_DUMMY_REMOVER",50),Jbt=new CC("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),Wbt=new CC("END_LABEL_SORTER",52),Owt=new CC("REVERSED_EDGE_RESTORER",53),zbt=new CC("END_LABEL_POSTPROCESSOR",54),Ybt=new CC("HIERARCHICAL_NODE_RESIZER",55),Gbt=new CC("DIRECTION_POSTPROCESSOR",56)}function VYn(){VYn=E,Vin(),mvt=new mL(B6n,vvt=dgt),xvt=new mL(H6n,(qx(),!1)),Y6(),Bvt=new mL(U6n,Hvt=kpt),akt=new mL(G6n,!1),okt=new mL(q6n,!0),Dmt=new mL(X6n,!1),nin(),Skt=new mL(z6n,Pkt=Gjt),xwn(1),Dkt=new mL(V6n,xwn(7)),xkt=new mL(W6n,!1),Rvt=new mL(Q6n,!1),kvn(),gvt=new mL(J6n,pvt=sgt),MKn(),rkt=new mL(Y6n,ckt=rjt),Gpn(),Vvt=new mL(Z6n,Wvt=Lmt),xwn(-1),zvt=new mL(n5n,null),xwn(-1),Qvt=new mL(t5n,xwn(-1)),xwn(-1),Jvt=new mL(e5n,xwn(4)),xwn(-1),Zvt=new mL(i5n,xwn(2)),THn(),ekt=new mL(r5n,ikt=$jt),xwn(0),tkt=new mL(c5n,xwn(0)),qvt=new mL(a5n,xwn(vZn)),jan(),wvt=new mL(o5n,dvt=Zdt),Jmt=new mL(u5n,!1),avt=new mL(s5n,.1),lvt=new mL(h5n,!1),uvt=new mL(f5n,null),svt=new mL(l5n,null),xwn(-1),hvt=new mL(b5n,null),xwn(-1),fvt=new mL(w5n,xwn(-1)),xwn(0),Ymt=new mL(d5n,xwn(40)),ihn(),ivt=new mL(g5n,rvt=lpt),Zmt=new mL(p5n,nvt=hpt),pyn(),jkt=new mL(m5n,Ekt=vjt),wkt=new Cm(v5n),Wtn(),ukt=new mL(k5n,skt=Lgt),ESn(),fkt=new mL(y5n,lkt=Fgt),new Jm,pkt=new mL(M5n,.3),vkt=new Cm(T5n),Yyn(),kkt=new mL(j5n,ykt=djt),isn(),Svt=new mL(E5n,Pvt=nEt),Sln(),Cvt=new mL(S5n,Ivt=aEt),kbn(),Ovt=new mL(P5n,Avt=fEt),Nvt=new mL(C5n,.2),jvt=new mL(I5n,2),Akt=new mL(O5n,null),Nkt=new mL(A5n,10),Lkt=new mL(L5n,10),$kt=new mL(N5n,20),xwn(0),Ckt=new mL($5n,xwn(0)),xwn(0),Ikt=new mL(D5n,xwn(0)),xwn(0),Okt=new mL(x5n,xwn(0)),xmt=new mL(R5n,!1),RIn(),Fmt=new mL(K5n,_mt=Vgt),H7(),Rmt=new mL(F5n,Kmt=Wdt),Fvt=new mL(_5n,!1),xwn(0),Kvt=new mL(B5n,xwn(16)),xwn(0),_vt=new mL(H5n,xwn(5)),zhn(),ryt=new mL(U5n,cyt=kEt),Rkt=new mL(G5n,10),_kt=new mL(q5n,1),ran(),Vkt=new mL(X5n,Wkt=cgt),Ukt=new Cm(z5n),Xkt=xwn(1),xwn(0),qkt=new mL(V5n,Xkt),ian(),syt=new mL(W5n,hyt=wEt),ayt=new Cm(Q5n),nyt=new mL(J5n,!0),Ykt=new mL(Y5n,2),eyt=new mL(Z5n,!0),tOn(),Mvt=new mL(n8n,Tvt=Cgt),vAn(),kvt=new mL(t8n,yvt=Hdt),yvn(),Wmt=new mL(e8n,Qmt=Fjt),Vmt=new mL(i8n,!1),zmt=new mL(r8n,!1),Uvn(),Bmt=new mL(c8n,Hmt=tbt),Cwn(),qmt=new mL(a8n,Xmt=ujt),Umt=new mL(o8n,0),Gmt=new mL(u8n,0),Gvt=fgt,Uvt=Ydt,Yvt=ijt,nkt=ijt,Xvt=YTt,Own(),ovt=Ixt,bvt=Zdt,cvt=Zdt,tvt=Zdt,evt=Ixt,dkt=Mjt,gkt=vjt,hkt=vjt,bkt=vjt,mkt=yjt,Tkt=Mjt,Mkt=Mjt,_gn(),Lvt=hxt,$vt=hxt,Dvt=fEt,Evt=sxt,Kkt=yEt,Fkt=vEt,Bkt=yEt,Hkt=vEt,Qkt=yEt,Jkt=vEt,Gkt=rgt,zkt=cgt,fyt=yEt,lyt=vEt,oyt=yEt,uyt=vEt,tyt=vEt,Zkt=vEt,iyt=vEt}function WYn(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k,y,M,T,j,E,S,P,C,I,O,A,L,N,$,D,x,R,K,F,_,B,H,U,G,q,X,z,V,W,Q,J,Y,Z,nn,tn,en,rn,cn,an,on,un;for(Y=0,N=0,x=(O=t).length;N0&&(n.a[U.p]=Y++)}for(rn=0,$=0,R=(A=i).length;$0;){for(MK(z.b>0),X=0,u=new Ww((U=uG(z.a.Xb(z.c=--z.b),12)).e);u.a0&&(U.j==(KQn(),yRt)?(n.a[U.p]=rn,++rn):(n.a[U.p]=rn+K+_,++_))}rn+=_}for(q=new Ym,d=new XL,L=0,D=(I=t).length;Lh.b&&(h.b=V)):U.i.c==J&&(Vh.c&&(h.c=V));for(Ntn(g,0,g.length,null),en=Inn(YHt,W1n,28,g.length,15,1),r=Inn(YHt,W1n,28,rn+1,15,1),m=0;m0;)j%2>0&&(c+=on[j+1]),++on[j=(j-1)/2|0];for(S=Inn(ZEt,EZn,374,2*g.length,0,1),y=0;y0&&(A1(O.f),0)){if(uG(zDn(g,UDt),280)==fKt)throw hv(new jM("Topdown Layout Providers should only be used on parallel nodes."));XA(A1(O.f)),null.Um(),vN(g,e.Math.max(g.g,null.Vm),e.Math.max(g.f,null.Vm))}else null!=zDn(g,VDt)&&(H=uG(zDn(g,VDt),347).Tg(g),vN(g,e.Math.max(g.g,H.a),e.Math.max(g.f,H.b)));if(D=uG(zDn(t,W$t),107),b=t.g-(D.b+D.c),l=t.f-(D.d+D.a),G.bh("Available Child Area: ("+b+"|"+l+")"),Myn(t,c$t,b/l),Mkn(t,c,r.eh(N)),uG(zDn(t,UDt),280)==bKt&&(VJn(t),vN(t,D.b+uM(pK(zDn(t,h$t)))+D.c,D.d+uM(pK(zDn(t,s$t)))+D.a)),G.bh("Executed layout algorithm: "+mK(zDn(t,e$t))+" on node "+t.k),uG(zDn(t,UDt),280)==fKt){if(b<0||l<0)throw hv(new jM("The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. "+t.k));for(vnn(t,h$t)||vnn(t,s$t)||VJn(t),d=uM(pK(zDn(t,h$t))),w=uM(pK(zDn(t,s$t))),G.bh("Desired Child Area: ("+d+"|"+w+")"),R=b/d,K=l/w,x=e.Math.min(R,e.Math.min(K,uM(pK(zDn(t,GDt))))),Myn(t,XDt,x),G.bh(t.k+" -- Local Scale Factor (X|Y): ("+R+"|"+K+")"),v=uG(zDn(t,l$t),21),a=0,o=0,x'?":m_(rit,n)?"'(?<' or '(? toIndex: ",s2n=", toIndex: ",h2n="Index: ",f2n=", Size: ",l2n="org.eclipse.elk.alg.common",b2n={50:1},w2n="org.eclipse.elk.alg.common.compaction",d2n="Scanline/EventHandler",g2n="org.eclipse.elk.alg.common.compaction.oned",p2n="CNode belongs to another CGroup.",m2n="ISpacingsHandler/1",v2n="The ",k2n=" instance has been finished already.",y2n="The direction ",M2n=" is not supported by the CGraph instance.",T2n="OneDimensionalCompactor",j2n="OneDimensionalCompactor/lambda$0$Type",E2n="Quadruplet",S2n="ScanlineConstraintCalculator",P2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler",C2n="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",I2n="ScanlineConstraintCalculator/Timestamp",O2n="ScanlineConstraintCalculator/lambda$0$Type",A2n={178:1,46:1},L2n="org.eclipse.elk.alg.common.compaction.options",N2n="org.eclipse.elk.core.data",$2n="org.eclipse.elk.polyomino.traversalStrategy",D2n="org.eclipse.elk.polyomino.lowLevelSort",x2n="org.eclipse.elk.polyomino.highLevelSort",R2n="org.eclipse.elk.polyomino.fill",K2n={134:1},F2n="polyomino",_2n="org.eclipse.elk.alg.common.networksimplex",B2n={183:1,3:1,4:1},H2n="org.eclipse.elk.alg.common.nodespacing",U2n="org.eclipse.elk.alg.common.nodespacing.cellsystem",G2n="CENTER",q2n={217:1,336:1},X2n={3:1,4:1,5:1,603:1},z2n="LEFT",V2n="RIGHT",W2n="Vertical alignment cannot be null",Q2n="BOTTOM",J2n="org.eclipse.elk.alg.common.nodespacing.internal",Y2n="UNDEFINED",Z2n=.01,n3n="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",t3n="LabelPlacer/lambda$0$Type",e3n="LabelPlacer/lambda$1$Type",i3n="portRatioOrPosition",r3n="org.eclipse.elk.alg.common.overlaps",c3n="DOWN",a3n="org.eclipse.elk.alg.common.polyomino",o3n="NORTH",u3n="EAST",s3n="SOUTH",h3n="WEST",f3n="org.eclipse.elk.alg.common.polyomino.structures",l3n="Direction",b3n="Grid is only of size ",w3n=". Requested point (",d3n=") is out of bounds.",g3n=" Given center based coordinates were (",p3n="org.eclipse.elk.graph.properties",m3n="IPropertyHolder",v3n={3:1,96:1,137:1},k3n="org.eclipse.elk.alg.common.spore",y3n="org.eclipse.elk.alg.common.utils",M3n={205:1},T3n="org.eclipse.elk.core",j3n="Connected Components Compaction",E3n="org.eclipse.elk.alg.disco",S3n="org.eclipse.elk.alg.disco.graph",P3n="org.eclipse.elk.alg.disco.options",C3n="CompactionStrategy",I3n="org.eclipse.elk.disco.componentCompaction.strategy",O3n="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",A3n="org.eclipse.elk.disco.debug.discoGraph",L3n="org.eclipse.elk.disco.debug.discoPolys",N3n="componentCompaction",$3n="org.eclipse.elk.disco",D3n="org.eclipse.elk.spacing.componentComponent",x3n="org.eclipse.elk.edge.thickness",R3n="org.eclipse.elk.aspectRatio",K3n="org.eclipse.elk.padding",F3n="org.eclipse.elk.alg.disco.transform",_3n=1.5707963267948966,B3n=17976931348623157e292,H3n={3:1,4:1,5:1,198:1},U3n={3:1,6:1,4:1,5:1,100:1,115:1},G3n="org.eclipse.elk.alg.force",q3n="ComponentsProcessor",X3n="ComponentsProcessor/1",z3n="ElkGraphImporter/lambda$0$Type",V3n="org.eclipse.elk.alg.force.graph",W3n="Component Layout",Q3n="org.eclipse.elk.alg.force.model",J3n="org.eclipse.elk.force.model",Y3n="org.eclipse.elk.force.iterations",Z3n="org.eclipse.elk.force.repulsivePower",n4n="org.eclipse.elk.force.temperature",t4n=.001,e4n="org.eclipse.elk.force.repulsion",i4n="org.eclipse.elk.alg.force.options",r4n=1.600000023841858,c4n="org.eclipse.elk.force",a4n="org.eclipse.elk.priority",o4n="org.eclipse.elk.spacing.nodeNode",u4n="org.eclipse.elk.spacing.edgeLabel",s4n="org.eclipse.elk.randomSeed",h4n="org.eclipse.elk.separateConnectedComponents",f4n="org.eclipse.elk.interactive",l4n="org.eclipse.elk.portConstraints",b4n="org.eclipse.elk.edgeLabels.inline",w4n="org.eclipse.elk.omitNodeMicroLayout",d4n="org.eclipse.elk.nodeSize.fixedGraphSize",g4n="org.eclipse.elk.nodeSize.options",p4n="org.eclipse.elk.nodeSize.constraints",m4n="org.eclipse.elk.nodeLabels.placement",v4n="org.eclipse.elk.portLabels.placement",k4n="org.eclipse.elk.topdownLayout",y4n="org.eclipse.elk.topdown.scaleFactor",M4n="org.eclipse.elk.topdown.hierarchicalNodeWidth",T4n="org.eclipse.elk.topdown.hierarchicalNodeAspectRatio",j4n="org.eclipse.elk.topdown.nodeType",E4n="origin",S4n="random",P4n="boundingBox.upLeft",C4n="boundingBox.lowRight",I4n="org.eclipse.elk.stress.fixed",O4n="org.eclipse.elk.stress.desiredEdgeLength",A4n="org.eclipse.elk.stress.dimension",L4n="org.eclipse.elk.stress.epsilon",N4n="org.eclipse.elk.stress.iterationLimit",$4n="org.eclipse.elk.stress",D4n="ELK Stress",x4n="org.eclipse.elk.nodeSize.minimum",R4n="org.eclipse.elk.alg.force.stress",K4n="Layered layout",F4n="org.eclipse.elk.alg.layered",_4n="org.eclipse.elk.alg.layered.compaction.components",B4n="org.eclipse.elk.alg.layered.compaction.oned",H4n="org.eclipse.elk.alg.layered.compaction.oned.algs",U4n="org.eclipse.elk.alg.layered.compaction.recthull",G4n="org.eclipse.elk.alg.layered.components",q4n="NONE",X4n="MODEL_ORDER",z4n={3:1,6:1,4:1,9:1,5:1,126:1},V4n={3:1,6:1,4:1,5:1,150:1,100:1,115:1},W4n="org.eclipse.elk.alg.layered.compound",Q4n={47:1},J4n="org.eclipse.elk.alg.layered.graph",Y4n=" -> ",Z4n="Not supported by LGraph",n6n="Port side is undefined",t6n={3:1,6:1,4:1,5:1,482:1,150:1,100:1,115:1},e6n={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},i6n={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},r6n="([{\"' \t\r\n",c6n=")]}\"' \t\r\n",a6n="The given string contains parts that cannot be parsed as numbers.",o6n="org.eclipse.elk.core.math",u6n={3:1,4:1,140:1,214:1,423:1},s6n={3:1,4:1,107:1,214:1,423:1},h6n="org.eclipse.elk.alg.layered.graph.transform",f6n="ElkGraphImporter",l6n="ElkGraphImporter/lambda$1$Type",b6n="ElkGraphImporter/lambda$2$Type",w6n="ElkGraphImporter/lambda$4$Type",d6n="org.eclipse.elk.alg.layered.intermediate",g6n="Node margin calculation",p6n="ONE_SIDED_GREEDY_SWITCH",m6n="TWO_SIDED_GREEDY_SWITCH",v6n="No implementation is available for the layout processor ",k6n="IntermediateProcessorStrategy",y6n="Node '",M6n="FIRST_SEPARATE",T6n="LAST_SEPARATE",j6n="Odd port side processing",E6n="org.eclipse.elk.alg.layered.intermediate.compaction",S6n="org.eclipse.elk.alg.layered.intermediate.greedyswitch",P6n="org.eclipse.elk.alg.layered.p3order.counting",C6n={230:1},I6n="org.eclipse.elk.alg.layered.intermediate.loops",O6n="org.eclipse.elk.alg.layered.intermediate.loops.ordering",A6n="org.eclipse.elk.alg.layered.intermediate.loops.routing",L6n="org.eclipse.elk.alg.layered.intermediate.preserveorder",N6n="org.eclipse.elk.alg.layered.intermediate.wrapping",$6n="org.eclipse.elk.alg.layered.options",D6n="INTERACTIVE",x6n="GREEDY",R6n="DEPTH_FIRST",K6n="EDGE_LENGTH",F6n="SELF_LOOPS",_6n="firstTryWithInitialOrder",B6n="org.eclipse.elk.layered.directionCongruency",H6n="org.eclipse.elk.layered.feedbackEdges",U6n="org.eclipse.elk.layered.interactiveReferencePoint",G6n="org.eclipse.elk.layered.mergeEdges",q6n="org.eclipse.elk.layered.mergeHierarchyEdges",X6n="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",z6n="org.eclipse.elk.layered.portSortingStrategy",V6n="org.eclipse.elk.layered.thoroughness",W6n="org.eclipse.elk.layered.unnecessaryBendpoints",Q6n="org.eclipse.elk.layered.generatePositionAndLayerIds",J6n="org.eclipse.elk.layered.cycleBreaking.strategy",Y6n="org.eclipse.elk.layered.layering.strategy",Z6n="org.eclipse.elk.layered.layering.layerConstraint",n5n="org.eclipse.elk.layered.layering.layerChoiceConstraint",t5n="org.eclipse.elk.layered.layering.layerId",e5n="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",i5n="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",r5n="org.eclipse.elk.layered.layering.nodePromotion.strategy",c5n="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",a5n="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",o5n="org.eclipse.elk.layered.crossingMinimization.strategy",u5n="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",s5n="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",h5n="org.eclipse.elk.layered.crossingMinimization.semiInteractive",f5n="org.eclipse.elk.layered.crossingMinimization.inLayerPredOf",l5n="org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf",b5n="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",w5n="org.eclipse.elk.layered.crossingMinimization.positionId",d5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",g5n="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",p5n="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",m5n="org.eclipse.elk.layered.nodePlacement.strategy",v5n="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",k5n="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",y5n="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",M5n="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",T5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",j5n="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",E5n="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",S5n="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",P5n="org.eclipse.elk.layered.edgeRouting.splines.mode",C5n="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",I5n="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",O5n="org.eclipse.elk.layered.spacing.baseValue",A5n="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",L5n="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",N5n="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",$5n="org.eclipse.elk.layered.priority.direction",D5n="org.eclipse.elk.layered.priority.shortness",x5n="org.eclipse.elk.layered.priority.straightness",R5n="org.eclipse.elk.layered.compaction.connectedComponents",K5n="org.eclipse.elk.layered.compaction.postCompaction.strategy",F5n="org.eclipse.elk.layered.compaction.postCompaction.constraints",_5n="org.eclipse.elk.layered.highDegreeNodes.treatment",B5n="org.eclipse.elk.layered.highDegreeNodes.threshold",H5n="org.eclipse.elk.layered.highDegreeNodes.treeHeight",U5n="org.eclipse.elk.layered.wrapping.strategy",G5n="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",q5n="org.eclipse.elk.layered.wrapping.correctionFactor",X5n="org.eclipse.elk.layered.wrapping.cutting.strategy",z5n="org.eclipse.elk.layered.wrapping.cutting.cuts",V5n="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",W5n="org.eclipse.elk.layered.wrapping.validify.strategy",Q5n="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",J5n="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",Y5n="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",Z5n="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",n8n="org.eclipse.elk.layered.edgeLabels.sideSelection",t8n="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",e8n="org.eclipse.elk.layered.considerModelOrder.strategy",i8n="org.eclipse.elk.layered.considerModelOrder.portModelOrder",r8n="org.eclipse.elk.layered.considerModelOrder.noModelOrder",c8n="org.eclipse.elk.layered.considerModelOrder.components",a8n="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",o8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",u8n="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",s8n="layering",h8n="layering.minWidth",f8n="layering.nodePromotion",l8n="crossingMinimization",b8n="org.eclipse.elk.hierarchyHandling",w8n="crossingMinimization.greedySwitch",d8n="nodePlacement",g8n="nodePlacement.bk",p8n="edgeRouting",m8n="org.eclipse.elk.edgeRouting",v8n="spacing",k8n="priority",y8n="compaction",M8n="compaction.postCompaction",T8n="Specifies whether and how post-process compaction is applied.",j8n="highDegreeNodes",E8n="wrapping",S8n="wrapping.cutting",P8n="wrapping.validify",C8n="wrapping.multiEdge",I8n="edgeLabels",O8n="considerModelOrder",A8n="org.eclipse.elk.spacing.commentComment",L8n="org.eclipse.elk.spacing.commentNode",N8n="org.eclipse.elk.spacing.edgeEdge",$8n="org.eclipse.elk.spacing.edgeNode",D8n="org.eclipse.elk.spacing.labelLabel",x8n="org.eclipse.elk.spacing.labelPortHorizontal",R8n="org.eclipse.elk.spacing.labelPortVertical",K8n="org.eclipse.elk.spacing.labelNode",F8n="org.eclipse.elk.spacing.nodeSelfLoop",_8n="org.eclipse.elk.spacing.portPort",B8n="org.eclipse.elk.spacing.individual",H8n="org.eclipse.elk.port.borderOffset",U8n="org.eclipse.elk.noLayout",G8n="org.eclipse.elk.port.side",q8n="org.eclipse.elk.debugMode",X8n="org.eclipse.elk.alignment",z8n="org.eclipse.elk.insideSelfLoops.activate",V8n="org.eclipse.elk.insideSelfLoops.yo",W8n="org.eclipse.elk.direction",Q8n="org.eclipse.elk.nodeLabels.padding",J8n="org.eclipse.elk.portLabels.nextToPortIfPossible",Y8n="org.eclipse.elk.portLabels.treatAsGroup",Z8n="org.eclipse.elk.portAlignment.default",n9n="org.eclipse.elk.portAlignment.north",t9n="org.eclipse.elk.portAlignment.south",e9n="org.eclipse.elk.portAlignment.west",i9n="org.eclipse.elk.portAlignment.east",r9n="org.eclipse.elk.contentAlignment",c9n="org.eclipse.elk.junctionPoints",a9n="org.eclipse.elk.edgeLabels.placement",o9n="org.eclipse.elk.port.index",u9n="org.eclipse.elk.commentBox",s9n="org.eclipse.elk.hypernode",h9n="org.eclipse.elk.port.anchor",f9n="org.eclipse.elk.partitioning.activate",l9n="org.eclipse.elk.partitioning.partition",b9n="org.eclipse.elk.position",w9n="org.eclipse.elk.margins",d9n="org.eclipse.elk.spacing.portsSurrounding",g9n="org.eclipse.elk.interactiveLayout",p9n="org.eclipse.elk.core.util",m9n={3:1,4:1,5:1,601:1},v9n="NETWORK_SIMPLEX",k9n="SIMPLE",y9n={106:1,47:1},M9n="org.eclipse.elk.alg.layered.p1cycles",T9n="org.eclipse.elk.alg.layered.p2layers",j9n={413:1,230:1},E9n={846:1,3:1,4:1},S9n="org.eclipse.elk.alg.layered.p3order",P9n="org.eclipse.elk.alg.layered.p4nodes",C9n={3:1,4:1,5:1,854:1},I9n=1e-5,O9n="org.eclipse.elk.alg.layered.p4nodes.bk",A9n="org.eclipse.elk.alg.layered.p5edges",L9n="org.eclipse.elk.alg.layered.p5edges.orthogonal",N9n="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",$9n=1e-6,D9n="org.eclipse.elk.alg.layered.p5edges.splines",x9n=.09999999999999998,R9n=1e-8,K9n=4.71238898038469,F9n=3.141592653589793,_9n="org.eclipse.elk.alg.mrtree",B9n=.10000000149011612,H9n="SUPER_ROOT",U9n="org.eclipse.elk.alg.mrtree.graph",G9n=-17976931348623157e292,q9n="org.eclipse.elk.alg.mrtree.intermediate",X9n="Processor compute fanout",z9n={3:1,6:1,4:1,5:1,534:1,100:1,115:1},V9n="Set neighbors in level",W9n="org.eclipse.elk.alg.mrtree.options",Q9n="DESCENDANTS",J9n="org.eclipse.elk.mrtree.compaction",Y9n="org.eclipse.elk.mrtree.edgeEndTextureLength",Z9n="org.eclipse.elk.mrtree.treeLevel",n7n="org.eclipse.elk.mrtree.positionConstraint",t7n="org.eclipse.elk.mrtree.weighting",e7n="org.eclipse.elk.mrtree.edgeRoutingMode",i7n="org.eclipse.elk.mrtree.searchOrder",r7n="Position Constraint",c7n="org.eclipse.elk.mrtree",a7n="org.eclipse.elk.tree",o7n="Processor arrange level",u7n="org.eclipse.elk.alg.mrtree.p2order",s7n="org.eclipse.elk.alg.mrtree.p4route",h7n="org.eclipse.elk.alg.radial",f7n=6.283185307179586,l7n="Before",b7n=5e-324,w7n="After",d7n="org.eclipse.elk.alg.radial.intermediate",g7n="COMPACTION",p7n="org.eclipse.elk.alg.radial.intermediate.compaction",m7n={3:1,4:1,5:1,100:1},v7n="org.eclipse.elk.alg.radial.intermediate.optimization",k7n="No implementation is available for the layout option ",y7n="org.eclipse.elk.alg.radial.options",M7n="org.eclipse.elk.radial.centerOnRoot",T7n="org.eclipse.elk.radial.orderId",j7n="org.eclipse.elk.radial.radius",E7n="org.eclipse.elk.radial.rotate",S7n="org.eclipse.elk.radial.compactor",P7n="org.eclipse.elk.radial.compactionStepSize",C7n="org.eclipse.elk.radial.sorter",I7n="org.eclipse.elk.radial.wedgeCriteria",O7n="org.eclipse.elk.radial.optimizationCriteria",A7n="org.eclipse.elk.radial.rotation.targetAngle",L7n="org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace",N7n="org.eclipse.elk.radial.rotation.outgoingEdgeAngles",$7n="Compaction",D7n="rotation",x7n="org.eclipse.elk.radial",R7n="org.eclipse.elk.alg.radial.p1position.wedge",K7n="org.eclipse.elk.alg.radial.sorting",F7n=5.497787143782138,_7n=3.9269908169872414,B7n=2.356194490192345,H7n="org.eclipse.elk.alg.rectpacking",U7n="org.eclipse.elk.alg.rectpacking.intermediate",G7n="org.eclipse.elk.alg.rectpacking.options",q7n="org.eclipse.elk.rectpacking.trybox",X7n="org.eclipse.elk.rectpacking.currentPosition",z7n="org.eclipse.elk.rectpacking.desiredPosition",V7n="org.eclipse.elk.rectpacking.inNewRow",W7n="org.eclipse.elk.rectpacking.widthApproximation.strategy",Q7n="org.eclipse.elk.rectpacking.widthApproximation.targetWidth",J7n="org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal",Y7n="org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift",Z7n="org.eclipse.elk.rectpacking.packing.strategy",nnt="org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation",tnt="org.eclipse.elk.rectpacking.packing.compaction.iterations",ent="org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy",int="widthApproximation",rnt="Compaction Strategy",cnt="packing.compaction",ant="org.eclipse.elk.rectpacking",ont="org.eclipse.elk.alg.rectpacking.p1widthapproximation",unt="org.eclipse.elk.alg.rectpacking.p2packing",snt="No Compaction",hnt="org.eclipse.elk.alg.rectpacking.p3whitespaceelimination",fnt="org.eclipse.elk.alg.rectpacking.util",lnt="No implementation available for ",bnt="org.eclipse.elk.alg.spore",wnt="org.eclipse.elk.alg.spore.options",dnt="org.eclipse.elk.sporeCompaction",gnt="org.eclipse.elk.underlyingLayoutAlgorithm",pnt="org.eclipse.elk.processingOrder.treeConstruction",mnt="org.eclipse.elk.processingOrder.spanningTreeCostFunction",vnt="org.eclipse.elk.processingOrder.preferredRoot",knt="org.eclipse.elk.processingOrder.rootSelection",ynt="org.eclipse.elk.structure.structureExtractionStrategy",Mnt="org.eclipse.elk.compaction.compactionStrategy",Tnt="org.eclipse.elk.compaction.orthogonal",jnt="org.eclipse.elk.overlapRemoval.maxIterations",Ent="org.eclipse.elk.overlapRemoval.runScanline",Snt="processingOrder",Pnt="overlapRemoval",Cnt="org.eclipse.elk.sporeOverlap",Int="org.eclipse.elk.alg.spore.p1structure",Ont="org.eclipse.elk.alg.spore.p2processingorder",Ant="org.eclipse.elk.alg.spore.p3execution",Lnt="Topdown Layout",Nnt="Invalid index: ",$nt="org.eclipse.elk.core.alg",Dnt={341:1},xnt={294:1},Rnt="Make sure its type is registered with the ",Knt=" utility class.",Fnt="true",_nt="false",Bnt="Couldn't clone property '",Hnt=.05,Unt="org.eclipse.elk.core.options",Gnt=1.2999999523162842,qnt="org.eclipse.elk.box",Xnt="org.eclipse.elk.expandNodes",znt="org.eclipse.elk.box.packingMode",Vnt="org.eclipse.elk.algorithm",Wnt="org.eclipse.elk.resolvedAlgorithm",Qnt="org.eclipse.elk.bendPoints",Jnt="org.eclipse.elk.labelManager",Ynt="org.eclipse.elk.scaleFactor",Znt="org.eclipse.elk.childAreaWidth",ntt="org.eclipse.elk.childAreaHeight",ttt="org.eclipse.elk.animate",ett="org.eclipse.elk.animTimeFactor",itt="org.eclipse.elk.layoutAncestors",rtt="org.eclipse.elk.maxAnimTime",ctt="org.eclipse.elk.minAnimTime",att="org.eclipse.elk.progressBar",ott="org.eclipse.elk.validateGraph",utt="org.eclipse.elk.validateOptions",stt="org.eclipse.elk.zoomToFit",htt="org.eclipse.elk.font.name",ftt="org.eclipse.elk.font.size",ltt="org.eclipse.elk.topdown.sizeApproximator",btt="org.eclipse.elk.topdown.scaleCap",wtt="org.eclipse.elk.edge.type",dtt="partitioning",gtt="nodeLabels",ptt="portAlignment",mtt="nodeSize",vtt="port",ktt="portLabels",ytt="topdown",Mtt="insideSelfLoops",Ttt="org.eclipse.elk.fixed",jtt="org.eclipse.elk.random",Ett={3:1,34:1,22:1,347:1},Stt="port must have a parent node to calculate the port side",Ptt="The edge needs to have exactly one edge section. Found: ",Ctt="org.eclipse.elk.core.util.adapters",Itt="org.eclipse.emf.ecore",Ott="org.eclipse.elk.graph",Att="EMapPropertyHolder",Ltt="ElkBendPoint",Ntt="ElkGraphElement",$tt="ElkConnectableShape",Dtt="ElkEdge",xtt="ElkEdgeSection",Rtt="EModelElement",Ktt="ENamedElement",Ftt="ElkLabel",_tt="ElkNode",Btt="ElkPort",Htt={94:1,93:1},Utt="org.eclipse.emf.common.notify.impl",Gtt="The feature '",qtt="' is not a valid changeable feature",Xtt="Expecting null",ztt="' is not a valid feature",Vtt="The feature ID",Wtt=" is not a valid feature ID",Qtt=32768,Jtt={110:1,94:1,93:1,58:1,54:1,99:1},Ytt="org.eclipse.emf.ecore.impl",Ztt="org.eclipse.elk.graph.impl",net="Recursive containment not allowed for ",tet="The datatype '",eet="' is not a valid classifier",iet="The value '",ret={195:1,3:1,4:1},cet="The class '",aet="http://www.eclipse.org/elk/ElkGraph",oet="property",uet="value",set="source",het="properties",fet="identifier",bet="height",wet="width",det="parent",get="text",pet="children",met="hierarchical",vet="sources",ket="targets",yet="sections",Met="bendPoints",Tet="outgoingShape",jet="incomingShape",Eet="outgoingSections",Set="incomingSections",Pet="org.eclipse.emf.common.util",Cet="Severe implementation error in the Json to ElkGraph importer.",Iet="id",Oet="org.eclipse.elk.graph.json",Aet="Unhandled parameter types: ",Let="startPoint",Net="An edge must have at least one source and one target (edge id: '",$et="').",Det="Referenced edge section does not exist: ",xet=" (edge id: '",Ret="target",Ket="sourcePoint",Fet="targetPoint",_et="group",Bet="name",Het="connectableShape cannot be null",Uet="edge cannot be null",Get="Passed edge is not 'simple'.",qet="org.eclipse.elk.graph.util",Xet="The 'no duplicates' constraint is violated",zet="targetIndex=",Vet=", size=",Wet="sourceIndex=",Qet={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},Jet={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},Yet="logging",Zet="measureExecutionTime",nit="parser.parse.1",tit="parser.parse.2",eit="parser.next.1",iit="parser.next.2",rit="parser.next.3",cit="parser.next.4",ait="parser.factor.1",oit="parser.factor.2",uit="parser.factor.3",sit="parser.factor.4",hit="parser.factor.5",fit="parser.factor.6",lit="parser.atom.1",bit="parser.atom.2",wit="parser.atom.3",dit="parser.atom.4",git="parser.atom.5",pit="parser.cc.1",mit="parser.cc.2",vit="parser.cc.3",kit="parser.cc.5",yit="parser.cc.6",Mit="parser.cc.7",Tit="parser.cc.8",jit="parser.ope.1",Eit="parser.ope.2",Sit="parser.ope.3",Pit="parser.descape.1",Cit="parser.descape.2",Iit="parser.descape.3",Oit="parser.descape.4",Ait="parser.descape.5",Lit="parser.process.1",Nit="parser.quantifier.1",$it="parser.quantifier.2",Dit="parser.quantifier.3",xit="parser.quantifier.4",Rit="parser.quantifier.5",Kit="org.eclipse.emf.common.notify",Fit={424:1,686:1},_it={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},Bit={378:1,152:1},Hit="index=",Uit={3:1,4:1,5:1,129:1},Git={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},qit={3:1,6:1,4:1,5:1,198:1},Xit={3:1,4:1,5:1,173:1,379:1},zit=";/?:@&=+$,",Vit="invalid authority: ",Wit="EAnnotation",Qit="ETypedElement",Jit="EStructuralFeature",Yit="EAttribute",Zit="EClassifier",nrt="EEnumLiteral",trt="EGenericType",ert="EOperation",irt="EParameter",rrt="EReference",crt="ETypeParameter",art="org.eclipse.emf.ecore.util",ort={79:1},urt={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},srt="org.eclipse.emf.ecore.util.FeatureMap$Entry",hrt=8192,frt=2048,lrt="byte",brt="char",wrt="double",drt="float",grt="int",prt="long",mrt="short",vrt="java.lang.Object",krt={3:1,4:1,5:1,254:1},yrt={3:1,4:1,5:1,688:1},Mrt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},Trt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},jrt="mixed",Ert="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Srt="kind",Prt={3:1,4:1,5:1,689:1},Crt={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},Irt={20:1,31:1,56:1,16:1,15:1,61:1,71:1},Ort={51:1,128:1,287:1},Art={76:1,343:1},Lrt="The value of type '",Nrt="' must be of type '",$rt=1352,Drt="http://www.eclipse.org/emf/2002/Ecore",xrt=-32768,Rrt="constraints",Krt="baseType",Frt="getEStructuralFeature",_rt="getFeatureID",Brt="feature",Hrt="getOperationID",Urt="operation",Grt="defaultValue",qrt="eTypeParameters",Xrt="isInstance",zrt="getEEnumLiteral",Vrt="eContainingClass",Wrt={57:1},Qrt={3:1,4:1,5:1,124:1},Jrt="org.eclipse.emf.ecore.resource",Yrt={94:1,93:1,599:1,2034:1},Zrt="org.eclipse.emf.ecore.resource.impl",nct="unspecified",tct="simple",ect="attribute",ict="attributeWildcard",rct="element",cct="elementWildcard",act="collapse",oct="itemType",uct="namespace",sct="##targetNamespace",hct="whiteSpace",fct="wildcards",lct="http://www.eclipse.org/emf/2003/XMLType",bct="##any",wct="uninitialized",dct="The multiplicity constraint is violated",gct="org.eclipse.emf.ecore.xml.type",pct="ProcessingInstruction",mct="SimpleAnyType",vct="XMLTypeDocumentRoot",kct="org.eclipse.emf.ecore.xml.type.impl",yct="INF",Mct="processing",Tct="ENTITIES_._base",jct="minLength",Ect="ENTITY",Sct="NCName",Pct="IDREFS_._base",Cct="integer",Ict="token",Oct="pattern",Act="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",Lct="\\i\\c*",Nct="[\\i-[:]][\\c-[:]]*",$ct="nonPositiveInteger",Dct="maxInclusive",xct="NMTOKEN",Rct="NMTOKENS_._base",Kct="nonNegativeInteger",Fct="minInclusive",_ct="normalizedString",Bct="unsignedByte",Hct="unsignedInt",Uct="18446744073709551615",Gct="unsignedShort",qct="processingInstruction",Xct="org.eclipse.emf.ecore.xml.type.internal",zct=1114111,Vct="Internal Error: shorthands: \\u",Wct="xml:isDigit",Qct="xml:isWord",Jct="xml:isSpace",Yct="xml:isNameChar",Zct="xml:isInitialNameChar",nat="09\u0660\u0669\u06f0\u06f9\u0966\u096f\u09e6\u09ef\u0a66\u0a6f\u0ae6\u0aef\u0b66\u0b6f\u0be7\u0bef\u0c66\u0c6f\u0ce6\u0cef\u0d66\u0d6f\u0e50\u0e59\u0ed0\u0ed9\u0f20\u0f29",tat="AZaz\xc0\xd6\xd8\xf6\xf8\u0131\u0134\u013e\u0141\u0148\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9\u0531\u0556\u0559\u0559\u0561\u0586\u05d0\u05ea\u05f0\u05f2\u0621\u063a\u0641\u064a\u0671\u06b7\u06ba\u06be\u06c0\u06ce\u06d0\u06d3\u06d5\u06d5\u06e5\u06e6\u0905\u0939\u093d\u093d\u0958\u0961\u0985\u098c\u098f\u0990\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09dc\u09dd\u09df\u09e1\u09f0\u09f1\u0a05\u0a0a\u0a0f\u0a10\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8b\u0a8d\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ae0\u0ae0\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33\u0b36\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb5\u0bb7\u0bb9\u0c05\u0c0c\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c33\u0c35\u0c39\u0c60\u0c61\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3\u0cb5\u0cb9\u0cde\u0cde\u0ce0\u0ce1\u0d05\u0d0c\u0d0e\u0d10\u0d12\u0d28\u0d2a\u0d39\u0d60\u0d61\u0e01\u0e2e\u0e30\u0e30\u0e32\u0e33\u0e40\u0e45\u0e81\u0e82\u0e84\u0e84\u0e87\u0e88\u0e8a\u0e8a\u0e8d\u0e8d\u0e94\u0e97\u0e99\u0e9f\u0ea1\u0ea3\u0ea5\u0ea5\u0ea7\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eb0\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4\u0f40\u0f47\u0f49\u0f69\u10a0\u10c5\u10d0\u10f6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110b\u110c\u110e\u1112\u113c\u113c\u113e\u113e\u1140\u1140\u114c\u114c\u114e\u114e\u1150\u1150\u1154\u1155\u1159\u1159\u115f\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116d\u116e\u1172\u1173\u1175\u1175\u119e\u119e\u11a8\u11a8\u11ab\u11ab\u11ae\u11af\u11b7\u11b8\u11ba\u11ba\u11bc\u11c2\u11eb\u11eb\u11f0\u11f0\u11f9\u11f9\u1e00\u1e9b\u1ea0\u1ef9\u1f00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5\uac00\ud7a3",eat="Private Use",iat="ASSIGNED",rat="\0\x7f\x80\xff\u0100\u017f\u0180\u024f\u0250\u02af\u02b0\u02ff\u0300\u036f\u0370\u03ff\u0400\u04ff\u0530\u058f\u0590\u05ff\u0600\u06ff\u0700\u074f\u0780\u07bf\u0900\u097f\u0980\u09ff\u0a00\u0a7f\u0a80\u0aff\u0b00\u0b7f\u0b80\u0bff\u0c00\u0c7f\u0c80\u0cff\u0d00\u0d7f\u0d80\u0dff\u0e00\u0e7f\u0e80\u0eff\u0f00\u0fff\u1000\u109f\u10a0\u10ff\u1100\u11ff\u1200\u137f\u13a0\u13ff\u1400\u167f\u1680\u169f\u16a0\u16ff\u1780\u17ff\u1800\u18af\u1e00\u1eff\u1f00\u1fff\u2000\u206f\u2070\u209f\u20a0\u20cf\u20d0\u20ff\u2100\u214f\u2150\u218f\u2190\u21ff\u2200\u22ff\u2300\u23ff\u2400\u243f\u2440\u245f\u2460\u24ff\u2500\u257f\u2580\u259f\u25a0\u25ff\u2600\u26ff\u2700\u27bf\u2800\u28ff\u2e80\u2eff\u2f00\u2fdf\u2ff0\u2fff\u3000\u303f\u3040\u309f\u30a0\u30ff\u3100\u312f\u3130\u318f\u3190\u319f\u31a0\u31bf\u3200\u32ff\u3300\u33ff\u3400\u4db5\u4e00\u9fff\ua000\ua48f\ua490\ua4cf\uac00\ud7a3\ue000\uf8ff\uf900\ufaff\ufb00\ufb4f\ufb50\ufdff\ufe20\ufe2f\ufe30\ufe4f\ufe50\ufe6f\ufe70\ufefe\ufeff\ufeff\uff00\uffef",cat="UNASSIGNED",aat={3:1,122:1},oat="org.eclipse.emf.ecore.xml.type.util",uat={3:1,4:1,5:1,381:1},sat="org.eclipse.xtext.xbase.lib",hat="Cannot add elements to a Range",fat="Cannot set elements in a Range",lat="Cannot remove elements from a Range",bat="user.agent";e.goog=e.goog||{},e.goog.global=e.goog.global||e,sZn={},sDn(1,null,{},r),uZn.Fb=function(n){return SL(this,n)},uZn.Gb=function(){return this.Rm},uZn.Hb=function(){return xx(this)},uZn.Ib=function(){return Ij(Tbn(this))+"@"+(Hon(this)>>>0).toString(16)},uZn.equals=function(n){return this.Fb(n)},uZn.hashCode=function(){return this.Hb()},uZn.toString=function(){return this.Ib()},sDn(296,1,{296:1,2124:1},Ifn),uZn.ve=function(n){var t;return(t=new Ifn).i=4,t.c=n>1?B0(this,n-1):this,t},uZn.we=function(){return vK(this),this.b},uZn.xe=function(){return Ij(this)},uZn.ye=function(){return vK(this),this.k},uZn.ze=function(){return 0!=(4&this.i)},uZn.Ae=function(){return 0!=(1&this.i)},uZn.Ib=function(){return crn(this)},uZn.i=0;var wat,dat=zW(kZn,"Object",1),gat=zW(kZn,"Class",296);sDn(2096,1,yZn),zW(MZn,"Optional",2096),sDn(1191,2096,yZn,c),uZn.Fb=function(n){return n===this},uZn.Hb=function(){return 2040732332},uZn.Ib=function(){return"Optional.absent()"},uZn.Jb=function(n){return WW(n),gy(),wat},zW(MZn,"Absent",1191),sDn(636,1,{},FM),zW(MZn,"Joiner",636);var pat=Iq(MZn,"Predicate");sDn(589,1,{178:1,589:1,3:1,46:1},Hl),uZn.Mb=function(n){return Wfn(this,n)},uZn.Lb=function(n){return Wfn(this,n)},uZn.Fb=function(n){var t;return!!F$(n,589)&&(t=uG(n,589),PDn(this.a,t.a))},uZn.Hb=function(){return Zfn(this.a)+306654252},uZn.Ib=function(){return eAn(this.a)},zW(MZn,"Predicates/AndPredicate",589),sDn(419,2096,{419:1,3:1},Ul),uZn.Fb=function(n){var t;return!!F$(n,419)&&(t=uG(n,419),udn(this.a,t.a))},uZn.Hb=function(){return 1502476572+Hon(this.a)},uZn.Ib=function(){return CZn+this.a+")"},uZn.Jb=function(n){return new Ul(bZ(n.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},zW(MZn,"Present",419),sDn(204,1,OZn),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){_M()},zW(AZn,"UnmodifiableIterator",204),sDn(2076,204,LZn),uZn.Qb=function(){_M()},uZn.Rb=function(n){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(AZn,"UnmodifiableListIterator",2076),sDn(399,2076,LZn),uZn.Ob=function(){return this.c0},uZn.Pb=function(){if(this.c>=this.d)throw hv(new Bv);return this.Xb(this.c++)},uZn.Tb=function(){return this.c},uZn.Ub=function(){if(this.c<=0)throw hv(new Bv);return this.Xb(--this.c)},uZn.Vb=function(){return this.c-1},uZn.c=0,uZn.d=0,zW(AZn,"AbstractIndexedListIterator",399),sDn(713,204,OZn),uZn.Ob=function(){return oon(this)},uZn.Pb=function(){return yen(this)},uZn.e=1,zW(AZn,"AbstractIterator",713),sDn(2084,1,{229:1}),uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.Fb=function(n){return Aln(this,n)},uZn.Hb=function(){return Hon(this.Zb())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return kz(this)},uZn.Ib=function(){return cpn(this.Zb())},zW(AZn,"AbstractMultimap",2084),sDn(742,2084,NZn),uZn.$b=function(){ban(this)},uZn._b=function(n){return jj(this,n)},uZn.ac=function(){return new OE(this,this.c)},uZn.ic=function(n){return this.hc()},uZn.bc=function(){return new RD(this,this.c)},uZn.jc=function(){return this.mc(this.hc())},uZn.kc=function(){return new My(this)},uZn.lc=function(){return ICn(this.c.vc().Nc(),new o,64,this.d)},uZn.cc=function(n){return Y9(this,n)},uZn.fc=function(n){return twn(this,n)},uZn.gc=function(){return this.d},uZn.mc=function(n){return hZ(),new qw(n)},uZn.nc=function(){return new yy(this)},uZn.oc=function(){return ICn(this.c.Cc().Nc(),new a,64,this.d)},uZn.pc=function(n,t){return new A7(this,n,t,null)},uZn.d=0,zW(AZn,"AbstractMapBasedMultimap",742),sDn(1696,742,NZn),uZn.hc=function(){return new R7(this.a)},uZn.jc=function(){return hZ(),hZ(),zot},uZn.cc=function(n){return uG(Y9(this,n),15)},uZn.fc=function(n){return uG(twn(this,n),15)},uZn.Zb=function(){return nZ(this)},uZn.Fb=function(n){return Aln(this,n)},uZn.qc=function(n){return uG(Y9(this,n),15)},uZn.rc=function(n){return uG(twn(this,n),15)},uZn.mc=function(n){return SZ(uG(n,15))},uZn.pc=function(n,t){return S6(this,n,uG(t,15),null)},zW(AZn,"AbstractListMultimap",1696),sDn(748,1,$Zn),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()||this.e.Ob()},uZn.Pb=function(){var n;return this.e.Ob()||(n=uG(this.c.Pb(),44),this.b=n.ld(),this.a=uG(n.md(),16),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},uZn.Qb=function(){this.e.Qb(),uG(nJ(this.a),16).dc()&&this.c.Qb(),--this.d.d},zW(AZn,"AbstractMapBasedMultimap/Itr",748),sDn(1129,748,$Zn,yy),uZn.sc=function(n,t){return t},zW(AZn,"AbstractMapBasedMultimap/1",1129),sDn(1130,1,{},a),uZn.Kb=function(n){return uG(n,16).Nc()},zW(AZn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1130),sDn(1131,748,$Zn,My),uZn.sc=function(n,t){return new FE(n,t)},zW(AZn,"AbstractMapBasedMultimap/2",1131);var mat=Iq(DZn,"Map");sDn(2065,1,xZn),uZn.wc=function(n){Yun(this,n)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.$b=function(){this.vc().$b()},uZn.tc=function(n){return sTn(this,n)},uZn._b=function(n){return!!TPn(this,n,!1)},uZn.uc=function(n){var t,e;for(t=this.vc().Kc();t.Ob();)if(e=uG(t.Pb(),44).md(),xA(n)===xA(e)||null!=n&&udn(n,e))return!0;return!1},uZn.Fb=function(n){var t,e,i;if(n===this)return!0;if(!F$(n,85))return!1;if(i=uG(n,85),this.gc()!=i.gc())return!1;for(e=i.vc().Kc();e.Ob();)if(t=uG(e.Pb(),44),!this.tc(t))return!1;return!0},uZn.xc=function(n){return DA(TPn(this,n,!1))},uZn.Hb=function(){return tfn(this.vc())},uZn.dc=function(){return 0==this.gc()},uZn.ec=function(){return new Lw(this)},uZn.zc=function(n,t){throw hv(new TM("Put not supported on this map"))},uZn.Ac=function(n){xun(this,n)},uZn.Bc=function(n){return DA(TPn(this,n,!0))},uZn.gc=function(){return this.vc().gc()},uZn.Ib=function(){return KPn(this)},uZn.Cc=function(){return new Fw(this)},zW(DZn,"AbstractMap",2065),sDn(2085,2065,xZn),uZn.bc=function(){return new VE(this)},uZn.vc=function(){return vz(this)},uZn.ec=function(){return this.g||(this.g=this.bc())},uZn.Cc=function(){return this.i||(this.i=new zE(this))},zW(AZn,"Maps/ViewCachingAbstractMap",2085),sDn(402,2085,xZn,OE),uZn.xc=function(n){return srn(this,n)},uZn.Bc=function(n){return abn(this,n)},uZn.$b=function(){this.d==this.e.c?this.e.$b():Hq(new Gq(this))},uZn._b=function(n){return Uwn(this.d,n)},uZn.Ec=function(){return new Gl(this)},uZn.Dc=function(){return this.Ec()},uZn.Fb=function(n){return this===n||udn(this.d,n)},uZn.Hb=function(){return Hon(this.d)},uZn.ec=function(){return this.e.ec()},uZn.gc=function(){return this.d.gc()},uZn.Ib=function(){return cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/AsMap",402);var vat=Iq(kZn,"Iterable");sDn(31,1,RZn),uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){throw hv(new TM("Add not supported on this collection"))},uZn.Gc=function(n){return Qon(this,n)},uZn.$b=function(){oY(this)},uZn.Hc=function(n){return Wpn(this,n,!1)},uZn.Ic=function(n){return yhn(this,n)},uZn.dc=function(){return 0==this.gc()},uZn.Mc=function(n){return Wpn(this,n,!0)},uZn.Pc=function(){return Sz(this)},uZn.Qc=function(n){return oTn(this,n)},uZn.Ib=function(){return vIn(this)},zW(DZn,"AbstractCollection",31);var kat=Iq(DZn,"Set");sDn(KZn,31,FZn),uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return Fvn(this,n)},uZn.Hb=function(){return tfn(this)},zW(DZn,"AbstractSet",KZn),sDn(2068,KZn,FZn),zW(AZn,"Sets/ImprovedAbstractSet",2068),sDn(2069,2068,FZn),uZn.$b=function(){this.Rc().$b()},uZn.Hc=function(n){return Amn(this,n)},uZn.dc=function(){return this.Rc().dc()},uZn.Mc=function(n){var t;return!(!this.Hc(n)||!F$(n,44))&&(t=uG(n,44),this.Rc().ec().Mc(t.ld()))},uZn.gc=function(){return this.Rc().gc()},zW(AZn,"Maps/EntrySet",2069),sDn(1127,2069,FZn,Gl),uZn.Hc=function(n){return Gwn(this.a.d.vc(),n)},uZn.Kc=function(){return new Gq(this.a)},uZn.Rc=function(){return this.a},uZn.Mc=function(n){var t;return!!Gwn(this.a.d.vc(),n)&&(t=uG(nJ(uG(n,44)),44),H9(this.a.e,t.ld()),!0)},uZn.Nc=function(){return JU(this.a.d.vc().Nc(),new ql(this.a))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1127),sDn(1128,1,{},ql),uZn.Kb=function(n){return O9(this.a,uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1128),sDn(746,1,$Zn,Gq),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){var n;return n=uG(this.b.Pb(),44),this.a=uG(n.md(),16),O9(this.c,n)},uZn.Ob=function(){return this.b.Ob()},uZn.Qb=function(){IB(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",746),sDn(542,2068,FZn,VE),uZn.$b=function(){this.b.$b()},uZn.Hc=function(n){return this.b._b(n)},uZn.Jc=function(n){WW(n),this.b.wc(new db(n))},uZn.dc=function(){return this.b.dc()},uZn.Kc=function(){return new Ny(this.b.vc().Kc())},uZn.Mc=function(n){return!!this.b._b(n)&&(this.b.Bc(n),!0)},uZn.gc=function(){return this.b.gc()},zW(AZn,"Maps/KeySet",542),sDn(327,542,FZn,RD),uZn.$b=function(){Hq(new AE(this,this.b.vc().Kc()))},uZn.Ic=function(n){return this.b.ec().Ic(n)},uZn.Fb=function(n){return this===n||udn(this.b.ec(),n)},uZn.Hb=function(){return Hon(this.b.ec())},uZn.Kc=function(){return new AE(this,this.b.vc().Kc())},uZn.Mc=function(n){var t,e;return e=0,(t=uG(this.b.Bc(n),16))&&(e=t.gc(),t.$b(),this.a.d-=e),e>0},uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/KeySet",327),sDn(747,1,$Zn,AE),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.c.Ob()},uZn.Pb=function(){return this.a=uG(this.c.Pb(),44),this.a.ld()},uZn.Qb=function(){var n;IB(!!this.a),n=uG(this.a.md(),16),this.c.Qb(),this.b.a.d-=n.gc(),n.$b(),this.a=null},zW(AZn,"AbstractMapBasedMultimap/KeySet/1",747),sDn(502,402,{85:1,133:1},NK),uZn.bc=function(){return this.Sc()},uZn.ec=function(){return this.Uc()},uZn.Sc=function(){return new yE(this.c,this.Wc())},uZn.Tc=function(){return this.Wc().Tc()},uZn.Uc=function(){return this.b||(this.b=this.Sc())},uZn.Vc=function(){return this.Wc().Vc()},uZn.Wc=function(){return uG(this.d,133)},zW(AZn,"AbstractMapBasedMultimap/SortedAsMap",502),sDn(446,502,_Zn,$K),uZn.bc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.Sc=function(){return new ME(this.a,uG(uG(this.d,133),139))},uZn.ec=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Uc=function(){return uG(this.b||(this.b=new ME(this.a,uG(uG(this.d,133),139))),277)},uZn.Wc=function(){return uG(uG(this.d,133),139)},uZn.Xc=function(n){return uG(uG(this.d,133),139).Xc(n)},uZn.Yc=function(n){return uG(uG(this.d,133),139).Yc(n)},uZn.Zc=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).Zc(n,t))},uZn.$c=function(n){return uG(uG(this.d,133),139).$c(n)},uZn._c=function(n){return uG(uG(this.d,133),139)._c(n)},uZn.ad=function(n,t){return new $K(this.a,uG(uG(this.d,133),139).ad(n,t))},zW(AZn,"AbstractMapBasedMultimap/NavigableAsMap",446),sDn(501,327,BZn,yE),uZn.Nc=function(){return this.b.ec().Nc()},zW(AZn,"AbstractMapBasedMultimap/SortedKeySet",501),sDn(401,501,HZn,ME),zW(AZn,"AbstractMapBasedMultimap/NavigableKeySet",401),sDn(551,31,RZn,A7),uZn.Fc=function(n){var t,e;return bpn(this),e=this.d.dc(),(t=this.d.Fc(n))&&(++this.f.d,e&&mF(this)),t},uZn.Gc=function(n){var t,e,i;return!n.dc()&&(bpn(this),i=this.d.gc(),(t=this.d.Gc(n))&&(e=this.d.gc(),this.f.d+=e-i,0==i&&mF(this)),t)},uZn.$b=function(){var n;bpn(this),0!=(n=this.d.gc())&&(this.d.$b(),this.f.d-=n,DX(this))},uZn.Hc=function(n){return bpn(this),this.d.Hc(n)},uZn.Ic=function(n){return bpn(this),this.d.Ic(n)},uZn.Fb=function(n){return n===this||(bpn(this),udn(this.d,n))},uZn.Hb=function(){return bpn(this),Hon(this.d)},uZn.Kc=function(){return bpn(this),new WU(this)},uZn.Mc=function(n){var t;return bpn(this),(t=this.d.Mc(n))&&(--this.f.d,DX(this)),t},uZn.gc=function(){return qA(this)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.Ib=function(){return bpn(this),cpn(this.d)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection",551);var yat=Iq(DZn,"List");sDn(744,551,{20:1,31:1,16:1,15:1},qz),uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return bpn(this),this.d.Nc()},uZn.bd=function(n,t){var e;bpn(this),e=this.d.dc(),uG(this.d,15).bd(n,t),++this.a.d,e&&mF(this)},uZn.cd=function(n,t){var e,i,r;return!t.dc()&&(bpn(this),r=this.d.gc(),(e=uG(this.d,15).cd(n,t))&&(i=this.d.gc(),this.a.d+=i-r,0==r&&mF(this)),e)},uZn.Xb=function(n){return bpn(this),uG(this.d,15).Xb(n)},uZn.dd=function(n){return bpn(this),uG(this.d,15).dd(n)},uZn.ed=function(){return bpn(this),new JN(this)},uZn.fd=function(n){return bpn(this),new UY(this,n)},uZn.gd=function(n){var t;return bpn(this),t=uG(this.d,15).gd(n),--this.a.d,DX(this),t},uZn.hd=function(n,t){return bpn(this),uG(this.d,15).hd(n,t)},uZn.kd=function(n,t){return bpn(this),S6(this.a,this.e,uG(this.d,15).kd(n,t),this.b?this.b:this)},zW(AZn,"AbstractMapBasedMultimap/WrappedList",744),sDn(1126,744,{20:1,31:1,16:1,15:1,59:1},Yx),zW(AZn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1126),sDn(628,1,$Zn,WU),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return FY(this),this.b.Ob()},uZn.Pb=function(){return FY(this),this.b.Pb()},uZn.Qb=function(){zD(this)},zW(AZn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",628),sDn(745,628,UZn,JN,UY),uZn.Qb=function(){zD(this)},uZn.Rb=function(n){var t;t=0==qA(this.a),(FY(this),uG(this.b,128)).Rb(n),++this.a.a.d,t&&mF(this.a)},uZn.Sb=function(){return(FY(this),uG(this.b,128)).Sb()},uZn.Tb=function(){return(FY(this),uG(this.b,128)).Tb()},uZn.Ub=function(){return(FY(this),uG(this.b,128)).Ub()},uZn.Vb=function(){return(FY(this),uG(this.b,128)).Vb()},uZn.Wb=function(n){(FY(this),uG(this.b,128)).Wb(n)},zW(AZn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",745),sDn(743,551,BZn,AK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSortedSet",743),sDn(1125,743,HZn,TN),zW(AZn,"AbstractMapBasedMultimap/WrappedNavigableSet",1125),sDn(1124,551,FZn,LK),uZn.Nc=function(){return bpn(this),this.d.Nc()},zW(AZn,"AbstractMapBasedMultimap/WrappedSet",1124),sDn(1133,1,{},o),uZn.Kb=function(n){return P7(uG(n,44))},zW(AZn,"AbstractMapBasedMultimap/lambda$1$Type",1133),sDn(1132,1,{},Wl),uZn.Kb=function(n){return new FE(this.a,n)},zW(AZn,"AbstractMapBasedMultimap/lambda$2$Type",1132);var Mat,Tat,jat,Eat,Sat=Iq(DZn,"Map/Entry");sDn(358,1,GZn),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),xQ(this.ld(),t.ld())&&xQ(this.md(),t.md()))},uZn.Hb=function(){var n,t;return n=this.ld(),t=this.md(),(null==n?0:Hon(n))^(null==t?0:Hon(t))},uZn.nd=function(n){throw hv(new Kv)},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(AZn,qZn,358),sDn(2086,31,RZn),uZn.$b=function(){this.od().$b()},uZn.Hc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),E4(this.od(),t.ld(),t.md()))},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),S4(this.od(),t.ld(),t.md()))},uZn.gc=function(){return this.od().d},zW(AZn,"Multimaps/Entries",2086),sDn(749,2086,RZn,Ql),uZn.Kc=function(){return this.a.kc()},uZn.od=function(){return this.a},uZn.Nc=function(){return this.a.lc()},zW(AZn,"AbstractMultimap/Entries",749),sDn(750,749,FZn,Ty),uZn.Nc=function(){return this.a.lc()},uZn.Fb=function(n){return OOn(this,n)},uZn.Hb=function(){return Jon(this)},zW(AZn,"AbstractMultimap/EntrySet",750),sDn(751,31,RZn,Jl),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return qln(this.a,n)},uZn.Kc=function(){return this.a.nc()},uZn.gc=function(){return this.a.d},uZn.Nc=function(){return this.a.oc()},zW(AZn,"AbstractMultimap/Values",751),sDn(2087,31,{849:1,20:1,31:1,16:1}),uZn.Jc=function(n){WW(n),uY(this).Jc(new yb(n))},uZn.Nc=function(){var n;return ICn(n=uY(this).Nc(),new d,64|1296&n.yd(),this.a.d)},uZn.Fc=function(n){return HM(),!0},uZn.Gc=function(n){return WW(this),WW(n),F$(n,552)?V4(uG(n,849)):!n.dc()&&cin(this,n.Kc())},uZn.Hc=function(n){var t;return((t=uG(Xwn(nZ(this.a),n),16))?t.gc():0)>0},uZn.Fb=function(n){return nxn(this,n)},uZn.Hb=function(){return Hon(uY(this))},uZn.dc=function(){return uY(this).dc()},uZn.Mc=function(n){return bNn(this,n,1)>0},uZn.Ib=function(){return cpn(uY(this))},zW(AZn,"AbstractMultiset",2087),sDn(2089,2068,FZn),uZn.$b=function(){ban(this.a.a)},uZn.Hc=function(n){var t;return!(!F$(n,503)||(t=uG(n,425),uG(t.a.md(),16).gc()<=0||S2(this.a,t.a.ld())!=uG(t.a.md(),16).gc()))},uZn.Mc=function(n){var t,e,i;return!(!F$(n,503)||(t=(e=uG(n,425)).a.ld(),0==(i=uG(e.a.md(),16).gc())))&&wNn(this.a,t,i)},zW(AZn,"Multisets/EntrySet",2089),sDn(1139,2089,FZn,Yl),uZn.Kc=function(){return new Dy(vz(nZ(this.a.a)).Kc())},uZn.gc=function(){return nZ(this.a.a).gc()},zW(AZn,"AbstractMultiset/EntrySet",1139),sDn(627,742,NZn),uZn.hc=function(){return this.pd()},uZn.jc=function(){return this.qd()},uZn.cc=function(n){return this.rd(n)},uZn.fc=function(n){return this.sd(n)},uZn.Zb=function(){return this.f||(this.f=this.ac())},uZn.qd=function(){return hZ(),hZ(),Wot},uZn.Fb=function(n){return Aln(this,n)},uZn.rd=function(n){return uG(Y9(this,n),21)},uZn.sd=function(n){return uG(twn(this,n),21)},uZn.mc=function(n){return hZ(),new nT(uG(n,21))},uZn.pc=function(n,t){return new LK(this,n,uG(t,21))},zW(AZn,"AbstractSetMultimap",627),sDn(1723,627,NZn),uZn.hc=function(){return new Hj(this.b)},uZn.pd=function(){return new Hj(this.b)},uZn.jc=function(){return UQ(new Hj(this.b))},uZn.qd=function(){return UQ(new Hj(this.b))},uZn.cc=function(n){return uG(uG(Y9(this,n),21),87)},uZn.rd=function(n){return uG(uG(Y9(this,n),21),87)},uZn.fc=function(n){return uG(uG(twn(this,n),21),87)},uZn.sd=function(n){return uG(uG(twn(this,n),21),87)},uZn.mc=function(n){return F$(n,277)?UQ(uG(n,277)):(hZ(),new mx(uG(n,87)))},uZn.Zb=function(){return this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c))},uZn.pc=function(n,t){return F$(t,277)?new TN(this,n,uG(t,277)):new AK(this,n,uG(t,87))},zW(AZn,"AbstractSortedSetMultimap",1723),sDn(1724,1723,NZn),uZn.Zb=function(){return uG(uG(this.f||(this.f=F$(this.c,139)?new $K(this,uG(this.c,139)):F$(this.c,133)?new NK(this,uG(this.c,133)):new OE(this,this.c)),133),139)},uZn.ec=function(){return uG(uG(this.i||(this.i=F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)),87),277)},uZn.bc=function(){return F$(this.c,139)?new ME(this,uG(this.c,139)):F$(this.c,133)?new yE(this,uG(this.c,133)):new RD(this,this.c)},zW(AZn,"AbstractSortedKeySortedSetMultimap",1724),sDn(2109,1,{2046:1}),uZn.Fb=function(n){return fSn(this,n)},uZn.Hb=function(){return tfn(this.g||(this.g=new nb(this)))},uZn.Ib=function(){return KPn(this.f||(this.f=new VD(this)))},zW(AZn,"AbstractTable",2109),sDn(679,KZn,FZn,nb),uZn.$b=function(){UM()},uZn.Hc=function(n){var t,e;return!!F$(n,478)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&Gwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.Kc=function(){return CZ(this.a)},uZn.Mc=function(n){var t,e;return!!F$(n,478)&&(t=uG(n,697),!!(e=uG(Xwn(BW(this.a),GA(t.c.e,t.b)),85))&&qwn(e.vc(),new FE(GA(t.c.c,t.a),I7(t.c,t.b,t.a))))},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return u6(this.a)},zW(AZn,"AbstractTable/CellSet",679),sDn(2025,31,RZn,tb),uZn.$b=function(){UM()},uZn.Hc=function(n){return QPn(this.a,n)},uZn.Kc=function(){return IZ(this.a)},uZn.gc=function(){return $q(this.a)},uZn.Nc=function(){return y4(this.a)},zW(AZn,"AbstractTable/Values",2025),sDn(1697,1696,NZn),zW(AZn,"ArrayListMultimapGwtSerializationDependencies",1697),sDn(520,1697,NZn,rT,L2),uZn.hc=function(){return new R7(this.a)},uZn.a=0,zW(AZn,"ArrayListMultimap",520),sDn(678,2109,{678:1,2046:1,3:1},f$n),zW(AZn,"ArrayTable",678),sDn(2021,399,LZn,WD),uZn.Xb=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1",2021),sDn(2022,1,{},Xl),uZn.td=function(n){return new Ofn(this.a,n)},zW(AZn,"ArrayTable/1methodref$getCell$Type",2022),sDn(2110,1,{697:1}),uZn.Fb=function(n){var t;return n===this||!!F$(n,478)&&(t=uG(n,697),xQ(GA(this.c.e,this.b),GA(t.c.e,t.b))&&xQ(GA(this.c.c,this.a),GA(t.c.c,t.a))&&xQ(I7(this.c,this.b,this.a),I7(t.c,t.b,t.a)))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[GA(this.c.e,this.b),GA(this.c.c,this.a),I7(this.c,this.b,this.a)]))},uZn.Ib=function(){return"("+GA(this.c.e,this.b)+","+GA(this.c.c,this.a)+")="+I7(this.c,this.b,this.a)},zW(AZn,"Tables/AbstractCell",2110),sDn(478,2110,{478:1,697:1},Ofn),uZn.a=0,uZn.b=0,uZn.d=0,zW(AZn,"ArrayTable/2",478),sDn(2024,1,{},zl),uZn.td=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/2methodref$getValue$Type",2024),sDn(2023,399,LZn,QD),uZn.Xb=function(n){return Qtn(this.a,n)},zW(AZn,"ArrayTable/3",2023),sDn(2077,2065,xZn),uZn.$b=function(){Hq(this.kc())},uZn.vc=function(){return new wb(this)},uZn.lc=function(){return new MY(this.kc(),this.gc())},zW(AZn,"Maps/IteratorBasedAbstractMap",2077),sDn(842,2077,xZn),uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return Ej(this.c,n)},uZn.kc=function(){return new JD(this,this.c.b.c.gc())},uZn.lc=function(){return Dq(this.c.b.c.gc(),16,new Vl(this))},uZn.xc=function(n){var t;return(t=uG(W_(this.c,n),17))?this.vd(t.a):null},uZn.dc=function(){return this.c.b.c.dc()},uZn.ec=function(){return Tz(this.c)},uZn.zc=function(n,t){var e;if(!(e=uG(W_(this.c,n),17)))throw hv(new vM(this.ud()+" "+n+" not in "+Tz(this.c)));return this.wd(e.a,t)},uZn.Bc=function(n){throw hv(new Kv)},uZn.gc=function(){return this.c.b.c.gc()},zW(AZn,"ArrayTable/ArrayMap",842),sDn(2020,1,{},Vl),uZn.td=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",2020),sDn(2018,358,GZn,TE),uZn.ld=function(){return uR(this.a,this.b)},uZn.md=function(){return this.a.vd(this.b)},uZn.nd=function(n){return this.a.wd(this.b,n)},uZn.b=0,zW(AZn,"ArrayTable/ArrayMap/1",2018),sDn(2019,399,LZn,JD),uZn.Xb=function(n){return qW(this.a,n)},zW(AZn,"ArrayTable/ArrayMap/2",2019),sDn(2017,842,xZn,yV),uZn.ud=function(){return"Column"},uZn.vd=function(n){return I7(this.b,this.a,n)},uZn.wd=function(n,t){return Hhn(this.b,this.a,n,t)},uZn.a=0,zW(AZn,"ArrayTable/Row",2017),sDn(843,842,xZn,VD),uZn.vd=function(n){return new yV(this.a,n)},uZn.zc=function(n,t){return uG(t,85),GM()},uZn.wd=function(n,t){return uG(t,85),qM()},uZn.ud=function(){return"Row"},zW(AZn,"ArrayTable/RowMap",843),sDn(1157,1,WZn,jE),uZn.Ad=function(n){return 0!=(-262&this.a.yd()&n)},uZn.yd=function(){return-262&this.a.yd()},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Nb(new SE(n,this.b))},uZn.Bd=function(n){return this.a.Bd(new EE(n,this.b))},zW(AZn,"CollectSpliterators/1",1157),sDn(1158,1,QZn,EE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$0$Type",1158),sDn(1159,1,QZn,SE),uZn.Cd=function(n){this.a.Cd(this.b.Kb(n))},zW(AZn,"CollectSpliterators/1/lambda$1$Type",1159),sDn(1154,1,WZn,x_),uZn.Ad=function(n){return 0!=((16464|this.b)&n)},uZn.yd=function(){return 16464|this.b},uZn.zd=function(){return this.a.zd()},uZn.Nb=function(n){this.a.Qe(new CE(n,this.c))},uZn.Bd=function(n){return this.a.Re(new PE(n,this.c))},uZn.b=0,zW(AZn,"CollectSpliterators/1WithCharacteristics",1154),sDn(1155,1,JZn,PE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1155),sDn(1156,1,JZn,CE),uZn.Dd=function(n){this.a.Cd(this.b.td(n))},zW(AZn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1156),sDn(1150,1,WZn),uZn.Ad=function(n){return 0!=(this.a&n)},uZn.yd=function(){return this.a},uZn.zd=function(){return this.e&&(this.b=g$(this.b,this.e.zd())),g$(this.b,0)},uZn.Nb=function(n){this.e&&(this.e.Nb(n),this.e=null),this.c.Nb(new IE(this,n)),this.b=0},uZn.Bd=function(n){for(;;){if(this.e&&this.e.Bd(n))return HA(this.b,YZn)&&(this.b=$gn(this.b,1)),!0;if(this.e=null,!this.c.Bd(new eb(this)))return!1}},uZn.a=0,uZn.b=0,zW(AZn,"CollectSpliterators/FlatMapSpliterator",1150),sDn(1152,1,QZn,eb),uZn.Cd=function(n){M_(this.a,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$0$Type",1152),sDn(1153,1,QZn,IE),uZn.Cd=function(n){fY(this.a,this.b,n)},zW(AZn,"CollectSpliterators/FlatMapSpliterator/lambda$1$Type",1153),sDn(1151,1150,WZn,T6),zW(AZn,"CollectSpliterators/FlatMapSpliteratorOfObject",1151),sDn(253,1,ZZn),uZn.Fd=function(n){return this.Ed(uG(n,253))},uZn.Ed=function(n){var t;return n==(my(),Tat)?1:n==(py(),Mat)?-1:(qG(),0!=(t=Dun(this.a,n.a))?t:F$(this,526)==F$(n,526)?0:F$(this,526)?1:-1)},uZn.Id=function(){return this.a},uZn.Fb=function(n){return pTn(this,n)},zW(AZn,"Cut",253),sDn(1823,253,ZZn,ky),uZn.Ed=function(n){return n==this?0:1},uZn.Gd=function(n){throw hv(new Av)},uZn.Hd=function(n){n.a+="+\u221e)"},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!1},uZn.Ib=function(){return"+\u221e"},zW(AZn,"Cut/AboveAll",1823),sDn(526,253,{253:1,526:1,3:1,34:1},bx),uZn.Gd=function(n){QA((n.a+="(",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),93)},uZn.Hb=function(){return~Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<0},uZn.Ib=function(){return"/"+this.a+"\\"},zW(AZn,"Cut/AboveValue",526),sDn(1822,253,ZZn,vy),uZn.Ed=function(n){return n==this?0:-1},uZn.Gd=function(n){n.a+="(-\u221e"},uZn.Hd=function(n){throw hv(new Av)},uZn.Id=function(){throw hv(new kM(n1n))},uZn.Hb=function(){return bS(),Avn(this)},uZn.Jd=function(n){return!0},uZn.Ib=function(){return"-\u221e"},zW(AZn,"Cut/BelowAll",1822),sDn(1824,253,ZZn,wx),uZn.Gd=function(n){QA((n.a+="[",n),this.a)},uZn.Hd=function(n){jQ(QA(n,this.a),41)},uZn.Hb=function(){return Hon(this.a)},uZn.Jd=function(n){return qG(),Dun(this.a,n)<=0},uZn.Ib=function(){return"\\"+this.a+"/"},zW(AZn,"Cut/BelowValue",1824),sDn(547,1,t1n),uZn.Jc=function(n){z8(this,n)},uZn.Ib=function(){return rgn(uG(bZ(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},zW(AZn,"FluentIterable",547),sDn(442,547,t1n,iN),uZn.Kc=function(){return new Fz(ix(this.a.Kc(),new h))},zW(AZn,"FluentIterable/2",442),sDn(1059,547,t1n,rN),uZn.Kc=function(){return OV(this)},zW(AZn,"FluentIterable/3",1059),sDn(724,399,LZn,YD),uZn.Xb=function(n){return this.a[n].Kc()},zW(AZn,"FluentIterable/3/1",724),sDn(2070,1,{}),uZn.Ib=function(){return cpn(this.Kd().b)},zW(AZn,"ForwardingObject",2070),sDn(2071,2070,e1n),uZn.Kd=function(){return this.Ld()},uZn.Jc=function(n){z8(this,n)},uZn.Lc=function(){return this.Oc()},uZn.Nc=function(){return new h3(this,0)},uZn.Oc=function(){return new fX(null,this.Nc())},uZn.Fc=function(n){return this.Ld(),Rj()},uZn.Gc=function(n){return this.Ld(),Kj()},uZn.$b=function(){this.Ld(),Fj()},uZn.Hc=function(n){return this.Ld().Hc(n)},uZn.Ic=function(n){return this.Ld().Ic(n)},uZn.dc=function(){return this.Ld().b.dc()},uZn.Kc=function(){return this.Ld().Kc()},uZn.Mc=function(n){return this.Ld(),_j()},uZn.gc=function(){return this.Ld().b.gc()},uZn.Pc=function(){return this.Ld().Pc()},uZn.Qc=function(n){return this.Ld().Qc(n)},zW(AZn,"ForwardingCollection",2071),sDn(2078,31,i1n),uZn.Kc=function(){return this.Od()},uZn.Fc=function(n){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.Md=function(){return this.c||(this.c=this.Nd())},uZn.$b=function(){throw hv(new Kv)},uZn.Hc=function(n){return null!=n&&Wpn(this,n,!1)},uZn.Nd=function(){switch(this.gc()){case 0:return ZW(),ZW(),jat;case 1:return ZW(),new Uq(WW(this.Od().Pb()));default:return new TV(this,this.Pc())}},uZn.Mc=function(n){throw hv(new Kv)},zW(AZn,"ImmutableCollection",2078),sDn(727,2078,i1n,jv),uZn.Kc=function(){return jtn(this.a.Kc())},uZn.Hc=function(n){return null!=n&&this.a.Hc(n)},uZn.Ic=function(n){return this.a.Ic(n)},uZn.dc=function(){return this.a.dc()},uZn.Od=function(){return jtn(this.a.Kc())},uZn.gc=function(){return this.a.gc()},uZn.Pc=function(){return this.a.Pc()},uZn.Qc=function(n){return this.a.Qc(n)},uZn.Ib=function(){return cpn(this.a)},zW(AZn,"ForwardingImmutableCollection",727),sDn(306,2078,r1n),uZn.Kc=function(){return this.Od()},uZn.ed=function(){return this.Pd(0)},uZn.fd=function(n){return this.Pd(n)},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.kd=function(n,t){return this.Qd(n,t)},uZn.bd=function(n,t){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Md=function(){return this},uZn.Fb=function(n){return RDn(this,n)},uZn.Hb=function(){return Xsn(this)},uZn.dd=function(n){return null==n?-1:uTn(this,n)},uZn.Od=function(){return this.Pd(0)},uZn.Pd=function(n){return oR(this,n)},uZn.gd=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},uZn.Qd=function(n,t){return Dwn(new C2(new qE(this),n,t))},zW(AZn,"ImmutableList",306),sDn(2105,306,r1n),uZn.Kc=function(){return jtn(this.Rd().Kc())},uZn.kd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Hc=function(n){return null!=n&&this.Rd().Hc(n)},uZn.Ic=function(n){return this.Rd().Ic(n)},uZn.Fb=function(n){return udn(this.Rd(),n)},uZn.Xb=function(n){return GA(this,n)},uZn.Hb=function(){return Hon(this.Rd())},uZn.dd=function(n){return this.Rd().dd(n)},uZn.dc=function(){return this.Rd().dc()},uZn.Od=function(){return jtn(this.Rd().Kc())},uZn.gc=function(){return this.Rd().gc()},uZn.Qd=function(n,t){return Dwn(this.Rd().kd(n,t))},uZn.Pc=function(){return this.Rd().Qc(Inn(dat,EZn,1,this.Rd().gc(),5,1))},uZn.Qc=function(n){return this.Rd().Qc(n)},uZn.Ib=function(){return cpn(this.Rd())},zW(AZn,"ForwardingImmutableList",2105),sDn(729,1,a1n),uZn.vc=function(){return Mz(this)},uZn.wc=function(n){Yun(this,n)},uZn.ec=function(){return Tz(this)},uZn.yc=function(n,t,e){return Jgn(this,n,t,e)},uZn.Cc=function(){return this.Vd()},uZn.$b=function(){throw hv(new Kv)},uZn._b=function(n){return null!=this.xc(n)},uZn.uc=function(n){return this.Vd().Hc(n)},uZn.Td=function(){return new Ev(this)},uZn.Ud=function(){return new Sv(this)},uZn.Fb=function(n){return Wln(this,n)},uZn.Hb=function(){return Mz(this).Hb()},uZn.dc=function(){return 0==this.gc()},uZn.zc=function(n,t){return BM()},uZn.Bc=function(n){throw hv(new Kv)},uZn.Ib=function(){return QIn(this)},uZn.Vd=function(){return this.e?this.e:this.e=this.Ud()},uZn.c=null,uZn.d=null,uZn.e=null,zW(AZn,"ImmutableMap",729),sDn(730,729,a1n),uZn._b=function(n){return Ej(this,n)},uZn.uc=function(n){return iS(this.b,n)},uZn.Sd=function(){return $wn(new Zl(this))},uZn.Td=function(){return $wn(SJ(this.b))},uZn.Ud=function(){return sB(),new jv(jJ(this.b))},uZn.Fb=function(n){return rS(this.b,n)},uZn.xc=function(n){return W_(this,n)},uZn.Hb=function(){return Hon(this.b.c)},uZn.dc=function(){return this.b.c.dc()},uZn.gc=function(){return this.b.c.gc()},uZn.Ib=function(){return cpn(this.b.c)},zW(AZn,"ForwardingImmutableMap",730),sDn(2072,2071,o1n),uZn.Kd=function(){return this.Wd()},uZn.Ld=function(){return this.Wd()},uZn.Nc=function(){return new h3(this,1)},uZn.Fb=function(n){return n===this||this.Wd().Fb(n)},uZn.Hb=function(){return this.Wd().Hb()},zW(AZn,"ForwardingSet",2072),sDn(1085,2072,o1n,Zl),uZn.Kd=function(){return EJ(this.a.b)},uZn.Ld=function(){return EJ(this.a.b)},uZn.Hc=function(n){if(F$(n,44)&&null==uG(n,44).ld())return!1;try{return eS(EJ(this.a.b),n)}catch(t){if(F$(t=Ehn(t),212))return!1;throw hv(t)}},uZn.Wd=function(){return EJ(this.a.b)},uZn.Qc=function(n){var t;return t=YZ(EJ(this.a.b),n),EJ(this.a.b).b.gc()=0?"+":"")+(i/60|0),t=FL(e.Math.abs(i)%60),(cIn(),nut)[this.q.getDay()]+" "+tut[this.q.getMonth()]+" "+FL(this.q.getDate())+" "+FL(this.q.getHours())+":"+FL(this.q.getMinutes())+":"+FL(this.q.getSeconds())+" GMT"+n+t+" "+this.q.getFullYear()};var Xat,zat,Vat,Wat,Qat,Jat,Yat,Zat,not,tot,eot,iot=zW(DZn,"Date",206);sDn(2015,206,s0n,DEn),uZn.a=!1,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=0,uZn.g=!1,uZn.i=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,uZn.p=0,zW("com.google.gwt.i18n.shared.impl","DateRecord",2015),sDn(2064,1,{}),uZn.pe=function(){return null},uZn.qe=function(){return null},uZn.re=function(){return null},uZn.se=function(){return null},uZn.te=function(){return null},zW(h0n,"JSONValue",2064),sDn(221,2064,{221:1},Ib,Eb),uZn.Fb=function(n){return!!F$(n,221)&&j3(this.a,uG(n,221).a)},uZn.oe=function(){return uv},uZn.Hb=function(){return OZ(this.a)},uZn.pe=function(){return this},uZn.Ib=function(){var n,t,e;for(e=new lx("["),t=0,n=this.a.length;t0&&(e.a+=","),QA(e,uin(this,t));return e.a+="]",e.a},zW(h0n,"JSONArray",221),sDn(492,2064,{492:1},Sb),uZn.oe=function(){return sv},uZn.qe=function(){return this},uZn.Ib=function(){return qx(),""+this.a},uZn.a=!1,zW(h0n,"JSONBoolean",492),sDn(997,63,S1n,Fy),zW(h0n,"JSONException",997),sDn(1036,2064,{},T),uZn.oe=function(){return fv},uZn.Ib=function(){return IZn},zW(h0n,"JSONNull",1036),sDn(263,2064,{263:1},Pb),uZn.Fb=function(n){return!!F$(n,263)&&this.a==uG(n,263).a},uZn.oe=function(){return av},uZn.Hb=function(){return OL(this.a)},uZn.re=function(){return this},uZn.Ib=function(){return this.a+""},uZn.a=0,zW(h0n,"JSONNumber",263),sDn(190,2064,{190:1},_y,Cb),uZn.Fb=function(n){return!!F$(n,190)&&j3(this.a,uG(n,190).a)},uZn.oe=function(){return ov},uZn.Hb=function(){return OZ(this.a)},uZn.se=function(){return this},uZn.Ib=function(){var n,t,e,i,r,c;for(c=new lx("{"),n=!0,i=0,r=(e=Yon(this,Inn($ot,zZn,2,0,6,1))).length;i=0?":"+this.c:"")+")"},uZn.c=0;var jot=zW(kZn,"StackTraceElement",319);bZn={3:1,483:1,34:1,2:1};var Eot,Sot,Pot,Cot,Iot,Oot,Aot,Lot,Not,$ot=zW(kZn,C1n,2);sDn(111,427,{483:1},zM,VM,fx),zW(kZn,"StringBuffer",111),sDn(104,427,{483:1},WM,QM,lx),zW(kZn,"StringBuilder",104),sDn(702,77,v0n,JM),zW(kZn,"StringIndexOutOfBoundsException",702),sDn(2145,1,{}),sDn(48,63,{3:1,103:1,63:1,82:1,48:1},Kv,TM),zW(kZn,"UnsupportedOperationException",48),sDn(247,242,{3:1,34:1,242:1,247:1},Edn,Wj),uZn.Fd=function(n){return $Gn(this,uG(n,247))},uZn.ue=function(){return YIn(dzn(this))},uZn.Fb=function(n){var t;return this===n||!!F$(n,247)&&(t=uG(n,247),this.e==t.e&&0==$Gn(this,t))},uZn.Hb=function(){var n;return 0!=this.b?this.b:this.a<54?(n=Bsn(this.f),this.b=pz(E3(n,-1)),this.b=33*this.b+pz(E3($z(n,32),-1)),this.b=17*this.b+t0(this.e),this.b):(this.b=17*cwn(this.c)+t0(this.e),this.b)},uZn.Ib=function(){return dzn(this)},uZn.a=0,uZn.b=0,uZn.d=0,uZn.e=0,uZn.f=0;var Dot,xot,Rot,Kot,Fot,_ot,Bot=zW("java.math","BigDecimal",247);sDn(92,242,{3:1,34:1,242:1,92:1},Z5,x3,VV,nkn,PN),uZn.Fd=function(n){return Pvn(this,uG(n,92))},uZn.ue=function(){return YIn(bYn(this,0))},uZn.Fb=function(n){return Cpn(this,n)},uZn.Hb=function(){return cwn(this)},uZn.Ib=function(){return bYn(this,0)},uZn.b=-2,uZn.c=0,uZn.d=0,uZn.e=0;var Hot,Uot,Got,qot,Xot=zW("java.math","BigInteger",92);sDn(497,2065,xZn),uZn.$b=function(){$V(this)},uZn._b=function(n){return PV(this,n)},uZn.uc=function(n){return Qln(this,n,this.i)||Qln(this,n,this.f)},uZn.vc=function(){return new Nw(this)},uZn.xc=function(n){return cQ(this,n)},uZn.zc=function(n,t){return vJ(this,n,t)},uZn.Bc=function(n){return u7(this,n)},uZn.gc=function(){return oS(this)},uZn.g=0,zW(DZn,"AbstractHashMap",497),sDn(267,KZn,FZn,Nw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return Q4(this,n)},uZn.Kc=function(){return new bsn(this.a)},uZn.Mc=function(n){var t;return!!Q4(this,n)&&(t=uG(n,44).ld(),this.a.Bc(t),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractHashMap/EntrySet",267),sDn(268,1,$Zn,bsn),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return von(this)},uZn.Ob=function(){return this.b},uZn.Qb=function(){Oen(this)},uZn.b=!1,uZn.d=0,zW(DZn,"AbstractHashMap/EntrySetIterator",268),sDn(426,1,$Zn,Jw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this)},uZn.Pb=function(){return _Y(this)},uZn.Qb=function(){LQ(this)},uZn.b=0,uZn.c=-1,zW(DZn,"AbstractList/IteratorImpl",426),sDn(98,426,UZn,N4),uZn.Qb=function(){LQ(this)},uZn.Rb=function(n){pF(this,n)},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Ub=function(){return MK(this.b>0),this.a.Xb(this.c=--this.b)},uZn.Vb=function(){return this.b-1},uZn.Wb=function(n){TK(-1!=this.c),this.a.hd(this.c,n)},zW(DZn,"AbstractList/ListIteratorImpl",98),sDn(244,56,m1n,C2),uZn.bd=function(n,t){o3(n,this.b),this.c.bd(this.a+n,t),++this.b},uZn.Xb=function(n){return u3(n,this.b),this.c.Xb(this.a+n)},uZn.gd=function(n){var t;return u3(n,this.b),t=this.c.gd(this.a+n),--this.b,t},uZn.hd=function(n,t){return u3(n,this.b),this.c.hd(this.a+n,t)},uZn.gc=function(){return this.b},uZn.a=0,uZn.b=0,zW(DZn,"AbstractList/SubList",244),sDn(266,KZn,FZn,Lw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return new Kw(this.a.vc().Kc())},uZn.Mc=function(n){return!!this.a._b(n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/1",266),sDn(541,1,$Zn,Kw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).ld()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/1/1",541),sDn(231,31,RZn,Fw),uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a.uc(n)},uZn.Kc=function(){return new _w(this.a.vc().Kc())},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractMap/2",231),sDn(300,1,$Zn,_w),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a.Ob()},uZn.Pb=function(){return uG(this.a.Pb(),44).md()},uZn.Qb=function(){this.a.Qb()},zW(DZn,"AbstractMap/2/1",300),sDn(493,1,{493:1,44:1}),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.d,t.ld())&&OJ(this.e,t.md()))},uZn.ld=function(){return this.d},uZn.md=function(){return this.e},uZn.Hb=function(){return VN(this.d)^VN(this.e)},uZn.nd=function(n){return wF(this,n)},uZn.Ib=function(){return this.d+"="+this.e},zW(DZn,"AbstractMap/AbstractEntry",493),sDn(397,493,{493:1,397:1,44:1},VP),zW(DZn,"AbstractMap/SimpleEntry",397),sDn(2082,1,$0n),uZn.Fb=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),OJ(this.ld(),t.ld())&&OJ(this.md(),t.md()))},uZn.Hb=function(){return VN(this.ld())^VN(this.md())},uZn.Ib=function(){return this.ld()+"="+this.md()},zW(DZn,qZn,2082),sDn(2090,2065,_Zn),uZn.Xc=function(n){return Sj(this.Ee(n))},uZn.tc=function(n){return I9(this,n)},uZn._b=function(n){return dF(this,n)},uZn.vc=function(){return new Uw(this)},uZn.Tc=function(){return DV(this.Ge())},uZn.Yc=function(n){return Sj(this.He(n))},uZn.xc=function(n){var t;return t=n,DA(this.Fe(t))},uZn.$c=function(n){return Sj(this.Ie(n))},uZn.ec=function(){return new Bw(this)},uZn.Vc=function(){return DV(this.Je())},uZn._c=function(n){return Sj(this.Ke(n))},zW(DZn,"AbstractNavigableMap",2090),sDn(629,KZn,FZn,Uw),uZn.Hc=function(n){return F$(n,44)&&I9(this.b,uG(n,44))},uZn.Kc=function(){return this.b.De()},uZn.Mc=function(n){var t;return!!F$(n,44)&&(t=uG(n,44),this.b.Le(t))},uZn.gc=function(){return this.b.gc()},zW(DZn,"AbstractNavigableMap/EntrySet",629),sDn(1146,KZn,HZn,Bw),uZn.Nc=function(){return new GP(this)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return dF(this.a,n)},uZn.Kc=function(){return new Hw(this.a.vc().b.De())},uZn.Mc=function(n){return!!dF(this.a,n)&&(this.a.Bc(n),!0)},uZn.gc=function(){return this.a.gc()},zW(DZn,"AbstractNavigableMap/NavigableKeySet",1146),sDn(1147,1,$Zn,Hw),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return AP(this.a.a)},uZn.Pb=function(){return kR(this.a).ld()},uZn.Qb=function(){rB(this.a)},zW(DZn,"AbstractNavigableMap/NavigableKeySet/1",1147),sDn(2103,31,RZn),uZn.Fc=function(n){return kG(_Cn(this,n),D0n),!0},uZn.Gc=function(n){return tJ(n),vG(n!=this,"Can't add a queue to itself"),Qon(this,n)},uZn.$b=function(){for(;null!=hin(this););},zW(DZn,"AbstractQueue",2103),sDn(310,31,{4:1,20:1,31:1,16:1},ND,$4),uZn.Fc=function(n){return O6(this,n),!0},uZn.$b=function(){q5(this)},uZn.Hc=function(n){return Chn(new XJ(this),n)},uZn.dc=function(){return LM(this)},uZn.Kc=function(){return new XJ(this)},uZn.Mc=function(n){return m0(new XJ(this),n)},uZn.gc=function(){return this.c-this.b&this.a.length-1},uZn.Nc=function(){return new h3(this,272)},uZn.Qc=function(n){var t;return t=this.c-this.b&this.a.length-1,n.lengtht&&uQ(n,t,null),n},uZn.b=0,uZn.c=0,zW(DZn,"ArrayDeque",310),sDn(458,1,$Zn,XJ),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return this.a!=this.b},uZn.Pb=function(){return rwn(this)},uZn.Qb=function(){lan(this)},uZn.a=0,uZn.b=0,uZn.c=-1,zW(DZn,"ArrayDeque/IteratorImpl",458),sDn(13,56,x0n,Zm,R7,Z_),uZn.bd=function(n,t){GX(this,n,t)},uZn.Fc=function(n){return kD(this,n)},uZn.cd=function(n,t){return Cbn(this,n,t)},uZn.Gc=function(n){return Ohn(this,n)},uZn.$b=function(){Xv(this.c,0)},uZn.Hc=function(n){return-1!=Ten(this,n,0)},uZn.Jc=function(n){Prn(this,n)},uZn.Xb=function(n){return zq(this,n)},uZn.dd=function(n){return Ten(this,n,0)},uZn.dc=function(){return 0==this.c.length},uZn.Kc=function(){return new Ww(this)},uZn.gd=function(n){return i7(this,n)},uZn.Mc=function(n){return men(this,n)},uZn.ce=function(n,t){P2(this,n,t)},uZn.hd=function(n,t){return Y8(this,n,t)},uZn.gc=function(){return this.c.length},uZn.jd=function(n){f$(this,n)},uZn.Pc=function(){return tq(this.c)},uZn.Qc=function(n){return Ekn(this,n)};var zot,Vot,Wot,Qot,Jot,Yot,Zot,nut,tut,eut=zW(DZn,"ArrayList",13);sDn(7,1,$Zn,Ww),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return l$(this)},uZn.Pb=function(){return N3(this)},uZn.Qb=function(){tW(this)},uZn.a=0,uZn.b=-1,zW(DZn,"ArrayList/1",7),sDn(2112,e.Function,{},P),uZn.Me=function(n,t){return ugn(n,t)},sDn(151,56,R0n,IM),uZn.Hc=function(n){return-1!=gan(this,n)},uZn.Jc=function(n){var t,e,i,r;for(tJ(n),i=0,r=(e=this.a).length;i0)throw hv(new vM(Y0n+n+" greater than "+this.e));return this.f.Te()?G1(this.c,this.b,this.a,n,t):N2(this.c,n,t)},uZn.zc=function(n,t){if(!ljn(this.c,this.f,n,this.b,this.a,this.e,this.d))throw hv(new vM(n+" outside the range "+this.b+" to "+this.e));return xfn(this.c,n,t)},uZn.Bc=function(n){var t;return t=n,ljn(this.c,this.f,t,this.b,this.a,this.e,this.d)?V1(this.c,t):null},uZn.Le=function(n){return $Q(this,n.ld())&&Lnn(this.c,n)},uZn.gc=function(){var n,t,e;if(!((t=this.f.Te()?this.a?Zmn(this.c,this.b,!0):Zmn(this.c,this.b,!1):Ytn(this.c))&&$Q(this,t.d)&&t))return 0;for(n=0,e=new dun(this.c,this.f,this.b,this.a,this.e,this.d);AP(e.a);e.b=uG(_Y(e.a),44))++n;return n},uZn.ad=function(n,t){if(this.f.Te()&&this.c.a.Ne(n,this.b)<0)throw hv(new vM(Y0n+n+Z0n+this.b));return this.f.Ue()?G1(this.c,n,t,this.e,this.d):$2(this.c,n,t)},uZn.a=!1,uZn.d=!1,zW(DZn,"TreeMap/SubMap",631),sDn(303,22,n2n,qP),uZn.Te=function(){return!1},uZn.Ue=function(){return!1};var Mut,Tut=_cn(DZn,"TreeMap/SubMapType",303,Oat,K6,hB);sDn(1143,303,n2n,SN),uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/1",1143,Tut,null,null),sDn(1144,303,n2n,P$),uZn.Te=function(){return!0},uZn.Ue=function(){return!0},_cn(DZn,"TreeMap/SubMapType/2",1144,Tut,null,null),sDn(1145,303,n2n,EN),uZn.Te=function(){return!0},_cn(DZn,"TreeMap/SubMapType/3",1145,Tut,null,null),sDn(157,KZn,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},rk,Hj,od),uZn.Nc=function(){return new GP(this)},uZn.Fc=function(n){return _V(this,n)},uZn.$b=function(){this.a.$b()},uZn.Hc=function(n){return this.a._b(n)},uZn.Kc=function(){return this.a.ec().Kc()},uZn.Mc=function(n){return sD(this,n)},uZn.gc=function(){return this.a.gc()};var jut=zW(DZn,"TreeSet",157);sDn(1082,1,{},ud),uZn.Ve=function(n,t){return _K(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$0$Type",1082),sDn(1083,1,{},sd),uZn.Ve=function(n,t){return BK(this.a,n,t)},zW(t2n,"BinaryOperator/lambda$1$Type",1083),sDn(952,1,{},H),uZn.Kb=function(n){return n},zW(t2n,"Function/lambda$0$Type",952),sDn(395,1,y1n,hd),uZn.Mb=function(n){return!this.a.Mb(n)},zW(t2n,"Predicate/lambda$2$Type",395),sDn(581,1,{581:1});var Eut,Sut,Put=zW(e2n,"Handler",581);sDn(2107,1,yZn),uZn.xe=function(){return"DUMMY"},uZn.Ib=function(){return this.xe()},zW(e2n,"Level",2107),sDn(1706,2107,yZn,U),uZn.xe=function(){return"INFO"},zW(e2n,"Level/LevelInfo",1706),sDn(1843,1,{},ik),zW(e2n,"LogManager",1843),sDn(1896,1,yZn,iB),uZn.b=null,zW(e2n,"LogRecord",1896),sDn(525,1,{525:1},e9),uZn.e=!1;var Cut,Iut,Out,Aut=!1,Lut=!1,Nut=!1,$ut=!1,Dut=!1;zW(e2n,"Logger",525),sDn(835,581,{581:1},G),zW(e2n,"SimpleConsoleLogHandler",835),sDn(108,22,{3:1,34:1,22:1,108:1},XP);var xut,Rut=_cn(c2n,"Collector/Characteristics",108,Oat,D2,fB);sDn(758,1,{},WV),zW(c2n,"CollectorImpl",758),sDn(1074,1,{},q),uZn.Ve=function(n,t){return idn(uG(n,213),uG(t,213))},zW(c2n,"Collectors/10methodref$merge$Type",1074),sDn(1075,1,{},X),uZn.Kb=function(n){return R4(uG(n,213))},zW(c2n,"Collectors/11methodref$toString$Type",1075),sDn(1076,1,{},fd),uZn.Kb=function(n){return qx(),!!IL(n)},zW(c2n,"Collectors/12methodref$test$Type",1076),sDn(144,1,{},z),uZn.Yd=function(n,t){uG(n,16).Fc(t)},zW(c2n,"Collectors/20methodref$add$Type",144),sDn(146,1,{},V),uZn.Xe=function(){return new Zm},zW(c2n,"Collectors/21methodref$ctor$Type",146),sDn(359,1,{},W),uZn.Xe=function(){return new ek},zW(c2n,"Collectors/23methodref$ctor$Type",359),sDn(360,1,{},Q),uZn.Yd=function(n,t){FV(uG(n,49),t)},zW(c2n,"Collectors/24methodref$add$Type",360),sDn(1069,1,{},J),uZn.Ve=function(n,t){return IS(uG(n,15),uG(t,16))},zW(c2n,"Collectors/4methodref$addAll$Type",1069),sDn(1073,1,{},Y),uZn.Yd=function(n,t){o7(uG(n,213),uG(t,483))},zW(c2n,"Collectors/9methodref$add$Type",1073),sDn(1072,1,{},fG),uZn.Xe=function(){return new Ysn(this.a,this.b,this.c)},zW(c2n,"Collectors/lambda$15$Type",1072),sDn(1077,1,{},Z),uZn.Xe=function(){var n;return Akn(n=new u8,(qx(),!1),new Zm),Akn(n,!0,new Zm),n},zW(c2n,"Collectors/lambda$22$Type",1077),sDn(1078,1,{},ld),uZn.Xe=function(){return Uhn(cT(dat,1),EZn,1,5,[this.a])},zW(c2n,"Collectors/lambda$25$Type",1078),sDn(1079,1,{},bd),uZn.Yd=function(n,t){Yq(this.a,Kcn(n))},zW(c2n,"Collectors/lambda$26$Type",1079),sDn(1080,1,{},wd),uZn.Ve=function(n,t){return sV(this.a,Kcn(n),Kcn(t))},zW(c2n,"Collectors/lambda$27$Type",1080),sDn(1081,1,{},nn),uZn.Kb=function(n){return Kcn(n)[0]},zW(c2n,"Collectors/lambda$28$Type",1081),sDn(728,1,{},tn),uZn.Ve=function(n,t){return nX(n,t)},zW(c2n,"Collectors/lambda$4$Type",728),sDn(145,1,{},en),uZn.Ve=function(n,t){return ES(uG(n,16),uG(t,16))},zW(c2n,"Collectors/lambda$42$Type",145),sDn(361,1,{},rn),uZn.Ve=function(n,t){return SS(uG(n,49),uG(t,49))},zW(c2n,"Collectors/lambda$50$Type",361),sDn(362,1,{},cn),uZn.Kb=function(n){return uG(n,49)},zW(c2n,"Collectors/lambda$51$Type",362),sDn(1068,1,{},dd),uZn.Yd=function(n,t){vln(this.a,uG(n,85),t)},zW(c2n,"Collectors/lambda$7$Type",1068),sDn(1070,1,{},an),uZn.Ve=function(n,t){return Ahn(uG(n,85),uG(t,85),new J)},zW(c2n,"Collectors/lambda$8$Type",1070),sDn(1071,1,{},gd),uZn.Kb=function(n){return zgn(this.a,uG(n,85))},zW(c2n,"Collectors/lambda$9$Type",1071),sDn(550,1,{}),uZn.$e=function(){qQ(this)},uZn.d=!1,zW(c2n,"TerminatableStream",550),sDn(827,550,a2n,IK),uZn.$e=function(){qQ(this)},zW(c2n,"DoubleStreamImpl",827),sDn(1847,736,WZn,lG),uZn.Re=function(n){return FMn(this,uG(n,189))},uZn.a=null,zW(c2n,"DoubleStreamImpl/2",1847),sDn(1848,1,_0n,pd),uZn.Pe=function(n){$N(this.a,n)},zW(c2n,"DoubleStreamImpl/2/lambda$0$Type",1848),sDn(1845,1,_0n,md),uZn.Pe=function(n){NN(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$0$Type",1845),sDn(1846,1,_0n,vd),uZn.Pe=function(n){Mmn(this.a,n)},zW(c2n,"DoubleStreamImpl/lambda$2$Type",1846),sDn(1397,735,WZn,i9),uZn.Re=function(n){return e6(this,uG(n,202))},uZn.a=0,uZn.b=0,uZn.c=0,zW(c2n,"IntStream/5",1397),sDn(806,550,a2n,OK),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),this.a},zW(c2n,"IntStreamImpl",806),sDn(807,550,a2n,mS),uZn.$e=function(){qQ(this)},uZn._e=function(){return GQ(this),BD(),dut},zW(c2n,"IntStreamImpl/Empty",807),sDn(1687,1,JZn,kd),uZn.Dd=function(n){msn(this.a,n)},zW(c2n,"IntStreamImpl/lambda$4$Type",1687);var Kut,Fut=Iq(c2n,"Stream");sDn(26,550,{533:1,687:1,848:1},fX),uZn.$e=function(){qQ(this)},zW(c2n,"StreamImpl",26),sDn(1102,499,WZn,D_),uZn.Bd=function(n){for(;Ttn(this);){if(this.a.Bd(n))return!0;qQ(this.b),this.b=null,this.a=null}return!1},zW(c2n,"StreamImpl/1",1102),sDn(1103,1,QZn,yd),uZn.Cd=function(n){mG(this.a,uG(n,848))},zW(c2n,"StreamImpl/1/lambda$0$Type",1103),sDn(1104,1,y1n,Md),uZn.Mb=function(n){return FV(this.a,n)},zW(c2n,"StreamImpl/1methodref$add$Type",1104),sDn(1105,499,WZn,QY),uZn.Bd=function(n){var t;return this.a||(t=new Zm,this.b.a.Nb(new Td(t)),hZ(),f$(t,this.c),this.a=new h3(t,16)),urn(this.a,n)},uZn.a=null,zW(c2n,"StreamImpl/5",1105),sDn(1106,1,QZn,Td),uZn.Cd=function(n){kD(this.a,n)},zW(c2n,"StreamImpl/5/2methodref$add$Type",1106),sDn(737,499,WZn,ien),uZn.Bd=function(n){for(this.b=!1;!this.b&&this.c.Bd(new WP(this,n)););return this.b},uZn.b=!1,zW(c2n,"StreamImpl/FilterSpliterator",737),sDn(1096,1,QZn,WP),uZn.Cd=function(n){Xz(this.a,this.b,n)},zW(c2n,"StreamImpl/FilterSpliterator/lambda$0$Type",1096),sDn(1091,736,WZn,s7),uZn.Re=function(n){return v_(this,uG(n,189))},zW(c2n,"StreamImpl/MapToDoubleSpliterator",1091),sDn(1095,1,QZn,QP),uZn.Cd=function(n){vC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1095),sDn(1090,735,WZn,h7),uZn.Re=function(n){return k_(this,uG(n,202))},zW(c2n,"StreamImpl/MapToIntSpliterator",1090),sDn(1094,1,QZn,JP),uZn.Cd=function(n){kC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1094),sDn(734,499,WZn,f7),uZn.Bd=function(n){return y_(this,n)},zW(c2n,"StreamImpl/MapToObjSpliterator",734),sDn(1093,1,QZn,YP),uZn.Cd=function(n){yC(this.a,this.b,n)},zW(c2n,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1093),sDn(1092,499,WZn,Fan),uZn.Bd=function(n){for(;NP(this.b,0);){if(!this.a.Bd(new on))return!1;this.b=$gn(this.b,1)}return this.a.Bd(n)},uZn.b=0,zW(c2n,"StreamImpl/SkipSpliterator",1092),sDn(1097,1,QZn,on),uZn.Cd=function(n){},zW(c2n,"StreamImpl/SkipSpliterator/lambda$0$Type",1097),sDn(626,1,QZn,un),uZn.Cd=function(n){Ob(this,n)},zW(c2n,"StreamImpl/ValueConsumer",626),sDn(1098,1,QZn,sn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$0$Type",1098),sDn(1099,1,QZn,hn),uZn.Cd=function(n){vS()},zW(c2n,"StreamImpl/lambda$1$Type",1099),sDn(1100,1,{},jd),uZn.Ve=function(n,t){return FB(this.a,n,t)},zW(c2n,"StreamImpl/lambda$4$Type",1100),sDn(1101,1,QZn,nC),uZn.Cd=function(n){kF(this.b,this.a,n)},zW(c2n,"StreamImpl/lambda$5$Type",1101),sDn(1107,1,QZn,Ed),uZn.Cd=function(n){Usn(this.a,uG(n,380))},zW(c2n,"TerminatableStream/lambda$0$Type",1107),sDn(2142,1,{}),sDn(2014,1,{},fn),zW("javaemul.internal","ConsoleLogger",2014);var _ut=0;sDn(2134,1,{}),sDn(1830,1,QZn,ln),uZn.Cd=function(n){uG(n,317)},zW(l2n,"BowyerWatsonTriangulation/lambda$0$Type",1830),sDn(1831,1,QZn,Pd),uZn.Cd=function(n){Qon(this.a,uG(n,317).e)},zW(l2n,"BowyerWatsonTriangulation/lambda$1$Type",1831),sDn(1832,1,QZn,bn),uZn.Cd=function(n){uG(n,177)},zW(l2n,"BowyerWatsonTriangulation/lambda$2$Type",1832),sDn(1827,1,b2n,Cd),uZn.Ne=function(n,t){return S5(this.a,uG(n,177),uG(t,177))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(l2n,"NaiveMinST/lambda$0$Type",1827),sDn(506,1,{},Sd),zW(l2n,"NodeMicroLayout",506),sDn(177,1,{177:1},ZP),uZn.Fb=function(n){var t;return!!F$(n,177)&&(t=uG(n,177),OJ(this.a,t.a)&&OJ(this.b,t.b)||OJ(this.a,t.b)&&OJ(this.b,t.a))},uZn.Hb=function(){return VN(this.a)+VN(this.b)};var But=zW(l2n,"TEdge",177);sDn(317,1,{317:1},gqn),uZn.Fb=function(n){var t;return!!F$(n,317)&&Den(this,(t=uG(n,317)).a)&&Den(this,t.b)&&Den(this,t.c)},uZn.Hb=function(){return VN(this.a)+VN(this.b)+VN(this.c)},zW(l2n,"TTriangle",317),sDn(225,1,{225:1},C$),zW(l2n,"Tree",225),sDn(1218,1,{},q0),zW(w2n,"Scanline",1218);var Hut=Iq(w2n,d2n);sDn(1758,1,{},Qin),zW(g2n,"CGraph",1758),sDn(316,1,{316:1},V0),uZn.b=0,uZn.c=0,uZn.d=0,uZn.g=0,uZn.i=0,uZn.k=T0n,zW(g2n,"CGroup",316),sDn(830,1,{},fk),zW(g2n,"CGroup/CGroupBuilder",830),sDn(60,1,{60:1},NF),uZn.Ib=function(){return this.j?mK(this.j.Kb(this)):(vK(zut),zut.o+"@"+(xx(this)>>>0).toString(16))},uZn.f=0,uZn.i=T0n;var Uut,Gut,qut,Xut,zut=zW(g2n,"CNode",60);sDn(829,1,{},lk),zW(g2n,"CNode/CNodeBuilder",829),sDn(1590,1,{},wn),uZn.ff=function(n,t){return 0},uZn.gf=function(n,t){return 0},zW(g2n,m2n,1590),sDn(1853,1,{},dn),uZn.cf=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g;for(h=M0n,r=new Ww(n.a.b);r.ae.d.c||e.d.c==r.d.c&&e.d.b0?n+this.n.d+this.n.a:0},uZn.kf=function(){var n,t,i,r,c;if(c=0,this.e)this.b?c=this.b.a:this.a[1][1]&&(c=this.a[1][1].kf());else if(this.g)c=ypn(this,wEn(this,null,!0));else for(Yrn(),i=0,r=(t=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i0?c+this.n.b+this.n.c:0},uZn.lf=function(){var n,t,e,i,r;if(this.g)for(n=wEn(this,null,!1),Yrn(),i=0,r=(e=Uhn(cT(Ist,1),p1n,237,0,[jst,Est,Sst])).length;i0&&(r[0]+=this.d,i-=r[0]),r[2]>0&&(r[2]+=this.d,i-=r[2]),this.c.a=e.Math.max(0,i),this.c.d=t.d+n.d+(this.c.a-i)/2,r[1]=e.Math.max(r[1],i),J9(this,Est,t.d+n.d+r[0]-(r[1]-i)/2,r)},uZn.b=null,uZn.d=0,uZn.e=!1,uZn.f=!1,uZn.g=!1;var Ost,Ast,Lst,Nst=0,$st=0;zW(U2n,"GridContainerCell",1538),sDn(470,22,{3:1,34:1,22:1,470:1},aC);var Dst,xst=_cn(U2n,"HorizontalLabelAlignment",470,Oat,R2,gB);sDn(314,217,{217:1,314:1},a0,Yin,c1),uZn.jf=function(){return iq(this)},uZn.kf=function(){return rq(this)},uZn.a=0,uZn.c=!1;var Rst,Kst,Fst,_st=zW(U2n,"LabelCell",314);sDn(252,336,{217:1,336:1,252:1},tkn),uZn.jf=function(){return dNn(this)},uZn.kf=function(){return gNn(this)},uZn.lf=function(){YGn(this)},uZn.mf=function(){rqn(this)},uZn.b=0,uZn.c=0,uZn.d=!1,zW(U2n,"StripContainerCell",252),sDn(1691,1,y1n,Mn),uZn.Mb=function(n){return $M(uG(n,217))},zW(U2n,"StripContainerCell/lambda$0$Type",1691),sDn(1692,1,{},Tn),uZn.Ye=function(n){return uG(n,217).kf()},zW(U2n,"StripContainerCell/lambda$1$Type",1692),sDn(1693,1,y1n,jn),uZn.Mb=function(n){return DM(uG(n,217))},zW(U2n,"StripContainerCell/lambda$2$Type",1693),sDn(1694,1,{},En),uZn.Ye=function(n){return uG(n,217).jf()},zW(U2n,"StripContainerCell/lambda$3$Type",1694),sDn(471,22,{3:1,34:1,22:1,471:1},oC);var Bst,Hst,Ust,Gst,qst,Xst,zst,Vst,Wst,Qst,Jst,Yst,Zst,nht,tht,eht,iht,rht,cht,aht,oht,uht,sht,hht=_cn(U2n,"VerticalLabelAlignment",471,Oat,x2,pB);sDn(800,1,{},kQn),uZn.c=0,uZn.d=0,uZn.k=0,uZn.s=0,uZn.t=0,uZn.v=!1,uZn.w=0,uZn.D=!1,zW(J2n,"NodeContext",800),sDn(1536,1,b2n,Sn),uZn.Ne=function(n,t){return UL(uG(n,64),uG(t,64))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/0methodref$comparePortSides$Type",1536),sDn(1537,1,b2n,Pn),uZn.Ne=function(n,t){return ACn(uG(n,117),uG(t,117))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(J2n,"NodeContext/1methodref$comparePortContexts$Type",1537),sDn(164,22,{3:1,34:1,22:1,164:1},pun);var fht,lht,bht,wht,dht,ght,pht,mht=_cn(J2n,"NodeLabelLocation",164,Oat,Nkn,mB);sDn(117,1,{117:1},v$n),uZn.a=!1,zW(J2n,"PortContext",117),sDn(1541,1,QZn,Cn),uZn.Cd=function(n){eE(uG(n,314))},zW(n3n,t3n,1541),sDn(1542,1,y1n,In),uZn.Mb=function(n){return!!uG(n,117).c},zW(n3n,e3n,1542),sDn(1543,1,QZn,On),uZn.Cd=function(n){eE(uG(n,117).c)},zW(n3n,"LabelPlacer/lambda$2$Type",1543),sDn(1540,1,QZn,An),uZn.Cd=function(n){VK(),wv(uG(n,117))},zW(n3n,"NodeLabelAndSizeUtilities/lambda$0$Type",1540),sDn(801,1,QZn,DB),uZn.Cd=function(n){aP(this.b,this.c,this.a,uG(n,187))},uZn.a=!1,uZn.c=!1,zW(n3n,"NodeLabelCellCreator/lambda$0$Type",801),sDn(1539,1,QZn,Ld),uZn.Cd=function(n){Vv(this.a,uG(n,187))},zW(n3n,"PortContextCreator/lambda$0$Type",1539),sDn(1902,1,{},Ln),zW(r3n,"GreedyRectangleStripOverlapRemover",1902),sDn(1903,1,b2n,Nn),uZn.Ne=function(n,t){return Cx(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1903),sDn(1849,1,{},pk),uZn.a=5,uZn.e=0,zW(r3n,"RectangleStripOverlapRemover",1849),sDn(1850,1,b2n,$n),uZn.Ne=function(n,t){return Ix(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1850),sDn(1852,1,b2n,Dn),uZn.Ne=function(n,t){return fW(uG(n,226),uG(t,226))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(r3n,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1852),sDn(417,22,{3:1,34:1,22:1,417:1},uC);var vht,kht,yht,Mht,Tht,jht=_cn(r3n,"RectangleStripOverlapRemover/OverlapRemovalDirection",417,Oat,B6,vB);sDn(226,1,{226:1},ZX),zW(r3n,"RectangleStripOverlapRemover/RectangleNode",226),sDn(1851,1,QZn,Nd),uZn.Cd=function(n){lTn(this.a,uG(n,226))},zW(r3n,"RectangleStripOverlapRemover/lambda$1$Type",1851),sDn(1323,1,b2n,xn),uZn.Ne=function(n,t){return fzn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1323),sDn(1326,1,{},Rn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1326),sDn(1327,1,y1n,Kn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1327),sDn(1328,1,y1n,Fn),uZn.Mb=function(n){return uG(n,332).a},zW(a3n,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1328),sDn(1321,1,b2n,_n),uZn.Ne=function(n,t){return JBn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1321),sDn(1324,1,{},Bn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1324),sDn(781,1,b2n,Hn),uZn.Ne=function(n,t){return lhn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinNumOfExtensionsComparator",781),sDn(1319,1,b2n,Un),uZn.Ne=function(n,t){return ron(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparator",1319),sDn(1320,1,b2n,Gn),uZn.Ne=function(n,t){return Byn(uG(n,330),uG(t,330))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/MinPerimeterComparatorWithShape",1320),sDn(1322,1,b2n,qn),uZn.Ne=function(n,t){return zHn(uG(n,176),uG(t,176))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1322),sDn(1325,1,{},Xn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1325),sDn(782,1,{},sC),uZn.Ve=function(n,t){return d6(this,uG(n,42),uG(t,176))},zW(a3n,"SuccessorCombination",782),sDn(649,1,{},zn),uZn.Ve=function(n,t){var e;return KNn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorJitter",649),sDn(648,1,{},Vn),uZn.Ve=function(n,t){var e;return cFn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorLineByLine",648),sDn(573,1,{},Wn),uZn.Ve=function(n,t){var e;return txn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorManhattan",573),sDn(1344,1,{},Qn),uZn.Ve=function(n,t){var e;return lKn((e=uG(n,42),uG(t,176),e))},zW(a3n,"SuccessorMaxNormWindingInMathPosSense",1344),sDn(409,1,{},$d),uZn.Ve=function(n,t){return HV(this,n,t)},uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=!1,zW(a3n,"SuccessorQuadrantsGeneric",409),sDn(1345,1,{},Jn),uZn.Kb=function(n){return uG(n,334).a},zW(a3n,"SuccessorQuadrantsGeneric/lambda$0$Type",1345),sDn(332,22,{3:1,34:1,22:1,332:1},hC),uZn.a=!1;var Eht,Sht=_cn(f3n,l3n,332,Oat,F6,kB);sDn(1317,1,{}),uZn.Ib=function(){var n,t,e,i,r,c;for(e=" ",n=xwn(0),r=0;r=0?"b"+n+"["+X8(this.a)+"]":"b["+X8(this.a)+"]":"b_"+xx(this)},zW(V3n,"FBendpoint",250),sDn(289,137,{3:1,289:1,96:1,137:1},$F),uZn.Ib=function(){return X8(this)},zW(V3n,"FEdge",289),sDn(235,137,{3:1,235:1,96:1,137:1},d7);var uft,sft,hft,fft,lft,bft,wft,dft,gft,pft,mft=zW(V3n,"FGraph",235);sDn(453,309,{3:1,453:1,309:1,96:1,137:1},A5),uZn.Ib=function(){return null==this.b||0==this.b.length?"l["+X8(this.a)+"]":"l_"+this.b},zW(V3n,"FLabel",453),sDn(153,309,{3:1,153:1,309:1,96:1,137:1},E$),uZn.Ib=function(){return z3(this)},uZn.a=0,zW(V3n,"FNode",153),sDn(2100,1,{}),uZn.vf=function(n){pGn(this,n)},uZn.wf=function(){ITn(this)},uZn.d=0,zW(Q3n,"AbstractForceModel",2100),sDn(641,2100,{641:1},lsn),uZn.uf=function(n,t){var i,r,c,a;return qzn(this.f,n,t),c=YF(D$(t.d),n.d),a=e.Math.sqrt(c.a*c.a+c.b*c.b),r=e.Math.max(0,a-NQ(n.e)/2-NQ(t.e)/2),vD(c,((i=VNn(this.e,n,t))>0?-iW(r,this.c)*i:TR(r,this.b)*uG(oIn(n,(cGn(),$ft)),17).a)/a),c},uZn.vf=function(n){pGn(this,n),this.a=uG(oIn(n,(cGn(),Tft)),17).a,this.c=uM(pK(oIn(n,_ft))),this.b=uM(pK(oIn(n,xft)))},uZn.xf=function(n){return n0&&(a-=aM(r,this.a)*i),vD(c,a*this.b/o),c},uZn.vf=function(n){var t,i,r,c,a,o,u;for(pGn(this,n),this.b=uM(pK(oIn(n,(cGn(),Bft)))),this.c=this.b/uG(oIn(n,Tft),17).a,r=n.e.c.length,a=0,c=0,u=new Ww(n.e);u.a0},uZn.a=0,uZn.b=0,uZn.c=0,zW(Q3n,"FruchtermanReingoldModel",642),sDn(860,1,K2n,Gf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J3n),""),"Force Model"),"Determines the model for force calculation."),hft),(lAn(),gNt)),mlt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y3n),""),"Iterations"),"The number of iterations on the force model."),xwn(300)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z3n),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n4n),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),t4n),dNt),fot),ggn(hNt)))),H4(n,n4n,J3n,dft),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e4n),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),dNt),fot),ggn(hNt)))),H4(n,e4n,J3n,lft),vJn((new qf,n))},zW(i4n,"ForceMetaDataProvider",860),sDn(432,22,{3:1,34:1,22:1,432:1},wC);var vft,kft,yft,Mft,Tft,jft,Eft,Sft,Pft,Cft,Ift,Oft,Aft,Lft,Nft,$ft,Dft,xft,Rft,Kft,Fft,_ft,Bft,Hft,Uft,Gft,qft,Xft,zft,Vft,Wft,Qft,Jft,Yft,Zft,nlt,tlt,elt,ilt,rlt,clt,alt,olt,ult,slt,hlt,flt,llt,blt,wlt,dlt,glt,plt,mlt=_cn(i4n,"ForceModelStrategy",432,Oat,h1,TB);sDn($1n,1,K2n,qf),uZn.hf=function(n){vJn(n)},zW(i4n,"ForceOptions",$1n),sDn(1001,1,{},mt),uZn.sf=function(){return new hk},uZn.tf=function(n){},zW(i4n,"ForceOptions/ForceFactory",1001),sDn(861,1,K2n,Xf),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I4n),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),sNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,O4n),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A4n),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),Zft),gNt),Clt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L4n),""),"Stress Epsilon"),"Termination criterion for the iterative process."),t4n),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N4n),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),xwn(vZn)),mNt),dot),ggn(hNt)))),sWn((new zf,n))},zW(i4n,"StressMetaDataProvider",861),sDn(1004,1,K2n,zf),uZn.hf=function(n){sWn(n)},zW(i4n,"StressOptions",1004),sDn(1005,1,{},gt),uZn.sf=function(){return new DF},uZn.tf=function(n){},zW(i4n,"StressOptions/StressFactory",1005),sDn(1110,205,M3n,DF),uZn.rf=function(n,t){var e,i,r,c;for(t.Ug(D4n,1),oM(gK(zDn(n,(Bjn(),olt))))?oM(gK(zDn(n,blt)))||J1(new Sd((vP(),new Vy(n)))):Zxn(new hk,n,t.eh(1)),i=yfn(n),c=(e=tqn(this.a,i)).Kc();c.Ob();)(r=uG(c.Pb(),235)).e.c.length<=1||(czn(this.b,r),QDn(this.b),Prn(r.d,new pt));YJn(i=lJn(e)),t.Vg()},zW(R4n,"StressLayoutProvider",1110),sDn(1111,1,QZn,pt),uZn.Cd=function(n){Yqn(uG(n,453))},zW(R4n,"StressLayoutProvider/lambda$0$Type",1111),sDn(1002,1,{},qv),uZn.c=0,uZn.e=0,uZn.g=0,zW(R4n,"StressMajorization",1002),sDn(391,22,{3:1,34:1,22:1,391:1},dC);var vlt,klt,ylt,Mlt,Tlt,jlt,Elt,Slt,Plt,Clt=_cn(R4n,"StressMajorization/Dimension",391,Oat,F2,jB);sDn(1003,1,b2n,Fd),uZn.Ne=function(n,t){return j_(this.a,uG(n,153),uG(t,153))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(R4n,"StressMajorization/lambda$0$Type",1003),sDn(1192,1,{},i4),zW(F4n,"ElkLayered",1192),sDn(1193,1,QZn,_d),uZn.Cd=function(n){OLn(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$0$Type",1193),sDn(1194,1,QZn,Bd),uZn.Cd=function(n){E_(this.a,uG(n,36))},zW(F4n,"ElkLayered/lambda$1$Type",1194),sDn(1281,1,{},z$),zW(F4n,"GraphConfigurator",1281),sDn(770,1,QZn,Hd),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$0$Type",770),sDn(771,1,{},dt),uZn.Kb=function(n){return FEn(),new fX(null,new h3(uG(n,30).a,16))},zW(F4n,"GraphConfigurator/lambda$1$Type",771),sDn(772,1,QZn,Ud),uZn.Cd=function(n){XIn(this.a,uG(n,10))},zW(F4n,"GraphConfigurator/lambda$2$Type",772),sDn(1109,205,M3n,mk),uZn.rf=function(n,t){var e;e=vXn(new kk,n),xA(zDn(n,(jYn(),rMt)))===xA((Own(),Ixt))?Tgn(this.a,e,t):BDn(this.a,e,t),t.$g()||NQn(new Vf,e)},zW(F4n,"LayeredLayoutProvider",1109),sDn(367,22,{3:1,34:1,22:1,367:1},gC);var Ilt,Olt,Alt,Llt=_cn(F4n,"LayeredPhases",367,Oat,u9,EB);sDn(1717,1,{},$an),uZn.i=0,zW(_4n,"ComponentsToCGraphTransformer",1717),sDn(1718,1,{},wt),uZn.yf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.min(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(_4n,"ComponentsToCGraphTransformer/1",1718),sDn(86,1,{86:1}),uZn.i=0,uZn.k=!0,uZn.o=T0n;var Nlt,$lt,Dlt,xlt=zW(B4n,"CNode",86);sDn(469,86,{469:1,86:1},Jx,Yvn),uZn.Ib=function(){return""},zW(_4n,"ComponentsToCGraphTransformer/CRectNode",469),sDn(1688,1,{},vt),zW(_4n,"OneDimensionalComponentsCompaction",1688),sDn(1689,1,{},kt),uZn.Kb=function(n){return w2(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$0$Type",1689),sDn(1690,1,{},yt),uZn.Kb=function(n){return xgn(uG(n,42))},uZn.Fb=function(n){return this===n},zW(_4n,"OneDimensionalComponentsCompaction/lambda$1$Type",1690),sDn(1720,1,{},wQ),zW(B4n,"CGraph",1720),sDn(194,1,{194:1},Zvn),uZn.b=0,uZn.c=0,uZn.e=0,uZn.g=!0,uZn.i=T0n,zW(B4n,"CGroup",194),sDn(1719,1,{},Mt),uZn.yf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},uZn.zf=function(n,t){return e.Math.max(null!=n.a?uM(n.a):n.c.i,null!=t.a?uM(t.a):t.c.i)},zW(B4n,m2n,1719),sDn(1721,1,{},i$n),uZn.d=!1;var Rlt=zW(B4n,T2n,1721);sDn(1722,1,{},Tt),uZn.Kb=function(n){return GS(),qx(),0!=uG(uG(n,42).a,86).d.e},uZn.Fb=function(n){return this===n},zW(B4n,j2n,1722),sDn(833,1,{},cX),uZn.a=!1,uZn.b=!1,uZn.c=!1,uZn.d=!1,zW(B4n,E2n,833),sDn(1898,1,{},nz),zW(H4n,S2n,1898);var Klt=Iq(U4n,d2n);sDn(1899,1,{382:1},FZ),uZn.bf=function(n){DFn(this,uG(n,475))},zW(H4n,P2n,1899),sDn(V1n,1,b2n,jt),uZn.Ne=function(n,t){return rY(uG(n,86),uG(t,86))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,C2n,V1n),sDn(475,1,{475:1},KC),uZn.a=!1,zW(H4n,I2n,475),sDn(1901,1,b2n,Et),uZn.Ne=function(n,t){return KEn(uG(n,475),uG(t,475))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(H4n,O2n,1901),sDn(148,1,{148:1},FC,wG),uZn.Fb=function(n){var t;return null!=n&&Ult==Tbn(n)&&(t=uG(n,148),OJ(this.c,t.c)&&OJ(this.d,t.d))},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.c,this.d]))},uZn.Ib=function(){return"("+this.c+TZn+this.d+(this.a?"cx":"")+this.b+")"},uZn.a=!0,uZn.c=0,uZn.d=0;var Flt,_lt,Blt,Hlt,Ult=zW(U4n,"Point",148);sDn(416,22,{3:1,34:1,22:1,416:1},jC);var Glt,qlt,Xlt,zlt,Vlt,Wlt,Qlt,Jlt,Ylt,Zlt,nbt,tbt,ebt=_cn(U4n,"Point/Quadrant",416,Oat,H6,SB);sDn(1708,1,{},dk),uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,uZn.f=null,zW(U4n,"RectilinearConvexHull",1708),sDn(583,1,{382:1},cyn),uZn.bf=function(n){Itn(this,uG(n,148))},uZn.b=0,zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler",583),sDn(1710,1,b2n,St),uZn.Ne=function(n,t){return cY(pK(n),pK(t))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1710),sDn(1709,1,{382:1},Jin),uZn.bf=function(n){pKn(this,uG(n,148))},uZn.a=0,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(U4n,"RectilinearConvexHull/RectangleEventHandler",1709),sDn(1711,1,b2n,Pt),uZn.Ne=function(n,t){return H3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$0$Type",1711),sDn(1712,1,b2n,At),uZn.Ne=function(n,t){return U3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$1$Type",1712),sDn(1713,1,b2n,Lt),uZn.Ne=function(n,t){return B3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$2$Type",1713),sDn(1714,1,b2n,Ot),uZn.Ne=function(n,t){return G3(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$3$Type",1714),sDn(1715,1,b2n,Nt),uZn.Ne=function(n,t){return sIn(uG(n,148),uG(t,148))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(U4n,"RectilinearConvexHull/lambda$4$Type",1715),sDn(1716,1,{},X0),zW(U4n,"Scanline",1716),sDn(2104,1,{}),zW(G4n,"AbstractGraphPlacer",2104),sDn(335,1,{335:1},DR),uZn.Ff=function(n){return!!this.Gf(n)&&(UNn(this.b,uG(oIn(n,(GYn(),xpt)),21),n),!0)},uZn.Gf=function(n){var t,e,i;for(t=uG(oIn(n,(GYn(),xpt)),21),i=uG(Y9(Jlt,t),21).Kc();i.Ob();)if(e=uG(i.Pb(),21),!uG(Y9(this.b,e),15).dc())return!1;return!0},zW(G4n,"ComponentGroup",335),sDn(779,2104,{},gk),uZn.Hf=function(n){var t;for(t=new Ww(this.a);t.ai&&(f=0,l+=u+r,u=0),tHn(a,f+(s=a.c).a,l+s.b),dL(s),c=e.Math.max(c,f+h.a),u=e.Math.max(u,h.b),f+=h.a+r;t.f.a=c,t.f.b=l+u},uZn.Jf=function(n,t){var e,i,r,c,a;if(xA(oIn(t,(jYn(),kyt)))===xA((Uvn(),tbt))){for(i=n.Kc();i.Ob();){for(a=0,c=new Ww((e=uG(i.Pb(),36)).a);c.ai&&!uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))||s&&uG(oIn(s,(GYn(),xpt)),21).Hc((KQn(),kRt))||uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),_Rt)))&&(b=l,w+=u+r,u=0),h=a.c,uG(oIn(a,(GYn(),xpt)),21).Hc((KQn(),yRt))&&(b=c+r),tHn(a,b+h.a,w+h.b),c=e.Math.max(c,b+f.a),uG(oIn(a,xpt),21).Hc(KRt)&&(l=e.Math.max(l,b+f.a+r)),dL(h),u=e.Math.max(u,f.b),b+=f.a+r,s=a;t.f.a=c,t.f.b=w+u},uZn.Jf=function(n,t){},zW(G4n,"ModelOrderRowGraphPlacer",1313),sDn(1311,1,b2n,xt),uZn.Ne=function(n,t){return Wsn(uG(n,36),uG(t,36))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(G4n,"SimpleRowGraphPlacer/1",1311),sDn(1280,1,A2n,Rt),uZn.Lb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){var t;return!!(t=uG(oIn(uG(n,249).b,(jYn(),bMt)),75))&&0!=t.b},zW(W4n,"CompoundGraphPostprocessor/1",1280),sDn(1279,1,Q4n,yk),uZn.Kf=function(n,t){zyn(this,uG(n,36),t)},zW(W4n,"CompoundGraphPreprocessor",1279),sDn(452,1,{452:1},Sdn),uZn.c=!1,zW(W4n,"CompoundGraphPreprocessor/ExternalPort",452),sDn(249,1,{249:1},$B),uZn.Ib=function(){return MR(this.c)+":"+MNn(this.b)},zW(W4n,"CrossHierarchyEdge",249),sDn(777,1,b2n,Gd),uZn.Ne=function(n,t){return Njn(this,uG(n,249),uG(t,249))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(W4n,"CrossHierarchyEdgeComparator",777),sDn(304,137,{3:1,304:1,96:1,137:1}),uZn.p=0,zW(J4n,"LGraphElement",304),sDn(18,304,{3:1,18:1,304:1,96:1,137:1},UZ),uZn.Ib=function(){return MNn(this)};var obt=zW(J4n,"LEdge",18);sDn(36,304,{3:1,20:1,36:1,304:1,96:1,137:1},Dan),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.b)},uZn.Ib=function(){return 0==this.b.c.length?"G-unlayered"+vIn(this.a):0==this.a.c.length?"G-layered"+vIn(this.b):"G[layerless"+vIn(this.a)+", layers"+vIn(this.b)+"]"};var ubt,sbt=zW(J4n,"LGraph",36);sDn(666,1,{}),uZn.Lf=function(){return this.e.n},uZn.of=function(n){return oIn(this.e,n)},uZn.Mf=function(){return this.e.o},uZn.Nf=function(){return this.e.p},uZn.pf=function(n){return vR(this.e,n)},uZn.Of=function(n){this.e.n.a=n.a,this.e.n.b=n.b},uZn.Pf=function(n){this.e.o.a=n.a,this.e.o.b=n.b},uZn.Qf=function(n){this.e.p=n},zW(J4n,"LGraphAdapters/AbstractLShapeAdapter",666),sDn(473,1,{853:1},qd),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=iR(this.a.b.c.length),t=new Ww(this.a.b);t.a0&&Hbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(r> ",n),njn(e)),JA(QA((n.a+="[",n),e.i),"]")),n.a},uZn.c=!0,uZn.d=!1;var Pbt,Cbt,Ibt,Obt,Abt=zW(J4n,"LPort",12);sDn(408,1,t1n,zd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Vd(new Ww(this.a.e))},zW(J4n,"LPort/1",408),sDn(1309,1,$Zn,Vd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).c},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/1/1",1309),sDn(369,1,t1n,Wd),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Qd(new Ww(this.a.g))},zW(J4n,"LPort/2",369),sDn(776,1,$Zn,Qd),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(N3(this.a),18).d},uZn.Ob=function(){return l$(this.a)},uZn.Qb=function(){tW(this.a)},zW(J4n,"LPort/2/1",776),sDn(1302,1,t1n,LC),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new w7(this)},zW(J4n,"LPort/CombineIter",1302),sDn(208,1,$Zn,w7),uZn.Nb=function(n){SV(this,n)},uZn.Qb=function(){xj()},uZn.Ob=function(){return Dx(this)},uZn.Pb=function(){return l$(this.a)?N3(this.a):N3(this.b)},zW(J4n,"LPort/CombineIter/1",208),sDn(1303,1,A2n,Bt),uZn.Lb=function(n){return Yz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).g.c.length},zW(J4n,"LPort/lambda$0$Type",1303),sDn(1304,1,A2n,Ht),uZn.Lb=function(n){return Zz(n)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),0!=uG(n,12).e.c.length},zW(J4n,"LPort/lambda$1$Type",1304),sDn(1305,1,A2n,Ut),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),yRt)},zW(J4n,"LPort/lambda$2$Type",1305),sDn(1306,1,A2n,Gt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),kRt)},zW(J4n,"LPort/lambda$3$Type",1306),sDn(1307,1,A2n,qt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),KRt)},zW(J4n,"LPort/lambda$4$Type",1307),sDn(1308,1,A2n,Xt),uZn.Lb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return Lun(),uG(n,12).j==(KQn(),_Rt)},zW(J4n,"LPort/lambda$5$Type",1308),sDn(30,304,{3:1,20:1,304:1,30:1,96:1,137:1},bQ),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Ww(this.a)},uZn.Ib=function(){return"L_"+Ten(this.b.b,this,0)+vIn(this.a)},zW(J4n,"Layer",30),sDn(1330,1,{},kk),zW(h6n,f6n,1330),sDn(1334,1,{},zt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1334),sDn(1337,1,{},Vt),uZn.Kb=function(n){return lCn(uG(n,84))},zW(h6n,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1337),sDn(1331,1,QZn,Jd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,z3n,1331),sDn(1332,1,QZn,Yd),uZn.Cd=function(n){y$n(this.a,uG(n,123))},zW(h6n,l6n,1332),sDn(1333,1,{},Wt),uZn.Kb=function(n){return new fX(null,new h3(KJ(uG(n,74)),16))},zW(h6n,b6n,1333),sDn(1335,1,y1n,Zd),uZn.Mb=function(n){return DN(this.a,uG(n,27))},zW(h6n,w6n,1335),sDn(1336,1,{},Qt),uZn.Kb=function(n){return new fX(null,new h3(FJ(uG(n,74)),16))},zW(h6n,"ElkGraphImporter/lambda$5$Type",1336),sDn(1338,1,y1n,ng),uZn.Mb=function(n){return xN(this.a,uG(n,27))},zW(h6n,"ElkGraphImporter/lambda$7$Type",1338),sDn(1339,1,y1n,Jt),uZn.Mb=function(n){return XY(uG(n,74))},zW(h6n,"ElkGraphImporter/lambda$8$Type",1339),sDn(1297,1,{},Vf),zW(h6n,"ElkGraphLayoutTransferrer",1297),sDn(1298,1,y1n,tg),uZn.Mb=function(n){return IF(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$0$Type",1298),sDn(1299,1,QZn,eg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$1$Type",1299),sDn(1300,1,y1n,ig),uZn.Mb=function(n){return KK(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$2$Type",1300),sDn(1301,1,QZn,rg),uZn.Cd=function(n){WS(),kD(this.a,uG(n,18))},zW(h6n,"ElkGraphLayoutTransferrer/lambda$3$Type",1301),sDn(819,1,{},xF),zW(d6n,"BiLinkedHashMultiMap",819),sDn(1550,1,Q4n,Yt),uZn.Kf=function(n,t){Bon(uG(n,36),t)},zW(d6n,"CommentNodeMarginCalculator",1550),sDn(1551,1,{},Zt),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"CommentNodeMarginCalculator/lambda$0$Type",1551),sDn(1552,1,QZn,ne),uZn.Cd=function(n){bXn(uG(n,10))},zW(d6n,"CommentNodeMarginCalculator/lambda$1$Type",1552),sDn(1553,1,Q4n,te),uZn.Kf=function(n,t){WFn(uG(n,36),t)},zW(d6n,"CommentPostprocessor",1553),sDn(1554,1,Q4n,ee),uZn.Kf=function(n,t){yQn(uG(n,36),t)},zW(d6n,"CommentPreprocessor",1554),sDn(1555,1,Q4n,ie),uZn.Kf=function(n,t){KKn(uG(n,36),t)},zW(d6n,"ConstraintsPostprocessor",1555),sDn(1556,1,Q4n,re),uZn.Kf=function(n,t){Csn(uG(n,36),t)},zW(d6n,"EdgeAndLayerConstraintEdgeReverser",1556),sDn(1557,1,Q4n,ce),uZn.Kf=function(n,t){amn(uG(n,36),t)},zW(d6n,"EndLabelPostprocessor",1557),sDn(1558,1,{},ae),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPostprocessor/lambda$0$Type",1558),sDn(1559,1,y1n,oe),uZn.Mb=function(n){return q8(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$1$Type",1559),sDn(1560,1,QZn,ue),uZn.Cd=function(n){_En(uG(n,10))},zW(d6n,"EndLabelPostprocessor/lambda$2$Type",1560),sDn(1561,1,Q4n,se),uZn.Kf=function(n,t){AAn(uG(n,36),t)},zW(d6n,"EndLabelPreprocessor",1561),sDn(1562,1,{},he),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelPreprocessor/lambda$0$Type",1562),sDn(1563,1,QZn,NB),uZn.Cd=function(n){oP(this.a,this.b,this.c,uG(n,10))},uZn.a=0,uZn.b=0,uZn.c=!1,zW(d6n,"EndLabelPreprocessor/lambda$1$Type",1563),sDn(1564,1,y1n,fe),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelPreprocessor/lambda$2$Type",1564),sDn(1565,1,QZn,cg),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$3$Type",1565),sDn(1566,1,y1n,le),uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelPreprocessor/lambda$4$Type",1566),sDn(1567,1,QZn,ag),uZn.Cd=function(n){aq(this.a,uG(n,72))},zW(d6n,"EndLabelPreprocessor/lambda$5$Type",1567),sDn(1615,1,Q4n,_f),uZn.Kf=function(n,t){Ddn(uG(n,36),t)},zW(d6n,"EndLabelSorter",1615),sDn(1616,1,b2n,be),uZn.Ne=function(n,t){return okn(uG(n,465),uG(t,465))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"EndLabelSorter/1",1616),sDn(465,1,{465:1},oZ),zW(d6n,"EndLabelSorter/LabelGroup",465),sDn(1617,1,{},we),uZn.Kb=function(n){return VS(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"EndLabelSorter/lambda$0$Type",1617),sDn(1618,1,y1n,de),uZn.Mb=function(n){return VS(),uG(n,10).k==(zIn(),dbt)},zW(d6n,"EndLabelSorter/lambda$1$Type",1618),sDn(1619,1,QZn,ge),uZn.Cd=function(n){VIn(uG(n,10))},zW(d6n,"EndLabelSorter/lambda$2$Type",1619),sDn(1620,1,y1n,pe),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),rxt))},zW(d6n,"EndLabelSorter/lambda$3$Type",1620),sDn(1621,1,y1n,me),uZn.Mb=function(n){return VS(),xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),cxt))},zW(d6n,"EndLabelSorter/lambda$4$Type",1621),sDn(1568,1,Q4n,ve),uZn.Kf=function(n,t){qXn(this,uG(n,36))},uZn.b=0,uZn.c=0,zW(d6n,"FinalSplineBendpointsCalculator",1568),sDn(1569,1,{},ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$0$Type",1569),sDn(1570,1,{},ye),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$1$Type",1570),sDn(1571,1,y1n,Me),uZn.Mb=function(n){return!v9(uG(n,18))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$2$Type",1571),sDn(1572,1,y1n,Te),uZn.Mb=function(n){return vR(uG(n,18),(GYn(),Tmt))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$3$Type",1572),sDn(1573,1,QZn,og),uZn.Cd=function(n){ZHn(this.a,uG(n,131))},zW(d6n,"FinalSplineBendpointsCalculator/lambda$4$Type",1573),sDn(1574,1,QZn,je),uZn.Cd=function(n){_An(uG(n,18).a)},zW(d6n,"FinalSplineBendpointsCalculator/lambda$5$Type",1574),sDn(803,1,Q4n,ug),uZn.Kf=function(n,t){fVn(this,uG(n,36),t)},zW(d6n,"GraphTransformer",803),sDn(517,22,{3:1,34:1,22:1,517:1},PC);var Lbt,Nbt,$bt,Dbt=_cn(d6n,"GraphTransformer/Mode",517,Oat,f1,zH);sDn(1575,1,Q4n,Ee),uZn.Kf=function(n,t){wRn(uG(n,36),t)},zW(d6n,"HierarchicalNodeResizingProcessor",1575),sDn(1576,1,Q4n,Se),uZn.Kf=function(n,t){don(uG(n,36),t)},zW(d6n,"HierarchicalPortConstraintProcessor",1576),sDn(1577,1,b2n,Pe),uZn.Ne=function(n,t){return wyn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortConstraintProcessor/NodeComparator",1577),sDn(1578,1,Q4n,Ce),uZn.Kf=function(n,t){HGn(uG(n,36),t)},zW(d6n,"HierarchicalPortDummySizeProcessor",1578),sDn(1579,1,Q4n,Ie),uZn.Kf=function(n,t){z_n(this,uG(n,36),t)},uZn.a=0,zW(d6n,"HierarchicalPortOrthogonalEdgeRouter",1579),sDn(1580,1,b2n,Oe),uZn.Ne=function(n,t){return Ox(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/1",1580),sDn(1581,1,b2n,Ae),uZn.Ne=function(n,t){return Dtn(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"HierarchicalPortOrthogonalEdgeRouter/2",1581),sDn(1582,1,Q4n,Le),uZn.Kf=function(n,t){tIn(uG(n,36),t)},zW(d6n,"HierarchicalPortPositionProcessor",1582),sDn(1583,1,Q4n,Wf),uZn.Kf=function(n,t){SJn(this,uG(n,36))},uZn.a=0,uZn.c=0,zW(d6n,"HighDegreeNodeLayeringProcessor",1583),sDn(580,1,{580:1},Ne),uZn.b=-1,uZn.d=-1,zW(d6n,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",580),sDn(1584,1,{},$e),uZn.Kb=function(n){return HB(),qgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1584),sDn(1585,1,{},De),uZn.Kb=function(n){return HB(),Xgn(uG(n,10))},uZn.Fb=function(n){return this===n},zW(d6n,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1585),sDn(1591,1,Q4n,xe),uZn.Kf=function(n,t){TGn(this,uG(n,36),t)},zW(d6n,"HyperedgeDummyMerger",1591),sDn(804,1,{},xB),uZn.a=!1,uZn.b=!1,uZn.c=!1,zW(d6n,"HyperedgeDummyMerger/MergeState",804),sDn(1592,1,{},Re),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"HyperedgeDummyMerger/lambda$0$Type",1592),sDn(1593,1,{},Ke),uZn.Kb=function(n){return new fX(null,new h3(uG(n,10).j,16))},zW(d6n,"HyperedgeDummyMerger/lambda$1$Type",1593),sDn(1594,1,QZn,Fe),uZn.Cd=function(n){uG(n,12).p=-1},zW(d6n,"HyperedgeDummyMerger/lambda$2$Type",1594),sDn(1595,1,Q4n,_e),uZn.Kf=function(n,t){kGn(uG(n,36),t)},zW(d6n,"HypernodesProcessor",1595),sDn(1596,1,Q4n,Be),uZn.Kf=function(n,t){_Gn(uG(n,36),t)},zW(d6n,"InLayerConstraintProcessor",1596),sDn(1597,1,Q4n,He),uZn.Kf=function(n,t){Nun(uG(n,36),t)},zW(d6n,"InnermostNodeMarginCalculator",1597),sDn(1598,1,Q4n,Ue),uZn.Kf=function(n,t){gQn(this,uG(n,36))},uZn.a=T0n,uZn.b=T0n,uZn.c=M0n,uZn.d=M0n;var xbt,Rbt,Kbt,Fbt,_bt,Bbt,Hbt,Ubt,Gbt,qbt,Xbt,zbt,Vbt,Wbt,Qbt,Jbt,Ybt,Zbt,nwt,twt,ewt,iwt,rwt,cwt,awt,owt,uwt,swt,hwt,fwt,lwt,bwt,wwt,dwt,gwt,pwt,mwt,vwt,kwt,ywt,Mwt,Twt,jwt,Ewt,Swt,Pwt,Cwt,Iwt,Owt,Awt,Lwt,Nwt,$wt,Dwt,xwt,Rwt,Kwt,Fwt=zW(d6n,"InteractiveExternalPortPositioner",1598);sDn(1599,1,{},Ge),uZn.Kb=function(n){return uG(n,18).d.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$0$Type",1599),sDn(1600,1,{},sg),uZn.Kb=function(n){return Lx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$1$Type",1600),sDn(1601,1,{},qe),uZn.Kb=function(n){return uG(n,18).c.i},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$2$Type",1601),sDn(1602,1,{},hg),uZn.Kb=function(n){return Nx(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$3$Type",1602),sDn(1603,1,{},fg),uZn.Kb=function(n){return XF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$4$Type",1603),sDn(1604,1,{},lg),uZn.Kb=function(n){return zF(this.a,pK(n))},uZn.Fb=function(n){return this===n},zW(d6n,"InteractiveExternalPortPositioner/lambda$5$Type",1604),sDn(81,22,{3:1,34:1,22:1,81:1,196:1},CC),uZn.dg=function(){switch(this.g){case 15:return new fc;case 22:return new lc;case 47:return new dc;case 28:case 35:return new ei;case 32:return new Yt;case 42:return new te;case 1:return new ee;case 41:return new ie;case 56:return new ug((Aun(),Obt));case 0:return new ug((Aun(),Ibt));case 2:return new re;case 54:return new ce;case 33:return new se;case 51:return new ve;case 55:return new Ee;case 13:return new Se;case 38:return new Ce;case 44:return new Ie;case 40:return new Le;case 9:return new Wf;case 49:return new Ux;case 37:return new xe;case 43:return new _e;case 27:return new Be;case 30:return new He;case 3:return new Ue;case 18:return new ze;case 29:return new Ve;case 5:return new Qf;case 50:return new Xe;case 34:return new Jf;case 36:return new ii;case 52:return new _f;case 11:return new ri;case 7:return new Yf;case 39:return new ci;case 45:return new ai;case 16:return new oi;case 10:return new RI;case 48:return new fi;case 21:return new li;case 23:return new zy((ean(),BEt));case 8:return new wi;case 12:return new gi;case 4:return new pi;case 19:return new rl;case 17:return new Pi;case 53:return new Ci;case 6:return new Bi;case 25:return new jk;case 46:return new $i;case 31:return new _F;case 14:return new Wi;case 26:return new Mc;case 20:return new nr;case 24:return new zy((ean(),HEt));default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var _wt,Bwt,Hwt,Uwt,Gwt,qwt,Xwt,zwt,Vwt=_cn(d6n,k6n,81,Oat,bKn,XB);sDn(1605,1,Q4n,ze),uZn.Kf=function(n,t){bQn(uG(n,36),t)},zW(d6n,"InvertedPortProcessor",1605),sDn(1606,1,Q4n,Ve),uZn.Kf=function(n,t){xHn(uG(n,36),t)},zW(d6n,"LabelAndNodeSizeProcessor",1606),sDn(1607,1,y1n,We),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$0$Type",1607),sDn(1608,1,y1n,Qe),uZn.Mb=function(n){return uG(n,10).k==(zIn(),lbt)},zW(d6n,"LabelAndNodeSizeProcessor/lambda$1$Type",1608),sDn(1609,1,QZn,KB),uZn.Cd=function(n){uP(this.b,this.a,this.c,uG(n,10))},uZn.a=!1,uZn.c=!1,zW(d6n,"LabelAndNodeSizeProcessor/lambda$2$Type",1609),sDn(1610,1,Q4n,Qf),uZn.Kf=function(n,t){EWn(uG(n,36),t)},zW(d6n,"LabelDummyInserter",1610),sDn(1611,1,A2n,Je),uZn.Lb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return xA(oIn(uG(n,72),(jYn(),Xyt)))===xA((Zrn(),ixt))},zW(d6n,"LabelDummyInserter/1",1611),sDn(1612,1,Q4n,Xe),uZn.Kf=function(n,t){eWn(uG(n,36),t)},zW(d6n,"LabelDummyRemover",1612),sDn(1613,1,y1n,Ye),uZn.Mb=function(n){return oM(gK(oIn(uG(n,72),(jYn(),qyt))))},zW(d6n,"LabelDummyRemover/lambda$0$Type",1613),sDn(1378,1,Q4n,Jf),uZn.Kf=function(n,t){UVn(this,uG(n,36),t)},uZn.a=null,zW(d6n,"LabelDummySwitcher",1378),sDn(292,1,{292:1},oHn),uZn.c=0,uZn.d=null,uZn.f=0,zW(d6n,"LabelDummySwitcher/LabelDummyInfo",292),sDn(1379,1,{},Ze),uZn.Kb=function(n){return Pun(),new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"LabelDummySwitcher/lambda$0$Type",1379),sDn(1380,1,y1n,ni),uZn.Mb=function(n){return Pun(),uG(n,10).k==(zIn(),bbt)},zW(d6n,"LabelDummySwitcher/lambda$1$Type",1380),sDn(1381,1,{},bg),uZn.Kb=function(n){return FK(this.a,uG(n,10))},zW(d6n,"LabelDummySwitcher/lambda$2$Type",1381),sDn(1382,1,QZn,wg),uZn.Cd=function(n){gQ(this.a,uG(n,292))},zW(d6n,"LabelDummySwitcher/lambda$3$Type",1382),sDn(1383,1,b2n,ti),uZn.Ne=function(n,t){return nV(uG(n,292),uG(t,292))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"LabelDummySwitcher/lambda$4$Type",1383),sDn(802,1,Q4n,ei),uZn.Kf=function(n,t){Dnn(uG(n,36),t)},zW(d6n,"LabelManagementProcessor",802),sDn(1614,1,Q4n,ii),uZn.Kf=function(n,t){jFn(uG(n,36),t)},zW(d6n,"LabelSideSelector",1614),sDn(1622,1,Q4n,ri),uZn.Kf=function(n,t){yqn(uG(n,36),t)},zW(d6n,"LayerConstraintPostprocessor",1622),sDn(1623,1,Q4n,Yf),uZn.Kf=function(n,t){vDn(uG(n,36),t)},zW(d6n,"LayerConstraintPreprocessor",1623),sDn(371,22,{3:1,34:1,22:1,371:1},IC);var Wwt,Qwt,Jwt,Ywt,Zwt,ndt,tdt,edt,idt,rdt,cdt,adt=_cn(d6n,"LayerConstraintPreprocessor/HiddenNodeConnections",371,Oat,G6,zB);sDn(1624,1,Q4n,ci),uZn.Kf=function(n,t){zzn(uG(n,36),t)},zW(d6n,"LayerSizeAndGraphHeightCalculator",1624),sDn(1625,1,Q4n,ai),uZn.Kf=function(n,t){dRn(uG(n,36),t)},zW(d6n,"LongEdgeJoiner",1625),sDn(1626,1,Q4n,oi),uZn.Kf=function(n,t){bzn(uG(n,36),t)},zW(d6n,"LongEdgeSplitter",1626),sDn(1627,1,Q4n,RI),uZn.Kf=function(n,t){VWn(this,uG(n,36),t)},uZn.e=0,uZn.f=0,uZn.j=0,uZn.k=0,uZn.n=0,uZn.o=0,zW(d6n,"NodePromotion",1627),sDn(1628,1,b2n,ui),uZn.Ne=function(n,t){return $ln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/1",1628),sDn(1629,1,b2n,si),uZn.Ne=function(n,t){return Dln(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NodePromotion/2",1629),sDn(1630,1,{},hi),uZn.Kb=function(n){return uG(n,42),UB(),qx(),!0},uZn.Fb=function(n){return this===n},zW(d6n,"NodePromotion/lambda$0$Type",1630),sDn(1631,1,{},mg),uZn.Kb=function(n){return P0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$1$Type",1631),sDn(1632,1,{},vg),uZn.Kb=function(n){return S0(this.a,uG(n,42))},uZn.Fb=function(n){return this===n},uZn.a=0,zW(d6n,"NodePromotion/lambda$2$Type",1632),sDn(1633,1,Q4n,fi),uZn.Kf=function(n,t){wJn(uG(n,36),t)},zW(d6n,"NorthSouthPortPostprocessor",1633),sDn(1634,1,Q4n,li),uZn.Kf=function(n,t){FQn(uG(n,36),t)},zW(d6n,"NorthSouthPortPreprocessor",1634),sDn(1635,1,b2n,bi),uZn.Ne=function(n,t){return Qsn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"NorthSouthPortPreprocessor/lambda$0$Type",1635),sDn(1636,1,Q4n,wi),uZn.Kf=function(n,t){UUn(uG(n,36),t)},zW(d6n,"PartitionMidprocessor",1636),sDn(1637,1,y1n,di),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionMidprocessor/lambda$0$Type",1637),sDn(1638,1,QZn,kg),uZn.Cd=function(n){zY(this.a,uG(n,10))},zW(d6n,"PartitionMidprocessor/lambda$1$Type",1638),sDn(1639,1,Q4n,gi),uZn.Kf=function(n,t){JRn(uG(n,36),t)},zW(d6n,"PartitionPostprocessor",1639),sDn(1640,1,Q4n,pi),uZn.Kf=function(n,t){M$n(uG(n,36),t)},zW(d6n,"PartitionPreprocessor",1640),sDn(1641,1,y1n,mi),uZn.Mb=function(n){return vR(uG(n,10),(jYn(),UMt))},zW(d6n,"PartitionPreprocessor/lambda$0$Type",1641),sDn(1642,1,{},vi),uZn.Kb=function(n){return new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(d6n,"PartitionPreprocessor/lambda$1$Type",1642),sDn(1643,1,y1n,ki),uZn.Mb=function(n){return pkn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$2$Type",1643),sDn(1644,1,QZn,yi),uZn.Cd=function(n){rfn(uG(n,18))},zW(d6n,"PartitionPreprocessor/lambda$3$Type",1644),sDn(1645,1,Q4n,rl),uZn.Kf=function(n,t){wUn(uG(n,36),t)},zW(d6n,"PortListSorter",1645),sDn(1648,1,b2n,Mi),uZn.Ne=function(n,t){return Q5(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$0$Type",1648),sDn(1650,1,b2n,Ti),uZn.Ne=function(n,t){return hGn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$1$Type",1650),sDn(1646,1,{},ji),uZn.Kb=function(n){return Cln(),uG(n,12).e},zW(d6n,"PortListSorter/lambda$2$Type",1646),sDn(1647,1,{},Ei),uZn.Kb=function(n){return Cln(),uG(n,12).g},zW(d6n,"PortListSorter/lambda$3$Type",1647),sDn(1649,1,b2n,Si),uZn.Ne=function(n,t){return bjn(uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"PortListSorter/lambda$4$Type",1649),sDn(1651,1,Q4n,Pi),uZn.Kf=function(n,t){FDn(uG(n,36),t)},zW(d6n,"PortSideProcessor",1651),sDn(1652,1,Q4n,Ci),uZn.Kf=function(n,t){SBn(uG(n,36),t)},zW(d6n,"ReversedEdgeRestorer",1652),sDn(1657,1,Q4n,jk),uZn.Kf=function(n,t){kTn(this,uG(n,36),t)},zW(d6n,"SelfLoopPortRestorer",1657),sDn(1658,1,{},Ii),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPortRestorer/lambda$0$Type",1658),sDn(1659,1,y1n,Oi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPortRestorer/lambda$1$Type",1659),sDn(1660,1,y1n,Ai),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPortRestorer/lambda$2$Type",1660),sDn(1661,1,{},Li),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopPortRestorer/lambda$3$Type",1661),sDn(1662,1,QZn,gg),uZn.Cd=function(n){gOn(this.a,uG(n,337))},zW(d6n,"SelfLoopPortRestorer/lambda$4$Type",1662),sDn(805,1,QZn,Ni),uZn.Cd=function(n){BOn(uG(n,105))},zW(d6n,"SelfLoopPortRestorer/lambda$5$Type",805),sDn(1663,1,Q4n,$i),uZn.Kf=function(n,t){oyn(uG(n,36),t)},zW(d6n,"SelfLoopPostProcessor",1663),sDn(1664,1,{},Di),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopPostProcessor/lambda$0$Type",1664),sDn(1665,1,y1n,xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopPostProcessor/lambda$1$Type",1665),sDn(1666,1,y1n,Ri),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopPostProcessor/lambda$2$Type",1666),sDn(1667,1,QZn,Ki),uZn.Cd=function(n){gSn(uG(n,10))},zW(d6n,"SelfLoopPostProcessor/lambda$3$Type",1667),sDn(1668,1,{},Fi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPostProcessor/lambda$4$Type",1668),sDn(1669,1,QZn,dg),uZn.Cd=function(n){V6(this.a,uG(n,340))},zW(d6n,"SelfLoopPostProcessor/lambda$5$Type",1669),sDn(1670,1,y1n,_i),uZn.Mb=function(n){return!!uG(n,105).i},zW(d6n,"SelfLoopPostProcessor/lambda$6$Type",1670),sDn(1671,1,QZn,pg),uZn.Cd=function(n){eM(this.a,uG(n,105))},zW(d6n,"SelfLoopPostProcessor/lambda$7$Type",1671),sDn(1653,1,Q4n,Bi),uZn.Kf=function(n,t){Fxn(uG(n,36),t)},zW(d6n,"SelfLoopPreProcessor",1653),sDn(1654,1,{},Hi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,105).f,1))},zW(d6n,"SelfLoopPreProcessor/lambda$0$Type",1654),sDn(1655,1,{},Ui),uZn.Kb=function(n){return uG(n,340).a},zW(d6n,"SelfLoopPreProcessor/lambda$1$Type",1655),sDn(1656,1,QZn,Gi),uZn.Cd=function(n){v$(uG(n,18))},zW(d6n,"SelfLoopPreProcessor/lambda$2$Type",1656),sDn(1672,1,Q4n,_F),uZn.Kf=function(n,t){xIn(this,uG(n,36),t)},zW(d6n,"SelfLoopRouter",1672),sDn(1673,1,{},qi),uZn.Kb=function(n){return new fX(null,new h3(uG(n,30).a,16))},zW(d6n,"SelfLoopRouter/lambda$0$Type",1673),sDn(1674,1,y1n,Xi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SelfLoopRouter/lambda$1$Type",1674),sDn(1675,1,y1n,zi),uZn.Mb=function(n){return vR(uG(n,10),(GYn(),vmt))},zW(d6n,"SelfLoopRouter/lambda$2$Type",1675),sDn(1676,1,{},Vi),uZn.Kb=function(n){return uG(oIn(uG(n,10),(GYn(),vmt)),337)},zW(d6n,"SelfLoopRouter/lambda$3$Type",1676),sDn(1677,1,QZn,OC),uZn.Cd=function(n){lY(this.a,this.b,uG(n,337))},zW(d6n,"SelfLoopRouter/lambda$4$Type",1677),sDn(1678,1,Q4n,Wi),uZn.Kf=function(n,t){tFn(uG(n,36),t)},zW(d6n,"SemiInteractiveCrossMinProcessor",1678),sDn(1679,1,y1n,Qi),uZn.Mb=function(n){return uG(n,10).k==(zIn(),dbt)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1679),sDn(1680,1,y1n,Ji),uZn.Mb=function(n){return MX(uG(n,10))._b((jYn(),rTt))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1680),sDn(1681,1,b2n,Yi),uZn.Ne=function(n,t){return Eon(uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1681),sDn(1682,1,{},Zi),uZn.Ve=function(n,t){return VY(uG(n,10),uG(t,10))},zW(d6n,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1682),sDn(1684,1,Q4n,nr),uZn.Kf=function(n,t){MXn(uG(n,36),t)},zW(d6n,"SortByInputModelProcessor",1684),sDn(1685,1,y1n,tr),uZn.Mb=function(n){return 0!=uG(n,12).g.c.length},zW(d6n,"SortByInputModelProcessor/lambda$0$Type",1685),sDn(1686,1,QZn,yg),uZn.Cd=function(n){ZOn(this.a,uG(n,12))},zW(d6n,"SortByInputModelProcessor/lambda$1$Type",1686),sDn(1759,817,{},Kon),uZn.df=function(n){var t,e,i,r;switch(this.c=n,this.a.g){case 2:t=new Zm,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new dr),new BC(this,t)),QAn(this,new ir),Prn(t,new rr),t.c.length=0,kS(JJ(new fX(null,new h3(this.c.a.b,16)),new cr),new Tg(t)),QAn(this,new ar),Prn(t,new or),t.c.length=0,e=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new jg(this))),new ur),kS(new fX(null,new h3(this.c.a.a,16)),new NC(e,t)),QAn(this,new hr),Prn(t,new fr),t.c.length=0;break;case 3:i=new Zm,QAn(this,new er),r=w$(Tun(ZJ(new fX(null,new h3(this.c.a.b,16)),new Mg(this))),new sr),kS(JJ(new fX(null,new h3(this.c.a.b,16)),new lr),new DC(r,i)),QAn(this,new br),Prn(i,new wr),i.c.length=0;break;default:throw hv(new Hv)}},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation",1759),sDn(1760,1,A2n,er),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1760),sDn(1761,1,{},Mg),uZn.Ye=function(n){return $Ln(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1761),sDn(1769,1,M1n,AC),uZn.de=function(){TEn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1769),sDn(1771,1,A2n,ir),uZn.Lb=function(n){return F$(uG(n,60).g,154)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1771),sDn(1772,1,QZn,rr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1772),sDn(1773,1,y1n,cr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1773),sDn(1775,1,QZn,Tg),uZn.Cd=function(n){tpn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1775),sDn(1774,1,M1n,xC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1774),sDn(1776,1,A2n,ar),uZn.Lb=function(n){return F$(uG(n,60).g,10)},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1776),sDn(1777,1,QZn,or),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1777),sDn(1778,1,{},jg),uZn.Ye=function(n){return DLn(this.a,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1778),sDn(1779,1,{},ur),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1779),sDn(1762,1,{},sr),uZn.We=function(){return 0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1762),sDn(1781,1,QZn,NC),uZn.Cd=function(n){uz(this.a,this.b,uG(n,316))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1781),sDn(1780,1,M1n,$C),uZn.de=function(){HDn(this.a,this.b,-1)},uZn.b=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1780),sDn(1782,1,A2n,hr),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1782),sDn(1783,1,QZn,fr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1783),sDn(1763,1,y1n,lr),uZn.Mb=function(n){return F$(uG(n,60).g,10)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1763),sDn(1765,1,QZn,DC),uZn.Cd=function(n){sz(this.a,this.b,uG(n,60))},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1765),sDn(1764,1,M1n,RC),uZn.de=function(){TEn(this.b,this.a,-1)},uZn.a=0,zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1764),sDn(1766,1,A2n,br),uZn.Lb=function(n){return uG(n,60),!0},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return uG(n,60),!0},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1766),sDn(1767,1,QZn,wr),uZn.Cd=function(n){uG(n,380).de()},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1767),sDn(1768,1,y1n,dr),uZn.Mb=function(n){return F$(uG(n,60).g,154)},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1768),sDn(1770,1,QZn,BC),uZn.Cd=function(n){mrn(this.a,this.b,uG(n,60))},zW(E6n,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1770),sDn(1586,1,Q4n,Ux),uZn.Kf=function(n,t){Mzn(this,uG(n,36),t)},zW(E6n,"HorizontalGraphCompactor",1586),sDn(1587,1,{},Eg),uZn.ff=function(n,t){var e,i;return $en(n,t)?0:(e=z4(n),i=z4(t),e&&e.k==(zIn(),lbt)||i&&i.k==(zIn(),lbt)?0:_x(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},uZn.gf=function(n,t){var e,i;return $en(n,t)?1:(e=z4(n),i=z4(t),Bx(uG(oIn(this.a.a,(GYn(),kmt)),312),e?e.k:(zIn(),wbt),i?i.k:(zIn(),wbt)))},zW(E6n,"HorizontalGraphCompactor/1",1587),sDn(1588,1,{},gr),uZn.ef=function(n,t){return JS(),0==n.a.i},zW(E6n,"HorizontalGraphCompactor/lambda$0$Type",1588),sDn(1589,1,{},Sg),uZn.ef=function(n,t){return ZY(this.a,n,t)},zW(E6n,"HorizontalGraphCompactor/lambda$1$Type",1589),sDn(1730,1,{},Sen),zW(E6n,"LGraphToCGraphTransformer",1730),sDn(1738,1,y1n,pr),uZn.Mb=function(n){return null!=n},zW(E6n,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1738),sDn(1731,1,{},mr),uZn.Kb=function(n){return GB(),cpn(oIn(uG(uG(n,60).g,10),(GYn(),rmt)))},zW(E6n,"LGraphToCGraphTransformer/lambda$0$Type",1731),sDn(1732,1,{},vr),uZn.Kb=function(n){return GB(),_wn(uG(uG(n,60).g,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$1$Type",1732),sDn(1741,1,y1n,kr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,10)},zW(E6n,"LGraphToCGraphTransformer/lambda$10$Type",1741),sDn(1742,1,QZn,yr),uZn.Cd=function(n){jZ(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$11$Type",1742),sDn(1743,1,y1n,Mr),uZn.Mb=function(n){return GB(),F$(uG(n,60).g,154)},zW(E6n,"LGraphToCGraphTransformer/lambda$12$Type",1743),sDn(1747,1,QZn,Tr),uZn.Cd=function(n){Fwn(uG(n,60))},zW(E6n,"LGraphToCGraphTransformer/lambda$13$Type",1747),sDn(1744,1,QZn,Pg),uZn.Cd=function(n){WL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$14$Type",1744),sDn(1745,1,QZn,Cg),uZn.Cd=function(n){JL(this.a,uG(n,116))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$15$Type",1745),sDn(1746,1,QZn,Ig),uZn.Cd=function(n){QL(this.a,uG(n,8))},uZn.a=0,zW(E6n,"LGraphToCGraphTransformer/lambda$16$Type",1746),sDn(1748,1,{},jr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$17$Type",1748),sDn(1749,1,y1n,Er),uZn.Mb=function(n){return GB(),v9(uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$18$Type",1749),sDn(1750,1,QZn,Og),uZn.Cd=function(n){fin(this.a,uG(n,18))},zW(E6n,"LGraphToCGraphTransformer/lambda$19$Type",1750),sDn(1734,1,QZn,Ag),uZn.Cd=function(n){Q3(this.a,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$2$Type",1734),sDn(1751,1,{},Sr),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$20$Type",1751),sDn(1752,1,{},Pr),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$21$Type",1752),sDn(1753,1,{},Cr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$22$Type",1753),sDn(1754,1,y1n,Ir),uZn.Mb=function(n){return Hx(uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$23$Type",1754),sDn(1755,1,QZn,Lg),uZn.Cd=function(n){pLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$24$Type",1755),sDn(1733,1,QZn,HC),uZn.Cd=function(n){P5(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$3$Type",1733),sDn(1735,1,{},Or),uZn.Kb=function(n){return GB(),new fX(null,new h3(uG(n,30).a,16))},zW(E6n,"LGraphToCGraphTransformer/lambda$4$Type",1735),sDn(1736,1,{},Ar),uZn.Kb=function(n){return GB(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(E6n,"LGraphToCGraphTransformer/lambda$5$Type",1736),sDn(1737,1,{},Lr),uZn.Kb=function(n){return GB(),uG(oIn(uG(n,18),(GYn(),Tmt)),15)},zW(E6n,"LGraphToCGraphTransformer/lambda$6$Type",1737),sDn(1739,1,QZn,Ng),uZn.Cd=function(n){xLn(this.a,uG(n,15))},zW(E6n,"LGraphToCGraphTransformer/lambda$8$Type",1739),sDn(1740,1,QZn,UC),uZn.Cd=function(n){k$(this.a,this.b,uG(n,154))},zW(E6n,"LGraphToCGraphTransformer/lambda$9$Type",1740),sDn(1729,1,{},Nr),uZn.cf=function(n){var t,e,i,r,c;for(this.a=n,this.d=new ak,this.c=Inn(Tst,EZn,125,this.a.a.a.c.length,0,1),this.b=0,e=new Ww(this.a.a.a);e.a=g&&(kD(a,xwn(f)),v=e.Math.max(v,k[f-1]-l),u+=d,p+=k[f-1]-p,l=k[f-1],d=s[f]),d=e.Math.max(d,s[f]),++f;u+=d}(w=e.Math.min(1/v,1/t.b/u))>r&&(r=w,i=a)}return i},uZn.pg=function(){return!1},zW(N6n,"MSDCutIndexHeuristic",816),sDn(1683,1,Q4n,Mc),uZn.Kf=function(n,t){Cqn(uG(n,36),t)},zW(N6n,"SingleEdgeGraphWrapper",1683),sDn(232,22,{3:1,34:1,22:1,232:1},QC);var zdt,Vdt,Wdt,Qdt=_cn($6n,"CenterEdgeLabelPlacementStrategy",232,Oat,znn,JB);sDn(431,22,{3:1,34:1,22:1,431:1},WC);var Jdt,Ydt,Zdt,ngt,tgt=_cn($6n,"ConstraintCalculationStrategy",431,Oat,w1,YB);sDn(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},JC),uZn.dg=function(){return ZLn(this)},uZn.qg=function(){return ZLn(this)};var egt,igt,rgt,cgt,agt=_cn($6n,"CrossingMinimizationStrategy",322,Oat,B2,ZB);sDn(351,22,{3:1,34:1,22:1,351:1},YC);var ogt,ugt,sgt,hgt,fgt,lgt,bgt=_cn($6n,"CuttingStrategy",351,Oat,H2,nH);sDn(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},ZC),uZn.dg=function(){return ODn(this)},uZn.qg=function(){return ODn(this)};var wgt,dgt,ggt,pgt=_cn($6n,"CycleBreakingStrategy",348,Oat,h9,tH);sDn(428,22,{3:1,34:1,22:1,428:1},nI);var mgt,vgt,kgt,ygt,Mgt=_cn($6n,"DirectionCongruency",428,Oat,b1,eH);sDn(459,22,{3:1,34:1,22:1,459:1},tI);var Tgt,jgt,Egt,Sgt,Pgt,Cgt,Igt,Ogt=_cn($6n,"EdgeConstraint",459,Oat,U2,sH);sDn(283,22,{3:1,34:1,22:1,283:1},eI);var Agt,Lgt,Ngt,$gt=_cn($6n,"EdgeLabelSideSelection",283,Oat,Gnn,hH);sDn(487,22,{3:1,34:1,22:1,487:1},iI);var Dgt,xgt,Rgt,Kgt,Fgt,_gt,Bgt,Hgt=_cn($6n,"EdgeStraighteningStrategy",487,Oat,l1,fH);sDn(281,22,{3:1,34:1,22:1,281:1},rI);var Ugt,Ggt,qgt,Xgt,zgt,Vgt,Wgt,Qgt=_cn($6n,"FixedAlignment",281,Oat,qnn,uH);sDn(282,22,{3:1,34:1,22:1,282:1},cI);var Jgt,Ygt,Zgt,npt,tpt,ept,ipt,rpt,cpt,apt,opt,upt=_cn($6n,"GraphCompactionStrategy",282,Oat,Xnn,iH);sDn(259,22,{3:1,34:1,22:1,259:1},aI);var spt,hpt,fpt,lpt,bpt=_cn($6n,"GraphProperties",259,Oat,oun,rH);sDn(298,22,{3:1,34:1,22:1,298:1},oI);var wpt,dpt,gpt,ppt,mpt=_cn($6n,"GreedySwitchType",298,Oat,G2,cH);sDn(311,22,{3:1,34:1,22:1,311:1},uI);var vpt,kpt,ypt,Mpt=_cn($6n,"InLayerConstraint",311,Oat,q2,aH);sDn(429,22,{3:1,34:1,22:1,429:1},sI);var Tpt,jpt,Ept,Spt,Ppt,Cpt,Ipt,Opt,Apt,Lpt,Npt,$pt,Dpt,xpt,Rpt,Kpt,Fpt,_pt,Bpt,Hpt,Upt,Gpt,qpt,Xpt,zpt,Vpt,Wpt,Qpt,Jpt,Ypt,Zpt,nmt,tmt,emt,imt,rmt,cmt,amt,omt,umt,smt,hmt,fmt,lmt,bmt,wmt,dmt,gmt,pmt,mmt,vmt,kmt,ymt,Mmt,Tmt,jmt,Emt,Smt,Pmt,Cmt,Imt,Omt,Amt,Lmt,Nmt=_cn($6n,"InteractiveReferencePoint",429,Oat,k1,oH);sDn(171,22,{3:1,34:1,22:1,171:1},hI);var $mt,Dmt,xmt,Rmt,Kmt,Fmt,_mt,Bmt,Hmt,Umt,Gmt,qmt,Xmt,zmt,Vmt,Wmt,Qmt,Jmt,Ymt,Zmt,nvt,tvt,evt,ivt,rvt,cvt,avt,ovt,uvt,svt,hvt,fvt,lvt,bvt,wvt,dvt,gvt,pvt,mvt,vvt,kvt,yvt,Mvt,Tvt,jvt,Evt,Svt,Pvt,Cvt,Ivt,Ovt,Avt,Lvt,Nvt,$vt,Dvt,xvt,Rvt,Kvt,Fvt,_vt,Bvt,Hvt,Uvt,Gvt,qvt,Xvt,zvt,Vvt,Wvt,Qvt,Jvt,Yvt,Zvt,nkt,tkt,ekt,ikt,rkt,ckt,akt,okt,ukt,skt,hkt,fkt,lkt,bkt,wkt,dkt,gkt,pkt,mkt,vkt,kkt,ykt,Mkt,Tkt,jkt,Ekt,Skt,Pkt,Ckt,Ikt,Okt,Akt,Lkt,Nkt,$kt,Dkt,xkt,Rkt,Kkt,Fkt,_kt,Bkt,Hkt,Ukt,Gkt,qkt,Xkt,zkt,Vkt,Wkt,Qkt,Jkt,Ykt,Zkt,nyt,tyt,eyt,iyt,ryt,cyt,ayt,oyt,uyt,syt,hyt,fyt,lyt,byt,wyt,dyt,gyt,pyt,myt,vyt,kyt,yyt,Myt,Tyt,jyt,Eyt,Syt,Pyt,Cyt,Iyt,Oyt,Ayt,Lyt,Nyt,$yt,Dyt,xyt,Ryt,Kyt,Fyt,_yt,Byt,Hyt,Uyt,Gyt,qyt,Xyt,zyt,Vyt,Wyt,Qyt,Jyt,Yyt,Zyt,nMt,tMt,eMt,iMt,rMt,cMt,aMt,oMt,uMt,sMt,hMt,fMt,lMt,bMt,wMt,dMt,gMt,pMt,mMt,vMt,kMt,yMt,MMt,TMt,jMt,EMt,SMt,PMt,CMt,IMt,OMt,AMt,LMt,NMt,$Mt,DMt,xMt,RMt,KMt,FMt,_Mt,BMt,HMt,UMt,GMt,qMt,XMt,zMt,VMt,WMt,QMt,JMt,YMt,ZMt,nTt,tTt,eTt,iTt,rTt,cTt,aTt,oTt,uTt,sTt,hTt,fTt,lTt,bTt,wTt,dTt,gTt,pTt,mTt,vTt,kTt,yTt,MTt,TTt,jTt,ETt,STt,PTt,CTt,ITt,OTt,ATt,LTt,NTt,$Tt,DTt,xTt,RTt,KTt,FTt,_Tt,BTt,HTt,UTt,GTt,qTt,XTt,zTt,VTt,WTt,QTt,JTt,YTt,ZTt,njt,tjt,ejt,ijt,rjt,cjt,ajt=_cn($6n,"LayerConstraint",171,Oat,l9,lH);sDn(859,1,K2n,fl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B6n),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),vvt),(lAn(),gNt)),Mgt),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H6n),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U6n),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),Hvt),gNt),Nmt),ggn(hNt)))),H4(n,U6n,J6n,Gvt),H4(n,U6n,o5n,Uvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G6n),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q6n),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(VT(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X6n),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),wNt),cot),ggn(fNt)),Uhn(cT($ot,1),zZn,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z6n),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),Pkt),gNt),Jjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V6n),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),xwn(7)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W6n),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q6n),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J6n),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),pvt),gNt),pgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y6n),s8n),"Node Layering Strategy"),"Strategy for node layering."),ckt),gNt),fjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z6n),s8n),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),Wvt),gNt),ajt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n5n),s8n),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t5n),s8n),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e5n),h8n),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),xwn(4)),mNt),dot),ggn(hNt)))),H4(n,e5n,Y6n,Yvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i5n),h8n),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),xwn(2)),mNt),dot),ggn(hNt)))),H4(n,i5n,Y6n,nkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r5n),f8n),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),ikt),gNt),Hjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c5n),f8n),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),xwn(0)),mNt),dot),ggn(hNt)))),H4(n,c5n,r5n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a5n),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),xwn(vZn)),mNt),dot),ggn(hNt)))),H4(n,a5n,Y6n,Xvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o5n),l8n),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),dvt),gNt),agt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u5n),l8n),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s5n),l8n),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),dNt),fot),ggn(hNt)))),H4(n,s5n,b8n,ovt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,h5n),l8n),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),wNt),cot),ggn(hNt)))),H4(n,h5n,o5n,bvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f5n),l8n),"In Layer Predecessor of"),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l5n),l8n),"In Layer Successor of"),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),kNt),$ot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b5n),l8n),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w5n),l8n),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d5n),w8n),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),xwn(40)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g5n),w8n),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),rvt),gNt),mpt),ggn(hNt)))),H4(n,g5n,o5n,cvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p5n),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),nvt),gNt),mpt),ggn(hNt)))),H4(n,p5n,o5n,tvt),H4(n,p5n,b8n,evt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m5n),d8n),"Node Placement Strategy"),"Strategy for node placement."),Ekt),gNt),xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,v5n),d8n),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),wNt),cot),ggn(hNt)))),H4(n,v5n,m5n,dkt),H4(n,v5n,m5n,gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k5n),g8n),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),skt),gNt),Hgt),ggn(hNt)))),H4(n,k5n,m5n,hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y5n),g8n),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),lkt),gNt),Qgt),ggn(hNt)))),H4(n,y5n,m5n,bkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M5n),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),dNt),fot),ggn(hNt)))),H4(n,M5n,m5n,mkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,T5n),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),gNt),jjt),ggn(sNt)))),H4(n,T5n,m5n,Tkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j5n),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),ykt),gNt),jjt),ggn(hNt)))),H4(n,j5n,m5n,Mkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,E5n),p8n),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),Pvt),gNt),oEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,S5n),p8n),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),Ivt),gNt),lEt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,P5n),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),Avt),gNt),pEt),ggn(hNt)))),H4(n,P5n,m8n,Lvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,C5n),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),dNt),fot),ggn(hNt)))),H4(n,C5n,m8n,$vt),H4(n,C5n,P5n,Dvt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,I5n),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),dNt),fot),ggn(hNt)))),H4(n,I5n,m8n,Evt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,O5n),v8n),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A5n),v8n),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L5n),v8n),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N5n),v8n),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$5n),k8n),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D5n),k8n),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x5n),k8n),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),xwn(0)),mNt),dot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R5n),y8n),j3n),"Tries to further compact components (disconnected sub-graphs)."),!1),wNt),cot),ggn(hNt)))),H4(n,R5n,h4n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K5n),M8n),"Post Compaction Strategy"),T8n),_mt),gNt),upt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F5n),M8n),"Post Compaction Constraint Calculation"),T8n),Kmt),gNt),tgt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_5n),j8n),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,B5n),j8n),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),xwn(16)),mNt),dot),ggn(hNt)))),H4(n,B5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,H5n),j8n),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),xwn(5)),mNt),dot),ggn(hNt)))),H4(n,H5n,_5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U5n),E8n),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),cyt),gNt),xEt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G5n),E8n),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),dNt),fot),ggn(hNt)))),H4(n,G5n,U5n,Kkt),H4(n,G5n,U5n,Fkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q5n),E8n),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),dNt),fot),ggn(hNt)))),H4(n,q5n,U5n,Bkt),H4(n,q5n,U5n,Hkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X5n),S8n),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),Wkt),gNt),bgt),ggn(hNt)))),H4(n,X5n,U5n,Qkt),H4(n,X5n,U5n,Jkt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,z5n),S8n),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),vNt),yat),ggn(hNt)))),H4(n,z5n,X5n,Gkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V5n),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),Xkt),mNt),dot),ggn(hNt)))),H4(n,V5n,X5n,zkt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W5n),P8n),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),hyt),gNt),MEt),ggn(hNt)))),H4(n,W5n,U5n,fyt),H4(n,W5n,U5n,lyt),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Q5n),P8n),"Valid Indices for Wrapping"),null),vNt),yat),ggn(hNt)))),H4(n,Q5n,U5n,oyt),H4(n,Q5n,U5n,uyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J5n),C8n),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),wNt),cot),ggn(hNt)))),H4(n,J5n,U5n,tyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y5n),C8n),"Distance Penalty When Improving Cuts"),null),2),dNt),fot),ggn(hNt)))),H4(n,Y5n,U5n,Zkt),H4(n,Y5n,J5n,!0),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z5n),C8n),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),wNt),cot),ggn(hNt)))),H4(n,Z5n,U5n,iyt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n8n),I8n),"Edge Label Side Selection"),"Method to decide on edge label sides."),Tvt),gNt),$gt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t8n),I8n),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),yvt),gNt),Qdt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e8n),O8n),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),Qmt),gNt),Xjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i8n),O8n),"Consider Port Order"),"If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r8n),O8n),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c8n),O8n),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),Hmt),gNt),abt),ggn(hNt)))),H4(n,c8n,h4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a8n),O8n),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),Xmt),gNt),pjt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o8n),O8n),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),dNt),fot),ggn(hNt)))),H4(n,o8n,e8n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u8n),O8n),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),dNt),fot),ggn(hNt)))),H4(n,u8n,e8n,null),eZn((new ll,n))},zW($6n,"LayeredMetaDataProvider",859),sDn(998,1,K2n,ll),uZn.hf=function(n){eZn(n)},zW($6n,"LayeredOptions",998),sDn(999,1,{},Tc),uZn.sf=function(){return new mk},uZn.tf=function(n){},zW($6n,"LayeredOptions/LayeredFactory",999),sDn(1391,1,{}),uZn.a=0,zW(p9n,"ElkSpacings/AbstractSpacingsBuilder",1391),sDn(792,1391,{},omn),zW($6n,"LayeredSpacings/LayeredSpacingsBuilder",792),sDn(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},fI),uZn.dg=function(){return J_n(this)},uZn.qg=function(){return J_n(this)};var ojt,ujt,sjt,hjt,fjt=_cn($6n,"LayeringStrategy",265,Oat,tan,bH);sDn(390,22,{3:1,34:1,22:1,390:1},lI);var ljt,bjt,wjt,djt,gjt,pjt=_cn($6n,"LongEdgeOrderingStrategy",390,Oat,X2,wH);sDn(203,22,{3:1,34:1,22:1,203:1},bI);var mjt,vjt,kjt,yjt,Mjt,Tjt,jjt=_cn($6n,"NodeFlexibility",203,Oat,q6,dH);sDn(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},wI),uZn.dg=function(){return IDn(this)},uZn.qg=function(){return IDn(this)};var Ejt,Sjt,Pjt,Cjt,Ijt,Ojt,Ajt,Ljt,Njt,$jt,Djt,xjt=_cn($6n,"NodePlacementStrategy",323,Oat,f9,gH);sDn(243,22,{3:1,34:1,22:1,243:1},dI);var Rjt,Kjt,Fjt,_jt,Bjt,Hjt=_cn($6n,"NodePromotionStrategy",243,Oat,uun,pH);sDn(284,22,{3:1,34:1,22:1,284:1},gI);var Ujt,Gjt,qjt,Xjt=_cn($6n,"OrderingStrategy",284,Oat,X6,mH);sDn(430,22,{3:1,34:1,22:1,430:1},pI);var zjt,Vjt,Wjt,Qjt,Jjt=_cn($6n,"PortSortingStrategy",430,Oat,d1,vH);sDn(462,22,{3:1,34:1,22:1,462:1},mI);var Yjt,Zjt,nEt,tEt,eEt=_cn($6n,"PortType",462,Oat,z2,kH);sDn(387,22,{3:1,34:1,22:1,387:1},vI);var iEt,rEt,cEt,aEt,oEt=_cn($6n,"SelfLoopDistributionStrategy",387,Oat,V2,yH);sDn(349,22,{3:1,34:1,22:1,349:1},kI);var uEt,sEt,hEt,fEt,lEt=_cn($6n,"SelfLoopOrderingStrategy",349,Oat,W2,MH);sDn(312,1,{312:1},CVn),zW($6n,"Spacings",312),sDn(350,22,{3:1,34:1,22:1,350:1},yI);var bEt,wEt,dEt,gEt,pEt=_cn($6n,"SplineRoutingMode",350,Oat,Q2,TH);sDn(352,22,{3:1,34:1,22:1,352:1},MI);var mEt,vEt,kEt,yEt,MEt=_cn($6n,"ValidifyStrategy",352,Oat,J2,jH);sDn(388,22,{3:1,34:1,22:1,388:1},TI);var TEt,jEt,EEt,SEt,PEt,CEt,IEt,OEt,AEt,LEt,NEt,$Et,DEt,xEt=_cn($6n,"WrappingStrategy",388,Oat,Y2,EH);sDn(1398,1,y9n,il),uZn.rg=function(n){return uG(n,36),jEt},uZn.Kf=function(n,t){mzn(this,uG(n,36),t)},zW(M9n,"DepthFirstCycleBreaker",1398),sDn(793,1,y9n,ez),uZn.rg=function(n){return uG(n,36),EEt},uZn.Kf=function(n,t){gYn(this,uG(n,36),t)},uZn.sg=function(n){return uG(zq(n,iMn(this.d,n.c.length)),10)},zW(M9n,"GreedyCycleBreaker",793),sDn(1401,793,y9n,tL),uZn.sg=function(n){var t,e,i,r;for(r=null,t=vZn,i=new Ww(n);i.a1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,uG(this,669)):(hZ(),f$(n,this.d)),xsn(this.e,n))},uZn.lg=function(n,t,e,i){var r,c,a,o,u,s,h;for(t!=vX(e,n.length)&&(c=n[t-(e?1:-1)],v7(this.f,c,e?(can(),Wjt):(can(),Vjt))),r=n[t][0],h=!i||r.k==(zIn(),lbt),s=n7(n[t]),this.vg(s,h,!1,e),a=0,u=new Ww(s);u.a"),n0?j0(this.a,n[t-1],n[t]):!e&&t1&&(oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),(jYn(),Cyt))))?Axn(n,this.d,this):(hZ(),f$(n,this.d)),oM(gK(oIn(HQ((u3(0,n.c.length),uG(n.c[0],10))),Cyt)))||xsn(this.e,n))},zW(S9n,"ModelOrderBarycenterHeuristic",669),sDn(1866,1,b2n,Zg),uZn.Ne=function(n,t){return TOn(this.a,uG(n,10),uG(t,10))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(S9n,"ModelOrderBarycenterHeuristic/lambda$0$Type",1866),sDn(1423,1,y9n,wl),uZn.rg=function(n){var t;return uG(n,36),Aq(t=aN(XEt),(uIn(),Elt),(zYn(),Cwt)),t},uZn.Kf=function(n,t){jY((uG(n,36),t))},zW(S9n,"NoCrossingMinimizer",1423),sDn(809,413,j9n,rj),uZn.tg=function(n,t,e){var i,r,c,a,o,u,s,h,f,l,b;switch(f=this.g,e.g){case 1:for(r=0,c=0,h=new Ww(n.j);h.a1&&(r.j==(KQn(),kRt)?this.b[n]=!0:r.j==_Rt&&n>0&&(this.b[n-1]=!0))},uZn.f=0,zW(P6n,"AllCrossingsCounter",1861),sDn(595,1,{},Don),uZn.b=0,uZn.d=0,zW(P6n,"BinaryIndexedTree",595),sDn(532,1,{},R_),zW(P6n,"CrossingsCounter",532),sDn(1950,1,b2n,np),uZn.Ne=function(n,t){return wX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$0$Type",1950),sDn(1951,1,b2n,tp),uZn.Ne=function(n,t){return dX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$1$Type",1951),sDn(1952,1,b2n,ep),uZn.Ne=function(n,t){return gX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$2$Type",1952),sDn(1953,1,b2n,ip),uZn.Ne=function(n,t){return pX(this.a,uG(n,12),uG(t,12))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P6n,"CrossingsCounter/lambda$3$Type",1953),sDn(1954,1,QZn,rp),uZn.Cd=function(n){cen(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$4$Type",1954),sDn(1955,1,y1n,cp),uZn.Mb=function(n){return NI(this.a,uG(n,12))},zW(P6n,"CrossingsCounter/lambda$5$Type",1955),sDn(1956,1,QZn,ap),uZn.Cd=function(n){MA(this,n)},zW(P6n,"CrossingsCounter/lambda$6$Type",1956),sDn(1957,1,QZn,EI),uZn.Cd=function(n){var t;PU(),A6(this.b,(t=this.a,uG(n,12),t))},zW(P6n,"CrossingsCounter/lambda$7$Type",1957),sDn(839,1,A2n,Nc),uZn.Lb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return PU(),vR(uG(n,12),(GYn(),lmt))},zW(P6n,"CrossingsCounter/lambda$8$Type",839),sDn(1949,1,{},op),zW(P6n,"HyperedgeCrossingsCounter",1949),sDn(477,1,{34:1,477:1},BF),uZn.Fd=function(n){return _vn(this,uG(n,477))},uZn.b=0,uZn.c=0,uZn.e=0,uZn.f=0;var QEt=zW(P6n,"HyperedgeCrossingsCounter/Hyperedge",477);sDn(374,1,{34:1,374:1},bY),uZn.Fd=function(n){return exn(this,uG(n,374))},uZn.b=0,uZn.c=0;var JEt,YEt,ZEt=zW(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner",374);sDn(531,22,{3:1,34:1,22:1,531:1},SI);var nSt,tSt,eSt,iSt,rSt,cSt=_cn(P6n,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",531,Oat,g1,PH);sDn(1425,1,y9n,dl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?tSt:null},uZn.Kf=function(n,t){HEn(this,uG(n,36),t)},zW(P9n,"InteractiveNodePlacer",1425),sDn(1426,1,y9n,gl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?eSt:null},uZn.Kf=function(n,t){XMn(this,uG(n,36),t)},zW(P9n,"LinearSegmentsNodePlacer",1426),sDn(261,1,{34:1,261:1},Tk),uZn.Fd=function(n){return CT(this,uG(n,261))},uZn.Fb=function(n){var t;return!!F$(n,261)&&(t=uG(n,261),this.b==t.b)},uZn.Hb=function(){return this.b},uZn.Ib=function(){return"ls"+vIn(this.e)},uZn.a=0,uZn.b=0,uZn.c=-1,uZn.d=-1,uZn.g=0;var aSt,oSt=zW(P9n,"LinearSegmentsNodePlacer/LinearSegment",261);sDn(1428,1,y9n,iz),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?aSt:null},uZn.Kf=function(n,t){WJn(this,uG(n,36),t)},uZn.b=0,uZn.g=0,zW(P9n,"NetworkSimplexPlacer",1428),sDn(1447,1,b2n,$c),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/0methodref$compare$Type",1447),sDn(1449,1,b2n,Dc),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(P9n,"NetworkSimplexPlacer/1methodref$compare$Type",1449),sDn(655,1,{655:1},PI);var uSt=zW(P9n,"NetworkSimplexPlacer/EdgeRep",655);sDn(412,1,{412:1},wY),uZn.b=!1;var sSt,hSt,fSt,lSt=zW(P9n,"NetworkSimplexPlacer/NodeRep",412);sDn(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},Ck),zW(P9n,"NetworkSimplexPlacer/Path",515),sDn(1429,1,{},xc),uZn.Kb=function(n){return uG(n,18).d.i.k},zW(P9n,"NetworkSimplexPlacer/Path/lambda$0$Type",1429),sDn(1430,1,y1n,Rc),uZn.Mb=function(n){return uG(n,273)==(zIn(),wbt)},zW(P9n,"NetworkSimplexPlacer/Path/lambda$1$Type",1430),sDn(1431,1,{},Kc),uZn.Kb=function(n){return uG(n,18).d.i},zW(P9n,"NetworkSimplexPlacer/Path/lambda$2$Type",1431),sDn(1432,1,y1n,up),uZn.Mb=function(n){return zK(Imn(uG(n,10)))},zW(P9n,"NetworkSimplexPlacer/Path/lambda$3$Type",1432),sDn(1433,1,y1n,Fc),uZn.Mb=function(n){return mq(uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$0$Type",1433),sDn(1434,1,QZn,CI),uZn.Cd=function(n){M$(this.a,this.b,uG(n,12))},zW(P9n,"NetworkSimplexPlacer/lambda$1$Type",1434),sDn(1443,1,QZn,sp),uZn.Cd=function(n){FLn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$10$Type",1443),sDn(1444,1,{},_c),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$11$Type",1444),sDn(1445,1,QZn,hp),uZn.Cd=function(n){D_n(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$12$Type",1445),sDn(1446,1,{},Bc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$13$Type",1446),sDn(1448,1,{},Hc),uZn.Kb=function(n){return n2(),xwn(uG(n,125).e)},zW(P9n,"NetworkSimplexPlacer/lambda$15$Type",1448),sDn(1450,1,y1n,Uc),uZn.Mb=function(n){return n2(),uG(n,412).c.k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$17$Type",1450),sDn(1451,1,y1n,Gc),uZn.Mb=function(n){return n2(),uG(n,412).c.j.c.length>1},zW(P9n,"NetworkSimplexPlacer/lambda$18$Type",1451),sDn(1452,1,QZn,dY),uZn.Cd=function(n){Dpn(this.c,this.b,this.d,this.a,uG(n,412))},uZn.c=0,uZn.d=0,zW(P9n,"NetworkSimplexPlacer/lambda$19$Type",1452),sDn(1435,1,{},qc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$2$Type",1435),sDn(1453,1,QZn,fp),uZn.Cd=function(n){j$(this.a,uG(n,12))},uZn.a=0,zW(P9n,"NetworkSimplexPlacer/lambda$20$Type",1453),sDn(1454,1,{},Xc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$21$Type",1454),sDn(1455,1,QZn,lp),uZn.Cd=function(n){uD(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$22$Type",1455),sDn(1456,1,y1n,zc),uZn.Mb=function(n){return zK(n)},zW(P9n,"NetworkSimplexPlacer/lambda$23$Type",1456),sDn(1457,1,{},Vc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$24$Type",1457),sDn(1458,1,y1n,bp),uZn.Mb=function(n){return RL(this.a,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$25$Type",1458),sDn(1459,1,QZn,II),uZn.Cd=function(n){$On(this.a,this.b,uG(n,10))},zW(P9n,"NetworkSimplexPlacer/lambda$26$Type",1459),sDn(1460,1,y1n,Wc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$27$Type",1460),sDn(1461,1,y1n,Qc),uZn.Mb=function(n){return n2(),!v9(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$28$Type",1461),sDn(1462,1,{},wp),uZn.Ve=function(n,t){return T$(this.a,uG(n,30),uG(t,30))},zW(P9n,"NetworkSimplexPlacer/lambda$29$Type",1462),sDn(1436,1,{},Jc),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Xgn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$3$Type",1436),sDn(1437,1,y1n,Yc),uZn.Mb=function(n){return n2(),h6(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$4$Type",1437),sDn(1438,1,QZn,dp),uZn.Cd=function(n){vqn(this.a,uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$5$Type",1438),sDn(1439,1,{},Zc),uZn.Kb=function(n){return n2(),new fX(null,new h3(uG(n,30).a,16))},zW(P9n,"NetworkSimplexPlacer/lambda$6$Type",1439),sDn(1440,1,y1n,na),uZn.Mb=function(n){return n2(),uG(n,10).k==(zIn(),dbt)},zW(P9n,"NetworkSimplexPlacer/lambda$7$Type",1440),sDn(1441,1,{},ta),uZn.Kb=function(n){return n2(),new fX(null,new LW(new Fz(ix(Ggn(uG(n,10)).a.Kc(),new h))))},zW(P9n,"NetworkSimplexPlacer/lambda$8$Type",1441),sDn(1442,1,y1n,ea),uZn.Mb=function(n){return n2(),pq(uG(n,18))},zW(P9n,"NetworkSimplexPlacer/lambda$9$Type",1442),sDn(1424,1,y9n,pl),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?sSt:null},uZn.Kf=function(n,t){RXn(uG(n,36),t)},zW(P9n,"SimpleNodePlacer",1424),sDn(185,1,{185:1},WHn),uZn.Ib=function(){var n;return n="",this.c==(b0(),fSt)?n+=V2n:this.c==hSt&&(n+=z2n),this.o==(w0(),wSt)?n+=c3n:this.o==dSt?n+="UP":n+="BALANCED",n},zW(O9n,"BKAlignedLayout",185),sDn(523,22,{3:1,34:1,22:1,523:1},OI);var bSt,wSt,dSt,gSt=_cn(O9n,"BKAlignedLayout/HDirection",523,Oat,p1,CH);sDn(522,22,{3:1,34:1,22:1,522:1},AI);var pSt,mSt,vSt,kSt,ySt,MSt,TSt,jSt,ESt,SSt,PSt,CSt,ISt,OSt,ASt,LSt,NSt,$St,DSt,xSt=_cn(O9n,"BKAlignedLayout/VDirection",522,Oat,m1,IH);sDn(1699,1,{},LI),zW(O9n,"BKAligner",1699),sDn(1702,1,{},xjn),zW(O9n,"BKCompactor",1702),sDn(663,1,{663:1},ia),uZn.a=0,zW(O9n,"BKCompactor/ClassEdge",663),sDn(466,1,{466:1},Ek),uZn.a=null,uZn.b=0,zW(O9n,"BKCompactor/ClassNode",466),sDn(1427,1,y9n,FI),uZn.rg=function(n){return uG(oIn(uG(n,36),(GYn(),Hpt)),21).Hc((r_n(),tpt))?mSt:null},uZn.Kf=function(n,t){$Yn(this,uG(n,36),t)},uZn.d=!1,zW(O9n,"BKNodePlacer",1427),sDn(1700,1,{},ra),uZn.d=0,zW(O9n,"NeighborhoodInformation",1700),sDn(1701,1,b2n,gp),uZn.Ne=function(n,t){return vrn(this,uG(n,42),uG(t,42))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(O9n,"NeighborhoodInformation/NeighborComparator",1701),sDn(823,1,{}),zW(O9n,"ThresholdStrategy",823),sDn(1825,823,{},Sk),uZn.wg=function(n,t,e){return this.a.o==(w0(),dSt)?M0n:T0n},uZn.xg=function(){},zW(O9n,"ThresholdStrategy/NullThresholdStrategy",1825),sDn(587,1,{587:1},_I),uZn.c=!1,uZn.d=!1,zW(O9n,"ThresholdStrategy/Postprocessable",587),sDn(1826,823,{},Pk),uZn.wg=function(n,t,e){var i,r,c;return r=t==e,i=this.a.a[e.p]==t,r||i?(c=n,this.a.c,b0(),r&&(c=FXn(this,t,!0)),!isNaN(c)&&!isFinite(c)&&i&&(c=FXn(this,e,!1)),c):n},uZn.xg=function(){for(var n,t,e;0!=this.d.b;)(t=wGn(this,e=uG(H1(this.d),587))).a&&(n=t.a,(oM(this.a.f[this.a.g[e.b.p].p])||v9(n)||n.c.i.c!=n.d.i.c)&&(ixn(this,e)||VL(this.e,e)));for(;0!=this.e.a.c.length;)ixn(this,uG(obn(this.e),587))},zW(O9n,"ThresholdStrategy/SimpleThresholdStrategy",1826),sDn(645,1,{645:1,188:1,196:1},ca),uZn.dg=function(){return Fsn(this)},uZn.qg=function(){return Fsn(this)},zW(A9n,"EdgeRouterFactory",645),sDn(1485,1,y9n,ml),uZn.rg=function(n){return RFn(uG(n,36))},uZn.Kf=function(n,t){QXn(uG(n,36),t)},zW(A9n,"OrthogonalEdgeRouter",1485),sDn(1478,1,y9n,KI),uZn.rg=function(n){return oSn(uG(n,36))},uZn.Kf=function(n,t){XQn(this,uG(n,36),t)},zW(A9n,"PolylineEdgeRouter",1478),sDn(1479,1,A2n,oa),uZn.Lb=function(n){return shn(uG(n,10))},uZn.Fb=function(n){return this===n},uZn.Mb=function(n){return shn(uG(n,10))},zW(A9n,"PolylineEdgeRouter/1",1479),sDn(1872,1,y1n,ua),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$0$Type",1872),sDn(1873,1,{},sa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$1$Type",1873),sDn(1874,1,y1n,ha),uZn.Mb=function(n){return uG(n,132).c==(_7(),$St)},zW(L9n,"HyperEdgeCycleDetector/lambda$2$Type",1874),sDn(1875,1,{},fa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$3$Type",1875),sDn(1876,1,{},la),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$4$Type",1876),sDn(1877,1,{},aa),uZn.Ze=function(n){return uG(n,132).d},zW(L9n,"HyperEdgeCycleDetector/lambda$5$Type",1877),sDn(118,1,{34:1,118:1},nhn),uZn.Fd=function(n){return IT(this,uG(n,118))},uZn.Fb=function(n){var t;return!!F$(n,118)&&(t=uG(n,118),this.g==t.g)},uZn.Hb=function(){return this.g},uZn.Ib=function(){var n,t,e,i;for(n=new lx("{"),i=new Ww(this.n);i.a"+this.b+" ("+yR(this.c)+")"},uZn.d=0,zW(L9n,"HyperEdgeSegmentDependency",132),sDn(528,22,{3:1,34:1,22:1,528:1},qI);var RSt,KSt,FSt,_St,BSt,HSt,USt,GSt,qSt=_cn(L9n,"HyperEdgeSegmentDependency/DependencyType",528,Oat,v1,OH);sDn(1878,1,{},pp),zW(L9n,"HyperEdgeSegmentSplitter",1878),sDn(1879,1,{},hj),uZn.a=0,uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/AreaRating",1879),sDn(339,1,{339:1},OU),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"HyperEdgeSegmentSplitter/FreeArea",339),sDn(1880,1,b2n,ba),uZn.Ne=function(n,t){return C_(uG(n,118),uG(t,118))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(L9n,"HyperEdgeSegmentSplitter/lambda$0$Type",1880),sDn(1881,1,QZn,pY),uZn.Cd=function(n){I5(this.a,this.d,this.c,this.b,uG(n,118))},uZn.b=0,zW(L9n,"HyperEdgeSegmentSplitter/lambda$1$Type",1881),sDn(1882,1,{},wa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$2$Type",1882),sDn(1883,1,{},da),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$3$Type",1883),sDn(1884,1,{},ga),uZn.Ye=function(n){return uM(pK(n))},zW(L9n,"HyperEdgeSegmentSplitter/lambda$4$Type",1884),sDn(664,1,{},NW),uZn.a=0,uZn.b=0,uZn.c=0,zW(L9n,"OrthogonalRoutingGenerator",664),sDn(1703,1,{},pa),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).e,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$0$Type",1703),sDn(1704,1,{},ma),uZn.Kb=function(n){return new fX(null,new h3(uG(n,118).j,16))},zW(L9n,"OrthogonalRoutingGenerator/lambda$1$Type",1704),sDn(670,1,{}),zW(N9n,"BaseRoutingDirectionStrategy",670),sDn(1870,670,{},Rk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.at4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),WUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),WUn(this,o,c,r,!1),c=b,r=new MO(w,a=t+b.o*i),aq(o.a,r),WUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),WUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),KRt},uZn.Bg=function(){return KQn(),yRt},zW(N9n,"NorthToSouthRoutingStrategy",1870),sDn(1871,670,{},Kk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t-n.o*i,h=new Ww(n.n);h.at4n&&(c=n,r=new MO(l,a=f),aq(o.a,r),WUn(this,o,c,r,!1),(b=n.r)&&(r=new MO(w=uM(pK(hyn(b.e,0))),a),aq(o.a,r),WUn(this,o,c,r,!1),c=b,r=new MO(w,a=t-b.o*i),aq(o.a,r),WUn(this,o,c,r,!1)),r=new MO(g,a),aq(o.a,r),WUn(this,o,c,r,!1)))},uZn.zg=function(n){return n.i.n.a+n.n.a+n.a.a},uZn.Ag=function(){return KQn(),yRt},uZn.Bg=function(){return KQn(),KRt},zW(N9n,"SouthToNorthRoutingStrategy",1871),sDn(1869,670,{},Fk),uZn.yg=function(n,t,i){var r,c,a,o,u,s,h,f,l,b,w,d,g;if(!n.r||n.q)for(f=t+n.o*i,h=new Ww(n.n);h.at4n&&(c=n,r=new MO(a=f,l),aq(o.a,r),WUn(this,o,c,r,!0),(b=n.r)&&(r=new MO(a,w=uM(pK(hyn(b.e,0)))),aq(o.a,r),WUn(this,o,c,r,!0),c=b,r=new MO(a=t+b.o*i,w),aq(o.a,r),WUn(this,o,c,r,!0)),r=new MO(a,g),aq(o.a,r),WUn(this,o,c,r,!0)))},uZn.zg=function(n){return n.i.n.b+n.n.b+n.a.b},uZn.Ag=function(){return KQn(),kRt},uZn.Bg=function(){return KQn(),_Rt},zW(N9n,"WestToEastRoutingStrategy",1869),sDn(828,1,{},jqn),uZn.Ib=function(){return vIn(this.a)},uZn.b=0,uZn.c=!1,uZn.d=!1,uZn.f=0,zW(D9n,"NubSpline",828),sDn(418,1,{418:1},pFn,R1),zW(D9n,"NubSpline/PolarCP",418),sDn(1480,1,y9n,zTn),uZn.rg=function(n){return HPn(uG(n,36))},uZn.Kf=function(n,t){EJn(this,uG(n,36),t)},zW(D9n,"SplineEdgeRouter",1480),sDn(274,1,{274:1},O7),uZn.Ib=function(){return this.a+" ->("+this.c+") "+this.b},uZn.c=0,zW(D9n,"SplineEdgeRouter/Dependency",274),sDn(464,22,{3:1,34:1,22:1,464:1},XI);var XSt,zSt,VSt,WSt,QSt,JSt=_cn(D9n,"SplineEdgeRouter/SideToProcess",464,Oat,E1,AH);sDn(1481,1,y1n,va),uZn.Mb=function(n){return uFn(),!uG(n,131).o},zW(D9n,"SplineEdgeRouter/lambda$0$Type",1481),sDn(1482,1,{},ka),uZn.Ze=function(n){return uFn(),uG(n,131).v+1},zW(D9n,"SplineEdgeRouter/lambda$1$Type",1482),sDn(1483,1,QZn,BI),uZn.Cd=function(n){yq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$2$Type",1483),sDn(1484,1,QZn,HI),uZn.Cd=function(n){Mq(this.a,this.b,uG(n,42))},zW(D9n,"SplineEdgeRouter/lambda$3$Type",1484),sDn(131,1,{34:1,131:1},UAn,Izn),uZn.Fd=function(n){return NT(this,uG(n,131))},uZn.b=0,uZn.e=!1,uZn.f=0,uZn.g=0,uZn.j=!1,uZn.k=!1,uZn.n=0,uZn.o=!1,uZn.p=!1,uZn.q=!1,uZn.s=0,uZn.u=0,uZn.v=0,uZn.F=0,zW(D9n,"SplineSegment",131),sDn(467,1,{467:1},ya),uZn.a=0,uZn.b=!1,uZn.c=!1,uZn.d=!1,uZn.e=!1,uZn.f=0,zW(D9n,"SplineSegment/EdgeInformation",467),sDn(1198,1,{},Ma),zW(_9n,q3n,1198),sDn(1199,1,b2n,Ta),uZn.Ne=function(n,t){return yNn(uG(n,121),uG(t,121))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(_9n,X3n,1199),sDn(1197,1,{},Gj),zW(_9n,"MrTree",1197),sDn(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},zI),uZn.dg=function(){return TNn(this)},uZn.qg=function(){return TNn(this)};var YSt,ZSt=_cn(_9n,"TreeLayoutPhases",405,Oat,i5,LH);sDn(1112,205,M3n,FF),uZn.rf=function(n,t){var e,i,r,c,a,o,u;for(oM(gK(zDn(n,(QGn(),gCt))))||J1(new Sd((vP(),new Vy(n)))),(c=t.eh(B9n)).Ug("build tGraph",1),zsn(o=new L7,n),kfn(o,(OQn(),RPt),n),EUn(n,o,u=new Ym),iGn(n,o,u),a=o,c.Vg(),(c=t.eh(B9n)).Ug("Split graph",1),r=LUn(this.a,a),c.Vg(),i=new Ww(r);i.a"+V3(this.c):"e_"+Hon(this)},zW(U9n,"TEdge",65),sDn(121,137,{3:1,121:1,96:1,137:1},L7),uZn.Ib=function(){var n,t,e,i,r;for(r=null,i=Fkn(this.b,0);i.b!=i.d.c;)r+=(null==(e=uG(I6(i),39)).c||0==e.c.length?"n_"+e.g:"n_"+e.c)+"\n";for(t=Fkn(this.a,0);t.b!=t.d.c;)r+=((n=uG(I6(t),65)).b&&n.c?V3(n.b)+"->"+V3(n.c):"e_"+Hon(n))+"\n";return r};var nPt=zW(U9n,"TGraph",121);sDn(643,508,{3:1,508:1,643:1,96:1,137:1}),zW(U9n,"TShape",643),sDn(39,643,{3:1,508:1,39:1,643:1,96:1,137:1},wln),uZn.Ib=function(){return V3(this)};var tPt,ePt,iPt,rPt,cPt,aPt,oPt,uPt,sPt,hPt,fPt,lPt=zW(U9n,"TNode",39);sDn(236,1,t1n,Mp),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return new Tp(Fkn(this.a.d,0))},zW(U9n,"TNode/2",236),sDn(329,1,$Zn,Tp),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(I6(this.a),65).c},uZn.Ob=function(){return Jj(this.a)},uZn.Qb=function(){yrn(this.a)},zW(U9n,"TNode/2/1",329),sDn(1923,1,Q4n,Oa),uZn.Kf=function(n,t){SYn(this,uG(n,121),t)},zW(q9n,"CompactionProcessor",1923),sDn(1924,1,b2n,jp),uZn.Ne=function(n,t){return ksn(this.a,uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$0$Type",1924),sDn(1925,1,y1n,GI),uZn.Mb=function(n){return xZ(this.b,this.a,uG(n,42))},uZn.a=0,uZn.b=0,zW(q9n,"CompactionProcessor/lambda$1$Type",1925),sDn(1934,1,b2n,Aa),uZn.Ne=function(n,t){return vW(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$10$Type",1934),sDn(1935,1,b2n,La),uZn.Ne=function(n,t){return Kx(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$11$Type",1935),sDn(1936,1,b2n,Na),uZn.Ne=function(n,t){return kW(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$12$Type",1936),sDn(1926,1,y1n,Ep),uZn.Mb=function(n){return hD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$2$Type",1926),sDn(1927,1,y1n,Sp),uZn.Mb=function(n){return fD(this.a,uG(n,42))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$3$Type",1927),sDn(1928,1,y1n,$a),uZn.Mb=function(n){return-1==uG(n,39).c.indexOf(H9n)},zW(q9n,"CompactionProcessor/lambda$4$Type",1928),sDn(1929,1,{},Pp),uZn.Kb=function(n){return a6(this.a,uG(n,39))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$5$Type",1929),sDn(1930,1,{},Cp),uZn.Kb=function(n){return ren(this.a,uG(n,39))},uZn.a=0,zW(q9n,"CompactionProcessor/lambda$6$Type",1930),sDn(1931,1,b2n,Ip),uZn.Ne=function(n,t){return G9(this.a,uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$7$Type",1931),sDn(1932,1,b2n,Op),uZn.Ne=function(n,t){return q9(this.a,uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$8$Type",1932),sDn(1933,1,b2n,Da),uZn.Ne=function(n,t){return Fx(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(q9n,"CompactionProcessor/lambda$9$Type",1933),sDn(1921,1,Q4n,xa),uZn.Kf=function(n,t){cBn(uG(n,121),t)},zW(q9n,"DirectionProcessor",1921),sDn(1913,1,Q4n,KF),uZn.Kf=function(n,t){YUn(this,uG(n,121),t)},zW(q9n,"FanProcessor",1913),sDn(1937,1,Q4n,Ra),uZn.Kf=function(n,t){N_n(uG(n,121),t)},zW(q9n,"GraphBoundsProcessor",1937),sDn(1938,1,{},Ka),uZn.Ye=function(n){return uG(n,39).e.a},zW(q9n,"GraphBoundsProcessor/lambda$0$Type",1938),sDn(1939,1,{},Fa),uZn.Ye=function(n){return uG(n,39).e.b},zW(q9n,"GraphBoundsProcessor/lambda$1$Type",1939),sDn(1940,1,{},_a),uZn.Ye=function(n){return lP(uG(n,39))},zW(q9n,"GraphBoundsProcessor/lambda$2$Type",1940),sDn(1941,1,{},Ba),uZn.Ye=function(n){return fP(uG(n,39))},zW(q9n,"GraphBoundsProcessor/lambda$3$Type",1941),sDn(262,22,{3:1,34:1,22:1,262:1,196:1},VI),uZn.dg=function(){switch(this.g){case 0:return new sy;case 1:return new KF;case 2:return new uy;case 3:return new Xa;case 4:return new Ua;case 8:return new Ha;case 5:return new xa;case 6:return new Va;case 7:return new Oa;case 9:return new Ra;case 10:return new Wa;default:throw hv(new vM(v6n+(null!=this.f?this.f:""+this.g)))}};var bPt,wPt,dPt,gPt,pPt=_cn(q9n,k6n,262,Oat,usn,NH);sDn(1920,1,Q4n,Ha),uZn.Kf=function(n,t){xQn(uG(n,121),t)},zW(q9n,"LevelCoordinatesProcessor",1920),sDn(1918,1,Q4n,Ua),uZn.Kf=function(n,t){ZRn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"LevelHeightProcessor",1918),sDn(1919,1,t1n,Ga),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"LevelHeightProcessor/1",1919),sDn(1914,1,Q4n,uy),uZn.Kf=function(n,t){g_n(this,uG(n,121),t)},zW(q9n,"LevelProcessor",1914),sDn(1915,1,y1n,qa),uZn.Mb=function(n){return oM(gK(oIn(uG(n,39),(OQn(),UPt))))},zW(q9n,"LevelProcessor/lambda$0$Type",1915),sDn(1916,1,Q4n,Xa),uZn.Kf=function(n,t){DAn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NeighborsProcessor",1916),sDn(1917,1,t1n,za),uZn.Jc=function(n){z8(this,n)},uZn.Kc=function(){return hZ(),wS(),Qot},zW(q9n,"NeighborsProcessor/1",1917),sDn(1922,1,Q4n,Va),uZn.Kf=function(n,t){JUn(this,uG(n,121),t)},uZn.a=0,zW(q9n,"NodePositionProcessor",1922),sDn(1912,1,Q4n,sy),uZn.Kf=function(n,t){Ezn(this,uG(n,121),t)},zW(q9n,"RootProcessor",1912),sDn(1942,1,Q4n,Wa),uZn.Kf=function(n,t){Wyn(uG(n,121),t)},zW(q9n,"Untreeifyer",1942),sDn(392,22,{3:1,34:1,22:1,392:1},WI);var mPt,vPt,kPt,yPt,MPt,TPt,jPt,EPt,SPt,PPt,CPt,IPt,OPt,APt,LPt,NPt,$Pt,DPt,xPt,RPt,KPt,FPt,_Pt,BPt,HPt,UPt,GPt,qPt,XPt,zPt,VPt,WPt,QPt,JPt,YPt,ZPt,nCt,tCt,eCt,iCt,rCt,cCt,aCt,oCt,uCt,sCt,hCt,fCt,lCt,bCt,wCt,dCt,gCt,pCt,mCt,vCt,kCt,yCt,MCt,TCt,jCt,ECt,SCt,PCt,CCt,ICt,OCt,ACt,LCt,NCt,$Ct,DCt,xCt,RCt=_cn(W9n,"EdgeRoutingMode",392,Oat,t3,$H);sDn(862,1,K2n,vl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J9n),""),r7n),"Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level"),(qx(),!1)),(lAn(),wNt)),cot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y9n),""),"Edge End Texture Length"),"Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing."),7),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z9n),""),"Tree Level"),"The index for the tree level the node is in"),xwn(0)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,n7n),""),r7n),"When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint"),xwn(-1)),mNt),dot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,t7n),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),tCt),gNt),BCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,e7n),""),"Edge Routing Mode"),"Chooses an Edge Routing algorithm."),WPt),gNt),RCt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,i7n),""),"Search Order"),"Which search order to use when computing a spanning tree."),YPt),gNt),QCt),ggn(hNt)))),yJn((new Ml,n))},zW(W9n,"MrTreeMetaDataProvider",862),sDn(1006,1,K2n,Ml),uZn.hf=function(n){yJn(n)},zW(W9n,"MrTreeOptions",1006),sDn(1007,1,{},Qa),uZn.sf=function(){return new FF},uZn.tf=function(n){},zW(W9n,"MrTreeOptions/MrtreeFactory",1007),sDn(353,22,{3:1,34:1,22:1,353:1},QI);var KCt,FCt,_Ct,BCt=_cn(W9n,"OrderWeighting",353,Oat,r5,DH);sDn(433,22,{3:1,34:1,22:1,433:1},JI);var HCt,UCt,GCt,qCt,XCt,zCt,VCt,WCt,QCt=_cn(W9n,"TreeifyingOrder",433,Oat,T1,xH);sDn(1486,1,y9n,Tl),uZn.rg=function(n){return uG(n,121),UCt},uZn.Kf=function(n,t){$un(this,uG(n,121),t)},zW("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1486),sDn(1487,1,y9n,jl),uZn.rg=function(n){return uG(n,121),GCt},uZn.Kf=function(n,t){E_n(this,uG(n,121),t)},zW(u7n,"NodeOrderer",1487),sDn(1494,1,{},lo),uZn.td=function(n){return Nq(n)},zW(u7n,"NodeOrderer/0methodref$lambda$6$Type",1494),sDn(1488,1,y1n,bo),uZn.Mb=function(n){return ncn(),oM(gK(oIn(uG(n,39),(OQn(),UPt))))},zW(u7n,"NodeOrderer/lambda$0$Type",1488),sDn(1489,1,y1n,wo),uZn.Mb=function(n){return ncn(),uG(oIn(uG(n,39),(QGn(),kCt)),17).a<0},zW(u7n,"NodeOrderer/lambda$1$Type",1489),sDn(1490,1,y1n,Lp),uZn.Mb=function(n){return _an(this.a,uG(n,39))},zW(u7n,"NodeOrderer/lambda$2$Type",1490),sDn(1491,1,y1n,Ap),uZn.Mb=function(n){return f6(this.a,uG(n,39))},zW(u7n,"NodeOrderer/lambda$3$Type",1491),sDn(1492,1,b2n,go),uZn.Ne=function(n,t){return frn(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(u7n,"NodeOrderer/lambda$4$Type",1492),sDn(1493,1,y1n,po),uZn.Mb=function(n){return ncn(),0!=uG(oIn(uG(n,39),(OQn(),EPt)),17).a},zW(u7n,"NodeOrderer/lambda$5$Type",1493),sDn(1495,1,y9n,yl),uZn.rg=function(n){return uG(n,121),qCt},uZn.Kf=function(n,t){aUn(this,uG(n,121),t)},uZn.b=0,zW("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1495),sDn(1496,1,y9n,kl),uZn.rg=function(n){return uG(n,121),XCt},uZn.Kf=function(n,t){gHn(uG(n,121),t)},zW(s7n,"EdgeRouter",1496),sDn(1498,1,b2n,fo),uZn.Ne=function(n,t){return d$(uG(n,17).a,uG(t,17).a)},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/0methodref$compare$Type",1498),sDn(1503,1,{},Ya),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/1methodref$doubleValue$Type",1503),sDn(1505,1,b2n,Za),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/2methodref$compare$Type",1505),sDn(1507,1,b2n,no),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/3methodref$compare$Type",1507),sDn(1509,1,{},Ja),uZn.Ye=function(n){return uM(pK(n))},zW(s7n,"EdgeRouter/4methodref$doubleValue$Type",1509),sDn(1511,1,b2n,to),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/5methodref$compare$Type",1511),sDn(1513,1,b2n,eo),uZn.Ne=function(n,t){return ugn(uM(pK(n)),uM(pK(t)))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/6methodref$compare$Type",1513),sDn(1497,1,{},io),uZn.Kb=function(n){return tcn(),uG(oIn(uG(n,39),(QGn(),ACt)),17)},zW(s7n,"EdgeRouter/lambda$0$Type",1497),sDn(1508,1,{},ro),uZn.Kb=function(n){return CR(uG(n,39))},zW(s7n,"EdgeRouter/lambda$11$Type",1508),sDn(1510,1,{},dO),uZn.Kb=function(n){return vq(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$13$Type",1510),sDn(1512,1,{},gO),uZn.Kb=function(n){return IR(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$15$Type",1512),sDn(1514,1,b2n,co),uZn.Ne=function(n,t){return Gkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$17$Type",1514),sDn(1515,1,b2n,ao),uZn.Ne=function(n,t){return qkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$18$Type",1515),sDn(1516,1,b2n,oo),uZn.Ne=function(n,t){return zkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$19$Type",1516),sDn(1499,1,y1n,Np),uZn.Mb=function(n){return n0(this.a,uG(n,39))},uZn.a=0,zW(s7n,"EdgeRouter/lambda$2$Type",1499),sDn(1517,1,b2n,uo),uZn.Ne=function(n,t){return Xkn(uG(n,65),uG(t,65))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$20$Type",1517),sDn(1500,1,b2n,so),uZn.Ne=function(n,t){return TG(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$3$Type",1500),sDn(1501,1,b2n,ho),uZn.Ne=function(n,t){return jG(uG(n,39),uG(t,39))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"EdgeRouter/lambda$4$Type",1501),sDn(1502,1,{},mo),uZn.Kb=function(n){return OR(uG(n,39))},zW(s7n,"EdgeRouter/lambda$5$Type",1502),sDn(1504,1,{},pO),uZn.Kb=function(n){return kq(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$7$Type",1504),sDn(1506,1,{},mO),uZn.Kb=function(n){return AR(this.b,this.a,uG(n,39))},uZn.a=0,uZn.b=0,zW(s7n,"EdgeRouter/lambda$9$Type",1506),sDn(675,1,{675:1},wTn),uZn.e=0,uZn.f=!1,uZn.g=!1,zW(s7n,"MultiLevelEdgeNodeNodeGap",675),sDn(1943,1,b2n,vo),uZn.Ne=function(n,t){return l2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$0$Type",1943),sDn(1944,1,b2n,ko),uZn.Ne=function(n,t){return b2(uG(n,240),uG(t,240))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(s7n,"MultiLevelEdgeNodeNodeGap/lambda$1$Type",1944),sDn(500,22,{3:1,34:1,22:1,500:1,188:1,196:1},YI),uZn.dg=function(){return Fpn(this)},uZn.qg=function(){return Fpn(this)};var JCt,YCt,ZCt,nIt,tIt,eIt,iIt=_cn(h7n,"RadialLayoutPhases",500,Oat,S1,RH);sDn(1113,205,M3n,Uj),uZn.rf=function(n,t){var e,i,r,c;if(e=_Kn(this,n),t.Ug("Radial layout",e.c.length),oM(gK(zDn(n,(jOn(),RIt))))||J1(new Sd((vP(),new Vy(n)))),c=XPn(n),Myn(n,(SK(),zCt),c),!c)throw hv(new vM("The given graph is not a tree!"));for(0==(i=uM(pK(zDn(n,HIt))))&&(i=tNn(n)),Myn(n,HIt,i),r=new Ww(_Kn(this,n));r.a=3)for(w=uG(zrn(l,0),27),d=uG(zrn(l,1),27),i=0;i+2=w.f+d.f+o||d.f>=b.f+w.f+o){g=!0;break}++i}else g=!0;if(!g){for(s=l.i,r=new DD(l);r.e!=r.i.gc();)Myn(uG(Zkn(r),27),(XYn(),vDt),xwn(s)),--s;return XGn(n,new fy),void t.Vg()}for(_J(this.a),JV(this.a,(Jmn(),oOt),uG(zDn(n,mAt),188)),JV(this.a,uOt,uG(zDn(n,sAt),188)),JV(this.a,sOt,uG(zDn(n,dAt),188)),ZL(this.a,(Aq(m=new wJ,oOt,(Zyn(),wOt)),Aq(m,uOt,bOt),oM(gK(zDn(n,YOt)))&&Aq(m,oOt,lOt),m)),a=1/(e=Qzn(this.a,n)).c.length,f=new Ww(e);f.a0&&Qbn((s3(t-1,n.length),n.charCodeAt(t-1)),c6n);)--t;if(e>=t)throw hv(new vM("The given string does not contain any numbers."));if(2!=(i=WGn((Knn(e,t,n.length),n.substr(e,t-e)),",|;|\r|\n")).length)throw hv(new vM("Exactly two numbers are expected, "+i.length+" were found."));try{this.a=YIn(KAn(i[0])),this.b=YIn(KAn(i[1]))}catch(r){throw F$(r=Ehn(r),130)?hv(new vM(a6n+r)):hv(r)}},uZn.Ib=function(){return"("+this.a+","+this.b+")"},uZn.a=0,uZn.b=0;var PNt=zW(o6n,"KVector",8);sDn(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},Uk,tj,UR),uZn.Pc=function(){return ibn(this)},uZn.cg=function(n){var t,e,i,r,c;e=WGn(n,",|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n"),BY(this);try{for(t=0,r=0,i=0,c=0;t0&&(r%2==0?i=YIn(e[t]):c=YIn(e[t]),r>0&&r%2!=0&&aq(this,new MO(i,c)),++r),++t}catch(a){throw F$(a=Ehn(a),130)?hv(new vM("The given string does not match the expected format for vectors."+a)):hv(a)}},uZn.Ib=function(){var n,t,e;for(n=new lx("("),t=Fkn(this,0);t.b!=t.d.c;)JA(n,(e=uG(I6(t),8)).a+","+e.b),t.b!=t.d.c&&(n.a+="; ");return(n.a+=")",n).a};var CNt,INt,ONt,ANt,LNt,NNt,$Nt=zW(o6n,"KVectorChain",75);sDn(255,22,{3:1,34:1,22:1,255:1},TO);var DNt,xNt,RNt,KNt,FNt,_Nt,BNt,HNt,UNt,GNt,qNt,XNt,zNt,VNt,WNt,QNt,JNt,YNt,ZNt,n$t=_cn(Unt,"Alignment",255,Oat,Ynn,oU);sDn(991,1,K2n,$l),uZn.hf=function(n){ZUn(n)},zW(Unt,"BoxLayouterOptions",991),sDn(992,1,{},Ru),uZn.sf=function(){return new _u},uZn.tf=function(n){},zW(Unt,"BoxLayouterOptions/BoxFactory",992),sDn(297,22,{3:1,34:1,22:1,297:1},SO);var t$t,e$t,i$t,r$t,c$t,a$t,o$t,u$t,s$t,h$t,f$t,l$t,b$t,w$t,d$t,g$t,p$t,m$t,v$t,k$t,y$t,M$t,T$t,j$t,E$t,S$t,P$t,C$t,I$t,O$t,A$t,L$t,N$t,$$t,D$t,x$t,R$t,K$t,F$t,_$t,B$t,H$t,U$t,G$t,q$t,X$t,z$t,V$t,W$t,Q$t,J$t,Y$t,Z$t,nDt,tDt,eDt,iDt,rDt,cDt,aDt,oDt,uDt,sDt,hDt,fDt,lDt,bDt,wDt,dDt,gDt,pDt,mDt,vDt,kDt,yDt,MDt,TDt,jDt,EDt,SDt,PDt,CDt,IDt,ODt,ADt,LDt,NDt,$Dt,DDt,xDt,RDt,KDt,FDt,_Dt,BDt,HDt,UDt,GDt,qDt,XDt,zDt,VDt,WDt,QDt,JDt,YDt,ZDt,nxt,txt=_cn(Unt,"ContentAlignment",297,Oat,Znn,uU);sDn(699,1,K2n,Dl),uZn.hf=function(n){Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Vnt),""),"Layout Algorithm"),"Select a specific layout algorithm."),(lAn(),kNt)),$ot),ggn((Rkn(),hNt))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Wnt),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),vNt),aNt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,X8n),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),r$t),gNt),n$t),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,R3n),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Qnt),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,r9n),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),b$t),pNt),txt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,q8n),""),"Debug Mode"),"Whether additional debug information shall be generated."),(qx(),!1)),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,W8n),""),l3n),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),g$t),gNt),axt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m8n),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),y$t),gNt),kxt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Xnt),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b8n),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),S$t),gNt),Kxt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K3n),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),Q$t),vNt),Sbt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f4n),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g9n),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w4n),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,l4n),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),hDt),gNt),mRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,b9n),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),vNt),PNt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,a4n),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),mNt),dot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,s4n),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h4n),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,c9n),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),N$t),vNt),$Nt),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u9n),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,s9n),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Jnt),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),vNt),cUt),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,w9n),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),D$t),vNt),hbt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,U8n),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),wNt),cot),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Ynt),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),dNt),fot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,Znt),""),"Child Area Width"),"The width of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ntt),""),"Child Area Height"),"The height of the area occupied by the laid out children of a node."),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,k4n),""),Lnt),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),!1),wNt),cot),ggn(hNt)))),H4(n,k4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ttt),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ett),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),xwn(100)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,itt),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,rtt),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),xwn(4e3)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ctt),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),xwn(400)),mNt),dot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,att),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ott),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,utt),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,stt),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,znt),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),u$t),gNt),SKt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,A8n),v8n),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,L8n),v8n),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D3n),v8n),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,N8n),v8n),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,u4n),v8n),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,$8n),v8n),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,D8n),v8n),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,K8n),v8n),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x8n),v8n),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,R8n),v8n),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,o4n),v8n),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,F8n),v8n),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),dNt),fot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,_8n),v8n),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,B8n),v8n),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),vNt),AKt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[oNt,fNt,uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d9n),v8n),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),KDt),vNt),hbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,l9n),dtt),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),mNt),dot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,l9n,f9n,nDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,f9n),dtt),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),Y$t),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Q8n),gtt),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),R$t),vNt),Sbt),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,m4n),gtt),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),F$t),pNt),eRt),WX(sNt,Uhn(cT(MNt,1),p1n,170,0,[uNt]))))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Z8n),ptt),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),eDt),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,n9n),ptt),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,t9n),ptt),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,e9n),ptt),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,i9n),ptt),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),gNt),hRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,p4n),mtt),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),B$t),pNt),sKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,g4n),mtt),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),X$t),pNt),wKt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x4n),mtt),"Node Size Minimum"),"The minimal size to which a node can be reduced."),G$t),vNt),PNt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,d4n),mtt),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),wNt),cot),ggn(hNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,a9n),I8n),"Edge Label Placement"),"Gives a hint on where to put edge labels."),v$t),gNt),lxt),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,b4n),I8n),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),wNt),cot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,htt),"font"),"Font Name"),"Font name used for a label."),kNt),$ot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,ftt),"font"),"Font Size"),"Font size used for a label."),mNt),dot),ggn(uNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,h9n),vtt),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),vNt),PNt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,o9n),vtt),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),mNt),dot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,G8n),vtt),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),pDt),gNt),YRt),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(GT(WT(XT(zT(new xu,H8n),vtt),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),dNt),fot),ggn(fNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,v4n),ktt),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),wDt),pNt),BRt),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,J8n),ktt),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,Y8n),ktt),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,y4n),ytt),"Topdown Scale Factor"),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),dNt),fot),ggn(hNt)))),H4(n,y4n,j4n,zDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,ltt),ytt),"Topdown Size Approximator"),"The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size."),null),gNt),jKt),ggn(sNt)))),H4(n,ltt,j4n,WDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,M4n),ytt),"Topdown Hierarchical Node Width"),"The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),150),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,M4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,T4n),ytt),"Topdown Hierarchical Node Aspect Ratio"),"The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),1.414),dNt),fot),WX(hNt,Uhn(cT(MNt,1),p1n,170,0,[sNt]))))),H4(n,T4n,j4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,j4n),ytt),"Topdown Node Type"),"The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes."),null),gNt),mKt),ggn(sNt)))),H4(n,j4n,d4n,null),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,btt),ytt),"Topdown Scale Cap"),"Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes."),1),dNt),fot),ggn(hNt)))),H4(n,btt,j4n,qDt),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,z8n),Mtt),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),wNt),cot),ggn(sNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,V8n),Mtt),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),wNt),cot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,x3n),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),dNt),fot),ggn(oNt)))),Zgn(n,new tAn(JT(QT(YT(qT(GT(WT(XT(zT(new xu,wtt),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),T$t),gNt),Lxt),ggn(oNt)))),sP(n,new I2(BT(UT(HT(new du,S0n),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.orthogonal"),"Orthogonal"),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.'))),sP(n,new I2(BT(UT(HT(new du,c4n),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),sP(n,new I2(BT(UT(HT(new du,a7n),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),sP(n,new I2(BT(UT(HT(new du,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),sP(n,new I2(BT(UT(HT(new du,x7n),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),kHn((new xl,n)),ZUn((new $l,n)),A_n((new Rl,n))},zW(Unt,"CoreOptions",699),sDn(88,22,{3:1,34:1,22:1,88:1},PO);var ext,ixt,rxt,cxt,axt=_cn(Unt,l3n,88,Oat,H8,sU);sDn(278,22,{3:1,34:1,22:1,278:1},CO);var oxt,uxt,sxt,hxt,fxt,lxt=_cn(Unt,"EdgeLabelPlacement",278,Oat,v3,hU);sDn(223,22,{3:1,34:1,22:1,223:1},IO);var bxt,wxt,dxt,gxt,pxt,mxt,vxt,kxt=_cn(Unt,"EdgeRouting",223,Oat,u5,fU);sDn(321,22,{3:1,34:1,22:1,321:1},OO);var yxt,Mxt,Txt,jxt,Ext,Sxt,Pxt,Cxt,Ixt,Oxt,Axt,Lxt=_cn(Unt,"EdgeType",321,Oat,Jnn,lU);sDn(989,1,K2n,xl),uZn.hf=function(n){kHn(n)},zW(Unt,"FixedLayouterOptions",989),sDn(990,1,{},Ku),uZn.sf=function(){return new Wu},uZn.tf=function(n){},zW(Unt,"FixedLayouterOptions/FixedFactory",990),sDn(346,22,{3:1,34:1,22:1,346:1},AO);var Nxt,$xt,Dxt,xxt,Rxt,Kxt=_cn(Unt,"HierarchyHandling",346,Oat,y3,bU);sDn(290,22,{3:1,34:1,22:1,290:1},LO);var Fxt,_xt,Bxt,Hxt,Uxt,Gxt,qxt,Xxt,zxt,Vxt,Wxt=_cn(Unt,"LabelSide",290,Oat,o5,wU);sDn(95,22,{3:1,34:1,22:1,95:1},NO);var Qxt,Jxt,Yxt,Zxt,nRt,tRt,eRt=_cn(Unt,"NodeLabelPlacement",95,Oat,bcn,dU);sDn(256,22,{3:1,34:1,22:1,256:1},$O);var iRt,rRt,cRt,aRt,oRt,uRt,sRt,hRt=_cn(Unt,"PortAlignment",256,Oat,p9,gU);sDn(101,22,{3:1,34:1,22:1,101:1},DO);var fRt,lRt,bRt,wRt,dRt,gRt,pRt,mRt=_cn(Unt,"PortConstraints",101,Oat,Qnn,pU);sDn(279,22,{3:1,34:1,22:1,279:1},xO);var vRt,kRt,yRt,MRt,TRt,jRt,ERt,SRt,PRt,CRt,IRt,ORt,ARt,LRt,NRt,$Rt,DRt,xRt,RRt,KRt,FRt,_Rt,BRt=_cn(Unt,"PortLabelPlacement",279,Oat,Wnn,mU);sDn(64,22,{3:1,34:1,22:1,64:1},RO);var HRt,URt,GRt,qRt,XRt,zRt,VRt,WRt,QRt,JRt,YRt=_cn(Unt,"PortSide",64,Oat,U8,vU);sDn(993,1,K2n,Rl),uZn.hf=function(n){A_n(n)},zW(Unt,"RandomLayouterOptions",993),sDn(994,1,{},Fu),uZn.sf=function(){return new Xu},uZn.tf=function(n){},zW(Unt,"RandomLayouterOptions/RandomFactory",994),sDn(386,22,{3:1,34:1,22:1,386:1},KO);var ZRt,nKt,tKt,eKt,iKt,rKt,cKt,aKt,oKt,uKt,sKt=_cn(Unt,"SizeConstraint",386,Oat,a5,kU);sDn(264,22,{3:1,34:1,22:1,264:1},FO);var hKt,fKt,lKt,bKt,wKt=_cn(Unt,"SizeOptions",264,Oat,Man,yU);sDn(280,22,{3:1,34:1,22:1,280:1},_O);var dKt,gKt,pKt,mKt=_cn(Unt,"TopdownNodeTypes",280,Oat,k3,MU);sDn(347,22,Ett);var vKt,kKt,yKt,MKt,TKt,jKt=_cn(Unt,"TopdownSizeApproximator",347,Oat,I1,jU);sDn(987,347,Ett,Pq),uZn.Tg=function(n){return sMn(n)},_cn(Unt,"TopdownSizeApproximator/1",987,jKt,null,null),sDn(988,347,Ett,gV),uZn.Tg=function(n){var t,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p,m,v,k;for(t=uG(zDn(n,(XYn(),yDt)),143),gj(),aKn(p=new Bk,n),m=new Ym,a=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));a.e!=a.i.gc();)r=uG(Zkn(a),27),GRn(b=new Bk,p),aKn(b,r),k=sMn(r),vN(b,e.Math.max(r.g,k.a),e.Math.max(r.f,k.b)),VAn(m.f,r,b);for(c=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));c.e!=c.i.gc();)for(s=new DD((!(r=uG(Zkn(c),27)).e&&(r.e=new f_(aFt,r,7,4)),r.e));s.e!=s.i.gc();)u=uG(Zkn(s),74),d=uG(DA(FX(m.f,r)),27),g=uG(cQ(m,zrn((!u.c&&(u.c=new f_(cFt,u,5,8)),u.c),0)),27),ttn((!(w=new es).b&&(w.b=new f_(cFt,w,4,7)),w.b),d),ttn((!w.c&&(w.c=new f_(cFt,w,5,8)),w.c),g),ARn(w,R0(d)),aKn(w,u);h=uG(A1(t.f),205);try{h.rf(p,new Zu),WQ(t.f,h)}catch(y){throw F$(y=Ehn(y),103),hv(y)}return vnn(p,h$t)||vnn(p,s$t)||VJn(p),o=uM(pK(zDn(p,h$t)))/uM(pK(zDn(p,s$t))),i=uM(pK(zDn(p,BDt)))*e.Math.sqrt((!p.a&&(p.a=new fV(bFt,p,10,11)),p.a).i),l=(v=uG(zDn(p,W$t),107)).b+v.c+1,f=v.d+v.a+1,new MO(e.Math.max(l,i),e.Math.max(f,i/o))},_cn(Unt,"TopdownSizeApproximator/2",988,jKt,null,null),sDn(344,1,{871:1},fy),uZn.Ug=function(n,t){return dCn(this,n,t)},uZn.Vg=function(){POn(this)},uZn.Wg=function(){return this.q},uZn.Xg=function(){return this.f?SZ(this.f):null},uZn.Yg=function(){return SZ(this.a)},uZn.Zg=function(){return this.p},uZn.$g=function(){return!1},uZn._g=function(){return this.n},uZn.ah=function(){return null!=this.p&&!this.b},uZn.bh=function(n){var t;this.n&&(t=n,kD(this.f,t))},uZn.dh=function(n,t){var e,i;this.n&&n&&n4(this,(i=uUn(e=new DW,n),_Wn(e),i),(Eln(),CKt))},uZn.eh=function(n){var t;return this.b?null:(t=irn(this,this.g),aq(this.a,t),t.i=this,this.d=n,t)},uZn.fh=function(n){n>0&&!this.b&&Ban(this,n)},uZn.b=!1,uZn.c=0,uZn.d=-1,uZn.e=null,uZn.f=null,uZn.g=-1,uZn.j=!1,uZn.k=!1,uZn.n=!1,uZn.o=0,uZn.q=0,uZn.r=0,zW(p9n,"BasicProgressMonitor",344),sDn(717,205,M3n,_u),uZn.rf=function(n,t){XGn(n,t)},zW(p9n,"BoxLayoutProvider",717),sDn(983,1,b2n,qp),uZn.Ne=function(n,t){return tKn(this,uG(n,27),uG(t,27))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},uZn.a=!1,zW(p9n,"BoxLayoutProvider/1",983),sDn(163,1,{163:1},Jrn,nK),uZn.Ib=function(){return this.c?zBn(this.c):vIn(this.b)},zW(p9n,"BoxLayoutProvider/Group",163),sDn(320,22,{3:1,34:1,22:1,320:1},HO);var EKt,SKt=_cn(p9n,"BoxLayoutProvider/PackingMode",320,Oat,s5,EU);sDn(984,1,b2n,Bu),uZn.Ne=function(n,t){return rZ(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$0$Type",984),sDn(985,1,b2n,Hu),uZn.Ne=function(n,t){return GY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$1$Type",985),sDn(986,1,b2n,Uu),uZn.Ne=function(n,t){return qY(uG(n,163),uG(t,163))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p9n,"BoxLayoutProvider/lambda$2$Type",986),sDn(1384,1,{845:1},Gu),uZn.Mg=function(n,t){return ZS(),!F$(t,167)||Zj((Whn(),uG(n,167)),t)},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1384),sDn(1385,1,QZn,Xp),uZn.Cd=function(n){hbn(this.a,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1385),sDn(1386,1,QZn,zu),uZn.Cd=function(n){uG(n,96),ZS()},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1386),sDn(1390,1,QZn,zp),uZn.Cd=function(n){_on(this.a,uG(n,96))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1390),sDn(1388,1,y1n,UO),uZn.Mb=function(n){return oln(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1388),sDn(1387,1,y1n,GO),uZn.Mb=function(n){return PR(this.a,this.b,uG(n,845))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1387),sDn(1389,1,QZn,qO),uZn.Cd=function(n){iV(this.a,this.b,uG(n,149))},zW(p9n,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1389),sDn(947,1,{},Vu),uZn.Kb=function(n){return oN(n)},uZn.Fb=function(n){return this===n},zW(p9n,"ElkUtil/lambda$0$Type",947),sDn(948,1,QZn,XO),uZn.Cd=function(n){JNn(this.a,this.b,uG(n,74))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$1$Type",948),sDn(949,1,QZn,zO),uZn.Cd=function(n){tM(this.a,this.b,uG(n,166))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$2$Type",949),sDn(950,1,QZn,VO),uZn.Cd=function(n){UN(this.a,this.b,uG(n,135))},uZn.a=0,uZn.b=0,zW(p9n,"ElkUtil/lambda$3$Type",950),sDn(951,1,QZn,Vp),uZn.Cd=function(n){Lq(this.a,uG(n,377))},zW(p9n,"ElkUtil/lambda$4$Type",951),sDn(325,1,{34:1,325:1},Jm),uZn.Fd=function(n){return wD(this,uG(n,242))},uZn.Fb=function(n){var t;return!!F$(n,325)&&(t=uG(n,325),this.a==t.a)},uZn.Hb=function(){return t0(this.a)},uZn.Ib=function(){return this.a+" (exclusive)"},uZn.a=0,zW(p9n,"ExclusiveBounds/ExclusiveLowerBound",325),sDn(1119,205,M3n,Wu),uZn.rf=function(n,t){var i,r,c,a,o,u,s,f,l,b,w,d,g,p,m,v,k,y,M,T,j;for(t.Ug("Fixed Layout",1),a=uG(zDn(n,(XYn(),k$t)),223),b=0,w=0,m=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));m.e!=m.i.gc();){for(g=uG(Zkn(m),27),(j=uG(zDn(g,(Iln(),Cxt)),8))&&(kN(g,j.a,j.b),uG(zDn(g,Txt),181).Hc((Qmn(),VRt))&&(d=uG(zDn(g,Ext),8)).a>0&&d.b>0&&ZQn(g,d.a,d.b,!0,!0)),b=e.Math.max(b,g.i+g.g),w=e.Math.max(w,g.j+g.f),f=new DD((!g.n&&(g.n=new fV(lFt,g,1,7)),g.n));f.e!=f.i.gc();)u=uG(Zkn(f),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,g.i+u.i+u.g),w=e.Math.max(w,g.j+u.j+u.f);for(y=new DD((!g.c&&(g.c=new fV(wFt,g,9,9)),g.c));y.e!=y.i.gc();)for(k=uG(Zkn(y),123),(j=uG(zDn(k,Cxt),8))&&kN(k,j.a,j.b),M=g.i+k.i,T=g.j+k.j,b=e.Math.max(b,M+k.g),w=e.Math.max(w,T+k.f),s=new DD((!k.n&&(k.n=new fV(lFt,k,1,7)),k.n));s.e!=s.i.gc();)u=uG(Zkn(s),135),(j=uG(zDn(u,Cxt),8))&&kN(u,j.a,j.b),b=e.Math.max(b,M+u.i+u.g),w=e.Math.max(w,T+u.j+u.f);for(c=new Fz(ix(eRn(g).a.Kc(),new h));hDn(c);)l=iJn(i=uG(N9(c),74)),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b);for(r=new Fz(ix(tRn(g).a.Kc(),new h));hDn(r);)R0(bIn(i=uG(N9(r),74)))!=n&&(l=iJn(i),b=e.Math.max(b,l.a),w=e.Math.max(w,l.b))}if(a==(_gn(),uxt))for(p=new DD((!n.a&&(n.a=new fV(bFt,n,10,11)),n.a));p.e!=p.i.gc();)for(r=new Fz(ix(eRn(g=uG(Zkn(p),27)).a.Kc(),new h));hDn(r);)0==(o=bGn(i=uG(N9(r),74))).b?Myn(i,L$t,null):Myn(i,L$t,o);oM(gK(zDn(n,(Iln(),jxt))))||ZQn(n,b+(v=uG(zDn(n,Sxt),107)).b+v.c,w+v.d+v.a,!0,!0),t.Vg()},zW(p9n,"FixedLayoutProvider",1119),sDn(385,137,{3:1,423:1,385:1,96:1,137:1},Qu,qen),uZn.cg=function(n){var t,e,i,r,c,a,o;if(n)try{for(a=WGn(n,";,;"),r=0,c=(i=a).length;r>16&D1n|n^(e&D1n)<<16},uZn.Kc=function(){return new Wp(this)},uZn.Ib=function(){return null==this.a&&null==this.b?"pair(null,null)":null==this.a?"pair(null,"+cpn(this.b)+")":null==this.b?"pair("+cpn(this.a)+",null)":"pair("+cpn(this.a)+","+cpn(this.b)+")"},zW(p9n,"Pair",42),sDn(995,1,$Zn,Wp),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return!this.c&&(!this.b&&null!=this.a.a||null!=this.a.b)},uZn.Pb=function(){if(!this.c&&!this.b&&null!=this.a.a)return this.b=!0,this.a.a;if(!this.c&&null!=this.a.b)return this.c=!0,this.a.b;throw hv(new Bv)},uZn.Qb=function(){throw this.c&&null!=this.a.b?this.a.b=null:this.b&&null!=this.a.a&&(this.a.a=null),hv(new xv)},uZn.b=!1,uZn.c=!1,zW(p9n,"Pair/1",995),sDn(454,1,{454:1},vY),uZn.Fb=function(n){return OJ(this.a,uG(n,454).a)&&OJ(this.c,uG(n,454).c)&&OJ(this.d,uG(n,454).d)&&OJ(this.b,uG(n,454).b)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.c,this.d,this.b]))},uZn.Ib=function(){return"("+this.a+TZn+this.c+TZn+this.d+TZn+this.b+")"},zW(p9n,"Quadruple",454),sDn(1108,205,M3n,Xu),uZn.rf=function(n,t){var e;t.Ug("Random Layout",1),0!=(!n.a&&(n.a=new fV(bFt,n,10,11)),n.a).i?(vQn(n,(e=uG(zDn(n,(Wmn(),XRt)),17))&&0!=e.a?new v8(e.a):new Upn,sM(pK(zDn(n,URt))),sM(pK(zDn(n,zRt))),uG(zDn(n,GRt),107)),t.Vg()):t.Vg()},zW(p9n,"RandomLayoutProvider",1108),sDn(240,1,{240:1},LU),uZn.Fb=function(n){return OJ(this.a,uG(n,240).a)&&OJ(this.b,uG(n,240).b)&&OJ(this.c,uG(n,240).c)},uZn.Hb=function(){return Obn(Uhn(cT(dat,1),EZn,1,5,[this.a,this.b,this.c]))},uZn.Ib=function(){return"("+this.a+TZn+this.b+TZn+this.c+")"},zW(p9n,"Triple",240),sDn(562,1,{}),uZn.Lf=function(){return new MO(this.f.i,this.f.j)},uZn.of=function(n){return QZ(n,(XYn(),uDt))?zDn(this.f,$Kt):zDn(this.f,n)},uZn.Mf=function(){return new MO(this.f.g,this.f.f)},uZn.Nf=function(){return this.g},uZn.pf=function(n){return vnn(this.f,n)},uZn.Of=function(n){ycn(this.f,n.a),Mcn(this.f,n.b)},uZn.Pf=function(n){kcn(this.f,n.a),vcn(this.f,n.b)},uZn.Qf=function(n){this.g=n},uZn.g=0,zW(Ctt,"ElkGraphAdapters/AbstractElkGraphElementAdapter",562),sDn(563,1,{853:1},Qp),uZn.Rf=function(){var n,t;if(!this.b)for(this.b=o6(xJ(this.a).i),t=new DD(xJ(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),135),kD(this.b,new Wy(n));return this.b},uZn.b=null,zW(Ctt,"ElkGraphAdapters/ElkEdgeAdapter",563),sDn(308,562,{},Vy),uZn.Sf=function(){return FTn(this)},uZn.a=null,zW(Ctt,"ElkGraphAdapters/ElkGraphAdapter",308),sDn(640,562,{187:1},Wy),zW(Ctt,"ElkGraphAdapters/ElkLabelAdapter",640),sDn(639,562,{695:1},Wx),uZn.Rf=function(){return RTn(this)},uZn.Vf=function(){var n;return!(n=uG(zDn(this.f,(XYn(),$$t)),140))&&(n=new Nk),n},uZn.Xf=function(){return KTn(this)},uZn.Zf=function(n){var t;t=new zU(n),Myn(this.f,(XYn(),$$t),t)},uZn.$f=function(n){Myn(this.f,(XYn(),W$t),new VU(n))},uZn.Tf=function(){return this.d},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=new Zm,t=new Fz(ix(tRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=new Zm,t=new Fz(ix(eRn(uG(this.f,27)).a.Kc(),new h));hDn(t);)n=uG(N9(t),74),kD(this.c,new Qp(n));return this.c},uZn.Yf=function(){return 0!=wZ(uG(this.f,27)).i||oM(gK(uG(this.f,27).of((XYn(),C$t))))},uZn._f=function(){Xen(this,(vP(),NKt))},uZn.a=null,uZn.b=null,uZn.c=null,uZn.d=null,uZn.e=null,zW(Ctt,"ElkGraphAdapters/ElkNodeAdapter",639),sDn(1284,562,{852:1},Jp),uZn.Rf=function(){return rjn(this)},uZn.Uf=function(){var n,t;if(!this.a)for(this.a=iR(uG(this.f,123).hh().i),t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.a,new Qp(n));return this.a},uZn.Wf=function(){var n,t;if(!this.c)for(this.c=iR(uG(this.f,123).ih().i),t=new DD(uG(this.f,123).ih());t.e!=t.i.gc();)n=uG(Zkn(t),74),kD(this.c,new Qp(n));return this.c},uZn.ag=function(){return uG(uG(this.f,123).of((XYn(),gDt)),64)},uZn.bg=function(){var n,t,e,i,r,c,a;for(i=h0(uG(this.f,123)),e=new DD(uG(this.f,123).ih());e.e!=e.i.gc();)for(a=new DD((!(n=uG(Zkn(e),74)).c&&(n.c=new f_(cFt,n,5,8)),n.c));a.e!=a.i.gc();){if(Ern(lCn(c=uG(Zkn(a),84)),i))return!0;if(lCn(c)==i&&oM(gK(zDn(n,(XYn(),I$t)))))return!0}for(t=new DD(uG(this.f,123).hh());t.e!=t.i.gc();)for(r=new DD((!(n=uG(Zkn(t),74)).b&&(n.b=new f_(cFt,n,4,7)),n.b));r.e!=r.i.gc();)if(Ern(lCn(uG(Zkn(r),84)),i))return!0;return!1},uZn.a=null,uZn.b=null,uZn.c=null,zW(Ctt,"ElkGraphAdapters/ElkPortAdapter",1284),sDn(1285,1,b2n,qu),uZn.Ne=function(n,t){return XBn(uG(n,123),uG(t,123))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(Ctt,"ElkGraphAdapters/PortComparator",1285);var xKt,RKt,KKt,FKt,_Kt,BKt,HKt,UKt,GKt,qKt,XKt,zKt,VKt,WKt,QKt,JKt,YKt,ZKt,nFt=Iq(Itt,"EObject"),tFt=Iq(Ott,Att),eFt=Iq(Ott,Ltt),iFt=Iq(Ott,Ntt),rFt=Iq(Ott,"ElkShape"),cFt=Iq(Ott,$tt),aFt=Iq(Ott,Dtt),oFt=Iq(Ott,xtt),uFt=Iq(Itt,Rtt),sFt=Iq(Itt,"EFactory"),hFt=Iq(Itt,Ktt),fFt=Iq(Itt,"EPackage"),lFt=Iq(Ott,Ftt),bFt=Iq(Ott,_tt),wFt=Iq(Ott,Btt);sDn(93,1,Htt),uZn.th=function(){return this.uh(),null},uZn.uh=function(){return null},uZn.vh=function(){return this.uh(),!1},uZn.wh=function(){return!1},uZn.xh=function(n){Msn(this,n)},zW(Utt,"BasicNotifierImpl",93),sDn(99,93,Jtt),uZn.Yh=function(){return uN(this)},uZn.yh=function(n,t){return n},uZn.zh=function(){throw hv(new Kv)},uZn.Ah=function(n){var t;return t=lMn(uG(ern(this.Dh(),this.Fh()),19)),this.Ph().Th(this,t.n,t.f,n)},uZn.Bh=function(n,t){throw hv(new Kv)},uZn.Ch=function(n,t,e){return DUn(this,n,t,e)},uZn.Dh=function(){var n;return this.zh()&&(n=this.zh().Nk())?n:this.ii()},uZn.Eh=function(){return J$n(this)},uZn.Fh=function(){throw hv(new Kv)},uZn.Gh=function(){var n,t;return!(t=this.$h().Ok())&&this.zh().Tk((jP(),t=null==(n=$1(eqn(this.Dh())))?tBt:new zx(this,n))),t},uZn.Hh=function(n,t){return n},uZn.Ih=function(n){return n.pk()?n.Lj():emn(this.Dh(),n)},uZn.Jh=function(){var n;return(n=this.zh())?n.Qk():null},uZn.Kh=function(){return this.zh()?this.zh().Nk():null},uZn.Lh=function(n,t,e){return Dyn(this,n,t,e)},uZn.Mh=function(n){return vtn(this,n)},uZn.Nh=function(n,t){return U9(this,n,t)},uZn.Oh=function(){var n;return!!(n=this.zh())&&n.Rk()},uZn.Ph=function(){throw hv(new Kv)},uZn.Qh=function(){return Kvn(this)},uZn.Rh=function(n,t,e,i){return kyn(this,n,t,i)},uZn.Sh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().zk(this,this.hi(),t-this.ji(),n,e)},uZn.Th=function(n,t,e,i){return O1(this,n,t,i)},uZn.Uh=function(n,t,e){return uG(ern(this.Dh(),t),69).wk().Ak(this,this.hi(),t-this.ji(),n,e)},uZn.Vh=function(){return!!this.zh()&&!!this.zh().Pk()},uZn.Wh=function(n){return Wkn(this,n)},uZn.Xh=function(n){return M0(this,n)},uZn.Zh=function(n){return jWn(this,n)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return this.zh()?this.zh().Pk():null},uZn.ai=function(){return Kvn(this)},uZn.bi=function(n,t){sLn(this,n,t)},uZn.ci=function(n){this.$h().Sk(n)},uZn.di=function(n){this.$h().Vk(n)},uZn.ei=function(n){this.$h().Uk(n)},uZn.fi=function(n,t){var e,i,r,c;return(c=this.Jh())&&n&&(t=Nyn(c.El(),this,t),c.Il(this)),(i=this.Ph())&&(0!=(PHn(this,this.Ph(),this.Fh()).Bb&P0n)?(r=i.Qh())&&(n?!c&&r.Il(this):r.Hl(this)):(t=(e=this.Fh())>=0?this.Ah(t):this.Ph().Th(this,-1-e,null,t),t=this.Ch(null,-1,t))),this.di(n),t},uZn.gi=function(n){var t,e,i,r,c,a,o;if((c=emn(e=this.Dh(),n))>=(t=this.ji()))return uG(n,69).wk().Dk(this,this.hi(),c-t);if(c<=-1){if(!(a=iVn((gAn(),kBt),e,n)))throw hv(new vM(Gtt+n.xe()+ztt));if(PP(),uG(a,69).xk()||(a=_3(Nen(kBt,a))),r=uG((i=this.Ih(a))>=0?this.Lh(i,!0,!0):YNn(this,a,!0),160),(o=a.Ik())>1||-1==o)return uG(uG(r,220).Sl(n,!1),79)}else if(n.Jk())return uG((i=this.Ih(n))>=0?this.Lh(i,!1,!0):YNn(this,n,!1),79);return new jA(this,n)},uZn.hi=function(){return Wen(this)},uZn.ii=function(){return(tQ(),M_t).S},uZn.ji=function(){return iQ(this.ii())},uZn.ki=function(n){oAn(this,n)},uZn.Ib=function(){return vxn(this)},zW(Ytt,"BasicEObjectImpl",99),sDn(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1}),uZn.li=function(n){return Ven(this)[n]},uZn.mi=function(n,t){uQ(Ven(this),n,t)},uZn.ni=function(n){uQ(Ven(this),n,null)},uZn.th=function(){return uG(Lsn(this,4),129)},uZn.uh=function(){throw hv(new Kv)},uZn.vh=function(){return 0!=(4&this.Db)},uZn.zh=function(){throw hv(new Kv)},uZn.oi=function(n){Dvn(this,2,n)},uZn.Bh=function(n,t){this.Db=t<<16|255&this.Db,this.oi(n)},uZn.Dh=function(){return e1(this)},uZn.Fh=function(){return this.Db>>16},uZn.Gh=function(){var n;return jP(),null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?tBt:new zx(this,n)},uZn.wh=function(){return 0==(1&this.Db)},uZn.Jh=function(){return uG(Lsn(this,128),2034)},uZn.Kh=function(){return uG(Lsn(this,16),29)},uZn.Oh=function(){return 0!=(32&this.Db)},uZn.Ph=function(){return uG(Lsn(this,2),54)},uZn.Vh=function(){return 0!=(64&this.Db)},uZn.$h=function(){throw hv(new Kv)},uZn._h=function(){return uG(Lsn(this,64),288)},uZn.ci=function(n){Dvn(this,16,n)},uZn.di=function(n){Dvn(this,128,n)},uZn.ei=function(n){Dvn(this,64,n)},uZn.hi=function(){return $vn(this)},uZn.Db=0,zW(Ytt,"MinimalEObjectImpl",119),sDn(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.oi=function(n){this.Cb=n},uZn.Ph=function(){return this.Cb},zW(Ytt,"MinimalEObjectImpl/Container",120),sDn(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return ajn(this,n,t,e)},uZn.Uh=function(n,t,e){return BIn(this,n,t,e)},uZn.Wh=function(n){return j4(this,n)},uZn.bi=function(n,t){bln(this,n,t)},uZn.ii=function(){return tYn(),VKt},uZn.ki=function(n){ffn(this,n)},uZn.nf=function(){return Qkn(this)},uZn.gh=function(){return!this.o&&(this.o=new ltn((tYn(),XKt),EFt,this,0)),this.o},uZn.of=function(n){return zDn(this,n)},uZn.pf=function(n){return vnn(this,n)},uZn.qf=function(n,t){return Myn(this,n,t)},zW(Ztt,"EMapPropertyHolderImpl",2083),sDn(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},ns),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return 0!=this.a;case 1:return 0!=this.b}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Scn(this,uM(pK(t)));case 1:return void pcn(this,uM(pK(t)))}sLn(this,n,t)},uZn.ii=function(){return tYn(),KKt},uZn.ki=function(n){switch(n){case 0:return void Scn(this,0);case 1:return void pcn(this,0)}oAn(this,n)},uZn.Ib=function(){var n;return 0!=(64&this.Db)?vxn(this):((n=new fx(vxn(this))).a+=" (x: ",Oj(n,this.a),n.a+=", y: ",Oj(n,this.b),n.a+=")",n.a)},uZn.a=0,uZn.b=0,zW(Ztt,"ElkBendPointImpl",572),sDn(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return phn(this,n,t,e)},uZn.Wh=function(n){return _sn(this,n)},uZn.bi=function(n,t){CSn(this,n,t)},uZn.ii=function(){return tYn(),HKt},uZn.ki=function(n){Awn(this,n)},uZn.jh=function(){return this.k},uZn.kh=function(){return xJ(this)},uZn.Ib=function(){return Egn(this)},uZn.k=null,zW(Ztt,"ElkGraphElementImpl",739),sDn(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return spn(this,n,t,e)},uZn.Wh=function(n){return Kpn(this,n)},uZn.bi=function(n,t){ISn(this,n,t)},uZn.ii=function(){return tYn(),zKt},uZn.ki=function(n){Tmn(this,n)},uZn.lh=function(){return this.f},uZn.mh=function(){return this.g},uZn.nh=function(){return this.i},uZn.oh=function(){return this.j},uZn.ph=function(n,t){vN(this,n,t)},uZn.qh=function(n,t){kN(this,n,t)},uZn.rh=function(n){ycn(this,n)},uZn.sh=function(n){Mcn(this,n)},uZn.Ib=function(){return rOn(this)},uZn.f=0,uZn.g=0,uZn.i=0,uZn.j=0,zW(Ztt,"ElkShapeImpl",740),sDn(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),uZn.Lh=function(n,t,e){return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return eSn(this,n,t,e)},uZn.Wh=function(n){return iln(this,n)},uZn.bi=function(n,t){SDn(this,n,t)},uZn.ii=function(){return tYn(),FKt},uZn.ki=function(n){yyn(this,n)},uZn.hh=function(){return!this.d&&(this.d=new f_(aFt,this,8,5)),this.d},uZn.ih=function(){return!this.e&&(this.e=new f_(aFt,this,7,4)),this.e},zW(Ztt,"ElkConnectableShapeImpl",741),sDn(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},es),uZn.Ah=function(n){return sEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 3:return s0(this);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),this.b;case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),this.c;case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),this.a;case 7:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return qx(),!!z$n(this);case 9:return qx(),!!BNn(this);case 10:return qx(),!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return Xdn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?sEn(this,e):this.Cb.Th(this,-1-i,null,e)),nF(this,uG(n,27),e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nmn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nmn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nmn(this.a,n,e)}return SCn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 3:return nF(this,null,e);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Nyn(this.b,n,e);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Nyn(this.c,n,e);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Nyn(this.a,n,e)}return phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 3:return!!s0(this);case 4:return!!this.b&&0!=this.b.i;case 5:return!!this.c&&0!=this.c.i;case 6:return!!this.a&&0!=this.a.i;case 7:return!this.b&&(this.b=new f_(cFt,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new f_(cFt,this,5,8)),this.c.i<=1));case 8:return z$n(this);case 9:return BNn(this);case 10:return!this.b&&(this.b=new f_(cFt,this,4,7)),0!=this.b.i&&(!this.c&&(this.c=new f_(cFt,this,5,8)),0!=this.c.i)}return _sn(this,n)},uZn.bi=function(n,t){switch(n){case 3:return void ARn(this,uG(t,27));case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),Czn(this.b),!this.b&&(this.b=new f_(cFt,this,4,7)),void CW(this.b,uG(t,16));case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),Czn(this.c),!this.c&&(this.c=new f_(cFt,this,5,8)),void CW(this.c,uG(t,16));case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),Czn(this.a),!this.a&&(this.a=new fV(oFt,this,6,6)),void CW(this.a,uG(t,16))}CSn(this,n,t)},uZn.ii=function(){return tYn(),_Kt},uZn.ki=function(n){switch(n){case 3:return void ARn(this,null);case 4:return!this.b&&(this.b=new f_(cFt,this,4,7)),void Czn(this.b);case 5:return!this.c&&(this.c=new f_(cFt,this,5,8)),void Czn(this.c);case 6:return!this.a&&(this.a=new fV(oFt,this,6,6)),void Czn(this.a)}Awn(this,n)},uZn.Ib=function(){return SXn(this)},zW(Ztt,"ElkEdgeImpl",326),sDn(451,2083,{110:1,342:1,166:1,451:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},is),uZn.Ah=function(n){return zjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new MD(eFt,this,5)),this.a;case 6:return f0(this);case 7:return t?fMn(this):this.i;case 8:return t?hMn(this):this.f;case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),this.g;case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),this.e;case 11:return this.d}return ajn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?zjn(this,e):this.Cb.Th(this,-1-i,null,e)),ZK(this,uG(n,74),e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nmn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nmn(this.e,n,e)}return uG(ern(uG(Lsn(this,16),29)||(tYn(),BKt),t),69).wk().zk(this,$vn(this),t-iQ((tYn(),BKt)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Nyn(this.a,n,e);case 6:return ZK(this,null,e);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Nyn(this.g,n,e);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Nyn(this.e,n,e)}return BIn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 1:return 0!=this.j;case 2:return 0!=this.k;case 3:return 0!=this.b;case 4:return 0!=this.c;case 5:return!!this.a&&0!=this.a.i;case 6:return!!f0(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&0!=this.g.i;case 10:return!!this.e&&0!=this.e.i;case 11:return null!=this.d}return j4(this,n)},uZn.bi=function(n,t){switch(n){case 1:return void Tcn(this,uM(pK(t)));case 2:return void Ecn(this,uM(pK(t)));case 3:return void mcn(this,uM(pK(t)));case 4:return void jcn(this,uM(pK(t)));case 5:return!this.a&&(this.a=new MD(eFt,this,5)),Czn(this.a),!this.a&&(this.a=new MD(eFt,this,5)),void CW(this.a,uG(t,16));case 6:return void ORn(this,uG(t,74));case 7:return void zan(this,uG(t,84));case 8:return void Xan(this,uG(t,84));case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),Czn(this.g),!this.g&&(this.g=new f_(oFt,this,9,10)),void CW(this.g,uG(t,16));case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),Czn(this.e),!this.e&&(this.e=new f_(oFt,this,10,9)),void CW(this.e,uG(t,16));case 11:return void fon(this,mK(t))}bln(this,n,t)},uZn.ii=function(){return tYn(),BKt},uZn.ki=function(n){switch(n){case 1:return void Tcn(this,0);case 2:return void Ecn(this,0);case 3:return void mcn(this,0);case 4:return void jcn(this,0);case 5:return!this.a&&(this.a=new MD(eFt,this,5)),void Czn(this.a);case 6:return void ORn(this,null);case 7:return void zan(this,null);case 8:return void Xan(this,null);case 9:return!this.g&&(this.g=new f_(oFt,this,9,10)),void Czn(this.g);case 10:return!this.e&&(this.e=new f_(oFt,this,10,9)),void Czn(this.e);case 11:return void fon(this,null)}ffn(this,n)},uZn.Ib=function(){return A$n(this)},uZn.b=0,uZn.c=0,uZn.d=null,uZn.j=0,uZn.k=0,zW(Ztt,"ElkEdgeSectionImpl",451),sDn(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Lh=function(n,t,e){return 0==n?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab):$tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){return 0==t?(!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e)):uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){return 0==n?!!this.Ab&&0!=this.Ab.i:l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.Zh=function(n){return VQn(this,n)},uZn.bi=function(n,t){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.di=function(n){Dvn(this,128,n)},uZn.ii=function(){return YYn(),$_t},uZn.ki=function(n){if(0===n)return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){this.Bb|=1},uZn.qi=function(n){return qUn(this,n)},uZn.Bb=0,zW(Ytt,"EModelElementImpl",158),sDn(720,158,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},Fl),uZn.ri=function(n,t){return cWn(this,n,t)},uZn.si=function(n){var t,e,i,r;if(this.a!=Hrn(n)||0!=(256&n.Bb))throw hv(new vM(cet+n.zb+eet));for(e=n1(n);0!=z5(e.a).i;){if(_Tn(t=uG(yVn(e,0,F$(r=uG(zrn(z5(e.a),0),89).c,90)?uG(r,29):(YYn(),x_t)),29)))return uG(i=Hrn(t).wi().si(t),54).ci(n),i;e=n1(t)}return"java.util.Map$Entry"==(null!=n.D?n.D:n.B)?new Eq(n):new BG(n)},uZn.ti=function(n,t){return cYn(this,n,t)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.a}return $tn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t,e)},uZn.Sh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 1:return this.a&&(e=uG(this.a,54).Th(this,4,fFt,e)),ywn(this,uG(n,241),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 1:return ywn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),A_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),A_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return!!this.a}return l5(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void yIn(this,uG(t,241))}lpn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n),t)},uZn.ii=function(){return YYn(),A_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void yIn(this,null)}sdn(this,n-iQ((YYn(),A_t)),ern(uG(Lsn(this,16),29)||A_t,n))},zW(Ytt,"EFactoryImpl",720),sDn(1037,720,{110:1,2113:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},rs),uZn.ri=function(n,t){switch(n.hk()){case 12:return uG(t,149).Pg();case 13:return cpn(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 4:return new cs;case 6:return new Bk;case 7:return new Hk;case 8:return new es;case 9:return new ns;case 10:return new is;case 11:return new as;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 13:case 12:return null;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ztt,"ElkGraphFactoryImpl",1037),sDn(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),uZn.Gh=function(){var n;return null==(n=$1(eqn(uG(Lsn(this,16),29)||this.ii())))?(jP(),jP(),tBt):new VR(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.xe()}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),D_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.xe=function(){return this.zb},uZn.ui=function(n){qon(this,n)},uZn.Ib=function(){return Wwn(this)},uZn.zb=null,zW(Ytt,"ENamedElementImpl",448),sDn(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},aZ),uZn.Ah=function(n){return Jjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),this.rb;case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),this.vb;case 7:return t?this.Db>>16==7?uG(this.Cb,241):null:$0(this)}return $tn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 4:return this.sb&&(e=uG(this.sb,54).Th(this,1,sFt,e)),Jwn(this,uG(n,479),e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nmn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nmn(this.vb,n,e);case 7:return this.Cb&&(e=(i=this.Db>>16)>=0?Jjn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 4:return Jwn(this,null,e);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Nyn(this.rb,n,e);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Nyn(this.vb,n,e);case 7:return DUn(this,null,7,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),F_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),F_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.yb;case 3:return null!=this.xb;case 4:return!!this.sb;case 5:return!!this.rb&&0!=this.rb.i;case 6:return!!this.vb&&0!=this.vb.i;case 7:return!!$0(this)}return l5(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.Zh=function(n){return jKn(this,n)||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void zon(this,mK(t));case 3:return void Xon(this,mK(t));case 4:return void HIn(this,uG(t,479));case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),Czn(this.rb),!this.rb&&(this.rb=new vV(this,s_t,this)),void CW(this.rb,uG(t,16));case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),Czn(this.vb),!this.vb&&(this.vb=new i_(fFt,this,6,7)),void CW(this.vb,uG(t,16))}lpn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n),t)},uZn.ei=function(n){var t,e;if(n&&this.rb)for(e=new DD(this.rb);e.e!=e.i.gc();)F$(t=Zkn(e),364)&&(uG(t,364).w=null);Dvn(this,64,n)},uZn.ii=function(){return YYn(),F_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void zon(this,null);case 3:return void Xon(this,null);case 4:return void HIn(this,null);case 5:return!this.rb&&(this.rb=new vV(this,s_t,this)),void Czn(this.rb);case 6:return!this.vb&&(this.vb=new i_(fFt,this,6,7)),void Czn(this.vb)}sdn(this,n-iQ((YYn(),F_t)),ern(uG(Lsn(this,16),29)||F_t,n))},uZn.pi=function(){ojn(this)},uZn.vi=function(){return!this.rb&&(this.rb=new vV(this,s_t,this)),this.rb},uZn.wi=function(){return this.sb},uZn.xi=function(){return this.ub},uZn.yi=function(){return this.xb},uZn.zi=function(){return this.yb},uZn.Ai=function(n){this.ub=n},uZn.Ib=function(){var n;return 0!=(64&this.Db)?Wwn(this):((n=new fx(Wwn(this))).a+=" (nsURI: ",VA(n,this.yb),n.a+=", nsPrefix: ",VA(n,this.xb),n.a+=")",n.a)},uZn.xb=null,uZn.yb=null,zW(Ytt,"EPackageImpl",184),sDn(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},iDn),uZn.q=!1,uZn.r=!1;var dFt=!1;zW(Ztt,"ElkGraphPackageImpl",569),sDn(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},cs),uZn.Ah=function(n){return Vjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 7:return x0(this);case 8:return this.a}return spn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 7===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Vjn(this,e):this.Cb.Th(this,-1-i,null,e)),dz(this,uG(n,167),e)):SCn(this,n,t,e)},uZn.Uh=function(n,t,e){return 7==t?dz(this,null,e):phn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 7:return!!x0(this);case 8:return!m_("",this.a)}return Kpn(this,n)},uZn.bi=function(n,t){switch(n){case 7:return void vKn(this,uG(t,167));case 8:return void Van(this,mK(t))}ISn(this,n,t)},uZn.ii=function(){return tYn(),UKt},uZn.ki=function(n){switch(n){case 7:return void vKn(this,null);case 8:return void Van(this,"")}Tmn(this,n)},uZn.Ib=function(){return zOn(this)},uZn.a="",zW(Ztt,"ElkLabelImpl",366),sDn(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Bk),uZn.Ah=function(n){return hEn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),this.c;case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a;case 11:return R0(this);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),this.b;case 13:return qx(),!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nmn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nmn(this.a,n,e);case 11:return this.Cb&&(e=(i=this.Db>>16)>=0?hEn(this,e):this.Cb.Th(this,-1-i,null,e)),n_(this,uG(n,27),e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nmn(this.b,n,e)}return tSn(this,n,t,e)},uZn.Uh=function(n,t,e){switch(t){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Nyn(this.c,n,e);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Nyn(this.a,n,e);case 11:return n_(this,null,e);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Nyn(this.b,n,e)}return eSn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 9:return!!this.c&&0!=this.c.i;case 10:return!!this.a&&0!=this.a.i;case 11:return!!R0(this);case 12:return!!this.b&&0!=this.b.i;case 13:return!this.a&&(this.a=new fV(bFt,this,10,11)),this.a.i>0}return iln(this,n)},uZn.bi=function(n,t){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),Czn(this.c),!this.c&&(this.c=new fV(wFt,this,9,9)),void CW(this.c,uG(t,16));case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),Czn(this.a),!this.a&&(this.a=new fV(bFt,this,10,11)),void CW(this.a,uG(t,16));case 11:return void GRn(this,uG(t,27));case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),Czn(this.b),!this.b&&(this.b=new fV(aFt,this,12,3)),void CW(this.b,uG(t,16))}SDn(this,n,t)},uZn.ii=function(){return tYn(),GKt},uZn.ki=function(n){switch(n){case 9:return!this.c&&(this.c=new fV(wFt,this,9,9)),void Czn(this.c);case 10:return!this.a&&(this.a=new fV(bFt,this,10,11)),void Czn(this.a);case 11:return void GRn(this,null);case 12:return!this.b&&(this.b=new fV(aFt,this,12,3)),void Czn(this.b)}yyn(this,n)},uZn.Ib=function(){return zBn(this)},zW(Ztt,"ElkNodeImpl",207),sDn(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Hk),uZn.Ah=function(n){return Wjn(this,n)},uZn.Lh=function(n,t,e){return 9==n?h0(this):SMn(this,n,t,e)},uZn.Sh=function(n,t,e){var i;return 9===t?(this.Cb&&(e=(i=this.Db>>16)>=0?Wjn(this,e):this.Cb.Th(this,-1-i,null,e)),tF(this,uG(n,27),e)):tSn(this,n,t,e)},uZn.Uh=function(n,t,e){return 9==t?tF(this,null,e):eSn(this,n,t,e)},uZn.Wh=function(n){return 9==n?!!h0(this):iln(this,n)},uZn.bi=function(n,t){9!==n?SDn(this,n,t):LRn(this,uG(t,27))},uZn.ii=function(){return tYn(),qKt},uZn.ki=function(n){9!==n?yyn(this,n):LRn(this,null)},uZn.Ib=function(){return VBn(this)},zW(Ztt,"ElkPortImpl",193);var gFt=Iq(Pet,"BasicEMap/Entry");sDn(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},as),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Wan(this,uG(n,149))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return Dyn(this,n,t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.b;case 1:return null!=this.c}return Wkn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return void Wan(this,uG(t,149));case 1:return void Han(this,t)}sLn(this,n,t)},uZn.ii=function(){return tYn(),XKt},uZn.ki=function(n){switch(n){case 0:return void Wan(this,null);case 1:return void Han(this,null)}oAn(this,n)},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=n?Hon(n):0),this.a},uZn.md=function(){return this.c},uZn.Ci=function(n){this.a=n},uZn.nd=function(n){var t;return t=this.c,Han(this,n),t},uZn.Ib=function(){var n;return 0!=(64&this.Db)?vxn(this):(JA(JA(JA(n=new WM,this.b?this.b.Pg():IZn),Y4n),ox(this.c)),n.a)},uZn.a=-1,uZn.c=null;var pFt,mFt,vFt,kFt,yFt,MFt,TFt,jFt,EFt=zW(Ztt,"ElkPropertyToValueMapEntryImpl",1122);sDn(996,1,{},ss),zW(Oet,"JsonAdapter",996),sDn(216,63,S1n,SM),zW(Oet,"JsonImportException",216),sDn(868,1,{},Zjn),zW(Oet,"JsonImporter",868),sDn(903,1,{},QO),zW(Oet,"JsonImporter/lambda$0$Type",903),sDn(904,1,{},JO),zW(Oet,"JsonImporter/lambda$1$Type",904),sDn(912,1,{},Yp),zW(Oet,"JsonImporter/lambda$10$Type",912),sDn(914,1,{},YO),zW(Oet,"JsonImporter/lambda$11$Type",914),sDn(915,1,{},ZO),zW(Oet,"JsonImporter/lambda$12$Type",915),sDn(921,1,{},SY),zW(Oet,"JsonImporter/lambda$13$Type",921),sDn(920,1,{},PY),zW(Oet,"JsonImporter/lambda$14$Type",920),sDn(916,1,{},nA),zW(Oet,"JsonImporter/lambda$15$Type",916),sDn(917,1,{},tA),zW(Oet,"JsonImporter/lambda$16$Type",917),sDn(918,1,{},eA),zW(Oet,"JsonImporter/lambda$17$Type",918),sDn(919,1,{},iA),zW(Oet,"JsonImporter/lambda$18$Type",919),sDn(924,1,{},Zp),zW(Oet,"JsonImporter/lambda$19$Type",924),sDn(905,1,{},nm),zW(Oet,"JsonImporter/lambda$2$Type",905),sDn(922,1,{},tm),zW(Oet,"JsonImporter/lambda$20$Type",922),sDn(923,1,{},em),zW(Oet,"JsonImporter/lambda$21$Type",923),sDn(927,1,{},im),zW(Oet,"JsonImporter/lambda$22$Type",927),sDn(925,1,{},rm),zW(Oet,"JsonImporter/lambda$23$Type",925),sDn(926,1,{},cm),zW(Oet,"JsonImporter/lambda$24$Type",926),sDn(929,1,{},am),zW(Oet,"JsonImporter/lambda$25$Type",929),sDn(928,1,{},om),zW(Oet,"JsonImporter/lambda$26$Type",928),sDn(930,1,QZn,rA),uZn.Cd=function(n){ptn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$27$Type",930),sDn(931,1,QZn,cA),uZn.Cd=function(n){mtn(this.b,this.a,mK(n))},zW(Oet,"JsonImporter/lambda$28$Type",931),sDn(932,1,{},aA),zW(Oet,"JsonImporter/lambda$29$Type",932),sDn(908,1,{},um),zW(Oet,"JsonImporter/lambda$3$Type",908),sDn(933,1,{},oA),zW(Oet,"JsonImporter/lambda$30$Type",933),sDn(934,1,{},sm),zW(Oet,"JsonImporter/lambda$31$Type",934),sDn(935,1,{},hm),zW(Oet,"JsonImporter/lambda$32$Type",935),sDn(936,1,{},fm),zW(Oet,"JsonImporter/lambda$33$Type",936),sDn(937,1,{},lm),zW(Oet,"JsonImporter/lambda$34$Type",937),sDn(870,1,{},bm),zW(Oet,"JsonImporter/lambda$35$Type",870),sDn(941,1,{},DU),zW(Oet,"JsonImporter/lambda$36$Type",941),sDn(938,1,QZn,wm),uZn.Cd=function(n){V8(this.a,uG(n,377))},zW(Oet,"JsonImporter/lambda$37$Type",938),sDn(939,1,QZn,sA),uZn.Cd=function(n){vA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$38$Type",939),sDn(940,1,QZn,hA),uZn.Cd=function(n){kA(this.a,this.b,uG(n,166))},zW(Oet,"JsonImporter/lambda$39$Type",940),sDn(906,1,{},dm),zW(Oet,"JsonImporter/lambda$4$Type",906),sDn(942,1,QZn,gm),uZn.Cd=function(n){W8(this.a,uG(n,8))},zW(Oet,"JsonImporter/lambda$40$Type",942),sDn(907,1,{},pm),zW(Oet,"JsonImporter/lambda$5$Type",907),sDn(911,1,{},mm),zW(Oet,"JsonImporter/lambda$6$Type",911),sDn(909,1,{},vm),zW(Oet,"JsonImporter/lambda$7$Type",909),sDn(910,1,{},km),zW(Oet,"JsonImporter/lambda$8$Type",910),sDn(913,1,{},ym),zW(Oet,"JsonImporter/lambda$9$Type",913),sDn(961,1,QZn,Mm),uZn.Cd=function(n){pQ(this.a,new QW(mK(n)))},zW(Oet,"JsonMetaDataConverter/lambda$0$Type",961),sDn(962,1,QZn,Tm),uZn.Cd=function(n){SW(this.a,uG(n,245))},zW(Oet,"JsonMetaDataConverter/lambda$1$Type",962),sDn(963,1,QZn,jm),uZn.Cd=function(n){m2(this.a,uG(n,143))},zW(Oet,"JsonMetaDataConverter/lambda$2$Type",963),sDn(964,1,QZn,Em),uZn.Cd=function(n){PW(this.a,uG(n,170))},zW(Oet,"JsonMetaDataConverter/lambda$3$Type",964),sDn(245,22,{3:1,34:1,22:1,245:1},fA);var SFt,PFt=_cn(p3n,"GraphFeature",245,Oat,brn,QU);sDn(11,1,{34:1,149:1},Cm,uF,mL,_N),uZn.Fd=function(n){return dD(this,uG(n,149))},uZn.Fb=function(n){return QZ(this,n)},uZn.Sg=function(){return Jkn(this)},uZn.Pg=function(){return this.b},uZn.Hb=function(){return pln(this.b)},uZn.Ib=function(){return this.b},zW(p3n,"Property",11),sDn(671,1,b2n,Sm),uZn.Ne=function(n,t){return wgn(this,uG(n,96),uG(t,96))},uZn.Fb=function(n){return this===n},uZn.Oe=function(){return new Zw(this)},zW(p3n,"PropertyHolderComparator",671),sDn(709,1,$Zn,Pm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return Mtn(this)},uZn.Qb=function(){xj()},uZn.Ob=function(){return!!this.a},zW(qet,"ElkGraphUtil/AncestorIterator",709);var CFt=Iq(Pet,"EList");sDn(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1}),uZn.bd=function(n,t){$dn(this,n,t)},uZn.Fc=function(n){return ttn(this,n)},uZn.cd=function(n,t){return bfn(this,n,t)},uZn.Gc=function(n){return CW(this,n)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Li=function(){return!0},uZn.Mi=function(n,t){},uZn.Ni=function(){},uZn.Oi=function(n,t){Ann(this,n,t)},uZn.Pi=function(n,t,e){},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Fb=function(n){return G_n(this,n)},uZn.Hb=function(){return Bhn(this)},uZn.Si=function(){return!1},uZn.Kc=function(){return new DD(this)},uZn.ed=function(){return new Zx(this)},uZn.fd=function(n){var t;if(t=this.gc(),n<0||n>t)throw hv(new w_(n,t));return new QV(this,n)},uZn.Ui=function(n,t){this.Ti(n,this.dd(t))},uZn.Mc=function(n){return rin(this,n)},uZn.Wi=function(n,t){return t},uZn.hd=function(n,t){return Uyn(this,n,t)},uZn.Ib=function(){return Tpn(this)},uZn.Yi=function(){return!0},uZn.Zi=function(n,t){return gln(this,t)},zW(Pet,"AbstractEList",70),sDn(66,70,Qet,ls,Drn,Hun),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.$b=function(){V9(this)},uZn.Hc=function(n){return sSn(this,n)},uZn.Xb=function(n){return zrn(this,n)},uZn._i=function(n){var t,e,i;++this.j,n>(e=null==this.g?0:this.g.length)&&(i=this.g,(t=e+(e/2|0)+4)=0&&(this.gd(t),!0)},uZn.Xi=function(n,t){return this.Dj(n,this.Zi(n,t))},uZn.gc=function(){return this.Ej()},uZn.Pc=function(){return this.Fj()},uZn.Qc=function(n){return this.Gj(n)},uZn.Ib=function(){return this.Hj()},zW(Pet,"DelegatingEList",2093),sDn(2094,2093,_it),uZn.Ei=function(n,t){return dGn(this,n,t)},uZn.Fi=function(n){return this.Ei(this.Ej(),n)},uZn.Gi=function(n,t){cDn(this,n,t)},uZn.Hi=function(n){S$n(this,n)},uZn.Li=function(){return!this.Mj()},uZn.$b=function(){_zn(this)},uZn.Ij=function(n,t,e,i,r){return new zZ(this,n,t,e,i,r)},uZn.Jj=function(n){Msn(this.jj(),n)},uZn.Kj=function(){return null},uZn.Lj=function(){return-1},uZn.jj=function(){return null},uZn.Mj=function(){return!1},uZn.Nj=function(n,t){return t},uZn.Oj=function(n,t){return t},uZn.Pj=function(){return!1},uZn.Qj=function(){return!this.Aj()},uZn.Ti=function(n,t){var e,i;return this.Pj()?(i=this.Qj(),e=pIn(this,n,t),this.Jj(this.Ij(7,xwn(t),e,n,i)),e):pIn(this,n,t)},uZn.gd=function(n){var t,e,i,r;return this.Pj()?(e=null,i=this.Qj(),t=this.Ij(4,r=Oq(this,n),null,n,i),this.Mj()&&r?(e=this.Oj(r,e))?(e.nj(t),e.oj()):this.Jj(t):e?(e.nj(t),e.oj()):this.Jj(t),r):(r=Oq(this,n),this.Mj()&&r&&(e=this.Oj(r,null))&&e.oj(),r)},uZn.Xi=function(n,t){return gGn(this,n,t)},zW(Utt,"DelegatingNotifyingListImpl",2094),sDn(152,1,Bit),uZn.nj=function(n){return kPn(this,n)},uZn.oj=function(){Cen(this)},uZn.gj=function(){return this.d},uZn.Kj=function(){return null},uZn.Rj=function(){return null},uZn.hj=function(n){return-1},uZn.ij=function(){return OFn(this)},uZn.jj=function(){return null},uZn.kj=function(){return AFn(this)},uZn.lj=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},uZn.Sj=function(){return!1},uZn.mj=function(n){var t,e,i,r,c,a,o,u;switch(this.d){case 1:case 2:switch(n.gj()){case 1:case 2:if(xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0}case 4:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null))return a=kVn(this),c=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,i=n.lj(),this.d=6,u=new Drn(2),c<=i?(ttn(u,this.n),ttn(u,n.kj()),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=c,i+1])):(ttn(u,n.kj()),ttn(u,this.n),this.g=Uhn(cT(YHt,1),W1n,28,15,[this.o=i,c])),this.n=u,a||(this.o=-2-this.o-1),!0;break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.jj())&&this.hj(null)==n.hj(null)){for(a=kVn(this),i=n.lj(),o=uG(this.g,53),e=Inn(YHt,W1n,28,o.length+1,15,1),t=0;t>>0).toString(16))).a+=" (eventType: ",this.d){case 1:e.a+="SET";break;case 2:e.a+="UNSET";break;case 3:e.a+="ADD";break;case 5:e.a+="ADD_MANY";break;case 4:e.a+="REMOVE";break;case 6:e.a+="REMOVE_MANY";break;case 7:e.a+="MOVE";break;case 8:e.a+="REMOVING_ADAPTER";break;case 9:e.a+="RESOLVE";break;default:Aj(e,this.d)}if(pHn(this)&&(e.a+=", touch: true"),e.a+=", position: ",Aj(e,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),e.a+=", notifier: ",zA(e,this.jj()),e.a+=", feature: ",zA(e,this.Kj()),e.a+=", oldValue: ",zA(e,AFn(this)),e.a+=", newValue: ",6==this.d&&F$(this.g,53)){for(t=uG(this.g,53),e.a+="[",n=0;n10?(this.b&&this.c.j==this.a||(this.b=new oX(this),this.a=this.j),cS(this.b,n)):sSn(this,n)},uZn.Yi=function(){return!0},uZn.a=0,zW(Pet,"AbstractEList/1",966),sDn(301,77,v0n,w_),zW(Pet,"AbstractEList/BasicIndexOutOfBoundsException",301),sDn(40,1,$Zn,DD),uZn.Nb=function(n){SV(this,n)},uZn.Xj=function(){if(this.i.j!=this.f)throw hv(new Fv)},uZn.Yj=function(){return Zkn(this)},uZn.Ob=function(){return this.e!=this.i.gc()},uZn.Pb=function(){return this.Yj()},uZn.Qb=function(){$Sn(this)},uZn.e=0,uZn.f=0,uZn.g=-1,zW(Pet,"AbstractEList/EIterator",40),sDn(286,40,UZn,Zx,QV),uZn.Qb=function(){$Sn(this)},uZn.Rb=function(n){Smn(this,n)},uZn.Zj=function(){var n;try{return n=this.d.Xb(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.$j=function(n){cTn(this,n)},uZn.Sb=function(){return 0!=this.e},uZn.Tb=function(){return this.e},uZn.Ub=function(){return this.Zj()},uZn.Vb=function(){return this.e-1},uZn.Wb=function(n){this.$j(n)},zW(Pet,"AbstractEList/EListIterator",286),sDn(355,40,$Zn,nR),uZn.Yj=function(){return nyn(this)},uZn.Qb=function(){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEIterator",355),sDn(398,286,UZn,tR,N_),uZn.Rb=function(n){throw hv(new Kv)},uZn.Yj=function(){var n;try{return n=this.c.Vi(this.e),this.Xj(),this.g=this.e++,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Zj=function(){var n;try{return n=this.c.Vi(--this.e),this.Xj(),this.g=this.e,n}catch(t){throw F$(t=Ehn(t),77)?(this.Xj(),hv(new Bv)):hv(t)}},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"AbstractEList/NonResolvingEListIterator",398),sDn(2080,70,Git),uZn.Ei=function(n,t){var e,i,r,c,a,o,u,s,h;if(0!=(i=t.gc())){for(e=zln(this,(s=null==(u=uG(Lsn(this.a,4),129))?0:u.length)+i),(h=s-n)>0&&qGn(u,n,e,n+i,h),o=t.Kc(),c=0;ce)throw hv(new w_(n,e));return new qJ(this,n)},uZn.$b=function(){var n,t;++this.j,t=null==(n=uG(Lsn(this.a,4),129))?0:n.length,Pkn(this,null),Ann(this,t,n)},uZn.Hc=function(n){var t,e,i,r;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(i=0,r=(e=t).length;i=(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length))throw hv(new w_(n,e));return t[n]},uZn.dd=function(n){var t,e,i;if(null!=(t=uG(Lsn(this.a,4),129)))if(null!=n){for(e=0,i=t.length;ee)throw hv(new w_(n,e));return new GJ(this,n)},uZn.Ti=function(n,t){var e,i,r;if(n>=(r=null==(e=lvn(this))?0:e.length))throw hv(new dM(zet+n+Vet+r));if(t>=r)throw hv(new dM(Wet+t+Vet+r));return i=e[t],n!=t&&(n0&&qGn(n,0,t,0,e),t},uZn.Qc=function(n){var t,e;return(e=null==(t=uG(Lsn(this.a,4),129))?0:t.length)>0&&(n.lengthe&&uQ(n,e,null),n},zW(Pet,"ArrayDelegatingEList",2080),sDn(1051,40,$Zn,M9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EIterator",1051),sDn(722,286,UZn,pV,GJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},uZn.$j=function(n){cTn(this,n),this.a=uG(Lsn(this.b.a,4),129)},uZn.Qb=function(){$Sn(this),this.a=uG(Lsn(this.b.a,4),129)},zW(Pet,"ArrayDelegatingEList/EListIterator",722),sDn(1052,355,$Zn,T9),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEIterator",1052),sDn(723,398,UZn,mV,qJ),uZn.Xj=function(){if(this.b.j!=this.f||xA(uG(Lsn(this.b.a,4),129))!==xA(this.a))throw hv(new Fv)},zW(Pet,"ArrayDelegatingEList/NonResolvingEListIterator",723),sDn(615,301,v0n,pL),zW(Pet,"BasicEList/BasicIndexOutOfBoundsException",615),sDn(710,66,Qet,AA),uZn.bd=function(n,t){throw hv(new Kv)},uZn.Fc=function(n){throw hv(new Kv)},uZn.cd=function(n,t){throw hv(new Kv)},uZn.Gc=function(n){throw hv(new Kv)},uZn.$b=function(){throw hv(new Kv)},uZn._i=function(n){throw hv(new Kv)},uZn.Kc=function(){return this.Ii()},uZn.ed=function(){return this.Ji()},uZn.fd=function(n){return this.Ki(n)},uZn.Ti=function(n,t){throw hv(new Kv)},uZn.Ui=function(n,t){throw hv(new Kv)},uZn.gd=function(n){throw hv(new Kv)},uZn.Mc=function(n){throw hv(new Kv)},uZn.hd=function(n,t){throw hv(new Kv)},zW(Pet,"BasicEList/UnmodifiableEList",710),sDn(721,1,{3:1,20:1,16:1,15:1,61:1,597:1}),uZn.bd=function(n,t){Y$(this,n,uG(t,44))},uZn.Fc=function(n){return YR(this,uG(n,44))},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return uG(zrn(this.c,n),136)},uZn.Ti=function(n,t){return uG(this.c.Ti(n,t),44)},uZn.Ui=function(n,t){Z$(this,n,uG(t,44))},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return uG(this.c.gd(n),44)},uZn.hd=function(n,t){return EW(this,n,uG(t,44))},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.cd=function(n,t){return this.c.cd(n,t)},uZn.Gc=function(n){return this.c.Gc(n)},uZn.$b=function(){this.c.$b()},uZn.Hc=function(n){return this.c.Hc(n)},uZn.Ic=function(n){return yhn(this.c,n)},uZn._j=function(){var n,t;if(null==this.d){for(this.d=Inn(IFt,qit,66,2*this.f+1,0,1),t=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)bMn(this,uG(n.Yj(),136));this.e=t}},uZn.Fb=function(n){return H_(this,n)},uZn.Hb=function(){return Bhn(this.c)},uZn.dd=function(n){return this.c.dd(n)},uZn.ak=function(){this.c=new Im(this)},uZn.dc=function(){return 0==this.f},uZn.Kc=function(){return this.c.Kc()},uZn.ed=function(){return this.c.ed()},uZn.fd=function(n){return this.c.fd(n)},uZn.bk=function(){return Tnn(this)},uZn.ck=function(n,t,e){return new xU(n,t,e)},uZn.dk=function(){return new ws},uZn.Mc=function(n){return uan(this,n)},uZn.gc=function(){return this.f},uZn.kd=function(n,t){return new C2(this.c,n,t)},uZn.Pc=function(){return this.c.Pc()},uZn.Qc=function(n){return this.c.Qc(n)},uZn.Ib=function(){return Tpn(this.c)},uZn.e=0,uZn.f=0,zW(Pet,"BasicEMap",721),sDn(1046,66,Qet,Im),uZn.Mi=function(n,t){Qv(this,uG(t,136))},uZn.Pi=function(n,t,e){var i;++(i=this,uG(t,136),i).a.e},uZn.Qi=function(n,t){Jv(this,uG(t,136))},uZn.Ri=function(n,t,e){fR(this,uG(t,136),uG(e,136))},uZn.Oi=function(n,t){Osn(this.a)},zW(Pet,"BasicEMap/1",1046),sDn(1047,66,Qet,ws),uZn.aj=function(n){return Inn(FFt,Xit,621,n,0,1)},zW(Pet,"BasicEMap/2",1047),sDn(1048,KZn,FZn,Om),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return ymn(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new aj(this.a)},uZn.Mc=function(n){var t;return t=this.a.f,Svn(this.a,n),this.a.f!=t},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/3",1048),sDn(1049,31,RZn,Am),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){return q_n(this.a,n)},uZn.Kc=function(){return 0==this.a.f?(EK(),KFt.a):new oj(this.a)},uZn.gc=function(){return this.a.f},zW(Pet,"BasicEMap/4",1049),sDn(1050,KZn,FZn,Lm),uZn.$b=function(){this.a.c.$b()},uZn.Hc=function(n){var t,e,i,r,c,a,o,u,s;if(this.a.f>0&&F$(n,44)&&(this.a._j(),r=null==(o=(u=uG(n,44)).ld())?0:Hon(o),c=iF(this.a,r),t=this.a.d[c]))for(e=uG(t.g,379),s=t.i,a=0;a"+this.c},uZn.a=0;var KFt,FFt=zW(Pet,"BasicEMap/EntryImpl",621);sDn(546,1,{},ds),zW(Pet,"BasicEMap/View",546),sDn(783,1,{}),uZn.Fb=function(n){return PDn((hZ(),zot),n)},uZn.Hb=function(){return Zfn((hZ(),zot))},uZn.Ib=function(){return vIn((hZ(),zot))},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList",783),sDn(1348,1,UZn,gs),uZn.Nb=function(n){SV(this,n)},uZn.Rb=function(n){throw hv(new Kv)},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},uZn.Pb=function(){throw hv(new Bv)},uZn.Tb=function(){return 0},uZn.Ub=function(){throw hv(new Bv)},uZn.Vb=function(){return-1},uZn.Qb=function(){throw hv(new Kv)},uZn.Wb=function(n){throw hv(new Kv)},zW(Pet,"ECollections/BasicEmptyUnmodifiableEList/1",1348),sDn(1346,783,{20:1,16:1,15:1,61:1},Gk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},zW(Pet,"ECollections/EmptyUnmodifiableEList",1346),sDn(1347,783,{20:1,16:1,15:1,61:1,597:1},qk),uZn.bd=function(n,t){iE()},uZn.Fc=function(n){return rE()},uZn.cd=function(n,t){return cE()},uZn.Gc=function(n){return aE()},uZn.$b=function(){oE()},uZn.Hc=function(n){return!1},uZn.Ic=function(n){return!1},uZn.Jc=function(n){z8(this,n)},uZn.Xb=function(n){return oL((hZ(),n)),null},uZn.dd=function(n){return-1},uZn.dc=function(){return!0},uZn.Kc=function(){return this.a},uZn.ed=function(){return this.a},uZn.fd=function(n){return this.a},uZn.Ti=function(n,t){return uE()},uZn.Ui=function(n,t){sE()},uZn.Lc=function(){return new fX(null,new h3(this,16))},uZn.gd=function(n){return hE()},uZn.Mc=function(n){return fE()},uZn.hd=function(n,t){return lE()},uZn.gc=function(){return 0},uZn.jd=function(n){Lon(this,n)},uZn.Nc=function(){return new h3(this,16)},uZn.Oc=function(){return new fX(null,new h3(this,16))},uZn.kd=function(n,t){return hZ(),new C2(zot,n,t)},uZn.Pc=function(){return Sz((hZ(),zot))},uZn.Qc=function(n){return hZ(),oTn(zot,n)},uZn.bk=function(){return hZ(),hZ(),Vot},zW(Pet,"ECollections/EmptyUnmodifiableEMap",1347);var _Ft,BFt=Iq(Pet,"Enumerator");sDn(288,1,{288:1},Z_n),uZn.Fb=function(n){var t;return this===n||!!F$(n,288)&&(t=uG(n,288),this.f==t.f&&yX(this.i,t.i)&&kX(this.a,0!=(256&this.f)?0!=(256&t.f)?t.a:null:0!=(256&t.f)?null:t.a)&&kX(this.d,t.d)&&kX(this.g,t.g)&&kX(this.e,t.e)&&Ykn(this,t))},uZn.Hb=function(){return this.f},uZn.Ib=function(){return xUn(this)},uZn.f=0;var HFt,UFt,GFt,qFt=0,XFt=0,zFt=0,VFt=0,WFt=0,QFt=0,JFt=0,YFt=0,ZFt=0,n_t=0,t_t=0,e_t=0,i_t=0;zW(Pet,"URI",288),sDn(1121,45,B0n,Xk),uZn.zc=function(n,t){return uG(r2(this,mK(n),uG(t,288)),288)},zW(Pet,"URI/URICache",1121),sDn(505,66,Qet,us,$X),uZn.Si=function(){return!0},zW(Pet,"UniqueEList",505),sDn(590,63,S1n,Pen),zW(Pet,"WrappedException",590);var r_t,c_t=Iq(Itt,Wit),a_t=Iq(Itt,Qit),o_t=Iq(Itt,Jit),u_t=Iq(Itt,Yit),s_t=Iq(Itt,Zit),h_t=Iq(Itt,"EClass"),f_t=Iq(Itt,"EDataType");sDn(1233,45,B0n,zk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1233);var l_t,b_t,w_t=Iq(Itt,"EEnum"),d_t=Iq(Itt,nrt),g_t=Iq(Itt,trt),p_t=Iq(Itt,ert),m_t=Iq(Itt,irt),v_t=Iq(Itt,rrt);sDn(1042,1,{},os),uZn.Ib=function(){return"NIL"},zW(Itt,"EStructuralFeature/Internal/DynamicValueHolder/1",1042),sDn(1041,45,B0n,Vk),uZn.xc=function(n){return RA(n)?U1(this,n):DA(FX(this.f,n))},zW(Itt,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1041);var k_t,y_t,M_t,T_t,j_t,E_t,S_t,P_t,C_t,I_t,O_t,A_t,L_t,N_t,$_t,D_t,x_t,R_t,K_t,F_t,__t,B_t,H_t,U_t,G_t,q_t,X_t,z_t,V_t,W_t,Q_t,J_t=Iq(Itt,crt),Y_t=Iq(Itt,"EValidator/PatternMatcher"),Z_t=Iq(art,"FeatureMap/Entry");sDn(545,1,{76:1},TA),uZn.Lk=function(){return this.a},uZn.md=function(){return this.b},zW(Ytt,"BasicEObjectImpl/1",545),sDn(1040,1,ort,jA),uZn.Fk=function(n){return U9(this.a,this.b,n)},uZn.Qj=function(){return M0(this.a,this.b)},uZn.Wb=function(n){y0(this.a,this.b,n)},uZn.Gk=function(){VQ(this.a,this.b)},zW(Ytt,"BasicEObjectImpl/4",1040),sDn(2081,1,{114:1}),uZn.Mk=function(n){this.e=0==n?X_t:Inn(dat,EZn,1,n,5,1)},uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Nk=function(){return this.c},uZn.Ok=function(){throw hv(new Kv)},uZn.Pk=function(){throw hv(new Kv)},uZn.Qk=function(){return this.d},uZn.Rk=function(){return null!=this.e},uZn.Sk=function(n){this.c=n},uZn.Tk=function(n){throw hv(new Kv)},uZn.Uk=function(n){throw hv(new Kv)},uZn.Vk=function(n){this.d=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderBaseImpl",2081),sDn(192,2081,{114:1},Ll),uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},zW(Ytt,"BasicEObjectImpl/EPropertiesHolderImpl",192),sDn(516,99,Jtt,ps),uZn.uh=function(){return this.f},uZn.zh=function(){return this.k},uZn.Bh=function(n,t){this.g=n,this.i=t},uZn.Dh=function(){return 0==(2&this.j)?this.ii():this.$h().Nk()},uZn.Fh=function(){return this.i},uZn.wh=function(){return 0!=(1&this.j)},uZn.Ph=function(){return this.g},uZn.Vh=function(){return 0!=(4&this.j)},uZn.$h=function(){return!this.k&&(this.k=new Ll),this.k},uZn.ci=function(n){this.$h().Sk(n),n?this.j|=2:this.j&=-3},uZn.ei=function(n){this.$h().Uk(n),n?this.j|=4:this.j&=-5},uZn.ii=function(){return(tQ(),M_t).S},uZn.i=0,uZn.j=1,zW(Ytt,"EObjectImpl",516),sDn(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},BG),uZn.li=function(n){return this.e[n]},uZn.mi=function(n,t){this.e[n]=t},uZn.ni=function(n){this.e[n]=null},uZn.Dh=function(){return this.d},uZn.Ih=function(n){return emn(this.d,n)},uZn.Kh=function(){return this.d},uZn.Oh=function(){return null!=this.e},uZn.$h=function(){return!this.k&&(this.k=new ms),this.k},uZn.ci=function(n){this.d=n},uZn.hi=function(){var n;return null==this.e&&(n=iQ(this.d),this.e=0==n?z_t:Inn(dat,EZn,1,n,5,1)),this},uZn.ji=function(){return 0},zW(Ytt,"DynamicEObjectImpl",798),sDn(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},Eq),uZn.Fb=function(n){return this===n},uZn.Hb=function(){return xx(this)},uZn.ci=function(n){this.d=n,this.b=EKn(n,"key"),this.c=EKn(n,uet)},uZn.Bi=function(){var n;return-1==this.a&&(n=zen(this,this.b),this.a=null==n?0:Hon(n)),this.a},uZn.ld=function(){return zen(this,this.b)},uZn.md=function(){return zen(this,this.c)},uZn.Ci=function(n){this.a=n},uZn.Di=function(n){y0(this,this.b,n)},uZn.nd=function(n){var t;return t=zen(this,this.c),y0(this,this.c,n),t},uZn.a=0,zW(Ytt,"DynamicEObjectImpl/BasicEMapEntry",1522),sDn(1523,1,{114:1},ms),uZn.Mk=function(n){throw hv(new Kv)},uZn.li=function(n){throw hv(new Kv)},uZn.mi=function(n,t){throw hv(new Kv)},uZn.ni=function(n){throw hv(new Kv)},uZn.Nk=function(){throw hv(new Kv)},uZn.Ok=function(){return this.a},uZn.Pk=function(){return this.b},uZn.Qk=function(){return this.c},uZn.Rk=function(){throw hv(new Kv)},uZn.Sk=function(n){throw hv(new Kv)},uZn.Tk=function(n){this.a=n},uZn.Uk=function(n){this.b=n},uZn.Vk=function(n){this.c=n},zW(Ytt,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1523),sDn(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},vs),uZn.Ah=function(n){return Yjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.d;case 2:return e?(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),this.b):(!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),Tnn(this.b));case 3:return F0(this);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),this.a;case 5:return!this.c&&(this.c=new OD(nFt,this,5)),this.c}return $tn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 3:return this.Cb&&(e=(i=this.Db>>16)>=0?Yjn(this,e):this.Cb.Th(this,-1-i,null,e)),gz(this,uG(n,155),e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),G_(this.b,n,e);case 3:return gz(this,null,e);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),T_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),T_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.d;case 2:return!!this.b&&0!=this.b.f;case 3:return!!F0(this);case 4:return!!this.a&&0!=this.a.i;case 5:return!!this.c&&0!=this.c.i}return l5(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void xq(this,mK(t));case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void Jun(this.b,t);case 3:return void kKn(this,uG(t,155));case 4:return!this.a&&(this.a=new MD(nFt,this,4)),Czn(this.a),!this.a&&(this.a=new MD(nFt,this,4)),void CW(this.a,uG(t,16));case 5:return!this.c&&(this.c=new OD(nFt,this,5)),Czn(this.c),!this.c&&(this.c=new OD(nFt,this,5)),void CW(this.c,uG(t,16))}lpn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n),t)},uZn.ii=function(){return YYn(),T_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void Yan(this,null);case 2:return!this.b&&(this.b=new XR((YYn(),H_t),wBt,this)),void this.b.c.$b();case 3:return void kKn(this,null);case 4:return!this.a&&(this.a=new MD(nFt,this,4)),void Czn(this.a);case 5:return!this.c&&(this.c=new OD(nFt,this,5)),void Czn(this.c)}sdn(this,n-iQ((YYn(),T_t)),ern(uG(Lsn(this,16),29)||T_t,n))},uZn.Ib=function(){return fdn(this)},uZn.d=null,zW(Ytt,"EAnnotationImpl",519),sDn(141,721,urt,ltn),uZn.Gi=function(n,t){qN(this,n,uG(t,44))},uZn.Wk=function(n,t){return U_(this,uG(n,44),t)},uZn.$i=function(n){return uG(uG(this.c,71).$i(n),136)},uZn.Ii=function(){return uG(this.c,71).Ii()},uZn.Ji=function(){return uG(this.c,71).Ji()},uZn.Ki=function(n){return uG(this.c,71).Ki(n)},uZn.Xk=function(n,t){return G_(this,n,t)},uZn.Fk=function(n){return uG(this.c,79).Fk(n)},uZn.ak=function(){},uZn.Qj=function(){return uG(this.c,79).Qj()},uZn.ck=function(n,t,e){var i;return(i=uG(Hrn(this.b).wi().si(this.b),136)).Ci(n),i.Di(t),i.nd(e),i},uZn.dk=function(){return new Vm(this)},uZn.Wb=function(n){Jun(this,n)},uZn.Gk=function(){uG(this.c,79).Gk()},zW(art,"EcoreEMap",141),sDn(165,141,urt,XR),uZn._j=function(){var n,t,e,i,r;if(null==this.d){for(r=Inn(IFt,qit,66,2*this.f+1,0,1),e=this.c.Kc();e.e!=e.i.gc();)!(n=r[i=((t=uG(e.Yj(),136)).Bi()&vZn)%r.length])&&(n=r[i]=new Vm(this)),n.Fc(t);this.d=r}},zW(Ytt,"EAnnotationImpl/1",165),sDn(291,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,480:1,54:1,99:1,158:1,291:1,119:1,120:1}),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void this.ui(mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj())}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),G_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void this.ui(null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj())}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){bEn(this),this.Bb|=1},uZn.Hk=function(){return bEn(this)},uZn.Ik=function(){return this.t},uZn.Jk=function(){var n;return(n=this.t)>1||-1==n},uZn.Si=function(){return 0!=(512&this.Bb)},uZn.Yk=function(n,t){return Ywn(this,n,t)},uZn.Zk=function(n){Ccn(this,n)},uZn.Ib=function(){return L$n(this)},uZn.s=0,uZn.t=1,zW(Ytt,"ETypedElementImpl",291),sDn(461,291,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,461:1,291:1,119:1,120:1,692:1}),uZn.Ah=function(n){return pjn(this,n)},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!this.Jk();case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this)}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 17:return this.Cb&&(e=(i=this.Db>>16)>=0?pjn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 17:return DUn(this,null,17,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return this.Jk();case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this)}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void this.Zk(uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),U_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void this.Zk(1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.pi=function(){BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.pk=function(){return this.f},uZn.ik=function(){return NRn(this)},uZn.qk=function(){return K0(this)},uZn.uk=function(){return null},uZn.$k=function(){return this.k},uZn.Lj=function(){return this.n},uZn.vk=function(){return qSn(this)},uZn.wk=function(){var n,t,e,i,r,c,a,o,u;return this.p||((null==(e=K0(this)).i&&eqn(e),e.i).length,(i=this.uk())&&iQ(K0(i)),n=(a=(r=bEn(this)).kk())?0!=(1&a.i)?a==ZHt?cot:a==YHt?dot:a==iUt?lot:a==eUt?fot:a==nUt?yot:a==rUt?Tot:a==tUt?uot:hot:a:null,t=NRn(this),o=r.ik(),Vgn(this),0!=(this.Bb&VZn)&&((c=cSn((gAn(),kBt),e))&&c!=this||(c=_3(Nen(kBt,this))))?this.p=new SA(this,c):this.Jk()?this.al()?i?0!=(this.Bb&hrt)?n?this.bl()?this.p=new CY(47,n,this,i):this.p=new CY(5,n,this,i):this.bl()?this.p=new r8(46,this,i):this.p=new r8(4,this,i):n?this.bl()?this.p=new CY(49,n,this,i):this.p=new CY(7,n,this,i):this.bl()?this.p=new r8(48,this,i):this.p=new r8(6,this,i):0!=(this.Bb&hrt)?n?n==Sat?this.p=new RU(50,gFt,this):this.bl()?this.p=new RU(43,n,this):this.p=new RU(1,n,this):this.bl()?this.p=new GZ(42,this):this.p=new GZ(0,this):n?n==Sat?this.p=new RU(41,gFt,this):this.bl()?this.p=new RU(45,n,this):this.p=new RU(3,n,this):this.bl()?this.p=new GZ(44,this):this.p=new GZ(2,this):F$(r,156)?n==Z_t?this.p=new GZ(40,this):0!=(512&this.Bb)?0!=(this.Bb&hrt)?this.p=n?new RU(9,n,this):new GZ(8,this):this.p=n?new RU(11,n,this):new GZ(10,this):0!=(this.Bb&hrt)?this.p=n?new RU(13,n,this):new GZ(12,this):this.p=n?new RU(15,n,this):new GZ(14,this):i?(u=i.t)>1||-1==u?this.bl()?0!=(this.Bb&hrt)?this.p=n?new CY(25,n,this,i):new r8(24,this,i):this.p=n?new CY(27,n,this,i):new r8(26,this,i):0!=(this.Bb&hrt)?this.p=n?new CY(29,n,this,i):new r8(28,this,i):this.p=n?new CY(31,n,this,i):new r8(30,this,i):this.bl()?0!=(this.Bb&hrt)?this.p=n?new CY(33,n,this,i):new r8(32,this,i):this.p=n?new CY(35,n,this,i):new r8(34,this,i):0!=(this.Bb&hrt)?this.p=n?new CY(37,n,this,i):new r8(36,this,i):this.p=n?new CY(39,n,this,i):new r8(38,this,i):this.bl()?0!=(this.Bb&hrt)?this.p=n?new RU(17,n,this):new GZ(16,this):this.p=n?new RU(19,n,this):new GZ(18,this):0!=(this.Bb&hrt)?this.p=n?new RU(21,n,this):new GZ(20,this):this.p=n?new RU(23,n,this):new GZ(22,this):this._k()?this.bl()?this.p=new KU(uG(r,29),this,i):this.p=new _1(uG(r,29),this,i):F$(r,156)?n==Z_t?this.p=new GZ(40,this):0!=(this.Bb&hrt)?this.p=n?new bz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new AY(uG(r,156),t,o,this):this.p=n?new lz(t,o,this,(Pmn(),a==YHt?hBt:a==ZHt?cBt:a==nUt?fBt:a==iUt?sBt:a==eUt?uBt:a==rUt?bBt:a==tUt?aBt:a==JHt?oBt:lBt)):new OY(uG(r,156),t,o,this):this.al()?i?0!=(this.Bb&hrt)?this.bl()?this.p=new GU(uG(r,29),this,i):this.p=new UU(uG(r,29),this,i):this.bl()?this.p=new HU(uG(r,29),this,i):this.p=new FU(uG(r,29),this,i):0!=(this.Bb&hrt)?this.bl()?this.p=new cK(uG(r,29),this):this.p=new iK(uG(r,29),this):this.bl()?this.p=new eK(uG(r,29),this):this.p=new tK(uG(r,29),this):this.bl()?i?0!=(this.Bb&hrt)?this.p=new qU(uG(r,29),this,i):this.p=new _U(uG(r,29),this,i):0!=(this.Bb&hrt)?this.p=new aK(uG(r,29),this):this.p=new rK(uG(r,29),this):i?0!=(this.Bb&hrt)?this.p=new XU(uG(r,29),this,i):this.p=new BU(uG(r,29),this,i):0!=(this.Bb&hrt)?this.p=new oK(uG(r,29),this):this.p=new OX(uG(r,29),this)),this.p},uZn.rk=function(){return 0!=(this.Bb&w1n)},uZn._k=function(){return!1},uZn.al=function(){return!1},uZn.sk=function(){return 0!=(this.Bb&VZn)},uZn.xk=function(){return ein(this)},uZn.bl=function(){return!1},uZn.tk=function(){return 0!=(this.Bb&hrt)},uZn.cl=function(n){this.k=n},uZn.ui=function(n){g2(this,n)},uZn.Ib=function(){return MBn(this)},uZn.e=!1,uZn.n=0,zW(Ytt,"EStructuralFeatureImpl",461),sDn(331,461,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,331:1,158:1,461:1,291:1,119:1,120:1,692:1},Wk),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),!!SNn(this);case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),0!=(this.Bb&Qtt);case 19:return t?khn(this):E7(this)}return $tn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return SNn(this);case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this);case 18:return 0!=(this.Bb&Qtt);case 19:return!!E7(this)}return l5(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void fj(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void Sgn(this,oM(gK(t)))}lpn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n),t)},uZn.ii=function(){return YYn(),j_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return this.b=0,void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return void Sgn(this,!1)}sdn(this,n-iQ((YYn(),j_t)),ern(uG(Lsn(this,16),29)||j_t,n))},uZn.pi=function(){khn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.Jk=function(){return SNn(this)},uZn.Yk=function(n,t){return this.b=0,this.a=null,Ywn(this,n,t)},uZn.Zk=function(n){fj(this,n)},uZn.Ib=function(){var n;return 0!=(64&this.Db)?MBn(this):((n=new fx(MBn(this))).a+=" (iD: ",Lj(n,0!=(this.Bb&Qtt)),n.a+=")",n.a)},uZn.b=0,zW(Ytt,"EAttributeImpl",331),sDn(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1}),uZn.dl=function(n){return n.Dh()==this},uZn.Ah=function(n){return VTn(this,n)},uZn.Bh=function(n,t){this.w=null,this.Db=t<<16|255&this.Db,this.Cb=n},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return this.ik();case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A}return $tn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,6,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().zk(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return DUn(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e)}return uG(ern(uG(Lsn(this,16),29)||this.ii(),t),69).wk().Ak(this,$vn(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return null!=this.ik();case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i}return l5(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16))}lpn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n),t)},uZn.ii=function(){return YYn(),S_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A)}sdn(this,n-iQ(this.ii()),ern(uG(Lsn(this,16),29)||this.ii(),n))},uZn.hk=function(){var n;return-1==this.G&&(this.G=(n=Hrn(this))?Hyn(n.vi(),this):-1),this.G},uZn.ik=function(){return null},uZn.jk=function(){return Hrn(this)},uZn.el=function(){return this.v},uZn.kk=function(){return _Tn(this)},uZn.lk=function(){return null!=this.D?this.D:this.B},uZn.mk=function(){return this.F},uZn.fk=function(n){return LGn(this,n)},uZn.fl=function(n){this.v=n},uZn.gl=function(n){tun(this,n)},uZn.hl=function(n){this.C=n},uZn.ui=function(n){d2(this,n)},uZn.Ib=function(){return pmn(this)},uZn.C=null,uZn.D=null,uZn.G=-1,zW(Ytt,"EClassifierImpl",364),sDn(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,481:1,119:1,120:1,691:1},Kl),uZn.dl=function(n){return VF(this,n.Dh())},uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return null!=this.D?this.D:this.B;case 3:return _Tn(this);case 4:return null;case 5:return this.F;case 6:return t?Hrn(this):D0(this);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),this.A;case 8:return qx(),0!=(256&this.Bb);case 9:return qx(),0!=(512&this.Bb);case 10:return n1(this);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),this.q;case 12:return hXn(this);case 13:return Zqn(this);case 14:return Zqn(this),this.r;case 15:return hXn(this),this.k;case 16:return RAn(this);case 17:return $qn(this);case 18:return eqn(this);case 19:return mRn(this);case 20:return hXn(this),this.o;case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),this.s;case 22:return z5(this);case 23:return x_n(this)}return $tn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 6:return this.Cb&&(e=(i=this.Db>>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,6,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nmn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nmn(this.s,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return DUn(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Nyn(this.q,n,e);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Nyn(this.s,n,e);case 22:return Nyn(z5(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),E_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),E_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return!1;case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0!=(256&this.Bb);case 9:return 0!=(512&this.Bb);case 10:return!(!this.u||0==z5(this.u.a).i||this.n&&yMn(this.n));case 11:return!!this.q&&0!=this.q.i;case 12:return 0!=hXn(this).i;case 13:return 0!=Zqn(this).i;case 14:return Zqn(this),0!=this.r.i;case 15:return hXn(this),0!=this.k.i;case 16:return 0!=RAn(this).i;case 17:return 0!=$qn(this).i;case 18:return 0!=eqn(this).i;case 19:return 0!=mRn(this).i;case 20:return hXn(this),!!this.o;case 21:return!!this.s&&0!=this.s.i;case 22:return!!this.n&&yMn(this.n);case 23:return 0!=x_n(this).i}return l5(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.Zh=function(n){return(null==this.i||this.q&&0!=this.q.i?null:EKn(this,n))||VQn(this,n)},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void gdn(this,oM(gK(t)));case 9:return void vdn(this,oM(gK(t)));case 10:return _zn(n1(this)),void CW(n1(this),uG(t,16));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),Czn(this.q),!this.q&&(this.q=new fV(p_t,this,11,10)),void CW(this.q,uG(t,16));case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),Czn(this.s),!this.s&&(this.s=new fV(o_t,this,21,17)),void CW(this.s,uG(t,16));case 22:return Czn(z5(this)),void CW(z5(this),uG(t,16))}lpn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n),t)},uZn.ii=function(){return YYn(),E_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void gdn(this,!1);case 9:return void vdn(this,!1);case 10:return void(this.u&&_zn(this.u));case 11:return!this.q&&(this.q=new fV(p_t,this,11,10)),void Czn(this.q);case 21:return!this.s&&(this.s=new fV(o_t,this,21,17)),void Czn(this.s);case 22:return void(this.n&&Czn(this.n))}sdn(this,n-iQ((YYn(),E_t)),ern(uG(Lsn(this,16),29)||E_t,n))},uZn.pi=function(){var n,t;if(hXn(this),Zqn(this),RAn(this),$qn(this),eqn(this),mRn(this),x_n(this),V9(iG(y9(this))),this.s)for(n=0,t=this.s.i;n=0;--t)zrn(this,t);return gmn(this,n)},uZn.Gk=function(){Czn(this)},uZn.Zi=function(n,t){return Dcn(this,n,t)},zW(art,"EcoreEList",632),sDn(504,632,Trt,FG),uZn.Li=function(){return!1},uZn.Lj=function(){return this.c},uZn.Mj=function(){return!1},uZn.ol=function(){return!0},uZn.Si=function(){return!0},uZn.Wi=function(n,t){return t},uZn.Yi=function(){return!1},uZn.c=0,zW(art,"EObjectEList",504),sDn(83,504,Trt,MD),uZn.Mj=function(){return!0},uZn.ml=function(){return!1},uZn.al=function(){return!0},zW(art,"EObjectContainmentEList",83),sDn(555,83,Trt,TD),uZn.Ni=function(){this.b=!0},uZn.Qj=function(){return this.b},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.b,this.b=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.b=!1},uZn.b=!1,zW(art,"EObjectContainmentEList/Unsettable",555),sDn(1161,555,Trt,hz),uZn.Ti=function(n,t){var e,i;return e=uG(zdn(this,n,t),89),uN(this.e)&&Yv(this,new wtn(this.a,7,(YYn(),P_t),xwn(t),F$(i=e.c,90)?uG(i,29):x_t,n)),e},uZn.Uj=function(n,t){return Dmn(this,uG(n,89),t)},uZn.Vj=function(n,t){return $mn(this,uG(n,89),t)},uZn.Wj=function(n,t,e){return TSn(this,uG(n,89),uG(t,89),e)},uZn.Ij=function(n,t,e,i,r){switch(n){case 3:return i2(this,n,t,e,i,this.i>1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return yMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EClassImpl/1",1161),sDn(1175,1174,Fit),uZn.dj=function(n){var t,e,i,r,c,a,o;if(8!=(e=n.gj())){if(0==(i=xkn(n)))switch(e){case 1:case 9:null!=(o=n.kj())&&(!(t=y9(uG(o,481))).c&&(t.c=new Ks),rin(t.c,n.jj())),null!=(a=n.ij())&&0==(1&(r=uG(a,481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 3:null!=(a=n.ij())&&0==(1&(r=uG(a,481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 5:if(null!=(a=n.ij()))for(c=uG(a,16).Kc();c.Ob();)0==(1&(r=uG(c.Pb(),481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),ttn(t.c,uG(n.jj(),29)));break;case 4:null!=(o=n.kj())&&0==(1&(r=uG(o,481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj()));break;case 6:if(null!=(o=n.kj()))for(c=uG(o,16).Kc();c.Ob();)0==(1&(r=uG(c.Pb(),481)).Bb)&&(!(t=y9(r)).c&&(t.c=new Ks),rin(t.c,n.jj()))}this.ql(i)}},uZn.ql=function(n){bBn(this,n)},uZn.b=63,zW(Ytt,"ESuperAdapter",1175),sDn(1176,1175,Fit,$m),uZn.ql=function(n){yLn(this,n)},zW(Ytt,"EClassImpl/10",1176),sDn(1165,710,Trt),uZn.Ei=function(n,t){return PCn(this,n,t)},uZn.Fi=function(n){return QMn(this,n)},uZn.Gi=function(n,t){edn(this,n,t)},uZn.Hi=function(n){z9(this,n)},uZn.$i=function(n){return Otn(this,n)},uZn.Xi=function(n,t){return iin(this,n,t)},uZn.Wk=function(n,t){throw hv(new Kv)},uZn.Ii=function(){return new nR(this)},uZn.Ji=function(){return new tR(this)},uZn.Ki=function(n){return han(this,n)},uZn.Xk=function(n,t){throw hv(new Kv)},uZn.Fk=function(n){return this},uZn.Qj=function(){return 0!=this.i},uZn.Wb=function(n){throw hv(new Kv)},uZn.Gk=function(){throw hv(new Kv)},zW(art,"EcoreEList/UnmodifiableEList",1165),sDn(328,1165,Trt,vL),uZn.Yi=function(){return!1},zW(art,"EcoreEList/UnmodifiableEList/FastCompare",328),sDn(1168,328,Trt,Afn),uZn.dd=function(n){var t,e;if(F$(n,179)&&-1!=(t=uG(n,179).Lj()))for(e=this.i;t4){if(!this.fk(n))return!1;if(this.al()){if(a=(t=(e=uG(n,54)).Eh())==this.b&&(this.ml()?e.yh(e.Fh(),uG(ern(e1(this.b),this.Lj()).Hk(),29).kk())==lMn(uG(ern(e1(this.b),this.Lj()),19)).n:-1-e.Fh()==this.Lj()),this.nl()&&!a&&!t&&e.Jh())for(i=0;i1||-1==e)},uZn.ml=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&!!lMn(uG(n,19))},uZn.nl=function(){var n;return!!F$(n=ern(e1(this.b),this.Lj()),102)&&0!=(uG(n,19).Bb&P0n)},uZn.dd=function(n){var t,e,i;if((e=this.zj(n))>=0)return e;if(this.ol())for(t=0,i=this.Ej();t=0;--n)yVn(this,n,this.xj(n));return this.Fj()},uZn.Qc=function(n){var t;if(this.nl())for(t=this.Ej()-1;t>=0;--t)yVn(this,t,this.xj(t));return this.Gj(n)},uZn.Gk=function(){_zn(this)},uZn.Zi=function(n,t){return Atn(this,n,t)},zW(art,"DelegatingEcoreEList",756),sDn(1171,756,Crt,aF),uZn.qj=function(n,t){zR(this,n,uG(t,29))},uZn.rj=function(n){BN(this,uG(n,29))},uZn.xj=function(n){var t;return F$(t=uG(zrn(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Cj=function(n){var t;return F$(t=uG(e_n(z5(this.a),n),89).c,90)?uG(t,29):(YYn(),x_t)},uZn.Dj=function(n,t){return YMn(this,n,uG(t,29))},uZn.Li=function(){return!1},uZn.Ij=function(n,t,e,i,r){return null},uZn.sj=function(){return new Rm(this)},uZn.tj=function(){Czn(z5(this.a))},uZn.uj=function(n){return Mdn(this,n)},uZn.vj=function(n){var t;for(t=n.Kc();t.Ob();)if(!Mdn(this,t.Pb()))return!1;return!0},uZn.wj=function(n){var t,e,i;if(F$(n,15)&&(i=uG(n,15)).gc()==z5(this.a).i){for(t=i.Kc(),e=new DD(this);t.Ob();)if(xA(t.Pb())!==xA(Zkn(e)))return!1;return!0}return!1},uZn.yj=function(){var n,t,e,i;for(t=1,n=new DD(z5(this.a));n.e!=n.i.gc();)t=31*t+((e=F$(i=uG(Zkn(n),89).c,90)?uG(i,29):(YYn(),x_t))?xx(e):0);return t},uZn.zj=function(n){var t,e,i,r;for(i=0,e=new DD(z5(this.a));e.e!=e.i.gc();){if(t=uG(Zkn(e),89),xA(n)===xA(F$(r=t.c,90)?uG(r,29):(YYn(),x_t)))return i;++i}return-1},uZn.Aj=function(){return 0==z5(this.a).i},uZn.Bj=function(){return null},uZn.Ej=function(){return z5(this.a).i},uZn.Fj=function(){var n,t,e,i,r,c;for(c=z5(this.a).i,r=Inn(dat,EZn,1,c,5,1),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)n=uG(Zkn(t),89),r[e++]=F$(i=n.c,90)?uG(i,29):(YYn(),x_t);return r},uZn.Gj=function(n){var t,e,i,r;for(r=z5(this.a).i,n.lengthr&&uQ(n,r,null),e=0,t=new DD(z5(this.a));t.e!=t.i.gc();)uQ(n,e++,F$(i=uG(Zkn(t),89).c,90)?uG(i,29):(YYn(),x_t));return n},uZn.Hj=function(){var n,t,e,i,r;for((r=new zM).a+="[",n=z5(this.a),t=0,i=z5(this.a).i;t>16)>=0?VTn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,6,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nmn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 6:return DUn(this,null,6,e);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Nyn(this.A,n,e);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),I_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),I_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return null!=this.D&&this.D==this.F;case 3:return!!_Tn(this);case 4:return!!dbn(this);case 5:return null!=this.F&&this.F!=this.D&&this.F!=this.B;case 6:return!!D0(this);case 7:return!!this.A&&0!=this.A.i;case 8:return 0==(256&this.Bb);case 9:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void d2(this,mK(t));case 2:return void pN(this,mK(t));case 5:return void TWn(this,mK(t));case 7:return!this.A&&(this.A=new PD(J_t,this,7)),Czn(this.A),!this.A&&(this.A=new PD(J_t,this,7)),void CW(this.A,uG(t,16));case 8:return void pdn(this,oM(gK(t)));case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),Czn(this.a),!this.a&&(this.a=new fV(d_t,this,9,5)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n),t)},uZn.ii=function(){return YYn(),I_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,184)&&(uG(this.Cb,184).tb=null),void qon(this,null);case 2:return sbn(this,null),void Ocn(this,this.D);case 5:return void TWn(this,null);case 7:return!this.A&&(this.A=new PD(J_t,this,7)),void Czn(this.A);case 8:return void pdn(this,!0);case 9:return!this.a&&(this.a=new fV(d_t,this,9,5)),void Czn(this.a)}sdn(this,n-iQ((YYn(),I_t)),ern(uG(Lsn(this,16),29)||I_t,n))},uZn.pi=function(){var n,t;if(this.a)for(n=0,t=this.a.i;n>16==5?uG(this.Cb,685):null}return $tn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 5:return this.Cb&&(e=(i=this.Db>>16)>=0?Qjn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 5:return DUn(this,null,5,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),O_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),O_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0!=this.d;case 3:return!!this.b;case 4:return null!=this.c;case 5:return!(this.Db>>16!=5||!uG(this.Cb,685))}return l5(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void Icn(this,uG(t,17).a);case 3:return void h$n(this,uG(t,2039));case 4:return void Uan(this,mK(t))}lpn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n),t)},uZn.ii=function(){return YYn(),O_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void Icn(this,0);case 3:return void h$n(this,null);case 4:return void Uan(this,null)}sdn(this,n-iQ((YYn(),O_t)),ern(uG(Lsn(this,16),29)||O_t,n))},uZn.Ib=function(){var n;return null==(n=this.c)?this.zb:n},uZn.b=null,uZn.c=null,uZn.d=0,zW(Ytt,"EEnumLiteralImpl",582);var nBt,tBt,eBt,iBt=Iq(Ytt,"EFactoryImpl/InternalEDateTimeFormat");sDn(498,1,{2114:1},Km),zW(Ytt,"EFactoryImpl/1ClientInternalEDateTimeFormat",498),sDn(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},ev),uZn.Ch=function(n,t,e){var i;return e=DUn(this,n,t,e),this.e&&F$(n,179)&&(i=bRn(this,this.e))!=this.c&&(e=PWn(this,i,e)),e},uZn.Lh=function(n,t,e){switch(n){case 0:return this.f;case 1:return!this.d&&(this.d=new MD(g_t,this,1)),this.d;case 2:return t?MGn(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return t?PMn(this):this.a}return $tn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return vwn(this,null,e);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Nyn(this.d,n,e);case 3:return kwn(this,null,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),L_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),L_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.f;case 1:return!!this.d&&0!=this.d.i;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return l5(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void cPn(this,uG(t,89));case 1:return!this.d&&(this.d=new MD(g_t,this,1)),Czn(this.d),!this.d&&(this.d=new MD(g_t,this,1)),void CW(this.d,uG(t,16));case 3:return void rPn(this,uG(t,89));case 4:return void MIn(this,uG(t,850));case 5:return void Urn(this,uG(t,142))}lpn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n),t)},uZn.ii=function(){return YYn(),L_t},uZn.ki=function(n){switch(n){case 0:return void cPn(this,null);case 1:return!this.d&&(this.d=new MD(g_t,this,1)),void Czn(this.d);case 3:return void rPn(this,null);case 4:return void MIn(this,null);case 5:return void Urn(this,null)}sdn(this,n-iQ((YYn(),L_t)),ern(uG(Lsn(this,16),29)||L_t,n))},uZn.Ib=function(){var n;return(n=new lx(vxn(this))).a+=" (expression: ",XXn(this,n),n.a+=")",n.a},zW(Ytt,"EGenericTypeImpl",248),sDn(2067,2062,Irt),uZn.Gi=function(n,t){YK(this,n,t)},uZn.Wk=function(n,t){return YK(this,this.gc(),n),t},uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return this.Ji()},uZn.pj=function(){return new zm(this)},uZn.Ji=function(){return this.Ki(0)},uZn.Ki=function(n){return this.pj().fd(n)},uZn.Xk=function(n,t){return Wpn(this,n,!0),t},uZn.Ti=function(n,t){var e;return e=Kjn(this,t),this.fd(n).Rb(e),e},uZn.Ui=function(n,t){Wpn(this,t,!0),this.fd(n).Rb(t)},zW(art,"AbstractSequentialInternalEList",2067),sDn(495,2067,Irt,zx),uZn.$i=function(n){return hyn(this.pj(),n)},uZn.Ii=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.pj=function(){return new kL(this.a,this.b)},uZn.Ji=function(){return null==this.b?(EP(),EP(),eBt):this.sl()},uZn.Ki=function(n){var t,e;if(null==this.b){if(n<0||n>1)throw hv(new dM(Hit+n+", size=0"));return EP(),EP(),eBt}for(e=this.sl(),t=0;t0;)if(t=this.c[--this.d],(!this.e||t.pk()!=tFt||0!=t.Lj())&&(!this.vl()||this.b.Xh(t)))if(c=this.b.Nh(t,this.ul()),this.f=(PP(),uG(t,69).xk()),this.f||t.Jk()){if(this.ul()?(i=uG(c,15),this.k=i):(i=uG(c,71),this.k=this.j=i),F$(this.k,59)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j.Ki(this.k.gc()):this.k.fd(this.k.gc()),this.p?dAn(this,this.p):hLn(this))return r=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?((n=uG(r,76)).Lk(),e=n.md(),this.i=e):(e=r,this.i=e),this.g=-3,!0}else if(null!=c)return this.k=null,this.p=null,e=c,this.i=e,this.g=-2,!0;return this.k=null,this.p=null,this.g=-1,!1}},uZn.Pb=function(){return Ksn(this)},uZn.Tb=function(){return this.a},uZn.Ub=function(){var n;if(this.g<-1||this.Sb())return--this.a,this.g=0,n=this.i,this.Sb(),n;throw hv(new Bv)},uZn.Vb=function(){return this.a-1},uZn.Qb=function(){throw hv(new Kv)},uZn.ul=function(){return!1},uZn.Wb=function(n){throw hv(new Kv)},uZn.vl=function(){return!0},uZn.a=0,uZn.d=0,uZn.f=!1,uZn.g=0,uZn.n=0,uZn.o=0,zW(art,"EContentsEList/FeatureIteratorImpl",287),sDn(711,287,Ort,WR),uZn.ul=function(){return!0},zW(art,"EContentsEList/ResolvingFeatureIteratorImpl",711),sDn(1178,711,Ort,QR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/1",1178),sDn(1179,287,Ort,JR),uZn.vl=function(){return!1},zW(Ytt,"ENamedElementImpl/1/2",1179),sDn(38,152,Bit,t8,e8,lV,btn,Ken,j9,Bcn,o4,Hcn,u4,E9,s4,qcn,h4,S9,f4,Ucn,l4,bV,wtn,kZ,Gcn,b4,P9,w4),uZn.Kj=function(){return ntn(this)},uZn.Rj=function(){var n;return(n=ntn(this))?n.ik():null},uZn.hj=function(n){return-1==this.b&&this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk())),this.c.yh(this.b,n)},uZn.jj=function(){return this.c},uZn.Sj=function(){var n;return!!(n=ntn(this))&&n.tk()},uZn.b=-1,zW(Ytt,"ENotificationImpl",38),sDn(411,291,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,480:1,54:1,99:1,158:1,411:1,291:1,119:1,120:1},Yk),uZn.Ah=function(n){return fEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,29):null;case 11:return!this.d&&(this.d=new PD(J_t,this,11)),this.d;case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),this.c;case 13:return!this.a&&(this.a=new oF(this,this)),this.a;case 14:return Aen(this)}return $tn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?fEn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,10,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nmn(this.c,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return DUn(this,null,10,e);case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Nyn(this.d,n,e);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Nyn(this.c,n,e);case 14:return Nyn(Aen(this),n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),R_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),R_t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,29));case 11:return!!this.d&&0!=this.d.i;case 12:return!!this.c&&0!=this.c.i;case 13:return!(!this.a||0==Aen(this.a.a).i||this.b&&MMn(this.b));case 14:return!!this.b&&MMn(this.b)}return l5(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),Czn(this.d),!this.d&&(this.d=new PD(J_t,this,11)),void CW(this.d,uG(t,16));case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),Czn(this.c),!this.c&&(this.c=new fV(m_t,this,12,10)),void CW(this.c,uG(t,16));case 13:return!this.a&&(this.a=new oF(this,this)),_zn(this.a),!this.a&&(this.a=new oF(this,this)),void CW(this.a,uG(t,16));case 14:return Czn(Aen(this)),void CW(Aen(this),uG(t,16))}lpn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n),t)},uZn.ii=function(){return YYn(),R_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 11:return!this.d&&(this.d=new PD(J_t,this,11)),void Czn(this.d);case 12:return!this.c&&(this.c=new fV(m_t,this,12,10)),void Czn(this.c);case 13:return void(this.a&&_zn(this.a));case 14:return void(this.b&&Czn(this.b))}sdn(this,n-iQ((YYn(),R_t)),ern(uG(Lsn(this,16),29)||R_t,n))},uZn.pi=function(){var n,t;if(this.c)for(n=0,t=this.c.i;ni&&uQ(n,i,null),e=0,t=new DD(Aen(this.a));t.e!=t.i.gc();)uQ(n,e++,uG(Zkn(t),89).c||(YYn(),N_t));return n},uZn.Hj=function(){var n,t,e,i;for((i=new zM).a+="[",n=Aen(this.a),t=0,e=Aen(this.a).i;t1);case 5:return i2(this,n,t,e,i,this.i-uG(e,15).gc()>0);default:return new Ken(this.e,n,this.c,t,e,i,!0)}},uZn.Tj=function(){return!0},uZn.Qj=function(){return MMn(this)},uZn.Gk=function(){Czn(this)},zW(Ytt,"EOperationImpl/2",1377),sDn(507,1,{2037:1,507:1},EA),zW(Ytt,"EPackageImpl/1",507),sDn(14,83,Trt,fV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectContainmentWithInverseEList",14),sDn(365,14,Trt,i_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Resolving",365),sDn(307,365,Trt,vV),uZn.Ni=function(){this.a.tb=null},zW(Ytt,"EPackageImpl/2",307),sDn(1278,1,{},Ps),zW(Ytt,"EPackageImpl/3",1278),sDn(733,45,B0n,Zk),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},zW(Ytt,"EPackageRegistryImpl",733),sDn(518,291,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,480:1,54:1,99:1,158:1,518:1,291:1,119:1,120:1},ny),uZn.Ah=function(n){return lEn(this,n)},uZn.Lh=function(n,t,e){var i;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(i=this.t)>1||-1==i;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?uG(this.Cb,62):null}return $tn(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n),t,e)},uZn.Sh=function(n,t,e){var i;switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nmn(this.Ab,n,e);case 10:return this.Cb&&(e=(i=this.Db>>16)>=0?lEn(this,e):this.Cb.Th(this,-1-i,null,e)),DUn(this,n,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().zk(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 9:return IW(this,e);case 10:return DUn(this,null,10,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),__t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),__t)),n,e)},uZn.Wh=function(n){var t;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(t=this.t)>1||-1==t;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return!(this.Db>>16!=10||!uG(this.Cb,62))}return l5(this,n-iQ((YYn(),__t)),ern(uG(Lsn(this,16),29)||__t,n))},uZn.ii=function(){return YYn(),__t},zW(Ytt,"EParameterImpl",518),sDn(102,461,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,102:1,461:1,291:1,119:1,120:1,692:1},PK),uZn.Lh=function(n,t,e){var i,r;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return qx(),0!=(256&this.Bb);case 3:return qx(),0!=(512&this.Bb);case 4:return xwn(this.s);case 5:return xwn(this.t);case 6:return qx(),(r=this.t)>1||-1==r;case 7:return qx(),this.s>=1;case 8:return t?bEn(this):this.r;case 9:return this.q;case 10:return qx(),0!=(this.Bb&w1n);case 11:return qx(),0!=(this.Bb&frt);case 12:return qx(),0!=(this.Bb&j0n);case 13:return this.j;case 14:return NRn(this);case 15:return qx(),0!=(this.Bb&hrt);case 16:return qx(),0!=(this.Bb&VZn);case 17:return K0(this);case 18:return qx(),0!=(this.Bb&Qtt);case 19:return qx(),!(!(i=lMn(this))||0==(i.Bb&Qtt));case 20:return qx(),0!=(this.Bb&P0n);case 21:return t?lMn(this):this.b;case 22:return t?Ffn(this):R9(this);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),this.a}return $tn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t,e)},uZn.Wh=function(n){var t,e;switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return 0==(256&this.Bb);case 3:return 0==(512&this.Bb);case 4:return 0!=this.s;case 5:return 1!=this.t;case 6:return(e=this.t)>1||-1==e;case 7:return this.s>=1;case 8:return!!this.r&&!this.q.e&&0==yQ(this.q).i;case 9:return!(!this.q||this.r&&!this.q.e&&0==yQ(this.q).i);case 10:return 0==(this.Bb&w1n);case 11:return 0!=(this.Bb&frt);case 12:return 0!=(this.Bb&j0n);case 13:return null!=this.j;case 14:return null!=NRn(this);case 15:return 0!=(this.Bb&hrt);case 16:return 0!=(this.Bb&VZn);case 17:return!!K0(this);case 18:return 0!=(this.Bb&Qtt);case 19:return!!(t=lMn(this))&&0!=(t.Bb&Qtt);case 20:return 0==(this.Bb&P0n);case 21:return!!this.b;case 22:return!!R9(this);case 23:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.bi=function(n,t){var e;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void g2(this,mK(t));case 2:return void ddn(this,oM(gK(t)));case 3:return void mdn(this,oM(gK(t)));case 4:return void Pcn(this,uG(t,17).a);case 5:return void Ccn(this,uG(t,17).a);case 8:return void Kbn(this,uG(t,142));case 9:return void((e=CCn(this,uG(t,89),null))&&e.oj());case 10:return void Wdn(this,oM(gK(t)));case 11:return void Ydn(this,oM(gK(t)));case 12:return void Qdn(this,oM(gK(t)));case 13:return void mA(this,mK(t));case 15:return void Jdn(this,oM(gK(t)));case 16:return void Cgn(this,oM(gK(t)));case 18:return void p2(this,oM(gK(t)));case 20:return void Ign(this,oM(gK(t)));case 21:return void bon(this,uG(t,19));case 23:return!this.a&&(this.a=new OD(u_t,this,23)),Czn(this.a),!this.a&&(this.a=new OD(u_t,this,23)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n),t)},uZn.ii=function(){return YYn(),B_t},uZn.ki=function(n){var t;switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),4),void qon(this,null);case 2:return void ddn(this,!0);case 3:return void mdn(this,!0);case 4:return void Pcn(this,0);case 5:return void Ccn(this,1);case 8:return void Kbn(this,null);case 9:return void((t=CCn(this,null,null))&&t.oj());case 10:return void Wdn(this,!0);case 11:return void Ydn(this,!1);case 12:return void Qdn(this,!1);case 13:return this.i=null,void lon(this,null);case 15:return void Jdn(this,!1);case 16:return void Cgn(this,!1);case 18:return Pgn(this,!1),void(F$(this.Cb,90)&&yLn(y9(uG(this.Cb,90)),2));case 20:return void Ign(this,!0);case 21:return void bon(this,null);case 23:return!this.a&&(this.a=new OD(u_t,this,23)),void Czn(this.a)}sdn(this,n-iQ((YYn(),B_t)),ern(uG(Lsn(this,16),29)||B_t,n))},uZn.pi=function(){Ffn(this),BJ(Nen((gAn(),kBt),this)),bEn(this),this.Bb|=1},uZn.uk=function(){return lMn(this)},uZn._k=function(){var n;return!!(n=lMn(this))&&0!=(n.Bb&Qtt)},uZn.al=function(){return 0!=(this.Bb&Qtt)},uZn.bl=function(){return 0!=(this.Bb&P0n)},uZn.Yk=function(n,t){return this.c=null,Ywn(this,n,t)},uZn.Ib=function(){var n;return 0!=(64&this.Db)?MBn(this):((n=new fx(MBn(this))).a+=" (containment: ",Lj(n,0!=(this.Bb&Qtt)),n.a+=", resolveProxies: ",Lj(n,0!=(this.Bb&P0n)),n.a+=")",n.a)},zW(Ytt,"EReferenceImpl",102),sDn(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},Cs),uZn.Fb=function(n){return this===n},uZn.ld=function(){return this.b},uZn.md=function(){return this.c},uZn.Hb=function(){return xx(this)},uZn.Di=function(n){Rq(this,mK(n))},uZn.nd=function(n){return DG(this,mK(n))},uZn.Lh=function(n,t,e){switch(n){case 0:return this.b;case 1:return this.c}return $tn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.b;case 1:return null!=this.c}return l5(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.bi=function(n,t){switch(n){case 0:return void Kq(this,mK(t));case 1:return void Jan(this,mK(t))}lpn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n),t)},uZn.ii=function(){return YYn(),H_t},uZn.ki=function(n){switch(n){case 0:return void Qan(this,null);case 1:return void Jan(this,null)}sdn(this,n-iQ((YYn(),H_t)),ern(uG(Lsn(this,16),29)||H_t,n))},uZn.Bi=function(){var n;return-1==this.a&&(n=this.b,this.a=null==n?0:pln(n)),this.a},uZn.Ci=function(n){this.a=n},uZn.Ib=function(){var n;return 0!=(64&this.Db)?vxn(this):((n=new fx(vxn(this))).a+=" (key: ",VA(n,this.b),n.a+=", value: ",VA(n,this.c),n.a+=")",n.a)},uZn.a=-1,uZn.b=null,uZn.c=null;var rBt,cBt,aBt,oBt,uBt,sBt,hBt,fBt,lBt,bBt,wBt=zW(Ytt,"EStringToStringMapEntryImpl",561),dBt=Iq(art,"FeatureMap/Entry/Internal");sDn(576,1,Art),uZn.xl=function(n){return this.yl(uG(n,54))},uZn.yl=function(n){return this.xl(n)},uZn.Fb=function(n){var t,e;return this===n||!!F$(n,76)&&(t=uG(n,76)).Lk()==this.c&&(null==(e=this.md())?null==t.md():udn(e,t.md()))},uZn.Lk=function(){return this.c},uZn.Hb=function(){var n;return n=this.md(),Hon(this.c)^(null==n?0:Hon(n))},uZn.Ib=function(){var n,t;return t=Hrn((n=this.c).qk()).yi(),n.xe(),(null!=t&&0!=t.length?t+":"+n.xe():n.xe())+"="+this.md()},zW(Ytt,"EStructuralFeatureImpl/BasicFeatureMapEntry",576),sDn(791,576,Art,sF),uZn.yl=function(n){return new sF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return Kun(this,n,this.a,t,e)},uZn.Al=function(n,t,e){return Fun(this,n,this.a,t,e)},zW(Ytt,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",791),sDn(1350,1,{},SA),uZn.yk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Yl(this.a).Fk(i)},uZn.zk=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Pl(this.a,i,r)},uZn.Ak=function(n,t,e,i,r){return uG(vtn(n,this.b),220).Ql(this.a,i,r)},uZn.Bk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a).Qj()},uZn.Ck=function(n,t,e,i){uG(vtn(n,this.b),220).Yl(this.a).Wb(i)},uZn.Dk=function(n,t,e){return uG(vtn(n,this.b),220).Yl(this.a)},uZn.Ek=function(n,t,e){uG(vtn(n,this.b),220).Yl(this.a).Gk()},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1350),sDn(91,1,{},RU,CY,GZ,r8),uZn.yk=function(n,t,e,i,r){var c;if(null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),!r)switch(this.e){case 50:case 41:return uG(c,597).bk();case 40:return uG(c,220).Vl()}return c},uZn.zk=function(n,t,e,i,r){var c;return null==(c=t.li(e))&&t.mi(e,c=xYn(this,n)),uG(c,71).Wk(i,r)},uZn.Ak=function(n,t,e,i,r){var c;return null!=(c=t.li(e))&&(r=uG(c,71).Xk(i,r)),r},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&uG(i,79).Qj()},uZn.Ck=function(n,t,e,i){var r;!(r=uG(t.li(e),79))&&t.mi(e,r=xYn(this,n)),r.Wb(i)},uZn.Dk=function(n,t,e){var i;return null==(i=t.li(e))&&t.mi(e,i=xYn(this,n)),F$(i,79)?uG(i,79):new _m(uG(t.li(e),15))},uZn.Ek=function(n,t,e){var i;!(i=uG(t.li(e),79))&&t.mi(e,i=xYn(this,n)),i.Gk()},uZn.b=0,uZn.e=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateMany",91),sDn(512,1,{}),uZn.zk=function(n,t,e,i,r){throw hv(new Kv)},uZn.Ak=function(n,t,e,i,r){throw hv(new Kv)},uZn.Dk=function(n,t,e){return new IY(this,n,t,e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle",512),sDn(1367,1,ort,IY),uZn.Fk=function(n){return this.a.yk(this.c,this.d,this.b,n,!0)},uZn.Qj=function(){return this.a.Bk(this.c,this.d,this.b)},uZn.Wb=function(n){this.a.Ck(this.c,this.d,this.b,n)},uZn.Gk=function(){this.a.Ek(this.c,this.d,this.b)},uZn.b=0,zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1367),sDn(784,512,{},_1),uZn.yk=function(n,t,e,i,r){return PHn(n,n.Ph(),n.Fh())==this.b?this.bl()&&i?J$n(n):n.Ph():null},uZn.zk=function(n,t,e,i,r){var c,a;return n.Ph()&&(r=(c=n.Fh())>=0?n.Ah(r):n.Ph().Th(n,-1-c,null,r)),a=emn(n.Dh(),this.e),n.Ch(i,a,r)},uZn.Ak=function(n,t,e,i,r){var c;return c=emn(n.Dh(),this.e),n.Ch(null,c,r)},uZn.Bk=function(n,t,e){var i;return i=emn(n.Dh(),this.e),!!n.Ph()&&n.Fh()==i},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));if(r=n.Ph(),a=emn(n.Dh(),this.e),xA(i)!==xA(r)||n.Fh()!=a&&null!=i){if(eEn(n,uG(i,58)))throw hv(new vM(net+n.Ib()));u=null,r&&(u=(c=n.Fh())>=0?n.Ah(u):n.Ph().Th(n,-1-c,null,u)),(o=uG(i,54))&&(u=o.Rh(n,emn(o.Dh(),this.b),null,u)),(u=n.Ch(o,a,u))&&u.oj()}else n.vh()&&n.wh()&&Msn(n,new lV(n,1,a,i,i))},uZn.Ek=function(n,t,e){var i,r,c;n.Ph()?(c=(i=n.Fh())>=0?n.Ah(null):n.Ph().Th(n,-1-i,null,null),r=emn(n.Dh(),this.e),(c=n.Ch(null,r,c))&&c.oj()):n.vh()&&n.wh()&&Msn(n,new bV(n,1,this.e,null,null))},uZn.bl=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",784),sDn(1351,784,{},KU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1351),sDn(574,512,{}),uZn.yk=function(n,t,e,i,r){var c;return null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c},uZn.Bk=function(n,t,e){var i;return null!=(i=t.li(e))&&(xA(i)===xA(rBt)||!udn(i,this.b))},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=null==(c=t.li(e))?this.b:xA(c)===xA(rBt)?null:c,null==i?null!=this.c?(t.mi(e,null),i=this.b):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Cl(n,1,this.e,r,i))):null==i?null!=this.c?t.mi(e,null):null!=this.b?t.mi(e,rBt):t.mi(e,null):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=null==(r=t.li(e))?this.b:xA(r)===xA(rBt)?null:r,t.ni(e),Msn(n,this.d.Cl(n,1,this.e,i,this.b))):t.ni(e)},uZn.Bl=function(n){throw hv(new $v)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",574),sDn($rt,1,{},Is),uZn.Cl=function(n,t,e,i,r){return new bV(n,t,e,i,r)},uZn.Dl=function(n,t,e,i,r,c){return new kZ(n,t,e,i,r,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",$rt),sDn(1368,$rt,{},Os),uZn.Cl=function(n,t,e,i,r){return new P9(n,t,e,oM(gK(i)),oM(gK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new w4(n,t,e,oM(gK(i)),oM(gK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1368),sDn(1369,$rt,{},As),uZn.Cl=function(n,t,e,i,r){return new Bcn(n,t,e,uG(i,222).a,uG(r,222).a)},uZn.Dl=function(n,t,e,i,r,c){return new o4(n,t,e,uG(i,222).a,uG(r,222).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1369),sDn(1370,$rt,{},Ls),uZn.Cl=function(n,t,e,i,r){return new Hcn(n,t,e,uG(i,180).a,uG(r,180).a)},uZn.Dl=function(n,t,e,i,r,c){return new u4(n,t,e,uG(i,180).a,uG(r,180).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1370),sDn(1371,$rt,{},Ns),uZn.Cl=function(n,t,e,i,r){return new E9(n,t,e,uM(pK(i)),uM(pK(r)))},uZn.Dl=function(n,t,e,i,r,c){return new s4(n,t,e,uM(pK(i)),uM(pK(r)),c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1371),sDn(1372,$rt,{},$s),uZn.Cl=function(n,t,e,i,r){return new qcn(n,t,e,uG(i,161).a,uG(r,161).a)},uZn.Dl=function(n,t,e,i,r,c){return new h4(n,t,e,uG(i,161).a,uG(r,161).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1372),sDn(1373,$rt,{},Ds),uZn.Cl=function(n,t,e,i,r){return new S9(n,t,e,uG(i,17).a,uG(r,17).a)},uZn.Dl=function(n,t,e,i,r,c){return new f4(n,t,e,uG(i,17).a,uG(r,17).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1373),sDn(1374,$rt,{},xs),uZn.Cl=function(n,t,e,i,r){return new Ucn(n,t,e,uG(i,168).a,uG(r,168).a)},uZn.Dl=function(n,t,e,i,r,c){return new l4(n,t,e,uG(i,168).a,uG(r,168).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1374),sDn(1375,$rt,{},Rs),uZn.Cl=function(n,t,e,i,r){return new Gcn(n,t,e,uG(i,191).a,uG(r,191).a)},uZn.Dl=function(n,t,e,i,r,c){return new b4(n,t,e,uG(i,191).a,uG(r,191).a,c)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1375),sDn(1353,574,{},OY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1353),sDn(1354,574,{},lz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1354),sDn(785,574,{}),uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c;n.vh()&&n.wh()?(r=!0,null==(c=t.li(e))?(r=!1,c=this.b):xA(c)===xA(rBt)&&(c=null),null==i?null!=this.c?(t.mi(e,null),i=this.b):t.mi(e,rBt):(this.Bl(i),t.mi(e,i)),Msn(n,this.d.Dl(n,1,this.e,c,i,!r))):null==i?null!=this.c?t.mi(e,null):t.mi(e,rBt):(this.Bl(i),t.mi(e,i))},uZn.Ek=function(n,t,e){var i,r;n.vh()&&n.wh()?(i=!0,null==(r=t.li(e))?(i=!1,r=this.b):xA(r)===xA(rBt)&&(r=null),t.ni(e),Msn(n,this.d.Dl(n,2,this.e,r,this.b,i))):t.ni(e)},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",785),sDn(1355,785,{},AY),uZn.Bl=function(n){if(!this.a.fk(n))throw hv(new mM(Lrt+Tbn(n)+Nrt+this.a+"'"))},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1355),sDn(1356,785,{},bz),uZn.Bl=function(n){},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1356),sDn(410,512,{},OX),uZn.yk=function(n,t,e,i,r){var c,a,o,u,s;if(s=t.li(e),this.tk()&&xA(s)===xA(rBt))return null;if(this.bl()&&i&&null!=s){if((o=uG(s,54)).Vh()&&o!=(u=mwn(n,o))){if(!LGn(this.a,u))throw hv(new mM(Lrt+Tbn(u)+Nrt+this.a+"'"));t.mi(e,s=u),this.al()&&(c=uG(u,54),a=o.Th(n,this.b?emn(o.Dh(),this.b):-1-emn(n.Dh(),this.e),null,null),!c.Ph()&&(a=c.Rh(n,this.b?emn(c.Dh(),this.b):-1-emn(n.Dh(),this.e),null,a)),a&&a.oj()),n.vh()&&n.wh()&&Msn(n,new bV(n,9,this.e,o,u))}return s}return s},uZn.zk=function(n,t,e,i,r){var c,a;return xA(a=t.li(e))===xA(rBt)&&(a=null),t.mi(e,i),this.Mj()?xA(a)!==xA(i)&&null!=a&&(r=(c=uG(a,54)).Th(n,emn(c.Dh(),this.b),null,r)):this.al()&&null!=a&&(r=uG(a,54).Th(n,-1-emn(n.Dh(),this.e),null,r)),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),r.nj(new bV(n,1,this.e,a,i))),r},uZn.Ak=function(n,t,e,i,r){var c;return xA(c=t.li(e))===xA(rBt)&&(c=null),t.ni(e),n.vh()&&n.wh()&&(!r&&(r=new cj(4)),this.tk()?r.nj(new bV(n,2,this.e,c,null)):r.nj(new bV(n,1,this.e,c,null))),r},uZn.Bk=function(n,t,e){return null!=t.li(e)},uZn.Ck=function(n,t,e,i){var r,c,a,o,u;if(null!=i&&!LGn(this.a,i))throw hv(new mM(Lrt+(F$(i,58)?nPn(uG(i,58).Dh()):crn(Tbn(i)))+Nrt+this.a+"'"));o=null!=(u=t.li(e)),this.tk()&&xA(u)===xA(rBt)&&(u=null),a=null,this.Mj()?xA(u)!==xA(i)&&(null!=u&&(a=(r=uG(u,54)).Th(n,emn(r.Dh(),this.b),null,a)),null!=i&&(a=(r=uG(i,54)).Rh(n,emn(r.Dh(),this.b),null,a))):this.al()&&xA(u)!==xA(i)&&(null!=u&&(a=uG(u,54).Th(n,-1-emn(n.Dh(),this.e),null,a)),null!=i&&(a=uG(i,54).Rh(n,-1-emn(n.Dh(),this.e),null,a))),null==i&&this.tk()?t.mi(e,rBt):t.mi(e,i),n.vh()&&n.wh()?(c=new kZ(n,1,this.e,u,i,this.tk()&&!o),a?(a.nj(c),a.oj()):Msn(n,c)):a&&a.oj()},uZn.Ek=function(n,t,e){var i,r,c,a,o;a=null!=(o=t.li(e)),this.tk()&&xA(o)===xA(rBt)&&(o=null),c=null,null!=o&&(this.Mj()?c=(i=uG(o,54)).Th(n,emn(i.Dh(),this.b),null,c):this.al()&&(c=uG(o,54).Th(n,-1-emn(n.Dh(),this.e),null,c))),t.ni(e),n.vh()&&n.wh()?(r=new kZ(n,this.tk()?2:1,this.e,o,null,a),c?(c.nj(r),c.oj()):Msn(n,r)):c&&c.oj()},uZn.Mj=function(){return!1},uZn.al=function(){return!1},uZn.bl=function(){return!1},uZn.tk=function(){return!1},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",410),sDn(575,410,{},tK),uZn.al=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",575),sDn(1359,575,{},eK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1359),sDn(787,575,{},iK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",787),sDn(1361,787,{},cK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1361),sDn(650,575,{},FU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",650),sDn(1360,650,{},HU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1360),sDn(788,650,{},UU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",788),sDn(1362,788,{},GU),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1362),sDn(651,410,{},rK),uZn.bl=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",651),sDn(1363,651,{},aK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1363),sDn(789,651,{},_U),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",789),sDn(1364,789,{},qU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1364),sDn(1357,410,{},oK),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1357),sDn(786,410,{},BU),uZn.Mj=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",786),sDn(1358,786,{},XU),uZn.tk=function(){return!0},zW(Ytt,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1358),sDn(790,576,Art,EQ),uZn.yl=function(n){return new EQ(this.a,this.c,n)},uZn.md=function(){return this.b},uZn.zl=function(n,t,e){return Snn(this,n,this.b,e)},uZn.Al=function(n,t,e){return Pnn(this,n,this.b,e)},zW(Ytt,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",790),sDn(1365,1,ort,_m),uZn.Fk=function(n){return this.a},uZn.Qj=function(){return F$(this.a,97)?uG(this.a,97).Qj():!this.a.dc()},uZn.Wb=function(n){this.a.$b(),this.a.Gc(uG(n,15))},uZn.Gk=function(){F$(this.a,97)?uG(this.a,97).Gk():this.a.$b()},zW(Ytt,"EStructuralFeatureImpl/SettingMany",1365),sDn(1366,576,Art,o8),uZn.xl=function(n){return new hF((uVn(),oHt),this.b.ri(this.a,n))},uZn.md=function(){return null},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1366),sDn(652,576,Art,hF),uZn.xl=function(n){return new hF(this.c,n)},uZn.md=function(){return this.a},uZn.zl=function(n,t,e){return e},uZn.Al=function(n,t,e){return e},zW(Ytt,"EStructuralFeatureImpl/SimpleFeatureMapEntry",652),sDn(403,505,Qet,Ks),uZn.aj=function(n){return Inn(h_t,EZn,29,n,0,1)},uZn.Yi=function(){return!1},zW(Ytt,"ESuperAdapter/1",403),sDn(456,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,456:1,119:1,120:1},Fs),uZn.Lh=function(n,t,e){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new AX(this,g_t,this)),this.a}return $tn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Nyn(this.Ab,n,e);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Nyn(this.a,n,e)}return uG(ern(uG(Lsn(this,16),29)||(YYn(),q_t),t),69).wk().Ak(this,$vn(this),t-iQ((YYn(),q_t)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.Ab&&0!=this.Ab.i;case 1:return null!=this.zb;case 2:return!!this.a&&0!=this.a.i}return l5(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},uZn.bi=function(n,t){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),Czn(this.Ab),!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void CW(this.Ab,uG(t,16));case 1:return void qon(this,mK(t));case 2:return!this.a&&(this.a=new AX(this,g_t,this)),Czn(this.a),!this.a&&(this.a=new AX(this,g_t,this)),void CW(this.a,uG(t,16))}lpn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n),t)},uZn.ii=function(){return YYn(),q_t},uZn.ki=function(n){switch(n){case 0:return!this.Ab&&(this.Ab=new fV(c_t,this,0,3)),void Czn(this.Ab);case 1:return void qon(this,null);case 2:return!this.a&&(this.a=new AX(this,g_t,this)),void Czn(this.a)}sdn(this,n-iQ((YYn(),q_t)),ern(uG(Lsn(this,16),29)||q_t,n))},zW(Ytt,"ETypeParameterImpl",456),sDn(457,83,Trt,AX),uZn.Nj=function(n,t){return mCn(this,uG(n,89),t)},uZn.Oj=function(n,t){return vCn(this,uG(n,89),t)},zW(Ytt,"ETypeParameterImpl/1",457),sDn(647,45,B0n,ty),uZn.ec=function(){return new Um(this)},zW(Ytt,"ETypeParameterImpl/2",647),sDn(570,KZn,FZn,Um),uZn.Fc=function(n){return WF(this,uG(n,89))},uZn.Gc=function(n){var t,e,i;for(i=!1,e=n.Kc();e.Ob();)t=uG(e.Pb(),89),null==vJ(this.a,t,"")&&(i=!0);return i},uZn.$b=function(){$V(this.a)},uZn.Hc=function(n){return PV(this.a,n)},uZn.Kc=function(){return new Gm(new bsn(new Nw(this.a).a))},uZn.Mc=function(n){return C7(this,n)},uZn.gc=function(){return oS(this.a)},zW(Ytt,"ETypeParameterImpl/2/1",570),sDn(571,1,$Zn,Gm),uZn.Nb=function(n){SV(this,n)},uZn.Pb=function(){return uG(von(this.a).ld(),89)},uZn.Ob=function(){return this.a.b},uZn.Qb=function(){Oen(this.a)},zW(Ytt,"ETypeParameterImpl/2/1/1",571),sDn(1329,45,B0n,ey),uZn._b=function(n){return RA(n)?AZ(this,n):!!FX(this.f,n)},uZn.xc=function(n){var t;return F$(t=RA(n)?U1(this,n):DA(FX(this.f,n)),851)?(t=uG(t,851).Kk(),vJ(this,uG(n,241),t),t):null!=t?t:null==n?(SP(),EBt):null},zW(Ytt,"EValidatorRegistryImpl",1329),sDn(1349,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},_s),uZn.ri=function(n,t){switch(n.hk()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return null==t?null:cpn(t);case 25:return Xrn(t);case 27:return nen(t);case 28:return ten(t);case 29:return null==t?null:N$(QKt[0],uG(t,206));case 41:return null==t?"":Ij(uG(t,296));case 42:return cpn(t);case 50:return mK(t);default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new Wk;case 1:return new vs;case 2:return new Kl;case 4:return new Gv;case 5:return new Jk;case 6:return new Uv;case 7:return new Fl;case 10:return new ps;case 11:return new Yk;case 12:return new aZ;case 13:return new ny;case 14:return new PK;case 17:return new Cs;case 18:return new ev;case 19:return new Fs;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){switch(n.hk()){case 20:return null==t?null:new Wj(t);case 21:return null==t?null:new PN(t);case 23:case 22:return null==t?null:Ovn(t);case 26:case 24:return null==t?null:Ben(vUn(t,-128,127)<<24>>24);case 25:return cxn(t);case 27:return sjn(t);case 28:return hjn(t);case 29:return rIn(t);case 32:case 31:return null==t?null:YIn(t);case 38:case 37:return null==t?null:new tk(t);case 40:case 39:return null==t?null:xwn(vUn(t,j1n,vZn));case 41:case 42:return null;case 44:case 43:return null==t?null:Hvn(tJn(t));case 49:case 48:return null==t?null:Rwn(vUn(t,xrt,32767)<<16>>16);case 50:return t;default:throw hv(new vM(tet+n.xe()+eet))}},zW(Ytt,"EcoreFactoryImpl",1349),sDn(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},dJ),uZn.gb=!1,uZn.hb=!1;var gBt,pBt=!1;zW(Ytt,"EcorePackageImpl",560),sDn(1234,1,{851:1},Bs),uZn.Kk=function(){return HD(),SBt},zW(Ytt,"EcorePackageImpl/1",1234),sDn(1243,1,Wrt,Hs),uZn.fk=function(n){return F$(n,155)},uZn.gk=function(n){return Inn(uFt,EZn,155,n,0,1)},zW(Ytt,"EcorePackageImpl/10",1243),sDn(1244,1,Wrt,Us),uZn.fk=function(n){return F$(n,197)},uZn.gk=function(n){return Inn(hFt,EZn,197,n,0,1)},zW(Ytt,"EcorePackageImpl/11",1244),sDn(1245,1,Wrt,Gs),uZn.fk=function(n){return F$(n,58)},uZn.gk=function(n){return Inn(nFt,EZn,58,n,0,1)},zW(Ytt,"EcorePackageImpl/12",1245),sDn(1246,1,Wrt,qs),uZn.fk=function(n){return F$(n,411)},uZn.gk=function(n){return Inn(p_t,yrt,62,n,0,1)},zW(Ytt,"EcorePackageImpl/13",1246),sDn(1247,1,Wrt,Xs),uZn.fk=function(n){return F$(n,241)},uZn.gk=function(n){return Inn(fFt,EZn,241,n,0,1)},zW(Ytt,"EcorePackageImpl/14",1247),sDn(1248,1,Wrt,zs),uZn.fk=function(n){return F$(n,518)},uZn.gk=function(n){return Inn(m_t,EZn,2116,n,0,1)},zW(Ytt,"EcorePackageImpl/15",1248),sDn(1249,1,Wrt,Vs),uZn.fk=function(n){return F$(n,102)},uZn.gk=function(n){return Inn(v_t,krt,19,n,0,1)},zW(Ytt,"EcorePackageImpl/16",1249),sDn(1250,1,Wrt,Ws),uZn.fk=function(n){return F$(n,179)},uZn.gk=function(n){return Inn(o_t,krt,179,n,0,1)},zW(Ytt,"EcorePackageImpl/17",1250),sDn(1251,1,Wrt,Qs),uZn.fk=function(n){return F$(n,480)},uZn.gk=function(n){return Inn(a_t,EZn,480,n,0,1)},zW(Ytt,"EcorePackageImpl/18",1251),sDn(1252,1,Wrt,Js),uZn.fk=function(n){return F$(n,561)},uZn.gk=function(n){return Inn(wBt,Xit,561,n,0,1)},zW(Ytt,"EcorePackageImpl/19",1252),sDn(1235,1,Wrt,Ys),uZn.fk=function(n){return F$(n,331)},uZn.gk=function(n){return Inn(u_t,krt,35,n,0,1)},zW(Ytt,"EcorePackageImpl/2",1235),sDn(1253,1,Wrt,Zs),uZn.fk=function(n){return F$(n,248)},uZn.gk=function(n){return Inn(g_t,Prt,89,n,0,1)},zW(Ytt,"EcorePackageImpl/20",1253),sDn(1254,1,Wrt,nh),uZn.fk=function(n){return F$(n,456)},uZn.gk=function(n){return Inn(J_t,EZn,850,n,0,1)},zW(Ytt,"EcorePackageImpl/21",1254),sDn(1255,1,Wrt,th),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,484,n,8,1)},zW(Ytt,"EcorePackageImpl/22",1255),sDn(1256,1,Wrt,eh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(Ytt,"EcorePackageImpl/23",1256),sDn(1257,1,Wrt,ih),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(Ytt,"EcorePackageImpl/24",1257),sDn(1258,1,Wrt,rh),uZn.fk=function(n){return F$(n,180)},uZn.gk=function(n){return Inn(hot,zZn,180,n,0,1)},zW(Ytt,"EcorePackageImpl/25",1258),sDn(1259,1,Wrt,ch),uZn.fk=function(n){return F$(n,206)},uZn.gk=function(n){return Inn(iot,zZn,206,n,0,1)},zW(Ytt,"EcorePackageImpl/26",1259),sDn(1260,1,Wrt,ah),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(aUt,EZn,2215,n,0,1)},zW(Ytt,"EcorePackageImpl/27",1260),sDn(1261,1,Wrt,oh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(Ytt,"EcorePackageImpl/28",1261),sDn(1262,1,Wrt,uh),uZn.fk=function(n){return F$(n,61)},uZn.gk=function(n){return Inn(CFt,H3n,61,n,0,1)},zW(Ytt,"EcorePackageImpl/29",1262),sDn(1236,1,Wrt,sh),uZn.fk=function(n){return F$(n,519)},uZn.gk=function(n){return Inn(c_t,{3:1,4:1,5:1,2033:1},598,n,0,1)},zW(Ytt,"EcorePackageImpl/3",1236),sDn(1263,1,Wrt,hh),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(BFt,EZn,2039,n,0,1)},zW(Ytt,"EcorePackageImpl/30",1263),sDn(1264,1,Wrt,fh),uZn.fk=function(n){return F$(n,160)},uZn.gk=function(n){return Inn(IBt,H3n,160,n,0,1)},zW(Ytt,"EcorePackageImpl/31",1264),sDn(1265,1,Wrt,lh),uZn.fk=function(n){return F$(n,76)},uZn.gk=function(n){return Inn(Z_t,Qrt,76,n,0,1)},zW(Ytt,"EcorePackageImpl/32",1265),sDn(1266,1,Wrt,bh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(Ytt,"EcorePackageImpl/33",1266),sDn(1267,1,Wrt,wh),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(Ytt,"EcorePackageImpl/34",1267),sDn(1268,1,Wrt,dh),uZn.fk=function(n){return F$(n,296)},uZn.gk=function(n){return Inn(gat,EZn,296,n,0,1)},zW(Ytt,"EcorePackageImpl/35",1268),sDn(1269,1,Wrt,gh),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(Ytt,"EcorePackageImpl/36",1269),sDn(1270,1,Wrt,ph),uZn.fk=function(n){return F$(n,85)},uZn.gk=function(n){return Inn(mat,EZn,85,n,0,1)},zW(Ytt,"EcorePackageImpl/37",1270),sDn(1271,1,Wrt,mh),uZn.fk=function(n){return F$(n,599)},uZn.gk=function(n){return Inn(jBt,EZn,599,n,0,1)},zW(Ytt,"EcorePackageImpl/38",1271),sDn(1272,1,Wrt,vh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(oUt,EZn,2216,n,0,1)},zW(Ytt,"EcorePackageImpl/39",1272),sDn(1237,1,Wrt,kh),uZn.fk=function(n){return F$(n,90)},uZn.gk=function(n){return Inn(h_t,EZn,29,n,0,1)},zW(Ytt,"EcorePackageImpl/4",1237),sDn(1273,1,Wrt,yh),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(Ytt,"EcorePackageImpl/40",1273),sDn(1274,1,Wrt,Mh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(Ytt,"EcorePackageImpl/41",1274),sDn(1275,1,Wrt,Th),uZn.fk=function(n){return F$(n,596)},uZn.gk=function(n){return Inn(OFt,EZn,596,n,0,1)},zW(Ytt,"EcorePackageImpl/42",1275),sDn(1276,1,Wrt,jh),uZn.fk=function(n){return!1},uZn.gk=function(n){return Inn(uUt,zZn,2217,n,0,1)},zW(Ytt,"EcorePackageImpl/43",1276),sDn(1277,1,Wrt,Eh),uZn.fk=function(n){return F$(n,44)},uZn.gk=function(n){return Inn(Sat,c1n,44,n,0,1)},zW(Ytt,"EcorePackageImpl/44",1277),sDn(1238,1,Wrt,Sh),uZn.fk=function(n){return F$(n,142)},uZn.gk=function(n){return Inn(s_t,EZn,142,n,0,1)},zW(Ytt,"EcorePackageImpl/5",1238),sDn(1239,1,Wrt,Ph),uZn.fk=function(n){return F$(n,156)},uZn.gk=function(n){return Inn(f_t,EZn,156,n,0,1)},zW(Ytt,"EcorePackageImpl/6",1239),sDn(1240,1,Wrt,Ch),uZn.fk=function(n){return F$(n,468)},uZn.gk=function(n){return Inn(w_t,EZn,685,n,0,1)},zW(Ytt,"EcorePackageImpl/7",1240),sDn(1241,1,Wrt,Ih),uZn.fk=function(n){return F$(n,582)},uZn.gk=function(n){return Inn(d_t,EZn,694,n,0,1)},zW(Ytt,"EcorePackageImpl/8",1241),sDn(1242,1,Wrt,Oh),uZn.fk=function(n){return F$(n,479)},uZn.gk=function(n){return Inn(sFt,EZn,479,n,0,1)},zW(Ytt,"EcorePackageImpl/9",1242),sDn(1038,2080,Git,Qy),uZn.Mi=function(n,t){wdn(this,uG(t,424))},uZn.Qi=function(n,t){GAn(this,n,uG(t,424))},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1038),sDn(1039,152,Bit,SQ),uZn.jj=function(){return this.a.a},zW(Ytt,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1039),sDn(1067,1066,{},e$),zW("org.eclipse.emf.ecore.plugin","EcorePlugin",1067);var mBt,vBt,kBt,yBt,MBt,TBt,jBt=Iq(Jrt,"Resource");sDn(799,1524,Yrt),uZn.Hl=function(n){},uZn.Il=function(n){},uZn.El=function(){return!this.a&&(this.a=new qm(this)),this.a},uZn.Fl=function(n){var t,e,i,r,c;if((i=n.length)>0){if(s3(0,n.length),47==n.charCodeAt(0)){for(c=new R7(4),r=1,t=1;t0&&(Knn(0,e,n.length),n=n.substr(0,e))}return lNn(this,n)},uZn.Gl=function(){return this.c},uZn.Ib=function(){return Ij(this.Rm)+"@"+(Hon(this)>>>0).toString(16)+" uri='"+this.d+"'"},uZn.b=!1,zW(Zrt,"ResourceImpl",799),sDn(1525,799,Yrt,Xm),zW(Zrt,"BinaryResourceImpl",1525),sDn(1190,708,Jet),uZn.bj=function(n){return F$(n,58)?JZ(this,uG(n,58)):F$(n,599)?new DD(uG(n,599).El()):xA(n)===xA(this.f)?uG(n,16).Kc():(EK(),KFt.a)},uZn.Ob=function(){return u$n(this)},uZn.a=!1,zW(art,"EcoreUtil/ContentTreeIterator",1190),sDn(1526,1190,Jet,dV),uZn.bj=function(n){return xA(n)===xA(this.f)?uG(n,15).Kc():new L6(uG(n,58))},zW(Zrt,"ResourceImpl/5",1526),sDn(658,2092,Mrt,qm),uZn.Hc=function(n){return this.i<=4?sSn(this,n):F$(n,54)&&uG(n,54).Jh()==this.a},uZn.Mi=function(n,t){n==this.i-1&&(this.a.b||(this.a.b=!0))},uZn.Oi=function(n,t){0==n?this.a.b||(this.a.b=!0):Ann(this,n,t)},uZn.Qi=function(n,t){},uZn.Ri=function(n,t,e){},uZn.Lj=function(){return 2},uZn.jj=function(){return this.a},uZn.Mj=function(){return!0},uZn.Nj=function(n,t){return t=uG(n,54).fi(this.a,t)},uZn.Oj=function(n,t){return uG(n,54).fi(null,t)},uZn.Pj=function(){return!1},uZn.Si=function(){return!0},uZn.aj=function(n){return Inn(nFt,EZn,58,n,0,1)},uZn.Yi=function(){return!1},zW(Zrt,"ResourceImpl/ContentsEList",658),sDn(970,2062,m1n,zm),uZn.fd=function(n){return this.a.Ki(n)},uZn.gc=function(){return this.a.gc()},zW(art,"AbstractSequentialInternalEList/1",970),sDn(634,1,{},HG),zW(art,"BasicExtendedMetaData",634),sDn(1181,1,{},CA),uZn.Jl=function(){return null},uZn.Kl=function(){return-2==this.a&&fw(this,qCn(this.d,this.b)),this.a},uZn.Ll=function(){return null},uZn.Ml=function(){return hZ(),hZ(),zot},uZn.xe=function(){return this.c==wct&&lw(this,ckn(this.d,this.b)),this.c},uZn.Nl=function(){return 0},uZn.a=-2,uZn.c=wct,zW(art,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1181),sDn(1182,1,{},g4),uZn.Jl=function(){return this.a==(N7(),MBt)&&dw(this,TBn(this.f,this.b)),this.a},uZn.Kl=function(){return 0},uZn.Ll=function(){return this.c==(N7(),MBt)&&bw(this,jBn(this.f,this.b)),this.c},uZn.Ml=function(){return!this.d&&pw(this,iqn(this.f,this.b)),this.d},uZn.xe=function(){return this.e==wct&&vw(this,ckn(this.f,this.b)),this.e},uZn.Nl=function(){return-2==this.g&&yw(this,DPn(this.f,this.b)),this.g},uZn.e=wct,uZn.g=-2,zW(art,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1182),sDn(1180,1,{},IA),uZn.b=!1,uZn.c=!1,zW(art,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1180),sDn(1183,1,{},p4),uZn.c=-2,uZn.e=wct,uZn.f=wct,zW(art,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1183),sDn(593,632,Trt,_G),uZn.Lj=function(){return this.c},uZn.ol=function(){return!1},uZn.Wi=function(n,t){return t},uZn.c=0,zW(art,"EDataTypeEList",593);var EBt,SBt,PBt,CBt,IBt=Iq(art,"FeatureMap");sDn(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},wsn),uZn.bd=function(n,t){iKn(this,n,uG(t,76))},uZn.Fc=function(n){return Qxn(this,uG(n,76))},uZn.Hi=function(n){OW(this,uG(n,76))},uZn.Nj=function(n,t){return q_(this,uG(n,76),t)},uZn.Oj=function(n,t){return X_(this,uG(n,76),t)},uZn.Ti=function(n,t){return bUn(this,n,t)},uZn.Wi=function(n,t){return IVn(this,n,uG(t,76))},uZn.hd=function(n,t){return kFn(this,n,uG(t,76))},uZn.Uj=function(n,t){return z_(this,uG(n,76),t)},uZn.Vj=function(n,t){return V_(this,uG(n,76),t)},uZn.Wj=function(n,t,e){return aPn(this,uG(n,76),uG(t,76),e)},uZn.Zi=function(n,t){return WPn(this,n,uG(t,76))},uZn.Ol=function(n,t){return GHn(this,n,t)},uZn.cd=function(n,t){var e,i,r,c,a,o,u,s,h;for(s=new Drn(t.gc()),r=t.Kc();r.Ob();)if(c=(i=uG(r.Pb(),76)).Lk(),EFn(this.e,c))(!c.Si()||!H5(this,c,i.md())&&!sSn(s,i))&&ttn(s,i);else{for(h=VKn(this.e.Dh(),c),e=uG(this.g,124),a=!0,o=0;o=0;)if(t=n[this.c],this.k.am(t.Lk()))return this.j=this.f?t:t.md(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},zW(art,"BasicFeatureMap/FeatureEIterator",420),sDn(676,420,UZn,yL),uZn.ul=function(){return!0},zW(art,"BasicFeatureMap/ResolvingFeatureEIterator",676),sDn(968,495,Irt,G$),uZn.pj=function(){return this},zW(art,"EContentsEList/1",968),sDn(969,495,Irt,kL),uZn.ul=function(){return!1},zW(art,"EContentsEList/2",969),sDn(967,287,Ort,q$),uZn.wl=function(n){},uZn.Ob=function(){return!1},uZn.Sb=function(){return!1},zW(art,"EContentsEList/FeatureIteratorImpl/1",967),sDn(840,593,Trt,jD),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EDataTypeEList/Unsettable",840),sDn(1958,593,Trt,ED),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList",1958),sDn(1959,840,Trt,SD),uZn.Si=function(){return!0},zW(art,"EDataTypeUniqueEList/Unsettable",1959),sDn(147,83,Trt,PD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Resolving",147),sDn(1184,555,Trt,CD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentEList/Unsettable/Resolving",1184),sDn(766,14,Trt,r_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectContainmentWithInverseEList/Unsettable",766),sDn(1222,766,Trt,c_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1222),sDn(757,504,Trt,ID),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectEList/Unsettable",757),sDn(338,504,Trt,OD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList",338),sDn(1844,757,Trt,AD),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectResolvingEList/Unsettable",1844),sDn(1527,1,{},Ah),zW(art,"EObjectValidator",1527),sDn(559,504,Trt,wV),uZn.il=function(){return this.d},uZn.jl=function(){return this.b},uZn.Mj=function(){return!0},uZn.ml=function(){return!0},uZn.b=0,zW(art,"EObjectWithInverseEList",559),sDn(1225,559,Trt,a_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/ManyInverse",1225),sDn(635,559,Trt,o_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EObjectWithInverseEList/Unsettable",635),sDn(1224,635,Trt,s_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseEList/Unsettable/ManyInverse",1224),sDn(767,559,Trt,u_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList",767),sDn(32,767,Trt,f_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/ManyInverse",32),sDn(768,635,Trt,h_),uZn.nl=function(){return!0},uZn.Wi=function(n,t){return R$n(this,n,uG(t,58))},zW(art,"EObjectWithInverseResolvingEList/Unsettable",768),sDn(1223,768,Trt,l_),uZn.ll=function(){return!0},zW(art,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1223),sDn(1185,632,Trt),uZn.Li=function(){return 0==(1792&this.b)},uZn.Ni=function(){this.b|=1},uZn.kl=function(){return 0!=(4&this.b)},uZn.Mj=function(){return 0!=(40&this.b)},uZn.ll=function(){return 0!=(16&this.b)},uZn.ml=function(){return 0!=(8&this.b)},uZn.nl=function(){return 0!=(this.b&frt)},uZn.al=function(){return 0!=(32&this.b)},uZn.ol=function(){return 0!=(this.b&w1n)},uZn.fk=function(n){return this.d?v5(this.d,n):this.Lk().Hk().fk(n)},uZn.Qj=function(){return 0!=(2&this.b)?0!=(1&this.b):0!=this.i},uZn.Si=function(){return 0!=(128&this.b)},uZn.Gk=function(){var n;Czn(this),0!=(2&this.b)&&(uN(this.e)?(n=0!=(1&this.b),this.b&=-2,Yv(this,new j9(this.e,2,emn(this.e.Dh(),this.Lk()),n,!1))):this.b&=-2)},uZn.Yi=function(){return 0==(1536&this.b)},uZn.b=0,zW(art,"EcoreEList/Generic",1185),sDn(1186,1185,Trt,yZ),uZn.Lk=function(){return this.a},zW(art,"EcoreEList/Dynamic",1186),sDn(765,66,Qet,Vm),uZn.aj=function(n){return Acn(this.a.a,n)},zW(art,"EcoreEMap/1",765),sDn(764,83,Trt,kV),uZn.Mi=function(n,t){bMn(this.b,uG(t,136))},uZn.Oi=function(n,t){Osn(this.b)},uZn.Pi=function(n,t,e){var i;++(i=this.b,uG(t,136),i).e},uZn.Qi=function(n,t){Vdn(this.b,uG(t,136))},uZn.Ri=function(n,t,e){Vdn(this.b,uG(e,136)),xA(e)===xA(t)&&uG(e,136).Ci(WN(uG(t,136).ld())),bMn(this.b,uG(t,136))},zW(art,"EcoreEMap/DelegateEObjectContainmentEList",764),sDn(1220,141,urt,xan),zW(art,"EcoreEMap/Unsettable",1220),sDn(1221,764,Trt,b_),uZn.Ni=function(){this.a=!0},uZn.Qj=function(){return this.a},uZn.Gk=function(){var n;Czn(this),uN(this.e)?(n=this.a,this.a=!1,Msn(this.e,new j9(this.e,2,this.c,n,!1))):this.a=!1},uZn.a=!1,zW(art,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1221),sDn(1189,215,B0n,DW),uZn.a=!1,uZn.b=!1,zW(art,"EcoreUtil/Copier",1189),sDn(759,1,$Zn,L6),uZn.Nb=function(n){SV(this,n)},uZn.Ob=function(){return Ymn(this)},uZn.Pb=function(){var n;return Ymn(this),n=this.b,this.b=null,n},uZn.Qb=function(){this.a.Qb()},zW(art,"EcoreUtil/ProperContentIterator",759),sDn(1528,1527,{},_l),zW(art,"EcoreValidator",1528),Iq(art,"FeatureMapUtil/Validator"),sDn(1295,1,{2041:1},Lh),uZn.am=function(n){return!0},zW(art,"FeatureMapUtil/1",1295),sDn(773,1,{2041:1},MQn),uZn.am=function(n){var t;return this.c==n||(null==(t=gK(cQ(this.a,n)))?DBn(this,n)?(W9(this.a,n,(qx(),eot)),!0):(W9(this.a,n,(qx(),tot)),!1):t==(qx(),eot))},uZn.e=!1,zW(art,"FeatureMapUtil/BasicValidator",773),sDn(774,45,B0n,U$),zW(art,"FeatureMapUtil/BasicValidator/Cache",774),sDn(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},OA),uZn.bd=function(n,t){LFn(this.c,this.b,n,t)},uZn.Fc=function(n){return GHn(this.c,this.b,n)},uZn.cd=function(n,t){return _Xn(this.c,this.b,n,t)},uZn.Gc=function(n){return K$(this,n)},uZn.Gi=function(n,t){hrn(this.c,this.b,n,t)},uZn.Wk=function(n,t){return OBn(this.c,this.b,n,t)},uZn.$i=function(n){return gXn(this.c,this.b,n,!1)},uZn.Ii=function(){return wN(this.c,this.b)},uZn.Ji=function(){return dN(this.c,this.b)},uZn.Ki=function(n){return Onn(this.c,this.b,n)},uZn.Xk=function(n,t){return rF(this,n,t)},uZn.$b=function(){Zv(this)},uZn.Hc=function(n){return H5(this.c,this.b,n)},uZn.Ic=function(n){return Run(this.c,this.b,n)},uZn.Xb=function(n){return gXn(this.c,this.b,n,!0)},uZn.Fk=function(n){return this},uZn.dd=function(n){return U5(this.c,this.b,n)},uZn.dc=function(){return $A(this)},uZn.Qj=function(){return!kmn(this.c,this.b)},uZn.Kc=function(){return kin(this.c,this.b)},uZn.ed=function(){return yin(this.c,this.b)},uZn.fd=function(n){return lgn(this.c,this.b,n)},uZn.Ti=function(n,t){return EGn(this.c,this.b,n,t)},uZn.Ui=function(n,t){xnn(this.c,this.b,n,t)},uZn.gd=function(n){return VOn(this.c,this.b,n)},uZn.Mc=function(n){return DHn(this.c,this.b,n)},uZn.hd=function(n,t){return hqn(this.c,this.b,n,t)},uZn.Wb=function(n){C$n(this.c,this.b),K$(this,uG(n,15))},uZn.gc=function(){return fgn(this.c,this.b)},uZn.Pc=function(){return v4(this.c,this.b)},uZn.Qc=function(n){return G5(this.c,this.b,n)},uZn.Ib=function(){var n,t;for((t=new zM).a+="[",n=wN(this.c,this.b);Zln(n);)VA(t,ox(_yn(n))),Zln(n)&&(t.a+=TZn);return t.a+="]",t.a},uZn.Gk=function(){C$n(this.c,this.b)},zW(art,"FeatureMapUtil/FeatureEList",509),sDn(644,38,Bit,i8),uZn.hj=function(n){return ydn(this,n)},uZn.mj=function(n){var t,e,i,r;switch(this.d){case 1:case 2:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.g=n.ij(),1==n.gj()&&(this.d=1),!0;break;case 3:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=5,ttn(t=new Drn(2),this.g),ttn(t,n.ij()),this.g=t,!0;break;case 5:if(3===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.g,16).Fc(n.ij()),!0;break;case 4:switch(n.gj()){case 3:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=1,this.g=n.ij(),!0;break;case 4:if(xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return this.d=6,ttn(r=new Drn(2),this.n),ttn(r,n.kj()),this.n=r,i=Uhn(cT(YHt,1),W1n,28,15,[this.o,n.lj()]),this.g=i,!0}break;case 6:if(4===n.gj()&&xA(n.jj())===xA(this.c)&&ydn(this,null)==n.hj(null))return uG(this.n,16).Fc(n.kj()),qGn(i=uG(this.g,53),0,e=Inn(YHt,W1n,28,i.length+1,15,1),0,i.length),e[i.length]=n.lj(),this.g=e,!0}return!1},zW(art,"FeatureMapUtil/FeatureENotificationImpl",644),sDn(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Cq),uZn.Ol=function(n,t){return GHn(this.c,n,t)},uZn.Pl=function(n,t,e){return OBn(this.c,n,t,e)},uZn.Ql=function(n,t,e){return fXn(this.c,n,t,e)},uZn.Rl=function(){return this},uZn.Sl=function(n,t){return dXn(this.c,n,t)},uZn.Tl=function(n){return uG(gXn(this.c,this.b,n,!1),76).Lk()},uZn.Ul=function(n){return uG(gXn(this.c,this.b,n,!1),76).md()},uZn.Vl=function(){return this.a},uZn.Wl=function(n){return!kmn(this.c,n)},uZn.Xl=function(n,t){BXn(this.c,n,t)},uZn.Yl=function(n){return non(this.c,n)},uZn.Zl=function(n){ETn(this.c,n)},zW(art,"FeatureMapUtil/FeatureFeatureMap",564),sDn(1294,1,ort,PA),uZn.Fk=function(n){return gXn(this.b,this.a,-1,n)},uZn.Qj=function(){return!kmn(this.b,this.a)},uZn.Wb=function(n){BXn(this.b,this.a,n)},uZn.Gk=function(){C$n(this.b,this.a)},zW(art,"FeatureMapUtil/FeatureValue",1294);var OBt,ABt,LBt,NBt,$Bt,DBt=Iq(gct,"AnyType");sDn(680,63,S1n,PM),zW(gct,"InvalidDatatypeValueException",680);var xBt,RBt,KBt,FBt,_Bt,BBt,HBt,UBt,GBt,qBt,XBt,zBt,VBt,WBt,QBt,JBt,YBt,ZBt,nHt,tHt,eHt,iHt,rHt,cHt,aHt,oHt,uHt,sHt,hHt,fHt,lHt=Iq(gct,pct),bHt=Iq(gct,mct),wHt=Iq(gct,vct);sDn(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},iy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b)}return $tn(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.c&&(this.c=new wsn(this,0)),$Hn(this.c,n,e);case 1:return(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),71)).Xk(n,e);case 2:return!this.b&&(this.b=new wsn(this,2)),$Hn(this.b,n,e)}return uG(ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),t),69).wk().Ak(this,Wen(this),t-iQ(this.ii()),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i}return l5(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t)}lpn(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),KBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b)}sdn(this,n-iQ(this.ii()),ern(0==(2&this.j)?this.ii():(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(4&this.j)?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.c),n.a+=", anyAttribute: ",zA(n,this.b),n.a+=")",n.a)},zW(kct,"AnyTypeImpl",844),sDn(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},Uh),uZn.Lh=function(n,t,e){switch(n){case 0:return this.a;case 1:return this.b}return $tn(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return null!=this.a;case 1:return null!=this.b}return l5(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return void jw(this,mK(t));case 1:return void Sw(this,mK(t))}lpn(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),JBt},uZn.ki=function(n){switch(n){case 0:return void(this.a=null);case 1:return void(this.b=null)}sdn(this,n-iQ((uVn(),JBt)),ern(0==(2&this.j)?JBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(4&this.j)?vxn(this):((n=new fx(vxn(this))).a+=" (data: ",VA(n,this.a),n.a+=", target: ",VA(n,this.b),n.a+=")",n.a)},uZn.a=null,uZn.b=null,zW(kct,"ProcessingInstructionImpl",681),sDn(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},ry),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.c&&(this.c=new wsn(this,0)),this.c):(!this.c&&(this.c=new wsn(this,0)),this.c.b);case 1:return e?(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)):(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Vl();case 2:return e?(!this.b&&(this.b=new wsn(this,2)),this.b):(!this.b&&(this.b=new wsn(this,2)),this.b.b);case 3:return!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0));case 4:return g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return this.a}return $tn(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.c&&0!=this.c.i;case 1:return!(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).dc();case 2:return!!this.b&&0!=this.b.i;case 3:return!this.c&&(this.c=new wsn(this,0)),null!=mK(dXn(this.c,(uVn(),nHt),!0));case 4:return null!=g_(this.a,(!this.c&&(this.c=new wsn(this,0)),mK(dXn(this.c,(uVn(),nHt),!0))));case 5:return!!this.a}return l5(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void cW(this.c,t);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(uG(T2(this.c,(uVn(),FBt)),160),220)).Wb(t);case 2:return!this.b&&(this.b=new wsn(this,2)),void cW(this.b,t);case 3:return void m4(this,mK(t));case 4:return void m4(this,d_(this.a,t));case 5:return void Ew(this,uG(t,156))}lpn(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),ZBt},uZn.ki=function(n){switch(n){case 0:return!this.c&&(this.c=new wsn(this,0)),void Czn(this.c);case 1:return void(!this.c&&(this.c=new wsn(this,0)),uG(T2(this.c,(uVn(),FBt)),160)).$b();case 2:return!this.b&&(this.b=new wsn(this,2)),void Czn(this.b);case 3:return!this.c&&(this.c=new wsn(this,0)),void BXn(this.c,(uVn(),nHt),null);case 4:return void m4(this,d_(this.a,null));case 5:return void(this.a=null)}sdn(this,n-iQ((uVn(),ZBt)),ern(0==(2&this.j)?ZBt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},zW(kct,"SimpleAnyTypeImpl",682),sDn(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},cy),uZn.Lh=function(n,t,e){switch(n){case 0:return e?(!this.a&&(this.a=new wsn(this,0)),this.a):(!this.a&&(this.a=new wsn(this,0)),this.a.b);case 1:return e?(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),this.b):(!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),Tnn(this.b));case 2:return e?(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),this.c):(!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),Tnn(this.c));case 3:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),iHt));case 4:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),rHt));case 5:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),aHt));case 6:return!this.a&&(this.a=new wsn(this,0)),T2(this.a,(uVn(),oHt))}return $tn(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t,e)},uZn.Uh=function(n,t,e){switch(t){case 0:return!this.a&&(this.a=new wsn(this,0)),$Hn(this.a,n,e);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),G_(this.b,n,e);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),G_(this.c,n,e);case 5:return!this.a&&(this.a=new wsn(this,0)),rF(T2(this.a,(uVn(),aHt)),n,e)}return uG(ern(0==(2&this.j)?(uVn(),eHt):(!this.k&&(this.k=new Ll),this.k).Nk(),t),69).wk().Ak(this,Wen(this),t-iQ((uVn(),eHt)),n,e)},uZn.Wh=function(n){switch(n){case 0:return!!this.a&&0!=this.a.i;case 1:return!!this.b&&0!=this.b.f;case 2:return!!this.c&&0!=this.c.f;case 3:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),!$A(T2(this.a,(uVn(),oHt)))}return l5(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.bi=function(n,t){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void cW(this.a,t);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void Jun(this.b,t);case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void Jun(this.c,t);case 3:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),iHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,iHt),uG(t,16));case 4:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),rHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,rHt),uG(t,16));case 5:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),aHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,aHt),uG(t,16));case 6:return!this.a&&(this.a=new wsn(this,0)),Zv(T2(this.a,(uVn(),oHt))),!this.a&&(this.a=new wsn(this,0)),void K$(T2(this.a,oHt),uG(t,16))}lpn(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n),t)},uZn.ii=function(){return uVn(),eHt},uZn.ki=function(n){switch(n){case 0:return!this.a&&(this.a=new wsn(this,0)),void Czn(this.a);case 1:return!this.b&&(this.b=new ltn((YYn(),H_t),wBt,this,1)),void this.b.c.$b();case 2:return!this.c&&(this.c=new ltn((YYn(),H_t),wBt,this,2)),void this.c.c.$b();case 3:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),iHt)));case 4:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),rHt)));case 5:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),aHt)));case 6:return!this.a&&(this.a=new wsn(this,0)),void Zv(T2(this.a,(uVn(),oHt)))}sdn(this,n-iQ((uVn(),eHt)),ern(0==(2&this.j)?eHt:(!this.k&&(this.k=new Ll),this.k).Nk(),n))},uZn.Ib=function(){var n;return 0!=(4&this.j)?vxn(this):((n=new fx(vxn(this))).a+=" (mixed: ",zA(n,this.a),n.a+=")",n.a)},zW(kct,"XMLTypeDocumentRootImpl",683),sDn(2028,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},Nh),uZn.ri=function(n,t){switch(n.hk()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return null==t?null:cpn(t);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return mK(t);case 6:return lK(uG(t,195));case 12:case 47:case 49:case 11:return cWn(this,n,t);case 13:return null==t?null:VXn(uG(t,247));case 15:case 14:return null==t?null:MW(uM(pK(t)));case 17:return oPn((uVn(),t));case 18:return oPn(t);case 21:case 20:return null==t?null:TW(uG(t,161).a);case 27:return bK(uG(t,195));case 30:return STn((uVn(),uG(t,15)));case 31:return STn(uG(t,15));case 40:return dK((uVn(),t));case 42:return uPn((uVn(),t));case 43:return uPn(t);case 59:case 48:return wK((uVn(),t));default:throw hv(new vM(tet+n.xe()+eet))}},uZn.si=function(n){var t;switch(-1==n.G&&(n.G=(t=Hrn(n))?Hyn(t.vi(),n):-1),n.G){case 0:return new iy;case 1:return new Uh;case 2:return new ry;case 3:return new cy;default:throw hv(new vM(cet+n.zb+eet))}},uZn.ti=function(n,t){var e,i,r,c,a,o,u,s,h,f,l,b,w,d,g,p;switch(n.hk()){case 5:case 52:case 4:return t;case 6:return syn(t);case 8:case 7:return null==t?null:MPn(t);case 9:return null==t?null:Ben(vUn((i=yXn(t,!0)).length>0&&(s3(0,i.length),43==i.charCodeAt(0))?(s3(1,i.length+1),i.substr(1)):i,-128,127)<<24>>24);case 10:return null==t?null:Ben(vUn((r=yXn(t,!0)).length>0&&(s3(0,r.length),43==r.charCodeAt(0))?(s3(1,r.length+1),r.substr(1)):r,-128,127)<<24>>24);case 11:return mK(cYn(this,(uVn(),HBt),t));case 12:return mK(cYn(this,(uVn(),UBt),t));case 13:return null==t?null:new Wj(yXn(t,!0));case 15:case 14:return iRn(t);case 16:return mK(cYn(this,(uVn(),GBt),t));case 17:return bvn((uVn(),t));case 18:return bvn(t);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return yXn(t,!0);case 21:case 20:return vRn(t);case 22:return mK(cYn(this,(uVn(),qBt),t));case 23:return mK(cYn(this,(uVn(),XBt),t));case 24:return mK(cYn(this,(uVn(),zBt),t));case 25:return mK(cYn(this,(uVn(),VBt),t));case 26:return mK(cYn(this,(uVn(),WBt),t));case 27:return Ckn(t);case 30:return wvn((uVn(),t));case 31:return wvn(t);case 32:return null==t?null:xwn(vUn((h=yXn(t,!0)).length>0&&(s3(0,h.length),43==h.charCodeAt(0))?(s3(1,h.length+1),h.substr(1)):h,j1n,vZn));case 33:return null==t?null:new PN((f=yXn(t,!0)).length>0&&(s3(0,f.length),43==f.charCodeAt(0))?(s3(1,f.length+1),f.substr(1)):f);case 34:return null==t?null:xwn(vUn((l=yXn(t,!0)).length>0&&(s3(0,l.length),43==l.charCodeAt(0))?(s3(1,l.length+1),l.substr(1)):l,j1n,vZn));case 36:return null==t?null:Hvn(tJn((b=yXn(t,!0)).length>0&&(s3(0,b.length),43==b.charCodeAt(0))?(s3(1,b.length+1),b.substr(1)):b));case 37:return null==t?null:Hvn(tJn((w=yXn(t,!0)).length>0&&(s3(0,w.length),43==w.charCodeAt(0))?(s3(1,w.length+1),w.substr(1)):w));case 40:return nTn((uVn(),t));case 42:return dvn((uVn(),t));case 43:return dvn(t);case 44:return null==t?null:new PN((d=yXn(t,!0)).length>0&&(s3(0,d.length),43==d.charCodeAt(0))?(s3(1,d.length+1),d.substr(1)):d);case 45:return null==t?null:new PN((g=yXn(t,!0)).length>0&&(s3(0,g.length),43==g.charCodeAt(0))?(s3(1,g.length+1),g.substr(1)):g);case 46:return yXn(t,!1);case 47:return mK(cYn(this,(uVn(),QBt),t));case 59:case 48:return ZMn((uVn(),t));case 49:return mK(cYn(this,(uVn(),YBt),t));case 50:return null==t?null:Rwn(vUn((p=yXn(t,!0)).length>0&&(s3(0,p.length),43==p.charCodeAt(0))?(s3(1,p.length+1),p.substr(1)):p,xrt,32767)<<16>>16);case 51:return null==t?null:Rwn(vUn((c=yXn(t,!0)).length>0&&(s3(0,c.length),43==c.charCodeAt(0))?(s3(1,c.length+1),c.substr(1)):c,xrt,32767)<<16>>16);case 53:return mK(cYn(this,(uVn(),tHt),t));case 55:return null==t?null:Rwn(vUn((a=yXn(t,!0)).length>0&&(s3(0,a.length),43==a.charCodeAt(0))?(s3(1,a.length+1),a.substr(1)):a,xrt,32767)<<16>>16);case 56:return null==t?null:Rwn(vUn((o=yXn(t,!0)).length>0&&(s3(0,o.length),43==o.charCodeAt(0))?(s3(1,o.length+1),o.substr(1)):o,xrt,32767)<<16>>16);case 57:return null==t?null:Hvn(tJn((u=yXn(t,!0)).length>0&&(s3(0,u.length),43==u.charCodeAt(0))?(s3(1,u.length+1),u.substr(1)):u));case 58:return null==t?null:Hvn(tJn((s=yXn(t,!0)).length>0&&(s3(0,s.length),43==s.charCodeAt(0))?(s3(1,s.length+1),s.substr(1)):s));case 60:return null==t?null:xwn(vUn((e=yXn(t,!0)).length>0&&(s3(0,e.length),43==e.charCodeAt(0))?(s3(1,e.length+1),e.substr(1)):e,j1n,vZn));case 61:return null==t?null:xwn(vUn(yXn(t,!0),j1n,vZn));default:throw hv(new vM(tet+n.xe()+eet))}},zW(kct,"XMLTypeFactoryImpl",2028),sDn(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},gJ),uZn.N=!1,uZn.O=!1;var dHt,gHt,pHt,mHt,vHt,kHt=!1;zW(kct,"XMLTypePackageImpl",594),sDn(1961,1,{851:1},$h),uZn.Kk=function(){return vGn(),qHt},zW(kct,"XMLTypePackageImpl/1",1961),sDn(1970,1,Wrt,Dh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/10",1970),sDn(1971,1,Wrt,xh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/11",1971),sDn(1972,1,Wrt,Rh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/12",1972),sDn(1973,1,Wrt,Kh),uZn.fk=function(n){return FA(n)},uZn.gk=function(n){return Inn(fot,zZn,345,n,7,1)},zW(kct,"XMLTypePackageImpl/13",1973),sDn(1974,1,Wrt,Fh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/14",1974),sDn(1975,1,Wrt,_h),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/15",1975),sDn(1976,1,Wrt,Bh),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/16",1976),sDn(1977,1,Wrt,Hh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/17",1977),sDn(1978,1,Wrt,Gh),uZn.fk=function(n){return F$(n,161)},uZn.gk=function(n){return Inn(lot,zZn,161,n,0,1)},zW(kct,"XMLTypePackageImpl/18",1978),sDn(1979,1,Wrt,qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/19",1979),sDn(1962,1,Wrt,Xh),uZn.fk=function(n){return F$(n,857)},uZn.gk=function(n){return Inn(DBt,EZn,857,n,0,1)},zW(kct,"XMLTypePackageImpl/2",1962),sDn(1980,1,Wrt,zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/20",1980),sDn(1981,1,Wrt,Vh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/21",1981),sDn(1982,1,Wrt,Wh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/22",1982),sDn(1983,1,Wrt,Qh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/23",1983),sDn(1984,1,Wrt,Jh),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/24",1984),sDn(1985,1,Wrt,Yh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/25",1985),sDn(1986,1,Wrt,Zh),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/26",1986),sDn(1987,1,Wrt,nf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/27",1987),sDn(1988,1,Wrt,tf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/28",1988),sDn(1989,1,Wrt,ef),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/29",1989),sDn(1963,1,Wrt,rf),uZn.fk=function(n){return F$(n,681)},uZn.gk=function(n){return Inn(lHt,EZn,2119,n,0,1)},zW(kct,"XMLTypePackageImpl/3",1963),sDn(1990,1,Wrt,cf),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/30",1990),sDn(1991,1,Wrt,af),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/31",1991),sDn(1992,1,Wrt,of),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/32",1992),sDn(1993,1,Wrt,uf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/33",1993),sDn(1994,1,Wrt,sf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/34",1994),sDn(1995,1,Wrt,hf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/35",1995),sDn(1996,1,Wrt,ff),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/36",1996),sDn(1997,1,Wrt,lf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/37",1997),sDn(1998,1,Wrt,bf),uZn.fk=function(n){return F$(n,15)},uZn.gk=function(n){return Inn(yat,H3n,15,n,0,1)},zW(kct,"XMLTypePackageImpl/38",1998),sDn(1999,1,Wrt,wf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/39",1999),sDn(1964,1,Wrt,df),uZn.fk=function(n){return F$(n,682)},uZn.gk=function(n){return Inn(bHt,EZn,2120,n,0,1)},zW(kct,"XMLTypePackageImpl/4",1964),sDn(2e3,1,Wrt,gf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/40",2e3),sDn(2001,1,Wrt,pf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/41",2001),sDn(2002,1,Wrt,mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/42",2002),sDn(2003,1,Wrt,vf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/43",2003),sDn(2004,1,Wrt,kf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/44",2004),sDn(2005,1,Wrt,yf),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/45",2005),sDn(2006,1,Wrt,Mf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/46",2006),sDn(2007,1,Wrt,Tf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/47",2007),sDn(2008,1,Wrt,jf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/48",2008),sDn(2009,1,Wrt,Ef),uZn.fk=function(n){return F$(n,191)},uZn.gk=function(n){return Inn(Tot,zZn,191,n,0,1)},zW(kct,"XMLTypePackageImpl/49",2009),sDn(1965,1,Wrt,Sf),uZn.fk=function(n){return F$(n,683)},uZn.gk=function(n){return Inn(wHt,EZn,2121,n,0,1)},zW(kct,"XMLTypePackageImpl/5",1965),sDn(2010,1,Wrt,Pf),uZn.fk=function(n){return F$(n,168)},uZn.gk=function(n){return Inn(yot,zZn,168,n,0,1)},zW(kct,"XMLTypePackageImpl/50",2010),sDn(2011,1,Wrt,Cf),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/51",2011),sDn(2012,1,Wrt,If),uZn.fk=function(n){return F$(n,17)},uZn.gk=function(n){return Inn(dot,zZn,17,n,0,1)},zW(kct,"XMLTypePackageImpl/52",2012),sDn(1966,1,Wrt,Of),uZn.fk=function(n){return RA(n)},uZn.gk=function(n){return Inn($ot,zZn,2,n,6,1)},zW(kct,"XMLTypePackageImpl/6",1966),sDn(1967,1,Wrt,Af),uZn.fk=function(n){return F$(n,195)},uZn.gk=function(n){return Inn(tUt,zZn,195,n,0,2)},zW(kct,"XMLTypePackageImpl/7",1967),sDn(1968,1,Wrt,Lf),uZn.fk=function(n){return KA(n)},uZn.gk=function(n){return Inn(cot,zZn,484,n,8,1)},zW(kct,"XMLTypePackageImpl/8",1968),sDn(1969,1,Wrt,Nf),uZn.fk=function(n){return F$(n,222)},uZn.gk=function(n){return Inn(uot,zZn,222,n,0,1)},zW(kct,"XMLTypePackageImpl/9",1969),sDn(55,63,S1n,CM),zW(Xct,"RegEx/ParseException",55),sDn(836,1,{},$f),uZn.bm=function(n){return n16*e)throw hv(new CM(rZn((t$(),Cit))));e=16*e+r}if(125!=this.a)throw hv(new CM(rZn((t$(),Iit))));if(e>zct)throw hv(new CM(rZn((t$(),Oit))));n=e}else{if(r=0,0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(e=r,EYn(this),0!=this.c||(r=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=e=16*e+r}break;case 117:if(i=0,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));n=t=16*t+i;break;case 118:if(EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if(t=16*t+i,EYn(this),0!=this.c||(i=CMn(this.a))<0)throw hv(new CM(rZn((t$(),Pit))));if((t=16*t+i)>zct)throw hv(new CM(rZn((t$(),"parser.descappe.4"))));n=t;break;case 65:case 90:case 122:throw hv(new CM(rZn((t$(),Ait))))}return n},uZn.dm=function(n){var t;switch(n){case 100:t=32==(32&this.e)?kJn("Nd",!0):(QYn(),CHt);break;case 68:t=32==(32&this.e)?kJn("Nd",!1):(QYn(),NHt);break;case 119:t=32==(32&this.e)?kJn("IsWord",!0):(QYn(),HHt);break;case 87:t=32==(32&this.e)?kJn("IsWord",!1):(QYn(),DHt);break;case 115:t=32==(32&this.e)?kJn("IsSpace",!0):(QYn(),RHt);break;case 83:t=32==(32&this.e)?kJn("IsSpace",!1):(QYn(),$Ht);break;default:throw hv(new Ky(Vct+n.toString(16)))}return t},uZn.em=function(n){var t,e,i,r,c,a,o,u,s,h,f;for(this.b=1,EYn(this),t=null,0==this.c&&94==this.a?(EYn(this),n?(QYn(),QYn(),s=new K3(5)):(QYn(),QYn(),HFn(t=new K3(4),0,zct),s=new K3(4))):(QYn(),QYn(),s=new K3(4)),r=!0;1!=(f=this.c)&&(0!=f||93!=this.a||r);){if(r=!1,e=this.a,i=!1,10==f)switch(e){case 100:case 68:case 119:case 87:case 115:case 83:TXn(s,this.dm(e)),i=!0;break;case 105:case 73:case 99:case 67:(e=this.um(s,e))<0&&(i=!0);break;case 112:case 80:if(!(h=PNn(this,e)))throw hv(new CM(rZn((t$(),git))));TXn(s,h),i=!0;break;default:e=this.cm()}else if(20==f){if((c=aR(this.i,58,this.d))<0)throw hv(new CM(rZn((t$(),pit))));if(a=!0,94==VJ(this.i,this.d)&&(++this.d,a=!1),!(o=itn(r1(this.i,this.d,c),a,512==(512&this.e))))throw hv(new CM(rZn((t$(),vit))));if(TXn(s,o),i=!0,c+1>=this.j||93!=VJ(this.i,c+1))throw hv(new CM(rZn((t$(),pit))));this.d=c+2}if(EYn(this),!i)if(0!=this.c||45!=this.a)HFn(s,e,e);else{if(EYn(this),1==(f=this.c))throw hv(new CM(rZn((t$(),mit))));0==f&&93==this.a?(HFn(s,e,e),HFn(s,45,45)):(u=this.a,10==f&&(u=this.cm()),EYn(this),HFn(s,e,u))}(this.e&w1n)==w1n&&0==this.c&&44==this.a&&EYn(this)}if(1==this.c)throw hv(new CM(rZn((t$(),mit))));return t&&(lWn(t,s),s=t),pxn(s),szn(s),this.b=0,EYn(this),s},uZn.fm=function(){var n,t,e,i;for(e=this.em(!1);7!=(i=this.c);){if(n=this.a,(0!=i||45!=n&&38!=n)&&4!=i)throw hv(new CM(rZn((t$(),Eit))));if(EYn(this),9!=this.c)throw hv(new CM(rZn((t$(),jit))));if(t=this.em(!1),4==i)TXn(e,t);else if(45==n)lWn(e,t);else{if(38!=n)throw hv(new Ky("ASSERT"));GVn(e,t)}}return EYn(this),e},uZn.gm=function(){var n,t;return n=this.a-48,QYn(),QYn(),t=new F1(12,null,n),!this.g&&(this.g=new ck),zv(this.g,new Wm(n)),EYn(this),t},uZn.hm=function(){return EYn(this),QYn(),KHt},uZn.im=function(){return EYn(this),QYn(),xHt},uZn.jm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.km=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.lm=function(){return EYn(this),jln()},uZn.mm=function(){return EYn(this),QYn(),_Ht},uZn.nm=function(){return EYn(this),QYn(),UHt},uZn.om=function(){var n;if(this.d>=this.j||64!=(65504&(n=VJ(this.i,this.d++))))throw hv(new CM(rZn((t$(),lit))));return EYn(this),QYn(),QYn(),new IX(0,n-64)},uZn.pm=function(){return EYn(this),VGn()},uZn.qm=function(){return EYn(this),QYn(),GHt},uZn.rm=function(){var n;return QYn(),QYn(),n=new IX(0,105),EYn(this),n},uZn.sm=function(){return EYn(this),QYn(),BHt},uZn.tm=function(){return EYn(this),QYn(),FHt},uZn.um=function(n,t){return this.cm()},uZn.vm=function(){return EYn(this),QYn(),AHt},uZn.wm=function(){var n,t,e,i,r;if(this.d+1>=this.j)throw hv(new CM(rZn((t$(),sit))));if(i=-1,t=null,49<=(n=VJ(this.i,this.d))&&n<=57){if(i=n-48,!this.g&&(this.g=new ck),zv(this.g,new Wm(i)),++this.d,41!=VJ(this.i,this.d))throw hv(new CM(rZn((t$(),ait))));++this.d}else switch(63==n&&--this.d,EYn(this),(t=eYn(this)).e){case 20:case 21:case 22:case 23:break;case 8:if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));break;default:throw hv(new CM(rZn((t$(),hit))))}if(EYn(this),e=null,2==(r=Evn(this)).e){if(2!=r.Pm())throw hv(new CM(rZn((t$(),fit))));e=r.Lm(1),r=r.Lm(0)}if(7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),QYn(),QYn(),new bin(i,t,r,e)},uZn.xm=function(){return EYn(this),QYn(),LHt},uZn.ym=function(){var n;if(EYn(this),n=jV(24,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.zm=function(){var n;if(EYn(this),n=jV(20,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Am=function(){var n;if(EYn(this),n=jV(22,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Bm=function(){var n,t,e,i,r;for(n=0,e=0,t=-1;this.d=this.j)throw hv(new CM(rZn((t$(),oit))));if(45==t){for(++this.d;this.d=this.j)throw hv(new CM(rZn((t$(),oit))))}if(58==t){if(++this.d,EYn(this),i=GW(Evn(this),n,e),7!=this.c)throw hv(new CM(rZn((t$(),ait))));EYn(this)}else{if(41!=t)throw hv(new CM(rZn((t$(),uit))));++this.d,EYn(this),i=GW(Evn(this),n,e)}return i},uZn.Cm=function(){var n;if(EYn(this),n=jV(21,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Dm=function(){var n;if(EYn(this),n=jV(23,Evn(this)),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Em=function(){var n,t;if(EYn(this),n=this.f++,t=EV(Evn(this),n),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),t},uZn.Fm=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Gm=function(n){return EYn(this),5==this.c?(EYn(this),CX(n,(QYn(),QYn(),new n8(9,n)))):CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),t=new QN(2),5==this.c?(EYn(this),kzn(t,OHt),kzn(t,n)):(kzn(t,n),kzn(t,OHt)),t},uZn.Im=function(n){return EYn(this),5==this.c?(EYn(this),QYn(),QYn(),new n8(9,n)):(QYn(),QYn(),new n8(3,n))},uZn.a=0,uZn.b=0,uZn.c=0,uZn.d=0,uZn.e=0,uZn.f=1,uZn.g=null,uZn.j=0,zW(Xct,"RegEx/RegexParser",836),sDn(1947,836,{},ay),uZn.bm=function(n){return!1},uZn.cm=function(){return R_n(this)},uZn.dm=function(n){return MUn(n)},uZn.em=function(n){return PYn(this)},uZn.fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.gm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.hm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.im=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.jm=function(){return EYn(this),MUn(67)},uZn.km=function(){return EYn(this),MUn(73)},uZn.lm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.mm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.nm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.om=function(){return EYn(this),MUn(99)},uZn.pm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.qm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.rm=function(){return EYn(this),MUn(105)},uZn.sm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.tm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.um=function(n,t){return TXn(n,MUn(t)),-1},uZn.vm=function(){return EYn(this),QYn(),QYn(),new IX(0,94)},uZn.wm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.xm=function(){return EYn(this),QYn(),QYn(),new IX(0,36)},uZn.ym=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.zm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Am=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Bm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Cm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Dm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Em=function(){var n;if(EYn(this),n=EV(Evn(this),0),7!=this.c)throw hv(new CM(rZn((t$(),ait))));return EYn(this),n},uZn.Fm=function(){throw hv(new CM(rZn((t$(),Lit))))},uZn.Gm=function(n){return EYn(this),CX(n,(QYn(),QYn(),new n8(3,n)))},uZn.Hm=function(n){var t;return EYn(this),QYn(),QYn(),kzn(t=new QN(2),n),kzn(t,OHt),t},uZn.Im=function(n){return EYn(this),QYn(),QYn(),new n8(3,n)};var yHt=null,MHt=null;zW(Xct,"RegEx/ParserForXMLSchema",1947),sDn(122,1,aat,Qm),uZn.Jm=function(n){throw hv(new Ky("Not supported."))},uZn.Km=function(){return-1},uZn.Lm=function(n){return null},uZn.Mm=function(){return null},uZn.Nm=function(n){},uZn.Om=function(n){},uZn.Pm=function(){return 0},uZn.Ib=function(){return this.Qm(0)},uZn.Qm=function(n){return 11==this.e?".":""},uZn.e=0;var THt,jHt,EHt,SHt,PHt,CHt,IHt,OHt,AHt,LHt,NHt,$Ht,DHt,xHt,RHt,KHt,FHt,_Ht,BHt,HHt,UHt,GHt,qHt,XHt,zHt=null,VHt=null,WHt=null,QHt=zW(Xct,"RegEx/Token",122);sDn(138,122,{3:1,138:1,122:1},K3),uZn.Qm=function(n){var t,e,i;if(4==this.e)if(this==IHt)e=".";else if(this==CHt)e="\\d";else if(this==HHt)e="\\w";else if(this==RHt)e="\\s";else{for((i=new zM).a+="[",t=0;t0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}else if(this==NHt)e="\\D";else if(this==DHt)e="\\W";else if(this==$Ht)e="\\S";else{for((i=new zM).a+="[^",t=0;t0&&(i.a+=","),this.b[t]===this.b[t+1]?VA(i,Mqn(this.b[t])):(VA(i,Mqn(this.b[t])),i.a+="-",VA(i,Mqn(this.b[t+1])));i.a+="]",e=i.a}return e},uZn.a=!1,uZn.c=!1,zW(Xct,"RegEx/RangeToken",138),sDn(592,1,{592:1},Wm),uZn.a=0,zW(Xct,"RegEx/RegexParser/ReferencePosition",592),sDn(591,1,{3:1,591:1},gE),uZn.Fb=function(n){var t;return null!=n&&!!F$(n,591)&&(t=uG(n,591),m_(this.b,t.b)&&this.a==t.a)},uZn.Hb=function(){return pln(this.b+"/"+XKn(this.a))},uZn.Ib=function(){return this.c.Qm(this.a)},uZn.a=0,zW(Xct,"RegEx/RegularExpression",591),sDn(228,122,aat,IX),uZn.Km=function(){return this.a},uZn.Qm=function(n){var t,e;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:e="\\"+jF(this.a&D1n);break;case 12:e="\\f";break;case 10:e="\\n";break;case 13:e="\\r";break;case 9:e="\\t";break;case 27:e="\\e";break;default:e=this.a>=P0n?"\\v"+r1(t="0"+(this.a>>>0).toString(16),t.length-6,t.length):""+jF(this.a&D1n)}break;case 8:e=this==AHt||this==LHt?""+jF(this.a&D1n):"\\"+jF(this.a&D1n);break;default:e=null}return e},uZn.a=0,zW(Xct,"RegEx/Token/CharToken",228),sDn(318,122,aat,n8),uZn.Lm=function(n){return this.a},uZn.Nm=function(n){this.b=n},uZn.Om=function(n){this.c=n},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;if(3==this.e)if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): CLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}"}else if(this.c<0&&this.b<0)t=this.a.Qm(n)+"*?";else if(this.c==this.b)t=this.a.Qm(n)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)t=this.a.Qm(n)+"{"+this.c+","+this.b+"}?";else{if(!(this.c>=0&&this.b<0))throw hv(new Ky("Token#toString(): NONGREEDYCLOSURE "+this.c+TZn+this.b));t=this.a.Qm(n)+"{"+this.c+",}?"}return t},uZn.b=0,uZn.c=0,zW(Xct,"RegEx/Token/ClosureToken",318),sDn(837,122,aat,eW),uZn.Lm=function(n){return 0==n?this.a:this.b},uZn.Pm=function(){return 2},uZn.Qm=function(n){return 3==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+":9==this.b.e&&this.b.Lm(0)==this.a?this.a.Qm(n)+"+?":this.a.Qm(n)+""+this.b.Qm(n)},zW(Xct,"RegEx/Token/ConcatToken",837),sDn(1945,122,aat,bin),uZn.Lm=function(n){if(0==n)return this.d;if(1==n)return this.b;throw hv(new Ky("Internal Error: "+n))},uZn.Pm=function(){return this.b?2:1},uZn.Qm=function(n){var t;return t=this.c>0?"(?("+this.c+")":8==this.a.e?"(?("+this.a+")":"(?"+this.a,this.b?t+=this.d+"|"+this.b+")":t+=this.d+")",t},uZn.c=0,zW(Xct,"RegEx/Token/ConditionToken",1945),sDn(1946,122,aat,R3),uZn.Lm=function(n){return this.b},uZn.Pm=function(){return 1},uZn.Qm=function(n){return"(?"+(0==this.a?"":XKn(this.a))+(0==this.c?"":XKn(this.c))+":"+this.b.Qm(n)+")"},uZn.a=0,uZn.c=0,zW(Xct,"RegEx/Token/ModifierToken",1946),sDn(838,122,aat,PQ),uZn.Lm=function(n){return this.a},uZn.Pm=function(){return 1},uZn.Qm=function(n){var t;switch(t=null,this.e){case 6:t=0==this.b?"(?:"+this.a.Qm(n)+")":"("+this.a.Qm(n)+")";break;case 20:t="(?="+this.a.Qm(n)+")";break;case 21:t="(?!"+this.a.Qm(n)+")";break;case 22:t="(?<="+this.a.Qm(n)+")";break;case 23:t="(?"+this.a.Qm(n)+")"}return t},uZn.b=0,zW(Xct,"RegEx/Token/ParenToken",838),sDn(530,122,{3:1,122:1,530:1},F1),uZn.Mm=function(){return this.b},uZn.Qm=function(n){return 12==this.e?"\\"+this.a:Nxn(this.b)},uZn.a=0,zW(Xct,"RegEx/Token/StringToken",530),sDn(476,122,aat,QN),uZn.Jm=function(n){kzn(this,n)},uZn.Lm=function(n){return uG(DQ(this.a,n),122)},uZn.Pm=function(){return this.a?this.a.a.c.length:0},uZn.Qm=function(n){var t,e,i,r,c;if(1==this.e){if(2==this.a.a.c.length)t=uG(DQ(this.a,0),122),r=3==(e=uG(DQ(this.a,1),122)).e&&e.Lm(0)==t?t.Qm(n)+"+":9==e.e&&e.Lm(0)==t?t.Qm(n)+"+?":t.Qm(n)+""+e.Qm(n);else{for(c=new zM,i=0;i=this.c.b:this.a<=this.c.b},uZn.Sb=function(){return this.b>0},uZn.Tb=function(){return this.b},uZn.Vb=function(){return this.b-1},uZn.Qb=function(){throw hv(new TM(lat))},uZn.a=0,uZn.b=0,zW(sat,"ExclusiveRange/RangeIterator",258);var JHt=hJ(brt,"C"),YHt=hJ(grt,"I"),ZHt=hJ(dZn,"Z"),nUt=hJ(prt,"J"),tUt=hJ(lrt,"B"),eUt=hJ(wrt,"D"),iUt=hJ(drt,"F"),rUt=hJ(mrt,"S"),cUt=Iq("org.eclipse.elk.core.labels","ILabelManager"),aUt=Iq(Pet,"DiagnosticChain"),oUt=Iq(Jrt,"ResourceSet"),uUt=zW(Pet,"InvocationTargetException",null),sUt=(XM(),m9),hUt=hUt=zSn;Nan(bv),van("permProps",[[["locale","default"],[bat,"gecko1_8"]],[["locale","default"],[bat,"safari"]]]),hUt(null,"elk",null)}).call(this)}).call(this,void 0!==e.g?e.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(n,t,e){"use strict";function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function r(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?n:t}function c(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var a=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e);var c=Object.assign({},t),a=!1;try{n.resolve("web-worker"),a=!0}catch(s){}if(t.workerUrl)if(a){var o=n("web-worker");c.workerFactory=function(n){return new o(n)}}else console.warn("Web worker requested but 'web-worker' package not installed. \nConsider installing the package or pass your own 'workerFactory' to ELK's constructor.\n... Falling back to non-web worker version.");if(!c.workerFactory){var u=n("./elk-worker.min.js").Worker;c.workerFactory=function(n){return new u(n)}}return r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,c))}return c(e,t),e}(n("./elk-api.js").default);Object.defineProperty(t.exports,"__esModule",{value:!0}),t.exports=a,a.default=a},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(n,t,e){t.exports=Worker},{}]},{},[3])(3)},24858:(n,t,e)=>{"use strict";e.d(t,{diagram:()=>y});var i=e(93920),r=e(64218),c=e(78932),a=e(28758),o=e(17295);e(27484),e(17967),e(27856);const u=new o;let s={};const h={};let f={};const l=(n,t,e)=>{const i={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return i.TD=i.TB,i[e][t][n]},b=(n,t,e)=>{if(a.l.info("getNextPort",{node:n,edgeDirection:t,graphDirection:e}),!s[n])switch(e){case"TB":case"TD":s[n]={inPosition:"north",outPosition:"south"};break;case"BT":s[n]={inPosition:"south",outPosition:"north"};break;case"RL":s[n]={inPosition:"east",outPosition:"west"};break;case"LR":s[n]={inPosition:"west",outPosition:"east"}}const i="in"===t?s[n].inPosition:s[n].outPosition;return"in"===t?s[n].inPosition=l(s[n].inPosition,t,e):s[n].outPosition=l(s[n].outPosition,t,e),i},w=function(n,t,e,i){a.l.info("abc78 edges = ",n);const o=i.insert("g").attr("class","edgeLabels");let u,s,l={},w=t.db.getDirection();if(void 0!==n.defaultStyle){const t=(0,a.k)(n.defaultStyle);u=t.style,s=t.labelStyle}return n.forEach((function(t){const i="L-"+t.start+"-"+t.end;void 0===l[i]?(l[i]=0,a.l.info("abc78 new entry",i,l[i])):(l[i]++,a.l.info("abc78 new entry",i,l[i]));let d=i+"-"+l[i];a.l.info("abc78 new link id to be used is",i,d,l[i]);const g="LS-"+t.start,p="LE-"+t.end,m={style:"",labelStyle:""};switch(m.minlen=t.length||1,"arrow_open"===t.type?m.arrowhead="none":m.arrowhead="normal",m.arrowTypeStart="arrow_open",m.arrowTypeEnd="arrow_open",t.type){case"double_arrow_cross":m.arrowTypeStart="arrow_cross";case"arrow_cross":m.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":m.arrowTypeStart="arrow_point";case"arrow_point":m.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":m.arrowTypeStart="arrow_circle";case"arrow_circle":m.arrowTypeEnd="arrow_circle"}let v="",k="";switch(t.stroke){case"normal":v="fill:none;",void 0!==u&&(v=u),void 0!==s&&(k=s),m.thickness="normal",m.pattern="solid";break;case"dotted":m.thickness="normal",m.pattern="dotted",m.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":m.thickness="thick",m.pattern="solid",m.style="stroke-width: 3.5px;fill:none;"}if(void 0!==t.style){const n=(0,a.k)(t.style);v=n.style,k=n.labelStyle}m.style=m.style+=v,m.labelStyle=m.labelStyle+=k,void 0!==t.interpolate?m.curve=(0,a.n)(t.interpolate,r.c_6):void 0!==n.defaultInterpolate?m.curve=(0,a.n)(n.defaultInterpolate,r.c_6):m.curve=(0,a.n)(h.curve,r.c_6),void 0===t.text?void 0!==t.style&&(m.arrowheadStyle="fill: #333"):(m.arrowheadStyle="fill: #333",m.labelpos="c"),m.labelType=t.labelType,m.label=t.text.replace(a.e.lineBreakRegex,"\n"),void 0===t.style&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),m.labelStyle=m.labelStyle.replace("color:","fill:"),m.id=d,m.classes="flowchart-link "+g+" "+p;const y=(0,c.f)(o,m),{source:M,target:T,sourceId:j,targetId:E}=((n,t)=>{let e=n.start,i=n.end;const r=e,c=i,a=f[e],o=f[i];return a&&o?("diamond"===a.type&&(e=`${e}-${b(e,"out",t)}`),"diamond"===o.type&&(i=`${i}-${b(i,"in",t)}`),{source:e,target:i,sourceId:r,targetId:c}):{source:e,target:i}})(t,w);a.l.debug("abc78 source and target",M,T),e.edges.push({id:"e"+t.start+t.end,sources:[M],targets:[T],sourceId:j,targetId:E,labelEl:y,labels:[{width:m.width,height:m.height,orgWidth:m.width,orgHeight:m.height,text:m.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:m})})),e},d=function(n,t,e){const i=((n,t,e)=>{const{parentById:i}=e,r=new Set;let c=n;for(;c;){if(r.add(c),c===t)return c;c=i[c]}for(c=t;c;){if(r.has(c))return c;c=i[c]}return"root"})(n,t,e);if(void 0===i||"root"===i)return{x:0,y:0};const r=f[i].offset;return{x:r.posX,y:r.posY}},g=function(n,t,e,i,a,o){const u=d(t.sourceId,t.targetId,a),s=t.sections[0].startPoint,h=t.sections[0].endPoint,f=(t.sections[0].bendPoints?t.sections[0].bendPoints:[]).map((n=>[n.x+u.x,n.y+u.y])),l=[[s.x+u.x,s.y+u.y],...f,[h.x+u.x,h.y+u.y]],{x:b,y:w}=(0,c.k)(t.edgeData),g=(0,r.jvg)().x(b).y(w).curve(r.c_6),p=n.insert("path").attr("d",g(l)).attr("class","path "+e.classes).attr("fill","none"),m=n.insert("g").attr("class","edgeLabel"),v=(0,r.Ys)(m.node().appendChild(t.labelEl)),k=v.node().firstChild.getBoundingClientRect();v.attr("width",k.width),v.attr("height",k.height),m.attr("transform",`translate(${t.labels[0].x+u.x}, ${t.labels[0].y+u.y})`),function(n,t,e,i,r){let a="";i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),(0,c.m)(n,t,a,r,e)}(p,e,i.type,i.arrowMarkerAbsolute,o)},p=(n,t)=>{n.forEach((n=>{n.children||(n.children=[]);const e=t.childrenById[n.id];e&&e.forEach((t=>{n.children.push(f[t])})),p(n.children,t)}))},m=(n,t,e,i,r,c,o)=>{e.forEach((function(e){if(e)if(f[e.id].offset={posX:e.x+n,posY:e.y+t,x:n,y:t,depth:o,width:e.width,height:e.height},"group"===e.type){const i=r.insert("g").attr("class","subgraph");i.insert("rect").attr("class","subgraph subgraph-lvl-"+o%5+" node").attr("x",e.x+n).attr("y",e.y+t).attr("width",e.width).attr("height",e.height);const c=i.insert("g").attr("class","label"),u=(0,a.E)().flowchart.htmlLabels?e.labelData.width/2:0;c.attr("transform",`translate(${e.labels[0].x+n+e.x+u}, ${e.labels[0].y+t+e.y+3})`),c.node().appendChild(e.labelData.labelNode),a.l.info("Id (UGH)= ",e.type,e.labels)}else a.l.info("Id (UGH)= ",e.id),e.el.attr("transform",`translate(${e.x+n+e.width/2}, ${e.y+t+e.height/2})`)})),e.forEach((function(e){e&&"group"===e.type&&m(n+e.x,t+e.y,e.children,i,r,c,o+1)}))},v={getClasses:function(n,t){return a.l.info("Extracting classes"),t.db.getClasses()},draw:async function(n,t,e,i){var o;i.db.clear(),f={},s={},i.db.setGen("gen-2"),i.parser.parse(n);const h=(0,r.Ys)("body").append("div").attr("style","height:400px").attr("id","cy");let l={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(a.l.info("Drawing flowchart using v3 renderer",u),i.db.getDirection()){case"BT":l.layoutOptions["elk.direction"]="UP";break;case"TB":l.layoutOptions["elk.direction"]="DOWN";break;case"LR":l.layoutOptions["elk.direction"]="RIGHT";break;case"RL":l.layoutOptions["elk.direction"]="LEFT"}const{securityLevel:b,flowchart:d}=(0,a.E)();let v;"sandbox"===b&&(v=(0,r.Ys)("#i"+t));const k="sandbox"===b?(0,r.Ys)(v.nodes()[0].contentDocument.body):(0,r.Ys)("body"),y="sandbox"===b?v.nodes()[0].contentDocument:document,M=k.select(`[id="${t}"]`);(0,c.a)(M,["point","circle","cross"],i.type,t);const T=i.db.getVertices();let j;const E=i.db.getSubGraphs();a.l.info("Subgraphs - ",E);for(let r=E.length-1;r>=0;r--)j=E[r],i.db.addVertex(j.id,{text:j.title,type:j.labelType},"group",void 0,j.classes,j.dir);const S=M.insert("g").attr("class","subgraphs"),P=function(n){const t={parentById:{},childrenById:{}},e=n.getSubGraphs();return a.l.info("Subgraphs - ",e),e.forEach((function(n){n.nodes.forEach((function(e){t.parentById[e]=n.id,void 0===t.childrenById[n.id]&&(t.childrenById[n.id]=[]),t.childrenById[n.id].push(e)}))})),e.forEach((function(n){n.id,void 0!==t.parentById[n.id]&&t.parentById[n.id]})),t}(i.db);l=await async function(n,t,e,i,r,o,u){const s=e.select(`[id="${t}"]`).insert("g").attr("class","nodes"),h=Object.keys(n);return await Promise.all(h.map((async function(t){const e=n[t];let u="default";e.classes.length>0&&(u=e.classes.join(" ")),u+=" flowchart-label";const h=(0,a.k)(e.styles);let l=void 0!==e.text?e.text:e.id;const b={width:0,height:0},w=[{id:e.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:e.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:e.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:e.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let d=0,g="",p={};switch(e.type){case"round":d=5,g="rect";break;case"square":case"group":default:g="rect";break;case"diamond":g="question",p={portConstraints:"FIXED_SIDE"};break;case"hexagon":g="hexagon";break;case"odd":case"odd_right":g="rect_left_inv_arrow";break;case"lean_right":g="lean_right";break;case"lean_left":g="lean_left";break;case"trapezoid":g="trapezoid";break;case"inv_trapezoid":g="inv_trapezoid";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"stadium":g="stadium";break;case"subroutine":g="subroutine";break;case"cylinder":g="cylinder";break;case"doublecircle":g="doublecircle"}const m={labelStyle:h.labelStyle,shape:g,labelText:l,labelType:e.labelType,rx:d,ry:d,class:u,style:h.style,id:e.id,link:e.link,linkTarget:e.linkTarget,tooltip:r.db.getTooltip(e.id)||"",domId:r.db.lookUpDomId(e.id),haveCallback:e.haveCallback,width:"group"===e.type?500:void 0,dir:e.dir,type:e.type,props:e.props,padding:(0,a.E)().flowchart.padding};let v,k;if("group"!==m.type)k=await(0,c.e)(s,m,e.dir),v=k.node().getBBox();else{i.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:n,bbox:t}=await(0,c.l)(s,m,void 0,!0);b.width=t.width,b.wrappingWidth=(0,a.E)().flowchart.wrappingWidth,b.height=t.height,b.labelNode=n.node(),m.labelData=b}const y={id:e.id,ports:"diamond"===e.type?w:[],layoutOptions:p,labelText:l,labelData:b,domId:r.db.lookUpDomId(e.id),width:null==v?void 0:v.width,height:null==v?void 0:v.height,type:e.type,el:k,parent:o.parentById[e.id]};f[m.id]=y}))),u}(T,t,k,y,i,P,l);const C=M.insert("g").attr("class","edges edgePath"),I=i.db.getEdges();l=w(I,i,l,M);Object.keys(f).forEach((n=>{const t=f[n];t.parent||l.children.push(t),void 0!==P.childrenById[n]&&(t.labels=[{text:t.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:t.labelData.width,height:t.labelData.height}],delete t.x,delete t.y,delete t.width,delete t.height)})),p(l.children,P),a.l.info("after layout",JSON.stringify(l,null,2));const O=await u.layout(l);m(0,0,O.children,M,S,i,0),a.l.info("after layout",O),null==(o=O.edges)||o.map((n=>{g(C,n,n.edgeData,i,P,t)})),(0,a.o)({},M,d.diagramPadding,d.useMaxWidth),h.remove()}},k=n=>`.label {\n font-family: ${n.fontFamily};\n color: ${n.nodeTextColor||n.textColor};\n }\n .cluster-label text {\n fill: ${n.titleColor};\n }\n .cluster-label span {\n color: ${n.titleColor};\n }\n\n .label text,span {\n fill: ${n.nodeTextColor||n.textColor};\n color: ${n.nodeTextColor||n.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${n.mainBkg};\n stroke: ${n.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${n.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${n.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${n.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${n.edgeLabelBackground};\n rect {\n opacity: 0.85;\n background-color: ${n.edgeLabelBackground};\n fill: ${n.edgeLabelBackground};\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ${n.clusterBkg};\n stroke: ${n.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${n.titleColor};\n }\n\n .cluster span {\n color: ${n.titleColor};\n }\n /* .cluster div {\n color: ${n.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${n.fontFamily};\n font-size: 12px;\n background: ${n.tertiaryColor};\n border: 1px solid ${n.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${n.textColor};\n }\n .subgraph {\n stroke-width:2;\n rx:3;\n }\n // .subgraph-lvl-1 {\n // fill:#ccc;\n // // stroke:black;\n // }\n\n .flowchart-label text {\n text-anchor: middle;\n }\n\n ${(n=>{let t="";for(let e=0;e<5;e++)t+=`\n .subgraph-lvl-${e} {\n fill: ${n[`surface${e}`]};\n stroke: ${n[`surfacePeer${e}`]};\n }\n `;return t})(n)}\n`,y={db:i.d,renderer:v,parser:i.p,styles:k}}}]); \ No newline at end of file diff --git a/assets/js/1772.dbafd945.js b/assets/js/1772.dbafd945.js new file mode 100644 index 0000000000..11edf27a70 --- /dev/null +++ b/assets/js/1772.dbafd945.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1772],{5658:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var i=n(90512),o=n(95999),s=n(92503),a=n(85893);function r(e){let{className:t}=e;return(0,a.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,a.jsx)("div",{className:"row",children:(0,a.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,a.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,a.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},51772:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(67294);var i=n(95999),o=n(1944),s=n(32045),a=n(5658),r=n(85893);function d(){const e=(0,i.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.d,{title:e}),(0,r.jsx)(s.Z,{children:(0,r.jsx)(a.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/17896441.1c4eee25.js b/assets/js/17896441.1c4eee25.js new file mode 100644 index 0000000000..fb04dba396 --- /dev/null +++ b/assets/js/17896441.1c4eee25.js @@ -0,0 +1,2 @@ +/*! For license information please see 17896441.1c4eee25.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7918],{17967:(t,e)=>{"use strict";e.Nm=e.Rq=void 0;var i=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,n=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;var l,c=(l=t,l.replace(o,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!c)return e.Rq;if(function(t){return s.indexOf(t[0])>-1}(c))return c;var h=c.match(a);if(!h)return c;var u=h[0];return i.test(u)?e.Rq:c}},59047:(t,e,i)=>{"use strict";i.d(e,{Z:()=>L});var r=i(67294),n=i(85893);function o(t){const{mdxAdmonitionTitle:e,rest:i}=function(t){const e=r.Children.toArray(t),i=e.find((t=>r.isValidElement(t)&&"mdxAdmonitionTitle"===t.type)),o=e.filter((t=>t!==i)),a=i?.props.children;return{mdxAdmonitionTitle:a,rest:o.length>0?(0,n.jsx)(n.Fragment,{children:o}):null}}(t.children),o=t.title??e;return{...t,...o&&{title:o},children:i}}var a=i(90512),s=i(95999),l=i(35281);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function h(t){let{type:e,className:i,children:r}=t;return(0,n.jsx)("div",{className:(0,a.Z)(l.k.common.admonition,l.k.common.admonitionType(e),c.admonition,i),children:r})}function u(t){let{icon:e,title:i}=t;return(0,n.jsxs)("div",{className:c.admonitionHeading,children:[(0,n.jsx)("span",{className:c.admonitionIcon,children:e}),i]})}function d(t){let{children:e}=t;return e?(0,n.jsx)("div",{className:c.admonitionContent,children:e}):null}function f(t){const{type:e,icon:i,title:r,children:o,className:a}=t;return(0,n.jsxs)(h,{type:e,className:a,children:[(0,n.jsx)(u,{title:r,icon:i}),(0,n.jsx)(d,{children:o})]})}function p(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const g={icon:(0,n.jsx)(p,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function m(t){return(0,n.jsx)(f,{...g,...t,className:(0,a.Z)("alert alert--secondary",t.className),children:t.children})}function y(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const x={icon:(0,n.jsx)(y,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(t){return(0,n.jsx)(f,{...x,...t,className:(0,a.Z)("alert alert--success",t.className),children:t.children})}function C(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const _={icon:(0,n.jsx)(C,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function v(t){return(0,n.jsx)(f,{..._,...t,className:(0,a.Z)("alert alert--info",t.className),children:t.children})}function k(t){return(0,n.jsx)("svg",{viewBox:"0 0 16 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const T={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function w(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const S={icon:(0,n.jsx)(w,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const B={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const F={...{note:m,tip:b,info:v,warning:function(t){return(0,n.jsx)(f,{...T,...t,className:(0,a.Z)("alert alert--warning",t.className),children:t.children})},danger:function(t){return(0,n.jsx)(f,{...S,...t,className:(0,a.Z)("alert alert--danger",t.className),children:t.children})}},...{secondary:t=>(0,n.jsx)(m,{title:"secondary",...t}),important:t=>(0,n.jsx)(v,{title:"important",...t}),success:t=>(0,n.jsx)(b,{title:"success",...t}),caution:function(t){return(0,n.jsx)(f,{...B,...t,className:(0,a.Z)("alert alert--warning",t.className),children:t.children})}}};function L(t){const e=o(t),i=(r=e.type,F[r]||(console.warn(`No admonition component found for admonition type "${r}". Using Info as fallback.`),F.info));var r;return(0,n.jsx)(i,{...e})}},1310:(t,e,i)=>{"use strict";i.d(e,{Z:()=>y});i(67294);var r=i(90512),n=i(35281),o=i(52802),a=i(48596),s=i(33692),l=i(95999),c=i(44996),h=i(85893);function u(t){return(0,h.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,h.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const d={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function f(){const t=(0,c.Z)("/");return(0,h.jsx)("li",{className:"breadcrumbs__item",children:(0,h.jsx)(s.Z,{"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:t,children:(0,h.jsx)(u,{className:d.breadcrumbHomeIcon})})})}const p={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function g(t){let{children:e,href:i,isLast:r}=t;const n="breadcrumbs__link";return r?(0,h.jsx)("span",{className:n,itemProp:"name",children:e}):i?(0,h.jsx)(s.Z,{className:n,href:i,itemProp:"item",children:(0,h.jsx)("span",{itemProp:"name",children:e})}):(0,h.jsx)("span",{className:n,children:e})}function m(t){let{children:e,active:i,index:n,addMicrodata:o}=t;return(0,h.jsxs)("li",{...o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,r.Z)("breadcrumbs__item",{"breadcrumbs__item--active":i}),children:[e,(0,h.jsx)("meta",{itemProp:"position",content:String(n+1)})]})}function y(){const t=(0,o.s1)(),e=(0,a.Ns)();return t?(0,h.jsx)("nav",{className:(0,r.Z)(n.k.docs.docBreadcrumbs,p.breadcrumbsContainer),"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,h.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[e&&(0,h.jsx)(f,{}),t.map(((e,i)=>{const r=i===t.length-1,n="category"===e.type&&e.linkUnlisted?void 0:e.href;return(0,h.jsx)(m,{active:r,index:i,addMicrodata:!!n,children:(0,h.jsx)(g,{href:n,isLast:r,children:e.label})},i)}))]})}):null}},17744:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>ue});var r=i(67294),n=i(1944),o=i(902),a=i(85893);const s=r.createContext(null);function l(t){let{children:e,content:i}=t;const n=function(t){return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,contentTitle:t.contentTitle,toc:t.toc})),[t])}(i);return(0,a.jsx)(s.Provider,{value:n,children:e})}function c(){const t=(0,r.useContext)(s);if(null===t)throw new o.i6("DocProvider");return t}function h(){const{metadata:t,frontMatter:e,assets:i}=c();return(0,a.jsx)(n.d,{title:t.title,description:t.description,keywords:e.keywords,image:i.image??e.image})}var u=i(90512),d=i(87524),f=i(4966);function p(){const{metadata:t}=c();return(0,a.jsx)(f.Z,{previous:t.previous,next:t.next})}var g=i(23120),m=i(44364),y=i(35281),x=i(95999);function b(t){let{lastUpdatedAt:e,formattedLastUpdatedAt:i}=t;return(0,a.jsx)(x.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,a.jsx)("b",{children:(0,a.jsx)("time",{dateTime:new Date(1e3*e).toISOString(),children:i})})},children:" on {date}"})}function C(t){let{lastUpdatedBy:e}=t;return(0,a.jsx)(x.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,a.jsx)("b",{children:e})},children:" by {user}"})}function _(t){let{lastUpdatedAt:e,formattedLastUpdatedAt:i,lastUpdatedBy:r}=t;return(0,a.jsxs)("span",{className:y.k.common.lastUpdated,children:[(0,a.jsx)(x.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:e&&i?(0,a.jsx)(b,{lastUpdatedAt:e,formattedLastUpdatedAt:i}):"",byUser:r?(0,a.jsx)(C,{lastUpdatedBy:r}):""},children:"Last updated{atDate}{byUser}"}),!1]})}var v=i(33692);const k={iconEdit:"iconEdit_Z9Sw"};function T(t){let{className:e,...i}=t;return(0,a.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(k.iconEdit,e),"aria-hidden":"true",...i,children:(0,a.jsx)("g",{children:(0,a.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function w(t){let{editUrl:e}=t;return(0,a.jsxs)(v.Z,{to:e,className:y.k.common.editThisPage,children:[(0,a.jsx)(T,{}),(0,a.jsx)(x.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var S=i(13008);const B={tags:"tags_jXut",tag:"tag_QGVx"};function F(t){let{tags:e}=t;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:(0,a.jsx)(x.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,a.jsx)("ul",{className:(0,u.Z)(B.tags,"padding--none","margin-left--sm"),children:e.map((t=>{let{label:e,permalink:i}=t;return(0,a.jsx)("li",{className:B.tag,children:(0,a.jsx)(S.Z,{label:e,permalink:i})},i)}))})]})}const L={lastUpdated:"lastUpdated_vwxv"};function A(t){return(0,a.jsx)("div",{className:(0,u.Z)(y.k.docs.docFooterTagsRow,"row margin-bottom--sm"),children:(0,a.jsx)("div",{className:"col",children:(0,a.jsx)(F,{...t})})})}function M(t){let{editUrl:e,lastUpdatedAt:i,lastUpdatedBy:r,formattedLastUpdatedAt:n}=t;return(0,a.jsxs)("div",{className:(0,u.Z)(y.k.docs.docFooterEditMetaRow,"row"),children:[(0,a.jsx)("div",{className:"col",children:e&&(0,a.jsx)(w,{editUrl:e})}),(0,a.jsx)("div",{className:(0,u.Z)("col",L.lastUpdated),children:(i||r)&&(0,a.jsx)(_,{lastUpdatedAt:i,formattedLastUpdatedAt:n,lastUpdatedBy:r})})]})}function E(){const{metadata:t}=c(),{editUrl:e,lastUpdatedAt:i,formattedLastUpdatedAt:r,lastUpdatedBy:n,tags:o}=t,s=o.length>0,l=!!(e||i||n);return s||l?(0,a.jsxs)("footer",{className:(0,u.Z)(y.k.docs.docFooter,"docusaurus-mt-lg"),children:[s&&(0,a.jsx)(A,{tags:o}),l&&(0,a.jsx)(M,{editUrl:e,lastUpdatedAt:i,lastUpdatedBy:n,formattedLastUpdatedAt:r})]}):null}var N=i(86043),Z=i(86668);function j(t){const e=t.map((t=>({...t,parentIndex:-1,children:[]}))),i=Array(7).fill(-1);e.forEach(((t,e)=>{const r=i.slice(2,t.level);t.parentIndex=Math.max(...r),i[t.level]=e}));const r=[];return e.forEach((t=>{const{parentIndex:i,...n}=t;i>=0?e[i].children.push(n):r.push(n)})),r}function O(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:r}=t;return e.flatMap((t=>{const e=O({toc:t.children,minHeadingLevel:i,maxHeadingLevel:r});return function(t){return t.level>=i&&t.level<=r}(t)?[{...t,children:e}]:e}))}function I(t){const e=t.getBoundingClientRect();return e.top===e.bottom?I(t.parentNode):e}function D(t,e){let{anchorTopOffset:i}=e;const r=t.find((t=>I(t).top>=i));if(r){return function(t){return t.top>0&&t.bottom{t.current=e?0:document.querySelector(".navbar").clientHeight}),[e]),t}function $(t){const e=(0,r.useRef)(void 0),i=q();(0,r.useEffect)((()=>{if(!t)return()=>{};const{linkClassName:r,linkActiveClassName:n,minHeadingLevel:o,maxHeadingLevel:a}=t;function s(){const t=function(t){return Array.from(document.getElementsByClassName(t))}(r),s=function(t){let{minHeadingLevel:e,maxHeadingLevel:i}=t;const r=[];for(let n=e;n<=i;n+=1)r.push(`h${n}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:o,maxHeadingLevel:a}),l=D(s,{anchorTopOffset:i.current}),c=t.find((t=>l&&l.id===function(t){return decodeURIComponent(t.href.substring(t.href.indexOf("#")+1))}(t)));t.forEach((t=>{!function(t,i){i?(e.current&&e.current!==t&&e.current.classList.remove(n),t.classList.add(n),e.current=t):t.classList.remove(n)}(t,t===c)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[t,i])}function z(t){let{toc:e,className:i,linkClassName:r,isChild:n}=t;return e.length?(0,a.jsx)("ul",{className:n?void 0:i,children:e.map((t=>(0,a.jsxs)("li",{children:[(0,a.jsx)(v.Z,{to:`#${t.id}`,className:r??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,a.jsx)(z,{isChild:!0,toc:t.children,className:i,linkClassName:r})]},t.id)))}):null}const P=r.memo(z);function R(t){let{toc:e,className:i="table-of-contents table-of-contents__left-border",linkClassName:n="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:s,maxHeadingLevel:l,...c}=t;const h=(0,Z.L)(),u=s??h.tableOfContents.minHeadingLevel,d=l??h.tableOfContents.maxHeadingLevel,f=function(t){let{toc:e,minHeadingLevel:i,maxHeadingLevel:n}=t;return(0,r.useMemo)((()=>O({toc:j(e),minHeadingLevel:i,maxHeadingLevel:n})),[e,i,n])}({toc:e,minHeadingLevel:u,maxHeadingLevel:d});return $((0,r.useMemo)((()=>{if(n&&o)return{linkClassName:n,linkActiveClassName:o,minHeadingLevel:u,maxHeadingLevel:d}}),[n,o,u,d])),(0,a.jsx)(P,{toc:f,className:i,linkClassName:n,...c})}const H={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function W(t){let{collapsed:e,...i}=t;return(0,a.jsx)("button",{type:"button",...i,className:(0,u.Z)("clean-btn",H.tocCollapsibleButton,!e&&H.tocCollapsibleButtonExpanded,i.className),children:(0,a.jsx)(x.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const U={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function Y(t){let{toc:e,className:i,minHeadingLevel:r,maxHeadingLevel:n}=t;const{collapsed:o,toggleCollapsed:s}=(0,N.u)({initialState:!0});return(0,a.jsxs)("div",{className:(0,u.Z)(U.tocCollapsible,!o&&U.tocCollapsibleExpanded,i),children:[(0,a.jsx)(W,{collapsed:o,onClick:s}),(0,a.jsx)(N.z,{lazy:!0,className:U.tocCollapsibleContent,collapsed:o,children:(0,a.jsx)(R,{toc:e,minHeadingLevel:r,maxHeadingLevel:n})})]})}const V={tocMobile:"tocMobile_ITEo"};function G(){const{toc:t,frontMatter:e}=c();return(0,a.jsx)(Y,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:(0,u.Z)(y.k.docs.docTocMobile,V.tocMobile)})}const X={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},J="table-of-contents__link toc-highlight",Q="table-of-contents__link--active";function K(t){let{className:e,...i}=t;return(0,a.jsx)("div",{className:(0,u.Z)(X.tableOfContents,"thin-scrollbar",e),children:(0,a.jsx)(R,{...i,linkClassName:J,linkActiveClassName:Q})})}function tt(){const{toc:t,frontMatter:e}=c();return(0,a.jsx)(K,{toc:t,minHeadingLevel:e.toc_min_heading_level,maxHeadingLevel:e.toc_max_heading_level,className:y.k.docs.docTocDesktop})}var et=i(92503),it=i(11151),rt=i(35742),nt=i(72389),ot=i(92949);function at(){const{prism:t}=(0,Z.L)(),{colorMode:e}=(0,ot.I)(),i=t.theme,r=t.darkTheme||i;return"dark"===e?r:i}var st=i(87594),lt=i.n(st);const ct=/title=(?["'])(?.*?)\1/,ht=/\{(?<range>[\d,-]+)\}/,ut={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},dt={...ut,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},ft=Object.keys(ut);function pt(t,e){const i=t.map((t=>{const{start:i,end:r}=dt[t];return`(?:${i}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${i})\\s*$`)}function gt(t,e){let i=t.replace(/\n$/,"");const{language:r,magicComments:n,metastring:o}=e;if(o&&ht.test(o)){const t=o.match(ht).groups.range;if(0===n.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=n[0].className,r=lt()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(r),code:i}}if(void 0===r)return{lineClassNames:{},code:i};const a=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return pt(["js","jsBlock"],e);case"jsx":case"tsx":return pt(["js","jsBlock","jsx"],e);case"html":return pt(["js","jsBlock","html"],e);case"python":case"py":case"bash":return pt(["bash"],e);case"markdown":case"md":return pt(["html","jsx","bash"],e);case"tex":case"latex":case"matlab":return pt(["tex"],e);case"lua":case"haskell":case"sql":return pt(["lua"],e);case"wasm":return pt(["wasm"],e);case"vb":case"vba":case"visual-basic":return pt(["vb","rem"],e);case"vbnet":return pt(["vbnet","rem"],e);case"batch":return pt(["rem"],e);case"basic":return pt(["rem","f90"],e);case"fsharp":return pt(["js","ml"],e);case"ocaml":case"sml":return pt(["ml"],e);case"fortran":return pt(["f90"],e);case"cobol":return pt(["cobol"],e);default:return pt(ft,e)}}(r,n),s=i.split("\n"),l=Object.fromEntries(n.map((t=>[t.className,{start:0,range:""}]))),c=Object.fromEntries(n.filter((t=>t.line)).map((t=>{let{className:e,line:i}=t;return[i,e]}))),h=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.start,e]}))),u=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.end,e]})));for(let f=0;f<s.length;){const t=s[f].match(a);if(!t){f+=1;continue}const e=t.slice(1).find((t=>void 0!==t));c[e]?l[c[e]].range+=`${f},`:h[e]?l[h[e]].start=f:u[e]&&(l[u[e]].range+=`${l[u[e]].start}-${f-1},`),s.splice(f,1)}i=s.join("\n");const d={};return Object.entries(l).forEach((t=>{let[e,{range:i}]=t;lt()(i).forEach((t=>{d[t]??=[],d[t].push(e)}))})),{lineClassNames:d,code:i}}const mt={codeBlockContainer:"codeBlockContainer_Ckt0"};function yt(t){let{as:e,...i}=t;const r=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},i={};return Object.entries(t.plain).forEach((t=>{let[r,n]=t;const o=e[r];o&&"string"==typeof n&&(i[o]=n)})),i}(at());return(0,a.jsx)(e,{...i,style:r,className:(0,u.Z)(i.className,mt.codeBlockContainer,y.k.common.codeBlock)})}const xt={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function bt(t){let{children:e,className:i}=t;return(0,a.jsx)(yt,{as:"pre",tabIndex:0,className:(0,u.Z)(xt.codeBlockStandalone,"thin-scrollbar",i),children:(0,a.jsx)("code",{className:xt.codeBlockLines,children:e})})}const Ct={attributes:!0,characterData:!0,childList:!0,subtree:!0};function _t(t,e){const[i,n]=(0,r.useState)(),a=(0,r.useCallback)((()=>{n(t.current?.closest("[role=tabpanel][hidden]"))}),[t,n]);(0,r.useEffect)((()=>{a()}),[a]),function(t,e,i){void 0===i&&(i=Ct);const n=(0,o.zX)(e),a=(0,o.Ql)(i);(0,r.useEffect)((()=>{const e=new MutationObserver(n);return t&&e.observe(t,a),()=>e.disconnect()}),[t,n,a])}(i,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var vt=i(42573);const kt={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function Tt(t){let{line:e,classNames:i,showLineNumbers:r,getLineProps:n,getTokenProps:o}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const s=n({line:e,className:(0,u.Z)(i,r&&kt.codeLine)}),l=e.map(((t,e)=>(0,a.jsx)("span",{...o({token:t,key:e})},e)));return(0,a.jsxs)("span",{...s,children:[r?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:kt.codeLineNumber}),(0,a.jsx)("span",{className:kt.codeLineContent,children:l})]}):l,(0,a.jsx)("br",{})]})}function wt(t){return(0,a.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,a.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function St(t){return(0,a.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const Bt={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Ft(t){let{code:e,className:i}=t;const[n,o]=(0,r.useState)(!1),s=(0,r.useRef)(void 0),l=(0,r.useCallback)((()=>{!function(t,e){let{target:i=document.body}=void 0===e?{}:e;if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const o=document.getSelection(),a=o.rangeCount>0&&o.getRangeAt(0);i.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let s=!1;try{s=document.execCommand("copy")}catch{}r.remove(),a&&(o.removeAllRanges(),o.addRange(a)),n&&n.focus()}(e),o(!0),s.current=window.setTimeout((()=>{o(!1)}),1e3)}),[e]);return(0,r.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),(0,a.jsx)("button",{type:"button","aria-label":n?(0,x.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,x.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,x.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",i,Bt.copyButton,n&&Bt.copyButtonCopied),onClick:l,children:(0,a.jsxs)("span",{className:Bt.copyButtonIcons,"aria-hidden":"true",children:[(0,a.jsx)(wt,{className:Bt.copyButtonIcon}),(0,a.jsx)(St,{className:Bt.copyButtonSuccessIcon})]})})}function Lt(t){return(0,a.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,a.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const At={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function Mt(t){let{className:e,onClick:i,isEnabled:r}=t;const n=(0,x.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,a.jsx)("button",{type:"button",onClick:i,className:(0,u.Z)("clean-btn",e,r&&At.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,a.jsx)(Lt,{className:At.wordWrapButtonIcon,"aria-hidden":"true"})})}function Et(t){let{children:e,className:i="",metastring:n,title:o,showLineNumbers:s,language:l}=t;const{prism:{defaultLanguage:c,magicComments:h}}=(0,Z.L)(),d=function(t){return t?.toLowerCase()}(l??function(t){const e=t.split(" ").find((t=>t.startsWith("language-")));return e?.replace(/language-/,"")}(i)??c),f=at(),p=function(){const[t,e]=(0,r.useState)(!1),[i,n]=(0,r.useState)(!1),o=(0,r.useRef)(null),a=(0,r.useCallback)((()=>{const i=o.current.querySelector("code");t?i.removeAttribute("style"):(i.style.whiteSpace="pre-wrap",i.style.overflowWrap="anywhere"),e((t=>!t))}),[o,t]),s=(0,r.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=o.current,i=t>e||o.current.querySelector("code").hasAttribute("style");n(i)}),[o]);return _t(o,s),(0,r.useEffect)((()=>{s()}),[t,s]),(0,r.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:o,isEnabled:t,isCodeScrollable:i,toggle:a}}(),g=function(t){return t?.match(ct)?.groups.title??""}(n)||o,{lineClassNames:m,code:y}=gt(e,{metastring:n,language:d,magicComments:h}),x=s??function(t){return Boolean(t?.includes("showLineNumbers"))}(n);return(0,a.jsxs)(yt,{as:"div",className:(0,u.Z)(i,d&&!i.includes(`language-${d}`)&&`language-${d}`),children:[g&&(0,a.jsx)("div",{className:xt.codeBlockTitle,children:g}),(0,a.jsxs)("div",{className:xt.codeBlockContent,children:[(0,a.jsx)(vt.y$,{theme:f,code:y,language:d??"text",children:t=>{let{className:e,style:i,tokens:r,getLineProps:n,getTokenProps:o}=t;return(0,a.jsx)("pre",{tabIndex:0,ref:p.codeBlockRef,className:(0,u.Z)(e,xt.codeBlock,"thin-scrollbar"),style:i,children:(0,a.jsx)("code",{className:(0,u.Z)(xt.codeBlockLines,x&&xt.codeBlockLinesWithNumbering),children:r.map(((t,e)=>(0,a.jsx)(Tt,{line:t,getLineProps:n,getTokenProps:o,classNames:m[e],showLineNumbers:x},e)))})})}}),(0,a.jsxs)("div",{className:xt.buttonGroup,children:[(p.isEnabled||p.isCodeScrollable)&&(0,a.jsx)(Mt,{className:xt.codeButton,onClick:()=>p.toggle(),isEnabled:p.isEnabled}),(0,a.jsx)(Ft,{className:xt.codeButton,code:y})]})]})]})}function Nt(t){let{children:e,...i}=t;const n=(0,nt.Z)(),o=function(t){return r.Children.toArray(t).some((t=>(0,r.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),s="string"==typeof o?Et:bt;return(0,a.jsx)(s,{...i,children:o},String(n))}function Zt(t){return(0,a.jsx)("code",{...t})}var jt=i(28138);const Ot={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function It(t){return!!t&&("SUMMARY"===t.tagName||It(t.parentElement))}function Dt(t,e){return!!t&&(t===e||Dt(t.parentElement,e))}function qt(t){let{summary:e,children:i,...n}=t;(0,jt.Z)().collectAnchor(n.id);const o=(0,nt.Z)(),s=(0,r.useRef)(null),{collapsed:l,setCollapsed:c}=(0,N.u)({initialState:!n.open}),[h,d]=(0,r.useState)(n.open),f=r.isValidElement(e)?e:(0,a.jsx)("summary",{children:e??"Details"});return(0,a.jsxs)("details",{...n,ref:s,open:h,"data-collapsed":l,className:(0,u.Z)(Ot.details,o&&Ot.isBrowser,n.className),onMouseDown:t=>{It(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;It(e)&&Dt(e,s.current)&&(t.preventDefault(),l?(c(!1),d(!0)):c(!0))},children:[f,(0,a.jsx)(N.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{c(t),d(!t)},children:(0,a.jsx)("div",{className:Ot.collapsibleContent,children:i})})]})}const $t={details:"details_b_Ee"},zt="alert alert--info";function Pt(t){let{...e}=t;return(0,a.jsx)(qt,{...e,className:(0,u.Z)(zt,$t.details,e.className)})}function Rt(t){const e=r.Children.toArray(t.children),i=e.find((t=>r.isValidElement(t)&&"summary"===t.type)),n=(0,a.jsx)(a.Fragment,{children:e.filter((t=>t!==i))});return(0,a.jsx)(Pt,{...t,summary:i,children:n})}function Ht(t){return(0,a.jsx)(et.Z,{...t})}const Wt={containsTaskList:"containsTaskList_mC6p"};function Ut(t){if(void 0!==t)return(0,u.Z)(t,t?.includes("contains-task-list")&&Wt.containsTaskList)}const Yt={img:"img_ev3q"};var Vt=i(59047),Gt=i(44763),Xt=i(69690),Jt=i(28758);const Qt="docusaurus-mermaid-container";function Kt(){const{colorMode:t}=(0,ot.I)(),e=(0,Z.L)().mermaid,i=e.theme[t],{options:n}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...n,theme:i})),[i,n])}function te(t){let{text:e,config:i}=t;const[n,o]=(0,r.useState)(null),a=(0,r.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,s=Kt(),l=i??s;return(0,r.useEffect)((()=>{(async function(t){let{id:e,text:i,config:r}=t;Jt.K.mermaidAPI.initialize(r);try{return await Jt.K.render(e,i)}catch(n){throw document.querySelector(`#d${e}`)?.remove(),n}})({id:a,text:e,config:l}).then(o).catch((t=>{o((()=>{throw t}))}))}),[a,e,l]),n}const ee={container:"container_lyt7"};function ie(t){let{renderResult:e}=t;const i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{const t=i.current;e.bindFunctions?.(t)}),[e]),(0,a.jsx)("div",{ref:i,className:`${Qt} ${ee.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function re(t){let{value:e}=t;const i=te({text:e});return null===i?null:(0,a.jsx)(ie,{renderResult:i})}const ne={Head:rt.Z,details:Rt,Details:Rt,code:function(t){return function(t){return void 0!==t.children&&r.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")))}(t)?(0,a.jsx)(Zt,{...t}):(0,a.jsx)(Nt,{...t})},a:function(t){return(0,a.jsx)(v.Z,{...t})},pre:function(t){return(0,a.jsx)(a.Fragment,{children:t.children})},ul:function(t){return(0,a.jsx)("ul",{...t,className:Ut(t.className)})},li:function(t){return(0,jt.Z)().collectAnchor(t.id),(0,a.jsx)("li",{...t})},img:function(t){return(0,a.jsx)("img",{decoding:"async",loading:"lazy",...t,className:(e=t.className,(0,u.Z)(e,Yt.img))});var e},h1:t=>(0,a.jsx)(Ht,{as:"h1",...t}),h2:t=>(0,a.jsx)(Ht,{as:"h2",...t}),h3:t=>(0,a.jsx)(Ht,{as:"h3",...t}),h4:t=>(0,a.jsx)(Ht,{as:"h4",...t}),h5:t=>(0,a.jsx)(Ht,{as:"h5",...t}),h6:t=>(0,a.jsx)(Ht,{as:"h6",...t}),admonition:Vt.Z,mermaid:function(t){return(0,a.jsx)(Gt.Z,{fallback:t=>(0,a.jsx)(Xt.Ac,{...t}),children:(0,a.jsx)(re,{...t})})}};function oe(t){let{children:e}=t;return(0,a.jsx)(it.Z,{components:ne,children:e})}function ae(t){let{children:e}=t;const i=function(){const{metadata:t,frontMatter:e,contentTitle:i}=c();return e.hide_title||void 0!==i?null:t.title}();return(0,a.jsxs)("div",{className:(0,u.Z)(y.k.docs.docMarkdown,"markdown"),children:[i&&(0,a.jsx)("header",{children:(0,a.jsx)(et.Z,{as:"h1",children:i})}),(0,a.jsx)(oe,{children:e})]})}var se=i(1310),le=i(22212);const ce={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function he(t){let{children:e}=t;const i=function(){const{frontMatter:t,toc:e}=c(),i=(0,d.i)(),r=t.hide_table_of_contents,n=!r&&e.length>0;return{hidden:r,mobile:n?(0,a.jsx)(G,{}):void 0,desktop:!n||"desktop"!==i&&"ssr"!==i?void 0:(0,a.jsx)(tt,{})}}(),{metadata:{unlisted:r}}=c();return(0,a.jsxs)("div",{className:"row",children:[(0,a.jsxs)("div",{className:(0,u.Z)("col",!i.hidden&&ce.docItemCol),children:[r&&(0,a.jsx)(le.Z,{}),(0,a.jsx)(g.Z,{}),(0,a.jsxs)("div",{className:ce.docItemContainer,children:[(0,a.jsxs)("article",{children:[(0,a.jsx)(se.Z,{}),(0,a.jsx)(m.Z,{}),i.mobile,(0,a.jsx)(ae,{children:e}),(0,a.jsx)(E,{})]}),(0,a.jsx)(p,{})]})]}),i.desktop&&(0,a.jsx)("div",{className:"col col--3",children:i.desktop})]})}function ue(t){const e=`docs-doc-id-${t.content.metadata.id}`,i=t.content;return(0,a.jsx)(l,{content:t.content,children:(0,a.jsxs)(n.FG,{className:e,children:[(0,a.jsx)(h,{}),(0,a.jsx)(he,{children:(0,a.jsx)(i,{})})]})})}},4966:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});i(67294);var r=i(95999),n=i(90512),o=i(33692),a=i(85893);function s(t){const{permalink:e,title:i,subLabel:r,isNext:s}=t;return(0,a.jsxs)(o.Z,{className:(0,n.Z)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e,children:[r&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,a.jsx)("div",{className:"pagination-nav__label",children:i})]})}function l(t){const{previous:e,next:i}=t;return(0,a.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,r.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[e&&(0,a.jsx)(s,{...e,subLabel:(0,a.jsx)(r.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),i&&(0,a.jsx)(s,{...i,subLabel:(0,a.jsx)(r.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},44364:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});i(67294);var r=i(90512),n=i(95999),o=i(35281),a=i(74477),s=i(85893);function l(t){let{className:e}=t;const i=(0,a.E)();return i.badge?(0,s.jsx)("span",{className:(0,r.Z)(e,o.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,s.jsx)(n.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:i.label},children:"Version: {versionLabel}"})}):null}},23120:(t,e,i)=>{"use strict";i.d(e,{Z:()=>m});i(67294);var r=i(90512),n=i(52263),o=i(33692),a=i(95999),s=i(80143),l=i(35281),c=i(60373),h=i(74477),u=i(85893);const d={unreleased:function(t){let{siteTitle:e,versionMetadata:i}=t;return(0,u.jsx)(a.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:i.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(t){let{siteTitle:e,versionMetadata:i}=t;return(0,u.jsx)(a.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,u.jsx)("b",{children:i.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function f(t){const e=d[t.versionMetadata.banner];return(0,u.jsx)(e,{...t})}function p(t){let{versionLabel:e,to:i,onClick:r}=t;return(0,u.jsx)(a.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(o.Z,{to:i,onClick:r,children:(0,u.jsx)(a.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function g(t){let{className:e,versionMetadata:i}=t;const{siteConfig:{title:o}}=(0,n.Z)(),{pluginId:a}=(0,s.gA)({failfast:!0}),{savePreferredVersionName:h}=(0,c.J)(a),{latestDocSuggestion:d,latestVersionSuggestion:g}=(0,s.Jo)(a),m=d??(y=g).docs.find((t=>t.id===y.mainDocId));var y;return(0,u.jsxs)("div",{className:(0,r.Z)(e,l.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(f,{siteTitle:o,versionMetadata:i})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(p,{versionLabel:g.label,to:m.path,onClick:()=>h(g.name)})})]})}function m(t){let{className:e}=t;const i=(0,h.E)();return i.banner?(0,u.jsx)(g,{className:e,versionMetadata:i}):null}},13008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});i(67294);var r=i(90512),n=i(33692);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var a=i(85893);function s(t){let{permalink:e,label:i,count:s}=t;return(0,a.jsxs)(n.Z,{href:e,className:(0,r.Z)(o.tag,s?o.tagWithCount:o.tagRegular),children:[i,s&&(0,a.jsx)("span",{children:s})]})}},22212:(t,e,i)=>{"use strict";i.d(e,{Z:()=>f});i(67294);var r=i(90512),n=i(95999),o=i(35742),a=i(85893);function s(){return(0,a.jsx)(n.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,a.jsx)(n.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,a.jsx)(o.Z,{children:(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var h=i(35281),u=i(59047);function d(t){let{className:e}=t;return(0,a.jsx)(u.Z,{type:"caution",title:(0,a.jsx)(s,{}),className:(0,r.Z)(e,h.k.common.unlistedBanner),children:(0,a.jsx)(l,{})})}function f(t){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c,{}),(0,a.jsx)(d,{...t})]})}},27484:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,i=36e5,r="millisecond",n="second",o="minute",a="hour",s="day",l="week",c="month",h="quarter",u="year",d="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},y=function(t,e,i){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(i)+t},x={s:y,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),r=Math.floor(i/60),n=i%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(n,2,"0")},m:function t(e,i){if(e.date()<i.date())return-t(i,e);var r=12*(i.year()-e.year())+(i.month()-e.month()),n=e.clone().add(r,c),o=i-n<0,a=e.clone().add(r+(o?-1:1),c);return+(-(r+(i-n)/(o?n-a:a-n))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:u,w:l,d:s,D:d,h:a,m:o,s:n,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},b="en",C={};C[b]=m;var _="$isDayjsObject",v=function(t){return t instanceof S||!(!t||!t[_])},k=function t(e,i,r){var n;if(!e)return b;if("string"==typeof e){var o=e.toLowerCase();C[o]&&(n=o),i&&(C[o]=i,n=o);var a=e.split("-");if(!n&&a.length>1)return t(a[0])}else{var s=e.name;C[s]=e,n=s}return!r&&n&&(b=n),n||!r&&b},T=function(t,e){if(v(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new S(i)},w=x;w.l=k,w.i=v,w.w=function(t,e){return T(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var S=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[_]=!0}var y=m.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(w.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(p);if(r){var n=r[2]-1||0,o=(r[7]||"0").substring(0,3);return i?new Date(Date.UTC(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return w},y.isValid=function(){return!(this.$d.toString()===f)},y.isSame=function(t,e){var i=T(t);return this.startOf(e)<=i&&i<=this.endOf(e)},y.isAfter=function(t,e){return T(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<T(t)},y.$g=function(t,e,i){return w.u(t)?this[e]:this.set(i,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var i=this,r=!!w.u(e)||e,h=w.p(t),f=function(t,e){var n=w.w(i.$u?Date.UTC(i.$y,e,t):new Date(i.$y,e,t),i);return r?n:n.endOf(s)},p=function(t,e){return w.w(i.toDate()[t].apply(i.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),i)},g=this.$W,m=this.$M,y=this.$D,x="set"+(this.$u?"UTC":"");switch(h){case u:return r?f(1,0):f(31,11);case c:return r?f(1,m):f(0,m+1);case l:var b=this.$locale().weekStart||0,C=(g<b?g+7:g)-b;return f(r?y-C:y+(6-C),m);case s:case d:return p(x+"Hours",0);case a:return p(x+"Minutes",1);case o:return p(x+"Seconds",2);case n:return p(x+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var i,l=w.p(t),h="set"+(this.$u?"UTC":""),f=(i={},i[s]=h+"Date",i[d]=h+"Date",i[c]=h+"Month",i[u]=h+"FullYear",i[a]=h+"Hours",i[o]=h+"Minutes",i[n]=h+"Seconds",i[r]=h+"Milliseconds",i)[l],p=l===s?this.$D+(e-this.$W):e;if(l===c||l===u){var g=this.clone().set(d,1);g.$d[f](p),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](p);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[w.p(t)]()},y.add=function(r,h){var d,f=this;r=Number(r);var p=w.p(h),g=function(t){var e=T(f);return w.w(e.date(e.date()+Math.round(t*r)),f)};if(p===c)return this.set(c,this.$M+r);if(p===u)return this.set(u,this.$y+r);if(p===s)return g(1);if(p===l)return g(7);var m=(d={},d[o]=e,d[a]=i,d[n]=t,d)[p]||1,y=this.$d.getTime()+r*m;return w.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,i=this.$locale();if(!this.isValid())return i.invalidDate||f;var r=t||"YYYY-MM-DDTHH:mm:ssZ",n=w.z(this),o=this.$H,a=this.$m,s=this.$M,l=i.weekdays,c=i.months,h=i.meridiem,u=function(t,i,n,o){return t&&(t[i]||t(e,r))||n[i].slice(0,o)},d=function(t){return w.s(o%12||12,t,"0")},p=h||function(t,e,i){var r=t<12?"AM":"PM";return i?r.toLowerCase():r};return r.replace(g,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return w.s(e.$y,4,"0");case"M":return s+1;case"MM":return w.s(s+1,2,"0");case"MMM":return u(i.monthsShort,s,c,3);case"MMMM":return u(c,s);case"D":return e.$D;case"DD":return w.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(i.weekdaysMin,e.$W,l,2);case"ddd":return u(i.weekdaysShort,e.$W,l,3);case"dddd":return l[e.$W];case"H":return String(o);case"HH":return w.s(o,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return p(o,a,!0);case"A":return p(o,a,!1);case"m":return String(a);case"mm":return w.s(a,2,"0");case"s":return String(e.$s);case"ss":return w.s(e.$s,2,"0");case"SSS":return w.s(e.$ms,3,"0");case"Z":return n}return null}(t)||n.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,d,f){var p,g=this,m=w.p(d),y=T(r),x=(y.utcOffset()-this.utcOffset())*e,b=this-y,C=function(){return w.m(g,y)};switch(m){case u:p=C()/12;break;case c:p=C();break;case h:p=C()/3;break;case l:p=(b-x)/6048e5;break;case s:p=(b-x)/864e5;break;case a:p=b/i;break;case o:p=b/e;break;case n:p=b/t;break;default:p=b}return f?p:w.a(p)},y.daysInMonth=function(){return this.endOf(c).$D},y.$locale=function(){return C[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var i=this.clone(),r=k(t,e,!0);return r&&(i.$L=r),i},y.clone=function(){return w.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},m}(),B=S.prototype;return T.prototype=B,[["$ms",r],["$s",n],["$m",o],["$H",a],["$W",s],["$M",c],["$y",u],["$D",d]].forEach((function(t){B[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),T.extend=function(t,e){return t.$i||(t(e,S,T),t.$i=!0),T},T.locale=k,T.isDayjs=v,T.unix=function(t){return T(1e3*t)},T.en=C[b],T.Ls=C,T.p={},T}()},27856:function(t){t.exports=function(){"use strict";const{entries:t,setPrototypeOf:e,isFrozen:i,getPrototypeOf:r,getOwnPropertyDescriptor:n}=Object;let{freeze:o,seal:a,create:s}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(t){return t}),a||(a=function(t){return t}),l||(l=function(t,e,i){return t.apply(e,i)}),c||(c=function(t,e){return new t(...e)});const h=_(Array.prototype.forEach),u=_(Array.prototype.pop),d=_(Array.prototype.push),f=_(String.prototype.toLowerCase),p=_(String.prototype.toString),g=_(String.prototype.match),m=_(String.prototype.replace),y=_(String.prototype.indexOf),x=_(String.prototype.trim),b=_(RegExp.prototype.test),C=v(TypeError);function _(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return l(t,e,r)}}function v(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return c(t,i)}}function k(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f;e&&e(t,null);let o=r.length;for(;o--;){let e=r[o];if("string"==typeof e){const t=n(e);t!==e&&(i(r)||(r[o]=t),e=t)}t[e]=!0}return t}function T(t){for(let e=0;e<t.length;e++)void 0===n(t,e)&&(t[e]=null);return t}function w(e){const i=s(null);for(const[r,o]of t(e))void 0!==n(e,r)&&(Array.isArray(o)?i[r]=T(o):o&&"object"==typeof o&&o.constructor===Object?i[r]=w(o):i[r]=o);return i}function S(t,e){for(;null!==t;){const i=n(t,e);if(i){if(i.get)return _(i.get);if("function"==typeof i.value)return _(i.value)}t=r(t)}function i(t){return console.warn("fallback value for",t),null}return i}const B=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),F=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),L=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),A=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),M=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),E=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),N=o(["#text"]),Z=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),j=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),O=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),I=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),D=a(/\{\{[\w\W]*|[\w\W]*\}\}/gm),q=a(/<%[\w\W]*|[\w\W]*%>/gm),$=a(/\${[\w\W]*}/gm),z=a(/^data-[\-\w.\u00B7-\uFFFF]/),P=a(/^aria-[\-\w]+$/),R=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),H=a(/^(?:\w+script|data):/i),W=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),U=a(/^html$/i);var Y=Object.freeze({__proto__:null,MUSTACHE_EXPR:D,ERB_EXPR:q,TMPLIT_EXPR:$,DATA_ATTR:z,ARIA_ATTR:P,IS_ALLOWED_URI:R,IS_SCRIPT_OR_DATA:H,ATTR_WHITESPACE:W,DOCTYPE_NAME:U});const V=function(){return"undefined"==typeof window?null:window},G=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let i=null;const r="data-tt-policy-suffix";e&&e.hasAttribute(r)&&(i=e.getAttribute(r));const n="dompurify"+(i?"#"+i:"");try{return t.createPolicy(n,{createHTML:t=>t,createScriptURL:t=>t})}catch(o){return console.warn("TrustedTypes policy "+n+" could not be created."),null}};function X(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:V();const i=t=>X(t);if(i.version="3.0.8",i.removed=[],!e||!e.document||9!==e.document.nodeType)return i.isSupported=!1,i;let{document:r}=e;const n=r,a=n.currentScript,{DocumentFragment:l,HTMLTemplateElement:c,Node:_,Element:v,NodeFilter:T,NamedNodeMap:D=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:q,DOMParser:$,trustedTypes:z}=e,P=v.prototype,H=S(P,"cloneNode"),W=S(P,"nextSibling"),J=S(P,"childNodes"),Q=S(P,"parentNode");if("function"==typeof c){const t=r.createElement("template");t.content&&t.content.ownerDocument&&(r=t.content.ownerDocument)}let K,tt="";const{implementation:et,createNodeIterator:it,createDocumentFragment:rt,getElementsByTagName:nt}=r,{importNode:ot}=n;let at={};i.isSupported="function"==typeof t&&"function"==typeof Q&&et&&void 0!==et.createHTMLDocument;const{MUSTACHE_EXPR:st,ERB_EXPR:lt,TMPLIT_EXPR:ct,DATA_ATTR:ht,ARIA_ATTR:ut,IS_SCRIPT_OR_DATA:dt,ATTR_WHITESPACE:ft}=Y;let{IS_ALLOWED_URI:pt}=Y,gt=null;const mt=k({},[...B,...F,...L,...M,...N]);let yt=null;const xt=k({},[...Z,...j,...O,...I]);let bt=Object.seal(s(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ct=null,_t=null,vt=!0,kt=!0,Tt=!1,wt=!0,St=!1,Bt=!1,Ft=!1,Lt=!1,At=!1,Mt=!1,Et=!1,Nt=!0,Zt=!1;const jt="user-content-";let Ot=!0,It=!1,Dt={},qt=null;const $t=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let zt=null;const Pt=k({},["audio","video","img","source","image","track"]);let Rt=null;const Ht=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Wt="http://www.w3.org/1998/Math/MathML",Ut="http://www.w3.org/2000/svg",Yt="http://www.w3.org/1999/xhtml";let Vt=Yt,Gt=!1,Xt=null;const Jt=k({},[Wt,Ut,Yt],p);let Qt=null;const Kt=["application/xhtml+xml","text/html"],te="text/html";let ee=null,ie=null;const re=r.createElement("form"),ne=function(t){return t instanceof RegExp||t instanceof Function},oe=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ie||ie!==t){if(t&&"object"==typeof t||(t={}),t=w(t),Qt=-1===Kt.indexOf(t.PARSER_MEDIA_TYPE)?te:t.PARSER_MEDIA_TYPE,ee="application/xhtml+xml"===Qt?p:f,gt="ALLOWED_TAGS"in t?k({},t.ALLOWED_TAGS,ee):mt,yt="ALLOWED_ATTR"in t?k({},t.ALLOWED_ATTR,ee):xt,Xt="ALLOWED_NAMESPACES"in t?k({},t.ALLOWED_NAMESPACES,p):Jt,Rt="ADD_URI_SAFE_ATTR"in t?k(w(Ht),t.ADD_URI_SAFE_ATTR,ee):Ht,zt="ADD_DATA_URI_TAGS"in t?k(w(Pt),t.ADD_DATA_URI_TAGS,ee):Pt,qt="FORBID_CONTENTS"in t?k({},t.FORBID_CONTENTS,ee):$t,Ct="FORBID_TAGS"in t?k({},t.FORBID_TAGS,ee):{},_t="FORBID_ATTR"in t?k({},t.FORBID_ATTR,ee):{},Dt="USE_PROFILES"in t&&t.USE_PROFILES,vt=!1!==t.ALLOW_ARIA_ATTR,kt=!1!==t.ALLOW_DATA_ATTR,Tt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,wt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,St=t.SAFE_FOR_TEMPLATES||!1,Bt=t.WHOLE_DOCUMENT||!1,At=t.RETURN_DOM||!1,Mt=t.RETURN_DOM_FRAGMENT||!1,Et=t.RETURN_TRUSTED_TYPE||!1,Lt=t.FORCE_BODY||!1,Nt=!1!==t.SANITIZE_DOM,Zt=t.SANITIZE_NAMED_PROPS||!1,Ot=!1!==t.KEEP_CONTENT,It=t.IN_PLACE||!1,pt=t.ALLOWED_URI_REGEXP||R,Vt=t.NAMESPACE||Yt,bt=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(bt.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(bt.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(bt.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),St&&(kt=!1),Mt&&(At=!0),Dt&&(gt=k({},N),yt=[],!0===Dt.html&&(k(gt,B),k(yt,Z)),!0===Dt.svg&&(k(gt,F),k(yt,j),k(yt,I)),!0===Dt.svgFilters&&(k(gt,L),k(yt,j),k(yt,I)),!0===Dt.mathMl&&(k(gt,M),k(yt,O),k(yt,I))),t.ADD_TAGS&&(gt===mt&&(gt=w(gt)),k(gt,t.ADD_TAGS,ee)),t.ADD_ATTR&&(yt===xt&&(yt=w(yt)),k(yt,t.ADD_ATTR,ee)),t.ADD_URI_SAFE_ATTR&&k(Rt,t.ADD_URI_SAFE_ATTR,ee),t.FORBID_CONTENTS&&(qt===$t&&(qt=w(qt)),k(qt,t.FORBID_CONTENTS,ee)),Ot&&(gt["#text"]=!0),Bt&&k(gt,["html","head","body"]),gt.table&&(k(gt,["tbody"]),delete Ct.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw C('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw C('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');K=t.TRUSTED_TYPES_POLICY,tt=K.createHTML("")}else void 0===K&&(K=G(z,a)),null!==K&&"string"==typeof tt&&(tt=K.createHTML(""));o&&o(t),ie=t}},ae=k({},["mi","mo","mn","ms","mtext"]),se=k({},["foreignobject","desc","title","annotation-xml"]),le=k({},["title","style","font","a","script"]),ce=k({},[...F,...L,...A]),he=k({},[...M,...E]),ue=function(t){let e=Q(t);e&&e.tagName||(e={namespaceURI:Vt,tagName:"template"});const i=f(t.tagName),r=f(e.tagName);return!!Xt[t.namespaceURI]&&(t.namespaceURI===Ut?e.namespaceURI===Yt?"svg"===i:e.namespaceURI===Wt?"svg"===i&&("annotation-xml"===r||ae[r]):Boolean(ce[i]):t.namespaceURI===Wt?e.namespaceURI===Yt?"math"===i:e.namespaceURI===Ut?"math"===i&&se[r]:Boolean(he[i]):t.namespaceURI===Yt?!(e.namespaceURI===Ut&&!se[r])&&!(e.namespaceURI===Wt&&!ae[r])&&!he[i]&&(le[i]||!ce[i]):!("application/xhtml+xml"!==Qt||!Xt[t.namespaceURI]))},de=function(t){d(i.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){t.remove()}},fe=function(t,e){try{d(i.removed,{attribute:e.getAttributeNode(t),from:e})}catch(r){d(i.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!yt[t])if(At||Mt)try{de(e)}catch(r){}else try{e.setAttribute(t,"")}catch(r){}},pe=function(t){let e=null,i=null;if(Lt)t="<remove></remove>"+t;else{const e=g(t,/^[\r\n\t ]+/);i=e&&e[0]}"application/xhtml+xml"===Qt&&Vt===Yt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");const n=K?K.createHTML(t):t;if(Vt===Yt)try{e=(new $).parseFromString(n,Qt)}catch(a){}if(!e||!e.documentElement){e=et.createDocument(Vt,"template",null);try{e.documentElement.innerHTML=Gt?tt:n}catch(a){}}const o=e.body||e.documentElement;return t&&i&&o.insertBefore(r.createTextNode(i),o.childNodes[0]||null),Vt===Yt?nt.call(e,Bt?"html":"body")[0]:Bt?e.documentElement:o},ge=function(t){return it.call(t.ownerDocument||t,t,T.SHOW_ELEMENT|T.SHOW_COMMENT|T.SHOW_TEXT,null)},me=function(t){return t instanceof q&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof D)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},ye=function(t){return"function"==typeof _&&t instanceof _},xe=function(t,e,r){at[t]&&h(at[t],(t=>{t.call(i,e,r,ie)}))},be=function(t){let e=null;if(xe("beforeSanitizeElements",t,null),me(t))return de(t),!0;const r=ee(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:r,allowedTags:gt}),t.hasChildNodes()&&!ye(t.firstElementChild)&&b(/<[/\w]/g,t.innerHTML)&&b(/<[/\w]/g,t.textContent))return de(t),!0;if(!gt[r]||Ct[r]){if(!Ct[r]&&_e(r)){if(bt.tagNameCheck instanceof RegExp&&b(bt.tagNameCheck,r))return!1;if(bt.tagNameCheck instanceof Function&&bt.tagNameCheck(r))return!1}if(Ot&&!qt[r]){const e=Q(t)||t.parentNode,i=J(t)||t.childNodes;if(i&&e)for(let r=i.length-1;r>=0;--r)e.insertBefore(H(i[r],!0),W(t))}return de(t),!0}return t instanceof v&&!ue(t)?(de(t),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!b(/<\/no(script|embed|frames)/i,t.innerHTML)?(St&&3===t.nodeType&&(e=t.textContent,h([st,lt,ct],(t=>{e=m(e,t," ")})),t.textContent!==e&&(d(i.removed,{element:t.cloneNode()}),t.textContent=e)),xe("afterSanitizeElements",t,null),!1):(de(t),!0)},Ce=function(t,e,i){if(Nt&&("id"===e||"name"===e)&&(i in r||i in re))return!1;if(kt&&!_t[e]&&b(ht,e));else if(vt&&b(ut,e));else if(!yt[e]||_t[e]){if(!(_e(t)&&(bt.tagNameCheck instanceof RegExp&&b(bt.tagNameCheck,t)||bt.tagNameCheck instanceof Function&&bt.tagNameCheck(t))&&(bt.attributeNameCheck instanceof RegExp&&b(bt.attributeNameCheck,e)||bt.attributeNameCheck instanceof Function&&bt.attributeNameCheck(e))||"is"===e&&bt.allowCustomizedBuiltInElements&&(bt.tagNameCheck instanceof RegExp&&b(bt.tagNameCheck,i)||bt.tagNameCheck instanceof Function&&bt.tagNameCheck(i))))return!1}else if(Rt[e]);else if(b(pt,m(i,ft,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==y(i,"data:")||!zt[t])if(Tt&&!b(dt,m(i,ft,"")));else if(i)return!1;return!0},_e=function(t){return t.indexOf("-")>0},ve=function(t){xe("beforeSanitizeAttributes",t,null);const{attributes:e}=t;if(!e)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:yt};let n=e.length;for(;n--;){const a=e[n],{name:s,namespaceURI:l,value:c}=a,d=ee(s);let f="value"===s?c:x(c);if(r.attrName=d,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,xe("uponSanitizeAttribute",t,r),f=r.attrValue,r.forceKeepAttr)continue;if(fe(s,t),!r.keepAttr)continue;if(!wt&&b(/\/>/i,f)){fe(s,t);continue}St&&h([st,lt,ct],(t=>{f=m(f,t," ")}));const p=ee(t.nodeName);if(Ce(p,d,f)){if(!Zt||"id"!==d&&"name"!==d||(fe(s,t),f=jt+f),K&&"object"==typeof z&&"function"==typeof z.getAttributeType)if(l);else switch(z.getAttributeType(p,d)){case"TrustedHTML":f=K.createHTML(f);break;case"TrustedScriptURL":f=K.createScriptURL(f)}try{l?t.setAttributeNS(l,s,f):t.setAttribute(s,f),u(i.removed)}catch(o){}}}xe("afterSanitizeAttributes",t,null)},ke=function t(e){let i=null;const r=ge(e);for(xe("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)xe("uponSanitizeShadowNode",i,null),be(i)||(i.content instanceof l&&t(i.content),ve(i));xe("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(Gt=!t,Gt&&(t="\x3c!--\x3e"),"string"!=typeof t&&!ye(t)){if("function"!=typeof t.toString)throw C("toString is not a function");if("string"!=typeof(t=t.toString()))throw C("dirty is not a string, aborting")}if(!i.isSupported)return t;if(Ft||oe(e),i.removed=[],"string"==typeof t&&(It=!1),It){if(t.nodeName){const e=ee(t.nodeName);if(!gt[e]||Ct[e])throw C("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof _)r=pe("\x3c!----\x3e"),o=r.ownerDocument.importNode(t,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!At&&!St&&!Bt&&-1===t.indexOf("<"))return K&&Et?K.createHTML(t):t;if(r=pe(t),!r)return At?null:Et?tt:""}r&&Lt&&de(r.firstChild);const c=ge(It?t:r);for(;a=c.nextNode();)be(a)||(a.content instanceof l&&ke(a.content),ve(a));if(It)return t;if(At){if(Mt)for(s=rt.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(yt.shadowroot||yt.shadowrootmode)&&(s=ot.call(n,s,!0)),s}let u=Bt?r.outerHTML:r.innerHTML;return Bt&>["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&b(U,r.ownerDocument.doctype.name)&&(u="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+u),St&&h([st,lt,ct],(t=>{u=m(u,t," ")})),K&&Et?K.createHTML(u):u},i.setConfig=function(){oe(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},i.clearConfig=function(){ie=null,Ft=!1},i.isValidAttribute=function(t,e,i){ie||oe({});const r=ee(t),n=ee(e);return Ce(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(at[t]=at[t]||[],d(at[t],e))},i.removeHook=function(t){if(at[t])return u(at[t])},i.removeHooks=function(t){at[t]&&(at[t]=[])},i.removeAllHooks=function(){at={}},i}return X()}()},87594:(t,e)=>{function i(t){let e,i=[];for(let r of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(r))i.push(parseInt(r,10));else if(e=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,r,n,o]=e;if(r&&o){r=parseInt(r),o=parseInt(o);const t=r<o?1:-1;"-"!==n&&".."!==n&&"\u2025"!==n||(o+=t);for(let e=r;e!==o;e+=t)i.push(e)}}return i}e.default=i,t.exports=i},18464:(t,e,i)=>{"use strict";function r(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var n=r.reduce((function(t,e){var i=e.match(/\n([\t ]+|(?!\s).)/g);return i?t.concat(i.map((function(t){var e,i;return null!==(i=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==i?i:0}))):t}),[]);if(n.length){var o=new RegExp("\n[\t ]{"+Math.min.apply(Math,n)+"}","g");r=r.map((function(t){return t.replace(o,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var a=r[0];return e.forEach((function(t,e){var i=a.match(/(?:^|\n)( *)$/),n=i?i[1]:"",o=t;"string"==typeof t&&t.includes("\n")&&(o=String(t).split("\n").map((function(t,e){return 0===e?t:""+n+t})).join("\n")),a+=o+r[e+1]})),a}i.d(e,{Z:()=>r})},11151:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s,a:()=>a});var r=i(67294);const n={},o=r.createContext(n);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),r.createElement(o.Provider,{value:e},t.children)}},64218:(t,e,i)=>{"use strict";function r(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i<r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i<n||void 0===i&&n>=n)&&(i=n)}return i}function n(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i>r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i>n||void 0===i&&n>=n)&&(i=n)}return i}function o(t){return t}i.d(e,{Nb1:()=>cs,LLu:()=>x,F5q:()=>y,$0Z:()=>vs,Dts:()=>Ts,WQY:()=>Ss,qpX:()=>Fs,u93:()=>Ls,tFB:()=>Ms,YY7:()=>Zs,OvA:()=>Os,dCK:()=>Ds,zgE:()=>zs,fGX:()=>Rs,$m7:()=>Ws,c_6:()=>ds,fxm:()=>Ys,FdL:()=>el,ak_:()=>il,SxZ:()=>ol,eA_:()=>sl,jsv:()=>cl,iJ:()=>ll,JHv:()=>pr,jvg:()=>gs,Fp7:()=>r,VV$:()=>n,ve8:()=>xs,tiA:()=>kr,BYU:()=>mn,PKp:()=>vr,Xf:()=>Na,K2I:()=>Za,Ys:()=>ja,td_:()=>Oa,YPS:()=>Yi,rr1:()=>Nn,i$Z:()=>uo,y2j:()=>Pn,WQD:()=>Mn,U8T:()=>Bn,Z_i:()=>Ln,Ox9:()=>Dn,F0B:()=>Qn,LqH:()=>Rn,S1K:()=>Fn,Zyz:()=>In,Igq:()=>zn,YDX:()=>qn,EFj:()=>$n});var a=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function f(t){return e=>+t(e)}function p(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),i=>+t(i)+e}function g(){return!this.__axis}function m(t,e){var i=[],r=null,n=null,m=6,y=6,x=3,b="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,C=t===a||t===c?-1:1,_=t===c||t===s?"x":"y",v=t===a||t===l?u:d;function k(u){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,k=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,T=Math.max(m,0)+x,w=e.range(),S=+w[0]+b,B=+w[w.length-1]+b,F=(e.bandwidth?p:f)(e.copy(),b),L=u.selection?u.selection():u,A=L.selectAll(".domain").data([null]),M=L.selectAll(".tick").data(d,e).order(),E=M.exit(),N=M.enter().append("g").attr("class","tick"),Z=M.select("line"),j=M.select("text");A=A.merge(A.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),M=M.merge(N),Z=Z.merge(N.append("line").attr("stroke","currentColor").attr(_+"2",C*m)),j=j.merge(N.append("text").attr("fill","currentColor").attr(_,C*T).attr("dy",t===a?"0em":t===l?"0.71em":"0.32em")),u!==L&&(A=A.transition(u),M=M.transition(u),Z=Z.transition(u),j=j.transition(u),E=E.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=F(t))?v(t+b):this.getAttribute("transform")})),N.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:F(t))+b)}))),E.remove(),A.attr("d",t===c||t===s?y?"M"+C*y+","+S+"H"+b+"V"+B+"H"+C*y:"M"+b+","+S+"V"+B:y?"M"+S+","+C*y+"V"+b+"H"+B+"V"+C*y:"M"+S+","+b+"H"+B),M.attr("opacity",1).attr("transform",(function(t){return v(F(t)+b)})),Z.attr(_+"2",C*m),j.attr(_,C*T).text(k),L.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===c?"end":"middle"),L.each((function(){this.__axis=F}))}return k.scale=function(t){return arguments.length?(e=t,k):e},k.ticks=function(){return i=Array.from(arguments),k},k.tickArguments=function(t){return arguments.length?(i=null==t?[]:Array.from(t),k):i.slice()},k.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),k):r&&r.slice()},k.tickFormat=function(t){return arguments.length?(n=t,k):n},k.tickSize=function(t){return arguments.length?(m=y=+t,k):m},k.tickSizeInner=function(t){return arguments.length?(m=+t,k):m},k.tickSizeOuter=function(t){return arguments.length?(y=+t,k):y},k.tickPadding=function(t){return arguments.length?(x=+t,k):x},k.offset=function(t){return arguments.length?(b=+t,k):b},k}function y(t){return m(a,t)}function x(t){return m(l,t)}function b(){}function C(t){return null==t?b:function(){return this.querySelector(t)}}function _(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function v(){return[]}function k(t){return null==t?v:function(){return this.querySelectorAll(t)}}function T(t){return function(){return this.matches(t)}}function w(t){return function(e){return e.matches(t)}}var S=Array.prototype.find;function B(){return this.firstElementChild}var F=Array.prototype.filter;function L(){return Array.from(this.children)}function A(t){return new Array(t.length)}function M(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function E(t,e,i,r,n,o){for(var a,s=0,l=e.length,c=o.length;s<c;++s)(a=e[s])?(a.__data__=o[s],r[s]=a):i[s]=new M(t,o[s]);for(;s<l;++s)(a=e[s])&&(n[s]=a)}function N(t,e,i,r,n,o,a){var s,l,c,h=new Map,u=e.length,d=o.length,f=new Array(u);for(s=0;s<u;++s)(l=e[s])&&(f[s]=c=a.call(l,l.__data__,s,e)+"",h.has(c)?n[s]=l:h.set(c,l));for(s=0;s<d;++s)c=a.call(t,o[s],s,o)+"",(l=h.get(c))?(r[s]=l,l.__data__=o[s],h.delete(c)):i[s]=new M(t,o[s]);for(s=0;s<u;++s)(l=e[s])&&h.get(f[s])===l&&(n[s]=l)}function Z(t){return t.__data__}function j(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function O(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}M.prototype={constructor:M,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var I="http://www.w3.org/1999/xhtml";const D={svg:"http://www.w3.org/2000/svg",xhtml:I,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function q(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),D.hasOwnProperty(e)?{space:D[e],local:t}:t}function $(t){return function(){this.removeAttribute(t)}}function z(t){return function(){this.removeAttributeNS(t.space,t.local)}}function P(t,e){return function(){this.setAttribute(t,e)}}function R(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function H(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttribute(t):this.setAttribute(t,i)}}function W(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,i)}}function U(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Y(t){return function(){this.style.removeProperty(t)}}function V(t,e,i){return function(){this.style.setProperty(t,e,i)}}function G(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function X(t,e){return t.style.getPropertyValue(e)||U(t).getComputedStyle(t,null).getPropertyValue(e)}function J(t){return function(){delete this[t]}}function Q(t,e){return function(){this[t]=e}}function K(t,e){return function(){var i=e.apply(this,arguments);null==i?delete this[t]:this[t]=i}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new it(t)}function it(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function rt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.add(e[r])}function nt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.remove(e[r])}function ot(t){return function(){rt(this,t)}}function at(t){return function(){nt(this,t)}}function st(t,e){return function(){(e.apply(this,arguments)?rt:nt)(this,t)}}function lt(){this.textContent=""}function ct(t){return function(){this.textContent=t}}function ht(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function dt(t){return function(){this.innerHTML=t}}function ft(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function pt(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mt(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===I&&e.documentElement.namespaceURI===I?e.createElement(t):e.createElementNS(i,t)}}function yt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function xt(t){var e=q(t);return(e.local?yt:mt)(e)}function bt(){return null}function Ct(){var t=this.parentNode;t&&t.removeChild(this)}function _t(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function vt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(t){return function(){var e=this.__on;if(e){for(var i,r=0,n=-1,o=e.length;r<o;++r)i=e[r],t.type&&i.type!==t.type||i.name!==t.name?e[++n]=i:this.removeEventListener(i.type,i.listener,i.options);++n?e.length=n:delete this.__on}}}function Tt(t,e,i){return function(){var r,n=this.__on,o=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(n)for(var a=0,s=n.length;a<s;++a)if((r=n[a]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=i),void(r.value=e);this.addEventListener(t.type,o,i),r={type:t.type,name:t.name,value:e,listener:o,options:i},n?n.push(r):this.__on=[r]}}function wt(t,e,i){var r=U(t),n=r.CustomEvent;"function"==typeof n?n=new n(e,i):(n=r.document.createEvent("Event"),i?(n.initEvent(e,i.bubbles,i.cancelable),n.detail=i.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function St(t,e){return function(){return wt(this,t,e)}}function Bt(t,e){return function(){return wt(this,t,e.apply(this,arguments))}}it.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Ft=[null];function Lt(t,e){this._groups=t,this._parents=e}function At(){return new Lt([[document.documentElement]],Ft)}Lt.prototype=At.prototype={constructor:Lt,select:function(t){"function"!=typeof t&&(t=C(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a,s=e[n],l=s.length,c=r[n]=new Array(l),h=0;h<l;++h)(o=s[h])&&(a=t.call(o,o.__data__,h,s))&&("__data__"in o&&(a.__data__=o.__data__),c[h]=a);return new Lt(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return _(t.apply(this,arguments))}}(t):k(t);for(var e=this._groups,i=e.length,r=[],n=[],o=0;o<i;++o)for(var a,s=e[o],l=s.length,c=0;c<l;++c)(a=s[c])&&(r.push(t.call(a,a.__data__,c,s)),n.push(a));return new Lt(r,n)},selectChild:function(t){return this.select(null==t?B:function(t){return function(){return S.call(this.children,t)}}("function"==typeof t?t:w(t)))},selectChildren:function(t){return this.selectAll(null==t?L:function(t){return function(){return F.call(this.children,t)}}("function"==typeof t?t:w(t)))},filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new Lt(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,Z);var i,r=e?N:E,n=this._parents,o=this._groups;"function"!=typeof t&&(i=t,t=function(){return i});for(var a=o.length,s=new Array(a),l=new Array(a),c=new Array(a),h=0;h<a;++h){var u=n[h],d=o[h],f=d.length,p=j(t.call(u,u&&u.__data__,h,n)),g=p.length,m=l[h]=new Array(g),y=s[h]=new Array(g);r(u,d,m,y,c[h]=new Array(f),p,e);for(var x,b,C=0,_=0;C<g;++C)if(x=m[C]){for(C>=_&&(_=C+1);!(b=y[_])&&++_<g;);x._next=b||null}}return(s=new Lt(s,n))._enter=l,s._exit=c,s},enter:function(){return new Lt(this._enter||this._groups.map(A),this._parents)},exit:function(){return new Lt(this._exit||this._groups.map(A),this._parents)},join:function(t,e,i){var r=this.enter(),n=this,o=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(n=e(n))&&(n=n.selection()),null==i?o.remove():i(o),r&&n?r.merge(n).order():n},merge:function(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,a=Math.min(n,o),s=new Array(n),l=0;l<a;++l)for(var c,h=i[l],u=r[l],d=h.length,f=s[l]=new Array(d),p=0;p<d;++p)(c=h[p]||u[p])&&(f[p]=c);for(;l<n;++l)s[l]=i[l];return new Lt(s,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,i=t.length;++e<i;)for(var r,n=t[e],o=n.length-1,a=n[o];--o>=0;)(r=n[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function e(e,i){return e&&i?t(e.__data__,i.__data__):!e-!i}t||(t=O);for(var i=this._groups,r=i.length,n=new Array(r),o=0;o<r;++o){for(var a,s=i[o],l=s.length,c=n[o]=new Array(l),h=0;h<l;++h)(a=s[h])&&(c[h]=a);c.sort(e)}return new Lt(n,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r=t[e],n=0,o=r.length;n<o;++n){var a=r[n];if(a)return a}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,i=0,r=e.length;i<r;++i)for(var n,o=e[i],a=0,s=o.length;a<s;++a)(n=o[a])&&t.call(n,n.__data__,a,o);return this},attr:function(t,e){var i=q(t);if(arguments.length<2){var r=this.node();return i.local?r.getAttributeNS(i.space,i.local):r.getAttribute(i)}return this.each((null==e?i.local?z:$:"function"==typeof e?i.local?W:H:i.local?R:P)(i,e))},style:function(t,e,i){return arguments.length>1?this.each((null==e?Y:"function"==typeof e?G:V)(t,e,null==i?"":i)):X(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?J:"function"==typeof e?K:Q)(t,e)):this.node()[t]},classed:function(t,e){var i=tt(t+"");if(arguments.length<2){for(var r=et(this.node()),n=-1,o=i.length;++n<o;)if(!r.contains(i[n]))return!1;return!0}return this.each(("function"==typeof e?st:e?ot:at)(i,e))},text:function(t){return arguments.length?this.each(null==t?lt:("function"==typeof t?ht:ct)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?ft:dt)(t)):this.node().innerHTML},raise:function(){return this.each(pt)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:xt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var i="function"==typeof t?t:xt(t),r=null==e?bt:"function"==typeof e?e:C(e);return this.select((function(){return this.insertBefore(i.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(Ct)},clone:function(t){return this.select(t?vt:_t)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,i){var r,n,o=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");return i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),{type:t,name:e}}))}(t+""),a=o.length;if(!(arguments.length<2)){for(s=e?Tt:kt,r=0;r<a;++r)this.each(s(o[r],e,i));return this}var s=this.node().__on;if(s)for(var l,c=0,h=s.length;c<h;++c)for(r=0,l=s[c];r<a;++r)if((n=o[r]).type===l.type&&n.name===l.name)return l.value},dispatch:function(t,e){return this.each(("function"==typeof e?Bt:St)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r,n=t[e],o=0,a=n.length;o<a;++o)(r=n[o])&&(yield r)}};const Mt=At;var Et={value:()=>{}};function Nt(){for(var t,e=0,i=arguments.length,r={};e<i;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Zt(r)}function Zt(t){this._=t}function jt(t,e){for(var i,r=0,n=t.length;r<n;++r)if((i=t[r]).name===e)return i.value}function Ot(t,e,i){for(var r=0,n=t.length;r<n;++r)if(t[r].name===e){t[r]=Et,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=i&&t.push({name:e,value:i}),t}Zt.prototype=Nt.prototype={constructor:Zt,on:function(t,e){var i,r,n=this._,o=(r=n,(t+"").trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");if(i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,s=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=o[a]).type)n[i]=Ot(n[i],t.name,e);else if(null==e)for(i in n)n[i]=Ot(n[i],t.name,null);return this}for(;++a<s;)if((i=(t=o[a]).type)&&(i=jt(n[i],t.name)))return i},copy:function(){var t={},e=this._;for(var i in e)t[i]=e[i].slice();return new Zt(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var i,r,n=new Array(i),o=0;o<i;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,i=(r=this._[t]).length;o<i;++o)r[o].value.apply(e,n)},apply:function(t,e,i){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],n=0,o=r.length;n<o;++n)r[n].value.apply(e,i)}};const It=Nt;var Dt,qt,$t=0,zt=0,Pt=0,Rt=1e3,Ht=0,Wt=0,Ut=0,Yt="object"==typeof performance&&performance.now?performance:Date,Vt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gt(){return Wt||(Vt(Xt),Wt=Yt.now()+Ut)}function Xt(){Wt=0}function Jt(){this._call=this._time=this._next=null}function Qt(t,e,i){var r=new Jt;return r.restart(t,e,i),r}function Kt(){Wt=(Ht=Yt.now())+Ut,$t=zt=0;try{!function(){Gt(),++$t;for(var t,e=Dt;e;)(t=Wt-e._time)>=0&&e._call.call(void 0,t),e=e._next;--$t}()}finally{$t=0,function(){var t,e,i=Dt,r=1/0;for(;i;)i._call?(r>i._time&&(r=i._time),t=i,i=i._next):(e=i._next,i._next=null,i=t?t._next=e:Dt=e);qt=t,ee(r)}(),Wt=0}}function te(){var t=Yt.now(),e=t-Ht;e>Rt&&(Ut-=e,Ht=t)}function ee(t){$t||(zt&&(zt=clearTimeout(zt)),t-Wt>24?(t<1/0&&(zt=setTimeout(Kt,t-Yt.now()-Ut)),Pt&&(Pt=clearInterval(Pt))):(Pt||(Ht=Yt.now(),Pt=setInterval(te,Rt)),$t=1,Vt(Kt)))}function ie(t,e,i){var r=new Jt;return e=null==e?0:+e,r.restart((i=>{r.stop(),t(i+e)}),e,i),r}Jt.prototype=Qt.prototype={constructor:Jt,restart:function(t,e,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?Gt():+i)+(null==e?0:+e),this._next||qt===this||(qt?qt._next=this:Dt=this,qt=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=It("start","end","cancel","interrupt"),ne=[],oe=0,ae=1,se=2,le=3,ce=4,he=5,ue=6;function de(t,e,i,r,n,o){var a=t.__transition;if(a){if(i in a)return}else t.__transition={};!function(t,e,i){var r,n=t.__transition;function o(t){i.state=ae,i.timer.restart(a,i.delay,i.time),i.delay<=t&&a(t-i.delay)}function a(o){var c,h,u,d;if(i.state!==ae)return l();for(c in n)if((d=n[c]).name===i.name){if(d.state===le)return ie(a);d.state===ce?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete n[c]):+c<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete n[c])}if(ie((function(){i.state===le&&(i.state=ce,i.timer.restart(s,i.delay,i.time),s(o))})),i.state=se,i.on.call("start",t,t.__data__,i.index,i.group),i.state===se){for(i.state=le,r=new Array(u=i.tween.length),c=0,h=-1;c<u;++c)(d=i.tween[c].value.call(t,t.__data__,i.index,i.group))&&(r[++h]=d);r.length=h+1}}function s(e){for(var n=e<i.duration?i.ease.call(null,e/i.duration):(i.timer.restart(l),i.state=he,1),o=-1,a=r.length;++o<a;)r[o].call(t,n);i.state===he&&(i.on.call("end",t,t.__data__,i.index,i.group),l())}function l(){for(var r in i.state=ue,i.timer.stop(),delete n[e],n)return;delete t.__transition}n[e]=i,i.timer=Qt(o,0,i.time)}(t,i,{name:e,index:r,group:n,on:re,tween:ne,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:oe})}function fe(t,e){var i=ge(t,e);if(i.state>oe)throw new Error("too late; already scheduled");return i}function pe(t,e){var i=ge(t,e);if(i.state>le)throw new Error("too late; already running");return i}function ge(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function me(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var ye,xe=180/Math.PI,be={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Ce(t,e,i,r,n,o){var a,s,l;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(l=t*i+e*r)&&(i-=t*l,r-=e*l),(s=Math.sqrt(i*i+r*r))&&(i/=s,r/=s,l/=s),t*r<e*i&&(t=-t,e=-e,l=-l,a=-a),{translateX:n,translateY:o,rotate:Math.atan2(e,t)*xe,skewX:Math.atan(l)*xe,scaleX:a,scaleY:s}}function _e(t,e,i,r){function n(t){return t.length?t.pop()+" ":""}return function(o,a){var s=[],l=[];return o=t(o),a=t(a),function(t,r,n,o,a,s){if(t!==n||r!==o){var l=a.push("translate(",null,e,null,i);s.push({i:l-4,x:me(t,n)},{i:l-2,x:me(r,o)})}else(n||o)&&a.push("translate("+n+e+o+i)}(o.translateX,o.translateY,a.translateX,a.translateY,s,l),function(t,e,i,o){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),o.push({i:i.push(n(i)+"rotate(",null,r)-2,x:me(t,e)})):e&&i.push(n(i)+"rotate("+e+r)}(o.rotate,a.rotate,s,l),function(t,e,i,o){t!==e?o.push({i:i.push(n(i)+"skewX(",null,r)-2,x:me(t,e)}):e&&i.push(n(i)+"skewX("+e+r)}(o.skewX,a.skewX,s,l),function(t,e,i,r,o,a){if(t!==i||e!==r){var s=o.push(n(o)+"scale(",null,",",null,")");a.push({i:s-4,x:me(t,i)},{i:s-2,x:me(e,r)})}else 1===i&&1===r||o.push(n(o)+"scale("+i+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,l),o=a=null,function(t){for(var e,i=-1,r=l.length;++i<r;)s[(e=l[i]).i]=e.x(t);return s.join("")}}}var ve=_e((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?be:Ce(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),ke=_e((function(t){return null==t?be:(ye||(ye=document.createElementNS("http://www.w3.org/2000/svg","g")),ye.setAttribute("transform",t),(t=ye.transform.baseVal.consolidate())?Ce((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):be)}),", ",")",")");function Te(t,e){var i,r;return function(){var n=pe(this,t),o=n.tween;if(o!==i)for(var a=0,s=(r=i=o).length;a<s;++a)if(r[a].name===e){(r=r.slice()).splice(a,1);break}n.tween=r}}function we(t,e,i){var r,n;if("function"!=typeof i)throw new Error;return function(){var o=pe(this,t),a=o.tween;if(a!==r){n=(r=a).slice();for(var s={name:e,value:i},l=0,c=n.length;l<c;++l)if(n[l].name===e){n[l]=s;break}l===c&&n.push(s)}o.tween=n}}function Se(t,e,i){var r=t._id;return t.each((function(){var t=pe(this,r);(t.value||(t.value={}))[e]=i.apply(this,arguments)})),function(t){return ge(t,r).value[e]}}function Be(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function Fe(t,e){var i=Object.create(t.prototype);for(var r in e)i[r]=e[r];return i}function Le(){}var Ae=.7,Me=1/Ae,Ee="\\s*([+-]?\\d+)\\s*",Ne="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ze="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",je=/^#([0-9a-f]{3,8})$/,Oe=new RegExp(`^rgb\\(${Ee},${Ee},${Ee}\\)$`),Ie=new RegExp(`^rgb\\(${Ze},${Ze},${Ze}\\)$`),De=new RegExp(`^rgba\\(${Ee},${Ee},${Ee},${Ne}\\)$`),qe=new RegExp(`^rgba\\(${Ze},${Ze},${Ze},${Ne}\\)$`),$e=new RegExp(`^hsl\\(${Ne},${Ze},${Ze}\\)$`),ze=new RegExp(`^hsla\\(${Ne},${Ze},${Ze},${Ne}\\)$`),Pe={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Re(){return this.rgb().formatHex()}function He(){return this.rgb().formatRgb()}function We(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=je.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?Ue(e):3===i?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ye(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ye(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Oe.exec(t))?new Xe(e[1],e[2],e[3],1):(e=Ie.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=De.exec(t))?Ye(e[1],e[2],e[3],e[4]):(e=qe.exec(t))?Ye(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=$e.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=ze.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):Pe.hasOwnProperty(t)?Ue(Pe[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function Ue(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function Ye(t,e,i,r){return r<=0&&(t=e=i=NaN),new Xe(t,e,i,r)}function Ve(t){return t instanceof Le||(t=We(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,i,r){return 1===arguments.length?Ve(t):new Xe(t,e,i,null==r?1:r)}function Xe(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}function Je(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}`}function Qe(){const t=Ke(this.opacity);return`${1===t?"rgb(":"rgba("}${ti(this.r)}, ${ti(this.g)}, ${ti(this.b)}${1===t?")":`, ${t})`}`}function Ke(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ti(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ei(t){return((t=ti(t))<16?"0":"")+t.toString(16)}function ii(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new ni(t,e,i,r)}function ri(t){if(t instanceof ni)return new ni(t.h,t.s,t.l,t.opacity);if(t instanceof Le||(t=We(t)),!t)return new ni;if(t instanceof ni)return t;var e=(t=t.rgb()).r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(a=e===o?(i-r)/s+6*(i<r):i===o?(r-e)/s+2:(e-i)/s+4,s/=l<.5?o+n:2-o-n,a*=60):s=l>0&&l<1?0:a,new ni(a,s,l,t.opacity)}function ni(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}function oi(t){return(t=(t||0)%360)<0?t+360:t}function ai(t){return Math.max(0,Math.min(1,t||0))}function si(t,e,i){return 255*(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)}function li(t,e,i,r,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*i+(1+3*t+3*o-3*a)*r+a*n)/6}Be(Le,We,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Re,formatHex:Re,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:He,toString:He}),Be(Xe,Ge,Fe(Le,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Ae:Math.pow(Ae,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Xe(ti(this.r),ti(this.g),ti(this.b),Ke(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Je,formatHex:Je,formatHex8:function(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}${ei(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Qe,toString:Qe})),Be(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Fe(Le,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new ni(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Ae:Math.pow(Ae,t),new ni(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new Xe(si(t>=240?t-240:t+120,n,r),si(t,n,r),si(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new ni(oi(this.h),ai(this.s),ai(this.l),Ke(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ke(this.opacity);return`${1===t?"hsl(":"hsla("}${oi(this.h)}, ${100*ai(this.s)}%, ${100*ai(this.l)}%${1===t?")":`, ${t})`}`}}));const ci=t=>()=>t;function hi(t,e){return function(i){return t+i*e}}function ui(t){return 1==(t=+t)?di:function(e,i){return i-e?function(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}(e,i,t):ci(isNaN(e)?i:e)}}function di(t,e){var i=e-t;return i?hi(t,i):ci(isNaN(t)?e:t)}const fi=function t(e){var i=ui(e);function r(t,e){var r=i((t=Ge(t)).r,(e=Ge(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),a=di(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=n(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function pi(t){return function(e){var i,r,n=e.length,o=new Array(n),a=new Array(n),s=new Array(n);for(i=0;i<n;++i)r=Ge(e[i]),o[i]=r.r||0,a[i]=r.g||0,s[i]=r.b||0;return o=t(o),a=t(a),s=t(s),r.opacity=1,function(t){return r.r=o(t),r.g=a(t),r.b=s(t),r+""}}}pi((function(t){var e=t.length-1;return function(i){var r=i<=0?i=0:i>=1?(i=1,e-1):Math.floor(i*e),n=t[r],o=t[r+1],a=r>0?t[r-1]:2*n-o,s=r<e-1?t[r+2]:2*o-n;return li((i-r/e)*e,a,n,o,s)}})),pi((function(t){var e=t.length;return function(i){var r=Math.floor(((i%=1)<0?++i:i)*e),n=t[(r+e-1)%e],o=t[r%e],a=t[(r+1)%e],s=t[(r+2)%e];return li((i-r/e)*e,n,o,a,s)}}));var gi=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mi=new RegExp(gi.source,"g");function yi(t,e){var i,r,n,o=gi.lastIndex=mi.lastIndex=0,a=-1,s=[],l=[];for(t+="",e+="";(i=gi.exec(t))&&(r=mi.exec(e));)(n=r.index)>o&&(n=e.slice(o,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(r=r[0])?s[a]?s[a]+=r:s[++a]=r:(s[++a]=null,l.push({i:a,x:me(i,r)})),o=mi.lastIndex;return o<e.length&&(n=e.slice(o),s[a]?s[a]+=n:s[++a]=n),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var i,r=0;r<e;++r)s[(i=l[r]).i]=i.x(t);return s.join("")})}function xi(t,e){var i;return("number"==typeof e?me:e instanceof We?fi:(i=We(e))?(e=i,fi):yi)(t,e)}function bi(t){return function(){this.removeAttribute(t)}}function Ci(t){return function(){this.removeAttributeNS(t.space,t.local)}}function _i(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttribute(t);return a===o?null:a===r?n:n=e(r=a,i)}}function vi(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===r?n:n=e(r=a,i)}}function ki(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttribute(t))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttribute(t)}}function Ti(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttributeNS(t.space,t.local))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttributeNS(t.space,t.local)}}function wi(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttributeNS(t.space,t.local,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Si(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttribute(t,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Bi(t,e){return function(){fe(this,t).delay=+e.apply(this,arguments)}}function Fi(t,e){return e=+e,function(){fe(this,t).delay=e}}function Li(t,e){return function(){pe(this,t).duration=+e.apply(this,arguments)}}function Ai(t,e){return e=+e,function(){pe(this,t).duration=e}}var Mi=Mt.prototype.constructor;function Ei(t){return function(){this.style.removeProperty(t)}}var Ni=0;function Zi(t,e,i,r){this._groups=t,this._parents=e,this._name=i,this._id=r}function ji(){return++Ni}var Oi=Mt.prototype;Zi.prototype=function(t){return Mt().transition(t)}.prototype={constructor:Zi,select:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=C(t));for(var r=this._groups,n=r.length,o=new Array(n),a=0;a<n;++a)for(var s,l,c=r[a],h=c.length,u=o[a]=new Array(h),d=0;d<h;++d)(s=c[d])&&(l=t.call(s,s.__data__,d,c))&&("__data__"in s&&(l.__data__=s.__data__),u[d]=l,de(u[d],e,i,d,u,ge(s,i)));return new Zi(o,this._parents,e,i)},selectAll:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=k(t));for(var r=this._groups,n=r.length,o=[],a=[],s=0;s<n;++s)for(var l,c=r[s],h=c.length,u=0;u<h;++u)if(l=c[u]){for(var d,f=t.call(l,l.__data__,u,c),p=ge(l,i),g=0,m=f.length;g<m;++g)(d=f[g])&&de(d,e,i,g,f,p);o.push(f),a.push(l)}return new Zi(o,a,e,i)},selectChild:Oi.selectChild,selectChildren:Oi.selectChildren,filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new Zi(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,i=t._groups,r=e.length,n=i.length,o=Math.min(r,n),a=new Array(r),s=0;s<o;++s)for(var l,c=e[s],h=i[s],u=c.length,d=a[s]=new Array(u),f=0;f<u;++f)(l=c[f]||h[f])&&(d[f]=l);for(;s<r;++s)a[s]=e[s];return new Zi(a,this._parents,this._name,this._id)},selection:function(){return new Mi(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,i=ji(),r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)if(a=s[c]){var h=ge(a,e);de(a,t,i,c,s,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Zi(r,this._parents,t,i)},call:Oi.call,nodes:Oi.nodes,node:Oi.node,size:Oi.size,empty:Oi.empty,each:Oi.each,on:function(t,e){var i=this._id;return arguments.length<2?ge(this.node(),i).on.on(t):this.each(function(t,e,i){var r,n,o=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?fe:pe;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}(i,t,e))},attr:function(t,e){var i=q(t),r="transform"===i?ke:xi;return this.attrTween(t,"function"==typeof e?(i.local?Ti:ki)(i,r,Se(this,"attr."+t,e)):null==e?(i.local?Ci:bi)(i):(i.local?vi:_i)(i,r,e))},attrTween:function(t,e){var i="attr."+t;if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;var r=q(t);return this.tween(i,(r.local?wi:Si)(r,e))},style:function(t,e,i){var r="transform"==(t+="")?ve:xi;return null==e?this.styleTween(t,function(t,e){var i,r,n;return function(){var o=X(this,t),a=(this.style.removeProperty(t),X(this,t));return o===a?null:o===i&&a===r?n:n=e(i=o,r=a)}}(t,r)).on("end.style."+t,Ei(t)):"function"==typeof e?this.styleTween(t,function(t,e,i){var r,n,o;return function(){var a=X(this,t),s=i(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=X(this,t)),a===l?null:a===r&&l===n?o:(n=l,o=e(r=a,s))}}(t,r,Se(this,"style."+t,e))).each(function(t,e){var i,r,n,o,a="style."+e,s="end."+a;return function(){var l=pe(this,t),c=l.on,h=null==l.value[a]?o||(o=Ei(e)):void 0;c===i&&n===h||(r=(i=c).copy()).on(s,n=h),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,i){var r,n,o=i+"";return function(){var a=X(this,t);return a===o?null:a===r?n:n=e(r=a,i)}}(t,r,e),i).on("end.style."+t,null)},styleTween:function(t,e,i){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,i){var r,n;function o(){var o=e.apply(this,arguments);return o!==n&&(r=(n=o)&&function(t,e,i){return function(r){this.style.setProperty(t,e.call(this,r),i)}}(t,o,i)),r}return o._value=e,o}(t,e,null==i?"":i))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Se(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,i;function r(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var i=this._id;if(t+="",arguments.length<2){for(var r,n=ge(this.node(),i).tween,o=0,a=n.length;o<a;++o)if((r=n[o]).name===t)return r.value;return null}return this.each((null==e?Te:we)(i,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bi:Fi)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Li:Ai)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){pe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var i=e.apply(this,arguments);if("function"!=typeof i)throw new Error;pe(this,t).ease=i}}(this._id,t))},end:function(){var t,e,i=this,r=i._id,n=i.size();return new Promise((function(o,a){var s={value:a},l={value:function(){0==--n&&o()}};i.each((function(){var i=pe(this,r),n=i.on;n!==t&&((e=(t=n).copy())._.cancel.push(s),e._.interrupt.push(s),e._.end.push(l)),i.on=e})),0===n&&o()}))},[Symbol.iterator]:Oi[Symbol.iterator]};var Ii={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function Di(t,e){for(var i;!(i=t.__transition)||!(i=i[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return i}Mt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var i,r,n,o=t.__transition,a=!0;if(o){for(n in e=null==e?null:e+"",o)(i=o[n]).name===e?(r=i.state>se&&i.state<he,i.state=ue,i.timer.stop(),i.on.call(r?"interrupt":"cancel",t,t.__data__,i.index,i.group),delete o[n]):a=!1;a&&delete t.__transition}}(this,t)}))},Mt.prototype.transition=function(t){var e,i;t instanceof Zi?(e=t._id,t=t._name):(e=ji(),(i=Ii).time=Gt(),t=null==t?null:t+"");for(var r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)(a=s[c])&&de(a,t,e,c,s,i||Di(a,e));return new Zi(r,this._parents,t,e)};const{abs:qi,max:$i,min:zi}=Math;function Pi(t){return[+t[0],+t[1]]}function Ri(t){return[Pi(t[0]),Pi(t[1])]}["w","e"].map(Hi),["n","s"].map(Hi),["n","w","e","s","nw","ne","sw","se"].map(Hi);function Hi(t){return{type:t}}function Wi(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Ui(t){return(e,i)=>function(t,e){return fetch(t,e).then(Wi)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Ui("application/xml");Ui("text/html");var Yi=Ui("image/svg+xml");const Vi=Math.PI/180,Gi=180/Math.PI,Xi=.96422,Ji=1,Qi=.82521,Ki=4/29,tr=6/29,er=3*tr*tr,ir=tr*tr*tr;function rr(t){if(t instanceof nr)return new nr(t.l,t.a,t.b,t.opacity);if(t instanceof ur)return dr(t);t instanceof Xe||(t=Ve(t));var e,i,r=lr(t.r),n=lr(t.g),o=lr(t.b),a=or((.2225045*r+.7168786*n+.0606169*o)/Ji);return r===n&&n===o?e=i=a:(e=or((.4360747*r+.3850649*n+.1430804*o)/Xi),i=or((.0139322*r+.0971045*n+.7141733*o)/Qi)),new nr(116*a-16,500*(e-a),200*(a-i),t.opacity)}function nr(t,e,i,r){this.l=+t,this.a=+e,this.b=+i,this.opacity=+r}function or(t){return t>ir?Math.pow(t,1/3):t/er+Ki}function ar(t){return t>tr?t*t*t:er*(t-Ki)}function sr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function lr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function cr(t){if(t instanceof ur)return new ur(t.h,t.c,t.l,t.opacity);if(t instanceof nr||(t=rr(t)),0===t.a&&0===t.b)return new ur(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Gi;return new ur(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function hr(t,e,i,r){return 1===arguments.length?cr(t):new ur(t,e,i,null==r?1:r)}function ur(t,e,i,r){this.h=+t,this.c=+e,this.l=+i,this.opacity=+r}function dr(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Vi;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fr(t){return function(e,i){var r=t((e=hr(e)).h,(i=hr(i)).h),n=di(e.c,i.c),o=di(e.l,i.l),a=di(e.opacity,i.opacity);return function(t){return e.h=r(t),e.c=n(t),e.l=o(t),e.opacity=a(t),e+""}}}Be(nr,(function(t,e,i,r){return 1===arguments.length?rr(t):new nr(t,e,i,null==r?1:r)}),Fe(Le,{brighter(t){return new nr(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new nr(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,i=isNaN(this.b)?t:t-this.b/200;return new Xe(sr(3.1338561*(e=Xi*ar(e))-1.6168667*(t=Ji*ar(t))-.4906146*(i=Qi*ar(i))),sr(-.9787684*e+1.9161415*t+.033454*i),sr(.0719453*e-.2289914*t+1.4052427*i),this.opacity)}})),Be(ur,hr,Fe(Le,{brighter(t){return new ur(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new ur(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return dr(this).rgb()}}));const pr=fr((function(t,e){var i=e-t;return i?hi(t,i>180||i<-180?i-360*Math.round(i/360):i):ci(isNaN(t)?e:t)}));fr(di);function gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class mr extends Map{constructor(t,e=Cr){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[i,r]of t)this.set(i,r)}get(t){return super.get(yr(this,t))}has(t){return super.has(yr(this,t))}set(t,e){return super.set(xr(this,t),e)}delete(t){return super.delete(br(this,t))}}Set;function yr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):i}function xr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):(t.set(r,i),i)}function br({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function Cr(t){return null!==t&&"object"==typeof t?t.valueOf():t}const _r=Symbol("implicit");function vr(){var t=new mr,e=[],i=[],r=_r;function n(n){let o=t.get(n);if(void 0===o){if(r!==_r)return r;t.set(n,o=e.push(n)-1)}return i[o%i.length]}return n.domain=function(i){if(!arguments.length)return e.slice();e=[],t=new mr;for(const r of i)t.has(r)||t.set(r,e.push(r)-1);return n},n.range=function(t){return arguments.length?(i=Array.from(t),n):i.slice()},n.unknown=function(t){return arguments.length?(r=t,n):r},n.copy=function(){return vr(e,i).unknown(r)},gr.apply(n,arguments),n}function kr(){var t,e,i=vr().unknown(void 0),r=i.domain,n=i.range,o=0,a=1,s=!1,l=0,c=0,h=.5;function u(){var i=r().length,u=a<o,d=u?a:o,f=u?o:a;t=(f-d)/Math.max(1,i-l+2*c),s&&(t=Math.floor(t)),d+=(f-d-t*(i-l))*h,e=t*(1-l),s&&(d=Math.round(d),e=Math.round(e));var p=function(t,e,i){t=+t,e=+e,i=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+i;for(var r=-1,n=0|Math.max(0,Math.ceil((e-t)/i)),o=new Array(n);++r<n;)o[r]=t+r*i;return o}(i).map((function(e){return d+t*e}));return n(u?p.reverse():p)}return delete i.unknown,i.domain=function(t){return arguments.length?(r(t),u()):r()},i.range=function(t){return arguments.length?([o,a]=t,o=+o,a=+a,u()):[o,a]},i.rangeRound=function(t){return[o,a]=t,o=+o,a=+a,s=!0,u()},i.bandwidth=function(){return e},i.step=function(){return t},i.round=function(t){return arguments.length?(s=!!t,u()):s},i.padding=function(t){return arguments.length?(l=Math.min(1,c=+t),u()):l},i.paddingInner=function(t){return arguments.length?(l=Math.min(1,t),u()):l},i.paddingOuter=function(t){return arguments.length?(c=+t,u()):c},i.align=function(t){return arguments.length?(h=Math.max(0,Math.min(1,t)),u()):h},i.copy=function(){return kr(r(),[o,a]).round(s).paddingInner(l).paddingOuter(c).align(h)},gr.apply(u(),arguments)}const Tr=Math.sqrt(50),wr=Math.sqrt(10),Sr=Math.sqrt(2);function Br(t,e,i){const r=(e-t)/Math.max(0,i),n=Math.floor(Math.log10(r)),o=r/Math.pow(10,n),a=o>=Tr?10:o>=wr?5:o>=Sr?2:1;let s,l,c;return n<0?(c=Math.pow(10,-n)/a,s=Math.round(t*c),l=Math.round(e*c),s/c<t&&++s,l/c>e&&--l,c=-c):(c=Math.pow(10,n)*a,s=Math.round(t/c),l=Math.round(e/c),s*c<t&&++s,l*c>e&&--l),l<s&&.5<=i&&i<2?Br(t,e,2*i):[s,l,c]}function Fr(t,e,i){return Br(t=+t,e=+e,i=+i)[2]}function Lr(t,e,i){i=+i;const r=(e=+e)<(t=+t),n=r?Fr(e,t,i):Fr(t,e,i);return(r?-1:1)*(n<0?1/-n:n)}function Ar(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Mr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Er(t){let e,i,r;function n(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<0?n=e+1:o=e}while(n<o)}return n}return 2!==t.length?(e=Ar,i=(e,i)=>Ar(t(e),i),r=(e,i)=>t(e)-i):(e=t===Ar||t===Mr?t:Nr,i=t,r=t),{left:n,center:function(t,e,i=0,o=t.length){const a=n(t,e,i,o-1);return a>i&&r(t[a-1],e)>-r(t[a],e)?a-1:a},right:function(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<=0?n=e+1:o=e}while(n<o)}return n}}}function Nr(){return 0}const Zr=Er(Ar),jr=Zr.right,Or=(Zr.left,Er((function(t){return null===t?NaN:+t})).center,jr);function Ir(t,e){var i,r=e?e.length:0,n=t?Math.min(r,t.length):0,o=new Array(n),a=new Array(r);for(i=0;i<n;++i)o[i]=zr(t[i],e[i]);for(;i<r;++i)a[i]=e[i];return function(t){for(i=0;i<n;++i)a[i]=o[i](t);return a}}function Dr(t,e){var i=new Date;return t=+t,e=+e,function(r){return i.setTime(t*(1-r)+e*r),i}}function qr(t,e){var i,r={},n={};for(i in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)i in t?r[i]=zr(t[i],e[i]):n[i]=e[i];return function(t){for(i in r)n[i]=r[i](t);return n}}function $r(t,e){e||(e=[]);var i,r=t?Math.min(e.length,t.length):0,n=e.slice();return function(o){for(i=0;i<r;++i)n[i]=t[i]*(1-o)+e[i]*o;return n}}function zr(t,e){var i,r,n=typeof e;return null==e||"boolean"===n?ci(e):("number"===n?me:"string"===n?(i=We(e))?(e=i,fi):yi:e instanceof We?fi:e instanceof Date?Dr:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?Ir:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?qr:me:$r))(t,e)}function Pr(t,e){return t=+t,e=+e,function(i){return Math.round(t*(1-i)+e*i)}}function Rr(t){return+t}var Hr=[0,1];function Wr(t){return t}function Ur(t,e){return(e-=t=+t)?function(i){return(i-t)/e}:(i=isNaN(e)?NaN:.5,function(){return i});var i}function Yr(t,e,i){var r=t[0],n=t[1],o=e[0],a=e[1];return n<r?(r=Ur(n,r),o=i(a,o)):(r=Ur(r,n),o=i(o,a)),function(t){return o(r(t))}}function Vr(t,e,i){var r=Math.min(t.length,e.length)-1,n=new Array(r),o=new Array(r),a=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<r;)n[a]=Ur(t[a],t[a+1]),o[a]=i(e[a],e[a+1]);return function(e){var i=Or(t,e,1,r)-1;return o[i](n[i](e))}}function Gr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Xr(){var t,e,i,r,n,o,a=Hr,s=Hr,l=zr,c=Wr;function h(){var t,e,i,l=Math.min(a.length,s.length);return c!==Wr&&(t=a[0],e=a[l-1],t>e&&(i=t,t=e,e=i),c=function(i){return Math.max(t,Math.min(e,i))}),r=l>2?Vr:Yr,n=o=null,u}function u(e){return null==e||isNaN(e=+e)?i:(n||(n=r(a.map(t),s,l)))(t(c(e)))}return u.invert=function(i){return c(e((o||(o=r(s,a.map(t),me)))(i)))},u.domain=function(t){return arguments.length?(a=Array.from(t,Rr),h()):a.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),h()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=Pr,h()},u.clamp=function(t){return arguments.length?(c=!!t||Wr,h()):c!==Wr},u.interpolate=function(t){return arguments.length?(l=t,h()):l},u.unknown=function(t){return arguments.length?(i=t,u):i},function(i,r){return t=i,e=r,h()}}function Jr(){return Xr()(Wr,Wr)}var Qr,Kr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tn(t){if(!(e=Kr.exec(t)))throw new Error("invalid format: "+t);var e;return new en({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function en(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function rn(t,e){if((i=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var i,r=t.slice(0,i);return[r.length>1?r[0]+r.slice(2):r,+t.slice(i+1)]}function nn(t){return(t=rn(Math.abs(t)))?t[1]:NaN}function on(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+r:r.length>n+1?r.slice(0,n+1)+"."+r.slice(n+1):r+new Array(n-r.length+2).join("0")}tn.prototype=en.prototype,en.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const an={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>on(100*t,e),r:on,s:function(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1],o=n-(Qr=3*Math.max(-8,Math.min(8,Math.floor(n/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+rn(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function sn(t){return t}var ln,cn,hn,un=Array.prototype.map,dn=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function fn(t){var e,i,r=void 0===t.grouping||void 0===t.thousands?sn:(e=un.call(t.grouping,Number),i=t.thousands+"",function(t,r){for(var n=t.length,o=[],a=0,s=e[0],l=0;n>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(t.substring(n-=s,n+s)),!((l+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(i)}),n=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?sn:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(un.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=tn(t)).fill,i=t.align,u=t.sign,d=t.symbol,f=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,x=t.type;"n"===x?(g=!0,x="g"):an[x]||(void 0===m&&(m=12),y=!0,x="g"),(f||"0"===e&&"="===i)&&(f=!0,e="0",i="=");var b="$"===d?n:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",C="$"===d?o:/[%p]/.test(x)?l:"",_=an[x],v=/[defgprs%]/.test(x);function k(t){var n,o,l,d=b,k=C;if("c"===x)k=_(t)+k,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:_(Math.abs(t),m),y&&(t=function(t){t:for(var e,i=t.length,r=1,n=-1;r<i;++r)switch(t[r]){case".":n=e=r;break;case"0":0===n&&(n=r),e=r;break;default:if(!+t[r])break t;n>0&&(n=0)}return n>0?t.slice(0,n)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==u&&(T=!1),d=(T?"("===u?u:c:"-"===u||"("===u?"":u)+d,k=("s"===x?dn[8+Qr/3]:"")+k+(T&&"("===u?")":""),v)for(n=-1,o=t.length;++n<o;)if(48>(l=t.charCodeAt(n))||l>57){k=(46===l?a+t.slice(n+1):t.slice(n))+k,t=t.slice(0,n);break}}g&&!f&&(t=r(t,1/0));var w=d.length+t.length+k.length,S=w<p?new Array(p-w+1).join(e):"";switch(g&&f&&(t=r(S+t,S.length?p-k.length:1/0),S=""),i){case"<":t=d+t+k+S;break;case"=":t=d+S+t+k;break;case"^":t=S.slice(0,w=S.length>>1)+d+t+k+S.slice(w);break;default:t=S+d+t+k}return s(t)}return m=void 0===m?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:u,formatPrefix:function(t,e){var i=u(((t=tn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3))),n=Math.pow(10,-r),o=dn[8+r/3];return function(t){return i(n*t)+o}}}}function pn(t,e,i,r){var n,o=Lr(t,e,i);switch((r=tn(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(n=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3)))-nn(Math.abs(t)))}(o,a))||(r.precision=n),hn(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(n=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,nn(e)-nn(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=n-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(n=function(t){return Math.max(0,-nn(Math.abs(t)))}(o))||(r.precision=n-2*("%"===r.type))}return cn(r)}function gn(t){var e=t.domain;return t.ticks=function(t){var i=e();return function(t,e,i){if(!((i=+i)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[n,o,a]=r?Br(e,t,i):Br(t,e,i);if(!(o>=n))return[];const s=o-n+1,l=new Array(s);if(r)if(a<0)for(let c=0;c<s;++c)l[c]=(o-c)/-a;else for(let c=0;c<s;++c)l[c]=(o-c)*a;else if(a<0)for(let c=0;c<s;++c)l[c]=(n+c)/-a;else for(let c=0;c<s;++c)l[c]=(n+c)*a;return l}(i[0],i[i.length-1],null==t?10:t)},t.tickFormat=function(t,i){var r=e();return pn(r[0],r[r.length-1],null==t?10:t,i)},t.nice=function(i){null==i&&(i=10);var r,n,o=e(),a=0,s=o.length-1,l=o[a],c=o[s],h=10;for(c<l&&(n=l,l=c,c=n,n=a,a=s,s=n);h-- >0;){if((n=Fr(l,c,i))===r)return o[a]=l,o[s]=c,e(o);if(n>0)l=Math.floor(l/n)*n,c=Math.ceil(c/n)*n;else{if(!(n<0))break;l=Math.ceil(l*n)/n,c=Math.floor(c*n)/n}r=n}return t},t}function mn(){var t=Jr();return t.copy=function(){return Gr(t,mn())},gr.apply(t,arguments),gn(t)}ln=fn({thousands:",",grouping:[3],currency:["$",""]}),cn=ln.format,hn=ln.formatPrefix;const yn=1e3,xn=6e4,bn=36e5,Cn=864e5,_n=6048e5,vn=2592e6,kn=31536e6,Tn=new Date,wn=new Date;function Sn(t,e,i,r){function n(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return n.floor=e=>(t(e=new Date(+e)),e),n.ceil=i=>(t(i=new Date(i-1)),e(i,1),t(i),i),n.round=t=>{const e=n(t),i=n.ceil(t);return t-e<i-t?e:i},n.offset=(t,i)=>(e(t=new Date(+t),null==i?1:Math.floor(i)),t),n.range=(i,r,o)=>{const a=[];if(i=n.ceil(i),o=null==o?1:Math.floor(o),!(i<r&&o>0))return a;let s;do{a.push(s=new Date(+i)),e(i,o),t(i)}while(s<i&&i<r);return a},n.filter=i=>Sn((e=>{if(e>=e)for(;t(e),!i(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!i(t););else for(;--r>=0;)for(;e(t,1),!i(t););})),i&&(n.count=(e,r)=>(Tn.setTime(+e),wn.setTime(+r),t(Tn),t(wn),Math.floor(i(Tn,wn))),n.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?n.filter(r?e=>r(e)%t==0:e=>n.count(0,e)%t==0):n:null)),n}const Bn=Sn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Bn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Sn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Bn:null);Bn.range;const Fn=Sn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yn)}),((t,e)=>(e-t)/yn),(t=>t.getUTCSeconds())),Ln=(Fn.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getMinutes()))),An=(Ln.range,Sn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getUTCMinutes()))),Mn=(An.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn-t.getMinutes()*xn)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getHours()))),En=(Mn.range,Sn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*bn)}),((t,e)=>(e-t)/bn),(t=>t.getUTCHours()))),Nn=(En.range,Sn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/Cn),(t=>t.getDate()-1))),Zn=(Nn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCDate()-1))),jn=(Zn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/Cn),(t=>Math.floor(t/Cn))));jn.range;function On(t){return Sn((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/_n))}const In=On(0),Dn=On(1),qn=On(2),$n=On(3),zn=On(4),Pn=On(5),Rn=On(6);In.range,Dn.range,qn.range,$n.range,zn.range,Pn.range,Rn.range;function Hn(t){return Sn((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/_n))}const Wn=Hn(0),Un=Hn(1),Yn=Hn(2),Vn=Hn(3),Gn=Hn(4),Xn=Hn(5),Jn=Hn(6),Qn=(Wn.range,Un.range,Yn.range,Vn.range,Gn.range,Xn.range,Jn.range,Sn((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Kn=(Qn.range,Sn((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),to=(Kn.range,Sn((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));to.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,i)=>{e.setFullYear(e.getFullYear()+i*t)})):null;to.range;const eo=Sn((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));eo.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,i)=>{e.setUTCFullYear(e.getUTCFullYear()+i*t)})):null;eo.range;function io(t,e,i,r,n,o){const a=[[Fn,1,yn],[Fn,5,5e3],[Fn,15,15e3],[Fn,30,3e4],[o,1,xn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[n,1,bn],[n,3,108e5],[n,6,216e5],[n,12,432e5],[r,1,Cn],[r,2,1728e5],[i,1,_n],[e,1,vn],[e,3,7776e6],[t,1,kn]];function s(e,i,r){const n=Math.abs(i-e)/r,o=Er((([,,t])=>t)).right(a,n);if(o===a.length)return t.every(Lr(e/kn,i/kn,r));if(0===o)return Bn.every(Math.max(Lr(e,i,r),1));const[s,l]=a[n/a[o-1][2]<a[o][2]/n?o-1:o];return s.every(l)}return[function(t,e,i){const r=e<t;r&&([t,e]=[e,t]);const n=i&&"function"==typeof i.range?i:s(t,e,i),o=n?n.range(t,+e+1):[];return r?o.reverse():o},s]}const[ro,no]=io(eo,Kn,Wn,jn,En,An),[oo,ao]=io(to,Qn,In,Nn,Mn,Ln);function so(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function lo(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function co(t,e,i){return{y:t,m:e,d:i,H:0,M:0,S:0,L:0}}var ho,uo,fo={"-":"",_:" ",0:"0"},po=/^\s*\d+/,go=/^%/,mo=/[\\^$*+?|[\]().{}]/g;function yo(t,e,i){var r=t<0?"-":"",n=(r?-t:t)+"",o=n.length;return r+(o<i?new Array(i-o+1).join(e)+n:n)}function xo(t){return t.replace(mo,"\\$&")}function bo(t){return new RegExp("^(?:"+t.map(xo).join("|")+")","i")}function Co(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function _o(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.w=+r[0],i+r[0].length):-1}function vo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.u=+r[0],i+r[0].length):-1}function ko(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.U=+r[0],i+r[0].length):-1}function To(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.V=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function So(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function Bo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),i+r[0].length):-1}function Fo(t,e,i){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(i,i+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),i+r[0].length):-1}function Lo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.q=3*r[0]-3,i+r[0].length):-1}function Ao(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.m=r[0]-1,i+r[0].length):-1}function Mo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.d=+r[0],i+r[0].length):-1}function Eo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.m=0,t.d=+r[0],i+r[0].length):-1}function No(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.H=+r[0],i+r[0].length):-1}function Zo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function jo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.S=+r[0],i+r[0].length):-1}function Oo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.L=+r[0],i+r[0].length):-1}function Io(t,e,i){var r=po.exec(e.slice(i,i+6));return r?(t.L=Math.floor(r[0]/1e3),i+r[0].length):-1}function Do(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function qo(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function $o(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function zo(t,e){return yo(t.getDate(),e,2)}function Po(t,e){return yo(t.getHours(),e,2)}function Ro(t,e){return yo(t.getHours()%12||12,e,2)}function Ho(t,e){return yo(1+Nn.count(to(t),t),e,3)}function Wo(t,e){return yo(t.getMilliseconds(),e,3)}function Uo(t,e){return Wo(t,e)+"000"}function Yo(t,e){return yo(t.getMonth()+1,e,2)}function Vo(t,e){return yo(t.getMinutes(),e,2)}function Go(t,e){return yo(t.getSeconds(),e,2)}function Xo(t){var e=t.getDay();return 0===e?7:e}function Jo(t,e){return yo(In.count(to(t)-1,t),e,2)}function Qo(t){var e=t.getDay();return e>=4||0===e?zn(t):zn.ceil(t)}function Ko(t,e){return t=Qo(t),yo(zn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ta(t){return t.getDay()}function ea(t,e){return yo(Dn.count(to(t)-1,t),e,2)}function ia(t,e){return yo(t.getFullYear()%100,e,2)}function ra(t,e){return yo((t=Qo(t)).getFullYear()%100,e,2)}function na(t,e){return yo(t.getFullYear()%1e4,e,4)}function oa(t,e){var i=t.getDay();return yo((t=i>=4||0===i?zn(t):zn.ceil(t)).getFullYear()%1e4,e,4)}function aa(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+yo(e/60|0,"0",2)+yo(e%60,"0",2)}function sa(t,e){return yo(t.getUTCDate(),e,2)}function la(t,e){return yo(t.getUTCHours(),e,2)}function ca(t,e){return yo(t.getUTCHours()%12||12,e,2)}function ha(t,e){return yo(1+Zn.count(eo(t),t),e,3)}function ua(t,e){return yo(t.getUTCMilliseconds(),e,3)}function da(t,e){return ua(t,e)+"000"}function fa(t,e){return yo(t.getUTCMonth()+1,e,2)}function pa(t,e){return yo(t.getUTCMinutes(),e,2)}function ga(t,e){return yo(t.getUTCSeconds(),e,2)}function ma(t){var e=t.getUTCDay();return 0===e?7:e}function ya(t,e){return yo(Wn.count(eo(t)-1,t),e,2)}function xa(t){var e=t.getUTCDay();return e>=4||0===e?Gn(t):Gn.ceil(t)}function ba(t,e){return t=xa(t),yo(Gn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function Ca(t){return t.getUTCDay()}function _a(t,e){return yo(Un.count(eo(t)-1,t),e,2)}function va(t,e){return yo(t.getUTCFullYear()%100,e,2)}function ka(t,e){return yo((t=xa(t)).getUTCFullYear()%100,e,2)}function Ta(t,e){return yo(t.getUTCFullYear()%1e4,e,4)}function wa(t,e){var i=t.getUTCDay();return yo((t=i>=4||0===i?Gn(t):Gn.ceil(t)).getUTCFullYear()%1e4,e,4)}function Sa(){return"+0000"}function Ba(){return"%"}function Fa(t){return+t}function La(t){return Math.floor(+t/1e3)}function Aa(t){return new Date(t)}function Ma(t){return t instanceof Date?+t:+new Date(+t)}function Ea(t,e,i,r,n,o,a,s,l,c){var h=Jr(),u=h.invert,d=h.domain,f=c(".%L"),p=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),x=c("%b %d"),b=c("%B"),C=c("%Y");function _(t){return(l(t)<t?f:s(t)<t?p:a(t)<t?g:o(t)<t?m:r(t)<t?n(t)<t?y:x:i(t)<t?b:C)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?d(Array.from(t,Ma)):d().map(Aa)},h.ticks=function(e){var i=d();return t(i[0],i[i.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?_:c(e)},h.nice=function(t){var i=d();return t&&"function"==typeof t.range||(t=e(i[0],i[i.length-1],null==t?10:t)),t?d(function(t,e){var i,r=0,n=(t=t.slice()).length-1,o=t[r],a=t[n];return a<o&&(i=r,r=n,n=i,i=o,o=a,a=i),t[r]=e.floor(o),t[n]=e.ceil(a),t}(i,t)):h},h.copy=function(){return Gr(h,Ea(t,e,i,r,n,o,a,s,l,c))},h}function Na(){return gr.apply(Ea(oo,ao,to,Qn,In,Nn,Mn,Ln,Fn,uo).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){ho=function(t){var e=t.dateTime,i=t.date,r=t.time,n=t.periods,o=t.days,a=t.shortDays,s=t.months,l=t.shortMonths,c=bo(n),h=Co(n),u=bo(o),d=Co(o),f=bo(a),p=Co(a),g=bo(s),m=Co(s),y=bo(l),x=Co(l),b={a:function(t){return a[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:zo,e:zo,f:Uo,g:ra,G:oa,H:Po,I:Ro,j:Ho,L:Wo,m:Yo,M:Vo,p:function(t){return n[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Fa,s:La,S:Go,u:Xo,U:Jo,V:Ko,w:ta,W:ea,x:null,X:null,y:ia,Y:na,Z:aa,"%":Ba},C={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:sa,e:sa,f:da,g:ka,G:wa,H:la,I:ca,j:ha,L:ua,m:fa,M:pa,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Fa,s:La,S:ga,u:ma,U:ya,V:ba,w:Ca,W:_a,x:null,X:null,y:va,Y:Ta,Z:Sa,"%":Ba},_={a:function(t,e,i){var r=f.exec(e.slice(i));return r?(t.w=p.get(r[0].toLowerCase()),i+r[0].length):-1},A:function(t,e,i){var r=u.exec(e.slice(i));return r?(t.w=d.get(r[0].toLowerCase()),i+r[0].length):-1},b:function(t,e,i){var r=y.exec(e.slice(i));return r?(t.m=x.get(r[0].toLowerCase()),i+r[0].length):-1},B:function(t,e,i){var r=g.exec(e.slice(i));return r?(t.m=m.get(r[0].toLowerCase()),i+r[0].length):-1},c:function(t,i,r){return T(t,e,i,r)},d:Mo,e:Mo,f:Io,g:Bo,G:So,H:No,I:No,j:Eo,L:Oo,m:Ao,M:Zo,p:function(t,e,i){var r=c.exec(e.slice(i));return r?(t.p=h.get(r[0].toLowerCase()),i+r[0].length):-1},q:Lo,Q:qo,s:$o,S:jo,u:vo,U:ko,V:To,w:_o,W:wo,x:function(t,e,r){return T(t,i,e,r)},X:function(t,e,i){return T(t,r,e,i)},y:Bo,Y:So,Z:Fo,"%":Do};function v(t,e){return function(i){var r,n,o,a=[],s=-1,l=0,c=t.length;for(i instanceof Date||(i=new Date(+i));++s<c;)37===t.charCodeAt(s)&&(a.push(t.slice(l,s)),null!=(n=fo[r=t.charAt(++s)])?r=t.charAt(++s):n="e"===r?" ":"0",(o=e[r])&&(r=o(i,n)),a.push(r),l=s+1);return a.push(t.slice(l,s)),a.join("")}}function k(t,e){return function(i){var r,n,o=co(1900,void 0,1);if(T(o,t,i+="",0)!=i.length)return null;if("Q"in o)return new Date(o.Q);if("s"in o)return new Date(1e3*o.s+("L"in o?o.L:0));if(e&&!("Z"in o)&&(o.Z=0),"p"in o&&(o.H=o.H%12+12*o.p),void 0===o.m&&(o.m="q"in o?o.q:0),"V"in o){if(o.V<1||o.V>53)return null;"w"in o||(o.w=1),"Z"in o?(n=(r=lo(co(o.y,0,1))).getUTCDay(),r=n>4||0===n?Un.ceil(r):Un(r),r=Zn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(n=(r=so(co(o.y,0,1))).getDay(),r=n>4||0===n?Dn.ceil(r):Dn(r),r=Nn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),n="Z"in o?lo(co(o.y,0,1)).getUTCDay():so(co(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(n+5)%7:o.w+7*o.U-(n+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,lo(o)):so(o)}}function T(t,e,i,r){for(var n,o,a=0,s=e.length,l=i.length;a<s;){if(r>=l)return-1;if(37===(n=e.charCodeAt(a++))){if(n=e.charAt(a++),!(o=_[n in fo?e.charAt(a++):n])||(r=o(t,i,r))<0)return-1}else if(n!=i.charCodeAt(r++))return-1}return r}return b.x=v(i,b),b.X=v(r,b),b.c=v(e,b),C.x=v(i,C),C.X=v(r,C),C.c=v(e,C),{format:function(t){var e=v(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=v(t+="",C);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}(t),uo=ho.format,ho.parse,ho.utcFormat,ho.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const Za=function(t){for(var e=t.length/6|0,i=new Array(e),r=0;r<e;)i[r]="#"+t.slice(6*r,6*++r);return i}("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");function ja(t){return"string"==typeof t?new Lt([[document.querySelector(t)]],[document.documentElement]):new Lt([[t]],Ft)}function Oa(t){return"string"==typeof t?new Lt([document.querySelectorAll(t)],[document.documentElement]):new Lt([_(t)],Ft)}function Ia(t){return function(){return t}}const Da=Math.abs,qa=Math.atan2,$a=Math.cos,za=Math.max,Pa=Math.min,Ra=Math.sin,Ha=Math.sqrt,Wa=1e-12,Ua=Math.PI,Ya=Ua/2,Va=2*Ua;function Ga(t){return t>=1?Ya:t<=-1?-Ya:Math.asin(t)}const Xa=Math.PI,Ja=2*Xa,Qa=1e-6,Ka=Ja-Qa;function ts(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=arguments[e]+t[e]}class es{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?ts:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ts;const i=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*i)/i+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,i,r){this._append`Q${+t},${+e},${this._x1=+i},${this._y1=+r}`}bezierCurveTo(t,e,i,r,n,o){this._append`C${+t},${+e},${+i},${+r},${this._x1=+n},${this._y1=+o}`}arcTo(t,e,i,r,n){if(t=+t,e=+e,i=+i,r=+r,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=this._x1,a=this._y1,s=i-t,l=r-e,c=o-t,h=a-e,u=c*c+h*h;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Qa)if(Math.abs(h*s-l*c)>Qa&&n){let d=i-o,f=r-a,p=s*s+l*l,g=d*d+f*f,m=Math.sqrt(p),y=Math.sqrt(u),x=n*Math.tan((Xa-Math.acos((p+u-g)/(2*m*y)))/2),b=x/y,C=x/m;Math.abs(b-1)>Qa&&this._append`L${t+b*c},${e+b*h}`,this._append`A${n},${n},0,0,${+(h*d>c*f)},${this._x1=t+C*s},${this._y1=e+C*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,i,r,n,o){if(t=+t,e=+e,o=!!o,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=i*Math.cos(r),s=i*Math.sin(r),l=t+a,c=e+s,h=1^o,u=o?r-n:n-r;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>Qa||Math.abs(this._y1-c)>Qa)&&this._append`L${l},${c}`,i&&(u<0&&(u=u%Ja+Ja),u>Ka?this._append`A${i},${i},0,1,${h},${t-a},${e-s}A${i},${i},0,1,${h},${this._x1=l},${this._y1=c}`:u>Qa&&this._append`A${i},${i},0,${+(u>=Xa)},${h},${this._x1=t+i*Math.cos(n)},${this._y1=e+i*Math.sin(n)}`)}rect(t,e,i,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${i=+i}v${+r}h${-i}Z`}toString(){return this._}}function is(t){let e=3;return t.digits=function(i){if(!arguments.length)return e;if(null==i)e=null;else{const t=Math.floor(i);if(!(t>=0))throw new RangeError(`invalid digits: ${i}`);e=t}return t},()=>new es(e)}function rs(t){return t.innerRadius}function ns(t){return t.outerRadius}function os(t){return t.startAngle}function as(t){return t.endAngle}function ss(t){return t&&t.padAngle}function ls(t,e,i,r,n,o,a){var s=t-i,l=e-r,c=(a?o:-o)/Ha(s*s+l*l),h=c*l,u=-c*s,d=t+h,f=e+u,p=i+h,g=r+u,m=(d+p)/2,y=(f+g)/2,x=p-d,b=g-f,C=x*x+b*b,_=n-o,v=d*g-p*f,k=(b<0?-1:1)*Ha(za(0,_*_*C-v*v)),T=(v*b-x*k)/C,w=(-v*x-b*k)/C,S=(v*b+x*k)/C,B=(-v*x+b*k)/C,F=T-m,L=w-y,A=S-m,M=B-y;return F*F+L*L>A*A+M*M&&(T=S,w=B),{cx:T,cy:w,x01:-h,y01:-u,x11:T*(n/_-1),y11:w*(n/_-1)}}function cs(){var t=rs,e=ns,i=Ia(0),r=null,n=os,o=as,a=ss,s=null,l=is(c);function c(){var c,h,u,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=n.apply(this,arguments)-Ya,g=o.apply(this,arguments)-Ya,m=Da(g-p),y=g>p;if(s||(s=c=l()),f<d&&(h=f,f=d,d=h),f>Wa)if(m>Va-Wa)s.moveTo(f*$a(p),f*Ra(p)),s.arc(0,0,f,p,g,!y),d>Wa&&(s.moveTo(d*$a(g),d*Ra(g)),s.arc(0,0,d,g,p,y));else{var x,b,C=p,_=g,v=p,k=g,T=m,w=m,S=a.apply(this,arguments)/2,B=S>Wa&&(r?+r.apply(this,arguments):Ha(d*d+f*f)),F=Pa(Da(f-d)/2,+i.apply(this,arguments)),L=F,A=F;if(B>Wa){var M=Ga(B/d*Ra(S)),E=Ga(B/f*Ra(S));(T-=2*M)>Wa?(v+=M*=y?1:-1,k-=M):(T=0,v=k=(p+g)/2),(w-=2*E)>Wa?(C+=E*=y?1:-1,_-=E):(w=0,C=_=(p+g)/2)}var N=f*$a(C),Z=f*Ra(C),j=d*$a(k),O=d*Ra(k);if(F>Wa){var I,D=f*$a(_),q=f*Ra(_),$=d*$a(v),z=d*Ra(v);if(m<Ua)if(I=function(t,e,i,r,n,o,a,s){var l=i-t,c=r-e,h=a-n,u=s-o,d=u*l-h*c;if(!(d*d<Wa))return[t+(d=(h*(e-o)-u*(t-n))/d)*l,e+d*c]}(N,Z,$,z,D,q,j,O)){var P=N-I[0],R=Z-I[1],H=D-I[0],W=q-I[1],U=1/Ra(((u=(P*H+R*W)/(Ha(P*P+R*R)*Ha(H*H+W*W)))>1?0:u<-1?Ua:Math.acos(u))/2),Y=Ha(I[0]*I[0]+I[1]*I[1]);L=Pa(F,(d-Y)/(U-1)),A=Pa(F,(f-Y)/(U+1))}else L=A=0}w>Wa?A>Wa?(x=ls($,z,N,Z,f,A,y),b=ls(D,q,j,O,f,A,y),s.moveTo(x.cx+x.x01,x.cy+x.y01),A<F?s.arc(x.cx,x.cy,A,qa(x.y01,x.x01),qa(b.y01,b.x01),!y):(s.arc(x.cx,x.cy,A,qa(x.y01,x.x01),qa(x.y11,x.x11),!y),s.arc(0,0,f,qa(x.cy+x.y11,x.cx+x.x11),qa(b.cy+b.y11,b.cx+b.x11),!y),s.arc(b.cx,b.cy,A,qa(b.y11,b.x11),qa(b.y01,b.x01),!y))):(s.moveTo(N,Z),s.arc(0,0,f,C,_,!y)):s.moveTo(N,Z),d>Wa&&T>Wa?L>Wa?(x=ls(j,O,D,q,d,-L,y),b=ls(N,Z,$,z,d,-L,y),s.lineTo(x.cx+x.x01,x.cy+x.y01),L<F?s.arc(x.cx,x.cy,L,qa(x.y01,x.x01),qa(b.y01,b.x01),!y):(s.arc(x.cx,x.cy,L,qa(x.y01,x.x01),qa(x.y11,x.x11),!y),s.arc(0,0,d,qa(x.cy+x.y11,x.cx+x.x11),qa(b.cy+b.y11,b.cx+b.x11),y),s.arc(b.cx,b.cy,L,qa(b.y11,b.x11),qa(b.y01,b.x01),!y))):s.arc(0,0,d,k,v,y):s.lineTo(j,O)}else s.moveTo(0,0);if(s.closePath(),c)return s=null,c+""||null}return c.centroid=function(){var i=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+n.apply(this,arguments)+ +o.apply(this,arguments))/2-Ua/2;return[$a(r)*i,Ra(r)*i]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Ia(+t),c):e},c.cornerRadius=function(t){return arguments.length?(i="function"==typeof t?t:Ia(+t),c):i},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Ia(+t),c):r},c.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:Ia(+t),c):n},c.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:Ia(+t),c):o},c.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ia(+t),c):a},c.context=function(t){return arguments.length?(s=null==t?null:t,c):s},c}es.prototype;Array.prototype.slice;function hs(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function us(t){this._context=t}function ds(t){return new us(t)}function fs(t){return t[0]}function ps(t){return t[1]}function gs(t,e){var i=Ia(!0),r=null,n=ds,o=null,a=is(s);function s(s){var l,c,h,u=(s=hs(s)).length,d=!1;for(null==r&&(o=n(h=a())),l=0;l<=u;++l)!(l<u&&i(c=s[l],l,s))===d&&((d=!d)?o.lineStart():o.lineEnd()),d&&o.point(+t(c,l,s),+e(c,l,s));if(h)return o=null,h+""||null}return t="function"==typeof t?t:void 0===t?fs:Ia(t),e="function"==typeof e?e:void 0===e?ps:Ia(e),s.x=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),s):t},s.y=function(t){return arguments.length?(e="function"==typeof t?t:Ia(+t),s):e},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:Ia(!!t),s):i},s.curve=function(t){return arguments.length?(n=t,null!=r&&(o=n(r)),s):n},s.context=function(t){return arguments.length?(null==t?r=o=null:o=n(r=t),s):r},s}function ms(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function ys(t){return t}function xs(){var t=ys,e=ms,i=null,r=Ia(0),n=Ia(Va),o=Ia(0);function a(a){var s,l,c,h,u,d=(a=hs(a)).length,f=0,p=new Array(d),g=new Array(d),m=+r.apply(this,arguments),y=Math.min(Va,Math.max(-Va,n.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,o.apply(this,arguments)),b=x*(y<0?-1:1);for(s=0;s<d;++s)(u=g[p[s]=s]=+t(a[s],s,a))>0&&(f+=u);for(null!=e?p.sort((function(t,i){return e(g[t],g[i])})):null!=i&&p.sort((function(t,e){return i(a[t],a[e])})),s=0,c=f?(y-d*b)/f:0;s<d;++s,m=h)l=p[s],h=m+((u=g[l])>0?u*c:0)+b,g[l]={data:a[l],index:s,value:u,startAngle:m,endAngle:h,padAngle:x};return g}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),a):t},a.sortValues=function(t){return arguments.length?(e=t,i=null,a):e},a.sort=function(t){return arguments.length?(i=t,e=null,a):i},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Ia(+t),a):r},a.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:Ia(+t),a):n},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Ia(+t),a):o},a}function bs(){}function Cs(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function _s(t){this._context=t}function vs(t){return new _s(t)}function ks(t){this._context=t}function Ts(t){return new ks(t)}function ws(t){this._context=t}function Ss(t){return new ws(t)}us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},_s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Cs(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Cs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ks.prototype={areaStart:bs,areaEnd:bs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Cs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ws.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:Cs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Bs{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Fs(t){return new Bs(t,!0)}function Ls(t){return new Bs(t,!1)}function As(t,e){this._basis=new _s(t),this._beta=e}As.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r,n=t[0],o=e[0],a=t[i]-n,s=e[i]-o,l=-1;++l<=i;)r=l/i,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+r*a),this._beta*e[l]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Ms=function t(e){function i(t){return 1===e?new _s(t):new As(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function Es(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function Ns(t,e){this._context=t,this._k=(1-e)/6}Ns.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Es(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Zs=function t(e){function i(t){return new Ns(t,e)}return i.tension=function(e){return t(+e)},i}(0);function js(t,e){this._context=t,this._k=(1-e)/6}js.prototype={areaStart:bs,areaEnd:bs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Os=function t(e){function i(t){return new js(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Is(t,e){this._context=t,this._k=(1-e)/6}Is.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ds=function t(e){function i(t){return new Is(t,e)}return i.tension=function(e){return t(+e)},i}(0);function qs(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Wa){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Wa){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-e*t._l12_2a)/h,a=(a*c+t._y1*t._l23_2a-i*t._l12_2a)/h}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function $s(t,e){this._context=t,this._alpha=e}$s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:qs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const zs=function t(e){function i(t){return e?new $s(t,e):new Ns(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ps(t,e){this._context=t,this._alpha=e}Ps.prototype={areaStart:bs,areaEnd:bs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:qs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Rs=function t(e){function i(t){return e?new Ps(t,e):new js(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Hs(t,e){this._context=t,this._alpha=e}Hs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:qs(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ws=function t(e){function i(t){return e?new Hs(t,e):new Is(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Us(t){this._context=t}function Ys(t){return new Us(t)}function Vs(t){return t<0?-1:1}function Gs(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Vs(o)+Vs(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Xs(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Js(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function Qs(t){this._context=t}function Ks(t){this._context=new tl(t)}function tl(t){this._context=t}function el(t){return new Qs(t)}function il(t){return new Ks(t)}function rl(t){this._context=t}function nl(t){var e,i,r=t.length-1,n=new Array(r),o=new Array(r),a=new Array(r);for(n[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e<r-1;++e)n[e]=1,o[e]=4,a[e]=4*t[e]+2*t[e+1];for(n[r-1]=2,o[r-1]=7,a[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)i=n[e]/o[e-1],o[e]-=i,a[e]-=i*a[e-1];for(n[r-1]=a[r-1]/o[r-1],e=r-2;e>=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[r-1]=(t[r]+n[r-1])/2,e=0;e<r-1;++e)o[e]=2*t[e+1]-n[e+1];return[n,o]}function ol(t){return new rl(t)}function al(t,e){this._context=t,this._t=e}function sl(t){return new al(t,.5)}function ll(t){return new al(t,0)}function cl(t){return new al(t,1)}function hl(t,e,i){this.k=t,this.x=e,this.y=i}Us.prototype={areaStart:bs,areaEnd:bs,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Qs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Js(this,this._t0,Xs(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Js(this,Xs(this,i=Gs(this,t,e)),i);break;default:Js(this,this._t0,i=Gs(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}},(Ks.prototype=Object.create(Qs.prototype)).point=function(t,e){Qs.prototype.point.call(this,e,t)},tl.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}},rl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===i)this._context.lineTo(t[1],e[1]);else for(var r=nl(t),n=nl(e),o=0,a=1;a<i;++o,++a)this._context.bezierCurveTo(r[0][o],n[0][o],r[1][o],n[1][o],t[a],e[a]);(this._line||0!==this._line&&1===i)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},al.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}}this._x=t,this._y=e}},hl.prototype={constructor:hl,scale:function(t){return 1===t?this:new hl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new hl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new hl(1,0,0);hl.prototype},21883:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(61691),n=i(82142);const o=class{constructor(){this.type=n.w.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=n.w.ALL}is(t){return this.type===t}};const a=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new o}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=n.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.Z.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.Z.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.Z.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.Z.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.w.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},71610:(t,e,i)=>{"use strict";i.d(e,{Z:()=>g});var r=i(21883),n=i(82142);const o={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(o.re);if(!e)return;const i=e[1],n=parseInt(i,16),a=i.length,s=a%4==0,l=a>4,c=l?1:17,h=l?8:4,u=s?0:-1,d=l?255:15;return r.Z.set({r:(n>>h*(u+3)&d)*c,g:(n>>h*(u+2)&d)*c,b:(n>>h*(u+1)&d)*c,a:s?(n&d)*c/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}${n.Q[Math.round(255*o)]}`:`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}`}},a=o;var s=i(61691);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,i]=e;switch(i){case"grad":return s.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return s.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.Z.channel.clamp.h(360*parseFloat(t))}}return s.Z.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const i=t.match(l.re);if(!i)return;const[,n,o,a,c,h]=i;return r.Z.set({h:l._hue2deg(n),s:s.Z.channel.clamp.s(parseFloat(o)),l:s.Z.channel.clamp.l(parseFloat(a)),a:c?s.Z.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%, ${n})`:`hsl(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%)`}},c=l,h={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return a.parse(e)},stringify:t=>{const e=a.stringify(t);for(const i in h.colors)if(h.colors[i]===e)return i}},u=h,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const i=t.match(d.re);if(!i)return;const[,n,o,a,l,c,h,u,f]=i;return r.Z.set({r:s.Z.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:s.Z.channel.clamp.g(l?2.55*parseFloat(a):parseFloat(a)),b:s.Z.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.Z.channel.clamp.a(f?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)}, ${s.Z.lang.round(n)})`:`rgb(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)})`}},f=d,p={format:{keyword:h,hex:a,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=a.parse(t)||f.parse(t)||c.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(n.w.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?f.stringify(t):a.stringify(t)},g=p},82142:(t,e,i)=>{"use strict";i.d(e,{Q:()=>n,w:()=>o});var r=i(61691);const n={};for(let a=0;a<=255;a++)n[a]=r.Z.unit.dec2hex(a);const o={ALL:0,RGB:1,HSL:2}},26174:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(61691),n=i(71610);const o=(t,e,i)=>{const o=n.Z.parse(t),a=o[e],s=r.Z.channel.clamp[e](a+i);return a!==s&&(o[e]=s),n.Z.stringify(o)}},53438:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(61691),n=i(71610);const o=(t,e)=>{const i=n.Z.parse(t);for(const n in e)i[n]=r.Z.channel.clamp[n](e[n]);return n.Z.stringify(i)}},7201:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(26174);const n=(t,e)=>(0,r.Z)(t,"l",-e)},91619:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(61691),n=i(71610);const o=t=>{const{r:e,g:i,b:o}=n.Z.parse(t),a=.2126*r.Z.channel.toLinear(e)+.7152*r.Z.channel.toLinear(i)+.0722*r.Z.channel.toLinear(o);return r.Z.lang.round(a)},a=t=>o(t)>=.5,s=t=>!a(t)},12281:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(26174);const n=(t,e)=>(0,r.Z)(t,"l",e)},51117:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(61691),n=i(21883),o=i(71610),a=i(53438);const s=(t,e,i=0,s=1)=>{if("number"!=typeof t)return(0,a.Z)(t,{a:e});const l=n.Z.set({r:r.Z.channel.clamp.r(t),g:r.Z.channel.clamp.g(e),b:r.Z.channel.clamp.b(i),a:r.Z.channel.clamp.a(s)});return o.Z.stringify(l)}},61691:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});const r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},n)=>{if(!e)return 2.55*i;t/=360,e/=100;const o=(i/=100)<.5?i*(1+e):i+e-i*e,a=2*i-o;switch(n){case"r":return 255*r.hue2rgb(a,o,t+1/3);case"g":return 255*r.hue2rgb(a,o,t);case"b":return 255*r.hue2rgb(a,o,t-1/3)}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if("l"===r)return 100*a;if(n===o)return 0;const s=n-o;if("s"===r)return 100*(a>.5?s/(2-n-o):s/(n+o));switch(n){case t:return 60*((e-i)/s+(e<i?6:0));case e:return 60*((i-t)/s+2);case i:return 60*((t-e)/s+4);default:return-1}}},n={channel:r,lang:{clamp:(t,e,i)=>e>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},67308:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});const r=function(){this.__data__=[],this.size=0};var n=i(79651);const o=function(t,e){for(var i=t.length;i--;)if((0,n.Z)(t[i][0],e))return i;return-1};var a=Array.prototype.splice;const s=function(t){var e=this.__data__,i=o(e,t);return!(i<0)&&(i==e.length-1?e.pop():a.call(e,i,1),--this.size,!0)};const l=function(t){var e=this.__data__,i=o(e,t);return i<0?void 0:e[i][1]};const c=function(t){return o(this.__data__,t)>-1};const h=function(t,e){var i=this.__data__,r=o(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=s,u.prototype.get=l,u.prototype.has=c,u.prototype.set=h;const d=u},86183:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"Map")},37834:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});const r=(0,i(62508).Z)(Object,"create");const n=function(){this.__data__=r?r(null):{},this.size=0};const o=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var a=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(r){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return a.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const c=function(t){var e=this.__data__;return r?void 0!==e[t]:l.call(e,t)};const h=function(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=s,u.prototype.has=c,u.prototype.set=h;const d=u;var f=i(67308),p=i(86183);const g=function(){this.size=0,this.__data__={hash:new d,map:new(p.Z||f.Z),string:new d}};const m=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const y=function(t,e){var i=t.__data__;return m(e)?i["string"==typeof e?"string":"hash"]:i.map};const x=function(t){var e=y(this,t).delete(t);return this.size-=e?1:0,e};const b=function(t){return y(this,t).get(t)};const C=function(t){return y(this,t).has(t)};const _=function(t,e){var i=y(this,t),r=i.size;return i.set(t,e),this.size+=i.size==r?0:1,this};function v(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}v.prototype.clear=g,v.prototype.delete=x,v.prototype.get=b,v.prototype.has=C,v.prototype.set=_;const k=v},93203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"Set")},31667:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(67308);const n=function(){this.__data__=new r.Z,this.size=0};const o=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};const a=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=i(86183),c=i(37834);const h=function(t,e){var i=this.__data__;if(i instanceof r.Z){var n=i.__data__;if(!l.Z||n.length<199)return n.push([t,e]),this.size=++i.size,this;i=this.__data__=new c.Z(n)}return i.set(t,e),this.size=i.size,this};function u(t){var e=this.__data__=new r.Z(t);this.size=e.size}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=h;const d=u},17685:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(66092).Z.Symbol},84073:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(66092).Z.Uint8Array},87668:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});const r=function(t,e){for(var i=-1,r=Array(t);++i<t;)r[i]=e(i);return r};var n=i(29169),o=i(27771),a=i(77008),s=i(56009),l=i(18843),c=Object.prototype.hasOwnProperty;const h=function(t,e){var i=(0,o.Z)(t),h=!i&&(0,n.Z)(t),u=!i&&!h&&(0,a.Z)(t),d=!i&&!h&&!u&&(0,l.Z)(t),f=i||h||u||d,p=f?r(t.length,String):[],g=p.length;for(var m in t)!e&&!c.call(t,m)||f&&("length"==m||u&&("offset"==m||"parent"==m)||d&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||(0,s.Z)(m,g))||p.push(m);return p}},72954:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(74752),n=i(79651),o=Object.prototype.hasOwnProperty;const a=function(t,e,i){var a=t[e];o.call(t,e)&&(0,n.Z)(a,i)&&(void 0!==i||e in t)||(0,r.Z)(t,e,i)}},74752:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(77904);const n=function(t,e,i){"__proto__"==e&&r.Z?(0,r.Z)(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}},61395:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e,i,r){for(var n=-1,o=Object(e),a=r(e),s=a.length;s--;){var l=a[t?s:++n];if(!1===i(o[l],l,o))break}return e}}()},93589:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(17685),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,s=r.Z?r.Z.toStringTag:void 0;const l=function(t){var e=o.call(t,s),i=t[s];try{t[s]=void 0;var r=!0}catch(l){}var n=a.call(t);return r&&(e?t[s]=i:delete t[s]),n};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=r.Z?r.Z.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},39473:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(72764);const n=(0,i(1851).Z)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const a=function(t){if(!(0,r.Z)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},69581:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(69203),n=i(81211),o=i(27227);const a=function(t,e){return(0,o.Z)((0,n.Z)(t,e,r.Z),t+"")}},21162:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e){return t(e)}}},41884:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(84073);const n=function(t){var e=new t.constructor(t.byteLength);return new r.Z(e).set(new r.Z(t)),e}},91050:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(66092),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n?r.Z.Buffer:void 0,s=a?a.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var i=t.length,r=s?s(i):new t.constructor(i);return t.copy(r),r}},12701:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(41884);const n=function(t,e){var i=e?(0,r.Z)(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}},87215:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){var i=-1,r=t.length;for(e||(e=Array(r));++i<r;)e[i]=t[i];return e}},31899:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(72954),n=i(74752);const o=function(t,e,i,o){var a=!i;i||(i={});for(var s=-1,l=e.length;++s<l;){var c=e[s],h=o?o(i[c],t[c],c,i,t):void 0;void 0===h&&(h=t[c]),a?(0,n.Z)(i,c,h):(0,r.Z)(i,c,h)}return i}},77904:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(62508);const n=function(){try{var t=(0,r.Z)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},13413:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},62508:(t,e,i)=>{"use strict";i.d(e,{Z:()=>x});var r=i(73234);const n=i(66092).Z["__core-js_shared__"];var o,a=(o=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";const s=function(t){return!!a&&a in t};var l=i(77226),c=i(90019),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,f=u.toString,p=d.hasOwnProperty,g=RegExp("^"+f.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.Z)(t)||s(t))&&((0,r.Z)(t)?g:h).test((0,c.Z)(t))};const y=function(t,e){return null==t?void 0:t[e]};const x=function(t,e){var i=y(t,e);return m(i)?i:void 0}},12513:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=(0,i(1851).Z)(Object.getPrototypeOf,Object)},83970:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"DataView");var a=i(86183);const s=(0,r.Z)(n.Z,"Promise");var l=i(93203);const c=(0,r.Z)(n.Z,"WeakMap");var h=i(93589),u=i(90019),d="[object Map]",f="[object Promise]",p="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.Z)(o),x=(0,u.Z)(a.Z),b=(0,u.Z)(s),C=(0,u.Z)(l.Z),_=(0,u.Z)(c),v=h.Z;(o&&v(new o(new ArrayBuffer(1)))!=m||a.Z&&v(new a.Z)!=d||s&&v(s.resolve())!=f||l.Z&&v(new l.Z)!=p||c&&v(new c)!=g)&&(v=function(t){var e=(0,h.Z)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.Z)(i):"";if(r)switch(r){case y:return m;case x:return d;case b:return f;case C:return p;case _:return g}return e});const k=v},73658:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(77226),n=Object.create;const o=function(){function t(){}return function(e){if(!(0,r.Z)(e))return{};if(n)return n(e);t.prototype=e;var i=new t;return t.prototype=void 0,i}}();var a=i(12513),s=i(72764);const l=function(t){return"function"!=typeof t.constructor||(0,s.Z)(t)?{}:o((0,a.Z)(t))}},56009:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=/^(?:0|[1-9]\d*)$/;const n=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&r.test(t))&&t>-1&&t%1==0&&t<e}},50439:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(79651),n=i(50585),o=i(56009),a=i(77226);const s=function(t,e,i){if(!(0,a.Z)(i))return!1;var s=typeof e;return!!("number"==s?(0,n.Z)(i)&&(0,o.Z)(e,i.length):"string"==s&&e in i)&&(0,r.Z)(i[e],t)}},72764:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},98351:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(13413),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n&&r.Z.process;const s=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}()},1851:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},81211:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});const r=function(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)};var n=Math.max;const o=function(t,e,i){return e=n(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=n(o.length-e,0),l=Array(s);++a<s;)l[a]=o[e+a];a=-1;for(var c=Array(e+1);++a<e;)c[a]=o[a];return c[e]=i(l),r(t,this,c)}}},66092:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(13413),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.Z||n||Function("return this")()},27227:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(62002),n=i(77904),o=i(69203);const a=n.Z?function(t,e){return(0,n.Z)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.Z)(e),writable:!0})}:o.Z;var s=Date.now;const l=function(t){var e=0,i=0;return function(){var r=s(),n=16-(r-i);if(i=r,n>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(a)},90019:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Function.prototype.toString;const n=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},62002:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(){return t}}},79651:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},69203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return t}},29169:(t,e,i)=>{"use strict";i.d(e,{Z:()=>c});var r=i(93589),n=i(18533);const o=function(t){return(0,n.Z)(t)&&"[object Arguments]"==(0,r.Z)(t)};var a=Object.prototype,s=a.hasOwnProperty,l=a.propertyIsEnumerable;const c=o(function(){return arguments}())?o:function(t){return(0,n.Z)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},27771:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=Array.isArray},50585:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(73234),n=i(1656);const o=function(t){return null!=t&&(0,n.Z)(t.length)&&!(0,r.Z)(t)}},836:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(50585),n=i(18533);const o=function(t){return(0,n.Z)(t)&&(0,r.Z)(t)}},77008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(66092);const n=function(){return!1};var o="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=o&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===o?r.Z.Buffer:void 0;const l=(s?s.isBuffer:void 0)||n},79697:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(39473),n=i(83970),o=i(29169),a=i(27771),s=i(50585),l=i(77008),c=i(72764),h=i(18843),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.Z)(t)&&((0,a.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.Z)(t)||(0,h.Z)(t)||(0,o.Z)(t)))return!t.length;var e=(0,n.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.Z)(t))return!(0,r.Z)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},73234:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(93589),n=i(77226);const o=function(t){if(!(0,n.Z)(t))return!1;var e=(0,r.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},77226:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},18533:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},37514:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(93589),n=i(12513),o=i(18533),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,h=l.call(Object);const u=function(t){if(!(0,o.Z)(t)||"[object Object]"!=(0,r.Z)(t))return!1;var e=(0,n.Z)(t);if(null===e)return!0;var i=c.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&l.call(i)==h}},18843:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(93589),n=i(1656),o=i(18533),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1;const s=function(t){return(0,o.Z)(t)&&(0,n.Z)(t.length)&&!!a[(0,r.Z)(t)]};var l=i(21162),c=i(98351),h=c.Z&&c.Z.isTypedArray;const u=h?(0,l.Z)(h):s},32957:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});var r=i(87668),n=i(77226),o=i(72764);const a=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,n.Z)(t))return a(t);var e=(0,o.Z)(t),i=[];for(var r in t)("constructor"!=r||!e&&s.call(t,r))&&i.push(r);return i};var c=i(50585);const h=function(t){return(0,c.Z)(t)?(0,r.Z)(t,!0):l(t)}},42454:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(37834);function n(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],o=i.cache;if(o.has(n))return o.get(n);var a=t.apply(this,r);return i.cache=o.set(n,a)||o,a};return i.cache=new(n.Cache||r.Z),i}n.Cache=r.Z;const o=n},59236:(t,e,i)=>{"use strict";i.d(e,{Z:()=>F});var r=i(31667),n=i(74752),o=i(79651);const a=function(t,e,i){(void 0!==i&&!(0,o.Z)(t[e],i)||void 0===i&&!(e in t))&&(0,n.Z)(t,e,i)};var s=i(61395),l=i(91050),c=i(12701),h=i(87215),u=i(73658),d=i(29169),f=i(27771),p=i(836),g=i(77008),m=i(73234),y=i(77226),x=i(37514),b=i(18843);const C=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var _=i(31899),v=i(32957);const k=function(t){return(0,_.Z)(t,(0,v.Z)(t))};const T=function(t,e,i,r,n,o,s){var _=C(t,i),v=C(e,i),T=s.get(v);if(T)a(t,i,T);else{var w=o?o(_,v,i+"",t,e,s):void 0,S=void 0===w;if(S){var B=(0,f.Z)(v),F=!B&&(0,g.Z)(v),L=!B&&!F&&(0,b.Z)(v);w=v,B||F||L?(0,f.Z)(_)?w=_:(0,p.Z)(_)?w=(0,h.Z)(_):F?(S=!1,w=(0,l.Z)(v,!0)):L?(S=!1,w=(0,c.Z)(v,!0)):w=[]:(0,x.Z)(v)||(0,d.Z)(v)?(w=_,(0,d.Z)(_)?w=k(_):(0,y.Z)(_)&&!(0,m.Z)(_)||(w=(0,u.Z)(v))):S=!1}S&&(s.set(v,w),n(w,v,r,o,s),s.delete(v)),a(t,i,w)}};const w=function t(e,i,n,o,l){e!==i&&(0,s.Z)(i,(function(s,c){if(l||(l=new r.Z),(0,y.Z)(s))T(e,i,c,n,t,o,l);else{var h=o?o(C(e,c),s,c+"",e,i,l):void 0;void 0===h&&(h=s),a(e,c,h)}}),v.Z)};var S=i(69581),B=i(50439);const F=function(t){return(0,S.Z)((function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&"function"==typeof o?(n--,o):void 0,a&&(0,B.Z)(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var s=i[r];s&&t(e,s,r,o)}return e}))}((function(t,e,i){w(t,e,i)}))},28758:(t,e,i)=>{"use strict";i.d(e,{A:()=>It,B:()=>ye,C:()=>me,D:()=>Lt,E:()=>Le,F:()=>ae,G:()=>ht,H:()=>Ni,I:()=>Fi,J:()=>be,K:()=>no,Z:()=>Xt,a:()=>wi,b:()=>Ti,c:()=>Mi,d:()=>pt,e:()=>vt,f:()=>Gt,g:()=>ki,h:()=>de,i:()=>fi,j:()=>ue,k:()=>ne,l:()=>st,m:()=>yt,n:()=>te,o:()=>pi,p:()=>Ei,q:()=>Si,r:()=>Bi,s:()=>vi,t:()=>_i,u:()=>xe,v:()=>xt,w:()=>ce,x:()=>se,y:()=>ji,z:()=>$i});var r=i(18464),n=i(27484),o=i(17967),a=i(64218),s=i(27856),l=i(71610),c=i(53438);const h=(t,e)=>{const i=l.Z.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return(0,c.Z)(t,r)};var u=i(51117);const d=(t,e,i=50)=>{const{r:r,g:n,b:o,a:a}=l.Z.parse(t),{r:s,g:c,b:h,a:d}=l.Z.parse(e),f=i/100,p=2*f-1,g=a-d,m=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,y=1-m,x=r*m+s*y,b=n*m+c*y,C=o*m+h*y,_=a*f+d*(1-f);return(0,u.Z)(x,b,C,_)},f=(t,e=100)=>{const i=l.Z.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,d(i,t,e)};var p=i(7201),g=i(12281),m=i(91619),y=i(42454),x=i(59236),b="comm",C="rule",_="decl",v=Math.abs,k=String.fromCharCode;Object.assign;function T(t){return t.trim()}function w(t,e,i){return t.replace(e,i)}function S(t,e,i){return t.indexOf(e,i)}function B(t,e){return 0|t.charCodeAt(e)}function F(t,e,i){return t.slice(e,i)}function L(t){return t.length}function A(t,e){return e.push(t),t}function M(t,e){for(var i="",r=0;r<t.length;r++)i+=e(t[r],r,t,e)||"";return i}function E(t,e,i,r){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case _:return t.return=t.return||t.value;case b:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,r)+"}";case C:if(!L(t.value=t.props.join(",")))return""}return L(i=M(t.children,r))?t.return=t.value+"{"+i+"}":""}var N=1,Z=1,j=0,O=0,I=0,D="";function q(t,e,i,r,n,o,a,s){return{value:t,root:e,parent:i,type:r,props:n,children:o,line:N,column:Z,length:a,return:"",siblings:s}}function $(){return I=O>0?B(D,--O):0,Z--,10===I&&(Z=1,N--),I}function z(){return I=O<j?B(D,O++):0,Z++,10===I&&(Z=1,N++),I}function P(){return B(D,O)}function R(){return O}function H(t,e){return F(D,t,e)}function W(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function U(t){return N=Z=1,j=L(D=t),O=0,[]}function Y(t){return D="",t}function V(t){return T(H(O-1,J(91===t?t+2:40===t?t+1:t)))}function G(t){for(;(I=P())&&I<33;)z();return W(t)>2||W(I)>3?"":" "}function X(t,e){for(;--e&&z()&&!(I<48||I>102||I>57&&I<65||I>70&&I<97););return H(t,R()+(e<6&&32==P()&&32==z()))}function J(t){for(;z();)switch(I){case t:return O;case 34:case 39:34!==t&&39!==t&&J(I);break;case 40:41===t&&J(t);break;case 92:z()}return O}function Q(t,e){for(;z()&&t+I!==57&&(t+I!==84||47!==P()););return"/*"+H(e,O-1)+"*"+k(47===t?t:z())}function K(t){for(;!W(P());)z();return H(t,O)}function tt(t){return Y(et("",null,null,null,[""],t=U(t),0,[0],t))}function et(t,e,i,r,n,o,a,s,l){for(var c=0,h=0,u=a,d=0,f=0,p=0,g=1,m=1,y=1,x=0,b="",C=n,_=o,T=r,F=b;m;)switch(p=x,x=z()){case 40:if(108!=p&&58==B(F,u-1)){-1!=S(F+=w(V(x),"&","&\f"),"&\f",v(c?s[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:F+=V(x);break;case 9:case 10:case 13:case 32:F+=G(p);break;case 92:F+=X(R()-1,7);continue;case 47:switch(P()){case 42:case 47:A(rt(Q(z(),R()),e,i,l),l);break;default:F+="/"}break;case 123*g:s[c++]=L(F)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(F=w(F,/\f/g,"")),f>0&&L(F)-u&&A(f>32?nt(F+";",r,i,u-1,l):nt(w(F," ","")+";",r,i,u-2,l),l);break;case 59:F+=";";default:if(A(T=it(F,e,i,c,h,n,s,b,C=[],_=[],u,o),o),123===x)if(0===h)et(F,e,T,T,C,o,u,s,_);else switch(99===d&&110===B(F,3)?100:d){case 100:case 108:case 109:case 115:et(t,T,T,r&&A(it(t,T,T,0,0,n,s,b,n,C=[],u,_),_),n,_,u,s,r?C:_);break;default:et(F,T,T,T,[""],_,0,s,_)}}c=h=f=0,g=y=1,b=F="",u=a;break;case 58:u=1+L(F),f=p;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==$())continue;switch(F+=k(x),x*g){case 38:y=h>0?1:(F+="\f",-1);break;case 44:s[c++]=(L(F)-1)*y,y=1;break;case 64:45===P()&&(F+=V(z())),d=P(),h=u=L(b=F+=K(R())),x++;break;case 45:45===p&&2==L(F)&&(g=0)}}return o}function it(t,e,i,r,n,o,a,s,l,c,h,u){for(var d=n-1,f=0===n?o:[""],p=function(t){return t.length}(f),g=0,m=0,y=0;g<r;++g)for(var x=0,b=F(t,d+1,d=v(m=a[g])),_=t;x<p;++x)(_=T(m>0?f[x]+" "+b:w(b,/&\f/g,f[x])))&&(l[y++]=_);return q(t,e,i,0===n?C:s,l,c,h,u)}function rt(t,e,i,r){return q(t,e,i,b,k(I),F(t,2,-2),0,r)}function nt(t,e,i,r,n){return q(t,e,i,_,F(t,0,r),F(t,r+1,-1),r,n)}var ot=i(79697);const at={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},st={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},lt=function(t="fatal"){let e=at.fatal;"string"==typeof t?(t=t.toLowerCase())in at&&(e=at[t]):"number"==typeof t&&(e=t),st.trace=()=>{},st.debug=()=>{},st.info=()=>{},st.warn=()=>{},st.error=()=>{},st.fatal=()=>{},e<=at.fatal&&(st.fatal=console.error?console.error.bind(console,ct("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",ct("FATAL"))),e<=at.error&&(st.error=console.error?console.error.bind(console,ct("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",ct("ERROR"))),e<=at.warn&&(st.warn=console.warn?console.warn.bind(console,ct("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",ct("WARN"))),e<=at.info&&(st.info=console.info?console.info.bind(console,ct("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",ct("INFO"))),e<=at.debug&&(st.debug=console.debug?console.debug.bind(console,ct("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("DEBUG"))),e<=at.trace&&(st.trace=console.debug?console.debug.bind(console,ct("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("TRACE")))},ct=t=>`%c${n().format("ss.SSS")} : ${t} : `,ht=/<br\s*\/?>/gi,ut=(()=>{let t=!1;return()=>{t||(!function(){const t="data-temp-href-target";s.addHook("beforeSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")||"")})),s.addHook("afterSanitizeAttributes",(e=>{"A"===e.tagName&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)||""),e.removeAttribute(t),"_blank"===e.getAttribute("target")&&e.setAttribute("rel","noopener"))}))}(),t=!0)}})();const dt=t=>{ut();return s.sanitize(t)},ft=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=dt(t):"loose"!==i&&(t=(t=(t=mt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=gt(t))}return t},pt=(t,e)=>t?t=e.dompurifyConfig?s.sanitize(ft(t,e),e.dompurifyConfig).toString():s.sanitize(ft(t,e),{FORBID_TAGS:["style"]}).toString():t,gt=t=>t.replace(/#br#/g,"<br/>"),mt=t=>t.replace(ht,"#br#"),yt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),xt=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r<e.length;r++){let t=e[r];if(","===t&&r>0&&r+1<e.length){const n=e[r-1],o=e[r+1];Ct(n,o)&&(t=n+","+o,r++,i.pop())}i.push(_t(t))}return i.join("")},bt=(t,e)=>Math.max(0,t.split(e).length-1),Ct=(t,e)=>{const i=bt(t,"~"),r=bt(e,"~");return 1===i&&1===r},_t=t=>{const e=bt(t,"~");let i=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;-1!==n&&-1!==o&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},vt={getRows:t=>{if(!t)return[""];return mt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:pt,sanitizeTextOrArray:(t,e)=>"string"==typeof t?pt(t,e):t.flat().map((t=>pt(t,e))),hasBreaks:t=>ht.test(t),splitBreaks:t=>t.split(ht),lineBreakRegex:ht,removeScript:dt,getUrl:t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},evaluate:yt,getMax:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.max(...e)},getMin:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.min(...e)}},kt=(t,e)=>h(t,e?{s:-40,l:10}:{s:-40,l:-10}),Tt="#ffffff",wt="#f2f2f2";let St=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||h(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||h(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||kt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||kt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||kt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||kt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||f(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||f(this.tertiaryColor),this.lineColor=this.lineColor||f(this.background),this.arrowheadColor=this.arrowheadColor||f(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,p.Z)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||f(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,g.Z)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.darkMode)for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],75);else for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],25);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;const d=this.darkMode?-4:-1;for(let f=0;f<5;f++)this["surface"+f]=this["surface"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(5+3*f)}),this["surfacePeer"+f]=this["surfacePeer"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(8+3*f)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||h(this.primaryColor,{h:64}),this.fillType3=this.fillType3||h(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||h(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||h(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||h(this.primaryColor,{h:128}),this.fillType7=this.fillType7||h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-10}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Tt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||wt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Bt=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,g.Z)(this.primaryColor,16),this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=kt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=kt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,g.Z)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=(0,u.Z)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,p.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,p.Z)(this.sectionBkgColor,10),this.taskBorderColor=(0,u.Z)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,u.Z)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.Z)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,g.Z)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,g.Z)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10);for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-10)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,g.Z)(this.secondaryColor,20),this.git1=(0,g.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,g.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,g.Z)(this.pie4||h(this.primaryColor,{h:-30}),20),this.git4=(0,g.Z)(this.pie5||h(this.primaryColor,{h:-60}),20),this.git5=(0,g.Z)(this.pie6||h(this.primaryColor,{h:-90}),10),this.git6=(0,g.Z)(this.pie7||h(this.primaryColor,{h:60}),10),this.git7=(0,g.Z)(this.pie8||h(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,g.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,g.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Ft=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=h(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=kt(this.primaryColor,this.darkMode),this.secondaryBorderColor=kt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=kt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=(0,u.Z)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,l:-(7+5*d)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||f(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||f(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,g.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||h(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||h(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,p.Z)(f(this.git0),25),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Tt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||wt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};const Lt=t=>{const e=new Ft;return e.calculate(t),e};let At=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,g.Z)("#cde498",10),this.primaryBorderColor=kt(this.primaryColor,this.darkMode),this.secondaryBorderColor=kt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=kt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.primaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.actorBorder=(0,p.Z)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-30}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Tt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||wt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class Mt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,g.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=kt(this.primaryColor,this.darkMode),this.secondaryBorderColor=kt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=kt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.Z)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,g.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=(0,g.Z)(this.contrast,30),this.sectionBkgColor2=(0,g.Z)(this.contrast,30),this.taskBorderColor=(0,p.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,g.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,p.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,p.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||h(this.primaryColor,{h:-30}),this.git4=this.pie5||h(this.primaryColor,{h:-60}),this.git5=this.pie6||h(this.primaryColor,{h:-90}),this.git6=this.pie7||h(this.primaryColor,{h:60}),this.git7=this.pie8||h(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||Tt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||wt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Et={base:{getThemeVariables:t=>{const e=new St;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new Bt;return e.calculate(t),e}},default:{getThemeVariables:Lt},forest:{getThemeVariables:t=>{const e=new At;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new Mt;return e.calculate(t),e}}},Nt={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],deterministicIds:!1,fontSize:16},Zt={...Nt,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Et.default.getThemeVariables(),sequence:{...Nt.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Nt.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Nt.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Nt.pie,useWidth:984},xyChart:{...Nt.xyChart,useWidth:void 0},requirement:{...Nt.requirement,useWidth:void 0},gitGraph:{...Nt.gitGraph,useMaxWidth:!1},sankey:{...Nt.sankey,useMaxWidth:!1}},jt=(t,e="")=>Object.keys(t).reduce(((i,r)=>Array.isArray(t[r])?i:"object"==typeof t[r]&&null!==t[r]?[...i,e+r,...jt(t[r],"")]:[...i,e+r]),[]),Ot=new Set(jt(Zt,"")),It=Zt,Dt=t=>{if(st.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach((t=>Dt(t)));else{for(const e of Object.keys(t)){if(st.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Ot.has(e)||null==t[e]){st.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){st.debug("sanitizing object",e),Dt(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(st.debug("sanitizing css option",e),t[e]=qt(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];(null==i?void 0:i.match)&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}st.debug("After sanitization",t)}},qt=t=>{let e=0,i=0;for(const r of t){if(e<i)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&i++}return e!==i?"{ /* ERROR: Unbalanced CSS */ }":t},$t=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,zt=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Pt=/\s*%%.*\n/gm;class Rt extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}}const Ht={},Wt=function(t,e){t=t.replace($t,"").replace(zt,"").replace(Pt,"\n");for(const[i,{detector:r}]of Object.entries(Ht)){if(r(t,e))return i}throw new Rt(`No diagram type detected matching given configuration for text: ${t}`)},Ut=(...t)=>{for(const{id:e,detector:i,loader:r}of t)Yt(e,i,r)},Yt=(t,e,i)=>{Ht[t]?st.error(`Detector with key ${t} already exists`):Ht[t]={detector:e,loader:i},st.debug(`Detector with key ${t} added${i?" with loader":""}`)},Vt=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Vt(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||i<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(r||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Vt(t[n],e[n],{depth:i-1,clobber:r}))})),t)},Gt=Vt,Xt="\u200b",Jt={curveBasis:a.$0Z,curveBasisClosed:a.Dts,curveBasisOpen:a.WQY,curveBumpX:a.qpX,curveBumpY:a.u93,curveBundle:a.tFB,curveCardinalClosed:a.OvA,curveCardinalOpen:a.dCK,curveCardinal:a.YY7,curveCatmullRomClosed:a.fGX,curveCatmullRomOpen:a.$m7,curveCatmullRom:a.zgE,curveLinear:a.c_6,curveLinearClosed:a.fxm,curveMonotoneX:a.FdL,curveMonotoneY:a.ak_,curveNatural:a.SxZ,curveStep:a.eA_,curveStepAfter:a.jsv,curveStepBefore:a.iJ},Qt=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Kt=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${Qt.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),st.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=zt.exec(t));)if(r.index===zt.lastIndex&&zt.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const t=r[1]?r[1]:r[2],e=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:t,args:e})}return 0===n.length?{type:t,args:null}:1===n.length?n[0]:n}catch(i){return st.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}};function te(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Jt[i]??e}function ee(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}const ie=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},re=(t,e)=>{let i,r=e;for(const n of t){if(i){const t=ee(n,i);if(t<r)r-=t;else{const e=r/t;if(e<=0)return i;if(e>=1)return{x:n.x,y:n.y};if(e>0&&e<1)return{x:ie((1-e)*i.x+e*n.x,5),y:ie((1-e)*i.y+e*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")};function ne(t){let e="",i="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let oe=0;const ae=()=>(oe++,"id-"+Math.random().toString(36).substr(2,12)+"-"+oe);const se=t=>function(t){let e="";const i="0123456789abcdef";for(let r=0;r<t;r++)e+=i.charAt(Math.floor(16*Math.random()));return e}(t.length),le=function(t,e){const i=e.text.replace(vt.lineBreakRegex," "),[,r]=me(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),void 0!==e.class&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(i),n},ce=(0,y.Z)(((t,e,i)=>{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},i),vt.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let o="";return r.forEach(((t,a)=>{const s=de(`${t} `,i),l=de(o,i);if(s>e){const{hyphenatedStrings:r,remainingWord:a}=he(t,e,"-",i);n.push(o,...r),o=a}else l+s>=e?(n.push(o),o=t):o=[o,t].filter(Boolean).join(" ");a+1===r.length&&n.push(o)})),n.filter((t=>""!==t)).join(i.joinWith)}),((t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`)),he=(0,y.Z)(((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach(((t,s)=>{const l=`${a}${t}`;if(de(l,r)>=e){const t=s+1,e=n.length===t,r=`${l}${i}`;o.push(e?l:r),a=""}else a=l})),{hyphenatedStrings:o,remainingWord:a}}),((t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function ue(t,e){return fe(t,e).height}function de(t,e){return fe(t,e).width}const fe=(0,y.Z)(((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=me(i),s=["sans-serif",r],l=t.split(vt.lineBreakRegex),c=[],h=(0,a.Ys)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const a of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const i of l){const r={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""};r.text=i||Xt;const s=le(u,r).style("font-size",o).style("font-weight",n).style("font-family",a),l=(s._groups||s)[0][0].getBBox();if(0===l.width&&0===l.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,l.width)),t=Math.round(l.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}c.push(e)}u.remove();return c[isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let pe;function ge(t){return"str"in t}const me=t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function ye(t,e){return(0,x.Z)({},t,e)}const xe={assignWithDepth:Gt,wrapLabel:ce,calculateTextHeight:ue,calculateTextWidth:de,calculateTextDimensions:fe,cleanAndMerge:ye,detectInit:function(t,e){const i=Kt(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));Dt(t),r=Gt(r,[...t])}else r=i.args;if(!r)return;let n=Wt(t,e);const o="config";return void 0!==r[o]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[o],delete r[o]),r},detectDirective:Kt,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:te,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;return t.forEach((t=>{i+=ee(t,e),e=t})),re(t,i/2)}(t)},calcCardinalityPosition:(t,e,i)=>{st.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const r=re(e,25),n=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),a={x:0,y:0};return a.x=Math.sin(o)*n+(e[0].x+r.x)/2,a.y=-Math.cos(o)*n+(e[0].y+r.y)/2,a},calcTerminalLabelPosition:function(t,e,i){const r=structuredClone(i);st.info("our points",r),"start_left"!==e&&"start_right"!==e&&r.reverse();const n=re(r,25+t),o=10+.5*t,a=Math.atan2(r[0].y-n.y,r[0].x-n.x),s={x:0,y:0};return"start_left"===e?(s.x=Math.sin(a+Math.PI)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a+Math.PI)*o+(r[0].y+n.y)/2):"end_right"===e?(s.x=Math.sin(a-Math.PI)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a-Math.PI)*o+(r[0].y+n.y)/2-5):"end_left"===e?(s.x=Math.sin(a)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2-5):(s.x=Math.sin(a)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2),s},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,o.Nm)(i):i},getStylesFromArray:ne,generateId:ae,random:se,runFunc:(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a<r;a++)if(o=o[i[a]],!o)return void st.error(`Function name: ${t} not found in window`);o[n](...e)},entityDecode:function(t){return pe=pe||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),pe.innerHTML=t,unescape(pe.textContent)},insertTitle:(t,e,i,r)=>{var n;if(!r)return;const o=null==(n=t.node())?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},parseFontSize:me,InitIDGenerator:class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}}},be=function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},Ce="10.8.0",_e=Object.freeze(It);let ve,ke=Gt({},_e),Te=[],we=Gt({},_e);const Se=(t,e)=>{let i=Gt({},t),r={};for(const n of e)Ae(n),r=Gt(r,n);if(i=Gt(i,r),r.theme&&r.theme in Et){const t=Gt({},ve),e=Gt(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in Et&&(i.themeVariables=Et[i.theme].getThemeVariables(e))}return we=i,je(we),we},Be=()=>Gt({},ke),Fe=t=>(je(t),Gt(we,t),Le()),Le=()=>Gt({},we),Ae=t=>{t&&(["secure",...ke.secure??[]].forEach((e=>{Object.hasOwn(t,e)&&(st.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{e.startsWith("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&Ae(t[e])})))},Me=t=>{Dt(t),!t.fontFamily||t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}),Te.push(t),Se(ke,Te)},Ee=(t=ke)=>{Te=[],Se(t,Te)},Ne={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Ze={},je=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(Ze[e="LAZY_LOAD_DEPRECATED"]||(st.warn(Ne[e]),Ze[e]=!0)))},Oe={id:"c4",detector:t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),loader:async()=>{const{diagram:t}=await i.e(8817).then(i.bind(i,48817));return{id:"c4",diagram:t}}},Ie="flowchart",De={id:Ie,detector:(t,e)=>{var i,r;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&/^\s*graph/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(8314),i.e(1644),i.e(8932),i.e(905),i.e(3920),i.e(3952)]).then(i.bind(i,63952));return{id:Ie,diagram:t}}},qe="flowchart-v2",$e={id:qe,detector:(t,e)=>{var i,r,n;return"dagre-d3"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(!(!/^\s*graph/.test(t)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))||/^\s*flowchart/.test(t))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(8314),i.e(1644),i.e(8932),i.e(905),i.e(3920),i.e(3727)]).then(i.bind(i,43727));return{id:qe,diagram:t}}},ze={id:"er",detector:t=>/^\s*erDiagram/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(1644),i.e(5114)]).then(i.bind(i,25114));return{id:"er",diagram:t}}},Pe="gitGraph",Re={id:Pe,detector:t=>/^\s*gitGraph/.test(t),loader:async()=>{const{diagram:t}=await i.e(2237).then(i.bind(i,92237));return{id:Pe,diagram:t}}},He="gantt",We={id:He,detector:t=>/^\s*gantt/.test(t),loader:async()=>{const{diagram:t}=await i.e(9417).then(i.bind(i,39417));return{id:He,diagram:t}}},Ue="info",Ye={id:Ue,detector:t=>/^\s*info/.test(t),loader:async()=>{const{diagram:t}=await i.e(5718).then(i.bind(i,65718));return{id:Ue,diagram:t}}},Ve={id:"pie",detector:t=>/^\s*pie/.test(t),loader:async()=>{const{diagram:t}=await i.e(2689).then(i.bind(i,42689));return{id:"pie",diagram:t}}},Ge="quadrantChart",Xe={id:Ge,detector:t=>/^\s*quadrantChart/.test(t),loader:async()=>{const{diagram:t}=await i.e(2661).then(i.bind(i,62661));return{id:Ge,diagram:t}}},Je="xychart",Qe={id:Je,detector:t=>/^\s*xychart-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8314),i.e(3966)]).then(i.bind(i,83966));return{id:Je,diagram:t}}},Ke="requirement",ti={id:Ke,detector:t=>/^\s*requirement(Diagram)?/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(1644),i.e(2995)]).then(i.bind(i,52995));return{id:Ke,diagram:t}}},ei="sequence",ii={id:ei,detector:t=>/^\s*sequenceDiagram/.test(t),loader:async()=>{const{diagram:t}=await i.e(2465).then(i.bind(i,12465));return{id:ei,diagram:t}}},ri="class",ni={id:ri,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)&&/^\s*classDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(1644),i.e(9206),i.e(7381)]).then(i.bind(i,97381));return{id:ri,diagram:t}}},oi="classDiagram",ai={id:oi,detector:(t,e)=>{var i;return!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer))||/^\s*classDiagram-v2/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(8314),i.e(1644),i.e(8932),i.e(905),i.e(9206),i.e(2955)]).then(i.bind(i,92955));return{id:oi,diagram:t}}},si="state",li={id:si,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer)&&/^\s*stateDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(1644),i.e(7180),i.e(9496)]).then(i.bind(i,79496));return{id:si,diagram:t}}},ci="stateDiagram",hi={id:ci,detector:(t,e)=>{var i;return!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(8314),i.e(1644),i.e(8932),i.e(905),i.e(7180),i.e(3594)]).then(i.bind(i,53594));return{id:ci,diagram:t}}},ui="journey",di={id:ui,detector:t=>/^\s*journey/.test(t),loader:async()=>{const{diagram:t}=await i.e(6733).then(i.bind(i,46733));return{id:ui,diagram:t}}},fi=function(t,e,i,r){const n=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,i,r);!function(t,e){for(let i of e)t.attr(i[0],i[1])}(t,n)},pi=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;st.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;st.info(`Graph bounds: ${s}x${l}`,t),s=o+2*i,l=a+2*i,st.info(`Calculated bounds: ${s}x${l}`),fi(e,l,s,r);const c=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",c)},gi={},mi=(t,e,i)=>{let r="";return t in gi&&gi[t]?r=gi[t](i):st.warn(`No theme found for ${t}`),` & {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n fill: ${i.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${i.errorBkgColor};\n }\n & .error-text {\n fill: ${i.errorTextColor};\n stroke: ${i.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${i.lineColor};\n stroke: ${i.lineColor};\n }\n & .marker.cross {\n stroke: ${i.lineColor};\n }\n\n & svg {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let yi="",xi="",bi="";const Ci=t=>pt(t,Le()),_i=()=>{yi="",bi="",xi=""},vi=t=>{yi=Ci(t).replace(/^\s+/g,"")},ki=()=>yi,Ti=t=>{bi=Ci(t).replace(/\n\s+/g,"\n")},wi=()=>bi,Si=t=>{xi=Ci(t)},Bi=()=>xi,Fi=Object.freeze(Object.defineProperty({__proto__:null,clear:_i,getAccDescription:wi,getAccTitle:ki,getDiagramTitle:Bi,setAccDescription:Ti,setAccTitle:vi,setDiagramTitle:Si},Symbol.toStringTag,{value:"Module"})),Li=st,Ai=lt,Mi=Le,Ei=Fe,Ni=_e,Zi=t=>pt(t,Mi()),ji=pi,Oi={},Ii=(t,e,i)=>{var r,n,o;if(Oi[t])throw new Error(`Diagram ${t} already registered.`);Oi[t]=e,i&&Yt(t,i),n=t,void 0!==(o=e.styles)&&(gi[n]=o),null==(r=e.injectUtils)||r.call(e,Li,Ai,Mi,Zi,ji,Fi,(()=>{}))},Di=t=>{if(t in Oi)return Oi[t];throw new qi(t)};class qi extends Error{constructor(t){super(`Diagram ${t} not found.`)}}const $i=t=>{var e;const{securityLevel:i}=Mi();let r=(0,a.Ys)("body");if("sandbox"===i){const i=(null==(e=(0,a.Ys)(`#i${t}`).node())?void 0:e.contentDocument)??document;r=(0,a.Ys)(i.body)}return r.select(`#${t}`)},zi={draw:(t,e,i)=>{st.debug("rendering svg for syntax error\n");const r=$i(e);r.attr("viewBox","0 0 2412 512"),fi(r,100,512,!0);const n=r.append("g");n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)}},Pi=zi,Ri={db:{},renderer:zi,parser:{parser:{yy:{}},parse:()=>{}}},Hi="flowchart-elk",Wi={id:Hi,detector:(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&"elk"===(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(8314),i.e(8932),i.e(3920),i.e(1736)]).then(i.bind(i,24858));return{id:Hi,diagram:t}}},Ui="timeline",Yi={id:Ui,detector:t=>/^\s*timeline/.test(t),loader:async()=>{const{diagram:t}=await i.e(295).then(i.bind(i,70295));return{id:Ui,diagram:t}}},Vi="mindmap",Gi={id:Vi,detector:t=>/^\s*mindmap/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(8314),i.e(7497)]).then(i.bind(i,7497));return{id:Vi,diagram:t}}},Xi="sankey",Ji={id:Xi,detector:t=>/^\s*sankey-beta/.test(t),loader:async()=>{const{diagram:t}=await i.e(5054).then(i.bind(i,15054));return{id:Xi,diagram:t}}},Qi="block",Ki={id:Qi,detector:t=>/^\s*block-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(3449),i.e(8314),i.e(8932),i.e(85)]).then(i.bind(i,80085));return{id:Qi,diagram:t}}};let tr=!1;const er=()=>{tr||(tr=!0,Ii("error",Ri,(t=>"error"===t.toLowerCase().trim())),Ii("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),Ut(Oe,ai,ni,ze,We,Ye,Ve,ti,ii,Wi,$e,De,Gi,Yi,Re,hi,li,di,Xe,Ji,Qe,Ki))};class ir{constructor(t,e={}){this.text=t,this.metadata=e,this.type="graph",this.text=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/#\w+;/g,(function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"})),e}(t),this.text+="\n";const i=Le();try{this.type=Wt(t,i)}catch(n){this.type="error",this.detectError=n}const r=Di(this.type);st.debug("Type "+this.type),this.db=r.db,this.renderer=r.renderer,this.parser=r.parser,this.parser.parser.yy=this.db,this.init=r.init,this.parse()}parse(){var t,e,i,r,n;if(this.detectError)throw this.detectError;null==(e=(t=this.db).clear)||e.call(t);const o=Le();null==(i=this.init)||i.call(this,o),this.metadata.title&&(null==(n=(r=this.db).setDiagramTitle)||n.call(r,this.metadata.title)),this.parser.parse(this.text)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}}const rr=async(t,e={})=>{const i=Wt(t,Le());try{Di(i)}catch(r){const t=Ht[i].loader;if(!t)throw new Rt(`Diagram ${i} not found.`);const{id:e,diagram:n}=await t();Ii(e,n)}return new ir(t,e)};let nr=[];const or="graphics-document document";const ar=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function sr(t){return null==t}var lr={isNothing:sr,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:sr(t)?[]:[t]},repeat:function(t,e){var i,r="";for(i=0;i<e;i+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var i,r,n,o;if(e)for(i=0,r=(o=Object.keys(e)).length;i<r;i+=1)t[n=o[i]]=e[n];return t}};function cr(t,e){var i="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(i+='in "'+t.mark.name+'" '),i+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(i+="\n\n"+t.mark.snippet),r+" "+i):r}function hr(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=cr(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}hr.prototype=Object.create(Error.prototype),hr.prototype.constructor=hr,hr.prototype.toString=function(t){return this.name+": "+cr(this,t)};var ur=hr;function dr(t,e,i,r,n){var o="",a="",s=Math.floor(n/2)-1;return r-e>s&&(e=r-s+(o=" ... ").length),i-r>s&&(i=r+s-(a=" ...").length),{str:o+t.slice(e,i).replace(/\t/g,"\u2192")+a,pos:r-e+o.length}}function fr(t,e){return lr.repeat(" ",e-t.length)+t}var pr=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,n=[0],o=[],a=-1;i=r.exec(t.buffer);)o.push(i.index),n.push(i.index+i[0].length),t.position<=i.index&&a<0&&(a=n.length-2);a<0&&(a=n.length-1);var s,l,c="",h=Math.min(t.line+e.linesAfter,o.length).toString().length,u=e.maxLength-(e.indent+h+3);for(s=1;s<=e.linesBefore&&!(a-s<0);s++)l=dr(t.buffer,n[a-s],o[a-s],t.position-(n[a]-n[a-s]),u),c=lr.repeat(" ",e.indent)+fr((t.line-s+1).toString(),h)+" | "+l.str+"\n"+c;for(l=dr(t.buffer,n[a],o[a],t.position,u),c+=lr.repeat(" ",e.indent)+fr((t.line+1).toString(),h)+" | "+l.str+"\n",c+=lr.repeat("-",e.indent+h+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(a+s>=o.length);s++)l=dr(t.buffer,n[a+s],o[a+s],t.position-(n[a]-n[a+s]),u),c+=lr.repeat(" ",e.indent)+fr((t.line+s+1).toString(),h)+" | "+l.str+"\n";return c.replace(/\n$/,"")},gr=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],mr=["scalar","sequence","mapping"];var yr=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===gr.indexOf(e))throw new ur('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=(i=e.styleAliases||null,r={},null!==i&&Object.keys(i).forEach((function(t){i[t].forEach((function(e){r[String(e)]=t}))})),r),-1===mr.indexOf(this.kind))throw new ur('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function xr(t,e){var i=[];return t[e].forEach((function(t){var e=i.length;i.forEach((function(i,r){i.tag===t.tag&&i.kind===t.kind&&i.multi===t.multi&&(e=r)})),i[e]=t})),i}function br(t){return this.extend(t)}br.prototype.extend=function(t){var e=[],i=[];if(t instanceof yr)i.push(t);else if(Array.isArray(t))i=i.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new ur("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof yr))throw new ur("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new ur("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new ur("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),i.forEach((function(t){if(!(t instanceof yr))throw new ur("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(br.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=xr(r,"implicit"),r.compiledExplicit=xr(r,"explicit"),r.compiledTypeMap=function(){var t,e,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(i.multi[t.kind].push(t),i.multi.fallback.push(t)):i[t.kind][t.tag]=i.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(r);return i}(r.compiledImplicit,r.compiledExplicit),r};var Cr=new br({explicit:[new yr("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new yr("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new yr("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var _r=new yr("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var vr=new yr("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function kr(t){return 48<=t&&t<=55}function Tr(t){return 48<=t&&t<=57}var wr=new yr("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=t.length,n=0,o=!1;if(!r)return!1;if("-"!==(e=t[n])&&"+"!==e||(e=t[++n]),"0"===e){if(n+1===r)return!0;if("b"===(e=t[++n])){for(n++;n<r;n++)if("_"!==(e=t[n])){if("0"!==e&&"1"!==e)return!1;o=!0}return o&&"_"!==e}if("x"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!(48<=(i=t.charCodeAt(n))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;o=!0}return o&&"_"!==e}if("o"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!kr(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==e}}if("_"===e)return!1;for(;n<r;n++)if("_"!==(e=t[n])){if(!Tr(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===e)},construct:function(t){var e,i=t,r=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),"-"!==(e=i[0])&&"+"!==e||("-"===e&&(r=-1),e=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===e){if("b"===i[1])return r*parseInt(i.slice(2),2);if("x"===i[1])return r*parseInt(i.slice(2),16);if("o"===i[1])return r*parseInt(i.slice(2),8)}return r*parseInt(i,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!lr.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),Sr=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var Br=/^[-+]?[0-9]+e/;var Fr=new yr("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!Sr.test(t)||"_"===t[t.length-1])},construct:function(t){var e,i;return i="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:i*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||lr.isNegativeZero(t))},represent:function(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(lr.isNegativeZero(t))return"-0.0";return i=t.toString(10),Br.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),Lr=Cr.extend({implicit:[_r,vr,wr,Fr]}),Ar=Lr,Mr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Er=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var Nr=new yr("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Mr.exec(t)||null!==Er.exec(t))},construct:function(t){var e,i,r,n,o,a,s,l,c=0,h=null;if(null===(e=Mr.exec(t))&&(e=Er.exec(t)),null===e)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),l=new Date(Date.UTC(i,r,n,o,a,s,c)),h&&l.setTime(l.getTime()-h),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var Zr=new yr("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),jr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Or=new yr("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=jr;for(i=0;i<n;i++)if(!((e=o.indexOf(t.charAt(i)))>64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=jr,a=0,s=[];for(e=0;e<n;e++)e%4==0&&e&&(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(r.charAt(e));return 0===(i=n%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===i?(s.push(a>>10&255),s.push(a>>2&255)):12===i&&s.push(a>>4&255),new Uint8Array(s)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,i,r="",n=0,o=t.length,a=jr;for(e=0;e<o;e++)e%3==0&&e&&(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]),n=(n<<8)+t[e];return 0===(i=o%3)?(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]):2===i?(r+=a[n>>10&63],r+=a[n>>4&63],r+=a[n<<2&63],r+=a[64]):1===i&&(r+=a[n>>2&63],r+=a[n<<4&63],r+=a[64],r+=a[64]),r}}),Ir=Object.prototype.hasOwnProperty,Dr=Object.prototype.toString;var qr=new yr("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=[],s=t;for(e=0,i=s.length;e<i;e+=1){if(r=s[e],o=!1,"[object Object]"!==Dr.call(r))return!1;for(n in r)if(Ir.call(r,n)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(n))return!1;a.push(n)}return!0},construct:function(t){return null!==t?t:[]}}),$r=Object.prototype.toString;var zr=new yr("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1){if(r=a[e],"[object Object]"!==$r.call(r))return!1;if(1!==(n=Object.keys(r)).length)return!1;o[e]=[n[0],r[n[0]]]}return!0},construct:function(t){if(null===t)return[];var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1)r=a[e],n=Object.keys(r),o[e]=[n[0],r[n[0]]];return o}}),Pr=Object.prototype.hasOwnProperty;var Rr=new yr("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,i=t;for(e in i)if(Pr.call(i,e)&&null!==i[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),Hr=Ar.extend({implicit:[Nr,Zr],explicit:[Or,qr,zr,Rr]}),Wr=Object.prototype.hasOwnProperty,Ur=1,Yr=2,Vr=3,Gr=4,Xr=1,Jr=2,Qr=3,Kr=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,tn=/[\x85\u2028\u2029]/,en=/[,\[\]\{\}]/,rn=/^(?:!|!!|![a-z\-]+!)$/i,nn=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function on(t){return Object.prototype.toString.call(t)}function an(t){return 10===t||13===t}function sn(t){return 9===t||32===t}function ln(t){return 9===t||32===t||10===t||13===t}function cn(t){return 44===t||91===t||93===t||123===t||125===t}function hn(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function un(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function dn(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var fn=new Array(256),pn=new Array(256),gn=0;gn<256;gn++)fn[gn]=un(gn)?1:0,pn[gn]=un(gn);function mn(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Hr,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function yn(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=pr(i),new ur(e,i)}function xn(t,e){throw yn(t,e)}function bn(t,e){t.onWarning&&t.onWarning.call(null,yn(t,e))}var Cn={YAML:function(t,e,i){var r,n,o;null!==t.version&&xn(t,"duplication of %YAML directive"),1!==i.length&&xn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&xn(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&xn(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&bn(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&xn(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],rn.test(r)||xn(t,"ill-formed tag handle (first argument) of the TAG directive"),Wr.call(t.tagMap,r)&&xn(t,'there is a previously declared suffix for "'+r+'" tag handle'),nn.test(n)||xn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){xn(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function _n(t,e,i,r){var n,o,a,s;if(e<i){if(s=t.input.slice(e,i),r)for(n=0,o=s.length;n<o;n+=1)9===(a=s.charCodeAt(n))||32<=a&&a<=1114111||xn(t,"expected valid JSON character");else Kr.test(s)&&xn(t,"the stream contains non-printable characters");t.result+=s}}function vn(t,e,i,r){var n,o,a,s;for(lr.isObject(i)||xn(t,"cannot merge mappings; the provided source object is unacceptable"),a=0,s=(n=Object.keys(i)).length;a<s;a+=1)o=n[a],Wr.call(e,o)||(e[o]=i[o],r[o]=!0)}function kn(t,e,i,r,n,o,a,s,l){var c,h;if(Array.isArray(n))for(c=0,h=(n=Array.prototype.slice.call(n)).length;c<h;c+=1)Array.isArray(n[c])&&xn(t,"nested arrays are not supported inside keys"),"object"==typeof n&&"[object Object]"===on(n[c])&&(n[c]="[object Object]");if("object"==typeof n&&"[object Object]"===on(n)&&(n="[object Object]"),n=String(n),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(c=0,h=o.length;c<h;c+=1)vn(t,e,o[c],i);else vn(t,e,o,i);else t.json||Wr.call(i,n)||!Wr.call(e,n)||(t.line=a||t.line,t.lineStart=s||t.lineStart,t.position=l||t.position,xn(t,"duplicated mapping key")),"__proto__"===n?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):e[n]=o,delete i[n];return e}function Tn(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):xn(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function wn(t,e,i){for(var r=0,n=t.input.charCodeAt(t.position);0!==n;){for(;sn(n);)9===n&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),n=t.input.charCodeAt(++t.position);if(e&&35===n)do{n=t.input.charCodeAt(++t.position)}while(10!==n&&13!==n&&0!==n);if(!an(n))break;for(Tn(t),n=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===n;)t.lineIndent++,n=t.input.charCodeAt(++t.position)}return-1!==i&&0!==r&&t.lineIndent<i&&bn(t,"deficient indentation"),r}function Sn(t){var e,i=t.position;return!(45!==(e=t.input.charCodeAt(i))&&46!==e||e!==t.input.charCodeAt(i+1)||e!==t.input.charCodeAt(i+2)||(i+=3,0!==(e=t.input.charCodeAt(i))&&!ln(e)))}function Bn(t,e){1===e?t.result+=" ":e>1&&(t.result+=lr.repeat("\n",e-1))}function Fn(t,e){var i,r,n=t.tag,o=t.anchor,a=[],s=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,xn(t,"tab characters must not be used in indentation")),45===r)&&ln(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,wn(t,!0,-1)&&t.lineIndent<=e)a.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,Mn(t,e,Vr,!1,!0),a.push(t.result),wn(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)xn(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!s&&(t.tag=n,t.anchor=o,t.kind="sequence",t.result=a,!0)}function Ln(t){var e,i,r,n,o=!1,a=!1;if(33!==(n=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&xn(t,"duplication of a tag property"),60===(n=t.input.charCodeAt(++t.position))?(o=!0,n=t.input.charCodeAt(++t.position)):33===n?(a=!0,i="!!",n=t.input.charCodeAt(++t.position)):i="!",e=t.position,o){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&62!==n);t.position<t.length?(r=t.input.slice(e,t.position),n=t.input.charCodeAt(++t.position)):xn(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==n&&!ln(n);)33===n&&(a?xn(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),rn.test(i)||xn(t,"named tag handle cannot contain such characters"),a=!0,e=t.position+1)),n=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),en.test(r)&&xn(t,"tag suffix cannot contain flow indicator characters")}r&&!nn.test(r)&&xn(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(s){xn(t,"tag name is malformed: "+r)}return o?t.tag=r:Wr.call(t.tagMap,i)?t.tag=t.tagMap[i]+r:"!"===i?t.tag="!"+r:"!!"===i?t.tag="tag:yaml.org,2002:"+r:xn(t,'undeclared tag handle "'+i+'"'),!0}function An(t){var e,i;if(38!==(i=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&xn(t,"duplication of an anchor property"),i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!ln(i)&&!cn(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&xn(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function Mn(t,e,i,r,n){var o,a,s,l,c,h,u,d,f,p=1,g=!1,m=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=a=s=Gr===i||Vr===i,r&&wn(t,!0,-1)&&(g=!0,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)),1===p)for(;Ln(t)||An(t);)wn(t,!0,-1)?(g=!0,s=o,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)):s=!1;if(s&&(s=g||n),1!==p&&Gr!==i||(d=Ur===i||Yr===i?e:e+1,f=t.position-t.lineStart,1===p?s&&(Fn(t,f)||function(t,e,i){var r,n,o,a,s,l,c,h=t.tag,u=t.anchor,d={},f=Object.create(null),p=null,g=null,m=null,y=!1,x=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),c=t.input.charCodeAt(t.position);0!==c;){if(y||-1===t.firstTabInLine||(t.position=t.firstTabInLine,xn(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),o=t.line,63!==c&&58!==c||!ln(r)){if(a=t.line,s=t.lineStart,l=t.position,!Mn(t,i,Yr,!1,!0))break;if(t.line===o){for(c=t.input.charCodeAt(t.position);sn(c);)c=t.input.charCodeAt(++t.position);if(58===c)ln(c=t.input.charCodeAt(++t.position))||xn(t,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(kn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!1,n=!1,p=t.tag,g=t.result;else{if(!x)return t.tag=h,t.anchor=u,!0;xn(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return t.tag=h,t.anchor=u,!0;xn(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(kn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!0,n=!0):y?(y=!1,n=!0):xn(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,c=r;if((t.line===o||t.lineIndent>e)&&(y&&(a=t.line,s=t.lineStart,l=t.position),Mn(t,e,Gr,!0,n)&&(y?g=t.result:m=t.result),y||(kn(t,d,f,p,g,m,a,s,l),p=g=m=null),wn(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)xn(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return y&&kn(t,d,f,p,g,null,a,s,l),x&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=d),x}(t,f,d))||function(t,e){var i,r,n,o,a,s,l,c,h,u,d,f,p=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(f=t.input.charCodeAt(t.position)))a=93,c=!1,o=[];else{if(123!==f)return!1;a=125,c=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),f=t.input.charCodeAt(++t.position);0!==f;){if(wn(t,!0,e),(f=t.input.charCodeAt(t.position))===a)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=o,!0;p?44===f&&xn(t,"expected the node content, but found ','"):xn(t,"missed comma between flow collection entries"),d=null,s=l=!1,63===f&&ln(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,wn(t,!0,e)),i=t.line,r=t.lineStart,n=t.position,Mn(t,e,Ur,!1,!0),u=t.tag,h=t.result,wn(t,!0,e),f=t.input.charCodeAt(t.position),!l&&t.line!==i||58!==f||(s=!0,f=t.input.charCodeAt(++t.position),wn(t,!0,e),Mn(t,e,Ur,!1,!0),d=t.result),c?kn(t,o,y,u,h,d,i,r,n):s?o.push(kn(t,null,y,u,h,d,i,r,n)):o.push(h),wn(t,!0,e),44===(f=t.input.charCodeAt(t.position))?(p=!0,f=t.input.charCodeAt(++t.position)):p=!1}xn(t,"unexpected end of the stream within a flow collection")}(t,d)?m=!0:(a&&function(t,e){var i,r,n,o,a,s=Xr,l=!1,c=!1,h=e,u=0,d=!1;if(124===(o=t.input.charCodeAt(t.position)))r=!1;else{if(62!==o)return!1;r=!0}for(t.kind="scalar",t.result="";0!==o;)if(43===(o=t.input.charCodeAt(++t.position))||45===o)Xr===s?s=43===o?Qr:Jr:xn(t,"repeat of a chomping mode identifier");else{if(!((n=48<=(a=o)&&a<=57?a-48:-1)>=0))break;0===n?xn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?xn(t,"repeat of an indentation width identifier"):(h=e+n-1,c=!0)}if(sn(o)){do{o=t.input.charCodeAt(++t.position)}while(sn(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!an(o)&&0!==o)}for(;0!==o;){for(Tn(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!c||t.lineIndent<h)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>h&&(h=t.lineIndent),an(o))u++;else{if(t.lineIndent<h){s===Qr?t.result+=lr.repeat("\n",l?1+u:u):s===Xr&&l&&(t.result+="\n");break}for(r?sn(o)?(d=!0,t.result+=lr.repeat("\n",l?1+u:u)):d?(d=!1,t.result+=lr.repeat("\n",u+1)):0===u?l&&(t.result+=" "):t.result+=lr.repeat("\n",u):t.result+=lr.repeat("\n",l?1+u:u),l=!0,c=!0,u=0,i=t.position;!an(o)&&0!==o;)o=t.input.charCodeAt(++t.position);_n(t,i,t.position,!1)}}return!0}(t,d)||function(t,e){var i,r,n;if(39!==(i=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(i=t.input.charCodeAt(t.position));)if(39===i){if(_n(t,r,t.position,!0),39!==(i=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,n=t.position}else an(i)?(_n(t,r,n,!0),Bn(t,wn(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Sn(t)?xn(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);xn(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var i,r,n,o,a,s,l;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return _n(t,i,t.position,!0),t.position++,!0;if(92===s){if(_n(t,i,t.position,!0),an(s=t.input.charCodeAt(++t.position)))wn(t,!1,e);else if(s<256&&fn[s])t.result+=pn[s],t.position++;else if((a=120===(l=s)?2:117===l?4:85===l?8:0)>0){for(n=a,o=0;n>0;n--)(a=hn(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+a:xn(t,"expected hexadecimal character");t.result+=dn(o),t.position++}else xn(t,"unknown escape sequence");i=r=t.position}else an(s)?(_n(t,i,r,!0),Bn(t,wn(t,!1,e)),i=r=t.position):t.position===t.lineStart&&Sn(t)?xn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}xn(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?m=!0:!function(t){var e,i,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!ln(r)&&!cn(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&xn(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),Wr.call(t.anchorMap,i)||xn(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],wn(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,a,s,l,c,h,u=t.kind,d=t.result;if(ln(h=t.input.charCodeAt(t.position))||cn(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(ln(r=t.input.charCodeAt(t.position+1))||i&&cn(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,a=!1;0!==h;){if(58===h){if(ln(r=t.input.charCodeAt(t.position+1))||i&&cn(r))break}else if(35===h){if(ln(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&Sn(t)||i&&cn(h))break;if(an(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,wn(t,!1,-1),t.lineIndent>=e){a=!0,h=t.input.charCodeAt(t.position);continue}t.position=o,t.line=s,t.lineStart=l,t.lineIndent=c;break}}a&&(_n(t,n,o,!1),Bn(t,t.line-s),n=o=t.position,a=!1),sn(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return _n(t,n,o,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Ur===i)&&(m=!0,null===t.tag&&(t.tag="?")):(m=!0,null===t.tag&&null===t.anchor||xn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===p&&(m=s&&Fn(t,f))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&xn(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l<c;l+=1)if((u=t.implicitTypes[l]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Wr.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,l=0,c=(h=t.typeMap.multi[t.kind||"fallback"]).length;l<c;l+=1)if(t.tag.slice(0,h[l].tag.length)===h[l].tag){u=h[l];break}u||xn(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&xn(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):xn(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||m}function En(t){var e,i,r,n,o=t.position,a=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(n=t.input.charCodeAt(t.position))&&(wn(t,!0,-1),n=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==n));){for(a=!0,n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!ln(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&xn(t,"directive name must not be less than one character in length");0!==n;){for(;sn(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!an(n));break}if(an(n))break;for(e=t.position;0!==n&&!ln(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&Tn(t),Wr.call(Cn,i)?Cn[i](t,i,r):bn(t,'unknown document directive "'+i+'"')}wn(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,wn(t,!0,-1)):a&&xn(t,"directives end mark is expected"),Mn(t,t.lineIndent-1,Gr,!1,!0),wn(t,!0,-1),t.checkLineBreaks&&tn.test(t.input.slice(o,t.position))&&bn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Sn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,wn(t,!0,-1)):t.position<t.length-1&&xn(t,"end of the stream or a document separator is expected")}function Nn(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var i=new mn(t,e),r=t.indexOf("\0");for(-1!==r&&(i.position=r,xn(i,"null byte is not allowed in input")),i.input+="\0";32===i.input.charCodeAt(i.position);)i.lineIndent+=1,i.position+=1;for(;i.position<i.length-1;)En(i);return i.documents}var Zn=Lr,jn={loadAll:function(t,e,i){null!==e&&"object"==typeof e&&void 0===i&&(i=e,e=null);var r=Nn(t,i);if("function"!=typeof e)return r;for(var n=0,o=r.length;n<o;n+=1)e(r[n])},load:function(t,e){var i=Nn(t,e);if(0!==i.length){if(1===i.length)return i[0];throw new ur("expected a single document in the stream, but found more")}}}.load;const On=t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,((t,e,i)=>"<"+e+i.replace(/="([^"]*)"/g,"='$1'")+">")),In=t=>{const{text:e,metadata:i}=function(t){const e=t.match($t);if(!e)return{text:t,metadata:{}};let i=jn(e[1],{schema:Zn})??{};i="object"!=typeof i||Array.isArray(i)?{}:i;const r={};return i.displayMode&&(r.displayMode=i.displayMode.toString()),i.title&&(r.title=i.title.toString()),i.config&&(r.config=i.config),{text:t.slice(e[0].length),metadata:r}}(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},Dn=t=>{const e=xe.detectInit(t)??{},i=xe.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some((({type:t})=>{})):"wrap"===(null==i?void 0:i.type)&&(e.wrap=!0),{text:(r=t,r.replace(zt,"")),directive:e};var r};function qn(t){const e=On(t),i=In(e),r=Dn(i.text),n=ye(i.config,r.directive);return{code:t=ar(r.text),title:i.title,config:n}}const $n=["foreignobject"],zn=["dominant-baseline"];function Pn(t){const e=qn(t);return Ee(),Me(e.config??{}),e}const Rn=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,Hn=(t,e,i,r)=>{const n=((t,e={})=>{var i;let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,ot.Z)(e)){const n=t.htmlLabels||(null==(i=t.flowchart)?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in e){const i=e[t];(0,ot.Z)(i.styles)||n.forEach((t=>{r+=Rn(i.id,t,i.styles)})),(0,ot.Z)(i.textStyles)||(r+=Rn(i.id,"tspan",i.textStyles))}}return r})(t,i);return M(tt(`${r}{${mi(e,n,t.themeVariables)}}`),E)},Wn=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function Un(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Yn=(t,e={})=>{const{code:i}=qn(t);return rr(i,e)};const Vn=Object.freeze({render:async function(t,e,i){var r,n,o,l,c,h;er();const u=Pn(e);e=u.code;const d=Le();st.debug(d),e.length>((null==d?void 0:d.maxTextSize)??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const f="#"+t,p="i"+t,g="#"+p,m="d"+t,y="#"+m;let x=(0,a.Ys)("body");const b="sandbox"===d.securityLevel,C="loose"===d.securityLevel,_=d.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),b){const t=Un((0,a.Ys)(i),p);x=(0,a.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ys)(i);Wn(x,t,m,`font-family: ${_}`,"http://www.w3.org/1999/xlink")}else{if(((t,e,i,r)=>{var n,o,a;null==(n=t.getElementById(e))||n.remove(),null==(o=t.getElementById(i))||o.remove(),null==(a=t.getElementById(r))||a.remove()})(document,t,m,p),b){const t=Un((0,a.Ys)("body"),p);x=(0,a.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ys)("body");Wn(x,t,m)}let v,k;try{v=await Yn(e,{title:u.title})}catch(Z){v=new ir("error"),k=Z}const T=x.select(y).node(),w=v.type,S=T.firstChild,B=S.firstChild,F=null==(n=(r=v.renderer).getClasses)?void 0:n.call(r,e,v),L=Hn(d,w,F,f),A=document.createElement("style");A.innerHTML=L,S.insertBefore(A,B);try{await v.renderer.draw(e,t,Ce,v)}catch(j){throw Pi.draw(e,t,Ce),j}!function(t,e,i,r){(function(t,e){t.attr("role",or),""!==e&&t.attr("aria-roledescription",e)})(e,t),function(t,e,i,r){if(void 0!==t.insert){if(i){const e=`chart-desc-${r}`;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(i)}if(e){const i=`chart-title-${r}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}(e,i,r,e.attr("id"))}(w,x.select(`${y} svg`),null==(l=(o=v.db).getAccTitle)?void 0:l.call(o),null==(h=(c=v.db).getAccDescription)?void 0:h.call(c)),x.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let M=x.select(y).node().innerHTML;if(st.debug("config.arrowMarkerAbsolute",d.arrowMarkerAbsolute),M=((t="",e,i)=>{let r=t;return i||e||(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=be(r),r=r.replace(/<br>/g,"<br/>"),r})(M,b,yt(d.arrowMarkerAbsolute)),b){M=((t="",e)=>{var i,r;return`<iframe style="width:100%;height:${(null==(r=null==(i=null==e?void 0:e.viewBox)?void 0:i.baseVal)?void 0:r.height)?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`})(M,x.select(y+" svg").node())}else C||(M=s.sanitize(M,{ADD_TAGS:$n,ADD_ATTR:zn}));if(nr.forEach((t=>{t()})),nr=[],k)throw k;const E=b?g:y,N=(0,a.Ys)(E).node();return N&&"remove"in N&&N.remove(),{svg:M,bindFunctions:v.db.bindFunctions}},parse:async function(t,e){er(),t=Pn(t).code;try{await Yn(t)}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},getDiagramFromText:Yn,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),ve=Gt({},t),(null==t?void 0:t.theme)&&t.theme in Et?t.themeVariables=Et[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Et.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(t=>(ke=Gt({},_e),ke=Gt(ke,t),t.theme&&Et[t.theme]&&(ke.themeVariables=Et[t.theme].getThemeVariables(t.themeVariables)),Se(ke,Te),ke))(t):Be();lt(i.logLevel),er()},getConfig:Le,setConfig:Fe,getSiteConfig:Be,updateSiteConfig:t=>(ke=Gt(ke,t),Se(ke,Te),ke),reset:()=>{Ee()},globalReset:()=>{Ee(_e)},defaultConfig:_e});lt(Le().logLevel),Ee(Le());const Gn=(t,e,i)=>{st.warn(t),ge(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},Xn=async function(t={querySelector:".mermaid"}){try{await Jn(t)}catch(e){if(ge(e)&&st.error(e.str),no.parseError&&no.parseError(e),!t.suppressErrors)throw st.error("Use the suppressErrors option to suppress these errors"),e}},Jn=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const n=Vn.getConfig();let o;if(st.debug((t?"":"No ")+"Callback function found"),i)o=i;else{if(!e)throw new Error("Nodes and querySelector are both undefined");o=document.querySelectorAll(e)}st.debug(`Found ${o.length} diagrams`),void 0!==(null==n?void 0:n.startOnLoad)&&(st.debug("Start On Load: "+(null==n?void 0:n.startOnLoad)),Vn.updateSiteConfig({startOnLoad:null==n?void 0:n.startOnLoad}));const a=new xe.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const l=[];for(const h of Array.from(o)){if(st.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;s=h.innerHTML,s=(0,r.Z)(xe.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");const i=xe.detectInit(s);i&&st.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await ro(e,s,h);h.innerHTML=i,t&&await t(e),r&&r(h)}catch(c){Gn(c,l,no.parseError)}}if(l.length>0)throw l[0]},Qn=function(t){Vn.initialize(t)},Kn=function(){if(no.startOnLoad){const{startOnLoad:t}=Vn.getConfig();t&&no.run().catch((t=>st.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",Kn,!1);const to=[];let eo=!1;const io=async()=>{if(!eo){for(eo=!0;to.length>0;){const e=to.shift();if(e)try{await e()}catch(t){st.error("Error executing queue",t)}}eo=!1}},ro=(t,e,i)=>new Promise(((r,n)=>{to.push((()=>new Promise(((o,a)=>{Vn.render(t,e,i).then((t=>{o(t),r(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=no.parseError)||e.call(no,t),a(t),n(t)}))})))),io().catch(n)})),no={startOnLoad:!0,mermaidAPI:Vn,parse:async(t,e)=>new Promise(((i,r)=>{to.push((()=>new Promise(((n,o)=>{Vn.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=no.parseError)||e.call(no,t),o(t),r(t)}))})))),io().catch(r)})),render:ro,init:async function(t,e,i){st.warn("mermaid.init is deprecated. Please use run instead."),t&&Qn(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await Xn(r)},run:Xn,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{Ut(...t),!1===e&&await(async()=>{st.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Ht).map((async([t,{detector:e,loader:i}])=>{if(i)try{Di(t)}catch(r){try{const{diagram:t,id:r}=await i();Ii(r,t,e)}catch(n){throw st.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete Ht[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){st.error(`Failed to load ${t.length} external diagrams`);for(const e of t)st.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}})()},initialize:Qn,parseError:void 0,contentLoaded:Kn,setParseErrorHandler:function(t){no.parseError=t},detectType:Wt}}}]); \ No newline at end of file diff --git a/assets/js/17896441.1c4eee25.js.LICENSE.txt b/assets/js/17896441.1c4eee25.js.LICENSE.txt new file mode 100644 index 0000000000..d94f8a5617 --- /dev/null +++ b/assets/js/17896441.1c4eee25.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! + * Wait for document loaded before starting the execution + */ + +/*! @license DOMPurify 3.0.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.8/LICENSE */ + +/*! Check if previously processed */ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ diff --git a/assets/js/17e50ecd.84c65831.js b/assets/js/17e50ecd.84c65831.js new file mode 100644 index 0000000000..1bab111e44 --- /dev/null +++ b/assets/js/17e50ecd.84c65831.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7756],{84166:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=a(85893),i=a(11151);const t={},r="ADJUSTMENT",l={id:"about/references/keywords/ADJUSTMENT",title:"ADJUSTMENT",description:"eCalc Model",source:"@site/docs/about/references/keywords/ADJUSTMENT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ADJUSTMENT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"YAML keywords",permalink:"/ecalc/docs/about/references/keywords/"},next:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"adjustment",children:"ADJUSTMENT"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/",children:"eCalc Model"}),"\n/ ",(0,n.jsx)(e.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"\n/ ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{children:"Required"}),(0,n.jsx)(e.th,{children:"Child of"}),(0,n.jsx)(e.th,{children:"Children/Options"})]})}),(0,n.jsx)(e.tbody,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:"No"}),(0,n.jsx)(e.td,{children:"FACILITY_INPUTS"}),(0,n.jsxs)(e.td,{children:["CONSTANT ",(0,n.jsx)("br",{})," FACTOR"]})]})})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(e.p,{children:"For various reasons (degenerated equipment, liquid pumps, etc.), the predicted energy usage from\nthe facility input does not always match the historic usage. To account for this, adjustments\nmay be added to the facility input. Currently, linear adjustment to the energy usage is supported."}),"\n",(0,n.jsx)(e.admonition,{type:"warning",children:(0,n.jsxs)(e.p,{children:["Even though The ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})," factor and constant can be added to any\n",(0,n.jsx)(e.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"}),", it is only\nimplemented and used for a small subset of equipment, namely: SAMPLED COMPRESSOR MODEL, TABULATED ENERGY USAGE MODEL,\n",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),"\n, PUMP MODEL (Single Speed, Variable Speed and System) and compressors in a compressor system.\nIf you are not sure, give it a test first."]})}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"ADJUSTMENT:\n <ADJUSTMENT 1>: <VALUE>\n <ADJUSTMENT 2>: <VALUE>\n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(e.p,{children:"Say you have input that is off by a constant and percentage. You could fix this in the following way:"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n CONSTANT: 2\n FACTOR: 1.05\n"})}),"\n",(0,n.jsxs)(e.p,{children:["The resulting energy consumption ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mo,{children:"+"}),(0,n.jsx)(e.mn,{children:"1.05"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = 2 + 1.05 \\times E_\\mathrm{original}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,n.jsx)(e.span,{className:"mord",children:"2"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"+"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1.05"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},11151:(s,e,a)=>{a.d(e,{Z:()=>l,a:()=>r});var n=a(67294);const i={},t=n.createContext(i);function r(s){const e=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/18b0ec42.7932013a.js b/assets/js/18b0ec42.7932013a.js new file mode 100644 index 0000000000..81393c6927 --- /dev/null +++ b/assets/js/18b0ec42.7932013a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2962],{10946:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>i});var a=t(85893),s=t(11151);const r={slug:"v8.8-release",title:"v8.8",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},l="eCalc",c={id:"changelog/v8-8",title:"v8.8",description:"New Features",source:"@site/docs/changelog/v8-8.md",sourceDirName:"changelog",slug:"/changelog/v8.8-release",permalink:"/ecalc/docs/changelog/v8.8-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-8.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:0,frontMatter:{slug:"v8.8-release",title:"v8.8",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},sidebar:"changelog",previous:{title:"v8.10 (Latest)",permalink:"/ecalc/docs/changelog/v8.10-release"},next:{title:"Next",permalink:"/ecalc/docs/changelog/latest"}},o={},i=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,a.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Updated NeqSim to version 2.5.9. This may lead to small numerical differences in the results when old models are re-run with the latest version of eCalc."}),"\n",(0,a.jsx)(n.li,{children:"Provide maximum rate in CompressorModelResult (if there are more than one stream, only max rate for the first one is reported)"}),"\n",(0,a.jsxs)(n.li,{children:["Support for specifying ",(0,a.jsx)(n.code,{children:"RATE_TYPE"})," (",(0,a.jsx)(n.code,{children:"STREAM_DAY"})," or ",(0,a.jsx)(n.code,{children:"CALENDAR_DAY"}),") for ",(0,a.jsx)(n.code,{children:"VENTING_EMITTERS"})]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,a.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>l});var a=t(67294);const s={},r=a.createContext(s);function l(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.b588d37a.js b/assets/js/1a4e3797.b588d37a.js new file mode 100644 index 0000000000..aadbf64a8e --- /dev/null +++ b/assets/js/1a4e3797.b588d37a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7920],{88824:(e,t,r)=>{r.d(t,{c:()=>u});var s=r(67294),a=r(52263);const n=["zero","one","two","few","many","other"];function c(e){return n.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function u(){const e=o();return{selectMessage:(t,r)=>function(e,t,r){const s=e.split("|");if(1===s.length)return s[0];s.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const a=r.select(t),n=r.pluralForms.indexOf(a);return s[Math.min(n,s.length-1)]}(r,t,e)}}},51473:(e,t,r)=>{r.r(t),r.d(t,{default:()=>b});var s=r(67294),a=r(52263),n=r(32045),c=r(35742),l=r(33692),o=r(95999),u=r(88824),h=r(1728),i=r(16550),m=r(72389),d=r(61029);const p=function(){const e=(0,m.Z)(),t=(0,i.k6)(),r=(0,i.TH)(),{siteConfig:{baseUrl:s}}=(0,a.Z)(),n=e?new URLSearchParams(r.search):null,c=n?.get("q")||"",l=n?.get("ctx")||"",o=n?.get("version")||"",u=e=>{const t=new URLSearchParams(r.search);return e?t.set("q",e):t.delete("q"),t};return{searchValue:c,searchContext:l&&Array.isArray(d.Kc)&&d.Kc.some((e=>"string"==typeof e?e===l:e.path===l))?l:"",searchVersion:o,updateSearchPath:e=>{const r=u(e);t.replace({search:r.toString()})},updateSearchContext:e=>{const s=new URLSearchParams(r.search);s.set("ctx",e),t.replace({search:s.toString()})},generateSearchPageLink:e=>{const t=u(e);return`${s}search?${t.toString()}`}}};var g=r(90022),x=r(98202),f=r(82539),y=r(10726),S=r(91073),C=r(80311),j=r(73926);const I={searchContextInput:"searchContextInput_mXoe",searchQueryInput:"searchQueryInput_CFBF",searchResultItem:"searchResultItem_U687",searchResultItemPath:"searchResultItemPath_uIbk",searchResultItemSummary:"searchResultItemSummary_oZHr",searchQueryColumn:"searchQueryColumn_q7nx",searchContextColumn:"searchContextColumn_oWAF"};var v=r(50051),w=r(85893);function R(){const{siteConfig:{baseUrl:e},i18n:{currentLocale:t}}=(0,a.Z)(),{selectMessage:r}=(0,u.c)(),{searchValue:n,searchContext:l,searchVersion:i,updateSearchPath:m,updateSearchContext:f}=p(),[y,S]=(0,s.useState)(n),[j,R]=(0,s.useState)(),[b,_]=(0,s.useState)(),F=`${e}${i}`,A=(0,s.useMemo)((()=>y?(0,o.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:y}):(0,o.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[y]);(0,s.useEffect)((()=>{m(y),j&&(y?j(y,(e=>{_(e)})):_(void 0))}),[y,j]);const $=(0,s.useCallback)((e=>{S(e.target.value)}),[]);return(0,s.useEffect)((()=>{n&&n!==y&&S(n)}),[n]),(0,s.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=!Array.isArray(d.Kc)||l||d.pQ?await(0,g.w)(F,l):{wrappedIndexes:[],zhDictionary:[]};R((()=>(0,x.v)(e,t,100)))}()}),[l,F]),(0,w.jsxs)(s.Fragment,{children:[(0,w.jsxs)(c.Z,{children:[(0,w.jsx)("meta",{property:"robots",content:"noindex, follow"}),(0,w.jsx)("title",{children:A})]}),(0,w.jsxs)("div",{className:"container margin-vert--lg",children:[(0,w.jsx)("h1",{children:A}),(0,w.jsxs)("div",{className:"row",children:[(0,w.jsx)("div",{className:(0,h.Z)("col",{[I.searchQueryColumn]:Array.isArray(d.Kc),"col--9":Array.isArray(d.Kc),"col--12":!Array.isArray(d.Kc)}),children:(0,w.jsx)("input",{type:"search",name:"q",className:I.searchQueryInput,"aria-label":"Search",onChange:$,value:y,autoComplete:"off",autoFocus:!0})}),Array.isArray(d.Kc)?(0,w.jsx)("div",{className:(0,h.Z)("col","col--3","padding-left--none",I.searchContextColumn),children:(0,w.jsxs)("select",{name:"search-context",className:I.searchContextInput,id:"context-selector",value:l,onChange:e=>f(e.target.value),children:[d.pQ&&(0,w.jsx)("option",{value:"",children:(0,o.I)({id:"theme.SearchPage.searchContext.everywhere",message:"everywhere"})}),d.Kc.map((e=>{const{label:r,path:s}=(0,v._)(e,t);return(0,w.jsx)("option",{value:s,children:r},s)}))]})}):null]}),!j&&y&&(0,w.jsx)("div",{children:(0,w.jsx)(C.Z,{})}),b&&(b.length>0?(0,w.jsx)("p",{children:r(b.length,(0,o.I)({id:"theme.SearchPage.documentsFound.plurals",message:"1 document found|{count} documents found",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)'},{count:b.length}))}):(0,w.jsx)("p",{children:(0,o.I)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"})})),(0,w.jsx)("section",{children:b&&b.map((e=>(0,w.jsx)(P,{searchResult:e},e.document.i)))})]})]})}function P(e){let{searchResult:{document:t,type:r,page:s,tokens:a,metadata:n}}=e;const c=0===r,o=2===r,u=(c?t.b:s.b).slice(),h=o?t.s:t.t;c||u.push(s.t);let i="";if(d.vc&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append("_highlight",t);i=`?${e.toString()}`}return(0,w.jsxs)("article",{className:I.searchResultItem,children:[(0,w.jsx)("h2",{children:(0,w.jsx)(l.Z,{to:t.u+i+(t.h||""),dangerouslySetInnerHTML:{__html:o?(0,f.C)(h,a):(0,y.o)(h,(0,S.m)(n,"t"),a,100)}})}),u.length>0&&(0,w.jsx)("p",{className:I.searchResultItemPath,children:(0,j.e)(u)}),o&&(0,w.jsx)("p",{className:I.searchResultItemSummary,dangerouslySetInnerHTML:{__html:(0,y.o)(t.t,(0,S.m)(n,"t"),a,100)}})]})}const b=function(){return(0,w.jsx)(n.Z,{children:(0,w.jsx)(R,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1c663d3d.3b2eb3c1.js b/assets/js/1c663d3d.3b2eb3c1.js new file mode 100644 index 0000000000..79bd0065a4 --- /dev/null +++ b/assets/js/1c663d3d.3b2eb3c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8392],{46703:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var i=n(85893),o=n(11151);const a={title:"Getting started",sidebar_position:2,description:"Getting started with eCalc"},r="API Reference",c={id:"about/getting_started/index",title:"Getting started",description:"Getting started with eCalc",source:"@site/docs/about/getting_started/index.md",sourceDirName:"about/getting_started",slug:"/about/getting_started/",permalink:"/ecalc/docs/about/getting_started/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Getting started",sidebar_position:2,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"Introduction",permalink:"/ecalc/docs/about/"},next:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"}},s={},l=[{value:"What method should I choose?",id:"what-method-should-i-choose",level:2},{value:"eCalc CLI",id:"ecalc-cli",level:3},{value:"Python Library",id:"python-library",level:3}];function d(e){const t={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"api-reference",children:"API Reference"}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.p,{children:["Currently the ",(0,i.jsx)(t.em,{children:"only"})," officially supported method is the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," using eCalc YAML models."]})}),"\n",(0,i.jsx)(t.p,{children:"There are three options to run eCalc models:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/library/",children:"eCalc Python library"})}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"what-method-should-i-choose",children:"What method should I choose?"}),"\n",(0,i.jsx)(t.h3,{id:"ecalc-cli",children:"eCalc CLI"}),"\n",(0,i.jsxs)(t.p,{children:["Choose the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," option if you:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Don't know much about programming"}),"\n",(0,i.jsx)(t.li,{children:"Have simple requirements"}),"\n",(0,i.jsx)(t.li,{children:"Can define the eCalc models statically"}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"python-library",children:"Python Library"}),"\n",(0,i.jsxs)(t.p,{children:["Choose the ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/library/",children:"Python Library"})," option if you:"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Are a developer or advanced user, and want to build eCalc models and get results programmatically"}),"\n",(0,i.jsx)(t.li,{children:"Use Python, and you need to use (parts of) eCalc as a dependency"}),"\n",(0,i.jsx)(t.li,{children:'Need access to "inner core functionality" of eCalc'}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon"})})]})}function h(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>r});var i=n(67294);const o={},a=i.createContext(o);function r(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.9c9986b4.js b/assets/js/1df93b7f.9c9986b4.js new file mode 100644 index 0000000000..17f5196205 --- /dev/null +++ b/assets/js/1df93b7f.9c9986b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3237],{69754:(t,u,e)=>{e.r(u),e.d(u,{default:()=>a});e(67294);var n=e(16550),o=e(85893);function a(){return(0,o.jsx)(n.l_,{to:"docs/about/"})}}}]); \ No newline at end of file diff --git a/assets/js/1e7de7fe.48c2fda9.js b/assets/js/1e7de7fe.48c2fda9.js new file mode 100644 index 0000000000..26578047a3 --- /dev/null +++ b/assets/js/1e7de7fe.48c2fda9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6124],{20043:e=>{e.exports=JSON.parse('{"title":"Guides","description":"This section of the documentation lists reference documentations.","slug":"/category/guides","permalink":"/ecalc/docs/category/guides","navigation":{"previous":{"title":"Markdown","permalink":"/ecalc/docs/contribute/documentation-guide/markdown"},"next":{"title":"Git","permalink":"/ecalc/docs/contribute/guides/git"}}}')}}]); \ No newline at end of file diff --git a/assets/js/1f60d0d4.12f89e4f.js b/assets/js/1f60d0d4.12f89e4f.js new file mode 100644 index 0000000000..f5b66e0a96 --- /dev/null +++ b/assets/js/1f60d0d4.12f89e4f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6539],{64587:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>d});var i=t(85893),o=t(11151);const s={title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},a="Introduction to eCalc\u2122",r={id:"about/index",title:"Introduction",description:"Introduction to eCalc documentation",source:"@site/docs/about/index.md",sourceDirName:"about",slug:"/about/",permalink:"/ecalc/docs/about/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Introduction",sidebar_position:1,description:"Introduction to eCalc documentation"},sidebar:"about",next:{title:"Getting started",permalink:"/ecalc/docs/about/getting_started/"}},c={},d=[{value:"What is eCalc\u2122?",id:"what-is-ecalc",level:2},{value:"Why should I use eCalc\u2122?",id:"why-should-i-use-ecalc",level:3},{value:"How to use eCalc\u2122?",id:"how-to-use-ecalc",level:3}];function l(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"introduction-to-ecalc",children:"Introduction to eCalc\u2122"}),"\n",(0,i.jsx)(n.p,{children:"The eCalc\u2122 technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area."}),"\n",(0,i.jsx)(n.h2,{id:"what-is-ecalc",children:"What is eCalc\u2122?"}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support."}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered."}),"\n",(0,i.jsx)(n.p,{children:"eCalc\u2122 uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(83676).Z+"",width:"4535",height:"2551"})}),"\n",(0,i.jsx)(n.h3,{id:"why-should-i-use-ecalc",children:"Why should I use eCalc\u2122?"}),"\n",(0,i.jsx)(n.p,{children:"By using eCalc\u2122 you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures."}),"\n",(0,i.jsx)(n.h3,{id:"how-to-use-ecalc",children:"How to use eCalc\u2122?"}),"\n",(0,i.jsxs)(n.p,{children:["To use eCalc\u2122 you need to create a model setup of your asset.\nThis is described in the ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/",children:"Modelling"})," section."]}),"\n",(0,i.jsxs)(n.p,{children:["Once the model is ready, you can run the eCalc\u2122 calculator. Different user interfaces for the calculator are offered. These are described in detail in the ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/getting_started/",children:"Getting started"})," section."]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},83676:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/ecalc_illustration-9c9342f8d3a926d760096a17ccb76556.svg"},11151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var i=t(67294);const o={},s=i.createContext(o);function a(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1f7805b6.cb8ffae1.js b/assets/js/1f7805b6.cb8ffae1.js new file mode 100644 index 0000000000..9d716692b9 --- /dev/null +++ b/assets/js/1f7805b6.cb8ffae1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2802],{51816:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var a=t(85893),r=t(11151);const s={slug:"v8.6-release",title:"v8.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:16},i="eCalc",l={id:"changelog/v8-6",title:"v8.6",description:"New Features",source:"@site/docs/changelog/v8-6.md",sourceDirName:"changelog",slug:"/changelog/v8.6-release",permalink:"/ecalc/docs/changelog/v8.6-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-6.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:16,frontMatter:{slug:"v8.6-release",title:"v8.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:16},sidebar:"changelog",previous:{title:"v8.5",permalink:"/ecalc/docs/changelog/v8.5-release"},next:{title:"v8.7",permalink:"/ecalc/docs/changelog/v8.7-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,a.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Added a ModelInputFailureStatus. If there are errors in the rate or pressure input to a compressor a failure code will be returned in the compressors failure_status (INVALID_RATE_INPUT or INVALID_SUCTION/INTERMEDIATE/DISCHARGE_PRESSURE_INPUT."}),"\n",(0,a.jsxs)(n.li,{children:["Rate type is included in header for csv export. E.g. ",(0,a.jsx)(n.code,{children:"Sm3/sd"})," for streaming day and ",(0,a.jsx)(n.code,{children:"Sm3/cd"})," for calendar day."]}),"\n",(0,a.jsx)(n.li,{children:"Generating generic variable speed compressor charts from input rates/heads has a new and improved algorithm. The new algorithm tends to favour increase in head compared to the previous one. Running old models with this new algorithm may lead to slight changes in the results."}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Fixed bug giving small numerical difficulties when calculating maximum standard rate for a simplified compressor train"}),"\n",(0,a.jsx)(n.li,{children:"Ensure that start date and end date in the global time vector is consistent with the requested output frequency. This makes sure that resampling (typically for monthly or yearly reporting) can be done even when the start or end date is outside of the requested reporting frequency (e.g. starting in August when the reporting frquency is yearly), and that the resampling is done without dropping volumes."}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["Economic details have been deprecated from eCalc. Input data such as ",(0,a.jsx)(n.code,{children:"tax"}),", ",(0,a.jsx)(n.code,{children:"quota"})," and ",(0,a.jsx)(n.code,{children:"price"})," for fuel and emissions will now be ignored, and will hence also no longer be reported. If you have used those in your model, they will be ignored. It will be treated as an error in a future version of eCalc."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>i});var a=t(67294);const r={},s=a.createContext(r);function i(e){const n=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2237.660f8cae.js b/assets/js/2237.660f8cae.js new file mode 100644 index 0000000000..4ba01de0f4 --- /dev/null +++ b/assets/js/2237.660f8cae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2237],{92237:(t,e,r)=>{r.d(e,{diagram:()=>z});var i=r(28758),n=r(64218),a=(r(27484),r(17967),r(27856),function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[1,3],r=[1,6],i=[1,4],n=[1,5],a=[2,5],c=[1,12],s=[5,7,13,19,21,23,24,26,28,31,37,40,47],o=[7,13,19,21,23,24,26,28,31,37,40],l=[7,12,13,19,21,23,24,26,28,31,37,40],h=[7,13,47],m=[1,42],u=[1,41],y=[7,13,29,32,35,38,47],p=[1,55],b=[1,56],g=[1,57],d=[7,13,32,35,42,47],f={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(t,e,r,i,n,a,c){var s=a.length-1;switch(n){case 2:return a[s];case 3:return a[s-1];case 4:return i.setDirection(a[s-3]),a[s-1];case 6:i.setOptions(a[s-1]),this.$=a[s];break;case 7:a[s-1]+=a[s],this.$=a[s-1];break;case 9:this.$=[];break;case 10:a[s-1].push(a[s]),this.$=a[s-1];break;case 11:this.$=a[s-1];break;case 16:this.$=a[s].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=a[s].trim(),i.setAccDescription(this.$);break;case 19:i.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 21:i.checkout(a[s]);break;case 22:i.branch(a[s]);break;case 23:i.branch(a[s-2],a[s]);break;case 24:i.cherryPick(a[s],"",void 0);break;case 25:i.cherryPick(a[s-2],"",void 0,a[s]);break;case 26:i.cherryPick(a[s-2],"",a[s]);break;case 27:i.cherryPick(a[s-4],"",a[s],a[s-2]);break;case 28:i.cherryPick(a[s-4],"",a[s-2],a[s]);break;case 29:i.cherryPick(a[s],"",a[s-2]);break;case 30:i.cherryPick(a[s],"","");break;case 31:i.cherryPick(a[s-2],"","");break;case 32:i.cherryPick(a[s-4],"","",a[s-2]);break;case 33:i.cherryPick(a[s-4],"","",a[s]);break;case 34:i.cherryPick(a[s-2],"",a[s-4],a[s]);break;case 35:i.cherryPick(a[s-2],"","",a[s]);break;case 36:i.merge(a[s],"","","");break;case 37:i.merge(a[s-2],a[s],"","");break;case 38:i.merge(a[s-2],"",a[s],"");break;case 39:i.merge(a[s-2],"","",a[s]);break;case 40:i.merge(a[s-4],a[s],"",a[s-2]);break;case 41:i.merge(a[s-4],"",a[s],a[s-2]);break;case 42:i.merge(a[s-4],"",a[s-2],a[s]);break;case 43:i.merge(a[s-4],a[s-2],a[s],"");break;case 44:i.merge(a[s-4],a[s-2],"",a[s]);break;case 45:i.merge(a[s-4],a[s],a[s-2],"");break;case 46:i.merge(a[s-6],a[s-4],a[s-2],a[s]);break;case 47:i.merge(a[s-6],a[s],a[s-4],a[s-2]);break;case 48:i.merge(a[s-6],a[s-4],a[s],a[s-2]);break;case 49:i.merge(a[s-6],a[s-2],a[s-4],a[s]);break;case 50:i.merge(a[s-6],a[s],a[s-2],a[s-4]);break;case 51:i.merge(a[s-6],a[s-2],a[s],a[s-4]);break;case 52:i.commit(a[s]);break;case 53:i.commit("","",i.commitType.NORMAL,a[s]);break;case 54:i.commit("","",a[s],"");break;case 55:i.commit("","",a[s],a[s-2]);break;case 56:i.commit("","",a[s-2],a[s]);break;case 57:i.commit("",a[s],i.commitType.NORMAL,"");break;case 58:i.commit("",a[s-2],i.commitType.NORMAL,a[s]);break;case 59:i.commit("",a[s],i.commitType.NORMAL,a[s-2]);break;case 60:i.commit("",a[s-2],a[s],"");break;case 61:i.commit("",a[s],a[s-2],"");break;case 62:i.commit("",a[s-4],a[s-2],a[s]);break;case 63:i.commit("",a[s-4],a[s],a[s-2]);break;case 64:i.commit("",a[s-2],a[s-4],a[s]);break;case 65:i.commit("",a[s],a[s-4],a[s-2]);break;case 66:i.commit("",a[s],a[s-2],a[s-4]);break;case 67:i.commit("",a[s-2],a[s],a[s-4]);break;case 68:i.commit(a[s],"",i.commitType.NORMAL,"");break;case 69:i.commit(a[s],"",i.commitType.NORMAL,a[s-2]);break;case 70:i.commit(a[s-2],"",i.commitType.NORMAL,a[s]);break;case 71:i.commit(a[s-2],"",a[s],"");break;case 72:i.commit(a[s],"",a[s-2],"");break;case 73:i.commit(a[s],a[s-2],i.commitType.NORMAL,"");break;case 74:i.commit(a[s-2],a[s],i.commitType.NORMAL,"");break;case 75:i.commit(a[s-4],"",a[s-2],a[s]);break;case 76:i.commit(a[s-4],"",a[s],a[s-2]);break;case 77:i.commit(a[s-2],"",a[s-4],a[s]);break;case 78:i.commit(a[s],"",a[s-4],a[s-2]);break;case 79:i.commit(a[s],"",a[s-2],a[s-4]);break;case 80:i.commit(a[s-2],"",a[s],a[s-4]);break;case 81:i.commit(a[s-4],a[s],a[s-2],"");break;case 82:i.commit(a[s-4],a[s-2],a[s],"");break;case 83:i.commit(a[s-2],a[s],a[s-4],"");break;case 84:i.commit(a[s],a[s-2],a[s-4],"");break;case 85:i.commit(a[s],a[s-4],a[s-2],"");break;case 86:i.commit(a[s-2],a[s-4],a[s],"");break;case 87:i.commit(a[s-4],a[s],i.commitType.NORMAL,a[s-2]);break;case 88:i.commit(a[s-4],a[s-2],i.commitType.NORMAL,a[s]);break;case 89:i.commit(a[s-2],a[s],i.commitType.NORMAL,a[s-4]);break;case 90:i.commit(a[s],a[s-2],i.commitType.NORMAL,a[s-4]);break;case 91:i.commit(a[s],a[s-4],i.commitType.NORMAL,a[s-2]);break;case 92:i.commit(a[s-2],a[s-4],i.commitType.NORMAL,a[s]);break;case 93:i.commit(a[s-6],a[s-4],a[s-2],a[s]);break;case 94:i.commit(a[s-6],a[s-4],a[s],a[s-2]);break;case 95:i.commit(a[s-6],a[s-2],a[s-4],a[s]);break;case 96:i.commit(a[s-6],a[s],a[s-4],a[s-2]);break;case 97:i.commit(a[s-6],a[s-2],a[s],a[s-4]);break;case 98:i.commit(a[s-6],a[s],a[s-2],a[s-4]);break;case 99:i.commit(a[s-4],a[s-6],a[s-2],a[s]);break;case 100:i.commit(a[s-4],a[s-6],a[s],a[s-2]);break;case 101:i.commit(a[s-2],a[s-6],a[s-4],a[s]);break;case 102:i.commit(a[s],a[s-6],a[s-4],a[s-2]);break;case 103:i.commit(a[s-2],a[s-6],a[s],a[s-4]);break;case 104:i.commit(a[s],a[s-6],a[s-2],a[s-4]);break;case 105:i.commit(a[s],a[s-4],a[s-2],a[s-6]);break;case 106:i.commit(a[s-2],a[s-4],a[s],a[s-6]);break;case 107:i.commit(a[s],a[s-2],a[s-4],a[s-6]);break;case 108:i.commit(a[s-2],a[s],a[s-4],a[s-6]);break;case 109:i.commit(a[s-4],a[s-2],a[s],a[s-6]);break;case 110:i.commit(a[s-4],a[s],a[s-2],a[s-6]);break;case 111:i.commit(a[s-2],a[s-4],a[s-6],a[s]);break;case 112:i.commit(a[s],a[s-4],a[s-6],a[s-2]);break;case 113:i.commit(a[s-2],a[s],a[s-6],a[s-4]);break;case 114:i.commit(a[s],a[s-2],a[s-6],a[s-4]);break;case 115:i.commit(a[s-4],a[s-2],a[s-6],a[s]);break;case 116:i.commit(a[s-4],a[s],a[s-6],a[s-2]);break;case 117:this.$="";break;case 118:this.$=a[s];break;case 119:this.$=i.commitType.NORMAL;break;case 120:this.$=i.commitType.REVERSE;break;case 121:this.$=i.commitType.HIGHLIGHT}},table:[{3:1,4:2,5:e,7:r,13:i,47:n},{1:[3]},{3:7,4:2,5:e,7:r,13:i,47:n},{6:8,7:a,8:[1,9],9:[1,10],10:11,13:c},t(s,[2,124]),t(s,[2,125]),t(s,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:a,10:11,13:c},{8:[1,15]},t(o,[2,9],{11:16,12:[1,17]}),t(l,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:a,10:11,13:c},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},t(l,[2,7]),{1:[2,3]},{7:[1,36]},t(o,[2,10]),{4:37,7:r,13:i,47:n},t(o,[2,12]),t(h,[2,13]),t(h,[2,14]),t(h,[2,15]),{20:[1,38]},{22:[1,39]},t(h,[2,18]),t(h,[2,19]),t(h,[2,20]),{27:40,33:m,46:u},t(h,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:m,46:u},{32:[1,50],35:[1,51]},{27:52,33:m,46:u},{1:[2,4]},t(o,[2,11]),t(h,[2,16]),t(h,[2,17]),t(h,[2,21]),t(y,[2,122]),t(y,[2,123]),t(h,[2,52]),{33:[1,53]},{39:54,43:p,44:b,45:g},{33:[1,58]},{33:[1,59]},t(h,[2,118]),t(h,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},t(h,[2,22],{29:[1,66]}),t(h,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),t(h,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),t(d,[2,119]),t(d,[2,120]),t(d,[2,121]),t(h,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),t(h,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:p,44:b,45:g},{33:[1,81]},t(h,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:p,44:b,45:g},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:p,44:b,45:g},{33:[1,95]},{33:[1,96]},{39:97,43:p,44:b,45:g},{33:[1,98]},t(h,[2,37],{35:[1,100],38:[1,99]}),t(h,[2,38],{32:[1,102],35:[1,101]}),t(h,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},t(h,[2,23]),t(h,[2,55],{32:[1,110],42:[1,111]}),t(h,[2,59],{38:[1,112],42:[1,113]}),t(h,[2,69],{32:[1,115],38:[1,114]}),t(h,[2,56],{32:[1,116],42:[1,117]}),t(h,[2,61],{35:[1,118],42:[1,119]}),t(h,[2,72],{32:[1,121],35:[1,120]}),t(h,[2,58],{38:[1,122],42:[1,123]}),t(h,[2,60],{35:[1,124],42:[1,125]}),t(h,[2,73],{35:[1,127],38:[1,126]}),t(h,[2,70],{32:[1,129],38:[1,128]}),t(h,[2,71],{32:[1,131],35:[1,130]}),t(h,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:p,44:b,45:g},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:p,44:b,45:g},t(h,[2,25],{35:[1,140]}),t(h,[2,26],{34:[1,141]}),t(h,[2,31],{34:[1,142]}),t(h,[2,29],{34:[1,143]}),t(h,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:p,44:b,45:g},{33:[1,148]},{39:149,43:p,44:b,45:g},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:p,44:b,45:g},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:p,44:b,45:g},{33:[1,162]},{39:163,43:p,44:b,45:g},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:p,44:b,45:g},{33:[1,168]},t(h,[2,43],{35:[1,169]}),t(h,[2,44],{38:[1,170]}),t(h,[2,42],{32:[1,171]}),t(h,[2,45],{35:[1,172]}),t(h,[2,40],{38:[1,173]}),t(h,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},t(h,[2,66],{42:[1,181]}),t(h,[2,79],{32:[1,182]}),t(h,[2,67],{42:[1,183]}),t(h,[2,90],{38:[1,184]}),t(h,[2,80],{32:[1,185]}),t(h,[2,89],{38:[1,186]}),t(h,[2,65],{42:[1,187]}),t(h,[2,78],{32:[1,188]}),t(h,[2,64],{42:[1,189]}),t(h,[2,84],{35:[1,190]}),t(h,[2,77],{32:[1,191]}),t(h,[2,83],{35:[1,192]}),t(h,[2,63],{42:[1,193]}),t(h,[2,91],{38:[1,194]}),t(h,[2,62],{42:[1,195]}),t(h,[2,85],{35:[1,196]}),t(h,[2,86],{35:[1,197]}),t(h,[2,92],{38:[1,198]}),t(h,[2,76],{32:[1,199]}),t(h,[2,87],{38:[1,200]}),t(h,[2,75],{32:[1,201]}),t(h,[2,81],{35:[1,202]}),t(h,[2,82],{35:[1,203]}),t(h,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:p,44:b,45:g},{33:[1,207]},{33:[1,208]},{39:209,43:p,44:b,45:g},{33:[1,210]},t(h,[2,27]),t(h,[2,32]),t(h,[2,28]),t(h,[2,33]),t(h,[2,34]),t(h,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:p,44:b,45:g},{33:[1,215]},{39:216,43:p,44:b,45:g},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:p,44:b,45:g},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:p,44:b,45:g},{33:[1,229]},{39:230,43:p,44:b,45:g},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:p,44:b,45:g},t(h,[2,46]),t(h,[2,48]),t(h,[2,47]),t(h,[2,49]),t(h,[2,51]),t(h,[2,50]),t(h,[2,107]),t(h,[2,108]),t(h,[2,105]),t(h,[2,106]),t(h,[2,110]),t(h,[2,109]),t(h,[2,114]),t(h,[2,113]),t(h,[2,112]),t(h,[2,111]),t(h,[2,116]),t(h,[2,115]),t(h,[2,104]),t(h,[2,103]),t(h,[2,102]),t(h,[2,101]),t(h,[2,99]),t(h,[2,100]),t(h,[2,98]),t(h,[2,97]),t(h,[2,96]),t(h,[2,95]),t(h,[2,93]),t(h,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],n=[null],a=[],c=this.table,s="",o=0,l=0,h=a.slice.call(arguments,1),m=Object.create(this.lexer),u={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(u.yy[y]=this.yy[y]);m.setInput(t,u.yy),u.yy.lexer=m,u.yy.parser=this,void 0===m.yylloc&&(m.yylloc={});var p=m.yylloc;a.push(p);var b=m.options&&m.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,d,f,k,$,x,_,T,w,E={};;){if(d=r[r.length-1],this.defaultActions[d]?f=this.defaultActions[d]:(null==g&&(w=void 0,"number"!=typeof(w=i.pop()||m.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),g=w),f=c[d]&&c[d][g]),void 0===f||!f.length||!f[0]){var L="";for($ in T=[],c[d])this.terminals_[$]&&$>2&&T.push("'"+this.terminals_[$]+"'");L=m.showPosition?"Parse error on line "+(o+1)+":\n"+m.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(L,{text:m.match,token:this.terminals_[g]||g,line:m.yylineno,loc:p,expected:T})}if(f[0]instanceof Array&&f.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+g);switch(f[0]){case 1:r.push(g),n.push(m.yytext),a.push(m.yylloc),r.push(f[1]),g=null,l=m.yyleng,s=m.yytext,o=m.yylineno,p=m.yylloc;break;case 2:if(x=this.productions_[f[1]][1],E.$=n[n.length-x],E._$={first_line:a[a.length-(x||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(x||1)].first_column,last_column:a[a.length-1].last_column},b&&(E._$.range=[a[a.length-(x||1)].range[0],a[a.length-1].range[1]]),void 0!==(k=this.performAction.apply(E,[s,l,o,u.yy,f[1],n,a].concat(h))))return k;x&&(r=r.slice(0,-1*x*2),n=n.slice(0,-1*x),a=a.slice(0,-1*x)),r.push(this.productions_[f[1]][0]),n.push(E.$),a.push(E._$),_=c[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},k={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var a in n)this[a]=n[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;a<n.length;a++)if((r=this._input.match(this.rules[n[a]]))&&(!e||r[0].length>e[0].length)){if(e=r,i=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,n[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 30:case 34:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};function $(){this.yy={}}return f.lexer=k,$.prototype=f,f.Parser=$,new $}());a.parser=a;const c=a;let s=(0,i.c)().gitGraph.mainBranchName,o=(0,i.c)().gitGraph.mainBranchOrder,l={},h=null,m={};m[s]={name:s,order:o};let u={};u[s]=h;let y=s,p="LR",b=0;function g(){return(0,i.x)({length:7})}let d={};const f=function(t){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0===u[t]){let e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}{y=t;const e=u[y];h=l[e]}};function k(t,e,r){const i=t.indexOf(e);-1===i?t.push(r):t.splice(i,1,r)}function $(t){const e=t.reduce(((t,e)=>t.seq>e.seq?t:e),t[0]);let r="";t.forEach((function(t){r+=t===e?"\t*":"\t|"}));const n=[r,e.id,e.seq];for(let i in u)u[i]===e.id&&n.push(i);if(i.l.debug(n.join(" ")),e.parents&&2==e.parents.length){const r=l[e.parents[0]];k(t,e,r),t.push(l[e.parents[1]])}else{if(0==e.parents.length)return;{const r=l[e.parents];k(t,e,r)}}$(t=function(t,e){const r=Object.create(null);return t.reduce(((t,i)=>{const n=e(i);return r[n]||(r[n]=!0,t.push(i)),t}),[])}(t,(t=>t.id)))}const x=function(){const t=Object.keys(l).map((function(t){return l[t]}));return t.forEach((function(t){i.l.debug(t.id)})),t.sort(((t,e)=>t.seq-e.seq)),t},_={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},T={getConfig:()=>(0,i.c)().gitGraph,setDirection:function(t){p=t},setOptions:function(t){i.l.debug("options str",t),t=(t=t&&t.trim())||"{}";try{d=JSON.parse(t)}catch(e){i.l.error("error while parsing gitGraph options",e.message)}},getOptions:function(){return d},commit:function(t,e,r,n){i.l.debug("Entering commit:",t,e,r,n),e=i.e.sanitizeText(e,(0,i.c)()),t=i.e.sanitizeText(t,(0,i.c)()),n=i.e.sanitizeText(n,(0,i.c)());const a={id:e||b+"-"+g(),message:t,seq:b++,type:r||_.NORMAL,tag:n||"",parents:null==h?[]:[h.id],branch:y};h=a,l[a.id]=a,u[y]=a.id,i.l.debug("in pushCommit "+a.id)},branch:function(t,e){if(t=i.e.sanitizeText(t,(0,i.c)()),void 0!==u[t]){let e=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw e.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},e}u[t]=null!=h?h.id:null,m[t]={name:t,order:e?parseInt(e,10):null},f(t),i.l.debug("in createBranch")},merge:function(t,e,r,n){t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)());const a=l[u[y]],c=l[u[t]];if(y===t){let e=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(void 0===a||!a){let e=new Error('Incorrect usage of "merge". Current branch ('+y+")has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},e}if(void 0===u[t]){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},e}if(void 0===c||!c){let e=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},e}if(a===c){let e=new Error('Incorrect usage of "merge". Both branches have same head');throw e.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},e}if(e&&void 0!==l[e]){let i=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw i.hash={text:"merge "+t+e+r+n,token:"merge "+t+e+r+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+r+" "+n]},i}const s={id:e||b+"-"+g(),message:"merged branch "+t+" into "+y,seq:b++,parents:[null==h?null:h.id,u[t]],branch:y,type:_.MERGE,customType:r,customId:!!e,tag:n||""};h=s,l[s.id]=s,u[y]=s.id,i.l.debug(u),i.l.debug("in mergeBranch")},cherryPick:function(t,e,r,n){if(i.l.debug("Entering cherryPick:",t,e,r),t=i.e.sanitizeText(t,(0,i.c)()),e=i.e.sanitizeText(e,(0,i.c)()),r=i.e.sanitizeText(r,(0,i.c)()),n=i.e.sanitizeText(n,(0,i.c)()),!t||void 0===l[t]){let r=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}let a=l[t],c=a.branch;if(n&&(!Array.isArray(a.parents)||!a.parents.includes(n))){throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.")}if(a.type===_.MERGE&&!n){throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.")}if(!e||void 0===l[e]){if(c===y){let r=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const s=l[u[y]];if(void 0===s||!s){let r=new Error('Incorrect usage of "cherry-pick". Current branch ('+y+")has no commits");throw r.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},r}const o={id:b+"-"+g(),message:"cherry-picked "+a+" into "+y,seq:b++,parents:[null==h?null:h.id,a.id],branch:y,type:_.CHERRY_PICK,tag:r??`cherry-pick:${a.id}${a.type===_.MERGE?`|parent:${n}`:""}`};h=o,l[o.id]=o,u[y]=o.id,i.l.debug(u),i.l.debug("in cherryPick")}},checkout:f,prettyPrint:function(){i.l.debug(l);$([x()[0]])},clear:function(){l={},h=null;let t=(0,i.c)().gitGraph.mainBranchName,e=(0,i.c)().gitGraph.mainBranchOrder;u={},u[t]=null,m={},m[t]={name:t,order:e},y=t,b=0,(0,i.t)()},getBranchesAsObjArray:function(){return Object.values(m).map(((t,e)=>null!==t.order?t:{...t,order:parseFloat(`0.${e}`,10)})).sort(((t,e)=>t.order-e.order)).map((({name:t})=>({name:t})))},getBranches:function(){return u},getCommits:function(){return l},getCommitsArray:x,getCurrentBranch:function(){return y},getDirection:function(){return p},getHead:function(){return h},setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,setDiagramTitle:i.q,getDiagramTitle:i.r,commitType:_};let w={};const E=0,L=1,v=2,M=3,A=4;let I={},R={},O=[],C=0,S="LR";const P=t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let r=[];r="string"==typeof t?t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?t:[];for(const i of r){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","0"),t.setAttribute("class","row"),t.textContent=i.trim(),e.appendChild(t)}return e},B=(t,e,r)=>{const n=(0,i.c)().gitGraph,a=t.append("g").attr("class","commit-bullets"),c=t.append("g").attr("class","commit-labels");let s=0;"TB"===S&&(s=30);const o=Object.keys(e).sort(((t,r)=>e[t].seq-e[r].seq)),l=n.parallelCommits,h=10;o.forEach((t=>{const i=e[t];if(l)if(i.parents.length){const t=(t=>{let e="",r=0;return t.forEach((t=>{const i="TB"===S?R[t].y:R[t].x;i>=r&&(e=t,r=i)})),e||void 0})(i.parents);s="TB"===S?R[t].y+40:R[t].x+40}else s=0,"TB"===S&&(s=30);const o=s+h,m="TB"===S?o:I[i.branch].pos,u="TB"===S?I[i.branch].pos:o;if(r){let t,e=void 0!==i.customType&&""!==i.customType?i.customType:i.type;switch(e){case E:t="commit-normal";break;case L:t="commit-reverse";break;case v:t="commit-highlight";break;case M:t="commit-merge";break;case A:t="commit-cherry-pick";break;default:t="commit-normal"}if(e===v){const e=a.append("rect");e.attr("x",u-10),e.attr("y",m-10),e.attr("height",20),e.attr("width",20),e.attr("class",`commit ${i.id} commit-highlight${I[i.branch].index%8} ${t}-outer`),a.append("rect").attr("x",u-6).attr("y",m-6).attr("height",12).attr("width",12).attr("class",`commit ${i.id} commit${I[i.branch].index%8} ${t}-inner`)}else if(e===A)a.append("circle").attr("cx",u).attr("cy",m).attr("r",10).attr("class",`commit ${i.id} ${t}`),a.append("circle").attr("cx",u-3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),a.append("circle").attr("cx",u+3).attr("cy",m+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${i.id} ${t}`),a.append("line").attr("x1",u+3).attr("y1",m+1).attr("x2",u).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`),a.append("line").attr("x1",u-3).attr("y1",m+1).attr("x2",u).attr("y2",m-5).attr("stroke","#fff").attr("class",`commit ${i.id} ${t}`);else{const r=a.append("circle");if(r.attr("cx",u),r.attr("cy",m),r.attr("r",i.type===M?9:10),r.attr("class",`commit ${i.id} commit${I[i.branch].index%8}`),e===M){const e=a.append("circle");e.attr("cx",u),e.attr("cy",m),e.attr("r",6),e.attr("class",`commit ${t} ${i.id} commit${I[i.branch].index%8}`)}if(e===L){a.append("path").attr("d",`M ${u-5},${m-5}L${u+5},${m+5}M${u-5},${m+5}L${u+5},${m-5}`).attr("class",`commit ${t} ${i.id} commit${I[i.branch].index%8}`)}}}if(R[i.id]="TB"===S?{x:u,y:o}:{x:o,y:m},r){const t=4,e=2;if(i.type!==A&&(i.customId&&i.type===M||i.type!==M)&&n.showCommitLabel){const r=c.append("g"),a=r.insert("rect").attr("class","commit-label-bkg"),l=r.append("text").attr("x",s).attr("y",m+25).attr("class","commit-label").text(i.id);let h=l.node().getBBox();if(a.attr("x",o-h.width/2-e).attr("y",m+13.5).attr("width",h.width+2*e).attr("height",h.height+2*e),"TB"===S&&(a.attr("x",u-(h.width+4*t+5)).attr("y",m-12),l.attr("x",u-(h.width+4*t)).attr("y",m+h.height-12)),"TB"!==S&&l.attr("x",o-h.width/2),n.rotateCommitLabel)if("TB"===S)l.attr("transform","rotate(-45, "+u+", "+m+")"),a.attr("transform","rotate(-45, "+u+", "+m+")");else{let t=-7.5-(h.width+10)/25*9.5,e=10+h.width/25*8.5;r.attr("transform","translate("+t+", "+e+") rotate(-45, "+s+", "+m+")")}}if(i.tag){const r=c.insert("polygon"),n=c.append("circle"),a=c.append("text").attr("y",m-16).attr("class","tag-label").text(i.tag);let l=a.node().getBBox();a.attr("x",o-l.width/2);const y=l.height/2,p=m-19.2;r.attr("class","tag-label-bkg").attr("points",`\n ${s-l.width/2-t/2},${p+e}\n ${s-l.width/2-t/2},${p-e}\n ${o-l.width/2-t},${p-y-e}\n ${o+l.width/2+t},${p-y-e}\n ${o+l.width/2+t},${p+y+e}\n ${o-l.width/2-t},${p+y+e}`),n.attr("cx",s-l.width/2+t/2).attr("cy",p).attr("r",1.5).attr("class","tag-hole"),"TB"===S&&(r.attr("class","tag-label-bkg").attr("points",`\n ${u},${s+e}\n ${u},${s-e}\n ${u+h},${s-y-e}\n ${u+h+l.width+t},${s-y-e}\n ${u+h+l.width+t},${s+y+e}\n ${u+h},${s+y+e}`).attr("transform","translate(12,12) rotate(45, "+u+","+s+")"),n.attr("cx",u+t/2).attr("cy",s).attr("transform","translate(12,12) rotate(45, "+u+","+s+")"),a.attr("x",u+5).attr("y",s+3).attr("transform","translate(14,14) rotate(45, "+u+","+s+")"))}}s+=50,s>C&&(C=s)}))},N=(t,e,r,i,n)=>{const a=("TB"===S?r.x<i.x:r.y<i.y)?e.branch:t.branch;return Object.values(n).some((r=>{return(i=r).seq>t.seq&&i.seq<e.seq&&(t=>t.branch===a)(r);var i}))},G=(t,e,r=0)=>{const i=t+Math.abs(t-e)/2;if(r>5)return i;if(O.every((t=>Math.abs(t-i)>=10)))return O.push(i),i;const n=Math.abs(t-e);return G(t,e-n/5,r+1)},H=(t,e)=>{const r=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach((t=>{const i=e[t];i.parents&&i.parents.length>0&&i.parents.forEach((t=>{((t,e,r,i)=>{const n=R[e.id],a=R[r.id],c=N(e,r,n,a,i);let s,o="",l="",h=0,m=0,u=I[r.branch].index;if(c){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",h=10,m=10;const t=n.y<a.y?G(n.y,a.y):G(a.y,n.y),i=n.x<a.x?G(n.x,a.x):G(a.x,n.x);"TB"===S?n.x<a.x?(u=I[r.branch].index,s=`M ${n.x} ${n.y} L ${i-h} ${n.y} ${l} ${i} ${n.y+m} L ${i} ${a.y-h} ${o} ${i+m} ${a.y} L ${a.x} ${a.y}`):(u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${i+h} ${n.y} ${o} ${i} ${n.y+m} L ${i} ${a.y-h} ${l} ${i-m} ${a.y} L ${a.x} ${a.y}`):n.y<a.y?(u=I[r.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${t-h} ${o} ${n.x+m} ${t} L ${a.x-h} ${t} ${l} ${a.x} ${t+m} L ${a.x} ${a.y}`):(u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${t+h} ${l} ${n.x+m} ${t} L ${a.x-h} ${t} ${o} ${a.x} ${t-m} L ${a.x} ${a.y}`)}else"TB"===S?(n.x<a.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,u=I[r.branch].index,s=`M ${n.x} ${n.y} L ${a.x-h} ${n.y} ${l} ${a.x} ${n.y+m} L ${a.x} ${a.y}`),n.x>a.x&&(o="A 20 20, 0, 0, 0,",l="A 20 20, 0, 0, 1,",h=20,m=20,u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${a.y-h} ${l} ${n.x-m} ${a.y} L ${a.x} ${a.y}`),n.x===a.x&&(u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${n.x+h} ${n.y} ${o} ${n.x+m} ${a.y+h} L ${a.x} ${a.y}`)):(n.y<a.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,u=I[r.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${a.y-h} ${o} ${n.x+m} ${a.y} L ${a.x} ${a.y}`),n.y>a.y&&(o="A 20 20, 0, 0, 0,",h=20,m=20,u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${a.x-h} ${n.y} ${o} ${a.x} ${n.y-m} L ${a.x} ${a.y}`),n.y===a.y&&(u=I[e.branch].index,s=`M ${n.x} ${n.y} L ${n.x} ${a.y-h} ${o} ${n.x+m} ${a.y} L ${a.x} ${a.y}`));t.append("path").attr("d",s).attr("class","arrow arrow"+u%8)})(r,e[t],i,e)}))}))},z={parser:c,db:T,renderer:{draw:function(t,e,r,a){I={},R={},w={},C=0,O=[],S="LR";const c=(0,i.c)(),s=c.gitGraph;i.l.debug("in gitgraph renderer",t+"\n","id:",e,r),w=a.db.getCommits();const o=a.db.getBranchesAsObjArray();S=a.db.getDirection();const l=(0,n.Ys)(`[id="${e}"]`);let h=0;o.forEach(((t,e)=>{const r=P(t.name),i=l.append("g"),n=i.insert("g").attr("class","branchLabel"),a=n.insert("g").attr("class","label branch-label");a.node().appendChild(r);let c=r.getBBox();I[t.name]={pos:h,index:e},h+=50+(s.rotateCommitLabel?40:0)+("TB"===S?c.width/2:0),a.remove(),n.remove(),i.remove()})),B(l,w,!1),s.showBranches&&((t,e)=>{const r=(0,i.c)().gitGraph,n=t.append("g");e.forEach(((t,e)=>{const i=e%8,a=I[t.name].pos,c=n.append("line");c.attr("x1",0),c.attr("y1",a),c.attr("x2",C),c.attr("y2",a),c.attr("class","branch branch"+i),"TB"===S&&(c.attr("y1",30),c.attr("x1",a),c.attr("y2",C),c.attr("x2",a)),O.push(a);let s=t.name;const o=P(s),l=n.insert("rect"),h=n.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+i);h.node().appendChild(o);let m=o.getBBox();l.attr("class","branchLabelBkg label"+i).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(!0===r.rotateCommitLabel?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),h.attr("transform","translate("+(-m.width-14-(!0===r.rotateCommitLabel?30:0))+", "+(a-m.height/2-1)+")"),"TB"===S&&(l.attr("x",a-m.width/2-10).attr("y",0),h.attr("transform","translate("+(a-m.width/2-5)+", 0)")),"TB"!==S&&l.attr("transform","translate(-19, "+(a-m.height/2)+")")}))})(l,o),H(l,w),B(l,w,!0),i.u.insertTitle(l,"gitTitleText",s.titleTopMargin,a.db.getDiagramTitle()),(0,i.y)(void 0,l,s.diagramPadding,s.useMaxWidth??c.useMaxWidth)}},styles:t=>`\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0,1,2,3,4,5,6,7].map((e=>`\n .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }\n .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }\n .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }\n .label${e} { fill: ${t["git"+e]}; }\n .arrow${e} { stroke: ${t["git"+e]}; }\n `)).join("\n")}\n\n .branch {\n stroke-width: 1;\n stroke: ${t.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}\n .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }\n .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}\n .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }\n .tag-hole { fill: ${t.textColor}; }\n\n .commit-merge {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n .commit-reverse {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${t.primaryColor};\n fill: ${t.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/22f0e129.700978f3.js b/assets/js/22f0e129.700978f3.js new file mode 100644 index 0000000000..6b2971795a --- /dev/null +++ b/assets/js/22f0e129.700978f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6893],{13243:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>i,default:()=>E,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=n(85893),t=n(11151);const o={},i="MAXIMUM_DISCHARGE_PRESSURE",c={id:"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",title:"MAXIMUM_DISCHARGE_PRESSURE",description:"MODELS /",source:"@site/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE"},next:{title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Functionality",id:"functionality",level:2},{value:"Format",id:"format",level:2}];function l(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"maximum_discharge_pressure",children:"MAXIMUM_DISCHARGE_PRESSURE"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",children:"MAXIMUM_DISCHARGE_PRESSURE"})]}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"})," sets the highest possible discharge pressure that a compressor can deliver.\nIn reality, setting the maximum discharge pressure can be to avoid excessively high pressures which can be a safety concern on an installation."]}),"\n",(0,r.jsx)(s.h2,{id:"functionality",children:"Functionality"}),"\n",(0,r.jsxs)(s.p,{children:["This is an optional setting and is ",(0,r.jsx)(s.strong,{children:"only"})," supported for ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"SINGLE SPEED COMPRESSORS"}),", and ",(0,r.jsx)(s.strong,{children:"only"})," if the ",(0,r.jsx)(s.code,{children:"PRESSURE_CONTROL"})," is ",(0,r.jsx)(s.code,{children:"DOWNSTREAM_CHOKE"}),"."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["If ",(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"})," has been defined and if any of the inputted discharge pressures exceeds the maximum value, a ValueError message will be raised."]}),"\n",(0,r.jsxs)(s.li,{children:["If any of the input rates and suction pressures result in a discharge pressure which is above the ",(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"}),", the suction pressure will be reduced until the calculations provide a discharge pressure below the maximum value (assuming an upstream choke can handle this)."]}),"\n",(0,r.jsxs)(s.li,{children:["The outlet stream will then be further choked from the ",(0,r.jsx)(s.code,{children:"MAXIMUM_DISCHARGE_PRESSURE"})," to the target discharge pressure using the ",(0,r.jsx)(s.code,{children:"DOWNSTREAM_CHOKE"})," pressure control."]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n PRESSURE_CONTROL: <DOWNSTREAM_CHOKE>\n MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model>\n ...\n"})})]})}function E(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>c,a:()=>i});var r=n(67294);const t={},o=r.createContext(t);function i(e){const s=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/237.c377d557.js b/assets/js/237.c377d557.js new file mode 100644 index 0000000000..1b46bc1e35 --- /dev/null +++ b/assets/js/237.c377d557.js @@ -0,0 +1,1815 @@ +"use strict"; +exports.id = 237; +exports.ids = [237]; +exports.modules = { + +/***/ 92237: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 6], $V2 = [1, 4], $V3 = [1, 5], $V4 = [2, 5], $V5 = [1, 12], $V6 = [5, 7, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40, 47], $V7 = [7, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40], $V8 = [7, 12, 13, 19, 21, 23, 24, 26, 28, 31, 37, 40], $V9 = [7, 13, 47], $Va = [1, 42], $Vb = [1, 41], $Vc = [7, 13, 29, 32, 35, 38, 47], $Vd = [1, 55], $Ve = [1, 56], $Vf = [1, 57], $Vg = [7, 13, 32, 35, 42, 47]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "GG": 5, "document": 6, "EOF": 7, ":": 8, "DIR": 9, "options": 10, "body": 11, "OPT": 12, "NL": 13, "line": 14, "statement": 15, "commitStatement": 16, "mergeStatement": 17, "cherryPickStatement": 18, "acc_title": 19, "acc_title_value": 20, "acc_descr": 21, "acc_descr_value": 22, "acc_descr_multiline_value": 23, "section": 24, "branchStatement": 25, "CHECKOUT": 26, "ref": 27, "BRANCH": 28, "ORDER": 29, "NUM": 30, "CHERRY_PICK": 31, "COMMIT_ID": 32, "STR": 33, "PARENT_COMMIT": 34, "COMMIT_TAG": 35, "EMPTYSTR": 36, "MERGE": 37, "COMMIT_TYPE": 38, "commitType": 39, "COMMIT": 40, "commit_arg": 41, "COMMIT_MSG": 42, "NORMAL": 43, "REVERSE": 44, "HIGHLIGHT": 45, "ID": 46, ";": 47, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "GG", 7: "EOF", 8: ":", 9: "DIR", 12: "OPT", 13: "NL", 19: "acc_title", 20: "acc_title_value", 21: "acc_descr", 22: "acc_descr_value", 23: "acc_descr_multiline_value", 24: "section", 26: "CHECKOUT", 28: "BRANCH", 29: "ORDER", 30: "NUM", 31: "CHERRY_PICK", 32: "COMMIT_ID", 33: "STR", 34: "PARENT_COMMIT", 35: "COMMIT_TAG", 36: "EMPTYSTR", 37: "MERGE", 38: "COMMIT_TYPE", 40: "COMMIT", 42: "COMMIT_MSG", 43: "NORMAL", 44: "REVERSE", 45: "HIGHLIGHT", 46: "ID", 47: ";" }, + productions_: [0, [3, 2], [3, 3], [3, 4], [3, 5], [6, 0], [6, 2], [10, 2], [10, 1], [11, 0], [11, 2], [14, 2], [14, 1], [15, 1], [15, 1], [15, 1], [15, 2], [15, 2], [15, 1], [15, 1], [15, 1], [15, 2], [25, 2], [25, 4], [18, 3], [18, 5], [18, 5], [18, 7], [18, 7], [18, 5], [18, 5], [18, 5], [18, 7], [18, 7], [18, 7], [18, 7], [17, 2], [17, 4], [17, 4], [17, 4], [17, 6], [17, 6], [17, 6], [17, 6], [17, 6], [17, 6], [17, 8], [17, 8], [17, 8], [17, 8], [17, 8], [17, 8], [16, 2], [16, 3], [16, 3], [16, 5], [16, 5], [16, 3], [16, 5], [16, 5], [16, 5], [16, 5], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 3], [16, 5], [16, 5], [16, 5], [16, 5], [16, 5], [16, 5], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 7], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [16, 9], [41, 0], [41, 1], [39, 1], [39, 1], [39, 1], [27, 1], [27, 1], [4, 1], [4, 1], [4, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + return $$[$0]; + case 3: + return $$[$0 - 1]; + case 4: + yy.setDirection($$[$0 - 3]); + return $$[$0 - 1]; + case 6: + yy.setOptions($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 7: + $$[$0 - 1] += $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 9: + this.$ = []; + break; + case 10: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 11: + this.$ = $$[$0 - 1]; + break; + case 16: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 17: + case 18: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 19: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 21: + yy.checkout($$[$0]); + break; + case 22: + yy.branch($$[$0]); + break; + case 23: + yy.branch($$[$0 - 2], $$[$0]); + break; + case 24: + yy.cherryPick($$[$0], "", void 0); + break; + case 25: + yy.cherryPick($$[$0 - 2], "", void 0, $$[$0]); + break; + case 26: + yy.cherryPick($$[$0 - 2], "", $$[$0]); + break; + case 27: + yy.cherryPick($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 28: + yy.cherryPick($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 29: + yy.cherryPick($$[$0], "", $$[$0 - 2]); + break; + case 30: + yy.cherryPick($$[$0], "", ""); + break; + case 31: + yy.cherryPick($$[$0 - 2], "", ""); + break; + case 32: + yy.cherryPick($$[$0 - 4], "", "", $$[$0 - 2]); + break; + case 33: + yy.cherryPick($$[$0 - 4], "", "", $$[$0]); + break; + case 34: + yy.cherryPick($$[$0 - 2], "", $$[$0 - 4], $$[$0]); + break; + case 35: + yy.cherryPick($$[$0 - 2], "", "", $$[$0]); + break; + case 36: + yy.merge($$[$0], "", "", ""); + break; + case 37: + yy.merge($$[$0 - 2], $$[$0], "", ""); + break; + case 38: + yy.merge($$[$0 - 2], "", $$[$0], ""); + break; + case 39: + yy.merge($$[$0 - 2], "", "", $$[$0]); + break; + case 40: + yy.merge($$[$0 - 4], $$[$0], "", $$[$0 - 2]); + break; + case 41: + yy.merge($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 42: + yy.merge($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 43: + yy.merge($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 44: + yy.merge($$[$0 - 4], $$[$0 - 2], "", $$[$0]); + break; + case 45: + yy.merge($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 46: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 47: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 48: + yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 49: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 50: + yy.merge($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 51: + yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 52: + yy.commit($$[$0]); + break; + case 53: + yy.commit("", "", yy.commitType.NORMAL, $$[$0]); + break; + case 54: + yy.commit("", "", $$[$0], ""); + break; + case 55: + yy.commit("", "", $$[$0], $$[$0 - 2]); + break; + case 56: + yy.commit("", "", $$[$0 - 2], $$[$0]); + break; + case 57: + yy.commit("", $$[$0], yy.commitType.NORMAL, ""); + break; + case 58: + yy.commit("", $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 59: + yy.commit("", $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 60: + yy.commit("", $$[$0 - 2], $$[$0], ""); + break; + case 61: + yy.commit("", $$[$0], $$[$0 - 2], ""); + break; + case 62: + yy.commit("", $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 63: + yy.commit("", $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 64: + yy.commit("", $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 65: + yy.commit("", $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 66: + yy.commit("", $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 67: + yy.commit("", $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 68: + yy.commit($$[$0], "", yy.commitType.NORMAL, ""); + break; + case 69: + yy.commit($$[$0], "", yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 70: + yy.commit($$[$0 - 2], "", yy.commitType.NORMAL, $$[$0]); + break; + case 71: + yy.commit($$[$0 - 2], "", $$[$0], ""); + break; + case 72: + yy.commit($$[$0], "", $$[$0 - 2], ""); + break; + case 73: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, ""); + break; + case 74: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, ""); + break; + case 75: + yy.commit($$[$0 - 4], "", $$[$0 - 2], $$[$0]); + break; + case 76: + yy.commit($$[$0 - 4], "", $$[$0], $$[$0 - 2]); + break; + case 77: + yy.commit($$[$0 - 2], "", $$[$0 - 4], $$[$0]); + break; + case 78: + yy.commit($$[$0], "", $$[$0 - 4], $$[$0 - 2]); + break; + case 79: + yy.commit($$[$0], "", $$[$0 - 2], $$[$0 - 4]); + break; + case 80: + yy.commit($$[$0 - 2], "", $$[$0], $$[$0 - 4]); + break; + case 81: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], ""); + break; + case 82: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], ""); + break; + case 83: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], ""); + break; + case 84: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], ""); + break; + case 85: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], ""); + break; + case 86: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], ""); + break; + case 87: + yy.commit($$[$0 - 4], $$[$0], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 88: + yy.commit($$[$0 - 4], $$[$0 - 2], yy.commitType.NORMAL, $$[$0]); + break; + case 89: + yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 90: + yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, $$[$0 - 4]); + break; + case 91: + yy.commit($$[$0], $$[$0 - 4], yy.commitType.NORMAL, $$[$0 - 2]); + break; + case 92: + yy.commit($$[$0 - 2], $$[$0 - 4], yy.commitType.NORMAL, $$[$0]); + break; + case 93: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 94: + yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]); + break; + case 95: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 96: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]); + break; + case 97: + yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 98: + yy.commit($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]); + break; + case 99: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0 - 2], $$[$0]); + break; + case 100: + yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0], $$[$0 - 2]); + break; + case 101: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0 - 4], $$[$0]); + break; + case 102: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 4], $$[$0 - 2]); + break; + case 103: + yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0], $$[$0 - 4]); + break; + case 104: + yy.commit($$[$0], $$[$0 - 6], $$[$0 - 2], $$[$0 - 4]); + break; + case 105: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], $$[$0 - 6]); + break; + case 106: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], $$[$0 - 6]); + break; + case 107: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], $$[$0 - 6]); + break; + case 108: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], $$[$0 - 6]); + break; + case 109: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], $$[$0 - 6]); + break; + case 110: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 6]); + break; + case 111: + yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0 - 6], $$[$0]); + break; + case 112: + yy.commit($$[$0], $$[$0 - 4], $$[$0 - 6], $$[$0 - 2]); + break; + case 113: + yy.commit($$[$0 - 2], $$[$0], $$[$0 - 6], $$[$0 - 4]); + break; + case 114: + yy.commit($$[$0], $$[$0 - 2], $$[$0 - 6], $$[$0 - 4]); + break; + case 115: + yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0 - 6], $$[$0]); + break; + case 116: + yy.commit($$[$0 - 4], $$[$0], $$[$0 - 6], $$[$0 - 2]); + break; + case 117: + this.$ = ""; + break; + case 118: + this.$ = $$[$0]; + break; + case 119: + this.$ = yy.commitType.NORMAL; + break; + case 120: + this.$ = yy.commitType.REVERSE; + break; + case 121: + this.$ = yy.commitType.HIGHLIGHT; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 7: $V1, 13: $V2, 47: $V3 }, { 1: [3] }, { 3: 7, 4: 2, 5: $V0, 7: $V1, 13: $V2, 47: $V3 }, { 6: 8, 7: $V4, 8: [1, 9], 9: [1, 10], 10: 11, 13: $V5 }, o($V6, [2, 124]), o($V6, [2, 125]), o($V6, [2, 126]), { 1: [2, 1] }, { 7: [1, 13] }, { 6: 14, 7: $V4, 10: 11, 13: $V5 }, { 8: [1, 15] }, o($V7, [2, 9], { 11: 16, 12: [1, 17] }), o($V8, [2, 8]), { 1: [2, 2] }, { 7: [1, 18] }, { 6: 19, 7: $V4, 10: 11, 13: $V5 }, { 7: [2, 6], 13: [1, 22], 14: 20, 15: 21, 16: 23, 17: 24, 18: 25, 19: [1, 26], 21: [1, 27], 23: [1, 28], 24: [1, 29], 25: 30, 26: [1, 31], 28: [1, 35], 31: [1, 34], 37: [1, 33], 40: [1, 32] }, o($V8, [2, 7]), { 1: [2, 3] }, { 7: [1, 36] }, o($V7, [2, 10]), { 4: 37, 7: $V1, 13: $V2, 47: $V3 }, o($V7, [2, 12]), o($V9, [2, 13]), o($V9, [2, 14]), o($V9, [2, 15]), { 20: [1, 38] }, { 22: [1, 39] }, o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), { 27: 40, 33: $Va, 46: $Vb }, o($V9, [2, 117], { 41: 43, 32: [1, 46], 33: [1, 48], 35: [1, 44], 38: [1, 45], 42: [1, 47] }), { 27: 49, 33: $Va, 46: $Vb }, { 32: [1, 50], 35: [1, 51] }, { 27: 52, 33: $Va, 46: $Vb }, { 1: [2, 4] }, o($V7, [2, 11]), o($V9, [2, 16]), o($V9, [2, 17]), o($V9, [2, 21]), o($Vc, [2, 122]), o($Vc, [2, 123]), o($V9, [2, 52]), { 33: [1, 53] }, { 39: 54, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 58] }, { 33: [1, 59] }, o($V9, [2, 118]), o($V9, [2, 36], { 32: [1, 60], 35: [1, 62], 38: [1, 61] }), { 33: [1, 63] }, { 33: [1, 64], 36: [1, 65] }, o($V9, [2, 22], { 29: [1, 66] }), o($V9, [2, 53], { 32: [1, 68], 38: [1, 67], 42: [1, 69] }), o($V9, [2, 54], { 32: [1, 71], 35: [1, 70], 42: [1, 72] }), o($Vg, [2, 119]), o($Vg, [2, 120]), o($Vg, [2, 121]), o($V9, [2, 57], { 35: [1, 73], 38: [1, 74], 42: [1, 75] }), o($V9, [2, 68], { 32: [1, 78], 35: [1, 76], 38: [1, 77] }), { 33: [1, 79] }, { 39: 80, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 81] }, o($V9, [2, 24], { 34: [1, 82], 35: [1, 83] }), { 32: [1, 84] }, { 32: [1, 85] }, { 30: [1, 86] }, { 39: 87, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 88] }, { 33: [1, 89] }, { 33: [1, 90] }, { 33: [1, 91] }, { 33: [1, 92] }, { 33: [1, 93] }, { 39: 94, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 95] }, { 33: [1, 96] }, { 39: 97, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 98] }, o($V9, [2, 37], { 35: [1, 100], 38: [1, 99] }), o($V9, [2, 38], { 32: [1, 102], 35: [1, 101] }), o($V9, [2, 39], { 32: [1, 103], 38: [1, 104] }), { 33: [1, 105] }, { 33: [1, 106], 36: [1, 107] }, { 33: [1, 108] }, { 33: [1, 109] }, o($V9, [2, 23]), o($V9, [2, 55], { 32: [1, 110], 42: [1, 111] }), o($V9, [2, 59], { 38: [1, 112], 42: [1, 113] }), o($V9, [2, 69], { 32: [1, 115], 38: [1, 114] }), o($V9, [2, 56], { 32: [1, 116], 42: [1, 117] }), o($V9, [2, 61], { 35: [1, 118], 42: [1, 119] }), o($V9, [2, 72], { 32: [1, 121], 35: [1, 120] }), o($V9, [2, 58], { 38: [1, 122], 42: [1, 123] }), o($V9, [2, 60], { 35: [1, 124], 42: [1, 125] }), o($V9, [2, 73], { 35: [1, 127], 38: [1, 126] }), o($V9, [2, 70], { 32: [1, 129], 38: [1, 128] }), o($V9, [2, 71], { 32: [1, 131], 35: [1, 130] }), o($V9, [2, 74], { 35: [1, 133], 38: [1, 132] }), { 39: 134, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 135] }, { 33: [1, 136] }, { 33: [1, 137] }, { 33: [1, 138] }, { 39: 139, 43: $Vd, 44: $Ve, 45: $Vf }, o($V9, [2, 25], { 35: [1, 140] }), o($V9, [2, 26], { 34: [1, 141] }), o($V9, [2, 31], { 34: [1, 142] }), o($V9, [2, 29], { 34: [1, 143] }), o($V9, [2, 30], { 34: [1, 144] }), { 33: [1, 145] }, { 33: [1, 146] }, { 39: 147, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 148] }, { 39: 149, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 150] }, { 33: [1, 151] }, { 33: [1, 152] }, { 33: [1, 153] }, { 33: [1, 154] }, { 33: [1, 155] }, { 33: [1, 156] }, { 39: 157, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 158] }, { 33: [1, 159] }, { 33: [1, 160] }, { 39: 161, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 162] }, { 39: 163, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 164] }, { 33: [1, 165] }, { 33: [1, 166] }, { 39: 167, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 168] }, o($V9, [2, 43], { 35: [1, 169] }), o($V9, [2, 44], { 38: [1, 170] }), o($V9, [2, 42], { 32: [1, 171] }), o($V9, [2, 45], { 35: [1, 172] }), o($V9, [2, 40], { 38: [1, 173] }), o($V9, [2, 41], { 32: [1, 174] }), { 33: [1, 175], 36: [1, 176] }, { 33: [1, 177] }, { 33: [1, 178] }, { 33: [1, 179] }, { 33: [1, 180] }, o($V9, [2, 66], { 42: [1, 181] }), o($V9, [2, 79], { 32: [1, 182] }), o($V9, [2, 67], { 42: [1, 183] }), o($V9, [2, 90], { 38: [1, 184] }), o($V9, [2, 80], { 32: [1, 185] }), o($V9, [2, 89], { 38: [1, 186] }), o($V9, [2, 65], { 42: [1, 187] }), o($V9, [2, 78], { 32: [1, 188] }), o($V9, [2, 64], { 42: [1, 189] }), o($V9, [2, 84], { 35: [1, 190] }), o($V9, [2, 77], { 32: [1, 191] }), o($V9, [2, 83], { 35: [1, 192] }), o($V9, [2, 63], { 42: [1, 193] }), o($V9, [2, 91], { 38: [1, 194] }), o($V9, [2, 62], { 42: [1, 195] }), o($V9, [2, 85], { 35: [1, 196] }), o($V9, [2, 86], { 35: [1, 197] }), o($V9, [2, 92], { 38: [1, 198] }), o($V9, [2, 76], { 32: [1, 199] }), o($V9, [2, 87], { 38: [1, 200] }), o($V9, [2, 75], { 32: [1, 201] }), o($V9, [2, 81], { 35: [1, 202] }), o($V9, [2, 82], { 35: [1, 203] }), o($V9, [2, 88], { 38: [1, 204] }), { 33: [1, 205] }, { 39: 206, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 207] }, { 33: [1, 208] }, { 39: 209, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 210] }, o($V9, [2, 27]), o($V9, [2, 32]), o($V9, [2, 28]), o($V9, [2, 33]), o($V9, [2, 34]), o($V9, [2, 35]), { 33: [1, 211] }, { 33: [1, 212] }, { 33: [1, 213] }, { 39: 214, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 215] }, { 39: 216, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 217] }, { 33: [1, 218] }, { 33: [1, 219] }, { 33: [1, 220] }, { 33: [1, 221] }, { 33: [1, 222] }, { 33: [1, 223] }, { 39: 224, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 225] }, { 33: [1, 226] }, { 33: [1, 227] }, { 39: 228, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 229] }, { 39: 230, 43: $Vd, 44: $Ve, 45: $Vf }, { 33: [1, 231] }, { 33: [1, 232] }, { 33: [1, 233] }, { 39: 234, 43: $Vd, 44: $Ve, 45: $Vf }, o($V9, [2, 46]), o($V9, [2, 48]), o($V9, [2, 47]), o($V9, [2, 49]), o($V9, [2, 51]), o($V9, [2, 50]), o($V9, [2, 107]), o($V9, [2, 108]), o($V9, [2, 105]), o($V9, [2, 106]), o($V9, [2, 110]), o($V9, [2, 109]), o($V9, [2, 114]), o($V9, [2, 113]), o($V9, [2, 112]), o($V9, [2, 111]), o($V9, [2, 116]), o($V9, [2, 115]), o($V9, [2, 104]), o($V9, [2, 103]), o($V9, [2, 102]), o($V9, [2, 101]), o($V9, [2, 99]), o($V9, [2, 100]), o($V9, [2, 98]), o($V9, [2, 97]), o($V9, [2, 96]), o($V9, [2, 95]), o($V9, [2, 93]), o($V9, [2, 94])], + defaultActions: { 7: [2, 1], 13: [2, 2], 18: [2, 3], 36: [2, 4] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 19; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 21; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + return 13; + case 8: + break; + case 9: + break; + case 10: + return 5; + case 11: + return 40; + case 12: + return 32; + case 13: + return 38; + case 14: + return 42; + case 15: + return 43; + case 16: + return 44; + case 17: + return 45; + case 18: + return 35; + case 19: + return 28; + case 20: + return 29; + case 21: + return 37; + case 22: + return 31; + case 23: + return 34; + case 24: + return 26; + case 25: + return 9; + case 26: + return 9; + case 27: + return 8; + case 28: + return "CARET"; + case 29: + this.begin("options"); + break; + case 30: + this.popState(); + break; + case 31: + return 12; + case 32: + return 36; + case 33: + this.begin("string"); + break; + case 34: + this.popState(); + break; + case 35: + return 33; + case 36: + return 30; + case 37: + return 46; + case 38: + return 7; + } + }, + rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit(?=\s|$))/i, /^(?:id:)/i, /^(?:type:)/i, /^(?:msg:)/i, /^(?:NORMAL\b)/i, /^(?:REVERSE\b)/i, /^(?:HIGHLIGHT\b)/i, /^(?:tag:)/i, /^(?:branch(?=\s|$))/i, /^(?:order:)/i, /^(?:merge(?=\s|$))/i, /^(?:cherry-pick(?=\s|$))/i, /^(?:parent:)/i, /^(?:checkout(?=\s|$))/i, /^(?:LR\b)/i, /^(?:TB\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:[ \r\n\t]+end\b)/i, /^(?:[\s\S]+(?=[ \r\n\t]+end))/i, /^(?:["]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[0-9]+(?=\s|$))/i, /^(?:\w([-\./\w]*[-\w])?)/i, /^(?:$)/i, /^(?:\s+)/i], + conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "options": { "rules": [30, 31], "inclusive": false }, "string": { "rules": [34, 35], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 36, 37, 38, 39], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const gitGraphParser = parser; +let mainBranchName = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; +let mainBranchOrder = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; +let commits = {}; +let head = null; +let branchesConfig = {}; +branchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder }; +let branches = {}; +branches[mainBranchName] = head; +let curBranch = mainBranchName; +let direction = "LR"; +let seq = 0; +function getId() { + return (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.x)({ length: 7 }); +} +function uniqBy(list, fn) { + const recordMap = /* @__PURE__ */ Object.create(null); + return list.reduce((out, item) => { + const key = fn(item); + if (!recordMap[key]) { + recordMap[key] = true; + out.push(item); + } + return out; + }, []); +} +const setDirection = function(dir2) { + direction = dir2; +}; +let options = {}; +const setOptions = function(rawOptString) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("options str", rawOptString); + rawOptString = rawOptString && rawOptString.trim(); + rawOptString = rawOptString || "{}"; + try { + options = JSON.parse(rawOptString); + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing gitGraph options", e.message); + } +}; +const getOptions = function() { + return options; +}; +const commit = function(msg, id, type, tag) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering commit:", msg, id, type, tag); + id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + msg = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(msg, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + tag = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const commit2 = { + id: id ? id : seq + "-" + getId(), + message: msg, + seq: seq++, + type: type ? type : commitType$1.NORMAL, + tag: tag ? tag : "", + parents: head == null ? [] : [head.id], + branch: curBranch + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in pushCommit " + commit2.id); +}; +const branch = function(name, order) { + name = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(name, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (branches[name] === void 0) { + branches[name] = head != null ? head.id : null; + branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null }; + checkout(name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in createBranch"); + } else { + let error = new Error( + 'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ' + name + '")' + ); + error.hash = { + text: "branch " + name, + token: "branch " + name, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"checkout ' + name + '"'] + }; + throw error; + } +}; +const merge = function(otherBranch, custom_id, override_type, custom_tag) { + otherBranch = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(otherBranch, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + custom_id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(custom_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const currentCommit = commits[branches[curBranch]]; + const otherCommit = commits[branches[otherBranch]]; + if (curBranch === otherBranch) { + let error = new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "merge". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["commit"] + }; + throw error; + } else if (branches[otherBranch] === void 0) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch " + otherBranch] + }; + throw error; + } else if (otherCommit === void 0 || !otherCommit) { + let error = new Error( + 'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits" + ); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"commit"'] + }; + throw error; + } else if (currentCommit === otherCommit) { + let error = new Error('Incorrect usage of "merge". Both branches have same head'); + error.hash = { + text: "merge " + otherBranch, + token: "merge " + otherBranch, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["branch abc"] + }; + throw error; + } else if (custom_id && commits[custom_id] !== void 0) { + let error = new Error( + 'Incorrect usage of "merge". Commit with id:' + custom_id + " already exists, use different custom Id" + ); + error.hash = { + text: "merge " + otherBranch + custom_id + override_type + custom_tag, + token: "merge " + otherBranch + custom_id + override_type + custom_tag, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: [ + "merge " + otherBranch + " " + custom_id + "_UNIQUE " + override_type + " " + custom_tag + ] + }; + throw error; + } + const commit2 = { + id: custom_id ? custom_id : seq + "-" + getId(), + message: "merged branch " + otherBranch + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, branches[otherBranch]], + branch: curBranch, + type: commitType$1.MERGE, + customType: override_type, + customId: custom_id ? true : false, + tag: custom_tag ? custom_tag : "" + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in mergeBranch"); +}; +const cherryPick = function(sourceId, targetId, tag, parentCommitId) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Entering cherryPick:", sourceId, targetId, tag); + sourceId = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(sourceId, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + targetId = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(targetId, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + tag = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(tag, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + parentCommitId = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(parentCommitId, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (!sourceId || commits[sourceId] === void 0) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit id should exist and provided' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + let sourceCommit = commits[sourceId]; + let sourceCommitBranch = sourceCommit.branch; + if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) { + let error = new Error( + "Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit." + ); + throw error; + } + if (sourceCommit.type === commitType$1.MERGE && !parentCommitId) { + let error = new Error( + "Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified." + ); + throw error; + } + if (!targetId || commits[targetId] === void 0) { + if (sourceCommitBranch === curBranch) { + let error = new Error( + 'Incorrect usage of "cherryPick". Source commit is already on current branch' + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const currentCommit = commits[branches[curBranch]]; + if (currentCommit === void 0 || !currentCommit) { + let error = new Error( + 'Incorrect usage of "cherry-pick". Current branch (' + curBranch + ")has no commits" + ); + error.hash = { + text: "cherryPick " + sourceId + " " + targetId, + token: "cherryPick " + sourceId + " " + targetId, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["cherry-pick abc"] + }; + throw error; + } + const commit2 = { + id: seq + "-" + getId(), + message: "cherry-picked " + sourceCommit + " into " + curBranch, + seq: seq++, + parents: [head == null ? null : head.id, sourceCommit.id], + branch: curBranch, + type: commitType$1.CHERRY_PICK, + tag: tag ?? `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType$1.MERGE ? `|parent:${parentCommitId}` : ""}` + }; + head = commit2; + commits[commit2.id] = commit2; + branches[curBranch] = commit2.id; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(branches); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in cherryPick"); + } +}; +const checkout = function(branch2) { + branch2 = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.sanitizeText(branch2, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (branches[branch2] === void 0) { + let error = new Error( + 'Trying to checkout branch which is not yet created. (Help try using "branch ' + branch2 + '")' + ); + error.hash = { + text: "checkout " + branch2, + token: "checkout " + branch2, + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ['"branch ' + branch2 + '"'] + }; + throw error; + } else { + curBranch = branch2; + const id = branches[curBranch]; + head = commits[id]; + } +}; +function upsert(arr, key, newVal) { + const index = arr.indexOf(key); + if (index === -1) { + arr.push(newVal); + } else { + arr.splice(index, 1, newVal); + } +} +function prettyPrintCommitHistory(commitArr) { + const commit2 = commitArr.reduce((out, commit3) => { + if (out.seq > commit3.seq) { + return out; + } + return commit3; + }, commitArr[0]); + let line = ""; + commitArr.forEach(function(c) { + if (c === commit2) { + line += " *"; + } else { + line += " |"; + } + }); + const label = [line, commit2.id, commit2.seq]; + for (let branch2 in branches) { + if (branches[branch2] === commit2.id) { + label.push(branch2); + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(label.join(" ")); + if (commit2.parents && commit2.parents.length == 2) { + const newCommit = commits[commit2.parents[0]]; + upsert(commitArr, commit2, newCommit); + commitArr.push(commits[commit2.parents[1]]); + } else if (commit2.parents.length == 0) { + return; + } else { + const nextCommit = commits[commit2.parents]; + upsert(commitArr, commit2, nextCommit); + } + commitArr = uniqBy(commitArr, (c) => c.id); + prettyPrintCommitHistory(commitArr); +} +const prettyPrint = function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(commits); + const node = getCommitsArray()[0]; + prettyPrintCommitHistory([node]); +}; +const clear$1 = function() { + commits = {}; + head = null; + let mainBranch = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchName; + let mainBranchOrder2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph.mainBranchOrder; + branches = {}; + branches[mainBranch] = null; + branchesConfig = {}; + branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder2 }; + curBranch = mainBranch; + seq = 0; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const getBranchesAsObjArray = function() { + const branchesArray = Object.values(branchesConfig).map((branchConfig, i) => { + if (branchConfig.order !== null) { + return branchConfig; + } + return { + ...branchConfig, + order: parseFloat(`0.${i}`, 10) + }; + }).sort((a, b) => a.order - b.order).map(({ name }) => ({ name })); + return branchesArray; +}; +const getBranches = function() { + return branches; +}; +const getCommits = function() { + return commits; +}; +const getCommitsArray = function() { + const commitArr = Object.keys(commits).map(function(key) { + return commits[key]; + }); + commitArr.forEach(function(o) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(o.id); + }); + commitArr.sort((a, b) => a.seq - b.seq); + return commitArr; +}; +const getCurrentBranch = function() { + return curBranch; +}; +const getDirection = function() { + return direction; +}; +const getHead = function() { + return head; +}; +const commitType$1 = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const gitGraphDb = { + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph, + setDirection, + setOptions, + getOptions, + commit, + branch, + merge, + cherryPick, + checkout, + //reset, + prettyPrint, + clear: clear$1, + getBranchesAsObjArray, + getBranches, + getCommits, + getCommitsArray, + getCurrentBranch, + getDirection, + getHead, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.g, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.b, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.r, + commitType: commitType$1 +}; +let allCommitsDict = {}; +const commitType = { + NORMAL: 0, + REVERSE: 1, + HIGHLIGHT: 2, + MERGE: 3, + CHERRY_PICK: 4 +}; +const THEME_COLOR_LIMIT = 8; +let branchPos = {}; +let commitPos = {}; +let lanes = []; +let maxPos = 0; +let dir = "LR"; +const clear = () => { + branchPos = {}; + commitPos = {}; + allCommitsDict = {}; + maxPos = 0; + lanes = []; + dir = "LR"; +}; +const drawText = (txt) => { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + let rows = []; + if (typeof txt === "string") { + rows = txt.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(txt)) { + rows = txt; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + tspan.setAttribute("class", "row"); + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; +}; +const findClosestParent = (parents) => { + let closestParent = ""; + let maxPosition = 0; + parents.forEach((parent) => { + const parentPosition = dir === "TB" ? commitPos[parent].y : commitPos[parent].x; + if (parentPosition >= maxPosition) { + closestParent = parent; + maxPosition = parentPosition; + } + }); + return closestParent || void 0; +}; +const drawCommits = (svg, commits2, modifyGraph) => { + const gitGraphConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph; + const gBullets = svg.append("g").attr("class", "commit-bullets"); + const gLabels = svg.append("g").attr("class", "commit-labels"); + let pos = 0; + if (dir === "TB") { + pos = 30; + } + const keys = Object.keys(commits2); + const sortedKeys = keys.sort((a, b) => { + return commits2[a].seq - commits2[b].seq; + }); + const isParallelCommits = gitGraphConfig.parallelCommits; + const layoutOffset = 10; + const commitStep = 40; + sortedKeys.forEach((key) => { + const commit2 = commits2[key]; + if (isParallelCommits) { + if (commit2.parents.length) { + const closestParent = findClosestParent(commit2.parents); + pos = dir === "TB" ? commitPos[closestParent].y + commitStep : commitPos[closestParent].x + commitStep; + } else { + pos = 0; + if (dir === "TB") { + pos = 30; + } + } + } + const posWithOffset = pos + layoutOffset; + const y = dir === "TB" ? posWithOffset : branchPos[commit2.branch].pos; + const x = dir === "TB" ? branchPos[commit2.branch].pos : posWithOffset; + if (modifyGraph) { + let typeClass; + let commitSymbolType = commit2.customType !== void 0 && commit2.customType !== "" ? commit2.customType : commit2.type; + switch (commitSymbolType) { + case commitType.NORMAL: + typeClass = "commit-normal"; + break; + case commitType.REVERSE: + typeClass = "commit-reverse"; + break; + case commitType.HIGHLIGHT: + typeClass = "commit-highlight"; + break; + case commitType.MERGE: + typeClass = "commit-merge"; + break; + case commitType.CHERRY_PICK: + typeClass = "commit-cherry-pick"; + break; + default: + typeClass = "commit-normal"; + } + if (commitSymbolType === commitType.HIGHLIGHT) { + const circle = gBullets.append("rect"); + circle.attr("x", x - 10); + circle.attr("y", y - 10); + circle.attr("height", 20); + circle.attr("width", 20); + circle.attr( + "class", + `commit ${commit2.id} commit-highlight${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-outer` + ); + gBullets.append("rect").attr("x", x - 6).attr("y", y - 6).attr("height", 12).attr("width", 12).attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-inner` + ); + } else if (commitSymbolType === commitType.CHERRY_PICK) { + gBullets.append("circle").attr("cx", x).attr("cy", y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x - 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("circle").attr("cx", x + 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x + 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + gBullets.append("line").attr("x1", x - 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); + } else { + const circle = gBullets.append("circle"); + circle.attr("cx", x); + circle.attr("cy", y); + circle.attr("r", commit2.type === commitType.MERGE ? 9 : 10); + circle.attr( + "class", + `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + if (commitSymbolType === commitType.MERGE) { + const circle2 = gBullets.append("circle"); + circle2.attr("cx", x); + circle2.attr("cy", y); + circle2.attr("r", 6); + circle2.attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + if (commitSymbolType === commitType.REVERSE) { + const cross = gBullets.append("path"); + cross.attr("d", `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`).attr( + "class", + `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}` + ); + } + } + } + if (dir === "TB") { + commitPos[commit2.id] = { x, y: posWithOffset }; + } else { + commitPos[commit2.id] = { x: posWithOffset, y }; + } + if (modifyGraph) { + const px = 4; + const py = 2; + if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) { + const wrapper = gLabels.append("g"); + const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg"); + const text = wrapper.append("text").attr("x", pos).attr("y", y + 25).attr("class", "commit-label").text(commit2.id); + let bbox = text.node().getBBox(); + labelBkg.attr("x", posWithOffset - bbox.width / 2 - py).attr("y", y + 13.5).attr("width", bbox.width + 2 * py).attr("height", bbox.height + 2 * py); + if (dir === "TB") { + labelBkg.attr("x", x - (bbox.width + 4 * px + 5)).attr("y", y - 12); + text.attr("x", x - (bbox.width + 4 * px)).attr("y", y + bbox.height - 12); + } + if (dir !== "TB") { + text.attr("x", posWithOffset - bbox.width / 2); + } + if (gitGraphConfig.rotateCommitLabel) { + if (dir === "TB") { + text.attr("transform", "rotate(-45, " + x + ", " + y + ")"); + labelBkg.attr("transform", "rotate(-45, " + x + ", " + y + ")"); + } else { + let r_x = -7.5 - (bbox.width + 10) / 25 * 9.5; + let r_y = 10 + bbox.width / 25 * 8.5; + wrapper.attr( + "transform", + "translate(" + r_x + ", " + r_y + ") rotate(-45, " + pos + ", " + y + ")" + ); + } + } + } + if (commit2.tag) { + const rect = gLabels.insert("polygon"); + const hole = gLabels.append("circle"); + const tag = gLabels.append("text").attr("y", y - 16).attr("class", "tag-label").text(commit2.tag); + let tagBbox = tag.node().getBBox(); + tag.attr("x", posWithOffset - tagBbox.width / 2); + const h2 = tagBbox.height / 2; + const ly = y - 19.2; + rect.attr("class", "tag-label-bkg").attr( + "points", + ` + ${pos - tagBbox.width / 2 - px / 2},${ly + py} + ${pos - tagBbox.width / 2 - px / 2},${ly - py} + ${posWithOffset - tagBbox.width / 2 - px},${ly - h2 - py} + ${posWithOffset + tagBbox.width / 2 + px},${ly - h2 - py} + ${posWithOffset + tagBbox.width / 2 + px},${ly + h2 + py} + ${posWithOffset - tagBbox.width / 2 - px},${ly + h2 + py}` + ); + hole.attr("cx", pos - tagBbox.width / 2 + px / 2).attr("cy", ly).attr("r", 1.5).attr("class", "tag-hole"); + if (dir === "TB") { + rect.attr("class", "tag-label-bkg").attr( + "points", + ` + ${x},${pos + py} + ${x},${pos - py} + ${x + layoutOffset},${pos - h2 - py} + ${x + layoutOffset + tagBbox.width + px},${pos - h2 - py} + ${x + layoutOffset + tagBbox.width + px},${pos + h2 + py} + ${x + layoutOffset},${pos + h2 + py}` + ).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); + hole.attr("cx", x + px / 2).attr("cy", pos).attr("transform", "translate(12,12) rotate(45, " + x + "," + pos + ")"); + tag.attr("x", x + 5).attr("y", pos + 3).attr("transform", "translate(14,14) rotate(45, " + x + "," + pos + ")"); + } + } + } + pos += commitStep + layoutOffset; + if (pos > maxPos) { + maxPos = pos; + } + }); +}; +const shouldRerouteArrow = (commitA, commitB, p1, p2, allCommits) => { + const commitBIsFurthest = dir === "TB" ? p1.x < p2.x : p1.y < p2.y; + const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch; + const isOnBranchToGetCurve = (x) => x.branch === branchToGetCurve; + const isBetweenCommits = (x) => x.seq > commitA.seq && x.seq < commitB.seq; + return Object.values(allCommits).some((commitX) => { + return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX); + }); +}; +const findLane = (y1, y2, depth = 0) => { + const candidate = y1 + Math.abs(y1 - y2) / 2; + if (depth > 5) { + return candidate; + } + let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10); + if (ok) { + lanes.push(candidate); + return candidate; + } + const diff = Math.abs(y1 - y2); + return findLane(y1, y2 - diff / 5, depth + 1); +}; +const drawArrow = (svg, commitA, commitB, allCommits) => { + const p1 = commitPos[commitA.id]; + const p2 = commitPos[commitB.id]; + const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits); + let arc = ""; + let arc2 = ""; + let radius = 0; + let offset = 0; + let colorClassNum = branchPos[commitB.branch].index; + let lineDef; + if (arrowNeedsRerouting) { + arc = "A 10 10, 0, 0, 0,"; + arc2 = "A 10 10, 0, 0, 1,"; + radius = 10; + offset = 10; + const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y); + const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x); + if (dir === "TB") { + if (p1.x < p2.x) { + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } else { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + } else { + if (p1.y < p2.y) { + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`; + } else { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`; + } + } + } else { + if (dir === "TB") { + if (p1.x < p2.x) { + arc = "A 20 20, 0, 0, 0,"; + arc2 = "A 20 20, 0, 0, 1,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`; + } + if (p1.x > p2.x) { + arc = "A 20 20, 0, 0, 0,"; + arc2 = "A 20 20, 0, 0, 1,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + if (p1.x === p2.x) { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x + radius} ${p1.y} ${arc} ${p1.x + offset} ${p2.y + radius} L ${p2.x} ${p2.y}`; + } + } else { + if (p1.y < p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitB.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + if (p1.y > p2.y) { + arc = "A 20 20, 0, 0, 0,"; + radius = 20; + offset = 20; + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`; + } + if (p1.y === p2.y) { + colorClassNum = branchPos[commitA.branch].index; + lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`; + } + } + } + svg.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT); +}; +const drawArrows = (svg, commits2) => { + const gArrows = svg.append("g").attr("class", "commit-arrows"); + Object.keys(commits2).forEach((key) => { + const commit2 = commits2[key]; + if (commit2.parents && commit2.parents.length > 0) { + commit2.parents.forEach((parent) => { + drawArrow(gArrows, commits2[parent], commit2, commits2); + }); + } + }); +}; +const drawBranches = (svg, branches2) => { + const gitGraphConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().gitGraph; + const g = svg.append("g"); + branches2.forEach((branch2, index) => { + const adjustIndexForTheme = index % THEME_COLOR_LIMIT; + const pos = branchPos[branch2.name].pos; + const line = g.append("line"); + line.attr("x1", 0); + line.attr("y1", pos); + line.attr("x2", maxPos); + line.attr("y2", pos); + line.attr("class", "branch branch" + adjustIndexForTheme); + if (dir === "TB") { + line.attr("y1", 30); + line.attr("x1", pos); + line.attr("y2", maxPos); + line.attr("x2", pos); + } + lanes.push(pos); + let name = branch2.name; + const labelElement = drawText(name); + const bkg = g.insert("rect"); + const branchLabel = g.insert("g").attr("class", "branchLabel"); + const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4); + label.attr( + "transform", + "translate(" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")" + ); + if (dir === "TB") { + bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", 0); + label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", 0)"); + } + if (dir !== "TB") { + bkg.attr("transform", "translate(-19, " + (pos - bbox.height / 2) + ")"); + } + }); +}; +const draw = function(txt, id, ver, diagObj) { + clear(); + const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const gitGraphConfig = conf.gitGraph; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("in gitgraph renderer", txt + "\n", "id:", id, ver); + allCommitsDict = diagObj.db.getCommits(); + const branches2 = diagObj.db.getBranchesAsObjArray(); + dir = diagObj.db.getDirection(); + const diagram2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + let pos = 0; + branches2.forEach((branch2, index) => { + const labelElement = drawText(branch2.name); + const g = diagram2.append("g"); + const branchLabel = g.insert("g").attr("class", "branchLabel"); + const label = branchLabel.insert("g").attr("class", "label branch-label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + branchPos[branch2.name] = { pos, index }; + pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0) + (dir === "TB" ? bbox.width / 2 : 0); + label.remove(); + branchLabel.remove(); + g.remove(); + }); + drawCommits(diagram2, allCommitsDict, false); + if (gitGraphConfig.showBranches) { + drawBranches(diagram2, branches2); + } + drawArrows(diagram2, allCommitsDict); + drawCommits(diagram2, allCommitsDict, true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.insertTitle( + diagram2, + "gitTitleText", + gitGraphConfig.titleTopMargin, + diagObj.db.getDiagramTitle() + ); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.y)( + void 0, + diagram2, + gitGraphConfig.diagramPadding, + gitGraphConfig.useMaxWidth ?? conf.useMaxWidth + ); +}; +const gitGraphRenderer = { + draw +}; +const getStyles = (options2) => ` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0, 1, 2, 3, 4, 5, 6, 7].map( + (i) => ` + .branch-label${i} { fill: ${options2["gitBranchLabel" + i]}; } + .commit${i} { stroke: ${options2["git" + i]}; fill: ${options2["git" + i]}; } + .commit-highlight${i} { stroke: ${options2["gitInv" + i]}; fill: ${options2["gitInv" + i]}; } + .label${i} { fill: ${options2["git" + i]}; } + .arrow${i} { stroke: ${options2["git" + i]}; } + ` +).join("\n")} + + .branch { + stroke-width: 1; + stroke: ${options2.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};} + .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};} + .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; } + .tag-hole { fill: ${options2.textColor}; } + + .commit-merge { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + .commit-reverse { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${options2.primaryColor}; + fill: ${options2.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options2.textColor}; + } +`; +const gitGraphStyles = getStyles; +const diagram = { + parser: gitGraphParser, + db: gitGraphDb, + renderer: gitGraphRenderer, + styles: gitGraphStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/2465.bf434e4e.js b/assets/js/2465.bf434e4e.js new file mode 100644 index 0000000000..c1df6dbf75 --- /dev/null +++ b/assets/js/2465.bf434e4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2465],{12465:(t,e,a)=>{a.d(e,{diagram:()=>X});var r=a(28758),s=a(64218),i=a(66893),n=a(17967),o=(a(27484),a(27856),function(){var t=function(t,e,a,r){for(a=a||{},r=t.length;r--;a[t[r]]=e);return a},e=[1,2],a=[1,3],r=[1,4],s=[2,4],i=[1,9],n=[1,11],o=[1,13],c=[1,14],l=[1,16],d=[1,17],h=[1,18],p=[1,24],g=[1,25],u=[1,26],x=[1,27],y=[1,28],m=[1,29],b=[1,30],f=[1,31],T=[1,32],E=[1,33],w=[1,34],P=[1,35],_=[1,36],k=[1,37],L=[1,38],v=[1,39],I=[1,41],N=[1,42],M=[1,43],A=[1,44],S=[1,45],O=[1,46],D=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],R=[4,5,16,50,52,53],C=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Y=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],B=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],V=[68,69,70],F=[1,120],q={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(t,e,a,r,s,i,n){var o=i.length-1;switch(s){case 3:return r.apply(i[o]),i[o];case 4:case 9:case 8:case 13:this.$=[];break;case 5:case 10:i[o-1].push(i[o]),this.$=i[o-1];break;case 6:case 7:case 11:case 12:case 62:this.$=i[o];break;case 15:i[o].type="createParticipant",this.$=i[o];break;case 16:i[o-1].unshift({type:"boxStart",boxData:r.parseBoxData(i[o-2])}),i[o-1].push({type:"boxEnd",boxText:i[o-2]}),this.$=i[o-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-2]),sequenceIndexStep:Number(i[o-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(i[o-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]};break;case 23:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-1]};break;case 29:r.setDiagramTitle(i[o].substring(6)),this.$=i[o].substring(6);break;case 30:r.setDiagramTitle(i[o].substring(7)),this.$=i[o].substring(7);break;case 31:this.$=i[o].trim(),r.setAccTitle(this.$);break;case 32:case 33:this.$=i[o].trim(),r.setAccDescription(this.$);break;case 34:i[o-1].unshift({type:"loopStart",loopText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.LOOP_START}),i[o-1].push({type:"loopEnd",loopText:i[o-2],signalType:r.LINETYPE.LOOP_END}),this.$=i[o-1];break;case 35:i[o-1].unshift({type:"rectStart",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_START}),i[o-1].push({type:"rectEnd",color:r.parseMessage(i[o-2]),signalType:r.LINETYPE.RECT_END}),this.$=i[o-1];break;case 36:i[o-1].unshift({type:"optStart",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_START}),i[o-1].push({type:"optEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.OPT_END}),this.$=i[o-1];break;case 37:i[o-1].unshift({type:"altStart",altText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.ALT_START}),i[o-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=i[o-1];break;case 38:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 39:i[o-1].unshift({type:"parStart",parText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.PAR_OVER_START}),i[o-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[o-1];break;case 40:i[o-1].unshift({type:"criticalStart",criticalText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.CRITICAL_START}),i[o-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=i[o-1];break;case 41:i[o-1].unshift({type:"breakStart",breakText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_START}),i[o-1].push({type:"breakEnd",optText:r.parseMessage(i[o-2]),signalType:r.LINETYPE.BREAK_END}),this.$=i[o-1];break;case 43:this.$=i[o-3].concat([{type:"option",optionText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.CRITICAL_OPTION},i[o]]);break;case 45:this.$=i[o-3].concat([{type:"and",parText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.PAR_AND},i[o]]);break;case 47:this.$=i[o-3].concat([{type:"else",altText:r.parseMessage(i[o-1]),signalType:r.LINETYPE.ALT_ELSE},i[o]]);break;case 48:i[o-3].draw="participant",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 49:i[o-1].draw="participant",i[o-1].type="addParticipant",this.$=i[o-1];break;case 50:i[o-3].draw="actor",i[o-3].type="addParticipant",i[o-3].description=r.parseMessage(i[o-1]),this.$=i[o-3];break;case 51:i[o-1].draw="actor",i[o-1].type="addParticipant",this.$=i[o-1];break;case 52:i[o-1].type="destroyParticipant",this.$=i[o-1];break;case 53:this.$=[i[o-1],{type:"addNote",placement:i[o-2],actor:i[o-1].actor,text:i[o]}];break;case 54:i[o-2]=[].concat(i[o-1],i[o-1]).slice(0,2),i[o-2][0]=i[o-2][0].actor,i[o-2][1]=i[o-2][1].actor,this.$=[i[o-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:i[o-2].slice(0,2),text:i[o]}];break;case 55:this.$=[i[o-1],{type:"addLinks",actor:i[o-1].actor,text:i[o]}];break;case 56:this.$=[i[o-1],{type:"addALink",actor:i[o-1].actor,text:i[o]}];break;case 57:this.$=[i[o-1],{type:"addProperties",actor:i[o-1].actor,text:i[o]}];break;case 58:this.$=[i[o-1],{type:"addDetails",actor:i[o-1].actor,text:i[o]}];break;case 61:this.$=[i[o-2],i[o]];break;case 63:this.$=r.PLACEMENT.LEFTOF;break;case 64:this.$=r.PLACEMENT.RIGHTOF;break;case 65:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o],activate:!0},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[o-1]}];break;case 66:this.$=[i[o-4],i[o-1],{type:"addMessage",from:i[o-4].actor,to:i[o-1].actor,signalType:i[o-3],msg:i[o]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[o-4]}];break;case 67:this.$=[i[o-3],i[o-1],{type:"addMessage",from:i[o-3].actor,to:i[o-1].actor,signalType:i[o-2],msg:i[o]}];break;case 68:this.$={type:"addParticipant",actor:i[o]};break;case 69:this.$=r.LINETYPE.SOLID_OPEN;break;case 70:this.$=r.LINETYPE.DOTTED_OPEN;break;case 71:this.$=r.LINETYPE.SOLID;break;case 72:this.$=r.LINETYPE.DOTTED;break;case 73:this.$=r.LINETYPE.SOLID_CROSS;break;case 74:this.$=r.LINETYPE.DOTTED_CROSS;break;case 75:this.$=r.LINETYPE.SOLID_POINT;break;case 76:this.$=r.LINETYPE.DOTTED_POINT;break;case 77:this.$=r.parseMessage(i[o].trim().substring(1))}},table:[{3:1,4:e,5:a,6:r},{1:[3]},{3:5,4:e,5:a,6:r},{3:6,4:e,5:a,6:r},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:i,5:n,8:8,9:10,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},t(D,[2,5]),{9:47,12:12,13:o,14:c,17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},t(D,[2,7]),t(D,[2,8]),t(D,[2,14]),{12:48,50:k,52:L,53:v},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:O},{22:55,70:O},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(D,[2,29]),t(D,[2,30]),{32:[1,61]},{34:[1,62]},t(D,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:O},{22:72,70:O},{22:73,70:O},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:O},{22:88,70:O},{22:89,70:O},{22:90,70:O},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(D,[2,6]),t(D,[2,15]),t(R,[2,9],{10:91}),t(D,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(D,[2,21]),{5:[1,95]},{5:[1,96]},t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,31]),t(D,[2,32]),t(C,s,{7:97}),t(C,s,{7:98}),t(C,s,{7:99}),t($,s,{40:100,7:101}),t(Y,s,{42:102,7:103}),t(Y,s,{7:103,42:104}),t(B,s,{45:105,7:106}),t(C,s,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:O},t(V,[2,69]),t(V,[2,70]),t(V,[2,71]),t(V,[2,72]),t(V,[2,73]),t(V,[2,74]),t(V,[2,75]),t(V,[2,76]),{22:116,70:O},{22:118,58:117,70:O},{70:[2,63]},{70:[2,64]},{56:119,79:F},{56:121,79:F},{56:122,79:F},{56:123,79:F},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:k,52:L,53:v},{5:[1,129]},t(D,[2,19]),t(D,[2,20]),t(D,[2,22]),t(D,[2,23]),{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,130],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,131],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,132],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},{16:[1,133]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,46],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,49:[1,134],50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},{16:[1,135]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,44],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,48:[1,136],50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},{16:[1,137]},{16:[1,138]},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[2,42],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,47:[1,139],50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},{4:i,5:n,8:8,9:10,12:12,13:o,14:c,16:[1,140],17:15,18:l,21:d,22:40,23:h,24:19,25:20,26:21,27:22,28:23,29:p,30:g,31:u,33:x,35:y,36:m,37:b,38:f,39:T,41:E,43:w,44:P,46:_,50:k,52:L,53:v,54:I,59:N,60:M,61:A,62:S,70:O},{15:[1,141]},t(D,[2,49]),{15:[1,142]},t(D,[2,51]),t(D,[2,52]),{22:143,70:O},{22:144,70:O},{56:145,79:F},{56:146,79:F},{56:147,79:F},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(D,[2,16]),t(R,[2,10]),{12:149,50:k,52:L,53:v},t(R,[2,12]),t(R,[2,13]),t(D,[2,18]),t(D,[2,34]),t(D,[2,35]),t(D,[2,36]),t(D,[2,37]),{15:[1,150]},t(D,[2,38]),{15:[1,151]},t(D,[2,39]),t(D,[2,40]),{15:[1,152]},t(D,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:F},{56:156,79:F},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:O},t(R,[2,11]),t($,s,{7:101,40:158}),t(Y,s,{7:103,42:159}),t(B,s,{7:106,45:160}),t(D,[2,48]),t(D,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(t,e){if(!e.recoverable){var a=new Error(t);throw a.hash=e,a}this.trace(t)},parse:function(t){var e=this,a=[0],r=[],s=[null],i=[],n=this.table,o="",c=0,l=0,d=i.slice.call(arguments,1),h=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);h.setInput(t,p.yy),p.yy.lexer=h,p.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var u=h.yylloc;i.push(u);var x=h.options&&h.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,m,b,f,T,E,w,P,_,k={};;){if(m=a[a.length-1],this.defaultActions[m]?b=this.defaultActions[m]:(null==y&&(_=void 0,"number"!=typeof(_=r.pop()||h.lex()||1)&&(_ instanceof Array&&(_=(r=_).pop()),_=e.symbols_[_]||_),y=_),b=n[m]&&n[m][y]),void 0===b||!b.length||!b[0]){var L="";for(T in P=[],n[m])this.terminals_[T]&&T>2&&P.push("'"+this.terminals_[T]+"'");L=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+P.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(L,{text:h.match,token:this.terminals_[y]||y,line:h.yylineno,loc:u,expected:P})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+y);switch(b[0]){case 1:a.push(y),s.push(h.yytext),i.push(h.yylloc),a.push(b[1]),y=null,l=h.yyleng,o=h.yytext,c=h.yylineno,u=h.yylloc;break;case 2:if(E=this.productions_[b[1]][1],k.$=s[s.length-E],k._$={first_line:i[i.length-(E||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(E||1)].first_column,last_column:i[i.length-1].last_column},x&&(k._$.range=[i[i.length-(E||1)].range[0],i[i.length-1].range[1]]),void 0!==(f=this.performAction.apply(k,[o,l,c,p.yy,b[1],s,i].concat(d))))return f;E&&(a=a.slice(0,-1*E*2),s=s.slice(0,-1*E),i=i.slice(0,-1*E)),a.push(this.productions_[b[1]][0]),s.push(k.$),i.push(k._$),w=n[a[a.length-2]][a[a.length-1]],a.push(w);break;case 3:return!0}}return!0}},W={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,a=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===r.length?this.yylloc.first_column:0)+r[r.length-a.length].length-a[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var a,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],a=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,a,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;i<s.length;i++)if((a=this._input.match(this.rules[s[i]]))&&(!e||a[0].length>e[0].length)){if(e=a,r=i,this.options.backtrack_lexer){if(!1!==(t=this.test_match(a,s[i])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,a,r){switch(a){case 0:case 51:case 64:return 5;case 1:case 2:case 3:case 4:case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 52:return e.yytext=e.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};function z(){this.yy={}}return q.lexer=W,z.prototype=q,q.Parser=z,new z}());o.parser=o;const c=o;const l=new class{constructor(t){this.init=t,this.records=this.init()}reset(){this.records=this.init()}}((()=>({prevActor:void 0,actors:{},createdActors:{},destroyedActors:{},boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}))),d=function(t,e,a,r){let s=l.records.currentBox;const i=l.records.actors[t];if(i){if(l.records.currentBox&&i.box&&l.records.currentBox!==i.box)throw new Error("A same participant should only be defined in one Box: "+i.name+" can't be in '"+i.box.name+"' and in '"+l.records.currentBox.name+"' at the same time.");if(s=i.box?i.box:l.records.currentBox,i.box=s,i&&e===i.name&&null==a)return}null!=a&&null!=a.text||(a={text:e,wrap:null,type:r}),null!=r&&null!=a.text||(a={text:e,wrap:null,type:r}),l.records.actors[t]={box:s,name:e,description:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,prevActor:l.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:r||"participant"},l.records.prevActor&&l.records.actors[l.records.prevActor]&&(l.records.actors[l.records.prevActor].nextActor=t),l.records.currentBox&&l.records.currentBox.actorKeys.push(t),l.records.prevActor=t},h=function(t,e,a={text:void 0,wrap:void 0},r,s=!1){if(r===u.ACTIVE_END){if((t=>{let e,a=0;for(e=0;e<l.records.messages.length;e++)l.records.messages[e].type===u.ACTIVE_START&&l.records.messages[e].from.actor===t&&a++,l.records.messages[e].type===u.ACTIVE_END&&l.records.messages[e].from.actor===t&&a--;return a})(t.actor)<1){let e=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw e.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},e}}return l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:r,activate:s}),!0},p=function(t){return l.records.actors[t]},g=()=>void 0!==l.records.wrapEnabled?l.records.wrapEnabled:(0,r.c)().sequence.wrap,u={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},x=function(t,e,a){const r={actor:t,placement:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap},s=[].concat(t,t);l.records.notes.push(r),l.records.messages.push({from:s[0],to:s[1],message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,type:u.NOTE,placement:e})},y=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());t=t.replace(/&/g,"&"),t=t.replace(/=/g,"=");m(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor link text",s)}};function m(t,e){if(null==t.links)t.links=e;else for(let a in e)t.links[a]=e[a]}const b=function(t,e){const a=p(t);try{let t=(0,r.d)(e.text,(0,r.c)());f(a,JSON.parse(t))}catch(s){r.l.error("error while parsing actor properties text",s)}};function f(t,e){if(null==t.properties)t.properties=e;else for(let a in e)t.properties[a]=e[a]}const T=function(t,e){const a=p(t),s=document.getElementById(e.text);try{const t=s.innerHTML,e=JSON.parse(t);e.properties&&f(a,e.properties),e.links&&m(a,e.links)}catch(i){r.l.error("error while parsing actor details text",i)}},E=function(t){if(Array.isArray(t))t.forEach((function(t){E(t)}));else switch(t.type){case"sequenceIndex":l.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":d(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if(l.records.actors[t.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");l.records.lastCreated=t.actor,d(t.actor,t.actor,t.description,t.draw),l.records.createdActors[t.actor]=l.records.messages.length;break;case"destroyParticipant":l.records.lastDestroyed=t.actor,l.records.destroyedActors[t.actor]=l.records.messages.length;break;case"activeStart":case"activeEnd":h(t.actor,void 0,void 0,t.signalType);break;case"addNote":x(t.actor,t.placement,t.text);break;case"addLinks":y(t.actor,t.text);break;case"addALink":!function(t,e){const a=p(t);try{const t={};let o=(0,r.d)(e.text,(0,r.c)());var s=o.indexOf("@");o=o.replace(/&/g,"&"),o=o.replace(/=/g,"=");var i=o.slice(0,s-1).trim(),n=o.slice(s+1).trim();t[i]=n,m(a,t)}catch(o){r.l.error("error while parsing actor link text",o)}}(t.actor,t.text);break;case"addProperties":b(t.actor,t.text);break;case"addDetails":T(t.actor,t.text);break;case"addMessage":if(l.records.lastCreated){if(t.to!==l.records.lastCreated)throw new Error("The created participant "+l.records.lastCreated+" does not have an associated creating message after its declaration. Please check the sequence diagram.");l.records.lastCreated=void 0}else if(l.records.lastDestroyed){if(t.to!==l.records.lastDestroyed&&t.from!==l.records.lastDestroyed)throw new Error("The destroyed participant "+l.records.lastDestroyed+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");l.records.lastDestroyed=void 0}h(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":e=t.boxData,l.records.boxes.push({name:e.text,wrap:void 0===e.wrap&&g()||!!e.wrap,fill:e.color,actorKeys:[]}),l.records.currentBox=l.records.boxes.slice(-1)[0];break;case"boxEnd":l.records.currentBox=void 0;break;case"loopStart":h(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":case"rectEnd":case"optEnd":case"altEnd":case"parEnd":case"criticalEnd":case"breakEnd":h(void 0,void 0,void 0,t.signalType);break;case"rectStart":h(void 0,void 0,t.color,t.signalType);break;case"optStart":h(void 0,void 0,t.optText,t.signalType);break;case"altStart":case"else":h(void 0,void 0,t.altText,t.signalType);break;case"setAccTitle":(0,r.s)(t.text);break;case"parStart":case"and":h(void 0,void 0,t.parText,t.signalType);break;case"criticalStart":h(void 0,void 0,t.criticalText,t.signalType);break;case"option":h(void 0,void 0,t.optionText,t.signalType);break;case"breakStart":h(void 0,void 0,t.breakText,t.signalType)}var e},w={addActor:d,addMessage:function(t,e,a,r){l.records.messages.push({from:t,to:e,message:a.text,wrap:void 0===a.wrap&&g()||!!a.wrap,answer:r})},addSignal:h,addLinks:y,addDetails:T,addProperties:b,autoWrap:g,setWrap:function(t){l.records.wrapEnabled=t},enableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!0},disableSequenceNumbers:function(){l.records.sequenceNumbersEnabled=!1},showSequenceNumbers:()=>l.records.sequenceNumbersEnabled,getMessages:function(){return l.records.messages},getActors:function(){return l.records.actors},getCreatedActors:function(){return l.records.createdActors},getDestroyedActors:function(){return l.records.destroyedActors},getActor:p,getActorKeys:function(){return Object.keys(l.records.actors)},getActorProperty:function(t,e){if(void 0!==t&&void 0!==t.properties)return t.properties[e]},getAccTitle:r.g,getBoxes:function(){return l.records.boxes},getDiagramTitle:r.r,setDiagramTitle:r.q,getConfig:()=>(0,r.c)().sequence,clear:function(){l.reset(),(0,r.t)()},parseMessage:function(t){const e=t.trim(),a={text:e.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^:?wrap:/)||null===e.match(/^:?nowrap:/)&&void 0};return r.l.debug("parseMessage:",a),a},parseBoxData:function(t){const e=t.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let a=null!=e&&e[1]?e[1].trim():"transparent",s=null!=e&&e[2]?e[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",a)||(a="transparent",s=t.trim());else{const e=(new Option).style;e.color=a,e.color!==a&&(a="transparent",s=t.trim())}return{color:a,text:void 0!==s?(0,r.d)(s.replace(/^:?(?:no)?wrap:/,""),(0,r.c)()):void 0,wrap:void 0!==s?null!==s.match(/^:?wrap:/)||null===s.match(/^:?nowrap:/)&&void 0:void 0}},LINETYPE:u,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:x,setAccTitle:r.s,apply:E,setAccDescription:r.b,getAccDescription:r.a,hasAtLeastOneBox:function(){return l.records.boxes.length>0},hasAtLeastOneBoxWithTitle:function(){return l.records.boxes.some((t=>t.name))}},P=t=>`.actor {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${t.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${t.actorLineColor};\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${t.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${t.signalColor};\n }\n\n #arrowhead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .sequenceNumber {\n fill: ${t.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${t.signalColor};\n }\n\n #crosshead path {\n fill: ${t.signalColor};\n stroke: ${t.signalColor};\n }\n\n .messageText {\n fill: ${t.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${t.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${t.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${t.labelBoxBorderColor};\n fill: ${t.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${t.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation1 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .activation2 {\n fill: ${t.activationBkgColor};\n stroke: ${t.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${t.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${t.actorBorder};\n fill: ${t.actorBkg};\n stroke-width: 2px;\n }\n`,_="actor-top",k="actor-bottom",L=function(t,e){return(0,i.d)(t,e)},v=function(t,e){let a=0,s=0;const i=e.text.split(r.e.lineBreakRegex),[n,o]=(0,r.C)(e.fontSize);let c=[],l=0,d=()=>e.y;if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":d=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":d=()=>Math.round(e.y+(a+s+e.textMargin)/2);break;case"bottom":case"end":d=()=>Math.round(e.y+(a+s+2*e.textMargin)-e.textMargin)}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle"}for(let[h,p]of i.entries()){void 0!==e.textMargin&&0===e.textMargin&&void 0!==n&&(l=h*n);const i=t.append("text");i.attr("x",e.x),i.attr("y",d()),void 0!==e.anchor&&i.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),void 0!==e.fontFamily&&i.style("font-family",e.fontFamily),void 0!==o&&i.style("font-size",o),void 0!==e.fontWeight&&i.style("font-weight",e.fontWeight),void 0!==e.fill&&i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class),void 0!==e.dy?i.attr("dy",e.dy):0!==l&&i.attr("dy",l);const g=p||r.Z;if(e.tspan){const t=i.append("tspan");t.attr("x",e.x),void 0!==e.fill&&t.attr("fill",e.fill),t.text(g)}else i.text(g);void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0&&(s+=(i._groups||i)[0][0].getBBox().height,a=s),c.push(i)}return c},I=function(t,e){const a=t.append("polygon");var r,s,i,n,o;return a.attr("points",(r=e.x,s=e.y,i=e.width,n=e.height,r+","+s+" "+(r+i)+","+s+" "+(r+i)+","+(s+n-(o=7))+" "+(r+i-1.2*o)+","+(s+n)+" "+r+","+(s+n))),a.attr("class","labelBox"),e.y=e.y+e.height/2,v(t,e),a};let N=-1;const M=(t,e,a,r)=>{t.select&&a.forEach((a=>{const s=e[a],i=t.select("#actor"+s.actorCnt);!r.mirrorActors&&s.stopy?i.attr("y2",s.stopy+s.height/2):r.mirrorActors&&i.attr("y2",s.stopy)}))},A=function(t,e){(0,i.a)(t,e)},S=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},O=function(){function t(t,e,a,r,i,n,o){s(e.append("text").attr("x",a+i/2).attr("y",r+n/2+5).style("text-anchor","middle").text(t),o)}function e(t,e,a,i,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,[g,u]=(0,r.C)(d),x=t.split(r.e.lineBreakRegex);for(let r=0;r<x.length;r++){const t=r*g-g*(x.length-1)/2,l=e.append("text").attr("x",a+n/2).attr("y",i).style("text-anchor","middle").style("font-size",u).style("font-weight",p).style("font-family",h);l.append("tspan").attr("x",a+n/2).attr("dy",t).text(x[r]),l.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),s(l,c)}}function a(t,a,r,i,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",i).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,i,n,o,c,l),s(h,c)}function s(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),D=function(){function t(t,e,a,r,i,n,o){s(e.append("text").attr("x",a).attr("y",r).style("text-anchor","start").text(t),o)}function e(t,e,a,i,n,o,c,l){const{actorFontSize:d,actorFontFamily:h,actorFontWeight:p}=l,g=t.split(r.e.lineBreakRegex);for(let r=0;r<g.length;r++){const t=r*d-d*(g.length-1)/2,n=e.append("text").attr("x",a).attr("y",i).style("text-anchor","start").style("font-size",d).style("font-weight",p).style("font-family",h);n.append("tspan").attr("x",a).attr("dy",t).text(g[r]),n.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),s(n,c)}}function a(t,a,r,i,n,o,c,l){const d=a.append("switch"),h=d.append("foreignObject").attr("x",r).attr("y",i).attr("width",n).attr("height",o).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,d,r,i,0,o,c,l),s(h,c)}function s(t,e){for(const a in e)e.hasOwnProperty(a)&&t.attr(a,e[a])}return function(r){return"fo"===r.textPlacement?a:"old"===r.textPlacement?t:e}}(),R={drawRect:L,drawText:v,drawLabel:I,drawActor:function(t,e,a,r){switch(e.type){case"actor":return function(t,e,a,r){const s=r?e.stopy:e.starty,n=e.x+e.width/2,o=s+80;t.lower(),r||(N++,t.append("line").attr("id","actor"+N).attr("x1",n).attr("y1",o).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),e.actorCnt=N);const c=t.append("g");let l="actor-man";l+=r?` ${k}`:` ${_}`,c.attr("class",l);const d=(0,i.g)();d.x=e.x,d.y=s,d.fill="#eaeaea",d.width=e.width,d.height=e.height,d.class="actor",d.rx=3,d.ry=3,c.append("line").attr("id","actor-man-torso"+N).attr("x1",n).attr("y1",s+25).attr("x2",n).attr("y2",s+45),c.append("line").attr("id","actor-man-arms"+N).attr("x1",n-18).attr("y1",s+33).attr("x2",n+18).attr("y2",s+33),c.append("line").attr("x1",n-18).attr("y1",s+60).attr("x2",n).attr("y2",s+45),c.append("line").attr("x1",n).attr("y1",s+45).attr("x2",n+18-2).attr("y2",s+60);const h=c.append("circle");h.attr("cx",e.x+e.width/2),h.attr("cy",s+10),h.attr("r",15),h.attr("width",e.width),h.attr("height",e.height);const p=c.node().getBBox();return e.height=p.height,O(a)(e.description,c,d.x,d.y+35,d.width,d.height,{class:"actor"},a),e.height}(t,e,a,r);case"participant":return function(t,e,a,r){const s=r?e.stopy:e.starty,n=e.x+e.width/2,o=s+5,c=t.append("g").lower();var l,d=c;r||(N++,Object.keys(e.links||{}).length&&!a.forceMenus&&d.attr("onclick",(l=`actor${N}_popup`,"var pu = document.getElementById('"+l+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }")).attr("cursor","pointer"),d.append("line").attr("id","actor"+N).attr("x1",n).attr("y1",o).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),d=c.append("g"),e.actorCnt=N,null!=e.links&&d.attr("id","root-"+N));const h=(0,i.g)();var p="actor";null!=e.properties&&e.properties.class?p=e.properties.class:h.fill="#eaeaea",p+=r?` ${k}`:` ${_}`,h.x=e.x,h.y=s,h.width=e.width,h.height=e.height,h.class=p,h.rx=3,h.ry=3;const g=L(d,h);if(e.rectData=h,null!=e.properties&&e.properties.icon){const t=e.properties.icon.trim();"@"===t.charAt(0)?(0,i.b)(d,h.x+h.width-20,h.y+10,t.substr(1)):(0,i.c)(d,h.x+h.width-20,h.y+10,t)}O(a)(e.description,d,h.x,h.y,h.width,h.height,{class:"actor"},a);let u=e.height;if(g.node){const t=g.node().getBBox();e.height=t.height,u=t.height}return u}(t,e,a,r)}},drawBox:function(t,e,a){const r=t.append("g");A(r,e),e.name&&O(a)(e.name,r,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},a),r.lower()},drawPopup:function(t,e,a,r,s){if(void 0===e.links||null===e.links||0===Object.keys(e.links).length)return{height:0,width:0};const i=e.links,o=e.actorCnt,c=e.rectData;var l="none";s&&(l="block !important");const d=t.append("g");d.attr("id","actor"+o+"_popup"),d.attr("class","actorPopupMenu"),d.attr("display",l);var h="";void 0!==c.class&&(h=" "+c.class);let p=c.width>a?c.width:a;const g=d.append("rect");if(g.attr("class","actorPopupMenuPanel"+h),g.attr("x",c.x),g.attr("y",c.height),g.attr("fill",c.fill),g.attr("stroke",c.stroke),g.attr("width",p),g.attr("height",c.height),g.attr("rx",c.rx),g.attr("ry",c.ry),null!=i){var u=20;for(let t in i){var x=d.append("a"),y=(0,n.Nm)(i[t]);x.attr("xlink:href",y),x.attr("target","_blank"),D(r)(t,x,c.x+10,c.height+u,p,20,{class:"actor"},r),u+=30}}return g.attr("height",u),{height:c.height+u,width:p}},anchorElement:function(t){return t.append("g")},drawActivation:function(t,e,a,r,s){const n=(0,i.g)(),o=e.anchored;n.x=e.startx,n.y=e.starty,n.class="activation"+s%3,n.width=e.stopx-e.startx,n.height=a-e.starty,L(o,n)},drawLoop:function(t,e,a,r){const{boxMargin:s,boxTextMargin:n,labelBoxHeight:o,labelBoxWidth:c,messageFontFamily:l,messageFontSize:d,messageFontWeight:h}=r,p=t.append("g"),g=function(t,e,a,r){return p.append("line").attr("x1",t).attr("y1",e).attr("x2",a).attr("y2",r).attr("class","loopLine")};g(e.startx,e.starty,e.stopx,e.starty),g(e.stopx,e.starty,e.stopx,e.stopy),g(e.startx,e.stopy,e.stopx,e.stopy),g(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach((function(t){g(e.startx,t.y,e.stopx,t.y).style("stroke-dasharray","3, 3")}));let u=(0,i.e)();u.text=a,u.x=e.startx,u.y=e.starty,u.fontFamily=l,u.fontSize=d,u.fontWeight=h,u.anchor="middle",u.valign="middle",u.tspan=!1,u.width=c||50,u.height=o||20,u.textMargin=n,u.class="labelText",I(p,u),u=S(),u.text=e.title,u.x=e.startx+c/2+(e.stopx-e.startx)/2,u.y=e.starty+s+n,u.anchor="middle",u.valign="middle",u.textMargin=n,u.class="loopText",u.fontFamily=l,u.fontSize=d,u.fontWeight=h,u.wrap=!0;let x=v(p,u);return void 0!==e.sectionTitles&&e.sectionTitles.forEach((function(t,a){if(t.message){u.text=t.message,u.x=e.startx+(e.stopx-e.startx)/2,u.y=e.sections[a].y+s+n,u.class="loopText",u.anchor="middle",u.valign="middle",u.tspan=!1,u.fontFamily=l,u.fontSize=d,u.fontWeight=h,u.wrap=e.wrap,x=v(p,u);let r=Math.round(x.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));e.sections[a].height+=r-(s+n)}})),e.height=Math.round(e.stopy-e.starty),p},drawBackgroundRect:A,insertArrowHead:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},insertArrowFilledHead:function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},insertSequenceNumber:function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},insertArrowCrossHead:function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},insertDatabaseIcon:function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},insertComputerIcon:function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},insertClockIcon:function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},getTextObj:S,getNoteRect:function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},fixLifeLineHeights:M,sanitizeUrl:n.Nm};let C={};const $={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((t=>t.height||0)))+(0===this.loops.length?0:this.loops.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.messages.length?0:this.messages.map((t=>t.height||0)).reduce(((t,e)=>t+e)))+(0===this.notes.length?0:this.notes.map((t=>t.height||0)).reduce(((t,e)=>t+e)))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(t){this.boxes.push(t)},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,W((0,r.c)())},updateVal:function(t,e,a,r){void 0===t[e]?t[e]=a:t[e]=r(a,t[e])},updateBounds:function(t,e,a,r){const s=this;let i=0;function n(n){return function(o){i++;const c=s.sequenceItems.length-i+1;s.updateVal(o,"starty",e-c*C.boxMargin,Math.min),s.updateVal(o,"stopy",r+c*C.boxMargin,Math.max),s.updateVal($.data,"startx",t-c*C.boxMargin,Math.min),s.updateVal($.data,"stopx",a+c*C.boxMargin,Math.max),"activation"!==n&&(s.updateVal(o,"startx",t-c*C.boxMargin,Math.min),s.updateVal(o,"stopx",a+c*C.boxMargin,Math.max),s.updateVal($.data,"starty",e-c*C.boxMargin,Math.min),s.updateVal($.data,"stopy",r+c*C.boxMargin,Math.max))}}this.sequenceItems.forEach(n()),this.activations.forEach(n("activation"))},insert:function(t,e,a,s){const i=r.e.getMin(t,a),n=r.e.getMax(t,a),o=r.e.getMin(e,s),c=r.e.getMax(e,s);this.updateVal($.data,"startx",i,Math.min),this.updateVal($.data,"starty",o,Math.min),this.updateVal($.data,"stopx",n,Math.max),this.updateVal($.data,"stopy",c,Math.max),this.updateBounds(i,o,n,c)},newActivation:function(t,e,a){const r=a[t.from.actor],s=z(t.from.actor).length||0,i=r.x+r.width/2+(s-1)*C.activationWidth/2;this.activations.push({startx:i,starty:this.verticalPos+2,stopx:i+C.activationWidth,stopy:void 0,actor:t.from.actor,anchored:R.anchorElement(e)})},endActivation:function(t){const e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return!!this.sequenceItems.length&&this.sequenceItems[this.sequenceItems.length-1].overlap},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:$.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=r.e.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},Y=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),B=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),V=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight});const F=function(t,e,a,s){if(s){let s=0;$.bumpVerticalPos(2*C.boxMargin);for(const i of a){const a=e[i];a.stopy||(a.stopy=$.getVerticalPos());const n=R.drawActor(t,a,C,!0);s=r.e.getMax(s,n)}$.bumpVerticalPos(s+C.boxMargin)}else for(const r of a){const a=e[r];R.drawActor(t,a,C,!1)}},q=function(t,e,a,r){let s=0,i=0;for(const n of a){const a=e[n],o=j(a),c=R.drawPopup(t,a,o,C,C.forceMenus,r);c.height>s&&(s=c.height),c.width+a.x>i&&(i=c.width+a.x)}return{maxHeight:s,maxWidth:i}},W=function(t){(0,r.f)(C,t),t.fontFamily&&(C.actorFontFamily=C.noteFontFamily=C.messageFontFamily=t.fontFamily),t.fontSize&&(C.actorFontSize=C.noteFontSize=C.messageFontSize=t.fontSize),t.fontWeight&&(C.actorFontWeight=C.noteFontWeight=C.messageFontWeight=t.fontWeight)},z=function(t){return $.activations.filter((function(e){return e.actor===t}))},H=function(t,e){const a=e[t],s=z(t);return[s.reduce((function(t,e){return r.e.getMin(t,e.startx)}),a.x+a.width/2-1),s.reduce((function(t,e){return r.e.getMax(t,e.stopx)}),a.x+a.width/2+1)]};function U(t,e,a,s,i){$.bumpVerticalPos(a);let n=s;if(e.id&&e.message&&t[e.id]){const a=t[e.id].width,i=Y(C);e.message=r.u.wrapLabel(`[${e.message}]`,a-2*C.wrapPadding,i),e.width=a,e.wrap=!0;const o=r.u.calculateTextDimensions(e.message,i),c=r.e.getMax(o.height,C.labelBoxHeight);n=s+c,r.l.debug(`${c} - ${e.message}`)}i(e),$.bumpVerticalPos(n)}const j=function(t){let e=0;const a=V(C);for(const s in t.links){const t=r.u.calculateTextDimensions(s,a).width+2*C.wrapPadding+2*C.boxMargin;e<t&&(e=t)}return e};const K=function(t,e,a,s){const i={},n=[];let o,c,l;return t.forEach((function(t){switch(t.id=r.u.random({length:10}),t.type){case s.db.LINETYPE.LOOP_START:case s.db.LINETYPE.ALT_START:case s.db.LINETYPE.OPT_START:case s.db.LINETYPE.PAR_START:case s.db.LINETYPE.PAR_OVER_START:case s.db.LINETYPE.CRITICAL_START:case s.db.LINETYPE.BREAK_START:n.push({id:t.id,msg:t.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case s.db.LINETYPE.ALT_ELSE:case s.db.LINETYPE.PAR_AND:case s.db.LINETYPE.CRITICAL_OPTION:t.message&&(o=n.pop(),i[o.id]=o,i[t.id]=o,n.push(o));break;case s.db.LINETYPE.LOOP_END:case s.db.LINETYPE.ALT_END:case s.db.LINETYPE.OPT_END:case s.db.LINETYPE.PAR_END:case s.db.LINETYPE.CRITICAL_END:case s.db.LINETYPE.BREAK_END:o=n.pop(),i[o.id]=o;break;case s.db.LINETYPE.ACTIVE_START:{const a=e[t.from?t.from.actor:t.to.actor],r=z(t.from?t.from.actor:t.to.actor).length,s=a.x+a.width/2+(r-1)*C.activationWidth/2,i={startx:s,stopx:s+C.activationWidth,actor:t.from.actor,enabled:!0};$.activations.push(i)}break;case s.db.LINETYPE.ACTIVE_END:{const e=$.activations.map((t=>t.actor)).lastIndexOf(t.from.actor);delete $.activations.splice(e,1)[0]}}void 0!==t.placement?(c=function(t,e,a){const s=e[t.from].x,i=e[t.to].x,n=t.wrap&&t.message;let o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,C.width,B(C)):t.message,B(C));const c={width:n?C.width:r.e.getMax(C.width,o.width+2*C.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===a.db.PLACEMENT.RIGHTOF?(c.width=n?r.e.getMax(C.width,o.width):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*C.noteMargin),c.startx=s+(e[t.from].width+C.actorMargin)/2):t.placement===a.db.PLACEMENT.LEFTOF?(c.width=n?r.e.getMax(C.width,o.width+2*C.noteMargin):r.e.getMax(e[t.from].width/2+e[t.to].width/2,o.width+2*C.noteMargin),c.startx=s-c.width+(e[t.from].width-C.actorMargin)/2):t.to===t.from?(o=r.u.calculateTextDimensions(n?r.u.wrapLabel(t.message,r.e.getMax(C.width,e[t.from].width),B(C)):t.message,B(C)),c.width=n?r.e.getMax(C.width,e[t.from].width):r.e.getMax(e[t.from].width,C.width,o.width+2*C.noteMargin),c.startx=s+(e[t.from].width-c.width)/2):(c.width=Math.abs(s+e[t.from].width/2-(i+e[t.to].width/2))+C.actorMargin,c.startx=s<i?s+e[t.from].width/2-C.actorMargin/2:i+e[t.to].width/2-C.actorMargin/2),n&&(c.message=r.u.wrapLabel(t.message,c.width-2*C.wrapPadding,B(C))),r.l.debug(`NM:[${c.startx},${c.stopx},${c.starty},${c.stopy}:${c.width},${c.height}=${t.message}]`),c}(t,e,s),t.noteModel=c,n.forEach((t=>{o=t,o.from=r.e.getMin(o.from,c.startx),o.to=r.e.getMax(o.to,c.startx+c.width),o.width=r.e.getMax(o.width,Math.abs(o.from-o.to))-C.labelBoxWidth}))):(l=function(t,e,a){if(![a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN,a.db.LINETYPE.SOLID,a.db.LINETYPE.DOTTED,a.db.LINETYPE.SOLID_CROSS,a.db.LINETYPE.DOTTED_CROSS,a.db.LINETYPE.SOLID_POINT,a.db.LINETYPE.DOTTED_POINT].includes(t.type))return{};const[s,i]=H(t.from,e),[n,o]=H(t.to,e),c=s<=n,l=c?i:s;let d=c?n:o;const h=Math.abs(n-o)>2,p=t=>c?-t:t;t.from===t.to?d=l:(t.activate&&!h&&(d+=p(C.activationWidth/2-1)),[a.db.LINETYPE.SOLID_OPEN,a.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(d+=p(3)));const g=[s,i,n,o],u=Math.abs(l-d);t.wrap&&t.message&&(t.message=r.u.wrapLabel(t.message,r.e.getMax(u+2*C.wrapPadding,C.width),Y(C)));const x=r.u.calculateTextDimensions(t.message,Y(C));return{width:r.e.getMax(t.wrap?0:x.width+2*C.wrapPadding,u+2*C.wrapPadding,C.width),height:0,startx:l,stopx:d,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,g),toBounds:Math.max.apply(null,g)}}(t,e,s),t.msgModel=l,l.startx&&l.stopx&&n.length>0&&n.forEach((a=>{if(o=a,l.startx===l.stopx){const a=e[t.from],s=e[t.to];o.from=r.e.getMin(a.x-l.width/2,a.x-a.width/2,o.from),o.to=r.e.getMax(s.x+l.width/2,s.x+a.width/2,o.to),o.width=r.e.getMax(o.width,Math.abs(o.to-o.from))-C.labelBoxWidth}else o.from=r.e.getMin(l.startx,o.from),o.to=r.e.getMax(l.stopx,o.to),o.width=r.e.getMax(o.width,l.width)-C.labelBoxWidth})))})),$.activations=[],r.l.debug("Loop type widths:",i),i},X={parser:c,db:w,renderer:{bounds:$,drawActors:F,drawActorsPopup:q,setConf:W,draw:function(t,e,a,n){const{securityLevel:o,sequence:c}=(0,r.c)();let l;C=c,"sandbox"===o&&(l=(0,s.Ys)("#i"+e));const d="sandbox"===o?(0,s.Ys)(l.nodes()[0].contentDocument.body):(0,s.Ys)("body"),h="sandbox"===o?l.nodes()[0].contentDocument:document;$.init(),r.l.debug(n.db);const p="sandbox"===o?d.select(`[id="${e}"]`):(0,s.Ys)(`[id="${e}"]`),g=n.db.getActors(),u=n.db.getCreatedActors(),x=n.db.getDestroyedActors(),y=n.db.getBoxes();let m=n.db.getActorKeys();const b=n.db.getMessages(),f=n.db.getDiagramTitle(),T=n.db.hasAtLeastOneBox(),E=n.db.hasAtLeastOneBoxWithTitle(),w=function(t,e,a){const s={};return e.forEach((function(e){if(t[e.to]&&t[e.from]){const i=t[e.to];if(e.placement===a.db.PLACEMENT.LEFTOF&&!i.prevActor)return;if(e.placement===a.db.PLACEMENT.RIGHTOF&&!i.nextActor)return;const n=void 0!==e.placement,o=!n,c=n?B(C):Y(C),l=e.wrap?r.u.wrapLabel(e.message,C.width-2*C.wrapPadding,c):e.message,d=r.u.calculateTextDimensions(l,c).width+2*C.wrapPadding;o&&e.from===i.nextActor?s[e.to]=r.e.getMax(s[e.to]||0,d):o&&e.from===i.prevActor?s[e.from]=r.e.getMax(s[e.from]||0,d):o&&e.from===e.to?(s[e.from]=r.e.getMax(s[e.from]||0,d/2),s[e.to]=r.e.getMax(s[e.to]||0,d/2)):e.placement===a.db.PLACEMENT.RIGHTOF?s[e.from]=r.e.getMax(s[e.from]||0,d):e.placement===a.db.PLACEMENT.LEFTOF?s[i.prevActor]=r.e.getMax(s[i.prevActor]||0,d):e.placement===a.db.PLACEMENT.OVER&&(i.prevActor&&(s[i.prevActor]=r.e.getMax(s[i.prevActor]||0,d/2)),i.nextActor&&(s[e.from]=r.e.getMax(s[e.from]||0,d/2)))}})),r.l.debug("maxMessageWidthPerActor:",s),s}(g,b,n);if(C.height=function(t,e,a){let s=0;Object.keys(t).forEach((e=>{const a=t[e];a.wrap&&(a.description=r.u.wrapLabel(a.description,C.width-2*C.wrapPadding,V(C)));const i=r.u.calculateTextDimensions(a.description,V(C));a.width=a.wrap?C.width:r.e.getMax(C.width,i.width+2*C.wrapPadding),a.height=a.wrap?r.e.getMax(i.height,C.height):C.height,s=r.e.getMax(s,a.height)}));for(const n in e){const a=t[n];if(!a)continue;const s=t[a.nextActor];if(!s){const t=e[n]+C.actorMargin-a.width/2;a.margin=r.e.getMax(t,C.actorMargin);continue}const i=e[n]+C.actorMargin-a.width/2-s.width/2;a.margin=r.e.getMax(i,C.actorMargin)}let i=0;return a.forEach((e=>{const a=Y(C);let s=e.actorKeys.reduce(((e,a)=>e+(t[a].width+(t[a].margin||0))),0);s-=2*C.boxTextMargin,e.wrap&&(e.name=r.u.wrapLabel(e.name,s-2*C.wrapPadding,a));const n=r.u.calculateTextDimensions(e.name,a);i=r.e.getMax(n.height,i);const o=r.e.getMax(s,n.width+2*C.wrapPadding);if(e.margin=C.boxTextMargin,s<o){const t=(o-s)/2;e.margin+=t}})),a.forEach((t=>t.textMaxHeight=i)),r.e.getMax(s,C.height)}(g,w,y),R.insertComputerIcon(p),R.insertDatabaseIcon(p),R.insertClockIcon(p),T&&($.bumpVerticalPos(C.boxMargin),E&&$.bumpVerticalPos(y[0].textMaxHeight)),!0===C.hideUnusedParticipants){const t=new Set;b.forEach((e=>{t.add(e.from),t.add(e.to)})),m=m.filter((e=>t.has(e)))}!function(t,e,a,s,i,n,o){let c,l=0,d=0,h=0;for(const p of s){const t=e[p],s=t.box;c&&c!=s&&(o||$.models.addBox(c),d+=C.boxMargin+c.margin),s&&s!=c&&(o||(s.x=l+d,s.y=i),d+=s.margin),t.width=t.width||C.width,t.height=r.e.getMax(t.height||C.height,C.height),t.margin=t.margin||C.actorMargin,h=r.e.getMax(h,t.height),a[t.name]&&(d+=t.width/2),t.x=l+d,t.starty=$.getVerticalPos(),$.insert(t.x,i,t.x+t.width,t.height),l+=t.width+d,t.box&&(t.box.width=l+s.margin-t.box.x),d=t.margin,c=t.box,$.models.addActor(t)}c&&!o&&$.models.addBox(c),$.bumpVerticalPos(h)}(0,g,u,m,0,0,!1);const P=K(b,g,w,n);R.insertArrowHead(p),R.insertArrowCrossHead(p),R.insertArrowFilledHead(p),R.insertSequenceNumber(p);let _=1,k=1;const L=[],I=[];b.forEach((function(t,e){let a,s,o;switch(t.type){case n.db.LINETYPE.NOTE:$.resetVerticalPos(),s=t.noteModel,function(t,e){$.bumpVerticalPos(C.boxMargin),e.height=C.boxMargin,e.starty=$.getVerticalPos();const a=(0,i.g)();a.x=e.startx,a.y=e.starty,a.width=e.width||C.width,a.class="note";const r=t.append("g"),s=R.drawRect(r,a),n=(0,i.e)();n.x=e.startx,n.y=e.starty,n.width=a.width,n.dy="1em",n.text=e.message,n.class="noteText",n.fontFamily=C.noteFontFamily,n.fontSize=C.noteFontSize,n.fontWeight=C.noteFontWeight,n.anchor=C.noteAlign,n.textMargin=C.noteMargin,n.valign="center";const o=v(r,n),c=Math.round(o.map((t=>(t._groups||t)[0][0].getBBox().height)).reduce(((t,e)=>t+e)));s.attr("height",c+2*C.noteMargin),e.height+=c+2*C.noteMargin,$.bumpVerticalPos(c+2*C.noteMargin),e.stopy=e.starty+c+2*C.noteMargin,e.stopx=e.startx+a.width,$.insert(e.startx,e.starty,e.stopx,e.stopy),$.models.addNote(e)}(p,s);break;case n.db.LINETYPE.ACTIVE_START:$.newActivation(t,p,g);break;case n.db.LINETYPE.ACTIVE_END:!function(t,e){const a=$.endActivation(t);a.starty+18>e&&(a.starty=e-6,e+=12),R.drawActivation(p,a,e,C,z(t.from.actor).length),$.insert(a.startx,e-10,a.stopx,e)}(t,$.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:U(P,t,C.boxMargin,C.boxMargin+C.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.LOOP_END:a=$.endLoop(),R.drawLoop(p,a,"loop",C),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.RECT_START:U(P,t,C.boxMargin,C.boxMargin,(t=>$.newLoop(void 0,t.message)));break;case n.db.LINETYPE.RECT_END:a=$.endLoop(),I.push(a),$.models.addLoop(a),$.bumpVerticalPos(a.stopy-$.getVerticalPos());break;case n.db.LINETYPE.OPT_START:U(P,t,C.boxMargin,C.boxMargin+C.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.OPT_END:a=$.endLoop(),R.drawLoop(p,a,"opt",C),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.ALT_START:U(P,t,C.boxMargin,C.boxMargin+C.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.ALT_ELSE:U(P,t,C.boxMargin+C.boxTextMargin,C.boxMargin,(t=>$.addSectionToLoop(t)));break;case n.db.LINETYPE.ALT_END:a=$.endLoop(),R.drawLoop(p,a,"alt",C),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:U(P,t,C.boxMargin,C.boxMargin+C.boxTextMargin,(t=>$.newLoop(t))),$.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:U(P,t,C.boxMargin+C.boxTextMargin,C.boxMargin,(t=>$.addSectionToLoop(t)));break;case n.db.LINETYPE.PAR_END:a=$.endLoop(),R.drawLoop(p,a,"par",C),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.AUTONUMBER:_=t.message.start||_,k=t.message.step||k,t.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:U(P,t,C.boxMargin,C.boxMargin+C.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.CRITICAL_OPTION:U(P,t,C.boxMargin+C.boxTextMargin,C.boxMargin,(t=>$.addSectionToLoop(t)));break;case n.db.LINETYPE.CRITICAL_END:a=$.endLoop(),R.drawLoop(p,a,"critical",C),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;case n.db.LINETYPE.BREAK_START:U(P,t,C.boxMargin,C.boxMargin+C.boxTextMargin,(t=>$.newLoop(t)));break;case n.db.LINETYPE.BREAK_END:a=$.endLoop(),R.drawLoop(p,a,"break",C),$.bumpVerticalPos(a.stopy-$.getVerticalPos()),$.models.addLoop(a);break;default:try{o=t.msgModel,o.starty=$.getVerticalPos(),o.sequenceIndex=_,o.sequenceVisible=n.db.showSequenceNumbers();const a=function(t,e){$.bumpVerticalPos(10);const{startx:a,stopx:s,message:i}=e,n=r.e.splitBreaks(i).length,o=r.u.calculateTextDimensions(i,Y(C)),c=o.height/n;let l;e.height+=c,$.bumpVerticalPos(c);let d=o.height-10;const h=o.width;if(a===s){l=$.getVerticalPos()+d,C.rightAngles||(d+=C.boxMargin,l=$.getVerticalPos()+d),d+=30;const t=r.e.getMax(h/2,C.width/2);$.insert(a-t,$.getVerticalPos()-10+d,s+t,$.getVerticalPos()+30+d)}else d+=C.boxMargin,l=$.getVerticalPos()+d,$.insert(a,l-10,s,l);return $.bumpVerticalPos(d),e.height+=d,e.stopy=e.starty+e.height,$.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),l}(0,o);!function(t,e,a,r,s,i,n){function o(a,r){a.x<s[t.from].x?($.insert(e.stopx-r,e.starty,e.startx,e.stopy+a.height/2+C.noteMargin),e.stopx=e.stopx+r):($.insert(e.startx,e.starty,e.stopx+r,e.stopy+a.height/2+C.noteMargin),e.stopx=e.stopx-r)}if(i[t.to]==r){const e=s[t.to];o(e,"actor"==e.type?21:e.width/2+3),e.starty=a-e.height/2,$.bumpVerticalPos(e.height/2)}else if(n[t.from]==r){const r=s[t.from];C.mirrorActors&&function(a,r){a.x<s[t.to].x?($.insert(e.startx-r,e.starty,e.stopx,e.stopy+a.height/2+C.noteMargin),e.startx=e.startx+r):($.insert(e.stopx,e.starty,e.startx+r,e.stopy+a.height/2+C.noteMargin),e.startx=e.startx-r)}(r,"actor"==r.type?18:r.width/2),r.stopy=a-r.height/2,$.bumpVerticalPos(r.height/2)}else if(n[t.to]==r){const e=s[t.to];C.mirrorActors&&o(e,"actor"==e.type?21:e.width/2+3),e.stopy=a-e.height/2,$.bumpVerticalPos(e.height/2)}}(t,o,a,e,g,u,x),L.push({messageModel:o,lineStartY:a}),$.models.addMessage(o)}catch(c){r.l.error("error while drawing message",c)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(_+=k)})),r.l.debug("createdActors",u),r.l.debug("destroyedActors",x),F(p,g,m,!1),L.forEach((t=>function(t,e,a,s){const{startx:n,stopx:o,starty:c,message:l,type:d,sequenceIndex:h,sequenceVisible:p}=e,g=r.u.calculateTextDimensions(l,Y(C)),u=(0,i.e)();u.x=n,u.y=c+10,u.width=o-n,u.class="messageText",u.dy="1em",u.text=l,u.fontFamily=C.messageFontFamily,u.fontSize=C.messageFontSize,u.fontWeight=C.messageFontWeight,u.anchor=C.messageAlign,u.valign="center",u.textMargin=C.wrapPadding,u.tspan=!1,v(t,u);const x=g.width;let y;n===o?y=C.rightAngles?t.append("path").attr("d",`M ${n},${a} H ${n+r.e.getMax(C.width/2,x/2)} V ${a+25} H ${n}`):t.append("path").attr("d","M "+n+","+a+" C "+(n+60)+","+(a-10)+" "+(n+60)+","+(a+30)+" "+n+","+(a+20)):(y=t.append("line"),y.attr("x1",n),y.attr("y1",a),y.attr("x2",o),y.attr("y2",a)),d===s.db.LINETYPE.DOTTED||d===s.db.LINETYPE.DOTTED_CROSS||d===s.db.LINETYPE.DOTTED_POINT||d===s.db.LINETYPE.DOTTED_OPEN?(y.style("stroke-dasharray","3, 3"),y.attr("class","messageLine1")):y.attr("class","messageLine0");let m="";C.arrowMarkerAbsolute&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),y.attr("stroke-width",2),y.attr("stroke","none"),y.style("fill","none"),d!==s.db.LINETYPE.SOLID&&d!==s.db.LINETYPE.DOTTED||y.attr("marker-end","url("+m+"#arrowhead)"),d!==s.db.LINETYPE.SOLID_POINT&&d!==s.db.LINETYPE.DOTTED_POINT||y.attr("marker-end","url("+m+"#filled-head)"),d!==s.db.LINETYPE.SOLID_CROSS&&d!==s.db.LINETYPE.DOTTED_CROSS||y.attr("marker-end","url("+m+"#crosshead)"),(p||C.showSequenceNumbers)&&(y.attr("marker-start","url("+m+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",a+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))}(p,t.messageModel,t.lineStartY,n))),C.mirrorActors&&F(p,g,m,!0),I.forEach((t=>R.drawBackgroundRect(p,t))),M(p,g,m,C),$.models.boxes.forEach((function(t){t.height=$.getVerticalPos()-t.y,$.insert(t.x,t.y,t.x+t.width,t.height),t.startx=t.x,t.starty=t.y,t.stopx=t.startx+t.width,t.stopy=t.starty+t.height,t.stroke="rgb(0,0,0, 0.5)",R.drawBox(p,t,C)})),T&&$.bumpVerticalPos(C.boxMargin);const N=q(p,g,m,h),{bounds:A}=$.getBounds();let S=A.stopy-A.starty;S<N.maxHeight&&(S=N.maxHeight);let O=S+2*C.diagramMarginY;C.mirrorActors&&(O=O-C.boxMargin+C.bottomMarginAdj);let D=A.stopx-A.startx;D<N.maxWidth&&(D=N.maxWidth);const W=D+2*C.diagramMarginX;f&&p.append("text").text(f).attr("x",(A.stopx-A.startx)/2-2*C.diagramMarginX).attr("y",-25),(0,r.i)(p,O,W,C.useMaxWidth);const H=f?40:0;p.attr("viewBox",A.startx-C.diagramMarginX+" -"+(C.diagramMarginY+H)+" "+W+" "+(O+H)),r.l.debug("models:",$.models)}},styles:P,init:({wrap:t})=>{w.setWrap(t)}}},66893:(t,e,a)=>{a.d(e,{a:()=>n,b:()=>l,c:()=>c,d:()=>i,e:()=>h,f:()=>o,g:()=>d});var r=a(17967),s=a(28758);const i=(t,e)=>{const a=t.append("rect");if(a.attr("x",e.x),a.attr("y",e.y),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("width",e.width),a.attr("height",e.height),void 0!==e.rx&&a.attr("rx",e.rx),void 0!==e.ry&&a.attr("ry",e.ry),void 0!==e.attrs)for(const r in e.attrs)a.attr(r,e.attrs[r]);return void 0!==e.class&&a.attr("class",e.class),a},n=(t,e)=>{const a={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};i(t,a).lower()},o=(t,e)=>{const a=e.text.replace(s.G," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);const i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(a),r},c=(t,e,a,s)=>{const i=t.append("image");i.attr("x",e),i.attr("y",a);const n=(0,r.Nm)(s);i.attr("xlink:href",n)},l=(t,e,a,s)=>{const i=t.append("use");i.attr("x",e),i.attr("y",a);const n=(0,r.Nm)(s);i.attr("xlink:href",`#${n}`)},d=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),h=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/2661.122dc9a7.js b/assets/js/2661.122dc9a7.js new file mode 100644 index 0000000000..208cefef3b --- /dev/null +++ b/assets/js/2661.122dc9a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2661],{62661:(t,i,e)=>{e.d(i,{diagram:()=>d});var a=e(28758),n=e(64218),r=(e(27484),e(17967),e(27856),function(){var t=function(t,i,e,a){for(e=e||{},a=t.length;a--;e[t[a]]=i);return e},i=[1,3],e=[1,4],a=[1,5],n=[1,6],r=[1,7],s=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],l=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],o=[32,33,34],h=[2,7],c=[1,13],d=[1,17],u=[1,18],x=[1,19],g=[1,20],f=[1,21],y=[1,22],p=[1,23],q=[1,24],T=[1,25],A=[1,26],m=[1,27],_=[1,30],b=[1,31],S=[1,32],k=[1,33],F=[1,34],P=[1,35],v=[1,36],L=[1,37],C=[1,38],z=[1,39],E=[1,40],D=[1,41],I=[1,42],B=[1,57],w=[1,58],R=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],W={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(t,i,e,a,n,r,s){var l=r.length-1;switch(n){case 12:this.$=r[l].trim(),a.setDiagramTitle(this.$);break;case 13:this.$=r[l].trim(),a.setAccTitle(this.$);break;case 14:case 15:this.$=r[l].trim(),a.setAccDescription(this.$);break;case 16:a.addSection(r[l].substr(8)),this.$=r[l].substr(8);break;case 17:a.addPoint(r[l-3],r[l-1],r[l]);break;case 18:a.setXAxisLeftText(r[l-2]),a.setXAxisRightText(r[l]);break;case 19:r[l-1].text+=" \u27f6 ",a.setXAxisLeftText(r[l-1]);break;case 20:a.setXAxisLeftText(r[l]);break;case 21:a.setYAxisBottomText(r[l-2]),a.setYAxisTopText(r[l]);break;case 22:r[l-1].text+=" \u27f6 ",a.setYAxisBottomText(r[l-1]);break;case 23:a.setYAxisBottomText(r[l]);break;case 24:a.setQuadrant1Text(r[l]);break;case 25:a.setQuadrant2Text(r[l]);break;case 26:a.setQuadrant3Text(r[l]);break;case 27:a.setQuadrant4Text(r[l]);break;case 31:case 33:this.$={text:r[l],type:"text"};break;case 32:this.$={text:r[l-1].text+""+r[l],type:r[l-1].type};break;case 34:this.$={text:r[l],type:"markdown"};break;case 35:this.$=r[l];break;case 36:this.$=r[l-1]+""+r[l]}},table:[{3:1,4:2,5:i,6:e,32:a,33:n,34:r},{1:[3]},{3:8,4:2,5:i,6:e,32:a,33:n,34:r},{3:9,4:2,5:i,6:e,32:a,33:n,34:r},t(s,[2,4],{7:10}),t(l,[2,28]),t(l,[2,29]),t(l,[2,30]),{1:[2,1]},{1:[2,2]},t(o,h,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:c,13:d,15:u,17:x,19:g,20:f,25:y,27:p,28:q,29:T,30:A,31:m,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),t(s,[2,5]),{4:43,32:a,33:n,34:r},t(o,h,{10:14,11:15,12:16,21:28,35:29,9:44,5:c,13:d,15:u,17:x,19:g,20:f,25:y,27:p,28:q,29:T,30:A,31:m,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),t(o,[2,9]),t(o,[2,10]),t(o,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},t(o,[2,15]),t(o,[2,16]),{21:48,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:49,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:50,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:51,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:52,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{21:53,35:29,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I},{5:B,22:[1,54],35:56,36:55,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w},t(R,[2,31]),t(R,[2,33]),t(R,[2,34]),t(R,[2,37]),t(R,[2,38]),t(R,[2,39]),t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),t(R,[2,43]),t(R,[2,44]),t(R,[2,45]),t(R,[2,46]),t(R,[2,47]),t(s,[2,6]),t(o,[2,8]),t(o,[2,12]),t(o,[2,13]),t(o,[2,14]),t(o,[2,20],{36:55,35:56,5:B,26:[1,59],40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,23],{36:55,35:56,5:B,26:[1,60],40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,24],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,25],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,26],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,27],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),{23:[1,61]},t(R,[2,32]),t(R,[2,48]),t(R,[2,49]),t(R,[2,50]),t(o,[2,19],{35:29,21:62,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),t(o,[2,22],{35:29,21:63,37:_,38:b,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I}),{24:[1,64]},t(o,[2,18],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,21],{36:55,35:56,5:B,40:S,41:k,42:F,43:P,44:v,45:L,46:C,47:z,48:E,49:D,50:I,51:w}),t(o,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(t,i){if(!i.recoverable){var e=new Error(t);throw e.hash=i,e}this.trace(t)},parse:function(t){var i=this,e=[0],a=[],n=[null],r=[],s=this.table,l="",o=0,h=0,c=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(u.yy[x]=this.yy[x]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var g=d.yylloc;r.push(g);var f=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var y,p,q,T,A,m,_,b,S,k={};;){if(p=e[e.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null==y&&(S=void 0,"number"!=typeof(S=a.pop()||d.lex()||1)&&(S instanceof Array&&(S=(a=S).pop()),S=i.symbols_[S]||S),y=S),q=s[p]&&s[p][y]),void 0===q||!q.length||!q[0]){var F="";for(A in b=[],s[p])this.terminals_[A]&&A>2&&b.push("'"+this.terminals_[A]+"'");F=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+b.join(", ")+", got '"+(this.terminals_[y]||y)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==y?"end of input":"'"+(this.terminals_[y]||y)+"'"),this.parseError(F,{text:d.match,token:this.terminals_[y]||y,line:d.yylineno,loc:g,expected:b})}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+y);switch(q[0]){case 1:e.push(y),n.push(d.yytext),r.push(d.yylloc),e.push(q[1]),y=null,h=d.yyleng,l=d.yytext,o=d.yylineno,g=d.yylloc;break;case 2:if(m=this.productions_[q[1]][1],k.$=n[n.length-m],k._$={first_line:r[r.length-(m||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(m||1)].first_column,last_column:r[r.length-1].last_column},f&&(k._$.range=[r[r.length-(m||1)].range[0],r[r.length-1].range[1]]),void 0!==(T=this.performAction.apply(k,[l,h,o,u.yy,q[1],n,r].concat(c))))return T;m&&(e=e.slice(0,-1*m*2),n=n.slice(0,-1*m),r=r.slice(0,-1*m)),e.push(this.productions_[q[1]][0]),n.push(k.$),r.push(k._$),_=s[e[e.length-2]][e[e.length-1]],e.push(_);break;case 3:return!0}}return!0}},N={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===a.length?this.yylloc.first_column:0)+a[a.length-e.length].length-e[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var e,a,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,e,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((e=this._input.match(this.rules[n[r]]))&&(!i||e[0].length>i[0].length)){if(i=e,a=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,n[a]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,e,a){switch(e){case 0:case 1:case 3:break;case 2:return 32;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 22:case 24:case 28:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 23:this.begin("string");break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function U(){this.yy={}}return W.lexer=N,U.prototype=W,W.Parser=U,new U}());r.parser=r;const s=r,l=(0,a.D)();const o=(0,a.c)();function h(t){return(0,a.d)(t.trim(),o)}const c=new class{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var t,i,e,n,r,s,l,o,h,c,d,u,x,g,f,y,p,q;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:(null==(t=a.A.quadrantChart)?void 0:t.chartWidth)||500,chartWidth:(null==(i=a.A.quadrantChart)?void 0:i.chartHeight)||500,titlePadding:(null==(e=a.A.quadrantChart)?void 0:e.titlePadding)||10,titleFontSize:(null==(n=a.A.quadrantChart)?void 0:n.titleFontSize)||20,quadrantPadding:(null==(r=a.A.quadrantChart)?void 0:r.quadrantPadding)||5,xAxisLabelPadding:(null==(s=a.A.quadrantChart)?void 0:s.xAxisLabelPadding)||5,yAxisLabelPadding:(null==(l=a.A.quadrantChart)?void 0:l.yAxisLabelPadding)||5,xAxisLabelFontSize:(null==(o=a.A.quadrantChart)?void 0:o.xAxisLabelFontSize)||16,yAxisLabelFontSize:(null==(h=a.A.quadrantChart)?void 0:h.yAxisLabelFontSize)||16,quadrantLabelFontSize:(null==(c=a.A.quadrantChart)?void 0:c.quadrantLabelFontSize)||16,quadrantTextTopPadding:(null==(d=a.A.quadrantChart)?void 0:d.quadrantTextTopPadding)||5,pointTextPadding:(null==(u=a.A.quadrantChart)?void 0:u.pointTextPadding)||5,pointLabelFontSize:(null==(x=a.A.quadrantChart)?void 0:x.pointLabelFontSize)||12,pointRadius:(null==(g=a.A.quadrantChart)?void 0:g.pointRadius)||5,xAxisPosition:(null==(f=a.A.quadrantChart)?void 0:f.xAxisPosition)||"top",yAxisPosition:(null==(y=a.A.quadrantChart)?void 0:y.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:(null==(p=a.A.quadrantChart)?void 0:p.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:(null==(q=a.A.quadrantChart)?void 0:q.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:l.quadrant1Fill,quadrant2Fill:l.quadrant2Fill,quadrant3Fill:l.quadrant3Fill,quadrant4Fill:l.quadrant4Fill,quadrant1TextFill:l.quadrant1TextFill,quadrant2TextFill:l.quadrant2TextFill,quadrant3TextFill:l.quadrant3TextFill,quadrant4TextFill:l.quadrant4TextFill,quadrantPointFill:l.quadrantPointFill,quadrantPointTextFill:l.quadrantPointTextFill,quadrantXAxisTextFill:l.quadrantXAxisTextFill,quadrantYAxisTextFill:l.quadrantYAxisTextFill,quadrantTitleFill:l.quadrantTitleFill,quadrantInternalBorderStrokeFill:l.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:l.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),a.l.info("clear called")}setData(t){this.data={...this.data,...t}}addPoints(t){this.data.points=[...t,...this.data.points]}setConfig(t){a.l.trace("setConfig called with: ",t),this.config={...this.config,...t}}setThemeConfig(t){a.l.trace("setThemeConfig called with: ",t),this.themeConfig={...this.themeConfig,...t}}calculateSpace(t,i,e,a){const n=2*this.config.xAxisLabelPadding+this.config.xAxisLabelFontSize,r={top:"top"===t&&i?n:0,bottom:"bottom"===t&&i?n:0},s=2*this.config.yAxisLabelPadding+this.config.yAxisLabelFontSize,l={left:"left"===this.config.yAxisPosition&&e?s:0,right:"right"===this.config.yAxisPosition&&e?s:0},o=this.config.titleFontSize+2*this.config.titlePadding,h={top:a?o:0},c=this.config.quadrantPadding+l.left,d=this.config.quadrantPadding+r.top+h.top,u=this.config.chartWidth-2*this.config.quadrantPadding-l.left-l.right,x=this.config.chartHeight-2*this.config.quadrantPadding-r.top-r.bottom-h.top;return{xAxisSpace:r,yAxisSpace:l,titleSpace:h,quadrantSpace:{quadrantLeft:c,quadrantTop:d,quadrantWidth:u,quadrantHalfWidth:u/2,quadrantHeight:x,quadrantHalfHeight:x/2}}}getAxisLabels(t,i,e,a){const{quadrantSpace:n,titleSpace:r}=a,{quadrantHalfHeight:s,quadrantHeight:l,quadrantLeft:o,quadrantHalfWidth:h,quadrantTop:c,quadrantWidth:d}=n,u=Boolean(this.data.xAxisRightText),x=Boolean(this.data.yAxisTopText),g=[];return this.data.xAxisLeftText&&i&&g.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&i&&g.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:o+h+(u?h/2:0),y:"top"===t?this.config.xAxisLabelPadding+r.top:this.config.xAxisLabelPadding+c+l+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:u?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&e&&g.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+l-(x?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&e&&g.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:"left"===this.config.yAxisPosition?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+o+d+this.config.quadrantPadding,y:c+s-(x?s/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:x?"center":"left",horizontalPos:"top",rotation:-90}),g}getQuadrants(t){const{quadrantSpace:i}=t,{quadrantHalfHeight:e,quadrantLeft:a,quadrantHalfWidth:n,quadrantTop:r}=i,s=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:r,width:n,height:e,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:r,width:n,height:e,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a,y:r+e,width:n,height:e,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:a+n,y:r+e,width:n,height:e,fill:this.themeConfig.quadrant4Fill}];for(const l of s)l.text.x=l.x+l.width/2,0===this.data.points.length?(l.text.y=l.y+l.height/2,l.text.horizontalPos="middle"):(l.text.y=l.y+this.config.quadrantTextTopPadding,l.text.horizontalPos="top");return s}getQuadrantPoints(t){const{quadrantSpace:i}=t,{quadrantHeight:e,quadrantLeft:a,quadrantTop:r,quadrantWidth:s}=i,l=(0,n.BYU)().domain([0,1]).range([a,s+a]),o=(0,n.BYU)().domain([0,1]).range([e+r,r]);return this.data.points.map((t=>({x:l(t.x),y:o(t.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:t.text,fill:this.themeConfig.quadrantPointTextFill,x:l(t.x),y:o(t.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}})))}getBorders(t){const i=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:e}=t,{quadrantHalfHeight:a,quadrantHeight:n,quadrantLeft:r,quadrantHalfWidth:s,quadrantTop:l,quadrantWidth:o}=e;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l,x2:r+o+i,y2:l},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r+o,y1:l+i,x2:r+o,y2:l+n-i},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r-i,y1:l+n,x2:r+o+i,y2:l+n},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:r,y1:l+i,x2:r,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+s,y1:l+i,x2:r+s,y2:l+n-i},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:r+i,y1:l+a,x2:r+o-i,y2:l+a}]}getTitle(t){if(t)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const t=this.config.showXAxis&&!(!this.data.xAxisLeftText&&!this.data.xAxisRightText),i=this.config.showYAxis&&!(!this.data.yAxisTopText&&!this.data.yAxisBottomText),e=this.config.showTitle&&!!this.data.titleText,a=this.data.points.length>0?"bottom":this.config.xAxisPosition,n=this.calculateSpace(a,t,i,e);return{points:this.getQuadrantPoints(n),quadrants:this.getQuadrants(n),axisLabels:this.getAxisLabels(a,t,i,n),borderLines:this.getBorders(n),title:this.getTitle(e)}}};const d={parser:s,db:{setWidth:function(t){c.setConfig({chartWidth:t})},setHeight:function(t){c.setConfig({chartHeight:t})},setQuadrant1Text:function(t){c.setData({quadrant1Text:h(t.text)})},setQuadrant2Text:function(t){c.setData({quadrant2Text:h(t.text)})},setQuadrant3Text:function(t){c.setData({quadrant3Text:h(t.text)})},setQuadrant4Text:function(t){c.setData({quadrant4Text:h(t.text)})},setXAxisLeftText:function(t){c.setData({xAxisLeftText:h(t.text)})},setXAxisRightText:function(t){c.setData({xAxisRightText:h(t.text)})},setYAxisTopText:function(t){c.setData({yAxisTopText:h(t.text)})},setYAxisBottomText:function(t){c.setData({yAxisBottomText:h(t.text)})},addPoint:function(t,i,e){c.addPoints([{x:i,y:e,text:h(t.text)}])},getQuadrantData:function(){const t=(0,a.c)(),{themeVariables:i,quadrantChart:e}=t;return e&&c.setConfig(e),c.setThemeConfig({quadrant1Fill:i.quadrant1Fill,quadrant2Fill:i.quadrant2Fill,quadrant3Fill:i.quadrant3Fill,quadrant4Fill:i.quadrant4Fill,quadrant1TextFill:i.quadrant1TextFill,quadrant2TextFill:i.quadrant2TextFill,quadrant3TextFill:i.quadrant3TextFill,quadrant4TextFill:i.quadrant4TextFill,quadrantPointFill:i.quadrantPointFill,quadrantPointTextFill:i.quadrantPointTextFill,quadrantXAxisTextFill:i.quadrantXAxisTextFill,quadrantYAxisTextFill:i.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:i.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:i.quadrantInternalBorderStrokeFill,quadrantTitleFill:i.quadrantTitleFill}),c.setData({titleText:(0,a.r)()}),c.build()},clear:function(){c.clear(),(0,a.t)()},setAccTitle:a.s,getAccTitle:a.g,setDiagramTitle:a.q,getDiagramTitle:a.r,getAccDescription:a.a,setAccDescription:a.b},renderer:{draw:(t,i,e,r)=>{var s,l,o;function h(t){return"top"===t?"hanging":"middle"}function c(t){return"left"===t?"start":"middle"}function d(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}const u=(0,a.c)();a.l.debug("Rendering quadrant chart\n"+t);const x=u.securityLevel;let g;"sandbox"===x&&(g=(0,n.Ys)("#i"+i));const f=("sandbox"===x?(0,n.Ys)(g.nodes()[0].contentDocument.body):(0,n.Ys)("body")).select(`[id="${i}"]`),y=f.append("g").attr("class","main"),p=(null==(s=u.quadrantChart)?void 0:s.chartWidth)||500,q=(null==(l=u.quadrantChart)?void 0:l.chartHeight)||500;(0,a.i)(f,q,p,(null==(o=u.quadrantChart)?void 0:o.useMaxWidth)||!0),f.attr("viewBox","0 0 "+p+" "+q),r.db.setHeight(q),r.db.setWidth(p);const T=r.db.getQuadrantData(),A=y.append("g").attr("class","quadrants"),m=y.append("g").attr("class","border"),_=y.append("g").attr("class","data-points"),b=y.append("g").attr("class","labels"),S=y.append("g").attr("class","title");T.title&&S.append("text").attr("x",0).attr("y",0).attr("fill",T.title.fill).attr("font-size",T.title.fontSize).attr("dominant-baseline",h(T.title.horizontalPos)).attr("text-anchor",c(T.title.verticalPos)).attr("transform",d(T.title)).text(T.title.text),T.borderLines&&m.selectAll("line").data(T.borderLines).enter().append("line").attr("x1",(t=>t.x1)).attr("y1",(t=>t.y1)).attr("x2",(t=>t.x2)).attr("y2",(t=>t.y2)).style("stroke",(t=>t.strokeFill)).style("stroke-width",(t=>t.strokeWidth));const k=A.selectAll("g.quadrant").data(T.quadrants).enter().append("g").attr("class","quadrant");k.append("rect").attr("x",(t=>t.x)).attr("y",(t=>t.y)).attr("width",(t=>t.width)).attr("height",(t=>t.height)).attr("fill",(t=>t.fill)),k.append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text))).text((t=>t.text.text));b.selectAll("g.label").data(T.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text((t=>t.text)).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>h(t.horizontalPos))).attr("text-anchor",(t=>c(t.verticalPos))).attr("transform",(t=>d(t)));const F=_.selectAll("g.data-point").data(T.points).enter().append("g").attr("class","data-point");F.append("circle").attr("cx",(t=>t.x)).attr("cy",(t=>t.y)).attr("r",(t=>t.radius)).attr("fill",(t=>t.fill)),F.append("text").attr("x",0).attr("y",0).text((t=>t.text.text)).attr("fill",(t=>t.text.fill)).attr("font-size",(t=>t.text.fontSize)).attr("dominant-baseline",(t=>h(t.text.horizontalPos))).attr("text-anchor",(t=>c(t.text.verticalPos))).attr("transform",(t=>d(t.text)))}},styles:()=>""}}}]); \ No newline at end of file diff --git a/assets/js/2689.61fc2af9.js b/assets/js/2689.61fc2af9.js new file mode 100644 index 0000000000..0b7f340b8c --- /dev/null +++ b/assets/js/2689.61fc2af9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2689],{42689:(t,e,i)=>{i.d(e,{diagram:()=>d});var n=i(28758),s=i(64218),r=(i(27484),i(17967),i(27856),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],s=[1,6],r=[1,10,12,14,16,18,19,20,21,22],l=[2,4],a=[1,5,10,12,14,16,18,19,20,21,22],c=[20,21,22],o=[2,7],h=[1,12],u=[1,13],y=[1,14],p=[1,15],d=[1,16],g=[1,17],_={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,e,i,n,s,r,l){var a=r.length-1;switch(s){case 3:n.setShowData(!0);break;case 6:this.$=r[a-1];break;case 8:n.addSection(r[a-1],n.cleanupValue(r[a]));break;case 9:this.$=r[a].trim(),n.setDiagramTitle(this.$);break;case 10:this.$=r[a].trim(),n.setAccTitle(this.$);break;case 11:case 12:this.$=r[a].trim(),n.setAccDescription(this.$);break;case 13:n.addSection(r[a].substr(8)),this.$=r[a].substr(8)}},table:[{3:1,4:2,5:e,20:i,21:n,22:s},{1:[3]},{3:7,4:2,5:e,20:i,21:n,22:s},t(r,l,{6:8,7:[1,9]}),t(a,[2,14]),t(a,[2,15]),t(a,[2,16]),{1:[2,1]},t(c,o,{8:10,9:11,1:[2,2],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,l,{6:18}),t(r,[2,5]),{4:19,20:i,21:n,22:s},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},t(c,[2,12]),t(c,[2,13]),t(c,o,{8:10,9:11,1:[2,3],10:h,12:u,14:y,16:p,18:d,19:g}),t(r,[2,6]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11])],defaultActions:{7:[2,1]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],s=[null],r=[],l=this.table,a="",c=0,o=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(y.yy[p]=this.yy[p]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var g=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,f,m,b,k,x,v,S,w,$={};;){if(f=i[i.length-1],this.defaultActions[f]?m=this.defaultActions[f]:(null==_&&(w=void 0,"number"!=typeof(w=n.pop()||u.lex()||1)&&(w instanceof Array&&(w=(n=w).pop()),w=e.symbols_[w]||w),_=w),m=l[f]&&l[f][_]),void 0===m||!m.length||!m[0]){var E="";for(k in S=[],l[f])this.terminals_[k]&&k>2&&S.push("'"+this.terminals_[k]+"'");E=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:u.match,token:this.terminals_[_]||_,line:u.yylineno,loc:d,expected:S})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+_);switch(m[0]){case 1:i.push(_),s.push(u.yytext),r.push(u.yylloc),i.push(m[1]),_=null,o=u.yyleng,a=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(x=this.productions_[m[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[a,o,c,y.yy,m[1],s,r].concat(h))))return b;x&&(i=i.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),i.push(this.productions_[m[1]][0]),s.push($.$),r.push($._$),v=l[i[i.length-2]][i[i.length-1]],i.push(v);break;case 3:return!0}}return!0}},f={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((i=this._input.match(this.rules[s[r]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,n){switch(i){case 0:case 1:case 3:case 4:break;case 2:return 20;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};function m(){this.yy={}}return _.lexer=f,m.prototype=_,_.Parser=m,new m}());r.parser=r;const l=r,a=n.A.pie,c={},o=!1;let h=c,u=o;const y=structuredClone(a),p={getConfig:()=>structuredClone(y),clear:()=>{h=structuredClone(c),u=o,(0,n.t)()},setDiagramTitle:n.q,getDiagramTitle:n.r,setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addSection:(t,e)=>{t=(0,n.d)(t,(0,n.c)()),void 0===h[t]&&(h[t]=e,n.l.debug(`added new section: ${t}, with value: ${e}`))},getSections:()=>h,cleanupValue:t=>(":"===t.substring(0,1)&&(t=t.substring(1).trim()),Number(t.trim())),setShowData:t=>{u=t},getShowData:()=>u},d={parser:l,db:p,renderer:{draw:(t,e,i,r)=>{n.l.debug("rendering pie chart\n"+t);const l=r.db,a=(0,n.c)(),c=(0,n.B)(l.getConfig(),a.pie),o=18,h=450,u=(0,n.z)(e),y=u.append("g"),p=l.getSections();y.attr("transform","translate(225,225)");const{themeVariables:d}=a;let[g]=(0,n.C)(d.pieOuterStrokeWidth);g??(g=2);const _=c.textPosition,f=Math.min(450,h)/2-40,m=(0,s.Nb1)().innerRadius(0).outerRadius(f),b=(0,s.Nb1)().innerRadius(f*_).outerRadius(f*_);y.append("circle").attr("cx",0).attr("cy",0).attr("r",f+g/2).attr("class","pieOuterCircle");const k=(t=>{const e=Object.entries(t).map((t=>({label:t[0],value:t[1]}))).sort(((t,e)=>e.value-t.value));return(0,s.ve8)().value((t=>t.value))(e)})(p),x=[d.pie1,d.pie2,d.pie3,d.pie4,d.pie5,d.pie6,d.pie7,d.pie8,d.pie9,d.pie10,d.pie11,d.pie12],v=(0,s.PKp)(x);y.selectAll("mySlices").data(k).enter().append("path").attr("d",m).attr("fill",(t=>v(t.data.label))).attr("class","pieCircle");let S=0;Object.keys(p).forEach((t=>{S+=p[t]})),y.selectAll("mySlices").data(k).enter().append("text").text((t=>(t.data.value/S*100).toFixed(0)+"%")).attr("transform",(t=>"translate("+b.centroid(t)+")")).style("text-anchor","middle").attr("class","slice"),y.append("text").text(l.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const w=y.selectAll(".legend").data(v.domain()).enter().append("g").attr("class","legend").attr("transform",((t,e)=>"translate(216,"+(22*e-22*v.domain().length/2)+")"));w.append("rect").attr("width",o).attr("height",o).style("fill",v).style("stroke",v),w.data(k).append("text").attr("x",22).attr("y",14).text((t=>{const{label:e,value:i}=t.data;return l.getShowData()?`${e} [${i}]`:e}));const $=512+Math.max(...w.selectAll("text").nodes().map((t=>(null==t?void 0:t.getBoundingClientRect().width)??0)));u.attr("viewBox",`0 0 ${$} 450`),(0,n.i)(u,h,$,c.useMaxWidth)}},styles:t=>`\n .pieCircle{\n stroke: ${t.pieStrokeColor};\n stroke-width : ${t.pieStrokeWidth};\n opacity : ${t.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${t.pieOuterStrokeColor};\n stroke-width: ${t.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${t.pieTitleTextSize};\n fill: ${t.pieTitleTextColor};\n font-family: ${t.fontFamily};\n }\n .slice {\n font-family: ${t.fontFamily};\n fill: ${t.pieSectionTextColor};\n font-size:${t.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${t.pieLegendTextColor};\n font-family: ${t.fontFamily};\n font-size: ${t.pieLegendTextSize};\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/2781f0ad.5961fd92.js b/assets/js/2781f0ad.5961fd92.js new file mode 100644 index 0000000000..58acad292b --- /dev/null +++ b/assets/js/2781f0ad.5961fd92.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3787],{39483:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>t,toc:()=>d});var r=s(85893),a=s(11151);const i={sidebar_position:2,title:"Advanced model",description:"An advanced model using consumer systems and two installations"},l="Advanced model example",t={id:"about/modelling/examples/advanced",title:"Advanced model",description:"An advanced model using consumer systems and two installations",source:"@site/docs/about/modelling/examples/advanced.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/advanced",permalink:"/ecalc/docs/about/modelling/examples/advanced",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/advanced.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Advanced model",description:"An advanced model using consumer systems and two installations"},sidebar:"about",previous:{title:"Simple model",permalink:"/ecalc/docs/about/modelling/examples/simple"},next:{title:"Drogon model",permalink:"/ecalc/docs/about/modelling/examples/drogon"}},o={},d=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"MODELS",id:"models",level:2},{value:"VARIABLES",id:"variables",level:2},{value:"INSTALLATIONS",id:"installations",level:2},{value:"Installation A",id:"installation-a",level:3},{value:"Installation B",id:"installation-b",level:3},{value:"ENERGY_USAGE_MODEL",id:"energy_usage_model",level:2},{value:"Full eCalc YAML model",id:"full-ecalc-yaml-model",level:2},{value:"Input files",id:"input-files",level:3}];function E(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"advanced-model-example",children:"Advanced model example"}),"\n",(0,r.jsxs)(n.p,{children:["This is a model very similar to ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/simple",children:"Simple example"}),". The main difference is the use of more advanced\nenergy usage models and consumer systems, and the addition of a second installation."]}),"\n",(0,r.jsxs)(n.p,{children:["Both installations exports oil (",(0,r.jsx)(n.code,{children:"OIL_PROD"}),") and gas (",(0,r.jsx)(n.code,{children:"GAS_PROD"}),").\nThe installations emits CO",(0,r.jsx)("sub",{children:"2"})," and CH",(0,r.jsx)("sub",{children:"4"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The following is an example with one installation called ",(0,r.jsx)(n.code,{children:"Installation A"})," and ",(0,r.jsx)(n.code,{children:"Installation B"}),"."]}),"\n",(0,r.jsx)(n.mermaid,{value:"graph TD;\n Asset(Asset) --\x3e A(Installation A);\n A(Installation A) --\x3e AA(Flare A);\n A --\x3e AD(Generator set A);\n AD --\x3e AE(Base production load A);\n AD --\x3e AF(Gas export compressor A);\n AD --\x3e AG(Produced water reinjection pump A);\n AD --\x3e AH(Sea water injection pump A);\n \n Asset --\x3e B(Installation B);\n B --\x3e BA(Generator set B);\n B --\x3e BD(Gas export compressor B);\n BA --\x3e BC(Base production load B);\n B --\x3e BB(Flare B);\n style A stroke:red;\n style B stroke:red;\n style BC stroke:blue;\n style AE stroke:blue;\n style AF stroke:blue;\n style AG stroke:blue;\n style AH stroke:blue;"}),"\n",(0,r.jsx)(n.p,{children:"The results of a performed characterization of the equipment are listed below:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Consumer"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Generator set A"}),(0,r.jsx)(n.td,{children:"Generator set"}),(0,r.jsx)(n.td,{children:"Variable fuel consumer with electricity to fuel function"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Base production load A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Production base load varying depending on a binary condition"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gas export compressor A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on gas sales rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Produced water reinjection pump A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Sea water injection pump A"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on a complex combination on water injection rate and water production rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Flare A"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsx)(n.td,{children:"Flare A"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Generator set B"}),(0,r.jsx)(n.td,{children:"Generator set"}),(0,r.jsx)(n.td,{children:"Variable fuel consumption with electricity to fuel function"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Base production load B"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Production base load at 7.6 MW"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gas export compressor B"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsx)(n.td,{children:"Variable fuel consumption depending on gas sales rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Flare B"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsx)(n.td,{children:"Flare B"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"yaml-model-overview",children:"YAML model overview"}),"\n",(0,r.jsx)(n.p,{children:"The YAML model consist of these main components:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Time series inputs - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Facility characterization input - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,r.jsxs)(n.li,{children:["Fuel input - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Model specifications - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,r.jsxs)(n.li,{children:["Model variables - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Installation topology - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The YAML setup file looks like this:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nVARIABLES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.p,{children:"We will now replace the placeholders for each of the main keywords above."}),"\n",(0,r.jsx)(n.h2,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,r.jsxs)(n.p,{children:["The reservoir variables, in this case, are found in a CSV (Comma separated file) ",(0,r.jsx)(n.code,{children:"production_data.csv"}),".\nWe give the time-series data a name that can be referenced as variables elsewhere in the form ",(0,r.jsx)(n.code,{children:"<NAME>:<NAME OF COLUMN>"}),".\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," for further details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n TYPE: DEFAULT\n FILE: base_profile.csv\n"})}),"\n",(0,r.jsx)(n.h2,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,r.jsxs)(n.p,{children:["We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets,\ntabulated/sampled models and pump charts. See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," for further details."]}),"\n",(0,r.jsxs)(n.p,{children:["Here we define a tabulated genset, a sampled compressor, and a single speed pump chart.\nNote that more complicated energy models are defined under the ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"}),"-keyword."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: gasexp\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,r.jsx)(n.h2,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,r.jsxs)(n.p,{children:["In this example there are two ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," - ",(0,r.jsx)(n.code,{children:"fuel_gas"})," and ",(0,r.jsx)(n.code,{children:"bad_fuel_gas"}),".\nThese are used for Installation A and Installation B respectively.\nHere we also define emissions in CO",(0,r.jsx)("sub",{children:"2"})," and CH",(0,r.jsx)("sub",{children:"4"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.20 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n - NAME: bad_fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 5.0 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n"})}),"\n",(0,r.jsx)(n.h2,{id:"models",children:"MODELS"}),"\n",(0,r.jsxs)(n.p,{children:["This advanced example requires some energy usage models to be defined under the model section. See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," for details."]}),"\n",(0,r.jsx)(n.p,{children:"Here we specify:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Compressor chart based on design points"}),"\n",(0,r.jsx)(n.li,{children:"Compressor chart based on chart data"}),"\n",(0,r.jsx)(n.li,{children:"Medium density fluid"}),"\n",(0,r.jsx)(n.li,{children:"Gas turbine"}),"\n",(0,r.jsx)(n.li,{children:"Simplified compressor train model"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 10000\n DESIGN_HEAD: 80\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M # M or KJ_PER_KG\n EFFICIENCY: FRACTION\n CURVES:\n FILE: compressor_chart.csv\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # [MJ/Sm3]\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," for further details."]}),"\n",(0,r.jsx)(n.h2,{id:"variables",children:"VARIABLES"}),"\n",(0,r.jsxs)(n.p,{children:["To run the model it is recommended to specify ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),",\ninstead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model\nby allowing descriptive variable names and avoid duplications."]}),"\n",(0,r.jsx)(n.p,{children:"For our model, we specify the following variables:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"VARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n water_injection_rate:\n VALUE: SIM;WATER_INJ\n gas_export_condition:\n VALUE: SIM;GAS_PROD > 0\n base_production_load_mw:\n VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)\n water_injection_condition:\n VALUE: SIM;WATER_PROD >0\n flare_a_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 5000\n 2030-01-01:\n VALUE: 2000\n flare_b_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 10000\n 2030-01-01:\n VALUE: 7000\n"})}),"\n",(0,r.jsxs)(n.p,{children:["We reference the ",(0,r.jsx)(n.a,{href:"#time_series",children:"TIME_SERIES"})," ",(0,r.jsx)(n.code,{children:"SIM"})," using the column names from the CSV file."]}),"\n",(0,r.jsxs)(n.admonition,{type:"tip",children:[(0,r.jsx)(n.p,{children:"You can use boolean condition such as shown in base_production_load_mw and time varying variables such as shown in\nflare_a_fuel_rate_sm3_day and flare_b_fuel_rate_sm3_day to write simpler models with less duplicated code."}),(0,r.jsx)(n.p,{children:"The base_production_load_mw adds another 4.1 MW when the gas lift injection rate is positive."}),(0,r.jsx)(n.p,{children:"The flare rate changes in year 2030."})]}),"\n",(0,r.jsx)(n.h2,{id:"installations",children:"INSTALLATIONS"}),"\n",(0,r.jsx)(n.p,{children:"An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form\nof generatorsets (with electric sub-consumers), and direct fuel consumers."}),"\n",(0,r.jsx)(n.p,{children:"We specify:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"NAME"}),": the installation name"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"HCEXPORT"}),": Hydrocarbon export in Sm",(0,r.jsx)("sup",{children:"3"}),"/day by referring to the variable $var.hydrocarbon_export_sm3_per_day specified under ",(0,r.jsx)(n.a,{href:"#variables",children:"VARIABLES"})," above."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"FUEl"}),": Default fuel specified in ",(0,r.jsx)(n.a,{href:"#fuel_types",children:"FUEL_TYPES"})," above. Note the different fuels used by the two installations."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"CATEGORY"}),": FIXED (installation) category is used to group result data for reporting. See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," for details."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"installation-a",children:"Installation A"}),"\n",(0,r.jsxs)(n.p,{children:["There is one generator set, ",(0,r.jsx)(n.code,{children:"Generator set A"}),". This has a power to fuel function defined in\n",(0,r.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," with the name ",(0,r.jsx)(n.code,{children:"genset"}),". Further, the consumers getting\npower from the generator set are ",(0,r.jsx)(n.em,{children:"Base production load"}),", ",(0,r.jsx)(n.em,{children:"Gas injection compressor"}),", ",(0,r.jsx)(n.em,{children:"Produced water reinjection pump"}),"\nand ",(0,r.jsx)(n.em,{children:"Sea-water injection pump"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The direct fuel consumers are ",(0,r.jsx)(n.strong,{children:"Flare"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The setup for ",(0,r.jsx)(n.code,{children:"Installation A"})," thus becomes:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set A\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL: <placeholder>\n FUELCONSUMERS:\n - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL: <placeholder>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"installation-b",children:"Installation B"}),"\n",(0,r.jsxs)(n.p,{children:["There is one generator set, ",(0,r.jsx)(n.code,{children:"Generator set B"}),". This has a power to fuel function defined in\n",(0,r.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," with the name ",(0,r.jsx)(n.code,{children:"genset"}),". Further, the consumer getting\npower from the generator set is ",(0,r.jsx)(n.em,{children:"Base production load"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The direct fuel consumers are ",(0,r.jsx)(n.strong,{children:"Flare"})," and ",(0,r.jsx)(n.strong,{children:"Gas export compressor"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The setup for ",(0,r.jsx)(n.code,{children:"Installation B"})," thus becomes:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set B\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL: <placeholder>\n FUELCONSUMERS:\n - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL: <placeholder>\n - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL: <placeholder>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"energy_usage_model",children:"ENERGY_USAGE_MODEL"}),"\n",(0,r.jsxs)(n.p,{children:["We will now fill in the final placeholders with detailed ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"s."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Base production loads A"})," has a load of 7.6 MW with additional 4.1 MW when the field gas injection rate is positive:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: $var.base_production_load_mw\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Gas export compressor system A"})," is represented by a consumer system of two simplified compressor train models.\nThe system has defined the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_export_rate_sm3_per_day"})," and will run two different\nrate distributions between these two compressor trains. It will first send all rate to the first compressor train\nand nothing to the second ",(0,r.jsx)(n.code,{children:"RATE_FRACTIONS: [1.0, 0.0]"})," and then it will run the same input while distributing equal\nrates to the two compressor trains ",(0,r.jsx)(n.code,{children:"RATE_FRACTIONS: [0.5, 0.5]"}),". The final result will be composed of the first\nsetting that returns a valid result for the compressors.\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",children:"COMPRESSOR_SYSTEM"})," for further details."]}),"\n",(0,r.jsx)(n.p,{children:"The model compressor model is defined:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n - NAME: train2_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1.0, 0.0]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Water injection pump system A"})," is variable and its energy function is dependent on the field's water\ninjection rate (",(0,r.jsx)(n.code,{children:"WATER_INJ"}),") that is set in the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"water_injection_rate"})," as ",(0,r.jsx)(n.code,{children:"SIM;WATER_INJ"}),".\nThe pump only runs when the variables ",(0,r.jsx)(n.a,{href:"#variables",children:"water_injection_condition"})," evaluates to true as ",(0,r.jsx)(n.code,{children:"SIM;WATER_PROD > 0"}),".\nThis is when the water injection rate is positive. Fluid density, suction pressure and discharge pressure\nis also defined."]}),"\n",(0,r.jsxs)(n.p,{children:["This PUMP_SYSTEM behaves much the same as the COMPRESSOR_SYSTEM above.\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump_system-energy-usage-model",children:"PUMP_SYSTEM"})," for further details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: pump_chart\n - NAME: pump2\n CHART: pump_chart\n - NAME: pump3\n CHART: pump_chart\n - NAME: pump4\n CHART: pump_chart\n FLUID_DENSITY: 1026\n TOTAL_SYSTEM_RATE: $var.water_injection_rate\n CONDITION: $var.water_injection_condition\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0]\n SUCTION_PRESSURES: [3, 3, 3, 3]\n DISCHARGE_PRESSURES: [200, 200, 200, 200]\n CROSSOVER: [2, 0, 0, 0]\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Single pump A"})," has an energy function that is dependent on the seawater injection rate, same as the system above.\nIt uses the pump_chart defined in ",(0,r.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," above."]}),"\n",(0,r.jsx)(n.p,{children:"The pump model is then defined:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.water_injection_condition\n ENERGYFUNCTION: pump_chart\n RATE: 5000\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1026\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Flare A"})," is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"flare_a_fuel_rate_sm3_day"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The model becomes:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_a_fuel_rate_sm3_day\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Base production loads B"})," has a load of 7.6 :"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 7.6\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Flare B"})," is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"flare_a_fuel_rate_sm3_day"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"The model becomes:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_b_fuel_rate_sm3_day\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"Gas export compressors B"})," is a variable fuel consumer whose energy function depends on the field gas production rate (",(0,r.jsx)(n.code,{children:"GAS_PROD"}),") defined\nin the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_export_rate_sm3_per_day"})," as ",(0,r.jsx)(n.code,{children:"SIM;GAS_PROD"}),", and put to the condition ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_export_condition"})," as ",(0,r.jsx)(n.code,{children:"SIM;GAS_PROD > 0"})]}),"\n",(0,r.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: gasexp\n CONDITION: $var.gas_export_condition\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,r.jsx)(n.h2,{id:"full-ecalc-yaml-model",children:"Full eCalc YAML model"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n TYPE: DEFAULT\n FILE: base_profile.csv\n\nFACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: gasexp\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n\nFUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.20 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n - NAME: bad_fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 5.0 #kg/Sm3\n - NAME: CH4\n FACTOR: 0.01 #kg/Sm3\n\nMODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 10000\n DESIGN_HEAD: 80\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M # M or KJ_PER_KG\n EFFICIENCY: FRACTION\n CURVES:\n FILE: compressor_chart.csv\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n\nVARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n water_injection_rate:\n VALUE: SIM;WATER_INJ\n gas_export_condition:\n VALUE: SIM;GAS_PROD > 0\n base_production_load_mw:\n VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)\n water_injection_condition:\n VALUE: SIM;WATER_PROD >0\n flare_a_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 5000\n 2030-01-01:\n VALUE: 2000\n flare_b_fuel_rate_sm3_day:\n 2020-06-01:\n VALUE: 10000\n 2030-01-01:\n VALUE: 7000\n\nINSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set A\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads A\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: $var.base_production_load_mw\n - NAME: Gas export compressors system A\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n - NAME: train2_A\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1.0, 0.0]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 120\n - NAME: Water injection pump system A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: pump_chart\n - NAME: pump2\n CHART: pump_chart\n - NAME: pump3\n CHART: pump_chart\n - NAME: pump4\n CHART: pump_chart\n FLUID_DENSITY: 1026\n TOTAL_SYSTEM_RATE: $var.water_injection_rate\n CONDITION: $var.water_injection_condition\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0]\n SUCTION_PRESSURES: [3, 3, 3, 3]\n DISCHARGE_PRESSURES: [200, 200, 200, 200]\n CROSSOVER: [2, 0, 0, 0]\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - NAME: Single pump A\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.water_injection_condition\n ENERGYFUNCTION: pump_chart\n RATE: 5000\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1026\n FUELCONSUMERS:\n - NAME: Flare A\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_a_fuel_rate_sm3_day\n\n - NAME: Installation B\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: bad_fuel_gas\n CATEGORY: FIXED\n GENERATORSETS:\n - NAME: Generator set B\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Fixed production loads B\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 7.6\n FUELCONSUMERS:\n - NAME: Flare B\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_b_fuel_rate_sm3_day\n - NAME: Gas export compressors B\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: gasexp\n CONDITION: $var.gas_export_condition\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 20\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,r.jsx)(n.h3,{id:"input-files",children:"Input files"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="compressor_chart.csv"',children:"RATE, HEAD, EFFICIENCY, SPEED\n# [m3/h], [m], [frac], [rpm]\n3000, 8500, 0.72, 7500\n3500, 8000, 0.75, 7500\n4000, 7500, 0.74, 7500\n4500, 6500, 0.70, 7500\n4100, 16500, 0.72, 10500\n4600, 16000, 0.73, 10500\n5000, 15500, 0.74, 10500\n5500, 14500, 0.74, 10500\n6000, 13500, 0.72, 10500\n6500, 12000, 0.70, 10500\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="compressor_sampled.csv"',children:"RATE, FUEL\n0, 0\n0.01, 100\n10, 500\n20, 1200\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="genset.csv"',children:"POWER, FUEL\n# [MW], [Sm3/d]\n0, 0\n0.1, 75000\n10, 80000\n20, 100000\n50, 500000\n100, 1000000\n\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="pump_chart.csv"',children:"RATE, HEAD, EFFICIENCY, SPEED\n# [m3/h], [m], [%], [rpm] \n250, 2350, 50, 10000\n300, 2300, 55, 10000\n350, 2250, 60, 10000\n400, 2200, 70, 10000\n450, 2150, 75, 10000\n500, 2100, 80, 10000\n550, 2050, 75, 10000\n600, 2000, 70, 10000\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="base_profile.csv"',children:"DATE, OIL_PROD, WATER_PROD, GAS_PROD, WATER_INJ, GAS_LIFT\n01.01.2020, 1000, 20000, 4000000, 30000, 1200000\n01.01.2021, 1000, 20000, 4000000, 30000, 1200000\n01.01.2022, 1000, 20000, 4000000, 30000, 1200000\n01.01.2023, 2500, 21000, 4000000, 30000, 1200000\n01.01.2024, 3000, 22000, 4500000, 28000, 1300000\n01.01.2025, 3500, 23000, 5000000, 26000, 1350000\n01.01.2026, 4000, 24000, 5500000, 25000, 1400000\n01.01.2027, 4000, 25000, 6000000, 24000, 1400000\n01.01.2028, 4000, 20000, 6000000, 23000, 1400000\n01.01.2029, 5000, 20000, 5500000, 22000, 1350000\n01.01.2030, 9000, 20000, 5000000, 21000, 1300000\n01.01.2031, 5000, 20000, 3000000, 22000, 1300000\n01.01.2032, 4000, 22100, 3000000, 23000, 2000000\n01.01.2033, 4000, 22100, 3000000, 23000, 2000000\n01.01.2034, 1200, 25000, 1000000, 21000, 2000000\n01.01.2035, 1100, 25000, 1000000, 20000, 1500000\n01.01.2036, 1000, 22000, 500000, 18000, 1400000\n01.01.2037, 900, 20000, 500000, 17000, 1400000\n01.01.2038, 800, 18000, 500000, 17000, 1400000\n01.01.2039, 700, 18000, 200000, 17000, 1400000\n01.01.2040, 600, 10000, 200000, 15000, 1400000\n01.01.2041, 0, 0, 0, 0, 0\n"})})]})}function c(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(E,{...e})}):E(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>l});var r=s(67294);const a={},i=r.createContext(a);function l(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/29367e59.5e394ff1.js b/assets/js/29367e59.5e394ff1.js new file mode 100644 index 0000000000..229bf2c854 --- /dev/null +++ b/assets/js/29367e59.5e394ff1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3173],{33918:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>E});var r=n(85893),o=n(11151);const s={},c="INFLUENCE_TIME_VECTOR",i={id:"about/references/keywords/INFLUENCE_TIME_VECTOR",title:"INFLUENCE_TIME_VECTOR",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN"},next:{title:"INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE"}},a={},E=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"influence_time_vector",children:"INFLUENCE_TIME_VECTOR"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /\n",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})]}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(t.p,{children:"Determines if the time steps in this input source will contribute to the global time vector."}),"\n",(0,r.jsxs)(t.p,{children:["If not specified, this will be defaulted to ",(0,r.jsx)(t.code,{children:"TRUE"}),".\nIt is a requirement that at least one time vector has an ",(0,r.jsx)(t.code,{children:"INFLUENCE_TIME_VECTOR"})," of ",(0,r.jsx)(t.code,{children:"TRUE"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-yaml",children:"\nINFLUENCE_TIME_VECTOR: <True/False>\n"})}),"\n",(0,r.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,r.jsxs)(t.p,{children:["See the ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,r.jsx)(t.code,{children:"time_series_format"}),"."]})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>c});var r=n(67294);const o={},s=r.createContext(o);function c(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/295.c0a028c4.js b/assets/js/295.c0a028c4.js new file mode 100644 index 0000000000..ecd0b0569a --- /dev/null +++ b/assets/js/295.c0a028c4.js @@ -0,0 +1,1242 @@ +"use strict"; +exports.id = 295; +exports.ids = [295]; +exports.modules = { + +/***/ 70295: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7201); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 20, 21], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 16], $V7 = [1, 17]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "timeline": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "period_statement": 18, "event_statement": 19, "period": 20, "event": 21, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "timeline", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 20: "period", 21: "event" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 1], [18, 1], [19, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + this.$ = []; + break; + case 3: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 4: + case 5: + this.$ = $$[$0]; + break; + case 6: + case 7: + this.$ = []; + break; + case 8: + yy.getCommonDb().setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 9: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccTitle(this.$); + break; + case 10: + case 11: + this.$ = $$[$0].trim(); + yy.getCommonDb().setAccDescription(this.$); + break; + case 12: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 15: + yy.addTask($$[$0], 0, ""); + this.$ = $$[$0]; + break; + case 16: + yy.addEvent($$[$0].substr(2)); + this.$ = $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 18, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), { 13: [1, 19] }, { 15: [1, 20] }, o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 4]), o($V0, [2, 9]), o($V0, [2, 10])], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + return 10; + case 3: + break; + case 4: + break; + case 5: + return 4; + case 6: + return 11; + case 7: + this.begin("acc_title"); + return 12; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.begin("acc_descr"); + return 14; + case 10: + this.popState(); + return "acc_descr_value"; + case 11: + this.begin("acc_descr_multiline"); + break; + case 12: + this.popState(); + break; + case 13: + return "acc_descr_multiline_value"; + case 14: + return 17; + case 15: + return 21; + case 16: + return 20; + case 17: + return 6; + case 18: + return "INVALID"; + } + }, + rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:timeline\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?::\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +let currentTaskId = 0; +const sections = []; +const tasks = []; +const rawTasks = []; +const getCommonDb = () => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.I; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const addTask = function(period, length, event) { + const rawTask = { + id: currentTaskId++, + section: currentSection, + type: currentSection, + task: period, + score: length ? length : 0, + //if event is defined, then add it the events array + events: event ? [event] : [] + }; + rawTasks.push(rawTask); +}; +const addEvent = function(event) { + const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); + currentTask.events.push(event); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const timelineDb = { + clear, + getCommonDb, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + addEvent +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addEvent, + addSection, + addTask, + addTaskOrg, + clear, + default: timelineDb, + getCommonDb, + getSections, + getTasks +}, Symbol.toStringTag, { value: "Module" })); +const MAX_SECTIONS = 12; +const drawRect = function(elem, rectData) { + const rectElem = elem.append("rect"); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.y); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", rectData.width); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (rectData.class !== void 0) { + rectElem.attr("class", rectData.class); + } + return rectElem; +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + const nText = textData.text.replace(/<br\s*\/?>/gi, " "); + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + const span = textElem.append("tspan"); + span.attr("x", textData.x + textData.textMargin * 2); + span.text(nText); + return textElem; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf) { + const g = elem.append("g"); + const rect = getNoteRect(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf) { + const center = task.x + conf.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = getNoteRect(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf.width; + rect.height = conf.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + task.x + 14; + _drawTextCandidateFunc(conf)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds) { + const rectElem = drawRect(elem, { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + class: "rect" + }); + rectElem.lower(); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + "text-anchor": "start", + width: 100, + height: 100, + textMargin: 0, + rx: 0, + ry: 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) { + const { taskFontSize, taskFontFamily } = conf; + const lines = content.split(/<br\s*\/?>/gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf) { + return conf.textPlacement === "fo" ? byFo : conf.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +function wrap(text, width) { + text.each(function() { + var text2 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this), words = text2.text().split(/(\s+|<br>)/).reverse(), word, line = [], lineHeight = 1.1, y = text2.attr("y"), dy = parseFloat(text2.attr("dy")), tspan = text2.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em"); + for (let j = 0; j < words.length; j++) { + word = words[words.length - 1 - j]; + line.push(word); + tspan.text(line.join(" ").trim()); + if (tspan.node().getComputedTextLength() > width || word === "<br>") { + line.pop(); + tspan.text(line.join(" ").trim()); + if (word === "<br>") { + line = [""]; + } else { + line = [word]; + } + tspan = text2.append("tspan").attr("x", 0).attr("y", y).attr("dy", lineHeight + "em").text(word); + } + } + }); +} +const drawNode = function(elem, node, fullSection, conf) { + const section = fullSection % MAX_SECTIONS - 1; + const nodeElem = elem.append("g"); + node.section = section; + nodeElem.attr( + "class", + (node.class ? node.class + " " : "") + "timeline-node " + ("section-" + section) + ); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.height = Math.max(node.height, node.maxHeight); + node.width = node.width + 2 * node.padding; + textElem.attr("transform", "translate(" + node.width / 2 + ", " + node.padding / 2 + ")"); + defaultBkg(bkgElem, node, section); + return node; +}; +const getVirtualNodeHeight = function(elem, node, conf) { + const textElem = elem.append("g"); + const txt = textElem.append("text").text(node.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(wrap, node.width); + const bbox = txt.node().getBBox(); + const fontSize = conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace("px", "") : conf.fontSize; + textElem.remove(); + return bbox.height + fontSize * 1.1 * 0.5 + node.padding; +}; +const defaultBkg = function(elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + node.type).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + getTextObj, + getNoteRect, + initGraphics, + drawNode, + getVirtualNodeHeight +}; +const draw = function(text, id, version, diagObj) { + var _a, _b; + const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const LEFT_MARGIN = conf.leftMargin ?? 50; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("timeline", diagObj.db); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select("#" + id); + svg.append("g"); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getCommonDb().getDiagramTitle(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("task", tasks2); + svgDraw.initGraphics(svg); + const sections2 = diagObj.db.getSections(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sections", sections2); + let maxSectionHeight = 0; + let maxTaskHeight = 0; + let depthY = 0; + let sectionBeginY = 0; + let masterX = 50 + LEFT_MARGIN; + let masterY = 50; + sectionBeginY = 50; + let sectionNumber = 0; + let hasSections = true; + sections2.forEach(function(section) { + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 150, + padding: 20, + maxHeight: maxSectionHeight + }; + const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionHeight before draw", sectionHeight); + maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20); + }); + let maxEventCount = 0; + let maxEventLineLength = 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("tasks.length", tasks2.length); + for (const [i, task] of tasks2.entries()) { + const taskNode = { + number: i, + descr: task, + section: task.section, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight before draw", taskHeight); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20); + maxEventCount = Math.max(maxEventCount, task.events.length); + let maxEventLineLengthTemp = 0; + for (let j = 0; j < task.events.length; j++) { + const event = task.events[j]; + const eventNode = { + descr: event, + section: task.section, + number: task.section, + width: 150, + padding: 20, + maxHeight: 50 + }; + maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf); + } + maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxSectionHeight before draw", maxSectionHeight); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxTaskHeight before draw", maxTaskHeight); + if (sections2 && sections2.length > 0) { + sections2.forEach((section) => { + const tasksForSection = tasks2.filter((task) => task.section === section); + const sectionNode = { + number: sectionNumber, + descr: section, + section: sectionNumber, + width: 200 * Math.max(tasksForSection.length, 1) - 50, + padding: 20, + maxHeight: maxSectionHeight + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode", sectionNode); + const sectionNodeWrapper = svg.append("g"); + const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("sectionNode output", node); + sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); + masterY += maxSectionHeight + 50; + if (tasksForSection.length > 0) { + drawTasks( + svg, + tasksForSection, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + false + ); + } + masterX += 200 * Math.max(tasksForSection.length, 1); + masterY = sectionBeginY; + sectionNumber++; + }); + } else { + hasSections = false; + drawTasks( + svg, + tasks2, + sectionNumber, + masterX, + masterY, + maxTaskHeight, + conf, + maxEventCount, + maxEventLineLength, + maxSectionHeight, + true + ); + } + const box = svg.node().getBBox(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("bounds", box); + if (title) { + svg.append("text").text(title).attr("x", box.width / 2 - LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); + } + depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; + const lineWrapper = svg.append("g").attr("class", "lineWrapper"); + lineWrapper.append("line").attr("x1", LEFT_MARGIN).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.o)( + void 0, + svg, + ((_a = conf.timeline) == null ? void 0 : _a.padding) ?? 50, + ((_b = conf.timeline) == null ? void 0 : _b.useMaxWidth) ?? false + ); +}; +const drawTasks = function(diagram2, tasks2, sectionColor, masterX, masterY, maxTaskHeight, conf, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { + var _a; + for (const task of tasks2) { + const taskNode = { + descr: task.task, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: maxTaskHeight + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskNode", taskNode); + const taskWrapper = diagram2.append("g").attr("class", "taskWrapper"); + const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf); + const taskHeight = node.height; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("taskHeight after draw", taskHeight); + taskWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + maxTaskHeight = Math.max(maxTaskHeight, taskHeight); + if (task.events) { + const lineWrapper = diagram2.append("g").attr("class", "lineWrapper"); + let lineLength = maxTaskHeight; + masterY += 100; + lineLength = lineLength + drawEvents(diagram2, task.events, sectionColor, masterX, masterY, conf); + masterY -= 100; + lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( + "y2", + masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 + ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); + } + masterX = masterX + 200; + if (isWithoutSections && !((_a = conf.timeline) == null ? void 0 : _a.disableMulticolor)) { + sectionColor++; + } + } + masterY = masterY - 10; +}; +const drawEvents = function(diagram2, events, sectionColor, masterX, masterY, conf) { + let maxEventHeight = 0; + const eventBeginY = masterY; + masterY = masterY + 100; + for (const event of events) { + const eventNode = { + descr: event, + section: sectionColor, + number: sectionColor, + width: 150, + padding: 20, + maxHeight: 50 + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("eventNode", eventNode); + const eventWrapper = diagram2.append("g").attr("class", "eventWrapper"); + const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf); + const eventHeight = node.height; + maxEventHeight = maxEventHeight + eventHeight; + eventWrapper.attr("transform", `translate(${masterX}, ${masterY})`); + masterY = masterY + 10 + eventHeight; + } + masterY = eventBeginY; + return maxEventHeight; +}; +const renderer = { + setConf: () => { + }, + draw +}; +const genSections = (options) => { + let sections2 = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections2 += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .lineWrapper line{ + stroke: ${options["cScaleLabel" + i]} ; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections2; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`; +const styles = getStyles; +const diagram = { + db, + renderer, + parser: parser$1, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/295.e011aaa9.js b/assets/js/295.e011aaa9.js new file mode 100644 index 0000000000..270259a577 --- /dev/null +++ b/assets/js/295.e011aaa9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[295],{70295:(t,e,n)=>{n.d(e,{diagram:()=>O});var i=n(28758),s=n(64218),r=n(91619),a=n(12281),o=n(7201),l=(n(27484),n(17967),n(27856),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,20,21],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,16],l=[1,17],c={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.getCommonDb().setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.getCommonDb().setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 15:i.addTask(r[o],0,""),this.$=r[o];break;case 16:i.addEvent(r[o].substr(2)),this.$=r[o]}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:n,12:i,14:s,16:r,17:a,18:14,19:15,20:o,21:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",l=0,c=0,h=r.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;r.push(y);var g=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,_,b,x,k,v,w,S,$={};;){if(m=n[n.length-1],this.defaultActions[m]?_=this.defaultActions[m]:(null==f&&(S=void 0,"number"!=typeof(S=i.pop()||d.lex()||1)&&(S instanceof Array&&(S=(i=S).pop()),S=e.symbols_[S]||S),f=S),_=a[m]&&a[m][f]),void 0===_||!_.length||!_[0]){var E="";for(x in w=[],a[m])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");E=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(E,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:y,expected:w})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(_[0]){case 1:n.push(f),s.push(d.yytext),r.push(d.yylloc),n.push(_[1]),f=null,c=d.yyleng,o=d.yytext,l=d.yylineno,y=d.yylloc;break;case 2:if(k=this.productions_[_[1]][1],$.$=s[s.length-k],$._$={first_line:r[r.length-(k||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(k||1)].first_column,last_column:r[r.length-1].last_column},g&&($._$.range=[r[r.length-(k||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,c,l,u.yy,_[1],s,r].concat(h))))return b;k&&(n=n.slice(0,-1*k*2),s=s.slice(0,-1*k),r=r.slice(0,-1*k)),n.push(this.productions_[_[1]][0]),s.push($.$),r.push($._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},h={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};function d(){this.yy={}}return c.lexer=h,d.prototype=c,c.Parser=d,new d}());l.parser=l;const c=l;let h="",d=0;const u=[],p=[],y=[],g=()=>i.I,f=function(){u.length=0,p.length=0,h="",y.length=0,(0,i.t)()},m=function(t){h=t,u.push(t)},_=function(){return u},b=function(){let t=w();let e=0;for(;!t&&e<100;)t=w(),e++;return p.push(...y),p},x=function(t,e,n){const i={id:d++,section:h,type:h,task:t,score:e||0,events:n?[n]:[]};y.push(i)},k=function(t){y.find((t=>t.id===d-1)).events.push(t)},v=function(t){const e={section:h,type:h,description:t,task:t,classes:[]};p.push(e)},w=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},S={clear:f,getCommonDb:g,addSection:m,getSections:_,getTasks:b,addTask:x,addTaskOrg:v,addEvent:k},$=Object.freeze(Object.defineProperty({__proto__:null,addEvent:k,addSection:m,addTask:x,addTaskOrg:v,clear:f,default:S,getCommonDb:g,getSections:_,getTasks:b},Symbol.toStringTag,{value:"Module"}));!function(){function t(t,e,n,s,r,a,o,l){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",l).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,l,c){const{taskFontSize:h,taskFontFamily:d}=l,u=t.split(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.length-1)/2,l=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",c).style("text-anchor","middle").style("font-size",h).style("font-family",d);l.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[p]),l.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(l,o)}}function n(t,n,s,r,a,o,l,c){const h=n.append("switch"),d=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,l,c),i(d,l)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}}();function E(t,e){t.each((function(){var t,n=(0,s.Ys)(this),i=n.text().split(/(\s+|<br>)/).reverse(),r=[],a=n.attr("y"),o=parseFloat(n.attr("dy")),l=n.text(null).append("tspan").attr("x",0).attr("y",a).attr("dy",o+"em");for(let s=0;s<i.length;s++)t=i[i.length-1-s],r.push(t),l.text(r.join(" ").trim()),(l.node().getComputedTextLength()>e||"<br>"===t)&&(r.pop(),l.text(r.join(" ").trim()),r="<br>"===t?[""]:[t],l=n.append("tspan").attr("x",0).attr("y",a).attr("dy","1.1em").text(t))}))}const I=function(t,e,n){t.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("d",`M0 ${e.height-5} v${10-e.height} q0,-5 5,-5 h${e.width-10} q5,0 5,5 v${e.height-5} H0 Z`),t.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",e.height).attr("x2",e.width).attr("y2",e.height)},T=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},C=function(t,e,n,i){const s=n%12-1,r=t.append("g");e.section=s,r.attr("class",(e.class?e.class+" ":"")+"timeline-node section-"+s);const a=r.append("g"),o=r.append("g"),l=o.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(E,e.width).node().getBBox(),c=i.fontSize&&i.fontSize.replace?i.fontSize.replace("px",""):i.fontSize;return e.height=l.height+1.1*c*.5+e.padding,e.height=Math.max(e.height,e.maxHeight),e.width=e.width+2*e.padding,o.attr("transform","translate("+e.width/2+", "+e.padding/2+")"),I(a,e,s),e},L=function(t,e,n){const i=t.append("g"),s=i.append("text").text(e.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(E,e.width).node().getBBox(),r=n.fontSize&&n.fontSize.replace?n.fontSize.replace("px",""):n.fontSize;return i.remove(),s.height+1.1*r*.5+e.padding},A=function(t,e,n,s,r,a,o,l,c,h,d){var u;for(const p of e){const e={descr:p.task,section:n,number:n,width:150,padding:20,maxHeight:a};i.l.debug("taskNode",e);const l=t.append("g").attr("class","taskWrapper"),y=C(l,e,n,o).height;if(i.l.debug("taskHeight after draw",y),l.attr("transform",`translate(${s}, ${r})`),a=Math.max(a,y),p.events){const e=t.append("g").attr("class","lineWrapper");let i=a;r+=100,i+=M(t,p.events,n,s,r,o),r-=100,e.append("line").attr("x1",s+95).attr("y1",r+a).attr("x2",s+95).attr("y2",r+a+(d?a:h)+c+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}s+=200,d&&!(null==(u=o.timeline)?void 0:u.disableMulticolor)&&n++}r-=10},M=function(t,e,n,s,r,a){let o=0;const l=r;r+=100;for(const c of e){const e={descr:c,section:n,number:n,width:150,padding:20,maxHeight:50};i.l.debug("eventNode",e);const l=t.append("g").attr("class","eventWrapper"),h=C(l,e,n,a).height;o+=h,l.attr("transform",`translate(${s}, ${r})`),r=r+10+h}return r=l,o},O={db:$,renderer:{setConf:()=>{},draw:function(t,e,n,r){var a,o;const l=(0,i.c)(),c=l.leftMargin??50;i.l.debug("timeline",r.db);const h=l.securityLevel;let d;"sandbox"===h&&(d=(0,s.Ys)("#i"+e));const u=("sandbox"===h?(0,s.Ys)(d.nodes()[0].contentDocument.body):(0,s.Ys)("body")).select("#"+e);u.append("g");const p=r.db.getTasks(),y=r.db.getCommonDb().getDiagramTitle();i.l.debug("task",p),T(u);const g=r.db.getSections();i.l.debug("sections",g);let f=0,m=0,_=0,b=0,x=50+c,k=50;b=50;let v=0,w=!0;g.forEach((function(t){const e=L(u,{number:v,descr:t,section:v,width:150,padding:20,maxHeight:f},l);i.l.debug("sectionHeight before draw",e),f=Math.max(f,e+20)}));let S=0,$=0;i.l.debug("tasks.length",p.length);for(const[s,I]of p.entries()){const t={number:s,descr:I,section:I.section,width:150,padding:20,maxHeight:m},e=L(u,t,l);i.l.debug("taskHeight before draw",e),m=Math.max(m,e+20),S=Math.max(S,I.events.length);let n=0;for(let i=0;i<I.events.length;i++){const t={descr:I.events[i],section:I.section,number:I.section,width:150,padding:20,maxHeight:50};n+=L(u,t,l)}$=Math.max($,n)}i.l.debug("maxSectionHeight before draw",f),i.l.debug("maxTaskHeight before draw",m),g&&g.length>0?g.forEach((t=>{const e=p.filter((e=>e.section===t)),n={number:v,descr:t,section:v,width:200*Math.max(e.length,1)-50,padding:20,maxHeight:f};i.l.debug("sectionNode",n);const s=u.append("g"),r=C(s,n,v,l);i.l.debug("sectionNode output",r),s.attr("transform",`translate(${x}, 50)`),k+=f+50,e.length>0&&A(u,e,v,x,k,m,l,S,$,f,!1),x+=200*Math.max(e.length,1),k=50,v++})):(w=!1,A(u,p,v,x,k,m,l,S,$,f,!0));const E=u.node().getBBox();i.l.debug("bounds",E),y&&u.append("text").text(y).attr("x",E.width/2-c).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),_=w?f+m+150:m+100;u.append("g").attr("class","lineWrapper").append("line").attr("x1",c).attr("y1",_).attr("x2",E.width+3*c).attr("y2",_).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),(0,i.o)(void 0,u,(null==(a=l.timeline)?void 0:a.padding)??50,(null==(o=l.timeline)?void 0:o.useMaxWidth)??!1)}},parser:c,styles:t=>`\n .edge {\n stroke-width: 3;\n }\n ${(t=>{let e="";for(let n=0;n<t.THEME_COLOR_LIMIT;n++)t["lineColor"+n]=t["lineColor"+n]||t["cScaleInv"+n],(0,r.Z)(t["lineColor"+n])?t["lineColor"+n]=(0,a.Z)(t["lineColor"+n],20):t["lineColor"+n]=(0,o.Z)(t["lineColor"+n],20);for(let n=0;n<t.THEME_COLOR_LIMIT;n++){const i=""+(17-3*n);e+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} path {\n fill: ${t["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${t["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${t["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${t["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${i};\n }\n .section-${n-1} line {\n stroke: ${t["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .lineWrapper line{\n stroke: ${t["cScaleLabel"+n]} ;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return e})(t)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${t.git0};\n }\n .section-root text {\n fill: ${t.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .eventWrapper {\n filter: brightness(120%);\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/2955.1a515cc6.js b/assets/js/2955.1a515cc6.js new file mode 100644 index 0000000000..dd85b173f7 --- /dev/null +++ b/assets/js/2955.1a515cc6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2955],{92955:(e,t,l)=>{l.d(t,{diagram:()=>u});var n=l(49206),a=l(64218),o=l(45625),i=l(28758),s=l(60905);l(27484),l(17967),l(27856),l(41644),l(46060);const d=e=>i.e.sanitizeText(e,(0,i.c)());let r={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const c=function(e,t,l,n,a){const o=Object.keys(e);i.l.info("keys:",o),i.l.info(e),o.filter((t=>e[t].parent==a)).forEach((function(l){var o,s;const r=e[l],c=r.cssClasses.join(" "),p=(0,i.k)(r.styles),b=r.label??r.id,u={labelStyle:p.labelStyle,shape:"class_box",labelText:d(b),classData:r,rx:0,ry:0,class:c,style:p.style,id:r.id,domId:r.domId,tooltip:n.db.getTooltip(r.id,a)||"",haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,u),a&&t.setParent(r.id,a),i.l.info("setNode",u)}))};function p(e){let t;switch(e){case 0:t="aggregation";break;case 1:t="extension";break;case 2:t="composition";break;case 3:t="dependency";break;case 4:t="lollipop";break;default:t="none"}return t}const b={setConf:function(e){r={...r,...e}},draw:async function(e,t,l,n){i.l.info("Drawing class - ",t);const b=(0,i.c)().flowchart??(0,i.c)().class,u=(0,i.c)().securityLevel;i.l.info("config:",b);const f=(null==b?void 0:b.nodeSpacing)??50,y=(null==b?void 0:b.rankSpacing)??50,g=new o.k({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:f,ranksep:y,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),h=n.db.getNamespaces(),v=n.db.getClasses(),w=n.db.getRelations(),k=n.db.getNotes();let m;i.l.info(w),function(e,t,l,n){const a=Object.keys(e);i.l.info("keys:",a),i.l.info(e),a.forEach((function(a){var o,s;const r=e[a],p={shape:"rect",id:r.id,domId:r.domId,labelText:d(r.id),labelStyle:"",style:"fill: none; stroke: black",padding:(null==(o=(0,i.c)().flowchart)?void 0:o.padding)??(null==(s=(0,i.c)().class)?void 0:s.padding)};t.setNode(r.id,p),c(r.classes,t,l,n,r.id),i.l.info("setNode",p)}))}(h,g,t,n),c(v,g,t,n),function(e,t){const l=(0,i.c)().flowchart;let n=0;e.forEach((function(e){var o;n++;const s={classes:"relation",pattern:1==e.relation.lineType?"dashed":"solid",id:`id_${e.id1}_${e.id2}_${n}`,arrowhead:"arrow_open"===e.type?"none":"normal",startLabelRight:"none"===e.relationTitle1?"":e.relationTitle1,endLabelLeft:"none"===e.relationTitle2?"":e.relationTitle2,arrowTypeStart:p(e.relation.type1),arrowTypeEnd:p(e.relation.type2),style:"fill:none",labelStyle:"",curve:(0,i.n)(null==l?void 0:l.curve,a.c_6)};if(i.l.info(s,e),void 0!==e.style){const t=(0,i.k)(e.style);s.style=t.style,s.labelStyle=t.labelStyle}e.text=e.title,void 0===e.text?void 0!==e.style&&(s.arrowheadStyle="fill: #333"):(s.arrowheadStyle="fill: #333",s.labelpos="c",(null==(o=(0,i.c)().flowchart)?void 0:o.htmlLabels)??(0,i.c)().htmlLabels?(s.labelType="html",s.label='<span class="edgeLabel">'+e.text+"</span>"):(s.labelType="text",s.label=e.text.replace(i.e.lineBreakRegex,"\n"),void 0===e.style&&(s.style=s.style||"stroke: #333; stroke-width: 1.5px;fill:none"),s.labelStyle=s.labelStyle.replace("color:","fill:"))),t.setEdge(e.id1,e.id2,s,n)}))}(w,g),function(e,t,l,n){i.l.info(e),e.forEach((function(e,o){var s,c;const p=e,b="",u="",f=p.text,y={labelStyle:b,shape:"note",labelText:d(f),noteData:p,rx:0,ry:0,class:"",style:u,id:p.id,domId:p.id,tooltip:"",type:"note",padding:(null==(s=(0,i.c)().flowchart)?void 0:s.padding)??(null==(c=(0,i.c)().class)?void 0:c.padding)};if(t.setNode(p.id,y),i.l.info("setNode",y),!p.class||!(p.class in n))return;const g=l+o,h={id:`edgeNote${g}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:(0,i.n)(r.curve,a.c_6)};t.setEdge(p.id,p.class,h,g)}))}(k,g,w.length+1,v),"sandbox"===u&&(m=(0,a.Ys)("#i"+t));const x="sandbox"===u?(0,a.Ys)(m.nodes()[0].contentDocument.body):(0,a.Ys)("body"),T=x.select(`[id="${t}"]`),S=x.select("#"+t+" g");if(await(0,s.r)(S,g,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",t),i.u.insertTitle(T,"classTitleText",(null==b?void 0:b.titleTopMargin)??5,n.db.getDiagramTitle()),(0,i.o)(g,T,null==b?void 0:b.diagramPadding,null==b?void 0:b.useMaxWidth),!(null==b?void 0:b.htmlLabels)){const e="sandbox"===u?m.nodes()[0].contentDocument:document,l=e.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of l){const l=t.getBBox(),n=e.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",l.width),n.setAttribute("height",l.height),t.insertBefore(n,t.firstChild)}}}},u={parser:n.p,db:n.d,renderer:b,styles:n.s,init:e=>{e.class||(e.class={}),e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute,n.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/295f424e.f4b1ea30.js b/assets/js/295f424e.f4b1ea30.js new file mode 100644 index 0000000000..b6a74d8e17 --- /dev/null +++ b/assets/js/295f424e.f4b1ea30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5133],{59579:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>i});var t=n(85893),c=n(11151);const s={},o="DIRECT_EMITTERS",d={id:"about/references/keywords/DIRECT_EMITTERS",title:"DIRECT_EMITTERS",description:"Deprecated from eCalc v8.7 (changed name to VENTING_EMITTERS).",source:"@site/docs/about/references/keywords/DIRECT_EMITTERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DIRECT_EMITTERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES"},next:{title:"DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"direct_emitters",children:"DIRECT_EMITTERS"}),"\n",(0,t.jsx)("span",{className:"major-change-deprecation",children:(0,t.jsxs)(r.p,{children:["Deprecated from eCalc v8.7 (changed name to ",(0,t.jsx)("strong",{children:"VENTING_EMITTERS"}),")."]})}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Yes"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"INSTALLATIONS"})}),(0,t.jsxs)(r.td,{children:[(0,t.jsx)(r.code,{children:"NAME"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"EMISSION_NAME"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"CATEGORY"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"EMITTER_MODEL"})]})]})})]}),"\n",(0,t.jsx)(r.admonition,{type:"important",children:(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:["eCalc version 8.7: DIRECT_EMITTERS are renamed to ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"}),"."]}),"\n",(0,t.jsx)(r.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["The ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword covers the direct emissions on the installation\nthat are not consuming energy. The attributes ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"}),", ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," are required."]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"DIRECT_EMITTERS:\n - NAME: <emitter name>\n EMISSION_NAME: <emission name>\n CATEGORY: <category>\n EMITTER_MODEL: <emitter model>\n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"DIRECT_EMITTERS:\n - NAME: SomeDirectEmitter\n EMISSION_NAME: CH4\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n <emitter model data>\n ...\n - NAME: SomeOtherDirectEmitter\n EMISSION_NAME: C2H6\n CATEGORY: COLD-VENTING-FUGITIVE\n EMITTER_MODEL:\n <emitter model data>\n"})})]})}function l(e={}){const{wrapper:r}={...(0,c.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(E,{...e})}):E(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var t=n(67294);const c={},s=t.createContext(c);function o(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2995.5d18433e.js b/assets/js/2995.5d18433e.js new file mode 100644 index 0000000000..233ad67559 --- /dev/null +++ b/assets/js/2995.5d18433e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2995],{52995:(t,e,i)=>{i.d(e,{diagram:()=>T});var n=i(28758),r=i(64218),s=i(41644),a=i(45625),l=(i(27484),i(17967),i(27856),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],r=[1,6],s=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],a=[1,18],l=[2,7],c=[1,22],o=[1,23],h=[1,24],u=[1,25],y=[1,26],d=[1,27],p=[1,20],_=[1,28],E=[1,29],g=[62,63],R=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],m=[1,47],f=[1,48],I=[1,49],b=[1,50],k=[1,51],S=[1,52],T=[1,53],N=[53,54],x=[1,64],A=[1,60],v=[1,61],q=[1,62],$=[1,63],O=[1,65],w=[1,69],C=[1,70],L=[1,67],F=[1,68],M=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],D={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(t,e,i,n,r,s,a){var l=s.length-1;switch(r){case 4:this.$=s[l].trim(),n.setAccTitle(this.$);break;case 5:case 6:this.$=s[l].trim(),n.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:n.addRequirement(s[l-3],s[l-4]);break;case 14:n.setNewReqId(s[l-2]);break;case 15:n.setNewReqText(s[l-2]);break;case 16:n.setNewReqRisk(s[l-2]);break;case 17:n.setNewReqVerifyMethod(s[l-2]);break;case 20:this.$=n.RequirementType.REQUIREMENT;break;case 21:this.$=n.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=n.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=n.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=n.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=n.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=n.RiskLevel.LOW_RISK;break;case 27:this.$=n.RiskLevel.MED_RISK;break;case 28:this.$=n.RiskLevel.HIGH_RISK;break;case 29:this.$=n.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=n.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=n.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=n.VerifyType.VERIFY_TEST;break;case 33:n.addElement(s[l-3]);break;case 34:n.setNewElementType(s[l-2]);break;case 35:n.setNewElementDocRef(s[l-2]);break;case 38:n.addRelationship(s[l-2],s[l],s[l-4]);break;case 39:n.addRelationship(s[l-2],s[l-4],s[l]);break;case 40:this.$=n.Relationships.CONTAINS;break;case 41:this.$=n.Relationships.COPIES;break;case 42:this.$=n.Relationships.DERIVES;break;case 43:this.$=n.Relationships.SATISFIES;break;case 44:this.$=n.Relationships.VERIFIES;break;case 45:this.$=n.Relationships.REFINES;break;case 46:this.$=n.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:i,11:n,13:r},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:i,11:n,13:r},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(s,[2,6]),{3:12,4:2,6:e,9:i,11:n,13:r},{1:[2,2]},{4:17,5:a,7:13,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},t(s,[2,4]),t(s,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:a,7:31,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:32,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:33,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:34,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{4:17,5:a,7:35,8:l,9:i,11:n,13:r,14:14,15:15,16:16,17:19,23:21,31:c,32:o,33:h,34:u,35:y,36:d,44:p,62:_,63:E},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(g,[2,20]),t(g,[2,21]),t(g,[2,22]),t(g,[2,23]),t(g,[2,24]),t(g,[2,25]),t(R,[2,49]),t(R,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{52:54,55:m,56:f,57:I,58:b,59:k,60:S,61:T},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(N,[2,43]),t(N,[2,44]),t(N,[2,45]),t(N,[2,46]),{54:[1,58]},{5:x,20:59,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:66,47:L,49:F},{23:71,62:_,63:E},{23:72,62:_,63:E},t(M,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:x,20:77,21:A,24:v,26:q,28:$,30:O},t(M,[2,19]),t(M,[2,33]),{22:[1,78]},{22:[1,79]},{5:w,30:C,46:80,47:L,49:F},t(M,[2,37]),t(M,[2,38]),t(M,[2,39]),{23:81,62:_,63:E},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(M,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(M,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:x,20:106,21:A,24:v,26:q,28:$,30:O},{5:x,20:107,21:A,24:v,26:q,28:$,30:O},{5:x,20:108,21:A,24:v,26:q,28:$,30:O},{5:x,20:109,21:A,24:v,26:q,28:$,30:O},{5:w,30:C,46:110,47:L,49:F},{5:w,30:C,46:111,47:L,49:F},t(M,[2,14]),t(M,[2,15]),t(M,[2,16]),t(M,[2,17]),t(M,[2,34]),t(M,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],n=[],r=[null],s=[],a=this.table,l="",c=0,o=0,h=s.slice.call(arguments,1),u=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);u.setInput(t,y.yy),y.yy.lexer=u,y.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var p=u.yylloc;s.push(p);var _=u.options&&u.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,g,R,m,f,I,b,k,S,T={};;){if(g=i[i.length-1],this.defaultActions[g]?R=this.defaultActions[g]:(null==E&&(S=void 0,"number"!=typeof(S=n.pop()||u.lex()||1)&&(S instanceof Array&&(S=(n=S).pop()),S=e.symbols_[S]||S),E=S),R=a[g]&&a[g][E]),void 0===R||!R.length||!R[0]){var N="";for(f in k=[],a[g])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");N=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(N,{text:u.match,token:this.terminals_[E]||E,line:u.yylineno,loc:p,expected:k})}if(R[0]instanceof Array&&R.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+E);switch(R[0]){case 1:i.push(E),r.push(u.yytext),s.push(u.yylloc),i.push(R[1]),E=null,o=u.yyleng,l=u.yytext,c=u.yylineno,p=u.yylloc;break;case 2:if(I=this.productions_[R[1]][1],T.$=r[r.length-I],T._$={first_line:s[s.length-(I||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(I||1)].first_column,last_column:s[s.length-1].last_column},_&&(T._$.range=[s[s.length-(I||1)].range[0],s[s.length-1].range[1]]),void 0!==(m=this.performAction.apply(T,[l,o,c,y.yy,R[1],r,s].concat(h))))return m;I&&(i=i.slice(0,-1*I*2),r=r.slice(0,-1*I),s=s.slice(0,-1*I)),i.push(this.productions_[R[1]][0]),r.push(T.$),s.push(T._$),b=a[i[i.length-2]][i[i.length-1]],i.push(b);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===n.length?this.yylloc.first_column:0)+n[n.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,n,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var s in r)this[s]=r[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),s=0;s<r.length;s++)if((i=this._input.match(this.rules[r[s]]))&&(!e||i[0].length>e[0].length)){if(e=i,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,r[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,i,n){switch(i){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 48:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:case 10:case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 49:return"qString";case 50:return e.yytext=e.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};function V(){this.yy={}}return D.lexer=P,V.prototype=D,D.Parser=V,new V}());l.parser=l;const c=l;let o=[],h={},u={},y={},d={};const p={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>(0,n.c)().req,addRequirement:(t,e)=>(void 0===u[t]&&(u[t]={name:t,type:e,id:h.id,text:h.text,risk:h.risk,verifyMethod:h.verifyMethod}),h={},u[t]),getRequirements:()=>u,setNewReqId:t=>{void 0!==h&&(h.id=t)},setNewReqText:t=>{void 0!==h&&(h.text=t)},setNewReqRisk:t=>{void 0!==h&&(h.risk=t)},setNewReqVerifyMethod:t=>{void 0!==h&&(h.verifyMethod=t)},setAccTitle:n.s,getAccTitle:n.g,setAccDescription:n.b,getAccDescription:n.a,addElement:t=>(void 0===d[t]&&(d[t]={name:t,type:y.type,docRef:y.docRef},n.l.info("Added new requirement: ",t)),y={},d[t]),getElements:()=>d,setNewElementType:t=>{void 0!==y&&(y.type=t)},setNewElementDocRef:t=>{void 0!==y&&(y.docRef=t)},addRelationship:(t,e,i)=>{o.push({type:t,src:e,dst:i})},getRelationships:()=>o,clear:()=>{o=[],h={},u={},y={},d={},(0,n.t)()}},_={CONTAINS:"contains",ARROW:"arrow"},E=_,g=(t,e)=>{let i=t.append("defs").append("marker").attr("id",_.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");i.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),i.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),i.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",_.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0\n L${e.line_height},${e.line_height/2}\n M${e.line_height},${e.line_height/2}\n L0,${e.line_height}`).attr("stroke-width",1)};let R={},m=0;const f=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",R.rect_min_width+"px").attr("height",R.rect_min_height+"px"),I=(t,e,i)=>{let n=R.rect_min_width/2,r=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",R.rect_padding).attr("dominant-baseline","hanging"),s=0;i.forEach((t=>{0==s?r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",0).text(t):r.append("tspan").attr("text-anchor","middle").attr("x",R.rect_min_width/2).attr("dy",.75*R.line_height).text(t),s++}));let a=1.5*R.rect_padding+s*R.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",R.rect_min_width).attr("y1",a).attr("y2",a),{titleNode:r,y:a}},b=(t,e,i,n)=>{let r=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",R.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),s=0;let a=[];return i.forEach((t=>{let e=t.length;for(;e>30&&s<3;){let i=t.substring(0,30);e=(t=t.substring(30,t.length)).length,a[a.length]=i,s++}if(3==s){let t=a[a.length-1];a[a.length-1]=t.substring(0,t.length-4)+"..."}else a[a.length]=t;s=0})),a.forEach((t=>{r.append("tspan").attr("x",R.rect_padding).attr("dy",R.line_height).text(t)})),r},k=function(t,e,i,s,a){const l=i.edge(S(e.src),S(e.dst)),c=(0,r.jvg)().x((function(t){return t.x})).y((function(t){return t.y})),o=t.insert("path","#"+s).attr("class","er relationshipLine").attr("d",c(l.points)).attr("fill","none");e.type==a.db.Relationships.CONTAINS?o.attr("marker-start","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+n.e.getUrl(R.arrowMarkerAbsolute)+"#"+E.ARROW+"_line_ending)")),((t,e,i,n)=>{const r=e.node().getTotalLength(),s=e.node().getPointAtLength(.5*r),a="rel"+m;m++;const l=t.append("text").attr("class","req relationshipLabel").attr("id",a).attr("x",s.x).attr("y",s.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+a).attr("class","req reqLabelBox").attr("x",s.x-l.width/2).attr("y",s.y-l.height/2).attr("width",l.width).attr("height",l.height).attr("fill","white").attr("fill-opacity","85%")})(t,o,0,`<<${e.type}>>`)},S=t=>t.replace(/\s/g,"").replace(/\./g,"_"),T={parser:c,db:p,renderer:{draw:(t,e,i,l)=>{R=(0,n.c)().requirement;const c=R.securityLevel;let o;"sandbox"===c&&(o=(0,r.Ys)("#i"+e));const h=("sandbox"===c?(0,r.Ys)(o.nodes()[0].contentDocument.body):(0,r.Ys)("body")).select(`[id='${e}']`);g(h,R);const u=new a.k({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:R.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));let y=l.db.getRequirements(),d=l.db.getElements(),p=l.db.getRelationships();var _,E,m;_=y,E=u,m=h,Object.keys(_).forEach((t=>{let e=_[t];t=S(t),n.l.info("Added new requirement: ",t);const i=m.append("g").attr("id",t),r=f(i,"req-"+t);let s=I(i,t+"_title",[`<<${e.type}>>`,`${e.name}`]);b(i,t+"_body",[`Id: ${e.id}`,`Text: ${e.text}`,`Risk: ${e.risk}`,`Verification: ${e.verifyMethod}`],s.y);const a=r.node().getBBox();E.setNode(t,{width:a.width,height:a.height,shape:"rect",id:t})})),((t,e,i)=>{Object.keys(t).forEach((n=>{let r=t[n];const s=S(n),a=i.append("g").attr("id",s),l="element-"+s,c=f(a,l);let o=I(a,l+"_title",["<<Element>>",`${n}`]);b(a,l+"_body",[`Type: ${r.type||"Not Specified"}`,`Doc Ref: ${r.docRef||"None"}`],o.y);const h=c.node().getBBox();e.setNode(s,{width:h.width,height:h.height,shape:"rect",id:s})}))})(d,u,h),((t,e)=>{t.forEach((function(t){let i=S(t.src),n=S(t.dst);e.setEdge(i,n,{relationship:t})}))})(p,u),(0,s.bK)(u),function(t,e){e.nodes().forEach((function(i){void 0!==i&&void 0!==e.node(i)&&(t.select("#"+i),t.select("#"+i).attr("transform","translate("+(e.node(i).x-e.node(i).width/2)+","+(e.node(i).y-e.node(i).height/2)+" )"))}))}(h,u),p.forEach((function(t){k(h,t,u,e,l)}));const T=R.rect_padding,N=h.node().getBBox(),x=N.width+2*T,A=N.height+2*T;(0,n.i)(h,A,x,R.useMaxWidth),h.attr("viewBox",`${N.x-T} ${N.y-T} ${x} ${A}`)}},styles:t=>`\n\n marker {\n fill: ${t.relationColor};\n stroke: ${t.relationColor};\n }\n\n marker.cross {\n stroke: ${t.lineColor};\n }\n\n svg {\n font-family: ${t.fontFamily};\n font-size: ${t.fontSize};\n }\n\n .reqBox {\n fill: ${t.requirementBackground};\n fill-opacity: 1.0;\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${t.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${t.relationLabelBackground};\n fill-opacity: 1.0;\n }\n\n .req-title-line {\n stroke: ${t.requirementBorderColor};\n stroke-width: ${t.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${t.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${t.relationLabelColor};\n }\n\n`}}}]); \ No newline at end of file diff --git a/assets/js/29d00dd8.f86ec347.js b/assets/js/29d00dd8.f86ec347.js new file mode 100644 index 0000000000..1afd7adde9 --- /dev/null +++ b/assets/js/29d00dd8.f86ec347.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8084],{24890:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>a,frontMatter:()=>o,metadata:()=>l,toc:()=>i});var s=r(85893),c=r(11151);const o={},t="ENERGYFUNCTION",l={id:"about/references/keywords/ENERGYFUNCTION",title:"ENERGYFUNCTION",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ENERGYFUNCTION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ENERGYFUNCTION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"END",permalink:"/ecalc/docs/about/references/keywords/END"},next:{title:"ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"energyfunction",children:"ENERGYFUNCTION"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",children:"ENERGYFUNCTION"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"None"})})]})})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["This refers to an energy function model defined in either ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY INPUTS"})," or in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," used for ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY USAGE MODEL"}),".\nThe following attributes can be utilised:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",children:"COMPRESSOR MODEL"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",children:"PUMP ENERGY USAGE MODEL"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"TABULATED ENERGY USAGE MODEL"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: <energy usage model type>\n ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"\nFACILITY_INPUTS:\n - NAME: compressor_model_reference\n TYPE: COMPRESSOR_TABULAR\n FILE: <file path>\n\n...\n\nINSTALLATIONS:\n - NAME: InstallationA\n CATEGORY: FIXED\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: gensetA\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_model_reference\n ...\n\n FUELCONSUMERS:\n - NAME: compressor\n CATEGORY: GAS-DRIVEN-COMPRESSOR \n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_model_reference\n ...\n\n"})})]})}function a(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>l,a:()=>t});var s=r(67294);const c={},o=s.createContext(c);function t(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:t(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b15d891.72863a33.js b/assets/js/2b15d891.72863a33.js new file mode 100644 index 0000000000..d1e42fb2a6 --- /dev/null +++ b/assets/js/2b15d891.72863a33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2225],{31015:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>i});var s=r(85893),c=r(11151);const t={},o="NAME",a={id:"about/references/keywords/NAME",title:"NAME",description:"[...] /",source:"@site/docs/about/references/keywords/NAME.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/NAME",permalink:"/ecalc/docs/about/references/keywords/NAME",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/NAME.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS"},next:{title:"OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"name",children:"NAME"}),"\n",(0,s.jsxs)(n.p,{children:["[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["Name of an entity.\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," names must be written with uppercase letters - see example below:"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"NAME: <name>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["Usage in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSIONS:\n - NAME: CO2\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Usage in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORIES"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: diesel_turbine\n CATEGORY: DIESEL\n"})})]})}function u(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>o});var s=r(67294);const c={},t=s.createContext(c);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2b2be347.ab9ace89.js b/assets/js/2b2be347.ab9ace89.js new file mode 100644 index 0000000000..31b62263b2 --- /dev/null +++ b/assets/js/2b2be347.ab9ace89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1404],{77387:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(85893),l=s(11151);const r={slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:3},o="eCalc v7.0",a={id:"changelog/v7-0",title:"v7.0",description:"Features",source:"@site/docs/changelog/v7-0.md",sourceDirName:"changelog",slug:"/changelog/v7-0-release",permalink:"/ecalc/docs/changelog/v7-0-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-0.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:3,frontMatter:{slug:"v7-0-release",title:"v7.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:3},sidebar:"changelog",previous:{title:"---",permalink:"/ecalc/docs/changelog/separator"},next:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"}},t={},d=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2},{value:"CLI",id:"cli",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ecalc-v70",children:"eCalc v7.0"}),"\n",(0,i.jsx)(n.h2,{id:"features",children:(0,i.jsx)(n.em,{children:"Features"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES compressor model. See ",(0,i.jsx)(n.code,{children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add GERG model to FLUID model as EOS_MODEL. Now available GERG_PR and GERG_SRK."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add UNITS: EFFICIENCY to compressor charts and pump charts. Plus additional input unit support."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add support for both water and H2O in fluid composition."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add POWER_ADJUSTMENT_CONSTANT for all applicable models to adjust power/energy usage with a constant factor."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add water as allowed ",(0,i.jsx)(n.code,{children:"FLUID model"})," component."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Improve models documentation"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Deprecation: ",(0,i.jsx)(n.a,{href:"../about/references/keywords/CONDITION",children:"CONDITION"})," is now a single expression instead of list."]}),"\n",(0,i.jsxs)(n.p,{children:["If you previously had a list it is recommended to use the ",(0,i.jsx)(n.a,{href:"../about/references/keywords/CONDITIONS",children:"CONDITIONS"})," keyword instead. This will become a requirement in a future release."]}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively you could merge the conditions to a single expression. This is what is done automatically when using the ",(0,i.jsx)(n.a,{href:"../about/references/keywords/CONDITIONS",children:"CONDITIONS"})," keyword."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" # This is new\n CONDITION: expression1 {*} expression2 \n # This is old\n CONDITION: \n # This is old\n - expression1 \n # This is old\n - expression2 \n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fixes",children:(0,i.jsx)(n.em,{children:"Fixes"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Handle date columns year as year and not timestamps"}),"\n",(0,i.jsx)(n.li,{children:"Handle suppressed ecalc errors and division by zero"}),"\n",(0,i.jsx)(n.li,{children:"Handle timeseries with one entry"}),"\n",(0,i.jsx)(n.li,{children:"Handle poorly formatted csv data with tabs, multiple spaces and mixed float/integers."}),"\n",(0,i.jsx)(n.li,{children:"Handle 0 regularity"}),"\n",(0,i.jsx)(n.li,{children:"Handle emission intensity when only one timestep"}),"\n",(0,i.jsx)(n.li,{children:"Changed emission intensity to NaN when hydrocarbon export is zero"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"cli",children:"CLI"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Feature"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Major revision of CLI for future development."}),"\n",(0,i.jsx)(n.li,{children:"Add Flow diagram support"}),"\n",(0,i.jsx)(n.li,{children:"Improve logging, warnings and error messages. DEBUG should now give a lot of information."}),"\n",(0,i.jsx)(n.li,{children:"Add support for list in 'CONDITION' keyword"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Fix"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fix issue when using dates in ELECTRICITY2FUEL"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var i=s(67294);const l={},r=i.createContext(l);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c19a041.f0278a48.js b/assets/js/2c19a041.f0278a48.js new file mode 100644 index 0000000000..e6cf664eb3 --- /dev/null +++ b/assets/js/2c19a041.f0278a48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4507],{77509:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var n=a(85893),r=a(11151);const t={},l="REGULARITY",i={id:"about/references/keywords/REGULARITY",title:"REGULARITY",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/REGULARITY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/REGULARITY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"},next:{title:"STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES"}},c={},d=[{value:"Description",id:"description",level:2},{value:"Use in a <code>DIRECT ENERGY USAGE MODEL</code>",id:"use-in-a-direct-energy-usage-model",level:3},{value:"Reporting",id:"reporting",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Constant regularity",id:"constant-regularity",level:3},{value:"Regularity from time series data",id:"regularity-from-time-series-data",level:3},{value:"Special: Combining calendar and stream day rates",id:"special-combining-calendar-and-stream-day-rates",level:3}];function m(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",math:"math",mfrac:"mfrac",mi:"mi",mo:"mo",mrow:"mrow",mtext:"mtext",p:"p",pre:"pre",semantics:"semantics",span:"span",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"regularity",children:"REGULARITY"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"})]}),"\n",(0,n.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(s.p,{children:["In eCalc\u2122, consumers in an ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY USAGE MODEL"})," are evaluated with the actual rate passing through them whilst\nthey are in operation. This actual rate is referred to as ",(0,n.jsx)(s.em,{children:"stream day (sd) rates"}),".\nDespite the consumers being evaluated with stream day rates, input files are often given in ",(0,n.jsx)(s.em,{children:"calender day (cd) rates"}),". As expected from this definition, ",(0,n.jsx)(s.code,{children:"REGULARITY"})," is closely related to the production efficiency (PE) of a facility."]}),"\n",(0,n.jsx)(s.p,{children:"Stream day rates can be expressed as:"}),"\n",(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"s"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"m"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.mfrac,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"c"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"n"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"})]}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"g"}),(0,n.jsx)(s.mi,{children:"u"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"i"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"y"})]})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"stream\\ day\\ rate = \\frac{calendar\\ day\\ rate}{regularity}"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.2519em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(s.span,{className:"mfrac",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.3714em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"gu"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"})]})]}),(0,n.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(s.span,{})})})]})}),(0,n.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsxs)(s.p,{children:["To give an example of this, an input file may have a gas export rate for a whole year. However, this rate will take into account any downtime for the facility. So in reality, this ",(0,n.jsx)(s.em,{children:"calender day rate"})," is not the rate the compressor will process whilst in operation that year. This will rather be the higher ",(0,n.jsx)(s.em,{children:"stream day rate"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"An example of this can be seen in the figure below:"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Regularity work flow example",src:a(13173).Z+"",width:"1013",height:"110"})}),"\n",(0,n.jsxs)(s.p,{children:["For detailed modeling, it might be a better option to increase the resolution in the ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),"\ninputs to capture down periods and variations in conditions rather than using regularity."]}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Rates from reservoir simulations may be both stream day and calendar day."}),"\n",(0,n.jsxs)(s.li,{children:["If eCalc\u2122 is used\nwithout specifying ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"}),", then regularity will default to 1."]}),"\n",(0,n.jsxs)(s.li,{children:["All user defined input rates used in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," are ",(0,n.jsx)(s.strong,{children:"assumed to be calendar day rates"}),"."]}),"\n"]})}),"\n",(0,n.jsxs)(s.h3,{id:"use-in-a-direct-energy-usage-model",children:["Use in a ",(0,n.jsx)(s.code,{children:"DIRECT ENERGY USAGE MODEL"})]}),"\n",(0,n.jsxs)(s.p,{children:["It should be noted that not all ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY USAGE MODELS"})," are evaluated with ",(0,n.jsx)(s.em,{children:"stream day rates"}),".\n",(0,n.jsx)(s.code,{children:"DIRECT ENERGY USAGE MODELS"})," can be specified with the keyword ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})," - where either ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," can be specified.\nNote that the default input rate is ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," rate - the opposite of the other models."]}),"\n",(0,n.jsxs)(s.p,{children:["For further details on stream day rate vs. calendar day rate, see ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"}),"."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"ENERGY_USAGE_MODEL Type"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Can use CONSUMPTION_RATE_TYPE?"}),(0,n.jsx)(s.th,{style:{textAlign:"center"},children:"Evaluated rate type"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"DIRECT"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2611"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream/calendar day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"COMPRESSOR"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"PUMP"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"COMPRESSOR_SYSTEM"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"PUMP_SYSTEM"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"TABULATED"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"\u2610"}),(0,n.jsx)(s.td,{style:{textAlign:"center"},children:"Stream day"})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"reporting",children:"Reporting"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"All fuel rates are reported in calendar days."}),"\n",(0,n.jsx)(s.li,{children:"All power and volume rates results are reported in stream day rates. Note that the volume rates are only present in the .json file."}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"The reason for reporting calendar day rate is to account for potential downtime for process units, i.e. some units may not run all the time throughout a year due to different reasons. Typically all process units have some downtime, and regularity is\non average something closer to 0.99 over a longer period such as a year."}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"REGULARITY"})," can be specified by a single number or as an expression."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: <installation name>\n CATEGORY: <installation category>\n REGULARITY: <regularity expression>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.h3,{id:"constant-regularity",children:"Constant regularity"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"REGULARITY: 0.95\n"})}),"\n",(0,n.jsx)(s.h3,{id:"regularity-from-time-series-data",children:"Regularity from time series data"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"REGULARITY: SIM1;REGULARITY\n"})}),"\n",(0,n.jsx)(s.h3,{id:"special-combining-calendar-and-stream-day-rates",children:"Special: Combining calendar and stream day rates"}),"\n",(0,n.jsxs)(s.p,{children:["If there is a need to combine stream day and calendar day rates in an expression,\n(or to use a stream day rate from a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," source), one can manually do\nwhat is necessary to obtain calendar day rates by dividing by regularity."]}),"\n",(0,n.jsxs)(s.p,{children:["For example, combining a calendar day rate (",(0,n.jsx)(s.code,{children:"SIM2;GAS_PROD_A"}),") with stream day rate\n(",(0,n.jsx)(s.code,{children:"SIM1;GAS_PROD_B"}),") on an installation with a fixed regularity of 0.95 can be done like:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"RATE: SIM2:GAS_PROD_A {+} SIM1;GAS_PROD_B {*} 0.95\n"})})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},13173:(e,s,a)=>{a.d(s,{Z:()=>n});const n=a.p+"assets/images/regularity-3e43516a1e0246a2e125d4980006b137.png"},11151:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>l});var n=a(67294);const r={},t=n.createContext(r);function l(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c73e373.a47cc11b.js b/assets/js/2c73e373.a47cc11b.js new file mode 100644 index 0000000000..023e713f4e --- /dev/null +++ b/assets/js/2c73e373.a47cc11b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2655],{22498:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var o=t(85893),s=t(11151);const i={},r="Conventional Commits",c={id:"contribute/guides/conventional-commits",title:"Conventional Commits",description:"Git commits are required to follow conventional commits.",source:"@site/docs/contribute/guides/02-conventional-commits.md",sourceDirName:"contribute/guides",slug:"/contribute/guides/conventional-commits",permalink:"/ecalc/docs/contribute/guides/conventional-commits",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/guides/02-conventional-commits.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Git",permalink:"/ecalc/docs/contribute/guides/git"}},d={},a=[];function l(e){const n={a:"a",code:"code",h1:"h1",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"conventional-commits",children:"Conventional Commits"}),"\n",(0,o.jsxs)(n.p,{children:["Git commits are required to follow ",(0,o.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"The message should be structured like this:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"<type>[optional scope]: <description>\n\n[optional body]\n\n[optional footer(s)]\n"})}),"\n",(0,o.jsxs)(n.p,{children:["The type can be one of these types: ",(0,o.jsx)(n.strong,{children:"feat"}),", ",(0,o.jsx)(n.strong,{children:"fix"}),", ",(0,o.jsx)(n.strong,{children:"build"}),", ",(0,o.jsx)(n.strong,{children:"ci"}),", ",(0,o.jsx)(n.strong,{children:"docs"}),", ",(0,o.jsx)(n.strong,{children:"style"}),", ",(0,o.jsx)(n.strong,{children:"refactor"}),", ",(0,o.jsx)(n.strong,{children:"test"}),", and ",(0,o.jsx)(n.strong,{children:"chore"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["The description should be lower-case for the first letter. For description of optional parts, please refer to the\n",(0,o.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional Commits Docs"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Here are some simple example conventional commits:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"feat: implement new awesome feature\n"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"docs: add developer guidelines\n"})}),"\n",(0,o.jsx)(n.p,{children:"A more advanced example:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"fix: prevent racing of requests\n\nIntroduce a request id and a reference to latest request. Dismiss\nincoming responses other than from latest request.\n\nRemove timeouts which were used to mitigate the racing issue but are\nobsolete now.\n\nReviewed-by: Z\nRefs: #123\n"})})]})}function m(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>r});var o=t(67294);const s={},i=o.createContext(s);function r(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2ce3b5da.c94b7f25.js b/assets/js/2ce3b5da.c94b7f25.js new file mode 100644 index 0000000000..b7c52f4556 --- /dev/null +++ b/assets/js/2ce3b5da.c94b7f25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9050],{40806:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>a,toc:()=>d});var r=o(85893),t=o(11151);const n={title:"Variable speed compressor train",sidebar_position:3},i=void 0,a={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",title:"Variable speed compressor train",description:"In this model all compressors in the train have the same speed, and the model is build on a forward model of",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Variable speed compressor train",sidebar_position:3},sidebar:"about",previous:{title:"Simplified variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model"},next:{title:"Variable speed compressor train model with multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}},l={},d=[];function m(e){const s={a:"a",code:"code",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.p,{children:"In this model all compressors in the train have the same speed, and the model is build on a forward model of\nthe fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the\noutlet is equal to the requested discharge pressure."}),"\n",(0,r.jsxs)(s.p,{children:["This model only supports ",(0,r.jsx)(s.code,{children:"User defined variable speed compressor chart"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["In addition, a ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"})," must be specified."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Control mechanisms"})}),"\n",(0,r.jsx)(s.p,{children:"The variable speed compressor train model has a set of automatic control mechanisms. The figure below shows several operational points (rate/head) outside a variable speed compressor chart."}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{src:o(97203).Z+"",width:"712",height:"516"})}),"\n",(0,r.jsx)(s.p,{children:"The points will be treated as follows:"}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsx)(s.li,{children:"Points with head above the maximum head on the maximum speed curve will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points with head below the minimum head on the minimum speed curve will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points below the stone wall will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points above the maximum speed curve will be out of capacity."}),"\n",(0,r.jsx)(s.li,{children:"Points where the flow is below the minimum flow at the minimum speed curve will be moved to the minimum speed curve by increasing the rate using the ASV of the compressor."}),"\n",(0,r.jsx)(s.li,{children:"Points where the flow is below the surge line of the compressor will be moved to the surge line of the compressor by increasing the rate using the ASV of the compressor."}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Format"})}),"\n",(0,r.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," in the format"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >\n PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>\n"})})]})}function c(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},97203:(e,s,o)=>{o.d(s,{Z:()=>r});const r=o.p+"assets/images/control_mechanisms_variable_speed_compressor_chart-74501f10294f5dd339dba1a305bbe3f6.png"},11151:(e,s,o)=>{o.d(s,{Z:()=>a,a:()=>i});var r=o(67294);const t={},n=r.createContext(t);function i(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2cedaf2f.533693ab.js b/assets/js/2cedaf2f.533693ab.js new file mode 100644 index 0000000000..e7e965e34f --- /dev/null +++ b/assets/js/2cedaf2f.533693ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5408],{74877:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var o=n(85893),r=n(11151);const t={title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},s=void 0,a={id:"about/modelling/workflow/generic_workflow",title:"Generic Workflow",description:"Generic workflow",source:"@site/docs/about/modelling/workflow/generic_workflow.md",sourceDirName:"about/modelling/workflow",slug:"/about/modelling/workflow/generic_workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/workflow/generic_workflow.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Generic Workflow",sidebar_position:1,description:"Generic workflow"},sidebar:"about",previous:{title:"eCalc\u2122 Workflow",permalink:"/ecalc/docs/about/modelling/workflow/"},next:{title:"Examples",permalink:"/ecalc/docs/about/modelling/examples/"}},d={},l=[{value:"Simplified Process Flow Diagram",id:"simplified-process-flow-diagram",level:2},{value:"Workflow",id:"workflow",level:2},{value:"Workflow Explanation",id:"workflow-explanation",level:2},{value:"Required Subsurface Profiles",id:"required-subsurface-profiles",level:3},{value:"Facility Information",id:"facility-information",level:3},{value:"Constant Power Loads",id:"constant-power-loads",level:4},{value:"Additional Information",id:"additional-information",level:4},{value:"Consumer Information",id:"consumer-information",level:3},{value:"Generator Set",id:"generator-set",level:4},{value:"Compressor Curves",id:"compressor-curves",level:4},{value:"Validation",id:"validation",level:3},{value:"Calibration",id:"calibration",level:3}];function c(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",mermaid:"mermaid",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.h2,{id:"simplified-process-flow-diagram",children:"Simplified Process Flow Diagram"}),"\n",(0,o.jsxs)(i.p,{children:["The image below illustrates a simplified process flow diagram for a generic offshore oil and gas facility. Each unit included in this diagram can be modelled with the use of eCalc.\nThe ",(0,o.jsx)(i.a,{href:"#workflow",children:"workflow"})," below will outline what is necessary to obtain for each step. In addition, there are some accompanied ",(0,o.jsx)(i.a,{href:"#workflow-explanation",children:"explanations"})," to the workflow."]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{src:n(40015).Z+"",width:"5863",height:"4444"})}),"\n",(0,o.jsx)(i.h2,{id:"workflow",children:"Workflow"}),"\n",(0,o.jsx)(i.mermaid,{value:' flowchart TD;\n subgraph ide1 ["Required Subsurface Profiles [All in Sm3/d]"]\n ide1_A[Oil Produced];\n ide1_B[Gas Produced];\n ide1_C[Water Produced];\n ide1_D[Gas Injected];\n ide1_E[Water Injected];\n end\n \n \n subgraph ide2 ["Facility Information Needed"]\n\n ide2_A[[Power Generation System]] --\x3e ide2_A_1([Gas Turbines]);\n ide2_A_1 --\x3e ide2_A_2(["`Number of Gas Turbines `"]);\n ide2_A_2 --\x3e ide2_A_3(["`Maximum capacity per generator and spinning reserve`"]);\n \n ide2_B[["Water Injection System"]] --\x3e ide2_B_1(["`Suction Pressure`"]);\n ide2_B_1 --\x3e ide2_B_2(["`Discharge Pressure`"]);\n ide2_B_2 --\x3e ide2_B_3(["`Injected Water Density`"]);\n ide2_B_3 --\x3e ide2_B_4(["`Maximum capacity per pump`"]);\n \n ide2_D[[Gas Compression System]] --\x3e ide2_D_1(["`Export Compressor`"]);\n ide2_D --\x3e ide2_D_1_1(["`Re-Injection Compressor`"]);\n ide2_D_1 --\x3e ide2_D_2(["`Suction Pressure per compressor`"]);\n ide2_D_1_1 --\x3eide2_D_2\n ide2_D_2 --\x3e ide2_D_3(["`Discharge Pressure per compressor`"]);\n ide2_D_3 --\x3e ide2_D_4(["`Suction Temperature per compressor`"]);\n ide2_C[["Typical Constant Power Loads"]] --\x3e ide2_C_1(["`Base Load`"]);\n ide2_C_1 --\x3e ide2_C_2(["`Oil Export Pumps`"]);\n ide2_C_2 --\x3e ide2_C_3(["`Gas Recompressor`"])\n \n ide2_E[[Additional Emissions]] --\x3e ide2_E_1([Flaring]);\n ide2_E_1 --\x3e ide2_E_2(["`Electrical Submersible Pumps (ESP)`"])\n ide2_E_2 --\x3e ide2_E_3(["`Drilling rigs/Diesel motors`"])\n ide2_E_3 --\x3e ide2_E_4(["`Fugitives/Venting`"])\n ide2_E_4 --\x3e ide2_E_5(["`Diesel motor`"])\n \n end\n\n subgraph ide3 ["Consumer Data Needed"]\n\n ide3_A[[Generator Set]]--\x3e ide3_A_1(["`Fuel vs Power relationship. Lines relating fuel and power`"]);\n ide3_A_1 --\x3e ide3_A_2(["`Generating switching. At max capacity of the generator, impose another generate on the existing`"]);\n \n ide3_B[[Compressors]] --\x3e ide3_B_1(["`Variable/single speed drive`"]);\n ide3_B_1 --\x3e ide3_B_2{Available charts?};\n ide3_B_2 -. yes .-> ide3_B_4(["`Use suppliers compressor chart (head vs flow, efficiency vs flow)`"]);\n ide3_B_2 -. no .-> ide3_B_3(["`Use generic chart functionality`"]);\n \n ide3_C[[Water Injectors]] --\x3e ide3_C_1(["`Variable/single speed drive`"]);\n ide3_C_1 --\x3e ide3_C_2{Available charts?};\n ide3_C_2 -. yes .-> ide3_C_4(["`Use suppliers pump chart (head vs flow, efficiency vs flow)`"]);\n ide3_C_2 -. no .-> ide3_C_3(["`Generate synthetic charts using expected head and flow ranges`"]);\n\n end\n\n subgraph ide4 ["Validation"]\n\n ide4_A{"Invalid data?"} \n\n ide4_A -. yes .-> ide4_A_1{"`Invalid Compressors?`"};\n ide4_A_1 -. yes .-> ide4_A_1_1(["`Either head or rate is too high`"]);\n ide4_A_1_1 --\x3e ide4_A_1_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_3{"`Invalid Pumps?`"};\n ide4_A_3 -. yes .-> ide4_A_3_1(["`Either head or rate is too high`"]);\n ide4_A_3_1 --\x3e ide4_A_3_2(["`Plot operational points and adjust charts to fit historical data`"]);\n \n ide4_A -. yes .-> ide4_A_4{"`Invalid Generator Set?`"};\n ide4_A_4 -. yes .-> ide4_A_4_1(["`Check maximum and minimum facility power consumption values are within the range of the specified generator set`"]);\n ide4_A_4_1 --\x3e ide4_A_4_2(["`Adjust generator set`"]);\n\n end\n\n subgraph ide5 ["Calibration"]\n\n ide5_A["`Calibration`"] --\x3e ide5_A_1(["`Compare measured power/fuel against eCalc power/fuel`"]) ;\n ide5_A_1 --\x3e ide5_A_2{"`Do they correlate`"}\n ide5_A_2 -. yes .-> ide5_A_3_1{"`Are all points valid?`"};\n ide5_A_3_1 -. yes .-> ide5_A_3_2(["`No further calibration needed`"])\n ide5_A_2 -. no .-> ide5_A_2_1(["`Consider using POWERLOSSFACTOR to adjust modelled to measured power`"])\n ide5_A_2_1 --\x3e ide5_A_3_1\n ide5_A_4_1(["`Plot operational points on the same figure as the performance chart`"]) --\x3e ide5_A_4_2(["`Alter the head vs flow curves (using fan law theory)`"])\n ide5_A_4_2 --\x3e ide5_A_1\n ide5_A_3_1 -. no .-> ide5_A_4_1\n end\n \n ide1 ~~~ ide2\n ide2 ~~~ ide3\n ide3 ~~~ ide4\n ide4 ~~~ ide5'}),"\n",(0,o.jsx)(i.h2,{id:"workflow-explanation",children:"Workflow Explanation"}),"\n",(0,o.jsx)(i.h3,{id:"required-subsurface-profiles",children:"Required Subsurface Profiles"}),"\n",(0,o.jsxs)(i.p,{children:["All subsurface profiles must be in calendar day rate Sm",(0,o.jsx)("sup",{children:"3"}),"/day and with its PE (",(0,o.jsx)(i.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"}),"). This data must be inputted as a ",(0,o.jsx)(i.code,{children:"TIME-SERIES"})," and references to how it is used in the facility or by a relevant consumer."]}),"\n",(0,o.jsx)(i.h3,{id:"facility-information",children:"Facility Information"}),"\n",(0,o.jsx)(i.h4,{id:"constant-power-loads",children:"Constant Power Loads"}),"\n",(0,o.jsx)(i.p,{children:"To simplify certain models, there could be some common assumptions made. Here are some examples:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Base Load"}),': As eCalc\u2122 is not simulating the whole facility there are often energy consumers that are not modelled.\nTypically these energy consumers, related to things such as the energy consumption of living quarters and direct energy consumers dependent on there being production/injection, are often constant loads.\nThese smaller constant loads are then grouped into a larger term, called the "baseload". This is assumed to be constant and independent of the production rate of the facility.']}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Recompressor"}),": The main function of a recompressor is to compressor gas from separator pressures back up to the inlet separator pressure.\nIf this compressor is small and has little fluctuation in its load, or its processed gas rate and composition are unknown,\nthus, to simplify modelling, this recompressor could be modelled as a constant load. And at times, is included within the facility's base load"]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Oil Export Pumps"}),": As eCalc\u2122 does not model oil pumps, these are often modelled as constant loads or modelled with a table (that relates oil rate to power consumption). The method in which they are modelled depends from facility to facility"]}),"\n"]}),"\n",(0,o.jsx)(i.h4,{id:"additional-information",children:"Additional Information"}),"\n",(0,o.jsx)(i.p,{children:"Any emissions that do not fall within the defined categories can still be considered for a given platform. For example, if there are drilling activities, an additional fuel type can be specified and related to the fuel consumption of a drilling rig."}),"\n",(0,o.jsx)(i.h3,{id:"consumer-information",children:"Consumer Information"}),"\n",(0,o.jsx)(i.h4,{id:"generator-set",children:"Generator Set"}),"\n",(0,o.jsx)(i.p,{children:'As eCalc\u2122 does not indepthly model gas turbine generators, alternative methods are used.\nHere, fuel consumed and power generated is related in tabular form. These are typically linear relationships, and if more than one generator is used, "generator switching" is modelled by adding another generator curve on top of the existing.'}),"\n",(0,o.jsx)(i.p,{children:"This means that the facility will operate in the most efficient manner, i.e. meaning that if one generator will satisfy the power demand, only one generator will always be used."}),"\n",(0,o.jsx)(i.h4,{id:"compressor-curves",children:"Compressor Curves"}),"\n",(0,o.jsx)(i.p,{children:"eCalc\u2122 has generic compressor curve functionality which can be used when compressor curves are not available.\nHowever, if a manufactor compressor chart is available, it is always recommended to use this over a generic chart.\nThe generic compressor curves, use the assumption of constant polytropic efficiency, which is only a good assumption if the compressor is running near the design points."}),"\n",(0,o.jsx)(i.h3,{id:"validation",children:"Validation"}),"\n",(0,o.jsx)(i.p,{children:"Before running an eCalc\u2122 model, checking whether the eCalc\u2122 model is valid or not is an essential task. If a model is not valid, this means that input requirements set by the user are not being fulfilled, or that some consumers are giving unrealistic solutions."}),"\n",(0,o.jsx)(i.p,{children:"Validity can be checked by consumers, and there are often specific reasons why certain consumers are invalid. Therefore, it requires engineers not only to understand the validation of operation points (history data) from consumers, but also to know the specific limits of compressor or pump charts. The charts of consumers should fit their operation points. For example:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Compressors and Pumps"}),": It is common that either too high a head or rate value is specified. This means that the invalid point is outside the limits of the performance chart. To determine the issue, it is recommended that the operational points (Head, and actual flowrate) are plotted together with the chart."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Generator Set"}),": The most common issue here is that the amount of power required is higher than the maximum value in the utilised genset."]}),"\n"]}),"\n",(0,o.jsx)(i.p,{children:"Before any chart adjustments are made, engineers should first verify who provide the input that the adjustments make sense."}),"\n",(0,o.jsx)(i.h3,{id:"calibration",children:"Calibration"}),"\n",(0,o.jsx)(i.p,{children:"The term calibration in eCalc\u2122 often refers to the history matching of the facility. Essentially, real operational data is compared against the eCalc\u2122 model results. If they do not correlate various changes are made to the model."}),"\n",(0,o.jsxs)(i.p,{children:["The main workflow with this would be to match every individual consumer, e.g. each pump and compressor. After that, it is the recommended to compare on the facility level (e.g. total power consumed or total fuel used), then various adjustments can be made.\nThese adjustments can mean changes to the base load, shifting the compressor curves, or simply by using a ",(0,o.jsx)(i.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},40015:(e,i,n)=>{n.d(i,{Z:()=>o});const o=n.p+"assets/images/simple_facility_pfd-ad59578d69ea3d3267f646b9d8141822.jpg"},11151:(e,i,n)=>{n.d(i,{Z:()=>a,a:()=>s});var o=n(67294);const r={},t=o.createContext(r);function s(e){const i=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2df92a48.3a6cca1e.js b/assets/js/2df92a48.3a6cca1e.js new file mode 100644 index 0000000000..241928ba37 --- /dev/null +++ b/assets/js/2df92a48.3a6cca1e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3596],{49134:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=s(85893),r=s(11151);const o={},c="FUEL_TYPES",a={id:"about/references/keywords/FUEL_TYPES",title:"FUEL_TYPES",description:"FUELTYPES",source:"@site/docs/about/references/keywords/FUEL_TYPES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUEL_TYPES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE"},next:{title:"GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS"}},i={},d=[{value:"Description",id:"description",level:2}];function u(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})}),"\n",(0,n.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(t.p,{children:["This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by its name."]}),"\n",(0,n.jsxs)(t.p,{children:["The use of fuel can lead to one or more emission types, specified in ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"}),".\nYou can optionally specify a ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["See ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/fuel_types",children:"FUEL TYPES"})," for more details about usage."]})]})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>a,a:()=>c});var n=s(67294);const r={},o=n.createContext(r);function c(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f04f592.7ecac6a9.js b/assets/js/2f04f592.7ecac6a9.js new file mode 100644 index 0000000000..fabeefda95 --- /dev/null +++ b/assets/js/2f04f592.7ecac6a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7495],{42787:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>c,metadata:()=>s,toc:()=>i});var n=a(85893),o=a(11151);const c={slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:2},r=void 0,s={id:"changelog/separator",title:"---",description:"",source:"@site/docs/changelog/separator.md",sourceDirName:"changelog",slug:"/changelog/separator",permalink:"/ecalc/docs/changelog/separator",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/separator.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:2,frontMatter:{slug:"separator",title:"---",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:2},sidebar:"changelog",previous:{title:"Next",permalink:"/ecalc/docs/changelog/latest"},next:{title:"v7.0",permalink:"/ecalc/docs/changelog/v7-0-release"}},l={},i=[];function u(e){return(0,n.jsx)(n.Fragment,{})}function d(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u()}},11151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>r});var n=a(67294);const o={},c=n.createContext(o);function r(e){const t=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3261da49.5ea59cab.js b/assets/js/3261da49.5ea59cab.js new file mode 100644 index 0000000000..95a61e724f --- /dev/null +++ b/assets/js/3261da49.5ea59cab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3091],{29333:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var s=t(85893),r=t(11151);const i={},o="INTERPOLATION_TYPE",c={id:"about/references/keywords/INTERPOLATION_TYPE",title:"INTERPOLATION_TYPE",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/INTERPOLATION_TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INTERPOLATION_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS"},next:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"interpolation_type",children:"INTERPOLATION_TYPE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})]}),"\n",(0,s.jsxs)(n.p,{children:["New in ",(0,s.jsx)(n.strong,{children:"v8.1"}),", previously known as ",(0,s.jsx)(n.code,{children:"RATE_INTERPOLATION_TYPE"})," that was renamed to ",(0,s.jsx)(n.code,{children:"INTERPOLATION_TYPE"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.admonition,{title:"Caution",type:"caution",children:[(0,s.jsxs)(n.p,{children:["Only valid for CSV data of source ",(0,s.jsx)(n.code,{children:"MISCELLANEOUS"}),". For ",(0,s.jsx)(n.code,{children:"TIME_SERIES"})," of ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"}),"\n",(0,s.jsx)(n.code,{children:"DEFAULT"})," the keyword is not allowed as input. The following applies:"]}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"MISCELLANEOUS: Interpolation type is mandatory."}),"\n",(0,s.jsxs)(n.li,{children:["DEFAULT: Interpolation type not allowed. Default ",(0,s.jsx)(n.code,{children:"RIGHT"})," is used."]}),"\n"]})]}),"\n",(0,s.jsx)(n.admonition,{title:"Caution",type:"caution",children:(0,s.jsxs)(n.p,{children:["Different data types may require different types of interpolation. While reservoir rates are\ntypically interpolated ",(0,s.jsx)(n.code,{children:"RIGHT"})," or ",(0,s.jsx)(n.code,{children:"LEFT"}),", other data such as pressure is often interpolated\nlinearly (",(0,s.jsx)(n.code,{children:"LINEAR"}),"). Data that should be interpolated differently must be specified in\ndifferent input files, as it is not possible to have multiple interpolation types for vectors\nwithin the same file."]})}),"\n",(0,s.jsxs)(n.p,{children:["Rates are given at defined time steps in the data source but are in essence valid for a time\ninterval. The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"}),"\nwill determine how rates are interpolated between the given time steps."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"LEFT"}),": The rate given at the current time step is defining the rate in the time interval between the current and\nprevious time step. This is in data science also known as backwards filling of missing values."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"RIGHT"}),": The rate given at the current time step is defining the rate in the time interval between the current and\nnext time step. This is in data science also known as forward filling of missing values."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"LINEAR"}),": The rate will be linearly interpolated between the time steps."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The plot below shows how the different choices for ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," works in practice."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:t(91856).Z+"",width:"512",height:"384"})}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,s.jsx)(n.h3,{id:"requirements",children:"Requirements"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," has to be specified if\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is set to ",(0,s.jsx)(n.code,{children:"MISCELLANEOUS"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," can not be specified if ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is set to ",(0,s.jsx)(n.code,{children:"DEFAULT"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,s.jsx)(n.code,{children:"time_series_format"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},91856:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/interpolation_plot-d4eee4126032e046bf374ef66ceb9946.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>o});var s=t(67294);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/33498b04.af3705af.js b/assets/js/33498b04.af3705af.js new file mode 100644 index 0000000000..f99c1334d3 --- /dev/null +++ b/assets/js/33498b04.af3705af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[381],{20902:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>m});var r=s(85893),o=s(11151);const i={title:"Simplified variable speed compressor train",sidebar_position:2},t=void 0,a={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",title:"Simplified variable speed compressor train",description:"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Simplified variable speed compressor train",sidebar_position:2},sidebar:"about",previous:{title:"Single speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"},next:{title:"Variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"}},d={},m=[{value:"Format",id:"format",level:2},{value:"Simplified compressor train model with known compressor stages",id:"simplified-compressor-train-model-with-known-compressor-stages",level:3},{value:"Simplified compressor train model with unknown number of compressor stages",id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages",level:3},{value:"Examples",id:"examples",level:2},{value:"A (single) compressor with a user-defined variable speed compressor chart and fluid composition",id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition",level:3},{value:"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition",id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition",level:3},{value:"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart",id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart",level:3},{value:"A compressor train where the number of stages are unknown",id:"a-compressor-train-where-the-number-of-stages-are-unknown",level:3}];function l(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures\nare assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is\ncalculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on\nthe same shaft and thus have a common speed."}),"\n",(0,r.jsxs)(n.p,{children:["This model supports both ",(0,r.jsx)(n.code,{children:"user defined compressor charts"})," and\n",(0,r.jsx)(n.code,{children:"generic compressor charts"}),". See ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"compressor charts"})," for more information."]}),"\n",(0,r.jsxs)(n.p,{children:["In addition, a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:"FLUID MODEL"})," must be specified."]}),"\n",(0,r.jsx)(n.p,{children:"The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor\nstages are calculated at run-time based on input data."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS\n COMPRESSOR_TRAIN: <compressor train specification>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n CALCULATE_MAX_RATE: <Optional. compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >\n"})}),"\n",(0,r.jsx)(n.h3,{id:"simplified-compressor-train-model-with-known-compressor-stages",children:"Simplified compressor train model with known compressor stages"}),"\n",(0,r.jsx)(n.p,{children:"When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>\n - ... and so forth for each stage in the train\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"simplified-compressor-train-model-with-unknown-number-of-compressor-stages",children:"Simplified compressor train model with unknown number of compressor stages"}),"\n",(0,r.jsx)(n.p,{children:"When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage.\nWhen the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data)\nsuch that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure\nratio per stage, but not larger."}),"\n",(0,r.jsx)(n.p,{children:"This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the\ngeneric compressor chart which are adjusted at run time (based on input data), for example to explore future\nrebuilds/designs where no specifications/data is yet available from vendors et.c."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model>\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>\n COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>\n INLET_TEMPERATURE: <inlet temperature for all stages>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,r.jsx)(n.h3,{id:"a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition",children:"A (single) compressor with a user-defined variable speed compressor chart and fluid composition"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: fluid_model_1\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: SRK\n COMPOSITION:\n nitrogen: 0.74373\n CO2: 2.415619\n methane: 85.60145\n ethane: 6.707826\n propane: 2.611471\n i_butane: 0.45077\n n_butane: 0.691702\n i_pentane: 0.210714\n n_pentane: 0.197937\n n_hexane: 0.368786\n\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model_1\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition",children:"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n\n - NAME: medium_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n - NAME: simplified_compressor_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: medium_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1\n\n - NAME: simplified_compressor_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: simplified_compressor_model\n TURBINE_MODEL: compressor_train_turbine\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart",children:"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n - INLET_TEMPERATURE: 30\n COMPRESSOR_CHART: predefined_variable_speed_compressor_chart\n"})}),"\n",(0,r.jsx)(n.h3,{id:"a-compressor-train-where-the-number-of-stages-are-unknown",children:"A compressor train where the number of stages are unknown"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n - NAME: dry_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: DRY\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: dry_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 30\n"})})]})}function c(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var r=s(67294);const o={},i=r.createContext(o);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3409ab5c.da6f95e5.js b/assets/js/3409ab5c.da6f95e5.js new file mode 100644 index 0000000000..eb5173baf9 --- /dev/null +++ b/assets/js/3409ab5c.da6f95e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2017],{39384:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>m,metadata:()=>r,toc:()=>t});var n=a(85893),l=a(11151);const m={title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},i=void 0,r={id:"about/modelling/theory/pump_modelling",title:"Pump modelling",description:"Pump modelling theory",source:"@site/docs/about/modelling/theory/pump_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/pump_modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/pump_modelling.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Pump modelling",sidebar_position:1,description:"Pump modelling theory"},sidebar:"about",previous:{title:"Theory",permalink:"/ecalc/docs/about/modelling/theory/"},next:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling"}},c={},t=[];function h(s){const e={annotation:"annotation",img:"img",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",semantics:"semantics",span:"span",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"As liquid can be assumed incompressible, pump calculations are simpler compared to compressor calculations. The pumped fluid can be characterized with its density, and no fluid calculations are necessary."}),"\n",(0,n.jsx)(e.p,{children:"The power demand of a pump is calculated as"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"e"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]})]}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"."})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power = \\frac{head * mass\\_rate}{efficiency}."})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ma"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ss"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mord",children:"."})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"Here, the relationship between head and pressures is given by"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{stretchy:"false",children:"("}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mo,{stretchy:"false",children:")"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"q"}),(0,n.jsx)(e.mi,{children:"u"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"g"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"head = \\frac{(P_2-P_1)}{liquid\\_density * g}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.423em",verticalAlign:"-0.996em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.427em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"q"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"u"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen",children:"("}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mclose",children:")"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.996em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_1"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_2"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," are the pump suction and discharge pressures, respectively, and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"g"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"g"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"g"})]})})]})," is the gravitational constant."]}),"\n",(0,n.jsx)(e.p,{children:"eCalc uses the pump chart to relate liquid flow, head and efficiency for the pump, as well as defining the operational envelope for the pump."}),"\n",(0,n.jsx)(e.p,{children:"For single speed pumps, eCalc does extrapolations corresponding to minflow (liquid recirculation) and choking to keep the pump operation within the operational envelope."}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.img,{src:a(94854).Z+"",width:"502",height:"449"})," ",(0,n.jsx)(e.img,{src:a(19258).Z+"",width:"484",height:"443"})]})]})}function d(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},94854:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG"},19258:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG"},11151:(s,e,a)=>{a.d(e,{Z:()=>r,a:()=>i});var n=a(67294);const l={},m=n.createContext(l);function i(s){const e=n.useContext(m);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:i(s.components),n.createElement(m.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/3449.f5c6982a.js b/assets/js/3449.f5c6982a.js new file mode 100644 index 0000000000..db32318d6e --- /dev/null +++ b/assets/js/3449.f5c6982a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3449],{52544:(t,e,n)=>{n.d(e,{k:()=>P});var r=n(17452),o=n(62002),i=n(73234),s=n(17179),u=n(13445),c=n(79697),a=n(70870),f=n(49360),h=n(10626),d=n(69581),l=n(63001),Z=n(21692);const v=function(t){return t!=t};const b=function(t,e,n){for(var r=n-1,o=t.length;++r<o;)if(t[r]===e)return r;return-1};const _=function(t,e,n){return e==e?b(t,e,n):(0,Z.Z)(t,v,n)};const p=function(t,e){return!!(null==t?0:t.length)&&_(t,e,0)>-1};const g=function(t,e,n){for(var r=-1,o=null==t?0:t.length;++r<o;)if(n(e,t[r]))return!0;return!1};var j=n(59548),y=n(93203);const m=function(){};var w=n(6545),O=y.Z&&1/(0,w.Z)(new y.Z([,-0]))[1]==1/0?function(t){return new y.Z(t)}:m;const C=O;const A=function(t,e,n){var r=-1,o=p,i=t.length,s=!0,u=[],c=u;if(n)s=!1,o=g;else if(i>=200){var a=e?null:C(t);if(a)return(0,w.Z)(a);s=!1,o=j.Z,c=new l.Z}else c=e?[]:u;t:for(;++r<i;){var f=t[r],h=e?e(f):f;if(f=n||0!==f?f:0,s&&h==h){for(var d=c.length;d--;)if(c[d]===h)continue t;e&&c.push(h),u.push(f)}else o(c,h,n)||(c!==u&&c.push(h),u.push(f))}return u};var E=n(836);const L=(0,d.Z)((function(t){return A((0,h.Z)(t,1,E.Z,!0))}));var N=n(34148),D=n(92344),S="\0",F="\0",k="\x01";class P{constructor(t={}){this._isDirected=!r.Z(t,"directed")||t.directed,this._isMultigraph=!!r.Z(t,"multigraph")&&t.multigraph,this._isCompound=!!r.Z(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=o.Z(void 0),this._defaultEdgeLabelFn=o.Z(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[F]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(t){return this._label=t,this}graph(){return this._label}setDefaultNodeLabel(t){return i.Z(t)||(t=o.Z(t)),this._defaultNodeLabelFn=t,this}nodeCount(){return this._nodeCount}nodes(){return s.Z(this._nodes)}sources(){var t=this;return u.Z(this.nodes(),(function(e){return c.Z(t._in[e])}))}sinks(){var t=this;return u.Z(this.nodes(),(function(e){return c.Z(t._out[e])}))}setNodes(t,e){var n=arguments,r=this;return a.Z(t,(function(t){n.length>1?r.setNode(t,e):r.setNode(t)})),this}setNode(t,e){return r.Z(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=F,this._children[t]={},this._children[F][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)}node(t){return this._nodes[t]}hasNode(t){return r.Z(this._nodes,t)}removeNode(t){var e=this;if(r.Z(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],a.Z(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),a.Z(s.Z(this._in[t]),n),delete this._in[t],delete this._preds[t],a.Z(s.Z(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this}setParent(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(f.Z(e))e=F;else{for(var n=e+="";!f.Z(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this}_removeFromParentsChildList(t){delete this._children[this._parent[t]][t]}parent(t){if(this._isCompound){var e=this._parent[t];if(e!==F)return e}}children(t){if(f.Z(t)&&(t=F),this._isCompound){var e=this._children[t];if(e)return s.Z(e)}else{if(t===F)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var e=this._preds[t];if(e)return s.Z(e)}successors(t){var e=this._sucs[t];if(e)return s.Z(e)}neighbors(t){var e=this.predecessors(t);if(e)return L(e,this.successors(t))}isLeaf(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length}filterNodes(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;a.Z(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),a.Z(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var r={};function o(t){var i=n.parent(t);return void 0===i||e.hasNode(i)?(r[t]=i,i):i in r?r[i]:o(i)}return this._isCompound&&a.Z(e.nodes(),(function(t){e.setParent(t,o(t))})),e}setDefaultEdgeLabel(t){return i.Z(t)||(t=o.Z(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return N.Z(this._edgeObjs)}setPath(t,e){var n=this,r=arguments;return D.Z(t,(function(t,o){return r.length>1?n.setEdge(t,o,e):n.setEdge(t,o),o})),this}setEdge(){var t,e,n,o,i=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(o=arguments[1],i=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(o=arguments[2],i=!0)),t=""+t,e=""+e,f.Z(n)||(n=""+n);var u=x(this._isDirected,t,e,n);if(r.Z(this._edgeLabels,u))return i&&(this._edgeLabels[u]=o),this;if(!f.Z(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[u]=i?o:this._defaultEdgeLabelFn(t,e,n);var c=function(t,e,n,r){var o=""+e,i=""+n;if(!t&&o>i){var s=o;o=i,i=s}var u={v:o,w:i};r&&(u.name=r);return u}(this._isDirected,t,e,n);return t=c.v,e=c.w,Object.freeze(c),this._edgeObjs[u]=c,M(this._preds[e],t),M(this._sucs[t],e),this._in[e][u]=c,this._out[t][u]=c,this._edgeCount++,this}edge(t,e,n){var r=1===arguments.length?U(this._isDirected,arguments[0]):x(this._isDirected,t,e,n);return this._edgeLabels[r]}hasEdge(t,e,n){var o=1===arguments.length?U(this._isDirected,arguments[0]):x(this._isDirected,t,e,n);return r.Z(this._edgeLabels,o)}removeEdge(t,e,n){var r=1===arguments.length?U(this._isDirected,arguments[0]):x(this._isDirected,t,e,n),o=this._edgeObjs[r];return o&&(t=o.v,e=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],I(this._preds[e],t),I(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this}inEdges(t,e){var n=this._in[t];if(n){var r=N.Z(n);return e?u.Z(r,(function(t){return t.v===e})):r}}outEdges(t,e){var n=this._out[t];if(n){var r=N.Z(n);return e?u.Z(r,(function(t){return t.w===e})):r}}nodeEdges(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}}function M(t,e){t[e]?t[e]++:t[e]=1}function I(t,e){--t[e]||delete t[e]}function x(t,e,n,r){var o=""+e,i=""+n;if(!t&&o>i){var s=o;o=i,i=s}return o+k+i+k+(f.Z(r)?S:r)}function U(t,e){return x(t,e.v,e.w,e.name)}P.prototype._nodeCount=0,P.prototype._edgeCount=0},45625:(t,e,n)=>{n.d(e,{k:()=>r.k});var r=n(52544)},63001:(t,e,n)=>{n.d(e,{Z:()=>u});var r=n(37834);const o=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this};const i=function(t){return this.__data__.has(t)};function s(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r.Z;++e<n;)this.add(t[e])}s.prototype.add=s.prototype.push=o,s.prototype.has=i;const u=s},76579:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},68774:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n<r;){var s=t[n];e(s,n,t)&&(i[o++]=s)}return i}},74073:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},58694:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},48451:(t,e,n)=>{n.d(e,{Z:()=>Y});var r=n(31667),o=n(76579),i=n(72954),s=n(31899),u=n(17179);const c=function(t,e){return t&&(0,s.Z)(e,(0,u.Z)(e),t)};var a=n(32957);const f=function(t,e){return t&&(0,s.Z)(e,(0,a.Z)(e),t)};var h=n(91050),d=n(87215),l=n(95695);const Z=function(t,e){return(0,s.Z)(t,(0,l.Z)(t),e)};var v=n(58694),b=n(12513),_=n(60532);const p=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)(0,v.Z)(e,(0,l.Z)(t)),t=(0,b.Z)(t);return e}:_.Z;const g=function(t,e){return(0,s.Z)(t,p(t),e)};var j=n(1808),y=n(63327);const m=function(t){return(0,y.Z)(t,a.Z,p)};var w=n(83970),O=Object.prototype.hasOwnProperty;const C=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&O.call(t,"index")&&(n.index=t.index,n.input=t.input),n};var A=n(41884);const E=function(t,e){var n=e?(0,A.Z)(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)};var L=/\w*$/;const N=function(t){var e=new t.constructor(t.source,L.exec(t));return e.lastIndex=t.lastIndex,e};var D=n(17685),S=D.Z?D.Z.prototype:void 0,F=S?S.valueOf:void 0;const k=function(t){return F?Object(F.call(t)):{}};var P=n(12701);const M=function(t,e,n){var r=t.constructor;switch(e){case"[object ArrayBuffer]":return(0,A.Z)(t);case"[object Boolean]":case"[object Date]":return new r(+t);case"[object DataView]":return E(t,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,P.Z)(t,n);case"[object Map]":case"[object Set]":return new r;case"[object Number]":case"[object String]":return new r(t);case"[object RegExp]":return N(t);case"[object Symbol]":return k(t)}};var I=n(73658),x=n(27771),U=n(77008),z=n(18533);const B=function(t){return(0,z.Z)(t)&&"[object Map]"==(0,w.Z)(t)};var $=n(21162),G=n(98351),R=G.Z&&G.Z.isMap;const V=R?(0,$.Z)(R):B;var W=n(77226);const q=function(t){return(0,z.Z)(t)&&"[object Set]"==(0,w.Z)(t)};var H=G.Z&&G.Z.isSet;const J=H?(0,$.Z)(H):q;var K="[object Arguments]",Q="[object Function]",T="[object Object]",X={};X[K]=X["[object Array]"]=X["[object ArrayBuffer]"]=X["[object DataView]"]=X["[object Boolean]"]=X["[object Date]"]=X["[object Float32Array]"]=X["[object Float64Array]"]=X["[object Int8Array]"]=X["[object Int16Array]"]=X["[object Int32Array]"]=X["[object Map]"]=X["[object Number]"]=X[T]=X["[object RegExp]"]=X["[object Set]"]=X["[object String]"]=X["[object Symbol]"]=X["[object Uint8Array]"]=X["[object Uint8ClampedArray]"]=X["[object Uint16Array]"]=X["[object Uint32Array]"]=!0,X["[object Error]"]=X[Q]=X["[object WeakMap]"]=!1;const Y=function t(e,n,s,l,v,b){var _,p=1&n,y=2&n,O=4&n;if(s&&(_=v?s(e,l,v,b):s(e)),void 0!==_)return _;if(!(0,W.Z)(e))return e;var A=(0,x.Z)(e);if(A){if(_=C(e),!p)return(0,d.Z)(e,_)}else{var E=(0,w.Z)(e),L=E==Q||"[object GeneratorFunction]"==E;if((0,U.Z)(e))return(0,h.Z)(e,p);if(E==T||E==K||L&&!v){if(_=y||L?{}:(0,I.Z)(e),!p)return y?g(e,f(_,e)):Z(e,c(_,e))}else{if(!X[E])return v?e:{};_=M(e,E,p)}}b||(b=new r.Z);var N=b.get(e);if(N)return N;b.set(e,_),J(e)?e.forEach((function(r){_.add(t(r,n,s,r,e,b))})):V(e)&&e.forEach((function(r,o){_.set(o,t(r,n,s,o,e,b))}));var D=O?y?m:j.Z:y?a.Z:u.Z,S=A?void 0:D(e);return(0,o.Z)(S||e,(function(r,o){S&&(r=e[o=r]),(0,i.Z)(_,o,t(r,n,s,o,e,b))})),_}},49811:(t,e,n)=>{n.d(e,{Z:()=>i});var r=n(2693),o=n(50585);const i=function(t,e){return function(n,r){if(null==n)return n;if(!(0,o.Z)(n))return t(n,r);for(var i=n.length,s=e?i:-1,u=Object(n);(e?s--:++s<i)&&!1!==r(u[s],s,u););return n}}(r.Z)},21692:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i<o;)if(e(t[i],i,t))return i;return-1}},10626:(t,e,n)=>{n.d(e,{Z:()=>a});var r=n(58694),o=n(17685),i=n(29169),s=n(27771),u=o.Z?o.Z.isConcatSpreadable:void 0;const c=function(t){return(0,s.Z)(t)||(0,i.Z)(t)||!!(u&&t&&t[u])};const a=function t(e,n,o,i,s){var u=-1,a=e.length;for(o||(o=c),s||(s=[]);++u<a;){var f=e[u];n>0&&o(f)?n>1?t(f,n-1,o,i,s):(0,r.Z)(s,f):i||(s[s.length]=f)}return s}},2693:(t,e,n)=>{n.d(e,{Z:()=>i});var r=n(61395),o=n(17179);const i=function(t,e){return t&&(0,r.Z)(t,e,o.Z)}},13317:(t,e,n)=>{n.d(e,{Z:()=>i});var r=n(22823),o=n(62281);const i=function(t,e){for(var n=0,i=(e=(0,r.Z)(e,t)).length;null!=t&&n<i;)t=t[(0,o.Z)(e[n++])];return n&&n==i?t:void 0}},63327:(t,e,n)=>{n.d(e,{Z:()=>i});var r=n(58694),o=n(27771);const i=function(t,e,n){var i=e(t);return(0,o.Z)(t)?i:(0,r.Z)(i,n(t))}},74765:(t,e,n)=>{n.d(e,{Z:()=>H});var r=n(31667),o=n(63001);const i=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1};var s=n(59548);const u=function(t,e,n,r,u,c){var a=1&n,f=t.length,h=e.length;if(f!=h&&!(a&&h>f))return!1;var d=c.get(t),l=c.get(e);if(d&&l)return d==e&&l==t;var Z=-1,v=!0,b=2&n?new o.Z:void 0;for(c.set(t,e),c.set(e,t);++Z<f;){var _=t[Z],p=e[Z];if(r)var g=a?r(p,_,Z,e,t,c):r(_,p,Z,t,e,c);if(void 0!==g){if(g)continue;v=!1;break}if(b){if(!i(e,(function(t,e){if(!(0,s.Z)(b,e)&&(_===t||u(_,t,n,r,c)))return b.push(e)}))){v=!1;break}}else if(_!==p&&!u(_,p,n,r,c)){v=!1;break}}return c.delete(t),c.delete(e),v};var c=n(17685),a=n(84073),f=n(79651);const h=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n};var d=n(6545),l=c.Z?c.Z.prototype:void 0,Z=l?l.valueOf:void 0;const v=function(t,e,n,r,o,i,s){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!i(new a.Z(t),new a.Z(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return(0,f.Z)(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var c=h;case"[object Set]":var l=1&r;if(c||(c=d.Z),t.size!=e.size&&!l)return!1;var v=s.get(t);if(v)return v==e;r|=2,s.set(t,e);var b=u(c(t),c(e),r,o,i,s);return s.delete(t),b;case"[object Symbol]":if(Z)return Z.call(t)==Z.call(e)}return!1};var b=n(1808),_=Object.prototype.hasOwnProperty;const p=function(t,e,n,r,o,i){var s=1&n,u=(0,b.Z)(t),c=u.length;if(c!=(0,b.Z)(e).length&&!s)return!1;for(var a=c;a--;){var f=u[a];if(!(s?f in e:_.call(e,f)))return!1}var h=i.get(t),d=i.get(e);if(h&&d)return h==e&&d==t;var l=!0;i.set(t,e),i.set(e,t);for(var Z=s;++a<c;){var v=t[f=u[a]],p=e[f];if(r)var g=s?r(p,v,f,e,t,i):r(v,p,f,t,e,i);if(!(void 0===g?v===p||o(v,p,n,r,i):g)){l=!1;break}Z||(Z="constructor"==f)}if(l&&!Z){var j=t.constructor,y=e.constructor;j==y||!("constructor"in t)||!("constructor"in e)||"function"==typeof j&&j instanceof j&&"function"==typeof y&&y instanceof y||(l=!1)}return i.delete(t),i.delete(e),l};var g=n(83970),j=n(27771),y=n(77008),m=n(18843),w="[object Arguments]",O="[object Array]",C="[object Object]",A=Object.prototype.hasOwnProperty;const E=function(t,e,n,o,i,s){var c=(0,j.Z)(t),a=(0,j.Z)(e),f=c?O:(0,g.Z)(t),h=a?O:(0,g.Z)(e),d=(f=f==w?C:f)==C,l=(h=h==w?C:h)==C,Z=f==h;if(Z&&(0,y.Z)(t)){if(!(0,y.Z)(e))return!1;c=!0,d=!1}if(Z&&!d)return s||(s=new r.Z),c||(0,m.Z)(t)?u(t,e,n,o,i,s):v(t,e,f,n,o,i,s);if(!(1&n)){var b=d&&A.call(t,"__wrapped__"),_=l&&A.call(e,"__wrapped__");if(b||_){var E=b?t.value():t,L=_?e.value():e;return s||(s=new r.Z),i(E,L,n,o,s)}}return!!Z&&(s||(s=new r.Z),p(t,e,n,o,i,s))};var L=n(18533);const N=function t(e,n,r,o,i){return e===n||(null==e||null==n||!(0,L.Z)(e)&&!(0,L.Z)(n)?e!=e&&n!=n:E(e,n,r,o,t,i))};const D=function(t,e,n,o){var i=n.length,s=i,u=!o;if(null==t)return!s;for(t=Object(t);i--;){var c=n[i];if(u&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++i<s;){var a=(c=n[i])[0],f=t[a],h=c[1];if(u&&c[2]){if(void 0===f&&!(a in t))return!1}else{var d=new r.Z;if(o)var l=o(f,h,a,t,e,d);if(!(void 0===l?N(h,f,3,o,d):l))return!1}}return!0};var S=n(77226);const F=function(t){return t==t&&!(0,S.Z)(t)};var k=n(17179);const P=function(t){for(var e=(0,k.Z)(t),n=e.length;n--;){var r=e[n],o=t[r];e[n]=[r,o,F(o)]}return e};const M=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}};const I=function(t){var e=P(t);return 1==e.length&&e[0][2]?M(e[0][0],e[0][1]):function(n){return n===t||D(n,t,e)}};var x=n(13317);const U=function(t,e,n){var r=null==t?void 0:(0,x.Z)(t,e);return void 0===r?n:r};var z=n(75487),B=n(99365),$=n(62281);const G=function(t,e){return(0,B.Z)(t)&&F(e)?M((0,$.Z)(t),e):function(n){var r=U(n,t);return void 0===r&&r===e?(0,z.Z)(n,t):N(e,r,3)}};var R=n(69203),V=n(54193);const W=function(t){return function(e){return(0,x.Z)(e,t)}};const q=function(t){return(0,B.Z)(t)?(0,V.Z)((0,$.Z)(t)):W(t)};const H=function(t){return"function"==typeof t?t:null==t?R.Z:"object"==typeof t?(0,j.Z)(t)?G(t[0],t[1]):I(t):q(t)}},54193:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t){return function(e){return null==e?void 0:e[t]}}},59548:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t,e){return t.has(e)}},68882:(t,e,n)=>{n.d(e,{Z:()=>o});var r=n(69203);const o=function(t){return"function"==typeof t?t:r.Z}},22823:(t,e,n)=>{n.d(e,{Z:()=>f});var r=n(27771),o=n(99365),i=n(42454);var s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,u=/\\(\\)?/g;const c=function(t){var e=(0,i.Z)(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(s,(function(t,n,r,o){e.push(r?o.replace(u,"$1"):n||t)})),e}));var a=n(50751);const f=function(t,e){return(0,r.Z)(t)?t:(0,o.Z)(t,e)?[t]:c((0,a.Z)(t))}},1808:(t,e,n)=>{n.d(e,{Z:()=>s});var r=n(63327),o=n(95695),i=n(17179);const s=function(t){return(0,r.Z)(t,i.Z,o.Z)}},95695:(t,e,n)=>{n.d(e,{Z:()=>u});var r=n(68774),o=n(60532),i=Object.prototype.propertyIsEnumerable,s=Object.getOwnPropertySymbols;const u=s?function(t){return null==t?[]:(t=Object(t),(0,r.Z)(s(t),(function(e){return i.call(t,e)})))}:o.Z},16174:(t,e,n)=>{n.d(e,{Z:()=>a});var r=n(22823),o=n(29169),i=n(27771),s=n(56009),u=n(1656),c=n(62281);const a=function(t,e,n){for(var a=-1,f=(e=(0,r.Z)(e,t)).length,h=!1;++a<f;){var d=(0,c.Z)(e[a]);if(!(h=null!=t&&n(t,d)))break;t=t[d]}return h||++a!=f?h:!!(f=null==t?0:t.length)&&(0,u.Z)(f)&&(0,s.Z)(d,f)&&((0,i.Z)(t)||(0,o.Z)(t))}},99365:(t,e,n)=>{n.d(e,{Z:()=>u});var r=n(27771),o=n(72714),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;const u=function(t,e){if((0,r.Z)(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!(0,o.Z)(t))||(s.test(t)||!i.test(t)||null!=e&&t in Object(e))}},6545:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},62281:(t,e,n)=>{n.d(e,{Z:()=>o});var r=n(72714);const o=function(t){if("string"==typeof t||(0,r.Z)(t))return t;var e=t+"";return"0"==e&&1/t==-Infinity?"-0":e}},13445:(t,e,n)=>{n.d(e,{Z:()=>c});var r=n(68774),o=n(49811);const i=function(t,e){var n=[];return(0,o.Z)(t,(function(t,r,o){e(t,r,o)&&n.push(t)})),n};var s=n(74765),u=n(27771);const c=function(t,e){return((0,u.Z)(t)?r.Z:i)(t,(0,s.Z)(e,3))}},70870:(t,e,n)=>{n.d(e,{Z:()=>u});var r=n(76579),o=n(49811),i=n(68882),s=n(27771);const u=function(t,e){return((0,s.Z)(t)?r.Z:o.Z)(t,(0,i.Z)(e))}},17452:(t,e,n)=>{n.d(e,{Z:()=>s});var r=Object.prototype.hasOwnProperty;const o=function(t,e){return null!=t&&r.call(t,e)};var i=n(16174);const s=function(t,e){return null!=t&&(0,i.Z)(t,e,o)}},75487:(t,e,n)=>{n.d(e,{Z:()=>i});const r=function(t,e){return null!=t&&e in Object(t)};var o=n(16174);const i=function(t,e){return null!=t&&(0,o.Z)(t,e,r)}},72714:(t,e,n)=>{n.d(e,{Z:()=>i});var r=n(93589),o=n(18533);const i=function(t){return"symbol"==typeof t||(0,o.Z)(t)&&"[object Symbol]"==(0,r.Z)(t)}},49360:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(t){return void 0===t}},17179:(t,e,n)=>{n.d(e,{Z:()=>s});var r=n(87668),o=n(39473),i=n(50585);const s=function(t){return(0,i.Z)(t)?(0,r.Z)(t):(0,o.Z)(t)}},92344:(t,e,n)=>{n.d(e,{Z:()=>c});const r=function(t,e,n,r){var o=-1,i=null==t?0:t.length;for(r&&i&&(n=t[++o]);++o<i;)n=e(n,t[o],o,t);return n};var o=n(49811),i=n(74765);const s=function(t,e,n,r,o){return o(t,(function(t,o,i){n=r?(r=!1,t):e(n,t,o,i)})),n};var u=n(27771);const c=function(t,e,n){var c=(0,u.Z)(t)?r:s,a=arguments.length<3;return c(t,(0,i.Z)(e,4),n,a,o.Z)}},60532:(t,e,n)=>{n.d(e,{Z:()=>r});const r=function(){return[]}},50751:(t,e,n)=>{n.d(e,{Z:()=>f});var r=n(17685),o=n(74073),i=n(27771),s=n(72714),u=r.Z?r.Z.prototype:void 0,c=u?u.toString:void 0;const a=function t(e){if("string"==typeof e)return e;if((0,i.Z)(e))return(0,o.Z)(e,t)+"";if((0,s.Z)(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-Infinity?"-0":n};const f=function(t){return null==t?"":a(t)}},34148:(t,e,n)=>{n.d(e,{Z:()=>s});var r=n(74073);const o=function(t,e){return(0,r.Z)(e,(function(e){return t[e]}))};var i=n(17179);const s=function(t){return null==t?[]:o(t,(0,i.Z)(t))}}}]); \ No newline at end of file diff --git a/assets/js/3594.f73537cc.js b/assets/js/3594.f73537cc.js new file mode 100644 index 0000000000..0a605fb057 --- /dev/null +++ b/assets/js/3594.f73537cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3594],{53594:(e,t,s)=>{s.d(t,{diagram:()=>N});var o=s(27180),i=s(45625),a=s(64218),n=s(28758),r=s(60905);s(27484),s(17967),s(27856),s(41644),s(46060);const d="rect",c="rectWithTitle",l="statediagram",p=`${l}-state`,b="transition",g=`${b} note-edge`,h=`${l}-note`,u=`${l}-cluster`,y=`${l}-cluster-alt`,f="parent",w="note",m="----",x=`${m}${w}`,$=`${m}${f}`,T="fill:none",S="fill: #333",k="text",D="normal";let A={},v=0;function B(e="",t=0,s="",o=m){return`state-${e}${null!==s&&s.length>0?`${o}${s}`:""}-${t}`}const C=(e,t,s,i,a,r)=>{const l=s.id,b=null==(m=i[l])?"":m.classes?m.classes.join(" "):"";var m;if("root"!==l){let t=d;!0===s.start&&(t="start"),!1===s.start&&(t="end"),s.type!==o.D&&(t=s.type),A[l]||(A[l]={id:l,shape:t,description:n.e.sanitizeText(l,(0,n.c)()),classes:`${b} ${p}`});const i=A[l];s.description&&(Array.isArray(i.description)?(i.shape=c,i.description.push(s.description)):i.description.length>0?(i.shape=c,i.description===l?i.description=[s.description]:i.description=[i.description,s.description]):(i.shape=d,i.description=s.description),i.description=n.e.sanitizeTextOrArray(i.description,(0,n.c)())),1===i.description.length&&i.shape===c&&(i.shape=d),!i.type&&s.doc&&(n.l.info("Setting cluster for ",l,R(s)),i.type="group",i.dir=R(s),i.shape=s.type===o.a?"divider":"roundedWithTitle",i.classes=i.classes+" "+u+" "+(r?y:""));const a={labelStyle:"",shape:i.shape,labelText:i.description,classes:i.classes,style:"",id:l,dir:i.dir,domId:B(l,v),type:i.type,padding:15,centerLabel:!0};if(s.note){const t={labelStyle:"",shape:"note",labelText:s.note.text,classes:h,style:"",id:l+x+"-"+v,domId:B(l,v,w),type:i.type,padding:15},o={labelStyle:"",shape:"noteGroup",labelText:s.note.text,classes:i.classes,style:"",id:l+$,domId:B(l,v,f),type:"group",padding:0};v++;const n=l+$;e.setNode(n,o),e.setNode(t.id,t),e.setNode(l,a),e.setParent(l,n),e.setParent(t.id,n);let r=l,d=t.id;"left of"===s.note.position&&(r=t.id,d=l),e.setEdge(r,d,{arrowhead:"none",arrowType:"",style:T,labelStyle:"",classes:g,arrowheadStyle:S,labelpos:"c",labelType:k,thickness:D})}else e.setNode(l,a)}t&&"root"!==t.id&&(n.l.trace("Setting node ",l," to be child of its parent ",t.id),e.setParent(l,t.id)),s.doc&&(n.l.trace("Adding nodes children "),E(e,s,s.doc,i,a,!r))},E=(e,t,s,i,a,r)=>{n.l.trace("items",s),s.forEach((s=>{switch(s.stmt){case o.b:case o.D:C(e,t,s,i,a,r);break;case o.S:{C(e,t,s.state1,i,a,r),C(e,t,s.state2,i,a,r);const o={id:"edge"+v,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:T,labelStyle:"",label:n.e.sanitizeText(s.description,(0,n.c)()),arrowheadStyle:S,labelpos:"c",labelType:k,thickness:D,classes:b};e.setEdge(s.state1.id,s.state2.id,o,v),v++}}}))},R=(e,t=o.c)=>{let s=t;if(e.doc)for(let o=0;o<e.doc.length;o++){const t=e.doc[o];"dir"===t.stmt&&(s=t.value)}return s},V={setConf:function(e){const t=Object.keys(e);for(const s of t)e[s]},getClasses:function(e,t){return t.db.extract(t.db.getRootDocV2()),t.db.getClasses()},draw:async function(e,t,s,o){n.l.info("Drawing state diagram (v2)",t),A={},o.db.getDirection();const{securityLevel:c,state:p}=(0,n.c)(),b=p.nodeSpacing||50,g=p.rankSpacing||50;n.l.info(o.db.getRootDocV2()),o.db.extract(o.db.getRootDocV2()),n.l.info(o.db.getRootDocV2());const h=o.db.getStates(),u=new i.k({multigraph:!0,compound:!0}).setGraph({rankdir:R(o.db.getRootDocV2()),nodesep:b,ranksep:g,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));let y;C(u,void 0,o.db.getRootDocV2(),h,o.db,!0),"sandbox"===c&&(y=(0,a.Ys)("#i"+t));const f="sandbox"===c?(0,a.Ys)(y.nodes()[0].contentDocument.body):(0,a.Ys)("body"),w=f.select(`[id="${t}"]`),m=f.select("#"+t+" g");await(0,r.r)(m,u,["barb"],l,t);n.u.insertTitle(w,"statediagramTitleText",p.titleTopMargin,o.db.getDiagramTitle());const x=w.node().getBBox(),$=x.width+16,T=x.height+16;w.attr("class",l);const S=w.node().getBBox();(0,n.i)(w,T,$,p.useMaxWidth);const k=`${S.x-8} ${S.y-8} ${$} ${T}`;n.l.debug(`viewBox ${k}`),w.attr("viewBox",k);const D=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const i of D){const e=i.getBBox(),t=document.createElementNS("http://www.w3.org/2000/svg",d);t.setAttribute("rx",0),t.setAttribute("ry",0),t.setAttribute("width",e.width),t.setAttribute("height",e.height),i.insertBefore(t,i.firstChild)}}},N={parser:o.p,db:o.d,renderer:V,styles:o.s,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,o.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/3720c009.e2cfbcc1.js b/assets/js/3720c009.e2cfbcc1.js new file mode 100644 index 0000000000..bc8cbe4491 --- /dev/null +++ b/assets/js/3720c009.e2cfbcc1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3751],{9861:(t,e,a)=>{a.r(e),a.d(e,{default:()=>p});a(67294);var s=a(90512),n=a(1944),r=a(35281),l=a(95999);const c=()=>(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a(13008),o=a(92503);const g={tag:"tag_Nnez"};var u=a(85893);function h(t){let{letterEntry:e}=t;return(0,u.jsxs)("article",{children:[(0,u.jsx)(o.Z,{as:"h2",id:e.letter,children:e.letter}),(0,u.jsx)("ul",{className:"padding--none",children:e.tags.map((t=>(0,u.jsx)("li",{className:g.tag,children:(0,u.jsx)(i.Z,{...t})},t.permalink)))}),(0,u.jsx)("hr",{})]})}function d(t){let{tags:e}=t;const a=function(t){const e={};return Object.values(t).forEach((t=>{const a=function(t){return t[0].toUpperCase()}(t.label);e[a]??=[],e[a].push(t)})),Object.entries(e).sort(((t,e)=>{let[a]=t,[s]=e;return a.localeCompare(s)})).map((t=>{let[e,a]=t;return{letter:e,tags:a.sort(((t,e)=>t.label.localeCompare(e.label)))}}))}(e);return(0,u.jsx)("section",{className:"margin-vert--lg",children:a.map((t=>(0,u.jsx)(h,{letterEntry:t},t.letter)))})}var j=a(90197);function m(t){let{title:e}=t;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(n.d,{title:e}),(0,u.jsx)(j.Z,{tag:"doc_tags_list"})]})}function x(t){let{tags:e,title:a}=t;return(0,u.jsx)(n.FG,{className:(0,s.Z)(r.k.page.docsTagsListPage),children:(0,u.jsx)("div",{className:"container margin-vert--lg",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("main",{className:"col col--8 col--offset-2",children:[(0,u.jsx)(o.Z,{as:"h1",children:a}),(0,u.jsx)(d,{tags:e})]})})})})}function p(t){const e=c();return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(m,{...t,title:e}),(0,u.jsx)(x,{...t,title:e})]})}},13008:(t,e,a)=>{a.d(e,{Z:()=>c});a(67294);var s=a(90512),n=a(33692);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=a(85893);function c(t){let{permalink:e,label:a,count:c}=t;return(0,l.jsxs)(n.Z,{href:e,className:(0,s.Z)(r.tag,c?r.tagWithCount:r.tagRegular),children:[a,c&&(0,l.jsx)("span",{children:c})]})}}}]); \ No newline at end of file diff --git a/assets/js/3727.85fa440d.js b/assets/js/3727.85fa440d.js new file mode 100644 index 0000000000..e6e362732f --- /dev/null +++ b/assets/js/3727.85fa440d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3727],{43349:(e,t,n)=>{n.d(t,{a:()=>l});var r=n(96225);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.bg(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},96225:(e,t,n)=>{n.d(t,{$p:()=>d,O1:()=>a,WR:()=>p,bF:()=>o,bg:()=>c});var r=n(37514),l=n(73234);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.Z(n)){var o=n.transition;if(l.Z(o))return o(e)}return e}},59792:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(61691),l=n(71610);const o=(e,t)=>r.Z.lang.round(l.Z.parse(e)[t])},43727:(e,t,n)=>{n.d(t,{diagram:()=>a});var r=n(93920),l=n(36841),o=n(28758);n(64218),n(45625),n(41644),n(46060),n(27484),n(17967),n(27856);const a={parser:r.p,db:r.f,renderer:l.f,styles:l.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,(0,o.p)({flowchart:{arrowMarkerAbsolute:e.arrowMarkerAbsolute}}),l.f.setConf(e.flowchart),r.f.clear(),r.f.setGen("gen-2")}}},36841:(e,t,n)=>{n.d(t,{a:()=>f,f:()=>w});var r=n(45625),l=n(64218),o=n(28758),a=n(60905),s=n(43349),i=n(59792),c=n(51117);const d={},p=function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`);Object.keys(e).forEach((function(n){const r=e[n];let c="default";r.classes.length>0&&(c=r.classes.join(" ")),c+=" flowchart-label";const d=(0,o.k)(r.styles);let p,b=void 0!==r.text?r.text:r.id;if(o.l.info("vertex",r,r.labelType),"markdown"===r.labelType)o.l.info("vertex",r,r.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b.replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`))};p=(0,s.a)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",d.labelStyle.replace("color:","fill:"));const t=b.split(o.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}p=e}let w=0,f="";switch(r.type){case"round":w=5,f="rect";break;case"square":case"group":default:f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":case"odd_right":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"doublecircle":f="doublecircle"}t.setNode(r.id,{labelStyle:d.labelStyle,shape:f,labelText:b,labelType:r.labelType,rx:w,ry:w,class:c,style:d.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:d.labelStyle,labelType:r.labelType,shape:f,labelText:b,rx:w,ry:w,class:c,style:d.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:(0,o.c)().flowchart.padding})}))},b=function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}e.forEach((function(n){s++;const c="L-"+n.start+"-"+n.end;void 0===i[c]?(i[c]=0,o.l.info("abc78 new entry",c,i[c])):(i[c]++,o.l.info("abc78 new entry",c,i[c]));let p=c+"-"+i[c];o.l.info("abc78 new link id to be used is",c,p,i[c]);const b="LS-"+n.start,w="LE-"+n.end,f={style:"",labelStyle:""};switch(f.minlen=n.length||1,"arrow_open"===n.type?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle"}let u="",h="";switch(n.stroke){case"normal":u="fill:none;",void 0!==r&&(u=r),void 0!==a&&(h=a),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;"}if(void 0!==n.style){const e=(0,o.k)(n.style);u=e.style,h=e.labelStyle}f.style=f.style+=u,f.labelStyle=f.labelStyle+=h,void 0!==n.interpolate?f.curve=(0,o.n)(n.interpolate,l.c_6):void 0!==e.defaultInterpolate?f.curve=(0,o.n)(e.defaultInterpolate,l.c_6):f.curve=(0,o.n)(d.curve,l.c_6),void 0===n.text?void 0!==n.style&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType=n.labelType,f.label=n.text.replace(o.e.lineBreakRegex,"\n"),void 0===n.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=p,f.classes="flowchart-link "+b+" "+w,t.setEdge(n.start,n.end,f,s)}))},w={setConf:function(e){const t=Object.keys(e);for(const n of t)d[n]=e[n]},addVertices:p,addEdges:b,getClasses:function(e,t){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),w=d.nodeSpacing||50,f=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ys)("#i"+t));const h="sandbox"===c?(0,l.Ys)(u.nodes()[0].contentDocument.body):(0,l.Ys)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.k({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:w,ranksep:f,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.td_)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}p(v,y,t,h,g,s),b(m,y);const T=h.select(`[id="${t}"]`),_=h.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.o)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",e.width),n.setAttribute("height",e.height),t.insertBefore(n,t.firstChild)}}Object.keys(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ys)("#"+t+' [id="'+e+'"]');if(r){const e=g.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===c?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const t=r.insert((function(){return e}),":first-child"),l=r.select(".label-container");l&&t.append((function(){return l.node()}));const o=r.select(".label");o&&t.append((function(){return o.node()}))}}}))}},f=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=i.Z,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return c.Z(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/assets/js/381.d1de7a2e.js b/assets/js/381.d1de7a2e.js new file mode 100644 index 0000000000..6474f26048 --- /dev/null +++ b/assets/js/381.d1de7a2e.js @@ -0,0 +1,10824 @@ +"use strict"; +exports.id = 381; +exports.ids = [381]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 97381: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(49206); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28758); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + + +let edgeCount = 0; +const drawEdge = function(elem, path, relation, conf, diagObj) { + const getRelationType = function(type) { + switch (type) { + case diagObj.db.relationType.AGGREGATION: + return "aggregation"; + case diagObj.db.relationType.EXTENSION: + return "extension"; + case diagObj.db.relationType.COMPOSITION: + return "composition"; + case diagObj.db.relationType.DEPENDENCY: + return "dependency"; + case diagObj.db.relationType.LOLLIPOP: + return "lollipop"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "relation"); + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + if (relation.relation.lineType == 1) { + svgPath.attr("class", "relation dashed-line"); + } + if (relation.relation.lineType == 10) { + svgPath.attr("class", "relation dotted-line"); + } + if (relation.relation.type1 !== "none") { + svgPath.attr( + "marker-start", + "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)" + ); + } + if (relation.relation.type2 !== "none") { + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)" + ); + } + let x, y; + const l = path.points.length; + let labelPosition = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); + x = labelPosition.x; + y = labelPosition.y; + let p1_card_x, p1_card_y; + let p2_card_x, p2_card_y; + if (l % 2 !== 0 && l > 1) { + let cardinality_1_point = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( + relation.relation.type1 !== "none", + path.points, + path.points[0] + ); + let cardinality_2_point = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.u.calcCardinalityPosition( + relation.relation.type2 !== "none", + path.points, + path.points[l - 1] + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point)); + p1_card_x = cardinality_1_point.x; + p1_card_y = cardinality_1_point.y; + p2_card_x = cardinality_2_point.x; + p2_card_y = cardinality_2_point.y; + } + if (relation.title !== void 0) { + const g = elem.append("g").attr("class", "classLabel"); + const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title); + window.label = label; + const bounds = label.node().getBBox(); + g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds.x - conf.padding / 2).attr("y", bounds.y - conf.padding / 2).attr("width", bounds.width + conf.padding).attr("height", bounds.height + conf.padding); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering relation " + JSON.stringify(relation)); + if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1); + } + if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") { + const g = elem.append("g").attr("class", "cardinality"); + g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2); + } + edgeCount++; +}; +const drawClass = function(elem, classDef, conf, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering class ", classDef, conf); + const id = classDef.id; + const classInfo = { + id, + label: classDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id)).attr("class", "classGroup"); + let title; + if (classDef.link) { + title = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } else { + title = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + } + let isFirst = true; + classDef.annotations.forEach(function(member) { + const titleText2 = title.append("tspan").text("«" + member + "»"); + if (!isFirst) { + titleText2.attr("dy", conf.textHeight); + } + isFirst = false; + }); + let classTitleString = getClassTitleString(classDef); + const classTitle = title.append("tspan").text(classTitleString).attr("class", "title"); + if (!isFirst) { + classTitle.attr("dy", conf.textHeight); + } + const titleHeight = title.node().getBBox().height; + let membersLine; + let membersBox; + let methodsLine; + if (classDef.members.length > 0) { + membersLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin / 2).attr("y2", conf.padding + titleHeight + conf.dividerMargin / 2); + const members = g.append("text").attr("x", conf.padding).attr("y", titleHeight + conf.dividerMargin + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.members.forEach(function(member) { + addTspan(members, member, isFirst, conf); + isFirst = false; + }); + membersBox = members.node().getBBox(); + } + if (classDef.methods.length > 0) { + methodsLine = g.append("line").attr("x1", 0).attr("y1", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr("y2", conf.padding + titleHeight + conf.dividerMargin + membersBox.height); + const methods = g.append("text").attr("x", conf.padding).attr("y", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr("fill", "white").attr("class", "classText"); + isFirst = true; + classDef.methods.forEach(function(method) { + addTspan(methods, method, isFirst, conf); + isFirst = false; + }); + } + const classBox = g.node().getBBox(); + var cssClassStr = " "; + if (classDef.cssClasses.length > 0) { + cssClassStr = cssClassStr + classDef.cssClasses.join(" "); + } + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf.padding).attr("height", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr("class", cssClassStr); + const rectWidth = rect.node().getBBox().width; + title.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + if (classDef.tooltip) { + title.insert("title").text(classDef.tooltip); + } + if (membersLine) { + membersLine.attr("x2", rectWidth); + } + if (methodsLine) { + methodsLine.attr("x2", rectWidth); + } + classInfo.width = rectWidth; + classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; + return classInfo; +}; +const getClassTitleString = function(classDef) { + let classTitleString = classDef.id; + if (classDef.type) { + classTitleString += "<" + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.v)(classDef.type) + ">"; + } + return classTitleString; +}; +const drawNote = function(elem, note, conf, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering note ", note, conf); + const id = note.id; + const noteInfo = { + id, + text: note.text, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "classGroup"); + let text = g.append("text").attr("y", conf.textHeight + conf.padding).attr("x", 0); + const lines = JSON.parse(`"${note.text}"`).split("\n"); + lines.forEach(function(line2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding line: ${line2}`); + text.append("tspan").text(line2).attr("class", "title").attr("dy", conf.textHeight); + }); + const noteBox = g.node().getBBox(); + const rect = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf.padding).attr( + "height", + noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin + ); + const rectWidth = rect.node().getBBox().width; + text.node().childNodes.forEach(function(x) { + x.setAttribute("x", (rectWidth - x.getBBox().width) / 2); + }); + noteInfo.width = rectWidth; + noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin; + return noteInfo; +}; +const addTspan = function(textEl, member, isFirst, conf) { + const { displayText, cssStyle } = member.getDisplayDetails(); + const tSpan = textEl.append("tspan").attr("x", conf.padding).text(displayText); + if (cssStyle !== "") { + tSpan.attr("style", member.cssStyle); + } + if (!isFirst) { + tSpan.attr("dy", conf.textHeight); + } +}; +const svgDraw = { + getClassTitleString, + drawClass, + drawEdge, + drawNote +}; +let idCache = {}; +const padding = 20; +const getGraphId = function(label) { + const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label); + if (foundEntry) { + return foundEntry[0]; + } +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "extensionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", "extensionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); + elem.append("defs").append("marker").attr("id", "compositionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "compositionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "aggregationEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().class; + idCache = {}; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Rendering diagram " + text); + const securityLevel = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true + }); + g.setGraph({ + isMultiGraph: true + }); + g.setDefaultEdgeLabel(function() { + return {}; + }); + const classes = diagObj.db.getClasses(); + const keys = Object.keys(classes); + for (const key of keys) { + const classDef = classes[key]; + const node = svgDraw.drawClass(diagram2, classDef, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Org height: " + node.height); + } + const relations = diagObj.db.getRelations(); + relations.forEach(function(relation) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info( + "tjoho" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation) + ); + g.setEdge( + getGraphId(relation.id1), + getGraphId(relation.id2), + { + relation + }, + relation.title || "DEFAULT" + ); + }); + const notes = diagObj.db.getNotes(); + notes.forEach(function(note) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`Adding note: ${JSON.stringify(note)}`); + const node = svgDraw.drawNote(diagram2, note, conf, diagObj); + idCache[node.id] = node; + g.setNode(node.id, node); + if (note.class && note.class in classes) { + g.setEdge( + note.id, + getGraphId(note.class), + { + relation: { + id1: note.id, + id2: note.class, + relation: { + type1: "none", + type2: "none", + lineType: 10 + } + } + }, + "DEFAULT" + ); + } + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(g); + g.nodes().forEach(function(v) { + if (v !== void 0 && g.node(v) !== void 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Node " + v + ": " + JSON.stringify(g.node(v))); + root.select("#" + (diagObj.db.lookUpDomId(v) || v)).attr( + "transform", + "translate(" + (g.node(v).x - g.node(v).width / 2) + "," + (g.node(v).y - g.node(v).height / 2) + " )" + ); + } + }); + g.edges().forEach(function(e) { + if (e !== void 0 && g.edge(e) !== void 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(g.edge(e))); + svgDraw.drawEdge(diagram2, g.edge(e), g.edge(e).relation, conf, diagObj); + } + }); + const svgBounds = diagram2.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug(`viewBox ${vBox}`); + diagram2.attr("viewBox", vBox); +}; +const renderer = { + draw +}; +const diagram = { + parser: _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 49206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 17], $V1 = [1, 18], $V2 = [1, 19], $V3 = [1, 39], $V4 = [1, 40], $V5 = [1, 25], $V6 = [1, 23], $V7 = [1, 24], $V8 = [1, 31], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 43], $Vj = [1, 30], $Vk = [1, 42], $Vl = [1, 44], $Vm = [1, 41], $Vn = [1, 45], $Vo = [1, 9], $Vp = [1, 8, 9], $Vq = [1, 56], $Vr = [1, 57], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 60], $Vv = [1, 61], $Vw = [1, 62], $Vx = [1, 8, 9, 39], $Vy = [1, 74], $Vz = [1, 8, 9, 12, 13, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], $VA = [1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 46, 59, 60, 61, 62, 63, 64, 65, 70, 72, 74, 80, 95, 97, 98], $VB = [13, 74, 80, 95, 97, 98], $VC = [13, 64, 65, 74, 80, 95, 97, 98], $VD = [13, 59, 60, 61, 62, 63, 74, 80, 95, 97, 98], $VE = [1, 93], $VF = [1, 110], $VG = [1, 108], $VH = [1, 102], $VI = [1, 103], $VJ = [1, 104], $VK = [1, 105], $VL = [1, 106], $VM = [1, 107], $VN = [1, 109], $VO = [1, 8, 9, 37, 39, 42], $VP = [1, 8, 9, 21], $VQ = [1, 8, 9, 78], $VR = [1, 8, 9, 21, 73, 74, 78, 80, 81, 82, 83, 84, 85]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statements": 5, "graphConfig": 6, "CLASS_DIAGRAM": 7, "NEWLINE": 8, "EOF": 9, "statement": 10, "classLabel": 11, "SQS": 12, "STR": 13, "SQE": 14, "namespaceName": 15, "alphaNumToken": 16, "className": 17, "classLiteralName": 18, "GENERICTYPE": 19, "relationStatement": 20, "LABEL": 21, "namespaceStatement": 22, "classStatement": 23, "memberStatement": 24, "annotationStatement": 25, "clickStatement": 26, "styleStatement": 27, "cssClassStatement": 28, "noteStatement": 29, "direction": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "namespaceIdentifier": 36, "STRUCT_START": 37, "classStatements": 38, "STRUCT_STOP": 39, "NAMESPACE": 40, "classIdentifier": 41, "STYLE_SEPARATOR": 42, "members": 43, "CLASS": 44, "ANNOTATION_START": 45, "ANNOTATION_END": 46, "MEMBER": 47, "SEPARATOR": 48, "relation": 49, "NOTE_FOR": 50, "noteText": 51, "NOTE": 52, "direction_tb": 53, "direction_bt": 54, "direction_rl": 55, "direction_lr": 56, "relationType": 57, "lineType": 58, "AGGREGATION": 59, "EXTENSION": 60, "COMPOSITION": 61, "DEPENDENCY": 62, "LOLLIPOP": 63, "LINE": 64, "DOTTED_LINE": 65, "CALLBACK": 66, "LINK": 67, "LINK_TARGET": 68, "CLICK": 69, "CALLBACK_NAME": 70, "CALLBACK_ARGS": 71, "HREF": 72, "STYLE": 73, "ALPHA": 74, "stylesOpt": 75, "CSSCLASS": 76, "style": 77, "COMMA": 78, "styleComponent": 79, "NUM": 80, "COLON": 81, "UNIT": 82, "SPACE": 83, "BRKT": 84, "PCT": 85, "commentToken": 86, "textToken": 87, "graphCodeTokens": 88, "textNoTagsToken": 89, "TAGSTART": 90, "TAGEND": 91, "==": 92, "--": 93, "DEFAULT": 94, "MINUS": 95, "keywords": 96, "UNICODE_TEXT": 97, "BQUOTE_STR": 98, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 19: "GENERICTYPE", 21: "LABEL", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 37: "STRUCT_START", 39: "STRUCT_STOP", 40: "NAMESPACE", 42: "STYLE_SEPARATOR", 44: "CLASS", 45: "ANNOTATION_START", 46: "ANNOTATION_END", 47: "MEMBER", 48: "SEPARATOR", 50: "NOTE_FOR", 52: "NOTE", 53: "direction_tb", 54: "direction_bt", 55: "direction_rl", 56: "direction_lr", 59: "AGGREGATION", 60: "EXTENSION", 61: "COMPOSITION", 62: "DEPENDENCY", 63: "LOLLIPOP", 64: "LINE", 65: "DOTTED_LINE", 66: "CALLBACK", 67: "LINK", 68: "LINK_TARGET", 69: "CLICK", 70: "CALLBACK_NAME", 71: "CALLBACK_ARGS", 72: "HREF", 73: "STYLE", 74: "ALPHA", 76: "CSSCLASS", 78: "COMMA", 80: "NUM", 81: "COLON", 82: "UNIT", 83: "SPACE", 84: "BRKT", 85: "PCT", 88: "graphCodeTokens", 90: "TAGSTART", 91: "TAGEND", 92: "==", 93: "--", 94: "DEFAULT", 95: "MINUS", 96: "keywords", 97: "UNICODE_TEXT", 98: "BQUOTE_STR" }, + productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 2], [17, 1], [17, 1], [17, 2], [17, 2], [17, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [22, 4], [22, 5], [36, 2], [38, 1], [38, 2], [38, 3], [23, 1], [23, 3], [23, 4], [23, 6], [41, 2], [41, 3], [25, 4], [43, 1], [43, 2], [24, 1], [24, 2], [24, 1], [24, 1], [20, 3], [20, 4], [20, 4], [20, 5], [29, 3], [29, 2], [30, 1], [30, 1], [30, 1], [30, 1], [49, 3], [49, 2], [49, 2], [49, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [58, 1], [58, 1], [26, 3], [26, 4], [26, 3], [26, 4], [26, 4], [26, 5], [26, 3], [26, 4], [26, 4], [26, 5], [26, 4], [26, 5], [26, 5], [26, 6], [27, 3], [28, 3], [75, 1], [75, 3], [77, 1], [77, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [86, 1], [86, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [89, 1], [89, 1], [89, 1], [89, 1], [16, 1], [16, 1], [16, 1], [16, 1], [18, 1], [51, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 8: + this.$ = $$[$0 - 1]; + break; + case 9: + case 11: + case 12: + this.$ = $$[$0]; + break; + case 10: + case 13: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 14: + case 15: + this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; + break; + case 16: + yy.addRelation($$[$0]); + break; + case 17: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); + yy.addRelation($$[$0 - 1]); + break; + case 27: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 28: + case 29: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 30: + yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); + break; + case 31: + yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); + break; + case 32: + this.$ = $$[$0]; + yy.addNamespace($$[$0]); + break; + case 33: + this.$ = [$$[$0]]; + break; + case 34: + this.$ = [$$[$0 - 1]]; + break; + case 35: + $$[$0].unshift($$[$0 - 2]); + this.$ = $$[$0]; + break; + case 37: + yy.setCssClass($$[$0 - 2], $$[$0]); + break; + case 38: + yy.addMembers($$[$0 - 3], $$[$0 - 1]); + break; + case 39: + yy.setCssClass($$[$0 - 5], $$[$0 - 3]); + yy.addMembers($$[$0 - 5], $$[$0 - 1]); + break; + case 40: + this.$ = $$[$0]; + yy.addClass($$[$0]); + break; + case 41: + this.$ = $$[$0 - 1]; + yy.addClass($$[$0 - 1]); + yy.setClassLabel($$[$0 - 1], $$[$0]); + break; + case 42: + yy.addAnnotation($$[$0], $$[$0 - 2]); + break; + case 43: + this.$ = [$$[$0]]; + break; + case 44: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 45: + break; + case 46: + yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); + break; + case 47: + break; + case 48: + break; + case 49: + this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; + break; + case 50: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; + break; + case 51: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; + break; + case 52: + this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; + break; + case 53: + yy.addNote($$[$0], $$[$0 - 1]); + break; + case 54: + yy.addNote($$[$0]); + break; + case 55: + yy.setDirection("TB"); + break; + case 56: + yy.setDirection("BT"); + break; + case 57: + yy.setDirection("RL"); + break; + case 58: + yy.setDirection("LR"); + break; + case 59: + this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 60: + this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 61: + this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; + break; + case 62: + this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; + break; + case 63: + this.$ = yy.relationType.AGGREGATION; + break; + case 64: + this.$ = yy.relationType.EXTENSION; + break; + case 65: + this.$ = yy.relationType.COMPOSITION; + break; + case 66: + this.$ = yy.relationType.DEPENDENCY; + break; + case 67: + this.$ = yy.relationType.LOLLIPOP; + break; + case 68: + this.$ = yy.lineType.LINE; + break; + case 69: + this.$ = yy.lineType.DOTTED_LINE; + break; + case 70: + case 76: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 71: + case 77: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 72: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 74: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 75: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 3], $$[$0 - 1]); + break; + case 78: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 79: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 80: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 81: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 82: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 83: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 4], $$[$0 - 1]); + break; + case 84: + this.$ = $$[$0 - 2]; + yy.setCssStyle($$[$0 - 1], $$[$0]); + break; + case 85: + yy.setCssClass($$[$0 - 1], $$[$0]); + break; + case 86: + this.$ = [$$[$0]]; + break; + case 87: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 89: + this.$ = $$[$0 - 1] + $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vo, [2, 5], { 8: [1, 46] }), { 8: [1, 47] }, o($Vp, [2, 16], { 21: [1, 48] }), o($Vp, [2, 18]), o($Vp, [2, 19]), o($Vp, [2, 20]), o($Vp, [2, 21]), o($Vp, [2, 22]), o($Vp, [2, 23]), o($Vp, [2, 24]), o($Vp, [2, 25]), o($Vp, [2, 26]), { 32: [1, 49] }, { 34: [1, 50] }, o($Vp, [2, 29]), o($Vp, [2, 45], { 49: 51, 57: 54, 58: 55, 13: [1, 52], 21: [1, 53], 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }), { 37: [1, 63] }, o($Vx, [2, 36], { 37: [1, 65], 42: [1, 64] }), o($Vp, [2, 47]), o($Vp, [2, 48]), { 16: 66, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 67, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 68, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 69, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 74: [1, 70] }, { 13: [1, 71] }, { 16: 37, 17: 72, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: $Vy, 51: 73 }, o($Vp, [2, 55]), o($Vp, [2, 56]), o($Vp, [2, 57]), o($Vp, [2, 58]), o($Vz, [2, 11], { 16: 37, 18: 38, 17: 75, 19: [1, 76], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), o($Vz, [2, 12], { 19: [1, 77] }), { 15: 78, 16: 79, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 80, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VA, [2, 112]), o($VA, [2, 113]), o($VA, [2, 114]), o($VA, [2, 115]), o([1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], [2, 116]), o($Vo, [2, 6], { 10: 5, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 17: 20, 36: 21, 41: 22, 16: 37, 18: 38, 5: 81, 31: $V0, 33: $V1, 35: $V2, 40: $V3, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), { 5: 82, 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 17]), o($Vp, [2, 27]), o($Vp, [2, 28]), { 13: [1, 84], 16: 37, 17: 83, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 49: 85, 57: 54, 58: 55, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }, o($Vp, [2, 46]), { 58: 86, 64: $Vv, 65: $Vw }, o($VB, [2, 62], { 57: 87, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VD, [2, 68]), o($VD, [2, 69]), { 8: [1, 89], 23: 90, 38: 88, 41: 22, 44: $V4 }, { 16: 91, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 43: 92, 47: $VE }, { 46: [1, 94] }, { 13: [1, 95] }, { 13: [1, 96] }, { 70: [1, 97], 72: [1, 98] }, { 21: $VF, 73: $VG, 74: $VH, 75: 99, 77: 100, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, { 74: [1, 111] }, { 13: $Vy, 51: 112 }, o($Vp, [2, 54]), o($Vp, [2, 117]), o($Vz, [2, 13]), o($Vz, [2, 14]), o($Vz, [2, 15]), { 37: [2, 32] }, { 15: 113, 16: 79, 37: [2, 9], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, o($VO, [2, 40], { 11: 114, 12: [1, 115] }), o($Vo, [2, 7]), { 9: [1, 116] }, o($VP, [2, 49]), { 16: 37, 17: 117, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: [1, 119], 16: 37, 17: 118, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 61], { 57: 120, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VB, [2, 60]), { 39: [1, 121] }, { 23: 90, 38: 122, 41: 22, 44: $V4 }, { 8: [1, 123], 39: [2, 33] }, o($Vx, [2, 37], { 37: [1, 124] }), { 39: [1, 125] }, { 39: [2, 43], 43: 126, 47: $VE }, { 16: 37, 17: 127, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 70], { 13: [1, 128] }), o($Vp, [2, 72], { 13: [1, 130], 68: [1, 129] }), o($Vp, [2, 76], { 13: [1, 131], 71: [1, 132] }), { 13: [1, 133] }, o($Vp, [2, 84], { 78: [1, 134] }), o($VQ, [2, 86], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VR, [2, 88]), o($VR, [2, 90]), o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 93]), o($VR, [2, 94]), o($VR, [2, 95]), o($VR, [2, 96]), o($VR, [2, 97]), o($VR, [2, 98]), o($Vp, [2, 85]), o($Vp, [2, 53]), { 37: [2, 10] }, o($VO, [2, 41]), { 13: [1, 136] }, { 1: [2, 4] }, o($VP, [2, 51]), o($VP, [2, 50]), { 16: 37, 17: 137, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 59]), o($Vp, [2, 30]), { 39: [1, 138] }, { 23: 90, 38: 139, 39: [2, 34], 41: 22, 44: $V4 }, { 43: 140, 47: $VE }, o($Vx, [2, 38]), { 39: [2, 44] }, o($Vp, [2, 42]), o($Vp, [2, 71]), o($Vp, [2, 73]), o($Vp, [2, 74], { 68: [1, 141] }), o($Vp, [2, 77]), o($Vp, [2, 78], { 13: [1, 142] }), o($Vp, [2, 80], { 13: [1, 144], 68: [1, 143] }), { 21: $VF, 73: $VG, 74: $VH, 77: 145, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, o($VR, [2, 89]), { 14: [1, 146] }, o($VP, [2, 52]), o($Vp, [2, 31]), { 39: [2, 35] }, { 39: [1, 147] }, o($Vp, [2, 75]), o($Vp, [2, 79]), o($Vp, [2, 81]), o($Vp, [2, 82], { 68: [1, 148] }), o($VQ, [2, 87], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VO, [2, 8]), o($Vx, [2, 39]), o($Vp, [2, 83])], + defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 78: [2, 32], 113: [2, 10], 116: [2, 4], 126: [2, 44], 139: [2, 35] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 53; + case 1: + return 54; + case 2: + return 55; + case 3: + return 56; + case 4: + break; + case 5: + break; + case 6: + this.begin("acc_title"); + return 31; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 33; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + return 8; + case 14: + break; + case 15: + return 7; + case 16: + return 7; + case 17: + return "EDGE_STATE"; + case 18: + this.begin("callback_name"); + break; + case 19: + this.popState(); + break; + case 20: + this.popState(); + this.begin("callback_args"); + break; + case 21: + return 70; + case 22: + this.popState(); + break; + case 23: + return 71; + case 24: + this.popState(); + break; + case 25: + return "STR"; + case 26: + this.begin("string"); + break; + case 27: + return 73; + case 28: + this.begin("namespace"); + return 40; + case 29: + this.popState(); + return 8; + case 30: + break; + case 31: + this.begin("namespace-body"); + return 37; + case 32: + this.popState(); + return 39; + case 33: + return "EOF_IN_STRUCT"; + case 34: + return 8; + case 35: + break; + case 36: + return "EDGE_STATE"; + case 37: + this.begin("class"); + return 44; + case 38: + this.popState(); + return 8; + case 39: + break; + case 40: + this.popState(); + this.popState(); + return 39; + case 41: + this.begin("class-body"); + return 37; + case 42: + this.popState(); + return 39; + case 43: + return "EOF_IN_STRUCT"; + case 44: + return "EDGE_STATE"; + case 45: + return "OPEN_IN_STRUCT"; + case 46: + break; + case 47: + return "MEMBER"; + case 48: + return 76; + case 49: + return 66; + case 50: + return 67; + case 51: + return 69; + case 52: + return 50; + case 53: + return 52; + case 54: + return 45; + case 55: + return 46; + case 56: + return 72; + case 57: + this.popState(); + break; + case 58: + return "GENERICTYPE"; + case 59: + this.begin("generic"); + break; + case 60: + this.popState(); + break; + case 61: + return "BQUOTE_STR"; + case 62: + this.begin("bqstring"); + break; + case 63: + return 68; + case 64: + return 68; + case 65: + return 68; + case 66: + return 68; + case 67: + return 60; + case 68: + return 60; + case 69: + return 62; + case 70: + return 62; + case 71: + return 61; + case 72: + return 59; + case 73: + return 63; + case 74: + return 64; + case 75: + return 65; + case 76: + return 21; + case 77: + return 42; + case 78: + return 95; + case 79: + return "DOT"; + case 80: + return "PLUS"; + case 81: + return 81; + case 82: + return 78; + case 83: + return 84; + case 84: + return 84; + case 85: + return 85; + case 86: + return "EQUALS"; + case 87: + return "EQUALS"; + case 88: + return 74; + case 89: + return 12; + case 90: + return 14; + case 91: + return "PUNCTUATION"; + case 92: + return 80; + case 93: + return 97; + case 94: + return 83; + case 95: + return 83; + case 96: + return 9; + } + }, + rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:style\b)/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:\s)/, /^(?:$)/], + conditions: { "namespace-body": { "rules": [26, 32, 33, 34, 35, 36, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "namespace": { "rules": [26, 28, 29, 30, 31, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class-body": { "rules": [26, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class": { "rules": [26, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr": { "rules": [9, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_title": { "rules": [7, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "href": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "struct": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "generic": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "bqstring": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "string": { "rules": [24, 25, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const visibilityValues = ["#", "+", "~", "-", ""]; +class ClassMember { + constructor(input, memberType) { + this.memberType = memberType; + this.visibility = ""; + this.classifier = ""; + const sanitizedInput = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)(input, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + this.parseMember(sanitizedInput); + } + getDisplayDetails() { + let displayText = this.visibility + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.id); + if (this.memberType === "method") { + displayText += `(${(0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.parameters.trim())})`; + if (this.returnType) { + displayText += " : " + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.returnType); + } + } + displayText = displayText.trim(); + const cssStyle = this.parseClassifier(); + return { + displayText, + cssStyle + }; + } + parseMember(input) { + let potentialClassifier = ""; + if (this.memberType === "method") { + const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/; + const match = input.match(methodRegEx); + if (match) { + const detectedVisibility = match[1] ? match[1].trim() : ""; + if (visibilityValues.includes(detectedVisibility)) { + this.visibility = detectedVisibility; + } + this.id = match[2].trim(); + this.parameters = match[3] ? match[3].trim() : ""; + potentialClassifier = match[4] ? match[4].trim() : ""; + this.returnType = match[5] ? match[5].trim() : ""; + if (potentialClassifier === "") { + const lastChar = this.returnType.substring(this.returnType.length - 1); + if (lastChar.match(/[$*]/)) { + potentialClassifier = lastChar; + this.returnType = this.returnType.substring(0, this.returnType.length - 1); + } + } + } + } else { + const length = input.length; + const firstChar = input.substring(0, 1); + const lastChar = input.substring(length - 1); + if (visibilityValues.includes(firstChar)) { + this.visibility = firstChar; + } + if (lastChar.match(/[$*]/)) { + potentialClassifier = lastChar; + } + this.id = input.substring( + this.visibility === "" ? 0 : 1, + potentialClassifier === "" ? length : length - 1 + ); + } + this.classifier = potentialClassifier; + } + parseClassifier() { + switch (this.classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } + } +} +const MERMAID_DOM_ID_PREFIX = "classId-"; +let relations = []; +let classes = {}; +let notes = []; +let classCounter = 0; +let namespaces = {}; +let namespaceCounter = 0; +let functions = []; +const sanitizeText = (txt) => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); +const splitClassNameAndType = function(_id) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + let genericType = ""; + let className = id; + if (id.indexOf("~") > 0) { + const split = id.split("~"); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); + } + return { className, type: genericType }; +}; +const setClassLabel = function(_id, label) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + if (label) { + label = sanitizeText(label); + } + const { className } = splitClassNameAndType(id); + classes[className].label = label; +}; +const addClass = function(_id) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const { className, type } = splitClassNameAndType(id); + if (Object.hasOwn(classes, className)) { + return; + } + const name = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(className, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + classes[name] = { + id: name, + type, + label: name, + cssClasses: [], + methods: [], + members: [], + annotations: [], + styles: [], + domId: MERMAID_DOM_ID_PREFIX + name + "-" + classCounter + }; + classCounter++; +}; +const lookUpDomId = function(_id) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + if (id in classes) { + return classes[id].domId; + } + throw new Error("Class not found: " + id); +}; +const clear = function() { + relations = []; + classes = {}; + notes = []; + functions = []; + functions.push(setupToolTips); + namespaces = {}; + namespaceCounter = 0; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +const getClass = function(id) { + return classes[id]; +}; +const getClasses = function() { + return classes; +}; +const getRelations = function() { + return relations; +}; +const getNotes = function() { + return notes; +}; +const addRelation = function(relation) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); + addClass(relation.id1); + addClass(relation.id2); + relation.id1 = splitClassNameAndType(relation.id1).className; + relation.id2 = splitClassNameAndType(relation.id2).className; + relation.relationTitle1 = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle1.trim(), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relation.relationTitle2 = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle2.trim(), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relations.push(relation); +}; +const addAnnotation = function(className, annotation) { + const validatedClassName = splitClassNameAndType(className).className; + classes[validatedClassName].annotations.push(annotation); +}; +const addMember = function(className, member) { + addClass(className); + const validatedClassName = splitClassNameAndType(className).className; + const theClass = classes[validatedClassName]; + if (typeof member === "string") { + const memberString = member.trim(); + if (memberString.startsWith("<<") && memberString.endsWith(">>")) { + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(")") > 0) { + theClass.methods.push(new ClassMember(memberString, "method")); + } else if (memberString) { + theClass.members.push(new ClassMember(memberString, "attribute")); + } + } +}; +const addMembers = function(className, members) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => addMember(className, member)); + } +}; +const addNote = function(text, className) { + const note = { + id: `note${notes.length}`, + class: className, + text + }; + notes.push(note); +}; +const cleanupLabel = function(label) { + if (label.startsWith(":")) { + label = label.substring(1); + } + return sanitizeText(label.trim()); +}; +const setCssClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].cssClasses.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + classes[id].tooltip = sanitizeText(tooltip); + } + }); +}; +const getTooltip = function(id, namespace) { + if (namespace) { + return namespaces[namespace].classes[id].tooltip; + } + return classes[id].tooltip; +}; +const setLink = function(ids, linkStr, target) { + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].link = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + if (config.securityLevel === "sandbox") { + classes[id].linkTarget = "_top"; + } else if (typeof target === "string") { + classes[id].linkTarget = sanitizeText(target); + } else { + classes[id].linkTarget = "_blank"; + } + } + }); + setCssClass(ids, "clickable"); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFunc(id, functionName, functionArgs); + classes[id].haveCallback = true; + }); + setCssClass(ids, "clickable"); +}; +const setClickFunc = function(_domId, functionName, functionArgs) { + const domId = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_domId, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + if (config.securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + const id = domId; + if (classes[id] !== void 0) { + const elemId = lookUpDomId(id); + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(elemId); + } + functions.push(function() { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const bindFunctions = function(element) { + functions.forEach(function(fun) { + fun(element); + }); +}; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4 +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +functions.push(setupToolTips); +let direction = "TB"; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const addNamespace = function(id) { + if (namespaces[id] !== void 0) { + return; + } + namespaces[id] = { + id, + classes: {}, + children: {}, + domId: MERMAID_DOM_ID_PREFIX + id + "-" + namespaceCounter + }; + namespaceCounter++; +}; +const getNamespace = function(name) { + return namespaces[name]; +}; +const getNamespaces = function() { + return namespaces; +}; +const addClassesToNamespace = function(id, classNames) { + if (namespaces[id] === void 0) { + return; + } + for (const name of classNames) { + const { className } = splitClassNameAndType(name); + classes[className].parent = id; + namespaces[id].classes[className] = classes[className]; + } +}; +const setCssStyle = function(id, styles2) { + const thisClass = classes[id]; + if (!styles2 || !thisClass) { + return; + } + for (const s of styles2) { + if (s.includes(",")) { + thisClass.styles.push(...s.split(",")); + } else { + thisClass.styles.push(s); + } + } +}; +const db = { + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.b, + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().class, + addClass, + bindFunctions, + clear, + getClass, + getClasses, + getNotes, + addAnnotation, + addNote, + getRelations, + addRelation, + getDirection, + setDirection, + addMember, + addMembers, + cleanupLabel, + lineType, + relationType, + setClickEvent, + setCssClass, + setLink, + getTooltip, + setTooltip, + lookUpDomId, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.r, + setClassLabel, + addNamespace, + addClassesToNamespace, + getNamespace, + getNamespaces, + setCssStyle +}; +const getStyles = (options) => `g.classGroup text { + fill: ${options.nodeBorder || options.classText}; + stroke: none; + font-family: ${options.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${options.classText}; +} +.edgeLabel .label rect { + fill: ${options.mainBkg}; +} +.label text { + fill: ${options.classText}; +} +.edgeLabel .label span { + background: ${options.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.classGroup line { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${options.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${options.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/3810e8e5.936df7c3.js b/assets/js/3810e8e5.936df7c3.js new file mode 100644 index 0000000000..3bd8ec4f31 --- /dev/null +++ b/assets/js/3810e8e5.936df7c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6887],{2177:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var r=s(85893),t=s(11151);const o={},a="HCEXPORT",i={id:"about/references/keywords/HCEXPORT",title:"HCEXPORT",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/HCEXPORT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HCEXPORT",permalink:"/ecalc/docs/about/references/keywords/HCEXPORT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HCEXPORT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"GENERATORSETS",permalink:"/ecalc/docs/about/references/keywords/GENERATORSETS"},next:{title:"HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Basic usage",id:"basic-usage",level:3},{value:"With time dependency",id:"with-time-dependency",level:3},{value:"Full example",id:"full-example",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"hcexport",children:"HCEXPORT"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," defines the export of hydrocarbons as a number of oil equivalents in Sm",(0,r.jsx)("sup",{children:"3"}),".\nThis keyword is required for the output of emission intensity (i.e., kg CO",(0,r.jsx)("sub",{children:"2"}),"/boe).\nThis could be a single time series variable or an ",(0,r.jsx)(n.code,{children:"expression <expressions>"})," containing multiple time series variables.\nTypically it would be the sum of exported oil and gas in units of oil equivalents."]}),"\n",(0,r.jsx)(n.admonition,{title:"What is hydrocarbon export?",type:"info",children:(0,r.jsxs)(n.p,{children:["Hydrocarbon export is the oil equivalents of what is exported for sale and only these volumes should\nbe included here. I.e., it is important to distinguish between ",(0,r.jsx)(n.em,{children:"produced gas"})," and ",(0,r.jsx)(n.em,{children:"sales gas"}),".\nSee ",(0,r.jsx)(n.a,{href:"https://docmap.equinor.com/Docmap/page/doc/dmDocIndex.html?DOCVIEW=FALSE?DOCID=1042144",children:"GL0093"})," in Docmap."]})}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT: <EXPRESSION> # [Sm3/day]\n"})}),"\n",(0,r.jsx)(n.p,{children:"or"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT:\n <DATE>: <EXPRESSION> # [Sm3/day]\n <DATE>: <EXPRESSION> # [Sm3/day]\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h3,{id:"basic-usage",children:"Basic usage"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT: SIM;OIL_PROD {+} SIM;GAS_SALES {/} 1000\n"})}),"\n",(0,r.jsx)(n.h3,{id:"with-time-dependency",children:"With time dependency"}),"\n",(0,r.jsx)(n.p,{children:"In this example the gas export starts later than production start up:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT:\n 2001-01-01: SIM1;OIL_PROD\n 2005-01-01: SIM2:OIL_PROD {+} SIM1;GAS_SALES {/} 1000\n"})}),"\n",(0,r.jsx)(n.h3,{id:"full-example",children:"Full example"}),"\n",(0,r.jsxs)(n.p,{children:["Example showing ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," the modelling hierarchy:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: installation_A\n FUEL: fuel_gas\n HCEXPORT: SIM;OIL_PROD:FIELD_A {+} SIM;GAS_SALES:FIELD_A {/} 1000\n GENERATORSETS:\n <Data for the generator sets to be put her>\n FUELCONSUMERS:\n <Data for the fuel consumers to be put here>\n - NAME: installation_B\n HCEXPORT: SIM;OIL_PROD:FIELD_B {+} SIM;GAS_SALES:FIELD_B{/} 1000\n GENERATORSETS:\n <Data for the generator sets to be put her>\n FUELCONSUMERS:\n <Data for the fuel consumers to be put here>\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>a});var r=s(67294);const t={},o=r.createContext(t);function a(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/382d59b5.fac6029d.js b/assets/js/382d59b5.fac6029d.js new file mode 100644 index 0000000000..e86c542515 --- /dev/null +++ b/assets/js/382d59b5.fac6029d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9306],{4706:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>E,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var s=n(85893),t=n(11151);const c={},o="CURVES",i={id:"about/references/keywords/CURVES",title:"CURVES",description:"Description",source:"@site/docs/about/references/keywords/CURVES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CURVES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE"},next:{title:"DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"curves",children:"CURVES"}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["When using a detailed variable speed compressor model, it is necessary to specify the variable speed ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/#user-defined-variable-speed-compressor-chart",children:"COMPRESSOR CHART"}),". This can be defined from a .csv file, or it can be defined directly in the YAML file.\nIn either case, the keyword ",(0,s.jsx)(r.code,{children:"CURVES"})," needs to be used, and curves for at least two different speeds must be defined. If a .csv file is being used, under the ",(0,s.jsx)(r.code,{children:"CURVES"})," keyword, ",(0,s.jsx)(r.code,{children:"FILE"})," must be used. If specified directly in the YAML file, ",(0,s.jsx)(r.code,{children:"SPEED"}),", ",(0,s.jsx)(r.code,{children:"RATE"}),", ",(0,s.jsx)(r.code,{children:"HEAD"})," and ",(0,s.jsx)(r.code,{children:"EFFICIENCY"})," must be defined for each speed."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ...\n CURVES:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ... \n CURVES:\n - FILE: <filepath to compressor curve>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ...\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 9886\n RATE: [3708, 4502, 4993.6, 5507, 5924]\n HEAD: [13845, 13182, 12425, 11276, 10054]\n EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]\n\n - NAME: compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n ... \n CURVES:\n - FILE: compressor_chart.csv\n"})})]})}function E(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>o});var s=n(67294);const t={},c=s.createContext(t);function o(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/38d592cf.39635619.js b/assets/js/38d592cf.39635619.js new file mode 100644 index 0000000000..12d2eb9b66 --- /dev/null +++ b/assets/js/38d592cf.39635619.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1398],{18824:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>t,contentTitle:()=>m,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=a(85893),l=a(11151);const i={title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},m=void 0,r={id:"about/modelling/theory/compressor_modelling",title:"Compressor modelling",description:"Compressor modelling theory",source:"@site/docs/about/modelling/theory/compressor_modelling.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/compressor_modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/compressor_modelling.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor modelling",sidebar_position:2,description:"Compressor modelling theory"},sidebar:"about",previous:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling"},next:{title:"Setup an eCalc\u2122 Model",permalink:"/ecalc/docs/about/modelling/setup/"}},t={},c=[];function h(s){const e={a:"a",annotation:"annotation",code:"code",img:"img",math:"math",mfrac:"mfrac",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",msubsup:"msubsup",msup:"msup",p:"p",semantics:"semantics",span:"span",...(0,l.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"A compressor model describes what happens to a fluid going through a compressor and calculates how much power is\nrequired in the process."}),"\n",(0,n.jsxs)(e.p,{children:["At the suction side, one need information about the fluid (natural gas) which has a (static) specification of the\ncomposition, a specified rate, a temperature and a pressure. As the fluid is going through the compressor in a fluid\ndynamic process, the enthalpy changes, resulting in a new state and both the pressure and the\ntemperature of the fluid is increased, while the volume is decreased. This change is calculated using an\nequation-of-state (EOS) model. See ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/modelling/setup/models/fluid_model",children:(0,n.jsx)(e.code,{children:"Fluid model"})})]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{src:a(13026).Z+"",width:"1626",height:"738"})}),"\n",(0,n.jsx)(e.p,{children:"eCalc does not perform fluid dynamic modeling. Instead, the behaviour of the compressor is described by a polytropic\ncompressor chart which specifies both the operational domain of the compressor, but also relates volume rate, head and\nefficiency for the compressor."}),"\n",(0,n.jsxs)(e.p,{children:["An isentropic (adiabatic) compression is the process where no heat is added or removed from a system. In a polytropic\nprocess, changes in the gas characteristics is considered. Dynamic natural gas compressors typically follow a polytropic\nprocess defined by the formula ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mi,{children:"n"})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]}),(0,n.jsxs)(e.msubsup,{children:[(0,n.jsx)(e.mi,{children:"V"}),(0,n.jsx)(e.mn,{children:"2"}),(0,n.jsx)(e.mi,{children:"n"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_\\mathrm{1} V_\\mathrm{1}^n = P_\\mathrm{2} V_\\mathrm{2}^n"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.6644em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"1"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2481em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9314em",verticalAlign:"-0.2481em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.6644em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.4519em",marginLeft:"-0.2222em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"2"})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.063em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2481em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),", where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"n"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})]})})]})," is the\npolytropic exponent which is experimentally determined for a given compressor."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.img,{src:a(28778).Z+"",width:"901",height:"762"}),"\nThe power need for compression is given by"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"w"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"m"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"e"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"power = \\frac{polytropic\\_head * mass\\_rate}{efficiency}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02691em"},children:"w"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"er"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.2749em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ma"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ss"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,n.jsx)(e.p,{children:"and the relationship between polytropic head and the pressures are"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"h"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"a"}),(0,n.jsx)(e.mi,{children:"d"}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"Z"}),(0,n.jsx)(e.mi,{children:"R"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"M"}),(0,n.jsx)(e.mi,{children:"W"})]})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.msup,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mo,{fence:"true",children:"("}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"P"}),(0,n.jsx)(e.mn,{children:"2"})]})]}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]}),(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]}),(0,n.jsx)(e.mi,{children:"n"})]})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"}),(0,n.jsx)(e.mo,{fence:"true",children:")"})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"polytropic\\_head = \\frac{n}{n-1} \\frac{Z R T_1}{MW} \\left( \\left(\\frac{P_1}{P_2} \\right)^{\\frac{n-1}{n}} -1 \\right)"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"1.0044em",verticalAlign:"-0.31em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"h"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"3.044em",verticalAlign:"-1.25em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.1076em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"M"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"ZR"}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.686em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.1667em"}}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:"("})}),(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsxs)(e.span,{className:"minner",children:[(0,n.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size3",children:"("})}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3603em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"2"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"mord",children:(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.836em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size3",children:")"})})]}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsx)(e.span,{className:"vlist-t",children:(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"1.7939em"},children:(0,n.jsxs)(e.span,{style:{top:"-4.2029em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter sizing reset-size3 size6"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"0.8443em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.656em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"})})})]}),(0,n.jsxs)(e.span,{style:{top:"-3.2255em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line mtight",style:{borderBottomWidth:"0.049em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.384em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size3 size1 mtight",children:(0,n.jsxs)(e.span,{className:"mord mtight",children:[(0,n.jsx)(e.span,{className:"mord mathnormal mtight",children:"n"}),(0,n.jsx)(e.span,{className:"mbin mtight",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})]})})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.344em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter sizing reset-size3 size6"})]})})})]})})})})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"}),(0,n.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:(0,n.jsx)(e.span,{className:"delimsizing size4",children:")"})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"n"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"n"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"})]})})]})," is the polytropic exponent, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"Z"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Z"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"Z"})]})})]})," the compressibility, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"R"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"R"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"R"})]})})]})," is the gas constant, ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"T"}),(0,n.jsx)(e.mn,{children:"1"})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"T_1"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:"1"})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the inlet temperature and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"M"}),(0,n.jsx)(e.mi,{children:"W"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"MW"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"M"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"})]})})]})," the molecular weight."]}),"\n",(0,n.jsx)(e.p,{children:"Further, the polytropic exponent is approximated as"}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.mfrac,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"\u03ba"}),(0,n.jsx)(e.mo,{children:"\u2217"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"l"}),(0,n.jsx)(e.mi,{children:"y"}),(0,n.jsx)(e.mi,{children:"t"}),(0,n.jsx)(e.mi,{children:"r"}),(0,n.jsx)(e.mi,{children:"o"}),(0,n.jsx)(e.mi,{children:"p"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"_"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"f"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"i"}),(0,n.jsx)(e.mi,{children:"e"}),(0,n.jsx)(e.mi,{children:"n"}),(0,n.jsx)(e.mi,{children:"c"}),(0,n.jsx)(e.mi,{children:"y"})]}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{children:"\u03ba"}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"1"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\frac{\\kappa * polytropic\\_efficiency}{\\kappa -1}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"2.1638em",verticalAlign:"-0.7693em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(e.span,{className:"mfrac",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsxs)(e.span,{className:"vlist",style:{height:"1.3944em"},children:[(0,n.jsxs)(e.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1"})]})]}),(0,n.jsxs)(e.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(e.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(e.span,{style:{top:"-3.7em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2217"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"o"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"ro"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"p"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.10764em"},children:"ff"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"cy"})]})]})]}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.7693em"},children:(0,n.jsx)(e.span,{})})})]})}),(0,n.jsx)(e.span,{className:"mclose nulldelimiter"})]})]})})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"\u03ba"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\kappa"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"})]})})]})," is the heat capacity ratio of the fluid."]}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"\u03ba"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"\\kappa"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.4306em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",children:"\u03ba"})]})})]})," and ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsx)(e.mi,{children:"Z"})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"Z"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6833em"}}),(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"Z"})]})})]})," are not for inlet conditions, but average values for the fluid throughout the process, and\nthe polytropic process and the calculations are iterated until these converge."]}),"\n",(0,n.jsx)(e.p,{children:"If there is only one compressor, the outlet pressure for each compressor is known, and the polytropic head and\nefficiency may be calculated from directly from the above polytropic head and efficiency formulas."}),"\n",(0,n.jsx)(e.p,{children:"However, for compressor trains, the intermediate pressures are not known ahead, instead one may use the fact that all\ncompressors run with the same speed as they are mounted on the same shaft."}),"\n",(0,n.jsxs)(e.p,{children:["To calculate the energy usage for the compressor train using the common speed, eCalc uses a forward model to\ncalculate the outlet stream given the inlet stream and a given speed. Then, this model is iterated until the discharge pressure is equal to the requested discharge pressure for evaluation. To use this model, see\n",(0,n.jsx)(e.code,{children:"Variable speed compressor train model"})," An alternative is to neglect the common speed property of the train, an instead assume (incorrectly but maybe good\nenough for some purposes) that the pressure fraction is equal for all stages. With this assumption, the intermediate pressures can be calculated and each stage may be calculated independently without the speed iteration. To use this model, see\n",(0,n.jsx)(e.code,{children:"Simplified variable speed compressor train model"}),"."]}),"\n",(0,n.jsxs)(e.p,{children:["In some cases, the shaft of the compressor train can only run on a single fixed speed. In these cases eCalc needs\ninformation about how the pressure should be controlled to meet the required discharge pressure. Available pressure\ncontrol options are choking and recirculating using anti-surge valves. To use this model, see ",(0,n.jsx)(e.code,{children:"Single speed compressor train model"}),"."]}),"\n",(0,n.jsxs)(e.p,{children:["In other cases, the compressor trains have more complex setup and process control which needs a more flexible model. The\nfigure below shows an example where one may have two inlet streams with different pressures and potentially different\ngas compositions and one outlet stream for export gas with a pressure control. To use a model suitable for such cases,\nsee ",(0,n.jsx)(e.code,{children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{src:a(5113).Z+"",width:"1475",height:"659"})})]})}function d(s={}){const{wrapper:e}={...(0,l.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},13026:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/process_compressor-3493b127c832898d93b5231594efa8d3.png"},28778:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/process_compressor_chart-28c5f110972461aba840e82b0962c3d2.png"},5113:(s,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png"},11151:(s,e,a)=>{a.d(e,{Z:()=>r,a:()=>m});var n=a(67294);const l={},i=n.createContext(l);function m(s){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:m(s.components),n.createElement(i.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/3920.5e403fe8.js b/assets/js/3920.5e403fe8.js new file mode 100644 index 0000000000..dbbd44635b --- /dev/null +++ b/assets/js/3920.5e403fe8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3920],{93920:(t,e,s)=>{s.d(e,{d:()=>st,f:()=>et,p:()=>r});var u=s(64218),i=s(28758),n=function(){var t=function(t,e,s,u){for(s=s||{},u=t.length;u--;s[t[u]]=e);return s},e=[1,4],s=[1,3],u=[1,5],i=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],n=[2,2],r=[1,13],a=[1,14],c=[1,15],o=[1,16],l=[1,23],h=[1,25],A=[1,26],d=[1,27],p=[1,49],y=[1,48],E=[1,29],f=[1,30],g=[1,31],k=[1,32],D=[1,33],b=[1,44],F=[1,46],T=[1,42],C=[1,47],_=[1,43],B=[1,50],S=[1,45],m=[1,51],x=[1,52],v=[1,34],L=[1,35],I=[1,36],R=[1,37],$=[1,57],N=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],O=[1,61],w=[1,60],P=[1,62],U=[8,9,11,73,75],V=[1,88],G=[1,93],M=[1,92],Y=[1,89],K=[1,85],j=[1,91],X=[1,87],z=[1,94],H=[1,90],W=[1,95],Q=[1,86],q=[8,9,10,11,73,75],Z=[8,9,10,11,44,73,75],J=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],tt=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],et=[42,58,86,99,102,103,106,108,111,112,113],st=[1,121],ut=[1,120],it=[1,128],nt=[1,142],rt=[1,143],at=[1,144],ct=[1,145],ot=[1,130],lt=[1,132],ht=[1,136],At=[1,137],dt=[1,138],pt=[1,139],yt=[1,140],Et=[1,141],ft=[1,146],gt=[1,147],kt=[1,126],Dt=[1,127],bt=[1,134],Ft=[1,129],Tt=[1,133],Ct=[1,131],_t=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Bt=[1,149],St=[8,9,11],mt=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],xt=[1,169],vt=[1,165],Lt=[1,166],It=[1,170],Rt=[1,167],$t=[1,168],Nt=[75,113,116],Ot=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],wt=[10,103],Pt=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Ut=[1,235],Vt=[1,233],Gt=[1,237],Mt=[1,231],Yt=[1,232],Kt=[1,234],jt=[1,236],Xt=[1,238],zt=[1,255],Ht=[8,9,11,103],Wt=[8,9,10,11,58,81,102,103,106,107,108,109],Qt={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(t,e,s,u,i,n,r){var a=n.length-1;switch(i){case 2:case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 3:(!Array.isArray(n[a])||n[a].length>0)&&n[a-1].push(n[a]),this.$=n[a-1];break;case 4:case 176:case 49:case 71:case 174:this.$=n[a];break;case 11:u.setDirection("TB"),this.$="TB";break;case 12:u.setDirection(n[a-1]),this.$=n[a-1];break;case 27:this.$=n[a-1].nodes;break;case 33:this.$=u.addSubGraph(n[a-6],n[a-1],n[a-4]);break;case 34:this.$=u.addSubGraph(n[a-3],n[a-1],n[a-3]);break;case 35:this.$=u.addSubGraph(void 0,n[a-1],void 0);break;case 37:this.$=n[a].trim(),u.setAccTitle(this.$);break;case 38:case 39:this.$=n[a].trim(),u.setAccDescription(this.$);break;case 43:u.addLink(n[a-2].stmt,n[a],n[a-1]),this.$={stmt:n[a],nodes:n[a].concat(n[a-2].nodes)};break;case 44:u.addLink(n[a-3].stmt,n[a-1],n[a-2]),this.$={stmt:n[a-1],nodes:n[a-1].concat(n[a-3].nodes)};break;case 45:this.$={stmt:n[a-1],nodes:n[a-1]};break;case 46:this.$={stmt:n[a],nodes:n[a]};break;case 47:case 121:case 123:this.$=[n[a]];break;case 48:this.$=n[a-4].concat(n[a]);break;case 50:this.$=n[a-2],u.setClass(n[a-2],n[a]);break;case 51:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"square");break;case 52:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"doublecircle");break;case 53:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"circle");break;case 54:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"ellipse");break;case 55:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"stadium");break;case 56:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"subroutine");break;case 57:this.$=n[a-7],u.addVertex(n[a-7],n[a-1],"rect",void 0,void 0,void 0,Object.fromEntries([[n[a-5],n[a-3]]]));break;case 58:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"cylinder");break;case 59:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"round");break;case 60:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"diamond");break;case 61:this.$=n[a-5],u.addVertex(n[a-5],n[a-2],"hexagon");break;case 62:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"odd");break;case 63:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"trapezoid");break;case 64:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"inv_trapezoid");break;case 65:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_right");break;case 66:this.$=n[a-3],u.addVertex(n[a-3],n[a-1],"lean_left");break;case 67:this.$=n[a],u.addVertex(n[a]);break;case 68:n[a-1].text=n[a],this.$=n[a-1];break;case 69:case 70:n[a-2].text=n[a-1],this.$=n[a-2];break;case 72:var c=u.destructLink(n[a],n[a-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:n[a-1]};break;case 73:case 79:case 94:case 96:this.$={text:n[a],type:"text"};break;case 74:case 80:case 95:this.$={text:n[a-1].text+""+n[a],type:n[a-1].type};break;case 75:case 81:this.$={text:n[a],type:"string"};break;case 76:case 82:case 97:this.$={text:n[a],type:"markdown"};break;case 77:c=u.destructLink(n[a]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 78:this.$=n[a-1];break;case 98:this.$=n[a-4],u.addClass(n[a-2],n[a]);break;case 99:this.$=n[a-4],u.setClass(n[a-2],n[a]);break;case 100:case 108:this.$=n[a-1],u.setClickEvent(n[a-1],n[a]);break;case 101:case 109:this.$=n[a-3],u.setClickEvent(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 102:this.$=n[a-2],u.setClickEvent(n[a-2],n[a-1],n[a]);break;case 103:this.$=n[a-4],u.setClickEvent(n[a-4],n[a-3],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 104:this.$=n[a-2],u.setLink(n[a-2],n[a]);break;case 105:this.$=n[a-4],u.setLink(n[a-4],n[a-2]),u.setTooltip(n[a-4],n[a]);break;case 106:this.$=n[a-4],u.setLink(n[a-4],n[a-2],n[a]);break;case 107:this.$=n[a-6],u.setLink(n[a-6],n[a-4],n[a]),u.setTooltip(n[a-6],n[a-2]);break;case 110:this.$=n[a-1],u.setLink(n[a-1],n[a]);break;case 111:this.$=n[a-3],u.setLink(n[a-3],n[a-2]),u.setTooltip(n[a-3],n[a]);break;case 112:this.$=n[a-3],u.setLink(n[a-3],n[a-2],n[a]);break;case 113:this.$=n[a-5],u.setLink(n[a-5],n[a-4],n[a]),u.setTooltip(n[a-5],n[a-2]);break;case 114:this.$=n[a-4],u.addVertex(n[a-2],void 0,void 0,n[a]);break;case 115:this.$=n[a-4],u.updateLink([n[a-2]],n[a]);break;case 116:this.$=n[a-4],u.updateLink(n[a-2],n[a]);break;case 117:this.$=n[a-8],u.updateLinkInterpolate([n[a-6]],n[a-2]),u.updateLink([n[a-6]],n[a]);break;case 118:this.$=n[a-8],u.updateLinkInterpolate(n[a-6],n[a-2]),u.updateLink(n[a-6],n[a]);break;case 119:this.$=n[a-6],u.updateLinkInterpolate([n[a-4]],n[a]);break;case 120:this.$=n[a-6],u.updateLinkInterpolate(n[a-4],n[a]);break;case 122:case 124:n[a-2].push(n[a]),this.$=n[a-2];break;case 126:this.$=n[a-1]+n[a];break;case 175:case 177:this.$=n[a-1]+""+n[a];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,9:e,10:s,12:u},{1:[3]},t(i,n,{5:6}),{4:7,9:e,10:s,12:u},{4:8,9:e,10:s,12:u},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:$,15:53,18:56},t(N,[2,3]),t(N,[2,4]),t(N,[2,5]),t(N,[2,6]),t(N,[2,7]),t(N,[2,8]),{8:O,9:w,11:P,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:O,9:w,11:P,21:66},{8:O,9:w,11:P,21:67},{8:O,9:w,11:P,21:68},{8:O,9:w,11:P,21:69},{8:O,9:w,11:P,21:70},{8:O,9:w,10:[1,71],11:P,21:72},t(N,[2,36]),{35:[1,73]},{37:[1,74]},t(N,[2,39]),t(U,[2,46],{18:75,10:$}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:V,42:G,58:M,77:[1,83],86:Y,92:[1,80],94:[1,81],98:82,102:K,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},t(N,[2,178]),t(N,[2,179]),t(N,[2,180]),t(N,[2,181]),t(q,[2,47]),t(q,[2,49],{44:[1,96]}),t(Z,[2,67],{110:109,29:[1,97],42:p,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:y,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(J,[2,174]),t(J,[2,135]),t(J,[2,136]),t(J,[2,137]),t(J,[2,138]),t(J,[2,139]),t(J,[2,140]),t(J,[2,141]),t(J,[2,142]),t(J,[2,143]),t(J,[2,144]),t(J,[2,145]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,110]},t(tt,[2,26],{18:111,10:$}),t(N,[2,27]),{40:112,41:38,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(N,[2,40]),t(N,[2,41]),t(N,[2,42]),t(et,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:st,116:ut},t([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),t(N,[2,28]),t(N,[2,29]),t(N,[2,30]),t(N,[2,31]),t(N,[2,32]),{10:it,12:nt,14:rt,27:at,28:122,32:ct,42:ot,58:lt,73:ht,77:[1,124],78:[1,125],80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:123,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(_t,n,{5:148}),t(N,[2,37]),t(N,[2,38]),t(U,[2,45],{42:Bt}),{42:p,45:150,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{99:[1,151],100:152,102:[1,153]},{42:p,45:154,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{42:p,45:155,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},t(St,[2,108],{117:160,10:[1,159],14:V,42:G,58:M,86:Y,102:K,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,110],{10:[1,161]}),t(mt,[2,176]),t(mt,[2,163]),t(mt,[2,164]),t(mt,[2,165]),t(mt,[2,166]),t(mt,[2,167]),t(mt,[2,168]),t(mt,[2,169]),t(mt,[2,170]),t(mt,[2,171]),t(mt,[2,172]),t(mt,[2,173]),{42:p,45:162,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{30:163,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:171,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:173,48:[1,172],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:174,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:175,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:176,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{106:[1,177]},{30:178,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:179,63:[1,180],65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:181,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:182,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{30:183,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(J,[2,175]),t(i,[2,20]),t(tt,[2,25]),t(U,[2,43],{18:184,10:$}),t(et,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{75:[1,188],76:189,113:st,116:ut},t(Nt,[2,73]),t(Nt,[2,75]),t(Nt,[2,76]),t(Nt,[2,161]),t(Nt,[2,162]),{8:O,9:w,10:it,11:P,12:nt,14:rt,21:191,27:at,29:[1,190],32:ct,42:ot,58:lt,73:ht,80:135,81:At,82:dt,83:pt,84:yt,85:Et,86:ft,87:gt,88:192,102:kt,106:Dt,108:bt,111:Ft,112:Tt,113:Ct},t(Ot,[2,94]),t(Ot,[2,96]),t(Ot,[2,97]),t(Ot,[2,150]),t(Ot,[2,151]),t(Ot,[2,152]),t(Ot,[2,153]),t(Ot,[2,154]),t(Ot,[2,155]),t(Ot,[2,156]),t(Ot,[2,157]),t(Ot,[2,158]),t(Ot,[2,159]),t(Ot,[2,160]),t(Ot,[2,83]),t(Ot,[2,84]),t(Ot,[2,85]),t(Ot,[2,86]),t(Ot,[2,87]),t(Ot,[2,88]),t(Ot,[2,89]),t(Ot,[2,90]),t(Ot,[2,91]),t(Ot,[2,92]),t(Ot,[2,93]),{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,193],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:$,18:194},{10:[1,195],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,196]},{10:[1,197],103:[1,198]},t(wt,[2,121]),{10:[1,199],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{10:[1,200],42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:109,111:S,112:m,113:x},{77:[1,201]},t(St,[2,102],{10:[1,202]}),t(St,[2,104],{10:[1,203]}),{77:[1,204]},t(mt,[2,177]),{77:[1,205],95:[1,206]},t(q,[2,50],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),{31:[1,207],65:xt,79:208,113:It,114:Rt,115:$t},t(Pt,[2,79]),t(Pt,[2,81]),t(Pt,[2,82]),t(Pt,[2,146]),t(Pt,[2,147]),t(Pt,[2,148]),t(Pt,[2,149]),{47:[1,209],65:xt,79:208,113:It,114:Rt,115:$t},{30:210,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{49:[1,211],65:xt,79:208,113:It,114:Rt,115:$t},{51:[1,212],65:xt,79:208,113:It,114:Rt,115:$t},{53:[1,213],65:xt,79:208,113:It,114:Rt,115:$t},{55:[1,214],65:xt,79:208,113:It,114:Rt,115:$t},{58:[1,215]},{62:[1,216],65:xt,79:208,113:It,114:Rt,115:$t},{64:[1,217],65:xt,79:208,113:It,114:Rt,115:$t},{30:218,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},{31:[1,219],65:xt,79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,220],69:[1,221],79:208,113:It,114:Rt,115:$t},{65:xt,67:[1,223],69:[1,222],79:208,113:It,114:Rt,115:$t},t(U,[2,44],{42:Bt}),t(et,[2,70]),t(et,[2,69]),{60:[1,224],65:xt,79:208,113:It,114:Rt,115:$t},t(et,[2,72]),t(Nt,[2,74]),{30:225,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(_t,n,{5:226}),t(Ot,[2,95]),t(N,[2,35]),{41:227,42:p,43:39,45:40,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},{10:Ut,58:Vt,81:Gt,89:228,102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:239,101:[1,240],102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:241,101:[1,242],102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},{102:[1,243]},{10:Ut,58:Vt,81:Gt,89:244,102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},{42:p,45:245,58:y,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x},t(St,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},t(St,[2,109]),t(St,[2,111],{10:[1,249]}),t(St,[2,112]),t(Z,[2,51]),t(Pt,[2,80]),t(Z,[2,52]),{49:[1,250],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,59]),t(Z,[2,54]),t(Z,[2,55]),t(Z,[2,56]),{106:[1,251]},t(Z,[2,58]),t(Z,[2,60]),{64:[1,252],65:xt,79:208,113:It,114:Rt,115:$t},t(Z,[2,62]),t(Z,[2,63]),t(Z,[2,65]),t(Z,[2,64]),t(Z,[2,66]),t([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,254],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},t(q,[2,48]),t(St,[2,114],{103:zt}),t(Ht,[2,123],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Yt,107:Kt,108:jt,109:Xt}),t(Wt,[2,125]),t(Wt,[2,127]),t(Wt,[2,128]),t(Wt,[2,129]),t(Wt,[2,130]),t(Wt,[2,131]),t(Wt,[2,132]),t(Wt,[2,133]),t(Wt,[2,134]),t(St,[2,115],{103:zt}),{10:[1,257]},t(St,[2,116],{103:zt}),{10:[1,258]},t(wt,[2,122]),t(St,[2,98],{103:zt}),t(St,[2,99],{110:109,42:p,58:y,86:b,99:F,102:T,103:C,106:_,108:B,111:S,112:m,113:x}),t(St,[2,103]),t(St,[2,105],{10:[1,259]}),t(St,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:O,9:w,11:P,21:264},t(N,[2,34]),{10:Ut,58:Vt,81:Gt,102:Mt,104:265,105:230,106:Yt,107:Kt,108:jt,109:Xt},t(Wt,[2,126]),{14:V,42:G,58:M,86:Y,98:266,102:K,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{14:V,42:G,58:M,86:Y,98:267,102:K,103:j,106:X,108:z,111:H,112:W,113:Q,117:84},{95:[1,268]},t(St,[2,113]),t(Z,[2,53]),{30:269,65:xt,77:vt,78:Lt,79:164,113:It,114:Rt,115:$t},t(Z,[2,61]),t(_t,n,{5:270}),t(Ht,[2,124],{105:256,10:Ut,58:Vt,81:Gt,102:Mt,106:Yt,107:Kt,108:jt,109:Xt}),t(St,[2,119],{117:160,10:[1,271],14:V,42:G,58:M,86:Y,102:K,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,120],{117:160,10:[1,272],14:V,42:G,58:M,86:Y,102:K,103:j,106:X,108:z,111:H,112:W,113:Q}),t(St,[2,107]),{31:[1,273],65:xt,79:208,113:It,114:Rt,115:$t},{6:11,7:12,8:r,9:a,10:c,11:o,20:17,22:18,23:19,24:20,25:21,26:22,27:l,32:[1,274],33:24,34:h,36:A,38:d,40:28,41:38,42:p,43:39,45:40,58:y,81:E,82:f,83:g,84:k,85:D,86:b,99:F,102:T,103:C,106:_,108:B,110:41,111:S,112:m,113:x,118:v,119:L,120:I,121:R},{10:Ut,58:Vt,81:Gt,89:275,102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},{10:Ut,58:Vt,81:Gt,89:276,102:Mt,104:229,105:230,106:Yt,107:Kt,108:jt,109:Xt},t(Z,[2,57]),t(N,[2,33]),t(St,[2,117],{103:zt}),t(St,[2,118],{103:zt})],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],u=[],i=[null],n=[],r=this.table,a="",c=0,o=0,l=n.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(A.yy[d]=this.yy[d]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;n.push(p);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,f,g,k,D,b,F,T,C,_={};;){if(f=s[s.length-1],this.defaultActions[f]?g=this.defaultActions[f]:(null==E&&(C=void 0,"number"!=typeof(C=u.pop()||h.lex()||1)&&(C instanceof Array&&(C=(u=C).pop()),C=e.symbols_[C]||C),E=C),g=r[f]&&r[f][E]),void 0===g||!g.length||!g[0]){var B="";for(D in T=[],r[f])this.terminals_[D]&&D>2&&T.push("'"+this.terminals_[D]+"'");B=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(B,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:p,expected:T})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+f+", token: "+E);switch(g[0]){case 1:s.push(E),i.push(h.yytext),n.push(h.yylloc),s.push(g[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,p=h.yylloc;break;case 2:if(b=this.productions_[g[1]][1],_.$=i[i.length-b],_._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},y&&(_._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(k=this.performAction.apply(_,[a,o,c,A.yy,g[1],i,n].concat(l))))return k;b&&(s=s.slice(0,-1*b*2),i=i.slice(0,-1*b),n=n.slice(0,-1*b)),s.push(this.productions_[g[1]][0]),i.push(_.$),n.push(_._$),F=r[s[s.length-2]][s[s.length-1]],s.push(F);break;case 3:return!0}}return!0}},qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===u.length?this.yylloc.first_column:0)+u[u.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,u,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(u=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in i)this[n]=i[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,u;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),n=0;n<i.length;n++)if((s=this._input.match(this.rules[i[n]]))&&(!e||s[0].length>e[0].length)){if(e=s,u=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[u]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,u){switch(s){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:case 8:case 11:case 14:case 17:case 27:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 12:return 93;case 13:return"MD_STR";case 15:this.begin("md_string");break;case 16:return"STR";case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 28:return 85;case 29:case 30:case 31:return t.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:case 35:case 36:case 37:return 95;case 38:return this.popState(),13;case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:case 95:return 108;case 55:return 44;case 56:return 58;case 57:case 96:return 42;case 58:return 8;case 59:return 103;case 60:case 94:return 112;case 61:case 64:case 67:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:case 66:case 69:return 116;case 65:return this.pushState("thickEdgeText"),73;case 68:return this.pushState("dottedEdgeText"),73;case 70:return 75;case 71:return this.popState(),51;case 72:case 108:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};function Zt(){this.yy={}}return Qt.lexer=qt,Zt.prototype=Qt,Qt.Parser=Zt,new Zt}();n.parser=n;const r=n;let a,c,o=0,l=(0,i.c)(),h={},A=[],d={},p=[],y={},E={},f=0,g=!0,k=[];const D=t=>i.e.sanitizeText(t,l),b=function(t){const e=Object.keys(h);for(const s of e)if(h[s].id===t)return h[s].domId;return t},F=function(t,e,s,u,n,r,a={}){let c,A=t;void 0!==A&&0!==A.trim().length&&(void 0===h[A]&&(h[A]={id:A,labelType:"text",domId:"flowchart-"+A+"-"+o,styles:[],classes:[]}),o++,void 0!==e?(l=(0,i.c)(),c=D(e.text.trim()),h[A].labelType=e.type,'"'===c[0]&&'"'===c[c.length-1]&&(c=c.substring(1,c.length-1)),h[A].text=c):void 0===h[A].text&&(h[A].text=t),void 0!==s&&(h[A].type=s),null!=u&&u.forEach((function(t){h[A].styles.push(t)})),null!=n&&n.forEach((function(t){h[A].classes.push(t)})),void 0!==r&&(h[A].dir=r),void 0===h[A].props?h[A].props=a:void 0!==a&&Object.assign(h[A].props,a))},T=function(t,e,s){const u={start:t,end:e,type:void 0,text:"",labelType:"text"};i.l.info("abc78 Got edge...",u);const n=s.text;if(void 0!==n&&(u.text=D(n.text.trim()),'"'===u.text[0]&&'"'===u.text[u.text.length-1]&&(u.text=u.text.substring(1,u.text.length-1)),u.labelType=n.type),void 0!==s&&(u.type=s.type,u.stroke=s.stroke,u.length=s.length),(null==u?void 0:u.length)>10&&(u.length=10),!(A.length<(l.maxEdges??500)))throw new Error(`Edge limit exceeded. ${A.length} edges found, but the limit is ${l.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges. \nYou cannot set this config via configuration inside the diagram as it is a secure config. \nYou have to call mermaid.initialize.`);i.l.info("abc78 pushing edge..."),A.push(u)},C=function(t,e,s){let u,n;for(i.l.info("addLink (abc78)",t,e,s),u=0;u<t.length;u++)for(n=0;n<e.length;n++)T(t[u],e[n],s)},_=function(t,e){t.forEach((function(t){"default"===t?A.defaultInterpolate=e:A[t].interpolate=e}))},B=function(t,e){t.forEach((function(t){if(t>=A.length)throw new Error(`The index ${t} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${A.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);"default"===t?A.defaultStyle=e:(-1===i.u.isSubstringInArray("fill",e)&&e.push("fill:none"),A[t].style=e)}))},S=function(t,e){t.split(",").forEach((function(t){void 0===d[t]&&(d[t]={id:t,styles:[],textStyles:[]}),null!=e&&e.forEach((function(e){if(e.match("color")){const s=e.replace("fill","bgFill").replace("color","fill");d[t].textStyles.push(s)}d[t].styles.push(e)}))}))},m=function(t){a=t,a.match(/.*</)&&(a="RL"),a.match(/.*\^/)&&(a="BT"),a.match(/.*>/)&&(a="LR"),a.match(/.*v/)&&(a="TB"),"TD"===a&&(a="TB")},x=function(t,e){t.split(",").forEach((function(t){let s=t;void 0!==h[s]&&h[s].classes.push(e),void 0!==y[s]&&y[s].classes.push(e)}))},v=function(t,e,s){t.split(",").forEach((function(t){void 0!==h[t]&&(h[t].link=i.u.formatUrl(e,l),h[t].linkTarget=s)})),x(t,"clickable")},L=function(t){if(E.hasOwnProperty(t))return E[t]},I=function(t,e,s){t.split(",").forEach((function(t){!function(t,e,s){let u=b(t);if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<n.length;t++){let e=n[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),n[t]=e}}0===n.length&&n.push(t),void 0!==h[t]&&(h[t].haveCallback=!0,k.push((function(){const t=document.querySelector(`[id="${u}"]`);null!==t&&t.addEventListener("click",(function(){i.u.runFunc(e,...n)}),!1)})))}(t,e,s)})),x(t,"clickable")},R=function(t){k.forEach((function(e){e(t)}))},$=function(){return a.trim()},N=function(){return h},O=function(){return A},w=function(){return d},P=function(t){let e=(0,u.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,u.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,u.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,u.Ys)(this);if(null===t.attr("title"))return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.bottom+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,u.Ys)(this).classed("hover",!1)}))};k.push(P);const U=function(t="gen-1"){h={},d={},A=[],k=[P],p=[],y={},f=0,E={},g=!0,c=t,l=(0,i.c)(),(0,i.t)()},V=t=>{c=t||"gen-2"},G=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},M=function(t,e,s){let u=t.text.trim(),n=s.text;t===s&&s.text.match(/\s/)&&(u=void 0);let r=[];const{nodeList:a,dir:o}=function(t){const e={boolean:{},number:{},string:{}},s=[];let u;return{nodeList:t.filter((function(t){const i=typeof t;return t.stmt&&"dir"===t.stmt?(u=t.value,!1):""!==t.trim()&&(i in e?!e[i].hasOwnProperty(t)&&(e[i][t]=!0):!s.includes(t)&&s.push(t))})),dir:u}}(r.concat.apply(r,e));if(r=a,"gen-1"===c)for(let i=0;i<r.length;i++)r[i]=b(r[i]);u=u||"subGraph"+f,n=n||"",n=D(n),f+=1;const l={id:u,nodes:r,title:n.trim(),classes:[],dir:o,labelType:s.type};return i.l.info("Adding",l.id,l.nodes,l.dir),l.nodes=J(l,p).nodes,p.push(l),y[u]=l,u},Y=function(t){for(const[e,s]of p.entries())if(s.id===t)return e;return-1};let K=-1;const j=[],X=function(t,e){const s=p[e].nodes;if(K+=1,K>2e3)return;if(j[K]=e,p[e].id===t)return{result:!0,count:0};let u=0,i=1;for(;u<s.length;){const e=Y(s[u]);if(e>=0){const s=X(t,e);if(s.result)return{result:!0,count:i+s.count};i+=s.count}u+=1}return{result:!1,count:i}},z=function(t){return j[t]},H=function(){K=-1,p.length>0&&X("none",p.length-1)},W=function(){return p},Q=()=>!!g&&(g=!1,!0),q=(t,e)=>{const s=(t=>{const e=t.trim();let s=e.slice(0,-1),u="arrow_open";switch(e.slice(-1)){case"x":u="arrow_cross","x"===e[0]&&(u="double_"+u,s=s.slice(1));break;case">":u="arrow_point","<"===e[0]&&(u="double_"+u,s=s.slice(1));break;case"o":u="arrow_circle","o"===e[0]&&(u="double_"+u,s=s.slice(1))}let i="normal",n=s.length-1;"="===s[0]&&(i="thick"),"~"===s[0]&&(i="invisible");let r=((t,e)=>{const s=e.length;let u=0;for(let i=0;i<s;++i)e[i]===t&&++u;return u})(".",s);return r&&(i="dotted",n=r),{type:u,stroke:i,length:n}})(t);let u;if(e){if(u=(t=>{let e=t.trim(),s="arrow_open";switch(e[0]){case"<":s="arrow_point",e=e.slice(1);break;case"x":s="arrow_cross",e=e.slice(1);break;case"o":s="arrow_circle",e=e.slice(1)}let u="normal";return e.includes("=")&&(u="thick"),e.includes(".")&&(u="dotted"),{type:s,stroke:u}})(e),u.stroke!==s.stroke)return{type:"INVALID",stroke:"INVALID"};if("arrow_open"===u.type)u.type=s.type;else{if(u.type!==s.type)return{type:"INVALID",stroke:"INVALID"};u.type="double_"+u.type}return"double_arrow"===u.type&&(u.type="double_arrow_point"),u.length=s.length,u}return s},Z=(t,e)=>{let s=!1;return t.forEach((t=>{t.nodes.indexOf(e)>=0&&(s=!0)})),s},J=(t,e)=>{const s=[];return t.nodes.forEach(((u,i)=>{Z(e,u)||s.push(t.nodes[i])})),{nodes:s}},tt={firstGraph:Q},et={defaultConfig:()=>i.H.flowchart,setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,addVertex:F,lookUpDomId:b,addLink:C,updateLinkInterpolate:_,updateLink:B,addClass:S,setDirection:m,setClass:x,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(E["gen-1"===c?b(t):t]=D(e))}))},getTooltip:L,setClickEvent:I,setLink:v,bindFunctions:R,getDirection:$,getVertices:N,getEdges:O,getClasses:w,clear:U,setGen:V,defaultStyle:G,addSubGraph:M,getDepthFirstPos:z,indexNodes:H,getSubGraphs:W,destructLink:q,lex:tt,exists:Z,makeUniq:J,setDiagramTitle:i.q,getDiagramTitle:i.r},st=Object.freeze(Object.defineProperty({__proto__:null,addClass:S,addLink:C,addSingleLink:T,addSubGraph:M,addVertex:F,bindFunctions:R,clear:U,default:et,defaultStyle:G,destructLink:q,firstGraph:Q,getClasses:w,getDepthFirstPos:z,getDirection:$,getEdges:O,getSubGraphs:W,getTooltip:L,getVertices:N,indexNodes:H,lex:tt,lookUpDomId:b,setClass:x,setClickEvent:I,setDirection:m,setGen:V,setLink:v,updateLink:B,updateLinkInterpolate:_},Symbol.toStringTag,{value:"Module"}))}}]); \ No newline at end of file diff --git a/assets/js/3952.a9404373.js b/assets/js/3952.a9404373.js new file mode 100644 index 0000000000..9253b7ed5e --- /dev/null +++ b/assets/js/3952.a9404373.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3952],{43349:(e,t,n)=>{n.d(t,{a:()=>l});var r=n(96225);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.bg(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap");var a=l.node().getBoundingClientRect();return n.attr("width",a.width).attr("height",a.height),n}},96225:(e,t,n)=>{n.d(t,{$p:()=>d,O1:()=>a,WR:()=>p,bF:()=>o,bg:()=>c});var r=n(37514),l=n(73234);function o(e,t){return!!e.children(t).length}function a(e){return i(e.v)+":"+i(e.w)+":"+i(e.name)}var s=/:/g;function i(e){return e?String(e).replace(s,"\\:"):""}function c(e,t){t&&e.attr("style",t)}function d(e,t,n){t&&e.attr("class",t).attr("class",n+" "+e.attr("class"))}function p(e,t){var n=t.graph();if(r.Z(n)){var o=n.transition;if(l.Z(o))return o(e)}return e}},59792:(e,t,n)=>{n.d(t,{Z:()=>o});var r=n(61691),l=n(71610);const o=(e,t)=>r.Z.lang.round(l.Z.parse(e)[t])},63952:(e,t,n)=>{n.d(t,{diagram:()=>i});var r=n(93920),l=(n(45625),n(64218));n(28758),n(17452),n(3688),n(70870),n(41644),n(96225);n(43349);n(66749),n(74379);n(61666);l.c_6;var o=n(36841);n(27484),n(17967),n(27856),n(46060);const a={},s=function(e){const t=Object.keys(e);for(const n of t)a[n]=e[n]},i={parser:r.p,db:r.f,renderer:o.f,styles:o.a,init:e=>{e.flowchart||(e.flowchart={}),e.flowchart.arrowMarkerAbsolute=e.arrowMarkerAbsolute,s(e.flowchart),r.f.clear(),r.f.setGen("gen-1")}}},36841:(e,t,n)=>{n.d(t,{a:()=>w,f:()=>f});var r=n(45625),l=n(64218),o=n(28758),a=n(60905),s=n(43349),i=n(59792),c=n(51117);const d={},p=function(e,t,n,r,l,a){const i=r.select(`[id="${n}"]`);Object.keys(e).forEach((function(n){const r=e[n];let c="default";r.classes.length>0&&(c=r.classes.join(" ")),c+=" flowchart-label";const d=(0,o.k)(r.styles);let p,b=void 0!==r.text?r.text:r.id;if(o.l.info("vertex",r,r.labelType),"markdown"===r.labelType)o.l.info("vertex",r,r.labelType);else if((0,o.m)((0,o.c)().flowchart.htmlLabels)){const e={label:b.replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`))};p=(0,s.a)(i,e).node(),p.parentNode.removeChild(p)}else{const e=l.createElementNS("http://www.w3.org/2000/svg","text");e.setAttribute("style",d.labelStyle.replace("color:","fill:"));const t=b.split(o.e.lineBreakRegex);for(const n of t){const t=l.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),t.setAttribute("dy","1em"),t.setAttribute("x","1"),t.textContent=n,e.appendChild(t)}p=e}let f=0,w="";switch(r.type){case"round":f=5,w="rect";break;case"square":case"group":default:w="rect";break;case"diamond":w="question";break;case"hexagon":w="hexagon";break;case"odd":case"odd_right":w="rect_left_inv_arrow";break;case"lean_right":w="lean_right";break;case"lean_left":w="lean_left";break;case"trapezoid":w="trapezoid";break;case"inv_trapezoid":w="inv_trapezoid";break;case"circle":w="circle";break;case"ellipse":w="ellipse";break;case"stadium":w="stadium";break;case"subroutine":w="subroutine";break;case"cylinder":w="cylinder";break;case"doublecircle":w="doublecircle"}t.setNode(r.id,{labelStyle:d.labelStyle,shape:w,labelText:b,labelType:r.labelType,rx:f,ry:f,class:c,style:d.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:a.db.getTooltip(r.id)||"",domId:a.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:"group"===r.type?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:(0,o.c)().flowchart.padding}),o.l.info("setNode",{labelStyle:d.labelStyle,labelType:r.labelType,shape:w,labelText:b,rx:f,ry:f,class:c,style:d.style,id:r.id,domId:a.db.lookUpDomId(r.id),width:"group"===r.type?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:(0,o.c)().flowchart.padding})}))},b=function(e,t,n){o.l.info("abc78 edges = ",e);let r,a,s=0,i={};if(void 0!==e.defaultStyle){const t=(0,o.k)(e.defaultStyle);r=t.style,a=t.labelStyle}e.forEach((function(n){s++;const c="L-"+n.start+"-"+n.end;void 0===i[c]?(i[c]=0,o.l.info("abc78 new entry",c,i[c])):(i[c]++,o.l.info("abc78 new entry",c,i[c]));let p=c+"-"+i[c];o.l.info("abc78 new link id to be used is",c,p,i[c]);const b="LS-"+n.start,f="LE-"+n.end,w={style:"",labelStyle:""};switch(w.minlen=n.length||1,"arrow_open"===n.type?w.arrowhead="none":w.arrowhead="normal",w.arrowTypeStart="arrow_open",w.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":w.arrowTypeStart="arrow_cross";case"arrow_cross":w.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":w.arrowTypeStart="arrow_point";case"arrow_point":w.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":w.arrowTypeStart="arrow_circle";case"arrow_circle":w.arrowTypeEnd="arrow_circle"}let u="",h="";switch(n.stroke){case"normal":u="fill:none;",void 0!==r&&(u=r),void 0!==a&&(h=a),w.thickness="normal",w.pattern="solid";break;case"dotted":w.thickness="normal",w.pattern="dotted",w.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":w.thickness="thick",w.pattern="solid",w.style="stroke-width: 3.5px;fill:none;";break;case"invisible":w.thickness="invisible",w.pattern="solid",w.style="stroke-width: 0;fill:none;"}if(void 0!==n.style){const e=(0,o.k)(n.style);u=e.style,h=e.labelStyle}w.style=w.style+=u,w.labelStyle=w.labelStyle+=h,void 0!==n.interpolate?w.curve=(0,o.n)(n.interpolate,l.c_6):void 0!==e.defaultInterpolate?w.curve=(0,o.n)(e.defaultInterpolate,l.c_6):w.curve=(0,o.n)(d.curve,l.c_6),void 0===n.text?void 0!==n.style&&(w.arrowheadStyle="fill: #333"):(w.arrowheadStyle="fill: #333",w.labelpos="c"),w.labelType=n.labelType,w.label=n.text.replace(o.e.lineBreakRegex,"\n"),void 0===n.style&&(w.style=w.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),w.labelStyle=w.labelStyle.replace("color:","fill:"),w.id=p,w.classes="flowchart-link "+b+" "+f,t.setEdge(n.start,n.end,w,s)}))},f={setConf:function(e){const t=Object.keys(e);for(const n of t)d[n]=e[n]},addVertices:p,addEdges:b,getClasses:function(e,t){return t.db.getClasses()},draw:async function(e,t,n,s){o.l.info("Drawing flowchart");let i=s.db.getDirection();void 0===i&&(i="TD");const{securityLevel:c,flowchart:d}=(0,o.c)(),f=d.nodeSpacing||50,w=d.rankSpacing||50;let u;"sandbox"===c&&(u=(0,l.Ys)("#i"+t));const h="sandbox"===c?(0,l.Ys)(u.nodes()[0].contentDocument.body):(0,l.Ys)("body"),g="sandbox"===c?u.nodes()[0].contentDocument:document,y=new r.k({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:f,ranksep:w,marginx:0,marginy:0}).setDefaultEdgeLabel((function(){return{}}));let k;const x=s.db.getSubGraphs();o.l.info("Subgraphs - ",x);for(let r=x.length-1;r>=0;r--)k=x[r],o.l.info("Subgraph - ",k),s.db.addVertex(k.id,{text:k.title,type:k.labelType},"group",void 0,k.classes,k.dir);const v=s.db.getVertices(),m=s.db.getEdges();o.l.info("Edges",m);let S=0;for(S=x.length-1;S>=0;S--){k=x[S],(0,l.td_)("cluster").append("text");for(let e=0;e<k.nodes.length;e++)o.l.info("Setting up subgraphs",k.nodes[e],k.id),y.setParent(k.nodes[e],k.id)}p(v,y,t,h,g,s),b(m,y);const T=h.select(`[id="${t}"]`),_=h.select("#"+t+" g");if(await(0,a.r)(_,y,["point","circle","cross"],"flowchart",t),o.u.insertTitle(T,"flowchartTitleText",d.titleTopMargin,s.db.getDiagramTitle()),(0,o.o)(y,T,d.diagramPadding,d.useMaxWidth),s.db.indexNodes("subGraph"+S),!d.htmlLabels){const e=g.querySelectorAll('[id="'+t+'"] .edgeLabel .label');for(const t of e){const e=t.getBBox(),n=g.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("rx",0),n.setAttribute("ry",0),n.setAttribute("width",e.width),n.setAttribute("height",e.height),t.insertBefore(n,t.firstChild)}}Object.keys(v).forEach((function(e){const n=v[e];if(n.link){const r=(0,l.Ys)("#"+t+' [id="'+e+'"]');if(r){const e=g.createElementNS("http://www.w3.org/2000/svg","a");e.setAttributeNS("http://www.w3.org/2000/svg","class",n.classes.join(" ")),e.setAttributeNS("http://www.w3.org/2000/svg","href",n.link),e.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),"sandbox"===c?e.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):n.linkTarget&&e.setAttributeNS("http://www.w3.org/2000/svg","target",n.linkTarget);const t=r.insert((function(){return e}),":first-child"),l=r.select(".label-container");l&&t.append((function(){return l.node()}));const o=r.select(".label");o&&t.append((function(){return o.node()}))}}}))}},w=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${((e,t)=>{const n=i.Z,r=n(e,"r"),l=n(e,"g"),o=n(e,"b");return c.Z(r,l,o,t)})(e.edgeLabelBackground,.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${e.clusterBkg};\n stroke: ${e.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`}}]); \ No newline at end of file diff --git a/assets/js/3966.e4cb16cd.js b/assets/js/3966.e4cb16cd.js new file mode 100644 index 0000000000..485cee31b2 --- /dev/null +++ b/assets/js/3966.e4cb16cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3966],{83966:(t,i,e)=>{e.d(i,{diagram:()=>O});var s=e(28758),n=e(78314),a=e(64218),h=(e(27484),e(17967),e(27856),function(){var t=function(t,i,e,s){for(e=e||{},s=t.length;s--;e[t[s]]=i);return e},i=[1,10,12,14,16,18,19,21,23],e=[2,6],s=[1,3],n=[1,5],a=[1,6],h=[1,7],o=[1,5,10,12,14,16,18,19,21,23,34,35,36],r=[1,25],l=[1,26],c=[1,28],g=[1,29],u=[1,30],x=[1,31],d=[1,32],p=[1,33],f=[1,34],y=[1,35],m=[1,36],b=[1,37],A=[1,43],w=[1,42],S=[1,47],C=[1,50],k=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],T=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],D={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(t,i,e,s,n,a,h){var o=a.length-1;switch(n){case 5:s.setOrientation(a[o]);break;case 9:s.setDiagramTitle(a[o].text.trim());break;case 12:s.setLineData({text:"",type:"text"},a[o]);break;case 13:s.setLineData(a[o-1],a[o]);break;case 14:s.setBarData({text:"",type:"text"},a[o]);break;case 15:s.setBarData(a[o-1],a[o]);break;case 16:this.$=a[o].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=a[o].trim(),s.setAccDescription(this.$);break;case 19:case 27:this.$=a[o-1];break;case 20:this.$=[Number(a[o-2]),...a[o]];break;case 21:this.$=[Number(a[o])];break;case 22:s.setXAxisTitle(a[o]);break;case 23:s.setXAxisTitle(a[o-1]);break;case 24:s.setXAxisTitle({type:"text",text:""});break;case 25:s.setXAxisBand(a[o]);break;case 26:s.setXAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 28:this.$=[a[o-2],...a[o]];break;case 29:this.$=[a[o]];break;case 30:s.setYAxisTitle(a[o]);break;case 31:s.setYAxisTitle(a[o-1]);break;case 32:s.setYAxisTitle({type:"text",text:""});break;case 33:s.setYAxisRangeData(Number(a[o-2]),Number(a[o]));break;case 37:case 38:this.$={text:a[o],type:"text"};break;case 39:this.$={text:a[o],type:"markdown"};break;case 40:this.$=a[o];break;case 41:this.$=a[o-1]+""+a[o]}},table:[t(i,e,{3:1,4:2,7:4,5:s,34:n,35:a,36:h}),{1:[3]},t(i,e,{4:2,7:4,3:8,5:s,34:n,35:a,36:h}),t(i,e,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:a,36:h}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(o,[2,34]),t(o,[2,35]),t(o,[2,36]),{1:[2,1]},t(i,e,{4:2,7:4,3:21,5:s,34:n,35:a,36:h}),{1:[2,3]},t(o,[2,5]),t(i,[2,7],{4:22,34:n,35:a,36:h}),{11:23,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:39,13:38,24:A,27:w,29:40,30:41,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:45,15:44,27:S,33:46,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:49,17:48,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{11:52,17:51,24:C,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},{20:[1,53]},{22:[1,54]},t(k,[2,18]),{1:[2,2]},t(k,[2,8]),t(k,[2,9]),t(_,[2,37],{40:55,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b}),t(_,[2,38]),t(_,[2,39]),t(T,[2,40]),t(T,[2,42]),t(T,[2,43]),t(T,[2,44]),t(T,[2,45]),t(T,[2,46]),t(T,[2,47]),t(T,[2,48]),t(T,[2,49]),t(T,[2,50]),t(T,[2,51]),t(k,[2,10]),t(k,[2,22],{30:41,29:56,24:A,27:w}),t(k,[2,24]),t(k,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,11]),t(k,[2,30],{33:60,27:S}),t(k,[2,32]),{31:[1,61]},t(k,[2,12]),{17:62,24:C},{25:63,27:R},t(k,[2,14]),{17:65,24:C},t(k,[2,16]),t(k,[2,17]),t(T,[2,41]),t(k,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(k,[2,31]),{27:[1,69]},t(k,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(k,[2,15]),t(k,[2,26]),t(k,[2,27]),{11:59,32:72,37:24,38:r,39:l,40:27,41:c,42:g,43:u,44:x,45:d,46:p,47:f,48:y,49:m,50:b},t(k,[2,33]),t(k,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(t,i){if(!i.recoverable){var e=new Error(t);throw e.hash=i,e}this.trace(t)},parse:function(t){var i=this,e=[0],s=[],n=[null],a=[],h=this.table,o="",r=0,l=0,c=a.slice.call(arguments,1),g=Object.create(this.lexer),u={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(u.yy[x]=this.yy[x]);g.setInput(t,u.yy),u.yy.lexer=g,u.yy.parser=this,void 0===g.yylloc&&(g.yylloc={});var d=g.yylloc;a.push(d);var p=g.options&&g.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,y,m,b,A,w,S,C,k,_={};;){if(y=e[e.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==f&&(k=void 0,"number"!=typeof(k=s.pop()||g.lex()||1)&&(k instanceof Array&&(k=(s=k).pop()),k=i.symbols_[k]||k),f=k),m=h[y]&&h[y][f]),void 0===m||!m.length||!m[0]){var T="";for(A in C=[],h[y])this.terminals_[A]&&A>2&&C.push("'"+this.terminals_[A]+"'");T=g.showPosition?"Parse error on line "+(r+1)+":\n"+g.showPosition()+"\nExpecting "+C.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(r+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(T,{text:g.match,token:this.terminals_[f]||f,line:g.yylineno,loc:d,expected:C})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+f);switch(m[0]){case 1:e.push(f),n.push(g.yytext),a.push(g.yylloc),e.push(m[1]),f=null,l=g.yyleng,o=g.yytext,r=g.yylineno,d=g.yylloc;break;case 2:if(w=this.productions_[m[1]][1],_.$=n[n.length-w],_._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},p&&(_._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(_,[o,l,r,u.yy,m[1],n,a].concat(c))))return b;w&&(e=e.slice(0,-1*w*2),n=n.slice(0,-1*w),a=a.slice(0,-1*w)),e.push(this.productions_[m[1]][0]),n.push(_.$),a.push(_._$),S=h[e[e.length-2]][e[e.length-1]],e.push(S);break;case 3:return!0}}return!0}},L={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===s.length?this.yylloc.first_column:0)+s[s.length-e.length].length-e[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var e,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var a in n)this[a]=n[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,e,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),a=0;a<n.length;a++)if((e=this._input.match(this.rules[n[a]]))&&(!i||e[0].length>i[0].length)){if(i=e,s=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,n[a])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,n[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,e,s){switch(e){case 0:case 1:case 5:case 43:break;case 2:case 3:return this.popState(),34;case 4:return 34;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:case 25:case 27:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 26:this.pushState("string");break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 44:return 35;case 45:return 36}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};function P(){this.yy={}}return D.lexer=L,P.prototype=D,D.Parser=P,new P}());h.parser=h;const o=h;function r(t){return"bar"===t.type}function l(t){return"band"===t.type}function c(t){return"linear"===t.type}class g{constructor(t){this.parentGroup=t}getMaxDimension(t,i){if(!this.parentGroup)return{width:t.reduce(((t,i)=>Math.max(i.length,t)),0)*i,height:i};const e={width:0,height:0},s=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",i);for(const a of t){const t=(0,n.c)(s,1,a),h=t?t.width:a.length*i,o=t?t.height:i;e.width=Math.max(e.width,h),e.height=Math.max(e.height,o)}return s.remove(),e}}class u{constructor(t,i,e,s){this.axisConfig=t,this.title=i,this.textDimensionCalculator=e,this.axisThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(t){this.range=t,"left"===this.axisPosition||"right"===this.axisPosition?this.boundingRect.height=t[1]-t[0]:this.boundingRect.width=t[1]-t[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(t){this.axisPosition=t,this.setRange(this.range)}getTickDistance(){const t=this.getRange();return Math.abs(t[0]-t[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map((t=>t.toString())),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>2*this.outerPadding&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(t){let i=t.height;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.width;this.outerPadding=Math.min(e.width/2,s);const n=e.height+2*this.axisConfig.labelPadding;this.labelTextHeight=e.height,n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width,this.boundingRect.height=t.height-i}calculateSpaceIfDrawnVertical(t){let i=t.width;if(this.axisConfig.showAxisLine&&i>this.axisConfig.axisLineWidth&&(i-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const e=this.getLabelDimension(),s=.2*t.height;this.outerPadding=Math.min(e.height/2,s);const n=e.width+2*this.axisConfig.labelPadding;n<=i&&(i-=n,this.showLabel=!0)}if(this.axisConfig.showTick&&i>=this.axisConfig.tickLength&&(this.showTick=!0,i-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const t=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),e=t.height+2*this.axisConfig.titlePadding;this.titleTextHeight=t.height,e<=i&&(i-=e,this.showTitle=!0)}this.boundingRect.width=t.width-i,this.boundingRect.height=t.height}calculateSpace(t){return"left"===this.axisPosition||"right"===this.axisPosition?this.calculateSpaceIfDrawnVertical(t):this.calculateSpaceIfDrawnHorizontally(t),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}getDrawableElementsForLeftAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${i},${this.boundingRect.y} L ${i},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(t),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"})))}),this.showTick){const i=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${i},${this.getScaleValue(t)} L ${i-this.axisConfig.tickLength},${this.getScaleValue(t)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForBottomAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);t.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i} L ${this.getScaleValue(t)},${i+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElementsForTopAxis(){const t=[];if(this.showAxisLine){const i=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;t.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${i} L ${this.boundingRect.x+this.boundingRect.width},${i}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&t.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map((t=>({text:t.toString(),x:this.getScaleValue(t),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+2*this.axisConfig.titlePadding:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"})))}),this.showTick){const i=this.boundingRect.y;t.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map((t=>({path:`M ${this.getScaleValue(t)},${i+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(t)},${i+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth})))})}return this.showTitle&&t.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),t}getDrawableElements(){if("left"===this.axisPosition)return this.getDrawableElementsForLeftAxis();if("right"===this.axisPosition)throw Error("Drawing of right axis is not implemented");return"bottom"===this.axisPosition?this.getDrawableElementsForBottomAxis():"top"===this.axisPosition?this.getDrawableElementsForTopAxis():[]}}class x extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.categories=e,this.scale=(0,a.tiA)().domain(this.categories).range(this.getRange())}setRange(t){super.setRange(t)}recalculateScale(){this.scale=(0,a.tiA)().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),s.l.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(t){return this.scale(t)||this.getRange()[0]}}class d extends u{constructor(t,i,e,s,n){super(t,s,n,i),this.domain=e,this.scale=(0,a.BYU)().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const t=[...this.domain];"left"===this.axisPosition&&t.reverse(),this.scale=(0,a.BYU)().domain(t).range(this.getRange())}getScaleValue(t){return this.scale(t)}}function p(t,i,e,s){const n=new g(s);return l(t)?new x(i,e,t.categories,t.title,n):new d(i,e,[t.min,t.max],t.title,n)}class f{constructor(t,i,e,s){this.textDimensionCalculator=t,this.chartConfig=i,this.chartData=e,this.chartThemeConfig=s,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){const i=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),e=Math.max(i.width,t.width),s=i.height+2*this.chartConfig.titlePadding;return i.width<=e&&i.height<=s&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=e,this.boundingRect.height=s,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const t=[];return this.showChartTitle&&t.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),t}}function y(t,i,e,s){const n=new g(s);return new f(n,t,i,e)}class m{constructor(t,i,e,s,n){this.plotData=t,this.xAxis=i,this.yAxis=e,this.orientation=s,this.plotIndex=n}getDrawableElement(){const t=this.plotData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])]));let i;return i="horizontal"===this.orientation?(0,a.jvg)().y((t=>t[0])).x((t=>t[1]))(t):(0,a.jvg)().x((t=>t[0])).y((t=>t[1]))(t),i?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:i,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}class b{constructor(t,i,e,s,n,a){this.barData=t,this.boundingRect=i,this.xAxis=e,this.yAxis=s,this.orientation=n,this.plotIndex=a}getDrawableElement(){const t=this.barData.data.map((t=>[this.xAxis.getScaleValue(t[0]),this.yAxis.getScaleValue(t[1])])),i=.95*Math.min(2*this.xAxis.getAxisOuterPadding(),this.xAxis.getTickDistance()),e=i/2;return"horizontal"===this.orientation?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:this.boundingRect.x,y:t[0]-e,height:i,width:t[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:t.map((t=>({x:t[0]-e,y:t[1],width:i,height:this.boundingRect.y+this.boundingRect.height-t[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill})))}]}}class A{constructor(t,i,e){this.chartConfig=t,this.chartData=i,this.chartThemeConfig=e,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(t,i){this.xAxis=t,this.yAxis=i}setBoundingBoxXY(t){this.boundingRect.x=t.x,this.boundingRect.y=t.y}calculateSpace(t){return this.boundingRect.width=t.width,this.boundingRect.height=t.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!this.xAxis||!this.yAxis)throw Error("Axes must be passed to render Plots");const t=[];for(const[i,e]of this.chartData.plots.entries())switch(e.type){case"line":{const s=new m(e,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}break;case"bar":{const s=new b(e,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,i);t.push(...s.getDrawableElement())}}return t}}function w(t,i,e){return new A(t,i,e)}class S{constructor(t,i,e,s){this.chartConfig=t,this.chartData=i,this.componentStore={title:y(t,i,e,s),plot:w(t,i,e),xAxis:p(i.xAxis,t.xAxis,{titleColor:e.xAxisTitleColor,labelColor:e.xAxisLabelColor,tickColor:e.xAxisTickColor,axisLineColor:e.xAxisLineColor},s),yAxis:p(i.yAxis,t.yAxis,{titleColor:e.yAxisTitleColor,labelColor:e.yAxisLabelColor,tickColor:e.yAxisTickColor,axisLineColor:e.yAxisLineColor},s)}}calculateVerticalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),a=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),h=this.componentStore.plot.calculateSpace({width:n,height:a});t-=h.width,i-=h.height,h=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),s=h.height,i-=h.height,this.componentStore.xAxis.setAxisPosition("bottom"),h=this.componentStore.xAxis.calculateSpace({width:t,height:i}),i-=h.height,this.componentStore.yAxis.setAxisPosition("left"),h=this.componentStore.yAxis.calculateSpace({width:t,height:i}),e=h.width,t-=h.width,t>0&&(n+=t,t=0),i>0&&(a+=i,i=0),this.componentStore.plot.calculateSpace({width:n,height:a}),this.componentStore.plot.setBoundingBoxXY({x:e,y:s}),this.componentStore.xAxis.setRange([e,e+n]),this.componentStore.xAxis.setBoundingBoxXY({x:e,y:s+a}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:s}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizonatalSpace(){let t=this.chartConfig.width,i=this.chartConfig.height,e=0,s=0,n=0,a=Math.floor(t*this.chartConfig.plotReservedSpacePercent/100),h=Math.floor(i*this.chartConfig.plotReservedSpacePercent/100),o=this.componentStore.plot.calculateSpace({width:a,height:h});t-=o.width,i-=o.height,o=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:i}),e=o.height,i-=o.height,this.componentStore.xAxis.setAxisPosition("left"),o=this.componentStore.xAxis.calculateSpace({width:t,height:i}),t-=o.width,s=o.width,this.componentStore.yAxis.setAxisPosition("top"),o=this.componentStore.yAxis.calculateSpace({width:t,height:i}),i-=o.height,n=e+o.height,t>0&&(a+=t,t=0),i>0&&(h+=i,i=0),this.componentStore.plot.calculateSpace({width:a,height:h}),this.componentStore.plot.setBoundingBoxXY({x:s,y:n}),this.componentStore.yAxis.setRange([s,s+a]),this.componentStore.yAxis.setBoundingBoxXY({x:s,y:e}),this.componentStore.xAxis.setRange([n,n+h]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:n}),this.chartData.plots.some((t=>r(t)))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){"horizontal"===this.chartConfig.chartOrientation?this.calculateHorizonatalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const t=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const i of Object.values(this.componentStore))t.push(...i.getDrawableElements());return t}}class C{static build(t,i,e,s){return new S(t,i,e,s).getDrawableElement()}}let k,_=0,T=I(),R=v(),D=M(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1;function v(){const t=(0,s.D)(),i=(0,s.E)();return(0,s.B)(t.xyChart,i.themeVariables.xyChart)}function I(){const t=(0,s.E)();return(0,s.B)(s.A.xyChart,t.xyChart)}function M(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function $(t){const i=(0,s.E)();return(0,s.d)(t.trim(),i)}function B(t,i){D.xAxis={type:"linear",title:D.xAxis.title,min:t,max:i},P=!0}function z(t){let i=[];if(0===t.length)return i;if(!P){const i=c(D.xAxis)?D.xAxis.min:1/0,e=c(D.xAxis)?D.xAxis.max:-1/0;B(Math.min(i,1),Math.max(e,t.length))}if(E||function(t){const i=Math.min(...t),e=Math.max(...t),s=c(D.yAxis)?D.yAxis.min:1/0,n=c(D.yAxis)?D.yAxis.max:-1/0;D.yAxis={type:"linear",title:D.yAxis.title,min:Math.min(s,i),max:Math.max(n,e)}}(t),l(D.xAxis)&&(i=D.xAxis.categories.map(((i,e)=>[i,t[e]]))),c(D.xAxis)){const e=D.xAxis.min,s=D.xAxis.max,n=(s-e+1)/t.length,a=[];for(let t=e;t<=s;t+=n)a.push(`${t}`);i=a.map(((i,e)=>[i,t[e]]))}return i}function W(t){return L[0===t?0:t%L.length]}const O={parser:o,db:{getDrawableElem:function(){if(0===D.plots.length)throw Error("No Plot to render, please provide a plot with some data");return D.title=(0,s.r)(),C.build(T,D,R,k)},clear:function(){(0,s.t)(),_=0,T=I(),D={yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]},R=v(),L=R.plotColorPalette.split(",").map((t=>t.trim())),P=!1,E=!1},setAccTitle:s.s,getAccTitle:s.g,setDiagramTitle:s.q,getDiagramTitle:s.r,getAccDescription:s.a,setAccDescription:s.b,setOrientation:function(t){T.chartOrientation="horizontal"===t?"horizontal":"vertical"},setXAxisTitle:function(t){D.xAxis.title=$(t.text)},setXAxisRangeData:B,setXAxisBand:function(t){D.xAxis={type:"band",title:D.xAxis.title,categories:t.map((t=>$(t.text)))},P=!0},setYAxisTitle:function(t){D.yAxis.title=$(t.text)},setYAxisRangeData:function(t,i){D.yAxis={type:"linear",title:D.yAxis.title,min:t,max:i},E=!0},setLineData:function(t,i){const e=z(i);D.plots.push({type:"line",strokeFill:W(_),strokeWidth:2,data:e}),_++},setBarData:function(t,i){const e=z(i);D.plots.push({type:"bar",fill:W(_),data:e}),_++},setTmpSVGG:function(t){k=t},getChartThemeConfig:function(){return R},getChartConfig:function(){return T}},renderer:{draw:(t,i,e,n)=>{const a=n.db,h=a.getChartThemeConfig(),o=a.getChartConfig();function r(t){return`translate(${t.x}, ${t.y}) rotate(${t.rotation||0})`}s.l.debug("Rendering xychart chart\n"+t);const l=(0,s.z)(i),c=l.append("g").attr("class","main"),g=c.append("rect").attr("width",o.width).attr("height",o.height).attr("class","background");(0,s.i)(l,o.height,o.width,!0),l.attr("viewBox",`0 0 ${o.width} ${o.height}`),g.attr("fill",h.backgroundColor),a.setTmpSVGG(l.append("g").attr("class","mermaid-tmp-group"));const u=a.getDrawableElem(),x={};function d(t){let i=c,e="";for(const[s]of t.entries()){let n=c;s>0&&x[e]&&(n=x[e]),e+=t[s],i=x[e],i||(i=x[e]=n.append("g").attr("class",t[s]))}return i}for(const s of u){if(0===s.data.length)continue;const t=d(s.groupTexts);switch(s.type){case"rect":t.selectAll("rect").data(s.data).enter().append("rect").attr("x",(t=>t.x)).attr("y",(t=>t.y)).attr("width",(t=>t.width)).attr("height",(t=>t.height)).attr("fill",(t=>t.fill)).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth));break;case"text":t.selectAll("text").data(s.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",(t=>t.fill)).attr("font-size",(t=>t.fontSize)).attr("dominant-baseline",(t=>"top"===t.verticalPos?"text-before-edge":"middle")).attr("text-anchor",(t=>{return"left"===(i=t.horizontalPos)?"start":"right"===i?"end":"middle";var i})).attr("transform",(t=>r(t))).text((t=>t.text));break;case"path":t.selectAll("path").data(s.data).enter().append("path").attr("d",(t=>t.path)).attr("fill",(t=>t.fill?t.fill:"none")).attr("stroke",(t=>t.strokeFill)).attr("stroke-width",(t=>t.strokeWidth))}}}}}}}]); \ No newline at end of file diff --git a/assets/js/3aeef25a.1896e4de.js b/assets/js/3aeef25a.1896e4de.js new file mode 100644 index 0000000000..e8417639e3 --- /dev/null +++ b/assets/js/3aeef25a.1896e4de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7396],{61984:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var t=a(85893),r=a(11151);const i={},o="HEAD_MARGIN",s={id:"about/references/keywords/HEAD_MARGIN",title:"HEAD_MARGIN",description:"FACILITYINPUTS /",source:"@site/docs/about/references/keywords/HEAD_MARGIN.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/HEAD_MARGIN",permalink:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/HEAD_MARGIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"HEAD",permalink:"/ecalc/docs/about/references/keywords/HEAD"},next:{title:"INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"head_margin",children:"HEAD_MARGIN"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",children:"HEAD_MARGIN"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.p,{children:"When calibrating pump charts to historical data, the head values at maximum speed\ncould be put in the cloud of data to be unbiased. However, eCalc will treat all\nhead values above the maximum defined area in the chart infeasible (i.e.,\noutside pump capacity). To mitigate this when running through historical data for\npower calibration, one can adjust the head margin with this keyword."}),"\n",(0,t.jsxs)(n.p,{children:["Calculated head values above maximum head values from the chart will be set equal to\nmaximum head values before power calculations ",(0,t.jsx)(n.strong,{children:"if"})," they are within the margin given.\nCalculated head values larger than maximum + margin will still be infeasible."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsxs)(n.p,{children:["The head margin can be specified in ",(0,t.jsx)(n.code,{children:"mlc"})," (meter liquid column):"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"HEAD_MARGIN: <margin>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:" NAME: pump_name\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n FILE: <path_to_chart_file>.csv\n HEAD_MARGIN: 10.0\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>s,a:()=>o});var t=a(67294);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3b0e82f8.eaddd6fc.js b/assets/js/3b0e82f8.eaddd6fc.js new file mode 100644 index 0000000000..c7da2d72c5 --- /dev/null +++ b/assets/js/3b0e82f8.eaddd6fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[925],{61850:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>E,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var s=r(85893),c=r(11151);const t={},o="CURVE",i={id:"about/references/keywords/CURVE",title:"CURVE",description:"Description",source:"@site/docs/about/references/keywords/CURVE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CURVE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER"},next:{title:"CURVES",permalink:"/ecalc/docs/about/references/keywords/CURVES"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"curve",children:"CURVE"}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["When using a detailed single speed compressor model, it is necessary to specify the single speed ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/#user-defined-single-speed-compressor-chart",children:"COMPRESSOR CHART"}),". This can be defined from a .csv file, or it can be defined directly in the YAML file.\nIn either case, the keyword ",(0,s.jsx)(n.code,{children:"CURVE"})," needs to be used. If a .csv file is being used, under the ",(0,s.jsx)(n.code,{children:"CURVE"})," keyword, ",(0,s.jsx)(n.code,{children:"FILE"})," must be used. If specified directly in the YAML file, ",(0,s.jsx)(n.code,{children:"SPEED"}),", ",(0,s.jsx)(n.code,{children:"RATE"}),", ",(0,s.jsx)(n.code,{children:"HEAD"})," and ",(0,s.jsx)(n.code,{children:"EFFICIENCY"})," must be defined."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ...\n CURVE:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ... \n CURVE:\n - FILE: <filepath to compressor curve>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_single_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n ...\n CURVE:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n\n - NAME: compressor_chart\n TYPE: COMPRESSOR_CHART\n ... \n CURVE:\n - FILE: compressor_chart.csv\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>o});var s=r(67294);const c={},t=s.createContext(c);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3e38e310.bc8854f8.js b/assets/js/3e38e310.bc8854f8.js new file mode 100644 index 0000000000..981079059b --- /dev/null +++ b/assets/js/3e38e310.bc8854f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8094],{39424:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=a(85893),t=a(11151);const i={slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:13},l="eCalc v8.3",r={id:"changelog/v8-3",title:"v8.3",description:"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See",source:"@site/docs/changelog/v8-3.md",sourceDirName:"changelog",slug:"/changelog/v8.3-release",permalink:"/ecalc/docs/changelog/v8.3-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-3.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:13,frontMatter:{slug:"v8.3-release",title:"v8.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:13},sidebar:"changelog",previous:{title:"v8.2",permalink:"/ecalc/docs/changelog/v8.2-release"},next:{title:"v8.4",permalink:"/ecalc/docs/changelog/v8.4-release"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Input: YAML / Resource files",id:"input-yaml--resource-files",level:3}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc-v83",children:"eCalc v8.3"}),"\n",(0,s.jsx)(n.p,{children:"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See\r\nthe migration guide for details on changes, where relevant."}),"\n",(0,s.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"To save time in calibration and help diagnose pump issues: When calibrating or seeing why a pump is invalid, the most important thing to look at is the head. Now the head is available in the JSON file."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"A bug in the mixing of fluid-streams in compressor trains were fixed. This bug caused the density at standard conditions not to be updated, leading to the standard rates being wrong. This is expected to change the results of some eCalc Models"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,s.jsx)(n.p,{children:"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"}),"\n",(0,s.jsx)(n.h3,{id:"input-yaml--resource-files",children:"Input: YAML / Resource files"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["It is no longer accepted to change ",(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL TYPE"})," over time, within one consumer. In case ",(0,s.jsx)(n.code,{children:"TYPE"})," evolution is needed, the model can be split in two consumers."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>l});var s=a(67294);const t={},i=s.createContext(t);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fbb770c.39674007.js b/assets/js/3fbb770c.39674007.js new file mode 100644 index 0000000000..84fe9c49a9 --- /dev/null +++ b/assets/js/3fbb770c.39674007.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4838],{75894:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=r(85893),t=r(11151);const o={},c="SUCTION_PRESSURE",a={id:"about/references/keywords/SUCTION_PRESSURE",title:"SUCTION_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/SUCTION_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/SUCTION_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS"},next:{title:"TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"suction_pressure",children:"SUCTION_PRESSURE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["Used to define the suction pressure for some ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\ntypes and in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," using\na fixed value or an expression. If an expression is used, a time series can be used so that the suction pressure of the unit can vary over the lifespan of the model."]}),"\n",(0,s.jsxs)(n.p,{children:["Note that pressure values ",(0,s.jsx)(n.strong,{children:"must"})," be inputted in ",(0,s.jsx)(n.code,{children:"bar"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SUCTION_PRESSURE: <suction pressure value/expression>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SUCTION_PRESSURE: 10 \n"})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var s=r(67294);const t={},o=s.createContext(t);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/40d6382c.6514d67d.js b/assets/js/40d6382c.6514d67d.js new file mode 100644 index 0000000000..42ed390867 --- /dev/null +++ b/assets/js/40d6382c.6514d67d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9814],{13334:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var n=i(85893),o=i(11151);const r={title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},a=void 0,s={id:"about/migration_guides/index",title:"Migrating eCalc versions",description:"Getting started with eCalc",source:"@site/docs/about/migration_guides/index.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/",permalink:"/ecalc/docs/about/migration_guides/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/index.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{title:"Migrating eCalc versions",sidebar_position:1e3,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/references/cli_reference"},next:{title:"v7 to v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8"}},c={},u=[];function d(t){return(0,n.jsx)(n.Fragment,{})}function l(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(d,{...t})}):d()}},11151:(t,e,i)=>{i.d(e,{Z:()=>s,a:()=>a});var n=i(67294);const o={},r=n.createContext(o);function a(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/4147f87e.4efdf1e5.js b/assets/js/4147f87e.4efdf1e5.js new file mode 100644 index 0000000000..76a3e54eb3 --- /dev/null +++ b/assets/js/4147f87e.4efdf1e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9786],{32718:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>E,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var t=r(85893),s=r(11151);const o={},a="STAGES",i={id:"about/references/keywords/STAGES",title:"STAGES",description:"MODELS /",source:"@site/docs/about/references/keywords/STAGES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STAGES",permalink:"/ecalc/docs/about/references/keywords/STAGES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STAGES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"REGULARITY",permalink:"/ecalc/docs/about/references/keywords/REGULARITY"},next:{title:"START",permalink:"/ecalc/docs/about/references/keywords/START"}},E={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Use in <code>VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES</code>",id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"stages",children:"STAGES"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsx)(n.p,{children:"This keyword is used to define each stage in a compression train model. This is to be defined for all compressor models types."}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <compressor type>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n ....\n"})}),"\n",(0,t.jsxs)(n.h2,{id:"use-in-variable_speed_compressor_train_multiple_streams_and_pressures",children:["Use in ",(0,t.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"STAGES"})," is a list of all the stages in the compressor train."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"For each stage, a temperature in Celsius must be defined. It\nis assumed that the gas is cooled down to this temperature ahead of the compression at this stage."}),"\n",(0,t.jsx)(n.li,{children:"A reference to a\ncompressor chart needs to be specified for each stage."}),"\n",(0,t.jsxs)(n.li,{children:["For the first stage, it is required to have ",(0,t.jsx)(n.strong,{children:"at least"})," one stream of INGOING type. In addition, ",(0,t.jsx)(n.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," cannot be used on the first stage."]}),"\n",(0,t.jsx)(n.li,{children:"Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream\nwill be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the\nmolar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will\nbe subtracted the rate of the outgoing stream."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n CONTROL_MARGIN: <Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n"})}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var t=r(67294);const s={},o=t.createContext(s);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/417.defab4a9.js b/assets/js/417.defab4a9.js new file mode 100644 index 0000000000..cad45dfea9 --- /dev/null +++ b/assets/js/417.defab4a9.js @@ -0,0 +1,2095 @@ +exports.id = 417; +exports.ids = [417]; +exports.modules = { + +/***/ 28734: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}})); + +/***/ }), + +/***/ 10285: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,a("seconds")],ss:[r,a("seconds")],m:[r,a("minutes")],mm:[r,a("minutes")],H:[r,a("hours")],h:[r,a("hours")],HH:[r,a("hours")],hh:[r,a("hours")],D:[r,a("day")],DD:[n,a("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,a("month")],MM:[n,a("month")],MMM:[i,function(e){var t=h("months"),n=(h("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,a("year")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\d{4}/,a("year")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\[|\]$/g,"")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if("string"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,"")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if("string"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if(["x","X"].indexOf(t)>-1)return new Date(("X"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date("")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(""))}else i.call(this,e)}}})); + +/***/ }), + +/***/ 59542: +/***/ (function(module) { + +!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e="day";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf("year"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,"week")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return"isoweek"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):n.bind(this)(e,t)}}})); + +/***/ }), + +/***/ 39417: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17967); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59542); +/* harmony import */ var dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10285); +/* harmony import */ var dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28734); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64218); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(22424); + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 35, 37], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 29], $V6 = [1, 30], $V7 = [1, 31], $V8 = [1, 9], $V9 = [1, 10], $Va = [1, 11], $Vb = [1, 12], $Vc = [1, 13], $Vd = [1, 14], $Ve = [1, 15], $Vf = [1, 16], $Vg = [1, 18], $Vh = [1, 19], $Vi = [1, 20], $Vj = [1, 21], $Vk = [1, 22], $Vl = [1, 24], $Vm = [1, 32]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "gantt": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NL": 10, "weekday": 11, "weekday_monday": 12, "weekday_tuesday": 13, "weekday_wednesday": 14, "weekday_thursday": 15, "weekday_friday": 16, "weekday_saturday": 17, "weekday_sunday": 18, "dateFormat": 19, "inclusiveEndDates": 20, "topAxis": 21, "axisFormat": 22, "tickInterval": 23, "excludes": 24, "includes": 25, "todayMarker": 26, "title": 27, "acc_title": 28, "acc_title_value": 29, "acc_descr": 30, "acc_descr_value": 31, "acc_descr_multiline_value": 32, "section": 33, "clickStatement": 34, "taskTxt": 35, "taskData": 36, "click": 37, "callbackname": 38, "callbackargs": 39, "href": 40, "clickStatementDebug": 41, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "gantt", 6: "EOF", 8: "SPACE", 10: "NL", 12: "weekday_monday", 13: "weekday_tuesday", 14: "weekday_wednesday", 15: "weekday_thursday", 16: "weekday_friday", 17: "weekday_saturday", 18: "weekday_sunday", 19: "dateFormat", 20: "inclusiveEndDates", 21: "topAxis", 22: "axisFormat", 23: "tickInterval", 24: "excludes", 25: "includes", 26: "todayMarker", 27: "title", 28: "acc_title", 29: "acc_title_value", 30: "acc_descr", 31: "acc_descr_value", 32: "acc_descr_multiline_value", 33: "section", 35: "taskTxt", 36: "taskData", 37: "click", 38: "callbackname", 39: "callbackargs", 40: "href" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [11, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [34, 2], [34, 3], [34, 3], [34, 4], [34, 3], [34, 4], [34, 2], [41, 2], [41, 3], [41, 3], [41, 4], [41, 3], [41, 4], [41, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + this.$ = []; + break; + case 3: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 4: + case 5: + this.$ = $$[$0]; + break; + case 6: + case 7: + this.$ = []; + break; + case 8: + yy.setWeekday("monday"); + break; + case 9: + yy.setWeekday("tuesday"); + break; + case 10: + yy.setWeekday("wednesday"); + break; + case 11: + yy.setWeekday("thursday"); + break; + case 12: + yy.setWeekday("friday"); + break; + case 13: + yy.setWeekday("saturday"); + break; + case 14: + yy.setWeekday("sunday"); + break; + case 15: + yy.setDateFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 16: + yy.enableInclusiveEndDates(); + this.$ = $$[$0].substr(18); + break; + case 17: + yy.TopAxis(); + this.$ = $$[$0].substr(8); + break; + case 18: + yy.setAxisFormat($$[$0].substr(11)); + this.$ = $$[$0].substr(11); + break; + case 19: + yy.setTickInterval($$[$0].substr(13)); + this.$ = $$[$0].substr(13); + break; + case 20: + yy.setExcludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 21: + yy.setIncludes($$[$0].substr(9)); + this.$ = $$[$0].substr(9); + break; + case 22: + yy.setTodayMarker($$[$0].substr(12)); + this.$ = $$[$0].substr(12); + break; + case 24: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 25: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 26: + case 27: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 28: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 30: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + case 31: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0], null); + break; + case 32: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 33: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 34: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setLink($$[$0 - 3], $$[$0]); + break; + case 35: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0], null); + yy.setLink($$[$0 - 2], $$[$0 - 1]); + break; + case 36: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); + yy.setLink($$[$0 - 3], $$[$0 - 2]); + break; + case 37: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 38: + case 44: + this.$ = $$[$0 - 1] + " " + $$[$0]; + break; + case 39: + case 40: + case 42: + this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; + break; + case 41: + case 43: + this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: $V8, 20: $V9, 21: $Va, 22: $Vb, 23: $Vc, 24: $Vd, 25: $Ve, 26: $Vf, 27: $Vg, 28: $Vh, 30: $Vi, 32: $Vj, 33: $Vk, 34: 23, 35: $Vl, 37: $Vm }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 33, 11: 17, 12: $V1, 13: $V2, 14: $V3, 15: $V4, 16: $V5, 17: $V6, 18: $V7, 19: $V8, 20: $V9, 21: $Va, 22: $Vb, 23: $Vc, 24: $Vd, 25: $Ve, 26: $Vf, 27: $Vg, 28: $Vh, 30: $Vi, 32: $Vj, 33: $Vk, 34: 23, 35: $Vl, 37: $Vm }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 17]), o($V0, [2, 18]), o($V0, [2, 19]), o($V0, [2, 20]), o($V0, [2, 21]), o($V0, [2, 22]), o($V0, [2, 23]), o($V0, [2, 24]), { 29: [1, 34] }, { 31: [1, 35] }, o($V0, [2, 27]), o($V0, [2, 28]), o($V0, [2, 29]), { 36: [1, 36] }, o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), o($V0, [2, 14]), { 38: [1, 37], 40: [1, 38] }, o($V0, [2, 4]), o($V0, [2, 25]), o($V0, [2, 26]), o($V0, [2, 30]), o($V0, [2, 31], { 39: [1, 39], 40: [1, 40] }), o($V0, [2, 37], { 38: [1, 41] }), o($V0, [2, 32], { 40: [1, 42] }), o($V0, [2, 33]), o($V0, [2, 35], { 39: [1, 43] }), o($V0, [2, 34]), o($V0, [2, 36])], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("open_directive"); + return "open_directive"; + case 1: + this.begin("acc_title"); + return 28; + case 2: + this.popState(); + return "acc_title_value"; + case 3: + this.begin("acc_descr"); + return 30; + case 4: + this.popState(); + return "acc_descr_value"; + case 5: + this.begin("acc_descr_multiline"); + break; + case 6: + this.popState(); + break; + case 7: + return "acc_descr_multiline_value"; + case 8: + break; + case 9: + break; + case 10: + break; + case 11: + return 10; + case 12: + break; + case 13: + break; + case 14: + this.begin("href"); + break; + case 15: + this.popState(); + break; + case 16: + return 40; + case 17: + this.begin("callbackname"); + break; + case 18: + this.popState(); + break; + case 19: + this.popState(); + this.begin("callbackargs"); + break; + case 20: + return 38; + case 21: + this.popState(); + break; + case 22: + return 39; + case 23: + this.begin("click"); + break; + case 24: + this.popState(); + break; + case 25: + return 37; + case 26: + return 4; + case 27: + return 19; + case 28: + return 20; + case 29: + return 21; + case 30: + return 22; + case 31: + return 23; + case 32: + return 25; + case 33: + return 24; + case 34: + return 26; + case 35: + return 12; + case 36: + return 13; + case 37: + return 14; + case 38: + return 15; + case 39: + return 16; + case 40: + return 17; + case 41: + return 18; + case 42: + return "date"; + case 43: + return 27; + case 44: + return "accDescription"; + case 45: + return 33; + case 46: + return 35; + case 47: + return 36; + case 48: + return ":"; + case 49: + return 6; + case 50: + return "INVALID"; + } + }, + rules: [/^(?:%%\{)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:weekday\s+monday\b)/i, /^(?:weekday\s+tuesday\b)/i, /^(?:weekday\s+wednesday\b)/i, /^(?:weekday\s+thursday\b)/i, /^(?:weekday\s+friday\b)/i, /^(?:weekday\s+saturday\b)/i, /^(?:weekday\s+sunday\b)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^\n]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^\n]+)/i, /^(?:[^:\n]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "callbackargs": { "rules": [21, 22], "inclusive": false }, "callbackname": { "rules": [18, 19, 20], "inclusive": false }, "href": { "rules": [15, 16], "inclusive": false }, "click": { "rules": [24, 25], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 17, 23, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const ganttParser = parser; +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_isoWeek_js__WEBPACK_IMPORTED_MODULE_2__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_customParseFormat_js__WEBPACK_IMPORTED_MODULE_3__); +dayjs__WEBPACK_IMPORTED_MODULE_1__.extend(dayjs_plugin_advancedFormat_js__WEBPACK_IMPORTED_MODULE_4__); +let dateFormat = ""; +let axisFormat = ""; +let tickInterval = void 0; +let todayMarker = ""; +let includes = []; +let excludes = []; +let links = {}; +let sections = []; +let tasks = []; +let currentSection = ""; +let displayMode = ""; +const tags = ["active", "done", "crit", "milestone"]; +let funs = []; +let inclusiveEndDates = false; +let topAxis = false; +let weekday = "sunday"; +let lastOrder = 0; +const clear = function() { + sections = []; + tasks = []; + currentSection = ""; + funs = []; + taskCnt = 0; + lastTask = void 0; + lastTaskID = void 0; + rawTasks = []; + dateFormat = ""; + axisFormat = ""; + displayMode = ""; + tickInterval = void 0; + todayMarker = ""; + includes = []; + excludes = []; + inclusiveEndDates = false; + topAxis = false; + lastOrder = 0; + links = {}; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.t)(); + weekday = "sunday"; +}; +const setAxisFormat = function(txt) { + axisFormat = txt; +}; +const getAxisFormat = function() { + return axisFormat; +}; +const setTickInterval = function(txt) { + tickInterval = txt; +}; +const getTickInterval = function() { + return tickInterval; +}; +const setTodayMarker = function(txt) { + todayMarker = txt; +}; +const getTodayMarker = function() { + return todayMarker; +}; +const setDateFormat = function(txt) { + dateFormat = txt; +}; +const enableInclusiveEndDates = function() { + inclusiveEndDates = true; +}; +const endDatesAreInclusive = function() { + return inclusiveEndDates; +}; +const enableTopAxis = function() { + topAxis = true; +}; +const topAxisEnabled = function() { + return topAxis; +}; +const setDisplayMode = function(txt) { + displayMode = txt; +}; +const getDisplayMode = function() { + return displayMode; +}; +const getDateFormat = function() { + return dateFormat; +}; +const setIncludes = function(txt) { + includes = txt.toLowerCase().split(/[\s,]+/); +}; +const getIncludes = function() { + return includes; +}; +const setExcludes = function(txt) { + excludes = txt.toLowerCase().split(/[\s,]+/); +}; +const getExcludes = function() { + return excludes; +}; +const getLinks = function() { + return links; +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 10; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks = rawTasks; + return tasks; +}; +const isInvalidDate = function(date, dateFormat2, excludes2, includes2) { + if (includes2.includes(date.format(dateFormat2.trim()))) { + return false; + } + if (date.isoWeekday() >= 6 && excludes2.includes("weekends")) { + return true; + } + if (excludes2.includes(date.format("dddd").toLowerCase())) { + return true; + } + return excludes2.includes(date.format(dateFormat2.trim())); +}; +const setWeekday = function(txt) { + weekday = txt; +}; +const getWeekday = function() { + return weekday; +}; +const checkTaskDates = function(task, dateFormat2, excludes2, includes2) { + if (!excludes2.length || task.manualEndTime) { + return; + } + let startTime; + if (task.startTime instanceof Date) { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime); + } else { + startTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.startTime, dateFormat2, true); + } + startTime = startTime.add(1, "d"); + let originalEndTime; + if (task.endTime instanceof Date) { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime); + } else { + originalEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(task.endTime, dateFormat2, true); + } + const [fixedEndTime, renderEndTime] = fixTaskDates( + startTime, + originalEndTime, + dateFormat2, + excludes2, + includes2 + ); + task.endTime = fixedEndTime.toDate(); + task.renderEndTime = renderEndTime; +}; +const fixTaskDates = function(startTime, endTime, dateFormat2, excludes2, includes2) { + let invalid = false; + let renderEndTime = null; + while (startTime <= endTime) { + if (!invalid) { + renderEndTime = endTime.toDate(); + } + invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2); + if (invalid) { + endTime = endTime.add(1, "d"); + } + startTime = startTime.add(1, "d"); + } + return [endTime, renderEndTime]; +}; +const getStartDate = function(prevTime, dateFormat2, str) { + str = str.trim(); + const re = /^after\s+([\d\w- ]+)/; + const afterStatement = re.exec(str.trim()); + if (afterStatement !== null) { + let latestEndingTask = null; + afterStatement[1].split(" ").forEach(function(id) { + let task = findTaskById(id); + if (task !== void 0) { + if (!latestEndingTask) { + latestEndingTask = task; + } else { + if (task.endTime > latestEndingTask.endTime) { + latestEndingTask = task; + } + } + } + }); + if (!latestEndingTask) { + const dt = /* @__PURE__ */ new Date(); + dt.setHours(0, 0, 0, 0); + return dt; + } else { + return latestEndingTask.endTime; + } + } + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + return mDate.toDate(); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Invalid date:" + str); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("With date format:" + dateFormat2.trim()); + const d = new Date(str); + if (d === void 0 || isNaN(d.getTime()) || // WebKit browsers can mis-parse invalid dates to be ridiculously + // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304. + // This can cause virtually infinite loops while rendering, so for the + // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as + // invalid. + d.getFullYear() < -1e4 || d.getFullYear() > 1e4) { + throw new Error("Invalid date:" + str); + } + return d; + } +}; +const parseDuration = function(str) { + const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str.trim()); + if (statement !== null) { + return [Number.parseFloat(statement[1]), statement[2]]; + } + return [NaN, "ms"]; +}; +const getEndDate = function(prevTime, dateFormat2, str, inclusive = false) { + str = str.trim(); + let mDate = dayjs__WEBPACK_IMPORTED_MODULE_1__(str, dateFormat2.trim(), true); + if (mDate.isValid()) { + if (inclusive) { + mDate = mDate.add(1, "d"); + } + return mDate.toDate(); + } + let endTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(prevTime); + const [durationValue, durationUnit] = parseDuration(str); + if (!Number.isNaN(durationValue)) { + const newEndTime = endTime.add(durationValue, durationUnit); + if (newEndTime.isValid()) { + endTime = newEndTime; + } + } + return endTime.toDate(); +}; +let taskCnt = 0; +const parseId = function(idStr) { + if (idStr === void 0) { + taskCnt = taskCnt + 1; + return "task" + taskCnt; + } + return idStr; +}; +const compileData = function(prevTask, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + let endTimeData = ""; + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = prevTask.endTime; + endTimeData = data[0]; + break; + case 2: + task.id = parseId(); + task.startTime = getStartDate(void 0, dateFormat, data[0]); + endTimeData = data[1]; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = getStartDate(void 0, dateFormat, data[1]); + endTimeData = data[2]; + break; + } + if (endTimeData) { + task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates); + task.manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__(endTimeData, "YYYY-MM-DD", true).isValid(); + checkTaskDates(task, dateFormat, excludes, includes); + } + return task; +}; +const parseData = function(prevTaskId, dataStr) { + let ds; + if (dataStr.substr(0, 1) === ":") { + ds = dataStr.substr(1, dataStr.length); + } else { + ds = dataStr; + } + const data = ds.split(","); + const task = {}; + getTaskTags(data, task, tags); + for (let i = 0; i < data.length; i++) { + data[i] = data[i].trim(); + } + switch (data.length) { + case 1: + task.id = parseId(); + task.startTime = { + type: "prevTaskEnd", + id: prevTaskId + }; + task.endTime = { + data: data[0] + }; + break; + case 2: + task.id = parseId(); + task.startTime = { + type: "getStartDate", + startData: data[0] + }; + task.endTime = { + data: data[1] + }; + break; + case 3: + task.id = parseId(data[0]); + task.startTime = { + type: "getStartDate", + startData: data[1] + }; + task.endTime = { + data: data[2] + }; + break; + } + return task; +}; +let lastTask; +let lastTaskID; +let rawTasks = []; +const taskDb = {}; +const addTask = function(descr, data) { + const rawTask = { + section: currentSection, + type: currentSection, + processed: false, + manualEndTime: false, + renderEndTime: null, + raw: { data }, + task: descr, + classes: [] + }; + const taskInfo = parseData(lastTaskID, data); + rawTask.raw.startTime = taskInfo.startTime; + rawTask.raw.endTime = taskInfo.endTime; + rawTask.id = taskInfo.id; + rawTask.prevTaskId = lastTaskID; + rawTask.active = taskInfo.active; + rawTask.done = taskInfo.done; + rawTask.crit = taskInfo.crit; + rawTask.milestone = taskInfo.milestone; + rawTask.order = lastOrder; + lastOrder++; + const pos = rawTasks.push(rawTask); + lastTaskID = rawTask.id; + taskDb[rawTask.id] = pos - 1; +}; +const findTaskById = function(id) { + const pos = taskDb[id]; + return rawTasks[pos]; +}; +const addTaskOrg = function(descr, data) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + const taskInfo = compileData(lastTask, data); + newTask.startTime = taskInfo.startTime; + newTask.endTime = taskInfo.endTime; + newTask.id = taskInfo.id; + newTask.active = taskInfo.active; + newTask.done = taskInfo.done; + newTask.crit = taskInfo.crit; + newTask.milestone = taskInfo.milestone; + lastTask = newTask; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + const task = rawTasks[pos]; + let startTime = ""; + switch (rawTasks[pos].raw.startTime.type) { + case "prevTaskEnd": { + const prevTask = findTaskById(task.prevTaskId); + task.startTime = prevTask.endTime; + break; + } + case "getStartDate": + startTime = getStartDate(void 0, dateFormat, rawTasks[pos].raw.startTime.startData); + if (startTime) { + rawTasks[pos].startTime = startTime; + } + break; + } + if (rawTasks[pos].startTime) { + rawTasks[pos].endTime = getEndDate( + rawTasks[pos].startTime, + dateFormat, + rawTasks[pos].raw.endTime.data, + inclusiveEndDates + ); + if (rawTasks[pos].endTime) { + rawTasks[pos].processed = true; + rawTasks[pos].manualEndTime = dayjs__WEBPACK_IMPORTED_MODULE_1__( + rawTasks[pos].raw.endTime.data, + "YYYY-MM-DD", + true + ).isValid(); + checkTaskDates(rawTasks[pos], dateFormat, excludes, includes); + } + } + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const setLink = function(ids, _linkStr) { + let linkStr = _linkStr; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel !== "loose") { + linkStr = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(_linkStr); + } + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + window.open(linkStr, "_self"); + }); + links[id] = linkStr; + } + }); + setClass(ids, "clickable"); +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(id) { + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + rawTask.classes.push(className); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + let rawTask = findTaskById(id); + if (rawTask !== void 0) { + pushFun(id, () => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.u.runFunc(functionName, ...argList); + }); + } +}; +const pushFun = function(id, callbackFunction) { + funs.push( + function() { + const elem = document.querySelector(`[id="${id}"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + }, + function() { + const elem = document.querySelector(`[id="${id}-text"]`); + if (elem !== null) { + elem.addEventListener("click", function() { + callbackFunction(); + }); + } + } + ); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const ganttDb = { + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt, + clear, + setDateFormat, + getDateFormat, + enableInclusiveEndDates, + endDatesAreInclusive, + enableTopAxis, + topAxisEnabled, + setAxisFormat, + getAxisFormat, + setTickInterval, + getTickInterval, + setTodayMarker, + getTodayMarker, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.g, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.r, + setDisplayMode, + getDisplayMode, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.b, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.a, + addSection, + getSections, + getTasks, + addTask, + findTaskById, + addTaskOrg, + setIncludes, + getIncludes, + setExcludes, + getExcludes, + setClickEvent, + setLink, + getLinks, + bindFunctions, + parseDuration, + isInvalidDate, + setWeekday, + getWeekday +}; +function getTaskTags(data, task, tags2) { + let matchFound = true; + while (matchFound) { + matchFound = false; + tags2.forEach(function(t) { + const pattern = "^\\s*" + t + "\\s*$"; + const regex = new RegExp(pattern); + if (data[0].match(regex)) { + task[t] = true; + data.shift(1); + matchFound = true; + } + }); + } +} +const setConf = function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.debug("Something is calling, setConf, remove the call"); +}; +const mapWeekdayToTimeFunction = { + monday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonday */ .Ox9, + tuesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeTuesday */ .YDX, + wednesday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeWednesday */ .EFj, + thursday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeThursday */ .Igq, + friday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFriday */ .y2j, + saturday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSaturday */ .LqH, + sunday: d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSunday */ .Zyz +}; +const getMaxIntersections = (tasks2, orderOffset) => { + let timeline = [...tasks2].map(() => -Infinity); + let sorted = [...tasks2].sort((a, b) => a.startTime - b.startTime || a.order - b.order); + let maxIntersections = 0; + for (const element of sorted) { + for (let j = 0; j < timeline.length; j++) { + if (element.startTime >= timeline[j]) { + timeline[j] = element.endTime; + element.order = j + orderOffset; + if (j > maxIntersections) { + maxIntersections = j; + } + break; + } + } + } + return maxIntersections; +}; +let w; +const draw = function(text, id, version, diagObj) { + const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().gantt; + const securityLevel = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const elem = doc.getElementById(id); + w = elem.parentElement.offsetWidth; + if (w === void 0) { + w = 1200; + } + if (conf.useWidth !== void 0) { + w = conf.useWidth; + } + const taskArray = diagObj.db.getTasks(); + let categories = []; + for (const element of taskArray) { + categories.push(element.type); + } + categories = checkUnique(categories); + const categoryHeights = {}; + let h = 2 * conf.topPadding; + if (diagObj.db.getDisplayMode() === "compact" || conf.displayMode === "compact") { + const categoryElements = {}; + for (const element of taskArray) { + if (categoryElements[element.section] === void 0) { + categoryElements[element.section] = [element]; + } else { + categoryElements[element.section].push(element); + } + } + let intersections = 0; + for (const category of Object.keys(categoryElements)) { + const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1; + intersections += categoryHeight; + h += categoryHeight * (conf.barHeight + conf.barGap); + categoryHeights[category] = categoryHeight; + } + } else { + h += taskArray.length * (conf.barHeight + conf.barGap); + for (const category of categories) { + categoryHeights[category] = taskArray.filter((task) => task.type === category).length; + } + } + elem.setAttribute("viewBox", "0 0 " + w + " " + h); + const svg = root.select(`[id="${id}"]`); + const timeScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleTime */ .Xf)().domain([ + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .min */ .VV$)(taskArray, function(d) { + return d.startTime; + }), + (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .max */ .Fp7)(taskArray, function(d) { + return d.endTime; + }) + ]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]); + function taskCompare(a, b) { + const taskA = a.startTime; + const taskB = b.startTime; + let result = 0; + if (taskA > taskB) { + result = 1; + } else if (taskA < taskB) { + result = -1; + } + return result; + } + taskArray.sort(taskCompare); + makeGant(taskArray, w, h); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.i)(svg, h, w, conf.useMaxWidth); + svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w / 2).attr("y", conf.titleTopMargin).attr("class", "titleText"); + function makeGant(tasks2, pageWidth, pageHeight) { + const barHeight = conf.barHeight; + const gap = barHeight + conf.barGap; + const topPadding = conf.topPadding; + const leftPadding = conf.leftPadding; + const colorScale = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .scaleLinear */ .BYU)().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(d3__WEBPACK_IMPORTED_MODULE_5__/* .interpolateHcl */ .JHv); + drawExcludeDays( + gap, + topPadding, + leftPadding, + pageWidth, + pageHeight, + tasks2, + diagObj.db.getExcludes(), + diagObj.db.getIncludes() + ); + makeGrid(leftPadding, topPadding, pageWidth, pageHeight); + drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth); + vertLabels(gap, topPadding); + drawToday(leftPadding, topPadding, pageWidth, pageHeight); + } + function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) { + const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))]; + const uniqueTasks = uniqueTaskOrderIds.map((id2) => theArray.find((item) => item.order === id2)); + svg.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad - 2; + }).attr("width", function() { + return w2 - conf.rightPadding / 2; + }).attr("height", theGap).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d.type === category) { + return "section section" + i % conf.numberSectionStyles; + } + } + return "section section0"; + }); + const rectangles = svg.append("g").selectAll("rect").data(theArray).enter(); + const links2 = diagObj.db.getLinks(); + rectangles.append("rect").attr("id", function(d) { + return d.id; + }).attr("rx", 3).attr("ry", 3).attr("x", function(d) { + if (d.milestone) { + return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + return timeScale(d.startTime) + theSidePad; + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + theTopPad; + }).attr("width", function(d) { + if (d.milestone) { + return theBarHeight; + } + return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); + }).attr("height", theBarHeight).attr("transform-origin", function(d, i) { + i = d.order; + return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + "px " + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px"; + }).attr("class", function(d) { + const res = "task"; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskClass = ""; + if (d.active) { + if (d.crit) { + taskClass += " activeCrit"; + } else { + taskClass = " active"; + } + } else if (d.done) { + if (d.crit) { + taskClass = " doneCrit"; + } else { + taskClass = " done"; + } + } else { + if (d.crit) { + taskClass += " crit"; + } + } + if (taskClass.length === 0) { + taskClass = " task"; + } + if (d.milestone) { + taskClass = " milestone " + taskClass; + } + taskClass += secNum; + taskClass += " " + classStr; + return res + taskClass; + }); + rectangles.append("text").attr("id", function(d) { + return d.id + "-text"; + }).text(function(d) { + return d.task; + }).attr("font-size", conf.fontSize).attr("x", function(d) { + let startX = timeScale(d.startTime); + let endX = timeScale(d.renderEndTime || d.endTime); + if (d.milestone) { + startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; + } + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return startX + theSidePad - 5; + } else { + return endX + theSidePad + 5; + } + } else { + return (endX - startX) / 2 + startX + theSidePad; + } + }).attr("y", function(d, i) { + i = d.order; + return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; + }).attr("text-height", theBarHeight).attr("class", function(d) { + const startX = timeScale(d.startTime); + let endX = timeScale(d.endTime); + if (d.milestone) { + endX = startX + theBarHeight; + } + const textWidth = this.getBBox().width; + let classStr = ""; + if (d.classes.length > 0) { + classStr = d.classes.join(" "); + } + let secNum = 0; + for (const [i, category] of categories.entries()) { + if (d.type === category) { + secNum = i % conf.numberSectionStyles; + } + } + let taskType = ""; + if (d.active) { + if (d.crit) { + taskType = "activeCritText" + secNum; + } else { + taskType = "activeText" + secNum; + } + } + if (d.done) { + if (d.crit) { + taskType = taskType + " doneCritText" + secNum; + } else { + taskType = taskType + " doneText" + secNum; + } + } else { + if (d.crit) { + taskType = taskType + " critText" + secNum; + } + } + if (d.milestone) { + taskType += " milestoneText"; + } + if (textWidth > endX - startX) { + if (endX + textWidth + 1.5 * conf.leftPadding > w2) { + return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType; + } else { + return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth; + } + } else { + return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth; + } + }); + const securityLevel2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + if (securityLevel2 === "sandbox") { + let sandboxElement2; + sandboxElement2 = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .select */ .Ys)("#i" + id); + const doc2 = sandboxElement2.nodes()[0].contentDocument; + rectangles.filter(function(d) { + return links2[d.id] !== void 0; + }).each(function(o) { + var taskRect = doc2.querySelector("#" + o.id); + var taskText = doc2.querySelector("#" + o.id + "-text"); + const oldParent = taskRect.parentNode; + var Link = doc2.createElement("a"); + Link.setAttribute("xlink:href", links2[o.id]); + Link.setAttribute("target", "_top"); + oldParent.appendChild(Link); + Link.appendChild(taskRect); + Link.appendChild(taskText); + }); + } + } + function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) { + if (excludes2.length === 0 && includes2.length === 0) { + return; + } + let minTime; + let maxTime; + for (const { startTime, endTime } of tasks2) { + if (minTime === void 0 || startTime < minTime) { + minTime = startTime; + } + if (maxTime === void 0 || endTime > maxTime) { + maxTime = endTime; + } + } + if (!minTime || !maxTime) { + return; + } + if (dayjs__WEBPACK_IMPORTED_MODULE_1__(maxTime).diff(dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime), "year") > 5) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.warn( + "The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days." + ); + return; + } + const dateFormat2 = diagObj.db.getDateFormat(); + const excludeRanges = []; + let range = null; + let d = dayjs__WEBPACK_IMPORTED_MODULE_1__(minTime); + while (d.valueOf() <= maxTime) { + if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) { + if (!range) { + range = { + start: d, + end: d + }; + } else { + range.end = d; + } + } else { + if (range) { + excludeRanges.push(range); + range = null; + } + } + d = d.add(1, "d"); + } + const rectangles = svg.append("g").selectAll("rect").data(excludeRanges).enter(); + rectangles.append("rect").attr("id", function(d2) { + return "exclude-" + d2.start.format("YYYY-MM-DD"); + }).attr("x", function(d2) { + return timeScale(d2.start) + theSidePad; + }).attr("y", conf.gridLineStartPadding).attr("width", function(d2) { + const renderEnd = d2.end.add(1, "day"); + return timeScale(renderEnd) - timeScale(d2.start); + }).attr("height", h2 - theTopPad - conf.gridLineStartPadding).attr("transform-origin", function(d2, i) { + return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + "px " + (i * theGap + 0.5 * h2).toString() + "px"; + }).attr("class", "exclude-range"); + } + function makeGrid(theSidePad, theTopPad, w2, h2) { + let bottomXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisBottom */ .LLu)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + const reTickInterval = /^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/; + const resultTickInterval = reTickInterval.exec( + diagObj.db.getTickInterval() || conf.tickInterval + ); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + const weekday2 = diagObj.db.getWeekday() || conf.weekday; + switch (interval) { + case "millisecond": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMillisecond */ .U8T.every(every)); + break; + case "second": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSecond */ .S1K.every(every)); + break; + case "minute": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .Z_i.every(every)); + break; + case "hour": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .WQD.every(every)); + break; + case "day": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .rr1.every(every)); + break; + case "week": + bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); + break; + case "month": + bottomXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h2 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em"); + if (diagObj.db.topAxisEnabled() || conf.topAxis) { + let topXAxis = (0,d3__WEBPACK_IMPORTED_MODULE_5__/* .axisTop */ .F5q)(timeScale).tickSize(-h2 + theTopPad + conf.gridLineStartPadding).tickFormat((0,d3__WEBPACK_IMPORTED_MODULE_5__/* .timeFormat */ .i$Z)(diagObj.db.getAxisFormat() || conf.axisFormat || "%Y-%m-%d")); + if (resultTickInterval !== null) { + const every = resultTickInterval[1]; + const interval = resultTickInterval[2]; + const weekday2 = diagObj.db.getWeekday() || conf.weekday; + switch (interval) { + case "millisecond": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMillisecond */ .U8T.every(every)); + break; + case "second": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeSecond */ .S1K.every(every)); + break; + case "minute": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMinute */ .Z_i.every(every)); + break; + case "hour": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeHour */ .WQD.every(every)); + break; + case "day": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeDay */ .rr1.every(every)); + break; + case "week": + topXAxis.ticks(mapWeekdayToTimeFunction[weekday2].every(every)); + break; + case "month": + topXAxis.ticks(d3__WEBPACK_IMPORTED_MODULE_5__/* .timeMonth */ .F0B.every(every)); + break; + } + } + svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10); + } + } + function vertLabels(theGap, theTopPad) { + let prevGap = 0; + const numOccurances = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]); + svg.append("g").selectAll("text").data(numOccurances).enter().append(function(d) { + const rows = d[0].split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex); + const dy = -(rows.length - 1) / 2; + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("dy", dy + "em"); + for (const [j, row] of rows.entries()) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttribute("alignment-baseline", "central"); + tspan.setAttribute("x", "10"); + if (j > 0) { + tspan.setAttribute("dy", "1em"); + } + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + return svgLabel; + }).attr("x", 10).attr("y", function(d, i) { + if (i > 0) { + for (let j = 0; j < i; j++) { + prevGap += numOccurances[i - 1][1]; + return d[1] * theGap / 2 + prevGap * theGap + theTopPad; + } + } else { + return d[1] * theGap / 2 + theTopPad; + } + }).attr("font-size", conf.sectionFontSize).attr("class", function(d) { + for (const [i, category] of categories.entries()) { + if (d[0] === category) { + return "sectionTitle sectionTitle" + i % conf.numberSectionStyles; + } + } + return "sectionTitle"; + }); + } + function drawToday(theSidePad, theTopPad, w2, h2) { + const todayMarker2 = diagObj.db.getTodayMarker(); + if (todayMarker2 === "off") { + return; + } + const todayG = svg.append("g").attr("class", "today"); + const today = /* @__PURE__ */ new Date(); + const todayLine = todayG.append("line"); + todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf.titleTopMargin).attr("y2", h2 - conf.titleTopMargin).attr("class", "today"); + if (todayMarker2 !== "") { + todayLine.attr("style", todayMarker2.replace(/,/g, ";")); + } + } + function checkUnique(arr) { + const hash = {}; + const result = []; + for (let i = 0, l = arr.length; i < l; ++i) { + if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) { + hash[arr[i]] = true; + result.push(arr[i]); + } + } + return result; + } +}; +const ganttRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .mermaid-main-font { + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .exclude-range { + fill: ${options.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${options.sectionBkgColor}; + } + + .section2 { + fill: ${options.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${options.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${options.titleColor}; + } + + .sectionTitle1 { + fill: ${options.titleColor}; + } + + .sectionTitle2 { + fill: ${options.titleColor}; + } + + .sectionTitle3 { + fill: ${options.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${options.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${options.fontFamily}; + fill: ${options.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${options.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideRight { + fill: ${options.taskTextDarkColor}; + text-anchor: start; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } + + .taskTextOutsideLeft { + fill: ${options.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${options.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${options.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${options.taskBkgColor}; + stroke: ${options.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${options.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${options.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${options.activeTaskBkgColor}; + stroke: ${options.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${options.doneTaskBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${options.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${options.critBorderColor}; + fill: ${options.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${options.critBorderColor}; + fill: ${options.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${options.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.titleColor || options.textColor}; + font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); + } +`; +const ganttStyles = getStyles; +const diagram = { + parser: ganttParser, + db: ganttDb, + renderer: ganttRenderer, + styles: ganttStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/41d1792a.1467e923.js b/assets/js/41d1792a.1467e923.js new file mode 100644 index 0000000000..c44bb2034e --- /dev/null +++ b/assets/js/41d1792a.1467e923.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1748],{92977:e=>{e.exports=JSON.parse('{"label":"release","permalink":"/ecalc/docs/tags/release","allTagsPath":"/ecalc/docs/tags","count":19,"items":[{"id":"changelog/separator","title":"---","description":"","permalink":"/ecalc/docs/changelog/separator"},{"id":"changelog/next","title":"Next","description":"New Features","permalink":"/ecalc/docs/changelog/latest"},{"id":"changelog/v7-0","title":"v7.0","description":"Features","permalink":"/ecalc/docs/changelog/v7-0-release"},{"id":"changelog/v7-1","title":"v7.1","description":"Features","permalink":"/ecalc/docs/changelog/v7-1-release"},{"id":"changelog/v7-2","title":"v7.2","description":"Features","permalink":"/ecalc/docs/changelog/v7-2-release"},{"id":"changelog/v7-3","title":"v7.3","description":"Features","permalink":"/ecalc/docs/changelog/v7-3-release"},{"id":"changelog/v7-4","title":"v7.4","description":"Features","permalink":"/ecalc/docs/changelog/v7-4-release"},{"id":"changelog/v7-5","title":"v7.5","description":"Features","permalink":"/ecalc/docs/changelog/v7-5-release"},{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","permalink":"/ecalc/docs/changelog/v7-6-release"},{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","permalink":"/ecalc/docs/changelog/v8.0-release"},{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","permalink":"/ecalc/docs/changelog/v8.1-release"},{"id":"changelog/v8-10","title":"v8.10 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.10-release"},{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.2-release"},{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.3-release"},{"id":"changelog/v8-4","title":"v8.4","description":"New Features","permalink":"/ecalc/docs/changelog/v8.4-release"},{"id":"changelog/v8-5","title":"v8.5","description":"New Features","permalink":"/ecalc/docs/changelog/v8.5-release"},{"id":"changelog/v8-6","title":"v8.6","description":"New Features","permalink":"/ecalc/docs/changelog/v8.6-release"},{"id":"changelog/v8-7","title":"v8.7","description":"New Features","permalink":"/ecalc/docs/changelog/v8.7-release"},{"id":"changelog/v8-8","title":"v8.8","description":"New Features","permalink":"/ecalc/docs/changelog/v8.8-release"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/428320b6.53300601.js b/assets/js/428320b6.53300601.js new file mode 100644 index 0000000000..506ae1cc90 --- /dev/null +++ b/assets/js/428320b6.53300601.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6193],{683:(e,c,i)=>{i.r(c),i.d(c,{assets:()=>h,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var s=i(85893),n=i(11151);const t={},r="Changelog",a={id:"changelog/changelog",title:"Changelog",description:"8.11.0 (2024-03-18)",source:"@site/docs/changelog/changelog.md",sourceDirName:"changelog",slug:"/changelog/",permalink:"/ecalc/docs/changelog/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/changelog.md",tags:[],version:"current",frontMatter:{},sidebar:"changelog",previous:{title:"v8.7",permalink:"/ecalc/docs/changelog/v8.7-release"}},h={},l=[{value:"8.11.0 (2024-03-18)",id:"8110-2024-03-18",level:2},{value:"Features",id:"features",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"Documentation",id:"documentation",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores",level:3},{value:"Code Refactoring",id:"code-refactoring",level:3},{value:"8.10.0 (2024-02-16)",id:"8100-2024-02-16",level:2},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-1",level:3},{value:"Code Refactoring",id:"code-refactoring-1",level:3},{value:"Tests",id:"tests",level:3},{value:"8.9.0 (2024-01-11)",id:"890-2024-01-11",level:2},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"Documentation",id:"documentation-2",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-2",level:3},{value:"Code Refactoring",id:"code-refactoring-2",level:3},{value:"8.8.0 (2023-12-27)",id:"880-2023-12-27",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes",level:3},{value:"Features",id:"features-1",level:3},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"Documentation",id:"documentation-3",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-3",level:3},{value:"Code Refactoring",id:"code-refactoring-3",level:3},{value:"Tests",id:"tests-1",level:3},{value:"Continuous Integration",id:"continuous-integration",level:3},{value:"8.7.0 (2023-12-05)",id:"870-2023-12-05",level:2},{value:"Bug Fixes",id:"bug-fixes-4",level:3},{value:"Documentation",id:"documentation-4",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-4",level:3},{value:"Code Refactoring",id:"code-refactoring-4",level:3},{value:"Continuous Integration",id:"continuous-integration-1",level:3},{value:"8.7.0",id:"870",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-1",level:3},{value:"8.6.0 (2023-11-21)",id:"860-2023-11-21",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-2",level:3},{value:"Features",id:"features-2",level:3},{value:"Bug Fixes",id:"bug-fixes-5",level:3},{value:"Documentation",id:"documentation-5",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-5",level:3},{value:"Code Refactoring",id:"code-refactoring-5",level:3},{value:"8.5.0 (2023-10-30)",id:"850-2023-10-30",level:2},{value:"Features",id:"features-3",level:3},{value:"Bug Fixes",id:"bug-fixes-6",level:3},{value:"Documentation",id:"documentation-6",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-6",level:3},{value:"Code Refactoring",id:"code-refactoring-6",level:3},{value:"8.4.0 (2023-09-25)",id:"840-2023-09-25",level:2},{value:"Features",id:"features-4",level:3},{value:"Bug Fixes",id:"bug-fixes-7",level:3},{value:"Documentation",id:"documentation-7",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-7",level:3},{value:"Code Refactoring",id:"code-refactoring-7",level:3},{value:"8.3.0 (2023-08-11)",id:"830-2023-08-11",level:2},{value:"\u26a0 BREAKING CHANGES",id:"-breaking-changes-3",level:3},{value:"Features",id:"features-5",level:3},{value:"Bug Fixes",id:"bug-fixes-8",level:3},{value:"Documentation",id:"documentation-8",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-8",level:3},{value:"Code Refactoring",id:"code-refactoring-8",level:3},{value:"Tests",id:"tests-2",level:3},{value:"Continuous Integration",id:"continuous-integration-2",level:3},{value:"8.2.2 (2023-05-28)",id:"822-2023-05-28",level:2},{value:"Bug Fixes",id:"bug-fixes-9",level:3},{value:"Continuous Integration",id:"continuous-integration-3",level:3},{value:"Tests",id:"tests-3",level:3},{value:"Code Refactoring",id:"code-refactoring-9",level:3},{value:"Documentation",id:"documentation-9",level:3},{value:"Miscellaneous Chores",id:"miscellaneous-chores-9",level:3},{value:"8.2.1 (2023-05-09)",id:"821-2023-05-09",level:2},{value:"Miscellaneous Chores",id:"miscellaneous-chores-10",level:3},{value:"Continuous Integration",id:"continuous-integration-4",level:3}];function o(e){const c={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.h1,{id:"changelog",children:"Changelog"}),"\n",(0,s.jsxs)(c.h2,{id:"8110-2024-03-18",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.10.0...v8.11.0",children:"8.11.0"})," (2024-03-18)"]}),"\n",(0,s.jsx)(c.h3,{id:"features",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add file context to model validation error (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/401",children:"#401"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0a75da425eacf4f7770e50b50c970fa3720375ee",children:"0a75da4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["check that file exist when validating yaml for run (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/388",children:"#388"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/441722f9e8d86b4a48c1191a413f931e336d6ff7",children:"441722f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["validate expression reference tokens (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/404",children:"#404"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2af9d1332864b3e3bf17f84bd980b8bd436e7c7a",children:"2af9d13"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add control margin to compressor stage validation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/405",children:"#405"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f1e6f8af15208ce613f9d39fe1de4f8edd9e72f",children:"0f1e6f8"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix latest release in changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/393",children:"#393"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/317c9585b0257aca7057f173b87aed2388ee939f",children:"317c958"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move next changelog into release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/395",children:"#395"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/82b892c1d9792ef8259f1cff12585c53287d4afe",children:"82b892c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove latest tag on v8.7 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/394",children:"#394"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/55da75468ffc15d0de63618f9a446a11fc022f5f",children:"55da754"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["allow venting emitters without fuelconsumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/392",children:"#392"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f75f18fede56c7b5ace8aad0273c1ba22c9d2e2a",children:"f75f18f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["also rounding of results for show command, cache and after resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix failing tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["sum and split electrical and mechanical power (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/406",children:"#406"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/86754cc534b222cd761b19c04eb0de6deef26402",children:"86754cc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["switch license to LGPLv3 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/424635e3456e00ef180492852fdd97f1b26938c4",children:"424635e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update contribution docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b428c034870ec0c8bc3b9994e8639f393fc76962",children:"b428c03"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/410",children:"#410"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/016c0bd838f90f2066cc1d1ab12717957d83609e",children:"016c0bd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade node to 18 for codespace (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/399",children:"#399"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/14c17933b5c7b85bbfed2b5404721078268b6ff0",children:"14c1793"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["all rounding of numers to a given precision is now performed after all calculations are finished (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/400",children:"#400"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b04729bcf073e17be57ce4b920d480762eb819b",children:"4b04729"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move rounding to result objects (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/402",children:"#402"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/383e7f662fec3ae37c66214e2170a20cfd770c07",children:"383e7f6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary collection handling in expression (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/390",children:"#390"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/650aa74c04a83798c36cb40d8e696e5992789fd6",children:"650aa74"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"8100-2024-02-16",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.9.0...v8.10.0",children:"8.10.0"})," (2024-02-16)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-1",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add name constraints to yaml classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/358",children:"#358"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f586181dd980b964f305fe4fa0e1b6c74512e593",children:"f586181"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add pydantic ndarray type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d005ed4af198d39bf504832a1f3f31dc3cffe1d0",children:"d005ed4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["convert numpy to python (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2be17363b6c7b788ef3ac25d02b6209b6d7fe062",children:"2be1736"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["custom date format in json (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/359",children:"#359"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d62e6501fdf87f88a470ee6b61c2e66988b7ba68",children:"d62e650"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["error when creating references (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ed1060e2b5a8ab48274a7743f4691980d7480040",children:"ed1060e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["expression error messages (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/361",children:"#361"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6a62db5456ac9d61ca1de165ed389905249163a9",children:"6a62db5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate schema for energy usage models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c448942f3113815f24244647b74c5fa667ca8578",children:"c448942"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate schema for models and generator set model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b87fd2f2d78fa36388ccbfbe9565669bd73519fa",children:"b87fd2f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["get_max_rate for single speed train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00cd9c575a18ec5d94b1e5df21ab8fdf575bcb1c",children:"00cd9c5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["get_max_rate for variable speed train with and without multiple streams and pressures (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/374",children:"#374"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00cd9c575a18ec5d94b1e5df21ab8fdf575bcb1c",children:"00cd9c5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["issue with TimeSeriesBoolean becoming float (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3622927e0defc0b33b0f15a55d09be284d767363",children:"3622927"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," handle dict, list and expression when parsing expression (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1b2ee3266bfd818305c6b3ec6bf244084bfcf14c",children:"1b2ee32"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," init pydantic v2 update (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/158b90d9550d40ae478bf3a7ad3b0177d6a85714",children:"158b90d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," optional pressure control (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/42cedb7c407589d7ac17b22e003ffd9ce4795ddb",children:"42cedb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," pydantic models not automatically parsed/converted (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af684173e4b1bbd06d04352a15272ab8b8da1e7b",children:"af68417"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," results serialization and parsing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/44b3f5770a310e5cc8e16bff66bf3b8eda75d19b",children:"44b3f57"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/edc9c4c990f3cbb6fea346dfb99c6a004b1a44a0",children:"edc9c4c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc:"})," update pydantic (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ab51053d18eb9d3524c8e6c784cdc138714d249",children:"1ab5105"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["none to nan conversion (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8b720a1478d0f537ae33c47bb7ac0515938e1a2",children:"e8b720a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated validator (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/976587460e561bd9e3aa7ff47ce192990bcaf945",children:"9765874"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove generate_json_schemas function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/382",children:"#382"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf5a16d08a0c4fc0cbcdd14d25dd2ff6f0cb7b7c",children:"cf5a16d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["resample method for TimeSeriesBoolean (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/349",children:"#349"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8feaf6c95f58e36b8dbe5b9440738d818d3441a6",children:"8feaf6c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use discriminated union (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d66fed3dea423dc4658b4fa4c7a52ed68fbe4ab3",children:"d66fed3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use EcalcError and provide context (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/975d3b1b6c6214f963a7e9e55cf8539c4e3886b4",children:"975d3b1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["validation using yaml classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/377",children:"#377"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/66aada1de1204465c762f8f789d30219516e9a80",children:"66aada1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["yaml models schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b5d3451a32939e06dfca9185cb084abd30b5ea99",children:"b5d3451"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-1",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix broken links (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ab803992709ca571be41e94badf9f841f462e307",children:"ab80399"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fixed the Error in Simple model example in eCalc Docs, variable name started from salt_water to sea_water in full eCalc YAML model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/369",children:"#369"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2961d2f0cde2d7d1cd152c84b4bc7ac769b1d75b",children:"2961d2f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove subgraph markdown styling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3632fbddb6049d5ca148f0c8023d8a1d4ee3b343",children:"3632fbd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove v2 expectations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/386",children:"#386"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0595fbd3af6999988d7b07ad9c92279153278fc7",children:"0595fbd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["The new update of Drogon eCalc model with a single speed pump (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/241",children:"#241"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a22ffe891c6d96600ab1e73e0d64898ac3443225",children:"a22ffe8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update description of control mechanisms in a variable speed compressor chart (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/291",children:"#291"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/67c34763499616dfa1131daf54a2da7da51b7917",children:"67c3476"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update info about time series (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/352",children:"#352"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/aff50d7e9526b3303aa48648520ae795f68cdc38",children:"aff50d7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/337",children:"#337"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/551e1e1e5cfb93b608f280299bb34c37b7f8fb29",children:"551e1e1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Wrong_category_for_directly_driven_compressor_in_simple_model_example_in_eCalc_Docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/368",children:"#368"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e01080be6f144a80f7191a91d05913197f436f91",children:"e01080b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-1",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/cache from 3.3.2 to 4.0.0 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/351",children:"#351"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6c824ea831d78d68e54fc2402943767afa687b64",children:"6c824ea"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/setup-python from 4 to 5 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/313",children:"#313"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a9cca9e2560723fa76551d9ddd40e8a67ccf691c",children:"a9cca9e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," fix mermaid diagrams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d405717bd8e5c34ae825ab3c2139c638ecce0e56",children:"d405717"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," update docusaurus to v3 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8065c520a3756f79c33448e8f6ed10d8d7a2f67d",children:"8065c52"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," update node in ci (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/625772d0392ef8f922666191927c28c15b18847c",children:"625772d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," use node 20 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/367",children:"#367"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/75578110c9dd271195c2602d63889d407177b8e1",children:"7557811"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["document _type_handler (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/82769a0a75d4c4af55872b85b411fbc5948ef411",children:"82769a0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix formatting (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/185f6248db22a7a6a1d2345b8ef0df230fc4a624",children:"185f624"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typing for charts (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f6a58a26e00d60bf1669ff80aadee05ce68126aa",children:"f6a58a2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when unknown model type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/380",children:"#380"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6686fa6b71a735ef17eec52577e0c5a87a3828d",children:"d6686fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated json_encoders (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/384",children:"#384"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/885efeea13bb4098d77ef39f49b7bc48a58879e2",children:"885efee"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated min_items,max_items (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d457c2d2c4bd3292f36691c009e737b806be2fea",children:"d457c2d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove deprecated usage of dict,copy (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/381",children:"#381"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3a19620b2cd16ff6638b9ee34b4568bd7686ede7",children:"3a19620"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove pydantic.v1 import (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/364",children:"#364"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6d1a127db84ebf2d8a70e3495c339b34a3c90fd8",children:"6d1a127"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unused method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/357",children:"#357"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a4021d2cb31141723f3b963b57bae6373e202dd",children:"5a4021d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["skip date format test temporarily (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b3a073bb232a9791f65e5922b32f422131d7d025",children:"b3a073b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/362",children:"#362"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b3737269826cf94cfdd850cd161e03360d4894c6",children:"b373726"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/373",children:"#373"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a35c604ce88399b5235300a42b0563d54386dba1",children:"a35c604"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update neqsim to 2.5.16 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/341",children:"#341"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/950b0fd941a22fa64dd1ed2fc948333c387258d4",children:"950b0fd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshot for failing test (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/387",children:"#387"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a135a977b226fd1d68e3c8a490ef35e1650235e5",children:"a135a97"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5c1c98c2e1822ef9618d0c7c8f6cb21b02bff04e",children:"5c1c98c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use field_validator (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1756aacff551ab4983c02d9b17cd22e894780a0a",children:"1756aac"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-1",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["allow str in resource stream (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/371",children:"#371"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe9f3f2008ee32f2a9614d4c88966e4c5e4831f6",children:"fe9f3f2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove inheritance of CompressorTrainResult (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ab8964acdc8ef1238bd2be91a866f692115a1f0",children:"3ab8964"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove need for id on components etc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/347",children:"#347"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f9e32aeb1fbcbba1d7ee56bdb5767ccc7c2e3f14",children:"f9e32ae"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add test for yaml validation errors (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/378",children:"#378"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5a0772e0b0b01cc4229b211bea929d6ef1b885b",children:"e5a0772"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"890-2024-01-11",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.8.0...v8.9.0",children:"8.9.0"})," (2024-01-11)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-2",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["don't run pdoc on application module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/abbb704d00def3149db3ae9d6e0e8932f655c740",children:"abbb704"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-2",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["maximum pressure ratio per stage in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/338",children:"#338"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/261749f34c3e1955ac9d66d6b33f63bef431f984",children:"261749f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove docstring for number of compressors (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/339",children:"#339"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be148baea2312778df4d9b5b373cb4044d8b9e1d",children:"be148ba"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide economics (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/335",children:"#335"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c4b50d6243acd52b5cc9deb80cdc94b061776417",children:"c4b50d6"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-2",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["upgrade deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/343",children:"#343"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b183db7864e62cd83fa2c3622ee66d60f78cedfd",children:"b183db7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-2",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move energy calculator to application (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/78b601ffb6f34d577ce214c8e01a0f40a0f627fe",children:"78b601f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move graph results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b44f8c8b28ca15f085c25de4574cad8958e0c813",children:"b44f8c8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/59be31741903845388068cfbadc23b39cb48b35b",children:"59be317"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"880-2023-12-27",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.7.0...v8.8.0",children:"8.8.0"})," (2023-12-27)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["include direct emitter results in ltp export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/305",children:"#305"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-1",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add emitter rate type to venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/312",children:"#312"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6e16faa341a8517c82f4295c1fc92014b0a9b92",children:"d6e16fa"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-3",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["correct changelog for venting emitters (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/324",children:"#324"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/eff911ea8064fb22d96e31ca3302da792bc5f6b3",children:"eff911e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct fallback to pydantic v1 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/332",children:"#332"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4f89e48e60de0f5ecd79244021c31a77285a2fc9",children:"4f89e48"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["include direct emitter results in ltp export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/305",children:"#305"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f6b63715ddb1d1794274515edf87bb8dbb422203",children:"f6b6371"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove interpolation method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/321",children:"#321"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d1255527c7b715569fe503db6eae9f008bc0c8f1",children:"d125552"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support mismatching timesteps in ltp delta profile (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/319",children:"#319"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/32f02890f53c0a58aecf988cca41c8ffef25d33f",children:"32f0289"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-3",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["remove costs mentioned in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/322",children:"#322"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ee0396544ce07410bfbaa89af23fe1a3337d477c",children:"ee03965"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove reference to fuel price- and tax in drogon example (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/323",children:"#323"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/963d9ea858c6b39ca6d478def7a367fad1e3f69a",children:"963d9ea"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docs for v8.8 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/334",children:"#334"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/153f7c408d1ffb4adbf39a006faa3ee1417b90b0",children:"153f7c4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update PR template with checkboxes for stuff we forget (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/09f52bd08cae4bd7ccc4d6e173fb23917acf1bb5",children:"09f52bd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-3",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add maximum_rate to CompressorModelResult (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/285",children:"#285"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change ltp-filter for oil loaded/stored (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/331",children:"#331"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3cfe8084979176ebdff8eeace12769fd9bb2b95b",children:"3cfe808"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["define yaml classes for remaining elements in MODELS (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/307",children:"#307"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fedb807c83a33190fe90862948a39fc8e3451ab0",children:"fedb807"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"ecalc-neqsim-wrapper:"})," update to neqsim 2.5.9 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/302",children:"#302"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/28885f292c745d1afaf1afb0014e6ad8244cbfd3",children:"28885f2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support pydantic v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/326",children:"#326"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b1b4acf1fd41b7a2c6c888af5ea46d89ddff9b34",children:"b1b4acf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/315",children:"#315"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/49a42deac51fe25ca8ed8188ef01285ca4069c67",children:"49a42de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/333",children:"#333"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0b027ef27e2e0f17f0da970ec3ed2d32ca3cc7b6",children:"0b027ef"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pydantic (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/327",children:"#327"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4a325192ab3a81d0bfea4bb5d76db2346200b1c4",children:"4a32519"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshot (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-3",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["move simple result to presentation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/318",children:"#318"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e90a6eb3fd79022bf6e963043d709a8cf61be0f7",children:"e90a6eb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use time series collection yaml classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/328",children:"#328"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c36f62be4cc788ee832974aa63692e3d7ae2cb8d",children:"c36f62b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-1",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update tests with maximum rate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2cb09e20bec5c3031dfbff6042c93c749e97be23",children:"2cb09e2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add trufflehog pre-commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/320",children:"#320"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8459ca686fe97f0b2225984c703d8b6c778ea1ba",children:"8459ca6"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"870-2023-12-05",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.6.0...v8.7.0",children:"8.7.0"})," (2023-12-05)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-4",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["bug in compressor with turbine models with multiple streams and only one date (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/296",children:"#296"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8c2c786f93f0cec9cebb92ee02ac94080b7becb5",children:"8c2c786"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["deep copy when aggregating model results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/311",children:"#311"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/53c8df4af5105ad7b91439c76a05b2bb32aee4bb",children:"53c8df4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not merge model results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/304",children:"#304"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/34cebc4551ab1aa3d3e1b6bdabf681e7abd4f306",children:"34cebc4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["error message when model/facility input does not exist (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4437032bd59ca1708376303b78e7778143f58e1d",children:"4437032"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-4",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update documentation with info about direct emitters name change (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/310",children:"#310"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/990f3c2c932c0be9189828b3dae6b4034105574e",children:"990f3c2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-4",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/293",children:"#293"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/648997109e48e77727f511567af0bbd3a53d8cca",children:"6489971"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-4",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["change emission rate type to calendar day (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/300",children:"#300"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f8e5052d19088bb709d48d6563962e5f98d358d2",children:"f8e5052"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change name from direct to venting emitter (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/303",children:"#303"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8d038221c88946730e3badbcc4a4c9ab4d082c16",children:"8d03822"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicated function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba48dcd4d858bcaacdd183636157fe9c0eeaef61",children:"ba48dcd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-1",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["skip spellchecking changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/294",children:"#294"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9329ae28acbc4673260e8f80f45037ab7949598d",children:"9329ae2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h2,{id:"870",children:(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.6.0...v8.7.0",children:"8.7.0"})}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-1",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["Change name from ",(0,s.jsx)(c.code,{children:"DIRECT_EMITTERS"})," to ",(0,s.jsx)(c.code,{children:"VENTING_EMITTERS"})," in input Yaml-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/pull/303",children:"#303"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"860-2023-11-21",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.5.0...v8.6.0",children:"8.6.0"})," (2023-11-21)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-2",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["remove economy from ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/282",children:"#282"}),")"]}),"\n",(0,s.jsx)(c.li,{children:"graph.components and graph.get_component renamed to nodes and get_node"}),"\n",(0,s.jsx)(c.li,{children:"add type to consumers in system"}),"\n",(0,s.jsxs)(c.li,{children:["change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/pull/303",children:"#303"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-2",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["expose yaml variables (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1fe9dd0e3ceae658afaba24a2b18b91b3a11da43",children:"1fe9dd0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["include rate type in header for csv export (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/279",children:"#279"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5edd0ccff2b2f1dbfe746a666266b59c714a5eef",children:"5edd0cc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support bfs_tree in graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a4fff168dfa32d04588bb7e3b71de8c12e9dd6d0",children:"a4fff16"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["train v2 yaml and dto (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/272",children:"#272"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b0e346618bb3b39a186eb814dd40be2f7d905122",children:"b0e3466"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-5",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["ensure that start date in global time vector is consistent with the requested output frequency (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/269",children:"#269"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make iteration loops for simplified train consistent (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/263",children:"#263"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b066c74e41fcbb6c32e51781c0225490f61e9690",children:"b066c74"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong handling of values and timesteps in temporal models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/261",children:"#261"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4e202648e6288508d67fee52c651d125166e68e7",children:"4e20264"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-5",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["update changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/264",children:"#264"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/22ef8f7ca2a1e1800050c8f55624677a2f282e43",children:"22ef8f7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-5",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add INVALID_INPUT and INVALID_MAX_RATE (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of get_max_standard_rate for single speed compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["clean up common module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/277",children:"#277"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e1959aba2a91c4abec2d820b6cb9378ac1dea281",children:"e1959ab"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["extend tests of time series resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve algorithm to generate generic variable speed compressor charts from input points (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/276",children:"#276"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b257567230000a92b5fcca8f8becdbcc4c880092",children:"b257567"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure no mismatch between timestamps and time series values (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/251",children:"#251"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ae6ade9fafb9b0ccf2afec5e633c2190a2f1009b",children:"ae6ade9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["only calculate max standard rate for time steps with valid model input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/252",children:"#252"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d651ed6822ba180ba4a490e1245a0f406cc64e43",children:"d651ed6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["possibility to include start and end date in resampling (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e8ef9b98901603c0a9e328c2c8923c5facca962c",children:"e8ef9b9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for v8.6 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/288",children:"#288"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af32274c17cb8a84895bf85c7b83360cd76bc533",children:"af32274"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies for new v8.6 release (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/289",children:"#289"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a245a397761ed69c2ffab151a7a33567f3c7282",children:"5a245a3"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-5",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add option to skip header validation on resource files (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/260",children:"#260"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/883b7e6888d5ff4ddca41cbeac0f7c7dd96e60a6",children:"883b7e6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["calculate timesteps separately (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/284",children:"#284"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bd9d684467698edbd88d7a089846310b3cea5ea4",children:"bd9d684"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["collect results in priority optimizer (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/16b9ccc3687a6f2910c1df5602c82dd75706089b",children:"16b9ccc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["common consumer system type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe09263acaf8d3ea8518759e695d6f368dfb214a",children:"fe09263"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["common yaml system v2 class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/98198fc7a19575f6b949527993999ae929a7590c",children:"98198fc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["consistent naming of nodes in graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/676c7b84f99e1ca79446321ab06eba43df36abef",children:"676c7b8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generic graph class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6f63e40af1b2f57380852ef6403b6f4ac2474d50",children:"6f63e40"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move into presentation layer (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/271",children:"#271"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/52530e0b72aa0f07de93b6c231798dd5c9a20eb4",children:"52530e0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove economy from ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/282",children:"#282"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a50148c8bce3bfdb491dbab65620ac964a80e65c",children:"a50148c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename Stream to StreamConditions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf908ece731c6dcd2755ed6b08b8748cff5ac508",children:"cf908ec"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename to component graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9629f221a0370559a7b89bbede0b5576eb916c20",children:"9629f22"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["system v2 stream conditions format (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/257",children:"#257"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e228e8b1180a3dd22a408fa199e52797aef43fc6",children:"e228e8b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common consumer system dto class (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/267",children:"#267"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3c58b53e0731cbae9219bfb6eef96e5e5d4ea144",children:"3c58b53"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use PriorityOptimizer outside ConsumerSystem (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f1af9e6c701d8899450aacaa94ba02071b032dc6",children:"f1af9e6"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"850-2023-10-30",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.4.0...v8.5.0",children:"8.5.0"})," (2023-10-30)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-3",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add pump results to system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8cf9e1b0d3ab8438291303663fc83092de1c808a",children:"8cf9e1b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add stream conditions to compressor v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/194",children:"#194"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/232f83bf91044b706ba4c7715ceddf71f9456644",children:"232f83b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["multiple streams in system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/242",children:"#242"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/419c2e9cef6f6bb768b5e140a5092650cacd245b",children:"419c2e9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support name for crossover streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/236",children:"#236"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c801f3f0fa4b967c15c5122ac8997695f38bae12",children:"c801f3f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-6",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["don't require HCEXPORT in editor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/254",children:"#254"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e497245c9ec4e6d10e9def5999d24c5e0ba58134",children:"e497245"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ensure unique names in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/238",children:"#238"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3634a9e1a4f2a4181ea1679fa1edcce0bb57a06e",children:"3634a9e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rate when multiple streams model (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/214",children:"#214"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/892720e781978be0210b7488ad6c68466db51700",children:"892720e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set_regularity fixture (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/213",children:"#213"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e9ea04f74c2262343fbde5d5aed46ffc15404e29",children:"e9ea04f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update ecalc validation for yaml file in web (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/243",children:"#243"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2981f2c71b7aba0271f72c8ec5f1d764a0d36387",children:"2981f2c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use file reference instead of urls in docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/216",children:"#216"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/35c4f6853c9452d1963daf321cce3e2ebe087f9e",children:"35c4f68"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong data for boilers and heaters in ltp-results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/237",children:"#237"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/851e83141c1971a8fc1fdec47e05b4e5a26d0861",children:"851e831"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-6",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add missing keywords surge control margin (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/239",children:"#239"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8b97673b001231b6960bda817d50241135df65df",children:"8b97673"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for upcoming release v8.4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/203",children:"#203"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/66671e07ce678f4444f6428b776b60c607d35957",children:"66671e0"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-6",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add ",(0,s.jsx)(c.strong,{children:"init"})," file to ecalc_cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/af6bee96ae3ac69137f38117013a305f474acd87",children:"af6bee9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add chart area flag to test of full recirculation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add check for zero efficiency in stage (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ea3035c659ee922a41c70b157f9d6a1a1f8214d",children:"3ea3035"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add dependabot actions monitoring (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/219",children:"#219"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d5f5dfd12103fb60104057fd2f3b5ce4484e3494",children:"d5f5dfd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add ModelInputFailureStatus (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add NO_FLOW ChartAreaFlag (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add rate type to pump model result (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/209",children:"#209"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/21deeb7a70cd64f47db87494314a0119ee4598d5",children:"21deeb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"cli:"})," add all energy usage models load_results test (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/220",children:"#220"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e09febb517a62d27e2d794946d016f1ba0af8fd1",children:"e09febb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/cache from 3.0.11 to 3.3.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/223",children:"#223"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/087867c19fc087702ae7829b3d6cddfc1ac62f9d",children:"087867c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/checkout from 2 to 4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/221",children:"#221"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bcc2f81d9eed20f3021c1e13fead3f8c8d009267",children:"bcc2f81"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump actions/setup-node from 3 to 4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cb7e816932e73d091cfa4211abe086620ab320fd",children:"cb7e816"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"deps:"})," bump snok/install-poetry from 1.3.3 to 1.3.4 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/222",children:"#222"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/80dab720f352995121a1cd470e14eef9779a45fb",children:"80dab72"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle requested pressures correct for compressors without system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/233",children:"#233"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/445fc9d856db729181e48f04d58cf05d324a8c50",children:"445fc9d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle requested pressures for compressor systems (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/215",children:"#215"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b054390fe86fe5067a908854f0dd6d48ba114ff",children:"6b05439"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["more robust surge control margin calculation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/229",children:"#229"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74b4e599ff2336567e7a86e57bb4287030ccea08",children:"74b4e59"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move feature experimental to main method for requested pressures (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/230",children:"#230"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00ad854cc23822690e662338f6592142344a59f3",children:"00ad854"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pre-commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a310df21ebb9dc27e9999b577cc7ae7a106aa68c",children:"a310df2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["show correct version (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/211",children:"#211"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f8de992b6d2621a604f9b31b6eea0ff644df30dd",children:"f8de992"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/212",children:"#212"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c9b850672357fd48a0b1f40f5b429ae615fbd914",children:"c9b8506"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/259",children:"#259"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e7f031f73dc3320352cd6087e32b281dbf01e6bc",children:"e7f031f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update python deps (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/247",children:"#247"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/514da161158200bc18a8963cb10be141c9847fb8",children:"514da16"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update system v2 tests to only use one crossover (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/205",children:"#205"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/aa6516367fd217b3868af2c1b56119ec548c77ad",children:"aa65163"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update zero efficiency error message (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/258",children:"#258"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5be6fe433791bee1f25dfcc265ffb94c87633836",children:"5be6fe4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["upgrade packages (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/255",children:"#255"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/035aad15b41bb16676ec33d33dcb78d139e2bc6c",children:"035aad1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["version must be updated in version.py (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/63eb672ff5a28c5c4b14294c8d9dcc38a3481089",children:"63eb672"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["warn user about full recirculation of fluids in a compressor stage in a multiple streams and pressures compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/196",children:"#196"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0c452515226beec76a4db3c674d4fa102771dbe7",children:"0c45251"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-6",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["implement evaluate streams in models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/232",children:"#232"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/df6b6b01099fe87738594544512c28d0bceb0d07",children:"df6b6b0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"libecalc.core:"})," stream as input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/224",children:"#224"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e06f970147e5539fa2c8db0ca53675d24c56ae33",children:"e06f970"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move crossover to component_conditions for system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/204",children:"#204"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/018b47291cbfd5b8b92bbff9c79846b32696d316",children:"018b472"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move RateType into common module (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/253",children:"#253"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c7f5a9955c55fdc970f60b6aade8a0793acab27a",children:"c7f5a99"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move validate operational conditions from compressor train, rename to validate model input (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/256",children:"#256"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6b0c72875e667ca1abce5b9b1f2ef4a9548d0d1e",children:"6b0c728"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove regularity our of core/domain (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/246",children:"#246"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/714888bfa69460174c1b3917470018e8e688b3e1",children:"714888b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove temporal operational settings system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/244",children:"#244"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a1d2ce62c4cfde50665bd1fdfa41402a64548672",children:"a1d2ce6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename streamCondition to stream (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/32885b5b054008cbfb682454daaa29d443fd561f",children:"32885b5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["separate optimization from system (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/245",children:"#245"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b580e3d80ab5392410c438f6ff355fdf1326f121",children:"b580e3d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use Graph object to build graph (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/250",children:"#250"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ce65dbad024fc9afae74a2c533767152ce2efa20",children:"ce65dba"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"840-2023-09-25",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.3.0...v8.4.0",children:"8.4.0"})," (2023-09-25)"]}),"\n",(0,s.jsx)(c.h3,{id:"features-4",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add compressor inlet- and outlet pressures to models/train level (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/152",children:"#152"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b95ee50fd78d77c59dfe2533c10dbcdc41461a7",children:"9b95ee5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add input compressor pressures to output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/140",children:"#140"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74e3e5673bad36bf30d8b217609819a79d7e76bb",children:"74e3e56"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add support for system v2 in FDE (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e6d1f938d62d68479835f90932bc09b49203a6c9",children:"e6d1f93"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add support for temporal operational settings in v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f2b217acaaf445df03fba077cd7407a4c37375d2",children:"f2b217a"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-7",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add system v2 subcomponents to components list (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b61a0feba9d28c27992128a2e02262c58dedcbdb",children:"b61a0fe"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add system v2 to generator set consumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/166",children:"#166"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d40558eb0c727723ba1cf952dfbd58b73dca0cd0",children:"d40558e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["avoid name conflicts with ecalc cli package (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/197",children:"#197"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/140c4481b8a860b203b338b51a883c41bd6b4dc6",children:"140c448"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["bug in asset_result_dto (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/170",children:"#170"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c45a7acfb4bf3c89f8c89e71561a90e2831ccb17",children:"c45a7ac"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct type for total system rate in pump system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/167",children:"#167"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5559cdd478511b050a3f344da33110621f221b76",children:"5559cdd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["do not return actual rate in results for compressor sampled since it can not be calculated (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/190",children:"#190"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74fcfd8ffc4835d6ddec442374f1389f24df66d7",children:"74fcfd8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["expression type in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5318fb536945cd2aeb82f03cb922fa1a4ed950e1",children:"5318fb5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["forbid extra attributes in TimeSeries (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/195",children:"#195"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/24c27bb0d3f9ee5570dc76e6d6cf3a45bc006e27",children:"24c27bb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["full run with system v2 components (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/147",children:"#147"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2279ef430f04673bc91926316663cdbd97cfc61d",children:"2279ef4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate system v2 schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/161",children:"#161"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a27c39253d91a3f1c7cc559164874c2d5f9443d3",children:"a27c392"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle all situations where zero mass rate is entering a compressor stage in a multiple streams compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/164",children:"#164"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["handle dates in yaml correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e9c28d057413aa801ec9af86b89f3c4d5b3de8e5",children:"e9c28d0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["issue with crossover rate calculation in system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/188",children:"#188"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/623a1cfa1e9ee888d69543dc2050cf4c25945baf",children:"623a1cf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make ecalc installable again (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/58693debf2cdb774a7b9659214ba9aa9453af8d0",children:"58693de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rate_type was snake_case in json output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/172",children:"#172"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dc82a88930e158fc5b6a762cd1fe7d75534d86d7",children:"dc82a88"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["requested pressures not always an attribute (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/155",children:"#155"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0078405e3ad2d254b320239fc8636c3c2bdfbebf",children:"0078405"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["system v2 evaluation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6494257c5d67f8a19582b2c152d73ec550289196",children:"6494257"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use results base (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/199",children:"#199"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cebde330135210bcc25a5950a2416a8fcf747b09",children:"cebde33"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrongly accessed rate in pump system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/56da4b2a07188200589795ab8a2e7f1ebfe3fe95",children:"56da4b2"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-7",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add further explanation to generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ddcb462ba1eda072df2abfd40e95fa677832ef91",children:"ddcb462"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/30553e0e7282ef35e616d2f3629de57e104d7e42",children:"30553e0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add powerlossfactor in generic workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3d152c880b9d8b33e3ac496ddc96eb2b2f588fb1",children:"3d152c8"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["changelog v8.4 add input compressor pressures to output (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/150",children:"#150"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/46e308fba1c1f4001bd1eaa340880c8409c8841b",children:"46e308f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct order of diagrams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/71a07f5315a28d053557db25209d543d4a570307",children:"71a07f5"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make mermaid diagram of workflow render correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b1c5b233907fa705832e55621e6917efb8620df7",children:"b1c5b23"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make mermaid workflow diagram render correctly (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7a99b5b062804b0f0661ac4d6a62f8d6f32a2fdb",children:"7a99b5b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for v8.3 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b424176c1dad13f4a29ba7c84cc2354e37b75c2a",children:"b424176"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update workflow with comments (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a71abfe32f02a056a0253ec7e4596b0b10fb94b2",children:"a71abfe"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-7",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add pressure drop ahead of stage to inlet pressure before choking (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/146",children:"#146"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5368de941febf44f7e5e13c11b1fc3509c2e95d",children:"e5368de"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add rate type to compressor model results and convert to time series (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/187",children:"#187"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c86bf3f940224ca765f5705f10df676eb6e5d557",children:"c86bf3f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add validation for missing headers in csv resource file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/191",children:"#191"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/60e84032d932deaf0591c6f5d5d68d70d23dc753",children:"60e8403"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["adding test of full recirculation in multiple streams compressor trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["calculate correct standard condition density when mixing two streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba9235efd01f8b6cfc1dd776f6355d076c3fb93b",children:"ba9235e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["clarify neqsim depenedency in ecalc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/198",children:"#198"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d6635a988de18799563c09c51ae7f3f7944c8915",children:"d6635a9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"docs:"})," fix equations showing twice (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/141",children:"#141"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2455e34cbaf047bc416a287052c12d9fbbdc963e",children:"2455e34"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enable mypy for cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/189",children:"#189"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/da713fcdac9d2c32ed6b60b788de31a765c1644a",children:"da713fc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix spelling errors in changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/de3c2eb0cf74068dd6c04e7710eaeb1d2dd27a77",children:"de3c2eb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary folders (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/186",children:"#186"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e861d8782aa2d3280a7e3e5c24f757558e5656f5",children:"e861d87"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename conflicting file names (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/153",children:"#153"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/654175e9be0e40b521c6c68871b8a0b85906605c",children:"654175e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["revert nan to num in expressions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/202",children:"#202"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2f95c2966ebfc906ebeda2f12ad1fe72ec0a59b4",children:"2f95c29"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update archive (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/181",children:"#181"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/03abf64e9267374b8cd641c09d870631200a2ec5",children:"03abf64"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update deps to latest (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f30f49db6febd033cfd139727c85c31c4676fd2",children:"0f30f49"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-7",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["change typ to rate_type for TimeSeriesRate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/89",children:"#89"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8be87ddff732592e16ff337fe9927ead438d5928",children:"8be87dd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate asset/ecalc model schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/157",children:"#157"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6818848afa5f9c390d9214597b8ea938eeb43037",children:"6818848"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate direct emitter schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/180",children:"#180"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/924526ad7958cfce6e75aa43791224edbcf6db70",children:"924526a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate facility type schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/182",children:"#182"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/942897921d8f38115878bdd95349c43c449240b7",children:"9428979"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate fuel consumer schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/160",children:"#160"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9f580c16f6f25e22d30e8d36dd05536303ec6929",children:"9f580c1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate fuel types schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/179",children:"#179"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e17ef3be779921e029db5c7ca10ed86a2e71f797",children:"e17ef3b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate generator set schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/165",children:"#165"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ab25e055de634a4ecc59ae580834ee2e537fd991",children:"ab25e05"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate installation schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/159",children:"#159"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/030a44baf61719a8de6ed48b772a47eccd7d923c",children:"030a44b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["generate time series schema (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/176",children:"#176"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b02d68dbc615b9802c54d6e9806430aceee1b354",children:"b02d68d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when wrong CURVE-keyword input to single speed compressor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/173",children:"#173"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9502bcc8ee504d490e293f4bada839e96e011092",children:"9502bcc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when wrong CURVES-keyword input to variable speed compressor (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/175",children:"#175"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/714e867f7593527078480e4d9c7bca62da163d7a",children:"714e867"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["merge functionality for results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/193",children:"#193"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/db1e9b1d52d9dfce48d54dfa6cd77ac4a1bbf92f",children:"db1e9b1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move common properties for system v2 operational settings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/10b5e07915d52ce6b08f508dd87d31c4d8dc8778",children:"10b5e07"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move yaml system into package (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b477b159cc60df96c5ec230cd8d8db519f721f85",children:"b477b15"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove condition and power_loss_factor from system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2507bb92730cd4e9b5bd35d2f7e429d493fb5478",children:"2507bb9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove rate_fractions from system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ba788fdd8dff754c3ca16315d098e00911d91fa0",children:"ba788fd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common Period,Periods classes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/76366cec64da5c7585635db69adf457fbb36775e",children:"76366ce"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use common to_camel_case function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/171",children:"#171"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f5f0c2f8da6e07ad666f8fc203876eece646e6e8",children:"f5f0c2f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use yaml prefix for yaml klasses/modules (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/174",children:"#174"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e91ac2a77345556d8a53c10a4be049eb8ec2c7ce",children:"e91ac2a"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"830-2023-08-11",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.2.2...v8.3.0",children:"8.3.0"})," (2023-08-11)"]}),"\n",(0,s.jsx)(c.h3,{id:"-breaking-changes-3",children:"\u26a0 BREAKING CHANGES"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["energy model type not allowed to change over time (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/131",children:"#131"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"features-5",children:"Features"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["output pump head to json-file (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/49",children:"#49"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/60720f429cb5da82cd839740eca8d3039c9d5969",children:"60720f4"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-8",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["avoid zero discharge pressure after validation of operational conditions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/830c75e27a29549157658c606e618da381c24e81",children:"830c75e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["bug fix to joining results from different temporal models with compressor train models having multiple inlet or outlet streams (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/63",children:"#63"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/da3144a0cbb3e6121809c8eeee86e62a2a3ed5e1",children:"da3144a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["json schema accepts MAXIMUM_DISCHARGE_PRESSURE for single speed train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/86",children:"#86"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a18de1eae60085211b640b67a4f372346382fdc8",children:"a18de1e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["json schema allow stages to have control_margin and control_margin_unit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/90",children:"#90"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2415534053df4e50496fd2ae4504cff76ab14346",children:"2415534"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make apply_condition work for 2D numpy arrays also (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/78",children:"#78"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/bce91cb0b6b821e1b1a579c40f19311e847577b3",children:"bce91cb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make sure that suction pressure is less than or equal to discharge pressure for compressor train (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/104",children:"#104"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf",children:"d218273"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parse scientific notation numbers in expression (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/85",children:"#85"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fdf322bafa9a3379b6481e57ca1e761475f42b25",children:"fdf322b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parse spaces as thousand separators from excel (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/107",children:"#107"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5a3bd6a2b8e85dcc248435b30677e278d64c7f93",children:"5a3bd6a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pump results wrong when resampled (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/71",children:"#71"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/daffdb3d969add106bbbfd782cfae418cfd8650d",children:"daffdb3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["resample emissions correctly to create valid json (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3c9b52e40c1c88a11db3d088c0fbb320a4920daa",children:"3c9b52e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["result of validation of operational conditions when rate is zero should always be valid (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9de403c8b92895fafabea875d970fc1901a4ba89",children:"9de403c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["validate time steps where rate is different from zero, not only when larger than zero (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6ce07c41e82b397d9512566a42fd8fd2017c14d1",children:"6ce07c4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["wrong standard_conditions_density when mixing two fluids (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a16a695736125dc4b662ab31ab9a83186b14f369",children:"a16a695"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-8",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["fix generic compressor example (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/38870a3f735e7397502345dda69f646240328490",children:"38870a3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix links (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/116",children:"#116"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/62cadfcf581b101d7bb33b3772ffb65eefbf670b",children:"62cadfc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["how to migrate from 8.1 to 8.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4d3be58f5af44cbdee4158017b163361371dc23c",children:"4d3be58"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unnecessary information from migration guide (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/47305386db82d826245c67e6c10a8597a36bfc09",children:"4730538"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["specify only gensets for boiler/heater (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/53",children:"#53"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2df3bdf299bcb6cf47289259e4fedd21c2de141c",children:"2df3bdf"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog 8.2 with changes for ltp- and stp (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/43",children:"#43"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6fe4b773a156d01eec67e8e70b764d4e18d374ce",children:"6fe4b77"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update changelog for 8.2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ccea743332f0d1950ff61ca6747bb507ea37bd4",children:"3ccea74"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docs and changelog for energy models (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/133",children:"#133"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8f0d71633d80a99da369dffa05f386e554f3c0bb",children:"8f0d716"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation for heaters and boilers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/52",children:"#52"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2bef70731be94ace7d0a2269f2ebf07bd01e82b2",children:"2bef707"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update migration guide with ltp- and stp changes (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/42",children:"#42"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4b0b23011a9d2161741dd52031070307fc6c1b68",children:"4b0b230"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-8",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add 8.3 changelog (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9f4a4af545126922a38807c51268bd84dfb868db",children:"9f4a4af"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add fluid mixing checks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/53c1626ebf10edc71c0ba4ef5fcdbe1cd6a32ac0",children:"53c1626"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add fluid mixing checks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0f3ddcaca1164acad3f5d213b2e8daac05333042",children:"0f3ddca"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add installation filter to flare nmvoc (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/87",children:"#87"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f37b76d0b3c2f6941585299998205c3a907b41a8",children:"f37b76d"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add installation filter to remaining ltp-columns (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/91",children:"#91"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/39df7923d79a393981285986016311e9f1b0848f",children:"39df792"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add power adjustment constant also for compressor trains with interstage pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/136",children:"#136"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test for adjust energy usage on multiple streams and pressures compressor trains (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of count_parentheses (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5",children:"0d1ce6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add test of validation of operational conditions when suction pressure exceeds discharge pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2182730c2fdcd98e54fef8625cd289dc206b2bf",children:"d218273"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["added changelog entry about interstage pressure fix (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/95",children:"#95"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2a1e8b085ed87dcbb8da874b64f737721f0ceaae",children:"2a1e8b0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["count parentheses in list of tokens only among the elements that are strings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/94",children:"#94"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0d1ce6feff7a6aaeecab57fd9a661122b691d3b5",children:"0d1ce6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["energy model type not allowed to change over time (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/131",children:"#131"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/670cff2154e2881aea25903557a7f187bdab05ee",children:"670cff2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enforce unique fuel type names, and unique emission names within one fuel type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/84",children:"#84"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4ea9c630510015e2030f0840b933ea399cc0734b",children:"4ea9c63"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix broken link in documentation of GENERATORSETS keyword (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/103",children:"#103"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/329c8e993c217e7685c082b7671a12c4115bba87",children:"329c8e9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix typing of fluid composition (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c0d98b3a6f4dfb411edfa9bdd8be3c887b28f6da",children:"c0d98b3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve documentation on defining compressor charts using CURVE and CURVES (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/97",children:"#97"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1bde68a38e75255c8f2d6cd88fb5b6ba1ddb97c9",children:"1bde68a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve error message when bad yaml file name (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/77",children:"#77"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d2eb733264b2d5b2114a785096c9d6abbffea21b",children:"d2eb733"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["merge queue (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d4489c604b807c07a7e41a038cbdfeca9720ade1",children:"d4489c6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["numpy ndarray typing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/46",children:"#46"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9b7b308ea6ce5c0aee5acdf8226cd94b90b448aa",children:"9b7b308"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["pin numpy to compatible numpy version (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/35a3640a96c376f4d37e74fd62aec0f0a0bf458b",children:"35a3640"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove limiting dependency typer-cli (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/820844475c29460f29a44bb7917ed5bd37d4ad45",children:"8208444"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["simplify dependencies for use with komodo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/39c5c365aea85ba333a5a509fe5cfbee1be5d9d0",children:"39c5c36"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies to be aligned with external requirements (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fbfbfeb4292011c04d9107218a5b4188e052f7ff",children:"fbfbfeb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update snapshots after power adjustment constant fix for compressor trains with interstage pressure (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c8a486114ec713358798a5dba2a5500dfbbef21d",children:"c8a4861"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-8",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["consumer system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/248dabb595a12ed6ca9a0f8ef519f5439a3b0964",children:"248dabb"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["ensure neqsim fluid is contained to FluidStream object (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/118",children:"#118"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d1d6ad6fa1c6cfdf4eee428477995c6f163fa11a",children:"d1d6ad6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enthalpy calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/109",children:"#109"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a01a2153fe904d191150c4ced09257dc45484194",children:"a01a215"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enthalpy calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/110",children:"#110"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/cf7d1a9e975fece41b98f4ab6c7bbb3edb562735",children:"cf7d1a9"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["improve naming and documentation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94be7fa714a0db20944e9b35d1867d11a0748e7f",children:"94be7fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["molar_mass_kg_per_mol is not used in the code (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/3ea535ef68ead2b600b33319c1ed70907e7ba681",children:"3ea535e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move NeqSimfluid creation into NeqSim wrapper (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/57c4b244d6449c6b43bcea75a1f7ed1f82ccfc8c",children:"57c4b24"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["NeqSim mapping (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/120",children:"#120"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0a0b2fea564c1695bb920145086f23bccac91528",children:"0a0b2fe"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove FluidStream copy (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/119",children:"#119"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0e30ab288b18fecbde62067564ac235d6c58dae1",children:"0e30ab2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Use a list comprehension to create a transformed list (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/112",children:"#112"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/5d7292bdafd16bc74b2e9b8bc13e97cf279fd9f7",children:"5d7292b"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-2",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add test for fluid stream mixing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/0ba8f8fff9503b791b6edaf16c45cb3d922d6c2b",children:"0ba8f8f"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-2",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["create release-please pr against correct branch (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be9426a774b8704b2f22e9a83544e07bd92a8808",children:"be9426a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix issue with api reference docs generation (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/44",children:"#44"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/42c140269a9e8a6d5f09e9354d14ae51d02f3e81",children:"42c1402"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix syntax for gh action workflow (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d8700dd9bccd40cb4b3bdb75119e0bd47baf3985",children:"d8700dd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["Lock pydantic version in CI and update hooks (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/106",children:"#106"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2ea517e79a34195e561a4897798bd24ef9cae6ae",children:"2ea517e"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicate build of docs (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/62",children:"#62"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e5b896b9f46a7e13c6d806237c4d4bef44833b77",children:"e5b896b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set default ownership for source (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/16d54f1a30368d92ead377baceef98820754c25f",children:"16d54f1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["support hotfix releases (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/03469295d20526e391938a5830d1513088a8803f",children:"0346929"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update pre-commit settings (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6092255da9ca373537b162b21190bfe9f138a027",children:"6092255"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(c.h2,{id:"822-2023-05-28",children:[(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/compare/v8.2.1...v8.2.2",children:"8.2.2"})," (2023-05-28)"]}),"\n",(0,s.jsx)(c.h3,{id:"bug-fixes-9",children:"Bug Fixes"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["allow electrical driven consumers in consumer system v2 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/92cb4faa7bfa525af6527892eab2dd38606b2033",children:"92cb4fa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["cast float to numpy array in function call (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/39",children:"#39"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/250928c2b573f6148129ec32bc54932cbb2cb4a0",children:"250928c"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:[(0,s.jsx)(c.strong,{children:"NeqSim Wrapper:"})," inconsistent return type (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/94824210b4c2da666d9280ee581e3a98463e4742",children:"9482421"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["output emissions in fixed and predicted order (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/059dab592bf396eb20d4b825b8358fc10793ca5d",children:"059dab5"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-3",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["enable mypy for neqsim wrapper (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/871c038c756ba40fc1c43bfbee7f83b0f4fd5390",children:"871c038"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["parallelize tests in docker (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/4e73b680147c558e4e7cb0d44a78cfaa0e1a357f",children:"4e73b68"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove docker tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a2b5c1a7158d81094982724a63748ca4798f14ca",children:"a2b5c1a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["use xdist to parallelize test suite (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/2895ae7361878ea94d0d5be4a04a6ffbe0067b3d",children:"2895ae7"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"tests-3",children:"Tests"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["compare consumer system v1 vs v2 both fuel and power consumers (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/74fafce276b93c9495bcfa1c2800c2a866bfa388",children:"74fafce"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"code-refactoring-9",children:"Code Refactoring"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["even more typing! (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/a7b22e23fa73d4e0cd35750f7ea6cea5e52f8abd",children:"a7b22e2"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix more typing (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/08394a3ce3969976674532ccf8c3876265315035",children:"08394a3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["make units lowercase in function names (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/272f0d7274986bc54c0717e7964d5a48c9a06723",children:"272f0d7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["raise exceptions from error (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/ee6e4742da1c3201abe8969d2dfedb1c2d4b369b",children:"ee6e474"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove duplicate function for converting to standard rate (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/93de4f4d10b10763428d933e7afc3dea277a31ac",children:"93de4f4"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove unused code (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/7ccf2c1dfd6d51242032d1b7bf45c52f6b7e90f5",children:"7ccf2c1"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["rename function variables (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/c56693a9e982c7e2275cc277939624c7812e9b65",children:"c56693a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typing and typos (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/936b9417da0723871d6c46f258d256a8967f934c",children:"936b941"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"documentation-9",children:"Documentation"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add docstrings to undocumented functions (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/064adfa204c2c9f21588c30dc2c2cf3d2375c8a7",children:"064adfa"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update compressor pressure control (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/14",children:"#14"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1da1999ac4dfaf21abd50e9d9ecc94102a0427e2",children:"1da1999"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-9",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["add consumer function utils (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add consumer system v2 sub results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/b78b03504c4a46114062aded6661f00400c6ca06",children:"b78b035"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["add testing of condition in consumer system consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["capture return values from a decorated function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/09ef23e92bf2755c7b83c7de5e9cbe9ee862db05",children:"09ef23e"}),"), closes ",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/4489",children:"#4489"})]}),"\n",(0,s.jsxs)(c.li,{children:["capture valid neqsim states (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f9c8b09f36d1f9a965b94cd32ef2d7b47c910a75",children:"f9c8b09"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["change to absolute image links in readme (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/16",children:"#16"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9a54f516613509bd6d5595f8afc1e5dce7ac860a",children:"9a54f51"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["conditions in tabular consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["correct link to documentation from README.md (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f185a7f8c389d4f9f5e087b68bfc83cc4fddad74",children:"f185a7f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["coverage from coverage.py is not directly supported (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/8e76c8ab90d455613868e4343d6a2f61ccfb2a68",children:"8e76c8a"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["enable B904 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/65ac18ba23178c57886c1a77b74b2ee52c6d7a60",children:"65ac18b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["evaluate consumer system v2 consumers according to input order (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/00882321d823f74cf37f0b42e9771775b8eb34db",children:"0088232"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["fix badges (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/dd2fd6be194d306ae1ef969b13c43aea7352db58",children:"dd2fd6b"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["migration guide changed resampling method (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/38",children:"#38"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/d4f11dc49ce5eef29f6982f9514f6664ef18c764",children:"d4f11dc"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditioning for consumer system consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions for compressor consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions for direct consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move conditions in pump consumer function (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["move evaluation of conditions before calculations (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/24",children:"#24"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove energy usage before conditioning from tests (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["remove energy_usage_before_conditioning from results (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/50e2d667a37fc5f09a4c76615be0b21a42e2c703",children:"50e2d66"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["set power to zero when rate (and fuel consumption) is zero (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/27",children:"#27"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77",children:"1ee5bfd"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9c3af00b4bcf5e3e57a99c97d3cc9028faeca307",children:"9c3af00"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["typo (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/389db6f29e7a7ff9044b7bac5fb0e6fddba1687d",children:"389db6f"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update dependencies to latest compatible (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/58098624c64693d20591bc96d79c2cbc61e3b5a6",children:"5809862"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update description etc in readme (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/f37dbb7b97ade6c358b89e288ba644b06d546187",children:"f37dbb7"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update docstring for numeric_methods (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/be435c3c96bc378614c4f761410c005be77025a4",children:"be435c3"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update test snapshots (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/1ee5bfd2af30482683698172cd2a9c512f793b77",children:"1ee5bfd"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h2,{id:"821-2023-05-09",children:"8.2.1 (2023-05-09)"}),"\n",(0,s.jsx)(c.h3,{id:"miscellaneous-chores-10",children:"Miscellaneous Chores"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["initial commit (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/e4a59f03f716c7ceb1d3df50af6ef3cc76c405cd",children:"e4a59f0"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["release 8.2.1 (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/9d66de6199b35d3bfd279fd1fe96806b05e6d594",children:"9d66de6"}),")"]}),"\n",(0,s.jsxs)(c.li,{children:["update documentation url (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/6443ecf7324e6ee33d02bfa1a3f7b9168f19a612",children:"6443ecf"}),")"]}),"\n"]}),"\n",(0,s.jsx)(c.h3,{id:"continuous-integration-4",children:"Continuous Integration"}),"\n",(0,s.jsxs)(c.ul,{children:["\n",(0,s.jsxs)(c.li,{children:["enable publish to pypi (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/issues/15",children:"#15"}),") (",(0,s.jsx)(c.a,{href:"https://github.com/equinor/ecalc/commit/fe6f069b12119b62d054a635eb038b37a4394415",children:"fe6f069"}),")"]}),"\n"]})]})}function d(e={}){const{wrapper:c}={...(0,n.a)(),...e.components};return c?(0,s.jsx)(c,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},11151:(e,c,i)=>{i.d(c,{Z:()=>a,a:()=>r});var s=i(67294);const n={},t=s.createContext(n);function r(e){const c=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(c):{...c,...e}}),[c,e])}function a(e){let c;return c=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(t.Provider,{value:c},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43a1031a.8029b5e8.js b/assets/js/43a1031a.8029b5e8.js new file mode 100644 index 0000000000..cb438ebb44 --- /dev/null +++ b/assets/js/43a1031a.8029b5e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8010],{34629:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var n=i(85893),s=i(11151);const r={title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},o=void 0,a={id:"about/modelling/setup/facility_inputs/index",title:"Facility inputs",description:"Guide on how to use facility inputs",source:"@site/docs/about/modelling/setup/facility_inputs/index.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Facility inputs",sidebar_position:3,description:"Guide on how to use facility inputs"},sidebar:"about",previous:{title:"Time series",permalink:"/ecalc/docs/about/modelling/setup/time_series"},next:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"}},l={},c=[{value:"Format",id:"format",level:2},{value:"Supported types",id:"supported-types",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," keyword is ",(0,n.jsx)(t.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,n.jsxs)(t.p,{children:["This part of the setup defines input files that characterize various facility elements. Each facility element is\nspecified in a list. These are later used as input in the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["All facility inputs are in essence a ",(0,n.jsx)(t.code,{children:"CSV"})," (Comma separated file) file that specifies input data to a model that\ncalculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple\n",(0,n.jsx)(t.a,{href:"#supported-types",children:"supported types"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"There are four categories of data that can be used here:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of a ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",children:"generator set"})]}),"\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of pumps ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"(pump charts)"})]}),"\n",(0,n.jsxs)(t.li,{children:["Files describing the performance of ",(0,n.jsx)(t.strong,{children:"only"})," tabular compressors ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:"(sampled compressor data)"})]}),"\n",(0,n.jsx)(t.li,{children:"Other energy consuming equipment modeled variable w.r.t. reservoir management\n(tabulated relationship between variables and consumption)"}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["eCalc\u2122 supports making simple adjustments to a table by using the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/ADJUSTMENT",children:"ADJUSTMENT"}),"\nkeyword as well as modification of the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",children:"HEAD_MARGIN"}),"\nwhich can be used while calibrating pump charts."]}),"\n",(0,n.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,n.jsxs)(t.p,{children:["Each facility input has the skeleton as seen below. However, some inputs require further information. For example, ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"pump models"})]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <reference name>\n FILE: <file_path.csv>\n TYPE: <consumer type>\n"})}),"\n",(0,n.jsx)(t.h3,{id:"supported-types",children:"Supported types"}),"\n",(0,n.jsxs)(t.p,{children:["The facility input type is defined using the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," keyword and defines the type of model applied\nto the data in this file. The input files are in ",(0,n.jsx)(t.code,{children:"CSV"})," (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file."]}),"\n",(0,n.jsx)(t.p,{children:"The supported types are:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"ELECTRICITY2FUEL"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"TABULAR"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"COMPRESSOR_TABULAR"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"PUMP_CHART_SINGLE_SPEED"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.code,{children:"PUMP_CHART_VARIABLE_SPEED"})}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>o});var n=i(67294);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43a26e71.875cfcf4.js b/assets/js/43a26e71.875cfcf4.js new file mode 100644 index 0000000000..c61c268153 --- /dev/null +++ b/assets/js/43a26e71.875cfcf4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4845],{52414:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>s,default:()=>r,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var i=t(85893),o=t(11151);const l={sidebar_position:2,description:"Pump modelling"},s="Pump modelling",a={id:"about/modelling/setup/facility_inputs/pump_modelling/index",title:"Pump modelling",description:"Pump modelling",source:"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",sourceDirName:"about/modelling/setup/facility_inputs/pump_modelling",slug:"/about/modelling/setup/facility_inputs/pump_modelling/",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Pump modelling"},sidebar:"about",previous:{title:"Generator modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling"},next:{title:"Pump chart",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"}},p={},d=[];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"pump-modelling",children:"Pump modelling"}),"\n",(0,i.jsx)(n.h1,{id:"attention",children:"Attention"}),"\n",(0,i.jsx)(n.p,{children:"Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel."}),"\n",(0,i.jsx)(n.admonition,{title:"Attention",type:"warning",children:(0,i.jsx)(n.p,{children:"The pump models in eCalc\u2122 are intended for water, i.e., there is no friction dependency.\nThus, for usage in other types of pumps (e.g., where the\nfluid viscosity changes with the fluid mixture), the results might not be as intended."})}),"\n",(0,i.jsxs)(n.p,{children:["Core theory behind the modelling of pumps in eCalc\u2122 can be found ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/theory/pump_modelling",children:"here"}),"."]})]})}function r(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>s});var i=t(67294);const o={},l=i.createContext(o);function s(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/45c974ba.3fe59b9a.js b/assets/js/45c974ba.3fe59b9a.js new file mode 100644 index 0000000000..196bad4e9d --- /dev/null +++ b/assets/js/45c974ba.3fe59b9a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2459],{93948:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=s(85893),o=s(11151);const r={slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:5},a="eCalc v7.2",l={id:"changelog/v7-2",title:"v7.2",description:"Features",source:"@site/docs/changelog/v7-2.md",sourceDirName:"changelog",slug:"/changelog/v7-2-release",permalink:"/ecalc/docs/changelog/v7-2-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-2.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:5,frontMatter:{slug:"v7-2-release",title:"v7.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:5},sidebar:"changelog",previous:{title:"v7.1",permalink:"/ecalc/docs/changelog/v7-1-release"},next:{title:"v7.3",permalink:"/ecalc/docs/changelog/v7-3-release"}},i={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v72",children:"eCalc v7.2"}),"\n",(0,t.jsx)(n.h2,{id:"features",children:(0,t.jsx)(n.em,{children:"Features"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add :code:",(0,t.jsx)(n.code,{children:"ecalc show yaml model.yaml"})," command."]}),"\n",(0,t.jsx)(n.p,{children:"The command will only read the yaml file, include the files that should be included, then show the resulting yaml.\nThere is no need to run the model beforehand."}),"\n",(0,t.jsxs)(n.p,{children:["This should help figure out problems with :code:",(0,t.jsx)(n.code,{children:"!include"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["BREAKING CHANGE!: ",(0,t.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," is MANDATORY for Generator Sets. To be able to handle this, the ",(0,t.jsx)(n.code,{children:"MISCELLANEOUS"})," category\nhas been introduced for Generator sets for users to be able to set this to generator sets that do not apply to other categories,\nand to e.g. except for LTP output."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: genset\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: A_genset\n ...\n ...\n - NAME: power_from_shore\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: onshore_power\n ...\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"EXPERIMENTAL: Add show results command to cli."}),"\n",(0,t.jsxs)(n.p,{children:["When running ecalc, either by ",(0,t.jsx)(n.code,{children:"ecalc run model.yaml"})," or ",(0,t.jsx)(n.code,{children:"ecalc model.yaml"})," we will store the results in your\nhome-directory. You don't have to specify any specific arguments for this to happen."]}),"\n",(0,t.jsxs)(n.p,{children:["A new command ",(0,t.jsx)(n.code,{children:"ecalc show results"})," is introduced. This command can be used to display all the results, or you can use\nthe argument ",(0,t.jsx)(n.code,{children:"--name"})," to only show results for a specific component."]}),"\n",(0,t.jsx)(n.p,{children:"What is a component? Currently the supported component names are the name of the model (filename without the yaml ending),\ninstallation names, generator set names, electricity consumer names and fuel consumer names."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'ecalc show results --name "component name"'})," will give a json file with only the specified component results."]}),"\n",(0,t.jsxs)(n.p,{children:["The output format can be changed to csv by specifying ",(0,t.jsx)(n.code,{children:"--output-format csv"}),". This will try to give all the data represented\nin the json output, but some of it will be filtered as it does not fit the tabular csv format."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Examples"})}),"\n",(0,t.jsxs)(n.p,{children:["Show all results in json format: ",(0,t.jsx)(n.code,{children:"ecalc show results"})," or ",(0,t.jsx)(n.code,{children:"ecalc show results --output-format json"}),"\nShow model results (totals) in json format ",(0,t.jsx)(n.code,{children:"ecalc show results --name model"})," (if using the model.yaml file as shown above)\nShow model results (totals) in csv format ",(0,t.jsx)(n.code,{children:"ecalc show results --name model --output-format csv"})]}),"\n",(0,t.jsxs)(n.p,{children:["Deprecation warning: Running ecalc without the 'run' argument is deprecated. Use 'ecalc run arg1 ... argN' instead.\nAs this is an experimental feature ",(0,t.jsx)(n.code,{children:"ecalc run"})," might see breaking changes in future releases, you are free to ignore\nthe deprecation warning for a while if you don't want to be exposed to those changes. ",(0,t.jsx)(n.code,{children:"ecalc show"})," will still work as\nexpected."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"fixes",children:(0,t.jsx)(n.em,{children:"Fixes"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Deprecate json_v2 output, json_v3 should be used instead. json_v2 (and json_v1) will be removed in the next release."}),"\n",(0,t.jsx)(n.li,{children:"Allow Single and Variable Speed Compressor Trains to run regardless of non-convergence in numeric root finding algorithms. This is a rate situation and caused by numeric instability. If this happens there will be logged an error in the log together with relevant data. Use result with caution."}),"\n",(0,t.jsx)(n.li,{children:"Use Brent's method instead of secant method to find roots used in numeric iterations for compressor models. Faster and more robust compared to old secant method."}),"\n",(0,t.jsx)(n.li,{children:"Correct prioritazion of compressor system when the compressor system is more complex than only splitting rates on more and more duplicate compressor trains."}),"\n",(0,t.jsxs)(n.li,{children:["Added warning both in documentation and code about using ",(0,t.jsx)(n.code,{children:"Generic compressor chart with design point calculated from input data"})," in a ",(0,t.jsx)(n.code,{children:"COMPRESSOR_SYSTEM energy usage model"})]}),"\n",(0,t.jsx)(n.li,{children:"Improved units and results mapping. The consumed energy is now reported under energy_usage, and power_rate is included if relevant regardless of energy_usage."}),"\n",(0,t.jsx)(n.li,{children:"Suction pressures were not correctly set, and defaulting to 0, in some cases when a list of pressures were given."}),"\n",(0,t.jsx)(n.li,{children:"In cases when only one timestep was evaluated in a consumer system, and the first prioritized operational setting was outside capacity, it was nevertheless chosen."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>a});var t=s(67294);const o={},r=t.createContext(o);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/465.e0f045fd.js b/assets/js/465.e0f045fd.js new file mode 100644 index 0000000000..b98e0cd27d --- /dev/null +++ b/assets/js/465.e0f045fd.js @@ -0,0 +1,3422 @@ +"use strict"; +exports.id = 465; +exports.ids = [465]; +exports.modules = { + +/***/ 12465: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(66893); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 13], $V7 = [1, 14], $V8 = [1, 16], $V9 = [1, 17], $Va = [1, 18], $Vb = [1, 24], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 30], $Vi = [1, 31], $Vj = [1, 32], $Vk = [1, 33], $Vl = [1, 34], $Vm = [1, 35], $Vn = [1, 36], $Vo = [1, 37], $Vp = [1, 38], $Vq = [1, 39], $Vr = [1, 41], $Vs = [1, 42], $Vt = [1, 43], $Vu = [1, 44], $Vv = [1, 45], $Vw = [1, 46], $Vx = [1, 4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 48, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $Vy = [4, 5, 16, 50, 52, 53], $Vz = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VA = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VB = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 48, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VC = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VD = [68, 69, 70], $VE = [1, 120]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "box_section": 10, "box_line": 11, "participant_statement": 12, "create": 13, "box": 14, "restOfLine": 15, "end": 16, "signal": 17, "autonumber": 18, "NUM": 19, "off": 20, "activate": 21, "actor": 22, "deactivate": 23, "note_statement": 24, "links_statement": 25, "link_statement": 26, "properties_statement": 27, "details_statement": 28, "title": 29, "legacy_title": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "loop": 36, "rect": 37, "opt": 38, "alt": 39, "else_sections": 40, "par": 41, "par_sections": 42, "par_over": 43, "critical": 44, "option_sections": 45, "break": 46, "option": 47, "and": 48, "else": 49, "participant": 50, "AS": 51, "participant_actor": 52, "destroy": 53, "note": 54, "placement": 55, "text2": 56, "over": 57, "actor_pair": 58, "links": 59, "link": 60, "properties": 61, "details": 62, "spaceList": 63, ",": 64, "left_of": 65, "right_of": 66, "signaltype": 67, "+": 68, "-": 69, "ACTOR": 70, "SOLID_OPEN_ARROW": 71, "DOTTED_OPEN_ARROW": 72, "SOLID_ARROW": 73, "DOTTED_ARROW": 74, "SOLID_CROSS": 75, "DOTTED_CROSS": 76, "SOLID_POINT": 77, "DOTTED_POINT": 78, "TXT": 79, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 6: "SD", 13: "create", 14: "box", 15: "restOfLine", 16: "end", 18: "autonumber", 19: "NUM", 20: "off", 21: "activate", 23: "deactivate", 29: "title", 30: "legacy_title", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 36: "loop", 37: "rect", 38: "opt", 39: "alt", 41: "par", 43: "par_over", 44: "critical", 46: "break", 47: "option", 48: "and", 49: "else", 50: "participant", 51: "AS", 52: "participant_actor", 53: "destroy", 54: "note", 57: "over", 59: "links", 60: "link", 61: "properties", 62: "details", 64: ",", 65: "left_of", 66: "right_of", 68: "+", 69: "-", 70: "ACTOR", 71: "SOLID_OPEN_ARROW", 72: "DOTTED_OPEN_ARROW", 73: "SOLID_ARROW", 74: "DOTTED_ARROW", 75: "SOLID_CROSS", 76: "DOTTED_CROSS", 77: "SOLID_POINT", 78: "DOTTED_POINT", 79: "TXT" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [10, 0], [10, 2], [11, 2], [11, 1], [11, 1], [9, 1], [9, 2], [9, 4], [9, 2], [9, 4], [9, 3], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [9, 4], [45, 1], [45, 4], [42, 1], [42, 4], [40, 1], [40, 4], [12, 5], [12, 3], [12, 5], [12, 3], [12, 3], [24, 4], [24, 4], [25, 3], [26, 3], [27, 3], [28, 3], [63, 2], [63, 1], [58, 3], [58, 1], [55, 1], [55, 1], [17, 5], [17, 5], [17, 4], [22, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [56, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.apply($$[$0]); + return $$[$0]; + case 4: + case 9: + this.$ = []; + break; + case 5: + case 10: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 6: + case 7: + case 11: + case 12: + this.$ = $$[$0]; + break; + case 8: + case 13: + this.$ = []; + break; + case 15: + $$[$0].type = "createParticipant"; + this.$ = $$[$0]; + break; + case 16: + $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) }); + $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] }); + this.$ = $$[$0 - 1]; + break; + case 18: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 19: + this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 20: + this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 21: + this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; + break; + case 22: + this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] }; + break; + case 23: + this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] }; + break; + case 29: + yy.setDiagramTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 30: + yy.setDiagramTitle($$[$0].substring(7)); + this.$ = $$[$0].substring(7); + break; + case 31: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 32: + case 33: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 34: + $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START }); + $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END }); + this.$ = $$[$0 - 1]; + break; + case 35: + $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START }); + $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END }); + this.$ = $$[$0 - 1]; + break; + case 36: + $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START }); + $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END }); + this.$ = $$[$0 - 1]; + break; + case 37: + $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START }); + $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END }); + this.$ = $$[$0 - 1]; + break; + case 38: + $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START }); + $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); + this.$ = $$[$0 - 1]; + break; + case 39: + $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_OVER_START }); + $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END }); + this.$ = $$[$0 - 1]; + break; + case 40: + $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START }); + $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END }); + this.$ = $$[$0 - 1]; + break; + case 41: + $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START }); + $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END }); + this.$ = $$[$0 - 1]; + break; + case 43: + this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]); + break; + case 45: + this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]); + break; + case 47: + this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]); + break; + case 48: + $$[$0 - 3].draw = "participant"; + $$[$0 - 3].type = "addParticipant"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 49: + $$[$0 - 1].draw = "participant"; + $$[$0 - 1].type = "addParticipant"; + this.$ = $$[$0 - 1]; + break; + case 50: + $$[$0 - 3].draw = "actor"; + $$[$0 - 3].type = "addParticipant"; + $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); + this.$ = $$[$0 - 3]; + break; + case 51: + $$[$0 - 1].draw = "actor"; + $$[$0 - 1].type = "addParticipant"; + this.$ = $$[$0 - 1]; + break; + case 52: + $$[$0 - 1].type = "destroyParticipant"; + this.$ = $$[$0 - 1]; + break; + case 53: + this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 54: + $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); + $$[$0 - 2][0] = $$[$0 - 2][0].actor; + $$[$0 - 2][1] = $$[$0 - 2][1].actor; + this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }]; + break; + case 55: + this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 56: + this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 57: + this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 58: + this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }]; + break; + case 61: + this.$ = [$$[$0 - 2], $$[$0]]; + break; + case 62: + this.$ = $$[$0]; + break; + case 63: + this.$ = yy.PLACEMENT.LEFTOF; + break; + case 64: + this.$ = yy.PLACEMENT.RIGHTOF; + break; + case 65: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0], activate: true }, + { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] } + ]; + break; + case 66: + this.$ = [ + $$[$0 - 4], + $$[$0 - 1], + { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] }, + { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4] } + ]; + break; + case 67: + this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }]; + break; + case 68: + this.$ = { type: "addParticipant", actor: $$[$0] }; + break; + case 69: + this.$ = yy.LINETYPE.SOLID_OPEN; + break; + case 70: + this.$ = yy.LINETYPE.DOTTED_OPEN; + break; + case 71: + this.$ = yy.LINETYPE.SOLID; + break; + case 72: + this.$ = yy.LINETYPE.DOTTED; + break; + case 73: + this.$ = yy.LINETYPE.SOLID_CROSS; + break; + case 74: + this.$ = yy.LINETYPE.DOTTED_CROSS; + break; + case 75: + this.$ = yy.LINETYPE.SOLID_POINT; + break; + case 76: + this.$ = yy.LINETYPE.DOTTED_POINT; + break; + case 77: + this.$ = yy.parseMessage($$[$0].trim().substring(1)); + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 13, 14, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o($Vx, [2, 5]), { 9: 47, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o($Vx, [2, 7]), o($Vx, [2, 8]), o($Vx, [2, 14]), { 12: 48, 50: $Vo, 52: $Vp, 53: $Vq }, { 15: [1, 49] }, { 5: [1, 50] }, { 5: [1, 53], 19: [1, 51], 20: [1, 52] }, { 22: 54, 70: $Vw }, { 22: 55, 70: $Vw }, { 5: [1, 56] }, { 5: [1, 57] }, { 5: [1, 58] }, { 5: [1, 59] }, { 5: [1, 60] }, o($Vx, [2, 29]), o($Vx, [2, 30]), { 32: [1, 61] }, { 34: [1, 62] }, o($Vx, [2, 33]), { 15: [1, 63] }, { 15: [1, 64] }, { 15: [1, 65] }, { 15: [1, 66] }, { 15: [1, 67] }, { 15: [1, 68] }, { 15: [1, 69] }, { 15: [1, 70] }, { 22: 71, 70: $Vw }, { 22: 72, 70: $Vw }, { 22: 73, 70: $Vw }, { 67: 74, 71: [1, 75], 72: [1, 76], 73: [1, 77], 74: [1, 78], 75: [1, 79], 76: [1, 80], 77: [1, 81], 78: [1, 82] }, { 55: 83, 57: [1, 84], 65: [1, 85], 66: [1, 86] }, { 22: 87, 70: $Vw }, { 22: 88, 70: $Vw }, { 22: 89, 70: $Vw }, { 22: 90, 70: $Vw }, o([5, 51, 64, 71, 72, 73, 74, 75, 76, 77, 78, 79], [2, 68]), o($Vx, [2, 6]), o($Vx, [2, 15]), o($Vy, [2, 9], { 10: 91 }), o($Vx, [2, 17]), { 5: [1, 93], 19: [1, 92] }, { 5: [1, 94] }, o($Vx, [2, 21]), { 5: [1, 95] }, { 5: [1, 96] }, o($Vx, [2, 24]), o($Vx, [2, 25]), o($Vx, [2, 26]), o($Vx, [2, 27]), o($Vx, [2, 28]), o($Vx, [2, 31]), o($Vx, [2, 32]), o($Vz, $V3, { 7: 97 }), o($Vz, $V3, { 7: 98 }), o($Vz, $V3, { 7: 99 }), o($VA, $V3, { 40: 100, 7: 101 }), o($VB, $V3, { 42: 102, 7: 103 }), o($VB, $V3, { 7: 103, 42: 104 }), o($VC, $V3, { 45: 105, 7: 106 }), o($Vz, $V3, { 7: 107 }), { 5: [1, 109], 51: [1, 108] }, { 5: [1, 111], 51: [1, 110] }, { 5: [1, 112] }, { 22: 115, 68: [1, 113], 69: [1, 114], 70: $Vw }, o($VD, [2, 69]), o($VD, [2, 70]), o($VD, [2, 71]), o($VD, [2, 72]), o($VD, [2, 73]), o($VD, [2, 74]), o($VD, [2, 75]), o($VD, [2, 76]), { 22: 116, 70: $Vw }, { 22: 118, 58: 117, 70: $Vw }, { 70: [2, 63] }, { 70: [2, 64] }, { 56: 119, 79: $VE }, { 56: 121, 79: $VE }, { 56: 122, 79: $VE }, { 56: 123, 79: $VE }, { 4: [1, 126], 5: [1, 128], 11: 125, 12: 127, 16: [1, 124], 50: $Vo, 52: $Vp, 53: $Vq }, { 5: [1, 129] }, o($Vx, [2, 19]), o($Vx, [2, 20]), o($Vx, [2, 22]), o($Vx, [2, 23]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 130], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 131], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 132], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 133] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 46], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 49: [1, 134], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 135] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 44], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 48: [1, 136], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 137] }, { 16: [1, 138] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 42], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 47: [1, 139], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 140], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 15: [1, 141] }, o($Vx, [2, 49]), { 15: [1, 142] }, o($Vx, [2, 51]), o($Vx, [2, 52]), { 22: 143, 70: $Vw }, { 22: 144, 70: $Vw }, { 56: 145, 79: $VE }, { 56: 146, 79: $VE }, { 56: 147, 79: $VE }, { 64: [1, 148], 79: [2, 62] }, { 5: [2, 55] }, { 5: [2, 77] }, { 5: [2, 56] }, { 5: [2, 57] }, { 5: [2, 58] }, o($Vx, [2, 16]), o($Vy, [2, 10]), { 12: 149, 50: $Vo, 52: $Vp, 53: $Vq }, o($Vy, [2, 12]), o($Vy, [2, 13]), o($Vx, [2, 18]), o($Vx, [2, 34]), o($Vx, [2, 35]), o($Vx, [2, 36]), o($Vx, [2, 37]), { 15: [1, 150] }, o($Vx, [2, 38]), { 15: [1, 151] }, o($Vx, [2, 39]), o($Vx, [2, 40]), { 15: [1, 152] }, o($Vx, [2, 41]), { 5: [1, 153] }, { 5: [1, 154] }, { 56: 155, 79: $VE }, { 56: 156, 79: $VE }, { 5: [2, 67] }, { 5: [2, 53] }, { 5: [2, 54] }, { 22: 157, 70: $Vw }, o($Vy, [2, 11]), o($VA, $V3, { 7: 101, 40: 158 }), o($VB, $V3, { 7: 103, 42: 159 }), o($VC, $V3, { 7: 106, 45: 160 }), o($Vx, [2, 48]), o($Vx, [2, 50]), { 5: [2, 65] }, { 5: [2, 66] }, { 79: [2, 61] }, { 16: [2, 47] }, { 16: [2, 45] }, { 16: [2, 43] }], + defaultActions: { 5: [2, 1], 6: [2, 2], 85: [2, 63], 86: [2, 64], 119: [2, 55], 120: [2, 77], 121: [2, 56], 122: [2, 57], 123: [2, 58], 145: [2, 67], 146: [2, 53], 147: [2, 54], 155: [2, 65], 156: [2, 66], 157: [2, 61], 158: [2, 47], 159: [2, 45], 160: [2, 43] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state2, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state2 = stack[stack.length - 1]; + if (this.defaultActions[state2]) { + action = this.defaultActions[state2]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state2] && table[state2][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state2]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state2 + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 5; + case 1: + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + break; + case 6: + return 19; + case 7: + this.begin("LINE"); + return 14; + case 8: + this.begin("ID"); + return 50; + case 9: + this.begin("ID"); + return 52; + case 10: + return 13; + case 11: + this.begin("ID"); + return 53; + case 12: + yy_.yytext = yy_.yytext.trim(); + this.begin("ALIAS"); + return 70; + case 13: + this.popState(); + this.popState(); + this.begin("LINE"); + return 51; + case 14: + this.popState(); + this.popState(); + return 5; + case 15: + this.begin("LINE"); + return 36; + case 16: + this.begin("LINE"); + return 37; + case 17: + this.begin("LINE"); + return 38; + case 18: + this.begin("LINE"); + return 39; + case 19: + this.begin("LINE"); + return 49; + case 20: + this.begin("LINE"); + return 41; + case 21: + this.begin("LINE"); + return 43; + case 22: + this.begin("LINE"); + return 48; + case 23: + this.begin("LINE"); + return 44; + case 24: + this.begin("LINE"); + return 47; + case 25: + this.begin("LINE"); + return 46; + case 26: + this.popState(); + return 15; + case 27: + return 16; + case 28: + return 65; + case 29: + return 66; + case 30: + return 59; + case 31: + return 60; + case 32: + return 61; + case 33: + return 62; + case 34: + return 57; + case 35: + return 54; + case 36: + this.begin("ID"); + return 21; + case 37: + this.begin("ID"); + return 23; + case 38: + return 29; + case 39: + return 30; + case 40: + this.begin("acc_title"); + return 31; + case 41: + this.popState(); + return "acc_title_value"; + case 42: + this.begin("acc_descr"); + return 33; + case 43: + this.popState(); + return "acc_descr_value"; + case 44: + this.begin("acc_descr_multiline"); + break; + case 45: + this.popState(); + break; + case 46: + return "acc_descr_multiline_value"; + case 47: + return 6; + case 48: + return 18; + case 49: + return 20; + case 50: + return 64; + case 51: + return 5; + case 52: + yy_.yytext = yy_.yytext.trim(); + return 70; + case 53: + return 73; + case 54: + return 74; + case 55: + return 71; + case 56: + return 72; + case 57: + return 75; + case 58: + return 76; + case 59: + return 77; + case 60: + return 78; + case 61: + return 79; + case 62: + return 68; + case 63: + return 69; + case 64: + return 5; + case 65: + return "INVALID"; + } + }, + rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:create\b)/i, /^(?:destroy\b)/i, /^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:par_over\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:title:\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?::(?:(?:no)?wrap)?[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [45, 46], "inclusive": false }, "acc_descr": { "rules": [43], "inclusive": false }, "acc_title": { "rules": [41], "inclusive": false }, "ID": { "rules": [2, 3, 12], "inclusive": false }, "ALIAS": { "rules": [2, 3, 13, 14], "inclusive": false }, "LINE": { "rules": [2, 3, 26], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +class ImperativeState { + /** + * @param init - Function that creates the default state. + */ + constructor(init) { + this.init = init; + this.records = this.init(); + } + reset() { + this.records = this.init(); + } +} +const state = new ImperativeState(() => ({ + prevActor: void 0, + actors: {}, + createdActors: {}, + destroyedActors: {}, + boxes: [], + messages: [], + notes: [], + sequenceNumbersEnabled: false, + wrapEnabled: void 0, + currentBox: void 0, + lastCreated: void 0, + lastDestroyed: void 0 +})); +const addBox = function(data) { + state.records.boxes.push({ + name: data.text, + wrap: data.wrap === void 0 && autoWrap() || !!data.wrap, + fill: data.color, + actorKeys: [] + }); + state.records.currentBox = state.records.boxes.slice(-1)[0]; +}; +const addActor = function(id, name, description, type) { + let assignedBox = state.records.currentBox; + const old = state.records.actors[id]; + if (old) { + if (state.records.currentBox && old.box && state.records.currentBox !== old.box) { + throw new Error( + "A same participant should only be defined in one Box: " + old.name + " can't be in '" + old.box.name + "' and in '" + state.records.currentBox.name + "' at the same time." + ); + } + assignedBox = old.box ? old.box : state.records.currentBox; + old.box = assignedBox; + if (old && name === old.name && description == null) { + return; + } + } + if (description == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + if (type == null || description.text == null) { + description = { text: name, wrap: null, type }; + } + state.records.actors[id] = { + box: assignedBox, + name, + description: description.text, + wrap: description.wrap === void 0 && autoWrap() || !!description.wrap, + prevActor: state.records.prevActor, + links: {}, + properties: {}, + actorCnt: null, + rectData: null, + type: type || "participant" + }; + if (state.records.prevActor && state.records.actors[state.records.prevActor]) { + state.records.actors[state.records.prevActor].nextActor = id; + } + if (state.records.currentBox) { + state.records.currentBox.actorKeys.push(id); + } + state.records.prevActor = id; +}; +const activationCount = (part) => { + let i; + let count = 0; + for (i = 0; i < state.records.messages.length; i++) { + if (state.records.messages[i].type === LINETYPE.ACTIVE_START && state.records.messages[i].from.actor === part) { + count++; + } + if (state.records.messages[i].type === LINETYPE.ACTIVE_END && state.records.messages[i].from.actor === part) { + count--; + } + } + return count; +}; +const addMessage = function(idFrom, idTo, message, answer) { + state.records.messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + answer + }); +}; +const addSignal = function(idFrom, idTo, message = { text: void 0, wrap: void 0 }, messageType, activate = false) { + if (messageType === LINETYPE.ACTIVE_END) { + const cnt = activationCount(idFrom.actor); + if (cnt < 1) { + let error = new Error("Trying to inactivate an inactive participant (" + idFrom.actor + ")"); + error.hash = { + text: "->>-", + token: "->>-", + line: "1", + loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 }, + expected: ["'ACTIVE_PARTICIPANT'"] + }; + throw error; + } + } + state.records.messages.push({ + from: idFrom, + to: idTo, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: messageType, + activate + }); + return true; +}; +const hasAtLeastOneBox = function() { + return state.records.boxes.length > 0; +}; +const hasAtLeastOneBoxWithTitle = function() { + return state.records.boxes.some((b) => b.name); +}; +const getMessages = function() { + return state.records.messages; +}; +const getBoxes = function() { + return state.records.boxes; +}; +const getActors = function() { + return state.records.actors; +}; +const getCreatedActors = function() { + return state.records.createdActors; +}; +const getDestroyedActors = function() { + return state.records.destroyedActors; +}; +const getActor = function(id) { + return state.records.actors[id]; +}; +const getActorKeys = function() { + return Object.keys(state.records.actors); +}; +const enableSequenceNumbers = function() { + state.records.sequenceNumbersEnabled = true; +}; +const disableSequenceNumbers = function() { + state.records.sequenceNumbersEnabled = false; +}; +const showSequenceNumbers = () => state.records.sequenceNumbersEnabled; +const setWrap = function(wrapSetting) { + state.records.wrapEnabled = wrapSetting; +}; +const autoWrap = () => { + if (state.records.wrapEnabled !== void 0) { + return state.records.wrapEnabled; + } + return (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence.wrap; +}; +const clear = function() { + state.reset(); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const parseMessage = function(str) { + const _str = str.trim(); + const message = { + text: _str.replace(/^:?(?:no)?wrap:/, "").trim(), + wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0 + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("parseMessage:", message); + return message; +}; +const parseBoxData = function(str) { + const match = str.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/); + let color = match != null && match[1] ? match[1].trim() : "transparent"; + let title = match != null && match[2] ? match[2].trim() : void 0; + if (window && window.CSS) { + if (!window.CSS.supports("color", color)) { + color = "transparent"; + title = str.trim(); + } + } else { + const style = new Option().style; + style.color = color; + if (style.color !== color) { + color = "transparent"; + title = str.trim(); + } + } + return { + color, + text: title !== void 0 ? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(title.replace(/^:?(?:no)?wrap:/, ""), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : void 0, + wrap: title !== void 0 ? title.match(/^:?wrap:/) !== null ? true : title.match(/^:?nowrap:/) !== null ? false : void 0 : void 0 + }; +}; +const LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18, + PAR_START: 19, + PAR_AND: 20, + PAR_END: 21, + RECT_START: 22, + RECT_END: 23, + SOLID_POINT: 24, + DOTTED_POINT: 25, + AUTONUMBER: 26, + CRITICAL_START: 27, + CRITICAL_OPTION: 28, + CRITICAL_END: 29, + BREAK_START: 30, + BREAK_END: 31, + PAR_OVER_START: 32 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const addNote = function(actor, placement, message) { + const note = { + actor, + placement, + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap + }; + const actors = [].concat(actor, actor); + state.records.notes.push(note); + state.records.messages.push({ + from: actors[0], + to: actors[1], + message: message.text, + wrap: message.wrap === void 0 && autoWrap() || !!message.wrap, + type: LINETYPE.NOTE, + placement + }); +}; +const addLinks = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + const links = JSON.parse(sanitizedText); + insertLinks(actor, links); + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); + } +}; +const addALink = function(actorId, text) { + const actor = getActor(actorId); + try { + const links = {}; + let sanitizedText = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + var sep = sanitizedText.indexOf("@"); + sanitizedText = sanitizedText.replace(/&/g, "&"); + sanitizedText = sanitizedText.replace(/=/g, "="); + var label = sanitizedText.slice(0, sep - 1).trim(); + var link = sanitizedText.slice(sep + 1).trim(); + links[label] = link; + insertLinks(actor, links); + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e); + } +}; +function insertLinks(actor, links) { + if (actor.links == null) { + actor.links = links; + } else { + for (let key in links) { + actor.links[key] = links[key]; + } + } +} +const addProperties = function(actorId, text) { + const actor = getActor(actorId); + try { + let sanitizedText = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + const properties = JSON.parse(sanitizedText); + insertProperties(actor, properties); + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor properties text", e); + } +}; +function insertProperties(actor, properties) { + if (actor.properties == null) { + actor.properties = properties; + } else { + for (let key in properties) { + actor.properties[key] = properties[key]; + } + } +} +function boxEnd() { + state.records.currentBox = void 0; +} +const addDetails = function(actorId, text) { + const actor = getActor(actorId); + const elem = document.getElementById(text.text); + try { + const text2 = elem.innerHTML; + const details = JSON.parse(text2); + if (details["properties"]) { + insertProperties(actor, details["properties"]); + } + if (details["links"]) { + insertLinks(actor, details["links"]); + } + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor details text", e); + } +}; +const getActorProperty = function(actor, key) { + if (actor !== void 0 && actor.properties !== void 0) { + return actor.properties[key]; + } + return void 0; +}; +const apply = function(param) { + if (Array.isArray(param)) { + param.forEach(function(item) { + apply(item); + }); + } else { + switch (param.type) { + case "sequenceIndex": + state.records.messages.push({ + from: void 0, + to: void 0, + message: { + start: param.sequenceIndex, + step: param.sequenceIndexStep, + visible: param.sequenceVisible + }, + wrap: false, + type: param.signalType + }); + break; + case "addParticipant": + addActor(param.actor, param.actor, param.description, param.draw); + break; + case "createParticipant": + if (state.records.actors[param.actor]) { + throw new Error( + "It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior" + ); + } + state.records.lastCreated = param.actor; + addActor(param.actor, param.actor, param.description, param.draw); + state.records.createdActors[param.actor] = state.records.messages.length; + break; + case "destroyParticipant": + state.records.lastDestroyed = param.actor; + state.records.destroyedActors[param.actor] = state.records.messages.length; + break; + case "activeStart": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "activeEnd": + addSignal(param.actor, void 0, void 0, param.signalType); + break; + case "addNote": + addNote(param.actor, param.placement, param.text); + break; + case "addLinks": + addLinks(param.actor, param.text); + break; + case "addALink": + addALink(param.actor, param.text); + break; + case "addProperties": + addProperties(param.actor, param.text); + break; + case "addDetails": + addDetails(param.actor, param.text); + break; + case "addMessage": + if (state.records.lastCreated) { + if (param.to !== state.records.lastCreated) { + throw new Error( + "The created participant " + state.records.lastCreated + " does not have an associated creating message after its declaration. Please check the sequence diagram." + ); + } else { + state.records.lastCreated = void 0; + } + } else if (state.records.lastDestroyed) { + if (param.to !== state.records.lastDestroyed && param.from !== state.records.lastDestroyed) { + throw new Error( + "The destroyed participant " + state.records.lastDestroyed + " does not have an associated destroying message after its declaration. Please check the sequence diagram." + ); + } else { + state.records.lastDestroyed = void 0; + } + } + addSignal(param.from, param.to, param.msg, param.signalType, param.activate); + break; + case "boxStart": + addBox(param.boxData); + break; + case "boxEnd": + boxEnd(); + break; + case "loopStart": + addSignal(void 0, void 0, param.loopText, param.signalType); + break; + case "loopEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "rectStart": + addSignal(void 0, void 0, param.color, param.signalType); + break; + case "rectEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "optStart": + addSignal(void 0, void 0, param.optText, param.signalType); + break; + case "optEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "altStart": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "else": + addSignal(void 0, void 0, param.altText, param.signalType); + break; + case "altEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "setAccTitle": + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.s)(param.text); + break; + case "parStart": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "and": + addSignal(void 0, void 0, param.parText, param.signalType); + break; + case "parEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "criticalStart": + addSignal(void 0, void 0, param.criticalText, param.signalType); + break; + case "option": + addSignal(void 0, void 0, param.optionText, param.signalType); + break; + case "criticalEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + case "breakStart": + addSignal(void 0, void 0, param.breakText, param.signalType); + break; + case "breakEnd": + addSignal(void 0, void 0, void 0, param.signalType); + break; + } + } +}; +const db = { + addActor, + addMessage, + addSignal, + addLinks, + addDetails, + addProperties, + autoWrap, + setWrap, + enableSequenceNumbers, + disableSequenceNumbers, + showSequenceNumbers, + getMessages, + getActors, + getCreatedActors, + getDestroyedActors, + getActor, + getActorKeys, + getActorProperty, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.g, + getBoxes, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.r, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.q, + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence, + clear, + parseMessage, + parseBoxData, + LINETYPE, + ARROWTYPE, + PLACEMENT, + addNote, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.s, + apply, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.a, + hasAtLeastOneBox, + hasAtLeastOneBoxWithTitle +}; +const getStyles = (options) => `.actor { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + + text.actor > tspan { + fill: ${options.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${options.actorLineColor}; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${options.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${options.signalColor}; + } + + #arrowhead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .sequenceNumber { + fill: ${options.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${options.signalColor}; + } + + #crosshead path { + fill: ${options.signalColor}; + stroke: ${options.signalColor}; + } + + .messageText { + fill: ${options.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${options.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${options.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${options.labelBoxBorderColor}; + fill: ${options.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${options.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation1 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .activation2 { + fill: ${options.activationBkgColor}; + stroke: ${options.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${options.actorBkg}; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); +} + .actor-man line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + } + .actor-man circle, line { + stroke: ${options.actorBorder}; + fill: ${options.actorBkg}; + stroke-width: 2px; + } +`; +const styles = getStyles; +const ACTOR_TYPE_WIDTH = 18 * 2; +const TOP_ACTOR_CLASS = "actor-top"; +const BOTTOM_ACTOR_CLASS = "actor-bottom"; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const drawPopup = function(elem, actor, minMenuWidth, textAttrs, forceMenus) { + if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) { + return { height: 0, width: 0 }; + } + const links = actor.links; + const actorCnt2 = actor.actorCnt; + const rectData = actor.rectData; + var displayValue = "none"; + if (forceMenus) { + displayValue = "block !important"; + } + const g = elem.append("g"); + g.attr("id", "actor" + actorCnt2 + "_popup"); + g.attr("class", "actorPopupMenu"); + g.attr("display", displayValue); + var actorClass = ""; + if (rectData.class !== void 0) { + actorClass = " " + rectData.class; + } + let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth; + const rectElem = g.append("rect"); + rectElem.attr("class", "actorPopupMenuPanel" + actorClass); + rectElem.attr("x", rectData.x); + rectElem.attr("y", rectData.height); + rectElem.attr("fill", rectData.fill); + rectElem.attr("stroke", rectData.stroke); + rectElem.attr("width", menuWidth); + rectElem.attr("height", rectData.height); + rectElem.attr("rx", rectData.rx); + rectElem.attr("ry", rectData.ry); + if (links != null) { + var linkY = 20; + for (let key in links) { + var linkElem = g.append("a"); + var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm)(links[key]); + linkElem.attr("xlink:href", sanitizedLink); + linkElem.attr("target", "_blank"); + _drawMenuItemTextCandidateFunc(textAttrs)( + key, + linkElem, + rectData.x + 10, + rectData.height + linkY, + menuWidth, + 20, + { class: "actor" }, + textAttrs + ); + linkY += 30; + } + } + rectElem.attr("height", linkY); + return { height: rectData.height + linkY, width: menuWidth }; +}; +const popupMenuToggle = function(popid) { + return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"; +}; +const drawText = function(elem, textData) { + let prevTextHeight = 0; + let textHeight = 0; + const lines = textData.text.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + const [_textFontSize, _textFontSizePx] = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.C)(textData.fontSize); + let textElems = []; + let dy = 0; + let yfunc = () => textData.y; + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + switch (textData.valign) { + case "top": + case "start": + yfunc = () => Math.round(textData.y + textData.textMargin); + break; + case "middle": + case "center": + yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2); + break; + case "bottom": + case "end": + yfunc = () => Math.round( + textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin + ); + break; + } + } + if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) { + switch (textData.anchor) { + case "left": + case "start": + textData.x = Math.round(textData.x + textData.textMargin); + textData.anchor = "start"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "middle": + case "center": + textData.x = Math.round(textData.x + textData.width / 2); + textData.anchor = "middle"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + case "right": + case "end": + textData.x = Math.round(textData.x + textData.width - textData.textMargin); + textData.anchor = "end"; + textData.dominantBaseline = "middle"; + textData.alignmentBaseline = "middle"; + break; + } + } + for (let [i, line] of lines.entries()) { + if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) { + dy = i * _textFontSize; + } + const textElem = elem.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", yfunc()); + if (textData.anchor !== void 0) { + textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline); + } + if (textData.fontFamily !== void 0) { + textElem.style("font-family", textData.fontFamily); + } + if (_textFontSizePx !== void 0) { + textElem.style("font-size", _textFontSizePx); + } + if (textData.fontWeight !== void 0) { + textElem.style("font-weight", textData.fontWeight); + } + if (textData.fill !== void 0) { + textElem.attr("fill", textData.fill); + } + if (textData.class !== void 0) { + textElem.attr("class", textData.class); + } + if (textData.dy !== void 0) { + textElem.attr("dy", textData.dy); + } else if (dy !== 0) { + textElem.attr("dy", dy); + } + const text = line || _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.Z; + if (textData.tspan) { + const span = textElem.append("tspan"); + span.attr("x", textData.x); + if (textData.fill !== void 0) { + span.attr("fill", textData.fill); + } + span.text(text); + } else { + textElem.text(text); + } + if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) { + textHeight += (textElem._groups || textElem)[0][0].getBBox().height; + prevTextHeight = textHeight; + } + textElems.push(textElem); + } + return textElems; +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.height / 2; + drawText(elem, txtObject); + return polygon; +}; +let actorCnt = -1; +const fixLifeLineHeights = (diagram2, actors, actorKeys, conf2) => { + if (!diagram2.select) { + return; + } + actorKeys.forEach((actorKey) => { + const actor = actors[actorKey]; + const actorDOM = diagram2.select("#actor" + actor.actorCnt); + if (!conf2.mirrorActors && actor.stopy) { + actorDOM.attr("y2", actor.stopy + actor.height / 2); + } else if (conf2.mirrorActors) { + actorDOM.attr("y2", actor.stopy); + } + }); +}; +const drawActorTypeParticipant = function(elem, actor, conf2, isFooter) { + const actorY = isFooter ? actor.stopy : actor.starty; + const center = actor.x + actor.width / 2; + const centerY = actorY + 5; + const boxpluslineGroup = elem.append("g").lower(); + var g = boxpluslineGroup; + if (!isFooter) { + actorCnt++; + if (Object.keys(actor.links || {}).length && !conf2.forceMenus) { + g.attr("onclick", popupMenuToggle(`actor${actorCnt}_popup`)).attr("cursor", "pointer"); + } + g.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); + g = boxpluslineGroup.append("g"); + actor.actorCnt = actorCnt; + if (actor.links != null) { + g.attr("id", "root-" + actorCnt); + } + } + const rect = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + var cssclass = "actor"; + if (actor.properties != null && actor.properties["class"]) { + cssclass = actor.properties["class"]; + } else { + rect.fill = "#eaeaea"; + } + if (isFooter) { + cssclass += ` ${BOTTOM_ACTOR_CLASS}`; + } else { + cssclass += ` ${TOP_ACTOR_CLASS}`; + } + rect.x = actor.x; + rect.y = actorY; + rect.width = actor.width; + rect.height = actor.height; + rect.class = cssclass; + rect.rx = 3; + rect.ry = 3; + const rectElem = drawRect(g, rect); + actor.rectData = rect; + if (actor.properties != null && actor.properties["icon"]) { + const iconSrc = actor.properties["icon"].trim(); + if (iconSrc.charAt(0) === "@") { + (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.b)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1)); + } else { + (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.c)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc); + } + } + _drawTextCandidateFunc(conf2)( + actor.description, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + let height = actor.height; + if (rectElem.node) { + const bounds2 = rectElem.node().getBBox(); + actor.height = bounds2.height; + height = bounds2.height; + } + return height; +}; +const drawActorTypeActor = function(elem, actor, conf2, isFooter) { + const actorY = isFooter ? actor.stopy : actor.starty; + const center = actor.x + actor.width / 2; + const centerY = actorY + 80; + elem.lower(); + if (!isFooter) { + actorCnt++; + elem.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999"); + actor.actorCnt = actorCnt; + } + const actElem = elem.append("g"); + let cssClass = "actor-man"; + if (isFooter) { + cssClass += ` ${BOTTOM_ACTOR_CLASS}`; + } else { + cssClass += ` ${TOP_ACTOR_CLASS}`; + } + actElem.attr("class", cssClass); + const rect = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = actor.x; + rect.y = actorY; + rect.fill = "#eaeaea"; + rect.width = actor.width; + rect.height = actor.height; + rect.class = "actor"; + rect.rx = 3; + rect.ry = 3; + actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center).attr("y1", actorY + 25).attr("x2", center).attr("y2", actorY + 45); + actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 33).attr("x2", center + ACTOR_TYPE_WIDTH / 2).attr("y2", actorY + 33); + actElem.append("line").attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 60).attr("x2", center).attr("y2", actorY + 45); + actElem.append("line").attr("x1", center).attr("y1", actorY + 45).attr("x2", center + ACTOR_TYPE_WIDTH / 2 - 2).attr("y2", actorY + 60); + const circle = actElem.append("circle"); + circle.attr("cx", actor.x + actor.width / 2); + circle.attr("cy", actorY + 10); + circle.attr("r", 15); + circle.attr("width", actor.width); + circle.attr("height", actor.height); + const bounds2 = actElem.node().getBBox(); + actor.height = bounds2.height; + _drawTextCandidateFunc(conf2)( + actor.description, + actElem, + rect.x, + rect.y + 35, + rect.width, + rect.height, + { class: "actor" }, + conf2 + ); + return actor.height; +}; +const drawActor = function(elem, actor, conf2, isFooter) { + switch (actor.type) { + case "actor": + return drawActorTypeActor(elem, actor, conf2, isFooter); + case "participant": + return drawActorTypeParticipant(elem, actor, conf2, isFooter); + } +}; +const drawBox = function(elem, box, conf2) { + const boxplustextGroup = elem.append("g"); + const g = boxplustextGroup; + drawBackgroundRect(g, box); + if (box.name) { + _drawTextCandidateFunc(conf2)( + box.name, + g, + box.x, + box.y + (box.textMaxHeight || 0) / 2, + box.width, + 0, + { class: "text" }, + conf2 + ); + } + g.lower(); +}; +const anchorElement = function(elem) { + return elem.append("g"); +}; +const drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) { + const rect = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + const g = bounds2.anchored; + rect.x = bounds2.startx; + rect.y = bounds2.starty; + rect.class = "activation" + actorActivations2 % 3; + rect.width = bounds2.stopx - bounds2.startx; + rect.height = verticalPos - bounds2.starty; + drawRect(g, rect); +}; +const drawLoop = function(elem, loopModel, labelText, conf2) { + const { + boxMargin, + boxTextMargin, + labelBoxHeight, + labelBoxWidth, + messageFontFamily: fontFamily, + messageFontSize: fontSize, + messageFontWeight: fontWeight + } = conf2; + const g = elem.append("g"); + const drawLoopLine = function(startx, starty, stopx, stopy) { + return g.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine"); + }; + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty); + drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy); + drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy); + if (loopModel.sections !== void 0) { + loopModel.sections.forEach(function(item) { + drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style( + "stroke-dasharray", + "3, 3" + ); + }); + } + let txt = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + txt.text = labelText; + txt.x = loopModel.startx; + txt.y = loopModel.starty; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.width = labelBoxWidth || 50; + txt.height = labelBoxHeight || 20; + txt.textMargin = boxTextMargin; + txt.class = "labelText"; + drawLabel(g, txt); + txt = getTextObj(); + txt.text = loopModel.title; + txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.starty + boxMargin + boxTextMargin; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.textMargin = boxTextMargin; + txt.class = "loopText"; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = true; + let textElem = drawText(g, txt); + if (loopModel.sectionTitles !== void 0) { + loopModel.sectionTitles.forEach(function(item, idx) { + if (item.message) { + txt.text = item.message; + txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; + txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin; + txt.class = "loopText"; + txt.anchor = "middle"; + txt.valign = "middle"; + txt.tspan = false; + txt.fontFamily = fontFamily; + txt.fontSize = fontSize; + txt.fontWeight = fontWeight; + txt.wrap = loopModel.wrap; + textElem = drawText(g, txt); + let sectionHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); + } + }); + } + loopModel.height = Math.round(loopModel.stopy - loopModel.starty); + return g; +}; +const drawBackgroundRect = function(elem, bounds2) { + (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); +}; +const insertDatabaseIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" + ); +}; +const insertComputerIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" + ); +}; +const insertClockIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" + ); +}; +const insertArrowHead = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 7.9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); +}; +const insertArrowFilledHead = function(elem) { + elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 15.5).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const insertSequenceNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 4.5); + marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7"); +}; +const getTextObj = function() { + return { + x: 0, + y: 0, + fill: void 0, + anchor: void 0, + style: "#666", + width: void 0, + height: void 0, + textMargin: 0, + rx: 0, + ry: 0, + tspan: true, + valign: void 0 + }; +}; +const getNoteRect = function() { + return { + x: 0, + y: 0, + fill: "#EDF2AE", + stroke: "#666", + width: 100, + anchor: "start", + height: 100, + rx: 0, + ry: 0 + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const [_actorFontSize, _actorFontSizePx] = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.C)(actorFontSize); + const lines = content.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const _drawMenuItemTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { actorFontSize, actorFontFamily, actorFontWeight } = conf2; + const lines = content.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); + text.append("tspan").attr("x", x).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawText, + drawLabel, + drawActor, + drawBox, + drawPopup, + anchorElement, + drawActivation, + drawLoop, + drawBackgroundRect, + insertArrowHead, + insertArrowFilledHead, + insertSequenceNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon, + getTextObj, + getNoteRect, + fixLifeLineHeights, + sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm +}; +let conf = {}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + activations: [], + models: { + getHeight: function() { + return Math.max.apply( + null, + this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) + ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)); + }, + clear: function() { + this.actors = []; + this.boxes = []; + this.loops = []; + this.messages = []; + this.notes = []; + }, + addBox: function(boxModel) { + this.boxes.push(boxModel); + }, + addActor: function(actorModel) { + this.actors.push(actorModel); + }, + addLoop: function(loopModel) { + this.loops.push(loopModel); + }, + addMessage: function(msgModel) { + this.messages.push(msgModel); + }, + addNote: function(noteModel) { + this.notes.push(noteModel); + }, + lastActor: function() { + return this.actors[this.actors.length - 1]; + }, + lastLoop: function() { + return this.loops[this.loops.length - 1]; + }, + lastMessage: function() { + return this.messages[this.messages.length - 1]; + }, + lastNote: function() { + return this.notes[this.notes.length - 1]; + }, + actors: [], + boxes: [], + loops: [], + messages: [], + notes: [] + }, + init: function() { + this.sequenceItems = []; + this.activations = []; + this.models.clear(); + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + setConf((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + }, + updateVal: function(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function(startx, starty, stopx, stopy) { + const _self = this; + let cnt = 0; + function updateFn(type) { + return function updateItemBounds(item) { + cnt++; + const n = _self.sequenceItems.length - cnt + 1; + _self.updateVal(item, "starty", starty - n * conf.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + this.activations.forEach(updateFn("activation")); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(startx, stopx); + const _stopx = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(startx, stopx); + const _starty = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(starty, stopy); + const _stopy = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(starty, stopy); + this.updateVal(bounds.data, "startx", _startx, Math.min); + this.updateVal(bounds.data, "starty", _starty, Math.min); + this.updateVal(bounds.data, "stopx", _stopx, Math.max); + this.updateVal(bounds.data, "stopy", _stopy, Math.max); + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + newActivation: function(message, diagram2, actors) { + const actorRect = actors[message.from.actor]; + const stackedSize = actorActivations(message.from.actor).length || 0; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + this.activations.push({ + startx: x, + starty: this.verticalPos + 2, + stopx: x + conf.activationWidth, + stopy: void 0, + actor: message.from.actor, + anchored: svgDraw.anchorElement(diagram2) + }); + }, + endActivation: function(message) { + const lastActorActivationIdx = this.activations.map(function(activation) { + return activation.actor; + }).lastIndexOf(message.from.actor); + return this.activations.splice(lastActorActivationIdx, 1)[0]; + }, + createLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + return { + startx: void 0, + starty: this.verticalPos, + stopx: void 0, + stopy: void 0, + title: title.message, + wrap: title.wrap, + width: title.width, + height: 0, + fill + }; + }, + newLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) { + this.sequenceItems.push(this.createLoop(title, fill)); + }, + endLoop: function() { + return this.sequenceItems.pop(); + }, + isLoopOverlap: function() { + return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false; + }, + addSectionToLoop: function(message) { + const loop = this.sequenceItems.pop(); + loop.sections = loop.sections || []; + loop.sectionTitles = loop.sectionTitles || []; + loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); + loop.sectionTitles.push(message); + this.sequenceItems.push(loop); + }, + saveVerticalPos: function() { + if (this.isLoopOverlap()) { + this.savedVerticalPos = this.verticalPos; + } + }, + resetVerticalPos: function() { + if (this.isLoopOverlap()) { + this.verticalPos = this.savedVerticalPos; + } + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(this.data.stopy, this.verticalPos); + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return { bounds: this.data, models: this.models }; + } +}; +const drawNote = function(elem, noteModel) { + bounds.bumpVerticalPos(conf.boxMargin); + noteModel.height = conf.boxMargin; + noteModel.starty = bounds.getVerticalPos(); + const rect = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = noteModel.startx; + rect.y = noteModel.starty; + rect.width = noteModel.width || conf.width; + rect.class = "note"; + const g = elem.append("g"); + const rectElem = svgDraw.drawRect(g, rect); + const textObj = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + textObj.x = noteModel.startx; + textObj.y = noteModel.starty; + textObj.width = rect.width; + textObj.dy = "1em"; + textObj.text = noteModel.message; + textObj.class = "noteText"; + textObj.fontFamily = conf.noteFontFamily; + textObj.fontSize = conf.noteFontSize; + textObj.fontWeight = conf.noteFontWeight; + textObj.anchor = conf.noteAlign; + textObj.textMargin = conf.noteMargin; + textObj.valign = "center"; + const textElem = drawText(g, textObj); + const textHeight = Math.round( + textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr) + ); + rectElem.attr("height", textHeight + 2 * conf.noteMargin); + noteModel.height += textHeight + 2 * conf.noteMargin; + bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); + noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; + noteModel.stopx = noteModel.startx + rect.width; + bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); + bounds.models.addNote(noteModel); +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +const noteFont = (cnf) => { + return { + fontFamily: cnf.noteFontFamily, + fontSize: cnf.noteFontSize, + fontWeight: cnf.noteFontWeight + }; +}; +const actorFont = (cnf) => { + return { + fontFamily: cnf.actorFontFamily, + fontSize: cnf.actorFontSize, + fontWeight: cnf.actorFontWeight + }; +}; +function boundMessage(_diagram, msgModel) { + bounds.bumpVerticalPos(10); + const { startx, stopx, message } = msgModel; + const lines = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.splitBreaks(message).length; + const textDims = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); + const lineHeight = textDims.height / lines; + msgModel.height += lineHeight; + bounds.bumpVerticalPos(lineHeight); + let lineStartY; + let totalOffset = textDims.height - 10; + const textWidth = textDims.width; + if (startx === stopx) { + lineStartY = bounds.getVerticalPos() + totalOffset; + if (!conf.rightAngles) { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + } + totalOffset += 30; + const dx = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textWidth / 2, conf.width / 2); + bounds.insert( + startx - dx, + bounds.getVerticalPos() - 10 + totalOffset, + stopx + dx, + bounds.getVerticalPos() + 30 + totalOffset + ); + } else { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + bounds.insert(startx, lineStartY - 10, stopx, lineStartY); + } + bounds.bumpVerticalPos(totalOffset); + msgModel.height += totalOffset; + msgModel.stopy = msgModel.starty + msgModel.height; + bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); + return lineStartY; +} +const drawMessage = function(diagram2, msgModel, lineStartY, diagObj) { + const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; + const textDims = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf)); + const textObj = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.e)(); + textObj.x = startx; + textObj.y = starty + 10; + textObj.width = stopx - startx; + textObj.class = "messageText"; + textObj.dy = "1em"; + textObj.text = message; + textObj.fontFamily = conf.messageFontFamily; + textObj.fontSize = conf.messageFontSize; + textObj.fontWeight = conf.messageFontWeight; + textObj.anchor = conf.messageAlign; + textObj.valign = "center"; + textObj.textMargin = conf.wrapPadding; + textObj.tspan = false; + drawText(diagram2, textObj); + const textWidth = textDims.width; + let line; + if (startx === stopx) { + if (conf.rightAngles) { + line = diagram2.append("path").attr( + "d", + `M ${startx},${lineStartY} H ${startx + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}` + ); + } else { + line = diagram2.append("path").attr( + "d", + "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20) + ); + } + } else { + line = diagram2.append("line"); + line.attr("x1", startx); + line.attr("y1", lineStartY); + line.attr("x2", stopx); + line.attr("y2", lineStartY); + } + if (type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN) { + line.style("stroke-dasharray", "3, 3"); + line.attr("class", "messageLine1"); + } else { + line.attr("class", "messageLine0"); + } + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + line.attr("stroke-width", 2); + line.attr("stroke", "none"); + line.style("fill", "none"); + if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { + line.attr("marker-end", "url(" + url + "#filled-head)"); + } + if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { + line.attr("marker-end", "url(" + url + "#crosshead)"); + } + if (sequenceVisible || conf.showSequenceNumbers) { + line.attr("marker-start", "url(" + url + "#sequencenumber)"); + diagram2.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex); + } +}; +const addActorRenderingData = function(diagram2, actors, createdActors, actorKeys, verticalPos, messages, isFooter) { + let prevWidth = 0; + let prevMargin = 0; + let prevBox = void 0; + let maxHeight = 0; + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + const box = actor.box; + if (prevBox && prevBox != box) { + if (!isFooter) { + bounds.models.addBox(prevBox); + } + prevMargin += conf.boxMargin + prevBox.margin; + } + if (box && box != prevBox) { + if (!isFooter) { + box.x = prevWidth + prevMargin; + box.y = verticalPos; + } + prevMargin += box.margin; + } + actor.width = actor.width || conf.width; + actor.height = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actor.height || conf.height, conf.height); + actor.margin = actor.margin || conf.actorMargin; + maxHeight = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); + if (createdActors[actor.name]) { + prevMargin += actor.width / 2; + } + actor.x = prevWidth + prevMargin; + actor.starty = bounds.getVerticalPos(); + bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); + prevWidth += actor.width + prevMargin; + if (actor.box) { + actor.box.width = prevWidth + box.margin - actor.box.x; + } + prevMargin = actor.margin; + prevBox = actor.box; + bounds.models.addActor(actor); + } + if (prevBox && !isFooter) { + bounds.models.addBox(prevBox); + } + bounds.bumpVerticalPos(maxHeight); +}; +const drawActors = function(diagram2, actors, actorKeys, isFooter) { + if (!isFooter) { + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + svgDraw.drawActor(diagram2, actor, conf, false); + } + } else { + let maxHeight = 0; + bounds.bumpVerticalPos(conf.boxMargin * 2); + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + if (!actor.stopy) { + actor.stopy = bounds.getVerticalPos(); + } + const height = svgDraw.drawActor(diagram2, actor, conf, true); + maxHeight = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, height); + } + bounds.bumpVerticalPos(maxHeight + conf.boxMargin); + } +}; +const drawActorsPopup = function(diagram2, actors, actorKeys, doc) { + let maxHeight = 0; + let maxWidth = 0; + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + const minMenuWidth = getRequiredPopupWidth(actor); + const menuDimensions = svgDraw.drawPopup( + diagram2, + actor, + minMenuWidth, + conf, + conf.forceMenus, + doc + ); + if (menuDimensions.height > maxHeight) { + maxHeight = menuDimensions.height; + } + if (menuDimensions.width + actor.x > maxWidth) { + maxWidth = menuDimensions.width + actor.x; + } + } + return { maxHeight, maxWidth }; +}; +const setConf = function(cnf) { + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); + if (cnf.fontFamily) { + conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const actorActivations = function(actor) { + return bounds.activations.filter(function(activation) { + return activation.actor === actor; + }); +}; +const activationBounds = function(actor, actors) { + const actorObj = actors[actor]; + const activations = actorActivations(actor); + const left = activations.reduce(function(acc, activation) { + return _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(acc, activation.startx); + }, actorObj.x + actorObj.width / 2 - 1); + const right = activations.reduce(function(acc, activation) { + return _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(acc, activation.stopx); + }, actorObj.x + actorObj.width / 2 + 1); + return [left, right]; +}; +function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { + bounds.bumpVerticalPos(preMargin); + let heightAdjust = postMargin; + if (msg.id && msg.message && loopWidths[msg.id]) { + const loopWidth = loopWidths[msg.id].width; + const textConf = messageFont(conf); + msg.message = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); + msg.width = loopWidth; + msg.wrap = true; + const textDims = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, textConf); + const totalOffset = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textDims.height, conf.labelBoxHeight); + heightAdjust = postMargin + totalOffset; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`${totalOffset} - ${msg.message}`); + } + addLoopFn(msg); + bounds.bumpVerticalPos(heightAdjust); +} +function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors, createdActors, destroyedActors) { + function receiverAdjustment(actor, adjustment) { + if (actor.x < actors[msg.from].x) { + bounds.insert( + msgModel.stopx - adjustment, + msgModel.starty, + msgModel.startx, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.stopx = msgModel.stopx + adjustment; + } else { + bounds.insert( + msgModel.startx, + msgModel.starty, + msgModel.stopx + adjustment, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.stopx = msgModel.stopx - adjustment; + } + } + function senderAdjustment(actor, adjustment) { + if (actor.x < actors[msg.to].x) { + bounds.insert( + msgModel.startx - adjustment, + msgModel.starty, + msgModel.stopx, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.startx = msgModel.startx + adjustment; + } else { + bounds.insert( + msgModel.stopx, + msgModel.starty, + msgModel.startx + adjustment, + msgModel.stopy + actor.height / 2 + conf.noteMargin + ); + msgModel.startx = msgModel.startx - adjustment; + } + } + if (createdActors[msg.to] == index) { + const actor = actors[msg.to]; + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; + receiverAdjustment(actor, adjustment); + actor.starty = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } else if (destroyedActors[msg.from] == index) { + const actor = actors[msg.from]; + if (conf.mirrorActors) { + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2; + senderAdjustment(actor, adjustment); + } + actor.stopy = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } else if (destroyedActors[msg.to] == index) { + const actor = actors[msg.to]; + if (conf.mirrorActors) { + const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; + receiverAdjustment(actor, adjustment); + } + actor.stopy = lineStartY - actor.height / 2; + bounds.bumpVerticalPos(actor.height / 2); + } +} +const draw = function(_text, id, _version, diagObj) { + const { securityLevel, sequence } = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + conf = sequence; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + bounds.init(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(diagObj.db); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + const actors = diagObj.db.getActors(); + const createdActors = diagObj.db.getCreatedActors(); + const destroyedActors = diagObj.db.getDestroyedActors(); + const boxes = diagObj.db.getBoxes(); + let actorKeys = diagObj.db.getActorKeys(); + const messages = diagObj.db.getMessages(); + const title = diagObj.db.getDiagramTitle(); + const hasBoxes = diagObj.db.hasAtLeastOneBox(); + const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); + const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors, messages, diagObj); + conf.height = calculateActorMargins(actors, maxMessageWidthPerActor, boxes); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + if (hasBoxTitles) { + bounds.bumpVerticalPos(boxes[0].textMaxHeight); + } + } + if (conf.hideUnusedParticipants === true) { + const newActors = /* @__PURE__ */ new Set(); + messages.forEach((message) => { + newActors.add(message.from); + newActors.add(message.to); + }); + actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); + } + addActorRenderingData(diagram2, actors, createdActors, actorKeys, 0, messages, false); + const loopWidths = calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + svgDraw.insertSequenceNumber(diagram2); + function activeEnd(msg, verticalPos) { + const activationData = bounds.endActivation(msg); + if (activationData.starty + 18 > verticalPos) { + activationData.starty = verticalPos - 6; + verticalPos += 12; + } + svgDraw.drawActivation( + diagram2, + activationData, + verticalPos, + conf, + actorActivations(msg.from.actor).length + ); + bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); + } + let sequenceIndex = 1; + let sequenceIndexStep = 1; + const messagesToDraw = []; + const backgrounds = []; + messages.forEach(function(msg, index) { + let loopModel, noteModel, msgModel; + switch (msg.type) { + case diagObj.db.LINETYPE.NOTE: + bounds.resetVerticalPos(); + noteModel = msg.noteModel; + drawNote(diagram2, noteModel); + break; + case diagObj.db.LINETYPE.ACTIVE_START: + bounds.newActivation(msg, diagram2, actors); + break; + case diagObj.db.LINETYPE.ACTIVE_END: + activeEnd(msg, bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.LOOP_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.LOOP_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "loop", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.RECT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin, + (message) => bounds.newLoop(void 0, message.message) + ); + break; + case diagObj.db.LINETYPE.RECT_END: + loopModel = bounds.endLoop(); + backgrounds.push(loopModel); + bounds.models.addLoop(loopModel); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.OPT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.OPT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "opt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.ALT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "alt", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + bounds.saveVerticalPos(); + break; + case diagObj.db.LINETYPE.PAR_AND: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.PAR_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "par", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.AUTONUMBER: + sequenceIndex = msg.message.start || sequenceIndex; + sequenceIndexStep = msg.message.step || sequenceIndexStep; + if (msg.message.visible) { + diagObj.db.enableSequenceNumbers(); + } else { + diagObj.db.disableSequenceNumbers(); + } + break; + case diagObj.db.LINETYPE.CRITICAL_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_OPTION: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "critical", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.BREAK_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.BREAK_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram2, loopModel, "break", conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + default: + try { + msgModel = msg.msgModel; + msgModel.starty = bounds.getVerticalPos(); + msgModel.sequenceIndex = sequenceIndex; + msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); + const lineStartY = boundMessage(diagram2, msgModel); + adjustCreatedDestroyedData( + msg, + msgModel, + lineStartY, + index, + actors, + createdActors, + destroyedActors + ); + messagesToDraw.push({ messageModel: msgModel, lineStartY }); + bounds.models.addMessage(msgModel); + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while drawing message", e); + } + } + if ([ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + sequenceIndex = sequenceIndex + sequenceIndexStep; + } + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("createdActors", createdActors); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("destroyedActors", destroyedActors); + drawActors(diagram2, actors, actorKeys, false); + messagesToDraw.forEach((e) => drawMessage(diagram2, e.messageModel, e.lineStartY, diagObj)); + if (conf.mirrorActors) { + drawActors(diagram2, actors, actorKeys, true); + } + backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram2, e)); + fixLifeLineHeights(diagram2, actors, actorKeys, conf); + bounds.models.boxes.forEach(function(box2) { + box2.height = bounds.getVerticalPos() - box2.y; + bounds.insert(box2.x, box2.y, box2.x + box2.width, box2.height); + box2.startx = box2.x; + box2.starty = box2.y; + box2.stopx = box2.startx + box2.width; + box2.stopy = box2.starty + box2.height; + box2.stroke = "rgb(0,0,0, 0.5)"; + svgDraw.drawBox(diagram2, box2, conf); + }); + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + } + const requiredBoxSize = drawActorsPopup(diagram2, actors, actorKeys, doc); + const { bounds: box } = bounds.getBounds(); + let boxHeight = box.stopy - box.starty; + if (boxHeight < requiredBoxSize.maxHeight) { + boxHeight = requiredBoxSize.maxHeight; + } + let height = boxHeight + 2 * conf.diagramMarginY; + if (conf.mirrorActors) { + height = height - conf.boxMargin + conf.bottomMarginAdj; + } + let boxWidth = box.stopx - box.startx; + if (boxWidth < requiredBoxSize.maxWidth) { + boxWidth = requiredBoxSize.maxWidth; + } + const width = boxWidth + 2 * conf.diagramMarginX; + if (title) { + diagram2.append("text").text(title).attr("x", (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr("y", -25); + } + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title ? 40 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, bounds.models); +}; +function getMaxMessageWidthPerActor(actors, messages, diagObj) { + const maxMessageWidthPerActor = {}; + messages.forEach(function(msg) { + if (actors[msg.to] && actors[msg.from]) { + const actor = actors[msg.to]; + if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { + return; + } + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { + return; + } + const isNote = msg.placement !== void 0; + const isMessage = !isNote; + const textFont = isNote ? noteFont(conf) : messageFont(conf); + const wrappedMessage = msg.wrap ? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message; + const messageDimensions = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(wrappedMessage, textFont); + const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; + if (isMessage && msg.from === actor.nextActor) { + maxMessageWidthPerActor[msg.to] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth + ); + } else if (isMessage && msg.from === actor.prevActor) { + maxMessageWidthPerActor[msg.from] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (isMessage && msg.from === msg.to) { + maxMessageWidthPerActor[msg.from] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + maxMessageWidthPerActor[msg.to] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth / 2 + ); + } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + maxMessageWidthPerActor[msg.from] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + maxMessageWidthPerActor[actor.prevActor] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { + if (actor.prevActor) { + maxMessageWidthPerActor[actor.prevActor] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth / 2 + ); + } + if (actor.nextActor) { + maxMessageWidthPerActor[msg.from] = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + } + } + } + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor); + return maxMessageWidthPerActor; +} +const getRequiredPopupWidth = function(actor) { + let requiredPopupWidth = 0; + const textFont = actorFont(conf); + for (const key in actor.links) { + const labelDimensions = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(key, textFont); + const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; + if (requiredPopupWidth < labelWidth) { + requiredPopupWidth = labelWidth; + } + } + return requiredPopupWidth; +}; +function calculateActorMargins(actors, actorToMessageWidth, boxes) { + let maxHeight = 0; + Object.keys(actors).forEach((prop) => { + const actor = actors[prop]; + if (actor.wrap) { + actor.description = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + actor.description, + conf.width - 2 * conf.wrapPadding, + actorFont(conf) + ); + } + const actDims = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(actor.description, actorFont(conf)); + actor.width = actor.wrap ? conf.width : _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actDims.width + 2 * conf.wrapPadding); + actor.height = actor.wrap ? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actDims.height, conf.height) : conf.height; + maxHeight = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height); + }); + for (const actorKey in actorToMessageWidth) { + const actor = actors[actorKey]; + if (!actor) { + continue; + } + const nextActor = actors[actor.nextActor]; + if (!nextActor) { + const messageWidth2 = actorToMessageWidth[actorKey]; + const actorWidth2 = messageWidth2 + conf.actorMargin - actor.width / 2; + actor.margin = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth2, conf.actorMargin); + continue; + } + const messageWidth = actorToMessageWidth[actorKey]; + const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; + actor.margin = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth, conf.actorMargin); + } + let maxBoxHeight = 0; + boxes.forEach((box) => { + const textFont = messageFont(conf); + let totalWidth = box.actorKeys.reduce((total, aKey) => { + return total += actors[aKey].width + (actors[aKey].margin || 0); + }, 0); + totalWidth -= 2 * conf.boxTextMargin; + if (box.wrap) { + box.name = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont); + } + const boxMsgDimensions = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(box.name, textFont); + maxBoxHeight = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boxMsgDimensions.height, maxBoxHeight); + const minWidth = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding); + box.margin = conf.boxTextMargin; + if (totalWidth < minWidth) { + const missing = (minWidth - totalWidth) / 2; + box.margin += missing; + } + }); + boxes.forEach((box) => box.textMaxHeight = maxBoxHeight); + return _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, conf.height); +} +const buildNoteModel = function(msg, actors, diagObj) { + const startx = actors[msg.from].x; + const stopx = actors[msg.to].x; + const shouldWrap = msg.wrap && msg.message; + let textDimensions = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( + shouldWrap ? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, + noteFont(conf) + ); + const noteModel = { + width: shouldWrap ? conf.width : _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin), + height: 0, + startx: actors[msg.from].x, + stopx: 0, + starty: 0, + stopy: 0, + message: msg.message + }; + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + noteModel.width = shouldWrap ? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width) : _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors[msg.from].width / 2 + actors[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors[msg.from].width + conf.actorMargin) / 2; + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + noteModel.width = shouldWrap ? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) : _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors[msg.from].width / 2 + actors[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx - noteModel.width + (actors[msg.from].width - conf.actorMargin) / 2; + } else if (msg.to === msg.from) { + textDimensions = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions( + shouldWrap ? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors[msg.from].width), + noteFont(conf) + ) : msg.message, + noteFont(conf) + ); + noteModel.width = shouldWrap ? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors[msg.from].width) : _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + actors[msg.from].width, + conf.width, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors[msg.from].width - noteModel.width) / 2; + } else { + noteModel.width = Math.abs(startx + actors[msg.from].width / 2 - (stopx + actors[msg.to].width / 2)) + conf.actorMargin; + noteModel.startx = startx < stopx ? startx + actors[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors[msg.to].width / 2 - conf.actorMargin / 2; + } + if (shouldWrap) { + noteModel.message = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + noteModel.width - 2 * conf.wrapPadding, + noteFont(conf) + ); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` + ); + return noteModel; +}; +const buildMessageModel = function(msg, actors, diagObj) { + if (![ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT + ].includes(msg.type)) { + return {}; + } + const [fromLeft, fromRight] = activationBounds(msg.from, actors); + const [toLeft, toRight] = activationBounds(msg.to, actors); + const isArrowToRight = fromLeft <= toLeft; + const startx = isArrowToRight ? fromRight : fromLeft; + let stopx = isArrowToRight ? toLeft : toRight; + const isArrowToActivation = Math.abs(toLeft - toRight) > 2; + const adjustValue = (value) => { + return isArrowToRight ? -value : value; + }; + if (msg.from === msg.to) { + stopx = startx; + } else { + if (msg.activate && !isArrowToActivation) { + stopx += adjustValue(conf.activationWidth / 2 - 1); + } + if (![diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN].includes(msg.type)) { + stopx += adjustValue(3); + } + } + const allBounds = [fromLeft, fromRight, toLeft, toRight]; + const boundedWidth = Math.abs(startx - stopx); + if (msg.wrap && msg.message) { + msg.message = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel( + msg.message, + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width), + messageFont(conf) + ); + } + const msgDims = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, messageFont(conf)); + return { + width: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, + boundedWidth + 2 * conf.wrapPadding, + conf.width + ), + height: 0, + startx, + stopx, + starty: 0, + stopy: 0, + message: msg.message, + type: msg.type, + wrap: msg.wrap, + fromBounds: Math.min.apply(null, allBounds), + toBounds: Math.max.apply(null, allBounds) + }; +}; +const calculateLoopBounds = function(messages, actors, _maxWidthPerActor, diagObj) { + const loops = {}; + const stack = []; + let current, noteModel, msgModel; + messages.forEach(function(msg) { + msg.id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.u.random({ length: 10 }); + switch (msg.type) { + case diagObj.db.LINETYPE.LOOP_START: + case diagObj.db.LINETYPE.ALT_START: + case diagObj.db.LINETYPE.OPT_START: + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + case diagObj.db.LINETYPE.CRITICAL_START: + case diagObj.db.LINETYPE.BREAK_START: + stack.push({ + id: msg.id, + msg: msg.message, + from: Number.MAX_SAFE_INTEGER, + to: Number.MIN_SAFE_INTEGER, + width: 0 + }); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + case diagObj.db.LINETYPE.PAR_AND: + case diagObj.db.LINETYPE.CRITICAL_OPTION: + if (msg.message) { + current = stack.pop(); + loops[current.id] = current; + loops[msg.id] = current; + stack.push(current); + } + break; + case diagObj.db.LINETYPE.LOOP_END: + case diagObj.db.LINETYPE.ALT_END: + case diagObj.db.LINETYPE.OPT_END: + case diagObj.db.LINETYPE.PAR_END: + case diagObj.db.LINETYPE.CRITICAL_END: + case diagObj.db.LINETYPE.BREAK_END: + current = stack.pop(); + loops[current.id] = current; + break; + case diagObj.db.LINETYPE.ACTIVE_START: + { + const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor]; + const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; + const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; + const toAdd = { + startx: x, + stopx: x + conf.activationWidth, + actor: msg.from.actor, + enabled: true + }; + bounds.activations.push(toAdd); + } + break; + case diagObj.db.LINETYPE.ACTIVE_END: + { + const lastActorActivationIdx = bounds.activations.map((a) => a.actor).lastIndexOf(msg.from.actor); + delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; + } + break; + } + const isNote = msg.placement !== void 0; + if (isNote) { + noteModel = buildNoteModel(msg, actors, diagObj); + msg.noteModel = noteModel; + stack.forEach((stk) => { + current = stk; + current.from = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(current.from, noteModel.startx); + current.to = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.to, noteModel.startx + noteModel.width); + current.width = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; + }); + } else { + msgModel = buildMessageModel(msg, actors, diagObj); + msg.msgModel = msgModel; + if (msgModel.startx && msgModel.stopx && stack.length > 0) { + stack.forEach((stk) => { + current = stk; + if (msgModel.startx === msgModel.stopx) { + const from = actors[msg.from]; + const to = actors[msg.to]; + current.from = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin( + from.x - msgModel.width / 2, + from.x - from.width / 2, + current.from + ); + current.to = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax( + to.x + msgModel.width / 2, + to.x + from.width / 2, + current.to + ); + current.width = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth; + } else { + current.from = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(msgModel.startx, current.from); + current.to = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(msgModel.stopx, current.to); + current.width = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, msgModel.width) - conf.labelBoxWidth; + } + }); + } + } + }); + bounds.activations = []; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Loop type widths:", loops); + return loops; +}; +const renderer = { + bounds, + drawActors, + drawActorsPopup, + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: ({ wrap }) => { + db.setWrap(wrap); + } +}; + + + +/***/ }), + +/***/ 66893: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ drawBackgroundRect), +/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), +/* harmony export */ c: () => (/* binding */ drawImage), +/* harmony export */ d: () => (/* binding */ drawRect), +/* harmony export */ e: () => (/* binding */ getTextObj), +/* harmony export */ f: () => (/* binding */ drawText), +/* harmony export */ g: () => (/* binding */ getNoteRect) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17967); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +const drawRect = (element, rectData) => { + const rectElement = element.append("rect"); + rectElement.attr("x", rectData.x); + rectElement.attr("y", rectData.y); + rectElement.attr("fill", rectData.fill); + rectElement.attr("stroke", rectData.stroke); + rectElement.attr("width", rectData.width); + rectElement.attr("height", rectData.height); + rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); + rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); + if (rectData.attrs !== void 0) { + for (const attrKey in rectData.attrs) { + rectElement.attr(attrKey, rectData.attrs[attrKey]); + } + } + rectData.class !== void 0 && rectElement.attr("class", rectData.class); + return rectElement; +}; +const drawBackgroundRect = (element, bounds) => { + const rectData = { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + stroke: bounds.stroke, + class: "rect" + }; + const rectElement = drawRect(element, rectData); + rectElement.lower(); +}; +const drawText = (element, textData) => { + const nText = textData.text.replace(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.G, " "); + const textElem = element.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + textData.class !== void 0 && textElem.attr("class", textData.class); + const tspan = textElem.append("tspan"); + tspan.attr("x", textData.x + textData.textMargin * 2); + tspan.text(nText); + return textElem; +}; +const drawImage = (elem, x, y, link) => { + const imageElement = elem.append("image"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = (element, x, y, link) => { + const imageElement = element.append("use"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", `#${sanitizedLink}`); +}; +const getNoteRect = () => { + const noteRectData = { + x: 0, + y: 0, + width: 100, + height: 100, + fill: "#EDF2AE", + stroke: "#666", + anchor: "start", + rx: 0, + ry: 0 + }; + return noteRectData; +}; +const getTextObj = () => { + const testObject = { + x: 0, + y: 0, + width: 100, + height: 100, + "text-anchor": "start", + style: "#666", + textMargin: 0, + rx: 0, + ry: 0, + tspan: true + }; + return testObject; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/47daf389.f427e7eb.js b/assets/js/47daf389.f427e7eb.js new file mode 100644 index 0000000000..cb24854195 --- /dev/null +++ b/assets/js/47daf389.f427e7eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8082],{90514:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>i});var n=r(85893),t=r(11151);const a={slug:"v8.4-release",title:"v8.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:14},c="eCalc",l={id:"changelog/v8-4",title:"v8.4",description:"New Features",source:"@site/docs/changelog/v8-4.md",sourceDirName:"changelog",slug:"/changelog/v8.4-release",permalink:"/ecalc/docs/changelog/v8.4-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-4.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:14,frontMatter:{slug:"v8.4-release",title:"v8.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:14},sidebar:"changelog",previous:{title:"v8.3",permalink:"/ecalc/docs/changelog/v8.3-release"},next:{title:"v8.5",permalink:"/ecalc/docs/changelog/v8.5-release"}},o={},i=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const s={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,n.jsx)(s.h2,{id:"new-features",children:"New Features"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Add ",(0,n.jsx)(s.code,{children:"requested inlet- and outlet compressor pressures"})," from input data to results. In cases where active pressure control mechanisms are active, requested inlet- and outlet pressures may differ from ",(0,n.jsx)(s.code,{children:"calculated pressures"}),". It is now possible to analyse both requested- and calculated pressures."]}),"\n",(0,n.jsxs)(s.li,{children:["Specify ",(0,n.jsx)(s.code,{children:"rate type"})," for majority of output ",(0,n.jsx)(s.code,{children:"rate"})," results as either ",(0,n.jsx)(s.code,{children:"stream day"})," or ",(0,n.jsx)(s.code,{children:"calendar day"}),"."]}),"\n",(0,n.jsx)(s.li,{children:"Improved error messages"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"fixes",children:"Fixes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.code,{children:"Actual rate"})," was incorrectly returned for ",(0,n.jsx)(s.code,{children:"compressor sampled"}),". Actual rate cannot be known for ",(0,n.jsx)(s.code,{children:"compressor sampled"})," since we need to know ",(0,n.jsx)(s.code,{children:"fluid properties"})," in order to do that. ",(0,n.jsx)(s.code,{children:"Actual rate"})," has therefore been removed from ",(0,n.jsx)(s.code,{children:"compressor sampled"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Handle bug in ",(0,n.jsx)(s.code,{children:"Variable Speed Compressor Train With Multiple Streams And Pressures"})," when no rate is entering a compressor stage wrt. recirculation."]}),"\n",(0,n.jsx)(s.li,{children:"Other minor fixes"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function u(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,s,r)=>{r.d(s,{Z:()=>l,a:()=>c});var n=r(67294);const t={},a=n.createContext(t);function c(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/496.499e45e0.js b/assets/js/496.499e45e0.js new file mode 100644 index 0000000000..a6121fcb0d --- /dev/null +++ b/assets/js/496.499e45e0.js @@ -0,0 +1,10814 @@ +"use strict"; +exports.id = 496; +exports.ids = [496]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 79496: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(27180); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28758); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + + +const idCache = {}; +const set = (key, val) => { + idCache[key] = val; +}; +const get = (k) => idCache[k]; +const keys = () => Object.keys(idCache); +const size = () => keys().length; +const idCache$1 = { + get, + set, + keys, + size +}; +const drawStartState = (g) => g.append("circle").attr("class", "start-state").attr("r", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cy", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit); +const drawDivider = (g) => g.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("class", "divider").attr("x2", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 2).attr("y1", 0).attr("y2", 0); +const drawSimpleState = (g, stateDef) => { + const state = g.append("text").attr("x", 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const classBox = state.node().getBBox(); + g.insert("rect", ":first-child").attr("x", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", classBox.width + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", classBox.height + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return state; +}; +const drawDescrState = (g, stateDef) => { + const addTspan = function(textEl, txt, isFirst2) { + const tSpan = textEl.append("tspan").attr("x", 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).text(txt); + if (!isFirst2) { + tSpan.attr("dy", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight); + } + }; + const title = g.append("text").attr("x", 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + 1.3 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("font-size", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]); + const titleBox = title.node().getBBox(); + const titleHeight = titleBox.height; + const description = g.append("text").attr("x", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr( + "y", + titleHeight + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding * 0.4 + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + ).attr("class", "state-description"); + let isFirst = true; + let isSecond = true; + stateDef.descriptions.forEach(function(descr) { + if (!isFirst) { + addTspan(description, descr, isSecond); + isSecond = false; + } + isFirst = false; + }); + const descrLine = g.append("line").attr("x1", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y1", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("y2", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + titleHeight + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.dividerMargin / 2).attr("class", "descr-divider"); + const descrBox = description.node().getBBox(); + const width = Math.max(descrBox.width, titleBox.width); + descrLine.attr("x2", width + 3 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + g.insert("rect", ":first-child").attr("x", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("width", width + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", descrBox.height + titleHeight + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("rx", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return g; +}; +const addTitleAndBox = (g, stateDef, altBkg) => { + const pad = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + const dblPad = 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + const orgBox = g.node().getBBox(); + const orgWidth = orgBox.width; + const orgX = orgBox.x; + const title = g.append("text").attr("x", 0).attr("y", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift).attr("font-size", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.fontSize).attr("class", "state-title").text(stateDef.id); + const titleBox = title.node().getBBox(); + const titleWidth = titleBox.width + dblPad; + let width = Math.max(titleWidth, orgWidth); + if (width === orgWidth) { + width = width + dblPad; + } + let startX; + const graphBox = g.node().getBBox(); + if (stateDef.doc) + ; + startX = orgX - pad; + if (titleWidth > orgWidth) { + startX = (orgWidth - width) / 2 + pad; + } + if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) { + startX = orgX - (titleWidth - orgWidth) / 2; + } + const lineY = 1 - (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight; + g.insert("rect", ":first-child").attr("x", startX).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width).attr( + "height", + graphBox.height + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift + 1 + ).attr("rx", "0"); + title.attr("x", startX + pad); + if (titleWidth <= orgWidth) { + title.attr("x", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad); + } + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight * 3).attr("rx", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + g.insert("rect", ":first-child").attr("x", startX).attr( + "y", + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.titleShift - (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight - (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + ).attr("width", width).attr("height", graphBox.height + 3 + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.textHeight).attr("rx", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.radius); + return g; +}; +const drawEndState = (g) => { + g.append("circle").attr("class", "end-state-outer").attr("r", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding).attr( + "cx", + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ).attr( + "cy", + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.miniPadding + ); + return g.append("circle").attr("class", "end-state-inner").attr("r", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit).attr("cx", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2).attr("cy", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.sizeUnit + 2); +}; +const drawForkJoinState = (g, stateDef) => { + let width = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkWidth; + let height = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.forkHeight; + if (stateDef.parentId) { + let tmp = width; + width = height; + height = tmp; + } + return g.append("rect").style("stroke", "black").style("fill", "black").attr("width", width).attr("height", height).attr("x", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("y", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); +}; +const _drawLongText = (_text, x, y, g) => { + let textHeight = 0; + const textElem = g.append("text"); + textElem.style("text-anchor", "start"); + textElem.attr("class", "noteText"); + let text = _text.replace(/\r\n/g, "<br/>"); + text = text.replace(/\n/g, "<br/>"); + const lines = text.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.e.lineBreakRegex); + let tHeight = 1.25 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin; + for (const line2 of lines) { + const txt = line2.trim(); + if (txt.length > 0) { + const span = textElem.append("tspan"); + span.text(txt); + if (tHeight === 0) { + const textBounds = span.node().getBBox(); + tHeight += textBounds.height; + } + textHeight += tHeight; + span.attr("x", x + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + span.attr("y", y + textHeight + 1.25 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + } + } + return { textWidth: textElem.node().getBBox().width, textHeight }; +}; +const drawNote = (text, g) => { + g.attr("class", "state-note"); + const note = g.append("rect").attr("x", 0).attr("y", (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + const rectElem = g.append("g"); + const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem); + note.attr("height", textHeight + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin); + note.attr("width", textWidth + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.noteMargin * 2); + return note; +}; +const drawState = function(elem, stateDef) { + const id = stateDef.id; + const stateInfo = { + id, + label: stateDef.id, + width: 0, + height: 0 + }; + const g = elem.append("g").attr("id", id).attr("class", "stateGroup"); + if (stateDef.type === "start") { + drawStartState(g); + } + if (stateDef.type === "end") { + drawEndState(g); + } + if (stateDef.type === "fork" || stateDef.type === "join") { + drawForkJoinState(g, stateDef); + } + if (stateDef.type === "note") { + drawNote(stateDef.note.text, g); + } + if (stateDef.type === "divider") { + drawDivider(g); + } + if (stateDef.type === "default" && stateDef.descriptions.length === 0) { + drawSimpleState(g, stateDef); + } + if (stateDef.type === "default" && stateDef.descriptions.length > 0) { + drawDescrState(g, stateDef); + } + const stateBox = g.node().getBBox(); + stateInfo.width = stateBox.width + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + stateInfo.height = stateBox.height + 2 * (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding; + idCache$1.set(id, stateInfo); + return stateInfo; +}; +let edgeCount = 0; +const drawEdge = function(elem, path, relation) { + const getRelationType = function(type) { + switch (type) { + case _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.AGGREGATION: + return "aggregation"; + case _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.EXTENSION: + return "extension"; + case _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.COMPOSITION: + return "composition"; + case _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY: + return "dependency"; + } + }; + path.points = path.points.filter((p) => !Number.isNaN(p.y)); + const lineData = path.points; + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z); + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition"); + let url = ""; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + svgPath.attr( + "marker-end", + "url(" + url + "#" + getRelationType(_styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d.relationType.DEPENDENCY) + "End)" + ); + if (relation.title !== void 0) { + const label = elem.append("g").attr("class", "stateLabel"); + const { x, y } = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.u.calcLabelPosition(path.points); + const rows = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title); + let titleHeight = 0; + const titleRows = []; + let maxWidth = 0; + let minX = 0; + for (let i = 0; i <= rows.length; i++) { + const title = label.append("text").attr("text-anchor", "middle").text(rows[i]).attr("x", x).attr("y", y + titleHeight); + const boundstmp = title.node().getBBox(); + maxWidth = Math.max(maxWidth, boundstmp.width); + minX = Math.min(minX, boundstmp.x); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info(boundstmp.x, x, y + titleHeight); + if (titleHeight === 0) { + const titleBox = title.node().getBBox(); + titleHeight = titleBox.height; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Title height", titleHeight, y); + } + titleRows.push(title); + } + let boxHeight = titleHeight * rows.length; + if (rows.length > 1) { + const heightAdj = (rows.length - 1) * titleHeight * 0.5; + titleRows.forEach((title, i) => title.attr("y", y + i * titleHeight - heightAdj)); + boxHeight = titleHeight * rows.length; + } + const bounds = label.node().getBBox(); + label.insert("rect", ":first-child").attr("class", "box").attr("x", x - maxWidth / 2 - (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2).attr("y", y - boxHeight / 2 - (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding / 2 - 3.5).attr("width", maxWidth + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding).attr("height", boxHeight + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info(bounds); + } + edgeCount++; +}; +let conf; +const transformationLog = {}; +const setConf = function() { +}; +const insertMarkers = function(elem) { + elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().state; + const securityLevel = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering diagram " + text); + const diagram2 = root.select(`[id='${id}']`); + insertMarkers(diagram2); + const rootDoc = diagObj.db.getRootDoc(); + renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj); + const padding = conf.padding; + const bounds = diagram2.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + const svgWidth = width * 1.75; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.i)(diagram2, height, svgWidth, conf.useMaxWidth); + diagram2.attr( + "viewBox", + `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + " " + height + ); +}; +const getLabelWidth = (text) => { + return text ? text.length * conf.fontSizeFactor : 1; +}; +const renderDoc = (doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => { + const graph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + compound: true, + multigraph: true + }); + let i; + let edgeFreeDoc = true; + for (i = 0; i < doc.length; i++) { + if (doc[i].stmt === "relation") { + edgeFreeDoc = false; + break; + } + } + if (parentId) { + graph.setGraph({ + rankdir: "LR", + multigraph: true, + compound: true, + // acyclicer: 'greedy', + ranker: "tight-tree", + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + isMultiGraph: true + // ranksep: 5, + // nodesep: 1 + }); + } else { + graph.setGraph({ + rankdir: "TB", + multigraph: true, + compound: true, + // isCompound: true, + // acyclicer: 'greedy', + // ranker: 'longest-path' + ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor, + nodeSep: edgeFreeDoc ? 1 : 50, + ranker: "tight-tree", + // ranker: 'network-simplex' + isMultiGraph: true + }); + } + graph.setDefaultEdgeLabel(function() { + return {}; + }); + diagObj.db.extract(doc); + const states = diagObj.db.getStates(); + const relations = diagObj.db.getRelations(); + const keys2 = Object.keys(states); + for (const key of keys2) { + const stateDef = states[key]; + if (parentId) { + stateDef.parentId = parentId; + } + let node; + if (stateDef.doc) { + let sub = diagram2.append("g").attr("id", stateDef.id).attr("class", "stateGroup"); + node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj); + { + sub = addTitleAndBox(sub, stateDef, altBkg); + let boxBounds = sub.node().getBBox(); + node.width = boxBounds.width; + node.height = boxBounds.height + conf.padding / 2; + transformationLog[stateDef.id] = { y: conf.compositTitleSize }; + } + } else { + node = drawState(diagram2, stateDef); + } + if (stateDef.note) { + const noteDef = { + descriptions: [], + id: stateDef.id + "-note", + note: stateDef.note, + type: "note" + }; + const note = drawState(diagram2, noteDef); + if (stateDef.note.position === "left of") { + graph.setNode(node.id + "-note", note); + graph.setNode(node.id, node); + } else { + graph.setNode(node.id, node); + graph.setNode(node.id + "-note", note); + } + graph.setParent(node.id, node.id + "-group"); + graph.setParent(node.id + "-note", node.id + "-group"); + } else { + graph.setNode(node.id, node); + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Count=", graph.nodeCount(), graph); + let cnt = 0; + relations.forEach(function(relation) { + cnt++; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Setting edge", relation); + graph.setEdge( + relation.id1, + relation.id2, + { + relation, + width: getLabelWidth(relation.title), + height: conf.labelHeight * _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.e.getRows(relation.title).length, + labelpos: "c" + }, + "id" + cnt + ); + }); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Graph after layout", graph.nodes()); + const svgElem = diagram2.node(); + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.warn("Node " + v + ": " + JSON.stringify(graph.node(v))); + root.select("#" + svgElem.id + " #" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + " )" + ); + root.select("#" + svgElem.id + " #" + v).attr("data-x-shift", graph.node(v).x - graph.node(v).width / 2); + const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v + " .divider"); + dividers.forEach((divider) => { + const parent = divider.parentElement; + let pWidth = 0; + let pShift = 0; + if (parent) { + if (parent.parentElement) { + pWidth = parent.parentElement.getBBox().width; + } + pShift = parseInt(parent.getAttribute("data-x-shift"), 10); + if (Number.isNaN(pShift)) { + pShift = 0; + } + } + divider.setAttribute("x1", 0 - pShift + 8); + divider.setAttribute("x2", pWidth - pShift - 8); + }); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("No Node " + v + ": " + JSON.stringify(graph.node(v))); + } + }); + let stateBox = svgElem.getBBox(); + graph.edges().forEach(function(e) { + if (e !== void 0 && graph.edge(e) !== void 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + drawEdge(diagram2, graph.edge(e), graph.edge(e).relation); + } + }); + stateBox = svgElem.getBBox(); + const stateInfo = { + id: parentId ? parentId : "root", + label: parentId ? parentId : "root", + width: 0, + height: 0 + }; + stateInfo.width = stateBox.width + 2 * conf.padding; + stateInfo.height = stateBox.height + 2 * conf.padding; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Doc rendered", stateInfo, graph); + return stateInfo; +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 27180: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ D: () => (/* binding */ DEFAULT_STATE_TYPE), +/* harmony export */ S: () => (/* binding */ STMT_RELATION), +/* harmony export */ a: () => (/* binding */ DIVIDER_TYPE), +/* harmony export */ b: () => (/* binding */ STMT_STATE), +/* harmony export */ c: () => (/* binding */ DEFAULT_NESTED_DOC_DIR), +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28758); + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 15], $V7 = [1, 16], $V8 = [1, 17], $V9 = [1, 18], $Va = [1, 30], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 25], $Vh = [1, 26], $Vi = [1, 27], $Vj = [1, 28], $Vk = [1, 29], $Vl = [1, 32], $Vm = [1, 33], $Vn = [1, 34], $Vo = [1, 35], $Vp = [1, 31], $Vq = [1, 4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vr = [1, 4, 5, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vs = [4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "classDefStatement": 10, "cssClassStatement": 11, "idStatement": 12, "DESCR": 13, "-->": 14, "HIDE_EMPTY": 15, "scale": 16, "WIDTH": 17, "COMPOSIT_STATE": 18, "STRUCT_START": 19, "STRUCT_STOP": 20, "STATE_DESCR": 21, "AS": 22, "ID": 23, "FORK": 24, "JOIN": 25, "CHOICE": 26, "CONCURRENT": 27, "note": 28, "notePosition": 29, "NOTE_TEXT": 30, "direction": 31, "acc_title": 32, "acc_title_value": 33, "acc_descr": 34, "acc_descr_value": 35, "acc_descr_multiline_value": 36, "classDef": 37, "CLASSDEF_ID": 38, "CLASSDEF_STYLEOPTS": 39, "DEFAULT": 40, "class": 41, "CLASSENTITY_IDS": 42, "STYLECLASS": 43, "direction_tb": 44, "direction_bt": 45, "direction_rl": 46, "direction_lr": 47, "eol": 48, ";": 49, "EDGE_STATE": 50, "STYLE_SEPARATOR": 51, "left_of": 52, "right_of": 53, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NL", 6: "SD", 13: "DESCR", 14: "-->", 15: "HIDE_EMPTY", 16: "scale", 17: "WIDTH", 18: "COMPOSIT_STATE", 19: "STRUCT_START", 20: "STRUCT_STOP", 21: "STATE_DESCR", 22: "AS", 23: "ID", 24: "FORK", 25: "JOIN", 26: "CHOICE", 27: "CONCURRENT", 28: "note", 30: "NOTE_TEXT", 32: "acc_title", 33: "acc_title_value", 34: "acc_descr", 35: "acc_descr_value", 36: "acc_descr_multiline_value", 37: "classDef", 38: "CLASSDEF_ID", 39: "CLASSDEF_STYLEOPTS", 40: "DEFAULT", 41: "class", 42: "CLASSENTITY_IDS", 43: "STYLECLASS", 44: "direction_tb", 45: "direction_bt", 46: "direction_rl", 47: "direction_lr", 49: ";", 50: "EDGE_STATE", 51: "STYLE_SEPARATOR", 52: "left_of", 53: "right_of" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [10, 3], [10, 3], [11, 3], [31, 1], [31, 1], [31, 1], [31, 1], [48, 1], [48, 1], [12, 1], [12, 1], [12, 3], [12, 3], [29, 1], [29, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.setRootDoc($$[$0]); + return $$[$0]; + case 4: + this.$ = []; + break; + case 5: + if ($$[$0] != "nl") { + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + } + break; + case 6: + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = "nl"; + break; + case 11: + this.$ = $$[$0]; + break; + case 12: + const stateStmt = $$[$0 - 1]; + stateStmt.description = yy.trimColon($$[$0]); + this.$ = stateStmt; + break; + case 13: + this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; + break; + case 14: + const relDescription = yy.trimColon($$[$0]); + this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; + break; + case 18: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; + break; + case 19: + var id = $$[$0]; + var description = $$[$0 - 2].trim(); + if ($$[$0].match(":")) { + var parts = $$[$0].split(":"); + id = parts[0]; + description = [description, parts[1]]; + } + this.$ = { stmt: "state", id, type: "default", description }; + break; + case 20: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; + break; + case 21: + this.$ = { stmt: "state", id: $$[$0], type: "fork" }; + break; + case 22: + this.$ = { stmt: "state", id: $$[$0], type: "join" }; + break; + case 23: + this.$ = { stmt: "state", id: $$[$0], type: "choice" }; + break; + case 24: + this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; + break; + case 25: + this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; + break; + case 28: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 29: + case 30: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 31: + case 32: + this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; + break; + case 33: + this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 34: + yy.setDirection("TB"); + this.$ = { stmt: "dir", value: "TB" }; + break; + case 35: + yy.setDirection("BT"); + this.$ = { stmt: "dir", value: "BT" }; + break; + case 36: + yy.setDirection("RL"); + this.$ = { stmt: "dir", value: "RL" }; + break; + case 37: + yy.setDirection("LR"); + this.$ = { stmt: "dir", value: "LR" }; + break; + case 40: + case 41: + this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; + break; + case 42: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 43: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 15, 16, 18, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 5]), { 9: 36, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 7]), o($Vq, [2, 8]), o($Vq, [2, 9]), o($Vq, [2, 10]), o($Vq, [2, 11], { 13: [1, 37], 14: [1, 38] }), o($Vq, [2, 15]), { 17: [1, 39] }, o($Vq, [2, 17], { 19: [1, 40] }), { 22: [1, 41] }, o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), { 29: 42, 30: [1, 43], 52: [1, 44], 53: [1, 45] }, o($Vq, [2, 27]), { 33: [1, 46] }, { 35: [1, 47] }, o($Vq, [2, 30]), { 38: [1, 48], 40: [1, 49] }, { 42: [1, 50] }, o($Vr, [2, 40], { 51: [1, 51] }), o($Vr, [2, 41], { 51: [1, 52] }), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), o($Vq, [2, 37]), o($Vq, [2, 6]), o($Vq, [2, 12]), { 12: 53, 23: $Va, 50: $Vp }, o($Vq, [2, 16]), o($Vs, $V3, { 7: 54 }), { 23: [1, 55] }, { 23: [1, 56] }, { 22: [1, 57] }, { 23: [2, 44] }, { 23: [2, 45] }, o($Vq, [2, 28]), o($Vq, [2, 29]), { 39: [1, 58] }, { 39: [1, 59] }, { 43: [1, 60] }, { 23: [1, 61] }, { 23: [1, 62] }, o($Vq, [2, 13], { 13: [1, 63] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 64], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 19], { 19: [1, 65] }), { 30: [1, 66] }, { 23: [1, 67] }, o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vr, [2, 42]), o($Vr, [2, 43]), o($Vq, [2, 14]), o($Vq, [2, 18]), o($Vs, $V3, { 7: 68 }), o($Vq, [2, 25]), o($Vq, [2, 26]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 69], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 20])], + defaultActions: { 5: [2, 1], 6: [2, 2], 44: [2, 44], 45: [2, 45] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 40; + case 1: + return 44; + case 2: + return 45; + case 3: + return 46; + case 4: + return 47; + case 5: + break; + case 6: + break; + case 7: + return 5; + case 8: + break; + case 9: + break; + case 10: + break; + case 11: + break; + case 12: + this.pushState("SCALE"); + return 16; + case 13: + return 17; + case 14: + this.popState(); + break; + case 15: + this.begin("acc_title"); + return 32; + case 16: + this.popState(); + return "acc_title_value"; + case 17: + this.begin("acc_descr"); + return 34; + case 18: + this.popState(); + return "acc_descr_value"; + case 19: + this.begin("acc_descr_multiline"); + break; + case 20: + this.popState(); + break; + case 21: + return "acc_descr_multiline_value"; + case 22: + this.pushState("CLASSDEF"); + return 37; + case 23: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 24: + this.popState(); + this.pushState("CLASSDEFID"); + return 38; + case 25: + this.popState(); + return 39; + case 26: + this.pushState("CLASS"); + return 41; + case 27: + this.popState(); + this.pushState("CLASS_STYLE"); + return 42; + case 28: + this.popState(); + return 43; + case 29: + this.pushState("SCALE"); + return 16; + case 30: + return 17; + case 31: + this.popState(); + break; + case 32: + this.pushState("STATE"); + break; + case 33: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 24; + case 34: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 35: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 26; + case 36: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 24; + case 37: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 38: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 26; + case 39: + return 44; + case 40: + return 45; + case 41: + return 46; + case 42: + return 47; + case 43: + this.pushState("STATE_STRING"); + break; + case 44: + this.pushState("STATE_ID"); + return "AS"; + case 45: + this.popState(); + return "ID"; + case 46: + this.popState(); + break; + case 47: + return "STATE_DESCR"; + case 48: + return 18; + case 49: + this.popState(); + break; + case 50: + this.popState(); + this.pushState("struct"); + return 19; + case 51: + break; + case 52: + this.popState(); + return 20; + case 53: + break; + case 54: + this.begin("NOTE"); + return 28; + case 55: + this.popState(); + this.pushState("NOTE_ID"); + return 52; + case 56: + this.popState(); + this.pushState("NOTE_ID"); + return 53; + case 57: + this.popState(); + this.pushState("FLOATING_NOTE"); + break; + case 58: + this.popState(); + this.pushState("FLOATING_NOTE_ID"); + return "AS"; + case 59: + break; + case 60: + return "NOTE_TEXT"; + case 61: + this.popState(); + return "ID"; + case 62: + this.popState(); + this.pushState("NOTE_TEXT"); + return 23; + case 63: + this.popState(); + yy_.yytext = yy_.yytext.substr(2).trim(); + return 30; + case 64: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 30; + case 65: + return 6; + case 66: + return 6; + case 67: + return 15; + case 68: + return 50; + case 69: + return 23; + case 70: + yy_.yytext = yy_.yytext.trim(); + return 13; + case 71: + return 14; + case 72: + return 27; + case 73: + return 51; + case 74: + return 5; + case 75: + return "INVALID"; + } + }, + rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "LINE": { "rules": [9, 10], "inclusive": false }, "struct": { "rules": [9, 10, 22, 26, 32, 39, 40, 41, 42, 51, 52, 53, 54, 68, 69, 70, 71, 72], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [61], "inclusive": false }, "FLOATING_NOTE": { "rules": [58, 59, 60], "inclusive": false }, "NOTE_TEXT": { "rules": [63, 64], "inclusive": false }, "NOTE_ID": { "rules": [62], "inclusive": false }, "NOTE": { "rules": [55, 56, 57], "inclusive": false }, "CLASS_STYLE": { "rules": [28], "inclusive": false }, "CLASS": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [25], "inclusive": false }, "CLASSDEF": { "rules": [23, 24], "inclusive": false }, "acc_descr_multiline": { "rules": [20, 21], "inclusive": false }, "acc_descr": { "rules": [18], "inclusive": false }, "acc_title": { "rules": [16], "inclusive": false }, "SCALE": { "rules": [13, 14, 30, 31], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [45], "inclusive": false }, "STATE_STRING": { "rules": [46, 47], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [9, 10, 33, 34, 35, 36, 37, 38, 43, 44, 48, 49, 50], "inclusive": false }, "ID": { "rules": [9, 10], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 15, 17, 19, 22, 26, 29, 32, 50, 54, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_DIAGRAM_DIRECTION = "LR"; +const DEFAULT_NESTED_DOC_DIR = "TB"; +const STMT_STATE = "state"; +const STMT_RELATION = "relation"; +const STMT_CLASSDEF = "classDef"; +const STMT_APPLYCLASS = "applyClass"; +const DEFAULT_STATE_TYPE = "default"; +const DIVIDER_TYPE = "divider"; +const START_NODE = "[*]"; +const START_TYPE = "start"; +const END_NODE = START_NODE; +const END_TYPE = "end"; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +function newClassesList() { + return {}; +} +let direction = DEFAULT_DIAGRAM_DIRECTION; +let rootDoc = []; +let classes = newClassesList(); +const newDoc = () => { + return { + relations: [], + states: {}, + documents: {} + }; +}; +let documents = { + root: newDoc() +}; +let currentDocument = documents.root; +let startEndCount = 0; +let dividerCnt = 0; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 +}; +const clone = (o) => JSON.parse(JSON.stringify(o)); +const setRootDoc = (o) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting root doc", o); + rootDoc = o; +}; +const getRootDoc = () => rootDoc; +const docTranslator = (parent, node, first) => { + if (node.stmt === STMT_RELATION) { + docTranslator(parent, node.state1, true); + docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === "[*]") { + node.id = first ? parent.id + "_start" : parent.id + "_end"; + node.start = first; + } else { + node.id = node.id.trim(); + } + } + if (node.doc) { + const doc = []; + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.F)(), + type: "divider", + doc: clone(currentDoc) + }; + doc.push(clone(newNode)); + node.doc = doc; + } + node.doc.forEach((docNode) => docTranslator(node, docNode, true)); + } + } +}; +const getRootDocV2 = () => { + docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); + return { id: "root", doc: rootDoc }; +}; +const extract = (_doc) => { + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); + clear(true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Extract", doc); + doc.forEach((item) => { + switch (item.stmt) { + case STMT_STATE: + addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + addStyleClass(item.id.trim(), item.classes); + break; + case STMT_APPLYCLASS: + setCssClass(item.id.trim(), item.styleClass); + break; + } + }); +}; +const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { + const trimmedId = id == null ? void 0 : id.trim(); + if (currentDocument.states[trimmedId] === void 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Adding state ", trimmedId, descr); + currentDocument.states[trimmedId] = { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [] + }; + } else { + if (!currentDocument.states[trimmedId].doc) { + currentDocument.states[trimmedId].doc = doc; + } + if (!currentDocument.states[trimmedId].type) { + currentDocument.states[trimmedId].type = type; + } + } + if (descr) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state description", trimmedId, descr); + if (typeof descr === "string") { + addDescription(trimmedId, descr.trim()); + } + if (typeof descr === "object") { + descr.forEach((des) => addDescription(trimmedId, des.trim())); + } + } + if (note) { + currentDocument.states[trimmedId].note = note; + currentDocument.states[trimmedId].note.text = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)() + ); + } + if (classes2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const stylesList = typeof styles2 === "string" ? [styles2] : styles2; + stylesList.forEach((style) => setStyle(trimmedId, style.trim())); + } + if (textStyles) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); + } +}; +const clear = function(saveCommon) { + documents = { + root: newDoc() + }; + currentDocument = documents.root; + startEndCount = 0; + classes = newClassesList(); + if (!saveCommon) { + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.t)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Documents = ", documents); +}; +const getRelations = function() { + return currentDocument.relations; +}; +function startIdIfNeeded(id = "") { + let fixedId = id; + if (id === START_NODE) { + startEndCount++; + fixedId = `${START_TYPE}${startEndCount}`; + } + return fixedId; +} +function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; +} +function endIdIfNeeded(id = "") { + let fixedId = id; + if (id === END_NODE) { + startEndCount++; + fixedId = `${END_TYPE}${startEndCount}`; + } + return fixedId; +} +function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; +} +function addRelationObjs(item1, item2, relationTitle) { + let id1 = startIdIfNeeded(item1.id.trim()); + let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = startIdIfNeeded(item2.id.trim()); + let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + currentDocument.relations.push({ + id1, + id2, + relationTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); +} +const addRelation = function(item1, item2, title) { + if (typeof item1 === "object") { + addRelationObjs(item1, item2, title); + } else { + const id1 = startIdIfNeeded(item1.trim()); + const type1 = startTypeIfNeeded(item1); + const id2 = endIdIfNeeded(item2.trim()); + const type2 = endTypeIfNeeded(item2); + addState(id1, type1); + addState(id2, type2); + currentDocument.relations.push({ + id1, + id2, + title: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); + } +}; +const addDescription = function(id, descr) { + const theState = currentDocument.states[id]; + const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; + theState.descriptions.push(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)())); +}; +const cleanupLabel = function(label) { + if (label.substring(0, 1) === ":") { + return label.substr(2).trim(); + } else { + return label.trim(); + } +}; +const getDividerId = () => { + dividerCnt++; + return "divider-id-" + dividerCnt; +}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const getClasses = function() { + return classes; +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundState = getState(id); + if (foundState === void 0) { + const trimmedId = id.trim(); + addState(trimmedId); + foundState = getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); +}; +const setStyle = function(itemId, styleText) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(styleText); + } +}; +const setTextStyle = function(itemId, cssClassName) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(cssClassName); + } +}; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); +const db = { + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)().state, + addState, + clear, + getState, + getStates, + getRelations, + getClasses, + getDirection, + addRelation, + getDividerId, + setDirection, + cleanupLabel, + lineType, + relationType, + logDocuments, + getRootDoc, + setRootDoc, + getRootDocV2, + extract, + trimColon, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.g, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.s, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.b, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.r +}; +const getStyles = (options) => ` +defs #statediagram-barbEnd { + fill: ${options.transitionColor}; + stroke: ${options.transitionColor}; + } +g.stateGroup text { + fill: ${options.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${options.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${options.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.stateGroup line { + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${options.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${options.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + + text { + fill: ${options.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${options.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${options.transitionLabelColor || options.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${options.transitionLabelColor || options.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${options.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node .fork-join { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node circle.state-end { + fill: ${options.innerEndBackground}; + stroke: ${options.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${options.compositeBackground || options.background}; + // stroke: ${options.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${options.stateBkg || options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${options.lineColor}; +} + +.statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${options.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${options.stateBorder || options.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${options.compositeBackground || options.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${options.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${options.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${options.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${options.lineColor}; + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/496ed8d5.a66004a5.js b/assets/js/496ed8d5.a66004a5.js new file mode 100644 index 0000000000..c03a248853 --- /dev/null +++ b/assets/js/496ed8d5.a66004a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2206],{89388:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var t=i(85893),o=i(11151);const s={sidebar_position:8,description:"eCalc FAQ"},r="FAQ / Troubleshooting",a={id:"about/getting_started/cli/faq",title:"FAQ / Troubleshooting",description:"eCalc FAQ",source:"@site/docs/about/getting_started/cli/faq.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/faq",permalink:"/ecalc/docs/about/getting_started/cli/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/faq.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{sidebar_position:8,description:"eCalc FAQ"},sidebar:"about",previous:{title:"CLI",permalink:"/ecalc/docs/about/getting_started/cli/"},next:{title:"Python Library",permalink:"/ecalc/docs/about/getting_started/library/"}},l={},c=[{value:"Indentation errors",id:"indentation-errors",level:2},{value:"Error messages due to YAML read problems",id:"error-messages-due-to-yaml-read-problems",level:3},{value:"Error messages due to invalid eCalc configuration",id:"error-messages-due-to-invalid-ecalc-configuration",level:3},{value:"Proposed solution",id:"proposed-solution",level:3},{value:"Special characters in Unicode",id:"special-characters-in-unicode",level:2},{value:"Proposed solution",id:"proposed-solution-1",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"faq--troubleshooting",children:"FAQ / Troubleshooting"}),"\n",(0,t.jsx)(n.p,{children:"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages.\nThis page tries to explain some common error messages and proposes how to fix them."}),"\n",(0,t.jsx)(n.h2,{id:"indentation-errors",children:"Indentation errors"}),"\n",(0,t.jsx)(n.p,{children:"In YAML, the indentation is very important and specifies the level in the hierarchy for the input.\nIf you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors."}),"\n",(0,t.jsx)(n.h3,{id:"error-messages-due-to-yaml-read-problems",children:"Error messages due to YAML read problems"}),"\n",(0,t.jsx)(n.p,{children:"The following error messages are common when you have formatting issues in your YAML file:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"mapping values are not allowed here\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"while scanning a simple key in \"<setupfile.yml>\", line <n>, column <m>\ncould not find expected ':', line <n>, column <m>\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"while parsing a block mapping in <setupfile>, line <n>, column <m>\nexpected <block end>, but found '<block mapping start>'\n"})}),"\n",(0,t.jsx)(n.h3,{id:"error-messages-due-to-invalid-ecalc-configuration",children:"Error messages due to invalid eCalc configuration"}),"\n",(0,t.jsx)(n.p,{children:"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type\ndictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would\nindicate that the type is wrong because it is not a 'dict'/'list' or other type"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"None should be instance of 'dict'\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"None should be instance of 'list'\n"})}),"\n",(0,t.jsx)(n.h3,{id:"proposed-solution",children:"Proposed solution"}),"\n",(0,t.jsx)(n.p,{children:"Check your YAML setup file for correct indentation and correct format of values for each eCalc key."}),"\n",(0,t.jsx)(n.h2,{id:"special-characters-in-unicode",children:"Special characters in Unicode"}),"\n",(0,t.jsxs)(n.p,{children:["eCalc uses ",(0,t.jsx)(n.a,{href:"https://pypi.org/project/ruamel.yaml/",children:"ruamel.yaml"})," to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message."]}),"\n",(0,t.jsxs)(n.p,{children:['One example of this is an unrecognized "',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Byte_order_mark",children:"BOM"}),'" character in "',(0,t.jsx)(n.a,{href:"https://nl.wikipedia.org/wiki/UTF-8",children:"UTF-8 Unicode"}),'".']}),"\n",(0,t.jsx)(n.p,{children:"Error message"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"while scanning a simple key in \"<setupfile.yml>\", line <n>, column 1\ncould not find expected ':', line <n>, column 1\n"})}),"\n",(0,t.jsx)(n.h3,{id:"proposed-solution-1",children:"Proposed solution"}),"\n",(0,t.jsx)(n.p,{children:"Check the encoding of your setupfile (and inputfiles):"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"$ file <setupfile>.yml\n"})}),"\n",(0,t.jsxs)(n.p,{children:['If the output of this is not "ASCII text", convert your file to "US-ASCII" using ',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/iconv",children:"iconv"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Example when ",(0,t.jsx)(n.code,{children:"<setupfile>.yml"}),' is of type "UTF-8"']}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"$ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o <new_setup_file_name_ascii>.yml <old_setup_file_name_utf-8>.yml\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Now try to run again using the new file ",(0,t.jsx)(n.code,{children:"<new_setup_file_name_ascii>.yml"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>a,a:()=>r});var t=i(67294);const o={},s=t.createContext(o);function r(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/497.ad2ad4f4.js b/assets/js/497.ad2ad4f4.js new file mode 100644 index 0000000000..12208b2697 --- /dev/null +++ b/assets/js/497.ad2ad4f4.js @@ -0,0 +1,51748 @@ +exports.id = 497; +exports.ids = [497]; +exports.modules = { + +/***/ 84182: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(82241)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_643__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_643__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_643__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_643__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_643__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_643__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_643__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_643__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_643__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_643__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_643__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_643__(__nested_webpack_require_643__.s = 7); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3185__) { + +"use strict"; + + +var FDLayoutConstants = __nested_webpack_require_3185__(0).FDLayoutConstants; + +function CoSEConstants() {} + +//CoSEConstants inherits static props in FDLayoutConstants +for (var prop in FDLayoutConstants) { + CoSEConstants[prop] = FDLayoutConstants[prop]; +} + +CoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false; +CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +CoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60; +CoSEConstants.TILE = true; +CoSEConstants.TILING_PADDING_VERTICAL = 10; +CoSEConstants.TILING_PADDING_HORIZONTAL = 10; +CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false; // make this true when cose is used incrementally as a part of other non-incremental layout + +module.exports = CoSEConstants; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __nested_webpack_require_4002__) { + +"use strict"; + + +var FDLayoutEdge = __nested_webpack_require_4002__(0).FDLayoutEdge; + +function CoSEEdge(source, target, vEdge) { + FDLayoutEdge.call(this, source, target, vEdge); +} + +CoSEEdge.prototype = Object.create(FDLayoutEdge.prototype); +for (var prop in FDLayoutEdge) { + CoSEEdge[prop] = FDLayoutEdge[prop]; +} + +module.exports = CoSEEdge; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_4409__) { + +"use strict"; + + +var LGraph = __nested_webpack_require_4409__(0).LGraph; + +function CoSEGraph(parent, graphMgr, vGraph) { + LGraph.call(this, parent, graphMgr, vGraph); +} + +CoSEGraph.prototype = Object.create(LGraph.prototype); +for (var prop in LGraph) { + CoSEGraph[prop] = LGraph[prop]; +} + +module.exports = CoSEGraph; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __nested_webpack_require_4790__) { + +"use strict"; + + +var LGraphManager = __nested_webpack_require_4790__(0).LGraphManager; + +function CoSEGraphManager(layout) { + LGraphManager.call(this, layout); +} + +CoSEGraphManager.prototype = Object.create(LGraphManager.prototype); +for (var prop in LGraphManager) { + CoSEGraphManager[prop] = LGraphManager[prop]; +} + +module.exports = CoSEGraphManager; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_5205__) { + +"use strict"; + + +var FDLayoutNode = __nested_webpack_require_5205__(0).FDLayoutNode; +var IMath = __nested_webpack_require_5205__(0).IMath; + +function CoSENode(gm, loc, size, vNode) { + FDLayoutNode.call(this, gm, loc, size, vNode); +} + +CoSENode.prototype = Object.create(FDLayoutNode.prototype); +for (var prop in FDLayoutNode) { + CoSENode[prop] = FDLayoutNode[prop]; +} + +CoSENode.prototype.move = function () { + var layout = this.graphManager.getLayout(); + this.displacementX = layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; + this.displacementY = layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; + + if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX); + } + + if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) { + this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY); + } + + // a simple node, just move it + if (this.child == null) { + this.moveBy(this.displacementX, this.displacementY); + } + // an empty compound node, again just move it + else if (this.child.getNodes().length == 0) { + this.moveBy(this.displacementX, this.displacementY); + } + // non-empty compound node, propogate movement to children as well + else { + this.propogateDisplacementToChildren(this.displacementX, this.displacementY); + } + + layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY); + + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + this.displacementX = 0; + this.displacementY = 0; +}; + +CoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) { + var nodes = this.getChild().getNodes(); + var node; + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + if (node.getChild() == null) { + node.moveBy(dX, dY); + node.displacementX += dX; + node.displacementY += dY; + } else { + node.propogateDisplacementToChildren(dX, dY); + } + } +}; + +CoSENode.prototype.setPred1 = function (pred1) { + this.pred1 = pred1; +}; + +CoSENode.prototype.getPred1 = function () { + return pred1; +}; + +CoSENode.prototype.getPred2 = function () { + return pred2; +}; + +CoSENode.prototype.setNext = function (next) { + this.next = next; +}; + +CoSENode.prototype.getNext = function () { + return next; +}; + +CoSENode.prototype.setProcessed = function (processed) { + this.processed = processed; +}; + +CoSENode.prototype.isProcessed = function () { + return processed; +}; + +module.exports = CoSENode; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_8085__) { + +"use strict"; + + +var FDLayout = __nested_webpack_require_8085__(0).FDLayout; +var CoSEGraphManager = __nested_webpack_require_8085__(4); +var CoSEGraph = __nested_webpack_require_8085__(3); +var CoSENode = __nested_webpack_require_8085__(5); +var CoSEEdge = __nested_webpack_require_8085__(2); +var CoSEConstants = __nested_webpack_require_8085__(1); +var FDLayoutConstants = __nested_webpack_require_8085__(0).FDLayoutConstants; +var LayoutConstants = __nested_webpack_require_8085__(0).LayoutConstants; +var Point = __nested_webpack_require_8085__(0).Point; +var PointD = __nested_webpack_require_8085__(0).PointD; +var Layout = __nested_webpack_require_8085__(0).Layout; +var Integer = __nested_webpack_require_8085__(0).Integer; +var IGeometry = __nested_webpack_require_8085__(0).IGeometry; +var LGraph = __nested_webpack_require_8085__(0).LGraph; +var Transform = __nested_webpack_require_8085__(0).Transform; + +function CoSELayout() { + FDLayout.call(this); + + this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled +} + +CoSELayout.prototype = Object.create(FDLayout.prototype); + +for (var prop in FDLayout) { + CoSELayout[prop] = FDLayout[prop]; +} + +CoSELayout.prototype.newGraphManager = function () { + var gm = new CoSEGraphManager(this); + this.graphManager = gm; + return gm; +}; + +CoSELayout.prototype.newGraph = function (vGraph) { + return new CoSEGraph(null, this.graphManager, vGraph); +}; + +CoSELayout.prototype.newNode = function (vNode) { + return new CoSENode(this.graphManager, vNode); +}; + +CoSELayout.prototype.newEdge = function (vEdge) { + return new CoSEEdge(null, null, vEdge); +}; + +CoSELayout.prototype.initParameters = function () { + FDLayout.prototype.initParameters.call(this, arguments); + if (!this.isSubLayout) { + if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) { + this.idealEdgeLength = 10; + } else { + this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH; + } + + this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + + // variables for tree reduction support + this.prunedNodesAll = []; + this.growTreeIterations = 0; + this.afterGrowthIterations = 0; + this.isTreeGrowing = false; + this.isGrowthFinished = false; + + // variables for cooling + this.coolingCycle = 0; + this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD; + this.finalTemperature = FDLayoutConstants.CONVERGENCE_CHECK_PERIOD / this.maxIterations; + this.coolingAdjuster = 1; + } +}; + +CoSELayout.prototype.layout = function () { + var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + if (createBendsAsNeeded) { + this.createBendpoints(); + this.graphManager.resetAllEdges(); + } + + this.level = 0; + return this.classicLayout(); +}; + +CoSELayout.prototype.classicLayout = function () { + this.nodesWithGravity = this.calculateNodesToApplyGravitationTo(); + this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity); + this.calcNoOfChildrenForAllNodes(); + this.graphManager.calcLowestCommonAncestors(); + this.graphManager.calcInclusionTreeDepths(); + this.graphManager.getRoot().calcEstimatedSize(); + this.calcIdealEdgeLengths(); + + if (!this.incremental) { + var forest = this.getFlatForest(); + + // The graph associated with this layout is flat and a forest + if (forest.length > 0) { + this.positionNodesRadially(forest); + } + // The graph associated with this layout is not flat or a forest + else { + // Reduce the trees when incremental mode is not enabled and graph is not a forest + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.positionNodesRandomly(); + } + } else { + if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { + // Reduce the trees in incremental mode if only this constant is set to true + this.reduceTrees(); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + } + } + + this.initSpringEmbedder(); + this.runSpringEmbedder(); + + return true; +}; + +CoSELayout.prototype.tick = function () { + this.totalIterations++; + + if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) { + if (this.isConverged()) { + if (this.prunedNodesAll.length > 0) { + this.isTreeGrowing = true; + } else { + return true; + } + } + + this.coolingCycle++; + + if (this.layoutQuality == 0) { + // quality - "draft" + this.coolingAdjuster = this.coolingCycle; + } else if (this.layoutQuality == 1) { + // quality - "default" + this.coolingAdjuster = this.coolingCycle / 3; + } + + // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3 + this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature); + this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor)); + } + // Operations while tree is growing again + if (this.isTreeGrowing) { + if (this.growTreeIterations % 10 == 0) { + if (this.prunedNodesAll.length > 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + this.growTree(this.prunedNodesAll); + // Update nodes that gravity will be applied + this.graphManager.resetAllNodesToApplyGravitation(); + var allNodes = new Set(this.getAllNodes()); + var intersection = this.nodesWithGravity.filter(function (x) { + return allNodes.has(x); + }); + this.graphManager.setAllNodesToApplyGravitation(intersection); + + this.graphManager.updateBounds(); + this.updateGrid(); + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + } else { + this.isTreeGrowing = false; + this.isGrowthFinished = true; + } + } + this.growTreeIterations++; + } + // Operations after growth is finished + if (this.isGrowthFinished) { + if (this.isConverged()) { + return true; + } + if (this.afterGrowthIterations % 10 == 0) { + this.graphManager.updateBounds(); + this.updateGrid(); + } + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100); + this.afterGrowthIterations++; + } + + var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished; + var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished; + + this.totalDisplacement = 0; + this.graphManager.updateBounds(); + this.calcSpringForces(); + this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate); + this.calcGravitationalForces(); + this.moveNodes(); + this.animate(); + + return false; // Layout is not ended yet return false +}; + +CoSELayout.prototype.getPositionsData = function () { + var allNodes = this.graphManager.getAllNodes(); + var pData = {}; + for (var i = 0; i < allNodes.length; i++) { + var rect = allNodes[i].rect; + var id = allNodes[i].id; + pData[id] = { + id: id, + x: rect.getCenterX(), + y: rect.getCenterY(), + w: rect.width, + h: rect.height + }; + } + + return pData; +}; + +CoSELayout.prototype.runSpringEmbedder = function () { + this.initialAnimationPeriod = 25; + this.animationPeriod = this.initialAnimationPeriod; + var layoutEnded = false; + + // If aminate option is 'during' signal that layout is supposed to start iterating + if (FDLayoutConstants.ANIMATE === 'during') { + this.emit('layoutstarted'); + } else { + // If aminate option is 'during' tick() function will be called on index.js + while (!layoutEnded) { + layoutEnded = this.tick(); + } + + this.graphManager.updateBounds(); + } +}; + +CoSELayout.prototype.calculateNodesToApplyGravitationTo = function () { + var nodeList = []; + var graph; + + var graphs = this.graphManager.getGraphs(); + var size = graphs.length; + var i; + for (i = 0; i < size; i++) { + graph = graphs[i]; + + graph.updateConnected(); + + if (!graph.isConnected) { + nodeList = nodeList.concat(graph.getNodes()); + } + } + + return nodeList; +}; + +CoSELayout.prototype.createBendpoints = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + var visited = new Set(); + var i; + for (i = 0; i < edges.length; i++) { + var edge = edges[i]; + + if (!visited.has(edge)) { + var source = edge.getSource(); + var target = edge.getTarget(); + + if (source == target) { + edge.getBendpoints().push(new PointD()); + edge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(edge); + visited.add(edge); + } else { + var edgeList = []; + + edgeList = edgeList.concat(source.getEdgeListToNode(target)); + edgeList = edgeList.concat(target.getEdgeListToNode(source)); + + if (!visited.has(edgeList[0])) { + if (edgeList.length > 1) { + var k; + for (k = 0; k < edgeList.length; k++) { + var multiEdge = edgeList[k]; + multiEdge.getBendpoints().push(new PointD()); + this.createDummyNodesForBendpoints(multiEdge); + } + } + edgeList.forEach(function (edge) { + visited.add(edge); + }); + } + } + } + + if (visited.size == edges.length) { + break; + } + } +}; + +CoSELayout.prototype.positionNodesRadially = function (forest) { + // We tile the trees to a grid row by row; first tree starts at (0,0) + var currentStartingPoint = new Point(0, 0); + var numberOfColumns = Math.ceil(Math.sqrt(forest.length)); + var height = 0; + var currentY = 0; + var currentX = 0; + var point = new PointD(0, 0); + + for (var i = 0; i < forest.length; i++) { + if (i % numberOfColumns == 0) { + // Start of a new row, make the x coordinate 0, increment the + // y coordinate with the max height of the previous row + currentX = 0; + currentY = height; + + if (i != 0) { + currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION; + } + + height = 0; + } + + var tree = forest[i]; + + // Find the center of the tree + var centerNode = Layout.findCenterOfTree(tree); + + // Set the staring point of the next tree + currentStartingPoint.x = currentX; + currentStartingPoint.y = currentY; + + // Do a radial layout starting with the center + point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint); + + if (point.y > height) { + height = Math.floor(point.y); + } + + currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION); + } + + this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2)); +}; + +CoSELayout.radialLayout = function (tree, centerNode, startingPoint) { + var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION); + CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep); + var bounds = LGraph.calculateBounds(tree); + + var transform = new Transform(); + transform.setDeviceOrgX(bounds.getMinX()); + transform.setDeviceOrgY(bounds.getMinY()); + transform.setWorldOrgX(startingPoint.x); + transform.setWorldOrgY(startingPoint.y); + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + node.transform(transform); + } + + var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY()); + + return transform.inverseTransformPoint(bottomRight); +}; + +CoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) { + // First, position this node by finding its angle. + var halfInterval = (endAngle - startAngle + 1) / 2; + + if (halfInterval < 0) { + halfInterval += 180; + } + + var nodeAngle = (halfInterval + startAngle) % 360; + var teta = nodeAngle * IGeometry.TWO_PI / 360; + + // Make polar to java cordinate conversion. + var cos_teta = Math.cos(teta); + var x_ = distance * Math.cos(teta); + var y_ = distance * Math.sin(teta); + + node.setCenter(x_, y_); + + // Traverse all neighbors of this node and recursively call this + // function. + var neighborEdges = []; + neighborEdges = neighborEdges.concat(node.getEdges()); + var childCount = neighborEdges.length; + + if (parentOfNode != null) { + childCount--; + } + + var branchCount = 0; + + var incEdgesCount = neighborEdges.length; + var startIndex; + + var edges = node.getEdgesBetween(parentOfNode); + + // If there are multiple edges, prune them until there remains only one + // edge. + while (edges.length > 1) { + //neighborEdges.remove(edges.remove(0)); + var temp = edges[0]; + edges.splice(0, 1); + var index = neighborEdges.indexOf(temp); + if (index >= 0) { + neighborEdges.splice(index, 1); + } + incEdgesCount--; + childCount--; + } + + if (parentOfNode != null) { + //assert edges.length == 1; + startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount; + } else { + startIndex = 0; + } + + var stepAngle = Math.abs(endAngle - startAngle) / childCount; + + for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) { + var currentNeighbor = neighborEdges[i].getOtherEnd(node); + + // Don't back traverse to root node in current tree. + if (currentNeighbor == parentOfNode) { + continue; + } + + var childStartAngle = (startAngle + branchCount * stepAngle) % 360; + var childEndAngle = (childStartAngle + stepAngle) % 360; + + CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation); + + branchCount++; + } +}; + +CoSELayout.maxDiagonalInTree = function (tree) { + var maxDiagonal = Integer.MIN_VALUE; + + for (var i = 0; i < tree.length; i++) { + var node = tree[i]; + var diagonal = node.getDiagonal(); + + if (diagonal > maxDiagonal) { + maxDiagonal = diagonal; + } + } + + return maxDiagonal; +}; + +CoSELayout.prototype.calcRepulsionRange = function () { + // formula is 2 x (level + 1) x idealEdgeLength + return 2 * (this.level + 1) * this.idealEdgeLength; +}; + +// Tiling methods + +// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's +CoSELayout.prototype.groupZeroDegreeMembers = function () { + var self = this; + // array of [parent_id x oneDegreeNode_id] + var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members + this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled + this.idToDummyNode = {}; // A map of id to dummy node + + var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled + var allNodes = this.graphManager.getAllNodes(); + + // Fill zero degree list + for (var i = 0; i < allNodes.length; i++) { + var node = allNodes[i]; + var parent = node.getParent(); + // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list + if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) { + zeroDegree.push(node); + } + } + + // Create a map of parent node and its zero degree members + for (var i = 0; i < zeroDegree.length; i++) { + var node = zeroDegree[i]; // Zero degree node itself + var p_id = node.getParent().id; // Parent id + + if (typeof tempMemberGroups[p_id] === "undefined") tempMemberGroups[p_id] = []; + + tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups + } + + // If there are at least two nodes at a level, create a dummy compound for them + Object.keys(tempMemberGroups).forEach(function (p_id) { + if (tempMemberGroups[p_id].length > 1) { + var dummyCompoundId = "DummyCompound_" + p_id; // The id of dummy compound which will be created soon + self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups + + var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound + + // Create a dummy compound with calculated id + var dummyCompound = new CoSENode(self.graphManager); + dummyCompound.id = dummyCompoundId; + dummyCompound.paddingLeft = parent.paddingLeft || 0; + dummyCompound.paddingRight = parent.paddingRight || 0; + dummyCompound.paddingBottom = parent.paddingBottom || 0; + dummyCompound.paddingTop = parent.paddingTop || 0; + + self.idToDummyNode[dummyCompoundId] = dummyCompound; + + var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound); + var parentGraph = parent.getChild(); + + // Add dummy compound to parent the graph + parentGraph.add(dummyCompound); + + // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent + for (var i = 0; i < tempMemberGroups[p_id].length; i++) { + var node = tempMemberGroups[p_id][i]; + + parentGraph.remove(node); + dummyParentGraph.add(node); + } + } + }); +}; + +CoSELayout.prototype.clearCompounds = function () { + var childGraphMap = {}; + var idToNode = {}; + + // Get compound ordering by finding the inner one first + this.performDFSOnCompounds(); + + for (var i = 0; i < this.compoundOrder.length; i++) { + + idToNode[this.compoundOrder[i].id] = this.compoundOrder[i]; + childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes()); + + // Remove children of compounds + this.graphManager.remove(this.compoundOrder[i].getChild()); + this.compoundOrder[i].child = null; + } + + this.graphManager.resetAllNodes(); + + // Tile the removed children + this.tileCompoundMembers(childGraphMap, idToNode); +}; + +CoSELayout.prototype.clearZeroDegreeMembers = function () { + var self = this; + var tiledZeroDegreePack = this.tiledZeroDegreePack = []; + + Object.keys(this.memberGroups).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound + + tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + // Set the width and height of the dummy compound as calculated + compoundNode.rect.width = tiledZeroDegreePack[id].width; + compoundNode.rect.height = tiledZeroDegreePack[id].height; + }); +}; + +CoSELayout.prototype.repopulateCompounds = function () { + for (var i = this.compoundOrder.length - 1; i >= 0; i--) { + var lCompoundNode = this.compoundOrder[i]; + var id = lCompoundNode.id; + var horizontalMargin = lCompoundNode.paddingLeft; + var verticalMargin = lCompoundNode.paddingTop; + + this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); + } +}; + +CoSELayout.prototype.repopulateZeroDegreeMembers = function () { + var self = this; + var tiledPack = this.tiledZeroDegreePack; + + Object.keys(tiledPack).forEach(function (id) { + var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id + var horizontalMargin = compoundNode.paddingLeft; + var verticalMargin = compoundNode.paddingTop; + + // Adjust the positions of nodes wrt its compound + self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); + }); +}; + +CoSELayout.prototype.getToBeTiled = function (node) { + var id = node.id; + //firstly check the previous results + if (this.toBeTiled[id] != null) { + return this.toBeTiled[id]; + } + + //only compound nodes are to be tiled + var childGraph = node.getChild(); + if (childGraph == null) { + this.toBeTiled[id] = false; + return false; + } + + var children = childGraph.getNodes(); // Get the children nodes + + //a compound node is not to be tiled if all of its compound children are not to be tiled + for (var i = 0; i < children.length; i++) { + var theChild = children[i]; + + if (this.getNodeDegree(theChild) > 0) { + this.toBeTiled[id] = false; + return false; + } + + //pass the children not having the compound structure + if (theChild.getChild() == null) { + this.toBeTiled[theChild.id] = false; + continue; + } + + if (!this.getToBeTiled(theChild)) { + this.toBeTiled[id] = false; + return false; + } + } + this.toBeTiled[id] = true; + return true; +}; + +// Get degree of a node depending of its edges and independent of its children +CoSELayout.prototype.getNodeDegree = function (node) { + var id = node.id; + var edges = node.getEdges(); + var degree = 0; + + // For the edges connected + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + if (edge.getSource().id !== edge.getTarget().id) { + degree = degree + 1; + } + } + return degree; +}; + +// Get degree of a node with its children +CoSELayout.prototype.getNodeDegreeWithChildren = function (node) { + var degree = this.getNodeDegree(node); + if (node.getChild() == null) { + return degree; + } + var children = node.getChild().getNodes(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + degree += this.getNodeDegreeWithChildren(child); + } + return degree; +}; + +CoSELayout.prototype.performDFSOnCompounds = function () { + this.compoundOrder = []; + this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes()); +}; + +CoSELayout.prototype.fillCompexOrderByDFS = function (children) { + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.getChild() != null) { + this.fillCompexOrderByDFS(child.getChild().getNodes()); + } + if (this.getToBeTiled(child)) { + this.compoundOrder.push(child); + } + } +}; + +/** +* This method places each zero degree member wrt given (x,y) coordinates (top left). +*/ +CoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin) { + x += compoundHorizontalMargin; + y += compoundVerticalMargin; + + var left = x; + + for (var i = 0; i < organization.rows.length; i++) { + var row = organization.rows[i]; + x = left; + var maxHeight = 0; + + for (var j = 0; j < row.length; j++) { + var lnode = row[j]; + + lnode.rect.x = x; // + lnode.rect.width / 2; + lnode.rect.y = y; // + lnode.rect.height / 2; + + x += lnode.rect.width + organization.horizontalPadding; + + if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; + } + + y += maxHeight + organization.verticalPadding; + } +}; + +CoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) { + var self = this; + this.tiledMemberPack = []; + + Object.keys(childGraphMap).forEach(function (id) { + // Get the compound node + var compoundNode = idToNode[id]; + + self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight); + + compoundNode.rect.width = self.tiledMemberPack[id].width; + compoundNode.rect.height = self.tiledMemberPack[id].height; + }); +}; + +CoSELayout.prototype.tileNodes = function (nodes, minWidth) { + var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL; + var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL; + var organization = { + rows: [], + rowWidth: [], + rowHeight: [], + width: 0, + height: minWidth, // assume minHeight equals to minWidth + verticalPadding: verticalPadding, + horizontalPadding: horizontalPadding + }; + + // Sort the nodes in ascending order of their areas + nodes.sort(function (n1, n2) { + if (n1.rect.width * n1.rect.height > n2.rect.width * n2.rect.height) return -1; + if (n1.rect.width * n1.rect.height < n2.rect.width * n2.rect.height) return 1; + return 0; + }); + + // Create the organization -> tile members + for (var i = 0; i < nodes.length; i++) { + var lNode = nodes[i]; + + if (organization.rows.length == 0) { + this.insertNodeToRow(organization, lNode, 0, minWidth); + } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) { + this.insertNodeToRow(organization, lNode, this.getShortestRowIndex(organization), minWidth); + } else { + this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth); + } + + this.shiftToLastRow(organization); + } + + return organization; +}; + +CoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) { + var minCompoundSize = minWidth; + + // Add new row if needed + if (rowIndex == organization.rows.length) { + var secondDimension = []; + + organization.rows.push(secondDimension); + organization.rowWidth.push(minCompoundSize); + organization.rowHeight.push(0); + } + + // Update row width + var w = organization.rowWidth[rowIndex] + node.rect.width; + + if (organization.rows[rowIndex].length > 0) { + w += organization.horizontalPadding; + } + + organization.rowWidth[rowIndex] = w; + // Update compound width + if (organization.width < w) { + organization.width = w; + } + + // Update height + var h = node.rect.height; + if (rowIndex > 0) h += organization.verticalPadding; + + var extraHeight = 0; + if (h > organization.rowHeight[rowIndex]) { + extraHeight = organization.rowHeight[rowIndex]; + organization.rowHeight[rowIndex] = h; + extraHeight = organization.rowHeight[rowIndex] - extraHeight; + } + + organization.height += extraHeight; + + // Insert node + organization.rows[rowIndex].push(node); +}; + +//Scans the rows of an organization and returns the one with the min width +CoSELayout.prototype.getShortestRowIndex = function (organization) { + var r = -1; + var min = Number.MAX_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + if (organization.rowWidth[i] < min) { + r = i; + min = organization.rowWidth[i]; + } + } + return r; +}; + +//Scans the rows of an organization and returns the one with the max width +CoSELayout.prototype.getLongestRowIndex = function (organization) { + var r = -1; + var max = Number.MIN_VALUE; + + for (var i = 0; i < organization.rows.length; i++) { + + if (organization.rowWidth[i] > max) { + r = i; + max = organization.rowWidth[i]; + } + } + + return r; +}; + +/** +* This method checks whether adding extra width to the organization violates +* the aspect ratio(1) or not. +*/ +CoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) { + + var sri = this.getShortestRowIndex(organization); + + if (sri < 0) { + return true; + } + + var min = organization.rowWidth[sri]; + + if (min + organization.horizontalPadding + extraWidth <= organization.width) return true; + + var hDiff = 0; + + // Adding to an existing row + if (organization.rowHeight[sri] < extraHeight) { + if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri]; + } + + var add_to_row_ratio; + if (organization.width - min >= extraWidth + organization.horizontalPadding) { + add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding); + } else { + add_to_row_ratio = (organization.height + hDiff) / organization.width; + } + + // Adding a new row for this node + hDiff = extraHeight + organization.verticalPadding; + var add_new_row_ratio; + if (organization.width < extraWidth) { + add_new_row_ratio = (organization.height + hDiff) / extraWidth; + } else { + add_new_row_ratio = (organization.height + hDiff) / organization.width; + } + + if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio; + + if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio; + + return add_to_row_ratio < add_new_row_ratio; +}; + +//If moving the last node from the longest row and adding it to the last +//row makes the bounding box smaller, do it. +CoSELayout.prototype.shiftToLastRow = function (organization) { + var longest = this.getLongestRowIndex(organization); + var last = organization.rowWidth.length - 1; + var row = organization.rows[longest]; + var node = row[row.length - 1]; + + var diff = node.width + organization.horizontalPadding; + + // Check if there is enough space on the last row + if (organization.width - organization.rowWidth[last] > diff && longest != last) { + // Remove the last element of the longest row + row.splice(-1, 1); + + // Push it to the last row + organization.rows[last].push(node); + + organization.rowWidth[longest] = organization.rowWidth[longest] - diff; + organization.rowWidth[last] = organization.rowWidth[last] + diff; + organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)]; + + // Update heights of the organization + var maxHeight = Number.MIN_VALUE; + for (var i = 0; i < row.length; i++) { + if (row[i].height > maxHeight) maxHeight = row[i].height; + } + if (longest > 0) maxHeight += organization.verticalPadding; + + var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + + organization.rowHeight[longest] = maxHeight; + if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding; + + var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last]; + organization.height += finalTotal - prevTotal; + + this.shiftToLastRow(organization); + } +}; + +CoSELayout.prototype.tilingPreLayout = function () { + if (CoSEConstants.TILE) { + // Find zero degree nodes and create a compound for each level + this.groupZeroDegreeMembers(); + // Tile and clear children of each compound + this.clearCompounds(); + // Separately tile and clear zero degree nodes for each level + this.clearZeroDegreeMembers(); + } +}; + +CoSELayout.prototype.tilingPostLayout = function () { + if (CoSEConstants.TILE) { + this.repopulateZeroDegreeMembers(); + this.repopulateCompounds(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: Tree Reduction methods +// ----------------------------------------------------------------------------- +// Reduce trees +CoSELayout.prototype.reduceTrees = function () { + var prunedNodesAll = []; + var containsLeaf = true; + var node; + + while (containsLeaf) { + var allNodes = this.graphManager.getAllNodes(); + var prunedNodesInStepTemp = []; + containsLeaf = false; + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) { + prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]); + containsLeaf = true; + } + } + if (containsLeaf == true) { + var prunedNodesInStep = []; + for (var j = 0; j < prunedNodesInStepTemp.length; j++) { + if (prunedNodesInStepTemp[j][0].getEdges().length == 1) { + prunedNodesInStep.push(prunedNodesInStepTemp[j]); + prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]); + } + } + prunedNodesAll.push(prunedNodesInStep); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); + } + } + this.prunedNodesAll = prunedNodesAll; +}; + +// Grow tree one step +CoSELayout.prototype.growTree = function (prunedNodesAll) { + var lengthOfPrunedNodesInStep = prunedNodesAll.length; + var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1]; + + var nodeData; + for (var i = 0; i < prunedNodesInStep.length; i++) { + nodeData = prunedNodesInStep[i]; + + this.findPlaceforPrunedNode(nodeData); + + nodeData[2].add(nodeData[0]); + nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target); + } + + prunedNodesAll.splice(prunedNodesAll.length - 1, 1); + this.graphManager.resetAllNodes(); + this.graphManager.resetAllEdges(); +}; + +// Find an appropriate position to replace pruned node, this method can be improved +CoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) { + + var gridForPrunedNode; + var nodeToConnect; + var prunedNode = nodeData[0]; + if (prunedNode == nodeData[1].source) { + nodeToConnect = nodeData[1].target; + } else { + nodeToConnect = nodeData[1].source; + } + var startGridX = nodeToConnect.startX; + var finishGridX = nodeToConnect.finishX; + var startGridY = nodeToConnect.startY; + var finishGridY = nodeToConnect.finishY; + + var upNodeCount = 0; + var downNodeCount = 0; + var rightNodeCount = 0; + var leftNodeCount = 0; + var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount]; + + if (startGridY > 0) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1; + } + } + if (finishGridX < this.grid.length - 1) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1; + } + } + if (finishGridY < this.grid[0].length - 1) { + for (var i = startGridX; i <= finishGridX; i++) { + controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1; + } + } + if (startGridX > 0) { + for (var i = startGridY; i <= finishGridY; i++) { + controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1; + } + } + var min = Integer.MAX_VALUE; + var minCount; + var minIndex; + for (var j = 0; j < controlRegions.length; j++) { + if (controlRegions[j] < min) { + min = controlRegions[j]; + minCount = 1; + minIndex = j; + } else if (controlRegions[j] == min) { + minCount++; + } + } + + if (minCount == 3 && min == 0) { + if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) { + gridForPrunedNode = 1; + } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 0; + } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 3; + } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) { + gridForPrunedNode = 2; + } + } else if (minCount == 2 && min == 0) { + var random = Math.floor(Math.random() * 2); + if (controlRegions[0] == 0 && controlRegions[1] == 0) { + ; + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 1; + } + } else if (controlRegions[0] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[0] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 0; + } else { + gridForPrunedNode = 3; + } + } else if (controlRegions[1] == 0 && controlRegions[2] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 2; + } + } else if (controlRegions[1] == 0 && controlRegions[3] == 0) { + if (random == 0) { + gridForPrunedNode = 1; + } else { + gridForPrunedNode = 3; + } + } else { + if (random == 0) { + gridForPrunedNode = 2; + } else { + gridForPrunedNode = 3; + } + } + } else if (minCount == 4 && min == 0) { + var random = Math.floor(Math.random() * 4); + gridForPrunedNode = random; + } else { + gridForPrunedNode = minIndex; + } + + if (gridForPrunedNode == 0) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2); + } else if (gridForPrunedNode == 1) { + prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } else if (gridForPrunedNode == 2) { + prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2); + } else { + prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY()); + } +}; + +module.exports = CoSELayout; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_45620__) { + +"use strict"; + + +var coseBase = {}; + +coseBase.layoutBase = __nested_webpack_require_45620__(0); +coseBase.CoSEConstants = __nested_webpack_require_45620__(1); +coseBase.CoSEEdge = __nested_webpack_require_45620__(2); +coseBase.CoSEGraph = __nested_webpack_require_45620__(3); +coseBase.CoSEGraphManager = __nested_webpack_require_45620__(4); +coseBase.CoSELayout = __nested_webpack_require_45620__(6); +coseBase.CoSENode = __nested_webpack_require_45620__(5); + +module.exports = coseBase; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 14607: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(__webpack_require__(84182)); + else {} +})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_659__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_659__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_659__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_659__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_659__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_659__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_659__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_659__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_659__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_659__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_659__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_659__(__nested_webpack_require_659__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_0__; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_3201__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_3201__(0).layoutBase.LayoutConstants; +var FDLayoutConstants = __nested_webpack_require_3201__(0).layoutBase.FDLayoutConstants; +var CoSEConstants = __nested_webpack_require_3201__(0).CoSEConstants; +var CoSELayout = __nested_webpack_require_3201__(0).CoSELayout; +var CoSENode = __nested_webpack_require_3201__(0).CoSENode; +var PointD = __nested_webpack_require_3201__(0).layoutBase.PointD; +var DimensionD = __nested_webpack_require_3201__(0).layoutBase.DimensionD; + +var defaults = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // 'draft', 'default' or 'proof" + // - 'draft' fast cooling rate + // - 'default' moderate cooling rate + // - "proof" slow cooling rate + quality: 'default', + // include labels in node dimensions + nodeDimensionsIncludeLabels: false, + // number of ticks per frame; higher is faster but more jerky + refresh: 30, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 10, + // Whether to enable incremental mode + randomize: true, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: 4500, + // Ideal edge (non nested) length + idealEdgeLength: 50, + // Divisor to compute edge forces + edgeElasticity: 0.45, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 0.1, + // Gravity force (constant) + gravity: 0.25, + // Maximum number of iterations to perform + numIter: 2500, + // For enabling tiling + tile: true, + // Type of layout animation. The option set is {'during', 'end', false} + animate: 'end', + // Duration for animate:end + animationDuration: 500, + // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingVertical: 10, + // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function) + tilingPaddingHorizontal: 10, + // Gravity range (constant) for compounds + gravityRangeCompound: 1.5, + // Gravity force (constant) for compounds + gravityCompound: 1.0, + // Gravity range (constant) + gravityRange: 3.8, + // Initial cooling factor for incremental layout + initialEnergyOnIncremental: 0.5 +}; + +function extend(defaults, options) { + var obj = {}; + + for (var i in defaults) { + obj[i] = defaults[i]; + } + + for (var i in options) { + obj[i] = options[i]; + } + + return obj; +}; + +function _CoSELayout(_options) { + this.options = extend(defaults, _options); + getUserOptions(this.options); +} + +var getUserOptions = function getUserOptions(options) { + if (options.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options.nodeRepulsion; + if (options.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength; + if (options.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options.edgeElasticity; + if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor; + if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity; + if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter; + if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange; + if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound; + if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound; + if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental; + + if (options.quality == 'draft') LayoutConstants.QUALITY = 0;else if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 1; + + CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels; + CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize; + CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate; + CoSEConstants.TILE = options.tile; + CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical; + CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal; +}; + +_CoSELayout.prototype.run = function () { + var ready; + var frameId; + var options = this.options; + var idToLNode = this.idToLNode = {}; + var layout = this.layout = new CoSELayout(); + var self = this; + + self.stopped = false; + + this.cy = this.options.cy; + + this.cy.trigger({ type: 'layoutstart', layout: this }); + + var gm = layout.newGraphManager(); + this.gm = gm; + + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + + this.root = gm.addRoot(); + this.processChildrenList(this.root, this.getTopMostNodes(nodes), layout); + + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var sourceNode = this.idToLNode[edge.data("source")]; + var targetNode = this.idToLNode[edge.data("target")]; + if (sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) { + var e1 = gm.add(layout.newEdge(), sourceNode, targetNode); + e1.id = edge.id(); + } + } + + var getPositions = function getPositions(ele, i) { + if (typeof ele === "number") { + ele = i; + } + var theId = ele.data('id'); + var lNode = self.idToLNode[theId]; + + return { + x: lNode.getRect().getCenterX(), + y: lNode.getRect().getCenterY() + }; + }; + + /* + * Reposition nodes in iterations animatedly + */ + var iterateAnimated = function iterateAnimated() { + // Thigs to perform after nodes are repositioned on screen + var afterReposition = function afterReposition() { + if (options.fit) { + options.cy.fit(options.eles, options.padding); + } + + if (!ready) { + ready = true; + self.cy.one('layoutready', options.ready); + self.cy.trigger({ type: 'layoutready', layout: self }); + } + }; + + var ticksPerFrame = self.options.refresh; + var isDone; + + for (var i = 0; i < ticksPerFrame && !isDone; i++) { + isDone = self.stopped || self.layout.tick(); + } + + // If layout is done + if (isDone) { + // If the layout is not a sublayout and it is successful perform post layout. + if (layout.checkLayoutSuccess() && !layout.isSubLayout) { + layout.doPostLayout(); + } + + // If layout has a tilingPostLayout function property call it. + if (layout.tilingPostLayout) { + layout.tilingPostLayout(); + } + + layout.isLayoutFinished = true; + + self.options.eles.nodes().positions(getPositions); + + afterReposition(); + + // trigger layoutstop when the layout stops (e.g. finishes) + self.cy.one('layoutstop', self.options.stop); + self.cy.trigger({ type: 'layoutstop', layout: self }); + + if (frameId) { + cancelAnimationFrame(frameId); + } + + ready = false; + return; + } + + var animationData = self.layout.getPositionsData(); // Get positions of layout nodes note that all nodes may not be layout nodes because of tiling + + // Position nodes, for the nodes whose id does not included in data (because they are removed from their parents and included in dummy compounds) + // use position of their ancestors or dummy ancestors + options.eles.nodes().positions(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + // If ele is a compound node, then its position will be defined by its children + if (!ele.isParent()) { + var theId = ele.id(); + var pNode = animationData[theId]; + var temp = ele; + // If pNode is undefined search until finding position data of its first ancestor (It may be dummy as well) + while (pNode == null) { + pNode = animationData[temp.data('parent')] || animationData['DummyCompound_' + temp.data('parent')]; + animationData[theId] = pNode; + temp = temp.parent()[0]; + if (temp == undefined) { + break; + } + } + if (pNode != null) { + return { + x: pNode.x, + y: pNode.y + }; + } else { + return { + x: ele.position('x'), + y: ele.position('y') + }; + } + } + }); + + afterReposition(); + + frameId = requestAnimationFrame(iterateAnimated); + }; + + /* + * Listen 'layoutstarted' event and start animated iteration if animate option is 'during' + */ + layout.addListener('layoutstarted', function () { + if (self.options.animate === 'during') { + frameId = requestAnimationFrame(iterateAnimated); + } + }); + + layout.runLayout(); // Run cose layout + + /* + * If animate option is not 'during' ('end' or false) perform these here (If it is 'during' similar things are already performed) + */ + if (this.options.animate !== "during") { + self.options.eles.nodes().not(":parent").layoutPositions(self, self.options, getPositions); // Use layout positions to reposition the nodes it considers the options parameter + ready = false; + } + + return this; // chaining +}; + +//Get the top most ones of a list of nodes +_CoSELayout.prototype.getTopMostNodes = function (nodes) { + var nodesMap = {}; + for (var i = 0; i < nodes.length; i++) { + nodesMap[nodes[i].id()] = true; + } + var roots = nodes.filter(function (ele, i) { + if (typeof ele === "number") { + ele = i; + } + var parent = ele.parent()[0]; + while (parent != null) { + if (nodesMap[parent.id()]) { + return false; + } + parent = parent.parent()[0]; + } + return true; + }); + + return roots; +}; + +_CoSELayout.prototype.processChildrenList = function (parent, children, layout) { + var size = children.length; + for (var i = 0; i < size; i++) { + var theChild = children[i]; + var children_of_children = theChild.children(); + var theNode; + + var dimensions = theChild.layoutDimensions({ + nodeDimensionsIncludeLabels: this.options.nodeDimensionsIncludeLabels + }); + + if (theChild.outerWidth() != null && theChild.outerHeight() != null) { + theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h)))); + } else { + theNode = parent.add(new CoSENode(this.graphManager)); + } + // Attach id to the layout node + theNode.id = theChild.data("id"); + // Attach the paddings of cy node to layout node + theNode.paddingLeft = parseInt(theChild.css('padding')); + theNode.paddingTop = parseInt(theChild.css('padding')); + theNode.paddingRight = parseInt(theChild.css('padding')); + theNode.paddingBottom = parseInt(theChild.css('padding')); + + //Attach the label properties to compound if labels will be included in node dimensions + if (this.options.nodeDimensionsIncludeLabels) { + if (theChild.isParent()) { + var labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false }).w; + var labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false }).h; + var labelPos = theChild.css("text-halign"); + theNode.labelWidth = labelWidth; + theNode.labelHeight = labelHeight; + theNode.labelPos = labelPos; + } + } + + // Map the layout node + this.idToLNode[theChild.data("id")] = theNode; + + if (isNaN(theNode.rect.x)) { + theNode.rect.x = 0; + } + + if (isNaN(theNode.rect.y)) { + theNode.rect.y = 0; + } + + if (children_of_children != null && children_of_children.length > 0) { + var theNewGraph; + theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode); + this.processChildrenList(theNewGraph, children_of_children, layout); + } + } +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +_CoSELayout.prototype.stop = function () { + this.stopped = true; + + return this; // chaining +}; + +var register = function register(cytoscape) { + // var Layout = getLayout( cytoscape ); + + cytoscape('layout', 'cose-bilkent', _CoSELayout); +}; + +// auto reg for globals +if (typeof cytoscape !== 'undefined') { + register(cytoscape); +} + +module.exports = register; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 59058: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +/** + * Copyright (c) 2016-2023, The Cytoscape Consortium. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the “Software”), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + + +var debounce = __webpack_require__(23279); +var Heap = __webpack_require__(54485); +var get = __webpack_require__(27361); +var set = __webpack_require__(36968); +var toPath = __webpack_require__(30084); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce); +var Heap__default = /*#__PURE__*/_interopDefaultLegacy(Heap); +var get__default = /*#__PURE__*/_interopDefaultLegacy(get); +var set__default = /*#__PURE__*/_interopDefaultLegacy(set); +var toPath__default = /*#__PURE__*/_interopDefaultLegacy(toPath); + +function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); +} +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); +} +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} +function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + var _s, _e; + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + return _arr; +} +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; +} +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +var _window = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef + +var navigator = _window ? _window.navigator : null; +_window ? _window.document : null; +var typeofstr = _typeof(''); +var typeofobj = _typeof({}); +var typeoffn = _typeof(function () {}); +var typeofhtmlele = typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement); +var instanceStr = function instanceStr(obj) { + return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null; +}; + +var string = function string(obj) { + return obj != null && _typeof(obj) == typeofstr; +}; +var fn$6 = function fn(obj) { + return obj != null && _typeof(obj) === typeoffn; +}; +var array = function array(obj) { + return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array); +}; +var plainObject = function plainObject(obj) { + return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object; +}; +var object = function object(obj) { + return obj != null && _typeof(obj) === typeofobj; +}; +var number$1 = function number(obj) { + return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj); +}; +var integer = function integer(obj) { + return number$1(obj) && Math.floor(obj) === obj; +}; +var htmlElement = function htmlElement(obj) { + if ('undefined' === typeofhtmlele) { + return undefined; + } else { + return null != obj && obj instanceof HTMLElement; + } +}; +var elementOrCollection = function elementOrCollection(obj) { + return element(obj) || collection(obj); +}; +var element = function element(obj) { + return instanceStr(obj) === 'collection' && obj._private.single; +}; +var collection = function collection(obj) { + return instanceStr(obj) === 'collection' && !obj._private.single; +}; +var core = function core(obj) { + return instanceStr(obj) === 'core'; +}; +var stylesheet = function stylesheet(obj) { + return instanceStr(obj) === 'stylesheet'; +}; +var event = function event(obj) { + return instanceStr(obj) === 'event'; +}; +var emptyString = function emptyString(obj) { + if (obj === undefined || obj === null) { + // null is empty + return true; + } else if (obj === '' || obj.match(/^\s+$/)) { + return true; // empty string is empty + } + + return false; // otherwise, we don't know what we've got +}; +var domElement = function domElement(obj) { + if (typeof HTMLElement === 'undefined') { + return false; // we're not in a browser so it doesn't matter + } else { + return obj instanceof HTMLElement; + } +}; +var boundingBox = function boundingBox(obj) { + return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2); +}; +var promise = function promise(obj) { + return object(obj) && fn$6(obj.then); +}; +var ms = function ms() { + return navigator && navigator.userAgent.match(/msie|trident|edge/i); +}; // probably a better way to detect this... + +var memoize = function memoize(fn, keyFn) { + if (!keyFn) { + keyFn = function keyFn() { + if (arguments.length === 1) { + return arguments[0]; + } else if (arguments.length === 0) { + return 'undefined'; + } + var args = []; + for (var i = 0; i < arguments.length; i++) { + args.push(arguments[i]); + } + return args.join('$'); + }; + } + var memoizedFn = function memoizedFn() { + var self = this; + var args = arguments; + var ret; + var k = keyFn.apply(self, args); + var cache = memoizedFn.cache; + if (!(ret = cache[k])) { + ret = cache[k] = fn.apply(self, args); + } + return ret; + }; + memoizedFn.cache = {}; + return memoizedFn; +}; + +var camel2dash = memoize(function (str) { + return str.replace(/([A-Z])/g, function (v) { + return '-' + v.toLowerCase(); + }); +}); +var dash2camel = memoize(function (str) { + return str.replace(/(-\w)/g, function (v) { + return v[1].toUpperCase(); + }); +}); +var prependCamel = memoize(function (prefix, str) { + return prefix + str[0].toUpperCase() + str.substring(1); +}, function (prefix, str) { + return prefix + '$' + str; +}); +var capitalize = function capitalize(str) { + if (emptyString(str)) { + return str; + } + return str.charAt(0).toUpperCase() + str.substring(1); +}; + +var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))'; +var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)'; +var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)'; +var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)'; +var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)'; +var hex3 = '\\#[0-9a-fA-F]{3}'; +var hex6 = '\\#[0-9a-fA-F]{6}'; + +var ascending = function ascending(a, b) { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } +}; +var descending = function descending(a, b) { + return -1 * ascending(a, b); +}; + +var extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) { + var args = arguments; + for (var i = 1; i < args.length; i++) { + var obj = args[i]; + if (obj == null) { + continue; + } + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; j++) { + var k = keys[j]; + tgt[k] = obj[k]; + } + } + return tgt; +}; + +// get [r, g, b] from #abc or #aabbcc +var hex2tuple = function hex2tuple(hex) { + if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') { + return; + } + var shortHex = hex.length === 4; + var r, g, b; + var base = 16; + if (shortHex) { + r = parseInt(hex[1] + hex[1], base); + g = parseInt(hex[2] + hex[2], base); + b = parseInt(hex[3] + hex[3], base); + } else { + r = parseInt(hex[1] + hex[2], base); + g = parseInt(hex[3] + hex[4], base); + b = parseInt(hex[5] + hex[6], base); + } + return [r, g, b]; +}; + +// get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0) +var hsl2tuple = function hsl2tuple(hsl) { + var ret; + var h, s, l, a, r, g, b; + function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + } + var m = new RegExp('^' + hsla + '$').exec(hsl); + if (m) { + // get hue + h = parseInt(m[1]); + if (h < 0) { + h = (360 - -1 * h % 360) % 360; + } else if (h > 360) { + h = h % 360; + } + h /= 360; // normalise on [0, 1] + + s = parseFloat(m[2]); + if (s < 0 || s > 100) { + return; + } // saturation is [0, 100] + s = s / 100; // normalise on [0, 1] + + l = parseFloat(m[3]); + if (l < 0 || l > 100) { + return; + } // lightness is [0, 100] + l = l / 100; // normalise on [0, 1] + + a = m[4]; + if (a !== undefined) { + a = parseFloat(a); + if (a < 0 || a > 1) { + return; + } // alpha is [0, 1] + } + + // now, convert to rgb + // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript + if (s === 0) { + r = g = b = Math.round(l * 255); // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = Math.round(255 * hue2rgb(p, q, h + 1 / 3)); + g = Math.round(255 * hue2rgb(p, q, h)); + b = Math.round(255 * hue2rgb(p, q, h - 1 / 3)); + } + ret = [r, g, b, a]; + } + return ret; +}; + +// get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0) +var rgb2tuple = function rgb2tuple(rgb) { + var ret; + var m = new RegExp('^' + rgba + '$').exec(rgb); + if (m) { + ret = []; + var isPct = []; + for (var i = 1; i <= 3; i++) { + var channel = m[i]; + if (channel[channel.length - 1] === '%') { + isPct[i] = true; + } + channel = parseFloat(channel); + if (isPct[i]) { + channel = channel / 100 * 255; // normalise to [0, 255] + } + + if (channel < 0 || channel > 255) { + return; + } // invalid channel value + + ret.push(Math.floor(channel)); + } + var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3]; + var allArePct = isPct[1] && isPct[2] && isPct[3]; + if (atLeastOneIsPct && !allArePct) { + return; + } // must all be percent values if one is + + var alpha = m[4]; + if (alpha !== undefined) { + alpha = parseFloat(alpha); + if (alpha < 0 || alpha > 1) { + return; + } // invalid alpha value + + ret.push(alpha); + } + } + return ret; +}; +var colorname2tuple = function colorname2tuple(color) { + return colors[color.toLowerCase()]; +}; +var color2tuple = function color2tuple(color) { + return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color); +}; +var colors = { + // special colour names + transparent: [0, 0, 0, 0], + // NB alpha === 0 + + // regular colours + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + grey: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] +}; + +// sets the value in a map (map may not be built) +var setMap = function setMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (plainObject(key)) { + throw Error('Tried to set map with object key'); + } + if (i < keys.length - 1) { + // extend the map if necessary + if (obj[key] == null) { + obj[key] = {}; + } + obj = obj[key]; + } else { + // set the value + obj[key] = options.value; + } + } +}; + +// gets the value in a map even if it's not built in places +var getMap = function getMap(options) { + var obj = options.map; + var keys = options.keys; + var l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (plainObject(key)) { + throw Error('Tried to get map with object key'); + } + obj = obj[key]; + if (obj == null) { + return obj; + } + } + return obj; +}; + +var performance = _window ? _window.performance : null; +var pnow = performance && performance.now ? function () { + return performance.now(); +} : function () { + return Date.now(); +}; +var raf = function () { + if (_window) { + if (_window.requestAnimationFrame) { + return function (fn) { + _window.requestAnimationFrame(fn); + }; + } else if (_window.mozRequestAnimationFrame) { + return function (fn) { + _window.mozRequestAnimationFrame(fn); + }; + } else if (_window.webkitRequestAnimationFrame) { + return function (fn) { + _window.webkitRequestAnimationFrame(fn); + }; + } else if (_window.msRequestAnimationFrame) { + return function (fn) { + _window.msRequestAnimationFrame(fn); + }; + } + } + return function (fn) { + if (fn) { + setTimeout(function () { + fn(pnow()); + }, 1000 / 60); + } + }; +}(); +var requestAnimationFrame = function requestAnimationFrame(fn) { + return raf(fn); +}; +var performanceNow = pnow; + +var DEFAULT_HASH_SEED = 9261; +var K = 65599; // 37 also works pretty well +var DEFAULT_HASH_SEED_ALT = 5381; +var hashIterableInts = function hashIterableInts(iterator) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + var hash = seed; + var entry; + for (;;) { + entry = iterator.next(); + if (entry.done) { + break; + } + hash = hash * K + entry.value | 0; + } + return hash; +}; +var hashInt = function hashInt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED; + // sdbm/string-hash + return seed * K + num | 0; +}; +var hashIntAlt = function hashIntAlt(num) { + var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT; + // djb2/string-hash + return (seed << 5) + seed + num | 0; +}; +var combineHashes = function combineHashes(hash1, hash2) { + return hash1 * 0x200000 + hash2; +}; +var combineHashesArray = function combineHashesArray(hashes) { + return hashes[0] * 0x200000 + hashes[1]; +}; +var hashArrays = function hashArrays(hashes1, hashes2) { + return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])]; +}; +var hashIntsArray = function hashIntsArray(ints, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = ints.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = ints[i++]; + } else { + entry.done = true; + } + return entry; + } + }; + return hashIterableInts(iterator, seed); +}; +var hashString = function hashString(str, seed) { + var entry = { + value: 0, + done: false + }; + var i = 0; + var length = str.length; + var iterator = { + next: function next() { + if (i < length) { + entry.value = str.charCodeAt(i++); + } else { + entry.done = true; + } + return entry; + } + }; + return hashIterableInts(iterator, seed); +}; +var hashStrings = function hashStrings() { + return hashStringsArray(arguments); +}; +var hashStringsArray = function hashStringsArray(strs) { + var hash; + for (var i = 0; i < strs.length; i++) { + var str = strs[i]; + if (i === 0) { + hash = hashString(str); + } else { + hash = hashString(str, hash); + } + } + return hash; +}; + +/*global console */ +var warningsEnabled = true; +var warnSupported = console.warn != null; // eslint-disable-line no-console +var traceSupported = console.trace != null; // eslint-disable-line no-console + +var MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991; +var trueify = function trueify() { + return true; +}; +var falsify = function falsify() { + return false; +}; +var zeroify = function zeroify() { + return 0; +}; +var noop$1 = function noop() {}; +var error = function error(msg) { + throw new Error(msg); +}; +var warnings = function warnings(enabled) { + if (enabled !== undefined) { + warningsEnabled = !!enabled; + } else { + return warningsEnabled; + } +}; +var warn = function warn(msg) { + /* eslint-disable no-console */ + if (!warnings()) { + return; + } + if (warnSupported) { + console.warn(msg); + } else { + console.log(msg); + if (traceSupported) { + console.trace(); + } + } +}; /* eslint-enable */ + +var clone = function clone(obj) { + return extend({}, obj); +}; + +// gets a shallow copy of the argument +var copy = function copy(obj) { + if (obj == null) { + return obj; + } + if (array(obj)) { + return obj.slice(); + } else if (plainObject(obj)) { + return clone(obj); + } else { + return obj; + } +}; +var copyArray = function copyArray(arr) { + return arr.slice(); +}; +var uuid = function uuid(a, b /* placeholders */) { + for ( + // loop :) + b = a = ''; + // b - result , a - numeric letiable + a++ < 36; + // + b += a * 51 & 52 // if "a" is not 9 or 14 or 19 or 24 + ? + // return a random number or 4 + (a ^ 15 // if "a" is not 15 + ? + // generate a random number from 0 to 15 + 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless "a" is 20, in which case a random number from 8 to 11 + : 4 // otherwise 4 + ).toString(16) : '-' // in other cases (if "a" is 9,14,19,24) insert "-" + ) { + } + return b; +}; +var _staticEmptyObject = {}; +var staticEmptyObject = function staticEmptyObject() { + return _staticEmptyObject; +}; +var defaults$g = function defaults(_defaults) { + var keys = Object.keys(_defaults); + return function (opts) { + var filledOpts = {}; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var optVal = opts == null ? undefined : opts[key]; + filledOpts[key] = optVal === undefined ? _defaults[key] : optVal; + } + return filledOpts; + }; +}; +var removeFromArray = function removeFromArray(arr, ele, oneCopy) { + for (var i = arr.length - 1; i >= 0; i--) { + if (arr[i] === ele) { + arr.splice(i, 1); + if (oneCopy) { + break; + } + } + } +}; +var clearArray = function clearArray(arr) { + arr.splice(0, arr.length); +}; +var push = function push(arr, otherArr) { + for (var i = 0; i < otherArr.length; i++) { + var el = otherArr[i]; + arr.push(el); + } +}; +var getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + return obj[propName]; +}; +var setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) { + if (prefix) { + propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth + } + + obj[propName] = value; +}; + +/* global Map */ +var ObjectMap = /*#__PURE__*/function () { + function ObjectMap() { + _classCallCheck(this, ObjectMap); + this._obj = {}; + } + _createClass(ObjectMap, [{ + key: "set", + value: function set(key, val) { + this._obj[key] = val; + return this; + } + }, { + key: "delete", + value: function _delete(key) { + this._obj[key] = undefined; + return this; + } + }, { + key: "clear", + value: function clear() { + this._obj = {}; + } + }, { + key: "has", + value: function has(key) { + return this._obj[key] !== undefined; + } + }, { + key: "get", + value: function get(key) { + return this._obj[key]; + } + }]); + return ObjectMap; +}(); +var Map$1 = typeof Map !== 'undefined' ? Map : ObjectMap; + +/* global Set */ + +var undef = "undefined" ; +var ObjectSet = /*#__PURE__*/function () { + function ObjectSet(arrayOrObjectSet) { + _classCallCheck(this, ObjectSet); + this._obj = Object.create(null); + this.size = 0; + if (arrayOrObjectSet != null) { + var arr; + if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) { + arr = arrayOrObjectSet.toArray(); + } else { + arr = arrayOrObjectSet; + } + for (var i = 0; i < arr.length; i++) { + this.add(arr[i]); + } + } + } + _createClass(ObjectSet, [{ + key: "instanceString", + value: function instanceString() { + return 'set'; + } + }, { + key: "add", + value: function add(val) { + var o = this._obj; + if (o[val] !== 1) { + o[val] = 1; + this.size++; + } + } + }, { + key: "delete", + value: function _delete(val) { + var o = this._obj; + if (o[val] === 1) { + o[val] = 0; + this.size--; + } + } + }, { + key: "clear", + value: function clear() { + this._obj = Object.create(null); + } + }, { + key: "has", + value: function has(val) { + return this._obj[val] === 1; + } + }, { + key: "toArray", + value: function toArray() { + var _this = this; + return Object.keys(this._obj).filter(function (key) { + return _this.has(key); + }); + } + }, { + key: "forEach", + value: function forEach(callback, thisArg) { + return this.toArray().forEach(callback, thisArg); + } + }]); + return ObjectSet; +}(); +var Set$1 = (typeof Set === "undefined" ? "undefined" : _typeof(Set)) !== undef ? Set : ObjectSet; + +// represents a node or an edge +var Element = function Element(cy, params) { + var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + if (cy === undefined || params === undefined || !core(cy)) { + error('An element must have a core reference and parameters set'); + return; + } + var group = params.group; + + // try to automatically infer the group if unspecified + if (group == null) { + if (params.data && params.data.source != null && params.data.target != null) { + group = 'edges'; + } else { + group = 'nodes'; + } + } + + // validate group + if (group !== 'nodes' && group !== 'edges') { + error('An element must be of type `nodes` or `edges`; you specified `' + group + '`'); + return; + } + + // make the element array-like, just like a collection + this.length = 1; + this[0] = this; + + // NOTE: when something is added here, add also to ele.json() + var _p = this._private = { + cy: cy, + single: true, + // indicates this is an element + data: params.data || {}, + // data object + position: params.position || { + x: 0, + y: 0 + }, + // (x, y) position pair + autoWidth: undefined, + // width and height of nodes calculated by the renderer when set to special 'auto' value + autoHeight: undefined, + autoPadding: undefined, + compoundBoundsClean: false, + // whether the compound dimensions need to be recalculated the next time dimensions are read + listeners: [], + // array of bound listeners + group: group, + // string; 'nodes' or 'edges' + style: {}, + // properties as set by the style + rstyle: {}, + // properties for style sent from the renderer to the core + styleCxts: [], + // applied style contexts from the styler + styleKeys: {}, + // per-group keys of style property values + removed: true, + // whether it's inside the vis; true if removed (set true here since we call restore) + selected: params.selected ? true : false, + // whether it's selected + selectable: params.selectable === undefined ? true : params.selectable ? true : false, + // whether it's selectable + locked: params.locked ? true : false, + // whether the element is locked (cannot be moved) + grabbed: false, + // whether the element is grabbed by the mouse; renderer sets this privately + grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false, + // whether the element can be grabbed + pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false, + // whether the element has passthrough panning enabled + active: false, + // whether the element is active from user interaction + classes: new Set$1(), + // map ( className => true ) + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + rscratch: {}, + // object in which the renderer can store information + scratch: params.scratch || {}, + // scratch objects + edges: [], + // array of connected edges + children: [], + // array of children + parent: params.parent && params.parent.isNode() ? params.parent : null, + // parent ref + traversalCache: {}, + // cache of output of traversal functions + backgrounding: false, + // whether background images are loading + bbCache: null, + // cache of the current bounding box + bbCacheShift: { + x: 0, + y: 0 + }, + // shift applied to cached bb to be applied on next get + bodyBounds: null, + // bounds cache of element body, w/o overlay + overlayBounds: null, + // bounds cache of element body, including overlay + labelBounds: { + // bounds cache of labels + all: null, + source: null, + target: null, + main: null + }, + arrowBounds: { + // bounds cache of edge arrows + source: null, + target: null, + 'mid-source': null, + 'mid-target': null + } + }; + if (_p.position.x == null) { + _p.position.x = 0; + } + if (_p.position.y == null) { + _p.position.y = 0; + } + + // renderedPosition overrides if specified + if (params.renderedPosition) { + var rpos = params.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + _p.position = { + x: (rpos.x - pan.x) / zoom, + y: (rpos.y - pan.y) / zoom + }; + } + var classes = []; + if (array(params.classes)) { + classes = params.classes; + } else if (string(params.classes)) { + classes = params.classes.split(/\s+/); + } + for (var i = 0, l = classes.length; i < l; i++) { + var cls = classes[i]; + if (!cls || cls === '') { + continue; + } + _p.classes.add(cls); + } + this.createEmitter(); + var bypass = params.style || params.css; + if (bypass) { + warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.'); + this.style(bypass); + } + if (restore === undefined || restore) { + this.restore(); + } +}; + +var defineSearch = function defineSearch(params) { + params = { + bfs: params.bfs || !params.dfs, + dfs: params.dfs || !params.bfs + }; + + // from pseudocode on wikipedia + return function searchFn(roots, fn, directed) { + var options; + if (plainObject(roots) && !elementOrCollection(roots)) { + options = roots; + roots = options.roots || options.root; + fn = options.visit; + directed = options.directed; + } + directed = arguments.length === 2 && !fn$6(fn) ? fn : directed; + fn = fn$6(fn) ? fn : function () {}; + var cy = this._private.cy; + var v = roots = string(roots) ? this.filter(roots) : roots; + var Q = []; + var connectedNodes = []; + var connectedBy = {}; + var id2depth = {}; + var V = {}; + var j = 0; + var found; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + + // enqueue v + for (var i = 0; i < v.length; i++) { + var vi = v[i]; + var viId = vi.id(); + if (vi.isNode()) { + Q.unshift(vi); + if (params.bfs) { + V[viId] = true; + connectedNodes.push(vi); + } + id2depth[viId] = 0; + } + } + var _loop = function _loop() { + var v = params.bfs ? Q.shift() : Q.pop(); + var vId = v.id(); + if (params.dfs) { + if (V[vId]) { + return "continue"; + } + V[vId] = true; + connectedNodes.push(v); + } + var depth = id2depth[vId]; + var prevEdge = connectedBy[vId]; + var src = prevEdge != null ? prevEdge.source() : null; + var tgt = prevEdge != null ? prevEdge.target() : null; + var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0]; + var ret = void 0; + ret = fn(v, prevEdge, prevNode, j++, depth); + if (ret === true) { + found = v; + return "break"; + } + if (ret === false) { + return "break"; + } + var vwEdges = v.connectedEdges().filter(function (e) { + return (!directed || e.source().same(v)) && edges.has(e); + }); + for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { + var e = vwEdges[_i2]; + var w = e.connectedNodes().filter(function (n) { + return !n.same(v) && nodes.has(n); + }); + var wId = w.id(); + if (w.length !== 0 && !V[wId]) { + w = w[0]; + Q.push(w); + if (params.bfs) { + V[wId] = true; + connectedNodes.push(w); + } + connectedBy[wId] = e; + id2depth[wId] = id2depth[vId] + 1; + } + } + }; + while (Q.length !== 0) { + var _ret = _loop(); + if (_ret === "continue") continue; + if (_ret === "break") break; + } + var connectedEles = cy.collection(); + for (var _i = 0; _i < connectedNodes.length; _i++) { + var node = connectedNodes[_i]; + var edge = connectedBy[node.id()]; + if (edge != null) { + connectedEles.push(edge); + } + connectedEles.push(node); + } + return { + path: cy.collection(connectedEles), + found: cy.collection(found) + }; + }; +}; + +// search, spanning trees, etc +var elesfn$v = { + breadthFirstSearch: defineSearch({ + bfs: true + }), + depthFirstSearch: defineSearch({ + dfs: true + }) +}; + +// nice, short mathematical alias +elesfn$v.bfs = elesfn$v.breadthFirstSearch; +elesfn$v.dfs = elesfn$v.depthFirstSearch; + +var dijkstraDefaults = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false +}); +var elesfn$u = { + dijkstra: function dijkstra(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + weight: args[1], + directed: args[2] + }; + } + var _dijkstraDefaults = dijkstraDefaults(options), + root = _dijkstraDefaults.root, + weight = _dijkstraDefaults.weight, + directed = _dijkstraDefaults.directed; + var eles = this; + var weightFn = weight; + var source = string(root) ? this.filter(root)[0] : root[0]; + var dist = {}; + var prev = {}; + var knownDist = {}; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + edges.unmergeBy(function (ele) { + return ele.isLoop(); + }); + var getDist = function getDist(node) { + return dist[node.id()]; + }; + var setDist = function setDist(node, d) { + dist[node.id()] = d; + Q.updateItem(node); + }; + var Q = new Heap__default["default"](function (a, b) { + return getDist(a) - getDist(b); + }); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + dist[node.id()] = node.same(source) ? 0 : Infinity; + Q.push(node); + } + var distBetween = function distBetween(u, v) { + var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges); + var smallestDistance = Infinity; + var smallestEdge; + for (var _i = 0; _i < uvs.length; _i++) { + var edge = uvs[_i]; + var _weight = weightFn(edge); + if (_weight < smallestDistance || !smallestEdge) { + smallestDistance = _weight; + smallestEdge = edge; + } + } + return { + edge: smallestEdge, + dist: smallestDistance + }; + }; + while (Q.size() > 0) { + var u = Q.pop(); + var smalletsDist = getDist(u); + var uid = u.id(); + knownDist[uid] = smalletsDist; + if (smalletsDist === Infinity) { + continue; + } + var neighbors = u.neighborhood().intersect(nodes); + for (var _i2 = 0; _i2 < neighbors.length; _i2++) { + var v = neighbors[_i2]; + var vid = v.id(); + var vDist = distBetween(u, v); + var alt = smalletsDist + vDist.dist; + if (alt < getDist(v)) { + setDist(v, alt); + prev[vid] = { + node: u, + edge: vDist.edge + }; + } + } // for + } // while + + return { + distanceTo: function distanceTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + return knownDist[target.id()]; + }, + pathTo: function pathTo(node) { + var target = string(node) ? nodes.filter(node)[0] : node[0]; + var S = []; + var u = target; + var uid = u.id(); + if (target.length > 0) { + S.unshift(target); + while (prev[uid]) { + var p = prev[uid]; + S.unshift(p.edge); + S.unshift(p.node); + u = p.node; + uid = u.id(); + } + } + return eles.spawn(S); + } + }; + } +}; + +var elesfn$t = { + // kruskal's algorithm (finds min spanning tree, assuming undirected graph) + // implemented from pseudocode from wikipedia + kruskal: function kruskal(weightFn) { + weightFn = weightFn || function (edge) { + return 1; + }; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + var numNodes = nodes.length; + var forest = new Array(numNodes); + var A = nodes; // assumes byGroup() creates new collections that can be safely mutated + + var findSetIndex = function findSetIndex(ele) { + for (var i = 0; i < forest.length; i++) { + var eles = forest[i]; + if (eles.has(ele)) { + return i; + } + } + }; + + // start with one forest per node + for (var i = 0; i < numNodes; i++) { + forest[i] = this.spawn(nodes[i]); + } + var S = edges.sort(function (a, b) { + return weightFn(a) - weightFn(b); + }); + for (var _i = 0; _i < S.length; _i++) { + var edge = S[_i]; + var u = edge.source()[0]; + var v = edge.target()[0]; + var setUIndex = findSetIndex(u); + var setVIndex = findSetIndex(v); + var setU = forest[setUIndex]; + var setV = forest[setVIndex]; + if (setUIndex !== setVIndex) { + A.merge(edge); + + // combine forests for u and v + setU.merge(setV); + forest.splice(setVIndex, 1); + } + } + return A; + } +}; + +var aStarDefaults = defaults$g({ + root: null, + goal: null, + weight: function weight(edge) { + return 1; + }, + heuristic: function heuristic(edge) { + return 0; + }, + directed: false +}); +var elesfn$s = { + // Implemented from pseudocode from wikipedia + aStar: function aStar(options) { + var cy = this.cy(); + var _aStarDefaults = aStarDefaults(options), + root = _aStarDefaults.root, + goal = _aStarDefaults.goal, + heuristic = _aStarDefaults.heuristic, + directed = _aStarDefaults.directed, + weight = _aStarDefaults.weight; + root = cy.collection(root)[0]; + goal = cy.collection(goal)[0]; + var sid = root.id(); + var tid = goal.id(); + var gScore = {}; + var fScore = {}; + var closedSetIds = {}; + var openSet = new Heap__default["default"](function (a, b) { + return fScore[a.id()] - fScore[b.id()]; + }); + var openSetIds = new Set$1(); + var cameFrom = {}; + var cameFromEdge = {}; + var addToOpenSet = function addToOpenSet(ele, id) { + openSet.push(ele); + openSetIds.add(id); + }; + var cMin, cMinId; + var popFromOpenSet = function popFromOpenSet() { + cMin = openSet.pop(); + cMinId = cMin.id(); + openSetIds["delete"](cMinId); + }; + var isInOpenSet = function isInOpenSet(id) { + return openSetIds.has(id); + }; + addToOpenSet(root, sid); + gScore[sid] = 0; + fScore[sid] = heuristic(root); + + // Counter + var steps = 0; + + // Main loop + while (openSet.size() > 0) { + popFromOpenSet(); + steps++; + + // If we've found our goal, then we are done + if (cMinId === tid) { + var path = []; + var pathNode = goal; + var pathNodeId = tid; + var pathEdge = cameFromEdge[pathNodeId]; + for (;;) { + path.unshift(pathNode); + if (pathEdge != null) { + path.unshift(pathEdge); + } + pathNode = cameFrom[pathNodeId]; + if (pathNode == null) { + break; + } + pathNodeId = pathNode.id(); + pathEdge = cameFromEdge[pathNodeId]; + } + return { + found: true, + distance: gScore[cMinId], + path: this.spawn(path), + steps: steps + }; + } + + // Add cMin to processed nodes + closedSetIds[cMinId] = true; + + // Update scores for neighbors of cMin + // Take into account if graph is directed or not + var vwEdges = cMin._private.edges; + for (var i = 0; i < vwEdges.length; i++) { + var e = vwEdges[i]; + + // edge must be in set of calling eles + if (!this.hasElementWithId(e.id())) { + continue; + } + + // cMin must be the source of edge if directed + if (directed && e.data('source') !== cMinId) { + continue; + } + var wSrc = e.source(); + var wTgt = e.target(); + var w = wSrc.id() !== cMinId ? wSrc : wTgt; + var wid = w.id(); + + // node must be in set of calling eles + if (!this.hasElementWithId(wid)) { + continue; + } + + // if node is in closedSet, ignore it + if (closedSetIds[wid]) { + continue; + } + + // New tentative score for node w + var tempScore = gScore[cMinId] + weight(e); + + // Update gScore for node w if: + // w not present in openSet + // OR + // tentative gScore is less than previous value + + // w not in openSet + if (!isInOpenSet(wid)) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + addToOpenSet(w, wid); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + continue; + } + + // w already in openSet, but with greater gScore + if (tempScore < gScore[wid]) { + gScore[wid] = tempScore; + fScore[wid] = tempScore + heuristic(w); + cameFrom[wid] = cMin; + cameFromEdge[wid] = e; + } + } // End of neighbors update + } // End of main loop + + // If we've reached here, then we've not reached our goal + return { + found: false, + distance: undefined, + path: undefined, + steps: steps + }; + } +}; // elesfn + +var floydWarshallDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false +}); +var elesfn$r = { + // Implemented from pseudocode from wikipedia + floydWarshall: function floydWarshall(options) { + var cy = this.cy(); + var _floydWarshallDefault = floydWarshallDefaults(options), + weight = _floydWarshallDefault.weight, + directed = _floydWarshallDefault.directed; + var weightFn = weight; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + var N = nodes.length; + var Nsq = N * N; + var indexOf = function indexOf(node) { + return nodes.indexOf(node); + }; + var atIndex = function atIndex(i) { + return nodes[i]; + }; + + // Initialize distance matrix + var dist = new Array(Nsq); + for (var n = 0; n < Nsq; n++) { + var j = n % N; + var i = (n - j) / N; + if (i === j) { + dist[n] = 0; + } else { + dist[n] = Infinity; + } + } + + // Initialize matrix used for path reconstruction + // Initialize distance matrix + var next = new Array(Nsq); + var edgeNext = new Array(Nsq); + + // Process edges + for (var _i = 0; _i < edges.length; _i++) { + var edge = edges[_i]; + var src = edge.source()[0]; + var tgt = edge.target()[0]; + if (src === tgt) { + continue; + } // exclude loops + + var s = indexOf(src); + var t = indexOf(tgt); + var st = s * N + t; // source to target index + var _weight = weightFn(edge); + + // Check if already process another edge between same 2 nodes + if (dist[st] > _weight) { + dist[st] = _weight; + next[st] = t; + edgeNext[st] = edge; + } + + // If undirected graph, process 'reversed' edge + if (!directed) { + var ts = t * N + s; // target to source index + + if (!directed && dist[ts] > _weight) { + dist[ts] = _weight; + next[ts] = s; + edgeNext[ts] = edge; + } + } + } + + // Main loop + for (var k = 0; k < N; k++) { + for (var _i2 = 0; _i2 < N; _i2++) { + var ik = _i2 * N + k; + for (var _j = 0; _j < N; _j++) { + var ij = _i2 * N + _j; + var kj = k * N + _j; + if (dist[ik] + dist[kj] < dist[ij]) { + dist[ij] = dist[ik] + dist[kj]; + next[ij] = next[ik]; + } + } + } + } + var getArgEle = function getArgEle(ele) { + return (string(ele) ? cy.filter(ele) : ele)[0]; + }; + var indexOfArgEle = function indexOfArgEle(ele) { + return indexOf(getArgEle(ele)); + }; + var res = { + distance: function distance(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + return dist[i * N + j]; + }, + path: function path(from, to) { + var i = indexOfArgEle(from); + var j = indexOfArgEle(to); + var fromNode = atIndex(i); + if (i === j) { + return fromNode.collection(); + } + if (next[i * N + j] == null) { + return cy.collection(); + } + var path = cy.collection(); + var prev = i; + var edge; + path.merge(fromNode); + while (i !== j) { + prev = i; + i = next[i * N + j]; + edge = edgeNext[prev * N + i]; + path.merge(edge); + path.merge(atIndex(i)); + } + return path; + } + }; + return res; + } // floydWarshall +}; // elesfn + +var bellmanFordDefaults = defaults$g({ + weight: function weight(edge) { + return 1; + }, + directed: false, + root: null +}); +var elesfn$q = { + // Implemented from pseudocode from wikipedia + bellmanFord: function bellmanFord(options) { + var _this = this; + var _bellmanFordDefaults = bellmanFordDefaults(options), + weight = _bellmanFordDefaults.weight, + directed = _bellmanFordDefaults.directed, + root = _bellmanFordDefaults.root; + var weightFn = weight; + var eles = this; + var cy = this.cy(); + var _this$byGroup = this.byGroup(), + edges = _this$byGroup.edges, + nodes = _this$byGroup.nodes; + var numNodes = nodes.length; + var infoMap = new Map$1(); + var hasNegativeWeightCycle = false; + var negativeWeightCycles = []; + root = cy.collection(root)[0]; // in case selector passed + + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numEdges = edges.length; + var getInfo = function getInfo(node) { + var obj = infoMap.get(node.id()); + if (!obj) { + obj = {}; + infoMap.set(node.id(), obj); + } + return obj; + }; + var getNodeFromTo = function getNodeFromTo(to) { + return (string(to) ? cy.$(to) : to)[0]; + }; + var distanceTo = function distanceTo(to) { + return getInfo(getNodeFromTo(to)).dist; + }; + var pathTo = function pathTo(to) { + var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root; + var end = getNodeFromTo(to); + var path = []; + var node = end; + for (;;) { + if (node == null) { + return _this.spawn(); + } + var _getInfo = getInfo(node), + edge = _getInfo.edge, + pred = _getInfo.pred; + path.unshift(node[0]); + if (node.same(thisStart) && path.length > 0) { + break; + } + if (edge != null) { + path.unshift(edge); + } + node = pred; + } + return eles.spawn(path); + }; + + // Initializations { dist, pred, edge } + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + var info = getInfo(node); + if (node.same(root)) { + info.dist = 0; + } else { + info.dist = Infinity; + } + info.pred = null; + info.edge = null; + } + + // Edges relaxation + var replacedEdge = false; + var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) { + var dist = info1.dist + weight; + if (dist < info2.dist && !edge.same(info1.edge)) { + info2.dist = dist; + info2.pred = node1; + info2.edge = edge; + replacedEdge = true; + } + }; + for (var _i = 1; _i < numNodes; _i++) { + replacedEdge = false; + for (var e = 0; e < numEdges; e++) { + var edge = edges[e]; + var src = edge.source(); + var tgt = edge.target(); + var _weight = weightFn(edge); + var srcInfo = getInfo(src); + var tgtInfo = getInfo(tgt); + checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight); + + // If undirected graph, we need to take into account the 'reverse' edge + if (!directed) { + checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight); + } + } + if (!replacedEdge) { + break; + } + } + if (replacedEdge) { + // Check for negative weight cycles + var negativeWeightCycleIds = []; + for (var _e = 0; _e < numEdges; _e++) { + var _edge = edges[_e]; + var _src = _edge.source(); + var _tgt = _edge.target(); + var _weight2 = weightFn(_edge); + var srcDist = getInfo(_src).dist; + var tgtDist = getInfo(_tgt).dist; + if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) { + if (!hasNegativeWeightCycle) { + warn('Graph contains a negative weight cycle for Bellman-Ford'); + hasNegativeWeightCycle = true; + } + if (options.findNegativeWeightCycles !== false) { + var negativeNodes = []; + if (srcDist + _weight2 < tgtDist) { + negativeNodes.push(_src); + } + if (!directed && tgtDist + _weight2 < srcDist) { + negativeNodes.push(_tgt); + } + var numNegativeNodes = negativeNodes.length; + for (var n = 0; n < numNegativeNodes; n++) { + var start = negativeNodes[n]; + var cycle = [start]; + cycle.push(getInfo(start).edge); + var _node = getInfo(start).pred; + while (cycle.indexOf(_node) === -1) { + cycle.push(_node); + cycle.push(getInfo(_node).edge); + _node = getInfo(_node).pred; + } + cycle = cycle.slice(cycle.indexOf(_node)); + var smallestId = cycle[0].id(); + var smallestIndex = 0; + for (var c = 2; c < cycle.length; c += 2) { + if (cycle[c].id() < smallestId) { + smallestId = cycle[c].id(); + smallestIndex = c; + } + } + cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex)); + cycle.push(cycle[0]); + var cycleId = cycle.map(function (el) { + return el.id(); + }).join(","); + if (negativeWeightCycleIds.indexOf(cycleId) === -1) { + negativeWeightCycles.push(eles.spawn(cycle)); + negativeWeightCycleIds.push(cycleId); + } + } + } else { + break; + } + } + } + } + return { + distanceTo: distanceTo, + pathTo: pathTo, + hasNegativeWeightCycle: hasNegativeWeightCycle, + negativeWeightCycles: negativeWeightCycles + }; + } // bellmanFord +}; // elesfn + +var sqrt2 = Math.sqrt(2); + +// Function which colapses 2 (meta) nodes into one +// Updates the remaining edge lists +// Receives as a paramater the edge which causes the collapse +var collapse = function collapse(edgeIndex, nodeMap, remainingEdges) { + if (remainingEdges.length === 0) { + error("Karger-Stein must be run on a connected (sub)graph"); + } + var edgeInfo = remainingEdges[edgeIndex]; + var sourceIn = edgeInfo[1]; + var targetIn = edgeInfo[2]; + var partition1 = nodeMap[sourceIn]; + var partition2 = nodeMap[targetIn]; + var newEdges = remainingEdges; // re-use array + + // Delete all edges between partition1 and partition2 + for (var i = newEdges.length - 1; i >= 0; i--) { + var edge = newEdges[i]; + var src = edge[1]; + var tgt = edge[2]; + if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) { + newEdges.splice(i, 1); + } + } + + // All edges pointing to partition2 should now point to partition1 + for (var _i = 0; _i < newEdges.length; _i++) { + var _edge = newEdges[_i]; + if (_edge[1] === partition2) { + // Check source + newEdges[_i] = _edge.slice(); // copy + newEdges[_i][1] = partition1; + } else if (_edge[2] === partition2) { + // Check target + newEdges[_i] = _edge.slice(); // copy + newEdges[_i][2] = partition1; + } + } + + // Move all nodes from partition2 to partition1 + for (var _i2 = 0; _i2 < nodeMap.length; _i2++) { + if (nodeMap[_i2] === partition2) { + nodeMap[_i2] = partition1; + } + } + return newEdges; +}; + +// Contracts a graph until we reach a certain number of meta nodes +var contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) { + while (size > sizeLimit) { + // Choose an edge randomly + var edgeIndex = Math.floor(Math.random() * remainingEdges.length); + + // Collapse graph based on edge + remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); + size--; + } + return remainingEdges; +}; +var elesfn$p = { + // Computes the minimum cut of an undirected graph + // Returns the correct answer with high probability + kargerStein: function kargerStein() { + var _this = this; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + edges.unmergeBy(function (edge) { + return edge.isLoop(); + }); + var numNodes = nodes.length; + var numEdges = edges.length; + var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2)); + var stopSize = Math.floor(numNodes / sqrt2); + if (numNodes < 2) { + error('At least 2 nodes are required for Karger-Stein algorithm'); + return undefined; + } + + // Now store edge destination as indexes + // Format for each edge (edge index, source node index, target node index) + var edgeIndexes = []; + for (var i = 0; i < numEdges; i++) { + var e = edges[i]; + edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]); + } + + // We will store the best cut found here + var minCutSize = Infinity; + var minCutEdgeIndexes = []; + var minCutNodeMap = new Array(numNodes); + + // Initial meta node partition + var metaNodeMap = new Array(numNodes); + var metaNodeMap2 = new Array(numNodes); + var copyNodesMap = function copyNodesMap(from, to) { + for (var _i3 = 0; _i3 < numNodes; _i3++) { + to[_i3] = from[_i3]; + } + }; + + // Main loop + for (var iter = 0; iter <= numIter; iter++) { + // Reset meta node partition + for (var _i4 = 0; _i4 < numNodes; _i4++) { + metaNodeMap[_i4] = _i4; + } + + // Contract until stop point (stopSize nodes) + var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize); + var edgesState2 = edgesState.slice(); // copy + + // Create a copy of the colapsed nodes state + copyNodesMap(metaNodeMap, metaNodeMap2); + + // Run 2 iterations starting in the stop state + var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2); + var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2); + + // Is any of the 2 results the best cut so far? + if (res1.length <= res2.length && res1.length < minCutSize) { + minCutSize = res1.length; + minCutEdgeIndexes = res1; + copyNodesMap(metaNodeMap, minCutNodeMap); + } else if (res2.length <= res1.length && res2.length < minCutSize) { + minCutSize = res2.length; + minCutEdgeIndexes = res2; + copyNodesMap(metaNodeMap2, minCutNodeMap); + } + } // end of main loop + + // Construct result + var cut = this.spawn(minCutEdgeIndexes.map(function (e) { + return edges[e[0]]; + })); + var partition1 = this.spawn(); + var partition2 = this.spawn(); + + // traverse metaNodeMap for best cut + var witnessNodePartition = minCutNodeMap[0]; + for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) { + var partitionId = minCutNodeMap[_i5]; + var node = nodes[_i5]; + if (partitionId === witnessNodePartition) { + partition1.merge(node); + } else { + partition2.merge(node); + } + } + + // construct components corresponding to each disjoint subset of nodes + var constructComponent = function constructComponent(subset) { + var component = _this.spawn(); + subset.forEach(function (node) { + component.merge(node); + node.connectedEdges().forEach(function (edge) { + // ensure edge is within calling collection and edge is not in cut + if (_this.contains(edge) && !cut.contains(edge)) { + component.merge(edge); + } + }); + }); + return component; + }; + var components = [constructComponent(partition1), constructComponent(partition2)]; + var ret = { + cut: cut, + components: components, + // n.b. partitions are included to be compatible with the old api spec + // (could be removed in a future major version) + partition1: partition1, + partition2: partition2 + }; + return ret; + } +}; // elesfn + +var copyPosition = function copyPosition(p) { + return { + x: p.x, + y: p.y + }; +}; +var modelToRenderedPosition = function modelToRenderedPosition(p, zoom, pan) { + return { + x: p.x * zoom + pan.x, + y: p.y * zoom + pan.y + }; +}; +var renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) { + return { + x: (p.x - pan.x) / zoom, + y: (p.y - pan.y) / zoom + }; +}; +var array2point = function array2point(arr) { + return { + x: arr[0], + y: arr[1] + }; +}; +var min = function min(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var min = Infinity; + for (var i = begin; i < end; i++) { + var val = arr[i]; + if (isFinite(val)) { + min = Math.min(val, min); + } + } + return min; +}; +var max = function max(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var max = -Infinity; + for (var i = begin; i < end; i++) { + var val = arr[i]; + if (isFinite(val)) { + max = Math.max(val, max); + } + } + return max; +}; +var mean = function mean(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var total = 0; + var n = 0; + for (var i = begin; i < end; i++) { + var val = arr[i]; + if (isFinite(val)) { + total += val; + n++; + } + } + return total / n; +}; +var median = function median(arr) { + var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length; + var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + if (copy) { + arr = arr.slice(begin, end); + } else { + if (end < arr.length) { + arr.splice(end, arr.length - end); + } + if (begin > 0) { + arr.splice(0, begin); + } + } + + // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start + var off = 0; // offset from non-finite values + for (var i = arr.length - 1; i >= 0; i--) { + var v = arr[i]; + if (includeHoles) { + if (!isFinite(v)) { + arr[i] = -Infinity; + off++; + } + } else { + // just remove it if we don't want to consider holes + arr.splice(i, 1); + } + } + if (sort) { + arr.sort(function (a, b) { + return a - b; + }); // requires copy = true if you don't want to change the orig + } + + var len = arr.length; + var mid = Math.floor(len / 2); + if (len % 2 !== 0) { + return arr[mid + 1 + off]; + } else { + return (arr[mid - 1 + off] + arr[mid + off]) / 2; + } +}; +var deg2rad = function deg2rad(deg) { + return Math.PI * deg / 180; +}; +var getAngleFromDisp = function getAngleFromDisp(dispX, dispY) { + return Math.atan2(dispY, dispX) - Math.PI / 2; +}; +var log2 = Math.log2 || function (n) { + return Math.log(n) / Math.log(2); +}; +var signum = function signum(x) { + if (x > 0) { + return 1; + } else if (x < 0) { + return -1; + } else { + return 0; + } +}; +var dist = function dist(p1, p2) { + return Math.sqrt(sqdist(p1, p2)); +}; +var sqdist = function sqdist(p1, p2) { + var dx = p2.x - p1.x; + var dy = p2.y - p1.y; + return dx * dx + dy * dy; +}; +var inPlaceSumNormalize = function inPlaceSumNormalize(v) { + var length = v.length; + + // First, get sum of all elements + var total = 0; + for (var i = 0; i < length; i++) { + total += v[i]; + } + + // Now, divide each by the sum of all elements + for (var _i = 0; _i < length; _i++) { + v[_i] = v[_i] / total; + } + return v; +}; + +// from http://en.wikipedia.org/wiki/Bézier_curve#Quadratic_curves +var qbezierAt = function qbezierAt(p0, p1, p2, t) { + return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2; +}; +var qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) { + return { + x: qbezierAt(p0.x, p1.x, p2.x, t), + y: qbezierAt(p0.y, p1.y, p2.y, t) + }; +}; +var lineAt = function lineAt(p0, p1, t, d) { + var vec = { + x: p1.x - p0.x, + y: p1.y - p0.y + }; + var vecDist = dist(p0, p1); + var normVec = { + x: vec.x / vecDist, + y: vec.y / vecDist + }; + t = t == null ? 0 : t; + d = d != null ? d : t * vecDist; + return { + x: p0.x + normVec.x * d, + y: p0.y + normVec.y * d + }; +}; +var bound = function bound(min, val, max) { + return Math.max(min, Math.min(max, val)); +}; + +// makes a full bb (x1, y1, x2, y2, w, h) from implicit params +var makeBoundingBox = function makeBoundingBox(bb) { + if (bb == null) { + return { + x1: Infinity, + y1: Infinity, + x2: -Infinity, + y2: -Infinity, + w: 0, + h: 0 + }; + } else if (bb.x1 != null && bb.y1 != null) { + if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x2, + y2: bb.y2, + w: bb.x2 - bb.x1, + h: bb.y2 - bb.y1 + }; + } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) { + return { + x1: bb.x1, + y1: bb.y1, + x2: bb.x1 + bb.w, + y2: bb.y1 + bb.h, + w: bb.w, + h: bb.h + }; + } + } +}; +var copyBoundingBox = function copyBoundingBox(bb) { + return { + x1: bb.x1, + x2: bb.x2, + w: bb.w, + y1: bb.y1, + y2: bb.y2, + h: bb.h + }; +}; +var clearBoundingBox = function clearBoundingBox(bb) { + bb.x1 = Infinity; + bb.y1 = Infinity; + bb.x2 = -Infinity; + bb.y2 = -Infinity; + bb.w = 0; + bb.h = 0; +}; +var shiftBoundingBox = function shiftBoundingBox(bb, dx, dy) { + return { + x1: bb.x1 + dx, + x2: bb.x2 + dx, + y1: bb.y1 + dy, + y2: bb.y2 + dy, + w: bb.w, + h: bb.h + }; +}; +var updateBoundingBox = function updateBoundingBox(bb1, bb2) { + // update bb1 with bb2 bounds + + bb1.x1 = Math.min(bb1.x1, bb2.x1); + bb1.x2 = Math.max(bb1.x2, bb2.x2); + bb1.w = bb1.x2 - bb1.x1; + bb1.y1 = Math.min(bb1.y1, bb2.y1); + bb1.y2 = Math.max(bb1.y2, bb2.y2); + bb1.h = bb1.y2 - bb1.y1; +}; +var expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) { + bb.x1 = Math.min(bb.x1, x); + bb.x2 = Math.max(bb.x2, x); + bb.w = bb.x2 - bb.x1; + bb.y1 = Math.min(bb.y1, y); + bb.y2 = Math.max(bb.y2, y); + bb.h = bb.y2 - bb.y1; +}; +var expandBoundingBox = function expandBoundingBox(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + bb.x1 -= padding; + bb.x2 += padding; + bb.y1 -= padding; + bb.y2 += padding; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; +}; +var expandBoundingBoxSides = function expandBoundingBoxSides(bb) { + var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0]; + var top, right, bottom, left; + if (padding.length === 1) { + top = right = bottom = left = padding[0]; + } else if (padding.length === 2) { + top = bottom = padding[0]; + left = right = padding[1]; + } else if (padding.length === 4) { + var _padding = _slicedToArray(padding, 4); + top = _padding[0]; + right = _padding[1]; + bottom = _padding[2]; + left = _padding[3]; + } + bb.x1 -= left; + bb.x2 += right; + bb.y1 -= top; + bb.y2 += bottom; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + return bb; +}; + +// assign the values of bb2 into bb1 +var assignBoundingBox = function assignBoundingBox(bb1, bb2) { + bb1.x1 = bb2.x1; + bb1.y1 = bb2.y1; + bb1.x2 = bb2.x2; + bb1.y2 = bb2.y2; + bb1.w = bb1.x2 - bb1.x1; + bb1.h = bb1.y2 - bb1.y1; +}; +var boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) { + // case: one bb to right of other + if (bb1.x1 > bb2.x2) { + return false; + } + if (bb2.x1 > bb1.x2) { + return false; + } + + // case: one bb to left of other + if (bb1.x2 < bb2.x1) { + return false; + } + if (bb2.x2 < bb1.x1) { + return false; + } + + // case: one bb above other + if (bb1.y2 < bb2.y1) { + return false; + } + if (bb2.y2 < bb1.y1) { + return false; + } + + // case: one bb below other + if (bb1.y1 > bb2.y2) { + return false; + } + if (bb2.y1 > bb1.y2) { + return false; + } + + // otherwise, must have some overlap + return true; +}; +var inBoundingBox = function inBoundingBox(bb, x, y) { + return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2; +}; +var pointInBoundingBox = function pointInBoundingBox(bb, pt) { + return inBoundingBox(bb, pt.x, pt.y); +}; +var boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) { + return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2); +}; +var roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) { + var cornerRadius = getRoundRectangleRadius(width, height); + var halfWidth = width / 2; + var halfHeight = height / 2; + + // Check intersections with straight line segments + var straightLineIntersections; + + // Top segment, left to right + { + var topStartX = nodeX - halfWidth + cornerRadius - padding; + var topStartY = nodeY - halfHeight - padding; + var topEndX = nodeX + halfWidth - cornerRadius + padding; + var topEndY = topStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Right segment, top to bottom + { + var rightStartX = nodeX + halfWidth + padding; + var rightStartY = nodeY - halfHeight + cornerRadius - padding; + var rightEndX = rightStartX; + var rightEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Bottom segment, left to right + { + var bottomStartX = nodeX - halfWidth + cornerRadius - padding; + var bottomStartY = nodeY + halfHeight + padding; + var bottomEndX = nodeX + halfWidth - cornerRadius + padding; + var bottomEndY = bottomStartY; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Left segment, top to bottom + { + var leftStartX = nodeX - halfWidth - padding; + var leftStartY = nodeY - halfHeight + cornerRadius - padding; + var leftEndX = leftStartX; + var leftEndY = nodeY + halfHeight - cornerRadius + padding; + straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false); + if (straightLineIntersections.length > 0) { + return straightLineIntersections; + } + } + + // Check intersections with arc segments + var arcIntersections; + + // Top Left + { + var topLeftCenterX = nodeX - halfWidth + cornerRadius; + var topLeftCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + + // Top Right + { + var topRightCenterX = nodeX + halfWidth - cornerRadius; + var topRightCenterY = nodeY - halfHeight + cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + + // Bottom Right + { + var bottomRightCenterX = nodeX + halfWidth - cornerRadius; + var bottomRightCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + + // Bottom Left + { + var bottomLeftCenterX = nodeX - halfWidth + cornerRadius; + var bottomLeftCenterY = nodeY + halfHeight - cornerRadius; + arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding); + + // Ensure the intersection is on the desired quarter of the circle + if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { + return [arcIntersections[0], arcIntersections[1]]; + } + } + return []; // if nothing +}; + +var inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) { + var t = tolerance; + var x1 = Math.min(lx1, lx2); + var x2 = Math.max(lx1, lx2); + var y1 = Math.min(ly1, ly2); + var y2 = Math.max(ly1, ly2); + return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t; +}; +var inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) { + var bb = { + x1: Math.min(x1, x3, x2) - tolerance, + x2: Math.max(x1, x3, x2) + tolerance, + y1: Math.min(y1, y3, y2) - tolerance, + y2: Math.max(y1, y3, y2) + tolerance + }; + + // if outside the rough bounding box for the bezier, then it can't be a hit + if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) { + // console.log('bezier out of rough bb') + return false; + } else { + // console.log('do more expensive check'); + return true; + } +}; +var solveQuadratic = function solveQuadratic(a, b, c, val) { + c -= val; + var r = b * b - 4 * a * c; + if (r < 0) { + return []; + } + var sqrtR = Math.sqrt(r); + var denom = 2 * a; + var root1 = (-b + sqrtR) / denom; + var root2 = (-b - sqrtR) / denom; + return [root1, root2]; +}; +var solveCubic = function solveCubic(a, b, c, d, result) { + // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where + // r is the real component, i is the imaginary component + + // An implementation of the Cardano method from the year 1545 + // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots + + var epsilon = 0.00001; + + // avoid division by zero while keeping the overall expression close in value + if (a === 0) { + a = epsilon; + } + b /= a; + c /= a; + d /= a; + var discriminant, q, r, dum1, s, t, term1, r13; + q = (3.0 * c - b * b) / 9.0; + r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b)); + r /= 54.0; + discriminant = q * q * q + r * r; + result[1] = 0; + term1 = b / 3.0; + if (discriminant > 0) { + s = r + Math.sqrt(discriminant); + s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0); + t = r - Math.sqrt(discriminant); + t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0); + result[0] = -term1 + s + t; + term1 += (s + t) / 2.0; + result[4] = result[2] = -term1; + term1 = Math.sqrt(3.0) * (-t + s) / 2; + result[3] = term1; + result[5] = -term1; + return; + } + result[5] = result[3] = 0; + if (discriminant === 0) { + r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0); + result[0] = -term1 + 2.0 * r13; + result[4] = result[2] = -(r13 + term1); + return; + } + q = -q; + dum1 = q * q * q; + dum1 = Math.acos(r / Math.sqrt(dum1)); + r13 = 2.0 * Math.sqrt(q); + result[0] = -term1 + r13 * Math.cos(dum1 / 3.0); + result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0); + result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0); + return; +}; +var sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) { + // Find minimum distance by using the minimum of the distance + // function between the given point and the curve + + // This gives the coefficients of the resulting cubic equation + // whose roots tell us where a possible minimum is + // (Coefficients are divided by 4) + + var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3; + var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3; + var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y; + var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y; + + // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a); + + var roots = []; + + // Use the cubic solving algorithm + solveCubic(a, b, c, d, roots); + var zeroThreshold = 0.0000001; + var params = []; + for (var index = 0; index < 6; index += 2) { + if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) { + params.push(roots[index]); + } + } + params.push(1.0); + params.push(0.0); + var minDistanceSquared = -1; + var curX, curY, distSquared; + for (var i = 0; i < params.length; i++) { + curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3; + curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3; + distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2); + // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared)); + if (minDistanceSquared >= 0) { + if (distSquared < minDistanceSquared) { + minDistanceSquared = distSquared; + } + } else { + minDistanceSquared = distSquared; + } + } + return minDistanceSquared; +}; +var sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) { + var offset = [x - x1, y - y1]; + var line = [x2 - x1, y2 - y1]; + var lineSq = line[0] * line[0] + line[1] * line[1]; + var hypSq = offset[0] * offset[0] + offset[1] * offset[1]; + var dotProduct = offset[0] * line[0] + offset[1] * line[1]; + var adjSq = dotProduct * dotProduct / lineSq; + if (dotProduct < 0) { + return hypSq; + } + if (adjSq > lineSq) { + return (x - x2) * (x - x2) + (y - y2) * (y - y2); + } + return hypSq - adjSq; +}; +var pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) { + var x1, y1, x2, y2; + var y3; + + // Intersect with vertical line through (x, y) + var up = 0; + // let down = 0; + for (var i = 0; i < points.length / 2; i++) { + x1 = points[i * 2]; + y1 = points[i * 2 + 1]; + if (i + 1 < points.length / 2) { + x2 = points[(i + 1) * 2]; + y2 = points[(i + 1) * 2 + 1]; + } else { + x2 = points[(i + 1 - points.length / 2) * 2]; + y2 = points[(i + 1 - points.length / 2) * 2 + 1]; + } + if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) { + y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1; + if (y3 > y) { + up++; + } + + // if( y3 < y ){ + // down++; + // } + } else { + continue; + } + } + if (up % 2 === 0) { + return false; + } else { + return true; + } +}; +var pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) { + var transformedPoints = new Array(basePoints.length); + + // Gives negative angle + var angle; + if (direction[0] != null) { + angle = Math.atan(direction[1] / direction[0]); + if (direction[0] < 0) { + angle = angle + Math.PI / 2; + } else { + angle = -angle - Math.PI / 2; + } + } else { + angle = direction; + } + var cos = Math.cos(-angle); + var sin = Math.sin(-angle); + + // console.log("base: " + basePoints); + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin); + transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin); + transformedPoints[i * 2] += centerX; + transformedPoints[i * 2 + 1] += centerY; + } + var points; + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + return pointInsidePolygonPoints(x, y, points); +}; +var pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height) { + var cutPolygonPoints = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + var squaredCornerRadius = cornerRadius * cornerRadius; + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + cutPolygonPoints[i * 4] = cp0x; + cutPolygonPoints[i * 4 + 1] = cp0y; + cutPolygonPoints[i * 4 + 2] = cp1x; + cutPolygonPoints[i * 4 + 3] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + var squaredDistance = Math.pow(cx - x, 2) + Math.pow(cy - y, 2); + if (squaredDistance <= squaredCornerRadius) { + return true; + } + } + return pointInsidePolygonPoints(x, y, cutPolygonPoints); +}; +var joinLines = function joinLines(lineSet) { + var vertices = new Array(lineSet.length / 2); + var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY; + var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY; + for (var i = 0; i < lineSet.length / 4; i++) { + currentLineStartX = lineSet[i * 4]; + currentLineStartY = lineSet[i * 4 + 1]; + currentLineEndX = lineSet[i * 4 + 2]; + currentLineEndY = lineSet[i * 4 + 3]; + if (i < lineSet.length / 4 - 1) { + nextLineStartX = lineSet[(i + 1) * 4]; + nextLineStartY = lineSet[(i + 1) * 4 + 1]; + nextLineEndX = lineSet[(i + 1) * 4 + 2]; + nextLineEndY = lineSet[(i + 1) * 4 + 3]; + } else { + nextLineStartX = lineSet[0]; + nextLineStartY = lineSet[1]; + nextLineEndX = lineSet[2]; + nextLineEndY = lineSet[3]; + } + var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); + vertices[i * 2] = intersection[0]; + vertices[i * 2 + 1] = intersection[1]; + } + return vertices; +}; +var expandPolygon = function expandPolygon(points, pad) { + var expandedLineSet = new Array(points.length * 2); + var currentPointX, currentPointY, nextPointX, nextPointY; + for (var i = 0; i < points.length / 2; i++) { + currentPointX = points[i * 2]; + currentPointY = points[i * 2 + 1]; + if (i < points.length / 2 - 1) { + nextPointX = points[(i + 1) * 2]; + nextPointY = points[(i + 1) * 2 + 1]; + } else { + nextPointX = points[0]; + nextPointY = points[1]; + } + + // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY] + + // Assume CCW polygon winding + + var offsetX = nextPointY - currentPointY; + var offsetY = -(nextPointX - currentPointX); + + // Normalize + var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY); + var normalizedOffsetX = offsetX / offsetLength; + var normalizedOffsetY = offsetY / offsetLength; + expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad; + expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad; + expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad; + } + return expandedLineSet; +}; +var intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) { + var dispX = centerX - x; + var dispY = centerY - y; + dispX /= ellipseWradius; + dispY /= ellipseHradius; + var len = Math.sqrt(dispX * dispX + dispY * dispY); + var newLength = len - 1; + if (newLength < 0) { + return []; + } + var lenProportion = newLength / len; + return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y]; +}; +var checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) { + x -= centerX; + y -= centerY; + x /= width / 2 + padding; + y /= height / 2 + padding; + return x * x + y * y <= 1; +}; + +// Returns intersections of increasing distance from line's start point +var intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) { + // Calculate d, direction vector of line + var d = [x2 - x1, y2 - y1]; // Direction vector of line + var f = [x1 - centerX, y1 - centerY]; + var a = d[0] * d[0] + d[1] * d[1]; + var b = 2 * (f[0] * d[0] + f[1] * d[1]); + var c = f[0] * f[0] + f[1] * f[1] - radius * radius; + var discriminant = b * b - 4 * a * c; + if (discriminant < 0) { + return []; + } + var t1 = (-b + Math.sqrt(discriminant)) / (2 * a); + var t2 = (-b - Math.sqrt(discriminant)) / (2 * a); + var tMin = Math.min(t1, t2); + var tMax = Math.max(t1, t2); + var inRangeParams = []; + if (tMin >= 0 && tMin <= 1) { + inRangeParams.push(tMin); + } + if (tMax >= 0 && tMax <= 1) { + inRangeParams.push(tMax); + } + if (inRangeParams.length === 0) { + return []; + } + var nearIntersectionX = inRangeParams[0] * d[0] + x1; + var nearIntersectionY = inRangeParams[0] * d[1] + y1; + if (inRangeParams.length > 1) { + if (inRangeParams[0] == inRangeParams[1]) { + return [nearIntersectionX, nearIntersectionY]; + } else { + var farIntersectionX = inRangeParams[1] * d[0] + x1; + var farIntersectionY = inRangeParams[1] * d[1] + y1; + return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; + } + } else { + return [nearIntersectionX, nearIntersectionY]; + } +}; +var midOfThree = function midOfThree(a, b, c) { + if (b <= a && a <= c || c <= a && a <= b) { + return a; + } else if (a <= b && b <= c || c <= b && b <= a) { + return b; + } else { + return c; + } +}; + +// (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4) +var finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) { + var dx13 = x1 - x3; + var dx21 = x2 - x1; + var dx43 = x4 - x3; + var dy13 = y1 - y3; + var dy21 = y2 - y1; + var dy43 = y4 - y3; + var ua_t = dx43 * dy13 - dy43 * dx13; + var ub_t = dx21 * dy13 - dy21 * dx13; + var u_b = dy43 * dx21 - dx43 * dy21; + if (u_b !== 0) { + var ua = ua_t / u_b; + var ub = ub_t / u_b; + var flptThreshold = 0.001; + var _min = 0 - flptThreshold; + var _max = 1 + flptThreshold; + if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) { + return [x1 + ua * dx21, y1 + ua * dy21]; + } else { + if (!infiniteLines) { + return []; + } else { + return [x1 + ua * dx21, y1 + ua * dy21]; + } + } + } else { + if (ua_t === 0 || ub_t === 0) { + // Parallel, coincident lines. Check if overlap + + // Check endpoint of second line + if (midOfThree(x1, x2, x4) === x4) { + return [x4, y4]; + } + + // Check start point of second line + if (midOfThree(x1, x2, x3) === x3) { + return [x3, y3]; + } + + // Endpoint of first line + if (midOfThree(x3, x4, x2) === x2) { + return [x2, y2]; + } + return []; + } else { + // Parallel, non-coincident + return []; + } + } +}; + +// math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding ) +// intersect a node polygon (pts transformed) +// +// math.polygonIntersectLine( x, y, basePoints, centerX, centerY ) +// intersect the points (no transform) +var polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var transformedPoints = new Array(basePoints.length); + var doTransform = true; + if (width == null) { + doTransform = false; + } + var points; + if (doTransform) { + for (var i = 0; i < transformedPoints.length / 2; i++) { + transformedPoints[i * 2] = basePoints[i * 2] * width + centerX; + transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY; + } + if (padding > 0) { + var expandedLineSet = expandPolygon(transformedPoints, -padding); + points = joinLines(expandedLineSet); + } else { + points = transformedPoints; + } + } else { + points = basePoints; + } + var currentX, currentY, nextX, nextY; + for (var _i2 = 0; _i2 < points.length / 2; _i2++) { + currentX = points[_i2 * 2]; + currentY = points[_i2 * 2 + 1]; + if (_i2 < points.length / 2 - 1) { + nextX = points[(_i2 + 1) * 2]; + nextY = points[(_i2 + 1) * 2 + 1]; + } else { + nextX = points[0]; + nextY = points[1]; + } + intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY); + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + return intersections; +}; +var roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) { + var intersections = []; + var intersection; + var lines = new Array(basePoints.length); + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + for (var i = 0; i < basePoints.length / 4; i++) { + var sourceUv = void 0, + destUv = void 0; + if (i === 0) { + sourceUv = basePoints.length - 2; + } else { + sourceUv = i * 4 - 2; + } + destUv = i * 4 + 2; + var px = centerX + halfW * basePoints[i * 4]; + var py = centerY + halfH * basePoints[i * 4 + 1]; + var cosTheta = -basePoints[sourceUv] * basePoints[destUv] - basePoints[sourceUv + 1] * basePoints[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * basePoints[sourceUv]; + var cp0y = py - offset * basePoints[sourceUv + 1]; + var cp1x = px + offset * basePoints[destUv]; + var cp1y = py + offset * basePoints[destUv + 1]; + if (i === 0) { + lines[basePoints.length - 2] = cp0x; + lines[basePoints.length - 1] = cp0y; + } else { + lines[i * 4 - 2] = cp0x; + lines[i * 4 - 1] = cp0y; + } + lines[i * 4] = cp1x; + lines[i * 4 + 1] = cp1y; + var orthx = basePoints[sourceUv + 1]; + var orthy = -basePoints[sourceUv]; + var cosAlpha = orthx * basePoints[destUv] + orthy * basePoints[destUv + 1]; + if (cosAlpha < 0) { + orthx *= -1; + orthy *= -1; + } + var cx = cp0x + orthx * cornerRadius; + var cy = cp0y + orthy * cornerRadius; + intersection = intersectLineCircle(x, y, centerX, centerY, cx, cy, cornerRadius); + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + for (var _i3 = 0; _i3 < lines.length / 4; _i3++) { + intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[_i3 * 4], lines[_i3 * 4 + 1], lines[_i3 * 4 + 2], lines[_i3 * 4 + 3], false); + if (intersection.length !== 0) { + intersections.push(intersection[0], intersection[1]); + } + } + if (intersections.length > 2) { + var lowestIntersection = [intersections[0], intersections[1]]; + var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2); + for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) { + var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2); + if (squaredDistance <= lowestSquaredDistance) { + lowestIntersection[0] = intersections[_i4 * 2]; + lowestIntersection[1] = intersections[_i4 * 2 + 1]; + lowestSquaredDistance = squaredDistance; + } + } + return lowestIntersection; + } + return intersections; +}; +var shortenIntersection = function shortenIntersection(intersection, offset, amount) { + var disp = [intersection[0] - offset[0], intersection[1] - offset[1]]; + var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]); + var lenRatio = (length - amount) / length; + if (lenRatio < 0) { + lenRatio = 0.00001; + } + return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]]; +}; +var generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) { + var points = generateUnitNgonPoints(sides, rotationRadians); + points = fitPolygonToSquare(points); + return points; +}; +var fitPolygonToSquare = function fitPolygonToSquare(points) { + var x, y; + var sides = points.length / 2; + var minX = Infinity, + minY = Infinity, + maxX = -Infinity, + maxY = -Infinity; + for (var i = 0; i < sides; i++) { + x = points[2 * i]; + y = points[2 * i + 1]; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + + // stretch factors + var sx = 2 / (maxX - minX); + var sy = 2 / (maxY - minY); + for (var _i5 = 0; _i5 < sides; _i5++) { + x = points[2 * _i5] = points[2 * _i5] * sx; + y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy; + minX = Math.min(minX, x); + maxX = Math.max(maxX, x); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y); + } + if (minY < -1) { + for (var _i6 = 0; _i6 < sides; _i6++) { + y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY); + } + } + return points; +}; +var generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) { + var increment = 1.0 / sides * 2 * Math.PI; + var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0; + startAngle += rotationRadians; + var points = new Array(sides * 2); + var currentAngle; + for (var i = 0; i < sides; i++) { + currentAngle = i * increment + startAngle; + points[2 * i] = Math.cos(currentAngle); // x + points[2 * i + 1] = Math.sin(-currentAngle); // y + } + + return points; +}; + +// Set the default radius, unless half of width or height is smaller than default +var getRoundRectangleRadius = function getRoundRectangleRadius(width, height) { + return Math.min(width / 4, height / 4, 8); +}; + +// Set the default radius +var getRoundPolygonRadius = function getRoundPolygonRadius(width, height) { + return Math.min(width / 10, height / 10, 8); +}; +var getCutRectangleCornerLength = function getCutRectangleCornerLength() { + return 8; +}; +var bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) { + return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0]; +}; + +// get curve width, height, and control point position offsets as a percentage of node height / width +var getBarrelCurveConstants = function getBarrelCurveConstants(width, height) { + return { + heightOffset: Math.min(15, 0.05 * height), + widthOffset: Math.min(100, 0.25 * width), + ctrlPtOffsetPct: 0.05 + }; +}; + +var pageRankDefaults = defaults$g({ + dampingFactor: 0.8, + precision: 0.000001, + iterations: 200, + weight: function weight(edge) { + return 1; + } +}); +var elesfn$o = { + pageRank: function pageRank(options) { + var _pageRankDefaults = pageRankDefaults(options), + dampingFactor = _pageRankDefaults.dampingFactor, + precision = _pageRankDefaults.precision, + iterations = _pageRankDefaults.iterations, + weight = _pageRankDefaults.weight; + var cy = this._private.cy; + var _this$byGroup = this.byGroup(), + nodes = _this$byGroup.nodes, + edges = _this$byGroup.edges; + var numNodes = nodes.length; + var numNodesSqd = numNodes * numNodes; + var numEdges = edges.length; + + // Construct transposed adjacency matrix + // First lets have a zeroed matrix of the right size + // We'll also keep track of the sum of each column + var matrix = new Array(numNodesSqd); + var columnSum = new Array(numNodes); + var additionalProb = (1 - dampingFactor) / numNodes; + + // Create null matrix + for (var i = 0; i < numNodes; i++) { + for (var j = 0; j < numNodes; j++) { + var n = i * numNodes + j; + matrix[n] = 0; + } + columnSum[i] = 0; + } + + // Now, process edges + for (var _i = 0; _i < numEdges; _i++) { + var edge = edges[_i]; + var srcId = edge.data('source'); + var tgtId = edge.data('target'); + + // Don't include loops in the matrix + if (srcId === tgtId) { + continue; + } + var s = nodes.indexOfId(srcId); + var t = nodes.indexOfId(tgtId); + var w = weight(edge); + var _n = t * numNodes + s; + + // Update matrix + matrix[_n] += w; + + // Update column sum + columnSum[s] += w; + } + + // Add additional probability based on damping factor + // Also, take into account columns that have sum = 0 + var p = 1.0 / numNodes + additionalProb; // Shorthand + + // Traverse matrix, column by column + for (var _j = 0; _j < numNodes; _j++) { + if (columnSum[_j] === 0) { + // No 'links' out from node jth, assume equal probability for each possible node + for (var _i2 = 0; _i2 < numNodes; _i2++) { + var _n2 = _i2 * numNodes + _j; + matrix[_n2] = p; + } + } else { + // Node jth has outgoing link, compute normalized probabilities + for (var _i3 = 0; _i3 < numNodes; _i3++) { + var _n3 = _i3 * numNodes + _j; + matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb; + } + } + } + + // Compute dominant eigenvector using power method + var eigenvector = new Array(numNodes); + var temp = new Array(numNodes); + var previous; + + // Start with a vector of all 1's + // Also, initialize a null vector which will be used as shorthand + for (var _i4 = 0; _i4 < numNodes; _i4++) { + eigenvector[_i4] = 1; + } + for (var iter = 0; iter < iterations; iter++) { + // Temp array with all 0's + for (var _i5 = 0; _i5 < numNodes; _i5++) { + temp[_i5] = 0; + } + + // Multiply matrix with previous result + for (var _i6 = 0; _i6 < numNodes; _i6++) { + for (var _j2 = 0; _j2 < numNodes; _j2++) { + var _n4 = _i6 * numNodes + _j2; + temp[_i6] += matrix[_n4] * eigenvector[_j2]; + } + } + inPlaceSumNormalize(temp); + previous = eigenvector; + eigenvector = temp; + temp = previous; + var diff = 0; + // Compute difference (squared module) of both vectors + for (var _i7 = 0; _i7 < numNodes; _i7++) { + var delta = previous[_i7] - eigenvector[_i7]; + diff += delta * delta; + } + + // If difference is less than the desired threshold, stop iterating + if (diff < precision) { + break; + } + } + + // Construct result + var res = { + rank: function rank(node) { + node = cy.collection(node)[0]; + return eigenvector[nodes.indexOf(node)]; + } + }; + return res; + } // pageRank +}; // elesfn + +var defaults$f = defaults$g({ + root: null, + weight: function weight(edge) { + return 1; + }, + directed: false, + alpha: 0 +}); +var elesfn$n = { + degreeCentralityNormalized: function degreeCentralityNormalized(options) { + options = defaults$f(options); + var cy = this.cy(); + var nodes = this.nodes(); + var numNodes = nodes.length; + if (!options.directed) { + var degrees = {}; + var maxDegree = 0; + for (var i = 0; i < numNodes; i++) { + var node = nodes[i]; + + // add current node to the current options object and call degreeCentrality + options.root = node; + var currDegree = this.degreeCentrality(options); + if (maxDegree < currDegree.degree) { + maxDegree = currDegree.degree; + } + degrees[node.id()] = currDegree.degree; + } + return { + degree: function degree(node) { + if (maxDegree === 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + return degrees[node.id()] / maxDegree; + } + }; + } else { + var indegrees = {}; + var outdegrees = {}; + var maxIndegree = 0; + var maxOutdegree = 0; + for (var _i = 0; _i < numNodes; _i++) { + var _node = nodes[_i]; + var id = _node.id(); + + // add current node to the current options object and call degreeCentrality + options.root = _node; + var _currDegree = this.degreeCentrality(options); + if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; + if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; + indegrees[id] = _currDegree.indegree; + outdegrees[id] = _currDegree.outdegree; + } + return { + indegree: function indegree(node) { + if (maxIndegree == 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + return indegrees[node.id()] / maxIndegree; + }, + outdegree: function outdegree(node) { + if (maxOutdegree === 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node); + } + return outdegrees[node.id()] / maxOutdegree; + } + }; + } + }, + // degreeCentralityNormalized + + // Implemented from the algorithm in Opsahl's paper + // "Node centrality in weighted networks: Generalizing degree and shortest paths" + // check the heading 2 "Degree" + degreeCentrality: function degreeCentrality(options) { + options = defaults$f(options); + var cy = this.cy(); + var callingEles = this; + var _options = options, + root = _options.root, + weight = _options.weight, + directed = _options.directed, + alpha = _options.alpha; + root = cy.collection(root)[0]; + if (!directed) { + var connEdges = root.connectedEdges().intersection(callingEles); + var k = connEdges.length; + var s = 0; + + // Now, sum edge weights + for (var i = 0; i < connEdges.length; i++) { + s += weight(connEdges[i]); + } + return { + degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha) + }; + } else { + var edges = root.connectedEdges(); + var incoming = edges.filter(function (edge) { + return edge.target().same(root) && callingEles.has(edge); + }); + var outgoing = edges.filter(function (edge) { + return edge.source().same(root) && callingEles.has(edge); + }); + var k_in = incoming.length; + var k_out = outgoing.length; + var s_in = 0; + var s_out = 0; + + // Now, sum incoming edge weights + for (var _i2 = 0; _i2 < incoming.length; _i2++) { + s_in += weight(incoming[_i2]); + } + + // Now, sum outgoing edge weights + for (var _i3 = 0; _i3 < outgoing.length; _i3++) { + s_out += weight(outgoing[_i3]); + } + return { + indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha), + outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha) + }; + } + } // degreeCentrality +}; // elesfn + +// nice, short mathematical alias +elesfn$n.dc = elesfn$n.degreeCentrality; +elesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized; + +var defaults$e = defaults$g({ + harmonic: true, + weight: function weight() { + return 1; + }, + directed: false, + root: null +}); +var elesfn$m = { + closenessCentralityNormalized: function closenessCentralityNormalized(options) { + var _defaults = defaults$e(options), + harmonic = _defaults.harmonic, + weight = _defaults.weight, + directed = _defaults.directed; + var cy = this.cy(); + var closenesses = {}; + var maxCloseness = 0; + var nodes = this.nodes(); + var fw = this.floydWarshall({ + weight: weight, + directed: directed + }); + + // Compute closeness for every node and find the maximum closeness + for (var i = 0; i < nodes.length; i++) { + var currCloseness = 0; + var node_i = nodes[i]; + for (var j = 0; j < nodes.length; j++) { + if (i !== j) { + var d = fw.distance(node_i, nodes[j]); + if (harmonic) { + currCloseness += 1 / d; + } else { + currCloseness += d; + } + } + } + if (!harmonic) { + currCloseness = 1 / currCloseness; + } + if (maxCloseness < currCloseness) { + maxCloseness = currCloseness; + } + closenesses[node_i.id()] = currCloseness; + } + return { + closeness: function closeness(node) { + if (maxCloseness == 0) { + return 0; + } + if (string(node)) { + // from is a selector string + node = cy.filter(node)[0].id(); + } else { + // from is a node + node = node.id(); + } + return closenesses[node] / maxCloseness; + } + }; + }, + // Implemented from pseudocode from wikipedia + closenessCentrality: function closenessCentrality(options) { + var _defaults2 = defaults$e(options), + root = _defaults2.root, + weight = _defaults2.weight, + directed = _defaults2.directed, + harmonic = _defaults2.harmonic; + root = this.filter(root)[0]; + + // we need distance from this node to every other node + var dijkstra = this.dijkstra({ + root: root, + weight: weight, + directed: directed + }); + var totalDistance = 0; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + if (!n.same(root)) { + var d = dijkstra.distanceTo(n); + if (harmonic) { + totalDistance += 1 / d; + } else { + totalDistance += d; + } + } + } + return harmonic ? totalDistance : 1 / totalDistance; + } // closenessCentrality +}; // elesfn + +// nice, short mathematical alias +elesfn$m.cc = elesfn$m.closenessCentrality; +elesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized; + +var defaults$d = defaults$g({ + weight: null, + directed: false +}); +var elesfn$l = { + // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes + betweennessCentrality: function betweennessCentrality(options) { + var _defaults = defaults$d(options), + directed = _defaults.directed, + weight = _defaults.weight; + var weighted = weight != null; + var cy = this.cy(); + + // starting + var V = this.nodes(); + var A = {}; + var _C = {}; + var max = 0; + var C = { + set: function set(key, val) { + _C[key] = val; + if (val > max) { + max = val; + } + }, + get: function get(key) { + return _C[key]; + } + }; + + // A contains the neighborhoods of every node + for (var i = 0; i < V.length; i++) { + var v = V[i]; + var vid = v.id(); + if (directed) { + A[vid] = v.outgoers().nodes(); // get outgoers of every node + } else { + A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node + } + + C.set(vid, 0); + } + var _loop = function _loop(s) { + var sid = V[s].id(); + var S = []; // stack + var P = {}; + var g = {}; + var d = {}; + var Q = new Heap__default["default"](function (a, b) { + return d[a] - d[b]; + }); // queue + + // init dictionaries + for (var _i = 0; _i < V.length; _i++) { + var _vid = V[_i].id(); + P[_vid] = []; + g[_vid] = 0; + d[_vid] = Infinity; + } + g[sid] = 1; // sigma + d[sid] = 0; // distance to s + + Q.push(sid); + while (!Q.empty()) { + var _v = Q.pop(); + S.push(_v); + if (weighted) { + for (var j = 0; j < A[_v].length; j++) { + var w = A[_v][j]; + var vEle = cy.getElementById(_v); + var edge = void 0; + if (vEle.edgesTo(w).length > 0) { + edge = vEle.edgesTo(w)[0]; + } else { + edge = w.edgesTo(vEle)[0]; + } + var edgeWeight = weight(edge); + w = w.id(); + if (d[w] > d[_v] + edgeWeight) { + d[w] = d[_v] + edgeWeight; + if (Q.nodes.indexOf(w) < 0) { + //if w is not in Q + Q.push(w); + } else { + // update position if w is in Q + Q.updateItem(w); + } + g[w] = 0; + P[w] = []; + } + if (d[w] == d[_v] + edgeWeight) { + g[w] = g[w] + g[_v]; + P[w].push(_v); + } + } + } else { + for (var _j = 0; _j < A[_v].length; _j++) { + var _w = A[_v][_j].id(); + if (d[_w] == Infinity) { + Q.push(_w); + d[_w] = d[_v] + 1; + } + if (d[_w] == d[_v] + 1) { + g[_w] = g[_w] + g[_v]; + P[_w].push(_v); + } + } + } + } + var e = {}; + for (var _i2 = 0; _i2 < V.length; _i2++) { + e[V[_i2].id()] = 0; + } + while (S.length > 0) { + var _w2 = S.pop(); + for (var _j2 = 0; _j2 < P[_w2].length; _j2++) { + var _v2 = P[_w2][_j2]; + e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]); + } + if (_w2 != V[s].id()) { + C.set(_w2, C.get(_w2) + e[_w2]); + } + } + }; + for (var s = 0; s < V.length; s++) { + _loop(s); + } + var ret = { + betweenness: function betweenness(node) { + var id = cy.collection(node).id(); + return C.get(id); + }, + betweennessNormalized: function betweennessNormalized(node) { + if (max == 0) { + return 0; + } + var id = cy.collection(node).id(); + return C.get(id) / max; + } + }; + + // alias + ret.betweennessNormalised = ret.betweennessNormalized; + return ret; + } // betweennessCentrality +}; // elesfn + +// nice, short mathematical alias +elesfn$l.bc = elesfn$l.betweennessCentrality; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 + +/* eslint-disable no-unused-vars */ +var defaults$c = defaults$g({ + expandFactor: 2, + // affects time of computation and cluster granularity to some extent: M * M + inflateFactor: 2, + // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j) + multFactor: 1, + // optional self loops for each node. Use a neutral value to improve cluster computations. + maxIterations: 20, + // maximum number of iterations of the MCL algorithm in a single run + attributes: [ + // attributes/features used to group nodes, ie. similarity values between nodes + function (edge) { + return 1; + }] +}); +/* eslint-enable */ + +var setOptions$3 = function setOptions(options) { + return defaults$c(options); +}; +/* eslint-enable */ + +var getSimilarity$1 = function getSimilarity(edge, attributes) { + var total = 0; + for (var i = 0; i < attributes.length; i++) { + total += attributes[i](edge); + } + return total; +}; +var addLoops = function addLoops(M, n, val) { + for (var i = 0; i < n; i++) { + M[i * n + i] = val; + } +}; +var normalize = function normalize(M, n) { + var sum; + for (var col = 0; col < n; col++) { + sum = 0; + for (var row = 0; row < n; row++) { + sum += M[row * n + col]; + } + for (var _row = 0; _row < n; _row++) { + M[_row * n + col] = M[_row * n + col] / sum; + } + } +}; + +// TODO: blocked matrix multiplication? +var mmult = function mmult(A, B, n) { + var C = new Array(n * n); + for (var i = 0; i < n; i++) { + for (var j = 0; j < n; j++) { + C[i * n + j] = 0; + } + for (var k = 0; k < n; k++) { + for (var _j = 0; _j < n; _j++) { + C[i * n + _j] += A[i * n + k] * B[k * n + _j]; + } + } + } + return C; +}; +var expand = function expand(M, n, expandFactor /** power **/) { + var _M = M.slice(0); + for (var p = 1; p < expandFactor; p++) { + M = mmult(M, _M, n); + } + return M; +}; +var inflate = function inflate(M, n, inflateFactor /** r **/) { + var _M = new Array(n * n); + + // M(i,j) ^ inflatePower + for (var i = 0; i < n * n; i++) { + _M[i] = Math.pow(M[i], inflateFactor); + } + normalize(_M, n); + return _M; +}; +var hasConverged = function hasConverged(M, _M, n2, roundFactor) { + // Check that both matrices have the same elements (i,j) + for (var i = 0; i < n2; i++) { + var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places + var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); + if (v1 !== v2) { + return false; + } + } + return true; +}; +var assign$2 = function assign(M, n, nodes, cy) { + var clusters = []; + for (var i = 0; i < n; i++) { + var cluster = []; + for (var j = 0; j < n; j++) { + // Row-wise attractors and elements that they attract belong in same cluster + if (Math.round(M[i * n + j] * 1000) / 1000 > 0) { + cluster.push(nodes[j]); + } + } + if (cluster.length !== 0) { + clusters.push(cy.collection(cluster)); + } + } + return clusters; +}; +var isDuplicate = function isDuplicate(c1, c2) { + for (var i = 0; i < c1.length; i++) { + if (!c2[i] || c1[i].id() !== c2[i].id()) { + return false; + } + } + return true; +}; +var removeDuplicates = function removeDuplicates(clusters) { + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j < clusters.length; j++) { + if (i != j && isDuplicate(clusters[i], clusters[j])) { + clusters.splice(j, 1); + } + } + } + return clusters; +}; +var markovClustering = function markovClustering(options) { + var nodes = this.nodes(); + var edges = this.edges(); + var cy = this.cy(); + + // Set parameters of algorithm: + var opts = setOptions$3(options); + + // Map each node to its position in node array + var id2position = {}; + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } + + // Generate stochastic matrix M from input graph G (should be symmetric/undirected) + var n = nodes.length, + n2 = n * n; + var M = new Array(n2), + _M; + for (var _i = 0; _i < n2; _i++) { + M[_i] = 0; + } + for (var e = 0; e < edges.length; e++) { + var edge = edges[e]; + var _i2 = id2position[edge.source().id()]; + var j = id2position[edge.target().id()]; + var sim = getSimilarity$1(edge, opts.attributes); + M[_i2 * n + j] += sim; // G should be symmetric and undirected + M[j * n + _i2] += sim; + } + + // Begin Markov cluster algorithm + + // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal + addLoops(M, n, opts.multFactor); + + // Step 2: M = normalize( M ); + normalize(M, n); + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; + + // Step 3: + _M = expand(M, n, opts.expandFactor); + + // Step 4: + M = inflate(_M, n, opts.inflateFactor); + + // Step 5: check to see if ~steady state has been reached + if (!hasConverged(M, _M, n2, 4)) { + isStillMoving = true; + } + iterations++; + } + + // Build clusters from matrix + var clusters = assign$2(M, n, nodes, cy); + + // Remove duplicate clusters due to symmetry of graph and M matrix + clusters = removeDuplicates(clusters); + return clusters; +}; +var markovClustering$1 = { + markovClustering: markovClustering, + mcl: markovClustering +}; + +// Common distance metrics for clustering algorithms +var identity = function identity(x) { + return x; +}; +var absDiff = function absDiff(p, q) { + return Math.abs(q - p); +}; +var addAbsDiff = function addAbsDiff(total, p, q) { + return total + absDiff(p, q); +}; +var addSquaredDiff = function addSquaredDiff(total, p, q) { + return total + Math.pow(q - p, 2); +}; +var sqrt = function sqrt(x) { + return Math.sqrt(x); +}; +var maxAbsDiff = function maxAbsDiff(currentMax, p, q) { + return Math.max(currentMax, absDiff(p, q)); +}; +var getDistance = function getDistance(length, getP, getQ, init, visit) { + var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity; + var ret = init; + var p, q; + for (var dim = 0; dim < length; dim++) { + p = getP(dim); + q = getQ(dim); + ret = visit(ret, p, q); + } + return post(ret); +}; +var distances = { + euclidean: function euclidean(length, getP, getQ) { + if (length >= 2) { + return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt); + } else { + // for single attr case, more efficient to avoid sqrt + return getDistance(length, getP, getQ, 0, addAbsDiff); + } + }, + squaredEuclidean: function squaredEuclidean(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addSquaredDiff); + }, + manhattan: function manhattan(length, getP, getQ) { + return getDistance(length, getP, getQ, 0, addAbsDiff); + }, + max: function max(length, getP, getQ) { + return getDistance(length, getP, getQ, -Infinity, maxAbsDiff); + } +}; + +// in case the user accidentally doesn't use camel case +distances['squared-euclidean'] = distances['squaredEuclidean']; +distances['squaredeuclidean'] = distances['squaredEuclidean']; +function clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) { + var impl; + if (fn$6(method)) { + impl = method; + } else { + impl = distances[method] || distances.euclidean; + } + if (length === 0 && fn$6(method)) { + return impl(nodeP, nodeQ); + } else { + return impl(length, getP, getQ, nodeP, nodeQ); + } +} + +var defaults$b = defaults$g({ + k: 2, + m: 2, + sensitivityThreshold: 0.0001, + distance: 'euclidean', + maxIterations: 10, + attributes: [], + testMode: false, + testCentroids: null +}); +var setOptions$2 = function setOptions(options) { + return defaults$b(options); +}; + +var getDist = function getDist(type, node, centroid, attributes, mode) { + var noNodeP = mode !== 'kMedoids'; + var getP = noNodeP ? function (i) { + return centroid[i]; + } : function (i) { + return attributes[i](centroid); + }; + var getQ = function getQ(i) { + return attributes[i](node); + }; + var nodeP = centroid; + var nodeQ = node; + return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ); +}; +var randomCentroids = function randomCentroids(nodes, k, attributes) { + var ndim = attributes.length; + var min = new Array(ndim); + var max = new Array(ndim); + var centroids = new Array(k); + var centroid = null; + + // Find min, max values for each attribute dimension + for (var i = 0; i < ndim; i++) { + min[i] = nodes.min(attributes[i]).value; + max[i] = nodes.max(attributes[i]).value; + } + + // Build k centroids, each represented as an n-dim feature vector + for (var c = 0; c < k; c++) { + centroid = []; + for (var _i = 0; _i < ndim; _i++) { + centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value + } + + centroids[c] = centroid; + } + return centroids; +}; +var classify = function classify(node, centroids, distance, attributes, type) { + var min = Infinity; + var index = 0; + for (var i = 0; i < centroids.length; i++) { + var dist = getDist(distance, node, centroids[i], attributes, type); + if (dist < min) { + min = dist; + index = i; + } + } + return index; +}; +var buildCluster = function buildCluster(centroid, nodes, assignment) { + var cluster = []; + var node = null; + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + if (assignment[node.id()] === centroid) { + //console.log("Node " + node.id() + " is associated with medoid #: " + m); + cluster.push(node); + } + } + return cluster; +}; +var haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) { + return Math.abs(v2 - v1) <= sensitivityThreshold; +}; +var haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) { + for (var i = 0; i < v1.length; i++) { + for (var j = 0; j < v1[i].length; j++) { + var diff = Math.abs(v1[i][j] - v2[i][j]); + if (diff > sensitivityThreshold) { + return false; + } + } + } + return true; +}; +var seenBefore = function seenBefore(node, medoids, n) { + for (var i = 0; i < n; i++) { + if (node === medoids[i]) return true; + } + return false; +}; +var randomMedoids = function randomMedoids(nodes, k) { + var medoids = new Array(k); + + // For small data sets, the probability of medoid conflict is greater, + // so we need to check to see if we've already seen or chose this node before. + if (nodes.length < 50) { + // Randomly select k medoids from the n nodes + for (var i = 0; i < k; i++) { + var node = nodes[Math.floor(Math.random() * nodes.length)]; + + // If we've already chosen this node to be a medoid, don't choose it again (for small data sets). + // Instead choose a different random node. + while (seenBefore(node, medoids, i)) { + node = nodes[Math.floor(Math.random() * nodes.length)]; + } + medoids[i] = node; + } + } else { + // Relatively large data set, so pretty safe to not check and just select random nodes + for (var _i2 = 0; _i2 < k; _i2++) { + medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)]; + } + } + return medoids; +}; +var findCost = function findCost(potentialNewMedoid, cluster, attributes) { + var cost = 0; + for (var n = 0; n < cluster.length; n++) { + cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids'); + } + return cost; +}; +var kMeans = function kMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + + // Set parameters of algorithm: # of clusters, distance metric, etc. + var opts = setOptions$2(options); + + // Begin k-means algorithm + var clusters = new Array(opts.k); + var assignment = {}; + var centroids; + + // Step 1: Initialize centroid positions + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') { + // TODO: implement a seeded random number generator. + opts.testCentroids; + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } else if (_typeof(opts.testCentroids) === 'object') { + centroids = opts.testCentroids; + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + } else { + centroids = randomCentroids(nodes, opts.k, opts.attributes); + } + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest centroid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + // Determine which cluster this node belongs to: node id => cluster # + assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans'); + } + + // Step 3: For each of the k clusters, update its centroid + isStillMoving = false; + for (var c = 0; c < opts.k; c++) { + // Get all nodes that belong to this cluster + var cluster = buildCluster(c, nodes, assignment); + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + + // Update centroids by calculating avg of all nodes within the cluster. + var ndim = opts.attributes.length; + var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ] + var newCentroid = new Array(ndim); + var sum = new Array(ndim); + for (var d = 0; d < ndim; d++) { + sum[d] = 0.0; + for (var i = 0; i < cluster.length; i++) { + node = cluster[i]; + sum[d] += opts.attributes[d](node); + } + newCentroid[d] = sum[d] / cluster.length; + + // Check to see if algorithm has converged, i.e. when centroids no longer change + if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) { + isStillMoving = true; + } + } + centroids[c] = newCentroid; + clusters[c] = cy.collection(cluster); + } + iterations++; + } + return clusters; +}; +var kMedoids = function kMedoids(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var node = null; + var opts = setOptions$2(options); + + // Begin k-medoids algorithm + var clusters = new Array(opts.k); + var medoids; + var assignment = {}; + var curCost; + var minCosts = new Array(opts.k); // minimum cost configuration for each cluster + + // Step 1: Initialize k medoids + if (opts.testMode) { + if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') { + medoids = opts.testCentroids; + } else { + medoids = randomMedoids(nodes, opts.k); + } + } else { + medoids = randomMedoids(nodes, opts.k); + } + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + // Step 2: Assign nodes to the nearest medoid + for (var n = 0; n < nodes.length; n++) { + node = nodes[n]; + // Determine which cluster this node belongs to: node id => cluster # + assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids'); + } + isStillMoving = false; + // Step 3: For each medoid m, and for each node associated with mediod m, + // select the node with the lowest configuration cost as new medoid. + for (var m = 0; m < medoids.length; m++) { + // Get all nodes that belong to this medoid + var cluster = buildCluster(m, nodes, assignment); + if (cluster.length === 0) { + // If cluster is empty, break out early & move to next cluster + continue; + } + minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost + + // Select different medoid if its configuration has the lowest cost + for (var _n = 0; _n < cluster.length; _n++) { + curCost = findCost(cluster[_n], cluster, opts.attributes); + if (curCost < minCosts[m]) { + minCosts[m] = curCost; + medoids[m] = cluster[_n]; + isStillMoving = true; + } + } + clusters[m] = cy.collection(cluster); + } + iterations++; + } + return clusters; +}; +var updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) { + var numerator, denominator; + for (var n = 0; n < nodes.length; n++) { + for (var c = 0; c < centroids.length; c++) { + weight[n][c] = Math.pow(U[n][c], opts.m); + } + } + for (var _c = 0; _c < centroids.length; _c++) { + for (var dim = 0; dim < opts.attributes.length; dim++) { + numerator = 0; + denominator = 0; + for (var _n2 = 0; _n2 < nodes.length; _n2++) { + numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]); + denominator += weight[_n2][_c]; + } + centroids[_c][dim] = numerator / denominator; + } + } +}; +var updateMembership = function updateMembership(U, _U, centroids, nodes, opts) { + // Save previous step + for (var i = 0; i < U.length; i++) { + _U[i] = U[i].slice(); + } + var sum, numerator, denominator; + var pow = 2 / (opts.m - 1); + for (var c = 0; c < centroids.length; c++) { + for (var n = 0; n < nodes.length; n++) { + sum = 0; + for (var k = 0; k < centroids.length; k++) { + // against all other centroids + numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans'); + denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans'); + sum += Math.pow(numerator / denominator, pow); + } + U[n][c] = 1 / sum; + } + } +}; +var assign$1 = function assign(nodes, U, opts, cy) { + var clusters = new Array(opts.k); + for (var c = 0; c < clusters.length; c++) { + clusters[c] = []; + } + var max; + var index; + for (var n = 0; n < U.length; n++) { + // for each node (U is N x C matrix) + max = -Infinity; + index = -1; + // Determine which cluster the node is most likely to belong in + for (var _c2 = 0; _c2 < U[0].length; _c2++) { + if (U[n][_c2] > max) { + max = U[n][_c2]; + index = _c2; + } + } + clusters[index].push(nodes[n]); + } + + // Turn every array into a collection of nodes + for (var _c3 = 0; _c3 < clusters.length; _c3++) { + clusters[_c3] = cy.collection(clusters[_c3]); + } + return clusters; +}; +var fuzzyCMeans = function fuzzyCMeans(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions$2(options); + + // Begin fuzzy c-means algorithm + var clusters; + var centroids; + var U; + var _U; + var weight; + + // Step 1: Initialize letiables. + _U = new Array(nodes.length); + for (var i = 0; i < nodes.length; i++) { + // N x C matrix + _U[i] = new Array(opts.k); + } + U = new Array(nodes.length); + for (var _i3 = 0; _i3 < nodes.length; _i3++) { + // N x C matrix + U[_i3] = new Array(opts.k); + } + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var total = 0; + for (var j = 0; j < opts.k; j++) { + U[_i4][j] = Math.random(); + total += U[_i4][j]; + } + for (var _j = 0; _j < opts.k; _j++) { + U[_i4][_j] = U[_i4][_j] / total; + } + } + centroids = new Array(opts.k); + for (var _i5 = 0; _i5 < opts.k; _i5++) { + centroids[_i5] = new Array(opts.attributes.length); + } + weight = new Array(nodes.length); + for (var _i6 = 0; _i6 < nodes.length; _i6++) { + // N x C matrix + weight[_i6] = new Array(opts.k); + } + // end init FCM + + var isStillMoving = true; + var iterations = 0; + while (isStillMoving && iterations < opts.maxIterations) { + isStillMoving = false; + + // Step 2: Calculate the centroids for each step. + updateCentroids(centroids, nodes, U, weight, opts); + + // Step 3: Update the partition matrix U. + updateMembership(U, _U, centroids, nodes, opts); + + // Step 4: Check for convergence. + if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) { + isStillMoving = true; + } + iterations++; + } + + // Assign nodes to clusters with highest probability. + clusters = assign$1(nodes, U, opts, cy); + return { + clusters: clusters, + degreeOfMembership: U + }; +}; +var kClustering = { + kMeans: kMeans, + kMedoids: kMedoids, + fuzzyCMeans: fuzzyCMeans, + fcm: fuzzyCMeans +}; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 +var defaults$a = defaults$g({ + distance: 'euclidean', + // distance metric to compare nodes + linkage: 'min', + // linkage criterion : how to determine the distance between clusters of nodes + mode: 'threshold', + // mode:'threshold' => clusters must be threshold distance apart + threshold: Infinity, + // the distance threshold + // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters + addDendrogram: false, + // whether to add the dendrogram to the graph for viz + dendrogramDepth: 0, + // depth at which dendrogram branches are merged into the returned clusters + attributes: [] // array of attr functions +}); + +var linkageAliases = { + 'single': 'min', + 'complete': 'max' +}; +var setOptions$1 = function setOptions(options) { + var opts = defaults$a(options); + var preferredAlias = linkageAliases[opts.linkage]; + if (preferredAlias != null) { + opts.linkage = preferredAlias; + } + return opts; +}; +var mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) { + // Find two closest clusters from cached mins + var minKey = 0; + var min = Infinity; + var dist; + var attrs = opts.attributes; + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + for (var i = 0; i < clusters.length; i++) { + var key = clusters[i].key; + var _dist = dists[key][mins[key]]; + if (_dist < min) { + minKey = key; + min = _dist; + } + } + if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) { + return false; + } + var c1 = index[minKey]; + var c2 = index[mins[minKey]]; + var merged; + + // Merge two closest clusters + if (opts.mode === 'dendrogram') { + merged = { + left: c1, + right: c2, + key: c1.key + }; + } else { + merged = { + value: c1.value.concat(c2.value), + key: c1.key + }; + } + clusters[c1.index] = merged; + clusters.splice(c2.index, 1); + index[c1.key] = merged; + + // Update distances with new merged cluster + for (var _i = 0; _i < clusters.length; _i++) { + var cur = clusters[_i]; + if (c1.key === cur.key) { + dist = Infinity; + } else if (opts.linkage === 'min') { + dist = dists[c1.key][cur.key]; + if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'max') { + dist = dists[c1.key][cur.key]; + if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) { + dist = dists[c2.key][cur.key]; + } + } else if (opts.linkage === 'mean') { + dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size); + } else { + if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]); + } + dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric + } + + // Update cached mins + for (var _i2 = 0; _i2 < clusters.length; _i2++) { + var key1 = clusters[_i2].key; + if (mins[key1] === c1.key || mins[key1] === c2.key) { + var _min = key1; + for (var j = 0; j < clusters.length; j++) { + var key2 = clusters[j].key; + if (dists[key1][key2] < dists[key1][_min]) { + _min = key2; + } + } + mins[key1] = _min; + } + clusters[_i2].index = _i2; + } + + // Clean up meta data used for clustering + c1.key = c2.key = c1.index = c2.index = null; + return true; +}; +var getAllChildren = function getAllChildren(root, arr, cy) { + if (!root) return; + if (root.value) { + arr.push(root.value); + } else { + if (root.left) getAllChildren(root.left, arr); + if (root.right) getAllChildren(root.right, arr); + } +}; +var buildDendrogram = function buildDendrogram(root, cy) { + if (!root) return ''; + if (root.left && root.right) { + var leftStr = buildDendrogram(root.left, cy); + var rightStr = buildDendrogram(root.right, cy); + var node = cy.add({ + group: 'nodes', + data: { + id: leftStr + ',' + rightStr + } + }); + cy.add({ + group: 'edges', + data: { + source: leftStr, + target: node.id() + } + }); + cy.add({ + group: 'edges', + data: { + source: rightStr, + target: node.id() + } + }); + return node.id(); + } else if (root.value) { + return root.value.id(); + } +}; +var buildClustersFromTree = function buildClustersFromTree(root, k, cy) { + if (!root) return []; + var left = [], + right = [], + leaves = []; + if (k === 0) { + // don't cut tree, simply return all nodes as 1 single cluster + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + leaves = left.concat(right); + return [cy.collection(leaves)]; + } else if (k === 1) { + // cut at root + + if (root.value) { + // leaf node + return [cy.collection(root.value)]; + } else { + if (root.left) getAllChildren(root.left, left); + if (root.right) getAllChildren(root.right, right); + return [cy.collection(left), cy.collection(right)]; + } + } else { + if (root.value) { + return [cy.collection(root.value)]; + } else { + if (root.left) left = buildClustersFromTree(root.left, k - 1, cy); + if (root.right) right = buildClustersFromTree(root.right, k - 1, cy); + return left.concat(right); + } + } +}; + +var hierarchicalClustering = function hierarchicalClustering(options) { + var cy = this.cy(); + var nodes = this.nodes(); + + // Set parameters of algorithm: linkage type, distance metric, etc. + var opts = setOptions$1(options); + var attrs = opts.attributes; + var getDist = function getDist(n1, n2) { + return clusteringDistance(opts.distance, attrs.length, function (i) { + return attrs[i](n1); + }, function (i) { + return attrs[i](n2); + }, n1, n2); + }; + + // Begin hierarchical algorithm + var clusters = []; + var dists = []; // distances between each pair of clusters + var mins = []; // closest cluster for each cluster + var index = []; // hash of all clusters by key + + // In agglomerative (bottom-up) clustering, each node starts as its own cluster + for (var n = 0; n < nodes.length; n++) { + var cluster = { + value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]], + key: n, + index: n + }; + clusters[n] = cluster; + index[n] = cluster; + dists[n] = []; + mins[n] = 0; + } + + // Calculate the distance between each pair of clusters + for (var i = 0; i < clusters.length; i++) { + for (var j = 0; j <= i; j++) { + var dist = void 0; + if (opts.mode === 'dendrogram') { + // modes store cluster values differently + dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value); + } else { + dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]); + } + dists[i][j] = dist; + dists[j][i] = dist; + if (dist < dists[i][mins[i]]) { + mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j + } + } + } + + // Find the closest pair of clusters and merge them into a single cluster. + // Update distances between new cluster and each of the old clusters, and loop until threshold reached. + var merged = mergeClosest(clusters, index, dists, mins, opts); + while (merged) { + merged = mergeClosest(clusters, index, dists, mins, opts); + } + var retClusters; + + // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges + // in addition to returning the clusters. + if (opts.mode === 'dendrogram') { + retClusters = buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy); + if (opts.addDendrogram) buildDendrogram(clusters[0], cy); + } else { + // Regular mode simply returns the clusters + + retClusters = new Array(clusters.length); + clusters.forEach(function (cluster, i) { + // Clean up meta data used for clustering + cluster.key = cluster.index = null; + retClusters[i] = cy.collection(cluster.value); + }); + } + return retClusters; +}; +var hierarchicalClustering$1 = { + hierarchicalClustering: hierarchicalClustering, + hca: hierarchicalClustering +}; + +// Implemented by Zoe Xi @zoexi for GSOC 2016 +var defaults$9 = defaults$g({ + distance: 'euclidean', + // distance metric to compare attributes between two nodes + preference: 'median', + // suitability of a data point to serve as an exemplar + damping: 0.8, + // damping factor between [0.5, 1) + maxIterations: 1000, + // max number of iterations to run + minIterations: 100, + // min number of iterations to run in order for clustering to stop + attributes: [// functions to quantify the similarity between any two points + // e.g. node => node.data('weight') + ] +}); +var setOptions = function setOptions(options) { + var dmp = options.damping; + var pref = options.preference; + if (!(0.5 <= dmp && dmp < 1)) { + error("Damping must range on [0.5, 1). Got: ".concat(dmp)); + } + var validPrefs = ['median', 'mean', 'min', 'max']; + if (!(validPrefs.some(function (v) { + return v === pref; + }) || number$1(pref))) { + error("Preference must be one of [".concat(validPrefs.map(function (p) { + return "'".concat(p, "'"); + }).join(', '), "] or a number. Got: ").concat(pref)); + } + return defaults$9(options); +}; + +var getSimilarity = function getSimilarity(type, n1, n2, attributes) { + var attr = function attr(n, i) { + return attributes[i](n); + }; + + // nb negative because similarity should have an inverse relationship to distance + return -clusteringDistance(type, attributes.length, function (i) { + return attr(n1, i); + }, function (i) { + return attr(n2, i); + }, n1, n2); +}; +var getPreference = function getPreference(S, preference) { + // larger preference = greater # of clusters + var p = null; + if (preference === 'median') { + p = median(S); + } else if (preference === 'mean') { + p = mean(S); + } else if (preference === 'min') { + p = min(S); + } else if (preference === 'max') { + p = max(S); + } else { + // Custom preference number, as set by user + p = preference; + } + return p; +}; +var findExemplars = function findExemplars(n, R, A) { + var indices = []; + for (var i = 0; i < n; i++) { + if (R[i * n + i] + A[i * n + i] > 0) { + indices.push(i); + } + } + return indices; +}; +var assignClusters = function assignClusters(n, S, exemplars) { + var clusters = []; + for (var i = 0; i < n; i++) { + var index = -1; + var max = -Infinity; + for (var ei = 0; ei < exemplars.length; ei++) { + var e = exemplars[ei]; + if (S[i * n + e] > max) { + index = e; + max = S[i * n + e]; + } + } + if (index > 0) { + clusters.push(index); + } + } + for (var _ei = 0; _ei < exemplars.length; _ei++) { + clusters[exemplars[_ei]] = exemplars[_ei]; + } + return clusters; +}; +var assign = function assign(n, S, exemplars) { + var clusters = assignClusters(n, S, exemplars); + for (var ei = 0; ei < exemplars.length; ei++) { + var ii = []; + for (var c = 0; c < clusters.length; c++) { + if (clusters[c] === exemplars[ei]) { + ii.push(c); + } + } + var maxI = -1; + var maxSum = -Infinity; + for (var i = 0; i < ii.length; i++) { + var sum = 0; + for (var j = 0; j < ii.length; j++) { + sum += S[ii[j] * n + ii[i]]; + } + if (sum > maxSum) { + maxI = i; + maxSum = sum; + } + } + exemplars[ei] = ii[maxI]; + } + clusters = assignClusters(n, S, exemplars); + return clusters; +}; +var affinityPropagation = function affinityPropagation(options) { + var cy = this.cy(); + var nodes = this.nodes(); + var opts = setOptions(options); + + // Map each node to its position in node array + var id2position = {}; + for (var i = 0; i < nodes.length; i++) { + id2position[nodes[i].id()] = i; + } + + // Begin affinity propagation algorithm + + var n; // number of data points + var n2; // size of matrices + var S; // similarity matrix (1D array) + var p; // preference/suitability of a data point to serve as an exemplar + var R; // responsibility matrix (1D array) + var A; // availability matrix (1D array) + + n = nodes.length; + n2 = n * n; + + // Initialize and build S similarity matrix + S = new Array(n2); + for (var _i = 0; _i < n2; _i++) { + S[_i] = -Infinity; // for cases where two data points shouldn't be linked together + } + + for (var _i2 = 0; _i2 < n; _i2++) { + for (var j = 0; j < n; j++) { + if (_i2 !== j) { + S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes); + } + } + } + + // Place preferences on the diagonal of S + p = getPreference(S, opts.preference); + for (var _i3 = 0; _i3 < n; _i3++) { + S[_i3 * n + _i3] = p; + } + + // Initialize R responsibility matrix + R = new Array(n2); + for (var _i4 = 0; _i4 < n2; _i4++) { + R[_i4] = 0.0; + } + + // Initialize A availability matrix + A = new Array(n2); + for (var _i5 = 0; _i5 < n2; _i5++) { + A[_i5] = 0.0; + } + var old = new Array(n); + var Rp = new Array(n); + var se = new Array(n); + for (var _i6 = 0; _i6 < n; _i6++) { + old[_i6] = 0.0; + Rp[_i6] = 0.0; + se[_i6] = 0; + } + var e = new Array(n * opts.minIterations); + for (var _i7 = 0; _i7 < e.length; _i7++) { + e[_i7] = 0; + } + var iter; + for (iter = 0; iter < opts.maxIterations; iter++) { + // main algorithmic loop + + // Update R responsibility matrix + for (var _i8 = 0; _i8 < n; _i8++) { + var max = -Infinity, + max2 = -Infinity, + maxI = -1, + AS = 0.0; + for (var _j = 0; _j < n; _j++) { + old[_j] = R[_i8 * n + _j]; + AS = A[_i8 * n + _j] + S[_i8 * n + _j]; + if (AS >= max) { + max2 = max; + max = AS; + maxI = _j; + } else if (AS > max2) { + max2 = AS; + } + } + for (var _j2 = 0; _j2 < n; _j2++) { + R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2]; + } + R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI]; + } + + // Update A availability matrix + for (var _i9 = 0; _i9 < n; _i9++) { + var sum = 0; + for (var _j3 = 0; _j3 < n; _j3++) { + old[_j3] = A[_j3 * n + _i9]; + Rp[_j3] = Math.max(0, R[_j3 * n + _i9]); + sum += Rp[_j3]; + } + sum -= Rp[_i9]; + Rp[_i9] = R[_i9 * n + _i9]; + sum += Rp[_i9]; + for (var _j4 = 0; _j4 < n; _j4++) { + A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4]; + } + A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9]; + } + + // Check for convergence + var K = 0; + for (var _i10 = 0; _i10 < n; _i10++) { + var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0; + e[iter % opts.minIterations * n + _i10] = E; + K += E; + } + if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { + var _sum = 0; + for (var _i11 = 0; _i11 < n; _i11++) { + se[_i11] = 0; + for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { + se[_i11] += e[_j5 * n + _i11]; + } + if (se[_i11] === 0 || se[_i11] === opts.minIterations) { + _sum++; + } + } + if (_sum === n) { + // then we have convergence + break; + } + } + } + + // Identify exemplars (cluster centers) + var exemplarsIndices = findExemplars(n, R, A); + + // Assign nodes to clusters + var clusterIndices = assign(n, S, exemplarsIndices); + var clusters = {}; + for (var c = 0; c < exemplarsIndices.length; c++) { + clusters[exemplarsIndices[c]] = []; + } + for (var _i12 = 0; _i12 < nodes.length; _i12++) { + var pos = id2position[nodes[_i12].id()]; + var clusterIndex = clusterIndices[pos]; + if (clusterIndex != null) { + // the node may have not been assigned a cluster if no valid attributes were specified + clusters[clusterIndex].push(nodes[_i12]); + } + } + var retClusters = new Array(exemplarsIndices.length); + for (var _c = 0; _c < exemplarsIndices.length; _c++) { + retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]); + } + return retClusters; +}; +var affinityPropagation$1 = { + affinityPropagation: affinityPropagation, + ap: affinityPropagation +}; + +var hierholzerDefaults = defaults$g({ + root: undefined, + directed: false +}); +var elesfn$k = { + hierholzer: function hierholzer(options) { + if (!plainObject(options)) { + var args = arguments; + options = { + root: args[0], + directed: args[1] + }; + } + var _hierholzerDefaults = hierholzerDefaults(options), + root = _hierholzerDefaults.root, + directed = _hierholzerDefaults.directed; + var eles = this; + var dflag = false; + var oddIn; + var oddOut; + var startVertex; + if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id(); + var nodes = {}; + var edges = {}; + if (directed) { + eles.forEach(function (ele) { + var id = ele.id(); + if (ele.isNode()) { + var ind = ele.indegree(true); + var outd = ele.outdegree(true); + var d1 = ind - outd; + var d2 = outd - ind; + if (d1 == 1) { + if (oddIn) dflag = true;else oddIn = id; + } else if (d2 == 1) { + if (oddOut) dflag = true;else oddOut = id; + } else if (d2 > 1 || d1 > 1) { + dflag = true; + } + nodes[id] = []; + ele.outgoers().forEach(function (e) { + if (e.isEdge()) nodes[id].push(e.id()); + }); + } else { + edges[id] = [undefined, ele.target().id()]; + } + }); + } else { + eles.forEach(function (ele) { + var id = ele.id(); + if (ele.isNode()) { + var d = ele.degree(true); + if (d % 2) { + if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true; + } + nodes[id] = []; + ele.connectedEdges().forEach(function (e) { + return nodes[id].push(e.id()); + }); + } else { + edges[id] = [ele.source().id(), ele.target().id()]; + } + }); + } + var result = { + found: false, + trail: undefined + }; + if (dflag) return result;else if (oddOut && oddIn) { + if (directed) { + if (startVertex && oddOut != startVertex) { + return result; + } + startVertex = oddOut; + } else { + if (startVertex && oddOut != startVertex && oddIn != startVertex) { + return result; + } else if (!startVertex) { + startVertex = oddOut; + } + } + } else { + if (!startVertex) startVertex = eles[0].id(); + } + var walk = function walk(v) { + var currentNode = v; + var subtour = [v]; + var adj, adjTail, adjHead; + while (nodes[currentNode].length) { + adj = nodes[currentNode].shift(); + adjTail = edges[adj][0]; + adjHead = edges[adj][1]; + if (currentNode != adjHead) { + nodes[adjHead] = nodes[adjHead].filter(function (e) { + return e != adj; + }); + currentNode = adjHead; + } else if (!directed && currentNode != adjTail) { + nodes[adjTail] = nodes[adjTail].filter(function (e) { + return e != adj; + }); + currentNode = adjTail; + } + subtour.unshift(adj); + subtour.unshift(currentNode); + } + return subtour; + }; + var trail = []; + var subtour = []; + subtour = walk(startVertex); + while (subtour.length != 1) { + if (nodes[subtour[0]].length == 0) { + trail.unshift(eles.getElementById(subtour.shift())); + trail.unshift(eles.getElementById(subtour.shift())); + } else { + subtour = walk(subtour.shift()).concat(subtour); + } + } + trail.unshift(eles.getElementById(subtour.shift())); // final node + + for (var d in nodes) { + if (nodes[d].length) { + return result; + } + } + result.found = true; + result.trail = this.spawn(trail, true); + return result; + } +}; + +var hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() { + var eles = this; + var nodes = {}; + var id = 0; + var edgeCount = 0; + var components = []; + var stack = []; + var visitedEdges = {}; + var buildComponent = function buildComponent(x, y) { + var i = stack.length - 1; + var cutset = []; + var component = eles.spawn(); + while (stack[i].x != x || stack[i].y != y) { + cutset.push(stack.pop().edge); + i--; + } + cutset.push(stack.pop().edge); + cutset.forEach(function (edge) { + var connectedNodes = edge.connectedNodes().intersection(eles); + component.merge(edge); + connectedNodes.forEach(function (node) { + var nodeId = node.id(); + var connectedEdges = node.connectedEdges().intersection(eles); + component.merge(node); + if (!nodes[nodeId].cutVertex) { + component.merge(connectedEdges); + } else { + component.merge(connectedEdges.filter(function (edge) { + return edge.isLoop(); + })); + } + }); + }); + components.push(component); + }; + var biconnectedSearch = function biconnectedSearch(root, currentNode, parent) { + if (root === parent) edgeCount += 1; + nodes[currentNode] = { + id: id, + low: id++, + cutVertex: false + }; + var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles); + if (edges.size() === 0) { + components.push(eles.spawn(eles.getElementById(currentNode))); + } else { + var sourceId, targetId, otherNodeId, edgeId; + edges.forEach(function (edge) { + sourceId = edge.source().id(); + targetId = edge.target().id(); + otherNodeId = sourceId === currentNode ? targetId : sourceId; + if (otherNodeId !== parent) { + edgeId = edge.id(); + if (!visitedEdges[edgeId]) { + visitedEdges[edgeId] = true; + stack.push({ + x: currentNode, + y: otherNodeId, + edge: edge + }); + } + if (!(otherNodeId in nodes)) { + biconnectedSearch(root, otherNodeId, currentNode); + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low); + if (nodes[currentNode].id <= nodes[otherNodeId].low) { + nodes[currentNode].cutVertex = true; + buildComponent(currentNode, otherNodeId); + } + } else { + nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id); + } + } + }); + } + }; + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + if (!(nodeId in nodes)) { + edgeCount = 0; + biconnectedSearch(nodeId, nodeId); + nodes[nodeId].cutVertex = edgeCount > 1; + } + } + }); + var cutVertices = Object.keys(nodes).filter(function (id) { + return nodes[id].cutVertex; + }).map(function (id) { + return eles.getElementById(id); + }); + return { + cut: eles.spawn(cutVertices), + components: components + }; +}; +var hopcroftTarjanBiconnected$1 = { + hopcroftTarjanBiconnected: hopcroftTarjanBiconnected, + htbc: hopcroftTarjanBiconnected, + htb: hopcroftTarjanBiconnected, + hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected +}; + +var tarjanStronglyConnected = function tarjanStronglyConnected() { + var eles = this; + var nodes = {}; + var index = 0; + var components = []; + var stack = []; + var cut = eles.spawn(eles); + var stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) { + stack.push(sourceNodeId); + nodes[sourceNodeId] = { + index: index, + low: index++, + explored: false + }; + var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles); + connectedEdges.forEach(function (edge) { + var targetNodeId = edge.target().id(); + if (targetNodeId !== sourceNodeId) { + if (!(targetNodeId in nodes)) { + stronglyConnectedSearch(targetNodeId); + } + if (!nodes[targetNodeId].explored) { + nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low); + } + } + }); + if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) { + var componentNodes = eles.spawn(); + for (;;) { + var nodeId = stack.pop(); + componentNodes.merge(eles.getElementById(nodeId)); + nodes[nodeId].low = nodes[sourceNodeId].index; + nodes[nodeId].explored = true; + if (nodeId === sourceNodeId) { + break; + } + } + var componentEdges = componentNodes.edgesWith(componentNodes); + var component = componentNodes.merge(componentEdges); + components.push(component); + cut = cut.difference(component); + } + }; + eles.forEach(function (ele) { + if (ele.isNode()) { + var nodeId = ele.id(); + if (!(nodeId in nodes)) { + stronglyConnectedSearch(nodeId); + } + } + }); + return { + cut: cut, + components: components + }; +}; +var tarjanStronglyConnected$1 = { + tarjanStronglyConnected: tarjanStronglyConnected, + tsc: tarjanStronglyConnected, + tscc: tarjanStronglyConnected, + tarjanStronglyConnectedComponents: tarjanStronglyConnected +}; + +var elesfn$j = {}; +[elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) { + extend(elesfn$j, props); +}); + +/*! +Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable +Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) +Licensed under The MIT License (http://opensource.org/licenses/MIT) +*/ + +/* promise states [Promises/A+ 2.1] */ +var STATE_PENDING = 0; /* [Promises/A+ 2.1.1] */ +var STATE_FULFILLED = 1; /* [Promises/A+ 2.1.2] */ +var STATE_REJECTED = 2; /* [Promises/A+ 2.1.3] */ + +/* promise object constructor */ +var api = function api(executor) { + /* optionally support non-constructor/plain-function call */ + if (!(this instanceof api)) return new api(executor); + + /* initialize object */ + this.id = 'Thenable/1.0.7'; + this.state = STATE_PENDING; /* initial state */ + this.fulfillValue = undefined; /* initial value */ /* [Promises/A+ 1.3, 2.1.2.2] */ + this.rejectReason = undefined; /* initial reason */ /* [Promises/A+ 1.5, 2.1.3.2] */ + this.onFulfilled = []; /* initial handlers */ + this.onRejected = []; /* initial handlers */ + + /* provide optional information-hiding proxy */ + this.proxy = { + then: this.then.bind(this) + }; + + /* support optional executor function */ + if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this)); +}; + +/* promise API methods */ +api.prototype = { + /* promise resolving methods */ + fulfill: function fulfill(value) { + return deliver(this, STATE_FULFILLED, 'fulfillValue', value); + }, + reject: function reject(value) { + return deliver(this, STATE_REJECTED, 'rejectReason', value); + }, + /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */ + then: function then(onFulfilled, onRejected) { + var curr = this; + var next = new api(); /* [Promises/A+ 2.2.7] */ + curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); /* [Promises/A+ 2.2.2/2.2.6] */ + curr.onRejected.push(resolver(onRejected, next, 'reject')); /* [Promises/A+ 2.2.3/2.2.6] */ + execute(curr); + return next.proxy; /* [Promises/A+ 2.2.7, 3.3] */ + } +}; + +/* deliver an action */ +var deliver = function deliver(curr, state, name, value) { + if (curr.state === STATE_PENDING) { + curr.state = state; /* [Promises/A+ 2.1.2.1, 2.1.3.1] */ + curr[name] = value; /* [Promises/A+ 2.1.2.2, 2.1.3.2] */ + execute(curr); + } + return curr; +}; + +/* execute all handlers */ +var execute = function execute(curr) { + if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason); +}; + +/* execute particular set of handlers */ +var execute_handlers = function execute_handlers(curr, name, value) { + /* global setImmediate: true */ + /* global setTimeout: true */ + + /* short-circuit processing */ + if (curr[name].length === 0) return; + + /* iterate over all handlers, exactly once */ + var handlers = curr[name]; + curr[name] = []; /* [Promises/A+ 2.2.2.3, 2.2.3.3] */ + var func = function func() { + for (var i = 0; i < handlers.length; i++) { + handlers[i](value); + } /* [Promises/A+ 2.2.5] */ + }; + + /* execute procedure asynchronously */ /* [Promises/A+ 2.2.4, 3.1] */ + if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0); +}; + +/* generate a resolver function */ +var resolver = function resolver(cb, next, method) { + return function (value) { + if (typeof cb !== 'function') /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */ + next[method].call(next, value); /* [Promises/A+ 2.2.7.3, 2.2.7.4] */else { + var result; + try { + result = cb(value); + } /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ catch (e) { + next.reject(e); /* [Promises/A+ 2.2.7.2] */ + return; + } + resolve(next, result); /* [Promises/A+ 2.2.7.1] */ + } + }; +}; + +/* "Promise Resolution Procedure" */ /* [Promises/A+ 2.3] */ +var resolve = function resolve(promise, x) { + /* sanity check arguments */ /* [Promises/A+ 2.3.1] */ + if (promise === x || promise.proxy === x) { + promise.reject(new TypeError('cannot resolve promise with itself')); + return; + } + + /* surgically check for a "then" method + (mainly to just call the "getter" of "then" only once) */ + var then; + if (_typeof(x) === 'object' && x !== null || typeof x === 'function') { + try { + then = x.then; + } /* [Promises/A+ 2.3.3.1, 3.5] */ catch (e) { + promise.reject(e); /* [Promises/A+ 2.3.3.2] */ + return; + } + } + + /* handle own Thenables [Promises/A+ 2.3.2] + and similar "thenables" [Promises/A+ 2.3.3] */ + if (typeof then === 'function') { + var resolved = false; + try { + /* call retrieved "then" method */ /* [Promises/A+ 2.3.3.3] */ + then.call(x, /* resolvePromise */ /* [Promises/A+ 2.3.3.3.1] */ + function (y) { + if (resolved) return; + resolved = true; /* [Promises/A+ 2.3.3.3.3] */ + if (y === x) /* [Promises/A+ 3.6] */ + promise.reject(new TypeError('circular thenable chain'));else resolve(promise, y); + }, /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */ + function (r) { + if (resolved) return; + resolved = true; /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(r); + }); + } catch (e) { + if (!resolved) /* [Promises/A+ 2.3.3.3.3] */ + promise.reject(e); /* [Promises/A+ 2.3.3.3.4] */ + } + + return; + } + + /* handle other values */ + promise.fulfill(x); /* [Promises/A+ 2.3.4, 2.3.3.4] */ +}; + +// so we always have Promise.all() +api.all = function (ps) { + return new api(function (resolveAll, rejectAll) { + var vals = new Array(ps.length); + var doneCount = 0; + var fulfill = function fulfill(i, val) { + vals[i] = val; + doneCount++; + if (doneCount === ps.length) { + resolveAll(vals); + } + }; + for (var i = 0; i < ps.length; i++) { + (function (i) { + var p = ps[i]; + var isPromise = p != null && p.then != null; + if (isPromise) { + p.then(function (val) { + fulfill(i, val); + }, function (err) { + rejectAll(err); + }); + } else { + var val = p; + fulfill(i, val); + } + })(i); + } + }); +}; +api.resolve = function (val) { + return new api(function (resolve, reject) { + resolve(val); + }); +}; +api.reject = function (val) { + return new api(function (resolve, reject) { + reject(val); + }); +}; +var Promise$1 = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef + +var Animation = function Animation(target, opts, opts2) { + var isCore = core(target); + var isEle = !isCore; + var _p = this._private = extend({ + duration: 1000 + }, opts, opts2); + _p.target = target; + _p.style = _p.style || _p.css; + _p.started = false; + _p.playing = false; + _p.hooked = false; + _p.applying = false; + _p.progress = 0; + _p.completes = []; + _p.frames = []; + if (_p.complete && fn$6(_p.complete)) { + _p.completes.push(_p.complete); + } + if (isEle) { + var pos = target.position(); + _p.startPosition = _p.startPosition || { + x: pos.x, + y: pos.y + }; + _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style); + } + if (isCore) { + var pan = target.pan(); + _p.startPan = { + x: pan.x, + y: pan.y + }; + _p.startZoom = target.zoom(); + } + + // for future timeline/animations impl + this.length = 1; + this[0] = this; +}; +var anifn = Animation.prototype; +extend(anifn, { + instanceString: function instanceString() { + return 'animation'; + }, + hook: function hook() { + var _p = this._private; + if (!_p.hooked) { + // add to target's animation queue + var q; + var tAni = _p.target._private.animation; + if (_p.queue) { + q = tAni.queue; + } else { + q = tAni.current; + } + q.push(this); + + // add to the animation loop pool + if (elementOrCollection(_p.target)) { + _p.target.cy().addToAnimationPool(_p.target); + } + _p.hooked = true; + } + return this; + }, + play: function play() { + var _p = this._private; + + // autorewind + if (_p.progress === 1) { + _p.progress = 0; + } + _p.playing = true; + _p.started = false; // needs to be started by animation loop + _p.stopped = false; + this.hook(); + + // the animation loop will start the animation... + + return this; + }, + playing: function playing() { + return this._private.playing; + }, + apply: function apply() { + var _p = this._private; + _p.applying = true; + _p.started = false; // needs to be started by animation loop + _p.stopped = false; + this.hook(); + + // the animation loop will apply the animation at this progress + + return this; + }, + applying: function applying() { + return this._private.applying; + }, + pause: function pause() { + var _p = this._private; + _p.playing = false; + _p.started = false; + return this; + }, + stop: function stop() { + var _p = this._private; + _p.playing = false; + _p.started = false; + _p.stopped = true; // to be removed from animation queues + + return this; + }, + rewind: function rewind() { + return this.progress(0); + }, + fastforward: function fastforward() { + return this.progress(1); + }, + time: function time(t) { + var _p = this._private; + if (t === undefined) { + return _p.progress * _p.duration; + } else { + return this.progress(t / _p.duration); + } + }, + progress: function progress(p) { + var _p = this._private; + var wasPlaying = _p.playing; + if (p === undefined) { + return _p.progress; + } else { + if (wasPlaying) { + this.pause(); + } + _p.progress = p; + _p.started = false; + if (wasPlaying) { + this.play(); + } + } + return this; + }, + completed: function completed() { + return this._private.progress === 1; + }, + reverse: function reverse() { + var _p = this._private; + var wasPlaying = _p.playing; + if (wasPlaying) { + this.pause(); + } + _p.progress = 1 - _p.progress; + _p.started = false; + var swap = function swap(a, b) { + var _pa = _p[a]; + if (_pa == null) { + return; + } + _p[a] = _p[b]; + _p[b] = _pa; + }; + swap('zoom', 'startZoom'); + swap('pan', 'startPan'); + swap('position', 'startPosition'); + + // swap styles + if (_p.style) { + for (var i = 0; i < _p.style.length; i++) { + var prop = _p.style[i]; + var name = prop.name; + var startStyleProp = _p.startStyle[name]; + _p.startStyle[name] = prop; + _p.style[i] = startStyleProp; + } + } + if (wasPlaying) { + this.play(); + } + return this; + }, + promise: function promise(type) { + var _p = this._private; + var arr; + switch (type) { + case 'frame': + arr = _p.frames; + break; + default: + case 'complete': + case 'completed': + arr = _p.completes; + } + return new Promise$1(function (resolve, reject) { + arr.push(function () { + resolve(); + }); + }); + } +}); +anifn.complete = anifn.completed; +anifn.run = anifn.play; +anifn.running = anifn.playing; + +var define$3 = { + animated: function animated() { + return function animatedImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return false; + } + var ele = all[0]; + if (ele) { + return ele._private.animation.current.length > 0; + } + }; + }, + // animated + + clearQueue: function clearQueue() { + return function clearQueueImpl() { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + ele._private.animation.queue = []; + } + return this; + }; + }, + // clearQueue + + delay: function delay() { + return function delayImpl(time, complete) { + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + return this.animate({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + + delayAnimation: function delayAnimation() { + return function delayAnimationImpl(time, complete) { + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + return this.animation({ + delay: time, + duration: time, + complete: complete + }); + }; + }, + // delay + + animation: function animation() { + return function animationImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + var isCore = !selfIsArrayLike; + var isEles = !isCore; + if (!cy.styleEnabled()) { + return this; + } + var style = cy.style(); + properties = extend({}, properties, params); + var propertiesEmpty = Object.keys(properties).length === 0; + if (propertiesEmpty) { + return new Animation(all[0], properties); // nothing to animate + } + + if (properties.duration === undefined) { + properties.duration = 400; + } + switch (properties.duration) { + case 'slow': + properties.duration = 600; + break; + case 'fast': + properties.duration = 200; + break; + } + if (isEles) { + properties.style = style.getPropsList(properties.style || properties.css); + properties.css = undefined; + } + if (isEles && properties.renderedPosition != null) { + var rpos = properties.renderedPosition; + var pan = cy.pan(); + var zoom = cy.zoom(); + properties.position = renderedToModelPosition(rpos, zoom, pan); + } + + // override pan w/ panBy if set + if (isCore && properties.panBy != null) { + var panBy = properties.panBy; + var cyPan = cy.pan(); + properties.pan = { + x: cyPan.x + panBy.x, + y: cyPan.y + panBy.y + }; + } + + // override pan w/ center if set + var center = properties.center || properties.centre; + if (isCore && center != null) { + var centerPan = cy.getCenterPan(center.eles, properties.zoom); + if (centerPan != null) { + properties.pan = centerPan; + } + } + + // override pan & zoom w/ fit if set + if (isCore && properties.fit != null) { + var fit = properties.fit; + var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding); + if (fitVp != null) { + properties.pan = fitVp.pan; + properties.zoom = fitVp.zoom; + } + } + + // override zoom (& potentially pan) w/ zoom obj if set + if (isCore && plainObject(properties.zoom)) { + var vp = cy.getZoomedViewport(properties.zoom); + if (vp != null) { + if (vp.zoomed) { + properties.zoom = vp.zoom; + } + if (vp.panned) { + properties.pan = vp.pan; + } + } else { + properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed + } + } + + return new Animation(all[0], properties); + }; + }, + // animate + + animate: function animate() { + return function animateImpl(properties, params) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + if (params) { + properties = extend({}, properties, params); + } + + // manually hook and run the animation + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var queue = ele.animated() && (properties.queue === undefined || properties.queue); + var ani = ele.animation(properties, queue ? { + queue: true + } : undefined); + ani.play(); + } + return this; // chaining + }; + }, + + // animate + + stop: function stop() { + return function stopImpl(clearQueue, jumpToEnd) { + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var cy = this._private.cy || this; + if (!cy.styleEnabled()) { + return this; + } + for (var i = 0; i < all.length; i++) { + var ele = all[i]; + var _p = ele._private; + var anis = _p.animation.current; + for (var j = 0; j < anis.length; j++) { + var ani = anis[j]; + var ani_p = ani._private; + if (jumpToEnd) { + // next iteration of the animation loop, the animation + // will go straight to the end and be removed + ani_p.duration = 0; + } + } + + // clear the queue of future animations + if (clearQueue) { + _p.animation.queue = []; + } + if (!jumpToEnd) { + _p.animation.current = []; + } + } + + // we have to notify (the animation loop doesn't do it for us on `stop`) + cy.notify('draw'); + return this; + }; + } // stop +}; // define + +var define$2 = { + // access data field + data: function data(params) { + var defaults = { + field: 'data', + bindingEvent: 'data', + allowBinding: false, + allowSetting: false, + allowGetting: false, + settingEvent: 'data', + settingTriggersEvent: false, + triggerFnName: 'trigger', + immutableKeys: {}, + // key => true if immutable + updateStyle: false, + beforeGet: function beforeGet(self) {}, + beforeSet: function beforeSet(self, obj) {}, + onSet: function onSet(self) {}, + canSet: function canSet(self) { + return true; + } + }; + params = extend({}, defaults, params); + return function dataImpl(name, value) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + var single = selfIsArrayLike ? self[0] : self; + + // .data('foo', ...) + if (string(name)) { + // set or get property + var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot + var path = isPathLike && toPath__default["default"](name); + + // .data('foo') + if (p.allowGetting && value === undefined) { + // get + + var ret; + if (single) { + p.beforeGet(single); + + // check if it's path and a field with the same name doesn't exist + if (path && single._private[p.field][name] === undefined) { + ret = get__default["default"](single._private[p.field], path); + } else { + ret = single._private[p.field][name]; + } + } + return ret; + + // .data('foo', 'bar') + } else if (p.allowSetting && value !== undefined) { + // set + var valid = !p.immutableKeys[name]; + if (valid) { + var change = _defineProperty({}, name, value); + p.beforeSet(self, change); + for (var i = 0, l = all.length; i < l; i++) { + var ele = all[i]; + if (p.canSet(ele)) { + if (path && single._private[p.field][name] === undefined) { + set__default["default"](ele._private[p.field], path, value); + } else { + ele._private[p.field][name] = value; + } + } + } + + // update mappers if asked + if (p.updateStyle) { + self.updateStyle(); + } + + // call onSet callback + p.onSet(self); + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + } + } + + // .data({ 'foo': 'bar' }) + } else if (p.allowSetting && plainObject(name)) { + // extend + var obj = name; + var k, v; + var keys = Object.keys(obj); + p.beforeSet(self, obj); + for (var _i = 0; _i < keys.length; _i++) { + k = keys[_i]; + v = obj[k]; + var _valid = !p.immutableKeys[k]; + if (_valid) { + for (var j = 0; j < all.length; j++) { + var _ele = all[j]; + if (p.canSet(_ele)) { + _ele._private[p.field][k] = v; + } + } + } + } + + // update mappers if asked + if (p.updateStyle) { + self.updateStyle(); + } + + // call onSet callback + p.onSet(self); + if (p.settingTriggersEvent) { + self[p.triggerFnName](p.settingEvent); + } + + // .data(function(){ ... }) + } else if (p.allowBinding && fn$6(name)) { + // bind to event + var fn = name; + self.on(p.bindingEvent, fn); + + // .data() + } else if (p.allowGetting && name === undefined) { + // get whole object + var _ret; + if (single) { + p.beforeGet(single); + _ret = single._private[p.field]; + } + return _ret; + } + return self; // maintain chainability + }; // function + }, + + // data + + // remove data field + removeData: function removeData(params) { + var defaults = { + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: false, + immutableKeys: {} // key => true if immutable + }; + + params = extend({}, defaults, params); + return function removeDataImpl(names) { + var p = params; + var self = this; + var selfIsArrayLike = self.length !== undefined; + var all = selfIsArrayLike ? self : [self]; // put in array if not array-like + + // .removeData('foo bar') + if (string(names)) { + // then get the list of keys, and delete them + var keys = names.split(/\s+/); + var l = keys.length; + for (var i = 0; i < l; i++) { + // delete each non-empty key + var key = keys[i]; + if (emptyString(key)) { + continue; + } + var valid = !p.immutableKeys[key]; // not valid if immutable + if (valid) { + for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) { + all[i_a]._private[p.field][key] = undefined; + } + } + } + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + + // .removeData() + } else if (names === undefined) { + // then delete all keys + + for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) { + var _privateFields = all[_i_a]._private[p.field]; + var _keys = Object.keys(_privateFields); + for (var _i2 = 0; _i2 < _keys.length; _i2++) { + var _key = _keys[_i2]; + var validKeyToDelete = !p.immutableKeys[_key]; + if (validKeyToDelete) { + _privateFields[_key] = undefined; + } + } + } + if (p.triggerEvent) { + self[p.triggerFnName](p.event); + } + } + return self; // maintain chaining + }; // function + } // removeData +}; // define + +var define$1 = { + eventAliasesOn: function eventAliasesOn(proto) { + var p = proto; + p.addListener = p.listen = p.bind = p.on; + p.unlisten = p.unbind = p.off = p.removeListener; + p.trigger = p.emit; + + // this is just a wrapper alias of .on() + p.pon = p.promiseOn = function (events, selector) { + var self = this; + var args = Array.prototype.slice.call(arguments, 0); + return new Promise$1(function (resolve, reject) { + var callback = function callback(e) { + self.off.apply(self, offArgs); + resolve(e); + }; + var onArgs = args.concat([callback]); + var offArgs = onArgs.concat([]); + self.on.apply(self, onArgs); + }); + }; + } +}; // define + +// use this module to cherry pick functions into your prototype +var define = {}; +[define$3, define$2, define$1].forEach(function (m) { + extend(define, m); +}); + +var elesfn$i = { + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop() +}; + +var elesfn$h = { + classes: function classes(_classes) { + var self = this; + if (_classes === undefined) { + var ret = []; + self[0]._private.classes.forEach(function (cls) { + return ret.push(cls); + }); + return ret; + } else if (!array(_classes)) { + // extract classes from string + _classes = (_classes || '').match(/\S+/g) || []; + } + var changed = []; + var classesSet = new Set$1(_classes); + + // check and update each ele + for (var j = 0; j < self.length; j++) { + var ele = self[j]; + var _p = ele._private; + var eleClasses = _p.classes; + var changedEle = false; + + // check if ele has all of the passed classes + for (var i = 0; i < _classes.length; i++) { + var cls = _classes[i]; + var eleHasClass = eleClasses.has(cls); + if (!eleHasClass) { + changedEle = true; + break; + } + } + + // check if ele has classes outside of those passed + if (!changedEle) { + changedEle = eleClasses.size !== _classes.length; + } + if (changedEle) { + _p.classes = classesSet; + changed.push(ele); + } + } + + // trigger update style on those eles that had class changes + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + return self; + }, + addClass: function addClass(classes) { + return this.toggleClass(classes, true); + }, + hasClass: function hasClass(className) { + var ele = this[0]; + return ele != null && ele._private.classes.has(className); + }, + toggleClass: function toggleClass(classes, toggle) { + if (!array(classes)) { + // extract classes from string + classes = classes.match(/\S+/g) || []; + } + var self = this; + var toggleUndefd = toggle === undefined; + var changed = []; // eles who had classes changed + + for (var i = 0, il = self.length; i < il; i++) { + var ele = self[i]; + var eleClasses = ele._private.classes; + var changedEle = false; + for (var j = 0; j < classes.length; j++) { + var cls = classes[j]; + var hasClass = eleClasses.has(cls); + var changedNow = false; + if (toggle || toggleUndefd && !hasClass) { + eleClasses.add(cls); + changedNow = true; + } else if (!toggle || toggleUndefd && hasClass) { + eleClasses["delete"](cls); + changedNow = true; + } + if (!changedEle && changedNow) { + changed.push(ele); + changedEle = true; + } + } // for j classes + } // for i eles + + // trigger update style on those eles that had class changes + if (changed.length > 0) { + this.spawn(changed).updateStyle().emit('class'); + } + return self; + }, + removeClass: function removeClass(classes) { + return this.toggleClass(classes, false); + }, + flashClass: function flashClass(classes, duration) { + var self = this; + if (duration == null) { + duration = 250; + } else if (duration === 0) { + return self; // nothing to do really + } + + self.addClass(classes); + setTimeout(function () { + self.removeClass(classes); + }, duration); + return self; + } +}; +elesfn$h.className = elesfn$h.classNames = elesfn$h.classes; + +// tokens in the query language +var tokens = { + metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', + // chars we need to escape in let names, etc + comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', + // binary comparison op (used in data selectors) + boolOp: '\\?|\\!|\\^', + // boolean (unary) operators (used in data selectors) + string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", + // string literals (used in data selectors) -- doublequotes | singlequotes + number: number, + // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123 + meta: 'degree|indegree|outdegree', + // allowed metadata fields (i.e. allowed functions to use from Collection) + separator: '\\s*,\\s*', + // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass + descendant: '\\s+', + child: '\\s+>\\s+', + subject: '\\$', + group: 'node|edge|\\*', + directedEdge: '\\s+->\\s+', + undirectedEdge: '\\s+<->\\s+' +}; +tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods +tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name +tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number +tokens.id = tokens.variable; // an element id (follows variable conventions) + +(function () { + var ops, op, i; + + // add @ variants to comparatorOp + ops = tokens.comparatorOp.split('|'); + for (i = 0; i < ops.length; i++) { + op = ops[i]; + tokens.comparatorOp += '|@' + op; + } + + // add ! variants to comparatorOp + ops = tokens.comparatorOp.split('|'); + for (i = 0; i < ops.length; i++) { + op = ops[i]; + if (op.indexOf('!') >= 0) { + continue; + } // skip ops that explicitly contain ! + if (op === '=') { + continue; + } // skip = b/c != is explicitly defined + + tokens.comparatorOp += '|\\!' + op; + } +})(); + +/** + * Make a new query object + * + * @prop type {Type} The type enum (int) of the query + * @prop checks List of checks to make against an ele to test for a match + */ +var newQuery = function newQuery() { + return { + checks: [] + }; +}; + +/** + * A check type enum-like object. Uses integer values for fast match() lookup. + * The ordering does not matter as long as the ints are unique. + */ +var Type = { + /** E.g. node */ + GROUP: 0, + /** A collection of elements */ + COLLECTION: 1, + /** A filter(ele) function */ + FILTER: 2, + /** E.g. [foo > 1] */ + DATA_COMPARE: 3, + /** E.g. [foo] */ + DATA_EXIST: 4, + /** E.g. [?foo] */ + DATA_BOOL: 5, + /** E.g. [[degree > 2]] */ + META_COMPARE: 6, + /** E.g. :selected */ + STATE: 7, + /** E.g. #foo */ + ID: 8, + /** E.g. .foo */ + CLASS: 9, + /** E.g. #foo <-> #bar */ + UNDIRECTED_EDGE: 10, + /** E.g. #foo -> #bar */ + DIRECTED_EDGE: 11, + /** E.g. $#foo -> #bar */ + NODE_SOURCE: 12, + /** E.g. #foo -> $#bar */ + NODE_TARGET: 13, + /** E.g. $#foo <-> #bar */ + NODE_NEIGHBOR: 14, + /** E.g. #foo > #bar */ + CHILD: 15, + /** E.g. #foo #bar */ + DESCENDANT: 16, + /** E.g. $#foo > #bar */ + PARENT: 17, + /** E.g. $#foo #bar */ + ANCESTOR: 18, + /** E.g. #foo > $bar > #baz */ + COMPOUND_SPLIT: 19, + /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */ + TRUE: 20 +}; + +var stateSelectors = [{ + selector: ':selected', + matches: function matches(ele) { + return ele.selected(); + } +}, { + selector: ':unselected', + matches: function matches(ele) { + return !ele.selected(); + } +}, { + selector: ':selectable', + matches: function matches(ele) { + return ele.selectable(); + } +}, { + selector: ':unselectable', + matches: function matches(ele) { + return !ele.selectable(); + } +}, { + selector: ':locked', + matches: function matches(ele) { + return ele.locked(); + } +}, { + selector: ':unlocked', + matches: function matches(ele) { + return !ele.locked(); + } +}, { + selector: ':visible', + matches: function matches(ele) { + return ele.visible(); + } +}, { + selector: ':hidden', + matches: function matches(ele) { + return !ele.visible(); + } +}, { + selector: ':transparent', + matches: function matches(ele) { + return ele.transparent(); + } +}, { + selector: ':grabbed', + matches: function matches(ele) { + return ele.grabbed(); + } +}, { + selector: ':free', + matches: function matches(ele) { + return !ele.grabbed(); + } +}, { + selector: ':removed', + matches: function matches(ele) { + return ele.removed(); + } +}, { + selector: ':inside', + matches: function matches(ele) { + return !ele.removed(); + } +}, { + selector: ':grabbable', + matches: function matches(ele) { + return ele.grabbable(); + } +}, { + selector: ':ungrabbable', + matches: function matches(ele) { + return !ele.grabbable(); + } +}, { + selector: ':animated', + matches: function matches(ele) { + return ele.animated(); + } +}, { + selector: ':unanimated', + matches: function matches(ele) { + return !ele.animated(); + } +}, { + selector: ':parent', + matches: function matches(ele) { + return ele.isParent(); + } +}, { + selector: ':childless', + matches: function matches(ele) { + return ele.isChildless(); + } +}, { + selector: ':child', + matches: function matches(ele) { + return ele.isChild(); + } +}, { + selector: ':orphan', + matches: function matches(ele) { + return ele.isOrphan(); + } +}, { + selector: ':nonorphan', + matches: function matches(ele) { + return ele.isChild(); + } +}, { + selector: ':compound', + matches: function matches(ele) { + if (ele.isNode()) { + return ele.isParent(); + } else { + return ele.source().isParent() || ele.target().isParent(); + } + } +}, { + selector: ':loop', + matches: function matches(ele) { + return ele.isLoop(); + } +}, { + selector: ':simple', + matches: function matches(ele) { + return ele.isSimple(); + } +}, { + selector: ':active', + matches: function matches(ele) { + return ele.active(); + } +}, { + selector: ':inactive', + matches: function matches(ele) { + return !ele.active(); + } +}, { + selector: ':backgrounding', + matches: function matches(ele) { + return ele.backgrounding(); + } +}, { + selector: ':nonbackgrounding', + matches: function matches(ele) { + return !ele.backgrounding(); + } +}].sort(function (a, b) { + // n.b. selectors that are starting substrings of others must have the longer ones first + return descending(a.selector, b.selector); +}); +var lookup = function () { + var selToFn = {}; + var s; + for (var i = 0; i < stateSelectors.length; i++) { + s = stateSelectors[i]; + selToFn[s.selector] = s.matches; + } + return selToFn; +}(); +var stateSelectorMatches = function stateSelectorMatches(sel, ele) { + return lookup[sel](ele); +}; +var stateSelectorRegex = '(' + stateSelectors.map(function (s) { + return s.selector; +}).join('|') + ')'; + +// when a token like a variable has escaped meta characters, we need to clean the backslashes out +// so that values get compared properly in Selector.filter() +var cleanMetaChars = function cleanMetaChars(str) { + return str.replace(new RegExp('\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) { + return $1; + }); +}; +var replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) { + selector[selector.length - 1] = replacementQuery; +}; + +// NOTE: add new expression syntax here to have it recognised by the parser; +// - a query contains all adjacent (i.e. no separator in between) expressions; +// - the current query is stored in selector[i] +// - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward +var exprs = [{ + name: 'group', + // just used for identifying when debugging + query: true, + regex: '(' + tokens.group + ')', + populate: function populate(selector, query, _ref) { + var _ref2 = _slicedToArray(_ref, 1), + group = _ref2[0]; + query.checks.push({ + type: Type.GROUP, + value: group === '*' ? group : group + 's' + }); + } +}, { + name: 'state', + query: true, + regex: stateSelectorRegex, + populate: function populate(selector, query, _ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + state = _ref4[0]; + query.checks.push({ + type: Type.STATE, + value: state + }); + } +}, { + name: 'id', + query: true, + regex: '\\#(' + tokens.id + ')', + populate: function populate(selector, query, _ref5) { + var _ref6 = _slicedToArray(_ref5, 1), + id = _ref6[0]; + query.checks.push({ + type: Type.ID, + value: cleanMetaChars(id) + }); + } +}, { + name: 'className', + query: true, + regex: '\\.(' + tokens.className + ')', + populate: function populate(selector, query, _ref7) { + var _ref8 = _slicedToArray(_ref7, 1), + className = _ref8[0]; + query.checks.push({ + type: Type.CLASS, + value: cleanMetaChars(className) + }); + } +}, { + name: 'dataExists', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref9) { + var _ref10 = _slicedToArray(_ref9, 1), + variable = _ref10[0]; + query.checks.push({ + type: Type.DATA_EXIST, + field: cleanMetaChars(variable) + }); + } +}, { + name: 'dataCompare', + query: true, + regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]', + populate: function populate(selector, query, _ref11) { + var _ref12 = _slicedToArray(_ref11, 3), + variable = _ref12[0], + comparatorOp = _ref12[1], + value = _ref12[2]; + var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null; + if (valueIsString) { + value = value.substring(1, value.length - 1); + } else { + value = parseFloat(value); + } + query.checks.push({ + type: Type.DATA_COMPARE, + field: cleanMetaChars(variable), + operator: comparatorOp, + value: value + }); + } +}, { + name: 'dataBool', + query: true, + regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]', + populate: function populate(selector, query, _ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + boolOp = _ref14[0], + variable = _ref14[1]; + query.checks.push({ + type: Type.DATA_BOOL, + field: cleanMetaChars(variable), + operator: boolOp + }); + } +}, { + name: 'metaCompare', + query: true, + regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]', + populate: function populate(selector, query, _ref15) { + var _ref16 = _slicedToArray(_ref15, 3), + meta = _ref16[0], + comparatorOp = _ref16[1], + number = _ref16[2]; + query.checks.push({ + type: Type.META_COMPARE, + field: cleanMetaChars(meta), + operator: comparatorOp, + value: parseFloat(number) + }); + } +}, { + name: 'nextQuery', + separator: true, + regex: tokens.separator, + populate: function populate(selector, query) { + var currentSubject = selector.currentSubject; + var edgeCount = selector.edgeCount; + var compoundCount = selector.compoundCount; + var lastQ = selector[selector.length - 1]; + if (currentSubject != null) { + lastQ.subject = currentSubject; + selector.currentSubject = null; + } + lastQ.edgeCount = edgeCount; + lastQ.compoundCount = compoundCount; + selector.edgeCount = 0; + selector.compoundCount = 0; + + // go on to next query + var nextQuery = selector[selector.length++] = newQuery(); + return nextQuery; // this is the new query to be filled by the following exprs + } +}, { + name: 'directedEdge', + separator: true, + regex: tokens.directedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.DIRECTED_EDGE, + source: source, + target: target + }); + + // the query in the selector should be the edge rather than the source + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; + + // we're now populating the target query with expressions that follow + return target; + } else { + // source/target + var srcTgtQ = newQuery(); + var _source = query; + var _target = newQuery(); + srcTgtQ.checks.push({ + type: Type.NODE_SOURCE, + source: _source, + target: _target + }); + + // the query in the selector should be the neighbourhood rather than the node + replaceLastQuery(selector, query, srcTgtQ); + selector.edgeCount++; + return _target; // now populating the target with the following expressions + } + } +}, { + name: 'undirectedEdge', + separator: true, + regex: tokens.undirectedEdge, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // undirected edge + var edgeQuery = newQuery(); + var source = query; + var target = newQuery(); + edgeQuery.checks.push({ + type: Type.UNDIRECTED_EDGE, + nodes: [source, target] + }); + + // the query in the selector should be the edge rather than the source + replaceLastQuery(selector, query, edgeQuery); + selector.edgeCount++; + + // we're now populating the target query with expressions that follow + return target; + } else { + // neighbourhood + var nhoodQ = newQuery(); + var node = query; + var neighbor = newQuery(); + nhoodQ.checks.push({ + type: Type.NODE_NEIGHBOR, + node: node, + neighbor: neighbor + }); + + // the query in the selector should be the neighbourhood rather than the node + replaceLastQuery(selector, query, nhoodQ); + return neighbor; // now populating the neighbor with following expressions + } + } +}, { + name: 'child', + separator: true, + regex: tokens.child, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: child query + var parentChildQuery = newQuery(); + var child = newQuery(); + var parent = selector[selector.length - 1]; + parentChildQuery.checks.push({ + type: Type.CHILD, + parent: parent, + child: child + }); + + // the query in the selector should be the '>' itself + replaceLastQuery(selector, query, parentChildQuery); + selector.compoundCount++; + + // we're now populating the child query with expressions that follow + return child; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + var _child = newQuery(); + var _parent = newQuery(); + + // set up the root compound q + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); + + // populate the subject and replace the q at the old spot (within left) with TRUE + subject.checks = query.checks; // take the checks from the left + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + + // set up the right q + _parent.checks.push({ + type: Type.TRUE + }); // parent implicitly refs the subject + right.checks.push({ + type: Type.PARENT, + // type is swapped on right side queries + parent: _parent, + child: _child // empty for now + }); + + replaceLastQuery(selector, left, compound); + + // update the ref since we moved things around for `query` + selector.currentSubject = subject; + selector.compoundCount++; + return _child; // now populating the right side's child + } else { + // parent query + // info for parent query + var _parent2 = newQuery(); + var _child2 = newQuery(); + var pcQChecks = [{ + type: Type.PARENT, + parent: _parent2, + child: _child2 + }]; + + // the parent-child query takes the place of the query previously being populated + _parent2.checks = query.checks; // the previous query contains the checks for the parent + query.checks = pcQChecks; // pc query takes over + + selector.compoundCount++; + return _child2; // we're now populating the child + } + } +}, { + name: 'descendant', + separator: true, + regex: tokens.descendant, + populate: function populate(selector, query) { + if (selector.currentSubject == null) { + // default: descendant query + var ancChQuery = newQuery(); + var descendant = newQuery(); + var ancestor = selector[selector.length - 1]; + ancChQuery.checks.push({ + type: Type.DESCENDANT, + ancestor: ancestor, + descendant: descendant + }); + + // the query in the selector should be the '>' itself + replaceLastQuery(selector, query, ancChQuery); + selector.compoundCount++; + + // we're now populating the descendant query with expressions that follow + return descendant; + } else if (selector.currentSubject === query) { + // compound split query + var compound = newQuery(); + var left = selector[selector.length - 1]; + var right = newQuery(); + var subject = newQuery(); + var _descendant = newQuery(); + var _ancestor = newQuery(); + + // set up the root compound q + compound.checks.push({ + type: Type.COMPOUND_SPLIT, + left: left, + right: right, + subject: subject + }); + + // populate the subject and replace the q at the old spot (within left) with TRUE + subject.checks = query.checks; // take the checks from the left + query.checks = [{ + type: Type.TRUE + }]; // checks under left refs the subject implicitly + + // set up the right q + _ancestor.checks.push({ + type: Type.TRUE + }); // ancestor implicitly refs the subject + right.checks.push({ + type: Type.ANCESTOR, + // type is swapped on right side queries + ancestor: _ancestor, + descendant: _descendant // empty for now + }); + + replaceLastQuery(selector, left, compound); + + // update the ref since we moved things around for `query` + selector.currentSubject = subject; + selector.compoundCount++; + return _descendant; // now populating the right side's descendant + } else { + // ancestor query + // info for parent query + var _ancestor2 = newQuery(); + var _descendant2 = newQuery(); + var adQChecks = [{ + type: Type.ANCESTOR, + ancestor: _ancestor2, + descendant: _descendant2 + }]; + + // the parent-child query takes the place of the query previously being populated + _ancestor2.checks = query.checks; // the previous query contains the checks for the parent + query.checks = adQChecks; // pc query takes over + + selector.compoundCount++; + return _descendant2; // we're now populating the child + } + } +}, { + name: 'subject', + modifier: true, + regex: tokens.subject, + populate: function populate(selector, query) { + if (selector.currentSubject != null && selector.currentSubject !== query) { + warn('Redefinition of subject in selector `' + selector.toString() + '`'); + return false; + } + selector.currentSubject = query; + var topQ = selector[selector.length - 1]; + var topChk = topQ.checks[0]; + var topType = topChk == null ? null : topChk.type; + if (topType === Type.DIRECTED_EDGE) { + // directed edge with subject on the target + + // change to target node check + topChk.type = Type.NODE_TARGET; + } else if (topType === Type.UNDIRECTED_EDGE) { + // undirected edge with subject on the second node + + // change to neighbor check + topChk.type = Type.NODE_NEIGHBOR; + topChk.node = topChk.nodes[1]; // second node is subject + topChk.neighbor = topChk.nodes[0]; + + // clean up unused fields for new type + topChk.nodes = null; + } + } +}]; +exprs.forEach(function (e) { + return e.regexObj = new RegExp('^' + e.regex); +}); + +/** + * Of all the expressions, find the first match in the remaining text. + * @param {string} remaining The remaining text to parse + * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }` + */ +var consumeExpr = function consumeExpr(remaining) { + var expr; + var match; + var name; + for (var j = 0; j < exprs.length; j++) { + var e = exprs[j]; + var n = e.name; + var m = remaining.match(e.regexObj); + if (m != null) { + match = m; + expr = e; + name = n; + var consumed = m[0]; + remaining = remaining.substring(consumed.length); + break; // we've consumed one expr, so we can return now + } + } + + return { + expr: expr, + match: match, + name: name, + remaining: remaining + }; +}; + +/** + * Consume all the leading whitespace + * @param {string} remaining The text to consume + * @returns The text with the leading whitespace removed + */ +var consumeWhitespace = function consumeWhitespace(remaining) { + var match = remaining.match(/^\s+/); + if (match) { + var consumed = match[0]; + remaining = remaining.substring(consumed.length); + } + return remaining; +}; + +/** + * Parse the string and store the parsed representation in the Selector. + * @param {string} selector The selector string + * @returns `true` if the selector was successfully parsed, `false` otherwise + */ +var parse = function parse(selector) { + var self = this; + var remaining = self.inputText = selector; + var currentQuery = self[0] = newQuery(); + self.length = 1; + remaining = consumeWhitespace(remaining); // get rid of leading whitespace + + for (;;) { + var exprInfo = consumeExpr(remaining); + if (exprInfo.expr == null) { + warn('The selector `' + selector + '`is invalid'); + return false; + } else { + var args = exprInfo.match.slice(1); + + // let the token populate the selector object in currentQuery + var ret = exprInfo.expr.populate(self, currentQuery, args); + if (ret === false) { + return false; // exit if population failed + } else if (ret != null) { + currentQuery = ret; // change the current query to be filled if the expr specifies + } + } + + remaining = exprInfo.remaining; + + // we're done when there's nothing left to parse + if (remaining.match(/^\s*$/)) { + break; + } + } + var lastQ = self[self.length - 1]; + if (self.currentSubject != null) { + lastQ.subject = self.currentSubject; + } + lastQ.edgeCount = self.edgeCount; + lastQ.compoundCount = self.compoundCount; + for (var i = 0; i < self.length; i++) { + var q = self[i]; + + // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations + if (q.compoundCount > 0 && q.edgeCount > 0) { + warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector'); + return false; + } + if (q.edgeCount > 1) { + warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors'); + return false; + } else if (q.edgeCount === 1) { + warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.'); + } + } + return true; // success +}; + +/** + * Get the selector represented as a string. This value uses default formatting, + * so things like spacing may differ from the input text passed to the constructor. + * @returns {string} The selector string + */ +var toString = function toString() { + if (this.toStringCache != null) { + return this.toStringCache; + } + var clean = function clean(obj) { + if (obj == null) { + return ''; + } else { + return obj; + } + }; + var cleanVal = function cleanVal(val) { + if (string(val)) { + return '"' + val + '"'; + } else { + return clean(val); + } + }; + var space = function space(val) { + return ' ' + val + ' '; + }; + var checkToString = function checkToString(check, subject) { + var type = check.type, + value = check.value; + switch (type) { + case Type.GROUP: + { + var group = clean(value); + return group.substring(0, group.length - 1); + } + case Type.DATA_COMPARE: + { + var field = check.field, + operator = check.operator; + return '[' + field + space(clean(operator)) + cleanVal(value) + ']'; + } + case Type.DATA_BOOL: + { + var _operator = check.operator, + _field = check.field; + return '[' + clean(_operator) + _field + ']'; + } + case Type.DATA_EXIST: + { + var _field2 = check.field; + return '[' + _field2 + ']'; + } + case Type.META_COMPARE: + { + var _operator2 = check.operator, + _field3 = check.field; + return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]'; + } + case Type.STATE: + { + return value; + } + case Type.ID: + { + return '#' + value; + } + case Type.CLASS: + { + return '.' + value; + } + case Type.PARENT: + case Type.CHILD: + { + return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject); + } + case Type.ANCESTOR: + case Type.DESCENDANT: + { + return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject); + } + case Type.COMPOUND_SPLIT: + { + var lhs = queryToString(check.left, subject); + var sub = queryToString(check.subject, subject); + var rhs = queryToString(check.right, subject); + return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs; + } + case Type.TRUE: + { + return ''; + } + } + }; + var queryToString = function queryToString(query, subject) { + return query.checks.reduce(function (str, chk, i) { + return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject); + }, ''); + }; + var str = ''; + for (var i = 0; i < this.length; i++) { + var query = this[i]; + str += queryToString(query, query.subject); + if (this.length > 1 && i < this.length - 1) { + str += ', '; + } + } + this.toStringCache = str; + return str; +}; +var parse$1 = { + parse: parse, + toString: toString +}; + +var valCmp = function valCmp(fieldVal, operator, value) { + var matches; + var isFieldStr = string(fieldVal); + var isFieldNum = number$1(fieldVal); + var isValStr = string(value); + var fieldStr, valStr; + var caseInsensitive = false; + var notExpr = false; + var isIneqCmp = false; + if (operator.indexOf('!') >= 0) { + operator = operator.replace('!', ''); + notExpr = true; + } + if (operator.indexOf('@') >= 0) { + operator = operator.replace('@', ''); + caseInsensitive = true; + } + if (isFieldStr || isValStr || caseInsensitive) { + fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; + valStr = '' + value; + } + + // if we're doing a case insensitive comparison, then we're using a STRING comparison + // even if we're comparing numbers + if (caseInsensitive) { + fieldVal = fieldStr = fieldStr.toLowerCase(); + value = valStr = valStr.toLowerCase(); + } + switch (operator) { + case '*=': + matches = fieldStr.indexOf(valStr) >= 0; + break; + case '$=': + matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0; + break; + case '^=': + matches = fieldStr.indexOf(valStr) === 0; + break; + case '=': + matches = fieldVal === value; + break; + case '>': + isIneqCmp = true; + matches = fieldVal > value; + break; + case '>=': + isIneqCmp = true; + matches = fieldVal >= value; + break; + case '<': + isIneqCmp = true; + matches = fieldVal < value; + break; + case '<=': + isIneqCmp = true; + matches = fieldVal <= value; + break; + default: + matches = false; + break; + } + + // apply the not op, but null vals for inequalities should always stay non-matching + if (notExpr && (fieldVal != null || !isIneqCmp)) { + matches = !matches; + } + return matches; +}; +var boolCmp = function boolCmp(fieldVal, operator) { + switch (operator) { + case '?': + return fieldVal ? true : false; + case '!': + return fieldVal ? false : true; + case '^': + return fieldVal === undefined; + } +}; +var existCmp = function existCmp(fieldVal) { + return fieldVal !== undefined; +}; +var data$1 = function data(ele, field) { + return ele.data(field); +}; +var meta = function meta(ele, field) { + return ele[field](); +}; + +/** A lookup of `match(check, ele)` functions by `Type` int */ +var match = []; + +/** + * Returns whether the query matches for the element + * @param query The `{ type, value, ... }` query object + * @param ele The element to compare against +*/ +var matches$1 = function matches(query, ele) { + return query.checks.every(function (chk) { + return match[chk.type](chk, ele); + }); +}; +match[Type.GROUP] = function (check, ele) { + var group = check.value; + return group === '*' || group === ele.group(); +}; +match[Type.STATE] = function (check, ele) { + var stateSelector = check.value; + return stateSelectorMatches(stateSelector, ele); +}; +match[Type.ID] = function (check, ele) { + var id = check.value; + return ele.id() === id; +}; +match[Type.CLASS] = function (check, ele) { + var cls = check.value; + return ele.hasClass(cls); +}; +match[Type.META_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(meta(ele, field), operator, value); +}; +match[Type.DATA_COMPARE] = function (check, ele) { + var field = check.field, + operator = check.operator, + value = check.value; + return valCmp(data$1(ele, field), operator, value); +}; +match[Type.DATA_BOOL] = function (check, ele) { + var field = check.field, + operator = check.operator; + return boolCmp(data$1(ele, field), operator); +}; +match[Type.DATA_EXIST] = function (check, ele) { + var field = check.field; + check.operator; + return existCmp(data$1(ele, field)); +}; +match[Type.UNDIRECTED_EDGE] = function (check, ele) { + var qA = check.nodes[0]; + var qB = check.nodes[1]; + var src = ele.source(); + var tgt = ele.target(); + return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt); +}; +match[Type.NODE_NEIGHBOR] = function (check, ele) { + return matches$1(check.node, ele) && ele.neighborhood().some(function (n) { + return n.isNode() && matches$1(check.neighbor, n); + }); +}; +match[Type.DIRECTED_EDGE] = function (check, ele) { + return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); +}; +match[Type.NODE_SOURCE] = function (check, ele) { + return matches$1(check.source, ele) && ele.outgoers().some(function (n) { + return n.isNode() && matches$1(check.target, n); + }); +}; +match[Type.NODE_TARGET] = function (check, ele) { + return matches$1(check.target, ele) && ele.incomers().some(function (n) { + return n.isNode() && matches$1(check.source, n); + }); +}; +match[Type.CHILD] = function (check, ele) { + return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); +}; +match[Type.PARENT] = function (check, ele) { + return matches$1(check.parent, ele) && ele.children().some(function (c) { + return matches$1(check.child, c); + }); +}; +match[Type.DESCENDANT] = function (check, ele) { + return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) { + return matches$1(check.ancestor, a); + }); +}; +match[Type.ANCESTOR] = function (check, ele) { + return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) { + return matches$1(check.descendant, d); + }); +}; +match[Type.COMPOUND_SPLIT] = function (check, ele) { + return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); +}; +match[Type.TRUE] = function () { + return true; +}; +match[Type.COLLECTION] = function (check, ele) { + var collection = check.value; + return collection.has(ele); +}; +match[Type.FILTER] = function (check, ele) { + var filter = check.value; + return filter(ele); +}; + +// filter an existing collection +var filter = function filter(collection) { + var self = this; + + // for 1 id #foo queries, just get the element + if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) { + return collection.getElementById(self[0].checks[0].value).collection(); + } + var selectorFunction = function selectorFunction(element) { + for (var j = 0; j < self.length; j++) { + var query = self[j]; + if (matches$1(query, element)) { + return true; + } + } + return false; + }; + if (self.text() == null) { + selectorFunction = function selectorFunction() { + return true; + }; + } + return collection.filter(selectorFunction); +}; // filter + +// does selector match a single element? +var matches = function matches(ele) { + var self = this; + for (var j = 0; j < self.length; j++) { + var query = self[j]; + if (matches$1(query, ele)) { + return true; + } + } + return false; +}; // matches + +var matching = { + matches: matches, + filter: filter +}; + +var Selector = function Selector(selector) { + this.inputText = selector; + this.currentSubject = null; + this.compoundCount = 0; + this.edgeCount = 0; + this.length = 0; + if (selector == null || string(selector) && selector.match(/^\s*$/)) ; else if (elementOrCollection(selector)) { + this.addQuery({ + checks: [{ + type: Type.COLLECTION, + value: selector.collection() + }] + }); + } else if (fn$6(selector)) { + this.addQuery({ + checks: [{ + type: Type.FILTER, + value: selector + }] + }); + } else if (string(selector)) { + if (!this.parse(selector)) { + this.invalid = true; + } + } else { + error('A selector must be created from a string; found '); + } +}; +var selfn = Selector.prototype; +[parse$1, matching].forEach(function (p) { + return extend(selfn, p); +}); +selfn.text = function () { + return this.inputText; +}; +selfn.size = function () { + return this.length; +}; +selfn.eq = function (i) { + return this[i]; +}; +selfn.sameText = function (otherSel) { + return !this.invalid && !otherSel.invalid && this.text() === otherSel.text(); +}; +selfn.addQuery = function (q) { + this[this.length++] = q; +}; +selfn.selector = selfn.toString; + +var elesfn$g = { + allAre: function allAre(selector) { + var selObj = new Selector(selector); + return this.every(function (ele) { + return selObj.matches(ele); + }); + }, + is: function is(selector) { + var selObj = new Selector(selector); + return this.some(function (ele) { + return selObj.matches(ele); + }); + }, + some: function some(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + if (ret) { + return true; + } + } + return false; + }, + every: function every(fn, thisArg) { + for (var i = 0; i < this.length; i++) { + var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]); + if (!ret) { + return false; + } + } + return true; + }, + same: function same(collection) { + // cheap collection ref check + if (this === collection) { + return true; + } + collection = this.cy().collection(collection); + var thisLength = this.length; + var collectionLength = collection.length; + + // cheap length check + if (thisLength !== collectionLength) { + return false; + } + + // cheap element ref check + if (thisLength === 1) { + return this[0] === collection[0]; + } + return this.every(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + anySame: function anySame(collection) { + collection = this.cy().collection(collection); + return this.some(function (ele) { + return collection.hasElementWithId(ele.id()); + }); + }, + allAreNeighbors: function allAreNeighbors(collection) { + collection = this.cy().collection(collection); + var nhood = this.neighborhood(); + return collection.every(function (ele) { + return nhood.hasElementWithId(ele.id()); + }); + }, + contains: function contains(collection) { + collection = this.cy().collection(collection); + var self = this; + return collection.every(function (ele) { + return self.hasElementWithId(ele.id()); + }); + } +}; +elesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors; +elesfn$g.has = elesfn$g.contains; +elesfn$g.equal = elesfn$g.equals = elesfn$g.same; + +var cache = function cache(fn, name) { + return function traversalCache(arg1, arg2, arg3, arg4) { + var selectorOrEles = arg1; + var eles = this; + var key; + if (selectorOrEles == null) { + key = ''; + } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) { + key = selectorOrEles.id(); + } + if (eles.length === 1 && key) { + var _p = eles[0]._private; + var tch = _p.traversalCache = _p.traversalCache || {}; + var ch = tch[name] = tch[name] || []; + var hash = hashString(key); + var cacheHit = ch[hash]; + if (cacheHit) { + return cacheHit; + } else { + return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4); + } + } else { + return fn.call(eles, arg1, arg2, arg3, arg4); + } + }; +}; + +var elesfn$f = { + parent: function parent(selector) { + var parents = []; + + // optimisation for single ele call + if (this.length === 1) { + var parent = this[0]._private.parent; + if (parent) { + return parent; + } + } + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _parent = ele._private.parent; + if (_parent) { + parents.push(_parent); + } + } + return this.spawn(parents, true).filter(selector); + }, + parents: function parents(selector) { + var parents = []; + var eles = this.parent(); + while (eles.nonempty()) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + parents.push(ele); + } + eles = eles.parent(); + } + return this.spawn(parents, true).filter(selector); + }, + commonAncestors: function commonAncestors(selector) { + var ancestors; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var parents = ele.parents(); + ancestors = ancestors || parents; + ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set + } + + return ancestors.filter(selector); + }, + orphans: function orphans(selector) { + return this.stdFilter(function (ele) { + return ele.isOrphan(); + }).filter(selector); + }, + nonorphans: function nonorphans(selector) { + return this.stdFilter(function (ele) { + return ele.isChild(); + }).filter(selector); + }, + children: cache(function (selector) { + var children = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var eleChildren = ele._private.children; + for (var j = 0; j < eleChildren.length; j++) { + children.push(eleChildren[j]); + } + } + return this.spawn(children, true).filter(selector); + }, 'children'), + siblings: function siblings(selector) { + return this.parent().children().not(this).filter(selector); + }, + isParent: function isParent() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.children.length !== 0; + } + }, + isChildless: function isChildless() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.children.length === 0; + } + }, + isChild: function isChild() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.parent != null; + } + }, + isOrphan: function isOrphan() { + var ele = this[0]; + if (ele) { + return ele.isNode() && ele._private.parent == null; + } + }, + descendants: function descendants(selector) { + var elements = []; + function add(eles) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + elements.push(ele); + if (ele.children().nonempty()) { + add(ele.children()); + } + } + } + add(this.children()); + return this.spawn(elements, true).filter(selector); + } +}; +function forEachCompound(eles, fn, includeSelf, recursiveStep) { + var q = []; + var did = new Set$1(); + var cy = eles.cy(); + var hasCompounds = cy.hasCompoundNodes(); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (includeSelf) { + q.push(ele); + } else if (hasCompounds) { + recursiveStep(q, did, ele); + } + } + while (q.length > 0) { + var _ele = q.shift(); + fn(_ele); + did.add(_ele.id()); + if (hasCompounds) { + recursiveStep(q, did, _ele); + } + } + return eles; +} +function addChildren(q, did, ele) { + if (ele.isParent()) { + var children = ele._private.children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (!did.has(child.id())) { + q.push(child); + } + } + } +} + +// very efficient version of eles.add( eles.descendants() ).forEach() +// for internal use +elesfn$f.forEachDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addChildren); +}; +function addParent(q, did, ele) { + if (ele.isChild()) { + var parent = ele._private.parent; + if (!did.has(parent.id())) { + q.push(parent); + } + } +} +elesfn$f.forEachUp = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParent); +}; +function addParentAndChildren(q, did, ele) { + addParent(q, did, ele); + addChildren(q, did, ele); +} +elesfn$f.forEachUpAndDown = function (fn) { + var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return forEachCompound(this, fn, includeSelf, addParentAndChildren); +}; + +// aliases +elesfn$f.ancestors = elesfn$f.parents; + +var fn$5, elesfn$e; +fn$5 = elesfn$e = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + immutableKeys: { + 'id': true, + 'source': true, + 'target': true, + 'parent': true + }, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + rscratch: define.data({ + field: 'rscratch', + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: true + }), + removeRscratch: define.removeData({ + field: 'rscratch', + triggerEvent: false + }), + id: function id() { + var ele = this[0]; + if (ele) { + return ele._private.data.id; + } + } +}; + +// aliases +fn$5.attr = fn$5.data; +fn$5.removeAttr = fn$5.removeData; +var data = elesfn$e; + +var elesfn$d = {}; +function defineDegreeFunction(callback) { + return function (includeLoops) { + var self = this; + if (includeLoops === undefined) { + includeLoops = true; + } + if (self.length === 0) { + return; + } + if (self.isNode() && !self.removed()) { + var degree = 0; + var node = self[0]; + var connectedEdges = node._private.edges; + for (var i = 0; i < connectedEdges.length; i++) { + var edge = connectedEdges[i]; + if (!includeLoops && edge.isLoop()) { + continue; + } + degree += callback(node, edge); + } + return degree; + } else { + return; + } + }; +} +extend(elesfn$d, { + degree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(edge.target())) { + return 2; + } else { + return 1; + } + }), + indegree: defineDegreeFunction(function (node, edge) { + if (edge.target().same(node)) { + return 1; + } else { + return 0; + } + }), + outdegree: defineDegreeFunction(function (node, edge) { + if (edge.source().same(node)) { + return 1; + } else { + return 0; + } + }) +}); +function defineDegreeBoundsFunction(degreeFn, callback) { + return function (includeLoops) { + var ret; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + var ele = nodes[i]; + var degree = ele[degreeFn](includeLoops); + if (degree !== undefined && (ret === undefined || callback(degree, ret))) { + ret = degree; + } + } + return ret; + }; +} +extend(elesfn$d, { + minDegree: defineDegreeBoundsFunction('degree', function (degree, min) { + return degree < min; + }), + maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) { + return degree > max; + }), + minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) { + return degree < min; + }), + maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) { + return degree > max; + }), + minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) { + return degree < min; + }), + maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) { + return degree > max; + }) +}); +extend(elesfn$d, { + totalDegree: function totalDegree(includeLoops) { + var total = 0; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + total += nodes[i].degree(includeLoops); + } + return total; + } +}); + +var fn$4, elesfn$c; +var beforePositionSet = function beforePositionSet(eles, newPos, silent) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.locked()) { + var oldPos = ele._private.position; + var delta = { + x: newPos.x != null ? newPos.x - oldPos.x : 0, + y: newPos.y != null ? newPos.y - oldPos.y : 0 + }; + if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) { + ele.children().shift(delta, silent); + } + ele.dirtyBoundingBoxCache(); + } + } +}; +var positionDef = { + field: 'position', + bindingEvent: 'position', + allowBinding: true, + allowSetting: true, + settingEvent: 'position', + settingTriggersEvent: true, + triggerFnName: 'emitAndNotify', + allowGetting: true, + validKeys: ['x', 'y'], + beforeGet: function beforeGet(ele) { + ele.updateCompoundBounds(); + }, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, false); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + }, + canSet: function canSet(ele) { + return !ele.locked(); + } +}; +fn$4 = elesfn$c = { + position: define.data(positionDef), + // position but no notification to renderer + silentPosition: define.data(extend({}, positionDef, { + allowBinding: false, + allowSetting: true, + settingTriggersEvent: false, + allowGetting: false, + beforeSet: function beforeSet(eles, newPos) { + beforePositionSet(eles, newPos, true); + }, + onSet: function onSet(eles) { + eles.dirtyCompoundBoundsCache(); + } + })), + positions: function positions(pos, silent) { + if (plainObject(pos)) { + if (silent) { + this.silentPosition(pos); + } else { + this.position(pos); + } + } else if (fn$6(pos)) { + var _fn = pos; + var cy = this.cy(); + cy.startBatch(); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _pos = void 0; + if (_pos = _fn(ele, i)) { + if (silent) { + ele.silentPosition(_pos); + } else { + ele.position(_pos); + } + } + } + cy.endBatch(); + } + return this; // chaining + }, + + silentPositions: function silentPositions(pos) { + return this.positions(pos, true); + }, + shift: function shift(dim, val, silent) { + var delta; + if (plainObject(dim)) { + delta = { + x: number$1(dim.x) ? dim.x : 0, + y: number$1(dim.y) ? dim.y : 0 + }; + silent = val; + } else if (string(dim) && number$1(val)) { + delta = { + x: 0, + y: 0 + }; + delta[dim] = val; + } + if (delta != null) { + var cy = this.cy(); + cy.startBatch(); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + + // exclude any node that is a descendant of the calling collection + if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) { + continue; + } + var pos = ele.position(); + var newPos = { + x: pos.x + delta.x, + y: pos.y + delta.y + }; + if (silent) { + ele.silentPosition(newPos); + } else { + ele.position(newPos); + } + } + cy.endBatch(); + } + return this; + }, + silentShift: function silentShift(dim, val) { + if (plainObject(dim)) { + this.shift(dim, true); + } else if (string(dim) && number$1(val)) { + this.shift(dim, val, true); + } + return this; + }, + // get/set the rendered (i.e. on screen) positon of the element + renderedPosition: function renderedPosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var rpos = plainObject(dim) ? dim : undefined; + var setting = rpos !== undefined || val !== undefined && string(dim); + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele = this[i]; + if (val !== undefined) { + // set one dimension + _ele.position(dim, (val - pan[dim]) / zoom); + } else if (rpos !== undefined) { + // set whole position + _ele.position(renderedToModelPosition(rpos, zoom, pan)); + } + } + } else { + // getting + var pos = ele.position(); + rpos = modelToRenderedPosition(pos, zoom, pan); + if (dim === undefined) { + // then return the whole rendered position + return rpos; + } else { + // then return the specified dimension + return rpos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + }, + + // get/set the position relative to the parent + relativePosition: function relativePosition(dim, val) { + var ele = this[0]; + var cy = this.cy(); + var ppos = plainObject(dim) ? dim : undefined; + var setting = ppos !== undefined || val !== undefined && string(dim); + var hasCompoundNodes = cy.hasCompoundNodes(); + if (ele && ele.isNode()) { + // must have an element and must be a node to return position + if (setting) { + for (var i = 0; i < this.length; i++) { + var _ele2 = this[i]; + var parent = hasCompoundNodes ? _ele2.parent() : null; + var hasParent = parent && parent.length > 0; + var relativeToParent = hasParent; + if (hasParent) { + parent = parent[0]; + } + var origin = relativeToParent ? parent.position() : { + x: 0, + y: 0 + }; + if (val !== undefined) { + // set one dimension + _ele2.position(dim, val + origin[dim]); + } else if (ppos !== undefined) { + // set whole position + _ele2.position({ + x: ppos.x + origin.x, + y: ppos.y + origin.y + }); + } + } + } else { + // getting + var pos = ele.position(); + var _parent = hasCompoundNodes ? ele.parent() : null; + var _hasParent = _parent && _parent.length > 0; + var _relativeToParent = _hasParent; + if (_hasParent) { + _parent = _parent[0]; + } + var _origin = _relativeToParent ? _parent.position() : { + x: 0, + y: 0 + }; + ppos = { + x: pos.x - _origin.x, + y: pos.y - _origin.y + }; + if (dim === undefined) { + // then return the whole rendered position + return ppos; + } else { + // then return the specified dimension + return ppos[dim]; + } + } + } else if (!setting) { + return undefined; // for empty collection case + } + + return this; // chaining + } +}; + +// aliases +fn$4.modelPosition = fn$4.point = fn$4.position; +fn$4.modelPositions = fn$4.points = fn$4.positions; +fn$4.renderedPoint = fn$4.renderedPosition; +fn$4.relativePoint = fn$4.relativePosition; +var position = elesfn$c; + +var fn$3, elesfn$b; +fn$3 = elesfn$b = {}; +elesfn$b.renderedBoundingBox = function (options) { + var bb = this.boundingBox(options); + var cy = this.cy(); + var zoom = cy.zoom(); + var pan = cy.pan(); + var x1 = bb.x1 * zoom + pan.x; + var x2 = bb.x2 * zoom + pan.x; + var y1 = bb.y1 * zoom + pan.y; + var y2 = bb.y2 * zoom + pan.y; + return { + x1: x1, + x2: x2, + y1: y1, + y2: y2, + w: x2 - x1, + h: y2 - y1 + }; +}; +elesfn$b.dirtyCompoundBoundsCache = function () { + var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + this.forEachUp(function (ele) { + if (ele.isParent()) { + var _p = ele._private; + _p.compoundBoundsClean = false; + _p.bbCache = null; + if (!silent) { + ele.emitAndNotify('bounds'); + } + } + }); + return this; +}; +elesfn$b.updateCompoundBounds = function () { + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var cy = this.cy(); + + // not possible to do on non-compound graphs or with the style disabled + if (!cy.styleEnabled() || !cy.hasCompoundNodes()) { + return this; + } + + // save cycles when batching -- but bounds will be stale (or not exist yet) + if (!force && cy.batching()) { + return this; + } + function update(parent) { + if (!parent.isParent()) { + return; + } + var _p = parent._private; + var children = parent.children(); + var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include'; + var min = { + width: { + val: parent.pstyle('min-width').pfValue, + left: parent.pstyle('min-width-bias-left'), + right: parent.pstyle('min-width-bias-right') + }, + height: { + val: parent.pstyle('min-height').pfValue, + top: parent.pstyle('min-height-bias-top'), + bottom: parent.pstyle('min-height-bias-bottom') + } + }; + var bb = children.boundingBox({ + includeLabels: includeLabels, + includeOverlays: false, + // updating the compound bounds happens outside of the regular + // cache cycle (i.e. before fired events) + useCache: false + }); + var pos = _p.position; + + // if children take up zero area then keep position and fall back on stylesheet w/h + if (bb.w === 0 || bb.h === 0) { + bb = { + w: parent.pstyle('width').pfValue, + h: parent.pstyle('height').pfValue + }; + bb.x1 = pos.x - bb.w / 2; + bb.x2 = pos.x + bb.w / 2; + bb.y1 = pos.y - bb.h / 2; + bb.y2 = pos.y + bb.h / 2; + } + function computeBiasValues(propDiff, propBias, propBiasComplement) { + var biasDiff = 0; + var biasComplementDiff = 0; + var biasTotal = propBias + propBiasComplement; + if (propDiff > 0 && biasTotal > 0) { + biasDiff = propBias / biasTotal * propDiff; + biasComplementDiff = propBiasComplement / biasTotal * propDiff; + } + return { + biasDiff: biasDiff, + biasComplementDiff: biasComplementDiff + }; + } + function computePaddingValues(width, height, paddingObject, relativeTo) { + // Assuming percentage is number from 0 to 1 + if (paddingObject.units === '%') { + switch (relativeTo) { + case 'width': + return width > 0 ? paddingObject.pfValue * width : 0; + case 'height': + return height > 0 ? paddingObject.pfValue * height : 0; + case 'average': + return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0; + case 'min': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0; + case 'max': + return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0; + default: + return 0; + } + } else if (paddingObject.units === 'px') { + return paddingObject.pfValue; + } else { + return 0; + } + } + var leftVal = min.width.left.value; + if (min.width.left.units === 'px' && min.width.val > 0) { + leftVal = leftVal * 100 / min.width.val; + } + var rightVal = min.width.right.value; + if (min.width.right.units === 'px' && min.width.val > 0) { + rightVal = rightVal * 100 / min.width.val; + } + var topVal = min.height.top.value; + if (min.height.top.units === 'px' && min.height.val > 0) { + topVal = topVal * 100 / min.height.val; + } + var bottomVal = min.height.bottom.value; + if (min.height.bottom.units === 'px' && min.height.val > 0) { + bottomVal = bottomVal * 100 / min.height.val; + } + var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal); + var diffLeft = widthBiasDiffs.biasDiff; + var diffRight = widthBiasDiffs.biasComplementDiff; + var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal); + var diffTop = heightBiasDiffs.biasDiff; + var diffBottom = heightBiasDiffs.biasComplementDiff; + _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value); + _p.autoWidth = Math.max(bb.w, min.width.val); + pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; + _p.autoHeight = Math.max(bb.h, min.height.val); + pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2; + } + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + if (!_p.compoundBoundsClean || force) { + update(ele); + if (!cy.batching()) { + _p.compoundBoundsClean = true; + } + } + } + return this; +}; +var noninf = function noninf(x) { + if (x === Infinity || x === -Infinity) { + return 0; + } + return x; +}; +var updateBounds = function updateBounds(b, x1, y1, x2, y2) { + // don't update with zero area boxes + if (x2 - x1 === 0 || y2 - y1 === 0) { + return; + } + + // don't update with null dim + if (x1 == null || y1 == null || x2 == null || y2 == null) { + return; + } + b.x1 = x1 < b.x1 ? x1 : b.x1; + b.x2 = x2 > b.x2 ? x2 : b.x2; + b.y1 = y1 < b.y1 ? y1 : b.y1; + b.y2 = y2 > b.y2 ? y2 : b.y2; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; +}; +var updateBoundsFromBox = function updateBoundsFromBox(b, b2) { + if (b2 == null) { + return b; + } + return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2); +}; +var prefixedProperty = function prefixedProperty(obj, field, prefix) { + return getPrefixedProperty(obj, field, prefix); +}; +var updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + var _p = ele._private; + var rstyle = _p.rstyle; + var halfArW = rstyle.arrowWidth / 2; + var arrowType = ele.pstyle(prefix + '-arrow-shape').value; + var x; + var y; + if (arrowType !== 'none') { + if (prefix === 'source') { + x = rstyle.srcX; + y = rstyle.srcY; + } else if (prefix === 'target') { + x = rstyle.tgtX; + y = rstyle.tgtY; + } else { + x = rstyle.midX; + y = rstyle.midY; + } + + // always store the individual arrow bounds + var bbs = _p.arrowBounds = _p.arrowBounds || {}; + var bb = bbs[prefix] = bbs[prefix] || {}; + bb.x1 = x - halfArW; + bb.y1 = y - halfArW; + bb.x2 = x + halfArW; + bb.y2 = y + halfArW; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + expandBoundingBox(bb, 1); + updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2); + } +}; +var updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) { + if (ele.cy().headless()) { + return; + } + var prefixDash; + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + var _p = ele._private; + var rstyle = _p.rstyle; + var label = ele.pstyle(prefixDash + 'label').strValue; + if (label) { + var halign = ele.pstyle('text-halign'); + var valign = ele.pstyle('text-valign'); + var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix); + var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix); + var labelX = prefixedProperty(rstyle, 'labelX', prefix); + var labelY = prefixedProperty(rstyle, 'labelY', prefix); + var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var rotation = ele.pstyle(prefixDash + 'text-rotation'); + var outlineWidth = ele.pstyle('text-outline-width').pfValue; + var borderWidth = ele.pstyle('text-border-width').pfValue; + var halfBorderWidth = borderWidth / 2; + var padding = ele.pstyle('text-background-padding').pfValue; + var marginOfError = 2; // expand to work around browser dimension inaccuracies + + var lh = labelHeight; + var lw = labelWidth; + var lw_2 = lw / 2; + var lh_2 = lh / 2; + var lx1, lx2, ly1, ly2; + if (isEdge) { + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + } else { + switch (halign.value) { + case 'left': + lx1 = labelX - lw; + lx2 = labelX; + break; + case 'center': + lx1 = labelX - lw_2; + lx2 = labelX + lw_2; + break; + case 'right': + lx1 = labelX; + lx2 = labelX + lw; + break; + } + switch (valign.value) { + case 'top': + ly1 = labelY - lh; + ly2 = labelY; + break; + case 'center': + ly1 = labelY - lh_2; + ly2 = labelY + lh_2; + break; + case 'bottom': + ly1 = labelY; + ly2 = labelY + lh; + break; + } + } + + // shift by margin and expand by outline and border + lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError; + ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError; + + // always store the unrotated label bounds separately + var bbPrefix = prefix || 'main'; + var bbs = _p.labelBounds; + var bb = bbs[bbPrefix] = bbs[bbPrefix] || {}; + bb.x1 = lx1; + bb.y1 = ly1; + bb.x2 = lx2; + bb.y2 = ly2; + bb.w = lx2 - lx1; + bb.h = ly2 - ly1; + var isAutorotate = isEdge && rotation.strValue === 'autorotate'; + var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0; + if (isAutorotate || isPfValue) { + var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue; + var cos = Math.cos(theta); + var sin = Math.sin(theta); + + // rotation point (default value for center-center) + var xo = (lx1 + lx2) / 2; + var yo = (ly1 + ly2) / 2; + if (!isEdge) { + switch (halign.value) { + case 'left': + xo = lx2; + break; + case 'right': + xo = lx1; + break; + } + switch (valign.value) { + case 'top': + yo = ly2; + break; + case 'bottom': + yo = ly1; + break; + } + } + var rotate = function rotate(x, y) { + x = x - xo; + y = y - yo; + return { + x: x * cos - y * sin + xo, + y: x * sin + y * cos + yo + }; + }; + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x); + ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y); + } + var bbPrefixRot = bbPrefix + 'Rot'; + var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {}; + bbRot.x1 = lx1; + bbRot.y1 = ly1; + bbRot.x2 = lx2; + bbRot.y2 = ly2; + bbRot.w = lx2 - lx1; + bbRot.h = ly2 - ly1; + updateBounds(bounds, lx1, ly1, lx2, ly2); + updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2); + } + return bounds; +}; +var updateBoundsFromOutline = function updateBoundsFromOutline(bounds, ele) { + if (ele.cy().headless()) { + return; + } + var outlineOpacity = ele.pstyle('outline-opacity').value; + var outlineWidth = ele.pstyle('outline-width').value; + if (outlineOpacity > 0 && outlineWidth > 0) { + var outlineOffset = ele.pstyle('outline-offset').value; + var nodeShape = ele.pstyle('shape').value; + var outlineSize = outlineWidth + outlineOffset; + var scaleX = (bounds.w + outlineSize * 2) / bounds.w; + var scaleY = (bounds.h + outlineSize * 2) / bounds.h; + var xOffset = 0; + var yOffset = 0; + if (["diamond", "pentagon", "round-triangle"].includes(nodeShape)) { + scaleX = (bounds.w + outlineSize * 2.4) / bounds.w; + yOffset = -outlineSize / 3.6; + } else if (["concave-hexagon", "rhomboid", "right-rhomboid"].includes(nodeShape)) { + scaleX = (bounds.w + outlineSize * 2.4) / bounds.w; + } else if (nodeShape === "star") { + scaleX = (bounds.w + outlineSize * 2.8) / bounds.w; + scaleY = (bounds.h + outlineSize * 2.6) / bounds.h; + yOffset = -outlineSize / 3.8; + } else if (nodeShape === "triangle") { + scaleX = (bounds.w + outlineSize * 2.8) / bounds.w; + scaleY = (bounds.h + outlineSize * 2.4) / bounds.h; + yOffset = -outlineSize / 1.4; + } else if (nodeShape === "vee") { + scaleX = (bounds.w + outlineSize * 4.4) / bounds.w; + scaleY = (bounds.h + outlineSize * 3.8) / bounds.h; + yOffset = -outlineSize * .5; + } + var hDelta = bounds.h * scaleY - bounds.h; + var wDelta = bounds.w * scaleX - bounds.w; + expandBoundingBoxSides(bounds, [Math.ceil(hDelta / 2), Math.ceil(wDelta / 2)]); + if (xOffset != 0 || yOffset !== 0) { + var oBounds = shiftBoundingBox(bounds, xOffset, yOffset); + updateBoundingBox(bounds, oBounds); + } + } +}; + +// get the bounding box of the elements (in raw model position) +var boundingBoxImpl = function boundingBoxImpl(ele, options) { + var cy = ele._private.cy; + var styleEnabled = cy.styleEnabled(); + var headless = cy.headless(); + var bounds = makeBoundingBox(); + var _p = ele._private; + var isNode = ele.isNode(); + var isEdge = ele.isEdge(); + var ex1, ex2, ey1, ey2; // extrema of body / lines + var x, y; // node pos + var rstyle = _p.rstyle; + var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0]; + + // must use `display` prop only, as reading `compound.width()` causes recursion + // (other factors like width values will be considered later in this function anyway) + var isDisplayed = function isDisplayed(ele) { + return ele.pstyle('display').value !== 'none'; + }; + var displayed = !styleEnabled || isDisplayed(ele) + + // must take into account connected nodes b/c of implicit edge hiding on display:none node + && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target())); + if (displayed) { + // displayed suffices, since we will find zero area eles anyway + var overlayOpacity = 0; + var overlayPadding = 0; + if (styleEnabled && options.includeOverlays) { + overlayOpacity = ele.pstyle('overlay-opacity').value; + if (overlayOpacity !== 0) { + overlayPadding = ele.pstyle('overlay-padding').value; + } + } + var underlayOpacity = 0; + var underlayPadding = 0; + if (styleEnabled && options.includeUnderlays) { + underlayOpacity = ele.pstyle('underlay-opacity').value; + if (underlayOpacity !== 0) { + underlayPadding = ele.pstyle('underlay-padding').value; + } + } + var padding = Math.max(overlayPadding, underlayPadding); + var w = 0; + var wHalf = 0; + if (styleEnabled) { + w = ele.pstyle('width').pfValue; + wHalf = w / 2; + } + if (isNode && options.includeNodes) { + var pos = ele.position(); + x = pos.x; + y = pos.y; + var _w = ele.outerWidth(); + var halfW = _w / 2; + var h = ele.outerHeight(); + var halfH = h / 2; + + // handle node dimensions + ///////////////////////// + + ex1 = x - halfW; + ex2 = x + halfW; + ey1 = y - halfH; + ey2 = y + halfH; + updateBounds(bounds, ex1, ey1, ex2, ey2); + if (styleEnabled && options.includeOutlines) { + updateBoundsFromOutline(bounds, ele); + } + } else if (isEdge && options.includeEdges) { + if (styleEnabled && !headless) { + var curveStyle = ele.pstyle('curve-style').strValue; + + // handle edge dimensions (rough box estimate) + ////////////////////////////////////////////// + + ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX); + ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY); + ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY); + + // take into account edge width + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + + // precise edges + //////////////// + + if (curveStyle === 'haystack') { + var hpts = rstyle.haystackPts; + if (hpts && hpts.length === 2) { + ex1 = hpts[0].x; + ey1 = hpts[0].y; + ex2 = hpts[1].x; + ey2 = hpts[1].y; + if (ex1 > ex2) { + var temp = ex1; + ex1 = ex2; + ex2 = temp; + } + if (ey1 > ey2) { + var _temp = ey1; + ey1 = ey2; + ey2 = _temp; + } + updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf); + } + } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'taxi') { + var pts; + switch (curveStyle) { + case 'bezier': + case 'unbundled-bezier': + pts = rstyle.bezierPts; + break; + case 'segments': + case 'taxi': + pts = rstyle.linePts; + break; + } + if (pts != null) { + for (var j = 0; j < pts.length; j++) { + var pt = pts[j]; + ex1 = pt.x - wHalf; + ex2 = pt.x + wHalf; + ey1 = pt.y - wHalf; + ey2 = pt.y + wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } + } + } // bezier-like or segment-like edge + } else { + // headless or style disabled + + // fallback on source and target positions + ////////////////////////////////////////// + + var n1 = ele.source(); + var n1pos = n1.position(); + var n2 = ele.target(); + var n2pos = n2.position(); + ex1 = n1pos.x; + ex2 = n2pos.x; + ey1 = n1pos.y; + ey2 = n2pos.y; + if (ex1 > ex2) { + var _temp2 = ex1; + ex1 = ex2; + ex2 = _temp2; + } + if (ey1 > ey2) { + var _temp3 = ey1; + ey1 = ey2; + ey2 = _temp3; + } + + // take into account edge width + ex1 -= wHalf; + ex2 += wHalf; + ey1 -= wHalf; + ey2 += wHalf; + updateBounds(bounds, ex1, ey1, ex2, ey2); + } // headless or style disabled + } // edges + + // handle edge arrow size + ///////////////////////// + + if (styleEnabled && options.includeEdges && isEdge) { + updateBoundsFromArrow(bounds, ele, 'mid-source'); + updateBoundsFromArrow(bounds, ele, 'mid-target'); + updateBoundsFromArrow(bounds, ele, 'source'); + updateBoundsFromArrow(bounds, ele, 'target'); + } + + // ghost + //////// + + if (styleEnabled) { + var ghost = ele.pstyle('ghost').value === 'yes'; + if (ghost) { + var gx = ele.pstyle('ghost-offset-x').pfValue; + var gy = ele.pstyle('ghost-offset-y').pfValue; + updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy); + } + } + + // always store the body bounds separately from the labels + var bbBody = _p.bodyBounds = _p.bodyBounds || {}; + assignBoundingBox(bbBody, bounds); + expandBoundingBoxSides(bbBody, manualExpansion); + expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies + + // overlay + ////////// + + if (styleEnabled) { + ex1 = bounds.x1; + ex2 = bounds.x2; + ey1 = bounds.y1; + ey2 = bounds.y2; + updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding); + } + + // always store the body bounds separately from the labels + var bbOverlay = _p.overlayBounds = _p.overlayBounds || {}; + assignBoundingBox(bbOverlay, bounds); + expandBoundingBoxSides(bbOverlay, manualExpansion); + expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies + + // handle label dimensions + ////////////////////////// + + var bbLabels = _p.labelBounds = _p.labelBounds || {}; + if (bbLabels.all != null) { + clearBoundingBox(bbLabels.all); + } else { + bbLabels.all = makeBoundingBox(); + } + if (styleEnabled && options.includeLabels) { + if (options.includeMainLabels) { + updateBoundsFromLabel(bounds, ele, null); + } + if (isEdge) { + if (options.includeSourceLabels) { + updateBoundsFromLabel(bounds, ele, 'source'); + } + if (options.includeTargetLabels) { + updateBoundsFromLabel(bounds, ele, 'target'); + } + } + } // style enabled for labels + } // if displayed + + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + if (bounds.w > 0 && bounds.h > 0 && displayed) { + expandBoundingBoxSides(bounds, manualExpansion); + + // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides + expandBoundingBox(bounds, 1); + } + return bounds; +}; +var getKey = function getKey(opts) { + var i = 0; + var tf = function tf(val) { + return (val ? 1 : 0) << i++; + }; + var key = 0; + key += tf(opts.incudeNodes); + key += tf(opts.includeEdges); + key += tf(opts.includeLabels); + key += tf(opts.includeMainLabels); + key += tf(opts.includeSourceLabels); + key += tf(opts.includeTargetLabels); + key += tf(opts.includeOverlays); + key += tf(opts.includeOutlines); + return key; +}; +var getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) { + if (ele.isEdge()) { + var p1 = ele.source().position(); + var p2 = ele.target().position(); + var r = function r(x) { + return Math.round(x); + }; + return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]); + } else { + return 0; + } +}; +var cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) { + var _p = ele._private; + var bb; + var isEdge = ele.isEdge(); + var key = opts == null ? defBbOptsKey : getKey(opts); + var usingDefOpts = key === defBbOptsKey; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame; + var isDirty = function isDirty(ele) { + return ele._private.bbCache == null || ele._private.styleDirty; + }; + var needRecalc = !useCache || isDirty(ele) || isEdge && isDirty(ele.source()) || isDirty(ele.target()); + if (needRecalc) { + if (!isPosKeySame) { + ele.recalculateRenderedStyle(useCache); + } + bb = boundingBoxImpl(ele, defBbOpts); + _p.bbCache = bb; + _p.bbCachePosKey = currPosKey; + } else { + bb = _p.bbCache; + } + + // not using def opts => need to build up bb from combination of sub bbs + if (!usingDefOpts) { + var isNode = ele.isNode(); + bb = makeBoundingBox(); + if (opts.includeNodes && isNode || opts.includeEdges && !isNode) { + if (opts.includeOverlays) { + updateBoundsFromBox(bb, _p.overlayBounds); + } else { + updateBoundsFromBox(bb, _p.bodyBounds); + } + } + if (opts.includeLabels) { + if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) { + updateBoundsFromBox(bb, _p.labelBounds.all); + } else { + if (opts.includeMainLabels) { + updateBoundsFromBox(bb, _p.labelBounds.mainRot); + } + if (opts.includeSourceLabels) { + updateBoundsFromBox(bb, _p.labelBounds.sourceRot); + } + if (opts.includeTargetLabels) { + updateBoundsFromBox(bb, _p.labelBounds.targetRot); + } + } + } + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } + return bb; +}; +var defBbOpts = { + includeNodes: true, + includeEdges: true, + includeLabels: true, + includeMainLabels: true, + includeSourceLabels: true, + includeTargetLabels: true, + includeOverlays: true, + includeUnderlays: true, + includeOutlines: true, + useCache: true +}; +var defBbOptsKey = getKey(defBbOpts); +var filledBbOpts = defaults$g(defBbOpts); +elesfn$b.boundingBox = function (options) { + var bounds; + + // the main usecase is ele.boundingBox() for a single element with no/def options + // specified s.t. the cache is used, so check for this case to make it faster by + // avoiding the overhead of the rest of the function + if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options === undefined || options.useCache === undefined || options.useCache === true)) { + if (options === undefined) { + options = defBbOpts; + } else { + options = filledBbOpts(options); + } + bounds = cachedBoundingBoxImpl(this[0], options); + } else { + bounds = makeBoundingBox(); + options = options || defBbOpts; + var opts = filledBbOpts(options); + var eles = this; + var cy = eles.cy(); + var styleEnabled = cy.styleEnabled(); + if (styleEnabled) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var currPosKey = getBoundingBoxPosKey(ele); + var isPosKeySame = _p.bbCachePosKey === currPosKey; + var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; + ele.recalculateRenderedStyle(useCache); + } + } + this.updateCompoundBounds(!options.useCache); + for (var _i = 0; _i < eles.length; _i++) { + var _ele = eles[_i]; + updateBoundsFromBox(bounds, cachedBoundingBoxImpl(_ele, opts)); + } + } + bounds.x1 = noninf(bounds.x1); + bounds.y1 = noninf(bounds.y1); + bounds.x2 = noninf(bounds.x2); + bounds.y2 = noninf(bounds.y2); + bounds.w = noninf(bounds.x2 - bounds.x1); + bounds.h = noninf(bounds.y2 - bounds.y1); + return bounds; +}; +elesfn$b.dirtyBoundingBoxCache = function () { + for (var i = 0; i < this.length; i++) { + var _p = this[i]._private; + _p.bbCache = null; + _p.bbCachePosKey = null; + _p.bodyBounds = null; + _p.overlayBounds = null; + _p.labelBounds.all = null; + _p.labelBounds.source = null; + _p.labelBounds.target = null; + _p.labelBounds.main = null; + _p.labelBounds.sourceRot = null; + _p.labelBounds.targetRot = null; + _p.labelBounds.mainRot = null; + _p.arrowBounds.source = null; + _p.arrowBounds.target = null; + _p.arrowBounds['mid-source'] = null; + _p.arrowBounds['mid-target'] = null; + } + this.emitAndNotify('bounds'); + return this; +}; + +// private helper to get bounding box for custom node positions +// - good for perf in certain cases but currently requires dirtying the rendered style +// - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer... +// - try to use for only things like discrete layouts where the node position would change anyway +elesfn$b.boundingBoxAt = function (fn) { + var nodes = this.nodes(); + var cy = this.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + var parents = cy.collection(); + if (hasCompoundNodes) { + parents = nodes.filter(function (node) { + return node.isParent(); + }); + nodes = nodes.not(parents); + } + if (plainObject(fn)) { + var obj = fn; + fn = function fn() { + return obj; + }; + } + var storeOldPos = function storeOldPos(node, i) { + return node._private.bbAtOldPos = fn(node, i); + }; + var getOldPos = function getOldPos(node) { + return node._private.bbAtOldPos; + }; + cy.startBatch(); + nodes.forEach(storeOldPos).silentPositions(fn); + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + var bb = copyBoundingBox(this.boundingBox({ + useCache: false + })); + nodes.silentPositions(getOldPos); + if (hasCompoundNodes) { + parents.dirtyCompoundBoundsCache(); + parents.dirtyBoundingBoxCache(); + parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle + } + + cy.endBatch(); + return bb; +}; +fn$3.boundingbox = fn$3.bb = fn$3.boundingBox; +fn$3.renderedBoundingbox = fn$3.renderedBoundingBox; +var bounds = elesfn$b; + +var fn$2, elesfn$a; +fn$2 = elesfn$a = {}; +var defineDimFns = function defineDimFns(opts) { + opts.uppercaseName = capitalize(opts.name); + opts.autoName = 'auto' + opts.uppercaseName; + opts.labelName = 'label' + opts.uppercaseName; + opts.outerName = 'outer' + opts.uppercaseName; + opts.uppercaseOuterName = capitalize(opts.outerName); + fn$2[opts.name] = function dimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + if (ele) { + if (styleEnabled) { + if (ele.isParent()) { + ele.updateCompoundBounds(); + return _p[opts.autoName] || 0; + } + var d = ele.pstyle(opts.name); + switch (d.strValue) { + case 'label': + ele.recalculateRenderedStyle(); + return _p.rstyle[opts.labelName] || 0; + default: + return d.pfValue; + } + } else { + return 1; + } + } + }; + fn$2['outer' + opts.uppercaseName] = function outerDimImpl() { + var ele = this[0]; + var _p = ele._private; + var cy = _p.cy; + var styleEnabled = cy._private.styleEnabled; + if (ele) { + if (styleEnabled) { + var dim = ele[opts.name](); + var border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side + var padding = 2 * ele.padding(); + return dim + border + padding; + } else { + return 1; + } + } + }; + fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() { + var ele = this[0]; + if (ele) { + var d = ele[opts.name](); + return d * this.cy().zoom(); + } + }; + fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() { + var ele = this[0]; + if (ele) { + var od = ele[opts.outerName](); + return od * this.cy().zoom(); + } + }; +}; +defineDimFns({ + name: 'width' +}); +defineDimFns({ + name: 'height' +}); +elesfn$a.padding = function () { + var ele = this[0]; + var _p = ele._private; + if (ele.isParent()) { + ele.updateCompoundBounds(); + if (_p.autoPadding !== undefined) { + return _p.autoPadding; + } else { + return ele.pstyle('padding').pfValue; + } + } else { + return ele.pstyle('padding').pfValue; + } +}; +elesfn$a.paddedHeight = function () { + var ele = this[0]; + return ele.height() + 2 * ele.padding(); +}; +elesfn$a.paddedWidth = function () { + var ele = this[0]; + return ele.width() + 2 * ele.padding(); +}; +var widthHeight = elesfn$a; + +var ifEdge = function ifEdge(ele, getValue) { + if (ele.isEdge()) { + return getValue(ele); + } +}; +var ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) { + if (ele.isEdge()) { + var cy = ele.cy(); + return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); + } +}; +var ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) { + if (ele.isEdge()) { + var cy = ele.cy(); + var pan = cy.pan(); + var zoom = cy.zoom(); + return getPoints(ele).map(function (p) { + return modelToRenderedPosition(p, zoom, pan); + }); + } +}; +var controlPoints = function controlPoints(ele) { + return ele.renderer().getControlPoints(ele); +}; +var segmentPoints = function segmentPoints(ele) { + return ele.renderer().getSegmentPoints(ele); +}; +var sourceEndpoint = function sourceEndpoint(ele) { + return ele.renderer().getSourceEndpoint(ele); +}; +var targetEndpoint = function targetEndpoint(ele) { + return ele.renderer().getTargetEndpoint(ele); +}; +var midpoint = function midpoint(ele) { + return ele.renderer().getEdgeMidpoint(ele); +}; +var pts = { + controlPoints: { + get: controlPoints, + mult: true + }, + segmentPoints: { + get: segmentPoints, + mult: true + }, + sourceEndpoint: { + get: sourceEndpoint + }, + targetEndpoint: { + get: targetEndpoint + }, + midpoint: { + get: midpoint + } +}; +var renderedName = function renderedName(name) { + return 'rendered' + name[0].toUpperCase() + name.substr(1); +}; +var edgePoints = Object.keys(pts).reduce(function (obj, name) { + var spec = pts[name]; + var rName = renderedName(name); + obj[name] = function () { + return ifEdge(this, spec.get); + }; + if (spec.mult) { + obj[rName] = function () { + return ifEdgeRenderedPositions(this, spec.get); + }; + } else { + obj[rName] = function () { + return ifEdgeRenderedPosition(this, spec.get); + }; + } + return obj; +}, {}); + +var dimensions = extend({}, position, bounds, widthHeight, edgePoints); + +/*! +Event object based on jQuery events, MIT license + +https://jquery.org/license/ +https://tldrlegal.com/license/mit-license +https://github.com/jquery/jquery/blob/master/src/event.js +*/ + +var Event = function Event(src, props) { + this.recycle(src, props); +}; +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +Event.prototype = { + instanceString: function instanceString() { + return 'event'; + }, + recycle: function recycle(src, props) { + this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse; + if (src != null && src.preventDefault) { + // Browser Event object + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse; + } else if (src != null && src.type) { + // Plain object containing all event details + props = src; + } else { + // Event string + this.type = src; + } + + // Put explicitly provided properties onto the event object + if (props != null) { + // more efficient to manually copy fields we use + this.originalEvent = props.originalEvent; + this.type = props.type != null ? props.type : this.type; + this.cy = props.cy; + this.target = props.target; + this.position = props.position; + this.renderedPosition = props.renderedPosition; + this.namespace = props.namespace; + this.layout = props.layout; + } + if (this.cy != null && this.position != null && this.renderedPosition == null) { + // create a rendered position based on the passed position + var pos = this.position; + var zoom = this.cy.zoom(); + var pan = this.cy.pan(); + this.renderedPosition = { + x: pos.x * zoom + pan.x, + y: pos.y * zoom + pan.y + }; + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + }, + preventDefault: function preventDefault() { + this.isDefaultPrevented = returnTrue; + var e = this.originalEvent; + if (!e) { + return; + } + + // if preventDefault exists run it on the original event + if (e.preventDefault) { + e.preventDefault(); + } + }, + stopPropagation: function stopPropagation() { + this.isPropagationStopped = returnTrue; + var e = this.originalEvent; + if (!e) { + return; + } + + // if stopPropagation exists run it on the original event + if (e.stopPropagation) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function stopImmediatePropagation() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +var eventRegex = /^([^.]+)(\.(?:[^.]+))?$/; // regex for matching event strings (e.g. "click.namespace") +var universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally + +var defaults$8 = { + qualifierCompare: function qualifierCompare(q1, q2) { + return q1 === q2; + }, + eventMatches: function eventMatches( /*context, listener, eventObj*/ + ) { + return true; + }, + addEventFields: function addEventFields( /*context, evt*/ + ) {}, + callbackContext: function callbackContext(context /*, listener, eventObj*/) { + return context; + }, + beforeEmit: function beforeEmit( /* context, listener, eventObj */ + ) {}, + afterEmit: function afterEmit( /* context, listener, eventObj */ + ) {}, + bubble: function bubble( /*context*/ + ) { + return false; + }, + parent: function parent( /*context*/ + ) { + return null; + }, + context: null +}; +var defaultsKeys = Object.keys(defaults$8); +var emptyOpts = {}; +function Emitter() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts; + var context = arguments.length > 1 ? arguments[1] : undefined; + // micro-optimisation vs Object.assign() -- reduces Element instantiation time + for (var i = 0; i < defaultsKeys.length; i++) { + var key = defaultsKeys[i]; + this[key] = opts[key] || defaults$8[key]; + } + this.context = context || this.context; + this.listeners = []; + this.emitting = 0; +} +var p = Emitter.prototype; +var forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) { + if (fn$6(qualifier)) { + callback = qualifier; + qualifier = null; + } + if (confOverrides) { + if (conf == null) { + conf = confOverrides; + } else { + conf = extend({}, conf, confOverrides); + } + } + var eventList = array(events) ? events : events.split(/\s+/); + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + if (emptyString(evt)) { + continue; + } + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var ret = handler(self, evt, type, namespace, qualifier, callback, conf); + if (ret === false) { + break; + } // allow exiting early + } + } +}; + +var makeEventObj = function makeEventObj(self, obj) { + self.addEventFields(self.context, obj); + return new Event(obj.type, obj); +}; +var forEachEventObj = function forEachEventObj(self, handler, events) { + if (event(events)) { + handler(self, events); + return; + } else if (plainObject(events)) { + handler(self, makeEventObj(self, events)); + return; + } + var eventList = array(events) ? events : events.split(/\s+/); + for (var i = 0; i < eventList.length; i++) { + var evt = eventList[i]; + if (emptyString(evt)) { + continue; + } + var match = evt.match(eventRegex); // type[.namespace] + + if (match) { + var type = match[1]; + var namespace = match[2] ? match[2] : null; + var eventObj = makeEventObj(self, { + type: type, + namespace: namespace, + target: self.context + }); + handler(self, eventObj); + } + } +}; +p.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) { + forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) { + if (fn$6(callback)) { + self.listeners.push({ + event: event, + // full event string + callback: callback, + // callback to run + type: type, + // the event type (e.g. 'click') + namespace: namespace, + // the event namespace (e.g. ".foo") + qualifier: qualifier, + // a restriction on whether to match this emitter + conf: conf // additional configuration + }); + } + }, events, qualifier, callback, conf, confOverrides); + return this; +}; +p.one = function (events, qualifier, callback, conf) { + return this.on(events, qualifier, callback, conf, { + one: true + }); +}; +p.removeListener = p.off = function (events, qualifier, callback, conf) { + var _this = this; + if (this.emitting !== 0) { + this.listeners = copyArray(this.listeners); + } + var listeners = this.listeners; + var _loop = function _loop(i) { + var listener = listeners[i]; + forEachEvent(_this, function (self, event, type, namespace, qualifier, callback /*, conf*/) { + if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) { + listeners.splice(i, 1); + return false; + } + }, events, qualifier, callback, conf); + }; + for (var i = listeners.length - 1; i >= 0; i--) { + _loop(i); + } + return this; +}; +p.removeAllListeners = function () { + return this.removeListener('*'); +}; +p.emit = p.trigger = function (events, extraParams, manualCallback) { + var listeners = this.listeners; + var numListenersBeforeEmit = listeners.length; + this.emitting++; + if (!array(extraParams)) { + extraParams = [extraParams]; + } + forEachEventObj(this, function (self, eventObj) { + if (manualCallback != null) { + listeners = [{ + event: eventObj.event, + type: eventObj.type, + namespace: eventObj.namespace, + callback: manualCallback + }]; + numListenersBeforeEmit = listeners.length; + } + var _loop2 = function _loop2(i) { + var listener = listeners[i]; + if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) { + var args = [eventObj]; + if (extraParams != null) { + push(args, extraParams); + } + self.beforeEmit(self.context, listener, eventObj); + if (listener.conf && listener.conf.one) { + self.listeners = self.listeners.filter(function (l) { + return l !== listener; + }); + } + var context = self.callbackContext(self.context, listener, eventObj); + var ret = listener.callback.apply(context, args); + self.afterEmit(self.context, listener, eventObj); + if (ret === false) { + eventObj.stopPropagation(); + eventObj.preventDefault(); + } + } // if listener matches + }; + for (var i = 0; i < numListenersBeforeEmit; i++) { + _loop2(i); + } // for listener + + if (self.bubble(self.context) && !eventObj.isPropagationStopped()) { + self.parent(self.context).emit(eventObj, extraParams); + } + }, events); + this.emitting--; + return this; +}; + +var emitterOptions$1 = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(ele, listener, eventObj) { + var selector = listener.qualifier; + if (selector != null) { + return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + return true; + }, + addEventFields: function addEventFields(ele, evt) { + evt.cy = ele.cy(); + evt.target = ele; + }, + callbackContext: function callbackContext(ele, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : ele; + }, + beforeEmit: function beforeEmit(context, listener /*, eventObj*/) { + if (listener.conf && listener.conf.once) { + listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback); + } + }, + bubble: function bubble() { + return true; + }, + parent: function parent(ele) { + return ele.isChild() ? ele.parent() : ele.cy(); + } +}; +var argSelector$1 = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } +}; +var elesfn$9 = { + createEmitter: function createEmitter() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var _p = ele._private; + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions$1, ele); + } + } + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback); + } + return this; + }, + removeListener: function removeListener(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeListener(events, argSel, callback); + } + return this; + }, + removeAllListeners: function removeAllListeners() { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().removeAllListeners(); + } + return this; + }, + one: function one(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().one(events, argSel, callback); + } + return this; + }, + once: function once(events, selector, callback) { + var argSel = argSelector$1(selector); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().on(events, argSel, callback, { + once: true, + onceCollection: this + }); + } + }, + emit: function emit(events, extraParams) { + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + ele.emitter().emit(events, extraParams); + } + return this; + }, + emitAndNotify: function emitAndNotify(event, extraParams) { + // for internal use only + if (this.length === 0) { + return; + } // empty collections don't need to notify anything + + // notify renderer + this.cy().notify(event, this); + this.emit(event, extraParams); + return this; + } +}; +define.eventAliasesOn(elesfn$9); + +var elesfn$8 = { + nodes: function nodes(selector) { + return this.filter(function (ele) { + return ele.isNode(); + }).filter(selector); + }, + edges: function edges(selector) { + return this.filter(function (ele) { + return ele.isEdge(); + }).filter(selector); + }, + // internal helper to get nodes and edges as separate collections with single iteration over elements + byGroup: function byGroup() { + var nodes = this.spawn(); + var edges = this.spawn(); + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + if (ele.isNode()) { + nodes.push(ele); + } else { + edges.push(ele); + } + } + return { + nodes: nodes, + edges: edges + }; + }, + filter: function filter(_filter, thisArg) { + if (_filter === undefined) { + // check this first b/c it's the most common/performant case + return this; + } else if (string(_filter) || elementOrCollection(_filter)) { + return new Selector(_filter).filter(this); + } else if (fn$6(_filter)) { + var filterEles = this.spawn(); + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles); + if (include) { + filterEles.push(ele); + } + } + return filterEles; + } + return this.spawn(); // if not handled by above, give 'em an empty collection + }, + + not: function not(toRemove) { + if (!toRemove) { + return this; + } else { + if (string(toRemove)) { + toRemove = this.filter(toRemove); + } + var elements = this.spawn(); + for (var i = 0; i < this.length; i++) { + var element = this[i]; + var remove = toRemove.has(element); + if (!remove) { + elements.push(element); + } + } + return elements; + } + }, + absoluteComplement: function absoluteComplement() { + var cy = this.cy(); + return cy.mutableElements().not(this); + }, + intersect: function intersect(other) { + // if a selector is specified, then filter by it instead + if (string(other)) { + var selector = other; + return this.filter(selector); + } + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var col1Smaller = this.length < other.length; + var colS = col1Smaller ? col1 : col2; + var colL = col1Smaller ? col2 : col1; + for (var i = 0; i < colS.length; i++) { + var ele = colS[i]; + if (colL.has(ele)) { + elements.push(ele); + } + } + return elements; + }, + xor: function xor(other) { + var cy = this._private.cy; + if (string(other)) { + other = cy.$(other); + } + var elements = this.spawn(); + var col1 = this; + var col2 = other; + var add = function add(col, other) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + if (!inOther) { + elements.push(ele); + } + } + }; + add(col1, col2); + add(col2, col1); + return elements; + }, + diff: function diff(other) { + var cy = this._private.cy; + if (string(other)) { + other = cy.$(other); + } + var left = this.spawn(); + var right = this.spawn(); + var both = this.spawn(); + var col1 = this; + var col2 = other; + var add = function add(col, other, retEles) { + for (var i = 0; i < col.length; i++) { + var ele = col[i]; + var id = ele._private.data.id; + var inOther = other.hasElementWithId(id); + if (inOther) { + both.merge(ele); + } else { + retEles.push(ele); + } + } + }; + add(col1, col2, left); + add(col2, col1, right); + return { + left: left, + right: right, + both: both + }; + }, + add: function add(toAdd) { + var cy = this._private.cy; + if (!toAdd) { + return this; + } + if (string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + var elements = this.spawnSelf(); + for (var i = 0; i < toAdd.length; i++) { + var ele = toAdd[i]; + var add = !this.has(ele); + if (add) { + elements.push(ele); + } + } + return elements; + }, + // in place merge on calling collection + merge: function merge(toAdd) { + var _p = this._private; + var cy = _p.cy; + if (!toAdd) { + return this; + } + if (toAdd && string(toAdd)) { + var selector = toAdd; + toAdd = cy.mutableElements().filter(selector); + } + var map = _p.map; + for (var i = 0; i < toAdd.length; i++) { + var toAddEle = toAdd[i]; + var id = toAddEle._private.data.id; + var add = !map.has(id); + if (add) { + var index = this.length++; + this[index] = toAddEle; + map.set(id, { + ele: toAddEle, + index: index + }); + } + } + return this; // chaining + }, + + unmergeAt: function unmergeAt(i) { + var ele = this[i]; + var id = ele.id(); + var _p = this._private; + var map = _p.map; + + // remove ele + this[i] = undefined; + map["delete"](id); + var unmergedLastEle = i === this.length - 1; + + // replace empty spot with last ele in collection + if (this.length > 1 && !unmergedLastEle) { + var lastEleI = this.length - 1; + var lastEle = this[lastEleI]; + var lastEleId = lastEle._private.data.id; + this[lastEleI] = undefined; + this[i] = lastEle; + map.set(lastEleId, { + ele: lastEle, + index: i + }); + } + + // the collection is now 1 ele smaller + this.length--; + return this; + }, + // remove single ele in place in calling collection + unmergeOne: function unmergeOne(ele) { + ele = ele[0]; + var _p = this._private; + var id = ele._private.data.id; + var map = _p.map; + var entry = map.get(id); + if (!entry) { + return this; // no need to remove + } + + var i = entry.index; + this.unmergeAt(i); + return this; + }, + // remove eles in place on calling collection + unmerge: function unmerge(toRemove) { + var cy = this._private.cy; + if (!toRemove) { + return this; + } + if (toRemove && string(toRemove)) { + var selector = toRemove; + toRemove = cy.mutableElements().filter(selector); + } + for (var i = 0; i < toRemove.length; i++) { + this.unmergeOne(toRemove[i]); + } + return this; // chaining + }, + + unmergeBy: function unmergeBy(toRmFn) { + for (var i = this.length - 1; i >= 0; i--) { + var ele = this[i]; + if (toRmFn(ele)) { + this.unmergeAt(i); + } + } + return this; + }, + map: function map(mapFn, thisArg) { + var arr = []; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles); + arr.push(ret); + } + return arr; + }, + reduce: function reduce(fn, initialValue) { + var val = initialValue; + var eles = this; + for (var i = 0; i < eles.length; i++) { + val = fn(val, eles[i], i, eles); + } + return val; + }, + max: function max(valFn, thisArg) { + var max = -Infinity; + var maxEle; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + if (val > max) { + max = val; + maxEle = ele; + } + } + return { + value: max, + ele: maxEle + }; + }, + min: function min(valFn, thisArg) { + var min = Infinity; + var minEle; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles); + if (val < min) { + min = val; + minEle = ele; + } + } + return { + value: min, + ele: minEle + }; + } +}; + +// aliases +var fn$1 = elesfn$8; +fn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add; +fn$1['\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not; +fn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect; +fn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor; +fn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter; +fn$1.complement = fn$1.abscomp = fn$1.absoluteComplement; + +var elesfn$7 = { + isNode: function isNode() { + return this.group() === 'nodes'; + }, + isEdge: function isEdge() { + return this.group() === 'edges'; + }, + isLoop: function isLoop() { + return this.isEdge() && this.source()[0] === this.target()[0]; + }, + isSimple: function isSimple() { + return this.isEdge() && this.source()[0] !== this.target()[0]; + }, + group: function group() { + var ele = this[0]; + if (ele) { + return ele._private.group; + } + } +}; + +/** + * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges), + * and z-index (low to high). These styles affect how this applies: + * + * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the + * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from + * root to leaves of the compound graph. The last drawn is `top`. + * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes. + * `manual` ignores this convention and draws based on the `z-index` value setting. + * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher + * `z-index` will be drawn on top of an element with a lower `z-index`. + */ +var zIndexSort = function zIndexSort(a, b) { + var cy = a.cy(); + var hasCompoundNodes = cy.hasCompoundNodes(); + function getDepth(ele) { + var style = ele.pstyle('z-compound-depth'); + if (style.value === 'auto') { + return hasCompoundNodes ? ele.zDepth() : 0; + } else if (style.value === 'bottom') { + return -1; + } else if (style.value === 'top') { + return MAX_INT$1; + } + // 'orphan' + return 0; + } + var depthDiff = getDepth(a) - getDepth(b); + if (depthDiff !== 0) { + return depthDiff; + } + function getEleDepth(ele) { + var style = ele.pstyle('z-index-compare'); + if (style.value === 'auto') { + return ele.isNode() ? 1 : 0; + } + // 'manual' + return 0; + } + var eleDiff = getEleDepth(a) - getEleDepth(b); + if (eleDiff !== 0) { + return eleDiff; + } + var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value; + if (zDiff !== 0) { + return zDiff; + } + // compare indices in the core (order added to graph w/ last on top) + return a.poolIndex() - b.poolIndex(); +}; + +var elesfn$6 = { + forEach: function forEach(fn, thisArg) { + if (fn$6(fn)) { + var N = this.length; + for (var i = 0; i < N; i++) { + var ele = this[i]; + var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this); + if (ret === false) { + break; + } // exit each early on return false + } + } + + return this; + }, + toArray: function toArray() { + var array = []; + for (var i = 0; i < this.length; i++) { + array.push(this[i]); + } + return array; + }, + slice: function slice(start, end) { + var array = []; + var thisSize = this.length; + if (end == null) { + end = thisSize; + } + if (start == null) { + start = 0; + } + if (start < 0) { + start = thisSize + start; + } + if (end < 0) { + end = thisSize + end; + } + for (var i = start; i >= 0 && i < end && i < thisSize; i++) { + array.push(this[i]); + } + return this.spawn(array); + }, + size: function size() { + return this.length; + }, + eq: function eq(i) { + return this[i] || this.spawn(); + }, + first: function first() { + return this[0] || this.spawn(); + }, + last: function last() { + return this[this.length - 1] || this.spawn(); + }, + empty: function empty() { + return this.length === 0; + }, + nonempty: function nonempty() { + return !this.empty(); + }, + sort: function sort(sortFn) { + if (!fn$6(sortFn)) { + return this; + } + var sorted = this.toArray().sort(sortFn); + return this.spawn(sorted); + }, + sortByZIndex: function sortByZIndex() { + return this.sort(zIndexSort); + }, + zDepth: function zDepth() { + var ele = this[0]; + if (!ele) { + return undefined; + } + + // let cy = ele.cy(); + var _p = ele._private; + var group = _p.group; + if (group === 'nodes') { + var depth = _p.data.parent ? ele.parents().size() : 0; + if (!ele.isParent()) { + return MAX_INT$1 - 1; // childless nodes always on top + } + + return depth; + } else { + var src = _p.source; + var tgt = _p.target; + var srcDepth = src.zDepth(); + var tgtDepth = tgt.zDepth(); + return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent + } + } +}; + +elesfn$6.each = elesfn$6.forEach; +var defineSymbolIterator = function defineSymbolIterator() { + var typeofUndef = "undefined" ; + var isIteratorSupported = (typeof Symbol === "undefined" ? "undefined" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef; // eslint-disable-line no-undef + + if (isIteratorSupported) { + elesfn$6[Symbol.iterator] = function () { + var _this = this; + // eslint-disable-line no-undef + var entry = { + value: undefined, + done: false + }; + var i = 0; + var length = this.length; + return _defineProperty({ + next: function next() { + if (i < length) { + entry.value = _this[i++]; + } else { + entry.value = undefined; + entry.done = true; + } + return entry; + } + }, Symbol.iterator, function () { + // eslint-disable-line no-undef + return this; + }); + }; + } +}; +defineSymbolIterator(); + +var getLayoutDimensionOptions = defaults$g({ + nodeDimensionsIncludeLabels: false +}); +var elesfn$5 = { + // Calculates and returns node dimensions { x, y } based on options given + layoutDimensions: function layoutDimensions(options) { + options = getLayoutDimensionOptions(options); + var dims; + if (!this.takesUpSpace()) { + dims = { + w: 0, + h: 0 + }; + } else if (options.nodeDimensionsIncludeLabels) { + var bbDim = this.boundingBox(); + dims = { + w: bbDim.w, + h: bbDim.h + }; + } else { + dims = { + w: this.outerWidth(), + h: this.outerHeight() + }; + } + + // sanitise the dimensions for external layouts (avoid division by zero) + if (dims.w === 0 || dims.h === 0) { + dims.w = dims.h = 1; + } + return dims; + }, + // using standard layout options, apply position function (w/ or w/o animation) + layoutPositions: function layoutPositions(layout, options, fn) { + var nodes = this.nodes().filter(function (n) { + return !n.isParent(); + }); + var cy = this.cy(); + var layoutEles = options.eles; // nodes & edges + var getMemoizeKey = function getMemoizeKey(node) { + return node.id(); + }; + var fnMem = memoize(fn, getMemoizeKey); // memoized version of position function + + layout.emit({ + type: 'layoutstart', + layout: layout + }); + layout.animations = []; + var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) { + var center = { + x: nodesBb.x1 + nodesBb.w / 2, + y: nodesBb.y1 + nodesBb.h / 2 + }; + var spacingVector = { + // scale from center of bounding box (not necessarily 0,0) + x: (pos.x - center.x) * spacing, + y: (pos.y - center.y) * spacing + }; + return { + x: center.x + spacingVector.x, + y: center.y + spacingVector.y + }; + }; + var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1; + var spacingBb = function spacingBb() { + if (!useSpacingFactor) { + return null; + } + var bb = makeBoundingBox(); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = fnMem(node, i); + expandBoundingBoxByPoint(bb, pos.x, pos.y); + } + return bb; + }; + var bb = spacingBb(); + var getFinalPos = memoize(function (node, i) { + var newPos = fnMem(node, i); + if (useSpacingFactor) { + var spacing = Math.abs(options.spacingFactor); + newPos = calculateSpacing(spacing, bb, newPos); + } + if (options.transform != null) { + newPos = options.transform(node, newPos); + } + return newPos; + }, getMemoizeKey); + if (options.animate) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var newPos = getFinalPos(node, i); + var animateNode = options.animateFilter == null || options.animateFilter(node, i); + if (animateNode) { + var ani = node.animation({ + position: newPos, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(ani); + } else { + node.position(newPos); + } + } + if (options.fit) { + var fitAni = cy.animation({ + fit: { + boundingBox: layoutEles.boundingBoxAt(getFinalPos), + padding: options.padding + }, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(fitAni); + } else if (options.zoom !== undefined && options.pan !== undefined) { + var zoomPanAni = cy.animation({ + zoom: options.zoom, + pan: options.pan, + duration: options.animationDuration, + easing: options.animationEasing + }); + layout.animations.push(zoomPanAni); + } + layout.animations.forEach(function (ani) { + return ani.play(); + }); + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + Promise$1.all(layout.animations.map(function (ani) { + return ani.promise(); + })).then(function () { + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + }); + } else { + nodes.positions(getFinalPos); + if (options.fit) { + cy.fit(options.eles, options.padding); + } + if (options.zoom != null) { + cy.zoom(options.zoom); + } + if (options.pan) { + cy.pan(options.pan); + } + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: layout + }); + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } + return this; // chaining + }, + + layout: function layout(options) { + var cy = this.cy(); + return cy.makeLayout(extend({}, options, { + eles: this + })); + } +}; + +// aliases: +elesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout; + +function styleCache(key, fn, ele) { + var _p = ele._private; + var cache = _p.styleCache = _p.styleCache || []; + var val; + if ((val = cache[key]) != null) { + return val; + } else { + val = cache[key] = fn(ele); + return val; + } +} +function cacheStyleFunction(key, fn) { + key = hashString(key); + return function cachedStyleFunction(ele) { + return styleCache(key, fn, ele); + }; +} +function cachePrototypeStyleFunction(key, fn) { + key = hashString(key); + var selfFn = function selfFn(ele) { + return fn.call(ele); + }; + return function cachedPrototypeStyleFunction() { + var ele = this[0]; + if (ele) { + return styleCache(key, selfFn, ele); + } + }; +} +var elesfn$4 = { + recalculateRenderedStyle: function recalculateRenderedStyle(useCache) { + var cy = this.cy(); + var renderer = cy.renderer(); + var styleEnabled = cy.styleEnabled(); + if (renderer && styleEnabled) { + renderer.recalculateRenderedStyle(this, useCache); + } + return this; + }, + dirtyStyleCache: function dirtyStyleCache() { + var cy = this.cy(); + var dirty = function dirty(ele) { + return ele._private.styleCache = null; + }; + if (cy.hasCompoundNodes()) { + var eles; + eles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + eles.merge(eles.connectedEdges()); + eles.forEach(dirty); + } else { + this.forEach(function (ele) { + dirty(ele); + ele.connectedEdges().forEach(dirty); + }); + } + return this; + }, + // fully updates (recalculates) the style for the elements + updateStyle: function updateStyle(notifyRenderer) { + var cy = this._private.cy; + if (!cy.styleEnabled()) { + return this; + } + if (cy.batching()) { + var bEles = cy._private.batchStyleEles; + bEles.merge(this); + return this; // chaining and exit early when batching + } + + var hasCompounds = cy.hasCompoundNodes(); + var updatedEles = this; + notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false; + if (hasCompounds) { + // then add everything up and down for compound selector checks + updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents()); + } + + // let changedEles = style.apply( updatedEles ); + var changedEles = updatedEles; + if (notifyRenderer) { + changedEles.emitAndNotify('style'); // let renderer know we changed style + } else { + changedEles.emit('style'); // just fire the event + } + + updatedEles.forEach(function (ele) { + return ele._private.styleDirty = true; + }); + return this; // chaining + }, + + // private: clears dirty flag and recalculates style + cleanStyle: function cleanStyle() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return; + } + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + if (ele._private.styleDirty) { + // n.b. this flag should be set before apply() to avoid potential infinite recursion + ele._private.styleDirty = false; + cy.style().apply(ele); + } + } + }, + // get the internal parsed style object for the specified property + parsedStyle: function parsedStyle(property) { + var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var ele = this[0]; + var cy = ele.cy(); + if (!cy.styleEnabled()) { + return; + } + if (ele) { + this.cleanStyle(); + var overriddenStyle = ele._private.style[property]; + if (overriddenStyle != null) { + return overriddenStyle; + } else if (includeNonDefault) { + return cy.style().getDefaultProperty(property); + } else { + return null; + } + } + }, + numericStyle: function numericStyle(property) { + var ele = this[0]; + if (!ele.cy().styleEnabled()) { + return; + } + if (ele) { + var pstyle = ele.pstyle(property); + return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value; + } + }, + numericStyleUnits: function numericStyleUnits(property) { + var ele = this[0]; + if (!ele.cy().styleEnabled()) { + return; + } + if (ele) { + return ele.pstyle(property).units; + } + }, + // get the specified css property as a rendered value (i.e. on-screen value) + // or get the whole rendered style if no property specified (NB doesn't allow setting) + renderedStyle: function renderedStyle(property) { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return this; + } + var ele = this[0]; + if (ele) { + return cy.style().getRenderedStyle(ele, property); + } + }, + // read the calculated css style of the element or override the style (via a bypass) + style: function style(name, value) { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return this; + } + var updateTransitions = false; + var style = cy.style(); + if (plainObject(name)) { + // then extend the bypass + var props = name; + style.applyBypass(this, props, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } else if (string(name)) { + if (value === undefined) { + // then get the property from the style + var ele = this[0]; + if (ele) { + return style.getStylePropertyValue(ele, name); + } else { + // empty collection => can't get any value + return; + } + } else { + // then set the bypass with the property value + style.applyBypass(this, name, value, updateTransitions); + this.emitAndNotify('style'); // let the renderer know we've updated style + } + } else if (name === undefined) { + var _ele = this[0]; + if (_ele) { + return style.getRawStyle(_ele); + } else { + // empty collection => can't get any value + return; + } + } + return this; // chaining + }, + + removeStyle: function removeStyle(names) { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return this; + } + var updateTransitions = false; + var style = cy.style(); + var eles = this; + if (names === undefined) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + style.removeAllBypasses(ele, updateTransitions); + } + } else { + names = names.split(/\s+/); + for (var _i = 0; _i < eles.length; _i++) { + var _ele2 = eles[_i]; + style.removeBypasses(_ele2, names, updateTransitions); + } + } + this.emitAndNotify('style'); // let the renderer know we've updated style + + return this; // chaining + }, + + show: function show() { + this.css('display', 'element'); + return this; // chaining + }, + + hide: function hide() { + this.css('display', 'none'); + return this; // chaining + }, + + effectiveOpacity: function effectiveOpacity() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return 1; + } + var hasCompoundNodes = cy.hasCompoundNodes(); + var ele = this[0]; + if (ele) { + var _p = ele._private; + var parentOpacity = ele.pstyle('opacity').value; + if (!hasCompoundNodes) { + return parentOpacity; + } + var parents = !_p.data.parent ? null : ele.parents(); + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + var opacity = parent.pstyle('opacity').value; + parentOpacity = opacity * parentOpacity; + } + } + return parentOpacity; + } + }, + transparent: function transparent() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return false; + } + var ele = this[0]; + var hasCompoundNodes = ele.cy().hasCompoundNodes(); + if (ele) { + if (!hasCompoundNodes) { + return ele.pstyle('opacity').value === 0; + } else { + return ele.effectiveOpacity() === 0; + } + } + }, + backgrounding: function backgrounding() { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return false; + } + var ele = this[0]; + return ele._private.backgrounding ? true : false; + } +}; +function checkCompound(ele, parentOk) { + var _p = ele._private; + var parents = _p.data.parent ? ele.parents() : null; + if (parents) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + if (!parentOk(parent)) { + return false; + } + } + } + return true; +} +function defineDerivedStateFunction(specs) { + var ok = specs.ok; + var edgeOkViaNode = specs.edgeOkViaNode || specs.ok; + var parentOk = specs.parentOk || specs.ok; + return function () { + var cy = this.cy(); + if (!cy.styleEnabled()) { + return true; + } + var ele = this[0]; + var hasCompoundNodes = cy.hasCompoundNodes(); + if (ele) { + var _p = ele._private; + if (!ok(ele)) { + return false; + } + if (ele.isNode()) { + return !hasCompoundNodes || checkCompound(ele, parentOk); + } else { + var src = _p.source; + var tgt = _p.target; + return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode))); + } + } + }; +} +var eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) { + return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true); +}); +elesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({ + ok: eleTakesUpSpace +})); +var eleInteractive = cacheStyleFunction('eleInteractive', function (ele) { + return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele); +}); +var parentInteractive = cacheStyleFunction('parentInteractive', function (parent) { + return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent); +}); +elesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({ + ok: eleInteractive, + parentOk: parentInteractive, + edgeOkViaNode: eleTakesUpSpace +})); +elesfn$4.noninteractive = function () { + var ele = this[0]; + if (ele) { + return !ele.interactive(); + } +}; +var eleVisible = cacheStyleFunction('eleVisible', function (ele) { + return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele); +}); +var edgeVisibleViaNode = eleTakesUpSpace; +elesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({ + ok: eleVisible, + edgeOkViaNode: edgeVisibleViaNode +})); +elesfn$4.hidden = function () { + var ele = this[0]; + if (ele) { + return !ele.visible(); + } +}; +elesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () { + if (!this.cy().styleEnabled()) { + return false; + } + return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace(); +}); +elesfn$4.bypass = elesfn$4.css = elesfn$4.style; +elesfn$4.renderedCss = elesfn$4.renderedStyle; +elesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle; +elesfn$4.pstyle = elesfn$4.parsedStyle; + +var elesfn$3 = {}; +function defineSwitchFunction(params) { + return function () { + var args = arguments; + var changedEles = []; + + // e.g. cy.nodes().select( data, handler ) + if (args.length === 2) { + var data = args[0]; + var handler = args[1]; + this.on(params.event, data, handler); + } + + // e.g. cy.nodes().select( handler ) + else if (args.length === 1 && fn$6(args[0])) { + var _handler = args[0]; + this.on(params.event, _handler); + } + + // e.g. cy.nodes().select() + // e.g. (private) cy.nodes().select(['tapselect']) + else if (args.length === 0 || args.length === 1 && array(args[0])) { + var addlEvents = args.length === 1 ? args[0] : null; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var able = !params.ableField || ele._private[params.ableField]; + var changed = ele._private[params.field] != params.value; + if (params.overrideAble) { + var overrideAble = params.overrideAble(ele); + if (overrideAble !== undefined) { + able = overrideAble; + if (!overrideAble) { + return this; + } // to save cycles assume not able for all on override + } + } + + if (able) { + ele._private[params.field] = params.value; + if (changed) { + changedEles.push(ele); + } + } + } + var changedColl = this.spawn(changedEles); + changedColl.updateStyle(); // change of state => possible change of style + changedColl.emit(params.event); + if (addlEvents) { + changedColl.emit(addlEvents); + } + } + return this; + }; +} +function defineSwitchSet(params) { + elesfn$3[params.field] = function () { + var ele = this[0]; + if (ele) { + if (params.overrideField) { + var val = params.overrideField(ele); + if (val !== undefined) { + return val; + } + } + return ele._private[params.field]; + } + }; + elesfn$3[params.on] = defineSwitchFunction({ + event: params.on, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: true + }); + elesfn$3[params.off] = defineSwitchFunction({ + event: params.off, + field: params.field, + ableField: params.ableField, + overrideAble: params.overrideAble, + value: false + }); +} +defineSwitchSet({ + field: 'locked', + overrideField: function overrideField(ele) { + return ele.cy().autolock() ? true : undefined; + }, + on: 'lock', + off: 'unlock' +}); +defineSwitchSet({ + field: 'grabbable', + overrideField: function overrideField(ele) { + return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; + }, + on: 'grabify', + off: 'ungrabify' +}); +defineSwitchSet({ + field: 'selected', + ableField: 'selectable', + overrideAble: function overrideAble(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'select', + off: 'unselect' +}); +defineSwitchSet({ + field: 'selectable', + overrideField: function overrideField(ele) { + return ele.cy().autounselectify() ? false : undefined; + }, + on: 'selectify', + off: 'unselectify' +}); +elesfn$3.deselect = elesfn$3.unselect; +elesfn$3.grabbed = function () { + var ele = this[0]; + if (ele) { + return ele._private.grabbed; + } +}; +defineSwitchSet({ + field: 'active', + on: 'activate', + off: 'unactivate' +}); +defineSwitchSet({ + field: 'pannable', + on: 'panify', + off: 'unpanify' +}); +elesfn$3.inactive = function () { + var ele = this[0]; + if (ele) { + return !ele._private.active; + } +}; + +var elesfn$2 = {}; + +// DAG functions +//////////////// + +var defineDagExtremity = function defineDagExtremity(params) { + return function dagExtremityImpl(selector) { + var eles = this; + var ret = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.isNode()) { + continue; + } + var disqualified = false; + var edges = ele.connectedEdges(); + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) { + disqualified = true; + break; + } + } + if (!disqualified) { + ret.push(ele); + } + } + return this.spawn(ret, true).filter(selector); + }; +}; +var defineDagOneHop = function defineDagOneHop(params) { + return function (selector) { + var eles = this; + var oEles = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.isNode()) { + continue; + } + var edges = ele.connectedEdges(); + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + var src = edge.source(); + var tgt = edge.target(); + if (params.outgoing && src === ele) { + oEles.push(edge); + oEles.push(tgt); + } else if (params.incoming && tgt === ele) { + oEles.push(edge); + oEles.push(src); + } + } + } + return this.spawn(oEles, true).filter(selector); + }; +}; +var defineDagAllHops = function defineDagAllHops(params) { + return function (selector) { + var eles = this; + var sEles = []; + var sElesIds = {}; + for (;;) { + var next = params.outgoing ? eles.outgoers() : eles.incomers(); + if (next.length === 0) { + break; + } // done if none left + + var newNext = false; + for (var i = 0; i < next.length; i++) { + var n = next[i]; + var nid = n.id(); + if (!sElesIds[nid]) { + sElesIds[nid] = true; + sEles.push(n); + newNext = true; + } + } + if (!newNext) { + break; + } // done if touched all outgoers already + + eles = next; + } + return this.spawn(sEles, true).filter(selector); + }; +}; +elesfn$2.clearTraversalCache = function () { + for (var i = 0; i < this.length; i++) { + this[i]._private.traversalCache = null; + } +}; +extend(elesfn$2, { + // get the root nodes in the DAG + roots: defineDagExtremity({ + noIncomingEdges: true + }), + // get the leaf nodes in the DAG + leaves: defineDagExtremity({ + noOutgoingEdges: true + }), + // normally called children in graph theory + // these nodes =edges=> outgoing nodes + outgoers: cache(defineDagOneHop({ + outgoing: true + }), 'outgoers'), + // aka DAG descendants + successors: defineDagAllHops({ + outgoing: true + }), + // normally called parents in graph theory + // these nodes <=edges= incoming nodes + incomers: cache(defineDagOneHop({ + incoming: true + }), 'incomers'), + // aka DAG ancestors + predecessors: defineDagAllHops({ + incoming: true + }) +}); + +// Neighbourhood functions +////////////////////////// + +extend(elesfn$2, { + neighborhood: cache(function (selector) { + var elements = []; + var nodes = this.nodes(); + for (var i = 0; i < nodes.length; i++) { + // for all nodes + var node = nodes[i]; + var connectedEdges = node.connectedEdges(); + + // for each connected edge, add the edge and the other node + for (var j = 0; j < connectedEdges.length; j++) { + var edge = connectedEdges[j]; + var src = edge.source(); + var tgt = edge.target(); + var otherNode = node === src ? tgt : src; + + // need check in case of loop + if (otherNode.length > 0) { + elements.push(otherNode[0]); // add node 1 hop away + } + + // add connected edge + elements.push(edge[0]); + } + } + return this.spawn(elements, true).filter(selector); + }, 'neighborhood'), + closedNeighborhood: function closedNeighborhood(selector) { + return this.neighborhood().add(this).filter(selector); + }, + openNeighborhood: function openNeighborhood(selector) { + return this.neighborhood(selector); + } +}); + +// aliases +elesfn$2.neighbourhood = elesfn$2.neighborhood; +elesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood; +elesfn$2.openNeighbourhood = elesfn$2.openNeighborhood; + +// Edge functions +///////////////// + +extend(elesfn$2, { + source: cache(function sourceImpl(selector) { + var ele = this[0]; + var src; + if (ele) { + src = ele._private.source || ele.cy().collection(); + } + return src && selector ? src.filter(selector) : src; + }, 'source'), + target: cache(function targetImpl(selector) { + var ele = this[0]; + var tgt; + if (ele) { + tgt = ele._private.target || ele.cy().collection(); + } + return tgt && selector ? tgt.filter(selector) : tgt; + }, 'target'), + sources: defineSourceFunction({ + attr: 'source' + }), + targets: defineSourceFunction({ + attr: 'target' + }) +}); +function defineSourceFunction(params) { + return function sourceImpl(selector) { + var sources = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var src = ele._private[params.attr]; + if (src) { + sources.push(src); + } + } + return this.spawn(sources, true).filter(selector); + }; +} +extend(elesfn$2, { + edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'), + edgesTo: cache(defineEdgesWithFunction({ + thisIsSrc: true + }), 'edgesTo') +}); +function defineEdgesWithFunction(params) { + return function edgesWithImpl(otherNodes) { + var elements = []; + var cy = this._private.cy; + var p = params || {}; + + // get elements if a selector is specified + if (string(otherNodes)) { + otherNodes = cy.$(otherNodes); + } + for (var h = 0; h < otherNodes.length; h++) { + var edges = otherNodes[h]._private.edges; + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var edgeData = edge._private.data; + var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target); + var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target); + var edgeConnectsThisAndOther = thisToOther || otherToThis; + if (!edgeConnectsThisAndOther) { + continue; + } + if (p.thisIsSrc || p.thisIsTgt) { + if (p.thisIsSrc && !thisToOther) { + continue; + } + if (p.thisIsTgt && !otherToThis) { + continue; + } + } + elements.push(edge); + } + } + return this.spawn(elements, true); + }; +} +extend(elesfn$2, { + connectedEdges: cache(function (selector) { + var retEles = []; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var node = eles[i]; + if (!node.isNode()) { + continue; + } + var edges = node._private.edges; + for (var j = 0; j < edges.length; j++) { + var edge = edges[j]; + retEles.push(edge); + } + } + return this.spawn(retEles, true).filter(selector); + }, 'connectedEdges'), + connectedNodes: cache(function (selector) { + var retEles = []; + var eles = this; + for (var i = 0; i < eles.length; i++) { + var edge = eles[i]; + if (!edge.isEdge()) { + continue; + } + retEles.push(edge.source()[0]); + retEles.push(edge.target()[0]); + } + return this.spawn(retEles, true).filter(selector); + }, 'connectedNodes'), + parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'), + codirectedEdges: cache(defineParallelEdgesFunction({ + codirected: true + }), 'codirectedEdges') +}); +function defineParallelEdgesFunction(params) { + var defaults = { + codirected: false + }; + params = extend({}, defaults, params); + return function parallelEdgesImpl(selector) { + // micro-optimised for renderer + var elements = []; + var edges = this.edges(); + var p = params; + + // look at all the edges in the collection + for (var i = 0; i < edges.length; i++) { + var edge1 = edges[i]; + var edge1_p = edge1._private; + var src1 = edge1_p.source; + var srcid1 = src1._private.data.id; + var tgtid1 = edge1_p.data.target; + var srcEdges1 = src1._private.edges; + + // look at edges connected to the src node of this edge + for (var j = 0; j < srcEdges1.length; j++) { + var edge2 = srcEdges1[j]; + var edge2data = edge2._private.data; + var tgtid2 = edge2data.target; + var srcid2 = edge2data.source; + var codirected = tgtid2 === tgtid1 && srcid2 === srcid1; + var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2; + if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) { + elements.push(edge2); + } + } + } + return this.spawn(elements, true).filter(selector); + }; +} + +// Misc functions +///////////////// + +extend(elesfn$2, { + components: function components(root) { + var self = this; + var cy = self.cy(); + var visited = cy.collection(); + var unvisited = root == null ? self.nodes() : root.nodes(); + var components = []; + if (root != null && unvisited.empty()) { + // root may contain only edges + unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides + } + + var visitInComponent = function visitInComponent(node, component) { + visited.merge(node); + unvisited.unmerge(node); + component.merge(node); + }; + if (unvisited.empty()) { + return self.spawn(); + } + var _loop = function _loop() { + // each iteration yields a component + var cmpt = cy.collection(); + components.push(cmpt); + var root = unvisited[0]; + visitInComponent(root, cmpt); + self.bfs({ + directed: false, + roots: root, + visit: function visit(v) { + return visitInComponent(v, cmpt); + } + }); + cmpt.forEach(function (node) { + node.connectedEdges().forEach(function (e) { + // connectedEdges() usually cached + if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) { + // has() is cheap + cmpt.merge(e); // forEach() only considers nodes -- sets N at call time + } + }); + }); + }; + do { + _loop(); + } while (unvisited.length > 0); + return components; + }, + component: function component() { + var ele = this[0]; + return ele.cy().mutableElements().components(ele)[0]; + } +}); +elesfn$2.componentsOf = elesfn$2.components; + +// represents a set of nodes, edges, or both together +var Collection = function Collection(cy, elements) { + var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + if (cy === undefined) { + error('A collection must have a reference to the core'); + return; + } + var map = new Map$1(); + var createdElements = false; + if (!elements) { + elements = []; + } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) { + createdElements = true; + + // make elements from json and restore all at once later + var eles = []; + var elesIds = new Set$1(); + for (var i = 0, l = elements.length; i < l; i++) { + var json = elements[i]; + if (json.data == null) { + json.data = {}; + } + var _data = json.data; + + // make sure newly created elements have valid ids + if (_data.id == null) { + _data.id = uuid(); + } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) { + continue; // can't create element if prior id already exists + } + + var ele = new Element(cy, json, false); + eles.push(ele); + elesIds.add(_data.id); + } + elements = eles; + } + this.length = 0; + for (var _i = 0, _l = elements.length; _i < _l; _i++) { + var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements + if (element$1 == null) { + continue; + } + var id = element$1._private.data.id; + if (!unique || !map.has(id)) { + if (unique) { + map.set(id, { + index: this.length, + ele: element$1 + }); + } + this[this.length] = element$1; + this.length++; + } + } + this._private = { + eles: this, + cy: cy, + get map() { + if (this.lazyMap == null) { + this.rebuildMap(); + } + return this.lazyMap; + }, + set map(m) { + this.lazyMap = m; + }, + rebuildMap: function rebuildMap() { + var m = this.lazyMap = new Map$1(); + var eles = this.eles; + for (var _i2 = 0; _i2 < eles.length; _i2++) { + var _ele = eles[_i2]; + m.set(_ele.id(), { + index: _i2, + ele: _ele + }); + } + } + }; + if (unique) { + this._private.map = map; + } + + // restore the elements if we created them from json + if (createdElements && !removed) { + this.restore(); + } +}; + +// Functions +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// keep the prototypes in sync (an element has the same functions as a collection) +// and use elefn and elesfn as shorthands to the prototypes +var elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype); +elesfn$1.instanceString = function () { + return 'collection'; +}; +elesfn$1.spawn = function (eles, unique) { + return new Collection(this.cy(), eles, unique); +}; +elesfn$1.spawnSelf = function () { + return this.spawn(this); +}; +elesfn$1.cy = function () { + return this._private.cy; +}; +elesfn$1.renderer = function () { + return this._private.cy.renderer(); +}; +elesfn$1.element = function () { + return this[0]; +}; +elesfn$1.collection = function () { + if (collection(this)) { + return this; + } else { + // an element + return new Collection(this._private.cy, [this]); + } +}; +elesfn$1.unique = function () { + return new Collection(this._private.cy, this, true); +}; +elesfn$1.hasElementWithId = function (id) { + id = '' + id; // id must be string + + return this._private.map.has(id); +}; +elesfn$1.getElementById = function (id) { + id = '' + id; // id must be string + + var cy = this._private.cy; + var entry = this._private.map.get(id); + return entry ? entry.ele : new Collection(cy); // get ele or empty collection +}; + +elesfn$1.$id = elesfn$1.getElementById; +elesfn$1.poolIndex = function () { + var cy = this._private.cy; + var eles = cy._private.elements; + var id = this[0]._private.data.id; + return eles._private.map.get(id).index; +}; +elesfn$1.indexOf = function (ele) { + var id = ele[0]._private.data.id; + return this._private.map.get(id).index; +}; +elesfn$1.indexOfId = function (id) { + id = '' + id; // id must be string + + return this._private.map.get(id).index; +}; +elesfn$1.json = function (obj) { + var ele = this.element(); + var cy = this.cy(); + if (ele == null && obj) { + return this; + } // can't set to no eles + + if (ele == null) { + return undefined; + } // can't get from no eles + + var p = ele._private; + if (plainObject(obj)) { + // set + + cy.startBatch(); + if (obj.data) { + ele.data(obj.data); + var _data2 = p.data; + if (ele.isEdge()) { + // source and target are immutable via data() + var move = false; + var spec = {}; + var src = obj.data.source; + var tgt = obj.data.target; + if (src != null && src != _data2.source) { + spec.source = '' + src; // id must be string + move = true; + } + if (tgt != null && tgt != _data2.target) { + spec.target = '' + tgt; // id must be string + move = true; + } + if (move) { + ele = ele.move(spec); + } + } else { + // parent is immutable via data() + var newParentValSpecd = ('parent' in obj.data); + var parent = obj.data.parent; + if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) { + if (parent === undefined) { + // can't set undefined imperatively, so use null + parent = null; + } + if (parent != null) { + parent = '' + parent; // id must be string + } + + ele = ele.move({ + parent: parent + }); + } + } + } + if (obj.position) { + ele.position(obj.position); + } + + // ignore group -- immutable + + var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) { + var obj_k = obj[k]; + if (obj_k != null && obj_k !== p[k]) { + if (obj_k) { + ele[trueFnName](); + } else { + ele[falseFnName](); + } + } + }; + checkSwitch('removed', 'remove', 'restore'); + checkSwitch('selected', 'select', 'unselect'); + checkSwitch('selectable', 'selectify', 'unselectify'); + checkSwitch('locked', 'lock', 'unlock'); + checkSwitch('grabbable', 'grabify', 'ungrabify'); + checkSwitch('pannable', 'panify', 'unpanify'); + if (obj.classes != null) { + ele.classes(obj.classes); + } + cy.endBatch(); + return this; + } else if (obj === undefined) { + // get + + var json = { + data: copy(p.data), + position: copy(p.position), + group: p.group, + removed: p.removed, + selected: p.selected, + selectable: p.selectable, + locked: p.locked, + grabbable: p.grabbable, + pannable: p.pannable, + classes: null + }; + json.classes = ''; + var i = 0; + p.classes.forEach(function (cls) { + return json.classes += i++ === 0 ? cls : ' ' + cls; + }); + return json; + } +}; +elesfn$1.jsons = function () { + var jsons = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + jsons.push(json); + } + return jsons; +}; +elesfn$1.clone = function () { + var cy = this.cy(); + var elesArr = []; + for (var i = 0; i < this.length; i++) { + var ele = this[i]; + var json = ele.json(); + var clone = new Element(cy, json, false); // NB no restore + + elesArr.push(clone); + } + return new Collection(cy, elesArr); +}; +elesfn$1.copy = elesfn$1.clone; +elesfn$1.restore = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var cy = self.cy(); + var cy_p = cy._private; + + // create arrays of nodes and edges, since we need to + // restore the nodes first + var nodes = []; + var edges = []; + var elements; + for (var _i3 = 0, l = self.length; _i3 < l; _i3++) { + var ele = self[_i3]; + if (addToPool && !ele.removed()) { + // don't need to handle this ele + continue; + } + + // keep nodes first in the array and edges after + if (ele.isNode()) { + // put to front of array if node + nodes.push(ele); + } else { + // put to end of array if edge + edges.push(ele); + } + } + elements = nodes.concat(edges); + var i; + var removeFromElements = function removeFromElements() { + elements.splice(i, 1); + i--; + }; + + // now, restore each element + for (i = 0; i < elements.length; i++) { + var _ele2 = elements[i]; + var _private = _ele2._private; + var _data3 = _private.data; + + // the traversal cache should start fresh when ele is added + _ele2.clearTraversalCache(); + + // set id and validate + if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) { + _data3.id = uuid(); + } else if (number$1(_data3.id)) { + _data3.id = '' + _data3.id; // now it's a string + } else if (emptyString(_data3.id) || !string(_data3.id)) { + error('Can not create element with invalid string ID `' + _data3.id + '`'); + + // can't create element if it has empty string as id or non-string id + removeFromElements(); + continue; + } else if (cy.hasElementWithId(_data3.id)) { + error('Can not create second element with ID `' + _data3.id + '`'); + + // can't create element if one already has that id + removeFromElements(); + continue; + } + var id = _data3.id; // id is finalised, now let's keep a ref + + if (_ele2.isNode()) { + // extra checks for nodes + var pos = _private.position; + + // make sure the nodes have a defined position + + if (pos.x == null) { + pos.x = 0; + } + if (pos.y == null) { + pos.y = 0; + } + } + if (_ele2.isEdge()) { + // extra checks for edges + + var edge = _ele2; + var fields = ['source', 'target']; + var fieldsLength = fields.length; + var badSourceOrTarget = false; + for (var j = 0; j < fieldsLength; j++) { + var field = fields[j]; + var val = _data3[field]; + if (number$1(val)) { + val = _data3[field] = '' + _data3[field]; // now string + } + + if (val == null || val === '') { + // can't create if source or target is not defined properly + error('Can not create edge `' + id + '` with unspecified ' + field); + badSourceOrTarget = true; + } else if (!cy.hasElementWithId(val)) { + // can't create edge if one of its nodes doesn't exist + error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`'); + badSourceOrTarget = true; + } + } + if (badSourceOrTarget) { + removeFromElements(); + continue; + } // can't create this + + var src = cy.getElementById(_data3.source); + var tgt = cy.getElementById(_data3.target); + + // only one edge in node if loop + if (src.same(tgt)) { + src._private.edges.push(edge); + } else { + src._private.edges.push(edge); + tgt._private.edges.push(edge); + } + edge._private.source = src; + edge._private.target = tgt; + } // if is edge + + // create mock ids / indexes maps for element so it can be used like collections + _private.map = new Map$1(); + _private.map.set(id, { + ele: _ele2, + index: 0 + }); + _private.removed = false; + if (addToPool) { + cy.addToPool(_ele2); + } + } // for each element + + // do compound node sanity checks + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + // each node + var node = nodes[_i4]; + var _data4 = node._private.data; + if (number$1(_data4.parent)) { + // then automake string + _data4.parent = '' + _data4.parent; + } + var parentId = _data4.parent; + var specifiedParent = parentId != null; + if (specifiedParent || node._private.parent) { + var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId); + if (parent.empty()) { + // non-existant parent; just remove it + _data4.parent = undefined; + } else if (parent[0].removed()) { + warn('Node added with missing parent, reference to parent removed'); + _data4.parent = undefined; + node._private.parent = null; + } else { + var selfAsParent = false; + var ancestor = parent; + while (!ancestor.empty()) { + if (node.same(ancestor)) { + // mark self as parent and remove from data + selfAsParent = true; + _data4.parent = undefined; // remove parent reference + + // exit or we loop forever + break; + } + ancestor = ancestor.parent(); + } + if (!selfAsParent) { + // connect with children + parent[0]._private.children.push(node); + node._private.parent = parent[0]; + + // let the core know we have a compound graph + cy_p.hasCompoundNodes = true; + } + } // else + } // if specified parent + } // for each node + + if (elements.length > 0) { + var restored = elements.length === self.length ? self : new Collection(cy, elements); + for (var _i5 = 0; _i5 < restored.length; _i5++) { + var _ele3 = restored[_i5]; + if (_ele3.isNode()) { + continue; + } + + // adding an edge invalidates the traversal caches for the parallel edges + _ele3.parallelEdges().clearTraversalCache(); + + // adding an edge invalidates the traversal cache for the connected nodes + _ele3.source().clearTraversalCache(); + _ele3.target().clearTraversalCache(); + } + var toUpdateStyle; + if (cy_p.hasCompoundNodes) { + toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent()); + } else { + toUpdateStyle = restored; + } + toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer); + if (notifyRenderer) { + restored.emitAndNotify('add'); + } else if (addToPool) { + restored.emit('add'); + } + } + return self; // chainability +}; + +elesfn$1.removed = function () { + var ele = this[0]; + return ele && ele._private.removed; +}; +elesfn$1.inside = function () { + var ele = this[0]; + return ele && !ele._private.removed; +}; +elesfn$1.remove = function () { + var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var self = this; + var elesToRemove = []; + var elesToRemoveIds = {}; + var cy = self._private.cy; + + // add connected edges + function addConnectedEdges(node) { + var edges = node._private.edges; + for (var i = 0; i < edges.length; i++) { + add(edges[i]); + } + } + + // add descendant nodes + function addChildren(node) { + var children = node._private.children; + for (var i = 0; i < children.length; i++) { + add(children[i]); + } + } + function add(ele) { + var alreadyAdded = elesToRemoveIds[ele.id()]; + if (removeFromPool && ele.removed() || alreadyAdded) { + return; + } else { + elesToRemoveIds[ele.id()] = true; + } + if (ele.isNode()) { + elesToRemove.push(ele); // nodes are removed last + + addConnectedEdges(ele); + addChildren(ele); + } else { + elesToRemove.unshift(ele); // edges are removed first + } + } + + // make the list of elements to remove + // (may be removing more than specified due to connected edges etc) + + for (var i = 0, l = self.length; i < l; i++) { + var ele = self[i]; + add(ele); + } + function removeEdgeRef(node, edge) { + var connectedEdges = node._private.edges; + removeFromArray(connectedEdges, edge); + + // removing an edges invalidates the traversal cache for its nodes + node.clearTraversalCache(); + } + function removeParallelRef(pllEdge) { + // removing an edge invalidates the traversal caches for the parallel edges + pllEdge.clearTraversalCache(); + } + var alteredParents = []; + alteredParents.ids = {}; + function removeChildRef(parent, ele) { + ele = ele[0]; + parent = parent[0]; + var children = parent._private.children; + var pid = parent.id(); + removeFromArray(children, ele); // remove parent => child ref + + ele._private.parent = null; // remove child => parent ref + + if (!alteredParents.ids[pid]) { + alteredParents.ids[pid] = true; + alteredParents.push(parent); + } + } + self.dirtyCompoundBoundsCache(); + if (removeFromPool) { + cy.removeFromPool(elesToRemove); // remove from core pool + } + + for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) { + var _ele4 = elesToRemove[_i6]; + if (_ele4.isEdge()) { + // remove references to this edge in its connected nodes + var src = _ele4.source()[0]; + var tgt = _ele4.target()[0]; + removeEdgeRef(src, _ele4); + removeEdgeRef(tgt, _ele4); + var pllEdges = _ele4.parallelEdges(); + for (var j = 0; j < pllEdges.length; j++) { + var pllEdge = pllEdges[j]; + removeParallelRef(pllEdge); + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + } + } else { + // remove reference to parent + var parent = _ele4.parent(); + if (parent.length !== 0) { + removeChildRef(parent, _ele4); + } + } + if (removeFromPool) { + // mark as removed + _ele4._private.removed = true; + } + } + + // check to see if we have a compound graph or not + var elesStillInside = cy._private.elements; + cy._private.hasCompoundNodes = false; + for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) { + var _ele5 = elesStillInside[_i7]; + if (_ele5.isParent()) { + cy._private.hasCompoundNodes = true; + break; + } + } + var removedElements = new Collection(this.cy(), elesToRemove); + if (removedElements.size() > 0) { + // must manually notify since trigger won't do this automatically once removed + + if (notifyRenderer) { + removedElements.emitAndNotify('remove'); + } else if (removeFromPool) { + removedElements.emit('remove'); + } + } + + // the parents who were modified by the removal need their style updated + for (var _i8 = 0; _i8 < alteredParents.length; _i8++) { + var _ele6 = alteredParents[_i8]; + if (!removeFromPool || !_ele6.removed()) { + _ele6.updateStyle(); + } + } + return removedElements; +}; +elesfn$1.move = function (struct) { + var cy = this._private.cy; + var eles = this; + + // just clean up refs, caches, etc. in the same way as when removing and then restoring + // (our calls to remove/restore do not remove from the graph or make events) + var notifyRenderer = false; + var modifyPool = false; + var toString = function toString(id) { + return id == null ? id : '' + id; + }; // id must be string + + if (struct.source !== undefined || struct.target !== undefined) { + var srcId = toString(struct.source); + var tgtId = toString(struct.target); + var srcExists = srcId != null && cy.hasElementWithId(srcId); + var tgtExists = tgtId != null && cy.hasElementWithId(tgtId); + if (srcExists || tgtExists) { + cy.batch(function () { + // avoid duplicate style updates + eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + eles.emitAndNotify('moveout'); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data5 = ele._private.data; + if (ele.isEdge()) { + if (srcExists) { + _data5.source = srcId; + } + if (tgtExists) { + _data5.target = tgtId; + } + } + } + eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + + eles.emitAndNotify('move'); + } + } else if (struct.parent !== undefined) { + // move node to new parent + var parentId = toString(struct.parent); + var parentExists = parentId === null || cy.hasElementWithId(parentId); + if (parentExists) { + var pidToAssign = parentId === null ? undefined : parentId; + cy.batch(function () { + // avoid duplicate style updates + var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc. + updated.emitAndNotify('moveout'); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _data6 = ele._private.data; + if (ele.isNode()) { + _data6.parent = pidToAssign; + } + } + updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc. + }); + + eles.emitAndNotify('move'); + } + } + return this; +}; +[elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) { + extend(elesfn$1, props); +}); + +var corefn$9 = { + add: function add(opts) { + var elements; + var cy = this; + + // add the elements + if (elementOrCollection(opts)) { + var eles = opts; + if (eles._private.cy === cy) { + // same instance => just restore + elements = eles.restore(); + } else { + // otherwise, copy from json + var jsons = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + jsons.push(ele.json()); + } + elements = new Collection(cy, jsons); + } + } + + // specify an array of options + else if (array(opts)) { + var _jsons = opts; + elements = new Collection(cy, _jsons); + } + + // specify via opts.nodes and opts.edges + else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) { + var elesByGroup = opts; + var _jsons2 = []; + var grs = ['nodes', 'edges']; + for (var _i = 0, il = grs.length; _i < il; _i++) { + var group = grs[_i]; + var elesArray = elesByGroup[group]; + if (array(elesArray)) { + for (var j = 0, jl = elesArray.length; j < jl; j++) { + var json = extend({ + group: group + }, elesArray[j]); + _jsons2.push(json); + } + } + } + elements = new Collection(cy, _jsons2); + } + + // specify options for one element + else { + var _json = opts; + elements = new Element(cy, _json).collection(); + } + return elements; + }, + remove: function remove(collection) { + if (elementOrCollection(collection)) ; else if (string(collection)) { + var selector = collection; + collection = this.$(selector); + } + return collection.remove(); + } +}; + +/* global Float32Array */ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ +function generateCubicBezier(mX1, mY1, mX2, mY2) { + var NEWTON_ITERATIONS = 4, + NEWTON_MIN_SLOPE = 0.001, + SUBDIVISION_PRECISION = 0.0000001, + SUBDIVISION_MAX_ITERATIONS = 10, + kSplineTableSize = 11, + kSampleStepSize = 1.0 / (kSplineTableSize - 1.0), + float32ArraySupported = typeof Float32Array !== 'undefined'; + + /* Must contain four arguments. */ + if (arguments.length !== 4) { + return false; + } + + /* Arguments must be numbers. */ + for (var i = 0; i < 4; ++i) { + if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) { + return false; + } + } + + /* X values must be in the [0, 1] range. */ + mX1 = Math.min(mX1, 1); + mX2 = Math.min(mX2, 1); + mX1 = Math.max(mX1, 0); + mX2 = Math.max(mX2, 0); + var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + function A(aA1, aA2) { + return 1.0 - 3.0 * aA2 + 3.0 * aA1; + } + function B(aA1, aA2) { + return 3.0 * aA2 - 6.0 * aA1; + } + function C(aA1) { + return 3.0 * aA1; + } + function calcBezier(aT, aA1, aA2) { + return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; + } + function getSlope(aT, aA1, aA2) { + return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); + } + function newtonRaphsonIterate(aX, aGuessT) { + for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0.0) { + return aGuessT; + } + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + function calcSampleValues() { + for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) { + mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2); + } + } + function binarySubdivide(aX, aA, aB) { + var currentX, + currentT, + i = 0; + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + function getTForX(aX) { + var intervalStart = 0.0, + currentSample = 1, + lastSample = kSplineTableSize - 1; + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), + guessForT = intervalStart + dist * kSampleStepSize, + initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); + } + } + var _precomputed = false; + function precompute() { + _precomputed = true; + if (mX1 !== mY1 || mX2 !== mY2) { + calcSampleValues(); + } + } + var f = function f(aX) { + if (!_precomputed) { + precompute(); + } + if (mX1 === mY1 && mX2 === mY2) { + return aX; + } + if (aX === 0) { + return 0; + } + if (aX === 1) { + return 1; + } + return calcBezier(getTForX(aX), mY1, mY2); + }; + f.getControlPoints = function () { + return [{ + x: mX1, + y: mY1 + }, { + x: mX2, + y: mY2 + }]; + }; + var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; + f.toString = function () { + return str; + }; + return f; +} + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ +/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass + then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */ +var generateSpringRK4 = function () { + function springAccelerationForState(state) { + return -state.tension * state.x - state.friction * state.v; + } + function springEvaluateStateWithDerivative(initialState, dt, derivative) { + var state = { + x: initialState.x + derivative.dx * dt, + v: initialState.v + derivative.dv * dt, + tension: initialState.tension, + friction: initialState.friction + }; + return { + dx: state.v, + dv: springAccelerationForState(state) + }; + } + function springIntegrateState(state, dt) { + var a = { + dx: state.v, + dv: springAccelerationForState(state) + }, + b = springEvaluateStateWithDerivative(state, dt * 0.5, a), + c = springEvaluateStateWithDerivative(state, dt * 0.5, b), + d = springEvaluateStateWithDerivative(state, dt, c), + dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx), + dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv); + state.x = state.x + dxdt * dt; + state.v = state.v + dvdt * dt; + return state; + } + return function springRK4Factory(tension, friction, duration) { + var initState = { + x: -1, + v: 0, + tension: null, + friction: null + }, + path = [0], + time_lapsed = 0, + tolerance = 1 / 10000, + DT = 16 / 1000, + have_duration, + dt, + last_state; + tension = parseFloat(tension) || 500; + friction = parseFloat(friction) || 20; + duration = duration || null; + initState.tension = tension; + initState.friction = friction; + have_duration = duration !== null; + + /* Calculate the actual time it takes for this animation to complete with the provided conditions. */ + if (have_duration) { + /* Run the simulation without a duration. */ + time_lapsed = springRK4Factory(tension, friction); + /* Compute the adjusted time delta. */ + dt = time_lapsed / duration * DT; + } else { + dt = DT; + } + for (;;) { + /* Next/step function .*/ + last_state = springIntegrateState(last_state || initState, dt); + /* Store the position. */ + path.push(1 + last_state.x); + time_lapsed += 16; + /* If the change threshold is reached, break. */ + if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { + break; + } + } + + /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the + computed path and returns a snapshot of the position according to a given percentComplete. */ + return !have_duration ? time_lapsed : function (percentComplete) { + return path[percentComplete * (path.length - 1) | 0]; + }; + }; +}(); + +var cubicBezier = function cubicBezier(t1, p1, t2, p2) { + var bezier = generateCubicBezier(t1, p1, t2, p2); + return function (start, end, percent) { + return start + (end - start) * bezier(percent); + }; +}; +var easings = { + 'linear': function linear(start, end, percent) { + return start + (end - start) * percent; + }, + // default easings + 'ease': cubicBezier(0.25, 0.1, 0.25, 1), + 'ease-in': cubicBezier(0.42, 0, 1, 1), + 'ease-out': cubicBezier(0, 0, 0.58, 1), + 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), + // sine + 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715), + 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1), + 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95), + // quad + 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53), + 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94), + 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955), + // cubic + 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19), + 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1), + 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1), + // quart + 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22), + 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1), + 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1), + // quint + 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06), + 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1), + 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1), + // expo + 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035), + 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1), + 'ease-in-out-expo': cubicBezier(1, 0, 0, 1), + // circ + 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335), + 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1), + 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86), + // user param easings... + + 'spring': function spring(tension, friction, duration) { + if (duration === 0) { + // can't get a spring w/ duration 0 + return easings.linear; // duration 0 => jump to end so impl doesn't matter + } + + var spring = generateSpringRK4(tension, friction, duration); + return function (start, end, percent) { + return start + (end - start) * spring(percent); + }; + }, + 'cubic-bezier': cubicBezier +}; + +function getEasedValue(type, start, end, percent, easingFn) { + if (percent === 1) { + return end; + } + if (start === end) { + return end; + } + var val = easingFn(start, end, percent); + if (type == null) { + return val; + } + if (type.roundValue || type.color) { + val = Math.round(val); + } + if (type.min !== undefined) { + val = Math.max(val, type.min); + } + if (type.max !== undefined) { + val = Math.min(val, type.max); + } + return val; +} +function getValue(prop, spec) { + if (prop.pfValue != null || prop.value != null) { + if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) { + return prop.pfValue; + } else { + return prop.value; + } + } else { + return prop; + } +} +function ease(startProp, endProp, percent, easingFn, propSpec) { + var type = propSpec != null ? propSpec.type : null; + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + var start = getValue(startProp, propSpec); + var end = getValue(endProp, propSpec); + if (number$1(start) && number$1(end)) { + return getEasedValue(type, start, end, percent, easingFn); + } else if (array(start) && array(end)) { + var easedArr = []; + for (var i = 0; i < end.length; i++) { + var si = start[i]; + var ei = end[i]; + if (si != null && ei != null) { + var val = getEasedValue(type, si, ei, percent, easingFn); + easedArr.push(val); + } else { + easedArr.push(ei); + } + } + return easedArr; + } + return undefined; +} + +function step$1(self, ani, now, isCore) { + var isEles = !isCore; + var _p = self._private; + var ani_p = ani._private; + var pEasing = ani_p.easing; + var startTime = ani_p.startTime; + var cy = isCore ? self : self.cy(); + var style = cy.style(); + if (!ani_p.easingImpl) { + if (pEasing == null) { + // use default + ani_p.easingImpl = easings['linear']; + } else { + // then define w/ name + var easingVals; + if (string(pEasing)) { + var easingProp = style.parse('transition-timing-function', pEasing); + easingVals = easingProp.value; + } else { + // then assume preparsed array + easingVals = pEasing; + } + var name, args; + if (string(easingVals)) { + name = easingVals; + args = []; + } else { + name = easingVals[1]; + args = easingVals.slice(2).map(function (n) { + return +n; + }); + } + if (args.length > 0) { + // create with args + if (name === 'spring') { + args.push(ani_p.duration); // need duration to generate spring + } + + ani_p.easingImpl = easings[name].apply(null, args); + } else { + // static impl by name + ani_p.easingImpl = easings[name]; + } + } + } + var easing = ani_p.easingImpl; + var percent; + if (ani_p.duration === 0) { + percent = 1; + } else { + percent = (now - startTime) / ani_p.duration; + } + if (ani_p.applying) { + percent = ani_p.progress; + } + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + if (ani_p.delay == null) { + // then update + + var startPos = ani_p.startPosition; + var endPos = ani_p.position; + if (endPos && isEles && !self.locked()) { + var newPos = {}; + if (valid(startPos.x, endPos.x)) { + newPos.x = ease(startPos.x, endPos.x, percent, easing); + } + if (valid(startPos.y, endPos.y)) { + newPos.y = ease(startPos.y, endPos.y, percent, easing); + } + self.position(newPos); + } + var startPan = ani_p.startPan; + var endPan = ani_p.pan; + var pan = _p.pan; + var animatingPan = endPan != null && isCore; + if (animatingPan) { + if (valid(startPan.x, endPan.x)) { + pan.x = ease(startPan.x, endPan.x, percent, easing); + } + if (valid(startPan.y, endPan.y)) { + pan.y = ease(startPan.y, endPan.y, percent, easing); + } + self.emit('pan'); + } + var startZoom = ani_p.startZoom; + var endZoom = ani_p.zoom; + var animatingZoom = endZoom != null && isCore; + if (animatingZoom) { + if (valid(startZoom, endZoom)) { + _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom); + } + self.emit('zoom'); + } + if (animatingPan || animatingZoom) { + self.emit('viewport'); + } + var props = ani_p.style; + if (props && props.length > 0 && isEles) { + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var _name = prop.name; + var end = prop; + var start = ani_p.startStyle[_name]; + var propSpec = style.properties[start.name]; + var easedVal = ease(start, end, percent, easing, propSpec); + style.overrideBypass(self, _name, easedVal); + } // for props + + self.emit('style'); + } // if + } + + ani_p.progress = percent; + return percent; +} +function valid(start, end) { + if (start == null || end == null) { + return false; + } + if (number$1(start) && number$1(end)) { + return true; + } else if (start && end) { + return true; + } + return false; +} + +function startAnimation(self, ani, now, isCore) { + var ani_p = ani._private; + ani_p.started = true; + ani_p.startTime = now - ani_p.progress * ani_p.duration; +} + +function stepAll(now, cy) { + var eles = cy._private.aniEles; + var doneEles = []; + function stepOne(ele, isCore) { + var _p = ele._private; + var current = _p.animation.current; + var queue = _p.animation.queue; + var ranAnis = false; + + // if nothing currently animating, get something from the queue + if (current.length === 0) { + var next = queue.shift(); + if (next) { + current.push(next); + } + } + var callbacks = function callbacks(_callbacks) { + for (var j = _callbacks.length - 1; j >= 0; j--) { + var cb = _callbacks[j]; + cb(); + } + _callbacks.splice(0, _callbacks.length); + }; + + // step and remove if done + for (var i = current.length - 1; i >= 0; i--) { + var ani = current[i]; + var ani_p = ani._private; + if (ani_p.stopped) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.frames); + continue; + } + if (!ani_p.playing && !ani_p.applying) { + continue; + } + + // an apply() while playing shouldn't do anything + if (ani_p.playing && ani_p.applying) { + ani_p.applying = false; + } + if (!ani_p.started) { + startAnimation(ele, ani, now); + } + step$1(ele, ani, now, isCore); + if (ani_p.applying) { + ani_p.applying = false; + } + callbacks(ani_p.frames); + if (ani_p.step != null) { + ani_p.step(now); + } + if (ani.completed()) { + current.splice(i, 1); + ani_p.hooked = false; + ani_p.playing = false; + ani_p.started = false; + callbacks(ani_p.completes); + } + ranAnis = true; + } + if (!isCore && current.length === 0 && queue.length === 0) { + doneEles.push(ele); + } + return ranAnis; + } // stepElement + + // handle all eles + var ranEleAni = false; + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + var handledThisEle = stepOne(ele); + ranEleAni = ranEleAni || handledThisEle; + } // each element + + var ranCoreAni = stepOne(cy, true); + + // notify renderer + if (ranEleAni || ranCoreAni) { + if (eles.length > 0) { + cy.notify('draw', eles); + } else { + cy.notify('draw'); + } + } + + // remove elements from list of currently animating if its queues are empty + eles.unmerge(doneEles); + cy.emit('step'); +} // stepAll + +var corefn$8 = { + // pull in animation functions + animate: define.animate(), + animation: define.animation(), + animated: define.animated(), + clearQueue: define.clearQueue(), + delay: define.delay(), + delayAnimation: define.delayAnimation(), + stop: define.stop(), + addToAnimationPool: function addToAnimationPool(eles) { + var cy = this; + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + cy._private.aniEles.merge(eles); + }, + stopAnimationLoop: function stopAnimationLoop() { + this._private.animationsRunning = false; + }, + startAnimationLoop: function startAnimationLoop() { + var cy = this; + cy._private.animationsRunning = true; + if (!cy.styleEnabled()) { + return; + } // save cycles when no style used + + // NB the animation loop will exec in headless environments if style enabled + // and explicit cy.destroy() is necessary to stop the loop + + function headlessStep() { + if (!cy._private.animationsRunning) { + return; + } + requestAnimationFrame(function animationStep(now) { + stepAll(now, cy); + headlessStep(); + }); + } + var renderer = cy.renderer(); + if (renderer && renderer.beforeRender) { + // let the renderer schedule animations + renderer.beforeRender(function rendererAnimationStep(willDraw, now) { + stepAll(now, cy); + }, renderer.beforeRenderPriorities.animations); + } else { + // manage the animation loop ourselves + headlessStep(); // first call + } + } +}; + +var emitterOptions = { + qualifierCompare: function qualifierCompare(selector1, selector2) { + if (selector1 == null || selector2 == null) { + return selector1 == null && selector2 == null; + } else { + return selector1.sameText(selector2); + } + }, + eventMatches: function eventMatches(cy, listener, eventObj) { + var selector = listener.qualifier; + if (selector != null) { + return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target); + } + return true; + }, + addEventFields: function addEventFields(cy, evt) { + evt.cy = cy; + evt.target = cy; + }, + callbackContext: function callbackContext(cy, listener, eventObj) { + return listener.qualifier != null ? eventObj.target : cy; + } +}; +var argSelector = function argSelector(arg) { + if (string(arg)) { + return new Selector(arg); + } else { + return arg; + } +}; +var elesfn = { + createEmitter: function createEmitter() { + var _p = this._private; + if (!_p.emitter) { + _p.emitter = new Emitter(emitterOptions, this); + } + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(events, selector, callback) { + this.emitter().on(events, argSelector(selector), callback); + return this; + }, + removeListener: function removeListener(events, selector, callback) { + this.emitter().removeListener(events, argSelector(selector), callback); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + one: function one(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + once: function once(events, selector, callback) { + this.emitter().one(events, argSelector(selector), callback); + return this; + }, + emit: function emit(events, extraParams) { + this.emitter().emit(events, extraParams); + return this; + }, + emitAndNotify: function emitAndNotify(event, eles) { + this.emit(event); + this.notify(event, eles); + return this; + } +}; +define.eventAliasesOn(elesfn); + +var corefn$7 = { + png: function png(options) { + var renderer = this._private.renderer; + options = options || {}; + return renderer.png(options); + }, + jpg: function jpg(options) { + var renderer = this._private.renderer; + options = options || {}; + options.bg = options.bg || '#fff'; + return renderer.jpg(options); + } +}; +corefn$7.jpeg = corefn$7.jpg; + +var corefn$6 = { + layout: function layout(options) { + var cy = this; + if (options == null) { + error('Layout options must be specified to make a layout'); + return; + } + if (options.name == null) { + error('A `name` must be specified to make a layout'); + return; + } + var name = options.name; + var Layout = cy.extension('layout', name); + if (Layout == null) { + error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?'); + return; + } + var eles; + if (string(options.eles)) { + eles = cy.$(options.eles); + } else { + eles = options.eles != null ? options.eles : cy.$(); + } + var layout = new Layout(extend({}, options, { + cy: cy, + eles: eles + })); + return layout; + } +}; +corefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout; + +var corefn$5 = { + notify: function notify(eventName, eventEles) { + var _p = this._private; + if (this.batching()) { + _p.batchNotifications = _p.batchNotifications || {}; + var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection(); + if (eventEles != null) { + eles.merge(eventEles); + } + return; // notifications are disabled during batching + } + + if (!_p.notificationsEnabled) { + return; + } // exit on disabled + + var renderer = this.renderer(); + + // exit if destroy() called on core or renderer in between frames #1499 #1528 + if (this.destroyed() || !renderer) { + return; + } + renderer.notify(eventName, eventEles); + }, + notifications: function notifications(bool) { + var p = this._private; + if (bool === undefined) { + return p.notificationsEnabled; + } else { + p.notificationsEnabled = bool ? true : false; + } + return this; + }, + noNotifications: function noNotifications(callback) { + this.notifications(false); + callback(); + this.notifications(true); + }, + batching: function batching() { + return this._private.batchCount > 0; + }, + startBatch: function startBatch() { + var _p = this._private; + if (_p.batchCount == null) { + _p.batchCount = 0; + } + if (_p.batchCount === 0) { + _p.batchStyleEles = this.collection(); + _p.batchNotifications = {}; + } + _p.batchCount++; + return this; + }, + endBatch: function endBatch() { + var _p = this._private; + if (_p.batchCount === 0) { + return this; + } + _p.batchCount--; + if (_p.batchCount === 0) { + // update style for dirty eles + _p.batchStyleEles.updateStyle(); + var renderer = this.renderer(); + + // notify the renderer of queued eles and event types + Object.keys(_p.batchNotifications).forEach(function (eventName) { + var eles = _p.batchNotifications[eventName]; + if (eles.empty()) { + renderer.notify(eventName); + } else { + renderer.notify(eventName, eles); + } + }); + } + return this; + }, + batch: function batch(callback) { + this.startBatch(); + callback(); + this.endBatch(); + return this; + }, + // for backwards compatibility + batchData: function batchData(map) { + var cy = this; + return this.batch(function () { + var ids = Object.keys(map); + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + var data = map[id]; + var ele = cy.getElementById(id); + ele.data(data); + } + }); + } +}; + +var rendererDefaults = defaults$g({ + hideEdgesOnViewport: false, + textureOnViewport: false, + motionBlur: false, + motionBlurOpacity: 0.05, + pixelRatio: undefined, + desktopTapThreshold: 4, + touchTapThreshold: 8, + wheelSensitivity: 1, + debug: false, + showFps: false +}); +var corefn$4 = { + renderTo: function renderTo(context, zoom, pan, pxRatio) { + var r = this._private.renderer; + r.renderTo(context, zoom, pan, pxRatio); + return this; + }, + renderer: function renderer() { + return this._private.renderer; + }, + forceRender: function forceRender() { + this.notify('draw'); + return this; + }, + resize: function resize() { + this.invalidateSize(); + this.emitAndNotify('resize'); + return this; + }, + initRenderer: function initRenderer(options) { + var cy = this; + var RendererProto = cy.extension('renderer', options.name); + if (RendererProto == null) { + error("Can not initialise: No such renderer `".concat(options.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); + return; + } + if (options.wheelSensitivity !== undefined) { + warn("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine."); + } + var rOpts = rendererDefaults(options); + rOpts.cy = cy; + cy._private.renderer = new RendererProto(rOpts); + this.notify('init'); + }, + destroyRenderer: function destroyRenderer() { + var cy = this; + cy.notify('destroy'); // destroy the renderer + + var domEle = cy.container(); + if (domEle) { + domEle._cyreg = null; + while (domEle.childNodes.length > 0) { + domEle.removeChild(domEle.childNodes[0]); + } + } + cy._private.renderer = null; // to be extra safe, remove the ref + cy.mutableElements().forEach(function (ele) { + var _p = ele._private; + _p.rscratch = {}; + _p.rstyle = {}; + _p.animation.current = []; + _p.animation.queue = []; + }); + }, + onRender: function onRender(fn) { + return this.on('render', fn); + }, + offRender: function offRender(fn) { + return this.off('render', fn); + } +}; +corefn$4.invalidateDimensions = corefn$4.resize; + +var corefn$3 = { + // get a collection + // - empty collection on no args + // - collection of elements in the graph on selector arg + // - guarantee a returned collection when elements or collection specified + collection: function collection(eles, opts) { + if (string(eles)) { + return this.$(eles); + } else if (elementOrCollection(eles)) { + return eles.collection(); + } else if (array(eles)) { + if (!opts) { + opts = {}; + } + return new Collection(this, eles, opts.unique, opts.removed); + } + return new Collection(this); + }, + nodes: function nodes(selector) { + var nodes = this.$(function (ele) { + return ele.isNode(); + }); + if (selector) { + return nodes.filter(selector); + } + return nodes; + }, + edges: function edges(selector) { + var edges = this.$(function (ele) { + return ele.isEdge(); + }); + if (selector) { + return edges.filter(selector); + } + return edges; + }, + // search the graph like jQuery + $: function $(selector) { + var eles = this._private.elements; + if (selector) { + return eles.filter(selector); + } else { + return eles.spawnSelf(); + } + }, + mutableElements: function mutableElements() { + return this._private.elements; + } +}; + +// aliases +corefn$3.elements = corefn$3.filter = corefn$3.$; + +var styfn$8 = {}; + +// keys for style blocks, e.g. ttfftt +var TRUE = 't'; +var FALSE = 'f'; + +// (potentially expensive calculation) +// apply the style to the element based on +// - its bypass +// - what selectors match it +styfn$8.apply = function (eles) { + var self = this; + var _p = self._private; + var cy = _p.cy; + var updatedEles = cy.collection(); + for (var ie = 0; ie < eles.length; ie++) { + var ele = eles[ie]; + var cxtMeta = self.getContextMeta(ele); + if (cxtMeta.empty) { + continue; + } + var cxtStyle = self.getContextStyle(cxtMeta); + var app = self.applyContextStyle(cxtMeta, cxtStyle, ele); + if (ele._private.appliedInitStyle) { + self.updateTransitions(ele, app.diffProps); + } else { + ele._private.appliedInitStyle = true; + } + var hintsDiff = self.updateStyleHints(ele); + if (hintsDiff) { + updatedEles.push(ele); + } + } // for elements + + return updatedEles; +}; +styfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) { + var self = this; + var cache = self._private.propDiffs = self._private.propDiffs || {}; + var dualCxtKey = oldCxtKey + '-' + newCxtKey; + var cachedVal = cache[dualCxtKey]; + if (cachedVal) { + return cachedVal; + } + var diffProps = []; + var addedProp = {}; + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var oldHasCxt = oldCxtKey[i] === TRUE; + var newHasCxt = newCxtKey[i] === TRUE; + var cxtHasDiffed = oldHasCxt !== newHasCxt; + var cxtHasMappedProps = cxt.mappedProperties.length > 0; + if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) { + var props = void 0; + if (cxtHasDiffed && cxtHasMappedProps) { + props = cxt.properties; // suffices b/c mappedProperties is a subset of properties + } else if (cxtHasDiffed) { + props = cxt.properties; // need to check them all + } else if (cxtHasMappedProps) { + props = cxt.mappedProperties; // only need to check mapped + } + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + var name = prop.name; + + // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter + // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result + // is cached) + var laterCxtOverrides = false; + for (var k = i + 1; k < self.length; k++) { + var laterCxt = self[k]; + var hasLaterCxt = newCxtKey[k] === TRUE; + if (!hasLaterCxt) { + continue; + } // can't override unless the context is active + + laterCxtOverrides = laterCxt.properties[prop.name] != null; + if (laterCxtOverrides) { + break; + } // exit early as long as one later context overrides + } + + if (!addedProp[name] && !laterCxtOverrides) { + addedProp[name] = true; + diffProps.push(name); + } + } // for props + } // if + } // for contexts + + cache[dualCxtKey] = diffProps; + return diffProps; +}; +styfn$8.getContextMeta = function (ele) { + var self = this; + var cxtKey = ''; + var diffProps; + var prevKey = ele._private.styleCxtKey || ''; + + // get the cxt key + for (var i = 0; i < self.length; i++) { + var context = self[i]; + var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core' + + if (contextSelectorMatches) { + cxtKey += TRUE; + } else { + cxtKey += FALSE; + } + } // for context + + diffProps = self.getPropertiesDiff(prevKey, cxtKey); + ele._private.styleCxtKey = cxtKey; + return { + key: cxtKey, + diffPropNames: diffProps, + empty: diffProps.length === 0 + }; +}; + +// gets a computed ele style object based on matched contexts +styfn$8.getContextStyle = function (cxtMeta) { + var cxtKey = cxtMeta.key; + var self = this; + var cxtStyles = this._private.contextStyles = this._private.contextStyles || {}; + + // if already computed style, returned cached copy + if (cxtStyles[cxtKey]) { + return cxtStyles[cxtKey]; + } + var style = { + _private: { + key: cxtKey + } + }; + for (var i = 0; i < self.length; i++) { + var cxt = self[i]; + var hasCxt = cxtKey[i] === TRUE; + if (!hasCxt) { + continue; + } + for (var j = 0; j < cxt.properties.length; j++) { + var prop = cxt.properties[j]; + style[prop.name] = prop; + } + } + cxtStyles[cxtKey] = style; + return style; +}; +styfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) { + var self = this; + var diffProps = cxtMeta.diffPropNames; + var retDiffProps = {}; + var types = self.types; + for (var i = 0; i < diffProps.length; i++) { + var diffPropName = diffProps[i]; + var cxtProp = cxtStyle[diffPropName]; + var eleProp = ele.pstyle(diffPropName); + if (!cxtProp) { + // no context prop means delete + if (!eleProp) { + continue; // no existing prop means nothing needs to be removed + // nb affects initial application on mapped values like control-point-distances + } else if (eleProp.bypass) { + cxtProp = { + name: diffPropName, + deleteBypassed: true + }; + } else { + cxtProp = { + name: diffPropName, + "delete": true + }; + } + } + + // save cycles when the context prop doesn't need to be applied + if (eleProp === cxtProp) { + continue; + } + + // save cycles when a mapped context prop doesn't need to be applied + if (cxtProp.mapped === types.fn // context prop is function mapper + && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one) + && eleProp.mapping != null // ele prop is a concrete value from from a mapper + && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper + ) { + // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet) + var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy + var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss + + if (fnValue === mapping.prevFnValue) { + continue; + } + } + var retDiffProp = retDiffProps[diffPropName] = { + prev: eleProp + }; + self.applyParsedProperty(ele, cxtProp); + retDiffProp.next = ele.pstyle(diffPropName); + if (retDiffProp.next && retDiffProp.next.bypass) { + retDiffProp.next = retDiffProp.next.bypassed; + } + } + return { + diffProps: retDiffProps + }; +}; +styfn$8.updateStyleHints = function (ele) { + var _p = ele._private; + var self = this; + var propNames = self.propertyGroupNames; + var propGrKeys = self.propertyGroupKeys; + var propHash = function propHash(ele, propNames, seedKey) { + return self.getPropertiesHash(ele, propNames, seedKey); + }; + var oldStyleKey = _p.styleKey; + if (ele.removed()) { + return false; + } + var isNode = _p.group === 'nodes'; + + // get the style key hashes per prop group + // but lazily -- only use non-default prop values to reduce the number of hashes + // + + var overriddenStyles = ele._private.style; + propNames = Object.keys(overriddenStyles); + for (var i = 0; i < propGrKeys.length; i++) { + var grKey = propGrKeys[i]; + _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + } + var updateGrKey1 = function updateGrKey1(val, grKey) { + return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]); + }; + var updateGrKey2 = function updateGrKey2(val, grKey) { + return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]); + }; + var updateGrKey = function updateGrKey(val, grKey) { + updateGrKey1(val, grKey); + updateGrKey2(val, grKey); + }; + var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) { + for (var j = 0; j < strVal.length; j++) { + var ch = strVal.charCodeAt(j); + updateGrKey1(ch, grKey); + updateGrKey2(ch, grKey); + } + }; + + // - hashing works on 32 bit ints b/c we use bitwise ops + // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function) + // - raise up small numbers so more significant digits are seen by hashing + // - make small numbers larger than a normal value to avoid collisions + // - works in practice and it's relatively cheap + var N = 2000000000; + var cleanNum = function cleanNum(val) { + return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val; + }; + for (var _i = 0; _i < propNames.length; _i++) { + var name = propNames[_i]; + var parsedProp = overriddenStyles[name]; + if (parsedProp == null) { + continue; + } + var propInfo = this.properties[name]; + var type = propInfo.type; + var _grKey = propInfo.groupKey; + var normalizedNumberVal = void 0; + if (propInfo.hashOverride != null) { + normalizedNumberVal = propInfo.hashOverride(ele, parsedProp); + } else if (parsedProp.pfValue != null) { + normalizedNumberVal = parsedProp.pfValue; + } + + // might not be a number if it allows enums + var numberVal = propInfo.enums == null ? parsedProp.value : null; + var haveNormNum = normalizedNumberVal != null; + var haveUnitedNum = numberVal != null; + var haveNum = haveNormNum || haveUnitedNum; + var units = parsedProp.units; + + // numbers are cheaper to hash than strings + // 1 hash op vs n hash ops (for length n string) + if (type.number && haveNum && !type.multiple) { + var v = haveNormNum ? normalizedNumberVal : numberVal; + updateGrKey(cleanNum(v), _grKey); + if (!haveNormNum && units != null) { + updateGrKeyWStr(units, _grKey); + } + } else { + updateGrKeyWStr(parsedProp.strValue, _grKey); + } + } + + // overall style key + // + + var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]; + for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) { + var _grKey2 = propGrKeys[_i2]; + var grHash = _p.styleKeys[_grKey2]; + hash[0] = hashInt(grHash[0], hash[0]); + hash[1] = hashIntAlt(grHash[1], hash[1]); + } + _p.styleKey = combineHashes(hash[0], hash[1]); + + // label dims + // + + var sk = _p.styleKeys; + _p.labelDimsKey = combineHashesArray(sk.labelDimensions); + var labelKeys = propHash(ele, ['label'], sk.labelDimensions); + _p.labelKey = combineHashesArray(labelKeys); + _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys)); + if (!isNode) { + var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions); + _p.sourceLabelKey = combineHashesArray(sourceLabelKeys); + _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys)); + var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions); + _p.targetLabelKey = combineHashesArray(targetLabelKeys); + _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys)); + } + + // node + // + + if (isNode) { + var _p$styleKeys = _p.styleKeys, + nodeBody = _p$styleKeys.nodeBody, + nodeBorder = _p$styleKeys.nodeBorder, + nodeOutline = _p$styleKeys.nodeOutline, + backgroundImage = _p$styleKeys.backgroundImage, + compound = _p$styleKeys.compound, + pie = _p$styleKeys.pie; + var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie].filter(function (k) { + return k != null; + }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]); + _p.nodeKey = combineHashesArray(nodeKeys); + _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT; + } + return oldStyleKey !== _p.styleKey; +}; +styfn$8.clearStyleHints = function (ele) { + var _p = ele._private; + _p.styleCxtKey = ''; + _p.styleKeys = {}; + _p.styleKey = null; + _p.labelKey = null; + _p.labelStyleKey = null; + _p.sourceLabelKey = null; + _p.sourceLabelStyleKey = null; + _p.targetLabelKey = null; + _p.targetLabelStyleKey = null; + _p.nodeKey = null; + _p.hasPie = null; +}; + +// apply a property to the style (for internal use) +// returns whether application was successful +// +// now, this function flattens the property, and here's how: +// +// for parsedProp:{ bypass: true, deleteBypass: true } +// no property is generated, instead the bypass property in the +// element's style is replaced by what's pointed to by the `bypassed` +// field in the bypass property (i.e. restoring the property the +// bypass was overriding) +// +// for parsedProp:{ mapped: truthy } +// the generated flattenedProp:{ mapping: prop } +// +// for parsedProp:{ bypass: true } +// the generated flattenedProp:{ bypassed: parsedProp } +styfn$8.applyParsedProperty = function (ele, parsedProp) { + var self = this; + var prop = parsedProp; + var style = ele._private.style; + var flatProp; + var types = self.types; + var type = self.properties[prop.name].type; + var propIsBypass = prop.bypass; + var origProp = style[prop.name]; + var origPropIsBypass = origProp && origProp.bypass; + var _p = ele._private; + var flatPropMapping = 'mapping'; + var getVal = function getVal(p) { + if (p == null) { + return null; + } else if (p.pfValue != null) { + return p.pfValue; + } else { + return p.value; + } + }; + var checkTriggers = function checkTriggers() { + var fromVal = getVal(origProp); + var toVal = getVal(prop); + self.checkTriggers(ele, prop.name, fromVal, toVal); + }; + + // edge sanity checks to prevent the client from making serious mistakes + if (parsedProp.name === 'curve-style' && ele.isEdge() && ( + // loops must be bundled beziers + parsedProp.value !== 'bezier' && ele.isLoop() || + // edges connected to compound nodes can not be haystacks + parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) { + prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass); + } + if (prop["delete"]) { + // delete the property and use the default value on falsey value + style[prop.name] = undefined; + checkTriggers(); + return true; + } + if (prop.deleteBypassed) { + // delete the property that the + if (!origProp) { + checkTriggers(); + return true; // can't delete if no prop + } else if (origProp.bypass) { + // delete bypassed + origProp.bypassed = undefined; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypassed + } + } + + // check if we need to delete the current bypass + if (prop.deleteBypass) { + // then this property is just here to indicate we need to delete + if (!origProp) { + checkTriggers(); + return true; // property is already not defined + } else if (origProp.bypass) { + // then replace the bypass property with the original + // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary) + style[prop.name] = origProp.bypassed; + checkTriggers(); + return true; + } else { + return false; // we're unsuccessful deleting the bypass + } + } + + var printMappingErr = function printMappingErr() { + warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined'); + }; + + // put the property in the style objects + switch (prop.mapped) { + // flatten the property if mapped + case types.mapData: + { + // flatten the field (e.g. data.foo.bar) + var fields = prop.field.split('.'); + var fieldVal = _p.data; + for (var i = 0; i < fields.length && fieldVal; i++) { + var field = fields[i]; + fieldVal = fieldVal[field]; + } + if (fieldVal == null) { + printMappingErr(); + return false; + } + var percent; + if (!number$1(fieldVal)) { + // then don't apply and fall back on the existing style + warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)'); + return false; + } else { + var fieldWidth = prop.fieldMax - prop.fieldMin; + if (fieldWidth === 0) { + // safety check -- not strictly necessary as no props of zero range should be passed here + percent = 0; + } else { + percent = (fieldVal - prop.fieldMin) / fieldWidth; + } + } + + // make sure to bound percent value + if (percent < 0) { + percent = 0; + } else if (percent > 1) { + percent = 1; + } + if (type.color) { + var r1 = prop.valueMin[0]; + var r2 = prop.valueMax[0]; + var g1 = prop.valueMin[1]; + var g2 = prop.valueMax[1]; + var b1 = prop.valueMin[2]; + var b2 = prop.valueMax[2]; + var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3]; + var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3]; + var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)]; + flatProp = { + // colours are simple, so just create the flat property instead of expensive string parsing + bypass: prop.bypass, + // we're a bypass if the mapping property is a bypass + name: prop.name, + value: clr, + strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')' + }; + } else if (type.number) { + var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent; + flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping); + } else { + return false; // can only map to colours and numbers + } + + if (!flatProp) { + // if we can't flatten the property, then don't apply the property and fall back on the existing style + printMappingErr(); + return false; + } + flatProp.mapping = prop; // keep a reference to the mapping + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + + // direct mapping + case types.data: + { + // flatten the field (e.g. data.foo.bar) + var _fields = prop.field.split('.'); + var _fieldVal = _p.data; + for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) { + var _field = _fields[_i3]; + _fieldVal = _fieldVal[_field]; + } + if (_fieldVal != null) { + flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping); + } + if (!flatProp) { + // if we can't flatten the property, then don't apply and fall back on the existing style + printMappingErr(); + return false; + } + flatProp.mapping = prop; // keep a reference to the mapping + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + case types.fn: + { + var fn = prop.value; + var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function + + prop.prevFnValue = fnRetVal; + if (fnRetVal == null) { + warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)'); + return false; + } + flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping); + if (!flatProp) { + warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)'); + return false; + } + flatProp.mapping = copy(prop); // keep a reference to the mapping + prop = flatProp; // the flattened (mapped) property is the one we want + + break; + } + case undefined: + break; + // just set the property + + default: + return false; + // not a valid mapping + } + + // if the property is a bypass property, then link the resultant property to the original one + if (propIsBypass) { + if (origPropIsBypass) { + // then this bypass overrides the existing one + prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass + } else { + // then link the orig prop to the new bypass + prop.bypassed = origProp; + } + style[prop.name] = prop; // and set + } else { + // prop is not bypass + if (origPropIsBypass) { + // then keep the orig prop (since it's a bypass) and link to the new prop + origProp.bypassed = prop; + } else { + // then just replace the old prop with the new one + style[prop.name] = prop; + } + } + checkTriggers(); + return true; +}; +styfn$8.cleanElements = function (eles, keepBypasses) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + this.clearStyleHints(ele); + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + if (!keepBypasses) { + ele._private.style = {}; + } else { + var style = ele._private.style; + var propNames = Object.keys(style); + for (var j = 0; j < propNames.length; j++) { + var propName = propNames[j]; + var eleProp = style[propName]; + if (eleProp != null) { + if (eleProp.bypass) { + eleProp.bypassed = null; + } else { + style[propName] = null; + } + } + } + } + } +}; + +// updates the visual style for all elements (useful for manual style modification after init) +styfn$8.update = function () { + var cy = this._private.cy; + var eles = cy.mutableElements(); + eles.updateStyle(); +}; + +// diffProps : { name => { prev, next } } +styfn$8.updateTransitions = function (ele, diffProps) { + var self = this; + var _p = ele._private; + var props = ele.pstyle('transition-property').value; + var duration = ele.pstyle('transition-duration').pfValue; + var delay = ele.pstyle('transition-delay').pfValue; + if (props.length > 0 && duration > 0) { + var style = {}; + + // build up the style to animate towards + var anyPrev = false; + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var styProp = ele.pstyle(prop); + var diffProp = diffProps[prop]; + if (!diffProp) { + continue; + } + var prevProp = diffProp.prev; + var fromProp = prevProp; + var toProp = diffProp.next != null ? diffProp.next : styProp; + var diff = false; + var initVal = void 0; + var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity) + + if (!fromProp) { + continue; + } + + // consider px values + if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) { + diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy + initVal = fromProp.pfValue + initDt * diff; + + // consider numerical values + } else if (number$1(fromProp.value) && number$1(toProp.value)) { + diff = toProp.value - fromProp.value; // nonzero is truthy + initVal = fromProp.value + initDt * diff; + + // consider colour values + } else if (array(fromProp.value) && array(toProp.value)) { + diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2]; + initVal = fromProp.strValue; + } + + // the previous value is good for an animation only if it's different + if (diff) { + style[prop] = toProp.strValue; // to val + this.applyBypass(ele, prop, initVal); // from val + anyPrev = true; + } + } // end if props allow ani + + // can't transition if there's nothing previous to transition from + if (!anyPrev) { + return; + } + _p.transitioning = true; + new Promise$1(function (resolve) { + if (delay > 0) { + ele.delayAnimation(delay).play().promise().then(resolve); + } else { + resolve(); + } + }).then(function () { + return ele.animation({ + style: style, + duration: duration, + easing: ele.pstyle('transition-timing-function').value, + queue: false + }).play().promise(); + }).then(function () { + // if( !isBypass ){ + self.removeBypasses(ele, props); + ele.emitAndNotify('style'); + // } + + _p.transitioning = false; + }); + } else if (_p.transitioning) { + this.removeBypasses(ele, props); + ele.emitAndNotify('style'); + _p.transitioning = false; + } +}; +styfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) { + var prop = this.properties[name]; + var triggerCheck = getTrigger(prop); + if (triggerCheck != null && triggerCheck(fromValue, toValue)) { + onTrigger(prop); + } +}; +styfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) { + var _this = this; + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersZOrder; + }, function () { + _this._private.cy.notify('zorder', ele); + }); +}; +styfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) { + this.checkTrigger(ele, name, fromValue, toValue, function (prop) { + return prop.triggersBounds; + }, function (prop) { + ele.dirtyCompoundBoundsCache(); + ele.dirtyBoundingBoxCache(); + + // if the prop change makes the bb of pll bezier edges invalid, + // then dirty the pll edge bb cache as well + if ( + // only for beziers -- so performance of other edges isn't affected + prop.triggersBoundsOfParallelBeziers && name === 'curve-style' && (fromValue === 'bezier' || toValue === 'bezier')) { + ele.parallelEdges().forEach(function (pllEdge) { + if (pllEdge.isBundledBezier()) { + pllEdge.dirtyBoundingBoxCache(); + } + }); + } + if (prop.triggersBoundsOfConnectedEdges && name === 'display' && (fromValue === 'none' || toValue === 'none')) { + ele.connectedEdges().forEach(function (edge) { + edge.dirtyBoundingBoxCache(); + }); + } + }); +}; +styfn$8.checkTriggers = function (ele, name, fromValue, toValue) { + ele.dirtyStyleCache(); + this.checkZOrderTrigger(ele, name, fromValue, toValue); + this.checkBoundsTrigger(ele, name, fromValue, toValue); +}; + +var styfn$7 = {}; + +// bypasses are applied to an existing style on an element, and just tacked on temporarily +// returns true iff application was successful for at least 1 specified property +styfn$7.applyBypass = function (eles, name, value, updateTransitions) { + var self = this; + var props = []; + var isBypass = true; + + // put all the properties (can specify one or many) in an array after parsing them + if (name === '*' || name === '**') { + // apply to all property names + + if (value !== undefined) { + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var _name = prop.name; + var parsedProp = this.parse(_name, value, true); + if (parsedProp) { + props.push(parsedProp); + } + } + } + } else if (string(name)) { + // then parse the single property + var _parsedProp = this.parse(name, value, true); + if (_parsedProp) { + props.push(_parsedProp); + } + } else if (plainObject(name)) { + // then parse each property + var specifiedProps = name; + updateTransitions = value; + var names = Object.keys(specifiedProps); + for (var _i = 0; _i < names.length; _i++) { + var _name2 = names[_i]; + var _value = specifiedProps[_name2]; + if (_value === undefined) { + // try camel case name too + _value = specifiedProps[dash2camel(_name2)]; + } + if (_value !== undefined) { + var _parsedProp2 = this.parse(_name2, _value, true); + if (_parsedProp2) { + props.push(_parsedProp2); + } + } + } + } else { + // can't do anything without well defined properties + return false; + } + + // we've failed if there are no valid properties + if (props.length === 0) { + return false; + } + + // now, apply the bypass properties on the elements + var ret = false; // return true if at least one succesful bypass applied + for (var _i2 = 0; _i2 < eles.length; _i2++) { + // for each ele + var ele = eles[_i2]; + var diffProps = {}; + var diffProp = void 0; + for (var j = 0; j < props.length; j++) { + // for each prop + var _prop = props[j]; + if (updateTransitions) { + var prevProp = ele.pstyle(_prop.name); + diffProp = diffProps[_prop.name] = { + prev: prevProp + }; + } + ret = this.applyParsedProperty(ele, copy(_prop)) || ret; + if (updateTransitions) { + diffProp.next = ele.pstyle(_prop.name); + } + } // for props + + if (ret) { + this.updateStyleHints(ele); + } + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles + + return ret; +}; + +// only useful in specific cases like animation +styfn$7.overrideBypass = function (eles, name, value) { + name = camel2dash(name); + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var prop = ele._private.style[name]; + var type = this.properties[name].type; + var isColor = type.color; + var isMulti = type.mutiple; + var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value; + if (!prop || !prop.bypass) { + // need a bypass if one doesn't exist + this.applyBypass(ele, name, value); + } else { + prop.value = value; + if (prop.pfValue != null) { + prop.pfValue = value; + } + if (isColor) { + prop.strValue = 'rgb(' + value.join(',') + ')'; + } else if (isMulti) { + prop.strValue = value.join(' '); + } else { + prop.strValue = '' + value; + } + this.updateStyleHints(ele); + } + this.checkTriggers(ele, name, oldValue, value); + } +}; +styfn$7.removeAllBypasses = function (eles, updateTransitions) { + return this.removeBypasses(eles, this.propertyNames, updateTransitions); +}; +styfn$7.removeBypasses = function (eles, props, updateTransitions) { + var isBypass = true; + for (var j = 0; j < eles.length; j++) { + var ele = eles[j]; + var diffProps = {}; + for (var i = 0; i < props.length; i++) { + var name = props[i]; + var prop = this.properties[name]; + var prevProp = ele.pstyle(prop.name); + if (!prevProp || !prevProp.bypass) { + // if a bypass doesn't exist for the prop, nothing needs to be removed + continue; + } + var value = ''; // empty => remove bypass + var parsedProp = this.parse(name, value, true); + var diffProp = diffProps[prop.name] = { + prev: prevProp + }; + this.applyParsedProperty(ele, parsedProp); + diffProp.next = ele.pstyle(prop.name); + } // for props + + this.updateStyleHints(ele); + if (updateTransitions) { + this.updateTransitions(ele, diffProps, isBypass); + } + } // for eles +}; + +var styfn$6 = {}; + +// gets what an em size corresponds to in pixels relative to a dom element +styfn$6.getEmSizeInPixels = function () { + var px = this.containerCss('font-size'); + if (px != null) { + return parseFloat(px); + } else { + return 1; // for headless + } +}; + +// gets css property from the core container +styfn$6.containerCss = function (propName) { + var cy = this._private.cy; + var domElement = cy.container(); + var containerWindow = cy.window(); + if (containerWindow && domElement && containerWindow.getComputedStyle) { + return containerWindow.getComputedStyle(domElement).getPropertyValue(propName); + } +}; + +var styfn$5 = {}; + +// gets the rendered style for an element +styfn$5.getRenderedStyle = function (ele, prop) { + if (prop) { + return this.getStylePropertyValue(ele, prop, true); + } else { + return this.getRawStyle(ele, true); + } +}; + +// gets the raw style for an element +styfn$5.getRawStyle = function (ele, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var rstyle = {}; + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal); + if (val != null) { + rstyle[prop.name] = val; + rstyle[dash2camel(prop.name)] = val; + } + } + return rstyle; + } +}; +styfn$5.getIndexedStyle = function (ele, property, subproperty, index) { + var pstyle = ele.pstyle(property)[subproperty][index]; + return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0]; +}; +styfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) { + var self = this; + ele = ele[0]; // insure it's an element + + if (ele) { + var prop = self.properties[propName]; + if (prop.alias) { + prop = prop.pointsTo; + } + var type = prop.type; + var styleProp = ele.pstyle(prop.name); + if (styleProp) { + var value = styleProp.value, + units = styleProp.units, + strValue = styleProp.strValue; + if (isRenderedVal && type.number && value != null && number$1(value)) { + var zoom = ele.cy().zoom(); + var getRenderedValue = function getRenderedValue(val) { + return val * zoom; + }; + var getValueStringWithUnits = function getValueStringWithUnits(val, units) { + return getRenderedValue(val) + units; + }; + var isArrayValue = array(value); + var haveUnits = isArrayValue ? units.every(function (u) { + return u != null; + }) : units != null; + if (haveUnits) { + if (isArrayValue) { + return value.map(function (v, i) { + return getValueStringWithUnits(v, units[i]); + }).join(' '); + } else { + return getValueStringWithUnits(value, units); + } + } else { + if (isArrayValue) { + return value.map(function (v) { + return string(v) ? v : '' + getRenderedValue(v); + }).join(' '); + } else { + return '' + getRenderedValue(value); + } + } + } else if (strValue != null) { + return strValue; + } + } + return null; + } +}; +styfn$5.getAnimationStartStyle = function (ele, aniProps) { + var rstyle = {}; + for (var i = 0; i < aniProps.length; i++) { + var aniProp = aniProps[i]; + var name = aniProp.name; + var styleProp = ele.pstyle(name); + if (styleProp !== undefined) { + // then make a prop of it + if (plainObject(styleProp)) { + styleProp = this.parse(name, styleProp.strValue); + } else { + styleProp = this.parse(name, styleProp); + } + } + if (styleProp) { + rstyle[name] = styleProp; + } + } + return rstyle; +}; +styfn$5.getPropsList = function (propsObj) { + var self = this; + var rstyle = []; + var style = propsObj; + var props = self.properties; + if (style) { + var names = Object.keys(style); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + var val = style[name]; + var prop = props[name] || props[camel2dash(name)]; + var styleProp = this.parse(prop.name, val); + if (styleProp) { + rstyle.push(styleProp); + } + } + } + return rstyle; +}; +styfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) { + var hash = seed.slice(); + var name, val, strVal, chVal; + var i, j; + for (i = 0; i < propNames.length; i++) { + name = propNames[i]; + val = ele.pstyle(name, false); + if (val == null) { + continue; + } else if (val.pfValue != null) { + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } else { + strVal = val.strValue; + for (j = 0; j < strVal.length; j++) { + chVal = strVal.charCodeAt(j); + hash[0] = hashInt(chVal, hash[0]); + hash[1] = hashIntAlt(chVal, hash[1]); + } + } + } + return hash; +}; +styfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash; + +var styfn$4 = {}; +styfn$4.appendFromJson = function (json) { + var style = this; + for (var i = 0; i < json.length; i++) { + var context = json[i]; + var selector = context.selector; + var props = context.style || context.css; + var names = Object.keys(props); + style.selector(selector); // apply selector + + for (var j = 0; j < names.length; j++) { + var name = names[j]; + var value = props[name]; + style.css(name, value); // apply property + } + } + + return style; +}; + +// accessible cy.style() function +styfn$4.fromJson = function (json) { + var style = this; + style.resetToDefault(); + style.appendFromJson(json); + return style; +}; + +// get json from cy.style() api +styfn$4.json = function () { + var json = []; + for (var i = this.defaultLength; i < this.length; i++) { + var cxt = this[i]; + var selector = cxt.selector; + var props = cxt.properties; + var css = {}; + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + css[prop.name] = prop.strValue; + } + json.push({ + selector: !selector ? 'core' : selector.toString(), + style: css + }); + } + return json; +}; + +var styfn$3 = {}; +styfn$3.appendFromString = function (string) { + var self = this; + var style = this; + var remaining = '' + string; + var selAndBlockStr; + var blockRem; + var propAndValStr; + + // remove comments from the style string + remaining = remaining.replace(/[/][*](\s|.)+?[*][/]/g, ''); + function removeSelAndBlockFromRemaining() { + // remove the parsed selector and block from the remaining text to parse + if (remaining.length > selAndBlockStr.length) { + remaining = remaining.substr(selAndBlockStr.length); + } else { + remaining = ''; + } + } + function removePropAndValFromRem() { + // remove the parsed property and value from the remaining block text to parse + if (blockRem.length > propAndValStr.length) { + blockRem = blockRem.substr(propAndValStr.length); + } else { + blockRem = ''; + } + } + for (;;) { + var nothingLeftToParse = remaining.match(/^\s*$/); + if (nothingLeftToParse) { + break; + } + var selAndBlock = remaining.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); + if (!selAndBlock) { + warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining); + break; + } + selAndBlockStr = selAndBlock[0]; + + // parse the selector + var selectorStr = selAndBlock[1]; + if (selectorStr !== 'core') { + var selector = new Selector(selectorStr); + if (selector.invalid) { + warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr); + + // skip this selector and block + removeSelAndBlockFromRemaining(); + continue; + } + } + + // parse the block of properties and values + var blockStr = selAndBlock[2]; + var invalidBlock = false; + blockRem = blockStr; + var props = []; + for (;;) { + var _nothingLeftToParse = blockRem.match(/^\s*$/); + if (_nothingLeftToParse) { + break; + } + var propAndVal = blockRem.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/); + if (!propAndVal) { + warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr); + invalidBlock = true; + break; + } + propAndValStr = propAndVal[0]; + var propStr = propAndVal[1]; + var valStr = propAndVal[2]; + var prop = self.properties[propStr]; + if (!prop) { + warn('Skipping property: Invalid property name in: ' + propAndValStr); + + // skip this property in the block + removePropAndValFromRem(); + continue; + } + var parsedProp = style.parse(propStr, valStr); + if (!parsedProp) { + warn('Skipping property: Invalid property definition in: ' + propAndValStr); + + // skip this property in the block + removePropAndValFromRem(); + continue; + } + props.push({ + name: propStr, + val: valStr + }); + removePropAndValFromRem(); + } + if (invalidBlock) { + removeSelAndBlockFromRemaining(); + break; + } + + // put the parsed block in the style + style.selector(selectorStr); + for (var i = 0; i < props.length; i++) { + var _prop = props[i]; + style.css(_prop.name, _prop.val); + } + removeSelAndBlockFromRemaining(); + } + return style; +}; +styfn$3.fromString = function (string) { + var style = this; + style.resetToDefault(); + style.appendFromString(string); + return style; +}; + +var styfn$2 = {}; +(function () { + var number$1 = number; + var rgba = rgbaNoBackRefs; + var hsla = hslaNoBackRefs; + var hex3$1 = hex3; + var hex6$1 = hex6; + var data = function data(prefix) { + return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; + }; + var mapData = function mapData(prefix) { + var mapArg = number$1 + '|\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1; + return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number$1 + ')\\s*\\,\\s*(' + number$1 + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$'; + }; + var urlRegexes = ['^url\\s*\\(\\s*[\'"]?(.+?)[\'"]?\\s*\\)$', '^(none)$', '^(.+)$']; + + // each visual style property has a type and needs to be validated according to it + styfn$2.types = { + time: { + number: true, + min: 0, + units: 's|ms', + implicitUnits: 'ms' + }, + percent: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%' + }, + percentages: { + number: true, + min: 0, + max: 100, + units: '%', + implicitUnits: '%', + multiple: true + }, + zeroOneNumber: { + number: true, + min: 0, + max: 1, + unitless: true + }, + zeroOneNumbers: { + number: true, + min: 0, + max: 1, + unitless: true, + multiple: true + }, + nOneOneNumber: { + number: true, + min: -1, + max: 1, + unitless: true + }, + nonNegativeInt: { + number: true, + min: 0, + integer: true, + unitless: true + }, + nonNegativeNumber: { + number: true, + min: 0, + unitless: true + }, + position: { + enums: ['parent', 'origin'] + }, + nodeSize: { + number: true, + min: 0, + enums: ['label'] + }, + number: { + number: true, + unitless: true + }, + numbers: { + number: true, + unitless: true, + multiple: true + }, + positiveNumber: { + number: true, + unitless: true, + min: 0, + strictMin: true + }, + size: { + number: true, + min: 0 + }, + bidirectionalSize: { + number: true + }, + // allows negative + bidirectionalSizeMaybePercent: { + number: true, + allowPercent: true + }, + // allows negative + bidirectionalSizes: { + number: true, + multiple: true + }, + // allows negative + sizeMaybePercent: { + number: true, + min: 0, + allowPercent: true + }, + axisDirection: { + enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto'] + }, + paddingRelativeTo: { + enums: ['width', 'height', 'average', 'min', 'max'] + }, + bgWH: { + number: true, + min: 0, + allowPercent: true, + enums: ['auto'], + multiple: true + }, + bgPos: { + number: true, + allowPercent: true, + multiple: true + }, + bgRelativeTo: { + enums: ['inner', 'include-padding'], + multiple: true + }, + bgRepeat: { + enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'], + multiple: true + }, + bgFit: { + enums: ['none', 'contain', 'cover'], + multiple: true + }, + bgCrossOrigin: { + enums: ['anonymous', 'use-credentials', 'null'], + multiple: true + }, + bgClip: { + enums: ['none', 'node'], + multiple: true + }, + bgContainment: { + enums: ['inside', 'over'], + multiple: true + }, + color: { + color: true + }, + colors: { + color: true, + multiple: true + }, + fill: { + enums: ['solid', 'linear-gradient', 'radial-gradient'] + }, + bool: { + enums: ['yes', 'no'] + }, + bools: { + enums: ['yes', 'no'], + multiple: true + }, + lineStyle: { + enums: ['solid', 'dotted', 'dashed'] + }, + lineCap: { + enums: ['butt', 'round', 'square'] + }, + borderStyle: { + enums: ['solid', 'dotted', 'dashed', 'double'] + }, + curveStyle: { + enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi'] + }, + fontFamily: { + regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' + }, + fontStyle: { + enums: ['italic', 'normal', 'oblique'] + }, + fontWeight: { + enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900] + }, + textDecoration: { + enums: ['none', 'underline', 'overline', 'line-through'] + }, + textTransform: { + enums: ['none', 'uppercase', 'lowercase'] + }, + textWrap: { + enums: ['none', 'wrap', 'ellipsis'] + }, + textOverflowWrap: { + enums: ['whitespace', 'anywhere'] + }, + textBackgroundShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle'] + }, + nodeShape: { + enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon'] + }, + overlayShape: { + enums: ['roundrectangle', 'round-rectangle', 'ellipse'] + }, + compoundIncludeLabels: { + enums: ['include', 'exclude'] + }, + arrowShape: { + enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none'] + }, + arrowFill: { + enums: ['filled', 'hollow'] + }, + arrowWidth: { + number: true, + units: '%|px|em', + implicitUnits: 'px', + enums: ['match-line'] + }, + display: { + enums: ['element', 'none'] + }, + visibility: { + enums: ['hidden', 'visible'] + }, + zCompoundDepth: { + enums: ['bottom', 'orphan', 'auto', 'top'] + }, + zIndexCompare: { + enums: ['auto', 'manual'] + }, + valign: { + enums: ['top', 'center', 'bottom'] + }, + halign: { + enums: ['left', 'center', 'right'] + }, + justification: { + enums: ['left', 'center', 'right', 'auto'] + }, + text: { + string: true + }, + data: { + mapping: true, + regex: data('data') + }, + layoutData: { + mapping: true, + regex: data('layoutData') + }, + scratch: { + mapping: true, + regex: data('scratch') + }, + mapData: { + mapping: true, + regex: mapData('mapData') + }, + mapLayoutData: { + mapping: true, + regex: mapData('mapLayoutData') + }, + mapScratch: { + mapping: true, + regex: mapData('mapScratch') + }, + fn: { + mapping: true, + fn: true + }, + url: { + regexes: urlRegexes, + singleRegexMatchValue: true + }, + urls: { + regexes: urlRegexes, + singleRegexMatchValue: true, + multiple: true + }, + propList: { + propList: true + }, + angle: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad' + }, + textRotation: { + number: true, + units: 'deg|rad', + implicitUnits: 'rad', + enums: ['none', 'autorotate'] + }, + polygonPointList: { + number: true, + multiple: true, + evenMultiple: true, + min: -1, + max: 1, + unitless: true + }, + edgeDistances: { + enums: ['intersection', 'node-position', 'endpoints'] + }, + edgeEndpoint: { + number: true, + multiple: true, + units: '%|px|em|deg|rad', + implicitUnits: 'px', + enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'], + singleEnum: true, + validate: function validate(valArr, unitsArr) { + switch (valArr.length) { + case 2: + // can be % or px only + return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad'; + case 1: + // can be enum, deg, or rad only + return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad'; + default: + return false; + } + } + }, + easing: { + regexes: ['^(spring)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$', '^(cubic-bezier)\\s*\\(\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*,\\s*(' + number$1 + ')\\s*\\)$'], + enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'] + }, + gradientDirection: { + enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order + ] + }, + + boundsExpansion: { + number: true, + multiple: true, + min: 0, + validate: function validate(valArr) { + var length = valArr.length; + return length === 1 || length === 2 || length === 4; + } + } + }; + var diff = { + zeroNonZero: function zeroNonZero(val1, val2) { + if ((val1 == null || val2 == null) && val1 !== val2) { + return true; // null cases could represent any value + } + if (val1 == 0 && val2 != 0) { + return true; + } else if (val1 != 0 && val2 == 0) { + return true; + } else { + return false; + } + }, + any: function any(val1, val2) { + return val1 != val2; + }, + emptyNonEmpty: function emptyNonEmpty(str1, str2) { + var empty1 = emptyString(str1); + var empty2 = emptyString(str2); + return empty1 && !empty2 || !empty1 && empty2; + } + }; + + // define visual style properties + // + // - n.b. adding a new group of props may require updates to updateStyleHints() + // - adding new props to an existing group gets handled automatically + + var t = styfn$2.types; + var mainLabel = [{ + name: 'label', + type: t.text, + triggersBounds: diff.any, + triggersZOrder: diff.emptyNonEmpty + }, { + name: 'text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }]; + var sourceLabel = [{ + name: 'source-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'source-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'source-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'source-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var targetLabel = [{ + name: 'target-label', + type: t.text, + triggersBounds: diff.any + }, { + name: 'target-text-rotation', + type: t.textRotation, + triggersBounds: diff.any + }, { + name: 'target-text-margin-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-margin-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'target-text-offset', + type: t.size, + triggersBounds: diff.any + }]; + var labelDimensions = [{ + name: 'font-family', + type: t.fontFamily, + triggersBounds: diff.any + }, { + name: 'font-style', + type: t.fontStyle, + triggersBounds: diff.any + }, { + name: 'font-weight', + type: t.fontWeight, + triggersBounds: diff.any + }, { + name: 'font-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-transform', + type: t.textTransform, + triggersBounds: diff.any + }, { + name: 'text-wrap', + type: t.textWrap, + triggersBounds: diff.any + }, { + name: 'text-overflow-wrap', + type: t.textOverflowWrap, + triggersBounds: diff.any + }, { + name: 'text-max-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'line-height', + type: t.positiveNumber, + triggersBounds: diff.any + }]; + var commonLabel = [{ + name: 'text-valign', + type: t.valign, + triggersBounds: diff.any + }, { + name: 'text-halign', + type: t.halign, + triggersBounds: diff.any + }, { + name: 'color', + type: t.color + }, { + name: 'text-outline-color', + type: t.color + }, { + name: 'text-outline-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-color', + type: t.color + }, { + name: 'text-background-opacity', + type: t.zeroOneNumber + }, { + name: 'text-background-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-opacity', + type: t.zeroOneNumber + }, { + name: 'text-border-color', + type: t.color + }, { + name: 'text-border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'text-border-style', + type: t.borderStyle, + triggersBounds: diff.any + }, { + name: 'text-background-shape', + type: t.textBackgroundShape, + triggersBounds: diff.any + }, { + name: 'text-justification', + type: t.justification + }]; + var behavior = [{ + name: 'events', + type: t.bool, + triggersZOrder: diff.any + }, { + name: 'text-events', + type: t.bool, + triggersZOrder: diff.any + }]; + var visibility = [{ + name: 'display', + type: t.display, + triggersZOrder: diff.any, + triggersBounds: diff.any, + triggersBoundsOfConnectedEdges: true + }, { + name: 'visibility', + type: t.visibility, + triggersZOrder: diff.any + }, { + name: 'opacity', + type: t.zeroOneNumber, + triggersZOrder: diff.zeroNonZero + }, { + name: 'text-opacity', + type: t.zeroOneNumber + }, { + name: 'min-zoomed-font-size', + type: t.size + }, { + name: 'z-compound-depth', + type: t.zCompoundDepth, + triggersZOrder: diff.any + }, { + name: 'z-index-compare', + type: t.zIndexCompare, + triggersZOrder: diff.any + }, { + name: 'z-index', + type: t.number, + triggersZOrder: diff.any + }]; + var overlay = [{ + name: 'overlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'overlay-color', + type: t.color + }, { + name: 'overlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'overlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var underlay = [{ + name: 'underlay-padding', + type: t.size, + triggersBounds: diff.any + }, { + name: 'underlay-color', + type: t.color + }, { + name: 'underlay-opacity', + type: t.zeroOneNumber, + triggersBounds: diff.zeroNonZero + }, { + name: 'underlay-shape', + type: t.overlayShape, + triggersBounds: diff.any + }]; + var transition = [{ + name: 'transition-property', + type: t.propList + }, { + name: 'transition-duration', + type: t.time + }, { + name: 'transition-delay', + type: t.time + }, { + name: 'transition-timing-function', + type: t.easing + }]; + var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) { + if (parsedProp.value === 'label') { + return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway) + } else { + return parsedProp.pfValue; + } + }; + var nodeBody = [{ + name: 'height', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'width', + type: t.nodeSize, + triggersBounds: diff.any, + hashOverride: nodeSizeHashOverride + }, { + name: 'shape', + type: t.nodeShape, + triggersBounds: diff.any + }, { + name: 'shape-polygon-points', + type: t.polygonPointList, + triggersBounds: diff.any + }, { + name: 'background-color', + type: t.color + }, { + name: 'background-fill', + type: t.fill + }, { + name: 'background-opacity', + type: t.zeroOneNumber + }, { + name: 'background-blacken', + type: t.nOneOneNumber + }, { + name: 'background-gradient-stop-colors', + type: t.colors + }, { + name: 'background-gradient-stop-positions', + type: t.percentages + }, { + name: 'background-gradient-direction', + type: t.gradientDirection + }, { + name: 'padding', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'padding-relative-to', + type: t.paddingRelativeTo, + triggersBounds: diff.any + }, { + name: 'bounds-expansion', + type: t.boundsExpansion, + triggersBounds: diff.any + }]; + var nodeBorder = [{ + name: 'border-color', + type: t.color + }, { + name: 'border-opacity', + type: t.zeroOneNumber + }, { + name: 'border-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'border-style', + type: t.borderStyle + }]; + var nodeOutline = [{ + name: 'outline-color', + type: t.color + }, { + name: 'outline-opacity', + type: t.zeroOneNumber + }, { + name: 'outline-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'outline-style', + type: t.borderStyle + }, { + name: 'outline-offset', + type: t.size, + triggersBounds: diff.any + }]; + var backgroundImage = [{ + name: 'background-image', + type: t.urls + }, { + name: 'background-image-crossorigin', + type: t.bgCrossOrigin + }, { + name: 'background-image-opacity', + type: t.zeroOneNumbers + }, { + name: 'background-image-containment', + type: t.bgContainment + }, { + name: 'background-image-smoothing', + type: t.bools + }, { + name: 'background-position-x', + type: t.bgPos + }, { + name: 'background-position-y', + type: t.bgPos + }, { + name: 'background-width-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-height-relative-to', + type: t.bgRelativeTo + }, { + name: 'background-repeat', + type: t.bgRepeat + }, { + name: 'background-fit', + type: t.bgFit + }, { + name: 'background-clip', + type: t.bgClip + }, { + name: 'background-width', + type: t.bgWH + }, { + name: 'background-height', + type: t.bgWH + }, { + name: 'background-offset-x', + type: t.bgPos + }, { + name: 'background-offset-y', + type: t.bgPos + }]; + var compound = [{ + name: 'position', + type: t.position, + triggersBounds: diff.any + }, { + name: 'compound-sizing-wrt-labels', + type: t.compoundIncludeLabels, + triggersBounds: diff.any + }, { + name: 'min-width', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-width-bias-left', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-width-bias-right', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height', + type: t.size, + triggersBounds: diff.any + }, { + name: 'min-height-bias-top', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'min-height-bias-bottom', + type: t.sizeMaybePercent, + triggersBounds: diff.any + }]; + var edgeLine = [{ + name: 'line-style', + type: t.lineStyle + }, { + name: 'line-color', + type: t.color + }, { + name: 'line-fill', + type: t.fill + }, { + name: 'line-cap', + type: t.lineCap + }, { + name: 'line-opacity', + type: t.zeroOneNumber + }, { + name: 'line-dash-pattern', + type: t.numbers + }, { + name: 'line-dash-offset', + type: t.number + }, { + name: 'line-gradient-stop-colors', + type: t.colors + }, { + name: 'line-gradient-stop-positions', + type: t.percentages + }, { + name: 'curve-style', + type: t.curveStyle, + triggersBounds: diff.any, + triggersBoundsOfParallelBeziers: true + }, { + name: 'haystack-radius', + type: t.zeroOneNumber, + triggersBounds: diff.any + }, { + name: 'source-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'target-endpoint', + type: t.edgeEndpoint, + triggersBounds: diff.any + }, { + name: 'control-point-step-size', + type: t.size, + triggersBounds: diff.any + }, { + name: 'control-point-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'control-point-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'segment-distances', + type: t.bidirectionalSizes, + triggersBounds: diff.any + }, { + name: 'segment-weights', + type: t.numbers, + triggersBounds: diff.any + }, { + name: 'taxi-turn', + type: t.bidirectionalSizeMaybePercent, + triggersBounds: diff.any + }, { + name: 'taxi-turn-min-distance', + type: t.size, + triggersBounds: diff.any + }, { + name: 'taxi-direction', + type: t.axisDirection, + triggersBounds: diff.any + }, { + name: 'edge-distances', + type: t.edgeDistances, + triggersBounds: diff.any + }, { + name: 'arrow-scale', + type: t.positiveNumber, + triggersBounds: diff.any + }, { + name: 'loop-direction', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'loop-sweep', + type: t.angle, + triggersBounds: diff.any + }, { + name: 'source-distance-from-node', + type: t.size, + triggersBounds: diff.any + }, { + name: 'target-distance-from-node', + type: t.size, + triggersBounds: diff.any + }]; + var ghost = [{ + name: 'ghost', + type: t.bool, + triggersBounds: diff.any + }, { + name: 'ghost-offset-x', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-offset-y', + type: t.bidirectionalSize, + triggersBounds: diff.any + }, { + name: 'ghost-opacity', + type: t.zeroOneNumber + }]; + var core = [{ + name: 'selection-box-color', + type: t.color + }, { + name: 'selection-box-opacity', + type: t.zeroOneNumber + }, { + name: 'selection-box-border-color', + type: t.color + }, { + name: 'selection-box-border-width', + type: t.size + }, { + name: 'active-bg-color', + type: t.color + }, { + name: 'active-bg-opacity', + type: t.zeroOneNumber + }, { + name: 'active-bg-size', + type: t.size + }, { + name: 'outside-texture-bg-color', + type: t.color + }, { + name: 'outside-texture-bg-opacity', + type: t.zeroOneNumber + }]; + + // pie backgrounds for nodes + var pie = []; + styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use) + pie.push({ + name: 'pie-size', + type: t.sizeMaybePercent + }); + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + pie.push({ + name: 'pie-' + i + '-background-color', + type: t.color + }); + pie.push({ + name: 'pie-' + i + '-background-size', + type: t.percent + }); + pie.push({ + name: 'pie-' + i + '-background-opacity', + type: t.zeroOneNumber + }); + } + + // edge arrows + var edgeArrow = []; + var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target']; + [{ + name: 'arrow-shape', + type: t.arrowShape, + triggersBounds: diff.any + }, { + name: 'arrow-color', + type: t.color + }, { + name: 'arrow-fill', + type: t.arrowFill + }, { + name: 'arrow-width', + type: t.arrowWidth + }].forEach(function (prop) { + arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var type = prop.type, + triggersBounds = prop.triggersBounds; + edgeArrow.push({ + name: name, + type: type, + triggersBounds: triggersBounds + }); + }); + }, {}); + var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, nodeOutline, backgroundImage, pie, compound, edgeLine, edgeArrow, core); + var propGroups = styfn$2.propertyGroups = { + // common to all eles + behavior: behavior, + transition: transition, + visibility: visibility, + overlay: overlay, + underlay: underlay, + ghost: ghost, + // labels + commonLabel: commonLabel, + labelDimensions: labelDimensions, + mainLabel: mainLabel, + sourceLabel: sourceLabel, + targetLabel: targetLabel, + // node props + nodeBody: nodeBody, + nodeBorder: nodeBorder, + nodeOutline: nodeOutline, + backgroundImage: backgroundImage, + pie: pie, + compound: compound, + // edge props + edgeLine: edgeLine, + edgeArrow: edgeArrow, + core: core + }; + var propGroupNames = styfn$2.propertyGroupNames = {}; + var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups); + propGroupKeys.forEach(function (key) { + propGroupNames[key] = propGroups[key].map(function (prop) { + return prop.name; + }); + propGroups[key].forEach(function (prop) { + return prop.groupKey = key; + }); + }); + + // define aliases + var aliases = styfn$2.aliases = [{ + name: 'content', + pointsTo: 'label' + }, { + name: 'control-point-distance', + pointsTo: 'control-point-distances' + }, { + name: 'control-point-weight', + pointsTo: 'control-point-weights' + }, { + name: 'edge-text-rotation', + pointsTo: 'text-rotation' + }, { + name: 'padding-left', + pointsTo: 'padding' + }, { + name: 'padding-right', + pointsTo: 'padding' + }, { + name: 'padding-top', + pointsTo: 'padding' + }, { + name: 'padding-bottom', + pointsTo: 'padding' + }]; + + // list of property names + styfn$2.propertyNames = props.map(function (p) { + return p.name; + }); + + // allow access of properties by name ( e.g. style.properties.height ) + for (var _i = 0; _i < props.length; _i++) { + var prop = props[_i]; + props[prop.name] = prop; // allow lookup by name + } + + // map aliases + for (var _i2 = 0; _i2 < aliases.length; _i2++) { + var alias = aliases[_i2]; + var pointsToProp = props[alias.pointsTo]; + var aliasProp = { + name: alias.name, + alias: true, + pointsTo: pointsToProp + }; + + // add alias prop for parsing + props.push(aliasProp); + props[alias.name] = aliasProp; // allow lookup by name + } +})(); + +styfn$2.getDefaultProperty = function (name) { + return this.getDefaultProperties()[name]; +}; +styfn$2.getDefaultProperties = function () { + var _p = this._private; + if (_p.defaultProperties != null) { + return _p.defaultProperties; + } + var rawProps = extend({ + // core props + 'selection-box-color': '#ddd', + 'selection-box-opacity': 0.65, + 'selection-box-border-color': '#aaa', + 'selection-box-border-width': 1, + 'active-bg-color': 'black', + 'active-bg-opacity': 0.15, + 'active-bg-size': 30, + 'outside-texture-bg-color': '#000', + 'outside-texture-bg-opacity': 0.125, + // common node/edge props + 'events': 'yes', + 'text-events': 'no', + 'text-valign': 'top', + 'text-halign': 'center', + 'text-justification': 'auto', + 'line-height': 1, + 'color': '#000', + 'text-outline-color': '#000', + 'text-outline-width': 0, + 'text-outline-opacity': 1, + 'text-opacity': 1, + 'text-decoration': 'none', + 'text-transform': 'none', + 'text-wrap': 'none', + 'text-overflow-wrap': 'whitespace', + 'text-max-width': 9999, + 'text-background-color': '#000', + 'text-background-opacity': 0, + 'text-background-shape': 'rectangle', + 'text-background-padding': 0, + 'text-border-opacity': 0, + 'text-border-width': 0, + 'text-border-style': 'solid', + 'text-border-color': '#000', + 'font-family': 'Helvetica Neue, Helvetica, sans-serif', + 'font-style': 'normal', + 'font-weight': 'normal', + 'font-size': 16, + 'min-zoomed-font-size': 0, + 'text-rotation': 'none', + 'source-text-rotation': 'none', + 'target-text-rotation': 'none', + 'visibility': 'visible', + 'display': 'element', + 'opacity': 1, + 'z-compound-depth': 'auto', + 'z-index-compare': 'auto', + 'z-index': 0, + 'label': '', + 'text-margin-x': 0, + 'text-margin-y': 0, + 'source-label': '', + 'source-text-offset': 0, + 'source-text-margin-x': 0, + 'source-text-margin-y': 0, + 'target-label': '', + 'target-text-offset': 0, + 'target-text-margin-x': 0, + 'target-text-margin-y': 0, + 'overlay-opacity': 0, + 'overlay-color': '#000', + 'overlay-padding': 10, + 'overlay-shape': 'round-rectangle', + 'underlay-opacity': 0, + 'underlay-color': '#000', + 'underlay-padding': 10, + 'underlay-shape': 'round-rectangle', + 'transition-property': 'none', + 'transition-duration': 0, + 'transition-delay': 0, + 'transition-timing-function': 'linear', + // node props + 'background-blacken': 0, + 'background-color': '#999', + 'background-fill': 'solid', + 'background-opacity': 1, + 'background-image': 'none', + 'background-image-crossorigin': 'anonymous', + 'background-image-opacity': 1, + 'background-image-containment': 'inside', + 'background-image-smoothing': 'yes', + 'background-position-x': '50%', + 'background-position-y': '50%', + 'background-offset-x': 0, + 'background-offset-y': 0, + 'background-width-relative-to': 'include-padding', + 'background-height-relative-to': 'include-padding', + 'background-repeat': 'no-repeat', + 'background-fit': 'none', + 'background-clip': 'node', + 'background-width': 'auto', + 'background-height': 'auto', + 'border-color': '#000', + 'border-opacity': 1, + 'border-width': 0, + 'border-style': 'solid', + 'outline-color': '#999', + 'outline-opacity': 1, + 'outline-width': 0, + 'outline-offset': 0, + 'outline-style': 'solid', + 'height': 30, + 'width': 30, + 'shape': 'ellipse', + 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1', + 'bounds-expansion': 0, + // node gradient + 'background-gradient-direction': 'to-bottom', + 'background-gradient-stop-colors': '#999', + 'background-gradient-stop-positions': '0%', + // ghost props + 'ghost': 'no', + 'ghost-offset-y': 0, + 'ghost-offset-x': 0, + 'ghost-opacity': 0, + // compound props + 'padding': 0, + 'padding-relative-to': 'width', + 'position': 'origin', + 'compound-sizing-wrt-labels': 'include', + 'min-width': 0, + 'min-width-bias-left': 0, + 'min-width-bias-right': 0, + 'min-height': 0, + 'min-height-bias-top': 0, + 'min-height-bias-bottom': 0 + }, { + // node pie bg + 'pie-size': '100%' + }, [{ + name: 'pie-{{i}}-background-color', + value: 'black' + }, { + name: 'pie-{{i}}-background-size', + value: '0%' + }, { + name: 'pie-{{i}}-background-opacity', + value: 1 + }].reduce(function (css, prop) { + for (var i = 1; i <= styfn$2.pieBackgroundN; i++) { + var name = prop.name.replace('{{i}}', i); + var val = prop.value; + css[name] = val; + } + return css; + }, {}), { + // edge props + 'line-style': 'solid', + 'line-color': '#999', + 'line-fill': 'solid', + 'line-cap': 'butt', + 'line-opacity': 1, + 'line-gradient-stop-colors': '#999', + 'line-gradient-stop-positions': '0%', + 'control-point-step-size': 40, + 'control-point-weights': 0.5, + 'segment-weights': 0.5, + 'segment-distances': 20, + 'taxi-turn': '50%', + 'taxi-turn-min-distance': 10, + 'taxi-direction': 'auto', + 'edge-distances': 'intersection', + 'curve-style': 'haystack', + 'haystack-radius': 0, + 'arrow-scale': 1, + 'loop-direction': '-45deg', + 'loop-sweep': '-90deg', + 'source-distance-from-node': 0, + 'target-distance-from-node': 0, + 'source-endpoint': 'outside-to-node', + 'target-endpoint': 'outside-to-node', + 'line-dash-pattern': [6, 3], + 'line-dash-offset': 0 + }, [{ + name: 'arrow-shape', + value: 'none' + }, { + name: 'arrow-color', + value: '#999' + }, { + name: 'arrow-fill', + value: 'filled' + }, { + name: 'arrow-width', + value: 1 + }].reduce(function (css, prop) { + styfn$2.arrowPrefixes.forEach(function (prefix) { + var name = prefix + '-' + prop.name; + var val = prop.value; + css[name] = val; + }); + return css; + }, {})); + var parsedProps = {}; + for (var i = 0; i < this.properties.length; i++) { + var prop = this.properties[i]; + if (prop.pointsTo) { + continue; + } + var name = prop.name; + var val = rawProps[name]; + var parsedProp = this.parse(name, val); + parsedProps[name] = parsedProp; + } + _p.defaultProperties = parsedProps; + return _p.defaultProperties; +}; +styfn$2.addDefaultStylesheet = function () { + this.selector(':parent').css({ + 'shape': 'rectangle', + 'padding': 10, + 'background-color': '#eee', + 'border-color': '#ccc', + 'border-width': 1 + }).selector('edge').css({ + 'width': 3 + }).selector(':loop').css({ + 'curve-style': 'bezier' + }).selector('edge:compound').css({ + 'curve-style': 'bezier', + 'source-endpoint': 'outside-to-line', + 'target-endpoint': 'outside-to-line' + }).selector(':selected').css({ + 'background-color': '#0169D9', + 'line-color': '#0169D9', + 'source-arrow-color': '#0169D9', + 'target-arrow-color': '#0169D9', + 'mid-source-arrow-color': '#0169D9', + 'mid-target-arrow-color': '#0169D9' + }).selector(':parent:selected').css({ + 'background-color': '#CCE1F9', + 'border-color': '#aec8e5' + }).selector(':active').css({ + 'overlay-color': 'black', + 'overlay-padding': 10, + 'overlay-opacity': 0.25 + }); + this.defaultLength = this.length; +}; + +var styfn$1 = {}; + +// a caching layer for property parsing +styfn$1.parse = function (name, value, propIsBypass, propIsFlat) { + var self = this; + + // function values can't be cached in all cases, and there isn't much benefit of caching them anyway + if (fn$6(value)) { + return self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat; + var bypassKey = propIsBypass ? 't' : 'f'; + var valueKey = '' + value; + var argHash = hashStrings(name, valueKey, bypassKey, flatKey); + var propCache = self.propCache = self.propCache || []; + var ret; + if (!(ret = propCache[argHash])) { + ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat); + } + + // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden + // - mappings can't be shared b/c mappings are per-element + if (propIsBypass || propIsFlat === 'mapping') { + // need a copy since props are mutated later in their lifecycles + ret = copy(ret); + if (ret) { + ret.value = copy(ret.value); // because it could be an array, e.g. colour + } + } + + return ret; +}; +styfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) { + var prop = this.parseImpl(name, value, propIsBypass, propIsFlat); + if (!prop && value != null) { + warn("The style property `".concat(name, ": ").concat(value, "` is invalid")); + } + if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') { + warn('The style value of `label` is deprecated for `' + prop.name + '`'); + } + return prop; +}; + +// parse a property; return null on invalid; return parsed property otherwise +// fields : +// - name : the name of the property +// - value : the parsed, native-typed value of the property +// - strValue : a string value that represents the property value in valid css +// - bypass : true iff the property is a bypass property +styfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) { + var self = this; + name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName') + + var property = self.properties[name]; + var passedValue = value; + var types = self.types; + if (!property) { + return null; + } // return null on property of unknown name + if (value === undefined) { + return null; + } // can't assign undefined + + // the property may be an alias + if (property.alias) { + property = property.pointsTo; + name = property.name; + } + var valueIsString = string(value); + if (valueIsString) { + // trim the value to make parsing easier + value = value.trim(); + } + var type = property.type; + if (!type) { + return null; + } // no type, no luck + + // check if bypass is null or empty string (i.e. indication to delete bypass property) + if (propIsBypass && (value === '' || value === null)) { + return { + name: name, + value: value, + bypass: true, + deleteBypass: true + }; + } + + // check if value is a function used as a mapper + if (fn$6(value)) { + return { + name: name, + value: value, + strValue: 'fn', + mapped: types.fn, + bypass: propIsBypass + }; + } + + // check if value is mapped + var data, mapData; + if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + + var mapped = types.data; + return { + name: name, + value: data, + strValue: '' + value, + mapped: mapped, + field: data[1], + bypass: propIsBypass + }; + } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) { + if (propIsBypass) { + return false; + } // mappers not allowed in bypass + if (type.multiple) { + return false; + } // impossible to map to num + + var _mapped = types.mapData; + + // we can map only if the type is a colour or a number + if (!(type.color || type.number)) { + return false; + } + var valueMin = this.parse(name, mapData[4]); // parse to validate + if (!valueMin || valueMin.mapped) { + return false; + } // can't be invalid or mapped + + var valueMax = this.parse(name, mapData[5]); // parse to validate + if (!valueMax || valueMax.mapped) { + return false; + } // can't be invalid or mapped + + // check if valueMin and valueMax are the same + if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) { + warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`'); + return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range + } else if (type.color) { + var c1 = valueMin.value; + var c2 = valueMax.value; + var same = c1[0] === c2[0] // red + && c1[1] === c2[1] // green + && c1[2] === c2[2] // blue + && ( + // optional alpha + c1[3] === c2[3] // same alpha outright + || (c1[3] == null || c1[3] === 1 // full opacity for colour 1? + ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2? + ); + + if (same) { + return false; + } // can't make a mapper without a range + } + + return { + name: name, + value: mapData, + strValue: '' + value, + mapped: _mapped, + field: mapData[1], + fieldMin: parseFloat(mapData[2]), + // min & max are numeric + fieldMax: parseFloat(mapData[3]), + valueMin: valueMin.value, + valueMax: valueMax.value, + bypass: propIsBypass + }; + } + if (type.multiple && propIsFlat !== 'multiple') { + var vals; + if (valueIsString) { + vals = value.split(/\s+/); + } else if (array(value)) { + vals = value; + } else { + vals = [value]; + } + if (type.evenMultiple && vals.length % 2 !== 0) { + return null; + } + var valArr = []; + var unitsArr = []; + var pfValArr = []; + var strVal = ''; + var hasEnum = false; + for (var i = 0; i < vals.length; i++) { + var p = self.parse(name, vals[i], propIsBypass, 'multiple'); + hasEnum = hasEnum || string(p.value); + valArr.push(p.value); + pfValArr.push(p.pfValue != null ? p.pfValue : p.value); + unitsArr.push(p.units); + strVal += (i > 0 ? ' ' : '') + p.strValue; + } + if (type.validate && !type.validate(valArr, unitsArr)) { + return null; + } + if (type.singleEnum && hasEnum) { + if (valArr.length === 1 && string(valArr[0])) { + return { + name: name, + value: valArr[0], + strValue: valArr[0], + bypass: propIsBypass + }; + } else { + return null; + } + } + return { + name: name, + value: valArr, + pfValue: pfValArr, + strValue: strVal, + bypass: propIsBypass, + units: unitsArr + }; + } + + // several types also allow enums + var checkEnums = function checkEnums() { + for (var _i = 0; _i < type.enums.length; _i++) { + var en = type.enums[_i]; + if (en === value) { + return { + name: name, + value: value, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + return null; + }; + + // check the type and return the appropriate object + if (type.number) { + var units; + var implicitUnits = 'px'; // not set => px + + if (type.units) { + // use specified units if set + units = type.units; + } + if (type.implicitUnits) { + implicitUnits = type.implicitUnits; + } + if (!type.unitless) { + if (valueIsString) { + var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : ''); + if (units) { + unitsRegex = units; + } // only allow explicit units if so set + var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$'); + if (match) { + value = match[1]; + units = match[2] || implicitUnits; + } + } else if (!units || type.implicitUnits) { + units = implicitUnits; // implicitly px if unspecified + } + } + + value = parseFloat(value); + + // if not a number and enums not allowed, then the value is invalid + if (isNaN(value) && type.enums === undefined) { + return null; + } + + // check if this number type also accepts special keywords in place of numbers + // (i.e. `left`, `auto`, etc) + if (isNaN(value) && type.enums !== undefined) { + value = passedValue; + return checkEnums(); + } + + // check if value must be an integer + if (type.integer && !integer(value)) { + return null; + } + + // check value is within range + if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) { + return null; + } + var ret = { + name: name, + value: value, + strValue: '' + value + (units ? units : ''), + units: units, + bypass: propIsBypass + }; + + // normalise value in pixels + if (type.unitless || units !== 'px' && units !== 'em') { + ret.pfValue = value; + } else { + ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value; + } + + // normalise value in ms + if (units === 'ms' || units === 's') { + ret.pfValue = units === 'ms' ? value : 1000 * value; + } + + // normalise value in rad + if (units === 'deg' || units === 'rad') { + ret.pfValue = units === 'rad' ? value : deg2rad(value); + } + + // normalize value in % + if (units === '%') { + ret.pfValue = value / 100; + } + return ret; + } else if (type.propList) { + var props = []; + var propsStr = '' + value; + if (propsStr === 'none') ; else { + // go over each prop + + var propsSplit = propsStr.split(/\s*,\s*|\s+/); + for (var _i2 = 0; _i2 < propsSplit.length; _i2++) { + var propName = propsSplit[_i2].trim(); + if (self.properties[propName]) { + props.push(propName); + } else { + warn('`' + propName + '` is not a valid property name'); + } + } + if (props.length === 0) { + return null; + } + } + return { + name: name, + value: props, + strValue: props.length === 0 ? 'none' : props.join(' '), + bypass: propIsBypass + }; + } else if (type.color) { + var tuple = color2tuple(value); + if (!tuple) { + return null; + } + return { + name: name, + value: tuple, + pfValue: tuple, + strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')', + // n.b. no spaces b/c of multiple support + bypass: propIsBypass + }; + } else if (type.regex || type.regexes) { + // first check enums + if (type.enums) { + var enumProp = checkEnums(); + if (enumProp) { + return enumProp; + } + } + var regexes = type.regexes ? type.regexes : [type.regex]; + for (var _i3 = 0; _i3 < regexes.length; _i3++) { + var regex = new RegExp(regexes[_i3]); // make a regex from the type string + var m = regex.exec(value); + if (m) { + // regex matches + return { + name: name, + value: type.singleRegexMatchValue ? m[1] : m, + strValue: '' + value, + bypass: propIsBypass + }; + } + } + return null; // didn't match any + } else if (type.string) { + // just return + return { + name: name, + value: '' + value, + strValue: '' + value, + bypass: propIsBypass + }; + } else if (type.enums) { + // check enums last because it's a combo type in others + return checkEnums(); + } else { + return null; // not a type we can handle + } +}; + +var Style = function Style(cy) { + if (!(this instanceof Style)) { + return new Style(cy); + } + if (!core(cy)) { + error('A style must have a core reference'); + return; + } + this._private = { + cy: cy, + coreStyle: {} + }; + this.length = 0; + this.resetToDefault(); +}; +var styfn = Style.prototype; +styfn.instanceString = function () { + return 'style'; +}; + +// remove all contexts +styfn.clear = function () { + var _p = this._private; + var cy = _p.cy; + var eles = cy.elements(); + for (var i = 0; i < this.length; i++) { + this[i] = undefined; + } + this.length = 0; + _p.contextStyles = {}; + _p.propDiffs = {}; + this.cleanElements(eles, true); + eles.forEach(function (ele) { + var ele_p = ele[0]._private; + ele_p.styleDirty = true; + ele_p.appliedInitStyle = false; + }); + return this; // chaining +}; + +styfn.resetToDefault = function () { + this.clear(); + this.addDefaultStylesheet(); + return this; +}; + +// builds a style object for the 'core' selector +styfn.core = function (propName) { + return this._private.coreStyle[propName] || this.getDefaultProperty(propName); +}; + +// create a new context from the specified selector string and switch to that context +styfn.selector = function (selectorStr) { + // 'core' is a special case and does not need a selector + var selector = selectorStr === 'core' ? null : new Selector(selectorStr); + var i = this.length++; // new context means new index + this[i] = { + selector: selector, + properties: [], + mappedProperties: [], + index: i + }; + return this; // chaining +}; + +// add one or many css rules to the current context +styfn.css = function () { + var self = this; + var args = arguments; + if (args.length === 1) { + var map = args[0]; + for (var i = 0; i < self.properties.length; i++) { + var prop = self.properties[i]; + var mapVal = map[prop.name]; + if (mapVal === undefined) { + mapVal = map[dash2camel(prop.name)]; + } + if (mapVal !== undefined) { + this.cssRule(prop.name, mapVal); + } + } + } else if (args.length === 2) { + this.cssRule(args[0], args[1]); + } + + // do nothing if args are invalid + + return this; // chaining +}; + +styfn.style = styfn.css; + +// add a single css rule to the current context +styfn.cssRule = function (name, value) { + // name-value pair + var property = this.parse(name, value); + + // add property to current context if valid + if (property) { + var i = this.length - 1; + this[i].properties.push(property); + this[i].properties[property.name] = property; // allow access by name as well + + if (property.name.match(/pie-(\d+)-background-size/) && property.value) { + this._private.hasPie = true; + } + if (property.mapped) { + this[i].mappedProperties.push(property); + } + + // add to core style if necessary + var currentSelectorIsCore = !this[i].selector; + if (currentSelectorIsCore) { + this._private.coreStyle[property.name] = property; + } + } + return this; // chaining +}; + +styfn.append = function (style) { + if (stylesheet(style)) { + style.appendToStyle(this); + } else if (array(style)) { + this.appendFromJson(style); + } else if (string(style)) { + this.appendFromString(style); + } // you probably wouldn't want to append a Style, since you'd duplicate the default parts + + return this; +}; + +// static function +Style.fromJson = function (cy, json) { + var style = new Style(cy); + style.fromJson(json); + return style; +}; +Style.fromString = function (cy, string) { + return new Style(cy).fromString(string); +}; +[styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) { + extend(styfn, props); +}); +Style.types = styfn.types; +Style.properties = styfn.properties; +Style.propertyGroups = styfn.propertyGroups; +Style.propertyGroupNames = styfn.propertyGroupNames; +Style.propertyGroupKeys = styfn.propertyGroupKeys; + +var corefn$2 = { + style: function style(newStyle) { + if (newStyle) { + var s = this.setStyle(newStyle); + s.update(); + } + return this._private.style; + }, + setStyle: function setStyle(style) { + var _p = this._private; + if (stylesheet(style)) { + _p.style = style.generateStyle(this); + } else if (array(style)) { + _p.style = Style.fromJson(this, style); + } else if (string(style)) { + _p.style = Style.fromString(this, style); + } else { + _p.style = Style(this); + } + return _p.style; + }, + // e.g. cy.data() changed => recalc ele mappers + updateStyle: function updateStyle() { + this.mutableElements().updateStyle(); // just send to all eles + } +}; + +var defaultSelectionType = 'single'; +var corefn$1 = { + autolock: function autolock(bool) { + if (bool !== undefined) { + this._private.autolock = bool ? true : false; + } else { + return this._private.autolock; + } + return this; // chaining + }, + + autoungrabify: function autoungrabify(bool) { + if (bool !== undefined) { + this._private.autoungrabify = bool ? true : false; + } else { + return this._private.autoungrabify; + } + return this; // chaining + }, + + autounselectify: function autounselectify(bool) { + if (bool !== undefined) { + this._private.autounselectify = bool ? true : false; + } else { + return this._private.autounselectify; + } + return this; // chaining + }, + + selectionType: function selectionType(selType) { + var _p = this._private; + if (_p.selectionType == null) { + _p.selectionType = defaultSelectionType; + } + if (selType !== undefined) { + if (selType === 'additive' || selType === 'single') { + _p.selectionType = selType; + } + } else { + return _p.selectionType; + } + return this; + }, + panningEnabled: function panningEnabled(bool) { + if (bool !== undefined) { + this._private.panningEnabled = bool ? true : false; + } else { + return this._private.panningEnabled; + } + return this; // chaining + }, + + userPanningEnabled: function userPanningEnabled(bool) { + if (bool !== undefined) { + this._private.userPanningEnabled = bool ? true : false; + } else { + return this._private.userPanningEnabled; + } + return this; // chaining + }, + + zoomingEnabled: function zoomingEnabled(bool) { + if (bool !== undefined) { + this._private.zoomingEnabled = bool ? true : false; + } else { + return this._private.zoomingEnabled; + } + return this; // chaining + }, + + userZoomingEnabled: function userZoomingEnabled(bool) { + if (bool !== undefined) { + this._private.userZoomingEnabled = bool ? true : false; + } else { + return this._private.userZoomingEnabled; + } + return this; // chaining + }, + + boxSelectionEnabled: function boxSelectionEnabled(bool) { + if (bool !== undefined) { + this._private.boxSelectionEnabled = bool ? true : false; + } else { + return this._private.boxSelectionEnabled; + } + return this; // chaining + }, + + pan: function pan() { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + switch (args.length) { + case 0: + // .pan() + return pan; + case 1: + if (string(args[0])) { + // .pan('x') + dim = args[0]; + return pan[dim]; + } else if (plainObject(args[0])) { + // .pan({ x: 0, y: 100 }) + if (!this._private.panningEnabled) { + return this; + } + dims = args[0]; + x = dims.x; + y = dims.y; + if (number$1(x)) { + pan.x = x; + } + if (number$1(y)) { + pan.y = y; + } + this.emit('pan viewport'); + } + break; + case 2: + // .pan('x', 100) + if (!this._private.panningEnabled) { + return this; + } + dim = args[0]; + val = args[1]; + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] = val; + } + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + + panBy: function panBy(arg0, arg1) { + var args = arguments; + var pan = this._private.pan; + var dim, val, dims, x, y; + if (!this._private.panningEnabled) { + return this; + } + switch (args.length) { + case 1: + if (plainObject(arg0)) { + // .panBy({ x: 0, y: 100 }) + dims = args[0]; + x = dims.x; + y = dims.y; + if (number$1(x)) { + pan.x += x; + } + if (number$1(y)) { + pan.y += y; + } + this.emit('pan viewport'); + } + break; + case 2: + // .panBy('x', 100) + dim = arg0; + val = arg1; + if ((dim === 'x' || dim === 'y') && number$1(val)) { + pan[dim] += val; + } + this.emit('pan viewport'); + break; + // invalid + } + + this.notify('viewport'); + return this; // chaining + }, + + fit: function fit(elements, padding) { + var viewportState = this.getFitViewport(elements, padding); + if (viewportState) { + var _p = this._private; + _p.zoom = viewportState.zoom; + _p.pan = viewportState.pan; + this.emit('pan zoom viewport'); + this.notify('viewport'); + } + return this; // chaining + }, + + getFitViewport: function getFitViewport(elements, padding) { + if (number$1(elements) && padding === undefined) { + // elements is optional + padding = elements; + elements = undefined; + } + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return; + } + var bb; + if (string(elements)) { + var sel = elements; + elements = this.$(sel); + } else if (boundingBox(elements)) { + // assume bb + var bbe = elements; + bb = { + x1: bbe.x1, + y1: bbe.y1, + x2: bbe.x2, + y2: bbe.y2 + }; + bb.w = bb.x2 - bb.x1; + bb.h = bb.y2 - bb.y1; + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + if (elementOrCollection(elements) && elements.empty()) { + return; + } // can't fit to nothing + + bb = bb || elements.boundingBox(); + var w = this.width(); + var h = this.height(); + var zoom; + padding = number$1(padding) ? padding : 0; + if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { + zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h); + + // crop zoom + zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom; + zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom; + var pan = { + // now pan to middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return { + zoom: zoom, + pan: pan + }; + } + return; + }, + zoomRange: function zoomRange(min, max) { + var _p = this._private; + if (max == null) { + var opts = min; + min = opts.min; + max = opts.max; + } + if (number$1(min) && number$1(max) && min <= max) { + _p.minZoom = min; + _p.maxZoom = max; + } else if (number$1(min) && max === undefined && min <= _p.maxZoom) { + _p.minZoom = min; + } else if (number$1(max) && min === undefined && max >= _p.minZoom) { + _p.maxZoom = max; + } + return this; + }, + minZoom: function minZoom(zoom) { + if (zoom === undefined) { + return this._private.minZoom; + } else { + return this.zoomRange({ + min: zoom + }); + } + }, + maxZoom: function maxZoom(zoom) { + if (zoom === undefined) { + return this._private.maxZoom; + } else { + return this.zoomRange({ + max: zoom + }); + } + }, + getZoomedViewport: function getZoomedViewport(params) { + var _p = this._private; + var currentPan = _p.pan; + var currentZoom = _p.zoom; + var pos; // in rendered px + var zoom; + var bail = false; + if (!_p.zoomingEnabled) { + // zooming disabled + bail = true; + } + if (number$1(params)) { + // then set the zoom + zoom = params; + } else if (plainObject(params)) { + // then zoom about a point + zoom = params.level; + if (params.position != null) { + pos = modelToRenderedPosition(params.position, currentZoom, currentPan); + } else if (params.renderedPosition != null) { + pos = params.renderedPosition; + } + if (pos != null && !_p.panningEnabled) { + // panning disabled + bail = true; + } + } + + // crop zoom + zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom; + zoom = zoom < _p.minZoom ? _p.minZoom : zoom; + + // can't zoom with invalid params + if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) { + return null; + } + if (pos != null) { + // set zoom about position + var pan1 = currentPan; + var zoom1 = currentZoom; + var zoom2 = zoom; + var pan2 = { + x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x, + y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y + }; + return { + zoomed: true, + panned: true, + zoom: zoom2, + pan: pan2 + }; + } else { + // just set the zoom + return { + zoomed: true, + panned: false, + zoom: zoom, + pan: currentPan + }; + } + }, + zoom: function zoom(params) { + if (params === undefined) { + // get + return this._private.zoom; + } else { + // set + var vp = this.getZoomedViewport(params); + var _p = this._private; + if (vp == null || !vp.zoomed) { + return this; + } + _p.zoom = vp.zoom; + if (vp.panned) { + _p.pan.x = vp.pan.x; + _p.pan.y = vp.pan.y; + } + this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport'); + this.notify('viewport'); + return this; // chaining + } + }, + + viewport: function viewport(opts) { + var _p = this._private; + var zoomDefd = true; + var panDefd = true; + var events = []; // to trigger + var zoomFailed = false; + var panFailed = false; + if (!opts) { + return this; + } + if (!number$1(opts.zoom)) { + zoomDefd = false; + } + if (!plainObject(opts.pan)) { + panDefd = false; + } + if (!zoomDefd && !panDefd) { + return this; + } + if (zoomDefd) { + var z = opts.zoom; + if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) { + zoomFailed = true; + } else { + _p.zoom = z; + events.push('zoom'); + } + } + if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) { + var p = opts.pan; + if (number$1(p.x)) { + _p.pan.x = p.x; + panFailed = false; + } + if (number$1(p.y)) { + _p.pan.y = p.y; + panFailed = false; + } + if (!panFailed) { + events.push('pan'); + } + } + if (events.length > 0) { + events.push('viewport'); + this.emit(events.join(' ')); + this.notify('viewport'); + } + return this; // chaining + }, + + center: function center(elements) { + var pan = this.getCenterPan(elements); + if (pan) { + this._private.pan = pan; + this.emit('pan viewport'); + this.notify('viewport'); + } + return this; // chaining + }, + + getCenterPan: function getCenterPan(elements, zoom) { + if (!this._private.panningEnabled) { + return; + } + if (string(elements)) { + var selector = elements; + elements = this.mutableElements().filter(selector); + } else if (!elementOrCollection(elements)) { + elements = this.mutableElements(); + } + if (elements.length === 0) { + return; + } // can't centre pan to nothing + + var bb = elements.boundingBox(); + var w = this.width(); + var h = this.height(); + zoom = zoom === undefined ? this._private.zoom : zoom; + var pan = { + // middle + x: (w - zoom * (bb.x1 + bb.x2)) / 2, + y: (h - zoom * (bb.y1 + bb.y2)) / 2 + }; + return pan; + }, + reset: function reset() { + if (!this._private.panningEnabled || !this._private.zoomingEnabled) { + return this; + } + this.viewport({ + pan: { + x: 0, + y: 0 + }, + zoom: 1 + }); + return this; // chaining + }, + + invalidateSize: function invalidateSize() { + this._private.sizeCache = null; + }, + size: function size() { + var _p = this._private; + var container = _p.container; + var cy = this; + return _p.sizeCache = _p.sizeCache || (container ? function () { + var style = cy.window().getComputedStyle(container); + var val = function val(name) { + return parseFloat(style.getPropertyValue(name)); + }; + return { + width: container.clientWidth - val('padding-left') - val('padding-right'), + height: container.clientHeight - val('padding-top') - val('padding-bottom') + }; + }() : { + // fallback if no container (not 0 b/c can be used for dividing etc) + width: 1, + height: 1 + }); + }, + width: function width() { + return this.size().width; + }, + height: function height() { + return this.size().height; + }, + extent: function extent() { + var pan = this._private.pan; + var zoom = this._private.zoom; + var rb = this.renderedExtent(); + var b = { + x1: (rb.x1 - pan.x) / zoom, + x2: (rb.x2 - pan.x) / zoom, + y1: (rb.y1 - pan.y) / zoom, + y2: (rb.y2 - pan.y) / zoom + }; + b.w = b.x2 - b.x1; + b.h = b.y2 - b.y1; + return b; + }, + renderedExtent: function renderedExtent() { + var width = this.width(); + var height = this.height(); + return { + x1: 0, + y1: 0, + x2: width, + y2: height, + w: width, + h: height + }; + }, + multiClickDebounceTime: function multiClickDebounceTime(_int) { + if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime; + return this; // chaining + } +}; + +// aliases +corefn$1.centre = corefn$1.center; + +// backwards compatibility +corefn$1.autolockNodes = corefn$1.autolock; +corefn$1.autoungrabifyNodes = corefn$1.autoungrabify; + +var fn = { + data: define.data({ + field: 'data', + bindingEvent: 'data', + allowBinding: true, + allowSetting: true, + settingEvent: 'data', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeData: define.removeData({ + field: 'data', + event: 'data', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }), + scratch: define.data({ + field: 'scratch', + bindingEvent: 'scratch', + allowBinding: true, + allowSetting: true, + settingEvent: 'scratch', + settingTriggersEvent: true, + triggerFnName: 'trigger', + allowGetting: true, + updateStyle: true + }), + removeScratch: define.removeData({ + field: 'scratch', + event: 'scratch', + triggerFnName: 'trigger', + triggerEvent: true, + updateStyle: true + }) +}; + +// aliases +fn.attr = fn.data; +fn.removeAttr = fn.removeData; + +var Core = function Core(opts) { + var cy = this; + opts = extend({}, opts); + var container = opts.container; + + // allow for passing a wrapped jquery object + // e.g. cytoscape({ container: $('#cy') }) + if (container && !htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery + reg = reg || {}; + if (reg && reg.cy) { + reg.cy.destroy(); + reg = {}; // old instance => replace reg completely + } + + var readies = reg.readies = reg.readies || []; + if (container) { + container._cyreg = reg; + } // make sure container assoc'd reg points to this cy + reg.cy = cy; + var head = _window !== undefined && container !== undefined && !opts.headless; + var options = opts; + options.layout = extend({ + name: head ? 'grid' : 'null' + }, options.layout); + options.renderer = extend({ + name: head ? 'canvas' : 'null' + }, options.renderer); + var defVal = function defVal(def, val, altVal) { + if (val !== undefined) { + return val; + } else if (altVal !== undefined) { + return altVal; + } else { + return def; + } + }; + var _p = this._private = { + container: container, + // html dom ele container + ready: false, + // whether ready has been triggered + options: options, + // cached options + elements: new Collection(this), + // elements in the graph + listeners: [], + // list of listeners + aniEles: new Collection(this), + // elements being animated + data: options.data || {}, + // data for the core + scratch: {}, + // scratch object for core + layout: null, + renderer: null, + destroyed: false, + // whether destroy was called + notificationsEnabled: true, + // whether notifications are sent to the renderer + minZoom: 1e-50, + maxZoom: 1e50, + zoomingEnabled: defVal(true, options.zoomingEnabled), + userZoomingEnabled: defVal(true, options.userZoomingEnabled), + panningEnabled: defVal(true, options.panningEnabled), + userPanningEnabled: defVal(true, options.userPanningEnabled), + boxSelectionEnabled: defVal(true, options.boxSelectionEnabled), + autolock: defVal(false, options.autolock, options.autolockNodes), + autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes), + autounselectify: defVal(false, options.autounselectify), + styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled, + zoom: number$1(options.zoom) ? options.zoom : 1, + pan: { + x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0, + y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0 + }, + animation: { + // object for currently-running animations + current: [], + queue: [] + }, + hasCompoundNodes: false, + multiClickDebounceTime: defVal(250, options.multiClickDebounceTime) + }; + this.createEmitter(); + + // set selection type + this.selectionType(options.selectionType); + + // init zoom bounds + this.zoomRange({ + min: options.minZoom, + max: options.maxZoom + }); + var loadExtData = function loadExtData(extData, next) { + var anyIsPromise = extData.some(promise); + if (anyIsPromise) { + return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init + } else { + next(extData); // exec synchronously for convenience + } + }; + + // start with the default stylesheet so we have something before loading an external stylesheet + if (_p.styleEnabled) { + cy.setStyle([]); + } + + // create the renderer + var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options + cy.initRenderer(rendererOptions); + var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) { + cy.notifications(false); + + // remove old elements + var oldEles = cy.mutableElements(); + if (oldEles.length > 0) { + oldEles.remove(); + } + if (elements != null) { + if (plainObject(elements) || array(elements)) { + cy.add(elements); + } + } + cy.one('layoutready', function (e) { + cy.notifications(true); + cy.emit(e); // we missed this event by turning notifications off, so pass it on + + cy.one('load', onload); + cy.emitAndNotify('load'); + }).one('layoutstop', function () { + cy.one('done', ondone); + cy.emit('done'); + }); + var layoutOpts = extend({}, cy._private.options.layout); + layoutOpts.eles = cy.elements(); + cy.layout(layoutOpts).run(); + }; + loadExtData([options.style, options.elements], function (thens) { + var initStyle = thens[0]; + var initEles = thens[1]; + + // init style + if (_p.styleEnabled) { + cy.style().append(initStyle); + } + + // initial load + setElesAndLayout(initEles, function () { + // onready + cy.startAnimationLoop(); + _p.ready = true; + + // if a ready callback is specified as an option, the bind it + if (fn$6(options.ready)) { + cy.on('ready', options.ready); + } + + // bind all the ready handlers registered before creating this instance + for (var i = 0; i < readies.length; i++) { + var fn = readies[i]; + cy.on('ready', fn); + } + if (reg) { + reg.readies = []; + } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc + + cy.emit('ready'); + }, options.done); + }); +}; +var corefn = Core.prototype; // short alias + +extend(corefn, { + instanceString: function instanceString() { + return 'core'; + }, + isReady: function isReady() { + return this._private.ready; + }, + destroyed: function destroyed() { + return this._private.destroyed; + }, + ready: function ready(fn) { + if (this.isReady()) { + this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event + } else { + this.on('ready', fn); + } + return this; + }, + destroy: function destroy() { + var cy = this; + if (cy.destroyed()) return; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + this.emit('destroy'); + cy._private.destroyed = true; + return cy; + }, + hasElementWithId: function hasElementWithId(id) { + return this._private.elements.hasElementWithId(id); + }, + getElementById: function getElementById(id) { + return this._private.elements.getElementById(id); + }, + hasCompoundNodes: function hasCompoundNodes() { + return this._private.hasCompoundNodes; + }, + headless: function headless() { + return this._private.renderer.isHeadless(); + }, + styleEnabled: function styleEnabled() { + return this._private.styleEnabled; + }, + addToPool: function addToPool(eles) { + this._private.elements.merge(eles); + return this; // chaining + }, + + removeFromPool: function removeFromPool(eles) { + this._private.elements.unmerge(eles); + return this; + }, + container: function container() { + return this._private.container || null; + }, + window: function window() { + var container = this._private.container; + if (container == null) return _window; + var ownerDocument = this._private.container.ownerDocument; + if (ownerDocument === undefined || ownerDocument == null) { + return _window; + } + return ownerDocument.defaultView || _window; + }, + mount: function mount(container) { + if (container == null) { + return; + } + var cy = this; + var _p = cy._private; + var options = _p.options; + if (!htmlElement(container) && htmlElement(container[0])) { + container = container[0]; + } + cy.stopAnimationLoop(); + cy.destroyRenderer(); + _p.container = container; + _p.styleEnabled = true; + cy.invalidateSize(); + cy.initRenderer(extend({}, options, options.renderer, { + // allow custom renderer name to be re-used, otherwise use canvas + name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name + })); + cy.startAnimationLoop(); + cy.style(options.style); + cy.emit('mount'); + return cy; + }, + unmount: function unmount() { + var cy = this; + cy.stopAnimationLoop(); + cy.destroyRenderer(); + cy.initRenderer({ + name: 'null' + }); + cy.emit('unmount'); + return cy; + }, + options: function options() { + return copy(this._private.options); + }, + json: function json(obj) { + var cy = this; + var _p = cy._private; + var eles = cy.mutableElements(); + var getFreshRef = function getFreshRef(ele) { + return cy.getElementById(ele.id()); + }; + if (plainObject(obj)) { + // set + + cy.startBatch(); + if (obj.elements) { + var idInJson = {}; + var updateEles = function updateEles(jsons, gr) { + var toAdd = []; + var toMod = []; + for (var i = 0; i < jsons.length; i++) { + var json = jsons[i]; + if (!json.data.id) { + warn('cy.json() cannot handle elements without an ID attribute'); + continue; + } + var id = '' + json.data.id; // id must be string + var ele = cy.getElementById(id); + idInJson[id] = true; + if (ele.length !== 0) { + // existing element should be updated + toMod.push({ + ele: ele, + json: json + }); + } else { + // otherwise should be added + if (gr) { + json.group = gr; + toAdd.push(json); + } else { + toAdd.push(json); + } + } + } + cy.add(toAdd); + for (var _i = 0; _i < toMod.length; _i++) { + var _toMod$_i = toMod[_i], + _ele = _toMod$_i.ele, + _json = _toMod$_i.json; + _ele.json(_json); + } + }; + if (array(obj.elements)) { + // elements: [] + updateEles(obj.elements); + } else { + // elements: { nodes: [], edges: [] } + var grs = ['nodes', 'edges']; + for (var i = 0; i < grs.length; i++) { + var gr = grs[i]; + var elements = obj.elements[gr]; + if (array(elements)) { + updateEles(elements, gr); + } + } + } + var parentsToRemove = cy.collection(); + eles.filter(function (ele) { + return !idInJson[ele.id()]; + }).forEach(function (ele) { + if (ele.isParent()) { + parentsToRemove.merge(ele); + } else { + ele.remove(); + } + }); + + // so that children are not removed w/parent + parentsToRemove.forEach(function (ele) { + return ele.children().move({ + parent: null + }); + }); + + // intermediate parents may be moved by prior line, so make sure we remove by fresh refs + parentsToRemove.forEach(function (ele) { + return getFreshRef(ele).remove(); + }); + } + if (obj.style) { + cy.style(obj.style); + } + if (obj.zoom != null && obj.zoom !== _p.zoom) { + cy.zoom(obj.zoom); + } + if (obj.pan) { + if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) { + cy.pan(obj.pan); + } + } + if (obj.data) { + cy.data(obj.data); + } + var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime']; + for (var _i2 = 0; _i2 < fields.length; _i2++) { + var f = fields[_i2]; + if (obj[f] != null) { + cy[f](obj[f]); + } + } + cy.endBatch(); + return this; // chaining + } else { + // get + var flat = !!obj; + var json = {}; + if (flat) { + json.elements = this.elements().map(function (ele) { + return ele.json(); + }); + } else { + json.elements = {}; + eles.forEach(function (ele) { + var group = ele.group(); + if (!json.elements[group]) { + json.elements[group] = []; + } + json.elements[group].push(ele.json()); + }); + } + if (this._private.styleEnabled) { + json.style = cy.style().json(); + } + json.data = copy(cy.data()); + var options = _p.options; + json.zoomingEnabled = _p.zoomingEnabled; + json.userZoomingEnabled = _p.userZoomingEnabled; + json.zoom = _p.zoom; + json.minZoom = _p.minZoom; + json.maxZoom = _p.maxZoom; + json.panningEnabled = _p.panningEnabled; + json.userPanningEnabled = _p.userPanningEnabled; + json.pan = copy(_p.pan); + json.boxSelectionEnabled = _p.boxSelectionEnabled; + json.renderer = copy(options.renderer); + json.hideEdgesOnViewport = options.hideEdgesOnViewport; + json.textureOnViewport = options.textureOnViewport; + json.wheelSensitivity = options.wheelSensitivity; + json.motionBlur = options.motionBlur; + json.multiClickDebounceTime = options.multiClickDebounceTime; + return json; + } + } +}); +corefn.$id = corefn.getElementById; +[corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) { + extend(corefn, props); +}); + +/* eslint-disable no-unused-vars */ +var defaults$7 = { + fit: true, + // whether to fit the viewport to the graph + directed: false, + // whether the tree is directed downwards (or edges can point in any direction if false) + padding: 30, + // padding on fit + circle: false, + // put depths in concentric circles if true, put depths top down if false + grid: false, + // whether to create an even grid into which the DAG is placed (circle:false only) + spacingFactor: 1.75, + // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + roots: undefined, + // the roots of the trees + depthSort: undefined, + // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled, + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +var deprecatedOptionDefaults = { + maximal: false, + // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also + acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops +}; + +/* eslint-enable */ + +var getInfo = function getInfo(ele) { + return ele.scratch('breadthfirst'); +}; +var setInfo = function setInfo(ele, obj) { + return ele.scratch('breadthfirst', obj); +}; +function BreadthFirstLayout(options) { + this.options = extend({}, defaults$7, deprecatedOptionDefaults, options); +} +BreadthFirstLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().filter(function (n) { + return !n.isParent(); + }); + var graph = eles; + var directed = options.directed; + var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true + + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var roots; + if (elementOrCollection(options.roots)) { + roots = options.roots; + } else if (array(options.roots)) { + var rootsArray = []; + for (var i = 0; i < options.roots.length; i++) { + var id = options.roots[i]; + var ele = cy.getElementById(id); + rootsArray.push(ele); + } + roots = cy.collection(rootsArray); + } else if (string(options.roots)) { + roots = cy.$(options.roots); + } else { + if (directed) { + roots = nodes.roots(); + } else { + var components = eles.components(); + roots = cy.collection(); + var _loop = function _loop(_i) { + var comp = components[_i]; + var maxDegree = comp.maxDegree(false); + var compRoots = comp.filter(function (ele) { + return ele.degree(false) === maxDegree; + }); + roots = roots.add(compRoots); + }; + for (var _i = 0; _i < components.length; _i++) { + _loop(_i); + } + } + } + var depths = []; + var foundByBfs = {}; + var addToDepth = function addToDepth(ele, d) { + if (depths[d] == null) { + depths[d] = []; + } + var i = depths[d].length; + depths[d].push(ele); + setInfo(ele, { + index: i, + depth: d + }); + }; + var changeDepth = function changeDepth(ele, newDepth) { + var _getInfo = getInfo(ele), + depth = _getInfo.depth, + index = _getInfo.index; + depths[depth][index] = null; + addToDepth(ele, newDepth); + }; + + // find the depths of the nodes + graph.bfs({ + roots: roots, + directed: options.directed, + visit: function visit(node, edge, pNode, i, depth) { + var ele = node[0]; + var id = ele.id(); + addToDepth(ele, depth); + foundByBfs[id] = true; + } + }); + + // check for nodes not found by bfs + var orphanNodes = []; + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + if (foundByBfs[_ele.id()]) { + continue; + } else { + orphanNodes.push(_ele); + } + } + + // assign the nodes a depth and index + + var assignDepthsAt = function assignDepthsAt(i) { + var eles = depths[i]; + for (var j = 0; j < eles.length; j++) { + var _ele2 = eles[j]; + if (_ele2 == null) { + eles.splice(j, 1); + j--; + continue; + } + setInfo(_ele2, { + depth: i, + index: j + }); + } + }; + var assignDepths = function assignDepths() { + for (var _i3 = 0; _i3 < depths.length; _i3++) { + assignDepthsAt(_i3); + } + }; + var adjustMaximally = function adjustMaximally(ele, shifted) { + var eInfo = getInfo(ele); + var incomers = ele.incomers().filter(function (el) { + return el.isNode() && eles.has(el); + }); + var maxDepth = -1; + var id = ele.id(); + for (var k = 0; k < incomers.length; k++) { + var incmr = incomers[k]; + var iInfo = getInfo(incmr); + maxDepth = Math.max(maxDepth, iInfo.depth); + } + if (eInfo.depth <= maxDepth) { + if (!options.acyclic && shifted[id]) { + return null; + } + var newDepth = maxDepth + 1; + changeDepth(ele, newDepth); + shifted[id] = newDepth; + return true; + } + return false; + }; + + // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1) + if (directed && maximal) { + var Q = []; + var shifted = {}; + var enqueue = function enqueue(n) { + return Q.push(n); + }; + var dequeue = function dequeue() { + return Q.shift(); + }; + nodes.forEach(function (n) { + return Q.push(n); + }); + while (Q.length > 0) { + var _ele3 = dequeue(); + var didShift = adjustMaximally(_ele3, shifted); + if (didShift) { + _ele3.outgoers().filter(function (el) { + return el.isNode() && eles.has(el); + }).forEach(enqueue); + } else if (didShift === null) { + warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.'); + break; // exit on failure + } + } + } + + assignDepths(); // clear holes + + // find min distance we need to leave between nodes + var minDistance = 0; + if (options.avoidOverlap) { + for (var _i4 = 0; _i4 < nodes.length; _i4++) { + var n = nodes[_i4]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + } + + // get the weighted percent for an element based on its connectivity to other levels + var cachedWeightedPercent = {}; + var getWeightedPercent = function getWeightedPercent(ele) { + if (cachedWeightedPercent[ele.id()]) { + return cachedWeightedPercent[ele.id()]; + } + var eleDepth = getInfo(ele).depth; + var neighbors = ele.neighborhood(); + var percent = 0; + var samples = 0; + for (var _i5 = 0; _i5 < neighbors.length; _i5++) { + var neighbor = neighbors[_i5]; + if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) { + continue; + } + var bf = getInfo(neighbor); + if (bf == null) { + continue; + } + var index = bf.index; + var depth = bf.depth; + + // unassigned neighbours shouldn't affect the ordering + if (index == null || depth == null) { + continue; + } + var nDepth = depths[depth].length; + if (depth < eleDepth) { + // only get influenced by elements above + percent += index / nDepth; + samples++; + } + } + samples = Math.max(1, samples); + percent = percent / samples; + if (samples === 0) { + // put lone nodes at the start + percent = 0; + } + cachedWeightedPercent[ele.id()] = percent; + return percent; + }; + + // rearrange the indices in each depth level based on connectivity + + var sortFn = function sortFn(a, b) { + var apct = getWeightedPercent(a); + var bpct = getWeightedPercent(b); + var diff = apct - bpct; + if (diff === 0) { + return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons + } else { + return diff; + } + }; + if (options.depthSort !== undefined) { + sortFn = options.depthSort; + } + + // sort each level to make connected nodes closer + for (var _i6 = 0; _i6 < depths.length; _i6++) { + depths[_i6].sort(sortFn); + assignDepthsAt(_i6); + } + + // assign orphan nodes to a new top-level depth + var orphanDepth = []; + for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { + orphanDepth.push(orphanNodes[_i7]); + } + depths.unshift(orphanDepth); + assignDepths(); + var biggestDepthSize = 0; + for (var _i8 = 0; _i8 < depths.length; _i8++) { + biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); + } + var center = { + x: bb.x1 + bb.w / 2, + y: bb.x1 + bb.h / 2 + }; + var maxDepthSize = depths.reduce(function (max, eles) { + return Math.max(max, eles.length); + }, 0); + var getPosition = function getPosition(ele) { + var _getInfo2 = getInfo(ele), + depth = _getInfo2.depth, + index = _getInfo2.index; + var depthSize = depths[depth].length; + var distanceX = Math.max(bb.w / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance); + var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); + var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); + radiusStepSize = Math.max(radiusStepSize, minDistance); + if (!options.circle) { + var epos = { + x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX, + y: (depth + 1) * distanceY + }; + return epos; + } else { + var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0); + var theta = 2 * Math.PI / depths[depth].length * index; + if (depth === 0 && depths[0].length === 1) { + radius = 1; + } + return { + x: center.x + radius * Math.cos(theta), + y: center.y + radius * Math.sin(theta) + }; + } + }; + eles.nodes().layoutPositions(this, options, getPosition); + return this; // chaining +}; + +var defaults$6 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox and radius if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + radius: undefined, + // the radius of the circle + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function CircleLayout(options) { + this.options = extend({}, defaults$6, options); +} +CircleLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var nodes = eles.nodes().not(':parent'); + if (options.sort) { + nodes = nodes.sort(options.sort); + } + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep; + var dTheta = sweep / Math.max(1, nodes.length - 1); + var r; + var minDistance = 0; + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var w = nbb.w; + var h = nbb.h; + minDistance = Math.max(minDistance, w, h); + } + if (number$1(options.radius)) { + r = options.radius; + } else if (nodes.length <= 1) { + r = 0; + } else { + r = Math.min(bb.h, bb.w) / 2 - minDistance; + } + + // calculate the radius + if (nodes.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + minDistance *= 1.75; // just to have some nice spacing + + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + r = Math.max(rMin, r); + } + var getPos = function getPos(ele, i) { + var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1); + var rx = r * Math.cos(theta); + var ry = r * Math.sin(theta); + var pos = { + x: center.x + rx, + y: center.y + ry + }; + return pos; + }; + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining +}; + +var defaults$5 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // the padding on fit + startAngle: 3 / 2 * Math.PI, + // where nodes start in radians + sweep: undefined, + // how many radians should be between the first and last node (defaults to full circle) + clockwise: true, + // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false) + equidistant: false, + // whether levels have an equal radial distance betwen them, may cause bounding box overflow + minNodeSpacing: 10, + // min spacing between outside of nodes (used for radius adjustment) + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + height: undefined, + // height of layout area (overrides container height) + width: undefined, + // width of layout area (overrides container width) + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + concentric: function concentric(node) { + // returns numeric value for each node, placing higher nodes in levels towards the centre + return node.degree(); + }, + levelWidth: function levelWidth(nodes) { + // the variation of concentric values in each level + return nodes.maxDegree() / 4; + }, + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function ConcentricLayout(options) { + this.options = extend({}, defaults$5, options); +} +ConcentricLayout.prototype.run = function () { + var params = this.options; + var options = params; + var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var center = { + x: bb.x1 + bb.w / 2, + y: bb.y1 + bb.h / 2 + }; + var nodeValues = []; // { node, value } + var maxNodeSize = 0; + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var value = void 0; + + // calculate the node value + value = options.concentric(node); + nodeValues.push({ + value: value, + node: node + }); + + // for style mapping + node._private.scratch.concentric = value; + } + + // in case we used the `concentric` in style + nodes.updateStyle(); + + // calculate max size now based on potentially updated mappers + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var nbb = _node.layoutDimensions(options); + maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); + } + + // sort node values in descreasing order + nodeValues.sort(function (a, b) { + return b.value - a.value; + }); + var levelWidth = options.levelWidth(nodes); + + // put the values into levels + var levels = [[]]; + var currentLevel = levels[0]; + for (var _i2 = 0; _i2 < nodeValues.length; _i2++) { + var val = nodeValues[_i2]; + if (currentLevel.length > 0) { + var diff = Math.abs(currentLevel[0].value - val.value); + if (diff >= levelWidth) { + currentLevel = []; + levels.push(currentLevel); + } + } + currentLevel.push(val); + } + + // create positions from levels + + var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes + + if (!options.avoidOverlap) { + // then strictly constrain to bb + var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; + var maxR = Math.min(bb.w, bb.h) / 2 - minDist; + var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0); + minDist = Math.min(minDist, rStep); + } + + // find the metrics for each level + var r = 0; + for (var _i3 = 0; _i3 < levels.length; _i3++) { + var level = levels[_i3]; + var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep; + var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); + + // calculate the radius + if (level.length > 1 && options.avoidOverlap) { + // but only if more than one node (can't overlap) + var dcos = Math.cos(dTheta) - Math.cos(0); + var dsin = Math.sin(dTheta) - Math.sin(0); + var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping + + r = Math.max(rMin, r); + } + level.r = r; + r += minDist; + } + if (options.equidistant) { + var rDeltaMax = 0; + var _r = 0; + for (var _i4 = 0; _i4 < levels.length; _i4++) { + var _level = levels[_i4]; + var rDelta = _level.r - _r; + rDeltaMax = Math.max(rDeltaMax, rDelta); + } + _r = 0; + for (var _i5 = 0; _i5 < levels.length; _i5++) { + var _level2 = levels[_i5]; + if (_i5 === 0) { + _r = _level2.r; + } + _level2.r = _r; + _r += rDeltaMax; + } + } + + // calculate the node positions + var pos = {}; // id => position + for (var _i6 = 0; _i6 < levels.length; _i6++) { + var _level3 = levels[_i6]; + var _dTheta = _level3.dTheta; + var _r2 = _level3.r; + for (var j = 0; j < _level3.length; j++) { + var _val = _level3[j]; + var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j; + var p = { + x: center.x + _r2 * Math.cos(theta), + y: center.y + _r2 * Math.sin(theta) + }; + pos[_val.node.id()] = p; + } + } + + // position the nodes + eles.nodes().layoutPositions(this, options, function (ele) { + var id = ele.id(); + return pos[id]; + }); + return this; // chaining +}; + +/* +The CoSE layout was written by Gerardo Huck. +https://www.linkedin.com/in/gerardohuck/ + +Based on the following article: +http://dl.acm.org/citation.cfm?id=1498047 + +Modifications tracked on Github. +*/ +var DEBUG; + +/** + * @brief : default layout options + */ +var defaults$4 = { + // Called on `layoutready` + ready: function ready() {}, + // Called on `layoutstop` + stop: function stop() {}, + // Whether to animate while running the layout + // true : Animate continuously as the layout is running + // false : Just show the end result + // 'end' : Animate with the end result, from the initial positions to the end positions + animate: true, + // Easing of the animation for animate:'end' + animationEasing: undefined, + // The duration of the animation for animate:'end' + animationDuration: undefined, + // A function that determines whether the node should be animated + // All nodes animated by default on animate enabled + // Non-animated nodes are positioned immediately when the layout starts + animateFilter: function animateFilter(node, i) { + return true; + }, + // The layout animates only after this many milliseconds for animate:true + // (prevents flashing on fast runs) + animationThreshold: 250, + // Number of iterations between consecutive screen positions update + refresh: 20, + // Whether to fit the network view after when done + fit: true, + // Padding on fit + padding: 30, + // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + boundingBox: undefined, + // Excludes the label when calculating node bounding boxes for the layout algorithm + nodeDimensionsIncludeLabels: false, + // Randomize the initial positions of the nodes (true) or use existing positions (false) + randomize: false, + // Extra spacing between components in non-compound graphs + componentSpacing: 40, + // Node repulsion (non overlapping) multiplier + nodeRepulsion: function nodeRepulsion(node) { + return 2048; + }, + // Node repulsion (overlapping) multiplier + nodeOverlap: 4, + // Ideal edge (non nested) length + idealEdgeLength: function idealEdgeLength(edge) { + return 32; + }, + // Divisor to compute edge forces + edgeElasticity: function edgeElasticity(edge) { + return 32; + }, + // Nesting factor (multiplier) to compute ideal edge length for nested edges + nestingFactor: 1.2, + // Gravity force (constant) + gravity: 1, + // Maximum number of iterations to perform + numIter: 1000, + // Initial temperature (maximum node displacement) + initialTemp: 1000, + // Cooling factor (how the temperature is reduced between consecutive iterations + coolingFactor: 0.99, + // Lower temperature threshold (below this point the layout will end) + minTemp: 1.0 +}; + +/** + * @brief : constructor + * @arg options : object containing layout options + */ +function CoseLayout(options) { + this.options = extend({}, defaults$4, options); + this.options.layout = this; + + // Exclude any edge that has a source or target node that is not in the set of passed-in nodes + var nodes = this.options.eles.nodes(); + var edges = this.options.eles.edges(); + var notEdges = edges.filter(function (e) { + var sourceId = e.source().data('id'); + var targetId = e.target().data('id'); + var hasSource = nodes.some(function (n) { + return n.data('id') === sourceId; + }); + var hasTarget = nodes.some(function (n) { + return n.data('id') === targetId; + }); + return !hasSource || !hasTarget; + }); + this.options.eles = this.options.eles.not(notEdges); +} + +/** + * @brief : runs the layout + */ +CoseLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var layout = this; + layout.stopped = false; + if (options.animate === true || options.animate === false) { + layout.emit({ + type: 'layoutstart', + layout: layout + }); + } + + // Set DEBUG - Global variable + if (true === options.debug) { + DEBUG = true; + } else { + DEBUG = false; + } + + // Initialize layout info + var layoutInfo = createLayoutInfo(cy, layout, options); + + // Show LayoutInfo contents if debugging + if (DEBUG) { + printLayoutInfo(layoutInfo); + } + + // If required, randomize node positions + if (options.randomize) { + randomizePositions(layoutInfo); + } + var startTime = performanceNow(); + var refresh = function refresh() { + refreshPositions(layoutInfo, cy, options); + + // Fit the graph if necessary + if (true === options.fit) { + cy.fit(options.padding); + } + }; + var mainLoop = function mainLoop(i) { + if (layout.stopped || i >= options.numIter) { + // logDebug("Layout manually stopped. Stopping computation in step " + i); + return false; + } + + // Do one step in the phisical simulation + step(layoutInfo, options); + + // Update temperature + layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor; + // logDebug("New temperature: " + layoutInfo.temperature); + + if (layoutInfo.temperature < options.minTemp) { + // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i); + return false; + } + return true; + }; + var done = function done() { + if (options.animate === true || options.animate === false) { + refresh(); + + // Layout has finished + layout.one('layoutstop', options.stop); + layout.emit({ + type: 'layoutstop', + layout: layout + }); + } else { + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.layoutPositions(layout, options, getScaledPos); + } + }; + var i = 0; + var loopRet = true; + if (options.animate === true) { + var frame = function frame() { + var f = 0; + while (loopRet && f < options.refresh) { + loopRet = mainLoop(i); + i++; + f++; + } + if (!loopRet) { + // it's done + separateComponents(layoutInfo, options); + done(); + } else { + var now = performanceNow(); + if (now - startTime >= options.animationThreshold) { + refresh(); + } + requestAnimationFrame(frame); + } + }; + frame(); + } else { + while (loopRet) { + loopRet = mainLoop(i); + i++; + } + separateComponents(layoutInfo, options); + done(); + } + return this; // chaining +}; + +/** + * @brief : called on continuous layouts to stop them before they finish + */ +CoseLayout.prototype.stop = function () { + this.stopped = true; + if (this.thread) { + this.thread.stop(); + } + this.emit('layoutstop'); + return this; // chaining +}; + +CoseLayout.prototype.destroy = function () { + if (this.thread) { + this.thread.stop(); + } + return this; // chaining +}; + +/** + * @brief : Creates an object which is contains all the data + * used in the layout process + * @arg cy : cytoscape.js object + * @return : layoutInfo object initialized + */ +var createLayoutInfo = function createLayoutInfo(cy, layout, options) { + // Shortcut + var edges = options.eles.edges(); + var nodes = options.eles.nodes(); + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var layoutInfo = { + isCompound: cy.hasCompoundNodes(), + layoutNodes: [], + idToIndex: {}, + nodeSize: nodes.size(), + graphSet: [], + indexToGraph: [], + layoutEdges: [], + edgeSize: edges.size(), + temperature: options.initialTemp, + clientWidth: bb.w, + clientHeight: bb.h, + boundingBox: bb + }; + var components = options.eles.components(); + var id2cmptId = {}; + for (var i = 0; i < components.length; i++) { + var component = components[i]; + for (var j = 0; j < component.length; j++) { + var node = component[j]; + id2cmptId[node.id()] = i; + } + } + + // Iterate over all nodes, creating layout nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = nodes[i]; + var nbb = n.layoutDimensions(options); + var tempNode = {}; + tempNode.isLocked = n.locked(); + tempNode.id = n.data('id'); + tempNode.parentId = n.data('parent'); + tempNode.cmptId = id2cmptId[n.id()]; + tempNode.children = []; + tempNode.positionX = n.position('x'); + tempNode.positionY = n.position('y'); + tempNode.offsetX = 0; + tempNode.offsetY = 0; + tempNode.height = nbb.w; + tempNode.width = nbb.h; + tempNode.maxX = tempNode.positionX + tempNode.width / 2; + tempNode.minX = tempNode.positionX - tempNode.width / 2; + tempNode.maxY = tempNode.positionY + tempNode.height / 2; + tempNode.minY = tempNode.positionY - tempNode.height / 2; + tempNode.padLeft = parseFloat(n.style('padding')); + tempNode.padRight = parseFloat(n.style('padding')); + tempNode.padTop = parseFloat(n.style('padding')); + tempNode.padBottom = parseFloat(n.style('padding')); + + // forces + tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion; + + // Add new node + layoutInfo.layoutNodes.push(tempNode); + // Add entry to id-index map + layoutInfo.idToIndex[tempNode.id] = i; + } + + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + var end = -1; // Points to the end of the queue + + var tempGraph = []; + + // Second pass to add child information and + // initialize queue for hierarchical traversal + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + var p_id = n.parentId; + // Check if node n has a parent node + if (null != p_id) { + // Add node Id to parent's list of children + layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id); + } else { + // If a node doesn't have a parent, then it's in the root graph + queue[++end] = n.id; + tempGraph.push(n.id); + } + } + + // Add root graph to graphSet + layoutInfo.graphSet.push(tempGraph); + + // Traverse the graph, level by level, + while (start <= end) { + // Get the node to visit and remove it from queue + var node_id = queue[start++]; + var node_ix = layoutInfo.idToIndex[node_id]; + var node = layoutInfo.layoutNodes[node_ix]; + var children = node.children; + if (children.length > 0) { + // Add children nodes as a new graph to graph set + layoutInfo.graphSet.push(children); + // Add children to que queue to be visited + for (var i = 0; i < children.length; i++) { + queue[++end] = children[i]; + } + } + } + + // Create indexToGraph map + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + for (var j = 0; j < graph.length; j++) { + var index = layoutInfo.idToIndex[graph[j]]; + layoutInfo.indexToGraph[index] = i; + } + } + + // Iterate over all edges, creating Layout Edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + var e = edges[i]; + var tempEdge = {}; + tempEdge.id = e.data('id'); + tempEdge.sourceId = e.data('source'); + tempEdge.targetId = e.data('target'); + + // Compute ideal length + var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength; + var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity; + + // Check if it's an inter graph edge + var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId]; + var targetIx = layoutInfo.idToIndex[tempEdge.targetId]; + var sourceGraph = layoutInfo.indexToGraph[sourceIx]; + var targetGraph = layoutInfo.indexToGraph[targetIx]; + if (sourceGraph != targetGraph) { + // Find lowest common graph ancestor + var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo); + + // Compute sum of node depths, relative to lca graph + var lcaGraph = layoutInfo.graphSet[lca]; + var depth = 0; + + // Source depth + var tempNode = layoutInfo.layoutNodes[sourceIx]; + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } + + // Target depth + tempNode = layoutInfo.layoutNodes[targetIx]; + while (-1 === lcaGraph.indexOf(tempNode.id)) { + tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]]; + depth++; + } + + // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId + + // ". Index: " + lca + " Contents: " + lcaGraph.toString() + + // ". Depth: " + depth); + + // Update idealLength + idealLength *= depth * options.nestingFactor; + } + tempEdge.idealLength = idealLength; + tempEdge.elasticity = elasticity; + layoutInfo.layoutEdges.push(tempEdge); + } + + // Finally, return layoutInfo object + return layoutInfo; +}; + +/** + * @brief : This function finds the index of the lowest common + * graph ancestor between 2 nodes in the subtree + * (from the graph hierarchy induced tree) whose + * root is graphIx + * + * @arg node1: node1's ID + * @arg node2: node2's ID + * @arg layoutInfo: layoutInfo object + * + */ +var findLCA = function findLCA(node1, node2, layoutInfo) { + // Find their common ancester, starting from the root graph + var res = findLCA_aux(node1, node2, 0, layoutInfo); + if (2 > res.count) { + // If aux function couldn't find the common ancester, + // then it is the root graph + return 0; + } else { + return res.graph; + } +}; + +/** + * @brief : Auxiliary function used for LCA computation + * + * @arg node1 : node1's ID + * @arg node2 : node2's ID + * @arg graphIx : subgraph index + * @arg layoutInfo : layoutInfo object + * + * @return : object of the form {count: X, graph: Y}, where: + * X is the number of ancestors (max: 2) found in + * graphIx (and it's subgraphs), + * Y is the graph index of the lowest graph containing + * all X nodes + */ +var findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) { + var graph = layoutInfo.graphSet[graphIx]; + // If both nodes belongs to graphIx + if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) { + return { + count: 2, + graph: graphIx + }; + } + + // Make recursive calls for all subgraphs + var c = 0; + for (var i = 0; i < graph.length; i++) { + var nodeId = graph[i]; + var nodeIx = layoutInfo.idToIndex[nodeId]; + var children = layoutInfo.layoutNodes[nodeIx].children; + + // If the node has no child, skip it + if (0 === children.length) { + continue; + } + var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]]; + var result = findLCA_aux(node1, node2, childGraphIx, layoutInfo); + if (0 === result.count) { + // Neither node1 nor node2 are present in this subgraph + continue; + } else if (1 === result.count) { + // One of (node1, node2) is present in this subgraph + c++; + if (2 === c) { + // We've already found both nodes, no need to keep searching + break; + } + } else { + // Both nodes are present in this subgraph + return result; + } + } + return { + count: c, + graph: graphIx + }; +}; + +/** + * @brief: printsLayoutInfo into js console + * Only used for debbuging + */ +var printLayoutInfo; + +/** + * @brief : Randomizes the position of all nodes + */ +var randomizePositions = function randomizePositions(layoutInfo, cy) { + var width = layoutInfo.clientWidth; + var height = layoutInfo.clientHeight; + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + + // No need to randomize compound nodes or locked nodes + if (0 === n.children.length && !n.isLocked) { + n.positionX = Math.random() * width; + n.positionY = Math.random() * height; + } + } +}; +var getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) { + var bb = layoutInfo.boundingBox; + var coseBB = { + x1: Infinity, + x2: -Infinity, + y1: Infinity, + y2: -Infinity + }; + if (options.boundingBox) { + nodes.forEach(function (node) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]]; + coseBB.x1 = Math.min(coseBB.x1, lnode.positionX); + coseBB.x2 = Math.max(coseBB.x2, lnode.positionX); + coseBB.y1 = Math.min(coseBB.y1, lnode.positionY); + coseBB.y2 = Math.max(coseBB.y2, lnode.positionY); + }); + coseBB.w = coseBB.x2 - coseBB.x1; + coseBB.h = coseBB.y2 - coseBB.y1; + } + return function (ele, i) { + var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]]; + if (options.boundingBox) { + // then add extra bounding box constraint + var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; + var pctY = (lnode.positionY - coseBB.y1) / coseBB.h; + return { + x: bb.x1 + pctX * bb.w, + y: bb.y1 + pctY * bb.h + }; + } else { + return { + x: lnode.positionX, + y: lnode.positionY + }; + } + }; +}; + +/** + * @brief : Updates the positions of nodes in the network + * @arg layoutInfo : LayoutInfo object + * @arg cy : Cytoscape object + * @arg options : Layout options + */ +var refreshPositions = function refreshPositions(layoutInfo, cy, options) { + // var s = 'Refreshing positions'; + // logDebug(s); + + var layout = options.layout; + var nodes = options.eles.nodes(); + var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes); + nodes.positions(getScaledPos); + + // Trigger layoutReady only on first call + if (true !== layoutInfo.ready) { + // s = 'Triggering layoutready'; + // logDebug(s); + layoutInfo.ready = true; + layout.one('layoutready', options.ready); + layout.emit({ + type: 'layoutready', + layout: this + }); + } +}; + +/** + * @brief : Logs a debug message in JS console, if DEBUG is ON + */ +// var logDebug = function(text) { +// if (DEBUG) { +// console.debug(text); +// } +// }; + +/** + * @brief : Performs one iteration of the physical simulation + * @arg layoutInfo : LayoutInfo object already initialized + * @arg cy : Cytoscape object + * @arg options : Layout options + */ +var step = function step(layoutInfo, options, _step) { + // var s = "\n\n###############################"; + // s += "\nSTEP: " + step; + // s += "\n###############################\n"; + // logDebug(s); + + // Calculate node repulsions + calculateNodeForces(layoutInfo, options); + // Calculate edge forces + calculateEdgeForces(layoutInfo); + // Calculate gravity forces + calculateGravityForces(layoutInfo, options); + // Propagate forces from parent to child + propagateForces(layoutInfo); + // Update positions based on calculated forces + updatePositions(layoutInfo); +}; + +/** + * @brief : Computes the node repulsion forces + */ +var calculateNodeForces = function calculateNodeForces(layoutInfo, options) { + // Go through each of the graphs in graphSet + // Nodes only repel each other if they belong to the same graph + // var s = 'calculateNodeForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; + + // s = "Set: " + graph.toString(); + // logDebug(s); + + // Now get all the pairs of nodes + // Only get each pair once, (A, B) = (B, A) + for (var j = 0; j < numNodes; j++) { + var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + for (var k = j + 1; k < numNodes; k++) { + var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]]; + nodeRepulsion(node1, node2, layoutInfo, options); + } + } + } +}; +var randomDistance = function randomDistance(max) { + return -max + 2 * max * Math.random(); +}; + +/** + * @brief : Compute the node repulsion forces between a pair of nodes + */ +var nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) { + // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id; + + var cmptId1 = node1.cmptId; + var cmptId2 = node2.cmptId; + if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) { + return; + } + + // Get direction of line connecting both node centers + var directionX = node2.positionX - node1.positionX; + var directionY = node2.positionY - node1.positionY; + var maxRandDist = 1; + // s += "\ndirectionX: " + directionX + ", directionY: " + directionY; + + // If both centers are the same, apply a random force + if (0 === directionX && 0 === directionY) { + directionX = randomDistance(maxRandDist); + directionY = randomDistance(maxRandDist); + } + var overlap = nodesOverlap(node1, node2, directionX, directionY); + if (overlap > 0) { + // s += "\nNodes DO overlap."; + // s += "\nOverlap: " + overlap; + // If nodes overlap, repulsion force is proportional + // to the overlap + var force = options.nodeOverlap * overlap; + + // Compute the module and components of the force vector + var distance = Math.sqrt(directionX * directionX + directionY * directionY); + // s += "\nDistance: " + distance; + var forceX = force * directionX / distance; + var forceY = force * directionY / distance; + } else { + // s += "\nNodes do NOT overlap."; + // If there's no overlap, force is inversely proportional + // to squared distance + + // Get clipping points for both nodes + var point1 = findClippingPoint(node1, directionX, directionY); + var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY); + + // Use clipping points to compute distance + var distanceX = point2.x - point1.x; + var distanceY = point2.y - point1.y; + var distanceSqr = distanceX * distanceX + distanceY * distanceY; + var distance = Math.sqrt(distanceSqr); + // s += "\nDistance: " + distance; + + // Compute the module and components of the force vector + var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; + var forceX = force * distanceX / distance; + var forceY = force * distanceY / distance; + } + + // Apply force + if (!node1.isLocked) { + node1.offsetX -= forceX; + node1.offsetY -= forceY; + } + if (!node2.isLocked) { + node2.offsetX += forceX; + node2.offsetY += forceY; + } + + // s += "\nForceX: " + forceX + " ForceY: " + forceY; + // logDebug(s); + + return; +}; + +/** + * @brief : Determines whether two nodes overlap or not + * @return : Amount of overlapping (0 => no overlap) + */ +var nodesOverlap = function nodesOverlap(node1, node2, dX, dY) { + if (dX > 0) { + var overlapX = node1.maxX - node2.minX; + } else { + var overlapX = node2.maxX - node1.minX; + } + if (dY > 0) { + var overlapY = node1.maxY - node2.minY; + } else { + var overlapY = node2.maxY - node1.minY; + } + if (overlapX >= 0 && overlapY >= 0) { + return Math.sqrt(overlapX * overlapX + overlapY * overlapY); + } else { + return 0; + } +}; + +/** + * @brief : Finds the point in which an edge (direction dX, dY) intersects + * the rectangular bounding box of it's source/target node + */ +var findClippingPoint = function findClippingPoint(node, dX, dY) { + // Shorcuts + var X = node.positionX; + var Y = node.positionY; + var H = node.height || 1; + var W = node.width || 1; + var dirSlope = dY / dX; + var nodeSlope = H / W; + + // var s = 'Computing clipping point of node ' + node.id + + // " . Height: " + H + ", Width: " + W + + // "\nDirection " + dX + ", " + dY; + // + // Compute intersection + var res = {}; + + // Case: Vertical direction (up) + if (0 === dX && 0 < dY) { + res.x = X; + // s += "\nUp direction"; + res.y = Y + H / 2; + return res; + } + + // Case: Vertical direction (down) + if (0 === dX && 0 > dY) { + res.x = X; + res.y = Y + H / 2; + // s += "\nDown direction"; + + return res; + } + + // Case: Intersects the right border + if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X + W / 2; + res.y = Y + W * dY / 2 / dX; + // s += "\nRightborder"; + + return res; + } + + // Case: Intersects the left border + if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { + res.x = X - W / 2; + res.y = Y - W * dY / 2 / dX; + // s += "\nLeftborder"; + + return res; + } + + // Case: Intersects the top border + if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X + H * dX / 2 / dY; + res.y = Y + H / 2; + // s += "\nTop border"; + + return res; + } + + // Case: Intersects the bottom border + if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { + res.x = X - H * dX / 2 / dY; + res.y = Y - H / 2; + // s += "\nBottom border"; + + return res; + } + + // s += "\nClipping point found at " + res.x + ", " + res.y; + // logDebug(s); + return res; +}; + +/** + * @brief : Calculates all edge forces + */ +var calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) { + // Iterate over all edges + for (var i = 0; i < layoutInfo.edgeSize; i++) { + // Get edge, source & target nodes + var edge = layoutInfo.layoutEdges[i]; + var sourceIx = layoutInfo.idToIndex[edge.sourceId]; + var source = layoutInfo.layoutNodes[sourceIx]; + var targetIx = layoutInfo.idToIndex[edge.targetId]; + var target = layoutInfo.layoutNodes[targetIx]; + + // Get direction of line connecting both node centers + var directionX = target.positionX - source.positionX; + var directionY = target.positionY - source.positionY; + + // If both centers are the same, do nothing. + // A random force has already been applied as node repulsion + if (0 === directionX && 0 === directionY) { + continue; + } + + // Get clipping points for both nodes + var point1 = findClippingPoint(source, directionX, directionY); + var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY); + var lx = point2.x - point1.x; + var ly = point2.y - point1.y; + var l = Math.sqrt(lx * lx + ly * ly); + var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity; + if (0 !== l) { + var forceX = force * lx / l; + var forceY = force * ly / l; + } else { + var forceX = 0; + var forceY = 0; + } + + // Add this force to target and source nodes + if (!source.isLocked) { + source.offsetX += forceX; + source.offsetY += forceY; + } + if (!target.isLocked) { + target.offsetX -= forceX; + target.offsetY -= forceY; + } + + // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id; + // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")"; + // logDebug(s); + } +}; + +/** + * @brief : Computes gravity forces for all nodes + */ +var calculateGravityForces = function calculateGravityForces(layoutInfo, options) { + if (options.gravity === 0) { + return; + } + var distThreshold = 1; + + // var s = 'calculateGravityForces'; + // logDebug(s); + for (var i = 0; i < layoutInfo.graphSet.length; i++) { + var graph = layoutInfo.graphSet[i]; + var numNodes = graph.length; + + // s = "Set: " + graph.toString(); + // logDebug(s); + + // Compute graph center + if (0 === i) { + var centerX = layoutInfo.clientHeight / 2; + var centerY = layoutInfo.clientWidth / 2; + } else { + // Get Parent node for this graph, and use its position as center + var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]]; + var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]]; + var centerX = parent.positionX; + var centerY = parent.positionY; + } + // s = "Center found at: " + centerX + ", " + centerY; + // logDebug(s); + + // Apply force to all nodes in graph + for (var j = 0; j < numNodes; j++) { + var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]]; + // s = "Node: " + node.id; + + if (node.isLocked) { + continue; + } + var dx = centerX - node.positionX; + var dy = centerY - node.positionY; + var d = Math.sqrt(dx * dx + dy * dy); + if (d > distThreshold) { + var fx = options.gravity * dx / d; + var fy = options.gravity * dy / d; + node.offsetX += fx; + node.offsetY += fy; + // s += ": Applied force: " + fx + ", " + fy; + } + // logDebug(s); + } + } +}; + +/** + * @brief : This function propagates the existing offsets from + * parent nodes to its descendents. + * @arg layoutInfo : layoutInfo Object + * @arg cy : cytoscape Object + * @arg options : Layout options + */ +var propagateForces = function propagateForces(layoutInfo, options) { + // Inline implementation of a queue, used for traversing the graph in BFS order + var queue = []; + var start = 0; // Points to the start the queue + var end = -1; // Points to the end of the queue + + // logDebug('propagateForces'); + + // Start by visiting the nodes in the root graph + queue.push.apply(queue, layoutInfo.graphSet[0]); + end += layoutInfo.graphSet[0].length; + + // Traverse the graph, level by level, + while (start <= end) { + // Get the node to visit and remove it from queue + var nodeId = queue[start++]; + var nodeIndex = layoutInfo.idToIndex[nodeId]; + var node = layoutInfo.layoutNodes[nodeIndex]; + var children = node.children; + + // We only need to process the node if it's compound + if (0 < children.length && !node.isLocked) { + var offX = node.offsetX; + var offY = node.offsetY; + + // var s = "Propagating offset from parent node : " + node.id + + // ". OffsetX: " + offX + ". OffsetY: " + offY; + // s += "\n Children: " + children.toString(); + // logDebug(s); + + for (var i = 0; i < children.length; i++) { + var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]]; + // Propagate offset + childNode.offsetX += offX; + childNode.offsetY += offY; + // Add children to queue to be visited + queue[++end] = children[i]; + } + + // Reset parent offsets + node.offsetX = 0; + node.offsetY = 0; + } + } +}; + +/** + * @brief : Updates the layout model positions, based on + * the accumulated forces + */ +var updatePositions = function updatePositions(layoutInfo, options) { + // var s = 'Updating positions'; + // logDebug(s); + + // Reset boundaries for compound nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + if (0 < n.children.length) { + // logDebug("Resetting boundaries of compound node: " + n.id); + n.maxX = undefined; + n.minX = undefined; + n.maxY = undefined; + n.minY = undefined; + } + } + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + if (0 < n.children.length || n.isLocked) { + // No need to set compound or locked node position + // logDebug("Skipping position update of node: " + n.id); + continue; + } + // s = "Node: " + n.id + " Previous position: (" + + // n.positionX + ", " + n.positionY + ")."; + + // Limit displacement in order to improve stability + var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature); + n.positionX += tempForce.x; + n.positionY += tempForce.y; + n.offsetX = 0; + n.offsetY = 0; + n.minX = n.positionX - n.width; + n.maxX = n.positionX + n.width; + n.minY = n.positionY - n.height; + n.maxY = n.positionY + n.height; + // s += " New Position: (" + n.positionX + ", " + n.positionY + ")."; + // logDebug(s); + + // Update ancestry boudaries + updateAncestryBoundaries(n, layoutInfo); + } + + // Update size, position of compund nodes + for (var i = 0; i < layoutInfo.nodeSize; i++) { + var n = layoutInfo.layoutNodes[i]; + if (0 < n.children.length && !n.isLocked) { + n.positionX = (n.maxX + n.minX) / 2; + n.positionY = (n.maxY + n.minY) / 2; + n.width = n.maxX - n.minX; + n.height = n.maxY - n.minY; + // s = "Updating position, size of compound node " + n.id; + // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY; + // s += "\nWidth: " + n.width + ", Height: " + n.height; + // logDebug(s); + } + } +}; + +/** + * @brief : Limits a force (forceX, forceY) to be not + * greater (in modulo) than max. + 8 Preserves force direction. + */ +var limitForce = function limitForce(forceX, forceY, max) { + // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max; + var force = Math.sqrt(forceX * forceX + forceY * forceY); + if (force > max) { + var res = { + x: max * forceX / force, + y: max * forceY / force + }; + } else { + var res = { + x: forceX, + y: forceY + }; + } + + // s += ".\nResult: (" + res.x + ", " + res.y + ")"; + // logDebug(s); + + return res; +}; + +/** + * @brief : Function used for keeping track of compound node + * sizes, since they should bound all their subnodes. + */ +var updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) { + // var s = "Propagating new position/size of node " + node.id; + var parentId = node.parentId; + if (null == parentId) { + // If there's no parent, we are done + // s += ". No parent node."; + // logDebug(s); + return; + } + + // Get Parent Node + var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]]; + var flag = false; + + // MaxX + if (null == p.maxX || node.maxX + p.padRight > p.maxX) { + p.maxX = node.maxX + p.padRight; + flag = true; + // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX; + } + + // MinX + if (null == p.minX || node.minX - p.padLeft < p.minX) { + p.minX = node.minX - p.padLeft; + flag = true; + // s += "\nNew minX for parent node " + p.id + ": " + p.minX; + } + + // MaxY + if (null == p.maxY || node.maxY + p.padBottom > p.maxY) { + p.maxY = node.maxY + p.padBottom; + flag = true; + // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY; + } + + // MinY + if (null == p.minY || node.minY - p.padTop < p.minY) { + p.minY = node.minY - p.padTop; + flag = true; + // s += "\nNew minY for parent node " + p.id + ": " + p.minY; + } + + // If updated boundaries, propagate changes upward + if (flag) { + // logDebug(s); + return updateAncestryBoundaries(p, layoutInfo); + } + + // s += ". No changes in boundaries/position of parent node " + p.id; + // logDebug(s); + return; +}; +var separateComponents = function separateComponents(layoutInfo, options) { + var nodes = layoutInfo.layoutNodes; + var components = []; + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var cid = node.cmptId; + var component = components[cid] = components[cid] || []; + component.push(node); + } + var totalA = 0; + for (var i = 0; i < components.length; i++) { + var c = components[i]; + if (!c) { + continue; + } + c.x1 = Infinity; + c.x2 = -Infinity; + c.y1 = Infinity; + c.y2 = -Infinity; + for (var j = 0; j < c.length; j++) { + var n = c[j]; + c.x1 = Math.min(c.x1, n.positionX - n.width / 2); + c.x2 = Math.max(c.x2, n.positionX + n.width / 2); + c.y1 = Math.min(c.y1, n.positionY - n.height / 2); + c.y2 = Math.max(c.y2, n.positionY + n.height / 2); + } + c.w = c.x2 - c.x1; + c.h = c.y2 - c.y1; + totalA += c.w * c.h; + } + components.sort(function (c1, c2) { + return c2.w * c2.h - c1.w * c1.h; + }); + var x = 0; + var y = 0; + var usedW = 0; + var rowH = 0; + var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight; + for (var i = 0; i < components.length; i++) { + var c = components[i]; + if (!c) { + continue; + } + for (var j = 0; j < c.length; j++) { + var n = c[j]; + if (!n.isLocked) { + n.positionX += x - c.x1; + n.positionY += y - c.y1; + } + } + x += c.w + options.componentSpacing; + usedW += c.w + options.componentSpacing; + rowH = Math.max(rowH, c.h); + if (usedW > maxRowW) { + y += rowH + options.componentSpacing; + x = 0; + usedW = 0; + rowH = 0; + } + } +}; + +var defaults$3 = { + fit: true, + // whether to fit the viewport to the graph + padding: 30, + // padding used on fit + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + avoidOverlap: true, + // prevents node overlap, may overflow boundingBox if not enough space + avoidOverlapPadding: 10, + // extra spacing around nodes when avoidOverlap: true + nodeDimensionsIncludeLabels: false, + // Excludes the label when calculating node bounding boxes for the layout algorithm + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + condense: false, + // uses all available space on false, uses minimal space on true + rows: undefined, + // force num of rows in the grid + cols: undefined, + // force num of columns in the grid + position: function position(node) {}, + // returns { row, col } for element + sort: undefined, + // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function GridLayout(options) { + this.options = extend({}, defaults$3, options); +} +GridLayout.prototype.run = function () { + var params = this.options; + var options = params; + var cy = params.cy; + var eles = options.eles; + var nodes = eles.nodes().not(':parent'); + if (options.sort) { + nodes = nodes.sort(options.sort); + } + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + if (bb.h === 0 || bb.w === 0) { + eles.nodes().layoutPositions(this, options, function (ele) { + return { + x: bb.x1, + y: bb.y1 + }; + }); + } else { + // width/height * splits^2 = cells where splits is number of times to split width + var cells = nodes.size(); + var splits = Math.sqrt(cells * bb.h / bb.w); + var rows = Math.round(splits); + var cols = Math.round(bb.w / bb.h * splits); + var small = function small(val) { + if (val == null) { + return Math.min(rows, cols); + } else { + var min = Math.min(rows, cols); + if (min == rows) { + rows = val; + } else { + cols = val; + } + } + }; + var large = function large(val) { + if (val == null) { + return Math.max(rows, cols); + } else { + var max = Math.max(rows, cols); + if (max == rows) { + rows = val; + } else { + cols = val; + } + } + }; + var oRows = options.rows; + var oCols = options.cols != null ? options.cols : options.columns; + + // if rows or columns were set in options, use those values + if (oRows != null && oCols != null) { + rows = oRows; + cols = oCols; + } else if (oRows != null && oCols == null) { + rows = oRows; + cols = Math.ceil(cells / rows); + } else if (oRows == null && oCols != null) { + cols = oCols; + rows = Math.ceil(cells / cols); + } + + // otherwise use the automatic values and adjust accordingly + + // if rounding was up, see if we can reduce rows or columns + else if (cols * rows > cells) { + var sm = small(); + var lg = large(); + + // reducing the small side takes away the most cells, so try it first + if ((sm - 1) * lg >= cells) { + small(sm - 1); + } else if ((lg - 1) * sm >= cells) { + large(lg - 1); + } + } else { + // if rounding was too low, add rows or columns + while (cols * rows < cells) { + var _sm = small(); + var _lg = large(); + + // try to add to larger side first (adds less in multiplication) + if ((_lg + 1) * _sm >= cells) { + large(_lg + 1); + } else { + small(_sm + 1); + } + } + } + var cellWidth = bb.w / cols; + var cellHeight = bb.h / rows; + if (options.condense) { + cellWidth = 0; + cellHeight = 0; + } + if (options.avoidOverlap) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var pos = node._private.position; + if (pos.x == null || pos.y == null) { + // for bb + pos.x = 0; + pos.y = 0; + } + var nbb = node.layoutDimensions(options); + var p = options.avoidOverlapPadding; + var w = nbb.w + p; + var h = nbb.h + p; + cellWidth = Math.max(cellWidth, w); + cellHeight = Math.max(cellHeight, h); + } + } + var cellUsed = {}; // e.g. 'c-0-2' => true + + var used = function used(row, col) { + return cellUsed['c-' + row + '-' + col] ? true : false; + }; + var use = function use(row, col) { + cellUsed['c-' + row + '-' + col] = true; + }; + + // to keep track of current cell position + var row = 0; + var col = 0; + var moveToNextCell = function moveToNextCell() { + col++; + if (col >= cols) { + col = 0; + row++; + } + }; + + // get a cache of all the manual positions + var id2manPos = {}; + for (var _i = 0; _i < nodes.length; _i++) { + var _node = nodes[_i]; + var rcPos = options.position(_node); + if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { + // must have at least row or col def'd + var _pos = { + row: rcPos.row, + col: rcPos.col + }; + if (_pos.col === undefined) { + // find unused col + _pos.col = 0; + while (used(_pos.row, _pos.col)) { + _pos.col++; + } + } else if (_pos.row === undefined) { + // find unused row + _pos.row = 0; + while (used(_pos.row, _pos.col)) { + _pos.row++; + } + } + id2manPos[_node.id()] = _pos; + use(_pos.row, _pos.col); + } + } + var getPos = function getPos(element, i) { + var x, y; + if (element.locked() || element.isParent()) { + return false; + } + + // see if we have a manual position set + var rcPos = id2manPos[element.id()]; + if (rcPos) { + x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1; + y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1; + } else { + // otherwise set automatically + + while (used(row, col)) { + moveToNextCell(); + } + x = col * cellWidth + cellWidth / 2 + bb.x1; + y = row * cellHeight + cellHeight / 2 + bb.y1; + use(row, col); + moveToNextCell(); + } + return { + x: x, + y: y + }; + }; + nodes.layoutPositions(this, options, getPos); + } + return this; // chaining +}; + +// default layout options +var defaults$2 = { + ready: function ready() {}, + // on layoutready + stop: function stop() {} // on layoutstop +}; + +// constructor +// options : object containing layout options +function NullLayout(options) { + this.options = extend({}, defaults$2, options); +} + +// runs the layout +NullLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; // elements to consider in the layout + var layout = this; + + // cy is automatically populated for us in the constructor + // (disable eslint for next line as this serves as example layout code to external developers) + // eslint-disable-next-line no-unused-vars + options.cy; + layout.emit('layoutstart'); + + // puts all nodes at (0, 0) + // n.b. most layouts would use layoutPositions(), instead of positions() and manual events + eles.nodes().positions(function () { + return { + x: 0, + y: 0 + }; + }); + + // trigger layoutready when each node has had its position set at least once + layout.one('layoutready', options.ready); + layout.emit('layoutready'); + + // trigger layoutstop when the layout stops (e.g. finishes) + layout.one('layoutstop', options.stop); + layout.emit('layoutstop'); + return this; // chaining +}; + +// called on continuous layouts to stop them before they finish +NullLayout.prototype.stop = function () { + return this; // chaining +}; + +var defaults$1 = { + positions: undefined, + // map of (node id) => (position obj); or function(node){ return somPos; } + zoom: undefined, + // the zoom level to set (prob want fit = false if set) + pan: undefined, + // the pan level to set (prob want fit = false if set) + fit: true, + // whether to fit to viewport + padding: 30, + // padding on fit + spacingFactor: undefined, + // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function PresetLayout(options) { + this.options = extend({}, defaults$1, options); +} +PresetLayout.prototype.run = function () { + var options = this.options; + var eles = options.eles; + var nodes = eles.nodes(); + var posIsFn = fn$6(options.positions); + function getPosition(node) { + if (options.positions == null) { + return copyPosition(node.position()); + } + if (posIsFn) { + return options.positions(node); + } + var pos = options.positions[node._private.data.id]; + if (pos == null) { + return null; + } + return pos; + } + nodes.layoutPositions(this, options, function (node, i) { + var position = getPosition(node); + if (node.locked() || position == null) { + return false; + } + return position; + }); + return this; // chaining +}; + +var defaults = { + fit: true, + // whether to fit to viewport + padding: 30, + // fit padding + boundingBox: undefined, + // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h } + animate: false, + // whether to transition the node positions + animationDuration: 500, + // duration of animation in ms if enabled + animationEasing: undefined, + // easing of animation if enabled + animateFilter: function animateFilter(node, i) { + return true; + }, + // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts + ready: undefined, + // callback on layoutready + stop: undefined, + // callback on layoutstop + transform: function transform(node, position) { + return position; + } // transform a given node position. Useful for changing flow direction in discrete layouts +}; + +function RandomLayout(options) { + this.options = extend({}, defaults, options); +} +RandomLayout.prototype.run = function () { + var options = this.options; + var cy = options.cy; + var eles = options.eles; + var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : { + x1: 0, + y1: 0, + w: cy.width(), + h: cy.height() + }); + var getPos = function getPos(node, i) { + return { + x: bb.x1 + Math.round(Math.random() * bb.w), + y: bb.y1 + Math.round(Math.random() * bb.h) + }; + }; + eles.nodes().layoutPositions(this, options, getPos); + return this; // chaining +}; + +var layout = [{ + name: 'breadthfirst', + impl: BreadthFirstLayout +}, { + name: 'circle', + impl: CircleLayout +}, { + name: 'concentric', + impl: ConcentricLayout +}, { + name: 'cose', + impl: CoseLayout +}, { + name: 'grid', + impl: GridLayout +}, { + name: 'null', + impl: NullLayout +}, { + name: 'preset', + impl: PresetLayout +}, { + name: 'random', + impl: RandomLayout +}]; + +function NullRenderer(options) { + this.options = options; + this.notifications = 0; // for testing +} + +var noop = function noop() {}; +var throwImgErr = function throwImgErr() { + throw new Error('A headless instance can not render images'); +}; +NullRenderer.prototype = { + recalculateRenderedStyle: noop, + notify: function notify() { + this.notifications++; + }, + init: noop, + isHeadless: function isHeadless() { + return true; + }, + png: throwImgErr, + jpg: throwImgErr +}; + +var BRp$f = {}; +BRp$f.arrowShapeWidth = 0.3; +BRp$f.registerArrowShapes = function () { + var arrowShapes = this.arrowShapes = {}; + var renderer = this; + + // Contract for arrow shapes: + // 0, 0 is arrow tip + // (0, 1) is direction towards node + // (1, 0) is right + // + // functional api: + // collide: check x, y in shape + // roughCollide: called before collide, no false negatives + // draw: draw + // spacing: dist(arrowTip, nodeBoundary) + // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip + + var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) { + var x1 = translation.x - size / 2 - padding; + var x2 = translation.x + size / 2 + padding; + var y1 = translation.y - size / 2 - padding; + var y2 = translation.y + size / 2 + padding; + var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2; + return inside; + }; + var transform = function transform(x, y, size, angle, translation) { + var xRotated = x * Math.cos(angle) - y * Math.sin(angle); + var yRotated = x * Math.sin(angle) + y * Math.cos(angle); + var xScaled = xRotated * size; + var yScaled = yRotated * size; + var xTranslated = xScaled + translation.x; + var yTranslated = yScaled + translation.y; + return { + x: xTranslated, + y: yTranslated + }; + }; + var transformPoints = function transformPoints(pts, size, angle, translation) { + var retPts = []; + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push(transform(x, y, size, angle, translation)); + } + return retPts; + }; + var pointsToArr = function pointsToArr(pts) { + var ret = []; + for (var i = 0; i < pts.length; i++) { + var p = pts[i]; + ret.push(p.x, p.y); + } + return ret; + }; + var standardGap = function standardGap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2; + }; + var defineArrowShape = function defineArrowShape(name, defn) { + if (string(defn)) { + defn = arrowShapes[defn]; + } + arrowShapes[name] = extend({ + name: name, + points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3], + collide: function collide(x, y, size, angle, translation, padding) { + var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, points); + return inside; + }, + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation) { + var points = transformPoints(this.points, size, angle, translation); + renderer.arrowShapeImpl('polygon')(context, points); + }, + spacing: function spacing(edge) { + return 0; + }, + gap: standardGap + }, defn); + }; + defineArrowShape('none', { + collide: falsify, + roughCollide: falsify, + draw: noop$1, + spacing: zeroify, + gap: zeroify + }); + defineArrowShape('triangle', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3] + }); + defineArrowShape('arrow', 'triangle'); + defineArrowShape('triangle-backcurve', { + points: arrowShapes['triangle'].points, + controlPoint: [0, -0.15], + roughCollide: bbCollide, + draw: function draw(context, size, angle, translation, edgeWidth) { + var ptsTrans = transformPoints(this.points, size, angle, translation); + var ctrlPt = this.controlPoint; + var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans); + }, + gap: function gap(edge) { + return standardGap(edge) * 0.8; + } + }); + defineArrowShape('triangle-tee', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var teePts = transformPoints(this.pointsTee, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, teePts); + } + }); + defineArrowShape('circle-triangle', { + radius: 0.15, + pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15], + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + return pointInsidePolygonPoints(x, y, triPts) || circleInside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.pointsTr, size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('triangle-cross', { + points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0], + baseCrossLinePts: [-0.15, -0.4, + // first half of the rectangle + -0.15, -0.4, 0.15, -0.4, + // second half of the rectangle + 0.15, -0.4], + crossLinePts: function crossLinePts(size, edgeWidth) { + // shift points so that the distance between the cross points matches edge width + var p = this.baseCrossLinePts.slice(); + var shiftFactor = edgeWidth / size; + var y0 = 3; + var y1 = 5; + p[y0] = p[y0] - shiftFactor; + p[y1] = p[y1] - shiftFactor; + return p; + }, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation)); + var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation)); + var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + var triPts = transformPoints(this.points, size, angle, translation); + var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation); + renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts); + } + }); + defineArrowShape('vee', { + points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15], + gap: function gap(edge) { + return standardGap(edge) * 0.525; + } + }); + defineArrowShape('circle', { + radius: 0.15, + collide: function collide(x, y, size, angle, translation, edgeWidth, padding) { + var t = translation; + var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2); + return inside; + }, + draw: function draw(context, size, angle, translation, edgeWidth) { + renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size); + }, + spacing: function spacing(edge) { + return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius; + } + }); + defineArrowShape('tee', { + points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0], + spacing: function spacing(edge) { + return 1; + }, + gap: function gap(edge) { + return 1; + } + }); + defineArrowShape('square', { + points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3] + }); + defineArrowShape('diamond', { + points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0], + gap: function gap(edge) { + return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); + defineArrowShape('chevron', { + points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15], + gap: function gap(edge) { + return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value; + } + }); +}; + +var BRp$e = {}; + +// Project mouse +BRp$e.projectIntoViewport = function (clientX, clientY) { + var cy = this.cy; + var offsets = this.findContainerClientCoords(); + var offsetLeft = offsets[0]; + var offsetTop = offsets[1]; + var scale = offsets[4]; + var pan = cy.pan(); + var zoom = cy.zoom(); + var x = ((clientX - offsetLeft) / scale - pan.x) / zoom; + var y = ((clientY - offsetTop) / scale - pan.y) / zoom; + return [x, y]; +}; +BRp$e.findContainerClientCoords = function () { + if (this.containerBB) { + return this.containerBB; + } + var container = this.container; + var rect = container.getBoundingClientRect(); + var style = this.cy.window().getComputedStyle(container); + var styleValue = function styleValue(name) { + return parseFloat(style.getPropertyValue(name)); + }; + var padding = { + left: styleValue('padding-left'), + right: styleValue('padding-right'), + top: styleValue('padding-top'), + bottom: styleValue('padding-bottom') + }; + var border = { + left: styleValue('border-left-width'), + right: styleValue('border-right-width'), + top: styleValue('border-top-width'), + bottom: styleValue('border-bottom-width') + }; + var clientWidth = container.clientWidth; + var clientHeight = container.clientHeight; + var paddingHor = padding.left + padding.right; + var paddingVer = padding.top + padding.bottom; + var borderHor = border.left + border.right; + var scale = rect.width / (clientWidth + borderHor); + var unscaledW = clientWidth - paddingHor; + var unscaledH = clientHeight - paddingVer; + var left = rect.left + padding.left + border.left; + var top = rect.top + padding.top + border.top; + return this.containerBB = [left, top, unscaledW, unscaledH, scale]; +}; +BRp$e.invalidateContainerClientCoordsCache = function () { + this.containerBB = null; +}; +BRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) { + return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0]; +}; +BRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) { + var self = this; + var r = this; + var eles = r.getCachedZSortedEles(); + var near = []; // 1 node max, 1 edge max + var zoom = r.cy.zoom(); + var hasCompounds = r.cy.hasCompoundNodes(); + var edgeThreshold = (isTouch ? 24 : 8) / zoom; + var nodeThreshold = (isTouch ? 8 : 2) / zoom; + var labelThreshold = (isTouch ? 8 : 2) / zoom; + var minSqDist = Infinity; + var nearEdge; + var nearNode; + if (interactiveElementsOnly) { + eles = eles.interactive; + } + function addEle(ele, sqDist) { + if (ele.isNode()) { + if (nearNode) { + return; // can't replace node + } else { + nearNode = ele; + near.push(ele); + } + } + if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) { + if (nearEdge) { + // then replace existing edge + // can replace only if same z-index + if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) { + for (var i = 0; i < near.length; i++) { + if (near[i].isEdge()) { + near[i] = ele; + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + break; + } + } + } + } else { + near.push(ele); + nearEdge = ele; + minSqDist = sqDist != null ? sqDist : minSqDist; + } + } + } + function checkNode(node) { + var width = node.outerWidth() + 2 * nodeThreshold; + var height = node.outerHeight() + 2 * nodeThreshold; + var hw = width / 2; + var hh = height / 2; + var pos = node.position(); + if (pos.x - hw <= x && x <= pos.x + hw // bb check x + && pos.y - hh <= y && y <= pos.y + hh // bb check y + ) { + var shape = r.nodeShapes[self.getNodeShape(node)]; + if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y)) { + addEle(node, 0); + return true; + } + } + } + function checkEdge(edge) { + var _p = edge._private; + var rs = _p.rscratch; + var styleWidth = edge.pstyle('width').pfValue; + var scale = edge.pstyle('arrow-scale').value; + var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre + var widthSq = width * width; + var width2 = width * 2; + var src = _p.source; + var tgt = _p.target; + var sqDist; + if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') { + var pts = rs.allpts; + for (var i = 0; i + 3 < pts.length; i += 2) { + if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) { + addEle(edge, sqDist); + return true; + } + } + } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + var pts = rs.allpts; + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) { + addEle(edge, sqDist); + return true; + } + } + } + + // if we're close to the edge but didn't hit it, maybe we hit its arrows + + var src = src || _p.source; + var tgt = tgt || _p.target; + var arSize = self.getArrowWidth(styleWidth, scale); + var arrows = [{ + name: 'source', + x: rs.arrowStartX, + y: rs.arrowStartY, + angle: rs.srcArrowAngle + }, { + name: 'target', + x: rs.arrowEndX, + y: rs.arrowEndY, + angle: rs.tgtArrowAngle + }, { + name: 'mid-source', + x: rs.midX, + y: rs.midY, + angle: rs.midsrcArrowAngle + }, { + name: 'mid-target', + x: rs.midX, + y: rs.midY, + angle: rs.midtgtArrowAngle + }]; + for (var i = 0; i < arrows.length; i++) { + var ar = arrows[i]; + var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value]; + var edgeWidth = edge.pstyle('width').pfValue; + if (shape.roughCollide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, { + x: ar.x, + y: ar.y + }, edgeWidth, edgeThreshold)) { + addEle(edge); + return true; + } + } + + // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence) + if (hasCompounds && near.length > 0) { + checkNode(src); + checkNode(tgt); + } + } + function preprop(obj, name, pre) { + return getPrefixedProperty(obj, name, pre); + } + function checkLabel(ele, prefix) { + var _p = ele._private; + var th = labelThreshold; + var prefixDash; + if (prefix) { + prefixDash = prefix + '-'; + } else { + prefixDash = ''; + } + ele.boundingBox(); + var bb = _p.labelBounds[prefix || 'main']; + var text = ele.pstyle(prefixDash + 'label').value; + var eventsEnabled = ele.pstyle('text-events').strValue === 'yes'; + if (!eventsEnabled || !text) { + return; + } + var lx = preprop(_p.rscratch, 'labelX', prefix); + var ly = preprop(_p.rscratch, 'labelY', prefix); + var theta = preprop(_p.rscratch, 'labelAngle', prefix); + var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue; + var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue; + var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin + var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly) + var ly1 = bb.y1 - th - oy; + var ly2 = bb.y2 + th - oy; + if (theta) { + var cos = Math.cos(theta); + var sin = Math.sin(theta); + var rotate = function rotate(x, y) { + x = x - lx; + y = y - ly; + return { + x: x * cos - y * sin + lx, + y: x * sin + y * cos + ly + }; + }; + var px1y1 = rotate(lx1, ly1); + var px1y2 = rotate(lx1, ly2); + var px2y1 = rotate(lx2, ly1); + var px2y2 = rotate(lx2, ly2); + var points = [ + // with the margin added after the rotation is applied + px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy]; + if (pointInsidePolygonPoints(x, y, points)) { + addEle(ele); + return true; + } + } else { + // do a cheaper bb check + if (inBoundingBox(bb, x, y)) { + addEle(ele); + return true; + } + } + } + for (var i = eles.length - 1; i >= 0; i--) { + // reverse order for precedence + var ele = eles[i]; + if (ele.isNode()) { + checkNode(ele) || checkLabel(ele); + } else { + // then edge + checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target'); + } + } + return near; +}; + +// 'Give me everything from this box' +BRp$e.getAllInBox = function (x1, y1, x2, y2) { + var eles = this.getCachedZSortedEles().interactive; + var box = []; + var x1c = Math.min(x1, x2); + var x2c = Math.max(x1, x2); + var y1c = Math.min(y1, y2); + var y2c = Math.max(y1, y2); + x1 = x1c; + x2 = x2c; + y1 = y1c; + y2 = y2c; + var boxBb = makeBoundingBox({ + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }); + for (var e = 0; e < eles.length; e++) { + var ele = eles[e]; + if (ele.isNode()) { + var node = ele; + var nodeBb = node.boundingBox({ + includeNodes: true, + includeEdges: false, + includeLabels: false + }); + if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { + box.push(node); + } + } else { + var edge = ele; + var _p = edge._private; + var rs = _p.rscratch; + if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) { + continue; + } + if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) { + continue; + } + if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') { + var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts; + var allInside = true; + for (var i = 0; i < pts.length; i++) { + if (!pointInBoundingBox(boxBb, pts[i])) { + allInside = false; + break; + } + } + if (allInside) { + box.push(edge); + } + } else if (rs.edgeType === 'haystack' || rs.edgeType === 'straight') { + box.push(edge); + } + } + } + return box; +}; + +var BRp$d = {}; +BRp$d.calculateArrowAngles = function (edge) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + var isBezier = rs.edgeType === 'bezier'; + var isMultibezier = rs.edgeType === 'multibezier'; + var isSegments = rs.edgeType === 'segments'; + var isCompound = rs.edgeType === 'compound'; + var isSelf = rs.edgeType === 'self'; + + // Displacement gives direction for arrowhead orientation + var dispX, dispY; + var startX, startY, endX, endY, midX, midY; + if (isHaystack) { + startX = rs.haystackPts[0]; + startY = rs.haystackPts[1]; + endX = rs.haystackPts[2]; + endY = rs.haystackPts[3]; + } else { + startX = rs.arrowStartX; + startY = rs.arrowStartY; + endX = rs.arrowEndX; + endY = rs.arrowEndY; + } + midX = rs.midX; + midY = rs.midY; + + // source + // + + if (isSegments) { + dispX = startX - rs.segpts[0]; + dispY = startY - rs.segpts[1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1); + var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1); + dispX = startX - bX; + dispY = startY - bY; + } else { + dispX = startX - midX; + dispY = startY - midY; + } + rs.srcArrowAngle = getAngleFromDisp(dispX, dispY); + + // mid target + // + + var midX = rs.midX; + var midY = rs.midY; + if (isHaystack) { + midX = (startX + endX) / 2; + midY = (startY + endY) / 2; + } + dispX = endX - startX; + dispY = endY - startY; + if (isSegments) { + var pts = rs.allpts; + if (pts.length / 2 % 2 === 0) { + var i2 = pts.length / 2; + var i1 = i2 - 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } else { + var i2 = pts.length / 2 - 1; + var i1 = i2 - 2; + var i3 = i2 + 2; + dispX = pts[i2] - pts[i1]; + dispY = pts[i2 + 1] - pts[i1 + 1]; + } + } else if (isMultibezier || isCompound || isSelf) { + var pts = rs.allpts; + var cpts = rs.ctrlpts; + var bp0x, bp0y; + var bp1x, bp1y; + if (cpts.length / 2 % 2 === 0) { + var p0 = pts.length / 2 - 1; // startpt + var ic = p0 + 2; + var p1 = ic + 2; + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001); + } else { + var ic = pts.length / 2 - 1; // ctrpt + var p0 = ic - 2; // startpt + var p1 = ic + 2; // endpt + + bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999); + bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999); + bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5); + bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5); + } + dispX = bp1x - bp0x; + dispY = bp1y - bp0y; + } + rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY); + rs.midDispX = dispX; + rs.midDispY = dispY; + + // mid source + // + + dispX *= -1; + dispY *= -1; + if (isSegments) { + var pts = rs.allpts; + if (pts.length / 2 % 2 === 0) ; else { + var i2 = pts.length / 2 - 1; + var i3 = i2 + 2; + dispX = -(pts[i3] - pts[i2]); + dispY = -(pts[i3 + 1] - pts[i2 + 1]); + } + } + rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY); + + // target + // + + if (isSegments) { + dispX = endX - rs.segpts[rs.segpts.length - 2]; + dispY = endY - rs.segpts[rs.segpts.length - 1]; + } else if (isMultibezier || isCompound || isSelf || isBezier) { + var pts = rs.allpts; + var l = pts.length; + var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9); + var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9); + dispX = endX - bX; + dispY = endY - bY; + } else { + dispX = endX - midX; + dispY = endY - midY; + } + rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY); +}; +BRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) { + var cache = this.arrowWidthCache = this.arrowWidthCache || {}; + var cachedVal = cache[edgeWidth + ', ' + scale]; + if (cachedVal) { + return cachedVal; + } + cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; + cache[edgeWidth + ', ' + scale] = cachedVal; + return cachedVal; +}; + +var BRp$c = {}; +BRp$c.findMidptPtsEtc = function (edge, pairInfo) { + var posPts = pairInfo.posPts, + intersectionPts = pairInfo.intersectionPts, + vectorNormInverse = pairInfo.vectorNormInverse; + var midptPts; + + // n.b. assumes all edges in bezier bundle have same endpoints specified + var srcManEndpt = edge.pstyle('source-endpoint'); + var tgtManEndpt = edge.pstyle('target-endpoint'); + var haveManualEndPts = srcManEndpt.units != null && tgtManEndpt.units != null; + var recalcVectorNormInverse = function recalcVectorNormInverse(x1, y1, x2, y2) { + var dy = y2 - y1; + var dx = x2 - x1; + var l = Math.sqrt(dx * dx + dy * dy); + return { + x: -dy / l, + y: dx / l + }; + }; + var edgeDistances = edge.pstyle('edge-distances').value; + switch (edgeDistances) { + case 'node-position': + midptPts = posPts; + break; + case 'intersection': + midptPts = intersectionPts; + break; + case 'endpoints': + { + if (haveManualEndPts) { + var _this$manualEndptToPx = this.manualEndptToPx(edge.source()[0], srcManEndpt), + _this$manualEndptToPx2 = _slicedToArray(_this$manualEndptToPx, 2), + x1 = _this$manualEndptToPx2[0], + y1 = _this$manualEndptToPx2[1]; + var _this$manualEndptToPx3 = this.manualEndptToPx(edge.target()[0], tgtManEndpt), + _this$manualEndptToPx4 = _slicedToArray(_this$manualEndptToPx3, 2), + x2 = _this$manualEndptToPx4[0], + y2 = _this$manualEndptToPx4[1]; + var endPts = { + x1: x1, + y1: y1, + x2: x2, + y2: y2 + }; + vectorNormInverse = recalcVectorNormInverse(x1, y1, x2, y2); + midptPts = endPts; + } else { + warn("Edge ".concat(edge.id(), " has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")); + midptPts = intersectionPts; // back to default + } + + break; + } + } + return { + midptPts: midptPts, + vectorNormInverse: vectorNormInverse + }; +}; +BRp$c.findHaystackPoints = function (edges) { + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var rs = _p.rscratch; + if (!rs.haystack) { + var angle = Math.random() * 2 * Math.PI; + rs.source = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + angle = Math.random() * 2 * Math.PI; + rs.target = { + x: Math.cos(angle), + y: Math.sin(angle) + }; + } + var src = _p.source; + var tgt = _p.target; + var srcPos = src.position(); + var tgtPos = tgt.position(); + var srcW = src.width(); + var tgtW = tgt.width(); + var srcH = src.height(); + var tgtH = tgt.height(); + var radius = edge.pstyle('haystack-radius').value; + var halfRadius = radius / 2; // b/c have to half width/height + + rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y]; + rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2; + rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2; + + // always override as haystack in case set to different type previously + rs.edgeType = 'haystack'; + rs.haystack = true; + this.storeEdgeProjections(edge); + this.calculateArrowAngles(edge); + this.recalculateEdgeLabelProjections(edge); + this.calculateLabelAngles(edge); + } +}; +BRp$c.findSegmentsPoints = function (edge, pairInfo) { + // Segments (multiple straight lines) + + var rs = edge._private.rscratch; + var segmentWs = edge.pstyle('segment-weights'); + var segmentDs = edge.pstyle('segment-distances'); + var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length); + rs.edgeType = 'segments'; + rs.segpts = []; + for (var s = 0; s < segmentsN; s++) { + var w = segmentWs.pfValue[s]; + var d = segmentDs.pfValue[s]; + var w1 = 1 - w; + var w2 = w; + var _this$findMidptPtsEtc = this.findMidptPtsEtc(edge, pairInfo), + midptPts = _this$findMidptPtsEtc.midptPts, + vectorNormInverse = _this$findMidptPtsEtc.vectorNormInverse; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d); + } +}; +BRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Self-edge + + var rs = edge._private.rscratch; + var dirCounts = pairInfo.dirCounts, + srcPos = pairInfo.srcPos; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var loopDir = edge.pstyle('loop-direction').pfValue; + var loopSwp = edge.pstyle('loop-sweep').pfValue; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + rs.edgeType = 'self'; + var j = i; + var loopDist = stepSize; + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + var loopAngle = loopDir - Math.PI / 2; + var outAngle = loopAngle - loopSwp / 2; + var inAngle = loopAngle + loopSwp / 2; + + // increase by step size for overlapping loops, keyed on direction and sweep values + var dc = String(loopDir + '_' + loopSwp); + j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc]; + rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)]; +}; +BRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) { + // Compound edge + + var rs = edge._private.rscratch; + rs.edgeType = 'compound'; + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var j = i; + var loopDist = stepSize; + if (edgeIsUnbundled) { + j = 0; + loopDist = ctrlptDist; + } + var loopW = 50; + var loopaPos = { + x: srcPos.x - srcW / 2, + y: srcPos.y - srcH / 2 + }; + var loopbPos = { + x: tgtPos.x - tgtW / 2, + y: tgtPos.y - tgtH / 2 + }; + var loopPos = { + x: Math.min(loopaPos.x, loopbPos.x), + y: Math.min(loopaPos.y, loopbPos.y) + }; + + // avoids cases with impossible beziers + var minCompoundStretch = 0.5; + var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * 0.01)); + var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); + rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y]; +}; +BRp$c.findStraightEdgePoints = function (edge) { + // Straight edge within bundle + + edge._private.rscratch.edgeType = 'straight'; +}; +BRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) { + var rs = edge._private.rscratch; + var stepSize = edge.pstyle('control-point-step-size').pfValue; + var ctrlptDists = edge.pstyle('control-point-distances'); + var ctrlptWs = edge.pstyle('control-point-weights'); + var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1; + var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined; + var ctrlptWeight = ctrlptWs.value[0]; + + // (Multi)bezier + + var multi = edgeIsUnbundled; + rs.edgeType = multi ? 'multibezier' : 'bezier'; + rs.ctrlpts = []; + for (var b = 0; b < bezierN; b++) { + var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1); + var manctrlptDist = void 0; + var sign = signum(normctrlptDist); + if (multi) { + ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size + ctrlptWeight = ctrlptWs.value[b]; + } + if (edgeIsUnbundled) { + // multi or single unbundled + manctrlptDist = ctrlptDist; + } else { + manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined; + } + var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist; + var w1 = 1 - ctrlptWeight; + var w2 = ctrlptWeight; + var _this$findMidptPtsEtc2 = this.findMidptPtsEtc(edge, pairInfo), + midptPts = _this$findMidptPtsEtc2.midptPts, + vectorNormInverse = _this$findMidptPtsEtc2.vectorNormInverse; + var adjustedMidpt = { + x: midptPts.x1 * w1 + midptPts.x2 * w2, + y: midptPts.y1 * w1 + midptPts.y2 * w2 + }; + rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint); + } +}; +BRp$c.findTaxiPoints = function (edge, pairInfo) { + // Taxicab geometry with two turns maximum + + var rs = edge._private.rscratch; + rs.edgeType = 'segments'; + var VERTICAL = 'vertical'; + var HORIZONTAL = 'horizontal'; + var LEFTWARD = 'leftward'; + var RIGHTWARD = 'rightward'; + var DOWNWARD = 'downward'; + var UPWARD = 'upward'; + var AUTO = 'auto'; + var posPts = pairInfo.posPts, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH; + var edgeDistances = edge.pstyle('edge-distances').value; + var dIncludesNodeBody = edgeDistances !== 'node-position'; + var taxiDir = edge.pstyle('taxi-direction').value; + var rawTaxiDir = taxiDir; // unprocessed value + var taxiTurn = edge.pstyle('taxi-turn'); + var turnIsPercent = taxiTurn.units === '%'; + var taxiTurnPfVal = taxiTurn.pfValue; + var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side + var minD = edge.pstyle('taxi-turn-min-distance').pfValue; + var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0; + var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0; + var pdx = posPts.x2 - posPts.x1; + var pdy = posPts.y2 - posPts.y1; + + // take away the effective w/h from the magnitude of the delta value + var subDWH = function subDWH(dxy, dwh) { + if (dxy > 0) { + return Math.max(dxy - dwh, 0); + } else { + return Math.min(dxy + dwh, 0); + } + }; + var dx = subDWH(pdx, dw); + var dy = subDWH(pdy, dh); + var isExplicitDir = false; + if (rawTaxiDir === AUTO) { + taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL; + } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) { + taxiDir = VERTICAL; + isExplicitDir = true; + } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) { + taxiDir = HORIZONTAL; + isExplicitDir = true; + } + var isVert = taxiDir === VERTICAL; + var l = isVert ? dy : dx; + var pl = isVert ? pdy : pdx; + var sgnL = signum(pl); + var forcedDir = false; + if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction + && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) { + sgnL *= -1; + l = sgnL * Math.abs(l); + forcedDir = true; + } + var d; + if (turnIsPercent) { + var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; + d = p * l; + } else { + var k = taxiTurnPfVal < 0 ? l : 0; + d = k + taxiTurnPfVal * sgnL; + } + var getIsTooClose = function getIsTooClose(d) { + return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l); + }; + var isTooCloseSrc = getIsTooClose(d); + var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d)); + var isTooClose = isTooCloseSrc || isTooCloseTgt; + if (isTooClose && !forcedDir) { + // non-ideal routing + if (isVert) { + // vertical fallbacks + var lShapeInsideSrc = Math.abs(pl) <= srcH / 2; + var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2; + if (lShapeInsideSrc) { + // horizontal Z-shape (direction not respected) + var x = (posPts.x1 + posPts.x2) / 2; + var y1 = posPts.y1, + y2 = posPts.y2; + rs.segpts = [x, y1, x, y2]; + } else if (lShapeInsideTgt) { + // vertical Z-shape (distance not respected) + var y = (posPts.y1 + posPts.y2) / 2; + var x1 = posPts.x1, + x2 = posPts.x2; + rs.segpts = [x1, y, x2, y]; + } else { + // L-shape fallback (turn distance not respected, but works well with tree siblings) + rs.segpts = [posPts.x1, posPts.y2]; + } + } else { + // horizontal fallbacks + var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2; + var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2; + if (_lShapeInsideSrc) { + // vertical Z-shape (direction not respected) + var _y = (posPts.y1 + posPts.y2) / 2; + var _x = posPts.x1, + _x2 = posPts.x2; + rs.segpts = [_x, _y, _x2, _y]; + } else if (_lShapeInsideTgt) { + // horizontal Z-shape (turn distance not respected) + var _x3 = (posPts.x1 + posPts.x2) / 2; + var _y2 = posPts.y1, + _y3 = posPts.y2; + rs.segpts = [_x3, _y2, _x3, _y3]; + } else { + // L-shape (turn distance not respected, but works well for tree siblings) + rs.segpts = [posPts.x2, posPts.y1]; + } + } + } else { + // ideal routing + if (isVert) { + var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); + var _x4 = posPts.x1, + _x5 = posPts.x2; + rs.segpts = [_x4, _y4, _x5, _y4]; + } else { + // horizontal + var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0); + var _y5 = posPts.y1, + _y6 = posPts.y2; + rs.segpts = [_x6, _y5, _x6, _y6]; + } + } +}; +BRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) { + var rs = edge._private.rscratch; + + // can only correct beziers for now... + if (rs.edgeType === 'bezier') { + var srcPos = pairInfo.srcPos, + tgtPos = pairInfo.tgtPos, + srcW = pairInfo.srcW, + srcH = pairInfo.srcH, + tgtW = pairInfo.tgtW, + tgtH = pairInfo.tgtH, + srcShape = pairInfo.srcShape, + tgtShape = pairInfo.tgtShape; + var badStart = !number$1(rs.startX) || !number$1(rs.startY); + var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY); + var badEnd = !number$1(rs.endX) || !number$1(rs.endY); + var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY); + var minCpADistFactor = 3; + var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; + var minCpADist = minCpADistFactor * arrowW; + var startACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.startX, + y: rs.startY + }); + var closeStartACp = startACpDist < minCpADist; + var endACpDist = dist({ + x: rs.ctrlpts[0], + y: rs.ctrlpts[1] + }, { + x: rs.endX, + y: rs.endY + }); + var closeEndACp = endACpDist < minCpADist; + var overlapping = false; + if (badStart || badAStart || closeStartACp) { + overlapping = true; + + // project control point along line from src centre to outside the src shape + // (otherwise intersection will yield nothing) + var cpD = { + // delta + x: rs.ctrlpts[0] - srcPos.x, + y: rs.ctrlpts[1] - srcPos.y + }; + var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line + var cpM = { + // normalised delta + x: cpD.x / cpL, + y: cpD.y / cpL + }; + var radius = Math.max(srcW, srcH); + var cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + cpM.x * 2 * radius, + y: rs.ctrlpts[1] + cpM.y * 2 * radius + }; + var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0); + if (closeStartACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist); + } else { + rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist; + rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist; + } + } + if (badEnd || badAEnd || closeEndACp) { + overlapping = true; + + // project control point along line from tgt centre to outside the tgt shape + // (otherwise intersection will yield nothing) + var _cpD = { + // delta + x: rs.ctrlpts[0] - tgtPos.x, + y: rs.ctrlpts[1] - tgtPos.y + }; + var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line + var _cpM = { + // normalised delta + x: _cpD.x / _cpL, + y: _cpD.y / _cpL + }; + var _radius = Math.max(srcW, srcH); + var _cpProj = { + // *2 radius guarantees outside shape + x: rs.ctrlpts[0] + _cpM.x * 2 * _radius, + y: rs.ctrlpts[1] + _cpM.y * 2 * _radius + }; + var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0); + if (closeEndACp) { + rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist); + rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist); + } else { + rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist; + rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist; + } + } + if (overlapping) { + // recalc endpts + this.findEndpoints(edge); + } + } +}; +BRp$c.storeAllpts = function (edge) { + var rs = edge._private.rscratch; + if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) { + // ctrl pt itself + rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]); + + // the midpt between ctrlpts as intermediate destination pts + if (b + 3 < rs.ctrlpts.length) { + rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2); + } + } + rs.allpts.push(rs.endX, rs.endY); + var m, mt; + if (rs.ctrlpts.length / 2 % 2 === 0) { + m = rs.allpts.length / 2 - 1; + rs.midX = rs.allpts[m]; + rs.midY = rs.allpts[m + 1]; + } else { + m = rs.allpts.length / 2 - 3; + mt = 0.5; + rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt); + rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt); + } + } else if (rs.edgeType === 'straight') { + // need to calc these after endpts + rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY]; + + // default midpt for labels etc + rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4; + rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4; + } else if (rs.edgeType === 'segments') { + rs.allpts = []; + rs.allpts.push(rs.startX, rs.startY); + rs.allpts.push.apply(rs.allpts, rs.segpts); + rs.allpts.push(rs.endX, rs.endY); + if (rs.segpts.length % 4 === 0) { + var i2 = rs.segpts.length / 2; + var i1 = i2 - 2; + rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2; + rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2; + } else { + var _i = rs.segpts.length / 2 - 1; + rs.midX = rs.segpts[_i]; + rs.midY = rs.segpts[_i + 1]; + } + } +}; +BRp$c.checkForInvalidEdgeWarning = function (edge) { + var rs = edge[0]._private.rscratch; + if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) { + rs.loggedErr = false; + } else { + if (!rs.loggedErr) { + rs.loggedErr = true; + warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.'); + } + } +}; +BRp$c.findEdgeControlPoints = function (edges) { + var _this = this; + if (!edges || edges.length === 0) { + return; + } + var r = this; + var cy = r.cy; + var hasCompounds = cy.hasCompoundNodes(); + var hashTable = { + map: new Map$1(), + get: function get(pairId) { + var map2 = this.map.get(pairId[0]); + if (map2 != null) { + return map2.get(pairId[1]); + } else { + return null; + } + }, + set: function set(pairId, val) { + var map2 = this.map.get(pairId[0]); + if (map2 == null) { + map2 = new Map$1(); + this.map.set(pairId[0], map2); + } + map2.set(pairId[1], val); + } + }; + var pairIds = []; + var haystackEdges = []; + + // create a table of edge (src, tgt) => list of edges between them + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + var _p = edge._private; + var curveStyle = edge.pstyle('curve-style').value; + + // ignore edges who are not to be displayed + // they shouldn't take up space + if (edge.removed() || !edge.takesUpSpace()) { + continue; + } + if (curveStyle === 'haystack') { + haystackEdges.push(edge); + continue; + } + var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments' || curveStyle === 'straight' || curveStyle === 'straight-triangle' || curveStyle === 'taxi'; + var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier'; + var src = _p.source; + var tgt = _p.target; + var srcIndex = src.poolIndex(); + var tgtIndex = tgt.poolIndex(); + var pairId = [srcIndex, tgtIndex].sort(); + var tableEntry = hashTable.get(pairId); + if (tableEntry == null) { + tableEntry = { + eles: [] + }; + hashTable.set(pairId, tableEntry); + pairIds.push(pairId); + } + tableEntry.eles.push(edge); + if (edgeIsUnbundled) { + tableEntry.hasUnbundled = true; + } + if (edgeIsBezier) { + tableEntry.hasBezier = true; + } + } + + // for each pair (src, tgt), create the ctrl pts + // Nested for loop is OK; total number of iterations for both loops = edgeCount + var _loop = function _loop(p) { + var pairId = pairIds[p]; + var pairInfo = hashTable.get(pairId); + var swappedpairInfo = void 0; + if (!pairInfo.hasUnbundled) { + var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) { + return e.isBundledBezier(); + }); + clearArray(pairInfo.eles); + pllEdges.forEach(function (edge) { + return pairInfo.eles.push(edge); + }); + + // for each pair id, the edges should be sorted by index + pairInfo.eles.sort(function (edge1, edge2) { + return edge1.poolIndex() - edge2.poolIndex(); + }); + } + var firstEdge = pairInfo.eles[0]; + var src = firstEdge.source(); + var tgt = firstEdge.target(); + + // make sure src/tgt distinction is consistent w.r.t. pairId + if (src.poolIndex() > tgt.poolIndex()) { + var temp = src; + src = tgt; + tgt = temp; + } + var srcPos = pairInfo.srcPos = src.position(); + var tgtPos = pairInfo.tgtPos = tgt.position(); + var srcW = pairInfo.srcW = src.outerWidth(); + var srcH = pairInfo.srcH = src.outerHeight(); + var tgtW = pairInfo.tgtW = tgt.outerWidth(); + var tgtH = pairInfo.tgtH = tgt.outerHeight(); + var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)]; + var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)]; + pairInfo.dirCounts = { + 'north': 0, + 'west': 0, + 'south': 0, + 'east': 0, + 'northwest': 0, + 'southwest': 0, + 'northeast': 0, + 'southeast': 0 + }; + for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) { + var _edge = pairInfo.eles[_i2]; + var rs = _edge[0]._private.rscratch; + var _curveStyle = _edge.pstyle('curve-style').value; + var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || _curveStyle === 'segments' || _curveStyle === 'taxi'; + + // whether the normalised pair order is the reverse of the edge's src-tgt order + var edgeIsSwapped = !src.same(_edge.source()); + if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) { + pairInfo.calculatedIntersection = true; + + // pt outside src shape to calc distance/displacement from src to tgt + var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0); + var srcIntn = pairInfo.srcIntn = srcOutside; + + // pt outside tgt shape to calc distance/displacement from src to tgt + var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0); + var tgtIntn = pairInfo.tgtIntn = tgtOutside; + var intersectionPts = pairInfo.intersectionPts = { + x1: srcOutside[0], + x2: tgtOutside[0], + y1: srcOutside[1], + y2: tgtOutside[1] + }; + var posPts = pairInfo.posPts = { + x1: srcPos.x, + x2: tgtPos.x, + y1: srcPos.y, + y2: tgtPos.y + }; + var dy = tgtOutside[1] - srcOutside[1]; + var dx = tgtOutside[0] - srcOutside[0]; + var l = Math.sqrt(dx * dx + dy * dy); + var vector = pairInfo.vector = { + x: dx, + y: dy + }; + var vectorNorm = pairInfo.vectorNorm = { + x: vector.x / l, + y: vector.y / l + }; + var vectorNormInverse = { + x: -vectorNorm.y, + y: vectorNorm.x + }; + + // if node shapes overlap, then no ctrl pts to draw + pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y); + pairInfo.vectorNormInverse = vectorNormInverse; + swappedpairInfo = { + nodesOverlap: pairInfo.nodesOverlap, + dirCounts: pairInfo.dirCounts, + calculatedIntersection: true, + hasBezier: pairInfo.hasBezier, + hasUnbundled: pairInfo.hasUnbundled, + eles: pairInfo.eles, + srcPos: tgtPos, + tgtPos: srcPos, + srcW: tgtW, + srcH: tgtH, + tgtW: srcW, + tgtH: srcH, + srcIntn: tgtIntn, + tgtIntn: srcIntn, + srcShape: tgtShape, + tgtShape: srcShape, + posPts: { + x1: posPts.x2, + y1: posPts.y2, + x2: posPts.x1, + y2: posPts.y1 + }, + intersectionPts: { + x1: intersectionPts.x2, + y1: intersectionPts.y2, + x2: intersectionPts.x1, + y2: intersectionPts.y1 + }, + vector: { + x: -vector.x, + y: -vector.y + }, + vectorNorm: { + x: -vectorNorm.x, + y: -vectorNorm.y + }, + vectorNormInverse: { + x: -vectorNormInverse.x, + y: -vectorNormInverse.y + } + }; + } + var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo; + rs.nodesOverlap = passedPairInfo.nodesOverlap; + rs.srcIntn = passedPairInfo.srcIntn; + rs.tgtIntn = passedPairInfo.tgtIntn; + if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) { + _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (src === tgt) { + _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled); + } else if (_curveStyle === 'segments') { + _this.findSegmentsPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'taxi') { + _this.findTaxiPoints(_edge, passedPairInfo); + } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) { + _this.findStraightEdgePoints(_edge); + } else { + _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped); + } + _this.findEndpoints(_edge); + _this.tryToCorrectInvalidPoints(_edge, passedPairInfo); + _this.checkForInvalidEdgeWarning(_edge); + _this.storeAllpts(_edge); + _this.storeEdgeProjections(_edge); + _this.calculateArrowAngles(_edge); + _this.recalculateEdgeLabelProjections(_edge); + _this.calculateLabelAngles(_edge); + } // for pair edges + }; + for (var p = 0; p < pairIds.length; p++) { + _loop(p); + } // for pair ids + + // haystacks avoid the expense of pairInfo stuff (intersections etc.) + this.findHaystackPoints(haystackEdges); +}; +function getPts(pts) { + var retPts = []; + if (pts == null) { + return; + } + for (var i = 0; i < pts.length; i += 2) { + var x = pts[i]; + var y = pts[i + 1]; + retPts.push({ + x: x, + y: y + }); + } + return retPts; +} +BRp$c.getSegmentPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + if (type === 'segments') { + this.recalculateRenderedStyle(edge); + return getPts(rs.segpts); + } +}; +BRp$c.getControlPoints = function (edge) { + var rs = edge[0]._private.rscratch; + var type = rs.edgeType; + if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') { + this.recalculateRenderedStyle(edge); + return getPts(rs.ctrlpts); + } +}; +BRp$c.getEdgeMidpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + return { + x: rs.midX, + y: rs.midY + }; +}; + +var BRp$b = {}; +BRp$b.manualEndptToPx = function (node, prop) { + var r = this; + var npos = node.position(); + var w = node.outerWidth(); + var h = node.outerHeight(); + if (prop.value.length === 2) { + var p = [prop.pfValue[0], prop.pfValue[1]]; + if (prop.units[0] === '%') { + p[0] = p[0] * w; + } + if (prop.units[1] === '%') { + p[1] = p[1] * h; + } + p[0] += npos.x; + p[1] += npos.y; + return p; + } else { + var angle = prop.pfValue[0]; + angle = -Math.PI / 2 + angle; // start at 12 o'clock + + var l = 2 * Math.max(w, h); + var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l]; + return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0); + } +}; +BRp$b.findEndpoints = function (edge) { + var r = this; + var intersect; + var source = edge.source()[0]; + var target = edge.target()[0]; + var srcPos = source.position(); + var tgtPos = target.position(); + var tgtArShape = edge.pstyle('target-arrow-shape').value; + var srcArShape = edge.pstyle('source-arrow-shape').value; + var tgtDist = edge.pstyle('target-distance-from-node').pfValue; + var srcDist = edge.pstyle('source-distance-from-node').pfValue; + var curveStyle = edge.pstyle('curve-style').value; + var rs = edge._private.rscratch; + var et = rs.edgeType; + var taxi = curveStyle === 'taxi'; + var self = et === 'self' || et === 'compound'; + var bezier = et === 'bezier' || et === 'multibezier' || self; + var multi = et !== 'bezier'; + var lines = et === 'straight' || et === 'segments'; + var segments = et === 'segments'; + var hasEndpts = bezier || multi || lines; + var overrideEndpts = self || taxi; + var srcManEndpt = edge.pstyle('source-endpoint'); + var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value; + var tgtManEndpt = edge.pstyle('target-endpoint'); + var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value; + rs.srcManEndpt = srcManEndpt; + rs.tgtManEndpt = tgtManEndpt; + var p1; // last known point of edge on target side + var p2; // last known point of edge on source side + + var p1_i; // point to intersect with target shape + var p2_i; // point to intersect with source shape + + if (bezier) { + var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]]; + var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart; + p1 = cpEnd; + p2 = cpStart; + } else if (lines) { + var srcArrowFromPt = !segments ? [tgtPos.x, tgtPos.y] : rs.segpts.slice(0, 2); + var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : rs.segpts.slice(rs.segpts.length - 2); + p1 = tgtArrowFromPt; + p2 = srcArrowFromPt; + } + if (tgtManEndptVal === 'inside-to-node') { + intersect = [tgtPos.x, tgtPos.y]; + } else if (tgtManEndpt.units) { + intersect = this.manualEndptToPx(target, tgtManEndpt); + } else if (tgtManEndptVal === 'outside-to-line') { + intersect = rs.tgtIntn; // use cached value from ctrlpt calc + } else { + if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') { + p1_i = p1; + } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') { + p1_i = [srcPos.x, srcPos.y]; + } + intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0); + if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') { + var trs = target._private.rscratch; + var lw = trs.labelWidth; + var lh = trs.labelHeight; + var lx = trs.labelX; + var ly = trs.labelY; + var lw2 = lw / 2; + var lh2 = lh / 2; + var va = target.pstyle('text-valign').value; + if (va === 'top') { + ly -= lh2; + } else if (va === 'bottom') { + ly += lh2; + } + var ha = target.pstyle('text-halign').value; + if (ha === 'left') { + lx -= lw2; + } else if (ha === 'right') { + lx += lw2; + } + var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y); + if (labelIntersect.length > 0) { + var refPt = srcPos; + var intSqdist = sqdist(refPt, array2point(intersect)); + var labIntSqdist = sqdist(refPt, array2point(labelIntersect)); + var minSqDist = intSqdist; + if (labIntSqdist < intSqdist) { + intersect = labelIntersect; + minSqDist = labIntSqdist; + } + if (labelIntersect.length > 2) { + var labInt2SqDist = sqdist(refPt, { + x: labelIntersect[2], + y: labelIntersect[3] + }); + if (labInt2SqDist < minSqDist) { + intersect = [labelIntersect[2], labelIntersect[3]]; + } + } + } + } + } + var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist); + var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist); + rs.endX = edgeEnd[0]; + rs.endY = edgeEnd[1]; + rs.arrowEndX = arrowEnd[0]; + rs.arrowEndY = arrowEnd[1]; + if (srcManEndptVal === 'inside-to-node') { + intersect = [srcPos.x, srcPos.y]; + } else if (srcManEndpt.units) { + intersect = this.manualEndptToPx(source, srcManEndpt); + } else if (srcManEndptVal === 'outside-to-line') { + intersect = rs.srcIntn; // use cached value from ctrlpt calc + } else { + if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') { + p2_i = p2; + } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') { + p2_i = [tgtPos.x, tgtPos.y]; + } + intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0); + if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') { + var srs = source._private.rscratch; + var _lw = srs.labelWidth; + var _lh = srs.labelHeight; + var _lx = srs.labelX; + var _ly = srs.labelY; + var _lw2 = _lw / 2; + var _lh2 = _lh / 2; + var _va = source.pstyle('text-valign').value; + if (_va === 'top') { + _ly -= _lh2; + } else if (_va === 'bottom') { + _ly += _lh2; + } + var _ha = source.pstyle('text-halign').value; + if (_ha === 'left') { + _lx -= _lw2; + } else if (_ha === 'right') { + _lx += _lw2; + } + var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y); + if (_labelIntersect.length > 0) { + var _refPt = tgtPos; + var _intSqdist = sqdist(_refPt, array2point(intersect)); + var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect)); + var _minSqDist = _intSqdist; + if (_labIntSqdist < _intSqdist) { + intersect = [_labelIntersect[0], _labelIntersect[1]]; + _minSqDist = _labIntSqdist; + } + if (_labelIntersect.length > 2) { + var _labInt2SqDist = sqdist(_refPt, { + x: _labelIntersect[2], + y: _labelIntersect[3] + }); + if (_labInt2SqDist < _minSqDist) { + intersect = [_labelIntersect[2], _labelIntersect[3]]; + } + } + } + } + } + var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist); + var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist); + rs.startX = edgeStart[0]; + rs.startY = edgeStart[1]; + rs.arrowStartX = arrowStart[0]; + rs.arrowStartY = arrowStart[1]; + if (hasEndpts) { + if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) { + rs.badLine = true; + } else { + rs.badLine = false; + } + } +}; +BRp$b.getSourceEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[0], + y: rs.haystackPts[1] + }; + default: + return { + x: rs.arrowStartX, + y: rs.arrowStartY + }; + } +}; +BRp$b.getTargetEndpoint = function (edge) { + var rs = edge[0]._private.rscratch; + this.recalculateRenderedStyle(edge); + switch (rs.edgeType) { + case 'haystack': + return { + x: rs.haystackPts[2], + y: rs.haystackPts[3] + }; + default: + return { + x: rs.arrowEndX, + y: rs.arrowEndY + }; + } +}; + +var BRp$a = {}; +function pushBezierPts(r, edge, pts) { + var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) { + return qbezierAt(p1, p2, p3, t); + }; + var _p = edge._private; + var bpts = _p.rstyle.bezierPts; + for (var i = 0; i < r.bezierProjPcts.length; i++) { + var p = r.bezierProjPcts[i]; + bpts.push({ + x: qbezierAt$1(pts[0], pts[2], pts[4], p), + y: qbezierAt$1(pts[1], pts[3], pts[5], p) + }); + } +} +BRp$a.storeEdgeProjections = function (edge) { + var _p = edge._private; + var rs = _p.rscratch; + var et = rs.edgeType; + + // clear the cached points state + _p.rstyle.bezierPts = null; + _p.rstyle.linePts = null; + _p.rstyle.haystackPts = null; + if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') { + _p.rstyle.bezierPts = []; + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + pushBezierPts(this, edge, rs.allpts.slice(i, i + 6)); + } + } else if (et === 'segments') { + var lpts = _p.rstyle.linePts = []; + for (var i = 0; i + 1 < rs.allpts.length; i += 2) { + lpts.push({ + x: rs.allpts[i], + y: rs.allpts[i + 1] + }); + } + } else if (et === 'haystack') { + var hpts = rs.haystackPts; + _p.rstyle.haystackPts = [{ + x: hpts[0], + y: hpts[1] + }, { + x: hpts[2], + y: hpts[3] + }]; + } + _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth; +}; +BRp$a.recalculateEdgeProjections = function (edges) { + this.findEdgeControlPoints(edges); +}; + +/* global document */ + +var BRp$9 = {}; +BRp$9.recalculateNodeLabelProjection = function (node) { + var content = node.pstyle('label').strValue; + if (emptyString(content)) { + return; + } + var textX, textY; + var _p = node._private; + var nodeWidth = node.width(); + var nodeHeight = node.height(); + var padding = node.padding(); + var nodePos = node.position(); + var textHalign = node.pstyle('text-halign').strValue; + var textValign = node.pstyle('text-valign').strValue; + var rs = _p.rscratch; + var rstyle = _p.rstyle; + switch (textHalign) { + case 'left': + textX = nodePos.x - nodeWidth / 2 - padding; + break; + case 'right': + textX = nodePos.x + nodeWidth / 2 + padding; + break; + default: + // e.g. center + textX = nodePos.x; + } + switch (textValign) { + case 'top': + textY = nodePos.y - nodeHeight / 2 - padding; + break; + case 'bottom': + textY = nodePos.y + nodeHeight / 2 + padding; + break; + default: + // e.g. middle + textY = nodePos.y; + } + rs.labelX = textX; + rs.labelY = textY; + rstyle.labelX = textX; + rstyle.labelY = textY; + this.calculateLabelAngles(node); + this.applyLabelDimensions(node); +}; +var lineAngleFromDelta = function lineAngleFromDelta(dx, dy) { + var angle = Math.atan(dy / dx); + if (dx === 0 && angle < 0) { + angle = angle * -1; + } + return angle; +}; +var lineAngle = function lineAngle(p0, p1) { + var dx = p1.x - p0.x; + var dy = p1.y - p0.y; + return lineAngleFromDelta(dx, dy); +}; +var bezierAngle = function bezierAngle(p0, p1, p2, t) { + var t0 = bound(0, t - 0.001, 1); + var t1 = bound(0, t + 0.001, 1); + var lp0 = qbezierPtAt(p0, p1, p2, t0); + var lp1 = qbezierPtAt(p0, p1, p2, t1); + return lineAngle(lp0, lp1); +}; +BRp$9.recalculateEdgeLabelProjections = function (edge) { + var p; + var _p = edge._private; + var rs = _p.rscratch; + var r = this; + var content = { + mid: edge.pstyle('label').strValue, + source: edge.pstyle('source-label').strValue, + target: edge.pstyle('target-label').strValue + }; + if (content.mid || content.source || content.target) ; else { + return; // no labels => no calcs + } + + // add center point to style so bounding box calculations can use it + // + p = { + x: rs.midX, + y: rs.midY + }; + var setRs = function setRs(propName, prefix, value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + setPrefixedProperty(_p.rstyle, propName, prefix, value); + }; + setRs('labelX', null, p.x); + setRs('labelY', null, p.y); + var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY); + setRs('labelAutoAngle', null, midAngle); + var createControlPointInfo = function createControlPointInfo() { + if (createControlPointInfo.cache) { + return createControlPointInfo.cache; + } // use cache so only 1x per edge + + var ctrlpts = []; + + // store each ctrlpt info init + for (var i = 0; i + 5 < rs.allpts.length; i += 4) { + var p0 = { + x: rs.allpts[i], + y: rs.allpts[i + 1] + }; + var p1 = { + x: rs.allpts[i + 2], + y: rs.allpts[i + 3] + }; // ctrlpt + var p2 = { + x: rs.allpts[i + 4], + y: rs.allpts[i + 5] + }; + ctrlpts.push({ + p0: p0, + p1: p1, + p2: p2, + startDist: 0, + length: 0, + segments: [] + }); + } + var bpts = _p.rstyle.bezierPts; + var nProjs = r.bezierProjPcts.length; + function addSegment(cp, p0, p1, t0, t1) { + var length = dist(p0, p1); + var prevSegment = cp.segments[cp.segments.length - 1]; + var segment = { + p0: p0, + p1: p1, + t0: t0, + t1: t1, + startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0, + length: length + }; + cp.segments.push(segment); + cp.length += length; + } + + // update each ctrlpt with segment info + for (var _i = 0; _i < ctrlpts.length; _i++) { + var cp = ctrlpts[_i]; + var prevCp = ctrlpts[_i - 1]; + if (prevCp) { + cp.startDist = prevCp.startDist + prevCp.length; + } + addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first + + for (var j = 0; j < nProjs - 1; j++) { + addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]); + } + addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last + } + + return createControlPointInfo.cache = ctrlpts; + }; + var calculateEndProjection = function calculateEndProjection(prefix) { + var angle; + var isSrc = prefix === 'source'; + if (!content[prefix]) { + return; + } + var offset = edge.pstyle(prefix + '-text-offset').pfValue; + switch (rs.edgeType) { + case 'self': + case 'compound': + case 'bezier': + case 'multibezier': + { + var cps = createControlPointInfo(); + var selected; + var startDist = 0; + var totalDist = 0; + + // find the segment we're on + for (var i = 0; i < cps.length; i++) { + var _cp = cps[isSrc ? i : cps.length - 1 - i]; + for (var j = 0; j < _cp.segments.length; j++) { + var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j]; + var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1; + startDist = totalDist; + totalDist += _seg.length; + if (totalDist >= offset || lastSeg) { + selected = { + cp: _cp, + segment: _seg + }; + break; + } + } + if (selected) { + break; + } + } + var cp = selected.cp; + var seg = selected.segment; + var tSegment = (offset - startDist) / seg.length; + var segDt = seg.t1 - seg.t0; + var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment; + t = bound(0, t, 1); + p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t); + angle = bezierAngle(cp.p0, cp.p1, cp.p2, t); + break; + } + case 'straight': + case 'segments': + case 'haystack': + { + var d = 0, + di, + d0; + var p0, p1; + var l = rs.allpts.length; + for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) { + if (isSrc) { + p0 = { + x: rs.allpts[_i2], + y: rs.allpts[_i2 + 1] + }; + p1 = { + x: rs.allpts[_i2 + 2], + y: rs.allpts[_i2 + 3] + }; + } else { + p0 = { + x: rs.allpts[l - 2 - _i2], + y: rs.allpts[l - 1 - _i2] + }; + p1 = { + x: rs.allpts[l - 4 - _i2], + y: rs.allpts[l - 3 - _i2] + }; + } + di = dist(p0, p1); + d0 = d; + d += di; + if (d >= offset) { + break; + } + } + var pD = offset - d0; + var _t = pD / di; + _t = bound(0, _t, 1); + p = lineAt(p0, p1, _t); + angle = lineAngle(p0, p1); + break; + } + } + setRs('labelX', prefix, p.x); + setRs('labelY', prefix, p.y); + setRs('labelAutoAngle', prefix, angle); + }; + calculateEndProjection('source'); + calculateEndProjection('target'); + this.applyLabelDimensions(edge); +}; +BRp$9.applyLabelDimensions = function (ele) { + this.applyPrefixedLabelDimensions(ele); + if (ele.isEdge()) { + this.applyPrefixedLabelDimensions(ele, 'source'); + this.applyPrefixedLabelDimensions(ele, 'target'); + } +}; +BRp$9.applyPrefixedLabelDimensions = function (ele, prefix) { + var _p = ele._private; + var text = this.getLabelText(ele, prefix); + var labelDims = this.calculateLabelDimensions(ele, text); + var lineHeight = ele.pstyle('line-height').pfValue; + var textWrap = ele.pstyle('text-wrap').strValue; + var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || []; + var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1); + var normPerLineHeight = labelDims.height / numLines; + var labelLineHeight = normPerLineHeight * lineHeight; + var width = labelDims.width; + var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight; + setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width); + setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height); + setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight); +}; +BRp$9.getLabelText = function (ele, prefix) { + var _p = ele._private; + var pfd = prefix ? prefix + '-' : ''; + var text = ele.pstyle(pfd + 'label').strValue; + var textTransform = ele.pstyle('text-transform').value; + var rscratch = function rscratch(propName, value) { + if (value) { + setPrefixedProperty(_p.rscratch, propName, prefix, value); + return value; + } else { + return getPrefixedProperty(_p.rscratch, propName, prefix); + } + }; + + // for empty text, skip all processing + if (!text) { + return ''; + } + if (textTransform == 'none') ; else if (textTransform == 'uppercase') { + text = text.toUpperCase(); + } else if (textTransform == 'lowercase') { + text = text.toLowerCase(); + } + var wrapStyle = ele.pstyle('text-wrap').value; + if (wrapStyle === 'wrap') { + var labelKey = rscratch('labelKey'); + + // save recalc if the label is the same as before + if (labelKey != null && rscratch('labelWrapKey') === labelKey) { + return rscratch('labelWrapCachedText'); + } + var zwsp = "\u200B"; + var lines = text.split('\n'); + var maxW = ele.pstyle('text-max-width').pfValue; + var overflow = ele.pstyle('text-overflow-wrap').value; + var overflowAny = overflow === 'anywhere'; + var wrappedLines = []; + var wordsRegex = /[\s\u200b]+/; + var wordSeparator = overflowAny ? '' : ' '; + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + var lineDims = this.calculateLabelDimensions(ele, line); + var lineW = lineDims.width; + if (overflowAny) { + var processedLine = line.split('').join(zwsp); + line = processedLine; + } + if (lineW > maxW) { + // line is too long + var words = line.split(wordsRegex); + var subline = ''; + for (var w = 0; w < words.length; w++) { + var word = words[w]; + var testLine = subline.length === 0 ? word : subline + wordSeparator + word; + var testDims = this.calculateLabelDimensions(ele, testLine); + var testW = testDims.width; + if (testW <= maxW) { + // word fits on current line + subline += word + wordSeparator; + } else { + // word starts new line + if (subline) { + wrappedLines.push(subline); + } + subline = word + wordSeparator; + } + } + + // if there's remaining text, put it in a wrapped line + if (!subline.match(/^[\s\u200b]+$/)) { + wrappedLines.push(subline); + } + } else { + // line is already short enough + wrappedLines.push(line); + } + } // for + + rscratch('labelWrapCachedLines', wrappedLines); + text = rscratch('labelWrapCachedText', wrappedLines.join('\n')); + rscratch('labelWrapKey', labelKey); + } else if (wrapStyle === 'ellipsis') { + var _maxW = ele.pstyle('text-max-width').pfValue; + var ellipsized = ''; + var ellipsis = "\u2026"; + var incLastCh = false; + if (this.calculateLabelDimensions(ele, text).width < _maxW) { + // the label already fits + return text; + } + for (var i = 0; i < text.length; i++) { + var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width; + if (widthWithNextCh > _maxW) { + break; + } + ellipsized += text[i]; + if (i === text.length - 1) { + incLastCh = true; + } + } + if (!incLastCh) { + ellipsized += ellipsis; + } + return ellipsized; + } // if ellipsize + + return text; +}; +BRp$9.getLabelJustification = function (ele) { + var justification = ele.pstyle('text-justification').strValue; + var textHalign = ele.pstyle('text-halign').strValue; + if (justification === 'auto') { + if (ele.isNode()) { + switch (textHalign) { + case 'left': + return 'right'; + case 'right': + return 'left'; + default: + return 'center'; + } + } else { + return 'center'; + } + } else { + return justification; + } +}; +BRp$9.calculateLabelDimensions = function (ele, text) { + var r = this; + var cacheKey = hashString(text, ele._private.labelDimsKey); + var cache = r.labelDimCache || (r.labelDimCache = []); + var existingVal = cache[cacheKey]; + if (existingVal != null) { + return existingVal; + } + var padding = 0; // add padding around text dims, as the measurement isn't that accurate + var fStyle = ele.pstyle('font-style').strValue; + var size = ele.pstyle('font-size').pfValue; + var family = ele.pstyle('font-family').strValue; + var weight = ele.pstyle('font-weight').strValue; + var canvas = this.labelCalcCanvas; + var c2d = this.labelCalcCanvasContext; + if (!canvas) { + canvas = this.labelCalcCanvas = document.createElement('canvas'); + c2d = this.labelCalcCanvasContext = canvas.getContext('2d'); + var ds = canvas.style; + ds.position = 'absolute'; + ds.left = '-9999px'; + ds.top = '-9999px'; + ds.zIndex = '-1'; + ds.visibility = 'hidden'; + ds.pointerEvents = 'none'; + } + c2d.font = "".concat(fStyle, " ").concat(weight, " ").concat(size, "px ").concat(family); + var width = 0; + var height = 0; + var lines = text.split('\n'); + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var metrics = c2d.measureText(line); + var w = Math.ceil(metrics.width); + var h = size; + width = Math.max(w, width); + height += h; + } + width += padding; + height += padding; + return cache[cacheKey] = { + width: width, + height: height + }; +}; +BRp$9.calculateLabelAngle = function (ele, prefix) { + var _p = ele._private; + var rs = _p.rscratch; + var isEdge = ele.isEdge(); + var prefixDash = prefix ? prefix + '-' : ''; + var rot = ele.pstyle(prefixDash + 'text-rotation'); + var rotStr = rot.strValue; + if (rotStr === 'none') { + return 0; + } else if (isEdge && rotStr === 'autorotate') { + return rs.labelAutoAngle; + } else if (rotStr === 'autorotate') { + return 0; + } else { + return rot.pfValue; + } +}; +BRp$9.calculateLabelAngles = function (ele) { + var r = this; + var isEdge = ele.isEdge(); + var _p = ele._private; + var rs = _p.rscratch; + rs.labelAngle = r.calculateLabelAngle(ele); + if (isEdge) { + rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source'); + rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target'); + } +}; + +var BRp$8 = {}; +var TOO_SMALL_CUT_RECT = 28; +var warnedCutRect = false; +BRp$8.getNodeShape = function (node) { + var r = this; + var shape = node.pstyle('shape').value; + if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) { + if (!warnedCutRect) { + warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead'); + warnedCutRect = true; + } + return 'rectangle'; + } + if (node.isParent()) { + if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') { + return shape; + } else { + return 'rectangle'; + } + } + if (shape === 'polygon') { + var points = node.pstyle('shape-polygon-points').value; + return r.nodeShapes.makePolygon(points).name; + } + return shape; +}; + +var BRp$7 = {}; +BRp$7.registerCalculationListeners = function () { + var cy = this.cy; + var elesToUpdate = cy.collection(); + var r = this; + var enqueue = function enqueue(eles) { + var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + elesToUpdate.merge(eles); + if (dirtyStyleCaches) { + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + rstyle.clean = false; + rstyle.cleanConnected = false; + } + } + }; + r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) { + var ele = e.target; + enqueue(ele); + }).on('style.* background.*', function onDirtyStyle(e) { + var ele = e.target; + enqueue(ele, false); + }); + var updateEleCalcs = function updateEleCalcs(willDraw) { + if (willDraw) { + var fns = r.onUpdateEleCalcsFns; + + // because we need to have up-to-date style (e.g. stylesheet mappers) + // before calculating rendered style (and pstyle might not be called yet) + elesToUpdate.cleanStyle(); + for (var i = 0; i < elesToUpdate.length; i++) { + var ele = elesToUpdate[i]; + var rstyle = ele._private.rstyle; + if (ele.isNode() && !rstyle.cleanConnected) { + enqueue(ele.connectedEdges()); + rstyle.cleanConnected = true; + } + } + if (fns) { + for (var _i = 0; _i < fns.length; _i++) { + var fn = fns[_i]; + fn(willDraw, elesToUpdate); + } + } + r.recalculateRenderedStyle(elesToUpdate); + elesToUpdate = cy.collection(); + } + }; + r.flushRenderedStyleQueue = function () { + updateEleCalcs(true); + }; + r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs); +}; +BRp$7.onUpdateEleCalcs = function (fn) { + var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []; + fns.push(fn); +}; +BRp$7.recalculateRenderedStyle = function (eles, useCache) { + var isCleanConnected = function isCleanConnected(ele) { + return ele._private.rstyle.cleanConnected; + }; + var edges = []; + var nodes = []; + + // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox() + if (this.destroyed) { + return; + } + + // use cache by default for perf + if (useCache === undefined) { + useCache = true; + } + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var _p = ele._private; + var rstyle = _p.rstyle; + + // an edge may be implicitly dirty b/c of one of its connected nodes + // (and a request for recalc may come in between frames) + if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) { + rstyle.clean = false; + } + + // only update if dirty and in graph + if (useCache && rstyle.clean || ele.removed()) { + continue; + } + + // only update if not display: none + if (ele.pstyle('display').value === 'none') { + continue; + } + if (_p.group === 'nodes') { + nodes.push(ele); + } else { + // edges + edges.push(ele); + } + rstyle.clean = true; + } + + // update node data from projections + for (var _i2 = 0; _i2 < nodes.length; _i2++) { + var _ele = nodes[_i2]; + var _p2 = _ele._private; + var _rstyle = _p2.rstyle; + var pos = _ele.position(); + this.recalculateNodeLabelProjection(_ele); + _rstyle.nodeX = pos.x; + _rstyle.nodeY = pos.y; + _rstyle.nodeW = _ele.pstyle('width').pfValue; + _rstyle.nodeH = _ele.pstyle('height').pfValue; + } + this.recalculateEdgeProjections(edges); + + // update edge data from projections + for (var _i3 = 0; _i3 < edges.length; _i3++) { + var _ele2 = edges[_i3]; + var _p3 = _ele2._private; + var _rstyle2 = _p3.rstyle; + var rs = _p3.rscratch; + + // update rstyle positions + _rstyle2.srcX = rs.arrowStartX; + _rstyle2.srcY = rs.arrowStartY; + _rstyle2.tgtX = rs.arrowEndX; + _rstyle2.tgtY = rs.arrowEndY; + _rstyle2.midX = rs.midX; + _rstyle2.midY = rs.midY; + _rstyle2.labelAngle = rs.labelAngle; + _rstyle2.sourceLabelAngle = rs.sourceLabelAngle; + _rstyle2.targetLabelAngle = rs.targetLabelAngle; + } +}; + +var BRp$6 = {}; +BRp$6.updateCachedGrabbedEles = function () { + var eles = this.cachedZSortedEles; + if (!eles) { + // just let this be recalculated on the next z sort tick + return; + } + eles.drag = []; + eles.nondrag = []; + var grabTargets = []; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + if (ele.grabbed() && !ele.isParent()) { + grabTargets.push(ele); + } else if (rs.inDragLayer) { + eles.drag.push(ele); + } else { + eles.nondrag.push(ele); + } + } + + // put the grab target nodes last so it's on top of its neighbourhood + for (var i = 0; i < grabTargets.length; i++) { + var ele = grabTargets[i]; + eles.drag.push(ele); + } +}; +BRp$6.invalidateCachedZSortedEles = function () { + this.cachedZSortedEles = null; +}; +BRp$6.getCachedZSortedEles = function (forceRecalc) { + if (forceRecalc || !this.cachedZSortedEles) { + var eles = this.cy.mutableElements().toArray(); + eles.sort(zIndexSort); + eles.interactive = eles.filter(function (ele) { + return ele.interactive(); + }); + this.cachedZSortedEles = eles; + this.updateCachedGrabbedEles(); + } else { + eles = this.cachedZSortedEles; + } + return eles; +}; + +var BRp$5 = {}; +[BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) { + extend(BRp$5, props); +}); + +var BRp$4 = {}; +BRp$4.getCachedImage = function (url, crossOrigin, onLoad) { + var r = this; + var imageCache = r.imageCache = r.imageCache || {}; + var cache = imageCache[url]; + if (cache) { + if (!cache.image.complete) { + cache.image.addEventListener('load', onLoad); + } + return cache.image; + } else { + cache = imageCache[url] = imageCache[url] || {}; + var image = cache.image = new Image(); // eslint-disable-line no-undef + + image.addEventListener('load', onLoad); + image.addEventListener('error', function () { + image.error = true; + }); + + // #1582 safari doesn't load data uris with crossOrigin properly + // https://bugs.webkit.org/show_bug.cgi?id=123978 + var dataUriPrefix = 'data:'; + var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix; + if (!isDataUri) { + // if crossorigin is 'null'(stringified), then manually set it to null + crossOrigin = crossOrigin === 'null' ? null : crossOrigin; + image.crossOrigin = crossOrigin; // prevent tainted canvas + } + + image.src = url; + return image; + } +}; + +var BRp$3 = {}; + +/* global document, window, ResizeObserver, MutationObserver */ + +BRp$3.registerBinding = function (target, event, handler, useCapture) { + // eslint-disable-line no-unused-vars + var args = Array.prototype.slice.apply(arguments, [1]); // copy + var b = this.binder(target); + return b.on.apply(b, args); +}; +BRp$3.binder = function (tgt) { + var r = this; + var containerWindow = r.cy.window(); + var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt); + if (r.supportsPassiveEvents == null) { + // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection + var supportsPassive = false; + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + supportsPassive = true; + return true; + } + }); + containerWindow.addEventListener('test', null, opts); + } catch (err) { + // not supported + } + r.supportsPassiveEvents = supportsPassive; + } + var on = function on(event, handler, useCapture) { + var args = Array.prototype.slice.call(arguments); + if (tgtIsDom && r.supportsPassiveEvents) { + // replace useCapture w/ opts obj + args[2] = { + capture: useCapture != null ? useCapture : false, + passive: false, + once: false + }; + } + r.bindings.push({ + target: tgt, + args: args + }); + (tgt.addEventListener || tgt.on).apply(tgt, args); + return this; + }; + return { + on: on, + addEventListener: on, + addListener: on, + bind: on + }; +}; +BRp$3.nodeIsDraggable = function (node) { + return node && node.isNode() && !node.locked() && node.grabbable(); +}; +BRp$3.nodeIsGrabbable = function (node) { + return this.nodeIsDraggable(node) && node.interactive(); +}; +BRp$3.load = function () { + var r = this; + var containerWindow = r.cy.window(); + var isSelected = function isSelected(ele) { + return ele.selected(); + }; + var triggerEvents = function triggerEvents(target, names, e, position) { + if (target == null) { + target = r.cy; + } + for (var i = 0; i < names.length; i++) { + var name = names[i]; + target.emit({ + originalEvent: e, + type: name, + position: position + }); + } + }; + var isMultSelKeyDown = function isMultSelKeyDown(e) { + return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey + }; + + var allowPanningPassthrough = function allowPanningPassthrough(down, downs) { + var allowPassthrough = true; + if (r.cy.hasCompoundNodes() && down && down.pannable()) { + // a grabbable compound node below the ele => no passthrough panning + for (var i = 0; downs && i < downs.length; i++) { + var down = downs[i]; + + //if any parent node in event hierarchy isn't pannable, reject passthrough + if (down.isNode() && down.isParent() && !down.pannable()) { + allowPassthrough = false; + break; + } + } + } else { + allowPassthrough = true; + } + return allowPassthrough; + }; + var setGrabbed = function setGrabbed(ele) { + ele[0]._private.grabbed = true; + }; + var setFreed = function setFreed(ele) { + ele[0]._private.grabbed = false; + }; + var setInDragLayer = function setInDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = true; + }; + var setOutDragLayer = function setOutDragLayer(ele) { + ele[0]._private.rscratch.inDragLayer = false; + }; + var setGrabTarget = function setGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = true; + }; + var removeGrabTarget = function removeGrabTarget(ele) { + ele[0]._private.rscratch.isGrabTarget = false; + }; + var addToDragList = function addToDragList(ele, opts) { + var list = opts.addToList; + var listHasEle = list.has(ele); + if (!listHasEle && ele.grabbable() && !ele.locked()) { + list.merge(ele); + setGrabbed(ele); + } + }; + + // helper function to determine which child nodes and inner edges + // of a compound node to be dragged as well as the grabbed and selected nodes + var addDescendantsToDrag = function addDescendantsToDrag(node, opts) { + if (!node.cy().hasCompoundNodes()) { + return; + } + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + var innerNodes = node.descendants(); + if (opts.inDragLayer) { + innerNodes.forEach(setInDragLayer); + innerNodes.connectedEdges().forEach(setInDragLayer); + } + if (opts.addToList) { + addToDragList(innerNodes, opts); + } + }; + + // adds the given nodes and its neighbourhood to the drag layer + var addNodesToDrag = function addNodesToDrag(nodes, opts) { + opts = opts || {}; + var hasCompoundNodes = nodes.cy().hasCompoundNodes(); + if (opts.inDragLayer) { + nodes.forEach(setInDragLayer); + nodes.neighborhood().stdFilter(function (ele) { + return !hasCompoundNodes || ele.isEdge(); + }).forEach(setInDragLayer); + } + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + addDescendantsToDrag(nodes, opts); // always add to drag + + // also add nodes and edges related to the topmost ancestor + updateAncestorsInDragLayer(nodes, { + inDragLayer: opts.inDragLayer + }); + r.updateCachedGrabbedEles(); + }; + var addNodeToDrag = addNodesToDrag; + var freeDraggedElements = function freeDraggedElements(grabbedEles) { + if (!grabbedEles) { + return; + } + + // just go over all elements rather than doing a bunch of (possibly expensive) traversals + r.getCachedZSortedEles().forEach(function (ele) { + setFreed(ele); + setOutDragLayer(ele); + removeGrabTarget(ele); + }); + r.updateCachedGrabbedEles(); + }; + + // helper function to determine which ancestor nodes and edges should go + // to the drag layer (or should be removed from drag layer). + var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) { + if (opts.inDragLayer == null && opts.addToList == null) { + return; + } // nothing to do + + if (!node.cy().hasCompoundNodes()) { + return; + } + + // find top-level parent + var parent = node.ancestors().orphans(); + + // no parent node: no nodes to add to the drag layer + if (parent.same(node)) { + return; + } + var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants()); + var edges = nodes.connectedEdges(); + if (opts.inDragLayer) { + edges.forEach(setInDragLayer); + nodes.forEach(setInDragLayer); + } + if (opts.addToList) { + nodes.forEach(function (ele) { + addToDragList(ele, opts); + }); + } + }; + var blurActiveDomElement = function blurActiveDomElement() { + if (document.activeElement != null && document.activeElement.blur != null) { + document.activeElement.blur(); + } + }; + var haveMutationsApi = typeof MutationObserver !== 'undefined'; + var haveResizeObserverApi = typeof ResizeObserver !== 'undefined'; + + // watch for when the cy container is removed from the dom + if (haveMutationsApi) { + r.removeObserver = new MutationObserver(function (mutns) { + // eslint-disable-line no-undef + for (var i = 0; i < mutns.length; i++) { + var mutn = mutns[i]; + var rNodes = mutn.removedNodes; + if (rNodes) { + for (var j = 0; j < rNodes.length; j++) { + var rNode = rNodes[j]; + if (rNode === r.container) { + r.destroy(); + break; + } + } + } + } + }); + if (r.container.parentNode) { + r.removeObserver.observe(r.container.parentNode, { + childList: true + }); + } + } else { + r.registerBinding(r.container, 'DOMNodeRemoved', function (e) { + // eslint-disable-line no-unused-vars + r.destroy(); + }); + } + var onResize = debounce__default["default"](function () { + r.cy.resize(); + }, 100); + if (haveMutationsApi) { + r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef + + r.styleObserver.observe(r.container, { + attributes: true + }); + } + + // auto resize + r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef + + if (haveResizeObserverApi) { + r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef + + r.resizeObserver.observe(r.container); + } + var forEachUp = function forEachUp(domEle, fn) { + while (domEle != null) { + fn(domEle); + domEle = domEle.parentNode; + } + }; + var invalidateCoords = function invalidateCoords() { + r.invalidateContainerClientCoordsCache(); + }; + forEachUp(r.container, function (domEle) { + r.registerBinding(domEle, 'transitionend', invalidateCoords); + r.registerBinding(domEle, 'animationend', invalidateCoords); + r.registerBinding(domEle, 'scroll', invalidateCoords); + }); + + // stop right click menu from appearing on cy + r.registerBinding(r.container, 'contextmenu', function (e) { + e.preventDefault(); + }); + var inBoxSelection = function inBoxSelection() { + return r.selection[4] !== 0; + }; + var eventInContainer = function eventInContainer(e) { + // save cycles if mouse events aren't to be captured + var containerPageCoords = r.findContainerClientCoords(); + var x = containerPageCoords[0]; + var y = containerPageCoords[1]; + var width = containerPageCoords[2]; + var height = containerPageCoords[3]; + var positions = e.touches ? e.touches : [e]; + var atLeastOnePosInside = false; + for (var i = 0; i < positions.length; i++) { + var p = positions[i]; + if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) { + atLeastOnePosInside = true; + break; + } + } + if (!atLeastOnePosInside) { + return false; + } + var container = r.container; + var target = e.target; + var tParent = target.parentNode; + var containerIsTarget = false; + while (tParent) { + if (tParent === container) { + containerIsTarget = true; + break; + } + tParent = tParent.parentNode; + } + if (!containerIsTarget) { + return false; + } // if target is outisde cy container, then this event is not for us + + return true; + }; + + // Primary key + r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) { + if (!eventInContainer(e)) { + return; + } + e.preventDefault(); + blurActiveDomElement(); + r.hoverData.capture = true; + r.hoverData.which = e.which; + var cy = r.cy; + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var select = r.selection; + var nears = r.findNearestElements(pos[0], pos[1], true, false); + var near = nears[0]; + var draggedElements = r.dragData.possibleDragElements; + r.hoverData.mdownPos = pos; + r.hoverData.mdownGPos = gpos; + var checkForTaphold = function checkForTaphold() { + r.hoverData.tapholdCancelled = false; + clearTimeout(r.hoverData.tapholdTimeout); + r.hoverData.tapholdTimeout = setTimeout(function () { + if (r.hoverData.tapholdCancelled) { + return; + } else { + var ele = r.hoverData.down; + if (ele) { + ele.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } else { + cy.emit({ + originalEvent: e, + type: 'taphold', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + }, r.tapholdDuration); + }; + + // Right click button + if (e.which == 3) { + r.hoverData.cxtStarted = true; + var cxtEvt = { + originalEvent: e, + type: 'cxttapstart', + position: { + x: pos[0], + y: pos[1] + } + }; + if (near) { + near.activate(); + near.emit(cxtEvt); + r.hoverData.down = near; + } else { + cy.emit(cxtEvt); + } + r.hoverData.downTime = new Date().getTime(); + r.hoverData.cxtDragged = false; + + // Primary button + } else if (e.which == 1) { + if (near) { + near.activate(); + } + + // Element dragging + { + // If something is under the cursor and it is draggable, prepare to grab it + if (near != null) { + if (r.nodeIsGrabbable(near)) { + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: pos[0], + y: pos[1] + } + }; + }; + var triggerGrab = function triggerGrab(ele) { + ele.emit(makeEvent('grab')); + }; + setGrabTarget(near); + if (!near.selected()) { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + addNodeToDrag(near, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')).emit(makeEvent('grab')); + } else { + draggedElements = r.dragData.possibleDragElements = cy.collection(); + var selectedNodes = cy.$(function (ele) { + return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedElements + }); + near.emit(makeEvent('grabon')); + selectedNodes.forEach(triggerGrab); + } + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + } + r.hoverData.down = near; + r.hoverData.downs = nears; + r.hoverData.downTime = new Date().getTime(); + } + triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, { + x: pos[0], + y: pos[1] + }); + if (near == null) { + select[4] = 1; + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } else if (near.pannable()) { + select[4] = 1; // for future pan + } + + checkForTaphold(); + } + + // Initialize selection box coordinates + select[0] = select[2] = pos[0]; + select[1] = select[3] = pos[1]; + }, false); + r.registerBinding(containerWindow, 'mousemove', function mousemoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + if (!capture && !eventInContainer(e)) { + return; + } + var preventDefault = false; + var cy = r.cy; + var zoom = cy.zoom(); + var gpos = [e.clientX, e.clientY]; + var pos = r.projectIntoViewport(gpos[0], gpos[1]); + var mdownPos = r.hoverData.mdownPos; + var mdownGPos = r.hoverData.mdownGPos; + var select = r.selection; + var near = null; + if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) { + near = r.findNearestElement(pos[0], pos[1], true, false); + } + var last = r.hoverData.last; + var down = r.hoverData.down; + var disp = [pos[0] - select[2], pos[1] - select[3]]; + var draggedElements = r.dragData.possibleDragElements; + var isOverThresholdDrag; + if (mdownGPos) { + var dx = gpos[0] - mdownGPos[0]; + var dx2 = dx * dx; + var dy = gpos[1] - mdownGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2; + } + var multSelKeyDown = isMultSelKeyDown(e); + if (isOverThresholdDrag) { + r.hoverData.tapholdCancelled = true; + } + var updateDragDelta = function updateDragDelta() { + var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || []; + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + }; + preventDefault = true; + triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, { + x: pos[0], + y: pos[1] + }); + var goIntoBoxMode = function goIntoBoxMode() { + r.data.bgActivePosistion = undefined; + if (!r.hoverData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: pos[0], + y: pos[1] + } + }); + } + select[4] = 1; + r.hoverData.selecting = true; + r.redrawHint('select', true); + r.redraw(); + }; + + // trigger context drag if rmouse down + if (r.hoverData.which === 3) { + // but only if over threshold + if (isOverThresholdDrag) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: pos[0], + y: pos[1] + } + }; + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + r.hoverData.cxtDragged = true; + if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) { + if (r.hoverData.cxtOver) { + r.hoverData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: pos[0], + y: pos[1] + } + }); + } + r.hoverData.cxtOver = near; + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: pos[0], + y: pos[1] + } + }); + } + } + } + + // Check if we are drag panning the entire graph + } else if (r.hoverData.dragging) { + preventDefault = true; + if (cy.panningEnabled() && cy.userPanningEnabled()) { + var deltaP; + if (r.hoverData.justStartedPan) { + var mdPos = r.hoverData.mdownPos; + deltaP = { + x: (pos[0] - mdPos[0]) * zoom, + y: (pos[1] - mdPos[1]) * zoom + }; + r.hoverData.justStartedPan = false; + } else { + deltaP = { + x: disp[0] * zoom, + y: disp[1] * zoom + }; + } + cy.panBy(deltaP); + cy.emit('dragpan'); + r.hoverData.dragged = true; + } + + // Needs reproject due to pan changing viewport + pos = r.projectIntoViewport(e.clientX, e.clientY); + + // Checks primary button down & out of time & mouse not moved much + } else if (select[4] == 1 && (down == null || down.pannable())) { + if (isOverThresholdDrag) { + if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) { + goIntoBoxMode(); + } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs); + if (allowPassthrough) { + r.hoverData.dragging = true; + r.hoverData.justStartedPan = true; + select[4] = 0; + r.data.bgActivePosistion = array2point(mdownPos); + r.redrawHint('select', true); + r.redraw(); + } + } + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + } + } else { + if (down && down.pannable() && down.active()) { + down.unactivate(); + } + if ((!down || !down.grabbed()) && near != last) { + if (last) { + triggerEvents(last, ['mouseout', 'tapdragout'], e, { + x: pos[0], + y: pos[1] + }); + } + if (near) { + triggerEvents(near, ['mouseover', 'tapdragover'], e, { + x: pos[0], + y: pos[1] + }); + } + r.hoverData.last = near; + } + if (down) { + if (isOverThresholdDrag) { + // then we can take action + + if (cy.boxSelectionEnabled() && multSelKeyDown) { + // then selection overrides + if (down && down.grabbed()) { + freeDraggedElements(draggedElements); + down.emit('freeon'); + draggedElements.emit('free'); + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + goIntoBoxMode(); + } else if (down && down.grabbed() && r.nodeIsDraggable(down)) { + // drag node + var justStartedDrag = !r.dragData.didDrag; + if (justStartedDrag) { + r.redrawHint('eles', true); + } + r.dragData.didDrag = true; // indicate that we actually did drag the node + + // now, add the elements to the drag layer if not done already + if (!r.hoverData.draggingEles) { + addNodesToDrag(draggedElements, { + inDragLayer: true + }); + } + var totalShift = { + x: 0, + y: 0 + }; + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + if (justStartedDrag) { + var dragDelta = r.hoverData.dragDelta; + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + r.hoverData.draggingEles = true; + draggedElements.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + r.redraw(); + } + } else { + // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant + updateDragDelta(); + } + } + + // prevent the dragging from triggering text selection on the page + preventDefault = true; + } + select[2] = pos[0]; + select[3] = pos[1]; + if (preventDefault) { + if (e.stopPropagation) e.stopPropagation(); + if (e.preventDefault) e.preventDefault(); + return false; + } + }, false); + var clickTimeout, didDoubleClick, prevClickTimeStamp; + r.registerBinding(containerWindow, 'mouseup', function mouseupHandler(e) { + // eslint-disable-line no-undef + var capture = r.hoverData.capture; + if (!capture) { + return; + } + r.hoverData.capture = false; + var cy = r.cy; + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var select = r.selection; + var near = r.findNearestElement(pos[0], pos[1], true, false); + var draggedElements = r.dragData.possibleDragElements; + var down = r.hoverData.down; + var multSelKeyDown = isMultSelKeyDown(e); + if (r.data.bgActivePosistion) { + r.redrawHint('select', true); + r.redraw(); + } + r.hoverData.tapholdCancelled = true; + r.data.bgActivePosistion = undefined; // not active bg now + + if (down) { + down.unactivate(); + } + if (r.hoverData.which === 3) { + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: pos[0], + y: pos[1] + } + }; + if (down) { + down.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + if (!r.hoverData.cxtDragged) { + var cxtTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: pos[0], + y: pos[1] + } + }; + if (down) { + down.emit(cxtTap); + } else { + cy.emit(cxtTap); + } + } + r.hoverData.cxtDragged = false; + r.hoverData.which = null; + } else if (r.hoverData.which === 1) { + triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, { + x: pos[0], + y: pos[1] + }); + if (!r.dragData.didDrag && + // didn't move a node around + !r.hoverData.dragged && + // didn't pan + !r.hoverData.selecting && + // not box selection + !r.hoverData.isOverThresholdDrag // didn't move too much + ) { + triggerEvents(down, ["click", "tap", "vclick"], e, { + x: pos[0], + y: pos[1] + }); + didDoubleClick = false; + if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) { + clickTimeout && clearTimeout(clickTimeout); + didDoubleClick = true; + prevClickTimeStamp = null; + triggerEvents(down, ["dblclick", "dbltap", "vdblclick"], e, { + x: pos[0], + y: pos[1] + }); + } else { + clickTimeout = setTimeout(function () { + if (didDoubleClick) return; + triggerEvents(down, ["oneclick", "onetap", "voneclick"], e, { + x: pos[0], + y: pos[1] + }); + }, cy.multiClickDebounceTime()); + prevClickTimeStamp = e.timeStamp; + } + } + + // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something + if (down == null // not mousedown on node + && !r.dragData.didDrag // didn't move the node around + && !r.hoverData.selecting // not box selection + && !r.hoverData.dragged // didn't pan + && !isMultSelKeyDown(e)) { + cy.$(isSelected).unselect(['tapunselect']); + if (draggedElements.length > 0) { + r.redrawHint('eles', true); + } + r.dragData.possibleDragElements = draggedElements = cy.collection(); + } + + // Single selection + if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) { + if (near != null && near._private.selectable) { + if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) { + if (near.selected()) { + near.unselect(['tapunselect']); + } else { + near.select(['tapselect']); + } + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(near).unselect(['tapunselect']); + near.select(['tapselect']); + } + } + r.redrawHint('eles', true); + } + } + if (r.hoverData.selecting) { + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + r.redrawHint('select', true); + if (box.length > 0) { + r.redrawHint('eles', true); + } + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: pos[0], + y: pos[1] + } + }); + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + if (cy.selectionType() === 'additive') { + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } else { + if (!multSelKeyDown) { + cy.$(isSelected).unmerge(box).unselect(); + } + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + } + + // always need redraw in case eles unselectable + r.redraw(); + } + + // Cancel drag pan + if (r.hoverData.dragging) { + r.hoverData.dragging = false; + r.redrawHint('select', true); + r.redrawHint('eles', true); + r.redraw(); + } + if (!select[4]) { + r.redrawHint('drag', true); + r.redrawHint('eles', true); + var downWasGrabbed = down && down.grabbed(); + freeDraggedElements(draggedElements); + if (downWasGrabbed) { + down.emit('freeon'); + draggedElements.emit('free'); + if (r.dragData.didDrag) { + down.emit('dragfreeon'); + draggedElements.emit('dragfree'); + } + } + } + } // else not right mouse + + select[4] = 0; + r.hoverData.down = null; + r.hoverData.cxtStarted = false; + r.hoverData.draggingEles = false; + r.hoverData.selecting = false; + r.hoverData.isOverThresholdDrag = false; + r.dragData.didDrag = false; + r.hoverData.dragged = false; + r.hoverData.dragDelta = []; + r.hoverData.mdownPos = null; + r.hoverData.mdownGPos = null; + }, false); + var wheelHandler = function wheelHandler(e) { + if (r.scrollingPage) { + return; + } // while scrolling, ignore wheel-to-zoom + + var cy = r.cy; + var zoom = cy.zoom(); + var pan = cy.pan(); + var pos = r.projectIntoViewport(e.clientX, e.clientY); + var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y]; + if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) { + // if pan dragging or cxt dragging, wheel movements make no zoom + e.preventDefault(); + return; + } + if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) { + e.preventDefault(); + r.data.wheelZooming = true; + clearTimeout(r.data.wheelTimeout); + r.data.wheelTimeout = setTimeout(function () { + r.data.wheelZooming = false; + r.redrawHint('eles', true); + r.redraw(); + }, 150); + var diff; + if (e.deltaY != null) { + diff = e.deltaY / -250; + } else if (e.wheelDeltaY != null) { + diff = e.wheelDeltaY / 1000; + } else { + diff = e.wheelDelta / 1000; + } + diff = diff * r.wheelSensitivity; + var needsWheelFix = e.deltaMode === 1; + if (needsWheelFix) { + // fixes slow wheel events on ff/linux and ff/windows + diff *= 33; + } + var newZoom = cy.zoom() * Math.pow(10, diff); + if (e.type === 'gesturechange') { + newZoom = r.gestureStartZoom * e.scale; + } + cy.zoom({ + level: newZoom, + renderedPosition: { + x: rpos[0], + y: rpos[1] + } + }); + cy.emit(e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom'); + } + }; + + // Functions to help with whether mouse wheel should trigger zooming + // -- + r.registerBinding(r.container, 'wheel', wheelHandler, true); + + // disable nonstandard wheel events + // r.registerBinding(r.container, 'mousewheel', wheelHandler, true); + // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true); + // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox + + r.registerBinding(containerWindow, 'scroll', function scrollHandler(e) { + // eslint-disable-line no-unused-vars + r.scrollingPage = true; + clearTimeout(r.scrollingPageTimeout); + r.scrollingPageTimeout = setTimeout(function () { + r.scrollingPage = false; + }, 250); + }, true); + + // desktop safari pinch to zoom start + r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) { + r.gestureStartZoom = r.cy.zoom(); + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + e.preventDefault(); + } + }, true); + r.registerBinding(r.container, 'gesturechange', function (e) { + if (!r.hasTouchStarted) { + // don't affect touch devices like iphone + wheelHandler(e); + } + }, true); + + // Functions to help with handling mouseout/mouseover on the Cytoscape container + // Handle mouseout on Cytoscape container + r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseout', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) { + var pos = r.projectIntoViewport(e.clientX, e.clientY); + r.cy.emit({ + originalEvent: e, + type: 'mouseover', + position: { + x: pos[0], + y: pos[1] + } + }); + }, false); + var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom + var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom + var center1, modelCenter1; // center point on start pinch to zoom + var offsetLeft, offsetTop; + var containerWidth, containerHeight; + var twoFingersStartInside; + var distance = function distance(x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + }; + var distanceSq = function distanceSq(x1, y1, x2, y2) { + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + }; + var touchstartHandler; + r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) { + r.hasTouchStarted = true; + if (!eventInContainer(e)) { + return; + } + blurActiveDomElement(); + r.touchData.capture = true; + r.data.bgActivePosistion = undefined; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + + // record starting points for pinch-to-zoom + if (e.touches[1]) { + r.touchData.singleTouchMoved = true; + freeDraggedElements(r.dragData.touchDragEles); + var offsets = r.findContainerClientCoords(); + offsetLeft = offsets[0]; + offsetTop = offsets[1]; + containerWidth = offsets[2]; + containerHeight = offsets[3]; + f1x1 = e.touches[0].clientX - offsetLeft; + f1y1 = e.touches[0].clientY - offsetTop; + f2x1 = e.touches[1].clientX - offsetLeft; + f2y1 = e.touches[1].clientY - offsetTop; + twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight; + var pan = cy.pan(); + var zoom = cy.zoom(); + distance1 = distance(f1x1, f1y1, f2x1, f2y1); + distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1); + center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2]; + modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom]; + + // consider context tap + var cxtDistThreshold = 200; + var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold; + if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) { + var near1 = r.findNearestElement(now[0], now[1], true, true); + var near2 = r.findNearestElement(now[2], now[3], true, true); + if (near1 && near1.isNode()) { + near1.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near1; + } else if (near2 && near2.isNode()) { + near2.activate().emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + r.touchData.start = near2; + } else { + cy.emit({ + originalEvent: e, + type: 'cxttapstart', + position: { + x: now[0], + y: now[1] + } + }); + } + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + r.touchData.cxt = true; + r.touchData.cxtDragged = false; + r.data.bgActivePosistion = undefined; + r.redraw(); + return; + } + } + if (e.touches[2]) { + // ignore + + // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...) + if (cy.boxSelectionEnabled()) { + e.preventDefault(); + } + } else if (e.touches[1]) ; else if (e.touches[0]) { + var nears = r.findNearestElements(now[0], now[1], true, true); + var near = nears[0]; + if (near != null) { + near.activate(); + r.touchData.start = near; + r.touchData.starts = nears; + if (r.nodeIsGrabbable(near)) { + var draggedEles = r.dragData.touchDragEles = cy.collection(); + var selectedNodes = null; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + if (near.selected()) { + // reset drag elements, since near will be added again + + selectedNodes = cy.$(function (ele) { + return ele.selected() && r.nodeIsGrabbable(ele); + }); + addNodesToDrag(selectedNodes, { + addToList: draggedEles + }); + } else { + addNodeToDrag(near, { + addToList: draggedEles + }); + } + setGrabTarget(near); + var makeEvent = function makeEvent(type) { + return { + originalEvent: e, + type: type, + position: { + x: now[0], + y: now[1] + } + }; + }; + near.emit(makeEvent('grabon')); + if (selectedNodes) { + selectedNodes.forEach(function (n) { + n.emit(makeEvent('grab')); + }); + } else { + near.emit(makeEvent('grab')); + } + } + } + triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, { + x: now[0], + y: now[1] + }); + if (near == null) { + r.data.bgActivePosistion = { + x: pos[0], + y: pos[1] + }; + r.redrawHint('select', true); + r.redraw(); + } + + // Tap, taphold + // ----- + + r.touchData.singleTouchMoved = false; + r.touchData.singleTouchStartTime = +new Date(); + clearTimeout(r.touchData.tapholdTimeout); + r.touchData.tapholdTimeout = setTimeout(function () { + if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect + && !r.touchData.selecting // box selection shouldn't allow taphold through + ) { + triggerEvents(r.touchData.start, ['taphold'], e, { + x: now[0], + y: now[1] + }); + } + }, r.tapholdDuration); + } + if (e.touches.length >= 1) { + var sPos = r.touchData.startPosition = [null, null, null, null, null, null]; + for (var i = 0; i < now.length; i++) { + sPos[i] = earlier[i] = now[i]; + } + var touch0 = e.touches[0]; + r.touchData.startGPosition = [touch0.clientX, touch0.clientY]; + } + }, false); + var touchmoveHandler; + r.registerBinding(window, 'touchmove', touchmoveHandler = function touchmoveHandler(e) { + // eslint-disable-line no-undef + var capture = r.touchData.capture; + if (!capture && !eventInContainer(e)) { + return; + } + var select = r.selection; + var cy = r.cy; + var now = r.touchData.now; + var earlier = r.touchData.earlier; + var zoom = cy.zoom(); + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + var startGPos = r.touchData.startGPosition; + var isOverThresholdDrag; + if (capture && e.touches[0] && startGPos) { + var disp = []; + for (var j = 0; j < now.length; j++) { + disp[j] = now[j] - earlier[j]; + } + var dx = e.touches[0].clientX - startGPos[0]; + var dx2 = dx * dx; + var dy = e.touches[0].clientY - startGPos[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + isOverThresholdDrag = dist2 >= r.touchTapThreshold2; + } + + // context swipe cancelling + if (capture && r.touchData.cxt) { + e.preventDefault(); + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 ); + var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2); + var factorSq = distance2Sq / distance1Sq; + var distThreshold = 150; + var distThresholdSq = distThreshold * distThreshold; + var factorThreshold = 1.5; + var factorThresholdSq = factorThreshold * factorThreshold; + + // cancel ctx gestures if the distance b/t the fingers increases + if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) { + r.touchData.cxt = false; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var cxtEvt = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + if (r.touchData.start) { + r.touchData.start.unactivate().emit(cxtEvt); + r.touchData.start = null; + } else { + cy.emit(cxtEvt); + } + } + } + + // context swipe + if (capture && r.touchData.cxt) { + var cxtEvt = { + originalEvent: e, + type: 'cxtdrag', + position: { + x: now[0], + y: now[1] + } + }; + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + if (r.touchData.start) { + r.touchData.start.emit(cxtEvt); + } else { + cy.emit(cxtEvt); + } + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + r.touchData.cxtDragged = true; + var near = r.findNearestElement(now[0], now[1], true, true); + if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) { + if (r.touchData.cxtOver) { + r.touchData.cxtOver.emit({ + originalEvent: e, + type: 'cxtdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + r.touchData.cxtOver = near; + if (near) { + near.emit({ + originalEvent: e, + type: 'cxtdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + + // box selection + } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) { + e.preventDefault(); + r.data.bgActivePosistion = undefined; + this.lastThreeTouch = +new Date(); + if (!r.touchData.selecting) { + cy.emit({ + originalEvent: e, + type: 'boxstart', + position: { + x: now[0], + y: now[1] + } + }); + } + r.touchData.selecting = true; + r.touchData.didSelect = true; + select[4] = 1; + if (!select || select.length === 0 || select[0] === undefined) { + select[0] = (now[0] + now[2] + now[4]) / 3; + select[1] = (now[1] + now[3] + now[5]) / 3; + select[2] = (now[0] + now[2] + now[4]) / 3 + 1; + select[3] = (now[1] + now[3] + now[5]) / 3 + 1; + } else { + select[2] = (now[0] + now[2] + now[4]) / 3; + select[3] = (now[1] + now[3] + now[5]) / 3; + } + r.redrawHint('select', true); + r.redraw(); + + // pinch to zoom + } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom + && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) { + // two fingers => pinch to zoom + e.preventDefault(); + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + if (draggedEles) { + r.redrawHint('drag', true); + for (var i = 0; i < draggedEles.length; i++) { + var de_p = draggedEles[i]._private; + de_p.grabbed = false; + de_p.rscratch.inDragLayer = false; + } + } + var _start = r.touchData.start; + + // (x2, y2) for fingers 1 and 2 + var f1x2 = e.touches[0].clientX - offsetLeft, + f1y2 = e.touches[0].clientY - offsetTop; + var f2x2 = e.touches[1].clientX - offsetLeft, + f2y2 = e.touches[1].clientY - offsetTop; + var distance2 = distance(f1x2, f1y2, f2x2, f2y2); + // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 ); + // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq ); + var factor = distance2 / distance1; + if (twoFingersStartInside) { + // delta finger1 + var df1x = f1x2 - f1x1; + var df1y = f1y2 - f1y1; + + // delta finger 2 + var df2x = f2x2 - f2x1; + var df2y = f2y2 - f2y1; + + // translation is the normalised vector of the two fingers movement + // i.e. so pinching cancels out and moving together pans + var tx = (df1x + df2x) / 2; + var ty = (df1y + df2y) / 2; + + // now calculate the zoom + var zoom1 = cy.zoom(); + var zoom2 = zoom1 * factor; + var pan1 = cy.pan(); + + // the model center point converted to the current rendered pos + var ctrx = modelCenter1[0] * zoom1 + pan1.x; + var ctry = modelCenter1[1] * zoom1 + pan1.y; + var pan2 = { + x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx, + y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry + }; + + // remove dragged eles + if (_start && _start.active()) { + var draggedEles = r.dragData.touchDragEles; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + _start.unactivate().emit('freeon'); + draggedEles.emit('free'); + if (r.dragData.didDrag) { + _start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + cy.viewport({ + zoom: zoom2, + pan: pan2, + cancelOnFailedZoom: true + }); + cy.emit('pinchzoom'); + distance1 = distance2; + f1x1 = f1x2; + f1y1 = f1y2; + f2x1 = f2x2; + f2y1 = f2y2; + r.pinching = true; + } + + // Re-project + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning + ) { + var start = r.touchData.start; + var last = r.touchData.last; + var near; + if (!r.hoverData.draggingEles && !r.swipePanning) { + near = r.findNearestElement(now[0], now[1], true, true); + } + if (capture && start != null) { + e.preventDefault(); + } + + // dragging nodes + if (capture && start != null && r.nodeIsDraggable(start)) { + if (isOverThresholdDrag) { + // then dragging can happen + var draggedEles = r.dragData.touchDragEles; + var justStartedDrag = !r.dragData.didDrag; + if (justStartedDrag) { + addNodesToDrag(draggedEles, { + inDragLayer: true + }); + } + r.dragData.didDrag = true; + var totalShift = { + x: 0, + y: 0 + }; + if (number$1(disp[0]) && number$1(disp[1])) { + totalShift.x += disp[0]; + totalShift.y += disp[1]; + if (justStartedDrag) { + r.redrawHint('eles', true); + var dragDelta = r.touchData.dragDelta; + if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) { + totalShift.x += dragDelta[0]; + totalShift.y += dragDelta[1]; + } + } + } + r.hoverData.draggingEles = true; + draggedEles.silentShift(totalShift).emit('position drag'); + r.redrawHint('drag', true); + if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) { + r.redrawHint('eles', true); + } + r.redraw(); + } else { + // otherwise keep track of drag delta for later + var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || []; + if (dragDelta.length === 0) { + dragDelta.push(disp[0]); + dragDelta.push(disp[1]); + } else { + dragDelta[0] += disp[0]; + dragDelta[1] += disp[1]; + } + } + } + + // touchmove + { + triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, { + x: now[0], + y: now[1] + }); + if ((!start || !start.grabbed()) && near != last) { + if (last) { + last.emit({ + originalEvent: e, + type: 'tapdragout', + position: { + x: now[0], + y: now[1] + } + }); + } + if (near) { + near.emit({ + originalEvent: e, + type: 'tapdragover', + position: { + x: now[0], + y: now[1] + } + }); + } + } + r.touchData.last = near; + } + + // check to cancel taphold + if (capture) { + for (var i = 0; i < now.length; i++) { + if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) { + r.touchData.singleTouchMoved = true; + } + } + } + + // panning + if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) { + var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts); + if (allowPassthrough) { + e.preventDefault(); + if (!r.data.bgActivePosistion) { + r.data.bgActivePosistion = array2point(r.touchData.startPosition); + } + if (r.swipePanning) { + cy.panBy({ + x: disp[0] * zoom, + y: disp[1] * zoom + }); + cy.emit('dragpan'); + } else if (isOverThresholdDrag) { + r.swipePanning = true; + cy.panBy({ + x: dx * zoom, + y: dy * zoom + }); + cy.emit('dragpan'); + if (start) { + start.unactivate(); + r.redrawHint('select', true); + r.touchData.start = null; + } + } + } + + // Re-project + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + } + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + + // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning + if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + r.redraw(); + } + }, false); + var touchcancelHandler; + r.registerBinding(containerWindow, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + r.touchData.capture = false; + if (start) { + start.unactivate(); + } + }); + var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp; + r.registerBinding(containerWindow, 'touchend', touchendHandler = function touchendHandler(e) { + // eslint-disable-line no-unused-vars + var start = r.touchData.start; + var capture = r.touchData.capture; + if (capture) { + if (e.touches.length === 0) { + r.touchData.capture = false; + } + e.preventDefault(); + } else { + return; + } + var select = r.selection; + r.swipePanning = false; + r.hoverData.draggingEles = false; + var cy = r.cy; + var zoom = cy.zoom(); + var now = r.touchData.now; + var earlier = r.touchData.earlier; + if (e.touches[0]) { + var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY); + now[0] = pos[0]; + now[1] = pos[1]; + } + if (e.touches[1]) { + var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY); + now[2] = pos[0]; + now[3] = pos[1]; + } + if (e.touches[2]) { + var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY); + now[4] = pos[0]; + now[5] = pos[1]; + } + if (start) { + start.unactivate(); + } + var ctxTapend; + if (r.touchData.cxt) { + ctxTapend = { + originalEvent: e, + type: 'cxttapend', + position: { + x: now[0], + y: now[1] + } + }; + if (start) { + start.emit(ctxTapend); + } else { + cy.emit(ctxTapend); + } + if (!r.touchData.cxtDragged) { + var ctxTap = { + originalEvent: e, + type: 'cxttap', + position: { + x: now[0], + y: now[1] + } + }; + if (start) { + start.emit(ctxTap); + } else { + cy.emit(ctxTap); + } + } + if (r.touchData.start) { + r.touchData.start._private.grabbed = false; + } + r.touchData.cxt = false; + r.touchData.start = null; + r.redraw(); + return; + } + + // no more box selection if we don't have three fingers + if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) { + r.touchData.selecting = false; + var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3])); + select[0] = undefined; + select[1] = undefined; + select[2] = undefined; + select[3] = undefined; + select[4] = 0; + r.redrawHint('select', true); + cy.emit({ + type: 'boxend', + originalEvent: e, + position: { + x: now[0], + y: now[1] + } + }); + var eleWouldBeSelected = function eleWouldBeSelected(ele) { + return ele.selectable() && !ele.selected(); + }; + box.emit('box').stdFilter(eleWouldBeSelected).select().emit('boxselect'); + if (box.nonempty()) { + r.redrawHint('eles', true); + } + r.redraw(); + } + if (start != null) { + start.unactivate(); + } + if (e.touches[2]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) { + r.data.bgActivePosistion = undefined; + r.redrawHint('select', true); + var draggedEles = r.dragData.touchDragEles; + if (start != null) { + var startWasGrabbed = start._private.grabbed; + freeDraggedElements(draggedEles); + r.redrawHint('drag', true); + r.redrawHint('eles', true); + if (startWasGrabbed) { + start.emit('freeon'); + draggedEles.emit('free'); + if (r.dragData.didDrag) { + start.emit('dragfreeon'); + draggedEles.emit('dragfree'); + } + } + triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + start.unactivate(); + r.touchData.start = null; + } else { + var near = r.findNearestElement(now[0], now[1], true, true); + triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, { + x: now[0], + y: now[1] + }); + } + var dx = r.touchData.startPosition[0] - now[0]; + var dx2 = dx * dx; + var dy = r.touchData.startPosition[1] - now[1]; + var dy2 = dy * dy; + var dist2 = dx2 + dy2; + var rdist2 = dist2 * zoom * zoom; + + // Tap event, roughly same as mouse click event for touch + if (!r.touchData.singleTouchMoved) { + if (!start) { + cy.$(':selected').unselect(['tapunselect']); + } + triggerEvents(start, ['tap', 'vclick'], e, { + x: now[0], + y: now[1] + }); + didDoubleTouch = false; + if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { + touchTimeout && clearTimeout(touchTimeout); + didDoubleTouch = true; + prevTouchTimeStamp = null; + triggerEvents(start, ['dbltap', 'vdblclick'], e, { + x: now[0], + y: now[1] + }); + } else { + touchTimeout = setTimeout(function () { + if (didDoubleTouch) return; + triggerEvents(start, ['onetap', 'voneclick'], e, { + x: now[0], + y: now[1] + }); + }, cy.multiClickDebounceTime()); + prevTouchTimeStamp = e.timeStamp; + } + } + + // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance + if (start != null && !r.dragData.didDrag // didn't drag nodes around + && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection + ) { + if (cy.selectionType() === 'single') { + cy.$(isSelected).unmerge(start).unselect(['tapunselect']); + start.select(['tapselect']); + } else { + if (start.selected()) { + start.unselect(['tapunselect']); + } else { + start.select(['tapselect']); + } + } + r.redrawHint('eles', true); + } + r.touchData.singleTouchMoved = true; + } + for (var j = 0; j < now.length; j++) { + earlier[j] = now[j]; + } + r.dragData.didDrag = false; // reset for next touchstart + + if (e.touches.length === 0) { + r.touchData.dragDelta = []; + r.touchData.startPosition = [null, null, null, null, null, null]; + r.touchData.startGPosition = null; + r.touchData.didSelect = false; + } + if (e.touches.length < 2) { + if (e.touches.length === 1) { + // the old start global pos'n may not be the same finger that remains + r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY]; + } + r.pinching = false; + r.redrawHint('eles', true); + r.redraw(); + } + + //r.redraw(); + }, false); + + // fallback compatibility layer for ms pointer events + if (typeof TouchEvent === 'undefined') { + var pointers = []; + var makeTouch = function makeTouch(e) { + return { + clientX: e.clientX, + clientY: e.clientY, + force: 1, + identifier: e.pointerId, + pageX: e.pageX, + pageY: e.pageY, + radiusX: e.width / 2, + radiusY: e.height / 2, + screenX: e.screenX, + screenY: e.screenY, + target: e.target + }; + }; + var makePointer = function makePointer(e) { + return { + event: e, + touch: makeTouch(e) + }; + }; + var addPointer = function addPointer(e) { + pointers.push(makePointer(e)); + }; + var removePointer = function removePointer(e) { + for (var i = 0; i < pointers.length; i++) { + var p = pointers[i]; + if (p.event.pointerId === e.pointerId) { + pointers.splice(i, 1); + return; + } + } + }; + var updatePointer = function updatePointer(e) { + var p = pointers.filter(function (p) { + return p.event.pointerId === e.pointerId; + })[0]; + p.event = e; + p.touch = makeTouch(e); + }; + var addTouchesToEvent = function addTouchesToEvent(e) { + e.touches = pointers.map(function (p) { + return p.touch; + }); + }; + var pointerIsMouse = function pointerIsMouse(e) { + return e.pointerType === 'mouse' || e.pointerType === 4; + }; + r.registerBinding(r.container, 'pointerdown', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + e.preventDefault(); + addPointer(e); + addTouchesToEvent(e); + touchstartHandler(e); + }); + r.registerBinding(r.container, 'pointerup', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + removePointer(e); + addTouchesToEvent(e); + touchendHandler(e); + }); + r.registerBinding(r.container, 'pointercancel', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + removePointer(e); + addTouchesToEvent(e); + touchcancelHandler(e); + }); + r.registerBinding(r.container, 'pointermove', function (e) { + if (pointerIsMouse(e)) { + return; + } // mouse already handled + + e.preventDefault(); + updatePointer(e); + addTouchesToEvent(e); + touchmoveHandler(e); + }); + } +}; + +var BRp$2 = {}; +BRp$2.generatePolygon = function (name, points) { + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: points, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding); + } + }; +}; +BRp$2.generateEllipse = function () { + return this.nodeShapes['ellipse'] = { + renderer: this, + name: 'ellipse', + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return checkInEllipse(x, y, width, height, centerX, centerY, padding); + } + }; +}; +BRp$2.generateRoundPolygon = function (name, points) { + // Pre-compute control points + // Since these points depend on the radius length (which in turns depend on the width/height of the node) we will only pre-compute + // the unit vectors. + // For simplicity the layout will be: + // [ p0, UnitVectorP0P1, p1, UniVectorP1P2, ..., pn, UnitVectorPnP0 ] + var allPoints = new Array(points.length * 2); + for (var i = 0; i < points.length / 2; i++) { + var sourceIndex = i * 2; + var destIndex = void 0; + if (i < points.length / 2 - 1) { + destIndex = (i + 1) * 2; + } else { + destIndex = 0; + } + allPoints[i * 4] = points[sourceIndex]; + allPoints[i * 4 + 1] = points[sourceIndex + 1]; + var xDest = points[destIndex] - points[sourceIndex]; + var yDest = points[destIndex + 1] - points[sourceIndex + 1]; + var norm = Math.sqrt(xDest * xDest + yDest * yDest); + allPoints[i * 4 + 2] = xDest / norm; + allPoints[i * 4 + 3] = yDest / norm; + } + return this.nodeShapes[name] = { + renderer: this, + name: name, + points: allPoints, + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height); + } + }; +}; +BRp$2.generateRoundRectangle = function () { + return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = { + renderer: this, + name: 'round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = cornerRadius * 2; + + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } + + // Check top left quarter circle + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } + + // Check top right quarter circle + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY - height / 2 + cornerRadius, padding)) { + return true; + } + + // Check bottom right quarter circle + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + // Check bottom left quarter circle + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + return false; + } + }; +}; +BRp$2.generateCutRectangle = function () { + return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = { + renderer: this, + name: 'cut-rectangle', + cornerLength: getCutRectangleCornerLength(), + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY) { + var cl = this.cornerLength; + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + + // points are in clockwise order, inner (imaginary) triangle pt on [4, 5] + return { + topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl], + topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl], + bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl], + bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl] + }; + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * this.cornerLength, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * this.cornerLength, height, [0, -1], padding)) { + return true; + } + var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY); + return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft); + } + }; +}; +BRp$2.generateBarrel = function () { + return this.nodeShapes['barrel'] = { + renderer: this, + name: 'barrel', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + // use two fixed t values for the bezier curve approximation + + var t0 = 0.15; + var t1 = 0.5; + var t2 = 0.85; + var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY); + var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) { + // approximate curve pts based on the two t values + var m0 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t0); + var m1 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t1); + var m2 = qbezierPtAt({ + x: pts[0], + y: pts[1] + }, { + x: pts[2], + y: pts[3] + }, { + x: pts[4], + y: pts[5] + }, t2); + return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]]; + }; + var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); + return polygonIntersectLine(x, y, pts, nodeX, nodeY); + }, + generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) { + var hh = height / 2; + var hw = width / 2; + var xBegin = centerX - hw; + var xEnd = centerX + hw; + var yBegin = centerY - hh; + var yEnd = centerY + hh; + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width; + + // points are in clockwise order, inner (imaginary) control pt on [4, 5] + var pts = { + topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin], + topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset], + bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd], + bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset] + }; + pts.topLeft.isTop = true; + pts.topRight.isTop = true; + pts.bottomLeft.isBottom = true; + pts.bottomRight.isBottom = true; + return pts; + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var curveConstants = getBarrelCurveConstants(width, height); + var hOffset = curveConstants.heightOffset; + var wOffset = curveConstants.widthOffset; + + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) { + return true; + } + var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY); + var getCurveT = function getCurveT(x, y, curvePts) { + var x0 = curvePts[4]; + var x1 = curvePts[2]; + var x2 = curvePts[0]; + var y0 = curvePts[5]; + // var y1 = curvePts[ 3 ]; + var y2 = curvePts[1]; + var xMin = Math.min(x0, x2); + var xMax = Math.max(x0, x2); + var yMin = Math.min(y0, y2); + var yMax = Math.max(y0, y2); + if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { + var coeff = bezierPtsToQuadCoeff(x0, x1, x2); + var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x); + var validRoots = roots.filter(function (r) { + return 0 <= r && r <= 1; + }); + if (validRoots.length > 0) { + return validRoots[0]; + } + } + return null; + }; + var curveRegions = Object.keys(barrelCurvePts); + for (var i = 0; i < curveRegions.length; i++) { + var corner = curveRegions[i]; + var cornerPts = barrelCurvePts[corner]; + var t = getCurveT(x, y, cornerPts); + if (t == null) { + continue; + } + var y0 = cornerPts[5]; + var y1 = cornerPts[3]; + var y2 = cornerPts[1]; + var bezY = qbezierAt(y0, y1, y2, t); + if (cornerPts.isTop && bezY <= y) { + return true; + } + if (cornerPts.isBottom && y <= bezY) { + return true; + } + } + return false; + } + }; +}; +BRp$2.generateBottomRoundrectangle = function () { + return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = { + renderer: this, + name: 'bottom-round-rectangle', + points: generateUnitNgonPointsFitToSquare(4, 0), + draw: function draw(context, centerX, centerY, width, height) { + this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height); + }, + intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding) { + var topStartX = nodeX - (width / 2 + padding); + var topStartY = nodeY - (height / 2 + padding); + var topEndY = topStartY; + var topEndX = nodeX + (width / 2 + padding); + var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); + if (topIntersections.length > 0) { + return topIntersections; + } + return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding); + }, + checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY) { + var cornerRadius = getRoundRectangleRadius(width, height); + var diam = 2 * cornerRadius; + + // Check hBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) { + return true; + } + + // Check vBox + if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) { + return true; + } + + // check non-rounded top side + var outerWidth = width / 2 + 2 * padding; + var outerHeight = height / 2 + 2 * padding; + var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; + if (pointInsidePolygonPoints(x, y, points)) { + return true; + } + + // Check bottom right quarter circle + if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + + // Check bottom left quarter circle + if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) { + return true; + } + return false; + } + }; +}; +BRp$2.registerNodeShapes = function () { + var nodeShapes = this.nodeShapes = {}; + var renderer = this; + this.generateEllipse(); + this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0)); + this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0)); + nodeShapes['square'] = nodeShapes['rectangle']; + this.generateRoundRectangle(); + this.generateCutRectangle(); + this.generateBarrel(); + this.generateBottomRoundrectangle(); + { + var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0]; + this.generatePolygon('diamond', diamondPoints); + this.generateRoundPolygon('round-diamond', diamondPoints); + } + this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0)); + this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0)); + this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0)); + this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0)); + this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0)); + var star5Points = new Array(20); + { + var outerPoints = generateUnitNgonPoints(5, 0); + var innerPoints = generateUnitNgonPoints(5, Math.PI / 5); + + // Outer radius is 1; inner radius of star is smaller + var innerRadius = 0.5 * (3 - Math.sqrt(5)); + innerRadius *= 1.57; + for (var i = 0; i < innerPoints.length / 2; i++) { + innerPoints[i * 2] *= innerRadius; + innerPoints[i * 2 + 1] *= innerRadius; + } + for (var i = 0; i < 20 / 4; i++) { + star5Points[i * 4] = outerPoints[i * 2]; + star5Points[i * 4 + 1] = outerPoints[i * 2 + 1]; + star5Points[i * 4 + 2] = innerPoints[i * 2]; + star5Points[i * 4 + 3] = innerPoints[i * 2 + 1]; + } + } + star5Points = fitPolygonToSquare(star5Points); + this.generatePolygon('star', star5Points); + this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]); + this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]); + this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]); + this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]); + { + var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1]; + this.generatePolygon('tag', tagPoints); + this.generateRoundPolygon('round-tag', tagPoints); + } + nodeShapes.makePolygon = function (points) { + // use caching on user-specified polygons so they are as fast as native shapes + + var key = points.join('$'); + var name = 'polygon-' + key; + var shape; + if (shape = this[name]) { + // got cached shape + return shape; + } + + // create and cache new shape + return renderer.generatePolygon(name, points); + }; +}; + +var BRp$1 = {}; +BRp$1.timeToRender = function () { + return this.redrawTotalTime / this.redrawCount; +}; +BRp$1.redraw = function (options) { + options = options || staticEmptyObject(); + var r = this; + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = 0; + } + if (r.lastRedrawTime === undefined) { + r.lastRedrawTime = 0; + } + if (r.lastDrawTime === undefined) { + r.lastDrawTime = 0; + } + r.requestedFrame = true; + r.renderOptions = options; +}; +BRp$1.beforeRender = function (fn, priority) { + // the renderer can't add tick callbacks when destroyed + if (this.destroyed) { + return; + } + if (priority == null) { + error('Priority is not optional for beforeRender'); + } + var cbs = this.beforeRenderCallbacks; + cbs.push({ + fn: fn, + priority: priority + }); + + // higher priority callbacks executed first + cbs.sort(function (a, b) { + return b.priority - a.priority; + }); +}; +var beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) { + var cbs = r.beforeRenderCallbacks; + for (var i = 0; i < cbs.length; i++) { + cbs[i].fn(willDraw, startTime); + } +}; +BRp$1.startRenderLoop = function () { + var r = this; + var cy = r.cy; + if (r.renderLoopStarted) { + return; + } else { + r.renderLoopStarted = true; + } + var renderFn = function renderFn(requestTime) { + if (r.destroyed) { + return; + } + if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) { + beforeRenderCallbacks(r, true, requestTime); + var startTime = performanceNow(); + r.render(r.renderOptions); + var endTime = r.lastDrawTime = performanceNow(); + if (r.averageRedrawTime === undefined) { + r.averageRedrawTime = endTime - startTime; + } + if (r.redrawCount === undefined) { + r.redrawCount = 0; + } + r.redrawCount++; + if (r.redrawTotalTime === undefined) { + r.redrawTotalTime = 0; + } + var duration = endTime - startTime; + r.redrawTotalTime += duration; + r.lastRedrawTime = duration; + + // use a weighted average with a bias from the previous average so we don't spike so easily + r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; + r.requestedFrame = false; + } else { + beforeRenderCallbacks(r, false, requestTime); + } + r.skipFrame = false; + requestAnimationFrame(renderFn); + }; + requestAnimationFrame(renderFn); +}; + +var BaseRenderer = function BaseRenderer(options) { + this.init(options); +}; +var BR = BaseRenderer; +var BRp = BR.prototype; +BRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl']; +BRp.init = function (options) { + var r = this; + r.options = options; + r.cy = options.cy; + var ctr = r.container = options.cy.container(); + var containerWindow = r.cy.window(); + + // prepend a stylesheet in the head such that + if (containerWindow) { + var document = containerWindow.document; + var head = document.head; + var stylesheetId = '__________cytoscape_stylesheet'; + var className = '__________cytoscape_container'; + var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null; + if (ctr.className.indexOf(className) < 0) { + ctr.className = (ctr.className || '') + ' ' + className; + } + if (!stylesheetAlreadyExists) { + var stylesheet = document.createElement('style'); + stylesheet.id = stylesheetId; + stylesheet.textContent = '.' + className + ' { position: relative; }'; + head.insertBefore(stylesheet, head.children[0]); // first so lowest priority + } + + var computedStyle = containerWindow.getComputedStyle(ctr); + var position = computedStyle.getPropertyValue('position'); + if (position === 'static') { + warn('A Cytoscape container has style position:static and so can not use UI extensions properly'); + } + } + r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag + + r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95]; + + //--Pointer-related data + r.hoverData = { + down: null, + last: null, + downTime: null, + triggerMode: null, + dragging: false, + initialPan: [null, null], + capture: false + }; + r.dragData = { + possibleDragElements: [] + }; + r.touchData = { + start: null, + capture: false, + // These 3 fields related to tap, taphold events + startPosition: [null, null, null, null, null, null], + singleTouchStartTime: null, + singleTouchMoved: true, + now: [null, null, null, null, null, null], + earlier: [null, null, null, null, null, null] + }; + r.redraws = 0; + r.showFps = options.showFps; + r.debug = options.debug; + r.hideEdgesOnViewport = options.hideEdgesOnViewport; + r.textureOnViewport = options.textureOnViewport; + r.wheelSensitivity = options.wheelSensitivity; + r.motionBlurEnabled = options.motionBlur; // on by default + r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null; + r.motionBlur = options.motionBlur; // for initial kick off + r.motionBlurOpacity = options.motionBlurOpacity; + r.motionBlurTransparency = 1 - r.motionBlurOpacity; + r.motionBlurPxRatio = 1; + r.mbPxRBlurry = 1; //0.8; + r.minMbLowQualFrames = 4; + r.fullQualityMb = false; + r.clearedForMotionBlur = []; + r.desktopTapThreshold = options.desktopTapThreshold; + r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold; + r.touchTapThreshold = options.touchTapThreshold; + r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold; + r.tapholdDuration = 500; + r.bindings = []; + r.beforeRenderCallbacks = []; + r.beforeRenderPriorities = { + // higher priority execs before lower one + animations: 400, + eleCalcs: 300, + eleTxrDeq: 200, + lyrTxrDeq: 150, + lyrTxrSkip: 100 + }; + r.registerNodeShapes(); + r.registerArrowShapes(); + r.registerCalculationListeners(); +}; +BRp.notify = function (eventName, eles) { + var r = this; + var cy = r.cy; + + // the renderer can't be notified after it's destroyed + if (this.destroyed) { + return; + } + if (eventName === 'init') { + r.load(); + return; + } + if (eventName === 'destroy') { + r.destroy(); + return; + } + if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') { + r.invalidateCachedZSortedEles(); + } + if (eventName === 'viewport') { + r.redrawHint('select', true); + } + if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + } + r.redrawHint('eles', true); + r.redrawHint('drag', true); + this.startRenderLoop(); + this.redraw(); +}; +BRp.destroy = function () { + var r = this; + r.destroyed = true; + r.cy.stopAnimationLoop(); + for (var i = 0; i < r.bindings.length; i++) { + var binding = r.bindings[i]; + var b = binding; + var tgt = b.target; + (tgt.off || tgt.removeEventListener).apply(tgt, b.args); + } + r.bindings = []; + r.beforeRenderCallbacks = []; + r.onUpdateEleCalcsFns = []; + if (r.removeObserver) { + r.removeObserver.disconnect(); + } + if (r.styleObserver) { + r.styleObserver.disconnect(); + } + if (r.resizeObserver) { + r.resizeObserver.disconnect(); + } + if (r.labelCalcDiv) { + try { + document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef + } catch (e) { + // ie10 issue #1014 + } + } +}; +BRp.isHeadless = function () { + return false; +}; +[BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) { + extend(BRp, props); +}); + +var fullFpsTime = 1000 / 60; // assume 60 frames per second + +var defs = { + setupDequeueing: function setupDequeueing(opts) { + return function setupDequeueingImpl() { + var self = this; + var r = this.renderer; + if (self.dequeueingSetup) { + return; + } else { + self.dequeueingSetup = true; + } + var queueRedraw = debounce__default["default"](function () { + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); + }, opts.deqRedrawThreshold); + var dequeue = function dequeue(willDraw, frameStartTime) { + var startTime = performanceNow(); + var avgRenderTime = r.averageRedrawTime; + var renderTime = r.lastRedrawTime; + var deqd = []; + var extent = r.cy.extent(); + var pixelRatio = r.getPixelRatio(); + + // if we aren't in a tick that causes a draw, then the rendered style + // queue won't automatically be flushed before dequeueing starts + if (!willDraw) { + r.flushRenderedStyleQueue(); + } + while (true) { + // eslint-disable-line no-constant-condition + var now = performanceNow(); + var duration = now - startTime; + var frameDuration = now - frameStartTime; + if (renderTime < fullFpsTime) { + // if we're rendering faster than the ideal fps, then do dequeueing + // during all of the remaining frame time + + var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0); + if (frameDuration >= opts.deqFastCost * timeAvailable) { + break; + } + } else { + if (willDraw) { + if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) { + break; + } + } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) { + break; + } + } + var thisDeqd = opts.deq(self, pixelRatio, extent); + if (thisDeqd.length > 0) { + for (var i = 0; i < thisDeqd.length; i++) { + deqd.push(thisDeqd[i]); + } + } else { + break; + } + } + + // callbacks on dequeue + if (deqd.length > 0) { + opts.onDeqd(self, deqd); + if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) { + queueRedraw(); + } + } + }; + var priority = opts.priority || noop$1; + r.beforeRender(dequeue, priority(self)); + }; + } +}; + +// Allows lookups for (ele, lvl) => cache. +// Uses keys so elements may share the same cache. +var ElementTextureCacheLookup = /*#__PURE__*/function () { + function ElementTextureCacheLookup(getKey) { + var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify; + _classCallCheck(this, ElementTextureCacheLookup); + this.idsByKey = new Map$1(); + this.keyForId = new Map$1(); + this.cachesByLvl = new Map$1(); + this.lvls = []; + this.getKey = getKey; + this.doesEleInvalidateKey = doesEleInvalidateKey; + } + _createClass(ElementTextureCacheLookup, [{ + key: "getIdsFor", + value: function getIdsFor(key) { + if (key == null) { + error("Can not get id list for null key"); + } + var idsByKey = this.idsByKey; + var ids = this.idsByKey.get(key); + if (!ids) { + ids = new Set$1(); + idsByKey.set(key, ids); + } + return ids; + } + }, { + key: "addIdForKey", + value: function addIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key).add(id); + } + } + }, { + key: "deleteIdForKey", + value: function deleteIdForKey(key, id) { + if (key != null) { + this.getIdsFor(key)["delete"](id); + } + } + }, { + key: "getNumberOfIdsForKey", + value: function getNumberOfIdsForKey(key) { + if (key == null) { + return 0; + } else { + return this.getIdsFor(key).size; + } + } + }, { + key: "updateKeyMappingFor", + value: function updateKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var currKey = this.getKey(ele); + this.deleteIdForKey(prevKey, id); + this.addIdForKey(currKey, id); + this.keyForId.set(id, currKey); + } + }, { + key: "deleteKeyMappingFor", + value: function deleteKeyMappingFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + this.deleteIdForKey(prevKey, id); + this.keyForId["delete"](id); + } + }, { + key: "keyHasChangedFor", + value: function keyHasChangedFor(ele) { + var id = ele.id(); + var prevKey = this.keyForId.get(id); + var newKey = this.getKey(ele); + return prevKey !== newKey; + } + }, { + key: "isInvalid", + value: function isInvalid(ele) { + return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele); + } + }, { + key: "getCachesAt", + value: function getCachesAt(lvl) { + var cachesByLvl = this.cachesByLvl, + lvls = this.lvls; + var caches = cachesByLvl.get(lvl); + if (!caches) { + caches = new Map$1(); + cachesByLvl.set(lvl, caches); + lvls.push(lvl); + } + return caches; + } + }, { + key: "getCache", + value: function getCache(key, lvl) { + return this.getCachesAt(lvl).get(key); + } + }, { + key: "get", + value: function get(ele, lvl) { + var key = this.getKey(ele); + var cache = this.getCache(key, lvl); + + // getting for an element may need to add to the id list b/c eles can share keys + if (cache != null) { + this.updateKeyMappingFor(ele); + } + return cache; + } + }, { + key: "getForCachedKey", + value: function getForCachedKey(ele, lvl) { + var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key + var cache = this.getCache(key, lvl); + return cache; + } + }, { + key: "hasCache", + value: function hasCache(key, lvl) { + return this.getCachesAt(lvl).has(key); + } + }, { + key: "has", + value: function has(ele, lvl) { + var key = this.getKey(ele); + return this.hasCache(key, lvl); + } + }, { + key: "setCache", + value: function setCache(key, lvl, cache) { + cache.key = key; + this.getCachesAt(lvl).set(key, cache); + } + }, { + key: "set", + value: function set(ele, lvl, cache) { + var key = this.getKey(ele); + this.setCache(key, lvl, cache); + this.updateKeyMappingFor(ele); + } + }, { + key: "deleteCache", + value: function deleteCache(key, lvl) { + this.getCachesAt(lvl)["delete"](key); + } + }, { + key: "delete", + value: function _delete(ele, lvl) { + var key = this.getKey(ele); + this.deleteCache(key, lvl); + } + }, { + key: "invalidateKey", + value: function invalidateKey(key) { + var _this = this; + this.lvls.forEach(function (lvl) { + return _this.deleteCache(key, lvl); + }); + } + + // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key) + }, { + key: "invalidate", + value: function invalidate(ele) { + var id = ele.id(); + var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key) + + this.deleteKeyMappingFor(ele); + var entireKeyInvalidated = this.doesEleInvalidateKey(ele); + if (entireKeyInvalidated) { + // clear mapping for current key + this.invalidateKey(key); + } + return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; + } + }]); + return ElementTextureCacheLookup; +}(); + +var minTxrH = 25; // the size of the texture cache for small height eles (special case) +var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up +var minLvl$1 = -4; // when scaling smaller than that we don't need to re-render +var maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful) +var maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used +var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps +var defTxrWidth = 1024; // default/minimum texture width +var maxTxrW = 1024; // the maximum width of a texture +var maxTxrH = 1024; // the maximum height of a texture +var minUtility = 0.2; // if usage of texture is less than this, it is retired +var maxFullness = 0.8; // fullness of texture after which queue removal is checked +var maxFullnessChecks = 10; // dequeued after this many checks +var deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame +var deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time +var deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing +var deqFastCost$1 = 0.9; // % of frame time to be used when >60fps +var deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile +var maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch + +var getTxrReasons = { + dequeue: 'dequeue', + downscale: 'downscale', + highQuality: 'highQuality' +}; +var initDefaults = defaults$g({ + getKey: null, + doesEleInvalidateKey: falsify, + drawElement: null, + getBoundingBox: null, + getRotationPoint: null, + getRotationOffset: null, + isVisible: trueify, + allowEdgeTxrCaching: true, + allowParentTxrCaching: true +}); +var ElementTextureCache = function ElementTextureCache(renderer, initOptions) { + var self = this; + self.renderer = renderer; + self.onDequeues = []; + var opts = initDefaults(initOptions); + extend(self, opts); + self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey); + self.setupDequeueing(); +}; +var ETCp = ElementTextureCache.prototype; +ETCp.reasons = getTxrReasons; + +// the list of textures in which new subtextures for elements can be placed +ETCp.getTextureQueue = function (txrH) { + var self = this; + self.eleImgCaches = self.eleImgCaches || {}; + return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || []; +}; + +// the list of usused textures which can be recycled (in use in texture queue) +ETCp.getRetiredTextureQueue = function (txrH) { + var self = this; + var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {}; + var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || []; + return rtxtrQ; +}; + +// queue of element draw requests at different scale levels +ETCp.getElementQueue = function () { + var self = this; + var q = self.eleCacheQueue = self.eleCacheQueue || new Heap__default["default"](function (a, b) { + return b.reqs - a.reqs; + }); + return q; +}; + +// queue of element draw requests at different scale levels (element id lookup) +ETCp.getElementKeyToQueue = function () { + var self = this; + var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {}; + return k2q; +}; +ETCp.getElement = function (ele, bb, pxRatio, lvl, reason) { + var self = this; + var r = this.renderer; + var zoom = r.cy.zoom(); + var lookup = this.lookup; + if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) { + return null; + } + if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) { + return null; + } + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + } + if (lvl < minLvl$1) { + lvl = minLvl$1; + } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) { + return null; + } + var scale = Math.pow(2, lvl); + var eleScaledH = bb.h * scale; + var eleScaledW = bb.w * scale; + var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale); + if (!this.isVisible(ele, scaledLabelShown)) { + return null; + } + var eleCache = lookup.get(ele, lvl); + + // if this get was on an unused/invalidated cache, then restore the texture usage metric + if (eleCache && eleCache.invalidated) { + eleCache.invalidated = false; + eleCache.texture.invalidatedWidth -= eleCache.width; + } + if (eleCache) { + return eleCache; + } + var txrH; // which texture height this ele belongs to + + if (eleScaledH <= minTxrH) { + txrH = minTxrH; + } else if (eleScaledH <= txrStepH) { + txrH = txrStepH; + } else { + txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH; + } + if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) { + return null; // caching large elements is not efficient + } + + var txrQ = self.getTextureQueue(txrH); + + // first try the second last one in case it has space at the end + var txr = txrQ[txrQ.length - 2]; + var addNewTxr = function addNewTxr() { + return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW); + }; + + // try the last one if there is no second last one + if (!txr) { + txr = txrQ[txrQ.length - 1]; + } + + // if the last one doesn't exist, we need a first one + if (!txr) { + txr = addNewTxr(); + } + + // if there's no room in the current texture, we need a new one + if (txr.width - txr.usedWidth < eleScaledW) { + txr = addNewTxr(); + } + var scalableFrom = function scalableFrom(otherCache) { + return otherCache && otherCache.scaledLabelShown === scaledLabelShown; + }; + var deqing = reason && reason === getTxrReasons.dequeue; + var highQualityReq = reason && reason === getTxrReasons.highQuality; + var downscaleReq = reason && reason === getTxrReasons.downscale; + var higherCache; // the nearest cache with a higher level + for (var l = lvl + 1; l <= maxLvl$1; l++) { + var c = lookup.get(ele, l); + if (c) { + higherCache = c; + break; + } + } + var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null; + var downscale = function downscale() { + txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH); + }; + + // reset ele area in texture + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH); + if (scalableFrom(oneUpCache)) { + // then we can relatively cheaply rescale the existing image w/o rerendering + downscale(); + } else if (scalableFrom(higherCache)) { + // then use the higher cache for now and queue the next level down + // to cheaply scale towards the smaller level + + if (highQualityReq) { + for (var _l = higherCache.level; _l > lvl; _l--) { + oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale); + } + downscale(); + } else { + self.queueElement(ele, higherCache.level - 1); + return higherCache; + } + } else { + var lowerCache; // the nearest cache with a lower level + if (!deqing && !highQualityReq && !downscaleReq) { + for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) { + var _c = lookup.get(ele, _l2); + if (_c) { + lowerCache = _c; + break; + } + } + } + if (scalableFrom(lowerCache)) { + // then use the lower quality cache for now and queue the better one for later + + self.queueElement(ele, lvl); + return lowerCache; + } + txr.context.translate(txr.usedWidth, 0); + txr.context.scale(scale, scale); + this.drawElement(txr.context, ele, bb, scaledLabelShown, false); + txr.context.scale(1 / scale, 1 / scale); + txr.context.translate(-txr.usedWidth, 0); + } + eleCache = { + x: txr.usedWidth, + texture: txr, + level: lvl, + scale: scale, + width: eleScaledW, + height: eleScaledH, + scaledLabelShown: scaledLabelShown + }; + txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing); + txr.eleCaches.push(eleCache); + lookup.set(ele, lvl, eleCache); + self.checkTextureFullness(txr); + return eleCache; +}; +ETCp.invalidateElements = function (eles) { + for (var i = 0; i < eles.length; i++) { + this.invalidateElement(eles[i]); + } +}; +ETCp.invalidateElement = function (ele) { + var self = this; + var lookup = self.lookup; + var caches = []; + var invalid = lookup.isInvalid(ele); + if (!invalid) { + return; // override the invalidation request if the element key has not changed + } + + for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) { + var cache = lookup.getForCachedKey(ele, lvl); + if (cache) { + caches.push(cache); + } + } + var noOtherElesUseCache = lookup.invalidate(ele); + if (noOtherElesUseCache) { + for (var i = 0; i < caches.length; i++) { + var _cache = caches[i]; + var txr = _cache.texture; + + // remove space from the texture it belongs to + txr.invalidatedWidth += _cache.width; + + // mark the cache as invalidated + _cache.invalidated = true; + + // retire the texture if its utility is low + self.checkTextureUtility(txr); + } + } + + // remove from queue since the old req was for the old state + self.removeFromQueue(ele); +}; +ETCp.checkTextureUtility = function (txr) { + // invalidate all entries in the cache if the cache size is small + if (txr.invalidatedWidth >= minUtility * txr.width) { + this.retireTexture(txr); + } +}; +ETCp.checkTextureFullness = function (txr) { + // if texture has been mostly filled and passed over several times, remove + // it from the queue so we don't need to waste time looking at it to put new things + + var self = this; + var txrQ = self.getTextureQueue(txr.height); + if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) { + removeFromArray(txrQ, txr); + } else { + txr.fullnessChecks++; + } +}; +ETCp.retireTexture = function (txr) { + var self = this; + var txrH = txr.height; + var txrQ = self.getTextureQueue(txrH); + var lookup = this.lookup; + + // retire the texture from the active / searchable queue: + + removeFromArray(txrQ, txr); + txr.retired = true; + + // remove the refs from the eles to the caches: + + var eleCaches = txr.eleCaches; + for (var i = 0; i < eleCaches.length; i++) { + var eleCache = eleCaches[i]; + lookup.deleteCache(eleCache.key, eleCache.level); + } + clearArray(eleCaches); + + // add the texture to a retired queue so it can be recycled in future: + + var rtxtrQ = self.getRetiredTextureQueue(txrH); + rtxtrQ.push(txr); +}; +ETCp.addTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var txr = {}; + txrQ.push(txr); + txr.eleCaches = []; + txr.height = txrH; + txr.width = Math.max(defTxrWidth, minW); + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height); + txr.context = txr.canvas.getContext('2d'); + return txr; +}; +ETCp.recycleTexture = function (txrH, minW) { + var self = this; + var txrQ = self.getTextureQueue(txrH); + var rtxtrQ = self.getRetiredTextureQueue(txrH); + for (var i = 0; i < rtxtrQ.length; i++) { + var txr = rtxtrQ[i]; + if (txr.width >= minW) { + txr.retired = false; + txr.usedWidth = 0; + txr.invalidatedWidth = 0; + txr.fullnessChecks = 0; + clearArray(txr.eleCaches); + txr.context.setTransform(1, 0, 0, 1, 0, 0); + txr.context.clearRect(0, 0, txr.width, txr.height); + removeFromArray(rtxtrQ, txr); + txrQ.push(txr); + return txr; + } + } +}; +ETCp.queueElement = function (ele, lvl) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var existingReq = k2q[key]; + if (existingReq) { + // use the max lvl b/c in between lvls are cheap to make + existingReq.level = Math.max(existingReq.level, lvl); + existingReq.eles.merge(ele); + existingReq.reqs++; + q.updateItem(existingReq); + } else { + var req = { + eles: ele.spawn().merge(ele), + level: lvl, + reqs: 1, + key: key + }; + q.push(req); + k2q[key] = req; + } +}; +ETCp.dequeue = function (pxRatio /*, extent*/) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var dequeued = []; + var lookup = self.lookup; + for (var i = 0; i < maxDeqSize$1; i++) { + if (q.size() > 0) { + var req = q.pop(); + var key = req.key; + var ele = req.eles[0]; // all eles have the same key + var cacheExists = lookup.hasCache(ele, req.level); + + // clear out the key to req lookup + k2q[key] = null; + + // dequeueing isn't necessary with an existing cache + if (cacheExists) { + continue; + } + dequeued.push(req); + var bb = self.getBoundingBox(ele); + self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue); + } else { + break; + } + } + return dequeued; +}; +ETCp.removeFromQueue = function (ele) { + var self = this; + var q = self.getElementQueue(); + var k2q = self.getElementKeyToQueue(); + var key = this.getKey(ele); + var req = k2q[key]; + if (req != null) { + if (req.eles.length === 1) { + // remove if last ele in the req + // bring to front of queue + req.reqs = MAX_INT$1; + q.updateItem(req); + q.pop(); // remove from queue + + k2q[key] = null; // remove from lookup map + } else { + // otherwise just remove ele from req + req.eles.unmerge(ele); + } + } +}; +ETCp.onDequeue = function (fn) { + this.onDequeues.push(fn); +}; +ETCp.offDequeue = function (fn) { + removeFromArray(this.onDequeues, fn); +}; +ETCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold$1, + deqCost: deqCost$1, + deqAvgCost: deqAvgCost$1, + deqNoDrawCost: deqNoDrawCost$1, + deqFastCost: deqFastCost$1, + deq: function deq(self, pxRatio, extent) { + return self.dequeue(pxRatio, extent); + }, + onDeqd: function onDeqd(self, deqd) { + for (var i = 0; i < self.onDequeues.length; i++) { + var fn = self.onDequeues[i]; + fn(deqd); + } + }, + shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) { + for (var i = 0; i < deqd.length; i++) { + var eles = deqd[i].eles; + for (var j = 0; j < eles.length; j++) { + var bb = eles[j].boundingBox(); + if (boundingBoxesIntersect(bb, extent)) { + return true; + } + } + } + return false; + }, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.eleTxrDeq; + } +}); + +var defNumLayers = 1; // default number of layers to use +var minLvl = -4; // when scaling smaller than that we don't need to re-render +var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful) +var maxZoom = 3.99; // beyond this zoom level, layered textures are not used +var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile +var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates +var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame +var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time +var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing +var deqFastCost = 0.9; // % of frame time to be used when >60fps +var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch +var invalidThreshold = 250; // time threshold for disabling b/c of invalidations +var maxLayerArea = 4000 * 4000; // layers can't be bigger than this +var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm) + +// var log = function(){ console.log.apply( console, arguments ); }; + +var LayeredTextureCache = function LayeredTextureCache(renderer) { + var self = this; + var r = self.renderer = renderer; + var cy = r.cy; + self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ] + + self.firstGet = true; + self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; + self.skipping = false; + self.eleTxrDeqs = cy.collection(); + self.scheduleElementRefinement = debounce__default["default"](function () { + self.refineElementTextures(self.eleTxrDeqs); + self.eleTxrDeqs.unmerge(self.eleTxrDeqs); + }, refineEleDebounceTime); + r.beforeRender(function (willDraw, now) { + if (now - self.lastInvalidationTime <= invalidThreshold) { + self.skipping = true; + } else { + self.skipping = false; + } + }, r.beforeRenderPriorities.lyrTxrSkip); + var qSort = function qSort(a, b) { + return b.reqs - a.reqs; + }; + self.layersQueue = new Heap__default["default"](qSort); + self.setupDequeueing(); +}; +var LTCp = LayeredTextureCache.prototype; +var layerIdPool = 0; +var MAX_INT = Math.pow(2, 53) - 1; +LTCp.makeLayer = function (bb, lvl) { + var scale = Math.pow(2, lvl); + var w = Math.ceil(bb.w * scale); + var h = Math.ceil(bb.h * scale); + var canvas = this.renderer.makeOffscreenCanvas(w, h); + var layer = { + id: layerIdPool = ++layerIdPool % MAX_INT, + bb: bb, + level: lvl, + width: w, + height: h, + canvas: canvas, + context: canvas.getContext('2d'), + eles: [], + elesQueue: [], + reqs: 0 + }; + + // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level); + + var cxt = layer.context; + var dx = -layer.bb.x1; + var dy = -layer.bb.y1; + + // do the transform on creation to save cycles (it's the same for all eles) + cxt.scale(scale, scale); + cxt.translate(dx, dy); + return layer; +}; +LTCp.getLayers = function (eles, pxRatio, lvl) { + var self = this; + var r = self.renderer; + var cy = r.cy; + var zoom = cy.zoom(); + var firstGet = self.firstGet; + self.firstGet = false; + + // log('--\nget layers with %s eles', eles.length); + //log eles.map(function(ele){ return ele.id() }) ); + + if (lvl == null) { + lvl = Math.ceil(log2(zoom * pxRatio)); + if (lvl < minLvl) { + lvl = minLvl; + } else if (zoom >= maxZoom || lvl > maxLvl) { + return null; + } + } + self.validateLayersElesOrdering(lvl, eles); + var layersByLvl = self.layersByLevel; + var scale = Math.pow(2, lvl); + var layers = layersByLvl[lvl] = layersByLvl[lvl] || []; + var bb; + var lvlComplete = self.levelIsComplete(lvl, eles); + var tmpLayers; + var checkTempLevels = function checkTempLevels() { + var canUseAsTmpLvl = function canUseAsTmpLvl(l) { + self.validateLayersElesOrdering(l, eles); + if (self.levelIsComplete(l, eles)) { + tmpLayers = layersByLvl[l]; + return true; + } + }; + var checkLvls = function checkLvls(dir) { + if (tmpLayers) { + return; + } + for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) { + if (canUseAsTmpLvl(l)) { + break; + } + } + }; + checkLvls(+1); + checkLvls(-1); + + // remove the invalid layers; they will be replaced as needed later in this function + for (var i = layers.length - 1; i >= 0; i--) { + var layer = layers[i]; + if (layer.invalid) { + removeFromArray(layers, layer); + } + } + }; + if (!lvlComplete) { + // if the current level is incomplete, then use the closest, best quality layerset temporarily + // and later queue the current layerset so we can get the proper quality level soon + + checkTempLevels(); + } else { + // log('level complete, using existing layers\n--'); + return layers; + } + var getBb = function getBb() { + if (!bb) { + bb = makeBoundingBox(); + for (var i = 0; i < eles.length; i++) { + updateBoundingBox(bb, eles[i].boundingBox()); + } + } + return bb; + }; + var makeLayer = function makeLayer(opts) { + opts = opts || {}; + var after = opts.after; + getBb(); + var area = bb.w * scale * (bb.h * scale); + if (area > maxLayerArea) { + return null; + } + var layer = self.makeLayer(bb, lvl); + if (after != null) { + var index = layers.indexOf(after) + 1; + layers.splice(index, 0, layer); + } else if (opts.insert === undefined || opts.insert) { + // no after specified => first layer made so put at start + layers.unshift(layer); + } + + // if( tmpLayers ){ + //self.queueLayer( layer ); + // } + + return layer; + }; + if (self.skipping && !firstGet) { + // log('skip layers'); + return null; + } + + // log('do layers'); + + var layer = null; + var maxElesPerLayer = eles.length / defNumLayers; + var allowLazyQueueing = !firstGet; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + + // log('look at ele', ele.id()); + + var existingLayer = caches[lvl]; + if (existingLayer) { + // reuse layer for later eles + // log('reuse layer for', ele.id()); + layer = existingLayer; + continue; + } + if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) { + // log('make new layer for ele %s', ele.id()); + + layer = makeLayer({ + insert: true, + after: layer + }); + + // if now layer can be built then we can't use layers at this level + if (!layer) { + return null; + } + + // log('new layer with id %s', layer.id); + } + + if (tmpLayers || allowLazyQueueing) { + // log('queue ele %s in layer %s', ele.id(), layer.id); + self.queueLayer(layer, ele); + } else { + // log('draw ele %s in layer %s', ele.id(), layer.id); + self.drawEleInLayer(layer, ele, lvl, pxRatio); + } + layer.eles.push(ele); + caches[lvl] = layer; + } + + // log('--'); + + if (tmpLayers) { + // then we only queued the current layerset and can't draw it yet + return tmpLayers; + } + if (allowLazyQueueing) { + // log('lazy queue level', lvl); + return null; + } + return layers; +}; + +// a layer may want to use an ele cache of a higher level to avoid blurriness +// so the layer level might not equal the ele level +LTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) { + return lvl; +}; +LTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) { + var self = this; + var r = this.renderer; + var context = layer.context; + var bb = ele.boundingBox(); + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + lvl = self.getEleLevelForLayerLevel(lvl, pxRatio); + { + r.setImgSmoothing(context, false); + } + { + r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs); + } + { + r.setImgSmoothing(context, true); + } +}; +LTCp.levelIsComplete = function (lvl, eles) { + var self = this; + var layers = self.layersByLevel[lvl]; + if (!layers || layers.length === 0) { + return false; + } + var numElesInLayers = 0; + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + + // if there are any eles needed to be drawn yet, the level is not complete + if (layer.reqs > 0) { + return false; + } + + // if the layer is invalid, the level is not complete + if (layer.invalid) { + return false; + } + numElesInLayers += layer.eles.length; + } + + // we should have exactly the number of eles passed in to be complete + if (numElesInLayers !== eles.length) { + return false; + } + return true; +}; +LTCp.validateLayersElesOrdering = function (lvl, eles) { + var layers = this.layersByLevel[lvl]; + if (!layers) { + return; + } + + // if in a layer the eles are not in the same order, then the layer is invalid + // (i.e. there is an ele in between the eles in the layer) + + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var offset = -1; + + // find the offset + for (var j = 0; j < eles.length; j++) { + if (layer.eles[0] === eles[j]) { + offset = j; + break; + } + } + if (offset < 0) { + // then the layer has nonexistent elements and is invalid + this.invalidateLayer(layer); + continue; + } + + // the eles in the layer must be in the same continuous order, else the layer is invalid + + var o = offset; + for (var j = 0; j < layer.eles.length; j++) { + if (layer.eles[j] !== eles[o + j]) { + // log('invalidate based on ordering', layer.id); + + this.invalidateLayer(layer); + break; + } + } + } +}; +LTCp.updateElementsInLayers = function (eles, update) { + var self = this; + var isEles = element(eles[0]); + + // collect udpated elements (cascaded from the layers) and update each + // layer itself along the way + for (var i = 0; i < eles.length; i++) { + var req = isEles ? null : eles[i]; + var ele = isEles ? eles[i] : eles[i].ele; + var rs = ele._private.rscratch; + var caches = rs.imgLayerCaches = rs.imgLayerCaches || {}; + for (var l = minLvl; l <= maxLvl; l++) { + var layer = caches[l]; + if (!layer) { + continue; + } + + // if update is a request from the ele cache, then it affects only + // the matching level + if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) { + continue; + } + update(layer, ele, req); + } + } +}; +LTCp.haveLayers = function () { + var self = this; + var haveLayers = false; + for (var l = minLvl; l <= maxLvl; l++) { + var layers = self.layersByLevel[l]; + if (layers && layers.length > 0) { + haveLayers = true; + break; + } + } + return haveLayers; +}; +LTCp.invalidateElements = function (eles) { + var self = this; + if (eles.length === 0) { + return; + } + self.lastInvalidationTime = performanceNow(); + + // log('update invalidate layer time from eles'); + + if (eles.length === 0 || !self.haveLayers()) { + return; + } + self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) { + self.invalidateLayer(layer); + }); +}; +LTCp.invalidateLayer = function (layer) { + // log('update invalidate layer time'); + + this.lastInvalidationTime = performanceNow(); + if (layer.invalid) { + return; + } // save cycles + + var lvl = layer.level; + var eles = layer.eles; + var layers = this.layersByLevel[lvl]; + + // log('invalidate layer', layer.id ); + + removeFromArray(layers, layer); + // layer.eles = []; + + layer.elesQueue = []; + layer.invalid = true; + if (layer.replacement) { + layer.replacement.invalid = true; + } + for (var i = 0; i < eles.length; i++) { + var caches = eles[i]._private.rscratch.imgLayerCaches; + if (caches) { + caches[lvl] = null; + } + } +}; +LTCp.refineElementTextures = function (eles) { + var self = this; + + // log('refine', eles.length); + + self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) { + var rLyr = layer.replacement; + if (!rLyr) { + rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level); + rLyr.replaces = layer; + rLyr.eles = layer.eles; + + // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level); + } + + if (!rLyr.reqs) { + for (var i = 0; i < rLyr.eles.length; i++) { + self.queueLayer(rLyr, rLyr.eles[i]); + } + + // log('queue replacement layer refinement', rLyr.id); + } + }); +}; + +LTCp.enqueueElementRefinement = function (ele) { + this.eleTxrDeqs.merge(ele); + this.scheduleElementRefinement(); +}; +LTCp.queueLayer = function (layer, ele) { + var self = this; + var q = self.layersQueue; + var elesQ = layer.elesQueue; + var hasId = elesQ.hasId = elesQ.hasId || {}; + + // if a layer is going to be replaced, queuing is a waste of time + if (layer.replacement) { + return; + } + if (ele) { + if (hasId[ele.id()]) { + return; + } + elesQ.push(ele); + hasId[ele.id()] = true; + } + if (layer.reqs) { + layer.reqs++; + q.updateItem(layer); + } else { + layer.reqs = 1; + q.push(layer); + } +}; +LTCp.dequeue = function (pxRatio) { + var self = this; + var q = self.layersQueue; + var deqd = []; + var eleDeqs = 0; + while (eleDeqs < maxDeqSize) { + if (q.size() === 0) { + break; + } + var layer = q.peek(); + + // if a layer has been or will be replaced, then don't waste time with it + if (layer.replacement) { + // log('layer %s in queue skipped b/c it already has a replacement', layer.id); + q.pop(); + continue; + } + + // if this is a replacement layer that has been superceded, then forget it + if (layer.replaces && layer !== layer.replaces.replacement) { + // log('layer is no longer the most uptodate replacement; dequeued', layer.id) + q.pop(); + continue; + } + if (layer.invalid) { + // log('replacement layer %s is invalid; dequeued', layer.id); + q.pop(); + continue; + } + var ele = layer.elesQueue.shift(); + if (ele) { + // log('dequeue layer %s', layer.id); + + self.drawEleInLayer(layer, ele, layer.level, pxRatio); + eleDeqs++; + } + if (deqd.length === 0) { + // we need only one entry in deqd to queue redrawing etc + deqd.push(true); + } + + // if the layer has all its eles done, then remove from the queue + if (layer.elesQueue.length === 0) { + q.pop(); + layer.reqs = 0; + + // log('dequeue of layer %s complete', layer.id); + + // when a replacement layer is dequeued, it replaces the old layer in the level + if (layer.replaces) { + self.applyLayerReplacement(layer); + } + self.requestRedraw(); + } + } + return deqd; +}; +LTCp.applyLayerReplacement = function (layer) { + var self = this; + var layersInLevel = self.layersByLevel[layer.level]; + var replaced = layer.replaces; + var index = layersInLevel.indexOf(replaced); + + // if the replaced layer is not in the active list for the level, then replacing + // refs would be a mistake (i.e. overwriting the true active layer) + if (index < 0 || replaced.invalid) { + // log('replacement layer would have no effect', layer.id); + return; + } + layersInLevel[index] = layer; // replace level ref + + // replace refs in eles + for (var i = 0; i < layer.eles.length; i++) { + var _p = layer.eles[i]._private; + var cache = _p.imgLayerCaches = _p.imgLayerCaches || {}; + if (cache) { + cache[layer.level] = layer; + } + } + + // log('apply replacement layer %s over %s', layer.id, replaced.id); + + self.requestRedraw(); +}; +LTCp.requestRedraw = debounce__default["default"](function () { + var r = this.renderer; + r.redrawHint('eles', true); + r.redrawHint('drag', true); + r.redraw(); +}, 100); +LTCp.setupDequeueing = defs.setupDequeueing({ + deqRedrawThreshold: deqRedrawThreshold, + deqCost: deqCost, + deqAvgCost: deqAvgCost, + deqNoDrawCost: deqNoDrawCost, + deqFastCost: deqFastCost, + deq: function deq(self, pxRatio) { + return self.dequeue(pxRatio); + }, + onDeqd: noop$1, + shouldRedraw: trueify, + priority: function priority(self) { + return self.renderer.beforeRenderPriorities.lyrTxrDeq; + } +}); + +var CRp$a = {}; +var impl; +function polygon(context, points) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + context.lineTo(pt.x, pt.y); + } +} +function triangleBackcurve(context, points, controlPoint) { + var firstPt; + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + if (i === 0) { + firstPt = pt; + } + context.lineTo(pt.x, pt.y); + } + context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y); +} +function triangleTee(context, trianglePoints, teePoints) { + if (context.beginPath) { + context.beginPath(); + } + var triPts = trianglePoints; + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + var teePts = teePoints; + var firstTeePt = teePoints[0]; + context.moveTo(firstTeePt.x, firstTeePt.y); + for (var i = 1; i < teePts.length; i++) { + var pt = teePts[i]; + context.lineTo(pt.x, pt.y); + } + if (context.closePath) { + context.closePath(); + } +} +function circleTriangle(context, trianglePoints, rx, ry, r) { + if (context.beginPath) { + context.beginPath(); + } + context.arc(rx, ry, r, 0, Math.PI * 2, false); + var triPts = trianglePoints; + var firstTrPt = triPts[0]; + context.moveTo(firstTrPt.x, firstTrPt.y); + for (var i = 0; i < triPts.length; i++) { + var pt = triPts[i]; + context.lineTo(pt.x, pt.y); + } + if (context.closePath) { + context.closePath(); + } +} +function circle(context, rx, ry, r) { + context.arc(rx, ry, r, 0, Math.PI * 2, false); +} +CRp$a.arrowShapeImpl = function (name) { + return (impl || (impl = { + 'polygon': polygon, + 'triangle-backcurve': triangleBackcurve, + 'triangle-tee': triangleTee, + 'circle-triangle': circleTriangle, + 'triangle-cross': triangleTee, + 'circle': circle + }))[name]; +}; + +var CRp$9 = {}; +CRp$9.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) { + var r = this; + if (ele.isNode()) { + r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } else { + r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity); + } +}; +CRp$9.drawElementOverlay = function (context, ele) { + var r = this; + if (ele.isNode()) { + r.drawNodeOverlay(context, ele); + } else { + r.drawEdgeOverlay(context, ele); + } +}; +CRp$9.drawElementUnderlay = function (context, ele) { + var r = this; + if (ele.isNode()) { + r.drawNodeUnderlay(context, ele); + } else { + r.drawEdgeUnderlay(context, ele); + } +}; +CRp$9.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) { + var r = this; + var bb = eleTxrCache.getBoundingBox(ele); + if (bb.w === 0 || bb.h === 0) { + return; + } // ignore zero size case + + var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason); + if (eleCache != null) { + var opacity = getOpacity(r, ele); + if (opacity === 0) { + return; + } + var theta = getRotation(r, ele); + var x1 = bb.x1, + y1 = bb.y1, + w = bb.w, + h = bb.h; + var x, y, sx, sy, smooth; + if (theta !== 0) { + var rotPt = eleTxrCache.getRotationPoint(ele); + sx = rotPt.x; + sy = rotPt.y; + context.translate(sx, sy); + context.rotate(theta); + smooth = r.getImgSmoothing(context); + if (!smooth) { + r.setImgSmoothing(context, true); + } + var off = eleTxrCache.getRotationOffset(ele); + x = off.x; + y = off.y; + } else { + x = x1; + y = y1; + } + var oldGlobalAlpha; + if (opacity !== 1) { + oldGlobalAlpha = context.globalAlpha; + context.globalAlpha = oldGlobalAlpha * opacity; + } + context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h); + if (opacity !== 1) { + context.globalAlpha = oldGlobalAlpha; + } + if (theta !== 0) { + context.rotate(-theta); + context.translate(-sx, -sy); + if (!smooth) { + r.setImgSmoothing(context, false); + } + } + } else { + eleTxrCache.drawElement(context, ele); // direct draw fallback + } +}; + +var getZeroRotation = function getZeroRotation() { + return 0; +}; +var getLabelRotation = function getLabelRotation(r, ele) { + return r.getTextAngle(ele, null); +}; +var getSourceLabelRotation = function getSourceLabelRotation(r, ele) { + return r.getTextAngle(ele, 'source'); +}; +var getTargetLabelRotation = function getTargetLabelRotation(r, ele) { + return r.getTextAngle(ele, 'target'); +}; +var getOpacity = function getOpacity(r, ele) { + return ele.effectiveOpacity(); +}; +var getTextOpacity = function getTextOpacity(e, ele) { + return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity(); +}; +CRp$9.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) { + var r = this; + var _r$data = r.data, + eleTxrCache = _r$data.eleTxrCache, + lblTxrCache = _r$data.lblTxrCache, + slbTxrCache = _r$data.slbTxrCache, + tlbTxrCache = _r$data.tlbTxrCache; + var bb = ele.boundingBox(); + var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null; + if (bb.w === 0 || bb.h === 0 || !ele.visible()) { + return; + } + if (!extent || boundingBoxesIntersect(bb, extent)) { + var isEdge = ele.isEdge(); + var badLine = ele.element()._private.rscratch.badLine; + r.drawElementUnderlay(context, ele); + r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity); + if (!isEdge || !badLine) { + r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity); + } + if (isEdge && !badLine) { + r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity); + r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity); + } + r.drawElementOverlay(context, ele); + } +}; +CRp$9.drawElements = function (context, eles) { + var r = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawElement(context, ele); + } +}; +CRp$9.drawCachedElements = function (context, eles, pxRatio, extent) { + var r = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + r.drawCachedElement(context, ele, pxRatio, extent); + } +}; +CRp$9.drawCachedNodes = function (context, eles, pxRatio, extent) { + var r = this; + for (var i = 0; i < eles.length; i++) { + var ele = eles[i]; + if (!ele.isNode()) { + continue; + } + r.drawCachedElement(context, ele, pxRatio, extent); + } +}; +CRp$9.drawLayeredElements = function (context, eles, pxRatio, extent) { + var r = this; + var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio); + if (layers) { + for (var i = 0; i < layers.length; i++) { + var layer = layers[i]; + var bb = layer.bb; + if (bb.w === 0 || bb.h === 0) { + continue; + } + context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h); + } + } else { + // fall back on plain caching if no layers + r.drawCachedElements(context, eles, pxRatio, extent); + } +}; + +/* global Path2D */ +var CRp$8 = {}; +CRp$8.drawEdge = function (context, edge, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var rs = edge._private.rscratch; + if (shouldDrawOpacity && !edge.visible()) { + return; + } + + // if bezier ctrl pts can not be calculated, then die + if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) { + // isNaN in case edge is impossible and browser bugs (e.g. safari) + return; + } + var bb; + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1; + var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1; + var curveStyle = edge.pstyle('curve-style').value; + var lineStyle = edge.pstyle('line-style').value; + var edgeWidth = edge.pstyle('width').pfValue; + var lineCap = edge.pstyle('line-cap').value; + var effectiveLineOpacity = opacity * lineOpacity; + // separate arrow opacity would require arrow-opacity property + var effectiveArrowOpacity = opacity * lineOpacity; + var drawLine = function drawLine() { + var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity; + if (curveStyle === 'straight-triangle') { + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgeTrianglePath(edge, context, rs.allpts); + } else { + context.lineWidth = edgeWidth; + context.lineCap = lineCap; + r.eleStrokeStyle(context, edge, strokeOpacity); + r.drawEdgePath(edge, context, rs.allpts, lineStyle); + context.lineCap = 'butt'; // reset for other drawing functions + } + }; + + var drawOverlay = function drawOverlay() { + if (!shouldDrawOverlay) { + return; + } + r.drawEdgeOverlay(context, edge); + }; + var drawUnderlay = function drawUnderlay() { + if (!shouldDrawOverlay) { + return; + } + r.drawEdgeUnderlay(context, edge); + }; + var drawArrows = function drawArrows() { + var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity; + r.drawArrowheads(context, edge, arrowOpacity); + }; + var drawText = function drawText() { + r.drawElementText(context, edge, null, drawLabel); + }; + context.lineJoin = 'round'; + var ghost = edge.pstyle('ghost').value === 'yes'; + if (ghost) { + var gx = edge.pstyle('ghost-offset-x').pfValue; + var gy = edge.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = edge.pstyle('ghost-opacity').value; + var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity; + context.translate(gx, gy); + drawLine(effectiveGhostOpacity); + drawArrows(effectiveGhostOpacity); + context.translate(-gx, -gy); + } + drawUnderlay(); + drawLine(); + drawArrows(); + drawOverlay(); + drawText(); + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; +var drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + return function (context, edge) { + if (!edge.visible()) { + return; + } + var opacity = edge.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + if (opacity === 0) { + return; + } + var r = this; + var usePaths = r.usePaths(); + var rs = edge._private.rscratch; + var padding = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var width = 2 * padding; + var color = edge.pstyle("".concat(overlayOrUnderlay, "-color")).value; + context.lineWidth = width; + if (rs.edgeType === 'self' && !usePaths) { + context.lineCap = 'butt'; + } else { + context.lineCap = 'round'; + } + r.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + r.drawEdgePath(edge, context, rs.allpts, 'solid'); + }; +}; +CRp$8.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay'); +CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay'); +CRp$8.drawEdgePath = function (edge, context, pts, type) { + var rs = edge._private.rscratch; + var canvasCxt = context; + var path; + var pathCacheHit = false; + var usePaths = this.usePaths(); + var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue; + var lineDashOffset = edge.pstyle('line-dash-offset').pfValue; + if (usePaths) { + var pathCacheKey = pts.join('$'); + var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey; + if (keyMatches) { + path = context = rs.pathCache; + pathCacheHit = true; + } else { + path = context = new Path2D(); + rs.pathCacheKey = pathCacheKey; + rs.pathCache = path; + } + } + if (canvasCxt.setLineDash) { + // for very outofdate browsers + switch (type) { + case 'dotted': + canvasCxt.setLineDash([1, 1]); + break; + case 'dashed': + canvasCxt.setLineDash(lineDashPattern); + canvasCxt.lineDashOffset = lineDashOffset; + break; + case 'solid': + canvasCxt.setLineDash([]); + break; + } + } + if (!pathCacheHit && !rs.badLine) { + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(pts[0], pts[1]); + switch (rs.edgeType) { + case 'bezier': + case 'self': + case 'compound': + case 'multibezier': + for (var i = 2; i + 3 < pts.length; i += 4) { + context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]); + } + break; + case 'straight': + case 'segments': + case 'haystack': + for (var _i = 2; _i + 1 < pts.length; _i += 2) { + context.lineTo(pts[_i], pts[_i + 1]); + } + break; + } + } + context = canvasCxt; + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + + // reset any line dashes + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } +}; +CRp$8.drawEdgeTrianglePath = function (edge, context, pts) { + // use line stroke style for triangle fill style + context.fillStyle = context.strokeStyle; + var edgeWidth = edge.pstyle('width').pfValue; + for (var i = 0; i + 1 < pts.length; i += 2) { + var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]]; + var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]); + var normal = [vector[1] / length, -vector[0] / length]; + var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2]; + context.beginPath(); + context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]); + context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]); + context.lineTo(pts[i + 2], pts[i + 3]); + context.closePath(); + context.fill(); + } +}; +CRp$8.drawArrowheads = function (context, edge, opacity) { + var rs = edge._private.rscratch; + var isHaystack = rs.edgeType === 'haystack'; + if (!isHaystack) { + this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity); + } + this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity); + this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity); + if (!isHaystack) { + this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity); + } +}; +CRp$8.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) { + if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) { + return; + } + var self = this; + var arrowShape = edge.pstyle(prefix + '-arrow-shape').value; + if (arrowShape === 'none') { + return; + } + var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled'; + var arrowFill = edge.pstyle(prefix + '-arrow-fill').value; + var edgeWidth = edge.pstyle('width').pfValue; + var pArrowWidth = edge.pstyle(prefix + '-arrow-width'); + var arrowWidth = pArrowWidth.value === 'match-line' ? edgeWidth : pArrowWidth.pfValue; + if (pArrowWidth.units === '%') arrowWidth *= edgeWidth; + var edgeOpacity = edge.pstyle('opacity').value; + if (opacity === undefined) { + opacity = edgeOpacity; + } + var gco = context.globalCompositeOperation; + if (opacity !== 1 || arrowFill === 'hollow') { + // then extra clear is needed + context.globalCompositeOperation = 'destination-out'; + self.colorFillStyle(context, 255, 255, 255, 1); + self.colorStrokeStyle(context, 255, 255, 255, 1); + self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, arrowWidth, x, y, angle); + context.globalCompositeOperation = gco; + } // otherwise, the opaque arrow clears it for free :) + + var color = edge.pstyle(prefix + '-arrow-color').value; + self.colorFillStyle(context, color[0], color[1], color[2], opacity); + self.colorStrokeStyle(context, color[0], color[1], color[2], opacity); + self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x, y, angle); +}; +CRp$8.drawArrowShape = function (edge, context, fill, edgeWidth, shape, shapeWidth, x, y, angle) { + var r = this; + var usePaths = this.usePaths() && shape !== 'triangle-cross'; + var pathCacheHit = false; + var path; + var canvasContext = context; + var translation = { + x: x, + y: y + }; + var scale = edge.pstyle('arrow-scale').value; + var size = this.getArrowWidth(edgeWidth, scale); + var shapeImpl = r.arrowShapes[shape]; + if (usePaths) { + var cache = r.arrowPathCache = r.arrowPathCache || []; + var key = hashString(shape); + var cachedPath = cache[key]; + if (cachedPath != null) { + path = context = cachedPath; + pathCacheHit = true; + } else { + path = context = new Path2D(); + cache[key] = path; + } + } + if (!pathCacheHit) { + if (context.beginPath) { + context.beginPath(); + } + if (usePaths) { + // store in the path cache with values easily manipulated later + shapeImpl.draw(context, 1, 0, { + x: 0, + y: 0 + }, 1); + } else { + shapeImpl.draw(context, size, angle, translation, edgeWidth); + } + if (context.closePath) { + context.closePath(); + } + } + context = canvasContext; + if (usePaths) { + // set transform to arrow position/orientation + context.translate(x, y); + context.rotate(angle); + context.scale(size, size); + } + if (fill === 'filled' || fill === 'both') { + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + if (fill === 'hollow' || fill === 'both') { + context.lineWidth = shapeWidth / (usePaths ? size : 1); + context.lineJoin = 'miter'; + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + } + if (usePaths) { + // reset transform by applying inverse + context.scale(1 / size, 1 / size); + context.rotate(-angle); + context.translate(-x, -y); + } +}; + +var CRp$7 = {}; +CRp$7.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) { + // detect problematic cases for old browsers with bad images (cheaper than try-catch) + if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) { + return; + } + try { + context.drawImage(img, ix, iy, iw, ih, x, y, w, h); + } catch (e) { + warn(e); + } +}; +CRp$7.drawInscribedImage = function (context, img, node, index, nodeOpacity) { + var r = this; + var pos = node.position(); + var nodeX = pos.x; + var nodeY = pos.y; + var styleObj = node.cy().style(); + var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj); + var fit = getIndexedStyle(node, 'background-fit', 'value', index); + var repeat = getIndexedStyle(node, 'background-repeat', 'value', index); + var nodeW = node.width(); + var nodeH = node.height(); + var paddingX2 = node.padding() * 2; + var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2); + var rs = node._private.rscratch; + var clip = getIndexedStyle(node, 'background-clip', 'value', index); + var shouldClip = clip === 'node'; + var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity; + var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index); + var imgW = img.width || img.cachedW; + var imgH = img.height || img.cachedH; + + // workaround for broken browsers like ie + if (null == imgW || null == imgH) { + document.body.appendChild(img); // eslint-disable-line no-undef + + imgW = img.cachedW = img.width || img.offsetWidth; + imgH = img.cachedH = img.height || img.offsetHeight; + document.body.removeChild(img); // eslint-disable-line no-undef + } + + var w = imgW; + var h = imgH; + if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-width', 'units', index) === '%') { + w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW; + } else { + w = getIndexedStyle(node, 'background-width', 'pfValue', index); + } + } + if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') { + if (getIndexedStyle(node, 'background-height', 'units', index) === '%') { + h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH; + } else { + h = getIndexedStyle(node, 'background-height', 'pfValue', index); + } + } + if (w === 0 || h === 0) { + return; // no point in drawing empty image (and chrome is broken in this case) + } + + if (fit === 'contain') { + var scale = Math.min(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } else if (fit === 'cover') { + var scale = Math.max(nodeTW / w, nodeTH / h); + w *= scale; + h *= scale; + } + var x = nodeX - nodeTW / 2; // left + var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index); + var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index); + if (posXUnits === '%') { + x += (nodeTW - w) * posXPfVal; + } else { + x += posXPfVal; + } + var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index); + var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index); + if (offXUnits === '%') { + x += (nodeTW - w) * offXPfVal; + } else { + x += offXPfVal; + } + var y = nodeY - nodeTH / 2; // top + var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index); + var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index); + if (posYUnits === '%') { + y += (nodeTH - h) * posYPfVal; + } else { + y += posYPfVal; + } + var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index); + var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index); + if (offYUnits === '%') { + y += (nodeTH - h) * offYPfVal; + } else { + y += offYPfVal; + } + if (rs.pathCache) { + x -= nodeX; + y -= nodeY; + nodeX = 0; + nodeY = 0; + } + var gAlpha = context.globalAlpha; + context.globalAlpha = imgOpacity; + var smoothingEnabled = r.getImgSmoothing(context); + var isSmoothingSwitched = false; + if (smooth === 'no' && smoothingEnabled) { + r.setImgSmoothing(context, false); + isSmoothingSwitched = true; + } else if (smooth === 'yes' && !smoothingEnabled) { + r.setImgSmoothing(context, true); + isSmoothingSwitched = true; + } + if (repeat === 'no-repeat') { + if (shouldClip) { + context.save(); + if (rs.pathCache) { + context.clip(rs.pathCache); + } else { + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.clip(); + } + } + r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h); + if (shouldClip) { + context.restore(); + } + } else { + var pattern = context.createPattern(img, repeat); + context.fillStyle = pattern; + r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH); + context.translate(x, y); + context.fill(); + context.translate(-x, -y); + } + context.globalAlpha = gAlpha; + if (isSmoothingSwitched) { + r.setImgSmoothing(context, smoothingEnabled); + } +}; + +var CRp$6 = {}; +CRp$6.eleTextBiggerThanMin = function (ele, scale) { + if (!scale) { + var zoom = ele.cy().zoom(); + var pxRatio = this.getPixelRatio(); + var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level + + scale = Math.pow(2, lvl); + } + var computedSize = ele.pstyle('font-size').pfValue * scale; + var minSize = ele.pstyle('min-zoomed-font-size').pfValue; + if (computedSize < minSize) { + return false; + } + return true; +}; +CRp$6.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) { + var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + if (force == null) { + if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) { + return; + } + } else if (force === false) { + return; + } + if (ele.isNode()) { + var label = ele.pstyle('label'); + if (!label || !label.value) { + return; + } + var justification = r.getLabelJustification(ele); + context.textAlign = justification; + context.textBaseline = 'bottom'; + } else { + var badLine = ele.element()._private.rscratch.badLine; + var _label = ele.pstyle('label'); + var srcLabel = ele.pstyle('source-label'); + var tgtLabel = ele.pstyle('target-label'); + if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) { + return; + } + context.textAlign = 'center'; + context.textBaseline = 'bottom'; + } + var applyRotation = !shiftToOriginWithBb; + var bb; + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + if (prefix == null) { + r.drawText(context, ele, null, applyRotation, useEleOpacity); + if (ele.isEdge()) { + r.drawText(context, ele, 'source', applyRotation, useEleOpacity); + r.drawText(context, ele, 'target', applyRotation, useEleOpacity); + } + } else { + r.drawText(context, ele, prefix, applyRotation, useEleOpacity); + } + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; +CRp$6.getFontCache = function (context) { + var cache; + this.fontCaches = this.fontCaches || []; + for (var i = 0; i < this.fontCaches.length; i++) { + cache = this.fontCaches[i]; + if (cache.context === context) { + return cache; + } + } + cache = { + context: context + }; + this.fontCaches.push(cache); + return cache; +}; + +// set up canvas context with font +// returns transformed text string +CRp$6.setupTextStyle = function (context, ele) { + var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + // Font style + var labelStyle = ele.pstyle('font-style').strValue; + var labelSize = ele.pstyle('font-size').pfValue + 'px'; + var labelFamily = ele.pstyle('font-family').strValue; + var labelWeight = ele.pstyle('font-weight').strValue; + var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1; + var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity; + var color = ele.pstyle('color').value; + var outlineColor = ele.pstyle('text-outline-color').value; + context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily; + context.lineJoin = 'round'; // so text outlines aren't jagged + + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity); +}; + +// TODO ensure re-used +function roundRect(ctx, x, y, width, height) { + var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5; + var stroke = arguments.length > 6 ? arguments[6] : undefined; + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + if (stroke) ctx.stroke();else ctx.fill(); +} +CRp$6.getTextAngle = function (ele, prefix) { + var theta; + var _p = ele._private; + var rscratch = _p.rscratch; + var pdash = prefix ? prefix + '-' : ''; + var rotation = ele.pstyle(pdash + 'text-rotation'); + var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix); + if (rotation.strValue === 'autorotate') { + theta = ele.isEdge() ? textAngle : 0; + } else if (rotation.strValue === 'none') { + theta = 0; + } else { + theta = rotation.pfValue; + } + return theta; +}; +CRp$6.drawText = function (context, ele, prefix) { + var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var _p = ele._private; + var rscratch = _p.rscratch; + var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1; + if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) { + return; + } + + // use 'main' as an alias for the main label (i.e. null prefix) + if (prefix === 'main') { + prefix = null; + } + var textX = getPrefixedProperty(rscratch, 'labelX', prefix); + var textY = getPrefixedProperty(rscratch, 'labelY', prefix); + var orgTextX, orgTextY; // used for rotation + var text = this.getLabelText(ele, prefix); + if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) { + this.setupTextStyle(context, ele, useEleOpacity); + var pdash = prefix ? prefix + '-' : ''; + var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix); + var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix); + var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue; + var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue; + var isEdge = ele.isEdge(); + var halign = ele.pstyle('text-halign').value; + var valign = ele.pstyle('text-valign').value; + if (isEdge) { + halign = 'center'; + valign = 'center'; + } + textX += marginX; + textY += marginY; + var theta; + if (!applyRotation) { + theta = 0; + } else { + theta = this.getTextAngle(ele, prefix); + } + if (theta !== 0) { + orgTextX = textX; + orgTextY = textY; + context.translate(orgTextX, orgTextY); + context.rotate(theta); + textX = 0; + textY = 0; + } + switch (valign) { + case 'top': + break; + case 'center': + textY += textH / 2; + break; + case 'bottom': + textY += textH; + break; + } + var backgroundOpacity = ele.pstyle('text-background-opacity').value; + var borderOpacity = ele.pstyle('text-border-opacity').value; + var textBorderWidth = ele.pstyle('text-border-width').pfValue; + var backgroundPadding = ele.pstyle('text-background-padding').pfValue; + var styleShape = ele.pstyle('text-background-shape').strValue; + var rounded = styleShape.indexOf('round') === 0; + var roundRadius = 2; + if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) { + var bgX = textX - backgroundPadding; + switch (halign) { + case 'left': + bgX -= textW; + break; + case 'center': + bgX -= textW / 2; + break; + } + var bgY = textY - textH - backgroundPadding; + var bgW = textW + 2 * backgroundPadding; + var bgH = textH + 2 * backgroundPadding; + if (backgroundOpacity > 0) { + var textFill = context.fillStyle; + var textBackgroundColor = ele.pstyle('text-background-color').value; + context.fillStyle = 'rgba(' + textBackgroundColor[0] + ',' + textBackgroundColor[1] + ',' + textBackgroundColor[2] + ',' + backgroundOpacity * parentOpacity + ')'; + if (rounded) { + roundRect(context, bgX, bgY, bgW, bgH, roundRadius); + } else { + context.fillRect(bgX, bgY, bgW, bgH); + } + context.fillStyle = textFill; + } + if (textBorderWidth > 0 && borderOpacity > 0) { + var textStroke = context.strokeStyle; + var textLineWidth = context.lineWidth; + var textBorderColor = ele.pstyle('text-border-color').value; + var textBorderStyle = ele.pstyle('text-border-style').value; + context.strokeStyle = 'rgba(' + textBorderColor[0] + ',' + textBorderColor[1] + ',' + textBorderColor[2] + ',' + borderOpacity * parentOpacity + ')'; + context.lineWidth = textBorderWidth; + if (context.setLineDash) { + // for very outofdate browsers + switch (textBorderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + case 'dashed': + context.setLineDash([4, 2]); + break; + case 'double': + context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders + context.setLineDash([]); + break; + case 'solid': + context.setLineDash([]); + break; + } + } + if (rounded) { + roundRect(context, bgX, bgY, bgW, bgH, roundRadius, 'stroke'); + } else { + context.strokeRect(bgX, bgY, bgW, bgH); + } + if (textBorderStyle === 'double') { + var whiteWidth = textBorderWidth / 2; + if (rounded) { + roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2, roundRadius, 'stroke'); + } else { + context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); + } + } + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + context.lineWidth = textLineWidth; + context.strokeStyle = textStroke; + } + } + var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle + + if (lineWidth > 0) { + context.lineWidth = lineWidth; + } + if (ele.pstyle('text-wrap').value === 'wrap') { + var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix); + var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix); + var halfTextW = textW / 2; + var justification = this.getLabelJustification(ele); + if (justification === 'auto') ; else if (halign === 'left') { + // auto justification : right + if (justification === 'left') { + textX += -textW; + } else if (justification === 'center') { + textX += -halfTextW; + } // else same as auto + } else if (halign === 'center') { + // auto justfication : center + if (justification === 'left') { + textX += -halfTextW; + } else if (justification === 'right') { + textX += halfTextW; + } // else same as auto + } else if (halign === 'right') { + // auto justification : left + if (justification === 'center') { + textX += halfTextW; + } else if (justification === 'right') { + textX += textW; + } // else same as auto + } + + switch (valign) { + case 'top': + textY -= (lines.length - 1) * lineHeight; + break; + case 'center': + case 'bottom': + textY -= (lines.length - 1) * lineHeight; + break; + } + for (var l = 0; l < lines.length; l++) { + if (lineWidth > 0) { + context.strokeText(lines[l], textX, textY); + } + context.fillText(lines[l], textX, textY); + textY += lineHeight; + } + } else { + if (lineWidth > 0) { + context.strokeText(text, textX, textY); + } + context.fillText(text, textX, textY); + } + if (theta !== 0) { + context.rotate(-theta); + context.translate(-orgTextX, -orgTextY); + } + } +}; + +/* global Path2D */ +var CRp$5 = {}; +CRp$5.drawNode = function (context, node, shiftToOriginWithBb) { + var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; + var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; + var r = this; + var nodeWidth, nodeHeight; + var _p = node._private; + var rs = _p.rscratch; + var pos = node.position(); + if (!number$1(pos.x) || !number$1(pos.y)) { + return; // can't draw node with undefined position + } + + if (shouldDrawOpacity && !node.visible()) { + return; + } + var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1; + var usePaths = r.usePaths(); + var path; + var pathCacheHit = false; + var padding = node.padding(); + nodeWidth = node.width() + 2 * padding; + nodeHeight = node.height() + 2 * padding; + + // + // setup shift + + var bb; + if (shiftToOriginWithBb) { + bb = shiftToOriginWithBb; + context.translate(-bb.x1, -bb.y1); + } + + // + // load bg image + + var bgImgProp = node.pstyle('background-image'); + var urls = bgImgProp.value; + var urlDefined = new Array(urls.length); + var image = new Array(urls.length); + var numImages = 0; + for (var i = 0; i < urls.length; i++) { + var url = urls[i]; + var defd = urlDefined[i] = url != null && url !== 'none'; + if (defd) { + var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i); + numImages++; + + // get image, and if not loaded then ask to redraw when later loaded + image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () { + _p.backgroundTimestamp = Date.now(); + node.emitAndNotify('background'); + }); + } + } + + // + // setup styles + + var darkness = node.pstyle('background-blacken').value; + var borderWidth = node.pstyle('border-width').pfValue; + var bgOpacity = node.pstyle('background-opacity').value * eleOpacity; + var borderColor = node.pstyle('border-color').value; + var borderStyle = node.pstyle('border-style').value; + var borderOpacity = node.pstyle('border-opacity').value * eleOpacity; + var outlineWidth = node.pstyle('outline-width').pfValue; + var outlineColor = node.pstyle('outline-color').value; + var outlineStyle = node.pstyle('outline-style').value; + var outlineOpacity = node.pstyle('outline-opacity').value * eleOpacity; + var outlineOffset = node.pstyle('outline-offset').value; + context.lineJoin = 'miter'; // so borders are square with the node shape + + var setupShapeColor = function setupShapeColor() { + var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity; + r.eleFillStyle(context, node, bgOpy); + }; + var setupBorderColor = function setupBorderColor() { + var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity; + r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy); + }; + var setupOutlineColor = function setupOutlineColor() { + var otlnOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : outlineOpacity; + r.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], otlnOpy); + }; + + // + // setup shape + + var getPath = function getPath(width, height, shape, points) { + var pathCache = r.nodePathCache = r.nodePathCache || []; + var key = hashStrings(shape === 'polygon' ? shape + ',' + points.join(',') : shape, '' + height, '' + width); + var cachedPath = pathCache[key]; + var path; + var cacheHit = false; + if (cachedPath != null) { + path = cachedPath; + cacheHit = true; + rs.pathCache = path; + } else { + path = new Path2D(); + pathCache[key] = rs.pathCache = path; + } + return { + path: path, + cacheHit: cacheHit + }; + }; + var styleShape = node.pstyle('shape').strValue; + var shapePts = node.pstyle('shape-polygon-points').pfValue; + if (usePaths) { + context.translate(pos.x, pos.y); + var shapePath = getPath(nodeWidth, nodeHeight, styleShape, shapePts); + path = shapePath.path; + pathCacheHit = shapePath.cacheHit; + } + var drawShape = function drawShape() { + if (!pathCacheHit) { + var npos = pos; + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight); + } + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + }; + var drawImages = function drawImages() { + var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var prevBging = _p.backgrounding; + var totalCompleted = 0; + for (var _i = 0; _i < image.length; _i++) { + var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i); + if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') { + totalCompleted++; + continue; + } + if (urlDefined[_i] && image[_i].complete && !image[_i].error) { + totalCompleted++; + r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity); + } + } + _p.backgrounding = !(totalCompleted === numImages); + if (prevBging !== _p.backgrounding) { + // update style b/c :backgrounding state changed + node.updateStyle(false); + } + }; + var drawPie = function drawPie() { + var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity; + if (r.hasPie(node)) { + r.drawPie(context, node, pieOpacity); + + // redraw/restore path if steps after pie need it + if (redrawShape) { + if (!usePaths) { + r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight); + } + } + } + }; + var darken = function darken() { + var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity; + var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity; + var c = darkness > 0 ? 0 : 255; + if (darkness !== 0) { + r.colorFillStyle(context, c, c, c, opacity); + if (usePaths) { + context.fill(path); + } else { + context.fill(); + } + } + }; + var drawBorder = function drawBorder() { + if (borderWidth > 0) { + context.lineWidth = borderWidth; + context.lineCap = 'butt'; + if (context.setLineDash) { + // for very outofdate browsers + switch (borderStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + case 'dashed': + context.setLineDash([4, 2]); + break; + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + if (borderStyle === 'double') { + context.lineWidth = borderWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + if (usePaths) { + context.stroke(path); + } else { + context.stroke(); + } + context.globalCompositeOperation = gco; + } + + // reset in case we changed the border style + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + var drawOutline = function drawOutline() { + if (outlineWidth > 0) { + context.lineWidth = outlineWidth; + context.lineCap = 'butt'; + if (context.setLineDash) { + // for very outofdate browsers + switch (outlineStyle) { + case 'dotted': + context.setLineDash([1, 1]); + break; + case 'dashed': + context.setLineDash([4, 2]); + break; + case 'solid': + case 'double': + context.setLineDash([]); + break; + } + } + var npos = pos; + if (usePaths) { + npos = { + x: 0, + y: 0 + }; + } + var shape = r.getNodeShape(node); + var scaleX = (nodeWidth + borderWidth + (outlineWidth + outlineOffset)) / nodeWidth; + var scaleY = (nodeHeight + borderWidth + (outlineWidth + outlineOffset)) / nodeHeight; + var sWidth = nodeWidth * scaleX; + var sHeight = nodeHeight * scaleY; + var points = r.nodeShapes[shape].points; + var _path; + if (usePaths) { + var outlinePath = getPath(sWidth, sHeight, shape, points); + _path = outlinePath.path; + } + + // draw the outline path, either by using expanded points or by scaling + // the dimensions, depending on shape + if (shape === "ellipse") { + r.drawEllipsePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (['round-diamond', 'round-heptagon', 'round-hexagon', 'round-octagon', 'round-pentagon', 'round-polygon', 'round-triangle', 'round-tag'].includes(shape)) { + var sMult = 0; + var offsetX = 0; + var offsetY = 0; + if (shape === 'round-diamond') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.4; + } else if (shape === 'round-heptagon') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.075; + offsetY = -(borderWidth / 2 + outlineOffset + outlineWidth) / 35; + } else if (shape === 'round-hexagon') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.12; + } else if (shape === 'round-pentagon') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.13; + offsetY = -(borderWidth / 2 + outlineOffset + outlineWidth) / 15; + } else if (shape === 'round-tag') { + sMult = (borderWidth + outlineOffset + outlineWidth) * 1.12; + offsetX = (borderWidth / 2 + outlineWidth + outlineOffset) * .07; + } else if (shape === 'round-triangle') { + sMult = (borderWidth + outlineOffset + outlineWidth) * (Math.PI / 2); + offsetY = -(borderWidth + outlineOffset / 2 + outlineWidth) / Math.PI; + } + if (sMult !== 0) { + scaleX = (nodeWidth + sMult) / nodeWidth; + scaleY = (nodeHeight + sMult) / nodeHeight; + } + r.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points); + } else if (['roundrectangle', 'round-rectangle'].includes(shape)) { + r.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (['cutrectangle', 'cut-rectangle'].includes(shape)) { + r.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (['bottomroundrectangle', 'bottom-round-rectangle'].includes(shape)) { + r.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (shape === "barrel") { + r.drawBarrelPath(_path || context, npos.x, npos.y, sWidth, sHeight); + } else if (shape.startsWith("polygon") || ['rhomboid', 'right-rhomboid', 'round-tag', 'tag', 'vee'].includes(shape)) { + var pad = (borderWidth + outlineWidth + outlineOffset) / nodeWidth; + points = joinLines(expandPolygon(points, pad)); + r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); + } else { + var _pad = (borderWidth + outlineWidth + outlineOffset) / nodeWidth; + points = joinLines(expandPolygon(points, -_pad)); + r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points); + } + if (usePaths) { + context.stroke(_path); + } else { + context.stroke(); + } + if (outlineStyle === 'double') { + context.lineWidth = borderWidth / 3; + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + if (usePaths) { + context.stroke(_path); + } else { + context.stroke(); + } + context.globalCompositeOperation = gco; + } + + // reset in case we changed the border style + if (context.setLineDash) { + // for very outofdate browsers + context.setLineDash([]); + } + } + }; + var drawOverlay = function drawOverlay() { + if (shouldDrawOverlay) { + r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + var drawUnderlay = function drawUnderlay() { + if (shouldDrawOverlay) { + r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight); + } + }; + var drawText = function drawText() { + r.drawElementText(context, node, null, drawLabel); + }; + var ghost = node.pstyle('ghost').value === 'yes'; + if (ghost) { + var gx = node.pstyle('ghost-offset-x').pfValue; + var gy = node.pstyle('ghost-offset-y').pfValue; + var ghostOpacity = node.pstyle('ghost-opacity').value; + var effGhostOpacity = ghostOpacity * eleOpacity; + context.translate(gx, gy); + setupOutlineColor(); + drawOutline(); + setupShapeColor(ghostOpacity * bgOpacity); + drawShape(); + drawImages(effGhostOpacity, true); + setupBorderColor(ghostOpacity * borderOpacity); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(effGhostOpacity, false); + darken(effGhostOpacity); + context.translate(-gx, -gy); + } + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + drawUnderlay(); + if (usePaths) { + context.translate(pos.x, pos.y); + } + setupOutlineColor(); + drawOutline(); + setupShapeColor(); + drawShape(); + drawImages(eleOpacity, true); + setupBorderColor(); + drawBorder(); + drawPie(darkness !== 0 || borderWidth !== 0); + drawImages(eleOpacity, false); + darken(); + if (usePaths) { + context.translate(-pos.x, -pos.y); + } + drawText(); + drawOverlay(); + + // + // clean up shift + + if (shiftToOriginWithBb) { + context.translate(bb.x1, bb.y1); + } +}; +var drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) { + if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) { + throw new Error('Invalid state'); + } + return function (context, node, pos, nodeWidth, nodeHeight) { + var r = this; + if (!node.visible()) { + return; + } + var padding = node.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; + var opacity = node.pstyle("".concat(overlayOrUnderlay, "-opacity")).value; + var color = node.pstyle("".concat(overlayOrUnderlay, "-color")).value; + var shape = node.pstyle("".concat(overlayOrUnderlay, "-shape")).value; + if (opacity > 0) { + pos = pos || node.position(); + if (nodeWidth == null || nodeHeight == null) { + var _padding = node.padding(); + nodeWidth = node.width() + 2 * _padding; + nodeHeight = node.height() + 2 * _padding; + } + r.colorFillStyle(context, color[0], color[1], color[2], opacity); + r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2); + context.fill(); + } + }; +}; +CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay('overlay'); +CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay'); + +// does the node have at least one pie piece? +CRp$5.hasPie = function (node) { + node = node[0]; // ensure ele ref + + return node._private.hasPie; +}; +CRp$5.drawPie = function (context, node, nodeOpacity, pos) { + node = node[0]; // ensure ele ref + pos = pos || node.position(); + var cyStyle = node.cy().style(); + var pieSize = node.pstyle('pie-size'); + var x = pos.x; + var y = pos.y; + var nodeW = node.width(); + var nodeH = node.height(); + var radius = Math.min(nodeW, nodeH) / 2; // must fit in node + var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1] + var usePaths = this.usePaths(); + if (usePaths) { + x = 0; + y = 0; + } + if (pieSize.units === '%') { + radius = radius * pieSize.pfValue; + } else if (pieSize.pfValue !== undefined) { + radius = pieSize.pfValue / 2; + } + for (var i = 1; i <= cyStyle.pieBackgroundN; i++) { + // 1..N + var size = node.pstyle('pie-' + i + '-background-size').value; + var color = node.pstyle('pie-' + i + '-background-color').value; + var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity; + var percent = size / 100; // map integer range [0, 100] to [0, 1] + + // percent can't push beyond 1 + if (percent + lastPercent > 1) { + percent = 1 - lastPercent; + } + var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise + var angleDelta = 2 * Math.PI * percent; + var angleEnd = angleStart + angleDelta; + + // ignore if + // - zero size + // - we're already beyond the full circle + // - adding the current slice would go beyond the full circle + if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) { + continue; + } + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, angleStart, angleEnd); + context.closePath(); + this.colorFillStyle(context, color[0], color[1], color[2], opacity); + context.fill(); + lastPercent += percent; + } +}; + +var CRp$4 = {}; +var motionBlurDelay = 100; + +// var isFirefox = typeof InstallTrigger !== 'undefined'; + +CRp$4.getPixelRatio = function () { + var context = this.data.contexts[0]; + if (this.forcedPixelRatio != null) { + return this.forcedPixelRatio; + } + var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef +}; + +CRp$4.paintCache = function (context) { + var caches = this.paintCaches = this.paintCaches || []; + var needToCreateCache = true; + var cache; + for (var i = 0; i < caches.length; i++) { + cache = caches[i]; + if (cache.context === context) { + needToCreateCache = false; + break; + } + } + if (needToCreateCache) { + cache = { + context: context + }; + caches.push(cache); + } + return cache; +}; +CRp$4.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) { + var gradientStyle; + var usePaths = this.usePaths(); + var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value, + positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue; + if (fill === 'radial-gradient') { + if (ele.isEdge()) { + var start = ele.sourceEndpoint(), + end = ele.targetEndpoint(), + mid = ele.midpoint(); + var d1 = dist(start, mid); + var d2 = dist(end, mid); + gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); + } else { + var pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + width = ele.paddedWidth(), + height = ele.paddedHeight(); + gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height)); + } + } else { + if (ele.isEdge()) { + var _start = ele.sourceEndpoint(), + _end = ele.targetEndpoint(); + gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y); + } else { + var _pos = usePaths ? { + x: 0, + y: 0 + } : ele.position(), + _width = ele.paddedWidth(), + _height = ele.paddedHeight(), + halfWidth = _width / 2, + halfHeight = _height / 2; + var direction = ele.pstyle('background-gradient-direction').value; + switch (direction) { + case 'to-bottom': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight); + break; + case 'to-top': + gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight); + break; + case 'to-left': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y); + break; + case 'to-right': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y); + break; + case 'to-bottom-right': + case 'to-right-bottom': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight); + break; + case 'to-top-right': + case 'to-right-top': + gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight); + break; + case 'to-bottom-left': + case 'to-left-bottom': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight); + break; + case 'to-top-left': + case 'to-left-top': + gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight); + break; + } + } + } + if (!gradientStyle) return null; // invalid gradient style + + var hasPositions = positions.length === colors.length; + var length = colors.length; + for (var i = 0; i < length; i++) { + gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')'); + } + return gradientStyle; +}; +CRp$4.gradientFillStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity); + if (!gradientStyle) return null; // error + context.fillStyle = gradientStyle; +}; +CRp$4.colorFillStyle = function (context, r, g, b, a) { + context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // turn off for now, seems context does its own caching + + // var cache = this.paintCache(context); + + // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + + // if( cache.fillStyle !== fillStyle ){ + // context.fillStyle = cache.fillStyle = fillStyle; + // } +}; + +CRp$4.eleFillStyle = function (context, ele, opacity) { + var backgroundFill = ele.pstyle('background-fill').value; + if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') { + this.gradientFillStyle(context, ele, backgroundFill, opacity); + } else { + var backgroundColor = ele.pstyle('background-color').value; + this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity); + } +}; +CRp$4.gradientStrokeStyle = function (context, ele, fill, opacity) { + var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity); + if (!gradientStyle) return null; // error + context.strokeStyle = gradientStyle; +}; +CRp$4.colorStrokeStyle = function (context, r, g, b, a) { + context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + // turn off for now, seems context does its own caching + + // var cache = this.paintCache(context); + + // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; + + // if( cache.strokeStyle !== strokeStyle ){ + // context.strokeStyle = cache.strokeStyle = strokeStyle; + // } +}; + +CRp$4.eleStrokeStyle = function (context, ele, opacity) { + var lineFill = ele.pstyle('line-fill').value; + if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') { + this.gradientStrokeStyle(context, ele, lineFill, opacity); + } else { + var lineColor = ele.pstyle('line-color').value; + this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity); + } +}; + +// Resize canvas +CRp$4.matchCanvasSize = function (container) { + var r = this; + var data = r.data; + var bb = r.findContainerClientCoords(); + var width = bb[2]; + var height = bb[3]; + var pixelRatio = r.getPixelRatio(); + var mbPxRatio = r.motionBlurPxRatio; + if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) { + pixelRatio = mbPxRatio; + } + var canvasWidth = width * pixelRatio; + var canvasHeight = height * pixelRatio; + var canvas; + if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) { + return; // save cycles if same + } + + r.fontCaches = null; // resizing resets the style + + var canvasContainer = data.canvasContainer; + canvasContainer.style.width = width + 'px'; + canvasContainer.style.height = height + 'px'; + for (var i = 0; i < r.CANVAS_LAYERS; i++) { + canvas = data.canvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + for (var i = 0; i < r.BUFFER_COUNT; i++) { + canvas = data.bufferCanvases[i]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + r.textureMult = 1; + if (pixelRatio <= 1) { + canvas = data.bufferCanvases[r.TEXTURE_BUFFER]; + r.textureMult = 2; + canvas.width = canvasWidth * r.textureMult; + canvas.height = canvasHeight * r.textureMult; + } + r.canvasWidth = canvasWidth; + r.canvasHeight = canvasHeight; +}; +CRp$4.renderTo = function (cxt, zoom, pan, pxRatio) { + this.render({ + forcedContext: cxt, + forcedZoom: zoom, + forcedPan: pan, + drawAllLayers: true, + forcedPxRatio: pxRatio + }); +}; +CRp$4.render = function (options) { + options = options || staticEmptyObject(); + var forcedContext = options.forcedContext; + var drawAllLayers = options.drawAllLayers; + var drawOnlyNodeLayer = options.drawOnlyNodeLayer; + var forcedZoom = options.forcedZoom; + var forcedPan = options.forcedPan; + var r = this; + var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio; + var cy = r.cy; + var data = r.data; + var needDraw = data.canvasNeedsRedraw; + var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming); + var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur; + var mbPxRatio = r.motionBlurPxRatio; + var hasCompoundNodes = cy.hasCompoundNodes(); + var inNodeDragGesture = r.hoverData.draggingEles; + var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false; + motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection; + var motionBlurFadeEffect = motionBlur; + if (!forcedContext) { + if (r.prevPxRatio !== pixelRatio) { + r.invalidateContainerClientCoordsCache(); + r.matchCanvasSize(r.container); + r.redrawHint('eles', true); + r.redrawHint('drag', true); + } + r.prevPxRatio = pixelRatio; + } + if (!forcedContext && r.motionBlurTimeout) { + clearTimeout(r.motionBlurTimeout); + } + if (motionBlur) { + if (r.mbFrames == null) { + r.mbFrames = 0; + } + r.mbFrames++; + if (r.mbFrames < 3) { + // need several frames before even high quality motionblur + motionBlurFadeEffect = false; + } + + // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing) + if (r.mbFrames > r.minMbLowQualFrames) { + //r.fullQualityMb = false; + r.motionBlurPxRatio = r.mbPxRBlurry; + } + } + if (r.clearingMotionBlur) { + r.motionBlurPxRatio = 1; + } + + // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame + // because a rogue async texture frame would clear needDraw + if (r.textureDrawLastFrame && !textureDraw) { + needDraw[r.NODE] = true; + needDraw[r.SELECT_BOX] = true; + } + var style = cy.style(); + var zoom = cy.zoom(); + var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom; + var pan = cy.pan(); + var effectivePan = { + x: pan.x, + y: pan.y + }; + var vp = { + zoom: zoom, + pan: { + x: pan.x, + y: pan.y + } + }; + var prevVp = r.prevViewport; + var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y; + + // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed) + if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) { + r.motionBlurPxRatio = 1; + } + if (forcedPan) { + effectivePan = forcedPan; + } + + // apply pixel ratio + + effectiveZoom *= pixelRatio; + effectivePan.x *= pixelRatio; + effectivePan.y *= pixelRatio; + var eles = r.getCachedZSortedEles(); + function mbclear(context, x, y, w, h) { + var gco = context.globalCompositeOperation; + context.globalCompositeOperation = 'destination-out'; + r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency); + context.fillRect(x, y, w, h); + context.globalCompositeOperation = gco; + } + function setContextTransform(context, clear) { + var ePan, eZoom, w, h; + if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) { + ePan = { + x: pan.x * mbPxRatio, + y: pan.y * mbPxRatio + }; + eZoom = zoom * mbPxRatio; + w = r.canvasWidth * mbPxRatio; + h = r.canvasHeight * mbPxRatio; + } else { + ePan = effectivePan; + eZoom = effectiveZoom; + w = r.canvasWidth; + h = r.canvasHeight; + } + context.setTransform(1, 0, 0, 1, 0, 0); + if (clear === 'motionBlur') { + mbclear(context, 0, 0, w, h); + } else if (!forcedContext && (clear === undefined || clear)) { + context.clearRect(0, 0, w, h); + } + if (!drawAllLayers) { + context.translate(ePan.x, ePan.y); + context.scale(eZoom, eZoom); + } + if (forcedPan) { + context.translate(forcedPan.x, forcedPan.y); + } + if (forcedZoom) { + context.scale(forcedZoom, forcedZoom); + } + } + if (!textureDraw) { + r.textureDrawLastFrame = false; + } + if (textureDraw) { + r.textureDrawLastFrame = true; + if (!r.textureCache) { + r.textureCache = {}; + r.textureCache.bb = cy.mutableElements().boundingBox(); + r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER]; + var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER]; + cxt.setTransform(1, 0, 0, 1, 0, 0); + cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult); + r.render({ + forcedContext: cxt, + drawOnlyNodeLayer: true, + forcedPxRatio: pixelRatio * r.textureMult + }); + var vp = r.textureCache.viewport = { + zoom: cy.zoom(), + pan: cy.pan(), + width: r.canvasWidth, + height: r.canvasHeight + }; + vp.mpan = { + x: (0 - vp.pan.x) / vp.zoom, + y: (0 - vp.pan.y) / vp.zoom + }; + } + needDraw[r.DRAG] = false; + needDraw[r.NODE] = false; + var context = data.contexts[r.NODE]; + var texture = r.textureCache.texture; + var vp = r.textureCache.viewport; + context.setTransform(1, 0, 0, 1, 0, 0); + if (motionBlur) { + mbclear(context, 0, 0, vp.width, vp.height); + } else { + context.clearRect(0, 0, vp.width, vp.height); + } + var outsideBgColor = style.core('outside-texture-bg-color').value; + var outsideBgOpacity = style.core('outside-texture-bg-opacity').value; + r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity); + context.fillRect(0, 0, vp.width, vp.height); + var zoom = cy.zoom(); + setContextTransform(context, false); + context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio); + } else if (r.textureOnViewport && !forcedContext) { + // clear the cache since we don't need it + r.textureCache = null; + } + var extent = cy.extent(); + var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated(); + var hideEdges = r.hideEdgesOnViewport && vpManip; + var needMbClear = []; + needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur; + if (needMbClear[r.NODE]) { + r.clearedForMotionBlur[r.NODE] = true; + } + needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur; + if (needMbClear[r.DRAG]) { + r.clearedForMotionBlur[r.DRAG] = true; + } + if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) { + var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]); + var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined; + setContextTransform(context, clear); + if (hideEdges) { + r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent); + } else { + r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent); + } + if (r.debug) { + r.drawDebugPoints(context, eles.nondrag); + } + if (!drawAllLayers && !motionBlur) { + needDraw[r.NODE] = false; + } + } + if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) { + var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1; + var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]); + setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined); + if (hideEdges) { + r.drawCachedNodes(context, eles.drag, pixelRatio, extent); + } else { + r.drawCachedElements(context, eles.drag, pixelRatio, extent); + } + if (r.debug) { + r.drawDebugPoints(context, eles.drag); + } + if (!drawAllLayers && !motionBlur) { + needDraw[r.DRAG] = false; + } + } + if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) { + var context = forcedContext || data.contexts[r.SELECT_BOX]; + setContextTransform(context); + if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) { + var zoom = r.cy.zoom(); + var borderWidth = style.core('selection-box-border-width').value / zoom; + context.lineWidth = borderWidth; + context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + if (borderWidth > 0) { + context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')'; + context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]); + } + } + if (data.bgActivePosistion && !r.hoverData.selecting) { + var zoom = r.cy.zoom(); + var pos = data.bgActivePosistion; + context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')'; + context.beginPath(); + context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI); + context.fill(); + } + var timeToRender = r.lastRedrawTime; + if (r.showFps && timeToRender) { + timeToRender = Math.round(timeToRender); + var fps = Math.round(1000 / timeToRender); + context.setTransform(1, 0, 0, 1, 0, 0); + context.fillStyle = 'rgba(255, 0, 0, 0.75)'; + context.strokeStyle = 'rgba(255, 0, 0, 0.75)'; + context.lineWidth = 1; + context.fillText('1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20); + var maxFps = 60; + context.strokeRect(0, 30, 250, 20); + context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); + } + if (!drawAllLayers) { + needDraw[r.SELECT_BOX] = false; + } + } + + // motionblur: blit rendered blurry frames + if (motionBlur && mbPxRatio !== 1) { + var cxtNode = data.contexts[r.NODE]; + var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE]; + var cxtDrag = data.contexts[r.DRAG]; + var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]; + var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) { + cxt.setTransform(1, 0, 0, 1, 0, 0); + if (needClear || !motionBlurFadeEffect) { + cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight); + } else { + mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight); + } + var pxr = mbPxRatio; + cxt.drawImage(txt, + // img + 0, 0, + // sx, sy + r.canvasWidth * pxr, r.canvasHeight * pxr, + // sw, sh + 0, 0, + // x, y + r.canvasWidth, r.canvasHeight // w, h + ); + }; + + if (needDraw[r.NODE] || needMbClear[r.NODE]) { + drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]); + needDraw[r.NODE] = false; + } + if (needDraw[r.DRAG] || needMbClear[r.DRAG]) { + drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]); + needDraw[r.DRAG] = false; + } + } + r.prevViewport = vp; + if (r.clearingMotionBlur) { + r.clearingMotionBlur = false; + r.motionBlurCleared = true; + r.motionBlur = true; + } + if (motionBlur) { + r.motionBlurTimeout = setTimeout(function () { + r.motionBlurTimeout = null; + r.clearedForMotionBlur[r.NODE] = false; + r.clearedForMotionBlur[r.DRAG] = false; + r.motionBlur = false; + r.clearingMotionBlur = !textureDraw; + r.mbFrames = 0; + needDraw[r.NODE] = true; + needDraw[r.DRAG] = true; + r.redraw(); + }, motionBlurDelay); + } + if (!forcedContext) { + cy.emit('render'); + } +}; + +var CRp$3 = {}; + +// @O Polygon drawing +CRp$3.drawPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(x + halfW * points[0], y + halfH * points[1]); + for (var i = 1; i < points.length / 2; i++) { + context.lineTo(x + halfW * points[i * 2], y + halfH * points[i * 2 + 1]); + } + context.closePath(); +}; +CRp$3.drawRoundPolygonPath = function (context, x, y, width, height, points) { + var halfW = width / 2; + var halfH = height / 2; + var cornerRadius = getRoundPolygonRadius(width, height); + if (context.beginPath) { + context.beginPath(); + } + for (var _i = 0; _i < points.length / 4; _i++) { + var sourceUv = void 0, + destUv = void 0; + if (_i === 0) { + sourceUv = points.length - 2; + } else { + sourceUv = _i * 4 - 2; + } + destUv = _i * 4 + 2; + var px = x + halfW * points[_i * 4]; + var py = y + halfH * points[_i * 4 + 1]; + var cosTheta = -points[sourceUv] * points[destUv] - points[sourceUv + 1] * points[destUv + 1]; + var offset = cornerRadius / Math.tan(Math.acos(cosTheta) / 2); + var cp0x = px - offset * points[sourceUv]; + var cp0y = py - offset * points[sourceUv + 1]; + var cp1x = px + offset * points[destUv]; + var cp1y = py + offset * points[destUv + 1]; + if (_i === 0) { + context.moveTo(cp0x, cp0y); + } else { + context.lineTo(cp0x, cp0y); + } + context.arcTo(px, py, cp1x, cp1y, cornerRadius); + } + context.closePath(); +}; + +// Round rectangle drawing +CRp$3.drawRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + if (context.beginPath) { + context.beginPath(); + } + + // Start at top middle + context.moveTo(x, y - halfHeight); + // Arc from middle top to right side + context.arcTo(x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius); + // Arc from right side to bottom + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + // Arc from bottom to left side + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + // Arc from left side to topBorder + context.arcTo(x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius); + // Join line + context.lineTo(x, y - halfHeight); + context.closePath(); +}; +CRp$3.drawBottomRoundRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerRadius = getRoundRectangleRadius(width, height); + if (context.beginPath) { + context.beginPath(); + } + + // Start at top middle + context.moveTo(x, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight); + context.lineTo(x + halfWidth, y); + context.arcTo(x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius); + context.arcTo(x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius); + context.lineTo(x - halfWidth, y - halfHeight); + context.lineTo(x, y - halfHeight); + context.closePath(); +}; +CRp$3.drawCutRectanglePath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var cornerLength = getCutRectangleCornerLength(); + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(x - halfWidth + cornerLength, y - halfHeight); + context.lineTo(x + halfWidth - cornerLength, y - halfHeight); + context.lineTo(x + halfWidth, y - halfHeight + cornerLength); + context.lineTo(x + halfWidth, y + halfHeight - cornerLength); + context.lineTo(x + halfWidth - cornerLength, y + halfHeight); + context.lineTo(x - halfWidth + cornerLength, y + halfHeight); + context.lineTo(x - halfWidth, y + halfHeight - cornerLength); + context.lineTo(x - halfWidth, y - halfHeight + cornerLength); + context.closePath(); +}; +CRp$3.drawBarrelPath = function (context, x, y, width, height) { + var halfWidth = width / 2; + var halfHeight = height / 2; + var xBegin = x - halfWidth; + var xEnd = x + halfWidth; + var yBegin = y - halfHeight; + var yEnd = y + halfHeight; + var barrelCurveConstants = getBarrelCurveConstants(width, height); + var wOffset = barrelCurveConstants.widthOffset; + var hOffset = barrelCurveConstants.heightOffset; + var ctrlPtXOffset = barrelCurveConstants.ctrlPtOffsetPct * wOffset; + if (context.beginPath) { + context.beginPath(); + } + context.moveTo(xBegin, yBegin + hOffset); + context.lineTo(xBegin, yEnd - hOffset); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yEnd, xBegin + wOffset, yEnd); + context.lineTo(xEnd - wOffset, yEnd); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yEnd, xEnd, yEnd - hOffset); + context.lineTo(xEnd, yBegin + hOffset); + context.quadraticCurveTo(xEnd - ctrlPtXOffset, yBegin, xEnd - wOffset, yBegin); + context.lineTo(xBegin + wOffset, yBegin); + context.quadraticCurveTo(xBegin + ctrlPtXOffset, yBegin, xBegin, yBegin + hOffset); + context.closePath(); +}; +var sin0 = Math.sin(0); +var cos0 = Math.cos(0); +var sin = {}; +var cos = {}; +var ellipseStepSize = Math.PI / 40; +for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + sin[i] = Math.sin(i); + cos[i] = Math.cos(i); +} +CRp$3.drawEllipsePath = function (context, centerX, centerY, width, height) { + if (context.beginPath) { + context.beginPath(); + } + if (context.ellipse) { + context.ellipse(centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI); + } else { + var xPos, yPos; + var rw = width / 2; + var rh = height / 2; + for (var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize) { + xPos = centerX - rw * sin[i] * sin0 + rw * cos[i] * cos0; + yPos = centerY + rh * cos[i] * sin0 + rh * sin[i] * cos0; + if (i === 0) { + context.moveTo(xPos, yPos); + } else { + context.lineTo(xPos, yPos); + } + } + } + context.closePath(); +}; + +/* global atob, ArrayBuffer, Uint8Array, Blob */ +var CRp$2 = {}; +CRp$2.createBuffer = function (w, h) { + var buffer = document.createElement('canvas'); // eslint-disable-line no-undef + buffer.width = w; + buffer.height = h; + return [buffer, buffer.getContext('2d')]; +}; +CRp$2.bufferCanvasImage = function (options) { + var cy = this.cy; + var eles = cy.mutableElements(); + var bb = eles.boundingBox(); + var ctrRect = this.findContainerClientCoords(); + var width = options.full ? Math.ceil(bb.w) : ctrRect[2]; + var height = options.full ? Math.ceil(bb.h) : ctrRect[3]; + var specdMaxDims = number$1(options.maxWidth) || number$1(options.maxHeight); + var pxRatio = this.getPixelRatio(); + var scale = 1; + if (options.scale !== undefined) { + width *= options.scale; + height *= options.scale; + scale = options.scale; + } else if (specdMaxDims) { + var maxScaleW = Infinity; + var maxScaleH = Infinity; + if (number$1(options.maxWidth)) { + maxScaleW = scale * options.maxWidth / width; + } + if (number$1(options.maxHeight)) { + maxScaleH = scale * options.maxHeight / height; + } + scale = Math.min(maxScaleW, maxScaleH); + width *= scale; + height *= scale; + } + if (!specdMaxDims) { + width *= pxRatio; + height *= pxRatio; + scale *= pxRatio; + } + var buffCanvas = document.createElement('canvas'); // eslint-disable-line no-undef + + buffCanvas.width = width; + buffCanvas.height = height; + buffCanvas.style.width = width + 'px'; + buffCanvas.style.height = height + 'px'; + var buffCxt = buffCanvas.getContext('2d'); + + // Rasterize the layers, but only if container has nonzero size + if (width > 0 && height > 0) { + buffCxt.clearRect(0, 0, width, height); + buffCxt.globalCompositeOperation = 'source-over'; + var zsortedEles = this.getCachedZSortedEles(); + if (options.full) { + // draw the full bounds of the graph + buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(bb.x1 * scale, bb.y1 * scale); + } else { + // draw the current view + var pan = cy.pan(); + var translation = { + x: pan.x * scale, + y: pan.y * scale + }; + scale *= cy.zoom(); + buffCxt.translate(translation.x, translation.y); + buffCxt.scale(scale, scale); + this.drawElements(buffCxt, zsortedEles); + buffCxt.scale(1 / scale, 1 / scale); + buffCxt.translate(-translation.x, -translation.y); + } + + // need to fill bg at end like this in order to fill cleared transparent pixels in jpgs + if (options.bg) { + buffCxt.globalCompositeOperation = 'destination-over'; + buffCxt.fillStyle = options.bg; + buffCxt.rect(0, 0, width, height); + buffCxt.fill(); + } + } + return buffCanvas; +}; +function b64ToBlob(b64, mimeType) { + var bytes = atob(b64); + var buff = new ArrayBuffer(bytes.length); + var buffUint8 = new Uint8Array(buff); + for (var i = 0; i < bytes.length; i++) { + buffUint8[i] = bytes.charCodeAt(i); + } + return new Blob([buff], { + type: mimeType + }); +} +function b64UriToB64(b64uri) { + var i = b64uri.indexOf(','); + return b64uri.substr(i + 1); +} +function output(options, canvas, mimeType) { + var getB64Uri = function getB64Uri() { + return canvas.toDataURL(mimeType, options.quality); + }; + switch (options.output) { + case 'blob-promise': + return new Promise$1(function (resolve, reject) { + try { + canvas.toBlob(function (blob) { + if (blob != null) { + resolve(blob); + } else { + reject(new Error('`canvas.toBlob()` sent a null value in its callback')); + } + }, mimeType, options.quality); + } catch (err) { + reject(err); + } + }); + case 'blob': + return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); + case 'base64': + return b64UriToB64(getB64Uri()); + case 'base64uri': + default: + return getB64Uri(); + } +} +CRp$2.png = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/png'); +}; +CRp$2.jpg = function (options) { + return output(options, this.bufferCanvasImage(options), 'image/jpeg'); +}; + +var CRp$1 = {}; +CRp$1.nodeShapeImpl = function (name, context, centerX, centerY, width, height, points) { + switch (name) { + case 'ellipse': + return this.drawEllipsePath(context, centerX, centerY, width, height); + case 'polygon': + return this.drawPolygonPath(context, centerX, centerY, width, height, points); + case 'round-polygon': + return this.drawRoundPolygonPath(context, centerX, centerY, width, height, points); + case 'roundrectangle': + case 'round-rectangle': + return this.drawRoundRectanglePath(context, centerX, centerY, width, height); + case 'cutrectangle': + case 'cut-rectangle': + return this.drawCutRectanglePath(context, centerX, centerY, width, height); + case 'bottomroundrectangle': + case 'bottom-round-rectangle': + return this.drawBottomRoundRectanglePath(context, centerX, centerY, width, height); + case 'barrel': + return this.drawBarrelPath(context, centerX, centerY, width, height); + } +}; + +var CR = CanvasRenderer; +var CRp = CanvasRenderer.prototype; +CRp.CANVAS_LAYERS = 3; +// +CRp.SELECT_BOX = 0; +CRp.DRAG = 1; +CRp.NODE = 2; +CRp.BUFFER_COUNT = 3; +// +CRp.TEXTURE_BUFFER = 0; +CRp.MOTIONBLUR_BUFFER_NODE = 1; +CRp.MOTIONBLUR_BUFFER_DRAG = 2; +function CanvasRenderer(options) { + var r = this; + r.data = { + canvases: new Array(CRp.CANVAS_LAYERS), + contexts: new Array(CRp.CANVAS_LAYERS), + canvasNeedsRedraw: new Array(CRp.CANVAS_LAYERS), + bufferCanvases: new Array(CRp.BUFFER_COUNT), + bufferContexts: new Array(CRp.CANVAS_LAYERS) + }; + var tapHlOffAttr = '-webkit-tap-highlight-color'; + var tapHlOffStyle = 'rgba(0,0,0,0)'; + r.data.canvasContainer = document.createElement('div'); // eslint-disable-line no-undef + var containerStyle = r.data.canvasContainer.style; + r.data.canvasContainer.style[tapHlOffAttr] = tapHlOffStyle; + containerStyle.position = 'relative'; + containerStyle.zIndex = '0'; + containerStyle.overflow = 'hidden'; + var container = options.cy.container(); + container.appendChild(r.data.canvasContainer); + container.style[tapHlOffAttr] = tapHlOffStyle; + var styleMap = { + '-webkit-user-select': 'none', + '-moz-user-select': '-moz-none', + 'user-select': 'none', + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + 'outline-style': 'none' + }; + if (ms()) { + styleMap['-ms-touch-action'] = 'none'; + styleMap['touch-action'] = 'none'; + } + for (var i = 0; i < CRp.CANVAS_LAYERS; i++) { + var canvas = r.data.canvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + r.data.contexts[i] = canvas.getContext('2d'); + Object.keys(styleMap).forEach(function (k) { + canvas.style[k] = styleMap[k]; + }); + canvas.style.position = 'absolute'; + canvas.setAttribute('data-id', 'layer' + i); + canvas.style.zIndex = String(CRp.CANVAS_LAYERS - i); + r.data.canvasContainer.appendChild(canvas); + r.data.canvasNeedsRedraw[i] = false; + } + r.data.topCanvas = r.data.canvases[0]; + r.data.canvases[CRp.NODE].setAttribute('data-id', 'layer' + CRp.NODE + '-node'); + r.data.canvases[CRp.SELECT_BOX].setAttribute('data-id', 'layer' + CRp.SELECT_BOX + '-selectbox'); + r.data.canvases[CRp.DRAG].setAttribute('data-id', 'layer' + CRp.DRAG + '-drag'); + for (var i = 0; i < CRp.BUFFER_COUNT; i++) { + r.data.bufferCanvases[i] = document.createElement('canvas'); // eslint-disable-line no-undef + r.data.bufferContexts[i] = r.data.bufferCanvases[i].getContext('2d'); + r.data.bufferCanvases[i].style.position = 'absolute'; + r.data.bufferCanvases[i].setAttribute('data-id', 'buffer' + i); + r.data.bufferCanvases[i].style.zIndex = String(-i - 1); + r.data.bufferCanvases[i].style.visibility = 'hidden'; + //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]); + } + + r.pathsEnabled = true; + var emptyBb = makeBoundingBox(); + var getBoxCenter = function getBoxCenter(bb) { + return { + x: (bb.x1 + bb.x2) / 2, + y: (bb.y1 + bb.y2) / 2 + }; + }; + var getCenterOffset = function getCenterOffset(bb) { + return { + x: -bb.w / 2, + y: -bb.h / 2 + }; + }; + var backgroundTimestampHasChanged = function backgroundTimestampHasChanged(ele) { + var _p = ele[0]._private; + var same = _p.oldBackgroundTimestamp === _p.backgroundTimestamp; + return !same; + }; + var getStyleKey = function getStyleKey(ele) { + return ele[0]._private.nodeKey; + }; + var getLabelKey = function getLabelKey(ele) { + return ele[0]._private.labelStyleKey; + }; + var getSourceLabelKey = function getSourceLabelKey(ele) { + return ele[0]._private.sourceLabelStyleKey; + }; + var getTargetLabelKey = function getTargetLabelKey(ele) { + return ele[0]._private.targetLabelStyleKey; + }; + var drawElement = function drawElement(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElement(context, ele, bb, false, false, useEleOpacity); + }; + var drawLabel = function drawLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'main', useEleOpacity); + }; + var drawSourceLabel = function drawSourceLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'source', useEleOpacity); + }; + var drawTargetLabel = function drawTargetLabel(context, ele, bb, scaledLabelShown, useEleOpacity) { + return r.drawElementText(context, ele, bb, scaledLabelShown, 'target', useEleOpacity); + }; + var getElementBox = function getElementBox(ele) { + ele.boundingBox(); + return ele[0]._private.bodyBounds; + }; + var getLabelBox = function getLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.main || emptyBb; + }; + var getSourceLabelBox = function getSourceLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.source || emptyBb; + }; + var getTargetLabelBox = function getTargetLabelBox(ele) { + ele.boundingBox(); + return ele[0]._private.labelBounds.target || emptyBb; + }; + var isLabelVisibleAtScale = function isLabelVisibleAtScale(ele, scaledLabelShown) { + return scaledLabelShown; + }; + var getElementRotationPoint = function getElementRotationPoint(ele) { + return getBoxCenter(getElementBox(ele)); + }; + var addTextMargin = function addTextMargin(prefix, pt, ele) { + var pre = prefix ? prefix + '-' : ''; + return { + x: pt.x + ele.pstyle(pre + 'text-margin-x').pfValue, + y: pt.y + ele.pstyle(pre + 'text-margin-y').pfValue + }; + }; + var getRsPt = function getRsPt(ele, x, y) { + var rs = ele[0]._private.rscratch; + return { + x: rs[x], + y: rs[y] + }; + }; + var getLabelRotationPoint = function getLabelRotationPoint(ele) { + return addTextMargin('', getRsPt(ele, 'labelX', 'labelY'), ele); + }; + var getSourceLabelRotationPoint = function getSourceLabelRotationPoint(ele) { + return addTextMargin('source', getRsPt(ele, 'sourceLabelX', 'sourceLabelY'), ele); + }; + var getTargetLabelRotationPoint = function getTargetLabelRotationPoint(ele) { + return addTextMargin('target', getRsPt(ele, 'targetLabelX', 'targetLabelY'), ele); + }; + var getElementRotationOffset = function getElementRotationOffset(ele) { + return getCenterOffset(getElementBox(ele)); + }; + var getSourceLabelRotationOffset = function getSourceLabelRotationOffset(ele) { + return getCenterOffset(getSourceLabelBox(ele)); + }; + var getTargetLabelRotationOffset = function getTargetLabelRotationOffset(ele) { + return getCenterOffset(getTargetLabelBox(ele)); + }; + var getLabelRotationOffset = function getLabelRotationOffset(ele) { + var bb = getLabelBox(ele); + var p = getCenterOffset(getLabelBox(ele)); + if (ele.isNode()) { + switch (ele.pstyle('text-halign').value) { + case 'left': + p.x = -bb.w; + break; + case 'right': + p.x = 0; + break; + } + switch (ele.pstyle('text-valign').value) { + case 'top': + p.y = -bb.h; + break; + case 'bottom': + p.y = 0; + break; + } + } + return p; + }; + var eleTxrCache = r.data.eleTxrCache = new ElementTextureCache(r, { + getKey: getStyleKey, + doesEleInvalidateKey: backgroundTimestampHasChanged, + drawElement: drawElement, + getBoundingBox: getElementBox, + getRotationPoint: getElementRotationPoint, + getRotationOffset: getElementRotationOffset, + allowEdgeTxrCaching: false, + allowParentTxrCaching: false + }); + var lblTxrCache = r.data.lblTxrCache = new ElementTextureCache(r, { + getKey: getLabelKey, + drawElement: drawLabel, + getBoundingBox: getLabelBox, + getRotationPoint: getLabelRotationPoint, + getRotationOffset: getLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var slbTxrCache = r.data.slbTxrCache = new ElementTextureCache(r, { + getKey: getSourceLabelKey, + drawElement: drawSourceLabel, + getBoundingBox: getSourceLabelBox, + getRotationPoint: getSourceLabelRotationPoint, + getRotationOffset: getSourceLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var tlbTxrCache = r.data.tlbTxrCache = new ElementTextureCache(r, { + getKey: getTargetLabelKey, + drawElement: drawTargetLabel, + getBoundingBox: getTargetLabelBox, + getRotationPoint: getTargetLabelRotationPoint, + getRotationOffset: getTargetLabelRotationOffset, + isVisible: isLabelVisibleAtScale + }); + var lyrTxrCache = r.data.lyrTxrCache = new LayeredTextureCache(r); + r.onUpdateEleCalcs(function invalidateTextureCaches(willDraw, eles) { + // each cache should check for sub-key diff to see that the update affects that cache particularly + eleTxrCache.invalidateElements(eles); + lblTxrCache.invalidateElements(eles); + slbTxrCache.invalidateElements(eles); + tlbTxrCache.invalidateElements(eles); + + // any change invalidates the layers + lyrTxrCache.invalidateElements(eles); + + // update the old bg timestamp so diffs can be done in the ele txr caches + for (var _i = 0; _i < eles.length; _i++) { + var _p = eles[_i]._private; + _p.oldBackgroundTimestamp = _p.backgroundTimestamp; + } + }); + var refineInLayers = function refineInLayers(reqs) { + for (var i = 0; i < reqs.length; i++) { + lyrTxrCache.enqueueElementRefinement(reqs[i].ele); + } + }; + eleTxrCache.onDequeue(refineInLayers); + lblTxrCache.onDequeue(refineInLayers); + slbTxrCache.onDequeue(refineInLayers); + tlbTxrCache.onDequeue(refineInLayers); +} +CRp.redrawHint = function (group, bool) { + var r = this; + switch (group) { + case 'eles': + r.data.canvasNeedsRedraw[CRp.NODE] = bool; + break; + case 'drag': + r.data.canvasNeedsRedraw[CRp.DRAG] = bool; + break; + case 'select': + r.data.canvasNeedsRedraw[CRp.SELECT_BOX] = bool; + break; + } +}; + +// whether to use Path2D caching for drawing +var pathsImpld = typeof Path2D !== 'undefined'; +CRp.path2dEnabled = function (on) { + if (on === undefined) { + return this.pathsEnabled; + } + this.pathsEnabled = on ? true : false; +}; +CRp.usePaths = function () { + return pathsImpld && this.pathsEnabled; +}; +CRp.setImgSmoothing = function (context, bool) { + if (context.imageSmoothingEnabled != null) { + context.imageSmoothingEnabled = bool; + } else { + context.webkitImageSmoothingEnabled = bool; + context.mozImageSmoothingEnabled = bool; + context.msImageSmoothingEnabled = bool; + } +}; +CRp.getImgSmoothing = function (context) { + if (context.imageSmoothingEnabled != null) { + return context.imageSmoothingEnabled; + } else { + return context.webkitImageSmoothingEnabled || context.mozImageSmoothingEnabled || context.msImageSmoothingEnabled; + } +}; +CRp.makeOffscreenCanvas = function (width, height) { + var canvas; + if ((typeof OffscreenCanvas === "undefined" ? "undefined" : _typeof(OffscreenCanvas)) !== ("undefined" )) { + canvas = new OffscreenCanvas(width, height); + } else { + canvas = document.createElement('canvas'); // eslint-disable-line no-undef + canvas.width = width; + canvas.height = height; + } + return canvas; +}; +[CRp$a, CRp$9, CRp$8, CRp$7, CRp$6, CRp$5, CRp$4, CRp$3, CRp$2, CRp$1].forEach(function (props) { + extend(CRp, props); +}); + +var renderer = [{ + name: 'null', + impl: NullRenderer +}, { + name: 'base', + impl: BR +}, { + name: 'canvas', + impl: CR +}]; + +var incExts = [{ + type: 'layout', + extensions: layout +}, { + type: 'renderer', + extensions: renderer +}]; + +// registered extensions to cytoscape, indexed by name +var extensions = {}; + +// registered modules for extensions, indexed by name +var modules = {}; +function setExtension(type, name, registrant) { + var ext = registrant; + var overrideErr = function overrideErr(field) { + warn('Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden'); + }; + if (type === 'core') { + if (Core.prototype[name]) { + return overrideErr(name); + } else { + Core.prototype[name] = registrant; + } + } else if (type === 'collection') { + if (Collection.prototype[name]) { + return overrideErr(name); + } else { + Collection.prototype[name] = registrant; + } + } else if (type === 'layout') { + // fill in missing layout functions in the prototype + + var Layout = function Layout(options) { + this.options = options; + registrant.call(this, options); + + // make sure layout has _private for use w/ std apis like .on() + if (!plainObject(this._private)) { + this._private = {}; + } + this._private.cy = options.cy; + this._private.listeners = []; + this.createEmitter(); + }; + var layoutProto = Layout.prototype = Object.create(registrant.prototype); + var optLayoutFns = []; + for (var i = 0; i < optLayoutFns.length; i++) { + var fnName = optLayoutFns[i]; + layoutProto[fnName] = layoutProto[fnName] || function () { + return this; + }; + } + + // either .start() or .run() is defined, so autogen the other + if (layoutProto.start && !layoutProto.run) { + layoutProto.run = function () { + this.start(); + return this; + }; + } else if (!layoutProto.start && layoutProto.run) { + layoutProto.start = function () { + this.run(); + return this; + }; + } + var regStop = registrant.prototype.stop; + layoutProto.stop = function () { + var opts = this.options; + if (opts && opts.animate) { + var anis = this.animations; + if (anis) { + for (var _i = 0; _i < anis.length; _i++) { + anis[_i].stop(); + } + } + } + if (regStop) { + regStop.call(this); + } else { + this.emit('layoutstop'); + } + return this; + }; + if (!layoutProto.destroy) { + layoutProto.destroy = function () { + return this; + }; + } + layoutProto.cy = function () { + return this._private.cy; + }; + var getCy = function getCy(layout) { + return layout._private.cy; + }; + var emitterOpts = { + addEventFields: function addEventFields(layout, evt) { + evt.layout = layout; + evt.cy = getCy(layout); + evt.target = layout; + }, + bubble: function bubble() { + return true; + }, + parent: function parent(layout) { + return getCy(layout); + } + }; + extend(layoutProto, { + createEmitter: function createEmitter() { + this._private.emitter = new Emitter(emitterOpts, this); + return this; + }, + emitter: function emitter() { + return this._private.emitter; + }, + on: function on(evt, cb) { + this.emitter().on(evt, cb); + return this; + }, + one: function one(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + once: function once(evt, cb) { + this.emitter().one(evt, cb); + return this; + }, + removeListener: function removeListener(evt, cb) { + this.emitter().removeListener(evt, cb); + return this; + }, + removeAllListeners: function removeAllListeners() { + this.emitter().removeAllListeners(); + return this; + }, + emit: function emit(evt, params) { + this.emitter().emit(evt, params); + return this; + } + }); + define.eventAliasesOn(layoutProto); + ext = Layout; // replace with our wrapped layout + } else if (type === 'renderer' && name !== 'null' && name !== 'base') { + // user registered renderers inherit from base + + var BaseRenderer = getExtension('renderer', 'base'); + var bProto = BaseRenderer.prototype; + var RegistrantRenderer = registrant; + var rProto = registrant.prototype; + var Renderer = function Renderer() { + BaseRenderer.apply(this, arguments); + RegistrantRenderer.apply(this, arguments); + }; + var proto = Renderer.prototype; + for (var pName in bProto) { + var pVal = bProto[pName]; + var existsInR = rProto[pName] != null; + if (existsInR) { + return overrideErr(pName); + } + proto[pName] = pVal; // take impl from base + } + + for (var _pName in rProto) { + proto[_pName] = rProto[_pName]; // take impl from registrant + } + + bProto.clientFunctions.forEach(function (name) { + proto[name] = proto[name] || function () { + error('Renderer does not implement `renderer.' + name + '()` on its prototype'); + }; + }); + ext = Renderer; + } else if (type === '__proto__' || type === 'constructor' || type === 'prototype') { + // to avoid potential prototype pollution + return error(type + ' is an illegal type to be registered, possibly lead to prototype pollutions'); + } + return setMap({ + map: extensions, + keys: [type, name], + value: ext + }); +} +function getExtension(type, name) { + return getMap({ + map: extensions, + keys: [type, name] + }); +} +function setModule(type, name, moduleType, moduleName, registrant) { + return setMap({ + map: modules, + keys: [type, name, moduleType, moduleName], + value: registrant + }); +} +function getModule(type, name, moduleType, moduleName) { + return getMap({ + map: modules, + keys: [type, name, moduleType, moduleName] + }); +} +var extension = function extension() { + // e.g. extension('renderer', 'svg') + if (arguments.length === 2) { + return getExtension.apply(null, arguments); + } + + // e.g. extension('renderer', 'svg', { ... }) + else if (arguments.length === 3) { + return setExtension.apply(null, arguments); + } + + // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse') + else if (arguments.length === 4) { + return getModule.apply(null, arguments); + } + + // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... }) + else if (arguments.length === 5) { + return setModule.apply(null, arguments); + } else { + error('Invalid extension access syntax'); + } +}; + +// allows a core instance to access extensions internally +Core.prototype.extension = extension; + +// included extensions +incExts.forEach(function (group) { + group.extensions.forEach(function (ext) { + setExtension(group.type, ext.name, ext.impl); + }); +}); + +// a dummy stylesheet object that doesn't need a reference to the core +// (useful for init) +var Stylesheet = function Stylesheet() { + if (!(this instanceof Stylesheet)) { + return new Stylesheet(); + } + this.length = 0; +}; +var sheetfn = Stylesheet.prototype; +sheetfn.instanceString = function () { + return 'stylesheet'; +}; + +// just store the selector to be parsed later +sheetfn.selector = function (selector) { + var i = this.length++; + this[i] = { + selector: selector, + properties: [] + }; + return this; // chaining +}; + +// just store the property to be parsed later +sheetfn.css = function (name, value) { + var i = this.length - 1; + if (string(name)) { + this[i].properties.push({ + name: name, + value: value + }); + } else if (plainObject(name)) { + var map = name; + var propNames = Object.keys(map); + for (var j = 0; j < propNames.length; j++) { + var key = propNames[j]; + var mapVal = map[key]; + if (mapVal == null) { + continue; + } + var prop = Style.properties[key] || Style.properties[dash2camel(key)]; + if (prop == null) { + continue; + } + var _name = prop.name; + var _value = mapVal; + this[i].properties.push({ + name: _name, + value: _value + }); + } + } + return this; // chaining +}; + +sheetfn.style = sheetfn.css; + +// generate a real style object from the dummy stylesheet +sheetfn.generateStyle = function (cy) { + var style = new Style(cy); + return this.appendToStyle(style); +}; + +// append a dummy stylesheet object on a real style object +sheetfn.appendToStyle = function (style) { + for (var i = 0; i < this.length; i++) { + var context = this[i]; + var selector = context.selector; + var props = context.properties; + style.selector(selector); // apply selector + + for (var j = 0; j < props.length; j++) { + var prop = props[j]; + style.css(prop.name, prop.value); // apply property + } + } + + return style; +}; + +var version = "3.28.1"; + +var cytoscape = function cytoscape(options) { + // if no options specified, use default + if (options === undefined) { + options = {}; + } + + // create instance + if (plainObject(options)) { + return new Core(options); + } + + // allow for registration of extensions + else if (string(options)) { + return extension.apply(extension, arguments); + } +}; + +// e.g. cytoscape.use( require('cytoscape-foo'), bar ) +cytoscape.use = function (ext) { + var args = Array.prototype.slice.call(arguments, 1); // args to pass to ext + + args.unshift(cytoscape); // cytoscape is first arg to ext + + ext.apply(null, args); + return this; +}; +cytoscape.warnings = function (bool) { + return warnings(bool); +}; + +// replaced by build system +cytoscape.version = version; + +// expose public apis (mostly for extensions) +cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet; + +module.exports = cytoscape; + + +/***/ }), + +/***/ 54485: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(22894); + + +/***/ }), + +/***/ 22894: +/***/ (function(module, exports) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Generated by CoffeeScript 1.8.0 +(function() { + var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; + + floor = Math.floor, min = Math.min; + + + /* + Default comparison function to be used + */ + + defaultCmp = function(x, y) { + if (x < y) { + return -1; + } + if (x > y) { + return 1; + } + return 0; + }; + + + /* + Insert item x in list a, and keep it sorted assuming a is sorted. + + If x is already in a, insert it to the right of the rightmost x. + + Optional args lo (default 0) and hi (default a.length) bound the slice + of a to be searched. + */ + + insort = function(a, x, lo, hi, cmp) { + var mid; + if (lo == null) { + lo = 0; + } + if (cmp == null) { + cmp = defaultCmp; + } + if (lo < 0) { + throw new Error('lo must be non-negative'); + } + if (hi == null) { + hi = a.length; + } + while (lo < hi) { + mid = floor((lo + hi) / 2); + if (cmp(x, a[mid]) < 0) { + hi = mid; + } else { + lo = mid + 1; + } + } + return ([].splice.apply(a, [lo, lo - lo].concat(x)), x); + }; + + + /* + Push item onto heap, maintaining the heap invariant. + */ + + heappush = function(array, item, cmp) { + if (cmp == null) { + cmp = defaultCmp; + } + array.push(item); + return _siftdown(array, 0, array.length - 1, cmp); + }; + + + /* + Pop the smallest item off the heap, maintaining the heap invariant. + */ + + heappop = function(array, cmp) { + var lastelt, returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + lastelt = array.pop(); + if (array.length) { + returnitem = array[0]; + array[0] = lastelt; + _siftup(array, 0, cmp); + } else { + returnitem = lastelt; + } + return returnitem; + }; + + + /* + Pop and return the current smallest value, and add the new item. + + This is more efficient than heappop() followed by heappush(), and can be + more appropriate when using a fixed size heap. Note that the value + returned may be larger than item! That constrains reasonable use of + this routine unless written as part of a conditional replacement: + if item > array[0] + item = heapreplace(array, item) + */ + + heapreplace = function(array, item, cmp) { + var returnitem; + if (cmp == null) { + cmp = defaultCmp; + } + returnitem = array[0]; + array[0] = item; + _siftup(array, 0, cmp); + return returnitem; + }; + + + /* + Fast version of a heappush followed by a heappop. + */ + + heappushpop = function(array, item, cmp) { + var _ref; + if (cmp == null) { + cmp = defaultCmp; + } + if (array.length && cmp(array[0], item) < 0) { + _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; + _siftup(array, 0, cmp); + } + return item; + }; + + + /* + Transform list into a heap, in-place, in O(array.length) time. + */ + + heapify = function(array, cmp) { + var i, _i, _j, _len, _ref, _ref1, _results, _results1; + if (cmp == null) { + cmp = defaultCmp; + } + _ref1 = (function() { + _results1 = []; + for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); } + return _results1; + }).apply(this).reverse(); + _results = []; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + i = _ref1[_i]; + _results.push(_siftup(array, i, cmp)); + } + return _results; + }; + + + /* + Update the position of the given item in the heap. + This function should be called every time the item is being modified. + */ + + updateItem = function(array, item, cmp) { + var pos; + if (cmp == null) { + cmp = defaultCmp; + } + pos = array.indexOf(item); + if (pos === -1) { + return; + } + _siftdown(array, 0, pos, cmp); + return _siftup(array, pos, cmp); + }; + + + /* + Find the n largest elements in a dataset. + */ + + nlargest = function(array, n, cmp) { + var elem, result, _i, _len, _ref; + if (cmp == null) { + cmp = defaultCmp; + } + result = array.slice(0, n); + if (!result.length) { + return result; + } + heapify(result, cmp); + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + heappushpop(result, elem, cmp); + } + return result.sort(cmp).reverse(); + }; + + + /* + Find the n smallest elements in a dataset. + */ + + nsmallest = function(array, n, cmp) { + var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results; + if (cmp == null) { + cmp = defaultCmp; + } + if (n * 10 <= array.length) { + result = array.slice(0, n).sort(cmp); + if (!result.length) { + return result; + } + los = result[result.length - 1]; + _ref = array.slice(n); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + elem = _ref[_i]; + if (cmp(elem, los) < 0) { + insort(result, elem, 0, null, cmp); + result.pop(); + los = result[result.length - 1]; + } + } + return result; + } + heapify(array, cmp); + _results = []; + for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { + _results.push(heappop(array, cmp)); + } + return _results; + }; + + _siftdown = function(array, startpos, pos, cmp) { + var newitem, parent, parentpos; + if (cmp == null) { + cmp = defaultCmp; + } + newitem = array[pos]; + while (pos > startpos) { + parentpos = (pos - 1) >> 1; + parent = array[parentpos]; + if (cmp(newitem, parent) < 0) { + array[pos] = parent; + pos = parentpos; + continue; + } + break; + } + return array[pos] = newitem; + }; + + _siftup = function(array, pos, cmp) { + var childpos, endpos, newitem, rightpos, startpos; + if (cmp == null) { + cmp = defaultCmp; + } + endpos = array.length; + startpos = pos; + newitem = array[pos]; + childpos = 2 * pos + 1; + while (childpos < endpos) { + rightpos = childpos + 1; + if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { + childpos = rightpos; + } + array[pos] = array[childpos]; + pos = childpos; + childpos = 2 * pos + 1; + } + array[pos] = newitem; + return _siftdown(array, startpos, pos, cmp); + }; + + Heap = (function() { + Heap.push = heappush; + + Heap.pop = heappop; + + Heap.replace = heapreplace; + + Heap.pushpop = heappushpop; + + Heap.heapify = heapify; + + Heap.updateItem = updateItem; + + Heap.nlargest = nlargest; + + Heap.nsmallest = nsmallest; + + function Heap(cmp) { + this.cmp = cmp != null ? cmp : defaultCmp; + this.nodes = []; + } + + Heap.prototype.push = function(x) { + return heappush(this.nodes, x, this.cmp); + }; + + Heap.prototype.pop = function() { + return heappop(this.nodes, this.cmp); + }; + + Heap.prototype.peek = function() { + return this.nodes[0]; + }; + + Heap.prototype.contains = function(x) { + return this.nodes.indexOf(x) !== -1; + }; + + Heap.prototype.replace = function(x) { + return heapreplace(this.nodes, x, this.cmp); + }; + + Heap.prototype.pushpop = function(x) { + return heappushpop(this.nodes, x, this.cmp); + }; + + Heap.prototype.heapify = function() { + return heapify(this.nodes, this.cmp); + }; + + Heap.prototype.updateItem = function(x) { + return updateItem(this.nodes, x, this.cmp); + }; + + Heap.prototype.clear = function() { + return this.nodes = []; + }; + + Heap.prototype.empty = function() { + return this.nodes.length === 0; + }; + + Heap.prototype.size = function() { + return this.nodes.length; + }; + + Heap.prototype.clone = function() { + var heap; + heap = new Heap(); + heap.nodes = this.nodes.slice(0); + return heap; + }; + + Heap.prototype.toArray = function() { + return this.nodes.slice(0); + }; + + Heap.prototype.insert = Heap.prototype.push; + + Heap.prototype.top = Heap.prototype.peek; + + Heap.prototype.front = Heap.prototype.peek; + + Heap.prototype.has = Heap.prototype.contains; + + Heap.prototype.copy = Heap.prototype.clone; + + return Heap; + + })(); + + (function(root, factory) { + if (true) { + return !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} + })(this, function() { + return Heap; + }); + +}).call(this); + + +/***/ }), + +/***/ 82241: +/***/ (function(module) { + +(function webpackUniversalModuleDefinition(root, factory) { + if(true) + module.exports = factory(); + else {} +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_543__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_543__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __nested_webpack_require_543__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __nested_webpack_require_543__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __nested_webpack_require_543__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __nested_webpack_require_543__.d = function(exports, name, getter) { +/******/ if(!__nested_webpack_require_543__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nested_webpack_require_543__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __nested_webpack_require_543__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __nested_webpack_require_543__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __nested_webpack_require_543__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __nested_webpack_require_543__(__nested_webpack_require_543__.s = 26); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LayoutConstants() {} + +/** + * Layout Quality: 0:draft, 1:default, 2:proof + */ +LayoutConstants.QUALITY = 1; + +/** + * Default parameters + */ +LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false; +LayoutConstants.DEFAULT_INCREMENTAL = false; +LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true; +LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false; +LayoutConstants.DEFAULT_ANIMATION_PERIOD = 50; +LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false; + +// ----------------------------------------------------------------------------- +// Section: General other constants +// ----------------------------------------------------------------------------- +/* + * Margins of a graph to be applied on bouding rectangle of its contents. We + * assume margins on all four sides to be uniform. + */ +LayoutConstants.DEFAULT_GRAPH_MARGIN = 15; + +/* + * Whether to consider labels in node dimensions or not + */ +LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_SIZE = 40; + +/* + * Default dimension of a non-compound node. + */ +LayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2; + +/* + * Empty compound node size. When a compound node is empty, its both + * dimensions should be of this value. + */ +LayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40; + +/* + * Minimum length that an edge should take during layout + */ +LayoutConstants.MIN_EDGE_LENGTH = 1; + +/* + * World boundaries that layout operates on + */ +LayoutConstants.WORLD_BOUNDARY = 1000000; + +/* + * World boundaries that random positioning can be performed with + */ +LayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000; + +/* + * Coordinates of the world center + */ +LayoutConstants.WORLD_CENTER_X = 1200; +LayoutConstants.WORLD_CENTER_Y = 900; + +module.exports = LayoutConstants; + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __nested_webpack_require_4947__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_4947__(2); +var IGeometry = __nested_webpack_require_4947__(8); +var IMath = __nested_webpack_require_4947__(9); + +function LEdge(source, target, vEdge) { + LGraphObject.call(this, vEdge); + + this.isOverlapingSourceAndTarget = false; + this.vGraphObject = vEdge; + this.bendpoints = []; + this.source = source; + this.target = target; +} + +LEdge.prototype = Object.create(LGraphObject.prototype); + +for (var prop in LGraphObject) { + LEdge[prop] = LGraphObject[prop]; +} + +LEdge.prototype.getSource = function () { + return this.source; +}; + +LEdge.prototype.getTarget = function () { + return this.target; +}; + +LEdge.prototype.isInterGraph = function () { + return this.isInterGraph; +}; + +LEdge.prototype.getLength = function () { + return this.length; +}; + +LEdge.prototype.isOverlapingSourceAndTarget = function () { + return this.isOverlapingSourceAndTarget; +}; + +LEdge.prototype.getBendpoints = function () { + return this.bendpoints; +}; + +LEdge.prototype.getLca = function () { + return this.lca; +}; + +LEdge.prototype.getSourceInLca = function () { + return this.sourceInLca; +}; + +LEdge.prototype.getTargetInLca = function () { + return this.targetInLca; +}; + +LEdge.prototype.getOtherEnd = function (node) { + if (this.source === node) { + return this.target; + } else if (this.target === node) { + return this.source; + } else { + throw "Node is not incident with this edge"; + } +}; + +LEdge.prototype.getOtherEndInGraph = function (node, graph) { + var otherEnd = this.getOtherEnd(node); + var root = graph.getGraphManager().getRoot(); + + while (true) { + if (otherEnd.getOwner() == graph) { + return otherEnd; + } + + if (otherEnd.getOwner() == root) { + break; + } + + otherEnd = otherEnd.getOwner().getParent(); + } + + return null; +}; + +LEdge.prototype.updateLength = function () { + var clipPointCoordinates = new Array(4); + + this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates); + + if (!this.isOverlapingSourceAndTarget) { + this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2]; + this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3]; + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); + } +}; + +LEdge.prototype.updateLengthSimple = function () { + this.lengthX = this.target.getCenterX() - this.source.getCenterX(); + this.lengthY = this.target.getCenterY() - this.source.getCenterY(); + + if (Math.abs(this.lengthX) < 1.0) { + this.lengthX = IMath.sign(this.lengthX); + } + + if (Math.abs(this.lengthY) < 1.0) { + this.lengthY = IMath.sign(this.lengthY); + } + + this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY); +}; + +module.exports = LEdge; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function LGraphObject(vGraphObject) { + this.vGraphObject = vGraphObject; +} + +module.exports = LGraphObject; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __nested_webpack_require_8167__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_8167__(2); +var Integer = __nested_webpack_require_8167__(10); +var RectangleD = __nested_webpack_require_8167__(13); +var LayoutConstants = __nested_webpack_require_8167__(0); +var RandomSeed = __nested_webpack_require_8167__(16); +var PointD = __nested_webpack_require_8167__(4); + +function LNode(gm, loc, size, vNode) { + //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode) + if (size == null && vNode == null) { + vNode = loc; + } + + LGraphObject.call(this, vNode); + + //Alternative constructor 2 : LNode(Layout layout, Object vNode) + if (gm.graphManager != null) gm = gm.graphManager; + + this.estimatedSize = Integer.MIN_VALUE; + this.inclusionTreeDepth = Integer.MAX_VALUE; + this.vGraphObject = vNode; + this.edges = []; + this.graphManager = gm; + + if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD(); +} + +LNode.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LNode[prop] = LGraphObject[prop]; +} + +LNode.prototype.getEdges = function () { + return this.edges; +}; + +LNode.prototype.getChild = function () { + return this.child; +}; + +LNode.prototype.getOwner = function () { + // if (this.owner != null) { + // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) { + // throw "assert failed"; + // } + // } + + return this.owner; +}; + +LNode.prototype.getWidth = function () { + return this.rect.width; +}; + +LNode.prototype.setWidth = function (width) { + this.rect.width = width; +}; + +LNode.prototype.getHeight = function () { + return this.rect.height; +}; + +LNode.prototype.setHeight = function (height) { + this.rect.height = height; +}; + +LNode.prototype.getCenterX = function () { + return this.rect.x + this.rect.width / 2; +}; + +LNode.prototype.getCenterY = function () { + return this.rect.y + this.rect.height / 2; +}; + +LNode.prototype.getCenter = function () { + return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2); +}; + +LNode.prototype.getLocation = function () { + return new PointD(this.rect.x, this.rect.y); +}; + +LNode.prototype.getRect = function () { + return this.rect; +}; + +LNode.prototype.getDiagonal = function () { + return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height); +}; + +/** + * This method returns half the diagonal length of this node. + */ +LNode.prototype.getHalfTheDiagonal = function () { + return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2; +}; + +LNode.prototype.setRect = function (upperLeft, dimension) { + this.rect.x = upperLeft.x; + this.rect.y = upperLeft.y; + this.rect.width = dimension.width; + this.rect.height = dimension.height; +}; + +LNode.prototype.setCenter = function (cx, cy) { + this.rect.x = cx - this.rect.width / 2; + this.rect.y = cy - this.rect.height / 2; +}; + +LNode.prototype.setLocation = function (x, y) { + this.rect.x = x; + this.rect.y = y; +}; + +LNode.prototype.moveBy = function (dx, dy) { + this.rect.x += dx; + this.rect.y += dy; +}; + +LNode.prototype.getEdgeListToNode = function (to) { + var edgeList = []; + var edge; + var self = this; + + self.edges.forEach(function (edge) { + + if (edge.target == to) { + if (edge.source != self) throw "Incorrect edge source!"; + + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getEdgesBetween = function (other) { + var edgeList = []; + var edge; + + var self = this; + self.edges.forEach(function (edge) { + + if (!(edge.source == self || edge.target == self)) throw "Incorrect edge source and/or target"; + + if (edge.target == other || edge.source == other) { + edgeList.push(edge); + } + }); + + return edgeList; +}; + +LNode.prototype.getNeighborsList = function () { + var neighbors = new Set(); + + var self = this; + self.edges.forEach(function (edge) { + + if (edge.source == self) { + neighbors.add(edge.target); + } else { + if (edge.target != self) { + throw "Incorrect incidency!"; + } + + neighbors.add(edge.source); + } + }); + + return neighbors; +}; + +LNode.prototype.withChildren = function () { + var withNeighborsList = new Set(); + var childNode; + var children; + + withNeighborsList.add(this); + + if (this.child != null) { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + children = childNode.withChildren(); + children.forEach(function (node) { + withNeighborsList.add(node); + }); + } + } + + return withNeighborsList; +}; + +LNode.prototype.getNoOfChildren = function () { + var noOfChildren = 0; + var childNode; + + if (this.child == null) { + noOfChildren = 1; + } else { + var nodes = this.child.getNodes(); + for (var i = 0; i < nodes.length; i++) { + childNode = nodes[i]; + + noOfChildren += childNode.getNoOfChildren(); + } + } + + if (noOfChildren == 0) { + noOfChildren = 1; + } + return noOfChildren; +}; + +LNode.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LNode.prototype.calcEstimatedSize = function () { + if (this.child == null) { + return this.estimatedSize = (this.rect.width + this.rect.height) / 2; + } else { + this.estimatedSize = this.child.calcEstimatedSize(); + this.rect.width = this.estimatedSize; + this.rect.height = this.estimatedSize; + + return this.estimatedSize; + } +}; + +LNode.prototype.scatter = function () { + var randomCenterX; + var randomCenterY; + + var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX; + + var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY; + var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY; + randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY; + + this.rect.x = randomCenterX; + this.rect.y = randomCenterY; +}; + +LNode.prototype.updateBounds = function () { + if (this.getChild() == null) { + throw "assert failed"; + } + if (this.getChild().getNodes().length != 0) { + // wrap the children nodes by re-arranging the boundaries + var childGraph = this.getChild(); + childGraph.updateBounds(true); + + this.rect.x = childGraph.getLeft(); + this.rect.y = childGraph.getTop(); + + this.setWidth(childGraph.getRight() - childGraph.getLeft()); + this.setHeight(childGraph.getBottom() - childGraph.getTop()); + + // Update compound bounds considering its label properties + if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) { + + var width = childGraph.getRight() - childGraph.getLeft(); + var height = childGraph.getBottom() - childGraph.getTop(); + + if (this.labelWidth > width) { + this.rect.x -= (this.labelWidth - width) / 2; + this.setWidth(this.labelWidth); + } + + if (this.labelHeight > height) { + if (this.labelPos == "center") { + this.rect.y -= (this.labelHeight - height) / 2; + } else if (this.labelPos == "top") { + this.rect.y -= this.labelHeight - height; + } + this.setHeight(this.labelHeight); + } + } + } +}; + +LNode.prototype.getInclusionTreeDepth = function () { + if (this.inclusionTreeDepth == Integer.MAX_VALUE) { + throw "assert failed"; + } + return this.inclusionTreeDepth; +}; + +LNode.prototype.transform = function (trans) { + var left = this.rect.x; + + if (left > LayoutConstants.WORLD_BOUNDARY) { + left = LayoutConstants.WORLD_BOUNDARY; + } else if (left < -LayoutConstants.WORLD_BOUNDARY) { + left = -LayoutConstants.WORLD_BOUNDARY; + } + + var top = this.rect.y; + + if (top > LayoutConstants.WORLD_BOUNDARY) { + top = LayoutConstants.WORLD_BOUNDARY; + } else if (top < -LayoutConstants.WORLD_BOUNDARY) { + top = -LayoutConstants.WORLD_BOUNDARY; + } + + var leftTop = new PointD(left, top); + var vLeftTop = trans.inverseTransformPoint(leftTop); + + this.setLocation(vLeftTop.x, vLeftTop.y); +}; + +LNode.prototype.getLeft = function () { + return this.rect.x; +}; + +LNode.prototype.getRight = function () { + return this.rect.x + this.rect.width; +}; + +LNode.prototype.getTop = function () { + return this.rect.y; +}; + +LNode.prototype.getBottom = function () { + return this.rect.y + this.rect.height; +}; + +LNode.prototype.getParent = function () { + if (this.owner == null) { + return null; + } + + return this.owner.getParent(); +}; + +module.exports = LNode; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function PointD(x, y) { + if (x == null && y == null) { + this.x = 0; + this.y = 0; + } else { + this.x = x; + this.y = y; + } +} + +PointD.prototype.getX = function () { + return this.x; +}; + +PointD.prototype.getY = function () { + return this.y; +}; + +PointD.prototype.setX = function (x) { + this.x = x; +}; + +PointD.prototype.setY = function (y) { + this.y = y; +}; + +PointD.prototype.getDifference = function (pt) { + return new DimensionD(this.x - pt.x, this.y - pt.y); +}; + +PointD.prototype.getCopy = function () { + return new PointD(this.x, this.y); +}; + +PointD.prototype.translate = function (dim) { + this.x += dim.width; + this.y += dim.height; + return this; +}; + +module.exports = PointD; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __nested_webpack_require_17549__) { + +"use strict"; + + +var LGraphObject = __nested_webpack_require_17549__(2); +var Integer = __nested_webpack_require_17549__(10); +var LayoutConstants = __nested_webpack_require_17549__(0); +var LGraphManager = __nested_webpack_require_17549__(6); +var LNode = __nested_webpack_require_17549__(3); +var LEdge = __nested_webpack_require_17549__(1); +var RectangleD = __nested_webpack_require_17549__(13); +var Point = __nested_webpack_require_17549__(12); +var LinkedList = __nested_webpack_require_17549__(11); + +function LGraph(parent, obj2, vGraph) { + LGraphObject.call(this, vGraph); + this.estimatedSize = Integer.MIN_VALUE; + this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN; + this.edges = []; + this.nodes = []; + this.isConnected = false; + this.parent = parent; + + if (obj2 != null && obj2 instanceof LGraphManager) { + this.graphManager = obj2; + } else if (obj2 != null && obj2 instanceof Layout) { + this.graphManager = obj2.graphManager; + } +} + +LGraph.prototype = Object.create(LGraphObject.prototype); +for (var prop in LGraphObject) { + LGraph[prop] = LGraphObject[prop]; +} + +LGraph.prototype.getNodes = function () { + return this.nodes; +}; + +LGraph.prototype.getEdges = function () { + return this.edges; +}; + +LGraph.prototype.getGraphManager = function () { + return this.graphManager; +}; + +LGraph.prototype.getParent = function () { + return this.parent; +}; + +LGraph.prototype.getLeft = function () { + return this.left; +}; + +LGraph.prototype.getRight = function () { + return this.right; +}; + +LGraph.prototype.getTop = function () { + return this.top; +}; + +LGraph.prototype.getBottom = function () { + return this.bottom; +}; + +LGraph.prototype.isConnected = function () { + return this.isConnected; +}; + +LGraph.prototype.add = function (obj1, sourceNode, targetNode) { + if (sourceNode == null && targetNode == null) { + var newNode = obj1; + if (this.graphManager == null) { + throw "Graph has no graph mgr!"; + } + if (this.getNodes().indexOf(newNode) > -1) { + throw "Node already in graph!"; + } + newNode.owner = this; + this.getNodes().push(newNode); + + return newNode; + } else { + var newEdge = obj1; + if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) { + throw "Source or target not in graph!"; + } + + if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) { + throw "Both owners must be this graph!"; + } + + if (sourceNode.owner != targetNode.owner) { + return null; + } + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // set as intra-graph edge + newEdge.isInterGraph = false; + + // add to graph edge list + this.getEdges().push(newEdge); + + // add to incidency lists + sourceNode.edges.push(newEdge); + + if (targetNode != sourceNode) { + targetNode.edges.push(newEdge); + } + + return newEdge; + } +}; + +LGraph.prototype.remove = function (obj) { + var node = obj; + if (obj instanceof LNode) { + if (node == null) { + throw "Node is null!"; + } + if (!(node.owner != null && node.owner == this)) { + throw "Owner graph is invalid!"; + } + if (this.graphManager == null) { + throw "Owner graph manager is invalid!"; + } + // remove incident edges first (make a copy to do it safely) + var edgesToBeRemoved = node.edges.slice(); + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + + if (edge.isInterGraph) { + this.graphManager.remove(edge); + } else { + edge.source.owner.remove(edge); + } + } + + // now the node itself + var index = this.nodes.indexOf(node); + if (index == -1) { + throw "Node not in owner node list!"; + } + + this.nodes.splice(index, 1); + } else if (obj instanceof LEdge) { + var edge = obj; + if (edge == null) { + throw "Edge is null!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) { + throw "Source and/or target owner is invalid!"; + } + + var sourceIndex = edge.source.edges.indexOf(edge); + var targetIndex = edge.target.edges.indexOf(edge); + if (!(sourceIndex > -1 && targetIndex > -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + edge.source.edges.splice(sourceIndex, 1); + + if (edge.target != edge.source) { + edge.target.edges.splice(targetIndex, 1); + } + + var index = edge.source.owner.getEdges().indexOf(edge); + if (index == -1) { + throw "Not in owner's edge list!"; + } + + edge.source.owner.getEdges().splice(index, 1); + } +}; + +LGraph.prototype.updateLeftTop = function () { + var top = Integer.MAX_VALUE; + var left = Integer.MAX_VALUE; + var nodeTop; + var nodeLeft; + var margin; + + var nodes = this.getNodes(); + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeTop = lNode.getTop(); + nodeLeft = lNode.getLeft(); + + if (top > nodeTop) { + top = nodeTop; + } + + if (left > nodeLeft) { + left = nodeLeft; + } + } + + // Do we have any nodes in this graph? + if (top == Integer.MAX_VALUE) { + return null; + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = left - margin; + this.top = top - margin; + + // Apply the margins and return the result + return new Point(this.left, this.top); +}; + +LGraph.prototype.updateBounds = function (recursive) { + // calculate bounds + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + var margin; + + var nodes = this.nodes; + var s = nodes.length; + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + + if (recursive && lNode.child != null) { + lNode.updateBounds(); + } + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + if (left == Integer.MAX_VALUE) { + this.left = this.parent.getLeft(); + this.right = this.parent.getRight(); + this.top = this.parent.getTop(); + this.bottom = this.parent.getBottom(); + } + + if (nodes[0].getParent().paddingLeft != undefined) { + margin = nodes[0].getParent().paddingLeft; + } else { + margin = this.margin; + } + + this.left = boundingRect.x - margin; + this.right = boundingRect.x + boundingRect.width + margin; + this.top = boundingRect.y - margin; + this.bottom = boundingRect.y + boundingRect.height + margin; +}; + +LGraph.calculateBounds = function (nodes) { + var left = Integer.MAX_VALUE; + var right = -Integer.MAX_VALUE; + var top = Integer.MAX_VALUE; + var bottom = -Integer.MAX_VALUE; + var nodeLeft; + var nodeRight; + var nodeTop; + var nodeBottom; + + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + nodeLeft = lNode.getLeft(); + nodeRight = lNode.getRight(); + nodeTop = lNode.getTop(); + nodeBottom = lNode.getBottom(); + + if (left > nodeLeft) { + left = nodeLeft; + } + + if (right < nodeRight) { + right = nodeRight; + } + + if (top > nodeTop) { + top = nodeTop; + } + + if (bottom < nodeBottom) { + bottom = nodeBottom; + } + } + + var boundingRect = new RectangleD(left, top, right - left, bottom - top); + + return boundingRect; +}; + +LGraph.prototype.getInclusionTreeDepth = function () { + if (this == this.graphManager.getRoot()) { + return 1; + } else { + return this.parent.getInclusionTreeDepth(); + } +}; + +LGraph.prototype.getEstimatedSize = function () { + if (this.estimatedSize == Integer.MIN_VALUE) { + throw "assert failed"; + } + return this.estimatedSize; +}; + +LGraph.prototype.calcEstimatedSize = function () { + var size = 0; + var nodes = this.nodes; + var s = nodes.length; + + for (var i = 0; i < s; i++) { + var lNode = nodes[i]; + size += lNode.calcEstimatedSize(); + } + + if (size == 0) { + this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; + } else { + this.estimatedSize = size / Math.sqrt(this.nodes.length); + } + + return this.estimatedSize; +}; + +LGraph.prototype.updateConnected = function () { + var self = this; + if (this.nodes.length == 0) { + this.isConnected = true; + return; + } + + var queue = new LinkedList(); + var visited = new Set(); + var currentNode = this.nodes[0]; + var neighborEdges; + var currentNeighbor; + var childrenOfNode = currentNode.withChildren(); + childrenOfNode.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + + while (queue.length !== 0) { + currentNode = queue.shift(); + + // Traverse all neighbors of this node + neighborEdges = currentNode.getEdges(); + var size = neighborEdges.length; + for (var i = 0; i < size; i++) { + var neighborEdge = neighborEdges[i]; + currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this); + + // Add unvisited neighbors to the list to visit + if (currentNeighbor != null && !visited.has(currentNeighbor)) { + var childrenOfNeighbor = currentNeighbor.withChildren(); + + childrenOfNeighbor.forEach(function (node) { + queue.push(node); + visited.add(node); + }); + } + } + } + + this.isConnected = false; + + if (visited.size >= this.nodes.length) { + var noOfVisitedInThisGraph = 0; + + visited.forEach(function (visitedNode) { + if (visitedNode.owner == self) { + noOfVisitedInThisGraph++; + } + }); + + if (noOfVisitedInThisGraph == this.nodes.length) { + this.isConnected = true; + } + } +}; + +module.exports = LGraph; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __nested_webpack_require_27617__) { + +"use strict"; + + +var LGraph; +var LEdge = __nested_webpack_require_27617__(1); + +function LGraphManager(layout) { + LGraph = __nested_webpack_require_27617__(5); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now. + this.layout = layout; + + this.graphs = []; + this.edges = []; +} + +LGraphManager.prototype.addRoot = function () { + var ngraph = this.layout.newGraph(); + var nnode = this.layout.newNode(null); + var root = this.add(ngraph, nnode); + this.setRootGraph(root); + return this.rootGraph; +}; + +LGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) { + //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge + if (newEdge == null && sourceNode == null && targetNode == null) { + if (newGraph == null) { + throw "Graph is null!"; + } + if (parentNode == null) { + throw "Parent node is null!"; + } + if (this.graphs.indexOf(newGraph) > -1) { + throw "Graph already in this graph mgr!"; + } + + this.graphs.push(newGraph); + + if (newGraph.parent != null) { + throw "Already has a parent!"; + } + if (parentNode.child != null) { + throw "Already has a child!"; + } + + newGraph.parent = parentNode; + parentNode.child = newGraph; + + return newGraph; + } else { + //change the order of the parameters + targetNode = newEdge; + sourceNode = parentNode; + newEdge = newGraph; + var sourceGraph = sourceNode.getOwner(); + var targetGraph = targetNode.getOwner(); + + if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) { + throw "Source not in this graph mgr!"; + } + if (!(targetGraph != null && targetGraph.getGraphManager() == this)) { + throw "Target not in this graph mgr!"; + } + + if (sourceGraph == targetGraph) { + newEdge.isInterGraph = false; + return sourceGraph.add(newEdge, sourceNode, targetNode); + } else { + newEdge.isInterGraph = true; + + // set source and target + newEdge.source = sourceNode; + newEdge.target = targetNode; + + // add edge to inter-graph edge list + if (this.edges.indexOf(newEdge) > -1) { + throw "Edge already in inter-graph edge list!"; + } + + this.edges.push(newEdge); + + // add edge to source and target incidency lists + if (!(newEdge.source != null && newEdge.target != null)) { + throw "Edge source and/or target is null!"; + } + + if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) { + throw "Edge already in source and/or target incidency list!"; + } + + newEdge.source.edges.push(newEdge); + newEdge.target.edges.push(newEdge); + + return newEdge; + } + } +}; + +LGraphManager.prototype.remove = function (lObj) { + if (lObj instanceof LGraph) { + var graph = lObj; + if (graph.getGraphManager() != this) { + throw "Graph not in this graph mgr"; + } + if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) { + throw "Invalid parent node!"; + } + + // first the edges (make a copy to do it safely) + var edgesToBeRemoved = []; + + edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges()); + + var edge; + var s = edgesToBeRemoved.length; + for (var i = 0; i < s; i++) { + edge = edgesToBeRemoved[i]; + graph.remove(edge); + } + + // then the nodes (make a copy to do it safely) + var nodesToBeRemoved = []; + + nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes()); + + var node; + s = nodesToBeRemoved.length; + for (var i = 0; i < s; i++) { + node = nodesToBeRemoved[i]; + graph.remove(node); + } + + // check if graph is the root + if (graph == this.rootGraph) { + this.setRootGraph(null); + } + + // now remove the graph itself + var index = this.graphs.indexOf(graph); + this.graphs.splice(index, 1); + + // also reset the parent of the graph + graph.parent = null; + } else if (lObj instanceof LEdge) { + edge = lObj; + if (edge == null) { + throw "Edge is null!"; + } + if (!edge.isInterGraph) { + throw "Not an inter-graph edge!"; + } + if (!(edge.source != null && edge.target != null)) { + throw "Source and/or target is null!"; + } + + // remove edge from source and target nodes' incidency lists + + if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) { + throw "Source and/or target doesn't know this edge!"; + } + + var index = edge.source.edges.indexOf(edge); + edge.source.edges.splice(index, 1); + index = edge.target.edges.indexOf(edge); + edge.target.edges.splice(index, 1); + + // remove edge from owner graph manager's inter-graph edge list + + if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) { + throw "Edge owner graph or owner graph manager is null!"; + } + if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) { + throw "Not in owner graph manager's edge list!"; + } + + var index = edge.source.owner.getGraphManager().edges.indexOf(edge); + edge.source.owner.getGraphManager().edges.splice(index, 1); + } +}; + +LGraphManager.prototype.updateBounds = function () { + this.rootGraph.updateBounds(true); +}; + +LGraphManager.prototype.getGraphs = function () { + return this.graphs; +}; + +LGraphManager.prototype.getAllNodes = function () { + if (this.allNodes == null) { + var nodeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < s; i++) { + nodeList = nodeList.concat(graphs[i].getNodes()); + } + this.allNodes = nodeList; + } + return this.allNodes; +}; + +LGraphManager.prototype.resetAllNodes = function () { + this.allNodes = null; +}; + +LGraphManager.prototype.resetAllEdges = function () { + this.allEdges = null; +}; + +LGraphManager.prototype.resetAllNodesToApplyGravitation = function () { + this.allNodesToApplyGravitation = null; +}; + +LGraphManager.prototype.getAllEdges = function () { + if (this.allEdges == null) { + var edgeList = []; + var graphs = this.getGraphs(); + var s = graphs.length; + for (var i = 0; i < graphs.length; i++) { + edgeList = edgeList.concat(graphs[i].getEdges()); + } + + edgeList = edgeList.concat(this.edges); + + this.allEdges = edgeList; + } + return this.allEdges; +}; + +LGraphManager.prototype.getAllNodesToApplyGravitation = function () { + return this.allNodesToApplyGravitation; +}; + +LGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) { + if (this.allNodesToApplyGravitation != null) { + throw "assert failed"; + } + + this.allNodesToApplyGravitation = nodeList; +}; + +LGraphManager.prototype.getRoot = function () { + return this.rootGraph; +}; + +LGraphManager.prototype.setRootGraph = function (graph) { + if (graph.getGraphManager() != this) { + throw "Root not in this graph mgr!"; + } + + this.rootGraph = graph; + // root graph must have a root node associated with it for convenience + if (graph.parent == null) { + graph.parent = this.layout.newNode("Root node"); + } +}; + +LGraphManager.prototype.getLayout = function () { + return this.layout; +}; + +LGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) { + if (!(firstNode != null && secondNode != null)) { + throw "assert failed"; + } + + if (firstNode == secondNode) { + return true; + } + // Is second node an ancestor of the first one? + var ownerGraph = firstNode.getOwner(); + var parentNode; + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == secondNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + // Is first node an ancestor of the second one? + ownerGraph = secondNode.getOwner(); + + do { + parentNode = ownerGraph.getParent(); + + if (parentNode == null) { + break; + } + + if (parentNode == firstNode) { + return true; + } + + ownerGraph = parentNode.getOwner(); + if (ownerGraph == null) { + break; + } + } while (true); + + return false; +}; + +LGraphManager.prototype.calcLowestCommonAncestors = function () { + var edge; + var sourceNode; + var targetNode; + var sourceAncestorGraph; + var targetAncestorGraph; + + var edges = this.getAllEdges(); + var s = edges.length; + for (var i = 0; i < s; i++) { + edge = edges[i]; + + sourceNode = edge.source; + targetNode = edge.target; + edge.lca = null; + edge.sourceInLca = sourceNode; + edge.targetInLca = targetNode; + + if (sourceNode == targetNode) { + edge.lca = sourceNode.getOwner(); + continue; + } + + sourceAncestorGraph = sourceNode.getOwner(); + + while (edge.lca == null) { + edge.targetInLca = targetNode; + targetAncestorGraph = targetNode.getOwner(); + + while (edge.lca == null) { + if (targetAncestorGraph == sourceAncestorGraph) { + edge.lca = targetAncestorGraph; + break; + } + + if (targetAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca != null) { + throw "assert failed"; + } + edge.targetInLca = targetAncestorGraph.getParent(); + targetAncestorGraph = edge.targetInLca.getOwner(); + } + + if (sourceAncestorGraph == this.rootGraph) { + break; + } + + if (edge.lca == null) { + edge.sourceInLca = sourceAncestorGraph.getParent(); + sourceAncestorGraph = edge.sourceInLca.getOwner(); + } + } + + if (edge.lca == null) { + throw "assert failed"; + } + } +}; + +LGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) { + if (firstNode == secondNode) { + return firstNode.getOwner(); + } + var firstOwnerGraph = firstNode.getOwner(); + + do { + if (firstOwnerGraph == null) { + break; + } + var secondOwnerGraph = secondNode.getOwner(); + + do { + if (secondOwnerGraph == null) { + break; + } + + if (secondOwnerGraph == firstOwnerGraph) { + return secondOwnerGraph; + } + secondOwnerGraph = secondOwnerGraph.getParent().getOwner(); + } while (true); + + firstOwnerGraph = firstOwnerGraph.getParent().getOwner(); + } while (true); + + return firstOwnerGraph; +}; + +LGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) { + if (graph == null && depth == null) { + graph = this.rootGraph; + depth = 1; + } + var node; + + var nodes = graph.getNodes(); + var s = nodes.length; + for (var i = 0; i < s; i++) { + node = nodes[i]; + node.inclusionTreeDepth = depth; + + if (node.child != null) { + this.calcInclusionTreeDepths(node.child, depth + 1); + } + } +}; + +LGraphManager.prototype.includesInvalidEdge = function () { + var edge; + + var s = this.edges.length; + for (var i = 0; i < s; i++) { + edge = this.edges[i]; + + if (this.isOneAncestorOfOther(edge.source, edge.target)) { + return true; + } + } + return false; +}; + +module.exports = LGraphManager; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __nested_webpack_require_38707__) { + +"use strict"; + + +var LayoutConstants = __nested_webpack_require_38707__(0); + +function FDLayoutConstants() {} + +//FDLayoutConstants inherits static props in LayoutConstants +for (var prop in LayoutConstants) { + FDLayoutConstants[prop] = LayoutConstants[prop]; +} + +FDLayoutConstants.MAX_ITERATIONS = 2500; + +FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50; +FDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45; +FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0; +FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0; +FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8; +FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5; +FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true; +FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true; +FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3; +FDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33; +FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000; +FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000; +FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0; +FDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3; +FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0; +FDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100; +FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1; +FDLayoutConstants.MIN_EDGE_LENGTH = 1; +FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10; + +module.exports = FDLayoutConstants; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __nested_webpack_require_40298__) { + +"use strict"; + + +/** + * This class maintains a list of static geometry related utility methods. + * + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var Point = __nested_webpack_require_40298__(12); + +function IGeometry() {} + +/** + * This method calculates *half* the amount in x and y directions of the two + * input rectangles needed to separate them keeping their respective + * positioning, and returns the result in the input array. An input + * separation buffer added to the amount in both directions. We assume that + * the two rectangles do intersect. + */ +IGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) { + if (!rectA.intersects(rectB)) { + throw "assert failed"; + } + + var directions = new Array(2); + + this.decideDirectionsForOverlappingNodes(rectA, rectB, directions); + + overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x); + overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y); + + // update the overlapping amounts for the following cases: + if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) { + /* Case x.1: + * + * rectA + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectB + */ + overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight()); + } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) { + /* Case x.2: + * + * rectB + * | | + * | _________ | + * | | | | + * |________|_______|______| + * | | + * | | + * rectA + */ + overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight()); + } + if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) { + /* Case y.1: + * ________ rectA + * | + * | + * ______|____ rectB + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom()); + } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) { + /* Case y.2: + * ________ rectB + * | + * | + * ______|____ rectA + * | | + * | | + * ______|____| + * | + * | + * |________ + * + */ + overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom()); + } + + // find slope of the line passes two centers + var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX())); + // if centers are overlapped + if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) { + // assume the slope is 1 (45 degree) + slope = 1.0; + } + + var moveByY = slope * overlapAmount[0]; + var moveByX = overlapAmount[1] / slope; + if (overlapAmount[0] < moveByX) { + moveByX = overlapAmount[0]; + } else { + moveByY = overlapAmount[1]; + } + // return half the amount so that if each rectangle is moved by these + // amounts in opposite directions, overlap will be resolved + overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer); + overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer); +}; + +/** + * This method decides the separation direction of overlapping nodes + * + * if directions[0] = -1, then rectA goes left + * if directions[0] = 1, then rectA goes right + * if directions[1] = -1, then rectA goes up + * if directions[1] = 1, then rectA goes down + */ +IGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) { + if (rectA.getCenterX() < rectB.getCenterX()) { + directions[0] = -1; + } else { + directions[0] = 1; + } + + if (rectA.getCenterY() < rectB.getCenterY()) { + directions[1] = -1; + } else { + directions[1] = 1; + } +}; + +/** + * This method calculates the intersection (clipping) points of the two + * input rectangles with line segment defined by the centers of these two + * rectangles. The clipping points are saved in the input double array and + * whether or not the two rectangles overlap is returned. + */ +IGeometry.getIntersection2 = function (rectA, rectB, result) { + //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB + var p1x = rectA.getCenterX(); + var p1y = rectA.getCenterY(); + var p2x = rectB.getCenterX(); + var p2y = rectB.getCenterY(); + + //if two rectangles intersect, then clipping points are centers + if (rectA.intersects(rectB)) { + result[0] = p1x; + result[1] = p1y; + result[2] = p2x; + result[3] = p2y; + return true; + } + //variables for rectA + var topLeftAx = rectA.getX(); + var topLeftAy = rectA.getY(); + var topRightAx = rectA.getRight(); + var bottomLeftAx = rectA.getX(); + var bottomLeftAy = rectA.getBottom(); + var bottomRightAx = rectA.getRight(); + var halfWidthA = rectA.getWidthHalf(); + var halfHeightA = rectA.getHeightHalf(); + //variables for rectB + var topLeftBx = rectB.getX(); + var topLeftBy = rectB.getY(); + var topRightBx = rectB.getRight(); + var bottomLeftBx = rectB.getX(); + var bottomLeftBy = rectB.getBottom(); + var bottomRightBx = rectB.getRight(); + var halfWidthB = rectB.getWidthHalf(); + var halfHeightB = rectB.getHeightHalf(); + + //flag whether clipping points are found + var clipPointAFound = false; + var clipPointBFound = false; + + // line is vertical + if (p1x === p2x) { + if (p1y > p2y) { + result[0] = p1x; + result[1] = topLeftAy; + result[2] = p2x; + result[3] = bottomLeftBy; + return false; + } else if (p1y < p2y) { + result[0] = p1x; + result[1] = bottomLeftAy; + result[2] = p2x; + result[3] = topLeftBy; + return false; + } else { + //not line, return null; + } + } + // line is horizontal + else if (p1y === p2y) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = p1y; + result[2] = topRightBx; + result[3] = p2y; + return false; + } else if (p1x < p2x) { + result[0] = topRightAx; + result[1] = p1y; + result[2] = topLeftBx; + result[3] = p2y; + return false; + } else { + //not valid line, return null; + } + } else { + //slopes of rectA's and rectB's diagonals + var slopeA = rectA.height / rectA.width; + var slopeB = rectB.height / rectB.width; + + //slope of line between center of rectA and center of rectB + var slopePrime = (p2y - p1y) / (p2x - p1x); + var cardinalDirectionA = void 0; + var cardinalDirectionB = void 0; + var tempPointAx = void 0; + var tempPointAy = void 0; + var tempPointBx = void 0; + var tempPointBy = void 0; + + //determine whether clipping point is the corner of nodeA + if (-slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = bottomLeftAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } else { + result[0] = topRightAx; + result[1] = topLeftAy; + clipPointAFound = true; + } + } else if (slopeA === slopePrime) { + if (p1x > p2x) { + result[0] = topLeftAx; + result[1] = topLeftAy; + clipPointAFound = true; + } else { + result[0] = bottomRightAx; + result[1] = bottomLeftAy; + clipPointAFound = true; + } + } + + //determine whether clipping point is the corner of nodeB + if (-slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = bottomLeftBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } else { + result[2] = topRightBx; + result[3] = topLeftBy; + clipPointBFound = true; + } + } else if (slopeB === slopePrime) { + if (p2x > p1x) { + result[2] = topLeftBx; + result[3] = topLeftBy; + clipPointBFound = true; + } else { + result[2] = bottomRightBx; + result[3] = bottomLeftBy; + clipPointBFound = true; + } + } + + //if both clipping points are corners + if (clipPointAFound && clipPointBFound) { + return false; + } + + //determine Cardinal Direction of rectangles + if (p1x > p2x) { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2); + } else { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1); + } + } else { + if (p1y > p2y) { + cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1); + cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3); + } else { + cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2); + cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4); + } + } + //calculate clipping Point if it is not found before + if (!clipPointAFound) { + switch (cardinalDirectionA) { + case 1: + tempPointAy = topLeftAy; + tempPointAx = p1x + -halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 2: + tempPointAx = bottomRightAx; + tempPointAy = p1y + halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 3: + tempPointAy = bottomLeftAy; + tempPointAx = p1x + halfHeightA / slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + case 4: + tempPointAx = bottomLeftAx; + tempPointAy = p1y + -halfWidthA * slopePrime; + result[0] = tempPointAx; + result[1] = tempPointAy; + break; + } + } + if (!clipPointBFound) { + switch (cardinalDirectionB) { + case 1: + tempPointBy = topLeftBy; + tempPointBx = p2x + -halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 2: + tempPointBx = bottomRightBx; + tempPointBy = p2y + halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 3: + tempPointBy = bottomLeftBy; + tempPointBx = p2x + halfHeightB / slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + case 4: + tempPointBx = bottomLeftBx; + tempPointBy = p2y + -halfWidthB * slopePrime; + result[2] = tempPointBx; + result[3] = tempPointBy; + break; + } + } + } + return false; +}; + +/** + * This method returns in which cardinal direction does input point stays + * 1: North + * 2: East + * 3: South + * 4: West + */ +IGeometry.getCardinalDirection = function (slope, slopePrime, line) { + if (slope > slopePrime) { + return line; + } else { + return 1 + line % 4; + } +}; + +/** + * This method calculates the intersection of the two lines defined by + * point pairs (s1,s2) and (f1,f2). + */ +IGeometry.getIntersection = function (s1, s2, f1, f2) { + if (f2 == null) { + return this.getIntersection2(s1, s2, f1); + } + + var x1 = s1.x; + var y1 = s1.y; + var x2 = s2.x; + var y2 = s2.y; + var x3 = f1.x; + var y3 = f1.y; + var x4 = f2.x; + var y4 = f2.y; + var x = void 0, + y = void 0; // intersection point + var a1 = void 0, + a2 = void 0, + b1 = void 0, + b2 = void 0, + c1 = void 0, + c2 = void 0; // coefficients of line eqns. + var denom = void 0; + + a1 = y2 - y1; + b1 = x1 - x2; + c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 } + + a2 = y4 - y3; + b2 = x3 - x4; + c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 } + + denom = a1 * b2 - a2 * b1; + + if (denom === 0) { + return null; + } + + x = (b1 * c2 - b2 * c1) / denom; + y = (a2 * c1 - a1 * c2) / denom; + + return new Point(x, y); +}; + +/** + * This method finds and returns the angle of the vector from the + x-axis + * in clockwise direction (compatible w/ Java coordinate system!). + */ +IGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) { + var C_angle = void 0; + + if (Cx !== Nx) { + C_angle = Math.atan((Ny - Cy) / (Nx - Cx)); + + if (Nx < Cx) { + C_angle += Math.PI; + } else if (Ny < Cy) { + C_angle += this.TWO_PI; + } + } else if (Ny < Cy) { + C_angle = this.ONE_AND_HALF_PI; // 270 degrees + } else { + C_angle = this.HALF_PI; // 90 degrees + } + + return C_angle; +}; + +/** + * This method checks whether the given two line segments (one with point + * p1 and p2, the other with point p3 and p4) intersect at a point other + * than these points. + */ +IGeometry.doIntersect = function (p1, p2, p3, p4) { + var a = p1.x; + var b = p1.y; + var c = p2.x; + var d = p2.y; + var p = p3.x; + var q = p3.y; + var r = p4.x; + var s = p4.y; + var det = (c - a) * (s - q) - (r - p) * (d - b); + + if (det === 0) { + return false; + } else { + var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det; + var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det; + return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1; + } +}; + +// ----------------------------------------------------------------------------- +// Section: Class Constants +// ----------------------------------------------------------------------------- +/** + * Some useful pre-calculated constants + */ +IGeometry.HALF_PI = 0.5 * Math.PI; +IGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI; +IGeometry.TWO_PI = 2.0 * Math.PI; +IGeometry.THREE_PI = 3.0 * Math.PI; + +module.exports = IGeometry; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function IMath() {} + +/** + * This method returns the sign of the input value. + */ +IMath.sign = function (value) { + if (value > 0) { + return 1; + } else if (value < 0) { + return -1; + } else { + return 0; + } +}; + +IMath.floor = function (value) { + return value < 0 ? Math.ceil(value) : Math.floor(value); +}; + +IMath.ceil = function (value) { + return value < 0 ? Math.floor(value) : Math.ceil(value); +}; + +module.exports = IMath; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Integer() {} + +Integer.MAX_VALUE = 2147483647; +Integer.MIN_VALUE = -2147483648; + +module.exports = Integer; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var nodeFrom = function nodeFrom(value) { + return { value: value, next: null, prev: null }; +}; + +var add = function add(prev, node, next, list) { + if (prev !== null) { + prev.next = node; + } else { + list.head = node; + } + + if (next !== null) { + next.prev = node; + } else { + list.tail = node; + } + + node.prev = prev; + node.next = next; + + list.length++; + + return node; +}; + +var _remove = function _remove(node, list) { + var prev = node.prev, + next = node.next; + + + if (prev !== null) { + prev.next = next; + } else { + list.head = next; + } + + if (next !== null) { + next.prev = prev; + } else { + list.tail = prev; + } + + node.prev = node.next = null; + + list.length--; + + return node; +}; + +var LinkedList = function () { + function LinkedList(vals) { + var _this = this; + + _classCallCheck(this, LinkedList); + + this.length = 0; + this.head = null; + this.tail = null; + + if (vals != null) { + vals.forEach(function (v) { + return _this.push(v); + }); + } + } + + _createClass(LinkedList, [{ + key: "size", + value: function size() { + return this.length; + } + }, { + key: "insertBefore", + value: function insertBefore(val, otherNode) { + return add(otherNode.prev, nodeFrom(val), otherNode, this); + } + }, { + key: "insertAfter", + value: function insertAfter(val, otherNode) { + return add(otherNode, nodeFrom(val), otherNode.next, this); + } + }, { + key: "insertNodeBefore", + value: function insertNodeBefore(newNode, otherNode) { + return add(otherNode.prev, newNode, otherNode, this); + } + }, { + key: "insertNodeAfter", + value: function insertNodeAfter(newNode, otherNode) { + return add(otherNode, newNode, otherNode.next, this); + } + }, { + key: "push", + value: function push(val) { + return add(this.tail, nodeFrom(val), null, this); + } + }, { + key: "unshift", + value: function unshift(val) { + return add(null, nodeFrom(val), this.head, this); + } + }, { + key: "remove", + value: function remove(node) { + return _remove(node, this); + } + }, { + key: "pop", + value: function pop() { + return _remove(this.tail, this).value; + } + }, { + key: "popNode", + value: function popNode() { + return _remove(this.tail, this); + } + }, { + key: "shift", + value: function shift() { + return _remove(this.head, this).value; + } + }, { + key: "shiftNode", + value: function shiftNode() { + return _remove(this.head, this); + } + }, { + key: "get_object_at", + value: function get_object_at(index) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + return current.value; + } + } + }, { + key: "set_object_at", + value: function set_object_at(index, value) { + if (index <= this.length()) { + var i = 1; + var current = this.head; + while (i < index) { + current = current.next; + i++; + } + current.value = value; + } + } + }]); + + return LinkedList; +}(); + +module.exports = LinkedList; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* + *This class is the javascript implementation of the Point.java class in jdk + */ +function Point(x, y, p) { + this.x = null; + this.y = null; + if (x == null && y == null && p == null) { + this.x = 0; + this.y = 0; + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + this.x = x; + this.y = y; + } else if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.x = p.x; + this.y = p.y; + } +} + +Point.prototype.getX = function () { + return this.x; +}; + +Point.prototype.getY = function () { + return this.y; +}; + +Point.prototype.getLocation = function () { + return new Point(this.x, this.y); +}; + +Point.prototype.setLocation = function (x, y, p) { + if (x.constructor.name == 'Point' && y == null && p == null) { + p = x; + this.setLocation(p.x, p.y); + } else if (typeof x == 'number' && typeof y == 'number' && p == null) { + //if both parameters are integer just move (x,y) location + if (parseInt(x) == x && parseInt(y) == y) { + this.move(x, y); + } else { + this.x = Math.floor(x + 0.5); + this.y = Math.floor(y + 0.5); + } + } +}; + +Point.prototype.move = function (x, y) { + this.x = x; + this.y = y; +}; + +Point.prototype.translate = function (dx, dy) { + this.x += dx; + this.y += dy; +}; + +Point.prototype.equals = function (obj) { + if (obj.constructor.name == "Point") { + var pt = obj; + return this.x == pt.x && this.y == pt.y; + } + return this == obj; +}; + +Point.prototype.toString = function () { + return new Point().constructor.name + "[x=" + this.x + ",y=" + this.y + "]"; +}; + +module.exports = Point; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RectangleD(x, y, width, height) { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + + if (x != null && y != null && width != null && height != null) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } +} + +RectangleD.prototype.getX = function () { + return this.x; +}; + +RectangleD.prototype.setX = function (x) { + this.x = x; +}; + +RectangleD.prototype.getY = function () { + return this.y; +}; + +RectangleD.prototype.setY = function (y) { + this.y = y; +}; + +RectangleD.prototype.getWidth = function () { + return this.width; +}; + +RectangleD.prototype.setWidth = function (width) { + this.width = width; +}; + +RectangleD.prototype.getHeight = function () { + return this.height; +}; + +RectangleD.prototype.setHeight = function (height) { + this.height = height; +}; + +RectangleD.prototype.getRight = function () { + return this.x + this.width; +}; + +RectangleD.prototype.getBottom = function () { + return this.y + this.height; +}; + +RectangleD.prototype.intersects = function (a) { + if (this.getRight() < a.x) { + return false; + } + + if (this.getBottom() < a.y) { + return false; + } + + if (a.getRight() < this.x) { + return false; + } + + if (a.getBottom() < this.y) { + return false; + } + + return true; +}; + +RectangleD.prototype.getCenterX = function () { + return this.x + this.width / 2; +}; + +RectangleD.prototype.getMinX = function () { + return this.getX(); +}; + +RectangleD.prototype.getMaxX = function () { + return this.getX() + this.width; +}; + +RectangleD.prototype.getCenterY = function () { + return this.y + this.height / 2; +}; + +RectangleD.prototype.getMinY = function () { + return this.getY(); +}; + +RectangleD.prototype.getMaxY = function () { + return this.getY() + this.height; +}; + +RectangleD.prototype.getWidthHalf = function () { + return this.width / 2; +}; + +RectangleD.prototype.getHeightHalf = function () { + return this.height / 2; +}; + +module.exports = RectangleD; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function UniqueIDGeneretor() {} + +UniqueIDGeneretor.lastID = 0; + +UniqueIDGeneretor.createID = function (obj) { + if (UniqueIDGeneretor.isPrimitive(obj)) { + return obj; + } + if (obj.uniqueID != null) { + return obj.uniqueID; + } + obj.uniqueID = UniqueIDGeneretor.getString(); + UniqueIDGeneretor.lastID++; + return obj.uniqueID; +}; + +UniqueIDGeneretor.getString = function (id) { + if (id == null) id = UniqueIDGeneretor.lastID; + return "Object#" + id + ""; +}; + +UniqueIDGeneretor.isPrimitive = function (arg) { + var type = typeof arg === "undefined" ? "undefined" : _typeof(arg); + return arg == null || type != "object" && type != "function"; +}; + +module.exports = UniqueIDGeneretor; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __nested_webpack_require_64072__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var LayoutConstants = __nested_webpack_require_64072__(0); +var LGraphManager = __nested_webpack_require_64072__(6); +var LNode = __nested_webpack_require_64072__(3); +var LEdge = __nested_webpack_require_64072__(1); +var LGraph = __nested_webpack_require_64072__(5); +var PointD = __nested_webpack_require_64072__(4); +var Transform = __nested_webpack_require_64072__(17); +var Emitter = __nested_webpack_require_64072__(27); + +function Layout(isRemoteUse) { + Emitter.call(this); + + //Layout Quality: 0:draft, 1:default, 2:proof + this.layoutQuality = LayoutConstants.QUALITY; + //Whether layout should create bendpoints as needed or not + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + //Whether layout should be incremental or not + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + //Whether we animate from before to after layout node positions + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + //Whether we animate the layout process or not + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + //Number iterations that should be done between two successive animations + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + /** + * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When + * they are, both spring and repulsion forces between two leaf nodes can be + * calculated without the expensive clipping point calculations, resulting + * in major speed-up. + */ + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + /** + * This is used for creation of bendpoints by using dummy nodes and edges. + * Maps an LEdge to its dummy bendpoint path. + */ + this.edgeToDummyNodes = new Map(); + this.graphManager = new LGraphManager(this); + this.isLayoutFinished = false; + this.isSubLayout = false; + this.isRemoteUse = false; + + if (isRemoteUse != null) { + this.isRemoteUse = isRemoteUse; + } +} + +Layout.RANDOM_SEED = 1; + +Layout.prototype = Object.create(Emitter.prototype); + +Layout.prototype.getGraphManager = function () { + return this.graphManager; +}; + +Layout.prototype.getAllNodes = function () { + return this.graphManager.getAllNodes(); +}; + +Layout.prototype.getAllEdges = function () { + return this.graphManager.getAllEdges(); +}; + +Layout.prototype.getAllNodesToApplyGravitation = function () { + return this.graphManager.getAllNodesToApplyGravitation(); +}; + +Layout.prototype.newGraphManager = function () { + var gm = new LGraphManager(this); + this.graphManager = gm; + return gm; +}; + +Layout.prototype.newGraph = function (vGraph) { + return new LGraph(null, this.graphManager, vGraph); +}; + +Layout.prototype.newNode = function (vNode) { + return new LNode(this.graphManager, vNode); +}; + +Layout.prototype.newEdge = function (vEdge) { + return new LEdge(null, null, vEdge); +}; + +Layout.prototype.checkLayoutSuccess = function () { + return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge(); +}; + +Layout.prototype.runLayout = function () { + this.isLayoutFinished = false; + + if (this.tilingPreLayout) { + this.tilingPreLayout(); + } + + this.initParameters(); + var isLayoutSuccessfull; + + if (this.checkLayoutSuccess()) { + isLayoutSuccessfull = false; + } else { + isLayoutSuccessfull = this.layout(); + } + + if (LayoutConstants.ANIMATE === 'during') { + // If this is a 'during' layout animation. Layout is not finished yet. + // We need to perform these in index.js when layout is really finished. + return false; + } + + if (isLayoutSuccessfull) { + if (!this.isSubLayout) { + this.doPostLayout(); + } + } + + if (this.tilingPostLayout) { + this.tilingPostLayout(); + } + + this.isLayoutFinished = true; + + return isLayoutSuccessfull; +}; + +/** + * This method performs the operations required after layout. + */ +Layout.prototype.doPostLayout = function () { + //assert !isSubLayout : "Should not be called on sub-layout!"; + // Propagate geometric changes to v-level objects + if (!this.incremental) { + this.transform(); + } + this.update(); +}; + +/** + * This method updates the geometry of the target graph according to + * calculated layout. + */ +Layout.prototype.update2 = function () { + // update bend points + if (this.createBendsAsNeeded) { + this.createBendpointsFromDummyNodes(); + + // reset all edges, since the topology has changed + this.graphManager.resetAllEdges(); + } + + // perform edge, node and root updates if layout is not called + // remotely + if (!this.isRemoteUse) { + // update all edges + var edge; + var allEdges = this.graphManager.getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + // this.update(edge); + } + + // recursively update nodes + var node; + var nodes = this.graphManager.getRoot().getNodes(); + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + // this.update(node); + } + + // update root graph + this.update(this.graphManager.getRoot()); + } +}; + +Layout.prototype.update = function (obj) { + if (obj == null) { + this.update2(); + } else if (obj instanceof LNode) { + var node = obj; + if (node.getChild() != null) { + // since node is compound, recursively update child nodes + var nodes = node.getChild().getNodes(); + for (var i = 0; i < nodes.length; i++) { + update(nodes[i]); + } + } + + // if the l-level node is associated with a v-level graph object, + // then it is assumed that the v-level node implements the + // interface Updatable. + if (node.vGraphObject != null) { + // cast to Updatable without any type check + var vNode = node.vGraphObject; + + // call the update method of the interface + vNode.update(node); + } + } else if (obj instanceof LEdge) { + var edge = obj; + // if the l-level edge is associated with a v-level graph object, + // then it is assumed that the v-level edge implements the + // interface Updatable. + + if (edge.vGraphObject != null) { + // cast to Updatable without any type check + var vEdge = edge.vGraphObject; + + // call the update method of the interface + vEdge.update(edge); + } + } else if (obj instanceof LGraph) { + var graph = obj; + // if the l-level graph is associated with a v-level graph object, + // then it is assumed that the v-level object implements the + // interface Updatable. + + if (graph.vGraphObject != null) { + // cast to Updatable without any type check + var vGraph = graph.vGraphObject; + + // call the update method of the interface + vGraph.update(graph); + } + } +}; + +/** + * This method is used to set all layout parameters to default values + * determined at compile time. + */ +Layout.prototype.initParameters = function () { + if (!this.isSubLayout) { + this.layoutQuality = LayoutConstants.QUALITY; + this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT; + this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD; + this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT; + this.incremental = LayoutConstants.DEFAULT_INCREMENTAL; + this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED; + this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES; + } + + if (this.animationDuringLayout) { + this.animationOnLayout = false; + } +}; + +Layout.prototype.transform = function (newLeftTop) { + if (newLeftTop == undefined) { + this.transform(new PointD(0, 0)); + } else { + // create a transformation object (from Eclipse to layout). When an + // inverse transform is applied, we get upper-left coordinate of the + // drawing or the root graph at given input coordinate (some margins + // already included in calculation of left-top). + + var trans = new Transform(); + var leftTop = this.graphManager.getRoot().updateLeftTop(); + + if (leftTop != null) { + trans.setWorldOrgX(newLeftTop.x); + trans.setWorldOrgY(newLeftTop.y); + + trans.setDeviceOrgX(leftTop.x); + trans.setDeviceOrgY(leftTop.y); + + var nodes = this.getAllNodes(); + var node; + + for (var i = 0; i < nodes.length; i++) { + node = nodes[i]; + node.transform(trans); + } + } + } +}; + +Layout.prototype.positionNodesRandomly = function (graph) { + + if (graph == undefined) { + //assert !this.incremental; + this.positionNodesRandomly(this.getGraphManager().getRoot()); + this.getGraphManager().getRoot().updateBounds(true); + } else { + var lNode; + var childGraph; + + var nodes = graph.getNodes(); + for (var i = 0; i < nodes.length; i++) { + lNode = nodes[i]; + childGraph = lNode.getChild(); + + if (childGraph == null) { + lNode.scatter(); + } else if (childGraph.getNodes().length == 0) { + lNode.scatter(); + } else { + this.positionNodesRandomly(childGraph); + lNode.updateBounds(); + } + } + } +}; + +/** + * This method returns a list of trees where each tree is represented as a + * list of l-nodes. The method returns a list of size 0 when: + * - The graph is not flat or + * - One of the component(s) of the graph is not a tree. + */ +Layout.prototype.getFlatForest = function () { + var flatForest = []; + var isForest = true; + + // Quick reference for all nodes in the graph manager associated with + // this layout. The list should not be changed. + var allNodes = this.graphManager.getRoot().getNodes(); + + // First be sure that the graph is flat + var isFlat = true; + + for (var i = 0; i < allNodes.length; i++) { + if (allNodes[i].getChild() != null) { + isFlat = false; + } + } + + // Return empty forest if the graph is not flat. + if (!isFlat) { + return flatForest; + } + + // Run BFS for each component of the graph. + + var visited = new Set(); + var toBeVisited = []; + var parents = new Map(); + var unProcessedNodes = []; + + unProcessedNodes = unProcessedNodes.concat(allNodes); + + // Each iteration of this loop finds a component of the graph and + // decides whether it is a tree or not. If it is a tree, adds it to the + // forest and continued with the next component. + + while (unProcessedNodes.length > 0 && isForest) { + toBeVisited.push(unProcessedNodes[0]); + + // Start the BFS. Each iteration of this loop visits a node in a + // BFS manner. + while (toBeVisited.length > 0 && isForest) { + //pool operation + var currentNode = toBeVisited[0]; + toBeVisited.splice(0, 1); + visited.add(currentNode); + + // Traverse all neighbors of this node + var neighborEdges = currentNode.getEdges(); + + for (var i = 0; i < neighborEdges.length; i++) { + var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode); + + // If BFS is not growing from this neighbor. + if (parents.get(currentNode) != currentNeighbor) { + // We haven't previously visited this neighbor. + if (!visited.has(currentNeighbor)) { + toBeVisited.push(currentNeighbor); + parents.set(currentNeighbor, currentNode); + } + // Since we have previously visited this neighbor and + // this neighbor is not parent of currentNode, given + // graph contains a component that is not tree, hence + // it is not a forest. + else { + isForest = false; + break; + } + } + } + } + + // The graph contains a component that is not a tree. Empty + // previously found trees. The method will end. + if (!isForest) { + flatForest = []; + } + // Save currently visited nodes as a tree in our forest. Reset + // visited and parents lists. Continue with the next component of + // the graph, if any. + else { + var temp = [].concat(_toConsumableArray(visited)); + flatForest.push(temp); + //flatForest = flatForest.concat(temp); + //unProcessedNodes.removeAll(visited); + for (var i = 0; i < temp.length; i++) { + var value = temp[i]; + var index = unProcessedNodes.indexOf(value); + if (index > -1) { + unProcessedNodes.splice(index, 1); + } + } + visited = new Set(); + parents = new Map(); + } + } + + return flatForest; +}; + +/** + * This method creates dummy nodes (an l-level node with minimal dimensions) + * for the given edge (one per bendpoint). The existing l-level structure + * is updated accordingly. + */ +Layout.prototype.createDummyNodesForBendpoints = function (edge) { + var dummyNodes = []; + var prev = edge.source; + + var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target); + + for (var i = 0; i < edge.bendpoints.length; i++) { + // create new dummy node + var dummyNode = this.newNode(null); + dummyNode.setRect(new Point(0, 0), new Dimension(1, 1)); + + graph.add(dummyNode); + + // create new dummy edge between prev and dummy node + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, dummyNode); + + dummyNodes.add(dummyNode); + prev = dummyNode; + } + + var dummyEdge = this.newEdge(null); + this.graphManager.add(dummyEdge, prev, edge.target); + + this.edgeToDummyNodes.set(edge, dummyNodes); + + // remove real edge from graph manager if it is inter-graph + if (edge.isInterGraph()) { + this.graphManager.remove(edge); + } + // else, remove the edge from the current graph + else { + graph.remove(edge); + } + + return dummyNodes; +}; + +/** + * This method creates bendpoints for edges from the dummy nodes + * at l-level. + */ +Layout.prototype.createBendpointsFromDummyNodes = function () { + var edges = []; + edges = edges.concat(this.graphManager.getAllEdges()); + edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges); + + for (var k = 0; k < edges.length; k++) { + var lEdge = edges[k]; + + if (lEdge.bendpoints.length > 0) { + var path = this.edgeToDummyNodes.get(lEdge); + + for (var i = 0; i < path.length; i++) { + var dummyNode = path[i]; + var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY()); + + // update bendpoint's location according to dummy node + var ebp = lEdge.bendpoints.get(i); + ebp.x = p.x; + ebp.y = p.y; + + // remove the dummy node, dummy edges incident with this + // dummy node is also removed (within the remove method) + dummyNode.getOwner().remove(dummyNode); + } + + // add the real edge to graph + this.graphManager.add(lEdge, lEdge.source, lEdge.target); + } + } +}; + +Layout.transform = function (sliderValue, defaultValue, minDiv, maxMul) { + if (minDiv != undefined && maxMul != undefined) { + var value = defaultValue; + + if (sliderValue <= 50) { + var minValue = defaultValue / minDiv; + value -= (defaultValue - minValue) / 50 * (50 - sliderValue); + } else { + var maxValue = defaultValue * maxMul; + value += (maxValue - defaultValue) / 50 * (sliderValue - 50); + } + + return value; + } else { + var a, b; + + if (sliderValue <= 50) { + a = 9.0 * defaultValue / 500.0; + b = defaultValue / 10.0; + } else { + a = 9.0 * defaultValue / 50.0; + b = -8 * defaultValue; + } + + return a * sliderValue + b; + } +}; + +/** + * This method finds and returns the center of the given nodes, assuming + * that the given nodes form a tree in themselves. + */ +Layout.findCenterOfTree = function (nodes) { + var list = []; + list = list.concat(nodes); + + var removedNodes = []; + var remainingDegrees = new Map(); + var foundCenter = false; + var centerNode = null; + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + var degree = node.getNeighborsList().size; + remainingDegrees.set(node, node.getNeighborsList().size); + + if (degree == 1) { + removedNodes.push(node); + } + } + + var tempList = []; + tempList = tempList.concat(removedNodes); + + while (!foundCenter) { + var tempList2 = []; + tempList2 = tempList2.concat(tempList); + tempList = []; + + for (var i = 0; i < list.length; i++) { + var node = list[i]; + + var index = list.indexOf(node); + if (index >= 0) { + list.splice(index, 1); + } + + var neighbours = node.getNeighborsList(); + + neighbours.forEach(function (neighbour) { + if (removedNodes.indexOf(neighbour) < 0) { + var otherDegree = remainingDegrees.get(neighbour); + var newDegree = otherDegree - 1; + + if (newDegree == 1) { + tempList.push(neighbour); + } + + remainingDegrees.set(neighbour, newDegree); + } + }); + } + + removedNodes = removedNodes.concat(tempList); + + if (list.length == 1 || list.length == 2) { + foundCenter = true; + centerNode = list[0]; + } + } + + return centerNode; +}; + +/** + * During the coarsening process, this layout may be referenced by two graph managers + * this setter function grants access to change the currently being used graph manager + */ +Layout.prototype.setGraphManager = function (gm) { + this.graphManager = gm; +}; + +module.exports = Layout; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function RandomSeed() {} +// adapted from: https://stackoverflow.com/a/19303725 +RandomSeed.seed = 1; +RandomSeed.x = 0; + +RandomSeed.nextDouble = function () { + RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000; + return RandomSeed.x - Math.floor(RandomSeed.x); +}; + +module.exports = RandomSeed; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __nested_webpack_require_81860__) { + +"use strict"; + + +var PointD = __nested_webpack_require_81860__(4); + +function Transform(x, y) { + this.lworldOrgX = 0.0; + this.lworldOrgY = 0.0; + this.ldeviceOrgX = 0.0; + this.ldeviceOrgY = 0.0; + this.lworldExtX = 1.0; + this.lworldExtY = 1.0; + this.ldeviceExtX = 1.0; + this.ldeviceExtY = 1.0; +} + +Transform.prototype.getWorldOrgX = function () { + return this.lworldOrgX; +}; + +Transform.prototype.setWorldOrgX = function (wox) { + this.lworldOrgX = wox; +}; + +Transform.prototype.getWorldOrgY = function () { + return this.lworldOrgY; +}; + +Transform.prototype.setWorldOrgY = function (woy) { + this.lworldOrgY = woy; +}; + +Transform.prototype.getWorldExtX = function () { + return this.lworldExtX; +}; + +Transform.prototype.setWorldExtX = function (wex) { + this.lworldExtX = wex; +}; + +Transform.prototype.getWorldExtY = function () { + return this.lworldExtY; +}; + +Transform.prototype.setWorldExtY = function (wey) { + this.lworldExtY = wey; +}; + +/* Device related */ + +Transform.prototype.getDeviceOrgX = function () { + return this.ldeviceOrgX; +}; + +Transform.prototype.setDeviceOrgX = function (dox) { + this.ldeviceOrgX = dox; +}; + +Transform.prototype.getDeviceOrgY = function () { + return this.ldeviceOrgY; +}; + +Transform.prototype.setDeviceOrgY = function (doy) { + this.ldeviceOrgY = doy; +}; + +Transform.prototype.getDeviceExtX = function () { + return this.ldeviceExtX; +}; + +Transform.prototype.setDeviceExtX = function (dex) { + this.ldeviceExtX = dex; +}; + +Transform.prototype.getDeviceExtY = function () { + return this.ldeviceExtY; +}; + +Transform.prototype.setDeviceExtY = function (dey) { + this.ldeviceExtY = dey; +}; + +Transform.prototype.transformX = function (x) { + var xDevice = 0.0; + var worldExtX = this.lworldExtX; + if (worldExtX != 0.0) { + xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX; + } + + return xDevice; +}; + +Transform.prototype.transformY = function (y) { + var yDevice = 0.0; + var worldExtY = this.lworldExtY; + if (worldExtY != 0.0) { + yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY; + } + + return yDevice; +}; + +Transform.prototype.inverseTransformX = function (x) { + var xWorld = 0.0; + var deviceExtX = this.ldeviceExtX; + if (deviceExtX != 0.0) { + xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX; + } + + return xWorld; +}; + +Transform.prototype.inverseTransformY = function (y) { + var yWorld = 0.0; + var deviceExtY = this.ldeviceExtY; + if (deviceExtY != 0.0) { + yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY; + } + return yWorld; +}; + +Transform.prototype.inverseTransformPoint = function (inPoint) { + var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y)); + return outPoint; +}; + +module.exports = Transform; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __nested_webpack_require_84747__) { + +"use strict"; + + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var Layout = __nested_webpack_require_84747__(15); +var FDLayoutConstants = __nested_webpack_require_84747__(7); +var LayoutConstants = __nested_webpack_require_84747__(0); +var IGeometry = __nested_webpack_require_84747__(8); +var IMath = __nested_webpack_require_84747__(9); + +function FDLayout() { + Layout.call(this); + + this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION; + this.idealEdgeLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; + this.springConstant = FDLayoutConstants.DEFAULT_SPRING_STRENGTH; + this.repulsionConstant = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH; + this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH; + this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH; + this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR; + this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR; + this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100; + this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL; + this.totalDisplacement = 0.0; + this.oldTotalDisplacement = 0.0; + this.maxIterations = FDLayoutConstants.MAX_ITERATIONS; +} + +FDLayout.prototype = Object.create(Layout.prototype); + +for (var prop in Layout) { + FDLayout[prop] = Layout[prop]; +} + +FDLayout.prototype.initParameters = function () { + Layout.prototype.initParameters.call(this, arguments); + + this.totalIterations = 0; + this.notAnimatedIterations = 0; + + this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION; + + this.grid = []; +}; + +FDLayout.prototype.calcIdealEdgeLengths = function () { + var edge; + var lcaDepth; + var source; + var target; + var sizeOfSourceInLca; + var sizeOfTargetInLca; + + var allEdges = this.getGraphManager().getAllEdges(); + for (var i = 0; i < allEdges.length; i++) { + edge = allEdges[i]; + + edge.idealLength = this.idealEdgeLength; + + if (edge.isInterGraph) { + source = edge.getSource(); + target = edge.getTarget(); + + sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize(); + sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize(); + + if (this.useSmartIdealEdgeLengthCalculation) { + edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE; + } + + lcaDepth = edge.getLca().getInclusionTreeDepth(); + + edge.idealLength += FDLayoutConstants.DEFAULT_EDGE_LENGTH * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth); + } + } +}; + +FDLayout.prototype.initSpringEmbedder = function () { + + var s = this.getAllNodes().length; + if (this.incremental) { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL; + } else { + if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) { + this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR)); + } else { + this.coolingFactor = 1.0; + } + this.initialCoolingFactor = this.coolingFactor; + this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT; + } + + this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations); + + this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length; + + this.repulsionRange = this.calcRepulsionRange(); +}; + +FDLayout.prototype.calcSpringForces = function () { + var lEdges = this.getAllEdges(); + var edge; + + for (var i = 0; i < lEdges.length; i++) { + edge = lEdges[i]; + + this.calcSpringForce(edge, edge.idealLength); + } +}; + +FDLayout.prototype.calcRepulsionForces = function () { + var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var i, j; + var nodeA, nodeB; + var lNodes = this.getAllNodes(); + var processedNodeSet; + + if (this.useFRGridVariant) { + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) { + this.updateGrid(); + } + + processedNodeSet = new Set(); + + // calculate repulsion forces between each nodes and its surrounding + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate); + processedNodeSet.add(nodeA); + } + } else { + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + + for (j = i + 1; j < lNodes.length; j++) { + nodeB = lNodes[j]; + + // If both nodes are not members of the same graph, skip. + if (nodeA.getOwner() != nodeB.getOwner()) { + continue; + } + + this.calcRepulsionForce(nodeA, nodeB); + } + } + } +}; + +FDLayout.prototype.calcGravitationalForces = function () { + var node; + var lNodes = this.getAllNodesToApplyGravitation(); + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + this.calcGravitationalForce(node); + } +}; + +FDLayout.prototype.moveNodes = function () { + var lNodes = this.getAllNodes(); + var node; + + for (var i = 0; i < lNodes.length; i++) { + node = lNodes[i]; + node.move(); + } +}; + +FDLayout.prototype.calcSpringForce = function (edge, idealLength) { + var sourceNode = edge.getSource(); + var targetNode = edge.getTarget(); + + var length; + var springForce; + var springForceX; + var springForceY; + + // Update edge length + if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) { + edge.updateLengthSimple(); + } else { + edge.updateLength(); + + if (edge.isOverlapingSourceAndTarget) { + return; + } + } + + length = edge.getLength(); + + if (length == 0) return; + + // Calculate spring forces + springForce = this.springConstant * (length - idealLength); + + // Project force onto x and y axes + springForceX = springForce * (edge.lengthX / length); + springForceY = springForce * (edge.lengthY / length); + + // Apply forces on the end nodes + sourceNode.springForceX += springForceX; + sourceNode.springForceY += springForceY; + targetNode.springForceX -= springForceX; + targetNode.springForceY -= springForceY; +}; + +FDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) { + var rectA = nodeA.getRect(); + var rectB = nodeB.getRect(); + var overlapAmount = new Array(2); + var clipPoints = new Array(4); + var distanceX; + var distanceY; + var distanceSquared; + var distance; + var repulsionForce; + var repulsionForceX; + var repulsionForceY; + + if (rectA.intersects(rectB)) // two nodes overlap + { + // calculate separation amount in x and y directions + IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0); + + repulsionForceX = 2 * overlapAmount[0]; + repulsionForceY = 2 * overlapAmount[1]; + + var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren); + + // Apply forces on the two nodes + nodeA.repulsionForceX -= childrenConstant * repulsionForceX; + nodeA.repulsionForceY -= childrenConstant * repulsionForceY; + nodeB.repulsionForceX += childrenConstant * repulsionForceX; + nodeB.repulsionForceY += childrenConstant * repulsionForceY; + } else // no overlap + { + // calculate distance + + if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers + { + distanceX = rectB.getCenterX() - rectA.getCenterX(); + distanceY = rectB.getCenterY() - rectA.getCenterY(); + } else // use clipping points + { + IGeometry.getIntersection(rectA, rectB, clipPoints); + + distanceX = clipPoints[2] - clipPoints[0]; + distanceY = clipPoints[3] - clipPoints[1]; + } + + // No repulsion range. FR grid variant should take care of this. + if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) { + distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST; + } + + distanceSquared = distanceX * distanceX + distanceY * distanceY; + distance = Math.sqrt(distanceSquared); + + repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; + + // Project force onto x and y axes + repulsionForceX = repulsionForce * distanceX / distance; + repulsionForceY = repulsionForce * distanceY / distance; + + // Apply forces on the two nodes + nodeA.repulsionForceX -= repulsionForceX; + nodeA.repulsionForceY -= repulsionForceY; + nodeB.repulsionForceX += repulsionForceX; + nodeB.repulsionForceY += repulsionForceY; + } +}; + +FDLayout.prototype.calcGravitationalForce = function (node) { + var ownerGraph; + var ownerCenterX; + var ownerCenterY; + var distanceX; + var distanceY; + var absDistanceX; + var absDistanceY; + var estimatedSize; + ownerGraph = node.getOwner(); + + ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2; + ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2; + distanceX = node.getCenterX() - ownerCenterX; + distanceY = node.getCenterY() - ownerCenterY; + absDistanceX = Math.abs(distanceX) + node.getWidth() / 2; + absDistanceY = Math.abs(distanceY) + node.getHeight() / 2; + + if (node.getOwner() == this.graphManager.getRoot()) // in the root graph + { + estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX; + node.gravitationForceY = -this.gravityConstant * distanceY; + } + } else // inside a compound + { + estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor; + + if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) { + node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant; + node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant; + } + } +}; + +FDLayout.prototype.isConverged = function () { + var converged; + var oscilating = false; + + if (this.totalIterations > this.maxIterations / 3) { + oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2; + } + + converged = this.totalDisplacement < this.totalDisplacementThreshold; + + this.oldTotalDisplacement = this.totalDisplacement; + + return converged || oscilating; +}; + +FDLayout.prototype.animate = function () { + if (this.animationDuringLayout && !this.isSubLayout) { + if (this.notAnimatedIterations == this.animationPeriod) { + this.update(); + this.notAnimatedIterations = 0; + } else { + this.notAnimatedIterations++; + } + } +}; + +//This method calculates the number of children (weight) for all nodes +FDLayout.prototype.calcNoOfChildrenForAllNodes = function () { + var node; + var allNodes = this.graphManager.getAllNodes(); + + for (var i = 0; i < allNodes.length; i++) { + node = allNodes[i]; + node.noOfChildren = node.getNoOfChildren(); + } +}; + +// ----------------------------------------------------------------------------- +// Section: FR-Grid Variant Repulsion Force Calculation +// ----------------------------------------------------------------------------- + +FDLayout.prototype.calcGrid = function (graph) { + + var sizeX = 0; + var sizeY = 0; + + sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange)); + sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange)); + + var grid = new Array(sizeX); + + for (var i = 0; i < sizeX; i++) { + grid[i] = new Array(sizeY); + } + + for (var i = 0; i < sizeX; i++) { + for (var j = 0; j < sizeY; j++) { + grid[i][j] = new Array(); + } + } + + return grid; +}; + +FDLayout.prototype.addNodeToGrid = function (v, left, top) { + + var startX = 0; + var finishX = 0; + var startY = 0; + var finishY = 0; + + startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange)); + finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange)); + startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange)); + finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange)); + + for (var i = startX; i <= finishX; i++) { + for (var j = startY; j <= finishY; j++) { + this.grid[i][j].push(v); + v.setGridCoordinates(startX, finishX, startY, finishY); + } + } +}; + +FDLayout.prototype.updateGrid = function () { + var i; + var nodeA; + var lNodes = this.getAllNodes(); + + this.grid = this.calcGrid(this.graphManager.getRoot()); + + // put all nodes to proper grid cells + for (i = 0; i < lNodes.length; i++) { + nodeA = lNodes[i]; + this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop()); + } +}; + +FDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) { + + if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) { + var surrounding = new Set(); + nodeA.surrounding = new Array(); + var nodeB; + var grid = this.grid; + + for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) { + for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) { + if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) { + for (var k = 0; k < grid[i][j].length; k++) { + nodeB = grid[i][j][k]; + + // If both nodes are not members of the same graph, + // or both nodes are the same, skip. + if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) { + continue; + } + + // check if the repulsion force between + // nodeA and nodeB has already been calculated + if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) { + var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2); + var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2); + + // if the distance between nodeA and nodeB + // is less then calculation range + if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) { + //then add nodeB to surrounding of nodeA + surrounding.add(nodeB); + } + } + } + } + } + } + + nodeA.surrounding = [].concat(_toConsumableArray(surrounding)); + } + for (i = 0; i < nodeA.surrounding.length; i++) { + this.calcRepulsionForce(nodeA, nodeA.surrounding[i]); + } +}; + +FDLayout.prototype.calcRepulsionRange = function () { + return 0.0; +}; + +module.exports = FDLayout; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __nested_webpack_require_100902__) { + +"use strict"; + + +var LEdge = __nested_webpack_require_100902__(1); +var FDLayoutConstants = __nested_webpack_require_100902__(7); + +function FDLayoutEdge(source, target, vEdge) { + LEdge.call(this, source, target, vEdge); + this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH; +} + +FDLayoutEdge.prototype = Object.create(LEdge.prototype); + +for (var prop in LEdge) { + FDLayoutEdge[prop] = LEdge[prop]; +} + +module.exports = FDLayoutEdge; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __nested_webpack_require_101387__) { + +"use strict"; + + +var LNode = __nested_webpack_require_101387__(3); + +function FDLayoutNode(gm, loc, size, vNode) { + // alternative constructor is handled inside LNode + LNode.call(this, gm, loc, size, vNode); + //Spring, repulsion and gravitational forces acting on this node + this.springForceX = 0; + this.springForceY = 0; + this.repulsionForceX = 0; + this.repulsionForceY = 0; + this.gravitationForceX = 0; + this.gravitationForceY = 0; + //Amount by which this node is to be moved in this iteration + this.displacementX = 0; + this.displacementY = 0; + + //Start and finish grid coordinates that this node is fallen into + this.startX = 0; + this.finishX = 0; + this.startY = 0; + this.finishY = 0; + + //Geometric neighbors of this node + this.surrounding = []; +} + +FDLayoutNode.prototype = Object.create(LNode.prototype); + +for (var prop in LNode) { + FDLayoutNode[prop] = LNode[prop]; +} + +FDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) { + this.startX = _startX; + this.finishX = _finishX; + this.startY = _startY; + this.finishY = _finishY; +}; + +module.exports = FDLayoutNode; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function DimensionD(width, height) { + this.width = 0; + this.height = 0; + if (width !== null && height !== null) { + this.height = height; + this.width = width; + } +} + +DimensionD.prototype.getWidth = function () { + return this.width; +}; + +DimensionD.prototype.setWidth = function (width) { + this.width = width; +}; + +DimensionD.prototype.getHeight = function () { + return this.height; +}; + +DimensionD.prototype.setHeight = function (height) { + this.height = height; +}; + +module.exports = DimensionD; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __nested_webpack_require_103173__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103173__(14); + +function HashMap() { + this.map = {}; + this.keys = []; +} + +HashMap.prototype.put = function (key, value) { + var theId = UniqueIDGeneretor.createID(key); + if (!this.contains(theId)) { + this.map[theId] = value; + this.keys.push(key); + } +}; + +HashMap.prototype.contains = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[key] != null; +}; + +HashMap.prototype.get = function (key) { + var theId = UniqueIDGeneretor.createID(key); + return this.map[theId]; +}; + +HashMap.prototype.keySet = function () { + return this.keys; +}; + +module.exports = HashMap; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __nested_webpack_require_103901__) { + +"use strict"; + + +var UniqueIDGeneretor = __nested_webpack_require_103901__(14); + +function HashSet() { + this.set = {}; +} +; + +HashSet.prototype.add = function (obj) { + var theId = UniqueIDGeneretor.createID(obj); + if (!this.contains(theId)) this.set[theId] = obj; +}; + +HashSet.prototype.remove = function (obj) { + delete this.set[UniqueIDGeneretor.createID(obj)]; +}; + +HashSet.prototype.clear = function () { + this.set = {}; +}; + +HashSet.prototype.contains = function (obj) { + return this.set[UniqueIDGeneretor.createID(obj)] == obj; +}; + +HashSet.prototype.isEmpty = function () { + return this.size() === 0; +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +//concats this.set to the given list +HashSet.prototype.addAllTo = function (list) { + var keys = Object.keys(this.set); + var length = keys.length; + for (var i = 0; i < length; i++) { + list.push(this.set[keys[i]]); + } +}; + +HashSet.prototype.size = function () { + return Object.keys(this.set).length; +}; + +HashSet.prototype.addAll = function (list) { + var s = list.length; + for (var i = 0; i < s; i++) { + var v = list[i]; + this.add(v); + } +}; + +module.exports = HashSet; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __nested_webpack_require_105138__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * A classic Quicksort algorithm with Hoare's partition + * - Works also on LinkedList objects + * + * Copyright: i-Vis Research Group, Bilkent University, 2007 - present + */ + +var LinkedList = __nested_webpack_require_105138__(11); + +var Quicksort = function () { + function Quicksort(A, compareFunction) { + _classCallCheck(this, Quicksort); + + if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction; + + var length = void 0; + if (A instanceof LinkedList) length = A.size();else length = A.length; + + this._quicksort(A, 0, length - 1); + } + + _createClass(Quicksort, [{ + key: '_quicksort', + value: function _quicksort(A, p, r) { + if (p < r) { + var q = this._partition(A, p, r); + this._quicksort(A, p, q); + this._quicksort(A, q + 1, r); + } + } + }, { + key: '_partition', + value: function _partition(A, p, r) { + var x = this._get(A, p); + var i = p; + var j = r; + while (true) { + while (this.compareFunction(x, this._get(A, j))) { + j--; + }while (this.compareFunction(this._get(A, i), x)) { + i++; + }if (i < j) { + this._swap(A, i, j); + i++; + j--; + } else return j; + } + } + }, { + key: '_get', + value: function _get(object, index) { + if (object instanceof LinkedList) return object.get_object_at(index);else return object[index]; + } + }, { + key: '_set', + value: function _set(object, index, value) { + if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value; + } + }, { + key: '_swap', + value: function _swap(A, i, j) { + var temp = this._get(A, i); + this._set(A, i, this._get(A, j)); + this._set(A, j, temp); + } + }, { + key: '_defaultCompareFunction', + value: function _defaultCompareFunction(a, b) { + return b > a; + } + }]); + + return Quicksort; +}(); + +module.exports = Quicksort; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string + * sequences by S.B.Needleman and C.D.Wunsch (1970). + * + * Aside from the inputs, you can assign the scores for, + * - Match: The two characters at the current index are same. + * - Mismatch: The two characters at the current index are different. + * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string. + */ + +var NeedlemanWunsch = function () { + function NeedlemanWunsch(sequence1, sequence2) { + var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; + var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1; + + _classCallCheck(this, NeedlemanWunsch); + + this.sequence1 = sequence1; + this.sequence2 = sequence2; + this.match_score = match_score; + this.mismatch_penalty = mismatch_penalty; + this.gap_penalty = gap_penalty; + + // Just the remove redundancy + this.iMax = sequence1.length + 1; + this.jMax = sequence2.length + 1; + + // Grid matrix of scores + this.grid = new Array(this.iMax); + for (var i = 0; i < this.iMax; i++) { + this.grid[i] = new Array(this.jMax); + + for (var j = 0; j < this.jMax; j++) { + this.grid[i][j] = 0; + } + } + + // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions) + this.tracebackGrid = new Array(this.iMax); + for (var _i = 0; _i < this.iMax; _i++) { + this.tracebackGrid[_i] = new Array(this.jMax); + + for (var _j = 0; _j < this.jMax; _j++) { + this.tracebackGrid[_i][_j] = [null, null, null]; + } + } + + // The aligned sequences (return multiple possibilities) + this.alignments = []; + + // Final alignment score + this.score = -1; + + // Calculate scores and tracebacks + this.computeGrids(); + } + + _createClass(NeedlemanWunsch, [{ + key: "getScore", + value: function getScore() { + return this.score; + } + }, { + key: "getAlignments", + value: function getAlignments() { + return this.alignments; + } + + // Main dynamic programming procedure + + }, { + key: "computeGrids", + value: function computeGrids() { + // Fill in the first row + for (var j = 1; j < this.jMax; j++) { + this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty; + this.tracebackGrid[0][j] = [false, false, true]; + } + + // Fill in the first column + for (var i = 1; i < this.iMax; i++) { + this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty; + this.tracebackGrid[i][0] = [false, true, false]; + } + + // Fill the rest of the grid + for (var _i2 = 1; _i2 < this.iMax; _i2++) { + for (var _j2 = 1; _j2 < this.jMax; _j2++) { + // Find the max score(s) among [`Diag`, `Up`, `Left`] + var diag = void 0; + if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty; + + var up = this.grid[_i2 - 1][_j2] + this.gap_penalty; + var left = this.grid[_i2][_j2 - 1] + this.gap_penalty; + + // If there exists multiple max values, capture them for multiple paths + var maxOf = [diag, up, left]; + var indices = this.arrayAllMaxIndexes(maxOf); + + // Update Grids + this.grid[_i2][_j2] = maxOf[indices[0]]; + this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)]; + } + } + + // Update alignment score + this.score = this.grid[this.iMax - 1][this.jMax - 1]; + } + + // Gets all possible valid sequence combinations + + }, { + key: "alignmentTraceback", + value: function alignmentTraceback() { + var inProcessAlignments = []; + + inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length], + seq1: "", + seq2: "" + }); + + while (inProcessAlignments[0]) { + var current = inProcessAlignments[0]; + var directions = this.tracebackGrid[current.pos[0]][current.pos[1]]; + + if (directions[0]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + if (directions[1]) { + inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]], + seq1: this.sequence1[current.pos[0] - 1] + current.seq1, + seq2: '-' + current.seq2 + }); + } + if (directions[2]) { + inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1], + seq1: '-' + current.seq1, + seq2: this.sequence2[current.pos[1] - 1] + current.seq2 + }); + } + + if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1, + sequence2: current.seq2 + }); + + inProcessAlignments.shift(); + } + + return this.alignments; + } + + // Helper Functions + + }, { + key: "getAllIndexes", + value: function getAllIndexes(arr, val) { + var indexes = [], + i = -1; + while ((i = arr.indexOf(val, i + 1)) !== -1) { + indexes.push(i); + } + return indexes; + } + }, { + key: "arrayAllMaxIndexes", + value: function arrayAllMaxIndexes(array) { + return this.getAllIndexes(array, Math.max.apply(null, array)); + } + }]); + + return NeedlemanWunsch; +}(); + +module.exports = NeedlemanWunsch; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __nested_webpack_require_115611__) { + +"use strict"; + + +var layoutBase = function layoutBase() { + return; +}; + +layoutBase.FDLayout = __nested_webpack_require_115611__(18); +layoutBase.FDLayoutConstants = __nested_webpack_require_115611__(7); +layoutBase.FDLayoutEdge = __nested_webpack_require_115611__(19); +layoutBase.FDLayoutNode = __nested_webpack_require_115611__(20); +layoutBase.DimensionD = __nested_webpack_require_115611__(21); +layoutBase.HashMap = __nested_webpack_require_115611__(22); +layoutBase.HashSet = __nested_webpack_require_115611__(23); +layoutBase.IGeometry = __nested_webpack_require_115611__(8); +layoutBase.IMath = __nested_webpack_require_115611__(9); +layoutBase.Integer = __nested_webpack_require_115611__(10); +layoutBase.Point = __nested_webpack_require_115611__(12); +layoutBase.PointD = __nested_webpack_require_115611__(4); +layoutBase.RandomSeed = __nested_webpack_require_115611__(16); +layoutBase.RectangleD = __nested_webpack_require_115611__(13); +layoutBase.Transform = __nested_webpack_require_115611__(17); +layoutBase.UniqueIDGeneretor = __nested_webpack_require_115611__(14); +layoutBase.Quicksort = __nested_webpack_require_115611__(24); +layoutBase.LinkedList = __nested_webpack_require_115611__(11); +layoutBase.LGraphObject = __nested_webpack_require_115611__(2); +layoutBase.LGraph = __nested_webpack_require_115611__(5); +layoutBase.LEdge = __nested_webpack_require_115611__(1); +layoutBase.LGraphManager = __nested_webpack_require_115611__(6); +layoutBase.LNode = __nested_webpack_require_115611__(3); +layoutBase.Layout = __nested_webpack_require_115611__(15); +layoutBase.LayoutConstants = __nested_webpack_require_115611__(0); +layoutBase.NeedlemanWunsch = __nested_webpack_require_115611__(25); + +module.exports = layoutBase; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function Emitter() { + this.listeners = []; +} + +var p = Emitter.prototype; + +p.addListener = function (event, callback) { + this.listeners.push({ + event: event, + callback: callback + }); +}; + +p.removeListener = function (event, callback) { + for (var i = this.listeners.length; i >= 0; i--) { + var l = this.listeners[i]; + + if (l.event === event && l.callback === callback) { + this.listeners.splice(i, 1); + } + } +}; + +p.emit = function (event, data) { + for (var i = 0; i < this.listeners.length; i++) { + var l = this.listeners[i]; + + if (event === l.event) { + l.callback(data); + } + } +}; + +module.exports = Emitter; + +/***/ }) +/******/ ]); +}); + +/***/ }), + +/***/ 1989: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var hashClear = __webpack_require__(51789), + hashDelete = __webpack_require__(80401), + hashGet = __webpack_require__(57667), + hashHas = __webpack_require__(59026), + hashSet = __webpack_require__(81866); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; + + +/***/ }), + +/***/ 38407: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var listCacheClear = __webpack_require__(27040), + listCacheDelete = __webpack_require__(14125), + listCacheGet = __webpack_require__(82117), + listCacheHas = __webpack_require__(67518), + listCacheSet = __webpack_require__(54705); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; + + +/***/ }), + +/***/ 57071: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getNative = __webpack_require__(10852), + root = __webpack_require__(55639); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; + + +/***/ }), + +/***/ 83369: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var mapCacheClear = __webpack_require__(24785), + mapCacheDelete = __webpack_require__(11285), + mapCacheGet = __webpack_require__(96000), + mapCacheHas = __webpack_require__(49916), + mapCacheSet = __webpack_require__(95265); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; + + +/***/ }), + +/***/ 62705: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(55639); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), + +/***/ 29932: +/***/ ((module) => { + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; + + +/***/ }), + +/***/ 34865: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseAssignValue = __webpack_require__(89465), + eq = __webpack_require__(77813); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; + + +/***/ }), + +/***/ 18470: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var eq = __webpack_require__(77813); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; + + +/***/ }), + +/***/ 89465: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var defineProperty = __webpack_require__(38777); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; + + +/***/ }), + +/***/ 97786: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var castPath = __webpack_require__(71811), + toKey = __webpack_require__(40327); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + + +/***/ }), + +/***/ 44239: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(62705), + getRawTag = __webpack_require__(89607), + objectToString = __webpack_require__(2333); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), + +/***/ 28458: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isFunction = __webpack_require__(23560), + isMasked = __webpack_require__(15346), + isObject = __webpack_require__(13218), + toSource = __webpack_require__(80346); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; + + +/***/ }), + +/***/ 10611: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assignValue = __webpack_require__(34865), + castPath = __webpack_require__(71811), + isIndex = __webpack_require__(65776), + isObject = __webpack_require__(13218), + toKey = __webpack_require__(40327); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; + + +/***/ }), + +/***/ 80531: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(62705), + arrayMap = __webpack_require__(29932), + isArray = __webpack_require__(1469), + isSymbol = __webpack_require__(33448); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; + + +/***/ }), + +/***/ 27561: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var trimmedEndIndex = __webpack_require__(67990); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +module.exports = baseTrim; + + +/***/ }), + +/***/ 71811: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isArray = __webpack_require__(1469), + isKey = __webpack_require__(15403), + stringToPath = __webpack_require__(55514), + toString = __webpack_require__(79833); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; + + +/***/ }), + +/***/ 278: +/***/ ((module) => { + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; + + +/***/ }), + +/***/ 14429: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(55639); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + + +/***/ }), + +/***/ 38777: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getNative = __webpack_require__(10852); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + + +/***/ }), + +/***/ 31957: +/***/ ((module) => { + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; + + +/***/ }), + +/***/ 45050: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isKeyable = __webpack_require__(37019); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; + + +/***/ }), + +/***/ 10852: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseIsNative = __webpack_require__(28458), + getValue = __webpack_require__(47801); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; + + +/***/ }), + +/***/ 89607: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Symbol = __webpack_require__(62705); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), + +/***/ 47801: +/***/ ((module) => { + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; + + +/***/ }), + +/***/ 51789: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; + + +/***/ }), + +/***/ 80401: +/***/ ((module) => { + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; + + +/***/ }), + +/***/ 57667: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; + + +/***/ }), + +/***/ 59026: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; + + +/***/ }), + +/***/ 81866: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var nativeCreate = __webpack_require__(94536); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; + + +/***/ }), + +/***/ 65776: +/***/ ((module) => { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; + + +/***/ }), + +/***/ 15403: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isArray = __webpack_require__(1469), + isSymbol = __webpack_require__(33448); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; + + +/***/ }), + +/***/ 37019: +/***/ ((module) => { + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; + + +/***/ }), + +/***/ 15346: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var coreJsData = __webpack_require__(14429); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; + + +/***/ }), + +/***/ 27040: +/***/ ((module) => { + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; + + +/***/ }), + +/***/ 14125: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; + + +/***/ }), + +/***/ 82117: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; + + +/***/ }), + +/***/ 67518: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; + + +/***/ }), + +/***/ 54705: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var assocIndexOf = __webpack_require__(18470); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; + + +/***/ }), + +/***/ 24785: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Hash = __webpack_require__(1989), + ListCache = __webpack_require__(38407), + Map = __webpack_require__(57071); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; + + +/***/ }), + +/***/ 11285: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; + + +/***/ }), + +/***/ 96000: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; + + +/***/ }), + +/***/ 49916: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; + + +/***/ }), + +/***/ 95265: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getMapData = __webpack_require__(45050); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; + + +/***/ }), + +/***/ 24523: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var memoize = __webpack_require__(88306); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; + + +/***/ }), + +/***/ 94536: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getNative = __webpack_require__(10852); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; + + +/***/ }), + +/***/ 2333: +/***/ ((module) => { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), + +/***/ 55639: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var freeGlobal = __webpack_require__(31957); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), + +/***/ 55514: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var memoizeCapped = __webpack_require__(24523); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + + +/***/ }), + +/***/ 40327: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isSymbol = __webpack_require__(33448); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; + + +/***/ }), + +/***/ 80346: +/***/ ((module) => { + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; + + +/***/ }), + +/***/ 67990: +/***/ ((module) => { + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +module.exports = trimmedEndIndex; + + +/***/ }), + +/***/ 23279: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(13218), + now = __webpack_require__(7771), + toNumber = __webpack_require__(14841); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; + + +/***/ }), + +/***/ 77813: +/***/ ((module) => { + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; + + +/***/ }), + +/***/ 27361: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGet = __webpack_require__(97786); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + + +/***/ }), + +/***/ 1469: +/***/ ((module) => { + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; + + +/***/ }), + +/***/ 23560: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGetTag = __webpack_require__(44239), + isObject = __webpack_require__(13218); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + + +/***/ }), + +/***/ 13218: +/***/ ((module) => { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), + +/***/ 37005: +/***/ ((module) => { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), + +/***/ 33448: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseGetTag = __webpack_require__(44239), + isObjectLike = __webpack_require__(37005); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), + +/***/ 88306: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var MapCache = __webpack_require__(83369); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +module.exports = memoize; + + +/***/ }), + +/***/ 7771: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var root = __webpack_require__(55639); + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return root.Date.now(); +}; + +module.exports = now; + + +/***/ }), + +/***/ 36968: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseSet = __webpack_require__(10611); + +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); +} + +module.exports = set; + + +/***/ }), + +/***/ 14841: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseTrim = __webpack_require__(27561), + isObject = __webpack_require__(13218), + isSymbol = __webpack_require__(33448); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = toNumber; + + +/***/ }), + +/***/ 30084: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var arrayMap = __webpack_require__(29932), + copyArray = __webpack_require__(278), + isArray = __webpack_require__(1469), + isSymbol = __webpack_require__(33448), + stringToPath = __webpack_require__(55514), + toKey = __webpack_require__(40327), + toString = __webpack_require__(79833); + +/** + * Converts `value` to a property path array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {*} value The value to convert. + * @returns {Array} Returns the new property path array. + * @example + * + * _.toPath('a.b.c'); + * // => ['a', 'b', 'c'] + * + * _.toPath('a[0].b.c'); + * // => ['a', '0', 'b', 'c'] + */ +function toPath(value) { + if (isArray(value)) { + return arrayMap(value, toKey); + } + return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +} + +module.exports = toPath; + + +/***/ }), + +/***/ 79833: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var baseToString = __webpack_require__(80531); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +module.exports = toString; + + +/***/ }), + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 7497: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28758); +/* harmony import */ var cytoscape__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59058); +/* harmony import */ var cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(14607); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64218); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39164); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(91619); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(12281); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7201); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 13], $V2 = [1, 12], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 20], $V6 = [1, 19], $V7 = [6, 7, 8], $V8 = [1, 26], $V9 = [1, 24], $Va = [1, 25], $Vb = [6, 7, 11], $Vc = [1, 6, 13, 15, 16, 19, 22], $Vd = [1, 33], $Ve = [1, 34], $Vf = [1, 6, 7, 11, 13, 15, 16, 19, 22]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mindMap": 4, "spaceLines": 5, "SPACELINE": 6, "NL": 7, "MINDMAP": 8, "document": 9, "stop": 10, "EOF": 11, "statement": 12, "SPACELIST": 13, "node": 14, "ICON": 15, "CLASS": 16, "nodeWithId": 17, "nodeWithoutId": 18, "NODE_DSTART": 19, "NODE_DESCR": 20, "NODE_DEND": 21, "NODE_ID": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "SPACELINE", 7: "NL", 8: "MINDMAP", 11: "EOF", 13: "SPACELIST", 15: "ICON", 16: "CLASS", 19: "NODE_DSTART", 20: "NODE_DESCR", 21: "NODE_DEND", 22: "NODE_ID" }, + productions_: [0, [3, 1], [3, 2], [5, 1], [5, 2], [5, 2], [4, 2], [4, 3], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [9, 3], [9, 2], [12, 2], [12, 2], [12, 2], [12, 1], [12, 1], [12, 1], [12, 1], [12, 1], [14, 1], [14, 1], [18, 3], [17, 1], [17, 4]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 6: + case 7: + return yy; + case 8: + yy.getLogger().trace("Stop NL "); + break; + case 9: + yy.getLogger().trace("Stop EOF "); + break; + case 11: + yy.getLogger().trace("Stop NL2 "); + break; + case 12: + yy.getLogger().trace("Stop EOF2 "); + break; + case 15: + yy.getLogger().info("Node: ", $$[$0].id); + yy.addNode($$[$0 - 1].length, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 16: + yy.getLogger().trace("Icon: ", $$[$0]); + yy.decorateNode({ icon: $$[$0] }); + break; + case 17: + case 21: + yy.decorateNode({ class: $$[$0] }); + break; + case 18: + yy.getLogger().trace("SPACELIST"); + break; + case 19: + yy.getLogger().trace("Node: ", $$[$0].id); + yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); + break; + case 20: + yy.decorateNode({ icon: $$[$0] }); + break; + case 25: + yy.getLogger().trace("node found ..", $$[$0 - 2]); + this.$ = { id: $$[$0 - 1], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + case 26: + this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; + break; + case 27: + yy.getLogger().trace("node found ..", $$[$0 - 3]); + this.$ = { id: $$[$0 - 3], descr: $$[$0 - 1], type: yy.getType($$[$0 - 2], $$[$0]) }; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 8: $V0 }, { 1: [3] }, { 1: [2, 1] }, { 4: 6, 6: [1, 7], 7: [1, 8], 8: $V0 }, { 6: $V1, 7: [1, 10], 9: 9, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($V7, [2, 3]), { 1: [2, 2] }, o($V7, [2, 4]), o($V7, [2, 5]), { 1: [2, 6], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V1, 9: 22, 12: 11, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, { 6: $V8, 7: $V9, 10: 23, 11: $Va }, o($Vb, [2, 22], { 17: 17, 18: 18, 14: 27, 15: [1, 28], 16: [1, 29], 19: $V5, 22: $V6 }), o($Vb, [2, 18]), o($Vb, [2, 19]), o($Vb, [2, 20]), o($Vb, [2, 21]), o($Vb, [2, 23]), o($Vb, [2, 24]), o($Vb, [2, 26], { 19: [1, 30] }), { 20: [1, 31] }, { 6: $V8, 7: $V9, 10: 32, 11: $Va }, { 1: [2, 7], 6: $V1, 12: 21, 13: $V2, 14: 14, 15: $V3, 16: $V4, 17: 17, 18: 18, 19: $V5, 22: $V6 }, o($Vc, [2, 14], { 7: $Vd, 11: $Ve }), o($Vf, [2, 8]), o($Vf, [2, 9]), o($Vf, [2, 10]), o($Vb, [2, 15]), o($Vb, [2, 16]), o($Vb, [2, 17]), { 20: [1, 35] }, { 21: [1, 36] }, o($Vc, [2, 13], { 7: $Vd, 11: $Ve }), o($Vf, [2, 11]), o($Vf, [2, 12]), { 21: [1, 37] }, o($Vb, [2, 25]), o($Vb, [2, 27])], + defaultActions: { 2: [2, 1], 6: [2, 2] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + yy.getLogger().trace("Found comment", yy_.yytext); + return 6; + case 1: + return 8; + case 2: + this.begin("CLASS"); + break; + case 3: + this.popState(); + return 16; + case 4: + this.popState(); + break; + case 5: + yy.getLogger().trace("Begin icon"); + this.begin("ICON"); + break; + case 6: + yy.getLogger().trace("SPACELINE"); + return 6; + case 7: + return 7; + case 8: + return 15; + case 9: + yy.getLogger().trace("end icon"); + this.popState(); + break; + case 10: + yy.getLogger().trace("Exploding node"); + this.begin("NODE"); + return 19; + case 11: + yy.getLogger().trace("Cloud"); + this.begin("NODE"); + return 19; + case 12: + yy.getLogger().trace("Explosion Bang"); + this.begin("NODE"); + return 19; + case 13: + yy.getLogger().trace("Cloud Bang"); + this.begin("NODE"); + return 19; + case 14: + this.begin("NODE"); + return 19; + case 15: + this.begin("NODE"); + return 19; + case 16: + this.begin("NODE"); + return 19; + case 17: + this.begin("NODE"); + return 19; + case 18: + return 13; + case 19: + return 22; + case 20: + return 11; + case 21: + this.begin("NSTR2"); + break; + case 22: + return "NODE_DESCR"; + case 23: + this.popState(); + break; + case 24: + yy.getLogger().trace("Starting NSTR"); + this.begin("NSTR"); + break; + case 25: + yy.getLogger().trace("description:", yy_.yytext); + return "NODE_DESCR"; + case 26: + this.popState(); + break; + case 27: + this.popState(); + yy.getLogger().trace("node end ))"); + return "NODE_DEND"; + case 28: + this.popState(); + yy.getLogger().trace("node end )"); + return "NODE_DEND"; + case 29: + this.popState(); + yy.getLogger().trace("node end ...", yy_.yytext); + return "NODE_DEND"; + case 30: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 31: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 32: + this.popState(); + yy.getLogger().trace("node end (-"); + return "NODE_DEND"; + case 33: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 34: + this.popState(); + yy.getLogger().trace("node end (("); + return "NODE_DEND"; + case 35: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + case 36: + yy.getLogger().trace("Long description:", yy_.yytext); + return 20; + } + }, + rules: [/^(?:\s*%%.*)/i, /^(?:mindmap\b)/i, /^(?::::)/i, /^(?:.+)/i, /^(?:\n)/i, /^(?:::icon\()/i, /^(?:[\s]+[\n])/i, /^(?:[\n]+)/i, /^(?:[^\)]+)/i, /^(?:\))/i, /^(?:-\))/i, /^(?:\(-)/i, /^(?:\)\))/i, /^(?:\))/i, /^(?:\(\()/i, /^(?:\{\{)/i, /^(?:\()/i, /^(?:\[)/i, /^(?:[\s]+)/i, /^(?:[^\(\[\n\)\{\}]+)/i, /^(?:$)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:[^"]+)/i, /^(?:["])/i, /^(?:[\)]\))/i, /^(?:[\)])/i, /^(?:[\]])/i, /^(?:\}\})/i, /^(?:\(-)/i, /^(?:-\))/i, /^(?:\(\()/i, /^(?:\()/i, /^(?:[^\)\]\(\}]+)/i, /^(?:.+(?!\(\())/i], + conditions: { "CLASS": { "rules": [3, 4], "inclusive": false }, "ICON": { "rules": [8, 9], "inclusive": false }, "NSTR2": { "rules": [22, 23], "inclusive": false }, "NSTR": { "rules": [25, 26], "inclusive": false }, "NODE": { "rules": [21, 24, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let nodes = []; +let cnt = 0; +let elements = {}; +const clear = () => { + nodes = []; + cnt = 0; + elements = {}; +}; +const getParent = function(level) { + for (let i = nodes.length - 1; i >= 0; i--) { + if (nodes[i].level < level) { + return nodes[i]; + } + } + return null; +}; +const getMindmap = () => { + return nodes.length > 0 ? nodes[0] : null; +}; +const addNode = (level, id, descr, type) => { + var _a, _b; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("addNode", level, id, descr, type); + const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)(); + let padding = ((_a = conf.mindmap) == null ? void 0 : _a.padding) ?? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.A.mindmap.padding; + switch (type) { + case nodeType.ROUNDED_RECT: + case nodeType.RECT: + case nodeType.HEXAGON: + padding *= 2; + } + const node = { + id: cnt++, + nodeId: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.d)(id, conf), + level, + descr: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.d)(descr, conf), + type, + children: [], + width: ((_b = conf.mindmap) == null ? void 0 : _b.maxNodeWidth) ?? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.A.mindmap.maxNodeWidth, + padding + }; + const parent = getParent(level); + if (parent) { + parent.children.push(node); + nodes.push(node); + } else { + if (nodes.length === 0) { + nodes.push(node); + } else { + throw new Error( + 'There can be only one root. No parent could be found for ("' + node.descr + '")' + ); + } + } +}; +const nodeType = { + DEFAULT: 0, + NO_BORDER: 0, + ROUNDED_RECT: 1, + RECT: 2, + CIRCLE: 3, + CLOUD: 4, + BANG: 5, + HEXAGON: 6 +}; +const getType = (startStr, endStr) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("In get type", startStr, endStr); + switch (startStr) { + case "[": + return nodeType.RECT; + case "(": + return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; + case "((": + return nodeType.CIRCLE; + case ")": + return nodeType.CLOUD; + case "))": + return nodeType.BANG; + case "{{": + return nodeType.HEXAGON; + default: + return nodeType.DEFAULT; + } +}; +const setElementForId = (id, element) => { + elements[id] = element; +}; +const decorateNode = (decoration) => { + if (!decoration) { + return; + } + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)(); + const node = nodes[nodes.length - 1]; + if (decoration.icon) { + node.icon = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.d)(decoration.icon, config); + } + if (decoration.class) { + node.class = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.d)(decoration.class, config); + } +}; +const type2Str = (type) => { + switch (type) { + case nodeType.DEFAULT: + return "no-border"; + case nodeType.RECT: + return "rect"; + case nodeType.ROUNDED_RECT: + return "rounded-rect"; + case nodeType.CIRCLE: + return "circle"; + case nodeType.CLOUD: + return "cloud"; + case nodeType.BANG: + return "bang"; + case nodeType.HEXAGON: + return "hexgon"; + default: + return "no-border"; + } +}; +const getLogger = () => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l; +const getElementById = (id) => elements[id]; +const db = { + clear, + addNode, + getMindmap, + nodeType, + getType, + setElementForId, + decorateNode, + type2Str, + getLogger, + getElementById +}; +const db$1 = db; +const MAX_SECTIONS = 12; +const defaultBkg = function(db2, elem, node, section) { + const rd = 5; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( + "d", + `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${node.width - 2 * rd} q5,0 5,5 v${node.height - rd} H0 Z` + ); + elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node.height).attr("x2", node.width).attr("y2", node.height); +}; +const rectBkg = function(db2, elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("height", node.height).attr("width", node.width); +}; +const cloudBkg = function(db2, elem, node) { + const w = node.width; + const h = node.height; + const r1 = 0.15 * w; + const r2 = 0.25 * w; + const r3 = 0.35 * w; + const r4 = 0.2 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( + "d", + `M0 0 a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1} + a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1} + a${r2},${r2} 1 0,1 ${w * 0.35},${1 * w * 0.2} + + a${r1},${r1} 1 0,1 ${w * 0.15},${1 * h * 0.35} + a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${1 * h * 0.65} + + a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15} + a${r3},${r3} 1 0,1 ${-1 * w * 0.5},${0} + a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15} + + a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35} + a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65} + + H0 V0 Z` + ); +}; +const bangBkg = function(db2, elem, node) { + const w = node.width; + const h = node.height; + const r = 0.15 * w; + elem.append("path").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr( + "d", + `M0 0 a${r},${r} 1 0,0 ${w * 0.25},${-1 * h * 0.1} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${0} + a${r},${r} 1 0,0 ${w * 0.25},${1 * h * 0.1} + + a${r},${r} 1 0,0 ${w * 0.15},${1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${1 * h * 0.34} + a${r},${r} 1 0,0 ${-1 * w * 0.15},${1 * h * 0.33} + + a${r},${r} 1 0,0 ${-1 * w * 0.25},${h * 0.15} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${0} + a${r},${r} 1 0,0 ${-1 * w * 0.25},${-1 * h * 0.15} + + a${r},${r} 1 0,0 ${-1 * w * 0.1},${-1 * h * 0.33} + a${r * 0.8},${r * 0.8} 1 0,0 ${0},${-1 * h * 0.34} + a${r},${r} 1 0,0 ${w * 0.1},${-1 * h * 0.33} + + H0 V0 Z` + ); +}; +const circleBkg = function(db2, elem, node) { + elem.append("circle").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("r", node.width / 2); +}; +function insertPolygonShape(parent, w, h, points, node) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + (node.width - w) / 2 + ", " + h + ")"); +} +const hexagonBkg = function(_db, elem, node) { + const h = node.height; + const f = 4; + const m = h / f; + const w = node.width - node.padding + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + insertPolygonShape(elem, w, h, points, node); +}; +const roundedRectBkg = function(db2, elem, node) { + elem.append("rect").attr("id", "node-" + node.id).attr("class", "node-bkg node-" + db2.type2Str(node.type)).attr("height", node.height).attr("rx", node.padding).attr("ry", node.padding).attr("width", node.width); +}; +const drawNode = function(db2, elem, node, fullSection, conf) { + const htmlLabels = conf.htmlLabels; + const section = fullSection % (MAX_SECTIONS - 1); + const nodeElem = elem.append("g"); + node.section = section; + let sectionClass = "section-" + section; + if (section < 0) { + sectionClass += " section-root"; + } + nodeElem.attr("class", (node.class ? node.class + " " : "") + "mindmap-node " + sectionClass); + const bkgElem = nodeElem.append("g"); + const textElem = nodeElem.append("g"); + const description = node.descr.replace(/(<br\/*>)/g, "\n"); + (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_7__.a)(textElem, description, { + useHtmlLabels: htmlLabels, + width: node.width, + classes: "mindmap-node-label" + }); + if (!htmlLabels) { + textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); + } + const bbox = textElem.node().getBBox(); + const [fontSize] = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.C)(conf.fontSize); + node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding; + node.width = bbox.width + 2 * node.padding; + if (node.icon) { + if (node.type === db2.nodeType.CIRCLE) { + node.height += 50; + node.width += 50; + const icon = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node.width).attr("style", "text-align: center;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + node.width / 2 + ", " + (node.height / 2 - 1.5 * node.padding) + ")" + ); + } else { + node.width += 50; + const orgHeight = node.height; + node.height = Math.max(orgHeight, 60); + const heightDiff = Math.abs(node.height - orgHeight); + const icon = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); + icon.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node.icon); + textElem.attr( + "transform", + "translate(" + (25 + node.width / 2) + ", " + (heightDiff / 2 + node.padding / 2) + ")" + ); + } + } else { + if (!htmlLabels) { + const dx = node.width / 2; + const dy = node.padding / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } else { + const dx = (node.width - bbox.width) / 2; + const dy = (node.height - bbox.height) / 2; + textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); + } + } + switch (node.type) { + case db2.nodeType.DEFAULT: + defaultBkg(db2, bkgElem, node, section); + break; + case db2.nodeType.ROUNDED_RECT: + roundedRectBkg(db2, bkgElem, node); + break; + case db2.nodeType.RECT: + rectBkg(db2, bkgElem, node); + break; + case db2.nodeType.CIRCLE: + bkgElem.attr("transform", "translate(" + node.width / 2 + ", " + +node.height / 2 + ")"); + circleBkg(db2, bkgElem, node); + break; + case db2.nodeType.CLOUD: + cloudBkg(db2, bkgElem, node); + break; + case db2.nodeType.BANG: + bangBkg(db2, bkgElem, node); + break; + case db2.nodeType.HEXAGON: + hexagonBkg(db2, bkgElem, node); + break; + } + db2.setElementForId(node.id, nodeElem); + return node.height; +}; +const positionNode = function(db2, node) { + const nodeElem = db2.getElementById(node.id); + const x = node.x || 0; + const y = node.y || 0; + nodeElem.attr("transform", "translate(" + x + "," + y + ")"); +}; +cytoscape__WEBPACK_IMPORTED_MODULE_0__.use(cytoscape_cose_bilkent__WEBPACK_IMPORTED_MODULE_1__); +function drawNodes(db2, svg, mindmap, section, conf) { + drawNode(db2, svg, mindmap, section, conf); + if (mindmap.children) { + mindmap.children.forEach((child, index) => { + drawNodes(db2, svg, child, section < 0 ? index : section, conf); + }); + } +} +function drawEdges(edgesEl, cy) { + cy.edges().map((edge, id) => { + const data = edge.data(); + if (edge[0]._private.bodyBounds) { + const bounds = edge[0]._private.rscratch; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.trace("Edge: ", id, data); + edgesEl.insert("path").attr( + "d", + `M ${bounds.startX},${bounds.startY} L ${bounds.midX},${bounds.midY} L${bounds.endX},${bounds.endY} ` + ).attr("class", "edge section-edge-" + data.section + " edge-depth-" + data.depth); + } + }); +} +function addNodes(mindmap, cy, conf, level) { + cy.add({ + group: "nodes", + data: { + id: mindmap.id.toString(), + labelText: mindmap.descr, + height: mindmap.height, + width: mindmap.width, + level, + nodeId: mindmap.id, + padding: mindmap.padding, + type: mindmap.type + }, + position: { + x: mindmap.x, + y: mindmap.y + } + }); + if (mindmap.children) { + mindmap.children.forEach((child) => { + addNodes(child, cy, conf, level + 1); + cy.add({ + group: "edges", + data: { + id: `${mindmap.id}_${child.id}`, + source: mindmap.id, + target: child.id, + depth: level, + section: child.section + } + }); + }); + } +} +function layoutMindmap(node, conf) { + return new Promise((resolve) => { + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_2__/* .select */ .Ys)("body").append("div").attr("id", "cy").attr("style", "display:none"); + const cy = cytoscape__WEBPACK_IMPORTED_MODULE_0__({ + container: document.getElementById("cy"), + // container to render in + style: [ + { + selector: "edge", + style: { + "curve-style": "bezier" + } + } + ] + }); + renderEl.remove(); + addNodes(node, cy, conf, 0); + cy.nodes().forEach(function(n) { + n.layoutDimensions = () => { + const data = n.data(); + return { w: data.width, h: data.height }; + }; + }); + cy.layout({ + name: "cose-bilkent", + // @ts-ignore Types for cose-bilkent are not correct? + quality: "proof", + styleEnabled: false, + animate: false + }).run(); + cy.ready((e) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Ready", e); + resolve(cy); + }); + }); +} +function positionNodes(db2, cy) { + cy.nodes().map((node, id) => { + const data = node.data(); + data.x = node.position().x; + data.y = node.position().y; + positionNode(db2, data); + const el = db2.getElementById(data.nodeId); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Id:", id, "Position: (", node.position().x, ", ", node.position().y, ")", data); + el.attr( + "transform", + `translate(${node.position().x - data.width / 2}, ${node.position().y - data.height / 2})` + ); + el.attr("attr", `apa-${id})`); + }); +} +const draw = async (text, id, _version, diagObj) => { + var _a, _b; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Rendering mindmap diagram\n" + text); + const db2 = diagObj.db; + const mm = db2.getMindmap(); + if (!mm) { + return; + } + const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)(); + conf.htmlLabels = false; + const svg = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.z)(id); + const edgesElem = svg.append("g"); + edgesElem.attr("class", "mindmap-edges"); + const nodesElem = svg.append("g"); + nodesElem.attr("class", "mindmap-nodes"); + drawNodes(db2, nodesElem, mm, -1, conf); + const cy = await layoutMindmap(mm, conf); + drawEdges(edgesElem, cy); + positionNodes(db2, cy); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.o)( + void 0, + svg, + ((_a = conf.mindmap) == null ? void 0 : _a.padding) ?? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.A.mindmap.padding, + ((_b = conf.mindmap) == null ? void 0 : _b.useMaxWidth) ?? _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.A.mindmap.useMaxWidth + ); +}; +const renderer = { + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + options["lineColor" + i] = options["lineColor" + i] || options["cScaleInv" + i]; + if ((0,khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(options["lineColor" + i])) { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } else { + options["lineColor" + i] = (0,khroma__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z)(options["lineColor" + i], 20); + } + } + for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) { + const sw = "" + (17 - 3 * i); + sections += ` + .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${i - 1} polygon, .section-${i - 1} path { + fill: ${options["cScale" + i]}; + } + .section-${i - 1} text { + fill: ${options["cScaleLabel" + i]}; + } + .node-icon-${i - 1} { + font-size: 40px; + color: ${options["cScaleLabel" + i]}; + } + .section-edge-${i - 1}{ + stroke: ${options["cScale" + i]}; + } + .edge-depth-${i - 1}{ + stroke-width: ${sw}; + } + .section-${i - 1} line { + stroke: ${options["cScaleInv" + i]} ; + stroke-width: 3; + } + + .disabled, .disabled circle, .disabled text { + fill: lightgray; + } + .disabled text { + fill: #efefef; + } + `; + } + return sections; +}; +const getStyles = (options) => ` + .edge { + stroke-width: 3; + } + ${genSections(options)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${options.git0}; + } + .section-root text { + fill: ${options.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`; +const styles = getStyles; +const diagram = { + db: db$1, + renderer, + parser: parser$1, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/498bfcff.7cb5395f.js b/assets/js/498bfcff.7cb5395f.js new file mode 100644 index 0000000000..71867f8755 --- /dev/null +++ b/assets/js/498bfcff.7cb5395f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[749],{38084:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=t(85893),i=t(11151);const o={title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},a=void 0,l={id:"about/modelling/setup/fuel_types",title:"Fuel types",description:"Guide on how to use fuel types",source:"@site/docs/about/modelling/setup/fuel_types.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/fuel_types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/fuel_types.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Fuel types",sidebar_position:5,description:"Guide on how to use fuel types"},sidebar:"about",previous:{title:"Turbine modelling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"},next:{title:"Variables",permalink:"/ecalc/docs/about/modelling/setup/variables"}},r={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," keyword is ",(0,s.jsx)(n.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,s.jsxs)(n.p,{children:["This part of the setup specifies the various fuel types and associated emissions\nused in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"})," part of the setup by its name."]}),"\n",(0,s.jsxs)(n.p,{children:["The use of fuel can lead to one or more emission types, specified in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["You can optionally specify a ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: <name_1>\n CATEGORY: <category_1>\n EMISSIONS: <emissions data>\n - NAME: <name_2>\n CATEGORY: <category_2>\n EMISSIONS: <emissions data>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["This is a full example where there are 3 fuel type definitions, i.e., there are 3 different\nfuels defined that can be used in your ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part\n EMISSIONS:\n - NAME: CO2 # Name of the emission type\n FACTOR: 2.15 # kg/Sm3\n - NAME: CH4\n FACTOR: 0.00091 # kg/Sm3\n - NAME: flare_gas\n CATEGORY: FUEL_GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.73\n - NAME: CH4\n FACTOR: 0.00024\n - NAME: diesel\n CATEGORY: DIESEL\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.7085 # kg/l - input diesel usage in l/d\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>a});var s=t(67294);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4aa4fc36.546789e2.js b/assets/js/4aa4fc36.546789e2.js new file mode 100644 index 0000000000..7e3367a591 --- /dev/null +++ b/assets/js/4aa4fc36.546789e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1044],{51075:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(85893),o=t(11151);const r={title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:1},s="v8 to v8.1",a={id:"about/migration_guides/v8_to_v81",title:"v8 to v8.1",description:"v8 to v8.1 migration",source:"@site/docs/about/migration_guides/v8_to_v81.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8_to_v81",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8_to_v81.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"v8 to v8.1",description:"v8 to v8.1 migration",sidebar_position:1},sidebar:"about",previous:{title:"v7 to v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8"},next:{title:"v8.1 to v8.2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2"}},l={},d=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"Migration overview",id:"migration-overview",level:3},{value:"1. Changes to TIME_SERIES",id:"1-changes-to-time_series",level:3},{value:"2. Not possible to have different interpolation types for vectors within one file",id:"2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file",level:3},{value:"3. Empty data in time series columns no longer allowed",id:"3-empty-data-in-time-series-columns-no-longer-allowed",level:3},{value:"4. New LTP Category: STEAM-TURBINE-GENERATOR",id:"4--new-ltp-category-steam-turbine-generator",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"v8-to-v81",children:"v8 to v8.1"}),"\n",(0,i.jsx)(n.p,{children:"In this migration guide you will find:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,i.jsx)(n.h3,{id:"migration-overview",children:"Migration overview"}),"\n",(0,i.jsx)(n.p,{children:"This doc guides you through migrating an existing eCalc\u2122 model from version v8 to v8.1."}),"\n",(0,i.jsx)(n.p,{children:"We try to make this as easy as possible, and provide a step-by-step migration guide."}),"\n",(0,i.jsx)(n.h3,{id:"1-changes-to-time_series",children:"1. Changes to TIME_SERIES"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"RATE_INTERPOLATION_TYPE"})," is renamed to ",(0,i.jsx)(n.a,{href:"../references/keywords/INTERPOLATION_TYPE",children:(0,i.jsx)(n.code,{children:"INTERPOLATION_TYPE"})})]}),"\n",(0,i.jsxs)(n.li,{children:["New time series type: ",(0,i.jsx)(n.code,{children:"DEFAULT"})," with default ",(0,i.jsx)(n.code,{children:"RIGHT"})," interpolation"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"RESERVOIR"})," type is removed"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Previously, it looked like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is old\n TYPE: <MISCELLANEOUS/RESERVOIR>\n FILE: <path to file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n # This is old\n RATE_INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,i.jsx)(n.p,{children:"But the new valid definition of time series in the yaml is now:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is new\n TYPE: <MISCELLANEOUS/DEFAULT>\n FILE: <path to file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n # This is new\n INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsxs)(n.p,{children:["We have understood that the previous definitions lead to misunderstandings and errors. It is therefore of high importance\nthat you now go through the reservoir data timeseries one-by-one and make sure that the correct type and interpolation type\nis set. See below for the 2 possibilities of migrating from the old ",(0,i.jsx)(n.code,{children:"RESERVOIR"})," type."]})}),"\n",(0,i.jsxs)(n.p,{children:["If you previously used the ",(0,i.jsx)(n.code,{children:"RESERVOIR"})," type, you know have 2 options. See below."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is old\n TYPE: RESERVOIR\n ...\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If you know that the reservoir data comes from Centuries, and/or that the data is right-interpolated, then you should\nchange to the new ",(0,i.jsx)(n.code,{children:"DEFAULT"})," type, like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n # This is new\n TYPE: DEFAULT\n ...\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsxs)(n.p,{children:["If you do NOT know the origin of the timeseries or whether it uses ",(0,i.jsx)(n.code,{children:"LEFT"})," or ",(0,i.jsx)(n.code,{children:"RIGHT"})," interpolation, you ",(0,i.jsx)(n.strong,{children:"MUST"})," contact\nsomebody that can help you out to make this right. The consequences of doing it wrong is that the calculations is\neasily offset by 1 year."]})}),"\n",(0,i.jsx)(n.h3,{id:"2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file",children:"2. Not possible to have different interpolation types for vectors within one file"}),"\n",(0,i.jsxs)(n.p,{children:["Previously eCalc\u2122 tried to recognize vectors as rates- or non-rates for time series.\nHence, rate-vectors were set to use ",(0,i.jsx)(n.code,{children:"LEFT"})," interpolation type, or if the type was\nMISCELLANEOUS it was set to the method given by the user. If the vector was not recognized\nas a rate, the interpolation method was automatically set to ",(0,i.jsx)(n.code,{children:"LINEAR"}),", regardless of user input."]}),"\n",(0,i.jsx)(n.p,{children:"This behaviour is now changed:"}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsx)(n.p,{children:"eCalc\u2122 will no longer auto-detect rates and set interpolation type based on recognized\nrate vectors. If different vectors (e.g. pressures and rates) should be interpolated differently, they now need\nto be in separate files."})}),"\n",(0,i.jsx)(n.h3,{id:"3-empty-data-in-time-series-columns-no-longer-allowed",children:"3. Empty data in time series columns no longer allowed"}),"\n",(0,i.jsx)(n.p,{children:"Each column in a time series resource should have data for all time steps, eCalc\u2122 will now show an error if this is not the case.\nThe reason behind this is that it can be ambiguous to know whether missing data should be interpolated or considered as 0. Now\nusers will have to be explicit, and this will lead to fewer ambiguities and errors."}),"\n",(0,i.jsx)(n.h3,{id:"4--new-ltp-category-steam-turbine-generator",children:"4. New LTP Category: STEAM-TURBINE-GENERATOR"}),"\n",(0,i.jsx)(n.p,{children:"A new LTP requirement to report steam turbine generator consumption/generation. This affects the total generator production\nnegatively (reduced load), as some energy is provided through this steam turbine generator. It is therefore modelled as a consumer\nwith a negative load in order to subtract from the total energy provided by the generator set."}),"\n",(0,i.jsx)(n.p,{children:"The load on the steam turbine generator is reported separately in a new column in LTP Export."}),"\n",(0,i.jsxs)(n.p,{children:["Added new ",(0,i.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,i.jsx)(n.em,{children:"STEAM-TURBINE-GENERATOR"})," to report power generated by a steam turbine.\nShould be negative load to deduct from genset. See excerpt example below:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: steamgen\n CATEGORY: STEAM-TURBINE-GENERATOR\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: -1.1 # MW\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"important",children:(0,i.jsxs)(n.p,{children:["Set ",(0,i.jsx)(n.strong,{children:"negative"})," load for ",(0,i.jsx)(n.code,{children:"STEAM-TURBINE-GENERATOR"})," (similar to the way ",(0,i.jsx)(n.code,{children:"OFFSHORE-WIND"})," is being used)"]})})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>s});var i=t(67294);const o={},r=i.createContext(o);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4b5a01f9.f1b16e5a.js b/assets/js/4b5a01f9.f1b16e5a.js new file mode 100644 index 0000000000..067c8bf54c --- /dev/null +++ b/assets/js/4b5a01f9.f1b16e5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3211],{89150:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>r});var i=o(85893),l=o(11151);const t={title:"Fluid model",sidebar_position:1,description:"Selecting a fluid model in eCalc"},a="Fluid model",s={id:"about/modelling/setup/models/fluid_model",title:"Fluid model",description:"Selecting a fluid model in eCalc",source:"@site/docs/about/modelling/setup/models/fluid_model.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/fluid_model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/fluid_model.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Fluid model",sidebar_position:1,description:"Selecting a fluid model in eCalc"},sidebar:"about",previous:{title:"Models",permalink:"/ecalc/docs/about/modelling/setup/models/"},next:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"}},d={},r=[{value:"Fluid model using predefined composition",id:"fluid-model-using-predefined-composition",level:2},{value:"Format",id:"format",level:3},{value:"Examples",id:"examples",level:3},{value:"Fluid model with user-specified composition",id:"fluid-model-with-user-specified-composition",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example",level:3}];function c(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"fluid-model",children:"Fluid model"}),"\n",(0,i.jsx)(n.p,{children:"To calculate the energy usage related to compression of a natural gas, information about the composition is needed, i.e.\nwhich components it consist of and the (mole) fraction of each. Typical components for natural gas are alkanes such as\nmethane, ethane, propane, butane, pentane, hexane in addition to water, nitrogen and carbone dioxide. Alkanes with seven\nor more carbon atoms may occur, but these are often just part of the liquid (oil) phase and not significant in dry gas\ncompression."}),"\n",(0,i.jsx)(n.p,{children:"As the fluid is going through the compressor in a fluid dynamic process, the enthalpy changes, resulting in a new state\nwith increased pressure and temperature, and decreased volume. To estimate these changes, an equation-of-state (EOS)\nmodel is used. The default EOS model in eCalc is SRK (Soave-Redlich-Kwong)."}),"\n",(0,i.jsx)(n.p,{children:"The GERG models (GERG 2008) are used to calculate enthalpy, gamma and density, whilst other properties such as molar mass\nis based on either SRK or PR."}),"\n",(0,i.jsx)(n.p,{children:"Available EOS models"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"SRK (Soave-Redlich-Kwong)"}),"\n",(0,i.jsx)(n.li,{children:"PR (Peng-Robinson)"}),"\n",(0,i.jsx)(n.li,{children:"GERG_SRK"}),"\n",(0,i.jsx)(n.li,{children:"GERG_PR"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fluid-model-using-predefined-composition",children:"Fluid model using predefined composition"}),"\n",(0,i.jsx)(n.p,{children:"Available predefined fluid compositions (with mole weights) are"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"ULTRA_DRY (17.1 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"DRY (18.3 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"MEDIUM (19.4 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"RICH (21.1 kg/kmol)"}),"\n",(0,i.jsx)(n.li,{children:"ULTRA_RICH (24.6 kg/kmol)"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: <eos model>\n GAS_TYPE: <name of a predefined composition>\n"})}),"\n",(0,i.jsx)(n.h3,{id:"examples",children:"Examples"}),"\n",(0,i.jsx)(n.p,{children:"Examples with predefined fluid"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: PR\n GAS_TYPE: ULTRA_DRY\n"})}),"\n",(0,i.jsx)(n.p,{children:"Example where EOS is defaulted to SRK and GAS_TYPE defaulted to MEDIUM"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model_reference_name\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n"})}),"\n",(0,i.jsx)(n.h2,{id:"fluid-model-with-user-specified-composition",children:"Fluid model with user-specified composition"}),"\n",(0,i.jsxs)(n.p,{children:["The composition is specified by setting the mole fraction of each component. Setting the mole fraction for ",(0,i.jsx)(n.strong,{children:"methane is\nrequired"}),", all other components are optional and will be set to 0 if not specified. If methane is not part of your\ncomposition, simply put 0.0 for it."]}),"\n",(0,i.jsx)(n.p,{children:"It is not important that the fractions sum to one as they will be normalized by eCalc. It is the relative amount of each\nthat will be important."}),"\n",(0,i.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: <eos model>\n COMPOSITION:\n water: <mole fraction>\n nitrogen: <mole fraction>\n CO2: <mole fraction>\n methane: <mole fraction, required>\n ethane: <mole fraction>\n propane: <mole fraction>\n i_butane: <mole fraction>\n n_butane: <mole fraction>\n i_pentane: <mole fraction>\n n_pentane: <mole fraction>\n n_hexane: <mole fraction>\n"})}),"\n",(0,i.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of fluid model, for reference>\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: srk\n COMPOSITION:\n water: 0.1\n nitrogen: 0.74373\n CO2: 2.415619\n methane: 85.60145\n ethane: 6.707826\n propane: 2.611471\n i_butane: 0.45077\n n_butane: 0.691702\n i_pentane: 0.210714\n n_pentane: 0.197937\n n_hexane: 0.368786\n"})})]})}function m(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>s,a:()=>a});var i=o(67294);const l={},t=i.createContext(l);function a(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:a(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4b80f681.649f2d17.js b/assets/js/4b80f681.649f2d17.js new file mode 100644 index 0000000000..409330d79e --- /dev/null +++ b/assets/js/4b80f681.649f2d17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9842],{18186:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=r(85893),t=r(11151);const o={title:"Variable speed compressor train model with multiple streams and pressures",sidebar_position:4},i=void 0,a={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",title:"Variable speed compressor train model with multiple streams and pressures",description:"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Variable speed compressor train model with multiple streams and pressures",sidebar_position:4},sidebar:"about",previous:{title:"Variable speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model"},next:{title:"Fixed speed pressure control",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"}},l={},d=[{value:"Format",id:"format",level:2},{value:"Keyword usage",id:"keyword-usage",level:2},{value:"INTERSTAGE_PRESSURE_CONTROL",id:"interstage_pressure_control",level:3},{value:"Fixed pressure control",id:"fixed-pressure-control",level:3},{value:"Example",id:"example",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Compressor train with multiple streams and pressures",src:r(69317).Z+"",width:"1475",height:"659"})}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsxs)(s.p,{children:["The model is defined under the main keyword ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," in the format:"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n # All streams defined ahead of stage\n # Default outlet stream after last stage should not be defined\n STREAMS: # All inlet streams must have fluid models with the same eos model\n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING # NB: No fluid definition for outgoing streams!\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n CONTROL_MARGIN: <Default value 0.0>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n - ...\n MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"keyword-usage",children:"Keyword usage"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})," is a list of all in- and out-going streams for the compressor train."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"The same equation of state (EOS) must be used for each INGOING stream fluid models"}),"\n",(0,n.jsxs)(s.li,{children:["OUTGOING fluid models ",(0,n.jsx)(s.strong,{children:"cannot"})," be specified."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"STAGES"})," is a list of all the stages in the compressor train."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"For each stage, a temperature in Celsius must be defined. It\nis assumed that the gas is cooled down to this temperature ahead of the compression at this stage."}),"\n",(0,n.jsx)(s.li,{children:"A reference to a\ncompressor chart needs to be specified for each stage."}),"\n",(0,n.jsxs)(s.li,{children:["For the first stage, it is required to have ",(0,n.jsx)(s.strong,{children:"at least"})," one stream of INGOING type. In addition, ",(0,n.jsx)(s.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," cannot be used on the first stage."]}),"\n",(0,n.jsx)(s.li,{children:"Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream\nwill be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the\nmolar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will\nbe subtracted the rate of the outgoing stream."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"PRESSURE_DROP_AHEAD_OF_STAGE"})," is optional, but if defined it will reduce the inlet pressure of that particular stage by a fixed value.\nAs of now, only a single value is supported - i.e. a time series cannot be used here."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CONTROL_MARGIN"})," is a surge control margin, see ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"Surge control margin for variable speed compressor chart"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CONTROL_MARGIN_UNIT"})," is the unit of the surge control margin."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"interstage_pressure_control",children:"INTERSTAGE_PRESSURE_CONTROL"}),"\n",(0,n.jsx)(s.admonition,{type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," may be specified for one (only one!) of the stages 2, ..., N. It may ",(0,n.jsx)(s.strong,{children:"not"})," be specified for the first stage. See ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," for more usage details"]})}),"\n",(0,n.jsxs)(s.p,{children:["This is optional but essentially when this is specified the compression train is split into two parts - before and after the ",(0,n.jsx)(s.code,{children:"INTERSTAGE_CONTROL_PRESSURE"}),". As all rates and pressures (suction, discharge and interstage) are known, each side of the compression train can be solved independently."]}),"\n",(0,n.jsx)(s.p,{children:"Thus, given this, the rotational speed needed to match the suction and interstage pressure can be found. This speed will be for the first section of the compression train. The same is done for the second part of the train, only here the rotational speed is found to match the interstage and discharge pressure, for the given rates."}),"\n",(0,n.jsxs)(s.p,{children:["The highest speed between the first and second parts of the train is then taken as the rotational speed of the compression train.\nThis speed will essentially be needed to meet the most demanding pressure interval.\nThe section with the lower rotational speed must then be run with a form of pressure control (see ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",children:"UPSTREAM_PRESSURE_CONTROL"}),"/",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",children:"DOWNSTREAM_PRESSURE_CONTROL"}),")."]}),"\n",(0,n.jsx)(s.p,{children:"In a given simulation, the section of the compression train that requires either upstream or downstream pressure control is not fixed. This means that for different time steps, the part of the train with the highest rotational speed is not set to either the first or second section. Thus, both pressure control methods must be specified but only one of them will be used for each time step."}),"\n",(0,n.jsx)(s.p,{children:"Technically, the INTERSTAGE_PRESSURE_CONTROL may be set independent of where the streams are defined. I.e. it may be\ndefined at a stage where there is an in- or out-going stream defined, or at a stage where there is no defined stream.\nIn reality, the INTERSTAGE_PRESSURE_CONTROL is linked to a stream, for example an outgoing stream for export where the\nexport pressure is defined, and where the rest of the gas continues through the compressor train for example for\ninjection at a higher pressure."}),"\n",(0,n.jsx)(s.h3,{id:"fixed-pressure-control",children:"Fixed pressure control"}),"\n",(0,n.jsx)(s.p,{children:"The available pressure controls are"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"DOWNSTREAM_CHOKE"}),"\n",(0,n.jsx)(s.li,{children:"UPSTREAM_CHOKE"}),"\n",(0,n.jsx)(s.li,{children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,n.jsx)(s.li,{children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,n.jsx)(s.li,{children:"COMMON_ASV"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"The sub-train where the pressure control is used, is now modeling wise equal to a single speed train as the speed is\ndetermined from the other sub-train. The inlet and outlet pressures for a sub-train, may be either the suction pressure\nand the interstage control pressure or interstage control pressure and the discharge pressure, depending on which sub\npart governs the speed of the full train."}),"\n",(0,n.jsxs)(s.p,{children:["See ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",children:"FIXED PRESSURE CONTROL"})," for more details."]}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n"})})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},69317:(e,s,r)=>{r.d(s,{Z:()=>n});const n=r.p+"assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png"},11151:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>i});var n=r(67294);const t={},o=n.createContext(t);function i(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c3c1dc2.2d79bead.js b/assets/js/4c3c1dc2.2d79bead.js new file mode 100644 index 0000000000..495d17a8d9 --- /dev/null +++ b/assets/js/4c3c1dc2.2d79bead.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6686],{19999:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var o=r(85893),s=r(11151);const t={},c="PRESSURE_CONTROL",l={id:"about/references/keywords/PRESSURE_CONTROL",title:"PRESSURE_CONTROL",description:"Description",source:"@site/docs/about/references/keywords/PRESSURE_CONTROL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/PRESSURE_CONTROL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT"},next:{title:"PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"pressure_control",children:"PRESSURE_CONTROL"}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"PRESSURE_CONTROL"})," is required when a compressor model is defined. This dictates how the compressor will be controlled, the method for pressure control are as follows:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"DOWNSTREAM_CHOKE (default)"}),"\n",(0,o.jsx)(n.li,{children:"UPSTREAM_CHOKE"}),"\n",(0,o.jsx)(n.li,{children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,o.jsx)(n.li,{children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,o.jsx)(n.li,{children:"COMMON_ASV"}),"\n",(0,o.jsx)(n.li,{children:"NONE"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Further description on how each pressure control method works can be found in ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"COMPRESSOR MODELLING"})]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <compressor model type>\n ...\n PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: variable_compressor\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n ...\n PRESSURE_CONTROL: INDIVIDUAL_ASV_PRESSURE\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>l,a:()=>c});var o=r(67294);const s={},t=o.createContext(s);function c(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4da8ac19.740674be.js b/assets/js/4da8ac19.740674be.js new file mode 100644 index 0000000000..285593fc35 --- /dev/null +++ b/assets/js/4da8ac19.740674be.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6038],{24571:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>t,default:()=>E,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=s(85893),c=s(11151);const o={},t="EFFICIENCY",i={id:"about/references/keywords/EFFICIENCY",title:"EFFICIENCY",description:"Description",source:"@site/docs/about/references/keywords/EFFICIENCY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EFFICIENCY",permalink:"/ecalc/docs/about/references/keywords/EFFICIENCY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EFFICIENCY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"},next:{title:"ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"COMPRESSORS",id:"compressors",level:3},{value:"PUMPS",id:"pumps",level:3},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"efficiency",children:"EFFICIENCY"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"EFFICIENCY"})," is a keyword that is used defining ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),".\nEfficiency can either be given as a fraction or percentage."]}),"\n",(0,r.jsxs)(n.p,{children:["For compressors, it is used in two separate ways under the ",(0,r.jsx)(n.code,{children:"MODELS"})," or section:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Defining the ",(0,r.jsx)(n.code,{children:"UNITS"})," of ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})]}),"\n",(0,r.jsxs)(n.li,{children:["Defining the set of values for ",(0,r.jsx)(n.code,{children:"EFFICIENCY"})," under ",(0,r.jsx)(n.code,{children:"CURVES"})," section. Here, this ",(0,r.jsx)(n.strong,{children:"must"})," be given as a set of values whose length (number of variables) match the correlating ",(0,r.jsx)(n.code,{children:"HEAD"})," and ",(0,r.jsx)(n.code,{children:"RATE"})," values."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For pumps, it is defined under the ",(0,r.jsx)(n.code,{children:"FACILITY_INPUTS"})," section."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.h3,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <compressor chart name>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: <compressor chart type>\n UNITS:\n ...\n EFFICIENCY: <FRACTION or PERCENTAGE>\n CURVES:\n ...\n EFFICIENCY: <set of values>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"pumps",children:"PUMPS"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <FACILITY_INPUT_NAME>\n FILE: <path_to_file.csv>\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n ...\n EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n"})})]})}function E(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>t});var r=s(67294);const c={},o=r.createContext(c);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ee97ba8.5de44dbc.js b/assets/js/4ee97ba8.5de44dbc.js new file mode 100644 index 0000000000..d872b9710b --- /dev/null +++ b/assets/js/4ee97ba8.5de44dbc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1668],{89158:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>s,toc:()=>d});var o=n(85893),r=n(11151);const c={title:"Reference documentation",sidebar_position:999,description:"Getting started with eCalc"},i=void 0,s={id:"about/references/index",title:"Reference documentation",description:"Getting started with eCalc",source:"@site/docs/about/references/index.md",sourceDirName:"about/references",slug:"/about/references/",permalink:"/ecalc/docs/about/references/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/index.md",tags:[],version:"current",sidebarPosition:999,frontMatter:{title:"Reference documentation",sidebar_position:999,description:"Getting started with eCalc"},sidebar:"about",previous:{title:"Drogon model",permalink:"/ecalc/docs/about/modelling/examples/drogon"},next:{title:"YAML keywords",permalink:"/ecalc/docs/about/references/keywords/"}},a={},d=[];function u(e){return(0,o.jsx)(o.Fragment,{})}function l(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u()}},11151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var o=n(67294);const r={},c=o.createContext(r);function i(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/502e1773.15957f54.js b/assets/js/502e1773.15957f54.js new file mode 100644 index 0000000000..7ca0eac1ae --- /dev/null +++ b/assets/js/502e1773.15957f54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2693],{90056:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>c,default:()=>m,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var s=n(85893),o=n(11151);const t={},c="CONTROL_MARGIN_UNIT",a={id:"about/references/keywords/CONTROL_MARGIN_UNIT",title:"CONTROL_MARGIN_UNIT",description:"MODELS /",source:"@site/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN"},next:{title:"CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3}];function d(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"control_margin_unit",children:"CONTROL_MARGIN_UNIT"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["This keyword defines the unit of the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",children:"surge control margin"})," for a variable speed compressor chart."]}),"\n",(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.code,{children:"CONTROL_MARGIN_UNIT"})," is given as a percentage or fraction of the rate difference between minimum- and maximum flow."]}),"\n",(0,s.jsxs)(r.p,{children:["It is defined when setting up the stages in a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})," or ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsx)(r.p,{children:"It is currently only possible to define a surge control margin for variable speed compressors."}),"\n",(0,s.jsxs)(r.p,{children:["See ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"Surge control margin for variable speed compressor chart"})," for more details."]}),"\n",(0,s.jsx)(r.h3,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n ....\n"})}),"\n",(0,s.jsx)(r.h3,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20\n COMPRESSOR_CHART: 1_stage_chart\n CONTROL_MARGIN: 0.1\n CONTROL_MARGIN_UNIT: FRACTION\n ....\n"})})]})}function m(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>c});var s=n(67294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5054.62d51cca.js b/assets/js/5054.62d51cca.js new file mode 100644 index 0000000000..de39ce0b06 --- /dev/null +++ b/assets/js/5054.62d51cca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5054],{15054:(t,n,e)=>{e.d(n,{diagram:()=>H});var i=e(28758),s=e(64218);function r(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e>i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e>s||void 0===e&&s>=s)&&(e=s)}return e}function o(t){return t.target.depth}function l(t,n){return t.sourceLinks.length?t.depth:n-1}function c(t,n){let e=0;if(void 0===n)for(let i of t)(i=+i)&&(e+=i);else{let i=-1;for(let s of t)(s=+n(s,++i,t))&&(e+=s)}return e}function h(t,n){let e;if(void 0===n)for(const i of t)null!=i&&(e<i||void 0===e&&i>=i)&&(e=i);else{let i=-1;for(let s of t)null!=(s=n(s,++i,t))&&(e<s||void 0===e&&s>=s)&&(e=s)}return e}function a(t){return function(){return t}}function u(t,n){return y(t.source,n.source)||t.index-n.index}function f(t,n){return y(t.target,n.target)||t.index-n.index}function y(t,n){return t.y0-n.y0}function d(t){return t.value}function p(t){return t.index}function g(t){return t.nodes}function _(t){return t.links}function x(t,n){const e=t.get(n);if(!e)throw new Error("missing: "+n);return e}function k({nodes:t}){for(const n of t){let t=n.y0,e=t;for(const i of n.sourceLinks)i.y0=t+i.width/2,t+=i.width;for(const i of n.targetLinks)i.y1=e+i.width/2,e+=i.width}}function m(){let t,n,e,i=0,s=0,o=1,m=1,v=24,b=8,w=p,E=l,L=g,A=_,S=6;function M(){const l={nodes:L.apply(null,arguments),links:A.apply(null,arguments)};return function({nodes:t,links:n}){for(const[e,s]of t.entries())s.index=e,s.sourceLinks=[],s.targetLinks=[];const i=new Map(t.map(((n,e)=>[w(n,e,t),n])));for(const[e,s]of n.entries()){s.index=e;let{source:t,target:n}=s;"object"!=typeof t&&(t=s.source=x(i,t)),"object"!=typeof n&&(n=s.target=x(i,n)),t.sourceLinks.push(s),n.targetLinks.push(s)}if(null!=e)for(const{sourceLinks:s,targetLinks:r}of t)s.sort(e),r.sort(e)}(l),function({nodes:t}){for(const n of t)n.value=void 0===n.fixedValue?Math.max(c(n.sourceLinks,d),c(n.targetLinks,d)):n.fixedValue}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.depth=s;for(const{target:n}of t.sourceLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function({nodes:t}){const n=t.length;let e=new Set(t),i=new Set,s=0;for(;e.size;){for(const t of e){t.height=s;for(const{source:n}of t.targetLinks)i.add(n)}if(++s>n)throw new Error("circular link");e=i,i=new Set}}(l),function(e){const l=function({nodes:t}){const e=h(t,(t=>t.depth))+1,s=(o-i-v)/(e-1),r=new Array(e);for(const n of t){const t=Math.max(0,Math.min(e-1,Math.floor(E.call(null,n,e))));n.layer=t,n.x0=i+t*s,n.x1=n.x0+v,r[t]?r[t].push(n):r[t]=[n]}if(n)for(const i of r)i.sort(n);return r}(e);t=Math.min(b,(m-s)/(h(l,(t=>t.length))-1)),function(n){const e=r(n,(n=>(m-s-(n.length-1)*t)/c(n,d)));for(const i of n){let n=s;for(const s of i){s.y0=n,s.y1=n+s.value*e,n=s.y1+t;for(const t of s.sourceLinks)t.width=t.value*e}n=(m-n+t)/(i.length+1);for(let t=0;t<i.length;++t){const e=i[t];e.y0+=n*(t+1),e.y1+=n*(t+1)}N(i)}}(l);for(let t=0;t<S;++t){const n=Math.pow(.99,t),e=Math.max(1-n,(t+1)/S);T(l,n,e),I(l,n,e)}}(l),k(l),l}function I(t,e,i){for(let s=1,r=t.length;s<r;++s){const r=t[s];for(const t of r){let n=0,i=0;for(const{source:e,value:r}of t.targetLinks){let s=r*(t.layer-e.layer);n+=$(e,t)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,D(t)}void 0===n&&r.sort(y),O(r,i)}}function T(t,e,i){for(let s=t.length-2;s>=0;--s){const r=t[s];for(const t of r){let n=0,i=0;for(const{target:e,value:r}of t.sourceLinks){let s=r*(e.layer-t.layer);n+=j(t,e)*s,i+=s}if(!(i>0))continue;let s=(n/i-t.y0)*e;t.y0+=s,t.y1+=s,D(t)}void 0===n&&r.sort(y),O(r,i)}}function O(n,e){const i=n.length>>1,r=n[i];C(n,r.y0-t,i-1,e),P(n,r.y1+t,i+1,e),C(n,m,n.length-1,e),P(n,s,0,e)}function P(n,e,i,s){for(;i<n.length;++i){const r=n[i],o=(e-r.y0)*s;o>1e-6&&(r.y0+=o,r.y1+=o),e=r.y1+t}}function C(n,e,i,s){for(;i>=0;--i){const r=n[i],o=(r.y1-e)*s;o>1e-6&&(r.y0-=o,r.y1-=o),e=r.y0-t}}function D({sourceLinks:t,targetLinks:n}){if(void 0===e){for(const{source:{sourceLinks:t}}of n)t.sort(f);for(const{target:{targetLinks:n}}of t)n.sort(u)}}function N(t){if(void 0===e)for(const{sourceLinks:n,targetLinks:e}of t)n.sort(f),e.sort(u)}function $(n,e){let i=n.y0-(n.sourceLinks.length-1)*t/2;for(const{target:s,width:r}of n.sourceLinks){if(s===e)break;i+=r+t}for(const{source:t,width:s}of e.targetLinks){if(t===n)break;i-=s}return i}function j(n,e){let i=e.y0-(e.targetLinks.length-1)*t/2;for(const{source:s,width:r}of e.targetLinks){if(s===n)break;i+=r+t}for(const{target:t,width:s}of n.sourceLinks){if(t===e)break;i-=s}return i}return M.update=function(t){return k(t),t},M.nodeId=function(t){return arguments.length?(w="function"==typeof t?t:a(t),M):w},M.nodeAlign=function(t){return arguments.length?(E="function"==typeof t?t:a(t),M):E},M.nodeSort=function(t){return arguments.length?(n=t,M):n},M.nodeWidth=function(t){return arguments.length?(v=+t,M):v},M.nodePadding=function(n){return arguments.length?(b=t=+n,M):b},M.nodes=function(t){return arguments.length?(L="function"==typeof t?t:a(t),M):L},M.links=function(t){return arguments.length?(A="function"==typeof t?t:a(t),M):A},M.linkSort=function(t){return arguments.length?(e=t,M):e},M.size=function(t){return arguments.length?(i=s=0,o=+t[0],m=+t[1],M):[o-i,m-s]},M.extent=function(t){return arguments.length?(i=+t[0][0],o=+t[1][0],s=+t[0][1],m=+t[1][1],M):[[i,s],[o,m]]},M.iterations=function(t){return arguments.length?(S=+t,M):S},M}var v=Math.PI,b=2*v,w=1e-6,E=b-w;function L(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function A(){return new L}L.prototype=A.prototype={constructor:L,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,i){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+i)},bezierCurveTo:function(t,n,e,i,s,r){this._+="C"+ +t+","+ +n+","+ +e+","+ +i+","+(this._x1=+s)+","+(this._y1=+r)},arcTo:function(t,n,e,i,s){t=+t,n=+n,e=+e,i=+i,s=+s;var r=this._x1,o=this._y1,l=e-t,c=i-n,h=r-t,a=o-n,u=h*h+a*a;if(s<0)throw new Error("negative radius: "+s);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(u>w)if(Math.abs(a*l-c*h)>w&&s){var f=e-r,y=i-o,d=l*l+c*c,p=f*f+y*y,g=Math.sqrt(d),_=Math.sqrt(u),x=s*Math.tan((v-Math.acos((d+u-p)/(2*g*_)))/2),k=x/_,m=x/g;Math.abs(k-1)>w&&(this._+="L"+(t+k*h)+","+(n+k*a)),this._+="A"+s+","+s+",0,0,"+ +(a*f>h*y)+","+(this._x1=t+m*l)+","+(this._y1=n+m*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,i,s,r){t=+t,n=+n,r=!!r;var o=(e=+e)*Math.cos(i),l=e*Math.sin(i),c=t+o,h=n+l,a=1^r,u=r?i-s:s-i;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+h:(Math.abs(this._x1-c)>w||Math.abs(this._y1-h)>w)&&(this._+="L"+c+","+h),e&&(u<0&&(u=u%b+b),u>E?this._+="A"+e+","+e+",0,1,"+a+","+(t-o)+","+(n-l)+"A"+e+","+e+",0,1,"+a+","+(this._x1=c)+","+(this._y1=h):u>w&&(this._+="A"+e+","+e+",0,"+ +(u>=v)+","+a+","+(this._x1=t+e*Math.cos(s))+","+(this._y1=n+e*Math.sin(s))))},rect:function(t,n,e,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +i+"h"+-e+"Z"},toString:function(){return this._}};const S=A;var M=Array.prototype.slice;function I(t){return function(){return t}}function T(t){return t[0]}function O(t){return t[1]}function P(t){return t.source}function C(t){return t.target}function D(t){var n=P,e=C,i=T,s=O,r=null;function o(){var o,l=M.call(arguments),c=n.apply(this,l),h=e.apply(this,l);if(r||(r=o=S()),t(r,+i.apply(this,(l[0]=c,l)),+s.apply(this,l),+i.apply(this,(l[0]=h,l)),+s.apply(this,l)),o)return r=null,o+""||null}return o.source=function(t){return arguments.length?(n=t,o):n},o.target=function(t){return arguments.length?(e=t,o):e},o.x=function(t){return arguments.length?(i="function"==typeof t?t:I(+t),o):i},o.y=function(t){return arguments.length?(s="function"==typeof t?t:I(+t),o):s},o.context=function(t){return arguments.length?(r=null==t?null:t,o):r},o}function N(t,n,e,i,s){t.moveTo(n,e),t.bezierCurveTo(n=(n+i)/2,e,n,s,i,s)}function $(t){return[t.source.x1,t.y0]}function j(t){return[t.target.x0,t.y1]}function z(){return D(N).source($).target(j)}e(27484),e(17967),e(27856);var Y=function(){var t=function(t,n,e,i){for(e=e||{},i=t.length;i--;e[t[i]]=n);return e},n=[1,9],e=[1,10],i=[1,5,10,12],s={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(t,n,e,i,s,r,o){var l=r.length-1;switch(s){case 7:const t=i.findOrCreateNode(r[l-4].trim().replaceAll('""','"')),n=i.findOrCreateNode(r[l-2].trim().replaceAll('""','"')),e=parseFloat(r[l].trim());i.addLink(t,n,e);break;case 8:case 9:case 11:this.$=r[l];break;case 10:this.$=r[l-1]}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:e},{1:[2,6],7:11,10:[1,12]},t(e,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(i,[2,8]),t(i,[2,9]),{19:[1,16]},t(i,[2,11]),{1:[2,1]},{1:[2,5]},t(e,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:e},{15:18,16:7,17:8,18:n,20:e},{18:[1,19]},t(e,[2,3]),{12:[1,20]},t(i,[2,10]),{15:21,16:7,17:8,18:n,20:e},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(t,n){if(!n.recoverable){var e=new Error(t);throw e.hash=n,e}this.trace(t)},parse:function(t){var n=this,e=[0],i=[],s=[null],r=[],o=this.table,l="",c=0,h=0,a=r.slice.call(arguments,1),u=Object.create(this.lexer),f={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(f.yy[y]=this.yy[y]);u.setInput(t,f.yy),f.yy.lexer=u,f.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var d=u.yylloc;r.push(d);var p=u.options&&u.options.ranges;"function"==typeof f.yy.parseError?this.parseError=f.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,_,x,k,m,v,b,w,E,L={};;){if(_=e[e.length-1],this.defaultActions[_]?x=this.defaultActions[_]:(null==g&&(E=void 0,"number"!=typeof(E=i.pop()||u.lex()||1)&&(E instanceof Array&&(E=(i=E).pop()),E=n.symbols_[E]||E),g=E),x=o[_]&&o[_][g]),void 0===x||!x.length||!x[0]){var A="";for(m in w=[],o[_])this.terminals_[m]&&m>2&&w.push("'"+this.terminals_[m]+"'");A=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(A,{text:u.match,token:this.terminals_[g]||g,line:u.yylineno,loc:d,expected:w})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+g);switch(x[0]){case 1:e.push(g),s.push(u.yytext),r.push(u.yylloc),e.push(x[1]),g=null,h=u.yyleng,l=u.yytext,c=u.yylineno,d=u.yylloc;break;case 2:if(v=this.productions_[x[1]][1],L.$=s[s.length-v],L._$={first_line:r[r.length-(v||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(v||1)].first_column,last_column:r[r.length-1].last_column},p&&(L._$.range=[r[r.length-(v||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(L,[l,h,c,f.yy,x[1],s,r].concat(a))))return k;v&&(e=e.slice(0,-1*v*2),s=s.slice(0,-1*v),r=r.slice(0,-1*v)),e.push(this.productions_[x[1]][0]),s.push(L.$),r.push(L._$),b=o[e[e.length-2]][e[e.length-1]],e.push(b);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,n){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,n)},setInput:function(t,n){return this.yy=n||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var n=t.length,e=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),e.length-1&&(this.yylineno-=e.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:e?(e.length===i.length?this.yylloc.first_column:0)+i[i.length-e.length].length-e[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),n=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+n+"^"},test_match:function(t,n){var e,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e)return e;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,n,e,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((e=this._input.match(this.rules[s[r]]))&&(!n||e[0].length>n[0].length)){if(n=e,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(e,s[r])))return t;if(this._backtrack){n=!1;continue}return!1}if(!this.options.flex)break}return n?!1!==(t=this.test_match(n,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{easy_keword_rules:!0},performAction:function(t,n,e,i){switch(e){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};function o(){this.yy={}}return s.lexer=r,o.prototype=s,s.Parser=o,new o}();Y.parser=Y;const F=Y;let U=[],W=[],q={};class G{constructor(t,n,e=0){this.source=t,this.target=n,this.value=e}}class K{constructor(t){this.ID=t}}const V={nodesMap:q,getConfig:()=>(0,i.c)().sankey,getNodes:()=>W,getLinks:()=>U,getGraph:()=>({nodes:W.map((t=>({id:t.ID}))),links:U.map((t=>({source:t.source.ID,target:t.target.ID,value:t.value})))}),addLink:(t,n,e)=>{U.push(new G(t,n,e))},findOrCreateNode:t=>(t=i.e.sanitizeText(t,(0,i.c)()),q[t]||(q[t]=new K(t),W.push(q[t])),q[t]),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,getDiagramTitle:i.r,setDiagramTitle:i.q,clear:()=>{U=[],W=[],q={},(0,i.t)()}},X=class t{static next(n){return new t(n+ ++t.count)}constructor(t){this.id=t,this.href=`#${t}`}toString(){return"url("+this.href+")"}};X.count=0;let Q=X;const B={left:function(t){return t.depth},right:function(t,n){return n-1-t.height},center:function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?r(t.sourceLinks,o)-1:0},justify:l},R={draw:function(t,n,e,r){const{securityLevel:o,sankey:l}=(0,i.c)(),c=i.H.sankey;let h;"sandbox"===o&&(h=(0,s.Ys)("#i"+n));const a="sandbox"===o?(0,s.Ys)(h.nodes()[0].contentDocument.body):(0,s.Ys)("body"),u="sandbox"===o?a.select(`[id="${n}"]`):(0,s.Ys)(`[id="${n}"]`),f=(null==l?void 0:l.width)??c.width,y=(null==l?void 0:l.height)??c.width,d=(null==l?void 0:l.useMaxWidth)??c.useMaxWidth,p=(null==l?void 0:l.nodeAlignment)??c.nodeAlignment,g=(null==l?void 0:l.prefix)??c.prefix,_=(null==l?void 0:l.suffix)??c.suffix,x=(null==l?void 0:l.showValues)??c.showValues,k=r.db.getGraph(),v=B[p];m().nodeId((t=>t.id)).nodeWidth(10).nodePadding(10+(x?15:0)).nodeAlign(v).extent([[0,0],[f,y]])(k);const b=(0,s.PKp)(s.K2I);u.append("g").attr("class","nodes").selectAll(".node").data(k.nodes).join("g").attr("class","node").attr("id",(t=>(t.uid=Q.next("node-")).id)).attr("transform",(function(t){return"translate("+t.x0+","+t.y0+")"})).attr("x",(t=>t.x0)).attr("y",(t=>t.y0)).append("rect").attr("height",(t=>t.y1-t.y0)).attr("width",(t=>t.x1-t.x0)).attr("fill",(t=>b(t.id)));u.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(k.nodes).join("text").attr("x",(t=>t.x0<f/2?t.x1+6:t.x0-6)).attr("y",(t=>(t.y1+t.y0)/2)).attr("dy",(x?"0":"0.35")+"em").attr("text-anchor",(t=>t.x0<f/2?"start":"end")).text((({id:t,value:n})=>x?`${t}\n${g}${Math.round(100*n)/100}${_}`:t));const w=u.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(k.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),E=(null==l?void 0:l.linkColor)||"gradient";if("gradient"===E){const t=w.append("linearGradient").attr("id",(t=>(t.uid=Q.next("linearGradient-")).id)).attr("gradientUnits","userSpaceOnUse").attr("x1",(t=>t.source.x1)).attr("x2",(t=>t.target.x0));t.append("stop").attr("offset","0%").attr("stop-color",(t=>b(t.source.id))),t.append("stop").attr("offset","100%").attr("stop-color",(t=>b(t.target.id)))}let L;switch(E){case"gradient":L=t=>t.uid;break;case"source":L=t=>b(t.source.id);break;case"target":L=t=>b(t.target.id);break;default:L=E}w.append("path").attr("d",z()).attr("stroke",L).attr("stroke-width",(t=>Math.max(1,t.width))),(0,i.o)(void 0,u,0,d)}},Z=F.parse.bind(F);F.parse=t=>Z((t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,"\n").trim())(t));const H={parser:F,db:V,renderer:R}}}]); \ No newline at end of file diff --git a/assets/js/5114.198e5e9e.js b/assets/js/5114.198e5e9e.js new file mode 100644 index 0000000000..e2643cb30c --- /dev/null +++ b/assets/js/5114.198e5e9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5114],{25114:(t,e,r)=>{r.d(e,{diagram:()=>D});var i=r(28758),a=r(45625),n=r(64218),s=r(41644);const o=[];for(let S=0;S<256;++S)o.push((S+256).toString(16).slice(1));function c(t,e=0){return o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]}const l=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;const h=function(t){return"string"==typeof t&&l.test(t)};const d=function(t){if(!h(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=255&e,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=255&e,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=255&e,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=255&e,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=255&e,r};function y(t,e,r,i){switch(t){case 0:return e&r^~e&i;case 1:case 3:return e^r^i;case 2:return e&r^e&i^r&i}}function u(t,e){return t<<e|t>>>32-e}const p=function(t,e,r){function i(t,i,a,n){var s;if("string"==typeof t&&(t=function(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r<t.length;++r)e.push(t.charCodeAt(r));return e}(t)),"string"==typeof i&&(i=d(i)),16!==(null===(s=i)||void 0===s?void 0:s.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let o=new Uint8Array(16+t.length);if(o.set(i),o.set(t,i.length),o=r(o),o[6]=15&o[6]|e,o[8]=63&o[8]|128,a){n=n||0;for(let t=0;t<16;++t)a[n+t]=o[t];return a}return c(o)}try{i.name=t}catch(a){}return i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",i}("v5",80,(function(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof t){const e=unescape(encodeURIComponent(t));t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r))}else Array.isArray(t)||(t=Array.prototype.slice.call(t));t.push(128);const i=t.length/4+2,a=Math.ceil(i/16),n=new Array(a);for(let s=0;s<a;++s){const e=new Uint32Array(16);for(let r=0;r<16;++r)e[r]=t[64*s+4*r]<<24|t[64*s+4*r+1]<<16|t[64*s+4*r+2]<<8|t[64*s+4*r+3];n[s]=e}n[a-1][14]=8*(t.length-1)/Math.pow(2,32),n[a-1][14]=Math.floor(n[a-1][14]),n[a-1][15]=8*(t.length-1)&4294967295;for(let s=0;s<a;++s){const t=new Uint32Array(80);for(let e=0;e<16;++e)t[e]=n[s][e];for(let e=16;e<80;++e)t[e]=u(t[e-3]^t[e-8]^t[e-14]^t[e-16],1);let i=r[0],a=r[1],o=r[2],c=r[3],l=r[4];for(let r=0;r<80;++r){const n=Math.floor(r/20),s=u(i,5)+y(n,a,o,c)+l+e[n]+t[r]>>>0;l=c,c=o,o=u(a,30)>>>0,a=i,i=s}r[0]=r[0]+i>>>0,r[1]=r[1]+a>>>0,r[2]=r[2]+o>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+l>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]}));r(27484),r(17967),r(27856);var _=function(){var t=function(t,e,r,i){for(r=r||{},i=t.length;i--;r[t[i]]=e);return r},e=[6,8,10,20,22,24,26,27,28],r=[1,10],i=[1,11],a=[1,12],n=[1,13],s=[1,14],o=[1,15],c=[1,21],l=[1,22],h=[1,23],d=[1,24],y=[1,25],u=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],p=[1,34],_=[27,28,46,47],f=[41,42,43,44,45],m=[17,34],E=[1,54],g=[1,53],O=[17,34,36,38],b={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(t,e,r,i,a,n,s){var o=n.length-1;switch(a){case 1:break;case 2:case 6:case 7:this.$=[];break;case 3:n[o-1].push(n[o]),this.$=n[o-1];break;case 4:case 5:case 19:case 43:case 27:case 28:case 31:this.$=n[o];break;case 8:i.addEntity(n[o-4]),i.addEntity(n[o-2]),i.addRelationship(n[o-4],n[o],n[o-2],n[o-3]);break;case 9:i.addEntity(n[o-3]),i.addAttributes(n[o-3],n[o-1]);break;case 10:i.addEntity(n[o-2]);break;case 11:i.addEntity(n[o]);break;case 12:i.addEntity(n[o-6],n[o-4]),i.addAttributes(n[o-6],n[o-1]);break;case 13:i.addEntity(n[o-5],n[o-3]);break;case 14:i.addEntity(n[o-3],n[o-1]);break;case 15:case 16:this.$=n[o].trim(),i.setAccTitle(this.$);break;case 17:case 18:this.$=n[o].trim(),i.setAccDescription(this.$);break;case 20:case 41:case 42:case 32:this.$=n[o].replace(/"/g,"");break;case 21:case 29:this.$=[n[o]];break;case 22:n[o].push(n[o-1]),this.$=n[o];break;case 23:this.$={attributeType:n[o-1],attributeName:n[o]};break;case 24:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeKeyTypeList:n[o]};break;case 25:this.$={attributeType:n[o-2],attributeName:n[o-1],attributeComment:n[o]};break;case 26:this.$={attributeType:n[o-3],attributeName:n[o-2],attributeKeyTypeList:n[o-1],attributeComment:n[o]};break;case 30:n[o-2].push(n[o]),this.$=n[o-2];break;case 33:this.$={cardA:n[o],relType:n[o-1],cardB:n[o-2]};break;case 34:this.$=i.Cardinality.ZERO_OR_ONE;break;case 35:this.$=i.Cardinality.ZERO_OR_MORE;break;case 36:this.$=i.Cardinality.ONE_OR_MORE;break;case 37:this.$=i.Cardinality.ONLY_ONE;break;case 38:this.$=i.Cardinality.MD_PARENT;break;case 39:this.$=i.Identification.NON_IDENTIFYING;break;case 40:this.$=i.Identification.IDENTIFYING}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:i,24:a,26:n,27:s,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:c,42:l,43:h,44:d,45:y}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(u,[2,19]),t(u,[2,20]),t(e,[2,4]),{11:29,27:s,28:o},{16:30,17:[1,31],29:32,30:33,34:p},{11:35,27:s,28:o},{40:36,46:[1,37],47:[1,38]},t(_,[2,34]),t(_,[2,35]),t(_,[2,36]),t(_,[2,37]),t(_,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:p},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:c,42:l,43:h,44:d,45:y},t(f,[2,39]),t(f,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(m,[2,23],{32:50,33:51,35:52,37:E,38:g}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(m,[2,24],{33:56,36:[1,57],38:g}),t(m,[2,25]),t(O,[2,29]),t(m,[2,32]),t(O,[2,31]),{16:58,17:[1,59],29:32,30:33,34:p},t(m,[2,26]),{35:60,37:E},{17:[1,61]},t(e,[2,13]),t(O,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],i=[],a=[null],n=[],s=this.table,o="",c=0,l=0,h=n.slice.call(arguments,1),d=Object.create(this.lexer),y={yy:{}};for(var u in this.yy)Object.prototype.hasOwnProperty.call(this.yy,u)&&(y.yy[u]=this.yy[u]);d.setInput(t,y.yy),y.yy.lexer=d,y.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var p=d.yylloc;n.push(p);var _=d.options&&d.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,E,g,O,b,k,R,N,T={};;){if(m=r[r.length-1],this.defaultActions[m]?E=this.defaultActions[m]:(null==f&&(N=void 0,"number"!=typeof(N=i.pop()||d.lex()||1)&&(N instanceof Array&&(N=(i=N).pop()),N=e.symbols_[N]||N),f=N),E=s[m]&&s[m][f]),void 0===E||!E.length||!E[0]){var x="";for(O in R=[],s[m])this.terminals_[O]&&O>2&&R.push("'"+this.terminals_[O]+"'");x=d.showPosition?"Parse error on line "+(c+1)+":\n"+d.showPosition()+"\nExpecting "+R.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[f]||f,line:d.yylineno,loc:p,expected:R})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+f);switch(E[0]){case 1:r.push(f),a.push(d.yytext),n.push(d.yylloc),r.push(E[1]),f=null,l=d.yyleng,o=d.yytext,c=d.yylineno,p=d.yylloc;break;case 2:if(b=this.productions_[E[1]][1],T.$=a[a.length-b],T._$={first_line:n[n.length-(b||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(b||1)].first_column,last_column:n[n.length-1].last_column},_&&(T._$.range=[n[n.length-(b||1)].range[0],n[n.length-1].range[1]]),void 0!==(g=this.performAction.apply(T,[o,l,c,y.yy,E[1],a,n].concat(h))))return g;b&&(r=r.slice(0,-1*b*2),a=a.slice(0,-1*b),n=n.slice(0,-1*b)),r.push(this.productions_[E[1]][0]),a.push(T.$),n.push(T._$),k=s[r[r.length-2]][r[r.length-1]],r.push(k);break;case 3:return!0}}return!0}},k={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,r=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===i.length?this.yylloc.first_column:0)+i[i.length-r.length].length-r[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var r,i,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var n in a)this[n]=a[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,r,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),n=0;n<a.length;n++)if((r=this._input.match(this.rules[a[n]]))&&(!e||r[0].length>e[0].length)){if(e=r,i=n,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,a[n])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,a[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,r,i){switch(r){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:case 15:case 20:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 16:return 37;case 17:case 18:return 34;case 19:return 38;case 21:return this.popState(),17;case 22:case 54:return e.yytext[0];case 23:return 18;case 24:return 19;case 25:case 29:case 30:case 43:return 41;case 26:case 27:case 28:case 36:case 38:case 45:return 43;case 31:case 32:case 33:case 34:case 35:case 37:case 44:return 42;case 39:case 40:case 41:case 42:return 44;case 46:return 45;case 47:case 50:case 51:case 52:return 46;case 48:case 49:return 47;case 53:return 27;case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};function R(){this.yy={}}return b.lexer=k,R.prototype=b,b.Parser=R,new R}();_.parser=_;const f=_;let m={},E=[];const g=function(t,e=void 0){return void 0===m[t]?(m[t]={attributes:[],alias:e},i.l.info("Added new entity :",t)):m[t]&&!m[t].alias&&e&&(m[t].alias=e,i.l.info(`Add alias '${e}' to entity '${t}'`)),m[t]},O={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},getConfig:()=>(0,i.c)().er,addEntity:g,addAttributes:function(t,e){let r,a=g(t);for(r=e.length-1;r>=0;r--)a.attributes.push(e[r]),i.l.debug("Added attribute ",e[r].attributeName)},getEntities:()=>m,addRelationship:function(t,e,r,a){let n={entityA:t,roleA:e,entityB:r,relSpec:a};E.push(n),i.l.debug("Added new relationship :",n)},getRelationships:()=>E,clear:function(){m={},E=[],(0,i.t)()},setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,setDiagramTitle:i.q,getDiagramTitle:i.r},b={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},k=b,R=function(t,e){let r;t.append("defs").append("marker").attr("id",b.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",b.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",b.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",b.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},N=/[^\dA-Za-z](\W)*/g;let T={},x=new Map;const A=function(t,e,r){let a;return Object.keys(e).forEach((function(n){const s=function(t="",e=""){const r=t.replace(N,"");return`${v(e)}${v(r)}${p(t,I)}`}(n,"entity");x.set(n,s);const o=t.append("g").attr("id",s);a=void 0===a?s:a;const c="text-"+s,l=o.append("text").classed("er entityLabel",!0).attr("id",c).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e[n].alias??n),{width:h,height:d}=((t,e,r)=>{const a=T.entityPadding/3,n=T.entityPadding/3,s=.85*T.fontSize,o=e.node().getBBox(),c=[];let l=!1,h=!1,d=0,y=0,u=0,p=0,_=o.height+2*a,f=1;r.forEach((t=>{void 0!==t.attributeKeyTypeList&&t.attributeKeyTypeList.length>0&&(l=!0),void 0!==t.attributeComment&&(h=!0)})),r.forEach((r=>{const n=`${e.node().id}-attr-${f}`;let o=0;const m=(0,i.v)(r.attributeType),E=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(m),g=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeName),O={};O.tn=E,O.nn=g;const b=E.node().getBBox(),k=g.node().getBBox();if(d=Math.max(d,b.width),y=Math.max(y,k.width),o=Math.max(b.height,k.height),l){const e=void 0!==r.attributeKeyTypeList?r.attributeKeyTypeList.join(","):"",a=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(e);O.kn=a;const c=a.node().getBBox();u=Math.max(u,c.width),o=Math.max(o,c.height)}if(h){const e=t.append("text").classed("er entityLabel",!0).attr("id",`${n}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",(0,i.c)().fontFamily).style("font-size",s+"px").text(r.attributeComment||"");O.cn=e;const a=e.node().getBBox();p=Math.max(p,a.width),o=Math.max(o,a.height)}O.height=o,c.push(O),_+=o+2*a,f+=1}));let m=4;l&&(m+=2),h&&(m+=2);const E=d+y+u+p,g={width:Math.max(T.minEntityWidth,Math.max(o.width+2*T.entityPadding,E+n*m)),height:r.length>0?_:Math.max(T.minEntityHeight,o.height+2*T.entityPadding)};if(r.length>0){const r=Math.max(0,(g.width-E-n*m)/(m/2));e.attr("transform","translate("+g.width/2+","+(a+o.height/2)+")");let i=o.height+2*a,s="attributeBoxOdd";c.forEach((e=>{const o=i+a+e.height/2;e.tn.attr("transform","translate("+n+","+o+")");const c=t.insert("rect","#"+e.tn.node().id).classed(`er ${s}`,!0).attr("x",0).attr("y",i).attr("width",d+2*n+r).attr("height",e.height+2*a),_=parseFloat(c.attr("x"))+parseFloat(c.attr("width"));e.nn.attr("transform","translate("+(_+n)+","+o+")");const f=t.insert("rect","#"+e.nn.node().id).classed(`er ${s}`,!0).attr("x",_).attr("y",i).attr("width",y+2*n+r).attr("height",e.height+2*a);let m=parseFloat(f.attr("x"))+parseFloat(f.attr("width"));if(l){e.kn.attr("transform","translate("+(m+n)+","+o+")");const c=t.insert("rect","#"+e.kn.node().id).classed(`er ${s}`,!0).attr("x",m).attr("y",i).attr("width",u+2*n+r).attr("height",e.height+2*a);m=parseFloat(c.attr("x"))+parseFloat(c.attr("width"))}h&&(e.cn.attr("transform","translate("+(m+n)+","+o+")"),t.insert("rect","#"+e.cn.node().id).classed(`er ${s}`,"true").attr("x",m).attr("y",i).attr("width",p+2*n+r).attr("height",e.height+2*a)),i+=e.height+2*a,s="attributeBoxOdd"===s?"attributeBoxEven":"attributeBoxOdd"}))}else g.height=Math.max(T.minEntityHeight,_),e.attr("transform","translate("+g.width/2+","+g.height/2+")");return g})(o,l,e[n].attributes),y=o.insert("rect","#"+c).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",h).attr("height",d).node().getBBox();r.setNode(s,{width:y.width,height:y.height,shape:"rect",id:s})})),a},M=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")};let w=0;const I="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function v(t=""){return t.length>0?`${t}-`:""}const D={parser:f,db:O,renderer:{setConf:function(t){const e=Object.keys(t);for(const r of e)T[r]=t[r]},draw:function(t,e,r,o){T=(0,i.c)().er,i.l.info("Drawing ER diagram");const c=(0,i.c)().securityLevel;let l;"sandbox"===c&&(l=(0,n.Ys)("#i"+e));const h=("sandbox"===c?(0,n.Ys)(l.nodes()[0].contentDocument.body):(0,n.Ys)("body")).select(`[id='${e}']`);let d;R(h,T),d=new a.k({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:T.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));const y=A(h,o.db.getEntities(),d),u=function(t,e){return t.forEach((function(t){e.setEdge(x.get(t.entityA),x.get(t.entityB),{relationship:t},M(t))})),t}(o.db.getRelationships(),d);var p,_;(0,s.bK)(d),p=h,(_=d).nodes().forEach((function(t){void 0!==t&&void 0!==_.node(t)&&p.select("#"+t).attr("transform","translate("+(_.node(t).x-_.node(t).width/2)+","+(_.node(t).y-_.node(t).height/2)+" )")})),u.forEach((function(t){!function(t,e,r,a,s){w++;const o=r.edge(x.get(e.entityA),x.get(e.entityB),M(e)),c=(0,n.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.$0Z),l=t.insert("path","#"+a).classed("er relationshipLine",!0).attr("d",c(o.points)).style("stroke",T.stroke).style("fill","none");e.relSpec.relType===s.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let h="";switch(T.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_ONE_END+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ZERO_OR_MORE_END+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+h+"#"+k.ONE_OR_MORE_END+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+h+"#"+k.ONLY_ONE_END+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+h+"#"+k.MD_PARENT_END+")")}switch(e.relSpec.cardB){case s.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_ONE_START+")");break;case s.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ZERO_OR_MORE_START+")");break;case s.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+h+"#"+k.ONE_OR_MORE_START+")");break;case s.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+h+"#"+k.ONLY_ONE_START+")");break;case s.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+h+"#"+k.MD_PARENT_START+")")}const d=l.node().getTotalLength(),y=l.node().getPointAtLength(.5*d),u="rel"+w,p=t.append("text").classed("er relationshipLabel",!0).attr("id",u).attr("x",y.x).attr("y",y.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",(0,i.c)().fontFamily).style("font-size",T.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+u).classed("er relationshipLabelBox",!0).attr("x",y.x-p.width/2).attr("y",y.y-p.height/2).attr("width",p.width).attr("height",p.height)}(h,t,d,y,o)}));const f=T.diagramPadding;i.u.insertTitle(h,"entityTitleText",T.titleTopMargin,o.db.getDiagramTitle());const m=h.node().getBBox(),E=m.width+2*f,g=m.height+2*f;(0,i.i)(h,g,E,T.useMaxWidth),h.attr("viewBox",`${m.x-f} ${m.y-f} ${E} ${g}`)}},styles:t=>`\n .entityBox {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${t.attributeBackgroundColorOdd};\n stroke: ${t.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${t.attributeBackgroundColorEven};\n stroke: ${t.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${t.tertiaryColor};\n opacity: 0.7;\n background-color: ${t.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${t.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n }\n \n`}}}]); \ No newline at end of file diff --git a/assets/js/51ad0f66.4bc6fee4.js b/assets/js/51ad0f66.4bc6fee4.js new file mode 100644 index 0000000000..f2e61e2953 --- /dev/null +++ b/assets/js/51ad0f66.4bc6fee4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5713],{56778:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>i});var s=n(85893),t=n(11151);const c={},o="EMISSION_RATE",d={id:"about/references/keywords/EMISSION_RATE",title:"EMISSION_RATE",description:"Deprecated from eCalc v8.8 (is included in EMISSION).",source:"@site/docs/about/references/keywords/EMISSION_RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME"},next:{title:"EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"emission_rate",children:"EMISSION_RATE"}),"\n",(0,s.jsx)("span",{className:"major-change-deprecation",children:(0,s.jsxs)(r.p,{children:["Deprecated from eCalc v8.8 (is included in ",(0,s.jsx)("strong",{children:"EMISSION"}),")."]})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_RATE",children:"EMISSION_RATE"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Yes"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"EMITTER_MODEL"})}),(0,s.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Used to define the emission rate for some ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," types\nusing an ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"})]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSION_RATE: <emission rate [kg/day] expression or time series>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSION_RATE: 10.0 # [kg/day]\n"})})]})}function h(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var s=n(67294);const t={},c=s.createContext(t);function o(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54.232956f2.js b/assets/js/54.232956f2.js new file mode 100644 index 0000000000..ebe99182bb --- /dev/null +++ b/assets/js/54.232956f2.js @@ -0,0 +1,1410 @@ +"use strict"; +exports.id = 54; +exports.ids = [54]; +exports.modules = { + +/***/ 15054: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/min.js +function min(values, valueof) { + let min; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } + return min; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/align.js + + +function targetDepth(d) { + return d.target.depth; +} + +function left(node) { + return node.depth; +} + +function right(node, n) { + return n - 1 - node.height; +} + +function justify(node, n) { + return node.sourceLinks.length ? node.depth : n - 1; +} + +function center(node) { + return node.targetLinks.length ? node.depth + : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1 + : 0; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/sum.js +function sum(values, valueof) { + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value = +value) { + sum += value; + } + } + } else { + let index = -1; + for (let value of values) { + if (value = +valueof(value, ++index, values)) { + sum += value; + } + } + } + return sum; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-array/src/max.js +function max(values, valueof) { + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } + return max; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/constant.js +function constant(x) { + return function() { + return x; + }; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/sankey.js + + + + +function ascendingSourceBreadth(a, b) { + return ascendingBreadth(a.source, b.source) || a.index - b.index; +} + +function ascendingTargetBreadth(a, b) { + return ascendingBreadth(a.target, b.target) || a.index - b.index; +} + +function ascendingBreadth(a, b) { + return a.y0 - b.y0; +} + +function value(d) { + return d.value; +} + +function defaultId(d) { + return d.index; +} + +function defaultNodes(graph) { + return graph.nodes; +} + +function defaultLinks(graph) { + return graph.links; +} + +function find(nodeById, id) { + const node = nodeById.get(id); + if (!node) throw new Error("missing: " + id); + return node; +} + +function computeLinkBreadths({nodes}) { + for (const node of nodes) { + let y0 = node.y0; + let y1 = y0; + for (const link of node.sourceLinks) { + link.y0 = y0 + link.width / 2; + y0 += link.width; + } + for (const link of node.targetLinks) { + link.y1 = y1 + link.width / 2; + y1 += link.width; + } + } +} + +function Sankey() { + let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent + let dx = 24; // nodeWidth + let dy = 8, py; // nodePadding + let id = defaultId; + let align = justify; + let sort; + let linkSort; + let nodes = defaultNodes; + let links = defaultLinks; + let iterations = 6; + + function sankey() { + const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)}; + computeNodeLinks(graph); + computeNodeValues(graph); + computeNodeDepths(graph); + computeNodeHeights(graph); + computeNodeBreadths(graph); + computeLinkBreadths(graph); + return graph; + } + + sankey.update = function(graph) { + computeLinkBreadths(graph); + return graph; + }; + + sankey.nodeId = function(_) { + return arguments.length ? (id = typeof _ === "function" ? _ : constant(_), sankey) : id; + }; + + sankey.nodeAlign = function(_) { + return arguments.length ? (align = typeof _ === "function" ? _ : constant(_), sankey) : align; + }; + + sankey.nodeSort = function(_) { + return arguments.length ? (sort = _, sankey) : sort; + }; + + sankey.nodeWidth = function(_) { + return arguments.length ? (dx = +_, sankey) : dx; + }; + + sankey.nodePadding = function(_) { + return arguments.length ? (dy = py = +_, sankey) : dy; + }; + + sankey.nodes = function(_) { + return arguments.length ? (nodes = typeof _ === "function" ? _ : constant(_), sankey) : nodes; + }; + + sankey.links = function(_) { + return arguments.length ? (links = typeof _ === "function" ? _ : constant(_), sankey) : links; + }; + + sankey.linkSort = function(_) { + return arguments.length ? (linkSort = _, sankey) : linkSort; + }; + + sankey.size = function(_) { + return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0]; + }; + + sankey.extent = function(_) { + return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]]; + }; + + sankey.iterations = function(_) { + return arguments.length ? (iterations = +_, sankey) : iterations; + }; + + function computeNodeLinks({nodes, links}) { + for (const [i, node] of nodes.entries()) { + node.index = i; + node.sourceLinks = []; + node.targetLinks = []; + } + const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])); + for (const [i, link] of links.entries()) { + link.index = i; + let {source, target} = link; + if (typeof source !== "object") source = link.source = find(nodeById, source); + if (typeof target !== "object") target = link.target = find(nodeById, target); + source.sourceLinks.push(link); + target.targetLinks.push(link); + } + if (linkSort != null) { + for (const {sourceLinks, targetLinks} of nodes) { + sourceLinks.sort(linkSort); + targetLinks.sort(linkSort); + } + } + } + + function computeNodeValues({nodes}) { + for (const node of nodes) { + node.value = node.fixedValue === undefined + ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value)) + : node.fixedValue; + } + } + + function computeNodeDepths({nodes}) { + const n = nodes.length; + let current = new Set(nodes); + let next = new Set; + let x = 0; + while (current.size) { + for (const node of current) { + node.depth = x; + for (const {target} of node.sourceLinks) { + next.add(target); + } + } + if (++x > n) throw new Error("circular link"); + current = next; + next = new Set; + } + } + + function computeNodeHeights({nodes}) { + const n = nodes.length; + let current = new Set(nodes); + let next = new Set; + let x = 0; + while (current.size) { + for (const node of current) { + node.height = x; + for (const {source} of node.targetLinks) { + next.add(source); + } + } + if (++x > n) throw new Error("circular link"); + current = next; + next = new Set; + } + } + + function computeNodeLayers({nodes}) { + const x = max(nodes, d => d.depth) + 1; + const kx = (x1 - x0 - dx) / (x - 1); + const columns = new Array(x); + for (const node of nodes) { + const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x)))); + node.layer = i; + node.x0 = x0 + i * kx; + node.x1 = node.x0 + dx; + if (columns[i]) columns[i].push(node); + else columns[i] = [node]; + } + if (sort) for (const column of columns) { + column.sort(sort); + } + return columns; + } + + function initializeNodeBreadths(columns) { + const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value)); + for (const nodes of columns) { + let y = y0; + for (const node of nodes) { + node.y0 = y; + node.y1 = y + node.value * ky; + y = node.y1 + py; + for (const link of node.sourceLinks) { + link.width = link.value * ky; + } + } + y = (y1 - y + py) / (nodes.length + 1); + for (let i = 0; i < nodes.length; ++i) { + const node = nodes[i]; + node.y0 += y * (i + 1); + node.y1 += y * (i + 1); + } + reorderLinks(nodes); + } + } + + function computeNodeBreadths(graph) { + const columns = computeNodeLayers(graph); + py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1)); + initializeNodeBreadths(columns); + for (let i = 0; i < iterations; ++i) { + const alpha = Math.pow(0.99, i); + const beta = Math.max(1 - alpha, (i + 1) / iterations); + relaxRightToLeft(columns, alpha, beta); + relaxLeftToRight(columns, alpha, beta); + } + } + + // Reposition each node based on its incoming (target) links. + function relaxLeftToRight(columns, alpha, beta) { + for (let i = 1, n = columns.length; i < n; ++i) { + const column = columns[i]; + for (const target of column) { + let y = 0; + let w = 0; + for (const {source, value} of target.targetLinks) { + let v = value * (target.layer - source.layer); + y += targetTop(source, target) * v; + w += v; + } + if (!(w > 0)) continue; + let dy = (y / w - target.y0) * alpha; + target.y0 += dy; + target.y1 += dy; + reorderNodeLinks(target); + } + if (sort === undefined) column.sort(ascendingBreadth); + resolveCollisions(column, beta); + } + } + + // Reposition each node based on its outgoing (source) links. + function relaxRightToLeft(columns, alpha, beta) { + for (let n = columns.length, i = n - 2; i >= 0; --i) { + const column = columns[i]; + for (const source of column) { + let y = 0; + let w = 0; + for (const {target, value} of source.sourceLinks) { + let v = value * (target.layer - source.layer); + y += sourceTop(source, target) * v; + w += v; + } + if (!(w > 0)) continue; + let dy = (y / w - source.y0) * alpha; + source.y0 += dy; + source.y1 += dy; + reorderNodeLinks(source); + } + if (sort === undefined) column.sort(ascendingBreadth); + resolveCollisions(column, beta); + } + } + + function resolveCollisions(nodes, alpha) { + const i = nodes.length >> 1; + const subject = nodes[i]; + resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha); + resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha); + resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha); + resolveCollisionsTopToBottom(nodes, y0, 0, alpha); + } + + // Push any overlapping nodes down. + function resolveCollisionsTopToBottom(nodes, y, i, alpha) { + for (; i < nodes.length; ++i) { + const node = nodes[i]; + const dy = (y - node.y0) * alpha; + if (dy > 1e-6) node.y0 += dy, node.y1 += dy; + y = node.y1 + py; + } + } + + // Push any overlapping nodes up. + function resolveCollisionsBottomToTop(nodes, y, i, alpha) { + for (; i >= 0; --i) { + const node = nodes[i]; + const dy = (node.y1 - y) * alpha; + if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy; + y = node.y0 - py; + } + } + + function reorderNodeLinks({sourceLinks, targetLinks}) { + if (linkSort === undefined) { + for (const {source: {sourceLinks}} of targetLinks) { + sourceLinks.sort(ascendingTargetBreadth); + } + for (const {target: {targetLinks}} of sourceLinks) { + targetLinks.sort(ascendingSourceBreadth); + } + } + } + + function reorderLinks(nodes) { + if (linkSort === undefined) { + for (const {sourceLinks, targetLinks} of nodes) { + sourceLinks.sort(ascendingTargetBreadth); + targetLinks.sort(ascendingSourceBreadth); + } + } + } + + // Returns the target.y0 that would produce an ideal link from source to target. + function targetTop(source, target) { + let y = source.y0 - (source.sourceLinks.length - 1) * py / 2; + for (const {target: node, width} of source.sourceLinks) { + if (node === target) break; + y += width + py; + } + for (const {source: node, width} of target.targetLinks) { + if (node === source) break; + y -= width; + } + return y; + } + + // Returns the source.y0 that would produce an ideal link from source to target. + function sourceTop(source, target) { + let y = target.y0 - (target.targetLinks.length - 1) * py / 2; + for (const {source: node, width} of target.targetLinks) { + if (node === source) break; + y += width + py; + } + for (const {target: node, width} of source.sourceLinks) { + if (node === target) break; + y -= width; + } + return y; + } + + return sankey; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-path/src/path.js +var pi = Math.PI, + tau = 2 * pi, + epsilon = 1e-6, + tauEpsilon = tau - epsilon; + +function Path() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; +} + +function path() { + return new Path; +} + +Path.prototype = path.prototype = { + constructor: Path, + moveTo: function(x, y) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); + }, + closePath: function() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._ += "Z"; + } + }, + lineTo: function(x, y) { + this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); + }, + quadraticCurveTo: function(x1, y1, x, y) { + this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { + this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + arcTo: function(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + var x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon)); + + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { + this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Otherwise, draw an arc! + else { + var x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon) { + this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); + } + + this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); + } + }, + arc: function(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r, ccw = !!ccw; + var dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._ += "M" + x0 + "," + y0; + } + + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { + this._ += "L" + x0 + "," + y0; + } + + // Is this arc empty? We’re done. + if (!r) return; + + // Does the angle go the wrong way? Flip the direction. + if (da < 0) da = da % tau + tau; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); + } + + // Is this arc non-empty? Draw an arc! + else if (da > epsilon) { + this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); + } + }, + rect: function(x, y, w, h) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; + }, + toString: function() { + return this._; + } +}; + +/* harmony default export */ const src_path = (path); + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/array.js +var slice = Array.prototype.slice; + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/constant.js +/* harmony default export */ function src_constant(x) { + return function constant() { + return x; + }; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/point.js +function point_x(p) { + return p[0]; +} + +function point_y(p) { + return p[1]; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/node_modules/d3-shape/src/link/index.js + + + + + + +function linkSource(d) { + return d.source; +} + +function linkTarget(d) { + return d.target; +} + +function link_link(curve) { + var source = linkSource, + target = linkTarget, + x = point_x, + y = point_y, + context = null; + + function link() { + var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); + if (!context) context = buffer = src_path(); + curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); + if (buffer) return context = null, buffer + "" || null; + } + + link.source = function(_) { + return arguments.length ? (source = _, link) : source; + }; + + link.target = function(_) { + return arguments.length ? (target = _, link) : target; + }; + + link.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : src_constant(+_), link) : x; + }; + + link.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : src_constant(+_), link) : y; + }; + + link.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), link) : context; + }; + + return link; +} + +function curveHorizontal(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); +} + +function curveVertical(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); +} + +function curveRadial(context, x0, y0, x1, y1) { + var p0 = pointRadial(x0, y0), + p1 = pointRadial(x0, y0 = (y0 + y1) / 2), + p2 = pointRadial(x1, y0), + p3 = pointRadial(x1, y1); + context.moveTo(p0[0], p0[1]); + context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); +} + +function linkHorizontal() { + return link_link(curveHorizontal); +} + +function linkVertical() { + return link_link(curveVertical); +} + +function linkRadial() { + var l = link_link(curveRadial); + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + return l; +} + +;// CONCATENATED MODULE: ./node_modules/d3-sankey/src/sankeyLinkHorizontal.js + + +function horizontalSource(d) { + return [d.source.x1, d.y0]; +} + +function horizontalTarget(d) { + return [d.target.x0, d.y1]; +} + +/* harmony default export */ function sankeyLinkHorizontal() { + return linkHorizontal() + .source(horizontalSource) + .target(horizontalTarget); +} + +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs +var purify_es = __webpack_require__(22424); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/sankeyDiagram-0acdec17.js + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 9], $V1 = [1, 10], $V2 = [1, 5, 10, 12]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SANKEY": 4, "NEWLINE": 5, "csv": 6, "opt_eof": 7, "record": 8, "csv_tail": 9, "EOF": 10, "field[source]": 11, "COMMA": 12, "field[target]": 13, "field[value]": 14, "field": 15, "escaped": 16, "non_escaped": 17, "DQUOTE": 18, "ESCAPED_TEXT": 19, "NON_ESCAPED_TEXT": 20, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SANKEY", 5: "NEWLINE", 10: "EOF", 11: "field[source]", 12: "COMMA", 13: "field[target]", 14: "field[value]", 18: "DQUOTE", 19: "ESCAPED_TEXT", 20: "NON_ESCAPED_TEXT" }, + productions_: [0, [3, 4], [6, 2], [9, 2], [9, 0], [7, 1], [7, 0], [8, 5], [15, 1], [15, 1], [16, 3], [17, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 7: + const source = yy.findOrCreateNode($$[$0 - 4].trim().replaceAll('""', '"')); + const target = yy.findOrCreateNode($$[$0 - 2].trim().replaceAll('""', '"')); + const value = parseFloat($$[$0].trim()); + yy.addLink(source, target, value); + break; + case 8: + case 9: + case 11: + this.$ = $$[$0]; + break; + case 10: + this.$ = $$[$0 - 1]; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, { 5: [1, 3] }, { 6: 4, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 1: [2, 6], 7: 11, 10: [1, 12] }, o($V1, [2, 4], { 9: 13, 5: [1, 14] }), { 12: [1, 15] }, o($V2, [2, 8]), o($V2, [2, 9]), { 19: [1, 16] }, o($V2, [2, 11]), { 1: [2, 1] }, { 1: [2, 5] }, o($V1, [2, 2]), { 6: 17, 8: 5, 15: 6, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 15: 18, 16: 7, 17: 8, 18: $V0, 20: $V1 }, { 18: [1, 19] }, o($V1, [2, 3]), { 12: [1, 20] }, o($V2, [2, 10]), { 15: 21, 16: 7, 17: 8, 18: $V0, 20: $V1 }, o([1, 5, 10], [2, 7])], + defaultActions: { 11: [2, 1], 12: [2, 5] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "easy_keword_rules": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.pushState("csv"); + return 4; + case 1: + return 10; + case 2: + return 5; + case 3: + return 12; + case 4: + this.pushState("escaped_text"); + return 18; + case 5: + return 20; + case 6: + this.popState("escaped_text"); + return 18; + case 7: + return 19; + } + }, + rules: [/^(?:sankey-beta\b)/, /^(?:$)/, /^(?:((\u000D\u000A)|(\u000A)))/, /^(?:(\u002C))/, /^(?:(\u0022))/, /^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/, /^(?:(\u0022)(?!(\u0022)))/, /^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/], + conditions: { "csv": { "rules": [1, 2, 3, 4, 5, 6, 7], "inclusive": false }, "escaped_text": { "rules": [6, 7], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let links = []; +let nodes = []; +let nodesMap = {}; +const clear = () => { + links = []; + nodes = []; + nodesMap = {}; + (0,mermaid_0603ccf8.t)(); +}; +class SankeyLink { + constructor(source, target, value = 0) { + this.source = source; + this.target = target; + this.value = value; + } +} +const addLink = (source, target, value) => { + links.push(new SankeyLink(source, target, value)); +}; +class SankeyNode { + constructor(ID) { + this.ID = ID; + } +} +const findOrCreateNode = (ID) => { + ID = mermaid_0603ccf8.e.sanitizeText(ID, (0,mermaid_0603ccf8.c)()); + if (!nodesMap[ID]) { + nodesMap[ID] = new SankeyNode(ID); + nodes.push(nodesMap[ID]); + } + return nodesMap[ID]; +}; +const getNodes = () => nodes; +const getLinks = () => links; +const getGraph = () => ({ + nodes: nodes.map((node) => ({ id: node.ID })), + links: links.map((link) => ({ + source: link.source.ID, + target: link.target.ID, + value: link.value + })) +}); +const db = { + nodesMap, + getConfig: () => (0,mermaid_0603ccf8.c)().sankey, + getNodes, + getLinks, + getGraph, + addLink, + findOrCreateNode, + getAccTitle: mermaid_0603ccf8.g, + setAccTitle: mermaid_0603ccf8.s, + getAccDescription: mermaid_0603ccf8.a, + setAccDescription: mermaid_0603ccf8.b, + getDiagramTitle: mermaid_0603ccf8.r, + setDiagramTitle: mermaid_0603ccf8.q, + clear +}; +const _Uid = class _Uid2 { + static next(name) { + return new _Uid2(name + ++_Uid2.count); + } + constructor(id) { + this.id = id; + this.href = `#${id}`; + } + toString() { + return "url(" + this.href + ")"; + } +}; +_Uid.count = 0; +let Uid = _Uid; +const alignmentsMap = { + left: left, + right: right, + center: center, + justify: justify +}; +const draw = function(text, id, _version, diagObj) { + const { securityLevel, sankey: conf } = (0,mermaid_0603ccf8.c)(); + const defaultSankeyConfig = mermaid_0603ccf8.H.sankey; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const svg = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,src/* select */.Ys)(`[id="${id}"]`); + const width = (conf == null ? void 0 : conf.width) ?? defaultSankeyConfig.width; + const height = (conf == null ? void 0 : conf.height) ?? defaultSankeyConfig.width; + const useMaxWidth = (conf == null ? void 0 : conf.useMaxWidth) ?? defaultSankeyConfig.useMaxWidth; + const nodeAlignment = (conf == null ? void 0 : conf.nodeAlignment) ?? defaultSankeyConfig.nodeAlignment; + const prefix = (conf == null ? void 0 : conf.prefix) ?? defaultSankeyConfig.prefix; + const suffix = (conf == null ? void 0 : conf.suffix) ?? defaultSankeyConfig.suffix; + const showValues = (conf == null ? void 0 : conf.showValues) ?? defaultSankeyConfig.showValues; + const graph = diagObj.db.getGraph(); + const nodeAlign = alignmentsMap[nodeAlignment]; + const nodeWidth = 10; + const sankey$1 = Sankey().nodeId((d) => d.id).nodeWidth(nodeWidth).nodePadding(10 + (showValues ? 15 : 0)).nodeAlign(nodeAlign).extent([ + [0, 0], + [width, height] + ]); + sankey$1(graph); + const colorScheme = (0,src/* scaleOrdinal */.PKp)(src/* schemeTableau10 */.K2I); + svg.append("g").attr("class", "nodes").selectAll(".node").data(graph.nodes).join("g").attr("class", "node").attr("id", (d) => (d.uid = Uid.next("node-")).id).attr("transform", function(d) { + return "translate(" + d.x0 + "," + d.y0 + ")"; + }).attr("x", (d) => d.x0).attr("y", (d) => d.y0).append("rect").attr("height", (d) => { + return d.y1 - d.y0; + }).attr("width", (d) => d.x1 - d.x0).attr("fill", (d) => colorScheme(d.id)); + const getText = ({ id: id2, value }) => { + if (!showValues) { + return id2; + } + return `${id2} +${prefix}${Math.round(value * 100) / 100}${suffix}`; + }; + svg.append("g").attr("class", "node-labels").attr("font-family", "sans-serif").attr("font-size", 14).selectAll("text").data(graph.nodes).join("text").attr("x", (d) => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6).attr("y", (d) => (d.y1 + d.y0) / 2).attr("dy", `${showValues ? "0" : "0.35"}em`).attr("text-anchor", (d) => d.x0 < width / 2 ? "start" : "end").text(getText); + const link = svg.append("g").attr("class", "links").attr("fill", "none").attr("stroke-opacity", 0.5).selectAll(".link").data(graph.links).join("g").attr("class", "link").style("mix-blend-mode", "multiply"); + const linkColor = (conf == null ? void 0 : conf.linkColor) || "gradient"; + if (linkColor === "gradient") { + const gradient = link.append("linearGradient").attr("id", (d) => (d.uid = Uid.next("linearGradient-")).id).attr("gradientUnits", "userSpaceOnUse").attr("x1", (d) => d.source.x1).attr("x2", (d) => d.target.x0); + gradient.append("stop").attr("offset", "0%").attr("stop-color", (d) => colorScheme(d.source.id)); + gradient.append("stop").attr("offset", "100%").attr("stop-color", (d) => colorScheme(d.target.id)); + } + let coloring; + switch (linkColor) { + case "gradient": + coloring = (d) => d.uid; + break; + case "source": + coloring = (d) => colorScheme(d.source.id); + break; + case "target": + coloring = (d) => colorScheme(d.target.id); + break; + default: + coloring = linkColor; + } + link.append("path").attr("d", sankeyLinkHorizontal()).attr("stroke", coloring).attr("stroke-width", (d) => Math.max(1, d.width)); + (0,mermaid_0603ccf8.o)(void 0, svg, 0, useMaxWidth); +}; +const renderer = { + draw +}; +const prepareTextForParsing = (text) => { + const textToParse = text.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g, "").replaceAll(/([\n\r])+/g, "\n").trim(); + return textToParse; +}; +const originalParse = parser$1.parse.bind(parser$1); +parser$1.parse = (text) => originalParse(prepareTextForParsing(text)); +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/54094f37.9512c0c0.js b/assets/js/54094f37.9512c0c0.js new file mode 100644 index 0000000000..e97eaee6ef --- /dev/null +++ b/assets/js/54094f37.9512c0c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3172],{10655:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>o,contentTitle:()=>d,default:()=>E,frontMatter:()=>c,metadata:()=>a,toc:()=>i});var s=n(85893),t=n(11151);const c={},d="EMITTER_MODEL",a={id:"about/references/keywords/EMITTER_MODEL",title:"EMITTER_MODEL",description:"Deprecated from eCalc v8.8 (replaced by EMISSION).",source:"@site/docs/about/references/keywords/EMITTER_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMITTER_MODEL",permalink:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMITTER_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE"},next:{title:"END",permalink:"/ecalc/docs/about/references/keywords/END"}},o={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"emitter_model",children:"EMITTER_MODEL"}),"\n",(0,s.jsx)("span",{className:"major-change-deprecation",children:(0,s.jsxs)(r.p,{children:["Deprecated from eCalc v8.8 (replaced by ",(0,s.jsx)("strong",{children:"EMISSION"}),")."]})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"No"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"VENTING_EMITTERS"})}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"EMISSION_RATE"})})]})})]}),"\n",(0,s.jsx)(r.admonition,{type:"important",children:(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["eCalc version 8.8: ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMITTER_MODEL"})," is deprecated, and replaced by new ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"})," keyword."]}),"\n",(0,s.jsxs)(r.li,{children:["eCalc version 8.7: ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword is replacing the ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword."]}),"\n",(0,s.jsx)(r.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(r.p,{children:"The emitter model specifies the data to calculate the direct emissions on an installation. This data is used to set up\na function that may be evaluated for a set of time series and return an emission result."}),"\n",(0,s.jsxs)(r.p,{children:["The ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_RATE",children:"EMISSION_RATE"})," describes the rate [kg/day] of emissions, and is required."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMITTER_MODEL:\n - EMISSION_RATE: <emission rate [kg/day]>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMITTER_MODEL:\n - EMISSION_RATE: 4 # [kg/day]\n"})})]})}function E(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>d});var s=n(67294);const t={},c=s.createContext(t);function d(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54d7341e.d7e29d8d.js b/assets/js/54d7341e.d7e29d8d.js new file mode 100644 index 0000000000..0ac70de742 --- /dev/null +++ b/assets/js/54d7341e.d7e29d8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[510],{17379:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>_,frontMatter:()=>t,metadata:()=>c,toc:()=>E});var r=s(85893),o=s(11151);const t={},i="MAXIMUM_PRESSURE_RATIO_PER_STAGE",c={id:"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",description:"MODELS /",source:"@site/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"},next:{title:"MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS"}},a={},E=[{value:"Description",id:"description",level:2},{value:"Functionality",id:"functionality",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"maximum_pressure_ratio_per_stage",children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})," is used in the process of determining (at run time) the number of compressors\nin a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"}),"\nwith unknown stages. The number of compressors is set such that there are just enough compressors to ensure no pressure ratios are above the given\n",(0,r.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"functionality",children:"Functionality"}),"\n",(0,r.jsxs)(n.p,{children:["This is an optional setting and is ",(0,r.jsx)(n.strong,{children:"only"})," supported for ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})," with unknown stages, i.e. if ",(0,r.jsx)(n.code,{children:"STAGES"})," are not specified."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]>\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>\n COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>\n INLET_TEMPERATURE: <inlet temperature for all stages>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: some_fluid_model\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: some_compressor_chart\n INLET_TEMPERATURE: 30\n ...\n"})})]})}function _(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>i});var r=s(67294);const o={},t=r.createContext(o);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5525.1fda8ddb.js b/assets/js/5525.1fda8ddb.js new file mode 100644 index 0000000000..5ae897ee8a --- /dev/null +++ b/assets/js/5525.1fda8ddb.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5525],{15525:()=>{}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.ffe88e68.js b/assets/js/55960ee5.ffe88e68.js new file mode 100644 index 0000000000..f1c406646c --- /dev/null +++ b/assets/js/55960ee5.ffe88e68.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4121],{88070:e=>{e.exports=JSON.parse('[{"label":"release","permalink":"/ecalc/docs/tags/release","count":19},{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","count":19}]')}}]); \ No newline at end of file diff --git a/assets/js/5718.548e327d.js b/assets/js/5718.548e327d.js new file mode 100644 index 0000000000..aca970bea7 --- /dev/null +++ b/assets/js/5718.548e327d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5718],{65718:(t,i,n)=>{n.d(i,{diagram:()=>o});var s=n(28758),e=(n(27484),n(17967),n(64218),n(27856),function(){var t=function(t,i,n,s){for(n=n||{},s=t.length;s--;n[t[s]]=i);return n},i=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,i,n,s,e,r,h){switch(r.length,e){case 1:return s;case 4:break;case 6:s.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(i,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(i,[2,3]),t(i,[2,4]),t(i,[2,5]),t(i,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,i){if(!i.recoverable){var n=new Error(t);throw n.hash=i,n}this.trace(t)},parse:function(t){var i=this,n=[0],s=[],e=[null],r=[],h=this.table,o="",l=0,c=0,a=r.slice.call(arguments,1),y=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);y.setInput(t,u.yy),u.yy.lexer=y,u.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var f=y.yylloc;r.push(f);var g=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var _,m,d,k,x,b,v,w,I,S={};;){if(m=n[n.length-1],this.defaultActions[m]?d=this.defaultActions[m]:(null==_&&(I=void 0,"number"!=typeof(I=s.pop()||y.lex()||1)&&(I instanceof Array&&(I=(s=I).pop()),I=i.symbols_[I]||I),_=I),d=h[m]&&h[m][_]),void 0===d||!d.length||!d[0]){var E="";for(x in w=[],h[m])this.terminals_[x]&&x>2&&w.push("'"+this.terminals_[x]+"'");E=y.showPosition?"Parse error on line "+(l+1)+":\n"+y.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[_]||_)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==_?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[_]||_,line:y.yylineno,loc:f,expected:w})}if(d[0]instanceof Array&&d.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+_);switch(d[0]){case 1:n.push(_),e.push(y.yytext),r.push(y.yylloc),n.push(d[1]),_=null,c=y.yyleng,o=y.yytext,l=y.yylineno,f=y.yylloc;break;case 2:if(b=this.productions_[d[1]][1],S.$=e[e.length-b],S._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},g&&(S._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(S,[o,c,l,u.yy,d[1],e,r].concat(a))))return k;b&&(n=n.slice(0,-1*b*2),e=e.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[d[1]][0]),e.push(S.$),r.push(S._$),v=h[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},s={EOF:1,parseError:function(t,i){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+i+"^"},test_match:function(t,i){var n,s,e;if(this.options.backtrack_lexer&&(e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(e.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in e)this[r]=e[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,i,n,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var e=this._currentRules(),r=0;r<e.length;r++)if((n=this._input.match(this.rules[e[r]]))&&(!i||n[0].length>i[0].length)){if(i=n,s=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,e[r])))return t;if(this._backtrack){i=!1;continue}return!1}if(!this.options.flex)break}return i?!1!==(t=this.test_match(i,e[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,i,n,s){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function e(){this.yy={}}return n.lexer=s,e.prototype=n,n.Parser=e,new e}());e.parser=e;const r=!1;let h=r;const o={parser:e,db:{clear:()=>{h=r},setInfo:t=>{h=t},getInfo:()=>h},renderer:{draw:(t,i,n)=>{s.l.debug("rendering info diagram\n"+t);const e=(0,s.z)(i);(0,s.i)(e,100,400,!0);e.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${n}`)}}}}}]); \ No newline at end of file diff --git a/assets/js/577.c4cd051f.js b/assets/js/577.c4cd051f.js new file mode 100644 index 0000000000..1325a648fb --- /dev/null +++ b/assets/js/577.c4cd051f.js @@ -0,0 +1,10323 @@ +"use strict"; +exports.id = 577; +exports.ids = [577]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 6577: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 64 modules +var dagre = __webpack_require__(41644); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).slice(1)); +} + +function unsafeStringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; +} + +function stringify(arr, offset = 0) { + const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +/* harmony default export */ const esm_node_stringify = ((/* unused pure expression or super */ null && (stringify))); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js +/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js + + +function validate_validate(uuid) { + return typeof uuid === 'string' && regex.test(uuid); +} + +/* harmony default export */ const esm_node_validate = (validate_validate); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js + + +function parse(uuid) { + if (!esm_node_validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +/* harmony default export */ const esm_node_parse = (parse); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js + + + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +function v35(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + var _namespace; + + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = esm_node_parse(namespace); + } + + if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return unsafeStringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} +// EXTERNAL MODULE: external "crypto" +var external_crypto_ = __webpack_require__(6113); +var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js + + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return external_crypto_default().createHash('sha1').update(bytes).digest(); +} + +/* harmony default export */ const esm_node_sha1 = (sha1); +;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js + + +const v5 = v35('v5', 0x50, esm_node_sha1); +/* harmony default export */ const esm_node_v5 = (v5); +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs +var purify_es = __webpack_require__(22424); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/erDiagram-0ea73325.js + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 8, 10, 20, 22, 24, 26, 27, 28], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 14], $V6 = [1, 15], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 25], $Vc = [6, 8, 10, 13, 15, 18, 19, 20, 22, 24, 26, 27, 28, 41, 42, 43, 44, 45], $Vd = [1, 34], $Ve = [27, 28, 46, 47], $Vf = [41, 42, 43, 44, 45], $Vg = [17, 34], $Vh = [1, 54], $Vi = [1, 53], $Vj = [17, 34, 36, 38]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "ER_DIAGRAM": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "entityName": 11, "relSpec": 12, ":": 13, "role": 14, "BLOCK_START": 15, "attributes": 16, "BLOCK_STOP": 17, "SQS": 18, "SQE": 19, "title": 20, "title_value": 21, "acc_title": 22, "acc_title_value": 23, "acc_descr": 24, "acc_descr_value": 25, "acc_descr_multiline_value": 26, "ALPHANUM": 27, "ENTITY_NAME": 28, "attribute": 29, "attributeType": 30, "attributeName": 31, "attributeKeyTypeList": 32, "attributeComment": 33, "ATTRIBUTE_WORD": 34, "attributeKeyType": 35, "COMMA": 36, "ATTRIBUTE_KEY": 37, "COMMENT": 38, "cardinality": 39, "relType": 40, "ZERO_OR_ONE": 41, "ZERO_OR_MORE": 42, "ONE_OR_MORE": 43, "ONLY_ONE": 44, "MD_PARENT": 45, "NON_IDENTIFYING": 46, "IDENTIFYING": 47, "WORD": 48, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 13: ":", 15: "BLOCK_START", 17: "BLOCK_STOP", 18: "SQS", 19: "SQE", 20: "title", 21: "title_value", 22: "acc_title", 23: "acc_title_value", 24: "acc_descr", 25: "acc_descr_value", 26: "acc_descr_multiline_value", 27: "ALPHANUM", 28: "ENTITY_NAME", 34: "ATTRIBUTE_WORD", 36: "COMMA", 37: "ATTRIBUTE_KEY", 38: "COMMENT", 41: "ZERO_OR_ONE", 42: "ZERO_OR_MORE", 43: "ONE_OR_MORE", 44: "ONLY_ONE", 45: "MD_PARENT", 46: "NON_IDENTIFYING", 47: "IDENTIFYING", 48: "WORD" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 5], [9, 4], [9, 3], [9, 1], [9, 7], [9, 6], [9, 4], [9, 2], [9, 2], [9, 2], [9, 1], [11, 1], [11, 1], [16, 1], [16, 2], [29, 2], [29, 3], [29, 3], [29, 4], [30, 1], [31, 1], [32, 1], [32, 3], [35, 1], [33, 1], [12, 3], [39, 1], [39, 1], [39, 1], [39, 1], [39, 1], [40, 1], [40, 1], [14, 1], [14, 1], [14, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + break; + case 2: + this.$ = []; + break; + case 3: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 4: + case 5: + this.$ = $$[$0]; + break; + case 6: + case 7: + this.$ = []; + break; + case 8: + yy.addEntity($$[$0 - 4]); + yy.addEntity($$[$0 - 2]); + yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]); + break; + case 9: + yy.addEntity($$[$0 - 3]); + yy.addAttributes($$[$0 - 3], $$[$0 - 1]); + break; + case 10: + yy.addEntity($$[$0 - 2]); + break; + case 11: + yy.addEntity($$[$0]); + break; + case 12: + yy.addEntity($$[$0 - 6], $$[$0 - 4]); + yy.addAttributes($$[$0 - 6], $$[$0 - 1]); + break; + case 13: + yy.addEntity($$[$0 - 5], $$[$0 - 3]); + break; + case 14: + yy.addEntity($$[$0 - 3], $$[$0 - 1]); + break; + case 15: + case 16: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 17: + case 18: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 19: + case 43: + this.$ = $$[$0]; + break; + case 20: + case 41: + case 42: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 21: + case 29: + this.$ = [$$[$0]]; + break; + case 22: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 23: + this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] }; + break; + case 24: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] }; + break; + case 25: + this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 26: + this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] }; + break; + case 27: + case 28: + case 31: + this.$ = $$[$0]; + break; + case 30: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 32: + this.$ = $$[$0].replace(/"/g, ""); + break; + case 33: + this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] }; + break; + case 34: + this.$ = yy.Cardinality.ZERO_OR_ONE; + break; + case 35: + this.$ = yy.Cardinality.ZERO_OR_MORE; + break; + case 36: + this.$ = yy.Cardinality.ONE_OR_MORE; + break; + case 37: + this.$ = yy.Cardinality.ONLY_ONE; + break; + case 38: + this.$ = yy.Cardinality.MD_PARENT; + break; + case 39: + this.$ = yy.Identification.NON_IDENTIFYING; + break; + case 40: + this.$ = yy.Identification.IDENTIFYING; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: 9, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 16, 11: 9, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 11], { 12: 17, 39: 20, 15: [1, 18], 18: [1, 19], 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }), { 21: [1, 26] }, { 23: [1, 27] }, { 25: [1, 28] }, o($V0, [2, 18]), o($Vc, [2, 19]), o($Vc, [2, 20]), o($V0, [2, 4]), { 11: 29, 27: $V5, 28: $V6 }, { 16: 30, 17: [1, 31], 29: 32, 30: 33, 34: $Vd }, { 11: 35, 27: $V5, 28: $V6 }, { 40: 36, 46: [1, 37], 47: [1, 38] }, o($Ve, [2, 34]), o($Ve, [2, 35]), o($Ve, [2, 36]), o($Ve, [2, 37]), o($Ve, [2, 38]), o($V0, [2, 15]), o($V0, [2, 16]), o($V0, [2, 17]), { 13: [1, 39] }, { 17: [1, 40] }, o($V0, [2, 10]), { 16: 41, 17: [2, 21], 29: 32, 30: 33, 34: $Vd }, { 31: 42, 34: [1, 43] }, { 34: [2, 27] }, { 19: [1, 44] }, { 39: 45, 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }, o($Vf, [2, 39]), o($Vf, [2, 40]), { 14: 46, 27: [1, 49], 28: [1, 48], 48: [1, 47] }, o($V0, [2, 9]), { 17: [2, 22] }, o($Vg, [2, 23], { 32: 50, 33: 51, 35: 52, 37: $Vh, 38: $Vi }), o([17, 34, 37, 38], [2, 28]), o($V0, [2, 14], { 15: [1, 55] }), o([27, 28], [2, 33]), o($V0, [2, 8]), o($V0, [2, 41]), o($V0, [2, 42]), o($V0, [2, 43]), o($Vg, [2, 24], { 33: 56, 36: [1, 57], 38: $Vi }), o($Vg, [2, 25]), o($Vj, [2, 29]), o($Vg, [2, 32]), o($Vj, [2, 31]), { 16: 58, 17: [1, 59], 29: 32, 30: 33, 34: $Vd }, o($Vg, [2, 26]), { 35: 60, 37: $Vh }, { 17: [1, 61] }, o($V0, [2, 13]), o($Vj, [2, 30]), o($V0, [2, 12])], + defaultActions: { 34: [2, 27], 41: [2, 22] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 22; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 24; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + return 10; + case 8: + break; + case 9: + return 8; + case 10: + return 28; + case 11: + return 48; + case 12: + return 4; + case 13: + this.begin("block"); + return 15; + case 14: + return 36; + case 15: + break; + case 16: + return 37; + case 17: + return 34; + case 18: + return 34; + case 19: + return 38; + case 20: + break; + case 21: + this.popState(); + return 17; + case 22: + return yy_.yytext[0]; + case 23: + return 18; + case 24: + return 19; + case 25: + return 41; + case 26: + return 43; + case 27: + return 43; + case 28: + return 43; + case 29: + return 41; + case 30: + return 41; + case 31: + return 42; + case 32: + return 42; + case 33: + return 42; + case 34: + return 42; + case 35: + return 42; + case 36: + return 43; + case 37: + return 42; + case 38: + return 43; + case 39: + return 44; + case 40: + return 44; + case 41: + return 44; + case 42: + return 44; + case 43: + return 41; + case 44: + return 42; + case 45: + return 43; + case 46: + return 45; + case 47: + return 46; + case 48: + return 47; + case 49: + return 47; + case 50: + return 46; + case 51: + return 46; + case 52: + return 46; + case 53: + return 27; + case 54: + return yy_.yytext[0]; + case 55: + return 6; + } + }, + rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:,)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:one or zero\b)/i, /^(?:one or more\b)/i, /^(?:one or many\b)/i, /^(?:1\+)/i, /^(?:\|o\b)/i, /^(?:zero or one\b)/i, /^(?:zero or more\b)/i, /^(?:zero or many\b)/i, /^(?:0\+)/i, /^(?:\}o\b)/i, /^(?:many\(0\))/i, /^(?:many\(1\))/i, /^(?:many\b)/i, /^(?:\}\|)/i, /^(?:one\b)/i, /^(?:only one\b)/i, /^(?:1\b)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:\s*u\b)/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i, /^(?:.)/i, /^(?:$)/i], + conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "block": { "rules": [14, 15, 16, 17, 18, 19, 20, 21, 22], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const erParser = parser; +let entities = {}; +let relationships = []; +const Cardinality = { + ZERO_OR_ONE: "ZERO_OR_ONE", + ZERO_OR_MORE: "ZERO_OR_MORE", + ONE_OR_MORE: "ONE_OR_MORE", + ONLY_ONE: "ONLY_ONE", + MD_PARENT: "MD_PARENT" +}; +const Identification = { + NON_IDENTIFYING: "NON_IDENTIFYING", + IDENTIFYING: "IDENTIFYING" +}; +const addEntity = function(name, alias = void 0) { + if (entities[name] === void 0) { + entities[name] = { attributes: [], alias }; + mermaid_0603ccf8.l.info("Added new entity :", name); + } else if (entities[name] && !entities[name].alias && alias) { + entities[name].alias = alias; + mermaid_0603ccf8.l.info(`Add alias '${alias}' to entity '${name}'`); + } + return entities[name]; +}; +const getEntities = () => entities; +const addAttributes = function(entityName, attribs) { + let entity = addEntity(entityName); + let i; + for (i = attribs.length - 1; i >= 0; i--) { + entity.attributes.push(attribs[i]); + mermaid_0603ccf8.l.debug("Added attribute ", attribs[i].attributeName); + } +}; +const addRelationship = function(entA, rolA, entB, rSpec) { + let rel = { + entityA: entA, + roleA: rolA, + entityB: entB, + relSpec: rSpec + }; + relationships.push(rel); + mermaid_0603ccf8.l.debug("Added new relationship :", rel); +}; +const getRelationships = () => relationships; +const clear = function() { + entities = {}; + relationships = []; + (0,mermaid_0603ccf8.t)(); +}; +const erDb = { + Cardinality, + Identification, + getConfig: () => (0,mermaid_0603ccf8.c)().er, + addEntity, + addAttributes, + getEntities, + addRelationship, + getRelationships, + clear, + setAccTitle: mermaid_0603ccf8.s, + getAccTitle: mermaid_0603ccf8.g, + setAccDescription: mermaid_0603ccf8.b, + getAccDescription: mermaid_0603ccf8.a, + setDiagramTitle: mermaid_0603ccf8.q, + getDiagramTitle: mermaid_0603ccf8.r +}; +const ERMarkers = { + ONLY_ONE_START: "ONLY_ONE_START", + ONLY_ONE_END: "ONLY_ONE_END", + ZERO_OR_ONE_START: "ZERO_OR_ONE_START", + ZERO_OR_ONE_END: "ZERO_OR_ONE_END", + ONE_OR_MORE_START: "ONE_OR_MORE_START", + ONE_OR_MORE_END: "ONE_OR_MORE_END", + ZERO_OR_MORE_START: "ZERO_OR_MORE_START", + ZERO_OR_MORE_END: "ZERO_OR_MORE_END", + MD_PARENT_END: "MD_PARENT_END", + MD_PARENT_START: "MD_PARENT_START" +}; +const insertMarkers = function(elem, conf2) { + let marker; + elem.append("defs").append("marker").attr("id", ERMarkers.MD_PARENT_START).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", ERMarkers.MD_PARENT_END).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18 M15,0 L15,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_END).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,0 L3,18 M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_END).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,0 L21,18"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"); + elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_END).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18"); + marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_END).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); + marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6); + marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18"); + return; +}; +const erMarkers = { + ERMarkers, + insertMarkers +}; +const BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g; +let conf = {}; +let entityNameIds = /* @__PURE__ */ new Map(); +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const drawAttributes = (groupNode, entityTextNode, attributes) => { + const heightPadding = conf.entityPadding / 3; + const widthPadding = conf.entityPadding / 3; + const attrFontSize = conf.fontSize * 0.85; + const labelBBox = entityTextNode.node().getBBox(); + const attributeNodes = []; + let hasKeyType = false; + let hasComment = false; + let maxTypeWidth = 0; + let maxNameWidth = 0; + let maxKeyWidth = 0; + let maxCommentWidth = 0; + let cumulativeHeight = labelBBox.height + heightPadding * 2; + let attrNum = 1; + attributes.forEach((item) => { + if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) { + hasKeyType = true; + } + if (item.attributeComment !== void 0) { + hasComment = true; + } + }); + attributes.forEach((item) => { + const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`; + let nodeHeight = 0; + const attributeType = (0,mermaid_0603ccf8.v)(item.attributeType); + const typeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-type`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_0603ccf8.c)().fontFamily).style("font-size", attrFontSize + "px").text(attributeType); + const nameNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-name`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_0603ccf8.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeName); + const attributeNode = {}; + attributeNode.tn = typeNode; + attributeNode.nn = nameNode; + const typeBBox = typeNode.node().getBBox(); + const nameBBox = nameNode.node().getBBox(); + maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width); + maxNameWidth = Math.max(maxNameWidth, nameBBox.width); + nodeHeight = Math.max(typeBBox.height, nameBBox.height); + if (hasKeyType) { + const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(",") : ""; + const keyTypeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-key`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_0603ccf8.c)().fontFamily).style("font-size", attrFontSize + "px").text(keyTypeNodeText); + attributeNode.kn = keyTypeNode; + const keyTypeBBox = keyTypeNode.node().getBBox(); + maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width); + nodeHeight = Math.max(nodeHeight, keyTypeBBox.height); + } + if (hasComment) { + const commentNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-comment`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", (0,mermaid_0603ccf8.c)().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeComment || ""); + attributeNode.cn = commentNode; + const commentNodeBBox = commentNode.node().getBBox(); + maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width); + nodeHeight = Math.max(nodeHeight, commentNodeBBox.height); + } + attributeNode.height = nodeHeight; + attributeNodes.push(attributeNode); + cumulativeHeight += nodeHeight + heightPadding * 2; + attrNum += 1; + }); + let widthPaddingFactor = 4; + if (hasKeyType) { + widthPaddingFactor += 2; + } + if (hasComment) { + widthPaddingFactor += 2; + } + const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth; + const bBox = { + width: Math.max( + conf.minEntityWidth, + Math.max( + labelBBox.width + conf.entityPadding * 2, + maxWidth + widthPadding * widthPaddingFactor + ) + ), + height: attributes.length > 0 ? cumulativeHeight : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2) + }; + if (attributes.length > 0) { + const spareColumnWidth = Math.max( + 0, + (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2) + ); + entityTextNode.attr( + "transform", + "translate(" + bBox.width / 2 + "," + (heightPadding + labelBBox.height / 2) + ")" + ); + let heightOffset = labelBBox.height + heightPadding * 2; + let attribStyle = "attributeBoxOdd"; + attributeNodes.forEach((attributeNode) => { + const alignY = heightOffset + heightPadding + attributeNode.height / 2; + attributeNode.tn.attr("transform", "translate(" + widthPadding + "," + alignY + ")"); + const typeRect = groupNode.insert("rect", "#" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr("x", 0).attr("y", heightOffset).attr("width", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + const nameXOffset = parseFloat(typeRect.attr("x")) + parseFloat(typeRect.attr("width")); + attributeNode.nn.attr( + "transform", + "translate(" + (nameXOffset + widthPadding) + "," + alignY + ")" + ); + const nameRect = groupNode.insert("rect", "#" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr("x", nameXOffset).attr("y", heightOffset).attr("width", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + let keyTypeAndCommentXOffset = parseFloat(nameRect.attr("x")) + parseFloat(nameRect.attr("width")); + if (hasKeyType) { + attributeNode.kn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + const keyTypeRect = groupNode.insert("rect", "#" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr("x")) + parseFloat(keyTypeRect.attr("width")); + } + if (hasComment) { + attributeNode.cn.attr( + "transform", + "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" + ); + groupNode.insert("rect", "#" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, "true").attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); + } + heightOffset += attributeNode.height + heightPadding * 2; + attribStyle = attribStyle === "attributeBoxOdd" ? "attributeBoxEven" : "attributeBoxOdd"; + }); + } else { + bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight); + entityTextNode.attr("transform", "translate(" + bBox.width / 2 + "," + bBox.height / 2 + ")"); + } + return bBox; +}; +const drawEntities = function(svgNode, entities2, graph) { + const keys = Object.keys(entities2); + let firstOne; + keys.forEach(function(entityName) { + const entityId = generateId(entityName, "entity"); + entityNameIds.set(entityName, entityId); + const groupNode = svgNode.append("g").attr("id", entityId); + firstOne = firstOne === void 0 ? entityId : firstOne; + const textId = "text-" + entityId; + const textNode = groupNode.append("text").classed("er entityLabel", true).attr("id", textId).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "middle").style("font-family", (0,mermaid_0603ccf8.c)().fontFamily).style("font-size", conf.fontSize + "px").text(entities2[entityName].alias ?? entityName); + const { width: entityWidth, height: entityHeight } = drawAttributes( + groupNode, + textNode, + entities2[entityName].attributes + ); + const rectNode = groupNode.insert("rect", "#" + textId).classed("er entityBox", true).attr("x", 0).attr("y", 0).attr("width", entityWidth).attr("height", entityHeight); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(entityId, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: entityId + }); + }); + return firstOne; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); +}; +const getEdgeName = function(rel) { + return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, ""); +}; +const addRelationships = function(relationships2, g) { + relationships2.forEach(function(r) { + g.setEdge( + entityNameIds.get(r.entityA), + entityNameIds.get(r.entityB), + { relationship: r }, + getEdgeName(r) + ); + }); + return relationships2; +}; +let relCnt = 0; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + relCnt++; + const edge = g.edge( + entityNameIds.get(rel.entityA), + entityNameIds.get(rel.entityB), + getEdgeName(rel) + ); + const lineFunction = (0,src/* line */.jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }).curve(src/* curveBasis */.$0Z); + const svgPath = svg.insert("path", "#" + insert).classed("er relationshipLine", true).attr("d", lineFunction(edge.points)).style("stroke", conf.stroke).style("fill", "none"); + if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) { + svgPath.attr("stroke-dasharray", "8,8"); + } + let url = ""; + if (conf.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + switch (rel.relSpec.cardA) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_END + ")"); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_END + ")"); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_END + ")"); + break; + case diagObj.db.Cardinality.MD_PARENT: + svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_END + ")"); + break; + } + switch (rel.relSpec.cardB) { + case diagObj.db.Cardinality.ZERO_OR_ONE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_START + ")" + ); + break; + case diagObj.db.Cardinality.ZERO_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONE_OR_MORE: + svgPath.attr( + "marker-start", + "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_START + ")" + ); + break; + case diagObj.db.Cardinality.ONLY_ONE: + svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_START + ")"); + break; + case diagObj.db.Cardinality.MD_PARENT: + svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.MD_PARENT_START + ")"); + break; + } + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + const labelNode = svg.append("text").classed("er relationshipLabel", true).attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).style("text-anchor", "middle").style("dominant-baseline", "middle").style("font-family", (0,mermaid_0603ccf8.c)().fontFamily).style("font-size", conf.fontSize + "px").text(rel.roleA); + const labelBBox = labelNode.node().getBBox(); + svg.insert("rect", "#" + labelId).classed("er relationshipLabelBox", true).attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height); +}; +const draw = function(text, id, _version, diagObj) { + conf = (0,mermaid_0603ccf8.c)().er; + mermaid_0603ccf8.l.info("Drawing ER diagram"); + const securityLevel = (0,mermaid_0603ccf8.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const svg = root.select(`[id='${id}']`); + erMarkers.insertMarkers(svg, conf); + let g; + g = new graphlib/* Graph */.k({ + multigraph: true, + directed: true, + compound: false + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g); + const relationships2 = addRelationships(diagObj.db.getRelationships(), g); + (0,dagre/* layout */.bK)(g); + adjustEntities(svg, g); + relationships2.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj); + }); + const padding = conf.diagramPadding; + mermaid_0603ccf8.u.insertTitle(svg, "entityTitleText", conf.titleTopMargin, diagObj.db.getDiagramTitle()); + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,mermaid_0603ccf8.i)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const MERMAID_ERDIAGRAM_UUID = "28e9f9db-3c8d-5aa5-9faf-44286ae5937c"; +function generateId(str = "", prefix = "") { + const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, ""); + return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${esm_node_v5( + str, + MERMAID_ERDIAGRAM_UUID + )}`; +} +function strWithHyphen(str = "") { + return str.length > 0 ? `${str}-` : ""; +} +const erRenderer = { + setConf, + draw +}; +const getStyles = (options) => ` + .entityBox { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxOdd { + fill: ${options.attributeBackgroundColorOdd}; + stroke: ${options.nodeBorder}; + } + + .attributeBoxEven { + fill: ${options.attributeBackgroundColorEven}; + stroke: ${options.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${options.tertiaryColor}; + opacity: 0.7; + background-color: ${options.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .relationshipLine { + stroke: ${options.lineColor}; + } + + .entityTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + #MD_PARENT_START { + fill: #f5f5f5 !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; + } + #MD_PARENT_END { + fill: #f5f5f5 !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; + } + +`; +const erStyles = getStyles; +const diagram = { + parser: erParser, + db: erDb, + renderer: erRenderer, + styles: erStyles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/577efb1d.bff2fbed.js b/assets/js/577efb1d.bff2fbed.js new file mode 100644 index 0000000000..0cdc25fea0 --- /dev/null +++ b/assets/js/577efb1d.bff2fbed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[628],{26095:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var o=r(85893),s=r(11151);const t={},c="STREAM",a={id:"about/references/keywords/STREAM",title:"STREAM",description:"MODELS /",source:"@site/docs/about/references/keywords/STREAM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STREAM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"START",permalink:"/ecalc/docs/about/references/keywords/START"},next:{title:"STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function S(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"stream",children:"STREAM"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] / ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"}),"\n",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["This keyword is not to be confused with ",(0,o.jsx)(n.code,{children:"STREAMS"})," - which is also utilised for ",(0,o.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})]})}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:["This keyword can ",(0,o.jsx)(n.strong,{children:"only"})," be utilised for a ",(0,o.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," model type and is used under the ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"})," keyword."]}),"\n",(0,o.jsxs)(n.p,{children:["This is used to refer a ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGE"})," to a previously defined ",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n - ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n ...\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(S,{...e})}):S(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var o=r(67294);const s={},t=o.createContext(s);function c(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/594.eec51fb4.js b/assets/js/594.eec51fb4.js new file mode 100644 index 0000000000..bb3a73afef --- /dev/null +++ b/assets/js/594.eec51fb4.js @@ -0,0 +1,26091 @@ +"use strict"; +exports.id = 594; +exports.ids = [594]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 46060: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ c: () => (/* binding */ write) +/* harmony export */ }); +/* unused harmony export read */ +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49360); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92346); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43836); +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(g.graph())) { + json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(g.graph()); + } + return json; +} + +function writeNodes(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(nodeValue)) { + node.value = nodeValue; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(e.name)) { + edge.name = e.name; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 92346: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(48451); + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 78932: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39164); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 60905: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46060); +/* harmony import */ var _edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(78932); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39164); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + for (let id of Object.keys(clusterDb)) { + const nonClusterChild = clusterDb[id].id; + const parent = graph.parent(nonClusterChild); + if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { + clusterDb[id].id = parent; + } + } + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = structuredClone(edge); + const edge2 = structuredClone(edge); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + const parent = graph.parent(v); + clusterDb[parent].externalConnections = true; + edge.fromCluster = e.v; + } + if (w !== e.w) { + const parent = graph.parent(w); + clusterDb[parent].externalConnections = true; + edge.toCluster = e.w; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + label.attr( + "transform", + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, siteConfig) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender( + nodes, + node.graph, + diagramtype, + id, + graph.node(v), + siteConfig + ); + const newEl = o.elem; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + const { subGraphTitleTotalMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + node.y += subGraphTitleTotalMargin; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + node.height += subGraphTitleTotalMargin; + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + node.y += subGraphTitleTotalMargin / 2; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); + const paths = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + await recursiveRender(elem, graph, diagramtype, id, void 0, siteConfig); +}; + + + +/***/ }), + +/***/ 53594: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(27180); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(28758); +/* harmony import */ var _index_8fae9850_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(60905); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22424); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46060); + + + + + + + + + + + + + + + + + + + +const SHAPE_STATE = "rect"; +const SHAPE_STATE_WITH_DESC = "rectWithTitle"; +const SHAPE_START = "start"; +const SHAPE_END = "end"; +const SHAPE_DIVIDER = "divider"; +const SHAPE_GROUP = "roundedWithTitle"; +const SHAPE_NOTE = "note"; +const SHAPE_NOTEGROUP = "noteGroup"; +const CSS_DIAGRAM = "statediagram"; +const CSS_STATE = "state"; +const CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`; +const CSS_EDGE = "transition"; +const CSS_NOTE = "note"; +const CSS_NOTE_EDGE = "note-edge"; +const CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`; +const CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`; +const CSS_CLUSTER = "cluster"; +const CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`; +const CSS_CLUSTER_ALT = "cluster-alt"; +const CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`; +const PARENT = "parent"; +const NOTE = "note"; +const DOMID_STATE = "state"; +const DOMID_TYPE_SPACER = "----"; +const NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`; +const PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`; +const G_EDGE_STYLE = "fill:none"; +const G_EDGE_ARROWHEADSTYLE = "fill: #333"; +const G_EDGE_LABELPOS = "c"; +const G_EDGE_LABELTYPE = "text"; +const G_EDGE_THICKNESS = "normal"; +let nodeDb = {}; +let graphItemCount = 0; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + cnf[key]; + } +}; +const getClasses = function(text, diagramObj) { + diagramObj.db.extract(diagramObj.db.getRootDocV2()); + return diagramObj.db.getClasses(); +}; +function getClassesFromDbInfo(dbInfoItem) { + if (dbInfoItem === void 0 || dbInfoItem === null) { + return ""; + } else { + if (dbInfoItem.classes) { + return dbInfoItem.classes.join(" "); + } else { + return ""; + } + } +} +function stateDomId(itemId = "", counter = 0, type = "", typeSpacer = DOMID_TYPE_SPACER) { + const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : ""; + return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`; +} +const setupNode = (g, parent, parsedItem, diagramStates, diagramDb, altFlag) => { + const itemId = parsedItem.id; + const classStr = getClassesFromDbInfo(diagramStates[itemId]); + if (itemId !== "root") { + let shape = SHAPE_STATE; + if (parsedItem.start === true) { + shape = SHAPE_START; + } + if (parsedItem.start === false) { + shape = SHAPE_END; + } + if (parsedItem.type !== _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.D) { + shape = parsedItem.type; + } + if (!nodeDb[itemId]) { + nodeDb[itemId] = { + id: itemId, + shape, + description: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(itemId, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.c)()), + classes: `${classStr} ${CSS_DIAGRAM_STATE}` + }; + } + const newNode = nodeDb[itemId]; + if (parsedItem.description) { + if (Array.isArray(newNode.description)) { + newNode.shape = SHAPE_STATE_WITH_DESC; + newNode.description.push(parsedItem.description); + } else { + if (newNode.description.length > 0) { + newNode.shape = SHAPE_STATE_WITH_DESC; + if (newNode.description === itemId) { + newNode.description = [parsedItem.description]; + } else { + newNode.description = [newNode.description, parsedItem.description]; + } + } else { + newNode.shape = SHAPE_STATE; + newNode.description = parsedItem.description; + } + } + newNode.description = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeTextOrArray(newNode.description, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.c)()); + } + if (newNode.description.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) { + newNode.shape = SHAPE_STATE; + } + if (!newNode.type && parsedItem.doc) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Setting cluster for ", itemId, getDir(parsedItem)); + newNode.type = "group"; + newNode.dir = getDir(parsedItem); + newNode.shape = parsedItem.type === _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.a ? SHAPE_DIVIDER : SHAPE_GROUP; + newNode.classes = newNode.classes + " " + CSS_DIAGRAM_CLUSTER + " " + (altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ""); + } + const nodeData = { + labelStyle: "", + shape: newNode.shape, + labelText: newNode.description, + // typeof newNode.description === 'object' + // ? newNode.description[0] + // : newNode.description, + classes: newNode.classes, + style: "", + //styles.style, + id: itemId, + dir: newNode.dir, + domId: stateDomId(itemId, graphItemCount), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + nodeData.centerLabel = true; + if (parsedItem.note) { + const noteData = { + labelStyle: "", + shape: SHAPE_NOTE, + labelText: parsedItem.note.text, + classes: CSS_DIAGRAM_NOTE, + // useHtmlLabels: false, + style: "", + // styles.style, + id: itemId + NOTE_ID + "-" + graphItemCount, + domId: stateDomId(itemId, graphItemCount, NOTE), + type: newNode.type, + padding: 15 + //getConfig().flowchart.padding + }; + const groupData = { + labelStyle: "", + shape: SHAPE_NOTEGROUP, + labelText: parsedItem.note.text, + classes: newNode.classes, + style: "", + // styles.style, + id: itemId + PARENT_ID, + domId: stateDomId(itemId, graphItemCount, PARENT), + type: "group", + padding: 0 + //getConfig().flowchart.padding + }; + graphItemCount++; + const parentNodeId = itemId + PARENT_ID; + g.setNode(parentNodeId, groupData); + g.setNode(noteData.id, noteData); + g.setNode(itemId, nodeData); + g.setParent(itemId, parentNodeId); + g.setParent(noteData.id, parentNodeId); + let from = itemId; + let to = noteData.id; + if (parsedItem.note.position === "left of") { + from = noteData.id; + to = itemId; + } + g.setEdge(from, to, { + arrowhead: "none", + arrowType: "", + style: G_EDGE_STYLE, + labelStyle: "", + classes: CSS_EDGE_NOTE_EDGE, + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS + }); + } else { + g.setNode(itemId, nodeData); + } + } + if (parent && parent.id !== "root") { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Setting node ", itemId, " to be child of its parent ", parent.id); + g.setParent(itemId, parent.id); + } + if (parsedItem.doc) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("Adding nodes children "); + setupDoc(g, parsedItem, parsedItem.doc, diagramStates, diagramDb, !altFlag); + } +}; +const setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.trace("items", doc); + doc.forEach((item) => { + switch (item.stmt) { + case _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.b: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.D: + setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag); + break; + case _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.S: + { + setupNode(g, parentParsedItem, item.state1, diagramStates, diagramDb, altFlag); + setupNode(g, parentParsedItem, item.state2, diagramStates, diagramDb, altFlag); + const edgeData = { + id: "edge" + graphItemCount, + arrowhead: "normal", + arrowTypeEnd: "arrow_barb", + style: G_EDGE_STYLE, + labelStyle: "", + label: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.e.sanitizeText(item.description, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.c)()), + arrowheadStyle: G_EDGE_ARROWHEADSTYLE, + labelpos: G_EDGE_LABELPOS, + labelType: G_EDGE_LABELTYPE, + thickness: G_EDGE_THICKNESS, + classes: CSS_EDGE + }; + g.setEdge(item.state1.id, item.state2.id, edgeData, graphItemCount); + graphItemCount++; + } + break; + } + }); +}; +const getDir = (parsedItem, defaultDir = _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.c) => { + let dir = defaultDir; + if (parsedItem.doc) { + for (let i = 0; i < parsedItem.doc.length; i++) { + const parsedItemDoc = parsedItem.doc[i]; + if (parsedItemDoc.stmt === "dir") { + dir = parsedItemDoc.value; + } + } + } + return dir; +}; +const draw = async function(text, id, _version, diag) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.info("Drawing state diagram (v2)", id); + nodeDb = {}; + diag.db.getDirection(); + const { securityLevel, state: conf } = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.c)(); + const nodeSpacing = conf.nodeSpacing || 50; + const rankSpacing = conf.rankSpacing || 50; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + diag.db.extract(diag.db.getRootDocV2()); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.info(diag.db.getRootDocV2()); + const diagramStates = diag.db.getStates(); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: getDir(diag.db.getRootDocV2()), + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + setupNode(g, void 0, diag.db.getRootDocV2(), diagramStates, diag.db, true); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_8fae9850_js__WEBPACK_IMPORTED_MODULE_9__.r)(element, g, ["barb"], CSS_DIAGRAM, id); + const padding = 8; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.u.insertTitle(svg, "statediagramTitleText", conf.titleTopMargin, diag.db.getDiagramTitle()); + const bounds = svg.node().getBBox(); + const width = bounds.width + padding * 2; + const height = bounds.height + padding * 2; + svg.attr("class", CSS_DIAGRAM); + const svgBounds = svg.node().getBBox(); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.i)(svg, height, width, conf.useMaxWidth); + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_8__.l.debug(`viewBox ${vBox}`); + svg.attr("viewBox", vBox); + const labels = document.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = document.createElementNS("http://www.w3.org/2000/svg", SHAPE_STATE); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } +}; +const renderer = { + setConf, + getClasses, + draw +}; +const diagram = { + parser: _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + styles: _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.s, + init: (cnf) => { + if (!cnf.state) { + cnf.state = {}; + } + cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_b2c874b6_js__WEBPACK_IMPORTED_MODULE_7__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 27180: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ D: () => (/* binding */ DEFAULT_STATE_TYPE), +/* harmony export */ S: () => (/* binding */ STMT_RELATION), +/* harmony export */ a: () => (/* binding */ DIVIDER_TYPE), +/* harmony export */ b: () => (/* binding */ STMT_STATE), +/* harmony export */ c: () => (/* binding */ DEFAULT_NESTED_DOC_DIR), +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28758); + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 15], $V7 = [1, 16], $V8 = [1, 17], $V9 = [1, 18], $Va = [1, 30], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 25], $Vh = [1, 26], $Vi = [1, 27], $Vj = [1, 28], $Vk = [1, 29], $Vl = [1, 32], $Vm = [1, 33], $Vn = [1, 34], $Vo = [1, 35], $Vp = [1, 31], $Vq = [1, 4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vr = [1, 4, 5, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vs = [4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "classDefStatement": 10, "cssClassStatement": 11, "idStatement": 12, "DESCR": 13, "-->": 14, "HIDE_EMPTY": 15, "scale": 16, "WIDTH": 17, "COMPOSIT_STATE": 18, "STRUCT_START": 19, "STRUCT_STOP": 20, "STATE_DESCR": 21, "AS": 22, "ID": 23, "FORK": 24, "JOIN": 25, "CHOICE": 26, "CONCURRENT": 27, "note": 28, "notePosition": 29, "NOTE_TEXT": 30, "direction": 31, "acc_title": 32, "acc_title_value": 33, "acc_descr": 34, "acc_descr_value": 35, "acc_descr_multiline_value": 36, "classDef": 37, "CLASSDEF_ID": 38, "CLASSDEF_STYLEOPTS": 39, "DEFAULT": 40, "class": 41, "CLASSENTITY_IDS": 42, "STYLECLASS": 43, "direction_tb": 44, "direction_bt": 45, "direction_rl": 46, "direction_lr": 47, "eol": 48, ";": 49, "EDGE_STATE": 50, "STYLE_SEPARATOR": 51, "left_of": 52, "right_of": 53, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACE", 5: "NL", 6: "SD", 13: "DESCR", 14: "-->", 15: "HIDE_EMPTY", 16: "scale", 17: "WIDTH", 18: "COMPOSIT_STATE", 19: "STRUCT_START", 20: "STRUCT_STOP", 21: "STATE_DESCR", 22: "AS", 23: "ID", 24: "FORK", 25: "JOIN", 26: "CHOICE", 27: "CONCURRENT", 28: "note", 30: "NOTE_TEXT", 32: "acc_title", 33: "acc_title_value", 34: "acc_descr", 35: "acc_descr_value", 36: "acc_descr_multiline_value", 37: "classDef", 38: "CLASSDEF_ID", 39: "CLASSDEF_STYLEOPTS", 40: "DEFAULT", 41: "class", 42: "CLASSENTITY_IDS", 43: "STYLECLASS", 44: "direction_tb", 45: "direction_bt", 46: "direction_rl", 47: "direction_lr", 49: ";", 50: "EDGE_STATE", 51: "STYLE_SEPARATOR", 52: "left_of", 53: "right_of" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [10, 3], [10, 3], [11, 3], [31, 1], [31, 1], [31, 1], [31, 1], [48, 1], [48, 1], [12, 1], [12, 1], [12, 3], [12, 3], [29, 1], [29, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.setRootDoc($$[$0]); + return $$[$0]; + case 4: + this.$ = []; + break; + case 5: + if ($$[$0] != "nl") { + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + } + break; + case 6: + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = "nl"; + break; + case 11: + this.$ = $$[$0]; + break; + case 12: + const stateStmt = $$[$0 - 1]; + stateStmt.description = yy.trimColon($$[$0]); + this.$ = stateStmt; + break; + case 13: + this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] }; + break; + case 14: + const relDescription = yy.trimColon($$[$0]); + this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription }; + break; + case 18: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] }; + break; + case 19: + var id = $$[$0]; + var description = $$[$0 - 2].trim(); + if ($$[$0].match(":")) { + var parts = $$[$0].split(":"); + id = parts[0]; + description = [description, parts[1]]; + } + this.$ = { stmt: "state", id, type: "default", description }; + break; + case 20: + this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] }; + break; + case 21: + this.$ = { stmt: "state", id: $$[$0], type: "fork" }; + break; + case 22: + this.$ = { stmt: "state", id: $$[$0], type: "join" }; + break; + case 23: + this.$ = { stmt: "state", id: $$[$0], type: "choice" }; + break; + case 24: + this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" }; + break; + case 25: + this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } }; + break; + case 28: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 29: + case 30: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 31: + case 32: + this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; + break; + case 33: + this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 34: + yy.setDirection("TB"); + this.$ = { stmt: "dir", value: "TB" }; + break; + case 35: + yy.setDirection("BT"); + this.$ = { stmt: "dir", value: "BT" }; + break; + case 36: + yy.setDirection("RL"); + this.$ = { stmt: "dir", value: "RL" }; + break; + case 37: + yy.setDirection("LR"); + this.$ = { stmt: "dir", value: "LR" }; + break; + case 40: + case 41: + this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; + break; + case 42: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + case 43: + this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; + break; + } + }, + table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 15, 16, 18, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 5]), { 9: 36, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 7]), o($Vq, [2, 8]), o($Vq, [2, 9]), o($Vq, [2, 10]), o($Vq, [2, 11], { 13: [1, 37], 14: [1, 38] }), o($Vq, [2, 15]), { 17: [1, 39] }, o($Vq, [2, 17], { 19: [1, 40] }), { 22: [1, 41] }, o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), { 29: 42, 30: [1, 43], 52: [1, 44], 53: [1, 45] }, o($Vq, [2, 27]), { 33: [1, 46] }, { 35: [1, 47] }, o($Vq, [2, 30]), { 38: [1, 48], 40: [1, 49] }, { 42: [1, 50] }, o($Vr, [2, 40], { 51: [1, 51] }), o($Vr, [2, 41], { 51: [1, 52] }), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), o($Vq, [2, 37]), o($Vq, [2, 6]), o($Vq, [2, 12]), { 12: 53, 23: $Va, 50: $Vp }, o($Vq, [2, 16]), o($Vs, $V3, { 7: 54 }), { 23: [1, 55] }, { 23: [1, 56] }, { 22: [1, 57] }, { 23: [2, 44] }, { 23: [2, 45] }, o($Vq, [2, 28]), o($Vq, [2, 29]), { 39: [1, 58] }, { 39: [1, 59] }, { 43: [1, 60] }, { 23: [1, 61] }, { 23: [1, 62] }, o($Vq, [2, 13], { 13: [1, 63] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 64], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 19], { 19: [1, 65] }), { 30: [1, 66] }, { 23: [1, 67] }, o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vr, [2, 42]), o($Vr, [2, 43]), o($Vq, [2, 14]), o($Vq, [2, 18]), o($Vs, $V3, { 7: 68 }), o($Vq, [2, 25]), o($Vq, [2, 26]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 69], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 20])], + defaultActions: { 5: [2, 1], 6: [2, 2], 44: [2, 44], 45: [2, 45] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 40; + case 1: + return 44; + case 2: + return 45; + case 3: + return 46; + case 4: + return 47; + case 5: + break; + case 6: + break; + case 7: + return 5; + case 8: + break; + case 9: + break; + case 10: + break; + case 11: + break; + case 12: + this.pushState("SCALE"); + return 16; + case 13: + return 17; + case 14: + this.popState(); + break; + case 15: + this.begin("acc_title"); + return 32; + case 16: + this.popState(); + return "acc_title_value"; + case 17: + this.begin("acc_descr"); + return 34; + case 18: + this.popState(); + return "acc_descr_value"; + case 19: + this.begin("acc_descr_multiline"); + break; + case 20: + this.popState(); + break; + case 21: + return "acc_descr_multiline_value"; + case 22: + this.pushState("CLASSDEF"); + return 37; + case 23: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 24: + this.popState(); + this.pushState("CLASSDEFID"); + return 38; + case 25: + this.popState(); + return 39; + case 26: + this.pushState("CLASS"); + return 41; + case 27: + this.popState(); + this.pushState("CLASS_STYLE"); + return 42; + case 28: + this.popState(); + return 43; + case 29: + this.pushState("SCALE"); + return 16; + case 30: + return 17; + case 31: + this.popState(); + break; + case 32: + this.pushState("STATE"); + break; + case 33: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 24; + case 34: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 35: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 26; + case 36: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 24; + case 37: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 25; + case 38: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -10).trim(); + return 26; + case 39: + return 44; + case 40: + return 45; + case 41: + return 46; + case 42: + return 47; + case 43: + this.pushState("STATE_STRING"); + break; + case 44: + this.pushState("STATE_ID"); + return "AS"; + case 45: + this.popState(); + return "ID"; + case 46: + this.popState(); + break; + case 47: + return "STATE_DESCR"; + case 48: + return 18; + case 49: + this.popState(); + break; + case 50: + this.popState(); + this.pushState("struct"); + return 19; + case 51: + break; + case 52: + this.popState(); + return 20; + case 53: + break; + case 54: + this.begin("NOTE"); + return 28; + case 55: + this.popState(); + this.pushState("NOTE_ID"); + return 52; + case 56: + this.popState(); + this.pushState("NOTE_ID"); + return 53; + case 57: + this.popState(); + this.pushState("FLOATING_NOTE"); + break; + case 58: + this.popState(); + this.pushState("FLOATING_NOTE_ID"); + return "AS"; + case 59: + break; + case 60: + return "NOTE_TEXT"; + case 61: + this.popState(); + return "ID"; + case 62: + this.popState(); + this.pushState("NOTE_TEXT"); + return 23; + case 63: + this.popState(); + yy_.yytext = yy_.yytext.substr(2).trim(); + return 30; + case 64: + this.popState(); + yy_.yytext = yy_.yytext.slice(0, -8).trim(); + return 30; + case 65: + return 6; + case 66: + return 6; + case 67: + return 15; + case 68: + return 50; + case 69: + return 23; + case 70: + yy_.yytext = yy_.yytext.trim(); + return 13; + case 71: + return 14; + case 72: + return 27; + case 73: + return 51; + case 74: + return 5; + case 75: + return "INVALID"; + } + }, + rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "LINE": { "rules": [9, 10], "inclusive": false }, "struct": { "rules": [9, 10, 22, 26, 32, 39, 40, 41, 42, 51, 52, 53, 54, 68, 69, 70, 71, 72], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [61], "inclusive": false }, "FLOATING_NOTE": { "rules": [58, 59, 60], "inclusive": false }, "NOTE_TEXT": { "rules": [63, 64], "inclusive": false }, "NOTE_ID": { "rules": [62], "inclusive": false }, "NOTE": { "rules": [55, 56, 57], "inclusive": false }, "CLASS_STYLE": { "rules": [28], "inclusive": false }, "CLASS": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [25], "inclusive": false }, "CLASSDEF": { "rules": [23, 24], "inclusive": false }, "acc_descr_multiline": { "rules": [20, 21], "inclusive": false }, "acc_descr": { "rules": [18], "inclusive": false }, "acc_title": { "rules": [16], "inclusive": false }, "SCALE": { "rules": [13, 14, 30, 31], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [45], "inclusive": false }, "STATE_STRING": { "rules": [46, 47], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [9, 10, 33, 34, 35, 36, 37, 38, 43, 44, 48, 49, 50], "inclusive": false }, "ID": { "rules": [9, 10], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 15, 17, 19, 22, 26, 29, 32, 50, 54, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_DIAGRAM_DIRECTION = "LR"; +const DEFAULT_NESTED_DOC_DIR = "TB"; +const STMT_STATE = "state"; +const STMT_RELATION = "relation"; +const STMT_CLASSDEF = "classDef"; +const STMT_APPLYCLASS = "applyClass"; +const DEFAULT_STATE_TYPE = "default"; +const DIVIDER_TYPE = "divider"; +const START_NODE = "[*]"; +const START_TYPE = "start"; +const END_NODE = START_NODE; +const END_TYPE = "end"; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +function newClassesList() { + return {}; +} +let direction = DEFAULT_DIAGRAM_DIRECTION; +let rootDoc = []; +let classes = newClassesList(); +const newDoc = () => { + return { + relations: [], + states: {}, + documents: {} + }; +}; +let documents = { + root: newDoc() +}; +let currentDocument = documents.root; +let startEndCount = 0; +let dividerCnt = 0; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3 +}; +const clone = (o) => JSON.parse(JSON.stringify(o)); +const setRootDoc = (o) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting root doc", o); + rootDoc = o; +}; +const getRootDoc = () => rootDoc; +const docTranslator = (parent, node, first) => { + if (node.stmt === STMT_RELATION) { + docTranslator(parent, node.state1, true); + docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === "[*]") { + node.id = first ? parent.id + "_start" : parent.id + "_end"; + node.start = first; + } else { + node.id = node.id.trim(); + } + } + if (node.doc) { + const doc = []; + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.F)(), + type: "divider", + doc: clone(currentDoc) + }; + doc.push(clone(newNode)); + node.doc = doc; + } + node.doc.forEach((docNode) => docTranslator(node, docNode, true)); + } + } +}; +const getRootDocV2 = () => { + docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); + return { id: "root", doc: rootDoc }; +}; +const extract = (_doc) => { + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info(doc); + clear(true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Extract", doc); + doc.forEach((item) => { + switch (item.stmt) { + case STMT_STATE: + addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + addStyleClass(item.id.trim(), item.classes); + break; + case STMT_APPLYCLASS: + setCssClass(item.id.trim(), item.styleClass); + break; + } + }); +}; +const addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) { + const trimmedId = id == null ? void 0 : id.trim(); + if (currentDocument.states[trimmedId] === void 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Adding state ", trimmedId, descr); + currentDocument.states[trimmedId] = { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [] + }; + } else { + if (!currentDocument.states[trimmedId].doc) { + currentDocument.states[trimmedId].doc = doc; + } + if (!currentDocument.states[trimmedId].type) { + currentDocument.states[trimmedId].type = type; + } + } + if (descr) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state description", trimmedId, descr); + if (typeof descr === "string") { + addDescription(trimmedId, descr.trim()); + } + if (typeof descr === "object") { + descr.forEach((des) => addDescription(trimmedId, des.trim())); + } + } + if (note) { + currentDocument.states[trimmedId].note = note; + currentDocument.states[trimmedId].note.text = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText( + currentDocument.states[trimmedId].note.text, + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)() + ); + } + if (classes2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state classes", trimmedId, classes2); + const classesList = typeof classes2 === "string" ? [classes2] : classes2; + classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + } + if (styles2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const stylesList = typeof styles2 === "string" ? [styles2] : styles2; + stylesList.forEach((style) => setStyle(trimmedId, style.trim())); + } + if (textStyles) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Setting state styles", trimmedId, styles2); + const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); + } +}; +const clear = function(saveCommon) { + documents = { + root: newDoc() + }; + currentDocument = documents.root; + startEndCount = 0; + classes = newClassesList(); + if (!saveCommon) { + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.t)(); + } +}; +const getState = function(id) { + return currentDocument.states[id]; +}; +const getStates = function() { + return currentDocument.states; +}; +const logDocuments = function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.l.info("Documents = ", documents); +}; +const getRelations = function() { + return currentDocument.relations; +}; +function startIdIfNeeded(id = "") { + let fixedId = id; + if (id === START_NODE) { + startEndCount++; + fixedId = `${START_TYPE}${startEndCount}`; + } + return fixedId; +} +function startTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; +} +function endIdIfNeeded(id = "") { + let fixedId = id; + if (id === END_NODE) { + startEndCount++; + fixedId = `${END_TYPE}${startEndCount}`; + } + return fixedId; +} +function endTypeIfNeeded(id = "", type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; +} +function addRelationObjs(item1, item2, relationTitle) { + let id1 = startIdIfNeeded(item1.id.trim()); + let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = startIdIfNeeded(item2.id.trim()); + let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + currentDocument.relations.push({ + id1, + id2, + relationTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(relationTitle, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); +} +const addRelation = function(item1, item2, title) { + if (typeof item1 === "object") { + addRelationObjs(item1, item2, title); + } else { + const id1 = startIdIfNeeded(item1.trim()); + const type1 = startTypeIfNeeded(item1); + const id2 = endIdIfNeeded(item2.trim()); + const type2 = endTypeIfNeeded(item2); + addState(id1, type1); + addState(id2, type2); + currentDocument.relations.push({ + id1, + id2, + title: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(title, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)()) + }); + } +}; +const addDescription = function(id, descr) { + const theState = currentDocument.states[id]; + const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; + theState.descriptions.push(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.e.sanitizeText(_descr, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)())); +}; +const cleanupLabel = function(label) { + if (label.substring(0, 1) === ":") { + return label.substr(2).trim(); + } else { + return label.trim(); + } +}; +const getDividerId = () => { + dividerCnt++; + return "divider-id-" + dividerCnt; +}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const getClasses = function() { + return classes; +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundState = getState(id); + if (foundState === void 0) { + const trimmedId = id.trim(); + addState(trimmedId); + foundState = getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); +}; +const setStyle = function(itemId, styleText) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(styleText); + } +}; +const setTextStyle = function(itemId, cssClassName) { + const item = getState(itemId); + if (item !== void 0) { + item.textStyles.push(cssClassName); + } +}; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const trimColon = (str) => str && str[0] === ":" ? str.substr(1).trim() : str.trim(); +const db = { + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.c)().state, + addState, + clear, + getState, + getStates, + getRelations, + getClasses, + getDirection, + addRelation, + getDividerId, + setDirection, + cleanupLabel, + lineType, + relationType, + logDocuments, + getRootDoc, + setRootDoc, + getRootDocV2, + extract, + trimColon, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.g, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.s, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.b, + addStyleClass, + setCssClass, + addDescription, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_0__.r +}; +const getStyles = (options) => ` +defs #statediagram-barbEnd { + fill: ${options.transitionColor}; + stroke: ${options.transitionColor}; + } +g.stateGroup text { + fill: ${options.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${options.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${options.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.stateGroup line { + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${options.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${options.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${options.noteBorderColor}; + fill: ${options.noteBkgColor}; + + text { + fill: ${options.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${options.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${options.transitionLabelColor || options.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${options.transitionLabelColor || options.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${options.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node .fork-join { + fill: ${options.specialStateColor}; + stroke: ${options.specialStateColor}; +} + +.node circle.state-end { + fill: ${options.innerEndBackground}; + stroke: ${options.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${options.compositeBackground || options.background}; + // stroke: ${options.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${options.stateBkg || options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${options.mainBkg}; + stroke: ${options.stateBorder || options.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${options.lineColor}; +} + +.statediagram-cluster rect { + fill: ${options.compositeTitleBackground}; + stroke: ${options.stateBorder || options.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${options.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${options.stateBorder || options.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${options.compositeBackground || options.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${options.altBackground ? options.altBackground : "#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${options.noteBkgColor}; + stroke: ${options.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${options.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${options.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${options.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${options.lineColor}; + stroke: ${options.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/5989d566.0ca83421.js b/assets/js/5989d566.0ca83421.js new file mode 100644 index 0000000000..2073bc535d --- /dev/null +++ b/assets/js/5989d566.0ca83421.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1709],{98039:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>d,toc:()=>i});var s=n(85893),t=n(11151);const o={},c="EMISSIONS",d={id:"about/references/keywords/EMISSIONS",title:"EMISSIONS",description:"FUELTYPES /",source:"@site/docs/about/references/keywords/EMISSIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSION",permalink:"/ecalc/docs/about/references/keywords/EMISSION"},next:{title:"EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"emissions",children:"EMISSIONS"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"No"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"FUEL_TYPES"})}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.code,{children:"FACTOR"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(r.code,{children:"NAME"})]})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["In ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})," one or more emissions related to the use of fuel is specified as\na list. Each emission entry is ",(0,s.jsx)(r.strong,{children:"required"})," to have a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})," and a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FACTOR",children:"FACTOR"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSIONS:\n - NAME: <name>\n FACTOR: <factor>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(r.p,{children:["For example, if you want to add CO",(0,s.jsx)("sub",{children:"2"})," emissions associated to the usage of a ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"}),"\nyou write the following:"]}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n"})})]})}function h(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>c});var s=n(67294);const t={},o=s.createContext(t);function c(e){const r=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5a5e553d.66840528.js b/assets/js/5a5e553d.66840528.js new file mode 100644 index 0000000000..5666eb48f7 --- /dev/null +++ b/assets/js/5a5e553d.66840528.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1110],{63007:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>i,contentTitle:()=>c,default:()=>h,frontMatter:()=>d,metadata:()=>o,toc:()=>l});var n=t(85893),s=t(11151);const d={},c="EXTRAPOLATION",o={id:"about/references/keywords/EXTRAPOLATION",title:"EXTRAPOLATION",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/EXTRAPOLATION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EXTRAPOLATION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION"},next:{title:"FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}];function a(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"extrapolation",children:"EXTRAPOLATION"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /\n",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",children:"EXTRAPOLATION"})]}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Required"}),(0,n.jsx)(r.th,{children:"Child of"}),(0,n.jsx)(r.th,{children:"Children/Options"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"N/A"}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"TIME_SERIES"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"None"})})]})})]}),"\n",(0,n.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(r.admonition,{type:"caution",children:(0,n.jsxs)(r.p,{children:["Only valid for ",(0,n.jsx)(r.code,{children:"TIME_SERIES"})," of ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," ",(0,n.jsx)(r.code,{children:"MISCELLANEOUS"}),". For type\n",(0,n.jsx)(r.code,{children:"DEFAULT"})," the keyword is not supported as input, and the functionality is defaulted to ",(0,n.jsx)(r.code,{children:"False"}),"."]})}),"\n",(0,n.jsxs)(r.p,{children:["Defines whether the rates in the source should be set to 0 after the last time step (",(0,n.jsx)(r.code,{children:"False"}),"), or equal\nto value at last time step after the time interval (",(0,n.jsx)(r.code,{children:"True"}),")."]}),"\n",(0,n.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"EXTRAPOLATION: <True/False>\n"})}),"\n",(0,n.jsx)(r.h3,{id:"requirements",children:"Requirements"}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsxs)(r.th,{children:[(0,n.jsx)(r.code,{children:"TYPE"})," set to"]}),(0,n.jsxs)(r.th,{children:[(0,n.jsx)(r.code,{children:"EXTRAPOLATION"})," default"]})]})}),(0,n.jsxs)(r.tbody,{children:[(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"DEFAULT"})}),(0,n.jsxs)(r.td,{children:["always ",(0,n.jsx)(r.code,{children:"False"})]})]}),(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"MISCELLANEOUS"})}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.code,{children:"False"})})]})]})]}),"\n",(0,n.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(r.p,{children:["See the ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,n.jsx)(r.code,{children:"time_series_format"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},11151:(e,r,t)=>{t.d(r,{Z:()=>o,a:()=>c});var n=t(67294);const s={},d=n.createContext(s);function c(e){const r=n.useContext(d);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),n.createElement(d.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c08a402.b9d91040.js b/assets/js/5c08a402.b9d91040.js new file mode 100644 index 0000000000..6b67ae9bf6 --- /dev/null +++ b/assets/js/5c08a402.b9d91040.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8846],{13135:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var t=i(85893),s=i(11151);const o={title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",sidebar_position:2},r="v8.1 to v8.2",l={id:"about/migration_guides/v8-1_to_v8-2",title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",source:"@site/docs/about/migration_guides/v8-1_to_v8-2.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-1_to_v8-2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-1_to_v8-2.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"v8.1 to v8.2",description:"v8.1 to v8.2 migration",sidebar_position:2},sidebar:"about",previous:{title:"v8 to v8.1",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81"},next:{title:"v8.2 to v8.3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3"}},a={},d=[{value:"Modelling",id:"modelling",level:2},{value:"YAML",id:"yaml",level:3},{value:"LTP",id:"ltp",level:4},{value:"Result",id:"result",level:2},{value:"Operational settings used is now 1-based",id:"operational-settings-used-is-now-1-based",level:3},{value:"Resampling of rates changed from forward filling to average rates",id:"resampling-of-rates-changed-from-forward-filling-to-average-rates",level:3},{value:"LTP .tsv file",id:"ltp-tsv-file",level:3},{value:"STP .tsv file",id:"stp-tsv-file",level:3},{value:"Emissions, structure and order",id:"emissions-structure-and-order",level:3},{value:"Behaviour",id:"behaviour",level:2},{value:"Conditions",id:"conditions",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"v81-to-v82",children:"v8.1 to v8.2"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#modelling",children:"Model changes"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#result",children:"Result changes"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#behaviour",children:"Behaviour"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"modelling",children:"Modelling"}),"\n",(0,t.jsx)(n.h3,{id:"yaml",children:"YAML"}),"\n",(0,t.jsx)(n.h4,{id:"ltp",children:"LTP"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Two new consumer categories are added: ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"HEATER"})})," and ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"BOILER"})})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"result",children:"Result"}),"\n",(0,t.jsx)(n.h3,{id:"operational-settings-used-is-now-1-based",children:"Operational settings used is now 1-based"}),"\n",(0,t.jsxs)(n.p,{children:["Consumer systems will now refer to the first operational setting as ",(0,t.jsx)(n.strong,{children:"1"})," instead of ",(0,t.jsx)(n.strong,{children:"0"}),". ",(0,t.jsx)(n.strong,{children:"0"}),' means that "No setting was used", indicating that none of the operational settings was able to handle the stream. This will make it easier for users to find the corresponding operational setting that is/was active for the different timesteps.']}),"\n",(0,t.jsx)(n.h3,{id:"resampling-of-rates-changed-from-forward-filling-to-average-rates",children:"Resampling of rates changed from forward filling to average rates"}),"\n",(0,t.jsxs)(n.p,{children:["All calculations are performed on a global time vector, which is the union of all dates found in the\ninput resource files (csv files) where ",(0,t.jsx)(n.a,{href:"../references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})," is set to\nTrue, dates found in the eCalc model yaml-file (temporal models), and dates in the requested output frequency."]}),"\n",(0,t.jsx)(n.p,{children:"If the global time vector and the dates in the requested output frequency does not coincide fully, a resampling of the\nresults needs to be performed. Previously this was done by simply picking the first\navailable rate in the time interval (forward filling). The rates are thought to be constant in a period between two\ndates, hence the forward filling will disconnect the rates and the cumulative volumes. This has now been changed to\ncalculating the average rate from all dates in the global time vector within a date range in the requested output\nfrequency, to keep the rate and cumulative consistent with each other. This average will take into\naccount the lengths of the periods and the regularity within each period. The figure below shows a comparison of how the\nresampling would previously have been done compared to how it is done now when making quarterly output from monthly results."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:i(97698).Z+"",width:"1790",height:"1116"})}),"\n",(0,t.jsx)(n.p,{children:"TLDR; this change will make it possible to use the rate output data (rate from a point in time) from eCalc correctly."}),"\n",(0,t.jsx)(n.h3,{id:"ltp-tsv-file",children:"LTP .tsv file"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Column Total CO2 is removed from LTP output (both for fixed & mobile installations)"}),"\n",(0,t.jsxs)(n.li,{children:["Add relevant columns in ltp-file for the two new consumer categories ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"HEATER"})})," and ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"BOILER"})})]}),"\n",(0,t.jsx)(n.li,{children:"Re-order some of the columns in the ltp-file, for more logical order"}),"\n",(0,t.jsxs)(n.li,{children:["Turbine-columns are now filtered on the two consumer categories ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"TURBINE-GENERATOR"})})," and ",(0,t.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:(0,t.jsx)(n.code,{children:"GAS-DRIVEN-COMPRESSOR"})}),", as it is no longer only turbines that are consumers of FUEL-GAS"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"stp-tsv-file",children:"STP .tsv file"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Report CO2 emissions for both fixed- and mobile installations"}),"\n",(0,t.jsx)(n.li,{children:"Report CH4 emissions for fixed installations"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"emissions-structure-and-order",children:"Emissions, structure and order"}),"\n",(0,t.jsx)(n.p,{children:"The JSON result file has changed format for emissions. Emissions were previously listed in a list, but is now listed in a map:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:' # This is old\n "emissions":\n [\n {\n "name": "co2"\n ...\n'})}),"\n",(0,t.jsx)(n.p,{children:"to"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:' # This is new\n "emissions":\n {\n "co2":\n {\n "name": "co2"\n ...\n'})}),"\n",(0,t.jsx)(n.p,{children:"This will/may also affect the order of which emissions are presented in the result file, but should from now on be consistent."}),"\n",(0,t.jsx)(n.h2,{id:"behaviour",children:"Behaviour"}),"\n",(0,t.jsx)(n.h2,{id:"conditions",children:"Conditions"}),"\n",(0,t.jsxs)(n.p,{children:["eCalc will now consistently NOT evaluate and run calculations if a ",(0,t.jsx)(n.a,{href:"../references/keywords/CONDITION",children:"CONDITION"}),' is not fulfilled. Conditions can be set on most energy consumers, to indicate whether the consumer is active or not at a given timestep. Previously the consumer was evaluated even though a condition was not fulfilled to reflect "what would have happened if it was active". However this has proven to be difficult for users to understand and remember when the overall model result is being evaluated and analyzed. In order to prevent user errors, we have decided to consistently ',(0,t.jsx)(n.strong,{children:"NOT"})," evaluate a consumer for timesteps where it is disabled (conditions evaluated to true)."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},97698:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/changed_rate_resampling-1618c246583304921e59eced813219f2.png"},11151:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var t=i(67294);const s={},o=t.createContext(s);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5c8ec56d.8762b795.js b/assets/js/5c8ec56d.8762b795.js new file mode 100644 index 0000000000..539d4290a5 --- /dev/null +++ b/assets/js/5c8ec56d.8762b795.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4070],{60959:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>n,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var r=o(85893),i=o(11151);const t={sidebar_position:2,description:"Compressor modelling"},n="Compressor modelling",l={id:"about/modelling/setup/models/compressor_modelling/index",title:"Compressor modelling",description:"Compressor modelling",source:"@site/docs/about/modelling/setup/models/compressor_modelling/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling",slug:"/about/modelling/setup/models/compressor_modelling/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"Compressor modelling"},sidebar:"about",previous:{title:"Fluid model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model"},next:{title:"Compressor charts",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"}},a={},d=[];function c(e){const s={a:"a",code:"code",h1:"h1",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"compressor-modelling",children:"Compressor modelling"}),"\n",(0,r.jsx)(s.p,{children:"Compressors may be single speed or variable speed, they may be stand-alone or there may be multiple compressors mounted\non a common shaft (compressor train), they may be run with an electric motor or be driven by a turbine coupled\ndirectly to the shaft, there may be one or many compressors/compressor trains in parallel connected to a common\nmanifold from which the gas is distributed between these in different operational settings."}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{src:o(43960).Z+"",width:"1049",height:"438"})}),"\n",(0,r.jsx)(s.p,{children:"In eCalc\u2122, single compressors and compressor trains are modeled the same way, a single compressor is just a train with\njust one stage. There are multiple modeling options for compressor trains:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:(0,r.jsx)(s.code,{children:"Sampled compressor model"})}),": The compressor model is setup in an external tool, and this model is sampled by\nrunning a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a csv file and input to eCalc\u2122. Note, this is ",(0,r.jsx)(s.strong,{children:"not"})," inputted in the ",(0,r.jsx)(s.code,{children:"MODELS"})," section, rather in the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})," section"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Single speed compressor train model"})}),": The compressor train modeling is done in eCalc\u2122. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. In addition, since the speed is fixed, defining a pressure control method is required. This pressure control is used to meet the required discharge pressure."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model"})}),": The compressor train modelling is done in eCalc\u2122. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Simplified variable speed compressor train model"})}),": Model the same compressor train as the above, but is more\nlightweight in that instead of iterating to meet the requested discharge pressure, it assumes all stages has equal\npressure fractions and solves for each stage independently. As the shaft speed is not used in the calculations, this\nmodel supports using generic compressor charts, see the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:(0,r.jsx)(s.code,{children:"Compressor charts"})})," section."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model with multiple streams and pressures"})}),": This is a more complex model, where it is\npossible to define fluid streams going in and out at different stages in the compressor train. Also, an additional\npressure requirement may be specified between two stages. This model is suitable in cases where for example a part of\nthe fluid stream is taken out after one stage at a specified pressure for export, and the rest is further compressed\nfor injection at a higher pressure."]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["Core theory behind the modelling of compressors in eCalc\u2122 can be found ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/theory/compressor_modelling",children:"here"}),"."]})]})}function m(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},43960:(e,s,o)=>{o.d(s,{Z:()=>r});const r=o.p+"assets/images/ecalc_compressor_train_common_shaft_with_turbine_additional_pressure-c971bb4cd1ee2f4d1cd9827d6231364c.png"},11151:(e,s,o)=>{o.d(s,{Z:()=>l,a:()=>n});var r=o(67294);const i={},t=r.createContext(i);function n(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e10e9e1.7ace1ffa.js b/assets/js/5e10e9e1.7ace1ffa.js new file mode 100644 index 0000000000..ec5609dbfc --- /dev/null +++ b/assets/js/5e10e9e1.7ace1ffa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[443],{94021:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var s=t(85893),a=t(11151);const i={title:"Tabular models",sidebar_position:4,description:"Using tabular models in calculations"},o=void 0,l={id:"about/modelling/setup/installations/tabular_models_in_calculations",title:"Tabular models",description:"Using tabular models in calculations",source:"@site/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/tabular_models_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Tabular models",sidebar_position:4,description:"Using tabular models in calculations"},sidebar:"about",previous:{title:"Variable speed compressor train multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},next:{title:"Direct consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers"}},r={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"COMPRESSOR_TABULAR input type",id:"compressor_tabular-input-type",level:2}];function u(e){const n={a:"a",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"This type is a pure interpolation model where the user may freely choose all the variables. No extrapolation is done, thus the user\nmust ensure to cover the entire variable space in the input data. For points outside the input data, the output is\ninvalid and no energy usage is given (shown in the output vector extrapolations)."}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference to energy function in facility inputs of type tabular>\n VARIABLES:\n - NAME: <name of variable>\n EXPRESSION: <expression defining the variable>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n - NAME: Gas oil ratio\n EXPRESSION: SIM1;GOR\n - NAME: GAS_TEMPERATURE\n EXPRESSION: SIM1;TEMP\n"})}),"\n",(0,s.jsx)(n.h2,{id:"compressor_tabular-input-type",children:"COMPRESSOR_TABULAR input type"}),"\n",(0,s.jsx)(n.p,{children:"Consumer energy function for the compressor (or compressor train) is in a tabulated format,\nwhere each line is a point defining the energy consumption for the given variables."}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:"Sampled compressor model"})," for details."]}),"\n",(0,s.jsx)(n.p,{children:"As a single compressor/compressor train (no system), it can be set up in the following way:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: <facility_inputs_key>\n RATE: <rate expression [Sm3/day]>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n"})})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>o});var s=t(67294);const a={},i=s.createContext(a);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e3ed04b.4cc7e731.js b/assets/js/5e3ed04b.4cc7e731.js new file mode 100644 index 0000000000..dbf22398a8 --- /dev/null +++ b/assets/js/5e3ed04b.4cc7e731.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2205],{35502:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var s=n(85893),r=n(11151);const i={},c="FACILITY_INPUTS",d={id:"about/references/keywords/FACILITY_INPUTS",title:"FACILITY_INPUTS",description:"FACILITYINPUTS",source:"@site/docs/about/references/keywords/FACILITY_INPUTS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FACILITY_INPUTS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"},next:{title:"FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR"}},o={},l=[{value:"Description",id:"description",level:2},{value:"Supported types",id:"supported-types",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Child of"}),(0,s.jsx)(t.th,{children:"Children/Options"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"None"}),(0,s.jsxs)(t.td,{children:[(0,s.jsx)(t.code,{children:"ADJUSTMENT"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(t.code,{children:"FILE"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(t.code,{children:"HEAD_MARGIN"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(t.code,{children:"TYPE"})]})]})})]}),"\n",(0,s.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(t.p,{children:["This part of the setup defines input files that characterize various facility elements. Each facility element is\nspecified in a list. These are later used as input in the ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their\n",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["All facility inputs are in essence a ",(0,s.jsx)(t.code,{children:"CSV"})," (Comma separated file) file that specifies input data to a model that\ncalculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple\n",(0,s.jsx)(t.a,{href:"#supported-types",children:"supported types"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"supported-types",children:"Supported types"}),"\n",(0,s.jsxs)(t.p,{children:["The facility input type is defined using the ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," keyword and defines the type of model applied\nto the data in this file. The input files are in ",(0,s.jsx)(t.code,{children:"CSV"})," (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file."]}),"\n",(0,s.jsx)(t.p,{children:"The supported types are:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"ELECTRICITY2FUEL"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"TABULAR"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"COMPRESSOR_TABULAR"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"PUMP_CHART_SINGLE_SPEED"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.code,{children:"PUMP_CHART_VARIABLE_SPEED"})}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["See ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY INPUTS"})," for details about each of the above supported types and their usage."]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>c});var s=n(67294);const r={},i=s.createContext(r);function c(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.3970a74d.js b/assets/js/5e95c892.3970a74d.js new file mode 100644 index 0000000000..0a520d440e --- /dev/null +++ b/assets/js/5e95c892.3970a74d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9661],{41892:(e,s,n)=>{n.r(s),n.d(s,{default:()=>d});n(67294);var r=n(90512),t=n(1944),u=n(35281),a=n(18790),c=n(32045),o=n(85893);function d(e){return(0,o.jsx)(t.FG,{className:(0,r.Z)(u.k.wrapper.docsPages),children:(0,o.jsx)(c.Z,{children:(0,a.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/60746895.21f8ec3d.js b/assets/js/60746895.21f8ec3d.js new file mode 100644 index 0000000000..c87a7095de --- /dev/null +++ b/assets/js/60746895.21f8ec3d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8282],{3652:(e,t,d)=>{d.r(t),d.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>a,frontMatter:()=>s,metadata:()=>c,toc:()=>o});var n=d(85893),i=d(11151);const s={},r="Markdown",c={id:"contribute/documentation-guide/markdown",title:"Markdown",description:"Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.",source:"@site/docs/contribute/documentation-guide/02-markdown.md",sourceDirName:"contribute/documentation-guide",slug:"/contribute/documentation-guide/markdown",permalink:"/ecalc/docs/contribute/documentation-guide/markdown",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/documentation-guide/02-markdown.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"contribute",previous:{title:"Overview",permalink:"/ecalc/docs/contribute/documentation-guide/documentation"},next:{title:"Guides",permalink:"/ecalc/docs/category/guides"}},l={},o=[{value:"Standard Markdown",id:"standard-markdown",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",del:"del",em:"em",h1:"h1",h2:"h2",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"markdown",children:"Markdown"}),"\n",(0,n.jsxs)(t.p,{children:["Docusaurus uses ",(0,n.jsx)(t.a,{href:"https://daringfireball.net/projects/markdown/syntax",children:"standard Markdown syntax"})," plus ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features",children:"Docusaurus Extended Markdown"})," functionality."]}),"\n",(0,n.jsx)(t.h2,{id:"standard-markdown",children:"Standard Markdown"}),"\n",(0,n.jsx)(t.p,{children:"Here is a quick summary or standard Markdown syntax:"}),"\n",(0,n.jsx)(t.p,{children:"summary = md`"}),"\n",(0,n.jsx)(t.h1,{id:"markdown-summary",children:"Markdown summary"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Desired style"}),(0,n.jsx)(t.th,{children:"Use the following Markdown annotation"}),(0,n.jsx)(t.th,{children:"Produces the following sample HTML"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 1"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"# Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h1>Title</h1>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 2"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"## Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h2>Title</h2>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 3"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h3>Title</h3>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 4"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"#### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h4>Title</h4>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 5"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"##### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h5>Title</h5>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Heading 6"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"###### Title"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<h6>Title</h6>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Paragraph"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"Just start typing"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<p>Just start typing<p>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.strong,{children:"Bold"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"**Text**"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<strong>Text</strong>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.em,{children:"Italic"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"*Text*"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<em>Text</em>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:(0,n.jsx)(t.del,{children:"Strike"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"~~Text~~"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<del>Text</del>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Quoted (indent)"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"> Text"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<blockquote><p>Text</p></blockquote>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.code,{children:"Code"})," (inline)"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"Statement"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<code>Statement</code>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:[(0,n.jsx)(t.code,{children:"Code"})," (fenced)"]}),(0,n.jsxs)(t.td,{children:["Statement 1",(0,n.jsx)("br",{}),"Statement 2",(0,n.jsx)("br",{}),"Statement 3"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<pre><code><span>Statement 1</span><span>Statement 2</span><span>Statement 3</span></code></pre>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"List (unordered)"}),(0,n.jsxs)(t.td,{children:["* List item 1",(0,n.jsx)("br",{}),"* List item 2",(0,n.jsx)("br",{}),"* List item 3"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"List (ordered)"}),(0,n.jsxs)(t.td,{children:["1. List item 1",(0,n.jsx)("br",{}),"2. List item 2",(0,n.jsx)("br",{}),"3. List item 3"]}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"<ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>"})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Images"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"![Alternate text for image](path/to/image)"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:'<img src="path/image.jpg" alt="Alternative text for image>'})})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Hyperlinks"}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:"[Link text](https://www.google.com/)"})}),(0,n.jsx)(t.td,{children:(0,n.jsx)(t.code,{children:'<a href="https://www.google.com/">Link text</a>'})})]})]})]}),"\n",(0,n.jsx)(t.admonition,{type:"note",children:(0,n.jsxs)(t.p,{children:["You may want to escape special html characters using ",(0,n.jsx)(t.code,{children:"\\"}),", and replace the great than symbol with ",(0,n.jsx)(t.code,{children:"<"}),", otherwise Docusaurus\nwill confuse it with html code."]})})]})}function a(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},11151:(e,t,d)=>{d.d(t,{Z:()=>c,a:()=>r});var n=d(67294);const i={},s=n.createContext(i);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61639be2.ecdff55a.js b/assets/js/61639be2.ecdff55a.js new file mode 100644 index 0000000000..5d09e3b7dc --- /dev/null +++ b/assets/js/61639be2.ecdff55a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4075],{192:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>i,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var s=r(85893),o=r(11151);const t={},c="FUELCONSUMERS",a={id:"about/references/keywords/FUELCONSUMERS",title:"FUELCONSUMERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/FUELCONSUMERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUELCONSUMERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL"},next:{title:"FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE"}},d={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"fuelconsumers",children:"FUELCONSUMERS"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"})," keyword covers the fuel consumers on the installation\nthat are not generators. The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," and\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," are required, while\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," is optional and may be used to\noverride the installation's default fuel type."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUELCONSUMERS:\n - NAME: <consumer name>\n CATEGORY: <category>\n ENERGY_USAGE_MODEL: <energy usage model>\n FUEL: <fuel specification>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FUELCONSUMERS:\n - NAME: CompressorFuelConsumer\n CATEGORY: GAS-DRIVEN-COMPRESSOR\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n - NAME: FlareFuelConsumer\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n ...\n - NAME: SomeOtherFuelConsumer\n CATEGORY: MISCELLANEOUS\n FUEL: fuel_gas\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n"})})]})}function i(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(E,{...e})}):E(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var s=r(67294);const o={},t=s.createContext(o);function c(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/63ecd22d.27ad13ee.js b/assets/js/63ecd22d.27ad13ee.js new file mode 100644 index 0000000000..ceee71c04e --- /dev/null +++ b/assets/js/63ecd22d.27ad13ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8980],{10990:(t,o,e)=>{e.r(o),e.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>v,frontMatter:()=>r,metadata:()=>a,toc:()=>u});var n=e(85893),i=e(11151);const r={title:"v8.6 to v8.7",description:"v8.6 to v8.7 migration",sidebar_position:6},s="v8.6 to v8.7",a={id:"about/migration_guides/v8-6_to_v8-7",title:"v8.6 to v8.7",description:"v8.6 to v8.7 migration",source:"@site/docs/about/migration_guides/v8-6_to_v8-7.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-6_to_v8-7",permalink:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-6_to_v8-7.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"v8.6 to v8.7",description:"v8.6 to v8.7 migration",sidebar_position:6},sidebar:"about",previous:{title:"v8.5 to v8.6",permalink:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6"},next:{title:"v8.7 to v8.8",permalink:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8"}},c={},u=[];function d(t){const o={code:"code",h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"v86-to-v87",children:"v8.6 to v8.7"}),"\n",(0,n.jsxs)(o.p,{children:["Change name from ",(0,n.jsx)(o.code,{children:"DIRECT_EMITTERS"})," to ",(0,n.jsx)(o.code,{children:"VENTING_EMITTERS"})," in the Yaml input-file."]})]})}function v(t={}){const{wrapper:o}={...(0,i.a)(),...t.components};return o?(0,n.jsx)(o,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},11151:(t,o,e)=>{e.d(o,{Z:()=>a,a:()=>s});var n=e(67294);const i={},r=n.createContext(i);function s(t){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(o):{...o,...t}}),[o,t])}function a(t){let o;return o=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:s(t.components),n.createElement(r.Provider,{value:o},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/661.bc10841b.js b/assets/js/661.bc10841b.js new file mode 100644 index 0000000000..9c9c9a42ba --- /dev/null +++ b/assets/js/661.bc10841b.js @@ -0,0 +1,1227 @@ +"use strict"; +exports.id = 661; +exports.ids = [661]; +exports.modules = { + +/***/ 62661: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [1, 7], $V5 = [1, 5, 13, 15, 17, 19, 20, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $V6 = [1, 5, 6, 13, 15, 17, 19, 20, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $V7 = [32, 33, 34], $V8 = [2, 7], $V9 = [1, 13], $Va = [1, 17], $Vb = [1, 18], $Vc = [1, 19], $Vd = [1, 20], $Ve = [1, 21], $Vf = [1, 22], $Vg = [1, 23], $Vh = [1, 24], $Vi = [1, 25], $Vj = [1, 26], $Vk = [1, 27], $Vl = [1, 30], $Vm = [1, 31], $Vn = [1, 32], $Vo = [1, 33], $Vp = [1, 34], $Vq = [1, 35], $Vr = [1, 36], $Vs = [1, 37], $Vt = [1, 38], $Vu = [1, 39], $Vv = [1, 40], $Vw = [1, 41], $Vx = [1, 42], $Vy = [1, 57], $Vz = [1, 58], $VA = [5, 22, 26, 32, 33, 34, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "SPACE": 5, "QUADRANT": 6, "document": 7, "line": 8, "statement": 9, "axisDetails": 10, "quadrantDetails": 11, "points": 12, "title": 13, "title_value": 14, "acc_title": 15, "acc_title_value": 16, "acc_descr": 17, "acc_descr_value": 18, "acc_descr_multiline_value": 19, "section": 20, "text": 21, "point_start": 22, "point_x": 23, "point_y": 24, "X-AXIS": 25, "AXIS-TEXT-DELIMITER": 26, "Y-AXIS": 27, "QUADRANT_1": 28, "QUADRANT_2": 29, "QUADRANT_3": 30, "QUADRANT_4": 31, "NEWLINE": 32, "SEMI": 33, "EOF": 34, "alphaNumToken": 35, "textNoTagsToken": 36, "STR": 37, "MD_STR": 38, "alphaNum": 39, "PUNCTUATION": 40, "AMP": 41, "NUM": 42, "ALPHA": 43, "COMMA": 44, "PLUS": 45, "EQUALS": 46, "MULT": 47, "DOT": 48, "BRKT": 49, "UNDERSCORE": 50, "MINUS": 51, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "SPACE", 6: "QUADRANT", 13: "title", 14: "title_value", 15: "acc_title", 16: "acc_title_value", 17: "acc_descr", 18: "acc_descr_value", 19: "acc_descr_multiline_value", 20: "section", 22: "point_start", 23: "point_x", 24: "point_y", 25: "X-AXIS", 26: "AXIS-TEXT-DELIMITER", 27: "Y-AXIS", 28: "QUADRANT_1", 29: "QUADRANT_2", 30: "QUADRANT_3", 31: "QUADRANT_4", 32: "NEWLINE", 33: "SEMI", 34: "EOF", 37: "STR", 38: "MD_STR", 40: "PUNCTUATION", 41: "AMP", 42: "NUM", 43: "ALPHA", 44: "COMMA", 45: "PLUS", 46: "EQUALS", 47: "MULT", 48: "DOT", 49: "BRKT", 50: "UNDERSCORE", 51: "MINUS" }, + productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [9, 0], [9, 2], [9, 1], [9, 1], [9, 1], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [12, 4], [10, 4], [10, 3], [10, 2], [10, 4], [10, 3], [10, 2], [11, 2], [11, 2], [11, 2], [11, 2], [4, 1], [4, 1], [4, 1], [21, 1], [21, 2], [21, 1], [21, 1], [39, 1], [39, 2], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [35, 1], [36, 1], [36, 1], [36, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 12: + this.$ = $$[$0].trim(); + yy.setDiagramTitle(this.$); + break; + case 13: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 14: + case 15: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 16: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 17: + yy.addPoint($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 18: + yy.setXAxisLeftText($$[$0 - 2]); + yy.setXAxisRightText($$[$0]); + break; + case 19: + $$[$0 - 1].text += " ⟶ "; + yy.setXAxisLeftText($$[$0 - 1]); + break; + case 20: + yy.setXAxisLeftText($$[$0]); + break; + case 21: + yy.setYAxisBottomText($$[$0 - 2]); + yy.setYAxisTopText($$[$0]); + break; + case 22: + $$[$0 - 1].text += " ⟶ "; + yy.setYAxisBottomText($$[$0 - 1]); + break; + case 23: + yy.setYAxisBottomText($$[$0]); + break; + case 24: + yy.setQuadrant1Text($$[$0]); + break; + case 25: + yy.setQuadrant2Text($$[$0]); + break; + case 26: + yy.setQuadrant3Text($$[$0]); + break; + case 27: + yy.setQuadrant4Text($$[$0]); + break; + case 31: + this.$ = { text: $$[$0], type: "text" }; + break; + case 32: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 33: + this.$ = { text: $$[$0], type: "text" }; + break; + case 34: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 35: + this.$ = $$[$0]; + break; + case 36: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, { 1: [3] }, { 3: 8, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, { 3: 9, 4: 2, 5: $V0, 6: $V1, 32: $V2, 33: $V3, 34: $V4 }, o($V5, [2, 4], { 7: 10 }), o($V6, [2, 28]), o($V6, [2, 29]), o($V6, [2, 30]), { 1: [2, 1] }, { 1: [2, 2] }, o($V7, $V8, { 8: 11, 9: 12, 10: 14, 11: 15, 12: 16, 21: 28, 35: 29, 1: [2, 3], 5: $V9, 13: $Va, 15: $Vb, 17: $Vc, 19: $Vd, 20: $Ve, 25: $Vf, 27: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V5, [2, 5]), { 4: 43, 32: $V2, 33: $V3, 34: $V4 }, o($V7, $V8, { 10: 14, 11: 15, 12: 16, 21: 28, 35: 29, 9: 44, 5: $V9, 13: $Va, 15: $Vb, 17: $Vc, 19: $Vd, 20: $Ve, 25: $Vf, 27: $Vg, 28: $Vh, 29: $Vi, 30: $Vj, 31: $Vk, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V7, [2, 9]), o($V7, [2, 10]), o($V7, [2, 11]), { 14: [1, 45] }, { 16: [1, 46] }, { 18: [1, 47] }, o($V7, [2, 15]), o($V7, [2, 16]), { 21: 48, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 49, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 50, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 51, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 52, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 21: 53, 35: 29, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }, { 5: $Vy, 22: [1, 54], 35: 56, 36: 55, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }, o($VA, [2, 31]), o($VA, [2, 33]), o($VA, [2, 34]), o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), o($VA, [2, 41]), o($VA, [2, 42]), o($VA, [2, 43]), o($VA, [2, 44]), o($VA, [2, 45]), o($VA, [2, 46]), o($VA, [2, 47]), o($V5, [2, 6]), o($V7, [2, 8]), o($V7, [2, 12]), o($V7, [2, 13]), o($V7, [2, 14]), o($V7, [2, 20], { 36: 55, 35: 56, 5: $Vy, 26: [1, 59], 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 23], { 36: 55, 35: 56, 5: $Vy, 26: [1, 60], 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 24], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 25], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 26], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 27], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), { 23: [1, 61] }, o($VA, [2, 32]), o($VA, [2, 48]), o($VA, [2, 49]), o($VA, [2, 50]), o($V7, [2, 19], { 35: 29, 21: 62, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), o($V7, [2, 22], { 35: 29, 21: 63, 37: $Vl, 38: $Vm, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx }), { 24: [1, 64] }, o($V7, [2, 18], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 21], { 36: 55, 35: 56, 5: $Vy, 40: $Vn, 41: $Vo, 42: $Vp, 43: $Vq, 44: $Vr, 45: $Vs, 46: $Vt, 47: $Vu, 48: $Vv, 49: $Vw, 50: $Vx, 51: $Vz }), o($V7, [2, 17])], + defaultActions: { 8: [2, 1], 9: [2, 2] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + return 32; + case 3: + break; + case 4: + this.begin("title"); + return 13; + case 5: + this.popState(); + return "title_value"; + case 6: + this.begin("acc_title"); + return 15; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 17; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + return 25; + case 14: + return 27; + case 15: + return 26; + case 16: + return 28; + case 17: + return 29; + case 18: + return 30; + case 19: + return 31; + case 20: + this.begin("md_string"); + break; + case 21: + return "MD_STR"; + case 22: + this.popState(); + break; + case 23: + this.begin("string"); + break; + case 24: + this.popState(); + break; + case 25: + return "STR"; + case 26: + this.begin("point_start"); + return 22; + case 27: + this.begin("point_x"); + return 23; + case 28: + this.popState(); + break; + case 29: + this.popState(); + this.begin("point_y"); + break; + case 30: + this.popState(); + return 24; + case 31: + return 6; + case 32: + return 43; + case 33: + return "COLON"; + case 34: + return 45; + case 35: + return 44; + case 36: + return 46; + case 37: + return 46; + case 38: + return 47; + case 39: + return 49; + case 40: + return 50; + case 41: + return 48; + case 42: + return 41; + case 43: + return 51; + case 44: + return 42; + case 45: + return 5; + case 46: + return 33; + case 47: + return 40; + case 48: + return 34; + } + }, + rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?: *x-axis *)/i, /^(?: *y-axis *)/i, /^(?: *--+> *)/i, /^(?: *quadrant-1 *)/i, /^(?: *quadrant-2 *)/i, /^(?: *quadrant-3 *)/i, /^(?: *quadrant-4 *)/i, /^(?:["][`])/i, /^(?:[^`"]+)/i, /^(?:[`]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\s*:\s*\[\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?:\s*\] *)/i, /^(?:\s*,\s*)/i, /^(?:(1)|(0(.\d+)?))/i, /^(?: *quadrantChart *)/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s)/i, /^(?:;)/i, /^(?:[!"#$%&'*+,-.`?\\_/])/i, /^(?:$)/i], + conditions: { "point_y": { "rules": [30], "inclusive": false }, "point_x": { "rules": [29], "inclusive": false }, "point_start": { "rules": [27, 28], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "title": { "rules": [5], "inclusive": false }, "md_string": { "rules": [21, 22], "inclusive": false }, "string": { "rules": [24, 25], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 26, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const defaultThemeVariables = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.D)(); +class QuadrantBuilder { + constructor() { + this.config = this.getDefaultConfig(); + this.themeConfig = this.getDefaultThemeConfig(); + this.data = this.getDefaultData(); + } + getDefaultData() { + return { + titleText: "", + quadrant1Text: "", + quadrant2Text: "", + quadrant3Text: "", + quadrant4Text: "", + xAxisLeftText: "", + xAxisRightText: "", + yAxisBottomText: "", + yAxisTopText: "", + points: [] + }; + } + getDefaultConfig() { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r; + return { + showXAxis: true, + showYAxis: true, + showTitle: true, + chartHeight: ((_a = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _a.chartWidth) || 500, + chartWidth: ((_b = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _b.chartHeight) || 500, + titlePadding: ((_c = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _c.titlePadding) || 10, + titleFontSize: ((_d = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _d.titleFontSize) || 20, + quadrantPadding: ((_e = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _e.quadrantPadding) || 5, + xAxisLabelPadding: ((_f = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _f.xAxisLabelPadding) || 5, + yAxisLabelPadding: ((_g = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _g.yAxisLabelPadding) || 5, + xAxisLabelFontSize: ((_h = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _h.xAxisLabelFontSize) || 16, + yAxisLabelFontSize: ((_i = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _i.yAxisLabelFontSize) || 16, + quadrantLabelFontSize: ((_j = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _j.quadrantLabelFontSize) || 16, + quadrantTextTopPadding: ((_k = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _k.quadrantTextTopPadding) || 5, + pointTextPadding: ((_l = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _l.pointTextPadding) || 5, + pointLabelFontSize: ((_m = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _m.pointLabelFontSize) || 12, + pointRadius: ((_n = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _n.pointRadius) || 5, + xAxisPosition: ((_o = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _o.xAxisPosition) || "top", + yAxisPosition: ((_p = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _p.yAxisPosition) || "left", + quadrantInternalBorderStrokeWidth: ((_q = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _q.quadrantInternalBorderStrokeWidth) || 1, + quadrantExternalBorderStrokeWidth: ((_r = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.quadrantChart) == null ? void 0 : _r.quadrantExternalBorderStrokeWidth) || 2 + }; + } + getDefaultThemeConfig() { + return { + quadrant1Fill: defaultThemeVariables.quadrant1Fill, + quadrant2Fill: defaultThemeVariables.quadrant2Fill, + quadrant3Fill: defaultThemeVariables.quadrant3Fill, + quadrant4Fill: defaultThemeVariables.quadrant4Fill, + quadrant1TextFill: defaultThemeVariables.quadrant1TextFill, + quadrant2TextFill: defaultThemeVariables.quadrant2TextFill, + quadrant3TextFill: defaultThemeVariables.quadrant3TextFill, + quadrant4TextFill: defaultThemeVariables.quadrant4TextFill, + quadrantPointFill: defaultThemeVariables.quadrantPointFill, + quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill, + quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill, + quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill, + quadrantTitleFill: defaultThemeVariables.quadrantTitleFill, + quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill, + quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill + }; + } + clear() { + this.config = this.getDefaultConfig(); + this.themeConfig = this.getDefaultThemeConfig(); + this.data = this.getDefaultData(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("clear called"); + } + setData(data) { + this.data = { ...this.data, ...data }; + } + addPoints(points) { + this.data.points = [...points, ...this.data.points]; + } + setConfig(config2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setConfig called with: ", config2); + this.config = { ...this.config, ...config2 }; + } + setThemeConfig(themeConfig) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("setThemeConfig called with: ", themeConfig); + this.themeConfig = { ...this.themeConfig, ...themeConfig }; + } + calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle) { + const xAxisSpaceCalculation = this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize; + const xAxisSpace = { + top: xAxisPosition === "top" && showXAxis ? xAxisSpaceCalculation : 0, + bottom: xAxisPosition === "bottom" && showXAxis ? xAxisSpaceCalculation : 0 + }; + const yAxisSpaceCalculation = this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize; + const yAxisSpace = { + left: this.config.yAxisPosition === "left" && showYAxis ? yAxisSpaceCalculation : 0, + right: this.config.yAxisPosition === "right" && showYAxis ? yAxisSpaceCalculation : 0 + }; + const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2; + const titleSpace = { + top: showTitle ? titleSpaceCalculation : 0 + }; + const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left; + const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top; + const quadrantWidth = this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right; + const quadrantHeight = this.config.chartHeight - this.config.quadrantPadding * 2 - xAxisSpace.top - xAxisSpace.bottom - titleSpace.top; + const quadrantHalfWidth = quadrantWidth / 2; + const quadrantHalfHeight = quadrantHeight / 2; + const quadrantSpace = { + quadrantLeft, + quadrantTop, + quadrantWidth, + quadrantHalfWidth, + quadrantHeight, + quadrantHalfHeight + }; + return { + xAxisSpace, + yAxisSpace, + titleSpace, + quadrantSpace + }; + } + getAxisLabels(xAxisPosition, showXAxis, showYAxis, spaceData) { + const { quadrantSpace, titleSpace } = spaceData; + const { + quadrantHalfHeight, + quadrantHeight, + quadrantLeft, + quadrantHalfWidth, + quadrantTop, + quadrantWidth + } = quadrantSpace; + const drawXAxisLabelsInMiddle = Boolean(this.data.xAxisRightText); + const drawYAxisLabelsInMiddle = Boolean(this.data.yAxisTopText); + const axisLabels = []; + if (this.data.xAxisLeftText && showXAxis) { + axisLabels.push({ + text: this.data.xAxisLeftText, + fill: this.themeConfig.quadrantXAxisTextFill, + x: quadrantLeft + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), + y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, + fontSize: this.config.xAxisLabelFontSize, + verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: 0 + }); + } + if (this.data.xAxisRightText && showXAxis) { + axisLabels.push({ + text: this.data.xAxisRightText, + fill: this.themeConfig.quadrantXAxisTextFill, + x: quadrantLeft + quadrantHalfWidth + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0), + y: xAxisPosition === "top" ? this.config.xAxisLabelPadding + titleSpace.top : this.config.xAxisLabelPadding + quadrantTop + quadrantHeight + this.config.quadrantPadding, + fontSize: this.config.xAxisLabelFontSize, + verticalPos: drawXAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: 0 + }); + } + if (this.data.yAxisBottomText && showYAxis) { + axisLabels.push({ + text: this.data.yAxisBottomText, + fill: this.themeConfig.quadrantYAxisTextFill, + x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, + y: quadrantTop + quadrantHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), + fontSize: this.config.yAxisLabelFontSize, + verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: -90 + }); + } + if (this.data.yAxisTopText && showYAxis) { + axisLabels.push({ + text: this.data.yAxisTopText, + fill: this.themeConfig.quadrantYAxisTextFill, + x: this.config.yAxisPosition === "left" ? this.config.yAxisLabelPadding : this.config.yAxisLabelPadding + quadrantLeft + quadrantWidth + this.config.quadrantPadding, + y: quadrantTop + quadrantHalfHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0), + fontSize: this.config.yAxisLabelFontSize, + verticalPos: drawYAxisLabelsInMiddle ? "center" : "left", + horizontalPos: "top", + rotation: -90 + }); + } + return axisLabels; + } + getQuadrants(spaceData) { + const { quadrantSpace } = spaceData; + const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace; + const quadrants = [ + { + text: { + text: this.data.quadrant1Text, + fill: this.themeConfig.quadrant1TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft + quadrantHalfWidth, + y: quadrantTop, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant1Fill + }, + { + text: { + text: this.data.quadrant2Text, + fill: this.themeConfig.quadrant2TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft, + y: quadrantTop, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant2Fill + }, + { + text: { + text: this.data.quadrant3Text, + fill: this.themeConfig.quadrant3TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft, + y: quadrantTop + quadrantHalfHeight, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant3Fill + }, + { + text: { + text: this.data.quadrant4Text, + fill: this.themeConfig.quadrant4TextFill, + x: 0, + y: 0, + fontSize: this.config.quadrantLabelFontSize, + verticalPos: "center", + horizontalPos: "middle", + rotation: 0 + }, + x: quadrantLeft + quadrantHalfWidth, + y: quadrantTop + quadrantHalfHeight, + width: quadrantHalfWidth, + height: quadrantHalfHeight, + fill: this.themeConfig.quadrant4Fill + } + ]; + for (const quadrant of quadrants) { + quadrant.text.x = quadrant.x + quadrant.width / 2; + if (this.data.points.length === 0) { + quadrant.text.y = quadrant.y + quadrant.height / 2; + quadrant.text.horizontalPos = "middle"; + } else { + quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding; + quadrant.text.horizontalPos = "top"; + } + } + return quadrants; + } + getQuadrantPoints(spaceData) { + const { quadrantSpace } = spaceData; + const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace; + const xAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain([0, 1]).range([quadrantLeft, quadrantWidth + quadrantLeft]); + const yAxis = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain([0, 1]).range([quadrantHeight + quadrantTop, quadrantTop]); + const points = this.data.points.map((point) => { + const props = { + x: xAxis(point.x), + y: yAxis(point.y), + fill: this.themeConfig.quadrantPointFill, + radius: this.config.pointRadius, + text: { + text: point.text, + fill: this.themeConfig.quadrantPointTextFill, + x: xAxis(point.x), + y: yAxis(point.y) + this.config.pointTextPadding, + verticalPos: "center", + horizontalPos: "top", + fontSize: this.config.pointLabelFontSize, + rotation: 0 + } + }; + return props; + }); + return points; + } + getBorders(spaceData) { + const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2; + const { quadrantSpace } = spaceData; + const { + quadrantHalfHeight, + quadrantHeight, + quadrantLeft, + quadrantHalfWidth, + quadrantTop, + quadrantWidth + } = quadrantSpace; + const borderLines = [ + // top border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft - halfExternalBorderWidth, + y1: quadrantTop, + x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, + y2: quadrantTop + }, + // right border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft + quadrantWidth, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft + quadrantWidth, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // bottom border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft - halfExternalBorderWidth, + y1: quadrantTop + quadrantHeight, + x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth, + y2: quadrantTop + quadrantHeight + }, + // left border + { + strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill, + strokeWidth: this.config.quadrantExternalBorderStrokeWidth, + x1: quadrantLeft, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // vertical inner border + { + strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, + strokeWidth: this.config.quadrantInternalBorderStrokeWidth, + x1: quadrantLeft + quadrantHalfWidth, + y1: quadrantTop + halfExternalBorderWidth, + x2: quadrantLeft + quadrantHalfWidth, + y2: quadrantTop + quadrantHeight - halfExternalBorderWidth + }, + // horizontal inner border + { + strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill, + strokeWidth: this.config.quadrantInternalBorderStrokeWidth, + x1: quadrantLeft + halfExternalBorderWidth, + y1: quadrantTop + quadrantHalfHeight, + x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth, + y2: quadrantTop + quadrantHalfHeight + } + ]; + return borderLines; + } + getTitle(showTitle) { + if (showTitle) { + return { + text: this.data.titleText, + fill: this.themeConfig.quadrantTitleFill, + fontSize: this.config.titleFontSize, + horizontalPos: "top", + verticalPos: "center", + rotation: 0, + y: this.config.titlePadding, + x: this.config.chartWidth / 2 + }; + } + return; + } + build() { + const showXAxis = this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText); + const showYAxis = this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText); + const showTitle = this.config.showTitle && !!this.data.titleText; + const xAxisPosition = this.data.points.length > 0 ? "bottom" : this.config.xAxisPosition; + const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle); + return { + points: this.getQuadrantPoints(calculatedSpace), + quadrants: this.getQuadrants(calculatedSpace), + axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace), + borderLines: this.getBorders(calculatedSpace), + title: this.getTitle(showTitle) + }; + } +} +const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); +function textSanitizer(text) { + return (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.trim(), config); +} +const quadrantBuilder = new QuadrantBuilder(); +function setQuadrant1Text(textObj) { + quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) }); +} +function setQuadrant2Text(textObj) { + quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) }); +} +function setQuadrant3Text(textObj) { + quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) }); +} +function setQuadrant4Text(textObj) { + quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) }); +} +function setXAxisLeftText(textObj) { + quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) }); +} +function setXAxisRightText(textObj) { + quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) }); +} +function setYAxisTopText(textObj) { + quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) }); +} +function setYAxisBottomText(textObj) { + quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) }); +} +function addPoint(textObj, x, y) { + quadrantBuilder.addPoints([{ x, y, text: textSanitizer(textObj.text) }]); +} +function setWidth(width) { + quadrantBuilder.setConfig({ chartWidth: width }); +} +function setHeight(height) { + quadrantBuilder.setConfig({ chartHeight: height }); +} +function getQuadrantData() { + const config2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const { themeVariables, quadrantChart: quadrantChartConfig } = config2; + if (quadrantChartConfig) { + quadrantBuilder.setConfig(quadrantChartConfig); + } + quadrantBuilder.setThemeConfig({ + quadrant1Fill: themeVariables.quadrant1Fill, + quadrant2Fill: themeVariables.quadrant2Fill, + quadrant3Fill: themeVariables.quadrant3Fill, + quadrant4Fill: themeVariables.quadrant4Fill, + quadrant1TextFill: themeVariables.quadrant1TextFill, + quadrant2TextFill: themeVariables.quadrant2TextFill, + quadrant3TextFill: themeVariables.quadrant3TextFill, + quadrant4TextFill: themeVariables.quadrant4TextFill, + quadrantPointFill: themeVariables.quadrantPointFill, + quadrantPointTextFill: themeVariables.quadrantPointTextFill, + quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill, + quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill, + quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill, + quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill, + quadrantTitleFill: themeVariables.quadrantTitleFill + }); + quadrantBuilder.setData({ titleText: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.r)() }); + return quadrantBuilder.build(); +} +const clear = function() { + quadrantBuilder.clear(); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const db = { + setWidth, + setHeight, + setQuadrant1Text, + setQuadrant2Text, + setQuadrant3Text, + setQuadrant4Text, + setXAxisLeftText, + setXAxisRightText, + setYAxisTopText, + setYAxisBottomText, + addPoint, + getQuadrantData, + clear, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.g, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.r, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.b +}; +const draw = (txt, id, _version, diagObj) => { + var _a, _b, _c; + function getDominantBaseLine(horizontalPos) { + return horizontalPos === "top" ? "hanging" : "middle"; + } + function getTextAnchor(verticalPos) { + return verticalPos === "left" ? "start" : "middle"; + } + function getTransformation(data) { + return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`; + } + const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Rendering quadrant chart\n" + txt); + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const group = svg.append("g").attr("class", "main"); + const width = ((_a = conf.quadrantChart) == null ? void 0 : _a.chartWidth) || 500; + const height = ((_b = conf.quadrantChart) == null ? void 0 : _b.chartHeight) || 500; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, width, ((_c = conf.quadrantChart) == null ? void 0 : _c.useMaxWidth) || true); + svg.attr("viewBox", "0 0 " + width + " " + height); + diagObj.db.setHeight(height); + diagObj.db.setWidth(width); + const quadrantData = diagObj.db.getQuadrantData(); + const quadrantsGroup = group.append("g").attr("class", "quadrants"); + const borderGroup = group.append("g").attr("class", "border"); + const dataPointGroup = group.append("g").attr("class", "data-points"); + const labelGroup = group.append("g").attr("class", "labels"); + const titleGroup = group.append("g").attr("class", "title"); + if (quadrantData.title) { + titleGroup.append("text").attr("x", 0).attr("y", 0).attr("fill", quadrantData.title.fill).attr("font-size", quadrantData.title.fontSize).attr("dominant-baseline", getDominantBaseLine(quadrantData.title.horizontalPos)).attr("text-anchor", getTextAnchor(quadrantData.title.verticalPos)).attr("transform", getTransformation(quadrantData.title)).text(quadrantData.title.text); + } + if (quadrantData.borderLines) { + borderGroup.selectAll("line").data(quadrantData.borderLines).enter().append("line").attr("x1", (data) => data.x1).attr("y1", (data) => data.y1).attr("x2", (data) => data.x2).attr("y2", (data) => data.y2).style("stroke", (data) => data.strokeFill).style("stroke-width", (data) => data.strokeWidth); + } + const quadrants = quadrantsGroup.selectAll("g.quadrant").data(quadrantData.quadrants).enter().append("g").attr("class", "quadrant"); + quadrants.append("rect").attr("x", (data) => data.x).attr("y", (data) => data.y).attr("width", (data) => data.width).attr("height", (data) => data.height).attr("fill", (data) => data.fill); + quadrants.append("text").attr("x", 0).attr("y", 0).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( + "dominant-baseline", + (data) => getDominantBaseLine(data.text.horizontalPos) + ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)).text((data) => data.text.text); + const labels = labelGroup.selectAll("g.label").data(quadrantData.axisLabels).enter().append("g").attr("class", "label"); + labels.append("text").attr("x", 0).attr("y", 0).text((data) => data.text).attr("fill", (data) => data.fill).attr("font-size", (data) => data.fontSize).attr("dominant-baseline", (data) => getDominantBaseLine(data.horizontalPos)).attr("text-anchor", (data) => getTextAnchor(data.verticalPos)).attr("transform", (data) => getTransformation(data)); + const dataPoints = dataPointGroup.selectAll("g.data-point").data(quadrantData.points).enter().append("g").attr("class", "data-point"); + dataPoints.append("circle").attr("cx", (data) => data.x).attr("cy", (data) => data.y).attr("r", (data) => data.radius).attr("fill", (data) => data.fill); + dataPoints.append("text").attr("x", 0).attr("y", 0).text((data) => data.text.text).attr("fill", (data) => data.text.fill).attr("font-size", (data) => data.text.fontSize).attr( + "dominant-baseline", + (data) => getDominantBaseLine(data.text.horizontalPos) + ).attr("text-anchor", (data) => getTextAnchor(data.text.verticalPos)).attr("transform", (data) => getTransformation(data.text)); +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles: () => "" +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/66286265.54c83ec6.js b/assets/js/66286265.54c83ec6.js new file mode 100644 index 0000000000..a1532960e8 --- /dev/null +++ b/assets/js/66286265.54c83ec6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[180],{49067:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var r=t(85893),a=t(11151);const s={title:"Tabular models",sidebar_position:4,description:"Tabular models"},i=void 0,o={id:"about/modelling/setup/facility_inputs/tabular",title:"Tabular models",description:"Tabular models",source:"@site/docs/about/modelling/setup/facility_inputs/tabular.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/tabular",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/tabular.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Tabular models",sidebar_position:4,description:"Tabular models"},sidebar:"about",previous:{title:"Sampled compressor model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model"},next:{title:"Models",permalink:"/ecalc/docs/about/modelling/setup/models/"}},l={},d=[{value:"Header and unit requirements",id:"header-and-unit-requirements",level:2},{value:"Example",id:"example",level:3},{value:"1D tabular energy function",id:"1d-tabular-energy-function",level:4},{value:"3D tabular energy function",id:"3d-tabular-energy-function",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["Additional equipment that are considered to be energy consumers can be specified using the keyword ",(0,r.jsx)(n.code,{children:"TABULAR"}),".\nThis is given that a form of reservoir rates (oil/gas production) can be linked to either fuel or power consumption."]}),"\n",(0,r.jsx)(n.p,{children:"This is considered to be a consumer energy function for pure barycentric interpolation, no extrapolation outside\nconvex area. One column defines the function value, the rest of the columns defines the\nvariables for a 1D (if one variable column) or multidimensional interpolation."}),"\n",(0,r.jsx)(n.h2,{id:"header-and-unit-requirements",children:"Header and unit requirements"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Header"}),(0,r.jsx)(n.th,{children:"Unit"}),(0,r.jsx)(n.th,{children:"Comment"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Power"}),(0,r.jsx)(n.td,{children:"MW"}),(0,r.jsx)(n.td,{children:"For power driven consumers"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Fuel"}),(0,r.jsxs)(n.td,{children:["Sm",(0,r.jsx)("sup",{children:"3"}),"/day"]}),(0,r.jsx)(n.td,{children:"For fuel (turbine) driven consumers"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Variable headers can be chosen freely as long as these correspond to the defined variables for the function."}),"\n",(0,r.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h4,{id:"1d-tabular-energy-function",children:"1D tabular energy function"}),"\n",(0,r.jsxs)(n.p,{children:["Contents of the file ",(0,r.jsx)(n.code,{children:"energyfunc_1d_rate_fuel.csv"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:"RATE, FUEL\n0, 0\n1, 137750\n1000000, 137750\n2000000, 145579\n3000000, 153335\n4000000, 161022\n5000000, 168644\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: gasinjectiondata\n FILE: energyfunc_1d_rate_fuel.csv\n TYPE: TABULAR\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," under a fuel consumer:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n ....\n - NAME: gasinjection\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: gasinjectiondata\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_INJ # [Sm3/day]\n"})}),"\n",(0,r.jsx)(n.admonition,{title:"Note",type:"note",children:(0,r.jsxs)(n.p,{children:["Note that the name ",(0,r.jsx)(n.code,{children:"RATE"})," in the input file (under ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUT"}),") and the variable name ",(0,r.jsx)(n.code,{children:"RATE"})," under ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),"\nmust be equal!"]})}),"\n",(0,r.jsx)(n.h4,{id:"3d-tabular-energy-function",children:"3D tabular energy function"}),"\n",(0,r.jsxs)(n.p,{children:["Contents of file ",(0,r.jsx)(n.code,{children:"energyfunc_3d_rate_ps_pd_power.csv"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",children:" RATE, SUCTION_PRESSURE, DISCHARGE_PRESSURE, POWER\n# [Sm3/d], [bar], [bar], [MW]\n 1.00E+06, 10, 12.72, 0.3664\n 1.00E+06, 10, 26.21, 2.293\n 1.00E+06, 26, 31.36, 0.2739\n 1.00E+06, 26, 70.77, 6.28\n 1.00E+06, 34, 41.21, 0.368\n 1.00E+06, 34, 94.24, 8.435\n 1.00E+06, 78, 94.12, 0.7401\n 1.00E+06, 78, 231.6, 22.46\n 6.00E+06, 26, 36.93, 4.197\n 6.00E+06, 26, 57.43, 7.32\n 6.00E+06, 38, 46.96, 2.156\n 6.00E+06, 38, 106.2, 9.557\n 6.00E+06, 54, 67.26, 1.95\n 6.00E+06, 54, 155.6, 14.35\n 6.00E+06, 78, 94.17, 1.399\n 6.00E+06, 78, 231.6, 22.46\n 1.10E+07, 42, 66.92, 9.712\n 1.10E+07, 42, 81.63, 11.89\n 1.10E+07, 62, 75.64, 3.678\n 1.10E+07, 62, 180.8, 16.94\n 1.10E+07, 78, 97.79, 3.452\n 1.10E+07, 78, 231.6, 22.46\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: booster\n FILE: energyfunc_3d_rate_ps_pd_power.csv\n TYPE: TABULAR\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The entry in ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," under a fuel consumer (for 3-d tabular):"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n ...\n - NAME: gasexport\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: booster\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_SALES # [Sm3/day]\n - NAME: SUCTION_PRESSURE\n EXPRESSION: SIM1;SUCTION_PRESSURE {+} 3 # [bara]\n - NAME: DISCHARGE_PRESSURE\n EXPRESSION: 100 # [bara]\n"})})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>i});var r=t(67294);const a={},s=r.createContext(a);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/66a649c0.fe4ad4d1.js b/assets/js/66a649c0.fe4ad4d1.js new file mode 100644 index 0000000000..05c694096f --- /dev/null +++ b/assets/js/66a649c0.fe4ad4d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3240],{96262:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var o=s(85893),n=s(11151);const t={},c="CROSSOVER",i={id:"about/references/keywords/CROSSOVER",title:"CROSSOVER",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CROSSOVER.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CROSSOVER",permalink:"/ecalc/docs/about/references/keywords/CROSSOVER",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CROSSOVER.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT"},next:{title:"CURVE",permalink:"/ecalc/docs/about/references/keywords/CURVE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.h1,{id:"crossover",children:"CROSSOVER"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] / ",(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," / ",(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",children:"CROSSOVER"})]}),"\n",(0,o.jsxs)(r.table,{children:[(0,o.jsx)(r.thead,{children:(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.th,{children:"Required"}),(0,o.jsx)(r.th,{children:"Child of"}),(0,o.jsx)(r.th,{children:"Children/Options"})]})}),(0,o.jsx)(r.tbody,{children:(0,o.jsxs)(r.tr,{children:[(0,o.jsx)(r.td,{children:"Yes"}),(0,o.jsx)(r.td,{children:(0,o.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})}),(0,o.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,o.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.code,{children:"CROSSOVER"}),' specifies what rates will be crossed over from one consumer to another if rate capacity is exceed.\nIf the energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer.\nTo avoid loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower pressure, but not possible to "pressure up" in the crossover flow line. Some examples show how the crossover logic works:']}),"\n",(0,o.jsx)(r.p,{children:"Crossover is given as and list of integer values for the first position is the first consumer, second position is the second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over possible. Note that we use 1-index here."}),"\n",(0,o.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n ...\n CROSSOVER: [3, 3, 0]\n"})})]})}function h(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},11151:(e,r,s)=>{s.d(r,{Z:()=>i,a:()=>c});var o=s(67294);const n={},t=o.createContext(n);function c(e){const r=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),o.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6733.06beca23.js b/assets/js/6733.06beca23.js new file mode 100644 index 0000000000..a79c66938a --- /dev/null +++ b/assets/js/6733.06beca23.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6733],{46733:(t,e,n)=>{n.d(e,{diagram:()=>j});var i=n(28758),s=n(64218),r=n(66893),a=(n(27484),n(17967),n(27856),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,18],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,14],c={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 9:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 10:case 11:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 12:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 13:i.addTask(r[o-1],r[o]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,14:s,16:r,17:a,18:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:n,12:i,14:s,16:r,17:a,18:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,h=r.slice.call(arguments,1),y=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);y.setInput(t,u.yy),u.yy.lexer=y,u.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var d=y.yylloc;r.push(d);var f=y.options&&y.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,x,m,k,_,b,v,$,w,M={};;){if(x=n[n.length-1],this.defaultActions[x]?m=this.defaultActions[x]:(null==g&&(w=void 0,"number"!=typeof(w=i.pop()||y.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),g=w),m=a[x]&&a[x][g]),void 0===m||!m.length||!m[0]){var E="";for(_ in $=[],a[x])this.terminals_[_]&&_>2&&$.push("'"+this.terminals_[_]+"'");E=y.showPosition?"Parse error on line "+(c+1)+":\n"+y.showPosition()+"\nExpecting "+$.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(E,{text:y.match,token:this.terminals_[g]||g,line:y.yylineno,loc:d,expected:$})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(m[0]){case 1:n.push(g),s.push(y.yytext),r.push(y.yylloc),n.push(m[1]),g=null,l=y.yyleng,o=y.yytext,c=y.yylineno,d=y.yylloc;break;case 2:if(b=this.productions_[m[1]][1],M.$=s[s.length-b],M._$={first_line:r[r.length-(b||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(b||1)].first_column,last_column:r[r.length-1].last_column},f&&(M._$.range=[r[r.length-(b||1)].range[0],r[r.length-1].range[1]]),void 0!==(k=this.performAction.apply(M,[o,l,c,u.yy,m[1],s,r].concat(h))))return k;b&&(n=n.slice(0,-1*b*2),s=s.slice(0,-1*b),r=r.slice(0,-1*b)),n.push(this.productions_[m[1]][0]),s.push(M.$),r.push(M._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:case 1:case 3:case 4:break;case 2:return 10;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};function h(){this.yy={}}return c.lexer=l,h.prototype=c,c.Parser=h,new h}());a.parser=a;const o=a;let c="";const l=[],h=[],y=[],u=function(){let t=!0;for(const[e,n]of y.entries())y[e].processed,t=t&&n.processed;return t},p={getConfig:()=>(0,i.c)().journey,clear:function(){l.length=0,h.length=0,c="",y.length=0,(0,i.t)()},setDiagramTitle:i.q,getDiagramTitle:i.r,setAccTitle:i.s,getAccTitle:i.g,setAccDescription:i.b,getAccDescription:i.a,addSection:function(t){c=t,l.push(t)},getSections:function(){return l},getTasks:function(){let t=u();let e=0;for(;!t&&e<100;)t=u(),e++;return h.push(...y),h},addTask:function(t,e){const n=e.substr(1).split(":");let i=0,s=[];1===n.length?(i=Number(n[0]),s=[]):(i=Number(n[0]),s=n[1].split(","));const r=s.map((t=>t.trim())),a={section:c,type:c,people:r,task:t,score:i};y.push(a)},addTaskOrg:function(t){const e={section:c,type:c,description:t,task:t,classes:[]};h.push(e)},getActors:function(){return function(){const t=[];return h.forEach((e=>{e.people&&t.push(...e.people)})),[...new Set(t)].sort()}()}},d=t=>`.label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ${t.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${t.textColor}\n }\n\n .legend {\n fill: ${t.textColor};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${t.textColor}\n }\n\n .face {\n ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${t.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${t.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${t.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${t.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${t.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ${t.tertiaryColor};\n border: 1px solid ${t.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${t.fillType0?`fill: ${t.fillType0}`:""};\n }\n .task-type-1, .section-type-1 {\n ${t.fillType0?`fill: ${t.fillType1}`:""};\n }\n .task-type-2, .section-type-2 {\n ${t.fillType0?`fill: ${t.fillType2}`:""};\n }\n .task-type-3, .section-type-3 {\n ${t.fillType0?`fill: ${t.fillType3}`:""};\n }\n .task-type-4, .section-type-4 {\n ${t.fillType0?`fill: ${t.fillType4}`:""};\n }\n .task-type-5, .section-type-5 {\n ${t.fillType0?`fill: ${t.fillType5}`:""};\n }\n .task-type-6, .section-type-6 {\n ${t.fillType0?`fill: ${t.fillType6}`:""};\n }\n .task-type-7, .section-type-7 {\n ${t.fillType0?`fill: ${t.fillType7}`:""};\n }\n\n .actor-0 {\n ${t.actor0?`fill: ${t.actor0}`:""};\n }\n .actor-1 {\n ${t.actor1?`fill: ${t.actor1}`:""};\n }\n .actor-2 {\n ${t.actor2?`fill: ${t.actor2}`:""};\n }\n .actor-3 {\n ${t.actor3?`fill: ${t.actor3}`:""};\n }\n .actor-4 {\n ${t.actor4?`fill: ${t.actor4}`:""};\n }\n .actor-5 {\n ${t.actor5?`fill: ${t.actor5}`:""};\n }\n`,f=function(t,e){return(0,r.d)(t,e)},g=function(t,e){const n=t.append("circle");return n.attr("cx",e.cx),n.attr("cy",e.cy),n.attr("class","actor-"+e.pos),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("r",e.r),void 0!==n.class&&n.attr("class",n.class),void 0!==e.title&&n.append("title").text(e.title),n},x=function(t,e){return(0,r.f)(t,e)};let m=-1;const k=function(){function t(t,e,n,s,r,a,o,c){i(e.append("text").attr("x",n+r/2).attr("y",s+a/2+5).style("font-color",c).style("text-anchor","middle").text(t),o)}function e(t,e,n,s,r,a,o,c,l){const{taskFontSize:h,taskFontFamily:y}=c,u=t.split(/<br\s*\/?>/gi);for(let p=0;p<u.length;p++){const t=p*h-h*(u.length-1)/2,c=e.append("text").attr("x",n+r/2).attr("y",s).attr("fill",l).style("text-anchor","middle").style("font-size",h).style("font-family",y);c.append("tspan").attr("x",n+r/2).attr("dy",t).text(u[p]),c.attr("y",s+a/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),i(c,o)}}function n(t,n,s,r,a,o,c,l){const h=n.append("switch"),y=h.append("foreignObject").attr("x",s).attr("y",r).attr("width",a).attr("height",o).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");y.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,s,r,a,o,c,l),i(y,c)}function i(t,e){for(const n in e)n in e&&t.attr(n,e[n])}return function(i){return"fo"===i.textPlacement?n:"old"===i.textPlacement?t:e}}(),_=g,b=function(t,e,n){const i=t.append("g"),s=(0,r.g)();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=n.width*e.taskCount+n.diagramMarginX*(e.taskCount-1),s.height=n.height,s.class="journey-section section-type-"+e.num,s.rx=3,s.ry=3,f(i,s),k(n)(e.text,i,s.x,s.y,s.width,s.height,{class:"journey-section section-type-"+e.num},n,e.colour)},v=x,$=function(t,e,n){const i=e.x+n.width/2,a=t.append("g");m++;a.append("line").attr("id","task"+m).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),function(t,e){const n=15,i=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",n).attr("stroke-width",2).attr("overflow","visible"),r=t.append("g");r.append("circle").attr("cx",e.cx-5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),r.append("circle").attr("cx",e.cx+5).attr("cy",e.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),e.score>3?function(t){const i=(0,s.Nb1)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}(r):e.score<3?function(t){const i=(0,s.Nb1)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(n/2.2);t.append("path").attr("class","mouth").attr("d",i).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}(r):r.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(a,{cx:i,cy:300+30*(5-e.score),score:e.score});const o=(0,r.g)();o.x=e.x,o.y=e.y,o.fill=e.fill,o.width=n.width,o.height=n.height,o.class="task task-type-"+e.num,o.rx=3,o.ry=3,f(a,o);let c=e.x+14;e.people.forEach((t=>{const n=e.actors[t].color,i={cx:c,cy:e.y,r:7,fill:n,stroke:"#000",title:t,pos:e.actors[t].position};g(a,i),c+=10})),k(n)(e.task,a,o.x,o.y,o.width,o.height,{class:"task"},n,e.colour)},w=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},M={};const E=(0,i.c)().journey,T=E.leftMargin,S={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,i){void 0===t[e]?t[e]=n:t[e]=i(n,t[e])},updateBounds:function(t,e,n,s){const r=(0,i.c)().journey,a=this;let o=0;var c;this.sequenceItems.forEach((function(i){o++;const l=a.sequenceItems.length-o+1;a.updateVal(i,"starty",e-l*r.boxMargin,Math.min),a.updateVal(i,"stopy",s+l*r.boxMargin,Math.max),a.updateVal(S.data,"startx",t-l*r.boxMargin,Math.min),a.updateVal(S.data,"stopx",n+l*r.boxMargin,Math.max),"activation"!==c&&(a.updateVal(i,"startx",t-l*r.boxMargin,Math.min),a.updateVal(i,"stopx",n+l*r.boxMargin,Math.max),a.updateVal(S.data,"starty",e-l*r.boxMargin,Math.min),a.updateVal(S.data,"stopy",s+l*r.boxMargin,Math.max))}))},insert:function(t,e,n,i){const s=Math.min(t,n),r=Math.max(t,n),a=Math.min(e,i),o=Math.max(e,i);this.updateVal(S.data,"startx",s,Math.min),this.updateVal(S.data,"starty",a,Math.min),this.updateVal(S.data,"stopx",r,Math.max),this.updateVal(S.data,"stopy",o,Math.max),this.updateBounds(s,a,r,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},A=E.sectionFills,I=E.sectionColours,P=function(t,e,n){const s=(0,i.c)().journey;let r="";const a=n+(2*s.height+s.diagramMarginY);let o=0,c="#CCC",l="black",h=0;for(const[i,y]of e.entries()){if(r!==y.section){c=A[o%A.length],h=o%A.length,l=I[o%I.length];let n=0;const a=y.section;for(let t=i;t<e.length&&e[t].section==a;t++)n+=1;const u={x:i*s.taskMargin+i*s.width+T,y:50,text:y.section,fill:c,num:h,colour:l,taskCount:n};b(t,u,s),r=y.section,o++}const n=y.people.reduce(((t,e)=>(M[e]&&(t[e]=M[e]),t)),{});y.x=i*s.taskMargin+i*s.width+T,y.y=a,y.width=s.diagramMarginX,y.height=s.diagramMarginY,y.colour=l,y.fill=c,y.num=h,y.actors=n,$(t,y,s),S.insert(y.x,y.y,y.x+y.width+s.taskMargin,450)}},C={setConf:function(t){Object.keys(t).forEach((function(e){E[e]=t[e]}))},draw:function(t,e,n,r){const a=(0,i.c)().journey,o=(0,i.c)().securityLevel;let c;"sandbox"===o&&(c=(0,s.Ys)("#i"+e));const l="sandbox"===o?(0,s.Ys)(c.nodes()[0].contentDocument.body):(0,s.Ys)("body");S.init();const h=l.select("#"+e);w(h);const y=r.db.getTasks(),u=r.db.getDiagramTitle(),p=r.db.getActors();for(const i in M)delete M[i];let d=0;p.forEach((t=>{M[t]={color:a.actorColours[d%a.actorColours.length],position:d},d++})),function(t){const e=(0,i.c)().journey;let n=60;Object.keys(M).forEach((i=>{const s=M[i].color,r={cx:20,cy:n,r:7,fill:s,stroke:"#000",pos:M[i].position};_(t,r);const a={x:40,y:n+7,fill:"#666",text:i,textMargin:5|e.boxTextMargin};v(t,a),n+=20}))}(h),S.insert(0,0,T,50*Object.keys(M).length),P(h,y,0);const f=S.getBounds();u&&h.append("text").text(u).attr("x",T).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const g=f.stopy-f.starty+2*a.diagramMarginY,x=T+f.stopx+2*a.diagramMarginX;(0,i.i)(h,g,x,a.useMaxWidth),h.append("line").attr("x1",T).attr("y1",4*a.height).attr("x2",x-T-4).attr("y2",4*a.height).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const m=u?70:0;h.attr("viewBox",`${f.startx} -25 ${x} ${g+m}`),h.attr("preserveAspectRatio","xMinYMin meet"),h.attr("height",g+m+25)}},j={parser:o,db:p,renderer:C,styles:d,init:t=>{C.setConf(t.journey),p.clear()}}},66893:(t,e,n)=>{n.d(e,{a:()=>a,b:()=>l,c:()=>c,d:()=>r,e:()=>y,f:()=>o,g:()=>h});var i=n(17967),s=n(28758);const r=(t,e)=>{const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const i in e.attrs)n.attr(i,e.attrs[i]);return void 0!==e.class&&n.attr("class",e.class),n},a=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};r(t,n).lower()},o=(t,e)=>{const n=e.text.replace(s.G," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.attr("class","legend"),i.style("text-anchor",e.anchor),void 0!==e.class&&i.attr("class",e.class);const r=i.append("tspan");return r.attr("x",e.x+2*e.textMargin),r.text(n),i},c=(t,e,n,s)=>{const r=t.append("image");r.attr("x",e),r.attr("y",n);const a=(0,i.Nm)(s);r.attr("xlink:href",a)},l=(t,e,n,s)=>{const r=t.append("use");r.attr("x",e),r.attr("y",n);const a=(0,i.Nm)(s);r.attr("xlink:href",`#${a}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),y=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/676abc7a.03893271.js b/assets/js/676abc7a.03893271.js new file mode 100644 index 0000000000..9861037be6 --- /dev/null +++ b/assets/js/676abc7a.03893271.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5654],{60577:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var s=t(85893),n=t(11151);const i={},d="TIME_SERIES",o={id:"about/references/keywords/TIME_SERIES",title:"TIME_SERIES",description:"TIMESERIES /",source:"@site/docs/about/references/keywords/TIME_SERIES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TIME_SERIES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"},next:{title:"TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"}},a={},c=[{value:"Description",id:"description",level:2},{value:"Required attributes",id:"required-attributes",level:3},{value:"Attributes dependent on time series type",id:"attributes-dependent-on-time-series-type",level:3},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," /"]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(r.p,{children:'This keyword defines the inputs for time dependent variables, or "reservoir\nvariables". For many fields, this may be only one reservoir simulation model. But in some\ncases, one might have several sources for reservoir and other relevant time series variables.'}),"\n",(0,s.jsxs)(r.p,{children:["For example, a field may have a reservoir simulation model for some areas and decline curves in other area of\nthe reservoir. There may also be tie-ins which are affecting the energy/emissions on the field\ninstallations. Also, there may be time profiles for other variables.\nTherefore, a set of sources may be specified with a name, path to data and type. The name is\nlater referred to in the system of energy consumers defined under ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"."]}),"\n",(0,s.jsxs)(r.p,{children:["Reservoir variables and other time varying data not coming from a reservoir simulation model can\nbe specified in a ",(0,s.jsx)(r.a,{href:"https://en.wikipedia.org/wiki/Comma-separated_values",children:"CSV"})," file."]}),"\n",(0,s.jsx)(r.h3,{id:"required-attributes",children:"Required attributes"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Attributes"}),(0,s.jsx)(r.th,{children:"Description"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})}),(0,s.jsx)(r.td,{children:"Reference name of time series"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})}),(0,s.jsx)(r.td,{children:"Time series type; DEFAULT or MISCELLANEOUS"})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FILE",children:"FILE"})}),(0,s.jsx)(r.td,{children:"Path to input file"})]})]})]}),"\n",(0,s.jsx)(r.h3,{id:"attributes-dependent-on-time-series-type",children:"Attributes dependent on time series type"}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{}),(0,s.jsx)(r.th,{children:"DEFAULT"}),(0,s.jsx)(r.th,{children:"MISCELLANEOUS"}),(0,s.jsx)(r.th,{children:"Description"})]})}),(0,s.jsxs)(r.tbody,{children:[(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})}),(0,s.jsx)(r.td,{children:"RIGHT"}),(0,s.jsx)(r.td,{children:"Required: LEFT, RIGHT or LINEAR"}),(0,s.jsx)(r.td,{children:"Defines how rates are interpolated between the given time steps (LEFT/RIGHT/LINEAR)."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",children:"EXTRAPOLATION"})}),(0,s.jsx)(r.td,{children:"FALSE"}),(0,s.jsx)(r.td,{children:"Optional. Default: FALSE"}),(0,s.jsx)(r.td,{children:"Defines whether the rates in the source should be set to 0 after the last time step (FALSE), or equal to value at last time step after the time interval (TRUE)."})]}),(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})}),(0,s.jsx)(r.td,{children:"Optional. Default: TRUE"}),(0,s.jsx)(r.td,{children:"Optional. Default: TRUE"}),(0,s.jsx)(r.td,{children:"Determine if time steps should contribute to global time vector. TRUE or FALSE. At least one time vector is required to be TRUE."})]})]})]}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: SIM1\n TYPE: DEFAULT\n FILE: /path_to_model1/model_data.csv\n - NAME: DATA2\n TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures\n FILE: inputs/somecsvdata.csv\n INFLUENCE_TIME_VECTOR: FALSE\n EXTRAPOLATION: TRUE\n INTERPOLATION_TYPE: RIGHT\n"})}),"\n",(0,s.jsxs)(r.p,{children:["See ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME SERIES"})," for more details about usage."]})]})}function h(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,r,t)=>{t.d(r,{Z:()=>o,a:()=>d});var s=t(67294);const n={},i=s.createContext(n);function d(e){const r=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),s.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/689.a8f72dd5.js b/assets/js/689.a8f72dd5.js new file mode 100644 index 0000000000..f635088a43 --- /dev/null +++ b/assets/js/689.a8f72dd5.js @@ -0,0 +1,742 @@ +"use strict"; +exports.id = 689; +exports.ids = [689]; +exports.modules = { + +/***/ 42689: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [1, 10, 12, 14, 16, 18, 19, 20, 21, 22], $V5 = [2, 4], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 20, 21, 22], $V7 = [20, 21, 22], $V8 = [2, 7], $V9 = [1, 12], $Va = [1, 13], $Vb = [1, 14], $Vc = [1, 15], $Vd = [1, 16], $Ve = [1, 17]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "PIE": 5, "document": 6, "showData": 7, "line": 8, "statement": 9, "txt": 10, "value": 11, "title": 12, "title_value": 13, "acc_title": 14, "acc_title_value": 15, "acc_descr": 16, "acc_descr_value": 17, "acc_descr_multiline_value": 18, "section": 19, "NEWLINE": 20, ";": 21, "EOF": 22, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "PIE", 7: "showData", 10: "txt", 11: "value", 12: "title", 13: "title_value", 14: "acc_title", 15: "acc_title_value", 16: "acc_descr", 17: "acc_descr_value", 18: "acc_descr_multiline_value", 19: "section", 20: "NEWLINE", 21: ";", 22: "EOF" }, + productions_: [0, [3, 2], [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [9, 0], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [4, 1], [4, 1], [4, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.setShowData(true); + break; + case 6: + this.$ = $$[$0 - 1]; + break; + case 8: + yy.addSection($$[$0 - 1], yy.cleanupValue($$[$0])); + break; + case 9: + this.$ = $$[$0].trim(); + yy.setDiagramTitle(this.$); + break; + case 10: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 11: + case 12: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 13: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: $V0, 20: $V1, 21: $V2, 22: $V3 }, { 1: [3] }, { 3: 7, 4: 2, 5: $V0, 20: $V1, 21: $V2, 22: $V3 }, o($V4, $V5, { 6: 8, 7: [1, 9] }), o($V6, [2, 14]), o($V6, [2, 15]), o($V6, [2, 16]), { 1: [2, 1] }, o($V7, $V8, { 8: 10, 9: 11, 1: [2, 2], 10: $V9, 12: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 19: $Ve }), o($V4, $V5, { 6: 18 }), o($V4, [2, 5]), { 4: 19, 20: $V1, 21: $V2, 22: $V3 }, { 11: [1, 20] }, { 13: [1, 21] }, { 15: [1, 22] }, { 17: [1, 23] }, o($V7, [2, 12]), o($V7, [2, 13]), o($V7, $V8, { 8: 10, 9: 11, 1: [2, 3], 10: $V9, 12: $Va, 14: $Vb, 16: $Vc, 18: $Vd, 19: $Ve }), o($V4, [2, 6]), o($V7, [2, 8]), o($V7, [2, 9]), o($V7, [2, 10]), o($V7, [2, 11])], + defaultActions: { 7: [2, 1] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + return 20; + case 3: + break; + case 4: + break; + case 5: + this.begin("title"); + return 12; + case 6: + this.popState(); + return "title_value"; + case 7: + this.begin("acc_title"); + return 14; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.begin("acc_descr"); + return 16; + case 10: + this.popState(); + return "acc_descr_value"; + case 11: + this.begin("acc_descr_multiline"); + break; + case 12: + this.popState(); + break; + case 13: + return "acc_descr_multiline_value"; + case 14: + this.begin("string"); + break; + case 15: + this.popState(); + break; + case 16: + return "txt"; + case 17: + return 5; + case 18: + return 7; + case 19: + return "value"; + case 20: + return 22; + } + }, + rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[\s]+)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:pie\b)/i, /^(?:showData\b)/i, /^(?::[\s]*[\d]+(?:\.[\d]+)?)/i, /^(?:$)/i], + conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [6], "inclusive": false }, "string": { "rules": [15, 16], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 7, 9, 11, 14, 17, 18, 19, 20], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_PIE_CONFIG = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.A.pie; +const DEFAULT_PIE_DB = { + sections: {}, + showData: false, + config: DEFAULT_PIE_CONFIG +}; +let sections = DEFAULT_PIE_DB.sections; +let showData = DEFAULT_PIE_DB.showData; +const config = structuredClone(DEFAULT_PIE_CONFIG); +const getConfig = () => structuredClone(config); +const clear = () => { + sections = structuredClone(DEFAULT_PIE_DB.sections); + showData = DEFAULT_PIE_DB.showData; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const addSection = (label, value) => { + label = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(label, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + if (sections[label] === void 0) { + sections[label] = value; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`added new section: ${label}, with value: ${value}`); + } +}; +const getSections = () => sections; +const cleanupValue = (value) => { + if (value.substring(0, 1) === ":") { + value = value.substring(1).trim(); + } + return Number(value.trim()); +}; +const setShowData = (toggle) => { + showData = toggle; +}; +const getShowData = () => showData; +const db = { + getConfig, + clear, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.r, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.g, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.a, + addSection, + getSections, + cleanupValue, + setShowData, + getShowData +}; +const getStyles = (options) => ` + .pieCircle{ + stroke: ${options.pieStrokeColor}; + stroke-width : ${options.pieStrokeWidth}; + opacity : ${options.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${options.pieOuterStrokeColor}; + stroke-width: ${options.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${options.pieTitleTextSize}; + fill: ${options.pieTitleTextColor}; + font-family: ${options.fontFamily}; + } + .slice { + font-family: ${options.fontFamily}; + fill: ${options.pieSectionTextColor}; + font-size:${options.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${options.pieLegendTextColor}; + font-family: ${options.fontFamily}; + font-size: ${options.pieLegendTextSize}; + } +`; +const styles = getStyles; +const createPieArcs = (sections2) => { + const pieData = Object.entries(sections2).map((element) => { + return { + label: element[0], + value: element[1] + }; + }).sort((a, b) => { + return b.value - a.value; + }); + const pie$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .pie */ .ve8)().value( + (d3Section) => d3Section.value + ); + return pie$1(pieData); +}; +const draw = (text, id, _version, diagObj) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering pie chart\n" + text); + const db2 = diagObj.db; + const globalConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const pieConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.B)(db2.getConfig(), globalConfig.pie); + const MARGIN = 40; + const LEGEND_RECT_SIZE = 18; + const LEGEND_SPACING = 4; + const height = 450; + const pieWidth = height; + const svg = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.z)(id); + const group = svg.append("g"); + const sections2 = db2.getSections(); + group.attr("transform", "translate(" + pieWidth / 2 + "," + height / 2 + ")"); + const { themeVariables } = globalConfig; + let [outerStrokeWidth] = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.C)(themeVariables.pieOuterStrokeWidth); + outerStrokeWidth ?? (outerStrokeWidth = 2); + const textPosition = pieConfig.textPosition; + const radius = Math.min(pieWidth, height) / 2 - MARGIN; + const arcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(0).outerRadius(radius); + const labelArcGenerator = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().innerRadius(radius * textPosition).outerRadius(radius * textPosition); + group.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius + outerStrokeWidth / 2).attr("class", "pieOuterCircle"); + const arcs = createPieArcs(sections2); + const myGeneratedColors = [ + themeVariables.pie1, + themeVariables.pie2, + themeVariables.pie3, + themeVariables.pie4, + themeVariables.pie5, + themeVariables.pie6, + themeVariables.pie7, + themeVariables.pie8, + themeVariables.pie9, + themeVariables.pie10, + themeVariables.pie11, + themeVariables.pie12 + ]; + const color = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleOrdinal */ .PKp)(myGeneratedColors); + group.selectAll("mySlices").data(arcs).enter().append("path").attr("d", arcGenerator).attr("fill", (datum) => { + return color(datum.data.label); + }).attr("class", "pieCircle"); + let sum = 0; + Object.keys(sections2).forEach((key) => { + sum += sections2[key]; + }); + group.selectAll("mySlices").data(arcs).enter().append("text").text((datum) => { + return (datum.data.value / sum * 100).toFixed(0) + "%"; + }).attr("transform", (datum) => { + return "translate(" + labelArcGenerator.centroid(datum) + ")"; + }).style("text-anchor", "middle").attr("class", "slice"); + group.append("text").text(db2.getDiagramTitle()).attr("x", 0).attr("y", -(height - 50) / 2).attr("class", "pieTitleText"); + const legend = group.selectAll(".legend").data(color.domain()).enter().append("g").attr("class", "legend").attr("transform", (_datum, index) => { + const height2 = LEGEND_RECT_SIZE + LEGEND_SPACING; + const offset = height2 * color.domain().length / 2; + const horizontal = 12 * LEGEND_RECT_SIZE; + const vertical = index * height2 - offset; + return "translate(" + horizontal + "," + vertical + ")"; + }); + legend.append("rect").attr("width", LEGEND_RECT_SIZE).attr("height", LEGEND_RECT_SIZE).style("fill", color).style("stroke", color); + legend.data(arcs).append("text").attr("x", LEGEND_RECT_SIZE + LEGEND_SPACING).attr("y", LEGEND_RECT_SIZE - LEGEND_SPACING).text((datum) => { + const { label, value } = datum.data; + if (db2.getShowData()) { + return `${label} [${value}]`; + } + return label; + }); + const longestTextWidth = Math.max( + ...legend.selectAll("text").nodes().map((node) => (node == null ? void 0 : node.getBoundingClientRect().width) ?? 0) + ); + const totalWidth = pieWidth + MARGIN + LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth; + svg.attr("viewBox", `0 0 ${totalWidth} ${height}`); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, height, totalWidth, pieConfig.useMaxWidth); +}; +const renderer = { draw }; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/69fd9be6.5e6f3b90.js b/assets/js/69fd9be6.5e6f3b90.js new file mode 100644 index 0000000000..9a9e5fabd5 --- /dev/null +++ b/assets/js/69fd9be6.5e6f3b90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8570],{39364:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>t,metadata:()=>i,toc:()=>_});var o=r(85893),n=r(11151);const t={title:"Variable speed compressor train multiple streams and pressures",sidebar_position:3,description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model"},a="VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model",i={id:"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",title:"Variable speed compressor train multiple streams and pressures",description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Variable speed compressor train multiple streams and pressures",sidebar_position:3,description:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model"},sidebar:"about",previous:{title:"Compressor system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"},next:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations"}},l={},_=[{value:"Format",id:"format",level:2}];function c(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"variable_speed_compressor_train_multiple_streams_and_pressures-energy-usage-model",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model"}),"\n",(0,o.jsxs)(s.p,{children:["This energy usage model allows the compressor train model type\n",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,o.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-yaml",children:"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n CONDITION: <condition expression>\n COMPRESSOR_TRAIN_MODEL: <reference a Variable speed compressor train model with multiple streams and pressures model>\n RATE_PER_STREAM:\n - <Expression for stream 1>\n - <Expression for stream 2>\n - ...\n - <Expression for stream N>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure expression>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,o.jsxs)(s.p,{children:["The number of elements in ",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",children:"RATE_PER_STREAM"})," must correspond to the number of streams defined for the model referenced in\n",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"}),"."]}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," is required if the model referenced in ",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"})," has has an\ninterstage control pressure defined. If there is no interstage control pressure defined in ",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"}),",\n",(0,o.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})," should not be defined."]})]})}function d(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},11151:(e,s,r)=>{r.d(s,{Z:()=>i,a:()=>a});var o=r(67294);const n={},t=o.createContext(n);function a(e){const s=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6adcc868.7dba0b56.js b/assets/js/6adcc868.7dba0b56.js new file mode 100644 index 0000000000..22f69a4001 --- /dev/null +++ b/assets/js/6adcc868.7dba0b56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8122],{16408:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>l,default:()=>m,frontMatter:()=>t,metadata:()=>i,toc:()=>c});var n=o(85893),r=o(11151);const t={title:"Compressor system",sidebar_position:2,description:"COMPRESSOR_SYSTEM Energy Usage Model"},l="COMPRESSOR_SYSTEM energy usage model",i={id:"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",title:"Compressor system",description:"COMPRESSOR_SYSTEM Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor system",sidebar_position:2,description:"COMPRESSOR_SYSTEM Energy Usage Model"},sidebar:"about",previous:{title:"Compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"},next:{title:"Variable speed compressor train multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"}},a={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"compressor_system-energy-usage-model",children:"COMPRESSOR_SYSTEM energy usage model"}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR_SYSTEM"})," is specified under ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," a fully defined compressor model (with charts) can be used. Here, the following are allowed under the\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR_SYSTEM"})," keyword:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"Simplified variable speed compressor train model"}),","]}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",children:"Sampled compressor model"})}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["The key difference between this model and the ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",children:"COMPRESSOR"})," keyword is that multiple compression trains can be specified."]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n CONDITION: <condition expression>\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model in facility inputs>\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n OPERATIONAL_SETTINGS:\n <operational settings data>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n - RATES:\n - SIM1;GAS_SALES\n - 0\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n - RATES:\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n"})})]})}function m(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,s,o)=>{o.d(s,{Z:()=>i,a:()=>l});var n=o(67294);const r={},t=n.createContext(r);function l(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6bd3279d.a0920aed.js b/assets/js/6bd3279d.a0920aed.js new file mode 100644 index 0000000000..749733bce9 --- /dev/null +++ b/assets/js/6bd3279d.a0920aed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[639],{57597:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>d,toc:()=>a});var s=r(85893),c=r(11151);const t={},o="EMISSION_NAME",d={id:"about/references/keywords/EMISSION_NAME",title:"EMISSION_NAME",description:"Deprecated from eCalc v8.8 (is included in EMISSION).",source:"@site/docs/about/references/keywords/EMISSION_NAME.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION_NAME",permalink:"/ecalc/docs/about/references/keywords/EMISSION_NAME",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION_NAME.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS"},next:{title:"EMISSION_RATE",permalink:"/ecalc/docs/about/references/keywords/EMISSION_RATE"}},i={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"emission_name",children:"EMISSION_NAME"}),"\n",(0,s.jsx)("span",{className:"major-change-deprecation",children:(0,s.jsxs)(n.p,{children:["Deprecated from eCalc v8.8 (is included in ",(0,s.jsx)("strong",{children:"EMISSION"}),")."]})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(n.p,{children:["[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION_NAME",children:"EMISSION_NAME"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"VENTING_EMITTERS"})}),(0,s.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.8: ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",children:"EMISSION_NAME"})," is deprecated, instead NAME is given in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EMISSION",children:"EMISSION"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.7: ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})," keyword is replacing the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",children:"DIRECT_EMITTERS"})," keyword."]}),"\n",(0,s.jsx)(n.li,{children:"eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before."}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"Name of an entity."}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSION_NAME: <name>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["Usage in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - EMISSION_NAME: CH4\n"})})]})}function h(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>o});var s=r(67294);const c={},t=s.createContext(c);function o(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/70f31d65.fe06b9e1.js b/assets/js/70f31d65.fe06b9e1.js new file mode 100644 index 0000000000..34b6b4fea6 --- /dev/null +++ b/assets/js/70f31d65.fe06b9e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7337],{6151:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var t=r(85893),s=r(11151);const o={},c="TURBINE_EFFICIENCIES",i={id:"about/references/keywords/TURBINE_EFFICIENCIES",title:"TURBINE_EFFICIENCIES",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE"},next:{title:"TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function E(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"turbine_efficiencies",children:"TURBINE_EFFICIENCIES"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"TURBINE_EFFICIENCIES"})," is a required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword."]}),"\n",(0,t.jsxs)(n.p,{children:["This ",(0,t.jsx)(n.strong,{children:"must"})," be specified as a fraction and ",(0,t.jsx)(n.strong,{children:"must"})," have equal length to the corresponding ",(0,t.jsx)(n.code,{children:"TURBINE_LOAD"})," values."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(E,{...e})}):E(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>c});var t=r(67294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/718.c8a6130e.js b/assets/js/718.c8a6130e.js new file mode 100644 index 0000000000..bae7437249 --- /dev/null +++ b/assets/js/718.c8a6130e.js @@ -0,0 +1,540 @@ +"use strict"; +exports.id = 718; +exports.ids = [718]; +exports.modules = { + +/***/ 65718: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64218); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 9, 10]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "info": 4, "document": 5, "EOF": 6, "line": 7, "statement": 8, "NL": 9, "showInfo": 10, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "info", 6: "EOF", 9: "NL", 10: "showInfo" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + $$.length - 1; + switch (yystate) { + case 1: + return yy; + case 4: + break; + case 6: + yy.setInfo(true); + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8] }, { 1: [2, 1] }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6])], + defaultActions: { 4: [2, 1] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 4; + case 1: + return 9; + case 2: + return "space"; + case 3: + return 10; + case 4: + return 6; + case 5: + return "TXT"; + } + }, + rules: [/^(?:info\b)/i, /^(?:[\s\n\r]+)/i, /^(?:[\s]+)/i, /^(?:showInfo\b)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "INITIAL": { "rules": [0, 1, 2, 3, 4, 5], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const DEFAULT_INFO_DB = { + info: false +}; +let info = DEFAULT_INFO_DB.info; +const setInfo = (toggle) => { + info = toggle; +}; +const getInfo = () => info; +const clear = () => { + info = DEFAULT_INFO_DB.info; +}; +const db = { + clear, + setInfo, + getInfo +}; +const draw = (text, id, version) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("rendering info diagram\n" + text); + const svg = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.z)(id); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.i)(svg, 100, 400, true); + const group = svg.append("g"); + group.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", 32).style("text-anchor", "middle").text(`v${version}`); +}; +const renderer = { draw }; +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/7180.ddfad669.js b/assets/js/7180.ddfad669.js new file mode 100644 index 0000000000..474c9a8f56 --- /dev/null +++ b/assets/js/7180.ddfad669.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7180],{27180:(t,e,s)=>{s.d(e,{D:()=>l,S:()=>c,a:()=>h,b:()=>a,c:()=>o,d:()=>B,p:()=>r,s:()=>F});var i=s(28758),n=function(){var t=function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},e=[1,2],s=[1,3],i=[1,4],n=[2,4],r=[1,9],o=[1,11],a=[1,15],c=[1,16],l=[1,17],h=[1,18],u=[1,30],d=[1,19],p=[1,20],y=[1,21],f=[1,22],m=[1,23],g=[1,25],S=[1,26],_=[1,27],k=[1,28],T=[1,29],b=[1,32],E=[1,33],x=[1,34],C=[1,35],$=[1,31],v=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],D=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],A=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],L={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"--\x3e":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"--\x3e",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(t,e,s,i,n,r,o){var a=r.length-1;switch(n){case 3:return i.setRootDoc(r[a]),r[a];case 4:this.$=[];break;case 5:"nl"!=r[a]&&(r[a-1].push(r[a]),this.$=r[a-1]);break;case 6:case 7:case 11:this.$=r[a];break;case 8:this.$="nl";break;case 12:const t=r[a-1];t.description=i.trimColon(r[a]),this.$=t;break;case 13:this.$={stmt:"relation",state1:r[a-2],state2:r[a]};break;case 14:const e=i.trimColon(r[a]);this.$={stmt:"relation",state1:r[a-3],state2:r[a-1],description:e};break;case 18:this.$={stmt:"state",id:r[a-3],type:"default",description:"",doc:r[a-1]};break;case 19:var c=r[a],l=r[a-2].trim();if(r[a].match(":")){var h=r[a].split(":");c=h[0],l=[l,h[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 20:this.$={stmt:"state",id:r[a-3],type:"default",description:r[a-5],doc:r[a-1]};break;case 21:this.$={stmt:"state",id:r[a],type:"fork"};break;case 22:this.$={stmt:"state",id:r[a],type:"join"};break;case 23:this.$={stmt:"state",id:r[a],type:"choice"};break;case 24:this.$={stmt:"state",id:i.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:r[a-1].trim(),note:{position:r[a-2].trim(),text:r[a].trim()}};break;case 28:this.$=r[a].trim(),i.setAccTitle(this.$);break;case 29:case 30:this.$=r[a].trim(),i.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:r[a-1].trim(),classes:r[a].trim()};break;case 33:this.$={stmt:"applyClass",id:r[a-1].trim(),styleClass:r[a].trim()};break;case 34:i.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:i.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:i.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:i.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:r[a].trim(),type:"default",description:""};break;case 42:case 43:this.$={stmt:"state",id:r[a-2].trim(),classes:[r[a].trim()],type:"default",description:""}}},table:[{3:1,4:e,5:s,6:i},{1:[3]},{3:5,4:e,5:s,6:i},{3:6,4:e,5:s,6:i},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],n,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,5]),{9:36,10:12,11:13,12:14,15:a,16:c,18:l,21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,7]),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(v,[2,11],{13:[1,37],14:[1,38]}),t(v,[2,15]),{17:[1,39]},t(v,[2,17],{19:[1,40]}),{22:[1,41]},t(v,[2,21]),t(v,[2,22]),t(v,[2,23]),t(v,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(v,[2,27]),{33:[1,46]},{35:[1,47]},t(v,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(D,[2,40],{51:[1,51]}),t(D,[2,41],{51:[1,52]}),t(v,[2,34]),t(v,[2,35]),t(v,[2,36]),t(v,[2,37]),t(v,[2,6]),t(v,[2,12]),{12:53,23:u,50:$},t(v,[2,16]),t(A,n,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(v,[2,28]),t(v,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(v,[2,13],{13:[1,63]}),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,64],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(v,[2,31]),t(v,[2,32]),t(v,[2,33]),t(D,[2,42]),t(D,[2,43]),t(v,[2,14]),t(v,[2,18]),t(A,n,{7:68}),t(v,[2,25]),t(v,[2,26]),{4:r,5:o,8:8,9:10,10:12,11:13,12:14,15:a,16:c,18:l,20:[1,69],21:h,23:u,24:d,25:p,26:y,27:f,28:m,31:24,32:g,34:S,36:_,37:k,41:T,44:b,45:E,46:x,47:C,50:$},t(v,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],i=[],n=[null],r=[],o=this.table,a="",c=0,l=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);u.setInput(t,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var f=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,g,S,_,k,T,b,E,x,C={};;){if(g=s[s.length-1],this.defaultActions[g]?S=this.defaultActions[g]:(null==m&&(x=void 0,"number"!=typeof(x=i.pop()||u.lex()||1)&&(x instanceof Array&&(x=(i=x).pop()),x=e.symbols_[x]||x),m=x),S=o[g]&&o[g][m]),void 0===S||!S.length||!S[0]){var $="";for(k in E=[],o[g])this.terminals_[k]&&k>2&&E.push("'"+this.terminals_[k]+"'");$=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError($,{text:u.match,token:this.terminals_[m]||m,line:u.yylineno,loc:y,expected:E})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(S[0]){case 1:s.push(m),n.push(u.yytext),r.push(u.yylloc),s.push(S[1]),m=null,l=u.yyleng,a=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(T=this.productions_[S[1]][1],C.$=n[n.length-T],C._$={first_line:r[r.length-(T||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(T||1)].first_column,last_column:r[r.length-1].last_column},f&&(C._$.range=[r[r.length-(T||1)].range[0],r[r.length-1].range[1]]),void 0!==(_=this.performAction.apply(C,[a,l,c,d.yy,S[1],n,r].concat(h))))return _;T&&(s=s.slice(0,-1*T*2),n=n.slice(0,-1*T),r=r.slice(0,-1*T)),s.push(this.productions_[S[1]][0]),n.push(C.$),r.push(C._$),b=o[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}},I={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,i,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((s=this._input.match(this.rules[n[r]]))&&(!e||s[0].length>e[0].length)){if(e=s,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,n[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,n[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,s,i){switch(s){case 0:return 40;case 1:case 39:return 44;case 2:case 40:return 45;case 3:case 41:return 46;case 4:case 42:return 47;case 5:case 6:case 8:case 9:case 10:case 11:case 51:case 53:case 59:break;case 7:case 74:return 5;case 12:case 29:return this.pushState("SCALE"),16;case 13:case 30:return 17;case 14:case 20:case 31:case 46:case 49:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 32:this.pushState("STATE");break;case 33:case 36:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 34:case 37:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),25;case 35:case 38:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),26;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:case 61:return this.popState(),"ID";case 47:return"STATE_DESCR";case 48:return 18;case 50:return this.popState(),this.pushState("struct"),19;case 52:return this.popState(),20;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 60:return"NOTE_TEXT";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),e.yytext=e.yytext.substr(2).trim(),30;case 64:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),30;case 65:case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return e.yytext=e.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};function O(){this.yy={}}return L.lexer=I,O.prototype=L,L.Parser=O,new O}();n.parser=n;const r=n,o="TB",a="state",c="relation",l="default",h="divider",u="[*]",d="start",p=u,y="color",f="fill";let m="LR",g=[],S={};let _={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,b=0;const E=t=>JSON.parse(JSON.stringify(t)),x=(t,e,s)=>{if(e.stmt===c)x(t,e.state1,!0),x(t,e.state2,!1);else if(e.stmt===a&&("[*]"===e.id?(e.id=s?t.id+"_start":t.id+"_end",e.start=s):e.id=e.id.trim()),e.doc){const t=[];let s,n=[];for(s=0;s<e.doc.length;s++)if(e.doc[s].type===h){const i=E(e.doc[s]);i.doc=E(n),t.push(i),n=[]}else n.push(e.doc[s]);if(t.length>0&&n.length>0){const s={stmt:a,id:(0,i.F)(),type:"divider",doc:E(n)};t.push(E(s)),e.doc=t}e.doc.forEach((t=>x(e,t,!0)))}},C=function(t,e=l,s=null,n=null,r=null,o=null,a=null,c=null){const h=null==t?void 0:t.trim();if(void 0===k.states[h]?(i.l.info("Adding state ",h,n),k.states[h]={id:h,descriptions:[],type:e,doc:s,note:r,classes:[],styles:[],textStyles:[]}):(k.states[h].doc||(k.states[h].doc=s),k.states[h].type||(k.states[h].type=e)),n&&(i.l.info("Setting state description",h,n),"string"==typeof n&&I(h,n.trim()),"object"==typeof n&&n.forEach((t=>I(h,t.trim())))),r&&(k.states[h].note=r,k.states[h].note.text=i.e.sanitizeText(k.states[h].note.text,(0,i.c)())),o){i.l.info("Setting state classes",h,o);("string"==typeof o?[o]:o).forEach((t=>N(h,t.trim())))}if(a){i.l.info("Setting state styles",h,a);("string"==typeof a?[a]:a).forEach((t=>R(h,t.trim())))}if(c){i.l.info("Setting state styles",h,a);("string"==typeof c?[c]:c).forEach((t=>w(h,t.trim())))}},$=function(t){_={root:{relations:[],states:{},documents:{}}},k=_.root,T=0,S={},t||(0,i.t)()},v=function(t){return k.states[t]};function D(t=""){let e=t;return t===u&&(T++,e=`${d}${T}`),e}function A(t="",e=l){return t===u?d:e}const L=function(t,e,s){if("object"==typeof t)!function(t,e,s){let n=D(t.id.trim()),r=A(t.id.trim(),t.type),o=D(e.id.trim()),a=A(e.id.trim(),e.type);C(n,r,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),C(o,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),k.relations.push({id1:n,id2:o,relationTitle:i.e.sanitizeText(s,(0,i.c)())})}(t,e,s);else{const n=D(t.trim()),r=A(t),o=function(t=""){let e=t;return t===p&&(T++,e=`end${T}`),e}(e.trim()),a=function(t="",e=l){return t===p?"end":e}(e);C(n,r),C(o,a),k.relations.push({id1:n,id2:o,title:i.e.sanitizeText(s,(0,i.c)())})}},I=function(t,e){const s=k.states[t],n=e.startsWith(":")?e.replace(":","").trim():e;s.descriptions.push(i.e.sanitizeText(n,(0,i.c)()))},O=function(t,e=""){void 0===S[t]&&(S[t]={id:t,styles:[],textStyles:[]});const s=S[t];null!=e&&e.split(",").forEach((t=>{const e=t.replace(/([^;]*);/,"$1").trim();if(t.match(y)){const t=e.replace(f,"bgFill").replace(y,f);s.textStyles.push(t)}s.styles.push(e)}))},N=function(t,e){t.split(",").forEach((function(t){let s=v(t);if(void 0===s){const e=t.trim();C(e),s=v(e)}s.classes.push(e)}))},R=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},w=function(t,e){const s=v(t);void 0!==s&&s.textStyles.push(e)},B={getConfig:()=>(0,i.c)().state,addState:C,clear:$,getState:v,getStates:function(){return k.states},getRelations:function(){return k.relations},getClasses:function(){return S},getDirection:()=>m,addRelation:L,getDividerId:()=>(b++,"divider-id-"+b),setDirection:t=>{m=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){i.l.info("Documents = ",_)},getRootDoc:()=>g,setRootDoc:t=>{i.l.info("Setting root doc",t),g=t},getRootDocV2:()=>(x({id:"root"},{id:"root",doc:g},!0),{id:"root",doc:g}),extract:t=>{let e;e=t.doc?t.doc:t,i.l.info(e),$(!0),i.l.info("Extract",e),e.forEach((t=>{switch(t.stmt){case a:C(t.id.trim(),t.type,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles);break;case c:L(t.state1,t.state2,t.description);break;case"classDef":O(t.id.trim(),t.classes);break;case"applyClass":N(t.id.trim(),t.styleClass)}}))},trimColon:t=>t&&":"===t[0]?t.substr(1).trim():t.trim(),getAccTitle:i.g,setAccTitle:i.s,getAccDescription:i.a,setAccDescription:i.b,addStyleClass:O,setCssClass:N,addDescription:I,setDiagramTitle:i.q,getDiagramTitle:i.r},F=t=>`\ndefs #statediagram-barbEnd {\n fill: ${t.transitionColor};\n stroke: ${t.transitionColor};\n }\ng.stateGroup text {\n fill: ${t.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${t.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${t.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${t.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${t.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${t.noteBorderColor};\n fill: ${t.noteBkgColor};\n\n text {\n fill: ${t.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${t.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${t.transitionLabelColor||t.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${t.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${t.specialStateColor};\n stroke: ${t.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${t.innerEndBackground};\n stroke: ${t.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${t.compositeBackground||t.background};\n // stroke: ${t.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${t.stateBkg||t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${t.mainBkg};\n stroke: ${t.stateBorder||t.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${t.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${t.compositeTitleBackground};\n stroke: ${t.stateBorder||t.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${t.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${t.stateBorder||t.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${t.compositeBackground||t.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${t.altBackground?t.altBackground:"#efefef"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${t.noteBkgColor};\n stroke: ${t.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${t.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${t.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${t.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${t.lineColor};\n stroke: ${t.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/72083b41.ebdce974.js b/assets/js/72083b41.ebdce974.js new file mode 100644 index 0000000000..36d90a8b61 --- /dev/null +++ b/assets/js/72083b41.ebdce974.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5178],{33740:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>E,frontMatter:()=>i,metadata:()=>l,toc:()=>t});var c=s(85893),r=s(11151);const i={},d="TYPE",l={id:"about/references/keywords/TYPE",title:"TYPE",description:"[...] /",source:"@site/docs/about/references/keywords/TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"},next:{title:"UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS"}},o={},t=[{value:"Description",id:"description",level:2},{value:"Use in FACILITY_INPUTS",id:"use-in-facility_inputs",level:3},{value:"Use in TIME_SERIES",id:"use-in-time_series",level:3},{value:"Use in ENERGY_USAGE_MODEL",id:"use-in-energy_usage_model",level:3},{value:"Use in MODELS",id:"use-in-models",level:3},{value:"Format",id:"format",level:2}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n.h1,{id:"type",children:"TYPE"}),"\n",(0,c.jsxs)(n.p,{children:["[...] /\n",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," /"]}),"\n",(0,c.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,c.jsxs)(n.p,{children:["The ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is always a string. The allowed strings, and the resulting change in behavior,\nwill depend on where ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is used:"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-facility_inputs",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"ELECTRICITY2FUEL"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"TABULAR"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_TABULAR"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP_CHART_SINGLE_SPEED"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP_CHART_VARIABLE_SPEED"})}),"\n"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-time_series",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"MISCELLANEOUS"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"DEFAULT"})}),"\n"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-energy_usage_model",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"DIRECT"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_SYSTEM"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"PUMP_SYSTEM"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"TABULATED"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n"]}),"\n",(0,c.jsxs)(n.h3,{id:"use-in-models",children:["Use in ",(0,c.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,c.jsxs)(n.ul,{children:["\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"FLUID"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"TURBINE"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"COMPRESSOR_WITH_TURBINE"})}),"\n",(0,c.jsx)(n.li,{children:(0,c.jsx)(n.code,{children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n"]}),"\n",(0,c.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,c.jsx)(n.pre,{children:(0,c.jsx)(n.code,{className:"language-yaml",children:"TYPE: <type>\n"})})]})}function E(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,c.jsx)(n,{...e,children:(0,c.jsx)(h,{...e})}):h(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>d});var c=s(67294);const r={},i=c.createContext(r);function d(e){const n=c.useContext(i);return c.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),c.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/721cfe60.59c0aa13.js b/assets/js/721cfe60.59c0aa13.js new file mode 100644 index 0000000000..0bf4ecdce0 --- /dev/null +++ b/assets/js/721cfe60.59c0aa13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3802],{20808:(t,o,e)=>{e.r(o),e.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>v,frontMatter:()=>r,metadata:()=>a,toc:()=>u});var n=e(85893),i=e(11151);const r={title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",sidebar_position:4},s="v8.3 to v8.4",a={id:"about/migration_guides/v8-3_to_v8-4",title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",source:"@site/docs/about/migration_guides/v8-3_to_v8-4.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-3_to_v8-4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-3_to_v8-4.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"v8.3 to v8.4",description:"v8.3 to v8.4 migration",sidebar_position:4},sidebar:"about",previous:{title:"v8.2 to v8.3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3"},next:{title:"v8.5 to v8.6",permalink:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6"}},c={},u=[];function d(t){const o={h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"v83-to-v84",children:"v8.3 to v8.4"}),"\n",(0,n.jsx)(o.p,{children:"No migration is needed."})]})}function v(t={}){const{wrapper:o}={...(0,i.a)(),...t.components};return o?(0,n.jsx)(o,{...t,children:(0,n.jsx)(d,{...t})}):d(t)}},11151:(t,o,e)=>{e.d(o,{Z:()=>a,a:()=>s});var n=e(67294);const i={},r=n.createContext(i);function s(t){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(o):{...o,...t}}),[o,t])}function a(t){let o;return o=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:s(t.components),n.createElement(r.Provider,{value:o},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/727.ff3685b0.js b/assets/js/727.ff3685b0.js new file mode 100644 index 0000000000..668d8568d8 --- /dev/null +++ b/assets/js/727.ff3685b0.js @@ -0,0 +1,26799 @@ +"use strict"; +exports.id = 727; +exports.ids = [727]; +exports.modules = { + +/***/ 43349: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96225); + + + + +function addHtmlLabel(root, node) { + var fo = root.append('foreignObject').attr('width', '100000'); + + var div = fo.append('xhtml:div'); + div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); + + var label = node.label; + switch (typeof label) { + case 'function': + div.insert(label); + break; + case 'object': + // Currently we assume this is a DOM object. + div.insert(function () { + return label; + }); + break; + default: + div.html(label); + } + + _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .bg(div, node.labelStyle); + div.style('display', 'inline-block'); + // Fix for firefox + div.style('white-space', 'nowrap'); + + var client = div.node().getBoundingClientRect(); + fo.attr('width', client.width).attr('height', client.height); + + return fo; +} + + +/***/ }), + +/***/ 96225: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $p: () => (/* binding */ applyClass), +/* harmony export */ O1: () => (/* binding */ edgeToId), +/* harmony export */ WR: () => (/* binding */ applyTransition), +/* harmony export */ bF: () => (/* binding */ isSubgraph), +/* harmony export */ bg: () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37514); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234); + + +// Public utility functions + + +/* + * Returns true if the specified node in the graph is a subgraph node. A + * subgraph node is one that contains other nodes. + */ +function isSubgraph(g, v) { + return !!g.children(v).length; +} + +function edgeToId(e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +} + +var ID_DELIM = /:/g; +function escapeId(str) { + return str ? String(str).replace(ID_DELIM, '\\:') : ''; +} + +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn); + } +} + +function applyClass(dom, classFn, otherClasses) { + if (classFn) { + dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); + } +} + +function applyTransition(selection, g) { + var graph = g.graph(); + + if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 46060: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ c: () => (/* binding */ write) +/* harmony export */ }); +/* unused harmony export read */ +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49360); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92346); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43836); +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(g.graph())) { + json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(g.graph()); + } + return json; +} + +function writeNodes(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(nodeValue)) { + node.value = nodeValue; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(e.name)) { + edge.name = e.name; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 59792: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61691); +/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71610); +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 92346: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(48451); + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 78932: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39164); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 93920: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ f: () => (/* binding */ flowDb), +/* harmony export */ p: () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeperator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "verticeStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "link": 39, "node": 40, "styledVertex": 41, "AMP": 42, "vertex": 43, "STYLE_SEPARATOR": 44, "idString": 45, "DOUBLECIRCLESTART": 46, "DOUBLECIRCLEEND": 47, "PS": 48, "PE": 49, "(-": 50, "-)": 51, "STADIUMSTART": 52, "STADIUMEND": 53, "SUBROUTINESTART": 54, "SUBROUTINEEND": 55, "VERTEX_WITH_PROPS_START": 56, "NODE_STRING[field]": 57, "COLON": 58, "NODE_STRING[value]": 59, "PIPE": 60, "CYLINDERSTART": 61, "CYLINDEREND": 62, "DIAMOND_START": 63, "DIAMOND_STOP": 64, "TAGEND": 65, "TRAPSTART": 66, "TRAPEND": 67, "INVTRAPSTART": 68, "INVTRAPEND": 69, "linkStatement": 70, "arrowText": 71, "TESTSTR": 72, "START_LINK": 73, "edgeText": 74, "LINK": 75, "edgeTextToken": 76, "STR": 77, "MD_STR": 78, "textToken": 79, "keywords": 80, "STYLE": 81, "LINKSTYLE": 82, "CLASSDEF": 83, "CLASS": 84, "CLICK": 85, "DOWN": 86, "UP": 87, "textNoTagsToken": 88, "stylesOpt": 89, "idString[vertex]": 90, "idString[class]": 91, "CALLBACKNAME": 92, "CALLBACKARGS": 93, "HREF": 94, "LINK_TARGET": 95, "STR[link]": 96, "STR[tooltip]": 97, "alphaNum": 98, "DEFAULT": 99, "numList": 100, "INTERPOLATE": 101, "NUM": 102, "COMMA": 103, "style": 104, "styleComponent": 105, "NODE_STRING": 106, "UNIT": 107, "BRKT": 108, "PCT": 109, "idStringToken": 110, "MINUS": 111, "MULT": 112, "UNICODE_TEXT": 113, "TEXT": 114, "TAGSTART": 115, "EDGE_TEXT": 116, "alphaNumToken": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 42: "AMP", 44: "STYLE_SEPARATOR", 46: "DOUBLECIRCLESTART", 47: "DOUBLECIRCLEEND", 48: "PS", 49: "PE", 50: "(-", 51: "-)", 52: "STADIUMSTART", 53: "STADIUMEND", 54: "SUBROUTINESTART", 55: "SUBROUTINEEND", 56: "VERTEX_WITH_PROPS_START", 57: "NODE_STRING[field]", 58: "COLON", 59: "NODE_STRING[value]", 60: "PIPE", 61: "CYLINDERSTART", 62: "CYLINDEREND", 63: "DIAMOND_START", 64: "DIAMOND_STOP", 65: "TAGEND", 66: "TRAPSTART", 67: "TRAPEND", 68: "INVTRAPSTART", 69: "INVTRAPEND", 72: "TESTSTR", 73: "START_LINK", 75: "LINK", 77: "STR", 78: "MD_STR", 81: "STYLE", 82: "LINKSTYLE", 83: "CLASSDEF", 84: "CLASS", 85: "CLICK", 86: "DOWN", 87: "UP", 90: "idString[vertex]", 91: "idString[class]", 92: "CALLBACKNAME", 93: "CALLBACKARGS", 94: "HREF", 95: "LINK_TARGET", 96: "STR[link]", 97: "STR[tooltip]", 99: "DEFAULT", 101: "INTERPOLATE", 102: "NUM", 103: "COMMA", 106: "NODE_STRING", 107: "UNIT", 108: "BRKT", 109: "PCT", 111: "MINUS", 112: "MULT", 113: "UNICODE_TEXT", 114: "TEXT", 115: "TAGSTART", 116: "EDGE_TEXT", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr" }, + productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + this.$ = []; + break; + case 3: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 4: + case 176: + this.$ = $$[$0]; + break; + case 11: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 12: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 27: + this.$ = $$[$0 - 1].nodes; + break; + case 28: + case 29: + case 30: + case 31: + case 32: + this.$ = []; + break; + case 33: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 34: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 35: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 37: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 38: + case 39: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 43: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 44: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 45: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 46: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 47: + this.$ = [$$[$0]]; + break; + case 48: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 49: + this.$ = $$[$0]; + break; + case 50: + this.$ = $$[$0 - 2]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 51: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 52: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 53: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 54: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 55: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 56: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 57: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 58: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 60: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 61: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 64: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 65: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 67: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 68: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 69: + case 70: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 71: + this.$ = $$[$0]; + break; + case 72: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 73: + this.$ = { text: $$[$0], type: "text" }; + break; + case 74: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 75: + this.$ = { text: $$[$0], type: "string" }; + break; + case 76: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 77: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 78: + this.$ = $$[$0 - 1]; + break; + case 79: + this.$ = { text: $$[$0], type: "text" }; + break; + case 80: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 81: + this.$ = { text: $$[$0], type: "string" }; + break; + case 82: + case 97: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 94: + this.$ = { text: $$[$0], type: "text" }; + break; + case 95: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 96: + this.$ = { text: $$[$0], type: "text" }; + break; + case 98: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 99: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 100: + case 108: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 101: + case 109: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 102: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 103: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 104: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 105: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 106: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 107: + this.$ = $$[$0 - 6]; + yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 6], $$[$0 - 2]); + break; + case 110: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 111: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 112: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 113: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 114: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 115: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 116: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 117: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 118: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 119: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 121: + case 123: + this.$ = [$$[$0]]; + break; + case 122: + case 124: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 126: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 174: + this.$ = $$[$0]; + break; + case 175: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 177: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 178: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 179: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 180: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 181: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 34; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 36; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + this.begin("callbackname"); + break; + case 8: + this.popState(); + break; + case 9: + this.popState(); + this.begin("callbackargs"); + break; + case 10: + return 92; + case 11: + this.popState(); + break; + case 12: + return 93; + case 13: + return "MD_STR"; + case 14: + this.popState(); + break; + case 15: + this.begin("md_string"); + break; + case 16: + return "STR"; + case 17: + this.popState(); + break; + case 18: + this.pushState("string"); + break; + case 19: + return 81; + case 20: + return 99; + case 21: + return 82; + case 22: + return 101; + case 23: + return 83; + case 24: + return 84; + case 25: + return 94; + case 26: + this.begin("click"); + break; + case 27: + this.popState(); + break; + case 28: + return 85; + case 29: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 30: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 31: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 32: + return 27; + case 33: + return 32; + case 34: + return 95; + case 35: + return 95; + case 36: + return 95; + case 37: + return 95; + case 38: + this.popState(); + return 13; + case 39: + this.popState(); + return 14; + case 40: + this.popState(); + return 14; + case 41: + this.popState(); + return 14; + case 42: + this.popState(); + return 14; + case 43: + this.popState(); + return 14; + case 44: + this.popState(); + return 14; + case 45: + this.popState(); + return 14; + case 46: + this.popState(); + return 14; + case 47: + this.popState(); + return 14; + case 48: + this.popState(); + return 14; + case 49: + return 118; + case 50: + return 119; + case 51: + return 120; + case 52: + return 121; + case 53: + return 102; + case 54: + return 108; + case 55: + return 44; + case 56: + return 58; + case 57: + return 42; + case 58: + return 8; + case 59: + return 103; + case 60: + return 112; + case 61: + this.popState(); + return 75; + case 62: + this.pushState("edgeText"); + return 73; + case 63: + return 116; + case 64: + this.popState(); + return 75; + case 65: + this.pushState("thickEdgeText"); + return 73; + case 66: + return 116; + case 67: + this.popState(); + return 75; + case 68: + this.pushState("dottedEdgeText"); + return 73; + case 69: + return 116; + case 70: + return 75; + case 71: + this.popState(); + return 51; + case 72: + return "TEXT"; + case 73: + this.pushState("ellipseText"); + return 50; + case 74: + this.popState(); + return 53; + case 75: + this.pushState("text"); + return 52; + case 76: + this.popState(); + return 55; + case 77: + this.pushState("text"); + return 54; + case 78: + return 56; + case 79: + this.pushState("text"); + return 65; + case 80: + this.popState(); + return 62; + case 81: + this.pushState("text"); + return 61; + case 82: + this.popState(); + return 47; + case 83: + this.pushState("text"); + return 46; + case 84: + this.popState(); + return 67; + case 85: + this.popState(); + return 69; + case 86: + return 114; + case 87: + this.pushState("trapText"); + return 66; + case 88: + this.pushState("trapText"); + return 68; + case 89: + return 115; + case 90: + return 65; + case 91: + return 87; + case 92: + return "SEP"; + case 93: + return 86; + case 94: + return 112; + case 95: + return 108; + case 96: + return 42; + case 97: + return 106; + case 98: + return 111; + case 99: + return 113; + case 100: + this.popState(); + return 60; + case 101: + this.pushState("text"); + return 60; + case 102: + this.popState(); + return 49; + case 103: + this.pushState("text"); + return 48; + case 104: + this.popState(); + return 31; + case 105: + this.pushState("text"); + return 29; + case 106: + this.popState(); + return 64; + case 107: + this.pushState("text"); + return 63; + case 108: + return "TEXT"; + case 109: + return "QUOTE"; + case 110: + return 9; + case 111: + return 10; + case 112: + return 11; + } + }, + rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "callbackargs": { "rules": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "callbackname": { "rules": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "href": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "click": { "rules": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dottedEdgeText": { "rules": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "thickEdgeText": { "rules": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "edgeText": { "rules": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "trapText": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], "inclusive": false }, "ellipseText": { "rules": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "text": { "rules": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], "inclusive": false }, "vertex": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dir": { "rules": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr": { "rules": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_title": { "rules": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "md_string": { "rules": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "string": { "rules": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + if ((edge == null ? void 0 : edge.length) > 10) { + edge.length = 10; + } + if (edges.length < (config.maxEdges ?? 500)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 pushing edge..."); + edges.push(edge); + } else { + throw new Error( + `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.` + ); + } +}; +const addLink = function(_start, _end, type) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos >= edges.length) { + throw new Error( + `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` + ); + } + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(ids, style) { + ids.split(",").forEach(function(id) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); + classes[id].textStyles.push(newStyle); + } + classes[id].styles.push(s); + }); + } + }); +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + if (tooltips.hasOwnProperty(id)) { + return tooltips[id]; + } + return void 0; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.bottom + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = {}; + firstGraphFlag = true; + version = ver; + config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + defaultConfig: () => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.H.flowchart, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.b, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.r +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + + + +/***/ }), + +/***/ 43727: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(93920); +/* harmony import */ var _styles_7383a064_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(36841); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45625); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(46060); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(22424); + + + + + + + + + + + + + + + + + + + + + +const diagram = { + parser: _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__.p, + db: _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__.f, + renderer: _styles_7383a064_js__WEBPACK_IMPORTED_MODULE_8__.f, + styles: _styles_7383a064_js__WEBPACK_IMPORTED_MODULE_8__.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_9__.p)({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); + _styles_7383a064_js__WEBPACK_IMPORTED_MODULE_8__.f.setConf(cnf.flowchart); + _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__.f.clear(); + _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__.f.setGen("gen-2"); + } +}; + + + +/***/ }), + +/***/ 60905: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46060); +/* harmony import */ var _edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(78932); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39164); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + for (let id of Object.keys(clusterDb)) { + const nonClusterChild = clusterDb[id].id; + const parent = graph.parent(nonClusterChild); + if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { + clusterDb[id].id = parent; + } + } + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = structuredClone(edge); + const edge2 = structuredClone(edge); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + const parent = graph.parent(v); + clusterDb[parent].externalConnections = true; + edge.fromCluster = e.v; + } + if (w !== e.w) { + const parent = graph.parent(w); + clusterDb[parent].externalConnections = true; + edge.toCluster = e.w; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + label.attr( + "transform", + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, siteConfig) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender( + nodes, + node.graph, + diagramtype, + id, + graph.node(v), + siteConfig + ); + const newEl = o.elem; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + const { subGraphTitleTotalMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + node.y += subGraphTitleTotalMargin; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + node.height += subGraphTitleTotalMargin; + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + node.y += subGraphTitleTotalMargin / 2; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); + const paths = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + await recursiveRender(elem, graph, diagramtype, id, void 0, siteConfig); +}; + + + +/***/ }), + +/***/ 36841: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ flowStyles), +/* harmony export */ f: () => (/* binding */ flowRendererV2) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28758); +/* harmony import */ var _index_8fae9850_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(60905); +/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43349); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59792); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(51117); + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__/* .addHtmlLabel */ .a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + domId: diagObj.db.lookUpDomId(vertex.id), + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + dir: vertex.dir, + props: vertex.props, + padding: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + case "invisible": + edgeData.thickness = "invisible"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 0;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + g.setEdge(edge.start, edge.end, edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + return diagObj.db.getClasses(); +}; +const draw = async function(text, id, _version, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Drawing flowchart"); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 0, + marginy: 0 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraph - ", subG); + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const vert = diagObj.db.getVertices(); + const edges = diagObj.db.getEdges(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .selectAll */ .td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_8fae9850_js__WEBPACK_IMPORTED_MODULE_4__.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + diagObj.db.indexNodes("subGraph" + i); + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#" + id + ' [id="' + key + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRendererV2 = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const fade = (color, opacity) => { + const channel = khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z(r, g, b, opacity); +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${fade(options.edgeLabelBackground, 0.5)}; + // background-color: + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/733.97aa22de.js b/assets/js/733.97aa22de.js new file mode 100644 index 0000000000..d5149421c0 --- /dev/null +++ b/assets/js/733.97aa22de.js @@ -0,0 +1,1320 @@ +"use strict"; +exports.id = 733; +exports.ids = [733]; +exports.modules = { + +/***/ 46733: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(66893); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 18], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 14]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "line": 7, "SPACE": 8, "statement": 9, "NEWLINE": 10, "title": 11, "acc_title": 12, "acc_title_value": 13, "acc_descr": 14, "acc_descr_value": 15, "acc_descr_multiline_value": 16, "section": 17, "taskName": 18, "taskData": 19, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "journey", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 18: "taskName", 19: "taskData" }, + productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + this.$ = []; + break; + case 3: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 4: + case 5: + this.$ = $$[$0]; + break; + case 6: + case 7: + this.$ = []; + break; + case 8: + yy.setDiagramTitle($$[$0].substr(6)); + this.$ = $$[$0].substr(6); + break; + case 9: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 10: + case 11: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 12: + yy.addSection($$[$0].substr(8)); + this.$ = $$[$0].substr(8); + break; + case 13: + yy.addTask($$[$0 - 1], $$[$0]); + this.$ = "task"; + break; + } + }, + table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o($V0, [2, 7], { 1: [2, 1] }), o($V0, [2, 3]), { 9: 15, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: $V6 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), { 13: [1, 16] }, { 15: [1, 17] }, o($V0, [2, 11]), o($V0, [2, 12]), { 19: [1, 18] }, o($V0, [2, 4]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 13])], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + return 10; + case 3: + break; + case 4: + break; + case 5: + return 4; + case 6: + return 11; + case 7: + this.begin("acc_title"); + return 12; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.begin("acc_descr"); + return 14; + case 10: + this.popState(); + return "acc_descr_value"; + case 11: + this.begin("acc_descr_multiline"); + break; + case 12: + this.popState(); + break; + case 13: + return "acc_descr_multiline_value"; + case 14: + return 17; + case 15: + return 18; + case 16: + return 19; + case 17: + return ":"; + case 18: + return 6; + case 19: + return "INVALID"; + } + }, + rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], + conditions: { "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let currentSection = ""; +const sections = []; +const tasks = []; +const rawTasks = []; +const clear = function() { + sections.length = 0; + tasks.length = 0; + currentSection = ""; + rawTasks.length = 0; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.t)(); +}; +const addSection = function(txt) { + currentSection = txt; + sections.push(txt); +}; +const getSections = function() { + return sections; +}; +const getTasks = function() { + let allItemsProcessed = compileTasks(); + const maxDepth = 100; + let iterationCount = 0; + while (!allItemsProcessed && iterationCount < maxDepth) { + allItemsProcessed = compileTasks(); + iterationCount++; + } + tasks.push(...rawTasks); + return tasks; +}; +const updateActors = function() { + const tempActors = []; + tasks.forEach((task) => { + if (task.people) { + tempActors.push(...task.people); + } + }); + const unique = new Set(tempActors); + return [...unique].sort(); +}; +const addTask = function(descr, taskData) { + const pieces = taskData.substr(1).split(":"); + let score = 0; + let peeps = []; + if (pieces.length === 1) { + score = Number(pieces[0]); + peeps = []; + } else { + score = Number(pieces[0]); + peeps = pieces[1].split(","); + } + const peopleList = peeps.map((s) => s.trim()); + const rawTask = { + section: currentSection, + type: currentSection, + people: peopleList, + task: descr, + score + }; + rawTasks.push(rawTask); +}; +const addTaskOrg = function(descr) { + const newTask = { + section: currentSection, + type: currentSection, + description: descr, + task: descr, + classes: [] + }; + tasks.push(newTask); +}; +const compileTasks = function() { + const compileTask = function(pos) { + return rawTasks[pos].processed; + }; + let allProcessed = true; + for (const [i, rawTask] of rawTasks.entries()) { + compileTask(i); + allProcessed = allProcessed && rawTask.processed; + } + return allProcessed; +}; +const getActors = function() { + return updateActors(); +}; +const db = { + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey, + clear, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.r, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.g, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.b, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.a, + addSection, + getSections, + getTasks, + addTask, + addTaskOrg, + getActors +}; +const getStyles = (options) => `.label { + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + color: ${options.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${options.textColor} + } + + .legend { + fill: ${options.textColor}; + } + + .label text { + fill: #333; + } + .label { + color: ${options.textColor} + } + + .face { + ${options.faceColor ? `fill: ${options.faceColor}` : "fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${options.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${options.fillType0 ? `fill: ${options.fillType0}` : ""}; + } + .task-type-1, .section-type-1 { + ${options.fillType0 ? `fill: ${options.fillType1}` : ""}; + } + .task-type-2, .section-type-2 { + ${options.fillType0 ? `fill: ${options.fillType2}` : ""}; + } + .task-type-3, .section-type-3 { + ${options.fillType0 ? `fill: ${options.fillType3}` : ""}; + } + .task-type-4, .section-type-4 { + ${options.fillType0 ? `fill: ${options.fillType4}` : ""}; + } + .task-type-5, .section-type-5 { + ${options.fillType0 ? `fill: ${options.fillType5}` : ""}; + } + .task-type-6, .section-type-6 { + ${options.fillType0 ? `fill: ${options.fillType6}` : ""}; + } + .task-type-7, .section-type-7 { + ${options.fillType0 ? `fill: ${options.fillType7}` : ""}; + } + + .actor-0 { + ${options.actor0 ? `fill: ${options.actor0}` : ""}; + } + .actor-1 { + ${options.actor1 ? `fill: ${options.actor1}` : ""}; + } + .actor-2 { + ${options.actor2 ? `fill: ${options.actor2}` : ""}; + } + .actor-3 { + ${options.actor3 ? `fill: ${options.actor3}` : ""}; + } + .actor-4 { + ${options.actor4 ? `fill: ${options.actor4}` : ""}; + } + .actor-5 { + ${options.actor5 ? `fill: ${options.actor5}` : ""}; + } +`; +const styles = getStyles; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const drawFace = function(element, faceData) { + const radius = 15; + const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible"); + const face = element.append("g"); + face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"); + function smile(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")"); + } + function sad(face2) { + const arc$1 = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .arc */ .Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); + face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")"); + } + function ambivalent(face2) { + face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666"); + } + if (faceData.score > 3) { + smile(face); + } else if (faceData.score < 3) { + sad(face); + } else { + ambivalent(face); + } + return circleElement; +}; +const drawCircle = function(element, circleData) { + const circleElement = element.append("circle"); + circleElement.attr("cx", circleData.cx); + circleElement.attr("cy", circleData.cy); + circleElement.attr("class", "actor-" + circleData.pos); + circleElement.attr("fill", circleData.fill); + circleElement.attr("stroke", circleData.stroke); + circleElement.attr("r", circleData.r); + if (circleElement.class !== void 0) { + circleElement.attr("class", circleElement.class); + } + if (circleData.title !== void 0) { + circleElement.append("title").text(circleData.title); + } + return circleElement; +}; +const drawText = function(elem, textData) { + return (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.f)(elem, textData); +}; +const drawLabel = function(elem, txtObject) { + function genPoints(x, y, width, height, cut) { + return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height); + } + const polygon = elem.append("polygon"); + polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7)); + polygon.attr("class", "labelBox"); + txtObject.y = txtObject.y + txtObject.labelMargin; + txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; + drawText(elem, txtObject); +}; +const drawSection = function(elem, section, conf2) { + const g = elem.append("g"); + const rect = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = section.x; + rect.y = section.y; + rect.fill = section.fill; + rect.width = conf2.width * section.taskCount + // width of the tasks + conf2.diagramMarginX * (section.taskCount - 1); + rect.height = conf2.height; + rect.class = "journey-section section-type-" + section.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + _drawTextCandidateFunc(conf2)( + section.text, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "journey-section section-type-" + section.num }, + conf2, + section.colour + ); +}; +let taskCount = -1; +const drawTask = function(elem, task, conf2) { + const center = task.x + conf2.width / 2; + const g = elem.append("g"); + taskCount++; + const maxHeight = 300 + 5 * 30; + g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"); + drawFace(g, { + cx: center, + cy: 300 + (5 - task.score) * 30, + score: task.score + }); + const rect = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + rect.x = task.x; + rect.y = task.y; + rect.fill = task.fill; + rect.width = conf2.width; + rect.height = conf2.height; + rect.class = "task task-type-" + task.num; + rect.rx = 3; + rect.ry = 3; + drawRect(g, rect); + let xPos = task.x + 14; + task.people.forEach((person) => { + const colour = task.actors[person].color; + const circle = { + cx: xPos, + cy: task.y, + r: 7, + fill: colour, + stroke: "#000", + title: person, + pos: task.actors[person].position + }; + drawCircle(g, circle); + xPos += 10; + }); + _drawTextCandidateFunc(conf2)( + task.task, + g, + rect.x, + rect.y, + rect.width, + rect.height, + { class: "task" }, + conf2, + task.colour + ); +}; +const drawBackgroundRect = function(elem, bounds2) { + (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2); +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs, colour) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2, colour) { + const { taskFontSize, taskFontFamily } = conf2; + const lines = content.split(/<br\s*\/?>/gi); + for (let i = 0; i < lines.length; i++) { + const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); + text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]); + text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const body = g.append("switch"); + const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("position", "fixed"); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, body, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (key in fromTextAttrsDict) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const initGraphics = function(graphics) { + graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z"); +}; +const svgDraw = { + drawRect, + drawCircle, + drawSection, + drawText, + drawLabel, + drawTask, + drawBackgroundRect, + initGraphics +}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + keys.forEach(function(key) { + conf[key] = cnf[key]; + }); +}; +const actors = {}; +function drawActorLegend(diagram2) { + const conf2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + let yPos = 60; + Object.keys(actors).forEach((person) => { + const colour = actors[person].color; + const circleData = { + cx: 20, + cy: yPos, + r: 7, + fill: colour, + stroke: "#000", + pos: actors[person].position + }; + svgDraw.drawCircle(diagram2, circleData); + const labelData = { + x: 40, + y: yPos + 7, + fill: "#666", + text: person, + textMargin: conf2.boxTextMargin | 5 + }; + svgDraw.drawText(diagram2, labelData); + yPos += 20; + }); +} +const conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; +const LEFT_MARGIN = conf.leftMargin; +const draw = function(text, id, version, diagObj) { + const conf2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + const securityLevel = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + bounds.init(); + const diagram2 = root.select("#" + id); + svgDraw.initGraphics(diagram2); + const tasks2 = diagObj.db.getTasks(); + const title = diagObj.db.getDiagramTitle(); + const actorNames = diagObj.db.getActors(); + for (const member in actors) { + delete actors[member]; + } + let actorPos = 0; + actorNames.forEach((actorName) => { + actors[actorName] = { + color: conf2.actorColours[actorPos % conf2.actorColours.length], + position: actorPos + }; + actorPos++; + }); + drawActorLegend(diagram2); + bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); + drawTasks(diagram2, tasks2, 0); + const box = bounds.getBounds(); + if (title) { + diagram2.append("text").text(title).attr("x", LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25); + } + const height = box.stopy - box.starty + 2 * conf2.diagramMarginY; + const width = LEFT_MARGIN + box.stopx + 2 * conf2.diagramMarginX; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf2.useMaxWidth); + diagram2.append("line").attr("x1", LEFT_MARGIN).attr("y1", conf2.height * 4).attr("x2", width - LEFT_MARGIN - 4).attr("y2", conf2.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); + const extraVertForTitle = title ? 70 : 0; + diagram2.attr("viewBox", `${box.startx} -25 ${width} ${height + extraVertForTitle}`); + diagram2.attr("preserveAspectRatio", "xMinYMin meet"); + diagram2.attr("height", height + extraVertForTitle + 25); +}; +const bounds = { + data: { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }, + verticalPos: 0, + sequenceItems: [], + init: function() { + this.sequenceItems = []; + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0 + }; + this.verticalPos = 0; + }, + updateVal: function(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function(startx, starty, stopx, stopy) { + const conf2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + const _self = this; + let cnt = 0; + function updateFn(type) { + return function updateItemBounds(item) { + cnt++; + const n = _self.sequenceItems.length - cnt + 1; + _self.updateVal(item, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopy", stopy + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopx", stopx + n * conf2.boxMargin, Math.max); + if (!(type === "activation")) { + _self.updateVal(item, "startx", startx - n * conf2.boxMargin, Math.min); + _self.updateVal(item, "stopx", stopx + n * conf2.boxMargin, Math.max); + _self.updateVal(bounds.data, "starty", starty - n * conf2.boxMargin, Math.min); + _self.updateVal(bounds.data, "stopy", stopy + n * conf2.boxMargin, Math.max); + } + }; + } + this.sequenceItems.forEach(updateFn()); + }, + insert: function(startx, starty, stopx, stopy) { + const _startx = Math.min(startx, stopx); + const _stopx = Math.max(startx, stopx); + const _starty = Math.min(starty, stopy); + const _stopy = Math.max(starty, stopy); + this.updateVal(bounds.data, "startx", _startx, Math.min); + this.updateVal(bounds.data, "starty", _starty, Math.min); + this.updateVal(bounds.data, "stopx", _stopx, Math.max); + this.updateVal(bounds.data, "stopy", _stopy, Math.max); + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + bumpVerticalPos: function(bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = this.verticalPos; + }, + getVerticalPos: function() { + return this.verticalPos; + }, + getBounds: function() { + return this.data; + } +}; +const fills = conf.sectionFills; +const textColours = conf.sectionColours; +const drawTasks = function(diagram2, tasks2, verticalPos) { + const conf2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().journey; + let lastSection = ""; + const sectionVHeight = conf2.height * 2 + conf2.diagramMarginY; + const taskPos = verticalPos + sectionVHeight; + let sectionNumber = 0; + let fill = "#CCC"; + let colour = "black"; + let num = 0; + for (const [i, task] of tasks2.entries()) { + if (lastSection !== task.section) { + fill = fills[sectionNumber % fills.length]; + num = sectionNumber % fills.length; + colour = textColours[sectionNumber % textColours.length]; + let taskInSectionCount = 0; + const currentSection2 = task.section; + for (let taskIndex = i; taskIndex < tasks2.length; taskIndex++) { + if (tasks2[taskIndex].section == currentSection2) { + taskInSectionCount = taskInSectionCount + 1; + } else { + break; + } + } + const section = { + x: i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN, + y: 50, + text: task.section, + fill, + num, + colour, + taskCount: taskInSectionCount + }; + svgDraw.drawSection(diagram2, section, conf2); + lastSection = task.section; + sectionNumber++; + } + const taskActors = task.people.reduce((acc, actorName) => { + if (actors[actorName]) { + acc[actorName] = actors[actorName]; + } + return acc; + }, {}); + task.x = i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN; + task.y = taskPos; + task.width = conf2.diagramMarginX; + task.height = conf2.diagramMarginY; + task.colour = colour; + task.fill = fill; + task.num = num; + task.actors = taskActors; + svgDraw.drawTask(diagram2, task, conf2); + bounds.insert(task.x, task.y, task.x + task.width + conf2.taskMargin, 300 + 5 * 30); + } +}; +const renderer = { + setConf, + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: (cnf) => { + renderer.setConf(cnf.journey); + db.clear(); + } +}; + + + +/***/ }), + +/***/ 66893: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ drawBackgroundRect), +/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), +/* harmony export */ c: () => (/* binding */ drawImage), +/* harmony export */ d: () => (/* binding */ drawRect), +/* harmony export */ e: () => (/* binding */ getTextObj), +/* harmony export */ f: () => (/* binding */ drawText), +/* harmony export */ g: () => (/* binding */ getNoteRect) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17967); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +const drawRect = (element, rectData) => { + const rectElement = element.append("rect"); + rectElement.attr("x", rectData.x); + rectElement.attr("y", rectData.y); + rectElement.attr("fill", rectData.fill); + rectElement.attr("stroke", rectData.stroke); + rectElement.attr("width", rectData.width); + rectElement.attr("height", rectData.height); + rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); + rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); + if (rectData.attrs !== void 0) { + for (const attrKey in rectData.attrs) { + rectElement.attr(attrKey, rectData.attrs[attrKey]); + } + } + rectData.class !== void 0 && rectElement.attr("class", rectData.class); + return rectElement; +}; +const drawBackgroundRect = (element, bounds) => { + const rectData = { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + stroke: bounds.stroke, + class: "rect" + }; + const rectElement = drawRect(element, rectData); + rectElement.lower(); +}; +const drawText = (element, textData) => { + const nText = textData.text.replace(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.G, " "); + const textElem = element.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + textData.class !== void 0 && textElem.attr("class", textData.class); + const tspan = textElem.append("tspan"); + tspan.attr("x", textData.x + textData.textMargin * 2); + tspan.text(nText); + return textElem; +}; +const drawImage = (elem, x, y, link) => { + const imageElement = elem.append("image"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = (element, x, y, link) => { + const imageElement = element.append("use"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", `#${sanitizedLink}`); +}; +const getNoteRect = () => { + const noteRectData = { + x: 0, + y: 0, + width: 100, + height: 100, + fill: "#EDF2AE", + stroke: "#666", + anchor: "start", + rx: 0, + ry: 0 + }; + return noteRectData; +}; +const getTextObj = () => { + const testObject = { + x: 0, + y: 0, + width: 100, + height: 100, + "text-anchor": "start", + style: "#666", + textMargin: 0, + rx: 0, + ry: 0, + tspan: true + }; + return testObject; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/7381.77f96fa1.js b/assets/js/7381.77f96fa1.js new file mode 100644 index 0000000000..628a30d615 --- /dev/null +++ b/assets/js/7381.77f96fa1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7381],{97381:(t,e,a)=>{a.d(e,{diagram:()=>y});var r=a(49206),i=a(64218),n=a(41644),d=a(45625),o=a(28758);a(27484),a(17967),a(27856);let s=0;const l=function(t){let e=t.id;return t.type&&(e+="<"+(0,o.v)(t.type)+">"),e},p=function(t,e,a,r){const{displayText:i,cssStyle:n}=e.getDisplayDetails(),d=t.append("tspan").attr("x",r.padding).text(i);""!==n&&d.attr("style",e.cssStyle),a||d.attr("dy",r.textHeight)},c=function(t,e,a,r){o.l.debug("Rendering class ",e,a);const i=e.id,n={id:i,label:e.id,width:0,height:0},d=t.append("g").attr("id",r.db.lookUpDomId(i)).attr("class","classGroup");let s;s=e.link?d.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",a.textHeight+a.padding).attr("x",0):d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);let c=!0;e.annotations.forEach((function(t){const e=s.append("tspan").text("\xab"+t+"\xbb");c||e.attr("dy",a.textHeight),c=!1}));let g=l(e);const h=s.append("tspan").text(g).attr("class","title");c||h.attr("dy",a.textHeight);const f=s.node().getBBox().height;let x,u,y;if(e.members.length>0){x=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin/2).attr("y2",a.padding+f+a.dividerMargin/2);const t=d.append("text").attr("x",a.padding).attr("y",f+a.dividerMargin+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.members.forEach((function(e){p(t,e,c,a),c=!1})),u=t.node().getBBox()}if(e.methods.length>0){y=d.append("line").attr("x1",0).attr("y1",a.padding+f+a.dividerMargin+u.height).attr("y2",a.padding+f+a.dividerMargin+u.height);const t=d.append("text").attr("x",a.padding).attr("y",f+2*a.dividerMargin+u.height+a.textHeight).attr("fill","white").attr("class","classText");c=!0,e.methods.forEach((function(e){p(t,e,c,a),c=!1}))}const b=d.node().getBBox();var m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));const k=d.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",b.width+2*a.padding).attr("height",b.height+a.padding+.5*a.dividerMargin).attr("class",m).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(k-t.getBBox().width)/2)})),e.tooltip&&s.insert("title").text(e.tooltip),x&&x.attr("x2",k),y&&y.attr("x2",k),n.width=k,n.height=b.height+a.padding+.5*a.dividerMargin,n},g=function(t,e,a,r,n){const d=function(t){switch(t){case n.db.relationType.AGGREGATION:return"aggregation";case n.db.relationType.EXTENSION:return"extension";case n.db.relationType.COMPOSITION:return"composition";case n.db.relationType.DEPENDENCY:return"dependency";case n.db.relationType.LOLLIPOP:return"lollipop"}};e.points=e.points.filter((t=>!Number.isNaN(t.y)));const l=e.points,p=(0,i.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(i.$0Z),c=t.append("path").attr("d",p(l)).attr("id","edge"+s).attr("class","relation");let g,h,f="";r.arrowMarkerAbsolute&&(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,f=f.replace(/\(/g,"\\("),f=f.replace(/\)/g,"\\)")),1==a.relation.lineType&&c.attr("class","relation dashed-line"),10==a.relation.lineType&&c.attr("class","relation dotted-line"),"none"!==a.relation.type1&&c.attr("marker-start","url("+f+"#"+d(a.relation.type1)+"Start)"),"none"!==a.relation.type2&&c.attr("marker-end","url("+f+"#"+d(a.relation.type2)+"End)");const x=e.points.length;let u,y,b,m,k=o.u.calcLabelPosition(e.points);if(g=k.x,h=k.y,x%2!=0&&x>1){let t=o.u.calcCardinalityPosition("none"!==a.relation.type1,e.points,e.points[0]),r=o.u.calcCardinalityPosition("none"!==a.relation.type2,e.points,e.points[x-1]);o.l.debug("cardinality_1_point "+JSON.stringify(t)),o.l.debug("cardinality_2_point "+JSON.stringify(r)),u=t.x,y=t.y,b=r.x,m=r.y}if(void 0!==a.title){const e=t.append("g").attr("class","classLabel"),i=e.append("text").attr("class","label").attr("x",g).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(a.title);window.label=i;const n=i.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",n.x-r.padding/2).attr("y",n.y-r.padding/2).attr("width",n.width+r.padding).attr("height",n.height+r.padding)}if(o.l.info("Rendering relation "+JSON.stringify(a)),void 0!==a.relationTitle1&&"none"!==a.relationTitle1){t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",y).attr("fill","black").attr("font-size","6").text(a.relationTitle1)}if(void 0!==a.relationTitle2&&"none"!==a.relationTitle2){t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",m).attr("fill","black").attr("font-size","6").text(a.relationTitle2)}s++},h=function(t,e,a,r){o.l.debug("Rendering note ",e,a);const i=e.id,n={id:i,text:e.text,width:0,height:0},d=t.append("g").attr("id",i).attr("class","classGroup");let s=d.append("text").attr("y",a.textHeight+a.padding).attr("x",0);const l=JSON.parse(`"${e.text}"`).split("\n");l.forEach((function(t){o.l.debug(`Adding line: ${t}`),s.append("tspan").text(t).attr("class","title").attr("dy",a.textHeight)}));const p=d.node().getBBox(),c=d.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",p.width+2*a.padding).attr("height",p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin).node().getBBox().width;return s.node().childNodes.forEach((function(t){t.setAttribute("x",(c-t.getBBox().width)/2)})),n.width=c,n.height=p.height+l.length*a.textHeight+a.padding+.5*a.dividerMargin,n};let f={};const x=function(t){const e=Object.entries(f).find((e=>e[1].label===t));if(e)return e[0]},u={draw:function(t,e,a,r){const s=(0,o.c)().class;f={},o.l.info("Rendering diagram "+t);const l=(0,o.c)().securityLevel;let p;"sandbox"===l&&(p=(0,i.Ys)("#i"+e));const u="sandbox"===l?(0,i.Ys)(p.nodes()[0].contentDocument.body):(0,i.Ys)("body"),y=u.select(`[id='${e}']`);var b;(b=y).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),b.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),b.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),b.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z");const m=new d.k({multigraph:!0});m.setGraph({isMultiGraph:!0}),m.setDefaultEdgeLabel((function(){return{}}));const k=r.db.getClasses(),w=Object.keys(k);for(const i of w){const t=k[i],e=c(y,t,s,r);f[e.id]=e,m.setNode(e.id,e),o.l.info("Org height: "+e.height)}r.db.getRelations().forEach((function(t){o.l.info("tjoho"+x(t.id1)+x(t.id2)+JSON.stringify(t)),m.setEdge(x(t.id1),x(t.id2),{relation:t},t.title||"DEFAULT")}));r.db.getNotes().forEach((function(t){o.l.debug(`Adding note: ${JSON.stringify(t)}`);const e=h(y,t,s,r);f[e.id]=e,m.setNode(e.id,e),t.class&&t.class in k&&m.setEdge(t.id,x(t.class),{relation:{id1:t.id,id2:t.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")})),(0,n.bK)(m),m.nodes().forEach((function(t){void 0!==t&&void 0!==m.node(t)&&(o.l.debug("Node "+t+": "+JSON.stringify(m.node(t))),u.select("#"+(r.db.lookUpDomId(t)||t)).attr("transform","translate("+(m.node(t).x-m.node(t).width/2)+","+(m.node(t).y-m.node(t).height/2)+" )"))})),m.edges().forEach((function(t){void 0!==t&&void 0!==m.edge(t)&&(o.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(m.edge(t))),g(y,m.edge(t),m.edge(t).relation,s,r))}));const L=y.node().getBBox(),v=L.width+40,E=L.height+40;(0,o.i)(y,E,v,s.useMaxWidth);const M=`${L.x-20} ${L.y-20} ${v} ${E}`;o.l.debug(`viewBox ${M}`),y.attr("viewBox",M)}},y={parser:r.p,db:r.d,renderer:u,styles:r.s,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,r.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/7497.e58bfc8c.js b/assets/js/7497.e58bfc8c.js new file mode 100644 index 0000000000..a183f2c686 --- /dev/null +++ b/assets/js/7497.e58bfc8c.js @@ -0,0 +1,2 @@ +/*! For license information please see 7497.e58bfc8c.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7497],{84182:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).FDLayoutConstants;function i(){}for(var a in r)i[a]=r[a];i.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,i.DEFAULT_RADIAL_SEPARATION=r.DEFAULT_EDGE_LENGTH,i.DEFAULT_COMPONENT_SEPERATION=60,i.TILE=!0,i.TILING_PADDING_VERTICAL=10,i.TILING_PADDING_HORIZONTAL=10,i.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutEdge;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraph;function i(e,t,n){r.call(this,e,t,n)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).LGraphManager;function i(e){r.call(this,e)}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];e.exports=i},function(e,t,n){"use strict";var r=n(0).FDLayoutNode,i=n(0).IMath;function a(e,t,n,i){r.call(this,e,t,n,i)}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];a.prototype.move=function(){var e=this.graphManager.getLayout();this.displacementX=e.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=e.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementX=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementX)),Math.abs(this.displacementY)>e.coolingFactor*e.maxNodeDisplacement&&(this.displacementY=e.coolingFactor*e.maxNodeDisplacement*i.sign(this.displacementY)),null==this.child||0==this.child.getNodes().length?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),e.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},a.prototype.propogateDisplacementToChildren=function(e,t){for(var n,r=this.getChild().getNodes(),i=0;i<r.length;i++)null==(n=r[i]).getChild()?(n.moveBy(e,t),n.displacementX+=e,n.displacementY+=t):n.propogateDisplacementToChildren(e,t)},a.prototype.setPred1=function(e){this.pred1=e},a.prototype.getPred1=function(){return pred1},a.prototype.getPred2=function(){return pred2},a.prototype.setNext=function(e){this.next=e},a.prototype.getNext=function(){return next},a.prototype.setProcessed=function(e){this.processed=e},a.prototype.isProcessed=function(){return processed},e.exports=a},function(e,t,n){"use strict";var r=n(0).FDLayout,i=n(4),a=n(3),o=n(5),s=n(2),l=n(1),u=n(0).FDLayoutConstants,c=n(0).LayoutConstants,h=n(0).Point,d=n(0).PointD,p=n(0).Layout,g=n(0).Integer,f=n(0).IGeometry,v=n(0).LGraph,y=n(0).Transform;function m(){r.call(this),this.toBeTiled={}}for(var b in m.prototype=Object.create(r.prototype),r)m[b]=r[b];m.prototype.newGraphManager=function(){var e=new i(this);return this.graphManager=e,e},m.prototype.newGraph=function(e){return new a(null,this.graphManager,e)},m.prototype.newNode=function(e){return new o(this.graphManager,e)},m.prototype.newEdge=function(e){return new s(null,null,e)},m.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.springConstant=u.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=u.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=u.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=u.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=u.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=u.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1,this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/u.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=u.CONVERGENCE_CHECK_PERIOD/this.maxIterations,this.coolingAdjuster=1)},m.prototype.layout=function(){return c.DEFAULT_CREATE_BENDS_AS_NEEDED&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},m.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental)l.TREE_REDUCTION_ON_INCREMENTAL&&(this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation(),t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)})),this.graphManager.setAllNodesToApplyGravitation(n));else{var e=this.getFlatForest();if(e.length>0)this.positionNodesRadially(e);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var t=new Set(this.getAllNodes()),n=this.nodesWithGravity.filter((function(e){return t.has(e)}));this.graphManager.setAllNodesToApplyGravitation(n),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},m.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}if(this.totalIterations%u.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged()){if(!(this.prunedNodesAll.length>0))return!0;this.isTreeGrowing=!0}this.coolingCycle++,0==this.layoutQuality?this.coolingAdjuster=this.coolingCycle:1==this.layoutQuality&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var e=new Set(this.getAllNodes()),t=this.nodesWithGravity.filter((function(t){return e.has(t)}));this.graphManager.setAllNodesToApplyGravitation(t),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=u.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var n=!this.isTreeGrowing&&!this.isGrowthFinished,r=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(n,r),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},m.prototype.getPositionsData=function(){for(var e=this.graphManager.getAllNodes(),t={},n=0;n<e.length;n++){var r=e[n].rect,i=e[n].id;t[i]={id:i,x:r.getCenterX(),y:r.getCenterY(),w:r.width,h:r.height}}return t},m.prototype.runSpringEmbedder=function(){this.initialAnimationPeriod=25,this.animationPeriod=this.initialAnimationPeriod;var e=!1;if("during"===u.ANIMATE)this.emit("layoutstarted");else{for(;!e;)e=this.tick();this.graphManager.updateBounds()}},m.prototype.calculateNodesToApplyGravitationTo=function(){var e,t,n=[],r=this.graphManager.getGraphs(),i=r.length;for(t=0;t<i;t++)(e=r[t]).updateConnected(),e.isConnected||(n=n.concat(e.getNodes()));return n},m.prototype.createBendpoints=function(){var e=[];e=e.concat(this.graphManager.getAllEdges());var t,n=new Set;for(t=0;t<e.length;t++){var r=e[t];if(!n.has(r)){var i=r.getSource(),a=r.getTarget();if(i==a)r.getBendpoints().push(new d),r.getBendpoints().push(new d),this.createDummyNodesForBendpoints(r),n.add(r);else{var o=[];if(o=(o=o.concat(i.getEdgeListToNode(a))).concat(a.getEdgeListToNode(i)),!n.has(o[0])){var s;if(o.length>1)for(s=0;s<o.length;s++){var l=o[s];l.getBendpoints().push(new d),this.createDummyNodesForBendpoints(l)}o.forEach((function(e){n.add(e)}))}}}if(n.size==e.length)break}},m.prototype.positionNodesRadially=function(e){for(var t=new h(0,0),n=Math.ceil(Math.sqrt(e.length)),r=0,i=0,a=0,o=new d(0,0),s=0;s<e.length;s++){s%n==0&&(a=0,i=r,0!=s&&(i+=l.DEFAULT_COMPONENT_SEPERATION),r=0);var u=e[s],g=p.findCenterOfTree(u);t.x=a,t.y=i,(o=m.radialLayout(u,g,t)).y>r&&(r=Math.floor(o.y)),a=Math.floor(o.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new d(c.WORLD_CENTER_X-o.x/2,c.WORLD_CENTER_Y-o.y/2))},m.radialLayout=function(e,t,n){var r=Math.max(this.maxDiagonalInTree(e),l.DEFAULT_RADIAL_SEPARATION);m.branchRadialLayout(t,null,0,359,0,r);var i=v.calculateBounds(e),a=new y;a.setDeviceOrgX(i.getMinX()),a.setDeviceOrgY(i.getMinY()),a.setWorldOrgX(n.x),a.setWorldOrgY(n.y);for(var o=0;o<e.length;o++)e[o].transform(a);var s=new d(i.getMaxX(),i.getMaxY());return a.inverseTransformPoint(s)},m.branchRadialLayout=function(e,t,n,r,i,a){var o=(r-n+1)/2;o<0&&(o+=180);var s=(o+n)%360*f.TWO_PI/360,l=(Math.cos(s),i*Math.cos(s)),u=i*Math.sin(s);e.setCenter(l,u);var c=[],h=(c=c.concat(e.getEdges())).length;null!=t&&h--;for(var d,p=0,g=c.length,v=e.getEdgesBetween(t);v.length>1;){var y=v[0];v.splice(0,1);var b=c.indexOf(y);b>=0&&c.splice(b,1),g--,h--}d=null!=t?(c.indexOf(v[0])+1)%g:0;for(var x=Math.abs(r-n)/h,w=d;p!=h;w=++w%g){var E=c[w].getOtherEnd(e);if(E!=t){var _=(n+p*x)%360,T=(_+x)%360;m.branchRadialLayout(E,e,_,T,i+a,a),p++}}},m.maxDiagonalInTree=function(e){for(var t=g.MIN_VALUE,n=0;n<e.length;n++){var r=e[n].getDiagonal();r>t&&(t=r)}return t},m.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},m.prototype.groupZeroDegreeMembers=function(){var e=this,t={};this.memberGroups={},this.idToDummyNode={};for(var n=[],r=this.graphManager.getAllNodes(),i=0;i<r.length;i++){var a=(s=r[i]).getParent();0!==this.getNodeDegreeWithChildren(s)||null!=a.id&&this.getToBeTiled(a)||n.push(s)}for(i=0;i<n.length;i++){var s,l=(s=n[i]).getParent().id;void 0===t[l]&&(t[l]=[]),t[l]=t[l].concat(s)}Object.keys(t).forEach((function(n){if(t[n].length>1){var r="DummyCompound_"+n;e.memberGroups[r]=t[n];var i=t[n][0].getParent(),a=new o(e.graphManager);a.id=r,a.paddingLeft=i.paddingLeft||0,a.paddingRight=i.paddingRight||0,a.paddingBottom=i.paddingBottom||0,a.paddingTop=i.paddingTop||0,e.idToDummyNode[r]=a;var s=e.getGraphManager().add(e.newGraph(),a),l=i.getChild();l.add(a);for(var u=0;u<t[n].length;u++){var c=t[n][u];l.remove(c),s.add(c)}}}))},m.prototype.clearCompounds=function(){var e={},t={};this.performDFSOnCompounds();for(var n=0;n<this.compoundOrder.length;n++)t[this.compoundOrder[n].id]=this.compoundOrder[n],e[this.compoundOrder[n].id]=[].concat(this.compoundOrder[n].getChild().getNodes()),this.graphManager.remove(this.compoundOrder[n].getChild()),this.compoundOrder[n].child=null;this.graphManager.resetAllNodes(),this.tileCompoundMembers(e,t)},m.prototype.clearZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack=[];Object.keys(this.memberGroups).forEach((function(n){var r=e.idToDummyNode[n];t[n]=e.tileNodes(e.memberGroups[n],r.paddingLeft+r.paddingRight),r.rect.width=t[n].width,r.rect.height=t[n].height}))},m.prototype.repopulateCompounds=function(){for(var e=this.compoundOrder.length-1;e>=0;e--){var t=this.compoundOrder[e],n=t.id,r=t.paddingLeft,i=t.paddingTop;this.adjustLocations(this.tiledMemberPack[n],t.rect.x,t.rect.y,r,i)}},m.prototype.repopulateZeroDegreeMembers=function(){var e=this,t=this.tiledZeroDegreePack;Object.keys(t).forEach((function(n){var r=e.idToDummyNode[n],i=r.paddingLeft,a=r.paddingTop;e.adjustLocations(t[n],r.rect.x,r.rect.y,i,a)}))},m.prototype.getToBeTiled=function(e){var t=e.id;if(null!=this.toBeTiled[t])return this.toBeTiled[t];var n=e.getChild();if(null==n)return this.toBeTiled[t]=!1,!1;for(var r=n.getNodes(),i=0;i<r.length;i++){var a=r[i];if(this.getNodeDegree(a)>0)return this.toBeTiled[t]=!1,!1;if(null!=a.getChild()){if(!this.getToBeTiled(a))return this.toBeTiled[t]=!1,!1}else this.toBeTiled[a.id]=!1}return this.toBeTiled[t]=!0,!0},m.prototype.getNodeDegree=function(e){e.id;for(var t=e.getEdges(),n=0,r=0;r<t.length;r++){var i=t[r];i.getSource().id!==i.getTarget().id&&(n+=1)}return n},m.prototype.getNodeDegreeWithChildren=function(e){var t=this.getNodeDegree(e);if(null==e.getChild())return t;for(var n=e.getChild().getNodes(),r=0;r<n.length;r++){var i=n[r];t+=this.getNodeDegreeWithChildren(i)}return t},m.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},m.prototype.fillCompexOrderByDFS=function(e){for(var t=0;t<e.length;t++){var n=e[t];null!=n.getChild()&&this.fillCompexOrderByDFS(n.getChild().getNodes()),this.getToBeTiled(n)&&this.compoundOrder.push(n)}},m.prototype.adjustLocations=function(e,t,n,r,i){n+=i;for(var a=t+=r,o=0;o<e.rows.length;o++){var s=e.rows[o];t=a;for(var l=0,u=0;u<s.length;u++){var c=s[u];c.rect.x=t,c.rect.y=n,t+=c.rect.width+e.horizontalPadding,c.rect.height>l&&(l=c.rect.height)}n+=l+e.verticalPadding}},m.prototype.tileCompoundMembers=function(e,t){var n=this;this.tiledMemberPack=[],Object.keys(e).forEach((function(r){var i=t[r];n.tiledMemberPack[r]=n.tileNodes(e[r],i.paddingLeft+i.paddingRight),i.rect.width=n.tiledMemberPack[r].width,i.rect.height=n.tiledMemberPack[r].height}))},m.prototype.tileNodes=function(e,t){var n={rows:[],rowWidth:[],rowHeight:[],width:0,height:t,verticalPadding:l.TILING_PADDING_VERTICAL,horizontalPadding:l.TILING_PADDING_HORIZONTAL};e.sort((function(e,t){return e.rect.width*e.rect.height>t.rect.width*t.rect.height?-1:e.rect.width*e.rect.height<t.rect.width*t.rect.height?1:0}));for(var r=0;r<e.length;r++){var i=e[r];0==n.rows.length?this.insertNodeToRow(n,i,0,t):this.canAddHorizontal(n,i.rect.width,i.rect.height)?this.insertNodeToRow(n,i,this.getShortestRowIndex(n),t):this.insertNodeToRow(n,i,n.rows.length,t),this.shiftToLastRow(n)}return n},m.prototype.insertNodeToRow=function(e,t,n,r){var i=r;n==e.rows.length&&(e.rows.push([]),e.rowWidth.push(i),e.rowHeight.push(0));var a=e.rowWidth[n]+t.rect.width;e.rows[n].length>0&&(a+=e.horizontalPadding),e.rowWidth[n]=a,e.width<a&&(e.width=a);var o=t.rect.height;n>0&&(o+=e.verticalPadding);var s=0;o>e.rowHeight[n]&&(s=e.rowHeight[n],e.rowHeight[n]=o,s=e.rowHeight[n]-s),e.height+=s,e.rows[n].push(t)},m.prototype.getShortestRowIndex=function(e){for(var t=-1,n=Number.MAX_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]<n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.getLongestRowIndex=function(e){for(var t=-1,n=Number.MIN_VALUE,r=0;r<e.rows.length;r++)e.rowWidth[r]>n&&(t=r,n=e.rowWidth[r]);return t},m.prototype.canAddHorizontal=function(e,t,n){var r=this.getShortestRowIndex(e);if(r<0)return!0;var i=e.rowWidth[r];if(i+e.horizontalPadding+t<=e.width)return!0;var a,o,s=0;return e.rowHeight[r]<n&&r>0&&(s=n+e.verticalPadding-e.rowHeight[r]),a=e.width-i>=t+e.horizontalPadding?(e.height+s)/(i+t+e.horizontalPadding):(e.height+s)/e.width,s=n+e.verticalPadding,(o=e.width<t?(e.height+s)/t:(e.height+s)/e.width)<1&&(o=1/o),a<1&&(a=1/a),a<o},m.prototype.shiftToLastRow=function(e){var t=this.getLongestRowIndex(e),n=e.rowWidth.length-1,r=e.rows[t],i=r[r.length-1],a=i.width+e.horizontalPadding;if(e.width-e.rowWidth[n]>a&&t!=n){r.splice(-1,1),e.rows[n].push(i),e.rowWidth[t]=e.rowWidth[t]-a,e.rowWidth[n]=e.rowWidth[n]+a,e.width=e.rowWidth[instance.getLongestRowIndex(e)];for(var o=Number.MIN_VALUE,s=0;s<r.length;s++)r[s].height>o&&(o=r[s].height);t>0&&(o+=e.verticalPadding);var l=e.rowHeight[t]+e.rowHeight[n];e.rowHeight[t]=o,e.rowHeight[n]<i.height+e.verticalPadding&&(e.rowHeight[n]=i.height+e.verticalPadding);var u=e.rowHeight[t]+e.rowHeight[n];e.height+=u-l,this.shiftToLastRow(e)}},m.prototype.tilingPreLayout=function(){l.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},m.prototype.tilingPostLayout=function(){l.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},m.prototype.reduceTrees=function(){for(var e,t=[],n=!0;n;){var r=this.graphManager.getAllNodes(),i=[];n=!1;for(var a=0;a<r.length;a++)1!=(e=r[a]).getEdges().length||e.getEdges()[0].isInterGraph||null!=e.getChild()||(i.push([e,e.getEdges()[0],e.getOwner()]),n=!0);if(1==n){for(var o=[],s=0;s<i.length;s++)1==i[s][0].getEdges().length&&(o.push(i[s]),i[s][0].getOwner().remove(i[s][0]));t.push(o),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()}}this.prunedNodesAll=t},m.prototype.growTree=function(e){for(var t,n=e[e.length-1],r=0;r<n.length;r++)t=n[r],this.findPlaceforPrunedNode(t),t[2].add(t[0]),t[2].add(t[1],t[1].source,t[1].target);e.splice(e.length-1,1),this.graphManager.resetAllNodes(),this.graphManager.resetAllEdges()},m.prototype.findPlaceforPrunedNode=function(e){var t,n,r=e[0],i=(n=r==e[1].source?e[1].target:e[1].source).startX,a=n.finishX,o=n.startY,s=n.finishY,l=[0,0,0,0];if(o>0)for(var c=i;c<=a;c++)l[0]+=this.grid[c][o-1].length+this.grid[c][o].length-1;if(a<this.grid.length-1)for(c=o;c<=s;c++)l[1]+=this.grid[a+1][c].length+this.grid[a][c].length-1;if(s<this.grid[0].length-1)for(c=i;c<=a;c++)l[2]+=this.grid[c][s+1].length+this.grid[c][s].length-1;if(i>0)for(c=o;c<=s;c++)l[3]+=this.grid[i-1][c].length+this.grid[i][c].length-1;for(var h,d,p=g.MAX_VALUE,f=0;f<l.length;f++)l[f]<p?(p=l[f],h=1,d=f):l[f]==p&&h++;if(3==h&&0==p)0==l[0]&&0==l[1]&&0==l[2]?t=1:0==l[0]&&0==l[1]&&0==l[3]?t=0:0==l[0]&&0==l[2]&&0==l[3]?t=3:0==l[1]&&0==l[2]&&0==l[3]&&(t=2);else if(2==h&&0==p){var v=Math.floor(2*Math.random());t=0==l[0]&&0==l[1]?0==v?0:1:0==l[0]&&0==l[2]?0==v?0:2:0==l[0]&&0==l[3]?0==v?0:3:0==l[1]&&0==l[2]?0==v?1:2:0==l[1]&&0==l[3]?0==v?1:3:0==v?2:3}else t=4==h&&0==p?v=Math.floor(4*Math.random()):d;0==t?r.setCenter(n.getCenterX(),n.getCenterY()-n.getHeight()/2-u.DEFAULT_EDGE_LENGTH-r.getHeight()/2):1==t?r.setCenter(n.getCenterX()+n.getWidth()/2+u.DEFAULT_EDGE_LENGTH+r.getWidth()/2,n.getCenterY()):2==t?r.setCenter(n.getCenterX(),n.getCenterY()+n.getHeight()/2+u.DEFAULT_EDGE_LENGTH+r.getHeight()/2):r.setCenter(n.getCenterX()-n.getWidth()/2-u.DEFAULT_EDGE_LENGTH-r.getWidth()/2,n.getCenterY())},e.exports=m},function(e,t,n){"use strict";var r={};r.layoutBase=n(0),r.CoSEConstants=n(1),r.CoSEEdge=n(2),r.CoSEGraph=n(3),r.CoSEGraphManager=n(4),r.CoSELayout=n(6),r.CoSENode=n(5),e.exports=r}])},e.exports=r(n(82241))},14607:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(t,n){t.exports=e},function(e,t,n){"use strict";var r=n(0).layoutBase.LayoutConstants,i=n(0).layoutBase.FDLayoutConstants,a=n(0).CoSEConstants,o=n(0).CoSELayout,s=n(0).CoSENode,l=n(0).layoutBase.PointD,u=n(0).layoutBase.DimensionD,c={ready:function(){},stop:function(){},quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function h(e){this.options=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n}(c,e),d(this.options)}var d=function(e){null!=e.nodeRepulsion&&(a.DEFAULT_REPULSION_STRENGTH=i.DEFAULT_REPULSION_STRENGTH=e.nodeRepulsion),null!=e.idealEdgeLength&&(a.DEFAULT_EDGE_LENGTH=i.DEFAULT_EDGE_LENGTH=e.idealEdgeLength),null!=e.edgeElasticity&&(a.DEFAULT_SPRING_STRENGTH=i.DEFAULT_SPRING_STRENGTH=e.edgeElasticity),null!=e.nestingFactor&&(a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=e.nestingFactor),null!=e.gravity&&(a.DEFAULT_GRAVITY_STRENGTH=i.DEFAULT_GRAVITY_STRENGTH=e.gravity),null!=e.numIter&&(a.MAX_ITERATIONS=i.MAX_ITERATIONS=e.numIter),null!=e.gravityRange&&(a.DEFAULT_GRAVITY_RANGE_FACTOR=i.DEFAULT_GRAVITY_RANGE_FACTOR=e.gravityRange),null!=e.gravityCompound&&(a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=e.gravityCompound),null!=e.gravityRangeCompound&&(a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=e.gravityRangeCompound),null!=e.initialEnergyOnIncremental&&(a.DEFAULT_COOLING_FACTOR_INCREMENTAL=i.DEFAULT_COOLING_FACTOR_INCREMENTAL=e.initialEnergyOnIncremental),"draft"==e.quality?r.QUALITY=0:"proof"==e.quality?r.QUALITY=2:r.QUALITY=1,a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=r.NODE_DIMENSIONS_INCLUDE_LABELS=e.nodeDimensionsIncludeLabels,a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=r.DEFAULT_INCREMENTAL=!e.randomize,a.ANIMATE=i.ANIMATE=r.ANIMATE=e.animate,a.TILE=e.tile,a.TILING_PADDING_VERTICAL="function"==typeof e.tilingPaddingVertical?e.tilingPaddingVertical.call():e.tilingPaddingVertical,a.TILING_PADDING_HORIZONTAL="function"==typeof e.tilingPaddingHorizontal?e.tilingPaddingHorizontal.call():e.tilingPaddingHorizontal};h.prototype.run=function(){var e,t,n=this.options,r=(this.idToLNode={},this.layout=new o),i=this;i.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var a=r.newGraphManager();this.gm=a;var s=this.options.eles.nodes(),l=this.options.eles.edges();this.root=a.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(s),r);for(var u=0;u<l.length;u++){var c=l[u],h=this.idToLNode[c.data("source")],d=this.idToLNode[c.data("target")];h!==d&&0==h.getEdgesBetween(d).length&&(a.add(r.newEdge(),h,d).id=c.id())}var p=function(e,t){"number"==typeof e&&(e=t);var n=e.data("id"),r=i.idToLNode[n];return{x:r.getRect().getCenterX(),y:r.getRect().getCenterY()}},g=function a(){for(var o,s=function(){n.fit&&n.cy.fit(n.eles,n.padding),e||(e=!0,i.cy.one("layoutready",n.ready),i.cy.trigger({type:"layoutready",layout:i}))},l=i.options.refresh,u=0;u<l&&!o;u++)o=i.stopped||i.layout.tick();if(o)return r.checkLayoutSuccess()&&!r.isSubLayout&&r.doPostLayout(),r.tilingPostLayout&&r.tilingPostLayout(),r.isLayoutFinished=!0,i.options.eles.nodes().positions(p),s(),i.cy.one("layoutstop",i.options.stop),i.cy.trigger({type:"layoutstop",layout:i}),t&&cancelAnimationFrame(t),void(e=!1);var c=i.layout.getPositionsData();n.eles.nodes().positions((function(e,t){if("number"==typeof e&&(e=t),!e.isParent()){for(var n=e.id(),r=c[n],i=e;null==r&&(r=c[i.data("parent")]||c["DummyCompound_"+i.data("parent")],c[n]=r,null!=(i=i.parent()[0])););return null!=r?{x:r.x,y:r.y}:{x:e.position("x"),y:e.position("y")}}})),s(),t=requestAnimationFrame(a)};return r.addListener("layoutstarted",(function(){"during"===i.options.animate&&(t=requestAnimationFrame(g))})),r.runLayout(),"during"!==this.options.animate&&(i.options.eles.nodes().not(":parent").layoutPositions(i,i.options,p),e=!1),this},h.prototype.getTopMostNodes=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].id()]=!0;var r=e.filter((function(e,n){"number"==typeof e&&(e=n);for(var r=e.parent()[0];null!=r;){if(t[r.id()])return!1;r=r.parent()[0]}return!0}));return r},h.prototype.processChildrenList=function(e,t,n){for(var r=t.length,i=0;i<r;i++){var a,o,c=t[i],h=c.children(),d=c.layoutDimensions({nodeDimensionsIncludeLabels:this.options.nodeDimensionsIncludeLabels});if((a=null!=c.outerWidth()&&null!=c.outerHeight()?e.add(new s(n.graphManager,new l(c.position("x")-d.w/2,c.position("y")-d.h/2),new u(parseFloat(d.w),parseFloat(d.h)))):e.add(new s(this.graphManager))).id=c.data("id"),a.paddingLeft=parseInt(c.css("padding")),a.paddingTop=parseInt(c.css("padding")),a.paddingRight=parseInt(c.css("padding")),a.paddingBottom=parseInt(c.css("padding")),this.options.nodeDimensionsIncludeLabels&&c.isParent()){var p=c.boundingBox({includeLabels:!0,includeNodes:!1}).w,g=c.boundingBox({includeLabels:!0,includeNodes:!1}).h,f=c.css("text-halign");a.labelWidth=p,a.labelHeight=g,a.labelPos=f}this.idToLNode[c.data("id")]=a,isNaN(a.rect.x)&&(a.rect.x=0),isNaN(a.rect.y)&&(a.rect.y=0),null!=h&&h.length>0&&(o=n.getGraphManager().add(n.newGraph(),a),this.processChildrenList(o,h,n))}},h.prototype.stop=function(){return this.stopped=!0,this};var p=function(e){e("layout","cose-bilkent",h)};"undefined"!=typeof cytoscape&&p(cytoscape),e.exports=p}])},e.exports=r(n(84182))},59058:(e,t,n)=>{"use strict";var r=n(23279),i=n(54485),a=n(27361),o=n(36968),s=n(30084);function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=l(r),c=l(i),h=l(a),d=l(o),p=l(s);function g(e){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function y(e,t,n){return t&&v(e.prototype,t),n&&v(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,a=[],o=!0,s=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(l){s=!0,i=l}finally{try{o||null==n.return||n.return()}finally{if(s)throw i}}return a}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return x(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return x(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var w="undefined"==typeof window?null:window,E=w?w.navigator:null;w&&w.document;var _=g(""),T=g({}),D=g((function(){})),C="undefined"==typeof HTMLElement?"undefined":g(HTMLElement),N=function(e){return e&&e.instanceString&&L(e.instanceString)?e.instanceString():null},A=function(e){return null!=e&&g(e)==_},L=function(e){return null!=e&&g(e)===D},k=function(e){return!O(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},S=function(e){return null!=e&&g(e)===T&&!k(e)&&e.constructor===Object},I=function(e){return null!=e&&g(e)===g(1)&&!isNaN(e)},M=function(e){return"undefined"===C?void 0:null!=e&&e instanceof HTMLElement},O=function(e){return P(e)||R(e)},P=function(e){return"collection"===N(e)&&e._private.single},R=function(e){return"collection"===N(e)&&!e._private.single},B=function(e){return"core"===N(e)},F=function(e){return"stylesheet"===N(e)},z=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},G=function(e){return function(e){return null!=e&&g(e)===T}(e)&&L(e.then)},Y=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var n=function n(){var r,i=arguments,a=t.apply(this,i),o=n.cache;return(r=o[a])||(r=o[a]=e.apply(this,i)),r};return n.cache={},n},X=Y((function(e){return e.replace(/([A-Z])/g,(function(e){return"-"+e.toLowerCase()}))})),V=Y((function(e){return e.replace(/(-\w)/g,(function(e){return e[1].toUpperCase()}))})),U=Y((function(e,t){return e+t[0].toUpperCase()+t.substring(1)}),(function(e,t){return e+"$"+t})),j=function(e){return z(e)?e:e.charAt(0).toUpperCase()+e.substring(1)},q="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",H="rgb[a]?\\(("+q+"[%]?)\\s*,\\s*("+q+"[%]?)\\s*,\\s*("+q+"[%]?)(?:\\s*,\\s*("+q+"))?\\)",W="rgb[a]?\\((?:"+q+"[%]?)\\s*,\\s*(?:"+q+"[%]?)\\s*,\\s*(?:"+q+"[%]?)(?:\\s*,\\s*(?:"+q+"))?\\)",$="hsl[a]?\\(("+q+")\\s*,\\s*("+q+"[%])\\s*,\\s*("+q+"[%])(?:\\s*,\\s*("+q+"))?\\)",K="hsl[a]?\\((?:"+q+")\\s*,\\s*(?:"+q+"[%])\\s*,\\s*(?:"+q+"[%])(?:\\s*,\\s*(?:"+q+"))?\\)",Z=function(e,t){return e<t?-1:e>t?1:0},Q=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n<t.length;n++){var r=t[n];if(null!=r)for(var i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];e[o]=r[o]}}return e},J=function(e){return(k(e)?e:null)||function(e){return ee[e.toLowerCase()]}(e)||function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,n,r,i=16;return 4===e.length?(t=parseInt(e[1]+e[1],i),n=parseInt(e[2]+e[2],i),r=parseInt(e[3]+e[3],i)):(t=parseInt(e[1]+e[2],i),n=parseInt(e[3]+e[4],i),r=parseInt(e[5]+e[6],i)),[t,n,r]}}(e)||function(e){var t,n=new RegExp("^"+H+"$").exec(e);if(n){t=[];for(var r=[],i=1;i<=3;i++){var a=n[i];if("%"===a[a.length-1]&&(r[i]=!0),a=parseFloat(a),r[i]&&(a=a/100*255),a<0||a>255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t}(e)||function(e){var t,n,r,i,a,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+$+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(i=parseFloat(c[3]))<0||i>100)return;if(i/=100,void 0!==(a=c[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=l=Math.round(255*i);else{var h=i<.5?i*(1+r):i+r-i*r,d=2*i-h;o=Math.round(255*u(d,h,n+1/3)),s=Math.round(255*u(d,h,n)),l=Math.round(255*u(d,h,n-1/3))}t=[o,s,l,a]}return t}(e)},ee={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},te=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(S(a))throw Error("Tried to set map with object key");i<n.length-1?(null==t[a]&&(t[a]={}),t=t[a]):t[a]=e.value}},ne=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i<r;i++){var a=n[i];if(S(a))throw Error("Tried to get map with object key");if(null==(t=t[a]))return t}return t},re=w?w.performance:null,ie=re&&re.now?function(){return re.now()}:function(){return Date.now()},ae=function(){if(w){if(w.requestAnimationFrame)return function(e){w.requestAnimationFrame(e)};if(w.mozRequestAnimationFrame)return function(e){w.mozRequestAnimationFrame(e)};if(w.webkitRequestAnimationFrame)return function(e){w.webkitRequestAnimationFrame(e)};if(w.msRequestAnimationFrame)return function(e){w.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(ie())}),1e3/60)}}(),oe=function(e){return ae(e)},se=ie,le=9261,ue=5381,ce=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:le;!(t=e.next()).done;)n=65599*n+t.value|0;return n},he=function(e){return 65599*(arguments.length>1&&void 0!==arguments[1]?arguments[1]:le)+e|0},de=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ue;return(t<<5)+t+e|0},pe=function(e){return 2097152*e[0]+e[1]},ge=function(e,t){return[he(e[0],t[0]),de(e[1],t[1])]},fe=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return ce({next:function(){return r<i?n.value=e.charCodeAt(r++):n.done=!0,n}},t)},ve=function(){return ye(arguments)},ye=function(e){for(var t,n=0;n<e.length;n++){var r=e[n];t=0===n?fe(r):fe(r,t)}return t},me=!0,be=null!=console.warn,xe=null!=console.trace,we=Number.MAX_SAFE_INTEGER||9007199254740991,Ee=function(){return!0},_e=function(){return!1},Te=function(){return 0},De=function(){},Ce=function(e){throw new Error(e)},Ne=function(e){if(void 0===e)return me;me=!!e},Ae=function(e){Ne()&&(be?console.warn(e):(console.log(e),xe&&console.trace()))},Le=function(e){return null==e?e:k(e)?e.slice():S(e)?function(e){return Q({},e)}(e):e},ke=function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t},Se={},Ie=function(){return Se},Me=function(e){var t=Object.keys(e);return function(n){for(var r={},i=0;i<t.length;i++){var a=t[i],o=null==n?void 0:n[a];r[a]=void 0===o?e[a]:o}return r}},Oe=function(e,t,n){for(var r=e.length-1;r>=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Pe=function(e){e.splice(0,e.length)},Re=function(e,t,n){return n&&(t=U(n,t)),e[t]},Be=function(e,t,n,r){n&&(t=U(n,t)),e[t]=r},Fe="undefined"!=typeof Map?Map:function(){function e(){f(this,e),this._obj={}}return y(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),ze=function(){function e(t){if(f(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r<n.length;r++)this.add(n[r])}}return y(e,[{key:"instanceString",value:function(){return"set"}},{key:"add",value:function(e){var t=this._obj;1!==t[e]&&(t[e]=1,this.size++)}},{key:"delete",value:function(e){var t=this._obj;1===t[e]&&(t[e]=0,this.size--)}},{key:"clear",value:function(){this._obj=Object.create(null)}},{key:"has",value:function(e){return 1===this._obj[e]}},{key:"toArray",value:function(){var e=this;return Object.keys(this._obj).filter((function(t){return e.has(t)}))}},{key:"forEach",value:function(e,t){return this.toArray().forEach(e,t)}}]),e}(),Ge="undefined"!==("undefined"==typeof Set?"undefined":g(Set))?Set:ze,Ye=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&B(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new Ge,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var l=[];k(t.classes)?l=t.classes:A(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;u<c;u++){var h=l[u];h&&""!==h&&i.classes.add(h)}this.createEmitter();var d=t.style||t.css;d&&(Ae("Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead."),this.style(d)),(void 0===n||n)&&this.restore()}else Ce("An element must be of type `nodes` or `edges`; you specified `"+r+"`")}else Ce("An element must have a core reference and parameters set")},Xe=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,n,r){var i;S(t)&&!O(t)&&(t=(i=t).roots||i.root,n=i.visit,r=i.directed),r=2!==arguments.length||L(n)?r:n,n=L(n)?n:function(){};for(var a,o=this._private.cy,s=t=A(t)?this.filter(t):t,l=[],u=[],c={},h={},d={},p=0,g=this.byGroup(),f=g.nodes,v=g.edges,y=0;y<s.length;y++){var m=s[y],b=m.id();m.isNode()&&(l.unshift(m),e.bfs&&(d[b]=!0,u.push(m)),h[b]=0)}for(var x=function(){var t=e.bfs?l.shift():l.pop(),i=t.id();if(e.dfs){if(d[i])return"continue";d[i]=!0,u.push(t)}var o,s=h[i],g=c[i],y=null!=g?g.source():null,m=null!=g?g.target():null,b=null==g?void 0:t.same(y)?m[0]:y[0];if(!0===(o=n(t,g,b,p++,s)))return a=t,"break";if(!1===o)return"break";for(var x=t.connectedEdges().filter((function(e){return(!r||e.source().same(t))&&v.has(e)})),w=0;w<x.length;w++){var E=x[w],_=E.connectedNodes().filter((function(e){return!e.same(t)&&f.has(e)})),T=_.id();0===_.length||d[T]||(_=_[0],l.push(_),e.bfs&&(d[T]=!0,u.push(_)),c[T]=E,h[T]=h[i]+1)}};0!==l.length;){var w=x();if("continue"!==w&&"break"===w)break}for(var E=o.collection(),_=0;_<u.length;_++){var T=u[_],D=c[T.id()];null!=D&&E.push(D),E.push(T)}return{path:o.collection(E),found:o.collection(a)}}},Ve={breadthFirstSearch:Xe({bfs:!0}),depthFirstSearch:Xe({dfs:!0})};Ve.bfs=Ve.breadthFirstSearch,Ve.dfs=Ve.depthFirstSearch;var Ue=Me({root:null,weight:function(e){return 1},directed:!1}),je={dijkstra:function(e){if(!S(e)){var t=arguments;e={root:t[0],weight:t[1],directed:t[2]}}var n=Ue(e),r=n.root,i=n.weight,a=n.directed,o=this,s=i,l=A(r)?this.filter(r)[0]:r[0],u={},h={},d={},p=this.byGroup(),g=p.nodes,f=p.edges;f.unmergeBy((function(e){return e.isLoop()}));for(var v=function(e){return u[e.id()]},y=function(e,t){u[e.id()]=t,m.updateItem(e)},m=new c.default((function(e,t){return v(e)-v(t)})),b=0;b<g.length;b++){var x=g[b];u[x.id()]=x.same(l)?0:1/0,m.push(x)}for(var w=function(e,t){for(var n,r=(a?e.edgesTo(t):e.edgesWith(t)).intersect(f),i=1/0,o=0;o<r.length;o++){var l=r[o],u=s(l);(u<i||!n)&&(i=u,n=l)}return{edge:n,dist:i}};m.size()>0;){var E=m.pop(),_=v(E),T=E.id();if(d[T]=_,_!==1/0)for(var D=E.neighborhood().intersect(g),C=0;C<D.length;C++){var N=D[C],L=N.id(),k=w(E,N),I=_+k.dist;I<v(N)&&(y(N,I),h[L]={node:E,edge:k.edge})}}return{distanceTo:function(e){var t=A(e)?g.filter(e)[0]:e[0];return d[t.id()]},pathTo:function(e){var t=A(e)?g.filter(e)[0]:e[0],n=[],r=t,i=r.id();if(t.length>0)for(n.unshift(t);h[i];){var a=h[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},qe={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t<a.length;t++){if(a[t].has(e))return t}},l=0;l<i;l++)a[l]=this.spawn(n[l]);for(var u=r.sort((function(t,n){return e(t)-e(n)})),c=0;c<u.length;c++){var h=u[c],d=h.source()[0],p=h.target()[0],g=s(d),f=s(p),v=a[g],y=a[f];g!==f&&(o.merge(h),v.merge(y),a.splice(f,1))}return o}},He=Me({root:null,goal:null,weight:function(e){return 1},heuristic:function(e){return 0},directed:!1}),We={aStar:function(e){var t=this.cy(),n=He(e),r=n.root,i=n.goal,a=n.heuristic,o=n.directed,s=n.weight;r=t.collection(r)[0],i=t.collection(i)[0];var l,u,h=r.id(),d=i.id(),p={},g={},f={},v=new c.default((function(e,t){return g[e.id()]-g[t.id()]})),y=new Ge,m={},b={},x=function(e,t){v.push(e),y.add(t)};x(r,h),p[h]=0,g[h]=a(r);for(var w,E=0;v.size()>0;){if(l=v.pop(),u=l.id(),y.delete(u),E++,u===d){for(var _=[],T=i,D=d,C=b[D];_.unshift(T),null!=C&&_.unshift(C),null!=(T=m[D]);)C=b[D=T.id()];return{found:!0,distance:p[u],path:this.spawn(_),steps:E}}f[u]=!0;for(var N=l._private.edges,A=0;A<N.length;A++){var L=N[A];if(this.hasElementWithId(L.id())&&(!o||L.data("source")===u)){var k=L.source(),S=L.target(),I=k.id()!==u?k:S,M=I.id();if(this.hasElementWithId(M)&&!f[M]){var O=p[u]+s(L);w=M,y.has(w)?O<p[M]&&(p[M]=O,g[M]=O+a(I),m[M]=l,b[M]=L):(p[M]=O,g[M]=O+a(I),x(I,M),m[M]=l,b[M]=L)}}}}return{found:!1,distance:void 0,path:void 0,steps:E}}},$e=Me({weight:function(e){return 1},directed:!1}),Ke={floydWarshall:function(e){for(var t=this.cy(),n=$e(e),r=n.weight,i=n.directed,a=r,o=this.byGroup(),s=o.nodes,l=o.edges,u=s.length,c=u*u,h=function(e){return s.indexOf(e)},d=function(e){return s[e]},p=new Array(c),g=0;g<c;g++){var f=g%u,v=(g-f)/u;p[g]=v===f?0:1/0}for(var y=new Array(c),m=new Array(c),b=0;b<l.length;b++){var x=l[b],w=x.source()[0],E=x.target()[0];if(w!==E){var _=h(w),T=h(E),D=_*u+T,C=a(x);if(p[D]>C&&(p[D]=C,y[D]=T,m[D]=x),!i){var N=T*u+_;!i&&p[N]>C&&(p[N]=C,y[N]=_,m[N]=x)}}}for(var L=0;L<u;L++)for(var k=0;k<u;k++)for(var S=k*u+L,I=0;I<u;I++){var M=k*u+I,O=L*u+I;p[S]+p[O]<p[M]&&(p[M]=p[S]+p[O],y[M]=y[S])}var P=function(e){return h(function(e){return(A(e)?t.filter(e):e)[0]}(e))},R={distance:function(e,t){var n=P(e),r=P(t);return p[n*u+r]},path:function(e,n){var r=P(e),i=P(n),a=d(r);if(r===i)return a.collection();if(null==y[r*u+i])return t.collection();var o,s=t.collection(),l=r;for(s.merge(a);r!==i;)l=r,r=y[r*u+i],o=m[l*u+r],s.merge(o),s.merge(d(r));return s}};return R}},Ze=Me({weight:function(e){return 1},directed:!1,root:null}),Qe={bellmanFord:function(e){var t=this,n=Ze(e),r=n.weight,i=n.directed,a=n.root,o=r,s=this,l=this.cy(),u=this.byGroup(),c=u.edges,h=u.nodes,d=h.length,p=new Fe,g=!1,f=[];a=l.collection(a)[0],c.unmergeBy((function(e){return e.isLoop()}));for(var v=c.length,y=function(e){var t=p.get(e.id());return t||(t={},p.set(e.id(),t)),t},m=function(e){return(A(e)?l.$(e):e)[0]},b=0;b<d;b++){var x=h[b],w=y(x);x.same(a)?w.dist=0:w.dist=1/0,w.pred=null,w.edge=null}for(var E=!1,_=function(e,t,n,r,i,a){var o=r.dist+a;o<i.dist&&!n.same(r.edge)&&(i.dist=o,i.pred=e,i.edge=n,E=!0)},T=1;T<d;T++){E=!1;for(var D=0;D<v;D++){var C=c[D],N=C.source(),L=C.target(),k=o(C),S=y(N),I=y(L);_(N,0,C,S,I,k),i||_(L,0,C,I,S,k)}if(!E)break}if(E)for(var M=[],O=0;O<v;O++){var P=c[O],R=P.source(),B=P.target(),F=o(P),z=y(R).dist,G=y(B).dist;if(z+F<G||!i&&G+F<z){if(g||(Ae("Graph contains a negative weight cycle for Bellman-Ford"),g=!0),!1===e.findNegativeWeightCycles)break;var Y=[];z+F<G&&Y.push(R),!i&&G+F<z&&Y.push(B);for(var X=Y.length,V=0;V<X;V++){var U=Y[V],j=[U];j.push(y(U).edge);for(var q=y(U).pred;-1===j.indexOf(q);)j.push(q),j.push(y(q).edge),q=y(q).pred;for(var H=(j=j.slice(j.indexOf(q)))[0].id(),W=0,$=2;$<j.length;$+=2)j[$].id()<H&&(H=j[$].id(),W=$);(j=j.slice(W).concat(j.slice(0,W))).push(j[0]);var K=j.map((function(e){return e.id()})).join(",");-1===M.indexOf(K)&&(f.push(s.spawn(j)),M.push(K))}}}return{distanceTo:function(e){return y(m(e)).dist},pathTo:function(e){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a,r=[],i=m(e);;){if(null==i)return t.spawn();var o=y(i),l=o.edge,u=o.pred;if(r.unshift(i[0]),i.same(n)&&r.length>0)break;null!=l&&r.unshift(l),i=u}return s.spawn(r)},hasNegativeWeightCycle:g,negativeWeightCycles:f}}},Je=Math.sqrt(2),et=function(e,t,n){0===n.length&&Ce("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],l=n,u=l.length-1;u>=0;u--){var c=l[u],h=c[1],d=c[2];(t[h]===o&&t[d]===s||t[h]===s&&t[d]===o)&&l.splice(u,1)}for(var p=0;p<l.length;p++){var g=l[p];g[1]===s?(l[p]=g.slice(),l[p][1]=o):g[2]===s&&(l[p]=g.slice(),l[p][2]=o)}for(var f=0;f<t.length;f++)t[f]===s&&(t[f]=o);return l},tt=function(e,t,n,r){for(;n>r;){var i=Math.floor(Math.random()*t.length);t=et(i,e,t),n--}return t},nt={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/Je);if(!(i<2)){for(var l=[],u=0;u<a;u++){var c=r[u];l.push([u,n.indexOf(c.source()),n.indexOf(c.target())])}for(var h=1/0,d=[],p=new Array(i),g=new Array(i),f=new Array(i),v=function(e,t){for(var n=0;n<i;n++)t[n]=e[n]},y=0;y<=o;y++){for(var m=0;m<i;m++)g[m]=m;var b=tt(g,l.slice(),i,s),x=b.slice();v(g,f);var w=tt(g,b,s,2),E=tt(f,x,s,2);w.length<=E.length&&w.length<h?(h=w.length,d=w,v(g,p)):E.length<=w.length&&E.length<h&&(h=E.length,d=E,v(f,p))}for(var _=this.spawn(d.map((function(e){return r[e[0]]}))),T=this.spawn(),D=this.spawn(),C=p[0],N=0;N<p.length;N++){var A=p[N],L=n[N];A===C?T.merge(L):D.merge(L)}var k=function(t){var n=e.spawn();return t.forEach((function(t){n.merge(t),t.connectedEdges().forEach((function(t){e.contains(t)&&!_.contains(t)&&n.merge(t)}))})),n},S=[k(T),k(D)];return{cut:_,components:S,partition1:T,partition2:D}}Ce("At least 2 nodes are required for Karger-Stein algorithm")}},rt=function(e,t,n){return{x:e.x*t+n.x,y:e.y*t+n.y}},it=function(e,t,n){return{x:(e.x-n.x)/t,y:(e.y-n.y)/t}},at=function(e){return{x:e[0],y:e[1]}},ot=function(e,t){return Math.atan2(t,e)-Math.PI/2},st=Math.log2||function(e){return Math.log(e)/Math.log(2)},lt=function(e){return e>0?1:e<0?-1:0},ut=function(e,t){return Math.sqrt(ct(e,t))},ct=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},ht=function(e){for(var t=e.length,n=0,r=0;r<t;r++)n+=e[r];for(var i=0;i<t;i++)e[i]=e[i]/n;return e},dt=function(e,t,n,r){return(1-r)*(1-r)*e+2*(1-r)*r*t+r*r*n},pt=function(e,t,n,r){return{x:dt(e.x,t.x,n.x,r),y:dt(e.y,t.y,n.y,r)}},gt=function(e,t,n){return Math.max(e,Math.min(n,t))},ft=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-1/0,y2:-1/0,w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},vt=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},yt=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},mt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},bt=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=b(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},xt=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},wt=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2<t.x1)&&(!(t.x2<e.x1)&&(!(e.y2<t.y1)&&(!(t.y2<e.y1)&&(!(e.y1>t.y2)&&!(t.y1>e.y2)))))))},Et=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},_t=function(e,t){return Et(e,t.x1,t.y1)&&Et(e,t.x2,t.y2)},Tt=function(e,t,n,r,i,a,o){var s,l=Xt(i,a),u=i/2,c=a/2,h=r-c-o;if((s=Rt(e,t,n,r,n-u+l-o,h,n+u-l+o,h,!1)).length>0)return s;var d=n+u+o;if((s=Rt(e,t,n,r,d,r-c+l-o,d,r+c-l+o,!1)).length>0)return s;var p=r+c+o;if((s=Rt(e,t,n,r,n-u+l-o,p,n+u-l+o,p,!1)).length>0)return s;var g,f=n-u-o;if((s=Rt(e,t,n,r,f,r-c+l-o,f,r+c-l+o,!1)).length>0)return s;var v=n-u+l,y=r-c+l;if((g=Ot(e,t,n,r,v,y,l+o)).length>0&&g[0]<=v&&g[1]<=y)return[g[0],g[1]];var m=n+u-l,b=r-c+l;if((g=Ot(e,t,n,r,m,b,l+o)).length>0&&g[0]>=m&&g[1]<=b)return[g[0],g[1]];var x=n+u-l,w=r+c-l;if((g=Ot(e,t,n,r,x,w,l+o)).length>0&&g[0]>=x&&g[1]>=w)return[g[0],g[1]];var E=n-u+l,_=r+c-l;return(g=Ot(e,t,n,r,E,_,l+o)).length>0&&g[0]<=E&&g[1]>=_?[g[0],g[1]]:[]},Dt=function(e,t,n,r,i,a,o){var s=o,l=Math.min(n,i),u=Math.max(n,i),c=Math.min(r,a),h=Math.max(r,a);return l-s<=e&&e<=u+s&&c-s<=t&&t<=h+s},Ct=function(e,t,n,r,i,a,o,s,l){var u=Math.min(n,o,i)-l,c=Math.max(n,o,i)+l,h=Math.min(r,s,a)-l,d=Math.max(r,s,a)+l;return!(e<u||e>c||t<h||t>d)},Nt=function(e,t,n,r,i,a,o,s){var l=[];!function(e,t,n,r,i){var a,o,s,l,u,c,h,d;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,h=t/3,a>0?(u=(u=s+Math.sqrt(a))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-h+u+c,h+=(u+c)/2,i[4]=i[2]=-h,h=Math.sqrt(3)*(-c+u)/2,i[3]=h,i[5]=-h):(i[5]=i[3]=0,0===a?(d=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*d-h,i[4]=i[2]=-(d+h)):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),d=2*Math.sqrt(o),i[0]=-h+d*Math.cos(l/3),i[2]=-h+d*Math.cos((l+2*Math.PI)/3),i[4]=-h+d*Math.cos((l+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,l);for(var u=[],c=0;c<6;c+=2)Math.abs(l[c+1])<1e-7&&l[c]>=0&&l[c]<=1&&u.push(l[c]);u.push(1),u.push(0);for(var h,d,p,g=-1,f=0;f<u.length;f++)h=Math.pow(1-u[f],2)*n+2*(1-u[f])*u[f]*i+u[f]*u[f]*o,d=Math.pow(1-u[f],2)*r+2*(1-u[f])*u[f]*a+u[f]*u[f]*s,p=Math.pow(h-e,2)+Math.pow(d-t,2),g>=0?p<g&&(g=p):g=p;return g},At=function(e,t,n,r,i,a){var o=[e-n,t-r],s=[i-n,a-r],l=s[0]*s[0]+s[1]*s[1],u=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],h=c*c/l;return c<0?u:h>l?(e-i)*(e-i)+(t-a)*(t-a):u-h},Lt=function(e,t,n){for(var r,i,a,o,s=0,l=0;l<n.length/2;l++)if(r=n[2*l],i=n[2*l+1],l+1<n.length/2?(a=n[2*(l+1)],o=n[2*(l+1)+1]):(a=n[2*(l+1-n.length/2)],o=n[2*(l+1-n.length/2)+1]),r==e&&a==e);else{if(!(r>=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!=0},kt=function(e,t,n,r,i,a,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var h,d=Math.cos(-u),p=Math.sin(-u),g=0;g<c.length/2;g++)c[2*g]=a/2*(n[2*g]*d-n[2*g+1]*p),c[2*g+1]=o/2*(n[2*g+1]*d+n[2*g]*p),c[2*g]+=r,c[2*g+1]+=i;if(l>0){var f=It(c,-l);h=St(f)}else h=c;return Lt(e,t,h)},St=function(e){for(var t,n,r,i,a,o,s,l,u=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],n=e[4*c+1],r=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],l=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],l=e[3]);var h=Rt(t,n,r,i,a,o,s,l,!0);u[2*c]=h[0],u[2*c+1]=h[1]}return u},It=function(e,t){for(var n,r,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){n=e[2*s],r=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var l=a-r,u=-(i-n),c=Math.sqrt(l*l+u*u),h=l/c,d=u/c;o[4*s]=n+h*t,o[4*s+1]=r+d*t,o[4*s+2]=i+h*t,o[4*s+3]=a+d*t}return o},Mt=function(e,t,n,r,i,a,o){return e-=i,t-=a,(e/=n/2+o)*e+(t/=r/2+o)*t<=1},Ot=function(e,t,n,r,i,a,o){var s=[n-e,r-t],l=[e-i,t-a],u=s[0]*s[0]+s[1]*s[1],c=2*(l[0]*s[0]+l[1]*s[1]),h=c*c-4*u*(l[0]*l[0]+l[1]*l[1]-o*o);if(h<0)return[];var d=(-c+Math.sqrt(h))/(2*u),p=(-c-Math.sqrt(h))/(2*u),g=Math.min(d,p),f=Math.max(d,p),v=[];if(g>=0&&g<=1&&v.push(g),f>=0&&f<=1&&v.push(f),0===v.length)return[];var y=v[0]*s[0]+e,m=v[0]*s[1]+t;return v.length>1?v[0]==v[1]?[y,m]:[y,m,v[1]*s[0]+e,v[1]*s[1]+t]:[y,m]},Pt=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Rt=function(e,t,n,r,i,a,o,s,l){var u=e-i,c=n-e,h=o-i,d=t-a,p=r-t,g=s-a,f=h*d-g*u,v=c*d-p*u,y=g*c-h*p;if(0!==y){var m=f/y,b=v/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||l?[e+m*c,t+m*p]:[]}return 0===f||0===v?Pt(e,n,o)===o?[o,s]:Pt(e,n,i)===i?[i,a]:Pt(i,o,n)===n?[n,r]:[]:[]},Bt=function(e,t,n,r,i,a,o,s){var l,u,c,h,d,p,g=[],f=new Array(n.length),v=!0;if(null==a&&(v=!1),v){for(var y=0;y<f.length/2;y++)f[2*y]=n[2*y]*a+r,f[2*y+1]=n[2*y+1]*o+i;if(s>0){var m=It(f,-s);u=St(m)}else u=f}else u=n;for(var b=0;b<u.length/2;b++)c=u[2*b],h=u[2*b+1],b<u.length/2-1?(d=u[2*(b+1)],p=u[2*(b+1)+1]):(d=u[0],p=u[1]),0!==(l=Rt(e,t,r,i,c,h,d,p)).length&&g.push(l[0],l[1]);return g},Ft=function(e,t,n){var r=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(r[0]*r[0]+r[1]*r[1]),a=(i-n)/i;return a<0&&(a=1e-5),[t[0]+a*r[0],t[1]+a*r[1]]},zt=function(e,t){var n=Yt(e,t);return n=Gt(n)},Gt=function(e){for(var t,n,r=e.length/2,i=1/0,a=1/0,o=-1/0,s=-1/0,l=0;l<r;l++)t=e[2*l],n=e[2*l+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);for(var u=2/(o-i),c=2/(s-a),h=0;h<r;h++)t=e[2*h]=e[2*h]*u,n=e[2*h+1]=e[2*h+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,n),s=Math.max(s,n);if(a<-1)for(var d=0;d<r;d++)n=e[2*d+1]=e[2*d+1]+(-1-a);return e},Yt=function(e,t){var n=1/e*2*Math.PI,r=e%2==0?Math.PI/2+n/2:Math.PI/2;r+=t;for(var i,a=new Array(2*e),o=0;o<e;o++)i=o*n+r,a[2*o]=Math.cos(i),a[2*o+1]=Math.sin(-i);return a},Xt=function(e,t){return Math.min(e/4,t/4,8)},Vt=function(e,t){return Math.min(e/10,t/10,8)},Ut=function(e,t){return{heightOffset:Math.min(15,.05*t),widthOffset:Math.min(100,.25*e),ctrlPtOffsetPct:.05}},jt=Me({dampingFactor:.8,precision:1e-6,iterations:200,weight:function(e){return 1}}),qt={pageRank:function(e){for(var t=jt(e),n=t.dampingFactor,r=t.precision,i=t.iterations,a=t.weight,o=this._private.cy,s=this.byGroup(),l=s.nodes,u=s.edges,c=l.length,h=c*c,d=u.length,p=new Array(h),g=new Array(c),f=(1-n)/c,v=0;v<c;v++){for(var y=0;y<c;y++){p[v*c+y]=0}g[v]=0}for(var m=0;m<d;m++){var b=u[m],x=b.data("source"),w=b.data("target");if(x!==w){var E=l.indexOfId(x),_=l.indexOfId(w),T=a(b);p[_*c+E]+=T,g[E]+=T}}for(var D=1/c+f,C=0;C<c;C++)if(0===g[C])for(var N=0;N<c;N++){p[N*c+C]=D}else for(var A=0;A<c;A++){var L=A*c+C;p[L]=p[L]/g[C]+f}for(var k,S=new Array(c),I=new Array(c),M=0;M<c;M++)S[M]=1;for(var O=0;O<i;O++){for(var P=0;P<c;P++)I[P]=0;for(var R=0;R<c;R++)for(var B=0;B<c;B++){var F=R*c+B;I[R]+=p[F]*S[B]}ht(I),k=S,S=I,I=k;for(var z=0,G=0;G<c;G++){var Y=k[G]-S[G];z+=Y*Y}if(z<r)break}return{rank:function(e){return e=o.collection(e)[0],S[l.indexOf(e)]}}}},Ht=Me({root:null,weight:function(e){return 1},directed:!1,alpha:0}),Wt={degreeCentralityNormalized:function(e){e=Ht(e);var t=this.cy(),n=this.nodes(),r=n.length;if(e.directed){for(var i={},a={},o=0,s=0,l=0;l<r;l++){var u=n[l],c=u.id();e.root=u;var h=this.degreeCentrality(e);o<h.indegree&&(o=h.indegree),s<h.outdegree&&(s=h.outdegree),i[c]=h.indegree,a[c]=h.outdegree}return{indegree:function(e){return 0==o?0:(A(e)&&(e=t.filter(e)),i[e.id()]/o)},outdegree:function(e){return 0===s?0:(A(e)&&(e=t.filter(e)),a[e.id()]/s)}}}for(var d={},p=0,g=0;g<r;g++){var f=n[g];e.root=f;var v=this.degreeCentrality(e);p<v.degree&&(p=v.degree),d[f.id()]=v.degree}return{degree:function(e){return 0===p?0:(A(e)&&(e=t.filter(e)),d[e.id()]/p)}}},degreeCentrality:function(e){e=Ht(e);var t=this.cy(),n=this,r=e,i=r.root,a=r.weight,o=r.directed,s=r.alpha;if(i=t.collection(i)[0],o){for(var l=i.connectedEdges(),u=l.filter((function(e){return e.target().same(i)&&n.has(e)})),c=l.filter((function(e){return e.source().same(i)&&n.has(e)})),h=u.length,d=c.length,p=0,g=0,f=0;f<u.length;f++)p+=a(u[f]);for(var v=0;v<c.length;v++)g+=a(c[v]);return{indegree:Math.pow(h,1-s)*Math.pow(p,s),outdegree:Math.pow(d,1-s)*Math.pow(g,s)}}for(var y=i.connectedEdges().intersection(n),m=y.length,b=0,x=0;x<y.length;x++)b+=a(y[x]);return{degree:Math.pow(m,1-s)*Math.pow(b,s)}}};Wt.dc=Wt.degreeCentrality,Wt.dcn=Wt.degreeCentralityNormalised=Wt.degreeCentralityNormalized;var $t=Me({harmonic:!0,weight:function(){return 1},directed:!1,root:null}),Kt={closenessCentralityNormalized:function(e){for(var t=$t(e),n=t.harmonic,r=t.weight,i=t.directed,a=this.cy(),o={},s=0,l=this.nodes(),u=this.floydWarshall({weight:r,directed:i}),c=0;c<l.length;c++){for(var h=0,d=l[c],p=0;p<l.length;p++)if(c!==p){var g=u.distance(d,l[p]);h+=n?1/g:g}n||(h=1/h),s<h&&(s=h),o[d.id()]=h}return{closeness:function(e){return 0==s?0:(e=A(e)?a.filter(e)[0].id():e.id(),o[e]/s)}}},closenessCentrality:function(e){var t=$t(e),n=t.root,r=t.weight,i=t.directed,a=t.harmonic;n=this.filter(n)[0];for(var o=this.dijkstra({root:n,weight:r,directed:i}),s=0,l=this.nodes(),u=0;u<l.length;u++){var c=l[u];if(!c.same(n)){var h=o.distanceTo(c);s+=a?1/h:h}}return a?s:1/s}};Kt.cc=Kt.closenessCentrality,Kt.ccn=Kt.closenessCentralityNormalised=Kt.closenessCentralityNormalized;var Zt=Me({weight:null,directed:!1}),Qt={betweennessCentrality:function(e){for(var t=Zt(e),n=t.directed,r=t.weight,i=null!=r,a=this.cy(),o=this.nodes(),s={},l={},u=0,h=function(e,t){l[e]=t,t>u&&(u=t)},d=function(e){return l[e]},p=0;p<o.length;p++){var g=o[p],f=g.id();s[f]=n?g.outgoers().nodes():g.openNeighborhood().nodes(),h(f,0)}for(var v=function(e){for(var t=o[e].id(),n=[],l={},u={},p={},g=new c.default((function(e,t){return p[e]-p[t]})),f=0;f<o.length;f++){var v=o[f].id();l[v]=[],u[v]=0,p[v]=1/0}for(u[t]=1,p[t]=0,g.push(t);!g.empty();){var y=g.pop();if(n.push(y),i)for(var m=0;m<s[y].length;m++){var b=s[y][m],x=a.getElementById(y),w=void 0;w=x.edgesTo(b).length>0?x.edgesTo(b)[0]:b.edgesTo(x)[0];var E=r(w);b=b.id(),p[b]>p[y]+E&&(p[b]=p[y]+E,g.nodes.indexOf(b)<0?g.push(b):g.updateItem(b),u[b]=0,l[b]=[]),p[b]==p[y]+E&&(u[b]=u[b]+u[y],l[b].push(y))}else for(var _=0;_<s[y].length;_++){var T=s[y][_].id();p[T]==1/0&&(g.push(T),p[T]=p[y]+1),p[T]==p[y]+1&&(u[T]=u[T]+u[y],l[T].push(y))}}for(var D={},C=0;C<o.length;C++)D[o[C].id()]=0;for(;n.length>0;){for(var N=n.pop(),A=0;A<l[N].length;A++){var L=l[N][A];D[L]=D[L]+u[L]/u[N]*(1+D[N])}N!=o[e].id()&&h(N,d(N)+D[N])}},y=0;y<o.length;y++)v(y);var m={betweenness:function(e){var t=a.collection(e).id();return d(t)},betweennessNormalized:function(e){if(0==u)return 0;var t=a.collection(e).id();return d(t)/u}};return m.betweennessNormalised=m.betweennessNormalized,m}};Qt.bc=Qt.betweennessCentrality;var Jt=Me({expandFactor:2,inflateFactor:2,multFactor:1,maxIterations:20,attributes:[function(e){return 1}]}),en=function(e,t){for(var n=0,r=0;r<t.length;r++)n+=t[r](e);return n},tn=function(e,t){for(var n,r=0;r<t;r++){n=0;for(var i=0;i<t;i++)n+=e[i*t+r];for(var a=0;a<t;a++)e[a*t+r]=e[a*t+r]/n}},nn=function(e,t,n){for(var r=new Array(n*n),i=0;i<n;i++){for(var a=0;a<n;a++)r[i*n+a]=0;for(var o=0;o<n;o++)for(var s=0;s<n;s++)r[i*n+s]+=e[i*n+o]*t[o*n+s]}return r},rn=function(e,t,n){for(var r=e.slice(0),i=1;i<n;i++)e=nn(e,r,t);return e},an=function(e,t,n){for(var r=new Array(t*t),i=0;i<t*t;i++)r[i]=Math.pow(e[i],n);return tn(r,t),r},on=function(e,t,n,r){for(var i=0;i<n;i++){if(Math.round(e[i]*Math.pow(10,r))/Math.pow(10,r)!==Math.round(t[i]*Math.pow(10,r))/Math.pow(10,r))return!1}return!0},sn=function(e,t){for(var n=0;n<e.length;n++)if(!t[n]||e[n].id()!==t[n].id())return!1;return!0},ln=function(e){for(var t=this.nodes(),n=this.edges(),r=this.cy(),i=function(e){return Jt(e)}(e),a={},o=0;o<t.length;o++)a[t[o].id()]=o;for(var s,l=t.length,u=l*l,c=new Array(u),h=0;h<u;h++)c[h]=0;for(var d=0;d<n.length;d++){var p=n[d],g=a[p.source().id()],f=a[p.target().id()],v=en(p,i.attributes);c[g*l+f]+=v,c[f*l+g]+=v}!function(e,t,n){for(var r=0;r<t;r++)e[r*t+r]=n}(c,l,i.multFactor),tn(c,l);for(var y=!0,m=0;y&&m<i.maxIterations;)y=!1,s=rn(c,l,i.expandFactor),c=an(s,l,i.inflateFactor),on(c,s,u,4)||(y=!0),m++;var b=function(e,t,n,r){for(var i=[],a=0;a<t;a++){for(var o=[],s=0;s<t;s++)Math.round(1e3*e[a*t+s])/1e3>0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(c,l,t,r);return b=function(e){for(var t=0;t<e.length;t++)for(var n=0;n<e.length;n++)t!=n&&sn(e[t],e[n])&&e.splice(n,1);return e}(b),b},un={markovClustering:ln,mcl:ln},cn=function(e){return e},hn=function(e,t){return Math.abs(t-e)},dn=function(e,t,n){return e+hn(t,n)},pn=function(e,t,n){return e+Math.pow(n-t,2)},gn=function(e){return Math.sqrt(e)},fn=function(e,t,n){return Math.max(e,hn(t,n))},vn=function(e,t,n,r,i){for(var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:cn,o=r,s=0;s<e;s++)o=i(o,t(s),n(s));return a(o)},yn={euclidean:function(e,t,n){return e>=2?vn(e,t,n,0,pn,gn):vn(e,t,n,0,dn)},squaredEuclidean:function(e,t,n){return vn(e,t,n,0,pn)},manhattan:function(e,t,n){return vn(e,t,n,0,dn)},max:function(e,t,n){return vn(e,t,n,-1/0,fn)}};function mn(e,t,n,r,i,a){var o;return o=L(e)?e:yn[e]||yn.euclidean,0===t&&L(e)?o(i,a):o(t,n,r,i,a)}yn["squared-euclidean"]=yn.squaredEuclidean,yn.squaredeuclidean=yn.squaredEuclidean;var bn=Me({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),xn=function(e){return bn(e)},wn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return mn(e,r.length,a,(function(e){return r[e](t)}),o,s)},En=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,l=0;l<r;l++)i[l]=e.min(n[l]).value,a[l]=e.max(n[l]).value;for(var u=0;u<t;u++){s=[];for(var c=0;c<r;c++)s[c]=Math.random()*(a[c]-i[c])+i[c];o[u]=s}return o},_n=function(e,t,n,r,i){for(var a=1/0,o=0,s=0;s<t.length;s++){var l=wn(n,e,t[s],r,i);l<a&&(a=l,o=s)}return o},Tn=function(e,t,n){for(var r=[],i=null,a=0;a<t.length;a++)n[(i=t[a]).id()]===e&&r.push(i);return r},Dn=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=0;i<e[r].length;i++){if(Math.abs(e[r][i]-t[r][i])>n)return!1}return!0},Cn=function(e,t,n){for(var r=0;r<n;r++)if(e===t[r])return!0;return!1},Nn=function(e,t){var n=new Array(t);if(e.length<50)for(var r=0;r<t;r++){for(var i=e[Math.floor(Math.random()*e.length)];Cn(i,n,r);)i=e[Math.floor(Math.random()*e.length)];n[r]=i}else for(var a=0;a<t;a++)n[a]=e[Math.floor(Math.random()*e.length)];return n},An=function(e,t,n){for(var r=0,i=0;i<t.length;i++)r+=wn("manhattan",t[i],e,n,"kMedoids");return r},Ln=function(e,t,n,r,i){for(var a,o,s=0;s<t.length;s++)for(var l=0;l<e.length;l++)r[s][l]=Math.pow(n[s][l],i.m);for(var u=0;u<e.length;u++)for(var c=0;c<i.attributes.length;c++){a=0,o=0;for(var h=0;h<t.length;h++)a+=r[h][u]*i.attributes[c](t[h]),o+=r[h][u];e[u][c]=a/o}},kn=function(e,t,n,r,i){for(var a=0;a<e.length;a++)t[a]=e[a].slice();for(var o,s,l,u=2/(i.m-1),c=0;c<n.length;c++)for(var h=0;h<r.length;h++){o=0;for(var d=0;d<n.length;d++)s=wn(i.distance,r[h],n[c],i.attributes,"cmeans"),l=wn(i.distance,r[h],n[d],i.attributes,"cmeans"),o+=Math.pow(s/l,u);e[h][c]=1/o}},Sn=function(e){var t,n,r,i,a,o=this.cy(),s=this.nodes(),l=xn(e);i=new Array(s.length);for(var u=0;u<s.length;u++)i[u]=new Array(l.k);r=new Array(s.length);for(var c=0;c<s.length;c++)r[c]=new Array(l.k);for(var h=0;h<s.length;h++){for(var d=0,p=0;p<l.k;p++)r[h][p]=Math.random(),d+=r[h][p];for(var g=0;g<l.k;g++)r[h][g]=r[h][g]/d}n=new Array(l.k);for(var f=0;f<l.k;f++)n[f]=new Array(l.attributes.length);a=new Array(s.length);for(var v=0;v<s.length;v++)a[v]=new Array(l.k);for(var y=!0,m=0;y&&m<l.maxIterations;)y=!1,Ln(n,s,r,a,l),kn(r,i,n,s,l),Dn(r,i,l.sensitivityThreshold)||(y=!0),m++;return t=function(e,t,n,r){for(var i,a,o=new Array(n.k),s=0;s<o.length;s++)o[s]=[];for(var l=0;l<t.length;l++){i=-1/0,a=-1;for(var u=0;u<t[0].length;u++)t[l][u]>i&&(i=t[l][u],a=u);o[a].push(e[l])}for(var c=0;c<o.length;c++)o[c]=r.collection(o[c]);return o}(s,r,l,o),{clusters:t,degreeOfMembership:r}},In={kMeans:function(e){var t,n=this.cy(),r=this.nodes(),i=null,a=xn(e),o=new Array(a.k),s={};a.testMode?"number"==typeof a.testCentroids?(a.testCentroids,t=En(r,a.k,a.attributes)):t="object"===g(a.testCentroids)?a.testCentroids:En(r,a.k,a.attributes):t=En(r,a.k,a.attributes);for(var l,u,c,h=!0,d=0;h&&d<a.maxIterations;){for(var p=0;p<r.length;p++)s[(i=r[p]).id()]=_n(i,t,a.distance,a.attributes,"kMeans");h=!1;for(var f=0;f<a.k;f++){var v=Tn(f,r,s);if(0!==v.length){for(var y=a.attributes.length,m=t[f],b=new Array(y),x=new Array(y),w=0;w<y;w++){x[w]=0;for(var E=0;E<v.length;E++)i=v[E],x[w]+=a.attributes[w](i);b[w]=x[w]/v.length,l=b[w],u=m[w],c=a.sensitivityThreshold,Math.abs(u-l)<=c||(h=!0)}t[f]=b,o[f]=n.collection(v)}}d++}return o},kMedoids:function(e){var t,n,r=this.cy(),i=this.nodes(),a=null,o=xn(e),s=new Array(o.k),l={},u=new Array(o.k);o.testMode?"number"==typeof o.testCentroids||(t="object"===g(o.testCentroids)?o.testCentroids:Nn(i,o.k)):t=Nn(i,o.k);for(var c=!0,h=0;c&&h<o.maxIterations;){for(var d=0;d<i.length;d++)l[(a=i[d]).id()]=_n(a,t,o.distance,o.attributes,"kMedoids");c=!1;for(var p=0;p<t.length;p++){var f=Tn(p,i,l);if(0!==f.length){u[p]=An(t[p],f,o.attributes);for(var v=0;v<f.length;v++)(n=An(f[v],f,o.attributes))<u[p]&&(u[p]=n,t[p]=f[v],c=!0);s[p]=r.collection(f)}}h++}return s},fuzzyCMeans:Sn,fcm:Sn},Mn=Me({distance:"euclidean",linkage:"min",mode:"threshold",threshold:1/0,addDendrogram:!1,dendrogramDepth:0,attributes:[]}),On={single:"min",complete:"max"},Pn=function(e,t,n,r,i){for(var a,o=0,s=1/0,l=i.attributes,u=function(e,t){return mn(i.distance,l.length,(function(t){return l[t](e)}),(function(e){return l[e](t)}),e,t)},c=0;c<e.length;c++){var h=e[c].key,d=n[h][r[h]];d<s&&(o=h,s=d)}if("threshold"===i.mode&&s>=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var p,g=t[o],f=t[r[o]];p="dendrogram"===i.mode?{left:g,right:f,key:g.key}:{value:g.value.concat(f.value),key:g.key},e[g.index]=p,e.splice(f.index,1),t[g.key]=p;for(var v=0;v<e.length;v++){var y=e[v];g.key===y.key?a=1/0:"min"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]>n[f.key][y.key]&&(a=n[f.key][y.key])):"max"===i.linkage?(a=n[g.key][y.key],n[g.key][y.key]<n[f.key][y.key]&&(a=n[f.key][y.key])):a="mean"===i.linkage?(n[g.key][y.key]*g.size+n[f.key][y.key]*f.size)/(g.size+f.size):"dendrogram"===i.mode?u(y.value,g.value):u(y.value[0],g.value[0]),n[g.key][y.key]=n[y.key][g.key]=a}for(var m=0;m<e.length;m++){var b=e[m].key;if(r[b]===g.key||r[b]===f.key){for(var x=b,w=0;w<e.length;w++){var E=e[w].key;n[b][E]<n[b][x]&&(x=E)}r[b]=x}e[m].index=m}return g.key=f.key=g.index=f.index=null,!0},Rn=function e(t,n,r){t&&(t.value?n.push(t.value):(t.left&&e(t.left,n),t.right&&e(t.right,n)))},Bn=function e(t,n){if(!t)return"";if(t.left&&t.right){var r=e(t.left,n),i=e(t.right,n),a=n.add({group:"nodes",data:{id:r+","+i}});return n.add({group:"edges",data:{source:r,target:a.id()}}),n.add({group:"edges",data:{source:i,target:a.id()}}),a.id()}return t.value?t.value.id():void 0},Fn=function e(t,n,r){if(!t)return[];var i=[],a=[],o=[];return 0===n?(t.left&&Rn(t.left,i),t.right&&Rn(t.right,a),o=i.concat(a),[r.collection(o)]):1===n?t.value?[r.collection(t.value)]:(t.left&&Rn(t.left,i),t.right&&Rn(t.right,a),[r.collection(i),r.collection(a)]):t.value?[r.collection(t.value)]:(t.left&&(i=e(t.left,n-1,r)),t.right&&(a=e(t.right,n-1,r)),i.concat(a))},zn=function(e){for(var t=this.cy(),n=this.nodes(),r=function(e){var t=Mn(e),n=On[t.linkage];return null!=n&&(t.linkage=n),t}(e),i=r.attributes,a=function(e,t){return mn(r.distance,i.length,(function(t){return i[t](e)}),(function(e){return i[e](t)}),e,t)},o=[],s=[],l=[],u=[],c=0;c<n.length;c++){var h={value:"dendrogram"===r.mode?n[c]:[n[c]],key:c,index:c};o[c]=h,u[c]=h,s[c]=[],l[c]=0}for(var d=0;d<o.length;d++)for(var p=0;p<=d;p++){var g=void 0;g="dendrogram"===r.mode?d===p?1/0:a(o[d].value,o[p].value):d===p?1/0:a(o[d].value[0],o[p].value[0]),s[d][p]=g,s[p][d]=g,g<s[d][l[d]]&&(l[d]=p)}for(var f,v=Pn(o,u,s,l,r);v;)v=Pn(o,u,s,l,r);return"dendrogram"===r.mode?(f=Fn(o[0],r.dendrogramDepth,t),r.addDendrogram&&Bn(o[0],t)):(f=new Array(o.length),o.forEach((function(e,n){e.key=e.index=null,f[n]=t.collection(e.value)}))),f},Gn={hierarchicalClustering:zn,hca:zn},Yn=Me({distance:"euclidean",preference:"median",damping:.8,maxIterations:1e3,minIterations:100,attributes:[]}),Xn=function(e,t,n,r){var i=function(e,t){return r[t](e)};return-mn(e,r.length,(function(e){return i(t,e)}),(function(e){return i(n,e)}),t,n)},Vn=function(e,t){var n=null;return n="median"===t?function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n<e.length&&e.splice(n,e.length-n),t>0&&e.splice(0,t)):e=e.slice(t,n);for(var a=0,o=e.length-1;o>=0;o--){var s=e[o];i?isFinite(s)||(e[o]=-1/0,a++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+a]:(e[u-1+a]+e[u+a])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a<n;a++){var o=e[a];isFinite(o)&&(r+=o,i++)}return r/i}(e):"min"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.min(a,r))}return r}(e):"max"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;i<n;i++){var a=e[i];isFinite(a)&&(r=Math.max(a,r))}return r}(e):t,n},Un=function(e,t,n){for(var r=[],i=0;i<e;i++){for(var a=-1,o=-1/0,s=0;s<n.length;s++){var l=n[s];t[i*e+l]>o&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var u=0;u<n.length;u++)r[n[u]]=n[u];return r},jn=function(e){for(var t,n,r,i,a,o,s=this.cy(),l=this.nodes(),u=function(e){var t=e.damping,n=e.preference;.5<=t&&t<1||Ce("Damping must range on [0.5, 1). Got: ".concat(t));var r=["median","mean","min","max"];return r.some((function(e){return e===n}))||I(n)||Ce("Preference must be one of [".concat(r.map((function(e){return"'".concat(e,"'")})).join(", "),"] or a number. Got: ").concat(n)),Yn(e)}(e),c={},h=0;h<l.length;h++)c[l[h].id()]=h;n=(t=l.length)*t,r=new Array(n);for(var d=0;d<n;d++)r[d]=-1/0;for(var p=0;p<t;p++)for(var g=0;g<t;g++)p!==g&&(r[p*t+g]=Xn(u.distance,l[p],l[g],u.attributes));i=Vn(r,u.preference);for(var f=0;f<t;f++)r[f*t+f]=i;a=new Array(n);for(var v=0;v<n;v++)a[v]=0;o=new Array(n);for(var y=0;y<n;y++)o[y]=0;for(var m=new Array(t),b=new Array(t),x=new Array(t),w=0;w<t;w++)m[w]=0,b[w]=0,x[w]=0;for(var E,_=new Array(t*u.minIterations),T=0;T<_.length;T++)_[T]=0;for(E=0;E<u.maxIterations;E++){for(var D=0;D<t;D++){for(var C=-1/0,N=-1/0,A=-1,L=0,k=0;k<t;k++)m[k]=a[D*t+k],(L=o[D*t+k]+r[D*t+k])>=C?(N=C,C=L,A=k):L>N&&(N=L);for(var S=0;S<t;S++)a[D*t+S]=(1-u.damping)*(r[D*t+S]-C)+u.damping*m[S];a[D*t+A]=(1-u.damping)*(r[D*t+A]-N)+u.damping*m[A]}for(var M=0;M<t;M++){for(var O=0,P=0;P<t;P++)m[P]=o[P*t+M],b[P]=Math.max(0,a[P*t+M]),O+=b[P];O-=b[M],b[M]=a[M*t+M],O+=b[M];for(var R=0;R<t;R++)o[R*t+M]=(1-u.damping)*Math.min(0,O-b[R])+u.damping*m[R];o[M*t+M]=(1-u.damping)*(O-b[M])+u.damping*m[M]}for(var B=0,F=0;F<t;F++){var z=o[F*t+F]+a[F*t+F]>0?1:0;_[E%u.minIterations*t+F]=z,B+=z}if(B>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var G=0,Y=0;Y<t;Y++){x[Y]=0;for(var X=0;X<u.minIterations;X++)x[Y]+=_[X*t+Y];0!==x[Y]&&x[Y]!==u.minIterations||G++}if(G===t)break}}for(var V=function(e,t,n){for(var r=[],i=0;i<e;i++)t[i*e+i]+n[i*e+i]>0&&r.push(i);return r}(t,a,o),U=function(e,t,n){for(var r=Un(e,t,n),i=0;i<n.length;i++){for(var a=[],o=0;o<r.length;o++)r[o]===n[i]&&a.push(o);for(var s=-1,l=-1/0,u=0;u<a.length;u++){for(var c=0,h=0;h<a.length;h++)c+=t[a[h]*e+a[u]];c>l&&(s=u,l=c)}n[i]=a[s]}return Un(e,t,n)}(t,r,V),j={},q=0;q<V.length;q++)j[V[q]]=[];for(var H=0;H<l.length;H++){var W=U[c[l[H].id()]];null!=W&&j[W].push(l[H])}for(var $=new Array(V.length),K=0;K<V.length;K++)$[K]=s.collection(j[V[K]]);return $},qn={affinityPropagation:jn,ap:jn},Hn=Me({root:void 0,directed:!1}),Wn=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function s(l,u,c){l===c&&(r+=1),t[u]={id:n,low:n++,cutVertex:!1};var h,d,p,g,f=e.getElementById(u).connectedEdges().intersection(e);0===f.size()?i.push(e.spawn(e.getElementById(u))):f.forEach((function(n){h=n.source().id(),d=n.target().id(),(p=h===u?d:h)!==c&&(g=n.id(),o[g]||(o[g]=!0,a.push({x:u,y:p,edge:n})),p in t?t[u].low=Math.min(t[u].low,t[p].id):(s(l,p,u),t[u].low=Math.min(t[u].low,t[p].low),t[u].id<=t[p].low&&(t[u].cutVertex=!0,function(n,r){for(var o=a.length-1,s=[],l=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(i.filter((function(e){return e.isLoop()}))):l.merge(i)}))})),i.push(l)}(u,p))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var l=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(l),components:i}},$n=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var u=i.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),h=l.merge(c);r.push(h),a=a.difference(h)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Kn={};[Ve,je,qe,We,Ke,Qe,nt,qt,Wt,Kt,Qt,un,In,Gn,qn,{hierholzer:function(e){if(!S(e)){var t=arguments;e={root:t[0],directed:t[1]}}var n,r,i,a=Hn(e),o=a.root,s=a.directed,l=this,u=!1;o&&(i=A(o)?this.filter(o)[0].id():o[0].id());var c={},h={};s?l.forEach((function(e){var t=e.id();if(e.isNode()){var i=e.indegree(!0),a=e.outdegree(!0),o=i-a,s=a-i;1==o?n?u=!0:n=t:1==s?r?u=!0:r=t:(s>1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else h[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):h[t]=[e.source().id(),e.target().id()]}));var d={found:!1,trail:void 0};if(u)return d;if(r&&n)if(s){if(i&&r!=i)return d;i=r}else{if(i&&r!=i&&n!=i)return d;i||(i=r)}else i||(i=l[0].id());var p=function(e){for(var t,n,r,i=e,a=[e];c[i].length;)t=c[i].shift(),n=h[t][0],i!=(r=h[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),i=r):s||i==n||(c[n]=c[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},g=[],f=[];for(f=p(i);1!=f.length;)0==c[f[0]].length?(g.unshift(l.getElementById(f.shift())),g.unshift(l.getElementById(f.shift()))):f=p(f.shift()).concat(f);for(var v in g.unshift(l.getElementById(f.shift())),c)if(c[v].length)return d;return d.found=!0,d.trail=this.spawn(g,!0),d}},{hopcroftTarjanBiconnected:Wn,htbc:Wn,htb:Wn,hopcroftTarjanBiconnectedComponents:Wn},{tarjanStronglyConnected:$n,tsc:$n,tscc:$n,tarjanStronglyConnectedComponents:$n}].forEach((function(e){Q(Kn,e)}));var Zn=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Zn.prototype={fulfill:function(e){return Qn(this,1,"fulfillValue",e)},reject:function(e){return Qn(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Zn;return n.onFulfilled.push(tr(e,r,"fulfill")),n.onRejected.push(tr(t,r,"reject")),Jn(n),r.proxy}};var Qn=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Jn(e)),e},Jn=function(e){1===e.state?er(e,"onFulfilled",e.fulfillValue):2===e.state&&er(e,"onRejected",e.rejectReason)},er=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e<r.length;e++)r[e](n)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},tr=function(e,t,n){return function(r){if("function"!=typeof e)t[n].call(t,r);else{var i;try{i=e(r)}catch(a){return void t.reject(a)}nr(t,i)}}},nr=function e(t,n){if(t!==n&&t.proxy!==n){var r;if("object"===g(n)&&null!==n||"function"==typeof n)try{r=n.then}catch(a){return void t.reject(a)}if("function"!=typeof r)t.fulfill(n);else{var i=!1;try{r.call(n,(function(r){i||(i=!0,r===n?t.reject(new TypeError("circular thenable chain")):e(t,r))}),(function(e){i||(i=!0,t.reject(e))}))}catch(a){i||t.reject(a)}}}else t.reject(new TypeError("cannot resolve promise with itself"))};Zn.all=function(e){return new Zn((function(t,n){for(var r=new Array(e.length),i=0,a=function(n,a){r[n]=a,++i===e.length&&t(r)},o=0;o<e.length;o++)!function(t){var r=e[t];null!=r&&null!=r.then?r.then((function(e){a(t,e)}),(function(e){n(e)})):a(t,r)}(o)}))},Zn.resolve=function(e){return new Zn((function(t,n){t(e)}))},Zn.reject=function(e){return new Zn((function(t,n){n(e)}))};var rr="undefined"!=typeof Promise?Promise:Zn,ir=function(e,t,n){var r=B(e),i=!r,a=this._private=Q({duration:1e3},t,n);if(a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&L(a.complete)&&a.completes.push(a.complete),i){var o=e.position();a.startPosition=a.startPosition||{x:o.x,y:o.y},a.startStyle=a.startStyle||e.cy().style().getAnimationStartStyle(e,a.style)}if(r){var s=e.pan();a.startPan={x:s.x,y:s.y},a.startZoom=e.zoom()}this.length=1,this[0]=this},ar=ir.prototype;Q(ar,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t=e.target._private.animation;(e.queue?t.queue:t.current).push(this),O(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,n=t.playing;return void 0===e?t.progress:(n&&this.pause(),t.progress=e,t.started=!1,n&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var n=function(t,n){var r=e[t];null!=r&&(e[t]=e[n],e[n]=r)};if(n("zoom","startZoom"),n("pan","startPan"),n("position","startPosition"),e.style)for(var r=0;r<e.style.length;r++){var i=e.style[r],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[r]=o}return t&&this.play(),this},promise:function(e){var t,n=this._private;if("frame"===e)t=n.frames;else t=n.completes;return new rr((function(e,n){t.push((function(){e()}))}))}}),ar.complete=ar.completed,ar.run=ar.play,ar.running=ar.playing;var or={animated:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return!1;var n=t[0];return n?n._private.animation.current.length>0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n<t.length;n++){t[n]._private.animation.queue=[]}return this}},delay:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(){return function(e,t){return(this._private.cy||this).styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(){return function(e,t){var n=this,r=void 0!==n.length,i=r?n:[n],a=this._private.cy||this,o=!r,s=!o;if(!a.styleEnabled())return this;var l=a.style();if(e=Q({},e,t),0===Object.keys(e).length)return new ir(i[0],e);switch(void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}if(s&&(e.style=l.getPropsList(e.style||e.css),e.css=void 0),s&&null!=e.renderedPosition){var u=e.renderedPosition,c=a.pan(),h=a.zoom();e.position=it(u,h,c)}if(o&&null!=e.panBy){var d=e.panBy,p=a.pan();e.pan={x:p.x+d.x,y:p.y+d.y}}var g=e.center||e.centre;if(o&&null!=g){var f=a.getCenterPan(g.eles,e.zoom);null!=f&&(e.pan=f)}if(o&&null!=e.fit){var v=e.fit,y=a.getFitViewport(v.eles||v.boundingBox,v.padding);null!=y&&(e.pan=y.pan,e.zoom=y.zoom)}if(o&&S(e.zoom)){var m=a.getZoomedViewport(e.zoom);null!=m?(m.zoomed&&(e.zoom=m.zoom),m.panned&&(e.pan=m.pan)):e.zoom=null}return new ir(i[0],e)}},animate:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n];if(!(this._private.cy||this).styleEnabled())return this;t&&(e=Q({},e,t));for(var i=0;i<r.length;i++){var a=r[i],o=a.animated()&&(void 0===e.queue||e.queue);a.animation(e,o?{queue:!0}:void 0).play()}return this}},stop:function(){return function(e,t){var n=this,r=void 0!==n.length?n:[n],i=this._private.cy||this;if(!i.styleEnabled())return this;for(var a=0;a<r.length;a++){for(var o=r[a]._private,s=o.animation.current,l=0;l<s.length;l++){var u=s[l]._private;t&&(u.duration=0)}e&&(o.animation.queue=[]),t||(o.animation.current=[])}return i.notify("draw"),this}}},sr={data:function(e){return e=Q({},{field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,beforeGet:function(e){},beforeSet:function(e,t){},onSet:function(e){},canSet:function(e){return!0}},e),function(t,n){var r=e,i=this,a=void 0!==i.length,o=a?i:[i],s=a?i[0]:i;if(A(t)){var l,u=-1!==t.indexOf(".")&&p.default(t);if(r.allowGetting&&void 0===n)return s&&(r.beforeGet(s),l=u&&void 0===s._private[r.field][t]?h.default(s._private[r.field],u):s._private[r.field][t]),l;if(r.allowSetting&&void 0!==n&&!r.immutableKeys[t]){var c=m({},t,n);r.beforeSet(i,c);for(var g=0,f=o.length;g<f;g++){var v=o[g];r.canSet(v)&&(u&&void 0===s._private[r.field][t]?d.default(v._private[r.field],u,n):v._private[r.field][t]=n)}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}}else if(r.allowSetting&&S(t)){var y,b,x=t,w=Object.keys(x);r.beforeSet(i,x);for(var E=0;E<w.length;E++){if(b=x[y=w[E]],!r.immutableKeys[y])for(var _=0;_<o.length;_++){var T=o[_];r.canSet(T)&&(T._private[r.field][y]=b)}}r.updateStyle&&i.updateStyle(),r.onSet(i),r.settingTriggersEvent&&i[r.triggerFnName](r.settingEvent)}else if(r.allowBinding&&L(t)){var D=t;i.on(r.bindingEvent,D)}else if(r.allowGetting&&void 0===t){var C;return s&&(r.beforeGet(s),C=s._private[r.field]),C}return i}},removeData:function(e){return e=Q({},{field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}},e),function(t){var n=e,r=this,i=void 0!==r.length?r:[r];if(A(t)){for(var a=t.split(/\s+/),o=a.length,s=0;s<o;s++){var l=a[s];if(!z(l))if(!n.immutableKeys[l])for(var u=0,c=i.length;u<c;u++)i[u]._private[n.field][l]=void 0}n.triggerEvent&&r[n.triggerFnName](n.event)}else if(void 0===t){for(var h=0,d=i.length;h<d;h++)for(var p=i[h]._private[n.field],g=Object.keys(p),f=0;f<g.length;f++){var v=g[f];!n.immutableKeys[v]&&(p[v]=void 0)}n.triggerEvent&&r[n.triggerFnName](n.event)}return r}}},lr={eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.unlisten=t.unbind=t.off=t.removeListener,t.trigger=t.emit,t.pon=t.promiseOn=function(e,t){var n=this,r=Array.prototype.slice.call(arguments,0);return new rr((function(e,t){var i=r.concat([function(t){n.off.apply(n,a),e(t)}]),a=i.concat([]);n.on.apply(n,i)}))}}},ur={};[or,sr,lr].forEach((function(e){Q(ur,e)}));var cr={animate:ur.animate(),animation:ur.animation(),animated:ur.animated(),clearQueue:ur.clearQueue(),delay:ur.delay(),delayAnimation:ur.delayAnimation(),stop:ur.stop()},hr={classes:function(e){var t=this;if(void 0===e){var n=[];return t[0]._private.classes.forEach((function(e){return n.push(e)})),n}k(e)||(e=(e||"").match(/\S+/g)||[]);for(var r=[],i=new Ge(e),a=0;a<t.length;a++){for(var o=t[a],s=o._private,l=s.classes,u=!1,c=0;c<e.length;c++){var h=e[c];if(!l.has(h)){u=!0;break}}u||(u=l.size!==e.length),u&&(s.classes=i,r.push(o))}return r.length>0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){k(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a<o;a++)for(var s=n[a],l=s._private.classes,u=!1,c=0;c<e.length;c++){var h=e[c],d=l.has(h),p=!1;t||r&&!d?(l.add(h),p=!0):(!t||r&&d)&&(l.delete(h),p=!0),!u&&p&&(i.push(s),u=!0)}return i.length>0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};hr.className=hr.classNames=hr.classes;var dr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:q,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};dr.variable="(?:[\\w-.]|(?:\\\\"+dr.metaChar+"))+",dr.className="(?:[\\w-]|(?:\\\\"+dr.metaChar+"))+",dr.value=dr.string+"|"+dr.number,dr.id=dr.variable,function(){var e,t,n;for(e=dr.comparatorOp.split("|"),n=0;n<e.length;n++)t=e[n],dr.comparatorOp+="|@"+t;for(e=dr.comparatorOp.split("|"),n=0;n<e.length;n++)(t=e[n]).indexOf("!")>=0||"="!==t&&(dr.comparatorOp+="|\\!"+t)}();var pr=0,gr=1,fr=2,vr=3,yr=4,mr=5,br=6,xr=7,wr=8,Er=9,_r=10,Tr=11,Dr=12,Cr=13,Nr=14,Ar=15,Lr=16,kr=17,Sr=18,Ir=19,Mr=20,Or=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return function(e,t){return-1*Z(e,t)}(e.selector,t.selector)})),Pr=function(){for(var e,t={},n=0;n<Or.length;n++)t[(e=Or[n]).selector]=e.matches;return t}(),Rr="("+Or.map((function(e){return e.selector})).join("|")+")",Br=function(e){return e.replace(new RegExp("\\\\("+dr.metaChar+")","g"),(function(e,t){return t}))},Fr=function(e,t,n){e[e.length-1]=n},zr=[{name:"group",query:!0,regex:"("+dr.group+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:pr,value:"*"===r?r:r+"s"})}},{name:"state",query:!0,regex:Rr,populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:xr,value:r})}},{name:"id",query:!0,regex:"\\#("+dr.id+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:wr,value:Br(r)})}},{name:"className",query:!0,regex:"\\.("+dr.className+")",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:Er,value:Br(r)})}},{name:"dataExists",query:!0,regex:"\\[\\s*("+dr.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,1)[0];t.checks.push({type:yr,field:Br(r)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+dr.variable+")\\s*("+dr.comparatorOp+")\\s*("+dr.value+")\\s*\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];o=null!=new RegExp("^"+dr.string+"$").exec(o)?o.substring(1,o.length-1):parseFloat(o),t.checks.push({type:vr,field:Br(i),operator:a,value:o})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+dr.boolOp+")\\s*("+dr.variable+")\\s*\\]",populate:function(e,t,n){var r=b(n,2),i=r[0],a=r[1];t.checks.push({type:mr,field:Br(a),operator:i})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+dr.meta+")\\s*("+dr.comparatorOp+")\\s*("+dr.number+")\\s*\\]\\]",populate:function(e,t,n){var r=b(n,3),i=r[0],a=r[1],o=r[2];t.checks.push({type:br,field:Br(i),operator:a,value:parseFloat(o)})}},{name:"nextQuery",separator:!0,regex:dr.separator,populate:function(e,t){var n=e.currentSubject,r=e.edgeCount,i=e.compoundCount,a=e[e.length-1];return null!=n&&(a.subject=n,e.currentSubject=null),a.edgeCount=r,a.compoundCount=i,e.edgeCount=0,e.compoundCount=0,e[e.length++]={checks:[]}}},{name:"directedEdge",separator:!0,regex:dr.directedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:Tr,source:r,target:i}),Fr(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:Dr,source:o,target:s}),Fr(e,0,a),e.edgeCount++,s}},{name:"undirectedEdge",separator:!0,regex:dr.undirectedEdge,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r=t,i={checks:[]};return n.checks.push({type:_r,nodes:[r,i]}),Fr(e,0,n),e.edgeCount++,i}var a={checks:[]},o=t,s={checks:[]};return a.checks.push({type:Nr,node:o,neighbor:s}),Fr(e,0,a),s}},{name:"child",separator:!0,regex:dr.child,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:Ar,parent:i,child:r}),Fr(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},l={checks:[]},u={checks:[]},c={checks:[]};return a.checks.push({type:Ir,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:Mr}],c.checks.push({type:Mr}),s.checks.push({type:kr,parent:c,child:u}),Fr(e,0,a),e.currentSubject=l,e.compoundCount++,u}var h={checks:[]},d={checks:[]},p=[{type:kr,parent:h,child:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"descendant",separator:!0,regex:dr.descendant,populate:function(e,t){if(null==e.currentSubject){var n={checks:[]},r={checks:[]},i=e[e.length-1];return n.checks.push({type:Lr,ancestor:i,descendant:r}),Fr(e,0,n),e.compoundCount++,r}if(e.currentSubject===t){var a={checks:[]},o=e[e.length-1],s={checks:[]},l={checks:[]},u={checks:[]},c={checks:[]};return a.checks.push({type:Ir,left:o,right:s,subject:l}),l.checks=t.checks,t.checks=[{type:Mr}],c.checks.push({type:Mr}),s.checks.push({type:Sr,ancestor:c,descendant:u}),Fr(e,0,a),e.currentSubject=l,e.compoundCount++,u}var h={checks:[]},d={checks:[]},p=[{type:Sr,ancestor:h,descendant:d}];return h.checks=t.checks,t.checks=p,e.compoundCount++,d}},{name:"subject",modifier:!0,regex:dr.subject,populate:function(e,t){if(null!=e.currentSubject&&e.currentSubject!==t)return Ae("Redefinition of subject in selector `"+e.toString()+"`"),!1;e.currentSubject=t;var n=e[e.length-1].checks[0],r=null==n?null:n.type;r===Tr?n.type=Cr:r===_r&&(n.type=Nr,n.node=n.nodes[1],n.neighbor=n.nodes[0],n.nodes=null)}}];zr.forEach((function(e){return e.regexObj=new RegExp("^"+e.regex)}));var Gr=function(e){for(var t,n,r,i=0;i<zr.length;i++){var a=zr[i],o=a.name,s=e.match(a.regexObj);if(null!=s){n=s,t=a,r=o;var l=s[0];e=e.substring(l.length);break}}return{expr:t,match:n,name:r,remaining:e}},Yr={parse:function(e){var t=this,n=t.inputText=e,r=t[0]={checks:[]};for(t.length=1,n=function(e){var t=e.match(/^\s+/);if(t){var n=t[0];e=e.substring(n.length)}return e}(n);;){var i=Gr(n);if(null==i.expr)return Ae("The selector `"+e+"`is invalid"),!1;var a=i.match.slice(1),o=i.expr.populate(t,r,a);if(!1===o)return!1;if(null!=o&&(r=o),(n=i.remaining).match(/^\s*$/))break}var s=t[t.length-1];null!=t.currentSubject&&(s.subject=t.currentSubject),s.edgeCount=t.edgeCount,s.compoundCount=t.compoundCount;for(var l=0;l<t.length;l++){var u=t[l];if(u.compoundCount>0&&u.edgeCount>0)return Ae("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return Ae("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&Ae("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return A(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case pr:var l=e(s);return l.substring(0,l.length-1);case vr:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case mr:var h=r.operator,d=r.field;return"["+e(h)+d+"]";case yr:return"["+r.field+"]";case br:var p=r.operator;return"[["+r.field+n(e(p))+t(s)+"]]";case xr:return s;case wr:return"#"+s;case Er:return"."+s;case kr:case Ar:return i(r.parent,a)+n(">")+i(r.child,a);case Sr:case Lr:return i(r.ancestor,a)+" "+i(r.descendant,a);case Ir:var g=i(r.left,a),f=i(r.subject,a),v=i(r.right,a);return g+(g.length>0?" ":"")+f+v;case Mr:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o<this.length;o++){var s=this[o];a+=i(s,s.subject),this.length>1&&o<this.length-1&&(a+=", ")}return this.toStringCache=a,a}},Xr=function(e,t,n){var r,i,a,o=A(e),s=I(e),l=A(n),u=!1,c=!1,h=!1;switch(t.indexOf("!")>=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(i=o||s?""+e:"",a=""+n),u&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":h=!0,r=e>n;break;case">=":h=!0,r=e>=n;break;case"<":h=!0,r=e<n;break;case"<=":h=!0,r=e<=n;break;default:r=!1}return!c||null==e&&h||(r=!r),r},Vr=function(e,t){return e.data(t)},Ur=[],jr=function(e,t){return e.checks.every((function(e){return Ur[e.type](e,t)}))};Ur[pr]=function(e,t){var n=e.value;return"*"===n||n===t.group()},Ur[xr]=function(e,t){return function(e,t){return Pr[e](t)}(e.value,t)},Ur[wr]=function(e,t){var n=e.value;return t.id()===n},Ur[Er]=function(e,t){var n=e.value;return t.hasClass(n)},Ur[br]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Xr(function(e,t){return e[t]()}(t,n),r,i)},Ur[vr]=function(e,t){var n=e.field,r=e.operator,i=e.value;return Xr(Vr(t,n),r,i)},Ur[mr]=function(e,t){var n=e.field,r=e.operator;return function(e,t){switch(t){case"?":return!!e;case"!":return!e;case"^":return void 0===e}}(Vr(t,n),r)},Ur[yr]=function(e,t){var n=e.field;return e.operator,void 0!==Vr(t,n)},Ur[_r]=function(e,t){var n=e.nodes[0],r=e.nodes[1],i=t.source(),a=t.target();return jr(n,i)&&jr(r,a)||jr(r,i)&&jr(n,a)},Ur[Nr]=function(e,t){return jr(e.node,t)&&t.neighborhood().some((function(t){return t.isNode()&&jr(e.neighbor,t)}))},Ur[Tr]=function(e,t){return jr(e.source,t.source())&&jr(e.target,t.target())},Ur[Dr]=function(e,t){return jr(e.source,t)&&t.outgoers().some((function(t){return t.isNode()&&jr(e.target,t)}))},Ur[Cr]=function(e,t){return jr(e.target,t)&&t.incomers().some((function(t){return t.isNode()&&jr(e.source,t)}))},Ur[Ar]=function(e,t){return jr(e.child,t)&&jr(e.parent,t.parent())},Ur[kr]=function(e,t){return jr(e.parent,t)&&t.children().some((function(t){return jr(e.child,t)}))},Ur[Lr]=function(e,t){return jr(e.descendant,t)&&t.ancestors().some((function(t){return jr(e.ancestor,t)}))},Ur[Sr]=function(e,t){return jr(e.ancestor,t)&&t.descendants().some((function(t){return jr(e.descendant,t)}))},Ur[Ir]=function(e,t){return jr(e.subject,t)&&jr(e.left,t)&&jr(e.right,t)},Ur[Mr]=function(){return!0},Ur[gr]=function(e,t){return e.value.has(t)},Ur[fr]=function(e,t){return(0,e.value)(t)};var qr={matches:function(e){for(var t=0;t<this.length;t++){var n=this[t];if(jr(n,e))return!0}return!1},filter:function(e){var t=this;if(1===t.length&&1===t[0].checks.length&&t[0].checks[0].type===wr)return e.getElementById(t[0].checks[0].value).collection();var n=function(e){for(var n=0;n<t.length;n++){var r=t[n];if(jr(r,e))return!0}return!1};return null==t.text()&&(n=function(){return!0}),e.filter(n)}},Hr=function(e){this.inputText=e,this.currentSubject=null,this.compoundCount=0,this.edgeCount=0,this.length=0,null==e||A(e)&&e.match(/^\s*$/)||(O(e)?this.addQuery({checks:[{type:gr,value:e.collection()}]}):L(e)?this.addQuery({checks:[{type:fr,value:e}]}):A(e)?this.parse(e)||(this.invalid=!0):Ce("A selector must be created from a string; found "))},Wr=Hr.prototype;[Yr,qr].forEach((function(e){return Q(Wr,e)})),Wr.text=function(){return this.inputText},Wr.size=function(){return this.length},Wr.eq=function(e){return this[e]},Wr.sameText=function(e){return!this.invalid&&!e.invalid&&this.text()===e.text()},Wr.addQuery=function(e){this[this.length++]=e},Wr.selector=Wr.toString;var $r={allAre:function(e){var t=new Hr(e);return this.every((function(e){return t.matches(e)}))},is:function(e){var t=new Hr(e);return this.some((function(e){return t.matches(e)}))},some:function(e,t){for(var n=0;n<this.length;n++){if(t?e.apply(t,[this[n],n,this]):e(this[n],n,this))return!0}return!1},every:function(e,t){for(var n=0;n<this.length;n++){if(!(t?e.apply(t,[this[n],n,this]):e(this[n],n,this)))return!1}return!0},same:function(e){if(this===e)return!0;e=this.cy().collection(e);var t=this.length;return t===e.length&&(1===t?this[0]===e[0]:this.every((function(t){return e.hasElementWithId(t.id())})))},anySame:function(e){return e=this.cy().collection(e),this.some((function(t){return e.hasElementWithId(t.id())}))},allAreNeighbors:function(e){e=this.cy().collection(e);var t=this.neighborhood();return e.every((function(e){return t.hasElementWithId(e.id())}))},contains:function(e){e=this.cy().collection(e);var t=this;return e.every((function(e){return t.hasElementWithId(e.id())}))}};$r.allAreNeighbours=$r.allAreNeighbors,$r.has=$r.contains,$r.equal=$r.equals=$r.same;var Kr,Zr,Qr=function(e,t){return function(n,r,i,a){var o,s=n,l=this;if(null==s?o="":O(s)&&1===s.length&&(o=s.id()),1===l.length&&o){var u=l[0]._private,c=u.traversalCache=u.traversalCache||{},h=c[t]=c[t]||[],d=fe(o),p=h[d];return p||(h[d]=e.call(l,n,r,i,a))}return e.call(l,n,r,i,a)}},Jr={parent:function(e){var t=[];if(1===this.length){var n=this[0]._private.parent;if(n)return n}for(var r=0;r<this.length;r++){var i=this[r]._private.parent;i&&t.push(i)}return this.spawn(t,!0).filter(e)},parents:function(e){for(var t=[],n=this.parent();n.nonempty();){for(var r=0;r<n.length;r++){var i=n[r];t.push(i)}n=n.parent()}return this.spawn(t,!0).filter(e)},commonAncestors:function(e){for(var t,n=0;n<this.length;n++){var r=this[n].parents();t=(t=t||r).intersect(r)}return t.filter(e)},orphans:function(e){return this.stdFilter((function(e){return e.isOrphan()})).filter(e)},nonorphans:function(e){return this.stdFilter((function(e){return e.isChild()})).filter(e)},children:Qr((function(e){for(var t=[],n=0;n<this.length;n++)for(var r=this[n]._private.children,i=0;i<r.length;i++)t.push(r[i]);return this.spawn(t,!0).filter(e)}),"children"),siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];if(e)return e.isNode()&&0!==e._private.children.length},isChildless:function(){var e=this[0];if(e)return e.isNode()&&0===e._private.children.length},isChild:function(){var e=this[0];if(e)return e.isNode()&&null!=e._private.parent},isOrphan:function(){var e=this[0];if(e)return e.isNode()&&null==e._private.parent},descendants:function(e){var t=[];return function e(n){for(var r=0;r<n.length;r++){var i=n[r];t.push(i),i.children().nonempty()&&e(i.children())}}(this.children()),this.spawn(t,!0).filter(e)}};function ei(e,t,n,r){for(var i=[],a=new Ge,o=e.cy().hasCompoundNodes(),s=0;s<e.length;s++){var l=e[s];n?i.push(l):o&&r(i,a,l)}for(;i.length>0;){var u=i.shift();t(u),a.add(u.id()),o&&r(i,a,u)}return e}function ti(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i<r.length;i++){var a=r[i];t.has(a.id())||e.push(a)}}function ni(e,t,n){if(n.isChild()){var r=n._private.parent;t.has(r.id())||e.push(r)}}function ri(e,t,n){ni(e,t,n),ti(e,t,n)}Jr.forEachDown=function(e){return ei(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],ti)},Jr.forEachUp=function(e){return ei(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],ni)},Jr.forEachUpAndDown=function(e){return ei(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],ri)},Jr.ancestors=Jr.parents,(Kr=Zr={data:ur.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:ur.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:ur.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ur.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:ur.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:ur.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Kr.data,Kr.removeAttr=Kr.removeData;var ii,ai,oi=Zr,si={};function li(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(r+=e(i,s))}return r}}}function ui(e,t){return function(n){for(var r,i=this.nodes(),a=0;a<i.length;a++){var o=i[a][e](n);void 0===o||void 0!==r&&!t(o,r)||(r=o)}return r}}Q(si,{degree:li((function(e,t){return t.source().same(t.target())?2:1})),indegree:li((function(e,t){return t.target().same(e)?1:0})),outdegree:li((function(e,t){return t.source().same(e)?1:0}))}),Q(si,{minDegree:ui("degree",(function(e,t){return e<t})),maxDegree:ui("degree",(function(e,t){return e>t})),minIndegree:ui("indegree",(function(e,t){return e<t})),maxIndegree:ui("indegree",(function(e,t){return e>t})),minOutdegree:ui("outdegree",(function(e,t){return e<t})),maxOutdegree:ui("outdegree",(function(e,t){return e>t}))}),Q(si,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r<n.length;r++)t+=n[r].degree(e);return t}});var ci=function(e,t,n){for(var r=0;r<e.length;r++){var i=e[r];if(!i.locked()){var a=i._private.position,o={x:null!=t.x?t.x-a.x:0,y:null!=t.y?t.y-a.y:0};!i.isParent()||0===o.x&&0===o.y||i.children().shift(o,n),i.dirtyBoundingBoxCache()}}},hi={field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"emitAndNotify",allowGetting:!0,validKeys:["x","y"],beforeGet:function(e){e.updateCompoundBounds()},beforeSet:function(e,t){ci(e,t,!1)},onSet:function(e){e.dirtyCompoundBoundsCache()},canSet:function(e){return!e.locked()}};ii=ai={position:ur.data(hi),silentPosition:ur.data(Q({},hi,{allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!1,beforeSet:function(e,t){ci(e,t,!0)},onSet:function(e){e.dirtyCompoundBoundsCache()}})),positions:function(e,t){if(S(e))t?this.silentPosition(e):this.position(e);else if(L(e)){var n=e,r=this.cy();r.startBatch();for(var i=0;i<this.length;i++){var a,o=this[i];(a=n(o,i))&&(t?o.silentPosition(a):o.position(a))}r.endBatch()}return this},silentPositions:function(e){return this.positions(e,!0)},shift:function(e,t,n){var r;if(S(e)?(r={x:I(e.x)?e.x:0,y:I(e.y)?e.y:0},n=t):A(e)&&I(t)&&((r={x:0,y:0})[e]=t),null!=r){var i=this.cy();i.startBatch();for(var a=0;a<this.length;a++){var o=this[a];if(!(i.hasCompoundNodes()&&o.isChild()&&o.ancestors().anySame(this))){var s=o.position(),l={x:s.x+r.x,y:s.y+r.y};n?o.silentPosition(l):o.position(l)}}i.endBatch()}return this},silentShift:function(e,t){return S(e)?this.shift(e,!0):A(e)&&I(t)&&this.shift(e,t,!0),this},renderedPosition:function(e,t){var n=this[0],r=this.cy(),i=r.zoom(),a=r.pan(),o=S(e)?e:void 0,s=void 0!==o||void 0!==t&&A(e);if(n&&n.isNode()){if(!s){var l=n.position();return o=rt(l,i,a),void 0===e?o:o[e]}for(var u=0;u<this.length;u++){var c=this[u];void 0!==t?c.position(e,(t-a[e])/i):void 0!==o&&c.position(it(o,i,a))}}else if(!s)return;return this},relativePosition:function(e,t){var n=this[0],r=this.cy(),i=S(e)?e:void 0,a=void 0!==i||void 0!==t&&A(e),o=r.hasCompoundNodes();if(n&&n.isNode()){if(!a){var s=n.position(),l=o?n.parent():null,u=l&&l.length>0,c=u;u&&(l=l[0]);var h=c?l.position():{x:0,y:0};return i={x:s.x-h.x,y:s.y-h.y},void 0===e?i:i[e]}for(var d=0;d<this.length;d++){var p=this[d],g=o?p.parent():null,f=g&&g.length>0,v=f;f&&(g=g[0]);var y=v?g.position():{x:0,y:0};void 0!==t?p.position(e,t+y[e]):void 0!==i&&p.position({x:i.x+y.x,y:i.y+y.y})}}else if(!a)return;return this}},ii.modelPosition=ii.point=ii.position,ii.modelPositions=ii.points=ii.positions,ii.renderedPoint=ii.renderedPosition,ii.relativePoint=ii.relativePosition;var di,pi,gi=ai;di=pi={},pi.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},pi.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},pi.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var l=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(l=100*l/i.width.val);var u=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(u=100*u/i.height.val);var c=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(c=100*c/i.height.val);var h=y(i.width.val-a.w,s,l),d=h.biasDiff,p=h.biasComplementDiff,g=y(i.height.val-a.h,u,c),f=g.biasDiff,v=g.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-d+a.x1+a.x2+p)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-f+a.y1+a.y2+v)/2}function y(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;r<this.length;r++){var i=this[r],a=i._private;a.compoundBoundsClean&&!e||(n(i),t.batching()||(a.compoundBoundsClean=!0))}return this};var fi=function(e){return e===1/0||e===-1/0?0:e},vi=function(e,t,n,r,i){r-t!=0&&i-n!=0&&null!=t&&null!=n&&null!=r&&null!=i&&(e.x1=t<e.x1?t:e.x1,e.x2=r>e.x2?r:e.x2,e.y1=n<e.y1?n:e.y1,e.y2=i>e.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},yi=function(e,t){return null==t?e:vi(e,t.x1,t.y1,t.x2,t.y2)},mi=function(e,t,n){return Re(e,t,n)},bi=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var l=a.arrowBounds=a.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=i-s,u.x2=r+s,u.y2=i+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,mt(u,1),vi(e,u.x1,u.y1,u.x2,u.y2)}}},xi=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),h=t.pstyle("text-valign"),d=mi(a,"labelWidth",n),p=mi(a,"labelHeight",n),g=mi(a,"labelX",n),f=mi(a,"labelY",n),v=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,_=p,T=d,D=T/2,C=_/2;if(m)o=g-D,s=g+D,l=f-C,u=f+C;else{switch(c.value){case"left":o=g-T,s=g;break;case"center":o=g-D,s=g+D;break;case"right":o=g,s=g+T}switch(h.value){case"top":l=f-_,u=f;break;case"center":l=f-C,u=f+C;break;case"bottom":l=f,u=f+_}}o+=v-Math.max(x,w)-E-2,s+=v+Math.max(x,w)+E+2,l+=y-Math.max(x,w)-E-2,u+=y+Math.max(x,w)+E+2;var N=n||"main",A=i.labelBounds,L=A[N]=A[N]||{};L.x1=o,L.y1=l,L.x2=s,L.y2=u,L.w=s-o,L.h=u-l;var k=m&&"autorotate"===b.strValue,S=null!=b.pfValue&&0!==b.pfValue;if(k||S){var I=k?mi(i.rstyle,"labelAngle",n):b.pfValue,M=Math.cos(I),O=Math.sin(I),P=(o+s)/2,R=(l+u)/2;if(!m){switch(c.value){case"left":P=s;break;case"right":P=o}switch(h.value){case"top":R=u;break;case"bottom":R=l}}var B=function(e,t){return{x:(e-=P)*M-(t-=R)*O+P,y:e*O+t*M+R}},F=B(o,l),z=B(o,u),G=B(s,l),Y=B(s,u);o=Math.min(F.x,z.x,G.x,Y.x),s=Math.max(F.x,z.x,G.x,Y.x),l=Math.min(F.y,z.y,G.y,Y.y),u=Math.max(F.y,z.y,G.y,Y.y)}var X=N+"Rot",V=A[X]=A[X]||{};V.x1=o,V.y1=l,V.x2=s,V.y2=u,V.w=s-o,V.h=u-l,vi(e,o,l,s,u),vi(i.labelBounds.all,o,l,s,u)}return e}},wi=function(e,t){var n,r,i,a,o,s,l,u=e._private.cy,c=u.styleEnabled(),h=u.headless(),d=ft(),p=e._private,g=e.isNode(),f=e.isEdge(),v=p.rstyle,y=g&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!f||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),_=0;if(c&&(_=e.pstyle("width").pfValue/2),g&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var D=e.outerWidth()/2,C=e.outerHeight()/2;vi(d,n=o-D,i=s-C,r=o+D,a=s+C),c&&t.includeOutlines&&function(e,t){if(!t.cy().headless()){var n,r,i,a=t.pstyle("outline-opacity").value,o=t.pstyle("outline-width").value;if(a>0&&o>0){var s=t.pstyle("outline-offset").value,l=t.pstyle("shape").value,u=o+s,c=(e.w+2*u)/e.w,h=(e.h+2*u)/e.h,d=0;["diamond","pentagon","round-triangle"].includes(l)?(c=(e.w+2.4*u)/e.w,d=-u/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(l)?c=(e.w+2.4*u)/e.w:"star"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.6*u)/e.h,d=-u/3.8):"triangle"===l?(c=(e.w+2.8*u)/e.w,h=(e.h+2.4*u)/e.h,d=-u/1.4):"vee"===l&&(c=(e.w+4.4*u)/e.w,h=(e.h+3.8*u)/e.h,d=.5*-u);var p=e.h*h-e.h,g=e.w*c-e.w;if(bt(e,[Math.ceil(p/2),Math.ceil(g/2)]),0!==d){var f=(r=0,i=d,{x1:(n=e).x1+r,x2:n.x2+r,y1:n.y1+i,y2:n.y2+i,w:n.w,h:n.h});vt(e,f)}}}}(d,e)}else if(f&&t.includeEdges)if(c&&!h){var N=e.pstyle("curve-style").strValue;if(n=Math.min(v.srcX,v.midX,v.tgtX),r=Math.max(v.srcX,v.midX,v.tgtX),i=Math.min(v.srcY,v.midY,v.tgtY),a=Math.max(v.srcY,v.midY,v.tgtY),vi(d,n-=_,i-=_,r+=_,a+=_),"haystack"===N){var A=v.haystackPts;if(A&&2===A.length){if(n=A[0].x,i=A[0].y,n>(r=A[1].x)){var L=n;n=r,r=L}if(i>(a=A[1].y)){var k=i;i=a,a=k}vi(d,n-_,i-_,r+_,a+_)}}else if("bezier"===N||"unbundled-bezier"===N||"segments"===N||"taxi"===N){var S;switch(N){case"bezier":case"unbundled-bezier":S=v.bezierPts;break;case"segments":case"taxi":S=v.linePts}if(null!=S)for(var I=0;I<S.length;I++){var M=S[I];n=M.x-_,r=M.x+_,i=M.y-_,a=M.y+_,vi(d,n,i,r,a)}}}else{var O=e.source().position(),P=e.target().position();if((n=O.x)>(r=P.x)){var R=n;n=r,r=R}if((i=O.y)>(a=P.y)){var B=i;i=a,a=B}vi(d,n-=_,i-=_,r+=_,a+=_)}if(c&&t.includeEdges&&f&&(bi(d,e,"mid-source"),bi(d,e,"mid-target"),bi(d,e,"source"),bi(d,e,"target")),c)if("yes"===e.pstyle("ghost").value){var F=e.pstyle("ghost-offset-x").pfValue,z=e.pstyle("ghost-offset-y").pfValue;vi(d,d.x1+F,d.y1+z,d.x2+F,d.y2+z)}var G=p.bodyBounds=p.bodyBounds||{};xt(G,d),bt(G,y),mt(G,1),c&&(n=d.x1,r=d.x2,i=d.y1,a=d.y2,vi(d,n-E,i-E,r+E,a+E));var Y=p.overlayBounds=p.overlayBounds||{};xt(Y,d),bt(Y,y),mt(Y,1);var X=p.labelBounds=p.labelBounds||{};null!=X.all?((l=X.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):X.all=ft(),c&&t.includeLabels&&(t.includeMainLabels&&xi(d,e,null),f&&(t.includeSourceLabels&&xi(d,e,"source"),t.includeTargetLabels&&xi(d,e,"target")))}return d.x1=fi(d.x1),d.y1=fi(d.y1),d.x2=fi(d.x2),d.y2=fi(d.y2),d.w=fi(d.x2-d.x1),d.h=fi(d.y2-d.y1),d.w>0&&d.h>0&&b&&(bt(d,y),mt(d,1)),d},Ei=function(e){var t=0,n=function(e){return(e?1:0)<<t++},r=0;return r+=n(e.incudeNodes),r+=n(e.includeEdges),r+=n(e.includeLabels),r+=n(e.includeMainLabels),r+=n(e.includeSourceLabels),r+=n(e.includeTargetLabels),r+=n(e.includeOverlays),r+=n(e.includeOutlines)},_i=function(e){if(e.isEdge()){var t=e.source().position(),n=e.target().position(),r=function(e){return Math.round(e)};return function(e,t){var n={value:0,done:!1},r=0,i=e.length;return ce({next:function(){return r<i?n.value=e[r++]:n.done=!0,n}},t)}([r(t.x),r(t.y),r(n.x),r(n.y)])}return 0},Ti=function(e,t){var n,r=e._private,i=e.isEdge(),a=(null==t?Ci:Ei(t))===Ci,o=_i(e),s=r.bbCachePosKey===o,l=t.useCache&&s,u=function(e){return null==e._private.bbCache||e._private.styleDirty};if(!l||u(e)||i&&u(e.source())||u(e.target())?(s||e.recalculateRenderedStyle(l),n=wi(e,Di),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var c=e.isNode();n=ft(),(t.includeNodes&&c||t.includeEdges&&!c)&&(t.includeOverlays?yi(n,r.overlayBounds):yi(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?yi(n,r.labelBounds.all):(t.includeMainLabels&&yi(n,r.labelBounds.mainRot),t.includeSourceLabels&&yi(n,r.labelBounds.sourceRot),t.includeTargetLabels&&yi(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},Di={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,includeOutlines:!0,useCache:!0},Ci=Ei(Di),Ni=Me(Di);pi.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=ft();var n=Ni(e=e||Di),r=this;if(r.cy().styleEnabled())for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=_i(a),l=o.bbCachePosKey===s,u=n.useCache&&l&&!o.styleDirty;a.recalculateRenderedStyle(u)}this.updateCompoundBounds(!e.useCache);for(var c=0;c<r.length;c++){var h=r[c];yi(t,Ti(h,n))}}else e=void 0===e?Di:Ni(e),t=Ti(this[0],e);return t.x1=fi(t.x1),t.y1=fi(t.y1),t.x2=fi(t.x2),t.y2=fi(t.y2),t.w=fi(t.x2-t.x1),t.h=fi(t.y2-t.y1),t},pi.dirtyBoundingBoxCache=function(){for(var e=0;e<this.length;e++){var t=this[e]._private;t.bbCache=null,t.bbCachePosKey=null,t.bodyBounds=null,t.overlayBounds=null,t.labelBounds.all=null,t.labelBounds.source=null,t.labelBounds.target=null,t.labelBounds.main=null,t.labelBounds.sourceRot=null,t.labelBounds.targetRot=null,t.labelBounds.mainRot=null,t.arrowBounds.source=null,t.arrowBounds.target=null,t.arrowBounds["mid-source"]=null,t.arrowBounds["mid-target"]=null}return this.emitAndNotify("bounds"),this},pi.boundingBoxAt=function(e){var t=this.nodes(),n=this.cy(),r=n.hasCompoundNodes(),i=n.collection();if(r&&(i=t.filter((function(e){return e.isParent()})),t=t.not(i)),S(e)){var a=e;e=function(){return a}}n.startBatch(),t.forEach((function(t,n){return t._private.bbAtOldPos=e(t,n)})).silentPositions(e),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0));var o=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}}(this.boundingBox({useCache:!1}));return t.silentPositions((function(e){return e._private.bbAtOldPos})),r&&(i.dirtyCompoundBoundsCache(),i.dirtyBoundingBoxCache(),i.updateCompoundBounds(!0)),n.endBatch(),o},di.boundingbox=di.bb=di.boundingBox,di.renderedBoundingbox=di.renderedBoundingBox;var Ai,Li,ki=pi;Ai=Li={};var Si=function(e){e.uppercaseName=j(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=j(e.outerName),Ai[e.name]=function(){var t=this[0],n=t._private,r=n.cy._private.styleEnabled;if(t){if(r){if(t.isParent())return t.updateCompoundBounds(),n[e.autoName]||0;var i=t.pstyle(e.name);return"label"===i.strValue?(t.recalculateRenderedStyle(),n.rstyle[e.labelName]||0):i.pfValue}return 1}},Ai["outer"+e.uppercaseName]=function(){var t=this[0],n=t._private.cy._private.styleEnabled;if(t)return n?t[e.name]()+t.pstyle("border-width").pfValue+2*t.padding():1},Ai["rendered"+e.uppercaseName]=function(){var t=this[0];if(t)return t[e.name]()*this.cy().zoom()},Ai["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t)return t[e.outerName]()*this.cy().zoom()}};Si({name:"width"}),Si({name:"height"}),Li.padding=function(){var e=this[0],t=e._private;return e.isParent()?(e.updateCompoundBounds(),void 0!==t.autoPadding?t.autoPadding:e.pstyle("padding").pfValue):e.pstyle("padding").pfValue},Li.paddedHeight=function(){var e=this[0];return e.height()+2*e.padding()},Li.paddedWidth=function(){var e=this[0];return e.width()+2*e.padding()};var Ii=Li,Mi={controlPoints:{get:function(e){return e.renderer().getControlPoints(e)},mult:!0},segmentPoints:{get:function(e){return e.renderer().getSegmentPoints(e)},mult:!0},sourceEndpoint:{get:function(e){return e.renderer().getSourceEndpoint(e)}},targetEndpoint:{get:function(e){return e.renderer().getTargetEndpoint(e)}},midpoint:{get:function(e){return e.renderer().getEdgeMidpoint(e)}}},Oi=Object.keys(Mi).reduce((function(e,t){var n=Mi[t],r=function(e){return"rendered"+e[0].toUpperCase()+e.substr(1)}(t);return e[t]=function(){return function(e,t){if(e.isEdge())return t(e)}(this,n.get)},n.mult?e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy(),r=n.pan(),i=n.zoom();return t(e).map((function(e){return rt(e,i,r)}))}}(this,n.get)}:e[r]=function(){return function(e,t){if(e.isEdge()){var n=e.cy();return rt(t(e),n.zoom(),n.pan())}}(this,n.get)},e}),{}),Pi=Q({},gi,ki,Ii,Oi),Ri=function(e,t){this.recycle(e,t)};function Bi(){return!1}function Fi(){return!0}Ri.prototype={instanceString:function(){return"event"},recycle:function(e,t){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Bi,null!=e&&e.preventDefault?(this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?Fi:Bi):null!=e&&e.type?t=e:this.type=e,null!=t&&(this.originalEvent=t.originalEvent,this.type=null!=t.type?t.type:this.type,this.cy=t.cy,this.target=t.target,this.position=t.position,this.renderedPosition=t.renderedPosition,this.namespace=t.namespace,this.layout=t.layout),null!=this.cy&&null!=this.position&&null==this.renderedPosition){var n=this.position,r=this.cy.zoom(),i=this.cy.pan();this.renderedPosition={x:n.x*r+i.x,y:n.y*r+i.y}}this.timeStamp=e&&e.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=Fi;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=Fi;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Fi,this.stopPropagation()},isDefaultPrevented:Bi,isPropagationStopped:Bi,isImmediatePropagationStopped:Bi};var zi=/^([^.]+)(\.(?:[^.]+))?$/,Gi={qualifierCompare:function(e,t){return e===t},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(e){return e},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},Yi=Object.keys(Gi),Xi={};function Vi(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Xi,t=arguments.length>1?arguments[1]:void 0,n=0;n<Yi.length;n++){var r=Yi[n];this[r]=e[r]||Gi[r]}this.context=t||this.context,this.listeners=[],this.emitting=0}var Ui=Vi.prototype,ji=function(e,t,n,r,i,a,o){L(r)&&(i=r,r=null),o&&(a=null==a?o:Q({},a,o));for(var s=k(n)?n:n.split(/\s+/),l=0;l<s.length;l++){var u=s[l];if(!z(u)){var c=u.match(zi);if(c)if(!1===t(e,u,c[1],c[2]?c[2]:null,r,i,a))break}}},qi=function(e,t){return e.addEventFields(e.context,t),new Ri(t.type,t)},Hi=function(e,t,n){if("event"!==N(n))if(S(n))t(e,qi(e,n));else for(var r=k(n)?n:n.split(/\s+/),i=0;i<r.length;i++){var a=r[i];if(!z(a)){var o=a.match(zi);if(o){var s=o[1],l=o[2]?o[2]:null;t(e,qi(e,{type:s,namespace:l,target:e.context}))}}}else t(e,n)};Ui.on=Ui.addListener=function(e,t,n,r,i){return ji(this,(function(e,t,n,r,i,a,o){L(a)&&e.listeners.push({event:t,callback:a,type:n,namespace:r,qualifier:i,conf:o})}),e,t,n,r,i),this},Ui.one=function(e,t,n,r){return this.on(e,t,n,r,{one:!0})},Ui.removeListener=Ui.off=function(e,t,n,r){var i=this;0!==this.emitting&&(this.listeners=this.listeners.slice());for(var a=this.listeners,o=function(o){var s=a[o];ji(i,(function(t,n,r,i,l,u){if((s.type===r||"*"===e)&&(!i&&".*"!==s.namespace||s.namespace===i)&&(!l||t.qualifierCompare(s.qualifier,l))&&(!u||s.callback===u))return a.splice(o,1),!1}),e,t,n,r)},s=a.length-1;s>=0;s--)o(s);return this},Ui.removeAllListeners=function(){return this.removeListener("*")},Ui.emit=Ui.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,k(t)||(t=[t]),Hi(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||".*"===i.namespace)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.push(r)}}(o,t),e.beforeEmit(e.context,i,a),i.conf&&i.conf.one&&(e.listeners=e.listeners.filter((function(e){return e!==i})));var s=e.callbackContext(e.context,i,a),l=i.callback.apply(s,o);e.afterEmit(e.context,i,a),!1===l&&(a.stopPropagation(),a.preventDefault())}},s=0;s<i;s++)o(s);e.bubble(e.context)&&!a.isPropagationStopped()&&e.parent(e.context).emit(a,t)}),e),this.emitting--,this};var Wi={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&P(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e.cy(),t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e},beforeEmit:function(e,t){t.conf&&t.conf.once&&t.conf.onceCollection.removeListener(t.event,t.qualifier,t.callback)},bubble:function(){return!0},parent:function(e){return e.isChild()?e.parent():e.cy()}},$i=function(e){return A(e)?new Hr(e):e},Ki={createEmitter:function(){for(var e=0;e<this.length;e++){var t=this[e],n=t._private;n.emitter||(n.emitter=new Vi(Wi,t))}return this},emitter:function(){return this._private.emitter},on:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n)}return this},removeListener:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().removeListener(e,r,n)}return this},removeAllListeners:function(){for(var e=0;e<this.length;e++){this[e].emitter().removeAllListeners()}return this},one:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().one(e,r,n)}return this},once:function(e,t,n){for(var r=$i(t),i=0;i<this.length;i++){this[i].emitter().on(e,r,n,{once:!0,onceCollection:this})}},emit:function(e,t){for(var n=0;n<this.length;n++){this[n].emitter().emit(e,t)}return this},emitAndNotify:function(e,t){if(0!==this.length)return this.cy().notify(e,this),this.emit(e,t),this}};ur.eventAliasesOn(Ki);var Zi={nodes:function(e){return this.filter((function(e){return e.isNode()})).filter(e)},edges:function(e){return this.filter((function(e){return e.isEdge()})).filter(e)},byGroup:function(){for(var e=this.spawn(),t=this.spawn(),n=0;n<this.length;n++){var r=this[n];r.isNode()?e.push(r):t.push(r)}return{nodes:e,edges:t}},filter:function(e,t){if(void 0===e)return this;if(A(e)||O(e))return new Hr(e).filter(this);if(L(e)){for(var n=this.spawn(),r=this,i=0;i<r.length;i++){var a=r[i];(t?e.apply(t,[a,i,r]):e(a,i,r))&&n.push(a)}return n}return this.spawn()},not:function(e){if(e){A(e)&&(e=this.filter(e));for(var t=this.spawn(),n=0;n<this.length;n++){var r=this[n];e.has(r)||t.push(r)}return t}return this},absoluteComplement:function(){return this.cy().mutableElements().not(this)},intersect:function(e){if(A(e)){var t=e;return this.filter(t)}for(var n=this.spawn(),r=e,i=this.length<e.length,a=i?this:r,o=i?r:this,s=0;s<a.length;s++){var l=a[s];o.has(l)&&n.push(l)}return n},xor:function(e){var t=this._private.cy;A(e)&&(e=t.$(e));var n=this.spawn(),r=e,i=function(e,t){for(var r=0;r<e.length;r++){var i=e[r],a=i._private.data.id;t.hasElementWithId(a)||n.push(i)}};return i(this,r),i(r,this),n},diff:function(e){var t=this._private.cy;A(e)&&(e=t.$(e));var n=this.spawn(),r=this.spawn(),i=this.spawn(),a=e,o=function(e,t,n){for(var r=0;r<e.length;r++){var a=e[r],o=a._private.data.id;t.hasElementWithId(o)?i.merge(a):n.push(a)}};return o(this,a,n),o(a,this,r),{left:n,right:r,both:i}},add:function(e){var t=this._private.cy;if(!e)return this;if(A(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=this.spawnSelf(),i=0;i<e.length;i++){var a=e[i],o=!this.has(a);o&&r.push(a)}return r},merge:function(e){var t=this._private,n=t.cy;if(!e)return this;if(e&&A(e)){var r=e;e=n.mutableElements().filter(r)}for(var i=t.map,a=0;a<e.length;a++){var o=e[a],s=o._private.data.id;if(!i.has(s)){var l=this.length++;this[l]=o,i.set(s,{ele:o,index:l})}}return this},unmergeAt:function(e){var t=this[e].id(),n=this._private.map;this[e]=void 0,n.delete(t);var r=e===this.length-1;if(this.length>1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&A(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r<e.length;r++)this.unmergeOne(e[r]);return this},unmergeBy:function(e){for(var t=this.length-1;t>=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,i=0;i<r.length;i++){var a=r[i],o=t?e.apply(t,[a,i,r]):e(a,i,r);n.push(o)}return n},reduce:function(e,t){for(var n=t,r=this,i=0;i<r.length;i++)n=e(n,r[i],i,r);return n},max:function(e,t){for(var n,r=-1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>r&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s<r&&(r=s,n=o)}return{value:r,ele:n}}},Qi=Zi;Qi.u=Qi["|"]=Qi["+"]=Qi.union=Qi.or=Qi.add,Qi["\\"]=Qi["!"]=Qi["-"]=Qi.difference=Qi.relativeComplement=Qi.subtract=Qi.not,Qi.n=Qi["&"]=Qi["."]=Qi.and=Qi.intersection=Qi.intersect,Qi["^"]=Qi["(+)"]=Qi["(-)"]=Qi.symmetricDifference=Qi.symdiff=Qi.xor,Qi.fnFilter=Qi.filterFn=Qi.stdFilter=Qi.filter,Qi.complement=Qi.abscomp=Qi.absoluteComplement;var Ji=function(e,t){var n=e.cy().hasCompoundNodes();function r(e){var t=e.pstyle("z-compound-depth");return"auto"===t.value?n?e.zDepth():0:"bottom"===t.value?-1:"top"===t.value?we:0}var i=r(e)-r(t);if(0!==i)return i;function a(e){return"auto"===e.pstyle("z-index-compare").value&&e.isNode()?1:0}var o=a(e)-a(t);if(0!==o)return o;var s=e.pstyle("z-index").value-t.pstyle("z-index").value;return 0!==s?s:e.poolIndex()-t.poolIndex()},ea={forEach:function(e,t){if(L(e))for(var n=this.length,r=0;r<n;r++){var i=this[r];if(!1===(t?e.apply(t,[i,r,this]):e(i,r,this)))break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var n=[],r=this.length;null==t&&(t=r),null==e&&(e=0),e<0&&(e=r+e),t<0&&(t=r+t);for(var i=e;i>=0&&i<t&&i<r;i++)n.push(this[i]);return this.spawn(n)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!L(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(Ji)},zDepth:function(){var e=this[0];if(e){var t=e._private;if("nodes"===t.group){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:we-1}var r=t.source,i=t.target,a=r.zDepth(),o=i.zDepth();return Math.max(a,o,0)}}};ea.each=ea.forEach;var ta;ta="undefined",("undefined"==typeof Symbol?"undefined":g(Symbol))!=ta&&g(Symbol.iterator)!=ta&&(ea[Symbol.iterator]=function(){var e=this,t={value:void 0,done:!1},n=0,r=this.length;return m({next:function(){return n<r?t.value=e[n++]:(t.value=void 0,t.done=!0),t}},Symbol.iterator,(function(){return this}))});var na=Me({nodeDimensionsIncludeLabels:!1}),ra={layoutDimensions:function(e){var t;if(e=na(e),this.takesUpSpace())if(e.nodeDimensionsIncludeLabels){var n=this.boundingBox();t={w:n.w,h:n.h}}else t={w:this.outerWidth(),h:this.outerHeight()};else t={w:0,h:0};return 0!==t.w&&0!==t.h||(t.w=t.h=1),t},layoutPositions:function(e,t,n){var r=this.nodes().filter((function(e){return!e.isParent()})),i=this.cy(),a=t.eles,o=function(e){return e.id()},s=Y(n,o);e.emit({type:"layoutstart",layout:e}),e.animations=[];var l=t.spacingFactor&&1!==t.spacingFactor,u=function(){if(!l)return null;for(var e=ft(),t=0;t<r.length;t++){var n=r[t],i=s(n,t);yt(e,i.x,i.y)}return e}(),c=Y((function(e,n){var r=s(e,n);l&&(r=function(e,t,n){var r=t.x1+t.w/2,i=t.y1+t.h/2;return{x:r+(n.x-r)*e,y:i+(n.y-i)*e}}(Math.abs(t.spacingFactor),u,r));return null!=t.transform&&(r=t.transform(e,r)),r}),o);if(t.animate){for(var h=0;h<r.length;h++){var d=r[h],p=c(d,h);if(null==t.animateFilter||t.animateFilter(d,h)){var g=d.animation({position:p,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(g)}else d.position(p)}if(t.fit){var f=i.animation({fit:{boundingBox:a.boundingBoxAt(c),padding:t.padding},duration:t.animationDuration,easing:t.animationEasing});e.animations.push(f)}else if(void 0!==t.zoom&&void 0!==t.pan){var v=i.animation({zoom:t.zoom,pan:t.pan,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(v)}e.animations.forEach((function(e){return e.play()})),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),rr.all(e.animations.map((function(e){return e.promise()}))).then((function(){e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e})}))}else r.positions(c),t.fit&&i.fit(t.eles,t.padding),null!=t.zoom&&i.zoom(t.zoom),t.pan&&i.pan(t.pan),e.one("layoutready",t.ready),e.emit({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.emit({type:"layoutstop",layout:e});return this},layout:function(e){return this.cy().makeLayout(Q({},e,{eles:this}))}};function ia(e,t,n){var r,i=n._private,a=i.styleCache=i.styleCache||[];return null!=(r=a[e])?r:r=a[e]=t(n)}function aa(e,t){return e=fe(e),function(n){return ia(e,t,n)}}function oa(e,t){e=fe(e);var n=function(e){return t.call(e)};return function(){var t=this[0];if(t)return ia(e,n,t)}}ra.createLayout=ra.makeLayout=ra.layout;var sa={recalculateRenderedStyle:function(e){var t=this.cy(),n=t.renderer(),r=t.styleEnabled();return n&&r&&n.recalculateRenderedStyle(this,e),this},dirtyStyleCache:function(){var e,t=this.cy(),n=function(e){return e._private.styleCache=null};t.hasCompoundNodes()?((e=this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(e.connectedEdges()),e.forEach(n)):this.forEach((function(e){n(e),e.connectedEdges().forEach(n)}));return this},updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t.batching())return t._private.batchStyleEles.merge(this),this;var n=this;e=!(!e&&void 0!==e),t.hasCompoundNodes()&&(n=this.spawnSelf().merge(this.descendants()).merge(this.parents()));var r=n;return e?r.emitAndNotify("style"):r.emit("style"),n.forEach((function(e){return e._private.styleDirty=!0})),this},cleanStyle:function(){var e=this.cy();if(e.styleEnabled())for(var t=0;t<this.length;t++){var n=this[t];n._private.styleDirty&&(n._private.styleDirty=!1,e.style().apply(n))}},parsedStyle:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=n.style();if(S(e)){var i=e;r.applyBypass(this,i,false),this.emitAndNotify("style")}else if(A(e)){if(void 0===t){var a=this[0];return a?r.getStylePropertyValue(a,e):void 0}r.applyBypass(this,e,t,false),this.emitAndNotify("style")}else if(void 0===e){var o=this[0];return o?r.getRawStyle(o):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=t.style(),r=this;if(void 0===e)for(var i=0;i<r.length;i++){var a=r[i];n.removeAllBypasses(a,false)}else{e=e.split(/\s+/);for(var o=0;o<r.length;o++){var s=r[o];n.removeBypasses(s,e,false)}}return this.emitAndNotify("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),n=this[0];if(n){var r=n._private,i=n.pstyle("opacity").value;if(!t)return i;var a=r.data.parent?n.parents():null;if(a)for(var o=0;o<a.length;o++){i*=a[o].pstyle("opacity").value}return i}},transparent:function(){if(!this.cy().styleEnabled())return!1;var e=this[0],t=e.cy().hasCompoundNodes();return e?t?0===e.effectiveOpacity():0===e.pstyle("opacity").value:void 0},backgrounding:function(){return!!this.cy().styleEnabled()&&!!this[0]._private.backgrounding}};function la(e,t){var n=e._private.data.parent?e.parents():null;if(n)for(var r=0;r<n.length;r++){if(!t(n[r]))return!1}return!0}function ua(e){var t=e.ok,n=e.edgeOkViaNode||e.ok,r=e.parentOk||e.ok;return function(){var e=this.cy();if(!e.styleEnabled())return!0;var i=this[0],a=e.hasCompoundNodes();if(i){var o=i._private;if(!t(i))return!1;if(i.isNode())return!a||la(i,r);var s=o.source,l=o.target;return n(s)&&(!a||la(s,n))&&(s===l||n(l)&&(!a||la(l,n)))}}}var ca=aa("eleTakesUpSpace",(function(e){return"element"===e.pstyle("display").value&&0!==e.width()&&(!e.isNode()||0!==e.height())}));sa.takesUpSpace=oa("takesUpSpace",ua({ok:ca}));var ha=aa("eleInteractive",(function(e){return"yes"===e.pstyle("events").value&&"visible"===e.pstyle("visibility").value&&ca(e)})),da=aa("parentInteractive",(function(e){return"visible"===e.pstyle("visibility").value&&ca(e)}));sa.interactive=oa("interactive",ua({ok:ha,parentOk:da,edgeOkViaNode:ca})),sa.noninteractive=function(){var e=this[0];if(e)return!e.interactive()};var pa=aa("eleVisible",(function(e){return"visible"===e.pstyle("visibility").value&&0!==e.pstyle("opacity").pfValue&&ca(e)})),ga=ca;sa.visible=oa("visible",ua({ok:pa,edgeOkViaNode:ga})),sa.hidden=function(){var e=this[0];if(e)return!e.visible()},sa.isBundledBezier=oa("isBundledBezier",(function(){return!!this.cy().styleEnabled()&&(!this.removed()&&"bezier"===this.pstyle("curve-style").value&&this.takesUpSpace())})),sa.bypass=sa.css=sa.style,sa.renderedCss=sa.renderedStyle,sa.removeBypass=sa.removeCss=sa.removeStyle,sa.pstyle=sa.parsedStyle;var fa={};function va(e){return function(){var t=arguments,n=[];if(2===t.length){var r=t[0],i=t[1];this.on(e.event,r,i)}else if(1===t.length&&L(t[0])){var a=t[0];this.on(e.event,a)}else if(0===t.length||1===t.length&&k(t[0])){for(var o=1===t.length?t[0]:null,s=0;s<this.length;s++){var l=this[s],u=!e.ableField||l._private[e.ableField],c=l._private[e.field]!=e.value;if(e.overrideAble){var h=e.overrideAble(l);if(void 0!==h&&(u=h,!h))return this}u&&(l._private[e.field]=e.value,c&&n.push(l))}var d=this.spawn(n);d.updateStyle(),d.emit(e.event),o&&d.emit(o)}return this}}function ya(e){fa[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var n=e.overrideField(t);if(void 0!==n)return n}return t._private[e.field]}},fa[e.on]=va({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),fa[e.off]=va({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}ya({field:"locked",overrideField:function(e){return!!e.cy().autolock()||void 0},on:"lock",off:"unlock"}),ya({field:"grabbable",overrideField:function(e){return!e.cy().autoungrabify()&&!e.pannable()&&void 0},on:"grabify",off:"ungrabify"}),ya({field:"selected",ableField:"selectable",overrideAble:function(e){return!e.cy().autounselectify()&&void 0},on:"select",off:"unselect"}),ya({field:"selectable",overrideField:function(e){return!e.cy().autounselectify()&&void 0},on:"selectify",off:"unselectify"}),fa.deselect=fa.unselect,fa.grabbed=function(){var e=this[0];if(e)return e._private.grabbed},ya({field:"active",on:"activate",off:"unactivate"}),ya({field:"pannable",on:"panify",off:"unpanify"}),fa.inactive=function(){var e=this[0];if(e)return!e._private.active};var ma={},ba=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode()){for(var a=!1,o=i.connectedEdges(),s=0;s<o.length;s++){var l=o[s],u=l.source(),c=l.target();if(e.noIncomingEdges&&c===i&&u!==i||e.noOutgoingEdges&&u===i&&c!==i){a=!0;break}}a||n.push(i)}}return this.spawn(n,!0).filter(t)}},xa=function(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r];if(i.isNode())for(var a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target();e.outgoing&&l===i?(n.push(s),n.push(u)):e.incoming&&u===i&&(n.push(s),n.push(l))}}return this.spawn(n,!0).filter(t)}},wa=function(e){return function(t){for(var n=this,r=[],i={};;){var a=e.outgoing?n.outgoers():n.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var l=a[s],u=l.id();i[u]||(i[u]=!0,r.push(l),o=!0)}if(!o)break;n=a}return this.spawn(r,!0).filter(t)}};function Ea(e){return function(t){for(var n=[],r=0;r<this.length;r++){var i=this[r]._private[e.attr];i&&n.push(i)}return this.spawn(n,!0).filter(t)}}function _a(e){return function(t){var n=[],r=this._private.cy,i=e||{};A(t)&&(t=r.$(t));for(var a=0;a<t.length;a++)for(var o=t[a]._private.edges,s=0;s<o.length;s++){var l=o[s],u=l._private.data,c=this.hasElementWithId(u.source)&&t.hasElementWithId(u.target),h=t.hasElementWithId(u.source)&&this.hasElementWithId(u.target);if(c||h){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!c)continue;if(i.thisIsTgt&&!h)continue}n.push(l)}}return this.spawn(n,!0)}}function Ta(e){return e=Q({},{codirected:!1},e),function(t){for(var n=[],r=this.edges(),i=e,a=0;a<r.length;a++)for(var o=r[a]._private,s=o.source,l=s._private.data.id,u=o.data.target,c=s._private.edges,h=0;h<c.length;h++){var d=c[h],p=d._private.data,g=p.target,f=p.source,v=g===u&&f===l,y=l===g&&u===f;(i.codirected&&v||!i.codirected&&(v||y))&&n.push(d)}return this.spawn(n,!0).filter(t)}}ma.clearTraversalCache=function(){for(var e=0;e<this.length;e++)this[e]._private.traversalCache=null},Q(ma,{roots:ba({noIncomingEdges:!0}),leaves:ba({noOutgoingEdges:!0}),outgoers:Qr(xa({outgoing:!0}),"outgoers"),successors:wa({outgoing:!0}),incomers:Qr(xa({incoming:!0}),"incomers"),predecessors:wa({incoming:!0})}),Q(ma,{neighborhood:Qr((function(e){for(var t=[],n=this.nodes(),r=0;r<n.length;r++)for(var i=n[r],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target(),c=i===l?u:l;c.length>0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),ma.neighbourhood=ma.neighborhood,ma.closedNeighbourhood=ma.closedNeighborhood,ma.openNeighbourhood=ma.openNeighborhood,Q(ma,{source:Qr((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:Qr((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:Ea({attr:"source"}),targets:Ea({attr:"target"})}),Q(ma,{edgesWith:Qr(_a(),"edgesWith"),edgesTo:Qr(_a({thisIsSrc:!0}),"edgesTo")}),Q(ma,{connectedEdges:Qr((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];if(r.isNode())for(var i=r._private.edges,a=0;a<i.length;a++){var o=i[a];t.push(o)}}return this.spawn(t,!0).filter(e)}),"connectedEdges"),connectedNodes:Qr((function(e){for(var t=[],n=0;n<this.length;n++){var r=this[n];r.isEdge()&&(t.push(r.source()[0]),t.push(r.target()[0]))}return this.spawn(t,!0).filter(e)}),"connectedNodes"),parallelEdges:Qr(Ta(),"parallelEdges"),codirectedEdges:Qr(Ta({codirected:!0}),"codirectedEdges")}),Q(ma,{components:function(e){var t=this,n=t.cy(),r=n.collection(),i=null==e?t.nodes():e.nodes(),a=[];null!=e&&i.empty()&&(i=e.sources());var o=function(e,t){r.merge(e),i.unmerge(e),t.merge(e)};if(i.empty())return t.spawn();var s=function(){var e=n.collection();a.push(e);var r=i[0];o(r,e),t.bfs({directed:!1,roots:r,visit:function(t){return o(t,e)}}),e.forEach((function(n){n.connectedEdges().forEach((function(n){t.has(n)&&e.has(n.source())&&e.has(n.target())&&e.merge(n)}))}))};do{s()}while(i.length>0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),ma.componentsOf=ma.components;var Da=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new Fe,a=!1;if(t){if(t.length>0&&S(t[0])&&!P(t[0])){a=!0;for(var o=[],s=new Ge,l=0,u=t.length;l<u;l++){var c=t[l];null==c.data&&(c.data={});var h=c.data;if(null==h.id)h.id=ke();else if(e.hasElementWithId(h.id)||s.has(h.id))continue;var d=new Ye(e,c,!1);o.push(d),s.add(h.id)}t=o}}else t=[];this.length=0;for(var p=0,g=t.length;p<g;p++){var f=t[p][0];if(null!=f){var v=f._private.data.id;n&&i.has(v)||(n&&i.set(v,{index:this.length,ele:f}),this[this.length]=f,this.length++)}}this._private={eles:this,cy:e,get map(){return null==this.lazyMap&&this.rebuildMap(),this.lazyMap},set map(e){this.lazyMap=e},rebuildMap:function(){for(var e=this.lazyMap=new Fe,t=this.eles,n=0;n<t.length;n++){var r=t[n];e.set(r.id(),{index:n,ele:r})}}},n&&(this._private.map=i),a&&!r&&this.restore()}else Ce("A collection must have a reference to the core")},Ca=Ye.prototype=Da.prototype=Object.create(Array.prototype);Ca.instanceString=function(){return"collection"},Ca.spawn=function(e,t){return new Da(this.cy(),e,t)},Ca.spawnSelf=function(){return this.spawn(this)},Ca.cy=function(){return this._private.cy},Ca.renderer=function(){return this._private.cy.renderer()},Ca.element=function(){return this[0]},Ca.collection=function(){return R(this)?this:new Da(this._private.cy,[this])},Ca.unique=function(){return new Da(this._private.cy,this,!0)},Ca.hasElementWithId=function(e){return e=""+e,this._private.map.has(e)},Ca.getElementById=function(e){e=""+e;var t=this._private.cy,n=this._private.map.get(e);return n?n.ele:new Da(t)},Ca.$id=Ca.getElementById,Ca.poolIndex=function(){var e=this._private.cy._private.elements,t=this[0]._private.data.id;return e._private.map.get(t).index},Ca.indexOf=function(e){var t=e[0]._private.data.id;return this._private.map.get(t).index},Ca.indexOfId=function(e){return e=""+e,this._private.map.get(e).index},Ca.json=function(e){var t=this.element(),n=this.cy();if(null==t&&e)return this;if(null!=t){var r=t._private;if(S(e)){if(n.startBatch(),e.data){t.data(e.data);var i=r.data;if(t.isEdge()){var a=!1,o={},s=e.data.source,l=e.data.target;null!=s&&s!=i.source&&(o.source=""+s,a=!0),null!=l&&l!=i.target&&(o.target=""+l,a=!0),a&&(t=t.move(o))}else{var u="parent"in e.data,c=e.data.parent;!u||null==c&&null==i.parent||c==i.parent||(void 0===c&&(c=null),null!=c&&(c=""+c),t=t.move({parent:c}))}}e.position&&t.position(e.position);var h=function(n,i,a){var o=e[n];null!=o&&o!==r[n]&&(o?t[i]():t[a]())};return h("removed","remove","restore"),h("selected","select","unselect"),h("selectable","selectify","unselectify"),h("locked","lock","unlock"),h("grabbable","grabify","ungrabify"),h("pannable","panify","unpanify"),null!=e.classes&&t.classes(e.classes),n.endBatch(),this}if(void 0===e){var d={data:Le(r.data),position:Le(r.position),group:r.group,removed:r.removed,selected:r.selected,selectable:r.selectable,locked:r.locked,grabbable:r.grabbable,pannable:r.pannable,classes:null};d.classes="";var p=0;return r.classes.forEach((function(e){return d.classes+=0==p++?e:" "+e})),d}}},Ca.jsons=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t].json();e.push(n)}return e},Ca.clone=function(){for(var e=this.cy(),t=[],n=0;n<this.length;n++){var r=this[n].json(),i=new Ye(e,r,!1);t.push(i)}return new Da(e,t)},Ca.copy=Ca.clone,Ca.restore=function(){for(var e,t,n=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],l=[],u=0,c=i.length;u<c;u++){var h=i[u];r&&!h.removed()||(h.isNode()?s.push(h):l.push(h))}e=s.concat(l);var d=function(){e.splice(t,1),t--};for(t=0;t<e.length;t++){var p=e[t],g=p._private,f=g.data;if(p.clearTraversalCache(),r||g.removed)if(void 0===f.id)f.id=ke();else if(I(f.id))f.id=""+f.id;else{if(z(f.id)||!A(f.id)){Ce("Can not create element with invalid string ID `"+f.id+"`"),d();continue}if(a.hasElementWithId(f.id)){Ce("Can not create second element with ID `"+f.id+"`"),d();continue}}else;var v=f.id;if(p.isNode()){var y=g.position;null==y.x&&(y.x=0),null==y.y&&(y.y=0)}if(p.isEdge()){for(var m=p,b=["source","target"],x=b.length,w=!1,E=0;E<x;E++){var _=b[E],T=f[_];I(T)&&(T=f[_]=""+f[_]),null==T||""===T?(Ce("Can not create edge `"+v+"` with unspecified "+_),w=!0):a.hasElementWithId(T)||(Ce("Can not create edge `"+v+"` with nonexistant "+_+" `"+T+"`"),w=!0)}if(w){d();continue}var D=a.getElementById(f.source),C=a.getElementById(f.target);D.same(C)?D._private.edges.push(m):(D._private.edges.push(m),C._private.edges.push(m)),m._private.source=D,m._private.target=C}g.map=new Fe,g.map.set(v,{ele:p,index:0}),g.removed=!1,r&&a.addToPool(p)}for(var N=0;N<s.length;N++){var L=s[N],k=L._private.data;I(k.parent)&&(k.parent=""+k.parent);var S=k.parent;if(null!=S||L._private.parent){var M=L._private.parent?a.collection().merge(L._private.parent):a.getElementById(S);if(M.empty())k.parent=void 0;else if(M[0].removed())Ae("Node added with missing parent, reference to parent removed"),k.parent=void 0,L._private.parent=null;else{for(var O=!1,P=M;!P.empty();){if(L.same(P)){O=!0,k.parent=void 0;break}P=P.parent()}O||(M[0]._private.children.push(L),L._private.parent=M[0],o.hasCompoundNodes=!0)}}}if(e.length>0){for(var R=e.length===i.length?i:new Da(a,e),B=0;B<R.length;B++){var F=R[B];F.isNode()||(F.parallelEdges().clearTraversalCache(),F.source().clearTraversalCache(),F.target().clearTraversalCache())}(o.hasCompoundNodes?a.collection().merge(R).merge(R.connectedNodes()).merge(R.parent()):R).dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(n),n?R.emitAndNotify("add"):r&&R.emit("add")}return i},Ca.removed=function(){var e=this[0];return e&&e._private.removed},Ca.inside=function(){var e=this[0];return e&&!e._private.removed},Ca.remove=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){var n=i[e.id()];t&&e.removed()||n||(i[e.id()]=!0,e.isNode()?(r.push(e),function(e){for(var t=e._private.edges,n=0;n<t.length;n++)o(t[n])}(e),function(e){for(var t=e._private.children,n=0;n<t.length;n++)o(t[n])}(e)):r.unshift(e))}for(var s=0,l=n.length;s<l;s++){o(n[s])}function u(e,t){var n=e._private.edges;Oe(n,t),e.clearTraversalCache()}function c(e){e.clearTraversalCache()}var h=[];function d(e,t){t=t[0];var n=(e=e[0])._private.children,r=e.id();Oe(n,t),t._private.parent=null,h.ids[r]||(h.ids[r]=!0,h.push(e))}h.ids={},n.dirtyCompoundBoundsCache(),t&&a.removeFromPool(r);for(var p=0;p<r.length;p++){var g=r[p];if(g.isEdge()){var f=g.source()[0],v=g.target()[0];u(f,g),u(v,g);for(var y=g.parallelEdges(),m=0;m<y.length;m++){var b=y[m];c(b),b.isBundledBezier()&&b.dirtyBoundingBoxCache()}}else{var x=g.parent();0!==x.length&&d(x,g)}t&&(g._private.removed=!0)}var w=a._private.elements;a._private.hasCompoundNodes=!1;for(var E=0;E<w.length;E++){if(w[E].isParent()){a._private.hasCompoundNodes=!0;break}}var _=new Da(this.cy(),r);_.size()>0&&(e?_.emitAndNotify("remove"):t&&_.emit("remove"));for(var T=0;T<h.length;T++){var D=h[T];t&&D.removed()||D.updateStyle()}return _},Ca.move=function(e){var t=this._private.cy,n=this,r=!1,i=!1,a=function(e){return null==e?e:""+e};if(void 0!==e.source||void 0!==e.target){var o=a(e.source),s=a(e.target),l=null!=o&&t.hasElementWithId(o),u=null!=s&&t.hasElementWithId(s);(l||u)&&(t.batch((function(){n.remove(r,i),n.emitAndNotify("moveout");for(var e=0;e<n.length;e++){var t=n[e],a=t._private.data;t.isEdge()&&(l&&(a.source=o),u&&(a.target=s))}n.restore(r,i)})),n.emitAndNotify("move"))}else if(void 0!==e.parent){var c=a(e.parent);if(null===c||t.hasElementWithId(c)){var h=null===c?void 0:c;t.batch((function(){var e=n.remove(r,i);e.emitAndNotify("moveout");for(var t=0;t<n.length;t++){var a=n[t],o=a._private.data;a.isNode()&&(o.parent=h)}e.restore(r,i)})),n.emitAndNotify("move")}}return this},[Kn,cr,hr,$r,Jr,oi,si,Pi,Ki,Zi,{isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source()[0]===this.target()[0]},isSimple:function(){return this.isEdge()&&this.source()[0]!==this.target()[0]},group:function(){var e=this[0];if(e)return e._private.group}},ea,ra,sa,fa,ma].forEach((function(e){Q(Ca,e)}));var Na={add:function(e){var t,n=this;if(O(e)){var r=e;if(r._private.cy===n)t=r.restore();else{for(var i=[],a=0;a<r.length;a++){var o=r[a];i.push(o.json())}t=new Da(n,i)}}else if(k(e)){t=new Da(n,e)}else if(S(e)&&(k(e.nodes)||k(e.edges))){for(var s=e,l=[],u=["nodes","edges"],c=0,h=u.length;c<h;c++){var d=u[c],p=s[d];if(k(p))for(var g=0,f=p.length;g<f;g++){var v=Q({group:d},p[g]);l.push(v)}}t=new Da(n,l)}else{t=new Ye(n,e).collection()}return t},remove:function(e){if(O(e));else if(A(e)){var t=e;e=this.$(t)}return e.remove()}};function Aa(e,t,n,r){var i=4,a=1e-7,o=10,s=11,l=1/(s-1),u="undefined"!=typeof Float32Array;if(4!==arguments.length)return!1;for(var c=0;c<4;++c)if("number"!=typeof arguments[c]||isNaN(arguments[c])||!isFinite(arguments[c]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var h=u?new Float32Array(s):new Array(s);function d(e,t){return 1-3*t+3*e}function p(e,t){return 3*t-6*e}function g(e){return 3*e}function f(e,t,n){return((d(t,n)*e+p(t,n))*e+g(t))*e}function v(e,t,n){return 3*d(t,n)*e*e+2*p(t,n)*e+g(t)}function y(t){for(var r=0,u=1,c=s-1;u!==c&&h[u]<=t;++u)r+=l;--u;var d=r+(t-h[u])/(h[u+1]-h[u])*l,p=v(d,e,n);return p>=.001?function(t,r){for(var a=0;a<i;++a){var o=v(r,e,n);if(0===o)return r;r-=(f(r,e,n)-t)/o}return r}(t,d):0===p?d:function(t,r,i){var s,l,u=0;do{(s=f(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(s)>a&&++u<o);return l}(t,r,r+l)}var m=!1;function b(){m=!0,e===t&&n===r||function(){for(var t=0;t<s;++t)h[t]=f(t*l,e,n)}()}var x=function(i){return m||b(),e===t&&n===r?i:0===i?0:1===i?1:f(y(i),t,r)};x.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var w="generateBezier("+[e,t,n,r]+")";return x.toString=function(){return w},x}var La=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var i={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function n(n,r){var i={dx:n.v,dv:e(n)},a=t(n,.5*r,i),o=t(n,.5*r,a),s=t(n,r,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,h=1e-4;for(t=parseFloat(t)||500,r=parseFloat(r)||20,i=i||null,l.tension=t,l.friction=r,o=(a=null!==i)?(c=e(t,r))/i*.016:.016;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>h&&Math.abs(s.v)>h;);return a?function(e){return u[e*(u.length-1)|0]}:c}}(),ka=function(e,t,n,r){var i=Aa(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Sa={linear:function(e,t,n){return e+(t-e)*n},ease:ka(.25,.1,.25,1),"ease-in":ka(.42,0,1,1),"ease-out":ka(0,0,.58,1),"ease-in-out":ka(.42,0,.58,1),"ease-in-sine":ka(.47,0,.745,.715),"ease-out-sine":ka(.39,.575,.565,1),"ease-in-out-sine":ka(.445,.05,.55,.95),"ease-in-quad":ka(.55,.085,.68,.53),"ease-out-quad":ka(.25,.46,.45,.94),"ease-in-out-quad":ka(.455,.03,.515,.955),"ease-in-cubic":ka(.55,.055,.675,.19),"ease-out-cubic":ka(.215,.61,.355,1),"ease-in-out-cubic":ka(.645,.045,.355,1),"ease-in-quart":ka(.895,.03,.685,.22),"ease-out-quart":ka(.165,.84,.44,1),"ease-in-out-quart":ka(.77,0,.175,1),"ease-in-quint":ka(.755,.05,.855,.06),"ease-out-quint":ka(.23,1,.32,1),"ease-in-out-quint":ka(.86,0,.07,1),"ease-in-expo":ka(.95,.05,.795,.035),"ease-out-expo":ka(.19,1,.22,1),"ease-in-out-expo":ka(1,0,0,1),"ease-in-circ":ka(.6,.04,.98,.335),"ease-out-circ":ka(.075,.82,.165,1),"ease-in-out-circ":ka(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Sa.linear;var r=La(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":ka};function Ia(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function Ma(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Oa(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=Ma(e,i),s=Ma(t,i);if(I(o)&&I(s))return Ia(a,o,s,n,r);if(k(o)&&k(s)){for(var l=[],u=0;u<s.length;u++){var c=o[u],h=s[u];if(null!=c&&null!=h){var d=Ia(a,c,h,n,r);l.push(d)}else l.push(h)}return l}}function Pa(e,t,n,r){var i=!r,a=e._private,o=t._private,s=o.easing,l=o.startTime,u=(r?e:e.cy()).style();if(!o.easingImpl)if(null==s)o.easingImpl=Sa.linear;else{var c,h,d;if(A(s))c=u.parse("transition-timing-function",s).value;else c=s;A(c)?(h=c,d=[]):(h=c[1],d=c.slice(2).map((function(e){return+e}))),d.length>0?("spring"===h&&d.push(o.duration),o.easingImpl=Sa[h].apply(null,d)):o.easingImpl=Sa[h]}var p,g=o.easingImpl;if(p=0===o.duration?1:(n-l)/o.duration,o.applying&&(p=o.progress),p<0?p=0:p>1&&(p=1),null==o.delay){var f=o.startPosition,v=o.position;if(v&&i&&!e.locked()){var y={};Ra(f.x,v.x)&&(y.x=Oa(f.x,v.x,p,g)),Ra(f.y,v.y)&&(y.y=Oa(f.y,v.y,p,g)),e.position(y)}var m=o.startPan,b=o.pan,x=a.pan,w=null!=b&&r;w&&(Ra(m.x,b.x)&&(x.x=Oa(m.x,b.x,p,g)),Ra(m.y,b.y)&&(x.y=Oa(m.y,b.y,p,g)),e.emit("pan"));var E=o.startZoom,_=o.zoom,T=null!=_&&r;T&&(Ra(E,_)&&(a.zoom=gt(a.minZoom,Oa(E,_,p,g),a.maxZoom)),e.emit("zoom")),(w||T)&&e.emit("viewport");var D=o.style;if(D&&D.length>0&&i){for(var C=0;C<D.length;C++){var N=D[C],L=N.name,k=N,S=o.startStyle[L],I=Oa(S,k,p,g,u.properties[S.name]);u.overrideBypass(e,L,I)}e.emit("style")}}return o.progress=p,p}function Ra(e,t){return null!=e&&null!=t&&(!(!I(e)||!I(t))||!(!e||!t))}function Ba(e,t,n,r){var i=t._private;i.started=!0,i.startTime=n-i.progress*i.duration}function Fa(e,t){var n=t._private.aniEles,r=[];function i(t,n){var i=t._private,a=i.animation.current,o=i.animation.queue,s=!1;if(0===a.length){var l=o.shift();l&&a.push(l)}for(var u=function(e){for(var t=e.length-1;t>=0;t--){(0,e[t])()}e.splice(0,e.length)},c=a.length-1;c>=0;c--){var h=a[c],d=h._private;d.stopped?(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.frames)):(d.playing||d.applying)&&(d.playing&&d.applying&&(d.applying=!1),d.started||Ba(0,h,e),Pa(t,h,e,n),d.applying&&(d.applying=!1),u(d.frames),null!=d.step&&d.step(e),h.completed()&&(a.splice(c,1),d.hooked=!1,d.playing=!1,d.started=!1,u(d.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o<n.length;o++){var s=i(n[o]);a=a||s}var l=i(t,!0);(a||l)&&(n.length>0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var za={animate:ur.animate(),animation:ur.animation(),animated:ur.animated(),clearQueue:ur.clearQueue(),delay:ur.delay(),delayAnimation:ur.delayAnimation(),stop:ur.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Fa(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&oe((function(n){Fa(n,e),t()}))}()}}},Ga={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&P(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},Ya=function(e){return A(e)?new Hr(e):e},Xa={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Vi(Ga,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Ya(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Ya(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Ya(t),n),this},once:function(e,t,n){return this.emitter().one(e,Ya(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};ur.eventAliasesOn(Xa);var Va={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};Va.jpeg=Va.jpg;var Ua={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=A(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(Q({},e,{cy:t,eles:i}));return a}Ce("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Ce("A `name` must be specified to make a layout");else Ce("Layout options must be specified to make a layout")}};Ua.createLayout=Ua.makeLayout=Ua.layout;var ja={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],a=e[i];t.getElementById(i).data(a)}}))}},qa=Me({hideEdgesOnViewport:!1,textureOnViewport:!1,motionBlur:!1,motionBlurOpacity:.05,pixelRatio:void 0,desktopTapThreshold:4,touchTapThreshold:8,wheelSensitivity:1,debug:!1,showFps:!1}),Ha={renderTo:function(e,t,n,r){return this._private.renderer.renderTo(e,t,n,r),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify("draw"),this},resize:function(){return this.invalidateSize(),this.emitAndNotify("resize"),this},initRenderer:function(e){var t=this,n=t.extension("renderer",e.name);if(null!=n){void 0!==e.wheelSensitivity&&Ae("You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.");var r=qa(e);r.cy=t,t._private.renderer=new n(r),this.notify("init")}else Ce("Can not initialise: No such renderer `".concat(e.name,"` found. Did you forget to import it and `cytoscape.use()` it?"))},destroyRenderer:function(){var e=this;e.notify("destroy");var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Ha.invalidateDimensions=Ha.resize;var Wa={collection:function(e,t){return A(e)?this.$(e):O(e)?e.collection():k(e)?(t||(t={}),new Da(this,e,t.unique,t.removed)):new Da(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};Wa.elements=Wa.filter=Wa.$;var $a={},Ka="t";$a.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r<e.length;r++){var i=e[r],a=t.getContextMeta(i);if(!a.empty){var o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);i._private.appliedInitStyle?t.updateTransitions(i,s.diffProps):i._private.appliedInitStyle=!0,t.updateStyleHints(i)&&n.push(i)}}return n},$a.getPropertiesDiff=function(e,t){var n=this,r=n._private.propDiffs=n._private.propDiffs||{},i=e+"-"+t,a=r[i];if(a)return a;for(var o=[],s={},l=0;l<n.length;l++){var u=n[l],c=e[l]===Ka,h=t[l]===Ka,d=c!==h,p=u.mappedProperties.length>0;if(d||h&&p){var g=void 0;d&&p||d?g=u.properties:p&&(g=u.mappedProperties);for(var f=0;f<g.length;f++){for(var v=g[f],y=v.name,m=!1,b=l+1;b<n.length;b++){var x=n[b];if(t[b]===Ka&&(m=null!=x.properties[v.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return r[i]=o,o},$a.getContextMeta=function(e){for(var t,n=this,r="",i=e._private.styleCxtKey||"",a=0;a<n.length;a++){var o=n[a];r+=o.selector&&o.selector.matches(e)?Ka:"f"}return t=n.getPropertiesDiff(i,r),e._private.styleCxtKey=r,{key:r,diffPropNames:t,empty:0===t.length}},$a.getContextStyle=function(e){var t=e.key,n=this._private.contextStyles=this._private.contextStyles||{};if(n[t])return n[t];for(var r={_private:{key:t}},i=0;i<this.length;i++){var a=this[i];if(t[i]===Ka)for(var o=0;o<a.properties.length;o++){var s=a.properties[o];r[s.name]=s}}return n[t]=r,r},$a.applyContextStyle=function(e,t,n){for(var r=e.diffPropNames,i={},a=this.types,o=0;o<r.length;o++){var s=r[o],l=t[s],u=n.pstyle(s);if(!l){if(!u)continue;l=u.bypass?{name:s,deleteBypassed:!0}:{name:s,delete:!0}}if(u!==l){if(l.mapped===a.fn&&null!=u&&null!=u.mapping&&u.mapping.value===l.value){var c=u.mapping;if((c.fnValue=l.value(n))===c.prevFnValue)continue}var h=i[s]={prev:u};this.applyParsedProperty(n,l),h.next=n.pstyle(s),h.next&&h.next.bypass&&(h.next=h.next.bypassed)}}return{diffProps:i}},$a.updateStyleHints=function(e){var t=e._private,n=this,r=n.propertyGroupNames,i=n.propertyGroupKeys,a=function(e,t,r){return n.getPropertiesHash(e,t,r)},o=t.styleKey;if(e.removed())return!1;var s="nodes"===t.group,l=e._private.style;r=Object.keys(l);for(var u=0;u<i.length;u++){var c=i[u];t.styleKeys[c]=[le,ue]}for(var h,d=function(e,n){return t.styleKeys[n][0]=he(e,t.styleKeys[n][0])},p=function(e,n){return t.styleKeys[n][1]=de(e,t.styleKeys[n][1])},g=function(e,t){d(e,t),p(e,t)},f=function(e,t){for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);d(r,t),p(r,t)}},v=0;v<r.length;v++){var y=r[v],m=l[y];if(null!=m){var b=this.properties[y],x=b.type,w=b.groupKey,E=void 0;null!=b.hashOverride?E=b.hashOverride(e,m):null!=m.pfValue&&(E=m.pfValue);var _=null==b.enums?m.value:null,T=null!=E,D=T||null!=_,C=m.units;if(x.number&&D&&!x.multiple)g(-128<(h=T?E:_)&&h<128&&Math.floor(h)!==h?2e9-(1024*h|0):h,w),T||null==C||f(C,w);else f(m.strValue,w)}}for(var N,A,L=[le,ue],k=0;k<i.length;k++){var S=i[k],I=t.styleKeys[S];L[0]=he(I[0],L[0]),L[1]=de(I[1],L[1])}t.styleKey=(N=L[0],A=L[1],2097152*N+A);var M=t.styleKeys;t.labelDimsKey=pe(M.labelDimensions);var O=a(e,["label"],M.labelDimensions);if(t.labelKey=pe(O),t.labelStyleKey=pe(ge(M.commonLabel,O)),!s){var P=a(e,["source-label"],M.labelDimensions);t.sourceLabelKey=pe(P),t.sourceLabelStyleKey=pe(ge(M.commonLabel,P));var R=a(e,["target-label"],M.labelDimensions);t.targetLabelKey=pe(R),t.targetLabelStyleKey=pe(ge(M.commonLabel,R))}if(s){var B=t.styleKeys,F=B.nodeBody,z=B.nodeBorder,G=B.nodeOutline,Y=B.backgroundImage,X=B.compound,V=B.pie,U=[F,z,G,Y,X,V].filter((function(e){return null!=e})).reduce(ge,[le,ue]);t.nodeKey=pe(U),t.hasPie=null!=V&&V[0]!==le&&V[1]!==ue}return o!==t.styleKey},$a.clearStyleHints=function(e){var t=e._private;t.styleCxtKey="",t.styleKeys={},t.styleKey=null,t.labelKey=null,t.labelStyleKey=null,t.sourceLabelKey=null,t.sourceLabelStyleKey=null,t.targetLabelKey=null,t.targetLabelStyleKey=null,t.nodeKey=null,t.hasPie=null},$a.applyParsedProperty=function(e,t){var n,r=this,i=t,a=e._private.style,o=r.types,s=r.properties[i.name].type,l=i.bypass,u=a[i.name],c=u&&u.bypass,h=e._private,d="mapping",p=function(e){return null==e?null:null!=e.pfValue?e.pfValue:e.value},g=function(){var t=p(u),n=p(i);r.checkTriggers(e,i.name,t,n)};if("curve-style"===t.name&&e.isEdge()&&("bezier"!==t.value&&e.isLoop()||"haystack"===t.value&&(e.source().isParent()||e.target().isParent()))&&(i=t=this.parse(t.name,"bezier",l)),i.delete)return a[i.name]=void 0,g(),!0;if(i.deleteBypassed)return u?!!u.bypass&&(u.bypassed=void 0,g(),!0):(g(),!0);if(i.deleteBypass)return u?!!u.bypass&&(a[i.name]=u.bypassed,g(),!0):(g(),!0);var f=function(){Ae("Do not assign mappings to elements without corresponding data (i.e. ele `"+e.id()+"` has no mapping for property `"+i.name+"` with data field `"+i.field+"`); try a `["+i.field+"]` selector to limit scope to elements with `"+i.field+"` defined")};switch(i.mapped){case o.mapData:for(var v,y=i.field.split("."),m=h.data,b=0;b<y.length&&m;b++){m=m[y[b]]}if(null==m)return f(),!1;if(!I(m))return Ae("Do not use continuous mappers without specifying numeric data (i.e. `"+i.field+": "+m+"` for `"+e.id()+"` is non-numeric)"),!1;var x=i.fieldMax-i.fieldMin;if((v=0===x?0:(m-i.fieldMin)/x)<0?v=0:v>1&&(v=1),s.color){var w=i.valueMin[0],E=i.valueMax[0],_=i.valueMin[1],T=i.valueMax[1],D=i.valueMin[2],C=i.valueMax[2],N=null==i.valueMin[3]?1:i.valueMin[3],A=null==i.valueMax[3]?1:i.valueMax[3],L=[Math.round(w+(E-w)*v),Math.round(_+(T-_)*v),Math.round(D+(C-D)*v),Math.round(N+(A-N)*v)];n={bypass:i.bypass,name:i.name,value:L,strValue:"rgb("+L[0]+", "+L[1]+", "+L[2]+")"}}else{if(!s.number)return!1;var k=i.valueMin+(i.valueMax-i.valueMin)*v;n=this.parse(i.name,k,i.bypass,d)}if(!n)return f(),!1;n.mapping=i,i=n;break;case o.data:for(var S=i.field.split("."),M=h.data,O=0;O<S.length&&M;O++){M=M[S[O]]}if(null!=M&&(n=this.parse(i.name,M,i.bypass,d)),!n)return f(),!1;n.mapping=i,i=n;break;case o.fn:var P=i.value,R=null!=i.fnValue?i.fnValue:P(e);if(i.prevFnValue=R,null==R)return Ae("Custom function mappers may not return null (i.e. `"+i.name+"` for ele `"+e.id()+"` is null)"),!1;if(!(n=this.parse(i.name,R,i.bypass,d)))return Ae("Custom function mappers may not return invalid values for the property type (i.e. `"+i.name+"` for ele `"+e.id()+"` is invalid)"),!1;n.mapping=Le(i),i=n;break;case void 0:break;default:return!1}return l?(i.bypassed=c?u.bypassed:u,a[i.name]=i):c?u.bypassed=i:a[i.name]=i,g(),!0},$a.cleanElements=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(this.clearStyleHints(r),r.dirtyCompoundBoundsCache(),r.dirtyBoundingBoxCache(),t)for(var i=r._private.style,a=Object.keys(i),o=0;o<a.length;o++){var s=a[o],l=i[s];null!=l&&(l.bypass?l.bypassed=null:i[s]=null)}else r._private.style={}}},$a.update=function(){this._private.cy.mutableElements().updateStyle()},$a.updateTransitions=function(e,t){var n=this,r=e._private,i=e.pstyle("transition-property").value,a=e.pstyle("transition-duration").pfValue,o=e.pstyle("transition-delay").pfValue;if(i.length>0&&a>0){for(var s={},l=!1,u=0;u<i.length;u++){var c=i[u],h=e.pstyle(c),d=t[c];if(d){var p=d.prev,g=null!=d.next?d.next:h,f=!1,v=void 0,y=1e-6;p&&(I(p.pfValue)&&I(g.pfValue)?(f=g.pfValue-p.pfValue,v=p.pfValue+y*f):I(p.value)&&I(g.value)?(f=g.value-p.value,v=p.value+y*f):k(p.value)&&k(g.value)&&(f=p.value[0]!==g.value[0]||p.value[1]!==g.value[1]||p.value[2]!==g.value[2],v=p.strValue),f&&(s[c]=g.strValue,this.applyBypass(e,c,v),l=!0))}}if(!l)return;r.transitioning=!0,new rr((function(t){o>0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},$a.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},$a.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},$a.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||"curve-style"!==t||"bezier"!==n&&"bezier"!==r||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()})),!i.triggersBoundsOfConnectedEdges||"display"!==t||"none"!==n&&"none"!==r||e.connectedEdges().forEach((function(e){e.dirtyBoundingBoxCache()}))}))},$a.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Za={applyBypass:function(e,t,n,r){var i=[];if("*"===t||"**"===t){if(void 0!==n)for(var a=0;a<this.properties.length;a++){var o=this.properties[a].name,s=this.parse(o,n,!0);s&&i.push(s)}}else if(A(t)){var l=this.parse(t,n,!0);l&&i.push(l)}else{if(!S(t))return!1;var u=t;r=n;for(var c=Object.keys(u),h=0;h<c.length;h++){var d=c[h],p=u[d];if(void 0===p&&(p=u[V(d)]),void 0!==p){var g=this.parse(d,p,!0);g&&i.push(g)}}}if(0===i.length)return!1;for(var f=!1,v=0;v<e.length;v++){for(var y=e[v],m={},b=void 0,x=0;x<i.length;x++){var w=i[x];if(r){var E=y.pstyle(w.name);b=m[w.name]={prev:E}}f=this.applyParsedProperty(y,Le(w))||f,r&&(b.next=y.pstyle(w.name))}f&&this.updateStyleHints(y),r&&this.updateTransitions(y,m,true)}return f},overrideBypass:function(e,t,n){t=X(t);for(var r=0;r<e.length;r++){var i=e[r],a=i._private.style[t],o=this.properties[t].type,s=o.color,l=o.mutiple,u=a?null!=a.pfValue?a.pfValue:a.value:null;a&&a.bypass?(a.value=n,null!=a.pfValue&&(a.pfValue=n),a.strValue=s?"rgb("+n.join(",")+")":l?n.join(" "):""+n,this.updateStyleHints(i)):this.applyBypass(i,t,n),this.checkTriggers(i,t,u,n)}},removeAllBypasses:function(e,t){return this.removeBypasses(e,this.propertyNames,t)},removeBypasses:function(e,t,n){for(var r=0;r<e.length;r++){for(var i=e[r],a={},o=0;o<t.length;o++){var s=t[o],l=this.properties[s],u=i.pstyle(l.name);if(u&&u.bypass){var c=this.parse(s,"",!0),h=a[l.name]={prev:u};this.applyParsedProperty(i,c),h.next=i.pstyle(l.name)}}this.updateStyleHints(i),n&&this.updateTransitions(i,a,true)}}},Qa={getEmSizeInPixels:function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},containerCss:function(e){var t=this._private.cy,n=t.container(),r=t.window();if(r&&n&&r.getComputedStyle)return r.getComputedStyle(n).getPropertyValue(e)}},Ja={getRenderedStyle:function(e,t){return t?this.getStylePropertyValue(e,t,!0):this.getRawStyle(e,!0)},getRawStyle:function(e,t){var n=this;if(e=e[0]){for(var r={},i=0;i<n.properties.length;i++){var a=n.properties[i],o=n.getStylePropertyValue(e,a.name,t);null!=o&&(r[a.name]=o,r[V(a.name)]=o)}return r}},getIndexedStyle:function(e,t,n,r){var i=e.pstyle(t)[n][r];return null!=i?i:e.cy().style().getDefaultProperty(t)[n][0]},getStylePropertyValue:function(e,t,n){if(e=e[0]){var r=this.properties[t];r.alias&&(r=r.pointsTo);var i=r.type,a=e.pstyle(r.name);if(a){var o=a.value,s=a.units,l=a.strValue;if(n&&i.number&&null!=o&&I(o)){var u=e.cy().zoom(),c=function(e){return e*u},h=function(e,t){return c(e)+t},d=k(o);return(d?s.every((function(e){return null!=e})):null!=s)?d?o.map((function(e,t){return h(e,s[t])})).join(" "):h(o,s):d?o.map((function(e){return A(e)?e:""+c(e)})).join(" "):""+c(o)}if(null!=l)return l}return null}},getAnimationStartStyle:function(e,t){for(var n={},r=0;r<t.length;r++){var i=t[r].name,a=e.pstyle(i);void 0!==a&&(a=S(a)?this.parse(i,a.strValue):this.parse(i,a)),a&&(n[i]=a)}return n},getPropsList:function(e){var t=[],n=e,r=this.properties;if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a],s=n[o],l=r[o]||r[X(o)],u=this.parse(l.name,s);u&&t.push(u)}return t},getNonDefaultPropertiesHash:function(e,t,n){var r,i,a,o,s,l,u=n.slice();for(s=0;s<t.length;s++)if(r=t[s],null!=(i=e.pstyle(r,!1)))if(null!=i.pfValue)u[0]=he(o,u[0]),u[1]=de(o,u[1]);else for(a=i.strValue,l=0;l<a.length;l++)o=a.charCodeAt(l),u[0]=he(o,u[0]),u[1]=de(o,u[1]);return u}};Ja.getPropertiesHash=Ja.getNonDefaultPropertiesHash;var eo={appendFromJson:function(e){for(var t=this,n=0;n<e.length;n++){var r=e[n],i=r.selector,a=r.style||r.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var l=o[s],u=a[l];t.css(l,u)}}return t},fromJson:function(e){var t=this;return t.resetToDefault(),t.appendFromJson(e),t},json:function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var n=this[t],r=n.selector,i=n.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:r?r.toString():"core",style:a})}return e}},to={appendFromString:function(e){var t,n,r,i=this,a=""+e;function o(){a=a.length>t.length?a.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(a=a.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(a.match(/^\s*$/))break;var l=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){Ae("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}t=l[0];var u=l[1];if("core"!==u)if(new Hr(u).invalid){Ae("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=l[2],h=!1;n=c;for(var d=[];;){if(n.match(/^\s*$/))break;var p=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!p){Ae("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),h=!0;break}r=p[0];var g=p[1],f=p[2];if(this.properties[g])i.parse(g,f)?(d.push({name:g,val:f}),s()):(Ae("Skipping property: Invalid property definition in: "+r),s());else Ae("Skipping property: Invalid property name in: "+r),s()}if(h){o();break}i.selector(u);for(var v=0;v<d.length;v++){var y=d[v];i.css(y.name,y.val)}o()}return i},fromString:function(e){var t=this;return t.resetToDefault(),t.appendFromString(e),t}},no={};!function(){var e=q,t=W,n=K,r=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},i=function(r){var i=e+"|\\w+|"+t+"|"+n+"|\\#[0-9a-fA-F]{3}|\\#[0-9a-fA-F]{6}";return"^"+r+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+i+")\\s*\\,\\s*("+i+")\\)$"},a=["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$","^(none)$","^(.+)$"];no.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},percentages:{number:!0,min:0,max:100,units:"%",implicitUnits:"%",multiple:!0},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},zeroOneNumbers:{number:!0,min:0,max:1,unitless:!0,multiple:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},nonNegativeNumber:{number:!0,min:0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},positiveNumber:{number:!0,unitless:!0,min:0,strictMin:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizeMaybePercent:{number:!0,allowPercent:!0},bidirectionalSizes:{number:!0,multiple:!0},sizeMaybePercent:{number:!0,min:0,allowPercent:!0},axisDirection:{enums:["horizontal","leftward","rightward","vertical","upward","downward","auto"]},paddingRelativeTo:{enums:["width","height","average","min","max"]},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"],multiple:!0},bgPos:{number:!0,allowPercent:!0,multiple:!0},bgRelativeTo:{enums:["inner","include-padding"],multiple:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"],multiple:!0},bgFit:{enums:["none","contain","cover"],multiple:!0},bgCrossOrigin:{enums:["anonymous","use-credentials","null"],multiple:!0},bgClip:{enums:["none","node"],multiple:!0},bgContainment:{enums:["inside","over"],multiple:!0},color:{color:!0},colors:{color:!0,multiple:!0},fill:{enums:["solid","linear-gradient","radial-gradient"]},bool:{enums:["yes","no"]},bools:{enums:["yes","no"],multiple:!0},lineStyle:{enums:["solid","dotted","dashed"]},lineCap:{enums:["butt","round","square"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments","straight","straight-triangle","taxi"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap","ellipsis"]},textOverflowWrap:{enums:["whitespace","anywhere"]},textBackgroundShape:{enums:["rectangle","roundrectangle","round-rectangle"]},nodeShape:{enums:["rectangle","roundrectangle","round-rectangle","cutrectangle","cut-rectangle","bottomroundrectangle","bottom-round-rectangle","barrel","ellipse","triangle","round-triangle","square","pentagon","round-pentagon","hexagon","round-hexagon","concavehexagon","concave-hexagon","heptagon","round-heptagon","octagon","round-octagon","tag","round-tag","star","diamond","round-diamond","vee","rhomboid","right-rhomboid","polygon"]},overlayShape:{enums:["roundrectangle","round-rectangle","ellipse"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","circle-triangle","triangle-cross","triangle-backcurve","vee","square","circle","diamond","chevron","none"]},arrowFill:{enums:["filled","hollow"]},arrowWidth:{number:!0,units:"%|px|em",implicitUnits:"px",enums:["match-line"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},zCompoundDepth:{enums:["bottom","orphan","auto","top"]},zIndexCompare:{enums:["auto","manual"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},justification:{enums:["left","center","right","auto"]},text:{string:!0},data:{mapping:!0,regex:r("data")},layoutData:{mapping:!0,regex:r("layoutData")},scratch:{mapping:!0,regex:r("scratch")},mapData:{mapping:!0,regex:i("mapData")},mapLayoutData:{mapping:!0,regex:i("mapLayoutData")},mapScratch:{mapping:!0,regex:i("mapScratch")},fn:{mapping:!0,fn:!0},url:{regexes:a,singleRegexMatchValue:!0},urls:{regexes:a,singleRegexMatchValue:!0,multiple:!0},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position","endpoints"]},edgeEndpoint:{number:!0,multiple:!0,units:"%|px|em|deg|rad",implicitUnits:"px",enums:["inside-to-node","outside-to-node","outside-to-node-or-label","outside-to-line","outside-to-line-or-label"],singleEnum:!0,validate:function(e,t){switch(e.length){case 2:return"deg"!==t[0]&&"rad"!==t[0]&&"deg"!==t[1]&&"rad"!==t[1];case 1:return A(e[0])||"deg"===t[0]||"rad"===t[0];default:return!1}}},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]},gradientDirection:{enums:["to-bottom","to-top","to-left","to-right","to-bottom-right","to-bottom-left","to-top-right","to-top-left","to-right-bottom","to-left-bottom","to-right-top","to-left-top"]},boundsExpansion:{number:!0,multiple:!0,min:0,validate:function(e){var t=e.length;return 1===t||2===t||4===t}}};var o={zeroNonZero:function(e,t){return(null==e||null==t)&&e!==t||(0==e&&0!=t||0!=e&&0==t)},any:function(e,t){return e!=t},emptyNonEmpty:function(e,t){var n=z(e),r=z(t);return n&&!r||!n&&r}},s=no.types,l=[{name:"label",type:s.text,triggersBounds:o.any,triggersZOrder:o.emptyNonEmpty},{name:"text-rotation",type:s.textRotation,triggersBounds:o.any},{name:"text-margin-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"text-margin-y",type:s.bidirectionalSize,triggersBounds:o.any}],u=[{name:"source-label",type:s.text,triggersBounds:o.any},{name:"source-text-rotation",type:s.textRotation,triggersBounds:o.any},{name:"source-text-margin-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"source-text-margin-y",type:s.bidirectionalSize,triggersBounds:o.any},{name:"source-text-offset",type:s.size,triggersBounds:o.any}],c=[{name:"target-label",type:s.text,triggersBounds:o.any},{name:"target-text-rotation",type:s.textRotation,triggersBounds:o.any},{name:"target-text-margin-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"target-text-margin-y",type:s.bidirectionalSize,triggersBounds:o.any},{name:"target-text-offset",type:s.size,triggersBounds:o.any}],h=[{name:"font-family",type:s.fontFamily,triggersBounds:o.any},{name:"font-style",type:s.fontStyle,triggersBounds:o.any},{name:"font-weight",type:s.fontWeight,triggersBounds:o.any},{name:"font-size",type:s.size,triggersBounds:o.any},{name:"text-transform",type:s.textTransform,triggersBounds:o.any},{name:"text-wrap",type:s.textWrap,triggersBounds:o.any},{name:"text-overflow-wrap",type:s.textOverflowWrap,triggersBounds:o.any},{name:"text-max-width",type:s.size,triggersBounds:o.any},{name:"text-outline-width",type:s.size,triggersBounds:o.any},{name:"line-height",type:s.positiveNumber,triggersBounds:o.any}],d=[{name:"text-valign",type:s.valign,triggersBounds:o.any},{name:"text-halign",type:s.halign,triggersBounds:o.any},{name:"color",type:s.color},{name:"text-outline-color",type:s.color},{name:"text-outline-opacity",type:s.zeroOneNumber},{name:"text-background-color",type:s.color},{name:"text-background-opacity",type:s.zeroOneNumber},{name:"text-background-padding",type:s.size,triggersBounds:o.any},{name:"text-border-opacity",type:s.zeroOneNumber},{name:"text-border-color",type:s.color},{name:"text-border-width",type:s.size,triggersBounds:o.any},{name:"text-border-style",type:s.borderStyle,triggersBounds:o.any},{name:"text-background-shape",type:s.textBackgroundShape,triggersBounds:o.any},{name:"text-justification",type:s.justification}],p=[{name:"events",type:s.bool,triggersZOrder:o.any},{name:"text-events",type:s.bool,triggersZOrder:o.any}],g=[{name:"display",type:s.display,triggersZOrder:o.any,triggersBounds:o.any,triggersBoundsOfConnectedEdges:!0},{name:"visibility",type:s.visibility,triggersZOrder:o.any},{name:"opacity",type:s.zeroOneNumber,triggersZOrder:o.zeroNonZero},{name:"text-opacity",type:s.zeroOneNumber},{name:"min-zoomed-font-size",type:s.size},{name:"z-compound-depth",type:s.zCompoundDepth,triggersZOrder:o.any},{name:"z-index-compare",type:s.zIndexCompare,triggersZOrder:o.any},{name:"z-index",type:s.number,triggersZOrder:o.any}],f=[{name:"overlay-padding",type:s.size,triggersBounds:o.any},{name:"overlay-color",type:s.color},{name:"overlay-opacity",type:s.zeroOneNumber,triggersBounds:o.zeroNonZero},{name:"overlay-shape",type:s.overlayShape,triggersBounds:o.any}],v=[{name:"underlay-padding",type:s.size,triggersBounds:o.any},{name:"underlay-color",type:s.color},{name:"underlay-opacity",type:s.zeroOneNumber,triggersBounds:o.zeroNonZero},{name:"underlay-shape",type:s.overlayShape,triggersBounds:o.any}],y=[{name:"transition-property",type:s.propList},{name:"transition-duration",type:s.time},{name:"transition-delay",type:s.time},{name:"transition-timing-function",type:s.easing}],m=function(e,t){return"label"===t.value?-e.poolIndex():t.pfValue},b=[{name:"height",type:s.nodeSize,triggersBounds:o.any,hashOverride:m},{name:"width",type:s.nodeSize,triggersBounds:o.any,hashOverride:m},{name:"shape",type:s.nodeShape,triggersBounds:o.any},{name:"shape-polygon-points",type:s.polygonPointList,triggersBounds:o.any},{name:"background-color",type:s.color},{name:"background-fill",type:s.fill},{name:"background-opacity",type:s.zeroOneNumber},{name:"background-blacken",type:s.nOneOneNumber},{name:"background-gradient-stop-colors",type:s.colors},{name:"background-gradient-stop-positions",type:s.percentages},{name:"background-gradient-direction",type:s.gradientDirection},{name:"padding",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"padding-relative-to",type:s.paddingRelativeTo,triggersBounds:o.any},{name:"bounds-expansion",type:s.boundsExpansion,triggersBounds:o.any}],x=[{name:"border-color",type:s.color},{name:"border-opacity",type:s.zeroOneNumber},{name:"border-width",type:s.size,triggersBounds:o.any},{name:"border-style",type:s.borderStyle}],w=[{name:"outline-color",type:s.color},{name:"outline-opacity",type:s.zeroOneNumber},{name:"outline-width",type:s.size,triggersBounds:o.any},{name:"outline-style",type:s.borderStyle},{name:"outline-offset",type:s.size,triggersBounds:o.any}],E=[{name:"background-image",type:s.urls},{name:"background-image-crossorigin",type:s.bgCrossOrigin},{name:"background-image-opacity",type:s.zeroOneNumbers},{name:"background-image-containment",type:s.bgContainment},{name:"background-image-smoothing",type:s.bools},{name:"background-position-x",type:s.bgPos},{name:"background-position-y",type:s.bgPos},{name:"background-width-relative-to",type:s.bgRelativeTo},{name:"background-height-relative-to",type:s.bgRelativeTo},{name:"background-repeat",type:s.bgRepeat},{name:"background-fit",type:s.bgFit},{name:"background-clip",type:s.bgClip},{name:"background-width",type:s.bgWH},{name:"background-height",type:s.bgWH},{name:"background-offset-x",type:s.bgPos},{name:"background-offset-y",type:s.bgPos}],_=[{name:"position",type:s.position,triggersBounds:o.any},{name:"compound-sizing-wrt-labels",type:s.compoundIncludeLabels,triggersBounds:o.any},{name:"min-width",type:s.size,triggersBounds:o.any},{name:"min-width-bias-left",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"min-width-bias-right",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"min-height",type:s.size,triggersBounds:o.any},{name:"min-height-bias-top",type:s.sizeMaybePercent,triggersBounds:o.any},{name:"min-height-bias-bottom",type:s.sizeMaybePercent,triggersBounds:o.any}],T=[{name:"line-style",type:s.lineStyle},{name:"line-color",type:s.color},{name:"line-fill",type:s.fill},{name:"line-cap",type:s.lineCap},{name:"line-opacity",type:s.zeroOneNumber},{name:"line-dash-pattern",type:s.numbers},{name:"line-dash-offset",type:s.number},{name:"line-gradient-stop-colors",type:s.colors},{name:"line-gradient-stop-positions",type:s.percentages},{name:"curve-style",type:s.curveStyle,triggersBounds:o.any,triggersBoundsOfParallelBeziers:!0},{name:"haystack-radius",type:s.zeroOneNumber,triggersBounds:o.any},{name:"source-endpoint",type:s.edgeEndpoint,triggersBounds:o.any},{name:"target-endpoint",type:s.edgeEndpoint,triggersBounds:o.any},{name:"control-point-step-size",type:s.size,triggersBounds:o.any},{name:"control-point-distances",type:s.bidirectionalSizes,triggersBounds:o.any},{name:"control-point-weights",type:s.numbers,triggersBounds:o.any},{name:"segment-distances",type:s.bidirectionalSizes,triggersBounds:o.any},{name:"segment-weights",type:s.numbers,triggersBounds:o.any},{name:"taxi-turn",type:s.bidirectionalSizeMaybePercent,triggersBounds:o.any},{name:"taxi-turn-min-distance",type:s.size,triggersBounds:o.any},{name:"taxi-direction",type:s.axisDirection,triggersBounds:o.any},{name:"edge-distances",type:s.edgeDistances,triggersBounds:o.any},{name:"arrow-scale",type:s.positiveNumber,triggersBounds:o.any},{name:"loop-direction",type:s.angle,triggersBounds:o.any},{name:"loop-sweep",type:s.angle,triggersBounds:o.any},{name:"source-distance-from-node",type:s.size,triggersBounds:o.any},{name:"target-distance-from-node",type:s.size,triggersBounds:o.any}],D=[{name:"ghost",type:s.bool,triggersBounds:o.any},{name:"ghost-offset-x",type:s.bidirectionalSize,triggersBounds:o.any},{name:"ghost-offset-y",type:s.bidirectionalSize,triggersBounds:o.any},{name:"ghost-opacity",type:s.zeroOneNumber}],C=[{name:"selection-box-color",type:s.color},{name:"selection-box-opacity",type:s.zeroOneNumber},{name:"selection-box-border-color",type:s.color},{name:"selection-box-border-width",type:s.size},{name:"active-bg-color",type:s.color},{name:"active-bg-opacity",type:s.zeroOneNumber},{name:"active-bg-size",type:s.size},{name:"outside-texture-bg-color",type:s.color},{name:"outside-texture-bg-opacity",type:s.zeroOneNumber}],N=[];no.pieBackgroundN=16,N.push({name:"pie-size",type:s.sizeMaybePercent});for(var L=1;L<=no.pieBackgroundN;L++)N.push({name:"pie-"+L+"-background-color",type:s.color}),N.push({name:"pie-"+L+"-background-size",type:s.percent}),N.push({name:"pie-"+L+"-background-opacity",type:s.zeroOneNumber});var k=[],S=no.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:s.arrowShape,triggersBounds:o.any},{name:"arrow-color",type:s.color},{name:"arrow-fill",type:s.arrowFill},{name:"arrow-width",type:s.arrowWidth}].forEach((function(e){S.forEach((function(t){var n=t+"-"+e.name,r=e.type,i=e.triggersBounds;k.push({name:n,type:r,triggersBounds:i})}))}),{});var I=no.properties=[].concat(p,y,g,f,v,D,d,h,l,u,c,b,x,w,E,N,_,T,k,C),M=no.propertyGroups={behavior:p,transition:y,visibility:g,overlay:f,underlay:v,ghost:D,commonLabel:d,labelDimensions:h,mainLabel:l,sourceLabel:u,targetLabel:c,nodeBody:b,nodeBorder:x,nodeOutline:w,backgroundImage:E,pie:N,compound:_,edgeLine:T,edgeArrow:k,core:C},O=no.propertyGroupNames={};(no.propertyGroupKeys=Object.keys(M)).forEach((function(e){O[e]=M[e].map((function(e){return e.name})),M[e].forEach((function(t){return t.groupKey=e}))}));var P=no.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"},{name:"padding-left",pointsTo:"padding"},{name:"padding-right",pointsTo:"padding"},{name:"padding-top",pointsTo:"padding"},{name:"padding-bottom",pointsTo:"padding"}];no.propertyNames=I.map((function(e){return e.name}));for(var R=0;R<I.length;R++){var B=I[R];I[B.name]=B}for(var F=0;F<P.length;F++){var G=P[F],Y=I[G.pointsTo],X={name:G.name,alias:!0,pointsTo:Y};I.push(X),I[G.name]=X}}(),no.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},no.getDefaultProperties=function(){var e=this._private;if(null!=e.defaultProperties)return e.defaultProperties;for(var t=Q({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125,events:"yes","text-events":"no","text-valign":"top","text-halign":"center","text-justification":"auto","line-height":1,color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-overflow-wrap":"whitespace","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-shape":"rectangle","text-background-padding":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-compound-depth":"auto","z-index-compare":"auto","z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"overlay-shape":"round-rectangle","underlay-opacity":0,"underlay-color":"#000","underlay-padding":10,"underlay-shape":"round-rectangle","transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-fill":"solid","background-opacity":1,"background-image":"none","background-image-crossorigin":"anonymous","background-image-opacity":1,"background-image-containment":"inside","background-image-smoothing":"yes","background-position-x":"50%","background-position-y":"50%","background-offset-x":0,"background-offset-y":0,"background-width-relative-to":"include-padding","background-height-relative-to":"include-padding","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid","outline-color":"#999","outline-opacity":1,"outline-width":0,"outline-offset":0,"outline-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","bounds-expansion":0,"background-gradient-direction":"to-bottom","background-gradient-stop-colors":"#999","background-gradient-stop-positions":"0%",ghost:"no","ghost-offset-y":0,"ghost-offset-x":0,"ghost-opacity":0,padding:0,"padding-relative-to":"width",position:"origin","compound-sizing-wrt-labels":"include","min-width":0,"min-width-bias-left":0,"min-width-bias-right":0,"min-height":0,"min-height-bias-top":0,"min-height-bias-bottom":0},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce((function(e,t){for(var n=1;n<=no.pieBackgroundN;n++){var r=t.name.replace("{{i}}",n),i=t.value;e[r]=i}return e}),{}),{"line-style":"solid","line-color":"#999","line-fill":"solid","line-cap":"butt","line-opacity":1,"line-gradient-stop-colors":"#999","line-gradient-stop-positions":"0%","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"taxi-turn":"50%","taxi-turn-min-distance":10,"taxi-direction":"auto","edge-distances":"intersection","curve-style":"haystack","haystack-radius":0,"arrow-scale":1,"loop-direction":"-45deg","loop-sweep":"-90deg","source-distance-from-node":0,"target-distance-from-node":0,"source-endpoint":"outside-to-node","target-endpoint":"outside-to-node","line-dash-pattern":[6,3],"line-dash-offset":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"},{name:"arrow-width",value:1}].reduce((function(e,t){return no.arrowPrefixes.forEach((function(n){var r=n+"-"+t.name,i=t.value;e[r]=i})),e}),{})),n={},r=0;r<this.properties.length;r++){var i=this.properties[r];if(!i.pointsTo){var a=i.name,o=t[a],s=this.parse(a,o);n[a]=s}}return e.defaultProperties=n,e.defaultProperties},no.addDefaultStylesheet=function(){this.selector(":parent").css({shape:"rectangle",padding:10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3}).selector(":loop").css({"curve-style":"bezier"}).selector("edge:compound").css({"curve-style":"bezier","source-endpoint":"outside-to-line","target-endpoint":"outside-to-line"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector(":parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}),this.defaultLength=this.length};var ro={parse:function(e,t,n,r){var i=this;if(L(t))return i.parseImplWarn(e,t,n,r);var a,o=ve(e,""+t,n?"t":"f","mapping"===r||!0===r||!1===r||null==r?"dontcare":r),s=i.propCache=i.propCache||[];return(a=s[o])||(a=s[o]=i.parseImplWarn(e,t,n,r)),(n||"mapping"===r)&&(a=Le(a))&&(a.value=Le(a.value)),a},parseImplWarn:function(e,t,n,r){var i=this.parseImpl(e,t,n,r);return i||null==t||Ae("The style property `".concat(e,": ").concat(t,"` is invalid")),!i||"width"!==i.name&&"height"!==i.name||"label"!==t||Ae("The style value of `label` is deprecated for `"+i.name+"`"),i}};ro.parseImpl=function(e,t,n,r){var i=this;e=X(e);var a=i.properties[e],o=t,s=i.types;if(!a)return null;if(void 0===t)return null;a.alias&&(a=a.pointsTo,e=a.name);var l=A(t);l&&(t=t.trim());var u,c,h=a.type;if(!h)return null;if(n&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(L(t))return{name:e,value:t,strValue:"fn",mapped:s.fn,bypass:n};if(!l||r||t.length<7||"a"!==t[1]);else{if(t.length>=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var d=s.data;return{name:e,value:u,strValue:""+t,mapped:d,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(h.multiple)return!1;var p=s.mapData;if(!h.color&&!h.number)return!1;var g=this.parse(e,c[4]);if(!g||g.mapped)return!1;var f=this.parse(e,c[5]);if(!f||f.mapped)return!1;if(g.pfValue===f.pfValue||g.strValue===f.strValue)return Ae("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+g.strValue+"`"),this.parse(e,g.strValue);if(h.color){var v=g.value,y=f.value;if(!(v[0]!==y[0]||v[1]!==y[1]||v[2]!==y[2]||v[3]!==y[3]&&(null!=v[3]&&1!==v[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:p,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:g.value,valueMax:f.value,bypass:n}}}if(h.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):k(t)?t:[t],h.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",_=!1,T=0;T<m.length;T++){var D=i.parse(e,m[T],n,"multiple");_=_||A(D.value),b.push(D.value),w.push(null!=D.pfValue?D.pfValue:D.value),x.push(D.units),E+=(T>0?" ":"")+D.strValue}return h.validate&&!h.validate(b,x)?null:h.singleEnum&&_?1===b.length&&A(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var C,N,S=function(){for(var r=0;r<h.enums.length;r++){if(h.enums[r]===t)return{name:e,value:t,strValue:""+t,bypass:n}}return null};if(h.number){var M,O="px";if(h.units&&(M=h.units),h.implicitUnits&&(O=h.implicitUnits),!h.unitless)if(l){var P="px|em"+(h.allowPercent?"|\\%":"");M&&(P=M);var R=t.match("^("+q+")("+P+")?$");R&&(t=R[1],M=R[2]||O)}else M&&!h.implicitUnits||(M=O);if(t=parseFloat(t),isNaN(t)&&void 0===h.enums)return null;if(isNaN(t)&&void 0!==h.enums)return t=o,S();if(h.integer&&(!I(N=t)||Math.floor(N)!==N))return null;if(void 0!==h.min&&(t<h.min||h.strictMin&&t===h.min)||void 0!==h.max&&(t>h.max||h.strictMax&&t===h.max))return null;var B={name:e,value:t,strValue:""+t+(M||""),units:M,bypass:n};return h.unitless||"px"!==M&&"em"!==M?B.pfValue=t:B.pfValue="px"!==M&&M?this.getEmSizeInPixels()*t:t,"ms"!==M&&"s"!==M||(B.pfValue="ms"===M?t:1e3*t),"deg"!==M&&"rad"!==M||(B.pfValue="rad"===M?t:(C=t,Math.PI*C/180)),"%"===M&&(B.pfValue=t/100),B}if(h.propList){var F=[],z=""+t;if("none"===z);else{for(var G=z.split(/\s*,\s*|\s+/),Y=0;Y<G.length;Y++){var V=G[Y].trim();i.properties[V]?F.push(V):Ae("`"+V+"` is not a valid property name")}if(0===F.length)return null}return{name:e,value:F,strValue:0===F.length?"none":F.join(" "),bypass:n}}if(h.color){var U=J(t);return U?{name:e,value:U,pfValue:U,strValue:"rgb("+U[0]+","+U[1]+","+U[2]+")",bypass:n}:null}if(h.regex||h.regexes){if(h.enums){var j=S();if(j)return j}for(var H=h.regexes?h.regexes:[h.regex],W=0;W<H.length;W++){var $=new RegExp(H[W]).exec(t);if($)return{name:e,value:h.singleRegexMatchValue?$[1]:$,strValue:""+t,bypass:n}}return null}return h.string?{name:e,value:""+t,strValue:""+t,bypass:n}:h.enums?S():null};var io=function e(t){if(!(this instanceof e))return new e(t);B(t)?(this._private={cy:t,coreStyle:{}},this.length=0,this.resetToDefault()):Ce("A style must have a core reference")},ao=io.prototype;ao.instanceString=function(){return"style"},ao.clear=function(){for(var e=this._private,t=e.cy.elements(),n=0;n<this.length;n++)this[n]=void 0;return this.length=0,e.contextStyles={},e.propDiffs={},this.cleanElements(t,!0),t.forEach((function(e){var t=e[0]._private;t.styleDirty=!0,t.appliedInitStyle=!1})),this},ao.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},ao.core=function(e){return this._private.coreStyle[e]||this.getDefaultProperty(e)},ao.selector=function(e){var t="core"===e?null:new Hr(e),n=this.length++;return this[n]={selector:t,properties:[],mappedProperties:[],index:n},this},ao.css=function(){var e=arguments;if(1===e.length)for(var t=e[0],n=0;n<this.properties.length;n++){var r=this.properties[n],i=t[r.name];void 0===i&&(i=t[V(r.name)]),void 0!==i&&this.cssRule(r.name,i)}else 2===e.length&&this.cssRule(e[0],e[1]);return this},ao.style=ao.css,ao.cssRule=function(e,t){var n=this.parse(e,t);if(n){var r=this.length-1;this[r].properties.push(n),this[r].properties[n.name]=n,n.name.match(/pie-(\d+)-background-size/)&&n.value&&(this._private.hasPie=!0),n.mapped&&this[r].mappedProperties.push(n),!this[r].selector&&(this._private.coreStyle[n.name]=n)}return this},ao.append=function(e){return F(e)?e.appendToStyle(this):k(e)?this.appendFromJson(e):A(e)&&this.appendFromString(e),this},io.fromJson=function(e,t){var n=new io(e);return n.fromJson(t),n},io.fromString=function(e,t){return new io(e).fromString(t)},[$a,Za,Qa,Ja,eo,to,no,ro].forEach((function(e){Q(ao,e)})),io.types=ao.types,io.properties=ao.properties,io.propertyGroups=ao.propertyGroups,io.propertyGroupNames=ao.propertyGroupNames,io.propertyGroupKeys=ao.propertyGroupKeys;var oo={style:function(e){e&&this.setStyle(e).update();return this._private.style},setStyle:function(e){var t=this._private;return F(e)?t.style=e.generateStyle(this):k(e)?t.style=io.fromJson(this,e):A(e)?t.style=io.fromString(this,e):t.style=io(this),t.style},updateStyle:function(){this.mutableElements().updateStyle()}},so={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},selectionType:function(e){var t=this._private;return null==t.selectionType&&(t.selectionType="single"),void 0===e?t.selectionType:("additive"!==e&&"single"!==e||(t.selectionType=e),this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,n,r,i,a=arguments,o=this._private.pan;switch(a.length){case 0:return o;case 1:if(A(a[0]))return o[e=a[0]];if(S(a[0])){if(!this._private.panningEnabled)return this;r=(n=a[0]).x,i=n.y,I(r)&&(o.x=r),I(i)&&(o.y=i),this.emit("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;t=a[1],"x"!==(e=a[0])&&"y"!==e||!I(t)||(o[e]=t),this.emit("pan viewport")}return this.notify("viewport"),this},panBy:function(e,t){var n,r,i,a,o,s=arguments,l=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:S(e)&&(a=(i=s[0]).x,o=i.y,I(a)&&(l.x+=a),I(o)&&(l.y+=o),this.emit("pan viewport"));break;case 2:r=t,"x"!==(n=e)&&"y"!==n||!I(r)||(l[n]+=r),this.emit("pan viewport")}return this.notify("viewport"),this},fit:function(e,t){var n=this.getFitViewport(e,t);if(n){var r=this._private;r.zoom=n.zoom,r.pan=n.pan,this.emit("pan zoom viewport"),this.notify("viewport")}return this},getFitViewport:function(e,t){if(I(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var n,r;if(A(e)){var i=e;e=this.$(i)}else if(S(r=e)&&I(r.x1)&&I(r.x2)&&I(r.y1)&&I(r.y2)){var a=e;(n={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2}).w=n.x2-n.x1,n.h=n.y2-n.y1}else O(e)||(e=this.mutableElements());if(!O(e)||!e.empty()){n=n||e.boundingBox();var o,s=this.width(),l=this.height();if(t=I(t)?t:0,!isNaN(s)&&!isNaN(l)&&s>0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)<this._private.minZoom?this._private.minZoom:o,pan:{x:(s-o*(n.x1+n.x2))/2,y:(l-o*(n.y1+n.y2))/2}}}}},zoomRange:function(e,t){var n=this._private;if(null==t){var r=e;e=r.min,t=r.max}return I(e)&&I(t)&&e<=t?(n.minZoom=e,n.maxZoom=t):I(e)&&void 0===t&&e<=n.maxZoom?n.minZoom=e:I(t)&&void 0===e&&t>=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),I(e)?n=e:S(e)&&(n=e.level,null!=e.position?t=rt(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)<r.minZoom?r.minZoom:n,o||!I(n)||n===a||null!=t&&(!I(t.x)||!I(t.y)))return null;if(null!=t){var s=i,l=a,u=n;return{zoomed:!0,panned:!0,zoom:u,pan:{x:-u/l*(t.x-s.x)+t.x,y:-u/l*(t.y-s.y)+t.y}}}return{zoomed:!0,panned:!1,zoom:n,pan:i}},zoom:function(e){if(void 0===e)return this._private.zoom;var t=this.getZoomedViewport(e),n=this._private;return null!=t&&t.zoomed?(n.zoom=t.zoom,t.panned&&(n.pan.x=t.pan.x,n.pan.y=t.pan.y),this.emit("zoom"+(t.panned?" pan":"")+" viewport"),this.notify("viewport"),this):this},viewport:function(e){var t=this._private,n=!0,r=!0,i=[],a=!1,o=!1;if(!e)return this;if(I(e.zoom)||(n=!1),S(e.pan)||(r=!1),!n&&!r)return this;if(n){var s=e.zoom;s<t.minZoom||s>t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;I(l.x)&&(t.pan.x=l.x,o=!1),I(l.y)&&(t.pan.y=l.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(A(e)){var n=e;e=this.mutableElements().filter(n)}else O(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,i=this;return n.sizeCache=n.sizeCache||(r?(e=i.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};so.centre=so.center,so.autolockNodes=so.autolock,so.autoungrabifyNodes=so.autoungrabify;var lo={data:ur.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:ur.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:ur.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:ur.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};lo.attr=lo.data,lo.removeAttr=lo.removeData;var uo=function(e){var t=this,n=(e=Q({},e)).container;n&&!M(n)&&M(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==w&&void 0!==n&&!e.headless,o=e;o.layout=Q({name:a?"grid":"null"},o.layout),o.renderer=Q({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new Da(this),listeners:[],aniEles:new Da(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:I(o.zoom)?o.zoom:1,pan:{x:S(o.pan)&&I(o.pan.x)?o.pan.x:0,y:S(o.pan)&&I(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});l.styleEnabled&&t.setStyle([]);var u=Q({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(G))return rr.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(S(e)||k(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=Q({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),l.ready=!0,L(o.ready)&&t.on("ready",o.ready);for(var e=0;e<i.length;e++){var n=i[e];t.on("ready",n)}r&&(r.readies=[]),t.emit("ready")}),o.done)}))},co=uo.prototype;Q(co,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},destroyed:function(){return this._private.destroyed},ready:function(e){return this.isReady()?this.emitter().emit("ready",[],e):this.on("ready",e),this},destroy:function(){var e=this;if(!e.destroyed())return e.stopAnimationLoop(),e.destroyRenderer(),this.emit("destroy"),e._private.destroyed=!0,e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return this._private.renderer.isHeadless()},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container||null},window:function(){if(null==this._private.container)return w;var e=this._private.container.ownerDocument;return void 0===e||null==e?w:e.defaultView||w},mount:function(e){if(null!=e){var t=this,n=t._private,r=n.options;return!M(e)&&M(e[0])&&(e=e[0]),t.stopAnimationLoop(),t.destroyRenderer(),n.container=e,n.styleEnabled=!0,t.invalidateSize(),t.initRenderer(Q({},r,r.renderer,{name:"null"===r.renderer.name?"canvas":r.renderer.name})),t.startAnimationLoop(),t.style(r.style),t.emit("mount"),t}},unmount:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e.initRenderer({name:"null"}),e.emit("unmount"),e},options:function(){return Le(this._private.options)},json:function(e){var t=this,n=t._private,r=t.mutableElements();if(S(e)){if(t.startBatch(),e.elements){var i={},a=function(e,n){for(var r=[],a=[],o=0;o<e.length;o++){var s=e[o];if(s.data.id){var l=""+s.data.id,u=t.getElementById(l);i[l]=!0,0!==u.length?a.push({ele:u,json:s}):n?(s.group=n,r.push(s)):r.push(s)}else Ae("cy.json() cannot handle elements without an ID attribute")}t.add(r);for(var c=0;c<a.length;c++){var h=a[c],d=h.ele,p=h.json;d.json(p)}};if(k(e.elements))a(e.elements);else for(var o=["nodes","edges"],s=0;s<o.length;s++){var l=o[s],u=e.elements[l];k(u)&&a(u,l)}var c=t.collection();r.filter((function(e){return!i[e.id()]})).forEach((function(e){e.isParent()?c.merge(e):e.remove()})),c.forEach((function(e){return e.children().move({parent:null})})),c.forEach((function(e){return function(e){return t.getElementById(e.id())}(e).remove()}))}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==n.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===n.pan.x&&e.pan.y===n.pan.y||t.pan(e.pan)),e.data&&t.data(e.data);for(var h=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify","multiClickDebounceTime"],d=0;d<h.length;d++){var p=h[d];null!=e[p]&&t[p](e[p])}return t.endBatch(),this}var g={};!!e?g.elements=this.elements().map((function(e){return e.json()})):(g.elements={},r.forEach((function(e){var t=e.group();g.elements[t]||(g.elements[t]=[]),g.elements[t].push(e.json())}))),this._private.styleEnabled&&(g.style=t.style().json()),g.data=Le(t.data());var f=n.options;return g.zoomingEnabled=n.zoomingEnabled,g.userZoomingEnabled=n.userZoomingEnabled,g.zoom=n.zoom,g.minZoom=n.minZoom,g.maxZoom=n.maxZoom,g.panningEnabled=n.panningEnabled,g.userPanningEnabled=n.userPanningEnabled,g.pan=Le(n.pan),g.boxSelectionEnabled=n.boxSelectionEnabled,g.renderer=Le(f.renderer),g.hideEdgesOnViewport=f.hideEdgesOnViewport,g.textureOnViewport=f.textureOnViewport,g.wheelSensitivity=f.wheelSensitivity,g.motionBlur=f.motionBlur,g.multiClickDebounceTime=f.multiClickDebounceTime,g}}),co.$id=co.getElementById,[Na,za,Xa,Va,Ua,ja,Ha,Wa,oo,so,lo].forEach((function(e){Q(co,e)}));var ho={fit:!0,directed:!1,padding:30,circle:!1,grid:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,roots:void 0,depthSort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}},po={maximal:!1,acyclic:!1},go=function(e){return e.scratch("breadthfirst")},fo=function(e,t){return e.scratch("breadthfirst",t)};function vo(e){this.options=Q({},ho,po,e)}vo.prototype.run=function(){var e,t=this.options,n=t,r=t.cy,i=n.eles,a=i.nodes().filter((function(e){return!e.isParent()})),o=i,s=n.directed,l=n.acyclic||n.maximal||n.maximalAdjustments>0,u=ft(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(O(n.roots))e=n.roots;else if(k(n.roots)){for(var c=[],h=0;h<n.roots.length;h++){var d=n.roots[h],p=r.getElementById(d);c.push(p)}e=r.collection(c)}else if(A(n.roots))e=r.$(n.roots);else if(s)e=a.roots();else{var g=i.components();e=r.collection();for(var f=function(t){var n=g[t],r=n.maxDegree(!1),i=n.filter((function(e){return e.degree(!1)===r}));e=e.add(i)},v=0;v<g.length;v++)f(v)}var y=[],m={},b=function(e,t){null==y[t]&&(y[t]=[]);var n=y[t].length;y[t].push(e),fo(e,{index:n,depth:t})};o.bfs({roots:e,directed:n.directed,visit:function(e,t,n,r,i){var a=e[0],o=a.id();b(a,i),m[o]=!0}});for(var x=[],w=0;w<a.length;w++){var E=a[w];m[E.id()]||x.push(E)}var _=function(e){for(var t=y[e],n=0;n<t.length;n++){var r=t[n];null!=r?fo(r,{depth:e,index:n}):(t.splice(n,1),n--)}},T=function(){for(var e=0;e<y.length;e++)_(e)},D=function(e,t){for(var r=go(e),a=e.incomers().filter((function(e){return e.isNode()&&i.has(e)})),o=-1,s=e.id(),l=0;l<a.length;l++){var u=a[l],c=go(u);o=Math.max(o,c.depth)}if(r.depth<=o){if(!n.acyclic&&t[s])return null;var h=o+1;return function(e,t){var n=go(e),r=n.depth,i=n.index;y[r][i]=null,b(e,t)}(e,h),t[s]=h,!0}return!1};if(s&&l){var C=[],N={},L=function(e){return C.push(e)};for(a.forEach((function(e){return C.push(e)}));C.length>0;){var S=C.shift(),I=D(S,N);if(I)S.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(L);else if(null===I){Ae("Detected double maximal shift for node `"+S.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}T();var M=0;if(n.avoidOverlap)for(var P=0;P<a.length;P++){var R=a[P].layoutDimensions(n),B=R.w,F=R.h;M=Math.max(M,B,F)}var z={},G=function(e){if(z[e.id()])return z[e.id()];for(var t=go(e).depth,n=e.neighborhood(),r=0,i=0,o=0;o<n.length;o++){var s=n[o];if(!s.isEdge()&&!s.isParent()&&a.has(s)){var l=go(s);if(null!=l){var u=l.index,c=l.depth;if(null!=u&&null!=c){var h=y[c].length;c<t&&(r+=u/h,i++)}}}}return r/=i=Math.max(1,i),0===i&&(r=0),z[e.id()]=r,r},Y=function(e,t){var n=G(e)-G(t);return 0===n?Z(e.id(),t.id()):n};void 0!==n.depthSort&&(Y=n.depthSort);for(var X=0;X<y.length;X++)y[X].sort(Y),_(X);for(var V=[],U=0;U<x.length;U++)V.push(x[U]);y.unshift(V),T();for(var j=0,q=0;q<y.length;q++)j=Math.max(y[q].length,j);var H=u.x1+u.w/2,W=u.x1+u.h/2,$=y.reduce((function(e,t){return Math.max(e,t.length)}),0);return i.nodes().layoutPositions(this,n,(function(e){var t=go(e),r=t.depth,i=t.index,a=y[r].length,o=Math.max(u.w/((n.grid?$:a)+1),M),s=Math.max(u.h/(y.length+1),M),l=Math.min(u.w/2/y.length,u.h/2/y.length);if(l=Math.max(l,M),n.circle){var c=l*r+l-(y.length>0&&y[0].length<=3?l/2:0),h=2*Math.PI/y[r].length*i;return 0===r&&1===y[0].length&&(c=1),{x:H+c*Math.cos(h),y:W+c*Math.sin(h)}}return{x:H+(i+1-(a+1)/2)*o,y:(r+1)*s}})),this};var yo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function mo(e){this.options=Q({},yo,e)}mo.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,u=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),h=0,d=0;d<a.length;d++){var p=a[d].layoutDimensions(t),g=p.w,f=p.h;h=Math.max(h,g,f)}if(o=I(t.radius)?t.radius:a.length<=1?0:Math.min(s.h,s.w)/2-h,a.length>1&&t.avoidOverlap){h*=1.75;var v=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(h*h/(v*v+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*c*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l+a,y:u+s}})),this};var bo,xo={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function wo(e){this.options=Q({},xo,e)}wo.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,u=[],c=0,h=0;h<a.length;h++){var d,p=a[h];d=t.concentric(p),u.push({value:d,node:p}),p._private.scratch.concentric=d}a.updateStyle();for(var g=0;g<a.length;g++){var f=a[g].layoutDimensions(t);c=Math.max(c,f.w,f.h)}u.sort((function(e,t){return t.value-e.value}));for(var v=t.levelWidth(a),y=[[]],m=y[0],b=0;b<u.length;b++){var x=u[b];if(m.length>0)Math.abs(m[0].value-x.value)>=v&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,_=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,_)}for(var T=0,D=0;D<y.length;D++){var C=y[D],N=void 0===t.sweep?2*Math.PI-2*Math.PI/C.length:t.sweep,A=C.dTheta=N/Math.max(1,C.length-1);if(C.length>1&&t.avoidOverlap){var L=Math.cos(A)-Math.cos(0),k=Math.sin(A)-Math.sin(0),S=Math.sqrt(w*w/(L*L+k*k));T=Math.max(S,T)}C.r=T,T+=w}if(t.equidistant){for(var I=0,M=0,O=0;O<y.length;O++){var P=y[O].r-M;I=Math.max(I,P)}M=0;for(var R=0;R<y.length;R++){var B=y[R];0===R&&(M=B.r),B.r=M,M+=I}}for(var F={},z=0;z<y.length;z++)for(var G=y[z],Y=G.dTheta,X=G.r,V=0;V<G.length;V++){var U=G[V],j=t.startAngle+(n?1:-1)*Y*V,q={x:s+X*Math.cos(j),y:l+X*Math.sin(j)};F[U.node.id()]=q}return i.nodes().layoutPositions(this,t,(function(e){var t=e.id();return F[t]})),this};var Eo={ready:function(){},stop:function(){},animate:!0,animationEasing:void 0,animationDuration:void 0,animateFilter:function(e,t){return!0},animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,nodeDimensionsIncludeLabels:!1,randomize:!1,componentSpacing:40,nodeRepulsion:function(e){return 2048},nodeOverlap:4,idealEdgeLength:function(e){return 32},edgeElasticity:function(e){return 32},nestingFactor:1.2,gravity:1,numIter:1e3,initialTemp:1e3,coolingFactor:.99,minTemp:1};function _o(e){this.options=Q({},Eo,e),this.options.layout=this;var t=this.options.eles.nodes(),n=this.options.eles.edges().filter((function(e){var n=e.source().data("id"),r=e.target().data("id"),i=t.some((function(e){return e.data("id")===n})),a=t.some((function(e){return e.data("id")===r}));return!i||!a}));this.options.eles=this.options.eles.not(n)}_o.prototype.run=function(){var e=this.options,t=e.cy,n=this;n.stopped=!1,!0!==e.animate&&!1!==e.animate||n.emit({type:"layoutstart",layout:n}),bo=!0===e.debug;var r=To(t,n,e);bo&&undefined(r),e.randomize&&No(r);var i=se(),a=function(){Lo(r,t,e),!0===e.fit&&t.fit(e.padding)},o=function(t){return!(n.stopped||t>=e.numIter)&&(ko(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature<e.minTemp))},s=function(){if(!0===e.animate||!1===e.animate)a(),n.one("layoutstop",e.stop),n.emit({type:"layoutstop",layout:n});else{var t=e.eles.nodes(),i=Ao(r,e,t);t.layoutPositions(n,e,i)}},l=0,u=!0;if(!0===e.animate){!function t(){for(var n=0;u&&n<e.refresh;)u=o(l),l++,n++;u?(se()-i>=e.animationThreshold&&a(),oe(t)):(Xo(r,e),s())}()}else{for(;u;)u=o(l),l++;Xo(r,e),s()}return this},_o.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},_o.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var To=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a=ft(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:a.w,clientHeight:a.h,boundingBox:a},s=n.eles.components(),l={},u=0;u<s.length;u++)for(var c=s[u],h=0;h<c.length;h++){l[c[h].id()]=u}for(u=0;u<o.nodeSize;u++){var d=(y=i[u]).layoutDimensions(n);(O={}).isLocked=y.locked(),O.id=y.data("id"),O.parentId=y.data("parent"),O.cmptId=l[y.id()],O.children=[],O.positionX=y.position("x"),O.positionY=y.position("y"),O.offsetX=0,O.offsetY=0,O.height=d.w,O.width=d.h,O.maxX=O.positionX+O.width/2,O.minX=O.positionX-O.width/2,O.maxY=O.positionY+O.height/2,O.minY=O.positionY-O.height/2,O.padLeft=parseFloat(y.style("padding")),O.padRight=parseFloat(y.style("padding")),O.padTop=parseFloat(y.style("padding")),O.padBottom=parseFloat(y.style("padding")),O.nodeRepulsion=L(n.nodeRepulsion)?n.nodeRepulsion(y):n.nodeRepulsion,o.layoutNodes.push(O),o.idToIndex[O.id]=u}var p=[],g=0,f=-1,v=[];for(u=0;u<o.nodeSize;u++){var y,m=(y=o.layoutNodes[u]).parentId;null!=m?o.layoutNodes[o.idToIndex[m]].children.push(y.id):(p[++f]=y.id,v.push(y.id))}for(o.graphSet.push(v);g<=f;){var b=p[g++],x=o.idToIndex[b],w=o.layoutNodes[x].children;if(w.length>0){o.graphSet.push(w);for(u=0;u<w.length;u++)p[++f]=w[u]}}for(u=0;u<o.graphSet.length;u++){var E=o.graphSet[u];for(h=0;h<E.length;h++){var _=o.idToIndex[E[h]];o.indexToGraph[_]=u}}for(u=0;u<o.edgeSize;u++){var T=r[u],D={};D.id=T.data("id"),D.sourceId=T.data("source"),D.targetId=T.data("target");var C=L(n.idealEdgeLength)?n.idealEdgeLength(T):n.idealEdgeLength,N=L(n.edgeElasticity)?n.edgeElasticity(T):n.edgeElasticity,A=o.idToIndex[D.sourceId],k=o.idToIndex[D.targetId];if(o.indexToGraph[A]!=o.indexToGraph[k]){for(var S=Do(D.sourceId,D.targetId,o),I=o.graphSet[S],M=0,O=o.layoutNodes[A];-1===I.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],M++;for(O=o.layoutNodes[k];-1===I.indexOf(O.id);)O=o.layoutNodes[o.idToIndex[O.parentId]],M++;C*=M*n.nestingFactor}D.idealLength=C,D.elasticity=N,o.layoutEdges.push(D)}return o},Do=function(e,t,n){var r=Co(e,t,0,n);return 2>r.count?0:r.graph},Co=function e(t,n,r,i){var a=i.graphSet[r];if(-1<a.indexOf(t)&&-1<a.indexOf(n))return{count:2,graph:r};for(var o=0,s=0;s<a.length;s++){var l=a[s],u=i.idToIndex[l],c=i.layoutNodes[u].children;if(0!==c.length){var h=e(t,n,i.indexToGraph[i.idToIndex[c[0]]],i);if(0!==h.count){if(1!==h.count)return h;if(2===++o)break}}}return{count:o,graph:r}},No=function(e,t){for(var n=e.clientWidth,r=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*n,a.positionY=Math.random()*r)}},Ao=function(e,t,n){var r=e.boundingBox,i={x1:1/0,x2:-1/0,y1:1/0,y2:-1/0};return t.boundingBox&&(n.forEach((function(t){var n=e.layoutNodes[e.idToIndex[t.data("id")]];i.x1=Math.min(i.x1,n.positionX),i.x2=Math.max(i.x2,n.positionX),i.y1=Math.min(i.y1,n.positionY),i.y2=Math.max(i.y2,n.positionY)})),i.w=i.x2-i.x1,i.h=i.y2-i.y1),function(n,a){var o=e.layoutNodes[e.idToIndex[n.data("id")]];if(t.boundingBox){var s=(o.positionX-i.x1)/i.w,l=(o.positionY-i.y1)/i.h;return{x:r.x1+s*r.w,y:r.y1+l*r.h}}return{x:o.positionX,y:o.positionY}}},Lo=function(e,t,n){var r=n.layout,i=n.eles.nodes(),a=Ao(e,n,i);i.positions(a),!0!==e.ready&&(e.ready=!0,r.one("layoutready",n.ready),r.emit({type:"layoutready",layout:this}))},ko=function(e,t,n){So(e,t),Ro(e),Bo(e,t),Fo(e),zo(e)},So=function(e,t){for(var n=0;n<e.graphSet.length;n++)for(var r=e.graphSet[n],i=r.length,a=0;a<i;a++)for(var o=e.layoutNodes[e.idToIndex[r[a]]],s=a+1;s<i;s++){var l=e.layoutNodes[e.idToIndex[r[s]]];Mo(o,l,e,t)}},Io=function(e){return-e+2*e*Math.random()},Mo=function(e,t,n,r){if(e.cmptId===t.cmptId||n.isCompound){var i=t.positionX-e.positionX,a=t.positionY-e.positionY;0===i&&0===a&&(i=Io(1),a=Io(1));var o=Oo(e,t,i,a);if(o>0)var s=(u=r.nodeOverlap*o)*i/(f=Math.sqrt(i*i+a*a)),l=u*a/f;else{var u,c=Po(e,i,a),h=Po(t,-1*i,-1*a),d=h.x-c.x,p=h.y-c.y,g=d*d+p*p,f=Math.sqrt(g);s=(u=(e.nodeRepulsion+t.nodeRepulsion)/g)*d/f,l=u*p/f}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},Oo=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},Po=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,l=a/o,u={};return 0===t&&0<n||0===t&&0>n?(u.x=r,u.y=i+a/2,u):0<t&&-1*l<=s&&s<=l?(u.x=r+o/2,u.y=i+o*n/2/t,u):0>t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=i-o*n/2/t,u):0<n&&(s<=-1*l||s>=l)?(u.x=r+a*t/2/n,u.y=i+a/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-a*t/2/n,u.y=i-a/2,u):u},Ro=function(e,t){for(var n=0;n<e.edgeSize;n++){var r=e.layoutEdges[n],i=e.idToIndex[r.sourceId],a=e.layoutNodes[i],o=e.idToIndex[r.targetId],s=e.layoutNodes[o],l=s.positionX-a.positionX,u=s.positionY-a.positionY;if(0!==l||0!==u){var c=Po(a,l,u),h=Po(s,-1*l,-1*u),d=h.x-c.x,p=h.y-c.y,g=Math.sqrt(d*d+p*p),f=Math.pow(r.idealLength-g,2)/r.elasticity;if(0!==g)var v=f*d/g,y=f*p/g;else v=0,y=0;a.isLocked||(a.offsetX+=v,a.offsetY+=y),s.isLocked||(s.offsetX-=v,s.offsetY-=y)}}},Bo=function(e,t){if(0!==t.gravity)for(var n=0;n<e.graphSet.length;n++){var r=e.graphSet[n],i=r.length;if(0===n)var a=e.clientHeight/2,o=e.clientWidth/2;else{var s=e.layoutNodes[e.idToIndex[r[0]]],l=e.layoutNodes[e.idToIndex[s.parentId]];a=l.positionX,o=l.positionY}for(var u=0;u<i;u++){var c=e.layoutNodes[e.idToIndex[r[u]]];if(!c.isLocked){var h=a-c.positionX,d=o-c.positionY,p=Math.sqrt(h*h+d*d);if(p>1){var g=t.gravity*h/p,f=t.gravity*d/p;c.offsetX+=g,c.offsetY+=f}}}}},Fo=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0<l.length&&!s.isLocked){for(var u=s.offsetX,c=s.offsetY,h=0;h<l.length;h++){var d=e.layoutNodes[e.idToIndex[l[h]]];d.offsetX+=u,d.offsetY+=c,n[++i]=l[h]}s.offsetX=0,s.offsetY=0}}},zo=function(e,t){for(var n=0;n<e.nodeSize;n++){0<(i=e.layoutNodes[n]).children.length&&(i.maxX=void 0,i.minX=void 0,i.maxY=void 0,i.minY=void 0)}for(n=0;n<e.nodeSize;n++){if(!(0<(i=e.layoutNodes[n]).children.length||i.isLocked)){var r=Go(i.offsetX,i.offsetY,e.temperature);i.positionX+=r.x,i.positionY+=r.y,i.offsetX=0,i.offsetY=0,i.minX=i.positionX-i.width,i.maxX=i.positionX+i.width,i.minY=i.positionY-i.height,i.maxY=i.positionY+i.height,Yo(i,e)}}for(n=0;n<e.nodeSize;n++){var i;0<(i=e.layoutNodes[n]).children.length&&!i.isLocked&&(i.positionX=(i.maxX+i.minX)/2,i.positionY=(i.maxY+i.minY)/2,i.width=i.maxX-i.minX,i.height=i.maxY-i.minY)}},Go=function(e,t,n){var r=Math.sqrt(e*e+t*t);if(r>n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Yo=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLeft<i.minX)&&(i.minX=t.minX-i.padLeft,a=!0),(null==i.maxY||t.maxY+i.padBottom>i.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padTop<i.minY)&&(i.minY=t.minY-i.padTop,a=!0),a?e(i,n):void 0}},Xo=function(e,t){for(var n=e.layoutNodes,r=[],i=0;i<n.length;i++){var a=n[i],o=a.cmptId;(r[o]=r[o]||[]).push(a)}var s=0;for(i=0;i<r.length;i++){if(f=r[i]){f.x1=1/0,f.x2=-1/0,f.y1=1/0,f.y2=-1/0;for(var l=0;l<f.length;l++){var u=f[l];f.x1=Math.min(f.x1,u.positionX-u.width/2),f.x2=Math.max(f.x2,u.positionX+u.width/2),f.y1=Math.min(f.y1,u.positionY-u.height/2),f.y2=Math.max(f.y2,u.positionY+u.height/2)}f.w=f.x2-f.x1,f.h=f.y2-f.y1,s+=f.w*f.h}}r.sort((function(e,t){return t.w*t.h-e.w*e.h}));var c=0,h=0,d=0,p=0,g=Math.sqrt(s)*e.clientWidth/e.clientHeight;for(i=0;i<r.length;i++){var f;if(f=r[i]){for(l=0;l<f.length;l++){(u=f[l]).isLocked||(u.positionX+=c-f.x1,u.positionY+=h-f.y1)}c+=f.w+t.componentSpacing,d+=f.w+t.componentSpacing,p=Math.max(p,f.h),d>g&&(h+=p+t.componentSpacing,c=0,d=0,p=0)}}},Vo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Uo(e){this.options=Q({},Vo,e)}Uo.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=ft(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),l=Math.round(s),u=Math.round(a.w/a.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},h=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},d=t.rows,p=null!=t.cols?t.cols:t.columns;if(null!=d&&null!=p)l=d,u=p;else if(null!=d&&null==p)l=d,u=Math.ceil(o/l);else if(null==d&&null!=p)u=p,l=Math.ceil(o/u);else if(u*l>o){var g=c(),f=h();(g-1)*f>=o?c(g-1):(f-1)*g>=o&&h(f-1)}else for(;u*l<o;){var v=c(),y=h();(y+1)*v>=o?h(y+1):c(v+1)}var m=a.w/u,b=a.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x<i.length;x++){var w=i[x],E=w._private.position;null!=E.x&&null!=E.y||(E.x=0,E.y=0);var _=w.layoutDimensions(t),T=t.avoidOverlapPadding,D=_.w+T,C=_.h+T;m=Math.max(m,D),b=Math.max(b,C)}for(var N={},A=function(e,t){return!!N["c-"+e+"-"+t]},L=function(e,t){N["c-"+e+"-"+t]=!0},k=0,S=0,I=function(){++S>=u&&(S=0,k++)},M={},O=0;O<i.length;O++){var P=i[O],R=t.position(P);if(R&&(void 0!==R.row||void 0!==R.col)){var B={row:R.row,col:R.col};if(void 0===B.col)for(B.col=0;A(B.row,B.col);)B.col++;else if(void 0===B.row)for(B.row=0;A(B.row,B.col);)B.row++;M[P.id()]=B,L(B.row,B.col)}}i.layoutPositions(this,t,(function(e,t){var n,r;if(e.locked()||e.isParent())return!1;var i=M[e.id()];if(i)n=i.col*m+m/2+a.x1,r=i.row*b+b/2+a.y1;else{for(;A(k,S);)I();n=S*m+m/2+a.x1,r=k*b+b/2+a.y1,L(k,S),I()}return{x:n,y:r}}))}return this};var jo={ready:function(){},stop:function(){}};function qo(e){this.options=Q({},jo,e)}qo.prototype.run=function(){var e=this.options,t=e.eles,n=this;return e.cy,n.emit("layoutstart"),t.nodes().positions((function(){return{x:0,y:0}})),n.one("layoutready",e.ready),n.emit("layoutready"),n.one("layoutstop",e.stop),n.emit("layoutstop"),this},qo.prototype.stop=function(){return this};var Ho={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,spacingFactor:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Wo(e){this.options=Q({},Ho,e)}Wo.prototype.run=function(){var e=this.options,t=e.eles.nodes(),n=L(e.positions);return t.layoutPositions(this,e,(function(t,r){var i=function(t){if(null==e.positions)return function(e){return{x:e.x,y:e.y}}(t.position());if(n)return e.positions(t);var r=e.positions[t._private.data.id];return null==r?null:r}(t);return!t.locked()&&null!=i&&i})),this};var $o={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Ko(e){this.options=Q({},$o,e)}Ko.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,r=ft(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()});return n.nodes().layoutPositions(this,e,(function(e,t){return{x:r.x1+Math.round(Math.random()*r.w),y:r.y1+Math.round(Math.random()*r.h)}})),this};var Zo=[{name:"breadthfirst",impl:vo},{name:"circle",impl:mo},{name:"concentric",impl:wo},{name:"cose",impl:_o},{name:"grid",impl:Uo},{name:"null",impl:qo},{name:"preset",impl:Wo},{name:"random",impl:Ko}];function Qo(e){this.options=e,this.notifications=0}var Jo=function(){},es=function(){throw new Error("A headless instance can not render images")};Qo.prototype={recalculateRenderedStyle:Jo,notify:function(){this.notifications++},init:Jo,isHeadless:function(){return!0},png:es,jpg:es};var ts={arrowShapeWidth:.3,registerArrowShapes:function(){var e=this.arrowShapes={},t=this,n=function(e,t,n,r,i,a,o){var s=i.x-n/2-o,l=i.x+n/2+o,u=i.y-n/2-o,c=i.y+n/2+o;return s<=e&&e<=l&&u<=t&&t<=c},r=function(e,t,n,r,i){var a=e*Math.cos(r)-t*Math.sin(r),o=(e*Math.sin(r)+t*Math.cos(r))*n;return{x:a*n+i.x,y:o+i.y}},i=function(e,t,n,i){for(var a=[],o=0;o<e.length;o+=2){var s=e[o],l=e[o+1];a.push(r(s,l,t,n,i))}return a},a=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];t.push(r.x,r.y)}return t},o=function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").pfValue*2},s=function(r,s){A(s)&&(s=e[s]),e[r]=Q({name:r,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,n,r,o,s){var l=a(i(this.points,n+2*s,r,o));return Lt(e,t,l)},roughCollide:n,draw:function(e,n,r,a){var o=i(this.points,n,r,a);t.arrowShapeImpl("polygon")(e,o)},spacing:function(e){return 0},gap:o},s)};s("none",{collide:_e,roughCollide:_e,draw:De,spacing:Te,gap:Te}),s("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),s("arrow","triangle"),s("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:n,draw:function(e,n,a,o,s){var l=i(this.points,n,a,o),u=this.controlPoint,c=r(u[0],u[1],n,a,o);t.arrowShapeImpl(this.name)(e,l,c)},gap:function(e){return.8*o(e)}}),s("triangle-tee",{points:[0,0,.15,-.3,-.15,-.3,0,0],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.pointsTee,n+2*l,r,o));return Lt(e,t,u)||Lt(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.pointsTee,n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("circle-triangle",{radius:.15,pointsTr:[0,-.15,.15,-.45,-.15,-.45,0,-.15],collide:function(e,t,n,r,o,s,l){var u=o,c=Math.pow(u.x-e,2)+Math.pow(u.y-t,2)<=Math.pow((n+2*l)*this.radius,2),h=a(i(this.points,n+2*l,r,o));return Lt(e,t,h)||c},draw:function(e,n,r,a,o){var s=i(this.pointsTr,n,r,a);t.arrowShapeImpl(this.name)(e,s,a.x,a.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("triangle-cross",{points:[0,0,.15,-.3,-.15,-.3,0,0],baseCrossLinePts:[-.15,-.4,-.15,-.4,.15,-.4,.15,-.4],crossLinePts:function(e,t){var n=this.baseCrossLinePts.slice(),r=t/e;return n[3]=n[3]-r,n[5]=n[5]-r,n},collide:function(e,t,n,r,o,s,l){var u=a(i(this.points,n+2*l,r,o)),c=a(i(this.crossLinePts(n,s),n+2*l,r,o));return Lt(e,t,u)||Lt(e,t,c)},draw:function(e,n,r,a,o){var s=i(this.points,n,r,a),l=i(this.crossLinePts(n,o),n,r,a);t.arrowShapeImpl(this.name)(e,s,l)}}),s("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return.525*o(e)}}),s("circle",{radius:.15,collide:function(e,t,n,r,i,a,o){var s=i;return Math.pow(s.x-e,2)+Math.pow(s.y-t,2)<=Math.pow((n+2*o)*this.radius,2)},draw:function(e,n,r,i,a){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*n)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.radius}}),s("tee",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),s("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),s("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}}),s("chevron",{points:[0,0,-.15,-.15,-.1,-.2,0,-.1,.1,-.2,.15,-.15],gap:function(e){return.95*e.pstyle("width").pfValue*e.pstyle("arrow-scale").value}})}},ns={projectIntoViewport:function(e,t){var n=this.cy,r=this.findContainerClientCoords(),i=r[0],a=r[1],o=r[4],s=n.pan(),l=n.zoom();return[((e-i)/o-s.x)/l,((t-a)/o-s.y)/l]},findContainerClientCoords:function(){if(this.containerBB)return this.containerBB;var e=this.container,t=e.getBoundingClientRect(),n=this.cy.window().getComputedStyle(e),r=function(e){return parseFloat(n.getPropertyValue(e))},i=r("padding-left"),a=r("padding-right"),o=r("padding-top"),s=r("padding-bottom"),l=r("border-left-width"),u=r("border-right-width"),c=r("border-top-width"),h=(r("border-bottom-width"),e.clientWidth),d=e.clientHeight,p=i+a,g=o+s,f=l+u,v=t.width/(h+f),y=h-p,m=d-g,b=t.left+i+l,x=t.top+o+c;return this.containerBB=[b,x,y,m,v]},invalidateContainerClientCoordsCache:function(){this.containerBB=null},findNearestElement:function(e,t,n,r){return this.findNearestElements(e,t,n,r)[0]},findNearestElements:function(e,t,n,r){var i,a,o=this,s=this,l=s.getCachedZSortedEles(),u=[],c=s.cy.zoom(),h=s.cy.hasCompoundNodes(),d=(r?24:8)/c,p=(r?8:2)/c,g=(r?8:2)/c,f=1/0;function v(e,t){if(e.isNode()){if(a)return;a=e,u.push(e)}if(e.isEdge()&&(null==t||t<f))if(i){if(i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value&&i.pstyle("z-compound-depth").value===e.pstyle("z-compound-depth").value)for(var n=0;n<u.length;n++)if(u[n].isEdge()){u[n]=e,i=e,f=null!=t?t:f;break}}else u.push(e),i=e,f=null!=t?t:f}function y(n){var r=n.outerWidth()+2*p,i=n.outerHeight()+2*p,a=r/2,l=i/2,u=n.position();if(u.x-a<=e&&e<=u.x+a&&u.y-l<=t&&t<=u.y+l&&s.nodeShapes[o.getNodeShape(n)].checkPoint(e,t,0,r,i,u.x,u.y))return v(n,0),!0}function m(n){var r,i=n._private,a=i.rscratch,l=n.pstyle("width").pfValue,c=n.pstyle("arrow-scale").value,p=l/2+d,g=p*p,f=2*p,m=i.source,b=i.target;if("segments"===a.edgeType||"straight"===a.edgeType||"haystack"===a.edgeType){for(var x=a.allpts,w=0;w+3<x.length;w+=2)if(Dt(e,t,x[w],x[w+1],x[w+2],x[w+3],f)&&g>(r=At(e,t,x[w],x[w+1],x[w+2],x[w+3])))return v(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(x=a.allpts,w=0;w+5<a.allpts.length;w+=4)if(Ct(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5],f)&&g>(r=Nt(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return v(n,r),!0;m=m||i.source,b=b||i.target;var E=o.getArrowWidth(l,c),_=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(w=0;w<_.length;w++){var T=_[w],D=s.arrowShapes[n.pstyle(T.name+"-arrow-shape").value],C=n.pstyle("width").pfValue;if(D.roughCollide(e,t,E,T.angle,{x:T.x,y:T.y},C,d)&&D.collide(e,t,E,T.angle,{x:T.x,y:T.y},C,d))return v(n),!0}h&&u.length>0&&(y(m),y(b))}function b(e,t,n){return Re(e,t,n)}function x(n,r){var i,a=n._private,o=g;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],l=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(a.rscratch,"labelX",r),c=b(a.rscratch,"labelY",r),h=b(a.rscratch,"labelAngle",r),d=n.pstyle(i+"text-margin-x").pfValue,p=n.pstyle(i+"text-margin-y").pfValue,f=s.x1-o-d,y=s.x2+o-d,m=s.y1-o-p,x=s.y2+o-p;if(h){var w=Math.cos(h),E=Math.sin(h),_=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},T=_(f,m),D=_(f,x),C=_(y,m),N=_(y,x),A=[T.x+d,T.y+p,C.x+d,C.y+p,N.x+d,N.y+p,D.x+d,D.y+p];if(Lt(e,t,A))return v(n),!0}else if(Et(s,e,t))return v(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){for(var i,a,o=this.getCachedZSortedEles().interactive,s=[],l=Math.min(e,n),u=Math.max(e,n),c=Math.min(t,r),h=Math.max(t,r),d=ft({x1:e=l,y1:t=c,x2:n=u,y2:r=h}),p=0;p<o.length;p++){var g=o[p];if(g.isNode()){var f=g,v=f.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1});wt(d,v)&&!_t(v,d)&&s.push(f)}else{var y=g,m=y._private,b=m.rscratch;if(null!=b.startX&&null!=b.startY&&!Et(d,b.startX,b.startY))continue;if(null!=b.endX&&null!=b.endY&&!Et(d,b.endX,b.endY))continue;if("bezier"===b.edgeType||"multibezier"===b.edgeType||"self"===b.edgeType||"compound"===b.edgeType||"segments"===b.edgeType||"haystack"===b.edgeType){for(var x=m.rstyle.bezierPts||m.rstyle.linePts||m.rstyle.haystackPts,w=!0,E=0;E<x.length;E++)if(i=d,a=x[E],!Et(i,a.x,a.y)){w=!1;break}w&&s.push(y)}else"haystack"!==b.edgeType&&"straight"!==b.edgeType||s.push(y)}}return s}},rs={calculateArrowAngles:function(e){var t,n,r,i,a,o,s=e._private.rscratch,l="haystack"===s.edgeType,u="bezier"===s.edgeType,c="multibezier"===s.edgeType,h="segments"===s.edgeType,d="compound"===s.edgeType,p="self"===s.edgeType;if(l?(r=s.haystackPts[0],i=s.haystackPts[1],a=s.haystackPts[2],o=s.haystackPts[3]):(r=s.arrowStartX,i=s.arrowStartY,a=s.arrowEndX,o=s.arrowEndY),f=s.midX,v=s.midY,h)t=r-s.segpts[0],n=i-s.segpts[1];else if(c||d||p||u){var g=s.allpts;t=r-dt(g[0],g[2],g[4],.1),n=i-dt(g[1],g[3],g[5],.1)}else t=r-f,n=i-v;s.srcArrowAngle=ot(t,n);var f=s.midX,v=s.midY;if(l&&(f=(r+a)/2,v=(i+o)/2),t=a-r,n=o-i,h)if((g=s.allpts).length/2%2==0){var y=(m=g.length/2)-2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else{y=(m=g.length/2-1)-2;var m,b=m+2;t=g[m]-g[y],n=g[m+1]-g[y+1]}else if(c||d||p){var x,w,E,_,g=s.allpts;if(s.ctrlpts.length/2%2==0){var T=(D=(C=g.length/2-1)+2)+2;x=dt(g[C],g[D],g[T],0),w=dt(g[C+1],g[D+1],g[T+1],0),E=dt(g[C],g[D],g[T],1e-4),_=dt(g[C+1],g[D+1],g[T+1],1e-4)}else{var D,C;T=(D=g.length/2-1)+2;x=dt(g[C=D-2],g[D],g[T],.4999),w=dt(g[C+1],g[D+1],g[T+1],.4999),E=dt(g[C],g[D],g[T],.5),_=dt(g[C+1],g[D+1],g[T+1],.5)}t=E-x,n=_-w}(s.midtgtArrowAngle=ot(t,n),s.midDispX=t,s.midDispY=n,t*=-1,n*=-1,h)&&((g=s.allpts).length/2%2==0||(t=-(g[b=(m=g.length/2-1)+2]-g[m]),n=-(g[b+1]-g[m+1])));if(s.midsrcArrowAngle=ot(t,n),h)t=a-s.segpts[s.segpts.length-2],n=o-s.segpts[s.segpts.length-1];else if(c||d||p||u){var N=(g=s.allpts).length;t=a-dt(g[N-6],g[N-4],g[N-2],.9),n=o-dt(g[N-5],g[N-3],g[N-1],.9)}else t=a-f,n=o-v;s.tgtArrowAngle=ot(t,n)}};rs.getArrowWidth=rs.getArrowHeight=function(e,t){var n=this.arrowWidthCache=this.arrowWidthCache||{},r=n[e+", "+t];return r||(r=Math.max(Math.pow(13.37*e,.9),29)*t,n[e+", "+t]=r,r)};var is={};function as(e){var t=[];if(null!=e){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1];t.push({x:r,y:i})}return t}}is.findMidptPtsEtc=function(e,t){var n,r=t.posPts,i=t.intersectionPts,a=t.vectorNormInverse,o=e.pstyle("source-endpoint"),s=e.pstyle("target-endpoint"),l=null!=o.units&&null!=s.units;switch(e.pstyle("edge-distances").value){case"node-position":n=r;break;case"intersection":n=i;break;case"endpoints":if(l){var u=b(this.manualEndptToPx(e.source()[0],o),2),c=u[0],h=u[1],d=b(this.manualEndptToPx(e.target()[0],s),2),p=d[0],g=d[1],f={x1:c,y1:h,x2:p,y2:g};a=function(e,t,n,r){var i=r-t,a=n-e,o=Math.sqrt(a*a+i*i);return{x:-i/o,y:a/o}}(c,h,p,g),n=f}else Ae("Edge ".concat(e.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),n=i}return{midptPts:n,vectorNormInverse:a}},is.findHaystackPoints=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=n._private,i=r.rscratch;if(!i.haystack){var a=2*Math.random()*Math.PI;i.source={x:Math.cos(a),y:Math.sin(a)},a=2*Math.random()*Math.PI,i.target={x:Math.cos(a),y:Math.sin(a)}}var o=r.source,s=r.target,l=o.position(),u=s.position(),c=o.width(),h=s.width(),d=o.height(),p=s.height(),g=n.pstyle("haystack-radius").value/2;i.haystackPts=i.allpts=[i.source.x*c*g+l.x,i.source.y*d*g+l.y,i.target.x*h*g+u.x,i.target.y*p*g+u.y],i.midX=(i.allpts[0]+i.allpts[2])/2,i.midY=(i.allpts[1]+i.allpts[3])/2,i.edgeType="haystack",i.haystack=!0,this.storeEdgeProjections(n),this.calculateArrowAngles(n),this.recalculateEdgeLabelProjections(n),this.calculateLabelAngles(n)}},is.findSegmentsPoints=function(e,t){var n=e._private.rscratch,r=e.pstyle("segment-weights"),i=e.pstyle("segment-distances"),a=Math.min(r.pfValue.length,i.pfValue.length);n.edgeType="segments",n.segpts=[];for(var o=0;o<a;o++){var s=r.pfValue[o],l=i.pfValue[o],u=1-s,c=s,h=this.findMidptPtsEtc(e,t),d=h.midptPts,p=h.vectorNormInverse,g={x:d.x1*u+d.x2*c,y:d.y1*u+d.y2*c};n.segpts.push(g.x+p.x*l,g.y+p.y*l)}},is.findLoopPoints=function(e,t,n,r){var i=e._private.rscratch,a=t.dirCounts,o=t.srcPos,s=e.pstyle("control-point-distances"),l=s?s.pfValue[0]:void 0,u=e.pstyle("loop-direction").pfValue,c=e.pstyle("loop-sweep").pfValue,h=e.pstyle("control-point-step-size").pfValue;i.edgeType="self";var d=n,p=h;r&&(d=0,p=l);var g=u-Math.PI/2,f=g-c/2,v=g+c/2,y=String(u+"_"+c);d=void 0===a[y]?a[y]=0:++a[y],i.ctrlpts=[o.x+1.4*Math.cos(f)*p*(d/3+1),o.y+1.4*Math.sin(f)*p*(d/3+1),o.x+1.4*Math.cos(v)*p*(d/3+1),o.y+1.4*Math.sin(v)*p*(d/3+1)]},is.findCompoundLoopPoints=function(e,t,n,r){var i=e._private.rscratch;i.edgeType="compound";var a=t.srcPos,o=t.tgtPos,s=t.srcW,l=t.srcH,u=t.tgtW,c=t.tgtH,h=e.pstyle("control-point-step-size").pfValue,d=e.pstyle("control-point-distances"),p=d?d.pfValue[0]:void 0,g=n,f=h;r&&(g=0,f=p);var v={x:a.x-s/2,y:a.y-l/2},y={x:o.x-u/2,y:o.y-c/2},m={x:Math.min(v.x,y.x),y:Math.min(v.y,y.y)},b=Math.max(.5,Math.log(.01*s)),x=Math.max(.5,Math.log(.01*u));i.ctrlpts=[m.x,m.y-(1+Math.pow(50,1.12)/100)*f*(g/3+1)*b,m.x-(1+Math.pow(50,1.12)/100)*f*(g/3+1)*x,m.y]},is.findStraightEdgePoints=function(e){e._private.rscratch.edgeType="straight"},is.findBezierPoints=function(e,t,n,r,i){var a=e._private.rscratch,o=e.pstyle("control-point-step-size").pfValue,s=e.pstyle("control-point-distances"),l=e.pstyle("control-point-weights"),u=s&&l?Math.min(s.value.length,l.value.length):1,c=s?s.pfValue[0]:void 0,h=l.value[0],d=r;a.edgeType=d?"multibezier":"bezier",a.ctrlpts=[];for(var p=0;p<u;p++){var g=(.5-t.eles.length/2+n)*o*(i?-1:1),f=void 0,v=lt(g);d&&(c=s?s.pfValue[p]:o,h=l.value[p]);var y=void 0!==(f=r?c:void 0!==c?v*c:void 0)?f:g,m=1-h,b=h,x=this.findMidptPtsEtc(e,t),w=x.midptPts,E=x.vectorNormInverse,_={x:w.x1*m+w.x2*b,y:w.y1*m+w.y2*b};a.ctrlpts.push(_.x+E.x*y,_.y+E.y*y)}},is.findTaxiPoints=function(e,t){var n=e._private.rscratch;n.edgeType="segments";var r="vertical",i="horizontal",a="leftward",o="rightward",s="downward",l="upward",u=t.posPts,c=t.srcW,h=t.srcH,d=t.tgtW,p=t.tgtH,g="node-position"!==e.pstyle("edge-distances").value,f=e.pstyle("taxi-direction").value,v=f,y=e.pstyle("taxi-turn"),m="%"===y.units,b=y.pfValue,x=b<0,w=e.pstyle("taxi-turn-min-distance").pfValue,E=g?(c+d)/2:0,_=g?(h+p)/2:0,T=u.x2-u.x1,D=u.y2-u.y1,C=function(e,t){return e>0?Math.max(e-t,0):Math.min(e+t,0)},N=C(T,E),A=C(D,_),L=!1;"auto"===v?f=Math.abs(N)>Math.abs(A)?i:r:v===l||v===s?(f=r,L=!0):v!==a&&v!==o||(f=i,L=!0);var k,S=f===r,I=S?A:N,M=S?D:T,O=lt(M),P=!1;(L&&(m||x)||!(v===s&&M<0||v===l&&M>0||v===a&&M>0||v===o&&M<0)||(I=(O*=-1)*Math.abs(I),P=!0),m)?k=(b<0?1+b:b)*I:k=(b<0?I:0)+b*O;var R=function(e){return Math.abs(e)<w||Math.abs(e)>=Math.abs(I)},B=R(k),F=R(Math.abs(I)-Math.abs(k));if((B||F)&&!P)if(S){var z=Math.abs(M)<=h/2,G=Math.abs(T)<=d/2;if(z){var Y=(u.x1+u.x2)/2,X=u.y1,V=u.y2;n.segpts=[Y,X,Y,V]}else if(G){var U=(u.y1+u.y2)/2,j=u.x1,q=u.x2;n.segpts=[j,U,q,U]}else n.segpts=[u.x1,u.y2]}else{var H=Math.abs(M)<=c/2,W=Math.abs(D)<=p/2;if(H){var $=(u.y1+u.y2)/2,K=u.x1,Z=u.x2;n.segpts=[K,$,Z,$]}else if(W){var Q=(u.x1+u.x2)/2,J=u.y1,ee=u.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[u.x2,u.y1]}else if(S){var te=u.y1+k+(g?h/2*O:0),ne=u.x1,re=u.x2;n.segpts=[ne,te,re,te]}else{var ie=u.x1+k+(g?c/2*O:0),ae=u.y1,oe=u.y2;n.segpts=[ie,ae,ie,oe]}},is.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,h=!I(n.startX)||!I(n.startY),d=!I(n.arrowStartX)||!I(n.arrowStartY),p=!I(n.endX)||!I(n.endY),g=!I(n.arrowEndX)||!I(n.arrowEndY),f=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),v=ut({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),y=v<f,m=ut({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.endX,y:n.endY}),b=m<f,x=!1;if(h||d||y){x=!0;var w={x:n.ctrlpts[0]-r.x,y:n.ctrlpts[1]-r.y},E=Math.sqrt(w.x*w.x+w.y*w.y),_={x:w.x/E,y:w.y/E},T=Math.max(a,o),D={x:n.ctrlpts[0]+2*_.x*T,y:n.ctrlpts[1]+2*_.y*T},C=u.intersectLine(r.x,r.y,a,o,D.x,D.y,0);y?(n.ctrlpts[0]=n.ctrlpts[0]+_.x*(f-v),n.ctrlpts[1]=n.ctrlpts[1]+_.y*(f-v)):(n.ctrlpts[0]=C[0]+_.x*f,n.ctrlpts[1]=C[1]+_.y*f)}if(p||g||b){x=!0;var N={x:n.ctrlpts[0]-i.x,y:n.ctrlpts[1]-i.y},A=Math.sqrt(N.x*N.x+N.y*N.y),L={x:N.x/A,y:N.y/A},k=Math.max(a,o),S={x:n.ctrlpts[0]+2*L.x*k,y:n.ctrlpts[1]+2*L.y*k},M=c.intersectLine(i.x,i.y,s,l,S.x,S.y,0);b?(n.ctrlpts[0]=n.ctrlpts[0]+L.x*(f-m),n.ctrlpts[1]=n.ctrlpts[1]+L.y*(f-m)):(n.ctrlpts[0]=M[0]+L.x*f,n.ctrlpts[1]=M[1]+L.y*f)}x&&this.findEndpoints(e)}},is.storeAllpts=function(e){var t=e._private.rscratch;if("multibezier"===t.edgeType||"bezier"===t.edgeType||"self"===t.edgeType||"compound"===t.edgeType){t.allpts=[],t.allpts.push(t.startX,t.startY);for(var n=0;n+1<t.ctrlpts.length;n+=2)t.allpts.push(t.ctrlpts[n],t.ctrlpts[n+1]),n+3<t.ctrlpts.length&&t.allpts.push((t.ctrlpts[n]+t.ctrlpts[n+2])/2,(t.ctrlpts[n+1]+t.ctrlpts[n+3])/2);var r;t.allpts.push(t.endX,t.endY),t.ctrlpts.length/2%2==0?(r=t.allpts.length/2-1,t.midX=t.allpts[r],t.midY=t.allpts[r+1]):(r=t.allpts.length/2-3,.5,t.midX=dt(t.allpts[r],t.allpts[r+2],t.allpts[r+4],.5),t.midY=dt(t.allpts[r+1],t.allpts[r+3],t.allpts[r+5],.5))}else if("straight"===t.edgeType)t.allpts=[t.startX,t.startY,t.endX,t.endY],t.midX=(t.startX+t.endX+t.arrowStartX+t.arrowEndX)/4,t.midY=(t.startY+t.endY+t.arrowStartY+t.arrowEndY)/4;else if("segments"===t.edgeType)if(t.allpts=[],t.allpts.push(t.startX,t.startY),t.allpts.push.apply(t.allpts,t.segpts),t.allpts.push(t.endX,t.endY),t.segpts.length%4==0){var i=t.segpts.length/2,a=i-2;t.midX=(t.segpts[a]+t.segpts[i])/2,t.midY=(t.segpts[a+1]+t.segpts[i+1])/2}else{var o=t.segpts.length/2-1;t.midX=t.segpts[o],t.midY=t.segpts[o+1]}},is.checkForInvalidEdgeWarning=function(e){var t=e[0]._private.rscratch;t.nodesOverlap||I(t.startX)&&I(t.startY)&&I(t.endX)&&I(t.endY)?t.loggedErr=!1:t.loggedErr||(t.loggedErr=!0,Ae("Edge `"+e.id()+"` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap."))},is.findEdgeControlPoints=function(e){var t=this;if(e&&0!==e.length){for(var n=this,r=n.cy.hasCompoundNodes(),i={map:new Fe,get:function(e){var t=this.map.get(e[0]);return null!=t?t.get(e[1]):null},set:function(e,t){var n=this.map.get(e[0]);null==n&&(n=new Fe,this.map.set(e[0],n)),n.set(e[1],t)}},a=[],o=[],s=0;s<e.length;s++){var l=e[s],u=l._private,c=l.pstyle("curve-style").value;if(!l.removed()&&l.takesUpSpace())if("haystack"!==c){var h="unbundled-bezier"===c||"segments"===c||"straight"===c||"straight-triangle"===c||"taxi"===c,d="unbundled-bezier"===c||"bezier"===c,p=u.source,g=u.target,f=[p.poolIndex(),g.poolIndex()].sort(),v=i.get(f);null==v&&(v={eles:[]},i.set(f,v),a.push(f)),v.eles.push(l),h&&(v.hasUnbundled=!0),d&&(v.hasBezier=!0)}else o.push(l)}for(var y=function(e){var o=a[e],s=i.get(o),l=void 0;if(!s.hasUnbundled){var u=s.eles[0].parallelEdges().filter((function(e){return e.isBundledBezier()}));Pe(s.eles),u.forEach((function(e){return s.eles.push(e)})),s.eles.sort((function(e,t){return e.poolIndex()-t.poolIndex()}))}var c=s.eles[0],h=c.source(),d=c.target();if(h.poolIndex()>d.poolIndex()){var p=h;h=d,d=p}var g=s.srcPos=h.position(),f=s.tgtPos=d.position(),v=s.srcW=h.outerWidth(),y=s.srcH=h.outerHeight(),m=s.tgtW=d.outerWidth(),b=s.tgtH=d.outerHeight(),x=s.srcShape=n.nodeShapes[t.getNodeShape(h)],w=s.tgtShape=n.nodeShapes[t.getNodeShape(d)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var E=0;E<s.eles.length;E++){var _=s.eles[E],T=_[0]._private.rscratch,D=_.pstyle("curve-style").value,C="unbundled-bezier"===D||"segments"===D||"taxi"===D,N=!h.same(_.source());if(!s.calculatedIntersection&&h!==d&&(s.hasBezier||s.hasUnbundled)){s.calculatedIntersection=!0;var A=x.intersectLine(g.x,g.y,v,y,f.x,f.y,0),L=s.srcIntn=A,k=w.intersectLine(f.x,f.y,m,b,g.x,g.y,0),S=s.tgtIntn=k,M=s.intersectionPts={x1:A[0],x2:k[0],y1:A[1],y2:k[1]},O=s.posPts={x1:g.x,x2:f.x,y1:g.y,y2:f.y},P=k[1]-A[1],R=k[0]-A[0],B=Math.sqrt(R*R+P*P),F=s.vector={x:R,y:P},z=s.vectorNorm={x:F.x/B,y:F.y/B},G={x:-z.y,y:z.x};s.nodesOverlap=!I(B)||w.checkPoint(A[0],A[1],0,m,b,f.x,f.y)||x.checkPoint(k[0],k[1],0,v,y,g.x,g.y),s.vectorNormInverse=G,l={nodesOverlap:s.nodesOverlap,dirCounts:s.dirCounts,calculatedIntersection:!0,hasBezier:s.hasBezier,hasUnbundled:s.hasUnbundled,eles:s.eles,srcPos:f,tgtPos:g,srcW:m,srcH:b,tgtW:v,tgtH:y,srcIntn:S,tgtIntn:L,srcShape:w,tgtShape:x,posPts:{x1:O.x2,y1:O.y2,x2:O.x1,y2:O.y1},intersectionPts:{x1:M.x2,y1:M.y2,x2:M.x1,y2:M.y1},vector:{x:-F.x,y:-F.y},vectorNorm:{x:-z.x,y:-z.y},vectorNormInverse:{x:-G.x,y:-G.y}}}var Y=N?l:s;T.nodesOverlap=Y.nodesOverlap,T.srcIntn=Y.srcIntn,T.tgtIntn=Y.tgtIntn,r&&(h.isParent()||h.isChild()||d.isParent()||d.isChild())&&(h.parents().anySame(d)||d.parents().anySame(h)||h.same(d)&&h.isParent())?t.findCompoundLoopPoints(_,Y,E,C):h===d?t.findLoopPoints(_,Y,E,C):"segments"===D?t.findSegmentsPoints(_,Y):"taxi"===D?t.findTaxiPoints(_,Y):"straight"===D||!C&&s.eles.length%2==1&&E===Math.floor(s.eles.length/2)?t.findStraightEdgePoints(_):t.findBezierPoints(_,Y,E,C,N),t.findEndpoints(_),t.tryToCorrectInvalidPoints(_,Y),t.checkForInvalidEdgeWarning(_),t.storeAllpts(_),t.storeEdgeProjections(_),t.calculateArrowAngles(_),t.recalculateEdgeLabelProjections(_),t.calculateLabelAngles(_)}},m=0;m<a.length;m++)y(m);this.findHaystackPoints(o)}},is.getSegmentPoints=function(e){var t=e[0]._private.rscratch;if("segments"===t.edgeType)return this.recalculateRenderedStyle(e),as(t.segpts)},is.getControlPoints=function(e){var t=e[0]._private.rscratch,n=t.edgeType;if("bezier"===n||"multibezier"===n||"self"===n||"compound"===n)return this.recalculateRenderedStyle(e),as(t.ctrlpts)},is.getEdgeMidpoint=function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),{x:t.midX,y:t.midY}};var os={manualEndptToPx:function(e,t){var n=e.position(),r=e.outerWidth(),i=e.outerHeight();if(2===t.value.length){var a=[t.pfValue[0],t.pfValue[1]];return"%"===t.units[0]&&(a[0]=a[0]*r),"%"===t.units[1]&&(a[1]=a[1]*i),a[0]+=n.x,a[1]+=n.y,a}var o=t.pfValue[0];o=-Math.PI/2+o;var s=2*Math.max(r,i),l=[n.x+Math.cos(o)*s,n.y+Math.sin(o)*s];return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x,n.y,r,i,l[0],l[1],0)},findEndpoints:function(e){var t,n,r,i,a,o=this,s=e.source()[0],l=e.target()[0],u=s.position(),c=l.position(),h=e.pstyle("target-arrow-shape").value,d=e.pstyle("source-arrow-shape").value,p=e.pstyle("target-distance-from-node").pfValue,g=e.pstyle("source-distance-from-node").pfValue,f=e.pstyle("curve-style").value,v=e._private.rscratch,y=v.edgeType,m="self"===y||"compound"===y,b="bezier"===y||"multibezier"===y||m,x="bezier"!==y,w="straight"===y||"segments"===y,E="segments"===y,_=b||x||w,T=m||"taxi"===f,D=e.pstyle("source-endpoint"),C=T?"outside-to-node":D.value,N=e.pstyle("target-endpoint"),A=T?"outside-to-node":N.value;if(v.srcManEndpt=D,v.tgtManEndpt=N,b){var L=[v.ctrlpts[0],v.ctrlpts[1]];n=x?[v.ctrlpts[v.ctrlpts.length-2],v.ctrlpts[v.ctrlpts.length-1]]:L,r=L}else if(w){var k=E?v.segpts.slice(0,2):[c.x,c.y];n=E?v.segpts.slice(v.segpts.length-2):[u.x,u.y],r=k}if("inside-to-node"===A)t=[c.x,c.y];else if(N.units)t=this.manualEndptToPx(l,N);else if("outside-to-line"===A)t=v.tgtIntn;else if("outside-to-node"===A||"outside-to-node-or-label"===A?i=n:"outside-to-line"!==A&&"outside-to-line-or-label"!==A||(i=[u.x,u.y]),t=o.nodeShapes[this.getNodeShape(l)].intersectLine(c.x,c.y,l.outerWidth(),l.outerHeight(),i[0],i[1],0),"outside-to-node-or-label"===A||"outside-to-line-or-label"===A){var S=l._private.rscratch,M=S.labelWidth,O=S.labelHeight,P=S.labelX,R=S.labelY,B=M/2,F=O/2,z=l.pstyle("text-valign").value;"top"===z?R-=F:"bottom"===z&&(R+=F);var G=l.pstyle("text-halign").value;"left"===G?P-=B:"right"===G&&(P+=B);var Y=Bt(i[0],i[1],[P-B,R-F,P+B,R-F,P+B,R+F,P-B,R+F],c.x,c.y);if(Y.length>0){var X=u,V=ct(X,at(t)),U=ct(X,at(Y)),j=V;if(U<V&&(t=Y,j=U),Y.length>2)ct(X,{x:Y[2],y:Y[3]})<j&&(t=[Y[2],Y[3]])}}var q=Ft(t,n,o.arrowShapes[h].spacing(e)+p),H=Ft(t,n,o.arrowShapes[h].gap(e)+p);if(v.endX=H[0],v.endY=H[1],v.arrowEndX=q[0],v.arrowEndY=q[1],"inside-to-node"===C)t=[u.x,u.y];else if(D.units)t=this.manualEndptToPx(s,D);else if("outside-to-line"===C)t=v.srcIntn;else if("outside-to-node"===C||"outside-to-node-or-label"===C?a=r:"outside-to-line"!==C&&"outside-to-line-or-label"!==C||(a=[c.x,c.y]),t=o.nodeShapes[this.getNodeShape(s)].intersectLine(u.x,u.y,s.outerWidth(),s.outerHeight(),a[0],a[1],0),"outside-to-node-or-label"===C||"outside-to-line-or-label"===C){var W=s._private.rscratch,$=W.labelWidth,K=W.labelHeight,Z=W.labelX,Q=W.labelY,J=$/2,ee=K/2,te=s.pstyle("text-valign").value;"top"===te?Q-=ee:"bottom"===te&&(Q+=ee);var ne=s.pstyle("text-halign").value;"left"===ne?Z-=J:"right"===ne&&(Z+=J);var re=Bt(a[0],a[1],[Z-J,Q-ee,Z+J,Q-ee,Z+J,Q+ee,Z-J,Q+ee],u.x,u.y);if(re.length>0){var ie=c,ae=ct(ie,at(t)),oe=ct(ie,at(re)),se=ae;if(oe<ae&&(t=[re[0],re[1]],se=oe),re.length>2)ct(ie,{x:re[2],y:re[3]})<se&&(t=[re[2],re[3]])}}var le=Ft(t,r,o.arrowShapes[d].spacing(e)+g),ue=Ft(t,r,o.arrowShapes[d].gap(e)+g);v.startX=ue[0],v.startY=ue[1],v.arrowStartX=le[0],v.arrowStartY=le[1],_&&(I(v.startX)&&I(v.startY)&&I(v.endX)&&I(v.endY)?v.badLine=!1:v.badLine=!0)},getSourceEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[0],y:t.haystackPts[1]}:{x:t.arrowStartX,y:t.arrowStartY}},getTargetEndpoint:function(e){var t=e[0]._private.rscratch;return this.recalculateRenderedStyle(e),"haystack"===t.edgeType?{x:t.haystackPts[2],y:t.haystackPts[3]}:{x:t.arrowEndX,y:t.arrowEndY}}},ss={};function ls(e,t,n){for(var r=function(e,t,n,r){return dt(e,t,n,r)},i=t._private.rstyle.bezierPts,a=0;a<e.bezierProjPcts.length;a++){var o=e.bezierProjPcts[a];i.push({x:r(n[0],n[2],n[4],o),y:r(n[1],n[3],n[5],o)})}}ss.storeEdgeProjections=function(e){var t=e._private,n=t.rscratch,r=n.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===r||"bezier"===r||"self"===r||"compound"===r){t.rstyle.bezierPts=[];for(var i=0;i+5<n.allpts.length;i+=4)ls(this,e,n.allpts.slice(i,i+6))}else if("segments"===r){var a=t.rstyle.linePts=[];for(i=0;i+1<n.allpts.length;i+=2)a.push({x:n.allpts[i],y:n.allpts[i+1]})}else if("haystack"===r){var o=n.haystackPts;t.rstyle.haystackPts=[{x:o[0],y:o[1]},{x:o[2],y:o[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth},ss.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)};var us={recalculateNodeLabelProjection:function(e){var t=e.pstyle("label").strValue;if(!z(t)){var n,r,i=e._private,a=e.width(),o=e.height(),s=e.padding(),l=e.position(),u=e.pstyle("text-halign").strValue,c=e.pstyle("text-valign").strValue,h=i.rscratch,d=i.rstyle;switch(u){case"left":n=l.x-a/2-s;break;case"right":n=l.x+a/2+s;break;default:n=l.x}switch(c){case"top":r=l.y-o/2-s;break;case"bottom":r=l.y+o/2+s;break;default:r=l.y}h.labelX=n,h.labelY=r,d.labelX=n,d.labelY=r,this.calculateLabelAngles(e),this.applyLabelDimensions(e)}}},cs=function(e,t){var n=Math.atan(t/e);return 0===e&&n<0&&(n*=-1),n},hs=function(e,t){var n=t.x-e.x,r=t.y-e.y;return cs(n,r)};us.recalculateEdgeLabelProjections=function(e){var t,n=e._private,r=n.rscratch,i=this,a={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(a.mid||a.source||a.target){t={x:r.midX,y:r.midY};var o=function(e,t,r){Be(n.rscratch,e,t,r),Be(n.rstyle,e,t,r)};o("labelX",null,t.x),o("labelY",null,t.y);var s=cs(r.midDispX,r.midDispY);o("labelAutoAngle",null,s);var l=function e(){if(e.cache)return e.cache;for(var t=[],a=0;a+5<r.allpts.length;a+=4){var o={x:r.allpts[a],y:r.allpts[a+1]},s={x:r.allpts[a+2],y:r.allpts[a+3]},l={x:r.allpts[a+4],y:r.allpts[a+5]};t.push({p0:o,p1:s,p2:l,startDist:0,length:0,segments:[]})}var u=n.rstyle.bezierPts,c=i.bezierProjPcts.length;function h(e,t,n,r,i){var a=ut(t,n),o=e.segments[e.segments.length-1],s={p0:t,p1:n,t0:r,t1:i,startDist:o?o.startDist+o.length:0,length:a};e.segments.push(s),e.length+=a}for(var d=0;d<t.length;d++){var p=t[d],g=t[d-1];g&&(p.startDist=g.startDist+g.length),h(p,p.p0,u[d*c],0,i.bezierProjPcts[0]);for(var f=0;f<c-1;f++)h(p,u[d*c+f],u[d*c+f+1],i.bezierProjPcts[f],i.bezierProjPcts[f+1]);h(p,u[d*c+c-1],p.p2,i.bezierProjPcts[c-1],1)}return e.cache=t},u=function(n){var i,s="source"===n;if(a[n]){var u=e.pstyle(n+"-text-offset").pfValue;switch(r.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var c,h=l(),d=0,p=0,g=0;g<h.length;g++){for(var f=h[s?g:h.length-1-g],v=0;v<f.segments.length;v++){var y=f.segments[s?v:f.segments.length-1-v],m=g===h.length-1&&v===f.segments.length-1;if(d=p,(p+=y.length)>=u||m){c={cp:f,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-d)/x.length,E=x.t1-x.t0,_=s?x.t0+E*w:x.t1-E*w;_=gt(0,_,1),t=pt(b.p0,b.p1,b.p2,_),i=function(e,t,n,r){var i=gt(0,r-.001,1),a=gt(0,r+.001,1),o=pt(e,t,n,i),s=pt(e,t,n,a);return hs(o,s)}(b.p0,b.p1,b.p2,_);break;case"straight":case"segments":case"haystack":for(var T,D,C,N,A=0,L=r.allpts.length,k=0;k+3<L&&(s?(C={x:r.allpts[k],y:r.allpts[k+1]},N={x:r.allpts[k+2],y:r.allpts[k+3]}):(C={x:r.allpts[L-2-k],y:r.allpts[L-1-k]},N={x:r.allpts[L-4-k],y:r.allpts[L-3-k]}),D=A,!((A+=T=ut(C,N))>=u));k+=2);var S=(u-D)/T;S=gt(0,S,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=ut(e,t),s=i/o,l=a/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(C,N,S),i=hs(C,N)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};u("source"),u("target"),this.applyLabelDimensions(e)}},us.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},us.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Re(n.rscratch,"labelWrapCachedLines",t)||[],l="wrap"!==o?1:Math.max(s.length,1),u=i.height/l,c=u*a,h=i.width,d=i.height+(l-1)*(a-1)*u;Be(n.rstyle,"labelWidth",t,h),Be(n.rscratch,"labelWidth",t,h),Be(n.rstyle,"labelHeight",t,d),Be(n.rscratch,"labelHeight",t,d),Be(n.rscratch,"labelLineHeight",t,c)},us.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(Be(n.rscratch,e,t,r),r):Re(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var l=o("labelKey");if(null!=l&&o("labelWrapKey")===l)return o("labelWrapCachedText");for(var u=i.split("\n"),c=e.pstyle("text-max-width").pfValue,h="anywhere"===e.pstyle("text-overflow-wrap").value,d=[],p=/[\s\u200b]+/,g=h?"":" ",f=0;f<u.length;f++){var v=u[f],y=this.calculateLabelDimensions(e,v).width;if(h){var m=v.split("").join("\u200b");v=m}if(y>c){for(var b=v.split(p),x="",w=0;w<b.length;w++){var E=b[w],_=0===x.length?E:x+g+E;this.calculateLabelDimensions(e,_).width<=c?x+=E+g:(x&&d.push(x),x=E+g)}x.match(/^[\s\u200b]+$/)||d.push(x)}else d.push(v)}o("labelWrapCachedLines",d),i=o("labelWrapCachedText",d.join("\n")),o("labelWrapKey",l)}else if("ellipsis"===s){var T=e.pstyle("text-max-width").pfValue,D="",C=!1;if(this.calculateLabelDimensions(e,i).width<T)return i;for(var N=0;N<i.length;N++){if(this.calculateLabelDimensions(e,D+i[N]+"\u2026").width>T)break;D+=i[N],N===i.length-1&&(C=!0)}return C||(D+="\u2026"),D}return i},us.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},us.calculateLabelDimensions=function(e,t){var n=fe(t,e._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var a=e.pstyle("font-style").strValue,o=e.pstyle("font-size").pfValue,s=e.pstyle("font-family").strValue,l=e.pstyle("font-weight").strValue,u=this.labelCalcCanvas,c=this.labelCalcCanvasContext;if(!u){u=this.labelCalcCanvas=document.createElement("canvas"),c=this.labelCalcCanvasContext=u.getContext("2d");var h=u.style;h.position="absolute",h.left="-9999px",h.top="-9999px",h.zIndex="-1",h.visibility="hidden",h.pointerEvents="none"}c.font="".concat(a," ").concat(l," ").concat(o,"px ").concat(s);for(var d=0,p=0,g=t.split("\n"),f=0;f<g.length;f++){var v=g[f],y=c.measureText(v),m=Math.ceil(y.width),b=o;d=Math.max(m,d),p+=b}return d+=0,p+=0,r[n]={width:d,height:p}},us.calculateLabelAngle=function(e,t){var n=e._private.rscratch,r=e.isEdge(),i=t?t+"-":"",a=e.pstyle(i+"text-rotation"),o=a.strValue;return"none"===o?0:r&&"autorotate"===o?n.labelAutoAngle:"autorotate"===o?0:a.pfValue},us.calculateLabelAngles=function(e){var t=this,n=e.isEdge(),r=e._private.rscratch;r.labelAngle=t.calculateLabelAngle(e),n&&(r.sourceLabelAngle=t.calculateLabelAngle(e,"source"),r.targetLabelAngle=t.calculateLabelAngle(e,"target"))};var ds={},ps=!1;ds.getNodeShape=function(e){var t=e.pstyle("shape").value;if("cutrectangle"===t&&(e.width()<28||e.height()<28))return ps||(Ae("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),ps=!0),"rectangle";if(e.isParent())return"rectangle"===t||"roundrectangle"===t||"round-rectangle"===t||"cutrectangle"===t||"cut-rectangle"===t||"barrel"===t?t:"rectangle";if("polygon"===t){var n=e.pstyle("shape-polygon-points").value;return this.nodeShapes.makePolygon(n).name}return t};var gs={registerCalculationListeners:function(){var e=this.cy,t=e.collection(),n=this,r=function(e){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r<e.length;r++){var i=e[r]._private.rstyle;i.clean=!1,i.cleanConnected=!1}};n.binder(e).on("bounds.* dirty.*",(function(e){var t=e.target;r(t)})).on("style.* background.*",(function(e){var t=e.target;r(t,!1)}));var i=function(i){if(i){var a=n.onUpdateEleCalcsFns;t.cleanStyle();for(var o=0;o<t.length;o++){var s=t[o],l=s._private.rstyle;s.isNode()&&!l.cleanConnected&&(r(s.connectedEdges()),l.cleanConnected=!0)}if(a)for(var u=0;u<a.length;u++){(0,a[u])(i,t)}n.recalculateRenderedStyle(t),t=e.collection()}};n.flushRenderedStyleQueue=function(){i(!0)},n.beforeRender(i,n.beforeRenderPriorities.eleCalcs)},onUpdateEleCalcs:function(e){(this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[]).push(e)},recalculateRenderedStyle:function(e,t){var n=function(e){return e._private.rstyle.cleanConnected},r=[],i=[];if(!this.destroyed){void 0===t&&(t=!0);for(var a=0;a<e.length;a++){var o=e[a],s=o._private,l=s.rstyle;!o.isEdge()||n(o.source())&&n(o.target())||(l.clean=!1),t&&l.clean||o.removed()||"none"!==o.pstyle("display").value&&("nodes"===s.group?i.push(o):r.push(o),l.clean=!0)}for(var u=0;u<i.length;u++){var c=i[u],h=c._private.rstyle,d=c.position();this.recalculateNodeLabelProjection(c),h.nodeX=d.x,h.nodeY=d.y,h.nodeW=c.pstyle("width").pfValue,h.nodeH=c.pstyle("height").pfValue}this.recalculateEdgeProjections(r);for(var p=0;p<r.length;p++){var g=r[p]._private,f=g.rstyle,v=g.rscratch;f.srcX=v.arrowStartX,f.srcY=v.arrowStartY,f.tgtX=v.arrowEndX,f.tgtY=v.arrowEndY,f.midX=v.midX,f.midY=v.midY,f.labelAngle=v.labelAngle,f.sourceLabelAngle=v.sourceLabelAngle,f.targetLabelAngle=v.targetLabelAngle}}}},fs={updateCachedGrabbedEles:function(){var e=this.cachedZSortedEles;if(e){e.drag=[],e.nondrag=[];for(var t=[],n=0;n<e.length;n++){var r=(i=e[n])._private.rscratch;i.grabbed()&&!i.isParent()?t.push(i):r.inDragLayer?e.drag.push(i):e.nondrag.push(i)}for(n=0;n<t.length;n++){var i=t[n];e.drag.push(i)}}},invalidateCachedZSortedEles:function(){this.cachedZSortedEles=null},getCachedZSortedEles:function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements().toArray();t.sort(Ji),t.interactive=t.filter((function(e){return e.interactive()})),this.cachedZSortedEles=t,this.updateCachedGrabbedEles()}else t=this.cachedZSortedEles;return t}},vs={};[ns,rs,is,os,ss,us,ds,gs,fs].forEach((function(e){Q(vs,e)}));var ys={getCachedImage:function(e,t,n){var r=this.imageCache=this.imageCache||{},i=r[e];if(i)return i.image.complete||i.image.addEventListener("load",n),i.image;var a=(i=r[e]=r[e]||{}).image=new Image;a.addEventListener("load",n),a.addEventListener("error",(function(){a.error=!0}));var o="data:";return e.substring(0,5).toLowerCase()===o||(t="null"===t?null:t,a.crossOrigin=t),a.src=e,a}},ms={registerBinding:function(e,t,n,r){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)}};ms.binder=function(e){var t,n=this,r=n.cy.window(),i=e===r||e===r.document||e===r.document.body||(t=e,"undefined"!=typeof HTMLElement&&t instanceof HTMLElement);if(null==n.supportsPassiveEvents){var a=!1;try{var o=Object.defineProperty({},"passive",{get:function(){return a=!0,!0}});r.addEventListener("test",null,o)}catch(l){}n.supportsPassiveEvents=a}var s=function(t,r,a){var o=Array.prototype.slice.call(arguments);return i&&n.supportsPassiveEvents&&(o[2]={capture:null!=a&&a,passive:!1,once:!1}),n.bindings.push({target:e,args:o}),(e.addEventListener||e.on).apply(e,o),this};return{on:s,addEventListener:s,addListener:s,bind:s}},ms.nodeIsDraggable=function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},ms.nodeIsGrabbable=function(e){return this.nodeIsDraggable(e)&&e.interactive()},ms.load=function(){var e=this,t=e.cy.window(),n=function(e){return e.selected()},r=function(t,n,r,i){null==t&&(t=e.cy);for(var a=0;a<n.length;a++){var o=n[a];t.emit({originalEvent:r,type:o,position:i})}},i=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},a=function(t,n){var r=!0;if(e.cy.hasCompoundNodes()&&t&&t.pannable())for(var i=0;n&&i<n.length;i++){if((t=n[i]).isNode()&&t.isParent()&&!t.pannable()){r=!1;break}}else r=!0;return r},o=function(e){e[0]._private.rscratch.inDragLayer=!0},s=function(e){e[0]._private.rscratch.isGrabTarget=!0},l=function(e,t){var n=t.addToList;n.has(e)||!e.grabbable()||e.locked()||(n.merge(e),function(e){e[0]._private.grabbed=!0}(e))},c=function(t,n){n=n||{};var r=t.cy().hasCompoundNodes();n.inDragLayer&&(t.forEach(o),t.neighborhood().stdFilter((function(e){return!r||e.isEdge()})).forEach(o)),n.addToList&&t.forEach((function(e){l(e,n)})),function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var n=e.descendants();t.inDragLayer&&(n.forEach(o),n.connectedEdges().forEach(o)),t.addToList&&l(n,t)}}(t,n),p(t,{inDragLayer:n.inDragLayer}),e.updateCachedGrabbedEles()},h=c,d=function(t){t&&(e.getCachedZSortedEles().forEach((function(e){!function(e){e[0]._private.grabbed=!1}(e),function(e){e[0]._private.rscratch.inDragLayer=!1}(e),function(e){e[0]._private.rscratch.isGrabTarget=!1}(e)})),e.updateCachedGrabbedEles())},p=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var n=e.ancestors().orphans();if(!n.same(e)){var r=n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()),i=r.connectedEdges();t.inDragLayer&&(i.forEach(o),r.forEach(o)),t.addToList&&r.forEach((function(e){l(e,t)}))}}},g=function(){null!=document.activeElement&&null!=document.activeElement.blur&&document.activeElement.blur()},f="undefined"!=typeof MutationObserver,v="undefined"!=typeof ResizeObserver;f?(e.removeObserver=new MutationObserver((function(t){for(var n=0;n<t.length;n++){var r=t[n].removedNodes;if(r)for(var i=0;i<r.length;i++){if(r[i]===e.container){e.destroy();break}}}})),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",(function(t){e.destroy()}));var y=u.default((function(){e.cy.resize()}),100);f&&(e.styleObserver=new MutationObserver(y),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(t,"resize",y),v&&(e.resizeObserver=new ResizeObserver(y),e.resizeObserver.observe(e.container));var m=function(){e.invalidateContainerClientCoordsCache()};!function(e,t){for(;null!=e;)t(e),e=e.parentNode}(e.container,(function(t){e.registerBinding(t,"transitionend",m),e.registerBinding(t,"animationend",m),e.registerBinding(t,"scroll",m)})),e.registerBinding(e.container,"contextmenu",(function(e){e.preventDefault()}));var b,x,w,E=function(t){for(var n=e.findContainerClientCoords(),r=n[0],i=n[1],a=n[2],o=n[3],s=t.touches?t.touches:[t],l=!1,u=0;u<s.length;u++){var c=s[u];if(r<=c.clientX&&c.clientX<=r+a&&i<=c.clientY&&c.clientY<=i+o){l=!0;break}}if(!l)return!1;for(var h=e.container,d=t.target.parentNode,p=!1;d;){if(d===h){p=!0;break}d=d.parentNode}return!!p};e.registerBinding(e.container,"mousedown",(function(t){if(E(t)){t.preventDefault(),g(),e.hoverData.capture=!0,e.hoverData.which=t.which;var n=e.cy,i=[t.clientX,t.clientY],a=e.projectIntoViewport(i[0],i[1]),o=e.selection,l=e.findNearestElements(a[0],a[1],!0,!1),u=l[0],d=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;if(3==t.which){e.hoverData.cxtStarted=!0;var p={originalEvent:t,type:"cxttapstart",position:{x:a[0],y:a[1]}};u?(u.activate(),u.emit(p),e.hoverData.down=u):n.emit(p),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==t.which){if(u&&u.activate(),null!=u&&e.nodeIsGrabbable(u)){var f=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}};if(s(u),u.selected()){d=e.dragData.possibleDragElements=n.collection();var v=n.$((function(t){return t.isNode()&&t.selected()&&e.nodeIsGrabbable(t)}));c(v,{addToList:d}),u.emit(f("grabon")),v.forEach((function(e){e.emit(f("grab"))}))}else d=e.dragData.possibleDragElements=n.collection(),h(u,{addToList:d}),u.emit(f("grabon")).emit(f("grab"));e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=u,e.hoverData.downs=l,e.hoverData.downTime=(new Date).getTime(),r(u,["mousedown","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==u?(o[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):u.pannable()&&(o[4]=1),e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout((function(){if(!e.hoverData.tapholdCancelled){var r=e.hoverData.down;r?r.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}}):n.emit({originalEvent:t,type:"taphold",position:{x:a[0],y:a[1]}})}}),e.tapholdDuration)}o[0]=o[2]=a[0],o[1]=o[3]=a[1]}}),!1),e.registerBinding(t,"mousemove",(function(t){if(e.hoverData.capture||E(t)){var n=!1,o=e.cy,s=o.zoom(),l=[t.clientX,t.clientY],u=e.projectIntoViewport(l[0],l[1]),h=e.hoverData.mdownPos,p=e.hoverData.mdownGPos,g=e.selection,f=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(f=e.findNearestElement(u[0],u[1],!0,!1));var v,y=e.hoverData.last,m=e.hoverData.down,b=[u[0]-g[2],u[1]-g[3]],x=e.dragData.possibleDragElements;if(p){var w=l[0]-p[0],_=w*w,T=l[1]-p[1],D=_+T*T;e.hoverData.isOverThresholdDrag=v=D>=e.desktopTapThreshold2}var C=i(t);v&&(e.hoverData.tapholdCancelled=!0);n=!0,r(f,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var N=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),g[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(v){var A={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};m?m.emit(A):o.emit(A),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&f===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=f,f&&f.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var L;if(e.hoverData.justStartedPan){var k=e.hoverData.mdownPos;L={x:(u[0]-k[0])*s,y:(u[1]-k[1])*s},e.hoverData.justStartedPan=!1}else L={x:b[0]*s,y:b[1]*s};o.panBy(L),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=g[4]||null!=m&&!m.pannable()){if(m&&m.pannable()&&m.active()&&m.unactivate(),m&&m.grabbed()||f==y||(y&&r(y,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),f&&r(f,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=f),m)if(v){if(o.boxSelectionEnabled()&&C)m&&m.grabbed()&&(d(x),m.emit("freeon"),x.emit("free"),e.dragData.didDrag&&(m.emit("dragfreeon"),x.emit("dragfree"))),N();else if(m&&m.grabbed()&&e.nodeIsDraggable(m)){var S=!e.dragData.didDrag;S&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||c(x,{inDragLayer:!0});var M={x:0,y:0};if(I(b[0])&&I(b[1])&&(M.x+=b[0],M.y+=b[1],S)){var O=e.hoverData.dragDelta;O&&I(O[0])&&I(O[1])&&(M.x+=O[0],M.y+=O[1])}e.hoverData.draggingEles=!0,x.silentShift(M).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(b[0]),t.push(b[1])):(t[0]+=b[0],t[1]+=b[1])}();n=!0}else if(v){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!C&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){a(m,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,g[4]=0,e.data.bgActivePosistion=at(h),e.redrawHint("select",!0),e.redraw())}}else N();m&&m.pannable()&&m.active()&&m.unactivate()}return g[2]=u[0],g[3]=u[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=i(t);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate(),3===e.hoverData.which){var p={originalEvent:t,type:"cxttapend",position:{x:o[0],y:o[1]}};if(c?c.emit(p):a.emit(p),!e.hoverData.cxtDragged){var g={originalEvent:t,type:"cxttap",position:{x:o[0],y:o[1]}};c?c.emit(g):a.emit(g)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),x=!1,t.timeStamp-w<=a.multiClickDebounceTime()?(b&&clearTimeout(b),x=!0,w=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(b=setTimeout((function(){x||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),w=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||i(t)||(a.$(n).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=a.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(a.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var f=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),f.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:t,position:{x:o[0],y:o[1]}});var v=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||h||a.$(n).unmerge(f).unselect(),f.emit("box").stdFilter(v).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=c&&c.grabbed();d(u),y&&(c.emit("freeon"),u.emit("free"),e.dragData.didDrag&&(c.emit("dragfreeon"),u.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var _,T,D,C,N,A,L,k,S,M,O,P,R,B=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4])t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var l=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(l=e.gestureStartZoom*t.scale),n.zoom({level:l,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",B,!0),e.registerBinding(t,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||B(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var F,z,G,Y,X,V,U,j=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},q=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",F=function(t){if(e.hasTouchStarted=!0,E(t)){g(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=o[0],i[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);i[2]=o[0],i[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=o[0],i[5]=o[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,d(e.dragData.touchDragEles);var l=e.findContainerClientCoords();S=l[0],M=l[1],O=l[2],P=l[3],_=t.touches[0].clientX-S,T=t.touches[0].clientY-M,D=t.touches[1].clientX-S,C=t.touches[1].clientY-M,R=0<=_&&_<=O&&0<=D&&D<=O&&0<=T&&T<=P&&0<=C&&C<=P;var u=n.pan(),p=n.zoom();N=j(_,T,D,C),A=q(_,T,D,C),k=[((L=[(_+D)/2,(T+C)/2])[0]-u.x)/p,(L[1]-u.y)/p];if(A<4e4&&!t.touches[2]){var f=e.findNearestElement(i[0],i[1],!0,!0),v=e.findNearestElement(i[2],i[3],!0,!0);return f&&f.isNode()?(f.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=f):v&&v.isNode()?(v.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=v):n.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var y=e.findNearestElements(i[0],i[1],!0,!0),m=y[0];if(null!=m&&(m.activate(),e.touchData.start=m,e.touchData.starts=y,e.nodeIsGrabbable(m))){var b=e.dragData.touchDragEles=n.collection(),x=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),m.selected()?(x=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),c(x,{addToList:b})):h(m,{addToList:b}),s(m);var w=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};m.emit(w("grabon")),x?x.forEach((function(e){e.emit(w("grab"))})):m.emit(w("grab"))}r(m,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==m&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var I=e.touchData.startPosition=[null,null,null,null,null,null],B=0;B<i.length;B++)I[B]=a[B]=i[B];var F=t.touches[0];e.touchData.startGPosition=[F.clientX,F.clientY]}}},!1),e.registerBinding(window,"touchmove",z=function(t){var n=e.touchData.capture;if(n||E(t)){var i=e.selection,o=e.cy,s=e.touchData.now,l=e.touchData.earlier,u=o.zoom();if(t.touches[0]){var h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=h[0],s[1]=h[1]}if(t.touches[1]){h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=h[0],s[3]=h[1]}if(t.touches[2]){h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=h[0],s[5]=h[1]}var p,g=e.touchData.startGPosition;if(n&&t.touches[0]&&g){for(var f=[],v=0;v<s.length;v++)f[v]=s[v]-l[v];var y=t.touches[0].clientX-g[0],m=y*y,b=t.touches[0].clientY-g[1];p=m+b*b>=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var x=t.touches[0].clientX-S,w=t.touches[0].clientY-M,L=t.touches[1].clientX-S,O=t.touches[1].clientY-M,P=q(x,w,L,O);if(P/A>=2.25||P>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var B={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(B),e.touchData.start=null):o.emit(B)}}if(n&&e.touchData.cxt){B={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}};e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(B):o.emit(B),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var F=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&F===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=F,F&&F.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,i[4]=1,i&&0!==i.length&&void 0!==i[0]?(i[2]=(s[0]+s[2]+s[4])/3,i[3]=(s[1]+s[3]+s[5])/3):(i[0]=(s[0]+s[2]+s[4])/3,i[1]=(s[1]+s[3]+s[5])/3,i[2]=(s[0]+s[2]+s[4])/3+1,i[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var z=0;z<ee.length;z++){var G=ee[z]._private;G.grabbed=!1,G.rscratch.inDragLayer=!1}}var Y=e.touchData.start,X=(x=t.touches[0].clientX-S,w=t.touches[0].clientY-M,L=t.touches[1].clientX-S,O=t.touches[1].clientY-M,j(x,w,L,O)),V=X/N;if(R){var U=(x-_+(L-D))/2,H=(w-T+(O-C))/2,W=o.zoom(),$=W*V,K=o.pan(),Z=k[0]*W+K.x,Q=k[1]*W+K.y,J={x:-$/W*(Z-K.x-U)+Z,y:-$/W*(Q-K.y-H)+Q};if(Y&&Y.active()){var ee=e.dragData.touchDragEles;d(ee),e.redrawHint("drag",!0),e.redrawHint("eles",!0),Y.unactivate().emit("freeon"),ee.emit("free"),e.dragData.didDrag&&(Y.emit("dragfreeon"),ee.emit("dragfree"))}o.viewport({zoom:$,pan:J,cancelOnFailedZoom:!0}),o.emit("pinchzoom"),N=X,_=x,T=w,D=L,C=O,e.pinching=!0}if(t.touches[0]){h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=h[0],s[1]=h[1]}if(t.touches[1]){h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);s[2]=h[0],s[3]=h[1]}if(t.touches[2]){h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);s[4]=h[0],s[5]=h[1]}}else if(t.touches[0]&&!e.touchData.didSelect){var te=e.touchData.start,ne=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(F=e.findNearestElement(s[0],s[1],!0,!0)),n&&null!=te&&t.preventDefault(),n&&null!=te&&e.nodeIsDraggable(te))if(p){ee=e.dragData.touchDragEles;var re=!e.dragData.didDrag;re&&c(ee,{inDragLayer:!0}),e.dragData.didDrag=!0;var ie={x:0,y:0};if(I(f[0])&&I(f[1]))if(ie.x+=f[0],ie.y+=f[1],re)e.redrawHint("eles",!0),(ae=e.touchData.dragDelta)&&I(ae[0])&&I(ae[1])&&(ie.x+=ae[0],ie.y+=ae[1]);e.hoverData.draggingEles=!0,ee.silentShift(ie).emit("position drag"),e.redrawHint("drag",!0),e.touchData.startPosition[0]==l[0]&&e.touchData.startPosition[1]==l[1]&&e.redrawHint("eles",!0),e.redraw()}else{var ae;0===(ae=e.touchData.dragDelta=e.touchData.dragDelta||[]).length?(ae.push(f[0]),ae.push(f[1])):(ae[0]+=f[0],ae[1]+=f[1])}if(r(te||F,["touchmove","tapdrag","vmousemove"],t,{x:s[0],y:s[1]}),te&&te.grabbed()||F==ne||(ne&&ne.emit({originalEvent:t,type:"tapdragout",position:{x:s[0],y:s[1]}}),F&&F.emit({originalEvent:t,type:"tapdragover",position:{x:s[0],y:s[1]}})),e.touchData.last=F,n)for(z=0;z<s.length;z++)s[z]&&e.touchData.startPosition[z]&&p&&(e.touchData.singleTouchMoved=!0);if(n&&(null==te||te.pannable())&&o.panningEnabled()&&o.userPanningEnabled()){a(te,e.touchData.starts)&&(t.preventDefault(),e.data.bgActivePosistion||(e.data.bgActivePosistion=at(e.touchData.startPosition)),e.swipePanning?(o.panBy({x:f[0]*u,y:f[1]*u}),o.emit("dragpan")):p&&(e.swipePanning=!0,o.panBy({x:y*u,y:b*u}),o.emit("dragpan"),te&&(te.unactivate(),e.redrawHint("select",!0),e.touchData.start=null)));h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);s[0]=h[0],s[1]=h[1]}}for(v=0;v<s.length;v++)l[v]=s[v];n&&t.touches.length>0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",G=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",Y=function(t){var i=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(t.touches[0]){var h=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);u[0]=h[0],u[1]=h[1]}if(t.touches[1]){h=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);u[2]=h[0],u[3]=h[1]}if(t.touches[2]){h=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);u[4]=h[0],u[5]=h[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:t,type:"cxttapend",position:{x:u[0],y:u[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var p={originalEvent:t,type:"cxttap",position:{x:u[0],y:u[1]}};i?i.emit(p):s.emit(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var g=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:t,position:{x:u[0],y:u[1]}});g.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),g.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var f=e.dragData.touchDragEles;if(null!=i){var v=i._private.grabbed;d(f),e.redrawHint("drag",!0),e.redrawHint("eles",!0),v&&(i.emit("freeon"),f.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),f.emit("dragfree"))),r(i,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]}),i.unactivate(),e.touchData.start=null}else{var y=e.findNearestElement(u[0],u[1],!0,!0);r(y,["touchend","tapend","vmouseup","tapdragout"],t,{x:u[0],y:u[1]})}var m=e.touchData.startPosition[0]-u[0],b=m*m,x=e.touchData.startPosition[1]-u[1],w=(b+x*x)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),r(i,["tap","vclick"],t,{x:u[0],y:u[1]}),X=!1,t.timeStamp-U<=s.multiClickDebounceTime()?(V&&clearTimeout(V),X=!0,U=null,r(i,["dbltap","vdblclick"],t,{x:u[0],y:u[1]})):(V=setTimeout((function(){X||r(i,["onetap","voneclick"],t,{x:u[0],y:u[1]})}),s.multiClickDebounceTime()),U=t.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&w<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(n).unmerge(i).unselect(["tapunselect"]),i.select(["tapselect"])):i.selected()?i.unselect(["tapunselect"]):i.select(["tapselect"]),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved=!0}for(var E=0;E<u.length;E++)c[E]=u[E];e.dragData.didDrag=!1,0===t.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=[null,null,null,null,null,null],e.touchData.startGPosition=null,e.touchData.didSelect=!1),t.touches.length<2&&(1===t.touches.length&&(e.touchData.startGPosition=[t.touches[0].clientX,t.touches[0].clientY]),e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var H=[],W=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},$=function(e){H.push(function(e){return{event:e,touch:W(e)}}(e))},K=function(e){for(var t=0;t<H.length;t++){if(H[t].event.pointerId===e.pointerId)return void H.splice(t,1)}},Z=function(e){e.touches=H.map((function(e){return e.touch}))},Q=function(e){return"mouse"===e.pointerType||4===e.pointerType};e.registerBinding(e.container,"pointerdown",(function(e){Q(e)||(e.preventDefault(),$(e),Z(e),F(e))})),e.registerBinding(e.container,"pointerup",(function(e){Q(e)||(K(e),Z(e),Y(e))})),e.registerBinding(e.container,"pointercancel",(function(e){Q(e)||(K(e),Z(e),G())})),e.registerBinding(e.container,"pointermove",(function(e){Q(e)||(e.preventDefault(),function(e){var t=H.filter((function(t){return t.event.pointerId===e.pointerId}))[0];t.event=e,t.touch=W(e)}(e),Z(e),z(e))}))}};var bs={generatePolygon:function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return Bt(i,a,this.points,e,t,n/2,r/2,o)},checkPoint:function(e,t,n,r,i,a,o){return kt(e,t,this.points,a,o,r,i,[0,-1],n)}}}};bs.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a){var o=n-e,s=r-t;o/=i,s/=a;var l=Math.sqrt(o*o+s*s),u=l-1;if(u<0)return[];var c=u/l;return[(n-e)*c+e,(r-t)*c+t]}(i,a,e,t,n/2+o,r/2+o)},checkPoint:function(e,t,n,r,i,a,o){return Mt(e,t,r,i,a,o,n)}}},bs.generateRoundPolygon=function(e,t){for(var n=new Array(2*t.length),r=0;r<t.length/2;r++){var i=2*r,a=void 0;a=r<t.length/2-1?2*(r+1):0,n[4*r]=t[i],n[4*r+1]=t[i+1];var o=t[a]-t[i],s=t[a+1]-t[i+1],l=Math.sqrt(o*o+s*s);n[4*r+2]=o/l,n[4*r+3]=s/l}return this.nodeShapes[e]={renderer:this,name:e,points:n,draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl("round-polygon",e,t,n,r,i,this.points)},intersectLine:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o,s){for(var l,u=[],c=new Array(n.length),h=a/2,d=o/2,p=Vt(a,o),g=0;g<n.length/4;g++){var f,v=void 0;v=0===g?n.length-2:4*g-2,f=4*g+2;var y=r+h*n[4*g],m=i+d*n[4*g+1],b=-n[v]*n[f]-n[v+1]*n[f+1],x=p/Math.tan(Math.acos(b)/2),w=y-x*n[v],E=m-x*n[v+1],_=y+x*n[f],T=m+x*n[f+1];0===g?(c[n.length-2]=w,c[n.length-1]=E):(c[4*g-2]=w,c[4*g-1]=E),c[4*g]=_,c[4*g+1]=T;var D=n[v+1],C=-n[v];D*n[f]+C*n[f+1]<0&&(D*=-1,C*=-1),0!==(l=Ot(e,t,r,i,w+D*p,E+C*p,p)).length&&u.push(l[0],l[1])}for(var N=0;N<c.length/4;N++)0!==(l=Rt(e,t,r,i,c[4*N],c[4*N+1],c[4*N+2],c[4*N+3],!1)).length&&u.push(l[0],l[1]);if(u.length>2){for(var A=[u[0],u[1]],L=Math.pow(A[0]-e,2)+Math.pow(A[1]-t,2),k=1;k<u.length/2;k++){var S=Math.pow(u[2*k]-e,2)+Math.pow(u[2*k+1]-t,2);S<=L&&(A[0]=u[2*k],A[1]=u[2*k+1],L=S)}return A}return u}(i,a,this.points,e,t,n,r)},checkPoint:function(e,t,n,r,i,a,o){return function(e,t,n,r,i,a,o){for(var s=new Array(n.length),l=a/2,u=o/2,c=Vt(a,o),h=c*c,d=0;d<n.length/4;d++){var p,g=void 0;g=0===d?n.length-2:4*d-2,p=4*d+2;var f=r+l*n[4*d],v=i+u*n[4*d+1],y=-n[g]*n[p]-n[g+1]*n[p+1],m=c/Math.tan(Math.acos(y)/2),b=f-m*n[g],x=v-m*n[g+1],w=f+m*n[p],E=v+m*n[p+1];s[4*d]=b,s[4*d+1]=x,s[4*d+2]=w,s[4*d+3]=E;var _=n[g+1],T=-n[g];_*n[p]+T*n[p+1]<0&&(_*=-1,T*=-1);var D=b+_*c,C=x+T*c;if(Math.pow(D-e,2)+Math.pow(C-t,2)<=h)return!0}return Lt(e,t,s)}(e,t,this.points,a,o,r,i)}}},bs.generateRoundRectangle=function(){return this.nodeShapes["round-rectangle"]=this.nodeShapes.roundrectangle={renderer:this,name:"round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){return Tt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=Xt(r,i),l=2*s;return!!kt(e,t,this.points,a,o,r,i-l,[0,-1],n)||(!!kt(e,t,this.points,a,o,r-l,i,[0,-1],n)||(!!Mt(e,t,l,l,a-r/2+s,o-i/2+s,n)||(!!Mt(e,t,l,l,a+r/2-s,o-i/2+s,n)||(!!Mt(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!Mt(e,t,l,l,a-r/2+s,o+i/2-s,n)))))}}},bs.generateCutRectangle=function(){return this.nodeShapes["cut-rectangle"]=this.nodeShapes.cutrectangle={renderer:this,name:"cut-rectangle",cornerLength:8,points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},generateCutTrianglePts:function(e,t,n,r){var i=this.cornerLength,a=t/2,o=e/2,s=n-o,l=n+o,u=r-a,c=r+a;return{topLeft:[s,u+i,s+i,u,s+i,u+i],topRight:[l-i,u,l,u+i,l-i,u+i],bottomRight:[l,c-i,l-i,c,l-i,c-i],bottomLeft:[s+i,c,s,c-i,s+i,c-i]}},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateCutTrianglePts(n+2*o,r+2*o,e,t),l=[].concat.apply([],[s.topLeft.splice(0,4),s.topRight.splice(0,4),s.bottomRight.splice(0,4),s.bottomLeft.splice(0,4)]);return Bt(i,a,l,e,t)},checkPoint:function(e,t,n,r,i,a,o){if(kt(e,t,this.points,a,o,r,i-2*this.cornerLength,[0,-1],n))return!0;if(kt(e,t,this.points,a,o,r-2*this.cornerLength,i,[0,-1],n))return!0;var s=this.generateCutTrianglePts(r,i,a,o);return Lt(e,t,s.topLeft)||Lt(e,t,s.topRight)||Lt(e,t,s.bottomRight)||Lt(e,t,s.bottomLeft)}}},bs.generateBarrel=function(){return this.nodeShapes.barrel={renderer:this,name:"barrel",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=this.generateBarrelBezierPts(n+2*o,r+2*o,e,t),l=function(e){var t=pt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.15),n=pt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.5),r=pt({x:e[0],y:e[1]},{x:e[2],y:e[3]},{x:e[4],y:e[5]},.85);return[e[0],e[1],t.x,t.y,n.x,n.y,r.x,r.y,e[4],e[5]]},u=[].concat(l(s.topLeft),l(s.topRight),l(s.bottomRight),l(s.bottomLeft));return Bt(i,a,u,e,t)},generateBarrelBezierPts:function(e,t,n,r){var i=t/2,a=e/2,o=n-a,s=n+a,l=r-i,u=r+i,c=Ut(e,t),h=c.heightOffset,d=c.widthOffset,p=c.ctrlPtOffsetPct*e,g={topLeft:[o,l+h,o+p,l,o+d,l],topRight:[s-d,l,s-p,l,s,l+h],bottomRight:[s,u-h,s-p,u,s-d,u],bottomLeft:[o+d,u,o+p,u,o,u-h]};return g.topLeft.isTop=!0,g.topRight.isTop=!0,g.bottomLeft.isBottom=!0,g.bottomRight.isBottom=!0,g},checkPoint:function(e,t,n,r,i,a,o){var s=Ut(r,i),l=s.heightOffset,u=s.widthOffset;if(kt(e,t,this.points,a,o,r,i-2*l,[0,-1],n))return!0;if(kt(e,t,this.points,a,o,r-2*u,i,[0,-1],n))return!0;for(var c=this.generateBarrelBezierPts(r,i,a,o),h=function(e,t,n){var r,i,a=n[4],o=n[2],s=n[0],l=n[5],u=n[1],c=Math.min(a,s),h=Math.max(a,s),d=Math.min(l,u),p=Math.max(l,u);if(c<=e&&e<=h&&d<=t&&t<=p){var g=[(r=a)-2*(i=o)+s,2*(i-r),r],f=function(e,t,n,r){var i=t*t-4*e*(n-=r);if(i<0)return[];var a=Math.sqrt(i),o=2*e;return[(-t+a)/o,(-t-a)/o]}(g[0],g[1],g[2],e).filter((function(e){return 0<=e&&e<=1}));if(f.length>0)return f[0]}return null},d=Object.keys(c),p=0;p<d.length;p++){var g=c[d[p]],f=h(e,t,g);if(null!=f){var v=g[5],y=g[3],m=g[1],b=dt(v,y,m,f);if(g.isTop&&b<=t)return!0;if(g.isBottom&&t<=b)return!0}}return!1}}},bs.generateBottomRoundrectangle=function(){return this.nodeShapes["bottom-round-rectangle"]=this.nodeShapes.bottomroundrectangle={renderer:this,name:"bottom-round-rectangle",points:zt(4,0),draw:function(e,t,n,r,i){this.renderer.nodeShapeImpl(this.name,e,t,n,r,i)},intersectLine:function(e,t,n,r,i,a,o){var s=t-(r/2+o),l=Rt(i,a,e,t,e-(n/2+o),s,e+(n/2+o),s,!1);return l.length>0?l:Tt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=Xt(r,i),l=2*s;if(kt(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if(kt(e,t,this.points,a,o,r-l,i,[0,-1],n))return!0;var u=r/2+2*n,c=i/2+2*n;return!!Lt(e,t,[a-u,o-c,a-u,o,a+u,o,a+u,o-c])||(!!Mt(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!Mt(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},bs.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",zt(3,0)),this.generateRoundPolygon("round-triangle",zt(3,0)),this.generatePolygon("rectangle",zt(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",zt(5,0)),this.generateRoundPolygon("round-pentagon",zt(5,0)),this.generatePolygon("hexagon",zt(6,0)),this.generateRoundPolygon("round-hexagon",zt(6,0)),this.generatePolygon("heptagon",zt(7,0)),this.generateRoundPolygon("round-heptagon",zt(7,0)),this.generatePolygon("octagon",zt(8,0)),this.generateRoundPolygon("round-octagon",zt(8,0));var r=new Array(20),i=Yt(5,0),a=Yt(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(s=0;s<5;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=Gt(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),this.generatePolygon("right-rhomboid",[-.333,-1,1,-1,.333,1,-1,1]),this.nodeShapes.concavehexagon=this.generatePolygon("concave-hexagon",[-1,-.95,-.75,0,-1,.95,1,.95,.75,0,1,-.95]);var l=[-1,-1,.25,-1,1,0,.25,1,-1,1];this.generatePolygon("tag",l),this.generateRoundPolygon("round-tag",l),e.makePolygon=function(e){var n,r="polygon-"+e.join("$");return(n=this[r])?n:t.generatePolygon(r,e)}};var xs={timeToRender:function(){return this.redrawTotalTime/this.redrawCount},redraw:function(e){e=e||Ie();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},beforeRender:function(e,t){if(!this.destroyed){null==t&&Ce("Priority is not optional for beforeRender");var n=this.beforeRenderCallbacks;n.push({fn:e,priority:t}),n.sort((function(e,t){return t.priority-e.priority}))}}},ws=function(e,t,n){for(var r=e.beforeRenderCallbacks,i=0;i<r.length;i++)r[i].fn(t,n)};xs.startRenderLoop=function(){var e=this,t=e.cy;if(!e.renderLoopStarted){e.renderLoopStarted=!0;oe((function n(r){if(!e.destroyed){if(t.batching());else if(e.requestedFrame&&!e.skipFrame){ws(e,!0,r);var i=se();e.render(e.renderOptions);var a=e.lastDrawTime=se();void 0===e.averageRedrawTime&&(e.averageRedrawTime=a-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var o=a-i;e.redrawTotalTime+=o,e.lastRedrawTime=o,e.averageRedrawTime=e.averageRedrawTime/2+o/2,e.requestedFrame=!1}else ws(e,!1,r);e.skipFrame=!1,oe(n)}}))}};var Es=function(e){this.init(e)},_s=Es.prototype;_s.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],_s.init=function(e){var t=this;t.options=e,t.cy=e.cy;var n=t.container=e.cy.container(),r=t.cy.window();if(r){var i=r.document,a=i.head,o="__________cytoscape_stylesheet",s="__________cytoscape_container",l=null!=i.getElementById(o);if(n.className.indexOf(s)<0&&(n.className=(n.className||"")+" "+s),!l){var u=i.createElement("style");u.id=o,u.textContent="."+s+" { position: relative; }",a.insertBefore(u,a.children[0])}"static"===r.getComputedStyle(n).getPropertyValue("position")&&Ae("A Cytoscape container has style position:static and so can not use UI extensions properly")}t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.debug=e.debug,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=I(e.pixelRatio)?e.pixelRatio:null,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:150,lyrTxrSkip:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners()},_s.notify=function(e,t){var n=this,r=n.cy;this.destroyed||("init"!==e?"destroy"!==e?(("add"===e||"remove"===e||"move"===e&&r.hasCompoundNodes()||"load"===e||"zorder"===e||"mount"===e)&&n.invalidateCachedZSortedEles(),"viewport"===e&&n.redrawHint("select",!0),"load"!==e&&"resize"!==e&&"mount"!==e||(n.invalidateContainerClientCoordsCache(),n.matchCanvasSize(n.container)),n.redrawHint("eles",!0),n.redrawHint("drag",!0),this.startRenderLoop(),this.redraw()):n.destroy():n.load())},_s.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var n=e.bindings[t],r=n.target;(r.off||r.removeEventListener).apply(r,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.resizeObserver&&e.resizeObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(i){}},_s.isHeadless=function(){return!1},[ts,vs,ys,ms,bs,xs].forEach((function(e){Q(_s,e)}));var Ts=1e3/60,Ds=function(e){return function(){var t=this,n=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var r=u.default((function(){n.redrawHint("eles",!0),n.redrawHint("drag",!0),n.redraw()}),e.deqRedrawThreshold),i=e.priority||De;n.beforeRender((function(i,a){var o=se(),s=n.averageRedrawTime,l=n.lastRedrawTime,u=[],c=n.cy.extent(),h=n.getPixelRatio();for(i||n.flushRenderedStyleQueue();;){var d=se(),p=d-o,g=d-a;if(l<Ts){var f=Ts-(i?s:0);if(g>=e.deqFastCost*f)break}else if(i){if(p>=e.deqCost*l||p>=e.deqAvgCost*s)break}else if(g>=e.deqNoDrawCost*Ts)break;var v=e.deq(t,h,c);if(!(v.length>0))break;for(var y=0;y<v.length;y++)u.push(v[y])}u.length>0&&(e.onDeqd(t,u),!i&&e.shouldRedraw(t,u,h,c)&&r())}),i(t))}}},Cs=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_e;f(this,e),this.idsByKey=new Fe,this.keyForId=new Fe,this.cachesByLvl=new Fe,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return y(e,[{key:"getIdsFor",value:function(e){null==e&&Ce("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new Ge,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new Fe,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),Ns={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},As=Me({getKey:null,doesEleInvalidateKey:_e,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Ee,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Ls=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=As(t);Q(n,r),n.lookup=new Cs(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},ks=Ls.prototype;ks.reasons=Ns,ks.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},ks.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},ks.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new c.default((function(e,t){return t.reqs-e.reqs}))},ks.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},ks.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(st(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var u=Math.pow(2,r),c=t.h*u,h=t.w*u,d=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,d))return null;var p,g=l.get(e,r);if(g&&g.invalidated&&(g.invalidated=!1,g.texture.invalidatedWidth-=g.width),g)return g;if(p=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||h>1024)return null;var f=a.getTextureQueue(p),v=f[f.length-2],y=function(){return a.recycleTexture(p,h)||a.addTexture(p,h)};v||(v=f[f.length-1]),v||(v=y()),v.width-v.usedWidth<h&&(v=y());for(var m,b=function(e){return e&&e.scaledLabelShown===d},x=i&&i===Ns.dequeue,w=i&&i===Ns.highQuality,E=i&&i===Ns.downscale,_=r+1;_<=3;_++){var T=l.get(e,_);if(T){m=T;break}}var D=m&&m.level===r+1?m:null,C=function(){v.context.drawImage(D.texture.canvas,D.x,0,D.width,D.height,v.usedWidth,0,h,c)};if(v.context.setTransform(1,0,0,1,0,0),v.context.clearRect(v.usedWidth,0,h,p),b(D))C();else if(b(m)){if(!w)return a.queueElement(e,m.level-1),m;for(var N=m.level;N>r;N--)D=a.getElement(e,t,n,N,Ns.downscale);C()}else{var A;if(!x&&!w&&!E)for(var L=r-1;L>=-4;L--){var k=l.get(e,L);if(k){A=k;break}}if(b(A))return a.queueElement(e,r),A;v.context.translate(v.usedWidth,0),v.context.scale(u,u),this.drawElement(v.context,e,t,d,!1),v.context.scale(1/u,1/u),v.context.translate(-v.usedWidth,0)}return g={x:v.usedWidth,texture:v,level:r,scale:u,width:h,height:c,scaledLabelShown:d},v.usedWidth+=Math.ceil(h+8),v.eleCaches.push(g),l.set(e,r,g),a.checkTextureFullness(v),g},ks.invalidateElements=function(e){for(var t=0;t<e.length;t++)this.invalidateElement(e[t])},ks.invalidateElement=function(e){var t=this,n=t.lookup,r=[];if(n.isInvalid(e)){for(var i=-4;i<=3;i++){var a=n.getForCachedKey(e,i);a&&r.push(a)}if(n.invalidate(e))for(var o=0;o<r.length;o++){var s=r[o],l=s.texture;l.invalidatedWidth+=s.width,s.invalidated=!0,t.checkTextureUtility(l)}t.removeFromQueue(e)}},ks.checkTextureUtility=function(e){e.invalidatedWidth>=.2*e.width&&this.retireTexture(e)},ks.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?Oe(t,e):e.fullnessChecks++},ks.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;Oe(n,e),e.retired=!0;for(var i=e.eleCaches,a=0;a<i.length;a++){var o=i[a];r.deleteCache(o.key,o.level)}Pe(i),this.getRetiredTextureQueue(t).push(e)},ks.addTexture=function(e,t){var n={};return this.getTextureQueue(e).push(n),n.eleCaches=[],n.height=e,n.width=Math.max(1024,t),n.usedWidth=0,n.invalidatedWidth=0,n.fullnessChecks=0,n.canvas=this.renderer.makeOffscreenCanvas(n.width,n.height),n.context=n.canvas.getContext("2d"),n},ks.recycleTexture=function(e,t){for(var n=this.getTextureQueue(e),r=this.getRetiredTextureQueue(e),i=0;i<r.length;i++){var a=r[i];if(a.width>=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,Pe(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),Oe(r,a),n.push(a),a}},ks.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(e),a=r[i];if(a)a.level=Math.max(a.level,t),a.eles.merge(e),a.reqs++,n.updateItem(a);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:i};n.push(o),r[i]=o}},ks.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=a.hasCache(u,s.level);if(r[l]=null,!c){i.push(s);var h=t.getBoundingBox(u);t.getElement(u,h,e,s.level,Ns.dequeue)}}return i},ks.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=we,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},ks.onDequeue=function(e){this.onDequeues.push(e)},ks.offDequeue=function(e){Oe(this.onDequeues,e)},ks.setupDequeueing=Ds({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n<e.onDequeues.length;n++){(0,e.onDequeues[n])(t)}},shouldRedraw:function(e,t,n,r){for(var i=0;i<t.length;i++)for(var a=t[i].eles,o=0;o<a.length;o++){var s=a[o].boundingBox();if(wt(s,r))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}});var Ss=function(e){var t=this,n=t.renderer=e,r=n.cy;t.layersByLevel={},t.firstGet=!0,t.lastInvalidationTime=se()-500,t.skipping=!1,t.eleTxrDeqs=r.collection(),t.scheduleElementRefinement=u.default((function(){t.refineElementTextures(t.eleTxrDeqs),t.eleTxrDeqs.unmerge(t.eleTxrDeqs)}),50),n.beforeRender((function(e,n){n-t.lastInvalidationTime<=250?t.skipping=!0:t.skipping=!1}),n.beforeRenderPriorities.lyrTxrSkip);t.layersQueue=new c.default((function(e,t){return t.reqs-e.reqs})),t.setupDequeueing()},Is=Ss.prototype,Ms=0,Os=Math.pow(2,53)-1;Is.makeLayer=function(e,t){var n=Math.pow(2,t),r=Math.ceil(e.w*n),i=Math.ceil(e.h*n),a=this.renderer.makeOffscreenCanvas(r,i),o={id:Ms=++Ms%Os,bb:e,level:t,width:r,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,l=-o.bb.x1,u=-o.bb.y1;return s.scale(n,n),s.translate(l,u),o},Is.getLayers=function(e,t,n){var r=this,i=r.renderer.cy.zoom(),a=r.firstGet;if(r.firstGet=!1,null==n)if((n=Math.ceil(st(i*t)))<-4)n=-4;else if(i>=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},i=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=c.length-1;a>=0;a--){var o=c[a];o.invalid&&Oe(c,o)}}();var h=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=ft();for(var t=0;t<e.length;t++)vt(o,e[t].boundingBox())}}(),o.w*u*(o.h*u)>16e6)return null;var a=r.makeLayer(o,n);if(null!=i){var s=c.indexOf(i)+1;c.splice(s,0,a)}else(void 0===t.insert||t.insert)&&c.unshift(a);return a};if(r.skipping&&!a)return null;for(var d=null,p=e.length/1,g=!a,f=0;f<e.length;f++){var v=e[f],y=v._private.rscratch,m=y.imgLayerCaches=y.imgLayerCaches||{},b=m[n];if(b)d=b;else{if((!d||d.eles.length>=p||!_t(d.bb,v.boundingBox()))&&!(d=h({insert:!0,after:d})))return null;s||g?r.queueLayer(d,v):r.drawEleInLayer(d,v,n,t),d.eles.push(v),m[n]=d}}return s||(g?null:c)},Is.getEleLevelForLayerLevel=function(e,t){return e},Is.drawEleInLayer=function(e,t,n,r){var i=this.renderer,a=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(a,!1),i.drawCachedElement(a,t,null,null,n,true),i.setImgSmoothing(a,!0))},Is.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i<n.length;i++){var a=n[i];if(a.reqs>0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},Is.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r<n.length;r++){for(var i=n[r],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(a<0)this.invalidateLayer(i);else{var s=a;for(o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}}},Is.updateElementsInLayers=function(e,t){for(var n=P(e[0]),r=0;r<e.length;r++)for(var i=n?null:e[r],a=n?e[r]:e[r].ele,o=a._private.rscratch,s=o.imgLayerCaches=o.imgLayerCaches||{},l=-4;l<=2;l++){var u=s[l];u&&(i&&this.getEleLevelForLayerLevel(u.level)!==i.level||t(u,a,i))}},Is.haveLayers=function(){for(var e=!1,t=-4;t<=2;t++){var n=this.layersByLevel[t];if(n&&n.length>0){e=!0;break}}return e},Is.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=se(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},Is.invalidateLayer=function(e){if(this.lastInvalidationTime=se(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Oe(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i<n.length;i++){var a=n[i]._private.rscratch.imgLayerCaches;a&&(a[t]=null)}}},Is.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,(function(e,n,r){var i=e.replacement;if(i||((i=e.replacement=t.makeLayer(e.bb,e.level)).replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])}))},Is.enqueueElementRefinement=function(e){this.eleTxrDeqs.merge(e),this.scheduleElementRefinement()},Is.queueLayer=function(e,t){var n=this.layersQueue,r=e.elesQueue,i=r.hasId=r.hasId||{};if(!e.replacement){if(t){if(i[t.id()])return;r.push(t),i[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},Is.dequeue=function(e){for(var t=this,n=t.layersQueue,r=[],i=0;i<1&&0!==n.size();){var a=n.peek();if(a.replacement)n.pop();else if(a.replaces&&a!==a.replaces.replacement)n.pop();else if(a.invalid)n.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===r.length&&r.push(!0),0===a.elesQueue.length&&(n.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return r},Is.applyLayerReplacement=function(e){var t=this.layersByLevel[e.level],n=e.replaces,r=t.indexOf(n);if(!(r<0||n.invalid)){t[r]=e;for(var i=0;i<e.eles.length;i++){var a=e.eles[i]._private,o=a.imgLayerCaches=a.imgLayerCaches||{};o&&(o[e.level]=e)}this.requestRedraw()}},Is.requestRedraw=u.default((function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()}),100),Is.setupDequeueing=Ds({deqRedrawThreshold:50,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t){return e.dequeue(t)},onDeqd:De,shouldRedraw:Ee,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}});var Ps,Rs={};function Bs(e,t){for(var n=0;n<t.length;n++){var r=t[n];e.lineTo(r.x,r.y)}}function Fs(e,t,n){for(var r,i=0;i<t.length;i++){var a=t[i];0===i&&(r=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(n.x,n.y,r.x,r.y)}function zs(e,t,n){e.beginPath&&e.beginPath();for(var r=t,i=0;i<r.length;i++){var a=r[i];e.lineTo(a.x,a.y)}var o=n,s=n[0];e.moveTo(s.x,s.y);for(i=1;i<o.length;i++){a=o[i];e.lineTo(a.x,a.y)}e.closePath&&e.closePath()}function Gs(e,t,n,r,i){e.beginPath&&e.beginPath(),e.arc(n,r,i,0,2*Math.PI,!1);var a=t,o=a[0];e.moveTo(o.x,o.y);for(var s=0;s<a.length;s++){var l=a[s];e.lineTo(l.x,l.y)}e.closePath&&e.closePath()}function Ys(e,t,n,r){e.arc(t,n,r,0,2*Math.PI,!1)}Rs.arrowShapeImpl=function(e){return(Ps||(Ps={polygon:Bs,"triangle-backcurve":Fs,"triangle-tee":zs,"circle-triangle":Gs,"triangle-cross":zs,circle:Ys}))[e]};var Xs={drawElement:function(e,t,n,r,i,a){t.isNode()?this.drawNode(e,t,n,r,i,a):this.drawEdge(e,t,n,r,i,a)},drawElementOverlay:function(e,t){t.isNode()?this.drawNodeOverlay(e,t):this.drawEdgeOverlay(e,t)},drawElementUnderlay:function(e,t){t.isNode()?this.drawNodeUnderlay(e,t):this.drawEdgeUnderlay(e,t)},drawCachedElementPortion:function(e,t,n,r,i,a,o,s){var l=this,u=n.getBoundingBox(t);if(0!==u.w&&0!==u.h){var c=n.getElement(t,u,r,i,a);if(null!=c){var h=s(l,t);if(0===h)return;var d,p,g,f,v,y,m=o(l,t),b=u.x1,x=u.y1,w=u.w,E=u.h;if(0!==m){var _=n.getRotationPoint(t);g=_.x,f=_.y,e.translate(g,f),e.rotate(m),(v=l.getImgSmoothing(e))||l.setImgSmoothing(e,!0);var T=n.getRotationOffset(t);d=T.x,p=T.y}else d=b,p=x;1!==h&&(y=e.globalAlpha,e.globalAlpha=y*h),e.drawImage(c.texture.canvas,c.x,0,c.width,c.height,d,p,w,E),1!==h&&(e.globalAlpha=y),0!==m&&(e.rotate(-m),e.translate(-g,-f),v||l.setImgSmoothing(e,!1))}else n.drawElement(e,t)}}},Vs=function(){return 0},Us=function(e,t){return e.getTextAngle(t,null)},js=function(e,t){return e.getTextAngle(t,"source")},qs=function(e,t){return e.getTextAngle(t,"target")},Hs=function(e,t){return t.effectiveOpacity()},Ws=function(e,t){return t.pstyle("text-opacity").pfValue*t.effectiveOpacity()};Xs.drawCachedElement=function(e,t,n,r,i,a){var o=this,s=o.data,l=s.eleTxrCache,u=s.lblTxrCache,c=s.slbTxrCache,h=s.tlbTxrCache,d=t.boundingBox(),p=!0===a?l.reasons.highQuality:null;if(0!==d.w&&0!==d.h&&t.visible()&&(!r||wt(d,r))){var g=t.isEdge(),f=t.element()._private.rscratch.badLine;o.drawElementUnderlay(e,t),o.drawCachedElementPortion(e,t,l,n,i,p,Vs,Hs),g&&f||o.drawCachedElementPortion(e,t,u,n,i,p,Us,Ws),g&&!f&&(o.drawCachedElementPortion(e,t,c,n,i,p,js,Ws),o.drawCachedElementPortion(e,t,h,n,i,p,qs,Ws)),o.drawElementOverlay(e,t)}},Xs.drawElements=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];this.drawElement(e,r)}},Xs.drawCachedElements=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];this.drawCachedElement(e,a,n,r)}},Xs.drawCachedNodes=function(e,t,n,r){for(var i=0;i<t.length;i++){var a=t[i];a.isNode()&&this.drawCachedElement(e,a,n,r)}},Xs.drawLayeredElements=function(e,t,n,r){var i=this.data.lyrTxrCache.getLayers(t,n);if(i)for(var a=0;a<i.length;a++){var o=i[a],s=o.bb;0!==s.w&&0!==s.h&&e.drawImage(o.canvas,s.x1,s.y1,s.w,s.h)}else this.drawCachedElements(e,t,n,r)};var $s={drawEdge:function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=a?t.pstyle("opacity").value:1,c=a?t.pstyle("line-opacity").value:1,h=t.pstyle("curve-style").value,d=t.pstyle("line-style").value,p=t.pstyle("width").pfValue,g=t.pstyle("line-cap").value,f=u*c,v=u*c,y=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;"straight-triangle"===h?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=p,e.lineCap=g,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,d),e.lineCap="butt")},m=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;o.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var b=t.pstyle("ghost-offset-x").pfValue,x=t.pstyle("ghost-offset-y").pfValue,w=t.pstyle("ghost-opacity").value,E=f*w;e.translate(b,x),y(E),m(E),e.translate(-b,-x)}i&&o.drawEdgeUnderlay(e,t),y(),m(),i&&o.drawEdgeOverlay(e,t),o.drawElementText(e,t,null,r),n&&e.translate(l.x1,l.y1)}}},Ks=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,l[0],l[1],l[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};$s.drawEdgeOverlay=Ks("overlay"),$s.drawEdgeUnderlay=Ks("underlay"),$s.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),u=e.pstyle("line-dash-pattern").pfValue,c=e.pstyle("line-dash-offset").pfValue;if(l){var h=n.join("$");a.pathCacheKey&&a.pathCacheKey===h?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=h,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(u),o.lineDashOffset=c;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var d=2;d+3<n.length;d+=4)t.quadraticCurveTo(n[d],n[d+1],n[d+2],n[d+3]);break;case"straight":case"segments":case"haystack":for(var p=2;p+1<n.length;p+=2)t.lineTo(n[p],n[p+1])}t=o,l?t.stroke(i):t.stroke(),t.setLineDash&&t.setLineDash([])},$s.drawEdgeTrianglePath=function(e,t,n){t.fillStyle=t.strokeStyle;for(var r=e.pstyle("width").pfValue,i=0;i+1<n.length;i+=2){var a=[n[i+2]-n[i],n[i+3]-n[i+1]],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]),s=[a[1]/o,-a[0]/o],l=[s[0]*r/2,s[1]*r/2];t.beginPath(),t.moveTo(n[i]-l[0],n[i+1]-l[1]),t.lineTo(n[i]+l[0],n[i+1]+l[1]),t.lineTo(n[i+2],n[i+3]),t.closePath(),t.fill()}},$s.drawArrowheads=function(e,t,n){var r=t._private.rscratch,i="haystack"===r.edgeType;i||this.drawArrowhead(e,t,"source",r.arrowStartX,r.arrowStartY,r.srcArrowAngle,n),this.drawArrowhead(e,t,"mid-target",r.midX,r.midY,r.midtgtArrowAngle,n),this.drawArrowhead(e,t,"mid-source",r.midX,r.midY,r.midsrcArrowAngle,n),i||this.drawArrowhead(e,t,"target",r.arrowEndX,r.arrowEndY,r.tgtArrowAngle,n)},$s.drawArrowhead=function(e,t,n,r,i,a,o){if(!(isNaN(r)||null==r||isNaN(i)||null==i||isNaN(a)||null==a)){var s=this,l=t.pstyle(n+"-arrow-shape").value;if("none"!==l){var u="hollow"===t.pstyle(n+"-arrow-fill").value?"both":"filled",c=t.pstyle(n+"-arrow-fill").value,h=t.pstyle("width").pfValue,d=t.pstyle(n+"-arrow-width"),p="match-line"===d.value?h:d.pfValue;"%"===d.units&&(p*=h);var g=t.pstyle("opacity").value;void 0===o&&(o=g);var f=e.globalCompositeOperation;1===o&&"hollow"!==c||(e.globalCompositeOperation="destination-out",s.colorFillStyle(e,255,255,255,1),s.colorStrokeStyle(e,255,255,255,1),s.drawArrowShape(t,e,u,h,l,p,r,i,a),e.globalCompositeOperation=f);var v=t.pstyle(n+"-arrow-color").value;s.colorFillStyle(e,v[0],v[1],v[2],o),s.colorStrokeStyle(e,v[0],v[1],v[2],o),s.drawArrowShape(t,e,c,h,l,p,r,i,a)}}},$s.drawArrowShape=function(e,t,n,r,i,a,o,s,l){var u,c=this,h=this.usePaths()&&"triangle-cross"!==i,d=!1,p=t,g={x:o,y:s},f=e.pstyle("arrow-scale").value,v=this.getArrowWidth(r,f),y=c.arrowShapes[i];if(h){var m=c.arrowPathCache=c.arrowPathCache||[],b=fe(i),x=m[b];null!=x?(u=t=x,d=!0):(u=t=new Path2D,m[b]=u)}d||(t.beginPath&&t.beginPath(),h?y.draw(t,1,0,{x:0,y:0},1):y.draw(t,v,l,g,r),t.closePath&&t.closePath()),t=p,h&&(t.translate(o,s),t.rotate(l),t.scale(v,v)),"filled"!==n&&"both"!==n||(h?t.fill(u):t.fill()),"hollow"!==n&&"both"!==n||(t.lineWidth=a/(h?v:1),t.lineJoin="miter",h?t.stroke(u):t.stroke()),h&&(t.scale(1/v,1/v),t.rotate(-l),t.translate(-o,-s))};var Zs={safeDrawImage:function(e,t,n,r,i,a,o,s,l,u){if(!(i<=0||a<=0||l<=0||u<=0))try{e.drawImage(t,n,r,i,a,o,s,l,u)}catch(c){Ae(c)}},drawInscribedImage:function(e,t,n,r,i){var a=this,o=n.position(),s=o.x,l=o.y,u=n.cy().style(),c=u.getIndexedStyle.bind(u),h=c(n,"background-fit","value",r),d=c(n,"background-repeat","value",r),p=n.width(),g=n.height(),f=2*n.padding(),v=p+("inner"===c(n,"background-width-relative-to","value",r)?0:f),y=g+("inner"===c(n,"background-height-relative-to","value",r)?0:f),m=n._private.rscratch,b="node"===c(n,"background-clip","value",r),x=c(n,"background-image-opacity","value",r)*i,w=c(n,"background-image-smoothing","value",r),E=t.width||t.cachedW,_=t.height||t.cachedH;null!=E&&null!=_||(document.body.appendChild(t),E=t.cachedW=t.width||t.offsetWidth,_=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var T=E,D=_;if("auto"!==c(n,"background-width","value",r)&&(T="%"===c(n,"background-width","units",r)?c(n,"background-width","pfValue",r)*v:c(n,"background-width","pfValue",r)),"auto"!==c(n,"background-height","value",r)&&(D="%"===c(n,"background-height","units",r)?c(n,"background-height","pfValue",r)*y:c(n,"background-height","pfValue",r)),0!==T&&0!==D){if("contain"===h)T*=C=Math.min(v/T,y/D),D*=C;else if("cover"===h){var C;T*=C=Math.max(v/T,y/D),D*=C}var N=s-v/2,A=c(n,"background-position-x","units",r),L=c(n,"background-position-x","pfValue",r);N+="%"===A?(v-T)*L:L;var k=c(n,"background-offset-x","units",r),S=c(n,"background-offset-x","pfValue",r);N+="%"===k?(v-T)*S:S;var I=l-y/2,M=c(n,"background-position-y","units",r),O=c(n,"background-position-y","pfValue",r);I+="%"===M?(y-D)*O:O;var P=c(n,"background-offset-y","units",r),R=c(n,"background-offset-y","pfValue",r);I+="%"===P?(y-D)*R:R,m.pathCache&&(N-=s,I-=l,s=0,l=0);var B=e.globalAlpha;e.globalAlpha=x;var F=a.getImgSmoothing(e),z=!1;if("no"===w&&F?(a.setImgSmoothing(e,!1),z=!0):"yes"!==w||F||(a.setImgSmoothing(e,!0),z=!0),"no-repeat"===d)b&&(e.save(),m.pathCache?e.clip(m.pathCache):(a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.clip())),a.safeDrawImage(e,t,0,0,E,_,N,I,T,D),b&&e.restore();else{var G=e.createPattern(t,d);e.fillStyle=G,a.nodeShapes[a.getNodeShape(n)].draw(e,s,l,v,y),e.translate(N,I),e.fill(),e.translate(-N,-I)}e.globalAlpha=B,z&&a.setImgSmoothing(e,F)}}},Qs={};function Js(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:5,o=arguments.length>6?arguments[6]:void 0;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),o?e.stroke():e.fill()}Qs.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(st(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t<e.pstyle("min-zoomed-font-size").pfValue)},Qs.drawElementText=function(e,t,n,r,i){var a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var u=t.element()._private.rscratch.badLine,c=t.pstyle("label"),h=t.pstyle("source-label"),d=t.pstyle("target-label");if(u||(!c||!c.value)&&(!h||!h.value)&&(!d||!d.value))return;e.textAlign="center",e.textBaseline="bottom"}var p,g=!n;n&&(p=n,e.translate(-p.x1,-p.y1)),null==i?(o.drawText(e,t,null,g,a),t.isEdge()&&(o.drawText(e,t,"source",g,a),o.drawText(e,t,"target",g,a))):o.drawText(e,t,i,g,a),n&&e.translate(p.x1,p.y1)},Qs.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n<this.fontCaches.length;n++)if((t=this.fontCaches[n]).context===e)return t;return t={context:e},this.fontCaches.push(t),t},Qs.setupTextStyle=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},Qs.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Re(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Qs.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private.rscratch,o=i?t.effectiveOpacity():1;if(!i||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=Re(a,"labelX",n),c=Re(a,"labelY",n),h=this.getLabelText(t,n);if(null!=h&&""!==h&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,i);var d,p=n?n+"-":"",g=Re(a,"labelWidth",n),f=Re(a,"labelHeight",n),v=t.pstyle(p+"text-margin-x").pfValue,y=t.pstyle(p+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;switch(m&&(b="center",x="center"),u+=v,c+=y,0!==(d=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(d),u=0,c=0),x){case"top":break;case"center":c+=f/2;break;case"bottom":c+=f}var w=t.pstyle("text-background-opacity").value,E=t.pstyle("text-border-opacity").value,_=t.pstyle("text-border-width").pfValue,T=t.pstyle("text-background-padding").pfValue,D=0===t.pstyle("text-background-shape").strValue.indexOf("round");if(w>0||_>0&&E>0){var C=u-T;switch(b){case"left":C-=g;break;case"center":C-=g/2}var N=c-f-T,A=g+2*T,L=f+2*T;if(w>0){var k=e.fillStyle,S=t.pstyle("text-background-color").value;e.fillStyle="rgba("+S[0]+","+S[1]+","+S[2]+","+w*o+")",D?Js(e,C,N,A,L,2):e.fillRect(C,N,A,L),e.fillStyle=k}if(_>0&&E>0){var I=e.strokeStyle,M=e.lineWidth,O=t.pstyle("text-border-color").value,P=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+O[0]+","+O[1]+","+O[2]+","+E*o+")",e.lineWidth=_,e.setLineDash)switch(P){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=_/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(D?Js(e,C,N,A,L,2,"stroke"):e.strokeRect(C,N,A,L),"double"===P){var R=_/2;D?Js(e,C+R,N+R,A-2*R,L-2*R,2,"stroke"):e.strokeRect(C+R,N+R,A-2*R,L-2*R)}e.setLineDash&&e.setLineDash([]),e.lineWidth=M,e.strokeStyle=I}}var B=2*t.pstyle("text-outline-width").pfValue;if(B>0&&(e.lineWidth=B),"wrap"===t.pstyle("text-wrap").value){var F=Re(a,"labelWrapCachedLines",n),z=Re(a,"labelLineHeight",n),G=g/2,Y=this.getLabelJustification(t);switch("auto"===Y||("left"===b?"left"===Y?u+=-g:"center"===Y&&(u+=-G):"center"===b?"left"===Y?u+=-G:"right"===Y&&(u+=G):"right"===b&&("center"===Y?u+=G:"right"===Y&&(u+=g))),x){case"top":case"center":case"bottom":c-=(F.length-1)*z}for(var X=0;X<F.length;X++)B>0&&e.strokeText(F[X],u,c),e.fillText(F[X],u,c),c+=z}else B>0&&e.strokeText(h,u,c),e.fillText(h,u,c);0!==d&&(e.rotate(-d),e.translate(-s,-l))}}};var el={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,h=t.position();if(I(h.x)&&I(h.y)&&(!s||t.visible())){var d,p,g=s?t.effectiveOpacity():1,f=l.usePaths(),v=!1,y=t.padding();r=t.width()+2*y,i=t.height()+2*y,n&&(p=n,e.translate(-p.x1,-p.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E<m.length;E++){var _=m[E];if(b[E]=null!=_&&"none"!==_){var T=t.cy().style().getIndexedStyle(t,"background-image-crossorigin","value",E);w++,x[E]=l.getCachedImage(_,T,(function(){u.backgroundTimestamp=Date.now(),t.emitAndNotify("background")}))}}var D=t.pstyle("background-blacken").value,C=t.pstyle("border-width").pfValue,N=t.pstyle("background-opacity").value*g,A=t.pstyle("border-color").value,L=t.pstyle("border-style").value,k=t.pstyle("border-opacity").value*g,S=t.pstyle("outline-width").pfValue,M=t.pstyle("outline-color").value,O=t.pstyle("outline-style").value,P=t.pstyle("outline-opacity").value*g,R=t.pstyle("outline-offset").value;e.lineJoin="miter";var B=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:N;l.eleFillStyle(e,t,n)},F=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:k;l.colorStrokeStyle(e,A[0],A[1],A[2],t)},z=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:P;l.colorStrokeStyle(e,M[0],M[1],M[2],t)},G=function(e,t,n,r){var i,a=l.nodePathCache=l.nodePathCache||[],o=ve("polygon"===n?n+","+r.join(","):n,""+t,""+e),s=a[o],u=!1;return null!=s?(i=s,u=!0,c.pathCache=i):(i=new Path2D,a[o]=c.pathCache=i),{path:i,cacheHit:u}},Y=t.pstyle("shape").strValue,X=t.pstyle("shape-polygon-points").pfValue;if(f){e.translate(h.x,h.y);var V=G(r,i,Y,X);d=V.path,v=V.cacheHit}var U=function(){if(!v){var n=h;f&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(d||e,n.x,n.y,r,i)}f?e.fill(d):e.fill()},j=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=u.backgrounding,a=0,o=0;o<x.length;o++){var s=t.cy().style().getIndexedStyle(t,"background-image-containment","value",o);r&&"over"===s||!r&&"inside"===s?a++:b[o]&&x[o].complete&&!x[o].error&&(a++,l.drawInscribedImage(e,x[o],t,o,n))}u.backgrounding=!(a===w),i!==u.backgrounding&&t.updateStyle(!1)},q=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;l.hasPie(t)&&(l.drawPie(e,t,a),n&&(f||l.nodeShapes[l.getNodeShape(t)].draw(e,h.x,h.y,r,i)))},H=function(){var t=(D>0?D:-D)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:g),n=D>0?0:255;0!==D&&(l.colorFillStyle(e,n,n,n,t),f?e.fill(d):e.fill())},W=function(){if(C>0){if(e.lineWidth=C,e.lineCap="butt",e.setLineDash)switch(L){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(f?e.stroke(d):e.stroke(),"double"===L){e.lineWidth=C/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(d):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},$=function(){if(S>0){if(e.lineWidth=S,e.lineCap="butt",e.setLineDash)switch(O){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var n=h;f&&(n={x:0,y:0});var a,o=l.getNodeShape(t),s=(r+C+(S+R))/r,u=(i+C+(S+R))/i,c=r*s,d=i*u,p=l.nodeShapes[o].points;if(f)a=G(c,d,o,p).path;if("ellipse"===o)l.drawEllipsePath(a||e,n.x,n.y,c,d);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(o)){var g=0,v=0,y=0;"round-diamond"===o?g=1.4*(C+R+S):"round-heptagon"===o?(g=1.075*(C+R+S),y=-(C/2+R+S)/35):"round-hexagon"===o?g=1.12*(C+R+S):"round-pentagon"===o?(g=1.13*(C+R+S),y=-(C/2+R+S)/15):"round-tag"===o?(g=1.12*(C+R+S),v=.07*(C/2+S+R)):"round-triangle"===o&&(g=(C+R+S)*(Math.PI/2),y=-(C+R/2+S)/Math.PI),0!==g&&(s=(r+g)/r,u=(i+g)/i),l.drawRoundPolygonPath(a||e,n.x+v,n.y+y,r*s,i*u,p)}else if(["roundrectangle","round-rectangle"].includes(o))l.drawRoundRectanglePath(a||e,n.x,n.y,c,d);else if(["cutrectangle","cut-rectangle"].includes(o))l.drawCutRectanglePath(a||e,n.x,n.y,c,d);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(o))l.drawBottomRoundRectanglePath(a||e,n.x,n.y,c,d);else if("barrel"===o)l.drawBarrelPath(a||e,n.x,n.y,c,d);else if(o.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(o)){p=St(It(p,(C+S+R)/r)),l.drawPolygonPath(a||e,n.x,n.y,r,i,p)}else{p=St(It(p,-((C+S+R)/r))),l.drawPolygonPath(a||e,n.x,n.y,r,i,p)}if(f?e.stroke(a):e.stroke(),"double"===O){e.lineWidth=C/3;var m=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",f?e.stroke(a):e.stroke(),e.globalCompositeOperation=m}e.setLineDash&&e.setLineDash([])}};if("yes"===t.pstyle("ghost").value){var K=t.pstyle("ghost-offset-x").pfValue,Z=t.pstyle("ghost-offset-y").pfValue,Q=t.pstyle("ghost-opacity").value,J=Q*g;e.translate(K,Z),z(),$(),B(Q*N),U(),j(J,!0),F(Q*k),W(),q(0!==D||0!==C),j(J,!1),H(J),e.translate(-K,-Z)}f&&e.translate(-h.x,-h.y),o&&l.drawNodeUnderlay(e,t,h,r,i),f&&e.translate(h.x,h.y),z(),$(),B(),U(),j(g,!0),F(),W(),q(0!==D||0!==C),j(g,!1),H(),f&&e.translate(-h.x,-h.y),l.drawElementText(e,t,null,a),o&&l.drawNodeOverlay(e,t,h,r,i),n&&e.translate(p.x1,p.y1)}}},tl=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){if(n.visible()){var o=n.pstyle("".concat(e,"-padding")).pfValue,s=n.pstyle("".concat(e,"-opacity")).value,l=n.pstyle("".concat(e,"-color")).value,u=n.pstyle("".concat(e,"-shape")).value;if(s>0){if(r=r||n.position(),null==i||null==a){var c=n.padding();i=n.width()+2*c,a=n.height()+2*c}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[u].draw(t,r.x,r.y,i+2*o,a+2*o),t.fill()}}}};el.drawNodeOverlay=tl("overlay"),el.drawNodeUnderlay=tl("underlay"),el.hasPie=function(e){return(e=e[0])._private.hasPie},el.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,l=t.width(),u=t.height(),c=Math.min(l,u)/2,h=0;this.usePaths()&&(o=0,s=0),"%"===a.units?c*=a.pfValue:void 0!==a.pfValue&&(c=a.pfValue/2);for(var d=1;d<=i.pieBackgroundN;d++){var p=t.pstyle("pie-"+d+"-background-size").value,g=t.pstyle("pie-"+d+"-background-color").value,f=t.pstyle("pie-"+d+"-background-opacity").value*n,v=p/100;v+h>1&&(v=1-h);var y=1.5*Math.PI+2*Math.PI*h,m=y+2*Math.PI*v;0===p||h>=1||h+v>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,c,y,m),e.closePath(),this.colorFillStyle(e,g[0],g[1],g[2],f),e.fill(),h+=v)}};var nl={};nl.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},nl.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;i<n.length;i++)if((t=n[i]).context===e){r=!1;break}return r&&(t={context:e},n.push(t)),t},nl.createGradientStyleFor=function(e,t,n,r,i){var a,o=this.usePaths(),s=n.pstyle(t+"-gradient-stop-colors").value,l=n.pstyle(t+"-gradient-stop-positions").pfValue;if("radial-gradient"===r)if(n.isEdge()){var u=n.sourceEndpoint(),c=n.targetEndpoint(),h=n.midpoint(),d=ut(u,h),p=ut(c,h);a=e.createRadialGradient(h.x,h.y,0,h.x,h.y,Math.max(d,p))}else{var g=o?{x:0,y:0}:n.position(),f=n.paddedWidth(),v=n.paddedHeight();a=e.createRadialGradient(g.x,g.y,0,g.x,g.y,Math.max(f,v))}else if(n.isEdge()){var y=n.sourceEndpoint(),m=n.targetEndpoint();a=e.createLinearGradient(y.x,y.y,m.x,m.y)}else{var b=o?{x:0,y:0}:n.position(),x=n.paddedWidth()/2,w=n.paddedHeight()/2;switch(n.pstyle("background-gradient-direction").value){case"to-bottom":a=e.createLinearGradient(b.x,b.y-w,b.x,b.y+w);break;case"to-top":a=e.createLinearGradient(b.x,b.y+w,b.x,b.y-w);break;case"to-left":a=e.createLinearGradient(b.x+x,b.y,b.x-x,b.y);break;case"to-right":a=e.createLinearGradient(b.x-x,b.y,b.x+x,b.y);break;case"to-bottom-right":case"to-right-bottom":a=e.createLinearGradient(b.x-x,b.y-w,b.x+x,b.y+w);break;case"to-top-right":case"to-right-top":a=e.createLinearGradient(b.x-x,b.y+w,b.x+x,b.y-w);break;case"to-bottom-left":case"to-left-bottom":a=e.createLinearGradient(b.x+x,b.y-w,b.x-x,b.y+w);break;case"to-top-left":case"to-left-top":a=e.createLinearGradient(b.x+x,b.y+w,b.x-x,b.y-w)}}if(!a)return null;for(var E=l.length===s.length,_=s.length,T=0;T<_;T++)a.addColorStop(E?l[T]:T/(_-1),"rgba("+s[T][0]+","+s[T][1]+","+s[T][2]+","+i+")");return a},nl.gradientFillStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"background",t,n,r);if(!i)return null;e.fillStyle=i},nl.colorFillStyle=function(e,t,n,r,i){e.fillStyle="rgba("+t+","+n+","+r+","+i+")"},nl.eleFillStyle=function(e,t,n){var r=t.pstyle("background-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientFillStyle(e,t,r,n);else{var i=t.pstyle("background-color").value;this.colorFillStyle(e,i[0],i[1],i[2],n)}},nl.gradientStrokeStyle=function(e,t,n,r){var i=this.createGradientStyleFor(e,"line",t,n,r);if(!i)return null;e.strokeStyle=i},nl.colorStrokeStyle=function(e,t,n,r,i){e.strokeStyle="rgba("+t+","+n+","+r+","+i+")"},nl.eleStrokeStyle=function(e,t,n){var r=t.pstyle("line-fill").value;if("linear-gradient"===r||"radial-gradient"===r)this.gradientStrokeStyle(e,t,r,n);else{var i=t.pstyle("line-color").value;this.colorStrokeStyle(e,i[0],i[1],i[2],n)}},nl.matchCanvasSize=function(e){var t=this,n=t.data,r=t.findContainerClientCoords(),i=r[2],a=r[3],o=t.getPixelRatio(),s=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(o=s);var l,u=i*o,c=a*o;if(u!==t.canvasWidth||c!==t.canvasHeight){t.fontCaches=null;var h=n.canvasContainer;h.style.width=i+"px",h.style.height=a+"px";for(var d=0;d<t.CANVAS_LAYERS;d++)(l=n.canvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";for(d=0;d<t.BUFFER_COUNT;d++)(l=n.bufferCanvases[d]).width=u,l.height=c,l.style.width=i+"px",l.style.height=a+"px";t.textureMult=1,o<=1&&(l=n.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,l.width=u*t.textureMult,l.height=c*t.textureMult),t.canvasWidth=u,t.canvasHeight=c}},nl.renderTo=function(e,t,n,r){this.render({forcedContext:e,forcedZoom:t,forcedPan:n,drawAllLayers:!0,forcedPxRatio:r})},nl.render=function(e){var t=(e=e||Ie()).forcedContext,n=e.drawAllLayers,r=e.drawOnlyNodeLayer,i=e.forcedZoom,a=e.forcedPan,o=this,s=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,l=o.cy,u=o.data,c=u.canvasNeedsRedraw,h=o.textureOnViewport&&!t&&(o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming),d=void 0!==e.motionBlur?e.motionBlur:o.motionBlur,p=o.motionBlurPxRatio,g=l.hasCompoundNodes(),f=o.hoverData.draggingEles,v=!(!o.hoverData.selecting&&!o.touchData.selecting),y=d=d&&!t&&o.motionBlurEnabled&&!v;t||(o.prevPxRatio!==s&&(o.invalidateContainerClientCoordsCache(),o.matchCanvasSize(o.container),o.redrawHint("eles",!0),o.redrawHint("drag",!0)),o.prevPxRatio=s),!t&&o.motionBlurTimeout&&clearTimeout(o.motionBlurTimeout),d&&(null==o.mbFrames&&(o.mbFrames=0),o.mbFrames++,o.mbFrames<3&&(y=!1),o.mbFrames>o.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!h&&(c[o.NODE]=!0,c[o.SELECT_BOX]=!0);var m=l.style(),b=l.zoom(),x=void 0!==i?i:b,w=l.pan(),E={x:w.x,y:w.y},_={zoom:b,pan:{x:w.x,y:w.y}},T=o.prevViewport;void 0===T||_.zoom!==T.zoom||_.pan.x!==T.pan.x||_.pan.y!==T.pan.y||f&&!g||(o.motionBlurPxRatio=1),a&&(E=a),x*=s,E.x*=s,E.y*=s;var D=o.getCachedZSortedEles();function C(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function N(e,r){var s,l,c,h;o.clearingMotionBlur||e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=E,l=x,c=o.canvasWidth,h=o.canvasHeight):(s={x:w.x*p,y:w.y*p},l=b*p,c=o.canvasWidth*p,h=o.canvasHeight*p),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?C(e,0,0,c,h):t||void 0!==r&&!r||e.clearRect(0,0,c,h),n||(e.translate(s.x,s.y),e.scale(l,l)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(h||(o.textureDrawLastFrame=!1),h){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=l.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var A=o.data.bufferContexts[o.TEXTURE_BUFFER];A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:A,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(_=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-_.pan.x)/_.zoom,y:(0-_.pan.y)/_.zoom}}c[o.DRAG]=!1,c[o.NODE]=!1;var L=u.contexts[o.NODE],k=o.textureCache.texture;_=o.textureCache.viewport;L.setTransform(1,0,0,1,0,0),d?C(L,0,0,_.width,_.height):L.clearRect(0,0,_.width,_.height);var S=m.core("outside-texture-bg-color").value,I=m.core("outside-texture-bg-opacity").value;o.colorFillStyle(L,S[0],S[1],S[2],I),L.fillRect(0,0,_.width,_.height);b=l.zoom();N(L,!1),L.clearRect(_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s),L.drawImage(k,_.mpan.x,_.mpan.y,_.width/_.zoom/s,_.height/_.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var M=l.extent(),O=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&O,R=[];if(R[o.NODE]=!c[o.NODE]&&d&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,R[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),R[o.DRAG]=!c[o.DRAG]&&d&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,R[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),c[o.NODE]||n||r||R[o.NODE]){var B=d&&!R[o.NODE]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:u.contexts[o.NODE]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.nondrag,s,M):o.drawLayeredElements(L,D.nondrag,s,M),o.debug&&o.drawDebugPoints(L,D.nondrag),n||d||(c[o.NODE]=!1)}if(!r&&(c[o.DRAG]||n||R[o.DRAG])){B=d&&!R[o.DRAG]&&1!==p;N(L=t||(B?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:u.contexts[o.DRAG]),d&&!B?"motionBlur":void 0),P?o.drawCachedNodes(L,D.drag,s,M):o.drawCachedElements(L,D.drag,s,M),o.debug&&o.drawDebugPoints(L,D.drag),n||d||(c[o.DRAG]=!1)}if(o.showFps||!r&&c[o.SELECT_BOX]&&!n){if(N(L=t||u.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){b=o.cy.zoom();var F=m.core("selection-box-border-width").value/b;L.lineWidth=F,L.fillStyle="rgba("+m.core("selection-box-color").value[0]+","+m.core("selection-box-color").value[1]+","+m.core("selection-box-color").value[2]+","+m.core("selection-box-opacity").value+")",L.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),F>0&&(L.strokeStyle="rgba("+m.core("selection-box-border-color").value[0]+","+m.core("selection-box-border-color").value[1]+","+m.core("selection-box-border-color").value[2]+","+m.core("selection-box-opacity").value+")",L.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(u.bgActivePosistion&&!o.hoverData.selecting){b=o.cy.zoom();var z=u.bgActivePosistion;L.fillStyle="rgba("+m.core("active-bg-color").value[0]+","+m.core("active-bg-color").value[1]+","+m.core("active-bg-color").value[2]+","+m.core("active-bg-opacity").value+")",L.beginPath(),L.arc(z.x,z.y,m.core("active-bg-size").pfValue/b,0,2*Math.PI),L.fill()}var G=o.lastRedrawTime;if(o.showFps&&G){G=Math.round(G);var Y=Math.round(1e3/G);L.setTransform(1,0,0,1,0,0),L.fillStyle="rgba(255, 0, 0, 0.75)",L.strokeStyle="rgba(255, 0, 0, 0.75)",L.lineWidth=1,L.fillText("1 frame = "+G+" ms = "+Y+" fps",0,20);L.strokeRect(0,30,250,20),L.fillRect(0,30,250*Math.min(Y/60,1),20)}n||(c[o.SELECT_BOX]=!1)}if(d&&1!==p){var X=u.contexts[o.NODE],V=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],U=u.contexts[o.DRAG],j=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],q=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!y?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):C(e,0,0,o.canvasWidth,o.canvasHeight);var r=p;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(c[o.NODE]||R[o.NODE])&&(q(X,V,R[o.NODE]),c[o.NODE]=!1),(c[o.DRAG]||R[o.DRAG])&&(q(U,j,R[o.DRAG]),c[o.DRAG]=!1)}o.prevViewport=_,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),d&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!h,o.mbFrames=0,c[o.NODE]=!0,c[o.DRAG]=!0,o.redraw()}),100)),t||l.emit("render")};for(var rl={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var l=1;l<a.length/2;l++)e.lineTo(t+o*a[2*l],n+s*a[2*l+1]);e.closePath()},drawRoundPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2,l=Vt(r,i);e.beginPath&&e.beginPath();for(var u=0;u<a.length/4;u++){var c,h=void 0;h=0===u?a.length-2:4*u-2,c=4*u+2;var d=t+o*a[4*u],p=n+s*a[4*u+1],g=-a[h]*a[c]-a[h+1]*a[c+1],f=l/Math.tan(Math.acos(g)/2),v=d-f*a[h],y=p-f*a[h+1],m=d+f*a[c],b=p+f*a[c+1];0===u?e.moveTo(v,y):e.lineTo(v,y),e.arcTo(d,p,m,b,l)}e.closePath()},drawRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=Xt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.arcTo(t+a,n-o,t+a,n,s),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.arcTo(t-a,n-o,t,n-o,s),e.lineTo(t,n-o),e.closePath()},drawBottomRoundRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2,s=Xt(r,i);e.beginPath&&e.beginPath(),e.moveTo(t,n-o),e.lineTo(t+a,n-o),e.lineTo(t+a,n),e.arcTo(t+a,n+o,t,n+o,s),e.arcTo(t-a,n+o,t-a,n,s),e.lineTo(t-a,n-o),e.lineTo(t,n-o),e.closePath()},drawCutRectanglePath:function(e,t,n,r,i){var a=r/2,o=i/2;e.beginPath&&e.beginPath(),e.moveTo(t-a+8,n-o),e.lineTo(t+a-8,n-o),e.lineTo(t+a,n-o+8),e.lineTo(t+a,n+o-8),e.lineTo(t+a-8,n+o),e.lineTo(t-a+8,n+o),e.lineTo(t-a,n+o-8),e.lineTo(t-a,n-o+8),e.closePath()},drawBarrelPath:function(e,t,n,r,i){var a=r/2,o=i/2,s=t-a,l=t+a,u=n-o,c=n+o,h=Ut(r,i),d=h.widthOffset,p=h.heightOffset,g=h.ctrlPtOffsetPct*d;e.beginPath&&e.beginPath(),e.moveTo(s,u+p),e.lineTo(s,c-p),e.quadraticCurveTo(s+g,c,s+d,c),e.lineTo(l-d,c),e.quadraticCurveTo(l-g,c,l,c-p),e.lineTo(l,u+p),e.quadraticCurveTo(l-g,u,l-d,u),e.lineTo(s+d,u),e.quadraticCurveTo(s+g,u,s,u+p),e.closePath()}},il=Math.sin(0),al=Math.cos(0),ol={},sl={},ll=Math.PI/40,ul=0*Math.PI;ul<2*Math.PI;ul+=ll)ol[ul]=Math.sin(ul),sl[ul]=Math.cos(ul);rl.drawEllipsePath=function(e,t,n,r,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,n,r/2,i/2,0,0,2*Math.PI);else for(var a,o,s=r/2,l=i/2,u=0*Math.PI;u<2*Math.PI;u+=ll)a=t-s*ol[u]*il+s*sl[u]*al,o=n+l*sl[u]*il+l*ol[u]*al,0===u?e.moveTo(a,o):e.lineTo(a,o);e.closePath()};var cl={};function hl(e){var t=e.indexOf(",");return e.substr(t+1)}function dl(e,t,n){var r=function(){return t.toDataURL(n,e.quality)};switch(e.output){case"blob-promise":return new rr((function(r,i){try{t.toBlob((function(e){null!=e?r(e):i(new Error("`canvas.toBlob()` sent a null value in its callback"))}),n,e.quality)}catch(a){i(a)}}));case"blob":return function(e,t){for(var n=atob(e),r=new ArrayBuffer(n.length),i=new Uint8Array(r),a=0;a<n.length;a++)i[a]=n.charCodeAt(a);return new Blob([r],{type:t})}(hl(r()),n);case"base64":return hl(r());default:return r()}}cl.createBuffer=function(e,t){var n=document.createElement("canvas");return n.width=e,n.height=t,[n,n.getContext("2d")]},cl.bufferCanvasImage=function(e){var t=this.cy,n=t.mutableElements().boundingBox(),r=this.findContainerClientCoords(),i=e.full?Math.ceil(n.w):r[2],a=e.full?Math.ceil(n.h):r[3],o=I(e.maxWidth)||I(e.maxHeight),s=this.getPixelRatio(),l=1;if(void 0!==e.scale)i*=e.scale,a*=e.scale,l=e.scale;else if(o){var u=1/0,c=1/0;I(e.maxWidth)&&(u=l*e.maxWidth/i),I(e.maxHeight)&&(c=l*e.maxHeight/a),i*=l=Math.min(u,c),a*=l}o||(i*=s,a*=s,l*=s);var h=document.createElement("canvas");h.width=i,h.height=a,h.style.width=i+"px",h.style.height=a+"px";var d=h.getContext("2d");if(i>0&&a>0){d.clearRect(0,0,i,a),d.globalCompositeOperation="source-over";var p=this.getCachedZSortedEles();if(e.full)d.translate(-n.x1*l,-n.y1*l),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(n.x1*l,n.y1*l);else{var g=t.pan(),f={x:g.x*l,y:g.y*l};l*=t.zoom(),d.translate(f.x,f.y),d.scale(l,l),this.drawElements(d,p),d.scale(1/l,1/l),d.translate(-f.x,-f.y)}e.bg&&(d.globalCompositeOperation="destination-over",d.fillStyle=e.bg,d.rect(0,0,i,a),d.fill())}return h},cl.png=function(e){return dl(e,this.bufferCanvasImage(e),"image/png")},cl.jpg=function(e){return dl(e,this.bufferCanvasImage(e),"image/jpeg")};var pl={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},gl=vl,fl=vl.prototype;function vl(e){var t=this;t.data={canvases:new Array(fl.CANVAS_LAYERS),contexts:new Array(fl.CANVAS_LAYERS),canvasNeedsRedraw:new Array(fl.CANVAS_LAYERS),bufferCanvases:new Array(fl.BUFFER_COUNT),bufferContexts:new Array(fl.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};E&&E.userAgent.match(/msie|trident|edge/i)&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s<fl.CANVAS_LAYERS;s++){var l=t.data.canvases[s]=document.createElement("canvas");t.data.contexts[s]=l.getContext("2d"),Object.keys(o).forEach((function(e){l.style[e]=o[e]})),l.style.position="absolute",l.setAttribute("data-id","layer"+s),l.style.zIndex=String(fl.CANVAS_LAYERS-s),t.data.canvasContainer.appendChild(l),t.data.canvasNeedsRedraw[s]=!1}t.data.topCanvas=t.data.canvases[0],t.data.canvases[fl.NODE].setAttribute("data-id","layer"+fl.NODE+"-node"),t.data.canvases[fl.SELECT_BOX].setAttribute("data-id","layer"+fl.SELECT_BOX+"-selectbox"),t.data.canvases[fl.DRAG].setAttribute("data-id","layer"+fl.DRAG+"-drag");for(s=0;s<fl.BUFFER_COUNT;s++)t.data.bufferCanvases[s]=document.createElement("canvas"),t.data.bufferContexts[s]=t.data.bufferCanvases[s].getContext("2d"),t.data.bufferCanvases[s].style.position="absolute",t.data.bufferCanvases[s].setAttribute("data-id","buffer"+s),t.data.bufferCanvases[s].style.zIndex=String(-s-1),t.data.bufferCanvases[s].style.visibility="hidden";t.pathsEnabled=!0;var u=ft(),c=function(e){return{x:-e.w/2,y:-e.h/2}},h=function(e){return e.boundingBox(),e[0]._private.bodyBounds},d=function(e){return e.boundingBox(),e[0]._private.labelBounds.main||u},p=function(e){return e.boundingBox(),e[0]._private.labelBounds.source||u},g=function(e){return e.boundingBox(),e[0]._private.labelBounds.target||u},f=function(e,t){return t},v=function(e,t,n){var r=e?e+"-":"";return{x:t.x+n.pstyle(r+"text-margin-x").pfValue,y:t.y+n.pstyle(r+"text-margin-y").pfValue}},y=function(e,t,n){var r=e[0]._private.rscratch;return{x:r[t],y:r[n]}},m=t.data.eleTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.nodeKey},doesEleInvalidateKey:function(e){var t=e[0]._private;return!(t.oldBackgroundTimestamp===t.backgroundTimestamp)},drawElement:function(e,n,r,i,a){return t.drawElement(e,n,r,!1,!1,a)},getBoundingBox:h,getRotationPoint:function(e){return{x:((t=h(e)).x1+t.x2)/2,y:(t.y1+t.y2)/2};var t},getRotationOffset:function(e){return c(h(e))},allowEdgeTxrCaching:!1,allowParentTxrCaching:!1}),b=t.data.lblTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.labelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"main",a)},getBoundingBox:d,getRotationPoint:function(e){return v("",y(e,"labelX","labelY"),e)},getRotationOffset:function(e){var t=d(e),n=c(d(e));if(e.isNode()){switch(e.pstyle("text-halign").value){case"left":n.x=-t.w;break;case"right":n.x=0}switch(e.pstyle("text-valign").value){case"top":n.y=-t.h;break;case"bottom":n.y=0}}return n},isVisible:f}),x=t.data.slbTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.sourceLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"source",a)},getBoundingBox:p,getRotationPoint:function(e){return v("source",y(e,"sourceLabelX","sourceLabelY"),e)},getRotationOffset:function(e){return c(p(e))},isVisible:f}),w=t.data.tlbTxrCache=new Ls(t,{getKey:function(e){return e[0]._private.targetLabelStyleKey},drawElement:function(e,n,r,i,a){return t.drawElementText(e,n,r,i,"target",a)},getBoundingBox:g,getRotationPoint:function(e){return v("target",y(e,"targetLabelX","targetLabelY"),e)},getRotationOffset:function(e){return c(g(e))},isVisible:f}),_=t.data.lyrTxrCache=new Ss(t);t.onUpdateEleCalcs((function(e,t){m.invalidateElements(t),b.invalidateElements(t),x.invalidateElements(t),w.invalidateElements(t),_.invalidateElements(t);for(var n=0;n<t.length;n++){var r=t[n]._private;r.oldBackgroundTimestamp=r.backgroundTimestamp}}));var T=function(e){for(var t=0;t<e.length;t++)_.enqueueElementRefinement(e[t].ele)};m.onDequeue(T),b.onDequeue(T),x.onDequeue(T),w.onDequeue(T)}fl.CANVAS_LAYERS=3,fl.SELECT_BOX=0,fl.DRAG=1,fl.NODE=2,fl.BUFFER_COUNT=3,fl.TEXTURE_BUFFER=0,fl.MOTIONBLUR_BUFFER_NODE=1,fl.MOTIONBLUR_BUFFER_DRAG=2,fl.redrawHint=function(e,t){var n=this;switch(e){case"eles":n.data.canvasNeedsRedraw[fl.NODE]=t;break;case"drag":n.data.canvasNeedsRedraw[fl.DRAG]=t;break;case"select":n.data.canvasNeedsRedraw[fl.SELECT_BOX]=t}};var yl="undefined"!=typeof Path2D;fl.path2dEnabled=function(e){if(void 0===e)return this.pathsEnabled;this.pathsEnabled=!!e},fl.usePaths=function(){return yl&&this.pathsEnabled},fl.setImgSmoothing=function(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)},fl.getImgSmoothing=function(e){return null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled:e.webkitImageSmoothingEnabled||e.mozImageSmoothingEnabled||e.msImageSmoothingEnabled},fl.makeOffscreenCanvas=function(e,t){var n;return"undefined"!==("undefined"==typeof OffscreenCanvas?"undefined":g(OffscreenCanvas))?n=new OffscreenCanvas(e,t):((n=document.createElement("canvas")).width=e,n.height=t),n},[Rs,Xs,$s,Zs,Qs,el,nl,rl,cl,pl].forEach((function(e){Q(fl,e)}));var ml=[{type:"layout",extensions:Zo},{type:"renderer",extensions:[{name:"null",impl:Qo},{name:"base",impl:Es},{name:"canvas",impl:gl}]}],bl={},xl={};function wl(e,t,n){var r=n,i=function(n){Ae("Can not register `"+t+"` for `"+e+"` since `"+n+"` already exists in the prototype and can not be overridden")};if("core"===e){if(uo.prototype[t])return i(t);uo.prototype[t]=n}else if("collection"===e){if(Da.prototype[t])return i(t);Da.prototype[t]=n}else if("layout"===e){for(var a=function(e){this.options=e,n.call(this,e),S(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[],this.createEmitter()},o=a.prototype=Object.create(n.prototype),s=[],l=0;l<s.length;l++){var u=s[l];o[u]=o[u]||function(){return this}}o.start&&!o.run?o.run=function(){return this.start(),this}:!o.start&&o.run&&(o.start=function(){return this.run(),this});var c=n.prototype.stop;o.stop=function(){var e=this.options;if(e&&e.animate){var t=this.animations;if(t)for(var n=0;n<t.length;n++)t[n].stop()}return c?c.call(this):this.emit("layoutstop"),this},o.destroy||(o.destroy=function(){return this}),o.cy=function(){return this._private.cy};var h=function(e){return e._private.cy},d={addEventFields:function(e,t){t.layout=e,t.cy=h(e),t.target=e},bubble:function(){return!0},parent:function(e){return h(e)}};Q(o,{createEmitter:function(){return this._private.emitter=new Vi(d,this),this},emitter:function(){return this._private.emitter},on:function(e,t){return this.emitter().on(e,t),this},one:function(e,t){return this.emitter().one(e,t),this},once:function(e,t){return this.emitter().one(e,t),this},removeListener:function(e,t){return this.emitter().removeListener(e,t),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},emit:function(e,t){return this.emitter().emit(e,t),this}}),ur.eventAliasesOn(o),r=a}else if("renderer"===e&&"null"!==t&&"base"!==t){var p=El("renderer","base"),g=p.prototype,f=n,v=n.prototype,y=function(){p.apply(this,arguments),f.apply(this,arguments)},m=y.prototype;for(var b in g){var x=g[b];if(null!=v[b])return i(b);m[b]=x}for(var w in v)m[w]=v[w];g.clientFunctions.forEach((function(e){m[e]=m[e]||function(){Ce("Renderer does not implement `renderer."+e+"()` on its prototype")}})),r=y}else if("__proto__"===e||"constructor"===e||"prototype"===e)return Ce(e+" is an illegal type to be registered, possibly lead to prototype pollutions");return te({map:bl,keys:[e,t],value:r})}function El(e,t){return ne({map:bl,keys:[e,t]})}function _l(e,t,n,r,i){return te({map:xl,keys:[e,t,n,r],value:i})}function Tl(e,t,n,r){return ne({map:xl,keys:[e,t,n,r]})}var Dl=function(){return 2===arguments.length?El.apply(null,arguments):3===arguments.length?wl.apply(null,arguments):4===arguments.length?Tl.apply(null,arguments):5===arguments.length?_l.apply(null,arguments):void Ce("Invalid extension access syntax")};uo.prototype.extension=Dl,ml.forEach((function(e){e.extensions.forEach((function(t){wl(e.type,t.name,t.impl)}))}));var Cl=function e(){if(!(this instanceof e))return new e;this.length=0},Nl=Cl.prototype;Nl.instanceString=function(){return"stylesheet"},Nl.selector=function(e){return this[this.length++]={selector:e,properties:[]},this},Nl.css=function(e,t){var n=this.length-1;if(A(e))this[n].properties.push({name:e,value:t});else if(S(e))for(var r=e,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a],s=r[o];if(null!=s){var l=io.properties[o]||io.properties[V(o)];if(null!=l){var u=l.name,c=s;this[n].properties.push({name:u,value:c})}}}return this},Nl.style=Nl.css,Nl.generateStyle=function(e){var t=new io(e);return this.appendToStyle(t)},Nl.appendToStyle=function(e){for(var t=0;t<this.length;t++){var n=this[t],r=n.selector,i=n.properties;e.selector(r);for(var a=0;a<i.length;a++){var o=i[a];e.css(o.name,o.value)}}return e};var Al=function(e){return void 0===e&&(e={}),S(e)?new uo(e):A(e)?Dl.apply(Dl,arguments):void 0};Al.use=function(e){var t=Array.prototype.slice.call(arguments,1);return t.unshift(Al),e.apply(null,t),this},Al.warnings=function(e){return Ne(e)},Al.version="3.28.1",Al.stylesheet=Al.Stylesheet=Cl,e.exports=Al},54485:(e,t,n)=>{e.exports=n(22894)},22894:function(e,t){var n,r,i;(function(){var a,o,s,l,u,c,h,d,p,g,f,v,y,m,b;s=Math.floor,g=Math.min,o=function(e,t){return e<t?-1:e>t?1:0},p=function(e,t,n,r,i){var a;if(null==n&&(n=0),null==i&&(i=o),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);n<r;)i(t,e[a=s((n+r)/2)])<0?r=a:n=a+1;return[].splice.apply(e,[n,n-n].concat(t)),t},c=function(e,t,n){return null==n&&(n=o),e.push(t),m(e,0,e.length-1,n)},u=function(e,t){var n,r;return null==t&&(t=o),n=e.pop(),e.length?(r=e[0],e[0]=n,b(e,0,t)):r=n,r},d=function(e,t,n){var r;return null==n&&(n=o),r=e[0],e[0]=t,b(e,0,n),r},h=function(e,t,n){var r;return null==n&&(n=o),e.length&&n(e[0],t)<0&&(t=(r=[e[0],t])[0],e[0]=r[1],b(e,0,n)),t},l=function(e,t){var n,r,i,a,l,u;for(null==t&&(t=o),a=function(){u=[];for(var t=0,n=s(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse(),l=[],r=0,i=a.length;r<i;r++)n=a[r],l.push(b(e,n,t));return l},y=function(e,t,n){var r;if(null==n&&(n=o),-1!==(r=e.indexOf(t)))return m(e,0,r,n),b(e,r,n)},f=function(e,t,n){var r,i,a,s,u;if(null==n&&(n=o),!(i=e.slice(0,t)).length)return i;for(l(i,n),a=0,s=(u=e.slice(t)).length;a<s;a++)r=u[a],h(i,r,n);return i.sort(n).reverse()},v=function(e,t,n){var r,i,a,s,c,h,d,f,v;if(null==n&&(n=o),10*t<=e.length){if(!(a=e.slice(0,t).sort(n)).length)return a;for(i=a[a.length-1],s=0,h=(d=e.slice(t)).length;s<h;s++)n(r=d[s],i)<0&&(p(a,r,0,null,n),a.pop(),i=a[a.length-1]);return a}for(l(e,n),v=[],c=0,f=g(t,e.length);0<=f?c<f:c>f;0<=f?++c:--c)v.push(u(e,n));return v},m=function(e,t,n,r){var i,a,s;for(null==r&&(r=o),i=e[n];n>t&&r(i,a=e[s=n-1>>1])<0;)e[n]=a,n=s;return e[n]=i},b=function(e,t,n){var r,i,a,s,l;for(null==n&&(n=o),i=e.length,l=t,a=e[t],r=2*t+1;r<i;)(s=r+1)<i&&!(n(e[r],e[s])<0)&&(r=s),e[t]=e[r],r=2*(t=r)+1;return e[t]=a,m(e,l,t,n)},a=function(){function e(e){this.cmp=null!=e?e:o,this.nodes=[]}return e.push=c,e.pop=u,e.replace=d,e.pushpop=h,e.heapify=l,e.updateItem=y,e.nlargest=f,e.nsmallest=v,e.prototype.push=function(e){return c(this.nodes,e,this.cmp)},e.prototype.pop=function(){return u(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return d(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return h(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return l(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return y(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return(t=new e).nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),r=[],void 0===(i="function"==typeof(n=function(){return a})?n.apply(t,r):n)||(e.exports=i)}).call(this)},82241:function(e){var t;t=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=26)}([function(e,t,n){"use strict";function r(){}r.QUALITY=1,r.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,r.DEFAULT_INCREMENTAL=!1,r.DEFAULT_ANIMATION_ON_LAYOUT=!0,r.DEFAULT_ANIMATION_DURING_LAYOUT=!1,r.DEFAULT_ANIMATION_PERIOD=50,r.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,r.DEFAULT_GRAPH_MARGIN=15,r.NODE_DIMENSIONS_INCLUDE_LABELS=!1,r.SIMPLE_NODE_SIZE=40,r.SIMPLE_NODE_HALF_SIZE=r.SIMPLE_NODE_SIZE/2,r.EMPTY_COMPOUND_NODE_SIZE=40,r.MIN_EDGE_LENGTH=1,r.WORLD_BOUNDARY=1e6,r.INITIAL_WORLD_BOUNDARY=r.WORLD_BOUNDARY/1e3,r.WORLD_CENTER_X=1200,r.WORLD_CENTER_Y=900,e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(9);function o(e,t,n){r.call(this,n),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=n,this.bendpoints=[],this.source=e,this.target=t}for(var s in o.prototype=Object.create(r.prototype),r)o[s]=r[s];o.prototype.getSource=function(){return this.source},o.prototype.getTarget=function(){return this.target},o.prototype.isInterGraph=function(){return this.isInterGraph},o.prototype.getLength=function(){return this.length},o.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},o.prototype.getBendpoints=function(){return this.bendpoints},o.prototype.getLca=function(){return this.lca},o.prototype.getSourceInLca=function(){return this.sourceInLca},o.prototype.getTargetInLca=function(){return this.targetInLca},o.prototype.getOtherEnd=function(e){if(this.source===e)return this.target;if(this.target===e)return this.source;throw"Node is not incident with this edge"},o.prototype.getOtherEndInGraph=function(e,t){for(var n=this.getOtherEnd(e),r=t.getGraphManager().getRoot();;){if(n.getOwner()==t)return n;if(n.getOwner()==r)break;n=n.getOwner().getParent()}return null},o.prototype.updateLength=function(){var e=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),e),this.isOverlapingSourceAndTarget||(this.lengthX=e[0]-e[2],this.lengthY=e[1]-e[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},o.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},e.exports=o},function(e,t,n){"use strict";e.exports=function(e){this.vGraphObject=e}},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(13),o=n(0),s=n(16),l=n(4);function u(e,t,n,o){null==n&&null==o&&(o=t),r.call(this,o),null!=e.graphManager&&(e=e.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=o,this.edges=[],this.graphManager=e,this.rect=null!=n&&null!=t?new a(t.x,t.y,n.width,n.height):new a}for(var c in u.prototype=Object.create(r.prototype),r)u[c]=r[c];u.prototype.getEdges=function(){return this.edges},u.prototype.getChild=function(){return this.child},u.prototype.getOwner=function(){return this.owner},u.prototype.getWidth=function(){return this.rect.width},u.prototype.setWidth=function(e){this.rect.width=e},u.prototype.getHeight=function(){return this.rect.height},u.prototype.setHeight=function(e){this.rect.height=e},u.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},u.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},u.prototype.getCenter=function(){return new l(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},u.prototype.getLocation=function(){return new l(this.rect.x,this.rect.y)},u.prototype.getRect=function(){return this.rect},u.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},u.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},u.prototype.setRect=function(e,t){this.rect.x=e.x,this.rect.y=e.y,this.rect.width=t.width,this.rect.height=t.height},u.prototype.setCenter=function(e,t){this.rect.x=e-this.rect.width/2,this.rect.y=t-this.rect.height/2},u.prototype.setLocation=function(e,t){this.rect.x=e,this.rect.y=t},u.prototype.moveBy=function(e,t){this.rect.x+=e,this.rect.y+=t},u.prototype.getEdgeListToNode=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.target==e){if(r.source!=n)throw"Incorrect edge source!";t.push(r)}})),t},u.prototype.getEdgesBetween=function(e){var t=[],n=this;return n.edges.forEach((function(r){if(r.source!=n&&r.target!=n)throw"Incorrect edge source and/or target";r.target!=e&&r.source!=e||t.push(r)})),t},u.prototype.getNeighborsList=function(){var e=new Set,t=this;return t.edges.forEach((function(n){if(n.source==t)e.add(n.target);else{if(n.target!=t)throw"Incorrect incidency!";e.add(n.source)}})),e},u.prototype.withChildren=function(){var e=new Set;if(e.add(this),null!=this.child)for(var t=this.child.getNodes(),n=0;n<t.length;n++)t[n].withChildren().forEach((function(t){e.add(t)}));return e},u.prototype.getNoOfChildren=function(){var e=0;if(null==this.child)e=1;else for(var t=this.child.getNodes(),n=0;n<t.length;n++)e+=t[n].getNoOfChildren();return 0==e&&(e=1),e},u.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},u.prototype.calcEstimatedSize=function(){return null==this.child?this.estimatedSize=(this.rect.width+this.rect.height)/2:(this.estimatedSize=this.child.calcEstimatedSize(),this.rect.width=this.estimatedSize,this.rect.height=this.estimatedSize,this.estimatedSize)},u.prototype.scatter=function(){var e,t,n=-o.INITIAL_WORLD_BOUNDARY,r=o.INITIAL_WORLD_BOUNDARY;e=o.WORLD_CENTER_X+s.nextDouble()*(r-n)+n;var i=-o.INITIAL_WORLD_BOUNDARY,a=o.INITIAL_WORLD_BOUNDARY;t=o.WORLD_CENTER_Y+s.nextDouble()*(a-i)+i,this.rect.x=e,this.rect.y=t},u.prototype.updateBounds=function(){if(null==this.getChild())throw"assert failed";if(0!=this.getChild().getNodes().length){var e=this.getChild();if(e.updateBounds(!0),this.rect.x=e.getLeft(),this.rect.y=e.getTop(),this.setWidth(e.getRight()-e.getLeft()),this.setHeight(e.getBottom()-e.getTop()),o.NODE_DIMENSIONS_INCLUDE_LABELS){var t=e.getRight()-e.getLeft(),n=e.getBottom()-e.getTop();this.labelWidth>t&&(this.rect.x-=(this.labelWidth-t)/2,this.setWidth(this.labelWidth)),this.labelHeight>n&&("center"==this.labelPos?this.rect.y-=(this.labelHeight-n)/2:"top"==this.labelPos&&(this.rect.y-=this.labelHeight-n),this.setHeight(this.labelHeight))}}},u.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},u.prototype.transform=function(e){var t=this.rect.x;t>o.WORLD_BOUNDARY?t=o.WORLD_BOUNDARY:t<-o.WORLD_BOUNDARY&&(t=-o.WORLD_BOUNDARY);var n=this.rect.y;n>o.WORLD_BOUNDARY?n=o.WORLD_BOUNDARY:n<-o.WORLD_BOUNDARY&&(n=-o.WORLD_BOUNDARY);var r=new l(t,n),i=e.inverseTransformPoint(r);this.setLocation(i.x,i.y)},u.prototype.getLeft=function(){return this.rect.x},u.prototype.getRight=function(){return this.rect.x+this.rect.width},u.prototype.getTop=function(){return this.rect.y},u.prototype.getBottom=function(){return this.rect.y+this.rect.height},u.prototype.getParent=function(){return null==this.owner?null:this.owner.getParent()},e.exports=u},function(e,t,n){"use strict";function r(e,t){null==e&&null==t?(this.x=0,this.y=0):(this.x=e,this.y=t)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.setX=function(e){this.x=e},r.prototype.setY=function(e){this.y=e},r.prototype.getDifference=function(e){return new DimensionD(this.x-e.x,this.y-e.y)},r.prototype.getCopy=function(){return new r(this.x,this.y)},r.prototype.translate=function(e){return this.x+=e.width,this.y+=e.height,this},e.exports=r},function(e,t,n){"use strict";var r=n(2),i=n(10),a=n(0),o=n(6),s=n(3),l=n(1),u=n(13),c=n(12),h=n(11);function d(e,t,n){r.call(this,n),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=e,null!=t&&t instanceof o?this.graphManager=t:null!=t&&t instanceof Layout&&(this.graphManager=t.graphManager)}for(var p in d.prototype=Object.create(r.prototype),r)d[p]=r[p];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(e,t,n){if(null==t&&null==n){var r=e;if(null==this.graphManager)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(r)>-1)throw"Node already in graph!";return r.owner=this,this.getNodes().push(r),r}var i=e;if(!(this.getNodes().indexOf(t)>-1&&this.getNodes().indexOf(n)>-1))throw"Source or target not in graph!";if(t.owner!=n.owner||t.owner!=this)throw"Both owners must be this graph!";return t.owner!=n.owner?null:(i.source=t,i.target=n,i.isInterGraph=!1,this.getEdges().push(i),t.edges.push(i),n!=t&&n.edges.push(i),i)},d.prototype.remove=function(e){var t=e;if(e instanceof s){if(null==t)throw"Node is null!";if(null==t.owner||t.owner!=this)throw"Owner graph is invalid!";if(null==this.graphManager)throw"Owner graph manager is invalid!";for(var n=t.edges.slice(),r=n.length,i=0;i<r;i++)(a=n[i]).isInterGraph?this.graphManager.remove(a):a.source.owner.remove(a);if(-1==(o=this.nodes.indexOf(t)))throw"Node not in owner node list!";this.nodes.splice(o,1)}else if(e instanceof l){var a;if(null==(a=e))throw"Edge is null!";if(null==a.source||null==a.target)throw"Source and/or target is null!";if(null==a.source.owner||null==a.target.owner||a.source.owner!=this||a.target.owner!=this)throw"Source and/or target owner is invalid!";var o,u=a.source.edges.indexOf(a),c=a.target.edges.indexOf(a);if(!(u>-1&&c>-1))throw"Source and/or target doesn't know this edge!";if(a.source.edges.splice(u,1),a.target!=a.source&&a.target.edges.splice(c,1),-1==(o=a.source.owner.getEdges().indexOf(a)))throw"Not in owner's edge list!";a.source.owner.getEdges().splice(o,1)}},d.prototype.updateLeftTop=function(){for(var e,t,n,r=i.MAX_VALUE,a=i.MAX_VALUE,o=this.getNodes(),s=o.length,l=0;l<s;l++){var u=o[l];r>(e=u.getTop())&&(r=e),a>(t=u.getLeft())&&(a=t)}return r==i.MAX_VALUE?null:(n=null!=o[0].getParent().paddingLeft?o[0].getParent().paddingLeft:this.margin,this.left=a-n,this.top=r-n,new c(this.left,this.top))},d.prototype.updateBounds=function(e){for(var t,n,r,a,o,s=i.MAX_VALUE,l=-i.MAX_VALUE,c=i.MAX_VALUE,h=-i.MAX_VALUE,d=this.nodes,p=d.length,g=0;g<p;g++){var f=d[g];e&&null!=f.child&&f.updateBounds(),s>(t=f.getLeft())&&(s=t),l<(n=f.getRight())&&(l=n),c>(r=f.getTop())&&(c=r),h<(a=f.getBottom())&&(h=a)}var v=new u(s,c,l-s,h-c);s==i.MAX_VALUE&&(this.left=this.parent.getLeft(),this.right=this.parent.getRight(),this.top=this.parent.getTop(),this.bottom=this.parent.getBottom()),o=null!=d[0].getParent().paddingLeft?d[0].getParent().paddingLeft:this.margin,this.left=v.x-o,this.right=v.x+v.width+o,this.top=v.y-o,this.bottom=v.y+v.height+o},d.calculateBounds=function(e){for(var t,n,r,a,o=i.MAX_VALUE,s=-i.MAX_VALUE,l=i.MAX_VALUE,c=-i.MAX_VALUE,h=e.length,d=0;d<h;d++){var p=e[d];o>(t=p.getLeft())&&(o=t),s<(n=p.getRight())&&(s=n),l>(r=p.getTop())&&(l=r),c<(a=p.getBottom())&&(c=a)}return new u(o,l,s-o,c-l)},d.prototype.getInclusionTreeDepth=function(){return this==this.graphManager.getRoot()?1:this.parent.getInclusionTreeDepth()},d.prototype.getEstimatedSize=function(){if(this.estimatedSize==i.MIN_VALUE)throw"assert failed";return this.estimatedSize},d.prototype.calcEstimatedSize=function(){for(var e=0,t=this.nodes,n=t.length,r=0;r<n;r++)e+=t[r].calcEstimatedSize();return this.estimatedSize=0==e?a.EMPTY_COMPOUND_NODE_SIZE:e/Math.sqrt(this.nodes.length),this.estimatedSize},d.prototype.updateConnected=function(){var e=this;if(0!=this.nodes.length){var t,n,r=new h,i=new Set,a=this.nodes[0];for(a.withChildren().forEach((function(e){r.push(e),i.add(e)}));0!==r.length;)for(var o=(t=(a=r.shift()).getEdges()).length,s=0;s<o;s++)null==(n=t[s].getOtherEndInGraph(a,this))||i.has(n)||n.withChildren().forEach((function(e){r.push(e),i.add(e)}));if(this.isConnected=!1,i.size>=this.nodes.length){var l=0;i.forEach((function(t){t.owner==e&&l++})),l==this.nodes.length&&(this.isConnected=!0)}}else this.isConnected=!0},e.exports=d},function(e,t,n){"use strict";var r,i=n(1);function a(e){r=n(5),this.layout=e,this.graphs=[],this.edges=[]}a.prototype.addRoot=function(){var e=this.layout.newGraph(),t=this.layout.newNode(null),n=this.add(e,t);return this.setRootGraph(n),this.rootGraph},a.prototype.add=function(e,t,n,r,i){if(null==n&&null==r&&null==i){if(null==e)throw"Graph is null!";if(null==t)throw"Parent node is null!";if(this.graphs.indexOf(e)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(e),null!=e.parent)throw"Already has a parent!";if(null!=t.child)throw"Already has a child!";return e.parent=t,t.child=e,e}i=n,n=e;var a=(r=t).getOwner(),o=i.getOwner();if(null==a||a.getGraphManager()!=this)throw"Source not in this graph mgr!";if(null==o||o.getGraphManager()!=this)throw"Target not in this graph mgr!";if(a==o)return n.isInterGraph=!1,a.add(n,r,i);if(n.isInterGraph=!0,n.source=r,n.target=i,this.edges.indexOf(n)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(n),null==n.source||null==n.target)throw"Edge source and/or target is null!";if(-1!=n.source.edges.indexOf(n)||-1!=n.target.edges.indexOf(n))throw"Edge already in source and/or target incidency list!";return n.source.edges.push(n),n.target.edges.push(n),n},a.prototype.remove=function(e){if(e instanceof r){var t=e;if(t.getGraphManager()!=this)throw"Graph not in this graph mgr";if(t!=this.rootGraph&&(null==t.parent||t.parent.graphManager!=this))throw"Invalid parent node!";for(var n,a=[],o=(a=a.concat(t.getEdges())).length,s=0;s<o;s++)n=a[s],t.remove(n);var l,u=[];for(o=(u=u.concat(t.getNodes())).length,s=0;s<o;s++)l=u[s],t.remove(l);t==this.rootGraph&&this.setRootGraph(null);var c=this.graphs.indexOf(t);this.graphs.splice(c,1),t.parent=null}else if(e instanceof i){if(null==(n=e))throw"Edge is null!";if(!n.isInterGraph)throw"Not an inter-graph edge!";if(null==n.source||null==n.target)throw"Source and/or target is null!";if(-1==n.source.edges.indexOf(n)||-1==n.target.edges.indexOf(n))throw"Source and/or target doesn't know this edge!";if(c=n.source.edges.indexOf(n),n.source.edges.splice(c,1),c=n.target.edges.indexOf(n),n.target.edges.splice(c,1),null==n.source.owner||null==n.source.owner.getGraphManager())throw"Edge owner graph or owner graph manager is null!";if(-1==n.source.owner.getGraphManager().edges.indexOf(n))throw"Not in owner graph manager's edge list!";c=n.source.owner.getGraphManager().edges.indexOf(n),n.source.owner.getGraphManager().edges.splice(c,1)}},a.prototype.updateBounds=function(){this.rootGraph.updateBounds(!0)},a.prototype.getGraphs=function(){return this.graphs},a.prototype.getAllNodes=function(){if(null==this.allNodes){for(var e=[],t=this.getGraphs(),n=t.length,r=0;r<n;r++)e=e.concat(t[r].getNodes());this.allNodes=e}return this.allNodes},a.prototype.resetAllNodes=function(){this.allNodes=null},a.prototype.resetAllEdges=function(){this.allEdges=null},a.prototype.resetAllNodesToApplyGravitation=function(){this.allNodesToApplyGravitation=null},a.prototype.getAllEdges=function(){if(null==this.allEdges){for(var e=[],t=this.getGraphs(),n=(t.length,0);n<t.length;n++)e=e.concat(t[n].getEdges());e=e.concat(this.edges),this.allEdges=e}return this.allEdges},a.prototype.getAllNodesToApplyGravitation=function(){return this.allNodesToApplyGravitation},a.prototype.setAllNodesToApplyGravitation=function(e){if(null!=this.allNodesToApplyGravitation)throw"assert failed";this.allNodesToApplyGravitation=e},a.prototype.getRoot=function(){return this.rootGraph},a.prototype.setRootGraph=function(e){if(e.getGraphManager()!=this)throw"Root not in this graph mgr!";this.rootGraph=e,null==e.parent&&(e.parent=this.layout.newNode("Root node"))},a.prototype.getLayout=function(){return this.layout},a.prototype.isOneAncestorOfOther=function(e,t){if(null==e||null==t)throw"assert failed";if(e==t)return!0;for(var n,r=e.getOwner();null!=(n=r.getParent());){if(n==t)return!0;if(null==(r=n.getOwner()))break}for(r=t.getOwner();null!=(n=r.getParent());){if(n==e)return!0;if(null==(r=n.getOwner()))break}return!1},a.prototype.calcLowestCommonAncestors=function(){for(var e,t,n,r,i,a=this.getAllEdges(),o=a.length,s=0;s<o;s++)if(t=(e=a[s]).source,n=e.target,e.lca=null,e.sourceInLca=t,e.targetInLca=n,t!=n){for(r=t.getOwner();null==e.lca;){for(e.targetInLca=n,i=n.getOwner();null==e.lca;){if(i==r){e.lca=i;break}if(i==this.rootGraph)break;if(null!=e.lca)throw"assert failed";e.targetInLca=i.getParent(),i=e.targetInLca.getOwner()}if(r==this.rootGraph)break;null==e.lca&&(e.sourceInLca=r.getParent(),r=e.sourceInLca.getOwner())}if(null==e.lca)throw"assert failed"}else e.lca=t.getOwner()},a.prototype.calcLowestCommonAncestor=function(e,t){if(e==t)return e.getOwner();for(var n=e.getOwner();null!=n;){for(var r=t.getOwner();null!=r;){if(r==n)return r;r=r.getParent().getOwner()}n=n.getParent().getOwner()}return n},a.prototype.calcInclusionTreeDepths=function(e,t){var n;null==e&&null==t&&(e=this.rootGraph,t=1);for(var r=e.getNodes(),i=r.length,a=0;a<i;a++)(n=r[a]).inclusionTreeDepth=t,null!=n.child&&this.calcInclusionTreeDepths(n.child,t+1)},a.prototype.includesInvalidEdge=function(){for(var e,t=this.edges.length,n=0;n<t;n++)if(e=this.edges[n],this.isOneAncestorOfOther(e.source,e.target))return!0;return!1},e.exports=a},function(e,t,n){"use strict";var r=n(0);function i(){}for(var a in r)i[a]=r[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=3*i.MAX_NODE_DISPLACEMENT_INCREMENTAL,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,e.exports=i},function(e,t,n){"use strict";var r=n(12);function i(){}i.calcSeparationAmount=function(e,t,n,r){if(!e.intersects(t))throw"assert failed";var i=new Array(2);this.decideDirectionsForOverlappingNodes(e,t,i),n[0]=Math.min(e.getRight(),t.getRight())-Math.max(e.x,t.x),n[1]=Math.min(e.getBottom(),t.getBottom())-Math.max(e.y,t.y),e.getX()<=t.getX()&&e.getRight()>=t.getRight()?n[0]+=Math.min(t.getX()-e.getX(),e.getRight()-t.getRight()):t.getX()<=e.getX()&&t.getRight()>=e.getRight()&&(n[0]+=Math.min(e.getX()-t.getX(),t.getRight()-e.getRight())),e.getY()<=t.getY()&&e.getBottom()>=t.getBottom()?n[1]+=Math.min(t.getY()-e.getY(),e.getBottom()-t.getBottom()):t.getY()<=e.getY()&&t.getBottom()>=e.getBottom()&&(n[1]+=Math.min(e.getY()-t.getY(),t.getBottom()-e.getBottom()));var a=Math.abs((t.getCenterY()-e.getCenterY())/(t.getCenterX()-e.getCenterX()));t.getCenterY()===e.getCenterY()&&t.getCenterX()===e.getCenterX()&&(a=1);var o=a*n[0],s=n[1]/a;n[0]<s?s=n[0]:o=n[1],n[0]=-1*i[0]*(s/2+r),n[1]=-1*i[1]*(o/2+r)},i.decideDirectionsForOverlappingNodes=function(e,t,n){e.getCenterX()<t.getCenterX()?n[0]=-1:n[0]=1,e.getCenterY()<t.getCenterY()?n[1]=-1:n[1]=1},i.getIntersection2=function(e,t,n){var r=e.getCenterX(),i=e.getCenterY(),a=t.getCenterX(),o=t.getCenterY();if(e.intersects(t))return n[0]=r,n[1]=i,n[2]=a,n[3]=o,!0;var s=e.getX(),l=e.getY(),u=e.getRight(),c=e.getX(),h=e.getBottom(),d=e.getRight(),p=e.getWidthHalf(),g=e.getHeightHalf(),f=t.getX(),v=t.getY(),y=t.getRight(),m=t.getX(),b=t.getBottom(),x=t.getRight(),w=t.getWidthHalf(),E=t.getHeightHalf(),_=!1,T=!1;if(r===a){if(i>o)return n[0]=r,n[1]=l,n[2]=a,n[3]=b,!1;if(i<o)return n[0]=r,n[1]=h,n[2]=a,n[3]=v,!1}else if(i===o){if(r>a)return n[0]=s,n[1]=i,n[2]=y,n[3]=o,!1;if(r<a)return n[0]=u,n[1]=i,n[2]=f,n[3]=o,!1}else{var D=e.height/e.width,C=t.height/t.width,N=(o-i)/(a-r),A=void 0,L=void 0,k=void 0,S=void 0,I=void 0,M=void 0;if(-D===N?r>a?(n[0]=c,n[1]=h,_=!0):(n[0]=u,n[1]=l,_=!0):D===N&&(r>a?(n[0]=s,n[1]=l,_=!0):(n[0]=d,n[1]=h,_=!0)),-C===N?a>r?(n[2]=m,n[3]=b,T=!0):(n[2]=y,n[3]=v,T=!0):C===N&&(a>r?(n[2]=f,n[3]=v,T=!0):(n[2]=x,n[3]=b,T=!0)),_&&T)return!1;if(r>a?i>o?(A=this.getCardinalDirection(D,N,4),L=this.getCardinalDirection(C,N,2)):(A=this.getCardinalDirection(-D,N,3),L=this.getCardinalDirection(-C,N,1)):i>o?(A=this.getCardinalDirection(-D,N,1),L=this.getCardinalDirection(-C,N,3)):(A=this.getCardinalDirection(D,N,2),L=this.getCardinalDirection(C,N,4)),!_)switch(A){case 1:S=l,k=r+-g/N,n[0]=k,n[1]=S;break;case 2:k=d,S=i+p*N,n[0]=k,n[1]=S;break;case 3:S=h,k=r+g/N,n[0]=k,n[1]=S;break;case 4:k=c,S=i+-p*N,n[0]=k,n[1]=S}if(!T)switch(L){case 1:M=v,I=a+-E/N,n[2]=I,n[3]=M;break;case 2:I=x,M=o+w*N,n[2]=I,n[3]=M;break;case 3:M=b,I=a+E/N,n[2]=I,n[3]=M;break;case 4:I=m,M=o+-w*N,n[2]=I,n[3]=M}}return!1},i.getCardinalDirection=function(e,t,n){return e>t?n:1+n%4},i.getIntersection=function(e,t,n,i){if(null==i)return this.getIntersection2(e,t,n);var a,o,s,l,u,c,h,d=e.x,p=e.y,g=t.x,f=t.y,v=n.x,y=n.y,m=i.x,b=i.y;return 0==(h=(a=f-p)*(l=v-m)-(o=b-y)*(s=d-g))?null:new r((s*(c=m*y-v*b)-l*(u=g*p-d*f))/h,(o*u-a*c)/h)},i.angleOfVector=function(e,t,n,r){var i=void 0;return e!==n?(i=Math.atan((r-t)/(n-e)),n<e?i+=Math.PI:r<t&&(i+=this.TWO_PI)):i=r<t?this.ONE_AND_HALF_PI:this.HALF_PI,i},i.doIntersect=function(e,t,n,r){var i=e.x,a=e.y,o=t.x,s=t.y,l=n.x,u=n.y,c=r.x,h=r.y,d=(o-i)*(h-u)-(c-l)*(s-a);if(0===d)return!1;var p=((h-u)*(c-i)+(l-c)*(h-a))/d,g=((a-s)*(c-i)+(o-i)*(h-a))/d;return 0<p&&p<1&&0<g&&g<1},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,e.exports=i},function(e,t,n){"use strict";function r(){}r.sign=function(e){return e>0?1:e<0?-1:0},r.floor=function(e){return e<0?Math.ceil(e):Math.floor(e)},r.ceil=function(e){return e<0?Math.floor(e):Math.ceil(e)},e.exports=r},function(e,t,n){"use strict";function r(){}r.MAX_VALUE=2147483647,r.MIN_VALUE=-2147483648,e.exports=r},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e){return{value:e,next:null,prev:null}},a=function(e,t,n,r){return null!==e?e.next=t:r.head=t,null!==n?n.prev=t:r.tail=t,t.prev=e,t.next=n,r.length++,t},o=function(e,t){var n=e.prev,r=e.next;return null!==n?n.next=r:t.head=r,null!==r?r.prev=n:t.tail=n,e.prev=e.next=null,t.length--,e},s=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.length=0,this.head=null,this.tail=null,null!=t&&t.forEach((function(e){return n.push(e)}))}return r(e,[{key:"size",value:function(){return this.length}},{key:"insertBefore",value:function(e,t){return a(t.prev,i(e),t,this)}},{key:"insertAfter",value:function(e,t){return a(t,i(e),t.next,this)}},{key:"insertNodeBefore",value:function(e,t){return a(t.prev,e,t,this)}},{key:"insertNodeAfter",value:function(e,t){return a(t,e,t.next,this)}},{key:"push",value:function(e){return a(this.tail,i(e),null,this)}},{key:"unshift",value:function(e){return a(null,i(e),this.head,this)}},{key:"remove",value:function(e){return o(e,this)}},{key:"pop",value:function(){return o(this.tail,this).value}},{key:"popNode",value:function(){return o(this.tail,this)}},{key:"shift",value:function(){return o(this.head,this).value}},{key:"shiftNode",value:function(){return o(this.head,this)}},{key:"get_object_at",value:function(e){if(e<=this.length()){for(var t=1,n=this.head;t<e;)n=n.next,t++;return n.value}}},{key:"set_object_at",value:function(e,t){if(e<=this.length()){for(var n=1,r=this.head;n<e;)r=r.next,n++;r.value=t}}}]),e}();e.exports=s},function(e,t,n){"use strict";function r(e,t,n){this.x=null,this.y=null,null==e&&null==t&&null==n?(this.x=0,this.y=0):"number"==typeof e&&"number"==typeof t&&null==n?(this.x=e,this.y=t):"Point"==e.constructor.name&&null==t&&null==n&&(n=e,this.x=n.x,this.y=n.y)}r.prototype.getX=function(){return this.x},r.prototype.getY=function(){return this.y},r.prototype.getLocation=function(){return new r(this.x,this.y)},r.prototype.setLocation=function(e,t,n){"Point"==e.constructor.name&&null==t&&null==n?(n=e,this.setLocation(n.x,n.y)):"number"==typeof e&&"number"==typeof t&&null==n&&(parseInt(e)==e&&parseInt(t)==t?this.move(e,t):(this.x=Math.floor(e+.5),this.y=Math.floor(t+.5)))},r.prototype.move=function(e,t){this.x=e,this.y=t},r.prototype.translate=function(e,t){this.x+=e,this.y+=t},r.prototype.equals=function(e){if("Point"==e.constructor.name){var t=e;return this.x==t.x&&this.y==t.y}return this==e},r.prototype.toString=function(){return(new r).constructor.name+"[x="+this.x+",y="+this.y+"]"},e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.x=0,this.y=0,this.width=0,this.height=0,null!=e&&null!=t&&null!=n&&null!=r&&(this.x=e,this.y=t,this.width=n,this.height=r)}r.prototype.getX=function(){return this.x},r.prototype.setX=function(e){this.x=e},r.prototype.getY=function(){return this.y},r.prototype.setY=function(e){this.y=e},r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},r.prototype.getRight=function(){return this.x+this.width},r.prototype.getBottom=function(){return this.y+this.height},r.prototype.intersects=function(e){return!(this.getRight()<e.x||this.getBottom()<e.y||e.getRight()<this.x||e.getBottom()<this.y)},r.prototype.getCenterX=function(){return this.x+this.width/2},r.prototype.getMinX=function(){return this.getX()},r.prototype.getMaxX=function(){return this.getX()+this.width},r.prototype.getCenterY=function(){return this.y+this.height/2},r.prototype.getMinY=function(){return this.getY()},r.prototype.getMaxY=function(){return this.getY()+this.height},r.prototype.getWidthHalf=function(){return this.width/2},r.prototype.getHeightHalf=function(){return this.height/2},e.exports=r},function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function i(){}i.lastID=0,i.createID=function(e){return i.isPrimitive(e)?e:(null!=e.uniqueID||(e.uniqueID=i.getString(),i.lastID++),e.uniqueID)},i.getString=function(e){return null==e&&(e=i.lastID),"Object#"+e},i.isPrimitive=function(e){var t=void 0===e?"undefined":r(e);return null==e||"object"!=t&&"function"!=t},e.exports=i},function(e,t,n){"use strict";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i=n(0),a=n(6),o=n(3),s=n(1),l=n(5),u=n(4),c=n(17),h=n(27);function d(e){h.call(this),this.layoutQuality=i.QUALITY,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.incremental=i.DEFAULT_INCREMENTAL,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES,this.edgeToDummyNodes=new Map,this.graphManager=new a(this),this.isLayoutFinished=!1,this.isSubLayout=!1,this.isRemoteUse=!1,null!=e&&(this.isRemoteUse=e)}d.RANDOM_SEED=1,d.prototype=Object.create(h.prototype),d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getAllNodes=function(){return this.graphManager.getAllNodes()},d.prototype.getAllEdges=function(){return this.graphManager.getAllEdges()},d.prototype.getAllNodesToApplyGravitation=function(){return this.graphManager.getAllNodesToApplyGravitation()},d.prototype.newGraphManager=function(){var e=new a(this);return this.graphManager=e,e},d.prototype.newGraph=function(e){return new l(null,this.graphManager,e)},d.prototype.newNode=function(e){return new o(this.graphManager,e)},d.prototype.newEdge=function(e){return new s(null,null,e)},d.prototype.checkLayoutSuccess=function(){return null==this.graphManager.getRoot()||0==this.graphManager.getRoot().getNodes().length||this.graphManager.includesInvalidEdge()},d.prototype.runLayout=function(){var e;return this.isLayoutFinished=!1,this.tilingPreLayout&&this.tilingPreLayout(),this.initParameters(),e=!this.checkLayoutSuccess()&&this.layout(),"during"!==i.ANIMATE&&(e&&(this.isSubLayout||this.doPostLayout()),this.tilingPostLayout&&this.tilingPostLayout(),this.isLayoutFinished=!0,e)},d.prototype.doPostLayout=function(){this.incremental||this.transform(),this.update()},d.prototype.update2=function(){if(this.createBendsAsNeeded&&(this.createBendpointsFromDummyNodes(),this.graphManager.resetAllEdges()),!this.isRemoteUse){for(var e=this.graphManager.getAllEdges(),t=0;t<e.length;t++)e[t];var n=this.graphManager.getRoot().getNodes();for(t=0;t<n.length;t++)n[t];this.update(this.graphManager.getRoot())}},d.prototype.update=function(e){if(null==e)this.update2();else if(e instanceof o){var t=e;if(null!=t.getChild())for(var n=t.getChild().getNodes(),r=0;r<n.length;r++)update(n[r]);null!=t.vGraphObject&&t.vGraphObject.update(t)}else if(e instanceof s){var i=e;null!=i.vGraphObject&&i.vGraphObject.update(i)}else if(e instanceof l){var a=e;null!=a.vGraphObject&&a.vGraphObject.update(a)}},d.prototype.initParameters=function(){this.isSubLayout||(this.layoutQuality=i.QUALITY,this.animationDuringLayout=i.DEFAULT_ANIMATION_DURING_LAYOUT,this.animationPeriod=i.DEFAULT_ANIMATION_PERIOD,this.animationOnLayout=i.DEFAULT_ANIMATION_ON_LAYOUT,this.incremental=i.DEFAULT_INCREMENTAL,this.createBendsAsNeeded=i.DEFAULT_CREATE_BENDS_AS_NEEDED,this.uniformLeafNodeSizes=i.DEFAULT_UNIFORM_LEAF_NODE_SIZES),this.animationDuringLayout&&(this.animationOnLayout=!1)},d.prototype.transform=function(e){if(null==e)this.transform(new u(0,0));else{var t=new c,n=this.graphManager.getRoot().updateLeftTop();if(null!=n){t.setWorldOrgX(e.x),t.setWorldOrgY(e.y),t.setDeviceOrgX(n.x),t.setDeviceOrgY(n.y);for(var r=this.getAllNodes(),i=0;i<r.length;i++)r[i].transform(t)}}},d.prototype.positionNodesRandomly=function(e){if(null==e)this.positionNodesRandomly(this.getGraphManager().getRoot()),this.getGraphManager().getRoot().updateBounds(!0);else for(var t,n,r=e.getNodes(),i=0;i<r.length;i++)null==(n=(t=r[i]).getChild())||0==n.getNodes().length?t.scatter():(this.positionNodesRandomly(n),t.updateBounds())},d.prototype.getFlatForest=function(){for(var e=[],t=!0,n=this.graphManager.getRoot().getNodes(),i=!0,a=0;a<n.length;a++)null!=n[a].getChild()&&(i=!1);if(!i)return e;var o=new Set,s=[],l=new Map,u=[];for(u=u.concat(n);u.length>0&&t;){for(s.push(u[0]);s.length>0&&t;){var c=s[0];s.splice(0,1),o.add(c);var h=c.getEdges();for(a=0;a<h.length;a++){var d=h[a].getOtherEnd(c);if(l.get(c)!=d){if(o.has(d)){t=!1;break}s.push(d),l.set(d,c)}}}if(t){var p=[].concat(r(o));for(e.push(p),a=0;a<p.length;a++){var g=p[a],f=u.indexOf(g);f>-1&&u.splice(f,1)}o=new Set,l=new Map}else e=[]}return e},d.prototype.createDummyNodesForBendpoints=function(e){for(var t=[],n=e.source,r=this.graphManager.calcLowestCommonAncestor(e.source,e.target),i=0;i<e.bendpoints.length;i++){var a=this.newNode(null);a.setRect(new Point(0,0),new Dimension(1,1)),r.add(a);var o=this.newEdge(null);this.graphManager.add(o,n,a),t.add(a),n=a}return o=this.newEdge(null),this.graphManager.add(o,n,e.target),this.edgeToDummyNodes.set(e,t),e.isInterGraph()?this.graphManager.remove(e):r.remove(e),t},d.prototype.createBendpointsFromDummyNodes=function(){var e=[];e=e.concat(this.graphManager.getAllEdges()),e=[].concat(r(this.edgeToDummyNodes.keys())).concat(e);for(var t=0;t<e.length;t++){var n=e[t];if(n.bendpoints.length>0){for(var i=this.edgeToDummyNodes.get(n),a=0;a<i.length;a++){var o=i[a],s=new u(o.getCenterX(),o.getCenterY()),l=n.bendpoints.get(a);l.x=s.x,l.y=s.y,o.getOwner().remove(o)}this.graphManager.add(n,n.source,n.target)}}},d.transform=function(e,t,n,r){if(null!=n&&null!=r){var i=t;return e<=50?i-=(t-t/n)/50*(50-e):i+=(t*r-t)/50*(e-50),i}var a,o;return e<=50?(a=9*t/500,o=t/10):(a=9*t/50,o=-8*t),a*e+o},d.findCenterOfTree=function(e){var t=[];t=t.concat(e);var n=[],r=new Map,i=!1,a=null;1!=t.length&&2!=t.length||(i=!0,a=t[0]);for(var o=0;o<t.length;o++){var s=(c=t[o]).getNeighborsList().size;r.set(c,c.getNeighborsList().size),1==s&&n.push(c)}var l=[];for(l=l.concat(n);!i;){var u=[];for(u=u.concat(l),l=[],o=0;o<t.length;o++){var c=t[o],h=t.indexOf(c);h>=0&&t.splice(h,1),c.getNeighborsList().forEach((function(e){if(n.indexOf(e)<0){var t=r.get(e)-1;1==t&&l.push(e),r.set(e,t)}}))}n=n.concat(l),1!=t.length&&2!=t.length||(i=!0,a=t[0])}return a},d.prototype.setGraphManager=function(e){this.graphManager=e},e.exports=d},function(e,t,n){"use strict";function r(){}r.seed=1,r.x=0,r.nextDouble=function(){return r.x=1e4*Math.sin(r.seed++),r.x-Math.floor(r.x)},e.exports=r},function(e,t,n){"use strict";var r=n(4);function i(e,t){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(e){this.lworldExtX=e},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(e){this.lworldExtY=e},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},i.prototype.transformX=function(e){var t=0,n=this.lworldExtX;return 0!=n&&(t=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/n),t},i.prototype.transformY=function(e){var t=0,n=this.lworldExtY;return 0!=n&&(t=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/n),t},i.prototype.inverseTransformX=function(e){var t=0,n=this.ldeviceExtX;return 0!=n&&(t=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/n),t},i.prototype.inverseTransformY=function(e){var t=0,n=this.ldeviceExtY;return 0!=n&&(t=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/n),t},i.prototype.inverseTransformPoint=function(e){return new r(this.inverseTransformX(e.x),this.inverseTransformY(e.y))},e.exports=i},function(e,t,n){"use strict";var r=n(15),i=n(7),a=n(0),o=n(8),s=n(9);function l(){r.call(this),this.useSmartIdealEdgeLengthCalculation=i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.idealEdgeLength=i.DEFAULT_EDGE_LENGTH,this.springConstant=i.DEFAULT_SPRING_STRENGTH,this.repulsionConstant=i.DEFAULT_REPULSION_STRENGTH,this.gravityConstant=i.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=i.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=i.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.displacementThresholdPerNode=3*i.DEFAULT_EDGE_LENGTH/100,this.coolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.initialCoolingFactor=i.DEFAULT_COOLING_FACTOR_INCREMENTAL,this.totalDisplacement=0,this.oldTotalDisplacement=0,this.maxIterations=i.MAX_ITERATIONS}for(var u in l.prototype=Object.create(r.prototype),r)l[u]=r[u];l.prototype.initParameters=function(){r.prototype.initParameters.call(this,arguments),this.totalIterations=0,this.notAnimatedIterations=0,this.useFRGridVariant=i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION,this.grid=[]},l.prototype.calcIdealEdgeLengths=function(){for(var e,t,n,r,o,s,l=this.getGraphManager().getAllEdges(),u=0;u<l.length;u++)(e=l[u]).idealLength=this.idealEdgeLength,e.isInterGraph&&(n=e.getSource(),r=e.getTarget(),o=e.getSourceInLca().getEstimatedSize(),s=e.getTargetInLca().getEstimatedSize(),this.useSmartIdealEdgeLengthCalculation&&(e.idealLength+=o+s-2*a.SIMPLE_NODE_SIZE),t=e.getLca().getInclusionTreeDepth(),e.idealLength+=i.DEFAULT_EDGE_LENGTH*i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR*(n.getInclusionTreeDepth()+r.getInclusionTreeDepth()-2*t))},l.prototype.initSpringEmbedder=function(){var e=this.getAllNodes().length;this.incremental?(e>i.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*i.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-i.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT_INCREMENTAL):(e>i.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(i.COOLING_ADAPTATION_FACTOR,1-(e-i.ADAPTATION_LOWER_NODE_LIMIT)/(i.ADAPTATION_UPPER_NODE_LIMIT-i.ADAPTATION_LOWER_NODE_LIMIT)*(1-i.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=i.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(5*this.getAllNodes().length,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},l.prototype.calcSpringForces=function(){for(var e,t=this.getAllEdges(),n=0;n<t.length;n++)e=t[n],this.calcSpringForce(e,e.idealLength)},l.prototype.calcRepulsionForces=function(){var e,t,n,r,a,o=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=this.getAllNodes();if(this.useFRGridVariant)for(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),a=new Set,e=0;e<l.length;e++)n=l[e],this.calculateRepulsionForceOfANode(n,a,o,s),a.add(n);else for(e=0;e<l.length;e++)for(n=l[e],t=e+1;t<l.length;t++)r=l[t],n.getOwner()==r.getOwner()&&this.calcRepulsionForce(n,r)},l.prototype.calcGravitationalForces=function(){for(var e,t=this.getAllNodesToApplyGravitation(),n=0;n<t.length;n++)e=t[n],this.calcGravitationalForce(e)},l.prototype.moveNodes=function(){for(var e=this.getAllNodes(),t=0;t<e.length;t++)e[t].move()},l.prototype.calcSpringForce=function(e,t){var n,r,i,a,o=e.getSource(),s=e.getTarget();if(this.uniformLeafNodeSizes&&null==o.getChild()&&null==s.getChild())e.updateLengthSimple();else if(e.updateLength(),e.isOverlapingSourceAndTarget)return;0!=(n=e.getLength())&&(i=(r=this.springConstant*(n-t))*(e.lengthX/n),a=r*(e.lengthY/n),o.springForceX+=i,o.springForceY+=a,s.springForceX-=i,s.springForceY-=a)},l.prototype.calcRepulsionForce=function(e,t){var n,r,a,l,u,c,h,d=e.getRect(),p=t.getRect(),g=new Array(2),f=new Array(4);if(d.intersects(p)){o.calcSeparationAmount(d,p,g,i.DEFAULT_EDGE_LENGTH/2),c=2*g[0],h=2*g[1];var v=e.noOfChildren*t.noOfChildren/(e.noOfChildren+t.noOfChildren);e.repulsionForceX-=v*c,e.repulsionForceY-=v*h,t.repulsionForceX+=v*c,t.repulsionForceY+=v*h}else this.uniformLeafNodeSizes&&null==e.getChild()&&null==t.getChild()?(n=p.getCenterX()-d.getCenterX(),r=p.getCenterY()-d.getCenterY()):(o.getIntersection(d,p,f),n=f[2]-f[0],r=f[3]-f[1]),Math.abs(n)<i.MIN_REPULSION_DIST&&(n=s.sign(n)*i.MIN_REPULSION_DIST),Math.abs(r)<i.MIN_REPULSION_DIST&&(r=s.sign(r)*i.MIN_REPULSION_DIST),a=n*n+r*r,l=Math.sqrt(a),c=(u=this.repulsionConstant*e.noOfChildren*t.noOfChildren/a)*n/l,h=u*r/l,e.repulsionForceX-=c,e.repulsionForceY-=h,t.repulsionForceX+=c,t.repulsionForceY+=h},l.prototype.calcGravitationalForce=function(e){var t,n,r,i,a,o,s,l;n=((t=e.getOwner()).getRight()+t.getLeft())/2,r=(t.getTop()+t.getBottom())/2,i=e.getCenterX()-n,a=e.getCenterY()-r,o=Math.abs(i)+e.getWidth()/2,s=Math.abs(a)+e.getHeight()/2,e.getOwner()==this.graphManager.getRoot()?(o>(l=t.getEstimatedSize()*this.gravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i,e.gravitationForceY=-this.gravityConstant*a):(o>(l=t.getEstimatedSize()*this.compoundGravityRangeFactor)||s>l)&&(e.gravitationForceX=-this.gravityConstant*i*this.compoundGravityConstant,e.gravitationForceY=-this.gravityConstant*a*this.compoundGravityConstant)},l.prototype.isConverged=function(){var e,t=!1;return this.totalIterations>this.maxIterations/3&&(t=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),e=this.totalDisplacement<this.totalDisplacementThreshold,this.oldTotalDisplacement=this.totalDisplacement,e||t},l.prototype.animate=function(){this.animationDuringLayout&&!this.isSubLayout&&(this.notAnimatedIterations==this.animationPeriod?(this.update(),this.notAnimatedIterations=0):this.notAnimatedIterations++)},l.prototype.calcNoOfChildrenForAllNodes=function(){for(var e,t=this.graphManager.getAllNodes(),n=0;n<t.length;n++)(e=t[n]).noOfChildren=e.getNoOfChildren()},l.prototype.calcGrid=function(e){var t,n;t=parseInt(Math.ceil((e.getRight()-e.getLeft())/this.repulsionRange)),n=parseInt(Math.ceil((e.getBottom()-e.getTop())/this.repulsionRange));for(var r=new Array(t),i=0;i<t;i++)r[i]=new Array(n);for(i=0;i<t;i++)for(var a=0;a<n;a++)r[i][a]=new Array;return r},l.prototype.addNodeToGrid=function(e,t,n){var r,i,a,o;r=parseInt(Math.floor((e.getRect().x-t)/this.repulsionRange)),i=parseInt(Math.floor((e.getRect().width+e.getRect().x-t)/this.repulsionRange)),a=parseInt(Math.floor((e.getRect().y-n)/this.repulsionRange)),o=parseInt(Math.floor((e.getRect().height+e.getRect().y-n)/this.repulsionRange));for(var s=r;s<=i;s++)for(var l=a;l<=o;l++)this.grid[s][l].push(e),e.setGridCoordinates(r,i,a,o)},l.prototype.updateGrid=function(){var e,t,n=this.getAllNodes();for(this.grid=this.calcGrid(this.graphManager.getRoot()),e=0;e<n.length;e++)t=n[e],this.addNodeToGrid(t,this.graphManager.getRoot().getLeft(),this.graphManager.getRoot().getTop())},l.prototype.calculateRepulsionForceOfANode=function(e,t,n,r){if(this.totalIterations%i.GRID_CALCULATION_CHECK_PERIOD==1&&n||r){var a,o=new Set;e.surrounding=new Array;for(var s=this.grid,l=e.startX-1;l<e.finishX+2;l++)for(var u=e.startY-1;u<e.finishY+2;u++)if(!(l<0||u<0||l>=s.length||u>=s[0].length))for(var c=0;c<s[l][u].length;c++)if(a=s[l][u][c],e.getOwner()==a.getOwner()&&e!=a&&!t.has(a)&&!o.has(a)){var h=Math.abs(e.getCenterX()-a.getCenterX())-(e.getWidth()/2+a.getWidth()/2),d=Math.abs(e.getCenterY()-a.getCenterY())-(e.getHeight()/2+a.getHeight()/2);h<=this.repulsionRange&&d<=this.repulsionRange&&o.add(a)}e.surrounding=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(o))}for(l=0;l<e.surrounding.length;l++)this.calcRepulsionForce(e,e.surrounding[l])},l.prototype.calcRepulsionRange=function(){return 0},e.exports=l},function(e,t,n){"use strict";var r=n(1),i=n(7);function a(e,t,n){r.call(this,e,t,n),this.idealLength=i.DEFAULT_EDGE_LENGTH}for(var o in a.prototype=Object.create(r.prototype),r)a[o]=r[o];e.exports=a},function(e,t,n){"use strict";var r=n(3);function i(e,t,n,i){r.call(this,e,t,n,i),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0,this.startX=0,this.finishX=0,this.startY=0,this.finishY=0,this.surrounding=[]}for(var a in i.prototype=Object.create(r.prototype),r)i[a]=r[a];i.prototype.setGridCoordinates=function(e,t,n,r){this.startX=e,this.finishX=t,this.startY=n,this.finishY=r},e.exports=i},function(e,t,n){"use strict";function r(e,t){this.width=0,this.height=0,null!==e&&null!==t&&(this.height=t,this.width=e)}r.prototype.getWidth=function(){return this.width},r.prototype.setWidth=function(e){this.width=e},r.prototype.getHeight=function(){return this.height},r.prototype.setHeight=function(e){this.height=e},e.exports=r},function(e,t,n){"use strict";var r=n(14);function i(){this.map={},this.keys=[]}i.prototype.put=function(e,t){var n=r.createID(e);this.contains(n)||(this.map[n]=t,this.keys.push(e))},i.prototype.contains=function(e){return r.createID(e),null!=this.map[e]},i.prototype.get=function(e){var t=r.createID(e);return this.map[t]},i.prototype.keySet=function(){return this.keys},e.exports=i},function(e,t,n){"use strict";var r=n(14);function i(){this.set={}}i.prototype.add=function(e){var t=r.createID(e);this.contains(t)||(this.set[t]=e)},i.prototype.remove=function(e){delete this.set[r.createID(e)]},i.prototype.clear=function(){this.set={}},i.prototype.contains=function(e){return this.set[r.createID(e)]==e},i.prototype.isEmpty=function(){return 0===this.size()},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAllTo=function(e){for(var t=Object.keys(this.set),n=t.length,r=0;r<n;r++)e.push(this.set[t[r]])},i.prototype.size=function(){return Object.keys(this.set).length},i.prototype.addAll=function(e){for(var t=e.length,n=0;n<t;n++){var r=e[n];this.add(r)}},e.exports=i},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(11),a=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),null===n&&void 0===n||(this.compareFunction=this._defaultCompareFunction);var r=void 0;r=t instanceof i?t.size():t.length,this._quicksort(t,0,r-1)}return r(e,[{key:"_quicksort",value:function(e,t,n){if(t<n){var r=this._partition(e,t,n);this._quicksort(e,t,r),this._quicksort(e,r+1,n)}}},{key:"_partition",value:function(e,t,n){for(var r=this._get(e,t),i=t,a=n;;){for(;this.compareFunction(r,this._get(e,a));)a--;for(;this.compareFunction(this._get(e,i),r);)i++;if(!(i<a))return a;this._swap(e,i,a),i++,a--}}},{key:"_get",value:function(e,t){return e instanceof i?e.get_object_at(t):e[t]}},{key:"_set",value:function(e,t,n){e instanceof i?e.set_object_at(t,n):e[t]=n}},{key:"_swap",value:function(e,t,n){var r=this._get(e,t);this._set(e,t,this._get(e,n)),this._set(e,n,r)}},{key:"_defaultCompareFunction",value:function(e,t){return t>e}}]),e}();e.exports=a},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.sequence1=t,this.sequence2=n,this.match_score=r,this.mismatch_penalty=i,this.gap_penalty=a,this.iMax=t.length+1,this.jMax=n.length+1,this.grid=new Array(this.iMax);for(var o=0;o<this.iMax;o++){this.grid[o]=new Array(this.jMax);for(var s=0;s<this.jMax;s++)this.grid[o][s]=0}this.tracebackGrid=new Array(this.iMax);for(var l=0;l<this.iMax;l++){this.tracebackGrid[l]=new Array(this.jMax);for(var u=0;u<this.jMax;u++)this.tracebackGrid[l][u]=[null,null,null]}this.alignments=[],this.score=-1,this.computeGrids()}return r(e,[{key:"getScore",value:function(){return this.score}},{key:"getAlignments",value:function(){return this.alignments}},{key:"computeGrids",value:function(){for(var e=1;e<this.jMax;e++)this.grid[0][e]=this.grid[0][e-1]+this.gap_penalty,this.tracebackGrid[0][e]=[!1,!1,!0];for(var t=1;t<this.iMax;t++)this.grid[t][0]=this.grid[t-1][0]+this.gap_penalty,this.tracebackGrid[t][0]=[!1,!0,!1];for(var n=1;n<this.iMax;n++)for(var r=1;r<this.jMax;r++){var i=[this.sequence1[n-1]===this.sequence2[r-1]?this.grid[n-1][r-1]+this.match_score:this.grid[n-1][r-1]+this.mismatch_penalty,this.grid[n-1][r]+this.gap_penalty,this.grid[n][r-1]+this.gap_penalty],a=this.arrayAllMaxIndexes(i);this.grid[n][r]=i[a[0]],this.tracebackGrid[n][r]=[a.includes(0),a.includes(1),a.includes(2)]}this.score=this.grid[this.iMax-1][this.jMax-1]}},{key:"alignmentTraceback",value:function(){var e=[];for(e.push({pos:[this.sequence1.length,this.sequence2.length],seq1:"",seq2:""});e[0];){var t=e[0],n=this.tracebackGrid[t.pos[0]][t.pos[1]];n[0]&&e.push({pos:[t.pos[0]-1,t.pos[1]-1],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),n[1]&&e.push({pos:[t.pos[0]-1,t.pos[1]],seq1:this.sequence1[t.pos[0]-1]+t.seq1,seq2:"-"+t.seq2}),n[2]&&e.push({pos:[t.pos[0],t.pos[1]-1],seq1:"-"+t.seq1,seq2:this.sequence2[t.pos[1]-1]+t.seq2}),0===t.pos[0]&&0===t.pos[1]&&this.alignments.push({sequence1:t.seq1,sequence2:t.seq2}),e.shift()}return this.alignments}},{key:"getAllIndexes",value:function(e,t){for(var n=[],r=-1;-1!==(r=e.indexOf(t,r+1));)n.push(r);return n}},{key:"arrayAllMaxIndexes",value:function(e){return this.getAllIndexes(e,Math.max.apply(null,e))}}]),e}();e.exports=i},function(e,t,n){"use strict";var r=function(){};r.FDLayout=n(18),r.FDLayoutConstants=n(7),r.FDLayoutEdge=n(19),r.FDLayoutNode=n(20),r.DimensionD=n(21),r.HashMap=n(22),r.HashSet=n(23),r.IGeometry=n(8),r.IMath=n(9),r.Integer=n(10),r.Point=n(12),r.PointD=n(4),r.RandomSeed=n(16),r.RectangleD=n(13),r.Transform=n(17),r.UniqueIDGeneretor=n(14),r.Quicksort=n(24),r.LinkedList=n(11),r.LGraphObject=n(2),r.LGraph=n(5),r.LEdge=n(1),r.LGraphManager=n(6),r.LNode=n(3),r.Layout=n(15),r.LayoutConstants=n(0),r.NeedlemanWunsch=n(25),e.exports=r},function(e,t,n){"use strict";function r(){this.listeners=[]}var i=r.prototype;i.addListener=function(e,t){this.listeners.push({event:e,callback:t})},i.removeListener=function(e,t){for(var n=this.listeners.length;n>=0;n--){var r=this.listeners[n];r.event===e&&r.callback===t&&this.listeners.splice(n,1)}},i.emit=function(e,t){for(var n=0;n<this.listeners.length;n++){var r=this.listeners[n];e===r.event&&r.callback(t)}},e.exports=r}])},e.exports=t()},1989:(e,t,n)=>{var r=n(51789),i=n(80401),a=n(57667),o=n(59026),s=n(81866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=o,l.prototype.set=s,e.exports=l},38407:(e,t,n)=>{var r=n(27040),i=n(14125),a=n(82117),o=n(67518),s=n(54705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=o,l.prototype.set=s,e.exports=l},57071:(e,t,n)=>{var r=n(10852)(n(55639),"Map");e.exports=r},83369:(e,t,n)=>{var r=n(24785),i=n(11285),a=n(96e3),o=n(49916),s=n(95265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=o,l.prototype.set=s,e.exports=l},62705:(e,t,n)=>{var r=n(55639).Symbol;e.exports=r},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},34865:(e,t,n)=>{var r=n(89465),i=n(77813),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var o=e[t];a.call(e,t)&&i(o,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},97786:(e,t,n)=>{var r=n(71811),i=n(40327);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n<a;)e=e[i(t[n++])];return n&&n==a?e:void 0}},44239:(e,t,n)=>{var r=n(62705),i=n(89607),a=n(2333),o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},28458:(e,t,n)=>{var r=n(23560),i=n(15346),a=n(13218),o=n(80346),s=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,h=u.hasOwnProperty,d=RegExp("^"+c.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?d:s).test(o(e))}},10611:(e,t,n)=>{var r=n(34865),i=n(71811),a=n(65776),o=n(13218),s=n(40327);e.exports=function(e,t,n,l){if(!o(e))return e;for(var u=-1,c=(t=i(t,e)).length,h=c-1,d=e;null!=d&&++u<c;){var p=s(t[u]),g=n;if("__proto__"===p||"constructor"===p||"prototype"===p)return e;if(u!=h){var f=d[p];void 0===(g=l?l(f,p,d):void 0)&&(g=o(f)?f:a(t[u+1])?[]:{})}r(d,p,g),d=d[p]}return e}},80531:(e,t,n)=>{var r=n(62705),i=n(29932),a=n(1469),o=n(33448),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return i(t,e)+"";if(o(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},27561:(e,t,n)=>{var r=n(67990),i=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(i,""):e}},71811:(e,t,n)=>{var r=n(1469),i=n(15403),a=n(55514),o=n(79833);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:a(o(e))}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},14429:(e,t,n)=>{var r=n(55639)["__core-js_shared__"];e.exports=r},38777:(e,t,n)=>{var r=n(10852),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=i},31957:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},10852:(e,t,n)=>{var r=n(28458),i=n(47801);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},89607:(e,t,n)=>{var r=n(62705),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(l){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},59026:(e,t,n)=>{var r=n(94536),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},81866:(e,t,n)=>{var r=n(94536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},65776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},15403:(e,t,n)=>{var r=n(1469),i=n(33448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(o.test(e)||!a.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},15346:(e,t,n)=>{var r,i=n(14429),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():i.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),i=n(38407),a=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},24523:(e,t,n)=>{var r=n(88306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},94536:(e,t,n)=>{var r=n(10852)(Object,"create");e.exports=r},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},55639:(e,t,n)=>{var r=n(31957),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();e.exports=a},55514:(e,t,n)=>{var r=n(24523),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,n,r,i){t.push(r?i.replace(a,"$1"):n||e)})),t}));e.exports=o},40327:(e,t,n)=>{var r=n(33448);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},67990:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},23279:(e,t,n)=>{var r=n(13218),i=n(7771),a=n(14841),o=Math.max,s=Math.min;e.exports=function(e,t,n){var l,u,c,h,d,p,g=0,f=!1,v=!1,y=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var n=l,r=u;return l=u=void 0,g=t,h=e.apply(r,n)}function b(e){var n=e-p;return void 0===p||n>=t||n<0||v&&e-g>=c}function x(){var e=i();if(b(e))return w(e);d=setTimeout(x,function(e){var n=t-(e-p);return v?s(n,c-(e-g)):n}(e))}function w(e){return d=void 0,y&&l?m(e):(l=u=void 0,h)}function E(){var e=i(),n=b(e);if(l=arguments,u=this,p=e,n){if(void 0===d)return function(e){return g=e,d=setTimeout(x,t),f?m(e):h}(p);if(v)return clearTimeout(d),d=setTimeout(x,t),m(p)}return void 0===d&&(d=setTimeout(x,t)),h}return t=a(t)||0,r(n)&&(f=!!n.leading,c=(v="maxWait"in n)?o(a(n.maxWait)||0,t):c,y="trailing"in n?!!n.trailing:y),E.cancel=function(){void 0!==d&&clearTimeout(d),g=0,l=p=u=d=void 0},E.flush=function(){return void 0===d?h:w(i())},E}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},1469:e=>{var t=Array.isArray;e.exports=t},23560:(e,t,n)=>{var r=n(44239),i=n(13218);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},37005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},33448:(e,t,n)=>{var r=n(44239),i=n(37005);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==r(e)}},88306:(e,t,n)=>{var r=n(83369);function i(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(i.Cache||r),n}i.Cache=r,e.exports=i},7771:(e,t,n)=>{var r=n(55639);e.exports=function(){return r.Date.now()}},36968:(e,t,n)=>{var r=n(10611);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},14841:(e,t,n)=>{var r=n(27561),i=n(13218),a=n(33448),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=s.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):o.test(e)?NaN:+e}},30084:(e,t,n)=>{var r=n(29932),i=n(278),a=n(1469),o=n(33448),s=n(55514),l=n(40327),u=n(79833);e.exports=function(e){return a(e)?r(e,l):o(e)?[e]:i(s(u(e)))}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?"":r(e)}},7497:(e,t,n)=>{"use strict";n.d(t,{diagram:()=>w});var r=n(28758),i=n(59058),a=n(14607),o=n(64218),s=n(78314),l=n(91619),u=n(12281),c=n(7201),h=(n(27484),n(17967),n(27856),function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,13],r=[1,12],i=[1,15],a=[1,16],o=[1,20],s=[1,19],l=[6,7,8],u=[1,26],c=[1,24],h=[1,25],d=[6,7,11],p=[1,6,13,15,16,19,22],g=[1,33],f=[1,34],v=[1,6,7,11,13,15,16,19,22],y={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(e,t,n,r,i,a,o){var s=a.length-1;switch(i){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",a[s].id),r.addNode(a[s-1].length,a[s].id,a[s].descr,a[s].type);break;case 16:r.getLogger().trace("Icon: ",a[s]),r.decorateNode({icon:a[s]});break;case 17:case 21:r.decorateNode({class:a[s]});break;case 18:r.getLogger().trace("SPACELIST");break;case 19:r.getLogger().trace("Node: ",a[s].id),r.addNode(0,a[s].id,a[s].descr,a[s].type);break;case 20:r.decorateNode({icon:a[s]});break;case 25:r.getLogger().trace("node found ..",a[s-2]),this.$={id:a[s-1],descr:a[s-1],type:r.getType(a[s-2],a[s])};break;case 26:this.$={id:a[s],descr:a[s],type:r.nodeType.DEFAULT};break;case 27:r.getLogger().trace("node found ..",a[s-3]),this.$={id:a[s-3],descr:a[s-1],type:r.getType(a[s-2],a[s])}}},table:[{3:1,4:2,5:3,6:[1,5],8:t},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:t},{6:n,7:[1,10],9:9,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(l,[2,3]),{1:[2,2]},e(l,[2,4]),e(l,[2,5]),{1:[2,6],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:n,9:22,12:11,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},{6:u,7:c,10:23,11:h},e(d,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:o,22:s}),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,23]),e(d,[2,24]),e(d,[2,26],{19:[1,30]}),{20:[1,31]},{6:u,7:c,10:32,11:h},{1:[2,7],6:n,12:21,13:r,14:14,15:i,16:a,17:17,18:18,19:o,22:s},e(p,[2,14],{7:g,11:f}),e(v,[2,8]),e(v,[2,9]),e(v,[2,10]),e(d,[2,15]),e(d,[2,16]),e(d,[2,17]),{20:[1,35]},{21:[1,36]},e(p,[2,13],{7:g,11:f}),e(v,[2,11]),e(v,[2,12]),{21:[1,37]},e(d,[2,25]),e(d,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",l=0,u=0,c=a.slice.call(arguments,1),h=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);h.setInput(e,d.yy),d.yy.lexer=h,d.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var g=h.yylloc;a.push(g);var f=h.options&&h.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,y,m,b,x,w,E,_,T,D={};;){if(y=n[n.length-1],this.defaultActions[y]?m=this.defaultActions[y]:(null==v&&(T=void 0,"number"!=typeof(T=r.pop()||h.lex()||1)&&(T instanceof Array&&(T=(r=T).pop()),T=t.symbols_[T]||T),v=T),m=o[y]&&o[y][v]),void 0===m||!m.length||!m[0]){var C="";for(x in _=[],o[y])this.terminals_[x]&&x>2&&_.push("'"+this.terminals_[x]+"'");C=h.showPosition?"Parse error on line "+(l+1)+":\n"+h.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==v?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(C,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:g,expected:_})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+y+", token: "+v);switch(m[0]){case 1:n.push(v),i.push(h.yytext),a.push(h.yylloc),n.push(m[1]),v=null,u=h.yyleng,s=h.yytext,l=h.yylineno,g=h.yylloc;break;case 2:if(w=this.productions_[m[1]][1],D.$=i[i.length-w],D._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},f&&(D._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(b=this.performAction.apply(D,[s,u,l,d.yy,m[1],i,a].concat(c))))return b;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[m[1]][0]),i.push(D.$),a.push(D._$),E=o[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!t||n[0].length>t[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,i[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,i[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return e.getLogger().trace("Found comment",t.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:case 23:case 26:this.popState();break;case 5:e.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return e.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:e.getLogger().trace("end icon"),this.popState();break;case 10:return e.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return e.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return e.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return e.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:case 15:case 16:case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 24:e.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return e.getLogger().trace("description:",t.yytext),"NODE_DESCR";case 27:return this.popState(),e.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),e.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),e.getLogger().trace("node end ...",t.yytext),"NODE_DEND";case 30:case 33:case 34:return this.popState(),e.getLogger().trace("node end (("),"NODE_DEND";case 31:case 32:return this.popState(),e.getLogger().trace("node end (-"),"NODE_DEND";case 35:case 36:return e.getLogger().trace("Long description:",t.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function b(){this.yy={}}return y.lexer=m,b.prototype=y,y.Parser=b,new b}());h.parser=h;const d=h;let p=[],g=0,f={};const v={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},y={clear:()=>{p=[],g=0,f={}},addNode:(e,t,n,i)=>{var a,o;r.l.info("addNode",e,t,n,i);const s=(0,r.c)();let l=(null==(a=s.mindmap)?void 0:a.padding)??r.A.mindmap.padding;switch(i){case v.ROUNDED_RECT:case v.RECT:case v.HEXAGON:l*=2}const u={id:g++,nodeId:(0,r.d)(t,s),level:e,descr:(0,r.d)(n,s),type:i,children:[],width:(null==(o=s.mindmap)?void 0:o.maxNodeWidth)??r.A.mindmap.maxNodeWidth,padding:l},c=function(e){for(let t=p.length-1;t>=0;t--)if(p[t].level<e)return p[t];return null}(e);if(c)c.children.push(u),p.push(u);else{if(0!==p.length)throw new Error('There can be only one root. No parent could be found for ("'+u.descr+'")');p.push(u)}},getMindmap:()=>p.length>0?p[0]:null,nodeType:v,getType:(e,t)=>{switch(r.l.debug("In get type",e,t),e){case"[":return v.RECT;case"(":return")"===t?v.ROUNDED_RECT:v.CLOUD;case"((":return v.CIRCLE;case")":return v.CLOUD;case"))":return v.BANG;case"{{":return v.HEXAGON;default:return v.DEFAULT}},setElementForId:(e,t)=>{f[e]=t},decorateNode:e=>{if(!e)return;const t=(0,r.c)(),n=p[p.length-1];e.icon&&(n.icon=(0,r.d)(e.icon,t)),e.class&&(n.class=(0,r.d)(e.class,t))},type2Str:e=>{switch(e){case v.DEFAULT:return"no-border";case v.RECT:return"rect";case v.ROUNDED_RECT:return"rounded-rect";case v.CIRCLE:return"circle";case v.CLOUD:return"cloud";case v.BANG:return"bang";case v.HEXAGON:return"hexgon";default:return"no-border"}},getLogger:()=>r.l,getElementById:e=>f[e]};function m(e,t,n,i,a){!function(e,t,n,i,a){const o=a.htmlLabels,l=i%11,u=t.append("g");n.section=l;let c="section-"+l;l<0&&(c+=" section-root"),u.attr("class",(n.class?n.class+" ":"")+"mindmap-node "+c);const h=u.append("g"),d=u.append("g"),p=n.descr.replace(/(<br\/*>)/g,"\n");(0,s.a)(d,p,{useHtmlLabels:o,width:n.width,classes:"mindmap-node-label"}),o||d.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const g=d.node().getBBox(),[f]=(0,r.C)(a.fontSize);if(n.height=g.height+1.1*f*.5+n.padding,n.width=g.width+2*n.padding,n.icon)if(n.type===e.nodeType.CIRCLE)n.height+=50,n.width+=50,u.append("foreignObject").attr("height","50px").attr("width",n.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+l+" "+n.icon),d.attr("transform","translate("+n.width/2+", "+(n.height/2-1.5*n.padding)+")");else{n.width+=50;const e=n.height;n.height=Math.max(e,60);const t=Math.abs(n.height-e);u.append("foreignObject").attr("width","60px").attr("height",n.height).attr("style","text-align: center;margin-top:"+t/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+l+" "+n.icon),d.attr("transform","translate("+(25+n.width/2)+", "+(t/2+n.padding/2)+")")}else if(o){const e=(n.width-g.width)/2,t=(n.height-g.height)/2;d.attr("transform","translate("+e+", "+t+")")}else{const e=n.width/2,t=n.padding/2;d.attr("transform","translate("+e+", "+t+")")}switch(n.type){case e.nodeType.DEFAULT:!function(e,t,n,r){t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 ${n.height-5} v${10-n.height} q0,-5 5,-5 h${n.width-10} q5,0 5,5 v${n.height-5} H0 Z`),t.append("line").attr("class","node-line-"+r).attr("x1",0).attr("y1",n.height).attr("x2",n.width).attr("y2",n.height)}(e,h,n,l);break;case e.nodeType.ROUNDED_RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("rx",n.padding).attr("ry",n.padding).attr("width",n.width)}(e,h,n);break;case e.nodeType.RECT:!function(e,t,n){t.append("rect").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("height",n.height).attr("width",n.width)}(e,h,n);break;case e.nodeType.CIRCLE:h.attr("transform","translate("+n.width/2+", "+ +n.height/2+")"),function(e,t,n){t.append("circle").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("r",n.width/2)}(e,h,n);break;case e.nodeType.CLOUD:!function(e,t,n){const r=n.width,i=n.height,a=.15*r,o=.25*r,s=.35*r,l=.2*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${.25*r},${-1*r*.1}\n a${s},${s} 1 0,1 ${.4*r},${-1*r*.1}\n a${o},${o} 1 0,1 ${.35*r},${1*r*.2}\n\n a${a},${a} 1 0,1 ${.15*r},${1*i*.35}\n a${l},${l} 1 0,1 ${-1*r*.15},${1*i*.65}\n\n a${o},${a} 1 0,1 ${-1*r*.25},${.15*r}\n a${s},${s} 1 0,1 ${-1*r*.5},0\n a${a},${a} 1 0,1 ${-1*r*.25},${-1*r*.15}\n\n a${a},${a} 1 0,1 ${-1*r*.1},${-1*i*.35}\n a${l},${l} 1 0,1 ${.1*r},${-1*i*.65}\n\n H0 V0 Z`)}(e,h,n);break;case e.nodeType.BANG:!function(e,t,n){const r=n.width,i=n.height,a=.15*r;t.append("path").attr("id","node-"+n.id).attr("class","node-bkg node-"+e.type2Str(n.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${.25*r},${-1*i*.1}\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},0\n a${a},${a} 1 0,0 ${.25*r},${1*i*.1}\n\n a${a},${a} 1 0,0 ${.15*r},${1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${1*i*.34}\n a${a},${a} 1 0,0 ${-1*r*.15},${1*i*.33}\n\n a${a},${a} 1 0,0 ${-1*r*.25},${.15*i}\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},0\n a${a},${a} 1 0,0 ${-1*r*.25},${-1*i*.15}\n\n a${a},${a} 1 0,0 ${-1*r*.1},${-1*i*.33}\n a${.8*a},${.8*a} 1 0,0 0,${-1*i*.34}\n a${a},${a} 1 0,0 ${.1*r},${-1*i*.33}\n\n H0 V0 Z`)}(e,h,n);break;case e.nodeType.HEXAGON:!function(e,t,n){const r=n.height,i=r/4,a=n.width-n.padding+2*i;!function(e,t,n,r,i){e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+(i.width-t)/2+", "+n+")")}(t,a,r,[{x:i,y:0},{x:a-i,y:0},{x:a,y:-r/2},{x:a-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],n)}(0,h,n)}e.setElementForId(n.id,u),n.height}(e,t,n,i,a),n.children&&n.children.forEach(((n,r)=>{m(e,t,n,i<0?r:i,a)}))}function b(e,t,n,r){t.add({group:"nodes",data:{id:e.id.toString(),labelText:e.descr,height:e.height,width:e.width,level:r,nodeId:e.id,padding:e.padding,type:e.type},position:{x:e.x,y:e.y}}),e.children&&e.children.forEach((i=>{b(i,t,n,r+1),t.add({group:"edges",data:{id:`${e.id}_${i.id}`,source:e.id,target:i.id,depth:r,section:i.section}})}))}function x(e,t){return new Promise((n=>{const a=(0,o.Ys)("body").append("div").attr("id","cy").attr("style","display:none"),s=i({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});a.remove(),b(e,s,t,0),s.nodes().forEach((function(e){e.layoutDimensions=()=>{const t=e.data();return{w:t.width,h:t.height}}})),s.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),s.ready((e=>{r.l.info("Ready",e),n(s)}))}))}i.use(a);const w={db:y,renderer:{draw:async(e,t,n,i)=>{var a,o;r.l.debug("Rendering mindmap diagram\n"+e);const s=i.db,l=s.getMindmap();if(!l)return;const u=(0,r.c)();u.htmlLabels=!1;const c=(0,r.z)(t),h=c.append("g");h.attr("class","mindmap-edges");const d=c.append("g");d.attr("class","mindmap-nodes"),m(s,d,l,-1,u);const p=await x(l,u);!function(e,t){t.edges().map(((t,n)=>{const i=t.data();if(t[0]._private.bodyBounds){const a=t[0]._private.rscratch;r.l.trace("Edge: ",n,i),e.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}}))}(h,p),function(e,t){t.nodes().map(((t,n)=>{const i=t.data();i.x=t.position().x,i.y=t.position().y,function(e,t){const n=e.getElementById(t.id),r=t.x||0,i=t.y||0;n.attr("transform","translate("+r+","+i+")")}(e,i);const a=e.getElementById(i.nodeId);r.l.info("Id:",n,"Position: (",t.position().x,", ",t.position().y,")",i),a.attr("transform",`translate(${t.position().x-i.width/2}, ${t.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)}))}(s,p),(0,r.o)(void 0,c,(null==(a=u.mindmap)?void 0:a.padding)??r.A.mindmap.padding,(null==(o=u.mindmap)?void 0:o.useMaxWidth)??r.A.mindmap.useMaxWidth)}},parser:d,styles:e=>`\n .edge {\n stroke-width: 3;\n }\n ${(e=>{let t="";for(let n=0;n<e.THEME_COLOR_LIMIT;n++)e["lineColor"+n]=e["lineColor"+n]||e["cScaleInv"+n],(0,l.Z)(e["lineColor"+n])?e["lineColor"+n]=(0,u.Z)(e["lineColor"+n],20):e["lineColor"+n]=(0,c.Z)(e["lineColor"+n],20);for(let n=0;n<e.THEME_COLOR_LIMIT;n++){const r=""+(17-3*n);t+=`\n .section-${n-1} rect, .section-${n-1} path, .section-${n-1} circle, .section-${n-1} polygon, .section-${n-1} path {\n fill: ${e["cScale"+n]};\n }\n .section-${n-1} text {\n fill: ${e["cScaleLabel"+n]};\n }\n .node-icon-${n-1} {\n font-size: 40px;\n color: ${e["cScaleLabel"+n]};\n }\n .section-edge-${n-1}{\n stroke: ${e["cScale"+n]};\n }\n .edge-depth-${n-1}{\n stroke-width: ${r};\n }\n .section-${n-1} line {\n stroke: ${e["cScaleInv"+n]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `}return t})(e)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${e.git0};\n }\n .section-root text {\n fill: ${e.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .mindmap-node-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/7497.e58bfc8c.js.LICENSE.txt b/assets/js/7497.e58bfc8c.js.LICENSE.txt new file mode 100644 index 0000000000..a9f6f12447 --- /dev/null +++ b/assets/js/7497.e58bfc8c.js.LICENSE.txt @@ -0,0 +1,9 @@ +/*! +Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable +Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) +Licensed under The MIT License (http://opensource.org/licenses/MIT) +*/ + +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ + +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ diff --git a/assets/js/7514af75.19e992cc.js b/assets/js/7514af75.19e992cc.js new file mode 100644 index 0000000000..bcd2cdeb9a --- /dev/null +++ b/assets/js/7514af75.19e992cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6305],{917:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>E,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=r(85893),s=r(11151);const o={},c="FUELRATE",a={id:"about/references/keywords/FUELRATE",title:"FUELRATE",description:"INSTALLATIONS",source:"@site/docs/about/references/keywords/FUELRATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUELRATE",permalink:"/ecalc/docs/about/references/keywords/FUELRATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUELRATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"},next:{title:"FUEL_TYPES",permalink:"/ecalc/docs/about/references/keywords/FUEL_TYPES"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"fuelrate",children:"FUELRATE"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"\n/\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELRATE",children:"FUELRATE"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used for direct fuel ",(0,t.jsx)(n.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"})," to define fuel consumption directly with an\n",(0,t.jsx)(n.code,{children:"expression <Expressions>"})]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: <fuel rate expression [m3/day]>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION: <condition expression>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.p,{children:"Constant fuel rate:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: 100000 # [m3/day]\n"})}),"\n",(0,t.jsx)(n.p,{children:"Fuel rate varying in time:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: fueldata;FUEL_RATE # [m3/day]\n"})})]})}function E(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(67294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7557b935.3c07d124.js b/assets/js/7557b935.3c07d124.js new file mode 100644 index 0000000000..af414ce6fa --- /dev/null +++ b/assets/js/7557b935.3c07d124.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[856],{97398:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var s=i(85893),o=i(11151);const t={title:"v7 to v8",description:"v7 to v8 migration",sidebar_position:0},r="v7 to v8",l={id:"about/migration_guides/v7_to_v8",title:"v7 to v8",description:"v7 to v8 migration",source:"@site/docs/about/migration_guides/v7_to_v8.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v7_to_v8",permalink:"/ecalc/docs/about/migration_guides/v7_to_v8",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v7_to_v8.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"v7 to v8",description:"v7 to v8 migration",sidebar_position:0},sidebar:"about",previous:{title:"Migrating eCalc versions",permalink:"/ecalc/docs/about/migration_guides/"},next:{title:"v8 to v8.1",permalink:"/ecalc/docs/about/migration_guides/v8_to_v81"}},a={},d=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"Migration overview",id:"migration-overview",level:3},{value:"Main differences",id:"main-differences",level:3},{value:"1. All component names must be unique",id:"1-all-component-names-must-be-unique",level:4},{value:"2. UNITS for pump and compressor charts",id:"2-units-for-pump-and-compressor-charts",level:4},{value:"3. Restrict allowed characters in component names and emission names",id:"3-restrict-allowed-characters-in-component-names-and-emission-names",level:4},{value:"4. NAME no longer used for LTP reporting, use CATEGORY instead",id:"4-name-no-longer-used-for-ltp-reporting-use-category-instead",level:4},{value:"5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)",id:"5-not-possible-to-use-custom-category-names-pre-defined-categories-must-be-uppercase-with-hyphen-as-separator-ie-fuel-gas",level:4},{value:"CLI migration",id:"cli-migration",level:2},{value:"1. Invoking eCalc\u2122 directly is no longer supported, use <code>ecalc run</code> instead.",id:"1-invoking-ecalc-directly-is-no-longer-supported-use-ecalc-run-instead",level:4},{value:"2. Log level should be specified as the first argument + log to file",id:"2-log-level-should-be-specified-as-the-first-argument--log-to-file",level:4},{value:"3. Model yaml-file needs to come last",id:"3-model-yaml-file-needs-to-come-last",level:4},{value:"4. Extrapolation correction is no longer optional",id:"4-extrapolation-correction-is-no-longer-optional",level:4},{value:"5. Argument for LTP export has changed from: <code>--centuries-ltp-export</code> to <code>--ltp-export</code>",id:"5-argument-for-ltp-export-has-changed-from---centuries-ltp-export-to---ltp-export",level:4},{value:"6. Simple results are now default for json",id:"6-simple-results-are-now-default-for-json",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"v7-to-v8",children:"v7 to v8"}),"\n",(0,s.jsx)(n.p,{children:"In this migration guide you will find:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"#cli-migration",children:"CLI changes"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,s.jsx)(n.h3,{id:"migration-overview",children:"Migration overview"}),"\n",(0,s.jsx)(n.p,{children:"This doc guides you through migrating an existing eCalc\u2122 model from version v7 to v8."}),"\n",(0,s.jsx)(n.p,{children:"We try to make this as easy as possible, and provide a step-by-step migration guide."}),"\n",(0,s.jsx)(n.h3,{id:"main-differences",children:"Main differences"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"All component names must be unique to avoid ambiguity in reporting"}),"\n",(0,s.jsx)(n.li,{children:"UNITS are required when setting up compressor and pump charts"}),"\n",(0,s.jsx)(n.li,{children:"Restrict allowed characters in component names and emission names"}),"\n",(0,s.jsx)(n.li,{children:"NAME no longer used for LTP reporting, use CATEGORY instead"}),"\n",(0,s.jsx)(n.li,{children:"Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"1-all-component-names-must-be-unique",children:"1. All component names must be unique"}),"\n",(0,s.jsx)(n.p,{children:"All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation,\ngenerator sets, electricity consumers, fuel consumers and direct emitters."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"INSTALLATIONS:\n # This is old\n - NAME: Installation\n ...\n \n GENERATORSETS:\n # This is old\n - NAME: Genset\n ...\n CONSUMERS:\n # This is old\n - NAME: Consumer\n ...\n # This is old\n - NAME: Consumer\n ...\n # This is old\n - NAME: Genset\n ...\n \n FUELCONSUMERS:\n # This is old\n - NAME: FuelConsumer\n ...\n # This is old\n - NAME: FuelConsumer\n ...\n \n DIRECT_EMITTER:\n # This is old\n - NAME: DirectEmitter\n ...\n # This is old\n - NAME: DirectEmitter\n ...\n # This is old\n - NAME: Installation\n ...\n"})}),"\n",(0,s.jsx)(n.p,{children:"This model is no longer valid, and the duplicated installation names are highlighted.\nTo make this model valid these names needs to be changed. For example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"INSTALLATIONS:\n # This is new\n - NAME: Installation_A\n ...\n \n GENERATORSETS:\n # This is new\n - NAME: Genset_A\n ...\n CONSUMERS:\n # This is new\n - NAME: Consumer_A\n ...\n # This is new\n - NAME: Consumer_B\n ...\n # This is new\n - NAME: Genset_B\n ...\n \n FUELCONSUMERS:\n # This is new\n - NAME: FuelConsumer_A\n ...\n # This is new\n - NAME: FuelConsumer_B\n ...\n \n DIRECT_EMITTER:\n # This is new\n - NAME: DirectEmitter_A\n ...\n # This is new\n - NAME: DirectEmitter_B\n ...\n # This is new\n - NAME: Installation_B\n ...\n"})}),"\n",(0,s.jsx)(n.p,{children:"This will make it possible to attribute results to each consumer by name, and removes any an ambiguity\nwhen interpreting eCalc\u2122 results."}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATION"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSET"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),",\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTER"}),"\nfor more details about the relevant keywords."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Are you using power from shore?",type:"tip",children:[(0,s.jsx)(n.p,{children:"We have implemented temporal categories for consumers to support the power from shore implementation in use."}),(0,s.jsxs)(n.p,{children:["Instead of duplicating the generator set and setting the ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"})," category,\nit is now possible to change the category at a certain date. This is the same syntax as other temporal models."]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"CATEGORY:\n 2020-01-01: TURBINE-GENERATOR\n 2030-01-01: POWER-FROM-SHORE\n"})}),(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations#power-from-shore",children:"Power from shore"})," for more information."]})]}),"\n",(0,s.jsx)(n.h4,{id:"2-units-for-pump-and-compressor-charts",children:"2. UNITS for pump and compressor charts"}),"\n",(0,s.jsx)(n.p,{children:"Compressor and pump charts has previously had implicit units, without requiring the operator to specify what\nunits are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand\nover models."}),"\n",(0,s.jsx)(n.p,{children:"To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify."}),"\n",(0,s.jsx)(n.p,{children:"To keep the old defaults you can do the following:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"FACILITY_INPUTS:\n - NAME: single_speed_pump_chart\n FILE: <some input csv>\n # highlight-next-line\n TYPE: PUMP_CHART_SINGLE_SPEED\n # highlight-new-start\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n # highlight-new-end\n - NAME: variable_speed_pump_chart\n FILE: <some input csv>\n # highlight-next-line\n TYPE: PUMP_CHART_VARIABLE_SPEED\n # highlight-new-start\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n # highlight-new-end\n\nMODELS:\n - NAME: single_speed_compressor_chart\n # highlight-start\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n # highlight-end\n # highlight-new-start\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: FRACTION\n # highlight-new-end\n CURVES:\n ...\n - NAME: variable_speed_compressor_chart\n # highlight-start\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n # highlight-end\n # highlight-new-start\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: FRACTION\n # highlight-new-end\n CURVES:\n ...\n\n...\n"})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHART"}),"\nand ",(0,s.jsx)(n.a,{href:"../modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP CHART"}),"\nfor more details about the relevant keywords."]}),"\n",(0,s.jsx)(n.h4,{id:"3-restrict-allowed-characters-in-component-names-and-emission-names",children:"3. Restrict allowed characters in component names and emission names"}),"\n",(0,s.jsxs)(n.p,{children:["Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (",(0,s.jsx)(n.code,{children:"_"}),"), hyphen (",(0,s.jsx)(n.code,{children:"-"}),") and space (",(0,s.jsx)(n.code,{children:" "}),")."]}),"\n",(0,s.jsxs)(n.p,{children:["Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (",(0,s.jsx)(n.code,{children:"_"}),")."]}),"\n",(0,s.jsx)(n.h4,{id:"4-name-no-longer-used-for-ltp-reporting-use-category-instead",children:"4. NAME no longer used for LTP reporting, use CATEGORY instead"}),"\n",(0,s.jsx)(n.p,{children:"We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml"',children:"INSTALLATIONS:\n - NAME: Installation_A\n ...\n \n GENERATORSETS:\n - NAME: Genset_A\n ...\n CONSUMERS:\n - NAME: Consumer_A\n ...\n \n FUELCONSUMERS:\n # This is old\n - NAME: loading # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: LOADING # Category must be used to include it in LTP reporting\n FUEL: Fuel_A\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ...\n # This is old\n - NAME: storage # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: STORAGE # Category must be used to include it in LTP reporting\n FUEL: Fuel_B\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ... \n # This is old\n - NAME: flare # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: FLARE # Category must be used to include it in LTP reporting\n FUEL: Fuel_C\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ...\n # This is old\n - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting\n # This is new\n CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting\n FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: Oil_rate_per_timestep\n ... \n \n...\n"})}),"\n",(0,s.jsx)(n.h4,{id:"5-not-possible-to-use-custom-category-names-pre-defined-categories-must-be-uppercase-with-hyphen-as-separator-ie-fuel-gas",children:"5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)"}),"\n",(0,s.jsxs)(n.p,{children:["Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names.\nThe input is case-sensitive and must match exactly with the pre-defined names. See ",(0,s.jsx)(n.a,{href:"../references/keywords/CATEGORY",children:"CLI Docs"})," for full documentation."]}),"\n",(0,s.jsx)(n.h2,{id:"cli-migration",children:"CLI migration"}),"\n",(0,s.jsx)(n.p,{children:"This version includes some changes to how the CLI is invoked and changes to default behavior."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Invoking eCalc\u2122 directly is no longer supported, use ",(0,s.jsx)(n.code,{children:"ecalc run"})," instead."]}),"\n",(0,s.jsx)(n.li,{children:"Log level should be specified as the first argument + log to file"}),"\n",(0,s.jsx)(n.li,{children:"Model yaml-file needs to come last"}),"\n",(0,s.jsx)(n.li,{children:"Extrapolation (correction) is now always used and cannot be disabled"}),"\n",(0,s.jsxs)(n.li,{children:["Argument for LTP export has changed from: ",(0,s.jsx)(n.code,{children:"--centuries-ltp-export"})," to ",(0,s.jsx)(n.code,{children:"--ltp-export"})]}),"\n",(0,s.jsx)(n.li,{children:"Simple results are now default for json"}),"\n"]}),"\n",(0,s.jsxs)(n.h4,{id:"1-invoking-ecalc-directly-is-no-longer-supported-use-ecalc-run-instead",children:["1. Invoking eCalc\u2122 directly is no longer supported, use ",(0,s.jsx)(n.code,{children:"ecalc run"})," instead."]}),"\n",(0,s.jsxs)(n.p,{children:["To make it possible to add ",(0,s.jsx)(n.code,{children:"ecalc show"})," we added the ",(0,s.jsx)(n.code,{children:"ecalc run"})," command. In v8 it is required to specify ",(0,s.jsx)(n.code,{children:"run"})," when calculating a model."]}),"\n",(0,s.jsx)(n.p,{children:"If you previously ran eCalc\u2122 with this command"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc ./my-model.yaml\n"})}),"\n",(0,s.jsx)(n.p,{children:"you should now use"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc run ./my-model.yaml\n"})}),"\n",(0,s.jsx)(n.h4,{id:"2-log-level-should-be-specified-as-the-first-argument--log-to-file",children:"2. Log level should be specified as the first argument + log to file"}),"\n",(0,s.jsxs)(n.p,{children:["Previously you could specify the ",(0,s.jsx)(n.code,{children:"--log"})," argument after ",(0,s.jsx)(n.code,{children:"run"}),", this is no longer possible."]}),"\n",(0,s.jsx)(n.p,{children:"This is the new way of specifying log level."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc --log DEBUG run ./my-model.yaml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In addition we are introducing ",(0,s.jsx)(n.code,{children:"--log-folder <path>"})," where you can direct and store the log in a given path to easily\nlook at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc\nproduces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages).\nThe user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT\ndo that for you."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"$ ecalc --log DEBUG --log-folder . run ./my-model.yaml\n"})}),"\n",(0,s.jsxs)(n.p,{children:["As you see above, the argument ",(0,s.jsx)(n.strong,{children:"MUST"})," be added ",(0,s.jsx)(n.strong,{children:"BEFORE"})," the ",(0,s.jsx)(n.code,{children:"run"})," argument."]}),"\n",(0,s.jsx)(n.h4,{id:"3-model-yaml-file-needs-to-come-last",children:"3. Model yaml-file needs to come last"}),"\n",(0,s.jsx)(n.p,{children:"When running eCalc\u2122 you will now need to set the model file argument last."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:"ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file]"})}),"\n",(0,s.jsxs)(n.p,{children:["See the ",(0,s.jsx)(n.a,{href:"../references/cli_reference",children:"CLI Docs"})," or run ",(0,s.jsx)(n.code,{children:"ecalc --help"})," for the full documentation."]}),"\n",(0,s.jsx)(n.h4,{id:"4-extrapolation-correction-is-no-longer-optional",children:"4. Extrapolation correction is no longer optional"}),"\n",(0,s.jsx)(n.p,{children:'We have removed the extrapolation correction argument. eCalc\u2122 will now always "extrapolate" values.\nThe main reason for making this change was that the feature was in general always used, in addition to being a confusing term.\nLet us know if you have a use-case where this was needed.'}),"\n",(0,s.jsxs)(n.h4,{id:"5-argument-for-ltp-export-has-changed-from---centuries-ltp-export-to---ltp-export",children:["5. Argument for LTP export has changed from: ",(0,s.jsx)(n.code,{children:"--centuries-ltp-export"})," to ",(0,s.jsx)(n.code,{children:"--ltp-export"})]}),"\n",(0,s.jsxs)(n.p,{children:["To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily\naffected by Centuries), we simplify the argument to get LTP results. See ",(0,s.jsx)(n.a,{href:"../references/cli_reference",children:"CLI Docs"})," for\nfull documentation."]}),"\n",(0,s.jsx)(n.h4,{id:"6-simple-results-are-now-default-for-json",children:"6. Simple results are now default for json"}),"\n",(0,s.jsxs)(n.p,{children:["Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now\nneeds to use the --detailed-output option when running the CLI. See ",(0,s.jsx)(n.a,{href:"../references/cli_reference#ecalc-run",children:"CLI reference docs"}),"\nfor more details."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var s=i(67294);const o={},t=s.createContext(o);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b02141e.f6863e42.js b/assets/js/7b02141e.f6863e42.js new file mode 100644 index 0000000000..67b3a9bcb1 --- /dev/null +++ b/assets/js/7b02141e.f6863e42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2638],{19519:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>a});var n=t(85893),i=t(11151);const l={title:"eCalc\u2122 Workflow",sidebar_position:4,description:"eCalc modelling"},r=void 0,c={id:"about/modelling/workflow/index",title:"eCalc\u2122 Workflow",description:"eCalc modelling",source:"@site/docs/about/modelling/workflow/index.md",sourceDirName:"about/modelling/workflow",slug:"/about/modelling/workflow/",permalink:"/ecalc/docs/about/modelling/workflow/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/workflow/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"eCalc\u2122 Workflow",sidebar_position:4,description:"eCalc modelling"},sidebar:"about",previous:{title:"Direct consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers"},next:{title:"Generic Workflow",permalink:"/ecalc/docs/about/modelling/workflow/generic_workflow"}},s={},a=[];function d(e){const o={p:"p",...(0,i.a)(),...e.components};return(0,n.jsx)(o.p,{children:"This section will outline the method and workflow required when setting up an eCalc\u2122 model for the first time."})}function u(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,o,t)=>{t.d(o,{Z:()=>c,a:()=>r});var n=t(67294);const i={},l=n.createContext(i);function r(e){const o=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function c(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),n.createElement(l.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7c623a68.59eed68b.js b/assets/js/7c623a68.59eed68b.js new file mode 100644 index 0000000000..5e77172745 --- /dev/null +++ b/assets/js/7c623a68.59eed68b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1310],{2047:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>t,contentTitle:()=>c,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>d});var n=a(85893),r=a(11151);const l={},c="CONSUMPTION_RATE_TYPE",i={id:"about/references/keywords/CONSUMPTION_RATE_TYPE",title:"CONSUMPTION_RATE_TYPE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS"},next:{title:"CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN"}},t={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function m(e){const s={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mfrac:"mfrac",mi:"mi",mo:"mo",mrow:"mrow",mtext:"mtext",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"consumption_rate_type",children:"CONSUMPTION_RATE_TYPE"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Required"}),(0,n.jsx)(s.th,{children:"Child of"}),(0,n.jsx)(s.th,{children:"Children/Options"})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"No"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"ENERGY_USAGE_MODEL"})}),(0,n.jsx)(s.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(s.admonition,{type:"important",children:(0,n.jsxs)(s.p,{children:["You must have good control of the input rates - which are stream day rates and which are calendar day rates - and\nspecify ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," as input if necessary."]})}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"})," is used,the consumption rate type may be specified for\n",(0,n.jsx)(s.code,{children:"DIRECT ENERGY USAGE MODEL"}),"(",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/LOAD",children:"LOAD"})," or ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELRATE",children:"FUELRATE"}),")\nby setting ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",children:"CONSUMPTION_RATE_TYPE"})," to either ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or\n",(0,n.jsx)(s.code,{children:"STREAM_DAY"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The default behaviour, is that these will be interpreted as ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," if not set explicitly. This will result in\nfuel rates being multiplied by regularity to obtain (average) calendar day fuel rates, while the loads will be kept\nstream day when passed to the generator set calculation."]}),"\n",(0,n.jsxs)(s.admonition,{type:"note",children:[(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"CALENDAR_DAY"}),": The average rate over a period after adjusting for operating conditions that keeps the\naverage throughput below the maximum achievable throughput for a single day, known as stream day."]}),(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"STREAM_DAY"}),": The actual rate at a given moment. When multiplied with a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"}),"\nfactor you get the calendar day rate which needs to be used when evaluating the economics of a process unit."]}),(0,n.jsx)(s.span,{className:"katex-display",children:(0,n.jsxs)(s.span,{className:"katex",children:[(0,n.jsx)(s.span,{className:"katex-mathml",children:(0,n.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(s.semantics,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"s"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"m"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mo,{children:"="}),(0,n.jsxs)(s.mfrac,{children:[(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"c"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"n"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"d"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"y"}),(0,n.jsx)(s.mtext,{children:"\xa0"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"e"})]}),(0,n.jsxs)(s.mrow,{children:[(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"e"}),(0,n.jsx)(s.mi,{children:"g"}),(0,n.jsx)(s.mi,{children:"u"}),(0,n.jsx)(s.mi,{children:"l"}),(0,n.jsx)(s.mi,{children:"a"}),(0,n.jsx)(s.mi,{children:"r"}),(0,n.jsx)(s.mi,{children:"i"}),(0,n.jsx)(s.mi,{children:"t"}),(0,n.jsx)(s.mi,{children:"y"})]})]})]}),(0,n.jsx)(s.annotation,{encoding:"application/x-tex",children:"stream\\ day\\ rate = \\frac{calendar\\ day\\ rate}{regularity}"})]})})}),(0,n.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"s"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"am"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(s.span,{className:"mrel",children:"="}),(0,n.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(s.span,{className:"base",children:[(0,n.jsx)(s.span,{className:"strut",style:{height:"2.2519em",verticalAlign:"-0.8804em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,n.jsx)(s.span,{className:"mfrac",children:(0,n.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(s.span,{className:"vlist-r",children:[(0,n.jsxs)(s.span,{className:"vlist",style:{height:"1.3714em"},children:[(0,n.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"re"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"gu"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"i"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"})]})]}),(0,n.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,n.jsxs)(s.span,{style:{top:"-3.677em"},children:[(0,n.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,n.jsxs)(s.span,{className:"mord",children:[(0,n.jsx)(s.span,{className:"mord mathnormal",children:"c"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.01968em"},children:"l"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"n"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"d"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.03588em"},children:"y"}),(0,n.jsx)(s.span,{className:"mspace",children:"\xa0"}),(0,n.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"r"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"a"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"t"}),(0,n.jsx)(s.span,{className:"mord mathnormal",children:"e"})]})]})]}),(0,n.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(s.span,{className:"vlist-r",children:(0,n.jsx)(s.span,{className:"vlist",style:{height:"0.8804em"},children:(0,n.jsx)(s.span,{})})})]})}),(0,n.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})]})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"CONSUMPTION_RATE_TYPE: <consumption_rate_type>\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Where ",(0,n.jsx)(s.code,{children:"<consumption_rate_type>"})," can either be ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," or ",(0,n.jsx)(s.code,{children:"STREAM_DAY"}),"."]}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.p,{children:"Specifying consumption rate type for fixed/direct consumers:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"LOAD: 10\nCONSUMPTION_RATE_TYPE: CALENDAR_DAY\n...\nFUELRATE: 10000\nCONSUMPTION_RATE_TYPE: STREAM_DAY\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Given ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," input the rate will be converted to ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," when evaluating, and any fuel rate in output\nwill be converted back again to ",(0,n.jsx)(s.code,{children:"CALENDAR_DAY"})," rate equivalent in the results."]}),"\n",(0,n.jsxs)(s.p,{children:["Given ",(0,n.jsx)(s.code,{children:"STREAM_DAY"})," input, and a ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/REGULARITY",children:"REGULARITY"})," factor of 0.5 (50%), the\ninterpretation is that the process unit will run at full capacity half of the time. The resulting fuel rate reported\nfor a fuel consumer will be halved compared to 1 (100%) regularity."]})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},11151:(e,s,a)=>{a.d(s,{Z:()=>i,a:()=>c});var n=a(67294);const r={},l=n.createContext(r);function c(e){const s=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7cebed78.799c5db3.js b/assets/js/7cebed78.799c5db3.js new file mode 100644 index 0000000000..b26a341637 --- /dev/null +++ b/assets/js/7cebed78.799c5db3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9376],{46582:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>E,frontMatter:()=>i,metadata:()=>l,toc:()=>o});var r=s(85893),a=s(11151);const i={sidebar_position:1,title:"Simple model",description:"A simple model with a single installation"},t="Simple model example",l={id:"about/modelling/examples/simple",title:"Simple model",description:"A simple model with a single installation",source:"@site/docs/about/modelling/examples/simple.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/simple",permalink:"/ecalc/docs/about/modelling/examples/simple",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/simple.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Simple model",description:"A simple model with a single installation"},sidebar:"about",previous:{title:"Examples",permalink:"/ecalc/docs/about/modelling/examples/"},next:{title:"Advanced model",permalink:"/ecalc/docs/about/modelling/examples/advanced"}},d={},o=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"VARIABLES",id:"variables",level:2},{value:"INSTALLATION",id:"installation",level:2},{value:"GENERATORSETS",id:"generatorsets",level:3},{value:"FUELCONSUMERS",id:"fuelconsumers",level:3},{value:"ENERGY_USAGE_MODEL",id:"energy_usage_model",level:2},{value:"Full eCalc YAML model",id:"full-ecalc-yaml-model",level:2},{value:"Input files",id:"input-files",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"simple-model-example",children:"Simple model example"}),"\n",(0,r.jsxs)(n.p,{children:["The following is an example with one installation called ",(0,r.jsx)(n.code,{children:"Installation A"})," that exports oil (",(0,r.jsx)(n.code,{children:"OIL_PROD"}),") and gas (",(0,r.jsx)(n.code,{children:"GAS_PROD"}),").\nThe installation emits CO",(0,r.jsx)("sub",{children:"2"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"On this installation, the following components are identified:"}),"\n",(0,r.jsx)(n.mermaid,{value:"graph TD;\n A(Installation A) --\x3e B(Flare);\n A --\x3e C(Gas export compressor);\n A --\x3e D(Generator set A);\n D --\x3e E(Base production load);\n D --\x3e F(Gas injection compressor);\n D --\x3e G(Produced water reinjection pump);\n D --\x3e H(Sea water injection pump);\n style A stroke:red;\n style E stroke:blue;\n style F stroke:blue;\n style G stroke:blue;\n style H stroke:blue;"}),"\n",(0,r.jsx)(n.p,{children:"The results of a performed characterization of the equipment are listed below:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Consumer"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Generator set A"}),(0,r.jsx)(n.td,{children:"Generator set"}),(0,r.jsx)(n.td,{children:"Variable fuel consumer with electricity to fuel function"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Base production load"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Constant load 11.8 MW"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gas injection compressor"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on gas injection rate and lift gas rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Produced water reinjection pump"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar."})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Sea water injection pump"}),(0,r.jsx)(n.td,{children:"Power consumer"}),(0,r.jsx)(n.td,{children:"Variable consumption depending on a complex combination on water injection rate and water production rate"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Flare"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsxs)(n.td,{children:["Before 1.1.2005: Constant fuel rate 10000 Sm",(0,r.jsx)("sup",{children:"3"}),"/day, From 1.1.2005: Constant fuel rate 7000 Sm",(0,r.jsx)("sup",{children:"3"}),"/day"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gas export compressor"}),(0,r.jsx)(n.td,{children:"Direct fuel consumer"}),(0,r.jsx)(n.td,{children:"Variable fuel consumer depending on gas sales rate"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"yaml-model-overview",children:"YAML model overview"}),"\n",(0,r.jsx)(n.p,{children:"The YAML model consist of these main components:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Time series inputs - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Facility characterization input - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,r.jsxs)(n.li,{children:["Fuel input - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Model variables - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})]}),"\n",(0,r.jsxs)(n.li,{children:["Installation topology - ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"The YAML setup file looks like this:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nVARIABLES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.p,{children:"We will now replace the placeholders for each of the main keywords above."}),"\n",(0,r.jsx)(n.h2,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,r.jsxs)(n.p,{children:["The reservoir variables, in this case, are found in a CSV (Comma separated file) ",(0,r.jsx)(n.code,{children:"production_data.csv"}),".\nWe give the time-series data a name that can be referenced as variables elsewhere in the form ",(0,r.jsx)(n.code,{children:"<NAME>:<NAME OF COLUMN>"}),".\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," for further details."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n FILE: production_data.csv\n TYPE: DEFAULT\n"})}),"\n",(0,r.jsx)(n.h2,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,r.jsxs)(n.p,{children:["We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets,\ntabulated/sampled models and pump charts.\nSee ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," for further details."]}),"\n",(0,r.jsxs)(n.p,{children:["Here we define a tabulated genset, a sampled compressor, a sampled compressor driven by a turbine, a sampled pump,\nand a single speed pump chart. These will be used in the final model for illustration.\nNote that more complicated energy models are defined under the ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS-keyword"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"See the input data further down to understand the input formats."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: compressor_sampled\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: compressor_with_turbine_sampled\n FILE: compressor_sampled_with_turbine.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_sampled\n FILE: pump_sampled.csv\n TYPE: TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,r.jsx)(n.h2,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,r.jsxs)(n.p,{children:["In this example there is only one ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," - ",(0,r.jsx)(n.code,{children:"fuel_gas"}),". The emissions we model with the fuel is CO",(0,r.jsx)("sub",{children:"2"}),". The CO",(0,r.jsx)("sub",{children:"2"})," factor\nis 2.19 kg CO2 per Sm",(0,r.jsx)("sup",{children:"3"})," fuel gas burned."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"FUEL_TYPES:\n - NAME: fuel_gas\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.19 #CO2/Sm3 fuel gas burned\n"})}),"\n",(0,r.jsx)(n.h2,{id:"variables",children:"VARIABLES"}),"\n",(0,r.jsxs)(n.p,{children:["To run the model it is recommended to specify ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),",\ninstead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model\nby allowing descriptive variable names and avoid duplications."]}),"\n",(0,r.jsx)(n.p,{children:"For our model, we specify the following variables:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"VARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent\n sea_water_injection_rate_m3_per_day:\n VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n gas_injection_rate_sm3_per_day:\n VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT\n produced_water_reinjection_condition:\n VALUE: SIM;WATER_PROD > 1500\n produced_water_reinjection_total_system_rate_m3_per_day:\n VALUE: SIM;WATER_PROD\n flare_fuel_rate_sm3_day:\n 1995-10-01:\n VALUE: 10000\n 2005-01-01:\n VALUE: 7000\n"})}),"\n",(0,r.jsxs)(n.p,{children:["We reference the ",(0,r.jsx)(n.a,{href:"#time_series",children:"TIME_SERIES"})," ",(0,r.jsx)(n.code,{children:"SIM"})," using the column names from the CSV file. Here we use for example\n",(0,r.jsx)(n.code,{children:"SIM:OIL_PROD"})," (Field Oil Production Rate) ",(0,r.jsx)(n.code,{children:"SIM:GAS_PROD"})," (Field Gas Sales Rate)."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"It is possible to specify if-else conditions by multiplying with boolean values.\nThis has been done in the $var.sea_water_injection_rate_m3_per_day variable example above."})}),"\n",(0,r.jsx)(n.h2,{id:"installation",children:"INSTALLATION"}),"\n",(0,r.jsx)(n.p,{children:"An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form\nof generatorsets (with electric sub-consumers), and direct fuel consumers."}),"\n",(0,r.jsx)(n.p,{children:"We specify:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"NAME"}),": the installation name"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"HCEXPORT"}),": Hydrocarbon export in Sm",(0,r.jsx)("sup",{children:"3"}),"/day by referring to the variable specified under ",(0,r.jsx)(n.a,{href:"#variables",children:"VARIABLES"})," above."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"FUEl"}),": Default fuel specified in ",(0,r.jsx)(n.a,{href:"#fuel_types",children:"FUEL_TYPES"})," above."]}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n GENERATORSETS:\n <placeholder>\n FUELCONSUMERS:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"generatorsets",children:"GENERATORSETS"}),"\n",(0,r.jsxs)(n.p,{children:["There is one generator set, ",(0,r.jsx)(n.code,{children:"Generator set A"}),". This has a power to fuel function defined in\n",(0,r.jsx)(n.a,{href:"#facility_inputs",children:"FACILITY_INPUTS"})," with the name ",(0,r.jsx)(n.code,{children:"genset"}),". Further, the consumers getting\npower from the generator set are ",(0,r.jsx)(n.em,{children:"Base production load"}),", ",(0,r.jsx)(n.em,{children:"Gas injection compressor"}),", ",(0,r.jsx)(n.em,{children:"Produced water re-injection pump"}),"\nand ",(0,r.jsx)(n.em,{children:"Sea-water injection pump"}),". The setup for ",(0,r.jsx)(n.code,{children:"Generator set A"})," thus becomes:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" GENERATORSETS:\n - NAME: Generator set A\n ELECTRICITY2FUEL: genset\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"fuelconsumers",children:"FUELCONSUMERS"}),"\n",(0,r.jsxs)(n.p,{children:["The direct fuel consumers are ",(0,r.jsx)(n.strong,{children:"Flare"})," and ",(0,r.jsx)(n.strong,{children:"Gas export compressor"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:" FUELCONSUMERS:\n - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n <placeholder>\n - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <placeholder>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"energy_usage_model",children:"ENERGY_USAGE_MODEL"}),"\n",(0,r.jsxs)(n.p,{children:["We will now fill in the final placeholders with detailed ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"s."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Base production load"})," has a constant load of 11.8 MW:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 11.8 # MW\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Gas injection compressor"})," is represented by a tabulated (sampled) energy usage model defining the relationship\nbetween the gas injection rate [Sm",(0,r.jsx)("sup",{children:"3"}),"/day] and the corresponding power requirement. The gas rate is already defined\nin the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_injection_rate_sm3_per_day"})," as ",(0,r.jsx)(n.code,{children:"SIM;GAS_INJ {+} SIM;GAS_LIFT"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_sampled\n RATE: $var.gas_injection_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Produced water reinjection pump"})," is variable and its energy function is dependent on the field's water\nproduction rate (",(0,r.jsx)(n.code,{children:"WATER_PROD"}),") that is set in the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"produced_water_reinjection_condition"})," as ",(0,r.jsx)(n.code,{children:"SIM;WATER_PROD"}),".\nThe pump only runs when the variables ",(0,r.jsx)(n.a,{href:"#variables",children:"produced_water_reinjection_condition"})," evaluates to true as ",(0,r.jsx)(n.code,{children:"SIM;WATER_PROD > 1500"}),".\nThis is when the water production is above 1500 Sm3/day. Fluid density, suction pressure and discharge pressure\nis also defined:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.produced_water_reinjection_condition\n ENERGYFUNCTION: pump_chart\n RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day\n FLUID_DENSITY: 1010\n SUCTION_PRESSURE: 10 # [bara]\n DISCHARGE_PRESSURE: 200 # [bara]\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Sea water injection pump"})," has an energy function that is dependent on the seawater injection rate.\nThis rate is not modeled explicitly in the reservoir input source, but it may be computed\nfrom the injection (",(0,r.jsx)(n.code,{children:"WATER_INJ"}),") and production (",(0,r.jsx)(n.code,{children:"WATER_PROD"}),") rate by the following rules:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In general, the seawater injection rate (",(0,r.jsx)(n.code,{children:"SEAWATER_INJ"}),"), is the difference between injected and\nproduced water: ",(0,r.jsx)(n.code,{children:"SEAWATER_INJ = WATER_INJ - WATER_PROD"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["When the produced water rate is below 1500 SM3/day, this goes directly to sea, such that\n",(0,r.jsx)(n.code,{children:"SEAWATER_INJ = WATER_INJ"})," when ",(0,r.jsx)(n.code,{children:"WATER_PROD < 1500"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["When the produced water rate is between 17000 and 18500 SM3/day, everything above 17000 SM3/day\ngoes directly to the sea, thus ",(0,r.jsx)(n.code,{children:"SEAWATER_INJ = WATER_INJ - 17000"})," when ",(0,r.jsx)(n.code,{children:"17000 < WATER_PROD < 18500"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This is specified as the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"sea_water_injection_rate_m3_per_day"})," above and is defined as:"]}),"\n",(0,r.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: pump_sampled\n VARIABLES:\n - NAME: RATE\n EXPRESSION: $var.sea_water_injection_rate_m3_per_day\n"})}),"\n",(0,r.jsxs)(n.p,{children:["The flare is changing on the 1st of January 2005. Therefore, we need to use a different constant\nfuel consumption value before and after this date. This is done using the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"flare_fuel_rate_sm3_day"}),"\nabove."]}),"\n",(0,r.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_fuel_rate_sm3_day\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Gasexport is a variable fuel consumer whose energy function depends on the field gas sales rate (",(0,r.jsx)(n.code,{children:"GAS_PROD"}),") defined\nin the variable ",(0,r.jsx)(n.a,{href:"#variables",children:"gas_export_rate_sm3_per_day"})," as ",(0,r.jsx)(n.code,{children:"SIM;GAS_PROD"}),". Even though it is not used in the eCalc model, suction and discharge pressure needs to be specified in order for the model to run."]}),"\n",(0,r.jsx)(n.p,{children:"The model is specified:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:" - NAME: Gas export compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: GAS-DRIVEN-COMPRESSOR\n ENERGYFUNCTION: compressor_with_turbine_sampled\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n"})}),"\n",(0,r.jsx)(n.h2,{id:"full-ecalc-yaml-model",children:"Full eCalc YAML model"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",metastring:'title="model.yaml"',children:"TIME_SERIES:\n - NAME: SIM\n FILE: production_data.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n - NAME: genset\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: compressor_sampled\n FILE: compressor_sampled.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: compressor_with_turbine_sampled\n FILE: compressor_sampled_with_turbine.csv\n TYPE: COMPRESSOR_TABULAR\n - NAME: pump_sampled\n FILE: pump_sampled.csv\n TYPE: TABULAR\n - NAME: pump_chart\n FILE: pump_chart.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n\nFUEL_TYPES:\n - NAME: fuel_gas\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.19 # CO2/Sm3 fuel gas burned\n\nVARIABLES:\n hydrocarbon_export_sm3_per_day:\n VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent\n sea_water_injection_rate_m3_per_day:\n VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)\n gas_export_rate_sm3_per_day:\n VALUE: SIM;GAS_PROD\n gas_injection_rate_sm3_per_day:\n VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT\n produced_water_reinjection_condition:\n VALUE: SIM;WATER_PROD > 1500\n produced_water_reinjection_total_system_rate_m3_per_day:\n VALUE: SIM;WATER_PROD\n flare_fuel_rate_sm3_day:\n 1995-10-01:\n VALUE: 10000\n 2005-01-01:\n VALUE: 7000\n\nINSTALLATIONS:\n - NAME: Installation A\n HCEXPORT: $var.hydrocarbon_export_sm3_per_day\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: Generator set A\n ELECTRICITY2FUEL: genset\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: Base production load\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 11.8 # MW\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_sampled\n RATE: $var.gas_injection_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n - NAME: Produced water reinjection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: $var.produced_water_reinjection_condition\n ENERGYFUNCTION: pump_chart\n RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day\n FLUID_DENSITY: 1010\n SUCTION_PRESSURE: 10 # bara\n DISCHARGE_PRESSURE: 200 # bara\n - NAME: Sea water injection pump\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: TABULATED\n ENERGYFUNCTION: pump_sampled\n VARIABLES:\n - NAME: RATE\n EXPRESSION: $var.sea_water_injection_rate_m3_per_day\n FUELCONSUMERS:\n - NAME: Flare\n CATEGORY: FLARE\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: $var.flare_fuel_rate_sm3_day\n - NAME: Gas export compressor\n CATEGORY: GAS-DRIVEN-COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: compressor_with_turbine_sampled\n RATE: $var.gas_export_rate_sm3_per_day\n SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc\n DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc\n"})}),"\n",(0,r.jsx)(n.h2,{id:"input-files",children:"Input files"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="compressor_sampled.csv"',children:"RATE,POWER\n#[Sm3/day],[MW]\n0,0\n1,4.1\n100000000,4.1\n200000000,4.1\n210000000,4.1\n220000000,4.4\n230000000,4.8\n240000000,5.1\n250000000,5.4\n260000000,5.8\n270000000,6.1\n280000000,6.4\n290000000,6.8\n300000000,7.1\n500000000,14.2\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="compressor_sampled_with_turbine.csv"',children:"RATE,FUEL\n#[Sm3/day],[Sm3/day]\n0,0\n0.1,50000\n3000000,50000\n3500000,130000\n7000000,170000\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="genset.csv"',children:"POWER,FUEL\n#[MW],[Sm3/day]\n0, 0\n0.1, 65000\n10.0, 75000\n20.0, 126000\n40.0, 250000\n100.0, 750000\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="pump_chart.csv"',children:"SPEED,RATE,HEAD,EFFICIENCY\n3250,250,2640,59\n3250,360,2490,68\n3250,500,2342,77\n3250,600,2210,80\n3250,667,2068,78\n3250,735,1870,74\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="pump_sampled.csv"',children:"RATE,POWER\n#[Sm3/day],[MW]\n0,0\n1,3\n8500,4\n9000,4\n17000,6\n17500,9\n36000,13\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-text",metastring:'title="production_data.csv"',children:"Dates, OIL_PROD, GAS_PROD, WATER_PROD, WATER_INJ, GAS_INJ, GAS_LIFT\n#, Sm3/d, Sm3/d, m3/d, m3/d, Sm3/d, Sm3/d\n2020-01-01 00:00:00, 9000, 3500000, 18000, 34000, 2200000, 130000\n2021-01-01 00:00:00, 8000, 3600000, 19000, 33000, 2200000, 170000\n2022-01-01 00:00:00, 7000, 3700000, 15000, 30000, 2200000, 210000\n2023-01-01 00:00:00, 6000, 3800000, 16000, 33000, 2300000, 240000\n2024-01-01 00:00:00, 6000, 3900000, 14000, 35000, 2300000, 280000\n2024-12-01 00:00:00, 6000, 4000000, 15000, 36000, 2400000, 310000\n2026-01-01 00:00:00, 7000, 4100000, 18000, 36000, 2400000, 350000\n2027-01-01 00:00:00, 6000, 4500000, 15000, 38000, 2400000, 390000\n2028-01-01 00:00:00, 6000, 3500000, 12000, 33000, 2400000, 430000\n2029-01-01 00:00:00, 5000, 2500000, 14000, 36000, 2400000, 460000\n2030-01-01 00:00:00, 6000, 2000000, 16000, 35000, 2400000, 500000\n2031-01-01 00:00:00, 4000, 3000000, 14000, 33000, 2400000, 530000\n"})})]})}function E(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>l,a:()=>t});var r=s(67294);const a={},i=r.createContext(a);function t(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7d3b81bb.d3992b48.js b/assets/js/7d3b81bb.d3992b48.js new file mode 100644 index 0000000000..bdb921d535 --- /dev/null +++ b/assets/js/7d3b81bb.d3992b48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8230],{8886:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var r=s(85893),i=s(11151);const t={slug:"v7-4-release",title:"v7.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:7},o="eCalc v7.4",a={id:"changelog/v7-4",title:"v7.4",description:"Features",source:"@site/docs/changelog/v7-4.md",sourceDirName:"changelog",slug:"/changelog/v7-4-release",permalink:"/ecalc/docs/changelog/v7-4-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-4.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:7,frontMatter:{slug:"v7-4-release",title:"v7.4",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:7},sidebar:"changelog",previous:{title:"v7.3",permalink:"/ecalc/docs/changelog/v7-3-release"},next:{title:"v7.5",permalink:"/ecalc/docs/changelog/v7-5-release"}},l={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"ecalc-v74",children:"eCalc v7.4"}),"\n",(0,r.jsx)(n.h2,{id:"features",children:(0,r.jsx)(n.em,{children:"Features"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Added is_valid and is_extrapolation flags in JSON-output."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Added is_valid flags to all energy usage model and consumer model results."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add additional result data when compressors are running outside of capacity"}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add Direct Emitters to JSON-output."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add power capacity margin for generator set results."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add design head, rate and efficiency for generic compressor charts from design point."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Add UNITS to PUMP_CHART_SINGLE_SPEED and PUMP_CHART_VARIABLE_SPEED"}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Added FixedSpeedPressureControl to VariableSpeedCompressorTrainCommonShaft and VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures, enabling eCalc to possibly find a solution either along the minimum speed curve or through choking if the discharge pressure at minimum speed it too high. Default set to DOWNSTREAM_CHOKING."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"BREAKING CHANGE!"}),": When specifying a stage in a VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPRessures, the STREAM yaml keyword has been changed from a string to a list, to allow for multiple streams entering or leaving the compressor train at the same stage."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"BREAKING CHANGE!"}),": A CONSUMER with a CONSUMER_SYSTEM. Mixing between SYSTEM and non-system is no longer supported."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"BREAKING CHANGE!"}),": User MUST specify FUEL or POWER as one of the headers in TABULAR format. This was documented as mandatory, but not validated properly, hence eCalc would be allowed to run assuming POWER (incorrectly)."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fixes",children:(0,r.jsx)(n.em,{children:"Fixes"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Having several ingoing/outgoing streams at the same compressor train stage should now actually work."}),"\n",(0,r.jsx)(n.li,{children:"Extrapolation flag in JSON/CSV-output now correctly indicates if data has been extrapolated. is_valid now indicates if datapoint is valid when extrapolation is turned off."}),"\n",(0,r.jsx)(n.li,{children:"Speed-column no longer required for single speed compressor chart read from file"}),"\n",(0,r.jsx)(n.li,{children:"Support time-slots for CONSUMER with ENERGY_USAGE_MODEL TYPE: CONSUMER_SYSTEM"}),"\n",(0,r.jsx)(n.li,{children:"Re-add support for FUEL timeslots"}),"\n",(0,r.jsx)(n.li,{children:'Failing compressor train when target pressure is too low and pressure control is used. Now correctly runs with valid result and chart area flag "below minimum flow rate".'}),"\n",(0,r.jsx)(n.li,{children:"Use of TABULATED energy_usage_model was not supported in new json result format causing error, will now work."}),"\n",(0,r.jsx)(n.li,{children:"Incorrect default energy_usage_type POWER was always set for TABULATED energy_usage_model. Now it will be set based on FUEL or POWER column specified in facility input. eCalc will fail if neither FUEL nor POWER is specified in the facility inputs file. Patched in v7.4.1"}),"\n",(0,r.jsx)(n.li,{children:"Correct LTP gasTurbineCompressorConsumption calculation when a consumer is not initialized at first timestep of global time vector. Patched in v7.4.2"}),"\n",(0,r.jsx)(n.li,{children:"Choke discharge pressure when using DOWNSTREAM_PRESSURE_CONTROL for variable speed compressor train. Patched in v7.4.2"}),"\n",(0,r.jsx)(n.li,{children:"eCalc must support when using more than one energy usage model for calculating FuelConsumerPowerConsumption for LTP. Previously this resulted in missing calculations. Patched in v7.4.3."}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var r=s(67294);const i={},t=r.createContext(i);function o(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7db788f5.2315ec42.js b/assets/js/7db788f5.2315ec42.js new file mode 100644 index 0000000000..90569947cf --- /dev/null +++ b/assets/js/7db788f5.2315ec42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3074],{67422:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var s=i(85893),t=i(11151);const r={title:"Installations",sidebar_position:7,description:"Guide on how to use installations"},o=void 0,a={id:"about/modelling/setup/installations/index",title:"Installations",description:"Guide on how to use installations",source:"@site/docs/about/modelling/setup/installations/index.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/",permalink:"/ecalc/docs/about/modelling/setup/installations/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/index.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Installations",sidebar_position:7,description:"Guide on how to use installations"},sidebar:"about",previous:{title:"Variables",permalink:"/ecalc/docs/about/modelling/setup/variables"},next:{title:"Generator sets",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations"}},l={},d=[{value:"Referring to time series",id:"referring-to-time-series",level:3},{value:"Time intervals for variables/expressions and models",id:"time-intervals-for-variablesexpressions-and-models",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"General structure",id:"general-structure",level:3},{value:"Referring to time series",id:"referring-to-time-series-1",level:3},{value:"Time intervals",id:"time-intervals",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," keyword is ",(0,s.jsx)(n.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,s.jsxs)(n.p,{children:["In ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Essentially installations on which fuel is burned to generate energy for the consumers."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The structure of the keywords under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"\nis linked to the structure in the general consumer overview for an installation."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," is optional, and generally reserved for use with LTP."]}),"\n",(0,s.jsx)(n.h3,{id:"referring-to-time-series",children:"Referring to time series"}),"\n",(0,s.jsxs)(n.p,{children:["In the installations set up, one may refer to variables from ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),"\nin many places by using ",(0,s.jsx)(n.code,{children:"expressions"})," to build up custom, or changing, configurations."]}),"\n",(0,s.jsx)(n.p,{children:"Referring to variables is done on the format:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"<KEY>;<VARIABLE_NAME>\n"})}),"\n",(0,s.jsxs)(n.p,{children:["where ",(0,s.jsx)(n.code,{children:"<KEY>"})," must be defined in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME_SERIES"}),", defining the time series input source\n(e.g., CSV file), and ",(0,s.jsx)(n.code,{children:"<VARIABLE_NAME>"})," is the name of the variable.\nSee ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME SERIES"})," for more examples"]}),"\n",(0,s.jsx)(n.h3,{id:"time-intervals-for-variablesexpressions-and-models",children:"Time intervals for variables/expressions and models"}),"\n",(0,s.jsxs)(n.p,{children:["For various reasons, the data in the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," section may vary in time.\nThe consumers may need to be modeled differently due to rebuilds or degeneration. It could be that the user wants to\nmake a simple model for some periods and a more detailed model for others (e.g., a rate only model early time periods and a pressure\ndependent model in the field's late life)."]}),"\n",(0,s.jsxs)(n.p,{children:["For the fields that support multiple time intervals, the syntax is generally to insert a\ndate on the format ",(0,s.jsx)(n.code,{children:"YYYY-MM-DD"})," followed by the expression/model for the time interval between\nthis date and the next entered date. See ",(0,s.jsx)(n.code,{children:"Time intervals"})," for an example."]}),"\n",(0,s.jsx)(n.admonition,{title:"Note",type:"note",children:(0,s.jsx)(n.p,{children:"When time dependency is used, the values before the first time default to 0 (zero)"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," is zero before the first time given."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," will have 0 fuel usage before the first time defined, despite a non-zero power load."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"}),": The fuel rate will be 0 before the first entered date."]}),"\n",(0,s.jsx)(n.li,{children:"Consumer energy consumption will be 0 before the first defined time."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: <name of installation 1>\n GENERATORSETS: <generator set specifications for installation 1>\n FUELCONSUMERS: <fuel consumer specifications for installation 1>\n FUEL: <fuel specification for installation 1>\n HCEXPORT: <hydrocarbon export specification for installation 1>\n REGULARITY: <regularity specification for installation 1>\n VENTING_EMITTERS: <direct emissions specification for installation 1>\n CATEGORY: <category for installation 1>\n - NAME: <name of installation 2>\n GENERATORSETS: <generator set specifications for installation 2>\n FUELCONSUMERS: <fuel consumer specifications for installation 2>\n FUEL: <fuel specification for installation 2>\n HCEXPORT: <hydrocarbon export specification for installation 2>\n REGULARITY: <regularity specification for installation 2>\n VENTING_EMITTERS: <direct emissions specification for installation 2>\n CATEGORY: <category for installation 2>\n - ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.h3,{id:"general-structure",children:"General structure"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS\n - NAME: Platform_A\n CATEGORY: FIXED\n <The data for installation 1 to be put here>\n - NAME: Platform_B\n CATEGORY: MOBILE\n <The data for installation 2 to be put here>\n"})}),"\n",(0,s.jsx)(n.h3,{id:"referring-to-time-series-1",children:"Referring to time series"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SIM;OIL_PROD\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"SIM"})," is the key defined in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The user can define expressions of variables,\nsee ",(0,s.jsx)(n.code,{children:"expressions"})," for details. The following is an example of using expressions:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"SIM1;WATER_PROD:FIELD_A {+} SIM2;WATER_PROD:FIELD_B\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"SIM1"})," and ",(0,s.jsx)(n.code,{children:"SIM2"})," are here different reservoir sources with potential different time steps.\nThis is not a problem and handled by eCalc automatically."]}),"\n",(0,s.jsx)(n.h3,{id:"time-intervals",children:"Time intervals"}),"\n",(0,s.jsxs)(n.p,{children:["This example uses the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/HCEXPORT",children:"HCEXPORT"})," keyword."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Example: same expression for the entire time frame"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT: SIM;OIL_PROD\n"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Example: expression varies through time"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"HCEXPORT:\n 2001-01-01: SIM1;OIL_PROD\n 2005-01-01: SIM2:OIL_PROD {+} SIM2;GAS_SALES\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>a,a:()=>o});var s=i(67294);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e6991bb.55d8ba6f.js b/assets/js/7e6991bb.55d8ba6f.js new file mode 100644 index 0000000000..1ae5228262 --- /dev/null +++ b/assets/js/7e6991bb.55d8ba6f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2040],{8148:(e,s,d)=>{d.r(s),d.d(s,{assets:()=>c,contentTitle:()=>t,default:()=>a,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var r=d(85893),n=d(11151);const i={title:"Sampled compressor model",sidebar_position:3,description:"Sampled compressor model"},t=void 0,l={id:"about/modelling/setup/facility_inputs/sampled_compressor_model",title:"Sampled compressor model",description:"Sampled compressor model",source:"@site/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/sampled_compressor_model",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Sampled compressor model",sidebar_position:3,description:"Sampled compressor model"},sidebar:"about",previous:{title:"Pump chart",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts"},next:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular"}},c={},h=[{value:"Format",id:"format",level:2},{value:"Header requirements for the sampled compressor csv file",id:"header-requirements-for-the-sampled-compressor-csv-file",level:2},{value:"Units",id:"units",level:2},{value:"Example tables",id:"example-tables",level:2},{value:"1D example",id:"1d-example",level:3},{value:"3D example",id:"3d-example",level:3}];function o(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(s.p,{children:["The compressor model is set up in an external tool, and this model is sampled by\nrunning a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a ",(0,r.jsx)(s.code,{children:".csv"})," file and\ninputted into eCalc\u2122. Each line in the ",(0,r.jsx)(s.code,{children:".csv"})," defines a point (rate, suction pressure, discharge pressure) and the total energy usage."]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["For ",(0,r.jsx)(s.strong,{children:"electrically driven"})," compressor trains. The total energy usage should be given in megawatts (MW)."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["For ",(0,r.jsx)(s.strong,{children:"turbine driven"})," compressor trains. It is recommended to give the total energy usage in megawatts (MW) and couple the compressor model to a turbine model. However, it is possible (for backward compatibility) to give the total energy usage as fuel usage in standard cubic meters per day (Sm",(0,r.jsx)("sup",{children:"3"}),"/day) and use the model directly. In this case, you can also provide a POWER (MW) column to calculate power for the shaft based on fuel usage."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"The latter (turbine driven compressor train) will at some point become deprecated as it is replaced by COMPRESSOR_WITH_TURBINE mentioned above.*"}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["Inside the convex hull defined by the input variables, there is a\n",(0,r.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Barycentric_coordinate_system#Interpolation_on_a_triangular_unstructured_grid",children:(0,r.jsx)(s.code,{children:"barycentric interpolation"})}),"\nbased on a ",(0,r.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Delaunay_triangulation",children:(0,r.jsx)(s.code,{children:"Delaunay triangulation"})}),"."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Outside the defined area, there may be extrapolations where this is reasonable, i.e.,"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:"for rates lower than the defined rates, the table is extrapolated up to minimum\nflow (to mimic ASV (anti-surge valve)/recirculation valve)"}),"\n",(0,r.jsx)(s.li,{children:"the suction pressure is extrapolated down to the defined area"}),"\n",(0,r.jsx)(s.li,{children:"the discharge pressure is extrapolated up to defined area to mimic choking when the required\nhead is lower than the compressor operational area."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsxs)(s.p,{children:["The sampled compressor model is defined under the main keyword ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:(0,r.jsx)(s.code,{children:"FACILITY_INPUTS"})})," in the format"]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:" NAME: <model name>\n FILE: <sampled_data>.csv\n TYPE: COMPRESSOR_TABULAR\n"})}),"\n",(0,r.jsx)(s.h2,{id:"header-requirements-for-the-sampled-compressor-csv-file",children:"Header requirements for the sampled compressor csv file"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"POWER"})," (and/or ",(0,r.jsx)(s.code,{children:"FUEL"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:["A minimum of one (but more are allowed) of the following:","\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"RATE"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"SUCTION_PRESSURE"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURE"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["In cases where the model is directly used as a turbine/fuel driven compressor without coupling it to an eCalc turbine\nmodel, ",(0,r.jsx)(s.code,{children:"POWER"})," may be replaced by ",(0,r.jsx)(s.code,{children:"FUEL"}),"."]}),"\n",(0,r.jsx)(s.admonition,{title:"Shaft power reporting",type:"info",children:(0,r.jsxs)(s.p,{children:["In the case ",(0,r.jsx)(s.code,{children:"FUEL"})," is provided, it is also possible to specify ",(0,r.jsx)(s.code,{children:"POWER"})," in the csv-file in order to calculate shaft power usage for fuel driven compressors"]})}),"\n",(0,r.jsxs)(s.p,{children:["If only ",(0,r.jsx)(s.code,{children:"POWER"})," is provided, we assume that the compressor is electrical-driven\nIf ",(0,r.jsx)(s.code,{children:"FUEL"})," is provided, we assume that the compressor is turbine-driven (also when both ",(0,r.jsx)(s.code,{children:"FUEL"})," and ",(0,r.jsx)(s.code,{children:"POWER"})," is given)"]}),"\n",(0,r.jsx)(s.h2,{id:"units",children:"Units"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Quantity"}),(0,r.jsx)(s.th,{children:"Units"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"POWER"})}),(0,r.jsx)(s.td,{children:"MW"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"RATE"})}),(0,r.jsxs)(s.td,{children:["Sm",(0,r.jsx)("sup",{children:"3"}),"/day"]})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"SUCTION_PRESSURE"})}),(0,r.jsx)(s.td,{children:"bar"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURE"})}),(0,r.jsx)(s.td,{children:"bar"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"FUEL"})}),(0,r.jsxs)(s.td,{children:["Sm",(0,r.jsx)("sup",{children:"3"}),"/day"]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"example-tables",children:"Example tables"}),"\n",(0,r.jsx)(s.h3,{id:"1d-example",children:"1D example"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"RATE"}),(0,r.jsx)(s.th,{children:"POWER"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"0"}),(0,r.jsx)(s.td,{children:"0"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"100000"}),(0,r.jsx)(s.td,{children:"10"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1000000"}),(0,r.jsx)(s.td,{children:"10"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"2600000"}),(0,r.jsx)(s.td,{children:"15"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"4400000"}),(0,r.jsx)(s.td,{children:"20"})]})]})]}),"\n",(0,r.jsx)(s.h3,{id:"3d-example",children:"3D example"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"RATE"}),(0,r.jsx)(s.th,{children:"SUCTION_PRESSURE"}),(0,r.jsx)(s.th,{children:"DISCHARGE_PRESSURE"}),(0,r.jsx)(s.th,{children:"POWER"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"12.72"}),(0,r.jsx)(s.td,{children:"0.3664"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"10"}),(0,r.jsx)(s.td,{children:"26.21"}),(0,r.jsx)(s.td,{children:"2.293"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"31.36"}),(0,r.jsx)(s.td,{children:"0.2739"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"70.77"}),(0,r.jsx)(s.td,{children:"6.28"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"34"}),(0,r.jsx)(s.td,{children:"41.21"}),(0,r.jsx)(s.td,{children:"0.368"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"34"}),(0,r.jsx)(s.td,{children:"94.24"}),(0,r.jsx)(s.td,{children:"8.435"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"94.12"}),(0,r.jsx)(s.td,{children:"0.7401"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"231.6"}),(0,r.jsx)(s.td,{children:"22.46"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"36.93"}),(0,r.jsx)(s.td,{children:"4.197"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"26"}),(0,r.jsx)(s.td,{children:"57.43"}),(0,r.jsx)(s.td,{children:"7.32"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"38"}),(0,r.jsx)(s.td,{children:"46.96"}),(0,r.jsx)(s.td,{children:"2.156"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"38"}),(0,r.jsx)(s.td,{children:"106.2"}),(0,r.jsx)(s.td,{children:"9.557"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"54"}),(0,r.jsx)(s.td,{children:"67.26"}),(0,r.jsx)(s.td,{children:"1.95"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"54"}),(0,r.jsx)(s.td,{children:"155.6"}),(0,r.jsx)(s.td,{children:"14.35"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"94.17"}),(0,r.jsx)(s.td,{children:"1.399"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"6.00E+06"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"231.6"}),(0,r.jsx)(s.td,{children:"22.46"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"42"}),(0,r.jsx)(s.td,{children:"66.92"}),(0,r.jsx)(s.td,{children:"9.712"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"42"}),(0,r.jsx)(s.td,{children:"81.63"}),(0,r.jsx)(s.td,{children:"11.89"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"62"}),(0,r.jsx)(s.td,{children:"75.64"}),(0,r.jsx)(s.td,{children:"3.678"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"62"}),(0,r.jsx)(s.td,{children:"180.8"}),(0,r.jsx)(s.td,{children:"16.94"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"97.79"}),(0,r.jsx)(s.td,{children:"3.452"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"1.10E+07"}),(0,r.jsx)(s.td,{children:"78"}),(0,r.jsx)(s.td,{children:"231.6"}),(0,r.jsx)(s.td,{children:"22.46"})]})]})]})]})}function a(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},11151:(e,s,d)=>{d.d(s,{Z:()=>l,a:()=>t});var r=d(67294);const n={},i=r.createContext(n);function t(e){const s=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),r.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/817.75222051.js b/assets/js/817.75222051.js new file mode 100644 index 0000000000..34470fca35 --- /dev/null +++ b/assets/js/817.75222051.js @@ -0,0 +1,2600 @@ +"use strict"; +exports.id = 817; +exports.ids = [817]; +exports.modules = { + +/***/ 48817: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(66893); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17967); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 24], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 63], $V6 = [1, 64], $V7 = [1, 65], $V8 = [1, 66], $V9 = [1, 67], $Va = [1, 68], $Vb = [1, 69], $Vc = [1, 29], $Vd = [1, 30], $Ve = [1, 31], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 34], $Vi = [1, 35], $Vj = [1, 36], $Vk = [1, 37], $Vl = [1, 38], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 43], $Vr = [1, 44], $Vs = [1, 45], $Vt = [1, 46], $Vu = [1, 47], $Vv = [1, 48], $Vw = [1, 50], $Vx = [1, 51], $Vy = [1, 52], $Vz = [1, 53], $VA = [1, 54], $VB = [1, 55], $VC = [1, 56], $VD = [1, 57], $VE = [1, 58], $VF = [1, 59], $VG = [1, 60], $VH = [14, 42], $VI = [14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VJ = [12, 14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VK = [1, 82], $VL = [1, 83], $VM = [1, 84], $VN = [1, 85], $VO = [12, 14, 42], $VP = [12, 14, 33, 42], $VQ = [12, 14, 33, 42, 76, 77, 79, 80], $VR = [12, 33], $VS = [34, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "direction": 5, "direction_tb": 6, "direction_bt": 7, "direction_rl": 8, "direction_lr": 9, "graphConfig": 10, "C4_CONTEXT": 11, "NEWLINE": 12, "statements": 13, "EOF": 14, "C4_CONTAINER": 15, "C4_COMPONENT": 16, "C4_DYNAMIC": 17, "C4_DEPLOYMENT": 18, "otherStatements": 19, "diagramStatements": 20, "otherStatement": 21, "title": 22, "accDescription": 23, "acc_title": 24, "acc_title_value": 25, "acc_descr": 26, "acc_descr_value": 27, "acc_descr_multiline_value": 28, "boundaryStatement": 29, "boundaryStartStatement": 30, "boundaryStopStatement": 31, "boundaryStart": 32, "LBRACE": 33, "ENTERPRISE_BOUNDARY": 34, "attributes": 35, "SYSTEM_BOUNDARY": 36, "BOUNDARY": 37, "CONTAINER_BOUNDARY": 38, "NODE": 39, "NODE_L": 40, "NODE_R": 41, "RBRACE": 42, "diagramStatement": 43, "PERSON": 44, "PERSON_EXT": 45, "SYSTEM": 46, "SYSTEM_DB": 47, "SYSTEM_QUEUE": 48, "SYSTEM_EXT": 49, "SYSTEM_EXT_DB": 50, "SYSTEM_EXT_QUEUE": 51, "CONTAINER": 52, "CONTAINER_DB": 53, "CONTAINER_QUEUE": 54, "CONTAINER_EXT": 55, "CONTAINER_EXT_DB": 56, "CONTAINER_EXT_QUEUE": 57, "COMPONENT": 58, "COMPONENT_DB": 59, "COMPONENT_QUEUE": 60, "COMPONENT_EXT": 61, "COMPONENT_EXT_DB": 62, "COMPONENT_EXT_QUEUE": 63, "REL": 64, "BIREL": 65, "REL_U": 66, "REL_D": 67, "REL_L": 68, "REL_R": 69, "REL_B": 70, "REL_INDEX": 71, "UPDATE_EL_STYLE": 72, "UPDATE_REL_STYLE": 73, "UPDATE_LAYOUT_CONFIG": 74, "attribute": 75, "STR": 76, "STR_KEY": 77, "STR_VALUE": 78, "ATTRIBUTE": 79, "ATTRIBUTE_EMPTY": 80, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 6: "direction_tb", 7: "direction_bt", 8: "direction_rl", 9: "direction_lr", 11: "C4_CONTEXT", 12: "NEWLINE", 14: "EOF", 15: "C4_CONTAINER", 16: "C4_COMPONENT", 17: "C4_DYNAMIC", 18: "C4_DEPLOYMENT", 22: "title", 23: "accDescription", 24: "acc_title", 25: "acc_title_value", 26: "acc_descr", 27: "acc_descr_value", 28: "acc_descr_multiline_value", 33: "LBRACE", 34: "ENTERPRISE_BOUNDARY", 36: "SYSTEM_BOUNDARY", 37: "BOUNDARY", 38: "CONTAINER_BOUNDARY", 39: "NODE", 40: "NODE_L", 41: "NODE_R", 42: "RBRACE", 44: "PERSON", 45: "PERSON_EXT", 46: "SYSTEM", 47: "SYSTEM_DB", 48: "SYSTEM_QUEUE", 49: "SYSTEM_EXT", 50: "SYSTEM_EXT_DB", 51: "SYSTEM_EXT_QUEUE", 52: "CONTAINER", 53: "CONTAINER_DB", 54: "CONTAINER_QUEUE", 55: "CONTAINER_EXT", 56: "CONTAINER_EXT_DB", 57: "CONTAINER_EXT_QUEUE", 58: "COMPONENT", 59: "COMPONENT_DB", 60: "COMPONENT_QUEUE", 61: "COMPONENT_EXT", 62: "COMPONENT_EXT_DB", 63: "COMPONENT_EXT_QUEUE", 64: "REL", 65: "BIREL", 66: "REL_U", 67: "REL_D", 68: "REL_L", 69: "REL_R", 70: "REL_B", 71: "REL_INDEX", 72: "UPDATE_EL_STYLE", 73: "UPDATE_REL_STYLE", 74: "UPDATE_LAYOUT_CONFIG", 76: "STR", 77: "STR_KEY", 78: "STR_VALUE", 79: "ATTRIBUTE", 80: "ATTRIBUTE_EMPTY" }, + productions_: [0, [3, 1], [3, 1], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [13, 1], [13, 1], [13, 2], [19, 1], [19, 2], [19, 3], [21, 1], [21, 1], [21, 2], [21, 2], [21, 1], [29, 3], [30, 3], [30, 3], [30, 4], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [31, 1], [20, 1], [20, 2], [20, 3], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 1], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [35, 1], [35, 2], [75, 1], [75, 2], [75, 1], [75, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 3: + yy.setDirection("TB"); + break; + case 4: + yy.setDirection("BT"); + break; + case 5: + yy.setDirection("RL"); + break; + case 6: + yy.setDirection("LR"); + break; + case 8: + case 9: + case 10: + case 11: + case 12: + yy.setC4Type($$[$0 - 3]); + break; + case 19: + yy.setTitle($$[$0].substring(6)); + this.$ = $$[$0].substring(6); + break; + case 20: + yy.setAccDescription($$[$0].substring(15)); + this.$ = $$[$0].substring(15); + break; + case 21: + this.$ = $$[$0].trim(); + yy.setTitle(this.$); + break; + case 22: + case 23: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 28: + case 29: + $$[$0].splice(2, 0, "ENTERPRISE"); + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 30: + yy.addPersonOrSystemBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 31: + $$[$0].splice(2, 0, "CONTAINER"); + yy.addContainerBoundary(...$$[$0]); + this.$ = $$[$0]; + break; + case 32: + yy.addDeploymentNode("node", ...$$[$0]); + this.$ = $$[$0]; + break; + case 33: + yy.addDeploymentNode("nodeL", ...$$[$0]); + this.$ = $$[$0]; + break; + case 34: + yy.addDeploymentNode("nodeR", ...$$[$0]); + this.$ = $$[$0]; + break; + case 35: + yy.popBoundaryParseStack(); + break; + case 39: + yy.addPersonOrSystem("person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 40: + yy.addPersonOrSystem("external_person", ...$$[$0]); + this.$ = $$[$0]; + break; + case 41: + yy.addPersonOrSystem("system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 42: + yy.addPersonOrSystem("system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 43: + yy.addPersonOrSystem("system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 44: + yy.addPersonOrSystem("external_system", ...$$[$0]); + this.$ = $$[$0]; + break; + case 45: + yy.addPersonOrSystem("external_system_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 46: + yy.addPersonOrSystem("external_system_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 47: + yy.addContainer("container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 48: + yy.addContainer("container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 49: + yy.addContainer("container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 50: + yy.addContainer("external_container", ...$$[$0]); + this.$ = $$[$0]; + break; + case 51: + yy.addContainer("external_container_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 52: + yy.addContainer("external_container_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 53: + yy.addComponent("component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 54: + yy.addComponent("component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 55: + yy.addComponent("component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 56: + yy.addComponent("external_component", ...$$[$0]); + this.$ = $$[$0]; + break; + case 57: + yy.addComponent("external_component_db", ...$$[$0]); + this.$ = $$[$0]; + break; + case 58: + yy.addComponent("external_component_queue", ...$$[$0]); + this.$ = $$[$0]; + break; + case 60: + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 61: + yy.addRel("birel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 62: + yy.addRel("rel_u", ...$$[$0]); + this.$ = $$[$0]; + break; + case 63: + yy.addRel("rel_d", ...$$[$0]); + this.$ = $$[$0]; + break; + case 64: + yy.addRel("rel_l", ...$$[$0]); + this.$ = $$[$0]; + break; + case 65: + yy.addRel("rel_r", ...$$[$0]); + this.$ = $$[$0]; + break; + case 66: + yy.addRel("rel_b", ...$$[$0]); + this.$ = $$[$0]; + break; + case 67: + $$[$0].splice(0, 1); + yy.addRel("rel", ...$$[$0]); + this.$ = $$[$0]; + break; + case 68: + yy.updateElStyle("update_el_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 69: + yy.updateRelStyle("update_rel_style", ...$$[$0]); + this.$ = $$[$0]; + break; + case 70: + yy.updateLayoutConfig("update_layout_config", ...$$[$0]); + this.$ = $$[$0]; + break; + case 71: + this.$ = [$$[$0]]; + break; + case 72: + $$[$0].unshift($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 73: + case 75: + this.$ = $$[$0].trim(); + break; + case 74: + let kv = {}; + kv[$$[$0 - 1].trim()] = $$[$0].trim(); + this.$ = kv; + break; + case 76: + this.$ = ""; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 7: [1, 6], 8: [1, 7], 9: [1, 8], 10: 4, 11: [1, 9], 15: [1, 10], 16: [1, 11], 17: [1, 12], 18: [1, 13] }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 7] }, { 1: [2, 3] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 12: [1, 14] }, { 12: [1, 15] }, { 12: [1, 16] }, { 12: [1, 17] }, { 12: [1, 18] }, { 13: 19, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 70, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 71, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 72, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 73, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 14: [1, 74] }, o($VH, [2, 13], { 43: 23, 29: 49, 30: 61, 32: 62, 20: 75, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VH, [2, 14]), o($VI, [2, 16], { 12: [1, 76] }), o($VH, [2, 36], { 12: [1, 77] }), o($VJ, [2, 19]), o($VJ, [2, 20]), { 25: [1, 78] }, { 27: [1, 79] }, o($VJ, [2, 23]), { 35: 80, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 86, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 87, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 88, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 89, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 90, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 91, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 92, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 93, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 94, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 95, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 96, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 97, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 98, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 99, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 100, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 101, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 102, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 103, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 104, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, o($VO, [2, 59]), { 35: 105, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 106, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 107, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 108, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 109, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 110, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 111, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 112, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 113, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 114, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 115, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 20: 116, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 12: [1, 118], 33: [1, 117] }, { 35: 119, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 120, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 121, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 122, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 123, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 124, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 125, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 14: [1, 126] }, { 14: [1, 127] }, { 14: [1, 128] }, { 14: [1, 129] }, { 1: [2, 8] }, o($VH, [2, 15]), o($VI, [2, 17], { 21: 22, 19: 130, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4 }), o($VH, [2, 37], { 19: 20, 20: 21, 21: 22, 43: 23, 29: 49, 30: 61, 32: 62, 13: 131, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VJ, [2, 21]), o($VJ, [2, 22]), o($VO, [2, 39]), o($VP, [2, 71], { 75: 81, 35: 132, 76: $VK, 77: $VL, 79: $VM, 80: $VN }), o($VQ, [2, 73]), { 78: [1, 133] }, o($VQ, [2, 75]), o($VQ, [2, 76]), o($VO, [2, 40]), o($VO, [2, 41]), o($VO, [2, 42]), o($VO, [2, 43]), o($VO, [2, 44]), o($VO, [2, 45]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 51]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), o($VO, [2, 55]), o($VO, [2, 56]), o($VO, [2, 57]), o($VO, [2, 58]), o($VO, [2, 60]), o($VO, [2, 61]), o($VO, [2, 62]), o($VO, [2, 63]), o($VO, [2, 64]), o($VO, [2, 65]), o($VO, [2, 66]), o($VO, [2, 67]), o($VO, [2, 68]), o($VO, [2, 69]), o($VO, [2, 70]), { 31: 134, 42: [1, 135] }, { 12: [1, 136] }, { 33: [1, 137] }, o($VR, [2, 28]), o($VR, [2, 29]), o($VR, [2, 30]), o($VR, [2, 31]), o($VR, [2, 32]), o($VR, [2, 33]), o($VR, [2, 34]), { 1: [2, 9] }, { 1: [2, 10] }, { 1: [2, 11] }, { 1: [2, 12] }, o($VI, [2, 18]), o($VH, [2, 38]), o($VP, [2, 72]), o($VQ, [2, 74]), o($VO, [2, 24]), o($VO, [2, 35]), o($VS, [2, 25]), o($VS, [2, 26], { 12: [1, 138] }), o($VS, [2, 27])], + defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 7], 5: [2, 3], 6: [2, 4], 7: [2, 5], 8: [2, 6], 74: [2, 8], 126: [2, 9], 127: [2, 10], 128: [2, 11], 129: [2, 12] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c2 = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c2 + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 6; + case 1: + return 7; + case 2: + return 8; + case 3: + return 9; + case 4: + return 22; + case 5: + return 23; + case 6: + this.begin("acc_title"); + return 24; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 26; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + break; + case 14: + c; + break; + case 15: + return 12; + case 16: + break; + case 17: + return 11; + case 18: + return 15; + case 19: + return 16; + case 20: + return 17; + case 21: + return 18; + case 22: + this.begin("person_ext"); + return 45; + case 23: + this.begin("person"); + return 44; + case 24: + this.begin("system_ext_queue"); + return 51; + case 25: + this.begin("system_ext_db"); + return 50; + case 26: + this.begin("system_ext"); + return 49; + case 27: + this.begin("system_queue"); + return 48; + case 28: + this.begin("system_db"); + return 47; + case 29: + this.begin("system"); + return 46; + case 30: + this.begin("boundary"); + return 37; + case 31: + this.begin("enterprise_boundary"); + return 34; + case 32: + this.begin("system_boundary"); + return 36; + case 33: + this.begin("container_ext_queue"); + return 57; + case 34: + this.begin("container_ext_db"); + return 56; + case 35: + this.begin("container_ext"); + return 55; + case 36: + this.begin("container_queue"); + return 54; + case 37: + this.begin("container_db"); + return 53; + case 38: + this.begin("container"); + return 52; + case 39: + this.begin("container_boundary"); + return 38; + case 40: + this.begin("component_ext_queue"); + return 63; + case 41: + this.begin("component_ext_db"); + return 62; + case 42: + this.begin("component_ext"); + return 61; + case 43: + this.begin("component_queue"); + return 60; + case 44: + this.begin("component_db"); + return 59; + case 45: + this.begin("component"); + return 58; + case 46: + this.begin("node"); + return 39; + case 47: + this.begin("node"); + return 39; + case 48: + this.begin("node_l"); + return 40; + case 49: + this.begin("node_r"); + return 41; + case 50: + this.begin("rel"); + return 64; + case 51: + this.begin("birel"); + return 65; + case 52: + this.begin("rel_u"); + return 66; + case 53: + this.begin("rel_u"); + return 66; + case 54: + this.begin("rel_d"); + return 67; + case 55: + this.begin("rel_d"); + return 67; + case 56: + this.begin("rel_l"); + return 68; + case 57: + this.begin("rel_l"); + return 68; + case 58: + this.begin("rel_r"); + return 69; + case 59: + this.begin("rel_r"); + return 69; + case 60: + this.begin("rel_b"); + return 70; + case 61: + this.begin("rel_index"); + return 71; + case 62: + this.begin("update_el_style"); + return 72; + case 63: + this.begin("update_rel_style"); + return 73; + case 64: + this.begin("update_layout_config"); + return 74; + case 65: + return "EOF_IN_STRUCT"; + case 66: + this.begin("attribute"); + return "ATTRIBUTE_EMPTY"; + case 67: + this.begin("attribute"); + break; + case 68: + this.popState(); + this.popState(); + break; + case 69: + return 80; + case 70: + break; + case 71: + return 80; + case 72: + this.begin("string"); + break; + case 73: + this.popState(); + break; + case 74: + return "STR"; + case 75: + this.begin("string_kv"); + break; + case 76: + this.begin("string_kv_key"); + return "STR_KEY"; + case 77: + this.popState(); + this.begin("string_kv_value"); + break; + case 78: + return "STR_VALUE"; + case 79: + this.popState(); + this.popState(); + break; + case 80: + return "STR"; + case 81: + return "LBRACE"; + case 82: + return "RBRACE"; + case 83: + return "SPACE"; + case 84: + return "EOL"; + case 85: + return 14; + } + }, + rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:title\s[^#\n;]+)/, /^(?:accDescription\s[^#\n;]+)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:C4Context\b)/, /^(?:C4Container\b)/, /^(?:C4Component\b)/, /^(?:C4Dynamic\b)/, /^(?:C4Deployment\b)/, /^(?:Person_Ext\b)/, /^(?:Person\b)/, /^(?:SystemQueue_Ext\b)/, /^(?:SystemDb_Ext\b)/, /^(?:System_Ext\b)/, /^(?:SystemQueue\b)/, /^(?:SystemDb\b)/, /^(?:System\b)/, /^(?:Boundary\b)/, /^(?:Enterprise_Boundary\b)/, /^(?:System_Boundary\b)/, /^(?:ContainerQueue_Ext\b)/, /^(?:ContainerDb_Ext\b)/, /^(?:Container_Ext\b)/, /^(?:ContainerQueue\b)/, /^(?:ContainerDb\b)/, /^(?:Container\b)/, /^(?:Container_Boundary\b)/, /^(?:ComponentQueue_Ext\b)/, /^(?:ComponentDb_Ext\b)/, /^(?:Component_Ext\b)/, /^(?:ComponentQueue\b)/, /^(?:ComponentDb\b)/, /^(?:Component\b)/, /^(?:Deployment_Node\b)/, /^(?:Node\b)/, /^(?:Node_L\b)/, /^(?:Node_R\b)/, /^(?:Rel\b)/, /^(?:BiRel\b)/, /^(?:Rel_Up\b)/, /^(?:Rel_U\b)/, /^(?:Rel_Down\b)/, /^(?:Rel_D\b)/, /^(?:Rel_Left\b)/, /^(?:Rel_L\b)/, /^(?:Rel_Right\b)/, /^(?:Rel_R\b)/, /^(?:Rel_Back\b)/, /^(?:RelIndex\b)/, /^(?:UpdateElementStyle\b)/, /^(?:UpdateRelStyle\b)/, /^(?:UpdateLayoutConfig\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*["]["])/, /^(?:[ ]*["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[ ]*[\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:[^,]+)/, /^(?:\{)/, /^(?:\})/, /^(?:[\s]+)/, /^(?:[\n\r]+)/, /^(?:$)/], + conditions: { "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "string_kv_value": { "rules": [78, 79], "inclusive": false }, "string_kv_key": { "rules": [77], "inclusive": false }, "string_kv": { "rules": [76], "inclusive": false }, "string": { "rules": [73, 74], "inclusive": false }, "attribute": { "rules": [68, 69, 70, 71, 72, 75, 80], "inclusive": false }, "update_layout_config": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_rel_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "update_el_style": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_b": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_d": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_u": { "rules": [65, 66, 67, 68], "inclusive": false }, "rel_bi": { "rules": [], "inclusive": false }, "rel": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_r": { "rules": [65, 66, 67, 68], "inclusive": false }, "node_l": { "rules": [65, 66, 67, 68], "inclusive": false }, "node": { "rules": [65, 66, 67, 68], "inclusive": false }, "index": { "rules": [], "inclusive": false }, "rel_index": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext_queue": { "rules": [], "inclusive": false }, "component_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "component_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "component": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "container_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "container": { "rules": [65, 66, 67, 68], "inclusive": false }, "birel": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "enterprise_boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "boundary": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_queue": { "rules": [65, 66, 67, 68], "inclusive": false }, "system_db": { "rules": [65, 66, 67, 68], "inclusive": false }, "system": { "rules": [65, 66, 67, 68], "inclusive": false }, "person_ext": { "rules": [65, 66, 67, 68], "inclusive": false }, "person": { "rules": [65, 66, 67, 68], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 81, 82, 83, 84, 85], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let c4ShapeArray = []; +let boundaryParseStack = [""]; +let currentBoundaryParse = "global"; +let parentBoundaryParse = ""; +let boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } +]; +let rels = []; +let title = ""; +let wrapEnabled = false; +let c4ShapeInRow$1 = 4; +let c4BoundaryInRow$1 = 2; +var c4Type; +const getC4Type = function() { + return c4Type; +}; +const setC4Type = function(c4TypeParam) { + let sanitizedText = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(c4TypeParam, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + c4Type = sanitizedText; +}; +const addRel = function(type, from, to, label, techn, descr, sprite, tags, link) { + if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) { + return; + } + let rel = {}; + const old = rels.find((rel2) => rel2.from === from && rel2.to === to); + if (old) { + rel = old; + } else { + rels.push(rel); + } + rel.type = type; + rel.from = from; + rel.to = to; + rel.label = { text: label }; + if (techn === void 0 || techn === null) { + rel.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + rel[key] = { text: value }; + } else { + rel.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + rel.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + rel[key] = { text: value }; + } else { + rel.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + rel[key] = value; + } else { + rel.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + rel[key] = value; + } else { + rel.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + rel[key] = value; + } else { + rel.link = link; + } + rel.wrap = autoWrap(); +}; +const addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let personOrSystem = {}; + const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias); + if (old && alias === old.alias) { + personOrSystem = old; + } else { + personOrSystem.alias = alias; + c4ShapeArray.push(personOrSystem); + } + if (label === void 0 || label === null) { + personOrSystem.label = { text: "" }; + } else { + personOrSystem.label = { text: label }; + } + if (descr === void 0 || descr === null) { + personOrSystem.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + personOrSystem[key] = { text: value }; + } else { + personOrSystem.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + personOrSystem[key] = value; + } else { + personOrSystem.link = link; + } + personOrSystem.typeC4Shape = { text: typeC4Shape }; + personOrSystem.parentBoundary = currentBoundaryParse; + personOrSystem.wrap = autoWrap(); +}; +const addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let container = {}; + const old = c4ShapeArray.find((container2) => container2.alias === alias); + if (old && alias === old.alias) { + container = old; + } else { + container.alias = alias; + c4ShapeArray.push(container); + } + if (label === void 0 || label === null) { + container.label = { text: "" }; + } else { + container.label = { text: label }; + } + if (techn === void 0 || techn === null) { + container.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + container[key] = { text: value }; + } else { + container.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + container.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + container[key] = { text: value }; + } else { + container.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + container[key] = value; + } else { + container.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + container[key] = value; + } else { + container.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + container[key] = value; + } else { + container.link = link; + } + container.wrap = autoWrap(); + container.typeC4Shape = { text: typeC4Shape }; + container.parentBoundary = currentBoundaryParse; +}; +const addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let component = {}; + const old = c4ShapeArray.find((component2) => component2.alias === alias); + if (old && alias === old.alias) { + component = old; + } else { + component.alias = alias; + c4ShapeArray.push(component); + } + if (label === void 0 || label === null) { + component.label = { text: "" }; + } else { + component.label = { text: label }; + } + if (techn === void 0 || techn === null) { + component.techn = { text: "" }; + } else { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + component[key] = { text: value }; + } else { + component.techn = { text: techn }; + } + } + if (descr === void 0 || descr === null) { + component.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + component[key] = { text: value }; + } else { + component.descr = { text: descr }; + } + } + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + component[key] = value; + } else { + component.sprite = sprite; + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + component[key] = value; + } else { + component.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + component[key] = value; + } else { + component.link = link; + } + component.wrap = autoWrap(); + component.typeC4Shape = { text: typeC4Shape }; + component.parentBoundary = currentBoundaryParse; +}; +const addPersonOrSystemBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "system" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addContainerBoundary = function(alias, label, type, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "container" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const addDeploymentNode = function(nodeType, alias, label, type, descr, sprite, tags, link) { + if (alias === null || label === null) { + return; + } + let boundary = {}; + const old = boundarys.find((boundary2) => boundary2.alias === alias); + if (old && alias === old.alias) { + boundary = old; + } else { + boundary.alias = alias; + boundarys.push(boundary); + } + if (label === void 0 || label === null) { + boundary.label = { text: "" }; + } else { + boundary.label = { text: label }; + } + if (type === void 0 || type === null) { + boundary.type = { text: "node" }; + } else { + if (typeof type === "object") { + let [key, value] = Object.entries(type)[0]; + boundary[key] = { text: value }; + } else { + boundary.type = { text: type }; + } + } + if (descr === void 0 || descr === null) { + boundary.descr = { text: "" }; + } else { + if (typeof descr === "object") { + let [key, value] = Object.entries(descr)[0]; + boundary[key] = { text: value }; + } else { + boundary.descr = { text: descr }; + } + } + if (typeof tags === "object") { + let [key, value] = Object.entries(tags)[0]; + boundary[key] = value; + } else { + boundary.tags = tags; + } + if (typeof link === "object") { + let [key, value] = Object.entries(link)[0]; + boundary[key] = value; + } else { + boundary.link = link; + } + boundary.nodeType = nodeType; + boundary.parentBoundary = currentBoundaryParse; + boundary.wrap = autoWrap(); + parentBoundaryParse = currentBoundaryParse; + currentBoundaryParse = alias; + boundaryParseStack.push(parentBoundaryParse); +}; +const popBoundaryParseStack = function() { + currentBoundaryParse = parentBoundaryParse; + boundaryParseStack.pop(); + parentBoundaryParse = boundaryParseStack.pop(); + boundaryParseStack.push(parentBoundaryParse); +}; +const updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) { + let old = c4ShapeArray.find((element) => element.alias === elementName); + if (old === void 0) { + old = boundarys.find((element) => element.alias === elementName); + if (old === void 0) { + return; + } + } + if (bgColor !== void 0 && bgColor !== null) { + if (typeof bgColor === "object") { + let [key, value] = Object.entries(bgColor)[0]; + old[key] = value; + } else { + old.bgColor = bgColor; + } + } + if (fontColor !== void 0 && fontColor !== null) { + if (typeof fontColor === "object") { + let [key, value] = Object.entries(fontColor)[0]; + old[key] = value; + } else { + old.fontColor = fontColor; + } + } + if (borderColor !== void 0 && borderColor !== null) { + if (typeof borderColor === "object") { + let [key, value] = Object.entries(borderColor)[0]; + old[key] = value; + } else { + old.borderColor = borderColor; + } + } + if (shadowing !== void 0 && shadowing !== null) { + if (typeof shadowing === "object") { + let [key, value] = Object.entries(shadowing)[0]; + old[key] = value; + } else { + old.shadowing = shadowing; + } + } + if (shape !== void 0 && shape !== null) { + if (typeof shape === "object") { + let [key, value] = Object.entries(shape)[0]; + old[key] = value; + } else { + old.shape = shape; + } + } + if (sprite !== void 0 && sprite !== null) { + if (typeof sprite === "object") { + let [key, value] = Object.entries(sprite)[0]; + old[key] = value; + } else { + old.sprite = sprite; + } + } + if (techn !== void 0 && techn !== null) { + if (typeof techn === "object") { + let [key, value] = Object.entries(techn)[0]; + old[key] = value; + } else { + old.techn = techn; + } + } + if (legendText !== void 0 && legendText !== null) { + if (typeof legendText === "object") { + let [key, value] = Object.entries(legendText)[0]; + old[key] = value; + } else { + old.legendText = legendText; + } + } + if (legendSprite !== void 0 && legendSprite !== null) { + if (typeof legendSprite === "object") { + let [key, value] = Object.entries(legendSprite)[0]; + old[key] = value; + } else { + old.legendSprite = legendSprite; + } + } +}; +const updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) { + const old = rels.find((rel) => rel.from === from && rel.to === to); + if (old === void 0) { + return; + } + if (textColor !== void 0 && textColor !== null) { + if (typeof textColor === "object") { + let [key, value] = Object.entries(textColor)[0]; + old[key] = value; + } else { + old.textColor = textColor; + } + } + if (lineColor !== void 0 && lineColor !== null) { + if (typeof lineColor === "object") { + let [key, value] = Object.entries(lineColor)[0]; + old[key] = value; + } else { + old.lineColor = lineColor; + } + } + if (offsetX !== void 0 && offsetX !== null) { + if (typeof offsetX === "object") { + let [key, value] = Object.entries(offsetX)[0]; + old[key] = parseInt(value); + } else { + old.offsetX = parseInt(offsetX); + } + } + if (offsetY !== void 0 && offsetY !== null) { + if (typeof offsetY === "object") { + let [key, value] = Object.entries(offsetY)[0]; + old[key] = parseInt(value); + } else { + old.offsetY = parseInt(offsetY); + } + } +}; +const updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) { + let c4ShapeInRowValue = c4ShapeInRow$1; + let c4BoundaryInRowValue = c4BoundaryInRow$1; + if (typeof c4ShapeInRowParam === "object") { + const value = Object.values(c4ShapeInRowParam)[0]; + c4ShapeInRowValue = parseInt(value); + } else { + c4ShapeInRowValue = parseInt(c4ShapeInRowParam); + } + if (typeof c4BoundaryInRowParam === "object") { + const value = Object.values(c4BoundaryInRowParam)[0]; + c4BoundaryInRowValue = parseInt(value); + } else { + c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam); + } + if (c4ShapeInRowValue >= 1) { + c4ShapeInRow$1 = c4ShapeInRowValue; + } + if (c4BoundaryInRowValue >= 1) { + c4BoundaryInRow$1 = c4BoundaryInRowValue; + } +}; +const getC4ShapeInRow = function() { + return c4ShapeInRow$1; +}; +const getC4BoundaryInRow = function() { + return c4BoundaryInRow$1; +}; +const getCurrentBoundaryParse = function() { + return currentBoundaryParse; +}; +const getParentBoundaryParse = function() { + return parentBoundaryParse; +}; +const getC4ShapeArray = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return c4ShapeArray; + } else { + return c4ShapeArray.filter((personOrSystem) => { + return personOrSystem.parentBoundary === parentBoundary; + }); + } +}; +const getC4Shape = function(alias) { + return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias); +}; +const getC4ShapeKeys = function(parentBoundary) { + return Object.keys(getC4ShapeArray(parentBoundary)); +}; +const getBoundarys = function(parentBoundary) { + if (parentBoundary === void 0 || parentBoundary === null) { + return boundarys; + } else { + return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary); + } +}; +const getRels = function() { + return rels; +}; +const getTitle = function() { + return title; +}; +const setWrap = function(wrapSetting) { + wrapEnabled = wrapSetting; +}; +const autoWrap = function() { + return wrapEnabled; +}; +const clear = function() { + c4ShapeArray = []; + boundarys = [ + { + alias: "global", + label: { text: "global" }, + type: { text: "global" }, + tags: null, + link: null, + parentBoundary: "" + } + ]; + parentBoundaryParse = ""; + currentBoundaryParse = "global"; + boundaryParseStack = [""]; + rels = []; + boundaryParseStack = [""]; + title = ""; + wrapEnabled = false; + c4ShapeInRow$1 = 4; + c4BoundaryInRow$1 = 2; +}; +const LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18, + PAR_START: 19, + PAR_AND: 20, + PAR_END: 21, + RECT_START: 22, + RECT_END: 23, + SOLID_POINT: 24, + DOTTED_POINT: 25 +}; +const ARROWTYPE = { + FILLED: 0, + OPEN: 1 +}; +const PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2 +}; +const setTitle = function(txt) { + let sanitizedText = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.d)(txt, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)()); + title = sanitizedText; +}; +const db = { + addPersonOrSystem, + addPersonOrSystemBoundary, + addContainer, + addContainerBoundary, + addComponent, + addDeploymentNode, + popBoundaryParseStack, + addRel, + updateElStyle, + updateRelStyle, + updateLayoutConfig, + autoWrap, + setWrap, + getC4ShapeArray, + getC4Shape, + getC4ShapeKeys, + getBoundarys, + getCurrentBoundaryParse, + getParentBoundaryParse, + getRels, + getTitle, + getC4Type, + getC4ShapeInRow, + getC4BoundaryInRow, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.g, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.b, + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4, + clear, + LINETYPE, + ARROWTYPE, + PLACEMENT, + setTitle, + setC4Type + // apply, +}; +const drawRect = function(elem, rectData) { + return (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData); +}; +const drawImage = function(elem, width, height, x, y, link) { + const imageElem = elem.append("image"); + imageElem.attr("width", width); + imageElem.attr("height", height); + imageElem.attr("x", x); + imageElem.attr("y", y); + let sanitizedLink = link.startsWith("data:image/png;base64") ? link : (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm)(link); + imageElem.attr("xlink:href", sanitizedLink); +}; +const drawRels$1 = (elem, rels2, conf2) => { + const relsElem = elem.append("g"); + let i = 0; + for (let rel of rels2) { + let textColor = rel.textColor ? rel.textColor : "#444444"; + let strokeColor = rel.lineColor ? rel.lineColor : "#444444"; + let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0; + let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0; + let url = ""; + if (i === 0) { + let line = relsElem.append("line"); + line.attr("x1", rel.startPoint.x); + line.attr("y1", rel.startPoint.y); + line.attr("x2", rel.endPoint.x); + line.attr("y2", rel.endPoint.y); + line.attr("stroke-width", "1"); + line.attr("stroke", strokeColor); + line.style("fill", "none"); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + i = -1; + } else { + let line = relsElem.append("path"); + line.attr("fill", "none").attr("stroke-width", "1").attr("stroke", strokeColor).attr( + "d", + "Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx", rel.startPoint.x).replaceAll("starty", rel.startPoint.y).replaceAll( + "controlx", + rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4 + ).replaceAll("controly", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll("stopx", rel.endPoint.x).replaceAll("stopy", rel.endPoint.y) + ); + if (rel.type !== "rel_b") { + line.attr("marker-end", "url(" + url + "#arrowhead)"); + } + if (rel.type === "birel" || rel.type === "rel_b") { + line.attr("marker-start", "url(" + url + "#arrowend)"); + } + } + let messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + rel.label.text, + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY, + rel.label.width, + rel.label.height, + { fill: textColor }, + messageConf + ); + if (rel.techn && rel.techn.text !== "") { + messageConf = conf2.messageFont(); + _drawTextCandidateFunc(conf2)( + "[" + rel.techn.text + "]", + relsElem, + Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX, + Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY, + Math.max(rel.label.width, rel.techn.width), + rel.techn.height, + { fill: textColor, "font-style": "italic" }, + messageConf + ); + } + } +}; +const drawBoundary$1 = function(elem, boundary, conf2) { + const boundaryElem = elem.append("g"); + let fillColor = boundary.bgColor ? boundary.bgColor : "none"; + let strokeColor = boundary.borderColor ? boundary.borderColor : "#444444"; + let fontColor = boundary.fontColor ? boundary.fontColor : "black"; + let attrsValue = { "stroke-width": 1, "stroke-dasharray": "7.0,7.0" }; + if (boundary.nodeType) { + attrsValue = { "stroke-width": 1 }; + } + let rectData = { + x: boundary.x, + y: boundary.y, + fill: fillColor, + stroke: strokeColor, + width: boundary.width, + height: boundary.height, + rx: 2.5, + ry: 2.5, + attrs: attrsValue + }; + drawRect(boundaryElem, rectData); + let boundaryConf = conf2.boundaryFont(); + boundaryConf.fontWeight = "bold"; + boundaryConf.fontSize = boundaryConf.fontSize + 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.label.text, + boundaryElem, + boundary.x, + boundary.y + boundary.label.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + if (boundary.type && boundary.type.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.type.text, + boundaryElem, + boundary.x, + boundary.y + boundary.type.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } + if (boundary.descr && boundary.descr.text !== "") { + boundaryConf = conf2.boundaryFont(); + boundaryConf.fontSize = boundaryConf.fontSize - 2; + boundaryConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + boundary.descr.text, + boundaryElem, + boundary.x, + boundary.y + boundary.descr.Y, + boundary.width, + boundary.height, + { fill: "#444444" }, + boundaryConf + ); + } +}; +const drawC4Shape = function(elem, c4Shape, conf2) { + var _a; + let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + "_bg_color"]; + let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + "_border_color"]; + let fontColor = c4Shape.fontColor ? c4Shape.fontColor : "#FFFFFF"; + let personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + switch (c4Shape.typeC4Shape.text) { + case "person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII="; + break; + case "external_person": + personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="; + break; + } + const c4ShapeElem = elem.append("g"); + c4ShapeElem.attr("class", "person-man"); + const rect = (0,_svgDrawCommon_0ee1b4e9_js__WEBPACK_IMPORTED_MODULE_5__.g)(); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + case "system": + case "external_system": + case "container": + case "external_container": + case "component": + case "external_component": + rect.x = c4Shape.x; + rect.y = c4Shape.y; + rect.fill = fillColor; + rect.width = c4Shape.width; + rect.height = c4Shape.height; + rect.stroke = strokeColor; + rect.rx = 2.5; + rect.ry = 2.5; + rect.attrs = { "stroke-width": 0.5 }; + drawRect(c4ShapeElem, rect); + break; + case "system_db": + case "external_system_db": + case "container_db": + case "external_container_db": + case "component_db": + case "external_component_db": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2).replaceAll("height", c4Shape.height) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2) + ); + break; + case "system_queue": + case "external_system_queue": + case "container_queue": + case "external_container_queue": + case "component_queue": + case "external_component_queue": + c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("width", c4Shape.width).replaceAll("half", c4Shape.height / 2) + ); + c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr( + "d", + "Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx", c4Shape.x + c4Shape.width).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.height / 2) + ); + break; + } + let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text); + c4ShapeElem.append("text").attr("fill", fontColor).attr("font-family", c4ShapeFontConf.fontFamily).attr("font-size", c4ShapeFontConf.fontSize - 2).attr("font-style", "italic").attr("lengthAdjust", "spacing").attr("textLength", c4Shape.typeC4Shape.width).attr("x", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr("y", c4Shape.y + c4Shape.typeC4Shape.Y).text("<<" + c4Shape.typeC4Shape.text + ">>"); + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + drawImage( + c4ShapeElem, + 48, + 48, + c4Shape.x + c4Shape.width / 2 - 24, + c4Shape.y + c4Shape.image.Y, + personImg + ); + break; + } + let textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontWeight = "bold"; + textFontConf.fontSize = textFontConf.fontSize + 2; + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.label.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.label.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"](); + textFontConf.fontColor = fontColor; + if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.techn.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.techn.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } else if (c4Shape.type && c4Shape.type.text !== "") { + _drawTextCandidateFunc(conf2)( + c4Shape.type.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.type.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor, "font-style": "italic" }, + textFontConf + ); + } + if (c4Shape.descr && c4Shape.descr.text !== "") { + textFontConf = conf2.personFont(); + textFontConf.fontColor = fontColor; + _drawTextCandidateFunc(conf2)( + c4Shape.descr.text, + c4ShapeElem, + c4Shape.x, + c4Shape.y + c4Shape.descr.Y, + c4Shape.width, + c4Shape.height, + { fill: fontColor }, + textFontConf + ); + } + return c4Shape.height; +}; +const insertDatabaseIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z" + ); +}; +const insertComputerIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z" + ); +}; +const insertClockIcon = function(elem) { + elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr( + "d", + "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z" + ); +}; +const insertArrowHead = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z"); +}; +const insertArrowEnd = function(elem) { + elem.append("defs").append("marker").attr("id", "arrowend").attr("refX", 1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 z"); +}; +const insertArrowFilledHead = function(elem) { + elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const insertDynamicNumber = function(elem) { + elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6); +}; +const insertArrowCrossHead = function(elem) { + const defs = elem.append("defs"); + const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 16).attr("refY", 4); + marker.append("path").attr("fill", "black").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 9,2 V 6 L16,4 Z"); + marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 0,1 L 6,7 M 6,1 L 0,7"); +}; +const getC4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const _drawTextCandidateFunc = function() { + function byText(content, g, x, y, width, height, textAttrs) { + const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content); + _setTextAttrs(text, textAttrs); + } + function byTspan(content, g, x, y, width, height, textAttrs, conf2) { + const { fontSize, fontFamily, fontWeight } = conf2; + const lines = content.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + for (let i = 0; i < lines.length; i++) { + const dy = i * fontSize - fontSize * (lines.length - 1) / 2; + const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily); + text.append("tspan").attr("dy", dy).text(lines[i]).attr("alignment-baseline", "mathematical"); + _setTextAttrs(text, textAttrs); + } + } + function byFo(content, g, x, y, width, height, textAttrs, conf2) { + const s = g.append("switch"); + const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height); + const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); + text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); + byTspan(content, s, x, y, width, height, textAttrs, conf2); + _setTextAttrs(text, textAttrs); + } + function _setTextAttrs(toText, fromTextAttrsDict) { + for (const key in fromTextAttrsDict) { + if (fromTextAttrsDict.hasOwnProperty(key)) { + toText.attr(key, fromTextAttrsDict[key]); + } + } + } + return function(conf2) { + return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan; + }; +}(); +const svgDraw = { + drawRect, + drawBoundary: drawBoundary$1, + drawC4Shape, + drawRels: drawRels$1, + drawImage, + insertArrowHead, + insertArrowEnd, + insertArrowFilledHead, + insertDynamicNumber, + insertArrowCrossHead, + insertDatabaseIcon, + insertComputerIcon, + insertClockIcon +}; +let globalBoundaryMaxX = 0, globalBoundaryMaxY = 0; +let c4ShapeInRow = 4; +let c4BoundaryInRow = 2; +parser.yy = db; +let conf = {}; +class Bounds { + constructor(diagObj) { + this.name = ""; + this.data = {}; + this.data.startx = void 0; + this.data.stopx = void 0; + this.data.starty = void 0; + this.data.stopy = void 0; + this.data.widthLimit = void 0; + this.nextData = {}; + this.nextData.startx = void 0; + this.nextData.stopx = void 0; + this.nextData.starty = void 0; + this.nextData.stopy = void 0; + this.nextData.cnt = 0; + setConf(diagObj.db.getConfig()); + } + setData(startx, stopx, starty, stopy) { + this.nextData.startx = this.data.startx = startx; + this.nextData.stopx = this.data.stopx = stopx; + this.nextData.starty = this.data.starty = starty; + this.nextData.stopy = this.data.stopy = stopy; + } + updateVal(obj, key, val, fun) { + if (obj[key] === void 0) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + } + insert(c4Shape) { + this.nextData.cnt = this.nextData.cnt + 1; + let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2; + let _stopx = _startx + c4Shape.width; + let _starty = this.nextData.starty + c4Shape.margin * 2; + let _stopy = _starty + c4Shape.height; + if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) { + _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX; + _starty = this.nextData.stopy + c4Shape.margin * 2; + this.nextData.stopx = _stopx = _startx + c4Shape.width; + this.nextData.starty = this.nextData.stopy; + this.nextData.stopy = _stopy = _starty + c4Shape.height; + this.nextData.cnt = 1; + } + c4Shape.x = _startx; + c4Shape.y = _starty; + this.updateVal(this.data, "startx", _startx, Math.min); + this.updateVal(this.data, "starty", _starty, Math.min); + this.updateVal(this.data, "stopx", _stopx, Math.max); + this.updateVal(this.data, "stopy", _stopy, Math.max); + this.updateVal(this.nextData, "startx", _startx, Math.min); + this.updateVal(this.nextData, "starty", _starty, Math.min); + this.updateVal(this.nextData, "stopx", _stopx, Math.max); + this.updateVal(this.nextData, "stopy", _stopy, Math.max); + } + init(diagObj) { + this.name = ""; + this.data = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0, + widthLimit: void 0 + }; + this.nextData = { + startx: void 0, + stopx: void 0, + starty: void 0, + stopy: void 0, + cnt: 0 + }; + setConf(diagObj.db.getConfig()); + } + bumpLastMargin(margin) { + this.data.stopx += margin; + this.data.stopy += margin; + } +} +const setConf = function(cnf) { + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf); + if (cnf.fontFamily) { + conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; +const c4ShapeFont = (cnf, typeC4Shape) => { + return { + fontFamily: cnf[typeC4Shape + "FontFamily"], + fontSize: cnf[typeC4Shape + "FontSize"], + fontWeight: cnf[typeC4Shape + "FontWeight"] + }; +}; +const boundaryFont = (cnf) => { + return { + fontFamily: cnf.boundaryFontFamily, + fontSize: cnf.boundaryFontSize, + fontWeight: cnf.boundaryFontWeight + }; +}; +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight + }; +}; +function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) { + if (!c4Shape[textType].width) { + if (c4ShapeTextWrap) { + c4Shape[textType].text = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.w)(c4Shape[textType].text, textLimitWidth, textConf); + c4Shape[textType].textLines = c4Shape[textType].text.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex).length; + c4Shape[textType].width = textLimitWidth; + c4Shape[textType].height = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.j)(c4Shape[textType].text, textConf); + } else { + let lines = c4Shape[textType].text.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex); + c4Shape[textType].textLines = lines.length; + let lineHeight = 0; + c4Shape[textType].height = 0; + c4Shape[textType].width = 0; + for (const line of lines) { + c4Shape[textType].width = Math.max( + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.h)(line, textConf), + c4Shape[textType].width + ); + lineHeight = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.j)(line, textConf); + c4Shape[textType].height = c4Shape[textType].height + lineHeight; + } + } + } +} +const drawBoundary = function(diagram2, boundary, bounds) { + boundary.x = bounds.data.startx; + boundary.y = bounds.data.starty; + boundary.width = bounds.data.stopx - bounds.data.startx; + boundary.height = bounds.data.stopy - bounds.data.starty; + boundary.label.y = conf.c4ShapeMargin - 35; + let boundaryTextWrap = boundary.wrap && conf.wrap; + let boundaryLabelConf = boundaryFont(conf); + boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2; + boundaryLabelConf.fontWeight = "bold"; + let textLimitWidth = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.h)(boundary.label.text, boundaryLabelConf); + calcC4ShapeTextWH("label", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth); + svgDraw.drawBoundary(diagram2, boundary, conf); +}; +const drawC4ShapeArray = function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) { + let Y = 0; + for (const c4ShapeKey of c4ShapeKeys) { + Y = 0; + const c4Shape = c4ShapeArray2[c4ShapeKey]; + let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2; + c4Shape.typeC4Shape.width = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.h)( + "«" + c4Shape.typeC4Shape.text + "»", + c4ShapeTypeConf + ); + c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2; + c4Shape.typeC4Shape.Y = conf.c4ShapePadding; + Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4; + c4Shape.image = { width: 0, height: 0, Y: 0 }; + switch (c4Shape.typeC4Shape.text) { + case "person": + case "external_person": + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + break; + } + if (c4Shape.sprite) { + c4Shape.image.width = 48; + c4Shape.image.height = 48; + c4Shape.image.Y = Y; + Y = c4Shape.image.Y + c4Shape.image.height; + } + let c4ShapeTextWrap = c4Shape.wrap && conf.wrap; + let textLimitWidth = conf.width - conf.c4ShapePadding * 2; + let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2; + c4ShapeLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH("label", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth); + c4Shape["label"].Y = Y + 8; + Y = c4Shape["label"].Y + c4Shape["label"].height; + if (c4Shape.type && c4Shape.type.text !== "") { + c4Shape.type.text = "[" + c4Shape.type.text + "]"; + let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("type", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth); + c4Shape["type"].Y = Y + 5; + Y = c4Shape["type"].Y + c4Shape["type"].height; + } else if (c4Shape.techn && c4Shape.techn.text !== "") { + c4Shape.techn.text = "[" + c4Shape.techn.text + "]"; + let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text); + calcC4ShapeTextWH("techn", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth); + c4Shape["techn"].Y = Y + 5; + Y = c4Shape["techn"].Y + c4Shape["techn"].height; + } + let rectHeight = Y; + let rectWidth = c4Shape.label.width; + if (c4Shape.descr && c4Shape.descr.text !== "") { + let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text); + calcC4ShapeTextWH("descr", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth); + c4Shape["descr"].Y = Y + 20; + Y = c4Shape["descr"].Y + c4Shape["descr"].height; + rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width); + rectHeight = Y - c4Shape["descr"].textLines * 5; + } + rectWidth = rectWidth + conf.c4ShapePadding; + c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width); + c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height); + c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin; + currentBounds.insert(c4Shape); + svgDraw.drawC4Shape(diagram2, c4Shape, conf); + } + currentBounds.bumpLastMargin(conf.c4ShapeMargin); +}; +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } +} +let getIntersectPoint = function(fromNode, endPoint) { + let x1 = fromNode.x; + let y1 = fromNode.y; + let x2 = endPoint.x; + let y2 = endPoint.y; + let fromCenterX = x1 + fromNode.width / 2; + let fromCenterY = y1 + fromNode.height / 2; + let dx = Math.abs(x1 - x2); + let dy = Math.abs(y1 - y2); + let tanDYX = dy / dx; + let fromDYX = fromNode.height / fromNode.width; + let returnPoint = null; + if (y1 == y2 && x1 < x2) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY); + } else if (y1 == y2 && x1 > x2) { + returnPoint = new Point(x1, fromCenterY); + } else if (x1 == x2 && y1 < y2) { + returnPoint = new Point(fromCenterX, y1 + fromNode.height); + } else if (x1 == x2 && y1 > y2) { + returnPoint = new Point(fromCenterX, y1); + } + if (x1 > x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX - dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 < y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point( + fromCenterX + dx / dy * fromNode.height / 2, + y1 + fromNode.height + ); + } + } else if (x1 < x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2); + } else { + returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1); + } + } else if (x1 > x2 && y1 > y2) { + if (fromDYX >= tanDYX) { + returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX); + } else { + returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1); + } + } + return returnPoint; +}; +let getIntersectPoints = function(fromNode, endNode) { + let endIntersectPoint = { x: 0, y: 0 }; + endIntersectPoint.x = endNode.x + endNode.width / 2; + endIntersectPoint.y = endNode.y + endNode.height / 2; + let startPoint = getIntersectPoint(fromNode, endIntersectPoint); + endIntersectPoint.x = fromNode.x + fromNode.width / 2; + endIntersectPoint.y = fromNode.y + fromNode.height / 2; + let endPoint = getIntersectPoint(endNode, endIntersectPoint); + return { startPoint, endPoint }; +}; +const drawRels = function(diagram2, rels2, getC4ShapeObj, diagObj) { + let i = 0; + for (let rel of rels2) { + i = i + 1; + let relTextWrap = rel.wrap && conf.wrap; + let relConf = messageFont(conf); + let diagramType = diagObj.db.getC4Type(); + if (diagramType === "C4Dynamic") { + rel.label.text = i + ": " + rel.label.text; + } + let textLimitWidth = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.label.text, relConf); + calcC4ShapeTextWH("label", rel, relTextWrap, relConf, textLimitWidth); + if (rel.techn && rel.techn.text !== "") { + textLimitWidth = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.techn.text, relConf); + calcC4ShapeTextWH("techn", rel, relTextWrap, relConf, textLimitWidth); + } + if (rel.descr && rel.descr.text !== "") { + textLimitWidth = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.h)(rel.descr.text, relConf); + calcC4ShapeTextWH("descr", rel, relTextWrap, relConf, textLimitWidth); + } + let fromNode = getC4ShapeObj(rel.from); + let endNode = getC4ShapeObj(rel.to); + let points = getIntersectPoints(fromNode, endNode); + rel.startPoint = points.startPoint; + rel.endPoint = points.endPoint; + } + svgDraw.drawRels(diagram2, rels2, conf); +}; +function drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) { + let currentBounds = new Bounds(diagObj); + currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length); + for (let [i, currentBoundary] of currentBoundaries.entries()) { + let Y = 0; + currentBoundary.image = { width: 0, height: 0, Y: 0 }; + if (currentBoundary.sprite) { + currentBoundary.image.width = 48; + currentBoundary.image.height = 48; + currentBoundary.image.Y = Y; + Y = currentBoundary.image.Y + currentBoundary.image.height; + } + let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap; + let currentBoundaryLabelConf = boundaryFont(conf); + currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2; + currentBoundaryLabelConf.fontWeight = "bold"; + calcC4ShapeTextWH( + "label", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryLabelConf, + currentBounds.data.widthLimit + ); + currentBoundary["label"].Y = Y + 8; + Y = currentBoundary["label"].Y + currentBoundary["label"].height; + if (currentBoundary.type && currentBoundary.type.text !== "") { + currentBoundary.type.text = "[" + currentBoundary.type.text + "]"; + let currentBoundaryTypeConf = boundaryFont(conf); + calcC4ShapeTextWH( + "type", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryTypeConf, + currentBounds.data.widthLimit + ); + currentBoundary["type"].Y = Y + 5; + Y = currentBoundary["type"].Y + currentBoundary["type"].height; + } + if (currentBoundary.descr && currentBoundary.descr.text !== "") { + let currentBoundaryDescrConf = boundaryFont(conf); + currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2; + calcC4ShapeTextWH( + "descr", + currentBoundary, + currentBoundaryTextWrap, + currentBoundaryDescrConf, + currentBounds.data.widthLimit + ); + currentBoundary["descr"].Y = Y + 20; + Y = currentBoundary["descr"].Y + currentBoundary["descr"].height; + } + if (i == 0 || i % c4BoundaryInRow === 0) { + let _x = parentBounds.data.startx + conf.diagramMarginX; + let _y = parentBounds.data.stopy + conf.diagramMarginY + Y; + currentBounds.setData(_x, _x, _y, _y); + } else { + let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx; + let _y = currentBounds.data.starty; + currentBounds.setData(_x, _x, _y, _y); + } + currentBounds.name = currentBoundary.alias; + let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias); + let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias); + if (currentPersonOrSystemKeys.length > 0) { + drawC4ShapeArray( + currentBounds, + diagram2, + currentPersonOrSystemArray, + currentPersonOrSystemKeys + ); + } + parentBoundaryAlias = currentBoundary.alias; + let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias); + if (nextCurrentBoundarys.length > 0) { + drawInsideBoundary( + diagram2, + parentBoundaryAlias, + currentBounds, + nextCurrentBoundarys, + diagObj + ); + } + if (currentBoundary.alias !== "global") { + drawBoundary(diagram2, currentBoundary, currentBounds); + } + parentBounds.data.stopy = Math.max( + currentBounds.data.stopy + conf.c4ShapeMargin, + parentBounds.data.stopy + ); + parentBounds.data.stopx = Math.max( + currentBounds.data.stopx + conf.c4ShapeMargin, + parentBounds.data.stopx + ); + globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx); + globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy); + } +} +const draw = function(_text, id, _version, diagObj) { + conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().c4; + const securityLevel = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)().securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + let db2 = diagObj.db; + diagObj.db.setWrap(conf.wrap); + c4ShapeInRow = db2.getC4ShapeInRow(); + c4BoundaryInRow = db2.getC4BoundaryInRow(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`C:${JSON.stringify(conf, null, 2)}`); + const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`); + svgDraw.insertComputerIcon(diagram2); + svgDraw.insertDatabaseIcon(diagram2); + svgDraw.insertClockIcon(diagram2); + let screenBounds = new Bounds(diagObj); + screenBounds.setData( + conf.diagramMarginX, + conf.diagramMarginX, + conf.diagramMarginY, + conf.diagramMarginY + ); + screenBounds.data.widthLimit = screen.availWidth; + globalBoundaryMaxX = conf.diagramMarginX; + globalBoundaryMaxY = conf.diagramMarginY; + const title2 = diagObj.db.getTitle(); + let currentBoundaries = diagObj.db.getBoundarys(""); + drawInsideBoundary(diagram2, "", screenBounds, currentBoundaries, diagObj); + svgDraw.insertArrowHead(diagram2); + svgDraw.insertArrowEnd(diagram2); + svgDraw.insertArrowCrossHead(diagram2); + svgDraw.insertArrowFilledHead(diagram2); + drawRels(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj); + screenBounds.data.stopx = globalBoundaryMaxX; + screenBounds.data.stopy = globalBoundaryMaxY; + const box = screenBounds.data; + let boxHeight = box.stopy - box.starty; + let height = boxHeight + 2 * conf.diagramMarginY; + let boxWidth = box.stopx - box.startx; + const width = boxWidth + 2 * conf.diagramMarginX; + if (title2) { + diagram2.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr("y", box.starty + conf.diagramMarginY); + } + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth); + const extraVertForTitle = title2 ? 60 : 0; + diagram2.attr( + "viewBox", + box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle) + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, box); +}; +const renderer = { + drawPersonOrSystemArray: drawC4ShapeArray, + drawBoundary, + setConf, + draw +}; +const getStyles = (options) => `.person { + stroke: ${options.personBorder}; + fill: ${options.personBkg}; + } +`; +const styles = getStyles; +const diagram = { + parser: parser$1, + db, + renderer, + styles, + init: ({ c4, wrap }) => { + renderer.setConf(c4); + db.setWrap(wrap); + } +}; + + + +/***/ }), + +/***/ 66893: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ drawBackgroundRect), +/* harmony export */ b: () => (/* binding */ drawEmbeddedImage), +/* harmony export */ c: () => (/* binding */ drawImage), +/* harmony export */ d: () => (/* binding */ drawRect), +/* harmony export */ e: () => (/* binding */ getTextObj), +/* harmony export */ f: () => (/* binding */ drawText), +/* harmony export */ g: () => (/* binding */ getNoteRect) +/* harmony export */ }); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17967); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +const drawRect = (element, rectData) => { + const rectElement = element.append("rect"); + rectElement.attr("x", rectData.x); + rectElement.attr("y", rectData.y); + rectElement.attr("fill", rectData.fill); + rectElement.attr("stroke", rectData.stroke); + rectElement.attr("width", rectData.width); + rectElement.attr("height", rectData.height); + rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx); + rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry); + if (rectData.attrs !== void 0) { + for (const attrKey in rectData.attrs) { + rectElement.attr(attrKey, rectData.attrs[attrKey]); + } + } + rectData.class !== void 0 && rectElement.attr("class", rectData.class); + return rectElement; +}; +const drawBackgroundRect = (element, bounds) => { + const rectData = { + x: bounds.startx, + y: bounds.starty, + width: bounds.stopx - bounds.startx, + height: bounds.stopy - bounds.starty, + fill: bounds.fill, + stroke: bounds.stroke, + class: "rect" + }; + const rectElement = drawRect(element, rectData); + rectElement.lower(); +}; +const drawText = (element, textData) => { + const nText = textData.text.replace(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.G, " "); + const textElem = element.append("text"); + textElem.attr("x", textData.x); + textElem.attr("y", textData.y); + textElem.attr("class", "legend"); + textElem.style("text-anchor", textData.anchor); + textData.class !== void 0 && textElem.attr("class", textData.class); + const tspan = textElem.append("tspan"); + tspan.attr("x", textData.x + textData.textMargin * 2); + tspan.text(nText); + return textElem; +}; +const drawImage = (elem, x, y, link) => { + const imageElement = elem.append("image"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", sanitizedLink); +}; +const drawEmbeddedImage = (element, x, y, link) => { + const imageElement = element.append("use"); + imageElement.attr("x", x); + imageElement.attr("y", y); + const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link); + imageElement.attr("xlink:href", `#${sanitizedLink}`); +}; +const getNoteRect = () => { + const noteRectData = { + x: 0, + y: 0, + width: 100, + height: 100, + fill: "#EDF2AE", + stroke: "#666", + anchor: "start", + rx: 0, + ry: 0 + }; + return noteRectData; +}; +const getTextObj = () => { + const testObject = { + x: 0, + y: 0, + width: 100, + height: 100, + "text-anchor": "start", + style: "#666", + textMargin: 0, + rx: 0, + ry: 0, + tspan: true + }; + return testObject; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/81dd00c5.6a7d0b4d.js b/assets/js/81dd00c5.6a7d0b4d.js new file mode 100644 index 0000000000..39d6f04a5e --- /dev/null +++ b/assets/js/81dd00c5.6a7d0b4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2548],{87206:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>s,default:()=>v,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var n=o(85893),i=o(11151);const r={title:"v8.5 to v8.6",description:"v8.5 to v8.6 migration",sidebar_position:5},s="v8.5 to v8.6",c={id:"about/migration_guides/v8-5_to_v8-6",title:"v8.5 to v8.6",description:"v8.5 to v8.6 migration",source:"@site/docs/about/migration_guides/v8-5_to_v8-6.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-5_to_v8-6",permalink:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-5_to_v8-6.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"v8.5 to v8.6",description:"v8.5 to v8.6 migration",sidebar_position:5},sidebar:"about",previous:{title:"v8.3 to v8.4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4"},next:{title:"v8.6 to v8.7",permalink:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7"}},a={},d=[{value:"Economics",id:"economics",level:2}];function u(t){const e={code:"code",h1:"h1",h2:"h2",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"v85-to-v86",children:"v8.5 to v8.6"}),"\n",(0,n.jsx)(e.h2,{id:"economics",children:"Economics"}),"\n",(0,n.jsxs)(e.p,{children:["Economic details have been deprecated from eCalc.\nIf you have used input data such as ",(0,n.jsx)(e.code,{children:"TAX"}),", ",(0,n.jsx)(e.code,{children:"QUOTA"})," and ",(0,n.jsx)(e.code,{children:"PRICE"})," for fuel and emissions in your model,\nthey will be ignored and hence not reported. It will be treated as an error in a future version of eCalc."]})]})}function v(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},11151:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>s});var n=o(67294);const i={},r=n.createContext(i);function s(t){const e=n.useContext(r);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:s(t.components),n.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/8314.51d97488.js b/assets/js/8314.51d97488.js new file mode 100644 index 0000000000..8175db27a4 --- /dev/null +++ b/assets/js/8314.51d97488.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8314],{78314:(e,n,t)=>{t.d(n,{a:()=>sn,c:()=>on});var r={};t.r(r),t.d(r,{attentionMarkers:()=>Le,contentInitial:()=>Ce,disable:()=>Me,document:()=>we,flow:()=>ze,flowInitial:()=>Te,insideSpan:()=>_e,string:()=>De,text:()=>Be});var i=t(28758);const u={};function o(e,n,t){if(function(e){return Boolean(e&&"object"==typeof e)}(e)){if("value"in e)return"html"!==e.type||t?e.value:"";if(n&&"alt"in e&&e.alt)return e.alt;if("children"in e)return c(e.children,n,t)}return Array.isArray(e)?c(e,n,t):""}function c(e,n,t){const r=[];let i=-1;for(;++i<e.length;)r[i]=o(e[i],n,t);return r.join("")}function s(e,n,t,r){const i=e.length;let u,o=0;if(n=n<0?-n>i?0:i+n:n>i?i:n,t=t>0?t:0,r.length<1e4)u=Array.from(r),u.unshift(n,t),e.splice(...u);else for(t&&e.splice(n,t);o<r.length;)u=r.slice(o,o+1e4),u.unshift(n,0),e.splice(...u),o+=1e4,n+=1e4}function l(e,n){return e.length>0?(s(e,e.length,0,n),e):n}const a={}.hasOwnProperty;function f(e,n){let t;for(t in n){const r=(a.call(e,t)?e[t]:void 0)||(e[t]={}),i=n[t];let u;if(i)for(u in i){a.call(r,u)||(r[u]=[]);const e=i[u];d(r[u],Array.isArray(e)?e:e?[e]:[])}}}function d(e,n){let t=-1;const r=[];for(;++t<n.length;)("after"===n[t].add?e:r).push(n[t]);s(e,0,0,r)}const h=A(/[A-Za-z]/),p=A(/[\dA-Za-z]/),m=A(/[#-'*+\--9=?A-Z^-~]/);function g(e){return null!==e&&(e<32||127===e)}const x=A(/\d/),k=A(/[\dA-Fa-f]/),y=A(/[!-/:-@[-`{-~]/);function F(e){return null!==e&&e<-2}function v(e){return null!==e&&(e<0||32===e)}function b(e){return-2===e||-1===e||32===e}const S=A(/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/),E=A(/\s/);function A(e){return function(n){return null!==n&&e.test(String.fromCharCode(n))}}function I(e,n,t,r){const i=r?r-1:Number.POSITIVE_INFINITY;let u=0;return function(r){if(b(r))return e.enter(t),o(r);return n(r)};function o(r){return b(r)&&u++<i?(e.consume(r),o):(e.exit(t),n(r))}}const w={tokenize:function(e){const n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),I(e,n,"linePrefix")}),(function(n){return e.enter("paragraph"),r(n)}));let t;return n;function r(n){const r=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=r),t=r,i(n)}function i(n){return null===n?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(n)):F(n)?(e.consume(n),e.exit("chunkText"),r):(e.consume(n),i)}}};const C={tokenize:function(e){const n=this,t=[];let r,i,u,o=0;return c;function c(r){if(o<t.length){const i=t[o];return n.containerState=i[1],e.attempt(i[0].continuation,l,a)(r)}return a(r)}function l(e){if(o++,n.containerState._closeFlow){n.containerState._closeFlow=void 0,r&&y();const t=n.events.length;let i,u=t;for(;u--;)if("exit"===n.events[u][0]&&"chunkFlow"===n.events[u][1].type){i=n.events[u][1].end;break}k(o);let c=t;for(;c<n.events.length;)n.events[c][1].end=Object.assign({},i),c++;return s(n.events,u+1,0,n.events.slice(t)),n.events.length=c,a(e)}return c(e)}function a(i){if(o===t.length){if(!r)return h(i);if(r.currentConstruct&&r.currentConstruct.concrete)return m(i);n.interrupt=Boolean(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return n.containerState={},e.check(T,f,d)(i)}function f(e){return r&&y(),k(o),h(e)}function d(e){return n.parser.lazy[n.now().line]=o!==t.length,u=n.now().offset,m(e)}function h(t){return n.containerState={},e.attempt(T,p,m)(t)}function p(e){return o++,t.push([n.currentConstruct,n.containerState]),h(e)}function m(t){return null===t?(r&&y(),k(0),void e.consume(t)):(r=r||n.parser.flow(n.now()),e.enter("chunkFlow",{contentType:"flow",previous:i,_tokenizer:r}),g(t))}function g(t){return null===t?(x(e.exit("chunkFlow"),!0),k(0),void e.consume(t)):F(t)?(e.consume(t),x(e.exit("chunkFlow")),o=0,n.interrupt=void 0,c):(e.consume(t),g)}function x(e,t){const c=n.sliceStream(e);if(t&&c.push(null),e.previous=i,i&&(i.next=e),i=e,r.defineSkip(e.start),r.write(c),n.parser.lazy[e.start.line]){let e=r.events.length;for(;e--;)if(r.events[e][1].start.offset<u&&(!r.events[e][1].end||r.events[e][1].end.offset>u))return;const t=n.events.length;let i,c,l=t;for(;l--;)if("exit"===n.events[l][0]&&"chunkFlow"===n.events[l][1].type){if(i){c=n.events[l][1].end;break}i=!0}for(k(o),e=t;e<n.events.length;)n.events[e][1].end=Object.assign({},c),e++;s(n.events,l+1,0,n.events.slice(t)),n.events.length=e}}function k(r){let i=t.length;for(;i-- >r;){const r=t[i];n.containerState=r[1],r[0].exit.call(n,e)}t.length=r}function y(){r.write([null]),i=void 0,r=void 0,n.containerState._closeFlow=void 0}}},T={tokenize:function(e,n,t){return I(e,e.attempt(this.parser.constructs.document,n,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}};const z={tokenize:function(e,n,t){return function(n){return b(n)?I(e,r,"linePrefix")(n):r(n)};function r(e){return null===e||F(e)?n(e):t(e)}},partial:!0};function D(e){const n={};let t,r,i,u,o,c,l,a=-1;for(;++a<e.length;){for(;a in n;)a=n[a];if(t=e[a],a&&"chunkFlow"===t[1].type&&"listItemPrefix"===e[a-1][1].type&&(c=t[1]._tokenizer.events,i=0,i<c.length&&"lineEndingBlank"===c[i][1].type&&(i+=2),i<c.length&&"content"===c[i][1].type))for(;++i<c.length&&"content"!==c[i][1].type;)"chunkText"===c[i][1].type&&(c[i][1]._isInFirstContentOfListItem=!0,i++);if("enter"===t[0])t[1].contentType&&(Object.assign(n,B(e,a)),a=n[a],l=!0);else if(t[1]._container){for(i=a,r=void 0;i--&&(u=e[i],"lineEnding"===u[1].type||"lineEndingBlank"===u[1].type);)"enter"===u[0]&&(r&&(e[r][1].type="lineEndingBlank"),u[1].type="lineEnding",r=i);r&&(t[1].end=Object.assign({},e[r][1].start),o=e.slice(r,a),o.unshift(t),s(e,r,a-r+1,o))}}return!l}function B(e,n){const t=e[n][1],r=e[n][2];let i=n-1;const u=[],o=t._tokenizer||r.parser[t.contentType](t.start),c=o.events,l=[],a={};let f,d,h=-1,p=t,m=0,g=0;const x=[g];for(;p;){for(;e[++i][1]!==p;);u.push(i),p._tokenizer||(f=r.sliceStream(p),p.next||f.push(null),d&&o.defineSkip(p.start),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(f),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),d=p,p=p.next}for(p=t;++h<c.length;)"exit"===c[h][0]&&"enter"===c[h-1][0]&&c[h][1].type===c[h-1][1].type&&c[h][1].start.line!==c[h][1].end.line&&(g=h+1,x.push(g),p._tokenizer=void 0,p.previous=void 0,p=p.next);for(o.events=[],p?(p._tokenizer=void 0,p.previous=void 0):x.pop(),h=x.length;h--;){const n=c.slice(x[h],x[h+1]),t=u.pop();l.unshift([t,t+n.length-1]),s(e,t,2,n)}for(h=-1;++h<l.length;)a[m+l[h][0]]=m+l[h][1],m+=l[h][1]-l[h][0]-1;return a}const _={tokenize:function(e,n){let t;return function(n){return e.enter("content"),t=e.enter("chunkContent",{contentType:"content"}),r(n)};function r(n){return null===n?i(n):F(n)?e.check(L,u,i)(n):(e.consume(n),r)}function i(t){return e.exit("chunkContent"),e.exit("content"),n(t)}function u(n){return e.consume(n),e.exit("chunkContent"),t.next=e.enter("chunkContent",{contentType:"content",previous:t}),t=t.next,r}},resolve:function(e){return D(e),e}},L={tokenize:function(e,n,t){const r=this;return function(n){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),I(e,i,"linePrefix")};function i(i){if(null===i||F(i))return t(i);const u=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(i):e.interrupt(r.parser.constructs.flow,t,n)(i)}},partial:!0};const M={tokenize:function(e){const n=this,t=e.attempt(z,(function(r){if(null===r)return void e.consume(r);return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),n.currentConstruct=void 0,t}),e.attempt(this.parser.constructs.flowInitial,r,I(e,e.attempt(this.parser.constructs.flow,r,e.attempt(_,r)),"linePrefix")));return t;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),n.currentConstruct=void 0,t;e.consume(r)}}};const P={resolveAll:R()},O=H("string"),j=H("text");function H(e){return{tokenize:function(n){const t=this,r=this.parser.constructs[e],i=n.attempt(r,u,o);return u;function u(e){return s(e)?i(e):o(e)}function o(e){if(null!==e)return n.enter("data"),n.consume(e),c;n.consume(e)}function c(e){return s(e)?(n.exit("data"),i(e)):(n.consume(e),c)}function s(e){if(null===e)return!0;const n=r[e];let i=-1;if(n)for(;++i<n.length;){const e=n[i];if(!e.previous||e.previous.call(t,t.previous))return!0}return!1}},resolveAll:R("text"===e?q:void 0)}}function R(e){return function(n,t){let r,i=-1;for(;++i<=n.length;)void 0===r?n[i]&&"data"===n[i][1].type&&(r=i,i++):n[i]&&"data"===n[i][1].type||(i!==r+2&&(n[r][1].end=n[i-1][1].end,n.splice(r+2,i-r-2),i=r+2),r=void 0);return e?e(n,t):n}}function q(e,n){let t=0;for(;++t<=e.length;)if((t===e.length||"lineEnding"===e[t][1].type)&&"data"===e[t-1][1].type){const r=e[t-1][1],i=n.sliceStream(r);let u,o=i.length,c=-1,s=0;for(;o--;){const e=i[o];if("string"==typeof e){for(c=e.length;32===e.charCodeAt(c-1);)s++,c--;if(c)break;c=-1}else if(-2===e)u=!0,s++;else if(-1!==e){o++;break}}if(s){const i={type:t===e.length||u||s<2?"lineSuffix":"hardBreakTrailing",start:{line:r.end.line,column:r.end.column-s,offset:r.end.offset-s,_index:r.start._index+o,_bufferIndex:o?c:r.start._bufferIndex+c},end:Object.assign({},r.end)};r.end=Object.assign({},i.start),r.start.offset===r.end.offset?Object.assign(r,i):(e.splice(t,0,["enter",i,n],["exit",i,n]),t+=2)}t++}return e}function V(e,n,t){const r=[];let i=-1;for(;++i<e.length;){const u=e[i].resolveAll;u&&!r.includes(u)&&(n=u(n,t),r.push(u))}return n}function Q(e,n,t){let r=Object.assign(t?Object.assign({},t):{line:1,column:1,offset:0},{_index:0,_bufferIndex:-1});const i={},u=[];let o=[],c=[],a=!0;const f={consume:function(e){F(e)?(r.line++,r.column=1,r.offset+=-3===e?2:1,S()):-1!==e&&(r.column++,r.offset++);r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++));d.previous=e,a=!0},enter:function(e,n){const t=n||{};return t.type=e,t.start=g(),d.events.push(["enter",t,d]),c.push(t),t},exit:function(e){const n=c.pop();return n.end=g(),d.events.push(["exit",n,d]),n},attempt:v((function(e,n){b(e,n.from)})),check:v(y),interrupt:v(y,{interrupt:!0})},d={previous:null,code:null,containerState:{},events:[],parser:e,sliceStream:m,sliceSerialize:function(e,n){return function(e,n){let t=-1;const r=[];let i;for(;++t<e.length;){const u=e[t];let o;if("string"==typeof u)o=u;else switch(u){case-5:o="\r";break;case-4:o="\n";break;case-3:o="\r\n";break;case-2:o=n?" ":"\t";break;case-1:if(!n&&i)continue;o=" ";break;default:o=String.fromCharCode(u)}i=-2===u,r.push(o)}return r.join("")}(m(e),n)},now:g,defineSkip:function(e){i[e.line]=e.column,S()},write:function(e){if(o=l(o,e),x(),null!==o[o.length-1])return[];return b(n,0),d.events=V(u,d.events,d),d.events}};let h,p=n.tokenize.call(d,f);return n.resolveAll&&u.push(n),d;function m(e){return function(e,n){const t=n.start._index,r=n.start._bufferIndex,i=n.end._index,u=n.end._bufferIndex;let o;if(t===i)o=[e[t].slice(r,u)];else{if(o=e.slice(t,i),r>-1){const e=o[0];"string"==typeof e?o[0]=e.slice(r):o.shift()}u>0&&o.push(e[i].slice(0,u))}return o}(o,e)}function g(){const{line:e,column:n,offset:t,_index:i,_bufferIndex:u}=r;return{line:e,column:n,offset:t,_index:i,_bufferIndex:u}}function x(){let e;for(;r._index<o.length;){const n=o[r._index];if("string"==typeof n)for(e=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===e&&r._bufferIndex<n.length;)k(n.charCodeAt(r._bufferIndex));else k(n)}}function k(e){a=void 0,h=e,p=p(e)}function y(e,n){n.restore()}function v(e,n){return function(t,i,u){let o,s,l,h;return Array.isArray(t)?p(t):"tokenize"in t?p([t]):function(e){return n;function n(n){const t=null!==n&&e[n],r=null!==n&&e.null;return p([...Array.isArray(t)?t:t?[t]:[],...Array.isArray(r)?r:r?[r]:[]])(n)}}(t);function p(e){return o=e,s=0,0===e.length?u:m(e[s])}function m(e){return function(t){h=function(){const e=g(),n=d.previous,t=d.currentConstruct,i=d.events.length,u=Array.from(c);return{restore:o,from:i};function o(){r=e,d.previous=n,d.currentConstruct=t,d.events.length=i,c=u,S()}}(),l=e,e.partial||(d.currentConstruct=e);if(e.name&&d.parser.constructs.disable.null.includes(e.name))return k(t);return e.tokenize.call(n?Object.assign(Object.create(d),n):d,f,x,k)(t)}}function x(n){return a=!0,e(l,h),i}function k(e){return a=!0,h.restore(),++s<o.length?m(o[s]):u}}}function b(e,n){e.resolveAll&&!u.includes(e)&&u.push(e),e.resolve&&s(d.events,n,d.events.length-n,e.resolve(d.events.slice(n),d)),e.resolveTo&&(d.events=e.resolveTo(d.events,d))}function S(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}const N={name:"thematicBreak",tokenize:function(e,n,t){let r,i=0;return function(n){return e.enter("thematicBreak"),function(e){return r=e,u(e)}(n)};function u(u){return u===r?(e.enter("thematicBreakSequence"),o(u)):i>=3&&(null===u||F(u))?(e.exit("thematicBreak"),n(u)):t(u)}function o(n){return n===r?(e.consume(n),i++,o):(e.exit("thematicBreakSequence"),b(n)?I(e,u,"whitespace")(n):u(n))}}};const U={name:"list",tokenize:function(e,n,t){const r=this,i=r.events[r.events.length-1];let u=i&&"linePrefix"===i[1].type?i[2].sliceSerialize(i[1],!0).length:0,o=0;return function(n){const i=r.containerState.type||(42===n||43===n||45===n?"listUnordered":"listOrdered");if("listUnordered"===i?!r.containerState.marker||n===r.containerState.marker:x(n)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),"listUnordered"===i)return e.enter("listItemPrefix"),42===n||45===n?e.check(N,t,s)(n):s(n);if(!r.interrupt||49===n)return e.enter("listItemPrefix"),e.enter("listItemValue"),c(n)}return t(n)};function c(n){return x(n)&&++o<10?(e.consume(n),c):(!r.interrupt||o<2)&&(r.containerState.marker?n===r.containerState.marker:41===n||46===n)?(e.exit("listItemValue"),s(n)):t(n)}function s(n){return e.enter("listItemMarker"),e.consume(n),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||n,e.check(z,r.interrupt?t:l,e.attempt($,f,a))}function l(e){return r.containerState.initialBlankLine=!0,u++,f(e)}function a(n){return b(n)?(e.enter("listItemPrefixWhitespace"),e.consume(n),e.exit("listItemPrefixWhitespace"),f):t(n)}function f(t){return r.containerState.size=u+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(t)}},continuation:{tokenize:function(e,n,t){const r=this;return r.containerState._closeFlow=void 0,e.check(z,(function(t){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,I(e,n,"listItemIndent",r.containerState.size+1)(t)}),(function(t){if(r.containerState.furtherBlankLines||!b(t))return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,i(t);return r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(W,n,i)(t)}));function i(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,I(e,e.attempt(U,n,t),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)}},$={tokenize:function(e,n,t){const r=this;return I(e,(function(e){const i=r.events[r.events.length-1];return!b(e)&&i&&"listItemPrefixWhitespace"===i[1].type?n(e):t(e)}),"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)},partial:!0},W={tokenize:function(e,n,t){const r=this;return I(e,(function(e){const i=r.events[r.events.length-1];return i&&"listItemIndent"===i[1].type&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?n(e):t(e)}),"listItemIndent",r.containerState.size+1)},partial:!0};const Z={name:"blockQuote",tokenize:function(e,n,t){const r=this;return function(n){if(62===n){const t=r.containerState;return t.open||(e.enter("blockQuote",{_container:!0}),t.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(n),e.exit("blockQuoteMarker"),i}return t(n)};function i(t){return b(t)?(e.enter("blockQuotePrefixWhitespace"),e.consume(t),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),n):(e.exit("blockQuotePrefix"),n(t))}},continuation:{tokenize:function(e,n,t){const r=this;return function(n){if(b(n))return I(e,i,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n);return i(n)};function i(r){return e.attempt(Z,n,t)(r)}}},exit:function(e){e.exit("blockQuote")}};function Y(e,n,t,r,i,u,o,c,s){const l=s||Number.POSITIVE_INFINITY;let a=0;return function(n){if(60===n)return e.enter(r),e.enter(i),e.enter(u),e.consume(n),e.exit(u),f;if(null===n||32===n||41===n||g(n))return t(n);return e.enter(r),e.enter(o),e.enter(c),e.enter("chunkString",{contentType:"string"}),p(n)};function f(t){return 62===t?(e.enter(u),e.consume(t),e.exit(u),e.exit(i),e.exit(r),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),d(t))}function d(n){return 62===n?(e.exit("chunkString"),e.exit(c),f(n)):null===n||60===n||F(n)?t(n):(e.consume(n),92===n?h:d)}function h(n){return 60===n||62===n||92===n?(e.consume(n),d):d(n)}function p(i){return a||null!==i&&41!==i&&!v(i)?a<l&&40===i?(e.consume(i),a++,p):41===i?(e.consume(i),a--,p):null===i||32===i||40===i||g(i)?t(i):(e.consume(i),92===i?m:p):(e.exit("chunkString"),e.exit(c),e.exit(o),e.exit(r),n(i))}function m(n){return 40===n||41===n||92===n?(e.consume(n),p):p(n)}}function J(e,n,t,r,i,u){const o=this;let c,s=0;return function(n){return e.enter(r),e.enter(i),e.consume(n),e.exit(i),e.enter(u),l};function l(f){return s>999||null===f||91===f||93===f&&!c||94===f&&!s&&"_hiddenFootnoteSupport"in o.parser.constructs?t(f):93===f?(e.exit(u),e.enter(i),e.consume(f),e.exit(i),e.exit(r),n):F(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),l):(e.enter("chunkString",{contentType:"string"}),a(f))}function a(n){return null===n||91===n||93===n||F(n)||s++>999?(e.exit("chunkString"),l(n)):(e.consume(n),c||(c=!b(n)),92===n?f:a)}function f(n){return 91===n||92===n||93===n?(e.consume(n),s++,a):a(n)}}function G(e,n,t,r,i,u){let o;return function(n){if(34===n||39===n||40===n)return e.enter(r),e.enter(i),e.consume(n),e.exit(i),o=40===n?41:n,c;return t(n)};function c(t){return t===o?(e.enter(i),e.consume(t),e.exit(i),e.exit(r),n):(e.enter(u),s(t))}function s(n){return n===o?(e.exit(u),c(o)):null===n?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),I(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),l(n))}function l(n){return n===o||null===n||F(n)?(e.exit("chunkString"),s(n)):(e.consume(n),92===n?a:l)}function a(n){return n===o||92===n?(e.consume(n),l):l(n)}}function K(e,n){let t;return function r(i){if(F(i))return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t=!0,r;if(b(i))return I(e,r,t?"linePrefix":"lineSuffix")(i);return n(i)}}function X(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ee={name:"definition",tokenize:function(e,n,t){const r=this;let i;return function(n){return e.enter("definition"),function(n){return J.call(r,e,u,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(n)}(n)};function u(n){return i=X(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),58===n?(e.enter("definitionMarker"),e.consume(n),e.exit("definitionMarker"),o):t(n)}function o(n){return v(n)?K(e,c)(n):c(n)}function c(n){return Y(e,s,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(n)}function s(n){return e.attempt(ne,l,l)(n)}function l(n){return b(n)?I(e,a,"whitespace")(n):a(n)}function a(u){return null===u||F(u)?(e.exit("definition"),r.parser.defined.push(i),n(u)):t(u)}}},ne={tokenize:function(e,n,t){return function(n){return v(n)?K(e,r)(n):t(n)};function r(n){return G(e,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(n)}function i(n){return b(n)?I(e,u,"whitespace")(n):u(n)}function u(e){return null===e||F(e)?n(e):t(e)}},partial:!0};const te={name:"codeIndented",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("codeIndented"),I(e,i,"linePrefix",5)(n)};function i(e){const n=r.events[r.events.length-1];return n&&"linePrefix"===n[1].type&&n[2].sliceSerialize(n[1],!0).length>=4?u(e):t(e)}function u(n){return null===n?c(n):F(n)?e.attempt(re,u,c)(n):(e.enter("codeFlowValue"),o(n))}function o(n){return null===n||F(n)?(e.exit("codeFlowValue"),u(n)):(e.consume(n),o)}function c(t){return e.exit("codeIndented"),n(t)}}},re={tokenize:function(e,n,t){const r=this;return i;function i(n){return r.parser.lazy[r.now().line]?t(n):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i):I(e,u,"linePrefix",5)(n)}function u(e){const u=r.events[r.events.length-1];return u&&"linePrefix"===u[1].type&&u[2].sliceSerialize(u[1],!0).length>=4?n(e):F(e)?i(e):t(e)}},partial:!0};const ie={name:"headingAtx",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("atxHeading"),function(n){return e.enter("atxHeadingSequence"),i(n)}(n)};function i(n){return 35===n&&r++<6?(e.consume(n),i):null===n||v(n)?(e.exit("atxHeadingSequence"),u(n)):t(n)}function u(t){return 35===t?(e.enter("atxHeadingSequence"),o(t)):null===t||F(t)?(e.exit("atxHeading"),n(t)):b(t)?I(e,u,"whitespace")(t):(e.enter("atxHeadingText"),c(t))}function o(n){return 35===n?(e.consume(n),o):(e.exit("atxHeadingSequence"),u(n))}function c(n){return null===n||35===n||v(n)?(e.exit("atxHeadingText"),u(n)):(e.consume(n),c)}},resolve:function(e,n){let t,r,i=e.length-2,u=3;"whitespace"===e[u][1].type&&(u+=2);i-2>u&&"whitespace"===e[i][1].type&&(i-=2);"atxHeadingSequence"===e[i][1].type&&(u===i-1||i-4>u&&"whitespace"===e[i-2][1].type)&&(i-=u+1===i?2:4);i>u&&(t={type:"atxHeadingText",start:e[u][1].start,end:e[i][1].end},r={type:"chunkText",start:e[u][1].start,end:e[i][1].end,contentType:"text"},s(e,u,i-u+1,[["enter",t,n],["enter",r,n],["exit",r,n],["exit",t,n]]));return e}};const ue={name:"setextUnderline",tokenize:function(e,n,t){const r=this;let i;return function(n){let o,c=r.events.length;for(;c--;)if("lineEnding"!==r.events[c][1].type&&"linePrefix"!==r.events[c][1].type&&"content"!==r.events[c][1].type){o="paragraph"===r.events[c][1].type;break}if(!r.parser.lazy[r.now().line]&&(r.interrupt||o))return e.enter("setextHeadingLine"),i=n,function(n){return e.enter("setextHeadingLineSequence"),u(n)}(n);return t(n)};function u(n){return n===i?(e.consume(n),u):(e.exit("setextHeadingLineSequence"),b(n)?I(e,o,"lineSuffix")(n):o(n))}function o(r){return null===r||F(r)?(e.exit("setextHeadingLine"),n(r)):t(r)}},resolveTo:function(e,n){let t,r,i,u=e.length;for(;u--;)if("enter"===e[u][0]){if("content"===e[u][1].type){t=u;break}"paragraph"===e[u][1].type&&(r=u)}else"content"===e[u][1].type&&e.splice(u,1),i||"definition"!==e[u][1].type||(i=u);const o={type:"setextHeading",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)};e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,n]),e.splice(i+1,0,["exit",e[t][1],n]),e[t][1].end=Object.assign({},e[i][1].end)):e[t][1]=o;return e.push(["exit",o,n]),e}};const oe=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],ce=["pre","script","style","textarea"],se={name:"htmlFlow",tokenize:function(e,n,t){const r=this;let i,u,o,c,s;return function(n){return function(n){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(n),l}(n)};function l(c){return 33===c?(e.consume(c),a):47===c?(e.consume(c),u=!0,m):63===c?(e.consume(c),i=3,r.interrupt?n:H):h(c)?(e.consume(c),o=String.fromCharCode(c),g):t(c)}function a(u){return 45===u?(e.consume(u),i=2,f):91===u?(e.consume(u),i=5,c=0,d):h(u)?(e.consume(u),i=4,r.interrupt?n:H):t(u)}function f(i){return 45===i?(e.consume(i),r.interrupt?n:H):t(i)}function d(i){const u="CDATA[";return i===u.charCodeAt(c++)?(e.consume(i),6===c?r.interrupt?n:D:d):t(i)}function m(n){return h(n)?(e.consume(n),o=String.fromCharCode(n),g):t(n)}function g(c){if(null===c||47===c||62===c||v(c)){const s=47===c,l=o.toLowerCase();return s||u||!ce.includes(l)?oe.includes(o.toLowerCase())?(i=6,s?(e.consume(c),x):r.interrupt?n(c):D(c)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?t(c):u?k(c):y(c)):(i=1,r.interrupt?n(c):D(c))}return 45===c||p(c)?(e.consume(c),o+=String.fromCharCode(c),g):t(c)}function x(i){return 62===i?(e.consume(i),r.interrupt?n:D):t(i)}function k(n){return b(n)?(e.consume(n),k):T(n)}function y(n){return 47===n?(e.consume(n),T):58===n||95===n||h(n)?(e.consume(n),S):b(n)?(e.consume(n),y):T(n)}function S(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),S):E(n)}function E(n){return 61===n?(e.consume(n),A):b(n)?(e.consume(n),E):y(n)}function A(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),s=n,I):b(n)?(e.consume(n),A):w(n)}function I(n){return n===s?(e.consume(n),s=null,C):null===n||F(n)?t(n):(e.consume(n),I)}function w(n){return null===n||34===n||39===n||47===n||60===n||61===n||62===n||96===n||v(n)?E(n):(e.consume(n),w)}function C(e){return 47===e||62===e||b(e)?y(e):t(e)}function T(n){return 62===n?(e.consume(n),z):t(n)}function z(n){return null===n||F(n)?D(n):b(n)?(e.consume(n),z):t(n)}function D(n){return 45===n&&2===i?(e.consume(n),M):60===n&&1===i?(e.consume(n),P):62===n&&4===i?(e.consume(n),R):63===n&&3===i?(e.consume(n),H):93===n&&5===i?(e.consume(n),j):!F(n)||6!==i&&7!==i?null===n||F(n)?(e.exit("htmlFlowData"),B(n)):(e.consume(n),D):(e.exit("htmlFlowData"),e.check(le,q,B)(n))}function B(n){return e.check(ae,_,q)(n)}function _(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),L}function L(n){return null===n||F(n)?B(n):(e.enter("htmlFlowData"),D(n))}function M(n){return 45===n?(e.consume(n),H):D(n)}function P(n){return 47===n?(e.consume(n),o="",O):D(n)}function O(n){if(62===n){const t=o.toLowerCase();return ce.includes(t)?(e.consume(n),R):D(n)}return h(n)&&o.length<8?(e.consume(n),o+=String.fromCharCode(n),O):D(n)}function j(n){return 93===n?(e.consume(n),H):D(n)}function H(n){return 62===n?(e.consume(n),R):45===n&&2===i?(e.consume(n),H):D(n)}function R(n){return null===n||F(n)?(e.exit("htmlFlowData"),q(n)):(e.consume(n),R)}function q(t){return e.exit("htmlFlow"),n(t)}},resolveTo:function(e){let n=e.length;for(;n--&&("enter"!==e[n][0]||"htmlFlow"!==e[n][1].type););n>1&&"linePrefix"===e[n-2][1].type&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2));return e},concrete:!0},le={tokenize:function(e,n,t){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(z,n,t)}},partial:!0},ae={tokenize:function(e,n,t){const r=this;return function(n){if(F(n))return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i;return t(n)};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0};const fe={tokenize:function(e,n,t){const r=this;return function(n){if(null===n)return t(n);return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i};function i(e){return r.parser.lazy[r.now().line]?t(e):n(e)}},partial:!0},de={name:"codeFenced",tokenize:function(e,n,t){const r=this,i={tokenize:function(e,n,t){let i=0;return o;function o(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),s}function s(n){return e.enter("codeFencedFence"),b(n)?I(e,l,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):l(n)}function l(n){return n===u?(e.enter("codeFencedFenceSequence"),a(n)):t(n)}function a(n){return n===u?(i++,e.consume(n),a):i>=c?(e.exit("codeFencedFenceSequence"),b(n)?I(e,f,"whitespace")(n):f(n)):t(n)}function f(r){return null===r||F(r)?(e.exit("codeFencedFence"),n(r)):t(r)}},partial:!0};let u,o=0,c=0;return function(n){return function(n){const t=r.events[r.events.length-1];return o=t&&"linePrefix"===t[1].type?t[2].sliceSerialize(t[1],!0).length:0,u=n,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),s(n)}(n)};function s(n){return n===u?(c++,e.consume(n),s):c<3?t(n):(e.exit("codeFencedFenceSequence"),b(n)?I(e,l,"whitespace")(n):l(n))}function l(t){return null===t||F(t)?(e.exit("codeFencedFence"),r.interrupt?n(t):e.check(fe,h,k)(t)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),a(t))}function a(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),l(n)):b(n)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),I(e,f,"whitespace")(n)):96===n&&n===u?t(n):(e.consume(n),a)}function f(n){return null===n||F(n)?l(n):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),d(n))}function d(n){return null===n||F(n)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),l(n)):96===n&&n===u?t(n):(e.consume(n),d)}function h(n){return e.attempt(i,k,p)(n)}function p(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),m}function m(n){return o>0&&b(n)?I(e,g,"linePrefix",o+1)(n):g(n)}function g(n){return null===n||F(n)?e.check(fe,h,k)(n):(e.enter("codeFlowValue"),x(n))}function x(n){return null===n||F(n)?(e.exit("codeFlowValue"),g(n)):(e.consume(n),x)}function k(t){return e.exit("codeFenced"),n(t)}},concrete:!0};const he=document.createElement("i");function pe(e){const n="&"+e+";";he.innerHTML=n;const t=he.textContent;return(59!==t.charCodeAt(t.length-1)||"semi"===e)&&(t!==n&&t)}const me={name:"characterReference",tokenize:function(e,n,t){const r=this;let i,u,o=0;return function(n){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(n),e.exit("characterReferenceMarker"),c};function c(n){return 35===n?(e.enter("characterReferenceMarkerNumeric"),e.consume(n),e.exit("characterReferenceMarkerNumeric"),s):(e.enter("characterReferenceValue"),i=31,u=p,l(n))}function s(n){return 88===n||120===n?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(n),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),i=6,u=k,l):(e.enter("characterReferenceValue"),i=7,u=x,l(n))}function l(c){if(59===c&&o){const i=e.exit("characterReferenceValue");return u!==p||pe(r.sliceSerialize(i))?(e.enter("characterReferenceMarker"),e.consume(c),e.exit("characterReferenceMarker"),e.exit("characterReference"),n):t(c)}return u(c)&&o++<i?(e.consume(c),l):t(c)}}};const ge={name:"characterEscape",tokenize:function(e,n,t){return function(n){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(n),e.exit("escapeMarker"),r};function r(r){return y(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),n):t(r)}}};const xe={name:"lineEnding",tokenize:function(e,n){return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),I(e,n,"linePrefix")}}};const ke={name:"labelEnd",tokenize:function(e,n,t){const r=this;let i,u,o=r.events.length;for(;o--;)if(("labelImage"===r.events[o][1].type||"labelLink"===r.events[o][1].type)&&!r.events[o][1]._balanced){i=r.events[o][1];break}return function(n){if(!i)return t(n);if(i._inactive)return a(n);return u=r.parser.defined.includes(X(r.sliceSerialize({start:i.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelEnd"),c};function c(n){return 40===n?e.attempt(ye,l,u?l:a)(n):91===n?e.attempt(Fe,l,u?s:a)(n):u?l(n):a(n)}function s(n){return e.attempt(ve,l,a)(n)}function l(e){return n(e)}function a(e){return i._balanced=!0,t(e)}},resolveTo:function(e,n){let t,r,i,u,o=e.length,c=0;for(;o--;)if(t=e[o][1],r){if("link"===t.type||"labelLink"===t.type&&t._inactive)break;"enter"===e[o][0]&&"labelLink"===t.type&&(t._inactive=!0)}else if(i){if("enter"===e[o][0]&&("labelImage"===t.type||"labelLink"===t.type)&&!t._balanced&&(r=o,"labelLink"!==t.type)){c=2;break}}else"labelEnd"===t.type&&(i=o);const a={type:"labelLink"===e[r][1].type?"link":"image",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)},f={type:"label",start:Object.assign({},e[r][1].start),end:Object.assign({},e[i][1].end)},d={type:"labelText",start:Object.assign({},e[r+c+2][1].end),end:Object.assign({},e[i-2][1].start)};return u=[["enter",a,n],["enter",f,n]],u=l(u,e.slice(r+1,r+c+3)),u=l(u,[["enter",d,n]]),u=l(u,V(n.parser.constructs.insideSpan.null,e.slice(r+c+4,i-3),n)),u=l(u,[["exit",d,n],e[i-2],e[i-1],["exit",f,n]]),u=l(u,e.slice(i+1)),u=l(u,[["exit",a,n]]),s(e,r,e.length,u),e},resolveAll:function(e){let n=-1;for(;++n<e.length;){const t=e[n][1];"labelImage"!==t.type&&"labelLink"!==t.type&&"labelEnd"!==t.type||(e.splice(n+1,"labelImage"===t.type?4:2),t.type="data",n++)}return e}},ye={tokenize:function(e,n,t){return function(n){return e.enter("resource"),e.enter("resourceMarker"),e.consume(n),e.exit("resourceMarker"),r};function r(n){return v(n)?K(e,i)(n):i(n)}function i(n){return 41===n?l(n):Y(e,u,o,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(n)}function u(n){return v(n)?K(e,c)(n):l(n)}function o(e){return t(e)}function c(n){return 34===n||39===n||40===n?G(e,s,t,"resourceTitle","resourceTitleMarker","resourceTitleString")(n):l(n)}function s(n){return v(n)?K(e,l)(n):l(n)}function l(r){return 41===r?(e.enter("resourceMarker"),e.consume(r),e.exit("resourceMarker"),e.exit("resource"),n):t(r)}}},Fe={tokenize:function(e,n,t){const r=this;return function(n){return J.call(r,e,i,u,"reference","referenceMarker","referenceString")(n)};function i(e){return r.parser.defined.includes(X(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?n(e):t(e)}function u(e){return t(e)}}},ve={tokenize:function(e,n,t){return function(n){return e.enter("reference"),e.enter("referenceMarker"),e.consume(n),e.exit("referenceMarker"),r};function r(r){return 93===r?(e.enter("referenceMarker"),e.consume(r),e.exit("referenceMarker"),e.exit("reference"),n):t(r)}}};function be(e){return null===e||v(e)||E(e)?1:S(e)?2:void 0}const Se={name:"attention",tokenize:function(e,n){const t=this.parser.constructs.attentionMarkers.null,r=this.previous,i=be(r);let u;return function(n){return u=n,e.enter("attentionSequence"),o(n)};function o(c){if(c===u)return e.consume(c),o;const s=e.exit("attentionSequence"),l=be(c),a=!l||2===l&&i||t.includes(c),f=!i||2===i&&l||t.includes(r);return s._open=Boolean(42===u?a:a&&(i||!f)),s._close=Boolean(42===u?f:f&&(l||!a)),n(c)}},resolveAll:function(e,n){let t,r,i,u,o,c,a,f,d=-1;for(;++d<e.length;)if("enter"===e[d][0]&&"attentionSequence"===e[d][1].type&&e[d][1]._close)for(t=d;t--;)if("exit"===e[t][0]&&"attentionSequence"===e[t][1].type&&e[t][1]._open&&n.sliceSerialize(e[t][1]).charCodeAt(0)===n.sliceSerialize(e[d][1]).charCodeAt(0)){if((e[t][1]._close||e[d][1]._open)&&(e[d][1].end.offset-e[d][1].start.offset)%3&&!((e[t][1].end.offset-e[t][1].start.offset+e[d][1].end.offset-e[d][1].start.offset)%3))continue;c=e[t][1].end.offset-e[t][1].start.offset>1&&e[d][1].end.offset-e[d][1].start.offset>1?2:1;const h=Object.assign({},e[t][1].end),p=Object.assign({},e[d][1].start);Ee(h,-c),Ee(p,c),u={type:c>1?"strongSequence":"emphasisSequence",start:h,end:Object.assign({},e[t][1].end)},o={type:c>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[d][1].start),end:p},i={type:c>1?"strongText":"emphasisText",start:Object.assign({},e[t][1].end),end:Object.assign({},e[d][1].start)},r={type:c>1?"strong":"emphasis",start:Object.assign({},u.start),end:Object.assign({},o.end)},e[t][1].end=Object.assign({},u.start),e[d][1].start=Object.assign({},o.end),a=[],e[t][1].end.offset-e[t][1].start.offset&&(a=l(a,[["enter",e[t][1],n],["exit",e[t][1],n]])),a=l(a,[["enter",r,n],["enter",u,n],["exit",u,n],["enter",i,n]]),a=l(a,V(n.parser.constructs.insideSpan.null,e.slice(t+1,d),n)),a=l(a,[["exit",i,n],["enter",o,n],["exit",o,n],["exit",r,n]]),e[d][1].end.offset-e[d][1].start.offset?(f=2,a=l(a,[["enter",e[d][1],n],["exit",e[d][1],n]])):f=0,s(e,t-1,d-t+3,a),d=t+a.length-f-2;break}d=-1;for(;++d<e.length;)"attentionSequence"===e[d][1].type&&(e[d][1].type="data");return e}};function Ee(e,n){e.column+=n,e.offset+=n,e._bufferIndex+=n}const Ae={name:"htmlText",tokenize:function(e,n,t){const r=this;let i,u,o;return function(n){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(n),c};function c(n){return 33===n?(e.consume(n),s):47===n?(e.consume(n),A):63===n?(e.consume(n),S):h(n)?(e.consume(n),T):t(n)}function s(n){return 45===n?(e.consume(n),l):91===n?(e.consume(n),u=0,m):h(n)?(e.consume(n),y):t(n)}function l(n){return 45===n?(e.consume(n),d):t(n)}function a(n){return null===n?t(n):45===n?(e.consume(n),f):F(n)?(o=a,j(n)):(e.consume(n),a)}function f(n){return 45===n?(e.consume(n),d):a(n)}function d(e){return 62===e?O(e):45===e?f(e):a(e)}function m(n){const r="CDATA[";return n===r.charCodeAt(u++)?(e.consume(n),6===u?g:m):t(n)}function g(n){return null===n?t(n):93===n?(e.consume(n),x):F(n)?(o=g,j(n)):(e.consume(n),g)}function x(n){return 93===n?(e.consume(n),k):g(n)}function k(n){return 62===n?O(n):93===n?(e.consume(n),k):g(n)}function y(n){return null===n||62===n?O(n):F(n)?(o=y,j(n)):(e.consume(n),y)}function S(n){return null===n?t(n):63===n?(e.consume(n),E):F(n)?(o=S,j(n)):(e.consume(n),S)}function E(e){return 62===e?O(e):S(e)}function A(n){return h(n)?(e.consume(n),w):t(n)}function w(n){return 45===n||p(n)?(e.consume(n),w):C(n)}function C(n){return F(n)?(o=C,j(n)):b(n)?(e.consume(n),C):O(n)}function T(n){return 45===n||p(n)?(e.consume(n),T):47===n||62===n||v(n)?z(n):t(n)}function z(n){return 47===n?(e.consume(n),O):58===n||95===n||h(n)?(e.consume(n),D):F(n)?(o=z,j(n)):b(n)?(e.consume(n),z):O(n)}function D(n){return 45===n||46===n||58===n||95===n||p(n)?(e.consume(n),D):B(n)}function B(n){return 61===n?(e.consume(n),_):F(n)?(o=B,j(n)):b(n)?(e.consume(n),B):z(n)}function _(n){return null===n||60===n||61===n||62===n||96===n?t(n):34===n||39===n?(e.consume(n),i=n,L):F(n)?(o=_,j(n)):b(n)?(e.consume(n),_):(e.consume(n),M)}function L(n){return n===i?(e.consume(n),i=void 0,P):null===n?t(n):F(n)?(o=L,j(n)):(e.consume(n),L)}function M(n){return null===n||34===n||39===n||60===n||61===n||96===n?t(n):47===n||62===n||v(n)?z(n):(e.consume(n),M)}function P(e){return 47===e||62===e||v(e)?z(e):t(e)}function O(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),n):t(r)}function j(n){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),H}function H(n){return b(n)?I(e,R,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(n):R(n)}function R(n){return e.enter("htmlTextData"),o(n)}}};const Ie={name:"codeText",tokenize:function(e,n,t){let r,i,u=0;return function(n){return e.enter("codeText"),e.enter("codeTextSequence"),o(n)};function o(n){return 96===n?(e.consume(n),u++,o):(e.exit("codeTextSequence"),c(n))}function c(n){return null===n?t(n):32===n?(e.enter("space"),e.consume(n),e.exit("space"),c):96===n?(i=e.enter("codeTextSequence"),r=0,l(n)):F(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),c):(e.enter("codeTextData"),s(n))}function s(n){return null===n||32===n||96===n||F(n)?(e.exit("codeTextData"),c(n)):(e.consume(n),s)}function l(t){return 96===t?(e.consume(t),r++,l):r===u?(e.exit("codeTextSequence"),e.exit("codeText"),n(t)):(i.type="codeTextData",s(t))}},resolve:function(e){let n,t,r=e.length-4,i=3;if(!("lineEnding"!==e[i][1].type&&"space"!==e[i][1].type||"lineEnding"!==e[r][1].type&&"space"!==e[r][1].type))for(n=i;++n<r;)if("codeTextData"===e[n][1].type){e[i][1].type="codeTextPadding",e[r][1].type="codeTextPadding",i+=2,r-=2;break}n=i-1,r++;for(;++n<=r;)void 0===t?n!==r&&"lineEnding"!==e[n][1].type&&(t=n):n!==r&&"lineEnding"!==e[n][1].type||(e[t][1].type="codeTextData",n!==t+2&&(e[t][1].end=e[n-1][1].end,e.splice(t+2,n-t-2),r-=n-t-2,n=t+2),t=void 0);return e},previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type}};const we={42:U,43:U,45:U,48:U,49:U,50:U,51:U,52:U,53:U,54:U,55:U,56:U,57:U,62:Z},Ce={91:ee},Te={[-2]:te,[-1]:te,32:te},ze={35:ie,42:N,45:[ue,N],60:se,61:ue,95:N,96:de,126:de},De={38:me,92:ge},Be={[-5]:xe,[-4]:xe,[-3]:xe,33:{name:"labelStartImage",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(n),e.exit("labelImageMarker"),i};function i(n){return 91===n?(e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelImage"),u):t(n)}function u(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ke.resolveAll},38:me,42:Se,60:[{name:"autolink",tokenize:function(e,n,t){let r=0;return function(n){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(n),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i};function i(n){return h(n)?(e.consume(n),u):s(n)}function u(e){return 43===e||45===e||46===e||p(e)?(r=1,o(e)):s(e)}function o(n){return 58===n?(e.consume(n),r=0,c):(43===n||45===n||46===n||p(n))&&r++<32?(e.consume(n),o):(r=0,s(n))}function c(r){return 62===r?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(r),e.exit("autolinkMarker"),e.exit("autolink"),n):null===r||32===r||60===r||g(r)?t(r):(e.consume(r),c)}function s(n){return 64===n?(e.consume(n),l):m(n)?(e.consume(n),s):t(n)}function l(e){return p(e)?a(e):t(e)}function a(t){return 46===t?(e.consume(t),r=0,l):62===t?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.exit("autolink"),n):f(t)}function f(n){if((45===n||p(n))&&r++<63){const t=45===n?f:a;return e.consume(n),t}return t(n)}}},Ae],91:{name:"labelStartLink",tokenize:function(e,n,t){const r=this;return function(n){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(n),e.exit("labelMarker"),e.exit("labelLink"),i};function i(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?t(e):n(e)}},resolveAll:ke.resolveAll},92:[{name:"hardBreakEscape",tokenize:function(e,n,t){return function(n){return e.enter("hardBreakEscape"),e.consume(n),r};function r(r){return F(r)?(e.exit("hardBreakEscape"),n(r)):t(r)}}},ge],93:ke,95:Se,96:Ie},_e={null:[Se,P]},Le={null:[42,95]},Me={null:[]};function Pe(e){const n=function(e){const n={};let t=-1;for(;++t<e.length;)f(n,e[t]);return n}([r,...(e||{}).extensions||[]]),t={defined:[],lazy:{},constructs:n,content:i(w),document:i(C),flow:i(M),string:i(O),text:i(j)};return t;function i(e){return function(n){return Q(t,e,n)}}}const Oe=/[\0\t\n\r]/g;function je(e,n){const t=Number.parseInt(e,n);return t<9||11===t||t>13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||65535==(65535&t)||65534==(65535&t)||t>1114111?"\ufffd":String.fromCharCode(t)}const He=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Re(e,n,t){if(n)return n;if(35===t.charCodeAt(0)){const e=t.charCodeAt(1),n=120===e||88===e;return je(t.slice(n?2:1),n?16:10)}return pe(t)||e}function qe(e){return e&&"object"==typeof e?"position"in e||"type"in e?Qe(e.position):"start"in e||"end"in e?Qe(e):"line"in e||"column"in e?Ve(e):"":""}function Ve(e){return Ne(e&&e.line)+":"+Ne(e&&e.column)}function Qe(e){return Ve(e&&e.start)+"-"+Ve(e&&e.end)}function Ne(e){return e&&"number"==typeof e?e:1}const Ue={}.hasOwnProperty,$e=function(e,n,t){return"string"!=typeof n&&(t=n,n=void 0),function(e){const n={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:l(ue),autolinkProtocol:T,autolinkEmail:T,atxHeading:l(ne),blockQuote:l(Y),characterEscape:T,characterReference:T,codeFenced:l(J),codeFencedFenceInfo:a,codeFencedFenceMeta:a,codeIndented:l(J,a),codeText:l(G,a),codeTextData:T,data:T,codeFlowValue:T,definition:l(K),definitionDestinationString:a,definitionLabelString:a,definitionTitleString:a,emphasis:l(ee),hardBreakEscape:l(te),hardBreakTrailing:l(te),htmlFlow:l(re,a),htmlFlowData:T,htmlText:l(re,a),htmlTextData:T,image:l(ie),label:a,link:l(ue),listItem:l(ce),listItemValue:g,listOrdered:l(oe,m),listUnordered:l(oe),paragraph:l(se),reference:Q,referenceString:a,resourceDestinationString:a,resourceTitleString:a,setextHeading:l(ne),strong:l(le),thematicBreak:l(fe)},exit:{atxHeading:d(),atxHeadingSequence:A,autolink:d(),autolinkEmail:Z,autolinkProtocol:W,blockQuote:d(),characterEscapeValue:z,characterReferenceMarkerHexadecimal:U,characterReferenceMarkerNumeric:U,characterReferenceValue:$,codeFenced:d(F),codeFencedFence:y,codeFencedFenceInfo:x,codeFencedFenceMeta:k,codeFlowValue:z,codeIndented:d(v),codeText:d(M),codeTextData:z,data:z,definition:d(),definitionDestinationString:E,definitionLabelString:b,definitionTitleString:S,emphasis:d(),hardBreakEscape:d(B),hardBreakTrailing:d(B),htmlFlow:d(_),htmlFlowData:z,htmlText:d(L),htmlTextData:z,image:d(O),label:H,labelText:j,lineEnding:D,link:d(P),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:N,resourceDestinationString:R,resourceTitleString:q,resource:V,setextHeading:d(C),setextHeadingLineSequence:w,setextHeadingText:I,strong:d(),thematicBreak:d()}};Ze(n,(e||{}).mdastExtensions||[]);const t={};return r;function r(e){let t={type:"root",children:[]};const r={stack:[t],tokenStack:[],config:n,enter:f,exit:h,buffer:a,resume:p,setData:c,getData:s},u=[];let o=-1;for(;++o<e.length;)if("listOrdered"===e[o][1].type||"listUnordered"===e[o][1].type)if("enter"===e[o][0])u.push(o);else{o=i(e,u.pop(),o)}for(o=-1;++o<e.length;){const t=n[e[o][0]];Ue.call(t,e[o][1].type)&&t[e[o][1].type].call(Object.assign({sliceSerialize:e[o][2].sliceSerialize},r),e[o][1])}if(r.tokenStack.length>0){const e=r.tokenStack[r.tokenStack.length-1];(e[1]||Je).call(r,void 0,e[0])}for(t.position={start:We(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:We(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},o=-1;++o<n.transforms.length;)t=n.transforms[o](t)||t;return t}function i(e,n,t){let r,i,u,o,c=n-1,s=-1,l=!1;for(;++c<=t;){const n=e[c];if("listUnordered"===n[1].type||"listOrdered"===n[1].type||"blockQuote"===n[1].type?("enter"===n[0]?s++:s--,o=void 0):"lineEndingBlank"===n[1].type?"enter"===n[0]&&(!r||o||s||u||(u=c),o=void 0):"linePrefix"===n[1].type||"listItemValue"===n[1].type||"listItemMarker"===n[1].type||"listItemPrefix"===n[1].type||"listItemPrefixWhitespace"===n[1].type||(o=void 0),!s&&"enter"===n[0]&&"listItemPrefix"===n[1].type||-1===s&&"exit"===n[0]&&("listUnordered"===n[1].type||"listOrdered"===n[1].type)){if(r){let o=c;for(i=void 0;o--;){const n=e[o];if("lineEnding"===n[1].type||"lineEndingBlank"===n[1].type){if("exit"===n[0])continue;i&&(e[i][1].type="lineEndingBlank",l=!0),n[1].type="lineEnding",i=o}else if("linePrefix"!==n[1].type&&"blockQuotePrefix"!==n[1].type&&"blockQuotePrefixWhitespace"!==n[1].type&&"blockQuoteMarker"!==n[1].type&&"listItemIndent"!==n[1].type)break}u&&(!i||u<i)&&(r._spread=!0),r.end=Object.assign({},i?e[i][1].start:n[1].end),e.splice(i||c,0,["exit",r,n[2]]),c++,t++}"listItemPrefix"===n[1].type&&(r={type:"listItem",_spread:!1,start:Object.assign({},n[1].start),end:void 0},e.splice(c,0,["enter",r,n[2]]),c++,t++,u=void 0,o=!0)}}return e[n][1]._spread=l,t}function c(e,n){t[e]=n}function s(e){return t[e]}function l(e,n){return t;function t(t){f.call(this,e(t),t),n&&n.call(this,t)}}function a(){this.stack.push({type:"fragment",children:[]})}function f(e,n,t){return this.stack[this.stack.length-1].children.push(e),this.stack.push(e),this.tokenStack.push([n,t]),e.position={start:We(n.start)},e}function d(e){return n;function n(n){e&&e.call(this,n),h.call(this,n)}}function h(e,n){const t=this.stack.pop(),r=this.tokenStack.pop();if(!r)throw new Error("Cannot close `"+e.type+"` ("+qe({start:e.start,end:e.end})+"): it\u2019s not open");if(r[0].type!==e.type)if(n)n.call(this,e,r[0]);else{(r[1]||Je).call(this,e,r[0])}return t.position.end=We(e.end),t}function p(){return function(e,n){const t=n||u;return o(e,"boolean"!=typeof t.includeImageAlt||t.includeImageAlt,"boolean"!=typeof t.includeHtml||t.includeHtml)}(this.stack.pop())}function m(){c("expectingFirstListItemValue",!0)}function g(e){if(s("expectingFirstListItemValue")){this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),c("expectingFirstListItemValue")}}function x(){const e=this.resume();this.stack[this.stack.length-1].lang=e}function k(){const e=this.resume();this.stack[this.stack.length-1].meta=e}function y(){s("flowCodeInside")||(this.buffer(),c("flowCodeInside",!0))}function F(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),c("flowCodeInside")}function v(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")}function b(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=X(this.sliceSerialize(e)).toLowerCase()}function S(){const e=this.resume();this.stack[this.stack.length-1].title=e}function E(){const e=this.resume();this.stack[this.stack.length-1].url=e}function A(e){const n=this.stack[this.stack.length-1];if(!n.depth){const t=this.sliceSerialize(e).length;n.depth=t}}function I(){c("setextHeadingSlurpLineEnding",!0)}function w(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).charCodeAt(0)?1:2}function C(){c("setextHeadingSlurpLineEnding")}function T(e){const n=this.stack[this.stack.length-1];let t=n.children[n.children.length-1];t&&"text"===t.type||(t=ae(),t.position={start:We(e.start)},n.children.push(t)),this.stack.push(t)}function z(e){const n=this.stack.pop();n.value+=this.sliceSerialize(e),n.position.end=We(e.end)}function D(e){const t=this.stack[this.stack.length-1];if(s("atHardBreak")){return t.children[t.children.length-1].position.end=We(e.end),void c("atHardBreak")}!s("setextHeadingSlurpLineEnding")&&n.canContainEols.includes(t.type)&&(T.call(this,e),z.call(this,e))}function B(){c("atHardBreak",!0)}function _(){const e=this.resume();this.stack[this.stack.length-1].value=e}function L(){const e=this.resume();this.stack[this.stack.length-1].value=e}function M(){const e=this.resume();this.stack[this.stack.length-1].value=e}function P(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function O(){const e=this.stack[this.stack.length-1];if(s("inReference")){const n=s("referenceType")||"shortcut";e.type+="Reference",e.referenceType=n,delete e.url,delete e.title}else delete e.identifier,delete e.label;c("referenceType")}function j(e){const n=this.sliceSerialize(e),t=this.stack[this.stack.length-2];t.label=function(e){return e.replace(He,Re)}(n),t.identifier=X(n).toLowerCase()}function H(){const e=this.stack[this.stack.length-1],n=this.resume(),t=this.stack[this.stack.length-1];if(c("inReference",!0),"link"===t.type){const n=e.children;t.children=n}else t.alt=n}function R(){const e=this.resume();this.stack[this.stack.length-1].url=e}function q(){const e=this.resume();this.stack[this.stack.length-1].title=e}function V(){c("inReference")}function Q(){c("referenceType","collapsed")}function N(e){const n=this.resume(),t=this.stack[this.stack.length-1];t.label=n,t.identifier=X(this.sliceSerialize(e)).toLowerCase(),c("referenceType","full")}function U(e){c("characterReferenceType",e.type)}function $(e){const n=this.sliceSerialize(e),t=s("characterReferenceType");let r;if(t)r=je(n,"characterReferenceMarkerNumeric"===t?10:16),c("characterReferenceType");else{r=pe(n)}const i=this.stack.pop();i.value+=r,i.position.end=We(e.end)}function W(e){z.call(this,e);this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function Z(e){z.call(this,e);this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function Y(){return{type:"blockquote",children:[]}}function J(){return{type:"code",lang:null,meta:null,value:""}}function G(){return{type:"inlineCode",value:""}}function K(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function ee(){return{type:"emphasis",children:[]}}function ne(){return{type:"heading",depth:void 0,children:[]}}function te(){return{type:"break"}}function re(){return{type:"html",value:""}}function ie(){return{type:"image",title:null,url:"",alt:null}}function ue(){return{type:"link",title:null,url:"",children:[]}}function oe(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function ce(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function se(){return{type:"paragraph",children:[]}}function le(){return{type:"strong",children:[]}}function ae(){return{type:"text",value:""}}function fe(){return{type:"thematicBreak"}}}(t)(function(e){for(;!D(e););return e}(Pe(t).document().write(function(){let e,n=1,t="",r=!0;return function(i,u,o){const c=[];let s,l,a,f,d;for(i=t+i.toString(u),a=0,t="",r&&(65279===i.charCodeAt(0)&&a++,r=void 0);a<i.length;){if(Oe.lastIndex=a,s=Oe.exec(i),f=s&&void 0!==s.index?s.index:i.length,d=i.charCodeAt(f),!s){t=i.slice(a);break}if(10===d&&a===f&&e)c.push(-3),e=void 0;else switch(e&&(c.push(-5),e=void 0),a<f&&(c.push(i.slice(a,f)),n+=f-a),d){case 0:c.push(65533),n++;break;case 9:for(l=4*Math.ceil(n/4),c.push(-2);n++<l;)c.push(-1);break;case 10:c.push(-4),n=1;break;default:e=!0,n=1}a=f+1}return o&&(e&&c.push(-5),t&&c.push(t),c.push(null)),c}}()(e,n,!0))))};function We(e){return{line:e.line,column:e.column,offset:e.offset}}function Ze(e,n){let t=-1;for(;++t<n.length;){const r=n[t];Array.isArray(r)?Ze(e,r):Ye(e,r)}}function Ye(e,n){let t;for(t in n)if(Ue.call(n,t))if("canContainEols"===t){const r=n[t];r&&e[t].push(...r)}else if("transforms"===t){const r=n[t];r&&e[t].push(...r)}else if("enter"===t||"exit"===t){const r=n[t];r&&Object.assign(e[t],r)}}function Je(e,n){throw e?new Error("Cannot close `"+e.type+"` ("+qe({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+qe({start:n.start,end:n.end})+") is open"):new Error("Cannot close document, a token (`"+n.type+"`, "+qe({start:n.start,end:n.end})+") is still open")}var Ge=t(18464);function Ke(e){const n=function(e){const n=e.replace(/\n{2,}/g,"\n");return(0,Ge.Z)(n)}(e),{children:t}=$e(n),r=[[]];let i=0;function u(e,n="normal"){if("text"===e.type){e.value.split("\n").forEach(((e,t)=>{0!==t&&(i++,r.push([])),e.split(" ").forEach((e=>{e&&r[i].push({content:e,type:n})}))}))}else"strong"!==e.type&&"emphasis"!==e.type||e.children.forEach((n=>{u(n,e.type)}))}return t.forEach((e=>{"paragraph"===e.type&&e.children.forEach((e=>{u(e)}))})),r}function Xe(e,n){var t;return en(e,[],(t=n.content,Intl.Segmenter?[...(new Intl.Segmenter).segment(t)].map((e=>e.segment)):[...t]),n.type)}function en(e,n,t,r){if(0===t.length)return[{content:n.join(""),type:r},{content:"",type:r}];const[i,...u]=t,o=[...n,i];return e([{content:o.join(""),type:r}])?en(e,o,u,r):(0===n.length&&i&&(n.push(i),t.shift()),[{content:n.join(""),type:r},{content:t.join(""),type:r}])}function nn(e,n){if(e.some((({content:e})=>e.includes("\n"))))throw new Error("splitLineToFitWidth does not support newlines in the line");return tn(e,n)}function tn(e,n,t=[],r=[]){if(0===e.length)return r.length>0&&t.push(r),t.length>0?t:[];let i="";" "===e[0].content&&(i=" ",e.shift());const u=e.shift()??{content:" ",type:"normal"},o=[...r];if(""!==i&&o.push({content:i,type:"normal"}),o.push(u),n(o))return tn(e,n,t,o);if(r.length>0)t.push(r),e.unshift(u);else if(u.content){const[r,i]=Xe(n,u);t.push([r]),i.content&&e.unshift(i)}return tn(e,n,t)}function rn(e,n,t){return e.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",n*t-.1+"em").attr("dy",t+"em")}function un(e,n,t){const r=e.append("text"),i=rn(r,1,n);cn(i,t);const u=i.node().getComputedTextLength();return r.remove(),u}function on(e,n,t){var r;const i=e.append("text"),u=rn(i,1,n);cn(u,[{content:t,type:"normal"}]);const o=null==(r=u.node())?void 0:r.getBoundingClientRect();return o&&i.remove(),o}function cn(e,n){e.text(""),n.forEach(((n,t)=>{const r=e.append("tspan").attr("font-style","emphasis"===n.type?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight","strong"===n.type?"bold":"normal");0===t?r.text(n.content):r.text(" "+n.content)}))}const sn=(e,n="",{style:t="",isTitle:r=!1,classes:u="",useHtmlLabels:o=!0,isNode:c=!0,width:s=200,addSvgBackground:l=!1}={})=>{if(i.l.info("createText",n,t,r,u,o,c,l),o){const r=function(e){const{children:n}=$e(e);return n.map((function e(n){return"text"===n.type?n.value.replace(/\n/g,"<br/>"):"strong"===n.type?`<strong>${n.children.map(e).join("")}</strong>`:"emphasis"===n.type?`<em>${n.children.map(e).join("")}</em>`:"paragraph"===n.type?`<p>${n.children.map(e).join("")}</p>`:`Unsupported markdown: ${n.type}`})).join("")}(n),o=function(e,n,t,r,i=!1){const u=e.append("foreignObject"),o=u.append("xhtml:div"),c=n.label,s=n.isNode?"nodeLabel":"edgeLabel";var l,a;o.html(`\n <span class="${s} ${r}" `+(n.labelStyle?'style="'+n.labelStyle+'"':"")+">"+c+"</span>"),l=o,(a=n.labelStyle)&&l.attr("style",a),o.style("display","table-cell"),o.style("white-space","nowrap"),o.style("max-width",t+"px"),o.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&o.attr("class","labelBkg");let f=o.node().getBoundingClientRect();return f.width===t&&(o.style("display","table"),o.style("white-space","break-spaces"),o.style("width",t+"px"),f=o.node().getBoundingClientRect()),u.style("width",f.width),u.style("height",f.height),u.node()}(e,{isNode:c,label:(0,i.J)(r).replace(/fa[blrs]?:fa-[\w-]+/g,(e=>`<i class='${e.replace(":"," ")}'></i>`)),labelStyle:t.replace("fill:","color:")},s,u,l);return o}{const t=function(e,n,t,r=!1){const i=n.append("g"),u=i.insert("rect").attr("class","background"),o=i.append("text").attr("y","-10.1");let c=0;for(const s of t){const n=n=>un(i,1.1,n)<=e,t=n(s)?[s]:nn(s,n);for(const e of t)cn(rn(o,c,1.1),e),c++}if(r){const e=o.node().getBBox(),n=2;return u.attr("x",-n).attr("y",-n).attr("width",e.width+2*n).attr("height",e.height+2*n),i.node()}return o.node()}(s,e,Ke(n),l);return t}}}}]); \ No newline at end of file diff --git a/assets/js/841adc37.c737b647.js b/assets/js/841adc37.c737b647.js new file mode 100644 index 0000000000..7b1219495c --- /dev/null +++ b/assets/js/841adc37.c737b647.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6768],{67057:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>l,default:()=>o,frontMatter:()=>m,metadata:()=>r,toc:()=>c});var a=n(85893),i=n(11151);const m={sidebar_position:4,description:"Turbine modelling"},l="Turbine modelling",r={id:"about/modelling/setup/models/turbine_modeling",title:"Turbine modelling",description:"Turbine modelling",source:"@site/docs/about/modelling/setup/models/turbine_modeling.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/turbine_modeling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/turbine_modeling.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,description:"Turbine modelling"},sidebar:"about",previous:{title:"Fixed speed pressure control",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/"},next:{title:"Fuel types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types"}},t={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Combining a compressor train and a turbine into one model",id:"combining-a-compressor-train-and-a-turbine-into-one-model",level:3},{value:"Format",id:"format-1",level:2},{value:"Examples",id:"examples",level:2}];function d(e){const s={annotation:"annotation",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",math:"math",mfrac:"mfrac",mi:"mi",mo:"mo",mrow:"mrow",p:"p",pre:"pre",semantics:"semantics",span:"span",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"turbine-modelling",children:"Turbine modelling"}),"\n",(0,a.jsx)(s.p,{children:"The turbine model requires values for efficiencies vs corresponding loads. Currently also a lower heating value needs to\nbe specified (planned feature is to get this from the fuel type used)"}),"\n",(0,a.jsx)(s.p,{children:"The load values are given in MW, while efficiency values are numbers between 0 and 1."}),"\n",(0,a.jsx)(s.p,{children:"The fuel usage for a turbine is equal to"}),"\n",(0,a.jsx)(s.span,{className:"katex-display",children:(0,a.jsxs)(s.span,{className:"katex",children:[(0,a.jsx)(s.span,{className:"katex-mathml",children:(0,a.jsx)(s.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,a.jsxs)(s.semantics,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"F"}),(0,a.jsx)(s.mi,{children:"U"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"U"}),(0,a.jsx)(s.mi,{children:"S"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"G"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mo,{children:"="}),(0,a.jsxs)(s.mfrac,{children:[(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"O"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"M"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"G"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"W"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mo,{children:"\u2217"}),(0,a.jsx)(s.mi,{children:"S"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsx)(s.mi,{children:"O"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mi,{children:"S"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"P"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"R"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"D"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"Y"})]}),(0,a.jsxs)(s.mrow,{children:[(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"O"}),(0,a.jsx)(s.mi,{children:"W"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"R"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"H"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"T"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{children:"G"}),(0,a.jsx)(s.mi,{mathvariant:"normal",children:"_"}),(0,a.jsx)(s.mi,{children:"V"}),(0,a.jsx)(s.mi,{children:"A"}),(0,a.jsx)(s.mi,{children:"L"}),(0,a.jsx)(s.mi,{children:"U"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mo,{children:"\u2217"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"F"}),(0,a.jsx)(s.mi,{children:"F"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsx)(s.mi,{children:"I"}),(0,a.jsx)(s.mi,{children:"E"}),(0,a.jsx)(s.mi,{children:"N"}),(0,a.jsx)(s.mi,{children:"C"}),(0,a.jsx)(s.mi,{children:"Y"})]})]})]}),(0,a.jsx)(s.annotation,{encoding:"application/x-tex",children:"FUEL\\_USAGE = \\frac{LOAD\\_IN\\_MEGAWATT * SECONDS\\_PER\\_DAY}{LOWER\\_HEATING\\_VALUE * EFFICIENCY}"})]})})}),(0,a.jsxs)(s.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"0.9933em",verticalAlign:"-0.31em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"F"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"U"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"L"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"U"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"GE"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(s.span,{className:"mrel",children:"="}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(s.span,{className:"base",children:[(0,a.jsx)(s.span,{className:"strut",style:{height:"2.3793em",verticalAlign:"-0.996em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mopen nulldelimiter"}),(0,a.jsx)(s.span,{className:"mfrac",children:(0,a.jsxs)(s.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(s.span,{className:"vlist-r",children:[(0,a.jsxs)(s.span,{className:"vlist",style:{height:"1.3833em"},children:[(0,a.jsxs)(s.span,{style:{top:"-2.314em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"L"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"O"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"ER"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.08125em"},children:"H"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"T"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"NG"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"V"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"LU"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u2217"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"EFF"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"C"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07153em"},children:"ENC"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"Y"})]})]}),(0,a.jsxs)(s.span,{style:{top:"-3.23em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsx)(s.span,{className:"frac-line",style:{borderBottomWidth:"0.04em"}})]}),(0,a.jsxs)(s.span,{style:{top:"-3.7em"},children:[(0,a.jsx)(s.span,{className:"pstrut",style:{height:"3em"}}),(0,a.jsxs)(s.span,{className:"mord",children:[(0,a.jsx)(s.span,{className:"mord mathnormal",children:"L"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"O"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.07847em"},children:"I"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"N"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"MEG"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"W"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"TT"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mbin",children:"\u2217"}),(0,a.jsx)(s.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.10903em"},children:"SECON"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"S"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.00773em"},children:"PER"}),(0,a.jsx)(s.span,{className:"mord",style:{marginRight:"0.02778em"},children:"_"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.02778em"},children:"D"}),(0,a.jsx)(s.span,{className:"mord mathnormal",children:"A"}),(0,a.jsx)(s.span,{className:"mord mathnormal",style:{marginRight:"0.22222em"},children:"Y"})]})]})]}),(0,a.jsx)(s.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(s.span,{className:"vlist-r",children:(0,a.jsx)(s.span,{className:"vlist",style:{height:"0.996em"},children:(0,a.jsx)(s.span,{})})})]})}),(0,a.jsx)(s.span,{className:"mclose nulldelimiter"})]})]})]})]})}),"\n",(0,a.jsx)(s.p,{children:"When evaluated for a load (in units MW), the efficiency is evaluated by linearly interpolating the input load vs\nefficiency data."}),"\n",(0,a.jsx)(s.p,{children:"The input values for load and efficiency are lists which both MUST START WITH 0! The user is thus responsible for the\nbehaviour also for small load values."}),"\n",(0,a.jsx)(s.p,{children:"For load values equal to 0, the fuel usage is also set to 0."}),"\n",(0,a.jsxs)(s.p,{children:["Lower heating value is given in units ",(0,a.jsxs)(s.em,{children:["MJ/Sm",(0,a.jsx)("sup",{children:"3"})]})]}),"\n",(0,a.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n TURBINE_LOADS: <list of power values in mega watt>\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,a.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})}),"\n",(0,a.jsx)(s.h3,{id:"combining-a-compressor-train-and-a-turbine-into-one-model",children:"Combining a compressor train and a turbine into one model"}),"\n",(0,a.jsx)(s.p,{children:"To model a turbine driven compressor train, a compressor train model needs to be combined with a turbine model. The\ncalculated shaft power required for the compressor train, will then be the input of the turbine model to calculate\nfuel usage."}),"\n",(0,a.jsx)(s.h2,{id:"format-1",children:"Format"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine model, for reference>\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: <reference to compressor train model defined in [MODELS](../references/keywords/MODELS) or [FACILITY_INPUTS](../references/keywords/FACILITY_INPUTS) (of type COMPRESSOR_TABULAR)>\n TURBINE_MODEL: <reference to a turbine model defined in [MODELS](../references/keywords/MODELS) (of type TURBINE)>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,a.jsx)(s.h2,{id:"examples",children:"Examples"}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: simplified_compressor_train_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TURBINE_MODEL: compressor_train_turbine\n POWER_ADJUSTMENT_CONSTANT: 10\n"})}),"\n",(0,a.jsxs)(s.p,{children:["Turbine combined with presampled compressor model (",(0,a.jsx)(s.code,{children:"COMPRESSOR_TABULAR<COMPRESSOR_TABULAR facility input type>"}),")"]}),"\n",(0,a.jsx)(s.pre,{children:(0,a.jsx)(s.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_sampled_tabulated_model_with_turbine\n TYPE: COMPRESSOR_WITH_TURBINE\n COMPRESSOR_MODEL: compressor_sampled_tabulated_model\n TURBINE_MODEL: compressor_train_turbine\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function o(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>r,a:()=>l});var a=n(67294);const i={},m=a.createContext(i);function l(e){const s=a.useContext(m);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),a.createElement(m.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8443.c83222a4.js b/assets/js/8443.c83222a4.js new file mode 100644 index 0000000000..bd2eee631c --- /dev/null +++ b/assets/js/8443.c83222a4.js @@ -0,0 +1,2 @@ +/*! For license information please see 8443.c83222a4.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8443],{68443:(t,e,n)=>{"use strict";t.exports=n(80295)},1228:(t,e,n)=>{"use strict";var i=n(12856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},9050:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(12856),a=n(64910),u=n(63561),c=n(1228),l=n(23109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"<p>"+e(t)+"</p>"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},83354:(t,e,n)=>{"use strict";var i=n(12856),s=n(64910),r=n(23109),o=n(9050),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('<div class="'+i.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else i.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s<n&&this.$menu.scrollTop(i+(n-s))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:o.extractDatum(t),value:o.extractValue(t),datasetName:o.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){i.each(this.datasets,(function(e){e.update(t)}))},empty:function(){i.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,i.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=o,t.exports=u},60050:(t,e,n)=>{"use strict";var i=n(12856),s=n(64910);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},23109:(t,e,n)=>{"use strict";var i=n(70624),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s<r;s+=1)i=!1===t[s].apply(e,n);return!i}}t.exports={onSync:function(t,e,n){return r.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return r.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;t=t.split(s);for(;e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,r,a,u;if(!this._callbacks)return this;t=t.split(s),r=[].slice.call(arguments,1);for(;(e=t.shift())&&(n=this._callbacks[e]);)a=o(n.sync,this,[e].concat(r)),u=o(n.async,this,[e].concat(r)),a()&&i(u);return this}}},63561:t=>{"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},32534:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(12856),r=n(64910),o=n(23109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(12856),r=n(64910),o=n(60050),a=n(32534),u=n(83354),c=n(63561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(28840),t.exports=h},64910:t=>{"use strict";t.exports={element:null}},96177:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},12856:(t,e,n)=>{"use strict";var i,s=n(58820),r=n(64910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"<em>";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"</em>";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},69983:(t,e,n)=>{"use strict";var i=n(12856),s=n(533),r=n(96177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},28840:(t,e,n)=>{"use strict";t.exports={hits:n(69983),popularIn:n(64445)}},64445:(t,e,n)=>{"use strict";var i=n(12856),s=n(533),r=n(96177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r<a.hits.length;++r)n.push(a.hits[r]);l(n,a)}}))}l([])}}))}}},80295:(t,e,n)=>{"use strict";var i=n(6990);n(64910).element=i;var s=n(12856);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(6549),a=n(60050);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},533:t=>{t.exports="0.38.1"},6990:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n<i;n++)this[n]=t[n];this.length=i,this.selector=e||""}function W(t,i,s){for(n in i)s&&(R(i[n])||k(i[n]))?(R(i[n])&&!R(t[n])&&(t[n]={}),k(i[n])&&!k(t[n])&&(t[n]=[]),W(t[n],i[n],s)):i[n]!==e&&(t[n]=i[n])}function Z(t,e){return null==e?i(t):i(t).filter(e)}function X(t,e,n,i){return P(e)?e.call(t,n,i):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function J(t,n){var i=t.className||"",s=i&&i.baseVal!==e;if(n===e)return s?i.baseVal:i;s?i.baseVal=n:t.className=n}function Y(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?i.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,i=t.childNodes.length;n<i;n++)tt(t.childNodes[n],e)}return O.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,s=t.parentNode,r=!s;return r&&(s=D).appendChild(t),i=~O.qsa(s,e).indexOf(t),r&&D.removeChild(t),i},r=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},o=function(t){return c.call(t,(function(e,n){return t.indexOf(e)==n}))},O.fragment=function(t,n,s){var r,o,a;return m.test(t)&&(r=i(h.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(v,"<$1></$2>")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i<t.length;i++)null!=(n=e(t[i],i))&&r.push(n);else for(s in t)null!=(n=e(t[s],s))&&r.push(n);return H(r)},i.each=function(t,e){var n,i;if(q(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(i in t)if(!1===e.call(t[i],i,t[i]))return t;return t},i.grep=function(t,e){return c.call(t,e)},t.JSON&&(i.parseJSON=JSON.parse),i.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){$["[object "+e+"]"]=e.toLowerCase()})),i.fn={constructor:O.Z,length:0,forEach:a.forEach,reduce:a.reduce,push:a.push,sort:a.sort,splice:a.splice,indexOf:a.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=O.isZ(e)?e.toArray():e;return u.apply(O.isZ(this)?this.toArray():this,n)},map:function(t){return i(i.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return i(l.apply(this,arguments))},ready:function(t){return E.test(h.readyState)&&h.body?t(i):h.addEventListener("DOMContentLoaded",(function(){t(i)}),!1),this},get:function(t){return t===e?l.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},58820:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h<p;){var f=r.charAt(h++),d=f.charCodeAt(),g=void 0;if(d<32||d>126){if(d>=55296&&d<=56319&&h<p){var m=r.charCodeAt(h++);56320==(64512&m)?d=((1023&d)<<10)+(1023&m)+65536:h--}g="\\"+d.toString(16).toUpperCase()+" "}else g=o.escapeEverything?n.test(f)?"\\"+f:"\\"+d.toString(16).toUpperCase()+" ":/[\t\n\f\r\x0B]/.test(f)?"\\"+d.toString(16).toUpperCase()+" ":"\\"==f||!u&&('"'==f&&a==f||"'"==f&&a==f)||u&&i.test(f)?"\\"+f:f;l+=g}return u&&(/^-[-\d]/.test(l)?l="\\-"+l.slice(1):/\d/.test(c)&&(l="\\3"+c+" "+l.slice(1))),l=l.replace(s,(function(t,e,n){return e&&e.length%2?t:(e||"")+n})),!u&&o.wrap?a+l+a:l};r.options={escapeEverything:!1,isIdentifier:!1,quotes:"single",wrap:!1},r.version="3.0.0",t.exports=r},70624:(t,e,n)=>{"use strict";var i,s,r,o=[n(15525),n(64785),n(28291),n(2709),n(42506),n(79176)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a<t;)s[a].run();a=-1,t=u.length}s=null,a=-1,i=!1,clearTimeout(e)}}for(var p=-1,f=o.length;++p<f;)if(o[p]&&o[p].test&&o[p].test()){r=o[p].install(h);break}function d(t,e){this.fun=t,this.array=e}d.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new d(t,e)),c||i||(c=!0,r())}},2709:(t,e,n)=>{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},28291:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},64785:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},42506:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},79176:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/8443.c83222a4.js.LICENSE.txt b/assets/js/8443.c83222a4.js.LICENSE.txt new file mode 100644 index 0000000000..4f7ccd8a76 --- /dev/null +++ b/assets/js/8443.c83222a4.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/85.0502304d.js b/assets/js/85.0502304d.js new file mode 100644 index 0000000000..42b9506145 --- /dev/null +++ b/assets/js/85.0502304d.js @@ -0,0 +1,20431 @@ +"use strict"; +exports.id = 85; +exports.ids = [85]; +exports.modules = { + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 59792: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61691); +/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71610); +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 92346: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(48451); + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 80085: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28758); +/* harmony import */ var lodash_es_clone_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(92346); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(59792); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(51117); +/* harmony import */ var _edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(78932); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22424); +var _a, _b; + + + + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 7], $V1 = [1, 13], $V2 = [1, 14], $V3 = [1, 15], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 15, 16, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Vd = [8, 15, 16, 21, 27, 28, 29, 30, 31, 32, 40, 44, 47], $Ve = [1, 49]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "spaceLines": 3, "SPACELINE": 4, "NL": 5, "seperator": 6, "SPACE": 7, "EOF": 8, "start": 9, "BLOCK_DIAGRAM_KEY": 10, "document": 11, "stop": 12, "statement": 13, "link": 14, "LINK": 15, "START_LINK": 16, "LINK_LABEL": 17, "STR": 18, "nodeStatement": 19, "columnsStatement": 20, "SPACE_BLOCK": 21, "blockStatement": 22, "classDefStatement": 23, "cssClassStatement": 24, "styleStatement": 25, "node": 26, "SIZE": 27, "COLUMNS": 28, "id-block": 29, "end": 30, "block": 31, "NODE_ID": 32, "nodeShapeNLabel": 33, "dirList": 34, "DIR": 35, "NODE_DSTART": 36, "NODE_DEND": 37, "BLOCK_ARROW_START": 38, "BLOCK_ARROW_END": 39, "classDef": 40, "CLASSDEF_ID": 41, "CLASSDEF_STYLEOPTS": 42, "DEFAULT": 43, "class": 44, "CLASSENTITY_IDS": 45, "STYLECLASS": 46, "style": 47, "STYLE_ENTITY_IDS": 48, "STYLE_DEFINITION_DATA": 49, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 4: "SPACELINE", 5: "NL", 7: "SPACE", 8: "EOF", 10: "BLOCK_DIAGRAM_KEY", 15: "LINK", 16: "START_LINK", 17: "LINK_LABEL", 18: "STR", 21: "SPACE_BLOCK", 27: "SIZE", 28: "COLUMNS", 29: "id-block", 30: "end", 31: "block", 32: "NODE_ID", 35: "DIR", 36: "NODE_DSTART", 37: "NODE_DEND", 38: "BLOCK_ARROW_START", 39: "BLOCK_ARROW_END", 40: "classDef", 41: "CLASSDEF_ID", 42: "CLASSDEF_STYLEOPTS", 43: "DEFAULT", 44: "class", 45: "CLASSENTITY_IDS", 46: "STYLECLASS", 47: "style", 48: "STYLE_ENTITY_IDS", 49: "STYLE_DEFINITION_DATA" }, + productions_: [0, [3, 1], [3, 2], [3, 2], [6, 1], [6, 1], [6, 1], [9, 3], [12, 1], [12, 1], [12, 2], [12, 2], [11, 1], [11, 2], [14, 1], [14, 4], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [19, 3], [19, 2], [19, 1], [20, 1], [22, 4], [22, 3], [26, 1], [26, 2], [34, 1], [34, 2], [33, 3], [33, 4], [23, 3], [23, 3], [24, 3], [25, 3]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + yy.getLogger().debug("Rule: seperator (NL) "); + break; + case 5: + yy.getLogger().debug("Rule: seperator (Space) "); + break; + case 6: + yy.getLogger().debug("Rule: seperator (EOF) "); + break; + case 7: + yy.getLogger().debug("Rule: hierarchy: ", $$[$0 - 1]); + yy.setHierarchy($$[$0 - 1]); + break; + case 8: + yy.getLogger().debug("Stop NL "); + break; + case 9: + yy.getLogger().debug("Stop EOF "); + break; + case 10: + yy.getLogger().debug("Stop NL2 "); + break; + case 11: + yy.getLogger().debug("Stop EOF2 "); + break; + case 12: + yy.getLogger().debug("Rule: statement: ", $$[$0]); + typeof $$[$0].length === "number" ? this.$ = $$[$0] : this.$ = [$$[$0]]; + break; + case 13: + yy.getLogger().debug("Rule: statement #2: ", $$[$0 - 1]); + this.$ = [$$[$0 - 1]].concat($$[$0]); + break; + case 14: + yy.getLogger().debug("Rule: link: ", $$[$0], yytext); + this.$ = { edgeTypeStr: $$[$0], label: "" }; + break; + case 15: + yy.getLogger().debug("Rule: LABEL link: ", $$[$0 - 3], $$[$0 - 1], $$[$0]); + this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] }; + break; + case 18: + const num = parseInt($$[$0]); + const spaceId = yy.generateId(); + this.$ = { id: spaceId, type: "space", label: "", width: num, children: [] }; + break; + case 23: + yy.getLogger().debug("Rule: (nodeStatement link node) ", $$[$0 - 2], $$[$0 - 1], $$[$0], " typestr: ", $$[$0 - 1].edgeTypeStr); + const edgeData = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr); + this.$ = [ + { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions }, + { id: $$[$0 - 2].id + "-" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: "edge", directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: "arrow_open" }, + { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions } + ]; + break; + case 24: + yy.getLogger().debug("Rule: nodeStatement (abc88 node size) ", $$[$0 - 1], $$[$0]); + this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) }; + break; + case 25: + yy.getLogger().debug("Rule: nodeStatement (node) ", $$[$0]); + this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 }; + break; + case 26: + yy.getLogger().debug("APA123", this ? this : "na"); + yy.getLogger().debug("COLUMNS: ", $$[$0]); + this.$ = { type: "column-setting", columns: $$[$0] === "auto" ? -1 : parseInt($$[$0]) }; + break; + case 27: + yy.getLogger().debug("Rule: id-block statement : ", $$[$0 - 2], $$[$0 - 1]); + yy.generateId(); + this.$ = { ...$$[$0 - 2], type: "composite", children: $$[$0 - 1] }; + break; + case 28: + yy.getLogger().debug("Rule: blockStatement : ", $$[$0 - 2], $$[$0 - 1], $$[$0]); + const id = yy.generateId(); + this.$ = { id, type: "composite", label: "", children: $$[$0 - 1] }; + break; + case 29: + yy.getLogger().debug("Rule: node (NODE_ID seperator): ", $$[$0]); + this.$ = { id: $$[$0] }; + break; + case 30: + yy.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel seperator): ", $$[$0 - 1], $$[$0]); + this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions }; + break; + case 31: + yy.getLogger().debug("Rule: dirList: ", $$[$0]); + this.$ = [$$[$0]]; + break; + case 32: + yy.getLogger().debug("Rule: dirList: ", $$[$0 - 1], $$[$0]); + this.$ = [$$[$0 - 1]].concat($$[$0]); + break; + case 33: + yy.getLogger().debug("Rule: nodeShapeNLabel: ", $$[$0 - 2], $$[$0 - 1], $$[$0]); + this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] }; + break; + case 34: + yy.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ", $$[$0 - 3], $$[$0 - 2], " #3:", $$[$0 - 1], $$[$0]); + this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] }; + break; + case 35: + case 36: + this.$ = { type: "classDef", id: $$[$0 - 1].trim(), css: $$[$0].trim() }; + break; + case 37: + this.$ = { type: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; + break; + case 38: + this.$ = { type: "applyStyles", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() }; + break; + } + }, + table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 11: 3, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 8: [1, 20] }, o($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 21: $V0, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }), o($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o($V9, [2, 17]), o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), o($V9, [2, 21]), o($V9, [2, 22]), o($Vc, [2, 25], { 27: [1, 25] }), o($V9, [2, 26]), { 19: 26, 26: 12, 32: $V4 }, { 11: 27, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 41: [1, 28], 43: [1, 29] }, { 45: [1, 30] }, { 48: [1, 31] }, o($Vd, [2, 29], { 33: 32, 36: [1, 33], 38: [1, 34] }), { 1: [2, 7] }, o($V8, [2, 13]), { 26: 35, 32: $V4 }, { 32: [2, 14] }, { 17: [1, 36] }, o($Vc, [2, 24]), { 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 30: [1, 38] }, { 42: [1, 39] }, { 42: [1, 40] }, { 46: [1, 41] }, { 49: [1, 42] }, o($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o($V9, [2, 28]), o($V9, [2, 35]), o($V9, [2, 36]), o($V9, [2, 37]), o($V9, [2, 38]), { 37: [1, 47] }, { 34: 48, 35: $Ve }, { 15: [1, 50] }, o($V9, [2, 27]), o($Vd, [2, 33]), { 39: [1, 51] }, { 34: 52, 35: $Ve, 39: [2, 31] }, { 32: [2, 15] }, o($Vd, [2, 34]), { 39: [2, 32] }], + defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 10; + case 1: + yy.getLogger().debug("Found space-block"); + return 31; + case 2: + yy.getLogger().debug("Found nl-block"); + return 31; + case 3: + yy.getLogger().debug("Found space-block"); + return 29; + case 4: + yy.getLogger().debug(".", yy_.yytext); + break; + case 5: + yy.getLogger().debug("_", yy_.yytext); + break; + case 6: + return 5; + case 7: + yy_.yytext = -1; + return 28; + case 8: + yy_.yytext = yy_.yytext.replace(/columns\s+/, ""); + yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); + return 28; + case 9: + this.pushState("md_string"); + break; + case 10: + return "MD_STR"; + case 11: + this.popState(); + break; + case 12: + this.pushState("string"); + break; + case 13: + yy.getLogger().debug("LEX: POPPING STR:", yy_.yytext); + this.popState(); + break; + case 14: + yy.getLogger().debug("LEX: STR end:", yy_.yytext); + return "STR"; + case 15: + yy_.yytext = yy_.yytext.replace(/space\:/, ""); + yy.getLogger().debug("SPACE NUM (LEX)", yy_.yytext); + return 21; + case 16: + yy_.yytext = "1"; + yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); + return 21; + case 17: + return 43; + case 18: + return "LINKSTYLE"; + case 19: + return "INTERPOLATE"; + case 20: + this.pushState("CLASSDEF"); + return 40; + case 21: + this.popState(); + this.pushState("CLASSDEFID"); + return "DEFAULT_CLASSDEF_ID"; + case 22: + this.popState(); + this.pushState("CLASSDEFID"); + return 41; + case 23: + this.popState(); + return 42; + case 24: + this.pushState("CLASS"); + return 44; + case 25: + this.popState(); + this.pushState("CLASS_STYLE"); + return 45; + case 26: + this.popState(); + return 46; + case 27: + this.pushState("STYLE_STMNT"); + return 47; + case 28: + this.popState(); + this.pushState("STYLE_DEFINITION"); + return 48; + case 29: + this.popState(); + return 49; + case 30: + this.pushState("acc_title"); + return "acc_title"; + case 31: + this.popState(); + return "acc_title_value"; + case 32: + this.pushState("acc_descr"); + return "acc_descr"; + case 33: + this.popState(); + return "acc_descr_value"; + case 34: + this.pushState("acc_descr_multiline"); + break; + case 35: + this.popState(); + break; + case 36: + return "acc_descr_multiline_value"; + case 37: + return 30; + case 38: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 39: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 40: + this.popState(); + yy.getLogger().debug("Lex: ))"); + return "NODE_DEND"; + case 41: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 42: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 43: + this.popState(); + yy.getLogger().debug("Lex: (-"); + return "NODE_DEND"; + case 44: + this.popState(); + yy.getLogger().debug("Lex: -)"); + return "NODE_DEND"; + case 45: + this.popState(); + yy.getLogger().debug("Lex: (("); + return "NODE_DEND"; + case 46: + this.popState(); + yy.getLogger().debug("Lex: ]]"); + return "NODE_DEND"; + case 47: + this.popState(); + yy.getLogger().debug("Lex: ("); + return "NODE_DEND"; + case 48: + this.popState(); + yy.getLogger().debug("Lex: ])"); + return "NODE_DEND"; + case 49: + this.popState(); + yy.getLogger().debug("Lex: /]"); + return "NODE_DEND"; + case 50: + this.popState(); + yy.getLogger().debug("Lex: /]"); + return "NODE_DEND"; + case 51: + this.popState(); + yy.getLogger().debug("Lex: )]"); + return "NODE_DEND"; + case 52: + this.popState(); + yy.getLogger().debug("Lex: )"); + return "NODE_DEND"; + case 53: + this.popState(); + yy.getLogger().debug("Lex: ]>"); + return "NODE_DEND"; + case 54: + this.popState(); + yy.getLogger().debug("Lex: ]"); + return "NODE_DEND"; + case 55: + yy.getLogger().debug("Lexa: -)"); + this.pushState("NODE"); + return 36; + case 56: + yy.getLogger().debug("Lexa: (-"); + this.pushState("NODE"); + return 36; + case 57: + yy.getLogger().debug("Lexa: ))"); + this.pushState("NODE"); + return 36; + case 58: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 59: + yy.getLogger().debug("Lex: ((("); + this.pushState("NODE"); + return 36; + case 60: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 61: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 62: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 63: + yy.getLogger().debug("Lexc: >"); + this.pushState("NODE"); + return 36; + case 64: + yy.getLogger().debug("Lexa: (["); + this.pushState("NODE"); + return 36; + case 65: + yy.getLogger().debug("Lexa: )"); + this.pushState("NODE"); + return 36; + case 66: + this.pushState("NODE"); + return 36; + case 67: + this.pushState("NODE"); + return 36; + case 68: + this.pushState("NODE"); + return 36; + case 69: + this.pushState("NODE"); + return 36; + case 70: + this.pushState("NODE"); + return 36; + case 71: + this.pushState("NODE"); + return 36; + case 72: + this.pushState("NODE"); + return 36; + case 73: + yy.getLogger().debug("Lexa: ["); + this.pushState("NODE"); + return 36; + case 74: + this.pushState("BLOCK_ARROW"); + yy.getLogger().debug("LEX ARR START"); + return 38; + case 75: + yy.getLogger().debug("Lex: NODE_ID", yy_.yytext); + return 32; + case 76: + yy.getLogger().debug("Lex: EOF", yy_.yytext); + return 8; + case 77: + this.pushState("md_string"); + break; + case 78: + this.pushState("md_string"); + break; + case 79: + return "NODE_DESCR"; + case 80: + this.popState(); + break; + case 81: + yy.getLogger().debug("Lex: Starting string"); + this.pushState("string"); + break; + case 82: + yy.getLogger().debug("LEX ARR: Starting string"); + this.pushState("string"); + break; + case 83: + yy.getLogger().debug("LEX: NODE_DESCR:", yy_.yytext); + return "NODE_DESCR"; + case 84: + yy.getLogger().debug("LEX POPPING"); + this.popState(); + break; + case 85: + yy.getLogger().debug("Lex: =>BAE"); + this.pushState("ARROW_DIR"); + break; + case 86: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (right): dir:", yy_.yytext); + return "DIR"; + case 87: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (left):", yy_.yytext); + return "DIR"; + case 88: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (x):", yy_.yytext); + return "DIR"; + case 89: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (y):", yy_.yytext); + return "DIR"; + case 90: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (up):", yy_.yytext); + return "DIR"; + case 91: + yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); + yy.getLogger().debug("Lex (down):", yy_.yytext); + return "DIR"; + case 92: + yy_.yytext = "]>"; + yy.getLogger().debug("Lex (ARROW_DIR end):", yy_.yytext); + this.popState(); + this.popState(); + return "BLOCK_ARROW_END"; + case 93: + yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); + return 15; + case 94: + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 95: + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 96: + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 97: + yy.getLogger().debug("Lex: START_LINK", yy_.yytext); + this.pushState("LLABEL"); + return 16; + case 98: + yy.getLogger().debug("Lex: START_LINK", yy_.yytext); + this.pushState("LLABEL"); + return 16; + case 99: + yy.getLogger().debug("Lex: START_LINK", yy_.yytext); + this.pushState("LLABEL"); + return 16; + case 100: + this.pushState("md_string"); + break; + case 101: + yy.getLogger().debug("Lex: Starting string"); + this.pushState("string"); + return "LINK_LABEL"; + case 102: + this.popState(); + yy.getLogger().debug("Lex: LINK", "#" + yy_.yytext + "#"); + return 15; + case 103: + this.popState(); + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 104: + this.popState(); + yy.getLogger().debug("Lex: LINK", yy_.yytext); + return 15; + case 105: + yy.getLogger().debug("Lex: COLON", yy_.yytext); + yy_.yytext = yy_.yytext.slice(1); + return 27; + } + }, + rules: [/^(?:block-beta\b)/, /^(?:block\s+)/, /^(?:block\n+)/, /^(?:block:)/, /^(?:[\s]+)/, /^(?:[\n]+)/, /^(?:((\u000D\u000A)|(\u000A)))/, /^(?:columns\s+auto\b)/, /^(?:columns\s+[\d]+)/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:space[:]\d+)/, /^(?:space\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\s+)/, /^(?:DEFAULT\s+)/, /^(?:\w+\s+)/, /^(?:[^\n]*)/, /^(?:class\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:style\s+)/, /^(?:(\w+)+((,\s*\w+)*))/, /^(?:[^\n]*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:end\b\s*)/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:[\)]\))/, /^(?:\}\})/, /^(?:\})/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\()/, /^(?:\]\])/, /^(?:\()/, /^(?:\]\))/, /^(?:\\\])/, /^(?:\/\])/, /^(?:\)\])/, /^(?:[\)])/, /^(?:\]>)/, /^(?:[\]])/, /^(?:-\))/, /^(?:\(-)/, /^(?:\)\))/, /^(?:\))/, /^(?:\(\(\()/, /^(?:\(\()/, /^(?:\{\{)/, /^(?:\{)/, /^(?:>)/, /^(?:\(\[)/, /^(?:\()/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\[\\)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:\[)/, /^(?:<\[)/, /^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/, /^(?:$)/, /^(?:["][`])/, /^(?:["][`])/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["])/, /^(?:["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:\]>\s*\()/, /^(?:,?\s*right\s*)/, /^(?:,?\s*left\s*)/, /^(?:,?\s*x\s*)/, /^(?:,?\s*y\s*)/, /^(?:,?\s*up\s*)/, /^(?:,?\s*down\s*)/, /^(?:\)\s*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*~~[\~]+\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:["][`])/, /^(?:["])/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?::\d+)/], + conditions: { "STYLE_DEFINITION": { "rules": [29], "inclusive": false }, "STYLE_STMNT": { "rules": [28], "inclusive": false }, "CLASSDEFID": { "rules": [23], "inclusive": false }, "CLASSDEF": { "rules": [21, 22], "inclusive": false }, "CLASS_STYLE": { "rules": [26], "inclusive": false }, "CLASS": { "rules": [25], "inclusive": false }, "LLABEL": { "rules": [100, 101, 102, 103, 104], "inclusive": false }, "ARROW_DIR": { "rules": [86, 87, 88, 89, 90, 91, 92], "inclusive": false }, "BLOCK_ARROW": { "rules": [77, 82, 85], "inclusive": false }, "NODE": { "rules": [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 78, 81], "inclusive": false }, "md_string": { "rules": [10, 11, 79, 80], "inclusive": false }, "space": { "rules": [], "inclusive": false }, "string": { "rules": [13, 14, 83, 84], "inclusive": false }, "acc_descr_multiline": { "rules": [35, 36], "inclusive": false }, "acc_descr": { "rules": [33], "inclusive": false }, "acc_title": { "rules": [31], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 24, 27, 30, 32, 34, 37, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 93, 94, 95, 96, 97, 98, 99, 105], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let blockDatabase = {}; +let edgeList = []; +let edgeCount = {}; +const COLOR_KEYWORD = "color"; +const FILL_KEYWORD = "fill"; +const BG_FILL = "bgFill"; +const STYLECLASS_SEP = ","; +let classes = {}; +const addStyleClass = function(id, styleAttributes = "") { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + const foundClass = classes[id]; + if (styleAttributes !== void 0 && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); + if (attrib.match(COLOR_KEYWORD)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } +}; +const addStyle2Node = function(id, styles = "") { + const foundBlock = blockDatabase[id]; + if (styles !== void 0 && styles !== null) { + foundBlock.styles = styles.split(STYLECLASS_SEP); + } +}; +const setCssClass = function(itemIds, cssClassName) { + itemIds.split(",").forEach(function(id) { + let foundBlock = blockDatabase[id]; + if (foundBlock === void 0) { + const trimmedId = id.trim(); + blockDatabase[trimmedId] = { id: trimmedId, type: "na", children: [] }; + foundBlock = blockDatabase[trimmedId]; + } + if (!foundBlock.classes) { + foundBlock.classes = []; + } + foundBlock.classes.push(cssClassName); + }); +}; +const populateBlockDatabase = (_blockList, parent) => { + const blockList = _blockList.flat(); + const children = []; + for (const block of blockList) { + if (block.type === "classDef") { + addStyleClass(block.id, block.css); + continue; + } + if (block.type === "applyClass") { + setCssClass(block.id, (block == null ? void 0 : block.styleClass) || ""); + continue; + } + if (block.type === "applyStyles") { + if (block == null ? void 0 : block.stylesStr) { + addStyle2Node(block.id, block == null ? void 0 : block.stylesStr); + } + continue; + } + if (block.type === "column-setting") { + parent.columns = block.columns || -1; + } else if (block.type === "edge") { + if (edgeCount[block.id]) { + edgeCount[block.id]++; + } else { + edgeCount[block.id] = 1; + } + block.id = edgeCount[block.id] + "-" + block.id; + edgeList.push(block); + } else { + if (!block.label) { + if (block.type === "composite") { + block.label = ""; + } else { + block.label = block.id; + } + } + const newBlock = !blockDatabase[block.id]; + if (newBlock) { + blockDatabase[block.id] = block; + } else { + if (block.type !== "na") { + blockDatabase[block.id].type = block.type; + } + if (block.label !== block.id) { + blockDatabase[block.id].label = block.label; + } + } + if (block.children) { + populateBlockDatabase(block.children, block); + } + if (block.type === "space") { + const w = block.width || 1; + for (let j = 0; j < w; j++) { + const newBlock2 = (0,lodash_es_clone_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(block); + newBlock2.id = newBlock2.id + "-" + j; + blockDatabase[newBlock2.id] = newBlock2; + children.push(newBlock2); + } + } else if (newBlock) { + children.push(block); + } + } + } + parent.children = children; +}; +let blocks = []; +let rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; +const clear = () => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Clear called"); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.t)(); + rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; + blockDatabase = { root: rootBlock }; + blocks = []; + classes = {}; + edgeList = []; + edgeCount = {}; +}; +function typeStr2Type(typeStr) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("typeStr2Type", typeStr); + switch (typeStr) { + case "[]": + return "square"; + case "()": + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("we have a round"); + return "round"; + case "(())": + return "circle"; + case ">]": + return "rect_left_inv_arrow"; + case "{}": + return "diamond"; + case "{{}}": + return "hexagon"; + case "([])": + return "stadium"; + case "[[]]": + return "subroutine"; + case "[()]": + return "cylinder"; + case "((()))": + return "doublecircle"; + case "[//]": + return "lean_right"; + case "[\\\\]": + return "lean_left"; + case "[/\\]": + return "trapezoid"; + case "[\\/]": + return "inv_trapezoid"; + case "<[]>": + return "block_arrow"; + default: + return "na"; + } +} +function edgeTypeStr2Type(typeStr) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("typeStr2Type", typeStr); + switch (typeStr) { + case "==": + return "thick"; + default: + return "normal"; + } +} +function edgeStrToEdgeData(typeStr) { + switch (typeStr.trim()) { + case "--x": + return "arrow_cross"; + case "--o": + return "arrow_circle"; + default: + return "arrow_point"; + } +} +let cnt = 0; +const generateId = () => { + cnt++; + return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt; +}; +const setHierarchy = (block) => { + rootBlock.children = block; + populateBlockDatabase(block, rootBlock); + blocks = rootBlock.children; +}; +const getColumns = (blockid) => { + const block = blockDatabase[blockid]; + if (!block) { + return -1; + } + if (block.columns) { + return block.columns; + } + if (!block.children) { + return -1; + } + return block.children.length; +}; +const getBlocksFlat = () => { + return [...Object.values(blockDatabase)]; +}; +const getBlocks = () => { + return blocks || []; +}; +const getEdges = () => { + return edgeList; +}; +const getBlock = (id) => { + return blockDatabase[id]; +}; +const setBlock = (block) => { + blockDatabase[block.id] = block; +}; +const getLogger = () => console; +const getClasses$1 = function() { + return classes; +}; +const db = { + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.E)().block, + typeStr2Type, + edgeTypeStr2Type, + edgeStrToEdgeData, + getLogger, + getBlocksFlat, + getBlocks, + getEdges, + setHierarchy, + getBlock, + setBlock, + getColumns, + getClasses: getClasses$1, + clear, + generateId +}; +const db$1 = db; +const fade = (color, opacity) => { + const channel = khroma__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return khroma__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z(r, g, b, opacity); +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${fade(options.edgeLabelBackground, 0.5)}; + // background-color: + } + + .node .cluster { + // fill: ${fade(options.mainBkg, 0.5)}; + fill: ${fade(options.clusterBkg, 0.5)}; + stroke: ${fade(options.clusterBorder, 0.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; +function getNodeFromBlock(block, db2, positioned = false) { + var _a2, _b2, _c; + const vertex = block; + let classStr = "default"; + if ((((_a2 = vertex == null ? void 0 : vertex.classes) == null ? void 0 : _a2.length) || 0) > 0) { + classStr = ((vertex == null ? void 0 : vertex.classes) || []).join(" "); + } + classStr = classStr + " flowchart-label"; + let radius = 0; + let shape = ""; + let padding2; + switch (vertex.type) { + case "round": + radius = 5; + shape = "rect"; + break; + case "composite": + radius = 0; + shape = "composite"; + padding2 = 0; + break; + case "square": + shape = "rect"; + break; + case "diamond": + shape = "question"; + break; + case "hexagon": + shape = "hexagon"; + break; + case "block_arrow": + shape = "block_arrow"; + break; + case "odd": + shape = "rect_left_inv_arrow"; + break; + case "lean_right": + shape = "lean_right"; + break; + case "lean_left": + shape = "lean_left"; + break; + case "trapezoid": + shape = "trapezoid"; + break; + case "inv_trapezoid": + shape = "inv_trapezoid"; + break; + case "rect_left_inv_arrow": + shape = "rect_left_inv_arrow"; + break; + case "circle": + shape = "circle"; + break; + case "ellipse": + shape = "ellipse"; + break; + case "stadium": + shape = "stadium"; + break; + case "subroutine": + shape = "subroutine"; + break; + case "cylinder": + shape = "cylinder"; + break; + case "group": + shape = "rect"; + break; + case "doublecircle": + shape = "doublecircle"; + break; + default: + shape = "rect"; + } + const styles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.k)((vertex == null ? void 0 : vertex.styles) || []); + const vertexText = vertex.label; + const bounds = vertex.size || { width: 0, height: 0, x: 0, y: 0 }; + const node = { + labelStyle: styles.labelStyle, + shape, + labelText: vertexText, + rx: radius, + ry: radius, + class: classStr, + style: styles.style, + id: vertex.id, + directions: vertex.directions, + width: bounds.width, + height: bounds.height, + x: bounds.x, + y: bounds.y, + positioned, + intersect: void 0, + type: vertex.type, + padding: padding2 ?? (((_c = (_b2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.E)()) == null ? void 0 : _b2.block) == null ? void 0 : _c.padding) || 0) + }; + return node; +} +async function calculateBlockSize(elem, block, db2) { + const node = getNodeFromBlock(block, db2, false); + if (node.type === "group") { + return; + } + const nodeEl = await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__.e)(elem, node); + const boundingBox = nodeEl.node().getBBox(); + const obj = db2.getBlock(node.id); + obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl }; + db2.setBlock(obj); + nodeEl.remove(); +} +async function insertBlockPositioned(elem, block, db2) { + const node = getNodeFromBlock(block, db2, true); + const obj = db2.getBlock(node.id); + if (obj.type !== "space") { + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__.e)(elem, node); + block.intersect = node == null ? void 0 : node.intersect; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__.p)(node); + } +} +async function performOperations(elem, blocks2, db2, operation) { + for (const block of blocks2) { + await operation(elem, block, db2); + if (block.children) { + await performOperations(elem, block.children, db2, operation); + } + } +} +async function calculateBlockSizes(elem, blocks2, db2) { + await performOperations(elem, blocks2, db2, calculateBlockSize); +} +async function insertBlocks(elem, blocks2, db2) { + await performOperations(elem, blocks2, db2, insertBlockPositioned); +} +async function insertEdges(elem, edges, blocks2, db2, id) { + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }); + g.setGraph({ + rankdir: "TB", + nodesep: 10, + ranksep: 10, + marginx: 8, + marginy: 8 + }); + for (const block of blocks2) { + if (block.size) { + g.setNode(block.id, { + width: block.size.width, + height: block.size.height, + intersect: block.intersect + }); + } + } + for (const edge of edges) { + if (edge.start && edge.end) { + const startBlock = db2.getBlock(edge.start); + const endBlock = db2.getBlock(edge.end); + if ((startBlock == null ? void 0 : startBlock.size) && (endBlock == null ? void 0 : endBlock.size)) { + const start = startBlock.size; + const end = endBlock.size; + const points = [ + { x: start.x, y: start.y }, + { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 }, + { x: end.x, y: end.y } + ]; + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__.h)( + elem, + { v: edge.start, w: edge.end, name: edge.id }, + { + ...edge, + arrowTypeEnd: edge.arrowTypeEnd, + arrowTypeStart: edge.arrowTypeStart, + points, + classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" + }, + void 0, + "block", + g, + id + ); + if (edge.label) { + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__.f)(elem, { + ...edge, + label: edge.label, + labelStyle: "stroke: #333; stroke-width: 1.5px;fill:none;", + arrowTypeEnd: edge.arrowTypeEnd, + arrowTypeStart: edge.arrowTypeStart, + points, + classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" + }); + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__.j)( + { ...edge, x: points[1].x, y: points[1].y }, + { + originalPath: points + } + ); + } + } + } + } +} +const padding = ((_b = (_a = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)()) == null ? void 0 : _a.block) == null ? void 0 : _b.padding) || 8; +function calculateBlockPosition(columns, position) { + if (columns === 0 || !Number.isInteger(columns)) { + throw new Error("Columns must be an integer !== 0."); + } + if (position < 0 || !Number.isInteger(position)) { + throw new Error("Position must be a non-negative integer." + position); + } + if (columns < 0) { + return { px: position, py: 0 }; + } + if (columns === 1) { + return { px: 0, py: position }; + } + const px = position % columns; + const py = Math.floor(position / columns); + return { px, py }; +} +const getMaxChildSize = (block) => { + let maxWidth = 0; + let maxHeight = 0; + for (const child of block.children) { + const { width, height, x, y } = child.size || { width: 0, height: 0, x: 0, y: 0 }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + "getMaxChildSize abc95 child:", + child.id, + "width:", + width, + "height:", + height, + "x:", + x, + "y:", + y, + child.type + ); + if (child.type === "space") { + continue; + } + if (width > maxWidth) { + maxWidth = width / (block.widthInColumns || 1); + } + if (height > maxHeight) { + maxHeight = height; + } + } + return { width: maxWidth, height: maxHeight }; +}; +function setBlockSizes(block, db2, siblingWidth = 0, siblingHeight = 0) { + var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + "setBlockSizes abc95 (start)", + block.id, + (_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x, + "block width =", + block == null ? void 0 : block.size, + "sieblingWidth", + siblingWidth + ); + if (!((_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.width)) { + block.size = { + width: siblingWidth, + height: siblingHeight, + x: 0, + y: 0 + }; + } + let maxWidth = 0; + let maxHeight = 0; + if (((_c = block.children) == null ? void 0 : _c.length) > 0) { + for (const child of block.children) { + setBlockSizes(child, db2); + } + const childSize = getMaxChildSize(block); + maxWidth = childSize.width; + maxHeight = childSize.height; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("setBlockSizes abc95 maxWidth of", block.id, ":s children is ", maxWidth, maxHeight); + for (const child of block.children) { + if (child.size) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${child.size}` + ); + child.size.width = maxWidth * (child.widthInColumns || 1) + padding * ((child.widthInColumns || 1) - 1); + child.size.height = maxHeight; + child.size.x = 0; + child.size.y = 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}` + ); + } + } + for (const child of block.children) { + setBlockSizes(child, db2, maxWidth, maxHeight); + } + const columns = block.columns || -1; + let numItems = 0; + for (const child of block.children) { + numItems += child.widthInColumns || 1; + } + let xSize = block.children.length; + if (columns > 0 && columns < numItems) { + xSize = columns; + } + block.widthInColumns || 1; + const ySize = Math.ceil(numItems / xSize); + let width = xSize * (maxWidth + padding) + padding; + let height = ySize * (maxHeight + padding) + padding; + if (width < siblingWidth) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `Detected to small siebling: abc95 ${block.id} sieblingWidth ${siblingWidth} sieblingHeight ${siblingHeight} width ${width}` + ); + width = siblingWidth; + height = siblingHeight; + const childWidth = (siblingWidth - xSize * padding - padding) / xSize; + const childHeight = (siblingHeight - ySize * padding - padding) / ySize; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Size indata abc88", block.id, "childWidth", childWidth, "maxWidth", maxWidth); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Size indata abc88", block.id, "childHeight", childHeight, "maxHeight", maxHeight); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Size indata abc88 xSize", xSize, "paddiong", padding); + for (const child of block.children) { + if (child.size) { + child.size.width = childWidth; + child.size.height = childHeight; + child.size.x = 0; + child.size.y = 0; + } + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block.children.length} width=${Math.max(width, ((_d = block.size) == null ? void 0 : _d.width) || 0)}` + ); + if (width < (((_e = block == null ? void 0 : block.size) == null ? void 0 : _e.width) || 0)) { + width = ((_f = block == null ? void 0 : block.size) == null ? void 0 : _f.width) || 0; + const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length; + if (num > 0) { + const childWidth = (width - num * padding - padding) / num; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("abc95 (growing to fit) width", block.id, width, (_g = block.size) == null ? void 0 : _g.width, childWidth); + for (const child of block.children) { + if (child.size) { + child.size.width = childWidth; + } + } + } + } + block.size = { + width, + height, + x: 0, + y: 0 + }; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + "setBlockSizes abc94 (done)", + block.id, + (_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x, + (_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width, + (_j = block == null ? void 0 : block.size) == null ? void 0 : _j.y, + (_k = block == null ? void 0 : block.size) == null ? void 0 : _k.height + ); +} +function layoutBlocks(block, db2) { + var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${(_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x} y: ${(_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.y} width: ${(_c = block == null ? void 0 : block.size) == null ? void 0 : _c.width}` + ); + const columns = block.columns || -1; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("layoutBlocks columns abc95", block.id, "=>", columns, block); + if (block.children && // find max width of children + block.children.length > 0) { + const width = ((_e = (_d = block == null ? void 0 : block.children[0]) == null ? void 0 : _d.size) == null ? void 0 : _e.width) || 0; + const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("widthOfChildren 88", widthOfChildren, "posX"); + let columnPos = 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("abc91 block?.size?.x", block.id, (_f = block == null ? void 0 : block.size) == null ? void 0 : _f.x); + let startingPosX = ((_g = block == null ? void 0 : block.size) == null ? void 0 : _g.x) ? ((_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x) + (-((_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width) / 2 || 0) : -padding; + let rowPos = 0; + for (const child of block.children) { + const parent = block; + if (!child.size) { + continue; + } + const { width: width2, height } = child.size; + const { px, py } = calculateBlockPosition(columns, columnPos); + if (py != rowPos) { + rowPos = py; + startingPosX = ((_j = block == null ? void 0 : block.size) == null ? void 0 : _j.x) ? ((_k = block == null ? void 0 : block.size) == null ? void 0 : _k.x) + (-((_l = block == null ? void 0 : block.size) == null ? void 0 : _l.width) / 2 || 0) : -padding; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("New row in layout for block", block.id, " and child ", child.id, rowPos); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${(_m = parent == null ? void 0 : parent.size) == null ? void 0 : _m.x},${(_n = parent == null ? void 0 : parent.size) == null ? void 0 : _n.y}) parent: ${parent.id} width: ${width2}${padding}` + ); + if (parent.size) { + const halfWidth = width2 / 2; + child.size.x = startingPosX + padding + halfWidth; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width2} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}` + ); + startingPosX = child.size.x + halfWidth; + child.size.y = parent.size.y - parent.size.height / 2 + py * (height + padding) + height / 2 + padding; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}` + ); + } + if (child.children) { + layoutBlocks(child); + } + columnPos += (child == null ? void 0 : child.widthInColumns) || 1; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("abc88 columnsPos", child, columnPos); + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug( + `layout blocks (<==layoutBlocks) ${block.id} x: ${(_o = block == null ? void 0 : block.size) == null ? void 0 : _o.x} y: ${(_p = block == null ? void 0 : block.size) == null ? void 0 : _p.y} width: ${(_q = block == null ? void 0 : block.size) == null ? void 0 : _q.width}` + ); +} +function findBounds(block, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) { + if (block.size && block.id !== "root") { + const { x, y, width, height } = block.size; + if (x - width / 2 < minX) { + minX = x - width / 2; + } + if (y - height / 2 < minY) { + minY = y - height / 2; + } + if (x + width / 2 > maxX) { + maxX = x + width / 2; + } + if (y + height / 2 > maxY) { + maxY = y + height / 2; + } + } + if (block.children) { + for (const child of block.children) { + ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY })); + } + } + return { minX, minY, maxX, maxY }; +} +function layout(db2) { + const root = db2.getBlock("root"); + if (!root) { + return; + } + setBlockSizes(root, db2, 0, 0); + layoutBlocks(root); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("getBlocks", JSON.stringify(root, null, 2)); + const { minX, minY, maxX, maxY } = findBounds(root); + const height = maxY - minY; + const width = maxX - minX; + return { x: minX, y: minY, width, height }; +} +const getClasses = function(text, diagObj) { + return diagObj.db.getClasses(); +}; +const draw = async function(text, id, _version, diagObj) { + const { securityLevel, block: conf } = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.E)(); + const db2 = diagObj.db; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const svg = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_9__.a)(svg, markers, diagObj.type, id); + const bl = db2.getBlocks(); + const blArr = db2.getBlocksFlat(); + const edges = db2.getEdges(); + const nodes = svg.insert("g").attr("class", "block"); + await calculateBlockSizes(nodes, bl, db2); + const bounds = layout(db2); + await insertBlocks(nodes, bl, db2); + await insertEdges(nodes, edges, blArr, db2, id); + if (bounds) { + const bounds2 = bounds; + const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height))); + const height = bounds2.height + magicFactor + 10; + const width = bounds2.width + 10; + const { useMaxWidth } = conf; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.i)(svg, height, width, !!useMaxWidth); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.debug("Here Bounds", bounds, bounds2); + svg.attr( + "viewBox", + `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}` + ); + } + (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .scaleOrdinal */ .PKp)(d3__WEBPACK_IMPORTED_MODULE_1__/* .schemeTableau10 */ .K2I); +}; +const renderer = { + draw, + getClasses +}; +const diagram = { + parser: parser$1, + db: db$1, + renderer, + styles: flowStyles +}; + + + +/***/ }), + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 78932: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39164); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/85.cab88e4e.js b/assets/js/85.cab88e4e.js new file mode 100644 index 0000000000..d5762b4593 --- /dev/null +++ b/assets/js/85.cab88e4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[85],{59792:(e,t,i)=>{i.d(t,{Z:()=>r});var s=i(61691),n=i(71610);const r=(e,t)=>s.Z.lang.round(n.Z.parse(e)[t])},92346:(e,t,i)=>{i.d(t,{Z:()=>n});var s=i(48451);const n=function(e){return(0,s.Z)(e,4)}},80085:(e,t,i)=>{i.d(t,{diagram:()=>K});var s,n,r=i(28758),l=i(92346),o=i(59792),a=i(51117),c=i(78932),h=i(45625),u=i(64218),d=(i(27484),i(17967),i(27856),function(){var e=function(e,t,i,s){for(i=i||{},s=e.length;s--;i[e[s]]=t);return i},t=[1,7],i=[1,13],s=[1,14],n=[1,15],r=[1,19],l=[1,16],o=[1,17],a=[1,18],c=[8,30],h=[8,21,28,29,30,31,32,40,44,47],u=[1,23],d=[1,24],g=[8,15,16,21,28,29,30,31,32,40,44,47],y=[8,15,16,21,27,28,29,30,31,32,40,44,47],p=[1,49],b={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,seperator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(e,t,i,s,n,r,l){var o=r.length-1;switch(n){case 4:s.getLogger().debug("Rule: seperator (NL) ");break;case 5:s.getLogger().debug("Rule: seperator (Space) ");break;case 6:s.getLogger().debug("Rule: seperator (EOF) ");break;case 7:s.getLogger().debug("Rule: hierarchy: ",r[o-1]),s.setHierarchy(r[o-1]);break;case 8:s.getLogger().debug("Stop NL ");break;case 9:s.getLogger().debug("Stop EOF ");break;case 10:s.getLogger().debug("Stop NL2 ");break;case 11:s.getLogger().debug("Stop EOF2 ");break;case 12:s.getLogger().debug("Rule: statement: ",r[o]),"number"==typeof r[o].length?this.$=r[o]:this.$=[r[o]];break;case 13:s.getLogger().debug("Rule: statement #2: ",r[o-1]),this.$=[r[o-1]].concat(r[o]);break;case 14:s.getLogger().debug("Rule: link: ",r[o],e),this.$={edgeTypeStr:r[o],label:""};break;case 15:s.getLogger().debug("Rule: LABEL link: ",r[o-3],r[o-1],r[o]),this.$={edgeTypeStr:r[o],label:r[o-1]};break;case 18:const t=parseInt(r[o]),i=s.generateId();this.$={id:i,type:"space",label:"",width:t,children:[]};break;case 23:s.getLogger().debug("Rule: (nodeStatement link node) ",r[o-2],r[o-1],r[o]," typestr: ",r[o-1].edgeTypeStr);const n=s.edgeStrToEdgeData(r[o-1].edgeTypeStr);this.$=[{id:r[o-2].id,label:r[o-2].label,type:r[o-2].type,directions:r[o-2].directions},{id:r[o-2].id+"-"+r[o].id,start:r[o-2].id,end:r[o].id,label:r[o-1].label,type:"edge",directions:r[o].directions,arrowTypeEnd:n,arrowTypeStart:"arrow_open"},{id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions}];break;case 24:s.getLogger().debug("Rule: nodeStatement (abc88 node size) ",r[o-1],r[o]),this.$={id:r[o-1].id,label:r[o-1].label,type:s.typeStr2Type(r[o-1].typeStr),directions:r[o-1].directions,widthInColumns:parseInt(r[o],10)};break;case 25:s.getLogger().debug("Rule: nodeStatement (node) ",r[o]),this.$={id:r[o].id,label:r[o].label,type:s.typeStr2Type(r[o].typeStr),directions:r[o].directions,widthInColumns:1};break;case 26:s.getLogger().debug("APA123",this?this:"na"),s.getLogger().debug("COLUMNS: ",r[o]),this.$={type:"column-setting",columns:"auto"===r[o]?-1:parseInt(r[o])};break;case 27:s.getLogger().debug("Rule: id-block statement : ",r[o-2],r[o-1]),s.generateId(),this.$={...r[o-2],type:"composite",children:r[o-1]};break;case 28:s.getLogger().debug("Rule: blockStatement : ",r[o-2],r[o-1],r[o]);const l=s.generateId();this.$={id:l,type:"composite",label:"",children:r[o-1]};break;case 29:s.getLogger().debug("Rule: node (NODE_ID seperator): ",r[o]),this.$={id:r[o]};break;case 30:s.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel seperator): ",r[o-1],r[o]),this.$={id:r[o-1],label:r[o].label,typeStr:r[o].typeStr,directions:r[o].directions};break;case 31:s.getLogger().debug("Rule: dirList: ",r[o]),this.$=[r[o]];break;case 32:s.getLogger().debug("Rule: dirList: ",r[o-1],r[o]),this.$=[r[o-1]].concat(r[o]);break;case 33:s.getLogger().debug("Rule: nodeShapeNLabel: ",r[o-2],r[o-1],r[o]),this.$={typeStr:r[o-2]+r[o],label:r[o-1]};break;case 34:s.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",r[o-3],r[o-2]," #3:",r[o-1],r[o]),this.$={typeStr:r[o-3]+r[o],label:r[o-2],directions:r[o-1]};break;case 35:case 36:this.$={type:"classDef",id:r[o-1].trim(),css:r[o].trim()};break;case 37:this.$={type:"applyClass",id:r[o-1].trim(),styleClass:r[o].trim()};break;case 38:this.$={type:"applyStyles",id:r[o-1].trim(),stylesStr:r[o].trim()}}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{8:[1,20]},e(c,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:t,28:i,29:s,31:n,32:r,40:l,44:o,47:a}),e(h,[2,16],{14:22,15:u,16:d}),e(h,[2,17]),e(h,[2,18]),e(h,[2,19]),e(h,[2,20]),e(h,[2,21]),e(h,[2,22]),e(g,[2,25],{27:[1,25]}),e(h,[2,26]),{19:26,26:12,32:r},{11:27,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(y,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(c,[2,13]),{26:35,32:r},{32:[2,14]},{17:[1,36]},e(g,[2,24]),{11:37,13:4,14:22,15:u,16:d,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:i,29:s,31:n,32:r,40:l,44:o,47:a},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(y,[2,30]),{18:[1,43]},{18:[1,44]},e(g,[2,23]),{18:[1,45]},{30:[1,46]},e(h,[2,28]),e(h,[2,35]),e(h,[2,36]),e(h,[2,37]),e(h,[2,38]),{37:[1,47]},{34:48,35:p},{15:[1,50]},e(h,[2,27]),e(y,[2,33]),{39:[1,51]},{34:52,35:p,39:[2,31]},{32:[2,15]},e(y,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(e,t){if(!t.recoverable){var i=new Error(e);throw i.hash=t,i}this.trace(e)},parse:function(e){var t=this,i=[0],s=[],n=[null],r=[],l=this.table,o="",a=0,c=0,h=r.slice.call(arguments,1),u=Object.create(this.lexer),d={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(d.yy[g]=this.yy[g]);u.setInput(e,d.yy),d.yy.lexer=u,d.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var p=u.options&&u.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,x,S,L,f,m,_,k,E,w={};;){if(x=i[i.length-1],this.defaultActions[x]?S=this.defaultActions[x]:(null==b&&(E=void 0,"number"!=typeof(E=s.pop()||u.lex()||1)&&(E instanceof Array&&(E=(s=E).pop()),E=t.symbols_[E]||E),b=E),S=l[x]&&l[x][b]),void 0===S||!S.length||!S[0]){var v="";for(f in k=[],l[x])this.terminals_[f]&&f>2&&k.push("'"+this.terminals_[f]+"'");v=u.showPosition?"Parse error on line "+(a+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(v,{text:u.match,token:this.terminals_[b]||b,line:u.yylineno,loc:y,expected:k})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+b);switch(S[0]){case 1:i.push(b),n.push(u.yytext),r.push(u.yylloc),i.push(S[1]),b=null,c=u.yyleng,o=u.yytext,a=u.yylineno,y=u.yylloc;break;case 2:if(m=this.productions_[S[1]][1],w.$=n[n.length-m],w._$={first_line:r[r.length-(m||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(m||1)].first_column,last_column:r[r.length-1].last_column},p&&(w._$.range=[r[r.length-(m||1)].range[0],r[r.length-1].range[1]]),void 0!==(L=this.performAction.apply(w,[o,c,a,d.yy,S[1],n,r].concat(h))))return L;m&&(i=i.slice(0,-1*m*2),n=n.slice(0,-1*m),r=r.slice(0,-1*m)),i.push(this.productions_[S[1]][0]),n.push(w.$),r.push(w._$),_=l[i[i.length-2]][i[i.length-1]],i.push(_);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,i=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===s.length?this.yylloc.first_column:0)+s[s.length-i.length].length-i[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var i,s,n;if(this.options.backtrack_lexer&&(n={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(n.yylloc.range=this.yylloc.range.slice(0))),(s=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],i=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var r in n)this[r]=n[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,i,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if((i=this._input.match(this.rules[n[r]]))&&(!t||i[0].length>t[0].length)){if(t=i,s=r,this.options.backtrack_lexer){if(!1!==(e=this.test_match(i,n[r])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,n[s]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,i,s){switch(i){case 0:return 10;case 1:return e.getLogger().debug("Found space-block"),31;case 2:return e.getLogger().debug("Found nl-block"),31;case 3:return e.getLogger().debug("Found space-block"),29;case 4:e.getLogger().debug(".",t.yytext);break;case 5:e.getLogger().debug("_",t.yytext);break;case 6:return 5;case 7:return t.yytext=-1,28;case 8:return t.yytext=t.yytext.replace(/columns\s+/,""),e.getLogger().debug("COLUMNS (LEX)",t.yytext),28;case 9:case 77:case 78:case 100:this.pushState("md_string");break;case 10:return"MD_STR";case 11:case 35:case 80:this.popState();break;case 12:this.pushState("string");break;case 13:e.getLogger().debug("LEX: POPPING STR:",t.yytext),this.popState();break;case 14:return e.getLogger().debug("LEX: STR end:",t.yytext),"STR";case 15:return t.yytext=t.yytext.replace(/space\:/,""),e.getLogger().debug("SPACE NUM (LEX)",t.yytext),21;case 16:return t.yytext="1",e.getLogger().debug("COLUMNS (LEX)",t.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:case 39:case 41:case 42:case 45:return this.popState(),e.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),e.getLogger().debug("Lex: ))"),"NODE_DEND";case 43:return this.popState(),e.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),e.getLogger().debug("Lex: -)"),"NODE_DEND";case 46:return this.popState(),e.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),e.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),e.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:case 50:return this.popState(),e.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),e.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),e.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),e.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),e.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return e.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return e.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return e.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:case 60:case 61:case 62:case 65:return e.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return e.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 63:return e.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return e.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 66:case 67:case 68:case 69:case 70:case 71:case 72:return this.pushState("NODE"),36;case 73:return e.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),e.getLogger().debug("LEX ARR START"),38;case 75:return e.getLogger().debug("Lex: NODE_ID",t.yytext),32;case 76:return e.getLogger().debug("Lex: EOF",t.yytext),8;case 79:return"NODE_DESCR";case 81:e.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:e.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return e.getLogger().debug("LEX: NODE_DESCR:",t.yytext),"NODE_DESCR";case 84:e.getLogger().debug("LEX POPPING"),this.popState();break;case 85:e.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (right): dir:",t.yytext),"DIR";case 87:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (left):",t.yytext),"DIR";case 88:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (x):",t.yytext),"DIR";case 89:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (y):",t.yytext),"DIR";case 90:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (up):",t.yytext),"DIR";case 91:return t.yytext=t.yytext.replace(/^,\s*/,""),e.getLogger().debug("Lex (down):",t.yytext),"DIR";case 92:return t.yytext="]>",e.getLogger().debug("Lex (ARROW_DIR end):",t.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 94:case 95:case 96:return e.getLogger().debug("Lex: LINK",t.yytext),15;case 97:case 98:case 99:return e.getLogger().debug("Lex: START_LINK",t.yytext),this.pushState("LLABEL"),16;case 101:return e.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),e.getLogger().debug("Lex: LINK","#"+t.yytext+"#"),15;case 103:case 104:return this.popState(),e.getLogger().debug("Lex: LINK",t.yytext),15;case 105:return e.getLogger().debug("Lex: COLON",t.yytext),t.yytext=t.yytext.slice(1),27}},rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};function S(){this.yy={}}return b.lexer=x,S.prototype=b,b.Parser=S,new S}());d.parser=d;const g=d;let y={},p=[],b={};const x="color",S="fill";let L={};const f=function(e,t=""){void 0===L[e]&&(L[e]={id:e,styles:[],textStyles:[]});const i=L[e];null!=t&&t.split(",").forEach((e=>{const t=e.replace(/([^;]*);/,"$1").trim();if(e.match(x)){const e=t.replace(S,"bgFill").replace(x,S);i.textStyles.push(e)}i.styles.push(t)}))},m=function(e,t=""){const i=y[e];null!=t&&(i.styles=t.split(","))},_=function(e,t){e.split(",").forEach((function(e){let i=y[e];if(void 0===i){const t=e.trim();y[t]={id:t,type:"na",children:[]},i=y[t]}i.classes||(i.classes=[]),i.classes.push(t)}))},k=(e,t)=>{const i=e.flat(),s=[];for(const n of i)if("classDef"!==n.type)if("applyClass"!==n.type)if("applyStyles"!==n.type)if("column-setting"===n.type)t.columns=n.columns||-1;else if("edge"===n.type)b[n.id]?b[n.id]++:b[n.id]=1,n.id=b[n.id]+"-"+n.id,p.push(n);else{n.label||("composite"===n.type?n.label="":n.label=n.id);const e=!y[n.id];if(e?y[n.id]=n:("na"!==n.type&&(y[n.id].type=n.type),n.label!==n.id&&(y[n.id].label=n.label)),n.children&&k(n.children,n),"space"===n.type){const e=n.width||1;for(let t=0;t<e;t++){const e=(0,l.Z)(n);e.id=e.id+"-"+t,y[e.id]=e,s.push(e)}}else e&&s.push(n)}else(null==n?void 0:n.stylesStr)&&m(n.id,null==n?void 0:n.stylesStr);else _(n.id,(null==n?void 0:n.styleClass)||"");else f(n.id,n.css);t.children=s};let E=[],w={id:"root",type:"composite",children:[],columns:-1};let v=0;const D={getConfig:()=>(0,r.E)().block,typeStr2Type:function(e){switch(r.l.debug("typeStr2Type",e),e){case"[]":return"square";case"()":return r.l.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}},edgeTypeStr2Type:function(e){return r.l.debug("typeStr2Type",e),"=="===e?"thick":"normal"},edgeStrToEdgeData:function(e){switch(e.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}},getLogger:()=>console,getBlocksFlat:()=>[...Object.values(y)],getBlocks:()=>E||[],getEdges:()=>p,setHierarchy:e=>{w.children=e,k(e,w),E=w.children},getBlock:e=>y[e],setBlock:e=>{y[e.id]=e},getColumns:e=>{const t=y[e];return t?t.columns?t.columns:t.children?t.children.length:-1:-1},getClasses:function(){return L},clear:()=>{r.l.debug("Clear called"),(0,r.t)(),w={id:"root",type:"composite",children:[],columns:-1},y={root:w},E=[],L={},p=[],b={}},generateId:()=>(v++,"id-"+Math.random().toString(36).substr(2,12)+"-"+v)},$=(e,t)=>{const i=o.Z,s=i(e,"r"),n=i(e,"g"),r=i(e,"b");return a.Z(s,n,r,t)},N=e=>`.label {\n font-family: ${e.fontFamily};\n color: ${e.nodeTextColor||e.textColor};\n }\n .cluster-label text {\n fill: ${e.titleColor};\n }\n .cluster-label span,p {\n color: ${e.titleColor};\n }\n\n\n\n .label text,span,p {\n fill: ${e.nodeTextColor||e.textColor};\n color: ${e.nodeTextColor||e.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${e.mainBkg};\n stroke: ${e.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${e.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${e.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${e.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${e.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${e.edgeLabelBackground};\n fill: ${e.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${$(e.edgeLabelBackground,.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${$(e.mainBkg,.5)};\n fill: ${$(e.clusterBkg,.5)};\n stroke: ${$(e.clusterBorder,.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${e.titleColor};\n }\n\n .cluster span,p {\n color: ${e.titleColor};\n }\n /* .cluster div {\n color: ${e.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${e.fontFamily};\n font-size: 12px;\n background: ${e.tertiaryColor};\n border: 1px solid ${e.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${e.textColor};\n }\n`;function I(e,t,i=!1){var s,n,l;const o=e;let a="default";((null==(s=null==o?void 0:o.classes)?void 0:s.length)||0)>0&&(a=((null==o?void 0:o.classes)||[]).join(" ")),a+=" flowchart-label";let c,h=0,u="";switch(o.type){case"round":h=5,u="rect";break;case"composite":h=0,u="composite",c=0;break;case"square":case"group":default:u="rect";break;case"diamond":u="question";break;case"hexagon":u="hexagon";break;case"block_arrow":u="block_arrow";break;case"odd":case"rect_left_inv_arrow":u="rect_left_inv_arrow";break;case"lean_right":u="lean_right";break;case"lean_left":u="lean_left";break;case"trapezoid":u="trapezoid";break;case"inv_trapezoid":u="inv_trapezoid";break;case"circle":u="circle";break;case"ellipse":u="ellipse";break;case"stadium":u="stadium";break;case"subroutine":u="subroutine";break;case"cylinder":u="cylinder";break;case"doublecircle":u="doublecircle"}const d=(0,r.k)((null==o?void 0:o.styles)||[]),g=o.label,y=o.size||{width:0,height:0,x:0,y:0};return{labelStyle:d.labelStyle,shape:u,labelText:g,rx:h,ry:h,class:a,style:d.style,id:o.id,directions:o.directions,width:y.width,height:y.height,x:y.x,y:y.y,positioned:i,intersect:void 0,type:o.type,padding:c??((null==(l=null==(n=(0,r.E)())?void 0:n.block)?void 0:l.padding)||0)}}async function T(e,t,i){const s=I(t,0,!1);if("group"===s.type)return;const n=await(0,c.e)(e,s),r=n.node().getBBox(),l=i.getBlock(s.id);l.size={width:r.width,height:r.height,x:0,y:0,node:n},i.setBlock(l),n.remove()}async function z(e,t,i){const s=I(t,0,!0);"space"!==i.getBlock(s.id).type&&(await(0,c.e)(e,s),t.intersect=null==s?void 0:s.intersect,(0,c.p)(s))}async function C(e,t,i,s){for(const n of t)await s(e,n,i),n.children&&await C(e,n.children,i,s)}const O=(null==(n=null==(s=(0,r.c)())?void 0:s.block)?void 0:n.padding)||8;function A(e,t){if(0===e||!Number.isInteger(e))throw new Error("Columns must be an integer !== 0.");if(t<0||!Number.isInteger(t))throw new Error("Position must be a non-negative integer."+t);if(e<0)return{px:t,py:0};if(1===e)return{px:0,py:t};return{px:t%e,py:Math.floor(t/e)}}const R=e=>{let t=0,i=0;for(const s of e.children){const{width:n,height:l,x:o,y:a}=s.size||{width:0,height:0,x:0,y:0};r.l.debug("getMaxChildSize abc95 child:",s.id,"width:",n,"height:",l,"x:",o,"y:",a,s.type),"space"!==s.type&&(n>t&&(t=n/(e.widthInColumns||1)),l>i&&(i=l))}return{width:t,height:i}};function B(e,t,i=0,s=0){var n,l,o,a,c,h,u,d,g,y,p;r.l.debug("setBlockSizes abc95 (start)",e.id,null==(n=null==e?void 0:e.size)?void 0:n.x,"block width =",null==e?void 0:e.size,"sieblingWidth",i),(null==(l=null==e?void 0:e.size)?void 0:l.width)||(e.size={width:i,height:s,x:0,y:0});let b=0,x=0;if((null==(o=e.children)?void 0:o.length)>0){for(const i of e.children)B(i,t);const n=R(e);b=n.width,x=n.height,r.l.debug("setBlockSizes abc95 maxWidth of",e.id,":s children is ",b,x);for(const t of e.children)t.size&&(r.l.debug(`abc95 Setting size of children of ${e.id} id=${t.id} ${b} ${x} ${t.size}`),t.size.width=b*(t.widthInColumns||1)+O*((t.widthInColumns||1)-1),t.size.height=x,t.size.x=0,t.size.y=0,r.l.debug(`abc95 updating size of ${e.id} children child:${t.id} maxWidth:${b} maxHeight:${x}`));for(const i of e.children)B(i,t,b,x);const l=e.columns||-1;let o=0;for(const t of e.children)o+=t.widthInColumns||1;let d=e.children.length;l>0&&l<o&&(d=l),e.widthInColumns;const g=Math.ceil(o/d);let y=d*(b+O)+O,p=g*(x+O)+O;if(y<i){r.l.debug(`Detected to small siebling: abc95 ${e.id} sieblingWidth ${i} sieblingHeight ${s} width ${y}`),y=i,p=s;const t=(i-d*O-O)/d,n=(s-g*O-O)/g;r.l.debug("Size indata abc88",e.id,"childWidth",t,"maxWidth",b),r.l.debug("Size indata abc88",e.id,"childHeight",n,"maxHeight",x),r.l.debug("Size indata abc88 xSize",d,"paddiong",O);for(const i of e.children)i.size&&(i.size.width=t,i.size.height=n,i.size.x=0,i.size.y=0)}if(r.l.debug(`abc95 (finale calc) ${e.id} xSize ${d} ySize ${g} columns ${l}${e.children.length} width=${Math.max(y,(null==(a=e.size)?void 0:a.width)||0)}`),y<((null==(c=null==e?void 0:e.size)?void 0:c.width)||0)){y=(null==(h=null==e?void 0:e.size)?void 0:h.width)||0;const t=l>0?Math.min(e.children.length,l):e.children.length;if(t>0){const i=(y-t*O-O)/t;r.l.debug("abc95 (growing to fit) width",e.id,y,null==(u=e.size)?void 0:u.width,i);for(const t of e.children)t.size&&(t.size.width=i)}}e.size={width:y,height:p,x:0,y:0}}r.l.debug("setBlockSizes abc94 (done)",e.id,null==(d=null==e?void 0:e.size)?void 0:d.x,null==(g=null==e?void 0:e.size)?void 0:g.width,null==(y=null==e?void 0:e.size)?void 0:y.y,null==(p=null==e?void 0:e.size)?void 0:p.height)}function P(e,t){var i,s,n,l,o,a,c,h,u,d,g,y,p,b,x,S,L;r.l.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${null==(i=null==e?void 0:e.size)?void 0:i.x} y: ${null==(s=null==e?void 0:e.size)?void 0:s.y} width: ${null==(n=null==e?void 0:e.size)?void 0:n.width}`);const f=e.columns||-1;if(r.l.debug("layoutBlocks columns abc95",e.id,"=>",f,e),e.children&&e.children.length>0){const t=(null==(o=null==(l=null==e?void 0:e.children[0])?void 0:l.size)?void 0:o.width)||0,i=e.children.length*t+(e.children.length-1)*O;r.l.debug("widthOfChildren 88",i,"posX");let s=0;r.l.debug("abc91 block?.size?.x",e.id,null==(a=null==e?void 0:e.size)?void 0:a.x);let n=(null==(c=null==e?void 0:e.size)?void 0:c.x)?(null==(h=null==e?void 0:e.size)?void 0:h.x)+(-(null==(u=null==e?void 0:e.size)?void 0:u.width)/2||0):-O,x=0;for(const l of e.children){const t=e;if(!l.size)continue;const{width:i,height:o}=l.size,{px:a,py:c}=A(f,s);if(c!=x&&(x=c,n=(null==(d=null==e?void 0:e.size)?void 0:d.x)?(null==(g=null==e?void 0:e.size)?void 0:g.x)+(-(null==(y=null==e?void 0:e.size)?void 0:y.width)/2||0):-O,r.l.debug("New row in layout for block",e.id," and child ",l.id,x)),r.l.debug(`abc89 layout blocks (child) id: ${l.id} Pos: ${s} (px, py) ${a},${c} (${null==(p=null==t?void 0:t.size)?void 0:p.x},${null==(b=null==t?void 0:t.size)?void 0:b.y}) parent: ${t.id} width: ${i}${O}`),t.size){const e=i/2;l.size.x=n+O+e,r.l.debug(`abc91 layout blocks (calc) px, pyid:${l.id} startingPos=X${n} new startingPosX${l.size.x} ${e} padding=${O} width=${i} halfWidth=${e} => x:${l.size.x} y:${l.size.y} ${l.widthInColumns} (width * (child?.w || 1)) / 2 ${i*((null==l?void 0:l.widthInColumns)||1)/2}`),n=l.size.x+e,l.size.y=t.size.y-t.size.height/2+c*(o+O)+o/2+O,r.l.debug(`abc88 layout blocks (calc) px, pyid:${l.id}startingPosX${n}${O}${e}=>x:${l.size.x}y:${l.size.y}${l.widthInColumns}(width * (child?.w || 1)) / 2${i*((null==l?void 0:l.widthInColumns)||1)/2}`)}l.children&&P(l),s+=(null==l?void 0:l.widthInColumns)||1,r.l.debug("abc88 columnsPos",l,s)}}r.l.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${null==(x=null==e?void 0:e.size)?void 0:x.x} y: ${null==(S=null==e?void 0:e.size)?void 0:S.y} width: ${null==(L=null==e?void 0:e.size)?void 0:L.width}`)}function Y(e,{minX:t,minY:i,maxX:s,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(e.size&&"root"!==e.id){const{x:r,y:l,width:o,height:a}=e.size;r-o/2<t&&(t=r-o/2),l-a/2<i&&(i=l-a/2),r+o/2>s&&(s=r+o/2),l+a/2>n&&(n=l+a/2)}if(e.children)for(const r of e.children)({minX:t,minY:i,maxX:s,maxY:n}=Y(r,{minX:t,minY:i,maxX:s,maxY:n}));return{minX:t,minY:i,maxX:s,maxY:n}}function F(e){const t=e.getBlock("root");if(!t)return;B(t,e,0,0),P(t),r.l.debug("getBlocks",JSON.stringify(t,null,2));const{minX:i,minY:s,maxX:n,maxY:l}=Y(t);return{x:i,y:s,width:n-i,height:l-s}}const K={parser:g,db:D,renderer:{draw:async function(e,t,i,s){const{securityLevel:n,block:l}=(0,r.E)(),o=s.db;let a;"sandbox"===n&&(a=(0,u.Ys)("#i"+t));const d="sandbox"===n?(0,u.Ys)(a.nodes()[0].contentDocument.body):(0,u.Ys)("body"),g="sandbox"===n?d.select(`[id="${t}"]`):(0,u.Ys)(`[id="${t}"]`);(0,c.a)(g,["point","circle","cross"],s.type,t);const y=o.getBlocks(),p=o.getBlocksFlat(),b=o.getEdges(),x=g.insert("g").attr("class","block");await async function(e,t,i){await C(e,t,i,T)}(x,y,o);const S=F(o);if(await async function(e,t,i){await C(e,t,i,z)}(x,y,o),await async function(e,t,i,s,n){const r=new h.k({multigraph:!0,compound:!0});r.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const l of i)l.size&&r.setNode(l.id,{width:l.size.width,height:l.size.height,intersect:l.intersect});for(const l of t)if(l.start&&l.end){const t=s.getBlock(l.start),i=s.getBlock(l.end);if((null==t?void 0:t.size)&&(null==i?void 0:i.size)){const s=t.size,o=i.size,a=[{x:s.x,y:s.y},{x:s.x+(o.x-s.x)/2,y:s.y+(o.y-s.y)/2},{x:o.x,y:o.y}];await(0,c.h)(e,{v:l.start,w:l.end,name:l.id},{...l,arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",r,n),l.label&&(await(0,c.f)(e,{...l,label:l.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:a,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),await(0,c.j)({...l,x:a[1].x,y:a[1].y},{originalPath:a}))}}}(x,b,p,o,t),S){const e=S,t=Math.max(1,Math.round(e.width/e.height*.125)),i=e.height+t+10,s=e.width+10,{useMaxWidth:n}=l;(0,r.i)(g,i,s,!!n),r.l.debug("Here Bounds",S,e),g.attr("viewBox",`${e.x-5} ${e.y-5} ${e.width+10} ${e.height+10}`)}(0,u.PKp)(u.K2I)},getClasses:function(e,t){return t.db.getClasses()}},styles:N}}}]); \ No newline at end of file diff --git a/assets/js/858.75944404.js b/assets/js/858.75944404.js new file mode 100644 index 0000000000..8ab18c306e --- /dev/null +++ b/assets/js/858.75944404.js @@ -0,0 +1,23921 @@ +exports.id = 858; +exports.ids = [858]; +exports.modules = { + +/***/ 17295: +/***/ ((module) => { + +(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/******************************************************************************* + * Copyright (c) 2017 Kiel University and others. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = function () { + function ELK() { + var _this = this; + + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$defaultLayoutOpt = _ref.defaultLayoutOptions, + defaultLayoutOptions = _ref$defaultLayoutOpt === undefined ? {} : _ref$defaultLayoutOpt, + _ref$algorithms = _ref.algorithms, + algorithms = _ref$algorithms === undefined ? ['layered', 'stress', 'mrtree', 'radial', 'force', 'disco', 'sporeOverlap', 'sporeCompaction', 'rectpacking'] : _ref$algorithms, + workerFactory = _ref.workerFactory, + workerUrl = _ref.workerUrl; + + _classCallCheck(this, ELK); + + this.defaultLayoutOptions = defaultLayoutOptions; + this.initialized = false; + + // check valid worker construction possible + if (typeof workerUrl === 'undefined' && typeof workerFactory === 'undefined') { + throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'."); + } + var factory = workerFactory; + if (typeof workerUrl !== 'undefined' && typeof workerFactory === 'undefined') { + // use default Web Worker + factory = function factory(url) { + return new Worker(url); + }; + } + + // create the worker + var worker = factory(workerUrl); + if (typeof worker.postMessage !== 'function') { + throw new TypeError("Created worker does not provide" + " the required 'postMessage' function."); + } + + // wrap the worker to return promises + this.worker = new PromisedWorker(worker); + + // initially register algorithms + this.worker.postMessage({ + cmd: 'register', + algorithms: algorithms + }).then(function (r) { + return _this.initialized = true; + }).catch(console.err); + } + + _createClass(ELK, [{ + key: 'layout', + value: function layout(graph) { + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref2$layoutOptions = _ref2.layoutOptions, + layoutOptions = _ref2$layoutOptions === undefined ? this.defaultLayoutOptions : _ref2$layoutOptions, + _ref2$logging = _ref2.logging, + logging = _ref2$logging === undefined ? false : _ref2$logging, + _ref2$measureExecutio = _ref2.measureExecutionTime, + measureExecutionTime = _ref2$measureExecutio === undefined ? false : _ref2$measureExecutio; + + if (!graph) { + return Promise.reject(new Error("Missing mandatory parameter 'graph'.")); + } + return this.worker.postMessage({ + cmd: 'layout', + graph: graph, + layoutOptions: layoutOptions, + options: { + logging: logging, + measureExecutionTime: measureExecutionTime + } + }); + } + }, { + key: 'knownLayoutAlgorithms', + value: function knownLayoutAlgorithms() { + return this.worker.postMessage({ cmd: 'algorithms' }); + } + }, { + key: 'knownLayoutOptions', + value: function knownLayoutOptions() { + return this.worker.postMessage({ cmd: 'options' }); + } + }, { + key: 'knownLayoutCategories', + value: function knownLayoutCategories() { + return this.worker.postMessage({ cmd: 'categories' }); + } + }, { + key: 'terminateWorker', + value: function terminateWorker() { + this.worker.terminate(); + } + }]); + + return ELK; +}(); + +exports.default = ELK; + +var PromisedWorker = function () { + function PromisedWorker(worker) { + var _this2 = this; + + _classCallCheck(this, PromisedWorker); + + if (worker === undefined) { + throw new Error("Missing mandatory parameter 'worker'."); + } + this.resolvers = {}; + this.worker = worker; + this.worker.onmessage = function (answer) { + // why is this necessary? + setTimeout(function () { + _this2.receive(_this2, answer); + }, 0); + }; + } + + _createClass(PromisedWorker, [{ + key: 'postMessage', + value: function postMessage(msg) { + var id = this.id || 0; + this.id = id + 1; + msg.id = id; + var self = this; + return new Promise(function (resolve, reject) { + // prepare the resolver + self.resolvers[id] = function (err, res) { + if (err) { + self.convertGwtStyleError(err); + reject(err); + } else { + resolve(res); + } + }; + // post the message + self.worker.postMessage(msg); + }); + } + }, { + key: 'receive', + value: function receive(self, answer) { + var json = answer.data; + var resolver = self.resolvers[json.id]; + if (resolver) { + delete self.resolvers[json.id]; + if (json.error) { + resolver(json.error); + } else { + resolver(null, json.data); + } + } + } + }, { + key: 'terminate', + value: function terminate() { + if (this.worker.terminate) { + this.worker.terminate(); + } + } + }, { + key: 'convertGwtStyleError', + value: function convertGwtStyleError(err) { + if (!err) { + return; + } + // Somewhat flatten the way GWT stores nested exception(s) + var javaException = err['__java$exception']; + if (javaException) { + // Note that the property name of the nested exception is different + // in the non-minified ('cause') and the minified (not deterministic) version. + // Hence, the version below only works for the non-minified version. + // However, as the minified stack trace is not of much use anyway, one + // should switch the used version for debugging in such a case. + if (javaException.cause && javaException.cause.backingJsObject) { + err.cause = javaException.cause.backingJsObject; + this.convertGwtStyleError(err.cause); + } + delete err['__java$exception']; + } + } + }]); + + return PromisedWorker; +}(); +},{}],2:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; + +// -------------- FAKE ELEMENTS GWT ASSUMES EXIST -------------- +var $wnd; +if (typeof window !== 'undefined') + $wnd = window +else if (typeof global !== 'undefined') + $wnd = global // nodejs +else if (typeof self !== 'undefined') + $wnd = self // web worker + +var $moduleName, + $moduleBase; + +// -------------- WORKAROUND STRICT MODE, SEE #127 -------------- +var g, i, o; + +// -------------- GENERATED CODE -------------- +function nb(){} +function xb(){} +function Fd(){} +function hh(){} +function lq(){} +function Nq(){} +function ir(){} +function Ws(){} +function Zw(){} +function jx(){} +function rx(){} +function sx(){} +function My(){} +function bA(){} +function mA(){} +function tA(){} +function aB(){} +function dB(){} +function jB(){} +function dC(){} +function keb(){} +function geb(){} +function oeb(){} +function iob(){} +function Job(){} +function Rob(){} +function apb(){} +function ipb(){} +function nrb(){} +function wrb(){} +function Brb(){} +function Prb(){} +function ltb(){} +function svb(){} +function xvb(){} +function zvb(){} +function $xb(){} +function Gzb(){} +function NAb(){} +function VAb(){} +function rBb(){} +function RBb(){} +function TBb(){} +function XBb(){} +function ZBb(){} +function _Bb(){} +function bCb(){} +function dCb(){} +function fCb(){} +function jCb(){} +function rCb(){} +function uCb(){} +function wCb(){} +function yCb(){} +function ACb(){} +function ECb(){} +function FEb(){} +function IEb(){} +function KEb(){} +function MEb(){} +function gFb(){} +function FFb(){} +function JFb(){} +function xGb(){} +function AGb(){} +function YGb(){} +function oHb(){} +function tHb(){} +function xHb(){} +function pIb(){} +function BJb(){} +function kLb(){} +function mLb(){} +function oLb(){} +function qLb(){} +function FLb(){} +function JLb(){} +function KMb(){} +function MMb(){} +function OMb(){} +function YMb(){} +function MNb(){} +function ONb(){} +function aOb(){} +function eOb(){} +function xOb(){} +function BOb(){} +function DOb(){} +function FOb(){} +function IOb(){} +function MOb(){} +function POb(){} +function UOb(){} +function ZOb(){} +function cPb(){} +function gPb(){} +function nPb(){} +function qPb(){} +function tPb(){} +function wPb(){} +function CPb(){} +function qQb(){} +function GQb(){} +function bRb(){} +function gRb(){} +function kRb(){} +function pRb(){} +function wRb(){} +function xSb(){} +function TSb(){} +function VSb(){} +function XSb(){} +function ZSb(){} +function _Sb(){} +function tTb(){} +function DTb(){} +function FTb(){} +function FXb(){} +function hXb(){} +function hWb(){} +function mWb(){} +function CVb(){} +function XXb(){} +function $Xb(){} +function bYb(){} +function lYb(){} +function FYb(){} +function XYb(){} +function aZb(){} +function SZb(){} +function ZZb(){} +function Z_b(){} +function j_b(){} +function j$b(){} +function b$b(){} +function f$b(){} +function n$b(){} +function K_b(){} +function V_b(){} +function b0b(){} +function l0b(){} +function X1b(){} +function _1b(){} +function x3b(){} +function r4b(){} +function w4b(){} +function A4b(){} +function E4b(){} +function I4b(){} +function M4b(){} +function o5b(){} +function q5b(){} +function w5b(){} +function A5b(){} +function E5b(){} +function h6b(){} +function j6b(){} +function l6b(){} +function q6b(){} +function v6b(){} +function y6b(){} +function G6b(){} +function K6b(){} +function N6b(){} +function P6b(){} +function R6b(){} +function b7b(){} +function f7b(){} +function j7b(){} +function n7b(){} +function C7b(){} +function H7b(){} +function J7b(){} +function L7b(){} +function N7b(){} +function P7b(){} +function a8b(){} +function c8b(){} +function e8b(){} +function g8b(){} +function i8b(){} +function m8b(){} +function Z8b(){} +function f9b(){} +function i9b(){} +function o9b(){} +function C9b(){} +function F9b(){} +function K9b(){} +function Q9b(){} +function aac(){} +function bac(){} +function eac(){} +function mac(){} +function pac(){} +function rac(){} +function tac(){} +function xac(){} +function Aac(){} +function Dac(){} +function Iac(){} +function Oac(){} +function Uac(){} +function Ucc(){} +function scc(){} +function ycc(){} +function Acc(){} +function Ccc(){} +function Ncc(){} +function Wcc(){} +function ydc(){} +function Adc(){} +function Gdc(){} +function Ldc(){} +function Zdc(){} +function fec(){} +function Dec(){} +function Gec(){} +function Kec(){} +function efc(){} +function jfc(){} +function nfc(){} +function Bfc(){} +function Ifc(){} +function Lfc(){} +function Rfc(){} +function Ufc(){} +function Zfc(){} +function cgc(){} +function egc(){} +function ggc(){} +function igc(){} +function kgc(){} +function Dgc(){} +function Hgc(){} +function Lgc(){} +function Ngc(){} +function Pgc(){} +function Vgc(){} +function Ygc(){} +function chc(){} +function ehc(){} +function ghc(){} +function ihc(){} +function mhc(){} +function rhc(){} +function uhc(){} +function whc(){} +function yhc(){} +function Ahc(){} +function Chc(){} +function Ghc(){} +function Nhc(){} +function Phc(){} +function Rhc(){} +function Thc(){} +function $hc(){} +function aic(){} +function cic(){} +function eic(){} +function jic(){} +function nic(){} +function pic(){} +function ric(){} +function vic(){} +function yic(){} +function Dic(){} +function Ric(){} +function Zic(){} +function bjc(){} +function djc(){} +function jjc(){} +function njc(){} +function rjc(){} +function tjc(){} +function zjc(){} +function Djc(){} +function Fjc(){} +function Ljc(){} +function Pjc(){} +function Rjc(){} +function fkc(){} +function Kkc(){} +function Mkc(){} +function Okc(){} +function Qkc(){} +function Skc(){} +function Ukc(){} +function Wkc(){} +function clc(){} +function elc(){} +function klc(){} +function mlc(){} +function olc(){} +function qlc(){} +function wlc(){} +function ylc(){} +function Alc(){} +function Jlc(){} +function Joc(){} +function poc(){} +function roc(){} +function toc(){} +function voc(){} +function Boc(){} +function Foc(){} +function Hoc(){} +function Loc(){} +function Noc(){} +function Poc(){} +function qnc(){} +function unc(){} +function upc(){} +function kpc(){} +function mpc(){} +function opc(){} +function qpc(){} +function ypc(){} +function Cpc(){} +function Mpc(){} +function Qpc(){} +function dqc(){} +function jqc(){} +function Aqc(){} +function Eqc(){} +function Gqc(){} +function Sqc(){} +function arc(){} +function lrc(){} +function zrc(){} +function Hrc(){} +function bsc(){} +function dsc(){} +function fsc(){} +function ksc(){} +function msc(){} +function Asc(){} +function Csc(){} +function Esc(){} +function Ksc(){} +function Nsc(){} +function Ssc(){} +function CCc(){} +function tGc(){} +function aHc(){} +function gHc(){} +function nIc(){} +function PJc(){} +function XKc(){} +function fLc(){} +function hLc(){} +function lLc(){} +function eNc(){} +function IOc(){} +function MOc(){} +function WOc(){} +function YOc(){} +function $Oc(){} +function cPc(){} +function iPc(){} +function mPc(){} +function oPc(){} +function qPc(){} +function sPc(){} +function wPc(){} +function APc(){} +function FPc(){} +function HPc(){} +function NPc(){} +function PPc(){} +function TPc(){} +function VPc(){} +function ZPc(){} +function _Pc(){} +function bQc(){} +function dQc(){} +function SQc(){} +function hRc(){} +function HRc(){} +function HSc(){} +function pSc(){} +function xSc(){} +function zSc(){} +function BSc(){} +function DSc(){} +function FSc(){} +function CTc(){} +function ITc(){} +function KTc(){} +function MTc(){} +function XTc(){} +function ZTc(){} +function jVc(){} +function lVc(){} +function zVc(){} +function IVc(){} +function KVc(){} +function KWc(){} +function uWc(){} +function xWc(){} +function AWc(){} +function QWc(){} +function UWc(){} +function qXc(){} +function KXc(){} +function OXc(){} +function SXc(){} +function $Xc(){} +function mYc(){} +function rYc(){} +function zYc(){} +function DYc(){} +function FYc(){} +function HYc(){} +function JYc(){} +function cZc(){} +function gZc(){} +function iZc(){} +function pZc(){} +function tZc(){} +function vZc(){} +function AZc(){} +function GZc(){} +function l_c(){} +function l1c(){} +function b1c(){} +function d1c(){} +function h1c(){} +function n1c(){} +function r1c(){} +function v1c(){} +function x1c(){} +function D1c(){} +function H1c(){} +function L1c(){} +function R1c(){} +function V1c(){} +function Z1c(){} +function Z0c(){} +function a0c(){} +function c0c(){} +function e0c(){} +function k0c(){} +function o0c(){} +function b2c(){} +function l2c(){} +function p2c(){} +function Y2c(){} +function _2c(){} +function A3c(){} +function F3c(){} +function I3c(){} +function K3c(){} +function M3c(){} +function Q3c(){} +function U3c(){} +function c5c(){} +function D5c(){} +function G5c(){} +function J5c(){} +function N5c(){} +function V5c(){} +function p6c(){} +function s6c(){} +function H6c(){} +function K6c(){} +function _7c(){} +function h8c(){} +function j8c(){} +function o8c(){} +function r8c(){} +function u8c(){} +function R8c(){} +function X8c(){} +function o9c(){} +function s9c(){} +function x9c(){} +function Qad(){} +function rcd(){} +function Xcd(){} +function vdd(){} +function Tdd(){} +function _dd(){} +function qed(){} +function sed(){} +function ved(){} +function Hed(){} +function Zed(){} +function bfd(){} +function ifd(){} +function Gfd(){} +function Ifd(){} +function Igd(){} +function agd(){} +function dgd(){} +function pgd(){} +function Hgd(){} +function Kgd(){} +function Mgd(){} +function Ogd(){} +function Qgd(){} +function Sgd(){} +function Ugd(){} +function Wgd(){} +function Ygd(){} +function $gd(){} +function ahd(){} +function chd(){} +function ehd(){} +function ghd(){} +function ihd(){} +function khd(){} +function mhd(){} +function ohd(){} +function qhd(){} +function shd(){} +function Shd(){} +function lkd(){} +function znd(){} +function Jpd(){} +function jrd(){} +function Mrd(){} +function Qrd(){} +function Urd(){} +function Yrd(){} +function Yud(){} +function eud(){} +function asd(){} +function Lsd(){} +function btd(){} +function dtd(){} +function jtd(){} +function otd(){} +function ztd(){} +function Xxd(){} +function $yd(){} +function rzd(){} +function Rzd(){} +function KAd(){} +function hCd(){} +function _Cd(){} +function _Sd(){} +function OSd(){} +function BDd(){} +function BId(){} +function JId(){} +function YHd(){} +function fLd(){} +function cPd(){} +function hQd(){} +function AQd(){} +function kUd(){} +function VUd(){} +function pVd(){} +function W$d(){} +function Z$d(){} +function a_d(){} +function i_d(){} +function v_d(){} +function y_d(){} +function f1d(){} +function L5d(){} +function v6d(){} +function b8d(){} +function e8d(){} +function h8d(){} +function k8d(){} +function n8d(){} +function q8d(){} +function t8d(){} +function w8d(){} +function z8d(){} +function X9d(){} +function _9d(){} +function Mae(){} +function cbe(){} +function ebe(){} +function hbe(){} +function kbe(){} +function nbe(){} +function qbe(){} +function tbe(){} +function wbe(){} +function zbe(){} +function Cbe(){} +function Fbe(){} +function Ibe(){} +function Lbe(){} +function Obe(){} +function Rbe(){} +function Ube(){} +function Xbe(){} +function $be(){} +function bce(){} +function ece(){} +function hce(){} +function kce(){} +function nce(){} +function qce(){} +function tce(){} +function wce(){} +function zce(){} +function Cce(){} +function Fce(){} +function Ice(){} +function Lce(){} +function Oce(){} +function Rce(){} +function Uce(){} +function Xce(){} +function $ce(){} +function bde(){} +function ede(){} +function hde(){} +function kde(){} +function nde(){} +function qde(){} +function tde(){} +function wde(){} +function Hie(){} +function rke(){} +function rne(){} +function Ene(){} +function Gne(){} +function Jne(){} +function Mne(){} +function Pne(){} +function Sne(){} +function Vne(){} +function Yne(){} +function _ne(){} +function yme(){} +function coe(){} +function foe(){} +function ioe(){} +function loe(){} +function ooe(){} +function roe(){} +function uoe(){} +function xoe(){} +function Aoe(){} +function Doe(){} +function Goe(){} +function Joe(){} +function Moe(){} +function Poe(){} +function Soe(){} +function Voe(){} +function Yoe(){} +function _oe(){} +function cpe(){} +function fpe(){} +function ipe(){} +function lpe(){} +function ope(){} +function rpe(){} +function upe(){} +function xpe(){} +function Ape(){} +function Dpe(){} +function Gpe(){} +function Jpe(){} +function Mpe(){} +function Ppe(){} +function Spe(){} +function Vpe(){} +function Ype(){} +function _pe(){} +function cqe(){} +function fqe(){} +function iqe(){} +function lqe(){} +function oqe(){} +function rqe(){} +function uqe(){} +function Tqe(){} +function sue(){} +function Cue(){} +function A2b(a){} +function J3d(a){} +function zl(){wb()} +function z7b(){s7b()} +function ZHb(){YHb()} +function fSb(){eSb()} +function vSb(){tSb()} +function PUb(){OUb()} +function AVb(){yVb()} +function RVb(){QVb()} +function fWb(){dWb()} +function N5b(){H5b()} +function $9b(){U9b()} +function Lcc(){Hcc()} +function pdc(){Zcc()} +function pec(){iec()} +function pGc(){nGc()} +function jGc(){gGc()} +function YGc(){SGc()} +function cGc(){_Fc()} +function NFc(){KFc()} +function xgc(){sgc()} +function xHc(){tHc()} +function pHc(){lHc()} +function IHc(){CHc()} +function XHc(){RHc()} +function boc(){Mnc()} +function yqc(){mqc()} +function Pzc(){Ozc()} +function ACc(){yCc()} +function aKc(){YJc()} +function FLc(){DLc()} +function DNc(){ANc()} +function TNc(){JNc()} +function iQc(){gQc()} +function WRc(){TRc()} +function C$c(){B$c()} +function J0c(){B0c()} +function x0c(){r0c()} +function j_c(){h_c()} +function N_c(){H_c()} +function V_c(){R_c()} +function E4c(){D4c()} +function a5c(){$4c()} +function v7c(){u7c()} +function Z7c(){X7c()} +function pcd(){ncd()} +function Lcd(){Kcd()} +function Vcd(){Tcd()} +function fUd(){TTd()} +function Bfd(){Afd()} +function jkd(){hkd()} +function vmd(){umd()} +function xnd(){vnd()} +function Hpd(){Fpd()} +function HYd(){lYd()} +function yAd(){qAd()} +function gke(){rue()} +function Yxb(a){uFb(a)} +function Yb(a){this.a=a} +function cc(a){this.a=a} +function df(a){this.a=a} +function kf(a){this.a=a} +function kj(a){this.a=a} +function qj(a){this.a=a} +function Lj(a){this.a=a} +function jh(a){this.a=a} +function th(a){this.a=a} +function Bh(a){this.a=a} +function Xh(a){this.a=a} +function Xn(a){this.a=a} +function Di(a){this.a=a} +function Ki(a){this.a=a} +function Ik(a){this.a=a} +function Qk(a){this.a=a} +function mp(a){this.a=a} +function Lp(a){this.a=a} +function iq(a){this.a=a} +function Eq(a){this.a=a} +function Vq(a){this.a=a} +function Or(a){this.a=a} +function $r(a){this.b=a} +function Aj(a){this.c=a} +function vu(a){this.a=a} +function vw(a){this.a=a} +function gw(a){this.a=a} +function lw(a){this.a=a} +function Iw(a){this.a=a} +function Nw(a){this.a=a} +function Sw(a){this.a=a} +function ex(a){this.a=a} +function fx(a){this.a=a} +function lx(a){this.a=a} +function my(a){this.a=a} +function qy(a){this.a=a} +function Oy(a){this.a=a} +function NB(a){this.a=a} +function XB(a){this.a=a} +function hC(a){this.a=a} +function vC(a){this.a=a} +function MB(){this.a=[]} +function HEb(a,b){a.a=b} +function E2b(a,b){a.a=b} +function F2b(a,b){a.b=b} +function PRb(a,b){a.b=b} +function RRb(a,b){a.b=b} +function QJb(a,b){a.j=b} +function hQb(a,b){a.g=b} +function iQb(a,b){a.i=b} +function _Tb(a,b){a.c=b} +function G2b(a,b){a.c=b} +function H2b(a,b){a.d=b} +function aUb(a,b){a.d=b} +function h3b(a,b){a.k=b} +function O3b(a,b){a.c=b} +function Tmc(a,b){a.c=b} +function Smc(a,b){a.a=b} +function DJc(a,b){a.a=b} +function EJc(a,b){a.f=b} +function NSc(a,b){a.a=b} +function OSc(a,b){a.b=b} +function PSc(a,b){a.d=b} +function QSc(a,b){a.i=b} +function RSc(a,b){a.o=b} +function SSc(a,b){a.r=b} +function yUc(a,b){a.a=b} +function zUc(a,b){a.b=b} +function q3c(a,b){a.e=b} +function r3c(a,b){a.f=b} +function s3c(a,b){a.g=b} +function Y9c(a,b){a.e=b} +function Z9c(a,b){a.f=b} +function kad(a,b){a.f=b} +function Ntd(a,b){a.a=b} +function Otd(a,b){a.b=b} +function BWd(a,b){a.n=b} +function $ee(a,b){a.a=b} +function _ee(a,b){a.c=b} +function ife(a,b){a.c=b} +function Efe(a,b){a.c=b} +function hfe(a,b){a.a=b} +function Dfe(a,b){a.a=b} +function jfe(a,b){a.d=b} +function Ffe(a,b){a.d=b} +function kfe(a,b){a.e=b} +function Gfe(a,b){a.e=b} +function lfe(a,b){a.g=b} +function Hfe(a,b){a.f=b} +function Ife(a,b){a.j=b} +function wme(a,b){a.a=b} +function Fme(a,b){a.a=b} +function xme(a,b){a.b=b} +function gmc(a){a.b=a.a} +function Lg(a){a.c=a.d.d} +function fgb(a){this.a=a} +function zgb(a){this.a=a} +function Xgb(a){this.a=a} +function Xkb(a){this.a=a} +function mkb(a){this.a=a} +function reb(a){this.a=a} +function Seb(a){this.a=a} +function bfb(a){this.a=a} +function Tfb(a){this.a=a} +function blb(a){this.a=a} +function glb(a){this.a=a} +function llb(a){this.a=a} +function Ulb(a){this.a=a} +function _lb(a){this.a=a} +function Plb(a){this.b=a} +function Ppb(a){this.b=a} +function xpb(a){this.b=a} +function mpb(a){this.a=a} +function Yqb(a){this.a=a} +function uqb(a){this.c=a} +function Anb(a){this.c=a} +function zwb(a){this.c=a} +function Dkb(a){this.d=a} +function brb(a){this.a=a} +function Frb(a){this.a=a} +function hsb(a){this.a=a} +function ctb(a){this.a=a} +function cxb(a){this.a=a} +function axb(a){this.a=a} +function exb(a){this.a=a} +function gxb(a){this.a=a} +function wub(a){this.a=a} +function zAb(a){this.a=a} +function JAb(a){this.a=a} +function LAb(a){this.a=a} +function PAb(a){this.a=a} +function VBb(a){this.a=a} +function lCb(a){this.a=a} +function nCb(a){this.a=a} +function pCb(a){this.a=a} +function CCb(a){this.a=a} +function GCb(a){this.a=a} +function bDb(a){this.a=a} +function dDb(a){this.a=a} +function fDb(a){this.a=a} +function uDb(a){this.a=a} +function $Db(a){this.a=a} +function aEb(a){this.a=a} +function eEb(a){this.a=a} +function OEb(a){this.a=a} +function SEb(a){this.a=a} +function SFb(a){this.a=a} +function HFb(a){this.a=a} +function NFb(a){this.a=a} +function WGb(a){this.a=a} +function HJb(a){this.a=a} +function PJb(a){this.a=a} +function kNb(a){this.a=a} +function tOb(a){this.a=a} +function APb(a){this.a=a} +function IQb(a){this.a=a} +function bTb(a){this.a=a} +function dTb(a){this.a=a} +function wTb(a){this.a=a} +function GWb(a){this.a=a} +function UWb(a){this.a=a} +function WWb(a){this.a=a} +function fXb(a){this.a=a} +function jXb(a){this.a=a} +function M0b(a){this.a=a} +function r1b(a){this.a=a} +function D1b(a){this.e=a} +function T3b(a){this.a=a} +function W3b(a){this.a=a} +function _3b(a){this.a=a} +function c4b(a){this.a=a} +function s5b(a){this.a=a} +function u5b(a){this.a=a} +function y5b(a){this.a=a} +function C5b(a){this.a=a} +function Q5b(a){this.a=a} +function S5b(a){this.a=a} +function U5b(a){this.a=a} +function W5b(a){this.a=a} +function l7b(a){this.a=a} +function p7b(a){this.a=a} +function k8b(a){this.a=a} +function L8b(a){this.a=a} +function Rac(a){this.a=a} +function Xac(a){this.a=a} +function $ac(a){this.a=a} +function bbc(a){this.a=a} +function Cdc(a){this.a=a} +function Edc(a){this.a=a} +function Ehc(a){this.a=a} +function khc(a){this.a=a} +function Ihc(a){this.a=a} +function qfc(a){this.a=a} +function tfc(a){this.a=a} +function Wfc(a){this.a=a} +function Fic(a){this.a=a} +function Vic(a){this.a=a} +function fjc(a){this.a=a} +function pjc(a){this.a=a} +function ckc(a){this.a=a} +function hkc(a){this.a=a} +function Ykc(a){this.a=a} +function $kc(a){this.a=a} +function alc(a){this.a=a} +function glc(a){this.a=a} +function ilc(a){this.a=a} +function slc(a){this.a=a} +function Clc(a){this.a=a} +function xoc(a){this.a=a} +function zoc(a){this.a=a} +function spc(a){this.a=a} +function Vqc(a){this.a=a} +function Xqc(a){this.a=a} +function Gsc(a){this.a=a} +function Isc(a){this.a=a} +function JGc(a){this.a=a} +function NGc(a){this.a=a} +function MHc(a){this.a=a} +function JIc(a){this.a=a} +function fJc(a){this.a=a} +function BJc(a){this.a=a} +function dJc(a){this.c=a} +function Trc(a){this.b=a} +function eKc(a){this.a=a} +function IKc(a){this.a=a} +function KKc(a){this.a=a} +function MKc(a){this.a=a} +function yLc(a){this.a=a} +function HMc(a){this.a=a} +function LMc(a){this.a=a} +function PMc(a){this.a=a} +function TMc(a){this.a=a} +function XMc(a){this.a=a} +function ZMc(a){this.a=a} +function aNc(a){this.a=a} +function jNc(a){this.a=a} +function aPc(a){this.a=a} +function gPc(a){this.a=a} +function kPc(a){this.a=a} +function yPc(a){this.a=a} +function CPc(a){this.a=a} +function JPc(a){this.a=a} +function RPc(a){this.a=a} +function XPc(a){this.a=a} +function mRc(a){this.a=a} +function xTc(a){this.a=a} +function CWc(a){this.a=a} +function EWc(a){this.a=a} +function IWc(a){this.a=a} +function OWc(a){this.a=a} +function dXc(a){this.a=a} +function gXc(a){this.a=a} +function EXc(a){this.a=a} +function WXc(a){this.a=a} +function YXc(a){this.a=a} +function aYc(a){this.a=a} +function cYc(a){this.a=a} +function eYc(a){this.a=a} +function iYc(a){this.a=a} +function i0c(a){this.a=a} +function g0c(a){this.a=a} +function P1c(a){this.a=a} +function Sad(a){this.a=a} +function Uad(a){this.a=a} +function Wad(a){this.a=a} +function Yad(a){this.a=a} +function cbd(a){this.a=a} +function ydd(a){this.a=a} +function Kdd(a){this.a=a} +function Mdd(a){this.a=a} +function _ed(a){this.a=a} +function dfd(a){this.a=a} +function Kfd(a){this.a=a} +function prd(a){this.a=a} +function $rd(a){this.a=a} +function csd(a){this.a=a} +function Usd(a){this.a=a} +function Vtd(a){this.a=a} +function wud(a){this.a=a} +function Rud(a){this.f=a} +function LEd(a){this.a=a} +function UEd(a){this.a=a} +function VEd(a){this.a=a} +function WEd(a){this.a=a} +function XEd(a){this.a=a} +function YEd(a){this.a=a} +function ZEd(a){this.a=a} +function $Ed(a){this.a=a} +function _Ed(a){this.a=a} +function aFd(a){this.a=a} +function gFd(a){this.a=a} +function iFd(a){this.a=a} +function jFd(a){this.a=a} +function kFd(a){this.a=a} +function lFd(a){this.a=a} +function nFd(a){this.a=a} +function qFd(a){this.a=a} +function wFd(a){this.a=a} +function xFd(a){this.a=a} +function zFd(a){this.a=a} +function AFd(a){this.a=a} +function BFd(a){this.a=a} +function CFd(a){this.a=a} +function DFd(a){this.a=a} +function MFd(a){this.a=a} +function OFd(a){this.a=a} +function QFd(a){this.a=a} +function SFd(a){this.a=a} +function uGd(a){this.a=a} +function QGd(a){this.a=a} +function jGd(a){this.b=a} +function YOd(a){this.a=a} +function ePd(a){this.a=a} +function kPd(a){this.a=a} +function qPd(a){this.a=a} +function IPd(a){this.a=a} +function w$d(a){this.a=a} +function e_d(a){this.a=a} +function Q_d(a){this.b=a} +function c1d(a){this.a=a} +function c2d(a){this.a=a} +function l5d(a){this.a=a} +function I9d(a){this.a=a} +function L6d(a){this.c=a} +function t7d(a){this.e=a} +function pae(a){this.a=a} +function xae(a){this.a=a} +function Zde(a){this.a=a} +function Sde(a){this.d=a} +function mee(a){this.a=a} +function uje(a){this.a=a} +function Bte(a){this.a=a} +function Wse(a){this.e=a} +function Xsd(){this.a=0} +function Tsb(){akb(this)} +function bnb(){Pmb(this)} +function cHb(){bHb(this)} +function I2b(){A2b(this)} +function s2d(){this.c=d2d} +function Prc(a,b){a.b+=b} +function Uje(a,b){b.Wb(a)} +function UC(a){return a.a} +function nC(a){return a.a} +function BC(a){return a.a} +function TB(a){return a.a} +function _B(a){return a.a} +function Adb(a){return a.e} +function gC(){return null} +function MC(){return null} +function leb(){MId();OId()} +function qMb(a){a.b.Of(a.e)} +function A$b(a){a.b=new Ri} +function A8b(a,b){a.b=b-a.b} +function x8b(a,b){a.a=b-a.a} +function ZEb(a,b){a.push(b)} +function bFb(a,b){a.sort(b)} +function Q5c(a,b){b.jd(a.a)} +function Voc(a,b){Q3b(b,a)} +function tp(a,b,c){a.Yd(c,b)} +function Ss(a,b){a.e=b;b.b=a} +function im(a){_l();this.a=a} +function xq(a){_l();this.a=a} +function Gq(a){_l();this.a=a} +function Xq(a){tm();this.a=a} +function gA(a){fA();eA.le(a)} +function vA(){vA=geb;new Tsb} +function xz(){mz.call(this)} +function Ceb(){mz.call(this)} +function ueb(){xz.call(this)} +function yeb(){xz.call(this)} +function Hfb(){xz.call(this)} +function _fb(){xz.call(this)} +function cgb(){xz.call(this)} +function Ngb(){xz.call(this)} +function jib(){xz.call(this)} +function Jrb(){xz.call(this)} +function Srb(){xz.call(this)} +function Dvb(){xz.call(this)} +function Ied(){xz.call(this)} +function R1d(){this.a=this} +function k1d(){this.Bb|=256} +function vWb(){this.b=new Et} +function aFb(a,b){a.length=b} +function dyb(a,b){Rmb(a.a,b)} +function jNb(a,b){LKb(a.c,b)} +function qRc(a,b){Ysb(a.b,b)} +function VOd(a,b){UNd(a.a,b)} +function WOd(a,b){VNd(a.a,b)} +function eZd(a,b){qvd(a.e,b)} +function Cke(a){bge(a.c,a.b)} +function uj(a,b){a.kc().Nb(b)} +function Ufb(a){this.a=Zfb(a)} +function _sb(){this.a=new Tsb} +function $Ab(){this.a=new Tsb} +function xAb(){this.a=new dzb} +function gyb(){this.a=new bnb} +function BIb(){this.a=new bnb} +function GIb(){this.a=new bnb} +function wIb(){this.a=new pIb} +function gJb(){this.a=new DIb} +function TTb(){this.a=new DTb} +function jGb(){this.a=new fGb} +function qGb(){this.a=new kGb} +function q_b(){this.a=new bnb} +function E_b(){this.a=new bnb} +function EZb(){this.a=new bnb} +function J$b(){this.a=new bnb} +function YNb(){this.d=new bnb} +function lXb(){this.a=new RWb} +function y_b(){this.a=new _sb} +function k5b(){this.a=new Tsb} +function E0b(){this.b=new Tsb} +function jHc(){this.b=new bnb} +function ZNc(){this.e=new bnb} +function ahc(){this.a=new boc} +function UQc(){this.d=new bnb} +function uRc(){tRc.call(this)} +function BRc(){tRc.call(this)} +function VOc(){bnb.call(this)} +function web(){ueb.call(this)} +function Fyb(){gyb.call(this)} +function fKb(){RJb.call(this)} +function N$b(){J$b.call(this)} +function P2b(){I2b.call(this)} +function T2b(){P2b.call(this)} +function z3b(){I2b.call(this)} +function C3b(){z3b.call(this)} +function cUc(){aUc.call(this)} +function hUc(){aUc.call(this)} +function mUc(){aUc.call(this)} +function Hdd(){Ddd.call(this)} +function ACd(){$yd.call(this)} +function PCd(){$yd.call(this)} +function Ejd(){Yub.call(this)} +function LQd(){wQd.call(this)} +function lRd(){wQd.call(this)} +function MSd(){Tsb.call(this)} +function VSd(){Tsb.call(this)} +function eTd(){Tsb.call(this)} +function mXd(){HWd.call(this)} +function i1d(){_sb.call(this)} +function A1d(){k1d.call(this)} +function q4d(){dWd.call(this)} +function O5d(){Tsb.call(this)} +function R5d(){dWd.call(this)} +function lae(){Tsb.call(this)} +function Cae(){Tsb.call(this)} +function ome(){kUd.call(this)} +function Hme(){ome.call(this)} +function Nme(){kUd.call(this)} +function Gre(){Tqe.call(this)} +function aUc(){this.a=new _sb} +function nZc(){this.a=new Tsb} +function DZc(){this.a=new bnb} +function Ddd(){this.a=new Tsb} +function Oqd(){this.a=new Yub} +function Oed(){this.j=new bnb} +function obd(){this.a=new nbd} +function wQd(){this.a=new AQd} +function R5c(){this.a=new V5c} +function wb(){wb=geb;vb=new xb} +function Wk(){Wk=geb;Vk=new Xk} +function kl(){kl=geb;jl=new ll} +function ll(){Qk.call(this,'')} +function Xk(){Qk.call(this,'')} +function Dd(a){yd.call(this,a)} +function Hd(a){yd.call(this,a)} +function xh(a){th.call(this,a)} +function $h(a){Wc.call(this,a)} +function Qi(a){Wc.call(this,a)} +function wi(a){$h.call(this,a)} +function Sp(a){$h.call(this,a)} +function Js(a){$h.call(this,a)} +function Jp(a){Xo.call(this,a)} +function Qp(a){Xo.call(this,a)} +function dq(a){ho.call(this,a)} +function Fv(a){uv.call(this,a)} +function aw(a){Tr.call(this,a)} +function cw(a){Tr.call(this,a)} +function _w(a){Tr.call(this,a)} +function Mx(a){Gn.call(this,a)} +function Nx(a){Mx.call(this,a)} +function yz(a){nz.call(this,a)} +function aC(a){yz.call(this,a)} +function uC(){vC.call(this,{})} +function cC(){cC=geb;bC=new dC} +function zs(){zs=geb;ys=new As} +function Az(){Az=geb;zz=new nb} +function $z(){$z=geb;Zz=new bA} +function $A(){$A=geb;ZA=new aB} +function Ovb(a){Kvb();this.a=a} +function FKc(a){jKc();this.a=a} +function zud(a){nud();this.f=a} +function Bud(a){nud();this.f=a} +function Cde(a){KMd();this.a=a} +function Lyb(a){a.b=null;a.c=0} +function kz(a,b){a.e=b;hz(a,b)} +function NYb(a,b){a.a=b;PYb(a)} +function cLb(a,b,c){a.a[b.g]=c} +function zsd(a,b,c){Hsd(c,a,b)} +function shc(a,b){Xmc(b.i,a.n)} +function HCc(a,b){ICc(a).Cd(b)} +function yw(a,b){a.a.ec().Mc(b)} +function ns(a,b){return a.g-b.g} +function AUb(a,b){return a*a/b} +function Heb(a){return uFb(a),a} +function Kfb(a){return uFb(a),a} +function Mfb(a){return uFb(a),a} +function JC(a){return new hC(a)} +function LC(a){return new OC(a)} +function shb(a){return uFb(a),a} +function Chb(a){return uFb(a),a} +function teb(a){yz.call(this,a)} +function veb(a){yz.call(this,a)} +function zeb(a){yz.call(this,a)} +function Aeb(a){nz.call(this,a)} +function Ifb(a){yz.call(this,a)} +function agb(a){yz.call(this,a)} +function dgb(a){yz.call(this,a)} +function Mgb(a){yz.call(this,a)} +function Ogb(a){yz.call(this,a)} +function kib(a){yz.call(this,a)} +function Jed(a){yz.call(this,a)} +function Ked(a){yz.call(this,a)} +function CDd(a){yz.call(this,a)} +function Mle(a){yz.call(this,a)} +function Lqe(a){yz.call(this,a)} +function mob(a){uFb(a);this.a=a} +function yYb(a){sYb(a);return a} +function Nnb(a){Snb(a,a.length)} +function nmb(a){return a.b==a.c} +function Vyb(a){return !!a&&a.b} +function gLb(a){return !!a&&a.k} +function hLb(a){return !!a&&a.j} +function F_b(a,b,c){a.c.Ef(b,c)} +function Ts(a,b){a.be(b);b.ae(a)} +function Fy(a){_l();this.a=Qb(a)} +function Gb(){this.a=WD(Qb(pve))} +function jc(){throw Adb(new jib)} +function jn(){throw Adb(new jib)} +function Hh(){throw Adb(new jib)} +function Xi(){throw Adb(new jib)} +function Xj(){throw Adb(new jib)} +function Yj(){throw Adb(new jib)} +function Qz(){Qz=geb;!!(fA(),eA)} +function Qhb(){reb.call(this,'')} +function Rhb(){reb.call(this,'')} +function bib(){reb.call(this,'')} +function cib(){reb.call(this,'')} +function eib(a){veb.call(this,a)} +function xeb(a){veb.call(this,a)} +function Vgb(a){agb.call(this,a)} +function Lqb(a){xpb.call(this,a)} +function Sqb(a){Lqb.call(this,a)} +function irb(a){Upb.call(this,a)} +function pc(a){qc.call(this,a,0)} +function Ri(){Si.call(this,12,3)} +function WC(a,b){return xfb(a,b)} +function cFb(a,b){return dD(a,b)} +function Reb(a,b){return a.a-b.a} +function afb(a,b){return a.a-b.a} +function Wgb(a,b){return a.a-b.a} +function pC(b,a){return a in b.a} +function Vvb(a){return a.a?a.b:0} +function cwb(a){return a.a?a.b:0} +function Fxb(a,b,c){b.Cd(a.a[c])} +function Kxb(a,b,c){b.Pe(a.a[c])} +function uKb(a,b){a.b=new sjd(b)} +function QGb(a,b){a.b=b;return a} +function RGb(a,b){a.c=b;return a} +function SGb(a,b){a.f=b;return a} +function TGb(a,b){a.g=b;return a} +function yJb(a,b){a.a=b;return a} +function zJb(a,b){a.f=b;return a} +function AJb(a,b){a.k=b;return a} +function WNb(a,b){a.a=b;return a} +function XNb(a,b){a.e=b;return a} +function BYb(a,b){a.e=b;return a} +function CYb(a,b){a.f=b;return a} +function BRb(a,b){a.b=true;a.d=b} +function WNc(a,b){return a.b-b.b} +function KSc(a,b){return a.g-b.g} +function pmc(a,b){return a?0:b-1} +function qKc(a,b){return a?0:b-1} +function pKc(a,b){return a?b-1:0} +function uVc(a,b){return a.s-b.s} +function Xed(a,b){return b.rg(a)} +function Xfd(a,b){a.b=b;return a} +function Wfd(a,b){a.a=b;return a} +function Yfd(a,b){a.c=b;return a} +function Zfd(a,b){a.d=b;return a} +function $fd(a,b){a.e=b;return a} +function _fd(a,b){a.f=b;return a} +function mgd(a,b){a.a=b;return a} +function ngd(a,b){a.b=b;return a} +function ogd(a,b){a.c=b;return a} +function Khd(a,b){a.c=b;return a} +function Jhd(a,b){a.b=b;return a} +function Lhd(a,b){a.d=b;return a} +function Mhd(a,b){a.e=b;return a} +function Nhd(a,b){a.f=b;return a} +function Ohd(a,b){a.g=b;return a} +function Phd(a,b){a.a=b;return a} +function Qhd(a,b){a.i=b;return a} +function Rhd(a,b){a.j=b;return a} +function coc(a,b){Mnc();P3b(b,a)} +function bbd(a,b,c){_ad(a.a,b,c)} +function Fjd(a){Zub.call(this,a)} +function TRb(a){SRb.call(this,a)} +function pLc(a){CIc.call(this,a)} +function ILc(a){CIc.call(this,a)} +function gLd(a){ZHd.call(this,a)} +function DPd(a){xPd.call(this,a)} +function FPd(a){xPd.call(this,a)} +function x2b(){y2b.call(this,'')} +function pjd(){this.a=0;this.b=0} +function ATc(){this.b=0;this.a=0} +function lXd(a,b){a.b=0;bWd(a,b)} +function Kqd(a,b){a.k=b;return a} +function Lqd(a,b){a.j=b;return a} +function vfe(a,b){a.c=b;a.b=true} +function Etb(){Etb=geb;Dtb=Gtb()} +function bvd(){bvd=geb;avd=OAd()} +function dvd(){dvd=geb;cvd=aCd()} +function MId(){MId=geb;LId=ygd()} +function jTd(){jTd=geb;iTd=Qae()} +function Ole(){Ole=geb;Nle=vne()} +function Qle(){Qle=geb;Ple=Cne()} +function mfb(a){return a.e&&a.e()} +function FD(a){return a.l|a.m<<22} +function Oc(a,b){return a.c._b(b)} +function En(a,b){return Wv(a.b,b)} +function Vd(a){return !a?null:a.d} +function Vv(a){return !a?null:a.g} +function $v(a){return !a?null:a.i} +function nfb(a){lfb(a);return a.o} +function Khb(a,b){a.a+=b;return a} +function Lhb(a,b){a.a+=b;return a} +function Ohb(a,b){a.a+=b;return a} +function Uhb(a,b){a.a+=b;return a} +function _wb(a,b){while(a.Bd(b));} +function atb(a){this.a=new Usb(a)} +function $tb(){throw Adb(new jib)} +function qpb(){throw Adb(new jib)} +function rpb(){throw Adb(new jib)} +function spb(){throw Adb(new jib)} +function vpb(){throw Adb(new jib)} +function Opb(){throw Adb(new jib)} +function yAb(a){this.a=new ezb(a)} +function H2c(){this.a=new Wed(s0)} +function TVc(){this.b=new Wed(H$)} +function l6c(){this.a=new Wed(V0)} +function $ad(){this.b=new Wed(I1)} +function nbd(){this.b=new Wed(I1)} +function T2c(a){this.a=0;this.b=a} +function Bib(a){tib();vib(this,a)} +function QDb(a){LCb(a);return a.a} +function dvb(a){return a.b!=a.d.c} +function AMc(a,b){return a.d[b.p]} +function ued(a,b){return ned(a,b)} +function $Eb(a,b,c){a.splice(b,c)} +function ixb(a,b){while(a.Re(b));} +function NKb(a){a.c?MKb(a):OKb(a)} +function mQd(){throw Adb(new jib)} +function nQd(){throw Adb(new jib)} +function oQd(){throw Adb(new jib)} +function pQd(){throw Adb(new jib)} +function qQd(){throw Adb(new jib)} +function rQd(){throw Adb(new jib)} +function sQd(){throw Adb(new jib)} +function tQd(){throw Adb(new jib)} +function uQd(){throw Adb(new jib)} +function vQd(){throw Adb(new jib)} +function zue(){throw Adb(new Dvb)} +function Aue(){throw Adb(new Dvb)} +function oue(a){this.a=new Dte(a)} +function Dte(a){Cte(this,a,sse())} +function cve(a){return !a||bve(a)} +function Cqe(a){return xqe[a]!=-1} +function Yz(){Nz!=0&&(Nz=0);Pz=-1} +function beb(){_db==null&&(_db=[])} +function eg(a,b){zf.call(this,a,b)} +function gg(a,b){eg.call(this,a,b)} +function Nj(a,b){this.a=a;this.b=b} +function hk(a,b){this.a=a;this.b=b} +function nk(a,b){this.a=a;this.b=b} +function pk(a,b){this.a=a;this.b=b} +function xk(a,b){this.a=a;this.b=b} +function zk(a,b){this.a=a;this.b=b} +function Kk(a,b){this.a=a;this.b=b} +function ne(a,b){this.e=a;this.d=b} +function Hf(a,b){this.b=a;this.c=b} +function cp(a,b){this.b=a;this.a=b} +function Cp(a,b){this.b=a;this.a=b} +function qr(a,b){this.b=a;this.a=b} +function Rr(a,b){this.b=a;this.a=b} +function vr(a,b){this.a=a;this.b=b} +function su(a,b){this.a=a;this.b=b} +function Hu(a,b){this.a=a;this.f=b} +function gp(a,b){this.g=a;this.i=b} +function qs(a,b){this.f=a;this.g=b} +function Gv(a,b){this.b=a;this.c=b} +function Wc(a){Lb(a.dc());this.c=a} +function Ex(a,b){this.a=a;this.b=b} +function ey(a,b){this.a=a;this.b=b} +function pv(a){this.a=RD(Qb(a),15)} +function uv(a){this.a=RD(Qb(a),15)} +function nw(a){this.a=RD(Qb(a),85)} +function rf(a){this.b=RD(Qb(a),85)} +function Tr(a){this.b=RD(Qb(a),51)} +function uB(){this.q=new $wnd.Date} +function CC(a,b){this.a=a;this.b=b} +function Bt(a,b){return Ujb(a.b,b)} +function tpb(a,b){return a.b.Hc(b)} +function upb(a,b){return a.b.Ic(b)} +function wpb(a,b){return a.b.Qc(b)} +function Pqb(a,b){return a.b.Hc(b)} +function pqb(a,b){return a.c.uc(b)} +function rqb(a,b){return pb(a.c,b)} +function Zsb(a,b){return a.a._b(b)} +function Xp(a,b){return a>b&&b<hwe} +function bkb(a){return a.f.c+a.i.c} +function IC(a){return WB(),a?VB:UB} +function Usb(a){ckb.call(this,a,0)} +function dzb(){ezb.call(this,null)} +function Osb(a){this.c=a;Lsb(this)} +function Yub(){Lub(this);Xub(this)} +function gib(){gib=geb;fib=new oeb} +function Qob(){Qob=geb;Pob=new Rob} +function Tvb(){Tvb=geb;Svb=new Xvb} +function bwb(){bwb=geb;awb=new dwb} +function SAb(){SAb=geb;RAb=new VAb} +function rDb(){NCb.call(this,null)} +function xDb(){xDb=geb;wDb=new KEb} +function FDb(a,b){LCb(a);a.a.Nb(b)} +function sAb(a,b){return a.a.Xc(b)} +function tAb(a,b){return a.a.Yc(b)} +function uAb(a,b){return a.a.$c(b)} +function vAb(a,b){return a.a._c(b)} +function JBb(a,b){return a.Gc(b),a} +function KBb(a,b){return ye(a,b),a} +function m_d(a,b){pLd(xYd(a.a),b)} +function r_d(a,b){pLd(xYd(a.a),b)} +function EBb(a,b){a.Gc(b);return a} +function hGb(a,b){a.a.f=b;return a} +function nGb(a,b){a.a.d=b;return a} +function oGb(a,b){a.a.g=b;return a} +function pGb(a,b){a.a.j=b;return a} +function sIb(a,b){a.a.a=b;return a} +function tIb(a,b){a.a.d=b;return a} +function uIb(a,b){a.a.e=b;return a} +function vIb(a,b){a.a.g=b;return a} +function fJb(a,b){a.a.f=b;return a} +function KJb(a){a.b=false;return a} +function wGb(){wGb=geb;vGb=new xGb} +function VRb(){VRb=geb;URb=new WRb} +function zXb(){zXb=geb;yXb=new FXb} +function kYb(){kYb=geb;jYb=new lYb} +function pYb(){pYb=geb;oYb=new QYb} +function NZb(){NZb=geb;MZb=new SZb} +function g0b(){g0b=geb;f0b=new l0b} +function i1b(){i1b=geb;h1b=new X1b} +function s7b(){s7b=geb;r7b=new C7b} +function H5b(){H5b=geb;G5b=new pjd} +function Hcc(){Hcc=geb;Gcc=new Ncc} +function Wjc(){Wjc=geb;Vjc=new Jlc} +function mqc(){mqc=geb;lqc=new Aqc} +function GCc(){GCc=geb;FCc=new Yrd} +function sbd(){sbd=geb;rbd=new ubd} +function Cbd(){Cbd=geb;Bbd=new Dbd} +function _cd(){_cd=geb;$cd=new cdd} +function GGc(){yGc();this.c=new Ri} +function ubd(){qs.call(this,DBe,0)} +function Mfd(a,b,c){$jb(a.d,b.f,c)} +function bNb(a,b,c,d){aNb(a,d,b,c)} +function V6b(a,b,c,d){$6b(d,a,b,c)} +function vcc(a,b,c,d){wcc(d,a,b,c)} +function Dgd(a,b){dub(a.c.c,b.b,b)} +function Cgd(a,b){dub(a.c.b,b.c,b)} +function BYc(a){return a.e.b+a.f.b} +function AYc(a){return a.e.a+a.f.a} +function N1d(a){return a.b?a.b:a.a} +function yTc(a){return (a.c+a.a)/2} +function b2d(a,b){return GA(a.a,b)} +function rfd(a,b){a.a=b.g;return a} +function hTd(){hTd=geb;gTd=new Cae} +function cTd(){cTd=geb;bTd=new eTd} +function lud(){lud=geb;kud=new Yud} +function $Sd(){$Sd=geb;ZSd=new _Sd} +function TSd(){TSd=geb;SSd=new VSd} +function YSd(){YSd=geb;XSd=new O5d} +function PRd(){PRd=geb;ORd=new Tsb} +function N2d(){N2d=geb;M2d=new Uhe} +function j3d(){j3d=geb;i3d=new Yhe} +function Gie(){Gie=geb;Fie=new Hie} +function nke(){nke=geb;mke=new rke} +function uue(){uue=geb;tue=new Cue} +function Tae(){Tae=geb;Rae=new bnb} +function _v(a){return RD(a,44).ld()} +function Akb(a){return a.b<a.d.gc()} +function meb(b,a){return a.split(b)} +function Idb(a,b){return Ddb(a,b)>0} +function Ldb(a,b){return Ddb(a,b)<0} +function Urb(a,b){return Bsb(a.a,b)} +function Beb(a,b){oz.call(this,a,b)} +function Qx(a){Px();ho.call(this,a)} +function Lnb(a,b){Pnb(a,a.length,b)} +function Mnb(a,b){Rnb(a,a.length,b)} +function Ktb(a,b){return a.a.get(b)} +function bub(a,b){return Ujb(a.e,b)} +function Zxb(a){return uFb(a),false} +function zw(a){this.a=RD(Qb(a),229)} +function $wb(a){Swb.call(this,a,21)} +function dAb(a,b){qs.call(this,a,b)} +function yBb(a,b){qs.call(this,a,b)} +function ssb(a,b){this.b=a;this.a=b} +function xlb(a,b){this.d=a;this.e=b} +function jEb(a,b){this.a=a;this.b=b} +function pEb(a,b){this.a=a;this.b=b} +function vEb(a,b){this.a=a;this.b=b} +function BEb(a,b){this.a=a;this.b=b} +function TFb(a,b){this.a=a;this.b=b} +function QEb(a,b){this.b=a;this.a=b} +function sHb(a,b){this.b=a;this.a=b} +function EHb(a,b){qs.call(this,a,b)} +function MHb(a,b){qs.call(this,a,b)} +function jIb(a,b){qs.call(this,a,b)} +function $Jb(a,b){qs.call(this,a,b)} +function FKb(a,b){qs.call(this,a,b)} +function wLb(a,b){qs.call(this,a,b)} +function nOb(a,b){qs.call(this,a,b)} +function kPb(a,b){this.b=a;this.a=b} +function JPb(a,b){qs.call(this,a,b)} +function fRb(a,b){this.b=a;this.a=b} +function JRb(a,b){qs.call(this,a,b)} +function OTb(a,b){this.b=a;this.a=b} +function UUb(a,b){qs.call(this,a,b)} +function BWb(a,b){qs.call(this,a,b)} +function tXb(a,b){qs.call(this,a,b)} +function XEb(a,b,c){a.splice(b,0,c)} +function pr(a,b,c){a.Mb(c)&&b.Cd(c)} +function lEb(a,b,c){b.Pe(a.a.Ye(c))} +function rEb(a,b,c){b.Dd(a.a.Ze(c))} +function xEb(a,b,c){b.Cd(a.a.Kb(c))} +function eYb(a,b){return Csb(a.c,b)} +function cGb(a,b){return Csb(a.e,b)} +function qZb(a,b){qs.call(this,a,b)} +function V$b(a,b){qs.call(this,a,b)} +function s3b(a,b){qs.call(this,a,b)} +function Q8b(a,b){qs.call(this,a,b)} +function icc(a,b){qs.call(this,a,b)} +function xec(a,b){qs.call(this,a,b)} +function gic(a,b){this.a=a;this.b=b} +function Xic(a,b){this.a=a;this.b=b} +function h4b(a,b){this.a=a;this.b=b} +function vjc(a,b){this.a=a;this.b=b} +function xjc(a,b){this.a=a;this.b=b} +function Hjc(a,b){this.a=a;this.b=b} +function hjc(a,b){this.b=a;this.a=b} +function Jjc(a,b){this.b=a;this.a=b} +function _Yb(a,b){this.b=a;this.a=b} +function eZb(a,b){this.c=a;this.d=b} +function Q1b(a,b){this.e=a;this.d=b} +function Tjc(a,b){this.a=a;this.b=b} +function ulc(a,b){this.a=a;this.b=b} +function Elc(a,b){this.a=a;this.b=b} +function fqc(a,b){this.b=a;this.a=b} +function smc(a,b){this.b=b;this.c=a} +function fnc(a,b){qs.call(this,a,b)} +function Cnc(a,b){qs.call(this,a,b)} +function koc(a,b){qs.call(this,a,b)} +function ktc(a,b){qs.call(this,a,b)} +function ctc(a,b){qs.call(this,a,b)} +function utc(a,b){qs.call(this,a,b)} +function Ftc(a,b){qs.call(this,a,b)} +function Rtc(a,b){qs.call(this,a,b)} +function _tc(a,b){qs.call(this,a,b)} +function iuc(a,b){qs.call(this,a,b)} +function vuc(a,b){qs.call(this,a,b)} +function Duc(a,b){qs.call(this,a,b)} +function Puc(a,b){qs.call(this,a,b)} +function _uc(a,b){qs.call(this,a,b)} +function pvc(a,b){qs.call(this,a,b)} +function yvc(a,b){qs.call(this,a,b)} +function Hvc(a,b){qs.call(this,a,b)} +function Pvc(a,b){qs.call(this,a,b)} +function dxc(a,b){qs.call(this,a,b)} +function bDc(a,b){qs.call(this,a,b)} +function nDc(a,b){qs.call(this,a,b)} +function yDc(a,b){qs.call(this,a,b)} +function LDc(a,b){qs.call(this,a,b)} +function bEc(a,b){qs.call(this,a,b)} +function lEc(a,b){qs.call(this,a,b)} +function tEc(a,b){qs.call(this,a,b)} +function CEc(a,b){qs.call(this,a,b)} +function LEc(a,b){qs.call(this,a,b)} +function UEc(a,b){qs.call(this,a,b)} +function mFc(a,b){qs.call(this,a,b)} +function vFc(a,b){qs.call(this,a,b)} +function EFc(a,b){qs.call(this,a,b)} +function SKc(a,b){qs.call(this,a,b)} +function cNc(a,b){this.b=a;this.a=b} +function tNc(a,b){qs.call(this,a,b)} +function QOc(a,b){this.a=a;this.b=b} +function ePc(a,b){this.a=a;this.b=b} +function LPc(a,b){this.a=a;this.b=b} +function xQc(a,b){qs.call(this,a,b)} +function FQc(a,b){qs.call(this,a,b)} +function MQc(a,b){this.a=a;this.b=b} +function FMc(a,b){dMc();return b!=a} +function Uvb(a){sFb(a.a);return a.b} +function qYb(a){rYb(a,a.c);return a} +function Itb(){Etb();return new Dtb} +function _ec(){Rec();this.a=new e6b} +function lSc(){dSc();this.a=new _sb} +function aRc(){WQc();this.b=new _sb} +function xRc(a,b){this.b=a;this.d=b} +function nVc(a,b){this.a=a;this.b=b} +function pVc(a,b){this.a=a;this.b=b} +function GWc(a,b){this.a=a;this.b=b} +function IXc(a,b){this.b=a;this.a=b} +function gTc(a,b){qs.call(this,a,b)} +function eVc(a,b){qs.call(this,a,b)} +function $Vc(a,b){qs.call(this,a,b)} +function XYc(a,b){qs.call(this,a,b)} +function MZc(a,b){qs.call(this,a,b)} +function t_c(a,b){qs.call(this,a,b)} +function B_c(a,b){qs.call(this,a,b)} +function z2c(a,b){qs.call(this,a,b)} +function h3c(a,b){qs.call(this,a,b)} +function $3c(a,b){qs.call(this,a,b)} +function i4c(a,b){qs.call(this,a,b)} +function l5c(a,b){qs.call(this,a,b)} +function v5c(a,b){qs.call(this,a,b)} +function g6c(a,b){qs.call(this,a,b)} +function A6c(a,b){qs.call(this,a,b)} +function a7c(a,b){qs.call(this,a,b)} +function B8c(a,b){qs.call(this,a,b)} +function d9c(a,b){qs.call(this,a,b)} +function D9c(a,b){qs.call(this,a,b)} +function tad(a,b){qs.call(this,a,b)} +function hbd(a,b){qs.call(this,a,b)} +function Nbd(a,b){qs.call(this,a,b)} +function Ybd(a,b){qs.call(this,a,b)} +function ndd(a,b){qs.call(this,a,b)} +function z1c(a,b){this.b=a;this.a=b} +function B1c(a,b){this.b=a;this.a=b} +function d2c(a,b){this.b=a;this.a=b} +function f2c(a,b){this.b=a;this.a=b} +function m9c(a,b){this.a=a;this.b=b} +function xed(a,b){this.a=a;this.b=b} +function ffd(a,b){this.a=a;this.b=b} +function rjd(a,b){this.a=a;this.b=b} +function Sjd(a,b){qs.call(this,a,b)} +function Zhd(a,b){qs.call(this,a,b)} +function lid(a,b){qs.call(this,a,b)} +function vkd(a,b){qs.call(this,a,b)} +function Gmd(a,b){qs.call(this,a,b)} +function Pmd(a,b){qs.call(this,a,b)} +function Zmd(a,b){qs.call(this,a,b)} +function jnd(a,b){qs.call(this,a,b)} +function Gnd(a,b){qs.call(this,a,b)} +function Rnd(a,b){qs.call(this,a,b)} +function eod(a,b){qs.call(this,a,b)} +function qod(a,b){qs.call(this,a,b)} +function Eod(a,b){qs.call(this,a,b)} +function Qod(a,b){qs.call(this,a,b)} +function upd(a,b){qs.call(this,a,b)} +function Rpd(a,b){qs.call(this,a,b)} +function eqd(a,b){qs.call(this,a,b)} +function nqd(a,b){qs.call(this,a,b)} +function vqd(a,b){qs.call(this,a,b)} +function Hrd(a,b){qs.call(this,a,b)} +function esd(a,b){this.a=a;this.b=b} +function gsd(a,b){this.a=a;this.b=b} +function isd(a,b){this.a=a;this.b=b} +function Osd(a,b){this.a=a;this.b=b} +function Qsd(a,b){this.a=a;this.b=b} +function Ssd(a,b){this.a=a;this.b=b} +function Ptd(a,b){this.a=a;this.b=b} +function JEd(a,b){this.a=a;this.b=b} +function KEd(a,b){this.a=a;this.b=b} +function MEd(a,b){this.a=a;this.b=b} +function NEd(a,b){this.a=a;this.b=b} +function QEd(a,b){this.a=a;this.b=b} +function REd(a,b){this.a=a;this.b=b} +function SEd(a,b){this.b=a;this.a=b} +function TEd(a,b){this.b=a;this.a=b} +function bFd(a,b){this.b=a;this.a=b} +function dFd(a,b){this.b=a;this.a=b} +function fFd(a,b){this.a=a;this.b=b} +function hFd(a,b){this.a=a;this.b=b} +function utd(a,b){qs.call(this,a,b)} +function sFd(a,b){this.a=a;this.b=b} +function uFd(a,b){this.a=a;this.b=b} +function bGd(a,b){qs.call(this,a,b)} +function uId(a,b){this.f=a;this.c=b} +function Ofd(a,b){return Csb(a.g,b)} +function Tqc(a,b){return Csb(b.b,a)} +function HPd(a,b){return QNd(a.a,b)} +function Idd(a,b){return -a.b.af(b)} +function IId(a,b){!!a&&Zjb(CId,a,b)} +function yWd(a,b){a.i=null;zWd(a,b)} +function kEd(a,b,c){pDd(b,KDd(a,c))} +function lEd(a,b,c){pDd(b,KDd(a,c))} +function mFd(a,b){vEd(a.a,RD(b,58))} +function _Mc(a,b){GMc(a.a,RD(b,12))} +function KTd(a,b){this.a=a;this.b=b} +function NTd(a,b){this.a=a;this.b=b} +function B5d(a,b){this.a=a;this.b=b} +function Z6d(a,b){this.a=a;this.b=b} +function Ble(a,b){this.a=a;this.b=b} +function afe(a,b){this.d=a;this.b=b} +function wfe(a,b){this.e=a;this.a=b} +function Eke(a,b){this.b=a;this.c=b} +function zNd(a,b){this.i=a;this.g=b} +function kZd(a,b){this.d=a;this.e=b} +function ave(a,b){eve(new dMd(a),b)} +function Dke(a){return pge(a.c,a.b)} +function Wd(a){return !a?null:a.md()} +function dE(a){return a==null?null:a} +function bE(a){return typeof a===jve} +function $D(a){return typeof a===hve} +function _D(a){return typeof a===ive} +function Gdb(a,b){return Ddb(a,b)==0} +function Jdb(a,b){return Ddb(a,b)>=0} +function Pdb(a,b){return Ddb(a,b)!=0} +function ar(a,b){return zr(a.Kc(),b)} +function Qm(a,b){return a.Rd().Xb(b)} +function kg(a){ig(a);return a.d.gc()} +function fE(a){CFb(a==null);return a} +function Mhb(a,b){a.a+=''+b;return a} +function Nhb(a,b){a.a+=''+b;return a} +function Whb(a,b){a.a+=''+b;return a} +function Yhb(a,b){a.a+=''+b;return a} +function Zhb(a,b){a.a+=''+b;return a} +function Vhb(a,b){return a.a+=''+b,a} +function Pfb(a){return ''+(uFb(a),a)} +function Vsb(a){akb(this);Ld(this,a)} +function YFc(){RFc();UFc.call(this)} +function pxb(a,b){kxb.call(this,a,b)} +function txb(a,b){kxb.call(this,a,b)} +function xxb(a,b){kxb.call(this,a,b)} +function Oub(a,b){Pub(a,b,a.c.b,a.c)} +function Nub(a,b){Pub(a,b,a.a,a.a.a)} +function Iob(a){tFb(a,0);return null} +function Xvb(){this.b=0;this.a=false} +function dwb(){this.b=0;this.a=false} +function Et(){this.b=new Usb(Sv(12))} +function pMb(){pMb=geb;oMb=ss(nMb())} +function ncc(){ncc=geb;mcc=ss(lcc())} +function aZc(){aZc=geb;_Yc=ss($Yc())} +function WA(){WA=geb;vA();VA=new Tsb} +function hjd(a){a.a=0;a.b=0;return a} +function qfd(a,b){a.a=b.g+1;return a} +function yNd(a,b){aMd.call(this,a,b)} +function lGd(a,b){kGd.call(this,a,b)} +function N$d(a,b){zNd.call(this,a,b)} +function Whe(a,b){Q2d.call(this,a,b)} +function She(a,b){Phe.call(this,a,b)} +function RRd(a,b){PRd();Zjb(ORd,a,b)} +function sB(a,b){a.q.setTime(Xdb(b))} +function Xz(a){$wnd.clearTimeout(a)} +function cr(a){return Qb(a),new Dl(a)} +function mb(a,b){return dE(a)===dE(b)} +function Mw(a,b){return a.a.a.a.cc(b)} +function qeb(a,b){return zhb(a.a,0,b)} +function SSb(a){return MSb(RD(a,74))} +function Nfb(a){return eE((uFb(a),a))} +function Ofb(a){return eE((uFb(a),a))} +function gD(a){return hD(a.l,a.m,a.h)} +function egb(a,b){return hgb(a.a,b.a)} +function ygb(a,b){return Agb(a.a,b.a)} +function Sfb(a,b){return Qfb(a.a,b.a)} +function qhb(a,b){return a.indexOf(b)} +function nOc(a,b){return a.j[b.p]==2} +function cz(a,b){return a==b?0:a?1:-1} +function AB(a){return a<10?'0'+a:''+a} +function Kdb(a){return typeof a===ive} +function oZb(a){return a==jZb||a==mZb} +function pZb(a){return a==jZb||a==kZb} +function ELb(a,b){return hgb(a.g,b.g)} +function Q4b(a){return Wmb(a.b.b,a,0)} +function Q2b(){J2b.call(this,0,0,0,0)} +function Iub(){ctb.call(this,new gub)} +function Znb(a,b){Wnb(a,0,a.length,b)} +function Eyb(a,b){Rmb(a.a,b);return b} +function Fkc(a,b){lkc();return b.a+=a} +function Hkc(a,b){lkc();return b.a+=a} +function Gkc(a,b){lkc();return b.c+=a} +function ied(a,b){Rmb(a.c,b);return a} +function Ped(a,b){ofd(a.a,b);return a} +function ttb(a){this.a=Itb();this.b=a} +function Ntb(a){this.a=Itb();this.b=a} +function sjd(a){this.a=a.a;this.b=a.b} +function Dl(a){this.a=a;zl.call(this)} +function Gl(a){this.a=a;zl.call(this)} +function Tid(){Uid.call(this,0,0,0,0)} +function vfd(a){return ofd(new ufd,a)} +function Ksd(a){return iyd(RD(a,123))} +function Mvd(a){return a.vh()&&a.wh()} +function Dod(a){return a!=zod&&a!=Aod} +function Dmd(a){return a==ymd||a==zmd} +function Emd(a){return a==Bmd||a==xmd} +function xDc(a){return a==tDc||a==sDc} +function yrc(a,b){return hgb(a.g,b.g)} +function Yfe(a,b){return new Phe(b,a)} +function Zfe(a,b){return new Phe(b,a)} +function lr(a){return Dr(a.b.Kc(),a.a)} +function IXd(a,b){yXd(a,b);zXd(a,a.D)} +function Uxd(a,b,c){Vxd(a,b);Wxd(a,c)} +function zyd(a,b,c){Cyd(a,b);Ayd(a,c)} +function Byd(a,b,c){Dyd(a,b);Eyd(a,c)} +function Gzd(a,b,c){Hzd(a,b);Izd(a,c)} +function Nzd(a,b,c){Ozd(a,b);Pzd(a,c)} +function eh(a,b,c){bh.call(this,a,b,c)} +function zId(a){uId.call(this,a,true)} +function nAb(){dAb.call(this,'Tail',3)} +function iAb(){dAb.call(this,'Head',1)} +function ejb(a){Pib();fjb.call(this,a)} +function A3b(a){J2b.call(this,a,a,a,a)} +function Pmb(a){a.c=$C(jJ,rve,1,0,5,1)} +function yRb(a){a.b&&CRb(a);return a.a} +function zRb(a){a.b&&CRb(a);return a.c} +function mBb(a,b){if(dBb){return}a.b=b} +function YCb(a,b){return a[a.length]=b} +function _Cb(a,b){return a[a.length]=b} +function l5b(a,b){return NGd(b,MCd(a))} +function m5b(a,b){return NGd(b,MCd(a))} +function DDd(a,b){return lp(Co(a.d),b)} +function EDd(a,b){return lp(Co(a.g),b)} +function FDd(a,b){return lp(Co(a.j),b)} +function mGd(a,b){kGd.call(this,a.b,b)} +function s0d(a,b){WGd(tYd(a.a),v0d(b))} +function B4d(a,b){WGd(o4d(a.a),E4d(b))} +function Asd(a,b,c){Byd(c,c.i+a,c.j+b)} +function eFc(a,b,c){bD(a.c[b.g],b.g,c)} +function zVd(a,b,c){RD(a.c,71).Gi(b,c)} +function LMd(a,b,c){bD(a,b,c);return c} +function DJb(a){Umb(a.Sf(),new HJb(a))} +function Gvb(a){return a!=null?tb(a):0} +function aOd(a){return a==null?0:tb(a)} +function iue(a){Vse();Wse.call(this,a)} +function Ug(a){this.a=a;Og.call(this,a)} +function Zy(){Zy=geb;$wnd.Math.log(2)} +function s7d(){s7d=geb;r7d=($Sd(),ZSd)} +function FRc(){FRc=geb;ERc=new Zrb(u3)} +function Hde(){Hde=geb;new Ide;new bnb} +function Ide(){new Tsb;new Tsb;new Tsb} +function yue(){throw Adb(new kib(bMe))} +function Nue(){throw Adb(new kib(bMe))} +function Bue(){throw Adb(new kib(cMe))} +function Que(){throw Adb(new kib(cMe))} +function Gp(a){this.a=a;rf.call(this,a)} +function Np(a){this.a=a;rf.call(this,a)} +function Sq(a,b){tm();this.a=a;this.b=b} +function Jh(a,b){Qb(b);Ih(a).Jc(new jx)} +function _mb(a,b){Ynb(a.c,a.c.length,b)} +function xnb(a){return a.a<a.c.c.length} +function Msb(a){return a.a<a.c.a.length} +function Wvb(a,b){return a.a?a.b:b.We()} +function hgb(a,b){return a<b?-1:a>b?1:0} +function Kgb(a,b){return Ddb(a,b)>0?a:b} +function hD(a,b,c){return {l:a,m:b,h:c}} +function Mvb(a,b){a.a!=null&&_Mc(b,a.a)} +function Lhc(a){Y0b(a,null);Z0b(a,null)} +function xkc(a,b,c){return Zjb(a.g,c,b)} +function bFc(a,b,c){return _Ec(b,c,a.c)} +function jOc(a,b,c){return Zjb(a.k,c,b)} +function pOc(a,b,c){qOc(a,b,c);return c} +function FOc(a,b){dOc();return b.n.b+=a} +function lUb(a){VTb.call(this);this.b=a} +function y2b(a){v2b.call(this);this.a=a} +function kAb(){dAb.call(this,'Range',2)} +function $Fb(a){this.b=a;this.a=new bnb} +function WQb(a){this.b=new gRb;this.a=a} +function Lub(a){a.a=new svb;a.c=new svb} +function nrc(a){a.a=new Tsb;a.d=new Tsb} +function $Sc(a){_Sc(a,null);aTc(a,null)} +function a2d(a,b){return xA(a.a,b,null)} +function Cdd(a,b){return Zjb(a.a,b.a,b)} +function ajd(a){return new rjd(a.a,a.b)} +function Pid(a){return new rjd(a.c,a.d)} +function Qid(a){return new rjd(a.c,a.d)} +function Ake(a,b){return Tfe(a.c,a.b,b)} +function ZD(a,b){return a!=null&&QD(a,b)} +function br(a,b){return Jr(a.Kc(),b)!=-1} +function Hr(a){return a.Ob()?a.Pb():null} +function _p(a){this.b=(yob(),new uqb(a))} +function zke(a){this.a=a;Tsb.call(this)} +function Uhe(){Q2d.call(this,null,null)} +function Yhe(){p3d.call(this,null,null)} +function As(){qs.call(this,'INSTANCE',0)} +function dXb(){_Wb();this.a=new Wed(UP)} +function Hhb(a){return Ihb(a,0,a.length)} +function Rv(a,b){return new ew(a.Kc(),b)} +function $sb(a,b){return a.a.Bc(b)!=null} +function hZd(a,b){sLd(a);a.Gc(RD(b,15))} +function ONd(a,b,c){a.c.bd(b,RD(c,136))} +function eOd(a,b,c){a.c.Ui(b,RD(c,136))} +function eub(a,b){if(a.c){rub(b);qub(b)}} +function oB(a,b){a.q.setHours(b);mB(a,b)} +function vTb(a,b){Zid(b,a.a.a.a,a.a.a.b)} +function tKb(a,b,c,d){bD(a.a[b.g],c.g,d)} +function oKb(a,b,c){return a.a[b.g][c.g]} +function AIc(a,b){return a.e[b.c.p][b.p]} +function TIc(a,b){return a.c[b.c.p][b.p]} +function pJc(a,b){return a.a[b.c.p][b.p]} +function mOc(a,b){return a.j[b.p]=AOc(b)} +function wAb(a,b){return a.a.Bc(b)!=null} +function wXc(a,b){return Kfb(UD(b.a))<=a} +function xXc(a,b){return Kfb(UD(b.a))>=a} +function vhd(a,b){return jhb(a.f,b.Pg())} +function cjd(a,b){return a.a*b.a+a.b*b.b} +function Wsd(a,b){return a.a<Qeb(b)?-1:1} +function gGd(a,b){return jhb(a.b,b.Pg())} +function xIc(a,b,c){return c?b!=0:b!=a-1} +function Mwb(a,b,c){a.a=b^1502;a.b=c^Mxe} +function ljd(a,b,c){a.a=b;a.b=c;return a} +function ijd(a,b){a.a*=b;a.b*=b;return a} +function Rmb(a,b){ZEb(a.c,b);return true} +function MHd(a,b,c){bD(a.g,b,c);return c} +function XZd(a,b,c){PZd.call(this,a,b,c)} +function _Zd(a,b,c){XZd.call(this,a,b,c)} +function aie(a,b,c){Kfe.call(this,a,b,c)} +function eie(a,b,c){Kfe.call(this,a,b,c)} +function gie(a,b,c){aie.call(this,a,b,c)} +function iie(a,b,c){XZd.call(this,a,b,c)} +function lie(a,b,c){_Zd.call(this,a,b,c)} +function vie(a,b,c){PZd.call(this,a,b,c)} +function zie(a,b,c){PZd.call(this,a,b,c)} +function Cie(a,b,c){vie.call(this,a,b,c)} +function ez(a){a.j=$C(mJ,Nve,319,0,0,1)} +function wmb(){this.a=$C(jJ,rve,1,8,5,1)} +function dWd(){this.Bb|=256;this.Bb|=512} +function dMd(a){this.i=a;this.f=this.i.j} +function Rue(a){this.c=a;this.a=this.c.a} +function zf(a,b){this.a=a;rf.call(this,b)} +function Eb(a,b){return Db(a,new bib,b).a} +function Lb(a){if(!a){throw Adb(new _fb)}} +function Ub(a){if(!a){throw Adb(new cgb)}} +function Txb(){Txb=geb;Txb();Sxb=new $xb} +function fke(){fke=geb;Gie();eke=new gke} +function Kvb(){Kvb=geb;Jvb=new Ovb(null)} +function OGd(a){Ivb(a,IIe);pzd(a,GGd(a))} +function mNd(a){a.a=RD(Ywd(a.b.a,4),129)} +function uNd(a){a.a=RD(Ywd(a.b.a,4),129)} +function Mg(a){a.b.Qb();--a.d.f.d;jg(a.d)} +function Zj(a){this.a=a;Aj.call(this,a.d)} +function ij(a,b){this.a=a;pc.call(this,b)} +function sj(a,b){this.a=a;pc.call(this,b)} +function Rj(a,b){this.a=a;pc.call(this,b)} +function Il(a,b){this.a=b;pc.call(this,a)} +function ap(a,b){this.a=b;Xo.call(this,a)} +function Ap(a,b){this.a=a;Xo.call(this,b)} +function Yr(a,b){this.a=b;Tr.call(this,a)} +function ew(a,b){this.a=b;Tr.call(this,a)} +function Mr(a,b){Qb(b);return new Yr(a,b)} +function ru(a,b){return new Ou(a.a,a.b,b)} +function rhb(a,b,c){return a.indexOf(b,c)} +function thb(a,b){return a.lastIndexOf(b)} +function Ghb(a){return a==null?vve:jeb(a)} +function Ez(a){return a==null?null:a.name} +function qD(a){return a.l+a.m*gxe+a.h*hxe} +function Gr(a){return dvb(a.a)?Fr(a):null} +function Shb(a){reb.call(this,(uFb(a),a))} +function dib(a){reb.call(this,(uFb(a),a))} +function dl(a){Qk.call(this,RD(Qb(a),34))} +function tl(a){Qk.call(this,RD(Qb(a),34))} +function Jub(a){ctb.call(this,new hub(a))} +function Upb(a){xpb.call(this,a);this.a=a} +function hqb(a){Ppb.call(this,a);this.a=a} +function jrb(a){Lqb.call(this,a);this.a=a} +function mz(){ez(this);gz(this);this.je()} +function Dzb(a){this.a=a;Plb.call(this,a)} +function Lvb(a){sFb(a.a!=null);return a.a} +function gGb(a,b){Rmb(b.a,a.a);return a.a} +function mGb(a,b){Rmb(b.b,a.a);return a.a} +function eJb(a,b){Rmb(b.a,a.a);return a.a} +function aib(a,b,c){peb(a,b,b,c);return a} +function EIb(a,b){++a.b;return Rmb(a.a,b)} +function FIb(a,b){++a.b;return Ymb(a.a,b)} +function NNb(a,b){return Qfb(a.c.d,b.c.d)} +function ZNb(a,b){return Qfb(a.c.c,b.c.c)} +function E9b(a,b){return Qfb(a.n.a,b.n.a)} +function B$b(a,b){return RD(Qc(a.b,b),15)} +function Jac(a,b){return a.n.b=(uFb(b),b)} +function Kac(a,b){return a.n.b=(uFb(b),b)} +function Csb(a,b){return !!b&&a.b[b.g]==b} +function k4b(a){return xnb(a.a)||xnb(a.b)} +function kFb(a){return a.$H||(a.$H=++iFb)} +function Nvb(a){return a.a!=null?a.a:null} +function uXc(a,b){return Qfb(a.e.b,b.e.b)} +function CXc(a,b){return Qfb(a.e.a,b.e.a)} +function ZEc(a,b,c){return $Ec(a,b,c,a.b)} +function aFc(a,b,c){return $Ec(a,b,c,a.c)} +function Ikc(a){lkc();return !!a&&!a.dc()} +function Yjc(){Wjc();this.b=new ckc(this)} +function tNb(){tNb=geb;sNb=new kGd(Xye,0)} +function Geb(){Geb=geb;Eeb=false;Feb=true} +function E8b(a){var b;b=a.a;a.a=a.b;a.b=b} +function Q2d(a,b){N2d();this.a=a;this.b=b} +function p3d(a,b){j3d();this.b=a;this.c=b} +function Fud(a,b){nud();this.f=b;this.d=a} +function qc(a,b){Sb(b,a);this.d=a;this.c=b} +function IXb(a,b){JXb.call(this,a,b,null)} +function Kg(a,b,c,d){yg.call(this,a,b,c,d)} +function mMd(a){this.d=a;dMd.call(this,a)} +function yMd(a){this.c=a;dMd.call(this,a)} +function BMd(a){this.c=a;mMd.call(this,a)} +function Zse(a){++Use;return new Kte(3,a)} +function ev(a){dk(a,iwe);return new cnb(a)} +function jA(a){fA();return parseInt(a)||-1} +function Fs(a){zs();return ws((Is(),Hs),a)} +function phb(a,b,c){return rhb(a,Fhb(b),c)} +function um(a,b){return new fq(a,a.gc(),b)} +function zj(a,b){return hn(a.c).Md().Xb(b)} +function hu(a,b,c){var d;d=a.fd(b);d.Rb(c)} +function tfd(a,b,c){RD(Med(a,b),21).Fc(c)} +function XOd(a,b,c){VNd(a.a,c);UNd(a.a,b)} +function aAd(a){ZD(a,158)&&RD(a,158).pi()} +function tub(a){uub.call(this,a,null,null)} +function Yvb(a){Tvb();this.b=a;this.a=true} +function ewb(a){bwb();this.b=a;this.a=true} +function Qub(a){sFb(a.b!=0);return a.a.a.c} +function Rub(a){sFb(a.b!=0);return a.c.b.c} +function Phb(a,b){peb(a,b,b+1,'');return a} +function nQb(a,b){return !!a.q&&Ujb(a.q,b)} +function vzb(a){return a.b=RD(Bkb(a.a),44)} +function os(a){return a.f!=null?a.f:''+a.g} +function ps(a){return a.f!=null?a.f:''+a.g} +function yUb(a,b){return a>0?b/(a*a):b*100} +function FUb(a,b){return a>0?b*b/a:b*b*100} +function $5b(a,b){return RD(cub(a.a,b),34)} +function doc(a,b){Mnc();return Rc(a,b.e,b)} +function NCc(a,b,c){GCc();return c.Mg(a,b)} +function L0c(a){B0c();return a.e.a+a.f.a/2} +function N0c(a,b,c){B0c();return c.e.a-a*b} +function V0c(a){B0c();return a.e.b+a.f.b/2} +function X0c(a,b,c){B0c();return c.e.b-a*b} +function _tb(a){a.d=new tub(a);a.e=new Tsb} +function x3c(){this.a=new Tp;this.b=new Tp} +function hmc(a){this.c=a;this.a=1;this.b=1} +function C$b(a){z$b();A$b(this);this.Ff(a)} +function Efd(a,b,c){Afd();a.pf(b)&&c.Cd(a)} +function Red(a,b,c){return Rmb(b,Ted(a,c))} +function Zid(a,b,c){a.a+=b;a.b+=c;return a} +function jjd(a,b,c){a.a*=b;a.b*=c;return a} +function mjd(a,b){a.a=b.a;a.b=b.b;return a} +function fjd(a){a.a=-a.a;a.b=-a.b;return a} +function njd(a,b,c){a.a-=b;a.b-=c;return a} +function Gjd(a){Yub.call(this);zjd(this,a)} +function Dbd(){qs.call(this,'GROW_TREE',0)} +function WRb(){qs.call(this,'POLYOMINO',0)} +function SVd(a,b,c){DVd.call(this,a,b,c,2)} +function r0d(a,b,c){VGd(tYd(a.a),b,v0d(c))} +function e3d(a,b){N2d();Q2d.call(this,a,b)} +function D3d(a,b){j3d();p3d.call(this,a,b)} +function F3d(a,b){j3d();D3d.call(this,a,b)} +function H3d(a,b){j3d();p3d.call(this,a,b)} +function PNd(a,b){return a.c.Fc(RD(b,136))} +function A4d(a,b,c){VGd(o4d(a.a),b,E4d(c))} +function Ard(a){this.c=a;Dyd(a,0);Eyd(a,0)} +function Z8d(a,b){s7d();N8d.call(this,a,b)} +function _8d(a,b){s7d();Z8d.call(this,a,b)} +function b9d(a,b){s7d();Z8d.call(this,a,b)} +function n9d(a,b){s7d();N8d.call(this,a,b)} +function d9d(a,b){s7d();b9d.call(this,a,b)} +function p9d(a,b){s7d();n9d.call(this,a,b)} +function v9d(a,b){s7d();N8d.call(this,a,b)} +function lge(a,b,c){return b.zl(a.e,a.c,c)} +function nge(a,b,c){return b.Al(a.e,a.c,c)} +function Wee(a,b,c){return tfe(Pee(a,b),c)} +function Age(a,b){return Vvd(a.e,RD(b,54))} +function _me(a){return a==null?null:Bqe(a)} +function dne(a){return a==null?null:Iqe(a)} +function gne(a){return a==null?null:jeb(a)} +function hne(a){return a==null?null:jeb(a)} +function TD(a){CFb(a==null||$D(a));return a} +function UD(a){CFb(a==null||_D(a));return a} +function WD(a){CFb(a==null||bE(a));return a} +function lfb(a){if(a.o!=null){return}Bfb(a)} +function lFb(a){if(!a){throw Adb(new _fb)}} +function pFb(a){if(!a){throw Adb(new yeb)}} +function sFb(a){if(!a){throw Adb(new Dvb)}} +function yFb(a){if(!a){throw Adb(new cgb)}} +function zmb(a){if(!a){throw Adb(new Jrb)}} +function jQd(){jQd=geb;iQd=new LQd;new lRd} +function u2c(){u2c=geb;t2c=new jGd('root')} +function d6d(){HWd.call(this);this.Bb|=txe} +function Pg(a,b){this.d=a;Lg(this);this.b=b} +function WCb(a,b){NCb.call(this,a);this.a=b} +function oDb(a,b){NCb.call(this,a);this.a=b} +function bh(a,b,c){lg.call(this,a,b,c,null)} +function fh(a,b,c){lg.call(this,a,b,c,null)} +function Mf(a,b){this.c=a;ne.call(this,a,b)} +function Uf(a,b){this.a=a;Mf.call(this,a,b)} +function wB(a){this.q=new $wnd.Date(Xdb(a))} +function OPb(a){if(a>8){return 0}return a+1} +function iBb(a,b){if(dBb){return}Rmb(a.a,b)} +function P5b(a,b){H5b();return n2b(b.d.i,a)} +function qdc(a,b){Zcc();return new xdc(b,a)} +function HAb(a,b,c){return a.Ne(b,c)<=0?c:b} +function IAb(a,b,c){return a.Ne(b,c)<=0?b:c} +function rgd(a,b){return RD(cub(a.b,b),143)} +function tgd(a,b){return RD(cub(a.c,b),233)} +function amc(a){return RD(Vmb(a.a,a.b),293)} +function Mid(a){return new rjd(a.c,a.d+a.a)} +function Jeb(a){return (uFb(a),a)?1231:1237} +function EPc(a){return dOc(),xDc(RD(a,203))} +function RMb(){RMb=geb;QMb=xsb((Qpd(),Ppd))} +function YQb(a,b){b.a?ZQb(a,b):wAb(a.a,b.b)} +function aJd(a,b,c){++a.j;a.tj();$Gd(a,b,c)} +function $Id(a,b,c){++a.j;a.qj(b,a.Zi(b,c))} +function B2d(a,b,c){var d;d=a.fd(b);d.Rb(c)} +function Bzd(a,b,c){c=xvd(a,b,6,c);return c} +function izd(a,b,c){c=xvd(a,b,3,c);return c} +function KCd(a,b,c){c=xvd(a,b,9,c);return c} +function SKb(a,b){Ivb(b,Pye);a.f=b;return a} +function bOd(a,b){return (b&lve)%a.d.length} +function Bke(a,b,c){return age(a.c,a.b,b,c)} +function ZLd(a,b){this.c=a;ZHd.call(this,b)} +function w0d(a,b){this.a=a;Q_d.call(this,b)} +function F4d(a,b){this.a=a;Q_d.call(this,b)} +function kGd(a,b){jGd.call(this,a);this.a=b} +function U6d(a,b){L6d.call(this,a);this.a=b} +function S9d(a,b){L6d.call(this,a);this.a=b} +function jQb(a){gQb.call(this,0,0);this.f=a} +function _hb(a,b,c){a.a+=Ihb(b,0,c);return a} +function _A(a){!a.a&&(a.a=new jB);return a.a} +function qlb(a,b){var c;c=a.e;a.e=b;return c} +function Clb(a,b){var c;c=b;return !!a.Fe(c)} +function Keb(a,b){Geb();return a==b?0:a?1:-1} +function Ikb(a,b){a.a.bd(a.b,b);++a.b;a.c=-1} +function hg(a){a.b?hg(a.b):a.f.c.zc(a.e,a.d)} +function aub(a){akb(a.e);a.d.b=a.d;a.d.a=a.d} +function VDb(a,b,c){xDb();HEb(a,b.Ve(a.a,c))} +function Xrb(a,b,c){return Wrb(a,RD(b,22),c)} +function WEb(a,b){return cFb(new Array(b),a)} +function Fgb(a){return Ydb(Udb(a,32))^Ydb(a)} +function XD(a){return String.fromCharCode(a)} +function Dz(a){return a==null?null:a.message} +function Rz(a,b,c){return a.apply(b,c);var d} +function Btb(a,b){var c;c=a[Jxe];c.call(a,b)} +function Ctb(a,b){var c;c=a[Jxe];c.call(a,b)} +function O5b(a,b){H5b();return !n2b(b.d.i,a)} +function R2b(a,b,c,d){J2b.call(this,a,b,c,d)} +function TJb(){RJb.call(this);this.a=new pjd} +function v2b(){this.n=new pjd;this.o=new pjd} +function kGb(){this.b=new pjd;this.c=new bnb} +function cUb(){this.a=new bnb;this.b=new bnb} +function kWb(){this.a=new DTb;this.b=new vWb} +function e6b(){this.b=new gub;this.a=new gub} +function jIc(){this.b=new _sb;this.a=new _sb} +function vYc(){this.b=new Tsb;this.a=new Tsb} +function fWc(){this.b=new TVc;this.a=new IVc} +function Yhc(){this.a=new yqc;this.b=new Sqc} +function lNc(){this.a=new bnb;this.d=new bnb} +function RJb(){this.n=new z3b;this.i=new Tid} +function hq(a){this.a=(dk(a,iwe),new cnb(a))} +function oq(a){this.a=(dk(a,iwe),new cnb(a))} +function tLd(a){return a<100?null:new gLd(a)} +function Lac(a,b){return a.n.a=(uFb(b),b)+10} +function Mac(a,b){return a.n.a=(uFb(b),b)+10} +function DYd(a,b){return b==a||PHd(sYd(b),a)} +function nae(a,b){return Zjb(a.a,b,'')==null} +function Hee(a,b){var c;c=b.qi(a.a);return c} +function $id(a,b){a.a+=b.a;a.b+=b.b;return a} +function ojd(a,b){a.a-=b.a;a.b-=b.b;return a} +function sfd(a){aFb(a.j.c,0);a.a=-1;return a} +function rCd(a,b,c){c=xvd(a,b,11,c);return c} +function SDd(a,b,c){c!=null&&Kzd(b,uEd(a,c))} +function TDd(a,b,c){c!=null&&Lzd(b,uEd(a,c))} +function G5d(a,b,c,d){C5d.call(this,a,b,c,d)} +function oie(a,b,c,d){C5d.call(this,a,b,c,d)} +function sie(a,b,c,d){oie.call(this,a,b,c,d)} +function Nie(a,b,c,d){Iie.call(this,a,b,c,d)} +function Pie(a,b,c,d){Iie.call(this,a,b,c,d)} +function Vie(a,b,c,d){Iie.call(this,a,b,c,d)} +function Tie(a,b,c,d){Pie.call(this,a,b,c,d)} +function $ie(a,b,c,d){Pie.call(this,a,b,c,d)} +function Yie(a,b,c,d){Vie.call(this,a,b,c,d)} +function bje(a,b,c,d){$ie.call(this,a,b,c,d)} +function Dje(a,b,c,d){wje.call(this,a,b,c,d)} +function aMd(a,b){veb.call(this,HJe+a+NIe+b)} +function Hje(a,b){return a.jk().wi().ri(a,b)} +function Ije(a,b){return a.jk().wi().ti(a,b)} +function Lfb(a,b){return uFb(a),dE(a)===dE(b)} +function lhb(a,b){return uFb(a),dE(a)===dE(b)} +function mEb(a,b){return a.b.Bd(new pEb(a,b))} +function sEb(a,b){return a.b.Bd(new vEb(a,b))} +function yEb(a,b){return a.b.Bd(new BEb(a,b))} +function Bk(a,b){return a.e=RD(a.d.Kb(b),159)} +function uhb(a,b,c){return a.lastIndexOf(b,c)} +function wWb(a,b,c){return Qfb(a[b.a],a[c.a])} +function TWb(a,b){return pQb(b,(yCc(),gAc),a)} +function Lpc(a,b){return hgb(b.a.d.p,a.a.d.p)} +function Kpc(a,b){return hgb(a.a.d.p,b.a.d.p)} +function zTc(a,b){return Qfb(a.c-a.s,b.c-b.s)} +function qWc(a,b){return Qfb(a.b.e.a,b.b.e.a)} +function sWc(a,b){return Qfb(a.c.e.a,b.c.e.a)} +function $2b(a){return !a.c?-1:Wmb(a.c.a,a,0)} +function Cod(a){return a==vod||a==xod||a==wod} +function CMd(a,b){this.c=a;nMd.call(this,a,b)} +function fq(a,b,c){this.a=a;qc.call(this,b,c)} +function YDb(a){this.c=a;xxb.call(this,Sve,0)} +function rk(a,b,c){this.c=b;this.b=c;this.a=a} +function DMc(a){dMc();this.d=a;this.a=new wmb} +function ho(a){_l();this.a=(yob(),new Lqb(a))} +function Xmc(a,b){Dmd(a.f)?Ymc(a,b):Zmc(a,b)} +function Lxb(a,b){Mxb.call(this,a,a.length,b)} +function nBb(a,b){if(dBb){return}!!b&&(a.d=b)} +function ZNd(a,b){return ZD(b,15)&&_Gd(a.c,b)} +function AVd(a,b,c){return RD(a.c,71).Wk(b,c)} +function BVd(a,b,c){return RD(a.c,71).Xk(b,c)} +function mge(a,b,c){return lge(a,RD(b,343),c)} +function oge(a,b,c){return nge(a,RD(b,343),c)} +function Ige(a,b,c){return Hge(a,RD(b,343),c)} +function Kge(a,b,c){return Jge(a,RD(b,343),c)} +function Fn(a,b){return b==null?null:Xv(a.b,b)} +function Qeb(a){return _D(a)?(uFb(a),a):a.ue()} +function Rfb(a){return !isNaN(a)&&!isFinite(a)} +function Zub(a){Lub(this);Xub(this);ye(this,a)} +function dnb(a){Pmb(this);YEb(this.c,0,a.Pc())} +function Fsb(a,b,c){this.a=a;this.b=b;this.c=c} +function Vtb(a,b,c){this.a=a;this.b=b;this.c=c} +function hvb(a,b,c){this.d=a;this.b=c;this.a=b} +function aBb(a){this.a=a;gib();Hdb(Date.now())} +function wzb(a){Ckb(a.a);Yyb(a.c,a.b);a.b=null} +function wvb(){wvb=geb;uvb=new xvb;vvb=new zvb} +function KMd(){KMd=geb;JMd=$C(jJ,rve,1,0,5,1)} +function TTd(){TTd=geb;STd=$C(jJ,rve,1,0,5,1)} +function yUd(){yUd=geb;xUd=$C(jJ,rve,1,0,5,1)} +function _l(){_l=geb;new im((yob(),yob(),vob))} +function gAb(a){cAb();return ws((qAb(),pAb),a)} +function zBb(a){xBb();return ws((CBb(),BBb),a)} +function FHb(a){DHb();return ws((IHb(),HHb),a)} +function NHb(a){LHb();return ws((QHb(),PHb),a)} +function kIb(a){iIb();return ws((nIb(),mIb),a)} +function _Jb(a){ZJb();return ws((cKb(),bKb),a)} +function GKb(a){EKb();return ws((JKb(),IKb),a)} +function xLb(a){vLb();return ws((ALb(),zLb),a)} +function mMb(a){hMb();return ws((pMb(),oMb),a)} +function oOb(a){mOb();return ws((rOb(),qOb),a)} +function KPb(a){IPb();return ws((NPb(),MPb),a)} +function KRb(a){IRb();return ws((NRb(),MRb),a)} +function XRb(a){VRb();return ws(($Rb(),ZRb),a)} +function VUb(a){TUb();return ws((YUb(),XUb),a)} +function CWb(a){AWb();return ws((FWb(),EWb),a)} +function uXb(a){sXb();return ws((xXb(),wXb),a)} +function tZb(a){nZb();return ws((wZb(),vZb),a)} +function W$b(a){U$b();return ws((Z$b(),Y$b),a)} +function Mb(a,b){if(!a){throw Adb(new agb(b))}} +function Vb(a){if(!a){throw Adb(new dgb(tve))}} +function rFb(a,b){if(a!=b){throw Adb(new Jrb)}} +function KQb(a,b,c){this.a=a;this.b=b;this.c=c} +function lRb(a,b,c){this.a=a;this.b=b;this.c=c} +function h7b(a,b,c){this.a=a;this.b=b;this.c=c} +function J0b(a,b,c){this.b=a;this.a=b;this.c=c} +function dNb(a,b,c){this.b=a;this.c=b;this.a=c} +function oac(a,b,c){this.a=a;this.b=b;this.c=c} +function F1b(a,b,c){this.e=b;this.b=a;this.d=c} +function Ecc(a,b,c){this.b=a;this.a=b;this.c=c} +function UDb(a,b,c){xDb();a.a.Yd(b,c);return b} +function CJb(a){var b;b=new BJb;b.e=a;return b} +function _Nb(a){var b;b=new YNb;b.b=a;return b} +function U9b(){U9b=geb;S9b=new bac;T9b=new eac} +function Rec(){Rec=geb;Qec=new efc;Pec=new jfc} +function lkc(){lkc=geb;jkc=new Mkc;kkc=new Okc} +function loc(a){joc();return ws((ooc(),noc),a)} +function kcc(a){hcc();return ws((ncc(),mcc),a)} +function yec(a){vec();return ws((Bec(),Aec),a)} +function gnc(a){enc();return ws((jnc(),inc),a)} +function Enc(a){Bnc();return ws((Hnc(),Gnc),a)} +function gpc(a){epc();return ws((jpc(),ipc),a)} +function dtc(a){btc();return ws((gtc(),ftc),a)} +function ltc(a){jtc();return ws((otc(),ntc),a)} +function xtc(a){stc();return ws((Atc(),ztc),a)} +function Gtc(a){Etc();return ws((Jtc(),Itc),a)} +function Utc(a){Ptc();return ws((Xtc(),Wtc),a)} +function auc(a){$tc();return ws((duc(),cuc),a)} +function avc(a){$uc();return ws((dvc(),cvc),a)} +function qvc(a){ovc();return ws((tvc(),svc),a)} +function zvc(a){xvc();return ws((Cvc(),Bvc),a)} +function Ivc(a){Gvc();return ws((Lvc(),Kvc),a)} +function Qvc(a){Ovc();return ws((Tvc(),Svc),a)} +function Quc(a){Ouc();return ws((Tuc(),Suc),a)} +function juc(a){huc();return ws((muc(),luc),a)} +function wuc(a){tuc();return ws((zuc(),yuc),a)} +function Euc(a){Cuc();return ws((Huc(),Guc),a)} +function exc(a){cxc();return ws((hxc(),gxc),a)} +function eDc(a){_Cc();return ws((hDc(),gDc),a)} +function oDc(a){lDc();return ws((rDc(),qDc),a)} +function ADc(a){wDc();return ws((DDc(),CDc),a)} +function ODc(a){JDc();return ws((RDc(),QDc),a)} +function cEc(a){aEc();return ws((fEc(),eEc),a)} +function mEc(a){kEc();return ws((pEc(),oEc),a)} +function uEc(a){sEc();return ws((xEc(),wEc),a)} +function DEc(a){BEc();return ws((GEc(),FEc),a)} +function MEc(a){KEc();return ws((PEc(),OEc),a)} +function VEc(a){TEc();return ws((YEc(),XEc),a)} +function nFc(a){lFc();return ws((qFc(),pFc),a)} +function wFc(a){uFc();return ws((zFc(),yFc),a)} +function FFc(a){DFc();return ws((IFc(),HFc),a)} +function TKc(a){RKc();return ws((WKc(),VKc),a)} +function uNc(a){sNc();return ws((xNc(),wNc),a)} +function yQc(a){wQc();return ws((BQc(),AQc),a)} +function GQc(a){EQc();return ws((JQc(),IQc),a)} +function hTc(a){fTc();return ws((kTc(),jTc),a)} +function fVc(a){dVc();return ws((iVc(),hVc),a)} +function bWc(a){YVc();return ws((eWc(),dWc),a)} +function ZYc(a){WYc();return ws((aZc(),_Yc),a)} +function NZc(a){LZc();return ws((QZc(),PZc),a)} +function u_c(a){s_c();return ws((x_c(),w_c),a)} +function C_c(a){A_c();return ws((F_c(),E_c),a)} +function C2c(a){x2c();return ws((F2c(),E2c),a)} +function j3c(a){g3c();return ws((m3c(),l3c),a)} +function j4c(a){g4c();return ws((m4c(),l4c),a)} +function _3c(a){Y3c();return ws((c4c(),b4c),a)} +function m5c(a){j5c();return ws((p5c(),o5c),a)} +function w5c(a){t5c();return ws((z5c(),y5c),a)} +function h6c(a){f6c();return ws((k6c(),j6c),a)} +function C6c(a){z6c();return ws((F6c(),E6c),a)} +function b7c(a){_6c();return ws((e7c(),d7c),a)} +function E8c(a){z8c();return ws((H8c(),G8c),a)} +function R8b(a){P8b();return ws((U8b(),T8b),a)} +function t3b(a){r3b();return ws((w3b(),v3b),a)} +function g9c(a){b9c();return ws((j9c(),i9c),a)} +function G9c(a){B9c();return ws((J9c(),I9c),a)} +function uad(a){sad();return ws((xad(),wad),a)} +function xbd(a){sbd();return ws((Abd(),zbd),a)} +function ibd(a){gbd();return ws((lbd(),kbd),a)} +function Gbd(a){Cbd();return ws((Jbd(),Ibd),a)} +function Obd(a){Mbd();return ws((Rbd(),Qbd),a)} +function Zbd(a){Xbd();return ws((acd(),_bd),a)} +function fdd(a){_cd();return ws((idd(),hdd),a)} +function qdd(a){ldd();return ws((tdd(),sdd),a)} +function $hd(a){Yhd();return ws((bid(),aid),a)} +function mid(a){kid();return ws((pid(),oid),a)} +function Tjd(a){Rjd();return ws((Wjd(),Vjd),a)} +function wkd(a){ukd();return ws((zkd(),ykd),a)} +function Hmd(a){Cmd();return ws((Kmd(),Jmd),a)} +function Qmd(a){Omd();return ws((Tmd(),Smd),a)} +function $md(a){Ymd();return ws((bnd(),and),a)} +function knd(a){ind();return ws((nnd(),mnd),a)} +function Hnd(a){Fnd();return ws((Knd(),Jnd),a)} +function Snd(a){Pnd();return ws((Vnd(),Und),a)} +function god(a){dod();return ws((jod(),iod),a)} +function rod(a){pod();return ws((uod(),tod),a)} +function Fod(a){Bod();return ws((Iod(),Hod),a)} +function Tod(a){Pod();return ws((Wod(),Vod),a)} +function wpd(a){qpd();return ws((zpd(),ypd),a)} +function Spd(a){Qpd();return ws((Vpd(),Upd),a)} +function fqd(a){dqd();return ws((iqd(),hqd),a)} +function oqd(a){mqd();return ws((rqd(),qqd),a)} +function zsc(a,b){return (uFb(a),a)+(uFb(b),b)} +function wqd(a){uqd();return ws((Eqd(),Dqd),a)} +function Ird(a){Grd();return ws((Lrd(),Krd),a)} +function vtd(a){ttd();return ws((ytd(),xtd),a)} +function dMc(){dMc=geb;bMc=(qpd(),ppd);cMc=Xod} +function uqd(){uqd=geb;sqd=new zqd;tqd=new Bqd} +function wJc(a){!a.e&&(a.e=new bnb);return a.e} +function BTc(a,b){this.c=a;this.a=b;this.b=b-a} +function g8c(a,b,c){this.a=a;this.b=b;this.c=c} +function gud(a,b,c){this.a=a;this.b=b;this.c=c} +function Wdd(a,b,c){this.a=a;this.b=b;this.c=c} +function ced(a,b,c){this.a=a;this.b=b;this.c=c} +function pFd(a,b,c){this.a=a;this.b=b;this.c=c} +function ZPd(a,b,c){this.a=a;this.b=b;this.c=c} +function g7d(a,b,c){this.e=a;this.a=b;this.c=c} +function K7d(a,b,c){s7d();C7d.call(this,a,b,c)} +function f9d(a,b,c){s7d();O8d.call(this,a,b,c)} +function r9d(a,b,c){s7d();O8d.call(this,a,b,c)} +function x9d(a,b,c){s7d();O8d.call(this,a,b,c)} +function h9d(a,b,c){s7d();f9d.call(this,a,b,c)} +function j9d(a,b,c){s7d();f9d.call(this,a,b,c)} +function l9d(a,b,c){s7d();j9d.call(this,a,b,c)} +function t9d(a,b,c){s7d();r9d.call(this,a,b,c)} +function z9d(a,b,c){s7d();x9d.call(this,a,b,c)} +function S2b(a){J2b.call(this,a.d,a.c,a.a,a.b)} +function B3b(a){J2b.call(this,a.d,a.c,a.a,a.b)} +function Og(a){this.d=a;Lg(this);this.b=ed(a.d)} +function cGd(a){aGd();return ws((fGd(),eGd),a)} +function gk(a,b){Qb(a);Qb(b);return new hk(a,b)} +function dr(a,b){Qb(a);Qb(b);return new mr(a,b)} +function hr(a,b){Qb(a);Qb(b);return new sr(a,b)} +function Dr(a,b){Qb(a);Qb(b);return new Rr(a,b)} +function Uub(a){sFb(a.b!=0);return Wub(a,a.a.a)} +function Vub(a){sFb(a.b!=0);return Wub(a,a.c.b)} +function q$d(a){!a.c&&(a.c=new X9d);return a.c} +function cv(a){var b;b=new bnb;xr(b,a);return b} +function Vx(a){var b;b=new _sb;xr(b,a);return b} +function Yx(a){var b;b=new xAb;_q(b,a);return b} +function gv(a){var b;b=new Yub;_q(b,a);return b} +function RD(a,b){CFb(a==null||QD(a,b));return a} +function Mxb(a,b,c){Axb.call(this,b,c);this.a=a} +function kB(a,b){this.c=a;this.b=b;this.a=false} +function hCb(){this.a=';,;';this.b='';this.c=''} +function $Cb(a,b,c){this.b=a;pxb.call(this,b,c)} +function uub(a,b,c){this.c=a;xlb.call(this,b,c)} +function fZb(a,b,c){eZb.call(this,a,b);this.b=c} +function YEb(a,b,c){VEb(c,0,a,b,c.length,false)} +function JYb(a,b,c,d,e){a.b=b;a.c=c;a.d=d;a.a=e} +function D2b(a,b,c,d,e){a.d=b;a.c=c;a.a=d;a.b=e} +function XDb(a,b){if(b){a.b=b;a.a=(LCb(b),b.a)}} +function mFb(a,b){if(!a){throw Adb(new agb(b))}} +function zFb(a,b){if(!a){throw Adb(new dgb(b))}} +function qFb(a,b){if(!a){throw Adb(new zeb(b))}} +function zqc(a,b){mqc();return hgb(a.d.p,b.d.p)} +function T0c(a,b){B0c();return Qfb(a.e.b,b.e.b)} +function U0c(a,b){B0c();return Qfb(a.e.a,b.e.a)} +function Xoc(a,b){return hgb(N3b(a.d),N3b(b.d))} +function Izb(a,b){return !!b&&Jzb(a,b.d)?b:null} +function $lc(a,b){return b==(qpd(),ppd)?a.c:a.d} +function Qdb(a){return Edb(yD(Kdb(a)?Wdb(a):a))} +function Nid(a){return new rjd(a.c+a.b,a.d+a.a)} +function GSd(a){return a!=null&&!mSd(a,aSd,bSd)} +function DSd(a,b){return (JSd(a)<<4|JSd(b))&Bwe} +function Rid(a,b,c,d,e){a.c=b;a.d=c;a.b=d;a.a=e} +function y8b(a){var b,c;b=a.b;c=a.c;a.b=c;a.c=b} +function B8b(a){var b,c;c=a.d;b=a.a;a.d=b;a.a=c} +function u6d(a,b){var c;c=a.c;t6d(a,b);return c} +function Nqd(a,b){b<0?(a.g=-1):(a.g=b);return a} +function kjd(a,b){gjd(a);a.a*=b;a.b*=b;return a} +function hrc(a,b,c){grc.call(this,b,c);this.d=a} +function PZd(a,b,c){kZd.call(this,a,b);this.c=c} +function Kfe(a,b,c){kZd.call(this,a,b);this.c=c} +function zUd(a){yUd();kUd.call(this);this.ci(a)} +function Yee(){ree();Zee.call(this,(YSd(),XSd))} +function Yse(a){Vse();++Use;return new Hte(0,a)} +function uke(){uke=geb;tke=(yob(),new mpb(eLe))} +function ux(){ux=geb;new wx((kl(),jl),(Wk(),Vk))} +function ugb(){ugb=geb;tgb=$C(bJ,Nve,17,256,0,1)} +function zUb(){this.b=Kfb(UD(iGd((yVb(),sVb))))} +function Pq(a){this.b=a;this.a=gn(this.b.a).Od()} +function mr(a,b){this.b=a;this.a=b;zl.call(this)} +function sr(a,b){this.a=a;this.b=b;zl.call(this)} +function s_d(a,b,c){this.a=a;N$d.call(this,b,c)} +function n_d(a,b,c){this.a=a;N$d.call(this,b,c)} +function sDd(a,b,c){var d;d=new OC(c);sC(a,b,d)} +function _Eb(a,b,c){var d;d=a[b];a[b]=c;return d} +function UEb(a){var b;b=a.slice();return dD(b,a)} +function SJb(a){var b;b=a.n;return a.a.b+b.d+b.a} +function PKb(a){var b;b=a.n;return a.e.b+b.d+b.a} +function QKb(a){var b;b=a.n;return a.e.a+b.b+b.c} +function rub(a){a.a.b=a.b;a.b.a=a.a;a.a=a.b=null} +function Mub(a,b){Pub(a,b,a.c.b,a.c);return true} +function w2b(a){if(a.a){return a.a}return R0b(a)} +function NSb(a){HSb();return JGd(a)==vCd(LGd(a))} +function OSb(a){HSb();return LGd(a)==vCd(JGd(a))} +function l_b(a,b){return k_b(a,new eZb(b.a,b.b))} +function xn(a,b){return fn(),ck(a,b),new zy(a,b)} +function fmc(a,b){return a.c<b.c?-1:a.c==b.c?0:1} +function snc(a){return a.b.c.length-a.e.c.length} +function N3b(a){return a.e.c.length-a.g.c.length} +function L3b(a){return a.e.c.length+a.g.c.length} +function Lgb(a){return a==0||isNaN(a)?a:a<0?-1:1} +function V0b(a){return !W0b(a)&&a.c.i.c==a.d.i.c} +function DOc(a){dOc();return (qpd(),apd).Hc(a.j)} +function M0c(a,b,c){B0c();return c.e.a+c.f.a+a*b} +function W0c(a,b,c){B0c();return c.e.b+c.f.b+a*b} +function SUc(a,b,c){return Zjb(a.b,RD(c.b,18),b)} +function TUc(a,b,c){return Zjb(a.b,RD(c.b,18),b)} +function oFd(a,b,c){iEd(a.a,a.b,a.c,RD(b,166),c)} +function lad(a,b,c,d){mad.call(this,a,b,c,d,0,0)} +function LUd(a){yUd();zUd.call(this,a);this.a=-1} +function Gxb(a,b){Axb.call(this,b,1040);this.a=a} +function zqd(){vqd.call(this,'COUNT_CHILDREN',0)} +function ole(a,b){Eke.call(this,a,b);this.a=this} +function ufb(a,b){var c;c=rfb(a,b);c.i=2;return c} +function cJd(a,b){var c;++a.j;c=a.Cj(b);return c} +function pfd(a,b,c){a.a=-1;tfd(a,b.g,c);return a} +function Bsd(a,b){return Rmb(a,new rjd(b.a,b.b))} +function __c(a){return R_c(),$C(Z$,NEe,39,a,0,1)} +function dj(a){return a.e.Rd().gc()*a.c.Rd().gc()} +function fk(a,b,c){return new rk(hDb(a)._e(),c,b)} +function mVd(a,b){nVd(a,b==null?null:(uFb(b),b))} +function q6d(a,b){s6d(a,b==null?null:(uFb(b),b))} +function r6d(a,b){s6d(a,b==null?null:(uFb(b),b))} +function CFb(a){if(!a){throw Adb(new Ifb(null))}} +function tt(a){if(a.c.e!=a.a){throw Adb(new Jrb)}} +function Au(a){if(a.e.c!=a.b){throw Adb(new Jrb)}} +function Ar(a){Qb(a);while(a.Ob()){a.Pb();a.Qb()}} +function Dy(a){tm();this.a=(yob(),new mpb(Qb(a)))} +function mf(a){this.c=a;this.b=this.c.d.vc().Kc()} +function hx(a){a.a.ld();RD(a.a.md(),16).gc();Hh()} +function $hb(a,b){a.a+=Ihb(b,0,b.length);return a} +function Vmb(a,b){tFb(b,a.c.length);return a.c[b]} +function kob(a,b){tFb(b,a.a.length);return a.a[b]} +function Arb(a,b){return uFb(b),Leb(b,(uFb(a),a))} +function vrb(a,b){return uFb(a),Leb(a,(uFb(b),b))} +function YC(a,b,c,d,e,f){return ZC(a,b,c,d,e,0,f)} +function GBb(a,b){return bD(b,0,tCb(b[0],Hgb(1)))} +function IBb(a,b){return Hgb(Bdb(Hgb(a.a).a,b.a))} +function tCb(a,b){return IBb(RD(a,168),RD(b,168))} +function Jgb(){Jgb=geb;Igb=$C(eJ,Nve,168,256,0,1)} +function dhb(){dhb=geb;chb=$C(lJ,Nve,191,256,0,1)} +function Zeb(){Zeb=geb;Yeb=$C(RI,Nve,222,256,0,1)} +function jfb(){jfb=geb;ifb=$C(SI,Nve,180,128,0,1)} +function KYb(){JYb(this,false,false,false,false)} +function Kub(a){ctb.call(this,new gub);ye(this,a)} +function btb(a){this.a=new Usb(a.gc());ye(this,a)} +function nsb(a){this.c=a;this.a=new Osb(this.c.a)} +function Kmc(a){this.a=a;this.c=new Tsb;Emc(this)} +function DRb(){this.d=new rjd(0,0);this.e=new _sb} +function SDb(a,b){xDb();NCb.call(this,a);this.a=b} +function J2b(a,b,c,d){A2b(this);D2b(this,a,b,c,d)} +function Uqc(a,b,c){return hgb(b.d[a.g],c.d[a.g])} +function wMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function xMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function yMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function zMc(a,b,c){return hgb(a.d[b.p],a.d[c.p])} +function Aad(a,b,c){return $wnd.Math.min(c/a,1/b)} +function SIc(a,b){return a?0:$wnd.Math.max(0,b-1)} +function qSd(a,b){return a==null?b==null:lhb(a,b)} +function rSd(a,b){return a==null?b==null:mhb(a,b)} +function lQb(a){return !a.q?(yob(),yob(),wob):a.q} +function _lc(a){return a.c-RD(Vmb(a.a,a.b),293).b} +function trd(a){if(a.c){return a.c.f}return a.e.b} +function urd(a){if(a.c){return a.c.g}return a.e.a} +function wsc(a,b){a.a==null&&usc(a);return a.a[b]} +function L2c(a){var b;b=R2c(a);return !b?a:L2c(b)} +function $se(a,b){Vse();++Use;return new Qte(a,b)} +function Hte(a,b){Vse();Wse.call(this,a);this.a=b} +function N8d(a,b){s7d();t7d.call(this,b);this.a=a} +function iae(a,b,c){this.a=a;XZd.call(this,b,c,2)} +function ntd(a){this.b=new Yub;this.a=a;this.c=-1} +function ds(a){qc.call(this,0,0);this.a=a;this.b=0} +function PSd(a){ZHd.call(this,a.gc());YGd(this,a)} +function jg(a){a.b?jg(a.b):a.d.dc()&&a.f.c.Bc(a.e)} +function aD(a){return Array.isArray(a)&&a.Tm===keb} +function Bsb(a,b){return ZD(b,22)&&Csb(a,RD(b,22))} +function Dsb(a,b){return ZD(b,22)&&Esb(a,RD(b,22))} +function qtb(a,b){return otb(a,b,ptb(a,a.b.Ce(b)))} +function Jtb(a,b){return !(a.a.get(b)===undefined)} +function Iwb(a){return Kwb(a,26)*Kxe+Kwb(a,27)*Lxe} +function OBb(a,b){return FBb(new jCb,new VBb(a),b)} +function Ynb(a,b,c){nFb(0,b,a.length);Wnb(a,0,b,c)} +function Qmb(a,b,c){wFb(b,a.c.length);XEb(a.c,b,c)} +function dKb(a,b,c){var d;if(a){d=a.i;d.c=b;d.b=c}} +function eKb(a,b,c){var d;if(a){d=a.i;d.d=b;d.a=c}} +function Pnb(a,b,c){var d;for(d=0;d<b;++d){a[d]=c}} +function Qnb(a,b){var c;for(c=0;c<b;++c){a[c]=-1}} +function ysb(a,b){var c;c=xsb(a);zob(c,b);return c} +function cA(a,b){!a&&(a=[]);a[a.length]=b;return a} +function RQb(a,b){$id(a.c,b);a.b.c+=b.a;a.b.d+=b.b} +function QQb(a,b){RQb(a,ojd(new rjd(b.a,b.b),a.c))} +function sOb(a,b){this.b=new Yub;this.a=a;this.c=b} +function QYb(){this.b=new aZb;this.c=new UYb(this)} +function fHb(){this.d=new tHb;this.e=new lHb(this)} +function UFc(){RFc();this.f=new Yub;this.e=new Yub} +function yOc(){dOc();this.k=new Tsb;this.d=new _sb} +function nud(){nud=geb;mud=new mGd((umd(),Gld),0)} +function cs(){cs=geb;bs=new ds($C(jJ,rve,1,0,5,1))} +function _ad(a,b,c){return Ysb(a,new TFb(b.a,c.a))} +function DGc(a,b,c){return -hgb(a.f[b.p],a.f[c.p])} +function Mic(a,b,c){Hic(c,a,1);Rmb(b,new xjc(c,a))} +function Nic(a,b,c){Iic(c,a,1);Rmb(b,new Jjc(c,a))} +function h$d(a,b,c){this.a=a;_Zd.call(this,b,c,22)} +function s5d(a,b,c){this.a=a;_Zd.call(this,b,c,14)} +function E8d(a,b,c,d){s7d();N7d.call(this,a,b,c,d)} +function L8d(a,b,c,d){s7d();N7d.call(this,a,b,c,d)} +function nfd(a,b,c){a.a=-1;tfd(a,b.g+1,c);return a} +function bCd(a,b,c){c=xvd(a,RD(b,54),7,c);return c} +function hVd(a,b,c){c=xvd(a,RD(b,54),3,c);return c} +function Ydb(a){if(Kdb(a)){return a|0}return FD(a)} +function cte(a){Vse();++Use;return new eue(10,a,0)} +function fe(a){var b;b=a.f;return !b?(a.f=a.Dc()):b} +function Ec(a){var b;b=a.i;return !b?(a.i=a.bc()):b} +function Ahe(a){if(a.e.j!=a.d){throw Adb(new Jrb)}} +function gn(a){if(a.c){return a.c}return a.c=a.Sd()} +function hn(a){if(a.d){return a.d}return a.d=a.Td()} +function Uee(a,b){return ufe(Pee(a,b))?b.zi():null} +function ed(a){return ZD(a,15)?RD(a,15).ed():a.Kc()} +function De(a){return a.Qc($C(jJ,rve,1,a.gc(),5,1))} +function aE(a){return a!=null&&cE(a)&&!(a.Tm===keb)} +function YD(a){return !Array.isArray(a)&&a.Tm===keb} +function vx(a,b){return Qb(b),a.a.Jd(b)&&!a.b.Jd(b)} +function tD(a,b){return hD(a.l&b.l,a.m&b.m,a.h&b.h)} +function zD(a,b){return hD(a.l|b.l,a.m|b.m,a.h|b.h)} +function HD(a,b){return hD(a.l^b.l,a.m^b.m,a.h^b.h)} +function Sdb(a,b){return Edb(AD(Kdb(a)?Wdb(a):a,b))} +function Tdb(a,b){return Edb(BD(Kdb(a)?Wdb(a):a,b))} +function Udb(a,b){return Edb(CD(Kdb(a)?Wdb(a):a,b))} +function Ieb(a,b){return Keb((uFb(a),a),(uFb(b),b))} +function Jfb(a,b){return Qfb((uFb(a),a),(uFb(b),b))} +function pwb(a){this.b=new cnb(11);this.a=(urb(),a)} +function is(a){this.a=(cs(),bs);this.d=RD(Qb(a),51)} +function Axb(a,b){this.c=0;this.d=a;this.b=b|64|Ove} +function kxb(a,b){this.e=a;this.d=(b&64)!=0?b|Ove:b} +function ezb(a){this.b=null;this.a=(urb(),!a?rrb:a)} +function nz(a){ez(this);this.g=a;gz(this);this.je()} +function vue(a){uue();this.a=0;this.b=a-1;this.c=1} +function yg(a,b,c,d){this.a=a;lg.call(this,a,b,c,d)} +function gEb(a,b,c){if(a.a.Mb(c)){a.b=true;b.Cd(c)}} +function Qwb(a){if(!a.d){a.d=a.b.Kc();a.c=a.b.gc()}} +function lyb(a,b){if(a<0||a>=b){throw Adb(new web)}} +function JDb(a,b){return MDb(a,(uFb(b),new JAb(b)))} +function KDb(a,b){return MDb(a,(uFb(b),new LAb(b)))} +function prc(a,b,c){return qrc(a,RD(b,12),RD(c,12))} +function q4b(a){return J3b(),RD(a,12).g.c.length!=0} +function v4b(a){return J3b(),RD(a,12).e.c.length!=0} +function sdc(a,b){Zcc();return Qfb(b.a.o.a,a.a.o.a)} +function d_d(a,b){(b.Bb&QHe)!=0&&!a.a.o&&(a.a.o=b)} +function T3c(a,b){b.Ug("General 'Rotator",1);S3c(a)} +function MCc(a,b,c){b.qf(c,Kfb(UD(Wjb(a.b,c)))*a.a)} +function yid(a,b,c){tid();return xid(a,b)&&xid(a,c)} +function Rod(a){Pod();return !a.Hc(Lod)&&!a.Hc(Nod)} +function Nrc(a){if(a.e){return Src(a.e)}return null} +function Zdb(a){if(Kdb(a)){return ''+a}return GD(a)} +function XNc(a){var b;b=a;while(b.f){b=b.f}return b} +function HBb(a,b,c){bD(b,0,tCb(b[0],c[0]));return b} +function Gpc(a,b,c,d){var e;e=a.i;e.i=b;e.a=c;e.b=d} +function C5d(a,b,c,d){XZd.call(this,a,b,c);this.b=d} +function N3d(a,b,c,d,e){O3d.call(this,a,b,c,d,e,-1)} +function b4d(a,b,c,d,e){c4d.call(this,a,b,c,d,e,-1)} +function Iie(a,b,c,d){PZd.call(this,a,b,c);this.b=d} +function Xde(a){uId.call(this,a,false);this.a=false} +function Bqd(){vqd.call(this,'LOOKAHEAD_LAYOUT',1)} +function nNd(a){this.b=a;mMd.call(this,a);mNd(this)} +function vNd(a){this.b=a;BMd.call(this,a);uNd(this)} +function J5d(a,b,c){this.a=a;G5d.call(this,b,c,5,6)} +function wje(a,b,c,d){this.b=a;XZd.call(this,b,c,d)} +function Tj(a,b){this.b=a;Aj.call(this,a.b);this.a=b} +function NLc(a){this.a=LLc(a.a);this.b=new dnb(a.b)} +function Fx(a,b){tm();Ex.call(this,a,Pm(new mob(b)))} +function _se(a,b){Vse();++Use;return new aue(a,b,0)} +function bte(a,b){Vse();++Use;return new aue(6,a,b)} +function Ztb(a,b){uFb(b);while(a.Ob()){b.Cd(a.Pb())}} +function Ujb(a,b){return bE(b)?Yjb(a,b):!!qtb(a.f,b)} +function O_d(a,b){return b.Vh()?Vvd(a.b,RD(b,54)):b} +function whb(a,b){return lhb(a.substr(0,b.length),b)} +function Fl(a){return new is(new Il(a.a.length,a.a))} +function Oid(a){return new rjd(a.c+a.b/2,a.d+a.a/2)} +function yD(a){return hD(~a.l&dxe,~a.m&dxe,~a.h&exe)} +function cE(a){return typeof a===gve||typeof a===kve} +function akb(a){a.f=new ttb(a);a.i=new Ntb(a);++a.g} +function Klb(a){if(!a){throw Adb(new Dvb)}return a.d} +function smb(a){var b;b=omb(a);sFb(b!=null);return b} +function tmb(a){var b;b=pmb(a);sFb(b!=null);return b} +function tv(a,b){var c;c=a.a.gc();Sb(b,c);return c-b} +function Ysb(a,b){var c;c=a.a.zc(b,a);return c==null} +function rAb(a,b){return a.a.zc(b,(Geb(),Eeb))==null} +function _nb(a){return new SDb(null,$nb(a,a.length))} +function yPb(a,b,c){return zPb(a,RD(b,42),RD(c,176))} +function Wrb(a,b,c){zsb(a.a,b);return _Eb(a.b,b.g,c)} +function fyb(a,b,c){lyb(c,a.a.c.length);$mb(a.a,c,b)} +function Knb(a,b,c,d){nFb(b,c,a.length);Onb(a,b,c,d)} +function Onb(a,b,c,d){var e;for(e=b;e<c;++e){a[e]=d}} +function Snb(a,b){var c;for(c=0;c<b;++c){a[c]=false}} +function cjb(a,b,c){Pib();this.e=a;this.d=b;this.a=c} +function DBb(a,b,c){this.c=a;this.a=b;yob();this.b=c} +function nMd(a,b){this.d=a;dMd.call(this,a);this.e=b} +function Ved(a,b,c){Ned(a,b.g,c);zsb(a.c,b);return a} +function xYb(a){vYb(a,(Cmd(),ymd));a.d=true;return a} +function Cfe(a){!a.j&&Ife(a,Dee(a.g,a.b));return a.j} +function At(a){a.a=null;a.e=null;akb(a.b);a.d=0;++a.c} +function znb(a){yFb(a.b!=-1);Xmb(a.c,a.a=a.b);a.b=-1} +function Qte(a,b){Wse.call(this,1);this.a=a;this.b=b} +function uUb(a,b){return a>0?$wnd.Math.log(a/b):-100} +function Agb(a,b){return Ddb(a,b)<0?-1:Ddb(a,b)>0?1:0} +function Dge(a,b){hZd(a,ZD(b,160)?b:RD(b,2036).Rl())} +function vFb(a,b){if(a==null){throw Adb(new Ogb(b))}} +function $nb(a,b){return jxb(b,a.length),new Gxb(a,b)} +function hsc(a,b){if(!b){return false}return ye(a,b)} +function Gs(){zs();return cD(WC(RG,1),jwe,549,0,[ys])} +function Xib(a){return a.e==0?a:new cjb(-a.e,a.d,a.a)} +function $Nb(a,b){return Qfb(a.c.c+a.c.b,b.c.c+b.c.b)} +function cvb(a,b){Pub(a.d,b,a.b.b,a.b);++a.a;a.c=null} +function JCb(a,b){!a.c?Rmb(a.b,b):JCb(a.c,b);return a} +function KB(a,b,c){var d;d=JB(a,b);LB(a,b,c);return d} +function Rnb(a,b,c){var d;for(d=0;d<b;++d){bD(a,d,c)}} +function nhb(a,b,c,d,e){while(b<c){d[e++]=ihb(a,b++)}} +function Qnc(a,b,c,d,e){Pnc(a,RD(Qc(b.k,c),15),c,d,e)} +function Nnc(a,b){FDb(GDb(a.Oc(),new voc),new xoc(b))} +function tXc(a,b){return Qfb(a.e.a+a.f.a,b.e.a+b.f.a)} +function vXc(a,b){return Qfb(a.e.b+a.f.b,b.e.b+b.f.b)} +function GOc(a){return $wnd.Math.abs(a.d.e-a.e.e)-a.a} +function ane(a){return a==oxe?mLe:a==pxe?'-INF':''+a} +function cne(a){return a==oxe?mLe:a==pxe?'-INF':''+a} +function MSb(a){HSb();return vCd(JGd(a))==vCd(LGd(a))} +function kOd(a,b,c){return RD(a.c.hd(b,RD(c,136)),44)} +function IFd(a,b){oDd(a,new OC(b.f!=null?b.f:''+b.g))} +function KFd(a,b){oDd(a,new OC(b.f!=null?b.f:''+b.g))} +function YGd(a,b){a.Si()&&(b=bHd(a,b));return a.Fi(b)} +function VVd(a,b){b=a.Yk(null,b);return UVd(a,null,b)} +function Wfe(a,b){++a.j;Tge(a,a.i,b);Vfe(a,RD(b,343))} +function UId(a){a?iz(a,(gib(),fib),''):neb((gib(),a))} +function Twb(a){this.d=(uFb(a),a);this.a=0;this.c=Sve} +function TTc(a,b){this.d=bUc(a);this.c=b;this.a=0.5*b} +function WTb(a){VTb.call(this);this.a=a;Rmb(a.a,this)} +function Zje(){gub.call(this);this.a=true;this.b=true} +function WB(){WB=geb;UB=new XB(false);VB=new XB(true)} +function Pc(a){var b;return b=a.g,!b?(a.g=new th(a)):b} +function Uc(a){var b;return b=a.k,!b?(a.k=new Bh(a)):b} +function ki(a){var b;return b=a.k,!b?(a.k=new Bh(a)):b} +function ej(a){var b;return b=a.i,!b?(a.i=new Ki(a)):b} +function bj(a){var b;b=a.f;return !b?(a.f=new Zj(a)):b} +function Fc(a){var b;b=a.j;return !b?(a.j=new Sw(a)):b} +function Co(a){var b;b=a.d;return !b?(a.d=new mp(a)):b} +function ate(a,b,c){Vse();++Use;return new Yte(a,b,c)} +function yj(a,b){Pb(b,a.c.b.c.gc());return new Nj(a,b)} +function sv(a,b){var c;c=a.a.gc();Pb(b,c);return c-1-b} +function sfb(a,b,c){var d;d=rfb(a,b);Ffb(c,d);return d} +function rfb(a,b){var c;c=new pfb;c.j=a;c.d=b;return c} +function Qb(a){if(a==null){throw Adb(new Ngb)}return a} +function OC(a){if(a==null){throw Adb(new Ngb)}this.a=a} +function XA(a){vA();this.b=new bnb;this.a=a;IA(this,a)} +function Zs(a){this.b=a;this.a=RD(Hvb(this.b.a.e),227)} +function tm(){tm=geb;_l();sm=new Kx((yob(),yob(),vob))} +function Px(){Px=geb;_l();Ox=new Qx((yob(),yob(),xob))} +function lTd(){lTd=geb;kTd=_ae();!!(JTd(),nTd)&&bbe()} +function LSc(a){a.s=NaN;a.c=NaN;MSc(a,a.e);MSc(a,a.j)} +function AYd(a){return (a.i==null&&rYd(a),a.i).length} +function wq(a,b){return RD(gn(a.a).Md().Xb(b),44).ld()} +function Wjb(a,b){return bE(b)?Xjb(a,b):Wd(qtb(a.f,b))} +function QSb(a,b){HSb();return a==JGd(b)?LGd(b):JGd(b)} +function rWb(a,b,c,d){return c==0||(c-d)/c<a.e||b>=a.g} +function bD(a,b,c){pFb(c==null||VC(a,c));return a[b]=c} +function yhb(a,b){BFb(b,a.length+1);return a.substr(b)} +function yxb(a,b){uFb(b);while(a.c<a.d){a.Se(b,a.c++)}} +function Dub(a){this.d=a;this.c=a.a.d.a;this.b=a.a.e.g} +function Ggd(a){this.c=a;this.a=new Yub;this.b=new Yub} +function R4b(a){this.c=new pjd;this.a=new bnb;this.b=a} +function fYb(a){this.b=new bnb;this.a=new bnb;this.c=a} +function Pdd(a,b,c){RD(b.b,68);Umb(b.a,new Wdd(a,c,b))} +function rdc(a,b){Zcc();return RD(Vrb(a,b.d),15).Fc(b)} +function oDd(a,b){var c;c=a.a.length;JB(a,c);LB(a,c,b)} +function eFb(a,b){var c;c=console[a];c.call(console,b)} +function _Id(a,b){var c;++a.j;c=a.Ej();a.rj(a.Zi(c,b))} +function lMc(a,b,c){var d;d=rMc(a,b,c);return kMc(a,d)} +function j2d(a){!a.d&&(a.d=new XZd(o7,a,1));return a.d} +function jVd(a){!a.a&&(a.a=new XZd(r7,a,4));return a.a} +function Jhb(a,b){a.a+=String.fromCharCode(b);return a} +function Thb(a,b){a.a+=String.fromCharCode(b);return a} +function D9d(a,b,c){this.a=a;L6d.call(this,b);this.b=c} +function Fde(a,b,c){this.a=a;MKd.call(this,8,b,null,c)} +function aue(a,b,c){Wse.call(this,a);this.a=b;this.b=c} +function O8d(a,b,c){t7d.call(this,b);this.a=a;this.b=c} +function ut(a){this.c=a;this.b=this.c.a;this.a=this.c.e} +function Zee(a){this.a=(uFb(qKe),qKe);this.b=a;new O5d} +function Trb(a){Ae(a.a);a.b=$C(jJ,rve,1,a.b.length,5,1)} +function Ckb(a){yFb(a.c!=-1);a.d.gd(a.c);a.b=a.c;a.c=-1} +function ejd(a){return $wnd.Math.sqrt(a.a*a.a+a.b*a.b)} +function Jzb(a,b){return Tyb(a.c,a.f,b,a.b,a.a,a.e,a.d)} +function eyb(a,b){return lyb(b,a.a.c.length),Vmb(a.a,b)} +function Hb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)} +function O2d(a){return ZD(a,102)&&(RD(a,19).Bb&QHe)!=0} +function Fb(a){Hvb(a);return ZD(a,483)?RD(a,483):jeb(a)} +function bve(a){if(a)return a.dc();return !a.Kc().Ob()} +function kte(a){if(!Ase)return false;return Yjb(Ase,a)} +function hDb(a){if(0>=a){return new rDb}return iDb(a-1)} +function Y2b(a){if(!a.a&&!!a.c){return a.c.b}return a.a} +function Zx(a){if(ZD(a,616)){return a}return new sy(a)} +function LCb(a){if(!a.c){MCb(a);a.d=true}else{LCb(a.c)}} +function ICb(a){if(!a.c){a.d=true;KCb(a)}else{a.c.$e()}} +function bHb(a){a.b=false;a.c=false;a.d=false;a.a=false} +function uMc(a){var b,c;b=a.c.i.c;c=a.d.i.c;return b==c} +function _vd(a,b){var c;c=a.Ih(b);c>=0?a.ki(c):Tvd(a,b)} +function mtd(a,b){a.c<0||a.b.b<a.c?Oub(a.b,b):a.a.tf(b)} +function aBd(a,b){WGd((!a.a&&(a.a=new F4d(a,a)),a.a),b)} +function DQb(a,b){RQb(RD(b.b,68),a);Umb(b.a,new IQb(a))} +function Woc(a,b){return hgb(b.j.c.length,a.j.c.length)} +function oed(a,b,c){hed();return c.Lg(a,RD(b.ld(),149))} +function Hvb(a){if(a==null){throw Adb(new Ngb)}return a} +function uFb(a){if(a==null){throw Adb(new Ngb)}return a} +function uKd(a){if(a.p!=4)throw Adb(new cgb);return a.e} +function tKd(a){if(a.p!=3)throw Adb(new cgb);return a.e} +function CKd(a){if(a.p!=3)throw Adb(new cgb);return a.j} +function DKd(a){if(a.p!=4)throw Adb(new cgb);return a.j} +function wKd(a){if(a.p!=6)throw Adb(new cgb);return a.f} +function FKd(a){if(a.p!=6)throw Adb(new cgb);return a.k} +function $9d(a){!a.b&&(a.b=new pae(new lae));return a.b} +function yfe(a){a.c==-2&&Efe(a,vee(a.g,a.b));return a.c} +function vfb(a,b){var c;c=rfb('',a);c.n=b;c.i=1;return c} +function kp(a,b,c,d){gp.call(this,a,c);this.a=b;this.f=d} +function ct(a,b,c,d){gp.call(this,a,b);this.d=c;this.a=d} +function zy(a,b){_p.call(this,Gob(Qb(a),Qb(b)));this.a=b} +function ufd(){Oed.call(this);aFb(this.j.c,0);this.a=-1} +function $ae(){FBd.call(this,AKe,(jTd(),iTd));Uae(this)} +function Bne(){FBd.call(this,dLe,(Ole(),Nle));xne(this)} +function cdd(){qs.call(this,'DELAUNAY_TRIANGULATION',0)} +function Ehb(a){return String.fromCharCode.apply(null,a)} +function Zjb(a,b,c){return bE(b)?$jb(a,b,c):rtb(a.f,b,c)} +function Fob(a){yob();return !a?(urb(),urb(),trb):a.Oe()} +function Zu(a){dk(a,lwe);return dz(Bdb(Bdb(5,a),a/10|0))} +function yx(a,b){ux();return new wx(new tl(a),new dl(b))} +function fn(){fn=geb;en=new Nx(cD(WC(UK,1),Zve,44,0,[]))} +function tqb(a){!a.d&&(a.d=new xpb(a.c.Cc()));return a.d} +function qqb(a){!a.a&&(a.a=new Sqb(a.c.vc()));return a.a} +function sqb(a){!a.b&&(a.b=new Lqb(a.c.ec()));return a.b} +function qgb(a,b){while(b-->0){a=a<<1|(a<0?1:0)}return a} +function BGc(a,b){var c;c=new R4b(a);ZEb(b.c,c);return c} +function FMb(a,b){a.u.Hc((Pod(),Lod))&&DMb(a,b);HMb(a,b)} +function Fvb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)} +function Vrb(a,b){return Bsb(a.a,b)?a.b[RD(b,22).g]:null} +function YRb(){VRb();return cD(WC($O,1),jwe,488,0,[URb])} +function ybd(){sbd();return cD(WC(M1,1),jwe,489,0,[rbd])} +function Hbd(){Cbd();return cD(WC(N1,1),jwe,558,0,[Bbd])} +function gdd(){_cd();return cD(WC(V1,1),jwe,539,0,[$cd])} +function iyd(a){!a.n&&(a.n=new C5d(I4,a,1,7));return a.n} +function wCd(a){!a.c&&(a.c=new C5d(K4,a,9,9));return a.c} +function mzd(a){!a.c&&(a.c=new Yie(E4,a,5,8));return a.c} +function lzd(a){!a.b&&(a.b=new Yie(E4,a,4,7));return a.b} +function Sed(a){a.j.c.length=0;Ae(a.c);sfd(a.a);return a} +function Afe(a){a.e==fLe&&Gfe(a,Aee(a.g,a.b));return a.e} +function Bfe(a){a.f==fLe&&Hfe(a,Bee(a.g,a.b));return a.f} +function xBd(a,b,c,d){wBd(a,b,c,false);j1d(a,d);return a} +function oNd(a,b){this.b=a;nMd.call(this,a,b);mNd(this)} +function wNd(a,b){this.b=a;CMd.call(this,a,b);uNd(this)} +function Kmb(a){this.d=a;this.a=this.d.b;this.b=this.d.c} +function oy(a,b){this.b=a;this.c=b;this.a=new Osb(this.b)} +function ihb(a,b){BFb(b,a.length);return a.charCodeAt(b)} +function NDd(a,b){CGd(a,Kfb(vDd(b,'x')),Kfb(vDd(b,'y')))} +function $Dd(a,b){CGd(a,Kfb(vDd(b,'x')),Kfb(vDd(b,'y')))} +function CDb(a,b){MCb(a);return new SDb(a,new hEb(b,a.a))} +function GDb(a,b){MCb(a);return new SDb(a,new zEb(b,a.a))} +function HDb(a,b){MCb(a);return new WCb(a,new nEb(b,a.a))} +function IDb(a,b){MCb(a);return new oDb(a,new tEb(b,a.a))} +function Ty(a,b){return new Ry(RD(Qb(a),50),RD(Qb(b),50))} +function nHb(a,b){return Qfb(a.d.c+a.d.b/2,b.d.c+b.d.b/2)} +function gTb(a,b,c){c.a?Eyd(a,b.b-a.f/2):Dyd(a,b.a-a.g/2)} +function WYb(a,b){return Qfb(a.g.c+a.g.b/2,b.g.c+b.g.b/2)} +function RZb(a,b){NZb();return Qfb((uFb(a),a),(uFb(b),b))} +function wSd(a){return a!=null&&tpb(eSd,a.toLowerCase())} +function Ae(a){var b;for(b=a.Kc();b.Ob();){b.Pb();b.Qb()}} +function Ih(a){var b;b=a.b;!b&&(a.b=b=new Xh(a));return b} +function R0b(a){var b;b=Z5b(a);if(b){return b}return null} +function BSb(a,b){var c,d;c=a/b;d=eE(c);c>d&&++d;return d} +function Ck(a,b,c){var d;d=RD(a.d.Kb(c),159);!!d&&d.Nb(b)} +function Vhc(a,b,c){tqc(a.a,c);Jpc(c);Kqc(a.b,c);bqc(b,c)} +function oNc(a,b,c,d){this.a=a;this.c=b;this.b=c;this.d=d} +function ROc(a,b,c,d){this.c=a;this.b=b;this.a=c;this.d=d} +function uPc(a,b,c,d){this.c=a;this.b=b;this.d=c;this.a=d} +function Uid(a,b,c,d){this.c=a;this.d=b;this.b=c;this.a=d} +function GTc(a,b,c,d){this.a=a;this.d=b;this.c=c;this.b=d} +function t1b(a,b,c,d){this.a=a;this.e=b;this.d=c;this.c=d} +function $td(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function ehb(a,b,c){this.a=ywe;this.d=a;this.b=b;this.c=c} +function fpc(a,b,c,d){qs.call(this,a,b);this.a=c;this.b=d} +function Uwb(a,b){this.d=(uFb(a),a);this.a=16449;this.c=b} +function CIc(a){this.a=new bnb;this.e=$C(kE,Nve,53,a,0,2)} +function ELc(a){a.Ug('No crossing minimization',1);a.Vg()} +function Evb(){yz.call(this,'There is no more element.')} +function OEd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function PEd(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d} +function h7d(a,b,c,d){this.e=a;this.a=b;this.c=c;this.d=d} +function x7d(a,b,c,d){this.a=a;this.c=b;this.d=c;this.b=d} +function C8d(a,b,c,d){s7d();M7d.call(this,b,c,d);this.a=a} +function J8d(a,b,c,d){s7d();M7d.call(this,b,c,d);this.a=a} +function lwd(a,b,c){var d,e;d=oSd(a);e=b.ti(c,d);return e} +function lBd(a){var b,c;c=(b=new s2d,b);l2d(c,a);return c} +function mBd(a){var b,c;c=(b=new s2d,b);p2d(c,a);return c} +function HDd(a,b){var c;c=Wjb(a.f,b);wEd(b,c);return null} +function uCd(a){!a.b&&(a.b=new C5d(G4,a,12,3));return a.b} +function VD(a){CFb(a==null||cE(a)&&!(a.Tm===keb));return a} +function gz(a){if(a.n){a.e!==rwe&&a.je();a.j=null}return a} +function Ng(a){ig(a.d);if(a.d.d!=a.c){throw Adb(new Jrb)}} +function Bkb(a){sFb(a.b<a.d.gc());return a.d.Xb(a.c=a.b++)} +function Xub(a){a.a.a=a.c;a.c.b=a.a;a.a.b=a.c.a=null;a.b=0} +function xPd(a){this.f=a;this.c=this.f.e;a.f>0&&wPd(this)} +function Vg(a,b){this.a=a;Pg.call(this,a,RD(a.d,15).fd(b))} +function lrd(a,b){return Qfb(urd(a)*trd(a),urd(b)*trd(b))} +function mrd(a,b){return Qfb(urd(a)*trd(a),urd(b)*trd(b))} +function n5b(a){return ozd(a)&&Heb(TD(Gxd(a,(yCc(),OAc))))} +function Sfc(a,b){return Rc(a,RD(mQb(b,(yCc(),tBc)),17),b)} +function lic(a,b){RD(mQb(a,(Ywc(),qwc)),15).Fc(b);return b} +function C2b(a,b){a.b=b.b;a.c=b.c;a.d=b.d;a.a=b.a;return a} +function cEb(a,b,c,d){this.b=a;this.c=d;xxb.call(this,b,c)} +function Ulc(a,b,c){a.i=0;a.e=0;if(b==c){return}Qlc(a,b,c)} +function Vlc(a,b,c){a.i=0;a.e=0;if(b==c){return}Rlc(a,b,c)} +function akc(a,b,c){Wjc();return _Gb(RD(Wjb(a.e,b),529),c)} +function nd(a){var b;return b=a.f,!b?(a.f=new ne(a,a.c)):b} +function nTc(a,b){return VTc(a.j,b.s,b.c)+VTc(b.e,a.s,a.c)} +function Rrc(a,b){if(!!a.e&&!a.e.a){Prc(a.e,b);Rrc(a.e,b)}} +function Qrc(a,b){if(!!a.d&&!a.d.a){Prc(a.d,b);Qrc(a.d,b)}} +function krd(a,b){return -Qfb(urd(a)*trd(a),urd(b)*trd(b))} +function gtd(a){return RD(a.ld(),149).Pg()+':'+jeb(a.md())} +function EBd(){BBd(this,new yAd);this.wb=(lTd(),kTd);jTd()} +function G7b(a){this.b=new bnb;Tmb(this.b,this.b);this.a=a} +function WWc(a,b){new Yub;this.a=new Ejd;this.b=a;this.c=b} +function urb(){urb=geb;rrb=new wrb;srb=new wrb;trb=new Brb} +function yob(){yob=geb;vob=new Job;wob=new apb;xob=new ipb} +function FGb(){FGb=geb;CGb=new AGb;EGb=new fHb;DGb=new YGb} +function HSb(){HSb=geb;GSb=new bnb;FSb=new Tsb;ESb=new bnb} +function Rb(a,b){if(a==null){throw Adb(new Ogb(b))}return a} +function tCd(a){!a.a&&(a.a=new C5d(J4,a,10,11));return a.a} +function uYd(a){!a.q&&(a.q=new C5d(s7,a,11,10));return a.q} +function xYd(a){!a.s&&(a.s=new C5d(y7,a,21,17));return a.s} +function er(a){Qb(a);return Er(new is(Mr(a.a.Kc(),new ir)))} +function hfd(a,b){rb(a);rb(b);return ns(RD(a,22),RD(b,22))} +function qDd(a,b,c){var d,e;d=Qeb(c);e=new hC(d);sC(a,b,e)} +function d4d(a,b,c,d,e,f){c4d.call(this,a,b,c,d,e,f?-2:-1)} +function sje(a,b,c,d){kZd.call(this,b,c);this.b=a;this.a=d} +function Ry(a,b){wi.call(this,new ezb(a));this.a=a;this.b=b} +function Gu(a){this.b=a;this.c=a;a.e=null;a.c=null;this.a=1} +function Dkc(a){lkc();var b;b=RD(a.g,10);b.n.a=a.d.c+b.d.b} +function fA(){fA=geb;var a,b;b=!lA();a=new tA;eA=b?new mA:a} +function Hob(a){yob();return ZD(a,59)?new irb(a):new Upb(a)} +function Ux(a){return ZD(a,16)?new btb(RD(a,16)):Vx(a.Kc())} +function Vi(a){return new ij(a,a.e.Rd().gc()*a.c.Rd().gc())} +function fj(a){return new sj(a,a.e.Rd().gc()*a.c.Rd().gc())} +function Iz(a){return !!a&&!!a.hashCode?a.hashCode():kFb(a)} +function Yjb(a,b){return b==null?!!qtb(a.f,null):Jtb(a.i,b)} +function hYb(a,b){var c;c=$sb(a.a,b);c&&(b.d=null);return c} +function MGb(a,b,c){if(a.f){return a.f.ef(b,c)}return false} +function cFc(a,b,c,d){bD(a.c[b.g],c.g,d);bD(a.c[c.g],b.g,d)} +function fFc(a,b,c,d){bD(a.c[b.g],b.g,c);bD(a.b[b.g],b.g,d)} +function sXc(a,b,c){return Kfb(UD(c.a))<=a&&Kfb(UD(c.b))>=b} +function yJc(a,b){this.g=a;this.d=cD(WC(jR,1),WAe,10,0,[b])} +function lHb(a){this.c=a;this.b=new yAb(RD(Qb(new oHb),50))} +function UYb(a){this.c=a;this.b=new yAb(RD(Qb(new XYb),50))} +function $Qb(a){this.b=a;this.a=new yAb(RD(Qb(new bRb),50))} +function tRc(){this.b=new _sb;this.d=new Yub;this.e=new Fyb} +function VTb(){this.c=new pjd;this.d=new pjd;this.e=new pjd} +function a1b(){this.a=new Ejd;this.b=(dk(3,iwe),new cnb(3))} +function i7d(a,b){this.e=a;this.a=jJ;this.b=pje(b);this.c=b} +function Vid(a){this.c=a.c;this.d=a.d;this.b=a.b;this.a=a.a} +function VLd(a,b,c,d,e,f){this.a=a;NKd.call(this,b,c,d,e,f)} +function aLd(a,b,c,d,e,f){this.a=a;NKd.call(this,b,c,d,e,f)} +function fge(a,b,c,d,e,f,g){return new lle(a.e,b,c,d,e,f,g)} +function xhb(a,b,c){return c>=0&&lhb(a.substr(c,b.length),b)} +function hGd(a,b){return ZD(b,149)&&lhb(a.b,RD(b,149).Pg())} +function Tde(a,b){return a.a?b.Gh().Kc():RD(b.Gh(),71).Ii()} +function Qqb(a,b){var c;c=a.b.Qc(b);Rqb(c,a.b.gc());return c} +function Ivb(a,b){if(a==null){throw Adb(new Ogb(b))}return a} +function zYd(a){if(!a.u){yYd(a);a.u=new w0d(a,a)}return a.u} +function Kx(a){this.a=(yob(),ZD(a,59)?new irb(a):new Upb(a))} +function Uwd(a){var b;b=RD(Ywd(a,16),29);return !b?a.ii():b} +function lz(a,b){var c;c=nfb(a.Rm);return b==null?c:c+': '+b} +function zhb(a,b,c){AFb(b,c,a.length);return a.substr(b,c-b)} +function VKb(a,b){RJb.call(this);KKb(this);this.a=a;this.c=b} +function neb(a){!a?vve:lz(a,a.ie());String.fromCharCode(10)} +function Wz(a){Qz();$wnd.setTimeout(function(){throw a},0)} +function GHb(){DHb();return cD(WC(uN,1),jwe,436,0,[CHb,BHb])} +function OHb(){LHb();return cD(WC(vN,1),jwe,435,0,[JHb,KHb])} +function WUb(){TUb();return cD(WC(BP,1),jwe,432,0,[RUb,SUb])} +function S8b(){P8b();return cD(WC(vS,1),jwe,517,0,[O8b,N8b])} +function Fuc(){Cuc();return cD(WC(fX,1),jwe,487,0,[Buc,Auc])} +function buc(){$tc();return cD(WC(cX,1),jwe,428,0,[Ytc,Ztc])} +function mtc(){jtc();return cD(WC($W,1),jwe,431,0,[htc,itc])} +function vEc(){sEc();return cD(WC(xX,1),jwe,430,0,[qEc,rEc])} +function vNc(){sNc();return cD(WC(MY,1),jwe,531,0,[rNc,qNc])} +function zQc(){wQc();return cD(WC(FZ,1),jwe,523,0,[vQc,uQc])} +function HQc(){EQc();return cD(WC(GZ,1),jwe,522,0,[CQc,DQc])} +function iTc(){fTc();return cD(WC(b$,1),jwe,528,0,[eTc,dTc])} +function Rvc(){Ovc();return cD(WC(lX,1),jwe,429,0,[Mvc,Nvc])} +function F8c(){z8c();return cD(WC(l1,1),jwe,490,0,[x8c,y8c])} +function H9c(){B9c();return cD(WC(t1,1),jwe,491,0,[z9c,A9c])} +function D_c(){A_c();return cD(WC(K_,1),jwe,433,0,[z_c,y_c])} +function a4c(){Y3c();return cD(WC(H0,1),jwe,434,0,[W3c,X3c])} +function gVc(){dVc();return cD(WC(w$,1),jwe,464,0,[bVc,cVc])} +function D2c(){x2c();return cD(WC(s0,1),jwe,500,0,[v2c,w2c])} +function Pbd(){Mbd();return cD(WC(O1,1),jwe,438,0,[Lbd,Kbd])} +function rdd(){ldd();return cD(WC(W1,1),jwe,437,0,[kdd,jdd])} +function xqd(){uqd();return cD(WC(M3,1),jwe,347,0,[sqd,tqd])} +function Jvd(a,b,c,d){return c>=0?a.Uh(b,c,d):a.Ch(null,c,d)} +function ltd(a){if(a.b.b==0){return a.a.sf()}return Uub(a.b)} +function vKd(a){if(a.p!=5)throw Adb(new cgb);return Ydb(a.f)} +function EKd(a){if(a.p!=5)throw Adb(new cgb);return Ydb(a.k)} +function P$d(a){dE(a.a)===dE((lYd(),kYd))&&Q$d(a);return a.a} +function iad(a,b){a.b=b;a.c>0&&a.b>0&&(a.g=Aad(a.c,a.b,a.a))} +function jad(a,b){a.c=b;a.c>0&&a.b>0&&(a.g=Aad(a.c,a.b,a.a))} +function BUc(a,b){yUc(this,new rjd(a.a,a.b));zUc(this,gv(b))} +function Tp(){Sp.call(this,new Usb(Sv(12)));Lb(true);this.a=2} +function eue(a,b,c){Vse();Wse.call(this,a);this.b=b;this.a=c} +function C7d(a,b,c){s7d();t7d.call(this,b);this.a=a;this.b=c} +function qub(a){var b;b=a.c.d.b;a.b=b;a.a=a.c.d;b.a=a.c.d.b=a} +function Tub(a){return a.b==0?null:(sFb(a.b!=0),Wub(a,a.a.a))} +function Xjb(a,b){return b==null?Wd(qtb(a.f,null)):Ktb(a.i,b)} +function bzb(a,b,c,d,e){return new Kzb(a,(cAb(),aAb),b,c,d,e)} +function Fnb(a,b){oFb(b);return Hnb(a,$C(kE,Pwe,28,b,15,1),b)} +function Tx(a,b){Rb(a,'set1');Rb(b,'set2');return new ey(a,b)} +function Kz(a,b){var c=Jz[a.charCodeAt(0)];return c==null?a:c} +function Xyb(a,b){var c,d;c=b;d=new Gzb;Zyb(a,c,d);return d.d} +function EMb(a,b,c,d){var e;e=new TJb;b.a[c.g]=e;Wrb(a.b,d,e)} +function SXb(a,b){var c;c=BXb(a.f,b);return $id(fjd(c),a.f.d)} +function RFb(a){var b;EJb(a.a);DJb(a.a);b=new PJb(a.a);LJb(b)} +function _Mb(a,b){$Mb(a,true);Umb(a.e.Rf(),new dNb(a,true,b))} +function PSb(a,b){HSb();return a==vCd(JGd(b))||a==vCd(LGd(b))} +function R0c(a,b){B0c();return RD(mQb(b,(h_c(),f_c)),17).a==a} +function eE(a){return Math.max(Math.min(a,lve),-2147483648)|0} +function sy(a){this.a=RD(Qb(a),277);this.b=(yob(),new jrb(a))} +function qbd(a,b,c){this.i=new bnb;this.b=a;this.g=b;this.a=c} +function had(a,b,c){this.a=new bnb;this.e=a;this.f=b;this.c=c} +function _9c(a,b,c){this.c=new bnb;this.e=a;this.f=b;this.b=c} +function TKb(a){RJb.call(this);KKb(this);this.a=a;this.c=true} +function ieb(a){function b(){} +;b.prototype=a||{};return new b} +function zfb(a){if(a.Ae()){return null}var b=a.n;return eeb[b]} +function kzd(a){if(a.Db>>16!=3)return null;return RD(a.Cb,27)} +function MCd(a){if(a.Db>>16!=9)return null;return RD(a.Cb,27)} +function Fzd(a){if(a.Db>>16!=6)return null;return RD(a.Cb,74)} +function dVc(){dVc=geb;bVc=new eVc(Nye,0);cVc=new eVc(Oye,1)} +function wQc(){wQc=geb;vQc=new xQc(Oye,0);uQc=new xQc(Nye,1)} +function EQc(){EQc=geb;CQc=new FQc(Zye,0);DQc=new FQc('UP',1)} +function Is(){Is=geb;Hs=ss((zs(),cD(WC(RG,1),jwe,549,0,[ys])))} +function Wx(a){var b;b=new atb(Sv(a.length));zob(b,a);return b} +function B2b(a,b){a.b+=b.b;a.c+=b.c;a.d+=b.d;a.a+=b.a;return a} +function qmb(a,b){if(kmb(a,b)){Jmb(a);return true}return false} +function qC(a,b){if(b==null){throw Adb(new Ngb)}return rC(a,b)} +function nB(a,b){var c;c=a.q.getHours();a.q.setDate(b);mB(a,c)} +function Xvd(a,b,c){var d;d=a.Ih(b);d>=0?a.bi(d,c):Svd(a,b,c)} +function Lvd(a,b){var c;c=a.Ih(b);return c>=0?a.Wh(c):Rvd(a,b)} +function zo(a,b){var c;Qb(b);for(c=a.a;c;c=c.c){b.Yd(c.g,c.i)}} +function pMc(a,b,c){var d;d=qMc(a,b,c);a.b=new _Lc(d.c.length)} +function HId(a,b,c){EId();!!a&&Zjb(DId,a,b);!!a&&Zjb(CId,a,c)} +function bfc(a,b){Rec();return Geb(),RD(b.a,17).a<a?true:false} +function afc(a,b){Rec();return Geb(),RD(b.b,17).a<a?true:false} +function R7b(a,b){return $wnd.Math.abs(a)<$wnd.Math.abs(b)?a:b} +function xCd(a){return !a.a&&(a.a=new C5d(J4,a,10,11)),a.a.i>0} +function sId(a){var b;b=a.d;b=a.bj(a.f);WGd(a,b);return b.Ob()} +function bHd(a,b){var c;c=new Kub(b);Ve(c,a);return new dnb(c)} +function qKd(a){if(a.p!=0)throw Adb(new cgb);return Pdb(a.f,0)} +function zKd(a){if(a.p!=0)throw Adb(new cgb);return Pdb(a.k,0)} +function gBd(a){if(a.Db>>16!=7)return null;return RD(a.Cb,241)} +function xXd(a){if(a.Db>>16!=6)return null;return RD(a.Cb,241)} +function dCd(a){if(a.Db>>16!=7)return null;return RD(a.Cb,167)} +function vCd(a){if(a.Db>>16!=11)return null;return RD(a.Cb,27)} +function uWd(a){if(a.Db>>16!=17)return null;return RD(a.Cb,29)} +function kVd(a){if(a.Db>>16!=3)return null;return RD(a.Cb,155)} +function BDb(a){var b;MCb(a);b=new _sb;return CDb(a,new aEb(b))} +function xfb(a,b){var c=a.a=a.a||[];return c[b]||(c[b]=a.ve(b))} +function qB(a,b){var c;c=a.q.getHours();a.q.setMonth(b);mB(a,c)} +function oz(a,b){ez(this);this.f=b;this.g=a;gz(this);this.je()} +function TQb(a,b){this.a=a;this.c=ajd(this.a);this.b=new Vid(b)} +function aGb(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new dnb(c))} +function s$b(a,b,c){this.a=b;this.c=a;this.b=(Qb(c),new dnb(c))} +function _Kc(a){this.a=a;this.b=$C(qY,Nve,2043,a.e.length,0,2)} +function fGb(){this.a=new Iub;this.e=new _sb;this.g=0;this.i=0} +function EId(){EId=geb;DId=new Tsb;CId=new Tsb;IId(zK,new JId)} +function KFc(){KFc=geb;JFc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} +function RFc(){RFc=geb;QFc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} +function gGc(){gGc=geb;fGc=nfd(new ufd,(sXb(),rXb),(hcc(),$bc))} +function ANc(){ANc=geb;zNc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function dOc(){dOc=geb;cOc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function gQc(){gQc=geb;fQc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function WQc(){WQc=geb;VQc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc))} +function dZd(a,b,c,d,e,f){return new P3d(a.e,b,a.Lj(),c,d,e,f)} +function $jb(a,b,c){return b==null?rtb(a.f,null,c):Ltb(a.i,b,c)} +function Y0b(a,b){!!a.c&&Ymb(a.c.g,a);a.c=b;!!a.c&&Rmb(a.c.g,a)} +function g3b(a,b){!!a.c&&Ymb(a.c.a,a);a.c=b;!!a.c&&Rmb(a.c.a,a)} +function P3b(a,b){!!a.i&&Ymb(a.i.j,a);a.i=b;!!a.i&&Rmb(a.i.j,a)} +function Z0b(a,b){!!a.d&&Ymb(a.d.e,a);a.d=b;!!a.d&&Rmb(a.d.e,a)} +function _Sc(a,b){!!a.a&&Ymb(a.a.k,a);a.a=b;!!a.a&&Rmb(a.a.k,a)} +function aTc(a,b){!!a.b&&Ymb(a.b.f,a);a.b=b;!!a.b&&Rmb(a.b.f,a)} +function Odd(a,b){Pdd(a,a.b,a.c);RD(a.b.b,68);!!b&&RD(b.b,68).b} +function j2c(a,b){return Qfb(RD(a.c,65).c.e.b,RD(b.c,65).c.e.b)} +function k2c(a,b){return Qfb(RD(a.c,65).c.e.a,RD(b.c,65).c.e.a)} +function YXb(a){NXb();return Geb(),RD(a.a,86).d.e!=0?true:false} +function LXd(a,b){ZD(a.Cb,184)&&(RD(a.Cb,184).tb=null);PAd(a,b)} +function CWd(a,b){ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,b)} +function _5d(a,b){a6d(a,b);ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),2)} +function JFd(a,b){var c,d;c=b.c;d=c!=null;d&&oDd(a,new OC(b.c))} +function v0d(a){var b,c;c=(jTd(),b=new s2d,b);l2d(c,a);return c} +function E4d(a){var b,c;c=(jTd(),b=new s2d,b);l2d(c,a);return c} +function Fr(a){var b;while(true){b=a.Pb();if(!a.Ob()){return b}}} +function nq(a,b,c){Rmb(a.a,(fn(),ck(b,c),new gp(b,c)));return a} +function rge(a,b){return nke(),wWd(b)?new ole(b,a):new Eke(b,a)} +function ojb(a){Pib();return Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a)))} +function Asb(a){var b;b=RD(UEb(a.b),9);return new Fsb(a.a,b,a.c)} +function Qw(a,b){var c;c=RD(Xv(nd(a.a),b),16);return !c?0:c.gc()} +function Zmb(a,b,c){var d;xFb(b,c,a.c.length);d=c-b;$Eb(a.c,b,d)} +function Rkb(a,b,c){xFb(b,c,a.gc());this.c=a;this.a=b;this.b=c-b} +function fgd(a){this.c=new Yub;this.b=a.b;this.d=a.c;this.a=a.a} +function qjd(a){this.a=$wnd.Math.cos(a);this.b=$wnd.Math.sin(a)} +function bTc(a,b,c,d){this.c=a;this.d=d;_Sc(this,b);aTc(this,c)} +function Si(a,b){Qi.call(this,new Usb(Sv(a)));dk(b,Mve);this.a=b} +function Ryb(a,b,c){return new Kzb(a,(cAb(),_zb),null,false,b,c)} +function czb(a,b,c){return new Kzb(a,(cAb(),bAb),b,c,null,false)} +function ABb(){xBb();return cD(WC(QL,1),jwe,108,0,[uBb,vBb,wBb])} +function yLb(){vLb();return cD(WC(TN,1),jwe,471,0,[uLb,tLb,sLb])} +function HKb(){EKb();return cD(WC(MN,1),jwe,470,0,[CKb,BKb,DKb])} +function aKb(){ZJb();return cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])} +function DWb(){AWb();return cD(WC(JP,1),jwe,391,0,[yWb,xWb,zWb])} +function moc(){joc();return cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc])} +function ytc(){stc();return cD(WC(_W,1),jwe,322,0,[qtc,ptc,rtc])} +function Htc(){Etc();return cD(WC(aX,1),jwe,351,0,[Btc,Dtc,Ctc])} +function kuc(){huc();return cD(WC(dX,1),jwe,459,0,[fuc,euc,guc])} +function Avc(){xvc();return cD(WC(jX,1),jwe,298,0,[vvc,wvc,uvc])} +function Jvc(){Gvc();return cD(WC(kX,1),jwe,311,0,[Evc,Fvc,Dvc])} +function pDc(){lDc();return cD(WC(sX,1),jwe,390,0,[iDc,jDc,kDc])} +function EEc(){BEc();return cD(WC(yX,1),jwe,462,0,[AEc,yEc,zEc])} +function NEc(){KEc();return cD(WC(zX,1),jwe,387,0,[HEc,IEc,JEc])} +function WEc(){TEc();return cD(WC(AX,1),jwe,349,0,[SEc,QEc,REc])} +function oFc(){lFc();return cD(WC(CX,1),jwe,350,0,[iFc,jFc,kFc])} +function xFc(){uFc();return cD(WC(DX,1),jwe,352,0,[tFc,rFc,sFc])} +function GFc(){DFc();return cD(WC(EX,1),jwe,388,0,[BFc,CFc,AFc])} +function UKc(){RKc();return cD(WC(nY,1),jwe,463,0,[OKc,PKc,QKc])} +function K3b(a){return xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a]))} +function OZc(){LZc();return cD(WC(F_,1),jwe,392,0,[KZc,JZc,IZc])} +function H_c(){H_c=geb;G_c=nfd(new ufd,(YVc(),WVc),(WYc(),MYc))} +function A_c(){A_c=geb;z_c=new B_c('DFS',0);y_c=new B_c('BFS',1)} +function TQc(a,b,c){var d;d=new SQc;d.b=b;d.a=c;++b.b;Rmb(a.d,d)} +function NTb(a,b,c){var d;d=new sjd(c.d);$id(d,a);CGd(b,d.a,d.b)} +function Nwb(a,b){Mwb(a,Ydb(Cdb(Tdb(b,24),Pxe)),Ydb(Cdb(b,Pxe)))} +function wFb(a,b){if(a<0||a>b){throw Adb(new veb(cye+a+dye+b))}} +function tFb(a,b){if(a<0||a>=b){throw Adb(new veb(cye+a+dye+b))}} +function BFb(a,b){if(a<0||a>=b){throw Adb(new eib(cye+a+dye+b))}} +function Swb(a,b){this.b=(uFb(a),a);this.a=(b&qxe)==0?b|64|Ove:b} +function ODb(a){var b;MCb(a);b=(urb(),urb(),srb);return PDb(a,b)} +function R9c(a,b,c){var d;d=S9c(a,b,false);return d.b<=b&&d.a<=c} +function h9c(){b9c();return cD(WC(o1,1),jwe,439,0,[$8c,a9c,_8c])} +function c7c(){_6c();return cD(WC(a1,1),jwe,394,0,[Z6c,$6c,Y6c])} +function i6c(){f6c();return cD(WC(V0,1),jwe,445,0,[c6c,d6c,e6c])} +function D6c(){z6c();return cD(WC(Z0,1),jwe,455,0,[w6c,y6c,x6c])} +function k4c(){g4c();return cD(WC(I0,1),jwe,393,0,[d4c,e4c,f4c])} +function x5c(){t5c();return cD(WC(N0,1),jwe,299,0,[r5c,s5c,q5c])} +function Rmd(){Omd();return cD(WC(t3,1),jwe,278,0,[Lmd,Mmd,Nmd])} +function pqd(){mqd();return cD(WC(J3,1),jwe,280,0,[kqd,jqd,lqd])} +function Ind(){Fnd();return cD(WC(y3,1),jwe,346,0,[Dnd,Cnd,End])} +function jbd(){gbd();return cD(WC(I1,1),jwe,444,0,[dbd,ebd,fbd])} +function bv(a){Qb(a);return ZD(a,16)?new dnb(RD(a,16)):cv(a.Kc())} +function Hz(a,b){return !!a&&!!a.equals?a.equals(b):dE(a)===dE(b)} +function Cdb(a,b){return Edb(tD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function Rdb(a,b){return Edb(zD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function $db(a,b){return Edb(HD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function xs(a,b){var c;c=(uFb(a),a).g;lFb(!!c);uFb(b);return c(b)} +function rv(a,b){var c,d;d=tv(a,b);c=a.a.fd(d);return new Gv(a,c)} +function CXd(a){if(a.Db>>16!=6)return null;return RD(yvd(a),241)} +function sKd(a){if(a.p!=2)throw Adb(new cgb);return Ydb(a.f)&Bwe} +function BKd(a){if(a.p!=2)throw Adb(new cgb);return Ydb(a.k)&Bwe} +function ynb(a){sFb(a.a<a.c.c.length);a.b=a.a++;return a.c.c[a.b]} +function $Gb(a,b){a.b=a.b|b.b;a.c=a.c|b.c;a.d=a.d|b.d;a.a=a.a|b.a} +function NJb(a,b){var c;c=Kfb(UD(a.a.of((umd(),cmd))));OJb(a,b,c)} +function bjb(a,b){cjb.call(this,1,2,cD(WC(kE,1),Pwe,28,15,[a,b]))} +function Yte(a,b,c){Wse.call(this,25);this.b=a;this.a=b;this.c=c} +function xte(a){Vse();Wse.call(this,a);this.c=false;this.a=false} +function xfe(a){a.a==(ree(),qee)&&Dfe(a,see(a.g,a.b));return a.a} +function zfe(a){a.d==(ree(),qee)&&Ffe(a,wee(a.g,a.b));return a.d} +function IZb(a,b){CZb();return a.c==b.c?Qfb(b.d,a.d):Qfb(b.c,a.c)} +function GZb(a,b){CZb();return a.c==b.c?Qfb(b.d,a.d):Qfb(a.c,b.c)} +function HZb(a,b){CZb();return a.c==b.c?Qfb(a.d,b.d):Qfb(a.c,b.c)} +function JZb(a,b){CZb();return a.c==b.c?Qfb(a.d,b.d):Qfb(b.c,a.c)} +function Yrb(a,b){return Dsb(a.a,b)?_Eb(a.b,RD(b,22).g,null):null} +function Lwb(a){return Bdb(Sdb(Hdb(Kwb(a,32)),32),Hdb(Kwb(a,32)))} +function kUb(a){return a.b==null||a.b.length==0?'n_'+a.a:'n_'+a.b} +function aXc(a){return a.c==null||a.c.length==0?'n_'+a.g:'n_'+a.c} +function wYc(a,b){var c;c=a+'';while(c.length<b){c='0'+c}return c} +function vkc(a,b){var c;c=RD(Wjb(a.g,b),60);Umb(b.d,new ulc(a,c))} +function J_b(a,b){var c,d;c=l2b(a);d=l2b(b);return c<d?-1:c>d?1:0} +function Hmc(a,b){var c,d;c=Gmc(b);d=c;return RD(Wjb(a.c,d),17).a} +function CMc(a,b,c){var d;d=a.d[b.p];a.d[b.p]=a.d[c.p];a.d[c.p]=d} +function Jqd(a,b,c){var d;if(a.n&&!!b&&!!c){d=new otd;Rmb(a.e,d)}} +function gYb(a,b){Ysb(a.a,b);if(b.d){throw Adb(new yz(jye))}b.d=a} +function Had(a,b){this.a=new bnb;this.d=new bnb;this.f=a;this.c=b} +function RWb(){this.c=new dXb;this.a=new I_b;this.b=new E0b;g0b()} +function med(){hed();this.b=new Tsb;this.a=new Tsb;this.c=new bnb} +function KKd(a,b,c){this.d=a;this.j=b;this.e=c;this.o=-1;this.p=3} +function LKd(a,b,c){this.d=a;this.k=b;this.f=c;this.o=-1;this.p=5} +function S3d(a,b,c,d,e,f){R3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function U3d(a,b,c,d,e,f){T3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function W3d(a,b,c,d,e,f){V3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function Y3d(a,b,c,d,e,f){X3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function $3d(a,b,c,d,e,f){Z3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function a4d(a,b,c,d,e,f){_3d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function f4d(a,b,c,d,e,f){e4d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function h4d(a,b,c,d,e,f){g4d.call(this,a,b,c,d,e);f&&(this.o=-2)} +function N7d(a,b,c,d){t7d.call(this,c);this.b=a;this.c=b;this.d=d} +function mfe(a,b){this.f=a;this.a=(ree(),pee);this.c=pee;this.b=b} +function Jfe(a,b){this.g=a;this.d=(ree(),qee);this.a=qee;this.b=b} +function Gme(a,b){!a.c&&(a.c=new Uge(a,0));Fge(a.c,(nme(),fme),b)} +function Oge(a,b){return Pge(a,b,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function lB(a,b){return Agb(Hdb(a.q.getTime()),Hdb(b.q.getTime()))} +function gj(a){return fk(a.e.Rd().gc()*a.c.Rd().gc(),16,new qj(a))} +function CYd(a){return !!a.u&&tYd(a.u.a).i!=0&&!(!!a.n&&d$d(a.n))} +function p4d(a){return !!a.a&&o4d(a.a.a).i!=0&&!(!!a.b&&o5d(a.b))} +function Cxd(a,b){if(b==0){return !!a.o&&a.o.f!=0}return Kvd(a,b)} +function Cc(a,b,c){var d;d=RD(a.Zb().xc(b),16);return !!d&&d.Hc(c)} +function Gc(a,b,c){var d;d=RD(a.Zb().xc(b),16);return !!d&&d.Mc(c)} +function _yb(a,b){var c;c=1-b;a.a[c]=azb(a.a[c],c);return azb(a,b)} +function DFb(a,b){var c,d;d=Cdb(a,yxe);c=Sdb(b,32);return Rdb(c,d)} +function bGb(a,b,c){var d;d=(Qb(a),new dnb(a));_Fb(new aGb(d,b,c))} +function t$b(a,b,c){var d;d=(Qb(a),new dnb(a));r$b(new s$b(d,b,c))} +function vBd(a,b,c,d,e,f){wBd(a,b,c,f);EYd(a,d);FYd(a,e);return a} +function Xhb(a,b,c,d){a.a+=''+zhb(b==null?vve:jeb(b),c,d);return a} +function Jkb(a,b){this.a=a;Dkb.call(this,a);wFb(b,a.gc());this.b=b} +function xmb(a){this.a=$C(jJ,rve,1,mgb($wnd.Math.max(8,a))<<1,5,1)} +function t2b(a){return RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199)} +function s2b(a){return RD(anb(a,$C(WQ,VAe,18,a.c.length,0,1)),482)} +function Iyb(a){return !a.a?a.c:a.e.length==0?a.a.a:a.a.a+(''+a.e)} +function Rib(a){while(a.d>0&&a.a[--a.d]==0);a.a[a.d++]==0&&(a.e=0)} +function fvb(a){sFb(a.b.b!=a.d.a);a.c=a.b=a.b.b;--a.a;return a.c.c} +function sRc(a,b,c){a.a=b;a.c=c;a.b.a.$b();Xub(a.d);aFb(a.e.a.c,0)} +function Z5c(a,b){var c;a.e=new R5c;c=Q2c(b);_mb(c,a.c);$5c(a,c,0)} +function zgd(a,b,c,d){var e;e=new Hgd;e.a=b;e.b=c;e.c=d;Mub(a.a,e)} +function Agd(a,b,c,d){var e;e=new Hgd;e.a=b;e.b=c;e.c=d;Mub(a.b,e)} +function Tb(a,b,c){if(a<0||b<a||b>c){throw Adb(new veb(Kb(a,b,c)))}} +function Pb(a,b){if(a<0||a>=b){throw Adb(new veb(Ib(a,b)))}return a} +function qz(b){if(!('stack' in b)){try{throw b}catch(a){}}return b} +function Zjc(a){Wjc();if(ZD(a.g,10)){return RD(a.g,10)}return null} +function nx(a){if(Ih(a).dc()){return false}Jh(a,new rx);return true} +function Xdb(a){var b;if(Kdb(a)){b=a;return b==-0.?0:b}return ED(a)} +function lkb(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} +function gsb(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} +function vub(a,b){if(ZD(b,44)){return Jd(a.a,RD(b,44))}return false} +function RCb(a){var b;LCb(a);b=new Prb;ixb(a.a,new fDb(b));return b} +function Vae(){var a,b,c;b=(c=(a=new s2d,a),c);Rmb(Rae,b);return b} +function mDb(a){var b;LCb(a);b=new ltb;ixb(a.a,new uDb(b));return b} +function jDb(a,b){if(a.a<=a.b){b.Dd(a.a++);return true}return false} +function xzb(a){yzb.call(this,a,(cAb(),$zb),null,false,null,false)} +function $Rb(){$Rb=geb;ZRb=ss((VRb(),cD(WC($O,1),jwe,488,0,[URb])))} +function CHc(){CHc=geb;BHc=yx(sgb(1),sgb(4));AHc=yx(sgb(1),sgb(2))} +function yXc(a,b){return new gud(b,njd(ajd(b.e),a,a),(Geb(),true))} +function fv(a){return new cnb((dk(a,lwe),dz(Bdb(Bdb(5,a),a/10|0))))} +function Wi(a){return fk(a.e.Rd().gc()*a.c.Rd().gc(),273,new kj(a))} +function u2b(a){return RD(anb(a,$C(xR,XAe,12,a.c.length,0,1)),2042)} +function COc(a){dOc();return !W0b(a)&&!(!W0b(a)&&a.c.i.c==a.d.i.c)} +function Y_c(a,b){R_c();return RD(mQb(b,(h_c(),W$c)),17).a>=a.gc()} +function q8b(a,b){w8b(b,a);y8b(a.d);y8b(RD(mQb(a,(yCc(),cBc)),214))} +function r8b(a,b){z8b(b,a);B8b(a.d);B8b(RD(mQb(a,(yCc(),cBc)),214))} +function $0b(a,b,c){!!a.d&&Ymb(a.d.e,a);a.d=b;!!a.d&&Qmb(a.d.e,c,a)} +function jPb(a,b,c){return c.f.c.length>0?yPb(a.a,b,c):yPb(a.b,b,c)} +function Uz(a,b,c){var d;d=Sz();try{return Rz(a,b,c)}finally{Vz(d)}} +function wDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=c.pe());return d} +function yDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=c.se());return d} +function xDd(a,b){var c,d;c=JB(a,b);d=null;!!c&&(d=c.se());return d} +function zDd(a,b){var c,d;c=qC(a,b);d=null;!!c&&(d=ADd(c));return d} +function rEd(a,b,c){var d;d=uDd(c);Do(a.g,d,b);Do(a.i,b,c);return b} +function UIc(a,b,c){this.d=new fJc(this);this.e=a;this.i=b;this.f=c} +function Mk(a,b,c,d){this.e=null;this.c=a;this.d=b;this.a=c;this.b=d} +function urc(a,b,c,d){nrc(this);this.c=a;this.e=b;this.f=c;this.b=d} +function MKd(a,b,c,d){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1} +function Vc(a,b,c,d){return ZD(c,59)?new Kg(a,b,c,d):new yg(a,b,c,d)} +function gr(a){if(ZD(a,16)){return RD(a,16).dc()}return !a.Kc().Ob()} +function Wo(a){if(a.e.g!=a.b){throw Adb(new Jrb)}return !!a.c&&a.d>0} +function evb(a){sFb(a.b!=a.d.c);a.c=a.b;a.b=a.b.a;++a.a;return a.c.c} +function imb(a,b){uFb(b);bD(a.a,a.c,b);a.c=a.c+1&a.a.length-1;mmb(a)} +function hmb(a,b){uFb(b);a.b=a.b-1&a.a.length-1;bD(a.a,a.b,b);mmb(a)} +function _je(a){var b;b=a.Gh();this.a=ZD(b,71)?RD(b,71).Ii():b.Kc()} +function px(a){return new Swb(Dob(RD(a.a.md(),16).gc(),a.a.ld()),16)} +function Abd(){Abd=geb;zbd=ss((sbd(),cD(WC(M1,1),jwe,489,0,[rbd])))} +function Jbd(){Jbd=geb;Ibd=ss((Cbd(),cD(WC(N1,1),jwe,558,0,[Bbd])))} +function idd(){idd=geb;hdd=ss((_cd(),cD(WC(V1,1),jwe,539,0,[$cd])))} +function X$b(){U$b();return cD(WC(CQ,1),jwe,389,0,[T$b,R$b,Q$b,S$b])} +function hAb(){cAb();return cD(WC(AL,1),jwe,303,0,[$zb,_zb,aAb,bAb])} +function LPb(){IPb();return cD(WC(DO,1),jwe,332,0,[FPb,EPb,GPb,HPb])} +function LRb(){IRb();return cD(WC(WO,1),jwe,406,0,[FRb,ERb,GRb,HRb])} +function pOb(){mOb();return cD(WC(hO,1),jwe,417,0,[lOb,iOb,jOb,kOb])} +function uZb(){nZb();return cD(WC(lQ,1),jwe,416,0,[jZb,mZb,kZb,lZb])} +function hnc(){enc();return cD(WC(LV,1),jwe,421,0,[anc,bnc,cnc,dnc])} +function zec(){vec();return cD(WC(qT,1),jwe,371,0,[uec,sec,tec,rec])} +function BDc(){wDc();return cD(WC(tX,1),jwe,203,0,[uDc,vDc,tDc,sDc])} +function nEc(){kEc();return cD(WC(wX,1),jwe,284,0,[hEc,gEc,iEc,jEc])} +function Unc(a){var b;return a.j==(qpd(),npd)&&(b=Vnc(a),Csb(b,Xod))} +function qhc(a,b){var c;c=b.a;Y0b(c,b.c.d);Z0b(c,b.d.d);Cjd(c.a,a.n)} +function _5b(a,b){var c;c=RD(cub(a.b,b),67);!c&&(c=new Yub);return c} +function $jc(a){Wjc();if(ZD(a.g,154)){return RD(a.g,154)}return null} +function gRc(a){a.a=null;a.e=null;aFb(a.b.c,0);aFb(a.f.c,0);a.c=null} +function Ovc(){Ovc=geb;Mvc=new Pvc(Kye,0);Nvc=new Pvc('TOP_LEFT',1)} +function sNc(){sNc=geb;rNc=new tNc('UPPER',0);qNc=new tNc('LOWER',1)} +function nWc(a,b){return cjd(new rjd(b.e.a+b.f.a/2,b.e.b+b.f.b/2),a)} +function wqc(a,b){return RD(Lvb(JDb(RD(Qc(a.k,b),15).Oc(),lqc)),113)} +function xqc(a,b){return RD(Lvb(KDb(RD(Qc(a.k,b),15).Oc(),lqc)),113)} +function cWc(){YVc();return cD(WC(H$,1),jwe,405,0,[UVc,VVc,WVc,XVc])} +function v_c(){s_c();return cD(WC(J_,1),jwe,353,0,[r_c,p_c,q_c,o_c])} +function n5c(){j5c();return cD(WC(M0,1),jwe,354,0,[i5c,g5c,h5c,f5c])} +function Tpd(){Qpd();return cD(WC(H3,1),jwe,386,0,[Opd,Ppd,Npd,Mpd])} +function Tnd(){Pnd();return cD(WC(z3,1),jwe,290,0,[Ond,Lnd,Mnd,Nnd])} +function _md(){Ymd();return cD(WC(u3,1),jwe,223,0,[Xmd,Vmd,Umd,Wmd])} +function Jrd(){Grd();return cD(WC(R3,1),jwe,320,0,[Frd,Crd,Erd,Drd])} +function wtd(){ttd();return cD(WC(n4,1),jwe,415,0,[qtd,rtd,ptd,std])} +function GId(a){EId();return Ujb(DId,a)?RD(Wjb(DId,a),341).Qg():null} +function Avd(a,b,c){return b<0?Rvd(a,c):RD(c,69).wk().Bk(a,a.hi(),b)} +function sEd(a,b,c){var d;d=uDd(c);Do(a.j,d,b);Zjb(a.k,b,c);return b} +function qEd(a,b,c){var d;d=uDd(c);Do(a.d,d,b);Zjb(a.e,b,c);return b} +function DGd(a){var b,c;b=(bvd(),c=new rzd,c);!!a&&pzd(b,a);return b} +function WHd(a){var b;b=a.aj(a.i);a.i>0&&hib(a.g,0,b,0,a.i);return b} +function Led(a,b){var c;for(c=a.j.c.length;c<b;c++){Rmb(a.j,a.Ng())}} +function $Ec(a,b,c,d){var e;e=d[b.g][c.g];return Kfb(UD(mQb(a.a,e)))} +function QRd(a,b){PRd();var c;c=RD(Wjb(ORd,a),57);return !c||c.fk(b)} +function rKd(a){if(a.p!=1)throw Adb(new cgb);return Ydb(a.f)<<24>>24} +function AKd(a){if(a.p!=1)throw Adb(new cgb);return Ydb(a.k)<<24>>24} +function GKd(a){if(a.p!=7)throw Adb(new cgb);return Ydb(a.k)<<16>>16} +function xKd(a){if(a.p!=7)throw Adb(new cgb);return Ydb(a.f)<<16>>16} +function Wib(a,b){if(b.e==0||a.e==0){return Oib}return Ljb(),Mjb(a,b)} +function Nd(a,b){return dE(b)===dE(a)?'(this Map)':b==null?vve:jeb(b)} +function MFb(a,b,c){return Jfb(UD(Wd(qtb(a.f,b))),UD(Wd(qtb(a.f,c))))} +function wkc(a,b,c){var d;d=RD(Wjb(a.g,c),60);Rmb(a.a.c,new Ptd(b,d))} +function Slc(a,b,c){a.i=0;a.e=0;if(b==c){return}Rlc(a,b,c);Qlc(a,b,c)} +function rTc(a,b,c,d,e){var f;f=mTc(e,c,d);Rmb(b,TSc(e,f));vTc(a,e,b)} +function Jrc(a,b,c,d,e){this.i=a;this.a=b;this.e=c;this.j=d;this.f=e} +function iUb(a,b){VTb.call(this);this.a=a;this.b=b;Rmb(this.a.b,this)} +function rTb(a){this.b=new Tsb;this.c=new Tsb;this.d=new Tsb;this.a=a} +function Dx(a,b){var c;c=new cib;a.Gd(c);c.a+='..';b.Hd(c);return c.a} +function Fsd(a,b){var c;c=b;while(c){Zid(a,c.i,c.j);c=vCd(c)}return a} +function pEd(a,b,c){var d;d=uDd(c);Zjb(a.b,d,b);Zjb(a.c,b,c);return b} +function Kr(a){var b;b=0;while(a.Ob()){a.Pb();b=Bdb(b,1)}return dz(b)} +function oke(a,b){nke();var c;c=RD(a,69).vk();K6d(c,b);return c.xl(b)} +function tC(d,a,b){if(b){var c=b.oe();d.a[a]=c(b)}else{delete d.a[a]}} +function tB(a,b){var c;c=a.q.getHours();a.q.setFullYear(b+Owe);mB(a,c)} +function KSd(a,b){return RD(b==null?Wd(qtb(a.f,null)):Ktb(a.i,b),288)} +function hOc(a,b){return a==(r3b(),p3b)&&b==p3b?4:a==p3b||b==p3b?8:32} +function cge(a,b,c){return dge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function jge(a,b,c){return kge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function Qge(a,b,c){return Rge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)} +function jmb(a){if(a.b==a.c){return}a.a=$C(jJ,rve,1,8,5,1);a.b=0;a.c=0} +function Nsb(a){sFb(a.a<a.c.a.length);a.b=a.a;Lsb(a);return a.c.b[a.b]} +function tYd(a){if(!a.n){yYd(a);a.n=new h$d(a,o7,a);zYd(a)}return a.n} +function oFb(a){if(a<0){throw Adb(new Mgb('Negative array size: '+a))}} +function LB(d,a,b){if(b){var c=b.oe();b=c(b)}else{b=undefined}d.a[a]=b} +function ygc(a,b){sgc();var c;c=a.j.g-b.j.g;if(c!=0){return c}return 0} +function l_d(a,b){gib();String.fromCharCode(10);return WGd(xYd(a.a),b)} +function q_d(a,b){gib();String.fromCharCode(10);return WGd(xYd(a.a),b)} +function ajb(a,b){Pib();cjb.call(this,a,1,cD(WC(kE,1),Pwe,28,15,[b]))} +function Kte(a,b){Vse();Wse.call(this,a);this.a=b;this.c=-1;this.b=-1} +function L3d(a,b,c,d){KKd.call(this,1,c,d);J3d(this);this.c=a;this.b=b} +function M3d(a,b,c,d){LKd.call(this,1,c,d);J3d(this);this.c=a;this.b=b} +function lle(a,b,c,d,e,f,g){NKd.call(this,b,d,e,f,g);this.c=a;this.a=c} +function j7d(a,b,c){this.e=a;this.a=jJ;this.b=pje(b);this.c=b;this.d=c} +function Xo(a){this.e=a;this.c=this.e.a;this.b=this.e.g;this.d=this.e.i} +function Qtb(a){this.d=a;this.b=this.d.a.entries();this.a=this.b.next()} +function N9d(a){this.c=a;this.a=RD(WVd(a),156);this.b=this.a.jk().wi()} +function gub(){Tsb.call(this);_tb(this);this.d.b=this.d;this.d.a=this.d} +function Pub(a,b,c,d){var e;e=new svb;e.c=b;e.b=c;e.a=d;d.b=c.a=e;++a.b} +function USd(a,b){var c;return c=b!=null?Xjb(a,b):Wd(qtb(a.f,b)),fE(c)} +function dTd(a,b){var c;return c=b!=null?Xjb(a,b):Wd(qtb(a.f,b)),fE(c)} +function zDb(a,b){var c;return b.b.Kb(LDb(a,b.c.Xe(),(c=new OEb(b),c)))} +function Gnb(a,b){var c;oFb(b);return c=a.slice(0,b),c.length=b,dD(c,a)} +function Rqb(a,b){var c;for(c=0;c<b;++c){bD(a,c,new brb(RD(a[c],44)))}} +function Tib(a,b){var c;for(c=a.d-1;c>=0&&a.a[c]===b[c];c--);return c<0} +function Xx(a){var b;if(a){return new Kub(a)}b=new Iub;_q(b,a);return b} +function nmc(a,b){var c,d;d=false;do{c=qmc(a,b);d=d|c}while(c);return d} +function Vz(a){a&&aA(($z(),Zz));--Nz;if(a){if(Pz!=-1){Xz(Pz);Pz=-1}}} +function Pwb(a){Hwb();Mwb(this,Ydb(Cdb(Tdb(a,24),Pxe)),Ydb(Cdb(a,Pxe)))} +function IHb(){IHb=geb;HHb=ss((DHb(),cD(WC(uN,1),jwe,436,0,[CHb,BHb])))} +function QHb(){QHb=geb;PHb=ss((LHb(),cD(WC(vN,1),jwe,435,0,[JHb,KHb])))} +function YUb(){YUb=geb;XUb=ss((TUb(),cD(WC(BP,1),jwe,432,0,[RUb,SUb])))} +function U8b(){U8b=geb;T8b=ss((P8b(),cD(WC(vS,1),jwe,517,0,[O8b,N8b])))} +function Huc(){Huc=geb;Guc=ss((Cuc(),cD(WC(fX,1),jwe,487,0,[Buc,Auc])))} +function duc(){duc=geb;cuc=ss(($tc(),cD(WC(cX,1),jwe,428,0,[Ytc,Ztc])))} +function otc(){otc=geb;ntc=ss((jtc(),cD(WC($W,1),jwe,431,0,[htc,itc])))} +function xEc(){xEc=geb;wEc=ss((sEc(),cD(WC(xX,1),jwe,430,0,[qEc,rEc])))} +function xNc(){xNc=geb;wNc=ss((sNc(),cD(WC(MY,1),jwe,531,0,[rNc,qNc])))} +function BQc(){BQc=geb;AQc=ss((wQc(),cD(WC(FZ,1),jwe,523,0,[vQc,uQc])))} +function JQc(){JQc=geb;IQc=ss((EQc(),cD(WC(GZ,1),jwe,522,0,[CQc,DQc])))} +function kTc(){kTc=geb;jTc=ss((fTc(),cD(WC(b$,1),jwe,528,0,[eTc,dTc])))} +function Tvc(){Tvc=geb;Svc=ss((Ovc(),cD(WC(lX,1),jwe,429,0,[Mvc,Nvc])))} +function iVc(){iVc=geb;hVc=ss((dVc(),cD(WC(w$,1),jwe,464,0,[bVc,cVc])))} +function c4c(){c4c=geb;b4c=ss((Y3c(),cD(WC(H0,1),jwe,434,0,[W3c,X3c])))} +function F_c(){F_c=geb;E_c=ss((A_c(),cD(WC(K_,1),jwe,433,0,[z_c,y_c])))} +function F2c(){F2c=geb;E2c=ss((x2c(),cD(WC(s0,1),jwe,500,0,[v2c,w2c])))} +function H8c(){H8c=geb;G8c=ss((z8c(),cD(WC(l1,1),jwe,490,0,[x8c,y8c])))} +function J9c(){J9c=geb;I9c=ss((B9c(),cD(WC(t1,1),jwe,491,0,[z9c,A9c])))} +function Rbd(){Rbd=geb;Qbd=ss((Mbd(),cD(WC(O1,1),jwe,438,0,[Lbd,Kbd])))} +function tdd(){tdd=geb;sdd=ss((ldd(),cD(WC(W1,1),jwe,437,0,[kdd,jdd])))} +function Eqd(){Eqd=geb;Dqd=ss((uqd(),cD(WC(M3,1),jwe,347,0,[sqd,tqd])))} +function Imd(){Cmd();return cD(WC(s3,1),jwe,88,0,[Amd,zmd,ymd,xmd,Bmd])} +function xpd(){qpd();return cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])} +function LSd(a,b,c){return RD(b==null?rtb(a.f,null,c):Ltb(a.i,b,c),288)} +function L6b(a){return (a.k==(r3b(),p3b)||a.k==m3b)&&nQb(a,(Ywc(),cwc))} +function bUb(a){return !!a.c&&!!a.d?kUb(a.c)+'->'+kUb(a.d):'e_'+kFb(a)} +function xgb(a,b){var c,d;uFb(b);for(d=a.Kc();d.Ob();){c=d.Pb();b.Cd(c)}} +function jEd(a,b){var c;c=new uC;qDd(c,'x',b.a);qDd(c,'y',b.b);oDd(a,c)} +function mEd(a,b){var c;c=new uC;qDd(c,'x',b.a);qDd(c,'y',b.b);oDd(a,c)} +function Gsd(a,b){var c;c=b;while(c){Zid(a,-c.i,-c.j);c=vCd(c)}return a} +function ZLc(a,b){var c,d;c=b;d=0;while(c>0){d+=a.a[c];c-=c&-c}return d} +function $mb(a,b,c){var d;d=(tFb(b,a.c.length),a.c[b]);a.c[b]=c;return d} +function uIc(a,b,c){a.a.c.length=0;yIc(a,b,c);a.a.c.length==0||rIc(a,b)} +function wo(a){a.i=0;Mnb(a.b,null);Mnb(a.c,null);a.a=null;a.e=null;++a.g} +function gBb(){gBb=geb;dBb=true;bBb=false;cBb=false;fBb=false;eBb=false} +function oBb(a){gBb();if(dBb){return}this.c=a;this.e=true;this.a=new bnb} +function kDb(a,b){this.c=0;this.b=b;txb.call(this,a,17493);this.a=this.c} +function S_b(a){P_b();A$b(this);this.a=new Yub;Q_b(this,a);Mub(this.a,a)} +function m_b(){Pmb(this);this.b=new rjd(oxe,oxe);this.a=new rjd(pxe,pxe)} +function z8c(){z8c=geb;x8c=new B8c(CBe,0);y8c=new B8c('TARGET_WIDTH',1)} +function yDb(a,b){return (MCb(a),QDb(new SDb(a,new hEb(b,a.a)))).Bd(wDb)} +function vXb(){sXb();return cD(WC(UP,1),jwe,367,0,[nXb,oXb,pXb,qXb,rXb])} +function Fnc(){Bnc();return cD(WC(TV,1),jwe,375,0,[xnc,znc,Anc,ync,wnc])} +function Vtc(){Ptc();return cD(WC(bX,1),jwe,348,0,[Ltc,Ktc,Ntc,Otc,Mtc])} +function PDc(){JDc();return cD(WC(uX,1),jwe,323,0,[IDc,FDc,GDc,EDc,HDc])} +function fxc(){cxc();return cD(WC(mX,1),jwe,171,0,[bxc,Zwc,$wc,_wc,axc])} +function k3c(){g3c();return cD(WC(x0,1),jwe,368,0,[e3c,b3c,f3c,c3c,d3c])} +function vad(){sad();return cD(WC(x1,1),jwe,373,0,[oad,nad,qad,pad,rad])} +function $bd(){Xbd();return cD(WC(P1,1),jwe,324,0,[Sbd,Tbd,Wbd,Ubd,Vbd])} +function _hd(){Yhd();return cD(WC(d3,1),jwe,170,0,[Whd,Vhd,Thd,Xhd,Uhd])} +function sod(){pod();return cD(WC(B3,1),jwe,256,0,[mod,ood,kod,lod,nod])} +function Tz(b){Qz();return function(){return Uz(b,this,arguments);var a}} +function W0b(a){if(!a.c||!a.d){return false}return !!a.c.i&&a.c.i==a.d.i} +function Nfd(a,b){if(ZD(b,143)){return lhb(a.c,RD(b,143).c)}return false} +function yYd(a){if(!a.t){a.t=new w$d(a);VGd(new Cde(a),0,a.t)}return a.t} +function jNd(a){this.b=a;dMd.call(this,a);this.a=RD(Ywd(this.b.a,4),129)} +function sNd(a){this.b=a;yMd.call(this,a);this.a=RD(Ywd(this.b.a,4),129)} +function Q3d(a,b,c,d,e){OKd.call(this,b,d,e);J3d(this);this.c=a;this.b=c} +function V3d(a,b,c,d,e){KKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} +function Z3d(a,b,c,d,e){LKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} +function g4d(a,b,c,d,e){OKd.call(this,b,d,e);J3d(this);this.c=a;this.a=c} +function ugd(a,b){var c;c=RD(cub(a.d,b),23);return c?c:RD(cub(a.e,b),23)} +function Blb(a,b){var c,d;c=b.ld();d=a.Fe(c);return !!d&&Fvb(d.e,b.md())} +function me(a,b){var c;c=b.ld();return new gp(c,a.e.pc(c,RD(b.md(),16)))} +function ptb(a,b){var c;c=a.a.get(b);return c==null?$C(jJ,rve,1,0,5,1):c} +function khb(a){var b;b=a.length;return lhb(sxe.substr(sxe.length-b,b),a)} +function hs(a){if(gs(a)){a.c=a.a;return a.a.Pb()}else{throw Adb(new Dvb)}} +function $ib(a,b){if(b==0||a.e==0){return a}return b>0?tjb(a,b):qjb(a,-b)} +function Zib(a,b){if(b==0||a.e==0){return a}return b>0?qjb(a,b):tjb(a,-b)} +function Deb(a){Beb.call(this,a==null?vve:jeb(a),ZD(a,82)?RD(a,82):null)} +function Y5d(a){var b;if(!a.c){b=a.r;ZD(b,90)&&(a.c=RD(b,29))}return a.c} +function s0b(a){var b;b=new a1b;kQb(b,a);pQb(b,(yCc(),RAc),null);return b} +function lec(a){var b,c;b=a.c.i;c=a.d.i;return b.k==(r3b(),m3b)&&c.k==m3b} +function fD(a){var b,c,d;b=a&dxe;c=a>>22&dxe;d=a<0?exe:0;return hD(b,c,d)} +function Ky(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];ICb(b)}} +function Tc(a,b){var c,d;c=RD(Yv(a.c,b),16);if(c){d=c.gc();c.$b();a.d-=d}} +function Fvd(a,b,c){var d;return d=a.Ih(b),d>=0?a.Lh(d,c,true):Qvd(a,b,c)} +function AXc(a,b,c){return Qfb(cjd(jWc(a),ajd(b.b)),cjd(jWc(a),ajd(c.b)))} +function BXc(a,b,c){return Qfb(cjd(jWc(a),ajd(b.e)),cjd(jWc(a),ajd(c.e)))} +function Kad(a,b){return $wnd.Math.min(bjd(b.a,a.d.d.c),bjd(b.b,a.d.d.c))} +function LHd(a,b){a._i(a.i+1);MHd(a,a.i,a.Zi(a.i,b));a.Mi(a.i++,b);a.Ni()} +function OHd(a){var b,c;++a.j;b=a.g;c=a.i;a.g=null;a.i=0;a.Oi(c,b);a.Ni()} +function yke(a,b,c){var d;d=new zke(a.a);Ld(d,a.a.a);rtb(d.f,b,c);a.a.a=d} +function mKb(a,b,c,d){var e;for(e=0;e<jKb;e++){dKb(a.a[e][b.g],c,d[b.g])}} +function lKb(a,b,c,d){var e;for(e=0;e<iKb;e++){eKb(a.a[b.g][e],c,d[b.g])}} +function Qc(a,b){var c;c=RD(a.c.xc(b),16);!c&&(c=a.ic(b));return a.pc(b,c)} +function vm(a){var b;b=(Qb(a),a?new dnb(a):cv(a.Kc()));Eob(b);return Pm(b)} +function dv(a){var b,c;Qb(a);b=Zu(a.length);c=new cnb(b);zob(c,a);return c} +function Hjb(a,b,c,d){var e;e=$C(kE,Pwe,28,b,15,1);Ijb(e,a,b,c,d);return e} +function Sb(a,b){if(a<0||a>b){throw Adb(new veb(Jb(a,b,'index')))}return a} +function Xmb(a,b){var c;c=(tFb(b,a.c.length),a.c[b]);$Eb(a.c,b,1);return c} +function jhb(a,b){var c,d;c=(uFb(a),a);d=(uFb(b),b);return c==d?0:c<d?-1:1} +function Orb(a){var b;b=a.e+a.f;if(isNaN(b)&&Rfb(a.d)){return a.d}return b} +function zc(a){a.e=3;a.d=a.Yb();if(a.e!=2){a.e=0;return true}return false} +function Gyb(a,b){!a.a?(a.a=new dib(a.d)):Zhb(a.a,a.b);Whb(a.a,b);return a} +function _jb(a,b){return bE(b)?b==null?stb(a.f,null):Mtb(a.i,b):stb(a.f,b)} +function nEb(a,b){pxb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} +function tEb(a,b){txb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} +function zEb(a,b){xxb.call(this,b.zd(),b.yd()&-6);uFb(a);this.a=a;this.b=b} +function M7d(a,b,c){t7d.call(this,c);this.b=a;this.c=b;this.d=(a8d(),$7d)} +function OKd(a,b,c){this.d=a;this.k=b?1:0;this.f=c?1:0;this.o=-1;this.p=0} +function l4b(a){this.c=a;this.a=new Anb(this.c.a);this.b=new Anb(this.c.b)} +function gUb(){this.e=new bnb;this.c=new bnb;this.d=new bnb;this.b=new bnb} +function DIb(){this.g=new GIb;this.b=new GIb;this.a=new bnb;this.k=new bnb} +function I_b(){this.a=new J$b;this.b=new N$b;this.d=new Z_b;this.e=new V_b} +function knc(a,b,c){this.a=a;this.c=b;this.d=c;Rmb(b.e,this);Rmb(c.b,this)} +function sIc(a,b,c){var d,e;d=0;for(e=0;e<b.length;e++){d+=a.tg(b[e],d,c)}} +function nMc(a,b){var c;c=tMc(a,b);a.b=new _Lc(c.c.length);return mMc(a,c)} +function pB(a,b){var c;c=a.q.getHours()+(b/60|0);a.q.setMinutes(b);mB(a,c)} +function _Wc(a){var b;b=a.b;if(b.b==0){return null}return RD(ju(b,0),65).b} +function Src(a){if(a.a){if(a.e){return Src(a.e)}}else{return a}return null} +function mIc(a,b){if(a.p<b.p){return 1}else if(a.p>b.p){return -1}return 0} +function hXd(a){var b;if(!a.a){b=a.r;ZD(b,156)&&(a.a=RD(b,156))}return a.a} +function iOd(a,b,c){var d;++a.e;--a.f;d=RD(a.d[b].gd(c),136);return d.md()} +function fd(a){var b,c;b=a.ld();c=RD(a.md(),16);return gk(c.Nc(),new jh(b))} +function oae(a,b){if(Ujb(a.a,b)){_jb(a.a,b);return true}else{return false}} +function Ui(a,b,c){Pb(b,a.e.Rd().gc());Pb(c,a.c.Rd().gc());return a.a[b][c]} +function _Uc(a,b,c){this.a=a;this.b=b;this.c=c;Rmb(a.t,this);Rmb(b.i,this)} +function lg(a,b,c,d){this.f=a;this.e=b;this.d=c;this.b=d;this.c=!d?null:d.d} +function YWc(){this.b=new Yub;this.a=new Yub;this.b=new Yub;this.a=new Yub} +function ree(){ree=geb;var a,b;pee=(jTd(),b=new k1d,b);qee=(a=new mXd,a)} +function UCb(a){var b;MCb(a);b=new $Cb(a,a.a.e,a.a.d|4);return new WCb(a,b)} +function ADb(a){var b;LCb(a);b=0;while(a.a.Bd(new MEb)){b=Bdb(b,1)}return b} +function zxb(a,b){uFb(b);if(a.c<a.d){a.Se(b,a.c++);return true}return false} +function cnb(a){Pmb(this);mFb(a>=0,'Initial capacity must not be negative')} +function rid(){rid=geb;qid=new jGd('org.eclipse.elk.labels.labelManager')} +function iec(){iec=geb;hec=new kGd('separateLayerConnections',(vec(),uec))} +function fTc(){fTc=geb;eTc=new gTc('REGULAR',0);dTc=new gTc('CRITICAL',1)} +function Mbd(){Mbd=geb;Lbd=new Nbd('FIXED',0);Kbd=new Nbd('CENTER_NODE',1)} +function jtc(){jtc=geb;htc=new ktc('QUADRATIC',0);itc=new ktc('SCANLINE',1)} +function Atc(){Atc=geb;ztc=ss((stc(),cD(WC(_W,1),jwe,322,0,[qtc,ptc,rtc])))} +function Jtc(){Jtc=geb;Itc=ss((Etc(),cD(WC(aX,1),jwe,351,0,[Btc,Dtc,Ctc])))} +function muc(){muc=geb;luc=ss((huc(),cD(WC(dX,1),jwe,459,0,[fuc,euc,guc])))} +function ooc(){ooc=geb;noc=ss((joc(),cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc])))} +function Lvc(){Lvc=geb;Kvc=ss((Gvc(),cD(WC(kX,1),jwe,311,0,[Evc,Fvc,Dvc])))} +function Cvc(){Cvc=geb;Bvc=ss((xvc(),cD(WC(jX,1),jwe,298,0,[vvc,wvc,uvc])))} +function rDc(){rDc=geb;qDc=ss((lDc(),cD(WC(sX,1),jwe,390,0,[iDc,jDc,kDc])))} +function PEc(){PEc=geb;OEc=ss((KEc(),cD(WC(zX,1),jwe,387,0,[HEc,IEc,JEc])))} +function YEc(){YEc=geb;XEc=ss((TEc(),cD(WC(AX,1),jwe,349,0,[SEc,QEc,REc])))} +function GEc(){GEc=geb;FEc=ss((BEc(),cD(WC(yX,1),jwe,462,0,[AEc,yEc,zEc])))} +function zFc(){zFc=geb;yFc=ss((uFc(),cD(WC(DX,1),jwe,352,0,[tFc,rFc,sFc])))} +function qFc(){qFc=geb;pFc=ss((lFc(),cD(WC(CX,1),jwe,350,0,[iFc,jFc,kFc])))} +function IFc(){IFc=geb;HFc=ss((DFc(),cD(WC(EX,1),jwe,388,0,[BFc,CFc,AFc])))} +function QZc(){QZc=geb;PZc=ss((LZc(),cD(WC(F_,1),jwe,392,0,[KZc,JZc,IZc])))} +function m4c(){m4c=geb;l4c=ss((g4c(),cD(WC(I0,1),jwe,393,0,[d4c,e4c,f4c])))} +function z5c(){z5c=geb;y5c=ss((t5c(),cD(WC(N0,1),jwe,299,0,[r5c,s5c,q5c])))} +function k6c(){k6c=geb;j6c=ss((f6c(),cD(WC(V0,1),jwe,445,0,[c6c,d6c,e6c])))} +function F6c(){F6c=geb;E6c=ss((z6c(),cD(WC(Z0,1),jwe,455,0,[w6c,y6c,x6c])))} +function e7c(){e7c=geb;d7c=ss((_6c(),cD(WC(a1,1),jwe,394,0,[Z6c,$6c,Y6c])))} +function j9c(){j9c=geb;i9c=ss((b9c(),cD(WC(o1,1),jwe,439,0,[$8c,a9c,_8c])))} +function WKc(){WKc=geb;VKc=ss((RKc(),cD(WC(nY,1),jwe,463,0,[OKc,PKc,QKc])))} +function JKb(){JKb=geb;IKb=ss((EKb(),cD(WC(MN,1),jwe,470,0,[CKb,BKb,DKb])))} +function cKb(){cKb=geb;bKb=ss((ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])))} +function ALb(){ALb=geb;zLb=ss((vLb(),cD(WC(TN,1),jwe,471,0,[uLb,tLb,sLb])))} +function CBb(){CBb=geb;BBb=ss((xBb(),cD(WC(QL,1),jwe,108,0,[uBb,vBb,wBb])))} +function FWb(){FWb=geb;EWb=ss((AWb(),cD(WC(JP,1),jwe,391,0,[yWb,xWb,zWb])))} +function Knd(){Knd=geb;Jnd=ss((Fnd(),cD(WC(y3,1),jwe,346,0,[Dnd,Cnd,End])))} +function lbd(){lbd=geb;kbd=ss((gbd(),cD(WC(I1,1),jwe,444,0,[dbd,ebd,fbd])))} +function Tmd(){Tmd=geb;Smd=ss((Omd(),cD(WC(t3,1),jwe,278,0,[Lmd,Mmd,Nmd])))} +function rqd(){rqd=geb;qqd=ss((mqd(),cD(WC(J3,1),jwe,280,0,[kqd,jqd,lqd])))} +function Hxd(a,b){return !a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),QNd(a.o,b)} +function HMb(a,b){var c;if(a.C){c=RD(Vrb(a.b,b),127).n;c.d=a.C.d;c.a=a.C.a}} +function F8b(a){var b,c,d,e;e=a.d;b=a.a;c=a.b;d=a.c;a.d=c;a.a=d;a.b=e;a.c=b} +function cOd(a){!a.g&&(a.g=new hQd);!a.g.b&&(a.g.b=new ePd(a));return a.g.b} +function dOd(a){!a.g&&(a.g=new hQd);!a.g.c&&(a.g.c=new IPd(a));return a.g.c} +function lOd(a){!a.g&&(a.g=new hQd);!a.g.d&&(a.g.d=new kPd(a));return a.g.d} +function YNd(a){!a.g&&(a.g=new hQd);!a.g.a&&(a.g.a=new qPd(a));return a.g.a} +function B9d(a,b,c,d){!!c&&(d=c.Rh(b,BYd(c.Dh(),a.c.uk()),null,d));return d} +function C9d(a,b,c,d){!!c&&(d=c.Th(b,BYd(c.Dh(),a.c.uk()),null,d));return d} +function Cjb(a,b,c,d){var e;e=$C(kE,Pwe,28,b+1,15,1);Djb(e,a,b,c,d);return e} +function $C(a,b,c,d,e,f){var g;g=_C(e,d);e!=10&&cD(WC(a,f),b,c,e,g);return g} +function $fe(a,b,c){var d,e;e=new Phe(b,a);for(d=0;d<c;++d){Dhe(e)}return e} +function $Gd(a,b,c){var d,e;if(c!=null){for(d=0;d<b;++d){e=c[d];a.Qi(d,e)}}} +function Yyb(a,b){var c;c=new Gzb;c.c=true;c.d=b.md();return Zyb(a,b.ld(),c)} +function rB(a,b){var c;c=a.q.getHours()+(b/3600|0);a.q.setSeconds(b);mB(a,c)} +function Ct(a,b){var c,d;c=b;d=Hob(cv(new Nu(a,c)));Ar(new Nu(a,c));return d} +function Kdc(a,b){b.Ug('Label management',1);fE(mQb(a,(rid(),qid)));b.Vg()} +function wge(a,b,c,d){vge(a,b,c,kge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0))} +function BQb(a,b,c){RD(a.b,68);RD(a.b,68);RD(a.b,68);Umb(a.a,new KQb(c,b,a))} +function AFb(a,b,c){if(a<0||b>c||b<a){throw Adb(new eib(_xe+a+bye+b+Qxe+c))}} +function NCb(a){if(!a){this.c=null;this.b=new bnb}else{this.c=a;this.b=null}} +function Fzb(a,b){xlb.call(this,a,b);this.a=$C(vL,Zve,447,2,0,1);this.b=true} +function hub(a){ckb.call(this,a,0);_tb(this);this.d.b=this.d;this.d.a=this.d} +function wtb(a){this.e=a;this.b=this.e.a.entries();this.a=$C(jJ,rve,1,0,5,1)} +function _Fc(){_Fc=geb;$Fc=nfd(pfd(new ufd,(sXb(),nXb),(hcc(),Ebc)),rXb,$bc)} +function xuc(){tuc();return cD(WC(eX,1),jwe,283,0,[ouc,nuc,quc,puc,suc,ruc])} +function Ruc(){Ouc();return cD(WC(gX,1),jwe,281,0,[Luc,Kuc,Nuc,Juc,Muc,Iuc])} +function bvc(){$uc();return cD(WC(hX,1),jwe,282,0,[Yuc,Vuc,Zuc,Xuc,Wuc,Uuc])} +function etc(){btc();return cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])} +function u3b(){r3b();return cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])} +function Uod(){Pod();return cD(WC(D3,1),jwe,279,0,[Nod,Lod,Mod,Kod,Jod,Ood])} +function God(){Bod();return cD(WC(C3,1),jwe,101,0,[Aod,zod,yod,vod,xod,wod])} +function lnd(){ind();return cD(WC(v3,1),jwe,321,0,[gnd,end,hnd,cnd,fnd,dnd])} +function Ujd(){Rjd();return cD(WC(n3,1),jwe,255,0,[Ljd,Ojd,Pjd,Qjd,Mjd,Njd])} +function xkd(){ukd();return cD(WC(q3,1),jwe,297,0,[tkd,skd,rkd,pkd,okd,qkd])} +function K3d(a){var b;if(!a.a&&a.b!=-1){b=a.c.Dh();a.a=vYd(b,a.b)}return a.a} +function WGd(a,b){if(a.Si()&&a.Hc(b)){return false}else{a.Hi(b);return true}} +function RKb(a,b){Ivb(b,'Horizontal alignment cannot be null');a.b=b;return a} +function ite(a,b,c){Vse();var d;d=hte(a,b);c&&!!d&&kte(a)&&(d=null);return d} +function ZKc(a,b,c){var d;d=a.b[c.c.p][c.p];d.b+=b.b;d.c+=b.c;d.a+=b.a;++d.a} +function Umc(a,b,c){var d;a.d[b.g]=c;d=a.g.c;d[b.g]=$wnd.Math.max(d[b.g],c+1)} +function bjd(a,b){var c,d;c=a.a-b.a;d=a.b-b.b;return $wnd.Math.sqrt(c*c+d*d)} +function v$b(a,b){var c,d;for(d=b.Kc();d.Ob();){c=RD(d.Pb(),36);u$b(a,c,0,0)}} +function x$b(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);w$b(d,b,c)}} +function G0c(a){var b,c;for(c=Sub(a.a,0);c.b!=c.d.c;){b=RD(evb(c),65);H0c(b)}} +function nnc(a,b){bub(a.e,b)||dub(a.e,b,new tnc(b));return RD(cub(a.e,b),113)} +function tBb(a,b,c,d){uFb(a);uFb(b);uFb(c);uFb(d);return new DBb(a,b,new NAb)} +function DVd(a,b,c,d){this.ak();this.a=b;this.b=a;this.c=new wje(this,b,c,d)} +function O3d(a,b,c,d,e,f){MKd.call(this,b,d,e,f);J3d(this);this.c=a;this.b=c} +function c4d(a,b,c,d,e,f){MKd.call(this,b,d,e,f);J3d(this);this.c=a;this.a=c} +function Q9c(a,b){var c,d,e;e=a.r;d=a.d;c=S9c(a,b,true);return c.b!=e||c.a!=d} +function Vee(a,b,c){var d,e;e=(d=N5d(a.b,b),d);return !e?null:tfe(Pee(a,e),c)} +function _Dd(a,b,c){var d,e,f;d=qC(a,c);e=null;!!d&&(e=ADd(d));f=e;tEd(b,c,f)} +function aEd(a,b,c){var d,e,f;d=qC(a,c);e=null;!!d&&(e=ADd(d));f=e;tEd(b,c,f)} +function Evd(a,b){var c;return c=a.Ih(b),c>=0?a.Lh(c,true,true):Qvd(a,b,true)} +function gMc(a,b,c){var d;d=qMc(a,b,c);a.b=new _Lc(d.c.length);return iMc(a,d)} +function Pue(a){if(a.b<=0)throw Adb(new Dvb);--a.b;a.a-=a.c.c;return sgb(a.a)} +function PGd(a){var b;if(!a.a){throw Adb(new Evb)}b=a.a;a.a=vCd(a.a);return b} +function WDb(a){while(!a.a){if(!yEb(a.c,new $Db(a))){return false}}return true} +function Nr(a){var b;Qb(a);if(ZD(a,204)){b=RD(a,204);return b}return new Or(a)} +function Cfd(a){Afd();RD(a.of((umd(),Lld)),181).Fc((Pod(),Mod));a.qf(Kld,null)} +function Afd(){Afd=geb;xfd=new Gfd;zfd=new Ifd;yfd=yn((umd(),Kld),xfd,pld,zfd)} +function Y3c(){Y3c=geb;W3c=new $3c('LEAF_NUMBER',0);X3c=new $3c('NODE_SIZE',1)} +function YLc(a){a.a=$C(kE,Pwe,28,a.b+1,15,1);a.c=$C(kE,Pwe,28,a.b,15,1);a.d=0} +function OZb(a,b){if(a.a.Ne(b.d,a.b)>0){Rmb(a.c,new fZb(b.c,b.d,a.d));a.b=b.d}} +function NHd(a,b){if(a.g==null||b>=a.i)throw Adb(new yNd(b,a.i));return a.g[b]} +function P_d(a,b,c){gHd(a,c);if(c!=null&&!a.fk(c)){throw Adb(new yeb)}return c} +function dD(a,b){XC(b)!=10&&cD(rb(b),b.Sm,b.__elementTypeId$,XC(b),a);return a} +function Wnb(a,b,c,d){var e;d=(urb(),!d?rrb:d);e=a.slice(b,c);Xnb(e,a,b,c,-b,d)} +function zvd(a,b,c,d,e){return b<0?Qvd(a,c,d):RD(c,69).wk().yk(a,a.hi(),b,d,e)} +function J9b(a,b){return Qfb(Kfb(UD(mQb(a,(Ywc(),Jwc)))),Kfb(UD(mQb(b,Jwc))))} +function qAb(){qAb=geb;pAb=ss((cAb(),cD(WC(AL,1),jwe,303,0,[$zb,_zb,aAb,bAb])))} +function cAb(){cAb=geb;$zb=new dAb('All',0);_zb=new iAb;aAb=new kAb;bAb=new nAb} +function EKb(){EKb=geb;CKb=new FKb(Nye,0);BKb=new FKb(Kye,1);DKb=new FKb(Oye,2)} +function Zme(){Zme=geb;qAd();Wme=oxe;Vme=pxe;Yme=new Tfb(oxe);Xme=new Tfb(pxe)} +function rOb(){rOb=geb;qOb=ss((mOb(),cD(WC(hO,1),jwe,417,0,[lOb,iOb,jOb,kOb])))} +function NRb(){NRb=geb;MRb=ss((IRb(),cD(WC(WO,1),jwe,406,0,[FRb,ERb,GRb,HRb])))} +function NPb(){NPb=geb;MPb=ss((IPb(),cD(WC(DO,1),jwe,332,0,[FPb,EPb,GPb,HPb])))} +function Z$b(){Z$b=geb;Y$b=ss((U$b(),cD(WC(CQ,1),jwe,389,0,[T$b,R$b,Q$b,S$b])))} +function wZb(){wZb=geb;vZb=ss((nZb(),cD(WC(lQ,1),jwe,416,0,[jZb,mZb,kZb,lZb])))} +function jnc(){jnc=geb;inc=ss((enc(),cD(WC(LV,1),jwe,421,0,[anc,bnc,cnc,dnc])))} +function Bec(){Bec=geb;Aec=ss((vec(),cD(WC(qT,1),jwe,371,0,[uec,sec,tec,rec])))} +function DDc(){DDc=geb;CDc=ss((wDc(),cD(WC(tX,1),jwe,203,0,[uDc,vDc,tDc,sDc])))} +function pEc(){pEc=geb;oEc=ss((kEc(),cD(WC(wX,1),jwe,284,0,[hEc,gEc,iEc,jEc])))} +function Cuc(){Cuc=geb;Buc=new Duc(LAe,0);Auc=new Duc('IMPROVE_STRAIGHTNESS',1)} +function _i(a,b){var c,d;d=b/a.c.Rd().gc()|0;c=b%a.c.Rd().gc();return Ui(a,d,c)} +function iZd(a){var b;if(a.nl()){for(b=a.i-1;b>=0;--b){QHd(a,b)}}return WHd(a)} +function Nyb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[0]){c=b}return c} +function Oyb(a){var b,c;if(!a.b){return null}c=a.b;while(b=c.a[1]){c=b}return c} +function Hae(a){if(ZD(a,180)){return ''+RD(a,180).a}return a==null?null:jeb(a)} +function Iae(a){if(ZD(a,180)){return ''+RD(a,180).a}return a==null?null:jeb(a)} +function eGb(a,b){if(b.a){throw Adb(new yz(jye))}Ysb(a.a,b);b.a=a;!a.j&&(a.j=b)} +function hEb(a,b){xxb.call(this,b.zd(),b.yd()&-16449);uFb(a);this.a=a;this.c=b} +function zXc(a,b){return new gud(b,Zid(ajd(b.e),b.f.a+a,b.f.b+a),(Geb(),false))} +function EMc(a,b){dMc();return Rmb(a,new Ptd(b,sgb(b.e.c.length+b.g.c.length)))} +function GMc(a,b){dMc();return Rmb(a,new Ptd(b,sgb(b.e.c.length+b.g.c.length)))} +function p5c(){p5c=geb;o5c=ss((j5c(),cD(WC(M0,1),jwe,354,0,[i5c,g5c,h5c,f5c])))} +function x_c(){x_c=geb;w_c=ss((s_c(),cD(WC(J_,1),jwe,353,0,[r_c,p_c,q_c,o_c])))} +function eWc(){eWc=geb;dWc=ss((YVc(),cD(WC(H$,1),jwe,405,0,[UVc,VVc,WVc,XVc])))} +function bnd(){bnd=geb;and=ss((Ymd(),cD(WC(u3,1),jwe,223,0,[Xmd,Vmd,Umd,Wmd])))} +function Vnd(){Vnd=geb;Und=ss((Pnd(),cD(WC(z3,1),jwe,290,0,[Ond,Lnd,Mnd,Nnd])))} +function Vpd(){Vpd=geb;Upd=ss((Qpd(),cD(WC(H3,1),jwe,386,0,[Opd,Ppd,Npd,Mpd])))} +function Lrd(){Lrd=geb;Krd=ss((Grd(),cD(WC(R3,1),jwe,320,0,[Frd,Crd,Erd,Drd])))} +function ytd(){ytd=geb;xtd=ss((ttd(),cD(WC(n4,1),jwe,415,0,[qtd,rtd,ptd,std])))} +function b9c(){b9c=geb;$8c=new d9c(iFe,0);a9c=new d9c(mEe,1);_8c=new d9c(LAe,2)} +function sBb(a,b,c,d,e){uFb(a);uFb(b);uFb(c);uFb(d);uFb(e);return new DBb(a,b,d)} +function fub(a,b){var c;c=RD(_jb(a.e,b),400);if(c){rub(c);return c.e}return null} +function Ymb(a,b){var c;c=Wmb(a,b,0);if(c==-1){return false}Xmb(a,c);return true} +function LDb(a,b,c){var d;LCb(a);d=new IEb;d.a=b;a.a.Nb(new QEb(d,c));return d.a} +function VCb(a){var b;LCb(a);b=$C(iE,vxe,28,0,15,1);ixb(a.a,new dDb(b));return b} +function yc(a){var b;if(!xc(a)){throw Adb(new Dvb)}a.e=1;b=a.d;a.d=null;return b} +function Odb(a){var b;if(Kdb(a)){b=0-a;if(!isNaN(b)){return b}}return Edb(xD(a))} +function Wmb(a,b,c){for(;c<a.c.length;++c){if(Fvb(b,a.c[c])){return c}}return -1} +function Gmc(a){var b,c;c=RD(Vmb(a.j,0),12);b=RD(mQb(c,(Ywc(),Awc)),12);return b} +function Nu(a,b){var c;this.f=a;this.b=b;c=RD(Wjb(a.b,b),260);this.c=!c?null:c.b} +function Ckc(){lkc();this.b=new Tsb;this.f=new Tsb;this.g=new Tsb;this.e=new Tsb} +function RSd(a){ez(this);this.g=!a?null:lz(a,a.ie());this.f=a;gz(this);this.je()} +function pKd(a){var b;b=a.jj();b!=null&&a.d!=-1&&RD(b,94).xh(a);!!a.i&&a.i.oj()} +function asc(a){var b;for(b=a.p+1;b<a.c.a.c.length;++b){--RD(Vmb(a.c.a,b),10).p}} +function ukb(a){yFb(!!a.c);rFb(a.f.g,a.d);a.c.Qb();a.c=null;a.b=skb(a);a.d=a.f.g} +function o4d(a){if(!a.b){a.b=new s5d(a,o7,a);!a.a&&(a.a=new F4d(a,a))}return a.b} +function Pee(a,b){var c,d;c=RD(b,690);d=c.xi();!d&&c.Ai(d=new wfe(a,b));return d} +function Qee(a,b){var c,d;c=RD(b,692);d=c.$k();!d&&c.cl(d=new Jfe(a,b));return d} +function _jc(a,b){Wjc();var c,d;c=$jc(a);d=$jc(b);return !!c&&!!d&&!Aob(c.k,d.k)} +function WFb(a,b){return Fvb(b,Vmb(a.f,0))||Fvb(b,Vmb(a.f,1))||Fvb(b,Vmb(a.f,2))} +function Med(a,b){if(b<0){throw Adb(new veb(zGe+b))}Led(a,b+1);return Vmb(a.j,b)} +function Ob(a,b,c,d){if(!a){throw Adb(new agb(hc(b,cD(WC(jJ,1),rve,1,5,[c,d]))))}} +function P3d(a,b,c,d,e,f,g){NKd.call(this,b,d,e,f,g);J3d(this);this.c=a;this.b=c} +function UA(a,b,c){var d,e;d=10;for(e=0;e<c-1;e++){b<d&&(a.a+='0',a);d*=10}a.a+=b} +function Ahb(a){var b,c;c=a.length;b=$C(hE,zwe,28,c,15,1);nhb(a,0,c,b,0);return b} +function $eb(a){Zeb();var b,c;b=a+128;c=Yeb[b];!c&&(c=Yeb[b]=new Seb(a));return c} +function Cub(a){rFb(a.d.a.e.g,a.b);sFb(a.c!=a.d.a.d);a.a=a.c;a.c=a.c.a;return a.a} +function mDc(a){switch(a.g){case 0:return lve;case 1:return -1;default:return 0;}} +function ED(a){if(uD(a,(MD(),LD))<0){return -qD(xD(a))}return a.l+a.m*gxe+a.h*hxe} +function etd(a){(!this.q?(yob(),yob(),wob):this.q).Ac(!a.q?(yob(),yob(),wob):a.q)} +function Eud(a,b){Cod(RD(RD(a.f,27).of((umd(),Hld)),101))&&lQd(wCd(RD(a.f,27)),b)} +function Gvd(a,b){var c;c=BYd(a.d,b);return c>=0?Dvd(a,c,true,true):Qvd(a,b,true)} +function Vwd(a){var b;b=SD(Ywd(a,32));if(b==null){Wwd(a);b=SD(Ywd(a,32))}return b} +function Yvd(a){var b;if(!a.Oh()){b=AYd(a.Dh())-a.ji();a.$h().Mk(b)}return a.zh()} +function zQb(a,b){yQb=new kRb;wQb=b;xQb=a;RD(xQb.b,68);BQb(xQb,yQb,null);AQb(xQb)} +function AWb(){AWb=geb;yWb=new BWb('XY',0);xWb=new BWb('X',1);zWb=new BWb('Y',2)} +function vLb(){vLb=geb;uLb=new wLb('TOP',0);tLb=new wLb(Kye,1);sLb=new wLb(Qye,2)} +function Gvc(){Gvc=geb;Evc=new Hvc(LAe,0);Fvc=new Hvc('TOP',1);Dvc=new Hvc(Qye,2)} +function sEc(){sEc=geb;qEc=new tEc('INPUT_ORDER',0);rEc=new tEc('PORT_DEGREE',1)} +function MD(){MD=geb;ID=hD(dxe,dxe,524287);JD=hD(0,0,fxe);KD=fD(1);fD(2);LD=fD(0)} +function wWd(a){var b;if(a.d!=a.r){b=WVd(a);a.e=!!b&&b.lk()==aKe;a.d=b}return a.e} +function UHd(a,b,c){var d;d=a.g[b];MHd(a,b,a.Zi(b,c));a.Ri(b,c,d);a.Ni();return d} +function dHd(a,b){var c;c=a.dd(b);if(c>=0){a.gd(c);return true}else{return false}} +function xr(a,b){var c;Qb(a);Qb(b);c=false;while(b.Ob()){c=c|a.Fc(b.Pb())}return c} +function cub(a,b){var c;c=RD(Wjb(a.e,b),400);if(c){eub(a,c);return c.e}return null} +function iB(a){var b,c;b=a/60|0;c=a%60;if(c==0){return ''+b}return ''+b+':'+(''+c)} +function JB(d,a){var b=d.a[a];var c=(HC(),GC)[typeof b];return c?c(b):NC(typeof b)} +function EDb(a,b){var c,d;MCb(a);d=new zEb(b,a.a);c=new YDb(d);return new SDb(a,c)} +function mwb(a){var b;b=a.b.c.length==0?null:Vmb(a.b,0);b!=null&&owb(a,0);return b} +function ukc(a,b){var c,d,e;e=b.c.i;c=RD(Wjb(a.f,e),60);d=c.d.c-c.e.c;Bjd(b.a,d,0)} +function XLc(a,b){var c;++a.d;++a.c[b];c=b+1;while(c<a.a.length){++a.a[c];c+=c&-c}} +function Ute(a,b,c,d){Vse();Wse.call(this,26);this.c=a;this.a=b;this.d=c;this.b=d} +function KA(a,b){while(b[0]<a.length&&qhb(' \t\r\n',Fhb(ihb(a,b[0])))>=0){++b[0]}} +function eEd(a,b){Dyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function fEd(a,b){Eyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function gEd(a,b){Cyd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function hEd(a,b){Ayd(a,b==null||Rfb((uFb(b),b))||isNaN((uFb(b),b))?0:(uFb(b),b))} +function oWc(a,b,c){return cjd(new rjd(c.e.a+c.f.a/2,c.e.b+c.f.b/2),a)==(uFb(b),b)} +function qge(a,b){return ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a)} +function sge(a,b){return ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a)} +function XC(a){return a.__elementTypeCategory$==null?10:a.__elementTypeCategory$} +function Bhb(a,b){return b==(wvb(),wvb(),vvb)?a.toLocaleLowerCase():a.toLowerCase()} +function Mu(a){if(!a.e){throw Adb(new Dvb)}a.c=a.a=a.e;a.e=a.e.e;--a.d;return a.a.f} +function Lu(a){if(!a.c){throw Adb(new Dvb)}a.e=a.a=a.c;a.c=a.c.c;++a.d;return a.a.f} +function Lsb(a){var b;++a.a;for(b=a.c.a.length;a.a<b;++a.a){if(a.c.b[a.a]){return}}} +function _z(a){var b,c;if(a.a){c=null;do{b=a.a;a.a=null;c=dA(b,c)}while(a.a);a.a=c}} +function aA(a){var b,c;if(a.b){c=null;do{b=a.b;a.b=null;c=dA(b,c)}while(a.b);a.b=c}} +function eve(a,b){var c;c=0;while(a.e!=a.i.gc()){oFd(b,bMd(a),sgb(c));c!=lve&&++c}} +function Llc(a,b){var c;c=$y(a.e.c,b.e.c);if(c==0){return Qfb(a.e.d,b.e.d)}return c} +function hdc(a,b){var c,d;d=b.c;for(c=d+1;c<=b.f;c++){a.a[c]>a.a[d]&&(d=c)}return d} +function Krc(a){var b;b=RD(mQb(a,(Ywc(),Wvc)),313);if(b){return b.a==a}return false} +function Lrc(a){var b;b=RD(mQb(a,(Ywc(),Wvc)),313);if(b){return b.i==a}return false} +function xXb(){xXb=geb;wXb=ss((sXb(),cD(WC(UP,1),jwe,367,0,[nXb,oXb,pXb,qXb,rXb])))} +function Hnc(){Hnc=geb;Gnc=ss((Bnc(),cD(WC(TV,1),jwe,375,0,[xnc,znc,Anc,ync,wnc])))} +function Xtc(){Xtc=geb;Wtc=ss((Ptc(),cD(WC(bX,1),jwe,348,0,[Ltc,Ktc,Ntc,Otc,Mtc])))} +function RDc(){RDc=geb;QDc=ss((JDc(),cD(WC(uX,1),jwe,323,0,[IDc,FDc,GDc,EDc,HDc])))} +function hxc(){hxc=geb;gxc=ss((cxc(),cD(WC(mX,1),jwe,171,0,[bxc,Zwc,$wc,_wc,axc])))} +function m3c(){m3c=geb;l3c=ss((g3c(),cD(WC(x0,1),jwe,368,0,[e3c,b3c,f3c,c3c,d3c])))} +function xad(){xad=geb;wad=ss((sad(),cD(WC(x1,1),jwe,373,0,[oad,nad,qad,pad,rad])))} +function acd(){acd=geb;_bd=ss((Xbd(),cD(WC(P1,1),jwe,324,0,[Sbd,Tbd,Wbd,Ubd,Vbd])))} +function Kmd(){Kmd=geb;Jmd=ss((Cmd(),cD(WC(s3,1),jwe,88,0,[Amd,zmd,ymd,xmd,Bmd])))} +function bid(){bid=geb;aid=ss((Yhd(),cD(WC(d3,1),jwe,170,0,[Whd,Vhd,Thd,Xhd,Uhd])))} +function uod(){uod=geb;tod=ss((pod(),cD(WC(B3,1),jwe,256,0,[mod,ood,kod,lod,nod])))} +function zpd(){zpd=geb;ypd=ss((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])))} +function LHb(){LHb=geb;JHb=new MHb('BY_SIZE',0);KHb=new MHb('BY_SIZE_AND_SHAPE',1)} +function TUb(){TUb=geb;RUb=new UUb('EADES',0);SUb=new UUb('FRUCHTERMAN_REINGOLD',1)} +function $tc(){$tc=geb;Ytc=new _tc('READING_DIRECTION',0);Ztc=new _tc('ROTATION',1)} +function CZb(){CZb=geb;zZb=new ZZb;AZb=new b$b;xZb=new f$b;yZb=new j$b;BZb=new n$b} +function dGb(a){this.b=new bnb;this.a=new bnb;this.c=new bnb;this.d=new bnb;this.e=a} +function XZb(a){this.g=a;this.f=new bnb;this.a=$wnd.Math.min(this.g.c.c,this.g.d.c)} +function UKb(a,b,c){RJb.call(this);KKb(this);this.a=a;this.c=c;this.b=b.d;this.f=b.e} +function d6b(a,b,c){var d,e;for(e=new Anb(c);e.a<e.c.c.length;){d=ynb(e);c6b(a,b,d)}} +function sC(a,b,c){var d;if(b==null){throw Adb(new Ngb)}d=qC(a,b);tC(a,b,c);return d} +function ked(a,b){var c;c=RD(Wjb(a.a,b),137);if(!c){c=new qQb;Zjb(a.a,b,c)}return c} +function vYd(a,b){var c;c=(a.i==null&&rYd(a),a.i);return b>=0&&b<c.length?c[b]:null} +function Gqd(a,b){var c;c=b>0?b-1:b;return Kqd(Lqd(Mqd(Nqd(new Oqd,c),a.n),a.j),a.k)} +function nBd(a){var b,c;c=(b=new q4d,b);WGd((!a.q&&(a.q=new C5d(s7,a,11,10)),a.q),c)} +function ofb(a){return ((a.i&2)!=0?'interface ':(a.i&1)!=0?'':'class ')+(lfb(a),a.o)} +function dz(a){if(Ddb(a,lve)>0){return lve}if(Ddb(a,qwe)<0){return qwe}return Ydb(a)} +function Sv(a){if(a<3){dk(a,fwe);return a+1}if(a<hwe){return eE(a/0.75+1)}return lve} +function Rwb(a,b){uFb(b);Qwb(a);if(a.d.Ob()){b.Cd(a.d.Pb());return true}return false} +function ke(a,b){var c,d;c=RD(Xv(a.d,b),16);if(!c){return null}d=b;return a.e.pc(d,c)} +function Ufe(a,b,c,d){var e;a.j=-1;oLd(a,gge(a,b,c),(nke(),e=RD(b,69).vk(),e.xl(d)))} +function Z_c(a,b){R_c();return -hgb(RD(mQb(a,(h_c(),W$c)),17).a,RD(mQb(b,W$c),17).a)} +function xo(a,b){return !!Ho(a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15))))} +function dGd(){aGd();return cD(WC(T5,1),jwe,245,0,[_Fd,YFd,ZFd,XFd,$Fd,VFd,UFd,WFd])} +function nid(){kid();return cD(WC(e3,1),jwe,285,0,[jid,cid,gid,iid,did,eid,fid,hid])} +function hpc(){epc();return cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc])} +function Kcc(a){var b;b=Kfb(UD(mQb(a,(yCc(),FAc))));if(b<0){b=0;pQb(a,FAc,b)}return b} +function Odc(a,b){var c,d;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),72);pQb(c,(Ywc(),swc),b)}} +function Oic(a,b,c){var d;d=$wnd.Math.max(0,a.b/2-0.5);Iic(c,d,1);Rmb(b,new Xic(c,d))} +function lRc(a,b,c){var d;d=a.a.e[RD(b.a,10).p]-a.a.e[RD(c.a,10).p];return eE(Lgb(d))} +function PDb(a,b){var c;MCb(a);c=new cEb(a,a.a.zd(),a.a.yd()|4,b);return new SDb(a,c)} +function gvb(a){var b;yFb(!!a.c);b=a.c.a;Wub(a.d,a.c);a.b==a.c?(a.b=b):--a.a;a.c=null} +function iqc(a){a.a>=-0.01&&a.a<=Tye&&(a.a=0);a.b>=-0.01&&a.b<=Tye&&(a.b=0);return a} +function Hid(a){tid();var b,c;c=KEe;for(b=0;b<a.length;b++){a[b]>c&&(c=a[b])}return c} +function Zvd(a,b){var c;c=wYd(a.Dh(),b);if(!c){throw Adb(new agb(KHe+b+NHe))}return c} +function NGd(a,b){var c;c=a;while(vCd(c)){c=vCd(c);if(c==b){return true}}return false} +function ix(a,b){var c,d,e;d=b.a.ld();c=RD(b.a.md(),16).gc();for(e=0;e<c;e++){a.Cd(d)}} +function Umb(a,b){var c,d,e,f;uFb(b);for(d=a.c,e=0,f=d.length;e<f;++e){c=d[e];b.Cd(c)}} +function q0b(a,b,c,d,e,f){var g;g=s0b(d);Y0b(g,e);Z0b(g,f);Rc(a.a,d,new J0b(g,b,c.f))} +function P8c(a,b){Ixd(a,(X6c(),T6c),b.f);Ixd(a,Q6c,b.e);Ixd(a,S6c,b.d);Ixd(a,P6c,b.c)} +function grc(a,b){this.a=new Tsb;this.e=new Tsb;this.b=(lDc(),kDc);this.c=a;this.b=b} +function yd(a){this.d=a;this.c=a.c.vc().Kc();this.b=null;this.a=null;this.e=(zs(),ys)} +function Wub(a,b){var c;c=b.c;b.a.b=b.b;b.b.a=b.a;b.a=b.b=null;b.c=null;--a.b;return c} +function Esb(a,b){if(!!b&&a.b[b.g]==b){bD(a.b,b.g,null);--a.c;return true}return false} +function jxb(a,b){if(0>a||a>b){throw Adb(new xeb('fromIndex: 0, toIndex: '+a+Qxe+b))}} +function ZHd(a){if(a<0){throw Adb(new agb('Illegal Capacity: '+a))}this.g=this.aj(a)} +function _y(a,b){Zy();bz(pwe);return $wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)} +function xJc(a,b){var c,d,e,f;for(d=a.d,e=0,f=d.length;e<f;++e){c=d[e];pJc(a.g,c).a=b}} +function BIc(a,b,c){var d,e,f;e=b[c];for(d=0;d<e.length;d++){f=e[d];a.e[f.c.p][f.p]=d}} +function nqc(a){var b;for(b=0;b<a.c.length;b++){(tFb(b,a.c.length),RD(a.c[b],12)).p=b}} +function qqc(a){var b,c;b=a.a.d.j;c=a.c.d.j;while(b!=c){zsb(a.b,b);b=tpd(b)}zsb(a.b,b)} +function gjd(a){var b;b=$wnd.Math.sqrt(a.a*a.a+a.b*a.b);if(b>0){a.a/=b;a.b/=b}return a} +function BXd(a){var b;if(a.w){return a.w}else{b=CXd(a);!!b&&!b.Vh()&&(a.w=b);return b}} +function l2d(a,b){var c,d;d=a.a;c=m2d(a,b,null);d!=b&&!a.e&&(c=o2d(a,b,c));!!c&&c.oj()} +function rQc(a,b,c){var d,e;d=b;do{e=Kfb(a.p[d.p])+c;a.p[d.p]=e;d=a.a[d.p]}while(d!=b)} +function heb(a,b,c){var d=function(){return a.apply(d,arguments)};b.apply(d,c);return d} +function Gae(a){var b;if(a==null){return null}else{b=RD(a,195);return sAd(b,b.length)}} +function QHd(a,b){if(a.g==null||b>=a.i)throw Adb(new yNd(b,a.i));return a.Wi(b,a.g[b])} +function Dob(a,b){yob();var c,d;d=new bnb;for(c=0;c<a;++c){ZEb(d.c,b)}return new irb(d)} +function NDb(a){MCb(a);zFb(true,'n may not be negative');return new SDb(a,new DEb(a.a))} +function KKb(a){a.b=(EKb(),BKb);a.f=(vLb(),tLb);a.d=(dk(2,iwe),new cnb(2));a.e=new pjd} +function zrd(a){this.b=(Qb(a),new dnb(a));this.a=new bnb;this.d=new bnb;this.e=new pjd} +function ZJb(){ZJb=geb;WJb=new $Jb('BEGIN',0);XJb=new $Jb(Kye,1);YJb=new $Jb('END',2)} +function Omd(){Omd=geb;Lmd=new Pmd(Kye,0);Mmd=new Pmd('HEAD',1);Nmd=new Pmd('TAIL',2)} +function R_c(){R_c=geb;Q_c=mfd(mfd(mfd(rfd(new ufd,(YVc(),VVc)),(WYc(),VYc)),OYc),SYc)} +function B0c(){B0c=geb;A0c=mfd(mfd(mfd(rfd(new ufd,(YVc(),XVc)),(WYc(),QYc)),LYc),PYc)} +function gtc(){gtc=geb;ftc=ss((btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])))} +function zuc(){zuc=geb;yuc=ss((tuc(),cD(WC(eX,1),jwe,283,0,[ouc,nuc,quc,puc,suc,ruc])))} +function Tuc(){Tuc=geb;Suc=ss((Ouc(),cD(WC(gX,1),jwe,281,0,[Luc,Kuc,Nuc,Juc,Muc,Iuc])))} +function dvc(){dvc=geb;cvc=ss(($uc(),cD(WC(hX,1),jwe,282,0,[Yuc,Vuc,Zuc,Xuc,Wuc,Uuc])))} +function w3b(){w3b=geb;v3b=ss((r3b(),cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])))} +function Wjd(){Wjd=geb;Vjd=ss((Rjd(),cD(WC(n3,1),jwe,255,0,[Ljd,Ojd,Pjd,Qjd,Mjd,Njd])))} +function zkd(){zkd=geb;ykd=ss((ukd(),cD(WC(q3,1),jwe,297,0,[tkd,skd,rkd,pkd,okd,qkd])))} +function nnd(){nnd=geb;mnd=ss((ind(),cD(WC(v3,1),jwe,321,0,[gnd,end,hnd,cnd,fnd,dnd])))} +function Iod(){Iod=geb;Hod=ss((Bod(),cD(WC(C3,1),jwe,101,0,[Aod,zod,yod,vod,xod,wod])))} +function Wod(){Wod=geb;Vod=ss((Pod(),cD(WC(D3,1),jwe,279,0,[Nod,Lod,Mod,Kod,Jod,Ood])))} +function kKb(){kKb=geb;jKb=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])).length;iKb=jKb} +function hod(){dod();return cD(WC(A3,1),jwe,95,0,[Xnd,Wnd,Znd,cod,bod,aod,$nd,_nd,Ynd])} +function eoc(a,b){Mnc();return hgb(a.b.c.length-a.e.c.length,b.b.c.length-b.e.c.length)} +function Ao(a,b){return $v(Go(a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)))))} +function rGb(a,b){return Zy(),bz(pwe),$wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)} +function Wxd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,1,c,a.b))} +function Hzd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,3,c,a.b))} +function Ayd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,3,c,a.f))} +function Cyd(a,b){var c;c=a.g;a.g=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,4,c,a.g))} +function Dyd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,5,c,a.i))} +function Eyd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,6,c,a.j))} +function Ozd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,1,c,a.j))} +function Izd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,4,c,a.c))} +function Pzd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,2,c,a.k))} +function Vxd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new L3d(a,0,c,a.a))} +function $Vd(a,b){var c;c=a.s;a.s=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,4,c,a.s))} +function bWd(a,b){var c;c=a.t;a.t=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,5,c,a.t))} +function Q1d(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new M3d(a,2,c,a.d))} +function zXd(a,b){var c;c=a.F;a.F=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,5,c,b))} +function IMd(a,b){var c;c=RD(Wjb((PRd(),ORd),a),57);return c?c.gk(b):$C(jJ,rve,1,b,5,1)} +function BXb(a,b){var c;c=ojd(ajd(RD(Wjb(a.g,b),8)),Pid(RD(Wjb(a.f,b),469).b));return c} +function FGd(a,b){var c,d,e;c=(d=(bvd(),e=new hCd,e),!!b&&eCd(d,b),d);fCd(c,a);return c} +function vDd(a,b){var c,d;c=b in a.a;if(c){d=qC(a,b).re();if(d){return d.a}}return null} +function jZd(a,b,c){gHd(a,c);if(!a.kl()&&c!=null&&!a.fk(c)){throw Adb(new yeb)}return c} +function Mqd(a,b){a.n=b;if(a.n){a.f=new bnb;a.e=new bnb}else{a.f=null;a.e=null}return a} +function Ffb(a,b){var c;if(!a){return}b.n=a;var d=zfb(b);if(!d){eeb[a]=[b];return}d.Rm=b} +function SD(a){var b;CFb(a==null||Array.isArray(a)&&(b=XC(a),!(b>=14&&b<=16)));return a} +function ws(a,b){var c;uFb(b);c=a[':'+b];mFb(!!c,'Enum constant undefined: '+b);return c} +function tfb(a,b,c,d,e,f){var g;g=rfb(a,b);Ffb(c,g);g.i=e?8:0;g.f=d;g.e=e;g.g=f;return g} +function R3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=1;this.c=a;this.a=c} +function T3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=2;this.c=a;this.a=c} +function _3d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=6;this.c=a;this.a=c} +function e4d(a,b,c,d,e){this.d=b;this.k=d;this.f=e;this.o=-1;this.p=7;this.c=a;this.a=c} +function X3d(a,b,c,d,e){this.d=b;this.j=d;this.e=e;this.o=-1;this.p=4;this.c=a;this.a=c} +function iGb(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];eGb(a.a,c)}return a} +function Al(a){var b,c,d,e;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Qb(b)}return new Gl(a)} +function ZTb(a){var b;b=ojd(ajd(a.d.d),a.c.d);wid(b,a.c.e.a,a.c.e.b);return $id(b,a.c.d)} +function $Tb(a){var b;b=ojd(ajd(a.c.d),a.d.d);wid(b,a.d.e.a,a.d.e.b);return $id(b,a.d.d)} +function iA(a){var b=/function(?:\s+([\w$]+))?\s*\(/;var c=b.exec(a);return c&&c[1]||wwe} +function Hnb(a,b,c){var d,e;e=a.length;d=$wnd.Math.min(c,e);VEb(a,0,b,0,d,true);return b} +function ISb(a,b,c){var d,e;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),74);Ysb(a,RD(c.Kb(d),27))}} +function E1b(a,b){Cod(RD(mQb(RD(a.e,10),(yCc(),BBc)),101))&&(yob(),_mb(RD(a.e,10).j,b))} +function lIb(){iIb();return cD(WC(xN,1),jwe,257,0,[hIb,cIb,dIb,bIb,fIb,gIb,eIb,aIb,_Hb])} +function fDc(){_Cc();return cD(WC(rX,1),jwe,265,0,[ZCc,WCc,XCc,TCc,VCc,$Cc,YCc,SCc,UCc])} +function RKc(){RKc=geb;OKc=new SKc('BARYCENTER',0);PKc=new SKc(jBe,1);QKc=new SKc(kBe,2)} +function uFc(){uFc=geb;tFc=new vFc('NO',0);rFc=new vFc(CBe,1);sFc=new vFc('LOOK_BACK',2)} +function Etc(){Etc=geb;Btc=new Ftc('ARD',0);Dtc=new Ftc('MSD',1);Ctc=new Ftc('MANUAL',2)} +function BEc(){BEc=geb;AEc=new CEc(Sye,0);yEc=new CEc('INPUT',1);zEc=new CEc('OUTPUT',2)} +function ygd(){if(!qgd){qgd=new xgd;wgd(qgd,cD(WC(B2,1),rve,134,0,[new vmd]))}return qgd} +function bz(a){if(!(a>=0)){throw Adb(new agb('tolerance ('+a+') must be >= 0'))}return a} +function hOd(a,b){var c;if(ZD(b,44)){return a.c.Mc(b)}else{c=QNd(a,b);jOd(a,b);return c}} +function yBd(a,b,c){YVd(a,b);PAd(a,c);$Vd(a,0);bWd(a,1);aWd(a,true);_Vd(a,true);return a} +function ZGd(a,b){var c;c=a.gc();if(b<0||b>c)throw Adb(new aMd(b,c));return new CMd(a,b)} +function Cad(a,b){a.b=$wnd.Math.max(a.b,b.d);a.e+=b.r+(a.a.c.length==0?0:a.c);Rmb(a.a,b)} +function Jmb(a){yFb(a.c>=0);if(rmb(a.d,a.c)<0){a.a=a.a-1&a.d.a.length-1;a.b=a.d.c}a.c=-1} +function Nc(a){var b,c;for(c=a.c.Cc().Kc();c.Ob();){b=RD(c.Pb(),16);b.$b()}a.c.$b();a.d=0} +function Zi(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Rnb(b,b.length,null)}} +function zjd(a,b){var c,d,e,f;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Pub(a,c,a.c.b,a.c)}} +function St(a,b){var c,d;for(c=0,d=a.gc();c<d;++c){if(Fvb(b,a.Xb(c))){return c}}return -1} +function ogb(a){var b,c;if(a==0){return 32}else{c=0;for(b=1;(b&a)==0;b<<=1){++c}return c}} +function dk(a,b){if(a<0){throw Adb(new agb(b+' cannot be negative but was: '+a))}return a} +function deb(a,b){typeof window===gve&&typeof window['$gwt']===gve&&(window['$gwt'][a]=b)} +function lp(a,b){return Vv(Ho(a.a,b,Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)))))} +function FBb(a,b,c){return sBb(a,new CCb(b),new ECb,new GCb(c),cD(WC(QL,1),jwe,108,0,[]))} +function gqd(){dqd();return cD(WC(I3,1),jwe,264,0,[Ypd,$pd,Xpd,_pd,aqd,cqd,bqd,Zpd,Wpd])} +function wgb(){wgb=geb;vgb=cD(WC(kE,1),Pwe,28,15,[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15])} +function stc(){stc=geb;qtc=new utc('LAYER_SWEEP',0);ptc=new utc(BBe,1);rtc=new utc(LAe,2)} +function nGc(){nGc=geb;mGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function yGc(){yGc=geb;xGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function SGc(){SGc=geb;RGc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function lHc(){lHc=geb;kHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function tHc(){tHc=geb;sHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function RHc(){RHc=geb;QHc=pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)} +function YJc(){YJc=geb;XJc=nfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb,Pbc)} +function EJb(a){var b,c;for(c=new Anb(yud(a));c.a<c.c.c.length;){b=RD(ynb(c),695);b._f()}} +function aeb(){beb();var a=_db;for(var b=0;b<arguments.length;b++){a.push(arguments[b])}} +function EXb(a){zXb();this.g=new Tsb;this.f=new Tsb;this.b=new Tsb;this.c=new Tp;this.i=a} +function d1b(){this.f=new pjd;this.d=new C3b;this.c=new pjd;this.a=new bnb;this.b=new bnb} +function Cje(a,b,c,d){this.ak();this.a=b;this.b=a;this.c=null;this.c=new Dje(this,b,c,d)} +function NKd(a,b,c,d,e){this.d=a;this.n=b;this.g=c;this.o=d;this.p=-1;e||(this.o=-2-d-1)} +function HWd(){dWd.call(this);this.n=-1;this.g=null;this.i=null;this.j=null;this.Bb|=gwe} +function DEb(a){xxb.call(this,a.Ad(64)?Kgb(0,Vdb(a.zd(),1)):Sve,a.yd());this.b=1;this.a=a} +function X_c(a,b){R_c();return RD(mQb(b,(h_c(),W$c)),17).a<a.gc()&&RD(mQb(b,W$c),17).a>=0} +function Iqd(a,b){if(a.r>0&&a.c<a.r){a.c+=b;!!a.i&&a.i.d>0&&a.g!=0&&Iqd(a.i,b/a.r*a.i.d)}} +function $Cd(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.c))} +function P1d(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,c,a.c))} +function jyd(a,b){var c;c=a.k;a.k=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.k))} +function JXd(a,b){var c;c=a.D;a.D=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.D))} +function Kzd(a,b){var c;c=a.f;a.f=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,8,c,a.f))} +function Lzd(a,b){var c;c=a.i;a.i=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,7,c,a.i))} +function fCd(a,b){var c;c=a.a;a.a=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,8,c,a.a))} +function ZCd(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,c,a.b))} +function s6d(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,c,a.b))} +function t6d(a,b){var c;c=a.c;a.c=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.c))} +function nVd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.d))} +function Cte(a,b,c){var d;a.b=b;a.a=c;d=(a.a&512)==512?new Gre:new Tqe;a.c=Nqe(d,a.b,a.a)} +function Gge(a,b){return qke(a.e,b)?(nke(),wWd(b)?new ole(b,a):new Eke(b,a)):new Ble(b,a)} +function iDb(a){var b,c;if(0>a){return new rDb}b=a+1;c=new kDb(b,a);return new oDb(null,c)} +function Gob(a,b){yob();var c;c=new Usb(1);bE(a)?$jb(c,a,b):rtb(c.f,a,b);return new uqb(c)} +function pQc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d>0){return RD(Vmb(c.a,d-1),10)}return null} +function TOb(a,b){var c,d;c=a.o+a.p;d=b.o+b.p;if(c<d){return -1}if(c==d){return 0}return 1} +function Z5b(a){var b;b=mQb(a,(Ywc(),Awc));if(ZD(b,167)){return Y5b(RD(b,167))}return null} +function Wp(a){var b;a=$wnd.Math.max(a,2);b=mgb(a);if(a>b){b<<=1;return b>0?b:hwe}return b} +function xc(a){Ub(a.e!=3);switch(a.e){case 2:return false;case 0:return true;}return zc(a)} +function djd(a,b){var c;if(ZD(b,8)){c=RD(b,8);return a.a==c.a&&a.b==c.b}else{return false}} +function Ydd(a,b){var c;c=new kRb;RD(b.b,68);RD(b.b,68);RD(b.b,68);Umb(b.a,new ced(a,c,b))} +function gOd(a,b){var c,d;for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);fOd(a,c.ld(),c.md())}} +function Jzd(a,b){var c;c=a.d;a.d=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,11,c,a.d))} +function zWd(a,b){var c;c=a.j;a.j=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,13,c,a.j))} +function b6d(a,b){var c;c=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,21,c,a.b))} +function YAb(a,b){((gBb(),dBb)?null:b.c).length==0&&iBb(b,new rBb);$jb(a.a,dBb?null:b.c,b)} +function b9b(a,b){b.Ug('Hierarchical port constraint processing',1);c9b(a);e9b(a);b.Vg()} +function joc(){joc=geb;ioc=new koc('START',0);hoc=new koc('MIDDLE',1);goc=new koc('END',2)} +function x2c(){x2c=geb;v2c=new z2c('P1_NODE_PLACEMENT',0);w2c=new z2c('P2_EDGE_ROUTING',1)} +function JVb(){JVb=geb;HVb=new jGd(rAe);IVb=new jGd(sAe);GVb=new jGd(tAe);FVb=new jGd(uAe)} +function tkb(a){var b;rFb(a.f.g,a.d);sFb(a.b);a.c=a.a;b=RD(a.a.Pb(),44);a.b=skb(a);return b} +function P2d(a){var b;if(a.b==null){return j3d(),j3d(),i3d}b=a.ul()?a.tl():a.sl();return b} +function nwb(a,b){var c;c=b==null?-1:Wmb(a.b,b,0);if(c<0){return false}owb(a,c);return true} +function zsb(a,b){var c;uFb(b);c=b.g;if(!a.b[c]){bD(a.b,c,b);++a.c;return true}return false} +function azb(a,b){var c,d;c=1-b;d=a.a[c];a.a[c]=d.a[b];d.a[b]=a;a.b=true;d.b=false;return d} +function xRb(a,b){var c,d;for(d=b.Kc();d.Ob();){c=RD(d.Pb(),272);a.b=true;Ysb(a.e,c);c.b=a}} +function kic(a,b){var c,d;c=RD(mQb(a,(yCc(),IBc)),8);d=RD(mQb(b,IBc),8);return Qfb(c.b,d.b)} +function SPb(a,b,c){var d,e,f;f=b>>5;e=b&31;d=Cdb(Udb(a.n[c][f],Ydb(Sdb(e,1))),3);return d} +function lmb(a,b,c){var d,e,f;f=a.a.length-1;for(e=a.b,d=0;d<c;e=e+1&f,++d){bD(b,d,a.a[e])}} +function owb(a,b){var c;c=Xmb(a.b,a.b.c.length-1);if(b<a.b.c.length){$mb(a.b,b,c);kwb(a,b)}} +function NQc(a,b){var c;c=RD(Wjb(a.c,b),466);if(!c){c=new UQc;c.c=b;Zjb(a.c,c.c,c)}return c} +function PUc(a,b){var c,d;d=new bnb;c=b;do{ZEb(d.c,c);c=RD(Wjb(a.k,c),18)}while(c);return d} +function rMc(a,b,c){var d;d=new bnb;sMc(a,b,d,c,true,true);a.b=new _Lc(d.c.length);return d} +function tvb(a,b){var c,d;c=a.Pc();Wnb(c,0,c.length,b);for(d=0;d<c.length;d++){a.hd(d,c[d])}} +function Bad(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),27);Dyd(b,0);Eyd(b,0)}} +function Bu(a){this.e=a;this.d=new atb(Sv(Ec(this.e).gc()));this.c=this.e.a;this.b=this.e.c} +function _Lc(a){this.b=a;this.a=$C(kE,Pwe,28,a+1,15,1);this.c=$C(kE,Pwe,28,a,15,1);this.d=0} +function frc(a,b,c){grc.call(this,b,c);this.d=$C(jR,WAe,10,a.a.c.length,0,1);anb(a.a,this.d)} +function vLc(a,b,c){UIc.call(this,a,b,c);this.a=new Tsb;this.b=new Tsb;this.d=new yLc(this)} +function Pic(a){fHb.call(this);this.b=Kfb(UD(mQb(a,(yCc(),TBc))));this.a=RD(mQb(a,yAc),223)} +function _q(a,b){var c;if(ZD(b,16)){c=RD(b,16);return a.Gc(c)}return xr(a,RD(Qb(b),20).Kc())} +function KCc(a,b){FDb(CDb(new SDb(null,new Swb(new Xkb(a.b),1)),new esd(a,b)),new isd(a,b))} +function f6b(a,b){b.Ug(iBe,1);FDb(EDb(new SDb(null,new Swb(a.b,16)),new j6b),new l6b);b.Vg()} +function tb(a){return bE(a)?ohb(a):_D(a)?Nfb(a):$D(a)?Jeb(a):YD(a)?a.Hb():aD(a)?kFb(a):Iz(a)} +function xKc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=RD(c.Pb(),219);DJc(b,new NLc(b.f))}} +function yKc(a){var b,c;for(c=a.c.a.ec().Kc();c.Ob();){b=RD(c.Pb(),219);EJc(b,new OLc(b.e))}} +function PAd(a,b){var c;c=a.zb;a.zb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,c,a.zb))} +function CBd(a,b){var c;c=a.xb;a.xb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,c,a.xb))} +function DBd(a,b){var c;c=a.yb;a.yb=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,2,c,a.yb))} +function iBd(a,b){var c,d;c=(d=new mXd,d);c.n=b;WGd((!a.s&&(a.s=new C5d(y7,a,21,17)),a.s),c)} +function oBd(a,b){var c,d;d=(c=new d6d,c);d.n=b;WGd((!a.s&&(a.s=new C5d(y7,a,21,17)),a.s),d)} +function ye(a,b){var c,d,e;uFb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();c=c|a.Fc(d)}return c} +function Sx(a){var b,c,d;b=0;for(d=a.Kc();d.Ob();){c=d.Pb();b+=c!=null?tb(c):0;b=~~b}return b} +function oC(e,a){var b=e.a;var c=0;for(var d in b){b.hasOwnProperty(d)&&(a[c++]=d)}return a} +function gB(a){var b;if(a==0){return 'UTC'}if(a<0){a=-a;b='UTC+'}else{b='UTC-'}return b+iB(a)} +function xib(a){if(a.a<54){return a.f<0?-1:a.f>0?1:0}return (!a.c&&(a.c=ojb(Hdb(a.f))),a.c).e} +function GXd(a,b){if(b){if(a.B==null){a.B=a.D;a.D=null}}else if(a.B!=null){a.D=a.B;a.B=null}} +function rZb(a,b){nZb();return a==jZb&&b==mZb||a==mZb&&b==jZb||a==lZb&&b==kZb||a==kZb&&b==lZb} +function sZb(a,b){nZb();return a==jZb&&b==kZb||a==jZb&&b==lZb||a==mZb&&b==lZb||a==mZb&&b==kZb} +function zMb(a,b){return Zy(),bz(Tye),$wnd.Math.abs(0-b)<=Tye||0==b||isNaN(0)&&isNaN(b)?0:a/b} +function qsc(a,b){return Kfb(UD(Lvb(MDb(GDb(new SDb(null,new Swb(a.c.b,16)),new Isc(a)),b))))} +function tsc(a,b){return Kfb(UD(Lvb(MDb(GDb(new SDb(null,new Swb(a.c.b,16)),new Gsc(a)),b))))} +function rvc(){ovc();return cD(WC(iX,1),jwe,259,0,[fvc,hvc,ivc,jvc,kvc,lvc,nvc,evc,gvc,mvc])} +function dEc(){aEc();return cD(WC(vX,1),jwe,243,0,[$Dc,VDc,YDc,WDc,XDc,SDc,ZDc,_Dc,TDc,UDc])} +function z3c(a,b){var c;b.Ug('General Compactor',1);c=h4c(RD(Gxd(a,($4c(),I4c)),393));c.Cg(a)} +function T5c(a,b){var c,d;c=RD(Gxd(a,($4c(),P4c)),17);d=RD(Gxd(b,P4c),17);return hgb(c.a,d.a)} +function Bjd(a,b,c){var d,e;for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),8);d.a+=b;d.b+=c}return a} +function Go(a,b,c){var d;for(d=a.b[c&a.f];d;d=d.b){if(c==d.a&&Hb(b,d.g)){return d}}return null} +function Ho(a,b,c){var d;for(d=a.c[c&a.f];d;d=d.d){if(c==d.f&&Hb(b,d.i)){return d}}return null} +function sjb(a,b,c){var d,e,f;d=0;for(e=0;e<c;e++){f=b[e];a[e]=f<<1|d;d=f>>>31}d!=0&&(a[c]=d)} +function yzb(a,b,c,d,e,f){var g;this.c=a;g=new bnb;Syb(a,g,b,a.b,c,d,e,f);this.a=new Jkb(g,0)} +function _5c(){this.c=new T2c(0);this.b=new T2c(FEe);this.d=new T2c(EEe);this.a=new T2c(Gze)} +function kMb(a,b,c,d,e,f,g){qs.call(this,a,b);this.d=c;this.e=d;this.c=e;this.b=f;this.a=dv(g)} +function tBd(a,b,c,d,e,f,g,h,i,j,k,l,m){ABd(a,b,c,d,e,f,g,h,i,j,k,l,m);kXd(a,false);return a} +function H0b(a){if(a.b.c.i.k==(r3b(),m3b)){return RD(mQb(a.b.c.i,(Ywc(),Awc)),12)}return a.b.c} +function I0b(a){if(a.b.d.i.k==(r3b(),m3b)){return RD(mQb(a.b.d.i,(Ywc(),Awc)),12)}return a.b.d} +function nDb(a){var b;b=mDb(a);if(Gdb(b.a,0)){return bwb(),bwb(),awb}return bwb(),new ewb(b.b)} +function SCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(b.b)} +function TCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(b.c)} +function o8b(a){switch(a.g){case 2:return qpd(),ppd;case 4:return qpd(),Xod;default:return a;}} +function p8b(a){switch(a.g){case 1:return qpd(),npd;case 3:return qpd(),Yod;default:return a;}} +function C9c(a){switch(a.g){case 0:return new s9c;case 1:return new x9c;default:return null;}} +function Zcc(){Zcc=geb;Ycc=new kGd('edgelabelcenterednessanalysis.includelabel',(Geb(),Eeb))} +function jKc(){jKc=geb;iKc=mfd(qfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb),Pbc)} +function DLc(){DLc=geb;CLc=mfd(qfd(pfd(pfd(new ufd,(sXb(),pXb),(hcc(),Qbc)),qXb,Gbc),rXb),Pbc)} +function lYd(){lYd=geb;iYd=new i1d;kYd=cD(WC(y7,1),lKe,179,0,[]);jYd=cD(WC(s7,1),mKe,62,0,[])} +function P8b(){P8b=geb;O8b=new Q8b('TO_INTERNAL_LTR',0);N8b=new Q8b('TO_INPUT_DIRECTION',1)} +function J3b(){J3b=geb;G3b=new r4b;E3b=new w4b;F3b=new A4b;D3b=new E4b;H3b=new I4b;I3b=new M4b} +function Cac(a,b){b.Ug(iBe,1);LJb(KJb(new PJb((i1b(),new t1b(a,false,false,new _1b)))));b.Vg()} +function M_c(a,b,c){c.Ug('DFS Treeifying phase',1);L_c(a,b);J_c(a,b);a.a=null;a.b=null;c.Vg()} +function Leb(a,b){Geb();return bE(a)?jhb(a,WD(b)):_D(a)?Jfb(a,UD(b)):$D(a)?Ieb(a,TD(b)):a.Fd(b)} +function Ld(a,b){var c,d;uFb(b);for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);a.zc(c.ld(),c.md())}} +function ege(a,b,c){var d;for(d=c.Kc();d.Ob();){if(!cge(a,b,d.Pb())){return false}}return true} +function S6d(a,b,c,d,e){var f;if(c){f=BYd(b.Dh(),a.c);e=c.Rh(b,-1-(f==-1?d:f),null,e)}return e} +function T6d(a,b,c,d,e){var f;if(c){f=BYd(b.Dh(),a.c);e=c.Th(b,-1-(f==-1?d:f),null,e)}return e} +function Uib(a){var b;if(a.b==-2){if(a.e==0){b=-1}else{for(b=0;a.a[b]==0;b++);}a.b=b}return a.b} +function fjb(a){uFb(a);if(a.length==0){throw Adb(new Vgb('Zero length BigInteger'))}mjb(this,a)} +function $Hd(a){this.i=a.gc();if(this.i>0){this.g=this.aj(this.i+(this.i/8|0)+1);a.Qc(this.g)}} +function dmc(a,b,c){this.g=a;this.d=b;this.e=c;this.a=new bnb;bmc(this);yob();_mb(this.a,null)} +function aad(a,b){b.q=a;a.d=$wnd.Math.max(a.d,b.r);a.b+=b.d+(a.a.c.length==0?0:a.c);Rmb(a.a,b)} +function xid(a,b){var c,d,e,f;e=a.c;c=a.c+a.b;f=a.d;d=a.d+a.a;return b.a>e&&b.a<c&&b.b>f&&b.b<d} +function Cjd(a,b){var c,d;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.a+=b.a;c.b+=b.b}return a} +function $cc(a){var b,c,d;d=0;for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);b.p=d;++d}} +function Tnc(a){var b,c,d;return a.j==(qpd(),Yod)&&(b=Vnc(a),c=Csb(b,Xod),d=Csb(b,ppd),d||d&&c)} +function rsd(a,b){var c;c=wsd(a);return qsd(new rjd(c.c,c.d),new rjd(c.b,c.a),a.Mf(),b,a.ag())} +function wEd(a,b){var c;c=RD(b,190);qDd(c,'x',a.i);qDd(c,'y',a.j);qDd(c,fIe,a.g);qDd(c,eIe,a.f)} +function CVd(a,b){var c;if(ZD(b,85)){RD(a.c,79).Gk();c=RD(b,85);gOd(a,c)}else{RD(a.c,79).Wb(b)}} +function Bvb(a,b){var c,d;uFb(b);for(d=a.vc().Kc();d.Ob();){c=RD(d.Pb(),44);b.Yd(c.ld(),c.md())}} +function zr(a,b){var c;Qb(b);while(a.Ob()){c=a.Pb();if(!oSc(RD(c,10))){return false}}return true} +function _Ab(){var a;if(!XAb){XAb=new $Ab;a=new oBb('');mBb(a,(SAb(),RAb));YAb(XAb,a)}return XAb} +function PBb(a,b){return sBb(new lCb(a),new nCb(b),new pCb(b),new rCb,cD(WC(QL,1),jwe,108,0,[]))} +function t5c(){t5c=geb;r5c=new v5c(LAe,0);s5c=new v5c('POLAR_COORDINATE',1);q5c=new v5c('ID',2)} +function KEc(){KEc=geb;HEc=new LEc('EQUALLY',0);IEc=new LEc(_ye,1);JEc=new LEc('NORTH_SOUTH',2)} +function OQb(){OQb=geb;MQb=new kGd('debugSVG',(Geb(),false));NQb=new kGd('overlapsExisted',true)} +function pid(){pid=geb;oid=ss((kid(),cD(WC(e3,1),jwe,285,0,[jid,cid,gid,iid,did,eid,fid,hid])))} +function fGd(){fGd=geb;eGd=ss((aGd(),cD(WC(T5,1),jwe,245,0,[_Fd,YFd,ZFd,XFd,$Fd,VFd,UFd,WFd])))} +function jpc(){jpc=geb;ipc=ss((epc(),cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc])))} +function $Yc(){WYc();return cD(WC(u_,1),jwe,262,0,[VYc,OYc,SYc,TYc,RYc,NYc,UYc,LYc,QYc,PYc,MYc])} +function $i(a,b,c){var d,e;e=RD(Fn(a.d,b),17);d=RD(Fn(a.b,c),17);return !e||!d?null:Ui(a,e.a,d.a)} +function cgd(a,b){var c;c=sgd(ygd(),a);if(c){Ixd(b,(umd(),Tld),c);return true}else{return false}} +function TMb(a){RMb();if(a.A.Hc((Qpd(),Mpd))){if(!a.B.Hc((dqd(),$pd))){return SMb(a)}}return null} +function tUb(){this.a=RD(iGd((yVb(),aVb)),17).a;this.c=Kfb(UD(iGd(rVb)));this.b=Kfb(UD(iGd(nVb)))} +function vkb(a){this.f=a;this.e=new Qtb(this.f.i);this.a=this.e;this.b=skb(this);this.d=this.f.g} +function Uge(a,b){Kfe.call(this,Ibb,a,b);this.b=this;this.a=pke(a.Dh(),vYd(this.e.Dh(),this.c))} +function bdc(a,b){var c,d;for(d=new Anb(b.b);d.a<d.c.c.length;){c=RD(ynb(d),30);a.a[c.p]=h2b(c)}} +function ofd(a,b){var c;for(c=0;c<b.j.c.length;c++){RD(Med(a,c),21).Gc(RD(Med(b,c),16))}return a} +function peb(a,b,c,d){var e;e=a.a.length;c>e?(c=e):BFb(b,c+1);a.a=zhb(a.a,0,b)+(''+d)+yhb(a.a,c)} +function ktb(a,b){a.a=Bdb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d=Bdb(a.d,b)} +function wdc(a,b){return b<a.b.gc()?RD(a.b.Xb(b),10):b==a.b.gc()?a.a:RD(Vmb(a.e,b-a.b.gc()-1),10)} +function rXc(a,b,c){return Qfb(cjd(jWc(a),new rjd(b.e.a,b.e.b)),cjd(jWc(a),new rjd(c.e.a,c.e.b)))} +function WJc(a,b,c){return a==(RKc(),QKc)?new PJc:Kwb(b,1)!=0?new ILc(c.length):new pLc(c.length)} +function qvd(a,b){var c,d,e;c=a.th();if(c!=null&&a.wh()){for(d=0,e=c.length;d<e;++d){c[d].dj(b)}}} +function QBb(a,b){var c,d,e;c=a.c.Xe();for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Yd(c,d)}return a.b.Kb(c)} +function n2b(a,b){var c,d;c=a;d=Y2b(c).e;while(d){c=d;if(c==b){return true}d=Y2b(c).e}return false} +function Edb(a){var b;b=a.h;if(b==0){return a.l+a.m*gxe}if(b==exe){return a.l+a.m*gxe-hxe}return a} +function LHc(a,b,c){var d,e;d=a.a.f[b.p];e=a.a.f[c.p];if(d<e){return -1}if(d==e){return 0}return 1} +function Wmc(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),72);Rmb(a.d,c);$mc(a,c)}} +function E6b(a,b){var c;b.Ug('Edge and layer constraint edge reversal',1);c=D6b(a);C6b(c);b.Vg()} +function m6c(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),27);Byd(c,c.i+b.b,c.j+b.d)}} +function TNd(a){var b;if(a.d==null){++a.e;a.f=0;SNd(null)}else{++a.e;b=a.d;a.d=null;a.f=0;SNd(b)}} +function Ys(a){var b;if(a.a==a.b.a){throw Adb(new Dvb)}b=a.a;a.c=b;a.a=RD(Hvb(a.a.e),227);return b} +function Ywd(a,b){var c;if((a.Db&b)!=0){c=Xwd(a,b);return c==-1?a.Eb:SD(a.Eb)[c]}else{return null}} +function jBd(a,b){var c,d;c=(d=new HYd,d);c.G=b;!a.rb&&(a.rb=new J5d(a,i7,a));WGd(a.rb,c);return c} +function kBd(a,b){var c,d;c=(d=new k1d,d);c.G=b;!a.rb&&(a.rb=new J5d(a,i7,a));WGd(a.rb,c);return c} +function wBd(a,b,c,d){ZD(a.Cb,184)&&(RD(a.Cb,184).tb=null);PAd(a,c);!!b&&HXd(a,b);d&&a.gl(true)} +function nJc(a,b){if(a.c){oJc(a,b,true);FDb(new SDb(null,new Swb(b,16)),new BJc(a))}oJc(a,b,false)} +function KRc(a){FRc();var b;if(!Urb(ERc,a)){b=new HRc;b.a=a;Xrb(ERc,a,b)}return RD(Vrb(ERc,a),645)} +function k3d(a){var b;if(a.g>1||a.Ob()){++a.a;a.g=0;b=a.i;a.Ob();return b}else{throw Adb(new Dvb)}} +function GRc(a){switch(a.a.g){case 1:return new lSc;case 3:return new VUc;default:return new WRc;}} +function fyd(a,b){switch(b){case 1:return !!a.n&&a.n.i!=0;case 2:return a.k!=null;}return Cxd(a,b)} +function Hdb(a){if(jxe<a&&a<hxe){return a<0?$wnd.Math.ceil(a):$wnd.Math.floor(a)}return Edb(vD(a))} +function hfb(a){var b;if(a<128){return jfb(),b=ifb[a],!b&&(b=ifb[a]=new bfb(a)),b}return new bfb(a)} +function PCb(b,c){var d;try{c.de()}catch(a){a=zdb(a);if(ZD(a,82)){d=a;ZEb(b.c,d)}else throw Adb(a)}} +function Wdb(a){var b,c,d,e;e=a;d=0;if(e<0){e+=hxe;d=exe}c=eE(e/gxe);b=eE(e-c*gxe);return hD(b,c,d)} +function dy(a){var b,c,d;d=0;for(c=new Osb(a.a);c.a<c.c.a.length;){b=Nsb(c);a.b.Hc(b)&&++d}return d} +function _u(a){var b,c,d;b=1;for(d=a.Kc();d.Ob();){c=d.Pb();b=31*b+(c==null?0:tb(c));b=~~b}return b} +function kQb(a,b){var c;if(!b){return a}c=b.nf();c.dc()||(!a.q?(a.q=new Vsb(c)):Ld(a.q,c));return a} +function Mtb(a,b){var c;c=a.a.get(b);if(c===undefined){++a.d}else{Ctb(a.a,b);--a.c;++a.b.g}return c} +function a0b(a,b){var c,d,e;c=b.p-a.p;if(c==0){d=a.f.a*a.f.b;e=b.f.a*b.f.b;return Qfb(d,e)}return c} +function Jfc(a,b){var c,d;c=a.j;d=b.j;return c!=d?c.g-d.g:a.p==b.p?0:c==(qpd(),Yod)?a.p-b.p:b.p-a.p} +function dFc(a,b,c,d,e){bD(a.c[b.g],c.g,d);bD(a.c[c.g],b.g,d);bD(a.b[b.g],c.g,e);bD(a.b[c.g],b.g,e)} +function Jyb(a,b,c){this.b=(uFb(a),a);this.d=(uFb(b),b);this.e=(uFb(c),c);this.c=this.d+(''+this.e)} +function Phe(a,b){this.b=a;this.e=b;this.d=b.j;this.f=(nke(),RD(a,69).xk());this.k=pke(b.e.Dh(),a)} +function USc(a){this.n=new bnb;this.e=new Yub;this.j=new Yub;this.k=new bnb;this.f=new bnb;this.p=a} +function rVc(a){a.r=new _sb;a.w=new _sb;a.t=new bnb;a.i=new bnb;a.d=new _sb;a.a=new Tid;a.c=new Tsb} +function mOb(){mOb=geb;lOb=new nOb('UP',0);iOb=new nOb(Zye,1);jOb=new nOb(Nye,2);kOb=new nOb(Oye,3)} +function xvc(){xvc=geb;vvc=new yvc('ONE_SIDED',0);wvc=new yvc('TWO_SIDED',1);uvc=new yvc('OFF',2)} +function B9c(){B9c=geb;z9c=new D9c('EQUAL_BETWEEN_STRUCTURES',0);A9c=new D9c('TO_ASPECT_RATIO',1)} +function hDc(){hDc=geb;gDc=ss((_Cc(),cD(WC(rX,1),jwe,265,0,[ZCc,WCc,XCc,TCc,VCc,$Cc,YCc,SCc,UCc])))} +function iqd(){iqd=geb;hqd=ss((dqd(),cD(WC(I3,1),jwe,264,0,[Ypd,$pd,Xpd,_pd,aqd,cqd,bqd,Zpd,Wpd])))} +function jod(){jod=geb;iod=ss((dod(),cD(WC(A3,1),jwe,95,0,[Xnd,Wnd,Znd,cod,bod,aod,$nd,_nd,Ynd])))} +function nIb(){nIb=geb;mIb=ss((iIb(),cD(WC(xN,1),jwe,257,0,[hIb,cIb,dIb,bIb,fIb,gIb,eIb,aIb,_Hb])))} +function oSc(a){var b;b=RD(mQb(a,(Ywc(),hwc)),64);return a.k==(r3b(),m3b)&&(b==(qpd(),ppd)||b==Xod)} +function j0b(a,b,c){var d,e;e=RD(mQb(a,(yCc(),RAc)),75);if(e){d=new Ejd;Ajd(d,0,e);Cjd(d,c);ye(b,d)}} +function U2b(a,b,c){var d,e,f,g;g=Y2b(a);d=g.d;e=g.c;f=a.n;b&&(f.a=f.a-d.b-e.a);c&&(f.b=f.b-d.d-e.b)} +function OOb(a,b){var c,d;c=a.f.c.length;d=b.f.c.length;if(c<d){return -1}if(c==d){return 0}return 1} +function S0b(a){if(a.b.c.length!=0&&!!RD(Vmb(a.b,0),72).a){return RD(Vmb(a.b,0),72).a}return R0b(a)} +function fr(a){var b;if(a){b=a;if(b.dc()){throw Adb(new Dvb)}return b.Xb(b.gc()-1)}return Fr(a.Kc())} +function Dib(a){var b;Ddb(a,0)<0&&(a=Qdb(a));return b=Ydb(Udb(a,32)),64-(b!=0?ngb(b):ngb(Ydb(a))+32)} +function pBb(){gBb();if(dBb){return new oBb(null)}return ZAb(_Ab(),'com.google.common.base.Strings')} +function eyd(a,b,c,d){if(c==1){return !a.n&&(a.n=new C5d(I4,a,1,7)),rLd(a.n,b,d)}return Bxd(a,b,c,d)} +function eBd(a,b){var c,d;d=(c=new _9d,c);PAd(d,b);WGd((!a.A&&(a.A=new iie(z7,a,7)),a.A),d);return d} +function xEd(a,b,c){var d,e,f,g;f=null;g=b;e=wDd(g,iIe);d=new JEd(a,c);f=(LDd(d.a,d.b,e),e);return f} +function iXd(a){var b;if(!a.a||(a.Bb&1)==0&&a.a.Vh()){b=WVd(a);ZD(b,156)&&(a.a=RD(b,156))}return a.a} +function Be(a,b){var c,d;uFb(b);for(d=b.Kc();d.Ob();){c=d.Pb();if(!a.Hc(c)){return false}}return true} +function sD(a,b){var c,d,e;c=a.l+b.l;d=a.m+b.m+(c>>22);e=a.h+b.h+(d>>22);return hD(c&dxe,d&dxe,e&exe)} +function DD(a,b){var c,d,e;c=a.l-b.l;d=a.m-b.m+(c>>22);e=a.h-b.h+(d>>22);return hD(c&dxe,d&dxe,e&exe)} +function Jpc(a){var b,c;Hpc(a);for(c=new Anb(a.d);c.a<c.c.c.length;){b=RD(ynb(c),105);!!b.i&&Ipc(b)}} +function zdb(a){var b;if(ZD(a,82)){return a}b=a&&a.__java$exception;if(!b){b=new Cz(a);gA(b)}return b} +function BGd(a){if(ZD(a,193)){return RD(a,123)}else if(!a){throw Adb(new Ogb(HIe))}else{return null}} +function skb(a){if(a.a.Ob()){return true}if(a.a!=a.e){return false}a.a=new wtb(a.f.f);return a.a.Ob()} +function kmb(a,b){if(b==null){return false}while(a.a!=a.b){if(pb(b,Imb(a))){return true}}return false} +function dHb(a,b){if(!a||!b||a==b){return false}return tGb(a.d.c,b.d.c+b.d.b)&&tGb(b.d.c,a.d.c+a.d.b)} +function Tmb(a,b){var c,d;c=b.Pc();d=c.length;if(d==0){return false}YEb(a.c,a.c.length,c);return true} +function NBb(a,b,c){var d,e;for(e=b.vc().Kc();e.Ob();){d=RD(e.Pb(),44);a.yc(d.ld(),d.md(),c)}return a} +function $Wc(a){var b,c,d;b=new Yub;for(d=Sub(a.d,0);d.b!=d.d.c;){c=RD(evb(d),65);Mub(b,c.c)}return b} +function Pdc(a,b){var c,d;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),72);pQb(c,(Ywc(),swc),b)}} +function L9c(a,b,c){var d,e;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),27);Byd(d,d.i+b,d.j+c)}} +function Nb(a,b){if(!a){throw Adb(new agb(hc('value already present: %s',cD(WC(jJ,1),rve,1,5,[b]))))}} +function Aid(a,b,c,d,e){tid();return $wnd.Math.min(Lid(a,b,c,d,e),Lid(c,d,a,b,fjd(new rjd(e.a,e.b))))} +function Rdd(a,b,c,d){RD(c.b,68);RD(c.b,68);RD(d.b,68);RD(d.b,68);RD(d.b,68);Umb(d.a,new Wdd(a,b,d))} +function NGb(a,b){a.d==(Cmd(),ymd)||a.d==Bmd?RD(b.a,60).c.Fc(RD(b.b,60)):RD(b.b,60).c.Fc(RD(b.a,60))} +function Ued(a,b){var c;c=ev(b.a.gc());FDb(PDb(new SDb(null,new Swb(b,1)),a.i),new ffd(a,c));return c} +function fBd(a){var b,c;c=(b=new _9d,b);PAd(c,'T');WGd((!a.d&&(a.d=new iie(z7,a,11)),a.d),c);return c} +function cHd(a){var b,c,d,e;b=1;for(c=0,e=a.gc();c<e;++c){d=a.Vi(c);b=31*b+(d==null?0:tb(d))}return b} +function cj(a,b,c,d){var e;Pb(b,a.e.Rd().gc());Pb(c,a.c.Rd().gc());e=a.a[b][c];bD(a.a[b],c,d);return e} +function cD(a,b,c,d,e){e.Rm=a;e.Sm=b;e.Tm=keb;e.__elementTypeId$=c;e.__elementTypeCategory$=d;return e} +function vec(){vec=geb;uec=new xec(LAe,0);sec=new xec(oBe,1);tec=new xec(pBe,2);rec=new xec('BOTH',3)} +function enc(){enc=geb;anc=new fnc(Kye,0);bnc=new fnc(Nye,1);cnc=new fnc(Oye,2);dnc=new fnc('TOP',3)} +function nZb(){nZb=geb;jZb=new qZb('Q1',0);mZb=new qZb('Q4',1);kZb=new qZb('Q2',2);lZb=new qZb('Q3',3)} +function DFc(){DFc=geb;BFc=new EFc('OFF',0);CFc=new EFc('SINGLE_EDGE',1);AFc=new EFc('MULTI_EDGE',2)} +function ldd(){ldd=geb;kdd=new ndd('MINIMUM_SPANNING_TREE',0);jdd=new ndd('MAXIMUM_SPANNING_TREE',1)} +function hed(){hed=geb;new jGd('org.eclipse.elk.addLayoutConfig');fed=new sed;eed=new qed;ged=new ved} +function EGd(a){var b,c;c=(bvd(),b=new Rzd,b);!!a&&WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),c);return c} +function N2c(a){var b,c,d,e;e=new bnb;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),27);b=Q2c(c);Tmb(e,b)}return e} +function Jr(a,b){var c,d;Rb(b,'predicate');for(d=0;a.Ob();d++){c=a.Pb();if(b.Lb(c)){return d}}return -1} +function xSd(a,b){var c,d;d=0;if(a<64&&a<=b){b=b<64?b:63;for(c=a;c<=b;c++){d=Rdb(d,Sdb(1,c))}}return d} +function oQc(a,b){var c,d;c=a.c;d=b.e[a.p];if(d<c.a.c.length-1){return RD(Vmb(c.a,d+1),10)}return null} +function Bob(a){yob();var b,c,d;d=0;for(c=a.Kc();c.Ob();){b=c.Pb();d=d+(b!=null?tb(b):0);d=d|0}return d} +function wsb(a){var b,c,d;b=RD(a.e&&a.e(),9);d=(c=b.slice(),RD(dD(c,b),9));return new Fsb(b,d,b.length)} +function Bdd(a,b,c){var d;akb(a.a);Umb(c.i,new Mdd(a));d=new $Fb(RD(Wjb(a.a,b.b),68));Add(a,d,b);c.f=d} +function bgc(a){var b;X0b(a,true);b=Awe;nQb(a,(yCc(),KBc))&&(b+=RD(mQb(a,KBc),17).a);pQb(a,KBc,sgb(b))} +function hB(a){var b;b=new dB;b.a=a;b.b=fB(a);b.c=$C(qJ,Nve,2,2,6,1);b.c[0]=gB(a);b.c[1]=gB(a);return b} +function Z7b(a){var b,c,d;c=a.n;d=a.o;b=a.d;return new Uid(c.a-b.b,c.b-b.d,d.a+(b.b+b.c),d.b+(b.d+b.a))} +function UQb(a,b){if(!a||!b||a==b){return false}return $y(a.b.c,b.b.c+b.b.b)<0&&$y(b.b.c,a.b.c+a.b.b)<0} +function Qnd(a){switch(a.g){case 1:return Mnd;case 2:return Lnd;case 3:return Nnd;default:return Ond;}} +function mec(a){switch(RD(mQb(a,(yCc(),UAc)),171).g){case 2:case 4:return true;default:return false;}} +function aHb(a,b,c){switch(c.g){case 2:a.b=b;break;case 1:a.c=b;break;case 4:a.d=b;break;case 3:a.a=b;}} +function Exd(a,b){switch(b){case 0:!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));a.o.c.$b();return;}$vd(a,b)} +function Mad(a,b){var c,d;c=RD(RD(Wjb(a.g,b.a),42).a,68);d=RD(RD(Wjb(a.g,b.b),42).a,68);return SQb(c,d)} +function XGd(a,b,c){var d;d=a.gc();if(b>d)throw Adb(new aMd(b,d));a.Si()&&(c=bHd(a,c));return a.Ei(b,c)} +function eQb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){PPb(a,f,g)||TPb(a,f,g,true,false)}}} +function uid(a){tid();var b,c,d;c=$C(l3,Nve,8,2,0,1);d=0;for(b=0;b<2;b++){d+=0.5;c[b]=Cid(d,a)}return c} +function xD(a){var b,c,d;b=~a.l+1&dxe;c=~a.m+(b==0?1:0)&dxe;d=~a.h+(b==0&&c==0?1:0)&exe;return hD(b,c,d)} +function mgb(a){var b;if(a<0){return qwe}else if(a==0){return 0}else{for(b=hwe;(b&a)==0;b>>=1);return b}} +function zSd(a,b,c){if(a>=128)return false;return a<64?Pdb(Cdb(Sdb(1,a),c),0):Pdb(Cdb(Sdb(1,a-64),b),0)} +function oQb(a,b,c){return c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c)),a} +function pQb(a,b,c){c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c));return a} +function KTb(a){var b,c;c=new gUb;kQb(c,a);pQb(c,(JVb(),HVb),a);b=new Tsb;MTb(a,c,b);LTb(a,c,b);return c} +function cIc(a){var b,c;b=a.t-a.k[a.o.p]*a.d+a.j[a.o.p]>a.f;c=a.u+a.e[a.o.p]*a.d>a.f*a.s*a.d;return b||c} +function qmc(a,b){var c,d,e,f;c=false;d=a.a[b].length;for(f=0;f<d-1;f++){e=f+1;c=c|rmc(a,b,f,e)}return c} +function Emc(a){var b,c,d,e;for(c=a.a,d=0,e=c.length;d<e;++d){b=c[d];Jmc(a,b,(qpd(),npd));Jmc(a,b,Yod)}} +function tvc(){tvc=geb;svc=ss((ovc(),cD(WC(iX,1),jwe,259,0,[fvc,hvc,ivc,jvc,kvc,lvc,nvc,evc,gvc,mvc])))} +function fEc(){fEc=geb;eEc=ss((aEc(),cD(WC(vX,1),jwe,243,0,[$Dc,VDc,YDc,WDc,XDc,SDc,ZDc,_Dc,TDc,UDc])))} +function huc(){huc=geb;fuc=new iuc(LAe,0);euc=new iuc('INCOMING_ONLY',1);guc=new iuc('OUTGOING_ONLY',2)} +function HC(){HC=geb;GC={'boolean':IC,'number':JC,'string':LC,'object':KC,'function':KC,'undefined':MC}} +function pfb(){++kfb;this.o=null;this.k=null;this.j=null;this.d=null;this.b=null;this.n=null;this.a=null} +function pj(a,b){this.c=a;this.d=b;this.b=this.d/this.c.c.Rd().gc()|0;this.a=this.d%this.c.c.Rd().gc()} +function R$d(a,b){this.b=a;N$d.call(this,(RD(QHd(xYd((lTd(),kTd).o),10),19),b.i),b.g);this.a=(lYd(),kYd)} +function vB(a,b,c){this.q=new $wnd.Date;this.q.setFullYear(a+Owe,b,c);this.q.setHours(0,0,0,0);mB(this,0)} +function ckb(a,b){mFb(a>=0,'Negative initial capacity');mFb(b>=0,'Non-positive load factor');akb(this)} +function iib(a,b,c,d,e){var f,g;g=a.length;f=c.length;if(b<0||d<0||e<0||b+e>g||d+e>f){throw Adb(new ueb)}} +function zob(a,b){yob();var c,d,e,f,g;g=false;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=g|a.Fc(c)}return g} +function Wyb(a,b,c){var d,e;d=new Fzb(b,c);e=new Gzb;a.b=Uyb(a,a.b,d,e);e.b||++a.c;a.b.b=false;return e.d} +function omb(a){var b;b=a.a[a.b];if(b==null){return null}bD(a.a,a.b,null);a.b=a.b+1&a.a.length-1;return b} +function oD(a){var b,c;c=ngb(a.h);if(c==32){b=ngb(a.m);return b==32?ngb(a.l)+32:b+20-10}else{return c-12}} +function $5d(a){var b;if(!a.c||(a.Bb&1)==0&&(a.c.Db&64)!=0){b=WVd(a);ZD(b,90)&&(a.c=RD(b,29))}return a.c} +function OGb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.d.c=-b.d.c-b.d.b}IGb(a)} +function zYb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.g.c=-b.g.c-b.g.b}uYb(a)} +function Jmc(a,b,c){var d,e,f,g;g=aMc(b,c);f=0;for(e=g.Kc();e.Ob();){d=RD(e.Pb(),12);Zjb(a.c,d,sgb(f++))}} +function qMc(a,b,c){var d;d=new bnb;sMc(a,b,d,(qpd(),Xod),true,false);sMc(a,c,d,ppd,false,false);return d} +function xjd(a){var b,c,d,e,f;b=new pjd;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b.a+=c.a;b.b+=c.b}return b} +function CEd(a,b,c){var d,e,f,g;f=null;g=b;e=wDd(g,'labels');d=new fFd(a,c);f=(bEd(d.a,d.b,e),e);return f} +function Jee(a,b,c,d){var e;e=Ree(a,b,c,d);if(!e){e=Iee(a,c,d);if(!!e&&!Eee(a,b,e)){return null}}return e} +function Mee(a,b,c,d){var e;e=See(a,b,c,d);if(!e){e=Lee(a,c,d);if(!!e&&!Eee(a,b,e)){return null}}return e} +function Cb(a,b,c){Qb(b);if(c.Ob()){Vhb(b,Fb(c.Pb()));while(c.Ob()){Vhb(b,a.a);Vhb(b,Fb(c.Pb()))}}return b} +function Xb(a,b){var c;for(c=0;c<a.a.a.length;c++){if(!RD(kob(a.a,c),178).Lb(b)){return false}}return true} +function fB(a){var b;if(a==0){return 'Etc/GMT'}if(a<0){a=-a;b='Etc/GMT-'}else{b='Etc/GMT+'}return b+iB(a)} +function DA(a){var b;if(a.b<=0){return false}b=qhb('MLydhHmsSDkK',Fhb(ihb(a.c,0)));return b>1||b>=0&&a.b<3} +function nD(a){var b,c,d;b=~a.l+1&dxe;c=~a.m+(b==0?1:0)&dxe;d=~a.h+(b==0&&c==0?1:0)&exe;a.l=b;a.m=c;a.h=d} +function Cob(a){yob();var b,c,d;d=1;for(c=a.Kc();c.Ob();){b=c.Pb();d=31*d+(b!=null?tb(b):0);d=d|0}return d} +function kD(a,b,c,d,e){var f;f=BD(a,b);c&&nD(f);if(e){a=mD(a,b);d?(eD=xD(a)):(eD=hD(a.l,a.m,a.h))}return f} +function Qlc(a,b,c){a.g=Wlc(a,b,(qpd(),Xod),a.b);a.d=Wlc(a,c,Xod,a.b);if(a.g.c==0||a.d.c==0){return}Tlc(a)} +function Rlc(a,b,c){a.g=Wlc(a,b,(qpd(),ppd),a.j);a.d=Wlc(a,c,ppd,a.j);if(a.g.c==0||a.d.c==0){return}Tlc(a)} +function Xyd(a,b){switch(b){case 7:return !!a.e&&a.e.i!=0;case 8:return !!a.d&&a.d.i!=0;}return wyd(a,b)} +function STb(a,b){switch(b.g){case 0:ZD(a.b,641)||(a.b=new tUb);break;case 1:ZD(a.b,642)||(a.b=new zUb);}} +function tbd(a){switch(a.g){case 0:return new _dd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} +function bdd(a){switch(a.g){case 0:return new vdd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} +function LCc(a,b,c){return !QDb(CDb(new SDb(null,new Swb(a.c,16)),new PAb(new gsd(b,c)))).Bd((xDb(),wDb))} +function mWc(a,b){return cjd(jWc(RD(mQb(b,(h_c(),H$c)),88)),new rjd(a.c.e.a-a.b.e.a,a.c.e.b-a.b.e.b))<=0} +function dve(a,b){while(a.g==null&&!a.c?sId(a):a.g==null||a.i!=0&&RD(a.g[a.i-1],51).Ob()){mFd(b,tId(a))}} +function sYb(a){var b,c;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.f.$b()}NYb(a.b,a);tYb(a)} +function Ijd(a){var b,c,d;b=new Ejd;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),8);hu(b,0,new sjd(c))}return b} +function DDb(a){var b;LCb(a);b=new IEb;if(a.a.Bd(b)){return Kvb(),new Ovb(uFb(b.a))}return Kvb(),Kvb(),Jvb} +function Dxd(a,b,c){switch(b){case 0:!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));CVd(a.o,c);return;}Wvd(a,b,c)} +function bXc(a,b,c){this.g=a;this.e=new pjd;this.f=new pjd;this.d=new Yub;this.b=new Yub;this.a=b;this.c=c} +function V9c(a,b,c,d){this.b=new bnb;this.n=new bnb;this.i=d;this.j=c;this.s=a;this.t=b;this.r=0;this.d=0} +function gHd(a,b){if(!a.Li()&&b==null){throw Adb(new agb("The 'no null' constraint is violated"))}return b} +function ohb(a){var b,c;b=0;for(c=0;c<a.length;c++){b=(b<<5)-b+(BFb(c,a.length),a.charCodeAt(c))|0}return b} +function Myb(a,b){var c,d,e;e=a.b;while(e){c=a.a.Ne(b,e.d);if(c==0){return e}d=c<0?0:1;e=e.a[d]}return null} +function LBb(a,b,c){var d,e;d=(Geb(),SSb(c)?true:false);e=RD(b.xc(d),15);if(!e){e=new bnb;b.zc(d,e)}e.Fc(c)} +function q6c(a,b){var c,d;c=RD(Gxd(a,(X7c(),A7c)),17).a;d=RD(Gxd(b,A7c),17).a;return c==d?-1:c<d?-1:c>d?1:0} +function ICc(a){Rmb(a.c,(hed(),fed));if(_y(a.a,Kfb(UD(iGd((QCc(),OCc)))))){return new asd}return new csd(a)} +function fs(a){while(!a.d||!a.d.Ob()){if(!!a.b&&!nmb(a.b)){a.d=RD(smb(a.b),51)}else{return null}}return a.d} +function BVc(a){switch(a.g){case 1:return EEe;default:case 2:return 0;case 3:return Gze;case 4:return FEe;}} +function fte(){Vse();var a;if(Cse)return Cse;a=Zse(hte('M',true));a=$se(hte('M',false),a);Cse=a;return Cse} +function ttd(){ttd=geb;qtd=new utd('ELK',0);rtd=new utd('JSON',1);ptd=new utd('DOT',2);std=new utd('SVG',3)} +function TEc(){TEc=geb;SEc=new UEc('STACKED',0);QEc=new UEc('REVERSE_STACKED',1);REc=new UEc('SEQUENCED',2)} +function LZc(){LZc=geb;KZc=new MZc(LAe,0);JZc=new MZc('MIDDLE_TO_MIDDLE',1);IZc=new MZc('AVOID_OVERLAP',2)} +function sgc(){sgc=geb;qgc=new Lgc;rgc=new Ngc;pgc=new Dgc;ogc=new Pgc;ngc=new Hgc;mgc=(uFb(ngc),new nrb)} +function vnd(){vnd=geb;tnd=new A3b(15);snd=new mGd((umd(),tld),tnd);und=Qld;ond=Ekd;pnd=kld;rnd=nld;qnd=mld} +function wgd(a,b){var c,d,e,f,g;for(d=b,e=0,f=d.length;e<f;++e){c=d[e];g=new Ggd(a);c.hf(g);Bgd(g)}akb(a.f)} +function xw(a,b){var c;if(b===a){return true}if(ZD(b,229)){c=RD(b,229);return pb(a.Zb(),c.Zb())}return false} +function Q_b(a,b){if(R_b(a,b)){Rc(a.b,RD(mQb(b,(Ywc(),ewc)),21),b);Mub(a.a,b);return true}else{return false}} +function u6b(a){var b,c;b=RD(mQb(a,(Ywc(),Iwc)),10);if(b){c=b.c;Ymb(c.a,b);c.a.c.length==0&&Ymb(Y2b(b).b,c)}} +function dfc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return RD(mQb(b,zwc),17).a-RD(mQb(a,zwc),17).a}return 0} +function ifc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return RD(mQb(a,zwc),17).a-RD(mQb(b,zwc),17).a}return 0} +function kBb(a){if(dBb){return $C(JL,Xxe,581,0,0,1)}return RD(anb(a.a,$C(JL,Xxe,581,a.a.c.length,0,1)),856)} +function yn(a,b,c,d){fn();return new Nx(cD(WC(UK,1),Zve,44,0,[(ck(a,b),new gp(a,b)),(ck(c,d),new gp(c,d))]))} +function bBd(a,b,c){var d,e;e=(d=new q4d,d);yBd(e,b,c);WGd((!a.q&&(a.q=new C5d(s7,a,11,10)),a.q),e);return e} +function xAd(a){var b,c,d,e;e=meb(pAd,a);c=e.length;d=$C(qJ,Nve,2,c,6,1);for(b=0;b<c;++b){d[b]=e[b]}return d} +function jwb(a,b){var c;if(b*2+1>=a.b.c.length){return}jwb(a,2*b+1);c=2*b+2;c<a.b.c.length&&jwb(a,c);kwb(a,b)} +function sKc(a,b){var c,d;for(d=Sub(a,0);d.b!=d.d.c;){c=RD(evb(d),219);if(c.e.length>0){b.Cd(c);c.i&&zKc(c)}}} +function Ejb(a,b,c){var d;for(d=c-1;d>=0&&a[d]===b[d];d--);return d<0?0:Ldb(Cdb(a[d],yxe),Cdb(b[d],yxe))?-1:1} +function it(a,b,c){var d,e;this.g=a;this.c=b;this.a=this;this.d=this;e=Wp(c);d=$C(UG,ewe,227,e,0,1);this.b=d} +function fQb(a,b,c,d,e){var f,g;for(g=c;g<=e;g++){for(f=b;f<=d;f++){if(PPb(a,f,g)){return true}}}return false} +function Dc(a,b){var c,d;for(d=a.Zb().Cc().Kc();d.Ob();){c=RD(d.Pb(),16);if(c.Hc(b)){return true}}return false} +function iu(a,b,c){var d,e,f,g;uFb(c);g=false;f=a.fd(b);for(e=c.Kc();e.Ob();){d=e.Pb();f.Rb(d);g=true}return g} +function NMd(a,b){var c,d;d=RD(Ywd(a.a,4),129);c=$C(d6,IJe,424,b,0,1);d!=null&&hib(d,0,c,0,d.length);return c} +function hSd(a,b){var c;c=new lSd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,b);a.e!=null||(c.c=a);return c} +function Tv(a,b){var c;if(a===b){return true}else if(ZD(b,85)){c=RD(b,85);return Rx(gn(a),c.vc())}return false} +function Vjb(a,b,c){var d,e;for(e=c.Kc();e.Ob();){d=RD(e.Pb(),44);if(a.Be(b,d.md())){return true}}return false} +function lmc(a,b,c){if(!a.d[b.p][c.p]){kmc(a,b,c);a.d[b.p][c.p]=true;a.d[c.p][b.p]=true}return a.a[b.p][c.p]} +function vMc(a,b){var c;if(!a||a==b||!nQb(b,(Ywc(),pwc))){return false}c=RD(mQb(b,(Ywc(),pwc)),10);return c!=a} +function Bhe(a){switch(a.i){case 2:{return true}case 1:{return false}case -1:{++a.c}default:{return a.$l()}}} +function Che(a){switch(a.i){case -2:{return true}case -1:{return false}case 1:{--a.c}default:{return a._l()}}} +function bgb(a){oz.call(this,'The given string does not match the expected format for individual spacings.',a)} +function J6c(a,b){var c;b.Ug('Min Size Preprocessing',1);c=vsd(a);Ixd(a,(X6c(),U6c),c.a);Ixd(a,R6c,c.b);b.Vg()} +function Djd(a){var b,c,d;b=0;d=$C(l3,Nve,8,a.b,0,1);c=Sub(a,0);while(c.b!=c.d.c){d[b++]=RD(evb(c),8)}return d} +function Ajd(a,b,c){var d,e,f;d=new Yub;for(f=Sub(c,0);f.b!=f.d.c;){e=RD(evb(f),8);Mub(d,new sjd(e))}iu(a,b,d)} +function az(a,b){var c;c=Bdb(a,b);if(Ldb($db(a,b),0)|Jdb($db(a,c),0)){return c}return Bdb(Sve,$db(Udb(c,63),1))} +function le(a,b){var c,d;c=RD(a.d.Bc(b),16);if(!c){return null}d=a.e.hc();d.Gc(c);a.e.d-=c.gc();c.$b();return d} +function Dyb(a){var b;b=a.a.c.length;if(b>0){return lyb(b-1,a.a.c.length),Xmb(a.a,b-1)}else{throw Adb(new Srb)}} +function nFb(a,b,c){if(a>b){throw Adb(new agb(_xe+a+aye+b))}if(a<0||b>c){throw Adb(new xeb(_xe+a+bye+b+Qxe+c))}} +function yXd(a,b){if(a.D==null&&a.B!=null){a.D=a.B;a.B=null}JXd(a,b==null?null:(uFb(b),b));!!a.C&&a.hl(null)} +function JCc(a,b){var c;c=iGd((QCc(),OCc))!=null&&b.Sg()!=null?Kfb(UD(b.Sg()))/Kfb(UD(iGd(OCc))):1;Zjb(a.b,b,c)} +function $Lc(a,b){var c,d;d=a.c[b];if(d==0){return}a.c[b]=0;a.d-=d;c=b+1;while(c<a.a.length){a.a[c]-=d;c+=c&-c}} +function VHd(a){var b;++a.j;if(a.i==0){a.g=null}else if(a.i<a.g.length){b=a.g;a.g=a.aj(a.i);hib(b,0,a.g,0,a.i)}} +function Ned(a,b,c){if(b<0){throw Adb(new veb(zGe+b))}if(b<a.j.c.length){$mb(a.j,b,c)}else{Led(a,b);Rmb(a.j,c)}} +function uhd(a){if(!a.a||(a.a.i&8)==0){throw Adb(new dgb('Enumeration class expected for layout option '+a.f))}} +function y1d(a){var b;b=(!a.a&&(a.a=new C5d(l7,a,9,5)),a.a);if(b.i!=0){return N1d(RD(QHd(b,0),694))}return null} +function yr(a){var b;Qb(a);Mb(true,'numberToAdvance must be nonnegative');for(b=0;b<0&&gs(a);b++){hs(a)}return b} +function eSb(){eSb=geb;bSb=(VRb(),URb);aSb=new lGd(vze,bSb);_Rb=new jGd(wze);cSb=new jGd(xze);dSb=new jGd(yze)} +function s_c(){s_c=geb;r_c=new t_c(MAe,0);p_c=new t_c(QEe,1);q_c=new t_c('FAN',2);o_c=new t_c('CONSTRAINT',3)} +function g4c(){g4c=geb;d4c=new i4c(LAe,0);e4c=new i4c('RADIAL_COMPACTION',1);f4c=new i4c('WEDGE_COMPACTION',2)} +function lFc(){lFc=geb;iFc=new mFc('CONSERVATIVE',0);jFc=new mFc('CONSERVATIVE_SOFT',1);kFc=new mFc('SLOPPY',2)} +function xBb(){xBb=geb;uBb=new yBb('CONCURRENT',0);vBb=new yBb('IDENTITY_FINISH',1);wBb=new yBb('UNORDERED',2)} +function NXb(){NXb=geb;LXb=Wx(cD(WC(s3,1),jwe,88,0,[(Cmd(),ymd),zmd]));MXb=Wx(cD(WC(s3,1),jwe,88,0,[Bmd,xmd]))} +function rb(a){return bE(a)?qJ:_D(a)?VI:$D(a)?QI:YD(a)?a.Rm:aD(a)?a.Rm:a.Rm||Array.isArray(a)&&WC(hI,1)||hI} +function Qje(a){return !a?null:(a.i&1)!=0?a==xdb?QI:a==kE?bJ:a==jE?ZI:a==iE?VI:a==lE?eJ:a==wdb?lJ:a==gE?RI:SI:a} +function CIb(a){if(a.c!=a.b.b||a.i!=a.g.b){aFb(a.a.c,0);Tmb(a.a,a.b);Tmb(a.a,a.g);a.c=a.b.b;a.i=a.g.b}return a.a} +function vmb(a,b){var c,d;c=a.a.length-1;while(b!=a.b){d=b-1&c;bD(a.a,b,a.a[d]);b=d}bD(a.a,a.b,null);a.b=a.b+1&c} +function umb(a,b){var c,d;c=a.a.length-1;a.c=a.c-1&c;while(b!=a.c){d=b+1&c;bD(a.a,b,a.a[d]);b=d}bD(a.a,a.c,null)} +function Smb(a,b,c){var d,e;wFb(b,a.c.length);d=c.Pc();e=d.length;if(e==0){return false}YEb(a.c,b,d);return true} +function otb(a,b,c){var d,e,f,g;for(e=c,f=0,g=e.length;f<g;++f){d=e[f];if(a.b.Be(b,d.ld())){return d}}return null} +function Tnb(a){var b,c,d,e,f;f=1;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=31*f+(b!=null?tb(b):0);f=f|0}return f} +function ss(a){var b,c,d,e,f;b={};for(d=a,e=0,f=d.length;e<f;++e){c=d[e];b[':'+(c.f!=null?c.f:''+c.g)]=c}return b} +function tSd(a){var b,c;if(a==null)return null;for(b=0,c=a.length;b<c;b++){if(!GSd(a[b]))return a[b]}return null} +function gKb(a,b){if(!a){return 0}if(b&&!a.j){return 0}if(ZD(a,127)){if(RD(a,127).a.b==0){return 0}}return a.jf()} +function hKb(a,b){if(!a){return 0}if(b&&!a.k){return 0}if(ZD(a,127)){if(RD(a,127).a.a==0){return 0}}return a.kf()} +function orc(a,b){if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}return 0} +function EHc(a){var b,c,d;d=0;for(c=new is(Mr(a.a.Kc(),new ir));gs(c);){b=RD(hs(c),18);b.c.i==b.d.i||++d}return d} +function Gad(a,b){var c,d,e;e=b-a.f;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),315);fad(c,c.e,c.f+e)}a.f=b} +function YVd(a,b){var c,d,e;d=a.Yk(b,null);e=null;if(b){e=(jTd(),c=new s2d,c);l2d(e,a.r)}d=XVd(a,e,d);!!d&&d.oj()} +function P0b(a,b){var c,d,e;c=a;e=0;do{if(c==b){return e}d=c.e;if(!d){throw Adb(new _fb)}c=Y2b(d);++e}while(true)} +function uRb(a){var b,c,d,e;d=a.b.a;for(c=d.a.ec().Kc();c.Ob();){b=RD(c.Pb(),567);e=new DSb(b,a.e,a.f);Rmb(a.g,e)}} +function DZb(a){var b;b=new XZb(a);t$b(a.a,BZb,new mob(cD(WC(wQ,1),rve,382,0,[b])));!!b.d&&Rmb(b.f,b.d);return b.f} +function M2b(a,b){var c;for(c=0;c<b.length;c++){if(a==(BFb(c,b.length),b.charCodeAt(c))){return true}}return false} +function BSd(a,b){return b<a.length&&(BFb(b,a.length),a.charCodeAt(b)!=63)&&(BFb(b,a.length),a.charCodeAt(b)!=35)} +function trc(a,b,c,d){nrc(this);this.c=$C(jR,WAe,10,a.a.c.length,0,1);this.e=b;anb(a.a,this.c);this.f=c;this.b=d} +function Cz(a){Az();ez(this);gz(this);this.e=a;hz(this,a);this.g=a==null?vve:jeb(a);this.a='';this.b=a;this.a=''} +function Pad(){this.a=new Qad;this.f=new Sad(this);this.b=new Uad(this);this.i=new Wad(this);this.e=new Yad(this)} +function Ks(){Js.call(this,new hub(Sv(16)));dk(2,Mve);this.b=2;this.a=new ct(null,null,0,null);Ss(this.a,this.a)} +function NC(a){HC();throw Adb(new aC("Unexpected typeof result '"+a+"'; please report this bug to the GWT team"))} +function AVc(a,b,c){if($wnd.Math.abs(b-a)<DEe||$wnd.Math.abs(c-a)<DEe){return true}return b-a>DEe?a-c>DEe:c-a>DEe} +function vjd(a,b){var c;for(c=0;c<b.length;c++){if(a==(BFb(c,b.length),b.charCodeAt(c))){return true}}return false} +function HSd(a){var b,c;if(a==null)return false;for(b=0,c=a.length;b<c;b++){if(!GSd(a[b]))return false}return true} +function M8c(a,b){var c,d,e;d=false;c=b.q.d;if(b.d<a.b){e=dad(b.q,a.b);if(b.q.d>e){ead(b.q,e);d=c!=b.q.d}}return d} +function C3c(a,b){var c,d,e,f,g,h,i,j;i=b.i;j=b.j;d=a.f;e=d.i;f=d.j;g=i-e;h=j-f;c=$wnd.Math.sqrt(g*g+h*h);return c} +function pBd(a,b){var c,d;d=Hvd(a);if(!d){!$Ad&&($Ad=new L5d);c=(gSd(),nSd(b));d=new Sde(c);WGd(d.El(),a)}return d} +function Sc(a,b){var c,d;c=RD(a.c.Bc(b),16);if(!c){return a.jc()}d=a.hc();d.Gc(c);a.d-=c.gc();c.$b();return a.mc(d)} +function tKc(a,b){var c,d;d=Kwb(a.d,1)!=0;c=true;while(c){c=false;c=b.c.mg(b.e,d);c=c|DKc(a,b,d,false);d=!d}yKc(a)} +function omc(a,b,c,d){var e,f;a.a=b;f=d?0:1;a.f=(e=new mmc(a.c,a.a,c,f),new Pmc(c,a.a,e,a.e,a.b,a.c==(RKc(),PKc)))} +function Imb(a){var b;sFb(a.a!=a.b);b=a.d.a[a.a];zmb(a.b==a.d.c&&b!=null);a.c=a.a;a.a=a.a+1&a.d.a.length-1;return b} +function Vib(a){var b;if(a.c!=0){return a.c}for(b=0;b<a.a.length;b++){a.c=a.c*33+(a.a[b]&-1)}a.c=a.c*a.e;return a.c} +function Oue(a){var b;if(!(a.c.c<0?a.a>=a.c.b:a.a<=a.c.b)){throw Adb(new Dvb)}b=a.a;a.a+=a.c.c;++a.b;return sgb(b)} +function h5b(a){var b;b=new y2b(a.a);kQb(b,a);pQb(b,(Ywc(),Awc),a);b.o.a=a.g;b.o.b=a.f;b.n.a=a.i;b.n.b=a.j;return b} +function tVc(a){return (qpd(),hpd).Hc(a.j)?Kfb(UD(mQb(a,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])).b} +function ZJc(a){var b;b=vfd(XJc);RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),kvc))&&pfd(b,(sXb(),pXb),(hcc(),Ybc));return b} +function M2c(a){var b,c,d,e;e=new _sb;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),27);b=P2c(c);ye(e,b)}return e} +function hIc(a){var b,c;for(c=new Anb(a.r);c.a<c.c.c.length;){b=RD(ynb(c),10);if(a.n[b.p]<=0){return b}}return null} +function LGb(a,b,c){var d,e;for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),60);if(MGb(a,d,c)){return true}}return false} +function Rcc(a,b,c,d){var e,f;for(f=a.Kc();f.Ob();){e=RD(f.Pb(),72);e.n.a=b.a+(d.a-e.o.a)/2;e.n.b=b.b;b.b+=e.o.b+c}} +function hNb(a,b,c){var d;d=new rMb(a,b);Rc(a.r,b.ag(),d);if(c&&!Rod(a.u)){d.c=new TKb(a.d);Umb(b.Rf(),new kNb(d))}} +function Ddb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a-b;if(!isNaN(c)){return c}}return uD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b)} +function Iid(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function Jid(a,b){var c,d,e;e=1;c=a;d=b>=0?b:-b;while(d>0){if(d%2==0){c*=c;d=d/2|0}else{e*=c;d-=1}}return b<0?1/e:e} +function Vvd(a,b){var c,d,e,f;f=(e=a?Hvd(a):null,Pje((d=b,e?e.Gl():null,d)));if(f==b){c=Hvd(a);!!c&&c.Gl()}return f} +function g2d(a,b,c){var d,e;e=a.f;a.f=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,0,e,b);!c?(c=d):c.nj(d)}return c} +function e2d(a,b,c){var d,e;e=a.b;a.b=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,3,e,b);!c?(c=d):c.nj(d)}return c} +function rAd(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,1,e,b);!c?(c=d):c.nj(d)}return c} +function SNd(a){var b,c,d,e;if(a!=null){for(c=0;c<a.length;++c){b=a[c];if(b){RD(b.g,379);e=b.i;for(d=0;d<e;++d);}}}} +function Vnb(a,b,c,d,e,f,g,h){var i;i=c;while(f<g){i>=d||b<c&&h.Ne(a[b],a[i])<=0?bD(e,f++,a[b++]):bD(e,f++,a[i++])}} +function Njb(a,b,c,d,e){if(b==0||d==0){return}b==1?(e[d]=Pjb(e,c,d,a[0])):d==1?(e[b]=Pjb(e,a,b,c[0])):Ojb(a,c,e,b,d)} +function w9c(a,b,c){var d,e,f,g;d=c/a.gc();e=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),186);Gad(f,f.f+d*e);Dad(f,b,d);++e}} +function cad(a){var b,c,d;d=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);d=$wnd.Math.max(d,b.g)}return d} +function EKc(a){var b,c,d;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),219);b=c.c.kg()?c.f:c.a;!!b&&MLc(b,c.j)}} +function lDc(){lDc=geb;iDc=new nDc('DUMMY_NODE_OVER',0);jDc=new nDc('DUMMY_NODE_UNDER',1);kDc=new nDc('EQUAL',2)} +function mqd(){mqd=geb;kqd=new nqd('PARALLEL_NODE',0);jqd=new nqd('HIERARCHICAL_NODE',1);lqd=new nqd('ROOT_NODE',2)} +function Fnd(){Fnd=geb;Dnd=new Gnd('INHERIT',0);Cnd=new Gnd('INCLUDE_CHILDREN',1);End=new Gnd('SEPARATE_CHILDREN',2)} +function hyd(a,b){switch(b){case 1:!a.n&&(a.n=new C5d(I4,a,1,7));sLd(a.n);return;case 2:jyd(a,null);return;}Exd(a,b)} +function c9c(a){switch(a.g){case 0:return new R8c;case 1:return new o9c;case 2:return new X8c;default:return null;}} +function eq(a){_l();switch(a.c){case 0:return Px(),Ox;case 1:return new Fy(Ir(new Osb(a)));default:return new dq(a);}} +function go(a){_l();switch(a.gc()){case 0:return Px(),Ox;case 1:return new Fy(a.Kc().Pb());default:return new Qx(a);}} +function Pm(a){var b;switch(a.gc()){case 0:return sm;case 1:return new Dy(Qb(a.Xb(0)));default:b=a;return new Kx(b);}} +function sgb(a){var b,c;if(a>-129&&a<128){return ugb(),b=a+128,c=tgb[b],!c&&(c=tgb[b]=new fgb(a)),c}return new fgb(a)} +function bhb(a){var b,c;if(a>-129&&a<128){return dhb(),b=a+128,c=chb[b],!c&&(c=chb[b]=new Xgb(a)),c}return new Xgb(a)} +function M$b(a,b){var c;if(a.a.c.length>0){c=RD(Vmb(a.a,a.a.c.length-1),579);if(Q_b(c,b)){return}}Rmb(a.a,new S_b(b))} +function Ekc(a){lkc();var b,c;b=a.d.c-a.e.c;c=RD(a.g,154);Umb(c.b,new Ykc(b));Umb(c.c,new $kc(b));xgb(c.i,new alc(b))} +function Mlc(a){var b;b=new bib;b.a+='VerticalSegment ';Yhb(b,a.e);b.a+=' ';Zhb(b,Eb(new Gb,new Anb(a.k)));return b.a} +function Fmc(a,b){var c,d,e;c=0;for(e=b3b(a,b).Kc();e.Ob();){d=RD(e.Pb(),12);c+=mQb(d,(Ywc(),Iwc))!=null?1:0}return c} +function VTc(a,b,c){var d,e,f;d=0;for(f=Sub(a,0);f.b!=f.d.c;){e=Kfb(UD(evb(f)));if(e>c){break}else e>=b&&++d}return d} +function Wv(b,c){Qb(b);try{return b._b(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} +function Nk(b,c){Qb(b);try{return b.Hc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} +function Ok(b,c){Qb(b);try{return b.Mc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return false}else throw Adb(a)}} +function Xv(b,c){Qb(b);try{return b.xc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return null}else throw Adb(a)}} +function Yv(b,c){Qb(b);try{return b.Bc(c)}catch(a){a=zdb(a);if(ZD(a,212)||ZD(a,169)){return null}else throw Adb(a)}} +function aMc(a,b){switch(b.g){case 2:case 1:return b3b(a,b);case 3:case 4:return hv(b3b(a,b));}return yob(),yob(),vob} +function QAd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (name: ';Nhb(b,a.zb);b.a+=')';return b.a} +function Fgd(a){var b;b=RD(cub(a.c.c,''),233);if(!b){b=new fgd(ogd(ngd(new pgd,''),'Other'));dub(a.c.c,'',b)}return b} +function hBd(a,b,c){var d,e;e=a.sb;a.sb=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,4,e,b);!c?(c=d):c.nj(d)}return c} +function ZVd(a,b,c){var d,e;e=a.r;a.r=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,8,e,a.r);!c?(c=d):c.nj(d)}return c} +function q5d(a,b,c){var d,e;d=new P3d(a.e,4,13,(e=b.c,e?e:(JTd(),wTd)),null,fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function p5d(a,b,c){var d,e;d=new P3d(a.e,3,13,null,(e=b.c,e?e:(JTd(),wTd)),fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function Oee(a,b){var c,d;c=RD(b,691);d=c.el();!d&&c.fl(d=ZD(b,90)?new afe(a,RD(b,29)):new mfe(a,RD(b,156)));return d} +function KHd(a,b,c){var d;a._i(a.i+1);d=a.Zi(b,c);b!=a.i&&hib(a.g,b,a.g,b+1,a.i-b);bD(a.g,b,d);++a.i;a.Mi(b,c);a.Ni()} +function Hyb(a,b){var c;if(b.a){c=b.a.a.length;!a.a?(a.a=new dib(a.d)):Zhb(a.a,a.b);Xhb(a.a,b.a,b.d.length,c)}return a} +function wib(a,b){var c;a.c=b;a.a=pjb(b);a.a<54&&(a.f=(c=b.d>1?DFb(b.a[0],b.a[1]):DFb(b.a[0],0),Xdb(b.e>0?c:Odb(c))))} +function MDb(a,b){var c;c=new IEb;if(!a.a.Bd(c)){LCb(a);return Kvb(),Kvb(),Jvb}return Kvb(),new Ovb(uFb(LDb(a,c.a,b)))} +function t9b(a,b){var c;if(a.c.length==0){return}c=RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199);Znb(c,new F9b);q9b(c,b)} +function z9b(a,b){var c;if(a.c.length==0){return}c=RD(anb(a,$C(jR,WAe,10,a.c.length,0,1)),199);Znb(c,new K9b);q9b(c,b)} +function pb(a,b){return bE(a)?lhb(a,b):_D(a)?Lfb(a,b):$D(a)?(uFb(a),dE(a)===dE(b)):YD(a)?a.Fb(b):aD(a)?mb(a,b):Hz(a,b)} +function Cvd(a,b,c){if(b<0){Tvd(a,c)}else{if(!c.rk()){throw Adb(new agb(KHe+c.xe()+LHe))}RD(c,69).wk().Ek(a,a.hi(),b)}} +function xFb(a,b,c){if(a<0||b>c){throw Adb(new veb(_xe+a+bye+b+', size: '+c))}if(a>b){throw Adb(new agb(_xe+a+aye+b))}} +function oVd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (source: ';Nhb(b,a.d);b.a+=')';return b.a} +function JSd(a){if(a>=65&&a<=70){return a-65+10}if(a>=97&&a<=102){return a-97+10}if(a>=48&&a<=57){return a-48}return 0} +function lMb(a){hMb();var b,c,d,e;for(c=nMb(),d=0,e=c.length;d<e;++d){b=c[d];if(Wmb(b.a,a,0)!=-1){return b}}return gMb} +function zde(a,b){var c,d,e,f;b.ej(a.a);f=RD(Ywd(a.a,8),2035);if(f!=null){for(c=f,d=0,e=c.length;d<e;++d){null.Um()}}} +function _Vd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,2,c,b))} +function EYd(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,8,c,b))} +function j1d(a,b){var c;c=(a.Bb&256)!=0;b?(a.Bb|=256):(a.Bb&=-257);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,8,c,b))} +function aWd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,3,c,b))} +function FYd(a,b){var c;c=(a.Bb&512)!=0;b?(a.Bb|=512):(a.Bb&=-513);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,9,c,b))} +function m2d(a,b,c){var d,e;e=a.a;a.a=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,5,e,a.a);!c?(c=d):oKd(c,d)}return c} +function kle(a,b){var c;if(a.b==-1&&!!a.a){c=a.a.pk();a.b=!c?BYd(a.c.Dh(),a.a):a.c.Hh(a.a.Lj(),c)}return a.c.yh(a.b,b)} +function t0d(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),29);if(dE(b)===dE(c)){return true}}return false} +function a9b(a){var b,c;b=a.k;if(b==(r3b(),m3b)){c=RD(mQb(a,(Ywc(),hwc)),64);return c==(qpd(),Yod)||c==npd}return false} +function QCb(a){var b;b=RCb(a);if(Gdb(b.a,0)){return Tvb(),Tvb(),Svb}return Tvb(),new Yvb(Idb(b.a,0)?Orb(b)/Xdb(b.a):0)} +function Aib(a,b){this.e=b;this.a=Dib(a);this.a<54?(this.f=Xdb(a)):(this.c=(Pib(),Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a)))))} +function G0b(a,b,c,d,e,f){this.e=new bnb;this.f=(BEc(),AEc);Rmb(this.e,a);this.d=b;this.a=c;this.b=d;this.f=e;this.c=f} +function bQb(a,b,c){a.n=YC(lE,[Nve,rxe],[376,28],14,[c,eE($wnd.Math.ceil(b/32))],2);a.o=b;a.p=c;a.j=b-1>>1;a.k=c-1>>1} +function ggb(a){a-=a>>1&1431655765;a=(a>>2&858993459)+(a&858993459);a=(a>>4)+a&252645135;a+=a>>8;a+=a>>16;return a&63} +function C4d(a,b){var c,d;for(d=new dMd(a);d.e!=d.i.gc();){c=RD(bMd(d),142);if(dE(b)===dE(c)){return true}}return false} +function Iee(a,b,c){var d,e,f;f=(e=N5d(a.b,b),e);if(f){d=RD(tfe(Pee(a,f),''),29);if(d){return Ree(a,d,b,c)}}return null} +function Lee(a,b,c){var d,e,f;f=(e=N5d(a.b,b),e);if(f){d=RD(tfe(Pee(a,f),''),29);if(d){return See(a,d,b,c)}}return null} +function IDd(a,b){var c;c=Ao(a.i,b);if(c==null){throw Adb(new CDd('Node did not exist in input.'))}wEd(b,c);return null} +function wvd(a,b){var c;c=wYd(a,b);if(ZD(c,331)){return RD(c,35)}throw Adb(new agb(KHe+b+"' is not a valid attribute"))} +function VGd(a,b,c){var d;d=a.gc();if(b>d)throw Adb(new aMd(b,d));if(a.Si()&&a.Hc(c)){throw Adb(new agb(LIe))}a.Gi(b,c)} +function w7b(a,b){b.Ug('Sort end labels',1);FDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new H7b),new J7b),new L7b);b.Vg()} +function Cmd(){Cmd=geb;Amd=new Gmd(Sye,0);zmd=new Gmd(Oye,1);ymd=new Gmd(Nye,2);xmd=new Gmd(Zye,3);Bmd=new Gmd('UP',4)} +function gbd(){gbd=geb;dbd=new hbd('P1_STRUCTURE',0);ebd=new hbd('P2_PROCESSING_ORDER',1);fbd=new hbd('P3_EXECUTION',2)} +function r0c(){r0c=geb;q0c=mfd(mfd(rfd(mfd(mfd(rfd(pfd(new ufd,(YVc(),VVc),(WYc(),VYc)),WVc),RYc),TYc),XVc),NYc),UYc)} +function s8b(a){switch(RD(mQb(a,(Ywc(),owc)),311).g){case 1:pQb(a,owc,(Gvc(),Dvc));break;case 2:pQb(a,owc,(Gvc(),Fvc));}} +function bUc(a){switch(a){case 0:return new mUc;case 1:return new cUc;case 2:return new hUc;default:throw Adb(new _fb);}} +function Fmd(a){switch(a.g){case 2:return zmd;case 1:return ymd;case 4:return xmd;case 3:return Bmd;default:return Amd;}} +function UNb(a,b){switch(a.b.g){case 0:case 1:return b;case 2:case 3:return new Uid(b.d,0,b.a,b.b);default:return null;}} +function rpd(a){switch(a.g){case 1:return ppd;case 2:return Yod;case 3:return Xod;case 4:return npd;default:return opd;}} +function spd(a){switch(a.g){case 1:return npd;case 2:return ppd;case 3:return Yod;case 4:return Xod;default:return opd;}} +function tpd(a){switch(a.g){case 1:return Xod;case 2:return npd;case 3:return ppd;case 4:return Yod;default:return opd;}} +function cyd(a,b,c,d){switch(b){case 1:return !a.n&&(a.n=new C5d(I4,a,1,7)),a.n;case 2:return a.k;}return Axd(a,b,c,d)} +function uLd(a,b,c){var d,e;if(a.Pj()){e=a.Qj();d=SHd(a,b,c);a.Jj(a.Ij(7,sgb(c),d,b,e));return d}else{return SHd(a,b,c)}} +function VNd(a,b){var c,d,e;if(a.d==null){++a.e;--a.f}else{e=b.ld();c=b.Bi();d=(c&lve)%a.d.length;iOd(a,d,XNd(a,d,c,e))}} +function xWd(a,b){var c;c=(a.Bb&gwe)!=0;b?(a.Bb|=gwe):(a.Bb&=-1025);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,10,c,b))} +function DWd(a,b){var c;c=(a.Bb&qxe)!=0;b?(a.Bb|=qxe):(a.Bb&=-4097);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,12,c,b))} +function EWd(a,b){var c;c=(a.Bb&bKe)!=0;b?(a.Bb|=bKe):(a.Bb&=-8193);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,15,c,b))} +function FWd(a,b){var c;c=(a.Bb&cKe)!=0;b?(a.Bb|=cKe):(a.Bb&=-2049);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,11,c,b))} +function zKc(a){var b;if(a.g){b=a.c.kg()?a.f:a.a;BKc(b.a,a.o,true);BKc(b.a,a.o,false);pQb(a.o,(yCc(),BBc),(Bod(),vod))}} +function Orc(a){var b;if(!a.a){throw Adb(new dgb('Cannot offset an unassigned cut.'))}b=a.c-a.b;a.b+=b;Qrc(a,b);Rrc(a,b)} +function JDd(a,b){var c;c=Wjb(a.k,b);if(c==null){throw Adb(new CDd('Port did not exist in input.'))}wEd(b,c);return null} +function Jje(a){var b,c;for(c=Kje(BXd(a)).Kc();c.Ob();){b=WD(c.Pb());if(bAd(a,b)){return USd((TSd(),SSd),b)}}return null} +function qJb(a){var b,c;for(c=a.p.a.ec().Kc();c.Ob();){b=RD(c.Pb(),218);if(b.f&&a.b[b.c]<-1.0E-10){return b}}return null} +function Lr(a){var b,c;c=Thb(new bib,91);b=true;while(a.Ob()){b||(c.a+=pve,c);b=false;Yhb(c,a.Pb())}return (c.a+=']',c).a} +function o_b(a){var b,c,d;b=new bnb;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),602);Tmb(b,RD(c.Cf(),16))}return b} +function TXb(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),42);Ymb(a.b.b,c.b);hYb(RD(c.a,194),RD(c.b,86))}} +function aRb(a,b){var c;c=Qfb(a.b.c,b.b.c);if(c!=0){return c}c=Qfb(a.a.a,b.a.a);if(c!=0){return c}return Qfb(a.a.b,b.a.b)} +function Qfb(a,b){if(a<b){return -1}if(a>b){return 1}if(a==b){return a==0?Qfb(1/a,1/b):0}return isNaN(a)?isNaN(b)?0:1:-1} +function pmb(a){var b;b=a.a[a.c-1&a.a.length-1];if(b==null){return null}a.c=a.c-1&a.a.length-1;bD(a.a,a.c,null);return b} +function Dqe(a){var b,c,d;d=0;c=a.length;for(b=0;b<c;b++){a[b]==32||a[b]==13||a[b]==10||a[b]==9||(a[d++]=a[b])}return d} +function Nge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);f=0;c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];g.am(d.Lk())&&++f}return f} +function tge(a,b,c){var d,e;e=ZD(b,102)&&(RD(b,19).Bb&txe)!=0?new She(b,a):new Phe(b,a);for(d=0;d<c;++d){Dhe(e)}return e} +function yrd(a,b,c){var d,e;if(a.c){Isd(a.c,b,c)}else{for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),163);yrd(d,b,c)}}} +function tGd(a,b,c){var d,e;d=RD(b.of(a.a),34);e=RD(c.of(a.a),34);return d!=null&&e!=null?Leb(d,e):d!=null?-1:e!=null?1:0} +function Ce(a,b){var c,d,e;uFb(b);c=false;for(d=new Anb(a);d.a<d.c.c.length;){e=ynb(d);if(b.Hc(e)){znb(d);c=true}}return c} +function xsb(a){var b,c,d,e;c=(b=RD(mfb((d=a.Rm,e=d.f,e==WI?d:e)),9),new Fsb(b,RD(WEb(b,b.length),9),0));zsb(c,a);return c} +function i2b(a){var b,c;c=RD(mQb(a,(yCc(),rAc)),88);if(c==(Cmd(),Amd)){b=Kfb(UD(mQb(a,Tzc)));return b>=1?zmd:xmd}return c} +function Xhc(a){switch(RD(mQb(a,(yCc(),yAc)),223).g){case 1:return new jqc;case 3:return new arc;default:return new dqc;}} +function MCb(a){if(a.c){MCb(a.c)}else if(a.d){throw Adb(new dgb("Stream already terminated, can't be modified or used"))}} +function Ltb(a,b,c){var d;d=a.a.get(b);a.a.set(b,c===undefined?null:c);if(d===undefined){++a.c;++a.b.g}else{++a.d}return d} +function HHc(a,b,c){var d,e;for(e=a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),10);if(Be(c,RD(Vmb(b,d.p),16))){return d}}return null} +function u0c(a,b,c){var d;d=0;!!b&&(Emd(a.a)?(d+=b.f.a/2):(d+=b.f.b/2));!!c&&(Emd(a.a)?(d+=c.f.a/2):(d+=c.f.b/2));return d} +function LWb(a,b,c){var d;d=c;!d&&(d=Nqd(new Oqd,0));d.Ug(EAe,2);y0b(a.b,b,d.eh(1));NWb(a,b,d.eh(1));h0b(b,d.eh(1));d.Vg()} +function CGd(a,b,c){var d,e;d=(bvd(),e=new Xxd,e);Vxd(d,b);Wxd(d,c);!!a&&WGd((!a.a&&(a.a=new XZd(D4,a,5)),a.a),d);return d} +function kyd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (identifier: ';Nhb(b,a.k);b.a+=')';return b.a} +function kXd(a,b){var c;c=(a.Bb&QHe)!=0;b?(a.Bb|=QHe):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,18,c,b))} +function a6d(a,b){var c;c=(a.Bb&QHe)!=0;b?(a.Bb|=QHe):(a.Bb&=-32769);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,18,c,b))} +function AWd(a,b){var c;c=(a.Bb&Ove)!=0;b?(a.Bb|=Ove):(a.Bb&=-16385);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,16,c,b))} +function c6d(a,b){var c;c=(a.Bb&txe)!=0;b?(a.Bb|=txe):(a.Bb&=-65537);(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new Q3d(a,1,20,c,b))} +function qse(a){var b;b=$C(hE,zwe,28,2,15,1);a-=txe;b[0]=(a>>10)+uxe&Bwe;b[1]=(a&1023)+56320&Bwe;return Ihb(b,0,b.length)} +function Zfb(a){var b;b=Neb(a);if(b>3.4028234663852886E38){return oxe}else if(b<-3.4028234663852886E38){return pxe}return b} +function Bdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a+b;if(jxe<c&&c<hxe){return c}}return Edb(sD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function Ndb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a*b;if(jxe<c&&c<hxe){return c}}return Edb(wD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function Vdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a-b;if(jxe<c&&c<hxe){return c}}return Edb(DD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b))} +function b3b(a,b){var c;a.i||V2b(a);c=RD(Vrb(a.g,b),42);return !c?(yob(),yob(),vob):new Rkb(a.j,RD(c.a,17).a,RD(c.b,17).a)} +function ZXb(a){NXb();return Geb(),IYb(RD(a.a,86).j,RD(a.b,88))||RD(a.a,86).d.e!=0&&IYb(RD(a.a,86).j,RD(a.b,88))?true:false} +function pWc(a,b){return lhb(!!b.b&&!!b.c?aXc(b.b)+'->'+aXc(b.c):'e_'+tb(b),!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))} +function rWc(a,b){return lhb(!!b.b&&!!b.c?aXc(b.b)+'->'+aXc(b.c):'e_'+tb(b),!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))} +function $y(a,b){Zy();return bz(pwe),$wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b))} +function Ymd(){Ymd=geb;Xmd=new Zmd(Sye,0);Vmd=new Zmd('POLYLINE',1);Umd=new Zmd('ORTHOGONAL',2);Wmd=new Zmd('SPLINES',3)} +function _6c(){_6c=geb;Z6c=new a7c('ASPECT_RATIO_DRIVEN',0);$6c=new a7c('MAX_SCALE_DRIVEN',1);Y6c=new a7c('AREA_DRIVEN',2)} +function Db(b,c,d){var e;try{Cb(b,c,d)}catch(a){a=zdb(a);if(ZD(a,606)){e=a;throw Adb(new Deb(e))}else throw Adb(a)}return c} +function Im(a){var b,c,d;for(c=0,d=a.length;c<d;c++){if(a[c]==null){throw Adb(new Ogb('at index '+c))}}b=a;return new mob(b)} +function W2b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.b)}return Qb(b),new Dl(b)} +function Z2b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.e)}return Qb(b),new Dl(b)} +function a3b(a){var b,c,d;b=new bnb;for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),12);Rmb(b,c.g)}return Qb(b),new Dl(b)} +function MBb(a,b){var c,d,e;e=new Tsb;for(d=b.vc().Kc();d.Ob();){c=RD(d.Pb(),44);Zjb(e,c.ld(),QBb(a,RD(c.md(),15)))}return e} +function Mje(a){var b,c;for(c=Nje(BXd(uWd(a))).Kc();c.Ob();){b=WD(c.Pb());if(bAd(a,b))return dTd((cTd(),bTd),b)}return null} +function Cgc(a,b){var c,d,e;e=0;for(d=RD(b.Kb(a),20).Kc();d.Ob();){c=RD(d.Pb(),18);Heb(TD(mQb(c,(Ywc(),Nwc))))||++e}return e} +function Uv(a){var b,c,d,e;b=new oq(a.Rd().gc());e=0;for(d=Nr(a.Rd().Kc());d.Ob();){c=d.Pb();nq(b,c,sgb(e++))}return sn(b.a)} +function Cvb(a,b,c,d){var e,f;uFb(d);uFb(c);e=a.xc(b);f=e==null?c:EBb(RD(e,15),RD(c,16));f==null?a.Bc(b):a.zc(b,f);return f} +function Unb(a,b,c,d){var e,f,g;for(e=b+1;e<c;++e){for(f=e;f>b&&d.Ne(a[f-1],a[f])>0;--f){g=a[f];bD(a,f,a[f-1]);bD(a,f-1,g)}}} +function Egd(a,b){var c,d,e,f,g;c=b.f;dub(a.c.d,c,b);if(b.g!=null){for(e=b.g,f=0,g=e.length;f<g;++f){d=e[f];dub(a.c.e,d,b)}}} +function YSc(a,b){var c,d;c=Sub(a,0);while(c.b!=c.d.c){d=Mfb(UD(evb(c)));if(d==b){return}else if(d>b){fvb(c);break}}cvb(c,b)} +function Kic(a,b){var c,d,e;d=Zjc(b);e=Kfb(UD(hFc(d,(yCc(),TBc))));c=$wnd.Math.max(0,e/2-0.5);Iic(b,c,1);Rmb(a,new hjc(b,c))} +function L5c(a,b,c){var d;c.Ug('Straight Line Edge Routing',1);c.dh(b,eFe);d=RD(Gxd(b,(u2c(),t2c)),27);M5c(a,d);c.dh(b,gFe)} +function K9c(a,b){a.n.c.length==0&&Rmb(a.n,new _9c(a.s,a.t,a.i));Rmb(a.b,b);W9c(RD(Vmb(a.n,a.n.c.length-1),209),b);M9c(a,b)} +function Zrb(a){var b;this.a=(b=RD(a.e&&a.e(),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.b=$C(jJ,rve,1,this.a.a.length,5,1)} +function jeb(a){var b;if(Array.isArray(a)&&a.Tm===keb){return nfb(rb(a))+'@'+(b=tb(a)>>>0,b.toString(16))}return a.toString()} +function jD(a,b){if(a.h==fxe&&a.m==0&&a.l==0){b&&(eD=hD(0,0,0));return gD((MD(),KD))}b&&(eD=hD(a.l,a.m,a.h));return hD(0,0,0)} +function _Gb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function IYb(a,b){switch(b.g){case 2:return a.b;case 1:return a.c;case 4:return a.d;case 3:return a.a;default:return false;}} +function vyd(a,b,c,d){switch(b){case 3:return a.f;case 4:return a.g;case 5:return a.i;case 6:return a.j;}return cyd(a,b,c,d)} +function oIb(a,b){if(b==a.d){return a.e}else if(b==a.e){return a.d}else{throw Adb(new agb('Node '+b+' not part of edge '+a))}} +function Uvd(a,b){var c;c=wYd(a.Dh(),b);if(ZD(c,102)){return RD(c,19)}throw Adb(new agb(KHe+b+"' is not a valid reference"))} +function Bvd(a,b,c,d){if(b<0){Svd(a,c,d)}else{if(!c.rk()){throw Adb(new agb(KHe+c.xe()+LHe))}RD(c,69).wk().Ck(a,a.hi(),b,d)}} +function ig(a){var b;if(a.b){ig(a.b);if(a.b.d!=a.c){throw Adb(new Jrb)}}else if(a.d.dc()){b=RD(a.f.c.xc(a.e),16);!!b&&(a.d=b)}} +function VMb(a){RMb();var b,c,d,e;b=a.o.b;for(d=RD(RD(Qc(a.r,(qpd(),npd)),21),87).Kc();d.Ob();){c=RD(d.Pb(),117);e=c.e;e.b+=b}} +function SRb(a){var b,c,d;this.a=new Iub;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),16);b=new DRb;xRb(b,c);Ysb(this.a,b)}} +function fdc(a,b){var c,d,e;d=cdc(a,b);e=d[d.length-1]/2;for(c=0;c<d.length;c++){if(d[c]>=e){return b.c+c}}return b.c+b.b.gc()} +function lQd(a,b){jQd();var c,d,e,f;d=iZd(a);e=b;Wnb(d,0,d.length,e);for(c=0;c<d.length;c++){f=kQd(a,d[c],c);c!=f&&uLd(a,c,f)}} +function mSd(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++){if(zSd((BFb(d,a.length),a.charCodeAt(d)),b,c))return true}return false} +function ARb(a,b){var c,d;for(d=a.e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),272);if(Eid(b,c.d)||zid(b,c.d)){return true}}return false} +function oMc(a,b,c,d,e){var f,g,h;g=e;while(b.b!=b.c){f=RD(smb(b),10);h=RD(b3b(f,d).Xb(0),12);a.d[h.p]=g++;ZEb(c.c,h)}return g} +function vKb(a,b){var c,d,e,f,g,h;d=0;c=0;for(f=b,g=0,h=f.length;g<h;++g){e=f[g];if(e>0){d+=e;++c}}c>1&&(d+=a.d*(c-1));return d} +function FFd(a){var b,c,d,e,f;f=HFd(a);c=cve(a.c);d=!c;if(d){e=new MB;sC(f,'knownLayouters',e);b=new QFd(e);xgb(a.c,b)}return f} +function fHd(a){var b,c,d;d=new Qhb;d.a+='[';for(b=0,c=a.gc();b<c;){Nhb(d,Ghb(a.Vi(b)));++b<c&&(d.a+=pve,d)}d.a+=']';return d.a} +function kSd(a){if(a.e==null){return a}else !a.c&&(a.c=new lSd((a.f&256)!=0,a.i,a.a,a.d,(a.f&16)!=0,a.j,a.g,null));return a.c} +function pnc(a){if(a.k!=(r3b(),p3b)){return false}return yDb(new SDb(null,new Twb(new is(Mr(a3b(a).a.Kc(),new ir)))),new qnc)} +function hv(a){var b,c;if(ZD(a,306)){c=vm(RD(a,306));b=c;return b}else return ZD(a,441)?RD(a,441).a:ZD(a,59)?new Fv(a):new uv(a)} +function FSd(a){var b;if(a==null)return true;b=a.length;return b>0&&(BFb(b-1,a.length),a.charCodeAt(b-1)==58)&&!mSd(a,aSd,bSd)} +function Sib(a,b){var c;if(dE(a)===dE(b)){return true}if(ZD(b,92)){c=RD(b,92);return a.e==c.e&&a.d==c.d&&Tib(a,c.a)}return false} +function vpd(a){qpd();switch(a.g){case 4:return Yod;case 1:return Xod;case 3:return npd;case 2:return ppd;default:return opd;}} +function jBb(a){var b,c;if(a.b){return a.b}c=dBb?null:a.d;while(c){b=dBb?null:c.b;if(b){return b}c=dBb?null:c.d}return SAb(),RAb} +function LJb(a){var b,c,d;d=Kfb(UD(a.a.of((umd(),cmd))));for(c=new Anb(a.a.Sf());c.a<c.c.c.length;){b=RD(ynb(c),695);OJb(a,b,d)}} +function jz(a){var b,c,d,e;for(b=(a.j==null&&(a.j=(fA(),e=eA.me(a),hA(e))),a.j),c=0,d=b.length;c<d;++c){String.fromCharCode(10)}} +function OXb(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),42);Rmb(a.b.b,RD(c.b,86));gYb(RD(c.a,194),RD(c.b,86))}} +function nHc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Qmb(e,0,new R4b(a.a))}g3b(b,RD(Vmb(e,e.c.length-c),30));a.b[b.p]=c} +function EOc(a,b,c,d,e){dOc();rIb(uIb(tIb(sIb(vIb(new wIb,0),e.d.e-a),b),e.d));rIb(uIb(tIb(sIb(vIb(new wIb,0),c-e.a.e),e.a),d))} +function Ted(a,b){var c;if(a.d){if(Ujb(a.b,b)){return RD(Wjb(a.b,b),47)}else{c=b.dg();Zjb(a.b,b,c);return c}}else{return b.dg()}} +function hFb(b){var c=b.e;function d(a){if(!a||a.length==0){return ''}return '\t'+a.join('\n\t')} +return c&&(c.stack||d(b[xwe]))} +function wyd(a,b){switch(b){case 3:return a.f!=0;case 4:return a.g!=0;case 5:return a.i!=0;case 6:return a.j!=0;}return fyd(a,b)} +function y2c(a){switch(a.g){case 0:return new D5c;case 1:return new N5c;default:throw Adb(new agb(lBe+(a.f!=null?a.f:''+a.g)));}} +function Z3c(a){switch(a.g){case 0:return new G5c;case 1:return new J5c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function h4c(a){switch(a.g){case 1:return new F3c;case 2:return new x3c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function mdd(a){switch(a.g){case 0:return new Ddd;case 1:return new Hdd;default:throw Adb(new agb(eGe+(a.f!=null?a.f:''+a.g)));}} +function Owb(){Hwb();var a,b,c;c=Gwb+++Date.now();a=eE($wnd.Math.floor(c*Nxe))&Pxe;b=eE(c-a*Oxe);this.a=a^1502;this.b=b^Mxe} +function cxc(){cxc=geb;bxc=new dxc(LAe,0);Zwc=new dxc('FIRST',1);$wc=new dxc(oBe,2);_wc=new dxc('LAST',3);axc=new dxc(pBe,4)} +function Grd(){Grd=geb;Frd=new Hrd(mEe,0);Crd=new Hrd('GROUP_DEC',1);Erd=new Hrd('GROUP_MIXED',2);Drd=new Hrd('GROUP_INC',3)} +function cEd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new wFd(a);Ozd(c.a,(uFb(e),e));f=vDd(b,'y');d=new zFd(a);Pzd(d.a,(uFb(f),f))}} +function nEd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new BFd(a);Hzd(c.a,(uFb(e),e));f=vDd(b,'y');d=new CFd(a);Izd(d.a,(uFb(f),f))}} +function Sje(a,b){var c,d,e,f;e=new cnb(b.gc());for(d=b.Kc();d.Ob();){c=d.Pb();f=Rje(a,RD(c,58));!!f&&(ZEb(e.c,f),true)}return e} +function ze(a,b,c){var d,e;for(e=a.Kc();e.Ob();){d=e.Pb();if(dE(b)===dE(d)||b!=null&&pb(b,d)){c&&e.Qb();return true}}return false} +function Y5b(a){var b,c,d;c=a.jh();if(c){b=a.Eh();if(ZD(b,167)){d=Y5b(RD(b,167));if(d!=null){return d+'.'+c}}return c}return null} +function pjb(a){var b,c,d;if(a.e==0){return 0}b=a.d<<5;c=a.a[a.d-1];if(a.e<0){d=Uib(a);if(d==a.d-1){--c;c=c|0}}b-=ngb(c);return b} +function kjb(a){var b,c,d;if(a<Nib.length){return Nib[a]}c=a>>5;b=a&31;d=$C(kE,Pwe,28,c+1,15,1);d[c]=1<<b;return new cjb(1,c+1,d)} +function eLd(a,b){var c,d;if(!b){return false}else{for(c=0;c<a.i;++c){d=RD(a.g[c],378);if(d.mj(b)){return false}}return WGd(a,b)}} +function ZId(a,b,c){var d,e;++a.j;if(c.dc()){return false}else{for(e=c.Kc();e.Ob();){d=e.Pb();a.qj(b,a.Zi(b,d));++b}return true}} +function OA(a,b,c,d){var e,f;f=c-b;if(f<3){while(f<3){a*=10;++f}}else{e=1;while(f>3){e*=10;--f}a=(a+(e>>1))/e|0}d.i=a;return true} +function BYd(a,b){var c,d,e;c=(a.i==null&&rYd(a),a.i);d=b.Lj();if(d!=-1){for(e=c.length;d<e;++d){if(c[d]==b){return d}}}return -1} +function T$d(a){var b,c,d,e,f;c=RD(a.g,689);for(d=a.i-1;d>=0;--d){b=c[d];for(e=0;e<d;++e){f=c[e];if(U$d(a,b,f)){THd(a,d);break}}}} +function PId(a){var b,c,d,e;b=new MB;for(e=new Ppb(a.b.Kc());e.b.Ob();){d=RD(e.b.Pb(),701);c=LFd(d);KB(b,b.a.length,c)}return b.a} +function VNb(a){var b;!a.c&&(a.c=new MNb);_mb(a.d,new aOb);SNb(a);b=LNb(a);FDb(new SDb(null,new Swb(a.d,16)),new tOb(a));return b} +function I6b(a,b){b.Ug('End label post-processing',1);FDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new N6b),new P6b),new R6b);b.Vg()} +function RCc(a){QCc();this.c=dv(cD(WC(g2,1),rve,845,0,[FCc]));this.b=new Tsb;this.a=a;Zjb(this.b,OCc,1);Umb(PCc,new $rd(this))} +function wKb(a,b,c){kKb();fKb.call(this);this.a=YC(IN,[Nve,Mye],[603,217],0,[jKb,iKb],2);this.c=new Tid;this.g=a;this.f=b;this.d=c} +function gQb(a,b){this.n=YC(lE,[Nve,rxe],[376,28],14,[b,eE($wnd.Math.ceil(a/32))],2);this.o=a;this.p=b;this.j=a-1>>1;this.k=b-1>>1} +function Dfd(a){Afd();if(RD(a.of((umd(),pld)),181).Hc((dqd(),bqd))){RD(a.of(Lld),181).Fc((Pod(),Ood));RD(a.of(pld),181).Mc(bqd)}} +function ndc(a){var b,c;b=a.d==(btc(),Ysc);c=jdc(a);b&&!c||!b&&c?pQb(a.a,(yCc(),Rzc),(Rjd(),Pjd)):pQb(a.a,(yCc(),Rzc),(Rjd(),Ojd))} +function QCc(){QCc=geb;GCc();OCc=(yCc(),bCc);PCc=dv(cD(WC(V5,1),kEe,149,0,[SBc,TBc,VBc,WBc,ZBc,$Bc,_Bc,aCc,dCc,fCc,UBc,XBc,cCc]))} +function RDb(a,b){var c;c=RD(zDb(a,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);return c.Qc(__c(c.gc()))} +function nXc(a,b){var c,d;d=new zAb(a.a.ad(b,true));if(d.a.gc()<=1){throw Adb(new Ngb)}c=d.a.ec().Kc();c.Pb();return RD(c.Pb(),39)} +function lQc(a,b,c){var d,e;d=Kfb(a.p[b.i.p])+Kfb(a.d[b.i.p])+b.n.b+b.a.b;e=Kfb(a.p[c.i.p])+Kfb(a.d[c.i.p])+c.n.b+c.a.b;return e-d} +function XHd(a,b){var c;if(a.i>0){if(b.length<a.i){c=IMd(rb(b).c,a.i);b=c}hib(a.g,0,b,0,a.i)}b.length>a.i&&bD(b,a.i,null);return b} +function MXd(a){var b;if((a.Db&64)!=0)return QAd(a);b=new Shb(QAd(a));b.a+=' (instanceClassName: ';Nhb(b,a.D);b.a+=')';return b.a} +function ySd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BFb(c,a.length),a.charCodeAt(c));b<64&&(e=Rdb(e,Sdb(1,b)))}return e} +function Fjb(a,b,c){var d,e;d=Cdb(c,yxe);for(e=0;Ddb(d,0)!=0&&e<b;e++){d=Bdb(d,Cdb(a[e],yxe));a[e]=Ydb(d);d=Tdb(d,32)}return Ydb(d)} +function pge(a,b){var c,d,e,f;f=pke(a.e.Dh(),b);c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];if(f.am(d.Lk())){return false}}return true} +function QNd(a,b){var c,d,e;if(a.f>0){a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=XNd(a,e,d,b);return c!=-1}else{return false}} +function Nrb(a,b){var c,d;a.a=Bdb(a.a,1);a.c=$wnd.Math.min(a.c,b);a.b=$wnd.Math.max(a.b,b);a.d+=b;c=b-a.f;d=a.e+c;a.f=d-a.e-c;a.e=d} +function yyd(a,b){switch(b){case 3:Ayd(a,0);return;case 4:Cyd(a,0);return;case 5:Dyd(a,0);return;case 6:Eyd(a,0);return;}hyd(a,b)} +function c3b(a,b){switch(b.g){case 1:return dr(a.j,(J3b(),E3b));case 2:return dr(a.j,(J3b(),G3b));default:return yob(),yob(),vob;}} +function zm(a){tm();var b;b=a.Pc();switch(b.length){case 0:return sm;case 1:return new Dy(Qb(b[0]));default:return new Kx(Im(b));}} +function kMd(b,c){b.Xj();try{b.d.bd(b.e++,c);b.f=b.d.j;b.g=-1}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} +function a8d(){a8d=geb;$7d=new b8d;T7d=new e8d;U7d=new h8d;V7d=new k8d;W7d=new n8d;X7d=new q8d;Y7d=new t8d;Z7d=new w8d;_7d=new z8d} +function YA(a,b){WA();var c,d;c=_A(($A(),$A(),ZA));d=null;b==c&&(d=RD(Xjb(VA,a),624));if(!d){d=new XA(a);b==c&&$jb(VA,a,d)}return d} +function zDc(a){wDc();var b;(!a.q?(yob(),yob(),wob):a.q)._b((yCc(),iBc))?(b=RD(mQb(a,iBc),203)):(b=RD(mQb(Y2b(a),jBc),203));return b} +function hFc(a,b){var c,d;d=null;if(nQb(a,(yCc(),YBc))){c=RD(mQb(a,YBc),96);c.pf(b)&&(d=c.of(b))}d==null&&(d=mQb(Y2b(a),b));return d} +function Ze(a,b){var c,d,e;if(ZD(b,44)){c=RD(b,44);d=c.ld();e=Xv(a.Rc(),d);return Hb(e,c.md())&&(e!=null||a.Rc()._b(d))}return false} +function $Nd(a,b){var c,d,e;if(a.f>0){a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=WNd(a,e,d,b);if(c){return c.md()}}return null} +function qLd(a,b,c){var d,e,f;if(a.Pj()){d=a.i;f=a.Qj();KHd(a,d,b);e=a.Ij(3,null,b,d,f);!c?(c=e):c.nj(e)}else{KHd(a,a.i,b)}return c} +function f$d(a,b,c){var d,e;d=new P3d(a.e,4,10,(e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)),null,fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function e$d(a,b,c){var d,e;d=new P3d(a.e,3,10,null,(e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)),fZd(a,b),false);!c?(c=d):c.nj(d);return c} +function SMb(a){RMb();var b;b=new sjd(RD(a.e.of((umd(),nld)),8));if(a.B.Hc((dqd(),Ypd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b} +function jjb(a){Pib();var b,c;c=Ydb(a);b=Ydb(Udb(a,32));if(b!=0){return new bjb(c,b)}if(c>10||c<0){return new ajb(1,c)}return Lib[c]} +function Mdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a%b;if(jxe<c&&c<hxe){return c}}return Edb((iD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b,true),eD))} +function G8b(a,b){var c;D8b(b);c=RD(mQb(a,(yCc(),xAc)),283);!!c&&pQb(a,xAc,uuc(c));E8b(a.c);E8b(a.f);F8b(a.d);F8b(RD(mQb(a,cBc),214))} +function y7b(a){var b,c,d,e;d=t7b(a);_mb(d,r7b);e=a.d;e.c.length=0;for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),465);Tmb(e,b.b)}} +function cmc(a){var b;if(a.c==0){return}b=RD(Vmb(a.a,a.b),293);b.b==1?(++a.b,a.b<a.a.c.length&&gmc(RD(Vmb(a.a,a.b),293))):--b.b;--a.c} +function vdc(a){var b;b=a.a;do{b=RD(hs(new is(Mr(a3b(b).a.Kc(),new ir))),18).d.i;b.k==(r3b(),o3b)&&Rmb(a.e,b)}while(b.k==(r3b(),o3b))} +function RLc(a){this.e=$C(kE,Pwe,28,a.length,15,1);this.c=$C(xdb,Hye,28,a.length,16,1);this.b=$C(xdb,Hye,28,a.length,16,1);this.f=0} +function _Hc(a){var b,c;a.j=$C(iE,vxe,28,a.p.c.length,15,1);for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);a.j[b.p]=b.o.b/a.i}} +function L_c(a,b){var c,d,e,f;f=b.b.b;a.a=new Yub;a.b=$C(kE,Pwe,28,f,15,1);c=0;for(e=Sub(b.b,0);e.b!=e.d.c;){d=RD(evb(e),39);d.g=c++}} +function fad(a,b,c){var d,e,f,g;f=b-a.e;g=c-a.f;for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),172);U9c(d,d.s+f,d.t+g)}a.e=b;a.f=c} +function ose(a,b){var c,d;d=b.length;for(c=0;c<d;c+=2)rte(a,(BFb(c,b.length),b.charCodeAt(c)),(BFb(c+1,b.length),b.charCodeAt(c+1)))} +function G6c(a,b){b.Ug('Min Size Postprocessing',1);Ixd(a,(X6c(),W6c),$wnd.Math.max(Kfb(UD(Gxd(a,W6c))),Kfb(UD(Gxd(a,U6c)))));b.Vg()} +function Fpd(){Fpd=geb;Cpd=new A3b(15);Bpd=new mGd((umd(),tld),Cpd);Epd=new mGd(fmd,15);Dpd=new mGd(Sld,sgb(0));Apd=new mGd(Dkd,Yze)} +function Qpd(){Qpd=geb;Opd=new Rpd('PORTS',0);Ppd=new Rpd('PORT_LABELS',1);Npd=new Rpd('NODE_LABELS',2);Mpd=new Rpd('MINIMUM_SIZE',3)} +function f6c(){f6c=geb;c6c=new g6c('P1_WIDTH_APPROXIMATION',0);d6c=new g6c('P2_PACKING',1);e6c=new g6c('P3_WHITESPACE_ELIMINATION',2)} +function $je(a){if(a.b==null){while(a.a.Ob()){a.b=a.a.Pb();if(!RD(a.b,54).Jh()){return true}}a.b=null;return false}else{return true}} +function Pyb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.Ne(b,f.d);if(c&&d==0){return f}if(d>=0){f=f.a[1]}else{e=f;f=f.a[0]}}return e} +function Qyb(a,b,c){var d,e,f;e=null;f=a.b;while(f){d=a.a.Ne(b,f.d);if(c&&d==0){return f}if(d<=0){f=f.a[0]}else{e=f;f=f.a[1]}}return e} +function rmc(a,b,c,d){var e,f,g;e=false;if(Lmc(a.f,c,d)){Omc(a.f,a.a[b][c],a.a[b][d]);f=a.a[b];g=f[d];f[d]=f[c];f[c]=g;e=true}return e} +function Nqc(a,b,c){var d,e,f,g;e=RD(Wjb(a.b,c),183);d=0;for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),113);e[f.d.p]&&++d}return d} +function lte(a,b,c){var d,e;d=RD(Xjb(wse,b),122);e=RD(Xjb(xse,b),122);if(c){$jb(wse,a,d);$jb(xse,a,e)}else{$jb(xse,a,d);$jb(wse,a,e)}} +function qjb(a,b){var c,d,e,f;c=b>>5;b&=31;e=a.d+c+(b==0?0:1);d=$C(kE,Pwe,28,e,15,1);rjb(d,a.a,c,b);f=new cjb(a.e,e,d);Rib(f);return f} +function zGc(a,b){var c,d,e;for(d=new is(Mr(a3b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);e=c.d.i;if(e.c==b){return false}}return true} +function _Ec(a,b,c){var d,e,f,g,h;g=a.k;h=b.k;d=c[g.g][h.g];e=UD(hFc(a,d));f=UD(hFc(b,d));return $wnd.Math.max((uFb(e),e),(uFb(f),f))} +function lA(){if(Error.stackTraceLimit>0){$wnd.Error.stackTraceLimit=Error.stackTraceLimit=64;return true}return 'stack' in new Error} +function sGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))>0} +function uGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))<0} +function tGb(a,b){return Zy(),Zy(),bz(pwe),($wnd.Math.abs(a-b)<=pwe||a==b||isNaN(a)&&isNaN(b)?0:a<b?-1:a>b?1:cz(isNaN(a),isNaN(b)))<=0} +function Efb(a,b){var c=0;while(!b[c]||b[c]==''){c++}var d=b[c++];for(;c<b.length;c++){if(!b[c]||b[c]==''){continue}d+=a+b[c]}return d} +function MMd(a){var b,c;b=RD(Ywd(a.a,4),129);if(b!=null){c=$C(d6,IJe,424,b.length,0,1);hib(b,0,c,0,b.length);return c}else{return JMd}} +function kne(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} +function nne(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} +function one(a){var b,c,d,e,f;if(a==null)return null;f=new bnb;for(c=xAd(a),d=0,e=c.length;d<e;++d){b=c[d];Rmb(f,nue(b,true))}return f} +function vrd(a,b){var c,d,e;if(a.c){Ayd(a.c,b)}else{c=b-trd(a);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),163);vrd(d,trd(d)+c)}}} +function wrd(a,b){var c,d,e;if(a.c){Cyd(a.c,b)}else{c=b-urd(a);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),163);wrd(d,urd(d)+c)}}} +function Ihb(a,b,c){var d,e,f,g;f=b+c;AFb(b,f,a.length);g='';for(e=b;e<f;){d=$wnd.Math.min(e+10000,f);g+=Ehb(a.slice(e,d));e=d}return g} +function jMb(a){switch(a.g){case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:return true;default:return false;}} +function Ptc(){Ptc=geb;Ltc=new Rtc(CBe,0);Ktc=new Rtc(DBe,1);Ntc=new Rtc(BBe,2);Otc=new Rtc(MAe,3);Mtc=new Rtc('GREEDY_MODEL_ORDER',4)} +function kEc(){kEc=geb;hEc=new lEc(LAe,0);gEc=new lEc('NODES_AND_EDGES',1);iEc=new lEc('PREFER_EDGES',2);jEc=new lEc('PREFER_NODES',3)} +function mad(a,b,c,d,e,f){this.a=a;this.c=b;this.b=c;this.f=d;this.d=e;this.e=f;this.c>0&&this.b>0&&(this.g=Aad(this.c,this.b,this.a))} +function rC(f,a){var b=f.a;var c;a=String(a);b.hasOwnProperty(a)&&(c=b[a]);var d=(HC(),GC)[typeof c];var e=d?d(c):NC(typeof c);return e} +function uDd(a){var b,c,d;d=null;b=uIe in a.a;c=!b;if(c){throw Adb(new CDd('Every element must have an id.'))}d=tDd(qC(a,uIe));return d} +function Qqe(a){var b,c;c=Rqe(a);b=null;while(a.c==2){Mqe(a);if(!b){b=(Vse(),Vse(),++Use,new iue(2));hue(b,c);c=b}c.Jm(Rqe(a))}return c} +function jOd(a,b){var c,d,e;a._j();d=b==null?0:tb(b);e=(d&lve)%a.d.length;c=WNd(a,e,d,b);if(c){hOd(a,c);return c.md()}else{return null}} +function Qib(a,b){if(a.e>b.e){return 1}if(a.e<b.e){return -1}if(a.d>b.d){return a.e}if(a.d<b.d){return -b.e}return a.e*Ejb(a.a,b.a,a.d)} +function dfb(a){if(a>=48&&a<48+$wnd.Math.min(10,10)){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1} +function UHc(a,b){if(b.c==a){return b.d}else if(b.d==a){return b.c}throw Adb(new agb('Input edge is not connected to the input port.'))} +function Fae(a){if(mhb(FGe,a)){return Geb(),Feb}else if(mhb(GGe,a)){return Geb(),Eeb}else{throw Adb(new agb('Expecting true or false'))}} +function jFb(a){switch(typeof(a)){case jve:return ohb(a);case ive:return Nfb(a);case hve:return Jeb(a);default:return a==null?0:kFb(a);}} +function mfd(a,b){if(a.a<0){throw Adb(new dgb('Did not call before(...) or after(...) before calling add(...).'))}tfd(a,a.a,b);return a} +function FId(a){EId();if(ZD(a,162)){return RD(Wjb(CId,zK),294).Rg(a)}if(Ujb(CId,rb(a))){return RD(Wjb(CId,rb(a)),294).Rg(a)}return null} +function Wwd(a){var b,c;if((a.Db&32)==0){c=(b=RD(Ywd(a,16),29),AYd(!b?a.ii():b)-AYd(a.ii()));c!=0&&$wd(a,32,$C(jJ,rve,1,c,5,1))}return a} +function $wd(a,b,c){var d;if((a.Db&b)!=0){if(c==null){Zwd(a,b)}else{d=Xwd(a,b);d==-1?(a.Eb=c):bD(SD(a.Eb),d,c)}}else c!=null&&Twd(a,b,c)} +function tTc(a,b,c,d){var e,f;if(b.c.length==0){return}e=pTc(c,d);f=oTc(b);FDb(PDb(new SDb(null,new Swb(f,1)),new CTc),new GTc(a,c,e,d))} +function rmb(a,b){var c,d,e,f;d=a.a.length-1;c=b-a.b&d;f=a.c-b&d;e=a.c-a.b&d;zmb(c<e);if(c>=f){umb(a,b);return -1}else{vmb(a,b);return 1}} +function Hvd(a){var b,c,d;d=a.Jh();if(!d){b=0;for(c=a.Ph();c;c=c.Ph()){if(++b>wxe){return c.Qh()}d=c.Jh();if(!!d||c==a){break}}}return d} +function Ue(a,b){var c;if(dE(b)===dE(a)){return true}if(!ZD(b,21)){return false}c=RD(b,21);if(c.gc()!=a.gc()){return false}return a.Ic(c)} +function kNc(a,b){if(a.e<b.e){return -1}else if(a.e>b.e){return 1}else if(a.f<b.f){return -1}else if(a.f>b.f){return 1}return tb(a)-tb(b)} +function mhb(a,b){uFb(a);if(b==null){return false}if(lhb(a,b)){return true}return a.length==b.length&&lhb(a.toLowerCase(),b.toLowerCase())} +function Hgb(a){var b,c;if(Ddb(a,-129)>0&&Ddb(a,128)<0){return Jgb(),b=Ydb(a)+128,c=Igb[b],!c&&(c=Igb[b]=new zgb(a)),c}return new zgb(a)} +function U$b(){U$b=geb;T$b=new V$b(LAe,0);R$b=new V$b('INSIDE_PORT_SIDE_GROUPS',1);Q$b=new V$b('GROUP_MODEL_ORDER',2);S$b=new V$b(MAe,3)} +function ufe(a){var b;a.b||vfe(a,(b=Hee(a.e,a.a),!b||!lhb(GGe,$Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'qualified'))));return a.c} +function BA(a,b){var c,d;c=(BFb(b,a.length),a.charCodeAt(b));d=b+1;while(d<a.length&&(BFb(d,a.length),a.charCodeAt(d)==c)){++d}return d-b} +function dFb(a,b){(!b&&console.groupCollapsed!=null?console.groupCollapsed:console.group!=null?console.group:console.log).call(console,a)} +function EQb(a,b,c,d){d==a?(RD(c.b,68),RD(c.b,68),RD(d.b,68),RD(d.b,68).c.b):(RD(c.b,68),RD(c.b,68),RD(d.b,68),RD(d.b,68).c.b);BQb(d,b,a)} +function vRb(a){var b,c,d;b=0;for(c=new Anb(a.g);c.a<c.c.c.length;){RD(ynb(c),568);++b}d=new vQb(a.g,Kfb(a.a),a.c);vOb(d);a.g=d.b;a.d=d.a} +function Add(a,b,c){var d,e,f;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),225);d=new $Fb(RD(Wjb(a.a,e.b),68));Rmb(b.a,d);Add(a,d,e)}} +function D4d(a,b,c){var d,e,f;d=RD(QHd(o4d(a.a),b),89);f=(e=d.c,e?e:(JTd(),wTd));(f.Vh()?Vvd(a.b,RD(f,54)):f)==c?i2d(d):l2d(d,c);return f} +function cqc(a,b,c){b.b=$wnd.Math.max(b.b,-c.a);b.c=$wnd.Math.max(b.c,c.a-a.a);b.d=$wnd.Math.max(b.d,-c.b);b.a=$wnd.Math.max(b.a,c.b-a.b)} +function JXb(a,b,c){this.c=a;this.f=new bnb;this.e=new pjd;this.j=new KYb;this.n=new KYb;this.b=b;this.g=new Uid(b.c,b.d,b.b,b.a);this.a=c} +function iYb(a){var b,c,d,e;this.a=new Iub;this.d=new _sb;this.e=0;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!this.f&&(this.f=b);gYb(this,b)}} +function djb(a){Pib();if(a.length==0){this.e=0;this.d=1;this.a=cD(WC(kE,1),Pwe,28,15,[0])}else{this.e=1;this.d=a.length;this.a=a;Rib(this)}} +function dLb(a,b,c){fKb.call(this);this.a=$C(IN,Mye,217,(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])).length,0,1);this.b=a;this.d=b;this.c=c} +function zfc(a){var b,c,d,e,f,g;g=RD(mQb(a,(Ywc(),Awc)),12);pQb(g,Swc,a.i.n.b);b=s2b(a.e);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];Z0b(c,g)}} +function Afc(a){var b,c,d,e,f,g;c=RD(mQb(a,(Ywc(),Awc)),12);pQb(c,Swc,a.i.n.b);b=s2b(a.g);for(e=b,f=0,g=e.length;f<g;++f){d=e[f];Y0b(d,c)}} +function dRc(a,b){WQc();var c,d;for(d=new is(Mr(W2b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(c.d.i==b||c.c.i==b){return c}}return null} +function zee(a,b){var c,d;c=b.qi(a.a);if(c){d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),GIe));if(d!=null){return d}}return b.xe()} +function Aee(a,b){var c,d;c=b.qi(a.a);if(c){d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),GIe));if(d!=null){return d}}return b.xe()} +function B7b(a,b){var c,d;c=hgb(a.a.c.p,b.a.c.p);if(c!=0){return c}d=hgb(a.a.d.i.p,b.a.d.i.p);if(d!=0){return d}return hgb(b.a.d.p,a.a.d.p)} +function Wje(a,b){var c,d,e,f;for(d=0,e=b.gc();d<e;++d){c=b.Tl(d);if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0){f=b.Ul(d);f!=null&&Rje(a,RD(f,58))}}} +function KSb(a,b){var c,d,e;Rmb(GSb,a);b.Fc(a);c=RD(Wjb(FSb,a),21);if(c){for(e=c.Kc();e.Ob();){d=RD(e.Pb(),27);Wmb(GSb,d,0)!=-1||KSb(d,b)}}} +function Omc(a,b,c){var d,e;BMc(a.e,b,c,(qpd(),ppd));BMc(a.i,b,c,Xod);if(a.a){e=RD(mQb(b,(Ywc(),Awc)),12);d=RD(mQb(c,Awc),12);CMc(a.g,e,d)}} +function mJc(a,b,c){var d,e,f;d=b.c.p;f=b.p;a.b[d][f]=new yJc(a,b);if(c){a.a[d][f]=new dJc(b);e=RD(mQb(b,(Ywc(),pwc)),10);!!e&&Rc(a.d,e,b)}} +function zIc(a,b,c){var d,e,f,g;f=b.j;g=c.j;if(f!=g){return f.g-g.g}else{d=a.f[b.p];e=a.f[c.p];return d==0&&e==0?0:d==0?-1:e==0?1:Qfb(d,e)}} +function Sz(){var a;if(Nz!=0){a=Date.now();if(a-Oz>2000){Oz=a;Pz=$wnd.setTimeout(Yz,10)}}if(Nz++==0){_z(($z(),Zz));return true}return false} +function lBb(a,b,c){var d;(bBb?(jBb(a),true):cBb?(SAb(),true):fBb?(SAb(),true):eBb&&(SAb(),false))&&(d=new aBb(b),d.b=c,hBb(a,d),undefined)} +function oNb(a,b){var c;c=!a.A.Hc((Qpd(),Ppd))||a.q==(Bod(),wod);a.u.Hc((Pod(),Lod))?c?mNb(a,b):qNb(a,b):a.u.Hc(Nod)&&(c?nNb(a,b):rNb(a,b))} +function Bed(a){var b;if(dE(Gxd(a,(umd(),Xkd)))===dE((Fnd(),Dnd))){if(!vCd(a)){Ixd(a,Xkd,End)}else{b=RD(Gxd(vCd(a),Xkd),346);Ixd(a,Xkd,b)}}} +function _fc(a){var b,c;if(nQb(a.d.i,(yCc(),tBc))){b=RD(mQb(a.c.i,tBc),17);c=RD(mQb(a.d.i,tBc),17);return hgb(b.a,c.a)>0}else{return false}} +function g_b(a,b,c){return new Uid($wnd.Math.min(a.a,b.a)-c/2,$wnd.Math.min(a.b,b.b)-c/2,$wnd.Math.abs(a.a-b.a)+c,$wnd.Math.abs(a.b-b.b)+c)} +function _mc(a){var b;this.d=new bnb;this.j=new pjd;this.g=new pjd;b=a.g.b;this.f=RD(mQb(Y2b(b),(yCc(),rAc)),88);this.e=Kfb(UD(k2b(b,ZBc)))} +function onc(a){this.d=new bnb;this.e=new gub;this.c=$C(kE,Pwe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.b=a} +function $pc(a,b,c){var d;d=c[a.g][b];switch(a.g){case 1:case 3:return new rjd(0,d);case 2:case 4:return new rjd(d,0);default:return null;}} +function Ced(b,c,d){var e,f;f=RD(ltd(c.f),205);try{f.rf(b,d);mtd(c.f,f)}catch(a){a=zdb(a);if(ZD(a,103)){e=a;throw Adb(e)}else throw Adb(a)}} +function tEd(a,b,c){var d,e,f,g,h,i;d=null;h=vgd(ygd(),b);f=null;if(h){e=null;i=zhd(h,c);g=null;i!=null&&(g=a.qf(h,i));e=g;f=e}d=f;return d} +function sSd(a,b,c,d){var e;e=a.length;if(b>=e)return e;for(b=b>0?b:0;b<e;b++){if(zSd((BFb(b,a.length),a.charCodeAt(b)),c,d))break}return b} +function anb(a,b){var c,d;d=a.c.length;b.length<d&&(b=cFb(new Array(d),b));for(c=0;c<d;++c){bD(b,c,a.c[c])}b.length>d&&bD(b,d,null);return b} +function lob(a,b){var c,d;d=a.a.length;b.length<d&&(b=cFb(new Array(d),b));for(c=0;c<d;++c){bD(b,c,a.a[c])}b.length>d&&bD(b,d,null);return b} +function Bde(a,b){var c,d;++a.j;if(b!=null){c=(d=a.a.Cb,ZD(d,99)?RD(d,99).th():null);if(Jnb(b,c)){$wd(a.a,4,c);return}}$wd(a.a,4,RD(b,129))} +function mne(a){var b;if(a==null)return null;b=Hqe(nue(a,true));if(b==null){throw Adb(new Mle("Invalid hexBinary value: '"+a+"'"))}return b} +function wA(a,b,c){var d;if(b.a.length>0){Rmb(a.b,new kB(b.a,c));d=b.a.length;0<d?(b.a=zhb(b.a,0,0)):0>d&&(b.a+=Hhb($C(hE,zwe,28,-d,15,1)))}} +function yIb(a,b,c){var d,e,f;if(c[b.d]){return}c[b.d]=true;for(e=new Anb(CIb(b));e.a<e.c.c.length;){d=RD(ynb(e),218);f=oIb(d,b);yIb(a,f,c)}} +function dub(a,b,c){var d,e,f;e=RD(Wjb(a.e,b),400);if(!e){d=new uub(a,b,c);Zjb(a.e,b,d);qub(d);return null}else{f=qlb(e,c);eub(a,e);return f}} +function r5d(a,b,c,d){var e,f,g;e=new P3d(a.e,1,13,(g=b.c,g?g:(JTd(),wTd)),(f=c.c,f?f:(JTd(),wTd)),fZd(a,b),false);!d?(d=e):d.nj(e);return d} +function nMb(){hMb();return cD(WC(XN,1),jwe,164,0,[eMb,dMb,fMb,XLb,WLb,YLb,_Lb,$Lb,ZLb,cMb,bMb,aMb,ULb,TLb,VLb,RLb,QLb,SLb,OLb,NLb,PLb,gMb])} +function jWc(a){switch(a.g){case 4:return new rjd(0,-1);case 1:return new rjd(1,0);case 2:return new rjd(-1,0);default:return new rjd(0,1);}} +function f_b(a){switch(a.g){case 1:return Cmd(),Bmd;case 4:return Cmd(),ymd;case 2:return Cmd(),zmd;case 3:return Cmd(),xmd;}return Cmd(),Amd} +function s$d(a){var b;b=a.hj(null);switch(b){case 10:return 0;case 15:return 1;case 14:return 2;case 11:return 3;case 21:return 4;}return -1} +function Yhd(){Yhd=geb;Whd=new Zhd('PARENTS',0);Vhd=new Zhd('NODES',1);Thd=new Zhd('EDGES',2);Xhd=new Zhd('PORTS',3);Uhd=new Zhd('LABELS',4)} +function AA(a,b,c){var d;d=c.q.getFullYear()-Owe+Owe;d<0&&(d=-d);switch(b){case 1:a.a+=d;break;case 2:UA(a,d%100,2);break;default:UA(a,d,b);}} +function Sub(a,b){var c,d;wFb(b,a.b);if(b>=a.b>>1){d=a.c;for(c=a.b;c>b;--c){d=d.b}}else{d=a.a.a;for(c=0;c<b;++c){d=d.a}}return new hvb(a,b,d)} +function DHb(){DHb=geb;CHb=new EHb('NUM_OF_EXTERNAL_SIDES_THAN_NUM_OF_EXTENSIONS_LAST',0);BHb=new EHb('CORNER_CASES_THAN_SINGLE_SIDE_LAST',1)} +function tnc(a){this.b=new bnb;this.e=new bnb;this.d=a;this.a=!QDb(CDb(new SDb(null,new Twb(new l4b(a.b))),new PAb(new unc))).Bd((xDb(),wDb))} +function ssc(a,b){var c,d,e,f;c=0;for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=d.o.a+d.d.c+d.d.b+a.j;c=$wnd.Math.max(c,f)}return c} +function OUc(a,b){var c,d,e;e=b.d.i;d=e.k;if(d==(r3b(),p3b)||d==l3b){return}c=new is(Mr(a3b(e).a.Kc(),new ir));gs(c)&&Zjb(a.k,b,RD(hs(c),18))} +function O0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.c.e.a,a.c.e.b):RD(Qub(a.a),8)).b,(b.a.b==0?new rjd(b.c.e.a,b.c.e.b):RD(Qub(b.a),8)).b)} +function P0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.c.e.a,a.c.e.b):RD(Qub(a.a),8)).a,(b.a.b==0?new rjd(b.c.e.a,b.c.e.b):RD(Qub(b.a),8)).a)} +function S0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.b.e.a,a.b.e.b):RD(Rub(a.a),8)).a,(b.a.b==0?new rjd(b.b.e.a,b.b.e.b):RD(Rub(b.a),8)).a)} +function Q0c(a,b){B0c();return Qfb((a.a.b==0?new rjd(a.b.e.a,a.b.e.b):RD(Rub(a.a),8)).b,(b.a.b==0?new rjd(b.b.e.a,b.b.e.b):RD(Rub(b.a),8)).b)} +function pod(){pod=geb;mod=new qod('DISTRIBUTED',0);ood=new qod('JUSTIFIED',1);kod=new qod('BEGIN',2);lod=new qod(Kye,3);nod=new qod('END',4)} +function Kvd(a,b){var c,d,e;d=vYd(a.Dh(),b);c=b-a.ji();return c<0?(e=a.Ih(d),e>=0?a.Wh(e):Rvd(a,d)):c<0?Rvd(a,d):RD(d,69).wk().Bk(a,a.hi(),c)} +function Fxd(a){var b,c,d;d=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o);for(c=d.c.Kc();c.e!=c.i.gc();){b=RD(c.Yj(),44);b.md()}return dOd(d)} +function iGd(a){var b;if(ZD(a.a,4)){b=FId(a.a);if(b==null){throw Adb(new dgb(HGe+a.b+"'. "+DGe+(lfb(b6),b6.k)+EGe))}return b}else{return a.a}} +function iSd(a,b){var c,d;if(a.j.length!=b.j.length)return false;for(c=0,d=a.j.length;c<d;c++){if(!lhb(a.j[c],b.j[c]))return false}return true} +function bMd(b){var c;try{c=b.i.Xb(b.e);b.Xj();b.g=b.e++;return c}catch(a){a=zdb(a);if(ZD(a,77)){b.Xj();throw Adb(new Dvb)}else throw Adb(a)}} +function xMd(b){var c;try{c=b.c.Vi(b.e);b.Xj();b.g=b.e++;return c}catch(a){a=zdb(a);if(ZD(a,77)){b.Xj();throw Adb(new Dvb)}else throw Adb(a)}} +function vSd(a){var b,c,d,e;e=0;for(c=0,d=a.length;c<d;c++){b=(BFb(c,a.length),a.charCodeAt(c));b>=64&&b<128&&(e=Rdb(e,Sdb(1,b-64)))}return e} +function k2b(a,b){var c,d;d=null;if(nQb(a,(umd(),amd))){c=RD(mQb(a,amd),96);c.pf(b)&&(d=c.of(b))}d==null&&!!Y2b(a)&&(d=mQb(Y2b(a),b));return d} +function i0b(a,b){var c;c=RD(mQb(a,(yCc(),RAc)),75);if(br(b,f0b)){if(!c){c=new Ejd;pQb(a,RAc,c)}else{Xub(c)}}else !!c&&pQb(a,RAc,null);return c} +function tSb(){tSb=geb;sSb=(umd(),Yld);mSb=Ukd;hSb=Dkd;nSb=tld;qSb=(YHb(),UHb);pSb=SHb;rSb=WHb;oSb=RHb;jSb=(eSb(),aSb);iSb=_Rb;kSb=cSb;lSb=dSb} +function PZb(a){NZb();this.c=new bnb;this.d=a;switch(a.g){case 0:case 2:this.a=Fob(MZb);this.b=oxe;break;case 3:case 1:this.a=MZb;this.b=pxe;}} +function c9b(a){var b;if(!Cod(RD(mQb(a,(yCc(),BBc)),101))){return}b=a.b;d9b((tFb(0,b.c.length),RD(b.c[0],30)));d9b(RD(Vmb(b,b.c.length-1),30))} +function ohc(a,b){b.Ug('Self-Loop post-processing',1);FDb(CDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new uhc),new whc),new yhc),new Ahc);b.Vg()} +function xrd(a,b,c){var d,e;if(a.c){Dyd(a.c,a.c.i+b);Eyd(a.c,a.c.j+c)}else{for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),163);xrd(d,b,c)}}} +function ine(a){var b;if(a==null)return null;b=Aqe(nue(a,true));if(b==null){throw Adb(new Mle("Invalid base64Binary value: '"+a+"'"))}return b} +function ju(b,c){var d;d=b.fd(c);try{return d.Pb()}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't get element "+c))}else throw Adb(a)}} +function ANb(a,b){var c,d,e;c=a.o;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);d.e.a=uNb(d,c.a);d.e.b=c.b*Kfb(UD(d.b.of(sNb)))}} +function kdc(a,b){var c,d,e;e=new cnb(b.gc());for(d=b.Kc();d.Ob();){c=RD(d.Pb(),292);c.c==c.f?_cc(a,c,c.c):adc(a,c)||(ZEb(e.c,c),true)}return e} +function i3b(a){var b;b=new bib;b.a+='n';a.k!=(r3b(),p3b)&&Zhb(Zhb((b.a+='(',b),ps(a.k).toLowerCase()),')');Zhb((b.a+='_',b),X2b(a));return b.a} +function h9b(a,b){var c,d,e,f;e=a.k;c=Kfb(UD(mQb(a,(Ywc(),Jwc))));f=b.k;d=Kfb(UD(mQb(b,Jwc)));return f!=(r3b(),m3b)?-1:e!=m3b?1:c==d?0:c<d?-1:1} +function Lad(a,b){var c,d;c=RD(RD(Wjb(a.g,b.a),42).a,68);d=RD(RD(Wjb(a.g,b.b),42).a,68);return bjd(b.a,b.b)-bjd(b.a,Pid(c.b))-bjd(b.b,Pid(d.b))} +function GMb(a,b){var c;c=RD(Vrb(a.b,b),127).n;switch(b.g){case 1:a.t>=0&&(c.d=a.t);break;case 3:a.t>=0&&(c.a=a.t);}if(a.C){c.b=a.C.b;c.c=a.C.c}} +function JDc(){JDc=geb;IDc=new LDc(mEe,0);FDc=new LDc(BBe,1);GDc=new LDc('LINEAR_SEGMENTS',2);EDc=new LDc('BRANDES_KOEPF',3);HDc=new LDc(lEe,4)} +function IRb(){IRb=geb;FRb=new JRb(_ye,0);ERb=new JRb(aze,1);GRb=new JRb(bze,2);HRb=new JRb(cze,3);FRb.a=false;ERb.a=true;GRb.a=false;HRb.a=true} +function IPb(){IPb=geb;FPb=new JPb(_ye,0);EPb=new JPb(aze,1);GPb=new JPb(bze,2);HPb=new JPb(cze,3);FPb.a=false;EPb.a=true;GPb.a=false;HPb.a=true} +function Ivd(a,b,c,d){var e;if(c>=0){return a.Sh(b,c,d)}else{!!a.Ph()&&(d=(e=a.Fh(),e>=0?a.Ah(d):a.Ph().Th(a,-1-e,null,d)));return a.Ch(b,c,d)}} +function Zyd(a,b){switch(b){case 7:!a.e&&(a.e=new Yie(G4,a,7,4));sLd(a.e);return;case 8:!a.d&&(a.d=new Yie(G4,a,8,5));sLd(a.d);return;}yyd(a,b)} +function Ixd(a,b,c){c==null?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),jOd(a.o,b)):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),fOd(a.o,b,c));return a} +function Aob(a,b){yob();var c,d,e,f;c=a;f=b;if(ZD(a,21)&&!ZD(b,21)){c=b;f=a}for(e=c.Kc();e.Ob();){d=e.Pb();if(f.Hc(d)){return false}}return true} +function qTc(a,b,c,d){if(b.a<d.a){return true}else if(b.a==d.a){if(b.b<d.b){return true}else if(b.b==d.b){if(a.b>c.b){return true}}}return false} +function QD(a,b){if(bE(a)){return !!PD[b]}else if(a.Sm){return !!a.Sm[b]}else if(_D(a)){return !!OD[b]}else if($D(a)){return !!ND[b]}return false} +function udc(a){var b;b=a.a;do{b=RD(hs(new is(Mr(Z2b(b).a.Kc(),new ir))),18).c.i;b.k==(r3b(),o3b)&&a.b.Fc(b)}while(b.k==(r3b(),o3b));a.b=hv(a.b)} +function UGc(a,b){var c,d,e;e=a;for(d=new is(Mr(Z2b(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);!!c.c.i.c&&(e=$wnd.Math.max(e,c.c.i.c.p))}return e} +function INb(a,b){var c,d,e;e=0;d=RD(RD(Qc(a.r,b),21),87).Kc();while(d.Ob()){c=RD(d.Pb(),117);e+=c.d.d+c.b.Mf().b+c.d.a;d.Ob()&&(e+=a.w)}return e} +function AMb(a,b){var c,d,e;e=0;d=RD(RD(Qc(a.r,b),21),87).Kc();while(d.Ob()){c=RD(d.Pb(),117);e+=c.d.b+c.b.Mf().a+c.d.c;d.Ob()&&(e+=a.w)}return e} +function O2c(a){var b,c,d,e;d=0;e=Q2c(a);if(e.c.length==0){return 1}else{for(c=new Anb(e);c.a<c.c.c.length;){b=RD(ynb(c),27);d+=O2c(b)}}return d} +function aIc(a){var b,c,d;d=a.c.a;a.p=(Qb(d),new dnb(d));for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),10);b.p=eIc(b).a}yob();_mb(a.p,new nIc)} +function UJd(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.Pj()){f=a.Qj();g=cJd(a,d);e=a.Ij(4,g,null,d,f);!c?(c=e):c.nj(e)}else{cJd(a,d)}}return c} +function rLd(a,b,c){var d,e,f,g;d=a.dd(b);if(d!=-1){if(a.Pj()){f=a.Qj();g=THd(a,d);e=a.Ij(4,g,null,d,f);!c?(c=e):c.nj(e)}else{THd(a,d)}}return c} +function Tje(a,b,c,d){var e,f,g;if(c.Xh(b)){nke();if(wWd(b)){e=RD(c.Mh(b),160);Wje(a,e)}else{f=(g=b,!g?null:RD(d,54).gi(g));!!f&&Uje(c.Mh(b),f)}}} +function Dvd(a,b,c,d){var e,f,g;f=vYd(a.Dh(),b);e=b-a.ji();return e<0?(g=a.Ih(f),g>=0?a.Lh(g,c,true):Qvd(a,f,c)):RD(f,69).wk().yk(a,a.hi(),e,c,d)} +function aNb(a,b,c,d){var e,f;f=b.pf((umd(),ild))?RD(b.of(ild),21):a.j;e=lMb(f);if(e==(hMb(),gMb)){return}if(c&&!jMb(e)){return}LKb(cNb(a,e,d),b)} +function Y6b(a){switch(a.g){case 1:return mOb(),lOb;case 3:return mOb(),iOb;case 2:return mOb(),kOb;case 4:return mOb(),jOb;default:return null;}} +function kmc(a,b,c){if(a.e){switch(a.b){case 1:Ulc(a.c,b,c);break;case 0:Vlc(a.c,b,c);}}else{Slc(a.c,b,c)}a.a[b.p][c.p]=a.c.i;a.a[c.p][b.p]=a.c.e} +function LLc(a){var b,c;if(a==null){return null}c=$C(jR,Nve,199,a.length,0,2);for(b=0;b<c.length;b++){c[b]=RD(Gnb(a[b],a[b].length),199)}return c} +function Dhe(a){var b;if(Bhe(a)){Ahe(a);if(a.ul()){b=Bge(a.e,a.b,a.c,a.a,a.j);a.j=b}a.g=a.a;++a.a;++a.c;a.i=0;return a.j}else{throw Adb(new Dvb)}} +function YOb(a,b){var c,d,e,f;f=a.o;c=a.p;f<c?(f*=f):(c*=c);d=f+c;f=b.o;c=b.p;f<c?(f*=f):(c*=c);e=f+c;if(d<e){return -1}if(d==e){return 0}return 1} +function fZd(a,b){var c,d,e;e=RHd(a,b);if(e>=0)return e;if(a.ol()){for(d=0;d<a.i;++d){c=a.pl(RD(a.g[d],58));if(dE(c)===dE(b)){return d}}}return -1} +function eHd(a,b,c){var d,e;e=a.gc();if(b>=e)throw Adb(new aMd(b,e));if(a.Si()){d=a.dd(c);if(d>=0&&d!=b){throw Adb(new agb(LIe))}}return a.Xi(b,c)} +function wx(a,b){this.a=RD(Qb(a),253);this.b=RD(Qb(b),253);if(a.Ed(b)>0||a==(Wk(),Vk)||b==(kl(),jl)){throw Adb(new agb('Invalid range: '+Dx(a,b)))}} +function p_b(a){var b,c;this.b=new bnb;this.c=a;this.a=false;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),10);this.a=this.a|b.k==(r3b(),p3b)}} +function xIb(a,b){var c,d,e;c=eJb(new gJb,a);for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),125);rIb(uIb(tIb(vIb(sIb(new wIb,0),0),c),d))}return c} +function y0b(a,b,c){c.Ug('Compound graph preprocessor',1);a.a=new Tp;D0b(a,b,null);x0b(a,b);C0b(a);pQb(b,(Ywc(),_vc),a.a);a.a=null;akb(a.b);c.Vg()} +function aec(a,b,c){var d,e,f;for(e=new is(Mr((b?Z2b(a):a3b(a)).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);f=b?d.c.i:d.d.i;f.k==(r3b(),n3b)&&g3b(f,c)}} +function FZc(a,b){var c,d,e;b.Ug('Untreeify',1);c=RD(mQb(a,(q$c(),k$c)),15);for(e=c.Kc();e.Ob();){d=RD(e.Pb(),65);Mub(d.b.d,d);Mub(d.c.b,d)}b.Vg()} +function Znc(a){var b,c,d;for(d=RD(Qc(a.a,(Bnc(),znc)),15).Kc();d.Ob();){c=RD(d.Pb(),105);b=foc(c);Qnc(a,c,b[0],(joc(),goc),0);Qnc(a,c,b[1],ioc,1)}} +function $nc(a){var b,c,d;for(d=RD(Qc(a.a,(Bnc(),Anc)),15).Kc();d.Ob();){c=RD(d.Pb(),105);b=foc(c);Qnc(a,c,b[0],(joc(),goc),0);Qnc(a,c,b[1],ioc,1)}} +function wDc(){wDc=geb;uDc=new yDc(LAe,0);vDc=new yDc('PORT_POSITION',1);tDc=new yDc('NODE_SIZE_WHERE_SPACE_PERMITS',2);sDc=new yDc('NODE_SIZE',3)} +function z6c(){z6c=geb;w6c=new A6c('INTERACTIVE_NODE_REORDERER',0);y6c=new A6c('MIN_SIZE_PRE_PROCESSOR',1);x6c=new A6c('MIN_SIZE_POST_PROCESSOR',2)} +function Rjd(){Rjd=geb;Ljd=new Sjd('AUTOMATIC',0);Ojd=new Sjd(Nye,1);Pjd=new Sjd(Oye,2);Qjd=new Sjd('TOP',3);Mjd=new Sjd(Qye,4);Njd=new Sjd(Kye,5)} +function Pjb(a,b,c,d){Ljb();var e,f;e=0;for(f=0;f<c;f++){e=Bdb(Ndb(Cdb(b[f],yxe),Cdb(d,yxe)),Cdb(Ydb(e),yxe));a[f]=Ydb(e);e=Udb(e,32)}return Ydb(e)} +function qKb(a,b,c){var d,e;e=0;for(d=0;d<iKb;d++){e=$wnd.Math.max(e,gKb(a.a[b.g][d],c))}b==(ZJb(),XJb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.b));return e} +function Jwb(a,b){var c,d;lFb(b>0);if((b&-b)==b){return eE(b*Kwb(a,31)*4.6566128730773926E-10)}do{c=Kwb(a,31);d=c%b}while(c-d+(b-1)<0);return eE(d)} +function d2b(a,b,c){switch(c.g){case 1:a.a=b.a/2;a.b=0;break;case 2:a.a=b.a;a.b=b.b/2;break;case 3:a.a=b.a/2;a.b=b.b;break;case 4:a.a=0;a.b=b.b/2;}} +function Onc(a,b,c,d){var e,f;for(e=b;e<a.c.length;e++){f=(tFb(e,a.c.length),RD(a.c[e],12));if(c.Mb(f)){ZEb(d.c,f)}else{return e}}return a.c.length} +function u5c(a){switch(a.g){case 0:return null;case 1:return new _5c;case 2:return new R5c;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function U9c(a,b,c){var d,e;L9c(a,b-a.s,c-a.t);for(e=new Anb(a.n);e.a<e.c.c.length;){d=RD(ynb(e),209);Y9c(d,d.e+b-a.s);Z9c(d,d.f+c-a.t)}a.s=b;a.t=c} +function AIb(a){var b,c,d,e,f;c=0;for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),125);d.d=c++}b=zIb(a);f=null;b.c.length>1&&(f=xIb(a,b));return f} +function yqd(a){var b;b=Kfb(UD(Gxd(a,(umd(),lmd))))*$wnd.Math.sqrt((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i);return new rjd(b,b/Kfb(UD(Gxd(a,kmd))))} +function Dzd(a){var b;if(!!a.f&&a.f.Vh()){b=RD(a.f,54);a.f=RD(Vvd(a,b),84);a.f!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,8,b,a.f))}return a.f} +function Ezd(a){var b;if(!!a.i&&a.i.Vh()){b=RD(a.i,54);a.i=RD(Vvd(a,b),84);a.i!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,7,b,a.i))}return a.i} +function Z5d(a){var b;if(!!a.b&&(a.b.Db&64)!=0){b=a.b;a.b=RD(Vvd(a,b),19);a.b!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,21,b,a.b))}return a.b} +function UNd(a,b){var c,d,e;if(a.d==null){++a.e;++a.f}else{d=b.Bi();_Nd(a,a.f+1);e=(d&lve)%a.d.length;c=a.d[e];!c&&(c=a.d[e]=a.dk());c.Fc(b);++a.f}} +function Mge(a,b,c){var d;if(b.tk()){return false}else if(b.Ik()!=-2){d=b.ik();return d==null?c==null:pb(d,c)}else return b.qk()==a.e.Dh()&&c==null} +function Io(){var a;dk(16,fwe);a=Wp(16);this.b=$C(XF,ewe,302,a,0,1);this.c=$C(XF,ewe,302,a,0,1);this.a=null;this.e=null;this.i=0;this.f=a-1;this.g=0} +function j3b(a){v2b.call(this);this.k=(r3b(),p3b);this.j=(dk(6,iwe),new cnb(6));this.b=(dk(2,iwe),new cnb(2));this.d=new T2b;this.f=new C3b;this.a=a} +function wgc(a){var b,c;if(a.c.length<=1){return}b=tgc(a,(qpd(),npd));vgc(a,RD(b.a,17).a,RD(b.b,17).a);c=tgc(a,ppd);vgc(a,RD(c.a,17).a,RD(c.b,17).a)} +function vHc(a,b,c){var d,e;e=a.a.b;for(d=e.c.length;d<c;d++){Qmb(e,e.c.length,new R4b(a.a))}g3b(b,(tFb(c-1,e.c.length),RD(e.c[c-1],30)));a.b[b.p]=c} +function K_c(a,b){var c,d,e;a.b[b.g]=1;for(d=Sub(b.d,0);d.b!=d.d.c;){c=RD(evb(d),65);e=c.c;a.b[e.g]==1?Mub(a.a,c):a.b[e.g]==2?(a.b[e.g]=1):K_c(a,e)}} +function u3c(a,b,c,d){var e,f,g;e=d?RD(Qc(a.a,b),21):RD(Qc(a.b,b),21);for(g=e.Kc();g.Ob();){f=RD(g.Pb(),27);if(o3c(a,c,f)){return true}}return false} +function d$d(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),89);if(!!b.e||(!b.d&&(b.d=new XZd(o7,b,1)),b.d).i!=0){return true}}return false} +function o5d(a){var b,c;for(c=new dMd(a);c.e!=c.i.gc();){b=RD(bMd(c),89);if(!!b.e||(!b.d&&(b.d=new XZd(o7,b,1)),b.d).i!=0){return true}}return false} +function dIc(a){var b,c,d;b=0;for(d=new Anb(a.c.a);d.a<d.c.c.length;){c=RD(ynb(d),10);b+=Kr(new is(Mr(a3b(c).a.Kc(),new ir)))}return b/a.c.a.c.length} +function Tcd(){Tcd=geb;Scd=(Kcd(),Jcd);Qcd=new A3b(8);new mGd((umd(),tld),Qcd);new mGd(fmd,8);Rcd=Hcd;Ocd=xcd;Pcd=ycd;Ncd=new mGd(Mkd,(Geb(),false))} +function $dd(a,b,c){var d;c.Ug('Shrinking tree compaction',1);if(Heb(TD(mQb(b,(OQb(),MQb))))){Ydd(a,b.f);zQb(b.f,(d=b.c,d))}else{zQb(b.f,b.c)}c.Vg()} +function Uyd(a,b,c,d){switch(b){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),a.e;case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),a.d;}return vyd(a,b,c,d)} +function h2d(a){var b;if(!!a.a&&a.a.Vh()){b=RD(a.a,54);a.a=RD(Vvd(a,b),142);a.a!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,5,b,a.a))}return a.a} +function Xqe(a){if(a<48)return -1;if(a>102)return -1;if(a<=57)return a-48;if(a<65)return -1;if(a<=70)return a-65+10;if(a<97)return -1;return a-97+10} +function ck(a,b){if(a==null){throw Adb(new Ogb('null key in entry: null='+b))}else if(b==null){throw Adb(new Ogb('null value in entry: '+a+'=null'))}} +function Cr(a,b){var c,d;while(a.Ob()){if(!b.Ob()){return false}c=a.Pb();d=b.Pb();if(!(dE(c)===dE(d)||c!=null&&pb(c,d))){return false}}return !b.Ob()} +function aLb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[gKb(a.a[0],b),gKb(a.a[1],b),gKb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function bLb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[hKb(a.a[0],b),hKb(a.a[1],b),hKb(a.a[2],b)]);if(a.d){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function vIc(a,b,c){if(!Cod(RD(mQb(b,(yCc(),BBc)),101))){uIc(a,b,e3b(b,c));uIc(a,b,e3b(b,(qpd(),npd)));uIc(a,b,e3b(b,Yod));yob();_mb(b.j,new JIc(a))}} +function sUc(a){var b,c;a.c||vUc(a);c=new Ejd;b=new Anb(a.a);ynb(b);while(b.a<b.c.c.length){Mub(c,RD(ynb(b),418).a)}sFb(c.b!=0);Wub(c,c.c.b);return c} +function O9c(a,b,c){var d,e,f,g,h;h=a.r+b;a.r+=b;a.d+=c;d=c/a.n.c.length;e=0;for(g=new Anb(a.n);g.a<g.c.c.length;){f=RD(ynb(g),209);X9c(f,h,d,e);++e}} +function kHb(a){var b,c,d;a.b.a.$b();a.a=$C(hN,rve,60,a.c.c.a.b.c.length,0,1);b=0;for(d=new Anb(a.c.c.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);c.f=b++}} +function TYb(a){var b,c,d;a.b.a.$b();a.a=$C(bQ,rve,86,a.c.a.a.b.c.length,0,1);b=0;for(d=new Anb(a.c.a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);c.i=b++}} +function Er(a){var b;b=yr(a);if(!gs(a)){throw Adb(new veb('position (0) must be less than the number of elements that remained ('+b+')'))}return hs(a)} +function ZCb(a,b){var c;if(!a.a){c=$C(iE,vxe,28,0,15,1);ixb(a.b.a,new bDb(c));bFb(c,heb(iob.prototype.Me,iob,[]));a.a=new Lxb(c,a.d)}return zxb(a.a,b)} +function $Pb(b,c,d){var e;try{return PPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function _Pb(b,c,d){var e;try{return QPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function aQb(b,c,d){var e;try{return RPb(b,c+b.j,d+b.k)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function J8b(a){switch(a.g){case 1:return qpd(),ppd;case 4:return qpd(),Yod;case 3:return qpd(),Xod;case 2:return qpd(),npd;default:return qpd(),opd;}} +function Imc(a,b,c){if(b.k==(r3b(),p3b)&&c.k==o3b){a.d=Fmc(b,(qpd(),npd));a.b=Fmc(b,Yod)}if(c.k==p3b&&b.k==o3b){a.d=Fmc(c,(qpd(),Yod));a.b=Fmc(c,npd)}} +function Mmc(a,b){var c,d,e;e=b3b(a,b);for(d=e.Kc();d.Ob();){c=RD(d.Pb(),12);if(mQb(c,(Ywc(),Iwc))!=null||k4b(new l4b(c.b))){return true}}return false} +function RNc(a,b,c){c.Ug('Linear segments node placement',1);a.b=RD(mQb(b,(Ywc(),Qwc)),312);SNc(a,b);NNc(a,b);KNc(a,b);QNc(a);a.a=null;a.b=null;c.Vg()} +function W9c(a,b){Dyd(b,a.e+a.d+(a.c.c.length==0?0:a.b));Eyd(b,a.f);a.a=$wnd.Math.max(a.a,b.f);a.d+=b.g+(a.c.c.length==0?0:a.b);Rmb(a.c,b);return true} +function bad(a,b,c){var d,e,f,g;g=0;d=c/a.a.c.length;for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),172);U9c(e,e.s,e.t+g*d);O9c(e,a.d-e.r+b,d);++g}} +function Cid(a,b){var c,d,e,f,g,h;e=b.length-1;g=0;h=0;for(d=0;d<=e;d++){f=b[d];c=vid(e,d)*Iid(1-a,e-d)*Iid(a,d);g+=f.a*c;h+=f.b*c}return new rjd(g,h)} +function JHd(a,b){var c,d,e,f,g;c=b.gc();a._i(a.i+c);f=b.Kc();g=a.i;a.i+=c;for(d=g;d<a.i;++d){e=f.Pb();MHd(a,d,a.Zi(d,e));a.Mi(d,e);a.Ni()}return c!=0} +function TJd(a,b,c){var d,e,f;if(a.Pj()){d=a.Ej();f=a.Qj();++a.j;a.qj(d,a.Zi(d,b));e=a.Ij(3,null,b,d,f);!c?(c=e):c.nj(e)}else{$Id(a,a.Ej(),b)}return c} +function u0d(a,b,c){var d,e,f;d=RD(QHd(tYd(a.a),b),89);f=(e=d.c,ZD(e,90)?RD(e,29):(JTd(),zTd));((f.Db&64)!=0?Vvd(a.b,f):f)==c?i2d(d):l2d(d,c);return f} +function pne(a){var b;return a==null?null:new ejb((b=nue(a,true),b.length>0&&(BFb(0,b.length),b.charCodeAt(0)==43)?(BFb(1,b.length+1),b.substr(1)):b))} +function qne(a){var b;return a==null?null:new ejb((b=nue(a,true),b.length>0&&(BFb(0,b.length),b.charCodeAt(0)==43)?(BFb(1,b.length+1),b.substr(1)):b))} +function Syb(a,b,c,d,e,f,g,h){var i,j;if(!d){return}i=d.a[0];!!i&&Syb(a,b,c,i,e,f,g,h);Tyb(a,c,d.d,e,f,g,h)&&b.Fc(d);j=d.a[1];!!j&&Syb(a,b,c,j,e,f,g,h)} +function PPb(b,c,d){try{return Gdb(SPb(b,c,d),1)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function QPb(b,c,d){try{return Gdb(SPb(b,c,d),0)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function RPb(b,c,d){try{return Gdb(SPb(b,c,d),2)}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function lMd(b,c){if(b.g==-1){throw Adb(new cgb)}b.Xj();try{b.d.hd(b.g,c);b.f=b.d.j}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} +function Y7b(a){var b,c,d,e,f;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);b=0;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);e.p=b++}}} +function Ee(a,b){var c,d,e,f;f=a.gc();b.length<f&&(b=cFb(new Array(f),b));e=b;d=a.Kc();for(c=0;c<f;++c){bD(e,c,d.Pb())}b.length>f&&bD(b,f,null);return b} +function av(a,b){var c,d;d=a.gc();if(b==null){for(c=0;c<d;c++){if(a.Xb(c)==null){return c}}}else{for(c=0;c<d;c++){if(pb(b,a.Xb(c))){return c}}}return -1} +function Jd(a,b){var c,d,e;c=b.ld();e=b.md();d=a.xc(c);if(!(dE(e)===dE(d)||e!=null&&pb(e,d))){return false}if(d==null&&!a._b(c)){return false}return true} +function mD(a,b){var c,d,e;if(b<=22){c=a.l&(1<<b)-1;d=e=0}else if(b<=44){c=a.l;d=a.m&(1<<b-22)-1;e=0}else{c=a.l;d=a.m;e=a.h&(1<<b-44)-1}return hD(c,d,e)} +function pNb(a,b){switch(b.g){case 1:return a.f.n.d+a.t;case 3:return a.f.n.a+a.t;case 2:return a.f.n.c+a.s;case 4:return a.f.n.b+a.s;default:return 0;}} +function TNb(a,b){var c,d;d=b.c;c=b.a;switch(a.b.g){case 0:c.d=a.e-d.a-d.d;break;case 1:c.d+=a.e;break;case 2:c.c=a.e-d.a-d.d;break;case 3:c.c=a.e+d.d;}} +function QRb(a,b,c,d){var e,f;this.a=b;this.c=d;e=a.a;PRb(this,new rjd(-e.c,-e.d));$id(this.b,c);f=d/2;b.a?njd(this.b,0,f):njd(this.b,f,0);Rmb(a.c,this)} +function i2c(a,b,c,d){var e;this.c=a;this.d=b;e=new Yub;Pub(e,c,e.c.b,e.c);this.a=e;this.b=RD(mQb(d,(h_c(),H$c)),88);this.e=Kfb(UD(mQb(d,$$c)));h2c(this)} +function j5c(){j5c=geb;i5c=new l5c(LAe,0);g5c=new l5c(EBe,1);h5c=new l5c('EDGE_LENGTH_BY_POSITION',2);f5c=new l5c('CROSSING_MINIMIZATION_BY_POSITION',3)} +function uEd(a,b){var c,d;c=RD(Ao(a.g,b),27);if(c){return c}d=RD(Ao(a.j,b),123);if(d){return d}throw Adb(new CDd('Referenced shape does not exist: '+b))} +function Pk(b,c){var d,e;if(ZD(c,253)){e=RD(c,253);try{d=b.Ed(e);return d==0}catch(a){a=zdb(a);if(ZD(a,212)){return false}else throw Adb(a)}}return false} +function tWb(a,b){if(a.c==b){return a.d}else if(a.d==b){return a.c}else{throw Adb(new agb("Node 'one' must be either source or target of edge 'edge'."))}} +function rRc(a,b){if(a.c.i==b){return a.d.i}else if(a.d.i==b){return a.c.i}else{throw Adb(new agb('Node '+b+' is neither source nor target of edge '+a))}} +function $gc(a,b,c){c.Ug('Self-Loop ordering',1);FDb(GDb(CDb(CDb(EDb(new SDb(null,new Swb(b.b,16)),new chc),new ehc),new ghc),new ihc),new khc(a));c.Vg()} +function Fpc(a,b){var c;switch(b.g){case 2:case 4:c=a.a;a.c.d.n.b<c.d.n.b&&(c=a.c);Gpc(a,b,(enc(),dnc),c);break;case 1:case 3:Gpc(a,b,(enc(),anc),null);}} +function Ypc(a,b,c,d,e,f){var g,h,i,j,k;g=Wpc(b,c,f);h=c==(qpd(),Yod)||c==ppd?-1:1;j=a[c.g];for(k=0;k<j.length;k++){i=j[k];i>0&&(i+=e);j[k]=g;g+=h*(i+d)}} +function vsc(a){var b,c,d;d=a.f;a.n=$C(iE,vxe,28,d,15,1);a.d=$C(iE,vxe,28,d,15,1);for(b=0;b<d;b++){c=RD(Vmb(a.c.b,b),30);a.n[b]=ssc(a,c);a.d[b]=rsc(a,c)}} +function Xwd(a,b){var c,d,e;e=0;for(d=2;d<b;d<<=1){(a.Db&d)!=0&&++e}if(e==0){for(c=b<<=1;c<=128;c<<=1){if((a.Db&c)!=0){return 0}}return -1}else{return e}} +function Sge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);f=null;c=RD(a.g,124);for(e=0;e<a.i;++e){d=c[e];if(g.am(d.Lk())){!f&&(f=new YHd);WGd(f,d)}}!!f&&wLd(a,f)} +function ene(a){var b,c,d;if(!a)return null;if(a.dc())return '';d=new Qhb;for(c=a.Kc();c.Ob();){b=c.Pb();Nhb(d,WD(b));d.a+=' '}return qeb(d,d.a.length-1)} +function _C(a,b){var c=new Array(b);var d;switch(a){case 14:case 15:d=0;break;case 16:d=false;break;default:return c;}for(var e=0;e<b;++e){c[e]=d}return c} +function GGb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b()}Dmd(a.d)?(d=a.a.c):(d=a.a.d);Umb(d,new WGb(a));a.c.df(a);HGb(a)} +function oUb(a){var b,c,d,e;for(c=new Anb(a.e.c);c.a<c.c.c.length;){b=RD(ynb(c),289);for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),453);hUb(d)}YTb(b)}} +function gad(a){var b,c,d,e,f;d=0;f=0;e=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);f=$wnd.Math.max(f,b.r);d+=b.d+(e>0?a.c:0);++e}a.b=d;a.d=f} +function rKb(a,b){var c;c=cD(WC(iE,1),vxe,28,15,[qKb(a,(ZJb(),WJb),b),qKb(a,XJb,b),qKb(a,YJb,b)]);if(a.f){c[0]=$wnd.Math.max(c[0],c[2]);c[2]=c[0]}return c} +function cQb(b,c,d){var e;try{TPb(b,c+b.j,d+b.k,false,true)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function dQb(b,c,d){var e;try{TPb(b,c+b.j,d+b.k,true,false)}catch(a){a=zdb(a);if(ZD(a,77)){e=a;throw Adb(new veb(e.g+ize+c+pve+d+').'))}else throw Adb(a)}} +function u8b(a){var b;if(!nQb(a,(yCc(),dBc))){return}b=RD(mQb(a,dBc),21);if(b.Hc((dod(),Xnd))){b.Mc(Xnd);b.Fc(Znd)}else if(b.Hc(Znd)){b.Mc(Znd);b.Fc(Xnd)}} +function v8b(a){var b;if(!nQb(a,(yCc(),dBc))){return}b=RD(mQb(a,dBc),21);if(b.Hc((dod(),cod))){b.Mc(cod);b.Fc(aod)}else if(b.Hc(aod)){b.Mc(aod);b.Fc(cod)}} +function oqc(a,b,c,d){var e,f,g,h;a.a==null&&rqc(a,b);g=b.b.j.c.length;f=c.d.p;h=d.d.p;e=h-1;e<0&&(e=g-1);return f<=e?a.a[e]-a.a[f]:a.a[g-1]-a.a[f]+a.a[e]} +function Cud(a){var b,c;if(!a.b){a.b=fv(RD(a.f,27).kh().i);for(c=new dMd(RD(a.f,27).kh());c.e!=c.i.gc();){b=RD(bMd(c),135);Rmb(a.b,new Bud(b))}}return a.b} +function Dud(a){var b,c;if(!a.e){a.e=fv(wCd(RD(a.f,27)).i);for(c=new dMd(wCd(RD(a.f,27)));c.e!=c.i.gc();){b=RD(bMd(c),123);Rmb(a.e,new Rud(b))}}return a.e} +function yud(a){var b,c;if(!a.a){a.a=fv(tCd(RD(a.f,27)).i);for(c=new dMd(tCd(RD(a.f,27)));c.e!=c.i.gc();){b=RD(bMd(c),27);Rmb(a.a,new Fud(a,b))}}return a.a} +function DXd(b){var c;if(!b.C&&(b.D!=null||b.B!=null)){c=EXd(b);if(c){b.hl(c)}else{try{b.hl(null)}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}}return b.C} +function xMb(a){switch(a.q.g){case 5:uMb(a,(qpd(),Yod));uMb(a,npd);break;case 4:vMb(a,(qpd(),Yod));vMb(a,npd);break;default:wMb(a,(qpd(),Yod));wMb(a,npd);}} +function GNb(a){switch(a.q.g){case 5:DNb(a,(qpd(),Xod));DNb(a,ppd);break;case 4:ENb(a,(qpd(),Xod));ENb(a,ppd);break;default:FNb(a,(qpd(),Xod));FNb(a,ppd);}} +function G$b(a,b){var c,d,e;e=new pjd;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);w$b(c,e.a,0);e.a+=c.f.a+b;e.b=$wnd.Math.max(e.b,c.f.b)}e.b>0&&(e.b+=b);return e} +function I$b(a,b){var c,d,e;e=new pjd;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);w$b(c,0,e.b);e.b+=c.f.b+b;e.a=$wnd.Math.max(e.a,c.f.a)}e.a>0&&(e.a+=b);return e} +function l2b(a){var b,c,d;d=lve;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),10);nQb(b,(Ywc(),zwc))&&(d=$wnd.Math.min(d,RD(mQb(b,zwc),17).a))}return d} +function PLc(a,b){var c,d;if(b.length==0){return 0}c=lMc(a.a,b[0],(qpd(),ppd));c+=lMc(a.a,b[b.length-1],Xod);for(d=0;d<b.length;d++){c+=QLc(a,d,b)}return c} +function VUc(){HUc();this.c=new bnb;this.i=new bnb;this.e=new Iub;this.f=new Iub;this.g=new Iub;this.j=new bnb;this.a=new bnb;this.b=new Tsb;this.k=new Tsb} +function AXd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.Th(a,5,t7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?a.ii():c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function kA(a){fA();var b=a.e;if(b&&b.stack){var c=b.stack;var d=b+'\n';c.substring(0,d.length)==d&&(c=c.substring(d.length));return c.split('\n')}return []} +function pgb(a){var b;b=(wgb(),vgb);return b[a>>>28]|b[a>>24&15]<<4|b[a>>20&15]<<8|b[a>>16&15]<<12|b[a>>12&15]<<16|b[a>>8&15]<<20|b[a>>4&15]<<24|b[a&15]<<28} +function mmb(a){var b,c,d;if(a.b!=a.c){return}d=a.a.length;c=mgb($wnd.Math.max(8,d))<<1;if(a.b!=0){b=WEb(a.a,c);lmb(a,b,d);a.a=b;a.b=0}else{aFb(a.a,c)}a.c=d} +function uNb(a,b){var c;c=a.b;return c.pf((umd(),Gld))?c.ag()==(qpd(),ppd)?-c.Mf().a-Kfb(UD(c.of(Gld))):b+Kfb(UD(c.of(Gld))):c.ag()==(qpd(),ppd)?-c.Mf().a:b} +function X2b(a){var b;if(a.b.c.length!=0&&!!RD(Vmb(a.b,0),72).a){return RD(Vmb(a.b,0),72).a}b=R0b(a);if(b!=null){return b}return ''+(!a.c?-1:Wmb(a.c.a,a,0))} +function M3b(a){var b;if(a.f.c.length!=0&&!!RD(Vmb(a.f,0),72).a){return RD(Vmb(a.f,0),72).a}b=R0b(a);if(b!=null){return b}return ''+(!a.i?-1:Wmb(a.i.j,a,0))} +function skc(a,b){var c,d;if(b<0||b>=a.gc()){return null}for(c=b;c<a.gc();++c){d=RD(a.Xb(c),131);if(c==a.gc()-1||!d.o){return new Ptd(sgb(c),d)}}return null} +function Xrc(a,b,c){var d,e,f,g,h;f=a.c;h=c?b:a;d=c?a:b;for(e=h.p+1;e<d.p;++e){g=RD(Vmb(f.a,e),10);if(!(g.k==(r3b(),l3b)||Yrc(g))){return false}}return true} +function Ead(a){var b,c,d,e,f;f=0;e=pxe;d=0;for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),172);f+=b.r+(d>0?a.c:0);e=$wnd.Math.max(e,b.d);++d}a.e=f;a.b=e} +function Qud(a){var b,c;if(!a.b){a.b=fv(RD(a.f,123).kh().i);for(c=new dMd(RD(a.f,123).kh());c.e!=c.i.gc();){b=RD(bMd(c),135);Rmb(a.b,new Bud(b))}}return a.b} +function aHd(a,b){var c,d,e;if(b.dc()){return jQd(),jQd(),iQd}else{c=new ZLd(a,b.gc());for(e=new dMd(a);e.e!=e.i.gc();){d=bMd(e);b.Hc(d)&&WGd(c,d)}return c}} +function Axd(a,b,c,d){if(b==0){return d?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),dOd(a.o))}return Dvd(a,b,c,d)} +function rBd(a){var b,c;if(a.rb){for(b=0,c=a.rb.i;b<c;++b){aAd(QHd(a.rb,b))}}if(a.vb){for(b=0,c=a.vb.i;b<c;++b){aAd(QHd(a.vb,b))}}Uee((lke(),jke),a);a.Bb|=1} +function zBd(a,b,c,d,e,f,g,h,i,j,k,l,m,n){ABd(a,b,d,null,e,f,g,h,i,j,m,true,n);a6d(a,k);ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),2);!!c&&b6d(a,c);c6d(a,l);return a} +function Jae(b){var c,d;if(b==null){return null}d=0;try{d=Oeb(b,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){c=Ahb(b);d=c[0]}else throw Adb(a)}return hfb(d)} +function Kae(b){var c,d;if(b==null){return null}d=0;try{d=Oeb(b,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){c=Ahb(b);d=c[0]}else throw Adb(a)}return hfb(d)} +function rD(a,b){var c,d,e;e=a.h-b.h;if(e<0){return false}c=a.l-b.l;d=a.m-b.m+(c>>22);e+=d>>22;if(e<0){return false}a.l=c&dxe;a.m=d&dxe;a.h=e&exe;return true} +function Tyb(a,b,c,d,e,f,g){var h,i;if(b.Te()&&(i=a.a.Ne(c,d),i<0||!e&&i==0)){return false}if(b.Ue()&&(h=a.a.Ne(c,f),h>0||!g&&h==0)){return false}return true} +function Agc(a,b){sgc();var c;c=a.j.g-b.j.g;if(c!=0){return 0}switch(a.j.g){case 2:return Cgc(b,rgc)-Cgc(a,rgc);case 4:return Cgc(a,qgc)-Cgc(b,qgc);}return 0} +function uuc(a){switch(a.g){case 0:return nuc;case 1:return ouc;case 2:return puc;case 3:return quc;case 4:return ruc;case 5:return suc;default:return null;}} +function cBd(a,b,c){var d,e;d=(e=new R5d,YVd(e,b),PAd(e,c),WGd((!a.c&&(a.c=new C5d(u7,a,12,10)),a.c),e),e);$Vd(d,0);bWd(d,1);aWd(d,true);_Vd(d,true);return d} +function THd(a,b){var c,d;if(b>=a.i)throw Adb(new yNd(b,a.i));++a.j;c=a.g[b];d=a.i-b-1;d>0&&hib(a.g,b+1,a.g,b,d);bD(a.g,--a.i,null);a.Qi(b,c);a.Ni();return c} +function sWd(a,b){var c,d;if(a.Db>>16==17){return a.Cb.Th(a,21,h7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?a.ii():c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function _Fb(a){var b,c,d,e;yob();_mb(a.c,a.a);for(e=new Anb(a.c);e.a<e.c.c.length;){d=ynb(e);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),693);b.bf(d)}}} +function r$b(a){var b,c,d,e;yob();_mb(a.c,a.a);for(e=new Anb(a.c);e.a<e.c.c.length;){d=ynb(e);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),382);b.bf(d)}}} +function rJb(a){var b,c,d,e,f;e=lve;f=null;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),218);if(c.d.j^c.e.j){b=c.e.e-c.d.e-c.a;if(b<e){e=b;f=c}}}return f} +function QVb(){QVb=geb;OVb=new lGd(vAe,(Geb(),false));KVb=new lGd(wAe,100);MVb=(AWb(),yWb);LVb=new lGd(xAe,MVb);NVb=new lGd(yAe,Vze);PVb=new lGd(zAe,sgb(lve))} +function Xlc(a,b,c){var d,e,f,g,h,i,j,k;j=0;for(e=a.a[b],f=0,g=e.length;f<g;++f){d=e[f];k=aMc(d,c);for(i=k.Kc();i.Ob();){h=RD(i.Pb(),12);Zjb(a.f,h,sgb(j++))}}} +function UDd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new vue(e);for(g=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);g.Ob();){f=RD(g.Pb(),17);Rc(a,b,tDd(JB(c,f.a)))}}} +function VDd(a,b,c){var d,e,f,g;if(c){e=c.a.length;d=new vue(e);for(g=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);g.Ob();){f=RD(g.Pb(),17);Rc(a,b,tDd(JB(c,f.a)))}}} +function foc(a){Mnc();var b;b=RD(Ee(Ec(a.k),$C(E3,NAe,64,2,0,1)),126);Wnb(b,0,b.length,null);if(b[0]==(qpd(),Yod)&&b[1]==ppd){bD(b,0,ppd);bD(b,1,Yod)}return b} +function hMc(a,b,c){var d,e,f;e=fMc(a,b,c);f=iMc(a,e);YLc(a.b);CMc(a,b,c);yob();_mb(e,new HMc(a));d=iMc(a,e);YLc(a.b);CMc(a,c,b);return new Ptd(sgb(f),sgb(d))} +function JNc(){JNc=geb;GNc=pfd(new ufd,(sXb(),rXb),(hcc(),ybc));HNc=new kGd('linearSegments.inputPrio',sgb(0));INc=new kGd('linearSegments.outputPrio',sgb(0))} +function YVc(){YVc=geb;UVc=new $Vc('P1_TREEIFICATION',0);VVc=new $Vc('P2_NODE_ORDERING',1);WVc=new $Vc('P3_NODE_PLACEMENT',2);XVc=new $Vc('P4_EDGE_ROUTING',3)} +function yad(a){var b,c,d,e;c=0;b=0;for(e=new dMd(a);e.e!=e.i.gc();){d=RD(bMd(e),27);c=$wnd.Math.max(d.g+d.i,c);b=$wnd.Math.max(d.f+d.j,b)}return new rjd(c,b)} +function ard(a,b){var c,d,e,f;f=0;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),27);f+=$wnd.Math.pow(c.g*c.f-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function Pnd(){Pnd=geb;Ond=new Rnd('UNKNOWN',0);Lnd=new Rnd('ABOVE',1);Mnd=new Rnd('BELOW',2);Nnd=new Rnd('INLINE',3);new kGd('org.eclipse.elk.labelSide',Ond)} +function RHd(a,b){var c;if(a.Yi()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return c}}}else{for(c=0;c<a.i;++c){if(dE(a.g[c])===dE(b)){return c}}}return -1} +function L0b(a,b,c){var d,e;if(b.c==(BEc(),zEc)&&c.c==yEc){return -1}else if(b.c==yEc&&c.c==zEc){return 1}d=P0b(b.a,a.a);e=P0b(c.a,a.a);return b.c==zEc?e-d:d-e} +function f3b(a,b,c){if(!!c&&(b<0||b>c.a.c.length)){throw Adb(new agb('index must be >= 0 and <= layer node count'))}!!a.c&&Ymb(a.c.a,a);a.c=c;!!c&&Qmb(c.a,b,a)} +function Gac(a,b){var c,d,e;for(d=new is(Mr(W2b(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);e=RD(b.Kb(c),10);return new cc(Qb(e.n.b+e.o.b/2))}return wb(),wb(),vb} +function RQc(a,b){this.c=new Tsb;this.a=a;this.b=b;this.d=RD(mQb(a,(Ywc(),Qwc)),312);dE(mQb(a,(yCc(),eBc)))===dE((Cuc(),Auc))?(this.e=new BRc):(this.e=new uRc)} +function ftd(a,b){var c,d;d=null;if(a.pf((umd(),amd))){c=RD(a.of(amd),96);c.pf(b)&&(d=c.of(b))}d==null&&!!a.Tf()&&(d=a.Tf().of(b));d==null&&(d=iGd(b));return d} +function ku(b,c){var d,e;d=b.fd(c);try{e=d.Pb();d.Qb();return e}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't remove element "+c))}else throw Adb(a)}} +function GA(a,b){var c,d,e;d=new uB;e=new vB(d.q.getFullYear()-Owe,d.q.getMonth(),d.q.getDate());c=FA(a,b,e);if(c==0||c<b.length){throw Adb(new agb(b))}return e} +function iwb(a,b){var c,d,e;uFb(b);lFb(b!=a);e=a.b.c.length;for(d=b.Kc();d.Ob();){c=d.Pb();Rmb(a.b,uFb(c))}if(e!=a.b.c.length){jwb(a,0);return true}return false} +function dWb(){dWb=geb;XVb=(umd(),ald);new mGd(Pkd,(Geb(),true));$Vb=kld;_Vb=nld;aWb=pld;ZVb=ild;bWb=sld;cWb=Lld;WVb=(QVb(),OVb);UVb=LVb;VVb=NVb;YVb=PVb;TVb=KVb} +function U0b(a,b){if(b==a.c){return a.d}else if(b==a.d){return a.c}else{throw Adb(new agb("'port' must be either the source port or target port of the edge."))}} +function T6b(a,b,c){var d,e;e=a.o;d=a.d;switch(b.g){case 1:return -d.d-c;case 3:return e.b+d.a+c;case 2:return e.a+d.c+c;case 4:return -d.b-c;default:return 0;}} +function Y9b(a,b,c,d){var e,f,g,h;g3b(b,RD(d.Xb(0),30));h=d.kd(1,d.gc());for(f=RD(c.Kb(b),20).Kc();f.Ob();){e=RD(f.Pb(),18);g=e.c.i==b?e.d.i:e.c.i;Y9b(a,g,c,h)}} +function Bic(a){var b;b=new Tsb;if(nQb(a,(Ywc(),Vwc))){return RD(mQb(a,Vwc),85)}FDb(CDb(new SDb(null,new Swb(a.j,16)),new Dic),new Fic(b));pQb(a,Vwc,b);return b} +function zad(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),186);d=$wnd.Math.max(d,f.e);e+=f.b+(c>0?b:0);++c}return new rjd(d,e)} +function Czd(a,b){var c,d;if(a.Db>>16==6){return a.Cb.Th(a,6,G4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),hvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function cCd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Th(a,1,H4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),jvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function LCd(a,b){var c,d;if(a.Db>>16==9){return a.Cb.Th(a,9,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),lvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function M1d(a,b){var c,d;if(a.Db>>16==5){return a.Cb.Th(a,9,m7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),tTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function qBd(a,b){var c,d;if(a.Db>>16==7){return a.Cb.Th(a,6,t7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),CTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function iVd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Th(a,0,p7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),mTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function IEd(){this.a=new BDd;this.g=new Io;this.j=new Io;this.b=new Tsb;this.d=new Io;this.i=new Io;this.k=new Tsb;this.c=new Tsb;this.e=new Tsb;this.f=new Tsb} +function kQd(a,b,c){var d,e,f;c<0&&(c=0);f=a.i;for(e=c;e<f;e++){d=QHd(a,e);if(b==null){if(d==null){return e}}else if(dE(b)===dE(d)||pb(b,d)){return e}}return -1} +function Bee(a,b){var c,d;c=b.qi(a.a);if(!c){return null}else{d=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),_Ke));return lhb(aLe,d)?Uee(a,BXd(b.qk())):d}} +function Oje(a,b){var c,d;if(b){if(b==a){return true}c=0;for(d=RD(b,54).Ph();!!d&&d!=b;d=d.Ph()){if(++c>wxe){return Oje(a,d)}if(d==a){return true}}}return false} +function yNb(a){tNb();switch(a.q.g){case 5:vNb(a,(qpd(),Yod));vNb(a,npd);break;case 4:wNb(a,(qpd(),Yod));wNb(a,npd);break;default:xNb(a,(qpd(),Yod));xNb(a,npd);}} +function CNb(a){tNb();switch(a.q.g){case 5:zNb(a,(qpd(),Xod));zNb(a,ppd);break;case 4:ANb(a,(qpd(),Xod));ANb(a,ppd);break;default:BNb(a,(qpd(),Xod));BNb(a,ppd);}} +function RTb(a){var b,c;b=RD(mQb(a,(yVb(),mVb)),17);if(b){c=b.a;c==0?pQb(a,(JVb(),IVb),new Owb):pQb(a,(JVb(),IVb),new Pwb(c))}else{pQb(a,(JVb(),IVb),new Pwb(1))}} +function b2b(a,b){var c;c=a.i;switch(b.g){case 1:return -(a.n.b+a.o.b);case 2:return a.n.a-c.o.a;case 3:return a.n.b-c.o.b;case 4:return -(a.n.a+a.o.a);}return 0} +function wec(a,b){switch(a.g){case 0:return b==(cxc(),$wc)?sec:tec;case 1:return b==(cxc(),$wc)?sec:rec;case 2:return b==(cxc(),$wc)?rec:tec;default:return rec;}} +function Fad(a,b){var c,d,e;Ymb(a.a,b);a.e-=b.r+(a.a.c.length==0?0:a.c);e=fFe;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);e=$wnd.Math.max(e,c.d)}a.b=e} +function jzd(a,b){var c,d;if(a.Db>>16==3){return a.Cb.Th(a,12,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),gvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function sCd(a,b){var c,d;if(a.Db>>16==11){return a.Cb.Th(a,10,J4,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(pvd(),kvd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function n4d(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Th(a,11,h7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),ATd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function Q5d(a,b){var c,d;if(a.Db>>16==10){return a.Cb.Th(a,12,s7,b)}return d=Z5d(RD(vYd((c=RD(Ywd(a,16),29),!c?(JTd(),DTd):c),a.Db>>16),19)),a.Cb.Th(a,d.n,d.f,b)} +function WVd(a){var b;if((a.Bb&1)==0&&!!a.r&&a.r.Vh()){b=RD(a.r,54);a.r=RD(Vvd(a,b),142);a.r!=b&&(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,8,b,a.r))}return a.r} +function pKb(a,b,c){var d;d=cD(WC(iE,1),vxe,28,15,[sKb(a,(ZJb(),WJb),b,c),sKb(a,XJb,b,c),sKb(a,YJb,b,c)]);if(a.f){d[0]=$wnd.Math.max(d[0],d[2]);d[2]=d[0]}return d} +function ddc(a,b){var c,d,e;e=kdc(a,b);if(e.c.length==0){return}_mb(e,new Gdc);c=e.c.length;for(d=0;d<c;d++){_cc(a,(tFb(d,e.c.length),RD(e.c[d],292)),gdc(a,e,d))}} +function Wnc(a){var b,c,d,e;for(e=RD(Qc(a.a,(Bnc(),wnc)),15).Kc();e.Ob();){d=RD(e.Pb(),105);for(c=Ec(d.k).Kc();c.Ob();){b=RD(c.Pb(),64);Qnc(a,d,b,(joc(),hoc),1)}}} +function Yrc(a){var b,c;if(a.k==(r3b(),o3b)){for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!W0b(b)&&a.c==T0b(b,a).c){return true}}}return false} +function hSc(a){var b,c;if(a.k==(r3b(),o3b)){for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!W0b(b)&&b.c.i.c==b.d.i.c){return true}}}return false} +function XDd(a,b){var c,d,e,f,g;if(b){e=b.a.length;c=new vue(e);for(g=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);g.Ob();){f=RD(g.Pb(),17);d=xDd(b,f.a);!!d&&AEd(a,d)}}} +function bbe(){Tae();var a,b;Xae((lTd(),kTd));Wae(kTd);rBd(kTd);d2d=(JTd(),wTd);for(b=new Anb(Rae);b.a<b.c.c.length;){a=RD(ynb(b),248);o2d(a,wTd,null)}return true} +function uD(a,b){var c,d,e,f,g,h,i,j;i=a.h>>19;j=b.h>>19;if(i!=j){return j-i}e=a.h;h=b.h;if(e!=h){return e-h}d=a.m;g=b.m;if(d!=g){return d-g}c=a.l;f=b.l;return c-f} +function YHb(){YHb=geb;XHb=(iIb(),fIb);WHb=new lGd(Aye,XHb);VHb=(LHb(),KHb);UHb=new lGd(Bye,VHb);THb=(DHb(),CHb);SHb=new lGd(Cye,THb);RHb=new lGd(Dye,(Geb(),true))} +function Iic(a,b,c){var d,e;d=b*c;if(ZD(a.g,154)){e=$jc(a);if(e.f.d){e.f.a||(a.d.a+=d+Tye)}else{a.d.d-=d+Tye;a.d.a+=d+Tye}}else if(ZD(a.g,10)){a.d.d-=d;a.d.a+=2*d}} +function _pc(a,b,c){var d,e,f,g,h;e=a[c.g];for(h=new Anb(b.d);h.a<h.c.c.length;){g=RD(ynb(h),105);f=g.i;if(!!f&&f.i==c){d=g.d[c.g];e[d]=$wnd.Math.max(e[d],f.j.b)}}} +function k9c(a,b){var c,d,e,f,g;d=0;e=0;c=0;for(g=new Anb(b.d);g.a<g.c.c.length;){f=RD(ynb(g),315);gad(f);d=$wnd.Math.max(d,f.b);e+=f.d+(c>0?a.b:0);++c}b.b=d;b.e=e} +function Fo(a){var b,c,d;d=a.b;if(Xp(a.i,d.length)){c=d.length*2;a.b=$C(XF,ewe,302,c,0,1);a.c=$C(XF,ewe,302,c,0,1);a.f=c-1;a.i=0;for(b=a.a;b;b=b.c){Bo(a,b,b)}++a.g}} +function VPb(a,b,c,d){var e,f,g,h;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;PPb(b,e,g)?aQb(a,f,h)||cQb(a,f,h):RPb(b,e,g)&&($Pb(a,f,h)||dQb(a,f,h))}}} +function k_b(a,b){a.b.a=$wnd.Math.min(a.b.a,b.c);a.b.b=$wnd.Math.min(a.b.b,b.d);a.a.a=$wnd.Math.max(a.a.a,b.c);a.a.b=$wnd.Math.max(a.a.b,b.d);return ZEb(a.c,b),true} +function psc(a,b,c){var d;d=b.c.i;if(d.k==(r3b(),o3b)){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12))}else{pQb(a,(Ywc(),vwc),b.c);pQb(a,wwc,c.d)}} +function wid(a,b,c){tid();var d,e,f,g,h,i;g=b/2;f=c/2;d=$wnd.Math.abs(a.a);e=$wnd.Math.abs(a.b);h=1;i=1;d>g&&(h=g/d);e>f&&(i=f/e);ijd(a,$wnd.Math.min(h,i));return a} +function OAd(){qAd();var b,c;try{c=RD(M5d((YSd(),XSd),$He),2113);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new KAd} +function Qae(){qAd();var b,c;try{c=RD(M5d((YSd(),XSd),AKe),2040);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new Mae} +function vne(){Zme();var b,c;try{c=RD(M5d((YSd(),XSd),dLe),2122);if(c){return c}}catch(a){a=zdb(a);if(ZD(a,103)){b=a;UId((Hde(),b))}else throw Adb(a)}return new rne} +function f2d(a,b,c){var d,e;e=a.e;a.e=b;if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,4,e,b);!c?(c=d):c.nj(d)}e!=b&&(b?(c=o2d(a,k2d(a,b),c)):(c=o2d(a,a.a,c)));return c} +function DB(){uB.call(this);this.e=-1;this.a=false;this.p=qwe;this.k=-1;this.c=-1;this.b=-1;this.g=false;this.f=-1;this.j=-1;this.n=-1;this.i=-1;this.d=-1;this.o=qwe} +function hHb(a,b){var c,d,e;d=a.b.d.d;a.a||(d+=a.b.d.a);e=b.b.d.d;b.a||(e+=b.b.d.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function XQb(a,b){var c,d,e;d=a.b.b.d;a.a||(d+=a.b.b.a);e=b.b.b.d;b.a||(e+=b.b.b.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function RYb(a,b){var c,d,e;d=a.b.g.d;a.a||(d+=a.b.g.a);e=b.b.g.d;b.a||(e+=b.b.g.a);c=Qfb(d,e);if(c==0){if(!a.a&&b.a){return -1}else if(!b.a&&a.a){return 1}}return c} +function _Wb(){_Wb=geb;YWb=nfd(pfd(pfd(pfd(new ufd,(sXb(),qXb),(hcc(),Dbc)),qXb,Hbc),rXb,Obc),rXb,rbc);$Wb=pfd(pfd(new ufd,qXb,hbc),qXb,sbc);ZWb=nfd(new ufd,rXb,ubc)} +function J6b(a){var b,c,d,e,f;b=RD(mQb(a,(Ywc(),cwc)),85);f=a.n;for(d=b.Cc().Kc();d.Ob();){c=RD(d.Pb(),314);e=c.i;e.c+=f.a;e.d+=f.b;c.c?MKb(c):OKb(c)}pQb(a,cwc,null)} +function Wpc(a,b,c){var d,e;e=a.b;d=e.d;switch(b.g){case 1:return -d.d-c;case 2:return e.o.a+d.c+c;case 3:return e.o.b+d.a+c;case 4:return -d.b-c;default:return -1;}} +function CNc(a,b,c){var d,e;c.Ug('Interactive node placement',1);a.a=RD(mQb(b,(Ywc(),Qwc)),312);for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),30);BNc(a,d)}c.Vg()} +function C5c(a){var b,c,d,e,f;d=0;e=Hze;if(a.b){for(b=0;b<360;b++){c=b*0.017453292519943295;A5c(a,a.d,0,0,dFe,c);f=a.b.Dg(a.d);if(f<e){d=c;e=f}}}A5c(a,a.d,0,0,dFe,d)} +function Oad(a,b){var c,d,e,f;f=new Tsb;b.e=null;b.f=null;for(d=new Anb(b.i);d.a<d.c.c.length;){c=RD(ynb(d),68);e=RD(Wjb(a.g,c.a),42);c.a=Oid(c.b);Zjb(f,c.a,e)}a.g=f} +function Dad(a,b,c){var d,e,f,g,h,i;e=b-a.e;f=e/a.d.c.length;g=0;for(i=new Anb(a.d);i.a<i.c.c.length;){h=RD(ynb(i),315);d=a.b-h.b+c;fad(h,h.e+g*f,h.f);bad(h,f,d);++g}} +function wPd(a){var b;a.f._j();if(a.b!=-1){++a.b;b=a.f.d[a.a];if(a.b<b.i){return}++a.a}for(;a.a<a.f.d.length;++a.a){b=a.f.d[a.a];if(!!b&&b.i!=0){a.b=0;return}}a.b=-1} +function Jde(a,b){var c,d,e;e=b.c.length;c=Lde(a,e==0?'':(tFb(0,b.c.length),WD(b.c[0])));for(d=1;d<e&&!!c;++d){c=RD(c,54).Zh((tFb(d,b.c.length),WD(b.c[d])))}return c} +function RIc(a,b){var c,d;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),10);a.c[c.c.p][c.p].a=Iwb(a.i);a.c[c.c.p][c.p].d=Kfb(a.c[c.c.p][c.p].a);a.c[c.c.p][c.p].b=1}} +function brd(a,b){var c,d,e,f;f=0;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),163);f+=$wnd.Math.pow(urd(c)*trd(c)-b,2)}e=$wnd.Math.sqrt(f/(a.c.length-1));return e} +function uMb(a,b){var c,d,e,f;f=0;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);f=$wnd.Math.max(f,d.e.a+d.b.Mf().a)}c=RD(Vrb(a.b,b),127);c.n.b=0;c.a.a=f} +function DNb(a,b){var c,d,e,f;c=0;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);c=$wnd.Math.max(c,e.e.b+e.b.Mf().b)}d=RD(Vrb(a.b,b),127);d.n.d=0;d.a.b=c} +function jMc(a,b,c,d){var e,f,g;f=eMc(a,b,c,d);g=kMc(a,f);BMc(a,b,c,d);YLc(a.b);yob();_mb(f,new LMc(a));e=kMc(a,f);BMc(a,c,b,d);YLc(a.b);return new Ptd(sgb(g),sgb(e))} +function udd(a,b){var c;b.Ug('Delaunay triangulation',1);c=new bnb;Umb(a.i,new ydd(c));Heb(TD(mQb(a,(OQb(),MQb))))&&'null10bw';!a.e?(a.e=EFb(c)):ye(a.e,EFb(c));b.Vg()} +function Hsd(a,b,c){var d,e;Nzd(a,a.j+b,a.k+c);for(e=new dMd((!a.a&&(a.a=new XZd(D4,a,5)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),377);Uxd(d,d.a+b,d.b+c)}Gzd(a,a.b+b,a.c+c)} +function Vyd(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),qLd(a.e,b,d);case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),qLd(a.d,b,d);}return dyd(a,b,c,d)} +function Wyd(a,b,c,d){switch(c){case 7:return !a.e&&(a.e=new Yie(G4,a,7,4)),rLd(a.e,b,d);case 8:return !a.d&&(a.d=new Yie(G4,a,8,5)),rLd(a.d,b,d);}return eyd(a,b,c,d)} +function LDd(a,b,c){var d,e,f,g,h;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);e=xDd(c,g.a);!!e&&DEd(a,e,b)}}} +function fOd(a,b,c){var d,e,f,g,h;a._j();f=b==null?0:tb(b);if(a.f>0){g=(f&lve)%a.d.length;e=WNd(a,g,f,b);if(e){h=e.nd(c);return h}}d=a.ck(f,b,c);a.c.Fc(d);return null} +function Tee(a,b){var c,d,e,f;switch(Oee(a,b).Kl()){case 3:case 2:{c=mYd(b);for(e=0,f=c.i;e<f;++e){d=RD(QHd(c,e),35);if(yfe(Qee(a,d))==5){return d}}break}}return null} +function gt(a){var b,c,d,e,f;if(Xp(a.f,a.b.length)){d=$C(UG,ewe,227,a.b.length*2,0,1);a.b=d;e=d.length-1;for(c=a.a;c!=a;c=c._d()){f=RD(c,227);b=f.d&e;f.a=d[b];d[b]=f}}} +function gSc(a){var b,c;c=RD(mQb(a,(Ywc(),kwc)),21);b=vfd(ZRc);c.Hc((ovc(),lvc))&&ofd(b,aSc);c.Hc(nvc)&&ofd(b,cSc);c.Hc(evc)&&ofd(b,$Rc);c.Hc(gvc)&&ofd(b,_Rc);return b} +function Bid(a){if(a<0){throw Adb(new agb('The input must be positive'))}else return a<sid.length?Xdb(sid[a]):$wnd.Math.sqrt(dFe*a)*(Jid(a,a)/Iid(2.718281828459045,a))} +function PHd(a,b){var c;if(a.Yi()&&b!=null){for(c=0;c<a.i;++c){if(pb(b,a.g[c])){return true}}}else{for(c=0;c<a.i;++c){if(dE(a.g[c])===dE(b)){return true}}}return false} +function Br(a,b){if(b==null){while(a.a.Ob()){if(RD(a.a.Pb(),44).md()==null){return true}}}else{while(a.a.Ob()){if(pb(b,RD(a.a.Pb(),44).md())){return true}}}return false} +function Qy(a,b){var c,d,e;if(b===a){return true}else if(ZD(b,678)){e=RD(b,2046);return Ue((d=a.g,!d?(a.g=new Di(a)):d),(c=e.g,!c?(e.g=new Di(e)):c))}else{return false}} +function hA(a){var b,c,d,e;b='gA';c='vz';e=$wnd.Math.min(a.length,5);for(d=e-1;d>=0;d--){if(lhb(a[d].d,b)||lhb(a[d].d,c)){a.length>=d+1&&a.splice(0,d+1);break}}return a} +function Fdb(a,b){var c;if(Kdb(a)&&Kdb(b)){c=a/b;if(jxe<c&&c<hxe){return c<0?$wnd.Math.ceil(c):$wnd.Math.floor(c)}}return Edb(iD(Kdb(a)?Wdb(a):a,Kdb(b)?Wdb(b):b,false))} +function T0b(a,b){if(b==a.c.i){return a.d.i}else if(b==a.d.i){return a.c.i}else{throw Adb(new agb("'node' must either be the source node or target node of the edge."))}} +function M5b(a){var b,c,d,e;e=RD(mQb(a,(Ywc(),Zvc)),36);if(e){d=new pjd;b=Y2b(a.c.i);while(b!=e){c=b.e;b=Y2b(c);Zid($id($id(d,c.n),b.c),b.d.b,b.d.d)}return d}return G5b} +function phc(a){var b;b=RD(mQb(a,(Ywc(),Pwc)),337);FDb(EDb(new SDb(null,new Swb(b.d,16)),new Chc),new Ehc(a));FDb(CDb(new SDb(null,new Swb(b.d,16)),new Ghc),new Ihc(a))} +function Zrc(a,b){var c,d,e,f;e=b?a3b(a):Z2b(a);for(d=new is(Mr(e.a.Kc(),new ir));gs(d);){c=RD(hs(d),18);f=T0b(c,a);if(f.k==(r3b(),o3b)&&f.c!=a.c){return f}}return null} +function fIc(a){var b,c,d;for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);if(b.k!=(r3b(),p3b)){continue}d=b.o.b;a.i=$wnd.Math.min(a.i,d);a.g=$wnd.Math.max(a.g,d)}} +function OIc(a,b,c){var d,e,f;for(f=new Anb(b);f.a<f.c.c.length;){d=RD(ynb(f),10);a.c[d.c.p][d.p].e=false}for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),10);NIc(a,d,c)}} +function uTc(a,b,c){var d,e;d=VTc(b.j,c.s,c.c)+VTc(c.e,b.s,b.c);e=VTc(c.j,b.s,b.c)+VTc(b.e,c.s,c.c);if(d==e){if(d>0){a.b+=2;a.a+=d}}else{a.b+=1;a.a+=$wnd.Math.min(d,e)}} +function CVc(a){var b;b=RD(mQb(RD(ju(a.b,0),39),(h_c(),T$c)),107);pQb(a,(q$c(),SZc),new rjd(0,0));FVc(new YWc,a,b.b+b.c-Kfb(UD(mQb(a,ZZc))),b.d+b.a-Kfb(UD(mQb(a,_Zc))))} +function pDd(a,b){var c,d;d=false;if(bE(b)){d=true;oDd(a,new OC(WD(b)))}if(!d){if(ZD(b,242)){d=true;oDd(a,(c=Qeb(RD(b,242)),new hC(c)))}}if(!d){throw Adb(new Aeb(tIe))}} +function g$d(a,b,c,d){var e,f,g;e=new P3d(a.e,1,10,(g=b.c,ZD(g,90)?RD(g,29):(JTd(),zTd)),(f=c.c,ZD(f,90)?RD(f,29):(JTd(),zTd)),fZd(a,b),false);!d?(d=e):d.nj(e);return d} +function _2b(a){var b,c;switch(RD(mQb(Y2b(a),(yCc(),QAc)),429).g){case 0:b=a.n;c=a.o;return new rjd(b.a+c.a/2,b.b+c.b/2);case 1:return new sjd(a.n);default:return null;}} +function Ouc(){Ouc=geb;Luc=new Puc(LAe,0);Kuc=new Puc('LEFTUP',1);Nuc=new Puc('RIGHTUP',2);Juc=new Puc('LEFTDOWN',3);Muc=new Puc('RIGHTDOWN',4);Iuc=new Puc('BALANCED',5)} +function dKc(a,b,c){var d,e,f;d=Qfb(a.a[b.p],a.a[c.p]);if(d==0){e=RD(mQb(b,(Ywc(),qwc)),15);f=RD(mQb(c,qwc),15);if(e.Hc(c)){return -1}else if(f.Hc(b)){return 1}}return d} +function k5c(a){switch(a.g){case 1:return new K3c;case 2:return new M3c;case 3:return new I3c;case 0:return null;default:throw Adb(new agb(mFe+(a.f!=null?a.f:''+a.g)));}} +function gyd(a,b,c){switch(b){case 1:!a.n&&(a.n=new C5d(I4,a,1,7));sLd(a.n);!a.n&&(a.n=new C5d(I4,a,1,7));YGd(a.n,RD(c,16));return;case 2:jyd(a,WD(c));return;}Dxd(a,b,c)} +function xyd(a,b,c){switch(b){case 3:Ayd(a,Kfb(UD(c)));return;case 4:Cyd(a,Kfb(UD(c)));return;case 5:Dyd(a,Kfb(UD(c)));return;case 6:Eyd(a,Kfb(UD(c)));return;}gyd(a,b,c)} +function dBd(a,b,c){var d,e,f;f=(d=new R5d,d);e=XVd(f,b,null);!!e&&e.oj();PAd(f,c);WGd((!a.c&&(a.c=new C5d(u7,a,12,10)),a.c),f);$Vd(f,0);bWd(f,1);aWd(f,true);_Vd(f,true)} +function M5d(a,b){var c,d,e;c=Ktb(a.i,b);if(ZD(c,241)){e=RD(c,241);e.zi()==null&&undefined;return e.wi()}else if(ZD(c,507)){d=RD(c,2037);e=d.b;return e}else{return null}} +function aj(a,b,c,d){var e,f;Qb(b);Qb(c);f=RD(Fn(a.d,b),17);Ob(!!f,'Row %s not in %s',b,a.e);e=RD(Fn(a.b,c),17);Ob(!!e,'Column %s not in %s',c,a.c);return cj(a,f.a,e.a,d)} +function ZC(a,b,c,d,e,f,g){var h,i,j,k,l;k=e[f];j=f==g-1;h=j?d:0;l=_C(h,k);d!=10&&cD(WC(a,g-f),b[f],c[f],h,l);if(!j){++f;for(i=0;i<k;++i){l[i]=ZC(a,b,c,d,e,f,g)}}return l} +function cMd(b){if(b.g==-1){throw Adb(new cgb)}b.Xj();try{b.i.gd(b.g);b.f=b.i.j;b.g<b.e&&--b.e;b.g=-1}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}} +function v0b(a){var b,c,d,e;e=-1;d=0;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),249);if(b.c==(BEc(),yEc)){e=d==0?0:d-1;break}else d==a.c.length-1&&(e=d);d+=1}return e} +function $9c(a){var b,c,d,e;e=0;b=0;for(d=new Anb(a.c);d.a<d.c.c.length;){c=RD(ynb(d),27);Dyd(c,a.e+e);Eyd(c,a.f);e+=c.g+a.b;b=$wnd.Math.max(b,c.f+a.b)}a.d=e-a.b;a.a=b-a.b} +function UGb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);d=b.d.c;b.d.c=b.d.d;b.d.d=d;d=b.d.b;b.d.b=b.d.a;b.d.a=d;d=b.b.a;b.b.a=b.b.b;b.b.b=d}IGb(a)} +function DYb(a){var b,c,d;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=b.g.c;b.g.c=b.g.d;b.g.d=d;d=b.g.b;b.g.b=b.g.a;b.g.a=d;d=b.e.a;b.e.a=b.e.b;b.e.b=d}uYb(a)} +function pqc(a){var b,c,d,e,f;f=Ec(a.k);for(c=(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])),d=0,e=c.length;d<e;++d){b=c[d];if(b!=opd&&!f.Hc(b)){return b}}return null} +function drc(a,b){var c,d;d=RD(Nvb(DDb(CDb(new SDb(null,new Swb(b.j,16)),new lrc))),12);if(d){c=RD(Vmb(d.e,0),18);if(c){return RD(mQb(c,(Ywc(),zwc)),17).a}}return mDc(a.b)} +function FGc(a,b){var c,d,e,f;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);Nnb(a.d);for(d=new is(Mr(a3b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);CGc(a,e,c.d.i)}}} +function T9c(a,b){var c,d;Ymb(a.b,b);for(d=new Anb(a.n);d.a<d.c.c.length;){c=RD(ynb(d),209);if(Wmb(c.c,b,0)!=-1){Ymb(c.c,b);$9c(c);c.c.c.length==0&&Ymb(a.n,c);break}}N9c(a)} +function ead(a,b){var c,d,e,f,g;g=a.f;e=0;f=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);U9c(c,a.e,g);Q9c(c,b);f=$wnd.Math.max(f,c.r);g+=c.d+a.c;e=g}a.d=f;a.b=e} +function R2c(a){var b,c;c=yGd(a);if(gr(c)){return null}else{b=(Qb(c),RD(Er(new is(Mr(c.a.Kc(),new ir))),74));return AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84))}} +function vWd(a){var b;if(!a.o){b=a.uk();b?(a.o=new D9d(a,a,null)):a.al()?(a.o=new U6d(a,null)):yfe(Qee((lke(),jke),a))==1?(a.o=new N9d(a)):(a.o=new S9d(a,null))}return a.o} +function Vje(a,b,c,d){var e,f,g,h,i;if(c.Xh(b)){e=(g=b,!g?null:RD(d,54).gi(g));if(e){i=c.Mh(b);h=b.t;if(h>1||h==-1){f=RD(i,15);e.Wb(Sje(a,f))}else{e.Wb(Rje(a,RD(i,58)))}}}} +function ceb(b,c,d,e){beb();var f=_db;$moduleName=c;$moduleBase=d;ydb=e;function g(){for(var a=0;a<f.length;a++){f[a]()}} +if(b){try{fve(g)()}catch(a){b(c,a)}}else{fve(g)()}} +function a6b(a,b){var c,d,e,f;for(e=(f=(new Xkb(a.b)).a.vc().Kc(),new blb(f));e.a.Ob();){d=(c=RD(e.a.Pb(),44),RD(c.ld(),34));if(egb(b,RD(d,17))<0){return false}}return true} +function b6b(a,b){var c,d,e,f;for(e=(f=(new Xkb(a.b)).a.vc().Kc(),new blb(f));e.a.Ob();){d=(c=RD(e.a.Pb(),44),RD(c.ld(),34));if(egb(b,RD(d,17))>0){return false}}return true} +function okc(a){var b,c,d,e,f;for(d=new vkb((new mkb(a.b)).a);d.b;){c=tkb(d);b=RD(c.ld(),10);f=RD(RD(c.md(),42).a,10);e=RD(RD(c.md(),42).b,8);$id(hjd(b.n),$id(ajd(f.n),e))}} +function Roc(a){switch(RD(mQb(a.b,(yCc(),BAc)),387).g){case 1:FDb(GDb(EDb(new SDb(null,new Swb(a.d,16)),new kpc),new mpc),new opc);break;case 2:Toc(a);break;case 0:Soc(a);}} +function SVc(a,b,c){var d,e,f;d=c;!d&&(d=new Oqd);d.Ug('Layout',a.a.c.length);for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),47);if(d.$g()){return}e.Kf(b,d.eh(1))}d.Vg()} +function ukd(){ukd=geb;tkd=new vkd('V_TOP',0);skd=new vkd('V_CENTER',1);rkd=new vkd('V_BOTTOM',2);pkd=new vkd('H_LEFT',3);okd=new vkd('H_CENTER',4);qkd=new vkd('H_RIGHT',5)} +function GYd(a){var b;if((a.Db&64)!=0)return MXd(a);b=new Shb(MXd(a));b.a+=' (abstract: ';Ohb(b,(a.Bb&256)!=0);b.a+=', interface: ';Ohb(b,(a.Bb&512)!=0);b.a+=')';return b.a} +function Bz(a){var b;if(a.c==null){b=dE(a.b)===dE(zz)?null:a.b;a.d=b==null?vve:aE(b)?Ez(VD(b)):bE(b)?uwe:nfb(rb(b));a.a=a.a+': '+(aE(b)?Dz(VD(b)):b+'');a.c='('+a.d+') '+a.a}} +function Gtb(){function b(){try{return (new Map).entries().next().done}catch(a){return false}} +if(typeof Map===kve&&Map.prototype.entries&&b()){return Map}else{return Htb()}} +function tUc(a,b){var c,d,e,f;f=new Jkb(a.e,0);c=0;while(f.b<f.d.gc()){d=Kfb((sFb(f.b<f.d.gc()),UD(f.d.Xb(f.c=f.b++))));e=d-b;if(e>AEe){return c}else e>-1.0E-6&&++c}return c} +function n2d(a,b){var c;if(b!=a.b){c=null;!!a.b&&(c=Jvd(a.b,a,-4,c));!!b&&(c=Ivd(b,a,-4,c));c=e2d(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} +function q2d(a,b){var c;if(b!=a.f){c=null;!!a.f&&(c=Jvd(a.f,a,-1,c));!!b&&(c=Ivd(b,a,-1,c));c=g2d(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,0,b,b))} +function Lge(a,b,c,d){var e,f,g,h;if(Mvd(a.e)){e=b.Lk();h=b.md();f=c.md();g=fge(a,1,e,h,f,e.Jk()?kge(a,e,f,ZD(e,102)&&(RD(e,19).Bb&txe)!=0):-1,true);d?d.nj(g):(d=g)}return d} +function bne(a){var b,c,d;if(a==null)return null;c=RD(a,15);if(c.dc())return '';d=new Qhb;for(b=c.Kc();b.Ob();){Nhb(d,(nme(),WD(b.Pb())));d.a+=' '}return qeb(d,d.a.length-1)} +function fne(a){var b,c,d;if(a==null)return null;c=RD(a,15);if(c.dc())return '';d=new Qhb;for(b=c.Kc();b.Ob();){Nhb(d,(nme(),WD(b.Pb())));d.a+=' '}return qeb(d,d.a.length-1)} +function QIc(a,b,c){var d,e;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){return Jfb(d.a,e.a)}else if(d.a!=null){return -1}else if(e.a!=null){return 1}return 0} +function RVc(a,b,c){c.Ug('Tree layout',1);Sed(a.b);Ved(a.b,(YVc(),UVc),UVc);Ved(a.b,VVc,VVc);Ved(a.b,WVc,WVc);Ved(a.b,XVc,XVc);a.a=Qed(a.b,b);SVc(a,b,c.eh(1));c.Vg();return b} +function ZDd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new vue(f);for(h=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);h.Ob();){g=RD(h.Pb(),17);e=xDd(b,g.a);d=new aFd(a);$Dd(d.a,e)}}} +function oEd(a,b){var c,d,e,f,g,h;if(b){f=b.a.length;c=new vue(f);for(h=(c.b-c.a)*c.c<0?(uue(),tue):new Rue(c);h.Ob();){g=RD(h.Pb(),17);e=xDd(b,g.a);d=new LEd(a);NDd(d.a,e)}}} +function ESd(b){var c;if(b!=null&&b.length>0&&ihb(b,b.length-1)==33){try{c=nSd(zhb(b,0,b.length-1));return c.e==null}catch(a){a=zdb(a);if(!ZD(a,33))throw Adb(a)}}return false} +function u0b(a,b,c){var d,e,f;d=Y2b(b);e=i2b(d);f=new R3b;P3b(f,b);switch(c.g){case 1:Q3b(f,spd(vpd(e)));break;case 2:Q3b(f,vpd(e));}pQb(f,(yCc(),ABc),UD(mQb(a,ABc)));return f} +function jdc(a){var b,c;b=RD(hs(new is(Mr(Z2b(a.a).a.Kc(),new ir))),18);c=RD(hs(new is(Mr(a3b(a.a).a.Kc(),new ir))),18);return Heb(TD(mQb(b,(Ywc(),Nwc))))||Heb(TD(mQb(c,Nwc)))} +function Bnc(){Bnc=geb;xnc=new Cnc('ONE_SIDE',0);znc=new Cnc('TWO_SIDES_CORNER',1);Anc=new Cnc('TWO_SIDES_OPPOSING',2);ync=new Cnc('THREE_SIDES',3);wnc=new Cnc('FOUR_SIDES',4)} +function Usc(a,b){var c,d,e,f;f=new bnb;e=0;d=b.Kc();while(d.Ob()){c=sgb(RD(d.Pb(),17).a+e);while(c.a<a.f&&!wsc(a,c.a)){c=sgb(c.a+1);++e}if(c.a>=a.f){break}ZEb(f.c,c)}return f} +function iIc(a,b){var c,d,e,f,g;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);for(d=new is(Mr(Z2b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);g=c.c.i.p;a.n[g]=a.n[g]-1}}} +function fOc(a){var b,c;for(c=new Anb(a.e.b);c.a<c.c.c.length;){b=RD(ynb(c),30);wOc(a,b)}FDb(CDb(EDb(EDb(new SDb(null,new Swb(a.e.b,16)),new wPc),new TPc),new VPc),new XPc(a))} +function oKd(a,b){if(!b){return false}else{if(a.mj(b)){return false}if(!a.i){if(ZD(b,152)){a.i=RD(b,152);return true}else{a.i=new fLd;return a.i.nj(b)}}else{return a.i.nj(b)}}} +function Hge(a,b,c){var d,e,f;d=b.Lk();f=b.md();e=d.Jk()?fge(a,3,d,null,f,kge(a,d,f,ZD(d,102)&&(RD(d,19).Bb&txe)!=0),true):fge(a,1,d,d.ik(),f,-1,true);c?c.nj(e):(c=e);return c} +function $me(a){a=nue(a,true);if(lhb(FGe,a)||lhb('1',a)){return Geb(),Feb}else if(lhb(GGe,a)||lhb('0',a)){return Geb(),Eeb}throw Adb(new Mle("Invalid boolean value: '"+a+"'"))} +function Kd(a,b,c){var d,e,f;for(e=a.vc().Kc();e.Ob();){d=RD(e.Pb(),44);f=d.ld();if(dE(b)===dE(f)||b!=null&&pb(b,f)){if(c){d=new xlb(d.ld(),d.md());e.Qb()}return d}}return null} +function WMb(a){RMb();var b,c,d;if(!a.B.Hc((dqd(),Xpd))){return}d=a.f.i;b=new Vid(a.a.c);c=new z3b;c.b=b.c-d.c;c.d=b.d-d.d;c.c=d.c+d.b-(b.c+b.b);c.a=d.d+d.a-(b.d+b.a);a.e.$f(c)} +function CQb(a,b,c,d){var e,f,g;g=$wnd.Math.min(c,FQb(RD(a.b,68),b,c,d));for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),225);e!=b&&(g=$wnd.Math.min(g,CQb(e,b,g,d)))}return g} +function c1b(a){var b,c,d,e;e=$C(jR,Nve,199,a.b.c.length,0,2);d=new Jkb(a.b,0);while(d.b<d.d.gc()){b=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),30));c=d.b-1;e[c]=t2b(b.a)}return e} +function c6b(a,b,c){var d,e,f;d=RD(cub(a.a,c),34);if(d!=null){f=RD(cub(a.b,d),67);ze(f,c,true)}e=RD(cub(a.b,b),67);if(!e){e=new Yub;dub(a.b,b,e)}Pub(e,c,e.c.b,e.c);dub(a.a,c,b)} +function _6b(a,b,c,d,e){var f,g,h,i;g=XNb(WNb(_Nb(Y6b(c)),d),T6b(a,c,e));for(i=e3b(a,c).Kc();i.Ob();){h=RD(i.Pb(),12);if(b[h.p]){f=b[h.p].i;Rmb(g.d,new sOb(f,UNb(g,f)))}}VNb(g)} +function Ylc(a,b){this.f=new Tsb;this.b=new Tsb;this.j=new Tsb;this.a=a;this.c=b;this.c>0&&Xlc(this,this.c-1,(qpd(),Xod));this.c<this.a.length-1&&Xlc(this,this.c+1,(qpd(),ppd))} +function Iqc(a,b){var c,d,e,f,g;for(f=new Anb(b.d);f.a<f.c.c.length;){e=RD(ynb(f),105);g=RD(Wjb(a.c,e),118).o;for(d=new Osb(e.b);d.a<d.c.a.length;){c=RD(Nsb(d),64);Umc(e,c,g)}}} +function qJc(a){a.length>0&&a[0].length>0&&(this.c=Heb(TD(mQb(Y2b(a[0][0]),(Ywc(),rwc)))));this.a=$C(aY,Nve,2117,a.length,0,2);this.b=$C(dY,Nve,2118,a.length,0,2);this.d=new Ks} +function TOc(a){if(a.c.length==0){return false}if((tFb(0,a.c.length),RD(a.c[0],18)).c.i.k==(r3b(),o3b)){return true}return yDb(GDb(new SDb(null,new Swb(a,16)),new WOc),new YOc)} +function I5c(a,b){var c,d,e,f,g,h,i;h=Q2c(b);f=b.f;i=b.g;g=$wnd.Math.sqrt(f*f+i*i);e=0;for(d=new Anb(h);d.a<d.c.c.length;){c=RD(ynb(d),27);e+=I5c(a,c)}return $wnd.Math.max(e,g)} +function Bod(){Bod=geb;Aod=new Eod(Sye,0);zod=new Eod('FREE',1);yod=new Eod('FIXED_SIDE',2);vod=new Eod('FIXED_ORDER',3);xod=new Eod('FIXED_RATIO',4);wod=new Eod('FIXED_POS',5)} +function Cee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),bLe));for(d=1;d<(lke(),kke).length;++d){if(lhb(kke[d],e)){return d}}}return 0} +function aob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function gob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function Md(a){var b,c,d;d=new Jyb(pve,'{','}');for(c=a.vc().Kc();c.Ob();){b=RD(c.Pb(),44);Gyb(d,Nd(a,b.ld())+'='+Nd(a,b.md()))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function vJb(a){var b,c,d,e;while(!nmb(a.o)){c=RD(smb(a.o),42);d=RD(c.a,125);b=RD(c.b,218);e=oIb(b,d);if(b.e==d){EIb(e.g,b);d.e=e.e+b.a}else{EIb(e.b,b);d.e=e.e-b.a}Rmb(a.e.a,d)}} +function W9b(a,b){var c,d,e;c=null;for(e=RD(b.Kb(a),20).Kc();e.Ob();){d=RD(e.Pb(),18);if(!c){c=d.c.i==a?d.d.i:d.c.i}else{if((d.c.i==a?d.d.i:d.c.i)!=c){return false}}}return true} +function UTc(a,b){var c,d,e,f,g;c=uSc(a,false,b);for(e=new Anb(c);e.a<e.c.c.length;){d=RD(ynb(e),132);d.d==0?(_Sc(d,null),aTc(d,null)):(f=d.a,g=d.b,_Sc(d,g),aTc(d,f),undefined)}} +function QUc(a){var b,c;b=new ufd;ofd(b,CUc);c=RD(mQb(a,(Ywc(),kwc)),21);c.Hc((ovc(),nvc))&&ofd(b,GUc);c.Hc(evc)&&ofd(b,DUc);c.Hc(lvc)&&ofd(b,FUc);c.Hc(gvc)&&ofd(b,EUc);return b} +function iz(a,b,c){var d,e,f,g,h;String.fromCharCode(10);jz(a);for(e=(a.k==null&&(a.k=$C(rJ,Nve,82,0,0,1)),a.k),f=0,g=e.length;f<g;++f){d=e[f];iz(d,b,'\t'+c)}h=a.f;!!h&&iz(h,b,c)} +function kec(a){var b,c,d,e;jec(a);for(c=new is(Mr(W2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);d=b.c.i==a;e=d?b.d:b.c;d?Z0b(b,null):Y0b(b,null);pQb(b,(Ywc(),Ewc),e);oec(a,e.i)}} +function aqc(a,b,c,d){var e,f;f=b.i;e=c[f.g][a.d[f.g]];switch(f.g){case 1:e-=d+b.j.b;b.g.b=e;break;case 3:e+=d;b.g.b=e;break;case 4:e-=d+b.j.a;b.g.a=e;break;case 2:e+=d;b.g.a=e;}} +function K2c(a){var b,c,d;for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);d=yGd(b);if(!gs(new is(Mr(d.a.Kc(),new ir)))){return b}}return null} +function g3c(){g3c=geb;e3c=new h3c('OVERLAP_REMOVAL',0);b3c=new h3c(iFe,1);f3c=new h3c('ROTATION',2);c3c=new h3c('GRAPH_SIZE_CALCULATION',3);d3c=new h3c('OUTGOING_EDGE_ANGLES',4)} +function aCd(){var a;if(YBd)return RD(N5d((YSd(),XSd),$He),2115);a=RD(ZD(Xjb((YSd(),XSd),$He),569)?Xjb(XSd,$He):new _Bd,569);YBd=true;ZBd(a);$Bd(a);rBd(a);$jb(XSd,$He,a);return a} +function Tge(a,b,c){var d,e;if(a.j==0)return c;e=RD(jZd(a,b,c),76);d=c.Lk();if(!d.rk()||!a.a.am(d)){throw Adb(new yz("Invalid entry feature '"+d.qk().zb+'.'+d.xe()+"'"))}return e} +function Yi(a,b){var c,d,e,f,g,h,i,j;for(h=a.a,i=0,j=h.length;i<j;++i){g=h[i];for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(dE(b)===dE(c)||b!=null&&pb(b,c)){return true}}}return false} +function yjb(a){var b,c,d;if(Ddb(a,0)>=0){c=Fdb(a,ixe);d=Mdb(a,ixe)}else{b=Udb(a,1);c=Fdb(b,500000000);d=Mdb(b,500000000);d=Bdb(Sdb(d,1),Cdb(a,1))}return Rdb(Sdb(d,32),Cdb(c,yxe))} +function fTb(a,b,c){var d,e;d=(sFb(b.b!=0),RD(Wub(b,b.a.a),8));switch(c.g){case 0:d.b=0;break;case 2:d.b=a.f;break;case 3:d.a=0;break;default:d.a=a.g;}e=Sub(b,0);cvb(e,d);return b} +function Vpc(a,b,c,d){var e,f,g,h,i;i=a.b;f=b.d;g=f.j;h=$pc(g,i.d[g.g],c);e=$id(ajd(f.n),f.a);switch(f.j.g){case 1:case 3:h.a+=e.a;break;case 2:case 4:h.b+=e.b;}Pub(d,h,d.c.b,d.c)} +function YNc(a,b,c){var d,e,f,g;g=Wmb(a.e,b,0);f=new ZNc;f.b=c;d=new Jkb(a.e,g);while(d.b<d.d.gc()){e=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),10));e.p=c;Rmb(f.e,e);Ckb(d)}return f} +function l8c(a,b,c,d){var e,f,g,h,i;e=null;f=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);i=g.i+g.g;if(a<g.j+g.f+d){!e?(e=g):c.i-i<c.i-f&&(e=g);f=e.i+e.g}}return !e?0:f+d} +function m8c(a,b,c,d){var e,f,g,h,i;f=null;e=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);i=g.j+g.f;if(a<g.i+g.g+d){!f?(f=g):c.j-i<c.j-e&&(f=g);e=f.j+f.f}}return !f?0:e+d} +function CA(a){var b,c,d;b=false;d=a.b.c.length;for(c=0;c<d;c++){if(DA(RD(Vmb(a.b,c),443))){if(!b&&c+1<d&&DA(RD(Vmb(a.b,c+1),443))){b=true;RD(Vmb(a.b,c),443).a=true}}else{b=false}}} +function Ijb(a,b,c,d,e){var f,g;f=0;for(g=0;g<e;g++){f=Bdb(f,Vdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<c;g++){f=Bdb(f,Cdb(b[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}} +function Rjb(a,b){Ljb();var c,d;d=(Pib(),Kib);c=a;for(;b>1;b>>=1){(b&1)!=0&&(d=Wib(d,c));c.d==1?(c=Wib(c,c)):(c=new djb(Tjb(c.a,c.d,$C(kE,Pwe,28,c.d<<1,15,1))))}d=Wib(d,c);return d} +function Hwb(){Hwb=geb;var a,b,c,d;Ewb=$C(iE,vxe,28,25,15,1);Fwb=$C(iE,vxe,28,33,15,1);d=1.52587890625E-5;for(b=32;b>=0;b--){Fwb[b]=d;d*=0.5}c=1;for(a=24;a>=0;a--){Ewb[a]=c;c*=0.5}} +function a5b(a){var b,c;if(Heb(TD(Gxd(a,(yCc(),NAc))))){for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);if(ozd(b)){if(Heb(TD(Gxd(b,OAc)))){return true}}}}return false} +function Qmc(a,b){var c,d,e;if(Ysb(a.f,b)){b.b=a;d=b.c;Wmb(a.j,d,0)!=-1||Rmb(a.j,d);e=b.d;Wmb(a.j,e,0)!=-1||Rmb(a.j,e);c=b.a.b;if(c.c.length!=0){!a.i&&(a.i=new _mc(a));Wmc(a.i,c)}}} +function Xpc(a){var b,c,d,e,f;c=a.c.d;d=c.j;e=a.d.d;f=e.j;if(d==f){return c.p<e.p?0:1}else if(tpd(d)==f){return 0}else if(rpd(d)==f){return 1}else{b=a.b;return Csb(b.b,tpd(d))?0:1}} +function Pfd(a){var b;this.d=new Tsb;this.c=a.c;this.e=a.d;this.b=a.b;this.f=new ntd(a.e);this.a=a.a;!a.f?(this.g=(b=RD(mfb(T5),9),new Fsb(b,RD(WEb(b,b.length),9),0))):(this.g=a.f)} +function GEd(a,b){var c,d,e,f,g,h;e=a;g=yDd(e,'layoutOptions');!g&&(g=yDd(e,cIe));if(g){h=g;d=null;!!h&&(d=(f=oC(h,$C(qJ,Nve,2,0,6,1)),new CC(h,f)));if(d){c=new bFd(h,b);xgb(d,c)}}} +function AGd(a){if(ZD(a,207)){return RD(a,27)}else if(ZD(a,193)){return MCd(RD(a,123))}else if(!a){throw Adb(new Ogb(HIe))}else{throw Adb(new kib('Only support nodes and ports.'))}} +function SA(a,b,c,d){if(b>=0&&lhb(a.substr(b,'GMT'.length),'GMT')){c[0]=b+3;return JA(a,c,d)}if(b>=0&&lhb(a.substr(b,'UTC'.length),'UTC')){c[0]=b+3;return JA(a,c,d)}return JA(a,c,d)} +function Zmc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.n;e.a=f;a.i==(qpd(),Yod)?(e.b=g+a.j.b-c.o.b):(e.b=g);$id(e,b);f+=c.o.a+a.e}} +function Fqd(a,b,c){if(a.b){throw Adb(new dgb('The task is already done.'))}else if(a.p!=null){return false}else{a.p=b;a.r=c;a.k&&(a.o=(gib(),Ndb(Hdb(Date.now()),Awe)));return true}} +function HFd(a){var b,c,d,e,f,g,h;h=new uC;c=a.Pg();e=c!=null;e&&sDd(h,uIe,a.Pg());d=a.xe();f=d!=null;f&&sDd(h,GIe,a.xe());b=a.Og();g=b!=null;g&&sDd(h,'description',a.Og());return h} +function UVd(a,b,c){var d,e,f;f=a.q;a.q=b;if((a.Db&4)!=0&&(a.Db&1)==0){e=new N3d(a,1,9,f,b);!c?(c=e):c.nj(e)}if(!b){!!a.r&&(c=a.Yk(null,c))}else{d=b.c;d!=a.r&&(c=a.Yk(d,c))}return c} +function gae(a,b,c){var d,e,f,g,h;c=(h=b,Ivd(h,a.e,-1-a.c,c));g=$9d(a.a);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,a.a),c)}return c} +function hae(a,b,c){var d,e,f,g,h;c=(h=b,Jvd(h,a.e,-1-a.c,c));g=$9d(a.a);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,a.a),c)}return c} +function rjb(a,b,c,d){var e,f,g;if(d==0){hib(b,0,a,c,a.length-c)}else{g=32-d;a[a.length-1]=0;for(f=a.length-1;f>c;f--){a[f]|=b[f-c-1]>>>g;a[f-1]=b[f-c-1]<<d}}for(e=0;e<c;e++){a[e]=0}} +function CMb(a){var b,c,d,e,f;b=0;c=0;for(f=a.Kc();f.Ob();){d=RD(f.Pb(),117);b=$wnd.Math.max(b,d.d.b);c=$wnd.Math.max(c,d.d.c)}for(e=a.Kc();e.Ob();){d=RD(e.Pb(),117);d.d.b=b;d.d.c=c}} +function KNb(a){var b,c,d,e,f;c=0;b=0;for(f=a.Kc();f.Ob();){d=RD(f.Pb(),117);c=$wnd.Math.max(c,d.d.d);b=$wnd.Math.max(b,d.d.a)}for(e=a.Kc();e.Ob();){d=RD(e.Pb(),117);d.d.d=c;d.d.a=b}} +function Pnc(a,b,c,d,e){var f,g;f=RD(zDb(CDb(b.Oc(),new Foc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);Eob(f);g=RD($i(a.b,c,d),15);e==0?g.cd(0,f):g.Gc(f)} +function Sdd(a,b,c){c.Ug('Grow Tree',1);a.b=b.f;if(Heb(TD(mQb(b,(OQb(),MQb))))){a.c=new kRb;Odd(a,null)}else{a.c=new kRb}a.a=false;Qdd(a,b.f);pQb(b,NQb,(Geb(),a.a?true:false));c.Vg()} +function wsd(a){var b,c,d,e;b=null;for(e=new Anb(a.Rf());e.a<e.c.c.length;){d=RD(ynb(e),187);c=new Uid(d.Lf().a,d.Lf().b,d.Mf().a,d.Mf().b);!b?(b=c):Sid(b,c)}!b&&(b=new Tid);return b} +function dyd(a,b,c,d){var e,f;if(c==1){return !a.n&&(a.n=new C5d(I4,a,1,7)),qLd(a.n,b,d)}return f=RD(vYd((e=RD(Ywd(a,16),29),!e?a.ii():e),c),69),f.wk().zk(a,Wwd(a),c-AYd(a.ii()),b,d)} +function IHd(a,b,c){var d,e,f,g,h;d=c.gc();a._i(a.i+d);h=a.i-b;h>0&&hib(a.g,b,a.g,b+d,h);g=c.Kc();a.i+=d;for(e=0;e<d;++e){f=g.Pb();MHd(a,b,a.Zi(b,f));a.Mi(b,f);a.Ni();++b}return d!=0} +function XVd(a,b,c){var d;if(b!=a.q){!!a.q&&(c=Jvd(a.q,a,-10,c));!!b&&(c=Ivd(b,a,-10,c));c=UVd(a,b,c)}else if((a.Db&4)!=0&&(a.Db&1)==0){d=new N3d(a,1,9,b,b);!c?(c=d):c.nj(d)}return c} +function ek(a,b,c,d){Mb((c&Ove)==0,'flatMap does not support SUBSIZED characteristic');Mb((c&4)==0,'flatMap does not support SORTED characteristic');Qb(a);Qb(b);return new Mk(a,b,c,d)} +function fz(a,b){vFb(b,'Cannot suppress a null exception.');mFb(b!=a,'Exception can not suppress itself.');if(a.i){return}a.k==null?(a.k=cD(WC(rJ,1),Nve,82,0,[b])):(a.k[a.k.length]=b)} +function DLb(a,b){var c;c=ELb(a.b.ag(),b.b.ag());if(c!=0){return c}switch(a.b.ag().g){case 1:case 2:return hgb(a.b.Nf(),b.b.Nf());case 3:case 4:return hgb(b.b.Nf(),a.b.Nf());}return 0} +function eUb(a){var b,c,d;d=a.e.c.length;a.a=YC(kE,[Nve,Pwe],[53,28],15,[d,d],2);for(c=new Anb(a.c);c.a<c.c.c.length;){b=RD(ynb(c),289);a.a[b.c.a][b.d.a]+=RD(mQb(b,(yVb(),lVb)),17).a}} +function sAd(a,b){var c,d,e,f,g;if(a==null){return null}else{g=$C(hE,zwe,28,2*b,15,1);for(d=0,e=0;d<b;++d){c=a[d]>>4&15;f=a[d]&15;g[e++]=oAd[c];g[e++]=oAd[f]}return Ihb(g,0,g.length)}} +function Fhb(a){var b,c;if(a>=txe){b=uxe+(a-txe>>10&1023)&Bwe;c=56320+(a-txe&1023)&Bwe;return String.fromCharCode(b)+(''+String.fromCharCode(c))}else{return String.fromCharCode(a&Bwe)}} +function UMb(a,b){RMb();var c,d,e,f;e=RD(RD(Qc(a.r,b),21),87);if(e.gc()>=2){d=RD(e.Kc().Pb(),117);c=a.u.Hc((Pod(),Kod));f=a.u.Hc(Ood);return !d.a&&!c&&(e.gc()==2||f)}else{return false}} +function v3c(a,b,c,d,e){var f,g,h;f=w3c(a,b,c,d,e);h=false;while(!f){n3c(a,e,true);h=true;f=w3c(a,b,c,d,e)}h&&n3c(a,e,false);g=N2c(e);if(g.c.length!=0){!!a.d&&a.d.Gg(g);v3c(a,e,c,d,g)}} +function ind(){ind=geb;gnd=new jnd(LAe,0);end=new jnd('DIRECTED',1);hnd=new jnd('UNDIRECTED',2);cnd=new jnd('ASSOCIATION',3);fnd=new jnd('GENERALIZATION',4);dnd=new jnd('DEPENDENCY',5)} +function nsd(a,b){var c;if(!MCd(a)){throw Adb(new dgb(sHe))}c=MCd(a);switch(b.g){case 1:return -(a.j+a.f);case 2:return a.i-c.g;case 3:return a.j-c.f;case 4:return -(a.i+a.g);}return 0} +function Jge(a,b,c){var d,e,f;d=b.Lk();f=b.md();e=d.Jk()?fge(a,4,d,f,null,kge(a,d,f,ZD(d,102)&&(RD(d,19).Bb&txe)!=0),true):fge(a,d.tk()?2:1,d,f,d.ik(),-1,true);c?c.nj(e):(c=e);return c} +function lwb(a,b){var c,d;uFb(b);d=a.b.c.length;Rmb(a.b,b);while(d>0){c=d;d=(d-1)/2|0;if(a.a.Ne(Vmb(a.b,d),b)<=0){$mb(a.b,c,b);return true}$mb(a.b,c,Vmb(a.b,d))}$mb(a.b,d,b);return true} +function sKb(a,b,c,d){var e,f;e=0;if(!c){for(f=0;f<jKb;f++){e=$wnd.Math.max(e,hKb(a.a[f][b.g],d))}}else{e=hKb(a.a[c.g][b.g],d)}b==(ZJb(),XJb)&&!!a.b&&(e=$wnd.Math.max(e,a.b.a));return e} +function Qqc(a,b){var c,d,e,f,g,h;e=a.i;f=b.i;if(!e||!f){return false}if(e.i!=f.i||e.i==(qpd(),Xod)||e.i==(qpd(),ppd)){return false}g=e.g.a;c=g+e.j.a;h=f.g.a;d=h+f.j.a;return g<=d&&c>=h} +function A8c(a){switch(a.g){case 0:return new o8c;case 1:return new u8c;default:throw Adb(new agb('No implementation is available for the width approximator '+(a.f!=null?a.f:''+a.g)));}} +function rDd(a,b,c,d){var e;e=false;if(bE(d)){e=true;sDd(b,c,WD(d))}if(!e){if($D(d)){e=true;rDd(a,b,c,d)}}if(!e){if(ZD(d,242)){e=true;qDd(b,c,RD(d,242))}}if(!e){throw Adb(new Aeb(tIe))}} +function uee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=$Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),rKe);if(e!=null){for(d=1;d<(lke(),hke).length;++d){if(lhb(hke[d],e)){return d}}}}return 0} +function vee(a,b){var c,d,e;c=b.qi(a.a);if(c){e=$Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),rKe);if(e!=null){for(d=1;d<(lke(),ike).length;++d){if(lhb(ike[d],e)){return d}}}}return 0} +function Ve(a,b){var c,d,e,f;uFb(b);f=a.a.gc();if(f<b.gc()){for(c=a.a.ec().Kc();c.Ob();){d=c.Pb();b.Hc(d)&&c.Qb()}}else{for(e=b.Kc();e.Ob();){d=e.Pb();a.a.Bc(d)!=null}}return f!=a.a.gc()} +function e_b(a){var b,c;c=ajd(xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])));b=a.i.d;switch(a.j.g){case 1:c.b-=b.d;break;case 2:c.a+=b.c;break;case 3:c.b+=b.a;break;case 4:c.a-=b.b;}return c} +function edc(a){var b;b=(Zcc(),RD(hs(new is(Mr(Z2b(a).a.Kc(),new ir))),18).c.i);while(b.k==(r3b(),o3b)){pQb(b,(Ywc(),twc),(Geb(),true));b=RD(hs(new is(Mr(Z2b(b).a.Kc(),new ir))),18).c.i}} +function BMc(a,b,c,d){var e,f,g,h;h=aMc(b,d);for(g=h.Kc();g.Ob();){e=RD(g.Pb(),12);a.d[e.p]=a.d[e.p]+a.c[c.p]}h=aMc(c,d);for(f=h.Kc();f.Ob();){e=RD(f.Pb(),12);a.d[e.p]=a.d[e.p]-a.c[b.p]}} +function Isd(a,b,c){var d,e;for(e=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),27);Byd(d,d.i+b,d.j+c)}xgb((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b),new Osd(b,c))} +function $yb(a,b,c,d){var e,f;f=b;e=f.d==null||a.a.Ne(c.d,f.d)>0?1:0;while(f.a[e]!=c){f=f.a[e];e=a.a.Ne(c.d,f.d)>0?1:0}f.a[e]=d;d.b=c.b;d.a[0]=c.a[0];d.a[1]=c.a[1];c.a[0]=null;c.a[1]=null} +function zIb(a){var b,c,d,e;b=new bnb;c=$C(xdb,Hye,28,a.a.c.length,16,1);Snb(c,c.length);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),125);if(!c[d.d]){ZEb(b.c,d);yIb(a,d,c)}}return b} +function UXb(a,b){var c,d,e,f,g;e=b==1?MXb:LXb;for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),88);for(g=RD(Qc(a.f.c,c),21).Kc();g.Ob();){f=RD(g.Pb(),42);Ymb(a.b.b,f.b);Ymb(a.b.a,RD(f.b,86).d)}}} +function P9b(a,b){var c;b.Ug('Hierarchical port position processing',1);c=a.b;c.c.length>0&&O9b((tFb(0,c.c.length),RD(c.c[0],30)),a);c.c.length>1&&O9b(RD(Vmb(c,c.c.length-1),30),a);b.Vg()} +function Sod(a){Pod();var b,c;b=ysb(Lod,cD(WC(D3,1),jwe,279,0,[Nod]));if(dy(Tx(b,a))>1){return false}c=ysb(Kod,cD(WC(D3,1),jwe,279,0,[Jod,Ood]));if(dy(Tx(c,a))>1){return false}return true} +function FBd(a,b){var c;c=Xjb((YSd(),XSd),a);ZD(c,507)?$jb(XSd,a,new B5d(this,b)):$jb(XSd,a,this);BBd(this,b);if(b==(jTd(),iTd)){this.wb=RD(this,2038);RD(b,2040)}else{this.wb=(lTd(),kTd)}} +function Lae(b){var c,d,e;if(b==null){return null}c=null;for(d=0;d<nAd.length;++d){try{return b2d(nAd[d],b)}catch(a){a=zdb(a);if(ZD(a,33)){e=a;c=e}else throw Adb(a)}}throw Adb(new RSd(c))} +function Mrb(){Mrb=geb;Krb=cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']);Lrb=cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])} +function qBb(a){var b,c,d;b=lhb(typeof(b),Yxe)?null:new gFb;if(!b){return}SAb();c=(d=900,d>=Awe?'error':d>=900?'warn':d>=800?'info':'log');eFb(c,a.a);!!a.b&&fFb(b,c,a.b,'Exception: ',true)} +function mQb(a,b){var c,d;d=(!a.q&&(a.q=new Tsb),Wjb(a.q,b));if(d!=null){return d}c=b.Sg();ZD(c,4)&&(c==null?(!a.q&&(a.q=new Tsb),_jb(a.q,b)):(!a.q&&(a.q=new Tsb),Zjb(a.q,b,c)),a);return c} +function sXb(){sXb=geb;nXb=new tXb('P1_CYCLE_BREAKING',0);oXb=new tXb('P2_LAYERING',1);pXb=new tXb('P3_NODE_ORDERING',2);qXb=new tXb('P4_NODE_PLACEMENT',3);rXb=new tXb('P5_EDGE_ROUTING',4)} +function KZb(a,b){CZb();var c;if(a.c==b.c){if(a.b==b.b||rZb(a.b,b.b)){c=oZb(a.b)?1:-1;if(a.a&&!b.a){return c}else if(!a.a&&b.a){return -c}}return hgb(a.b.g,b.b.g)}else{return Qfb(a.c,b.c)}} +function E3c(a,b){var c,d,e;if(p3c(a,b)){return true}for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),27);e=R2c(c);if(o3c(a,c,e)){return true}if(C3c(a,c)-a.g<=a.a){return true}}return false} +function ncd(){ncd=geb;mcd=(Kcd(),Jcd);jcd=Fcd;icd=Dcd;gcd=zcd;hcd=Bcd;fcd=new A3b(8);ecd=new mGd((umd(),tld),fcd);kcd=new mGd(fmd,8);lcd=Hcd;bcd=ucd;ccd=wcd;dcd=new mGd(Mkd,(Geb(),false))} +function hkd(){hkd=geb;ekd=new A3b(15);dkd=new mGd((umd(),tld),ekd);gkd=new mGd(fmd,15);fkd=new mGd(Rld,sgb(0));$jd=Wkd;akd=kld;ckd=pld;Xjd=new mGd(Dkd,KGe);_jd=ald;bkd=nld;Yjd=Fkd;Zjd=Kkd} +function JGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))} +function KGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))} +function MGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))} +function LGd(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i!=1||(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i!=1){throw Adb(new agb(JIe))}return AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))} +function bJd(a,b,c){var d,e,f;++a.j;e=a.Ej();if(b>=e||b<0)throw Adb(new veb(MIe+b+NIe+e));if(c>=e||c<0)throw Adb(new veb(OIe+c+NIe+e));b!=c?(d=(f=a.Cj(c),a.qj(b,f),f)):(d=a.xj(c));return d} +function Lje(a){var b,c,d;d=a;if(a){b=0;for(c=a.Eh();c;c=c.Eh()){if(++b>wxe){return Lje(c)}d=c;if(c==a){throw Adb(new dgb('There is a cycle in the containment hierarchy of '+a))}}}return d} +function Fe(a){var b,c,d;d=new Jyb(pve,'[',']');for(c=a.Kc();c.Ob();){b=c.Pb();Gyb(d,dE(b)===dE(a)?'(this Collection)':b==null?vve:jeb(b))}return !d.a?d.c:d.e.length==0?d.a.a:d.a.a+(''+d.e)} +function p3c(a,b){var c,d;d=false;if(b.gc()<2){return false}for(c=0;c<b.gc();c++){c<b.gc()-1?(d=d|o3c(a,RD(b.Xb(c),27),RD(b.Xb(c+1),27))):(d=d|o3c(a,RD(b.Xb(c),27),RD(b.Xb(0),27)))}return d} +function wAd(a,b){var c;if(b!=a.a){c=null;!!a.a&&(c=RD(a.a,54).Th(a,4,t7,c));!!b&&(c=RD(b,54).Rh(a,4,t7,c));c=rAd(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,1,b,b))} +function p2d(a,b){var c;if(b!=a.e){!!a.e&&oae($9d(a.e),a);!!b&&(!b.b&&(b.b=new pae(new lae)),nae(b.b,a));c=f2d(a,b,null);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,b,b))} +function $mc(a,b){var c;c=b.o;if(Dmd(a.f)){a.j.a=$wnd.Math.max(a.j.a,c.a);a.j.b+=c.b;a.d.c.length>1&&(a.j.b+=a.e)}else{a.j.a+=c.a;a.j.b=$wnd.Math.max(a.j.b,c.b);a.d.c.length>1&&(a.j.a+=a.e)}} +function Mnc(){Mnc=geb;Jnc=cD(WC(E3,1),NAe,64,0,[(qpd(),Yod),Xod,npd]);Inc=cD(WC(E3,1),NAe,64,0,[Xod,npd,ppd]);Knc=cD(WC(E3,1),NAe,64,0,[npd,ppd,Yod]);Lnc=cD(WC(E3,1),NAe,64,0,[ppd,Yod,Xod])} +function Upc(a,b,c,d){var e,f,g,h,i,j,k;g=a.c.d;h=a.d.d;if(g.j==h.j){return}k=a.b;e=g.j;i=null;while(e!=h.j){i=b==0?tpd(e):rpd(e);f=$pc(e,k.d[e.g],c);j=$pc(i,k.d[i.g],c);Mub(d,$id(f,j));e=i}} +function OJc(a,b,c,d){var e,f,g,h,i;g=hMc(a.a,b,c);h=RD(g.a,17).a;f=RD(g.b,17).a;if(d){i=RD(mQb(b,(Ywc(),Iwc)),10);e=RD(mQb(c,Iwc),10);if(!!i&&!!e){Slc(a.b,i,e);h+=a.b.i;f+=a.b.e}}return h>f} +function OLc(a){var b,c,d,e,f,g,h,i,j;this.a=LLc(a);this.b=new bnb;for(c=a,d=0,e=c.length;d<e;++d){b=c[d];f=new bnb;Rmb(this.b,f);for(h=b,i=0,j=h.length;i<j;++i){g=h[i];Rmb(f,new dnb(g.j))}}} +function QLc(a,b,c){var d,e,f;f=0;d=c[b];if(b<c.length-1){e=c[b+1];if(a.b[b]){f=iNc(a.d,d,e);f+=lMc(a.a,d,(qpd(),Xod));f+=lMc(a.a,e,ppd)}else{f=gMc(a.a,d,e)}}a.c[b]&&(f+=nMc(a.a,d));return f} +function r0b(a,b,c,d,e){var f,g,h,i;i=null;for(h=new Anb(d);h.a<h.c.c.length;){g=RD(ynb(h),452);if(g!=c&&Wmb(g.e,e,0)!=-1){i=g;break}}f=s0b(e);Y0b(f,c.b);Z0b(f,i.b);Rc(a.a,e,new J0b(f,b,c.f))} +function h2b(a){var b,c,d,e;if(Emd(RD(mQb(a.b,(yCc(),rAc)),88))){return 0}b=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(c.k==(r3b(),p3b)){e=c.o.a;b=$wnd.Math.max(b,e)}}return b} +function Tlc(a){while(a.g.c!=0&&a.d.c!=0){if(amc(a.g).c>amc(a.d).c){a.i+=a.g.c;cmc(a.d)}else if(amc(a.d).c>amc(a.g).c){a.e+=a.d.c;cmc(a.g)}else{a.i+=_lc(a.g);a.e+=_lc(a.d);cmc(a.g);cmc(a.d)}}} +function vTc(a,b,c){var d,e,f,g;f=b.q;g=b.r;new bTc((fTc(),dTc),b,f,1);new bTc(dTc,f,g,1);for(e=new Anb(c);e.a<e.c.c.length;){d=RD(ynb(e),118);if(d!=f&&d!=b&&d!=g){PTc(a.a,d,b);PTc(a.a,d,g)}}} +function vVc(a,b,c,d){a.a.d=$wnd.Math.min(b,c);a.a.a=$wnd.Math.max(b,d)-a.a.d;if(b<c){a.b=0.5*(b+c);a.g=CEe*a.b+0.9*b;a.f=CEe*a.b+0.9*c}else{a.b=0.5*(b+d);a.g=CEe*a.b+0.9*d;a.f=CEe*a.b+0.9*b}} +function zZc(a){var b,c,d,e;if(a.b!=0){b=new Yub;for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),39);ye(b,$Wc(d));c=d.e;c.a=RD(mQb(d,(q$c(),o$c)),17).a;c.b=RD(mQb(d,p$c),17).a}return b}return new Yub} +function t8b(a){switch(RD(mQb(a,(yCc(),UAc)),171).g){case 1:pQb(a,UAc,(cxc(),_wc));break;case 2:pQb(a,UAc,(cxc(),axc));break;case 3:pQb(a,UAc,(cxc(),Zwc));break;case 4:pQb(a,UAc,(cxc(),$wc));}} +function Whc(a,b,c){var d;c.Ug('Self-Loop routing',1);d=Xhc(b);fE(mQb(b,(rid(),qid)));FDb(GDb(CDb(CDb(EDb(new SDb(null,new Swb(b.b,16)),new $hc),new aic),new cic),new eic),new gic(a,d));c.Vg()} +function $uc(){$uc=geb;Yuc=new _uc(LAe,0);Vuc=new _uc(Nye,1);Zuc=new _uc(Oye,2);Xuc=new _uc('LEFT_RIGHT_CONSTRAINT_LOCKING',3);Wuc=new _uc('LEFT_RIGHT_CONNECTION_LOCKING',4);Uuc=new _uc(EBe,5)} +function tWc(a,b,c){var d,e,f,g,h,i,j;h=c.a/2;f=c.b/2;d=$wnd.Math.abs(b.a-a.a);e=$wnd.Math.abs(b.b-a.b);i=1;j=1;d>h&&(i=h/d);e>f&&(j=f/e);g=$wnd.Math.min(i,j);a.a+=g*(b.a-a.a);a.b+=g*(b.b-a.b)} +function I8c(a,b,c,d,e){var f,g;g=false;f=RD(Vmb(c.b,0),27);while(V8c(a,b,f,d,e)){g=true;T9c(c,f);if(c.b.c.length==0){break}f=RD(Vmb(c.b,0),27)}c.b.c.length==0&&Fad(c.j,c);g&&gad(b.q);return g} +function Eid(a,b){tid();var c,d,e,f;if(b.b<2){return false}f=Sub(b,0);c=RD(evb(f),8);d=c;while(f.b!=f.d.c){e=RD(evb(f),8);if(Did(a,d,e)){return true}d=e}if(Did(a,d,c)){return true}return false} +function Bxd(a,b,c,d){var e,f;if(c==0){return !a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),BVd(a.o,b,d)}return f=RD(vYd((e=RD(Ywd(a,16),29),!e?a.ii():e),c),69),f.wk().Ak(a,Wwd(a),c-AYd(a.ii()),b,d)} +function BBd(a,b){var c;if(b!=a.sb){c=null;!!a.sb&&(c=RD(a.sb,54).Th(a,1,n7,c));!!b&&(c=RD(b,54).Rh(a,1,n7,c));c=hBd(a,b,c);!!c&&c.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,4,b,b))} +function YDd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new ZEd(a);Hzd(c.a,(uFb(e),e));f=vDd(b,'y');d=new $Ed(a);Izd(d.a,(uFb(f),f))}else{throw Adb(new CDd('All edge sections need an end point.'))}} +function WDd(a,b){var c,d,e,f;if(b){e=vDd(b,'x');c=new WEd(a);Ozd(c.a,(uFb(e),e));f=vDd(b,'y');d=new XEd(a);Pzd(d.a,(uFb(f),f))}else{throw Adb(new CDd('All edge sections need a start point.'))}} +function hBb(a,b){var c,d,e,f,g,h,i;for(d=kBb(a),f=0,h=d.length;f<h;++f){qBb(b)}i=!dBb&&a.e?dBb?null:a.d:null;while(i){for(c=kBb(i),e=0,g=c.length;e<g;++e){qBb(b)}i=!dBb&&i.e?dBb?null:i.d:null}} +function aXb(a,b){var c,d;d=RD(mQb(b,(yCc(),BBc)),101);pQb(b,(Ywc(),Fwc),d);c=b.e;!!c&&(FDb(new SDb(null,new Swb(c.a,16)),new fXb(a)),FDb(EDb(new SDb(null,new Swb(c.b,16)),new hXb),new jXb(a)))} +function r3b(){r3b=geb;p3b=new s3b('NORMAL',0);o3b=new s3b('LONG_EDGE',1);m3b=new s3b('EXTERNAL_PORT',2);q3b=new s3b('NORTH_SOUTH_PORT',3);n3b=new s3b('LABEL',4);l3b=new s3b('BREAKING_POINT',5)} +function x7b(a){var b,c,d,e;b=false;if(nQb(a,(Ywc(),cwc))){c=RD(mQb(a,cwc),85);for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);if(v7b(d)){if(!b){u7b(Y2b(a));b=true}y7b(RD(c.xc(d),314))}}}} +function GFd(a){var b,c,d,e,f,g,h,i,j;j=HFd(a);c=a.e;f=c!=null;f&&sDd(j,FIe,a.e);h=a.k;g=!!h;g&&sDd(j,'type',ps(a.k));d=cve(a.j);e=!d;if(e){i=new MB;sC(j,lIe,i);b=new SFd(i);xgb(a.j,b)}return j} +function Zv(a){var b,c,d,e;e=Thb((dk(a.gc(),'size'),new cib),123);d=true;for(c=gn(a).Kc();c.Ob();){b=RD(c.Pb(),44);d||(e.a+=pve,e);d=false;Yhb(Thb(Yhb(e,b.ld()),61),b.md())}return (e.a+='}',e).a} +function AD(a,b){var c,d,e;b&=63;if(b<22){c=a.l<<b;d=a.m<<b|a.l>>22-b;e=a.h<<b|a.m>>22-b}else if(b<44){c=0;d=a.l<<b-22;e=a.m<<b-22|a.l>>44-b}else{c=0;d=0;e=a.l<<b-44}return hD(c&dxe,d&dxe,e&exe)} +function Neb(a){Meb==null&&(Meb=new RegExp('^\\s*[+-]?(NaN|Infinity|((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?[dDfF]?)\\s*$'));if(!Meb.test(a)){throw Adb(new Vgb(nxe+a+'"'))}return parseFloat(a)} +function PXb(a,b){var c,d,e,f,g;e=b==1?MXb:LXb;for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),88);for(g=RD(Qc(a.f.c,c),21).Kc();g.Ob();){f=RD(g.Pb(),42);Rmb(a.b.b,RD(f.b,86));Rmb(a.b.a,RD(f.b,86).d)}}} +function rqc(a,b){var c,d,e,f;f=b.b.j;a.a=$C(kE,Pwe,28,f.c.length,15,1);e=0;for(d=0;d<f.c.length;d++){c=(tFb(d,f.c.length),RD(f.c[d],12));c.e.c.length==0&&c.g.c.length==0?(e+=1):(e+=3);a.a[d]=e}} +function tuc(){tuc=geb;ouc=new vuc('ALWAYS_UP',0);nuc=new vuc('ALWAYS_DOWN',1);quc=new vuc('DIRECTION_UP',2);puc=new vuc('DIRECTION_DOWN',3);suc=new vuc('SMART_UP',4);ruc=new vuc('SMART_DOWN',5)} +function vid(a,b){if(a<0||b<0){throw Adb(new agb('k and n must be positive'))}else if(b>a){throw Adb(new agb('k must be smaller than n'))}else return b==0||b==a?1:a==0?0:Bid(a)/(Bid(b)*Bid(a-b))} +function msd(a,b){var c,d,e,f;c=new zId(a);while(c.g==null&&!c.c?sId(c):c.g==null||c.i!=0&&RD(c.g[c.i-1],51).Ob()){f=RD(tId(c),58);if(ZD(f,167)){d=RD(f,167);for(e=0;e<b.length;e++){b[e].Kg(d)}}}} +function Fyd(a){var b;if((a.Db&64)!=0)return kyd(a);b=new Shb(kyd(a));b.a+=' (height: ';Khb(b,a.f);b.a+=', width: ';Khb(b,a.g);b.a+=', x: ';Khb(b,a.i);b.a+=', y: ';Khb(b,a.j);b.a+=')';return b.a} +function Gn(a){var b,c,d,e,f,g,h;b=new gub;for(d=a,e=0,f=d.length;e<f;++e){c=d[e];g=Qb(c.ld());h=dub(b,g,Qb(c.md()));if(h!=null){throw Adb(new agb('duplicate key: '+g))}}this.b=(yob(),new uqb(b))} +function bob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];Gyb(f,String.fromCharCode(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function OUb(){OUb=geb;IUb=(TUb(),SUb);HUb=new lGd(Rze,IUb);sgb(1);GUb=new lGd(Sze,sgb(300));sgb(0);LUb=new lGd(Tze,sgb(0));new Xsd;MUb=new lGd(Uze,Vze);new Xsd;JUb=new lGd(Wze,5);NUb=SUb;KUb=RUb} +function K6d(a,b){var c;if(b!=null&&!a.c.Hk().fk(b)){c=ZD(b,58)?RD(b,58).Dh().zb:nfb(rb(b));throw Adb(new Ifb(KHe+a.c.xe()+"'s type '"+a.c.Hk().xe()+"' does not permit a value of type '"+c+"'"))}} +function k0b(a,b,c){var d,e;e=new Jkb(a.b,0);while(e.b<e.d.gc()){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),72));if(dE(mQb(d,(Ywc(),Dwc)))!==dE(b)){continue}e2b(d.n,Y2b(a.c.i),c);Ckb(e);Rmb(b.b,d)}} +function Arc(a){var b,c;c=$wnd.Math.sqrt((a.k==null&&(a.k=tsc(a,new Esc)),Kfb(a.k)/(a.b*(a.g==null&&(a.g=qsc(a,new Csc)),Kfb(a.g)))));b=Ydb(Hdb($wnd.Math.round(c)));b=$wnd.Math.min(b,a.f);return b} +function sse(){var a,b,c;b=0;for(a=0;a<'X'.length;a++){c=rse((BFb(a,'X'.length),'X'.charCodeAt(a)));if(c==0)throw Adb(new Lqe((BFb(a,'X'.length+1),'Unknown Option: '+'X'.substr(a))));b|=c}return b} +function R3b(){J3b();v2b.call(this);this.j=(qpd(),opd);this.a=new pjd;new T2b;this.f=(dk(2,iwe),new cnb(2));this.e=(dk(4,iwe),new cnb(4));this.g=(dk(4,iwe),new cnb(4));this.b=new h4b(this.e,this.g)} +function A6b(a,b){var c,d;if(Heb(TD(mQb(b,(Ywc(),Nwc))))){return false}d=b.c.i;if(a==(cxc(),Zwc)){if(d.k==(r3b(),n3b)){return false}}c=RD(mQb(d,(yCc(),UAc)),171);if(c==$wc){return false}return true} +function B6b(a,b){var c,d;if(Heb(TD(mQb(b,(Ywc(),Nwc))))){return false}d=b.d.i;if(a==(cxc(),_wc)){if(d.k==(r3b(),n3b)){return false}}c=RD(mQb(d,(yCc(),UAc)),171);if(c==axc){return false}return true} +function a7b(a,b){var c,d,e,f,g,h,i;g=a.d;i=a.o;h=new Uid(-g.b,-g.d,g.b+i.a+g.c,g.d+i.b+g.a);for(d=b,e=0,f=d.length;e<f;++e){c=d[e];!!c&&Sid(h,c.i)}g.b=-h.c;g.d=-h.d;g.c=h.b-g.b-i.a;g.a=h.a-g.d-i.b} +function _gc(a,b){if(b.a){switch(RD(mQb(b.b,(Ywc(),Fwc)),101).g){case 0:case 1:Roc(b);case 2:FDb(new SDb(null,new Swb(b.d,16)),new mhc);aoc(a.a,b);}}else{FDb(new SDb(null,new Swb(b.d,16)),new mhc)}} +function Xbd(){Xbd=geb;Sbd=new Ybd('CENTER_DISTANCE',0);Tbd=new Ybd('CIRCLE_UNDERLAP',1);Wbd=new Ybd('RECTANGLE_UNDERLAP',2);Ubd=new Ybd('INVERTED_OVERLAP',3);Vbd=new Ybd('MINIMUM_ROOT_DISTANCE',4)} +function Iqe(a){Gqe();var b,c,d,e,f;if(a==null)return null;d=a.length;e=d*2;b=$C(hE,zwe,28,e,15,1);for(c=0;c<d;c++){f=a[c];f<0&&(f+=256);b[c*2]=Fqe[f>>4];b[c*2+1]=Fqe[f&15]}return Ihb(b,0,b.length)} +function sn(a){fn();var b,c,d;d=a.c.length;switch(d){case 0:return en;case 1:b=RD(Ir(new Anb(a)),44);return xn(b.ld(),b.md());default:c=RD(anb(a,$C(UK,Zve,44,a.c.length,0,1)),173);return new Mx(c);}} +function KWb(a){var b,c,d,e,f,g;b=new wmb;c=new wmb;hmb(b,a);hmb(c,a);while(c.b!=c.c){e=RD(smb(c),36);for(g=new Anb(e.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.e){d=f.e;hmb(b,d);hmb(c,d)}}}return b} +function e3b(a,b){switch(b.g){case 1:return dr(a.j,(J3b(),F3b));case 2:return dr(a.j,(J3b(),D3b));case 3:return dr(a.j,(J3b(),H3b));case 4:return dr(a.j,(J3b(),I3b));default:return yob(),yob(),vob;}} +function Zlc(a,b){var c,d,e;c=$lc(b,a.e);d=RD(Wjb(a.g.f,c),17).a;e=a.a.c.length-1;if(a.a.c.length!=0&&RD(Vmb(a.a,e),293).c==d){++RD(Vmb(a.a,e),293).a;++RD(Vmb(a.a,e),293).b}else{Rmb(a.a,new hmc(d))}} +function tLc(a,b,c){var d,e;d=sLc(a,b,c);if(d!=0){return d}if(nQb(b,(Ywc(),zwc))&&nQb(c,zwc)){e=hgb(RD(mQb(b,zwc),17).a,RD(mQb(c,zwc),17).a);e<0?uLc(a,b,c):e>0&&uLc(a,c,b);return e}return rLc(a,b,c)} +function $4c(){$4c=geb;R4c=(umd(),Qld);Y4c=fmd;K4c=kld;L4c=nld;M4c=pld;J4c=ild;N4c=sld;Q4c=Lld;H4c=(D4c(),o4c);I4c=p4c;T4c=v4c;W4c=y4c;U4c=w4c;V4c=x4c;O4c=r4c;P4c=t4c;S4c=u4c;X4c=z4c;Z4c=B4c;G4c=n4c} +function P9c(a,b){var c,d,e,f,g;if(a.e<=b){return a.g}if(R9c(a,a.g,b)){return a.g}f=a.r;d=a.g;g=a.r;e=(f-d)/2+d;while(d+1<f){c=S9c(a,e,false);if(c.b<=e&&c.a<=b){g=e;f=e}else{d=e}e=(f-d)/2+d}return g} +function Eed(a,b,c){var d;d=zed(a,b,true);Fqd(c,'Recursive Graph Layout',d);msd(b,cD(WC(j4,1),rve,536,0,[new Bfd]));Hxd(b,(umd(),Tld))||msd(b,cD(WC(j4,1),rve,536,0,[new dgd]));Fed(a,b,null,c);Hqd(c)} +function Hqd(a){var b;if(a.p==null){throw Adb(new dgb('The task has not begun yet.'))}if(!a.b){if(a.k){b=(gib(),Ndb(Hdb(Date.now()),Awe));a.q=Xdb(Vdb(b,a.o))*1.0E-9}a.c<a.r&&Iqd(a,a.r-a.c);a.b=true}} +function ssd(a){var b,c,d;d=new Ejd;Mub(d,new rjd(a.j,a.k));for(c=new dMd((!a.a&&(a.a=new XZd(D4,a,5)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),377);Mub(d,new rjd(b.a,b.b))}Mub(d,new rjd(a.b,a.c));return d} +function QDd(a,b,c,d,e){var f,g,h,i,j,k;if(e){i=e.a.length;f=new vue(i);for(k=(f.b-f.a)*f.c<0?(uue(),tue):new Rue(f);k.Ob();){j=RD(k.Pb(),17);h=xDd(e,j.a);g=new PEd(a,b,c,d);RDd(g.a,g.b,g.c,g.d,h)}}} +function Rx(b,c){var d;if(dE(b)===dE(c)){return true}if(ZD(c,21)){d=RD(c,21);try{return b.gc()==d.gc()&&b.Ic(d)}catch(a){a=zdb(a);if(ZD(a,169)||ZD(a,212)){return false}else throw Adb(a)}}return false} +function Kzb(a,b,c,d,e,f){this.c=a;switch(b.g){case 2:if(a.a.Ne(e,c)<0){throw Adb(new agb(Sxe+e+Txe+c))}break;case 1:a.a.Ne(e,e);break;case 3:a.a.Ne(c,c);}this.f=b;this.b=c;this.a=d;this.e=e;this.d=f} +function LKb(a,b){var c;Rmb(a.d,b);c=b.Mf();if(a.c){a.e.a=$wnd.Math.max(a.e.a,c.a);a.e.b+=c.b;a.d.c.length>1&&(a.e.b+=a.a)}else{a.e.a+=c.a;a.e.b=$wnd.Math.max(a.e.b,c.b);a.d.c.length>1&&(a.e.a+=a.a)}} +function Ipc(a){var b,c,d,e;e=a.i;b=e.b;d=e.j;c=e.g;switch(e.a.g){case 0:c.a=(a.g.b.o.a-d.a)/2;break;case 1:c.a=b.d.n.a+b.d.a.a;break;case 2:c.a=b.d.n.a+b.d.a.a-d.a;break;case 3:c.b=b.d.n.b+b.d.a.b;}} +function oOc(a,b,c){var d,e,f;for(e=new is(Mr(W2b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(!(!W0b(d)&&!(!W0b(d)&&d.c.i.c==d.d.i.c))){continue}f=gOc(a,d,c,new VOc);f.c.length>1&&(ZEb(b.c,f),true)}} +function _id(a,b,c,d,e){if(d<b||e<c){throw Adb(new agb('The highx must be bigger then lowx and the highy must be bigger then lowy'))}a.a<b?(a.a=b):a.a>d&&(a.a=d);a.b<c?(a.b=c):a.b>e&&(a.b=e);return a} +function LFd(a){if(ZD(a,143)){return EFd(RD(a,143))}else if(ZD(a,233)){return FFd(RD(a,233))}else if(ZD(a,23)){return GFd(RD(a,23))}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[a])))))}} +function ujb(a,b,c,d,e){var f,g,h;f=true;for(g=0;g<d;g++){f=f&c[g]==0}if(e==0){hib(c,d,a,0,b);g=b}else{h=32-e;f=f&c[g]<<h==0;for(g=0;g<b-1;g++){a[g]=c[g+d]>>>e|c[g+d+1]<<h}a[g]=c[g+d]>>>e;++g}return f} +function ZQc(a,b,c,d){var e,f,g;if(b.k==(r3b(),o3b)){for(f=new is(Mr(Z2b(b).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);g=e.c.i.k;if(g==o3b&&a.c.a[e.c.i.c.p]==d&&a.c.a[b.c.p]==c){return true}}}return false} +function CD(a,b){var c,d,e,f;b&=63;c=a.h&exe;if(b<22){f=c>>>b;e=a.m>>b|c<<22-b;d=a.l>>b|a.m<<22-b}else if(b<44){f=0;e=c>>>b-22;d=a.m>>b-22|a.h<<44-b}else{f=0;e=0;d=c>>>b-44}return hD(d&dxe,e&dxe,f&exe)} +function mmc(a,b,c,d){var e;this.b=d;this.e=a==(RKc(),PKc);e=b[c];this.d=YC(xdb,[Nve,Hye],[183,28],16,[e.length,e.length],2);this.a=YC(kE,[Nve,Pwe],[53,28],15,[e.length,e.length],2);this.c=new Ylc(b,c)} +function Rmc(a){var b,c,d;a.k=new Si((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,a.j.c.length);for(d=new Anb(a.j);d.a<d.c.c.length;){c=RD(ynb(d),113);b=c.d.j;Rc(a.k,b,c)}a.e=Dnc(Ec(a.k))} +function sVc(a,b){var c,d,e;Ysb(a.d,b);c=new zVc;Zjb(a.c,b,c);c.f=tVc(b.c);c.a=tVc(b.d);c.d=(HUc(),e=b.c.i.k,e==(r3b(),p3b)||e==l3b);c.e=(d=b.d.i.k,d==p3b||d==l3b);c.b=b.c.j==(qpd(),ppd);c.c=b.d.j==Xod} +function sJb(a){var b,c,d,e,f;f=lve;e=lve;for(d=new Anb(CIb(a));d.a<d.c.c.length;){c=RD(ynb(d),218);b=c.e.e-c.d.e;c.e==a&&b<e?(e=b):b<f&&(f=b)}e==lve&&(e=-1);f==lve&&(f=-1);return new Ptd(sgb(e),sgb(f))} +function qTb(a,b){var c,d,e;e=Hze;d=(IRb(),FRb);e=$wnd.Math.abs(a.b);c=$wnd.Math.abs(b.f-a.b);if(c<e){e=c;d=GRb}c=$wnd.Math.abs(a.a);if(c<e){e=c;d=HRb}c=$wnd.Math.abs(b.g-a.a);if(c<e){e=c;d=ERb}return d} +function adc(a,b){var c,d,e,f;c=b.a.o.a;f=new Rkb(Y2b(b.a).b,b.c,b.f+1);for(e=new Dkb(f);e.b<e.d.gc();){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),30));if(d.c.a>=c){_cc(a,b,d.p);return true}}return false} +function EA(a,b,c,d){var e,f,g,h,i,j;g=c.length;f=0;e=-1;j=Bhb((BFb(b,a.length+1),a.substr(b)),(wvb(),uvb));for(h=0;h<g;++h){i=c[h].length;if(i>f&&whb(j,Bhb(c[h],uvb))){e=h;f=i}}e>=0&&(d[0]=b+f);return e} +function gCd(a){var b;if((a.Db&64)!=0)return Fyd(a);b=new dib(FHe);!a.a||Zhb(Zhb((b.a+=' "',b),a.a),'"');Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function xge(a,b,c){var d,e,f,g,h;h=pke(a.e.Dh(),b);e=RD(a.g,124);d=0;for(g=0;g<a.i;++g){f=e[g];if(h.am(f.Lk())){if(d==c){vLd(a,g);return nke(),RD(b,69).xk()?f:f.md()}++d}}throw Adb(new veb(HJe+c+NIe+d))} +function Rqe(a){var b,c,d;b=a.c;if(b==2||b==7||b==1){return Vse(),Vse(),Ese}else{d=Pqe(a);c=null;while((b=a.c)!=2&&b!=7&&b!=1){if(!c){c=(Vse(),Vse(),++Use,new iue(1));hue(c,d);d=c}hue(c,Pqe(a))}return d}} +function Kb(a,b,c){if(a<0||a>c){return Jb(a,c,'start index')}if(b<0||b>c){return Jb(b,c,'end index')}return hc('end index (%s) must not be less than start index (%s)',cD(WC(jJ,1),rve,1,5,[sgb(b),sgb(a)]))} +function dA(b,c){var d,e,f,g;for(e=0,f=b.length;e<f;e++){g=b[e];try{g[1]?g[0].Um()&&(c=cA(c,g)):g[0].Um()}catch(a){a=zdb(a);if(ZD(a,82)){d=a;Qz();Wz(ZD(d,485)?RD(d,485).ke():d)}else throw Adb(a)}}return c} +function _cc(a,b,c){var d,e,f;c!=b.c+b.b.gc()&&odc(b.a,wdc(b,c-b.c));f=b.a.c.p;a.a[f]=$wnd.Math.max(a.a[f],b.a.o.a);for(e=RD(mQb(b.a,(Ywc(),Mwc)),15).Kc();e.Ob();){d=RD(e.Pb(),72);pQb(d,Ycc,(Geb(),true))}} +function Aic(a,b){var c,d,e;e=zic(b);pQb(b,(Ywc(),xwc),e);if(e){d=lve;!!qtb(a.f,e)&&(d=RD(Wd(qtb(a.f,e)),17).a);c=RD(Vmb(b.g,0),18);Heb(TD(mQb(c,Nwc)))||Zjb(a,e,sgb($wnd.Math.min(RD(mQb(c,zwc),17).a,d)))}} +function aGc(a,b,c){var d,e,f,g,h;b.p=-1;for(h=c3b(b,(BEc(),zEc)).Kc();h.Ob();){g=RD(h.Pb(),12);for(e=new Anb(g.g);e.a<e.c.c.length;){d=RD(ynb(e),18);f=d.d.i;b!=f&&(f.p<0?c.Fc(d):f.p>0&&aGc(a,f,c))}}b.p=0} +function Ahd(a){var b;this.c=new Yub;this.f=a.e;this.e=a.d;this.i=a.g;this.d=a.c;this.b=a.b;this.k=a.j;this.a=a.a;!a.i?(this.j=(b=RD(mfb(d3),9),new Fsb(b,RD(WEb(b,b.length),9),0))):(this.j=a.i);this.g=a.f} +function Wb(a){var b,c,d,e;b=Thb(Zhb(new dib('Predicates.'),'and'),40);c=true;for(e=new Dkb(a);e.b<e.d.gc();){d=(sFb(e.b<e.d.gc()),e.d.Xb(e.c=e.b++));c||(b.a+=',',b);b.a+=''+d;c=false}return (b.a+=')',b).a} +function vgc(a,b,c){var d,e,f;if(c<=b+2){return}e=(c-b)/2|0;for(d=0;d<e;++d){f=(tFb(b+d,a.c.length),RD(a.c[b+d],12));$mb(a,b+d,(tFb(c-d-1,a.c.length),RD(a.c[c-d-1],12)));tFb(c-d-1,a.c.length);a.c[c-d-1]=f}} +function Nmc(a,b,c){var d,e,f,g,h,i,j,k;f=a.d.p;h=f.e;i=f.r;a.g=new DMc(i);g=a.d.o.c.p;d=g>0?h[g-1]:$C(jR,WAe,10,0,0,1);e=h[g];j=g<h.length-1?h[g+1]:$C(jR,WAe,10,0,0,1);k=b==c-1;k?pMc(a.g,e,j):pMc(a.g,d,e)} +function Vmc(a){var b;this.j=new bnb;this.f=new _sb;this.b=(b=RD(mfb(E3),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.d=$C(kE,Pwe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.g=a} +function D3c(a,b){var c,d,e;if(b.c.length!=0){c=E3c(a,b);e=false;while(!c){n3c(a,b,true);e=true;c=E3c(a,b)}e&&n3c(a,b,false);d=N2c(b);!!a.b&&a.b.Gg(d);a.a=C3c(a,(tFb(0,b.c.length),RD(b.c[0],27)));D3c(a,d)}} +function $vd(a,b){var c,d,e;d=vYd(a.Dh(),b);c=b-a.ji();if(c<0){if(!d){throw Adb(new agb(OHe+b+PHe))}else if(d.rk()){e=a.Ih(d);e>=0?a.ki(e):Tvd(a,d)}else{throw Adb(new agb(KHe+d.xe()+LHe))}}else{Cvd(a,c,d)}} +function ADd(a){var b,c;c=null;b=false;if(ZD(a,211)){b=true;c=RD(a,211).a}if(!b){if(ZD(a,263)){b=true;c=''+RD(a,263).a}}if(!b){if(ZD(a,492)){b=true;c=''+RD(a,492).a}}if(!b){throw Adb(new Aeb(tIe))}return c} +function gge(a,b,c){var d,e,f,g,h,i;i=pke(a.e.Dh(),b);d=0;h=a.i;e=RD(a.g,124);for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){if(c==d){return g}++d;h=g+1}}if(c==d){return h}else{throw Adb(new veb(HJe+c+NIe+d))}} +function ucc(a,b){var c,d,e,f;if(a.f.c.length==0){return null}else{f=new Tid;for(d=new Anb(a.f);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.o;f.b=$wnd.Math.max(f.b,e.a);f.a+=e.b}f.a+=(a.f.c.length-1)*b;return f}} +function rOc(a){var b,c,d,e;c=new Yub;ye(c,a.o);d=new Fyb;while(c.b!=0){b=RD(c.b==0?null:(sFb(c.b!=0),Wub(c,c.a.a)),515);e=iOc(a,b,true);e&&Rmb(d.a,b)}while(d.a.c.length!=0){b=RD(Dyb(d),515);iOc(a,b,false)}} +function kid(){kid=geb;jid=new lid(Sye,0);cid=new lid('BOOLEAN',1);gid=new lid('INT',2);iid=new lid('STRING',3);did=new lid('DOUBLE',4);eid=new lid('ENUM',5);fid=new lid('ENUMSET',6);hid=new lid('OBJECT',7)} +function Sid(a,b){var c,d,e,f,g;d=$wnd.Math.min(a.c,b.c);f=$wnd.Math.min(a.d,b.d);e=$wnd.Math.max(a.c+a.b,b.c+b.b);g=$wnd.Math.max(a.d+a.a,b.d+b.a);if(e<d){c=d;d=e;e=c}if(g<f){c=f;f=g;g=c}Rid(a,d,f,e-d,g-f)} +function m3d(a,b){var c,d;if(a.f){while(b.Ob()){c=RD(b.Pb(),76);d=c.Lk();if(ZD(d,102)&&(RD(d,19).Bb&QHe)!=0&&(!a.e||d.pk()!=C4||d.Lj()!=0)&&c.md()!=null){b.Ub();return true}}return false}else{return b.Ob()}} +function o3d(a,b){var c,d;if(a.f){while(b.Sb()){c=RD(b.Ub(),76);d=c.Lk();if(ZD(d,102)&&(RD(d,19).Bb&QHe)!=0&&(!a.e||d.pk()!=C4||d.Lj()!=0)&&c.md()!=null){b.Pb();return true}}return false}else{return b.Sb()}} +function lke(){lke=geb;ike=cD(WC(qJ,1),Nve,2,6,[TKe,UKe,VKe,WKe,XKe,YKe,FIe]);hke=cD(WC(qJ,1),Nve,2,6,[TKe,'empty',UKe,pKe,'elementOnly']);kke=cD(WC(qJ,1),Nve,2,6,[TKe,'preserve','replace',ZKe]);jke=new Yee} +function e2b(a,b,c){var d,e,f;if(b==c){return}d=b;do{$id(a,d.c);e=d.e;if(e){f=d.d;Zid(a,f.b,f.d);$id(a,e.n);d=Y2b(e)}}while(e);d=c;do{ojd(a,d.c);e=d.e;if(e){f=d.d;njd(a,f.b,f.d);ojd(a,e.n);d=Y2b(e)}}while(e)} +function Wlc(a,b,c,d){var e,f,g,h,i;if(d.f.c+d.i.c==0){for(g=a.a[a.c],h=0,i=g.length;h<i;++h){f=g[h];Zjb(d,f,new dmc(a,f,c))}}e=RD(Wd(qtb(d.f,b)),677);e.b=0;e.c=e.f;e.c==0||gmc(RD(Vmb(e.a,e.b),293));return e} +function btc(){btc=geb;Zsc=new ctc('MEDIAN_LAYER',0);_sc=new ctc('TAIL_LAYER',1);Ysc=new ctc('HEAD_LAYER',2);$sc=new ctc('SPACE_EFFICIENT_LAYER',3);atc=new ctc('WIDEST_LAYER',4);Xsc=new ctc('CENTER_LAYER',5)} +function WGc(a){var b,c,d,e;a.e=0;for(e=Sub(a.f,0);e.b!=e.d.c;){d=RD(evb(e),10);if(d.p>=a.d.b.c.length){b=new R4b(a.d);b.p=d.p-1;Rmb(a.d.b,b);c=new R4b(a.d);c.p=d.p;Rmb(a.d.b,c)}g3b(d,RD(Vmb(a.d.b,d.p),30))}} +function DVc(a,b,c){var d,e,f;if(!a.b[b.g]){a.b[b.g]=true;d=c;!d&&(d=new YWc);Mub(d.b,b);for(f=a.a[b.g].Kc();f.Ob();){e=RD(f.Pb(),65);e.b!=b&&DVc(a,e.b,d);e.c!=b&&DVc(a,e.c,d);Mub(d.a,e)}return d}return null} +function iMb(a){switch(a.g){case 0:case 1:case 2:return qpd(),Yod;case 3:case 4:case 5:return qpd(),npd;case 6:case 7:case 8:return qpd(),ppd;case 9:case 10:case 11:return qpd(),Xod;default:return qpd(),opd;}} +function SOc(a,b){var c;if(a.c.length==0){return false}c=zDc((tFb(0,a.c.length),RD(a.c[0],18)).c.i);dOc();if(c==(wDc(),tDc)||c==sDc){return true}return yDb(GDb(new SDb(null,new Swb(a,16)),new $Oc),new aPc(b))} +function KDd(a,b){if(ZD(b,207)){return EDd(a,RD(b,27))}else if(ZD(b,193)){return FDd(a,RD(b,123))}else if(ZD(b,451)){return DDd(a,RD(b,166))}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[b])))))}} +function Ou(a,b,c){var d,e;this.f=a;d=RD(Wjb(a.b,b),260);e=!d?0:d.a;Sb(c,e);if(c>=(e/2|0)){this.e=!d?null:d.c;this.d=e;while(c++<e){Mu(this)}}else{this.c=!d?null:d.b;while(c-->0){Lu(this)}}this.b=b;this.a=null} +function iHb(a,b){var c,d;b.a?jHb(a,b):(c=RD(vAb(a.b,b.b),60),!!c&&c==a.a[b.b.f]&&!!c.a&&c.a!=b.b.a&&c.c.Fc(b.b),d=RD(uAb(a.b,b.b),60),!!d&&a.a[d.f]==b.b&&!!d.a&&d.a!=b.b.a&&b.b.c.Fc(d),wAb(a.b,b.b),undefined)} +function wMb(a,b){var c,d;c=RD(Vrb(a.b,b),127);if(RD(RD(Qc(a.r,b),21),87).dc()){c.n.b=0;c.n.c=0;return}c.n.b=a.C.b;c.n.c=a.C.c;a.A.Hc((Qpd(),Ppd))&&BMb(a,b);d=AMb(a,b);BLb(a,b)==(pod(),mod)&&(d+=2*a.w);c.a.a=d} +function FNb(a,b){var c,d;c=RD(Vrb(a.b,b),127);if(RD(RD(Qc(a.r,b),21),87).dc()){c.n.d=0;c.n.a=0;return}c.n.d=a.C.d;c.n.a=a.C.a;a.A.Hc((Qpd(),Ppd))&&JNb(a,b);d=INb(a,b);BLb(a,b)==(pod(),mod)&&(d+=2*a.w);c.a.b=d} +function VQb(a,b){var c,d,e,f;f=new bnb;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),68);Rmb(f,new fRb(c,true));Rmb(f,new fRb(c,false))}e=new $Qb(a);e.a.a.$b();bGb(f,a.b,new mob(cD(WC(bN,1),rve,693,0,[e])))} +function iTb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=a.a;n=a.b;j=b.a;o=b.b;k=c.a;p=c.b;l=d.a;q=d.b;f=i*o-n*j;g=k*q-p*l;e=(i-j)*(p-q)-(n-o)*(k-l);h=(f*(k-l)-g*(i-j))/e;m=(f*(p-q)-g*(n-o))/e;return new rjd(h,m)} +function Z6b(a,b){var c,d,e;b.Ug('End label pre-processing',1);c=Kfb(UD(mQb(a,(yCc(),VBc))));d=Kfb(UD(mQb(a,ZBc)));e=Emd(RD(mQb(a,rAc),88));FDb(EDb(new SDb(null,new Swb(a.b,16)),new f7b),new h7b(c,d,e));b.Vg()} +function LFc(a,b){var c,d,e;if(a.d[b.p]){return}a.d[b.p]=true;a.a[b.p]=true;for(d=new is(Mr(a3b(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)){continue}e=c.d.i;a.a[e.p]?Rmb(a.b,c):LFc(a,e)}a.a[b.p]=false} +function hGc(a,b,c){var d;d=0;switch(RD(mQb(b,(yCc(),UAc)),171).g){case 2:d=2*-c+a.a;++a.a;break;case 1:d=-c;break;case 3:d=c;break;case 4:d=2*c+a.b;++a.b;}nQb(b,(Ywc(),zwc))&&(d+=RD(mQb(b,zwc),17).a);return d} +function JSc(a,b,c){var d,e,f;c.zc(b,a);Rmb(a.n,b);f=a.p.zg(b);b.j==a.p.Ag()?YSc(a.e,f):YSc(a.j,f);LSc(a);for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(b),new _3b(b)])));gs(e);){d=RD(hs(e),12);c._b(d)||JSc(a,d,c)}} +function rZc(a,b,c){var d,e,f;c.Ug('Processor set neighbors',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Sub(b.b,0);while(!e&&d.b!=d.d.c){f=RD(evb(d),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(e=f)}!!e&&sZc(a,new dXc(e),c);c.Vg()} +function vsd(a){var b,c,d;c=RD(Gxd(a,(umd(),kld)),21);if(c.Hc((Qpd(),Mpd))){d=RD(Gxd(a,pld),21);b=new sjd(RD(Gxd(a,nld),8));if(d.Hc((dqd(),Ypd))){b.a<=0&&(b.a=20);b.b<=0&&(b.b=20)}return b}else{return new pjd}} +function nYd(a){var b,c,d;if(!a.b){d=new y_d;for(c=new yMd(qYd(a));c.e!=c.i.gc();){b=RD(xMd(c),19);(b.Bb&QHe)!=0&&WGd(d,b)}VHd(d);a.b=new N$d((RD(QHd(xYd((lTd(),kTd).o),8),19),d.i),d.g);yYd(a).b&=-9}return a.b} +function Dhb(a){var b,c,d;c=a.length;d=0;while(d<c&&(BFb(d,a.length),a.charCodeAt(d)<=32)){++d}b=c;while(b>d&&(BFb(b-1,a.length),a.charCodeAt(b-1)<=32)){--b}return d>0||b<c?(AFb(d,b,a.length),a.substr(d,b-d)):a} +function vqc(a,b){var c,d,e,f,g,h,i,j;i=RD(Ee(Ec(b.k),$C(E3,NAe,64,2,0,1)),126);j=b.g;c=xqc(b,i[0]);e=wqc(b,i[1]);d=oqc(a,j,c,e);f=xqc(b,i[1]);h=wqc(b,i[0]);g=oqc(a,j,f,h);if(d<=g){b.a=c;b.c=e}else{b.a=f;b.c=h}} +function Eob(a){var h;yob();var b,c,d,e,f,g;if(ZD(a,59)){for(e=0,d=a.gc()-1;e<d;++e,--d){h=a.Xb(e);a.hd(e,a.Xb(d));a.hd(d,h)}}else{b=a.ed();f=a.fd(a.gc());while(b.Tb()<f.Vb()){c=b.Pb();g=f.Ub();b.Wb(g);f.Wb(c)}}} +function lKc(a,b){var c,d,e,f,g,h;h=0;f=new wmb;hmb(f,b);while(f.b!=f.c){g=RD(smb(f),219);h+=PLc(g.d,g.e);for(e=new Anb(g.b);e.a<e.c.c.length;){d=RD(ynb(e),36);c=RD(Vmb(a.b,d.p),219);c.s||(h+=lKc(a,c))}}return h} +function QTc(a,b,c,d,e){var f,g,h,i,j;if(b){for(h=b.Kc();h.Ob();){g=RD(h.Pb(),10);for(j=d3b(g,(BEc(),zEc),c).Kc();j.Ob();){i=RD(j.Pb(),12);f=RD(Wd(qtb(e.f,i)),118);if(!f){f=new USc(a.d);ZEb(d.c,f);JSc(f,i,e)}}}}} +function wVc(a,b,c){var d,e;rVc(this);b==(dVc(),bVc)?Ysb(this.r,a.c):Ysb(this.w,a.c);c==bVc?Ysb(this.r,a.d):Ysb(this.w,a.d);sVc(this,a);d=tVc(a.c);e=tVc(a.d);vVc(this,d,e,e);this.o=(HUc(),$wnd.Math.abs(d-e)<0.2)} +function Ade(a,b,c){var d,e,f,g,h,i;h=RD(Ywd(a.a,8),2035);if(h!=null){for(e=h,f=0,g=e.length;f<g;++f){null.Um()}}d=c;if((a.a.Db&1)==0){i=new Fde(a,c,b);d.dj(i)}ZD(d,686)?RD(d,686).fj(a.a):d.cj()==a.a&&d.ej(null)} +function Cne(){var a;if(wne)return RD(N5d((YSd(),XSd),dLe),2044);Dne();a=RD(ZD(Xjb((YSd(),XSd),dLe),594)?Xjb(XSd,dLe):new Bne,594);wne=true;zne(a);Ane(a);Zjb((hTd(),gTd),a,new Ene);rBd(a);$jb(XSd,dLe,a);return a} +function NA(a,b,c,d){var e;e=EA(a,c,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe]),b);e<0&&(e=EA(a,c,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function QA(a,b,c,d){var e;e=EA(a,c,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe]),b);e<0&&(e=EA(a,c,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat']),b));if(e<0){return false}d.d=e;return true} +function rtb(a,b,c){var d,e,f,g;g=a.b.Ce(b);e=(d=a.a.get(g),d==null?$C(jJ,rve,1,0,5,1):d);if(e.length==0){a.a.set(g,e)}else{f=otb(a,b,e);if(f){return f.nd(c)}}bD(e,e.length,new xlb(b,c));++a.c;++a.b.g;return null} +function PYb(a){var b,c,d;MYb(a);d=new bnb;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);Rmb(d,new _Yb(b,true));Rmb(d,new _Yb(b,false))}TYb(a.c);t$b(d,a.b,new mob(cD(WC(wQ,1),rve,382,0,[a.c])));OYb(a)} +function eHb(a,b){var c,d,e;e=new bnb;for(d=new Anb(a.c.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);if(b.Lb(c)){Rmb(e,new sHb(c,true));Rmb(e,new sHb(c,false))}}kHb(a.e);bGb(e,a.d,new mob(cD(WC(bN,1),rve,693,0,[a.e])))} +function t7b(a){var b,c,d,e;c=new Tsb;for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);b=RD(d.of((Ywc(),dwc)),18);!!qtb(c.f,b)||Zjb(c,b,new G7b(b));Rmb(RD(Wd(qtb(c.f,b)),465).b,d)}return new dnb(new glb(c))} +function Xdc(a,b){var c,d,e,f,g;d=new xmb(a.j.c.length);c=null;for(f=new Anb(a.j);f.a<f.c.c.length;){e=RD(ynb(f),12);if(e.j!=c){d.b==d.c||Ydc(d,c,b);jmb(d);c=e.j}g=c7b(e);!!g&&(imb(d,g),true)}d.b==d.c||Ydc(d,c,b)} +function Lec(a,b){var c,d,e;d=new Jkb(a.b,0);while(d.b<d.d.gc()){c=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),72));e=RD(mQb(c,(yCc(),wAc)),278);if(e==(Omd(),Mmd)){Ckb(d);Rmb(b.b,c);nQb(c,(Ywc(),dwc))||pQb(c,dwc,a)}}} +function eIc(a){var b,c,d,e,f;b=Kr(new is(Mr(a3b(a).a.Kc(),new ir)));for(e=new is(Mr(Z2b(a).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);c=d.c.i;f=Kr(new is(Mr(a3b(c).a.Kc(),new ir)));b=$wnd.Math.max(b,f)}return sgb(b)} +function Jsd(a,b,c){var d,e,f;d=RD(Gxd(a,(umd(),Kkd)),21);e=0;f=0;b.a>c.a&&(d.Hc((ukd(),okd))?(e=(b.a-c.a)/2):d.Hc(qkd)&&(e=b.a-c.a));b.b>c.b&&(d.Hc((ukd(),skd))?(f=(b.b-c.b)/2):d.Hc(rkd)&&(f=b.b-c.b));Isd(a,e,f)} +function ABd(a,b,c,d,e,f,g,h,i,j,k,l,m){ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,c);a.f=g;DWd(a,h);FWd(a,i);xWd(a,j);EWd(a,k);aWd(a,l);AWd(a,m);_Vd(a,true);$Vd(a,e);a.Zk(f);YVd(a,b);d!=null&&(a.i=null,zWd(a,d))} +function Jb(a,b,c){if(a<0){return hc(qve,cD(WC(jJ,1),rve,1,5,[c,sgb(a)]))}else if(b<0){throw Adb(new agb(sve+b))}else{return hc('%s (%s) must not be greater than size (%s)',cD(WC(jJ,1),rve,1,5,[c,sgb(a),sgb(b)]))}} +function Xnb(a,b,c,d,e,f){var g,h,i,j;g=d-c;if(g<7){Unb(b,c,d,f);return}i=c+e;h=d+e;j=i+(h-i>>1);Xnb(b,a,i,j,-e,f);Xnb(b,a,j,h,-e,f);if(f.Ne(a[j-1],a[j])<=0){while(c<d){bD(b,c++,a[i++])}return}Vnb(a,i,j,h,b,c,d,f)} +function Mqc(a,b){var c,d,e,f,g,h,i;i=b.d;e=b.b.j;for(h=new Anb(i);h.a<h.c.c.length;){g=RD(ynb(h),105);f=$C(xdb,Hye,28,e.c.length,16,1);Zjb(a.b,g,f);c=g.a.d.p-1;d=g.c.d.p;while(c!=d){c=(c+1)%e.c.length;f[c]=true}}} +function rGc(a,b){nGc();if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}throw Adb(new Ked('The BF model order layer assigner requires all real nodes to have a model order.'))} +function $Gc(a,b){SGc();if(nQb(a,(Ywc(),zwc))&&nQb(b,zwc)){return hgb(RD(mQb(a,zwc),17).a,RD(mQb(b,zwc),17).a)}throw Adb(new Ked('The DF model order layer assigner requires all real nodes to have a model order.'))} +function TSc(a,b){a.r=new USc(a.p);SSc(a.r,a);ye(a.r.j,a.j);Xub(a.j);Mub(a.j,b);Mub(a.r.e,b);LSc(a);LSc(a.r);while(a.f.c.length!=0){$Sc(RD(Vmb(a.f,0),132))}while(a.k.c.length!=0){$Sc(RD(Vmb(a.k,0),132))}return a.r} +function Wvd(a,b,c){var d,e,f;e=vYd(a.Dh(),b);d=b-a.ji();if(d<0){if(!e){throw Adb(new agb(OHe+b+PHe))}else if(e.rk()){f=a.Ih(e);f>=0?a.bi(f,c):Svd(a,e,c)}else{throw Adb(new agb(KHe+e.xe()+LHe))}}else{Bvd(a,d,e,c)}} +function n3d(a){var b,c;if(a.f){while(a.n>0){b=RD(a.k.Xb(a.n-1),76);c=b.Lk();if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0&&(!a.e||c.pk()!=C4||c.Lj()!=0)&&b.md()!=null){return true}else{--a.n}}return false}else{return a.n>0}} +function Pje(b){var c,d,e,f;d=RD(b,54)._h();if(d){try{e=null;c=N5d((YSd(),XSd),jSd(kSd(d)));if(c){f=c.ai();!!f&&(e=f.Fl(Chb(d.e)))}if(!!e&&e!=b){return Pje(e)}}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}return b} +function P3c(a,b,c){var d,e,f;c.Ug('Remove overlaps',1);c.dh(b,eFe);d=RD(Gxd(b,(u2c(),t2c)),27);a.f=d;a.a=u5c(RD(Gxd(b,($4c(),X4c)),299));e=UD(Gxd(b,(umd(),fmd)));s3c(a,(uFb(e),e));f=Q2c(d);O3c(a,b,f,c);c.dh(b,gFe)} +function Ded(a){var b,c,d;if(Heb(TD(Gxd(a,(umd(),$kd))))){d=new bnb;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);ozd(b)&&Heb(TD(Gxd(b,_kd)))&&(ZEb(d.c,b),true)}return d}else{return yob(),yob(),vob}} +function KC(a){if(!a){return cC(),bC}var b=a.valueOf?a.valueOf():a;if(b!==a){var c=GC[typeof b];return c?c(b):NC(typeof b)}else if(a instanceof Array||a instanceof $wnd.Array){return new NB(a)}else{return new vC(a)}} +function IMb(a,b,c){var d,e,f;f=a.o;d=RD(Vrb(a.p,c),252);e=d.i;e.b=ZKb(d);e.a=YKb(d);e.b=$wnd.Math.max(e.b,f.a);e.b>f.a&&!b&&(e.b=f.a);e.c=-(e.b-f.a)/2;switch(c.g){case 1:e.d=-e.a;break;case 3:e.d=f.b;}$Kb(d);_Kb(d)} +function JMb(a,b,c){var d,e,f;f=a.o;d=RD(Vrb(a.p,c),252);e=d.i;e.b=ZKb(d);e.a=YKb(d);e.a=$wnd.Math.max(e.a,f.b);e.a>f.b&&!b&&(e.a=f.b);e.d=-(e.a-f.b)/2;switch(c.g){case 4:e.c=-e.b;break;case 2:e.c=f.a;}$Kb(d);_Kb(d)} +function nkc(a,b){var c,d,e,f,g;if(b.dc()){return}e=RD(b.Xb(0),131);if(b.gc()==1){mkc(a,e,e,1,0,b);return}c=1;while(c<b.gc()){if(e.j||!e.o){f=skc(b,c);if(f){d=RD(f.a,17).a;g=RD(f.b,131);mkc(a,e,g,c,d,b);c=d+1;e=g}}}} +function Soc(a){var b,c,d,e,f,g;g=new dnb(a.d);_mb(g,new upc);b=(epc(),cD(WC(hW,1),jwe,276,0,[Zoc,apc,Yoc,dpc,_oc,$oc,cpc,bpc]));c=0;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),105);d=b[c%b.length];Uoc(e,d);++c}} +function zid(a,b){tid();var c,d,e,f;if(b.b<2){return false}f=Sub(b,0);c=RD(evb(f),8);d=c;while(f.b!=f.d.c){e=RD(evb(f),8);if(!(xid(a,d)&&xid(a,e))){return false}d=e}if(!(xid(a,d)&&xid(a,c))){return false}return true} +function HEd(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;l=a;g=vDd(l,'x');c=new iFd(b);eEd(c.a,g);h=vDd(l,'y');d=new jFd(b);fEd(d.a,h);i=vDd(l,fIe);e=new kFd(b);gEd(e.a,i);j=vDd(l,eIe);f=new lFd(b);k=(hEd(f.a,j),j);return k} +function v$d(a,b){r$d(a,b);(a.b&1)!=0&&(a.a.a=null);(a.b&2)!=0&&(a.a.f=null);if((a.b&4)!=0){a.a.g=null;a.a.i=null}if((a.b&16)!=0){a.a.d=null;a.a.e=null}(a.b&8)!=0&&(a.a.b=null);if((a.b&32)!=0){a.a.j=null;a.a.c=null}} +function Lde(b,c){var d,e,f;f=0;if(c.length>0){try{f=Oeb(c,qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){e=a;throw Adb(new RSd(e))}else throw Adb(a)}}d=(!b.a&&(b.a=new Zde(b)),b.a);return f<d.i&&f>=0?RD(QHd(d,f),58):null} +function Ib(a,b){if(a<0){return hc(qve,cD(WC(jJ,1),rve,1,5,['index',sgb(a)]))}else if(b<0){throw Adb(new agb(sve+b))}else{return hc('%s (%s) must be less than size (%s)',cD(WC(jJ,1),rve,1,5,['index',sgb(a),sgb(b)]))}} +function cob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function dob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function eob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function hob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+b)}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function kwb(a,b){var c,d,e,f,g,h;c=a.b.c.length;e=Vmb(a.b,b);while(b*2+1<c){d=(f=2*b+1,g=f+1,h=f,g<c&&a.a.Ne(Vmb(a.b,g),Vmb(a.b,f))<0&&(h=g),h);if(a.a.Ne(e,Vmb(a.b,d))<0){break}$mb(a.b,b,Vmb(a.b,d));b=d}$mb(a.b,b,e)} +function oJb(a,b,c){var d,e;d=c.d;e=c.e;if(a.g[d.d]<=a.i[b.d]&&a.i[b.d]<=a.i[d.d]&&a.g[e.d]<=a.i[b.d]&&a.i[b.d]<=a.i[e.d]){if(a.i[d.d]<a.i[e.d]){return false}return true}if(a.i[d.d]<a.i[e.d]){return true}return false} +function SWb(a,b){var c;c=RD(mQb(b,(yCc(),oAc)),322);if(c!=a){throw Adb(new Ked('The hierarchy aware processor '+c+' in child node '+b+' is only allowed if the root node specifies the same hierarchical processor.'))}} +function Kee(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new C5d(y7,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=RD(QHd(d,e),179);switch(yfe(Qee(a,c))){case 2:case 3:{!f&&(f=new bnb);ZEb(f.c,c)}}}return !f?(yob(),yob(),vob):f} +function PQb(a,b,c){var d,e,f,g,h,i;i=oxe;for(f=new Anb(nRb(a.b));f.a<f.c.c.length;){e=RD(ynb(f),177);for(h=new Anb(nRb(b.b));h.a<h.c.c.length;){g=RD(ynb(h),177);d=Aid(e.a,e.b,g.a,g.b,c);i=$wnd.Math.min(i,d)}}return i} +function Q3b(a,b){if(!b){throw Adb(new Ngb)}a.j=b;if(!a.d){switch(a.j.g){case 1:a.a.a=a.o.a/2;a.a.b=0;break;case 2:a.a.a=a.o.a;a.a.b=a.o.b/2;break;case 3:a.a.a=a.o.a/2;a.a.b=a.o.b;break;case 4:a.a.a=0;a.a.b=a.o.b/2;}}} +function Jic(a,b){var c,d,e;if(ZD(b.g,10)&&RD(b.g,10).k==(r3b(),m3b)){return oxe}e=$jc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=Zjc(b);if(c){d=Kfb(UD(hFc(c,(yCc(),bCc))));return $wnd.Math.max(0,d/2-0.5)}return oxe} +function Lic(a,b){var c,d,e;if(ZD(b.g,10)&&RD(b.g,10).k==(r3b(),m3b)){return oxe}e=$jc(b);if(e){return $wnd.Math.max(0,a.b/2-0.5)}c=Zjc(b);if(c){d=Kfb(UD(hFc(c,(yCc(),bCc))));return $wnd.Math.max(0,d/2-0.5)}return oxe} +function Jkc(a,b){lkc();var c,d,e,f,g,h;c=null;for(g=b.Kc();g.Ob();){f=RD(g.Pb(),131);if(f.o){continue}d=Qid(f.a);e=Nid(f.a);h=new Nlc(d,e,null,RD(f.d.a.ec().Kc().Pb(),18));Rmb(h.c,f.a);ZEb(a.c,h);!!c&&Rmb(c.d,h);c=h}} +function bmc(a){var b,c,d,e,f,g;g=aMc(a.d,a.e);for(f=g.Kc();f.Ob();){e=RD(f.Pb(),12);d=a.e==(qpd(),ppd)?e.e:e.g;for(c=new Anb(d);c.a<c.c.c.length;){b=RD(ynb(c),18);if(!W0b(b)&&b.c.i.c!=b.d.i.c){Zlc(a,b);++a.f;++a.c}}}} +function Wsc(a,b){var c,d;if(b.dc()){return yob(),yob(),vob}d=new bnb;Rmb(d,sgb(qwe));for(c=1;c<a.f;++c){a.a==null&&usc(a);a.a[c]&&Rmb(d,sgb(c))}if(d.c.length==1){return yob(),yob(),vob}Rmb(d,sgb(lve));return Vsc(b,d)} +function kOc(a,b){var c,d,e,f,g,h,i;g=b.c.i.k!=(r3b(),p3b);i=g?b.d:b.c;c=U0b(b,i).i;e=RD(Wjb(a.k,i),125);d=a.i[c.p].a;if($2b(i.i)<(!c.c?-1:Wmb(c.c.a,c,0))){f=e;h=d}else{f=d;h=e}rIb(uIb(tIb(vIb(sIb(new wIb,0),4),f),h))} +function ODd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=uEd(a,tDd(JB(c,g.a)));if(i){f=(!b.b&&(b.b=new Yie(E4,b,4,7)),b.b);WGd(f,i)}}}} +function PDd(a,b,c){var d,e,f,g,h,i;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=uEd(a,tDd(JB(c,g.a)));if(i){f=(!b.c&&(b.c=new Yie(E4,b,5,8)),b.c);WGd(f,i)}}}} +function Bo(a,b,c){var d,e;d=b.a&a.f;b.b=a.b[d];a.b[d]=b;e=b.f&a.f;b.d=a.c[e];a.c[e]=b;if(!c){b.e=a.e;b.c=null;!a.e?(a.a=b):(a.e.c=b);a.e=b}else{b.e=c.e;!b.e?(a.a=b):(b.e.c=b);b.c=c.c;!b.c?(a.e=b):(b.c.e=b)}++a.i;++a.g} +function Ir(a){var b,c,d;b=a.Pb();if(!a.Ob()){return b}d=Yhb(Zhb(new bib,'expected one element but was: <'),b);for(c=0;c<4&&a.Ob();c++){Yhb((d.a+=pve,d),a.Pb())}a.Ob()&&(d.a+=', ...',d);d.a+='>';throw Adb(new agb(d.a))} +function cB(a){var b,c;c=-a.a;b=cD(WC(hE,1),zwe,28,15,[43,48,48,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&Bwe;b[2]=b[2]+(c/60|0)%10&Bwe;b[3]=b[3]+(c%60/10|0)&Bwe;b[4]=b[4]+c%10&Bwe;return Ihb(b,0,b.length)} +function V2b(a){var b,c,d,e;a.g=new Zrb(RD(Qb(E3),296));d=0;c=(qpd(),Yod);b=0;for(;b<a.j.c.length;b++){e=RD(Vmb(a.j,b),12);if(e.j!=c){d!=b&&Wrb(a.g,c,new Ptd(sgb(d),sgb(b)));c=e.j;d=b}}Wrb(a.g,c,new Ptd(sgb(d),sgb(b)))} +function u7b(a){var b,c,d,e,f,g,h;d=0;for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);e.p=d++;for(h=new Anb(e.j);h.a<h.c.c.length;){g=RD(ynb(h),12);g.p=d++}}}} +function Tvd(a,b){var c,d,e;e=Eee((lke(),jke),a.Dh(),b);if(e){nke();RD(e,69).xk()||(e=zfe(Qee(jke,e)));d=(c=a.Ih(e),RD(c>=0?a.Lh(c,true,true):Qvd(a,e,true),160));RD(d,220).Zl(b)}else{throw Adb(new agb(KHe+b.xe()+LHe))}} +function Cib(a){var b,c;if(a>-140737488355328&&a<140737488355328){if(a==0){return 0}b=a<0;b&&(a=-a);c=eE($wnd.Math.floor($wnd.Math.log(a)/0.6931471805599453));(!b||a!=$wnd.Math.pow(2,c))&&++c;return c}return Dib(Hdb(a))} +function oTc(a){var b,c,d,e,f,g,h;f=new Iub;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),132);g=b.a;h=b.b;if(f.a._b(g)||f.a._b(h)){continue}e=g;d=h;if(g.e.b+g.j.b>2&&h.e.b+h.j.b<=2){e=h;d=g}f.a.zc(e,f);e.q=d}return f} +function B5c(a,b,c){c.Ug('Eades radial',1);c.dh(b,gFe);a.d=RD(Gxd(b,(u2c(),t2c)),27);a.c=Kfb(UD(Gxd(b,($4c(),S4c))));a.e=u5c(RD(Gxd(b,X4c),299));a.a=Z3c(RD(Gxd(b,Z4c),434));a.b=k5c(RD(Gxd(b,O4c),354));C5c(a);c.dh(b,gFe)} +function t8c(a,b){b.Ug('Target Width Setter',1);if(Hxd(a,(X7c(),W7c))){Ixd(a,(X6c(),W6c),UD(Gxd(a,W7c)))}else{throw Adb(new Jed('A target width has to be set if the TargetWidthWidthApproximator should be used.'))}b.Vg()} +function _8b(a,b){var c,d,e;d=new j3b(a);kQb(d,b);pQb(d,(Ywc(),gwc),b);pQb(d,(yCc(),BBc),(Bod(),wod));pQb(d,Rzc,(Rjd(),Njd));h3b(d,(r3b(),m3b));c=new R3b;P3b(c,d);Q3b(c,(qpd(),ppd));e=new R3b;P3b(e,d);Q3b(e,Xod);return d} +function ttc(a){switch(a.g){case 0:return new FKc((RKc(),OKc));case 1:return new aKc;case 2:return new FLc;default:throw Adb(new agb('No implementation is available for the crossing minimizer '+(a.f!=null?a.f:''+a.g)));}} +function THc(a,b){var c,d,e,f,g;a.c[b.p]=true;Rmb(a.a,b);for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(d=new l4b(f.b);xnb(d.a)||xnb(d.b);){c=RD(xnb(d.a)?ynb(d.a):ynb(d.b),18);e=UHc(f,c).i;a.c[e.p]||THc(a,e)}}} +function J2c(a){var b,c,d,e,f,g,h;g=0;for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);h=b.g;e=b.f;d=$wnd.Math.sqrt(h*h+e*e);g=$wnd.Math.max(d,g);f=J2c(b);g=$wnd.Math.max(f,g)}return g} +function Pod(){Pod=geb;Nod=new Qod('OUTSIDE',0);Lod=new Qod('INSIDE',1);Mod=new Qod('NEXT_TO_PORT_IF_POSSIBLE',2);Kod=new Qod('ALWAYS_SAME_SIDE',3);Jod=new Qod('ALWAYS_OTHER_SAME_SIDE',4);Ood=new Qod('SPACE_EFFICIENT',5)} +function DEd(a,b,c){var d,e,f,h,i,j;d=rEd(a,(e=(bvd(),f=new ACd,f),!!c&&yCd(e,c),e),b);jyd(d,zDd(b,uIe));GEd(b,d);BEd(b,d);HEd(b,d);g=null;h=b;i=wDd(h,'ports');j=new hFd(a,d);dEd(j.a,j.b,i);CEd(a,b,d);xEd(a,b,d);return d} +function bB(a){var b,c;c=-a.a;b=cD(WC(hE,1),zwe,28,15,[43,48,48,58,48,48]);if(c<0){b[0]=45;c=-c}b[1]=b[1]+((c/60|0)/10|0)&Bwe;b[2]=b[2]+(c/60|0)%10&Bwe;b[4]=b[4]+(c%60/10|0)&Bwe;b[5]=b[5]+c%10&Bwe;return Ihb(b,0,b.length)} +function eB(a){var b;b=cD(WC(hE,1),zwe,28,15,[71,77,84,45,48,48,58,48,48]);if(a<=0){b[3]=43;a=-a}b[4]=b[4]+((a/60|0)/10|0)&Bwe;b[5]=b[5]+(a/60|0)%10&Bwe;b[7]=b[7]+(a%60/10|0)&Bwe;b[8]=b[8]+a%10&Bwe;return Ihb(b,0,b.length)} +function fob(a){var b,c,d,e,f;if(a==null){return vve}f=new Jyb(pve,'[',']');for(c=a,d=0,e=c.length;d<e;++d){b=c[d];!f.a?(f.a=new dib(f.d)):Zhb(f.a,f.b);Whb(f.a,''+Zdb(b))}return !f.a?f.c:f.e.length==0?f.a.a:f.a.a+(''+f.e)} +function uJb(a,b){var c,d,e;e=lve;for(d=new Anb(CIb(b));d.a<d.c.c.length;){c=RD(ynb(d),218);if(c.f&&!a.c[c.c]){a.c[c.c]=true;e=$wnd.Math.min(e,uJb(a,oIb(c,b)))}}a.i[b.d]=a.j;a.g[b.d]=$wnd.Math.min(e,a.j++);return a.g[b.d]} +function vNb(a,b){var c,d,e;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);d.e.b=(c=d.b,c.pf((umd(),Gld))?c.ag()==(qpd(),Yod)?-c.Mf().b-Kfb(UD(c.of(Gld))):Kfb(UD(c.of(Gld))):c.ag()==(qpd(),Yod)?-c.Mf().b:0)}} +function CSb(a){var b,c,d,e,f,g,h;c=zRb(a.e);f=ijd(njd(ajd(yRb(a.e)),a.d*a.a,a.c*a.b),-0.5);b=c.a-f.a;e=c.b-f.b;for(h=0;h<a.c;h++){d=b;for(g=0;g<a.d;g++){ARb(a.e,new Uid(d,e,a.a,a.b))&&TPb(a,g,h,false,true);d+=a.a}e+=a.b}} +function H0c(a){var b,c,d,e,f;b=a.a;c=a.b;e=a.c;d=new rjd(c.e.a+c.f.a/2,c.e.b+c.f.b/2);f=new rjd(e.e.a+e.f.a/2,e.e.b+e.f.b/2);Pub(b,d,b.a,b.a.a);Pub(b,f,b.c.b,b.c);tWc(d,RD(ju(b,1),8),a.b.f);tWc(f,RD(ju(b,b.b-2),8),a.c.f)} +function tDd(a){var b,c;c=false;if(ZD(a,211)){c=true;return RD(a,211).a}if(!c){if(ZD(a,263)){b=RD(a,263).a%1==0;if(b){c=true;return sgb(Ofb(RD(a,263).a))}}}throw Adb(new CDd("Id must be a string or an integer: '"+a+"'."))} +function Kde(a,b){var c,d,e,f,g,h;f=null;for(e=new Xde((!a.a&&(a.a=new Zde(a)),a.a));Ude(e);){c=RD(tId(e),58);d=(g=c.Dh(),h=(mYd(g),g.o),!h||!c.Xh(h)?null:Hje(iXd(h),c.Mh(h)));if(d!=null){if(lhb(d,b)){f=c;break}}}return f} +function Rw(a,b,c){var d,e,f,g,h;dk(c,'occurrences');if(c==0){return h=RD(Xv(nd(a.a),b),16),!h?0:h.gc()}g=RD(Xv(nd(a.a),b),16);if(!g){return 0}f=g.gc();if(c>=f){g.$b()}else{e=g.Kc();for(d=0;d<c;d++){e.Pb();e.Qb()}}return f} +function qx(a,b,c){var d,e,f,g;dk(c,'oldCount');dk(0,'newCount');d=RD(Xv(nd(a.a),b),16);if((!d?0:d.gc())==c){dk(0,'count');e=(f=RD(Xv(nd(a.a),b),16),!f?0:f.gc());g=-e;g>0?Hh():g<0&&Rw(a,b,-g);return true}else{return false}} +function YKb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){g=aLb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}else{h=Vvb(SCb(HDb(CDb(_nb(a.a),new oLb),new qLb)))}return h>0?h+a.n.d+a.n.a:0} +function ZKb(a){var b,c,d,e,f,g,h;h=0;if(a.b==0){h=Vvb(SCb(HDb(CDb(_nb(a.a),new kLb),new mLb)))}else{g=bLb(a,true);b=0;for(d=g,e=0,f=d.length;e<f;++e){c=d[e];if(c>0){h+=c;++b}}b>1&&(h+=a.c*(b-1))}return h>0?h+a.n.b+a.n.c:0} +function UOc(a){var b,c;if(a.c.length!=2){throw Adb(new dgb('Order only allowed for two paths.'))}b=(tFb(0,a.c.length),RD(a.c[0],18));c=(tFb(1,a.c.length),RD(a.c[1],18));if(b.d.i!=c.c.i){a.c.length=0;ZEb(a.c,c);ZEb(a.c,b)}} +function O8c(a,b,c){var d;zyd(c,b.g,b.f);Byd(c,b.i,b.j);for(d=0;d<(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;d++){O8c(a,RD(QHd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),d),27),RD(QHd((!c.a&&(c.a=new C5d(J4,c,10,11)),c.a),d),27))}} +function DMb(a,b){var c,d,e,f;f=RD(Vrb(a.b,b),127);c=f.a;for(e=RD(RD(Qc(a.r,b),21),87).Kc();e.Ob();){d=RD(e.Pb(),117);!!d.c&&(c.a=$wnd.Math.max(c.a,QKb(d.c)))}if(c.a>0){switch(b.g){case 2:f.n.c=a.s;break;case 4:f.n.b=a.s;}}} +function ETb(a,b){var c,d,e;c=RD(mQb(b,(yVb(),lVb)),17).a-RD(mQb(a,lVb),17).a;if(c==0){d=ojd(ajd(RD(mQb(a,(JVb(),FVb)),8)),RD(mQb(a,GVb),8));e=ojd(ajd(RD(mQb(b,FVb),8)),RD(mQb(b,GVb),8));return Qfb(d.a*d.b,e.a*e.b)}return c} +function JVc(a,b){var c,d,e;c=RD(mQb(b,(h_c(),X$c)),17).a-RD(mQb(a,X$c),17).a;if(c==0){d=ojd(ajd(RD(mQb(a,(q$c(),RZc)),8)),RD(mQb(a,SZc),8));e=ojd(ajd(RD(mQb(b,RZc),8)),RD(mQb(b,SZc),8));return Qfb(d.a*d.b,e.a*e.b)}return c} +function _0b(a){var b,c;c=new bib;c.a+='e_';b=S0b(a);b!=null&&(c.a+=''+b,c);if(!!a.c&&!!a.d){Zhb((c.a+=' ',c),M3b(a.c));Zhb(Yhb((c.a+='[',c),a.c.i),']');Zhb((c.a+=SAe,c),M3b(a.d));Zhb(Yhb((c.a+='[',c),a.d.i),']')}return c.a} +function ZVc(a){switch(a.g){case 0:return new N_c;case 1:return new V_c;case 2:return new x0c;case 3:return new J0c;default:throw Adb(new agb('No implementation is available for the layout phase '+(a.f!=null?a.f:''+a.g)));}} +function qsd(a,b,c,d,e){var f;f=0;switch(e.g){case 1:f=$wnd.Math.max(0,b.b+a.b-(c.b+d));break;case 3:f=$wnd.Math.max(0,-a.b-d);break;case 2:f=$wnd.Math.max(0,-a.a-d);break;case 4:f=$wnd.Math.max(0,b.a+a.a-(c.a+d));}return f} +function MDd(a,b,c){var d,e,f,g,h;if(c){e=c.a.length;d=new vue(e);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);f=xDd(c,g.a);kIe in f.a||lIe in f.a?yEd(a,f,b):EEd(a,f,b);OGd(RD(Wjb(a.b,uDd(f)),74))}}} +function jXd(a){var b,c;switch(a.b){case -1:{return true}case 0:{c=a.t;if(c>1||c==-1){a.b=-1;return true}else{b=WVd(a);if(!!b&&(nke(),b.lk()==aKe)){a.b=-1;return true}else{a.b=1;return false}}}default:case 1:{return false}}} +function Sqe(a,b){var c,d,e,f;Mqe(a);if(a.c!=0||a.a!=123)throw Adb(new Lqe(TId((Hde(),eJe))));f=b==112;d=a.d;c=phb(a.i,125,d);if(c<0)throw Adb(new Lqe(TId((Hde(),fJe))));e=zhb(a.i,d,c);a.d=c+1;return ite(e,f,(a.e&512)==512)} +function YTb(a){var b,c,d,e,f,g,h;d=a.a.c.length;if(d>0){g=a.c.d;h=a.d.d;e=ijd(ojd(new rjd(h.a,h.b),g),1/(d+1));f=new rjd(g.a,g.b);for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),250);b.d.a=f.a+e.a;b.d.b=f.b+e.b;$id(f,e)}}} +function HXd(a,b){var c,d,e;if(!b){JXd(a,null);zXd(a,null)}else if((b.i&4)!=0){d='[]';for(c=b.c;;c=c.c){if((c.i&4)==0){e=shb((lfb(c),c.o+d));JXd(a,e);zXd(a,e);break}d+='[]'}}else{e=shb((lfb(b),b.o));JXd(a,e);zXd(a,e)}a.hl(b)} +function Bge(a,b,c,d,e){var f,g,h,i;i=Age(a,RD(e,58));if(dE(i)!==dE(e)){h=RD(a.g[c],76);f=oke(b,i);MHd(a,c,Tge(a,c,f));if(Mvd(a.e)){g=fge(a,9,f.Lk(),e,i,d,false);oKd(g,new P3d(a.e,9,a.c,h,f,d,false));pKd(g)}return i}return e} +function AGc(a,b,c){var d,e,f,g,h,i;d=RD(Qc(a.c,b),15);e=RD(Qc(a.c,c),15);f=d.fd(d.gc());g=e.fd(e.gc());while(f.Sb()&&g.Sb()){h=RD(f.Ub(),17);i=RD(g.Ub(),17);if(h!=i){return hgb(h.a,i.a)}}return !f.Ob()&&!g.Ob()?0:f.Ob()?1:-1} +function FHc(a){var b,c,d,e,f,g,h;h=ev(a.c.length);for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),10);g=new _sb;f=a3b(d);for(c=new is(Mr(f.a.Kc(),new ir));gs(c);){b=RD(hs(c),18);b.c.i==b.d.i||Ysb(g,b.d.i)}ZEb(h.c,g)}return h} +function xhd(c,d){var e,f,g;try{g=xs(c.a,d);return g}catch(b){b=zdb(b);if(ZD(b,33)){try{f=Oeb(d,qwe,lve);e=mfb(c.a);if(f>=0&&f<e.length){return e[f]}}catch(a){a=zdb(a);if(!ZD(a,130))throw Adb(a)}return null}else throw Adb(b)}} +function Rvd(a,b){var c,d,e;e=Eee((lke(),jke),a.Dh(),b);if(e){nke();RD(e,69).xk()||(e=zfe(Qee(jke,e)));d=(c=a.Ih(e),RD(c>=0?a.Lh(c,true,true):Qvd(a,e,true),160));return RD(d,220).Wl(b)}else{throw Adb(new agb(KHe+b.xe()+NHe))}} +function _ae(){Tae();var a;if(Sae)return RD(N5d((YSd(),XSd),AKe),2038);RRd(UK,new hde);abe();a=RD(ZD(Xjb((YSd(),XSd),AKe),560)?Xjb(XSd,AKe):new $ae,560);Sae=true;Yae(a);Zae(a);Zjb((hTd(),gTd),a,new cbe);$jb(XSd,AKe,a);return a} +function Vfe(a,b){var c,d,e,f;a.j=-1;if(Mvd(a.e)){c=a.i;f=a.i!=0;LHd(a,b);d=new P3d(a.e,3,a.c,null,b,c,f);e=b.zl(a.e,a.c,null);e=Hge(a,b,e);if(!e){qvd(a.e,d)}else{e.nj(d);e.oj()}}else{LHd(a,b);e=b.zl(a.e,a.c,null);!!e&&e.oj()}} +function HA(a,b){var c,d,e;e=0;d=b[0];if(d>=a.length){return -1}c=(BFb(d,a.length),a.charCodeAt(d));while(c>=48&&c<=57){e=e*10+(c-48);++d;if(d>=a.length){break}c=(BFb(d,a.length),a.charCodeAt(d))}d>b[0]?(b[0]=d):(e=-1);return e} +function mPb(a){var b,c,d,e,f;e=RD(a.a,17).a;f=RD(a.b,17).a;c=e;d=f;b=$wnd.Math.max($wnd.Math.abs(e),$wnd.Math.abs(f));if(e<=0&&e==f){c=0;d=f-1}else{if(e==-b&&f!=b){c=f;d=e;f>=0&&++c}else{c=-f;d=e}}return new Ptd(sgb(c),sgb(d))} +function YPb(a,b,c,d){var e,f,g,h,i,j;for(e=0;e<b.o;e++){f=e-b.j+c;for(g=0;g<b.p;g++){h=g-b.k+d;if((i=f,j=h,i+=a.j,j+=a.k,i>=0&&j>=0&&i<a.o&&j<a.p)&&(!QPb(b,e,g)&&$Pb(a,f,h)||PPb(b,e,g)&&!_Pb(a,f,h))){return true}}}return false} +function jSc(a,b,c){var d,e,f,g,h;g=a.c;h=a.d;f=xjd(cD(WC(l3,1),Nve,8,0,[g.i.n,g.n,g.a])).b;e=(f+xjd(cD(WC(l3,1),Nve,8,0,[h.i.n,h.n,h.a])).b)/2;d=null;g.j==(qpd(),Xod)?(d=new rjd(b+g.i.c.c.a+c,e)):(d=new rjd(b-c,e));hu(a.a,0,d)} +function ozd(a){var b,c,d,e;b=null;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));gs(d);){c=RD(hs(d),84);e=AGd(c);if(!b){b=e}else if(b!=e){return false}}return true} +function SHd(a,b,c){var d;++a.j;if(b>=a.i)throw Adb(new veb(MIe+b+NIe+a.i));if(c>=a.i)throw Adb(new veb(OIe+c+NIe+a.i));d=a.g[c];if(b!=c){b<c?hib(a.g,b,a.g,b+1,c-b):hib(a.g,c+1,a.g,c,b-c);bD(a.g,b,d);a.Pi(b,d,c);a.Ni()}return d} +function Rc(a,b,c){var d;d=RD(a.c.xc(b),16);if(!d){d=a.ic(b);if(d.Fc(c)){++a.d;a.c.zc(b,d);return true}else{throw Adb(new Deb('New Collection violated the Collection spec'))}}else if(d.Fc(c)){++a.d;return true}else{return false}} +function ngb(a){var b,c,d;if(a<0){return 0}else if(a==0){return 32}else{d=-(a>>16);b=d>>16&16;c=16-b;a=a>>b;d=a-256;b=d>>16&8;c+=b;a<<=b;d=a-qxe;b=d>>16&4;c+=b;a<<=b;d=a-Ove;b=d>>16&2;c+=b;a<<=b;d=a>>14;b=d&~(d>>1);return c+2-b}} +function RSb(a){HSb();var b,c,d,e;GSb=new bnb;FSb=new Tsb;ESb=new bnb;b=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);JSb(b);for(e=new dMd(b);e.e!=e.i.gc();){d=RD(bMd(e),27);if(Wmb(GSb,d,0)==-1){c=new bnb;Rmb(ESb,c);KSb(d,c)}}return ESb} +function sTb(a,b,c){var d,e,f,g;a.a=c.b.d;if(ZD(b,326)){e=IGd(RD(b,74),false,false);f=ssd(e);d=new wTb(a);xgb(f,d);lsd(f,e);b.of((umd(),cld))!=null&&xgb(RD(b.of(cld),75),d)}else{g=RD(b,422);g.rh(g.nh()+a.a.a);g.sh(g.oh()+a.a.b)}} +function hWc(a,b){var c,d,e;e=new bnb;for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.c.g==a.g&&dE(mQb(c.b,(h_c(),f_c)))!==dE(mQb(c.c,f_c))&&!yDb(new SDb(null,new Swb(e,16)),new IWc(c))&&(ZEb(e.c,c),true)}_mb(e,new KWc);return e} +function fUb(a,b,c){var d,e,f,g;if(ZD(b,153)&&ZD(c,153)){f=RD(b,153);g=RD(c,153);return a.a[f.a][g.a]+a.a[g.a][f.a]}else if(ZD(b,250)&&ZD(c,250)){d=RD(b,250);e=RD(c,250);if(d.a==e.a){return RD(mQb(e.a,(yVb(),lVb)),17).a}}return 0} +function q9b(a,b){var c,d,e,f,g,h,i,j;j=Kfb(UD(mQb(b,(yCc(),fCc))));i=a[0].n.a+a[0].o.a+a[0].d.c+j;for(h=1;h<a.length;h++){d=a[h].n;e=a[h].o;c=a[h].d;f=d.a-c.b-i;f<0&&(d.a-=f);g=b.f;g.a=$wnd.Math.max(g.a,d.a+e.a);i=d.a+e.a+c.c+j}} +function Nad(a,b){var c,d,e,f,g,h;d=RD(RD(Wjb(a.g,b.a),42).a,68);e=RD(RD(Wjb(a.g,b.b),42).a,68);f=d.b;g=e.b;c=Kid(f,g);if(c>=0){return c}h=ejd(ojd(new rjd(g.c+g.b/2,g.d+g.a/2),new rjd(f.c+f.b/2,f.d+f.a/2)));return -(oRb(f,g)-1)*h} +function ysd(a,b,c){var d;FDb(new SDb(null,(!c.a&&(c.a=new C5d(F4,c,6,6)),new Swb(c.a,16))),new Qsd(a,b));FDb(new SDb(null,(!c.n&&(c.n=new C5d(I4,c,1,7)),new Swb(c.n,16))),new Ssd(a,b));d=RD(Gxd(c,(umd(),cld)),75);!!d&&Bjd(d,a,b)} +function Qvd(a,b,c){var d,e,f;f=Eee((lke(),jke),a.Dh(),b);if(f){nke();RD(f,69).xk()||(f=zfe(Qee(jke,f)));e=(d=a.Ih(f),RD(d>=0?a.Lh(d,true,true):Qvd(a,f,true),160));return RD(e,220).Sl(b,c)}else{throw Adb(new agb(KHe+b.xe()+NHe))}} +function WNd(a,b,c,d){var e,f,g,h,i;e=a.d[b];if(e){f=e.g;i=e.i;if(d!=null){for(h=0;h<i;++h){g=RD(f[h],136);if(g.Bi()==c&&pb(d,g.ld())){return g}}}else{for(h=0;h<i;++h){g=RD(f[h],136);if(dE(g.ld())===dE(d)){return g}}}}return null} +function Nee(a,b){var c,d,e,f,g;d=(!b.s&&(b.s=new C5d(y7,b,21,17)),b.s);f=null;for(e=0,g=d.i;e<g;++e){c=RD(QHd(d,e),179);switch(yfe(Qee(a,c))){case 4:case 5:case 6:{!f&&(f=new bnb);ZEb(f.c,c);break}}}return !f?(yob(),yob(),vob):f} +function Yib(a,b){var c;if(b<0){throw Adb(new teb('Negative exponent'))}if(b==0){return Kib}else if(b==1||Sib(a,Kib)||Sib(a,Oib)){return a}if(!_ib(a,0)){c=1;while(!_ib(a,c)){++c}return Wib(kjb(c*b),Yib($ib(a,c),b))}return Rjb(a,b)} +function Jnb(a,b){var c,d,e;if(dE(a)===dE(b)){return true}if(a==null||b==null){return false}if(a.length!=b.length){return false}for(c=0;c<a.length;++c){d=a[c];e=b[c];if(!(dE(d)===dE(e)||d!=null&&pb(d,e))){return false}}return true} +function EYb(a){pYb();var b,c,d;this.b=oYb;this.c=(Cmd(),Amd);this.f=(kYb(),jYb);this.a=a;BYb(this,new FYb);uYb(this);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);if(!c.d){b=new iYb(cD(WC(bQ,1),rve,86,0,[c]));Rmb(a.a,b)}}} +function U6b(a,b,c){var d,e,f,g,h,i;if(!a||a.c.length==0){return null}f=new VKb(b,!c);for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),72);LKb(f,(i1b(),new D1b(d)))}g=f.i;g.a=(i=f.n,f.e.b+i.d+i.a);g.b=(h=f.n,f.e.a+h.b+h.c);return f} +function d9b(a){var b,c,d,e,f,g,h;h=t2b(a.a);Znb(h,new i9b);c=null;for(e=h,f=0,g=e.length;f<g;++f){d=e[f];if(d.k!=(r3b(),m3b)){break}b=RD(mQb(d,(Ywc(),hwc)),64);if(b!=(qpd(),ppd)&&b!=Xod){continue}!!c&&RD(mQb(c,qwc),15).Fc(d);c=d}} +function wTc(a,b,c){var d,e,f,g,h,i,j;i=(tFb(b,a.c.length),RD(a.c[b],339));Xmb(a,b);if(i.b/2>=c){d=b;j=(i.c+i.a)/2;g=j-c;if(i.c<=j-c){e=new BTc(i.c,g);Qmb(a,d++,e)}h=j+c;if(h<=i.a){f=new BTc(h,i.a);wFb(d,a.c.length);XEb(a.c,d,f)}}} +function mZc(a,b,c){var d,e,f,g,h,i;if(!b.dc()){e=new Yub;for(i=b.Kc();i.Ob();){h=RD(i.Pb(),39);Zjb(a.a,sgb(h.g),sgb(c));for(g=(d=Sub((new dXc(h)).a.d,0),new gXc(d));dvb(g.a);){f=RD(evb(g.a),65).c;Pub(e,f,e.c.b,e.c)}}mZc(a,e,c+1)}} +function Ude(a){var b;if(!a.c&&a.g==null){a.d=a.bj(a.f);WGd(a,a.d);b=a.d}else{if(a.g==null){return true}else if(a.i==0){return false}else{b=RD(a.g[a.i-1],51)}}if(b==a.b&&null.Vm>=null.Um()){tId(a);return Ude(a)}else{return b.Ob()}} +function t_b(a){this.a=a;if(a.c.i.k==(r3b(),m3b)){this.c=a.c;this.d=RD(mQb(a.c.i,(Ywc(),hwc)),64)}else if(a.d.i.k==m3b){this.c=a.d;this.d=RD(mQb(a.d.i,(Ywc(),hwc)),64)}else{throw Adb(new agb('Edge '+a+' is not an external edge.'))}} +function O1d(a,b){var c,d,e;e=a.b;a.b=b;(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,e,a.b));if(!b){PAd(a,null);Q1d(a,0);P1d(a,null)}else if(b!=a){PAd(a,b.zb);Q1d(a,b.d);c=(d=b.c,d==null?b.zb:d);P1d(a,c==null||lhb(c,b.zb)?null:c)}} +function hj(a,b){var c;this.e=(tm(),Qb(a),tm(),zm(a));this.c=(Qb(b),zm(b));Lb(this.e.Rd().dc()==this.c.Rd().dc());this.d=Uv(this.e);this.b=Uv(this.c);c=YC(jJ,[Nve,rve],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2);this.a=c;Zi(this)} +function Lz(b){var c=(!Jz&&(Jz=Mz()),Jz);var d=b.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(a){return Kz(a,c)});return '"'+d+'"'} +function VEb(a,b,c,d,e,f){var g,h,i,j,k;if(e==0){return}if(dE(a)===dE(c)){a=a.slice(b,b+e);b=0}i=c;for(h=b,j=b+e;h<j;){g=$wnd.Math.min(h+10000,j);e=g-h;k=a.slice(h,g);k.splice(0,0,d,f?e:0);Array.prototype.splice.apply(i,k);h=g;d+=e}} +function VGb(a){FGb();var b,c;this.b=CGb;this.c=EGb;this.g=(wGb(),vGb);this.d=(Cmd(),Amd);this.a=a;IGb(this);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);!b.a&&gGb(iGb(new jGb,cD(WC(hN,1),rve,60,0,[b])),a);b.e=new Vid(b.d)}} +function yTb(a){var b,c,d,e,f,g;e=a.e.c.length;d=$C(QK,Ize,15,e,0,1);for(g=new Anb(a.e);g.a<g.c.c.length;){f=RD(ynb(g),153);d[f.a]=new Yub}for(c=new Anb(a.c);c.a<c.c.c.length;){b=RD(ynb(c),289);d[b.c.a].Fc(b);d[b.d.a].Fc(b)}return d} +function OMd(a,b){var c,d,e,f,g;c=RD(Ywd(a.a,4),129);g=c==null?0:c.length;if(b>=g)throw Adb(new aMd(b,g));e=c[b];if(g==1){d=null}else{d=$C(d6,IJe,424,g-1,0,1);hib(c,0,d,0,b);f=g-b-1;f>0&&hib(c,b+1,d,b,f)}Bde(a,d);Ade(a,b,e);return e} +function l3d(a){var b,c;if(a.f){while(a.n<a.o){b=RD(!a.j?a.k.Xb(a.n):a.j.$i(a.n),76);c=b.Lk();if(ZD(c,102)&&(RD(c,19).Bb&QHe)!=0&&(!a.e||c.pk()!=C4||c.Lj()!=0)&&b.md()!=null){return true}else{++a.n}}return false}else{return a.n<a.o}} +function Lle(){Lle=geb;Jle=RD(QHd(xYd((Qle(),Ple).qb),6),35);Gle=RD(QHd(xYd(Ple.qb),3),35);Hle=RD(QHd(xYd(Ple.qb),4),35);Ile=RD(QHd(xYd(Ple.qb),5),19);vWd(Jle);vWd(Gle);vWd(Hle);vWd(Ile);Kle=new mob(cD(WC(y7,1),lKe,179,0,[Jle,Gle]))} +function rMb(a,b){var c;this.d=new P2b;this.b=b;this.e=new sjd(b.Lf());c=a.u.Hc((Pod(),Mod));a.u.Hc(Lod)?a.D?(this.a=c&&!b.bg()):(this.a=true):a.u.Hc(Nod)?c?(this.a=!(b.Uf().Kc().Ob()||b.Wf().Kc().Ob())):(this.a=false):(this.a=false)} +function zNb(a,b){var c,d,e,f;c=a.o.a;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);e.e.a=(d=e.b,d.pf((umd(),Gld))?d.ag()==(qpd(),ppd)?-d.Mf().a-Kfb(UD(d.of(Gld))):c+Kfb(UD(d.of(Gld))):d.ag()==(qpd(),ppd)?-d.Mf().a:c)}} +function $4b(a,b){var c,d,e,f;c=RD(mQb(a,(yCc(),rAc)),88);f=RD(Gxd(b,GBc),64);e=RD(mQb(a,BBc),101);if(e!=(Bod(),zod)&&e!=Aod){if(f==(qpd(),opd)){f=osd(b,c);f==opd&&(f=vpd(c))}}else{d=W4b(b);d>0?(f=vpd(c)):(f=spd(vpd(c)))}Ixd(b,GBc,f)} +function agc(a,b){var c;b.Ug('Partition preprocessing',1);c=RD(zDb(CDb(EDb(CDb(new SDb(null,new Swb(a.a,16)),new egc),new ggc),new igc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);FDb(c.Oc(),new kgc);b.Vg()} +function Uoc(a,b){var c,d,e,f,g;g=a.j;b.a!=b.b&&_mb(g,new ypc);e=g.c.length/2|0;for(d=0;d<e;d++){f=(tFb(d,g.c.length),RD(g.c[d],113));f.c&&Q3b(f.d,b.a)}for(c=e;c<g.c.length;c++){f=(tFb(c,g.c.length),RD(g.c[c],113));f.c&&Q3b(f.d,b.b)}} +function rLc(a,b,c){var d,e,f;d=a.c[b.c.p][b.p];e=a.c[c.c.p][c.p];if(d.a!=null&&e.a!=null){f=Jfb(d.a,e.a);f<0?uLc(a,b,c):f>0&&uLc(a,c,b);return f}else if(d.a!=null){uLc(a,b,c);return -1}else if(e.a!=null){uLc(a,c,b);return 1}return 0} +function EVc(a,b){var c,d,e,f,g;e=b.b.b;a.a=$C(QK,Ize,15,e,0,1);a.b=$C(xdb,Hye,28,e,16,1);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);a.a[f.g]=new Yub}for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);a.a[c.b.g].Fc(c);a.a[c.c.g].Fc(c)}} +function SJd(a,b){var c,d,e,f;if(a.Pj()){c=a.Ej();f=a.Qj();++a.j;a.qj(c,a.Zi(c,b));d=a.Ij(3,null,b,c,f);if(a.Mj()){e=a.Nj(b,null);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{_Id(a,b);if(a.Mj()){e=a.Nj(b,null);!!e&&e.oj()}}} +function oLd(a,b,c){var d,e,f;if(a.Pj()){f=a.Qj();KHd(a,b,c);d=a.Ij(3,null,c,b,f);if(a.Mj()){e=a.Nj(c,null);a.Tj()&&(e=a.Uj(c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{KHd(a,b,c);if(a.Mj()){e=a.Nj(c,null);!!e&&e.oj()}}} +function bge(a,b){var c,d,e,f,g;g=pke(a.e.Dh(),b);e=new YHd;c=RD(a.g,124);for(f=a.i;--f>=0;){d=c[f];g.am(d.Lk())&&WGd(e,d)}!wLd(a,e)&&Mvd(a.e)&&eZd(a,b.Jk()?fge(a,6,b,(yob(),vob),null,-1,false):fge(a,b.tk()?2:1,b,null,null,-1,false))} +function _7b(a,b){var c,d,e,f,g;if(a.a==($uc(),Yuc)){return true}f=b.a.c;c=b.a.c+b.a.b;if(b.j){d=b.A;g=d.c.c.a-d.o.a/2;e=f-(d.n.a+d.o.a);if(e>g){return false}}if(b.q){d=b.C;g=d.c.c.a-d.o.a/2;e=d.n.a-c;if(e>g){return false}}return true} +function bRc(a){WQc();var b,c,d,e,f,g,h;c=new gub;for(e=new Anb(a.e.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);h=a.g[f.p];b=RD(cub(c,h),15);if(!b){b=new bnb;dub(c,h,b)}b.Fc(f)}}return c} +function Qzd(a){var b;if((a.Db&64)!=0)return awd(a);b=new Shb(awd(a));b.a+=' (startX: ';Khb(b,a.j);b.a+=', startY: ';Khb(b,a.k);b.a+=', endX: ';Khb(b,a.b);b.a+=', endY: ';Khb(b,a.c);b.a+=', identifier: ';Nhb(b,a.d);b.a+=')';return b.a} +function cWd(a){var b;if((a.Db&64)!=0)return QAd(a);b=new Shb(QAd(a));b.a+=' (ordered: ';Ohb(b,(a.Bb&256)!=0);b.a+=', unique: ';Ohb(b,(a.Bb&512)!=0);b.a+=', lowerBound: ';Lhb(b,a.s);b.a+=', upperBound: ';Lhb(b,a.t);b.a+=')';return b.a} +function uBd(a,b,c,d,e,f,g,h){var i;ZD(a.Cb,90)&&v$d(yYd(RD(a.Cb,90)),4);PAd(a,c);a.f=d;DWd(a,e);FWd(a,f);xWd(a,g);EWd(a,false);aWd(a,true);AWd(a,h);_Vd(a,true);$Vd(a,0);a.b=0;bWd(a,1);i=XVd(a,b,null);!!i&&i.oj();kXd(a,false);return a} +function ZAb(a,b){var c,d,e,f;c=RD(Xjb(a.a,b),525);if(!c){d=new oBb(b);e=(gBb(),dBb)?null:d.c;f=zhb(e,0,$wnd.Math.max(0,thb(e,Fhb(46))));nBb(d,ZAb(a,f));(dBb?null:d.c).length==0&&iBb(d,new rBb);$jb(a.a,dBb?null:d.c,d);return d}return c} +function sRb(a,b){var c;a.b=b;a.g=new bnb;c=tRb(a.b);a.e=c;a.f=c;a.c=Heb(TD(mQb(a.b,(YHb(),RHb))));a.a=UD(mQb(a.b,(umd(),Dkd)));a.a==null&&(a.a=1);Kfb(a.a)>1?(a.e*=Kfb(a.a)):(a.f/=Kfb(a.a));uRb(a);vRb(a);rRb(a);pQb(a.b,(tSb(),lSb),a.g)} +function n9b(a,b,c){var d,e,f,g,h,i;d=0;i=c;if(!b){d=c*(a.c.length-1);i*=-1}for(f=new Anb(a);f.a<f.c.c.length;){e=RD(ynb(f),10);pQb(e,(yCc(),Rzc),(Rjd(),Njd));e.o.a=d;for(h=e3b(e,(qpd(),Xod)).Kc();h.Ob();){g=RD(h.Pb(),12);g.n.a=d}d+=i}} +function gZd(a,b,c){var d,e,f,g,h,i;h=a.pl(c);if(h!=c){g=a.g[b];i=h;MHd(a,b,a.Zi(b,i));f=g;a.Ri(b,i,f);if(a.al()){d=c;e=a.Oj(d,null);!RD(h,54).Ph()&&(e=a.Nj(i,e));!!e&&e.oj()}Mvd(a.e)&&eZd(a,a.Ij(9,c,h,b,false));return h}else{return c}} +function rYb(a,b){var c,d,e,f;for(d=new Anb(a.a.a);d.a<d.c.c.length;){c=RD(ynb(d),194);c.g=true}for(f=new Anb(a.a.b);f.a<f.c.c.length;){e=RD(ynb(f),86);e.k=Heb(TD(a.e.Kb(new Ptd(e,b))));e.d.g=e.d.g&Heb(TD(a.e.Kb(new Ptd(e,b))))}return a} +function Rdc(a,b){var c,d;if(a.c.length!=0){if(a.c.length==2){Qdc((tFb(0,a.c.length),RD(a.c[0],10)),(Pnd(),Lnd));Qdc((tFb(1,a.c.length),RD(a.c[1],10)),Mnd)}else{for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),10);Qdc(c,b)}}a.c.length=0}} +function Vnc(a){var b,c,d,e,f;c=(b=RD(mfb(E3),9),new Fsb(b,RD(WEb(b,b.length),9),0));f=RD(mQb(a,(Ywc(),Iwc)),10);if(f){for(e=new Anb(f.j);e.a<e.c.c.length;){d=RD(ynb(e),12);dE(mQb(d,Awc))===dE(a)&&k4b(new l4b(d.b))&&zsb(c,d.j)}}return c} +function CGc(a,b,c){var d,e,f,g,h;if(a.d[c.p]){return}for(e=new is(Mr(a3b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);h=d.d.i;for(g=new is(Mr(Z2b(h).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);f.c.i==b&&(a.a[f.p]=true)}CGc(a,b,h)}a.d[c.p]=true} +function Zwd(a,b){var c,d,e,f,g,h,i;d=ggb(a.Db&254);if(d==1){a.Eb=null}else{f=SD(a.Eb);if(d==2){e=Xwd(a,b);a.Eb=f[e==0?1:0]}else{g=$C(jJ,rve,1,d-1,5,1);for(c=2,h=0,i=0;c<=128;c<<=1){c==b?++h:(a.Db&c)!=0&&(g[i++]=f[h++])}a.Eb=g}}a.Db&=~b} +function rse(a){var b;b=0;switch(a){case 105:b=2;break;case 109:b=8;break;case 115:b=4;break;case 120:b=16;break;case 117:b=32;break;case 119:b=64;break;case 70:b=256;break;case 72:b=128;break;case 88:b=512;break;case 44:b=gwe;}return b} +function Ojb(a,b,c,d,e){var f,g,h,i;if(dE(a)===dE(b)&&d==e){Tjb(a,d,c);return}for(h=0;h<d;h++){g=0;f=a[h];for(i=0;i<e;i++){g=Bdb(Bdb(Ndb(Cdb(f,yxe),Cdb(b[i],yxe)),Cdb(c[h+i],yxe)),Cdb(Ydb(g),yxe));c[h+i]=Ydb(g);g=Udb(g,32)}c[h+e]=Ydb(g)}} +function tRb(a){var b,c,d,e,f,g,h,i,j,k,l;k=0;j=0;e=a.a;h=e.a.gc();for(d=e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),567);b=(c.b&&CRb(c),c.a);l=b.a;g=b.b;k+=l+g;j+=l*g}i=$wnd.Math.sqrt(400*h*j-4*j+k*k)+k;f=2*(100*h-1);if(f==0){return i}return i/f} +function MSc(a,b){if(b.b!=0){isNaN(a.s)?(a.s=Kfb((sFb(b.b!=0),UD(b.a.a.c)))):(a.s=$wnd.Math.min(a.s,Kfb((sFb(b.b!=0),UD(b.a.a.c)))));isNaN(a.c)?(a.c=Kfb((sFb(b.b!=0),UD(b.c.b.c)))):(a.c=$wnd.Math.max(a.c,Kfb((sFb(b.b!=0),UD(b.c.b.c)))))}} +function nzd(a){var b,c,d,e;b=null;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));gs(d);){c=RD(hs(d),84);e=AGd(c);if(!b){b=vCd(e)}else if(b!=vCd(e)){return true}}return false} +function pLd(a,b){var c,d,e,f;if(a.Pj()){c=a.i;f=a.Qj();LHd(a,b);d=a.Ij(3,null,b,c,f);if(a.Mj()){e=a.Nj(b,null);a.Tj()&&(e=a.Uj(b,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{LHd(a,b);if(a.Mj()){e=a.Nj(b,null);!!e&&e.oj()}}} +function ZQb(a,b){var c,d,e,f;f=rAb(a.a,b.b);if(!f){throw Adb(new dgb('Invalid hitboxes for scanline overlap calculation.'))}e=false;for(d=a.a.a.ec().Kc();d.Ob();){c=RD(d.Pb(),68);if(UQb(b.b,c)){bbd(a.b.a,b.b,c);e=true}else{if(e){break}}}} +function whd(a){var b;if(!a.a){throw Adb(new dgb('IDataType class expected for layout option '+a.f))}b=GId(a.a);if(b==null){throw Adb(new dgb("Couldn't create new instance of property '"+a.f+"'. "+DGe+(lfb(b6),b6.k)+EGe))}return RD(b,423)} +function yvd(a){var b,c,d,e,f;f=a.Ph();if(f){if(f.Vh()){e=Vvd(a,f);if(e!=f){c=a.Fh();d=(b=a.Fh(),b>=0?a.Ah(null):a.Ph().Th(a,-1-b,null,null));a.Bh(RD(e,54),c);!!d&&d.oj();a.vh()&&a.wh()&&c>-1&&qvd(a,new N3d(a,9,c,f,e));return e}}}return f} +function stb(a,b){var c,d,e,f,g;f=a.b.Ce(b);d=(c=a.a.get(f),c==null?$C(jJ,rve,1,0,5,1):c);for(g=0;g<d.length;g++){e=d[g];if(a.b.Be(b,e.ld())){if(d.length==1){d.length=0;Btb(a.a,f)}else{d.splice(g,1)}--a.c;++a.b.g;return e.md()}}return null} +function pWb(a){var b,c,d,e,f,g,h,i;g=0;f=a.f.e;for(d=0;d<f.c.length;++d){h=(tFb(d,f.c.length),RD(f.c[d],153));for(e=d+1;e<f.c.length;++e){i=(tFb(e,f.c.length),RD(f.c[e],153));c=bjd(h.d,i.d);b=c-a.a[h.a][i.a];g+=a.i[h.a][i.a]*b*b}}return g} +function oec(a,b){var c;if(nQb(b,(yCc(),UAc))){return}c=wec(RD(mQb(b,hec),371),RD(mQb(a,UAc),171));pQb(b,hec,c);if(gs(new is(Mr(W2b(b).a.Kc(),new ir)))){return}switch(c.g){case 1:pQb(b,UAc,(cxc(),Zwc));break;case 2:pQb(b,UAc,(cxc(),_wc));}} +function aoc(a,b){var c;Snc(a);a.a=(c=new Ri,FDb(new SDb(null,new Swb(b.d,16)),new zoc(c)),c);Xnc(a,RD(mQb(b.b,(yCc(),CAc)),349));Znc(a);Ync(a);Wnc(a);$nc(a);_nc(a,b);FDb(EDb(new SDb(null,gj(ej(a.b).a)),new poc),new roc);b.a=false;a.a=null} +function B$c(){B$c=geb;r$c=new lGd(REe,(Geb(),false));s$c=new lGd(SEe,7);sgb(0);y$c=new lGd(TEe,sgb(0));v$c=new lGd(UEe,sgb(-1));A$c=(s_c(),r_c);z$c=new lGd(VEe,A$c);u$c=(LZc(),IZc);t$c=new lGd(WEe,u$c);x$c=(A_c(),z_c);w$c=new lGd(XEe,x$c)} +function _Bd(){FBd.call(this,$He,(bvd(),avd));this.p=null;this.a=null;this.f=null;this.n=null;this.g=null;this.c=null;this.i=null;this.j=null;this.d=null;this.b=null;this.e=null;this.k=null;this.o=null;this.s=null;this.q=false;this.r=false} +function aGd(){aGd=geb;_Fd=new bGd(FBe,0);YFd=new bGd('INSIDE_SELF_LOOPS',1);ZFd=new bGd('MULTI_EDGES',2);XFd=new bGd('EDGE_LABELS',3);$Fd=new bGd('PORTS',4);VFd=new bGd('COMPOUND',5);UFd=new bGd('CLUSTERS',6);WFd=new bGd('DISCONNECTED',7)} +function RJd(a,b,c){var d,e,f;if(a.Pj()){f=a.Qj();++a.j;a.qj(b,a.Zi(b,c));d=a.Ij(3,null,c,b,f);if(a.Mj()){e=a.Nj(c,null);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Jj(d)}}else{++a.j;a.qj(b,a.Zi(b,c));if(a.Mj()){e=a.Nj(c,null);!!e&&e.oj()}}} +function _ib(a,b){var c,d,e;if(b==0){return (a.a[0]&1)!=0}if(b<0){throw Adb(new teb('Negative bit address'))}e=b>>5;if(e>=a.d){return a.e<0}c=a.a[e];b=1<<(b&31);if(a.e<0){d=Uib(a);if(e<d){return false}else d==e?(c=-c):(c=~c)}return (c&b)!=0} +function Zdd(a,b,c,d){var e;RD(c.b,68);RD(c.b,68);RD(d.b,68);RD(d.b,68);e=ojd(ajd(RD(c.b,68).c),RD(d.b,68).c);kjd(e,PQb(RD(c.b,68),RD(d.b,68),e));RD(d.b,68);RD(d.b,68);RD(d.b,68).c.a+e.a;RD(d.b,68).c.b+e.b;RD(d.b,68);Umb(d.a,new ced(a,b,d))} +function V$d(a,b){var c,d,e,f,g,h,i;f=b.e;if(f){c=yvd(f);d=RD(a.g,689);for(g=0;g<a.i;++g){i=d[g];if(h2d(i)==c){e=(!i.d&&(i.d=new XZd(o7,i,1)),i.d);h=RD(c.Mh(jwd(f,f.Cb,f.Db>>16)),15).dd(f);if(h<e.i){return V$d(a,RD(QHd(e,h),89))}}}}return b} +function feb(a,b,c){var d=eeb,h;var e=d[a];var f=e instanceof Array?e[0]:null;if(e&&!f){_=e}else{_=(h=b&&b.prototype,!h&&(h=eeb[b]),ieb(h));_.Sm=c;!b&&(_.Tm=keb);d[a]=_}for(var g=3;g<arguments.length;++g){arguments[g].prototype=_}f&&(_.Rm=f)} +function gs(a){var b;while(!RD(Qb(a.a),51).Ob()){a.d=fs(a);if(!a.d){return false}a.a=RD(a.d.Pb(),51);if(ZD(a.a,37)){b=RD(a.a,37);a.a=b.a;!a.b&&(a.b=new wmb);hmb(a.b,a.d);if(b.b){while(!nmb(b.b)){hmb(a.b,RD(tmb(b.b),51))}}a.d=b.d}}return true} +function xJb(a,b){var c,d,e,f;e=1;b.j=true;f=null;for(d=new Anb(CIb(b));d.a<d.c.c.length;){c=RD(ynb(d),218);if(!a.c[c.c]){a.c[c.c]=true;f=oIb(c,b);if(c.f){e+=xJb(a,f)}else if(!f.j&&c.a==c.e.e-c.d.e){c.f=true;Ysb(a.p,c);e+=xJb(a,f)}}}return e} +function OYb(a){var b,c,d;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=(uFb(0),0);if(d>0){!(Dmd(a.a.c)&&b.n.d)&&!(Emd(a.a.c)&&b.n.b)&&(b.g.d+=$wnd.Math.max(0,d/2-0.5));!(Dmd(a.a.c)&&b.n.a)&&!(Emd(a.a.c)&&b.n.c)&&(b.g.a-=d-1)}}} +function c7b(a){var b,c,d,e,f;e=new bnb;f=d7b(a,e);b=RD(mQb(a,(Ywc(),Iwc)),10);if(b){for(d=new Anb(b.j);d.a<d.c.c.length;){c=RD(ynb(d),12);dE(mQb(c,Awc))===dE(a)&&(f=$wnd.Math.max(f,d7b(c,e)))}}e.c.length==0||pQb(a,ywc,f);return f!=-1?e:null} +function rcc(a,b,c){var d,e,f,g,h,i;f=RD(Vmb(b.e,0),18).c;d=f.i;e=d.k;i=RD(Vmb(c.g,0),18).d;g=i.i;h=g.k;e==(r3b(),o3b)?pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12)):pQb(a,(Ywc(),vwc),f);h==o3b?pQb(a,(Ywc(),wwc),RD(mQb(g,wwc),12)):pQb(a,(Ywc(),wwc),i)} +function ysc(a){var b,c,d;this.c=a;d=RD(mQb(a,(yCc(),rAc)),88);b=Kfb(UD(mQb(a,Tzc)));c=Kfb(UD(mQb(a,oCc)));d==(Cmd(),ymd)||d==zmd||d==Amd?(this.b=b*c):(this.b=1/(b*c));this.j=Kfb(UD(mQb(a,cCc)));this.e=Kfb(UD(mQb(a,bCc)));this.f=a.b.c.length} +function BD(a,b){var c,d,e,f,g;b&=63;c=a.h;d=(c&fxe)!=0;d&&(c|=-1048576);if(b<22){g=c>>b;f=a.m>>b|c<<22-b;e=a.l>>b|a.m<<22-b}else if(b<44){g=d?exe:0;f=c>>b-22;e=a.m>>b-22|c<<44-b}else{g=d?exe:0;f=d?dxe:0;e=c>>b-44}return hD(e&dxe,f&dxe,g&exe)} +function ORb(a){var b,c,d,e,f,g;this.c=new bnb;this.d=a;d=oxe;e=oxe;b=pxe;c=pxe;for(g=Sub(a,0);g.b!=g.d.c;){f=RD(evb(g),8);d=$wnd.Math.min(d,f.a);e=$wnd.Math.min(e,f.b);b=$wnd.Math.max(b,f.a);c=$wnd.Math.max(c,f.b)}this.a=new Uid(d,e,b-d,c-e)} +function Udc(a,b){var c,d,e,f,g,h;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);g.k==(r3b(),n3b)&&Qdc(g,b);for(d=new is(Mr(a3b(g).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);Pdc(c,b)}}}} +function nec(a,b){var c,d,e;b.Ug('Layer constraint preprocessing',1);c=new bnb;e=new Jkb(a.a,0);while(e.b<e.d.gc()){d=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),10));if(mec(d)){kec(d);ZEb(c.c,d);Ckb(e)}}c.c.length==0||pQb(a,(Ywc(),lwc),c);b.Vg()} +function $Hc(a){var b,c;a.e=$C(kE,Pwe,28,a.p.c.length,15,1);a.k=$C(kE,Pwe,28,a.p.c.length,15,1);for(c=new Anb(a.p);c.a<c.c.c.length;){b=RD(ynb(c),10);a.e[b.p]=Kr(new is(Mr(Z2b(b).a.Kc(),new ir)));a.k[b.p]=Kr(new is(Mr(a3b(b).a.Kc(),new ir)))}} +function bIc(a){var b,c,d,e,f,g;e=0;a.q=new bnb;b=new _sb;for(g=new Anb(a.p);g.a<g.c.c.length;){f=RD(ynb(g),10);f.p=e;for(d=new is(Mr(a3b(f).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);Ysb(b,c.d.i)}b.a.Bc(f)!=null;Rmb(a.q,new btb(b));b.a.$b();++e}} +function pPd(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.f>0&&ZD(b,44)){a.a._j();j=RD(b,44);i=j.ld();f=i==null?0:tb(i);g=bOd(a.a,f);c=a.a.d[g];if(c){d=RD(c.g,379);k=c.i;for(h=0;h<k;++h){e=d[h];if(e.Bi()==f&&e.Fb(j)){pPd(a,j);return true}}}}return false} +function Nje(a){var b,c,d,e,f,g,h;b=a.qi(AKe);if(b){h=WD($Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'settingDelegates'));if(h!=null){c=new bnb;for(e=vhb(h,'\\w+'),f=0,g=e.length;f<g;++f){d=e[f];ZEb(c.c,d)}return c}}return yob(),yob(),vob} +function Ync(a){var b,c,d,e;for(e=RD(Qc(a.a,(Bnc(),ync)),15).Kc();e.Ob();){d=RD(e.Pb(),105);c=(b=Ec(d.k),b.Hc((qpd(),Yod))?b.Hc(Xod)?b.Hc(npd)?b.Hc(ppd)?null:Jnc:Lnc:Knc:Inc);Qnc(a,d,c[0],(joc(),goc),0);Qnc(a,d,c[1],hoc,1);Qnc(a,d,c[2],ioc,1)}} +function Kqc(a,b){var c,d;c=Lqc(b);Oqc(a,b,c);UTc(a.a,RD(mQb(Y2b(b.b),(Ywc(),Lwc)),234));Jqc(a);Iqc(a,b);d=$C(kE,Pwe,28,b.b.j.c.length,15,1);Rqc(a,b,(qpd(),Yod),d,c);Rqc(a,b,Xod,d,c);Rqc(a,b,npd,d,c);Rqc(a,b,ppd,d,c);a.a=null;a.c=null;a.b=null} +function Yyd(a,b,c){switch(b){case 7:!a.e&&(a.e=new Yie(G4,a,7,4));sLd(a.e);!a.e&&(a.e=new Yie(G4,a,7,4));YGd(a.e,RD(c,16));return;case 8:!a.d&&(a.d=new Yie(G4,a,8,5));sLd(a.d);!a.d&&(a.d=new Yie(G4,a,8,5));YGd(a.d,RD(c,16));return;}xyd(a,b,c)} +function Rt(a,b){var c,d,e,f,g;if(dE(b)===dE(a)){return true}if(!ZD(b,15)){return false}g=RD(b,15);if(a.gc()!=g.gc()){return false}f=g.Kc();for(d=a.Kc();d.Ob();){c=d.Pb();e=f.Pb();if(!(dE(c)===dE(e)||c!=null&&pb(c,e))){return false}}return true} +function jac(a,b){var c,d,e,f;f=RD(zDb(EDb(EDb(new SDb(null,new Swb(b.b,16)),new pac),new rac),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);f.Jc(new tac);c=0;for(e=f.Kc();e.Ob();){d=RD(e.Pb(),12);d.p==-1&&iac(a,d,c++)}} +function KDc(a){switch(a.g){case 0:return new iQc;case 1:return new DNc;case 2:return new TNc;case 3:return new aRc;case 4:return new yOc;default:throw Adb(new agb('No implementation is available for the node placer '+(a.f!=null?a.f:''+a.g)));}} +function Qtc(a){switch(a.g){case 0:return new UFc;case 1:return new NFc;case 2:return new cGc;case 3:return new jGc;case 4:return new YFc;default:throw Adb(new agb('No implementation is available for the cycle breaker '+(a.f!=null?a.f:''+a.g)));}} +function I_c(a,b){var c,d,e,f,g;d=new Yub;Pub(d,b,d.c.b,d.c);do{c=(sFb(d.b!=0),RD(Wub(d,d.a.a),39));a.b[c.g]=1;for(f=Sub(c.d,0);f.b!=f.d.c;){e=RD(evb(f),65);g=e.c;a.b[g.g]==1?Mub(a.a,e):a.b[g.g]==2?(a.b[g.g]=1):Pub(d,g,d.c.b,d.c)}}while(d.b!=0)} +function $$b(a,b,c){var d;d=null;!!b&&(d=b.d);k_b(a,new eZb(b.n.a-d.b+c.a,b.n.b-d.d+c.b));k_b(a,new eZb(b.n.a-d.b+c.a,b.n.b+b.o.b+d.a+c.b));k_b(a,new eZb(b.n.a+b.o.a+d.c+c.a,b.n.b-d.d+c.b));k_b(a,new eZb(b.n.a+b.o.a+d.c+c.a,b.n.b+b.o.b+d.a+c.b))} +function iac(a,b,c){var d,e,f;b.p=c;for(f=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(b),new _3b(b)])));gs(f);){d=RD(hs(f),12);d.p==-1&&iac(a,d,c)}if(b.i.k==(r3b(),o3b)){for(e=new Anb(b.i.j);e.a<e.c.c.length;){d=RD(ynb(e),12);d!=b&&d.p==-1&&iac(a,d,c)}}} +function cRc(a,b){var c,d,e,f,g,h;d=new gub;g=Xx(new mob(a.g));for(f=g.a.ec().Kc();f.Ob();){e=RD(f.Pb(),10);if(!e){b.bh('There are no classes in a balanced layout.');break}h=a.j[e.p];c=RD(cub(d,h),15);if(!c){c=new bnb;dub(d,h,c)}c.Fc(e)}return d} +function RTc(a){var b,c,d,e,f;e=RD(zDb(BDb(ODb(a)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);d=Hze;if(e.gc()>=2){c=e.Kc();b=UD(c.Pb());while(c.Ob()){f=b;b=UD(c.Pb());d=$wnd.Math.min(d,(uFb(b),b)-(uFb(f),f))}}return d} +function iWc(a,b){var c,d,e;e=new bnb;for(d=Sub(b.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.b.g==a.g&&!lhb(c.b.c,IEe)&&dE(mQb(c.b,(h_c(),f_c)))!==dE(mQb(c.c,f_c))&&!yDb(new SDb(null,new Swb(e,16)),new OWc(c))&&(ZEb(e.c,c),true)}_mb(e,new QWc);return e} +function $u(a,b){var c,d,e;if(dE(b)===dE(Qb(a))){return true}if(!ZD(b,15)){return false}d=RD(b,15);e=a.gc();if(e!=d.gc()){return false}if(ZD(d,59)){for(c=0;c<e;c++){if(!Hb(a.Xb(c),d.Xb(c))){return false}}return true}else{return Cr(a.Kc(),d.Kc())}} +function Scc(a,b,c,d,e,f){var g,h,i,j;h=!QDb(CDb(a.Oc(),new PAb(new Wcc))).Bd((xDb(),wDb));g=a;f==(Cmd(),Bmd)&&(g=hv(g));for(j=g.Kc();j.Ob();){i=RD(j.Pb(),72);i.n.a=b.a;h?(i.n.b=b.b+(d.b-i.o.b)/2):e?(i.n.b=b.b):(i.n.b=b.b+d.b-i.o.b);b.a+=i.o.a+c}} +function Tgc(a,b){var c,d,e,f,g;b.Ug('Port side processing',1);for(g=new Anb(a.a);g.a<g.c.c.length;){e=RD(ynb(g),10);Ugc(e)}for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);Ugc(e)}}b.Vg()} +function bEd(a,b,c){var d,e,f,g,h,i,j;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);i=xDd(c,g.a);if(i){j=FGd(zDd(i,hIe),b);Zjb(a.f,j,i);e=uIe in i.a;e&&jyd(j,zDd(i,uIe));GEd(i,j);HEd(i,j)}}}} +function MWb(a,b,c){var d,e,f,g,h;h=c;!h&&(h=Nqd(new Oqd,0));h.Ug(EAe,1);cXb(a.c,b);g=H_b(a.a,b);if(g.gc()==1){OWb(RD(g.Xb(0),36),h)}else{f=1/g.gc();for(e=g.Kc();e.Ob();){d=RD(e.Pb(),36);if(c.$g()){return}OWb(d,h.eh(f))}}F_b(a.a,g,b);PWb(b);h.Vg()} +function Hic(a,b,c){var d,e,f,g,h;e=a.f;!e&&(e=RD(a.a.a.ec().Kc().Pb(),60));Iic(e,b,c);if(a.a.a.gc()==1){return}d=b*c;for(g=a.a.a.ec().Kc();g.Ob();){f=RD(g.Pb(),60);if(f!=e){h=$jc(f);if(h.f.d){f.d.d+=d+Tye;f.d.a-=d+Tye}else h.f.a&&(f.d.a-=d+Tye)}}} +function kTb(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;g=c-a;h=d-b;f=$wnd.Math.atan2(g,h);i=f+Gze;j=f-Gze;k=e*$wnd.Math.sin(i)+a;m=e*$wnd.Math.cos(i)+b;l=e*$wnd.Math.sin(j)+a;n=e*$wnd.Math.cos(j)+b;return dv(cD(WC(l3,1),Nve,8,0,[new rjd(k,m),new rjd(l,n)]))} +function mQc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];h=(l=a.g[f.p],Kfb(a.p[l.p])+Kfb(a.d[f.p])-f.d.d);i=pQc(f,d);if(i){g=(j=a.g[i.p],Kfb(a.p[j.p])+Kfb(a.d[i.p])+i.o.b+i.d.a);e=$wnd.Math.min(e,h-(g+bFc(a.k,f,i)))}}while(k!=f);return e} +function nQc(a,b,c,d){var e,f,g,h,i,j,k,l;e=c;k=b;f=k;do{f=a.a[f.p];g=(l=a.g[f.p],Kfb(a.p[l.p])+Kfb(a.d[f.p])+f.o.b+f.d.a);i=oQc(f,d);if(i){h=(j=a.g[i.p],Kfb(a.p[j.p])+Kfb(a.d[i.p])-i.d.d);e=$wnd.Math.min(e,h-(g+bFc(a.k,f,i)))}}while(k!=f);return e} +function r9c(a,b){var c;b.Ug('Equal Whitespace Eliminator',1);if(Hxd(a,(X6c(),V6c))){w9c(RD(Gxd(a,V6c),15),Kfb(UD(Gxd(a,O6c))),(c=Kfb(UD(Gxd(a,M6c))),Kfb(UD(Gxd(a,(X7c(),Q7c)))),c))}else{throw Adb(new Jed('The graph does not contain rows.'))}b.Vg()} +function Gxd(a,b){var c,d;d=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),$Nd(a.o,b));if(d!=null){return d}c=b.Sg();ZD(c,4)&&(c==null?(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),jOd(a.o,b)):(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),fOd(a.o,b,c)),a);return c} +function dod(){dod=geb;Xnd=new eod('H_LEFT',0);Wnd=new eod('H_CENTER',1);Znd=new eod('H_RIGHT',2);cod=new eod('V_TOP',3);bod=new eod('V_CENTER',4);aod=new eod('V_BOTTOM',5);$nd=new eod('INSIDE',6);_nd=new eod('OUTSIDE',7);Ynd=new eod('H_PRIORITY',8)} +function jJb(a,b){var c,d,e,f,g,h,i;if(!b.f){throw Adb(new agb('The input edge is not a tree edge.'))}f=null;e=lve;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),218);h=c.d;i=c.e;if(oJb(a,h,b)&&!oJb(a,i,b)){g=i.e-h.e-c.a;if(g<e){e=g;f=c}}}return f} +function sWb(a){var b,c,d,e,f,g;if(a.f.e.c.length<=1){return}b=0;e=pWb(a);c=oxe;do{b>0&&(e=c);for(g=new Anb(a.f.e);g.a<g.c.c.length;){f=RD(ynb(g),153);if(Heb(TD(mQb(f,(dWb(),WVb))))){continue}d=oWb(a,f);$id(hjd(f.d),d)}c=pWb(a)}while(!rWb(a,b++,e,c))} +function Ymc(a,b){var c,d,e,f,g;f=a.g.a;g=a.g.b;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),72);e=c.n;a.a==(enc(),bnc)||a.i==(qpd(),Xod)?(e.a=f):a.a==cnc||a.i==(qpd(),ppd)?(e.a=f+a.j.a-c.o.a):(e.a=f+(a.j.a-c.o.a)/2);e.b=g;$id(e,b);g+=c.o.b+a.e}} +function BEd(a,b){var c,d,e,f,g,h,i,j,k,l;j=a;i=yDd(j,'individualSpacings');if(i){d=Hxd(b,(umd(),amd));g=!d;if(g){e=new dtd;Ixd(b,amd,e)}h=RD(Gxd(b,amd),385);l=i;f=null;!!l&&(f=(k=oC(l,$C(qJ,Nve,2,0,6,1)),new CC(l,k)));if(f){c=new dFd(l,h);xgb(f,c)}}} +function FEd(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=null;l=a;k=null;if(DIe in l.a||EIe in l.a||nIe in l.a){j=null;m=EGd(b);g=yDd(l,DIe);c=new gFd(m);cEd(c.a,g);h=yDd(l,EIe);d=new AFd(m);nEd(d.a,h);f=wDd(l,nIe);e=new DFd(m);j=(oEd(e.a,f),f);k=j}i=k;return i} +function ox(a,b){var c,d,e;if(b===a){return true}if(ZD(b,552)){e=RD(b,849);if(a.a.d!=e.a.d||Ih(a).gc()!=Ih(e).gc()){return false}for(d=Ih(e).Kc();d.Ob();){c=RD(d.Pb(),425);if(Qw(a,c.a.ld())!=RD(c.a.md(),16).gc()){return false}}return true}return false} +function sPb(a){var b,c,d,e;d=RD(a.a,17).a;e=RD(a.b,17).a;b=d;c=e;if(d==0&&e==0){c-=1}else{if(d==-1&&e<=0){b=0;c-=2}else{if(d<=0&&e>0){b-=1;c-=1}else{if(d>=0&&e<0){b+=1;c+=1}else{if(d>0&&e>=0){b-=1;c+=1}else{b+=1;c-=1}}}}}return new Ptd(sgb(b),sgb(c))} +function nNc(a,b){if(a.c<b.c){return -1}else if(a.c>b.c){return 1}else if(a.b<b.b){return -1}else if(a.b>b.b){return 1}else if(a.a!=b.a){return tb(a.a)-tb(b.a)}else if(a.d==(sNc(),rNc)&&b.d==qNc){return -1}else if(a.d==qNc&&b.d==rNc){return 1}return 0} +function ARc(a,b){var c,d,e,f,g;f=b.a;f.c.i==b.b?(g=f.d):(g=f.c);f.c.i==b.b?(d=f.c):(d=f.d);e=lQc(a.a,g,d);if(e>0&&e<Hze){c=mQc(a.a,d.i,e,a.c);rQc(a.a,d.i,-c);return c>0}else if(e<0&&-e<Hze){c=nQc(a.a,d.i,-e,a.c);rQc(a.a,d.i,c);return c>0}return false} +function X9c(a,b,c,d){var e,f,g,h,i,j,k,l;e=(b-a.d)/a.c.c.length;f=0;a.a+=c;a.d=b;for(l=new Anb(a.c);l.a<l.c.c.length;){k=RD(ynb(l),27);j=k.g;i=k.f;Dyd(k,k.i+f*e);Eyd(k,k.j+d*c);Cyd(k,k.g+e);Ayd(k,a.a);++f;h=k.g;g=k.f;Jsd(k,new rjd(h,g),new rjd(j,i))}} +function vAd(a){var b,c,d,e,f,g,h;if(a==null){return null}h=a.length;e=(h+1)/2|0;g=$C(gE,YHe,28,e,15,1);h%2!=0&&(g[--e]=JAd((BFb(h-1,a.length),a.charCodeAt(h-1))));for(c=0,d=0;c<e;++c){b=JAd(ihb(a,d++));f=JAd(ihb(a,d++));g[c]=(b<<4|f)<<24>>24}return g} +function Bfb(a){if(a.ze()){var b=a.c;b.Ae()?(a.o='['+b.n):!b.ze()?(a.o='[L'+b.xe()+';'):(a.o='['+b.xe());a.b=b.we()+'[]';a.k=b.ye()+'[]';return}var c=a.j;var d=a.d;d=d.split('/');a.o=Efb('.',[c,Efb('$',d)]);a.b=Efb('.',[c,Efb('.',d)]);a.k=d[d.length-1]} +function hJb(a,b){var c,d,e,f,g;g=null;for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);if(e.b.a.c.length==e.g.a.c.length){d=e.e;g=sJb(e);for(c=e.e-RD(g.a,17).a+1;c<e.e+RD(g.b,17).a;c++){b[c]<b[d]&&(d=c)}if(b[d]<b[e.e]){--b[e.e];++b[d];e.e=d}}}} +function qQc(a){var b,c,d,e,f,g,h,i;e=oxe;d=pxe;for(c=new Anb(a.e.b);c.a<c.c.c.length;){b=RD(ynb(c),30);for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);i=Kfb(a.p[f.p]);h=i+Kfb(a.b[a.g[f.p].p]);e=$wnd.Math.min(e,i);d=$wnd.Math.max(d,h)}}return d-e} +function nSd(a){gSd();var b,c,d,e;d=qhb(a,Fhb(35));b=d==-1?a:(AFb(0,d,a.length),a.substr(0,d));c=d==-1?null:(BFb(d+1,a.length+1),a.substr(d+1));e=KSd(fSd,b);if(!e){e=ASd(b);LSd(fSd,b,e);c!=null&&(e=hSd(e,c))}else c!=null&&(e=hSd(e,(uFb(c),c)));return e} +function Ree(a,b,c,d){var e,f,g,h,i,j;i=null;e=Fee(a,b);for(h=0,j=e.gc();h<j;++h){f=RD(e.Xb(h),179);if(lhb(d,Afe(Qee(a,f)))){g=Bfe(Qee(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(lhb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function See(a,b,c,d){var e,f,g,h,i,j;i=null;e=Gee(a,b);for(h=0,j=e.gc();h<j;++h){f=RD(e.Xb(h),179);if(lhb(d,Afe(Qee(a,f)))){g=Bfe(Qee(a,f));if(c==null){if(g==null){return f}else !i&&(i=f)}else if(lhb(c,g)){return f}else g==null&&!i&&(i=f)}}return null} +function Pge(a,b,c){var d,e,f,g,h,i;g=new YHd;h=pke(a.e.Dh(),b);d=RD(a.g,124);nke();if(RD(b,69).xk()){for(f=0;f<a.i;++f){e=d[f];h.am(e.Lk())&&WGd(g,e)}}else{for(f=0;f<a.i;++f){e=d[f];if(h.am(e.Lk())){i=e.md();WGd(g,c?Bge(a,b,f,g.i,i):i)}}}return WHd(g)} +function Kje(a){var b,c,d,e,f,g,h;if(a){b=a.qi(AKe);if(b){g=WD($Nd((!b.b&&(b.b=new SVd((JTd(),FTd),C8,b)),b.b),'conversionDelegates'));if(g!=null){h=new bnb;for(d=vhb(g,'\\w+'),e=0,f=d.length;e<f;++e){c=d[e];ZEb(h.c,c)}return h}}}return yob(),yob(),vob} +function WXb(a,b){var c,d,e,f,g,h,i,j;g=b==1?MXb:LXb;for(f=g.a.ec().Kc();f.Ob();){e=RD(f.Pb(),88);for(i=RD(Qc(a.f.c,e),21).Kc();i.Ob();){h=RD(i.Pb(),42);d=RD(h.b,86);j=RD(h.a,194);c=j.c;switch(e.g){case 2:case 1:d.g.d+=c;break;case 4:case 3:d.g.c+=c;}}}} +function idc(a,b){var c,d,e,f,g;c=new Zrb(ZW);for(e=(btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])),f=0,g=e.length;f<g;++f){d=e[f];Xrb(c,d,new bnb)}FDb(GDb(CDb(EDb(new SDb(null,new Swb(a.b,16)),new ydc),new Adc),new Cdc(b)),new Edc(c));return c} +function n3c(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(f=b.Kc();f.Ob();){e=RD(f.Pb(),27);k=e.i+e.g/2;m=e.j+e.f/2;i=a.f;g=i.i+i.g/2;h=i.j+i.f/2;j=k-g;l=m-h;d=$wnd.Math.sqrt(j*j+l*l);j*=a.e/d;l*=a.e/d;if(c){k-=j;m-=l}else{k+=j;m+=l}Dyd(e,k-e.g/2);Eyd(e,m-e.f/2)}} +function vte(a){var b,c,d;if(a.c)return;if(a.b==null)return;for(b=a.b.length-4;b>=0;b-=2){for(c=0;c<=b;c+=2){if(a.b[c]>a.b[c+2]||a.b[c]===a.b[c+2]&&a.b[c+1]>a.b[c+3]){d=a.b[c+2];a.b[c+2]=a.b[c];a.b[c]=d;d=a.b[c+3];a.b[c+3]=a.b[c+1];a.b[c+1]=d}}}a.c=true} +function nKc(a,b){var c,d,e,f,g,h,i,j,k;j=-1;k=0;for(g=a,h=0,i=g.length;h<i;++h){f=g[h];c=new hrc(j==-1?a[0]:a[j],b,(lDc(),kDc));for(d=0;d<f.length;d++){for(e=d+1;e<f.length;e++){nQb(f[d],(Ywc(),zwc))&&nQb(f[e],zwc)&&crc(c,f[d],f[e])>0&&++k}}++j}return k} +function awd(a){var b,c;c=new dib(nfb(a.Rm));c.a+='@';Zhb(c,(b=tb(a)>>>0,b.toString(16)));if(a.Vh()){c.a+=' (eProxyURI: ';Yhb(c,a._h());if(a.Kh()){c.a+=' eClass: ';Yhb(c,a.Kh())}c.a+=')'}else if(a.Kh()){c.a+=' (eClass: ';Yhb(c,a.Kh());c.a+=')'}return c.a} +function KGb(a){var b,c,d,e;if(a.e){throw Adb(new dgb((lfb(lN),lye+lN.k+mye)))}a.d==(Cmd(),Amd)&&JGb(a,ymd);for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.g=b.i}for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);d.i=pxe}a.b.cf(a);return a} +function rUc(a,b){var c,d,e,f,g;if(b<2*a.b){throw Adb(new agb('The knot vector must have at least two time the dimension elements.'))}a.f=1;for(e=0;e<a.b;e++){Rmb(a.e,0)}g=b+1-2*a.b;c=g;for(f=1;f<g;f++){Rmb(a.e,f/c)}if(a.d){for(d=0;d<a.b;d++){Rmb(a.e,1)}}} +function AEd(a,b){var c,d,e,f,g,h,i,j,k;j=b;k=RD(lp(Co(a.i),j),27);if(!k){e=zDd(j,uIe);h="Unable to find elk node for json object '"+e;i=h+"' Panic!";throw Adb(new CDd(i))}f=wDd(j,'edges');c=new KEd(a,k);MDd(c.a,c.b,f);g=wDd(j,iIe);d=new VEd(a);XDd(d.a,g)} +function XNd(a,b,c,d){var e,f,g,h,i;if(d!=null){e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=RD(f[h],136);if(g.Bi()==c&&pb(d,g.ld())){return h}}}}else{e=a.d[b];if(e){f=e.g;i=e.i;for(h=0;h<i;++h){g=RD(f[h],136);if(dE(g.ld())===dE(d)){return h}}}}return -1} +function N5d(a,b){var c,d,e;c=b==null?Wd(qtb(a.f,null)):Ktb(a.i,b);if(ZD(c,241)){e=RD(c,241);e.zi()==null&&undefined;return e}else if(ZD(c,507)){d=RD(c,2037);e=d.a;!!e&&(e.yb==null?undefined:b==null?rtb(a.f,null,e):Ltb(a.i,b,e));return e}else{return null}} +function Hqe(a){Gqe();var b,c,d,e,f,g,h;if(a==null)return null;e=a.length;if(e%2!=0)return null;b=Ahb(a);f=e/2|0;c=$C(gE,YHe,28,f,15,1);for(d=0;d<f;d++){g=Eqe[b[d*2]];if(g==-1)return null;h=Eqe[b[d*2+1]];if(h==-1)return null;c[d]=(g<<4|h)<<24>>24}return c} +function cNb(a,b,c){var d,e,f;e=RD(Vrb(a.i,b),314);if(!e){e=new UKb(a.d,b,c);Wrb(a.i,b,e);if(jMb(b)){tKb(a.a,b.c,b.b,e)}else{f=iMb(b);d=RD(Vrb(a.p,f),252);switch(f.g){case 1:case 3:e.j=true;cLb(d,b.b,e);break;case 4:case 2:e.k=true;cLb(d,b.c,e);}}}return e} +function Ndc(a,b){var c,d,e,f,g,h,i,j,k;i=ev(a.c-a.b&a.a.length-1);j=null;k=null;for(f=new Kmb(a);f.a!=f.b;){e=RD(Imb(f),10);c=(h=RD(mQb(e,(Ywc(),vwc)),12),!h?null:h.i);d=(g=RD(mQb(e,wwc),12),!g?null:g.i);if(j!=c||k!=d){Rdc(i,b);j=c;k=d}ZEb(i.c,e)}Rdc(i,b)} +function Rge(a,b,c,d){var e,f,g,h,i,j;h=new YHd;i=pke(a.e.Dh(),b);e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];i.am(f.Lk())&&WGd(h,f)}}else{for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){j=f.md();WGd(h,d?Bge(a,b,g,h.i,j):j)}}}return XHd(h,c)} +function oHc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new Anb(b.j);h.a<h.c.c.length;){g=RD(ynb(h),12);for(d=new Anb(g.g);d.a<d.c.c.length;){c=RD(ynb(d),18);j=c.d.i;if(b!=j){i=oHc(a,j);f=$wnd.Math.max(f,i+1)}}}nHc(a,b,f);return f}} +function wHc(a,b){var c,d,e,f,g,h,i,j;e=a.b[b.p];if(e>=0){return e}else{f=1;for(h=new Anb(b.j);h.a<h.c.c.length;){g=RD(ynb(h),12);for(d=new Anb(g.e);d.a<d.c.c.length;){c=RD(ynb(d),18);j=c.c.i;if(b!=j){i=wHc(a,j);f=$wnd.Math.max(f,i+1)}}}vHc(a,b,f);return f}} +function wLc(a,b,c){var d,e,f;for(d=1;d<a.c.length;d++){f=(tFb(d,a.c.length),RD(a.c[d],10));e=d;while(e>0&&b.Ne((tFb(e-1,a.c.length),RD(a.c[e-1],10)),f)>0){$mb(a,e,(tFb(e-1,a.c.length),RD(a.c[e-1],10)));--e}tFb(e,a.c.length);a.c[e]=f}c.a=new Tsb;c.b=new Tsb} +function yhd(a,b,c){var d,e,f,g,h,i,j,k;k=(d=RD(b.e&&b.e(),9),new Fsb(d,RD(WEb(d,d.length),9),0));i=vhb(c,'[\\[\\]\\s,]+');for(f=i,g=0,h=f.length;g<h;++g){e=f[g];if(Dhb(e).length==0){continue}j=xhd(a,e);if(j==null){return null}else{zsb(k,RD(j,22))}}return k} +function tse(a){var b,c,d,e;e=a.length;b=null;for(d=0;d<e;d++){c=(BFb(d,a.length),a.charCodeAt(d));if(qhb('.*+?{[()|\\^$',Fhb(c))>=0){if(!b){b=new Rhb;d>0&&Nhb(b,(AFb(0,d,a.length),a.substr(0,d)))}b.a+='\\';Jhb(b,c&Bwe)}else !!b&&Jhb(b,c&Bwe)}return b?b.a:a} +function MYb(a){var b,c,d;for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);d=(uFb(0),0);if(d>0){!(Dmd(a.a.c)&&b.n.d)&&!(Emd(a.a.c)&&b.n.b)&&(b.g.d-=$wnd.Math.max(0,d/2-0.5));!(Dmd(a.a.c)&&b.n.a)&&!(Emd(a.a.c)&&b.n.c)&&(b.g.a+=$wnd.Math.max(0,d-1))}}} +function Ydc(a,b,c){var d,e;if((a.c-a.b&a.a.length-1)==2){if(b==(qpd(),Yod)||b==Xod){Odc(RD(omb(a),15),(Pnd(),Lnd));Odc(RD(omb(a),15),Mnd)}else{Odc(RD(omb(a),15),(Pnd(),Mnd));Odc(RD(omb(a),15),Lnd)}}else{for(e=new Kmb(a);e.a!=e.b;){d=RD(Imb(e),15);Odc(d,c)}}} +function HGd(a,b){var c,d,e,f,g,h,i;e=cv(new QGd(a));h=new Jkb(e,e.c.length);f=cv(new QGd(b));i=new Jkb(f,f.c.length);g=null;while(h.b>0&&i.b>0){c=(sFb(h.b>0),RD(h.a.Xb(h.c=--h.b),27));d=(sFb(i.b>0),RD(i.a.Xb(i.c=--i.b),27));if(c==d){g=c}else{break}}return g} +function Dmc(a,b,c){var d,e,f,g;if(Hmc(a,b)>Hmc(a,c)){d=b3b(c,(qpd(),Xod));a.d=d.dc()?0:L3b(RD(d.Xb(0),12));g=b3b(b,ppd);a.b=g.dc()?0:L3b(RD(g.Xb(0),12))}else{e=b3b(c,(qpd(),ppd));a.d=e.dc()?0:L3b(RD(e.Xb(0),12));f=b3b(b,Xod);a.b=f.dc()?0:L3b(RD(f.Xb(0),12))}} +function wNb(a,b){var c,d,e,f;c=a.o.a;for(f=RD(RD(Qc(a.r,b),21),87).Kc();f.Ob();){e=RD(f.Pb(),117);e.e.a=c*Kfb(UD(e.b.of(sNb)));e.e.b=(d=e.b,d.pf((umd(),Gld))?d.ag()==(qpd(),Yod)?-d.Mf().b-Kfb(UD(d.of(Gld))):Kfb(UD(d.of(Gld))):d.ag()==(qpd(),Yod)?-d.Mf().b:0)}} +function Mhc(a,b){var c,d,e,f;b.Ug('Self-Loop pre-processing',1);for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(pnc(c)){e=(f=new onc(c),pQb(c,(Ywc(),Pwc),f),lnc(f),f);FDb(GDb(EDb(new SDb(null,new Swb(e.d,16)),new Phc),new Rhc),new Thc);Khc(e)}}b.Vg()} +function xsc(a){var b,c,d,e,f,g,h,i;b=true;e=null;f=null;j:for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);for(d=new is(Mr(Z2b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(!!e&&e!=h){b=false;break j}e=h;g=c.c.i;if(!!f&&f!=g){b=false;break j}f=g}}return b} +function mTc(a,b,c){var d,e,f,g,h,i;f=-1;h=-1;for(g=0;g<b.c.length;g++){e=(tFb(g,b.c.length),RD(b.c[g],339));if(e.c>a.c){break}else if(e.a>=a.s){f<0&&(f=g);h=g}}i=(a.s+a.c)/2;if(f>=0){d=lTc(a,b,f,h);i=yTc((tFb(d,b.c.length),RD(b.c[d],339)));wTc(b,d,c)}return i} +function _Ad(a,b,c){var d,e,f,g,h,i,j;g=(f=new pVd,f);nVd(g,(uFb(b),b));j=(!g.b&&(g.b=new SVd((JTd(),FTd),C8,g)),g.b);for(i=1;i<c.length;i+=2){fOd(j,c[i-1],c[i])}d=(!a.Ab&&(a.Ab=new C5d(f7,a,0,3)),a.Ab);for(h=0;h<0;++h){e=jVd(RD(QHd(d,d.i-1),598));d=e}WGd(d,g)} +function DSb(a,b,c){var d,e,f;jQb.call(this,new bnb);this.a=b;this.b=c;this.e=a;d=(a.b&&CRb(a),a.a);this.d=BSb(d.a,this.a);this.c=BSb(d.b,this.b);bQb(this,this.d,this.c);CSb(this);for(f=this.e.e.a.ec().Kc();f.Ob();){e=RD(f.Pb(),272);e.c.c.length>0&&ASb(this,e)}} +function zTb(a,b,c,d,e,f){var g,h,i;if(!e[b.a]){e[b.a]=true;g=d;!g&&(g=new gUb);Rmb(g.e,b);for(i=f[b.a].Kc();i.Ob();){h=RD(i.Pb(),289);if(h.d==c||h.c==c){continue}h.c!=b&&zTb(a,h.c,b,g,e,f);h.d!=b&&zTb(a,h.d,b,g,e,f);Rmb(g.c,h);Tmb(g.d,h.b)}return g}return null} +function v7b(a){var b,c,d,e,f,g,h;b=0;for(e=new Anb(a.e);e.a<e.c.c.length;){d=RD(ynb(e),18);c=yDb(new SDb(null,new Swb(d.b,16)),new N7b);c&&++b}for(g=new Anb(a.g);g.a<g.c.c.length;){f=RD(ynb(g),18);h=yDb(new SDb(null,new Swb(f.b,16)),new P7b);h&&++b}return b>=2} +function _qc(a,b,c,d,e){var f,g,h,i,j,k;f=a.c.d.j;g=RD(ju(c,0),8);for(k=1;k<c.b;k++){j=RD(ju(c,k),8);Pub(d,g,d.c.b,d.c);h=ijd($id(new sjd(g),j),0.5);i=ijd(new qjd(BVc(f)),e);$id(h,i);Pub(d,h,d.c.b,d.c);g=j;f=b==0?tpd(f):rpd(f)}Mub(d,(sFb(c.b!=0),RD(c.c.b.c,8)))} +function fod(a){dod();var b,c,d;c=ysb($nd,cD(WC(A3,1),jwe,95,0,[_nd]));if(dy(Tx(c,a))>1){return false}b=ysb(Xnd,cD(WC(A3,1),jwe,95,0,[Wnd,Znd]));if(dy(Tx(b,a))>1){return false}d=ysb(cod,cD(WC(A3,1),jwe,95,0,[bod,aod]));if(dy(Tx(d,a))>1){return false}return true} +function $Uc(a,b,c){var d,e,f;for(f=new Anb(a.t);f.a<f.c.c.length;){d=RD(ynb(f),274);if(d.b.s<0&&d.c>0){d.b.n-=d.c;d.b.n<=0&&d.b.u>0&&Mub(b,d.b)}}for(e=new Anb(a.i);e.a<e.c.c.length;){d=RD(ynb(e),274);if(d.a.s<0&&d.c>0){d.a.u-=d.c;d.a.u<=0&&d.a.n>0&&Mub(c,d.a)}}} +function tId(a){var b,c,d,e,f;if(a.g==null){a.d=a.bj(a.f);WGd(a,a.d);if(a.c){f=a.f;return f}}b=RD(a.g[a.i-1],51);e=b.Pb();a.e=b;c=a.bj(e);if(c.Ob()){a.d=c;WGd(a,c)}else{a.d=null;while(!b.Ob()){bD(a.g,--a.i,null);if(a.i==0){break}d=RD(a.g[a.i-1],51);b=d}}return e} +function Rfe(a,b){var c,d,e,f,g,h;d=b;e=d.Lk();if(qke(a.e,e)){if(e.Si()&&cge(a,e,d.md())){return false}}else{h=pke(a.e.Dh(),e);c=RD(a.g,124);for(f=0;f<a.i;++f){g=c[f];if(h.am(g.Lk())){if(pb(g,d)){return false}else{RD(eHd(a,f,b),76);return true}}}}return WGd(a,b)} +function Icc(a,b,c,d){var e,f,g,h;e=new j3b(a);h3b(e,(r3b(),n3b));pQb(e,(Ywc(),Awc),b);pQb(e,Mwc,d);pQb(e,(yCc(),BBc),(Bod(),wod));pQb(e,vwc,b.c);pQb(e,wwc,b.d);Oec(b,e);h=$wnd.Math.floor(c/2);for(g=new Anb(e.j);g.a<g.c.c.length;){f=RD(ynb(g),12);f.n.b=h}return e} +function fSc(a){var b,c,d,e,f,g,h;b=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),10);for(f=new is(Mr(a3b(c).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a==e.d.i.c&&e.c.j==(qpd(),ppd)){g=K3b(e.c).b;h=K3b(e.d).b;b=$wnd.Math.max(b,$wnd.Math.abs(h-g))}}}return b} +function QTb(a,b,c){var d,e,f,g,h;c.Ug('ELK Force',1);Heb(TD(Gxd(b,(yVb(),gVb))))||RFb((d=new SFb((lud(),new zud(b))),d));h=KTb(b);RTb(h);STb(a,RD(mQb(h,bVb),432));g=CTb(a.a,h);for(f=g.Kc();f.Ob();){e=RD(f.Pb(),235);pUb(a.b,e,c.eh(1/g.gc()))}h=BTb(g);JTb(h);c.Vg()} +function d_b(a,b,c){switch(c.g){case 1:return new rjd(b.a,$wnd.Math.min(a.d.b,b.b));case 2:return new rjd($wnd.Math.max(a.c.a,b.a),b.b);case 3:return new rjd(b.a,$wnd.Math.max(a.c.b,b.b));case 4:return new rjd($wnd.Math.min(b.a,a.d.a),b.b);}return new rjd(b.a,b.b)} +function yGd(a){var b,c,d;b=ev(1+(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c).i);Rmb(b,(!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));for(d=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));d.e!=d.i.gc();){c=RD(bMd(d),123);Rmb(b,(!c.d&&(c.d=new Yie(G4,c,8,5)),c.d))}return Qb(b),new Dl(b)} +function zGd(a){var b,c,d;b=ev(1+(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c).i);Rmb(b,(!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));for(d=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));d.e!=d.i.gc();){c=RD(bMd(d),123);Rmb(b,(!c.e&&(c.e=new Yie(G4,c,7,4)),c.e))}return Qb(b),new Dl(b)} +function jne(a){var b,c,d,e;if(a==null){return null}else{d=nue(a,true);e=mLe.length;if(lhb(d.substr(d.length-e,e),mLe)){c=d.length;if(c==4){b=(BFb(0,d.length),d.charCodeAt(0));if(b==43){return Wme}else if(b==45){return Vme}}else if(c==3){return Wme}}return Neb(d)}} +function _rc(a,b){var c,d,e,f,g;b.Ug('Breaking Point Processor',1);$rc(a);if(Heb(TD(mQb(a,(yCc(),uCc))))){for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);c=0;for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);f.p=c++}}Vrc(a);Wrc(a,true);Wrc(a,false)}b.Vg()} +function MJc(a,b,c,d){var e,f,g,h,i,j,k,l,m;l=d?(qpd(),ppd):(qpd(),Xod);e=false;for(i=b[c],j=0,k=i.length;j<k;++j){h=i[j];if(Cod(RD(mQb(h,(yCc(),BBc)),101))){continue}g=h.e;m=!b3b(h,l).dc()&&!!g;if(m){f=c1b(g);a.b=new Ylc(f,d?0:f.length-1)}e=e|NJc(a,h,l,m)}return e} +function gOc(a,b,c,d){var e,f,g;g=T0b(b,c);ZEb(d.c,b);if(a.j[g.p]==-1||a.j[g.p]==2||a.a[b.p]){return d}a.j[g.p]=-1;for(f=new is(Mr(W2b(g).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!(!W0b(e)&&!(!W0b(e)&&e.c.i.c==e.d.i.c))||e==b){continue}return gOc(a,e,g,d)}return d} +function AOc(a){var b,c,d,e;b=0;c=0;for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);b=Ydb(Bdb(b,ADb(CDb(new SDb(null,new Swb(d.e,16)),new NPc))));c=Ydb(Bdb(c,ADb(CDb(new SDb(null,new Swb(d.g,16)),new PPc))));if(b>1||c>1){return 2}}if(b+c==1){return 2}return 0} +function Kwb(a,b){var c,d,e,f,g,h;f=a.a*Mxe+a.b*1502;h=a.b*Mxe+11;c=$wnd.Math.floor(h*Nxe);f+=c;h-=c*Oxe;f%=Oxe;a.a=f;a.b=h;if(b<=24){return $wnd.Math.floor(a.a*Ewb[b])}else{e=a.a*(1<<b-24);g=$wnd.Math.floor(a.b*Fwb[b]);d=e+g;d>=2147483648&&(d-=4294967296);return d}} +function uSc(a,b,c){var d,e,f,g,h,i,j;f=new bnb;j=new Yub;g=new Yub;vSc(a,j,g,b);tSc(a,j,g,b,c);for(i=new Anb(a);i.a<i.c.c.length;){h=RD(ynb(i),118);for(e=new Anb(h.k);e.a<e.c.c.length;){d=RD(ynb(e),132);(!b||d.c==(fTc(),dTc))&&h.g>d.b.g&&(ZEb(f.c,d),true)}}return f} +function jed(a,b,c){var d,e,f,g,h,i;h=a.c;for(g=(!c.q?(yob(),yob(),wob):c.q).vc().Kc();g.Ob();){f=RD(g.Pb(),44);d=!QDb(CDb(new SDb(null,new Swb(h,16)),new PAb(new xed(b,f)))).Bd((xDb(),wDb));if(d){i=f.md();if(ZD(i,4)){e=FId(i);e!=null&&(i=e)}b.qf(RD(f.ld(),149),i)}}} +function mbd(a,b,c){var d,e;Sed(a.b);Ved(a.b,(gbd(),dbd),(_cd(),$cd));Ved(a.b,ebd,b.g);Ved(a.b,fbd,b.a);a.a=Qed(a.b,b);c.Ug('Compaction by shrinking a tree',a.a.c.length);if(b.i.c.length>1){for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),47);d.Kf(b,c.eh(1))}}c.Vg()} +function Svd(a,b,c){var d,e,f;f=Eee((lke(),jke),a.Dh(),b);if(f){nke();if(!RD(f,69).xk()){f=zfe(Qee(jke,f));if(!f){throw Adb(new agb(KHe+b.xe()+LHe))}}e=(d=a.Ih(f),RD(d>=0?a.Lh(d,true,true):Qvd(a,f,true),160));RD(e,220).Xl(b,c)}else{throw Adb(new agb(KHe+b.xe()+LHe))}} +function k2d(a,b){var c,d,e,f,g;if(!b){return null}else{f=ZD(a.Cb,90)||ZD(a.Cb,102);g=!f&&ZD(a.Cb,331);for(d=new dMd((!b.a&&(b.a=new iae(b,o7,b)),b.a));d.e!=d.i.gc();){c=RD(bMd(d),89);e=i2d(c);if(f?ZD(e,90):g?ZD(e,156):!!e){return e}}return f?(JTd(),zTd):(JTd(),wTd)}} +function W8b(a,b){var c,d,e,f;b.Ug('Resize child graph to fit parent.',1);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);Tmb(a.a,c.a);c.a.c.length=0}for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g3b(e,null)}a.b.c.length=0;X8b(a);!!a.e&&V8b(a.e,a);b.Vg()} +function Fec(a,b){var c,d,e,f,g;b.Ug('Edge joining',1);c=Heb(TD(mQb(a,(yCc(),mCc))));for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);g=new Jkb(d.a,0);while(g.b<g.d.gc()){f=(sFb(g.b<g.d.gc()),RD(g.d.Xb(g.c=g.b++),10));if(f.k==(r3b(),o3b)){Hec(f,c);Ckb(g)}}}b.Vg()} +function pTc(a,b){var c,d,e,f,g;c=new bnb;e=EDb(new SDb(null,new Swb(a,16)),new ITc);f=EDb(new SDb(null,new Swb(a,16)),new KTc);g=VCb(UCb(HDb(Ly(cD(WC(RM,1),rve,848,0,[e,f])),new MTc)));for(d=1;d<g.length;d++){g[d]-g[d-1]>=2*b&&Rmb(c,new BTc(g[d-1]+b,g[d]-b))}return c} +function dEd(a,b,c){var d,e,f,g,h,j,k,l;if(c){f=c.a.length;d=new vue(f);for(h=(d.b-d.a)*d.c<0?(uue(),tue):new Rue(d);h.Ob();){g=RD(h.Pb(),17);e=xDd(c,g.a);!!e&&(i=null,j=sEd(a,(k=(bvd(),l=new PCd,l),!!b&&NCd(k,b),k),e),jyd(j,zDd(e,uIe)),GEd(e,j),HEd(e,j),CEd(a,e,j))}}} +function sYd(a){var b,c,d,e,f,g;if(!a.j){g=new f1d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);e=sYd(c);YGd(g,e);WGd(g,c)}b.a.Bc(a)!=null}VHd(g);a.j=new N$d((RD(QHd(xYd((lTd(),kTd).o),11),19),g.i),g.g);yYd(a).b&=-33}return a.j} +function lne(a){var b,c,d,e;if(a==null){return null}else{d=nue(a,true);e=mLe.length;if(lhb(d.substr(d.length-e,e),mLe)){c=d.length;if(c==4){b=(BFb(0,d.length),d.charCodeAt(0));if(b==43){return Yme}else if(b==45){return Xme}}else if(c==3){return Yme}}return new Ufb(d)}} +function pD(a){var b,c,d;c=a.l;if((c&c-1)!=0){return -1}d=a.m;if((d&d-1)!=0){return -1}b=a.h;if((b&b-1)!=0){return -1}if(b==0&&d==0&&c==0){return -1}if(b==0&&d==0&&c!=0){return ogb(c)}if(b==0&&d!=0&&c==0){return ogb(d)+22}if(b!=0&&d==0&&c==0){return ogb(b)+44}return -1} +function yo(a,b){var c,d,e,f,g;e=b.a&a.f;f=null;for(d=a.b[e];true;d=d.b){if(d==b){!f?(a.b[e]=b.b):(f.b=b.b);break}f=d}g=b.f&a.f;f=null;for(c=a.c[g];true;c=c.d){if(c==b){!f?(a.c[g]=b.d):(f.d=b.d);break}f=c}!b.e?(a.a=b.c):(b.e.c=b.c);!b.c?(a.e=b.e):(b.c.e=b.e);--a.i;++a.g} +function Dt(a,b){var c;b.d?(b.d.b=b.b):(a.a=b.b);b.b?(b.b.d=b.d):(a.e=b.d);if(!b.e&&!b.c){c=RD(Hvb(RD(_jb(a.b,b.a),260)),260);c.a=0;++a.c}else{c=RD(Hvb(RD(Wjb(a.b,b.a),260)),260);--c.a;!b.e?(c.b=RD(Hvb(b.c),511)):(b.e.c=b.c);!b.c?(c.c=RD(Hvb(b.e),511)):(b.c.e=b.e)}--a.d} +function XPb(a){var b,c,d,e,f,g,h,i,j,k;c=a.o;b=a.p;g=lve;e=qwe;h=lve;f=qwe;for(j=0;j<c;++j){for(k=0;k<b;++k){if(PPb(a,j,k)){g=$wnd.Math.min(g,j);e=$wnd.Math.max(e,j);h=$wnd.Math.min(h,k);f=$wnd.Math.max(f,k)}}}i=e-g+1;d=f-h+1;return new $td(sgb(g),sgb(h),sgb(i),sgb(d))} +function FZb(a,b){var c,d,e,f;f=new Jkb(a,0);c=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),148));while(f.b<f.d.gc()){d=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),148));e=new fZb(d.c,c.d,b);sFb(f.b>0);f.a.Xb(f.c=--f.b);Ikb(f,e);sFb(f.b<f.d.gc());f.d.Xb(f.c=f.b++);e.a=false;c=d}} +function n6b(a){var b,c,d,e,f,g;e=RD(mQb(a,(Ywc(),Xvc)),12);for(g=new Anb(a.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(d=new Anb(f.g);d.a<d.c.c.length;){b=RD(ynb(d),18);Z0b(b,e);return f}for(c=new Anb(f.e);c.a<c.c.c.length;){b=RD(ynb(c),18);Y0b(b,e);return f}}return null} +function Xec(a,b,c){var d,e,f,g,h,i;i=RD($5b(a.a,b),17).a;c?c6b(a.a,sgb(i+1),b):c6b(a.a,sgb(i-1),b);g=new Iub;for(e=new is(Mr((c?a3b(b):Z2b(b)).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);c?(f=d.d.i):(f=d.c.i);dE($5b(a.a,f))===dE($5b(a.a,b))&&(h=g.a.zc(f,g),h==null)}return g} +function yA(a,b,c){var d,e;d=Hdb(c.q.getTime());if(Ddb(d,0)<0){e=Awe-Ydb(Mdb(Odb(d),Awe));e==Awe&&(e=0)}else{e=Ydb(Mdb(d,Awe))}if(b==1){e=$wnd.Math.min((e+50)/100|0,9);Thb(a,48+e&Bwe)}else if(b==2){e=$wnd.Math.min((e+5)/10|0,99);UA(a,e,2)}else{UA(a,e,3);b>3&&UA(a,0,b-3)}} +function eXb(a){var b,c,d,e;if(dE(mQb(a,(yCc(),IAc)))===dE((Fnd(),Cnd))){return !a.e&&dE(mQb(a,gAc))!==dE((xvc(),uvc))}d=RD(mQb(a,hAc),298);e=Heb(TD(mQb(a,nAc)))||dE(mQb(a,oAc))===dE((stc(),ptc));b=RD(mQb(a,fAc),17).a;c=a.a.c.length;return !e&&d!=(xvc(),uvc)&&(b==0||b>c)} +function Rnc(a){var b,c;c=0;for(;c<a.c.length;c++){if(snc((tFb(c,a.c.length),RD(a.c[c],113)))>0){break}}if(c>0&&c<a.c.length-1){return c}b=0;for(;b<a.c.length;b++){if(snc((tFb(b,a.c.length),RD(a.c[b],113)))>0){break}}if(b>0&&c<a.c.length-1){return b}return a.c.length/2|0} +function Mzd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=6&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+Qzd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?Czd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,6,d));d=Bzd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,6,b,b))} +function pzd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+qzd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?jzd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,12,d));d=izd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} +function NCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=9&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+OCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?LCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,9,d));d=KCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,9,b,b))} +function tWd(b){var c,d,e,f,g;e=WVd(b);g=b.j;if(g==null&&!!e){return b.Jk()?null:e.ik()}else if(ZD(e,156)){d=e.jk();if(d){f=d.wi();if(f!=b.i){c=RD(e,156);if(c.nk()){try{b.g=f.ti(c,g)}catch(a){a=zdb(a);if(ZD(a,82)){b.g=null}else throw Adb(a)}}b.i=f}}return b.g}return null} +function nRb(a){var b;b=new bnb;Rmb(b,new TFb(new rjd(a.c,a.d),new rjd(a.c+a.b,a.d)));Rmb(b,new TFb(new rjd(a.c,a.d),new rjd(a.c,a.d+a.a)));Rmb(b,new TFb(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c+a.b,a.d)));Rmb(b,new TFb(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c,a.d+a.a)));return b} +function ic(b){var c,d,e;if(b==null){return vve}try{return jeb(b)}catch(a){a=zdb(a);if(ZD(a,103)){c=a;e=nfb(rb(b))+'@'+(d=(gib(),jFb(b))>>>0,d.toString(16));lBb(pBb(),(SAb(),'Exception during lenientFormat for '+e),c);return '<'+e+' threw '+nfb(c.Rm)+'>'}else throw Adb(a)}} +function mTb(a,b,c){var d,e,f;for(f=b.a.ec().Kc();f.Ob();){e=RD(f.Pb(),74);d=RD(Wjb(a.b,e),272);!d&&(vCd(JGd(e))==vCd(LGd(e))?lTb(a,e,c):JGd(e)==vCd(LGd(e))?Wjb(a.c,e)==null&&Wjb(a.b,LGd(e))!=null&&oTb(a,e,c,false):Wjb(a.d,e)==null&&Wjb(a.b,JGd(e))!=null&&oTb(a,e,c,true))}} +function Pfc(a,b){var c,d,e,f,g,h,i;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),10);h=new R3b;P3b(h,d);Q3b(h,(qpd(),Xod));pQb(h,(Ywc(),Hwc),(Geb(),true));for(g=b.Kc();g.Ob();){f=RD(g.Pb(),10);i=new R3b;P3b(i,f);Q3b(i,ppd);pQb(i,Hwc,true);c=new a1b;pQb(c,Hwc,true);Y0b(c,h);Z0b(c,i)}}} +function Pqc(a,b,c,d){var e,f,g,h;e=Nqc(a,b,c);f=Nqc(a,c,b);g=RD(Wjb(a.c,b),118);h=RD(Wjb(a.c,c),118);if(e<f){new bTc((fTc(),eTc),g,h,f-e)}else if(f<e){new bTc((fTc(),eTc),h,g,e-f)}else if(e!=0||!(!b.i||!c.i)&&d[b.i.c][c.i.c]){new bTc((fTc(),eTc),g,h,0);new bTc(eTc,h,g,0)}} +function rsc(a,b){var c,d,e,f,g,h,i;e=0;for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);e+=f.o.b+f.d.a+f.d.d+a.e;for(d=new is(Mr(Z2b(f).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(c.c.i.k==(r3b(),q3b)){i=c.c.i;h=RD(mQb(i,(Ywc(),Awc)),10);e+=h.o.b+h.d.a+h.d.d}}}return e} +function sad(){sad=geb;oad=new tad('CANDIDATE_POSITION_LAST_PLACED_RIGHT',0);nad=new tad('CANDIDATE_POSITION_LAST_PLACED_BELOW',1);qad=new tad('CANDIDATE_POSITION_WHOLE_DRAWING_RIGHT',2);pad=new tad('CANDIDATE_POSITION_WHOLE_DRAWING_BELOW',3);rad=new tad('WHOLE_DRAWING',4)} +function vEd(a,b){if(ZD(b,207)){return IDd(a,RD(b,27))}else if(ZD(b,193)){return JDd(a,RD(b,123))}else if(ZD(b,366)){return HDd(a,RD(b,135))}else if(ZD(b,326)){return GDd(a,RD(b,74))}else if(b){return null}else{throw Adb(new agb(wIe+Fe(new mob(cD(WC(jJ,1),rve,1,5,[b])))))}} +function Glc(a){var b,c,d,e,f,g,h;f=new Yub;for(e=new Anb(a.d.a);e.a<e.c.c.length;){d=RD(ynb(e),125);d.b.a.c.length==0&&(Pub(f,d,f.c.b,f.c),true)}if(f.b>1){b=eJb((c=new gJb,++a.b,c),a.d);for(h=Sub(f,0);h.b!=h.d.c;){g=RD(evb(h),125);rIb(uIb(tIb(vIb(sIb(new wIb,1),0),b),g))}}} +function isc(a,b,c){var d,e,f,g,h;c.Ug('Breaking Point Removing',1);a.a=RD(mQb(b,(yCc(),yAc)),223);for(f=new Anb(b.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(bv(e.a));h.a<h.c.c.length;){g=RD(ynb(h),10);if(Krc(g)){d=RD(mQb(g,(Ywc(),Wvc)),313);!d.d&&jsc(a,d)}}}c.Vg()} +function yCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=11&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+zCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?sCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=Ivd(b,a,10,d));d=rCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,11,b,b))} +function C0b(a){var b,c,d,e;for(d=new vkb((new mkb(a.b)).a);d.b;){c=tkb(d);e=RD(c.ld(),12);b=RD(c.md(),10);pQb(b,(Ywc(),Awc),e);pQb(e,Iwc,b);pQb(e,nwc,(Geb(),true));Q3b(e,RD(mQb(b,hwc),64));mQb(b,hwc);pQb(e.i,(yCc(),BBc),(Bod(),yod));RD(mQb(Y2b(e.i),kwc),21).Fc((ovc(),kvc))}} +function X7b(a,b,c){var d,e,f,g,h,i;f=0;g=0;if(a.c){for(i=new Anb(a.d.i.j);i.a<i.c.c.length;){h=RD(ynb(i),12);f+=h.e.c.length}}else{f=1}if(a.d){for(i=new Anb(a.c.i.j);i.a<i.c.c.length;){h=RD(ynb(i),12);g+=h.g.c.length}}else{g=1}e=eE(Lgb(g-f));d=(c+b)/2+(c-b)*(0.4*e);return d} +function Dnc(a){Bnc();var b,c;if(a.Hc((qpd(),opd))){throw Adb(new agb('Port sides must not contain UNDEFINED'))}switch(a.gc()){case 1:return xnc;case 2:b=a.Hc(Xod)&&a.Hc(ppd);c=a.Hc(Yod)&&a.Hc(npd);return b||c?Anc:znc;case 3:return ync;case 4:return wnc;default:return null;}} +function Did(a,b,c){tid();if(xid(a,b)&&xid(a,c)){return false}return Fid(new rjd(a.c,a.d),new rjd(a.c+a.b,a.d),b,c)||Fid(new rjd(a.c+a.b,a.d),new rjd(a.c+a.b,a.d+a.a),b,c)||Fid(new rjd(a.c+a.b,a.d+a.a),new rjd(a.c,a.d+a.a),b,c)||Fid(new rjd(a.c,a.d+a.a),new rjd(a.c,a.d),b,c)} +function Xee(a,b){var c,d,e,f;if(!a.dc()){for(c=0,d=a.gc();c<d;++c){f=WD(a.Xb(c));if(f==null?b==null:lhb(f.substr(0,3),'!##')?b!=null&&(e=b.length,!lhb(f.substr(f.length-e,e),b)||f.length!=b.length+3)&&!lhb(dLe,b):lhb(f,eLe)&&!lhb(dLe,b)||lhb(f,b)){return true}}}return false} +function $6b(a,b,c,d){var e,f,g,h,i,j;g=a.j.c.length;i=$C(NN,Mye,314,g,0,1);for(h=0;h<g;h++){f=RD(Vmb(a.j,h),12);f.p=h;i[h]=U6b(c7b(f),c,d)}W6b(a,i,c,b,d);j=new Tsb;for(e=0;e<i.length;e++){!!i[e]&&Zjb(j,RD(Vmb(a.j,e),12),i[e])}if(j.f.c+j.i.c!=0){pQb(a,(Ywc(),cwc),j);a7b(a,i)}} +function Yfc(a,b){var c,d,e,f,g,h;b.Ug('Partition postprocessing',1);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);h=new Anb(e.j);while(h.a<h.c.c.length){g=RD(ynb(h),12);Heb(TD(mQb(g,(Ywc(),Hwc))))&&znb(h)}}}b.Vg()} +function pkc(a,b,c){var d,e,f;for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);f=Zjc(d);if(f){if(f.k==(r3b(),m3b)){switch(RD(mQb(f,(Ywc(),hwc)),64).g){case 4:f.n.a=b.a;break;case 2:f.n.a=c.a-(f.o.a+f.d.c);break;case 1:f.n.b=b.b;break;case 3:f.n.b=c.b-(f.o.b+f.d.a);}}}}} +function eZc(a,b,c){var d,e,f;c.Ug('Processor determine the height for each level',1);a.a=b.b.b==0?1:b.b.b;e=null;d=Sub(b.b,0);while(!e&&d.b!=d.d.c){f=RD(evb(d),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(e=f)}!!e&&fZc(a,dv(cD(WC(Z$,1),NEe,39,0,[e])),c,RD(mQb(b,(h_c(),H$c)),88));c.Vg()} +function N8c(a){var b,c,d,e,f,g;d=(bvd(),f=new ACd,f);zxd(d,a);for(c=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));c.e!=c.i.gc();){b=RD(bMd(c),27);g=(e=new ACd,e);yCd(g,d);zyd(g,b.g,b.f);jyd(g,b.k);Byd(g,b.i,b.j);WGd((!d.a&&(d.a=new C5d(J4,d,10,11)),d.a),g);zxd(g,b)}return d} +function ord(a,b,c){var d,e,f,g,h;e=RD(Gxd(b,(hkd(),fkd)),17);!e&&(e=sgb(0));f=RD(Gxd(c,fkd),17);!f&&(f=sgb(0));if(e.a>f.a){return -1}else if(e.a<f.a){return 1}else{if(a.a){d=Qfb(b.j,c.j);if(d!=0){return d}d=Qfb(b.i,c.i);if(d!=0){return d}}g=b.g*b.f;h=c.g*c.f;return Qfb(g,h)}} +function _Nd(a,b){var c,d,e,f,g,h,i,j,k,l;++a.e;i=a.d==null?0:a.d.length;if(b>i){k=a.d;a.d=$C(D6,KJe,66,2*i+4,0,1);for(f=0;f<i;++f){j=k[f];if(j){d=j.g;l=j.i;for(h=0;h<l;++h){e=RD(d[h],136);g=bOd(a,e.Bi());c=a.d[g];!c&&(c=a.d[g]=a.dk());c.Fc(e)}}}return true}else{return false}} +function Ofe(a,b,c){var d,e,f,g,h,i;e=c;f=e.Lk();if(qke(a.e,f)){if(f.Si()){d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw Adb(new agb(LIe))}}}}else{i=pke(a.e.Dh(),f);d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(i.am(h.Lk())){throw Adb(new agb(gLe))}}}VGd(a,b,c)} +function R_b(a,b){var c,d,e,f,g,h;c=RD(mQb(b,(Ywc(),ewc)),21);g=RD(Qc((z$b(),y$b),c),21);h=RD(Qc(O_b,c),21);for(f=g.Kc();f.Ob();){d=RD(f.Pb(),21);if(!RD(Qc(a.b,d),15).dc()){return false}}for(e=h.Kc();e.Ob();){d=RD(e.Pb(),21);if(!RD(Qc(a.b,d),15).dc()){return false}}return true} +function dad(a,b){var c,d,e,f,g,h,i,j,k;if(a.a.c.length==1){return P9c(RD(Vmb(a.a,0),172),b)}g=cad(a);i=0;j=a.d;f=g;k=a.d;h=(j-f)/2+f;while(f+1<j){i=0;for(d=new Anb(a.a);d.a<d.c.c.length;){c=RD(ynb(d),172);i+=(e=S9c(c,h,false),e.a)}if(i<b){k=h;j=h}else{f=h}h=(j-f)/2+f}return k} +function zxd(a,b){var c,d,e,f,g;if(!b){return a}if(ZD(b,342)){e=RD(b,342);f=(!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0)),a.o);for(d=e.gh().c.Kc();d.e!=d.i.gc();){c=RD(d.Yj(),44);g=c.md();fOd(f,RD(c.ld(),149),g)}}else{!a.o&&(a.o=new DVd((pvd(),mvd),X4,a,0));gOd(a.o,b.nf())}return a} +function vD(a){var b,c,d,e,f;if(isNaN(a)){return MD(),LD}if(a<-9223372036854775808){return MD(),JD}if(a>=9223372036854775807){return MD(),ID}e=false;if(a<0){e=true;a=-a}d=0;if(a>=hxe){d=eE(a/hxe);a-=d*hxe}c=0;if(a>=gxe){c=eE(a/gxe);a-=c*gxe}b=eE(a);f=hD(b,c,d);e&&nD(f);return f} +function KCb(a){var b,c,d,e,f;f=new bnb;Umb(a.b,new SEb(f));a.b.c.length=0;if(f.c.length!=0){b=(tFb(0,f.c.length),RD(f.c[0],82));for(c=1,d=f.c.length;c<d;++c){e=(tFb(c,f.c.length),RD(f.c[c],82));e!=b&&fz(b,e)}if(ZD(b,63)){throw Adb(RD(b,63))}if(ZD(b,295)){throw Adb(RD(b,295))}}} +function iNb(a,b){var c,d,e,f;c=!b||!a.u.Hc((Pod(),Lod));f=0;for(e=new Anb(a.e.Xf());e.a<e.c.c.length;){d=RD(ynb(e),852);if(d.ag()==(qpd(),opd)){throw Adb(new agb('Label and node size calculator can only be used with ports that have port sides assigned.'))}d.Qf(f++);hNb(a,d,c)}} +function IGb(a){var b,c,d,e,f;for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.j=null;for(f=b.a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),60);hjd(d.b);(!b.j||d.d.c<b.j.d.c)&&(b.j=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),60);d.b.a=d.d.c-b.j.d.c;d.b.b=d.d.d-b.j.d.d}}return a} +function uYb(a){var b,c,d,e,f;for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),194);b.f=null;for(f=b.a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),86);hjd(d.e);(!b.f||d.g.c<b.f.g.c)&&(b.f=d)}for(e=b.a.a.ec().Kc();e.Ob();){d=RD(e.Pb(),86);d.e.a=d.g.c-b.f.g.c;d.e.b=d.g.d-b.f.g.d}}return a} +function vPb(a){var b,c,d;c=RD(a.a,17).a;d=RD(a.b,17).a;b=$wnd.Math.max($wnd.Math.abs(c),$wnd.Math.abs(d));if(c<b&&d==-b){return new Ptd(sgb(c+1),sgb(d))}if(c==b&&d<b){return new Ptd(sgb(c),sgb(d+1))}if(c>=-b&&d==b){return new Ptd(sgb(c-1),sgb(d))}return new Ptd(sgb(c),sgb(d-1))} +function lcc(){hcc();return cD(WC(YS,1),jwe,81,0,[nbc,kbc,obc,Ebc,Xbc,Ibc,bcc,Nbc,Vbc,zbc,Rbc,Mbc,Wbc,vbc,dcc,ebc,Qbc,Zbc,Fbc,Ybc,fcc,Tbc,fbc,Ubc,gcc,_bc,ecc,Gbc,sbc,Hbc,Dbc,ccc,ibc,qbc,Kbc,hbc,Lbc,Bbc,wbc,Obc,ybc,lbc,jbc,Cbc,xbc,Pbc,acc,gbc,Sbc,Abc,Jbc,tbc,rbc,$bc,pbc,ubc,mbc])} +function Cmc(a,b,c){a.d=0;a.b=0;b.k==(r3b(),q3b)&&c.k==q3b&&RD(mQb(b,(Ywc(),Awc)),10)==RD(mQb(c,Awc),10)&&(Gmc(b).j==(qpd(),Yod)?Dmc(a,b,c):Dmc(a,c,b));b.k==q3b&&c.k==o3b?Gmc(b).j==(qpd(),Yod)?(a.d=1):(a.b=1):c.k==q3b&&b.k==o3b&&(Gmc(c).j==(qpd(),Yod)?(a.b=1):(a.d=1));Imc(a,b,c)} +function EFd(a){var b,c,d,e,f,g,h,i,j,k,l;l=HFd(a);b=a.a;i=b!=null;i&&sDd(l,'category',a.a);e=cve(new Xkb(a.d));g=!e;if(g){j=new MB;sC(l,'knownOptions',j);c=new MFd(j);xgb(new Xkb(a.d),c)}f=cve(a.g);h=!f;if(h){k=new MB;sC(l,'supportedFeatures',k);d=new OFd(k);xgb(a.g,d)}return l} +function Ly(a){var b,c,d,e,f,g,h,i,j;d=false;b=336;c=0;f=new hq(a.length);for(h=a,i=0,j=h.length;i<j;++i){g=h[i];d=d|(MCb(g),false);e=(LCb(g),g.a);Rmb(f.a,Qb(e));b&=e.yd();c=az(c,e.zd())}return RD(RD(JCb(new SDb(null,ek(new Swb((tm(),zm(f.a)),16),new My,b,c)),new Oy(a)),687),848)} +function WZb(a,b){var c;if(!!a.d&&(b.c!=a.e.c||sZb(a.e.b,b.b))){Rmb(a.f,a.d);a.a=a.d.c+a.d.b;a.d=null;a.e=null}pZb(b.b)?(a.c=b):(a.b=b);if(b.b==(nZb(),jZb)&&!b.a||b.b==kZb&&b.a||b.b==lZb&&b.a||b.b==mZb&&!b.a){if(!!a.c&&!!a.b){c=new Uid(a.a,a.c.d,b.c-a.a,a.b.d-a.c.d);a.d=c;a.e=b}}} +function Wed(a){var b;Oed.call(this);this.i=new ifd;this.g=a;this.f=RD(a.e&&a.e(),9).length;if(this.f==0){throw Adb(new agb('There must be at least one phase in the phase enumeration.'))}this.c=(b=RD(mfb(this.g),9),new Fsb(b,RD(WEb(b,b.length),9),0));this.a=new ufd;this.b=new Tsb} +function eCd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=7&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+gCd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?cCd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=RD(b,54).Rh(a,1,H4,d));d=bCd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,7,b,b))} +function lVd(a,b){var c,d;if(b!=a.Cb||a.Db>>16!=3&&!!b){if(Oje(a,b))throw Adb(new agb(UHe+oVd(a)));d=null;!!a.Cb&&(d=(c=a.Db>>16,c>=0?iVd(a,d):a.Cb.Th(a,-1-c,null,d)));!!b&&(d=RD(b,54).Rh(a,0,p7,d));d=hVd(a,b,d);!!d&&d.oj()}else (a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,3,b,b))} +function Mjb(a,b){Ljb();var c,d,e,f,g,h,i,j,k;if(b.d>a.d){h=a;a=b;b=h}if(b.d<63){return Qjb(a,b)}g=(a.d&-2)<<4;j=$ib(a,g);k=$ib(b,g);d=Gjb(a,Zib(j,g));e=Gjb(b,Zib(k,g));i=Mjb(j,k);c=Mjb(d,e);f=Mjb(Gjb(j,d),Gjb(e,k));f=Bjb(Bjb(f,i),c);f=Zib(f,g);i=Zib(i,g<<1);return Bjb(Bjb(i,f),c)} +function _Cc(){_Cc=geb;ZCc=new bDc(lEe,0);WCc=new bDc('LONGEST_PATH',1);XCc=new bDc('LONGEST_PATH_SOURCE',2);TCc=new bDc('COFFMAN_GRAHAM',3);VCc=new bDc(BBe,4);$Cc=new bDc('STRETCH_WIDTH',5);YCc=new bDc('MIN_WIDTH',6);SCc=new bDc('BF_MODEL_ORDER',7);UCc=new bDc('DF_MODEL_ORDER',8)} +function AKc(a,b,c){var d,e,f,g,h;g=aMc(a,c);h=$C(jR,WAe,10,b.length,0,1);d=0;for(f=g.Kc();f.Ob();){e=RD(f.Pb(),12);Heb(TD(mQb(e,(Ywc(),nwc))))&&(h[d++]=RD(mQb(e,Iwc),10))}if(d<b.length){throw Adb(new dgb('Expected '+b.length+' hierarchical ports, but found only '+d+'.'))}return h} +function sBd(a,b){var c,d,e,f,g,h;if(!a.tb){f=(!a.rb&&(a.rb=new J5d(a,i7,a)),a.rb);h=new Usb(f.i);for(e=new dMd(f);e.e!=e.i.gc();){d=RD(bMd(e),142);g=d.xe();c=RD(g==null?rtb(h.f,null,d):Ltb(h.i,g,d),142);!!c&&(g==null?rtb(h.f,null,c):Ltb(h.i,g,c))}a.tb=h}return RD(Xjb(a.tb,b),142)} +function wYd(a,b){var c,d,e,f,g;(a.i==null&&rYd(a),a.i).length;if(!a.p){g=new Usb((3*a.g.i/2|0)+1);for(e=new yMd(a.g);e.e!=e.i.gc();){d=RD(xMd(e),179);f=d.xe();c=RD(f==null?rtb(g.f,null,d):Ltb(g.i,f,d),179);!!c&&(f==null?rtb(g.f,null,c):Ltb(g.i,f,c))}a.p=g}return RD(Xjb(a.p,b),179)} +function fFb(a,b,c,d,e){var f,g,h,i,j;dFb(d+lz(c,c.ie()),e);eFb(b,hFb(c));f=c.f;!!f&&fFb(a,b,f,'Caused by: ',false);for(h=(c.k==null&&(c.k=$C(rJ,Nve,82,0,0,1)),c.k),i=0,j=h.length;i<j;++i){g=h[i];fFb(a,b,g,'Suppressed: ',false)}console.groupEnd!=null&&console.groupEnd.call(console)} +function DKc(a,b,c,d){var e,f,g,h,i;i=b.e;h=i.length;g=b.q.ug(i,c?0:h-1,c);e=i[c?0:h-1];g=g|CKc(a,e,c,d);for(f=c?1:h-2;c?f<h:f>=0;f+=c?1:-1){g=g|b.c.lg(i,f,c,d&&!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,(Ywc(),Owc)))));g=g|b.q.ug(i,f,c);g=g|CKc(a,i[f],c,d)}Ysb(a.c,b);return g} +function F6b(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(k=u2b(a.j),l=0,m=k.length;l<m;++l){j=k[l];if(c==(BEc(),yEc)||c==AEc){i=s2b(j.g);for(e=i,f=0,g=e.length;f<g;++f){d=e[f];B6b(b,d)&&X0b(d,true)}}if(c==zEc||c==AEc){h=s2b(j.e);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];A6b(b,d)&&X0b(d,true)}}}} +function uqc(a){var b,c;b=null;c=null;switch(pqc(a).g){case 1:b=(qpd(),Xod);c=ppd;break;case 2:b=(qpd(),npd);c=Yod;break;case 3:b=(qpd(),ppd);c=Xod;break;case 4:b=(qpd(),Yod);c=npd;}Smc(a,RD(Lvb(KDb(RD(Qc(a.k,b),15).Oc(),lqc)),113));Tmc(a,RD(Lvb(JDb(RD(Qc(a.k,c),15).Oc(),lqc)),113))} +function r9b(a){var b,c,d,e,f,g;e=RD(Vmb(a.j,0),12);if(e.e.c.length+e.g.c.length==0){a.n.a=0}else{g=0;for(d=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(e),new _3b(e)])));gs(d);){c=RD(hs(d),12);g+=c.i.n.a+c.n.a+c.a.a}b=RD(mQb(a,(yCc(),zBc)),8);f=!b?0:b.a;a.n.a=g/(e.e.c.length+e.g.c.length)-f}} +function Qdd(a,b){var c,d,e;for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),225);RQb(RD(c.b,68),ojd(ajd(RD(b.b,68).c),RD(b.b,68).a));e=oRb(RD(b.b,68).b,RD(c.b,68).b);e>1&&(a.a=true);QQb(RD(c.b,68),$id(ajd(RD(b.b,68).c),ijd(ojd(ajd(RD(c.b,68).a),RD(b.b,68).a),e)));Odd(a,b);Qdd(a,c)}} +function tYb(a){var b,c,d,e,f,g,h;for(f=new Anb(a.a.a);f.a<f.c.c.length;){d=RD(ynb(f),194);d.e=0;d.d.a.$b()}for(e=new Anb(a.a.a);e.a<e.c.c.length;){d=RD(ynb(e),194);for(c=d.a.a.ec().Kc();c.Ob();){b=RD(c.Pb(),86);for(h=b.f.Kc();h.Ob();){g=RD(h.Pb(),86);if(g.d!=d){Ysb(d.d,g);++g.d.e}}}}} +function Hfc(a){var b,c,d,e,f,g,h,i;i=a.j.c.length;c=0;b=i;e=2*i;for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);switch(g.j.g){case 2:case 4:g.p=-1;break;case 1:case 3:d=g.e.c.length;f=g.g.c.length;d>0&&f>0?(g.p=b++):d>0?(g.p=c++):f>0?(g.p=e++):(g.p=c++);}}yob();_mb(a.j,new Lfc)} +function zic(a){var b,c;c=null;b=RD(Vmb(a.g,0),18);do{c=b.d.i;if(nQb(c,(Ywc(),wwc))){return RD(mQb(c,wwc),12).i}if(c.k!=(r3b(),p3b)&&gs(new is(Mr(a3b(c).a.Kc(),new ir)))){b=RD(hs(new is(Mr(a3b(c).a.Kc(),new ir))),18)}else if(c.k!=p3b){return null}}while(!!c&&c.k!=(r3b(),p3b));return c} +function sqc(a,b){var c,d,e,f,g,h,i,j,k;h=b.j;g=b.g;i=RD(Vmb(h,h.c.length-1),113);k=(tFb(0,h.c.length),RD(h.c[0],113));j=oqc(a,g,i,k);for(f=1;f<h.c.length;f++){c=(tFb(f-1,h.c.length),RD(h.c[f-1],113));e=(tFb(f,h.c.length),RD(h.c[f],113));d=oqc(a,g,c,e);if(d>j){i=c;k=e;j=d}}b.a=k;b.c=i} +function fMc(a,b,c){var d,e,f,g,h,i,j;j=new yAb(new TMc(a));for(g=cD(WC(xR,1),XAe,12,0,[b,c]),h=0,i=g.length;h<i;++h){f=g[h];j.a.zc(f,(Geb(),Eeb))==null;for(e=new l4b(f.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);d.c==d.d||rAb(j,f==d.c?d.d:d.c)}}return Qb(j),new dnb(j)} +function rIb(a){if(!a.a.d||!a.a.e){throw Adb(new dgb((lfb(zN),zN.k+' must have a source and target '+(lfb(DN),DN.k)+' specified.')))}if(a.a.d==a.a.e){throw Adb(new dgb('Network simplex does not support self-loops: '+a.a+' '+a.a.d+' '+a.a.e))}EIb(a.a.d.g,a.a);EIb(a.a.e.b,a.a);return a.a} +function x6b(a,b){var c,d,e,f,g,h,i;b.Ug('Constraints Postprocessor',1);g=0;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i=0;h=false;for(d=new Anb(e.a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(c.k==(r3b(),p3b)){h=true;pQb(c,(yCc(),VAc),sgb(g));pQb(c,mAc,sgb(i));++i}}h&&++g}b.Vg()} +function OTc(a,b,c){var d,e,f,g,h,i;d=0;if(b.b!=0&&c.b!=0){f=Sub(b,0);g=Sub(c,0);h=Kfb(UD(evb(f)));i=Kfb(UD(evb(g)));e=true;do{if(h>i-a.b&&h<i+a.b){return -1}else h>i-a.a&&h<i+a.a&&++d;h<=i&&f.b!=f.d.c?(h=Kfb(UD(evb(f)))):i<=h&&g.b!=g.d.c?(i=Kfb(UD(evb(g)))):(e=false)}while(e)}return d} +function G2c(a,b){var c,d;Sed(a.a);Ved(a.a,(x2c(),v2c),v2c);Ved(a.a,w2c,w2c);d=new ufd;pfd(d,w2c,(g3c(),e3c));dE(Gxd(b,($4c(),I4c)))!==dE((g4c(),d4c))&&pfd(d,w2c,b3c);Heb(TD(Gxd(b,T4c)))&&pfd(d,w2c,f3c);pfd(d,w2c,c3c);Heb(TD(Gxd(b,V4c)))&&nfd(d,w2c,d3c);Ped(a.a,d);c=Qed(a.a,b);return c} +function W6b(a,b,c,d,e){var f,g,h,i;i=(f=RD(mfb(E3),9),new Fsb(f,RD(WEb(f,f.length),9),0));for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);if(b[g.p]){X6b(g,b[g.p],d);zsb(i,g.j)}}if(e){_6b(a,b,(qpd(),Xod),2*c,d);_6b(a,b,ppd,2*c,d)}else{_6b(a,b,(qpd(),Yod),2*c,d);_6b(a,b,npd,2*c,d)}} +function eec(a){var b,c;for(c=new is(Mr(a3b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(b.d.i.k!=(r3b(),n3b)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to LAST, but has at least one outgoing edge that "+' does not go to a LAST_SEPARATE node. That must not happen.'))}}} +function mHc(a,b,c){var d,e,f,g,h;c.Ug('Longest path layering',1);a.a=b;h=a.a.a;a.b=$C(kE,Pwe,28,h.c.length,15,1);d=0;for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),10);oHc(a,e)}h.c.length=0;a.a=null;a.b=null;c.Vg()} +function JUc(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=0;for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);h=0;for(f=new is(Mr(Z2b(j).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);l=K3b(e.c).b;m=K3b(e.d).b;h=$wnd.Math.max(h,$wnd.Math.abs(m-l))}i=$wnd.Math.max(i,h)}g=d*$wnd.Math.min(1,b/c)*i;return g} +function J_c(a,b){var c,d,e,f,g;g=RD(mQb(b,(h_c(),Y$c)),433);for(f=Sub(b.b,0);f.b!=f.d.c;){e=RD(evb(f),39);if(a.b[e.g]==0){switch(g.g){case 0:K_c(a,e);break;case 1:I_c(a,e);}a.b[e.g]=2}}for(d=Sub(a.a,0);d.b!=d.d.c;){c=RD(evb(d),65);ze(c.b.d,c,true);ze(c.c.b,c,true)}pQb(b,(q$c(),k$c),a.a)} +function pse(a){var b;b=new Rhb;(a&256)!=0&&(b.a+='F',b);(a&128)!=0&&(b.a+='H',b);(a&512)!=0&&(b.a+='X',b);(a&2)!=0&&(b.a+='i',b);(a&8)!=0&&(b.a+='m',b);(a&4)!=0&&(b.a+='s',b);(a&32)!=0&&(b.a+='u',b);(a&64)!=0&&(b.a+='w',b);(a&16)!=0&&(b.a+='x',b);(a&gwe)!=0&&(b.a+=',',b);return shb(b.a)} +function W8c(a,b){var c,d,e,f,g,h;b.Ug(bGe,1);e=RD(Gxd(a,(X7c(),N7c)),107);f=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);g=yad(f);h=$wnd.Math.max(g.a,Kfb(UD(Gxd(a,(X6c(),U6c))))-(e.b+e.c));d=$wnd.Math.max(g.b,Kfb(UD(Gxd(a,R6c)))-(e.d+e.a));c=d-g.b;Ixd(a,M6c,c);Ixd(a,O6c,h);Ixd(a,N6c,d+c);b.Vg()} +function pke(a,b){nke();var c,d,e,f;if(!b){return mke}else if(b==(nme(),kme)||(b==Ule||b==Sle||b==Tle)&&a!=Rle){return new wke(a,b)}else{d=RD(b,692);c=d.$k();if(!c){Afe(Qee((lke(),jke),b));c=d.$k()}f=(!c.i&&(c.i=new Tsb),c.i);e=RD(Wd(qtb(f.f,a)),2041);!e&&Zjb(f,a,e=new wke(a,b));return e}} +function jHb(a,b){var c,d;d=rAb(a.b,b.b);if(!d){throw Adb(new dgb('Invalid hitboxes for scanline constraint calculation.'))}(dHb(b.b,RD(tAb(a.b,b.b),60))||dHb(b.b,RD(sAb(a.b,b.b),60)))&&(gib(),String.fromCharCode(10));a.a[b.b.f]=RD(vAb(a.b,b.b),60);c=RD(uAb(a.b,b.b),60);!!c&&(a.a[c.f]=b.b)} +function lTb(a,b,c){var d,e,f,g,h,i,j,k,l;f=IGd(b,false,false);j=ssd(f);l=Kfb(UD(Gxd(b,(tSb(),mSb))));e=jTb(j,l+a.a);k=new ORb(e);kQb(k,b);Zjb(a.b,b,k);ZEb(c.c,k);i=(!b.n&&(b.n=new C5d(I4,b,1,7)),b.n);for(h=new dMd(i);h.e!=h.i.gc();){g=RD(bMd(h),135);d=nTb(a,g,true,0,0);ZEb(c.c,d)}return k} +function Zec(a,b){var c,d,e,f,g,h,i;e=new bnb;for(c=0;c<=a.j;c++){d=new R4b(b);d.p=a.j-c;ZEb(e.c,d)}for(h=new Anb(a.p);h.a<h.c.c.length;){g=RD(ynb(h),10);g3b(g,RD(Vmb(e,a.j-a.g[g.p]),30))}f=new Anb(e);while(f.a<f.c.c.length){i=RD(ynb(f),30);i.a.c.length==0&&znb(f)}b.b.c.length=0;Tmb(b.b,e)} +function xfc(a,b){var c,d,e,f,g,h,i,j,k;i=RD(mQb(a,(Ywc(),Awc)),12);j=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;k=a.i.n.b;c=s2b(a.e);for(e=c,f=0,g=e.length;f<g;++f){d=e[f];Z0b(d,i);Oub(d.a,new rjd(j,k));if(b){h=RD(mQb(d,(yCc(),RAc)),75);if(!h){h=new Ejd;pQb(d,RAc,h)}Mub(h,new rjd(j,k))}}} +function yfc(a,b){var c,d,e,f,g,h,i,j,k;e=RD(mQb(a,(Ywc(),Awc)),12);j=xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).a;k=a.i.n.b;c=s2b(a.g);for(g=c,h=0,i=g.length;h<i;++h){f=g[h];Y0b(f,e);Nub(f.a,new rjd(j,k));if(b){d=RD(mQb(f,(yCc(),RAc)),75);if(!d){d=new Ejd;pQb(f,RAc,d)}Mub(d,new rjd(j,k))}}} +function Khc(a){var b,c,d,e,f,g,h,i,j;d=a.b;f=d.e;g=Cod(RD(mQb(d,(yCc(),BBc)),101));c=!!f&&RD(mQb(f,(Ywc(),kwc)),21).Hc((ovc(),hvc));if(g||c){return}for(j=(h=(new glb(a.e)).a.vc().Kc(),new llb(h));j.a.Ob();){i=(b=RD(j.a.Pb(),44),RD(b.md(),113));if(i.a){e=i.d;P3b(e,null);i.c=true;a.a=true}}} +function iic(a,b){var c,d,e,f;b.Ug('Semi-Interactive Crossing Minimization Processor',1);c=false;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);f=MDb(PDb(CDb(CDb(new SDb(null,new Swb(d.a,16)),new nic),new pic),new ric),new vic);c=c|f.a!=null}c&&pQb(a,(Ywc(),rwc),(Geb(),true));b.Vg()} +function rKc(a,b){var c,d,e,f,g,h;a.b=new bnb;a.d=RD(mQb(b,(Ywc(),Lwc)),234);a.e=Lwb(a.d);f=new Yub;e=dv(cD(WC(eR,1),OAe,36,0,[b]));g=0;while(g<e.c.length){d=(tFb(g,e.c.length),RD(e.c[g],36));d.p=g++;c=new FJc(d,a.a,a.b);Tmb(e,c.b);Rmb(a.b,c);c.s&&(h=Sub(f,0),cvb(h,c))}a.c=new _sb;return f} +function yMb(a,b){var c,d,e,f,g,h;for(g=RD(RD(Qc(a.r,b),21),87).Kc();g.Ob();){f=RD(g.Pb(),117);c=f.c?QKb(f.c):0;if(c>0){if(f.a){h=f.b.Mf().a;if(c>h){e=(c-h)/2;f.d.b=e;f.d.c=e}}else{f.d.c=a.s+c}}else if(Rod(a.u)){d=wsd(f.b);d.c<0&&(f.d.b=-d.c);d.c+d.b>f.b.Mf().a&&(f.d.c=d.c+d.b-f.b.Mf().a)}}} +function RUc(a,b){var c,d,e,f,g;g=new bnb;c=b;do{f=RD(Wjb(a.b,c),131);f.B=c.c;f.D=c.d;ZEb(g.c,f);c=RD(Wjb(a.k,c),18)}while(c);d=(tFb(0,g.c.length),RD(g.c[0],131));d.j=true;d.A=RD(d.d.a.ec().Kc().Pb(),18).c.i;e=RD(Vmb(g,g.c.length-1),131);e.q=true;e.C=RD(e.d.a.ec().Kc().Pb(),18).d.i;return g} +function pPb(a){var b,c;b=RD(a.a,17).a;c=RD(a.b,17).a;if(b>=0){if(b==c){return new Ptd(sgb(-b-1),sgb(-b-1))}if(b==-c){return new Ptd(sgb(-b),sgb(c+1))}}if($wnd.Math.abs(b)>$wnd.Math.abs(c)){if(b<0){return new Ptd(sgb(-b),sgb(c))}return new Ptd(sgb(-b),sgb(c+1))}return new Ptd(sgb(b+1),sgb(c))} +function H8b(a){var b,c;c=RD(mQb(a,(yCc(),UAc)),171);b=RD(mQb(a,(Ywc(),owc)),311);if(c==(cxc(),$wc)){pQb(a,UAc,bxc);pQb(a,owc,(Gvc(),Fvc))}else if(c==axc){pQb(a,UAc,bxc);pQb(a,owc,(Gvc(),Dvc))}else if(b==(Gvc(),Fvc)){pQb(a,UAc,$wc);pQb(a,owc,Evc)}else if(b==Dvc){pQb(a,UAc,axc);pQb(a,owc,Evc)}} +function dSc(){dSc=geb;bSc=new pSc;ZRc=pfd(new ufd,(sXb(),pXb),(hcc(),Fbc));aSc=nfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);cSc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);$Rc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);_Rc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} +function HUc(){HUc=geb;CUc=pfd(nfd(new ufd,(sXb(),rXb),(hcc(),tbc)),pXb,Fbc);GUc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);DUc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);FUc=pfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);EUc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} +function eSc(a,b,c,d,e){var f,g;if((!W0b(b)&&b.c.i.c==b.d.i.c||!djd(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])),c))&&!W0b(b)){b.c==e?hu(b.a,0,new sjd(c)):Mub(b.a,new sjd(c));if(d&&!Zsb(a.a,c)){g=RD(mQb(b,(yCc(),RAc)),75);if(!g){g=new Ejd;pQb(b,RAc,g)}f=new sjd(c);Pub(g,f,g.c.b,g.c);Ysb(a.a,f)}}} +function ht(a,b){var c,d,e,f;f=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));c=f&a.b.length-1;e=null;for(d=a.b[c];d;e=d,d=d.a){if(d.d==f&&Hb(d.i,b)){!e?(a.b[c]=d.a):(e.a=d.a);Ts(RD(Hvb(d.c),604),RD(Hvb(d.f),604));Ss(RD(Hvb(d.b),227),RD(Hvb(d.e),227));--a.f;++a.e;return true}}return false} +function dec(a){var b,c;for(c=new is(Mr(Z2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(b.c.i.k!=(r3b(),n3b)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to FIRST, but has at least one incoming edge that "+' does not come from a FIRST_SEPARATE node. That must not happen.'))}}} +function Twd(a,b,c){var d,e,f,g,h,i,j;e=ggb(a.Db&254);if(e==0){a.Eb=c}else{if(e==1){h=$C(jJ,rve,1,2,5,1);f=Xwd(a,b);if(f==0){h[0]=c;h[1]=a.Eb}else{h[0]=a.Eb;h[1]=c}}else{h=$C(jJ,rve,1,e+1,5,1);g=SD(a.Eb);for(d=2,i=0,j=0;d<=128;d<<=1){d==b?(h[j++]=c):(a.Db&d)!=0&&(h[j++]=g[i++])}}a.Eb=h}a.Db|=b} +function vQb(a,b,c){var d,e,f,g;this.b=new bnb;e=0;d=0;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),176);c&&iPb(f);Rmb(this.b,f);e+=f.o;d+=f.p}if(this.b.c.length>0){f=RD(Vmb(this.b,0),176);e+=f.o;d+=f.p}e*=2;d*=2;b>1?(e=eE($wnd.Math.ceil(e*b))):(d=eE($wnd.Math.ceil(d/b)));this.a=new gQb(e,d)} +function mkc(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;k=d;if(b.j&&b.o){n=RD(Wjb(a.f,b.A),60);p=n.d.c+n.d.b;--k}else{p=b.a.c+b.a.b}l=e;if(c.q&&c.o){n=RD(Wjb(a.f,c.C),60);j=n.d.c;++l}else{j=c.a.c}q=j-p;i=$wnd.Math.max(2,l-k);h=q/i;o=p+h;for(m=k;m<l;++m){g=RD(f.Xb(m),131);r=g.a.b;g.a.c=o-r/2;o+=h}} +function Wrc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b?new dsc:new fsc;f=false;do{f=false;j=b?hv(a.b):a.b;for(i=j.Kc();i.Ob();){h=RD(i.Pb(),30);m=bv(h.a);b||hv(m);for(l=new Anb(m);l.a<l.c.c.length;){k=RD(ynb(l),10);if(e.Mb(k)){d=k;c=RD(mQb(k,(Ywc(),Wvc)),313);g=b?c.b:c.k;f=Urc(d,g,b,false)}}}}while(f)} +function sMc(a,b,c,d,e,f){var g,h,i,j,k,l;j=c.c.length;f&&(a.c=$C(kE,Pwe,28,b.length,15,1));for(g=e?0:b.length-1;e?g<b.length:g>=0;g+=e?1:-1){h=b[g];i=d==(qpd(),Xod)?e?b3b(h,d):hv(b3b(h,d)):e?hv(b3b(h,d)):b3b(h,d);f&&(a.c[h.p]=i.gc());for(l=i.Kc();l.Ob();){k=RD(l.Pb(),12);a.d[k.p]=j++}Tmb(c,i)}} +function AUc(a,b,c){var d,e,f,g,h,i,j,k;f=Kfb(UD(a.b.Kc().Pb()));j=Kfb(UD(fr(b.b)));d=ijd(ajd(a.a),j-c);e=ijd(ajd(b.a),c-f);k=$id(d,e);ijd(k,1/(j-f));this.a=k;this.b=new bnb;h=true;g=a.b.Kc();g.Pb();while(g.Ob()){i=Kfb(UD(g.Pb()));if(h&&i-c>AEe){this.b.Fc(c);h=false}this.b.Fc(i)}h&&this.b.Fc(c)} +function mJb(a){var b,c,d,e;pJb(a,a.n);if(a.d.c.length>0){Nnb(a.c);while(xJb(a,RD(ynb(new Anb(a.e.a)),125))<a.e.a.c.length){b=rJb(a);e=b.e.e-b.d.e-b.a;b.e.j&&(e=-e);for(d=new Anb(a.e.a);d.a<d.c.c.length;){c=RD(ynb(d),125);c.j&&(c.e+=e)}Nnb(a.c)}Nnb(a.c);uJb(a,RD(ynb(new Anb(a.e.a)),125));iJb(a)}} +function ned(a,b){hed();var c,d;c=ugd(ygd(),b.Pg());if(c){d=c.j;if(ZD(a,207)){return xCd(RD(a,27))?Csb(d,(Yhd(),Vhd))||Csb(d,Whd):Csb(d,(Yhd(),Vhd))}else if(ZD(a,326)){return Csb(d,(Yhd(),Thd))}else if(ZD(a,193)){return Csb(d,(Yhd(),Xhd))}else if(ZD(a,366)){return Csb(d,(Yhd(),Uhd))}}return true} +function Cge(a,b,c){var d,e,f,g,h,i;e=c;f=e.Lk();if(qke(a.e,f)){if(f.Si()){d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(pb(h,e)&&g!=b){throw Adb(new agb(LIe))}}}}else{i=pke(a.e.Dh(),f);d=RD(a.g,124);for(g=0;g<a.i;++g){h=d[g];if(i.am(h.Lk())&&g!=b){throw Adb(new agb(gLe))}}}return RD(eHd(a,b,c),76)} +function hz(d,b){if(b instanceof Object){try{b.__java$exception=d;if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&$doc.documentMode<9){return}var c=d;Object.defineProperties(b,{cause:{get:function(){var a=c.he();return a&&a.fe()}},suppressed:{get:function(){return c.ge()}}})}catch(a){}}} +function tjb(a,b){var c,d,e,f,g;d=b>>5;b&=31;if(d>=a.d){return a.e<0?(Pib(),Jib):(Pib(),Oib)}f=a.d-d;e=$C(kE,Pwe,28,f+1,15,1);ujb(e,f,a.a,d,b);if(a.e<0){for(c=0;c<d&&a.a[c]==0;c++);if(c<d||b>0&&a.a[c]<<32-b!=0){for(c=0;c<f&&e[c]==-1;c++){e[c]=0}c==f&&++f;++e[c]}}g=new cjb(a.e,f,e);Rib(g);return g} +function LSb(a){var b,c,d,e;e=MCd(a);c=new bTb(e);d=new dTb(e);b=new bnb;Tmb(b,(!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));Tmb(b,(!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));return RD(zDb(GDb(CDb(new SDb(null,new Swb(b,16)),c),d),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21)} +function Tdc(a,b){var c;c=RD(mQb(a,(yCc(),xAc)),283);b.Ug('Label side selection ('+c+')',1);switch(c.g){case 0:Udc(a,(Pnd(),Lnd));break;case 1:Udc(a,(Pnd(),Mnd));break;case 2:Sdc(a,(Pnd(),Lnd));break;case 3:Sdc(a,(Pnd(),Mnd));break;case 4:Vdc(a,(Pnd(),Lnd));break;case 5:Vdc(a,(Pnd(),Mnd));}b.Vg()} +function qke(a,b){nke();var c,d,e;if(b.Jk()){return true}else if(b.Ik()==-2){if(b==(Lle(),Jle)||b==Gle||b==Hle||b==Ile){return true}else{e=a.Dh();if(BYd(e,b)>=0){return false}else{c=Eee((lke(),jke),e,b);if(!c){return true}else{d=c.Ik();return (d>1||d==-1)&&yfe(Qee(jke,c))!=3}}}}else{return false}} +function _4b(a,b,c,d){var e,f,g,h,i;h=AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84));i=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));if(vCd(h)==vCd(i)){return null}if(NGd(i,h)){return null}g=kzd(b);if(g==c){return d}else{f=RD(Wjb(a.a,g),10);if(f){e=f.e;if(e){return e}}}return null} +function uHc(a,b,c){var d,e,f,g,h;c.Ug('Longest path to source layering',1);a.a=b;h=a.a.a;a.b=$C(kE,Pwe,28,h.c.length,15,1);d=0;for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d;a.b[d]=-1;++d}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),10);wHc(a,e)}h.c.length=0;a.a=null;a.b=null;c.Vg()} +function BKc(a,b,c){var d,e,f,g,h,i;d=pKc(c,a.length);g=a[d];f=qKc(c,g.length);if(g[f].k!=(r3b(),m3b)){return}i=b.j;for(e=0;e<i.c.length;e++){h=(tFb(e,i.c.length),RD(i.c[e],12));if((c?h.j==(qpd(),Xod):h.j==(qpd(),ppd))&&Heb(TD(mQb(h,(Ywc(),nwc))))){$mb(i,e,RD(mQb(g[f],(Ywc(),Awc)),12));f+=c?1:-1}}} +function n8c(a,b){var c,d,e,f,g,h,i,j;b.Ug('Greedy Width Approximator',1);c=Kfb(UD(Gxd(a,(X7c(),x7c))));i=RD(Gxd(a,N7c),107);f=RD(Gxd(a,U7c),394);g=Heb(TD(Gxd(a,T7c)));h=Kfb(UD(Gxd(a,Q7c)));j=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);Bad(j);e=new g8c(c,f,g);d=c8c(e,j,h,i);Ixd(a,(X6c(),W6c),d.c);b.Vg()} +function yKd(a){if(a.g==null){switch(a.p){case 0:a.g=qKd(a)?(Geb(),Feb):(Geb(),Eeb);break;case 1:a.g=$eb(rKd(a));break;case 2:a.g=hfb(sKd(a));break;case 3:a.g=tKd(a);break;case 4:a.g=new Tfb(uKd(a));break;case 6:a.g=Hgb(wKd(a));break;case 5:a.g=sgb(vKd(a));break;case 7:a.g=bhb(xKd(a));}}return a.g} +function HKd(a){if(a.n==null){switch(a.p){case 0:a.n=zKd(a)?(Geb(),Feb):(Geb(),Eeb);break;case 1:a.n=$eb(AKd(a));break;case 2:a.n=hfb(BKd(a));break;case 3:a.n=CKd(a);break;case 4:a.n=new Tfb(DKd(a));break;case 6:a.n=Hgb(FKd(a));break;case 5:a.n=sgb(EKd(a));break;case 7:a.n=bhb(GKd(a));}}return a.n} +function Pfe(a,b,c,d){var e,f,g,h,i;h=(nke(),RD(b,69).xk());if(qke(a.e,b)){if(b.Si()&&dge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){throw Adb(new agb(LIe))}}else{i=pke(a.e.Dh(),b);e=RD(a.g,124);for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())){throw Adb(new agb(gLe))}}}VGd(a,gge(a,b,c),h?RD(d,76):oke(b,d))} +function HGb(a){var b,c,d,e,f,g,h;for(f=new Anb(a.a.a);f.a<f.c.c.length;){d=RD(ynb(f),316);d.g=0;d.i=0;d.e.a.$b()}for(e=new Anb(a.a.a);e.a<e.c.c.length;){d=RD(ynb(e),316);for(c=d.a.a.ec().Kc();c.Ob();){b=RD(c.Pb(),60);for(h=b.c.Kc();h.Ob();){g=RD(h.Pb(),60);if(g.a!=d){Ysb(d.e,g);++g.a.g;++g.a.i}}}}} +function X8b(a){var b,c,d,e,f;e=RD(mQb(a,(yCc(),lBc)),21);f=RD(mQb(a,oBc),21);c=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new sjd(c);if(e.Hc((Qpd(),Mpd))){d=RD(mQb(a,nBc),8);if(f.Hc((dqd(),Ypd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Y8b(a,c,b)} +function SYb(a,b){var c,d,e;b.a?(rAb(a.b,b.b),a.a[b.b.i]=RD(vAb(a.b,b.b),86),c=RD(uAb(a.b,b.b),86),!!c&&(a.a[c.i]=b.b),undefined):(d=RD(vAb(a.b,b.b),86),!!d&&d==a.a[b.b.i]&&!!d.d&&d.d!=b.b.d&&d.f.Fc(b.b),e=RD(uAb(a.b,b.b),86),!!e&&a.a[e.i]==b.b&&!!e.d&&e.d!=b.b.d&&b.b.f.Fc(e),wAb(a.b,b.b),undefined)} +function Oec(a,b){var c,d,e,f,g,h;f=a.d;h=Kfb(UD(mQb(a,(yCc(),FAc))));if(h<0){h=0;pQb(a,FAc,h)}b.o.b=h;g=$wnd.Math.floor(h/2);d=new R3b;Q3b(d,(qpd(),ppd));P3b(d,b);d.n.b=g;e=new R3b;Q3b(e,Xod);P3b(e,b);e.n.b=g;Z0b(a,d);c=new a1b;kQb(c,a);pQb(c,RAc,null);Y0b(c,e);Z0b(c,f);Nec(b,a,c);Lec(a,c);return c} +function URc(a){var b,c;c=RD(mQb(a,(Ywc(),kwc)),21);b=new ufd;if(c.Hc((ovc(),ivc))){ofd(b,ORc);ofd(b,QRc)}if(c.Hc(kvc)||Heb(TD(mQb(a,(yCc(),GAc))))){ofd(b,QRc);c.Hc(lvc)&&ofd(b,RRc)}c.Hc(hvc)&&ofd(b,NRc);c.Hc(nvc)&&ofd(b,SRc);c.Hc(jvc)&&ofd(b,PRc);c.Hc(evc)&&ofd(b,LRc);c.Hc(gvc)&&ofd(b,MRc);return b} +function Qjb(a,b){var c,d,e,f,g,h,i,j,k,l,m;d=a.d;f=b.d;h=d+f;i=a.e!=b.e?-1:1;if(h==2){k=Ndb(Cdb(a.a[0],yxe),Cdb(b.a[0],yxe));m=Ydb(k);l=Ydb(Udb(k,32));return l==0?new ajb(i,m):new cjb(i,2,cD(WC(kE,1),Pwe,28,15,[m,l]))}c=a.a;e=b.a;g=$C(kE,Pwe,28,h,15,1);Njb(c,d,e,f,g);j=new cjb(i,h,g);Rib(j);return j} +function Uyb(a,b,c,d){var e,f;if(!b){return c}else{e=a.a.Ne(c.d,b.d);if(e==0){d.d=qlb(b,c.e);d.b=true;return b}f=e<0?0:1;b.a[f]=Uyb(a,b.a[f],c,d);if(Vyb(b.a[f])){if(Vyb(b.a[1-f])){b.b=true;b.a[0].b=false;b.a[1].b=false}else{Vyb(b.a[f].a[f])?(b=azb(b,1-f)):Vyb(b.a[f].a[1-f])&&(b=_yb(b,1-f))}}}return b} +function nKb(a,b,c){var d,e,f,g;e=a.i;d=a.n;mKb(a,(ZJb(),WJb),e.c+d.b,c);mKb(a,YJb,e.c+e.b-d.c-c[2],c);g=e.b-d.b-d.c;if(c[0]>0){c[0]+=a.d;g-=c[0]}if(c[2]>0){c[2]+=a.d;g-=c[2]}f=$wnd.Math.max(0,g);c[1]=$wnd.Math.max(c[1],g);mKb(a,XJb,e.c+d.b+c[0]-(c[1]-g)/2,c);if(b==XJb){a.c.b=f;a.c.c=e.c+d.b+(f-g)/2}} +function D_b(){this.c=$C(iE,vxe,28,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,15,1);this.b=$C(iE,vxe,28,cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]).length,15,1);this.a=$C(iE,vxe,28,cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]).length,15,1);Lnb(this.c,oxe);Lnb(this.b,pxe);Lnb(this.a,pxe)} +function rte(a,b,c){var d,e,f,g;if(b<=c){e=b;f=c}else{e=c;f=b}d=0;if(a.b==null){a.b=$C(kE,Pwe,28,2,15,1);a.b[0]=e;a.b[1]=f;a.c=true}else{d=a.b.length;if(a.b[d-1]+1==e){a.b[d-1]=f;return}g=$C(kE,Pwe,28,d+2,15,1);hib(a.b,0,g,0,d);a.b=g;a.b[d-1]>=e&&(a.c=false,a.a=false);a.b[d++]=e;a.b[d]=f;a.c||vte(a)}} +function Oqc(a,b,c){var d,e,f,g,h,i,j;j=b.d;a.a=new cnb(j.c.length);a.c=new Tsb;for(h=new Anb(j);h.a<h.c.c.length;){g=RD(ynb(h),105);f=new USc(null);Rmb(a.a,f);Zjb(a.c,g,f)}a.b=new Tsb;Mqc(a,b);for(d=0;d<j.c.length-1;d++){i=RD(Vmb(b.d,d),105);for(e=d+1;e<j.c.length;e++){Pqc(a,i,RD(Vmb(b.d,e),105),c)}}} +function Q2c(a){var b,c,d,e,f;e=new bnb;b=new btb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));for(d=new is(Mr(zGd(a).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(!ZD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),193)){f=AGd(RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84));b.a._b(f)||(ZEb(e.c,f),true)}}return e} +function Nqe(a,b,c){var d,e,f;a.e=c;a.d=0;a.b=0;a.f=1;a.i=b;(a.e&16)==16&&(a.i=use(a.i));a.j=a.i.length;Mqe(a);f=Qqe(a);if(a.d!=a.j)throw Adb(new Lqe(TId((Hde(),TIe))));if(a.g){for(d=0;d<a.g.a.c.length;d++){e=RD(eyb(a.g,d),592);if(a.f<=e.a)throw Adb(new Lqe(TId((Hde(),UIe))))}a.g.a.c.length=0}return f} +function BNc(a,b){var c,d,e,f,g,h,i;c=pxe;h=(r3b(),p3b);for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=d.k;if(f!=p3b){g=UD(mQb(d,(Ywc(),Cwc)));if(g==null){c=$wnd.Math.max(c,0);d.n.b=c+aFc(a.a,f,h)}else{d.n.b=(uFb(g),g)}}i=aFc(a.a,f,h);d.n.b<c+i+d.d.d&&(d.n.b=c+i+d.d.d);c=d.n.b+d.o.b+d.d.a;h=f}} +function w3c(a,b,c,d,e){var f,g,h,i,j,k;!!a.d&&a.d.Gg(e);f=RD(e.Xb(0),27);if(u3c(a,c,f,false)){return true}g=RD(e.Xb(e.gc()-1),27);if(u3c(a,d,g,true)){return true}if(p3c(a,e)){return true}for(k=e.Kc();k.Ob();){j=RD(k.Pb(),27);for(i=b.Kc();i.Ob();){h=RD(i.Pb(),27);if(o3c(a,j,h)){return true}}}return false} +function Ovd(a,b,c){var d,e,f,g,h,i,j,k,l,m;m=b.c.length;l=(j=a.Ih(c),RD(j>=0?a.Lh(j,false,true):Qvd(a,c,false),61));n:for(f=l.Kc();f.Ob();){e=RD(f.Pb(),58);for(k=0;k<m;++k){g=(tFb(k,b.c.length),RD(b.c[k],76));i=g.md();h=g.Lk();d=e.Nh(h,false);if(i==null?d!=null:!pb(i,d)){continue n}}return e}return null} +function o6b(a,b){var c,d,e,f,g,h,i;b.Ug('Comment post-processing',1);for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);d=new bnb;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);i=RD(mQb(g,(Ywc(),Xwc)),15);c=RD(mQb(g,Vvc),15);if(!!i||!!c){p6b(g,i,c);!!i&&Tmb(d,i);!!c&&Tmb(d,c)}}Tmb(e.a,d)}b.Vg()} +function kac(a,b,c,d){var e,f,g,h;e=RD(e3b(b,(qpd(),ppd)).Kc().Pb(),12);f=RD(e3b(b,Xod).Kc().Pb(),12);for(h=new Anb(a.j);h.a<h.c.c.length;){g=RD(ynb(h),12);while(g.e.c.length!=0){Z0b(RD(Vmb(g.e,0),18),e)}while(g.g.c.length!=0){Y0b(RD(Vmb(g.g,0),18),f)}}c||pQb(b,(Ywc(),vwc),null);d||pQb(b,(Ywc(),wwc),null)} +function IGd(a,b,c){var d,e;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){return EGd(a)}else{d=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);if(b){sLd((!d.a&&(d.a=new XZd(D4,d,5)),d.a));Ozd(d,0);Pzd(d,0);Hzd(d,0);Izd(d,0)}if(c){e=(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a);while(e.i>1){vLd(e,e.i-1)}}return d}} +function Vdc(a,b){var c,d,e,f,g,h,i;c=new wmb;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i=true;d=0;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);switch(g.k.g){case 4:++d;case 1:imb(c,g);break;case 0:Xdc(g,b);default:c.b==c.c||Wdc(c,d,i,false,b);i=false;d=0;}}c.b==c.c||Wdc(c,d,i,true,b)}} +function iMc(a,b){var c,d,e,f,g,h;c=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),12);$Lc(a.b,a.d[g.p]);for(e=new l4b(g.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);f=AMc(a,g==d.c?d.d:d.c);if(f>a.d[g.p]){c+=ZLc(a.b,f);hmb(a.a,sgb(f))}}while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} +function Uec(a){var b,c,d,e,f,g,h,i,j;a.a=new e6b;j=0;e=0;for(d=new Anb(a.i.b);d.a<d.c.c.length;){b=RD(ynb(d),30);b.p=e;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j;++j}++e}f=a.r==(aEc(),TDc);g=f?Qec:Pec;for(c=new Anb(a.i.b);c.a<c.c.c.length;){b=RD(ynb(c),30);_mb(b.a,g);d6b(a.a,sgb(b.p),b.a)}} +function zed(a,b,c){var d,e,f,g;f=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);(!d.a&&(d.a=new C5d(J4,d,10,11)),d.a).i==0||(f+=zed(a,d,false))}if(c){g=vCd(b);while(g){f+=(!g.a&&(g.a=new C5d(J4,g,10,11)),g.a).i;g=vCd(g)}}return f} +function vLd(a,b){var c,d,e,f;if(a.Pj()){d=null;e=a.Qj();a.Tj()&&(d=a.Vj(a.$i(b),null));c=a.Ij(4,f=THd(a,b),null,b,e);if(a.Mj()&&f!=null){d=a.Oj(f,d);if(!d){a.Jj(c)}else{d.nj(c);d.oj()}}else{if(!d){a.Jj(c)}else{d.nj(c);d.oj()}}return f}else{f=THd(a,b);if(a.Mj()&&f!=null){d=a.Oj(f,null);!!d&&d.oj()}return f}} +function LNb(a){var b,c,d,e,f,g,h,i,j,k;j=a.a;b=new _sb;i=0;for(d=new Anb(a.d);d.a<d.c.c.length;){c=RD(ynb(d),226);k=0;tvb(c.b,new ONb);for(g=Sub(c.b,0);g.b!=g.d.c;){f=RD(evb(g),226);if(b.a._b(f)){e=c.c;h=f.c;k<h.d+h.a+j&&k+e.a+j>h.d&&(k=h.d+h.a+j)}}c.c.d=k;b.a.zc(c,b);i=$wnd.Math.max(i,c.c.d+c.c.a)}return i} +function ovc(){ovc=geb;fvc=new pvc('COMMENTS',0);hvc=new pvc('EXTERNAL_PORTS',1);ivc=new pvc('HYPEREDGES',2);jvc=new pvc('HYPERNODES',3);kvc=new pvc('NON_FREE_PORTS',4);lvc=new pvc('NORTH_SOUTH_PORTS',5);nvc=new pvc(FBe,6);evc=new pvc('CENTER_LABELS',7);gvc=new pvc('END_LABELS',8);mvc=new pvc('PARTITIONS',9)} +function PA(a,b,c,d,e){if(d<0){d=EA(a,e,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe]),b);d<0&&(d=EA(a,e,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function RA(a,b,c,d,e){if(d<0){d=EA(a,e,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe]),b);d<0&&(d=EA(a,e,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec']),b));if(d<0){return false}c.k=d;return true}else if(d>0){c.k=d-1;return true}return false} +function TA(a,b,c,d,e,f){var g,h,i,j;h=32;if(d<0){if(b[0]>=a.length){return false}h=ihb(a,b[0]);if(h!=43&&h!=45){return false}++b[0];d=HA(a,b);if(d<0){return false}h==45&&(d=-d)}if(h==32&&b[0]-c==2&&e.b==2){i=new uB;j=i.q.getFullYear()-Owe+Owe-80;g=j%100;f.a=d==g;d+=(j/100|0)*100+(d<g?100:0)}f.p=d;return true} +function V4b(a,b){var c,d,e,f,g;if(!vCd(a)){return}g=RD(mQb(b,(yCc(),lBc)),181);dE(Gxd(a,BBc))===dE((Bod(),Aod))&&Ixd(a,BBc,zod);d=(lud(),new zud(vCd(a)));f=new Fud(!vCd(a)?null:new zud(vCd(a)),a);e=GJb(d,f,false,true);zsb(g,(Qpd(),Mpd));c=RD(mQb(b,nBc),8);c.a=$wnd.Math.max(e.a,c.a);c.b=$wnd.Math.max(e.b,c.b)} +function cec(a,b,c){var d,e,f,g,h,i;for(g=RD(mQb(a,(Ywc(),lwc)),15).Kc();g.Ob();){f=RD(g.Pb(),10);switch(RD(mQb(f,(yCc(),UAc)),171).g){case 2:g3b(f,b);break;case 4:g3b(f,c);}for(e=new is(Mr(W2b(f).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(!!d.c&&!!d.d){continue}h=!d.d;i=RD(mQb(d,Ewc),12);h?Z0b(d,i):Y0b(d,i)}}} +function epc(){epc=geb;Zoc=new fpc(_ye,0,(qpd(),Yod),Yod);apc=new fpc(bze,1,npd,npd);Yoc=new fpc(aze,2,Xod,Xod);dpc=new fpc(cze,3,ppd,ppd);_oc=new fpc('NORTH_WEST_CORNER',4,ppd,Yod);$oc=new fpc('NORTH_EAST_CORNER',5,Yod,Xod);cpc=new fpc('SOUTH_WEST_CORNER',6,npd,ppd);bpc=new fpc('SOUTH_EAST_CORNER',7,Xod,npd)} +function P2c(a){var b,c,d,e,f,g;f=new _sb;b=new btb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));for(e=new is(Mr(zGd(a).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);if(!ZD(QHd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),0),193)){g=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84));b.a._b(g)||(c=f.a.zc(g,f),c==null)}}return f} +function tid(){tid=geb;sid=cD(WC(lE,1),rxe,28,14,[1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,{l:3506176,m:794077,h:1},{l:884736,m:916411,h:20},{l:3342336,m:3912489,h:363},{l:589824,m:3034138,h:6914},{l:3407872,m:1962506,h:138294}]);$wnd.Math.pow(2,-65)} +function Ljb(){Ljb=geb;var a,b;Jjb=$C(uJ,Nve,92,32,0,1);Kjb=$C(uJ,Nve,92,32,0,1);a=1;for(b=0;b<=18;b++){Jjb[b]=(Pib(),Ddb(a,0)>=0?jjb(a):Xib(jjb(Odb(a))));Kjb[b]=Jdb(Sdb(a,b),0)?jjb(Sdb(a,b)):Xib(jjb(Odb(Sdb(a,b))));a=Ndb(a,5)}for(;b<Kjb.length;b++){Jjb[b]=Wib(Jjb[b-1],Jjb[1]);Kjb[b]=Wib(Kjb[b-1],(Pib(),Mib))}} +function tgc(a,b){var c,d,e,f,g;if(a.c.length==0){return new Ptd(sgb(0),sgb(0))}c=(tFb(0,a.c.length),RD(a.c[0],12)).j;g=0;f=b.g;d=b.g+1;while(g<a.c.length-1&&c.g<f){++g;c=(tFb(g,a.c.length),RD(a.c[g],12)).j}e=g;while(e<a.c.length-1&&c.g<d){++e;c=(tFb(g,a.c.length),RD(a.c[g],12)).j}return new Ptd(sgb(g),sgb(e))} +function NJc(a,b,c,d){var e,f,g,h,i,j,k;i=b3b(b,c);(c==(qpd(),npd)||c==ppd)&&(i=hv(i));g=false;do{e=false;for(f=0;f<i.gc()-1;f++){j=RD(i.Xb(f),12);h=RD(i.Xb(f+1),12);if(OJc(a,j,h,d)){g=true;CMc(a.a,RD(i.Xb(f),12),RD(i.Xb(f+1),12));k=RD(i.Xb(f+1),12);i.hd(f+1,RD(i.Xb(f),12));i.hd(f,k);e=true}}}while(e);return g} +function lZc(a,b,c){var d,e,f,g;c.Ug(MEe,1);e=RD(zDb(CDb(new SDb(null,new Swb(b.b,16)),new pZc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);mZc(a,e,0);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);d=Wjb(a.a,sgb(f.g))!=null?RD(Wjb(a.a,sgb(f.g)),17).a:0;pQb(f,(h_c(),f_c),sgb(d))}c.Vg()} +function o3c(a,b,c){var d,e,f,g,h,i,j,k;h=b.i-a.g/2;i=c.i-a.g/2;j=b.j-a.g/2;k=c.j-a.g/2;f=b.g+a.g;g=c.g+a.g;d=b.f+a.g;e=c.f+a.g;if(h<i+g&&i<h&&j<k+e&&k<j){return true}else if(i<h+f&&h<i&&k<j+d&&j<k){return true}else if(h<i+g&&i<h&&j<k&&k<j+d){return true}else if(i<h+f&&h<i&&j<k+e&&k<j){return true}return false} +function gdc(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=b.c.length;g=(tFb(c,b.c.length),RD(b.c[c],292));h=g.a.o.a;l=g.c;m=0;for(j=g.c;j<=g.f;j++){if(h<=a.a[j]){return j}k=a.a[j];i=null;for(e=c+1;e<f;e++){d=(tFb(e,b.c.length),RD(b.c[e],292));d.c<=j&&d.f>=j&&(i=d)}!!i&&(k=$wnd.Math.max(k,i.a.o.a));if(k>m){l=j;m=k}}return l} +function SNb(a){var b,c,d,e,f,g,h;f=new yAb(RD(Qb(new eOb),50));h=pxe;for(c=new Anb(a.d);c.a<c.c.c.length;){b=RD(ynb(c),226);h=b.c.c;while(f.a.gc()!=0){g=RD(f.a.Tc(),226);if(g.c.c+g.c.b<h){f.a.Bc(g)!=null}else{break}}for(e=f.a.ec().Kc();e.Ob();){d=RD(e.Pb(),226);Mub(d.b,b);Mub(b.b,d)}f.a.zc(b,(Geb(),Eeb))==null}} +function sZc(a,b,c){var d,e,f,g,h;if(!gr(b)){h=c.eh((ZD(b,16)?RD(b,16).gc():Kr(b.Kc()))/a.a|0);h.Ug(OEe,1);g=new vZc;f=null;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),39);g=Al(cD(WC(cJ,1),rve,20,0,[g,new dXc(d)]));if(f){pQb(f,(q$c(),l$c),d);pQb(d,b$c,f);if(_Wc(d)==_Wc(f)){pQb(f,m$c,d);pQb(d,c$c,f)}}f=d}h.Vg();sZc(a,g,c)}} +function z1d(a,b){var c,d,e;if(b==null){for(d=(!a.a&&(a.a=new C5d(l7,a,9,5)),new dMd(a.a));d.e!=d.i.gc();){c=RD(bMd(d),694);e=c.c;if((e==null?c.zb:e)==null){return c}}}else{for(d=(!a.a&&(a.a=new C5d(l7,a,9,5)),new dMd(a.a));d.e!=d.i.gc();){c=RD(bMd(d),694);if(lhb(b,(e=c.c,e==null?c.zb:e))){return c}}}return null} +function BLb(a,b){var c;c=null;switch(b.g){case 1:a.e.pf((umd(),Cld))&&(c=RD(a.e.of(Cld),256));break;case 3:a.e.pf((umd(),Dld))&&(c=RD(a.e.of(Dld),256));break;case 2:a.e.pf((umd(),Bld))&&(c=RD(a.e.of(Bld),256));break;case 4:a.e.pf((umd(),Eld))&&(c=RD(a.e.of(Eld),256));}!c&&(c=RD(a.e.of((umd(),zld)),256));return c} +function $5c(a,b,c){var d,e,f,g,h,i;e=c;f=0;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),27);Ixd(g,($4c(),P4c),sgb(e++));i=Q2c(g);d=$wnd.Math.atan2(g.j+g.f/2,g.i+g.g/2);d+=d<0?dFe:0;d<0.7853981633974483||d>FFe?_mb(i,a.b):d<=FFe&&d>GFe?_mb(i,a.d):d<=GFe&&d>HFe?_mb(i,a.c):d<=HFe&&_mb(i,a.a);f=$5c(a,i,f)}return e} +function sTc(a,b,c,d){var e,f,g,h,i,j;e=(d.c+d.a)/2;Xub(b.j);Mub(b.j,e);Xub(c.e);Mub(c.e,e);j=new ATc;for(h=new Anb(a.f);h.a<h.c.c.length;){f=RD(ynb(h),132);i=f.a;uTc(j,b,i);uTc(j,c,i)}for(g=new Anb(a.k);g.a<g.c.c.length;){f=RD(ynb(g),132);i=f.b;uTc(j,b,i);uTc(j,c,i)}j.b+=2;j.a+=nTc(b,a.q);j.a+=nTc(a.q,c);return j} +function U_c(a,b,c){var d;c.Ug('Processor arrange node',1);Heb(TD(mQb(b,(h_c(),G$c))));d=RD(Lvb(DDb(CDb(new SDb(null,new Swb(b.b,16)),new c0c))),39);a.a=RD(mQb(b,g_c),353);a.a==(s_c(),q_c)||a.a==p_c?T_c(a,new mob(cD(WC(Z$,1),NEe,39,0,[d])),c.eh(1)):a.a==o_c&&S_c(a,new mob(cD(WC(Z$,1),NEe,39,0,[d])),c.eh(1));c.Vg()} +function X7c(){X7c=geb;x7c=new mGd((umd(),Dkd),1.3);G7c=new mGd(mld,(Geb(),false));O7c=new A3b(15);N7c=new mGd(tld,O7c);Q7c=new mGd(fmd,15);y7c=Kkd;F7c=kld;H7c=nld;I7c=pld;E7c=ild;J7c=sld;P7c=Lld;U7c=(u7c(),p7c);T7c=o7c;W7c=t7c;V7c=r7c;M7c=k7c;L7c=j7c;K7c=i7c;S7c=n7c;B7c=ald;C7c=bld;A7c=g7c;z7c=f7c;D7c=h7c;R7c=m7c} +function MKb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.d;a.f==(vLb(),tLb)?(h+=(c.a-a.e.b)/2):a.f==sLb&&(h+=c.a-a.e.b);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);g=d.Mf();f=new pjd;f.b=h;h+=g.b+a.a;switch(a.b.g){case 0:f.a=c.c+b.b;break;case 1:f.a=c.c+b.b+(c.b-g.a)/2;break;case 2:f.a=c.c+c.b-b.c-g.a;}d.Of(f)}} +function OKb(a){var b,c,d,e,f,g,h;c=a.i;b=a.n;h=c.c;a.b==(EKb(),BKb)?(h+=(c.b-a.e.a)/2):a.b==DKb&&(h+=c.b-a.e.a);for(e=new Anb(a.d);e.a<e.c.c.length;){d=RD(ynb(e),187);g=d.Mf();f=new pjd;f.a=h;h+=g.a+a.a;switch(a.f.g){case 0:f.b=c.d+b.d;break;case 1:f.b=c.d+b.d+(c.a-g.b)/2;break;case 2:f.b=c.d+c.a-b.a-g.b;}d.Of(f)}} +function U7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=RD(Wjb(c.c,b),467);n=f.f;o=f.a;i=new rjd(k,n);l=new rjd(g,o);e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new rjd(e,n);m=new rjd(e,o);zjd(b.a,cD(WC(l3,1),Nve,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new rjd(e,c.b);Mub(b.a,d)}zjd(b.a,cD(WC(l3,1),Nve,8,0,[m,l]))} +function TGc(a,b,c){var d,e;if(b<a.d.b.c.length){a.b=RD(Vmb(a.d.b,b),30);a.a=RD(Vmb(a.d.b,b-1),30);a.c=b}else{a.a=new R4b(a.d);a.a.p=b-1;Rmb(a.d.b,a.a);a.b=new R4b(a.d);a.b.p=b;Rmb(a.d.b,a.b);a.c=b}g3b(c,a.b);for(e=new is(Mr(Z2b(c).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);!d.c.i.c&&d.c.i.k==(r3b(),n3b)&&g3b(d.c.i,a.a)}} +function Gpd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,qHe),'ELK Randomizer'),'Distributes the nodes randomly on the plane, leading to very obfuscating layouts. Can be useful to demonstrate the power of "real" layout algorithms.'),new Jpd)));Agd(a,qHe,Eze,Cpd);Agd(a,qHe,_ze,15);Agd(a,qHe,bAe,sgb(0));Agd(a,qHe,Dze,Yze)} +function Gqe(){Gqe=geb;var a,b,c,d,e,f;Eqe=$C(gE,YHe,28,255,15,1);Fqe=$C(hE,zwe,28,16,15,1);for(b=0;b<255;b++){Eqe[b]=-1}for(c=57;c>=48;c--){Eqe[c]=c-48<<24>>24}for(d=70;d>=65;d--){Eqe[d]=d-65+10<<24>>24}for(e=102;e>=97;e--){Eqe[e]=e-97+10<<24>>24}for(f=0;f<10;f++)Fqe[f]=48+f&Bwe;for(a=10;a<=15;a++)Fqe[a]=65+a-10&Bwe} +function yYc(a,b){b.Ug('Process graph bounds',1);pQb(a,(q$c(),ZZc),Uvb(TCb(HDb(new SDb(null,new Swb(a.b,16)),new DYc))));pQb(a,_Zc,Uvb(TCb(HDb(new SDb(null,new Swb(a.b,16)),new FYc))));pQb(a,YZc,Uvb(SCb(HDb(new SDb(null,new Swb(a.b,16)),new HYc))));pQb(a,$Zc,Uvb(SCb(HDb(new SDb(null,new Swb(a.b,16)),new JYc))));b.Vg()} +function PWb(a){var b,c,d,e,f;e=RD(mQb(a,(yCc(),lBc)),21);f=RD(mQb(a,oBc),21);c=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);b=new sjd(c);if(e.Hc((Qpd(),Mpd))){d=RD(mQb(a,nBc),8);if(f.Hc((dqd(),Ypd))){d.a<=0&&(d.a=20);d.b<=0&&(d.b=20)}b.a=$wnd.Math.max(c.a,d.a);b.b=$wnd.Math.max(c.b,d.b)}Heb(TD(mQb(a,mBc)))||QWb(a,c,b)} +function lOc(a,b){var c,d,e,f;for(f=b3b(b,(qpd(),npd)).Kc();f.Ob();){d=RD(f.Pb(),12);c=RD(mQb(d,(Ywc(),Iwc)),10);!!c&&rIb(uIb(tIb(vIb(sIb(new wIb,0),0.1),a.i[b.p].d),a.i[c.p].a))}for(e=b3b(b,Yod).Kc();e.Ob();){d=RD(e.Pb(),12);c=RD(mQb(d,(Ywc(),Iwc)),10);!!c&&rIb(uIb(tIb(vIb(sIb(new wIb,0),0.1),a.i[c.p].d),a.i[b.p].a))}} +function oYd(a){var b,c,d,e,f,g;if(!a.c){g=new W$d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(tYd(a));d.e!=d.i.gc();){c=RD(bMd(d),89);e=i2d(c);ZD(e,90)&&YGd(g,oYd(RD(e,29)));WGd(g,c)}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}T$d(g);VHd(g);a.c=new N$d((RD(QHd(xYd((lTd(),kTd).o),15),19),g.i),g.g);yYd(a).b&=-33}return a.c} +function Dre(a){var b;if(a.c!=10)throw Adb(new Lqe(TId((Hde(),VIe))));b=a.a;switch(b){case 110:b=10;break;case 114:b=13;break;case 116:b=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw Adb(new Lqe(TId((Hde(),xJe))));}return b} +function GD(a){var b,c,d,e,f;if(a.l==0&&a.m==0&&a.h==0){return '0'}if(a.h==fxe&&a.m==0&&a.l==0){return '-9223372036854775808'}if(a.h>>19!=0){return '-'+GD(xD(a))}c=a;d='';while(!(c.l==0&&c.m==0&&c.h==0)){e=fD(ixe);c=iD(c,e,true);b=''+FD(eD);if(!(c.l==0&&c.m==0&&c.h==0)){f=9-b.length;for(;f>0;f--){b='0'+b}}d=b+d}return d} +function tkc(a){var b,c,d,e,f,g,h;b=false;c=0;for(e=new Anb(a.d.b);e.a<e.c.c.length;){d=RD(ynb(e),30);d.p=c++;for(g=new Anb(d.a);g.a<g.c.c.length;){f=RD(ynb(g),10);!b&&!gr(W2b(f))&&(b=true)}}h=ysb((Cmd(),Amd),cD(WC(s3,1),jwe,88,0,[ymd,zmd]));if(!b){zsb(h,Bmd);zsb(h,xmd)}a.a=new dGb(h);akb(a.f);akb(a.b);akb(a.e);akb(a.g)} +function Ftb(){if(!Object.create||!Object.getOwnPropertyNames){return false}var a='__proto__';var b=Object.create(null);if(b[a]!==undefined){return false}var c=Object.getOwnPropertyNames(b);if(c.length!=0){return false}b[a]=42;if(b[a]!==42){return false}if(Object.getOwnPropertyNames(b).length==0){return false}return true} +function c_b(a,b,c){var d,e,f,g,h,i,j,k,l;d=c.c;e=c.d;h=K3b(b.c);i=K3b(b.d);if(d==b.c){h=d_b(a,h,e);i=e_b(b.d)}else{h=e_b(b.c);i=d_b(a,i,e)}j=new Fjd(b.a);Pub(j,h,j.a,j.a.a);Pub(j,i,j.c.b,j.c);g=b.c==d;l=new E_b;for(f=0;f<j.b-1;++f){k=new Ptd(RD(ju(j,f),8),RD(ju(j,f+1),8));g&&f==0||!g&&f==j.b-2?(l.b=k):Rmb(l.a,k)}return l} +function W1b(a,b){var c,d,e,f;f=a.j.g-b.j.g;if(f!=0){return f}c=RD(mQb(a,(yCc(),CBc)),17);d=RD(mQb(b,CBc),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(a.j.g){case 1:return Qfb(a.n.a,b.n.a);case 2:return Qfb(a.n.b,b.n.b);case 3:return Qfb(b.n.a,a.n.a);case 4:return Qfb(b.n.b,a.n.b);default:throw Adb(new dgb(UAe));}} +function X9b(a,b,c,d){var e,f,g,h,i;if(Kr((U9b(),new is(Mr(W2b(b).a.Kc(),new ir))))>=a.a){return -1}if(!W9b(b,c)){return -1}if(gr(RD(d.Kb(b),20))){return 1}e=0;for(g=RD(d.Kb(b),20).Kc();g.Ob();){f=RD(g.Pb(),18);i=f.c.i==b?f.d.i:f.c.i;h=X9b(a,i,c,d);if(h==-1){return -1}e=$wnd.Math.max(e,h);if(e>a.c-1){return -1}}return e+1} +function _Gd(a,b){var c,d,e,f,g,h;if(dE(b)===dE(a)){return true}if(!ZD(b,15)){return false}d=RD(b,15);h=a.gc();if(d.gc()!=h){return false}g=d.Kc();if(a.Yi()){for(c=0;c<h;++c){e=a.Vi(c);f=g.Pb();if(e==null?f!=null:!pb(e,f)){return false}}}else{for(c=0;c<h;++c){e=a.Vi(c);f=g.Pb();if(dE(e)!==dE(f)){return false}}}return true} +function RNd(a,b){var c,d,e,f,g,h;if(a.f>0){a._j();if(b!=null){for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=RD(c.g,379);h=c.i;for(g=0;g<h;++g){e=d[g];if(pb(b,e.md())){return true}}}}}else{for(f=0;f<a.d.length;++f){c=a.d[f];if(c){d=RD(c.g,379);h=c.i;for(g=0;g<h;++g){e=d[g];if(dE(b)===dE(e.md())){return true}}}}}}return false} +function see(a,b){var c,d,e;c=b.qi(a.a);if(c){e=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),'affiliation'));if(e!=null){d=thb(e,Fhb(35));return d==-1?Lee(a,Uee(a,BXd(b.qk())),e):d==0?Lee(a,null,(BFb(1,e.length+1),e.substr(1))):Lee(a,(AFb(0,d,e.length),e.substr(0,d)),(BFb(d+1,e.length+1),e.substr(d+1)))}}return null} +function v9b(a,b,c){var d,e,f,g;c.Ug('Orthogonally routing hierarchical port edges',1);a.a=0;d=y9b(b);B9b(b,d);A9b(a,b,d);w9b(b);e=RD(mQb(b,(yCc(),BBc)),101);f=b.b;u9b((tFb(0,f.c.length),RD(f.c[0],30)),e,b);u9b(RD(Vmb(f,f.c.length-1),30),e,b);g=b.b;s9b((tFb(0,g.c.length),RD(g.c[0],30)));s9b(RD(Vmb(g,g.c.length-1),30));c.Vg()} +function JAd(a){switch(a){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{return a-48<<24>>24}case 97:case 98:case 99:case 100:case 101:case 102:{return a-97+10<<24>>24}case 65:case 66:case 67:case 68:case 69:case 70:{return a-65+10<<24>>24}default:{throw Adb(new Vgb('Invalid hexadecimal'))}}} +function iIb(){iIb=geb;hIb=new jIb('SPIRAL',0);cIb=new jIb('LINE_BY_LINE',1);dIb=new jIb('MANHATTAN',2);bIb=new jIb('JITTER',3);fIb=new jIb('QUADRANTS_LINE_BY_LINE',4);gIb=new jIb('QUADRANTS_MANHATTAN',5);eIb=new jIb('QUADRANTS_JITTER',6);aIb=new jIb('COMBINE_LINE_BY_LINE_MANHATTAN',7);_Hb=new jIb('COMBINE_JITTER_MANHATTAN',8)} +function Urc(a,b,c,d){var e,f,g,h,i,j;i=Zrc(a,c);j=Zrc(b,c);e=false;while(!!i&&!!j){if(d||Xrc(i,j,c)){g=Zrc(i,c);h=Zrc(j,c);asc(b);asc(a);f=i.c;Hec(i,false);Hec(j,false);if(c){f3b(b,j.p,f);b.p=j.p;f3b(a,i.p+1,f);a.p=i.p}else{f3b(a,i.p,f);a.p=i.p;f3b(b,j.p+1,f);b.p=j.p}g3b(i,null);g3b(j,null);i=g;j=h;e=true}else{break}}return e} +function aDc(a){switch(a.g){case 0:return new XHc;case 1:return new pHc;case 3:return new GGc;case 4:return new gHc;case 5:return new jIc;case 6:return new IHc;case 2:return new xHc;case 7:return new pGc;case 8:return new YGc;default:throw Adb(new agb('No implementation is available for the layerer '+(a.f!=null?a.f:''+a.g)));}} +function tIc(a,b,c,d){var e,f,g,h,i;e=false;f=false;for(h=new Anb(d.j);h.a<h.c.c.length;){g=RD(ynb(h),12);dE(mQb(g,(Ywc(),Awc)))===dE(c)&&(g.g.c.length==0?g.e.c.length==0||(e=true):(f=true))}i=0;e&&e^f?(i=c.j==(qpd(),Yod)?-a.e[d.c.p][d.p]:b-a.e[d.c.p][d.p]):f&&e^f?(i=a.e[d.c.p][d.p]+1):e&&f&&(i=c.j==(qpd(),Yod)?0:b/2);return i} +function lSd(a,b,c,d,e,f,g,h){var i,j,k;i=0;b!=null&&(i^=ohb(b.toLowerCase()));c!=null&&(i^=ohb(c));d!=null&&(i^=ohb(d));g!=null&&(i^=ohb(g));h!=null&&(i^=ohb(h));for(j=0,k=f.length;j<k;j++){i^=ohb(f[j])}a?(i|=256):(i&=-257);e?(i|=16):(i&=-17);this.f=i;this.i=b==null?null:(uFb(b),b);this.a=c;this.d=d;this.j=f;this.g=g;this.e=h} +function d3b(a,b,c){var d,e;e=null;switch(b.g){case 1:e=(J3b(),E3b);break;case 2:e=(J3b(),G3b);}d=null;switch(c.g){case 1:d=(J3b(),F3b);break;case 2:d=(J3b(),D3b);break;case 3:d=(J3b(),H3b);break;case 4:d=(J3b(),I3b);}return !!e&&!!d?dr(a.j,new Yb(new mob(cD(WC(pE,1),rve,178,0,[RD(Qb(e),178),RD(Qb(d),178)])))):(yob(),yob(),vob)} +function K8b(a){var b,c,d;b=RD(mQb(a,(yCc(),nBc)),8);pQb(a,nBc,new rjd(b.b,b.a));switch(RD(mQb(a,Rzc),255).g){case 1:pQb(a,Rzc,(Rjd(),Qjd));break;case 2:pQb(a,Rzc,(Rjd(),Mjd));break;case 3:pQb(a,Rzc,(Rjd(),Ojd));break;case 4:pQb(a,Rzc,(Rjd(),Pjd));}if((!a.q?(yob(),yob(),wob):a.q)._b(IBc)){c=RD(mQb(a,IBc),8);d=c.a;c.a=c.b;c.b=d}} +function Pmc(a,b,c,d,e,f){this.b=c;this.d=e;if(a>=b.length){throw Adb(new veb('Greedy SwitchDecider: Free layer not in graph.'))}this.c=b[a];this.e=new DMc(d);rMc(this.e,this.c,(qpd(),ppd));this.i=new DMc(d);rMc(this.i,this.c,Xod);this.f=new Kmc(this.c);this.a=!f&&e.i&&!e.s&&this.c[0].k==(r3b(),m3b);this.a&&Nmc(this,a,b.length)} +function $Mb(a,b){var c,d,e,f,g,h;f=!a.B.Hc((dqd(),Wpd));g=a.B.Hc(Zpd);a.a=new wKb(g,f,a.c);!!a.n&&C2b(a.a.n,a.n);cLb(a.g,(ZJb(),XJb),a.a);if(!b){d=new dLb(1,f,a.c);d.n.a=a.k;Wrb(a.p,(qpd(),Yod),d);e=new dLb(1,f,a.c);e.n.d=a.k;Wrb(a.p,npd,e);h=new dLb(0,f,a.c);h.n.c=a.k;Wrb(a.p,ppd,h);c=new dLb(0,f,a.c);c.n.b=a.k;Wrb(a.p,Xod,c)}} +function zkc(a){var b,c,d;b=RD(mQb(a.d,(yCc(),yAc)),223);switch(b.g){case 2:c=rkc(a);break;case 3:c=(d=new bnb,FDb(CDb(GDb(EDb(EDb(new SDb(null,new Swb(a.d.b,16)),new wlc),new ylc),new Alc),new Kkc),new Clc(d)),d);break;default:throw Adb(new dgb('Compaction not supported for '+b+' edges.'));}ykc(a,c);xgb(new Xkb(a.g),new ilc(a))} +function qYc(a,b){var c,d,e,f,g,h,i;b.Ug('Process directions',1);c=RD(mQb(a,(h_c(),H$c)),88);if(c!=(Cmd(),xmd)){for(e=Sub(a.b,0);e.b!=e.d.c;){d=RD(evb(e),39);h=RD(mQb(d,(q$c(),o$c)),17).a;i=RD(mQb(d,p$c),17).a;switch(c.g){case 4:i*=-1;break;case 1:f=h;h=i;i=f;break;case 2:g=h;h=-i;i=g;}pQb(d,o$c,sgb(h));pQb(d,p$c,sgb(i))}}b.Vg()} +function led(a,b){var c;c=new qQb;!!b&&kQb(c,RD(Wjb(a.a,H4),96));ZD(b,422)&&kQb(c,RD(Wjb(a.a,L4),96));if(ZD(b,366)){kQb(c,RD(Wjb(a.a,I4),96));return c}ZD(b,84)&&kQb(c,RD(Wjb(a.a,E4),96));if(ZD(b,207)){kQb(c,RD(Wjb(a.a,J4),96));return c}if(ZD(b,193)){kQb(c,RD(Wjb(a.a,K4),96));return c}ZD(b,326)&&kQb(c,RD(Wjb(a.a,G4),96));return c} +function a_b(a){var b,c,d,e,f,g,h,i;i=new m_b;for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){continue}$$b(i,g,new pjd);for(f=new is(Mr(a3b(g).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(e.c.i.k==m3b||e.d.i.k==m3b){continue}for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);b=c;k_b(i,new eZb(b.a,b.b))}}}return i} +function Kcd(){Kcd=geb;Jcd=new jGd(iGe);Icd=(_cd(),$cd);Hcd=new lGd(nGe,Icd);Gcd=(ldd(),kdd);Fcd=new lGd(jGe,Gcd);Ecd=(Xbd(),Tbd);Dcd=new lGd(kGe,Ecd);zcd=new lGd(lGe,null);Ccd=(Mbd(),Kbd);Bcd=new lGd(mGe,Ccd);vcd=(sbd(),rbd);ucd=new lGd(oGe,vcd);wcd=new lGd(pGe,(Geb(),false));xcd=new lGd(qGe,sgb(64));ycd=new lGd(rGe,true);Acd=Lbd} +function eHc(a,b){var c,d,e,f,g,h,i,j,k,l;a.p=1;e=a.c;l=new Iub;for(k=c3b(a,(BEc(),zEc)).Kc();k.Ob();){j=RD(k.Pb(),12);for(d=new Anb(j.g);d.a<d.c.c.length;){c=RD(ynb(d),18);i=c.d.i;if(a!=i){f=i.c;if(f.p<=e.p){g=e.p+1;if(g==b.b.c.length){h=new R4b(b);h.p=g;Rmb(b.b,h);g3b(i,h)}else{h=RD(Vmb(b.b,g),30);g3b(i,h)}l.a.zc(i,l)}}}}return l} +function mXc(a,b){var c,d;c=RD(mQb(a,(q$c(),TZc)),15);if(!c||c.gc()<1){return null}else if(c.gc()==1){return RD(c.Xb(0),39)}d=null;switch(b.g){case 2:d=RD(Lvb(KDb(c.Oc(),new mYc)),39);break;case 1:d=RD(Lvb(JDb(c.Oc(),new KXc)),39);break;case 4:d=RD(Lvb(KDb(c.Oc(),new OXc)),39);break;case 3:d=RD(Lvb(JDb(c.Oc(),new SXc)),39);}return d} +function usc(a){var b,c,d,e,f,g;if(a.a!=null){return}a.a=$C(xdb,Hye,28,a.c.b.c.length,16,1);a.a[0]=false;if(nQb(a.c,(yCc(),wCc))){d=RD(mQb(a.c,wCc),15);for(c=d.Kc();c.Ob();){b=RD(c.Pb(),17).a;b>0&&b<a.a.length&&(a.a[b]=false)}}else{g=new Anb(a.c.b);g.a<g.c.c.length&&ynb(g);e=1;while(g.a<g.c.c.length){f=RD(ynb(g),30);a.a[e++]=xsc(f)}}} +function X6c(){X6c=geb;M6c=new jGd('additionalHeight');N6c=new jGd('drawingHeight');O6c=new jGd('drawingWidth');R6c=new jGd('minHeight');U6c=new jGd('minWidth');V6c=new jGd('rows');W6c=new jGd('targetWidth');T6c=new kGd('minRowIncrease',0);Q6c=new kGd('maxRowIncrease',0);S6c=new kGd('minRowDecrease',0);P6c=new kGd('maxRowDecrease',0)} +function r$d(a,b){var c,d,e,f;e=a.b;switch(b){case 1:{a.b|=1;a.b|=4;a.b|=8;break}case 2:{a.b|=2;a.b|=4;a.b|=8;break}case 4:{a.b|=1;a.b|=2;a.b|=4;a.b|=8;break}case 3:{a.b|=16;a.b|=8;break}case 0:{a.b|=32;a.b|=16;a.b|=8;a.b|=1;a.b|=2;a.b|=4;break}}if(a.b!=e&&!!a.c){for(d=new dMd(a.c);d.e!=d.i.gc();){f=RD(bMd(d),481);c=yYd(f);v$d(c,b)}}} +function CKc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;e=false;for(g=b,h=0,i=g.length;h<i;++h){f=g[h];Heb((Geb(),f.e?true:false))&&!RD(Vmb(a.b,f.e.p),219).s&&(e=e|(j=f.e,k=RD(Vmb(a.b,j.p),219),l=k.e,m=qKc(c,l.length),n=l[m][0],n.k==(r3b(),m3b)?(l[m]=AKc(f,l[m],c?(qpd(),ppd):(qpd(),Xod))):k.c.mg(l,c),o=DKc(a,k,c,d),BKc(k.e,k.o,c),o))}return e} +function Aed(a,b){var c,d,e,f,g;f=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);if(dE(Gxd(d,(umd(),Xkd)))!==dE((Fnd(),End))){g=RD(Gxd(b,Tld),143);c=RD(Gxd(d,Tld),143);(g==c||!!g&&Nfd(g,c))&&(!d.a&&(d.a=new C5d(J4,d,10,11)),d.a).i!=0&&(f+=Aed(a,d))}}return f} +function Toc(a){var b,c,d,e,f,g,h;d=0;h=0;for(g=new Anb(a.d);g.a<g.c.c.length;){f=RD(ynb(g),105);e=RD(zDb(CDb(new SDb(null,new Swb(f.j,16)),new Cpc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);c=null;if(d<=h){c=(qpd(),Yod);d+=e.gc()}else if(h<d){c=(qpd(),npd);h+=e.gc()}b=c;FDb(GDb(e.Oc(),new qpc),new spc(b))}} +function D6b(a){var b,c,d,e,f;f=new cnb(a.a.c.length);for(e=new Anb(a.a);e.a<e.c.c.length;){d=RD(ynb(e),10);c=RD(mQb(d,(yCc(),UAc)),171);b=null;switch(c.g){case 1:case 2:b=(huc(),guc);break;case 3:case 4:b=(huc(),euc);}if(b){pQb(d,(Ywc(),bwc),(huc(),guc));b==euc?F6b(d,c,(BEc(),yEc)):b==guc&&F6b(d,c,(BEc(),zEc))}else{ZEb(f.c,d)}}return f} +function Snc(a){var b,c,d,e,f,g,h,i;a.b=new hj(new mob((qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]))),new mob((joc(),cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc]))));for(g=cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]),h=0,i=g.length;h<i;++h){f=g[h];for(c=cD(WC(UV,1),jwe,372,0,[ioc,hoc,goc]),d=0,e=c.length;d<e;++d){b=c[d];aj(a.b,f,b,new bnb)}}} +function BMb(a,b){var c,d,e,f,g,h,i,j,k,l;g=RD(RD(Qc(a.r,b),21),87);h=a.u.Hc((Pod(),Nod));c=a.u.Hc(Kod);d=a.u.Hc(Jod);j=a.u.Hc(Ood);l=a.B.Hc((dqd(),cqd));k=!c&&!d&&(j||g.gc()==2);yMb(a,b);e=null;i=null;if(h){f=g.Kc();e=RD(f.Pb(),117);i=e;while(f.Ob()){i=RD(f.Pb(),117)}e.d.b=0;i.d.c=0;k&&!e.a&&(e.d.c=0)}if(l){CMb(g);if(h){e.d.b=0;i.d.c=0}}} +function JNb(a,b){var c,d,e,f,g,h,i,j,k,l;g=RD(RD(Qc(a.r,b),21),87);h=a.u.Hc((Pod(),Nod));c=a.u.Hc(Kod);d=a.u.Hc(Jod);i=a.u.Hc(Ood);l=a.B.Hc((dqd(),cqd));j=!c&&!d&&(i||g.gc()==2);HNb(a,b);k=null;e=null;if(h){f=g.Kc();k=RD(f.Pb(),117);e=k;while(f.Ob()){e=RD(f.Pb(),117)}k.d.d=0;e.d.a=0;j&&!k.a&&(k.d.a=0)}if(l){KNb(g);if(h){k.d.d=0;e.d.a=0}}} +function ONc(a,b,c){var d,e,f,g,h,i,j,k;e=b.k;if(b.p>=0){return false}else{b.p=c.b;Rmb(c.e,b)}if(e==(r3b(),o3b)||e==q3b){for(g=new Anb(b.j);g.a<g.c.c.length;){f=RD(ynb(g),12);for(k=(d=new Anb((new _3b(f)).a.g),new c4b(d));xnb(k.a);){j=RD(ynb(k.a),18).d;h=j.i;i=h.k;if(b.c!=h.c){if(i==o3b||i==q3b){if(ONc(a,h,c)){return true}}}}}}return true} +function GWd(a){var b;if((a.Db&64)!=0)return cWd(a);b=new Shb(cWd(a));b.a+=' (changeable: ';Ohb(b,(a.Bb&gwe)!=0);b.a+=', volatile: ';Ohb(b,(a.Bb&cKe)!=0);b.a+=', transient: ';Ohb(b,(a.Bb&qxe)!=0);b.a+=', defaultValueLiteral: ';Nhb(b,a.j);b.a+=', unsettable: ';Ohb(b,(a.Bb&bKe)!=0);b.a+=', derived: ';Ohb(b,(a.Bb&Ove)!=0);b.a+=')';return b.a} +function tee(a,b){var c,d,e,f,g;e=b.qi(a.a);if(e){d=(!e.b&&(e.b=new SVd((JTd(),FTd),C8,e)),e.b);c=WD($Nd(d,DKe));if(c!=null){f=c.lastIndexOf('#');g=f==-1?Wee(a,b.jk(),c):f==0?Vee(a,null,(BFb(1,c.length+1),c.substr(1))):Vee(a,(AFb(0,f,c.length),c.substr(0,f)),(BFb(f+1,c.length+1),c.substr(f+1)));if(ZD(g,156)){return RD(g,156)}}}return null} +function xee(a,b){var c,d,e,f,g;d=b.qi(a.a);if(d){c=(!d.b&&(d.b=new SVd((JTd(),FTd),C8,d)),d.b);f=WD($Nd(c,$Ke));if(f!=null){e=f.lastIndexOf('#');g=e==-1?Wee(a,b.jk(),f):e==0?Vee(a,null,(BFb(1,f.length+1),f.substr(1))):Vee(a,(AFb(0,e,f.length),f.substr(0,e)),(BFb(e+1,f.length+1),f.substr(e+1)));if(ZD(g,156)){return RD(g,156)}}}return null} +function rRb(a){var b,c,d,e,f,g,h,i,j,k,l,m;e=XPb(a.d);g=RD(mQb(a.b,(tSb(),nSb)),107);h=g.b+g.c;i=g.d+g.a;k=e.d.a*a.e+h;j=e.b.a*a.f+i;RRb(a.b,new rjd(k,j));for(m=new Anb(a.g);m.a<m.c.c.length;){l=RD(ynb(m),568);b=l.g-e.a.a;c=l.i-e.c.a;d=$id(jjd(new rjd(b,c),l.a,l.b),ijd(njd(ajd(yRb(l.e)),l.d*l.a,l.c*l.b),-0.5));f=zRb(l.e);BRb(l.e,ojd(d,f))}} +function Xgc(a,b){var c,d,e,f,g,h,i,j,k,l,m;b.Ug('Restoring reversed edges',1);for(i=new Anb(a.b);i.a<i.c.c.length;){h=RD(ynb(i),30);for(k=new Anb(h.a);k.a<k.c.c.length;){j=RD(ynb(k),10);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);g=s2b(l.g);for(d=g,e=0,f=d.length;e<f;++e){c=d[e];Heb(TD(mQb(c,(Ywc(),Nwc))))&&X0b(c,false)}}}}b.Vg()} +function Zpc(a,b,c,d){var e,f,g,h,i;i=$C(iE,Nve,109,(qpd(),cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd])).length,0,2);for(f=cD(WC(E3,1),NAe,64,0,[opd,Yod,Xod,npd,ppd]),g=0,h=f.length;g<h;++g){e=f[g];i[e.g]=$C(iE,vxe,28,a.c[e.g],15,1)}_pc(i,a,Yod);_pc(i,a,npd);Ypc(i,a,Yod,b,c,d);Ypc(i,a,Xod,b,c,d);Ypc(i,a,npd,b,c,d);Ypc(i,a,ppd,b,c,d);return i} +function sLc(a,b,c){if(Ujb(a.a,b)){if(Zsb(RD(Wjb(a.a,b),49),c)){return 1}}else{Zjb(a.a,b,new _sb)}if(Ujb(a.a,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return -1}}else{Zjb(a.a,c,new _sb)}if(Ujb(a.b,b)){if(Zsb(RD(Wjb(a.b,b),49),c)){return -1}}else{Zjb(a.b,b,new _sb)}if(Ujb(a.b,c)){if(Zsb(RD(Wjb(a.b,c),49),b)){return 1}}else{Zjb(a.b,c,new _sb)}return 0} +function tMb(a){var b,c,d,e,f,g;if(a.q==(Bod(),xod)||a.q==wod){return}e=a.f.n.d+SJb(RD(Vrb(a.b,(qpd(),Yod)),127))+a.c;b=a.f.n.a+SJb(RD(Vrb(a.b,npd),127))+a.c;d=RD(Vrb(a.b,Xod),127);g=RD(Vrb(a.b,ppd),127);f=$wnd.Math.max(0,d.n.d-e);f=$wnd.Math.max(f,g.n.d-e);c=$wnd.Math.max(0,d.n.a-b);c=$wnd.Math.max(c,g.n.a-b);d.n.d=f;g.n.d=f;d.n.a=c;g.n.a=c} +function Xfe(a,b,c,d){var e,f,g,h,i,j;if(c==null){e=RD(a.g,124);for(h=0;h<a.i;++h){g=e[h];if(g.Lk()==b){return rLd(a,g,d)}}}f=(nke(),RD(b,69).xk()?RD(c,76):oke(b,c));if(Mvd(a.e)){j=!pge(a,b);d=qLd(a,f,d);i=b.Jk()?fge(a,3,b,null,c,kge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0),j):fge(a,1,b,b.ik(),c,-1,j);d?d.nj(i):(d=i)}else{d=qLd(a,f,d)}return d} +function xgd(){this.b=new gub;this.d=new gub;this.e=new gub;this.c=new gub;this.a=new Tsb;this.f=new Tsb;HId(l3,new Igd,new Kgd);HId(k3,new ehd,new ghd);HId(h3,new ihd,new khd);HId(i3,new mhd,new ohd);HId(l4,new qhd,new shd);HId(VJ,new Mgd,new Ogd);HId(PK,new Qgd,new Sgd);HId(BK,new Ugd,new Wgd);HId(MK,new Ygd,new $gd);HId(DL,new ahd,new chd)} +function hc(a,b){var c,d,e,f,g;a=a==null?vve:(uFb(a),a);for(e=0;e<b.length;e++){b[e]=ic(b[e])}c=new cib;g=0;d=0;while(d<b.length){f=a.indexOf('%s',g);if(f==-1){break}c.a+=''+zhb(a==null?vve:(uFb(a),a),g,f);Yhb(c,b[d++]);g=f+2}Xhb(c,a,g,a.length);if(d<b.length){c.a+=' [';Yhb(c,b[d++]);while(d<b.length){c.a+=pve;Yhb(c,b[d++])}c.a+=']'}return c.a} +function kMc(a,b){var c,d,e,f,g,h,i;c=0;for(i=new Anb(b);i.a<i.c.c.length;){h=RD(ynb(i),12);$Lc(a.b,a.d[h.p]);g=0;for(e=new l4b(h.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);if(uMc(d)){f=AMc(a,h==d.c?d.d:d.c);if(f>a.d[h.p]){c+=ZLc(a.b,f);hmb(a.a,sgb(f))}}else{++g}}c+=a.b.d*g;while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} +function pje(a){var b,c,d,e,f,g;f=0;b=WVd(a);!!b.kk()&&(f|=4);(a.Bb&bKe)!=0&&(f|=2);if(ZD(a,102)){c=RD(a,19);e=Z5d(c);(c.Bb&QHe)!=0&&(f|=32);if(e){AYd(uWd(e));f|=8;g=e.t;(g>1||g==-1)&&(f|=16);(e.Bb&QHe)!=0&&(f|=64)}(c.Bb&txe)!=0&&(f|=cKe);f|=gwe}else{if(ZD(b,468)){f|=512}else{d=b.kk();!!d&&(d.i&1)!=0&&(f|=256)}}(a.Bb&512)!=0&&(f|=128);return f} +function vke(a,b){var c;if(a.f==tke){c=yfe(Qee((lke(),jke),b));return a.e?c==4&&b!=(Lle(),Jle)&&b!=(Lle(),Gle)&&b!=(Lle(),Hle)&&b!=(Lle(),Ile):c==2}if(!!a.d&&(a.d.Hc(b)||a.d.Hc(zfe(Qee((lke(),jke),b)))||a.d.Hc(Eee((lke(),jke),a.b,b)))){return true}if(a.f){if(Xee((lke(),a.f),Bfe(Qee(jke,b)))){c=yfe(Qee(jke,b));return a.e?c==4:c==2}}return false} +function oKc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;m=-1;n=0;for(j=a,k=0,l=j.length;k<l;++k){i=j[k];for(f=i,g=0,h=f.length;g<h;++g){e=f[g];b=new urc(m==-1?a[0]:a[m],RD(mQb(Y2b(e),(yCc(),cAc)),284),Bic(e),Heb(TD(mQb(Y2b(e),bAc))));for(c=0;c<e.j.c.length;c++){for(d=c+1;d<e.j.c.length;d++){prc(b,RD(Vmb(e.j,c),12),RD(Vmb(e.j,d),12))>0&&++n}}}++m}return n} +function S2c(a,b,c,d){var e,f,g,h,i,j,k,l;g=RD(Gxd(c,(umd(),Qld)),8);i=g.a;k=g.b+a;e=$wnd.Math.atan2(k,i);e<0&&(e+=dFe);e+=b;e>dFe&&(e-=dFe);h=RD(Gxd(d,Qld),8);j=h.a;l=h.b+a;f=$wnd.Math.atan2(l,j);f<0&&(f+=dFe);f+=b;f>dFe&&(f-=dFe);return Zy(),bz(1.0E-10),$wnd.Math.abs(e-f)<=1.0E-10||e==f||isNaN(e)&&isNaN(f)?0:e<f?-1:e>f?1:cz(isNaN(e),isNaN(f))} +function PGb(a){var b,c,d,e,f,g,h;h=new Tsb;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);Zjb(h,b,new bnb)}for(e=new Anb(a.a.b);e.a<e.c.c.length;){b=RD(ynb(e),60);b.i=pxe;for(g=b.c.Kc();g.Ob();){f=RD(g.Pb(),60);RD(Wd(qtb(h.f,f)),15).Fc(b)}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b();b.c=RD(Wd(qtb(h.f,b)),15)}HGb(a)} +function AYb(a){var b,c,d,e,f,g,h;h=new Tsb;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),86);Zjb(h,b,new bnb)}for(e=new Anb(a.a.b);e.a<e.c.c.length;){b=RD(ynb(e),86);b.o=pxe;for(g=b.f.Kc();g.Ob();){f=RD(g.Pb(),86);RD(Wd(qtb(h.f,f)),15).Fc(b)}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.f.$b();b.f=RD(Wd(qtb(h.f,b)),15)}tYb(a)} +function WPb(a,b,c,d){var e,f;VPb(a,b,c,d);hQb(b,a.j-b.j+c);iQb(b,a.k-b.k+d);for(f=new Anb(b.f);f.a<f.c.c.length;){e=RD(ynb(f),334);switch(e.a.g){case 0:eQb(a,b.g+e.b.a,0,b.g+e.c.a,b.i-1);break;case 1:eQb(a,b.g+b.o,b.i+e.b.a,a.o-1,b.i+e.c.a);break;case 2:eQb(a,b.g+e.b.a,b.i+b.p,b.g+e.c.a,a.p-1);break;default:eQb(a,0,b.i+e.b.a,b.g-1,b.i+e.c.a);}}} +function $ec(a,b){var c,d,e,f,g,h,i,j;f=new bnb;b.b.c.length=0;c=RD(zDb(ODb(new SDb(null,new Swb(new Xkb(a.a.b),1))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(e=c.Kc();e.Ob();){d=RD(e.Pb(),17);g=_5b(a.a,d);if(g.b!=0){h=new R4b(b);ZEb(f.c,h);h.p=d.a;for(j=Sub(g,0);j.b!=j.d.c;){i=RD(evb(j),10);g3b(i,h)}}}Tmb(b.b,f)} +function TPb(b,c,d,e,f){var g,h,i;try{if(c>=b.o){throw Adb(new web)}i=c>>5;h=c&31;g=Sdb(1,Ydb(Sdb(h,1)));f?(b.n[d][i]=Rdb(b.n[d][i],g)):(b.n[d][i]=Cdb(b.n[d][i],Qdb(g)));g=Sdb(g,1);e?(b.n[d][i]=Rdb(b.n[d][i],g)):(b.n[d][i]=Cdb(b.n[d][i],Qdb(g)))}catch(a){a=zdb(a);if(ZD(a,333)){throw Adb(new veb(fze+b.o+'*'+b.p+gze+c+pve+d+hze))}else throw Adb(a)}} +function eMc(a,b,c,d){var e,f,g,h,i,j,k,l,m;m=new yAb(new PMc(a));for(h=cD(WC(jR,1),WAe,10,0,[b,c]),i=0,j=h.length;i<j;++i){g=h[i];for(l=aMc(g,d).Kc();l.Ob();){k=RD(l.Pb(),12);for(f=new l4b(k.b);xnb(f.a)||xnb(f.b);){e=RD(xnb(f.a)?ynb(f.a):ynb(f.b),18);if(!W0b(e)){m.a.zc(k,(Geb(),Eeb))==null;uMc(e)&&rAb(m,k==e.c?e.d:e.c)}}}}return Qb(m),new dnb(m)} +function w0c(a,b,c,d){var e,f,g;if(b){f=Kfb(UD(mQb(b,(q$c(),j$c))))+d;g=c+Kfb(UD(mQb(b,d$c)))/2;pQb(b,o$c,sgb(Ydb(Hdb($wnd.Math.round(f)))));pQb(b,p$c,sgb(Ydb(Hdb($wnd.Math.round(g)))));b.d.b==0||w0c(a,RD(Hr((e=Sub((new dXc(b)).a.d,0),new gXc(e))),39),c+Kfb(UD(mQb(b,d$c)))+a.b,d+Kfb(UD(mQb(b,g$c))));mQb(b,m$c)!=null&&w0c(a,RD(mQb(b,m$c),39),c,d)}} +function cdc(a,b){var c,d,e,f,g,h,i,j,k,l,m;i=Y2b(b.a);e=Kfb(UD(mQb(i,(yCc(),XBc))))*2;k=Kfb(UD(mQb(i,cCc)));j=$wnd.Math.max(e,k);f=$C(iE,vxe,28,b.f-b.c+1,15,1);d=-j;c=0;for(h=b.b.Kc();h.Ob();){g=RD(h.Pb(),10);d+=a.a[g.c.p]+j;f[c++]=d}d+=a.a[b.a.c.p]+j;f[c++]=d;for(m=new Anb(b.e);m.a<m.c.c.length;){l=RD(ynb(m),10);d+=a.a[l.c.p]+j;f[c++]=d}return f} +function Xud(a,b){var c,d,e,f;f=RD(Gxd(a,(umd(),Old)),64).g-RD(Gxd(b,Old),64).g;if(f!=0){return f}c=RD(Gxd(a,Jld),17);d=RD(Gxd(b,Jld),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}switch(RD(Gxd(a,Old),64).g){case 1:return Qfb(a.i,b.i);case 2:return Qfb(a.j,b.j);case 3:return Qfb(b.i,a.i);case 4:return Qfb(b.j,a.j);default:throw Adb(new dgb(UAe));}} +function zCd(a){var b,c,d;if((a.Db&64)!=0)return Fyd(a);b=new dib(GHe);c=a.k;if(!c){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!d||Zhb(Zhb((b.a+=' "',b),d),'"')}}else{Zhb(Zhb((b.a+=' "',b),c),'"')}Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function OCd(a){var b,c,d;if((a.Db&64)!=0)return Fyd(a);b=new dib(HHe);c=a.k;if(!c){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){d=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!d||Zhb(Zhb((b.a+=' "',b),d),'"')}}else{Zhb(Zhb((b.a+=' "',b),c),'"')}Zhb(Uhb(Zhb(Uhb(Zhb(Uhb(Zhb(Uhb((b.a+=' (',b),a.i),','),a.j),' | '),a.g),','),a.f),')');return b.a} +function Xnc(a,b){var c,d,e,f,g;b==(TEc(),QEc)&&Eob(RD(Qc(a.a,(Bnc(),xnc)),15));for(e=RD(Qc(a.a,(Bnc(),xnc)),15).Kc();e.Ob();){d=RD(e.Pb(),105);c=RD(Vmb(d.j,0),113).d.j;f=new dnb(d.j);_mb(f,new Boc);switch(b.g){case 2:Pnc(a,f,c,(joc(),hoc),1);break;case 1:case 0:g=Rnc(f);Pnc(a,new Rkb(f,0,g),c,(joc(),hoc),0);Pnc(a,new Rkb(f,g,f.c.length),c,hoc,1);}}} +function sgd(a,b){var c,d,e,f,g,h,i;if(b==null||b.length==0){return null}e=RD(Xjb(a.a,b),143);if(!e){for(d=(h=(new glb(a.b)).a.vc().Kc(),new llb(h));d.a.Ob();){c=(f=RD(d.a.Pb(),44),RD(f.md(),143));g=c.c;i=b.length;if(lhb(g.substr(g.length-i,i),b)&&(b.length==g.length||ihb(g,g.length-b.length-1)==46)){if(e){return null}e=c}}!!e&&$jb(a.a,b,e)}return e} +function HOb(a,b){var c,d,e,f;c=new MOb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();if(e<f){return -1}if(e==f){return 0}return 1} +function I8b(a){var b,c,d;if(!nQb(a,(yCc(),dBc))){return}d=RD(mQb(a,dBc),21);if(d.dc()){return}c=(b=RD(mfb(A3),9),new Fsb(b,RD(WEb(b,b.length),9),0));d.Hc((dod(),$nd))?zsb(c,$nd):zsb(c,_nd);d.Hc(Ynd)||zsb(c,Ynd);d.Hc(Xnd)?zsb(c,cod):d.Hc(Wnd)?zsb(c,bod):d.Hc(Znd)&&zsb(c,aod);d.Hc(cod)?zsb(c,Xnd):d.Hc(bod)?zsb(c,Wnd):d.Hc(aod)&&zsb(c,Znd);pQb(a,dBc,c)} +function KLc(a){var b,c,d,e,f,g,h;e=RD(mQb(a,(Ywc(),pwc)),10);d=a.j;c=(tFb(0,d.c.length),RD(d.c[0],12));for(g=new Anb(e.j);g.a<g.c.c.length;){f=RD(ynb(g),12);if(dE(f)===dE(mQb(c,Awc))){if(f.j==(qpd(),Yod)&&a.p>e.p){Q3b(f,npd);if(f.d){h=f.o.b;b=f.a.b;f.a.b=h-b}}else if(f.j==npd&&e.p>a.p){Q3b(f,Yod);if(f.d){h=f.o.b;b=f.a.b;f.a.b=-(h-b)}}break}}return e} +function nTb(a,b,c,d,e){var f,g,h,i,j,k,l;if(!(ZD(b,207)||ZD(b,366)||ZD(b,193))){throw Adb(new agb('Method only works for ElkNode-, ElkLabel and ElkPort-objects.'))}g=a.a/2;i=b.i+d-g;k=b.j+e-g;j=i+b.g+a.a;l=k+b.f+a.a;f=new Ejd;Mub(f,new rjd(i,k));Mub(f,new rjd(i,l));Mub(f,new rjd(j,l));Mub(f,new rjd(j,k));h=new ORb(f);kQb(h,b);c&&Zjb(a.b,b,h);return h} +function w$b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new rjd(b,c);for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);$id(j.n,f);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);Cjd(d.a,f);g=RD(mQb(d,(yCc(),RAc)),75);!!g&&Cjd(g,f);for(i=new Anb(d.b);i.a<i.c.c.length;){h=RD(ynb(i),72);$id(h.n,f)}}}}} +function o2b(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=new rjd(b,c);for(k=new Anb(a.a);k.a<k.c.c.length;){j=RD(ynb(k),10);$id(j.n,f);for(m=new Anb(j.j);m.a<m.c.c.length;){l=RD(ynb(m),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);Cjd(d.a,f);g=RD(mQb(d,(yCc(),RAc)),75);!!g&&Cjd(g,f);for(i=new Anb(d.b);i.a<i.c.c.length;){h=RD(ynb(i),72);$id(h.n,f)}}}}} +function X4b(a){if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==0){throw Adb(new Ked('Edges must have a source.'))}else if((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i==0){throw Adb(new Ked('Edges must have a target.'))}else{!a.b&&(a.b=new Yie(E4,a,4,7));if(!(a.b.i<=1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c.i<=1))){throw Adb(new Ked('Hyperedges are not supported.'))}}} +function mKc(a,b){var c,d,e,f,g,h,i,j,k,l;l=0;f=new wmb;hmb(f,b);while(f.b!=f.c){i=RD(smb(f),219);j=0;k=RD(mQb(b.j,(yCc(),cAc)),284);g=Kfb(UD(mQb(b.j,Zzc)));h=Kfb(UD(mQb(b.j,$zc)));if(k!=(kEc(),hEc)){j+=g*nKc(i.e,k);j+=h*oKc(i.e)}l+=PLc(i.d,i.e)+j;for(e=new Anb(i.b);e.a<e.c.c.length;){d=RD(ynb(e),36);c=RD(Vmb(a.b,d.p),219);c.s||(l+=lKc(a,c))}}return l} +function Pib(){Pib=geb;var a;Kib=new ajb(1,1);Mib=new ajb(1,10);Oib=new ajb(0,0);Jib=new ajb(-1,1);Lib=cD(WC(uJ,1),Nve,92,0,[Oib,Kib,new ajb(1,2),new ajb(1,3),new ajb(1,4),new ajb(1,5),new ajb(1,6),new ajb(1,7),new ajb(1,8),new ajb(1,9),Mib]);Nib=$C(uJ,Nve,92,32,0,1);for(a=0;a<Nib.length;a++){Nib[a]=Jdb(Sdb(1,a),0)?jjb(Sdb(1,a)):Xib(jjb(Odb(Sdb(1,a))))}} +function JJb(a,b,c,d,e,f,g){a.c=d.Lf().a;a.d=d.Lf().b;if(e){a.c+=e.Lf().a;a.d+=e.Lf().b}a.b=b.Mf().a;a.a=b.Mf().b;if(!e){c?(a.c-=g+b.Mf().a):(a.c+=d.Mf().a+g)}else{switch(e.ag().g){case 0:case 2:a.c+=e.Mf().a+g+f.a+g;break;case 4:a.c-=g+f.a+g+b.Mf().a;break;case 1:a.c+=e.Mf().a+g;a.d-=g+f.b+g+b.Mf().b;break;case 3:a.c+=e.Mf().a+g;a.d+=e.Mf().b+g+f.b+g;}}} +function xdc(a,b){var c,d;this.b=new bnb;this.e=new bnb;this.a=a;this.d=b;udc(this);vdc(this);this.b.dc()?(this.c=a.c.p):(this.c=RD(this.b.Xb(0),10).c.p);this.e.c.length==0?(this.f=a.c.p):(this.f=RD(Vmb(this.e,this.e.c.length-1),10).c.p);for(d=RD(mQb(a,(Ywc(),Mwc)),15).Kc();d.Ob();){c=RD(d.Pb(),72);if(nQb(c,(yCc(),uAc))){this.d=RD(mQb(c,uAc),232);break}}} +function erc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.e,b),49);g=RD(Wjb(a.e,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),10);d.a.zc(j,d);Ysb(RD(Wjb(a.e,j),49),b);ye(RD(Wjb(a.e,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} +function uLc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.b,b),49);g=RD(Wjb(a.b,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),10);d.a.zc(j,d);Ysb(RD(Wjb(a.b,j),49),b);ye(RD(Wjb(a.b,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} +function rrc(a,b,c){var d,e,f,g,h,i,j,k;d=RD(Wjb(a.a,b),49);f=RD(Wjb(a.a,c),49);e=RD(Wjb(a.d,b),49);g=RD(Wjb(a.d,c),49);d.a.zc(c,d);g.a.zc(b,g);for(k=f.a.ec().Kc();k.Ob();){j=RD(k.Pb(),12);d.a.zc(j,d);Ysb(RD(Wjb(a.d,j),49),b);ye(RD(Wjb(a.d,j),49),e)}for(i=e.a.ec().Kc();i.Ob();){h=RD(i.Pb(),12);g.a.zc(h,g);Ysb(RD(Wjb(a.a,h),49),c);ye(RD(Wjb(a.a,h),49),f)}} +function lTc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;f=c;if(c<d){m=(n=new USc(a.p),o=new USc(a.p),ye(n.e,a.e),n.q=a.q,n.r=o,LSc(n),ye(o.j,a.j),o.r=n,LSc(o),new Ptd(n,o));l=RD(m.a,118);k=RD(m.b,118);e=(tFb(f,b.c.length),RD(b.c[f],339));g=sTc(a,l,k,e);for(j=c+1;j<=d;j++){h=(tFb(j,b.c.length),RD(b.c[j],339));i=sTc(a,l,k,h);if(qTc(h,i,e,g)){e=h;g=i;f=j}}}return f} +function c8c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;g=RD(QHd(b,0),27);Dyd(g,0);Eyd(g,0);m=new bnb;ZEb(m.c,g);h=g;f=new lad(a.a,g.g,g.f,(sad(),rad));for(n=1;n<b.i;n++){o=RD(QHd(b,n),27);i=d8c(a,oad,o,h,f,m,c);j=d8c(a,nad,o,h,f,m,c);k=d8c(a,qad,o,h,f,m,c);l=d8c(a,pad,o,h,f,m,c);e=f8c(a,i,j,k,l,o,h,d);Dyd(o,e.d);Eyd(o,e.e);kad(e,rad);f=e;h=o;ZEb(m.c,o)}return f} +function yEd(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=null;m=b;l=pEd(a,DGd(c),m);jyd(l,zDd(m,uIe));g=wDd(m,kIe);d=new MEd(a,l);ODd(d.a,d.b,g);h=wDd(m,lIe);e=new NEd(a,l);PDd(e.a,e.b,h);if((!l.b&&(l.b=new Yie(E4,l,4,7)),l.b).i==0||(!l.c&&(l.c=new Yie(E4,l,5,8)),l.c).i==0){f=zDd(m,uIe);i=yIe+f;j=i+zIe;throw Adb(new CDd(j))}GEd(m,l);zEd(a,m,l);k=CEd(a,m,l);return k} +function pJb(a,b){var c,d,e,f,g,h,i;e=$C(kE,Pwe,28,a.e.a.c.length,15,1);for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);e[f.d]+=f.b.a.c.length}h=gv(b);while(h.b!=0){f=RD(h.b==0?null:(sFb(h.b!=0),Wub(h,h.a.a)),125);for(d=Nr(new Anb(f.g.a));d.Ob();){c=RD(d.Pb(),218);i=c.e;i.e=$wnd.Math.max(i.e,f.e+c.a);--e[i.d];e[i.d]==0&&(Pub(h,i,h.c.b,h.c),true)}}} +function tJb(a){var b,c,d,e,f,g,h,i,j,k,l;c=qwe;e=lve;for(h=new Anb(a.e.a);h.a<h.c.c.length;){f=RD(ynb(h),125);e=$wnd.Math.min(e,f.e);c=$wnd.Math.max(c,f.e)}b=$C(kE,Pwe,28,c-e+1,15,1);for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);f.e-=e;++b[f.e]}d=0;if(a.k!=null){for(j=a.k,k=0,l=j.length;k<l;++k){i=j[k];b[d++]+=i;if(b.length==d){break}}}return b} +function I0c(a,b){var c,d,e,f,g,h;b.Ug('Edge routing',1);e=RD(mQb(a,(h_c(),K$c)),392);if(e==(LZc(),JZc)){G0c(a)}else if(e==IZc){RD(Lvb(DDb(CDb(new SDb(null,new Swb(a.b,16)),new AWc))),39);f=Kfb(UD(mQb(a,$$c)));g=Kfb(UD(mQb(a,J$c)));h=RD(mQb(a,H$c),88);E0c(a,h,f);F0c(a,h,f,g);D0c(a,h,f,g);for(d=Sub(a.a,0);d.b!=d.d.c;){c=RD(evb(d),65);c.a.b<2&&H0c(c)}}b.Vg()} +function IKd(a){switch(a.d){case 9:case 8:{return true}case 3:case 5:case 4:case 6:{return false}case 7:{return RD(HKd(a),17).a==a.o}case 1:case 2:{if(a.o==-2){return false}else{switch(a.p){case 0:case 1:case 2:case 6:case 5:case 7:{return Gdb(a.k,a.f)}case 3:case 4:{return a.j==a.e}default:{return a.n==null?a.g==null:pb(a.n,a.g)}}}}default:{return false}}} +function Grc(a,b){var c,d,e;b.Ug('Breaking Point Insertion',1);d=new ysc(a);switch(RD(mQb(a,(yCc(),rCc)),351).g){case 2:e=new Ksc;break;case 0:e=new zrc;break;default:e=new Nsc;}c=e.og(a,d);Heb(TD(mQb(a,tCc)))&&(c=Frc(a,c));if(!e.pg()&&nQb(a,xCc)){switch(RD(mQb(a,xCc),352).g){case 2:c=Wsc(d,c);break;case 1:c=Usc(d,c);}}if(c.dc()){b.Vg();return}Drc(a,c);b.Vg()} +function oJc(a,b,c){var d,e,f,g,h,i,j,k,l;f=new cnb(b.c.length);for(j=new Anb(b);j.a<j.c.c.length;){g=RD(ynb(j),10);Rmb(f,a.b[g.c.p][g.p])}jJc(a,f,c);l=null;while(l=kJc(f)){lJc(a,RD(l.a,239),RD(l.b,239),f)}b.c.length=0;for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),239);for(h=d.d,i=0,k=h.length;i<k;++i){g=h[i];ZEb(b.c,g);a.a[g.c.p][g.p].a=pJc(d.g,d.d[0]).a}}} +function wnd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,pHe),'ELK Fixed'),'Keeps the current layout as it is, without any automatic modification. Optional coordinates can be given for nodes and edge bend points.'),new znd)));Agd(a,pHe,Eze,tnd);Agd(a,pHe,fEe,iGd(und));Agd(a,pHe,QGe,iGd(ond));Agd(a,pHe,jAe,iGd(pnd));Agd(a,pHe,CAe,iGd(rnd));Agd(a,pHe,hAe,iGd(qnd))} +function Do(a,b,c){var d,e,f,g,h;d=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));h=Ydb(Ndb(cwe,qgb(Ydb(Ndb(c==null?0:tb(c),dwe)),15)));f=Go(a,b,d);if(!!f&&h==f.f&&Hb(c,f.i)){return c}g=Ho(a,c,h);if(g){throw Adb(new agb('value already present: '+c))}e=new kp(b,d,c,h);if(f){yo(a,f);Bo(a,e,f);f.e=null;f.c=null;return f.i}else{Bo(a,e,null);Fo(a);return null}} +function V7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;k=c.a.c;g=c.a.c+c.a.b;f=RD(Wjb(c.c,b),467);n=f.f;o=f.a;f.b?(i=new rjd(g,n)):(i=new rjd(k,n));f.c?(l=new rjd(k,o)):(l=new rjd(g,o));e=k;c.p||(e+=a.c);e+=c.F+c.v*a.b;j=new rjd(e,n);m=new rjd(e,o);zjd(b.a,cD(WC(l3,1),Nve,8,0,[i,j]));h=c.d.a.gc()>1;if(h){d=new rjd(e,c.b);Mub(b.a,d)}zjd(b.a,cD(WC(l3,1),Nve,8,0,[m,l]))} +function aEc(){aEc=geb;$Dc=new bEc(LAe,0);VDc=new bEc('NIKOLOV',1);YDc=new bEc('NIKOLOV_PIXEL',2);WDc=new bEc('NIKOLOV_IMPROVED',3);XDc=new bEc('NIKOLOV_IMPROVED_PIXEL',4);SDc=new bEc('DUMMYNODE_PERCENTAGE',5);ZDc=new bEc('NODECOUNT_PERCENTAGE',6);_Dc=new bEc('NO_BOUNDARY',7);TDc=new bEc('MODEL_ORDER_LEFT_TO_RIGHT',8);UDc=new bEc('MODEL_ORDER_RIGHT_TO_LEFT',9)} +function use(a){var b,c,d,e,f;d=a.length;b=new Rhb;f=0;while(f<d){c=ihb(a,f++);if(c==9||c==10||c==12||c==13||c==32)continue;if(c==35){while(f<d){c=ihb(a,f++);if(c==13||c==10)break}continue}if(c==92&&f<d){if((e=(BFb(f,a.length),a.charCodeAt(f)))==35||e==9||e==10||e==12||e==13||e==32){Jhb(b,e&Bwe);++f}else{b.a+='\\';Jhb(b,e&Bwe);++f}}else Jhb(b,c&Bwe)}return b.a} +function D4c(){D4c=geb;n4c=new lGd(oFe,(Geb(),false));t4c=new lGd(pFe,sgb(0));u4c=new lGd(qFe,0);v4c=new lGd(rFe,false);q4c=(g4c(),d4c);p4c=new lGd(sFe,q4c);sgb(0);o4c=new lGd(tFe,sgb(1));A4c=(t5c(),r5c);z4c=new lGd(uFe,A4c);C4c=(Y3c(),X3c);B4c=new lGd(vFe,C4c);s4c=(j5c(),i5c);r4c=new lGd(wFe,s4c);y4c=new lGd(xFe,0);w4c=new lGd(yFe,false);x4c=new lGd(zFe,false)} +function t3c(a,b){var c,d,e;for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),27);Rc(a.a,c,c);Rc(a.b,c,c);e=Q2c(c);if(e.c.length!=0){!!a.d&&a.d.Gg(e);Rc(a.a,c,(tFb(0,e.c.length),RD(e.c[0],27)));Rc(a.b,c,RD(Vmb(e,e.c.length-1),27));while(N2c(e).c.length!=0){e=N2c(e);!!a.d&&a.d.Gg(e);Rc(a.a,c,(tFb(0,e.c.length),RD(e.c[0],27)));Rc(a.b,c,RD(Vmb(e,e.c.length-1),27))}}}} +function jwd(a,b,c){var d,e,f,g,h,i;if(!b){return null}else{if(c<=-1){d=vYd(b.Dh(),-1-c);if(ZD(d,102)){return RD(d,19)}else{g=RD(b.Mh(d),160);for(h=0,i=g.gc();h<i;++h){if(dE(g.Ul(h))===dE(a)){e=g.Tl(h);if(ZD(e,102)){f=RD(e,19);if((f.Bb&QHe)!=0){return f}}}}throw Adb(new dgb('The containment feature could not be located'))}}else{return Z5d(RD(vYd(a.Dh(),c),19))}}} +function Lqc(a){var b,c,d,e,f,g,h,i,j,k;c=0;for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),105);!!g.i&&(g.i.c=c++)}b=YC(xdb,[Nve,Hye],[183,28],16,[c,c],2);k=a.d;for(e=0;e<k.c.length;e++){i=(tFb(e,k.c.length),RD(k.c[e],105));if(i.i){for(f=e+1;f<k.c.length;f++){j=(tFb(f,k.c.length),RD(k.c[f],105));if(j.i){d=Qqc(i,j);b[i.i.c][j.i.c]=d;b[j.i.c][i.i.c]=d}}}}return b} +function u7c(){u7c=geb;m7c=new lGd(LFe,(Geb(),false));sgb(-1);f7c=new lGd(MFe,sgb(-1));sgb(-1);g7c=new lGd(NFe,sgb(-1));h7c=new lGd(OFe,false);s7c=(z8c(),x8c);r7c=new lGd(PFe,s7c);t7c=new lGd(QFe,-1);q7c=(_6c(),$6c);p7c=new lGd(RFe,q7c);o7c=new lGd(SFe,true);l7c=(b9c(),$8c);k7c=new lGd(TFe,l7c);j7c=new lGd(UFe,false);sgb(1);i7c=new lGd(VFe,sgb(1));n7c=new jGd(WFe)} +function WYc(){WYc=geb;VYc=new XYc('ROOT_PROC',0);OYc=new XYc('FAN_PROC',1);SYc=new XYc('LEVEL_PROC',2);TYc=new XYc('NEIGHBORS_PROC',3);RYc=new XYc('LEVEL_HEIGHT',4);NYc=new XYc('DIRECTION_PROC',5);UYc=new XYc('NODE_POSITION_PROC',6);LYc=new XYc('COMPACTION_PROC',7);QYc=new XYc('LEVEL_COORDS',8);PYc=new XYc('GRAPH_BOUNDS_PROC',9);MYc=new XYc('DETREEIFYING_PROC',10)} +function Fee(a,b){var c,d,e,f,g,h,i,j,k,l;l=zYd(b);j=null;e=false;for(h=0,k=tYd(l.a).i;h<k;++h){g=RD(N_d(l,h,(f=RD(QHd(tYd(l.a),h),89),i=f.c,ZD(i,90)?RD(i,29):(JTd(),zTd))),29);c=Fee(a,g);if(!c.dc()){if(!j){j=c}else{if(!e){e=true;j=new PSd(j)}j.Gc(c)}}}d=Kee(a,b);if(d.dc()){return !j?(yob(),yob(),vob):j}else{if(!j){return d}else{e||(j=new PSd(j));j.Gc(d);return j}}} +function Gee(a,b){var c,d,e,f,g,h,i,j,k,l;l=zYd(b);j=null;d=false;for(h=0,k=tYd(l.a).i;h<k;++h){f=RD(N_d(l,h,(e=RD(QHd(tYd(l.a),h),89),i=e.c,ZD(i,90)?RD(i,29):(JTd(),zTd))),29);c=Gee(a,f);if(!c.dc()){if(!j){j=c}else{if(!d){d=true;j=new PSd(j)}j.Gc(c)}}}g=Nee(a,b);if(g.dc()){return !j?(yob(),yob(),vob):j}else{if(!j){return g}else{d||(j=new PSd(j));j.Gc(g);return j}}} +function gNb(a){var b,c,d,e;d=a.o;RMb();if(a.A.dc()||pb(a.A,QMb)){e=d.a}else{e=ZKb(a.f);if(a.A.Hc((Qpd(),Npd))&&!a.B.Hc((dqd(),_pd))){e=$wnd.Math.max(e,ZKb(RD(Vrb(a.p,(qpd(),Yod)),252)));e=$wnd.Math.max(e,ZKb(RD(Vrb(a.p,npd),252)))}b=TMb(a);!!b&&(e=$wnd.Math.max(e,b.a))}Heb(TD(a.e.Tf().of((umd(),mld))))?(d.a=$wnd.Math.max(d.a,e)):(d.a=e);c=a.f.i;c.c=0;c.b=e;$Kb(a.f)} +function _fe(a,b,c){var d,e,f,g,h,i;if(ZD(b,76)){return rLd(a,b,c)}else{h=null;f=null;d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];if(pb(b,e.md())){f=e.Lk();if(ZD(f,102)&&(RD(f,19).Bb&QHe)!=0){h=e;break}}}if(h){if(Mvd(a.e)){i=f.Jk()?fge(a,4,f,b,null,kge(a,f,b,ZD(f,102)&&(RD(f,19).Bb&txe)!=0),true):fge(a,f.tk()?2:1,f,b,f.ik(),-1,true);c?c.nj(i):(c=i)}c=_fe(a,h,c)}return c}} +function yge(a,b,c){var d,e,f,g;g=pke(a.e.Dh(),b);d=RD(a.g,124);nke();if(RD(b,69).xk()){for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(pb(e,c)){vLd(a,f);return true}}}}else if(c!=null){for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(pb(c,e.md())){vLd(a,f);return true}}}}else{for(f=0;f<a.i;++f){e=d[f];if(g.am(e.Lk())){if(e.md()==null){vLd(a,f);return true}}}}return false} +function xcc(a,b){var c,d,e,f,g;b.Ug('Node and Port Label Placement and Node Sizing',1);DJb((i1b(),new t1b(a,true,true,new Acc)));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))){f=RD(mQb(a,(yCc(),EBc)),21);e=f.Hc((Pod(),Mod));g=Heb(TD(mQb(a,FBc)));for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);FDb(CDb(new SDb(null,new Swb(c.a,16)),new Ccc),new Ecc(f,e,g))}}b.Vg()} +function SHc(a,b){var c,d,e,f,g;a.c==null||a.c.length<b.c.length?(a.c=$C(xdb,Hye,28,b.c.length,16,1)):Nnb(a.c);a.a=new bnb;d=0;for(g=new Anb(b);g.a<g.c.c.length;){e=RD(ynb(g),10);e.p=d++}c=new Yub;for(f=new Anb(b);f.a<f.c.c.length;){e=RD(ynb(f),10);if(!a.c[e.p]){THc(a,e);c.b==0||(sFb(c.b!=0),RD(c.a.a.c,15)).gc()<a.a.c.length?Nub(c,a.a):Oub(c,a.a);a.a=new bnb}}return c} +function Ucd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,uGe),'ELK SPOrE Overlap Removal'),'A node overlap removal algorithm proposed by Nachmanson et al. in "Node overlap removal by growing a tree".'),new Xcd)));Agd(a,uGe,iGe,iGd(Scd));Agd(a,uGe,Eze,Qcd);Agd(a,uGe,_ze,8);Agd(a,uGe,nGe,iGd(Rcd));Agd(a,uGe,qGe,iGd(Ocd));Agd(a,uGe,rGe,iGd(Pcd));Agd(a,uGe,LDe,(Geb(),false))} +function Dee(a,b){var c,d,e,f,g,h,i;c=b.qi(a.a);if(c){i=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),cLe));if(i!=null){d=new bnb;for(f=vhb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];lhb(e,'##other')?Rmb(d,'!##'+Uee(a,BXd(b.qk()))):lhb(e,'##local')?(d.c.push(null),undefined,true):lhb(e,aLe)?Rmb(d,Uee(a,BXd(b.qk()))):(ZEb(d.c,e),true)}return d}}return yob(),yob(),vob} +function u$b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;g=Zid(b.c,c,d);for(l=new Anb(b.a);l.a<l.c.c.length;){k=RD(ynb(l),10);$id(k.n,g);for(n=new Anb(k.j);n.a<n.c.c.length;){m=RD(ynb(n),12);for(f=new Anb(m.g);f.a<f.c.c.length;){e=RD(ynb(f),18);Cjd(e.a,g);h=RD(mQb(e,(yCc(),RAc)),75);!!h&&Cjd(h,g);for(j=new Anb(e.b);j.a<j.c.c.length;){i=RD(ynb(j),72);$id(i.n,g)}}}Rmb(a.a,k);k.a=a}} +function wYb(a){var b,c,d,e,f,g,h,i;if(a.d){throw Adb(new dgb((lfb(eQ),lye+eQ.k+mye)))}a.c==(Cmd(),Amd)&&vYb(a,ymd);for(c=new Anb(a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),194);b.e=0}for(g=new Anb(a.a.b);g.a<g.c.c.length;){f=RD(ynb(g),86);f.o=pxe;for(e=f.f.Kc();e.Ob();){d=RD(e.Pb(),86);++d.d.e}}LYb(a);for(i=new Anb(a.a.b);i.a<i.c.c.length;){h=RD(ynb(i),86);h.k=true}return a} +function mnc(a,b){var c,d,e,f,g,h,i,j;h=new Vmc(a);c=new Yub;Pub(c,b,c.c.b,c.c);while(c.b!=0){d=RD(c.b==0?null:(sFb(c.b!=0),Wub(c,c.a.a)),113);d.d.p=1;for(g=new Anb(d.e);g.a<g.c.c.length;){e=RD(ynb(g),340);Qmc(h,e);j=e.d;j.d.p==0&&(Pub(c,j,c.c.b,c.c),true)}for(f=new Anb(d.b);f.a<f.c.c.length;){e=RD(ynb(f),340);Qmc(h,e);i=e.c;i.d.p==0&&(Pub(c,i,c.c.b,c.c),true)}}return h} +function ksd(a){var b,c,d,e,f;d=Kfb(UD(Gxd(a,(umd(),Uld))));if(d==1){return}zyd(a,d*a.g,d*a.f);c=cr(hr((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c),new Lsd));for(f=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.n&&(a.n=new C5d(I4,a,1,7)),a.n),(!a.c&&(a.c=new C5d(K4,a,9,9)),a.c),c])));gs(f);){e=RD(hs(f),422);e.qh(d*e.nh(),d*e.oh());e.ph(d*e.mh(),d*e.lh());b=RD(e.of(Fld),8);if(b){b.a*=d;b.b*=d}}} +function Qfe(a,b,c){var d,e,f,g,h;g=(nke(),RD(b,69).xk());if(qke(a.e,b)){if(b.Si()&&dge(a,b,c,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){return false}}else{h=pke(a.e.Dh(),b);d=RD(a.g,124);for(f=0;f<a.i;++f){e=d[f];if(h.am(e.Lk())){if(g?pb(e,c):c==null?e.md()==null:pb(c,e.md())){return false}else{RD(eHd(a,f,g?RD(c,76):oke(b,c)),76);return true}}}}return WGd(a,g?RD(c,76):oke(b,c))} +function _dc(a,b,c,d,e){var f,g,h,i,j,k,l,m;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);m=t2b(f.a);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];switch(RD(mQb(i,(yCc(),UAc)),171).g){case 1:dec(i);g3b(i,b);aec(i,true,d);break;case 3:eec(i);g3b(i,c);aec(i,false,e);}}}h=new Jkb(a.b,0);while(h.b<h.d.gc()){(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30)).a.c.length==0&&Ckb(h)}} +function mjb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;n=b.length;i=n;BFb(0,b.length);if(b.charCodeAt(0)==45){l=-1;m=1;--n}else{l=1;m=0}f=(xjb(),wjb)[10];e=n/f|0;q=n%f;q!=0&&++e;h=$C(kE,Pwe,28,e,15,1);c=vjb[8];g=0;o=m+(q==0?f:q);for(p=m;p<i;p=o,o=p+f){d=Oeb((AFb(p,o,b.length),b.substr(p,o-p)),qwe,lve);j=(Ljb(),Pjb(h,h,g,c));j+=Fjb(h,g,d);h[g++]=j}k=g;a.e=l;a.d=k;a.a=h;Rib(a)} +function bPb(a,b){var c,d,e,f;c=new gPb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();e=e==1?1:0;f=f==1?1:0;if(e<f){return -1}if(e==f){return 0}return 1} +function p0b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.i;e=Heb(TD(mQb(h,(yCc(),NAc))));k=0;d=0;for(j=new Anb(a.g);j.a<j.c.c.length;){i=RD(ynb(j),18);g=W0b(i);f=g&&e&&Heb(TD(mQb(i,OAc)));m=i.d.i;g&&f?++d:g&&!f?++k:Y2b(m).e==h?++d:++k}for(c=new Anb(a.e);c.a<c.c.c.length;){b=RD(ynb(c),18);g=W0b(b);f=g&&e&&Heb(TD(mQb(b,OAc)));l=b.c.i;g&&f?++k:g&&!f?++d:Y2b(l).e==h?++k:++d}return k-d} +function sQc(a,b,c,d){this.e=a;this.k=RD(mQb(a,(Ywc(),Qwc)),312);this.g=$C(jR,WAe,10,b,0,1);this.b=$C(VI,Nve,345,b,7,1);this.a=$C(jR,WAe,10,b,0,1);this.d=$C(VI,Nve,345,b,7,1);this.j=$C(jR,WAe,10,b,0,1);this.i=$C(VI,Nve,345,b,7,1);this.p=$C(VI,Nve,345,b,7,1);this.n=$C(QI,Nve,484,b,8,1);Mnb(this.n,(Geb(),false));this.f=$C(QI,Nve,484,b,8,1);Mnb(this.f,true);this.o=c;this.c=d} +function mdc(a,b){var c,d,e,f,g,h;if(b.dc()){return}if(RD(b.Xb(0),292).d==(btc(),$sc)){ddc(a,b)}else{for(d=b.Kc();d.Ob();){c=RD(d.Pb(),292);switch(c.d.g){case 5:_cc(a,c,fdc(a,c));break;case 0:_cc(a,c,(g=c.f-c.c+1,h=(g-1)/2|0,c.c+h));break;case 4:_cc(a,c,hdc(a,c));break;case 2:ndc(c);_cc(a,c,(f=jdc(c),f?c.c:c.f));break;case 1:ndc(c);_cc(a,c,(e=jdc(c),e?c.f:c.c));}edc(c.a)}}} +function zt(a,b,c,d){var e,f,g;g=new Hu(b,c);if(!a.a){a.a=a.e=g;Zjb(a.b,b,new Gu(g));++a.c}else if(!d){RD(Hvb(a.e),511).b=g;g.d=a.e;a.e=g;e=RD(Wjb(a.b,b),260);if(!e){Zjb(a.b,b,e=new Gu(g));++a.c}else{++e.a;f=e.c;f.c=g;g.e=f;e.c=g}}else{e=RD(Hvb(RD(Wjb(a.b,b),260)),260);++e.a;g.d=d.d;g.e=d.e;g.b=d;g.c=d;!d.e?(e.b=g):(d.e.c=g);!d.d?(a.a=g):(d.d.b=g);d.d=g;d.e=g}++a.d;return g} +function lJb(a,b){var c,d,e,f,g;b.Ug('Network simplex',1);if(a.e.a.c.length<1){b.Vg();return}for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);e.e=0}g=a.e.a.c.length>=40;g&&wJb(a);nJb(a);mJb(a);c=qJb(a);d=0;while(!!c&&d<a.f){kJb(a,c,jJb(a,c));c=qJb(a);++d}g&&vJb(a);a.a?hJb(a,tJb(a)):tJb(a);a.b=null;a.d=null;a.p=null;a.c=null;a.g=null;a.i=null;a.n=null;a.o=null;b.Vg()} +function T7b(a,b){var c,d,e,f,g,h,i;if(b.e){return}b.e=true;for(d=b.d.a.ec().Kc();d.Ob();){c=RD(d.Pb(),18);if(b.o&&b.d.a.gc()<=1){g=b.a.c;h=b.a.c+b.a.b;i=new rjd(g+(h-g)/2,b.b);Mub(RD(b.d.a.ec().Kc().Pb(),18).a,i);continue}e=RD(Wjb(b.c,c),467);if(e.b||e.c){V7b(a,c,b);continue}f=a.d==(lFc(),kFc)&&(e.d||e.e)&&_7b(a,b)&&b.d.a.gc()<=1;f?W7b(c,b):U7b(a,c,b)}b.k&&xgb(b.d,new m8b)} +function A5c(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=f;h=(d+e)/2+m;q=c*$wnd.Math.cos(h);r=c*$wnd.Math.sin(h);s=q-b.g/2;t=r-b.f/2;Dyd(b,s);Eyd(b,t);l=a.a.Eg(b);p=2*$wnd.Math.acos(c/c+a.c);if(p<e-d){n=p/l;g=(d+e-p)/2}else{n=(e-d)/l;g=d}o=Q2c(b);if(a.e){a.e.Fg(a.d);a.e.Gg(o)}for(j=new Anb(o);j.a<j.c.c.length;){i=RD(ynb(j),27);k=a.a.Eg(i);A5c(a,i,c+a.c,g,g+n*k,f);g+=n*k}} +function zA(a,b,c){var d;d=c.q.getMonth();switch(b){case 5:Zhb(a,cD(WC(qJ,1),Nve,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[d]);break;case 4:Zhb(a,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe])[d]);break;case 3:Zhb(a,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[d]);break;default:UA(a,d+1,b);}} +function ATb(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=new rjd(c,d);ojd(i,RD(mQb(b,(JVb(),GVb)),8));for(m=new Anb(b.e);m.a<m.c.c.length;){l=RD(ynb(m),153);$id(l.d,i);Rmb(a.e,l)}for(h=new Anb(b.c);h.a<h.c.c.length;){g=RD(ynb(h),289);for(f=new Anb(g.a);f.a<f.c.c.length;){e=RD(ynb(f),250);$id(e.d,i)}Rmb(a.c,g)}for(k=new Anb(b.d);k.a<k.c.c.length;){j=RD(ynb(k),453);$id(j.d,i);Rmb(a.d,j)}} +function TFc(a,b){var c,d,e,f,g,h,i,j;for(i=new Anb(b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);for(e=new l4b(h.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);c=d.c==h?d.d:d.c;f=c.i;if(b==f){continue}j=RD(mQb(d,(yCc(),KBc)),17).a;j<0&&(j=0);g=f.p;if(a.b[g]==0){if(d.d==c){a.a[g]-=j+1;a.a[g]<=0&&a.c[g]>0&&Mub(a.f,f)}else{a.c[g]-=j+1;a.c[g]<=0&&a.a[g]>0&&Mub(a.e,f)}}}}} +function FVc(a,b,c,d){var e,f,g,h,i,j,k;i=new rjd(c,d);ojd(i,RD(mQb(b,(q$c(),SZc)),8));for(k=Sub(b.b,0);k.b!=k.d.c;){j=RD(evb(k),39);$id(j.e,i);Mub(a.b,j)}for(h=RD(zDb(BDb(new SDb(null,new Swb(b.a,16))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15).Kc();h.Ob();){g=RD(h.Pb(),65);for(f=Sub(g.a,0);f.b!=f.d.c;){e=RD(evb(f),8);e.a+=i.a;e.b+=i.b}Mub(a.a,g)}} +function kWc(a,b){var c,d,e,f;if(0<(ZD(a,16)?RD(a,16).gc():Kr(a.Kc()))){e=b;if(1<e){--e;f=new uWc;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),39);f=Al(cD(WC(cJ,1),rve,20,0,[f,new dXc(c)]))}return kWc(f,e)}if(e<0){f=new xWc;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),39);f=Al(cD(WC(cJ,1),rve,20,0,[f,new dXc(c)]))}if(0<(ZD(f,16)?RD(f,16).gc():Kr(f.Kc()))){return kWc(f,e)}}}return RD(Hr(a.Kc()),39)} +function v0c(a,b,c){var d,e,f,g;c.Ug('Processor order nodes',2);a.b=Kfb(UD(mQb(b,(h_c(),_$c))));a.a=RD(mQb(b,H$c),88);if(a.a==(Cmd(),Amd)){a.a=xmd;pQb(b,H$c,a.a)}e=new Yub;for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);Heb(TD(mQb(f,(q$c(),n$c))))&&(Pub(e,f,e.c.b,e.c),true)}d=(sFb(e.b!=0),RD(e.a.a.c,39));t0c(a,d);c.fh(1);w0c(a,d,0-Kfb(UD(mQb(d,(q$c(),d$c))))/2,0);c.fh(1);c.Vg()} +function dqd(){dqd=geb;Ypd=new eqd('DEFAULT_MINIMUM_SIZE',0);$pd=new eqd('MINIMUM_SIZE_ACCOUNTS_FOR_PADDING',1);Xpd=new eqd('COMPUTE_PADDING',2);_pd=new eqd('OUTSIDE_NODE_LABELS_OVERHANG',3);aqd=new eqd('PORTS_OVERHANG',4);cqd=new eqd('UNIFORM_PORT_SPACING',5);bqd=new eqd('SPACE_EFFICIENT_PORT_LABELS',6);Zpd=new eqd('FORCE_TABULAR_NODE_LABELS',7);Wpd=new eqd('ASYMMETRICAL',8)} +function Rje(a,b){var c,d,e,f,g,h,i,j;if(!b){return null}else{c=(f=b.Dh(),!f?null:BXd(f).wi().si(f));if(c){dub(a,b,c);e=b.Dh();for(i=0,j=(e.i==null&&rYd(e),e.i).length;i<j;++i){h=(d=(e.i==null&&rYd(e),e.i),i>=0&&i<d.length?d[i]:null);if(h.rk()&&!h.sk()){if(ZD(h,331)){Tje(a,RD(h,35),b,c)}else{g=RD(h,19);(g.Bb&QHe)!=0&&Vje(a,g,b,c)}}}b.Vh()&&RD(c,54).ei(RD(b,54)._h())}return c}} +function kJb(a,b,c){var d,e,f;if(!b.f){throw Adb(new agb('Given leave edge is no tree edge.'))}if(c.f){throw Adb(new agb('Given enter edge is a tree edge already.'))}b.f=false;$sb(a.p,b);c.f=true;Ysb(a.p,c);d=c.e.e-c.d.e-c.a;oJb(a,c.e,b)||(d=-d);for(f=new Anb(a.e.a);f.a<f.c.c.length;){e=RD(ynb(f),125);oJb(a,e,b)||(e.e+=d)}a.j=1;Nnb(a.c);uJb(a,RD(ynb(new Anb(a.e.a)),125));iJb(a)} +function wIc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;BIc(a,b,c);f=b[c];n=d?(qpd(),ppd):(qpd(),Xod);if(xIc(b.length,c,d)){e=b[d?c-1:c+1];sIc(a,e,d?(BEc(),zEc):(BEc(),yEc));for(i=f,k=0,m=i.length;k<m;++k){g=i[k];vIc(a,g,n)}sIc(a,f,d?(BEc(),yEc):(BEc(),zEc));for(h=e,j=0,l=h.length;j<l;++j){g=h[j];!!g.e||vIc(a,g,spd(n))}}else{for(h=f,j=0,l=h.length;j<l;++j){g=h[j];vIc(a,g,n)}}return false} +function erd(a,b,c,d,e){var f,g,h,i,j,k,l;yob();_mb(a,new Urd);h=new Jkb(a,0);l=new bnb;f=0;while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),163));if(l.c.length!=0&&urd(g)*trd(g)>f*2){k=new zrd(l);j=urd(g)/trd(g);i=ird(k,b,new z3b,c,d,e,j);$id(hjd(k.e),i);l.c.length=0;f=0;ZEb(l.c,k);ZEb(l.c,g);f=urd(k)*trd(k)+urd(g)*trd(g)}else{ZEb(l.c,g);f+=urd(g)*trd(g)}}return l} +function O9b(a,b){var c,d,e,f,g,h;h=RD(mQb(b,(yCc(),BBc)),101);if(!(h==(Bod(),xod)||h==wod)){return}e=(new rjd(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a)).b;for(g=new Anb(a.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k!=(r3b(),m3b)){continue}c=RD(mQb(f,(Ywc(),hwc)),64);if(c!=(qpd(),Xod)&&c!=ppd){continue}d=Kfb(UD(mQb(f,Jwc)));h==xod&&(d*=e);f.n.b=d-RD(mQb(f,zBc),8).b;U2b(f,false,true)}} +function uge(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(Mvd(a.e)){if(b!=c){e=RD(a.g,124);n=e[c];g=n.Lk();if(qke(a.e,g)){o=pke(a.e.Dh(),g);i=-1;h=-1;d=0;for(j=0,l=b>c?b:c;j<=l;++j){if(j==c){h=d++}else{f=e[j];k=o.am(f.Lk());j==b&&(i=j==l&&!k?d-1:d);k&&++d}}m=RD(uLd(a,b,c),76);h!=i&&eZd(a,new c4d(a.e,7,g,sgb(h),n.md(),i));return m}}}else{return RD(SHd(a,b,c),76)}return RD(uLd(a,b,c),76)} +function ugc(a,b){var c,d,e,f,g,h,i;b.Ug('Port order processing',1);i=RD(mQb(a,(yCc(),HBc)),430);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g=RD(mQb(e,BBc),101);h=e.j;if(g==(Bod(),vod)||g==xod||g==wod){yob();_mb(h,mgc)}else if(g!=zod&&g!=Aod){yob();_mb(h,pgc);wgc(h);i==(sEc(),rEc)&&_mb(h,ogc)}e.i=true;V2b(e)}}b.Vg()} +function VHc(a){var b,c,d,e,f,g,h,i;i=new Tsb;b=new BIb;for(g=a.Kc();g.Ob();){e=RD(g.Pb(),10);h=eJb(fJb(new gJb,e),b);rtb(i.f,e,h)}for(f=a.Kc();f.Ob();){e=RD(f.Pb(),10);for(d=new is(Mr(a3b(e).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)){continue}rIb(uIb(tIb(sIb(vIb(new wIb,$wnd.Math.max(1,RD(mQb(c,(yCc(),LBc)),17).a)),1),RD(Wjb(i,c.c.i),125)),RD(Wjb(i,c.d.i),125)))}}return b} +function TRc(){TRc=geb;ORc=pfd(new ufd,(sXb(),qXb),(hcc(),Bbc));QRc=pfd(new ufd,pXb,Fbc);RRc=nfd(pfd(new ufd,pXb,Tbc),rXb,Sbc);NRc=nfd(pfd(pfd(new ufd,pXb,vbc),qXb,wbc),rXb,xbc);SRc=mfd(mfd(rfd(nfd(pfd(new ufd,nXb,bcc),rXb,acc),qXb),_bc),ccc);PRc=nfd(new ufd,rXb,Cbc);LRc=nfd(pfd(pfd(pfd(new ufd,oXb,Ibc),qXb,Kbc),qXb,Lbc),rXb,Jbc);MRc=nfd(pfd(pfd(new ufd,qXb,Lbc),qXb,qbc),rXb,pbc)} +function lD(a,b,c,d,e,f){var g,h,i,j,k,l,m;j=oD(b)-oD(a);g=AD(b,j);i=hD(0,0,0);while(j>=0){h=rD(a,g);if(h){j<22?(i.l|=1<<j,undefined):j<44?(i.m|=1<<j-22,undefined):(i.h|=1<<j-44,undefined);if(a.l==0&&a.m==0&&a.h==0){break}}k=g.m;l=g.h;m=g.l;g.h=l>>>1;g.m=k>>>1|(l&1)<<21;g.l=m>>>1|(k&1)<<21;--j}c&&nD(i);if(f){if(d){eD=xD(a);e&&(eD=DD(eD,(MD(),KD)))}else{eD=hD(a.l,a.m,a.h)}}return i} +function rIc(a,b){var c,d,e,f,g,h,i,j,k,l;j=a.e[b.c.p][b.p]+1;i=b.c.a.c.length+1;for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),12);l=0;f=0;for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(g),new _3b(g)])));gs(e);){d=RD(hs(e),12);if(d.i.c==b.c){l+=AIc(a,d.i)+1;++f}}c=l/f;k=g.j;k==(qpd(),Xod)?c<j?(a.f[g.p]=a.c-c):(a.f[g.p]=a.b+(i-c)):k==ppd&&(c<j?(a.f[g.p]=a.b+c):(a.f[g.p]=a.c-(i-c)))}} +function Oeb(a,b,c){var d,e,f,g,h;if(a==null){throw Adb(new Vgb(vve))}f=a.length;g=f>0&&(BFb(0,a.length),a.charCodeAt(0)==45||(BFb(0,a.length),a.charCodeAt(0)==43))?1:0;for(d=g;d<f;d++){if(dfb((BFb(d,a.length),a.charCodeAt(d)))==-1){throw Adb(new Vgb(nxe+a+'"'))}}h=parseInt(a,10);e=h<b;if(isNaN(h)){throw Adb(new Vgb(nxe+a+'"'))}else if(e||h>c){throw Adb(new Vgb(nxe+a+'"'))}return h} +function Jqc(a){var b,c,d,e,f,g,h;g=new Yub;for(f=new Anb(a.a);f.a<f.c.c.length;){e=RD(ynb(f),118);PSc(e,e.f.c.length);QSc(e,e.k.c.length);if(e.i==0){e.o=0;Pub(g,e,g.c.b,g.c)}}while(g.b!=0){e=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),118);d=e.o+1;for(c=new Anb(e.f);c.a<c.c.c.length;){b=RD(ynb(c),132);h=b.a;RSc(h,$wnd.Math.max(h.o,d));QSc(h,h.i-1);h.i==0&&(Pub(g,h,g.c.b,g.c),true)}}} +function Ged(a){var b,c,d,e,f,g,h,i;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),74);d=AGd(RD(QHd((!f.b&&(f.b=new Yie(E4,f,4,7)),f.b),0),84));h=d.i;i=d.j;e=RD(QHd((!f.a&&(f.a=new C5d(F4,f,6,6)),f.a),0),166);Nzd(e,e.j+h,e.k+i);Gzd(e,e.b+h,e.c+i);for(c=new dMd((!e.a&&(e.a=new XZd(D4,e,5)),e.a));c.e!=c.i.gc();){b=RD(bMd(c),377);Uxd(b,b.a+h,b.b+i)}Bjd(RD(Gxd(f,(umd(),cld)),75),h,i)}} +function Ere(a){var b;switch(a){case 100:return Jre(OLe,true);case 68:return Jre(OLe,false);case 119:return Jre(PLe,true);case 87:return Jre(PLe,false);case 115:return Jre(QLe,true);case 83:return Jre(QLe,false);case 99:return Jre(RLe,true);case 67:return Jre(RLe,false);case 105:return Jre(SLe,true);case 73:return Jre(SLe,false);default:throw Adb(new yz((b=a,NLe+b.toString(16))));}} +function b_b(a){var b,c,d,e,f;e=RD(Vmb(a.a,0),10);b=new j3b(a);Rmb(a.a,b);b.o.a=$wnd.Math.max(1,e.o.a);b.o.b=$wnd.Math.max(1,e.o.b);b.n.a=e.n.a;b.n.b=e.n.b;switch(RD(mQb(e,(Ywc(),hwc)),64).g){case 4:b.n.a+=2;break;case 1:b.n.b+=2;break;case 2:b.n.a-=2;break;case 3:b.n.b-=2;}d=new R3b;P3b(d,b);c=new a1b;f=RD(Vmb(e.j,0),12);Y0b(c,f);Z0b(c,d);$id(hjd(d.n),f.n);$id(hjd(d.a),f.a);return b} +function Wdc(a,b,c,d,e){if(c&&(!d||(a.c-a.b&a.a.length-1)>1)&&b==1&&RD(a.a[a.b],10).k==(r3b(),n3b)){Qdc(RD(a.a[a.b],10),(Pnd(),Lnd))}else if(d&&(!c||(a.c-a.b&a.a.length-1)>1)&&b==1&&RD(a.a[a.c-1&a.a.length-1],10).k==(r3b(),n3b)){Qdc(RD(a.a[a.c-1&a.a.length-1],10),(Pnd(),Mnd))}else if((a.c-a.b&a.a.length-1)==2){Qdc(RD(omb(a),10),(Pnd(),Lnd));Qdc(RD(omb(a),10),Mnd)}else{Ndc(a,e)}jmb(a)} +function QVc(a,b,c){var d,e,f,g,h;f=0;for(e=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));e.e!=e.i.gc();){d=RD(bMd(e),27);g='';(!d.n&&(d.n=new C5d(I4,d,1,7)),d.n).i==0||(g=RD(QHd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n),0),135).a);h=new bXc(f++,b,g);kQb(h,d);pQb(h,(q$c(),h$c),d);h.e.b=d.j+d.f/2;h.f.a=$wnd.Math.max(d.g,1);h.e.a=d.i+d.g/2;h.f.b=$wnd.Math.max(d.f,1);Mub(b.b,h);rtb(c.f,d,h)}} +function L5b(a){var b,c,d,e,f;d=RD(mQb(a,(Ywc(),Awc)),27);f=RD(Gxd(d,(yCc(),lBc)),181).Hc((Qpd(),Ppd));if(!a.e){e=RD(mQb(a,kwc),21);b=new rjd(a.f.a+a.d.b+a.d.c,a.f.b+a.d.d+a.d.a);if(e.Hc((ovc(),hvc))){Ixd(d,BBc,(Bod(),wod));Esd(d,b.a,b.b,false,true)}else{Heb(TD(Gxd(d,mBc)))||Esd(d,b.a,b.b,true,true)}}f?Ixd(d,lBc,xsb(Ppd)):Ixd(d,lBc,(c=RD(mfb(H3),9),new Fsb(c,RD(WEb(c,c.length),9),0)))} +function JA(a,b,c){var d,e,f,g;if(b[0]>=a.length){c.o=0;return true}switch(ihb(a,b[0])){case 43:e=1;break;case 45:e=-1;break;default:c.o=0;return true;}++b[0];f=b[0];g=HA(a,b);if(g==0&&b[0]==f){return false}if(b[0]<a.length&&ihb(a,b[0])==58){d=g*60;++b[0];f=b[0];g=HA(a,b);if(g==0&&b[0]==f){return false}d+=g}else{d=g;d<24&&b[0]-f<=2?(d*=60):(d=d%100+(d/100|0)*60)}d*=e;c.o=-d;return true} +function lnc(a){var b,c,d,e,f,g,h,i,j;g=new bnb;for(d=new is(Mr(a3b(a.b).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);W0b(c)&&Rmb(g,new knc(c,nnc(a,c.c),nnc(a,c.d)))}for(j=(f=(new glb(a.e)).a.vc().Kc(),new llb(f));j.a.Ob();){h=(b=RD(j.a.Pb(),44),RD(b.md(),113));h.d.p=0}for(i=(e=(new glb(a.e)).a.vc().Kc(),new llb(e));i.a.Ob();){h=(b=RD(i.a.Pb(),44),RD(b.md(),113));h.d.p==0&&Rmb(a.d,mnc(a,h))}} +function e5b(a){var b,c,d,e,f,g,h;f=MCd(a);for(e=new dMd((!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));e.e!=e.i.gc();){d=RD(bMd(e),74);h=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84));if(!NGd(h,f)){return true}}for(c=new dMd((!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));c.e!=c.i.gc();){b=RD(bMd(c),74);g=AGd(RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84));if(!NGd(g,f)){return true}}return false} +function jRc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new Anb(b.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(j=new Anb(f.a);j.a<j.c.c.length;){i=RD(ynb(j),10);k=new bnb;h=0;for(d=new is(Mr(Z2b(i).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)||!W0b(c)&&c.c.i.c==c.d.i.c){continue}e=RD(mQb(c,(yCc(),MBc)),17).a;if(e>h){h=e;k.c.length=0}e==h&&Rmb(k,new Ptd(c.c.i,c))}yob();_mb(k,a.c);Qmb(a.b,i.p,k)}}} +function kRc(a,b){var c,d,e,f,g,h,i,j,k;for(g=new Anb(b.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(j=new Anb(f.a);j.a<j.c.c.length;){i=RD(ynb(j),10);k=new bnb;h=0;for(d=new is(Mr(a3b(i).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);if(W0b(c)||!W0b(c)&&c.c.i.c==c.d.i.c){continue}e=RD(mQb(c,(yCc(),MBc)),17).a;if(e>h){h=e;k.c.length=0}e==h&&Rmb(k,new Ptd(c.d.i,c))}yob();_mb(k,a.c);Qmb(a.f,i.p,k)}}} +function HVc(a,b){var c,d,e,f,g,h,i,j;j=TD(mQb(b,(h_c(),Z$c)));if(j==null||(uFb(j),j)){EVc(a,b);e=new bnb;for(i=Sub(b.b,0);i.b!=i.d.c;){g=RD(evb(i),39);c=DVc(a,g,null);if(c){kQb(c,b);ZEb(e.c,c)}}a.a=null;a.b=null;if(e.c.length>1){for(d=new Anb(e);d.a<d.c.c.length;){c=RD(ynb(d),121);f=0;for(h=Sub(c.b,0);h.b!=h.d.c;){g=RD(evb(h),39);g.g=f++}}}return e}return dv(cD(WC(W$,1),Jze,121,0,[b]))} +function hqc(a){var b,c,d,e,f,g,h,i;i=new Ejd;b=Sub(a,0);h=null;c=RD(evb(b),8);e=RD(evb(b),8);while(b.b!=b.d.c){h=c;c=e;e=RD(evb(b),8);f=iqc(ojd(new rjd(h.a,h.b),c));g=iqc(ojd(new rjd(e.a,e.b),c));d=10;d=$wnd.Math.min(d,$wnd.Math.abs(f.a+f.b)/2);d=$wnd.Math.min(d,$wnd.Math.abs(g.a+g.b)/2);f.a=Lgb(f.a)*d;f.b=Lgb(f.b)*d;g.a=Lgb(g.a)*d;g.b=Lgb(g.b)*d;Mub(i,$id(f,c));Mub(i,$id(g,c))}return i} +function wKc(a,b,c){var d,e,f,g,h,i;c.Ug('Minimize Crossings '+a.a,1);d=b.b.c.length==0||!QDb(CDb(new SDb(null,new Swb(b.b,16)),new PAb(new XKc))).Bd((xDb(),wDb));i=b.b.c.length==1&&RD(Vmb(b.b,0),30).a.c.length==1;f=dE(mQb(b,(yCc(),IAc)))===dE((Fnd(),Cnd));if(d||i&&!f){c.Vg();return}e=rKc(a,b);g=(h=RD(ju(e,0),219),h.c.kg()?h.c.eg()?new KKc(a):new MKc(a):new IKc(a));sKc(e,g);EKc(a);c.Vg()} +function xvd(a,b,c,d){var e,f,g,h,i;g=a.Ph();i=a.Jh();e=null;if(i){if(!!b&&(jwd(a,b,c).Bb&txe)==0){d=rLd(i.El(),a,d);a.di(null);e=b.Qh()}else{i=null}}else{!!g&&(i=g.Qh());!!b&&(e=b.Qh())}i!=e&&!!i&&i.Il(a);h=a.Fh();a.Bh(b,c);i!=e&&!!e&&e.Hl(a);if(a.vh()&&a.wh()){if(!!g&&h>=0&&h!=c){f=new N3d(a,1,h,g,null);!d?(d=f):d.nj(f)}if(c>=0){f=new N3d(a,1,c,h==c?g:null,b);!d?(d=f):d.nj(f)}}return d} +function jSd(a){var b,c,d;if(a.b==null){d=new Qhb;if(a.i!=null){Nhb(d,a.i);d.a+=':'}if((a.f&256)!=0){if((a.f&256)!=0&&a.a!=null){wSd(a.i)||(d.a+='//',d);Nhb(d,a.a)}if(a.d!=null){d.a+='/';Nhb(d,a.d)}(a.f&16)!=0&&(d.a+='/',d);for(b=0,c=a.j.length;b<c;b++){b!=0&&(d.a+='/',d);Nhb(d,a.j[b])}if(a.g!=null){d.a+='?';Nhb(d,a.g)}}else{Nhb(d,a.a)}if(a.e!=null){d.a+='#';Nhb(d,a.e)}a.b=d.a}return a.b} +function V8b(a,b){var c,d,e,f,g,h;for(e=new Anb(b.a);e.a<e.c.c.length;){d=RD(ynb(e),10);f=mQb(d,(Ywc(),Awc));if(ZD(f,12)){g=RD(f,12);h=j2b(b,d,g.o.a,g.o.b);g.n.a=h.a;g.n.b=h.b;Q3b(g,RD(mQb(d,hwc),64))}}c=new rjd(b.f.a+b.d.b+b.d.c,b.f.b+b.d.d+b.d.a);if(RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc))){pQb(a,(yCc(),BBc),(Bod(),wod));RD(mQb(Y2b(a),kwc),21).Fc(kvc);r2b(a,c,false)}else{r2b(a,c,true)}} +function Ffc(a,b,c,d,e){var f,g,h,i;f=new j3b(a);h3b(f,(r3b(),q3b));pQb(f,(yCc(),BBc),(Bod(),wod));pQb(f,(Ywc(),Awc),b.c.i);g=new R3b;pQb(g,Awc,b.c);Q3b(g,e);P3b(g,f);pQb(b.c,Iwc,f);h=new j3b(a);h3b(h,q3b);pQb(h,BBc,wod);pQb(h,Awc,b.d.i);i=new R3b;pQb(i,Awc,b.d);Q3b(i,e);P3b(i,h);pQb(b.d,Iwc,h);Y0b(b,g);Z0b(b,i);wFb(0,c.c.length);XEb(c.c,0,f);ZEb(d.c,h);pQb(f,$vc,sgb(1));pQb(h,$vc,sgb(1))} +function Eo(a,b,c,d){var e,f,g,h,i;i=Ydb(Ndb(cwe,qgb(Ydb(Ndb(b==null?0:tb(b),dwe)),15)));e=Ydb(Ndb(cwe,qgb(Ydb(Ndb(c==null?0:tb(c),dwe)),15)));h=Ho(a,b,i);g=Go(a,c,e);if(!!h&&e==h.a&&Hb(c,h.g)){return c}else if(!!g&&!d){throw Adb(new agb('key already present: '+c))}!!h&&yo(a,h);!!g&&yo(a,g);f=new kp(c,e,b,i);Bo(a,f,g);if(g){g.e=null;g.c=null}if(h){h.e=null;h.c=null}Fo(a);return !h?null:h.g} +function Tjb(a,b,c){var d,e,f,g,h;for(f=0;f<b;f++){d=0;for(h=f+1;h<b;h++){d=Bdb(Bdb(Ndb(Cdb(a[f],yxe),Cdb(a[h],yxe)),Cdb(c[f+h],yxe)),Cdb(Ydb(d),yxe));c[f+h]=Ydb(d);d=Udb(d,32)}c[f+b]=Ydb(d)}sjb(c,c,b<<1);d=0;for(e=0,g=0;e<b;++e,g++){d=Bdb(Bdb(Ndb(Cdb(a[e],yxe),Cdb(a[e],yxe)),Cdb(c[g],yxe)),Cdb(Ydb(d),yxe));c[g]=Ydb(d);d=Udb(d,32);++g;d=Bdb(d,Cdb(c[g],yxe));c[g]=Ydb(d);d=Udb(d,32)}return c} +function xOc(a,b,c){var d,e,f,g,h,i,j,k;if(gr(b)){return}i=Kfb(UD(hFc(c.c,(yCc(),fCc))));j=RD(hFc(c.c,eCc),140);!j&&(j=new P2b);d=c.a;e=null;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),12);k=0;if(!e){k=j.d}else{k=i;k+=e.o.b}f=eJb(fJb(new gJb,g),a.f);Zjb(a.k,g,f);rIb(uIb(tIb(sIb(vIb(new wIb,0),eE($wnd.Math.ceil(k))),d),f));e=g;d=f}rIb(uIb(tIb(sIb(vIb(new wIb,0),eE($wnd.Math.ceil(j.a+e.o.b))),d),c.d))} +function K8c(a,b,c,d,e,f,g,h){var i,j,k,l,m,n;n=false;m=f-c.s;k=c.t-b.f+(j=S9c(c,m,false),j.a);if(d.g+h>m){return false}l=(i=S9c(d,m,false),i.a);if(k+h+l<=b.b){Q9c(c,f-c.s);c.c=true;Q9c(d,f-c.s);U9c(d,c.s,c.t+c.d+h);d.k=true;aad(c.q,d);n=true;if(e){Cad(b,d);d.j=b;if(a.c.length>g){Fad((tFb(g,a.c.length),RD(a.c[g],186)),d);(tFb(g,a.c.length),RD(a.c[g],186)).a.c.length==0&&Xmb(a,g)}}}return n} +function Qfc(a,b){var c,d,e,f,g,h;b.Ug('Partition midprocessing',1);e=new Tp;FDb(CDb(new SDb(null,new Swb(a.a,16)),new Ufc),new Wfc(e));if(e.d==0){return}h=RD(zDb(ODb((f=e.i,new SDb(null,(!f?(e.i=new zf(e,e.c)):f).Nc()))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);d=h.Kc();c=RD(d.Pb(),17);while(d.Ob()){g=RD(d.Pb(),17);Pfc(RD(Qc(e,c),21),RD(Qc(e,g),21));c=g}b.Vg()} +function G_b(a,b,c){var d,e,f,g,h,i,j,k;if(b.p==0){b.p=1;g=c;if(!g){e=new bnb;f=(d=RD(mfb(E3),9),new Fsb(d,RD(WEb(d,d.length),9),0));g=new Ptd(e,f)}RD(g.a,15).Fc(b);b.k==(r3b(),m3b)&&RD(g.b,21).Fc(RD(mQb(b,(Ywc(),hwc)),64));for(i=new Anb(b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);for(k=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(h),new _3b(h)])));gs(k);){j=RD(hs(k),12);G_b(a,j.i,g)}}return g}return null} +function bAd(a,b){var c,d,e,f,g;if(a.Ab){if(a.Ab){g=a.Ab.i;if(g>0){e=RD(a.Ab.g,2033);if(b==null){for(f=0;f<g;++f){c=e[f];if(c.d==null){return c}}}else{for(f=0;f<g;++f){c=e[f];if(lhb(b,c.d)){return c}}}}}else{if(b==null){for(d=new dMd(a.Ab);d.e!=d.i.gc();){c=RD(bMd(d),598);if(c.d==null){return c}}}else{for(d=new dMd(a.Ab);d.e!=d.i.gc();){c=RD(bMd(d),598);if(lhb(b,c.d)){return c}}}}}return null} +function RDd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v;n=qEd(a,EGd(b),e);Jzd(n,zDd(e,uIe));o=null;p=e;q=yDd(p,xIe);r=new UEd(n);WDd(r.a,q);s=yDd(p,'endPoint');t=new YEd(n);YDd(t.a,s);u=wDd(p,nIe);v=new _Ed(n);ZDd(v.a,u);l=zDd(e,pIe);f=new QEd(a,n);SDd(f.a,f.b,l);m=zDd(e,oIe);g=new REd(a,n);TDd(g.a,g.b,m);j=wDd(e,rIe);h=new SEd(c,n);UDd(h.b,h.a,j);k=wDd(e,qIe);i=new TEd(d,n);VDd(i.b,i.a,k)} +function q2b(a,b,c){var d,e,f,g,h;h=null;switch(b.g){case 1:for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),12);if(Heb(TD(mQb(d,(Ywc(),mwc))))){return d}}h=new R3b;pQb(h,(Ywc(),mwc),(Geb(),true));break;case 2:for(g=new Anb(a.j);g.a<g.c.c.length;){f=RD(ynb(g),12);if(Heb(TD(mQb(f,(Ywc(),Gwc))))){return f}}h=new R3b;pQb(h,(Ywc(),Gwc),(Geb(),true));}if(h){P3b(h,a);Q3b(h,c);d2b(h.n,a.o,c)}return h} +function d7b(a,b){var c,d,e,f,g,h;h=-1;g=new Yub;for(d=new l4b(a.b);xnb(d.a)||xnb(d.b);){c=RD(xnb(d.a)?ynb(d.a):ynb(d.b),18);h=$wnd.Math.max(h,Kfb(UD(mQb(c,(yCc(),FAc)))));c.c==a?FDb(CDb(new SDb(null,new Swb(c.b,16)),new j7b),new l7b(g)):FDb(CDb(new SDb(null,new Swb(c.b,16)),new n7b),new p7b(g));for(f=Sub(g,0);f.b!=f.d.c;){e=RD(evb(f),72);nQb(e,(Ywc(),dwc))||pQb(e,dwc,c)}Tmb(b,g);Xub(g)}return h} +function _Tc(a,b,c,d,e){var f,g,h,i,j;h=e?d.b:d.a;if(Zsb(a.a,d)){return}j=h>c.s&&h<c.c;i=false;if(c.e.b!=0&&c.j.b!=0){i=i|($wnd.Math.abs(h-Kfb(UD(Qub(c.e))))<Vze&&$wnd.Math.abs(h-Kfb(UD(Qub(c.j))))<Vze);i=i|($wnd.Math.abs(h-Kfb(UD(Rub(c.e))))<Vze&&$wnd.Math.abs(h-Kfb(UD(Rub(c.j))))<Vze)}if(j||i){g=RD(mQb(b,(yCc(),RAc)),75);if(!g){g=new Ejd;pQb(b,RAc,g)}f=new sjd(d);Pub(g,f,g.c.b,g.c);Ysb(a.a,f)}} +function ZPb(a,b,c,d){var e,f,g,h,i,j,k;if(YPb(a,b,c,d)){return true}else{for(g=new Anb(b.f);g.a<g.c.c.length;){f=RD(ynb(g),334);h=false;i=a.j-b.j+c;j=i+b.o;k=a.k-b.k+d;e=k+b.p;switch(f.a.g){case 0:h=fQb(a,i+f.b.a,0,i+f.c.a,k-1);break;case 1:h=fQb(a,j,k+f.b.a,a.o-1,k+f.c.a);break;case 2:h=fQb(a,i+f.b.a,e,i+f.c.a,a.p-1);break;default:h=fQb(a,0,k+f.b.a,i-1,k+f.c.a);}if(h){return true}}}return false} +function yZc(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Processor set coordinates',1);a.a=b.b.b==0?1:b.b.b;j=null;d=Sub(b.b,0);while(!j&&d.b!=d.d.c){l=RD(evb(d),39);if(Heb(TD(mQb(l,(q$c(),n$c))))){j=l;i=l.e;i.a=RD(mQb(l,o$c),17).a;i.b=RD(mQb(l,p$c),17).a}}h=$Wc(j);k=1;do{h=zZc((e=h,c.eh(k),e));k=h.b/a.a|0}while(h.b!=0);for(g=Sub(b.b,0);g.b!=g.d.c;){f=RD(evb(g),39);ojd(f.e,new rjd(f.f.a/2,f.f.b/2))}c.Vg()} +function uYc(a,b,c){var d,e,f,g,h,i,j,k;c.Ug(MEe,1);akb(a.b);akb(a.a);h=null;f=Sub(b.b,0);while(!h&&f.b!=f.d.c){j=RD(evb(f),39);Heb(TD(mQb(j,(q$c(),n$c))))&&(h=j)}i=new Yub;Pub(i,h,i.c.b,i.c);tYc(a,i);for(k=Sub(b.b,0);k.b!=k.d.c;){j=RD(evb(k),39);g=WD(mQb(j,(q$c(),a$c)));e=Xjb(a.b,g)!=null?RD(Xjb(a.b,g),17).a:0;pQb(j,XZc,sgb(e));d=1+(Xjb(a.a,g)!=null?RD(Xjb(a.a,g),17).a:0);pQb(j,VZc,sgb(d))}c.Vg()} +function ikd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,LGe),'ELK Box'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges.'),new lkd)));Agd(a,LGe,Eze,ekd);Agd(a,LGe,_ze,15);Agd(a,LGe,$ze,sgb(0));Agd(a,LGe,MGe,iGd($jd));Agd(a,LGe,jAe,iGd(akd));Agd(a,LGe,iAe,iGd(ckd));Agd(a,LGe,Dze,KGe);Agd(a,LGe,dAe,iGd(_jd));Agd(a,LGe,CAe,iGd(bkd));Agd(a,LGe,NGe,iGd(Yjd));Agd(a,LGe,YDe,iGd(Zjd))} +function c2b(a,b){var c,d,e,f,g,h,i,j,k;e=a.i;g=e.o.a;f=e.o.b;if(g<=0&&f<=0){return qpd(),opd}j=a.n.a;k=a.n.b;h=a.o.a;c=a.o.b;switch(b.g){case 2:case 1:if(j<0){return qpd(),ppd}else if(j+h>g){return qpd(),Xod}break;case 4:case 3:if(k<0){return qpd(),Yod}else if(k+c>f){return qpd(),npd}}i=(j+h/2)/g;d=(k+c/2)/f;return i+d<=1&&i-d<=0?(qpd(),ppd):i+d>=1&&i-d>=0?(qpd(),Xod):d<0.5?(qpd(),Yod):(qpd(),npd)} +function PNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=false;k=Kfb(UD(mQb(b,(yCc(),bCc))));o=pwe*k;for(e=new Anb(b.b);e.a<e.c.c.length;){d=RD(ynb(e),30);j=new Anb(d.a);f=RD(ynb(j),10);l=XNc(a.a[f.p]);while(j.a<j.c.c.length){h=RD(ynb(j),10);m=XNc(a.a[h.p]);if(l!=m){n=bFc(a.b,f,h);g=f.n.b+f.o.b+f.d.a+l.a+n;i=h.n.b-h.d.d+m.a;if(g>i+o){p=l.g+m.g;m.a=(m.g*m.a+l.g*l.a)/p;m.g=p;l.f=m;c=true}}f=h;l=m}}return c} +function MJb(a,b,c,d,e,f,g){var h,i,j,k,l,m;m=new Tid;for(j=b.Kc();j.Ob();){h=RD(j.Pb(),853);for(l=new Anb(h.Rf());l.a<l.c.c.length;){k=RD(ynb(l),187);if(dE(k.of((umd(),Qkd)))===dE((Omd(),Nmd))){JJb(m,k,false,d,e,f,g);Sid(a,m)}}}for(i=c.Kc();i.Ob();){h=RD(i.Pb(),853);for(l=new Anb(h.Rf());l.a<l.c.c.length;){k=RD(ynb(l),187);if(dE(k.of((umd(),Qkd)))===dE((Omd(),Mmd))){JJb(m,k,true,d,e,f,g);Sid(a,m)}}}} +function PVc(a,b,c){var d,e,f,g,h,i,j;for(g=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));g.e!=g.i.gc();){f=RD(bMd(g),27);for(e=new is(Mr(zGd(f).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);if(!nzd(d)&&!nzd(d)&&!ozd(d)){i=RD(Wd(qtb(c.f,f)),39);j=RD(Wjb(c,AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))),39);if(!!i&&!!j){h=new WWc(i,j);pQb(h,(q$c(),h$c),d);kQb(h,d);Mub(i.d,h);Mub(j.b,h);Mub(b.a,h)}}}}} +function HNb(a,b){var c,d,e,f,g,h,i,j;for(i=RD(RD(Qc(a.r,b),21),87).Kc();i.Ob();){h=RD(i.Pb(),117);e=h.c?PKb(h.c):0;if(e>0){if(h.a){j=h.b.Mf().b;if(e>j){if(a.v||h.c.d.c.length==1){g=(e-j)/2;h.d.d=g;h.d.a=g}else{c=RD(Vmb(h.c.d,0),187).Mf().b;d=(c-j)/2;h.d.d=$wnd.Math.max(0,d);h.d.a=e-d-j}}}else{h.d.a=a.t+e}}else if(Rod(a.u)){f=wsd(h.b);f.d<0&&(h.d.d=-f.d);f.d+f.a>h.b.Mf().b&&(h.d.a=f.d+f.a-h.b.Mf().b)}}} +function yVb(){yVb=geb;lVb=new mGd((umd(),Rld),sgb(1));rVb=new mGd(fmd,80);qVb=new mGd($ld,5);ZUb=new mGd(Dkd,Yze);mVb=new mGd(Sld,sgb(1));pVb=new mGd(Vld,(Geb(),true));iVb=new A3b(50);hVb=new mGd(tld,iVb);_Ub=ald;jVb=Hld;$Ub=new mGd(Pkd,false);gVb=sld;eVb=mld;fVb=pld;dVb=kld;cVb=ild;kVb=Lld;bVb=(OUb(),HUb);sVb=MUb;aVb=GUb;nVb=JUb;oVb=LUb;vVb=mmd;xVb=qmd;uVb=lmd;tVb=kmd;wVb=(mqd(),jqd);new mGd(nmd,wVb)} +function VC(a,b){var c;switch(XC(a)){case 6:return bE(b);case 7:return _D(b);case 8:return $D(b);case 3:return Array.isArray(b)&&(c=XC(b),!(c>=14&&c<=16));case 11:return b!=null&&typeof b===kve;case 12:return b!=null&&(typeof b===gve||typeof b==kve);case 0:return QD(b,a.__elementTypeId$);case 2:return cE(b)&&!(b.Tm===keb);case 1:return cE(b)&&!(b.Tm===keb)||QD(b,a.__elementTypeId$);default:return true;}} +function oRb(a,b){var c,d,e,f;d=$wnd.Math.min($wnd.Math.abs(a.c-(b.c+b.b)),$wnd.Math.abs(a.c+a.b-b.c));f=$wnd.Math.min($wnd.Math.abs(a.d-(b.d+b.a)),$wnd.Math.abs(a.d+a.a-b.d));c=$wnd.Math.abs(a.c+a.b/2-(b.c+b.b/2));if(c>a.b/2+b.b/2){return 1}e=$wnd.Math.abs(a.d+a.a/2-(b.d+b.a/2));if(e>a.a/2+b.a/2){return 1}if(c==0&&e==0){return 0}if(c==0){return f/e+1}if(e==0){return d/c+1}return $wnd.Math.min(d/c,f/e)+1} +function oWb(a,b){var c,d,e,f,g,h,i;f=0;h=0;i=0;for(e=new Anb(a.f.e);e.a<e.c.c.length;){d=RD(ynb(e),153);if(b==d){continue}g=a.i[b.a][d.a];f+=g;c=bjd(b.d,d.d);c>0&&a.d!=(AWb(),zWb)&&(h+=g*(d.d.a+a.a[b.a][d.a]*(b.d.a-d.d.a)/c));c>0&&a.d!=(AWb(),xWb)&&(i+=g*(d.d.b+a.a[b.a][d.a]*(b.d.b-d.d.b)/c))}switch(a.d.g){case 1:return new rjd(h/f,b.d.b);case 2:return new rjd(b.d.a,i/f);default:return new rjd(h/f,i/f);}} +function xsd(a){var b,c,d,e,f,g;c=(!a.a&&(a.a=new XZd(D4,a,5)),a.a).i+2;g=new cnb(c);Rmb(g,new rjd(a.j,a.k));FDb(new SDb(null,(!a.a&&(a.a=new XZd(D4,a,5)),new Swb(a.a,16))),new Usd(g));Rmb(g,new rjd(a.b,a.c));b=1;while(b<g.c.length-1){d=(tFb(b-1,g.c.length),RD(g.c[b-1],8));e=(tFb(b,g.c.length),RD(g.c[b],8));f=(tFb(b+1,g.c.length),RD(g.c[b+1],8));d.a==e.a&&e.a==f.a||d.b==e.b&&e.b==f.b?Xmb(g,b):++b}return g} +function zgc(a,b){sgc();var c,d,e,f,g;g=RD(mQb(a.i,(yCc(),BBc)),101);f=a.j.g-b.j.g;if(f!=0||!(g==(Bod(),vod)||g==xod||g==wod)){return 0}if(g==(Bod(),vod)){c=RD(mQb(a,CBc),17);d=RD(mQb(b,CBc),17);if(!!c&&!!d){e=c.a-d.a;if(e!=0){return e}}}switch(a.j.g){case 1:return Qfb(a.n.a,b.n.a);case 2:return Qfb(a.n.b,b.n.b);case 3:return Qfb(b.n.a,a.n.a);case 4:return Qfb(b.n.b,a.n.b);default:throw Adb(new dgb(UAe));}} +function Bkc(a,b){var c,d,e,f,g,h,i;c=mGb(pGb(nGb(oGb(new qGb,b),new Vid(b.e)),kkc),a.a);b.j.c.length==0||eGb(RD(Vmb(b.j,0),60).a,c);i=new cHb;Zjb(a.e,c,i);g=new _sb;h=new _sb;for(f=new Anb(b.k);f.a<f.c.c.length;){e=RD(ynb(f),18);Ysb(g,e.c);Ysb(h,e.d)}d=g.a.gc()-h.a.gc();if(d<0){aHb(i,true,(Cmd(),ymd));aHb(i,false,zmd)}else if(d>0){aHb(i,false,(Cmd(),ymd));aHb(i,true,zmd)}Umb(b.g,new Elc(a,c));Zjb(a.g,b,c)} +function Ugb(){Ugb=geb;var a;Qgb=cD(WC(kE,1),Pwe,28,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]);Rgb=$C(kE,Pwe,28,37,15,1);Sgb=cD(WC(kE,1),Pwe,28,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]);Tgb=$C(lE,rxe,28,37,14,1);for(a=2;a<=36;a++){Rgb[a]=eE($wnd.Math.pow(a,Qgb[a]));Tgb[a]=Fdb(Sve,Rgb[a])}} +function tsd(a){var b;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i!=1){throw Adb(new agb(tHe+(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i))}b=new Ejd;!!BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84))&&ye(b,usd(a,BGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)),false));!!BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))&&ye(b,usd(a,BGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84)),true));return b} +function zRc(a,b){var c,d,e,f,g;b.d?(e=a.a.c==(wQc(),vQc)?Z2b(b.b):a3b(b.b)):(e=a.a.c==(wQc(),uQc)?Z2b(b.b):a3b(b.b));f=false;for(d=new is(Mr(e.a.Kc(),new ir));gs(d);){c=RD(hs(d),18);g=Heb(a.a.f[a.a.g[b.b.p].p]);if(!g&&!W0b(c)&&c.c.i.c==c.d.i.c){continue}if(Heb(a.a.n[a.a.g[b.b.p].p])||Heb(a.a.n[a.a.g[b.b.p].p])){continue}f=true;if(Zsb(a.b,a.a.g[rRc(c,b.b).p])){b.c=true;b.a=c;return b}}b.c=f;b.a=null;return b} +function QJd(a,b,c){var d,e,f,g,h,i,j;d=c.gc();if(d==0){return false}else{if(a.Pj()){i=a.Qj();ZId(a,b,c);g=d==1?a.Ij(3,null,c.Kc().Pb(),b,i):a.Ij(5,null,c,b,i);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){j=a.xj(e);h=a.Nj(j,h);h=h}if(!h){a.Jj(g)}else{h.nj(g);h.oj()}}else{a.Jj(g)}}else{ZId(a,b,c);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){h=a.Nj(a.xj(e),h)}!!h&&h.oj()}}return true}} +function WJd(a,b,c){var d,e,f,g,h;if(a.Pj()){e=null;f=a.Qj();d=a.Ij(1,h=(g=a.Dj(b,a.Zi(b,c)),g),c,b,f);if(a.Mj()&&!(a.Yi()&&!!h?pb(h,c):dE(h)===dE(c))){!!h&&(e=a.Oj(h,e));e=a.Nj(c,e);if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}return h}else{h=(g=a.Dj(b,a.Zi(b,c)),g);if(a.Mj()&&!(a.Yi()&&!!h?pb(h,c):dE(h)===dE(c))){e=null;!!h&&(e=a.Oj(h,null));e=a.Nj(c,e);!!e&&e.oj()}return h}} +function nUb(a,b){var c,d,e,f,g,h,i,j,k;a.e=b;a.f=RD(mQb(b,(JVb(),IVb)),234);eUb(b);a.d=$wnd.Math.max(b.e.c.length*16+b.c.c.length,256);if(!Heb(TD(mQb(b,(yVb(),_Ub))))){k=a.e.e.c.length;for(i=new Anb(b.e);i.a<i.c.c.length;){h=RD(ynb(i),153);j=h.d;j.a=Iwb(a.f)*k;j.b=Iwb(a.f)*k}}c=b.b;for(f=new Anb(b.c);f.a<f.c.c.length;){e=RD(ynb(f),289);d=RD(mQb(e,oVb),17).a;if(d>0){for(g=0;g<d;g++){Rmb(c,new WTb(e))}YTb(e)}}} +function NId(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;m=new OC(a.Zg());sC(b,GIe,m);if(c&&!a.Xg().a.dc()){k=new MB;sC(b,'logs',k);h=0;for(o=new Ppb(a.Xg().b.Kc());o.b.Ob();){n=WD(o.b.Pb());l=new OC(n);JB(k,h);LB(k,h,l);++h}}if(d){j=new hC(a.Wg());sC(b,'executionTime',j)}if(!a.Yg().a.dc()){g=new MB;sC(b,iIe,g);h=0;for(f=new Ppb(a.Yg().b.Kc());f.b.Ob();){e=RD(f.b.Pb(),871);i=new uC;JB(g,h);LB(g,h,i);NId(e,i,c,d);++h}}} +function rue(){rue=geb;Gie();que=new sue;cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(wLe)])]);cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(xLe)])]);cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue(yLe)]),cD(WC(B7,1),_Le,600,0,[new oue(xLe)])]);new ejb('-1');cD(WC(B7,2),Nve,381,0,[cD(WC(B7,1),_Le,600,0,[new oue('\\c+')])]);new ejb('0');new ejb('0');new ejb('1');new ejb('0');new ejb(ILe)} +function wac(a,b){var c,d,e,f,g,h,i,j,k,l;b.Ug('Hypernodes processing',1);for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(h=new Anb(d.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(Heb(TD(mQb(g,(yCc(),MAc))))&&g.j.c.length<=2){l=0;k=0;c=0;f=0;for(j=new Anb(g.j);j.a<j.c.c.length;){i=RD(ynb(j),12);switch(i.j.g){case 1:++l;break;case 2:++k;break;case 3:++c;break;case 4:++f;}}l==0&&c==0&&vac(a,g,f<=k)}}}b.Vg()} +function MUc(a,b,c,d,e){var f,g,h,i,j,k,l;for(g=new Anb(b);g.a<g.c.c.length;){f=RD(ynb(g),18);i=f.c;if(c.a._b(i)){j=(dVc(),bVc)}else if(d.a._b(i)){j=(dVc(),cVc)}else{throw Adb(new agb('Source port must be in one of the port sets.'))}k=f.d;if(c.a._b(k)){l=(dVc(),bVc)}else if(d.a._b(k)){l=(dVc(),cVc)}else{throw Adb(new agb('Target port must be in one of the port sets.'))}h=new wVc(f,j,l);Zjb(a.b,f,h);ZEb(e.c,h)}} +function i2d(a){var b,c;if(!!a.c&&a.c.Vh()){c=RD(a.c,54);a.c=RD(Vvd(a,c),142);if(a.c!=c){(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,9,2,c,a.c));if(ZD(a.Cb,411)){a.Db>>16==-15&&a.Cb.Yh()&&pKd(new O3d(a.Cb,9,13,c,a.c,fZd(o4d(RD(a.Cb,62)),a)))}else if(ZD(a.Cb,90)){if(a.Db>>16==-23&&a.Cb.Yh()){b=a.c;ZD(b,90)||(b=(JTd(),zTd));ZD(c,90)||(c=(JTd(),zTd));pKd(new O3d(a.Cb,9,10,c,b,fZd(tYd(RD(a.Cb,29)),a)))}}}}return a.c} +function lac(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Hyperedge merging',1);jac(a,b);i=new Jkb(b.b,0);while(i.b<i.d.gc()){h=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),30));k=h.a;if(k.c.length==0){continue}d=null;e=null;f=null;g=null;for(j=0;j<k.c.length;j++){d=(tFb(j,k.c.length),RD(k.c[j],10));e=d.k;if(e==(r3b(),o3b)&&g==o3b){l=hac(d,f);if(l.a){kac(d,f,l.b,l.c);tFb(j,k.c.length);$Eb(k.c,j,1);--j;d=f;e=g}}f=d;g=e}}c.Vg()} +function U$d(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;if(b==c){return true}else{b=V$d(a,b);c=V$d(a,c);d=h2d(b);if(d){k=h2d(c);if(k!=d){if(!k){return false}else{i=d.mk();o=k.mk();return i==o&&i!=null}}else{g=(!b.d&&(b.d=new XZd(o7,b,1)),b.d);f=g.i;m=(!c.d&&(c.d=new XZd(o7,c,1)),c.d);if(f==m.i){for(j=0;j<f;++j){e=RD(QHd(g,j),89);l=RD(QHd(m,j),89);if(!U$d(a,e,l)){return false}}}return true}}else{h=b.e;n=c.e;return h==n}}} +function vge(a,b,c,d){var e,f,g,h,i,j,k,l;if(qke(a.e,b)){l=pke(a.e.Dh(),b);f=RD(a.g,124);k=null;i=-1;h=-1;e=0;for(j=0;j<a.i;++j){g=f[j];if(l.am(g.Lk())){e==c&&(i=j);if(e==d){h=j;k=g.md()}++e}}if(i==-1){throw Adb(new veb(MIe+c+NIe+e))}if(h==-1){throw Adb(new veb(OIe+d+NIe+e))}uLd(a,i,h);Mvd(a.e)&&eZd(a,fge(a,7,b,sgb(d),k,c,true));return k}else{throw Adb(new agb('The feature must be many-valued to support move'))}} +function j2b(a,b,c,d){var e,f,g,h,i;i=new sjd(b.n);i.a+=b.o.a/2;i.b+=b.o.b/2;h=Kfb(UD(mQb(b,(yCc(),ABc))));f=a.f;g=a.d;e=a.c;switch(RD(mQb(b,(Ywc(),hwc)),64).g){case 1:i.a+=g.b+e.a-c/2;i.b=-d-h;b.n.b=-(g.d+h+e.b);break;case 2:i.a=f.a+g.b+g.c+h;i.b+=g.d+e.b-d/2;b.n.a=f.a+g.c+h-e.a;break;case 3:i.a+=g.b+e.a-c/2;i.b=f.b+g.d+g.a+h;b.n.b=f.b+g.a+h-e.b;break;case 4:i.a=-c-h;i.b+=g.d+e.b-d/2;b.n.a=-(g.b+h+e.a);}return i} +function Z4b(a){var b,c,d,e,f,g;d=new d1b;kQb(d,a);dE(mQb(d,(yCc(),rAc)))===dE((Cmd(),Amd))&&pQb(d,rAc,i2b(d));if(mQb(d,(rid(),qid))==null){g=RD(Lje(a),167);pQb(d,qid,fE(g.of(qid)))}pQb(d,(Ywc(),Awc),a);pQb(d,kwc,(b=RD(mfb(iX),9),new Fsb(b,RD(WEb(b,b.length),9),0)));e=FJb((!vCd(a)?null:(lud(),new zud(vCd(a))),lud(),new Fud(!vCd(a)?null:new zud(vCd(a)),a)),zmd);f=RD(mQb(d,qBc),107);c=d.d;B2b(c,f);B2b(c,e);return d} +function Nec(a,b,c){var d,e;d=b.c.i;e=c.d.i;if(d.k==(r3b(),o3b)){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12));pQb(a,uwc,TD(mQb(d,uwc)))}else if(d.k==n3b){pQb(a,(Ywc(),vwc),RD(mQb(d,vwc),12));pQb(a,wwc,RD(mQb(d,wwc),12));pQb(a,uwc,(Geb(),true))}else if(e.k==n3b){pQb(a,(Ywc(),vwc),RD(mQb(e,vwc),12));pQb(a,wwc,RD(mQb(e,wwc),12));pQb(a,uwc,(Geb(),true))}else{pQb(a,(Ywc(),vwc),b.c);pQb(a,wwc,c.d)}} +function wJb(a){var b,c,d,e,f,g,h;a.o=new wmb;d=new Yub;for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);CIb(f).c.length==1&&(Pub(d,f,d.c.b,d.c),true)}while(d.b!=0){f=RD(d.b==0?null:(sFb(d.b!=0),Wub(d,d.a.a)),125);if(CIb(f).c.length==0){continue}b=RD(Vmb(CIb(f),0),218);c=f.g.a.c.length>0;h=oIb(b,f);c?FIb(h.b,b):FIb(h.g,b);CIb(h).c.length==1&&(Pub(d,h,d.c.b,d.c),true);e=new Ptd(f,b);hmb(a.o,e);Ymb(a.e.a,f)}} +function SQb(a,b){var c,d,e,f,g,h,i;d=$wnd.Math.abs(Oid(a.b).a-Oid(b.b).a);h=$wnd.Math.abs(Oid(a.b).b-Oid(b.b).b);e=0;i=0;c=1;g=1;if(d>a.b.b/2+b.b.b/2){e=$wnd.Math.min($wnd.Math.abs(a.b.c-(b.b.c+b.b.b)),$wnd.Math.abs(a.b.c+a.b.b-b.b.c));c=1-e/d}if(h>a.b.a/2+b.b.a/2){i=$wnd.Math.min($wnd.Math.abs(a.b.d-(b.b.d+b.b.a)),$wnd.Math.abs(a.b.d+a.b.a-b.b.d));g=1-i/h}f=$wnd.Math.min(c,g);return (1-f)*$wnd.Math.sqrt(d*d+h*h)} +function LUc(a){var b,c,d,e;NUc(a,a.e,a.f,(dVc(),bVc),true,a.c,a.i);NUc(a,a.e,a.f,bVc,false,a.c,a.i);NUc(a,a.e,a.f,cVc,true,a.c,a.i);NUc(a,a.e,a.f,cVc,false,a.c,a.i);MUc(a,a.c,a.e,a.f,a.i);d=new Jkb(a.i,0);while(d.b<d.d.gc()){b=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),131));e=new Jkb(a.i,d.b);while(e.b<e.d.gc()){c=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),131));KUc(b,c)}}WUc(a.i,RD(mQb(a.d,(Ywc(),Lwc)),234));ZUc(a.i)} +function FXd(a,b){var c,d;if(b!=null){d=DXd(a);if(d){if((d.i&1)!=0){if(d==xdb){return $D(b)}else if(d==kE){return ZD(b,17)}else if(d==jE){return ZD(b,161)}else if(d==gE){return ZD(b,222)}else if(d==hE){return ZD(b,180)}else if(d==iE){return _D(b)}else if(d==wdb){return ZD(b,191)}else if(d==lE){return ZD(b,168)}}else{return PRd(),c=RD(Wjb(ORd,d),57),!c||c.fk(b)}}else if(ZD(b,58)){return a.dl(RD(b,58))}}return false} +function zqe(){zqe=geb;var a,b,c,d,e,f,g,h,i;xqe=$C(gE,YHe,28,255,15,1);yqe=$C(hE,zwe,28,64,15,1);for(b=0;b<255;b++){xqe[b]=-1}for(c=90;c>=65;c--){xqe[c]=c-65<<24>>24}for(d=122;d>=97;d--){xqe[d]=d-97+26<<24>>24}for(e=57;e>=48;e--){xqe[e]=e-48+52<<24>>24}xqe[43]=62;xqe[47]=63;for(f=0;f<=25;f++)yqe[f]=65+f&Bwe;for(g=26,i=0;g<=51;++g,i++)yqe[g]=97+i&Bwe;for(a=52,h=0;a<=61;++a,h++)yqe[a]=48+h&Bwe;yqe[62]=43;yqe[63]=47} +function uib(a,b){var c,d,e,f,g,h;e=xib(a);h=xib(b);if(e==h){if(a.e==b.e&&a.a<54&&b.a<54){return a.f<b.f?-1:a.f>b.f?1:0}d=a.e-b.e;c=(a.d>0?a.d:$wnd.Math.floor((a.a-1)*xxe)+1)-(b.d>0?b.d:$wnd.Math.floor((b.a-1)*xxe)+1);if(c>d+1){return e}else if(c<d-1){return -e}else{f=(!a.c&&(a.c=ojb(Hdb(a.f))),a.c);g=(!b.c&&(b.c=ojb(Hdb(b.f))),b.c);d<0?(f=Wib(f,Sjb(-d))):d>0&&(g=Wib(g,Sjb(d)));return Qib(f,g)}}else return e<h?-1:1} +function pUb(a,b,c){var d,e,f,g,h,i,j,k;c.Ug(Pze,1);a.vf(b);f=0;while(a.xf(f)&&!c.$g()){a.wf();for(k=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(k);){i=RD(hs(k),309);for(h=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(h);){g=RD(hs(h),309);if(g!=i){e=a.uf(g,i);!!e&&$id(i.c,e)}}}for(j=Fl(Al(cD(WC(cJ,1),rve,20,0,[b.e,b.d,b.b])));gs(j);){i=RD(hs(j),309);d=i.c;_id(d,-a.d,-a.d,a.d,a.d);$id(i.d,d);d.a=0;d.b=0}++f}c.Vg()} +function H$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.dc()){return new pjd}j=0;l=0;for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);f=d.f;j=$wnd.Math.max(j,f.a);l+=f.a*f.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(l)*Kfb(UD(mQb(RD(a.Kc().Pb(),36),(yCc(),Tzc)))));m=0;n=0;i=0;c=b;for(h=a.Kc();h.Ob();){g=RD(h.Pb(),36);k=g.f;if(m+k.a>j){m=0;n+=i+b;i=0}w$b(g,m,n);c=$wnd.Math.max(c,m+k.a);i=$wnd.Math.max(i,k.b);m+=k.a+b}return new rjd(c+b,n+i+b)} +function osd(a,b){var c,d,e,f,g,h,i;if(!MCd(a)){throw Adb(new dgb(sHe))}d=MCd(a);f=d.g;e=d.f;if(f<=0&&e<=0){return qpd(),opd}h=a.i;i=a.j;switch(b.g){case 2:case 1:if(h<0){return qpd(),ppd}else if(h+a.g>f){return qpd(),Xod}break;case 4:case 3:if(i<0){return qpd(),Yod}else if(i+a.f>e){return qpd(),npd}}g=(h+a.g/2)/f;c=(i+a.f/2)/e;return g+c<=1&&g-c<=0?(qpd(),ppd):g+c>=1&&g-c>=0?(qpd(),Xod):c<0.5?(qpd(),Yod):(qpd(),npd)} +function Djb(a,b,c,d,e){var f,g;f=Bdb(Cdb(b[0],yxe),Cdb(d[0],yxe));a[0]=Ydb(f);f=Tdb(f,32);if(c>=e){for(g=1;g<e;g++){f=Bdb(f,Bdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<c;g++){f=Bdb(f,Cdb(b[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}}else{for(g=1;g<c;g++){f=Bdb(f,Bdb(Cdb(b[g],yxe),Cdb(d[g],yxe)));a[g]=Ydb(f);f=Tdb(f,32)}for(;g<e;g++){f=Bdb(f,Cdb(d[g],yxe));a[g]=Ydb(f);f=Tdb(f,32)}}Ddb(f,0)!=0&&(a[g]=Ydb(f))} +function yte(a){Vse();var b,c,d,e,f,g;if(a.e!=4&&a.e!=5)throw Adb(new agb('Token#complementRanges(): must be RANGE: '+a.e));f=a;vte(f);ste(f);d=f.b.length+2;f.b[0]==0&&(d-=2);c=f.b[f.b.length-1];c==MLe&&(d-=2);e=(++Use,new xte(4));e.b=$C(kE,Pwe,28,d,15,1);g=0;if(f.b[0]>0){e.b[g++]=0;e.b[g++]=f.b[0]-1}for(b=1;b<f.b.length-2;b+=2){e.b[g++]=f.b[b]+1;e.b[g++]=f.b[b+1]-1}if(c!=MLe){e.b[g++]=c+1;e.b[g]=MLe}e.a=true;return e} +function zac(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Layer constraint edge reversal',1);for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);k=-1;c=new bnb;j=t2b(f.a);for(e=0;e<j.length;e++){d=RD(mQb(j[e],(Ywc(),owc)),311);if(k==-1){d!=(Gvc(),Fvc)&&(k=e)}else{if(d==(Gvc(),Fvc)){g3b(j[e],null);f3b(j[e],k++,f)}}d==(Gvc(),Dvc)&&(ZEb(c.c,j[e]),true)}for(i=new Anb(c);i.a<i.c.c.length;){h=RD(ynb(i),10);g3b(h,null);g3b(h,f)}}b.Vg()} +function nLd(a,b,c){var d,e,f,g,h,i,j,k;d=c.gc();if(d==0){return false}else{if(a.Pj()){j=a.Qj();IHd(a,b,c);g=d==1?a.Ij(3,null,c.Kc().Pb(),b,j):a.Ij(5,null,c,b,j);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){k=a.g[e];h=a.Nj(k,h);h=a.Uj(k,h)}if(!h){a.Jj(g)}else{h.nj(g);h.oj()}}else{a.Jj(g)}}else{IHd(a,b,c);if(a.Mj()){h=d<100?null:new gLd(d);f=b+d;for(e=b;e<f;++e){i=a.g[e];h=a.Nj(i,h)}!!h&&h.oj()}}return true}} +function m9b(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Hierarchical port dummy size processing',1);i=new bnb;k=new bnb;d=Kfb(UD(mQb(a,(yCc(),UBc))));c=d*2;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);i.c.length=0;k.c.length=0;for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){j=RD(mQb(g,(Ywc(),hwc)),64);j==(qpd(),Yod)?(ZEb(i.c,g),true):j==npd&&(ZEb(k.c,g),true)}}n9b(i,true,c);n9b(k,false,c)}b.Vg()} +function wSc(a,b,c,d){var e,f,g,h,i;for(g=new Anb(a.k);g.a<g.c.c.length;){e=RD(ynb(g),132);if(!d||e.c==(fTc(),dTc)){i=e.b;if(i.g<0&&e.d>0){PSc(i,i.d-e.d);e.c==(fTc(),dTc)&&NSc(i,i.a-e.d);i.d<=0&&i.i>0&&(Pub(b,i,b.c.b,b.c),true)}}}for(f=new Anb(a.f);f.a<f.c.c.length;){e=RD(ynb(f),132);if(!d||e.c==(fTc(),dTc)){h=e.a;if(h.g<0&&e.d>0){QSc(h,h.i-e.d);e.c==(fTc(),dTc)&&OSc(h,h.b-e.d);h.i<=0&&h.d>0&&(Pub(c,h,c.c.b,c.c),true)}}}} +function drd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;yob();_mb(a,new Mrd);g=gv(a);n=new bnb;m=new bnb;h=null;i=0;while(g.b!=0){f=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),163);if(!h||urd(h)*trd(h)/2<urd(f)*trd(f)){h=f;ZEb(n.c,f)}else{i+=urd(f)*trd(f);ZEb(m.c,f);if(m.c.length>1&&(i>urd(h)*trd(h)/2||g.b==0)){l=new zrd(m);k=urd(h)/trd(h);j=ird(l,b,new z3b,c,d,e,k);$id(hjd(l.e),j);h=l;ZEb(n.c,l);i=0;m.c.length=0}}}Tmb(n,m);return n} +function hib(a,b,c,d,e){gib();var f,g,h,i,j,k,l;vFb(a,'src');vFb(c,'dest');l=rb(a);i=rb(c);qFb((l.i&4)!=0,'srcType is not an array');qFb((i.i&4)!=0,'destType is not an array');k=l.c;g=i.c;qFb((k.i&1)!=0?k==g:(g.i&1)==0,"Array types don't match");iib(a,b,c,d,e);if((k.i&1)==0&&l!=i){j=SD(a);f=SD(c);if(dE(a)===dE(c)&&b<d){b+=e;for(h=d+e;h-->d;){bD(f,h,j[--b])}}else{for(h=d+e;d<h;){bD(f,d++,j[b++])}}}else{VEb(a,b,c,d,e,true)}} +function crd(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Box layout',2);e=Mfb(UD(Gxd(a,(hkd(),gkd))));f=RD(Gxd(a,dkd),107);c=Heb(TD(Gxd(a,$jd)));d=Heb(TD(Gxd(a,_jd)));switch(RD(Gxd(a,Yjd),320).g){case 0:g=(k=new dnb((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a)),yob(),_mb(k,new prd(d)),k);h=vsd(a);i=UD(Gxd(a,Xjd));(i==null||(uFb(i),i)<=0)&&(i=1.3);j=grd(g,e,f,h.a,h.b,c,(uFb(i),i));Esd(a,j.a,j.b,false,true);break;default:hrd(a,e,f,c);}b.Vg()} +function uUc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o;m=tUc(a,c);for(i=0;i<b;i++){Ikb(e,c);n=new bnb;o=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),418));for(k=m+i;k<a.b;k++){h=o;o=(sFb(d.b<d.d.gc()),RD(d.d.Xb(d.c=d.b++),418));Rmb(n,new AUc(h,o,c))}for(l=m+i;l<a.b;l++){sFb(d.b>0);d.a.Xb(d.c=--d.b);l>m+i&&Ckb(d)}for(g=new Anb(n);g.a<g.c.c.length;){f=RD(ynb(g),418);Ikb(d,f)}if(i<b-1){for(j=m+i;j<a.b;j++){sFb(d.b>0);d.a.Xb(d.c=--d.b)}}}} +function gte(){Vse();var a,b,c,d,e,f;if(Fse)return Fse;a=(++Use,new xte(4));ute(a,hte(WLe,true));wte(a,hte('M',true));wte(a,hte('C',true));f=(++Use,new xte(4));for(d=0;d<11;d++){rte(f,d,d)}b=(++Use,new xte(4));ute(b,hte('M',true));rte(b,4448,4607);rte(b,65438,65439);e=(++Use,new iue(2));hue(e,a);hue(e,Ese);c=(++Use,new iue(2));c.Jm($se(f,hte('L',true)));c.Jm(b);c=(++Use,new Kte(3,c));c=(++Use,new Qte(e,c));Fse=c;return Fse} +function vhb(a,b){var c,d,e,f,g,h,i,j;c=new RegExp(b,'g');i=$C(qJ,Nve,2,0,6,1);d=0;j=a;f=null;while(true){h=c.exec(j);if(h==null||j==''){i[d]=j;break}else{g=h.index;i[d]=(AFb(0,g,j.length),j.substr(0,g));j=zhb(j,g+h[0].length,j.length);c.lastIndex=0;if(f==j){i[d]=(AFb(0,1,j.length),j.substr(0,1));j=(BFb(1,j.length+1),j.substr(1))}f=j;++d}}if(a.length>0){e=i.length;while(e>0&&i[e-1]==''){--e}e<i.length&&(i.length=e)}return i} +function h_c(){h_c=geb;U$c=new A3b(20);T$c=new mGd((umd(),tld),U$c);_$c=new mGd(fmd,20);$$c=new mGd(_ld,3);E$c=new mGd(Dkd,Yze);X$c=new mGd(Rld,sgb(1));Z$c=new mGd(Vld,(Geb(),true));G$c=Mkd;I$c=(Cmd(),Amd);H$c=new mGd(Nkd,I$c);L$c=ald;M$c=bld;O$c=kld;P$c=mld;Q$c=nld;R$c=pld;N$c=ild;S$c=sld;V$c=Lld;g_c=(B$c(),z$c);Y$c=w$c;c_c=mmd;e_c=qmd;b_c=lmd;a_c=kmd;d_c=(mqd(),jqd);new mGd(nmd,d_c);W$c=v$c;K$c=t$c;f_c=y$c;F$c=r$c;J$c=s$c} +function bgd(a){var b,c;b=WD(Gxd(a,(umd(),Akd)));if(cgd(b,a)){return}if(!Hxd(a,Tld)&&((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i!=0||Heb(TD(Gxd(a,$kd))))){if(b==null||Dhb(b).length==0){if(!cgd(sxe,a)){c=Zhb(Zhb(new dib('Unable to load default layout algorithm '),sxe),' for unconfigured node ');Csd(a,c);throw Adb(new Jed(c.a))}}else{c=Zhb(Zhb(new dib("Layout algorithm '"),b),"' not found for ");Csd(a,c);throw Adb(new Jed(c.a))}}} +function $Kb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;c=a.i;b=a.n;if(a.b==0){n=c.c+b.b;m=c.b-b.b-b.c;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];dKb(e,n,m)}}else{d=bLb(a,false);dKb(a.a[0],c.c+b.b,d[0]);dKb(a.a[2],c.c+c.b-b.c-d[2],d[2]);l=c.b-b.b-b.c;if(d[0]>0){l-=d[0]+a.c;d[0]+=a.c}d[2]>0&&(l-=d[2]+a.c);d[1]=$wnd.Math.max(d[1],l);dKb(a.a[1],c.c+b.b+d[0]-(d[1]-l)/2,d[1])}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];ZD(e,336)&&RD(e,336).lf()}} +function iRc(a){var b,c,d,e,f,g,h,i,j,k,l;l=new hRc;l.d=0;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);l.d+=f.a.c.length}d=0;e=0;l.a=$C(kE,Pwe,28,a.b.c.length,15,1);j=0;k=0;l.e=$C(kE,Pwe,28,l.d,15,1);for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),30);b.p=d++;l.a[b.p]=e++;k=0;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j++;l.e[h.p]=k++}}l.c=new mRc(l);l.b=ev(l.d);jRc(l,a);l.f=ev(l.d);kRc(l,a);return l} +function M9c(a,b){var c,d,e,f;f=RD(Vmb(a.n,a.n.c.length-1),209).d;a.p=$wnd.Math.min(a.p,b.g);a.r=$wnd.Math.max(a.r,f);a.g=$wnd.Math.max(a.g,b.g+(a.b.c.length==1?0:a.i));a.o=$wnd.Math.min(a.o,b.f);a.e+=b.f+(a.b.c.length==1?0:a.i);a.f=$wnd.Math.max(a.f,b.f);e=a.n.c.length>0?(a.n.c.length-1)*a.i:0;for(d=new Anb(a.n);d.a<d.c.c.length;){c=RD(ynb(d),209);e+=c.a}a.d=e;a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);Ead(a.j)} +function CTb(a,b){var c,d,e,f,g,h,i,j,k,l;k=TD(mQb(b,(yVb(),pVb)));if(k==null||(uFb(k),k)){l=$C(xdb,Hye,28,b.e.c.length,16,1);g=yTb(b);e=new Yub;for(j=new Anb(b.e);j.a<j.c.c.length;){h=RD(ynb(j),153);c=zTb(a,h,null,null,l,g);if(c){kQb(c,b);Pub(e,c,e.c.b,e.c)}}if(e.b>1){for(d=Sub(e,0);d.b!=d.d.c;){c=RD(evb(d),235);f=0;for(i=new Anb(c.e);i.a<i.c.c.length;){h=RD(ynb(i),153);h.a=f++}}}return e}return dv(cD(WC(tP,1),Jze,235,0,[b]))} +function rYd(a){var b,c,d,e,f,g,h;if(!a.g){h=new Z$d;b=iYd;g=b.a.zc(a,b);if(g==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);YGd(h,rYd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}e=h.i;for(f=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));f.e!=f.i.gc();++e){BWd(RD(bMd(f),461),e)}YGd(h,(!a.s&&(a.s=new C5d(y7,a,21,17)),a.s));VHd(h);a.g=new R$d(a,h);a.i=RD(h.g,254);a.i==null&&(a.i=kYd);a.p=null;yYd(a).b&=-5}return a.g} +function yee(a,b){var c,d,e,f,g,h,i,j,k;c=b.qi(a.a);if(c){i=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),'memberTypes'));if(i!=null){j=new bnb;for(f=vhb(i,'\\w'),g=0,h=f.length;g<h;++g){e=f[g];d=e.lastIndexOf('#');k=d==-1?Wee(a,b.jk(),e):d==0?Vee(a,null,(BFb(1,e.length+1),e.substr(1))):Vee(a,(AFb(0,d,e.length),e.substr(0,d)),(BFb(d+1,e.length+1),e.substr(d+1)));ZD(k,156)&&Rmb(j,RD(k,156))}return j}}return yob(),yob(),vob} +function _Kb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;d=a.i;c=a.n;if(a.b==0){b=aLb(a,false);eKb(a.a[0],d.d+c.d,b[0]);eKb(a.a[2],d.d+d.a-c.a-b[2],b[2]);m=d.a-c.d-c.a;l=m;if(b[0]>0){b[0]+=a.c;l-=b[0]}b[2]>0&&(l-=b[2]+a.c);b[1]=$wnd.Math.max(b[1],l);eKb(a.a[1],d.d+c.d+b[0]-(b[1]-l)/2,b[1])}else{o=d.d+c.d;n=d.a-c.d-c.a;for(g=a.a,i=0,k=g.length;i<k;++i){e=g[i];eKb(e,o,n)}}for(f=a.a,h=0,j=f.length;h<j;++h){e=f[h];ZD(e,336)&&RD(e,336).mf()}} +function Erc(a){var b,c,d,e,f,g,h,i,j,k;k=$C(kE,Pwe,28,a.b.c.length+1,15,1);j=new _sb;d=0;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);k[d++]=j.a.gc();for(i=new Anb(e.a);i.a<i.c.c.length;){g=RD(ynb(i),10);for(c=new is(Mr(a3b(g).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);j.a.zc(b,j)}}for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);for(c=new is(Mr(Z2b(g).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);j.a.Bc(b)!=null}}}return k} +function dge(a,b,c,d){var e,f,g,h,i;i=pke(a.e.Dh(),b);e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&pb(f,c)){return true}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(i.am(f.Lk())&&pb(c,f.md())){return true}}if(d){for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&dE(c)===dE(Age(a,RD(f.md(),58)))){return true}}}}else{for(g=0;g<a.i;++g){f=e[g];if(i.am(f.Lk())&&f.md()==null){return false}}}return false} +function wee(a,b){var c,d,e,f,g,h;c=b.qi(a.a);if(c){h=WD($Nd((!c.b&&(c.b=new SVd((JTd(),FTd),C8,c)),c.b),FIe));if(h!=null){e=thb(h,Fhb(35));d=b.qk();if(e==-1){g=Uee(a,BXd(d));f=h}else if(e==0){g=null;f=(BFb(1,h.length+1),h.substr(1))}else{g=(AFb(0,e,h.length),h.substr(0,e));f=(BFb(e+1,h.length+1),h.substr(e+1))}switch(yfe(Qee(a,b))){case 2:case 3:{return Jee(a,d,g,f)}case 0:case 4:case 5:case 6:{return Mee(a,d,g,f)}}}}return null} +function FQb(a,b,c,d){var e,f,g,h;h=c;for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),225);e=RD(f.b,68);if($y(a.b.c,e.b.c+e.b.b)<=0&&$y(e.b.c,a.b.c+a.b.b)<=0&&$y(a.b.d,e.b.d+e.b.a)<=0&&$y(e.b.d,a.b.d+a.b.a)<=0){if($y(e.b.c,a.b.c+a.b.b)==0&&d.a<0||$y(e.b.c+e.b.b,a.b.c)==0&&d.a>0||$y(e.b.d,a.b.d+a.b.a)==0&&d.b<0||$y(e.b.d+e.b.a,a.b.d)==0&&d.b>0){h=0;break}}else{h=$wnd.Math.min(h,PQb(a,e,d))}h=$wnd.Math.min(h,FQb(a,f,h,d))}return h} +function lsd(a,b){var c,d,e,f,g,h,i;if(a.b<2){throw Adb(new agb('The vector chain must contain at least a source and a target point.'))}e=(sFb(a.b!=0),RD(a.a.a.c,8));Nzd(b,e.a,e.b);i=new mMd((!b.a&&(b.a=new XZd(D4,b,5)),b.a));g=Sub(a,1);while(g.a<a.b-1){h=RD(evb(g),8);if(i.e!=i.i.gc()){c=RD(bMd(i),377)}else{c=(bvd(),d=new Xxd,d);kMd(i,c)}Uxd(c,h.a,h.b)}while(i.e!=i.i.gc()){bMd(i);cMd(i)}f=(sFb(a.b!=0),RD(a.c.b.c,8));Gzd(b,f.a,f.b)} +function Ege(a,b,c,d){var e,f,g,h,i,j;j=pke(a.e.Dh(),b);g=RD(a.g,124);if(qke(a.e,b)){if(b.Si()){f=kge(a,b,d,ZD(b,102)&&(RD(b,19).Bb&txe)!=0);if(f>=0&&f!=c){throw Adb(new agb(LIe))}}e=0;for(i=0;i<a.i;++i){h=g[i];if(j.am(h.Lk())){if(e==c){return RD(eHd(a,i,(nke(),RD(b,69).xk()?RD(d,76):oke(b,d))),76)}++e}}throw Adb(new veb(HJe+c+NIe+e))}else{for(i=0;i<a.i;++i){h=g[i];if(j.am(h.Lk())){return nke(),RD(b,69).xk()?h:h.md()}}return null}} +function Epc(a,b){var c,d,e,f,g,h,i,j,k;c=0;for(e=new Anb((tFb(0,a.c.length),RD(a.c[0],105)).g.b.j);e.a<e.c.c.length;){d=RD(ynb(e),12);d.p=c++}b==(qpd(),Yod)?_mb(a,new Mpc):_mb(a,new Qpc);h=0;k=a.c.length-1;while(h<k){g=(tFb(h,a.c.length),RD(a.c[h],105));j=(tFb(k,a.c.length),RD(a.c[k],105));f=b==Yod?g.c:g.a;i=b==Yod?j.a:j.c;Gpc(g,b,(enc(),cnc),f);Gpc(j,b,bnc,i);++h;--k}h==k&&Gpc((tFb(h,a.c.length),RD(a.c[h],105)),b,(enc(),anc),null)} +function lJc(a,b,c,d){var e,f,g,h,i,j;g=new zJc(a,b,c);i=new Jkb(d,0);e=false;while(i.b<i.d.gc()){h=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),239));if(h==b||h==c){Ckb(i)}else if(!e&&Kfb(pJc(h.g,h.d[0]).a)>Kfb(pJc(g.g,g.d[0]).a)){sFb(i.b>0);i.a.Xb(i.c=--i.b);Ikb(i,g);e=true}else if(!!h.e&&h.e.gc()>0){f=(!h.e&&(h.e=new bnb),h.e).Mc(b);j=(!h.e&&(h.e=new bnb),h.e).Mc(c);if(f||j){(!h.e&&(h.e=new bnb),h.e).Fc(g);++g.c}}}e||(ZEb(d.c,g),true)} +function H3c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;l=a.a.i+a.a.g/2;m=a.a.i+a.a.g/2;o=b.i+b.g/2;q=b.j+b.f/2;h=new rjd(o,q);j=RD(Gxd(b,(umd(),Qld)),8);j.a=j.a+l;j.b=j.b+m;f=(h.b-j.b)/(h.a-j.a);d=h.b-f*h.a;p=c.i+c.g/2;r=c.j+c.f/2;i=new rjd(p,r);k=RD(Gxd(c,Qld),8);k.a=k.a+l;k.b=k.b+m;g=(i.b-k.b)/(i.a-k.a);e=i.b-g*i.a;n=(d-e)/(g-f);if(j.a<n&&h.a<n||n<j.a&&n<h.a){return false}else if(k.a<n&&i.a<n||n<k.a&&n<i.a){return false}return true} +function GDd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;m=RD(Wjb(a.c,b),190);if(!m){throw Adb(new CDd('Edge did not exist in input.'))}j=uDd(m);f=cve((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a));h=!f;if(h){n=new MB;c=new pFd(a,j,n);ave((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a),c);sC(m,mIe,n)}e=Hxd(b,(umd(),cld));if(e){k=RD(Gxd(b,cld),75);g=!k||bve(k);i=!g;if(i){l=new MB;d=new xFd(l);xgb(k,d);sC(m,'junctionPoints',l)}}sDd(m,'container',kzd(b).k);return null} +function fZc(a,b,c,d){var e,f,g,h,i,j;if(!gr(b)){j=c.eh((ZD(b,16)?RD(b,16).gc():Kr(b.Kc()))/a.a|0);j.Ug(OEe,1);i=new iZc;h=0;if(d==(Cmd(),ymd)||d==zmd){for(g=b.Kc();g.Ob();){e=RD(g.Pb(),39);i=Al(cD(WC(cJ,1),rve,20,0,[i,new dXc(e)]));h<e.f.a&&(h=e.f.a)}}else{for(g=b.Kc();g.Ob();){e=RD(g.Pb(),39);i=Al(cD(WC(cJ,1),rve,20,0,[i,new dXc(e)]));h<e.f.b&&(h=e.f.b)}}for(f=b.Kc();f.Ob();){e=RD(f.Pb(),39);pQb(e,(q$c(),d$c),h)}j.Vg();fZc(a,i,c,d)}} +function XFb(a,b,c){var d,e,f,g,h,i,j,k;this.a=a;this.b=b;this.c=c;this.e=dv(cD(WC($M,1),rve,177,0,[new TFb(a,b),new TFb(b,c),new TFb(c,a)]));this.f=dv(cD(WC(l3,1),Nve,8,0,[a,b,c]));this.d=(d=ojd(ajd(this.b),this.a),e=ojd(ajd(this.c),this.a),f=ojd(ajd(this.c),this.b),g=d.a*(this.a.a+this.b.a)+d.b*(this.a.b+this.b.b),h=e.a*(this.a.a+this.c.a)+e.b*(this.a.b+this.c.b),i=2*(d.a*f.b-d.b*f.a),j=(e.b*g-d.b*h)/i,k=(d.a*h-e.a*g)/i,new rjd(j,k))} +function X0b(a,b){var c,d,e,f,g,h;f=a.c;g=a.d;Y0b(a,null);Z0b(a,null);b&&Heb(TD(mQb(g,(Ywc(),mwc))))?Y0b(a,q2b(g.i,(BEc(),zEc),(qpd(),Xod))):Y0b(a,g);b&&Heb(TD(mQb(f,(Ywc(),Gwc))))?Z0b(a,q2b(f.i,(BEc(),yEc),(qpd(),ppd))):Z0b(a,f);for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),72);e=RD(mQb(c,(yCc(),wAc)),278);e==(Omd(),Nmd)?pQb(c,wAc,Mmd):e==Mmd&&pQb(c,wAc,Nmd)}h=Heb(TD(mQb(a,(Ywc(),Nwc))));pQb(a,Nwc,(Geb(),h?false:true));a.a=Ijd(a.a)} +function lWc(a,b){var c,d,e,f,g;c=jWc(RD(mQb(b,(h_c(),H$c)),88));if(a.b.b==0){return null}g=RD(zDb(GDb(new SDb(null,new Swb(a.b,16)),new UWc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);f=RD(zDb(CDb(new SDb(null,new Swb(b.b,16)),new CWc(g)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);e=UD(Lvb(JDb(GDb(f.Oc(),new EWc(c)),(urb(),urb(),srb))));d=RD(Lvb(DDb(CDb(f.Oc(),new GWc(c,e)))),39);return d} +function vOc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=eJb(new gJb,a.f);j=a.i[b.c.i.p];n=a.i[b.d.i.p];i=b.c;m=b.d;h=i.a.b;l=m.a.b;j.b||(h+=i.n.b);n.b||(l+=m.n.b);k=eE($wnd.Math.max(0,h-l));g=eE($wnd.Math.max(0,l-h));o=(p=$wnd.Math.max(1,RD(mQb(b,(yCc(),MBc)),17).a),q=hOc(b.c.i.k,b.d.i.k),p*q);e=rIb(uIb(tIb(sIb(vIb(new wIb,o),g),c),RD(Wjb(a.k,b.c),125)));f=rIb(uIb(tIb(sIb(vIb(new wIb,o),k),c),RD(Wjb(a.k,b.d),125)));d=new QOc(e,f);a.c[b.p]=d} +function MTb(a,b,c){var d,e,f,g,h,i;d=0;for(f=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));f.e!=f.i.gc();){e=RD(bMd(f),27);g='';(!e.n&&(e.n=new C5d(I4,e,1,7)),e.n).i==0||(g=RD(QHd((!e.n&&(e.n=new C5d(I4,e,1,7)),e.n),0),135).a);h=new lUb(g);kQb(h,e);pQb(h,(JVb(),HVb),e);h.a=d++;h.d.a=e.i+e.g/2;h.d.b=e.j+e.f/2;h.e.a=$wnd.Math.max(e.g,1);h.e.b=$wnd.Math.max(e.f,1);Rmb(b.e,h);rtb(c.f,e,h);i=RD(Gxd(e,(yVb(),jVb)),101);i==(Bod(),Aod)&&(i=zod)}} +function bec(a,b){var c,d,e,f,g,h,i;b.Ug('Layer constraint postprocessing',1);i=a.b;if(i.c.length!=0){d=(tFb(0,i.c.length),RD(i.c[0],30));g=RD(Vmb(i,i.c.length-1),30);c=new R4b(a);f=new R4b(a);_dc(a,d,g,c,f);c.a.c.length==0||(wFb(0,i.c.length),XEb(i.c,0,c));f.a.c.length==0||(ZEb(i.c,f),true)}if(nQb(a,(Ywc(),lwc))){e=new R4b(a);h=new R4b(a);cec(a,e,h);e.a.c.length==0||(wFb(0,i.c.length),XEb(i.c,0,e));h.a.c.length==0||(ZEb(i.c,h),true)}b.Vg()} +function zte(a){var b,c,d;switch(a){case 91:case 93:case 45:case 94:case 44:case 92:d='\\'+String.fromCharCode(a&Bwe);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(a<32){c=(b=a>>>0,'0'+b.toString(16));d='\\x'+zhb(c,c.length-2,c.length)}else if(a>=txe){c=(b=a>>>0,'0'+b.toString(16));d='\\v'+zhb(c,c.length-6,c.length)}else d=''+String.fromCharCode(a&Bwe);}return d} +function Ugc(a){var b,c,d;if(Dod(RD(mQb(a,(yCc(),BBc)),101))){for(c=new Anb(a.j);c.a<c.c.c.length;){b=RD(ynb(c),12);b.j==(qpd(),opd)&&(d=RD(mQb(b,(Ywc(),Iwc)),10),d?Q3b(b,RD(mQb(d,hwc),64)):b.e.c.length-b.g.c.length<0?Q3b(b,Xod):Q3b(b,ppd))}}else{for(c=new Anb(a.j);c.a<c.c.c.length;){b=RD(ynb(c),12);d=RD(mQb(b,(Ywc(),Iwc)),10);d?Q3b(b,RD(mQb(d,hwc),64)):b.e.c.length-b.g.c.length<0?Q3b(b,(qpd(),Xod)):Q3b(b,(qpd(),ppd))}pQb(a,BBc,(Bod(),yod))}} +function wUc(a){var b,c,d,e,f,g;this.e=new bnb;this.a=new bnb;for(c=a.b-1;c<3;c++){hu(a,0,RD(ju(a,0),8))}if(a.b<4){throw Adb(new agb('At (least dimension + 1) control points are necessary!'))}else{this.b=3;this.d=true;this.c=false;rUc(this,a.b+this.b-1);g=new bnb;f=new Anb(this.e);for(b=0;b<this.b-1;b++){Rmb(g,UD(ynb(f)))}for(e=Sub(a,0);e.b!=e.d.c;){d=RD(evb(e),8);Rmb(g,UD(ynb(f)));Rmb(this.a,new BUc(d,g));tFb(0,g.c.length);g.c.splice(0,1)}}} +function Sdc(a,b){var c,d,e,f,g,h,i,j,k;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),n3b)){i=(j=RD(hs(new is(Mr(Z2b(g).a.Kc(),new ir))),18),k=RD(hs(new is(Mr(a3b(g).a.Kc(),new ir))),18),!Heb(TD(mQb(j,(Ywc(),Nwc))))||!Heb(TD(mQb(k,Nwc))))?b:Qnd(b);Qdc(g,i)}for(d=new is(Mr(a3b(g).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);i=Heb(TD(mQb(c,(Ywc(),Nwc))))?Qnd(b):b;Pdc(c,i)}}}} +function V8c(a,b,c,d,e){var f,g,h;if(c.f>=b.o&&c.f<=b.f||b.a*0.5<=c.f&&b.a*1.5>=c.f){g=RD(Vmb(b.n,b.n.c.length-1),209);if(g.e+g.d+c.g+e<=d&&(f=RD(Vmb(b.n,b.n.c.length-1),209),f.f-a.f+c.f<=a.b||a.a.c.length==1)){K9c(b,c);return true}else if(b.s+c.g<=d&&(b.t+b.d+c.f+e<=a.b||a.a.c.length==1)){Rmb(b.b,c);h=RD(Vmb(b.n,b.n.c.length-1),209);Rmb(b.n,new _9c(b.s,h.f+h.a+b.i,b.i));W9c(RD(Vmb(b.n,b.n.c.length-1),209),c);M9c(b,c);return true}}return false} +function xLd(a,b,c){var d,e,f,g;if(a.Pj()){e=null;f=a.Qj();d=a.Ij(1,g=UHd(a,b,c),c,b,f);if(a.Mj()&&!(a.Yi()&&g!=null?pb(g,c):dE(g)===dE(c))){g!=null&&(e=a.Oj(g,e));e=a.Nj(c,e);a.Tj()&&(e=a.Wj(g,c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}else{a.Tj()&&(e=a.Wj(g,c,e));if(!e){a.Jj(d)}else{e.nj(d);e.oj()}}return g}else{g=UHd(a,b,c);if(a.Mj()&&!(a.Yi()&&g!=null?pb(g,c):dE(g)===dE(c))){e=null;g!=null&&(e=a.Oj(g,null));e=a.Nj(c,e);!!e&&e.oj()}return g}} +function Rsc(a,b){var c,d,e,f,g;b.Ug('Path-Like Graph Wrapping',1);if(a.b.c.length==0){b.Vg();return}e=new ysc(a);g=(e.i==null&&(e.i=tsc(e,new Asc)),Kfb(e.i)*e.f);c=g/(e.i==null&&(e.i=tsc(e,new Asc)),Kfb(e.i));if(e.b>c){b.Vg();return}switch(RD(mQb(a,(yCc(),rCc)),351).g){case 2:f=new Ksc;break;case 0:f=new zrc;break;default:f=new Nsc;}d=f.og(a,e);if(!f.pg()){switch(RD(mQb(a,xCc),352).g){case 2:d=Wsc(e,d);break;case 1:d=Usc(e,d);}}Qsc(a,e,d);b.Vg()} +function mB(a,b){var c,d,e,f,g,h,i,j;b%=24;if(a.q.getHours()!=b){d=new $wnd.Date(a.q.getTime());d.setDate(d.getDate()+1);h=a.q.getTimezoneOffset()-d.getTimezoneOffset();if(h>0){i=h/60|0;j=h%60;e=a.q.getDate();c=a.q.getHours();c+i>=24&&++e;f=new $wnd.Date(a.q.getFullYear(),a.q.getMonth(),e,b+i,a.q.getMinutes()+j,a.q.getSeconds(),a.q.getMilliseconds());a.q.setTime(f.getTime())}}g=a.q.getTime();a.q.setTime(g+3600000);a.q.getHours()!=b&&a.q.setTime(g)} +function kKc(a,b){var c,d,e,f;Nwb(a.d,a.e);a.c.a.$b();if(Kfb(UD(mQb(b.j,(yCc(),Zzc))))!=0||Kfb(UD(mQb(b.j,Zzc)))!=0){c=Hze;dE(mQb(b.j,cAc))!==dE((kEc(),hEc))&&pQb(b.j,(Ywc(),jwc),(Geb(),true));f=RD(mQb(b.j,gCc),17).a;for(e=0;e<f;e++){d=uKc(a,b);if(d<c){c=d;xKc(a);if(c==0){break}}}}else{c=lve;dE(mQb(b.j,cAc))!==dE((kEc(),hEc))&&pQb(b.j,(Ywc(),jwc),(Geb(),true));f=RD(mQb(b.j,gCc),17).a;for(e=0;e<f;e++){d=vKc(a,b);if(d<c){c=d;xKc(a);if(c==0){break}}}}} +function Vsc(a,b){var c,d,e,f,g,h,i,j;g=new bnb;h=0;c=0;i=0;while(h<b.c.length-1&&c<a.gc()){d=RD(a.Xb(c),17).a+i;while((tFb(h+1,b.c.length),RD(b.c[h+1],17)).a<d){++h}j=0;f=d-(tFb(h,b.c.length),RD(b.c[h],17)).a;e=(tFb(h+1,b.c.length),RD(b.c[h+1],17)).a-d;f>e&&++j;Rmb(g,(tFb(h+j,b.c.length),RD(b.c[h+j],17)));i+=(tFb(h+j,b.c.length),RD(b.c[h+j],17)).a-d;++c;while(c<a.gc()&&RD(a.Xb(c),17).a+i<=(tFb(h+j,b.c.length),RD(b.c[h+j],17)).a){++c}h+=1+j}return g} +function VGc(a,b){var c,d,e,f,g;for(g=new is(Mr(Z2b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);if(a.f.b==0){e=f.c.i.k==(r3b(),p3b)&&!!f.c.i.c&&f.c.i.c.p==a.c;if(gs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir)))){c=RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.c;d=f.c.i.k==n3b&&!!c&&c.p==a.c}else{d=false}}else{e=f.c.i.k==(r3b(),p3b)&&f.c.i.p==a.c;d=f.c.i.k==n3b&&RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.p==a.c}if(e||d){return true}}return false} +function DHc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=new bnb;r=Xx(d);q=b*a.a;l=0;o=0;f=new _sb;g=new _sb;h=new bnb;s=0;t=0;n=0;p=0;j=0;k=0;while(r.a.gc()!=0){i=HHc(r,e,g);if(i){r.a.Bc(i)!=null;ZEb(h.c,i);f.a.zc(i,f);o=a.f[i.p];s+=a.e[i.p]-o*a.b;l=a.c[i.p];t+=l*a.b;k+=o*a.b;p+=a.e[i.p]}if(!i||r.a.gc()==0||s>=q&&a.e[i.p]>o*a.b||t>=c*q){ZEb(m.c,h);h=new bnb;ye(g,f);f.a.$b();j-=k;n=$wnd.Math.max(n,j*a.b+p);j+=t;s=t;t=0;k=0;p=0}}return new Ptd(n,m)} +function pYd(a){var b,c,d,e,f,g,h;if(!a.d){h=new v_d;b=iYd;f=b.a.zc(a,b);if(f==null){for(d=new dMd(zYd(a));d.e!=d.i.gc();){c=RD(bMd(d),29);YGd(h,pYd(c))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}g=h.i;for(e=(!a.q&&(a.q=new C5d(s7,a,11,10)),new dMd(a.q));e.e!=e.i.gc();++g){RD(bMd(e),411)}YGd(h,(!a.q&&(a.q=new C5d(s7,a,11,10)),a.q));VHd(h);a.d=new N$d((RD(QHd(xYd((lTd(),kTd).o),9),19),h.i),h.g);a.e=RD(h.g,688);a.e==null&&(a.e=jYd);yYd(a).b&=-17}return a.d} +function kge(a,b,c,d){var e,f,g,h,i,j;j=pke(a.e.Dh(),b);i=0;e=RD(a.g,124);nke();if(RD(b,69).xk()){for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(pb(f,c)){return i}++i}}}else if(c!=null){for(h=0;h<a.i;++h){f=e[h];if(j.am(f.Lk())){if(pb(c,f.md())){return i}++i}}if(d){i=0;for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(dE(c)===dE(Age(a,RD(f.md(),58)))){return i}++i}}}}else{for(g=0;g<a.i;++g){f=e[g];if(j.am(f.Lk())){if(f.md()==null){return i}++i}}}return -1} +function Xje(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;if(c.Xh(b)){k=(n=b,!n?null:RD(d,54).gi(n));if(k){p=c.Nh(b,a.a);o=b.t;if(o>1||o==-1){l=RD(p,71);m=RD(k,71);if(l.dc()){m.$b()}else{g=!!Z5d(b);f=0;for(h=a.a?l.Kc():l.Ii();h.Ob();){j=RD(h.Pb(),58);e=RD(cub(a,j),58);if(!e){if(a.b&&!g){m.Gi(f,j);++f}}else{if(g){i=m.dd(e);i==-1?m.Gi(f,e):f!=i&&m.Ui(f,e)}else{m.Gi(f,e)}++f}}}}else{if(p==null){k.Wb(null)}else{e=cub(a,p);e==null?a.b&&!Z5d(b)&&k.Wb(p):k.Wb(e)}}}}} +function V9b(a,b){var c,d,e,f,g,h,i,j;c=new aac;for(e=new is(Mr(Z2b(b).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(W0b(d)){continue}h=d.c.i;if(W9b(h,T9b)){j=X9b(a,h,T9b,S9b);if(j==-1){continue}c.b=$wnd.Math.max(c.b,j);!c.a&&(c.a=new bnb);Rmb(c.a,h)}}for(g=new is(Mr(a3b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);if(W0b(f)){continue}i=f.d.i;if(W9b(i,S9b)){j=X9b(a,i,S9b,T9b);if(j==-1){continue}c.d=$wnd.Math.max(c.d,j);!c.c&&(c.c=new bnb);Rmb(c.c,i)}}return c} +function pcc(a,b,c,d){var e,f,g,h,i,j,k;if(c.d.i==b.i){return}e=new j3b(a);h3b(e,(r3b(),o3b));pQb(e,(Ywc(),Awc),c);pQb(e,(yCc(),BBc),(Bod(),wod));ZEb(d.c,e);g=new R3b;P3b(g,e);Q3b(g,(qpd(),ppd));h=new R3b;P3b(h,e);Q3b(h,Xod);k=c.d;Z0b(c,g);f=new a1b;kQb(f,c);pQb(f,RAc,null);Y0b(f,h);Z0b(f,k);j=new Jkb(c.b,0);while(j.b<j.d.gc()){i=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),72));if(dE(mQb(i,wAc))===dE((Omd(),Mmd))){pQb(i,dwc,c);Ckb(j);Rmb(f.b,i)}}rcc(e,g,h)} +function occ(a,b,c,d){var e,f,g,h,i,j,k;if(c.c.i==b.i){return}e=new j3b(a);h3b(e,(r3b(),o3b));pQb(e,(Ywc(),Awc),c);pQb(e,(yCc(),BBc),(Bod(),wod));ZEb(d.c,e);g=new R3b;P3b(g,e);Q3b(g,(qpd(),ppd));h=new R3b;P3b(h,e);Q3b(h,Xod);Z0b(c,g);f=new a1b;kQb(f,c);pQb(f,RAc,null);Y0b(f,h);Z0b(f,b);rcc(e,g,h);j=new Jkb(c.b,0);while(j.b<j.d.gc()){i=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),72));k=RD(mQb(i,wAc),278);if(k==(Omd(),Mmd)){nQb(i,dwc)||pQb(i,dwc,c);Ckb(j);Rmb(f.b,i)}}} +function Sjb(a){Ljb();var b,c,d,e;b=eE(a);if(a<Kjb.length){return Kjb[b]}else if(a<=50){return Yib((Pib(),Mib),b)}else if(a<=Awe){return Zib(Yib(Jjb[1],b),b)}if(a>1000000){throw Adb(new teb('power of ten too big'))}if(a<=lve){return Zib(Yib(Jjb[1],b),b)}d=Yib(Jjb[1],lve);e=d;c=Hdb(a-lve);b=eE(a%lve);while(Ddb(c,lve)>0){e=Wib(e,d);c=Vdb(c,lve)}e=Wib(e,Yib(Jjb[1],b));e=Zib(e,lve);c=Hdb(a-lve);while(Ddb(c,lve)>0){e=Zib(e,lve);c=Vdb(c,lve)}e=Zib(e,b);return e} +function s9b(a){var b,c,d,e,f,g,h,i,j,k;for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(h.k!=(r3b(),m3b)){continue}e=RD(mQb(h,(Ywc(),hwc)),64);if(e==(qpd(),Xod)||e==ppd){for(d=new is(Mr(W2b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);b=c.a;if(b.b==0){continue}j=c.c;if(j.i==h){f=(sFb(b.b!=0),RD(b.a.a.c,8));f.b=xjd(cD(WC(l3,1),Nve,8,0,[j.i.n,j.n,j.a])).b}k=c.d;if(k.i==h){g=(sFb(b.b!=0),RD(b.c.b.c,8));g.b=xjd(cD(WC(l3,1),Nve,8,0,[k.i.n,k.n,k.a])).b}}}}} +function Nlc(a,b,c,d){var e,f,g;this.j=new bnb;this.k=new bnb;this.b=new bnb;this.c=new bnb;this.e=new Tid;this.i=new Ejd;this.f=new cHb;this.d=new bnb;this.g=new bnb;Rmb(this.b,a);Rmb(this.b,b);this.e.c=$wnd.Math.min(a.a,b.a);this.e.d=$wnd.Math.min(a.b,b.b);this.e.b=$wnd.Math.abs(a.a-b.a);this.e.a=$wnd.Math.abs(a.b-b.b);e=RD(mQb(d,(yCc(),RAc)),75);if(e){for(g=Sub(e,0);g.b!=g.d.c;){f=RD(evb(g),8);rGb(f.a,a.a)&&Mub(this.i,f)}}!!c&&Rmb(this.j,c);Rmb(this.k,d)} +function vSc(a,b,c,d){var e,f,g,h,i,j,k;h=-1;for(k=new Anb(a);k.a<k.c.c.length;){j=RD(ynb(k),118);j.g=h--;e=Ydb(mDb(IDb(CDb(new SDb(null,new Swb(j.f,16)),new xSc),new zSc)).d);f=Ydb(mDb(IDb(CDb(new SDb(null,new Swb(j.k,16)),new BSc),new DSc)).d);g=e;i=f;if(!d){g=Ydb(mDb(IDb(new SDb(null,new Swb(j.f,16)),new FSc)).d);i=Ydb(mDb(IDb(new SDb(null,new Swb(j.k,16)),new HSc)).d)}j.d=g;j.a=e;j.i=i;j.b=f;i==0?(Pub(c,j,c.c.b,c.c),true):g==0&&(Pub(b,j,b.c.b,b.c),true)}} +function Qdc(a,b){var c,d,e,f,g,h;if(a.k==(r3b(),n3b)){c=a.k==n3b&&!QDb(CDb(RD(mQb(a,(Ywc(),Mwc)),15).Oc(),new PAb(new x3b))).Bd((xDb(),wDb))?(Pnd(),Nnd):b;pQb(a,(Ywc(),swc),c);if(c!=(Pnd(),Mnd)){d=RD(mQb(a,Awc),18);h=Kfb(UD(mQb(d,(yCc(),FAc))));g=0;if(c==Lnd){g=a.o.b-$wnd.Math.ceil(h/2)}else if(c==Nnd){g=$wnd.Math.ceil(a.o.b-Kfb(UD(mQb(Y2b(a),VBc)))-h)/2;a.o.b-=Kfb(UD(mQb(Y2b(a),VBc)));a.o.b-=h}for(f=new Anb(a.j);f.a<f.c.c.length;){e=RD(ynb(f),12);e.n.b=g}}}} +function XQc(a,b,c){var d,e,f,g,h,i,j,k,l;e=true;for(g=new Anb(a.b);g.a<g.c.c.length;){f=RD(ynb(g),30);j=pxe;k=null;for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);l=Kfb(b.p[h.p])+Kfb(b.d[h.p])-h.d.d;d=Kfb(b.p[h.p])+Kfb(b.d[h.p])+h.o.b+h.d.a;if(l>j&&d>j){k=h;j=Kfb(b.p[h.p])+Kfb(b.d[h.p])+h.o.b+h.d.a}else{e=false;c._g()&&c.bh('bk node placement breaks on '+h+' which should have been after '+k);break}}if(!e){break}}c._g()&&c.bh(b+' is feasible: '+e);return e} +function Dfc(a,b,c,d){var e,f,g,h,i,j,k,l,m;f=new j3b(a);h3b(f,(r3b(),q3b));pQb(f,(yCc(),BBc),(Bod(),wod));e=0;if(b){g=new R3b;pQb(g,(Ywc(),Awc),b);pQb(f,Awc,b.i);Q3b(g,(qpd(),ppd));P3b(g,f);m=s2b(b.e);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];Z0b(i,g)}pQb(b,Iwc,f);++e}if(c){h=new R3b;pQb(f,(Ywc(),Awc),c.i);pQb(h,Awc,c);Q3b(h,(qpd(),Xod));P3b(h,f);m=s2b(c.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];Y0b(i,h)}pQb(c,Iwc,f);++e}pQb(f,(Ywc(),$vc),sgb(e));ZEb(d.c,f);return f} +function Bgd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;for(c=(j=(new glb(a.c.b)).a.vc().Kc(),new llb(j));c.a.Ob();){b=(h=RD(c.a.Pb(),44),RD(h.md(),143));e=b.a;e==null&&(e='');d=tgd(a.c,e);!d&&e.length==0&&(d=Fgd(a));!!d&&!ze(d.c,b,false)&&Mub(d.c,b)}for(g=Sub(a.a,0);g.b!=g.d.c;){f=RD(evb(g),486);k=ugd(a.c,f.a);n=ugd(a.c,f.b);!!k&&!!n&&Mub(k.c,new Ptd(n,f.c))}Xub(a.a);for(m=Sub(a.b,0);m.b!=m.d.c;){l=RD(evb(m),486);b=rgd(a.c,l.a);i=ugd(a.c,l.b);!!b&&!!i&&Mfd(b,i,l.c)}Xub(a.b)} +function QId(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=new vC(a);g=new IEd;e=(wo(g.g),wo(g.j),akb(g.b),wo(g.d),wo(g.i),akb(g.k),akb(g.c),akb(g.e),n=DEd(g,f,null),AEd(g,f),n);if(b){j=new vC(b);h=RId(j);msd(e,cD(WC(j4,1),rve,536,0,[h]))}m=false;l=false;if(c){j=new vC(c);RIe in j.a&&(m=qC(j,RIe).qe().a);SIe in j.a&&(l=qC(j,SIe).qe().a)}k=Kqd(Mqd(new Oqd,m),l);Eed(new Hed,e,k);RIe in f.a&&sC(f,RIe,null);if(m||l){i=new uC;NId(k,i,m,l);sC(f,RIe,i)}d=new nFd(g);dve(new zId(e),d)} +function FA(a,b,c){var d,e,f,g,h,i,j,k,l;g=new DB;j=cD(WC(kE,1),Pwe,28,15,[0]);e=-1;f=0;d=0;for(i=0;i<a.b.c.length;++i){k=RD(Vmb(a.b,i),443);if(k.b>0){if(e<0&&k.a){e=i;f=j[0];d=0}if(e>=0){h=k.b;if(i==e){h-=d++;if(h==0){return 0}}if(!MA(b,j,k,h,g)){i=e-1;j[0]=f;continue}}else{e=-1;if(!MA(b,j,k,0,g)){return 0}}}else{e=-1;if(ihb(k.c,0)==32){l=j[0];KA(b,j);if(j[0]>l){continue}}else if(xhb(b,k.c,j[0])){j[0]+=k.c.length;continue}return 0}}if(!CB(g,c)){return 0}return j[0]} +function qWb(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new pwb(new GWb(c));h=$C(xdb,Hye,28,a.f.e.c.length,16,1);Snb(h,h.length);c[b.a]=0;for(j=new Anb(a.f.e);j.a<j.c.c.length;){i=RD(ynb(j),153);i.a!=b.a&&(c[i.a]=lve);zFb(lwb(k,i),Bxe)}while(k.b.c.length!=0){l=RD(mwb(k),153);h[l.a]=true;for(f=ru(new su(a.b,l),0);f.c;){e=RD(Lu(f),289);m=tWb(e,l);if(h[m.a]){continue}nQb(e,(dWb(),TVb))?(g=Kfb(UD(mQb(e,TVb)))):(g=a.c);d=c[l.a]+g;if(d<c[m.a]){c[m.a]=d;nwb(k,m);zFb(lwb(k,m),Bxe)}}}} +function iPb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.o;d=$C(kE,Pwe,28,g,15,1);e=$C(kE,Pwe,28,g,15,1);c=a.p;b=$C(kE,Pwe,28,c,15,1);f=$C(kE,Pwe,28,c,15,1);for(j=0;j<g;j++){l=0;while(l<c&&!PPb(a,j,l)){++l}d[j]=l}for(k=0;k<g;k++){l=c-1;while(l>=0&&!PPb(a,k,l)){--l}e[k]=l}for(n=0;n<c;n++){h=0;while(h<g&&!PPb(a,h,n)){++h}b[n]=h}for(o=0;o<c;o++){h=g-1;while(h>=0&&!PPb(a,h,o)){--h}f[o]=h}for(i=0;i<g;i++){for(m=0;m<c;m++){i<f[m]&&i>b[m]&&m<e[i]&&m>d[i]&&TPb(a,i,m,false,true)}}} +function hUb(a){var b,c,d,e,f,g,h,i;c=Heb(TD(mQb(a,(yVb(),$Ub))));f=a.a.c.d;h=a.a.d.d;if(c){g=ijd(ojd(new rjd(h.a,h.b),f),0.5);i=ijd(ajd(a.e),0.5);b=ojd($id(new rjd(f.a,f.b),g),i);mjd(a.d,b)}else{e=Kfb(UD(mQb(a.a,qVb)));d=a.d;if(f.a>=h.a){if(f.b>=h.b){d.a=h.a+(f.a-h.a)/2+e;d.b=h.b+(f.b-h.b)/2-e-a.e.b}else{d.a=h.a+(f.a-h.a)/2+e;d.b=f.b+(h.b-f.b)/2+e}}else{if(f.b>=h.b){d.a=f.a+(h.a-f.a)/2+e;d.b=h.b+(f.b-h.b)/2+e}else{d.a=f.a+(h.a-f.a)/2+e;d.b=f.b+(h.b-f.b)/2-e-a.e.b}}}} +function qYd(a){var b,c,d,e,f,g,h,i;if(!a.f){i=new a_d;h=new a_d;b=iYd;g=b.a.zc(a,b);if(g==null){for(f=new dMd(zYd(a));f.e!=f.i.gc();){e=RD(bMd(f),29);YGd(i,qYd(e))}b.a.Bc(a)!=null;b.a.gc()==0&&undefined}for(d=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));d.e!=d.i.gc();){c=RD(bMd(d),179);ZD(c,102)&&WGd(h,RD(c,19))}VHd(h);a.r=new s_d(a,(RD(QHd(xYd((lTd(),kTd).o),6),19),h.i),h.g);YGd(i,a.r);VHd(i);a.f=new N$d((RD(QHd(xYd(kTd.o),5),19),i.i),i.g);yYd(a).b&=-3}return a.f} +function uSb(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,Aze),'ELK DisCo'),'Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out.'),new xSb)));Agd(a,Aze,Bze,iGd(sSb));Agd(a,Aze,Cze,iGd(mSb));Agd(a,Aze,Dze,iGd(hSb));Agd(a,Aze,Eze,iGd(nSb));Agd(a,Aze,Bye,iGd(qSb));Agd(a,Aze,Cye,iGd(pSb));Agd(a,Aze,Aye,iGd(rSb));Agd(a,Aze,Dye,iGd(oSb));Agd(a,Aze,vze,iGd(jSb));Agd(a,Aze,wze,iGd(iSb));Agd(a,Aze,xze,iGd(kSb));Agd(a,Aze,yze,iGd(lSb))} +function qAd(){qAd=geb;oAd=cD(WC(hE,1),zwe,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]);pAd=new RegExp('[ \t\n\r\f]+');try{nAd=cD(WC(h8,1),rve,2114,0,[new c2d((WA(),YA("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",_A(($A(),$A(),ZA))))),new c2d(YA("yyyy-MM-dd'T'HH:mm:ss'.'SSS",_A((null,ZA)))),new c2d(YA("yyyy-MM-dd'T'HH:mm:ss",_A((null,ZA)))),new c2d(YA("yyyy-MM-dd'T'HH:mm",_A((null,ZA)))),new c2d(YA('yyyy-MM-dd',_A((null,ZA))))])}catch(a){a=zdb(a);if(!ZD(a,82))throw Adb(a)}} +function uKc(a,b){var c,d,e,f;e=Kwb(a.d,1)!=0;d=mKc(a,b);if(d==0&&Heb(TD(mQb(b.j,(Ywc(),jwc))))){return 0}!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,Owc)))||dE(mQb(b.j,(yCc(),cAc)))===dE((kEc(),hEc))?b.c.mg(b.e,e):(e=Heb(TD(mQb(b.j,jwc))));DKc(a,b,e,true);Heb(TD(mQb(b.j,Owc)))&&pQb(b.j,Owc,(Geb(),false));if(Heb(TD(mQb(b.j,jwc)))){pQb(b.j,jwc,(Geb(),false));pQb(b.j,Owc,true)}c=mKc(a,b);do{yKc(a);if(c==0){return 0}e=!e;f=c;DKc(a,b,e,false);c=mKc(a,b)}while(f>c);return f} +function vKc(a,b){var c,d,e,f;e=Kwb(a.d,1)!=0;d=lKc(a,b);if(d==0&&Heb(TD(mQb(b.j,(Ywc(),jwc))))){return 0}!Heb(TD(mQb(b.j,(Ywc(),jwc))))&&!Heb(TD(mQb(b.j,Owc)))||dE(mQb(b.j,(yCc(),cAc)))===dE((kEc(),hEc))?b.c.mg(b.e,e):(e=Heb(TD(mQb(b.j,jwc))));DKc(a,b,e,true);Heb(TD(mQb(b.j,Owc)))&&pQb(b.j,Owc,(Geb(),false));if(Heb(TD(mQb(b.j,jwc)))){pQb(b.j,jwc,(Geb(),false));pQb(b.j,Owc,true)}c=lKc(a,b);do{yKc(a);if(c==0){return 0}e=!e;f=c;DKc(a,b,e,false);c=lKc(a,b)}while(f>c);return f} +function Gid(a,b,c,d){var e,f,g,h,i,j,k,l,m;i=ojd(new rjd(c.a,c.b),a);j=i.a*b.b-i.b*b.a;k=b.a*d.b-b.b*d.a;l=(i.a*d.b-i.b*d.a)/k;m=j/k;if(k==0){if(j==0){e=$id(new rjd(c.a,c.b),ijd(new rjd(d.a,d.b),0.5));f=bjd(a,e);g=bjd($id(new rjd(a.a,a.b),b),e);h=$wnd.Math.sqrt(d.a*d.a+d.b*d.b)*0.5;if(f<g&&f<=h){return new rjd(a.a,a.b)}if(g<=h){return $id(new rjd(a.a,a.b),b)}return null}else{return null}}else{return l>=0&&l<=1&&m>=0&&m<=1?$id(new rjd(a.a,a.b),ijd(new rjd(b.a,b.b),l)):null}} +function QWb(a,b,c){var d,e,f,g,h;d=RD(mQb(a,(yCc(),dAc)),21);c.a>b.a&&(d.Hc((ukd(),okd))?(a.c.a+=(c.a-b.a)/2):d.Hc(qkd)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((ukd(),skd))?(a.c.b+=(c.b-b.b)/2):d.Hc(rkd)&&(a.c.b+=c.b-b.b));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))&&(c.a>b.a||c.b>b.b)){for(h=new Anb(a.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k==(r3b(),m3b)){e=RD(mQb(g,hwc),64);e==(qpd(),Xod)?(g.n.a+=c.a-b.a):e==npd&&(g.n.b+=c.b-b.b)}}}f=a.d;a.f.a=c.a-f.b-f.c;a.f.b=c.b-f.d-f.a} +function Y8b(a,b,c){var d,e,f,g,h;d=RD(mQb(a,(yCc(),dAc)),21);c.a>b.a&&(d.Hc((ukd(),okd))?(a.c.a+=(c.a-b.a)/2):d.Hc(qkd)&&(a.c.a+=c.a-b.a));c.b>b.b&&(d.Hc((ukd(),skd))?(a.c.b+=(c.b-b.b)/2):d.Hc(rkd)&&(a.c.b+=c.b-b.b));if(RD(mQb(a,(Ywc(),kwc)),21).Hc((ovc(),hvc))&&(c.a>b.a||c.b>b.b)){for(g=new Anb(a.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k==(r3b(),m3b)){e=RD(mQb(f,hwc),64);e==(qpd(),Xod)?(f.n.a+=c.a-b.a):e==npd&&(f.n.b+=c.b-b.b)}}}h=a.d;a.f.a=c.a-h.b-h.c;a.f.b=c.b-h.d-h.a} +function KQc(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=bRc(a);for(k=(h=(new Xkb(b)).a.vc().Kc(),new blb(h));k.a.Ob();){j=(e=RD(k.a.Pb(),44),RD(e.ld(),10));l=0;m=0;l=j.d.d;m=j.o.b+j.d.a;a.d[j.p]=0;c=j;while((f=a.a[c.p])!=j){d=dRc(c,f);i=0;a.c==(wQc(),uQc)?(i=d.d.n.b+d.d.a.b-d.c.n.b-d.c.a.b):(i=d.c.n.b+d.c.a.b-d.d.n.b-d.d.a.b);g=Kfb(a.d[c.p])+i;a.d[f.p]=g;l=$wnd.Math.max(l,f.d.d-g);m=$wnd.Math.max(m,g+f.o.b+f.d.a);c=f}c=j;do{a.d[c.p]=Kfb(a.d[c.p])+l;c=a.a[c.p]}while(c!=j);a.b[j.p]=l+m}} +function S9c(a,b,c){var d,e,f,g,h,i,j,k,l,m;f=0;g=a.t;e=0;d=0;i=0;m=0;l=0;if(c){a.n.c.length=0;Rmb(a.n,new _9c(a.s,a.t,a.i))}h=0;for(k=new Anb(a.b);k.a<k.c.c.length;){j=RD(ynb(k),27);if(f+j.g+(h>0?a.i:0)>b&&i>0){f=0;g+=i+a.i;e=$wnd.Math.max(e,m);d+=i+a.i;i=0;m=0;if(c){++l;Rmb(a.n,new _9c(a.s,g,a.i))}h=0}m+=j.g+(h>0?a.i:0);i=$wnd.Math.max(i,j.f);c&&W9c(RD(Vmb(a.n,l),209),j);f+=j.g+(h>0?a.i:0);++h}e=$wnd.Math.max(e,m);d+=i;if(c){a.r=e;a.d=d;Ead(a.j)}return new Uid(a.s,a.t,e,d)} +function CRb(a){var b,c,d,e,f,g,h,i,j,k,l,m;a.b=false;l=oxe;i=pxe;m=oxe;j=pxe;for(d=a.e.a.ec().Kc();d.Ob();){c=RD(d.Pb(),272);e=c.a;l=$wnd.Math.min(l,e.c);i=$wnd.Math.max(i,e.c+e.b);m=$wnd.Math.min(m,e.d);j=$wnd.Math.max(j,e.d+e.a);for(g=new Anb(c.c);g.a<g.c.c.length;){f=RD(ynb(g),407);b=f.a;if(b.a){k=e.d+f.b.b;h=k+f.c;m=$wnd.Math.min(m,k);j=$wnd.Math.max(j,h)}else{k=e.c+f.b.a;h=k+f.c;l=$wnd.Math.min(l,k);i=$wnd.Math.max(i,h)}}}a.a=new rjd(i-l,j-m);a.c=new rjd(l+a.d.a,m+a.d.b)} +function mYd(a){var b,c,d,e,f,g,h,i;if(!a.a){a.o=null;i=new e_d(a);b=new i_d;c=iYd;h=c.a.zc(a,c);if(h==null){for(g=new dMd(zYd(a));g.e!=g.i.gc();){f=RD(bMd(g),29);YGd(i,mYd(f))}c.a.Bc(a)!=null;c.a.gc()==0&&undefined}for(e=(!a.s&&(a.s=new C5d(y7,a,21,17)),new dMd(a.s));e.e!=e.i.gc();){d=RD(bMd(e),179);ZD(d,331)&&WGd(b,RD(d,35))}VHd(b);a.k=new n_d(a,(RD(QHd(xYd((lTd(),kTd).o),7),19),b.i),b.g);YGd(i,a.k);VHd(i);a.a=new N$d((RD(QHd(xYd(kTd.o),4),19),i.i),i.g);yYd(a).b&=-2}return a.a} +function age(a,b,c,d){var e,f,g,h,i,j,k;k=pke(a.e.Dh(),b);e=0;f=RD(a.g,124);i=null;nke();if(RD(b,69).xk()){for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(pb(g,c)){i=g;break}++e}}}else if(c!=null){for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(pb(c,g.md())){i=g;break}++e}}}else{for(h=0;h<a.i;++h){g=f[h];if(k.am(g.Lk())){if(g.md()==null){i=g;break}++e}}}if(i){if(Mvd(a.e)){j=b.Jk()?new lle(a.e,4,b,c,null,e,true):fge(a,b.tk()?2:1,b,c,b.ik(),-1,true);d?d.nj(j):(d=j)}d=_fe(a,i,d)}return d} +function d8c(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p;o=0;p=0;i=e.c;h=e.b;k=c.f;n=c.g;switch(b.g){case 0:o=d.i+d.g+g;a.c?(p=m8c(o,f,d,g)):(p=d.j);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 1:p=d.j+d.f+g;a.c?(o=l8c(p,f,d,g)):(o=d.i);m=$wnd.Math.max(i,o+n);j=$wnd.Math.max(h,p+k);break;case 2:o=i+g;p=0;m=i+g+n;j=$wnd.Math.max(h,k);break;case 3:o=0;p=h+g;m=$wnd.Math.max(i,n);j=h+g+k;break;default:throw Adb(new agb('IllegalPlacementOption.'));}l=new mad(a.a,m,j,b,o,p);return l} +function g6b(a){var b,c,d,e,f,g,h,i,j,k,l,m;h=a.d;l=RD(mQb(a,(Ywc(),Xwc)),15);b=RD(mQb(a,Vvc),15);if(!l&&!b){return}f=Kfb(UD(hFc(a,(yCc(),QBc))));g=Kfb(UD(hFc(a,RBc)));m=0;if(l){j=0;for(e=l.Kc();e.Ob();){d=RD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);m+=d.o.a}m+=f*(l.gc()-1);h.d+=j+g}c=0;if(b){j=0;for(e=b.Kc();e.Ob();){d=RD(e.Pb(),10);j=$wnd.Math.max(j,d.o.b);c+=d.o.a}c+=f*(b.gc()-1);h.a+=j+g}i=$wnd.Math.max(m,c);if(i>a.o.a){k=(i-a.o.a)/2;h.b=$wnd.Math.max(h.b,k);h.c=$wnd.Math.max(h.c,k)}} +function RId(a){var b,c,d,e,f,g,h,i;f=new med;ied(f,(hed(),eed));for(d=(e=oC(a,$C(qJ,Nve,2,0,6,1)),new Dkb(new mob((new CC(a,e)).b)));d.b<d.d.gc();){c=(sFb(d.b<d.d.gc()),WD(d.d.Xb(d.c=d.b++)));g=vgd(LId,c);if(g){b=qC(a,c);b.te()?(h=b.te().a):b.qe()?(h=''+b.qe().a):b.re()?(h=''+b.re().a):(h=b.Ib());i=zhd(g,h);if(i!=null){(Csb(g.j,(Yhd(),Vhd))||Csb(g.j,Whd))&&oQb(ked(f,J4),g,i);Csb(g.j,Thd)&&oQb(ked(f,G4),g,i);Csb(g.j,Xhd)&&oQb(ked(f,K4),g,i);Csb(g.j,Uhd)&&oQb(ked(f,I4),g,i)}}}return f} +function ige(a,b,c){var d,e,f,g,h,i,j,k;e=RD(a.g,124);if(qke(a.e,b)){return nke(),RD(b,69).xk()?new ole(b,a):new Eke(b,a)}else{j=pke(a.e.Dh(),b);d=0;for(h=0;h<a.i;++h){f=e[h];g=f.Lk();if(j.am(g)){nke();if(RD(b,69).xk()){return f}else if(g==(Lle(),Jle)||g==Gle){i=new dib(jeb(f.md()));while(++h<a.i){f=e[h];g=f.Lk();(g==Jle||g==Gle)&&Zhb(i,jeb(f.md()))}return Ije(RD(b.Hk(),156),i.a)}else{k=f.md();k!=null&&c&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(k=Bge(a,b,h,d,k));return k}}++d}return b.ik()}} +function hge(a,b,c,d){var e,f,g,h,i,j;i=pke(a.e.Dh(),b);f=RD(a.g,124);if(qke(a.e,b)){e=0;for(h=0;h<a.i;++h){g=f[h];if(i.am(g.Lk())){if(e==c){nke();if(RD(b,69).xk()){return g}else{j=g.md();j!=null&&d&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(j=Bge(a,b,h,e,j));return j}}++e}}throw Adb(new veb(HJe+c+NIe+e))}else{e=0;for(h=0;h<a.i;++h){g=f[h];if(i.am(g.Lk())){nke();if(RD(b,69).xk()){return g}else{j=g.md();j!=null&&d&&ZD(b,102)&&(RD(b,19).Bb&txe)!=0&&(j=Bge(a,b,h,e,j));return j}}++e}return b.ik()}} +function xjb(){xjb=geb;vjb=cD(WC(kE,1),Pwe,28,15,[qwe,1162261467,hwe,1220703125,362797056,1977326743,hwe,387420489,ixe,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,1280000000,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729000000,887503681,hwe,1291467969,1544804416,1838265625,60466176]);wjb=cD(WC(kE,1),Pwe,28,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])} +function Gjb(a,b){var c,d,e,f,g,h,i,j,k,l;g=a.e;i=b.e;if(i==0){return a}if(g==0){return b.e==0?b:new cjb(-b.e,b.d,b.a)}f=a.d;h=b.d;if(f+h==2){c=Cdb(a.a[0],yxe);d=Cdb(b.a[0],yxe);g<0&&(c=Odb(c));i<0&&(d=Odb(d));return Pib(),Jdb(Vdb(c,d),0)?jjb(Vdb(c,d)):Xib(jjb(Odb(Vdb(c,d))))}e=f!=h?f>h?1:-1:Ejb(a.a,b.a,f);if(e==-1){l=-i;k=g==i?Hjb(b.a,h,a.a,f):Cjb(b.a,h,a.a,f)}else{l=g;if(g==i){if(e==0){return Pib(),Oib}k=Hjb(a.a,f,b.a,h)}else{k=Cjb(a.a,f,b.a,h)}}j=new cjb(l,k.length,k);Rib(j);return j} +function c5b(a,b){var c,d,e,f;f=Z4b(b);!b.c&&(b.c=new C5d(K4,b,9,9));FDb(new SDb(null,(!b.c&&(b.c=new C5d(K4,b,9,9)),new Swb(b.c,16))),new s5b(f));e=RD(mQb(f,(Ywc(),kwc)),21);Y4b(b,e);if(e.Hc((ovc(),hvc))){for(d=new dMd((!b.c&&(b.c=new C5d(K4,b,9,9)),b.c));d.e!=d.i.gc();){c=RD(bMd(d),123);g5b(a,b,f,c)}}RD(Gxd(b,(yCc(),lBc)),181).gc()!=0&&V4b(b,f);Heb(TD(mQb(f,sBc)))&&e.Fc(mvc);nQb(f,PBc)&&HCc(new RCc(Kfb(UD(mQb(f,PBc)))),f);dE(Gxd(b,IAc))===dE((Fnd(),Cnd))?d5b(a,b,f):b5b(a,b,f);return f} +function Vrc(a){var b,c,d,e,f,g,h,i;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);for(g=new Anb(bv(d.a));g.a<g.c.c.length;){f=RD(ynb(g),10);if(Lrc(f)){c=RD(mQb(f,(Ywc(),Wvc)),313);if(!c.g&&!!c.d){b=c;i=c.d;while(i){Urc(i.i,i.k,false,true);asc(b.a);asc(i.i);asc(i.k);asc(i.b);Z0b(i.c,b.c.d);Z0b(b.c,null);g3b(b.a,null);g3b(i.i,null);g3b(i.k,null);g3b(i.b,null);h=new Jrc(b.i,i.a,b.e,i.j,i.f);h.k=b.k;h.n=b.n;h.b=b.b;h.c=i.c;h.g=b.g;h.d=i.d;pQb(b.i,Wvc,h);pQb(i.a,Wvc,h);i=i.d;b=h}}}}}} +function nue(a,b){var c,d,e,f,g,h,i;if(a==null){return null}f=a.length;if(f==0){return ''}i=$C(hE,zwe,28,f,15,1);AFb(0,f,a.length);AFb(0,f,i.length);nhb(a,0,f,i,0);c=null;h=b;for(e=0,g=0;e<f;e++){d=i[e];Kqe();if(d<=32&&(Jqe[d]&2)!=0){if(h){!c&&(c=new Shb(a));Phb(c,e-g++)}else{h=b;if(d!=32){!c&&(c=new Shb(a));peb(c,e-g,e-g+1,String.fromCharCode(32))}}}else{h=false}}if(h){if(!c){return AFb(0,f-1,a.length),a.substr(0,f-1)}else{f=c.a.length;return f>0?zhb(c.a,0,f-1):''}}else{return !c?a:c.a}} +function xic(a,b){var c,d,e,f,g,h,i;b.Ug('Sort By Input Model '+mQb(a,(yCc(),cAc)),1);e=0;for(d=new Anb(a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);i=e==0?0:e-1;h=RD(Vmb(a.b,i),30);for(g=new Anb(c.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(dE(mQb(f,BBc))!==dE((Bod(),vod))&&dE(mQb(f,BBc))!==dE(wod)){yob();_mb(f.j,new trc(h,RD(mQb(a,cAc),284),Bic(f),Heb(TD(mQb(a,bAc)))));b.bh('Node '+f+' ports: '+f.j)}}yob();_mb(c.a,new frc(h,RD(mQb(a,cAc),284),RD(mQb(a,_zc),390)));b.bh('Layer '+e+': '+c);++e}b.Vg()} +function ute(a,b){var c,d,e,f,g;g=RD(b,138);vte(a);vte(g);if(g.b==null)return;a.c=true;if(a.b==null){a.b=$C(kE,Pwe,28,g.b.length,15,1);hib(g.b,0,a.b,0,g.b.length);return}f=$C(kE,Pwe,28,a.b.length+g.b.length,15,1);for(c=0,d=0,e=0;c<a.b.length||d<g.b.length;){if(c>=a.b.length){f[e++]=g.b[d++];f[e++]=g.b[d++]}else if(d>=g.b.length){f[e++]=a.b[c++];f[e++]=a.b[c++]}else if(g.b[d]<a.b[c]||g.b[d]===a.b[c]&&g.b[d+1]<a.b[c+1]){f[e++]=g.b[d++];f[e++]=g.b[d++]}else{f[e++]=a.b[c++];f[e++]=a.b[c++]}}a.b=f} +function hac(a,b){var c,d,e,f,g,h,i,j,k,l;c=Heb(TD(mQb(a,(Ywc(),uwc))));h=Heb(TD(mQb(b,uwc)));d=RD(mQb(a,vwc),12);i=RD(mQb(b,vwc),12);e=RD(mQb(a,wwc),12);j=RD(mQb(b,wwc),12);k=!!d&&d==i;l=!!e&&e==j;if(!c&&!h){return new oac(RD(ynb(new Anb(a.j)),12).p==RD(ynb(new Anb(b.j)),12).p,k,l)}f=(!Heb(TD(mQb(a,uwc)))||Heb(TD(mQb(a,twc))))&&(!Heb(TD(mQb(b,uwc)))||Heb(TD(mQb(b,twc))));g=(!Heb(TD(mQb(a,uwc)))||!Heb(TD(mQb(a,twc))))&&(!Heb(TD(mQb(b,uwc)))||!Heb(TD(mQb(b,twc))));return new oac(k&&f||l&&g,k,l)} +function N9c(a){var b,c,d,e,f,g,h,i;d=0;c=0;i=new Yub;b=0;for(h=new Anb(a.n);h.a<h.c.c.length;){g=RD(ynb(h),209);if(g.c.c.length==0){Pub(i,g,i.c.b,i.c)}else{d=$wnd.Math.max(d,g.d);c+=g.a+(b>0?a.i:0)}++b}Ce(a.n,i);a.d=c;a.r=d;a.g=0;a.f=0;a.e=0;a.o=oxe;a.p=oxe;for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),27);a.p=$wnd.Math.min(a.p,e.g);a.g=$wnd.Math.max(a.g,e.g);a.f=$wnd.Math.max(a.f,e.f);a.o=$wnd.Math.min(a.o,e.f);a.e+=e.f+a.i}a.a=a.e/a.b.c.length-a.i*((a.b.c.length-1)/a.b.c.length);Ead(a.j)} +function qzd(a){var b,c,d,e;if((a.Db&64)!=0)return kyd(a);b=new dib(BHe);d=a.k;if(!d){!a.n&&(a.n=new C5d(I4,a,1,7));if(a.n.i>0){e=(!a.n&&(a.n=new C5d(I4,a,1,7)),RD(QHd(a.n,0),135)).a;!e||Zhb(Zhb((b.a+=' "',b),e),'"')}}else{Zhb(Zhb((b.a+=' "',b),d),'"')}c=(!a.b&&(a.b=new Yie(E4,a,4,7)),!(a.b.i<=1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c.i<=1)));c?(b.a+=' [',b):(b.a+=' ',b);Zhb(b,Eb(new Gb,new dMd(a.b)));c&&(b.a+=']',b);b.a+=SAe;c&&(b.a+='[',b);Zhb(b,Eb(new Gb,new dMd(a.c)));c&&(b.a+=']',b);return b.a} +function odc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;v=a.c;w=b.c;c=Wmb(v.a,a,0);d=Wmb(w.a,b,0);t=RD(c3b(a,(BEc(),yEc)).Kc().Pb(),12);C=RD(c3b(a,zEc).Kc().Pb(),12);u=RD(c3b(b,yEc).Kc().Pb(),12);D=RD(c3b(b,zEc).Kc().Pb(),12);r=s2b(t.e);A=s2b(C.g);s=s2b(u.e);B=s2b(D.g);f3b(a,d,w);for(g=s,k=0,o=g.length;k<o;++k){e=g[k];Z0b(e,t)}for(h=B,l=0,p=h.length;l<p;++l){e=h[l];Y0b(e,C)}f3b(b,c,v);for(i=r,m=0,q=i.length;m<q;++m){e=i[m];Z0b(e,u)}for(f=A,j=0,n=f.length;j<n;++j){e=f[j];Y0b(e,D)}} +function $2c(a){var b,c,d,e,f,g,h;g=RD(Gxd(a,(u2c(),t2c)),27);for(d=new dMd((!g.e&&(g.e=new Yie(G4,g,7,4)),g.e));d.e!=d.i.gc();){c=RD(bMd(d),74);h=new rjd(RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).j,RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).k);f=new rjd(RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).b,RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166).c);e=new rjd(f.a-h.a,f.b-h.b);b=$wnd.Math.atan2(e.b,e.a);RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84).qf(($4c(),W4c),b)}} +function o6c(a,b){var c,d,e,f,g,h,i,j,k;b.Ug('Interactive Node Reorderer',1);k=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);h=new bnb;for(e=new dMd(k);e.e!=e.i.gc();){c=RD(bMd(e),27);Hxd(c,(X7c(),A7c))&&(ZEb(h.c,c),true)}for(f=new Anb(h);f.a<f.c.c.length;){c=RD(ynb(f),27);dHd(k,c)}yob();_mb(h,new s6c);for(g=new Anb(h);g.a<g.c.c.length;){c=RD(ynb(g),27);j=RD(Gxd(c,(X7c(),A7c)),17).a;j=$wnd.Math.min(j,k.i);VGd(k,j,c)}i=0;for(d=new dMd(k);d.e!=d.i.gc();){c=RD(bMd(d),27);Ixd(c,(X7c(),z7c),sgb(i));++i}b.Vg()} +function PTc(a,b,c){var d,e,f,g,h,i,j,k;if($wnd.Math.abs(b.s-b.c)<Vze||$wnd.Math.abs(c.s-c.c)<Vze){return 0}d=OTc(a,b.j,c.e);e=OTc(a,c.j,b.e);f=d==-1||e==-1;g=0;if(f){if(d==-1){new bTc((fTc(),dTc),c,b,1);++g}if(e==-1){new bTc((fTc(),dTc),b,c,1);++g}}else{h=VTc(b.j,c.s,c.c);h+=VTc(c.e,b.s,b.c);i=VTc(c.j,b.s,b.c);i+=VTc(b.e,c.s,c.c);j=d+16*h;k=e+16*i;if(j<k){new bTc((fTc(),eTc),b,c,k-j)}else if(j>k){new bTc((fTc(),eTc),c,b,j-k)}else if(j>0&&k>0){new bTc((fTc(),eTc),b,c,0);new bTc(eTc,c,b,0)}}return g} +function pXc(a,b,c){var d,e,f;a.a=new bnb;for(f=Sub(b.b,0);f.b!=f.d.c;){e=RD(evb(f),39);while(RD(mQb(e,(h_c(),f_c)),17).a>a.a.c.length-1){Rmb(a.a,new Ptd(Hze,KEe))}d=RD(mQb(e,f_c),17).a;if(c==(Cmd(),ymd)||c==zmd){e.e.a<Kfb(UD(RD(Vmb(a.a,d),42).a))&&Ntd(RD(Vmb(a.a,d),42),e.e.a);e.e.a+e.f.a>Kfb(UD(RD(Vmb(a.a,d),42).b))&&Otd(RD(Vmb(a.a,d),42),e.e.a+e.f.a)}else{e.e.b<Kfb(UD(RD(Vmb(a.a,d),42).a))&&Ntd(RD(Vmb(a.a,d),42),e.e.b);e.e.b+e.f.b>Kfb(UD(RD(Vmb(a.a,d),42).b))&&Otd(RD(Vmb(a.a,d),42),e.e.b+e.f.b)}}} +function g2b(a,b,c,d){var e,f,g,h,i,j,k;f=i2b(d);h=Heb(TD(mQb(d,(yCc(),aBc))));if((h||Heb(TD(mQb(a,MAc))))&&!Dod(RD(mQb(a,BBc),101))){e=vpd(f);i=q2b(a,c,c==(BEc(),zEc)?e:spd(e))}else{i=new R3b;P3b(i,a);if(b){k=i.n;k.a=b.a-a.n.a;k.b=b.b-a.n.b;_id(k,0,0,a.o.a,a.o.b);Q3b(i,c2b(i,f))}else{e=vpd(f);Q3b(i,c==(BEc(),zEc)?e:spd(e))}g=RD(mQb(d,(Ywc(),kwc)),21);j=i.j;switch(f.g){case 2:case 1:(j==(qpd(),Yod)||j==npd)&&g.Fc((ovc(),lvc));break;case 4:case 3:(j==(qpd(),Xod)||j==ppd)&&g.Fc((ovc(),lvc));}}return i} +function VXb(a,b){var c,d,e,f,g,h;for(g=new vkb((new mkb(a.f.b)).a);g.b;){f=tkb(g);e=RD(f.ld(),602);if(b==1){if(e.Af()!=(Cmd(),Bmd)&&e.Af()!=xmd){continue}}else{if(e.Af()!=(Cmd(),ymd)&&e.Af()!=zmd){continue}}d=RD(RD(f.md(),42).b,86);h=RD(RD(f.md(),42).a,194);c=h.c;switch(e.Af().g){case 2:d.g.c=a.e.a;d.g.b=$wnd.Math.max(1,d.g.b+c);break;case 1:d.g.c=d.g.c+c;d.g.b=$wnd.Math.max(1,d.g.b-c);break;case 4:d.g.d=a.e.b;d.g.a=$wnd.Math.max(1,d.g.a+c);break;case 3:d.g.d=d.g.d+c;d.g.a=$wnd.Math.max(1,d.g.a-c);}}} +function NNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;h=$C(kE,Pwe,28,b.b.c.length,15,1);j=$C(hR,jwe,273,b.b.c.length,0,1);i=$C(jR,WAe,10,b.b.c.length,0,1);for(l=a.a,m=0,n=l.length;m<n;++m){k=l[m];p=0;for(g=new Anb(k.e);g.a<g.c.c.length;){e=RD(ynb(g),10);d=Q4b(e.c);++h[d];o=Kfb(UD(mQb(b,(yCc(),TBc))));h[d]>0&&!!i[d]&&(o=bFc(a.b,i[d],e));p=$wnd.Math.max(p,e.c.c.b+o)}for(f=new Anb(k.e);f.a<f.c.c.length;){e=RD(ynb(f),10);e.n.b=p+e.d.d;c=e.c;c.c.b=p+e.d.d+e.o.b+e.d.a;j[Wmb(c.b.b,c,0)]=e.k;i[Wmb(c.b.b,c,0)]=e}}} +function M5c(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(d=new is(Mr(zGd(b).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(!ZD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),193)){i=AGd(RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84));if(!nzd(c)){g=b.i+b.g/2;h=b.j+b.f/2;k=i.i+i.g/2;l=i.j+i.f/2;m=new pjd;m.a=k-g;m.b=l-h;f=new rjd(m.a,m.b);wid(f,b.g,b.f);m.a-=f.a;m.b-=f.b;g=k-m.a;h=l-m.b;j=new rjd(m.a,m.b);wid(j,i.g,i.f);m.a-=j.a;m.b-=j.b;k=g+m.a;l=h+m.b;e=IGd(c,true,true);Ozd(e,g);Pzd(e,h);Hzd(e,k);Izd(e,l);M5c(a,i)}}}} +function ocd(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,hGe),'ELK SPOrE Compaction'),'ShrinkTree is a compaction algorithm that maintains the topology of a layout. The relocation of diagram elements is based on contracting a spanning tree.'),new rcd)));Agd(a,hGe,iGe,iGd(mcd));Agd(a,hGe,jGe,iGd(jcd));Agd(a,hGe,kGe,iGd(icd));Agd(a,hGe,lGe,iGd(gcd));Agd(a,hGe,mGe,iGd(hcd));Agd(a,hGe,Eze,fcd);Agd(a,hGe,_ze,8);Agd(a,hGe,nGe,iGd(lcd));Agd(a,hGe,oGe,iGd(bcd));Agd(a,hGe,pGe,iGd(ccd));Agd(a,hGe,LDe,(Geb(),false))} +function hQc(a,b){var c,d,e,f,g,h,i,j,k,l;b.Ug('Simple node placement',1);l=RD(mQb(a,(Ywc(),Qwc)),312);h=0;for(f=new Anb(a.b);f.a<f.c.c.length;){d=RD(ynb(f),30);g=d.c;g.b=0;c=null;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);!!c&&(g.b+=_Ec(i,c,l.c));g.b+=i.d.d+i.o.b+i.d.a;c=i}h=$wnd.Math.max(h,g.b)}for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);g=d.c;k=(h-g.b)/2;c=null;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);!!c&&(k+=_Ec(i,c,l.c));k+=i.d.d;i.n.b=k;k+=i.o.b+i.d.a;c=i}}b.Vg()} +function tqc(a,b){var c,d,e,f;nqc(b.b.j);FDb(GDb(new SDb(null,new Swb(b.d,16)),new Eqc),new Gqc);for(f=new Anb(b.d);f.a<f.c.c.length;){e=RD(ynb(f),105);switch(e.e.g){case 0:c=RD(Vmb(e.j,0),113).d.j;Smc(e,RD(Lvb(KDb(RD(Qc(e.k,c),15).Oc(),lqc)),113));Tmc(e,RD(Lvb(JDb(RD(Qc(e.k,c),15).Oc(),lqc)),113));break;case 1:d=foc(e);Smc(e,RD(Lvb(KDb(RD(Qc(e.k,d[0]),15).Oc(),lqc)),113));Tmc(e,RD(Lvb(JDb(RD(Qc(e.k,d[1]),15).Oc(),lqc)),113));break;case 2:vqc(a,e);break;case 3:uqc(e);break;case 4:sqc(a,e);}qqc(e)}a.a=null} +function yRc(a,b,c){var d,e,f,g,h,i,j,k;d=a.a.o==(EQc(),DQc)?oxe:pxe;h=zRc(a,new xRc(b,c));if(!h.a&&h.c){Mub(a.d,h);return d}else if(h.a){e=h.a.c;i=h.a.d;if(c){j=a.a.c==(wQc(),vQc)?i:e;f=a.a.c==vQc?e:i;g=a.a.g[f.i.p];k=Kfb(a.a.p[g.p])+Kfb(a.a.d[f.i.p])+f.n.b+f.a.b-Kfb(a.a.d[j.i.p])-j.n.b-j.a.b}else{j=a.a.c==(wQc(),uQc)?i:e;f=a.a.c==uQc?e:i;k=Kfb(a.a.p[a.a.g[f.i.p].p])+Kfb(a.a.d[f.i.p])+f.n.b+f.a.b-Kfb(a.a.d[j.i.p])-j.n.b-j.a.b}a.a.n[a.a.g[e.i.p].p]=(Geb(),true);a.a.n[a.a.g[i.i.p].p]=true;return k}return d} +function Sfe(a,b,c,d){var e,f,g,h,i,j,k,l;if(d.gc()==0){return false}i=(nke(),RD(b,69).xk());g=i?d:new ZHd(d.gc());if(qke(a.e,b)){if(b.Si()){for(k=d.Kc();k.Ob();){j=k.Pb();if(!dge(a,b,j,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){f=oke(b,j);g.Fc(f)}}}else if(!i){for(k=d.Kc();k.Ob();){j=k.Pb();f=oke(b,j);g.Fc(f)}}}else{l=pke(a.e.Dh(),b);e=RD(a.g,124);for(h=0;h<a.i;++h){f=e[h];if(l.am(f.Lk())){throw Adb(new agb(gLe))}}if(d.gc()>1){throw Adb(new agb(gLe))}if(!i){f=oke(b,d.Kc().Pb());g.Fc(f)}}return XGd(a,gge(a,b,c),g)} +function Fge(a,b,c){var d,e,f,g,h,i,j,k;if(qke(a.e,b)){i=(nke(),RD(b,69).xk()?new ole(b,a):new Eke(b,a));bge(i.c,i.b);Ake(i,RD(c,16))}else{k=pke(a.e.Dh(),b);d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];f=e.Lk();if(k.am(f)){if(f==(Lle(),Jle)||f==Gle){j=Mge(a,b,c);h=g;j?vLd(a,g):++g;while(g<a.i){e=d[g];f=e.Lk();f==Jle||f==Gle?vLd(a,g):++g}j||RD(eHd(a,h,oke(b,c)),76)}else Mge(a,b,c)?vLd(a,g):RD(eHd(a,g,(nke(),RD(b,69).xk()?RD(c,76):oke(b,c))),76);return}}Mge(a,b,c)||WGd(a,(nke(),RD(b,69).xk()?RD(c,76):oke(b,c)))}} +function zPb(a,b,c){var d,e,f,g,h,i,j,k;if(!pb(c,a.b)){a.b=c;f=new CPb;g=RD(zDb(GDb(new SDb(null,new Swb(c.f,16)),f),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);a.e=true;a.f=true;a.c=true;a.d=true;e=g.Hc((IPb(),FPb));d=g.Hc(GPb);e&&!d&&(a.f=false);!e&&d&&(a.d=false);e=g.Hc(EPb);d=g.Hc(HPb);e&&!d&&(a.c=false);!e&&d&&(a.e=false)}k=RD(a.a.Ve(b,c),42);i=RD(k.a,17).a;j=RD(k.b,17).a;h=false;i<0?a.c||(h=true):a.e||(h=true);j<0?a.d||(h=true):a.f||(h=true);return h?zPb(a,k,c):k} +function fNb(a){var b,c,d,e;e=a.o;RMb();if(a.A.dc()||pb(a.A,QMb)){b=e.b}else{b=YKb(a.f);if(a.A.Hc((Qpd(),Npd))&&!a.B.Hc((dqd(),_pd))){b=$wnd.Math.max(b,YKb(RD(Vrb(a.p,(qpd(),Xod)),252)));b=$wnd.Math.max(b,YKb(RD(Vrb(a.p,ppd),252)))}c=TMb(a);!!c&&(b=$wnd.Math.max(b,c.b));if(a.A.Hc(Opd)){if(a.q==(Bod(),xod)||a.q==wod){b=$wnd.Math.max(b,SJb(RD(Vrb(a.b,(qpd(),Xod)),127)));b=$wnd.Math.max(b,SJb(RD(Vrb(a.b,ppd),127)))}}}Heb(TD(a.e.Tf().of((umd(),mld))))?(e.b=$wnd.Math.max(e.b,b)):(e.b=b);d=a.f.i;d.d=0;d.a=b;_Kb(a.f)} +function yNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;for(l=0;l<b.length;l++){for(h=a.Kc();h.Ob();){f=RD(h.Pb(),230);f.hg(l,b)}for(m=0;m<b[l].length;m++){for(i=a.Kc();i.Ob();){f=RD(i.Pb(),230);f.ig(l,m,b)}p=b[l][m].j;for(n=0;n<p.c.length;n++){for(j=a.Kc();j.Ob();){f=RD(j.Pb(),230);f.jg(l,m,n,b)}o=(tFb(n,p.c.length),RD(p.c[n],12));c=0;for(e=new l4b(o.b);xnb(e.a)||xnb(e.b);){d=RD(xnb(e.a)?ynb(e.a):ynb(e.b),18);for(k=a.Kc();k.Ob();){f=RD(k.Pb(),230);f.gg(l,m,n,c++,d,b)}}}}}for(g=a.Kc();g.Ob();){f=RD(g.Pb(),230);f.fg()}} +function $7b(a,b){var c,d,e,f,g,h,i;a.b=Kfb(UD(mQb(b,(yCc(),UBc))));a.c=Kfb(UD(mQb(b,XBc)));a.d=RD(mQb(b,DAc),350);a.a=RD(mQb(b,Xzc),282);Y7b(b);h=RD(zDb(CDb(CDb(EDb(EDb(new SDb(null,new Swb(b.b,16)),new c8b),new e8b),new g8b),new i8b),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(e=h.Kc();e.Ob();){c=RD(e.Pb(),18);g=RD(mQb(c,(Ywc(),Twc)),15);g.Jc(new k8b(a));pQb(c,Twc,null)}for(d=h.Kc();d.Ob();){c=RD(d.Pb(),18);i=RD(mQb(c,(Ywc(),Uwc)),18);f=RD(mQb(c,Rwc),15);S7b(a,f,i);pQb(c,Rwc,null)}} +function r2d(a,b){var c,d,e,f,g,h,i;if(a.a){h=a.a.xe();i=null;if(h!=null){b.a+=''+h}else{g=a.a.mk();if(g!=null){f=qhb(g,Fhb(91));if(f!=-1){i=(BFb(f,g.length+1),g.substr(f));b.a+=''+zhb(g==null?vve:(uFb(g),g),0,f)}else{b.a+=''+g}}}if(!!a.d&&a.d.i!=0){e=true;b.a+='<';for(d=new dMd(a.d);d.e!=d.i.gc();){c=RD(bMd(d),89);e?(e=false):(b.a+=pve,b);r2d(c,b)}b.a+='>'}i!=null&&(b.a+=''+i,b)}else if(a.e){h=a.e.zb;h!=null&&(b.a+=''+h,b)}else{b.a+='?';if(a.b){b.a+=' super ';r2d(a.b,b)}else{if(a.f){b.a+=' extends ';r2d(a.f,b)}}}} +function Uae(a){a.b=null;a.a=null;a.o=null;a.q=null;a.v=null;a.w=null;a.B=null;a.p=null;a.Q=null;a.R=null;a.S=null;a.T=null;a.U=null;a.V=null;a.W=null;a.bb=null;a.eb=null;a.ab=null;a.H=null;a.db=null;a.c=null;a.d=null;a.f=null;a.n=null;a.r=null;a.s=null;a.u=null;a.G=null;a.J=null;a.e=null;a.j=null;a.i=null;a.g=null;a.k=null;a.t=null;a.F=null;a.I=null;a.L=null;a.M=null;a.O=null;a.P=null;a.$=null;a.N=null;a.Z=null;a.cb=null;a.K=null;a.D=null;a.A=null;a.C=null;a._=null;a.fb=null;a.X=null;a.Y=null;a.gb=false;a.hb=false} +function yib(a){var b,c,d,e;d=Ajb((!a.c&&(a.c=ojb(Hdb(a.f))),a.c),0);if(a.e==0||a.a==0&&a.f!=-1&&a.e<0){return d}b=xib(a)<0?1:0;c=a.e;e=(d.length+1+$wnd.Math.abs(eE(a.e)),new cib);b==1&&(e.a+='-',e);if(a.e>0){c-=d.length-b;if(c>=0){e.a+='0.';for(;c>mib.length;c-=mib.length){$hb(e,mib)}_hb(e,mib,eE(c));Zhb(e,(BFb(b,d.length+1),d.substr(b)))}else{c=b-c;Zhb(e,zhb(d,b,eE(c)));e.a+='.';Zhb(e,yhb(d,eE(c)))}}else{Zhb(e,(BFb(b,d.length+1),d.substr(b)));for(;c<-mib.length;c+=mib.length){$hb(e,mib)}_hb(e,mib,eE(-c))}return e.a} +function BOc(a){var b,c,d,e,f,g,h,i,j;if(a.k!=(r3b(),p3b)){return false}if(a.j.c.length<=1){return false}f=RD(mQb(a,(yCc(),BBc)),101);if(f==(Bod(),wod)){return false}e=(wDc(),(!a.q?(yob(),yob(),wob):a.q)._b(iBc)?(d=RD(mQb(a,iBc),203)):(d=RD(mQb(Y2b(a),jBc),203)),d);if(e==uDc){return false}if(!(e==tDc||e==sDc)){g=Kfb(UD(hFc(a,fCc)));b=RD(mQb(a,eCc),140);!b&&(b=new R2b(g,g,g,g));j=b3b(a,(qpd(),ppd));i=b.d+b.a+(j.gc()-1)*g;if(i>a.o.b){return false}c=b3b(a,Xod);h=b.d+b.a+(c.gc()-1)*g;if(h>a.o.b){return false}}return true} +function VRc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;b.Ug('Orthogonal edge routing',1);j=Kfb(UD(mQb(a,(yCc(),cCc))));c=Kfb(UD(mQb(a,UBc)));d=Kfb(UD(mQb(a,XBc)));m=new TTc(0,c);q=0;g=new Jkb(a.b,0);h=null;k=null;i=null;l=null;do{k=g.b<g.d.gc()?(sFb(g.b<g.d.gc()),RD(g.d.Xb(g.c=g.b++),30)):null;l=!k?null:k.a;if(h){p2b(h,q);q+=h.c.a}p=!h?q:q+d;o=STc(m,a,i,l,p);e=!h||ar(i,(dSc(),bSc));f=!k||ar(l,(dSc(),bSc));if(o>0){n=(o-1)*c;!!h&&(n+=d);!!k&&(n+=d);n<j&&!e&&!f&&(n=j);q+=n}else !e&&!f&&(q+=j);h=k;i=l}while(k);a.f.a=q;b.Vg()} +function tfe(a,b){var c,d,e,f,g,h,i,j,k,l;k=null;!!a.d&&(k=RD(Xjb(a.d,b),142));if(!k){f=a.a.vi();l=f.i;if(!a.d||bkb(a.d)!=l){i=new Tsb;!!a.d&&Ld(i,a.d);j=i.f.c+i.i.c;for(h=j;h<l;++h){d=RD(QHd(f,h),142);e=Oee(a.e,d).xe();c=RD(e==null?rtb(i.f,null,d):Ltb(i.i,e,d),142);!!c&&c!=d&&(e==null?rtb(i.f,null,c):Ltb(i.i,e,c))}if(i.f.c+i.i.c!=l){for(g=0;g<j;++g){d=RD(QHd(f,g),142);e=Oee(a.e,d).xe();c=RD(e==null?rtb(i.f,null,d):Ltb(i.i,e,d),142);!!c&&c!=d&&(e==null?rtb(i.f,null,c):Ltb(i.i,e,c))}}a.d=i}k=RD(Xjb(a.d,b),142)}return k} +function w0b(a,b,c,d,e,f,g){var h,i,j,k,l,m,n;l=Heb(TD(mQb(b,(yCc(),bBc))));m=null;f==(BEc(),yEc)&&d.c.i==c?(m=d.c):f==zEc&&d.d.i==c&&(m=d.d);j=g;if(!j||!l||!!m){k=(qpd(),opd);m?(k=m.j):Dod(RD(mQb(c,BBc),101))&&(k=f==yEc?ppd:Xod);i=t0b(a,b,c,f,k,d);h=s0b((Y2b(c),d));if(f==yEc){Y0b(h,RD(Vmb(i.j,0),12));Z0b(h,e)}else{Y0b(h,e);Z0b(h,RD(Vmb(i.j,0),12))}j=new G0b(d,h,i,RD(mQb(i,(Ywc(),Awc)),12),f,!m)}else{Rmb(j.e,d);n=$wnd.Math.max(Kfb(UD(mQb(j.d,FAc))),Kfb(UD(mQb(d,FAc))));pQb(j.d,FAc,n)}Rc(a.a,d,new J0b(j.d,b,f));return j} +function gSd(){gSd=geb;var a;fSd=new MSd;_Rd=$C(qJ,Nve,2,0,6,1);URd=Rdb(xSd(33,58),xSd(1,26));VRd=Rdb(xSd(97,122),xSd(65,90));WRd=xSd(48,57);SRd=Rdb(URd,0);TRd=Rdb(VRd,WRd);XRd=Rdb(Rdb(0,xSd(1,6)),xSd(33,38));YRd=Rdb(Rdb(WRd,xSd(65,70)),xSd(97,102));cSd=Rdb(SRd,vSd("-_.!~*'()"));dSd=Rdb(TRd,ySd("-_.!~*'()"));vSd(MJe);ySd(MJe);Rdb(cSd,vSd(';:@&=+$,'));Rdb(dSd,ySd(';:@&=+$,'));ZRd=vSd(':/?#');$Rd=ySd(':/?#');aSd=vSd('/?#');bSd=ySd('/?#');a=new _sb;a.a.zc('jar',a);a.a.zc('zip',a);a.a.zc('archive',a);eSd=(yob(),new Lqb(a))} +function t0b(a,b,c,d,e,f){var g,h,i,j,k,l;g=null;j=d==(BEc(),yEc)?f.c:f.d;i=i2b(b);if(j.i==c){g=RD(Wjb(a.b,j),10);if(!g){g=f2b(j,RD(mQb(c,(yCc(),BBc)),101),e,p0b(j),null,j.n,j.o,i,b);pQb(g,(Ywc(),Awc),j);Zjb(a.b,j,g)}}else{g=f2b((k=new qQb,l=Kfb(UD(mQb(b,(yCc(),TBc))))/2,oQb(k,ABc,l),k),RD(mQb(c,BBc),101),e,d==yEc?-1:1,null,new pjd,new rjd(0,0),i,b);h=u0b(g,c,d);pQb(g,(Ywc(),Awc),h);Zjb(a.b,h,g)}RD(mQb(b,(Ywc(),kwc)),21).Fc((ovc(),hvc));Dod(RD(mQb(b,(yCc(),BBc)),101))?pQb(b,BBc,(Bod(),yod)):pQb(b,BBc,(Bod(),zod));return g} +function Yec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=0;o=0;i=Fnb(a.g,a.g.length);f=a.e;g=a.j;d=a.b;e=a.c;do{n=0;for(k=new Anb(a.q);k.a<k.c.c.length;){j=RD(ynb(k),10);m=Wec(a,j);c=true;(a.r==(aEc(),VDc)||a.r==YDc)&&(c=Heb(TD(m.b)));if(RD(m.a,17).a<0&&c){++n;i=Fnb(a.g,a.g.length);a.e=a.e+RD(m.a,17).a;o+=f-a.e;f=a.e+RD(m.a,17).a;g=a.j;d=bv(a.b);e=bv(a.c)}else{a.g=Fnb(i,i.length);a.e=f;a.b=(Qb(d),d?new dnb(d):cv(new Anb(d)));a.c=(Qb(e),e?new dnb(e):cv(new Anb(e)));a.j=g}}++h;l=n!=0&&Heb(TD(b.Kb(new Ptd(sgb(o),sgb(h)))))}while(l)} +function e8c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;g=a.f;m=b.f;h=g==(sad(),nad)||g==pad;n=m==nad||m==pad;i=g==oad||g==qad;o=m==oad||m==qad;j=g==oad||g==nad;p=m==oad||m==nad;if(h&&n){return a.f==pad?a:b}else if(i&&o){return a.f==qad?a:b}else if(j&&p){if(g==oad){l=a;k=b}else{l=b;k=a}f=(q=c.j+c.f,r=l.e+d.f,s=$wnd.Math.max(q,r),t=s-$wnd.Math.min(c.j,l.e),u=l.d+d.g-c.i,u*t);e=(v=c.i+c.g,w=k.d+d.g,A=$wnd.Math.max(v,w),B=A-$wnd.Math.min(c.i,k.d),C=k.e+d.f-c.j,B*C);return f<=e?a.f==oad?a:b:a.f==nad?a:b}return a} +function t0c(a,b){var c,d,e,f,g,h,i,j,k,l;pQb(b,(q$c(),g$c),0);i=RD(mQb(b,c$c),39);if(b.d.b==0){if(i){k=Kfb(UD(mQb(i,j$c)))+a.b+u0c(a,i,b);pQb(b,j$c,k)}else{pQb(b,j$c,0)}}else{for(d=(f=Sub((new dXc(b)).a.d,0),new gXc(f));dvb(d.a);){c=RD(evb(d.a),65).c;t0c(a,c)}h=RD(Hr((g=Sub((new dXc(b)).a.d,0),new gXc(g))),39);l=RD(Gr((e=Sub((new dXc(b)).a.d,0),new gXc(e))),39);j=(Kfb(UD(mQb(l,j$c)))+Kfb(UD(mQb(h,j$c))))/2;if(i){k=Kfb(UD(mQb(i,j$c)))+a.b+u0c(a,i,b);pQb(b,j$c,k);pQb(b,g$c,Kfb(UD(mQb(b,j$c)))-j);s0c(a,b)}else{pQb(b,j$c,j)}}} +function nJb(a){var b,c,d,e,f,g,h,i,j,k,l;k=a.e.a.c.length;for(g=new Anb(a.e.a);g.a<g.c.c.length;){f=RD(ynb(g),125);f.j=false}a.i=$C(kE,Pwe,28,k,15,1);a.g=$C(kE,Pwe,28,k,15,1);a.n=new bnb;e=0;l=new bnb;for(i=new Anb(a.e.a);i.a<i.c.c.length;){h=RD(ynb(i),125);h.d=e++;h.b.a.c.length==0&&Rmb(a.n,h);Tmb(l,h.g)}b=0;for(d=new Anb(l);d.a<d.c.c.length;){c=RD(ynb(d),218);c.c=b++;c.f=false}j=l.c.length;if(a.b==null||a.b.length<j){a.b=$C(iE,vxe,28,j,15,1);a.c=$C(xdb,Hye,28,j,16,1)}else{Nnb(a.c)}a.d=l;a.p=new Jub(Sv(a.d.c.length));a.j=1} +function uWb(a,b){var c,d,e,f,g,h,i,j,k;if(b.e.c.length<=1){return}a.f=b;a.d=RD(mQb(a.f,(dWb(),UVb)),391);a.g=RD(mQb(a.f,YVb),17).a;a.e=Kfb(UD(mQb(a.f,VVb)));a.c=Kfb(UD(mQb(a.f,TVb)));At(a.b);for(e=new Anb(a.f.c);e.a<e.c.c.length;){d=RD(ynb(e),289);zt(a.b,d.c,d,null);zt(a.b,d.d,d,null)}h=a.f.e.c.length;a.a=YC(iE,[Nve,vxe],[109,28],15,[h,h],2);for(j=new Anb(a.f.e);j.a<j.c.c.length;){i=RD(ynb(j),153);qWb(a,i,a.a[i.a])}a.i=YC(iE,[Nve,vxe],[109,28],15,[h,h],2);for(f=0;f<h;++f){for(g=0;g<h;++g){c=a.a[f][g];k=1/(c*c);a.i[f][g]=k}}} +function OWb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;h=b.ah();h||b.Ug(Pze,1);c=RD(mQb(a,(Ywc(),Kwc)),15);g=1/c.gc();if(b._g()){b.bh('ELK Layered uses the following '+c.gc()+' modules:');n=0;for(m=c.Kc();m.Ob();){k=RD(m.Pb(),47);d=(n<10?'0':'')+n++;b.bh(' Slot '+d+': '+nfb(rb(k)))}}o=0;for(l=c.Kc();l.Ob();){k=RD(l.Pb(),47);if(b.$g()){return}k.Kf(a,b.eh(g));++o}for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);Tmb(a.a,e.a);e.a.c.length=0}for(j=new Anb(a.a);j.a<j.c.c.length;){i=RD(ynb(j),10);g3b(i,null)}a.b.c.length=0;h||b.Vg()} +function y9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;j=new bnb;if(!nQb(a,(Ywc(),fwc))){return j}for(d=RD(mQb(a,fwc),15).Kc();d.Ob();){b=RD(d.Pb(),10);x9b(b,a);ZEb(j.c,b)}for(f=new Anb(a.b);f.a<f.c.c.length;){e=RD(ynb(f),30);for(h=new Anb(e.a);h.a<h.c.c.length;){g=RD(ynb(h),10);if(g.k!=(r3b(),m3b)){continue}i=RD(mQb(g,gwc),10);!!i&&(k=new R3b,P3b(k,g),l=RD(mQb(g,hwc),64),Q3b(k,l),m=RD(Vmb(i.j,0),12),n=new a1b,Y0b(n,k),Z0b(n,m),undefined)}}for(c=new Anb(j);c.a<c.c.c.length;){b=RD(ynb(c),10);g3b(b,RD(Vmb(a.b,a.b.c.length-1),30))}return j} +function U8c(a,b,c){var d,e,f,g,h,i,j,k,l;l=new bnb;k=new Had(0,c);f=0;Cad(k,new V9c(0,0,k,c));e=0;for(j=new dMd(a);j.e!=j.i.gc();){i=RD(bMd(j),27);d=RD(Vmb(k.a,k.a.c.length-1),172);h=e+i.g+(RD(Vmb(k.a,0),172).b.c.length==0?0:c);if(h>b||Heb(TD(Gxd(i,(X7c(),D7c))))){e=0;f+=k.b+c;ZEb(l.c,k);k=new Had(f,c);d=new V9c(0,k.f,k,c);Cad(k,d);e=0}if(d.b.c.length==0||!Heb(TD(Gxd(vCd(i),(X7c(),L7c))))&&(i.f>=d.o&&i.f<=d.f||d.a*0.5<=i.f&&d.a*1.5>=i.f)){K9c(d,i)}else{g=new V9c(d.s+d.r+c,k.f,k,c);Cad(k,g);K9c(g,i)}e=i.i+i.g}ZEb(l.c,k);return l} +function ste(a){var b,c,d,e;if(a.b==null||a.b.length<=2)return;if(a.a)return;b=0;e=0;while(e<a.b.length){if(b!=e){a.b[b]=a.b[e++];a.b[b+1]=a.b[e++]}else e+=2;c=a.b[b+1];while(e<a.b.length){if(c+1<a.b[e])break;if(c+1==a.b[e]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else if(c>=a.b[e+1]){e+=2}else if(c<a.b[e+1]){a.b[b+1]=a.b[e+1];c=a.b[b+1];e+=2}else{throw Adb(new yz('Token#compactRanges(): Internel Error: ['+a.b[b]+','+a.b[b+1]+'] ['+a.b[e]+','+a.b[e+1]+']'))}}b+=2}if(b!=a.b.length){d=$C(kE,Pwe,28,b,15,1);hib(a.b,0,d,0,b);a.b=d}a.a=true} +function x0b(a,b){var c,d,e,f,g,h,i;for(g=Ec(a.a).Kc();g.Ob();){f=RD(g.Pb(),18);if(f.b.c.length>0){d=new dnb(RD(Qc(a.a,f),21));yob();_mb(d,new M0b(b));e=new Jkb(f.b,0);while(e.b<e.d.gc()){c=(sFb(e.b<e.d.gc()),RD(e.d.Xb(e.c=e.b++),72));h=-1;switch(RD(mQb(c,(yCc(),wAc)),278).g){case 1:h=d.c.length-1;break;case 0:h=v0b(d);break;case 2:h=0;}if(h!=-1){i=(tFb(h,d.c.length),RD(d.c[h],249));Rmb(i.b.b,c);RD(mQb(Y2b(i.b.c.i),(Ywc(),kwc)),21).Fc((ovc(),gvc));RD(mQb(Y2b(i.b.c.i),kwc),21).Fc(evc);Ckb(e);pQb(c,Dwc,f)}}}Y0b(f,null);Z0b(f,null)}} +function wOb(a,b){var c,d,e,f;c=new BOb;d=RD(zDb(GDb(new SDb(null,new Swb(a.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[(xBb(),wBb),vBb]))),21);e=d.gc();e=e==2?1:0;e==1&&Gdb(Mdb(RD(zDb(CDb(d.Lc(),new DOb),PBb(Hgb(0),new uCb)),168).a,2),0)&&(e=0);d=RD(zDb(GDb(new SDb(null,new Swb(b.f,16)),c),sBb(new _Bb,new bCb,new yCb,new ACb,cD(WC(QL,1),jwe,108,0,[wBb,vBb]))),21);f=d.gc();f=f==2?1:0;f==1&&Gdb(Mdb(RD(zDb(CDb(d.Lc(),new FOb),PBb(Hgb(0),new uCb)),168).a,2),0)&&(f=0);if(e<f){return -1}if(e==f){return 0}return 1} +function W4b(a){var b,c,d,e,f,g,h,i,j,k,l,m;b=MCd(a);f=Heb(TD(Gxd(b,(yCc(),NAc))));k=0;e=0;for(j=new dMd((!a.e&&(a.e=new Yie(G4,a,7,4)),a.e));j.e!=j.i.gc();){i=RD(bMd(j),74);h=ozd(i);g=h&&f&&Heb(TD(Gxd(i,OAc)));m=AGd(RD(QHd((!i.c&&(i.c=new Yie(E4,i,5,8)),i.c),0),84));h&&g?++e:h&&!g?++k:vCd(m)==b||m==b?++e:++k}for(d=new dMd((!a.d&&(a.d=new Yie(G4,a,8,5)),a.d));d.e!=d.i.gc();){c=RD(bMd(d),74);h=ozd(c);g=h&&f&&Heb(TD(Gxd(c,OAc)));l=AGd(RD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),84));h&&g?++k:h&&!g?++e:vCd(l)==b||l==b?++k:++e}return k-e} +function Jec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;b.Ug('Edge splitting',1);if(a.b.c.length<=2){b.Vg();return}f=new Jkb(a.b,0);g=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30));while(f.b<f.d.gc()){e=g;g=(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30));for(i=new Anb(e.a);i.a<i.c.c.length;){h=RD(ynb(i),10);for(k=new Anb(h.j);k.a<k.c.c.length;){j=RD(ynb(k),12);for(d=new Anb(j.g);d.a<d.c.c.length;){c=RD(ynb(d),18);m=c.d;l=m.i.c;l!=e&&l!=g&&Oec(c,(n=new j3b(a),h3b(n,(r3b(),o3b)),pQb(n,(Ywc(),Awc),c),pQb(n,(yCc(),BBc),(Bod(),wod)),g3b(n,g),n))}}}}b.Vg()} +function MLc(a,b){var c,d,e,f,g,h,i,j,k,l,m;k=new bnb;m=new _sb;g=b.b;for(e=0;e<g.c.length;e++){j=(tFb(e,g.c.length),RD(g.c[e],30)).a;k.c.length=0;for(f=0;f<j.c.length;f++){h=a.a[e][f];h.p=f;h.k==(r3b(),q3b)&&(ZEb(k.c,h),true);$mb(RD(Vmb(b.b,e),30).a,f,h);h.j.c.length=0;Tmb(h.j,RD(RD(Vmb(a.b,e),15).Xb(f),16));Cod(RD(mQb(h,(yCc(),BBc)),101))||pQb(h,BBc,(Bod(),vod))}for(d=new Anb(k);d.a<d.c.c.length;){c=RD(ynb(d),10);l=KLc(c);m.a.zc(l,m);m.a.zc(c,m)}}for(i=m.a.ec().Kc();i.Ob();){h=RD(i.Pb(),10);yob();_mb(h.j,(sgc(),mgc));h.i=true;V2b(h)}} +function zib(a){var b,c,d,e,f;if(a.g!=null){return a.g}if(a.a<32){a.g=zjb(Hdb(a.f),eE(a.e));return a.g}e=Ajb((!a.c&&(a.c=ojb(Hdb(a.f))),a.c),0);if(a.e==0){return e}b=(!a.c&&(a.c=ojb(Hdb(a.f))),a.c).e<0?2:1;c=e.length;d=-a.e+c-b;f=new bib;f.a+=''+e;if(a.e>0&&d>=-6){if(d>=0){aib(f,c-eE(a.e),String.fromCharCode(46))}else{peb(f,b-1,b-1,'0.');aib(f,b+1,Ihb(mib,0,-eE(d)-1))}}else{if(c-b>=1){aib(f,b,String.fromCharCode(46));++c}aib(f,c,String.fromCharCode(69));d>0&&aib(f,++c,String.fromCharCode(43));aib(f,++c,''+Zdb(Hdb(d)))}a.g=f.a;return a.g} +function KNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;d=Kfb(UD(mQb(b,(yCc(),hBc))));v=RD(mQb(b,gCc),17).a;m=4;e=3;w=20/v;n=false;i=0;g=lve;do{f=i!=1;l=i!=0;A=0;for(q=a.a,s=0,u=q.length;s<u;++s){o=q[s];o.f=null;LNc(a,o,f,l,d);A+=$wnd.Math.abs(o.a)}do{h=PNc(a,b)}while(h);for(p=a.a,r=0,t=p.length;r<t;++r){o=p[r];c=XNc(o).a;if(c!=0){for(k=new Anb(o.e);k.a<k.c.c.length;){j=RD(ynb(k),10);j.n.b+=c}}}if(i==0||i==1){--m;if(m<=0&&(A<g||-m>v)){i=2;g=lve}else if(i==0){i=1;g=A}else{i=0;g=A}}else{n=A>=g||g-A<w;g=A;n&&--e}}while(!(n&&e<=0))} +function LFb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;o=new Tsb;for(f=a.a.ec().Kc();f.Ob();){d=RD(f.Pb(),177);Zjb(o,d,c.af(d))}g=(Qb(a),a?new dnb(a):cv(a.a.ec().Kc()));_mb(g,new NFb(o));h=Xx(g);i=new $Fb(b);n=new Tsb;rtb(n.f,b,i);while(h.a.gc()!=0){j=null;k=null;l=null;for(e=h.a.ec().Kc();e.Ob();){d=RD(e.Pb(),177);if(Kfb(UD(Wd(qtb(o.f,d))))<=oxe){if(Ujb(n,d.a)&&!Ujb(n,d.b)){k=d.b;l=d.a;j=d;break}if(Ujb(n,d.b)){if(!Ujb(n,d.a)){k=d.a;l=d.b;j=d;break}}}}if(!j){break}m=new $Fb(k);Rmb(RD(Wd(qtb(n.f,l)),225).a,m);rtb(n.f,k,m);h.a.Bc(j)!=null}return i} +function MFc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;c.Ug('Depth-first cycle removal',1);l=b.a;k=l.c.length;a.c=new bnb;a.d=$C(xdb,Hye,28,k,16,1);a.a=$C(xdb,Hye,28,k,16,1);a.b=new bnb;g=0;for(j=new Anb(l);j.a<j.c.c.length;){i=RD(ynb(j),10);i.p=g;gr(Z2b(i))&&Rmb(a.c,i);++g}for(n=new Anb(a.c);n.a<n.c.c.length;){m=RD(ynb(n),10);LFc(a,m)}for(f=0;f<k;f++){if(!a.d[f]){h=(tFb(f,l.c.length),RD(l.c[f],10));LFc(a,h)}}for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true);pQb(b,(Ywc(),awc),(Geb(),true))}a.c=null;a.d=null;a.a=null;a.b=null;c.Vg()} +function Kid(a,b){tid();var c,d,e,f,g,h;f=b.c-(a.c+a.b);e=a.c-(b.c+b.b);g=a.d-(b.d+b.a);c=b.d-(a.d+a.a);d=$wnd.Math.max(e,f);h=$wnd.Math.max(g,c);Zy();bz(vEe);if(($wnd.Math.abs(d)<=vEe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:cz(isNaN(d),isNaN(0)))>=0^(null,bz(vEe),($wnd.Math.abs(h)<=vEe||h==0||isNaN(h)&&isNaN(0)?0:h<0?-1:h>0?1:cz(isNaN(h),isNaN(0)))>=0)){return $wnd.Math.max(h,d)}bz(vEe);if(($wnd.Math.abs(d)<=vEe||d==0||isNaN(d)&&isNaN(0)?0:d<0?-1:d>0?1:cz(isNaN(d),isNaN(0)))>0){return $wnd.Math.sqrt(h*h+d*d)}return -$wnd.Math.sqrt(h*h+d*d)} +function hue(a,b){var c,d,e,f,g,h;if(!b)return;!a.a&&(a.a=new gyb);if(a.e==2){dyb(a.a,b);return}if(b.e==1){for(e=0;e<b.Pm();e++)hue(a,b.Lm(e));return}h=a.a.a.c.length;if(h==0){dyb(a.a,b);return}g=RD(eyb(a.a,h-1),122);if(!((g.e==0||g.e==10)&&(b.e==0||b.e==10))){dyb(a.a,b);return}f=b.e==0?2:b.Mm().length;if(g.e==0){c=new Rhb;d=g.Km();d>=txe?Nhb(c,qse(d)):Jhb(c,d&Bwe);g=(++Use,new eue(10,null,0));fyb(a.a,g,h-1)}else{c=(g.Mm().length+f,new Rhb);Nhb(c,g.Mm())}if(b.e==0){d=b.Km();d>=txe?Nhb(c,qse(d)):Jhb(c,d&Bwe)}else{Nhb(c,b.Mm())}RD(g,530).b=c.a} +function Qsc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(c.dc()){return}h=0;m=0;d=c.Kc();o=RD(d.Pb(),17).a;while(h<b.f){if(h==o){m=0;d.Ob()?(o=RD(d.Pb(),17).a):(o=b.f+1)}if(h!=m){q=RD(Vmb(a.b,h),30);n=RD(Vmb(a.b,m),30);p=bv(q.a);for(l=new Anb(p);l.a<l.c.c.length;){k=RD(ynb(l),10);f3b(k,n.a.c.length,n);if(m==0){g=bv(Z2b(k));for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),18);X0b(e,true);pQb(a,(Ywc(),awc),(Geb(),true));osc(a,e,1)}}}}++m;++h}i=new Jkb(a.b,0);while(i.b<i.d.gc()){j=(sFb(i.b<i.d.gc()),RD(i.d.Xb(i.c=i.b++),30));j.a.c.length==0&&Ckb(i)}} +function Xjc(a,b,c){var d,e,f;e=RD(mQb(b,(yCc(),Xzc)),282);if(e==($uc(),Yuc)){return}c.Ug('Horizontal Compaction',1);a.a=b;f=new Ckc;d=new VGb((f.d=b,f.c=RD(mQb(f.d,yAc),223),tkc(f),Akc(f),zkc(f),f.a));TGb(d,a.b);switch(RD(mQb(b,Wzc),431).g){case 1:RGb(d,new Pic(a.a));break;default:RGb(d,(FGb(),DGb));}switch(e.g){case 1:KGb(d);break;case 2:KGb(JGb(d,(Cmd(),zmd)));break;case 3:KGb(SGb(JGb(KGb(d),(Cmd(),zmd)),new fkc));break;case 4:KGb(SGb(JGb(KGb(d),(Cmd(),zmd)),new hkc(f)));break;case 5:KGb(QGb(d,Vjc));}JGb(d,(Cmd(),ymd));d.e=true;qkc(f);c.Vg()} +function bqc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;g=b.b;k=g.o;i=g.d;d=Kfb(UD(k2b(g,(yCc(),TBc))));e=Kfb(UD(k2b(g,VBc)));j=Kfb(UD(k2b(g,dCc)));h=new T2b;D2b(h,i.d,i.c,i.a,i.b);m=Zpc(b,d,e,j);for(r=new Anb(b.d);r.a<r.c.c.length;){q=RD(ynb(r),105);for(o=q.f.a.ec().Kc();o.Ob();){n=RD(o.Pb(),340);f=n.a;l=Xpc(n);c=(s=new Ejd,Vpc(n,n.c,m,s),Upc(n,l,m,s),Vpc(n,n.d,m,s),s);c=a.ng(n,l,c);Xub(f.a);ye(f.a,c);FDb(new SDb(null,new Swb(c,16)),new fqc(k,h))}p=q.i;if(p){aqc(q,p,m,e);t=new sjd(p.g);cqc(k,h,t);$id(t,p.j);cqc(k,h,t)}}D2b(i,h.d,h.c,h.a,h.b)} +function f8c(a,b,c,d,e,f,g,h){var i,j,k,l;i=dv(cD(WC(y1,1),rve,238,0,[b,c,d,e]));l=null;switch(a.b.g){case 1:l=dv(cD(WC(h1,1),rve,535,0,[new r8c,new h8c,new j8c]));break;case 0:l=dv(cD(WC(h1,1),rve,535,0,[new j8c,new h8c,new r8c]));break;case 2:l=dv(cD(WC(h1,1),rve,535,0,[new h8c,new r8c,new j8c]));}for(k=new Anb(l);k.a<k.c.c.length;){j=RD(ynb(k),535);i.c.length>1&&(i=j.Hg(i,a.a,h))}if(i.c.length==1){return RD(Vmb(i,i.c.length-1),238)}if(i.c.length==2){return e8c((tFb(0,i.c.length),RD(i.c[0],238)),(tFb(1,i.c.length),RD(i.c[1],238)),g,f)}return null} +function CZc(a,b,c){var d,e,f,g,h,i,j;c.Ug('Find roots',1);a.a.c.length=0;for(e=Sub(b.b,0);e.b!=e.d.c;){d=RD(evb(e),39);if(d.b.b==0){pQb(d,(q$c(),n$c),(Geb(),true));Rmb(a.a,d)}}switch(a.a.c.length){case 0:f=new bXc(0,b,'DUMMY_ROOT');pQb(f,(q$c(),n$c),(Geb(),true));pQb(f,WZc,true);Mub(b.b,f);break;case 1:break;default:g=new bXc(0,b,IEe);for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),39);j=new WWc(g,h);pQb(j,(q$c(),WZc),(Geb(),true));Mub(g.a.a,j);Mub(g.d,j);Mub(h.b,j);pQb(h,n$c,false)}pQb(g,(q$c(),n$c),(Geb(),true));pQb(g,WZc,true);Mub(b.b,g);}c.Vg()} +function AQb(a){var b,c,d,e,f,g;Umb(a.a,new GQb);for(c=new Anb(a.a);c.a<c.c.c.length;){b=RD(ynb(c),225);d=ojd(ajd(RD(a.b,68).c),RD(b.b,68).c);if(wQb){g=RD(a.b,68).b;f=RD(b.b,68).b;if($wnd.Math.abs(d.a)>=$wnd.Math.abs(d.b)){d.b=0;f.d+f.a>g.d&&f.d<g.d+g.a&&kjd(d,$wnd.Math.max(g.c-(f.c+f.b),f.c-(g.c+g.b)))}else{d.a=0;f.c+f.b>g.c&&f.c<g.c+g.b&&kjd(d,$wnd.Math.max(g.d-(f.d+f.a),f.d-(g.d+g.a)))}}else{kjd(d,SQb(RD(a.b,68),RD(b.b,68)))}e=$wnd.Math.sqrt(d.a*d.a+d.b*d.b);e=CQb(xQb,b,e,d);kjd(d,e);RQb(RD(b.b,68),d);Umb(b.a,new IQb(d));RD(xQb.b,68);BQb(xQb,yQb,b)}} +function tOc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;a.f=new BIb;j=0;e=0;for(g=new Anb(a.e.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p=j++;for(d=new is(Mr(a3b(h).a.Kc(),new ir));gs(d);){c=RD(hs(d),18);c.p=e++}b=BOc(h);for(m=new Anb(h.j);m.a<m.c.c.length;){l=RD(ynb(m),12);if(b){o=l.a.b;if(o!=$wnd.Math.floor(o)){k=o-Xdb(Hdb($wnd.Math.round(o)));l.a.b-=k}}n=l.n.b+l.a.b;if(n!=$wnd.Math.floor(n)){k=n-Xdb(Hdb($wnd.Math.round(n)));l.n.b-=k}}}}a.g=j;a.b=e;a.i=$C(XY,rve,412,j,0,1);a.c=$C(WY,rve,655,e,0,1);a.d.a.$b()} +function sLd(a){var b,c,d,e,f,g,h,i,j;if(a.Pj()){i=a.Qj();if(a.i>0){b=new zNd(a.i,a.g);c=a.i;f=c<100?null:new gLd(c);if(a.Tj()){for(d=0;d<a.i;++d){g=a.g[d];f=a.Vj(g,f)}}OHd(a);e=c==1?a.Ij(4,QHd(b,0),null,0,i):a.Ij(6,b,null,-1,i);if(a.Mj()){for(d=new yMd(b);d.e!=d.i.gc();){f=a.Oj(xMd(d),f)}if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}else{if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}}else{OHd(a);a.Jj(a.Ij(6,(yob(),vob),null,-1,i))}}else if(a.Mj()){if(a.i>0){h=a.g;j=a.i;OHd(a);f=j<100?null:new gLd(j);for(d=0;d<j;++d){g=h[d];f=a.Oj(g,f)}!!f&&f.oj()}else{OHd(a)}}else{OHd(a)}} +function xVc(a,b,c){var d,e,f,g,h,i,j,k,l,m;rVc(this);c==(dVc(),bVc)?Ysb(this.r,a):Ysb(this.w,a);k=oxe;j=pxe;for(g=b.a.ec().Kc();g.Ob();){e=RD(g.Pb(),42);h=RD(e.a,464);d=RD(e.b,18);i=d.c;i==a&&(i=d.d);h==bVc?Ysb(this.r,i):Ysb(this.w,i);m=(qpd(),hpd).Hc(i.j)?Kfb(UD(mQb(i,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).b;k=$wnd.Math.min(k,m);j=$wnd.Math.max(j,m)}l=(qpd(),hpd).Hc(a.j)?Kfb(UD(mQb(a,(Ywc(),Swc)))):xjd(cD(WC(l3,1),Nve,8,0,[a.i.n,a.n,a.a])).b;vVc(this,l,k,j);for(f=b.a.ec().Kc();f.Ob();){e=RD(f.Pb(),42);sVc(this,RD(e.b,18))}this.o=false} +function wD(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c=a.l&8191;d=a.l>>13|(a.m&15)<<9;e=a.m>>4&8191;f=a.m>>17|(a.h&255)<<5;g=(a.h&1048320)>>8;h=b.l&8191;i=b.l>>13|(b.m&15)<<9;j=b.m>>4&8191;k=b.m>>17|(b.h&255)<<5;l=(b.h&1048320)>>8;B=c*h;C=d*h;D=e*h;F=f*h;G=g*h;if(i!=0){C+=c*i;D+=d*i;F+=e*i;G+=f*i}if(j!=0){D+=c*j;F+=d*j;G+=e*j}if(k!=0){F+=c*k;G+=d*k}l!=0&&(G+=c*l);n=B&dxe;o=(C&511)<<13;m=n+o;q=B>>22;r=C>>9;s=(D&262143)<<4;t=(F&31)<<17;p=q+r+s+t;v=D>>18;w=F>>5;A=(G&4095)<<8;u=v+w+A;p+=m>>22;m&=dxe;u+=p>>22;p&=dxe;u&=exe;return hD(m,p,u)} +function Fac(a){var b,c,d,e,f,g,h;h=RD(Vmb(a.j,0),12);if(h.g.c.length!=0&&h.e.c.length!=0){throw Adb(new dgb('Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges.'))}if(h.g.c.length!=0){f=oxe;for(c=new Anb(h.g);c.a<c.c.c.length;){b=RD(ynb(c),18);g=b.d.i;d=RD(mQb(g,(yCc(),_Ac)),140);f=$wnd.Math.min(f,g.n.a-d.b)}return new cc(Qb(f))}if(h.e.c.length!=0){e=pxe;for(c=new Anb(h.e);c.a<c.c.c.length;){b=RD(ynb(c),18);g=b.c.i;d=RD(mQb(g,(yCc(),_Ac)),140);e=$wnd.Math.max(e,g.n.a+g.o.a+d.c)}return new cc(Qb(e))}return wb(),wb(),vb} +function cZd(a,b){var c,d,e,f,g,h,i;if(a.ol()){if(a.i>4){if(a.fk(b)){if(a.al()){e=RD(b,54);d=e.Eh();i=d==a.e&&(a.ml()?e.yh(e.Fh(),a.il())==a.jl():-1-e.Fh()==a.Lj());if(a.nl()&&!i&&!d&&!!e.Jh()){for(f=0;f<a.i;++f){c=a.pl(RD(a.g[f],58));if(dE(c)===dE(b)){return true}}}return i}else if(a.ml()&&!a.ll()){g=RD(b,58).Mh(Z5d(RD(a.Lk(),19)));if(dE(g)===dE(a.e)){return true}else if(g==null||!RD(g,58).Vh()){return false}}}else{return false}}h=PHd(a,b);if(a.nl()&&!h){for(f=0;f<a.i;++f){e=a.pl(RD(a.g[f],58));if(dE(e)===dE(b)){return true}}}return h}else{return PHd(a,b)}} +function bGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Interactive cycle breaking',1);l=new bnb;for(n=new Anb(b.a);n.a<n.c.c.length;){m=RD(ynb(n),10);m.p=1;o=_2b(m).a;for(k=c3b(m,(BEc(),zEc)).Kc();k.Ob();){j=RD(k.Pb(),12);for(f=new Anb(j.g);f.a<f.c.c.length;){d=RD(ynb(f),18);p=d.d.i;if(p!=m){q=_2b(p).a;q<o&&(ZEb(l.c,d),true)}}}}for(g=new Anb(l);g.a<g.c.c.length;){d=RD(ynb(g),18);X0b(d,true)}l.c.length=0;for(i=new Anb(b.a);i.a<i.c.c.length;){h=RD(ynb(i),10);h.p>0&&aGc(a,h,l)}for(e=new Anb(l);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true)}l.c.length=0;c.Vg()} +function mMc(a,b){var c,d,e,f,g,h,i,j,k;c=0;k=new bnb;for(h=new Anb(b);h.a<h.c.c.length;){g=RD(ynb(h),12);$Lc(a.b,a.d[g.p]);k.c.length=0;switch(g.i.k.g){case 0:d=RD(mQb(g,(Ywc(),Iwc)),10);Umb(d.j,new XMc(k));break;case 1:Mvb(DDb(CDb(new SDb(null,new Swb(g.i.j,16)),new ZMc(g))),new aNc(k));break;case 3:e=RD(mQb(g,(Ywc(),Awc)),12);Rmb(k,new Ptd(e,sgb(g.e.c.length+g.g.c.length)));}for(j=new Anb(k);j.a<j.c.c.length;){i=RD(ynb(j),42);f=AMc(a,RD(i.a,12));if(f>a.d[g.p]){c+=ZLc(a.b,f)*RD(i.b,17).a;hmb(a.a,sgb(f))}}while(!nmb(a.a)){XLc(a.b,RD(smb(a.a),17).a)}}return c} +function x9b(a,b){var c,d,e,f,g,h,i,j,k,l;k=RD(mQb(a,(Ywc(),hwc)),64);d=RD(Vmb(a.j,0),12);k==(qpd(),Yod)?Q3b(d,npd):k==npd&&Q3b(d,Yod);if(RD(mQb(b,(yCc(),lBc)),181).Hc((Qpd(),Ppd))){i=Kfb(UD(mQb(a,_Bc)));j=Kfb(UD(mQb(a,aCc)));g=Kfb(UD(mQb(a,ZBc)));h=RD(mQb(b,EBc),21);if(h.Hc((Pod(),Lod))){c=j;l=a.o.a/2-d.n.a;for(f=new Anb(d.f);f.a<f.c.c.length;){e=RD(ynb(f),72);e.n.b=c;e.n.a=l-e.o.a/2;c+=e.o.b+g}}else if(h.Hc(Nod)){for(f=new Anb(d.f);f.a<f.c.c.length;){e=RD(ynb(f),72);e.n.a=i+a.o.a-d.n.a}}NJb(new PJb((i1b(),new t1b(b,false,false,new _1b))),new F1b(null,a,false))}} +function ykc(a,b){var c,d,e,f,g,h,i,j,k;if(b.c.length==0){return}yob();Ynb(b.c,b.c.length,null);e=new Anb(b);d=RD(ynb(e),154);while(e.a<e.c.c.length){c=RD(ynb(e),154);if(rGb(d.e.c,c.e.c)&&!(uGb(Mid(d.e).b,c.e.d)||uGb(Mid(c.e).b,d.e.d))){d=(Tmb(d.k,c.k),Tmb(d.b,c.b),Tmb(d.c,c.c),ye(d.i,c.i),Tmb(d.d,c.d),Tmb(d.j,c.j),f=$wnd.Math.min(d.e.c,c.e.c),g=$wnd.Math.min(d.e.d,c.e.d),h=$wnd.Math.max(d.e.c+d.e.b,c.e.c+c.e.b),i=h-f,j=$wnd.Math.max(d.e.d+d.e.a,c.e.d+c.e.a),k=j-g,Rid(d.e,f,g,i,k),$Gb(d.f,c.f),!d.a&&(d.a=c.a),Tmb(d.g,c.g),Rmb(d.g,c),d)}else{Bkc(a,d);d=c}}Bkc(a,d)} +function B0b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;i=new bnb;for(f=new Anb(b.a);f.a<f.c.c.length;){e=RD(ynb(f),10);for(h=new Anb(e.j);h.a<h.c.c.length;){g=RD(ynb(h),12);k=null;for(t=s2b(g.g),u=0,v=t.length;u<v;++u){s=t[u];if(!n2b(s.d.i,c)){r=w0b(a,b,c,s,s.c,(BEc(),zEc),k);r!=k&&(ZEb(i.c,r),true);r.c&&(k=r)}}j=null;for(o=s2b(g.e),p=0,q=o.length;p<q;++p){n=o[p];if(!n2b(n.c.i,c)){r=w0b(a,b,c,n,n.d,(BEc(),yEc),j);r!=j&&(ZEb(i.c,r),true);r.c&&(j=r)}}}}for(m=new Anb(i);m.a<m.c.c.length;){l=RD(ynb(m),452);Wmb(b.a,l.a,0)!=-1||Rmb(b.a,l.a);l.c&&(ZEb(d.c,l),true)}} +function hrd(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;l=new sjd(RD(Gxd(a,(hkd(),bkd)),8));l.a=$wnd.Math.max(l.a-c.b-c.c,0);l.b=$wnd.Math.max(l.b-c.d-c.a,0);e=UD(Gxd(a,Xjd));(e==null||(uFb(e),e)<=0)&&(e=1.3);h=new bnb;for(o=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));o.e!=o.i.gc();){n=RD(bMd(o),27);g=new Ard(n);ZEb(h.c,g)}m=RD(Gxd(a,Yjd),320);switch(m.g){case 3:q=erd(h,b,l.a,l.b,(j=d,uFb(e),e,j));break;case 1:q=drd(h,b,l.a,l.b,(k=d,uFb(e),e,k));break;default:q=frd(h,b,l.a,l.b,(i=d,uFb(e),e,i));}f=new zrd(q);p=ird(f,b,c,l.a,l.b,d,(uFb(e),e));Esd(a,p.a,p.b,false,true)} +function m2b(a,b,c,d){var e,f,g,h,i,j;h=a.j;if(h==(qpd(),opd)&&b!=(Bod(),zod)&&b!=(Bod(),Aod)){h=c2b(a,c);Q3b(a,h);!(!a.q?(yob(),yob(),wob):a.q)._b((yCc(),ABc))&&h!=opd&&(a.n.a!=0||a.n.b!=0)&&pQb(a,ABc,b2b(a,h))}if(b==(Bod(),xod)){j=0;switch(h.g){case 1:case 3:f=a.i.o.a;f>0&&(j=a.n.a/f);break;case 2:case 4:e=a.i.o.b;e>0&&(j=a.n.b/e);}pQb(a,(Ywc(),Jwc),j)}i=a.o;g=a.a;if(d){g.a=d.a;g.b=d.b;a.d=true}else if(b!=zod&&b!=Aod&&h!=opd){switch(h.g){case 1:g.a=i.a/2;break;case 2:g.a=i.a;g.b=i.b/2;break;case 3:g.a=i.a/2;g.b=i.b;break;case 4:g.b=i.b/2;}}else{g.a=i.a/2;g.b=i.b/2}} +function VJd(a){var b,c,d,e,f,g,h,i,j,k;if(a.Pj()){k=a.Ej();i=a.Qj();if(k>0){b=new $Hd(a.pj());c=k;f=c<100?null:new gLd(c);aJd(a,c,b.g);e=c==1?a.Ij(4,QHd(b,0),null,0,i):a.Ij(6,b,null,-1,i);if(a.Mj()){for(d=new dMd(b);d.e!=d.i.gc();){f=a.Oj(bMd(d),f)}if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}else{if(!f){a.Jj(e)}else{f.nj(e);f.oj()}}}else{aJd(a,a.Ej(),a.Fj());a.Jj(a.Ij(6,(yob(),vob),null,-1,i))}}else if(a.Mj()){k=a.Ej();if(k>0){h=a.Fj();j=k;aJd(a,k,h);f=j<100?null:new gLd(j);for(d=0;d<j;++d){g=h[d];f=a.Oj(g,f)}!!f&&f.oj()}else{aJd(a,a.Ej(),a.Fj())}}else{aJd(a,a.Ej(),a.Fj())}} +function frd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;h=$C(iE,vxe,28,a.c.length,15,1);m=new pwb(new Qrd);iwb(m,a);j=0;p=new bnb;while(m.b.c.length!=0){g=RD(m.b.c.length==0?null:Vmb(m.b,0),163);if(j>1&&urd(g)*trd(g)/2>h[0]){f=0;while(f<p.c.length-1&&urd(g)*trd(g)/2>h[f]){++f}o=new Rkb(p,0,f+1);l=new zrd(o);k=urd(g)/trd(g);i=ird(l,b,new z3b,c,d,e,k);$id(hjd(l.e),i);zFb(lwb(m,l),Bxe);n=new Rkb(p,f+1,p.c.length);iwb(m,n);p.c.length=0;j=0;Pnb(h,h.length,0)}else{q=m.b.c.length==0?null:Vmb(m.b,0);q!=null&&owb(m,0);j>0&&(h[j]=h[j-1]);h[j]+=urd(g)*trd(g);++j;ZEb(p.c,g)}}return p} +function _nc(a,b){var c,d,e,f;c=b.b;f=new dnb(c.j);e=0;d=c.j;d.c.length=0;Nnc(RD($i(a.b,(qpd(),Yod),(joc(),ioc)),15),c);e=Onc(f,e,new Hoc,d);Nnc(RD($i(a.b,Yod,hoc),15),c);e=Onc(f,e,new Joc,d);Nnc(RD($i(a.b,Yod,goc),15),c);Nnc(RD($i(a.b,Xod,ioc),15),c);Nnc(RD($i(a.b,Xod,hoc),15),c);e=Onc(f,e,new Loc,d);Nnc(RD($i(a.b,Xod,goc),15),c);Nnc(RD($i(a.b,npd,ioc),15),c);e=Onc(f,e,new Noc,d);Nnc(RD($i(a.b,npd,hoc),15),c);e=Onc(f,e,new Poc,d);Nnc(RD($i(a.b,npd,goc),15),c);Nnc(RD($i(a.b,ppd,ioc),15),c);e=Onc(f,e,new toc,d);Nnc(RD($i(a.b,ppd,hoc),15),c);Nnc(RD($i(a.b,ppd,goc),15),c)} +function jJc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;for(h=new Anb(b);h.a<h.c.c.length;){f=RD(ynb(h),239);f.e=null;f.c=0}i=null;for(g=new Anb(b);g.a<g.c.c.length;){f=RD(ynb(g),239);l=f.d[0];if(c&&l.k!=(r3b(),p3b)){continue}for(n=RD(mQb(l,(Ywc(),qwc)),15).Kc();n.Ob();){m=RD(n.Pb(),10);if(!c||m.k==(r3b(),p3b)){(!f.e&&(f.e=new bnb),f.e).Fc(a.b[m.c.p][m.p]);++a.b[m.c.p][m.p].c}}if(!c&&l.k==(r3b(),p3b)){if(i){for(k=RD(Qc(a.d,i),21).Kc();k.Ob();){j=RD(k.Pb(),10);for(e=RD(Qc(a.d,l),21).Kc();e.Ob();){d=RD(e.Pb(),10);wJc(a.b[j.c.p][j.p]).Fc(a.b[d.c.p][d.p]);++a.b[d.c.p][d.p].c}}}i=l}}} +function iGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Model order cycle breaking',1);a.a=0;a.b=0;n=new bnb;k=b.a.c.length;for(j=new Anb(b.a);j.a<j.c.c.length;){i=RD(ynb(j),10);nQb(i,(Ywc(),zwc))&&(k=$wnd.Math.max(k,RD(mQb(i,zwc),17).a+1))}for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);g=hGc(a,o,k);for(m=c3b(o,(BEc(),zEc)).Kc();m.Ob();){l=RD(m.Pb(),12);for(f=new Anb(l.g);f.a<f.c.c.length;){d=RD(ynb(f),18);q=d.d.i;h=hGc(a,q,k);h<g&&(ZEb(n.c,d),true)}}}for(e=new Anb(n);e.a<e.c.c.length;){d=RD(ynb(e),18);X0b(d,true);pQb(b,(Ywc(),awc),(Geb(),true))}n.c.length=0;c.Vg()} +function qUb(a,b,c){var d,e,f,g,h,i,j,k,l,m;g=b.d;h=c.d;while(g.a-h.a==0&&g.b-h.b==0){i=false;if(ZD(b,250)&&ZD(c,250)&&!i){j=RD(b,250).a;k=ojd(new sjd($Tb(j)),ZTb(j));d=2;e=new rjd(k.a/$wnd.Math.sqrt(k.a*k.a+k.b*k.b)*d,-k.b/$wnd.Math.sqrt(k.a*k.a+k.b*k.b)*d);$id(g,e);l=RD(c,250).a;m=ojd(new sjd($Tb(l)),ZTb(l));d=k==m?-2:2;f=new rjd(m.a/$wnd.Math.sqrt(m.a*m.a+m.b*m.b)*d,-(m.b/$wnd.Math.sqrt(m.a*m.a+m.b*m.b))*d);$id(g,f);i=true}else{g.a+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;g.b+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;h.a+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5;h.b+=Kwb(a,26)*Kxe+Kwb(a,27)*Lxe-0.5}}} +function NWb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;j=KWb(b);q=RD(mQb(b,(yCc(),oAc)),322);xgb(j,new UWb(q));r=RD(mQb(b,gAc),298);xgb(j,new WWb(r));p=0;k=new bnb;for(f=new Kmb(j);f.a!=f.b;){e=RD(Imb(f),36);cXb(a.c,e);m=RD(mQb(e,(Ywc(),Kwc)),15);p+=m.gc();d=m.Kc();Rmb(k,new Ptd(e,d))}c.Ug('Recursive hierarchical layout',p);o=0;n=RD(RD(Vmb(k,k.c.length-1),42).b,51);while(n.Ob()){for(i=new Anb(k);i.a<i.c.c.length;){h=RD(ynb(i),42);m=RD(h.b,51);g=RD(h.a,36);while(m.Ob()){l=RD(m.Pb(),47);if(ZD(l,514)){if(!g.e){l.Kf(g,c.eh(1));++o;break}else{break}}else{l.Kf(g,c.eh(1));++o}}}}c.Vg()} +function Cec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;b.Ug('Layer size calculation',1);k=oxe;j=pxe;e=false;for(h=new Anb(a.b);h.a<h.c.c.length;){g=RD(ynb(h),30);i=g.c;i.a=0;i.b=0;if(g.a.c.length==0){continue}e=true;for(m=new Anb(g.a);m.a<m.c.c.length;){l=RD(ynb(m),10);o=l.o;n=l.d;i.a=$wnd.Math.max(i.a,o.a+n.b+n.c)}d=RD(Vmb(g.a,0),10);p=d.n.b-d.d.d;d.k==(r3b(),m3b)&&(p-=RD(mQb(a,(yCc(),eCc)),140).d);f=RD(Vmb(g.a,g.a.c.length-1),10);c=f.n.b+f.o.b+f.d.a;f.k==m3b&&(c+=RD(mQb(a,(yCc(),eCc)),140).a);i.b=c-p;k=$wnd.Math.min(k,p);j=$wnd.Math.max(j,c)}if(!e){k=0;j=0}a.f.b=j-k;a.c.b-=k;b.Vg()} +function p2b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;f=0;g=0;for(j=new Anb(a.a);j.a<j.c.c.length;){h=RD(ynb(j),10);f=$wnd.Math.max(f,h.d.b);g=$wnd.Math.max(g,h.d.c)}for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);c=RD(mQb(h,(yCc(),Rzc)),255);switch(c.g){case 1:o=0;break;case 2:o=1;break;case 5:o=0.5;break;default:d=0;l=0;for(n=new Anb(h.j);n.a<n.c.c.length;){m=RD(ynb(n),12);m.e.c.length==0||++d;m.g.c.length==0||++l}d+l==0?(o=0.5):(o=l/(d+l));}q=a.c;k=h.o.a;r=(q.a-k)*o;o>0.5?(r-=g*2*(o-0.5)):o<0.5&&(r+=f*2*(0.5-o));e=h.d.b;r<e&&(r=e);p=h.d.c;r>q.a-p-k&&(r=q.a-p-k);h.n.a=b+r}} +function jec(a){var b,c,d,e,f;d=RD(mQb(a,(yCc(),UAc)),171);if(d==(cxc(),$wc)){for(c=new is(Mr(Z2b(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),18);if(!lec(b)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. "+'FIRST_SEPARATE nodes must not have incoming edges.'))}}}else if(d==axc){for(f=new is(Mr(a3b(a).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!lec(e)){throw Adb(new Jed(nBe+X2b(a)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. "+'LAST_SEPARATE nodes must not have outgoing edges.'))}}}} +function Qed(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(a.e&&a.c.c<a.f){throw Adb(new dgb('Expected '+a.f+' phases to be configured; '+'only found '+a.c.c))}k=RD(mfb(a.g),9);n=ev(a.f);for(f=k,h=0,j=f.length;h<j;++h){d=f[h];l=RD(Med(a,d.g),188);l?Rmb(n,RD(Ted(a,l),106)):(n.c.push(null),undefined,true)}o=new ufd;FDb(CDb(GDb(CDb(new SDb(null,new Swb(n,16)),new Zed),new _ed(b)),new bfd),new dfd(o));ofd(o,a.a);c=new bnb;for(e=k,g=0,i=e.length;g<i;++g){d=e[g];Tmb(c,Ued(a,Ux(RD(Med(o,d.g),20))));m=RD(Vmb(n,d.g),106);!!m&&(ZEb(c.c,m),true)}Tmb(c,Ued(a,Ux(RD(Med(o,k[k.length-1].g+1),20))));return c} +function Frc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;m=new bnb;e=new bnb;p=null;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),17);f=new Trc(g.a);ZEb(e.c,f);if(p){f.d=p;p.e=f}p=f}t=Erc(a);for(k=0;k<e.c.length;++k){n=null;q=Src((tFb(0,e.c.length),RD(e.c[0],661)));c=null;d=oxe;for(l=1;l<a.b.c.length;++l){r=q?$wnd.Math.abs(q.b-l):$wnd.Math.abs(l-n.b)+1;o=n?$wnd.Math.abs(l-n.b):r+1;if(o<r){j=n;i=o}else{j=q;i=r}s=(u=Kfb(UD(mQb(a,(yCc(),sCc)))),t[l]+$wnd.Math.pow(i,u));if(s<d){d=s;c=j;c.c=l}if(!!q&&l==q.b){n=q;q=Nrc(q)}}if(c){Rmb(m,sgb(c.c));c.a=true;Orc(c)}}yob();Ynb(m.c,m.c.length,null);return m} +function iD(a,b,c){var d,e,f,g,h,i;if(b.l==0&&b.m==0&&b.h==0){throw Adb(new teb('divide by zero'))}if(a.l==0&&a.m==0&&a.h==0){c&&(eD=hD(0,0,0));return hD(0,0,0)}if(b.h==fxe&&b.m==0&&b.l==0){return jD(a,c)}i=false;if(b.h>>19!=0){b=xD(b);i=!i}g=pD(b);f=false;e=false;d=false;if(a.h==fxe&&a.m==0&&a.l==0){e=true;f=true;if(g==-1){a=gD((MD(),ID));d=true;i=!i}else{h=BD(a,g);i&&nD(h);c&&(eD=hD(0,0,0));return h}}else if(a.h>>19!=0){f=true;a=xD(a);d=true;i=!i}if(g!=-1){return kD(a,g,i,f,c)}if(uD(a,b)<0){c&&(f?(eD=xD(a)):(eD=hD(a.l,a.m,a.h)));return hD(0,0,0)}return lD(d?a:hD(a.l,a.m,a.h),b,i,f,e,c)} +function Bjb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;g=a.e;i=b.e;if(g==0){return b}if(i==0){return a}f=a.d;h=b.d;if(f+h==2){c=Cdb(a.a[0],yxe);d=Cdb(b.a[0],yxe);if(g==i){k=Bdb(c,d);o=Ydb(k);n=Ydb(Udb(k,32));return n==0?new ajb(g,o):new cjb(g,2,cD(WC(kE,1),Pwe,28,15,[o,n]))}return Pib(),Jdb(g<0?Vdb(d,c):Vdb(c,d),0)?jjb(g<0?Vdb(d,c):Vdb(c,d)):Xib(jjb(Odb(g<0?Vdb(d,c):Vdb(c,d))))}else if(g==i){m=g;l=f>=h?Cjb(a.a,f,b.a,h):Cjb(b.a,h,a.a,f)}else{e=f!=h?f>h?1:-1:Ejb(a.a,b.a,f);if(e==0){return Pib(),Oib}if(e==1){m=g;l=Hjb(a.a,f,b.a,h)}else{m=i;l=Hjb(b.a,h,a.a,f)}}j=new cjb(m,l.length,l);Rib(j);return j} +function KUc(a,b){var c,d,e,f,g,h,i;if(a.g>b.f||b.g>a.f){return}c=0;d=0;for(g=a.w.a.ec().Kc();g.Ob();){e=RD(g.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&++c}for(h=a.r.a.ec().Kc();h.Ob();){e=RD(h.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,b.g,b.f)&&--c}for(i=b.w.a.ec().Kc();i.Ob();){e=RD(i.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&++d}for(f=b.r.a.ec().Kc();f.Ob();){e=RD(f.Pb(),12);AVc(xjd(cD(WC(l3,1),Nve,8,0,[e.i.n,e.n,e.a])).b,a.g,a.f)&&--d}if(c<d){new _Uc(a,b,d-c)}else if(d<c){new _Uc(b,a,c-d)}else{new _Uc(b,a,0);new _Uc(a,b,0)}} +function ASb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=b.c;e=zRb(a.e);l=ijd(njd(ajd(yRb(a.e)),a.d*a.a,a.c*a.b),-0.5);c=e.a-l.a;d=e.b-l.b;g=b.a;c=g.c-c;d=g.d-d;for(i=new Anb(j);i.a<i.c.c.length;){h=RD(ynb(i),407);m=h.b;n=c+m.a;q=d+m.b;o=eE(n/a.a);r=eE(q/a.b);f=h.a;switch(f.g){case 0:k=(IPb(),FPb);break;case 1:k=(IPb(),EPb);break;case 2:k=(IPb(),GPb);break;default:k=(IPb(),HPb);}if(f.a){s=eE((q+h.c)/a.b);Rmb(a.f,new lRb(k,sgb(r),sgb(s)));f==(IRb(),HRb)?eQb(a,0,r,o,s):eQb(a,o,r,a.d-1,s)}else{p=eE((n+h.c)/a.a);Rmb(a.f,new lRb(k,sgb(o),sgb(p)));f==(IRb(),FRb)?eQb(a,o,0,p,r):eQb(a,o,r,p,a.c-1)}}} +function Q$d(a){var b,c,d,e,f,g,h,i,j,k;b=new Z$d;c=new Z$d;j=lhb(pKe,(e=bAd(a.b,qKe),!e?null:WD($Nd((!e.b&&(e.b=new SVd((JTd(),FTd),C8,e)),e.b),rKe))));for(i=0;i<a.i;++i){h=RD(a.g[i],179);if(ZD(h,102)){g=RD(h,19);(g.Bb&QHe)!=0?((g.Bb&Ove)==0||!j&&(f=bAd(g,qKe),(!f?null:WD($Nd((!f.b&&(f.b=new SVd((JTd(),FTd),C8,f)),f.b),FIe)))==null))&&WGd(b,g):(k=Z5d(g),!!k&&(k.Bb&QHe)!=0||((g.Bb&Ove)==0||!j&&(d=bAd(g,qKe),(!d?null:WD($Nd((!d.b&&(d.b=new SVd((JTd(),FTd),C8,d)),d.b),FIe)))==null))&&WGd(c,g))}else{nke();if(RD(h,69).xk()){if(!h.sk()){WGd(b,h);WGd(c,h)}}}}VHd(b);VHd(c);a.a=RD(b.g,254);RD(c.g,254)} +function Eee(a,b,c){var d,e,f,g,h,i,j,k,l;if(BYd(b,c)>=0){return c}switch(yfe(Qee(a,c))){case 2:{if(lhb('',Oee(a,c.qk()).xe())){i=Bfe(Qee(a,c));h=Afe(Qee(a,c));k=Ree(a,b,i,h);if(k){return k}e=Fee(a,b);for(g=0,l=e.gc();g<l;++g){k=RD(e.Xb(g),179);if(Xee(Cfe(Qee(a,k)),i)){return k}}}return null}case 4:{if(lhb('',Oee(a,c.qk()).xe())){for(d=c;d;d=xfe(Qee(a,d))){j=Bfe(Qee(a,d));h=Afe(Qee(a,d));k=See(a,b,j,h);if(k){return k}}i=Bfe(Qee(a,c));if(lhb(dLe,i)){return Tee(a,b)}else{f=Gee(a,b);for(g=0,l=f.gc();g<l;++g){k=RD(f.Xb(g),179);if(Xee(Cfe(Qee(a,k)),i)){return k}}}}return null}default:{return null}}} +function Tfe(a,b,c){var d,e,f,g,h,i,j,k;if(c.gc()==0){return false}h=(nke(),RD(b,69).xk());f=h?c:new ZHd(c.gc());if(qke(a.e,b)){if(b.Si()){for(j=c.Kc();j.Ob();){i=j.Pb();if(!dge(a,b,i,ZD(b,102)&&(RD(b,19).Bb&txe)!=0)){e=oke(b,i);f.Hc(e)||f.Fc(e)}}}else if(!h){for(j=c.Kc();j.Ob();){i=j.Pb();e=oke(b,i);f.Fc(e)}}}else{if(c.gc()>1){throw Adb(new agb(gLe))}k=pke(a.e.Dh(),b);d=RD(a.g,124);for(g=0;g<a.i;++g){e=d[g];if(k.am(e.Lk())){if(c.Hc(h?e:e.md())){return false}else{for(j=c.Kc();j.Ob();){i=j.Pb();RD(eHd(a,g,h?RD(i,76):oke(b,i)),76)}return true}}}if(!h){e=oke(b,c.Kc().Pb());f.Fc(e)}}return YGd(a,f)} +function QQc(a,b){var c,d,e,f,g,h,i,j,k;k=new Yub;for(h=(j=(new glb(a.c)).a.vc().Kc(),new llb(j));h.a.Ob();){f=(e=RD(h.a.Pb(),44),RD(e.md(),466));f.b==0&&(Pub(k,f,k.c.b,k.c),true)}while(k.b!=0){f=RD(k.b==0?null:(sFb(k.b!=0),Wub(k,k.a.a)),466);f.a==null&&(f.a=0);for(d=new Anb(f.d);d.a<d.c.c.length;){c=RD(ynb(d),663);c.b.a==null?(c.b.a=Kfb(f.a)+c.a):b.o==(EQc(),CQc)?(c.b.a=$wnd.Math.min(Kfb(c.b.a),Kfb(f.a)+c.a)):(c.b.a=$wnd.Math.max(Kfb(c.b.a),Kfb(f.a)+c.a));--c.b.b;c.b.b==0&&Mub(k,c.b)}}for(g=(i=(new glb(a.c)).a.vc().Kc(),new llb(i));g.a.Ob();){f=(e=RD(g.a.Pb(),44),RD(e.md(),466));b.i[f.c.p]=f.a}} +function kSc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;k=c+b.c.c.a;for(n=new Anb(b.j);n.a<n.c.c.length;){m=RD(ynb(n),12);e=xjd(cD(WC(l3,1),Nve,8,0,[m.i.n,m.n,m.a]));if(b.k==(r3b(),q3b)){h=RD(mQb(m,(Ywc(),Awc)),12);e.a=xjd(cD(WC(l3,1),Nve,8,0,[h.i.n,h.n,h.a])).a;b.n.a=e.a}g=new rjd(0,e.b);if(m.j==(qpd(),Xod)){g.a=k}else if(m.j==ppd){g.a=c}else{continue}o=$wnd.Math.abs(e.a-g.a);if(o<=d&&!hSc(b)){continue}f=m.g.c.length+m.e.c.length>1;for(j=new l4b(m.b);xnb(j.a)||xnb(j.b);){i=RD(xnb(j.a)?ynb(j.a):ynb(j.b),18);l=i.c==m?i.d:i.c;$wnd.Math.abs(xjd(cD(WC(l3,1),Nve,8,0,[l.i.n,l.n,l.a])).b-g.b)>1&&eSc(a,i,g,f,m)}}} +function vUc(a){var b,c,d,e,f,g;e=new Jkb(a.e,0);d=new Jkb(a.a,0);if(a.d){for(c=0;c<a.b;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}}else{for(c=0;c<a.b-1;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);Ckb(e)}}b=Kfb((sFb(e.b<e.d.gc()),UD(e.d.Xb(e.c=e.b++))));while(a.f-b>AEe){f=b;g=0;while($wnd.Math.abs(b-f)<AEe){++g;b=Kfb((sFb(e.b<e.d.gc()),UD(e.d.Xb(e.c=e.b++))));sFb(d.b<d.d.gc());d.d.Xb(d.c=d.b++)}if(g<a.b){sFb(e.b>0);e.a.Xb(e.c=--e.b);uUc(a,a.b-g,f,d,e);sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++)}sFb(d.b>0);d.a.Xb(d.c=--d.b)}if(!a.d){for(c=0;c<a.b-1;c++){sFb(e.b<e.d.gc());e.d.Xb(e.c=e.b++);Ckb(e)}}a.d=true;a.c=true} +function nme(){nme=geb;Rle=(Qle(),Ple).b;Ule=RD(QHd(xYd(Ple.b),0),35);Sle=RD(QHd(xYd(Ple.b),1),35);Tle=RD(QHd(xYd(Ple.b),2),35);cme=Ple.bb;RD(QHd(xYd(Ple.bb),0),35);RD(QHd(xYd(Ple.bb),1),35);eme=Ple.fb;fme=RD(QHd(xYd(Ple.fb),0),35);RD(QHd(xYd(Ple.fb),1),35);RD(QHd(xYd(Ple.fb),2),19);hme=Ple.qb;kme=RD(QHd(xYd(Ple.qb),0),35);RD(QHd(xYd(Ple.qb),1),19);RD(QHd(xYd(Ple.qb),2),19);ime=RD(QHd(xYd(Ple.qb),3),35);jme=RD(QHd(xYd(Ple.qb),4),35);mme=RD(QHd(xYd(Ple.qb),6),35);lme=RD(QHd(xYd(Ple.qb),5),19);Vle=Ple.j;Wle=Ple.k;Xle=Ple.q;Yle=Ple.w;Zle=Ple.B;$le=Ple.A;_le=Ple.C;ame=Ple.D;bme=Ple._;dme=Ple.cb;gme=Ple.hb} +function yIc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.c=0;a.b=0;d=2*b.c.a.c.length+1;o:for(l=c.Kc();l.Ob();){k=RD(l.Pb(),12);h=k.j==(qpd(),Yod)||k.j==npd;n=0;if(h){m=RD(mQb(k,(Ywc(),Iwc)),10);if(!m){continue}n+=tIc(a,d,k,m)}else{for(j=new Anb(k.g);j.a<j.c.c.length;){i=RD(ynb(j),18);e=i.d;if(e.i.c==b.c){Rmb(a.a,k);continue o}else{n+=a.g[e.p]}}for(g=new Anb(k.e);g.a<g.c.c.length;){f=RD(ynb(g),18);e=f.c;if(e.i.c==b.c){Rmb(a.a,k);continue o}else{n-=a.g[e.p]}}}if(k.e.c.length+k.g.c.length>0){a.f[k.p]=n/(k.e.c.length+k.g.c.length);a.c=$wnd.Math.min(a.c,a.f[k.p]);a.b=$wnd.Math.max(a.b,a.f[k.p])}else h&&(a.f[k.p]=n)}} +function xne(a){a.b=null;a.bb=null;a.fb=null;a.qb=null;a.a=null;a.c=null;a.d=null;a.e=null;a.f=null;a.n=null;a.M=null;a.L=null;a.Q=null;a.R=null;a.K=null;a.db=null;a.eb=null;a.g=null;a.i=null;a.j=null;a.k=null;a.gb=null;a.o=null;a.p=null;a.q=null;a.r=null;a.$=null;a.ib=null;a.S=null;a.T=null;a.t=null;a.s=null;a.u=null;a.v=null;a.w=null;a.B=null;a.A=null;a.C=null;a.D=null;a.F=null;a.G=null;a.H=null;a.I=null;a.J=null;a.P=null;a.Z=null;a.U=null;a.V=null;a.W=null;a.X=null;a.Y=null;a._=null;a.ab=null;a.cb=null;a.hb=null;a.nb=null;a.lb=null;a.mb=null;a.ob=null;a.pb=null;a.jb=null;a.kb=null;a.N=false;a.O=false} +function C8b(a,b,c){var d,e,f,g;c.Ug('Graph transformation ('+a.a+')',1);g=bv(b.a);for(f=new Anb(b.b);f.a<f.c.c.length;){e=RD(ynb(f),30);Tmb(g,e.a)}d=RD(mQb(b,(yCc(),sAc)),428);if(d==($tc(),Ytc)){switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);break;case 3:G8b(b,g);break;case 4:if(a.a==(P8b(),O8b)){G8b(b,g);r8b(b,g)}else{r8b(b,g);G8b(b,g)}}}else{if(a.a==(P8b(),O8b)){switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);r8b(b,g);break;case 3:G8b(b,g);q8b(b,g);break;case 4:q8b(b,g);G8b(b,g);}}else{switch(RD(mQb(b,rAc),88).g){case 2:q8b(b,g);r8b(b,g);break;case 3:q8b(b,g);G8b(b,g);break;case 4:G8b(b,g);q8b(b,g);}}}c.Vg()} +function AXb(a){var b,c,d,e,f,g,h,i;for(f=new Anb(a.a.b);f.a<f.c.c.length;){e=RD(ynb(f),86);e.b.c=e.g.c;e.b.d=e.g.d}i=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(d=new Anb(a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),86);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}for(h=Uc(a.c).a.nc();h.Ob();){g=RD(h.Pb(),42);c=RD(g.b,86);i.a=$wnd.Math.min(i.a,c.g.c);i.b=$wnd.Math.min(i.b,c.g.d);b.a=$wnd.Math.max(b.a,c.g.c+c.g.b);b.b=$wnd.Math.max(b.b,c.g.d+c.g.a)}a.d=fjd(new rjd(i.a,i.b));a.e=ojd(new rjd(b.a,b.b),i);a.a.a.c.length=0;a.a.b.c.length=0} +function LZb(a){CZb();var b,c,d,e,f,g,h;h=new EZb;for(c=new Anb(a);c.a<c.c.c.length;){b=RD(ynb(c),148);(!h.b||b.c>=h.b.c)&&(h.b=b);if(!h.c||b.c<=h.c.c){h.d=h.c;h.c=b}(!h.e||b.d>=h.e.d)&&(h.e=b);(!h.f||b.d<=h.f.d)&&(h.f=b)}d=new PZb((nZb(),jZb));t$b(a,AZb,new mob(cD(WC(wQ,1),rve,382,0,[d])));g=new PZb(mZb);t$b(a,zZb,new mob(cD(WC(wQ,1),rve,382,0,[g])));e=new PZb(kZb);t$b(a,yZb,new mob(cD(WC(wQ,1),rve,382,0,[e])));f=new PZb(lZb);t$b(a,xZb,new mob(cD(WC(wQ,1),rve,382,0,[f])));FZb(d.c,jZb);FZb(e.c,kZb);FZb(f.c,lZb);FZb(g.c,mZb);h.a.c.length=0;Tmb(h.a,d.c);Tmb(h.a,hv(e.c));Tmb(h.a,f.c);Tmb(h.a,hv(g.c));return h} +function n9c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;b.Ug(bGe,1);n=Kfb(UD(Gxd(a,(X6c(),W6c))));g=Kfb(UD(Gxd(a,(X7c(),Q7c))));h=RD(Gxd(a,N7c),107);Bad((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));k=U8c((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a),n,g);!a.a&&(a.a=new C5d(J4,a,10,11));for(j=new Anb(k);j.a<j.c.c.length;){i=RD(ynb(j),186);for(e=new Anb(i.a);e.a<e.c.c.length;){d=RD(ynb(e),172);m=new had(d.s,d.t,Kfb(UD(Gxd(a,Q7c))));aad(m,d);Rmb(i.d,m)}}l=zad(k,g);o=$wnd.Math.max(l.a,Kfb(UD(Gxd(a,U6c)))-(h.b+h.c));f=$wnd.Math.max(l.b,Kfb(UD(Gxd(a,R6c)))-(h.d+h.a));c=f-l.b;Ixd(a,M6c,c);Ixd(a,O6c,o);Ixd(a,N6c,f+c);Ixd(a,V6c,k);b.Vg()} +function A9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;j=new Iub;k=new Iub;o=new Iub;p=new Iub;i=Kfb(UD(mQb(b,(yCc(),bCc))));f=Kfb(UD(mQb(b,TBc)));for(h=new Anb(c);h.a<h.c.c.length;){g=RD(ynb(h),10);l=RD(mQb(g,(Ywc(),hwc)),64);if(l==(qpd(),Yod)){k.a.zc(g,k);for(e=new is(Mr(Z2b(g).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);Ysb(j,d.c.i)}}else if(l==npd){p.a.zc(g,p);for(e=new is(Mr(Z2b(g).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);Ysb(o,d.c.i)}}}if(j.a.gc()!=0){m=new TTc(2,f);n=STc(m,b,j,k,-i-b.c.b);if(n>0){a.a=i+(n-1)*f;b.c.b+=a.a;b.f.b+=a.a}}if(o.a.gc()!=0){m=new TTc(1,f);n=STc(m,b,o,p,b.f.b+i-b.c.b);n>0&&(b.f.b+=i+(n-1)*f)}} +function osc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;k=Kfb(UD(mQb(a,(yCc(),WBc))));d=Kfb(UD(mQb(a,nCc)));m=new dtd;pQb(m,WBc,k+d);j=b;r=j.d;p=j.c.i;s=j.d.i;q=Q4b(p.c);t=Q4b(s.c);e=new bnb;for(l=q;l<=t;l++){h=new j3b(a);h3b(h,(r3b(),o3b));pQb(h,(Ywc(),Awc),j);pQb(h,BBc,(Bod(),wod));pQb(h,YBc,m);n=RD(Vmb(a.b,l),30);l==q?f3b(h,n.a.c.length-c,n):g3b(h,n);u=Kfb(UD(mQb(j,FAc)));if(u<0){u=0;pQb(j,FAc,u)}h.o.b=u;o=$wnd.Math.floor(u/2);g=new R3b;Q3b(g,(qpd(),ppd));P3b(g,h);g.n.b=o;i=new R3b;Q3b(i,Xod);P3b(i,h);i.n.b=o;Z0b(j,g);f=new a1b;kQb(f,j);pQb(f,RAc,null);Y0b(f,i);Z0b(f,r);psc(h,j,f);ZEb(e.c,f);j=f}return e} +function Hec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=RD(e3b(a,(qpd(),ppd)).Kc().Pb(),12).e;n=RD(e3b(a,Xod).Kc().Pb(),12).g;h=i.c.length;t=K3b(RD(Vmb(a.j,0),12));while(h-->0){p=(tFb(0,i.c.length),RD(i.c[0],18));e=(tFb(0,n.c.length),RD(n.c[0],18));s=e.d.e;f=Wmb(s,e,0);$0b(p,e.d,f);Y0b(e,null);Z0b(e,null);o=p.a;b&&Mub(o,new sjd(t));for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);Mub(o,new sjd(c))}r=p.b;for(m=new Anb(e.b);m.a<m.c.c.length;){l=RD(ynb(m),72);ZEb(r.c,l)}q=RD(mQb(p,(yCc(),RAc)),75);g=RD(mQb(e,RAc),75);if(g){if(!q){q=new Ejd;pQb(p,RAc,q)}for(k=Sub(g,0);k.b!=k.d.c;){j=RD(evb(k),8);Mub(q,new sjd(j))}}}} +function $Qc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;p=b.b.c.length;if(p<3){return}n=$C(kE,Pwe,28,p,15,1);l=0;for(k=new Anb(b.b);k.a<k.c.c.length;){j=RD(ynb(k),30);n[l++]=j.a.c.length}m=new Jkb(b.b,2);for(d=1;d<p-1;d++){c=(sFb(m.b<m.d.gc()),RD(m.d.Xb(m.c=m.b++),30));o=new Anb(c.a);f=0;h=0;for(i=0;i<n[d+1];i++){t=RD(ynb(o),10);if(i==n[d+1]-1||ZQc(a,t,d+1,d)){g=n[d]-1;ZQc(a,t,d+1,d)&&(g=a.c.e[RD(RD(RD(Vmb(a.c.b,t.p),15).Xb(0),42).a,10).p]);while(h<=i){s=RD(Vmb(c.a,h),10);if(!ZQc(a,s,d+1,d)){for(r=RD(Vmb(a.c.b,s.p),15).Kc();r.Ob();){q=RD(r.Pb(),42);e=a.c.e[RD(q.a,10).p];(e<f||e>g)&&Ysb(a.b,RD(q.b,18))}}++h}f=g}}}} +function zhd(b,c){var d;if(c==null||lhb(c,vve)){return null}if(c.length==0&&b.k!=(kid(),fid)){return null}switch(b.k.g){case 1:return mhb(c,FGe)?(Geb(),Feb):mhb(c,GGe)?(Geb(),Eeb):null;case 2:try{return sgb(Oeb(c,qwe,lve))}catch(a){a=zdb(a);if(ZD(a,130)){return null}else throw Adb(a)}case 4:try{return Neb(c)}catch(a){a=zdb(a);if(ZD(a,130)){return null}else throw Adb(a)}case 3:return c;case 5:uhd(b);return xhd(b,c);case 6:uhd(b);return yhd(b,b.a,c);case 7:try{d=whd(b);d.cg(c);return d}catch(a){a=zdb(a);if(ZD(a,33)){return null}else throw Adb(a)}default:throw Adb(new dgb('Invalid type set for this layout option.'));}} +function JKd(a){var b;switch(a.d){case 1:{if(a.Sj()){return a.o!=-2}break}case 2:{if(a.Sj()){return a.o==-2}break}case 3:case 5:case 4:case 6:case 7:{return a.o>-2}default:{return false}}b=a.Rj();switch(a.p){case 0:return b!=null&&Heb(TD(b))!=Pdb(a.k,0);case 1:return b!=null&&RD(b,222).a!=Ydb(a.k)<<24>>24;case 2:return b!=null&&RD(b,180).a!=(Ydb(a.k)&Bwe);case 6:return b!=null&&Pdb(RD(b,168).a,a.k);case 5:return b!=null&&RD(b,17).a!=Ydb(a.k);case 7:return b!=null&&RD(b,191).a!=Ydb(a.k)<<16>>16;case 3:return b!=null&&Kfb(UD(b))!=a.j;case 4:return b!=null&&RD(b,161).a!=a.j;default:return b==null?a.n!=null:!pb(b,a.n);}} +function N_d(a,b,c){var d,e,f,g;if(a.ol()&&a.nl()){g=O_d(a,RD(c,58));if(dE(g)!==dE(c)){a.xj(b);a.Dj(b,P_d(a,b,g));if(a.al()){f=(e=RD(c,54),a.ml()?a.kl()?e.Th(a.b,Z5d(RD(vYd(Uwd(a.b),a.Lj()),19)).n,RD(vYd(Uwd(a.b),a.Lj()).Hk(),29).kk(),null):e.Th(a.b,BYd(e.Dh(),Z5d(RD(vYd(Uwd(a.b),a.Lj()),19))),null,null):e.Th(a.b,-1-a.Lj(),null,null));!RD(g,54).Ph()&&(f=(d=RD(g,54),a.ml()?a.kl()?d.Rh(a.b,Z5d(RD(vYd(Uwd(a.b),a.Lj()),19)).n,RD(vYd(Uwd(a.b),a.Lj()).Hk(),29).kk(),f):d.Rh(a.b,BYd(d.Dh(),Z5d(RD(vYd(Uwd(a.b),a.Lj()),19))),null,f):d.Rh(a.b,-1-a.Lj(),null,f)));!!f&&f.oj()}Mvd(a.b)&&a.Jj(a.Ij(9,c,g,b,false));return g}}return c} +function iJb(a){var b,c,d,e,f,g,h,i,j,k;d=new bnb;for(g=new Anb(a.e.a);g.a<g.c.c.length;){e=RD(ynb(g),125);k=0;e.k.c.length=0;for(c=new Anb(CIb(e));c.a<c.c.c.length;){b=RD(ynb(c),218);if(b.f){Rmb(e.k,b);++k}}k==1&&(ZEb(d.c,e),true)}for(f=new Anb(d);f.a<f.c.c.length;){e=RD(ynb(f),125);while(e.k.c.length==1){j=RD(ynb(new Anb(e.k)),218);a.b[j.c]=j.g;h=j.d;i=j.e;for(c=new Anb(CIb(e));c.a<c.c.c.length;){b=RD(ynb(c),218);pb(b,j)||(b.f?h==b.d||i==b.e?(a.b[j.c]-=a.b[b.c]-b.g):(a.b[j.c]+=a.b[b.c]-b.g):e==h?b.d==e?(a.b[j.c]+=b.g):(a.b[j.c]-=b.g):b.d==e?(a.b[j.c]-=b.g):(a.b[j.c]+=b.g))}Ymb(h.k,j);Ymb(i.k,j);h==e?(e=j.e):(e=j.d)}}} +function vMb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=RD(Vrb(a.b,b),127);i=RD(RD(Qc(a.r,b),21),87);if(i.dc()){c.n.b=0;c.n.c=0;return}j=a.u.Hc((Pod(),Lod));g=0;h=i.Kc();k=null;l=0;m=0;while(h.Ob()){d=RD(h.Pb(),117);e=Kfb(UD(d.b.of((tNb(),sNb))));f=d.b.Mf().a;a.A.Hc((Qpd(),Ppd))&&BMb(a,b);if(!k){!!a.C&&a.C.b>0&&(g=$wnd.Math.max(g,zMb(a.C.b+d.d.b,e)))}else{n=m+k.d.c+a.w+d.d.b;g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(l-e)<=Tye||l==e||isNaN(l)&&isNaN(e)?0:n/(e-l)))}k=d;l=e;m=f}if(!!a.C&&a.C.c>0){n=m+a.C.c;j&&(n+=k.d.c);g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(l-1)<=Tye||l==1||isNaN(l)&&isNaN(1)?0:n/(1-l)))}c.n.b=0;c.a.a=g} +function ENb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;c=RD(Vrb(a.b,b),127);i=RD(RD(Qc(a.r,b),21),87);if(i.dc()){c.n.d=0;c.n.a=0;return}j=a.u.Hc((Pod(),Lod));g=0;a.A.Hc((Qpd(),Ppd))&&JNb(a,b);h=i.Kc();k=null;m=0;l=0;while(h.Ob()){d=RD(h.Pb(),117);f=Kfb(UD(d.b.of((tNb(),sNb))));e=d.b.Mf().b;if(!k){!!a.C&&a.C.d>0&&(g=$wnd.Math.max(g,zMb(a.C.d+d.d.d,f)))}else{n=l+k.d.a+a.w+d.d.d;g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(m-f)<=Tye||m==f||isNaN(m)&&isNaN(f)?0:n/(f-m)))}k=d;m=f;l=e}if(!!a.C&&a.C.a>0){n=l+a.C.a;j&&(n+=k.d.a);g=$wnd.Math.max(g,(Zy(),bz(Tye),$wnd.Math.abs(m-1)<=Tye||m==1||isNaN(m)&&isNaN(1)?0:n/(1-m)))}c.n.d=0;c.a.b=g} +function L8c(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q,r;o=false;j=dad(c.q,b.f+b.b-c.q.f);n=d.f>b.b&&h;r=e-(c.q.e+j-g);l=(i=S9c(d,r,false),i.a);if(n&&l>d.f){return false}if(n){m=0;for(q=new Anb(b.d);q.a<q.c.c.length;){p=RD(ynb(q),315);m+=dad(p,d.f)+g}r=e-m}if(r<d.g){return false}k=f==a.c.length-1&&r>=(tFb(f,a.c.length),RD(a.c[f],186)).e;if(!n&&l>b.b&&!k){return false}if(k||n||l<=b.b){if(k&&l>b.b){c.d=l;Q9c(c,P9c(c,l))}else{ead(c.q,j);c.c=true}Q9c(d,e-(c.s+c.r));U9c(d,c.q.e+c.q.d,b.f);Cad(b,d);if(a.c.length>f){Fad((tFb(f,a.c.length),RD(a.c[f],186)),d);(tFb(f,a.c.length),RD(a.c[f],186)).a.c.length==0&&Xmb(a,f)}o=true}return o} +function zJc(a,b,c){var d,e,f,g,h,i;this.g=a;h=b.d.length;i=c.d.length;this.d=$C(jR,WAe,10,h+i,0,1);for(g=0;g<h;g++){this.d[g]=b.d[g]}for(f=0;f<i;f++){this.d[h+f]=c.d[f]}if(b.e){this.e=gv(b.e);this.e.Mc(c);if(c.e){for(e=c.e.Kc();e.Ob();){d=RD(e.Pb(),239);if(d==b){continue}else this.e.Hc(d)?--d.c:this.e.Fc(d)}}}else if(c.e){this.e=gv(c.e);this.e.Mc(b)}this.f=b.f+c.f;this.a=b.a+c.a;this.a>0?xJc(this,this.f/this.a):pJc(b.g,b.d[0]).a!=null&&pJc(c.g,c.d[0]).a!=null?xJc(this,(Kfb(pJc(b.g,b.d[0]).a)+Kfb(pJc(c.g,c.d[0]).a))/2):pJc(b.g,b.d[0]).a!=null?xJc(this,pJc(b.g,b.d[0]).a):pJc(c.g,c.d[0]).a!=null&&xJc(this,pJc(c.g,c.d[0]).a)} +function DXb(a,b){var c,d,e,f,g,h,i,j,k,l;a.a=new fYb(wsb(s3));for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),855);h=new iYb(cD(WC(bQ,1),rve,86,0,[]));Rmb(a.a.a,h);for(j=new Anb(c.d);j.a<j.c.c.length;){i=RD(ynb(j),116);k=new IXb(a,i);CXb(k,RD(mQb(c.c,(Ywc(),ewc)),21));if(!Ujb(a.g,c)){Zjb(a.g,c,new rjd(i.c,i.d));Zjb(a.f,c,k)}Rmb(a.a.b,k);gYb(h,k)}for(g=new Anb(c.b);g.a<g.c.c.length;){f=RD(ynb(g),602);k=new IXb(a,f.Df());Zjb(a.b,f,new Ptd(h,k));CXb(k,RD(mQb(c.c,(Ywc(),ewc)),21));if(f.Bf()){l=new JXb(a,f.Bf(),1);CXb(l,RD(mQb(c.c,ewc),21));e=new iYb(cD(WC(bQ,1),rve,86,0,[]));gYb(e,l);Rc(a.c,f.Af(),new Ptd(h,l))}}}return a.a} +function gFc(a){var b;this.a=a;b=(r3b(),cD(WC(hR,1),jwe,273,0,[p3b,o3b,m3b,q3b,n3b,l3b])).length;this.b=YC(V5,[Nve,kEe],[601,149],0,[b,b],2);this.c=YC(V5,[Nve,kEe],[601,149],0,[b,b],2);fFc(this,p3b,(yCc(),bCc),cCc);dFc(this,p3b,o3b,WBc,XBc);cFc(this,p3b,q3b,WBc);cFc(this,p3b,m3b,WBc);dFc(this,p3b,n3b,bCc,cCc);fFc(this,o3b,TBc,UBc);cFc(this,o3b,q3b,TBc);cFc(this,o3b,m3b,TBc);dFc(this,o3b,n3b,WBc,XBc);eFc(this,q3b,TBc);cFc(this,q3b,m3b,TBc);cFc(this,q3b,n3b,$Bc);eFc(this,m3b,fCc);dFc(this,m3b,n3b,aCc,_Bc);fFc(this,n3b,TBc,TBc);fFc(this,l3b,TBc,UBc);dFc(this,l3b,p3b,WBc,XBc);dFc(this,l3b,n3b,WBc,XBc);dFc(this,l3b,o3b,WBc,XBc)} +function zge(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;g=c.Lk();if(ZD(g,102)&&(RD(g,19).Bb&txe)!=0){m=RD(c.md(),54);p=Vvd(a.e,m);if(p!=m){k=oke(g,p);MHd(a,b,Tge(a,b,k));l=null;if(Mvd(a.e)){d=Eee((lke(),jke),a.e.Dh(),g);if(d!=vYd(a.e.Dh(),a.c)){q=pke(a.e.Dh(),g);h=0;f=RD(a.g,124);for(i=0;i<b;++i){e=f[i];q.am(e.Lk())&&++h}l=new lle(a.e,9,d,m,p,h,false);l.nj(new P3d(a.e,9,a.c,c,k,b,false))}}o=RD(g,19);n=Z5d(o);if(n){l=m.Th(a.e,BYd(m.Dh(),n),null,l);l=RD(p,54).Rh(a.e,BYd(p.Dh(),n),null,l)}else if((o.Bb&QHe)!=0){j=-1-BYd(a.e.Dh(),o);l=m.Th(a.e,j,null,null);!RD(p,54).Ph()&&(l=RD(p,54).Rh(a.e,j,null,l))}!!l&&l.oj();return k}}return c} +function SId(a){var b,c,d;wgd(LId,cD(WC(B2,1),rve,134,0,[new vmd]));c=new NB(a);for(d=0;d<c.a.length;++d){b=JB(c,d).te().a;lhb(b,'layered')?wgd(LId,cD(WC(B2,1),rve,134,0,[new Pzc])):lhb(b,'force')?wgd(LId,cD(WC(B2,1),rve,134,0,[new PUb])):lhb(b,'stress')?wgd(LId,cD(WC(B2,1),rve,134,0,[new RVb])):lhb(b,'mrtree')?wgd(LId,cD(WC(B2,1),rve,134,0,[new C$c])):lhb(b,'radial')?wgd(LId,cD(WC(B2,1),rve,134,0,[new E4c])):lhb(b,'disco')?wgd(LId,cD(WC(B2,1),rve,134,0,[new ZHb,new fSb])):lhb(b,'sporeOverlap')||lhb(b,'sporeCompaction')?wgd(LId,cD(WC(B2,1),rve,134,0,[new Lcd])):lhb(b,'rectpacking')&&wgd(LId,cD(WC(B2,1),rve,134,0,[new v7c]))}} +function r2b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;m=new sjd(a.o);r=b.a/m.a;h=b.b/m.b;p=b.a-m.a;f=b.b-m.b;if(c){e=dE(mQb(a,(yCc(),BBc)))===dE((Bod(),wod));for(o=new Anb(a.j);o.a<o.c.c.length;){n=RD(ynb(o),12);switch(n.j.g){case 1:e||(n.n.a*=r);break;case 2:n.n.a+=p;e||(n.n.b*=h);break;case 3:e||(n.n.a*=r);n.n.b+=f;break;case 4:e||(n.n.b*=h);}}}for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),72);k=i.n.a+i.o.a/2;l=i.n.b+i.o.b/2;q=k/m.a;g=l/m.b;if(q+g>=1){if(q-g>0&&l>=0){i.n.a+=p;i.n.b+=f*g}else if(q-g<0&&k>=0){i.n.a+=p*q;i.n.b+=f}}}a.o.a=b.a;a.o.b=b.b;pQb(a,(yCc(),lBc),(Qpd(),d=RD(mfb(H3),9),new Fsb(d,RD(WEb(d,d.length),9),0)))} +function ISd(a,b,c,d,e,f){var g;if(!(b==null||!mSd(b,ZRd,$Rd))){throw Adb(new agb('invalid scheme: '+b))}if(!a&&!(c!=null&&qhb(c,Fhb(35))==-1&&c.length>0&&(BFb(0,c.length),c.charCodeAt(0)!=47))){throw Adb(new agb('invalid opaquePart: '+c))}if(a&&!(b!=null&&tpb(eSd,b.toLowerCase()))&&!(c==null||!mSd(c,aSd,bSd))){throw Adb(new agb(NJe+c))}if(a&&b!=null&&tpb(eSd,b.toLowerCase())&&!ESd(c)){throw Adb(new agb(NJe+c))}if(!FSd(d)){throw Adb(new agb('invalid device: '+d))}if(!HSd(e)){g=e==null?'invalid segments: null':'invalid segment: '+tSd(e);throw Adb(new agb(g))}if(!(f==null||qhb(f,Fhb(35))==-1)){throw Adb(new agb('invalid query: '+f))}} +function WHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c.Ug('Network simplex layering',1);a.b=b;r=RD(mQb(b,(yCc(),gCc)),17).a*4;q=a.b.a;if(q.c.length<1){c.Vg();return}f=SHc(a,q);p=null;for(e=Sub(f,0);e.b!=e.d.c;){d=RD(evb(e),15);h=r*eE($wnd.Math.sqrt(d.gc()));g=VHc(d);lJb(yJb(AJb(zJb(CJb(g),h),p),true),c.eh(1));m=a.b.b;for(o=new Anb(g.a);o.a<o.c.c.length;){n=RD(ynb(o),125);while(m.c.length<=n.e){Qmb(m,m.c.length,new R4b(a.b))}k=RD(n.f,10);g3b(k,RD(Vmb(m,n.e),30))}if(f.b>1){p=$C(kE,Pwe,28,a.b.b.c.length,15,1);l=0;for(j=new Anb(a.b.b);j.a<j.c.c.length;){i=RD(ynb(j),30);p[l++]=i.a.c.length}}}q.c.length=0;a.a=null;a.b=null;a.c=null;c.Vg()} +function tMc(a,b){var c,d,e,f,g,h,i,j,k,l;k=new bnb;l=new wmb;f=null;e=0;for(d=0;d<b.length;++d){c=b[d];vMc(f,c)&&(e=oMc(a,l,k,cMc,e));nQb(c,(Ywc(),pwc))&&(f=RD(mQb(c,pwc),10));switch(c.k.g){case 0:for(i=lr(dr(b3b(c,(qpd(),Yod)),new eNc));xc(i);){g=RD(yc(i),12);a.d[g.p]=e++;ZEb(k.c,g)}e=oMc(a,l,k,cMc,e);for(j=lr(dr(b3b(c,npd),new eNc));xc(j);){g=RD(yc(j),12);a.d[g.p]=e++;ZEb(k.c,g)}break;case 3:if(!b3b(c,bMc).dc()){g=RD(b3b(c,bMc).Xb(0),12);a.d[g.p]=e++;ZEb(k.c,g)}b3b(c,cMc).dc()||hmb(l,c);break;case 1:for(h=b3b(c,(qpd(),ppd)).Kc();h.Ob();){g=RD(h.Pb(),12);a.d[g.p]=e++;ZEb(k.c,g)}b3b(c,Xod).Jc(new cNc(l,c));}}oMc(a,l,k,cMc,e);return k} +function vgd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(b==null||b.length==0){return null}f=RD(Xjb(a.f,b),23);if(!f){for(e=(n=(new glb(a.d)).a.vc().Kc(),new llb(n));e.a.Ob();){c=(g=RD(e.a.Pb(),44),RD(g.md(),23));h=c.f;o=b.length;if(lhb(h.substr(h.length-o,o),b)&&(b.length==h.length||ihb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}if(!f){for(d=(m=(new glb(a.d)).a.vc().Kc(),new llb(m));d.a.Ob();){c=(g=RD(d.a.Pb(),44),RD(g.md(),23));l=c.g;if(l!=null){for(i=l,j=0,k=i.length;j<k;++j){h=i[j];o=b.length;if(lhb(h.substr(h.length-o,o),b)&&(b.length==h.length||ihb(h,h.length-b.length-1)==46)){if(f){return null}f=c}}}}}!!f&&$jb(a.f,b,f)}return f} +function IA(a,b){var c,d,e,f,g;c=new cib;g=false;for(f=0;f<b.length;f++){d=(BFb(f,b.length),b.charCodeAt(f));if(d==32){wA(a,c,0);c.a+=' ';wA(a,c,0);while(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==32)){++f}continue}if(g){if(d==39){if(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+=String.fromCharCode(d);++f}else{g=false}}else{c.a+=String.fromCharCode(d)}continue}if(qhb('GyMLdkHmsSEcDahKzZv',Fhb(d))>0){wA(a,c,0);c.a+=String.fromCharCode(d);e=BA(b,f);wA(a,c,e);f+=e-1;continue}if(d==39){if(f+1<b.length&&(BFb(f+1,b.length),b.charCodeAt(f+1)==39)){c.a+="'";++f}else{g=true}}else{c.a+=String.fromCharCode(d)}}wA(a,c,0);CA(a)} +function tSc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;t=Yx(a);i=new bnb;f=a.c.length;j=f-1;k=f+1;while(t.a.gc()!=0){while(c.b!=0){r=(sFb(c.b!=0),RD(Wub(c,c.a.a),118));t.a.Bc(r)!=null;r.g=j--;wSc(r,b,c,d)}while(b.b!=0){s=(sFb(b.b!=0),RD(Wub(b,b.a.a),118));t.a.Bc(s)!=null;s.g=k++;wSc(s,b,c,d)}h=qwe;for(p=t.a.ec().Kc();p.Ob();){o=RD(p.Pb(),118);if(!d&&o.b>0&&o.a<=0){i.c.length=0;ZEb(i.c,o);break}n=o.i-o.d;if(n>=h){if(n>h){i.c.length=0;h=n}ZEb(i.c,o)}}if(i.c.length!=0){g=RD(Vmb(i,Jwb(e,i.c.length)),118);t.a.Bc(g)!=null;g.g=k++;wSc(g,b,c,d);i.c.length=0}}q=a.c.length+1;for(m=new Anb(a);m.a<m.c.c.length;){l=RD(ynb(m),118);l.g<f&&(l.g=l.g+q)}} +function FJc(a,b,c){var d,e,f,g;this.j=a;this.e=c1b(a);this.o=this.j.e;this.i=!!this.o;this.p=this.i?RD(Vmb(c,Y2b(this.o).p),219):null;e=RD(mQb(a,(Ywc(),kwc)),21);this.g=e.Hc((ovc(),hvc));this.b=new bnb;this.d=new RLc(this.e);g=RD(mQb(this.j,Lwc),234);this.q=WJc(b,g,this.e);this.k=new _Kc(this);f=dv(cD(WC(QY,1),rve,230,0,[this,this.d,this.k,this.q]));if(b==(RKc(),OKc)&&!Heb(TD(mQb(a,(yCc(),eAc))))){d=new qJc(this.e);ZEb(f.c,d);this.c=new UIc(d,g,RD(this.q,413))}else if(b==OKc&&Heb(TD(mQb(a,(yCc(),eAc))))){d=new qJc(this.e);ZEb(f.c,d);this.c=new vLc(d,g,RD(this.q,413))}else{this.c=new smc(b,this)}Rmb(f,this.c);yNc(f,this.e);this.s=$Kc(this.k)} +function z0b(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;f=new bnb;for(j=new Anb(d);j.a<j.c.c.length;){h=RD(ynb(j),452);g=null;if(h.f==(BEc(),zEc)){for(o=new Anb(h.e);o.a<o.c.c.length;){n=RD(ynb(o),18);q=n.d.i;if(Y2b(q)==b){q0b(a,b,h,n,h.b,n.d)}else if(!c||n2b(q,c)){r0b(a,b,h,d,n)}else{m=w0b(a,b,c,n,h.b,zEc,g);m!=g&&(ZEb(f.c,m),true);m.c&&(g=m)}}}else{for(l=new Anb(h.e);l.a<l.c.c.length;){k=RD(ynb(l),18);p=k.c.i;if(Y2b(p)==b){q0b(a,b,h,k,k.c,h.b)}else if(!c||n2b(p,c)){continue}else{m=w0b(a,b,c,k,h.b,yEc,g);m!=g&&(ZEb(f.c,m),true);m.c&&(g=m)}}}}for(i=new Anb(f);i.a<i.c.c.length;){h=RD(ynb(i),452);Wmb(b.a,h.a,0)!=-1||Rmb(b.a,h.a);h.c&&(ZEb(e.c,h),true)}} +function QXb(a){var b,c,d,e,f,g,h;b=0;for(f=new Anb(a.b.a);f.a<f.c.c.length;){d=RD(ynb(f),194);d.b=0;d.c=0}PXb(a,0);OXb(a,a.g);uYb(a.c);yYb(a.c);c=(Cmd(),ymd);wYb(qYb(vYb(wYb(qYb(vYb(wYb(vYb(a.c,c)),Fmd(c)))),c)));vYb(a.c,ymd);TXb(a,a.g);UXb(a,0);VXb(a,0);WXb(a,1);PXb(a,1);OXb(a,a.d);uYb(a.c);for(g=new Anb(a.b.a);g.a<g.c.c.length;){d=RD(ynb(g),194);b+=$wnd.Math.abs(d.c)}for(h=new Anb(a.b.a);h.a<h.c.c.length;){d=RD(ynb(h),194);d.b=0;d.c=0}c=Bmd;wYb(qYb(vYb(wYb(qYb(vYb(wYb(yYb(vYb(a.c,c))),Fmd(c)))),c)));vYb(a.c,ymd);TXb(a,a.d);UXb(a,1);VXb(a,1);WXb(a,0);yYb(a.c);for(e=new Anb(a.b.a);e.a<e.c.c.length;){d=RD(ynb(e),194);b+=$wnd.Math.abs(d.c)}return b} +function A0b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(!Heb(TD(mQb(c,(yCc(),NAc))))){return}for(h=new Anb(c.j);h.a<h.c.c.length;){g=RD(ynb(h),12);m=s2b(g.g);for(j=m,k=0,l=j.length;k<l;++k){i=j[k];f=i.d.i==c;e=f&&Heb(TD(mQb(i,OAc)));if(e){o=i.c;n=RD(Wjb(a.b,o),10);if(!n){n=f2b(o,(Bod(),zod),o.j,-1,null,null,o.o,RD(mQb(b,rAc),88),b);pQb(n,(Ywc(),Awc),o);Zjb(a.b,o,n);Rmb(b.a,n)}q=i.d;p=RD(Wjb(a.b,q),10);if(!p){p=f2b(q,(Bod(),zod),q.j,1,null,null,q.o,RD(mQb(b,rAc),88),b);pQb(p,(Ywc(),Awc),q);Zjb(a.b,q,p);Rmb(b.a,p)}d=s0b(i);Y0b(d,RD(Vmb(n.j,0),12));Z0b(d,RD(Vmb(p.j,0),12));Rc(a.a,i,new J0b(d,b,(BEc(),zEc)));RD(mQb(b,(Ywc(),kwc)),21).Fc((ovc(),hvc))}}}} +function OQc(a,b){var c,d,e,f,g,h,i,j,k,l,m;for(e=new Anb(a.a.b);e.a<e.c.c.length;){c=RD(ynb(e),30);for(i=new Anb(c.a);i.a<i.c.c.length;){h=RD(ynb(i),10);b.j[h.p]=h;b.i[h.p]=b.o==(EQc(),DQc)?pxe:oxe}}akb(a.c);g=a.a.b;b.c==(wQc(),uQc)&&(g=hv(g));sRc(a.e,b,a.b);Mnb(b.p,null);for(f=g.Kc();f.Ob();){c=RD(f.Pb(),30);j=c.a;b.o==(EQc(),DQc)&&(j=hv(j));for(m=j.Kc();m.Ob();){l=RD(m.Pb(),10);b.g[l.p]==l&&PQc(a,l,b)}}QQc(a,b);for(d=g.Kc();d.Ob();){c=RD(d.Pb(),30);for(m=new Anb(c.a);m.a<m.c.c.length;){l=RD(ynb(m),10);b.p[l.p]=b.p[b.g[l.p].p];if(l==b.g[l.p]){k=Kfb(b.i[b.j[l.p].p]);(b.o==(EQc(),DQc)&&k>pxe||b.o==CQc&&k<oxe)&&(b.p[l.p]=Kfb(b.p[l.p])+k)}}}a.e.xg()} +function ldc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;c.Ug('Label dummy switching',1);d=RD(mQb(b,(yCc(),uAc)),232);$cc(b);e=idc(b,d);a.a=$C(iE,vxe,28,b.b.c.length,15,1);for(h=(btc(),cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc])),k=0,n=h.length;k<n;++k){f=h[k];if((f==atc||f==Xsc||f==$sc)&&!RD(Csb(e.a,f)?e.b[f.g]:null,15).dc()){bdc(a,b);break}}for(i=cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc]),l=0,o=i.length;l<o;++l){f=i[l];f==atc||f==Xsc||f==$sc||mdc(a,RD(Csb(e.a,f)?e.b[f.g]:null,15))}for(g=cD(WC(ZW,1),jwe,232,0,[Zsc,_sc,Ysc,$sc,atc,Xsc]),j=0,m=g.length;j<m;++j){f=g[j];(f==atc||f==Xsc||f==$sc)&&mdc(a,RD(Csb(e.a,f)?e.b[f.g]:null,15))}a.a=null;c.Vg()} +function tte(a,b){var c,d,e,f,g,h,i,j,k;j=b;if(j.b==null||a.b==null)return;vte(a);ste(a);vte(j);ste(j);c=$C(kE,Pwe,28,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){d+=2}else if(f>=h&&e<=i){if(h<=e&&f<=i){c[k++]=e;c[k++]=f;d+=2}else if(h<=e){c[k++]=e;c[k++]=i;a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=h;c[k++]=f;d+=2}else{c[k++]=h;c[k++]=i;a.b[d]=i+1}}else if(i<e){g+=2}else{throw Adb(new yz('Token#intersectRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] & ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=$C(kE,Pwe,28,k,15,1);hib(c,0,a.b,0,k)} +function RXb(a){var b,c,d,e,f,g,h;b=new bnb;a.g=new bnb;a.d=new bnb;for(g=new vkb((new mkb(a.f.b)).a);g.b;){f=tkb(g);Rmb(b,RD(RD(f.md(),42).b,86));Dmd(RD(f.ld(),602).Af())?Rmb(a.d,RD(f.md(),42)):Rmb(a.g,RD(f.md(),42))}OXb(a,a.d);OXb(a,a.g);a.c=new EYb(a.b);CYb(a.c,(zXb(),yXb));TXb(a,a.d);TXb(a,a.g);Tmb(b,a.c.a.b);a.e=new rjd(oxe,oxe);a.a=new rjd(pxe,pxe);for(d=new Anb(b);d.a<d.c.c.length;){c=RD(ynb(d),86);a.e.a=$wnd.Math.min(a.e.a,c.g.c);a.e.b=$wnd.Math.min(a.e.b,c.g.d);a.a.a=$wnd.Math.max(a.a.a,c.g.c+c.g.b);a.a.b=$wnd.Math.max(a.a.b,c.g.d+c.g.a)}BYb(a.c,new $Xb);h=0;do{e=QXb(a);++h}while((h<2||e>pwe)&&h<10);BYb(a.c,new bYb);QXb(a);xYb(a.c);AXb(a.f)} +function B9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;c=RD(mQb(a,(yCc(),BBc)),101);g=a.f;f=a.d;h=g.a+f.b+f.c;i=0-f.d-a.c.b;k=g.b+f.d+f.a-a.c.b;j=new bnb;l=new bnb;for(e=new Anb(b);e.a<e.c.c.length;){d=RD(ynb(e),10);switch(c.g){case 1:case 2:case 3:r9b(d);break;case 4:m=RD(mQb(d,zBc),8);n=!m?0:m.a;d.n.a=h*Kfb(UD(mQb(d,(Ywc(),Jwc))))-n;U2b(d,true,false);break;case 5:o=RD(mQb(d,zBc),8);p=!o?0:o.a;d.n.a=Kfb(UD(mQb(d,(Ywc(),Jwc))))-p;U2b(d,true,false);g.a=$wnd.Math.max(g.a,d.n.a+d.o.a/2);}switch(RD(mQb(d,(Ywc(),hwc)),64).g){case 1:d.n.b=i;ZEb(j.c,d);break;case 3:d.n.b=k;ZEb(l.c,d);}}switch(c.g){case 1:case 2:t9b(j,a);t9b(l,a);break;case 3:z9b(j,a);z9b(l,a);}} +function $Jc(a,b){var c,d,e,f,g,h,i,j,k,l,m;switch(a.k.g){case 1:d=RD(mQb(a,(Ywc(),Awc)),18);c=RD(mQb(d,Bwc),75);!c?(c=new Ejd):Heb(TD(mQb(d,Nwc)))&&(c=Ijd(c));j=RD(mQb(a,vwc),12);if(j){k=xjd(cD(WC(l3,1),Nve,8,0,[j.i.n,j.n,j.a]));if(b<=k.a){return k.b}Pub(c,k,c.a,c.a.a)}l=RD(mQb(a,wwc),12);if(l){m=xjd(cD(WC(l3,1),Nve,8,0,[l.i.n,l.n,l.a]));if(m.a<=b){return m.b}Pub(c,m,c.c.b,c.c)}if(c.b>=2){i=Sub(c,0);g=RD(evb(i),8);h=RD(evb(i),8);while(h.a<b&&i.b!=i.d.c){g=h;h=RD(evb(i),8)}return g.b+(b-g.a)/(h.a-g.a)*(h.b-g.b)}break;case 3:f=RD(mQb(RD(Vmb(a.j,0),12),(Ywc(),Awc)),12);e=f.i;switch(f.j.g){case 1:return e.n.b;case 3:return e.n.b+e.o.b;}}return _2b(a).b} +function Akc(a){var b,c,d,e,f,g,h,i,j,k,l;for(g=new Anb(a.d.b);g.a<g.c.c.length;){f=RD(ynb(g),30);for(i=new Anb(f.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(Heb(TD(mQb(h,(yCc(),Uzc))))){if(!gr(W2b(h))){d=RD(er(W2b(h)),18);k=d.c.i;k==h&&(k=d.d.i);l=new Ptd(k,ojd(ajd(h.n),k.n));Zjb(a.b,h,l);continue}}e=new Uid(h.n.a-h.d.b,h.n.b-h.d.d,h.o.a+h.d.b+h.d.c,h.o.b+h.d.d+h.d.a);b=mGb(pGb(nGb(oGb(new qGb,h),e),jkc),a.a);gGb(hGb(iGb(new jGb,cD(WC(hN,1),rve,60,0,[b])),b),a.a);j=new cHb;Zjb(a.e,b,j);c=Kr(new is(Mr(Z2b(h).a.Kc(),new ir)))-Kr(new is(Mr(a3b(h).a.Kc(),new ir)));c<0?aHb(j,true,(Cmd(),ymd)):c>0&&aHb(j,true,(Cmd(),zmd));h.k==(r3b(),m3b)&&bHb(j);Zjb(a.f,h,b)}}} +function OVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=RD(mQb(a,(q$c(),h$c)),27);j=lve;k=lve;h=qwe;i=qwe;for(t=Sub(a.b,0);t.b!=t.d.c;){r=RD(evb(t),39);n=r.e;o=r.f;j=$wnd.Math.min(j,n.a-o.a/2);k=$wnd.Math.min(k,n.b-o.b/2);h=$wnd.Math.max(h,n.a+o.a/2);i=$wnd.Math.max(i,n.b+o.b/2)}m=RD(Gxd(e,(h_c(),T$c)),107);for(s=Sub(a.b,0);s.b!=s.d.c;){r=RD(evb(s),39);l=mQb(r,h$c);if(ZD(l,207)){f=RD(l,27);Byd(f,r.e.a,r.e.b);zxd(f,r)}}for(q=Sub(a.a,0);q.b!=q.d.c;){p=RD(evb(q),65);d=RD(mQb(p,h$c),74);if(d){b=p.a;c=IGd(d,true,true);lsd(b,c)}}u=h-j+(m.b+m.c);g=i-k+(m.d+m.a);Heb(TD(Gxd(e,(umd(),mld))))||Esd(e,u,g,false,false);Ixd(e,Ikd,u-(m.b+m.c));Ixd(e,Hkd,g-(m.d+m.a))} +function Wec(a,b){var c,d,e,f,g,h,i,j,k,l;i=true;e=0;j=a.g[b.p];k=b.o.b+a.o;c=a.d[b.p][2];$mb(a.b,j,sgb(RD(Vmb(a.b,j),17).a-1+c));$mb(a.c,j,Kfb(UD(Vmb(a.c,j)))-k+c*a.f);++j;if(j>=a.j){++a.j;Rmb(a.b,sgb(1));Rmb(a.c,k)}else{d=a.d[b.p][1];$mb(a.b,j,sgb(RD(Vmb(a.b,j),17).a+1-d));$mb(a.c,j,Kfb(UD(Vmb(a.c,j)))+k-d*a.f)}(a.r==(aEc(),VDc)&&(RD(Vmb(a.b,j),17).a>a.k||RD(Vmb(a.b,j-1),17).a>a.k)||a.r==YDc&&(Kfb(UD(Vmb(a.c,j)))>a.n||Kfb(UD(Vmb(a.c,j-1)))>a.n))&&(i=false);for(g=new is(Mr(Z2b(b).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);h=f.c.i;if(a.g[h.p]==j){l=Wec(a,h);e=e+RD(l.a,17).a;i=i&&Heb(TD(l.b))}}a.g[b.p]=j;e=e+a.d[b.p][0];return new Ptd(sgb(e),(Geb(),i?true:false))} +function cXb(a,b){var c,d,e,f,g;c=Kfb(UD(mQb(b,(yCc(),TBc))));c<2&&pQb(b,TBc,2);d=RD(mQb(b,rAc),88);d==(Cmd(),Amd)&&pQb(b,rAc,i2b(b));e=RD(mQb(b,NBc),17);e.a==0?pQb(b,(Ywc(),Lwc),new Owb):pQb(b,(Ywc(),Lwc),new Pwb(e.a));f=TD(mQb(b,gBc));f==null&&pQb(b,gBc,(Geb(),dE(mQb(b,yAc))===dE((Ymd(),Umd))?true:false));FDb(new SDb(null,new Swb(b.a,16)),new fXb(a));FDb(EDb(new SDb(null,new Swb(b.b,16)),new hXb),new jXb(a));g=new gFc(b);pQb(b,(Ywc(),Qwc),g);Sed(a.a);Ved(a.a,(sXb(),nXb),RD(mQb(b,pAc),188));Ved(a.a,oXb,RD(mQb(b,$Ac),188));Ved(a.a,pXb,RD(mQb(b,oAc),188));Ved(a.a,qXb,RD(mQb(b,kBc),188));Ved(a.a,rXb,KRc(RD(mQb(b,yAc),223)));Ped(a.a,bXb(b));pQb(b,Kwc,Qed(a.a,b))} +function STc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;l=new Tsb;g=new bnb;QTc(a,c,a.d.Ag(),g,l);QTc(a,d,a.d.Bg(),g,l);a.b=0.2*(p=RTc(EDb(new SDb(null,new Swb(g,16)),new XTc)),q=RTc(EDb(new SDb(null,new Swb(g,16)),new ZTc)),$wnd.Math.min(p,q));f=0;for(h=0;h<g.c.length-1;h++){i=(tFb(h,g.c.length),RD(g.c[h],118));for(o=h+1;o<g.c.length;o++){f+=PTc(a,i,(tFb(o,g.c.length),RD(g.c[o],118)))}}m=RD(mQb(b,(Ywc(),Lwc)),234);f>=2&&(r=uSc(g,true,m),!a.e&&(a.e=new xTc(a)),tTc(a.e,r,g,a.b),undefined);UTc(g,m);WTc(g);n=-1;for(k=new Anb(g);k.a<k.c.c.length;){j=RD(ynb(k),118);if($wnd.Math.abs(j.s-j.c)<Vze){continue}n=$wnd.Math.max(n,j.o);a.d.yg(j,e,a.c)}a.d.a.a.$b();return n+1} +function s0c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;l=RD(Hr((g=Sub((new dXc(b)).a.d,0),new gXc(g))),39);o=l?RD(mQb(l,(q$c(),b$c)),39):null;e=1;while(!!l&&!!o){i=0;u=0;c=l;d=o;for(h=0;h<e;h++){c=_Wc(c);d=_Wc(d);u+=Kfb(UD(mQb(c,(q$c(),g$c))));i+=Kfb(UD(mQb(d,g$c)))}t=Kfb(UD(mQb(o,(q$c(),j$c))));s=Kfb(UD(mQb(l,j$c)));m=u0c(a,l,o);n=t+i+a.b+m-s-u;if(0<n){j=b;k=0;while(!!j&&j!=d){++k;j=RD(mQb(j,c$c),39)}if(j){r=n/k;j=b;while(j!=d){q=Kfb(UD(mQb(j,j$c)))+n;pQb(j,j$c,q);p=Kfb(UD(mQb(j,g$c)))+n;pQb(j,g$c,p);n-=r;j=RD(mQb(j,c$c),39)}}else{return}}++e;l.d.b==0?(l=kWc(new dXc(b),e)):(l=RD(Hr((f=Sub((new dXc(l)).a.d,0),new gXc(f))),39));o=l?RD(mQb(l,b$c),39):null}} +function Lmc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(m=a.c[b],n=a.c[c],(o=RD(mQb(m,(Ywc(),qwc)),15),!!o&&o.gc()!=0&&o.Hc(n))||(p=m.k!=(r3b(),o3b)&&n.k!=o3b,q=RD(mQb(m,pwc),10),r=RD(mQb(n,pwc),10),s=q!=r,t=!!q&&q!=m||!!r&&r!=n,u=Mmc(m,(qpd(),Yod)),v=Mmc(n,npd),t=t|(Mmc(m,npd)||Mmc(n,Yod)),w=t&&s||u||v,p&&w)||m.k==(r3b(),q3b)&&n.k==p3b||n.k==(r3b(),q3b)&&m.k==p3b){return false}k=a.c[b];f=a.c[c];e=jMc(a.e,k,f,(qpd(),ppd));i=jMc(a.i,k,f,Xod);Cmc(a.f,k,f);j=lmc(a.b,k,f)+RD(e.a,17).a+RD(i.a,17).a+a.f.d;h=lmc(a.b,f,k)+RD(e.b,17).a+RD(i.b,17).a+a.f.b;if(a.a){l=RD(mQb(k,Awc),12);g=RD(mQb(f,Awc),12);d=hMc(a.g,l,g);j+=RD(d.a,17).a;h+=RD(d.b,17).a}return j>h} +function Iad(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;j=oxe;k=oxe;h=pxe;i=pxe;for(m=new Anb(b.i);m.a<m.c.c.length;){l=RD(ynb(m),68);e=RD(RD(Wjb(a.g,l.a),42).b,27);Byd(e,l.b.c,l.b.d);j=$wnd.Math.min(j,e.i);k=$wnd.Math.min(k,e.j);h=$wnd.Math.max(h,e.i+e.g);i=$wnd.Math.max(i,e.j+e.f)}n=RD(Gxd(a.c,(ncd(),ecd)),107);Esd(a.c,h-j+(n.b+n.c),i-k+(n.d+n.a),true,true);Isd(a.c,-j+n.b,-k+n.d);for(d=new dMd(uCd(a.c));d.e!=d.i.gc();){c=RD(bMd(d),74);g=IGd(c,true,true);o=JGd(c);q=LGd(c);p=new rjd(o.i+o.g/2,o.j+o.f/2);f=new rjd(q.i+q.g/2,q.j+q.f/2);r=ojd(new rjd(f.a,f.b),p);wid(r,o.g,o.f);$id(p,r);s=ojd(new rjd(p.a,p.b),f);wid(s,q.g,q.f);$id(f,s);Nzd(g,p.a,p.b);Gzd(g,f.a,f.b)}} +function Tcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;b.Ug('Label dummy removal',1);d=Kfb(UD(mQb(a,(yCc(),VBc))));e=Kfb(UD(mQb(a,ZBc)));j=RD(mQb(a,rAc),88);for(i=new Anb(a.b);i.a<i.c.c.length;){h=RD(ynb(i),30);l=new Jkb(h.a,0);while(l.b<l.d.gc()){k=(sFb(l.b<l.d.gc()),RD(l.d.Xb(l.c=l.b++),10));if(k.k==(r3b(),n3b)){m=RD(mQb(k,(Ywc(),Awc)),18);o=Kfb(UD(mQb(m,FAc)));g=dE(mQb(k,swc))===dE((Pnd(),Mnd));c=new sjd(k.n);g&&(c.b+=o+d);f=new rjd(k.o.a,k.o.b+(k.k==n3b&&!QDb(CDb(RD(mQb(k,Mwc),15).Oc(),new PAb(new x3b))).Bd((xDb(),wDb))?0:-o-d));n=RD(mQb(k,Mwc),15);j==(Cmd(),Bmd)||j==xmd?Scc(n,c,e,f,g,j):Rcc(n,c,e,f);Tmb(m.b,n);Hec(k,dE(mQb(a,yAc))===dE((Ymd(),Vmd)));Ckb(l)}}}b.Vg()} +function ZBd(a){if(a.q)return;a.q=true;a.p=jBd(a,0);a.a=jBd(a,1);oBd(a.a,0);a.f=jBd(a,2);oBd(a.f,1);iBd(a.f,2);a.n=jBd(a,3);iBd(a.n,3);iBd(a.n,4);iBd(a.n,5);iBd(a.n,6);a.g=jBd(a,4);oBd(a.g,7);iBd(a.g,8);a.c=jBd(a,5);oBd(a.c,7);oBd(a.c,8);a.i=jBd(a,6);oBd(a.i,9);oBd(a.i,10);oBd(a.i,11);oBd(a.i,12);iBd(a.i,13);a.j=jBd(a,7);oBd(a.j,9);a.d=jBd(a,8);oBd(a.d,3);oBd(a.d,4);oBd(a.d,5);oBd(a.d,6);iBd(a.d,7);iBd(a.d,8);iBd(a.d,9);iBd(a.d,10);a.b=jBd(a,9);iBd(a.b,0);iBd(a.b,1);a.e=jBd(a,10);iBd(a.e,1);iBd(a.e,2);iBd(a.e,3);iBd(a.e,4);oBd(a.e,5);oBd(a.e,6);oBd(a.e,7);oBd(a.e,8);oBd(a.e,9);oBd(a.e,10);iBd(a.e,11);a.k=jBd(a,11);iBd(a.k,0);iBd(a.k,1);a.o=kBd(a,12);a.s=kBd(a,13)} +function CXb(a,b){b.dc()&&JYb(a.j,true,true,true,true);pb(b,(qpd(),cpd))&&JYb(a.j,true,true,true,false);pb(b,Zod)&&JYb(a.j,false,true,true,true);pb(b,kpd)&&JYb(a.j,true,true,false,true);pb(b,mpd)&&JYb(a.j,true,false,true,true);pb(b,dpd)&&JYb(a.j,false,true,true,false);pb(b,$od)&&JYb(a.j,false,true,false,true);pb(b,lpd)&&JYb(a.j,true,false,false,true);pb(b,jpd)&&JYb(a.j,true,false,true,false);pb(b,hpd)&&JYb(a.j,true,true,true,true);pb(b,apd)&&JYb(a.j,true,true,true,true);pb(b,hpd)&&JYb(a.j,true,true,true,true);pb(b,_od)&&JYb(a.j,true,true,true,true);pb(b,ipd)&&JYb(a.j,true,true,true,true);pb(b,gpd)&&JYb(a.j,true,true,true,true);pb(b,fpd)&&JYb(a.j,true,true,true,true)} +function tAd(b,c,d){var e,f,g,h,i,j,k,l,m;if(b.a!=c.jk()){throw Adb(new agb(VHe+c.xe()+WHe))}e=Oee((lke(),jke),c).Jl();if(e){return e.jk().wi().ri(e,d)}h=Oee(jke,c).Ll();if(h){if(d==null){return null}i=RD(d,15);if(i.dc()){return ''}m=new Qhb;for(g=i.Kc();g.Ob();){f=g.Pb();Nhb(m,h.jk().wi().ri(h,f));m.a+=' '}return qeb(m,m.a.length-1)}l=Oee(jke,c).Ml();if(!l.dc()){for(k=l.Kc();k.Ob();){j=RD(k.Pb(),156);if(j.fk(d)){try{m=j.jk().wi().ri(j,d);if(m!=null){return m}}catch(a){a=zdb(a);if(!ZD(a,103))throw Adb(a)}}}throw Adb(new agb("Invalid value: '"+d+"' for datatype :"+c.xe()))}RD(c,847).ok();return d==null?null:ZD(d,180)?''+RD(d,180).a:rb(d)==qK?a2d(nAd[0],RD(d,206)):jeb(d)} +function ZUc(a){var b,c,d,e,f,g,h,i,j,k;j=new Yub;h=new Yub;for(f=new Anb(a);f.a<f.c.c.length;){d=RD(ynb(f),131);d.v=0;d.n=d.i.c.length;d.u=d.t.c.length;d.n==0&&(Pub(j,d,j.c.b,j.c),true);d.u==0&&d.r.a.gc()==0&&(Pub(h,d,h.c.b,h.c),true)}g=-1;while(j.b!=0){d=RD(ku(j,0),131);for(c=new Anb(d.t);c.a<c.c.c.length;){b=RD(ynb(c),274);k=b.b;k.v=$wnd.Math.max(k.v,d.v+1);g=$wnd.Math.max(g,k.v);--k.n;k.n==0&&(Pub(j,k,j.c.b,j.c),true)}}if(g>-1){for(e=Sub(h,0);e.b!=e.d.c;){d=RD(evb(e),131);d.v=g}while(h.b!=0){d=RD(ku(h,0),131);for(c=new Anb(d.i);c.a<c.c.c.length;){b=RD(ynb(c),274);i=b.a;if(i.r.a.gc()!=0){continue}i.v=$wnd.Math.min(i.v,d.v-1);--i.u;i.u==0&&(Pub(h,i,h.c.b,h.c),true)}}}} +function WTc(a){var b,c,d,e,f,g,h,i,j,k;j=new bnb;h=new bnb;for(g=new Anb(a);g.a<g.c.c.length;){e=RD(ynb(g),118);PSc(e,e.f.c.length);QSc(e,e.k.c.length);e.d==0&&(ZEb(j.c,e),true);e.i==0&&e.e.b==0&&(ZEb(h.c,e),true)}d=-1;while(j.c.length!=0){e=RD(Xmb(j,0),118);for(c=new Anb(e.k);c.a<c.c.c.length;){b=RD(ynb(c),132);k=b.b;RSc(k,$wnd.Math.max(k.o,e.o+1));d=$wnd.Math.max(d,k.o);PSc(k,k.d-1);k.d==0&&(ZEb(j.c,k),true)}}if(d>-1){for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),118);e.o=d}while(h.c.length!=0){e=RD(Xmb(h,0),118);for(c=new Anb(e.f);c.a<c.c.c.length;){b=RD(ynb(c),132);i=b.a;if(i.e.b>0){continue}RSc(i,$wnd.Math.min(i.o,e.o-1));QSc(i,i.i-1);i.i==0&&(ZEb(h.c,i),true)}}}} +function Lid(a,b,c,d,e){var f,g,h,i;i=oxe;g=false;h=Gid(a,ojd(new rjd(b.a,b.b),a),$id(new rjd(c.a,c.b),e),ojd(new rjd(d.a,d.b),c));f=!!h&&!($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe||$wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe);h=Gid(a,ojd(new rjd(b.a,b.b),a),c,e);!!h&&(($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe)==($wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe)||f?(i=$wnd.Math.min(i,ejd(ojd(h,c)))):(g=true));h=Gid(a,ojd(new rjd(b.a,b.b),a),d,e);!!h&&(g||($wnd.Math.abs(h.a-a.a)<=IGe&&$wnd.Math.abs(h.b-a.b)<=IGe)==($wnd.Math.abs(h.a-b.a)<=IGe&&$wnd.Math.abs(h.b-b.b)<=IGe)||f)&&(i=$wnd.Math.min(i,ejd(ojd(h,d))));return i} +function eWb(a){Cgd(a,new Pfd(Wfd($fd(Xfd(Zfd(Yfd(new agd,AAe),BAe),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new hWb),Zze)));Agd(a,AAe,dAe,iGd(XVb));Agd(a,AAe,fAe,(Geb(),true));Agd(a,AAe,jAe,iGd($Vb));Agd(a,AAe,CAe,iGd(_Vb));Agd(a,AAe,iAe,iGd(aWb));Agd(a,AAe,kAe,iGd(ZVb));Agd(a,AAe,gAe,iGd(bWb));Agd(a,AAe,lAe,iGd(cWb));Agd(a,AAe,vAe,iGd(WVb));Agd(a,AAe,xAe,iGd(UVb));Agd(a,AAe,yAe,iGd(VVb));Agd(a,AAe,zAe,iGd(YVb));Agd(a,AAe,wAe,iGd(TVb))} +function kJc(a){var b,c,d,e,f,g,h,i;b=null;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),239);Kfb(pJc(c.g,c.d[0]).a);c.b=null;if(!!c.e&&c.e.gc()>0&&c.c==0){!b&&(b=new bnb);ZEb(b.c,c)}}if(b){while(b.c.length!=0){c=RD(Xmb(b,0),239);if(!!c.b&&c.b.c.length>0){for(f=(!c.b&&(c.b=new bnb),new Anb(c.b));f.a<f.c.c.length;){e=RD(ynb(f),239);if(Mfb(pJc(e.g,e.d[0]).a)==Mfb(pJc(c.g,c.d[0]).a)){if(Wmb(a,e,0)>Wmb(a,c,0)){return new Ptd(e,c)}}else if(Kfb(pJc(e.g,e.d[0]).a)>Kfb(pJc(c.g,c.d[0]).a)){return new Ptd(e,c)}}}for(h=(!c.e&&(c.e=new bnb),c.e).Kc();h.Ob();){g=RD(h.Pb(),239);i=(!g.b&&(g.b=new bnb),g.b);wFb(0,i.c.length);XEb(i.c,0,c);g.c==i.c.length&&(ZEb(b.c,g),true)}}}return null} +function _Jc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;b.Ug('Interactive crossing minimization',1);g=0;for(f=new Anb(a.b);f.a<f.c.c.length;){d=RD(ynb(f),30);d.p=g++}m=c1b(a);q=new ILc(m.length);yNc(new mob(cD(WC(QY,1),rve,230,0,[q])),m);p=0;g=0;for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);c=0;l=0;for(k=new Anb(d.a);k.a<k.c.c.length;){i=RD(ynb(k),10);if(i.n.a>0){c+=i.n.a+i.o.a/2;++l}for(o=new Anb(i.j);o.a<o.c.c.length;){n=RD(ynb(o),12);n.p=p++}}l>0&&(c/=l);r=$C(iE,vxe,28,d.a.c.length,15,1);h=0;for(j=new Anb(d.a);j.a<j.c.c.length;){i=RD(ynb(j),10);i.p=h++;r[i.p]=$Jc(i,c);i.k==(r3b(),o3b)&&pQb(i,(Ywc(),Cwc),r[i.p])}yob();_mb(d.a,new eKc(r));wIc(q,m,g,true);++g}b.Vg()} +function wte(a,b){var c,d,e,f,g,h,i,j,k;if(b.e==5){tte(a,b);return}j=b;if(j.b==null||a.b==null)return;vte(a);ste(a);vte(j);ste(j);c=$C(kE,Pwe,28,a.b.length+j.b.length,15,1);k=0;d=0;g=0;while(d<a.b.length&&g<j.b.length){e=a.b[d];f=a.b[d+1];h=j.b[g];i=j.b[g+1];if(f<h){c[k++]=a.b[d++];c[k++]=a.b[d++]}else if(f>=h&&e<=i){if(h<=e&&f<=i){d+=2}else if(h<=e){a.b[d]=i+1;g+=2}else if(f<=i){c[k++]=e;c[k++]=h-1;d+=2}else{c[k++]=e;c[k++]=h-1;a.b[d]=i+1;g+=2}}else if(i<e){g+=2}else{throw Adb(new yz('Token#subtractRanges(): Internal Error: ['+a.b[d]+','+a.b[d+1]+'] - ['+j.b[g]+','+j.b[g+1]+']'))}}while(d<a.b.length){c[k++]=a.b[d++];c[k++]=a.b[d++]}a.b=$C(kE,Pwe,28,k,15,1);hib(c,0,a.b,0,k)} +function oTb(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;h=IGd(b,false,false);r=ssd(h);d&&(r=Ijd(r));t=Kfb(UD(Gxd(b,(tSb(),mSb))));q=(sFb(r.b!=0),RD(r.a.a.c,8));l=RD(ju(r,1),8);if(r.b>2){k=new bnb;Tmb(k,new Rkb(r,1,r.b));f=jTb(k,t+a.a);s=new ORb(f);kQb(s,b);ZEb(c.c,s)}else{d?(s=RD(Wjb(a.b,JGd(b)),272)):(s=RD(Wjb(a.b,LGd(b)),272))}i=JGd(b);d&&(i=LGd(b));g=qTb(q,i);j=t+a.a;if(g.a){j+=$wnd.Math.abs(q.b-l.b);p=new rjd(l.a,(l.b+q.b)/2)}else{j+=$wnd.Math.abs(q.a-l.a);p=new rjd((l.a+q.a)/2,l.b)}d?Zjb(a.d,b,new QRb(s,g,p,j)):Zjb(a.c,b,new QRb(s,g,p,j));Zjb(a.b,b,s);o=(!b.n&&(b.n=new C5d(I4,b,1,7)),b.n);for(n=new dMd(o);n.e!=n.i.gc();){m=RD(bMd(n),135);e=nTb(a,m,true,0,0);ZEb(c.c,e)}} +function sMb(a){var b,c,d,e,f,g,h;if(a.A.dc()){return}if(a.A.Hc((Qpd(),Opd))){RD(Vrb(a.b,(qpd(),Yod)),127).k=true;RD(Vrb(a.b,npd),127).k=true;b=a.q!=(Bod(),xod)&&a.q!=wod;QJb(RD(Vrb(a.b,Xod),127),b);QJb(RD(Vrb(a.b,ppd),127),b);QJb(a.g,b);if(a.A.Hc(Ppd)){RD(Vrb(a.b,Yod),127).j=true;RD(Vrb(a.b,npd),127).j=true;RD(Vrb(a.b,Xod),127).k=true;RD(Vrb(a.b,ppd),127).k=true;a.g.k=true}}if(a.A.Hc(Npd)){a.a.j=true;a.a.k=true;a.g.j=true;a.g.k=true;h=a.B.Hc((dqd(),_pd));for(e=nMb(),f=0,g=e.length;f<g;++f){d=e[f];c=RD(Vrb(a.i,d),314);if(c){if(jMb(d)){c.j=true;c.k=true}else{c.j=!h;c.k=!h}}}}if(a.A.Hc(Mpd)&&a.B.Hc((dqd(),$pd))){a.g.j=true;a.g.j=true;if(!a.a.j){a.a.j=true;a.a.k=true;a.a.e=true}}} +function eOc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;for(d=new Anb(a.e.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);n=a.i[e.p];j=n.a.e;i=n.d.e;e.n.b=j;r=i-j-e.o.b;b=BOc(e);m=(wDc(),(!e.q?(yob(),yob(),wob):e.q)._b((yCc(),iBc))?(l=RD(mQb(e,iBc),203)):(l=RD(mQb(Y2b(e),jBc),203)),l);b&&(m==tDc||m==sDc)&&(e.o.b+=r);if(b&&(m==vDc||m==tDc||m==sDc)){for(p=new Anb(e.j);p.a<p.c.c.length;){o=RD(ynb(p),12);if((qpd(),apd).Hc(o.j)){k=RD(Wjb(a.k,o),125);o.n.b=k.e-j}}for(h=new Anb(e.b);h.a<h.c.c.length;){g=RD(ynb(h),72);q=RD(mQb(e,dBc),21);q.Hc((dod(),aod))?(g.n.b+=r):q.Hc(bod)&&(g.n.b+=r/2)}(m==tDc||m==sDc)&&b3b(e,(qpd(),npd)).Jc(new yPc(r))}}}} +function qOc(a,b,c){var d,e,f,g,h,i,j,k,l,m;j=new bnb;for(i=new Anb(b.a);i.a<i.c.c.length;){g=RD(ynb(i),10);for(m=b3b(g,(qpd(),Xod)).Kc();m.Ob();){l=RD(m.Pb(),12);for(e=new Anb(l.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(!W0b(d)&&d.c.i.c==d.d.i.c||W0b(d)||d.d.i.c!=c){continue}ZEb(j.c,d)}}}for(h=hv(c.a).Kc();h.Ob();){g=RD(h.Pb(),10);for(m=b3b(g,(qpd(),ppd)).Kc();m.Ob();){l=RD(m.Pb(),12);for(e=new Anb(l.e);e.a<e.c.c.length;){d=RD(ynb(e),18);if(!W0b(d)&&d.c.i.c==d.d.i.c||W0b(d)||d.c.i.c!=b){continue}if(j.c.length!=0){k=new Jkb(j,j.c.length);f=(sFb(k.b>0),RD(k.a.Xb(k.c=--k.b),18));while(f!=d&&k.b>0){a.a[f.p]=true;a.a[d.p]=true;f=(sFb(k.b>0),RD(k.a.Xb(k.c=--k.b),18))}k.b>0&&Ckb(k)}}}}} +function Zyb(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;if(!a.b){return false}g=null;m=null;i=new Fzb(null,null);e=1;i.a[1]=a.b;l=i;while(l.a[e]){j=e;h=m;m=l;l=l.a[e];d=a.a.Ne(b,l.d);e=d<0?0:1;d==0&&(!c.c||Fvb(l.e,c.d))&&(g=l);if(!(!!l&&l.b)&&!Vyb(l.a[e])){if(Vyb(l.a[1-e])){m=m.a[j]=azb(l,e)}else if(!Vyb(l.a[1-e])){n=m.a[1-j];if(n){if(!Vyb(n.a[1-j])&&!Vyb(n.a[j])){m.b=false;n.b=true;l.b=true}else{f=h.a[1]==m?1:0;Vyb(n.a[j])?(h.a[f]=_yb(m,j)):Vyb(n.a[1-j])&&(h.a[f]=azb(m,j));l.b=h.a[f].b=true;h.a[f].a[0].b=false;h.a[f].a[1].b=false}}}}}if(g){c.b=true;c.d=g.e;if(l!=g){k=new Fzb(l.d,l.e);$yb(a,i,g,k);m==g&&(m=k)}m.a[m.a[1]==l?1:0]=l.a[!l.a[0]?1:0];--a.c}a.b=i.a[1];!!a.b&&(a.b.b=false);return c.b} +function Ilc(a){var b,c,d,e,f,g,h,i,j,k,l,m;for(e=new Anb(a.a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);for(i=d.c.Kc();i.Ob();){h=RD(i.Pb(),60);if(d.a==h.a){continue}Dmd(a.a.d)?(l=a.a.g.ff(d,h)):(l=a.a.g.gf(d,h));f=d.b.a+d.d.b+l-h.b.a;f=$wnd.Math.ceil(f);f=$wnd.Math.max(0,f);if(_jc(d,h)){g=eJb(new gJb,a.d);j=eE($wnd.Math.ceil(h.b.a-d.b.a));b=j-(h.b.a-d.b.a);k=$jc(d).a;c=d;if(!k){k=$jc(h).a;b=-b;c=h}if(k){c.b.a-=b;k.n.a-=b}rIb(uIb(tIb(vIb(sIb(new wIb,$wnd.Math.max(0,j)),1),g),a.c[d.a.d]));rIb(uIb(tIb(vIb(sIb(new wIb,$wnd.Math.max(0,-j)),1),g),a.c[h.a.d]))}else{m=1;(ZD(d.g,154)&&ZD(h.g,10)||ZD(h.g,154)&&ZD(d.g,10))&&(m=2);rIb(uIb(tIb(vIb(sIb(new wIb,eE(f)),m),a.c[d.a.d]),a.c[h.a.d]))}}}} +function PIc(a,b,c){var d,e,f,g,h,i,j,k,l,m;if(c){d=-1;k=new Jkb(b,0);while(k.b<k.d.gc()){h=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),10));l=a.c[h.c.p][h.p].a;if(l==null){g=d+1;f=new Jkb(b,k.b);while(f.b<f.d.gc()){m=TIc(a,(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),10))).a;if(m!=null){g=(uFb(m),m);break}}l=(d+g)/2;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=(uFb(l),l);a.c[h.c.p][h.p].b=1}d=(uFb(l),l)}}else{e=0;for(j=new Anb(b);j.a<j.c.c.length;){h=RD(ynb(j),10);a.c[h.c.p][h.p].a!=null&&(e=$wnd.Math.max(e,Kfb(a.c[h.c.p][h.p].a)))}e+=2;for(i=new Anb(b);i.a<i.c.c.length;){h=RD(ynb(i),10);if(a.c[h.c.p][h.p].a==null){l=Kwb(a.i,24)*Nxe*e-1;a.c[h.c.p][h.p].a=l;a.c[h.c.p][h.p].d=l;a.c[h.c.p][h.p].b=1}}}} +function xA(a,b,c){var d,e,f,g,h,i,j,k,l;!c&&(c=hB(b.q.getTimezoneOffset()));e=(b.q.getTimezoneOffset()-c.a)*60000;h=new wB(Bdb(Hdb(b.q.getTime()),e));i=h;if(h.q.getTimezoneOffset()!=b.q.getTimezoneOffset()){e>0?(e-=86400000):(e+=86400000);i=new wB(Bdb(Hdb(b.q.getTime()),e))}k=new cib;j=a.a.length;for(f=0;f<j;){d=ihb(a.a,f);if(d>=97&&d<=122||d>=65&&d<=90){for(g=f+1;g<j&&ihb(a.a,g)==d;++g);LA(k,d,g-f,h,i,c);f=g}else if(d==39){++f;if(f<j&&ihb(a.a,f)==39){k.a+="'";++f;continue}l=false;while(!l){g=f;while(g<j&&ihb(a.a,g)!=39){++g}if(g>=j){throw Adb(new agb("Missing trailing '"))}g+1<j&&ihb(a.a,g+1)==39?++g:(l=true);Zhb(k,zhb(a.a,f,g));f=g+1}}else{k.a+=String.fromCharCode(d);++f}}return k.a} +function abe(){RRd(g7,new Ibe);RRd(f7,new nce);RRd(h7,new Uce);RRd(i7,new kde);RRd(k7,new nde);RRd(m7,new qde);RRd(l7,new tde);RRd(n7,new wde);RRd(p7,new ebe);RRd(q7,new hbe);RRd(r7,new kbe);RRd(s7,new nbe);RRd(t7,new qbe);RRd(u7,new tbe);RRd(v7,new wbe);RRd(y7,new zbe);RRd(A7,new Cbe);RRd(C8,new Fbe);RRd(o7,new Lbe);RRd(z7,new Obe);RRd(QI,new Rbe);RRd(WC(gE,1),new Ube);RRd(RI,new Xbe);RRd(SI,new $be);RRd(qK,new bce);RRd(T6,new ece);RRd(VI,new hce);RRd(Y6,new kce);RRd(Z6,new qce);RRd(Tbb,new tce);RRd(Jbb,new wce);RRd(ZI,new zce);RRd(bJ,new Cce);RRd(UI,new Fce);RRd(eJ,new Ice);RRd(VK,new Lce);RRd(Aab,new Oce);RRd(zab,new Rce);RRd(lJ,new Xce);RRd(qJ,new $ce);RRd(a7,new bde);RRd($6,new ede)} +function Inb(a,b){var c,d,e,f,g,h,i,j,k;if(a==null){return vve}i=b.a.zc(a,b);if(i!=null){return '[...]'}c=new Jyb(pve,'[',']');for(e=a,f=0,g=e.length;f<g;++f){d=e[f];if(d!=null&&(rb(d).i&4)!=0){if(Array.isArray(d)&&(k=XC(d),!(k>=14&&k<=16))){if(b.a._b(d)){!c.a?(c.a=new dib(c.d)):Zhb(c.a,c.b);Whb(c.a,'[...]')}else{h=SD(d);j=new btb(b);Gyb(c,Inb(h,j))}}else ZD(d,183)?Gyb(c,hob(RD(d,183))):ZD(d,195)?Gyb(c,aob(RD(d,195))):ZD(d,201)?Gyb(c,bob(RD(d,201))):ZD(d,2111)?Gyb(c,gob(RD(d,2111))):ZD(d,53)?Gyb(c,eob(RD(d,53))):ZD(d,376)?Gyb(c,fob(RD(d,376))):ZD(d,846)?Gyb(c,dob(RD(d,846))):ZD(d,109)&&Gyb(c,cob(RD(d,109)))}else{Gyb(c,d==null?vve:jeb(d))}}return !c.a?c.c:c.e.length==0?c.a.a:c.a.a+(''+c.e)} +function KXd(a,b){var c,d,e,f;f=a.F;if(b==null){a.F=null;yXd(a,null)}else{a.F=(uFb(b),b);d=qhb(b,Fhb(60));if(d!=-1){e=(AFb(0,d,b.length),b.substr(0,d));qhb(b,Fhb(46))==-1&&!lhb(e,hve)&&!lhb(e,dKe)&&!lhb(e,eKe)&&!lhb(e,fKe)&&!lhb(e,gKe)&&!lhb(e,hKe)&&!lhb(e,iKe)&&!lhb(e,jKe)&&(e=kKe);c=thb(b,Fhb(62));c!=-1&&(e+=''+(BFb(c+1,b.length+1),b.substr(c+1)));yXd(a,e)}else{e=b;if(qhb(b,Fhb(46))==-1){d=qhb(b,Fhb(91));d!=-1&&(e=(AFb(0,d,b.length),b.substr(0,d)));if(!lhb(e,hve)&&!lhb(e,dKe)&&!lhb(e,eKe)&&!lhb(e,fKe)&&!lhb(e,gKe)&&!lhb(e,hKe)&&!lhb(e,iKe)&&!lhb(e,jKe)){e=kKe;d!=-1&&(e+=''+(BFb(d,b.length+1),b.substr(d)))}else{e=b}}yXd(a,e);e==b&&(a.F=a.D)}}(a.Db&4)!=0&&(a.Db&1)==0&&qvd(a,new N3d(a,1,5,f,b))} +function Pvd(b,c){var d,e,f,g,h,i,j,k,l,m;j=c.length-1;i=(BFb(j,c.length),c.charCodeAt(j));if(i==93){h=qhb(c,Fhb(91));if(h>=0){f=Uvd(b,(AFb(1,h,c.length),c.substr(1,h-1)));l=(AFb(h+1,j,c.length),c.substr(h+1,j-(h+1)));return Nvd(b,l,f)}}else{d=-1;_eb==null&&(_eb=new RegExp('\\d'));if(_eb.test(String.fromCharCode(i))){d=uhb(c,Fhb(46),j-1);if(d>=0){e=RD(Fvd(b,Zvd(b,(AFb(1,d,c.length),c.substr(1,d-1))),false),61);k=0;try{k=Oeb((BFb(d+1,c.length+1),c.substr(d+1)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){g=a;throw Adb(new RSd(g))}else throw Adb(a)}if(k<e.gc()){m=e.Xb(k);ZD(m,76)&&(m=RD(m,76).md());return RD(m,58)}}}if(d<0){return RD(Fvd(b,Zvd(b,(BFb(1,c.length+1),c.substr(1))),false),58)}}return null} +function Jcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;b.Ug('Label dummy insertions',1);l=new bnb;g=Kfb(UD(mQb(a,(yCc(),VBc))));j=Kfb(UD(mQb(a,ZBc)));k=RD(mQb(a,rAc),88);for(n=new Anb(a.a);n.a<n.c.c.length;){m=RD(ynb(n),10);for(f=new is(Mr(a3b(m).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(e.c.i!=e.d.i&&br(e.b,Gcc)){p=Kcc(e);o=ev(e.b.c.length);c=Icc(a,e,p,o);ZEb(l.c,c);d=c.o;h=new Jkb(e.b,0);while(h.b<h.d.gc()){i=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),72));if(dE(mQb(i,wAc))===dE((Omd(),Lmd))){if(k==(Cmd(),Bmd)||k==xmd){d.a+=i.o.a+j;d.b=$wnd.Math.max(d.b,i.o.b)}else{d.a=$wnd.Math.max(d.a,i.o.a);d.b+=i.o.b+j}ZEb(o.c,i);Ckb(h)}}if(k==(Cmd(),Bmd)||k==xmd){d.a-=j;d.b+=g+p}else{d.b+=g-j+p}}}}Tmb(a.a,l);b.Vg()} +function H_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;a.c=a.e;o=TD(mQb(b,(yCc(),OBc)));n=o==null||(uFb(o),o);f=RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc));e=RD(mQb(b,BBc),101);c=!(e==(Bod(),vod)||e==xod||e==wod);if(n&&(c||!f)){for(l=new Anb(b.a);l.a<l.c.c.length;){j=RD(ynb(l),10);j.p=0}m=new bnb;for(k=new Anb(b.a);k.a<k.c.c.length;){j=RD(ynb(k),10);d=G_b(a,j,null);if(d){i=new d1b;kQb(i,b);pQb(i,ewc,RD(d.b,21));C2b(i.d,b.d);pQb(i,nBc,null);for(h=RD(d.a,15).Kc();h.Ob();){g=RD(h.Pb(),10);Rmb(i.a,g);g.a=i}m.Fc(i)}}f&&(dE(mQb(b,Yzc))===dE((U$b(),Q$b))?(a.c=a.b):dE(mQb(b,Yzc))===dE(S$b)?(a.c=a.d):(a.c=a.a))}else{m=new mob(cD(WC(eR,1),OAe,36,0,[b]))}dE(mQb(b,Yzc))!==dE((U$b(),T$b))&&(yob(),m.jd(new K_b));return m} +function o2d(a,b,c){var d,e,f,g,h,i,j;j=a.c;!b&&(b=d2d);a.c=b;if((a.Db&4)!=0&&(a.Db&1)==0){i=new N3d(a,1,2,j,a.c);!c?(c=i):c.nj(i)}if(j!=b){if(ZD(a.Cb,291)){if(a.Db>>16==-10){c=RD(a.Cb,291).Yk(b,c)}else if(a.Db>>16==-15){!b&&(b=(JTd(),wTd));!j&&(j=(JTd(),wTd));if(a.Cb.Yh()){i=new P3d(a.Cb,1,13,j,b,fZd(o4d(RD(a.Cb,62)),a),false);!c?(c=i):c.nj(i)}}}else if(ZD(a.Cb,90)){if(a.Db>>16==-23){ZD(b,90)||(b=(JTd(),zTd));ZD(j,90)||(j=(JTd(),zTd));if(a.Cb.Yh()){i=new P3d(a.Cb,1,10,j,b,fZd(tYd(RD(a.Cb,29)),a),false);!c?(c=i):c.nj(i)}}}else if(ZD(a.Cb,456)){h=RD(a.Cb,850);g=(!h.b&&(h.b=new pae(new lae)),h.b);for(f=(d=new vkb((new mkb(g.a)).a),new xae(d));f.a.b;){e=RD(tkb(f.a).ld(),89);c=o2d(e,k2d(e,h),c)}}}return c} +function Y4b(a,b){var c,d,e,f,g,h,i,j,k,l,m;g=Heb(TD(Gxd(a,(yCc(),NAc))));m=RD(Gxd(a,EBc),21);i=false;j=false;l=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));while(l.e!=l.i.gc()&&(!i||!j)){f=RD(bMd(l),123);h=0;for(e=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!f.d&&(f.d=new Yie(G4,f,8,5)),f.d),(!f.e&&(f.e=new Yie(G4,f,7,4)),f.e)])));gs(e);){d=RD(hs(e),74);k=g&&ozd(d)&&Heb(TD(Gxd(d,OAc)));c=cZd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),f)?a==vCd(AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))):a==vCd(AGd(RD(QHd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b),0),84)));if(k||c){++h;if(h>1){break}}}h>0?(i=true):m.Hc((Pod(),Lod))&&(!f.n&&(f.n=new C5d(I4,f,1,7)),f.n).i>0&&(i=true);h>1&&(j=true)}i&&b.Fc((ovc(),hvc));j&&b.Fc((ovc(),ivc))} +function Dsd(a){var b,c,d,e,f,g,h,i,j,k,l,m;m=RD(Gxd(a,(umd(),kld)),21);if(m.dc()){return null}h=0;g=0;if(m.Hc((Qpd(),Opd))){k=RD(Gxd(a,Hld),101);d=2;c=2;e=2;f=2;b=!vCd(a)?RD(Gxd(a,Nkd),88):RD(Gxd(vCd(a),Nkd),88);for(j=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));j.e!=j.i.gc();){i=RD(bMd(j),123);l=RD(Gxd(i,Old),64);if(l==(qpd(),opd)){l=osd(i,b);Ixd(i,Old,l)}if(k==(Bod(),wod)){switch(l.g){case 1:d=$wnd.Math.max(d,i.i+i.g);break;case 2:c=$wnd.Math.max(c,i.j+i.f);break;case 3:e=$wnd.Math.max(e,i.i+i.g);break;case 4:f=$wnd.Math.max(f,i.j+i.f);}}else{switch(l.g){case 1:d+=i.g+2;break;case 2:c+=i.f+2;break;case 3:e+=i.g+2;break;case 4:f+=i.f+2;}}}h=$wnd.Math.max(d,e);g=$wnd.Math.max(c,f)}return Esd(a,h,g,true,true)} +function Rqc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=RD(zDb(PDb(CDb(new SDb(null,new Swb(b.d,16)),new Vqc(c)),new Xqc(c)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);l=lve;k=qwe;for(i=new Anb(b.b.j);i.a<i.c.c.length;){h=RD(ynb(i),12);if(h.j==c){l=$wnd.Math.min(l,h.p);k=$wnd.Math.max(k,h.p)}}if(l==lve){for(g=0;g<s.gc();g++){Umc(RD(s.Xb(g),105),c,g)}}else{t=$C(kE,Pwe,28,e.length,15,1);Qnb(t,t.length);for(r=s.Kc();r.Ob();){q=RD(r.Pb(),105);f=RD(Wjb(a.b,q),183);j=0;for(p=l;p<=k;p++){f[p]&&(j=$wnd.Math.max(j,d[p]))}if(q.i){n=q.i.c;u=new _sb;for(m=0;m<e.length;m++){e[n][m]&&Ysb(u,sgb(t[m]))}while(Zsb(u,sgb(j))){++j}}Umc(q,c,j);for(o=l;o<=k;o++){f[o]&&(d[o]=j+1)}!!q.i&&(t[q.i.c]=j)}}} +function wOc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;e=null;for(d=new Anb(b.a);d.a<d.c.c.length;){c=RD(ynb(d),10);BOc(c)?(f=(h=eJb(fJb(new gJb,c),a.f),i=eJb(fJb(new gJb,c),a.f),j=new ROc(c,true,h,i),k=c.o.b,l=(wDc(),(!c.q?(yob(),yob(),wob):c.q)._b((yCc(),iBc))?(m=RD(mQb(c,iBc),203)):(m=RD(mQb(Y2b(c),jBc),203)),m),n=10000,l==sDc&&(n=1),o=rIb(uIb(tIb(sIb(vIb(new wIb,n),eE($wnd.Math.ceil(k))),h),i)),l==tDc&&Ysb(a.d,o),xOc(a,hv(b3b(c,(qpd(),ppd))),j),xOc(a,b3b(c,Xod),j),j)):(f=(p=eJb(fJb(new gJb,c),a.f),FDb(CDb(new SDb(null,new Swb(c.j,16)),new cPc),new ePc(a,p)),new ROc(c,false,p,p)));a.i[c.p]=f;if(e){g=e.c.d.a+bFc(a.n,e.c,c)+c.d.d;e.b||(g+=e.c.o.b);rIb(uIb(tIb(vIb(sIb(new wIb,eE($wnd.Math.ceil(g))),0),e.d),f.a))}e=f}} +function h_b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;f=new t_b(b);l=c_b(a,b,f);n=$wnd.Math.max(Kfb(UD(mQb(b,(yCc(),FAc)))),1);for(k=new Anb(l.a);k.a<k.c.c.length;){j=RD(ynb(k),42);i=g_b(RD(j.a,8),RD(j.b,8),n);o=true;o=o&l_b(c,new rjd(i.c,i.d));o=o&l_b(c,Zid(new rjd(i.c,i.d),i.b,0));o=o&l_b(c,Zid(new rjd(i.c,i.d),0,i.a));o&l_b(c,Zid(new rjd(i.c,i.d),i.b,i.a))}m=f.d;h=g_b(RD(l.b.a,8),RD(l.b.b,8),n);if(m==(qpd(),ppd)||m==Xod){d.c[m.g]=$wnd.Math.min(d.c[m.g],h.d);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.d+h.a)}else{d.c[m.g]=$wnd.Math.min(d.c[m.g],h.c);d.b[m.g]=$wnd.Math.max(d.b[m.g],h.c+h.b)}e=pxe;g=f.c.i.d;switch(m.g){case 4:e=g.c;break;case 2:e=g.b;break;case 1:e=g.a;break;case 3:e=g.d;}d.a[m.g]=$wnd.Math.max(d.a[m.g],e);return f} +function W7b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;h=RD(Wjb(b.c,a),467);s=b.a.c;i=b.a.c+b.a.b;C=h.f;D=h.a;g=C<D;p=new rjd(s,C);t=new rjd(i,D);e=(s+i)/2;q=new rjd(e,C);u=new rjd(e,D);f=X7b(a,C,D);w=K3b(b.B);A=new rjd(e,f);B=K3b(b.D);c=uid(cD(WC(l3,1),Nve,8,0,[w,A,B]));n=false;r=b.B.i;if(!!r&&!!r.c&&h.d){j=g&&r.p<r.c.a.c.length-1||!g&&r.p>0;if(j){if(j){m=r.p;g?++m:--m;l=RD(Vmb(r.c.a,m),10);d=Z7b(l);n=!(Did(d,w,c[0])||yid(d,w,c[0]))}}else{n=true}}o=false;v=b.D.i;if(!!v&&!!v.c&&h.e){k=g&&v.p>0||!g&&v.p<v.c.a.c.length-1;if(k){m=v.p;g?--m:++m;l=RD(Vmb(v.c.a,m),10);d=Z7b(l);o=!(Did(d,c[0],B)||yid(d,c[0],B))}else{o=true}}n&&o&&Mub(a.a,A);n||zjd(a.a,cD(WC(l3,1),Nve,8,0,[p,q]));o||zjd(a.a,cD(WC(l3,1),Nve,8,0,[u,t]))} +function MNc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;n=b.c.length;m=0;for(l=new Anb(a.b);l.a<l.c.c.length;){k=RD(ynb(l),30);r=k.a;if(r.c.length==0){continue}q=new Anb(r);j=0;s=null;e=RD(ynb(q),10);f=null;while(e){f=RD(Vmb(b,e.p),261);if(f.c>=0){i=null;h=new Jkb(k.a,j+1);while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),10));i=RD(Vmb(b,g.p),261);if(i.d==f.d&&i.c<f.c){break}else{i=null}}if(i){if(s){$mb(d,e.p,sgb(RD(Vmb(d,e.p),17).a-1));RD(Vmb(c,s.p),15).Mc(f)}f=YNc(f,e,n++);ZEb(b.c,f);Rmb(c,new bnb);if(s){RD(Vmb(c,s.p),15).Fc(f);Rmb(d,sgb(1))}else{Rmb(d,sgb(0))}}}o=null;if(q.a<q.c.c.length){o=RD(ynb(q),10);p=RD(Vmb(b,o.p),261);RD(Vmb(c,e.p),15).Fc(p);$mb(d,o.p,sgb(RD(Vmb(d,o.p),17).a+1))}f.d=m;f.c=j++;s=e;e=o}++m}} +function I5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;f=RD(mQb(a,(Ywc(),Awc)),74);if(!f){return}d=a.a;e=new sjd(c);$id(e,M5b(a));if(n2b(a.d.i,a.c.i)){m=a.c;l=xjd(cD(WC(l3,1),Nve,8,0,[m.n,m.a]));ojd(l,c)}else{l=K3b(a.c)}Pub(d,l,d.a,d.a.a);n=K3b(a.d);mQb(a,Wwc)!=null&&$id(n,RD(mQb(a,Wwc),8));Pub(d,n,d.c.b,d.c);Cjd(d,e);g=IGd(f,true,true);Kzd(g,RD(QHd((!f.b&&(f.b=new Yie(E4,f,4,7)),f.b),0),84));Lzd(g,RD(QHd((!f.c&&(f.c=new Yie(E4,f,5,8)),f.c),0),84));lsd(d,g);for(k=new Anb(a.b);k.a<k.c.c.length;){j=RD(ynb(k),72);h=RD(mQb(j,Awc),135);Cyd(h,j.o.a);Ayd(h,j.o.b);Byd(h,j.n.a+e.a,j.n.b+e.b);Ixd(h,(Zcc(),Ycc),TD(mQb(j,Ycc)))}i=RD(mQb(a,(yCc(),RAc)),75);if(i){Cjd(i,e);Ixd(f,RAc,i)}else{Ixd(f,RAc,null)}b==(Ymd(),Wmd)?Ixd(f,yAc,Wmd):Ixd(f,yAc,null)} +function O3c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;if(c.c.length!=0){o=new bnb;for(n=new Anb(c);n.a<n.c.c.length;){m=RD(ynb(n),27);Rmb(o,new rjd(m.i,m.j))}d.dh(b,'Before removing overlaps');while(p3c(a,c)){n3c(a,c,false)}d.dh(b,'After removing overlaps');h=0;i=0;e=null;if(c.c.length!=0){e=(tFb(0,c.c.length),RD(c.c[0],27));h=e.i-(tFb(0,o.c.length),RD(o.c[0],8)).a;i=e.j-(tFb(0,o.c.length),RD(o.c[0],8)).b}g=$wnd.Math.sqrt(h*h+i*i);l=M2c(c);f=1;if(l.a.gc()!=0){for(k=l.a.ec().Kc();k.Ob();){j=RD(k.Pb(),27);p=a.f;q=p.i+p.g/2;r=p.j+p.f/2;s=j.i+j.g/2;t=j.j+j.f/2;u=s-q;v=t-r;w=$wnd.Math.sqrt(u*u+v*v);A=u/w;B=v/w;Dyd(j,j.i+A*g);Eyd(j,j.j+B*g)}d.dh(b,'Child movement '+f);++f}!!a.a&&a.a.Gg(new dnb(l));O3c(a,b,new dnb(l),d)}} +function Fid(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;i=a;k=ojd(new rjd(b.a,b.b),a);j=c;l=ojd(new rjd(d.a,d.b),c);m=i.a;q=i.b;o=j.a;s=j.b;n=k.a;r=k.b;p=l.a;t=l.b;e=p*r-n*t;Zy();bz(vEe);if($wnd.Math.abs(0-e)<=vEe||0==e||isNaN(0)&&isNaN(e)){return false}g=1/e*((m-o)*r-(q-s)*n);h=1/e*-(-(m-o)*t+(q-s)*p);f=(null,bz(vEe),($wnd.Math.abs(0-g)<=vEe||0==g||isNaN(0)&&isNaN(g)?0:0<g?-1:0>g?1:cz(isNaN(0),isNaN(g)))<0&&(null,bz(vEe),($wnd.Math.abs(g-1)<=vEe||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:cz(isNaN(g),isNaN(1)))<0)&&(null,bz(vEe),($wnd.Math.abs(0-h)<=vEe||0==h||isNaN(0)&&isNaN(h)?0:0<h?-1:0>h?1:cz(isNaN(0),isNaN(h)))<0)&&(null,bz(vEe),($wnd.Math.abs(h-1)<=vEe||h==1||isNaN(h)&&isNaN(1)?0:h<1?-1:h>1?1:cz(isNaN(h),isNaN(1)))<0));return f} +function EXd(b){var c,d,e,f;d=b.D!=null?b.D:b.B;c=qhb(d,Fhb(91));if(c!=-1){e=(AFb(0,c,d.length),d.substr(0,c));f=new Qhb;do f.a+='[';while((c=phb(d,91,++c))!=-1);if(lhb(e,hve))f.a+='Z';else if(lhb(e,dKe))f.a+='B';else if(lhb(e,eKe))f.a+='C';else if(lhb(e,fKe))f.a+='D';else if(lhb(e,gKe))f.a+='F';else if(lhb(e,hKe))f.a+='I';else if(lhb(e,iKe))f.a+='J';else if(lhb(e,jKe))f.a+='S';else{f.a+='L';f.a+=''+e;f.a+=';'}try{return null}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}else if(qhb(d,Fhb(46))==-1){if(lhb(d,hve))return xdb;else if(lhb(d,dKe))return gE;else if(lhb(d,eKe))return hE;else if(lhb(d,fKe))return iE;else if(lhb(d,gKe))return jE;else if(lhb(d,hKe))return kE;else if(lhb(d,iKe))return lE;else if(lhb(d,jKe))return wdb}return null} +function pTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;a.e=b;h=RSb(b);w=new bnb;for(d=new Anb(h);d.a<d.c.c.length;){c=RD(ynb(d),15);A=new bnb;ZEb(w.c,A);i=new _sb;for(o=c.Kc();o.Ob();){n=RD(o.Pb(),27);f=nTb(a,n,true,0,0);ZEb(A.c,f);p=n.i;q=n.j;new rjd(p,q);m=(!n.n&&(n.n=new C5d(I4,n,1,7)),n.n);for(l=new dMd(m);l.e!=l.i.gc();){j=RD(bMd(l),135);e=nTb(a,j,false,p,q);ZEb(A.c,e)}v=(!n.c&&(n.c=new C5d(K4,n,9,9)),n.c);for(s=new dMd(v);s.e!=s.i.gc();){r=RD(bMd(s),123);g=nTb(a,r,false,p,q);ZEb(A.c,g);t=r.i+p;u=r.j+q;m=(!r.n&&(r.n=new C5d(I4,r,1,7)),r.n);for(k=new dMd(m);k.e!=k.i.gc();){j=RD(bMd(k),135);e=nTb(a,j,false,t,u);ZEb(A.c,e)}}ye(i,Ux(Al(cD(WC(cJ,1),rve,20,0,[zGd(n),yGd(n)]))))}mTb(a,i,A)}a.f=new TRb(w);kQb(a.f,b);return a.f} +function Yje(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;for(l=new Dub(new wub(a));l.c!=l.d.a.d;){k=Cub(l);h=RD(k.d,58);b=RD(k.e,58);g=h.Dh();for(p=0,u=(g.i==null&&rYd(g),g.i).length;p<u;++p){j=(f=(g.i==null&&rYd(g),g.i),p>=0&&p<f.length?f[p]:null);if(j.rk()&&!j.sk()){if(ZD(j,102)){i=RD(j,19);(i.Bb&QHe)==0&&(w=Z5d(i),!(!!w&&(w.Bb&QHe)!=0))&&Xje(a,i,h,b)}else{nke();if(RD(j,69).xk()){c=(v=j,RD(!v?null:RD(b,54).gi(v),160));if(c){n=RD(h.Mh(j),160);d=c.gc();for(q=0,o=n.gc();q<o;++q){m=n.Tl(q);if(ZD(m,102)){t=n.Ul(q);e=cub(a,t);if(e==null&&t!=null){s=RD(m,19);if(!a.b||(s.Bb&QHe)!=0||!!Z5d(s)){continue}e=t}if(!c.Ol(m,e)){for(r=0;r<d;++r){if(c.Tl(r)==m&&dE(c.Ul(r))===dE(e)){c.Ti(c.gc()-1,r);--d;break}}}}else{c.Ol(n.Tl(q),n.Ul(q))}}}}}}}}} +function gIc(a,b,c){var d;c.Ug('StretchWidth layering',1);if(b.a.c.length==0){c.Vg();return}a.c=b;a.t=0;a.u=0;a.i=oxe;a.g=pxe;a.d=Kfb(UD(mQb(b,(yCc(),TBc))));aIc(a);bIc(a);$Hc(a);fIc(a);_Hc(a);a.i=$wnd.Math.max(1,a.i);a.g=$wnd.Math.max(1,a.g);a.d=a.d/a.i;a.f=a.g/a.i;a.s=dIc(a);d=new R4b(a.c);Rmb(a.c.b,d);a.r=bv(a.p);a.n=Fnb(a.k,a.k.length);while(a.r.c.length!=0){a.o=hIc(a);if(!a.o||cIc(a)&&a.b.a.gc()!=0){iIc(a,d);d=new R4b(a.c);Rmb(a.c.b,d);ye(a.a,a.b);a.b.a.$b();a.t=a.u;a.u=0}else{if(cIc(a)){a.c.b.c.length=0;d=new R4b(a.c);Rmb(a.c.b,d);a.t=0;a.u=0;a.b.a.$b();a.a.a.$b();++a.f;a.r=bv(a.p);a.n=Fnb(a.k,a.k.length)}else{g3b(a.o,d);Ymb(a.r,a.o);Ysb(a.b,a.o);a.t=a.t-a.k[a.o.p]*a.d+a.j[a.o.p];a.u+=a.e[a.o.p]*a.d}}}b.a.c.length=0;Eob(b.b);c.Vg()} +function sOc(a){var b,c,d,e,f,g,h,i,j,k,l;a.j=$C(kE,Pwe,28,a.g,15,1);a.o=new bnb;FDb(EDb(new SDb(null,new Swb(a.e.b,16)),new APc),new CPc(a));a.a=$C(xdb,Hye,28,a.b,16,1);MDb(new SDb(null,new Swb(a.e.b,16)),new RPc(a));d=(l=new bnb,FDb(CDb(EDb(new SDb(null,new Swb(a.e.b,16)),new HPc),new JPc(a)),new LPc(a,l)),l);for(i=new Anb(d);i.a<i.c.c.length;){h=RD(ynb(i),515);if(h.c.length<=1){continue}if(h.c.length==2){UOc(h);BOc((tFb(0,h.c.length),RD(h.c[0],18)).d.i)||Rmb(a.o,h);continue}if(TOc(h)||SOc(h,new FPc)){continue}j=new Anb(h);e=null;while(j.a<j.c.c.length){b=RD(ynb(j),18);c=a.c[b.p];!e||j.a>=j.c.c.length?(k=hOc((r3b(),p3b),o3b)):(k=hOc((r3b(),o3b),o3b));k*=2;f=c.a.g;c.a.g=$wnd.Math.max(f,f+(k-f));g=c.b.g;c.b.g=$wnd.Math.max(g,g+(k-g));e=b}}} +function qkc(a){var b,c,d,e;FDb(CDb(new SDb(null,new Swb(a.a.b,16)),new Qkc),new Skc);okc(a);FDb(CDb(new SDb(null,new Swb(a.a.b,16)),new Ukc),new Wkc);if(a.c==(Ymd(),Wmd)){FDb(CDb(EDb(new SDb(null,new Swb(new Xkb(a.f),1)),new clc),new elc),new glc(a));FDb(CDb(GDb(EDb(EDb(new SDb(null,new Swb(a.d.b,16)),new klc),new mlc),new olc),new qlc),new slc(a))}e=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(d=new Anb(a.a.b);d.a<d.c.c.length;){c=RD(ynb(d),60);e.a=$wnd.Math.min(e.a,c.d.c);e.b=$wnd.Math.min(e.b,c.d.d);b.a=$wnd.Math.max(b.a,c.d.c+c.d.b);b.b=$wnd.Math.max(b.b,c.d.d+c.d.a)}$id(hjd(a.d.c),fjd(new rjd(e.a,e.b)));$id(hjd(a.d.f),ojd(new rjd(b.a,b.b),e));pkc(a,e,b);akb(a.f);akb(a.b);akb(a.g);akb(a.e);a.a.a.c.length=0;a.a.b.c.length=0;a.a=null;a.d=null} +function JGb(a,b){var c;if(a.e){throw Adb(new dgb((lfb(lN),lye+lN.k+mye)))}if(!cGb(a.a,b)){throw Adb(new yz(nye+b+oye))}if(b==a.d){return a}c=a.d;a.d=b;switch(c.g){case 0:switch(b.g){case 2:GGb(a);break;case 1:OGb(a);GGb(a);break;case 4:UGb(a);GGb(a);break;case 3:UGb(a);OGb(a);GGb(a);}break;case 2:switch(b.g){case 1:OGb(a);PGb(a);break;case 4:UGb(a);GGb(a);break;case 3:UGb(a);OGb(a);GGb(a);}break;case 1:switch(b.g){case 2:OGb(a);PGb(a);break;case 4:OGb(a);UGb(a);GGb(a);break;case 3:OGb(a);UGb(a);OGb(a);GGb(a);}break;case 4:switch(b.g){case 2:UGb(a);GGb(a);break;case 1:UGb(a);OGb(a);GGb(a);break;case 3:OGb(a);PGb(a);}break;case 3:switch(b.g){case 2:OGb(a);UGb(a);GGb(a);break;case 1:OGb(a);UGb(a);OGb(a);GGb(a);break;case 4:OGb(a);PGb(a);}}return a} +function vYb(a,b){var c;if(a.d){throw Adb(new dgb((lfb(eQ),lye+eQ.k+mye)))}if(!eYb(a.a,b)){throw Adb(new yz(nye+b+oye))}if(b==a.c){return a}c=a.c;a.c=b;switch(c.g){case 0:switch(b.g){case 2:sYb(a);break;case 1:zYb(a);sYb(a);break;case 4:DYb(a);sYb(a);break;case 3:DYb(a);zYb(a);sYb(a);}break;case 2:switch(b.g){case 1:zYb(a);AYb(a);break;case 4:DYb(a);sYb(a);break;case 3:DYb(a);zYb(a);sYb(a);}break;case 1:switch(b.g){case 2:zYb(a);AYb(a);break;case 4:zYb(a);DYb(a);sYb(a);break;case 3:zYb(a);DYb(a);zYb(a);sYb(a);}break;case 4:switch(b.g){case 2:DYb(a);sYb(a);break;case 1:DYb(a);zYb(a);sYb(a);break;case 3:zYb(a);AYb(a);}break;case 3:switch(b.g){case 2:zYb(a);DYb(a);sYb(a);break;case 1:zYb(a);DYb(a);zYb(a);sYb(a);break;case 4:zYb(a);AYb(a);}}return a} +function Csd(a,b){var c,d,e,f,g,h,i,j;if(ZD(a.Eh(),167)){Csd(RD(a.Eh(),167),b);b.a+=' > '}else{b.a+='Root '}c=a.Dh().zb;lhb(c.substr(0,3),'Elk')?Zhb(b,(BFb(3,c.length+1),c.substr(3))):(b.a+=''+c,b);e=a.jh();if(e){Zhb((b.a+=' ',b),e);return}if(ZD(a,366)){j=RD(a,135).a;if(j){Zhb((b.a+=' ',b),j);return}}for(g=new dMd(a.kh());g.e!=g.i.gc();){f=RD(bMd(g),135);j=f.a;if(j){Zhb((b.a+=' ',b),j);return}}if(ZD(a,326)){d=RD(a,74);!d.b&&(d.b=new Yie(E4,d,4,7));if(d.b.i!=0&&(!d.c&&(d.c=new Yie(E4,d,5,8)),d.c.i!=0)){b.a+=' (';h=new mMd((!d.b&&(d.b=new Yie(E4,d,4,7)),d.b));while(h.e!=h.i.gc()){h.e>0&&(b.a+=pve,b);Csd(RD(bMd(h),167),b)}b.a+=SAe;i=new mMd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c));while(i.e!=i.i.gc()){i.e>0&&(b.a+=pve,b);Csd(RD(bMd(i),167),b)}b.a+=')'}}} +function LTb(a,b,c){var d,e,f,g,h,i,j,k;for(i=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));i.e!=i.i.gc();){h=RD(bMd(i),27);for(e=new is(Mr(zGd(h).a.Kc(),new ir));gs(e);){d=RD(hs(e),74);!d.b&&(d.b=new Yie(E4,d,4,7));if(!(d.b.i<=1&&(!d.c&&(d.c=new Yie(E4,d,5,8)),d.c.i<=1))){throw Adb(new Ked('Graph must not contain hyperedges.'))}if(!nzd(d)&&h!=AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))){j=new cUb;kQb(j,d);pQb(j,(JVb(),HVb),d);_Tb(j,RD(Wd(qtb(c.f,h)),153));aUb(j,RD(Wjb(c,AGd(RD(QHd((!d.c&&(d.c=new Yie(E4,d,5,8)),d.c),0),84))),153));Rmb(b.c,j);for(g=new dMd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n));g.e!=g.i.gc();){f=RD(bMd(g),135);k=new iUb(j,f.a);kQb(k,f);pQb(k,HVb,f);k.e.a=$wnd.Math.max(f.g,1);k.e.b=$wnd.Math.max(f.f,1);hUb(k);Rmb(b.d,k)}}}}} +function Vec(a,b,c){var d,e,f,g,h,i,j,k,l,m;c.Ug('Node promotion heuristic',1);a.i=b;a.r=RD(mQb(b,(yCc(),ZAc)),243);a.r!=(aEc(),TDc)&&a.r!=UDc?Tec(a):Uec(a);k=RD(mQb(a.i,YAc),17).a;f=new nfc;switch(a.r.g){case 2:case 1:Yec(a,f);break;case 3:a.r=_Dc;Yec(a,f);i=0;for(h=new Anb(a.b);h.a<h.c.c.length;){g=RD(ynb(h),17);i=$wnd.Math.max(i,g.a)}if(i>a.k){a.r=VDc;Yec(a,f)}break;case 4:a.r=_Dc;Yec(a,f);j=0;for(e=new Anb(a.c);e.a<e.c.c.length;){d=UD(ynb(e));j=$wnd.Math.max(j,(uFb(d),d))}if(j>a.n){a.r=YDc;Yec(a,f)}break;case 6:m=eE($wnd.Math.ceil(a.g.length*k/100));Yec(a,new qfc(m));break;case 5:l=eE($wnd.Math.ceil(a.e*k/100));Yec(a,new tfc(l));break;case 8:Sec(a,true);break;case 9:Sec(a,false);break;default:Yec(a,f);}a.r!=TDc&&a.r!=UDc?Zec(a,b):$ec(a,b);c.Vg()} +function $rc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=a.b;k=new Jkb(l,0);Ikb(k,new R4b(a));s=false;g=1;while(k.b<k.d.gc()){j=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),30));p=(tFb(g,l.c.length),RD(l.c[g],30));q=bv(j.a);r=q.c.length;for(o=new Anb(q);o.a<o.c.c.length;){m=RD(ynb(o),10);g3b(m,p)}if(s){for(n=hv(q).Kc();n.Ob();){m=RD(n.Pb(),10);for(f=new Anb(bv(Z2b(m)));f.a<f.c.c.length;){e=RD(ynb(f),18);X0b(e,true);pQb(a,(Ywc(),awc),(Geb(),true));d=osc(a,e,r);c=RD(mQb(m,Wvc),313);t=RD(Vmb(d,d.c.length-1),18);c.k=t.c.i;c.n=t;c.b=e.d.i;c.c=e}}s=false}else{if(q.c.length!=0){b=(tFb(0,q.c.length),RD(q.c[0],10));if(b.k==(r3b(),l3b)){s=true;g=-1}}}++g}h=new Jkb(a.b,0);while(h.b<h.d.gc()){i=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30));i.a.c.length==0&&Ckb(h)}} +function FJb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;l=new CLb(a);_Mb(l,!(b==(Cmd(),Bmd)||b==xmd));k=l.a;m=new z3b;for(e=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),g=0,i=e.length;g<i;++g){c=e[g];j=oKb(k,WJb,c);!!j&&(m.d=$wnd.Math.max(m.d,j.jf()))}for(d=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),f=0,h=d.length;f<h;++f){c=d[f];j=oKb(k,YJb,c);!!j&&(m.a=$wnd.Math.max(m.a,j.jf()))}for(p=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),r=0,t=p.length;r<t;++r){n=p[r];j=oKb(k,n,WJb);!!j&&(m.b=$wnd.Math.max(m.b,j.kf()))}for(o=cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb]),q=0,s=o.length;q<s;++q){n=o[q];j=oKb(k,n,YJb);!!j&&(m.c=$wnd.Math.max(m.c,j.kf()))}if(m.d>0){m.d+=k.n.d;m.d+=k.d}if(m.a>0){m.a+=k.n.a;m.a+=k.d}if(m.b>0){m.b+=k.n.b;m.b+=k.d}if(m.c>0){m.c+=k.n.c;m.c+=k.d}return m} +function u9b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o;m=c.d;l=c.c;f=new rjd(c.f.a+c.d.b+c.d.c,c.f.b+c.d.d+c.d.a);g=f.b;for(j=new Anb(a.a);j.a<j.c.c.length;){h=RD(ynb(j),10);if(h.k!=(r3b(),m3b)){continue}d=RD(mQb(h,(Ywc(),hwc)),64);e=RD(mQb(h,iwc),8);k=h.n;switch(d.g){case 2:k.a=c.f.a+m.c-l.a;break;case 4:k.a=-l.a-m.b;}o=0;switch(d.g){case 2:case 4:if(b==(Bod(),xod)){n=Kfb(UD(mQb(h,Jwc)));k.b=f.b*n-RD(mQb(h,(yCc(),zBc)),8).b;o=k.b+e.b;U2b(h,false,true)}else if(b==wod){k.b=Kfb(UD(mQb(h,Jwc)))-RD(mQb(h,(yCc(),zBc)),8).b;o=k.b+e.b;U2b(h,false,true)}}g=$wnd.Math.max(g,o)}c.f.b+=g-f.b;for(i=new Anb(a.a);i.a<i.c.c.length;){h=RD(ynb(i),10);if(h.k!=(r3b(),m3b)){continue}d=RD(mQb(h,(Ywc(),hwc)),64);k=h.n;switch(d.g){case 1:k.b=-l.b-m.d;break;case 3:k.b=c.f.b+m.a-l.b;}}} +function nNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;k=RD(RD(Qc(a.r,b),21),87);if(k.gc()<=2||b==(qpd(),Xod)||b==(qpd(),ppd)){rNb(a,b);return}p=a.u.Hc((Pod(),Ood));c=b==(qpd(),Yod)?(mOb(),lOb):(mOb(),iOb);r=b==Yod?(vLb(),sLb):(vLb(),uLb);d=WNb(_Nb(c),a.s);q=b==Yod?oxe:pxe;for(j=k.Kc();j.Ob();){h=RD(j.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}o=h.b.Mf();n=h.e;l=h.c;m=l.i;m.b=(f=l.n,l.e.a+f.b+f.c);m.a=(g=l.n,l.e.b+g.d+g.a);if(p){m.c=n.a-(e=l.n,l.e.a+e.b+e.c)-a.s;p=false}else{m.c=n.a+o.a+a.s}Ivb(r,Pye);l.f=r;RKb(l,(EKb(),DKb));Rmb(d.d,new sOb(m,UNb(d,m)));q=b==Yod?$wnd.Math.min(q,n.b):$wnd.Math.max(q,n.b+h.b.Mf().b)}q+=b==Yod?-a.t:a.t;VNb((d.e=q,d));for(i=k.Kc();i.Ob();){h=RD(i.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}m=h.c.i;m.c-=h.e.a;m.d-=h.e.b}} +function D0b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;e=new bnb;for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);n=o.e;if(n){d=D0b(a,n,o);Tmb(e,d);A0b(a,n,o);if(RD(mQb(n,(Ywc(),kwc)),21).Hc((ovc(),hvc))){s=RD(mQb(o,(yCc(),BBc)),101);m=RD(mQb(o,EBc),181).Hc((Pod(),Lod));for(r=new Anb(o.j);r.a<r.c.c.length;){q=RD(ynb(r),12);f=RD(Wjb(a.b,q),10);if(!f){f=f2b(q,s,q.j,-(q.e.c.length-q.g.c.length),null,new pjd,q.o,RD(mQb(n,rAc),88),n);pQb(f,Awc,q);Zjb(a.b,q,f);Rmb(n.a,f)}g=RD(Vmb(f.j,0),12);for(k=new Anb(q.f);k.a<k.c.c.length;){j=RD(ynb(k),72);h=new x2b;h.o.a=j.o.a;h.o.b=j.o.b;Rmb(g.f,h);if(!m){t=q.j;l=0;Rod(RD(mQb(o,EBc),21))&&(l=qsd(j.n,j.o,q.o,0,t));s==(Bod(),zod)||(qpd(),apd).Hc(t)?(h.o.a=l):(h.o.b=l)}}}}}}i=new bnb;z0b(a,b,c,e,i);!!c&&B0b(a,b,c,i);return i} +function NIc(a,b,c){var d,e,f,g,h,i,j,k,l;if(a.c[b.c.p][b.p].e){return}else{a.c[b.c.p][b.p].e=true}a.c[b.c.p][b.p].b=0;a.c[b.c.p][b.p].d=0;a.c[b.c.p][b.p].a=null;for(k=new Anb(b.j);k.a<k.c.c.length;){j=RD(ynb(k),12);l=c?new T3b(j):new _3b(j);for(i=l.Kc();i.Ob();){h=RD(i.Pb(),12);g=h.i;if(g.c==b.c){if(g!=b){NIc(a,g,c);a.c[b.c.p][b.p].b+=a.c[g.c.p][g.p].b;a.c[b.c.p][b.p].d+=a.c[g.c.p][g.p].d}}else{a.c[b.c.p][b.p].d+=a.g[h.p];++a.c[b.c.p][b.p].b}}}f=RD(mQb(b,(Ywc(),Uvc)),15);if(f){for(e=f.Kc();e.Ob();){d=RD(e.Pb(),10);if(b.c==d.c){NIc(a,d,c);a.c[b.c.p][b.p].b+=a.c[d.c.p][d.p].b;a.c[b.c.p][b.p].d+=a.c[d.c.p][d.p].d}}}if(a.c[b.c.p][b.p].b>0){a.c[b.c.p][b.p].d+=Kwb(a.i,24)*Nxe*0.07000000029802322-0.03500000014901161;a.c[b.c.p][b.p].a=a.c[b.c.p][b.p].d/a.c[b.c.p][b.p].b}} +function D8b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;for(o=new Anb(a);o.a<o.c.c.length;){n=RD(ynb(o),10);E8b(n.n);E8b(n.o);F8b(n.f);I8b(n);K8b(n);for(q=new Anb(n.j);q.a<q.c.c.length;){p=RD(ynb(q),12);E8b(p.n);E8b(p.a);E8b(p.o);Q3b(p,J8b(p.j));f=RD(mQb(p,(yCc(),CBc)),17);!!f&&pQb(p,CBc,sgb(-f.a));for(e=new Anb(p.g);e.a<e.c.c.length;){d=RD(ynb(e),18);for(c=Sub(d.a,0);c.b!=c.d.c;){b=RD(evb(c),8);E8b(b)}i=RD(mQb(d,RAc),75);if(i){for(h=Sub(i,0);h.b!=h.d.c;){g=RD(evb(h),8);E8b(g)}}for(l=new Anb(d.b);l.a<l.c.c.length;){j=RD(ynb(l),72);E8b(j.n);E8b(j.o)}}for(m=new Anb(p.f);m.a<m.c.c.length;){j=RD(ynb(m),72);E8b(j.n);E8b(j.o)}}if(n.k==(r3b(),m3b)){pQb(n,(Ywc(),hwc),J8b(RD(mQb(n,hwc),64)));H8b(n)}for(k=new Anb(n.b);k.a<k.c.c.length;){j=RD(ynb(k),72);I8b(j);E8b(j.o);E8b(j.n)}}} +function iEd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;D=Wjb(a.e,d);if(D==null){D=new uC;n=RD(D,190);s=b+'_s';t=s+e;m=new OC(t);sC(n,uIe,m)}C=RD(D,190);oDd(c,C);G=new uC;qDd(G,'x',d.j);qDd(G,'y',d.k);sC(C,xIe,G);A=new uC;qDd(A,'x',d.b);qDd(A,'y',d.c);sC(C,'endPoint',A);l=cve((!d.a&&(d.a=new XZd(D4,d,5)),d.a));o=!l;if(o){w=new MB;f=new qFd(w);xgb((!d.a&&(d.a=new XZd(D4,d,5)),d.a),f);sC(C,nIe,w)}i=Dzd(d);u=!!i;u&&rDd(a.a,C,pIe,KDd(a,Dzd(d)));r=Ezd(d);v=!!r;v&&rDd(a.a,C,oIe,KDd(a,Ezd(d)));j=(!d.e&&(d.e=new Yie(F4,d,10,9)),d.e).i==0;p=!j;if(p){B=new MB;g=new sFd(a,B);xgb((!d.e&&(d.e=new Yie(F4,d,10,9)),d.e),g);sC(C,rIe,B)}k=(!d.g&&(d.g=new Yie(F4,d,9,10)),d.g).i==0;q=!k;if(q){F=new MB;h=new uFd(a,F);xgb((!d.g&&(d.g=new Yie(F4,d,9,10)),d.g),h);sC(C,qIe,F)}} +function XMb(a){RMb();var b,c,d,e,f,g,h;d=a.f.n;for(g=ki(a.r).a.nc();g.Ob();){f=RD(g.Pb(),117);e=0;if(f.b.pf((umd(),Gld))){e=Kfb(UD(f.b.of(Gld)));if(e<0){switch(f.b.ag().g){case 1:d.d=$wnd.Math.max(d.d,-e);break;case 3:d.a=$wnd.Math.max(d.a,-e);break;case 2:d.c=$wnd.Math.max(d.c,-e);break;case 4:d.b=$wnd.Math.max(d.b,-e);}}}if(Rod(a.u)){b=rsd(f.b,e);h=!RD(a.e.of(pld),181).Hc((dqd(),Wpd));c=false;switch(f.b.ag().g){case 1:c=b>d.d;d.d=$wnd.Math.max(d.d,b);if(h&&c){d.d=$wnd.Math.max(d.d,d.a);d.a=d.d+e}break;case 3:c=b>d.a;d.a=$wnd.Math.max(d.a,b);if(h&&c){d.a=$wnd.Math.max(d.a,d.d);d.d=d.a+e}break;case 2:c=b>d.c;d.c=$wnd.Math.max(d.c,b);if(h&&c){d.c=$wnd.Math.max(d.b,d.c);d.b=d.c+e}break;case 4:c=b>d.b;d.b=$wnd.Math.max(d.b,b);if(h&&c){d.b=$wnd.Math.max(d.b,d.c);d.c=d.b+e}}}}} +function pA(a,b){var c,d,e,f,g,h,i,j,k;j='';if(b.length==0){return a.ne(ywe,wwe,-1,-1)}k=Dhb(b);lhb(k.substr(0,3),'at ')&&(k=(BFb(3,k.length+1),k.substr(3)));k=k.replace(/\[.*?\]/g,'');g=k.indexOf('(');if(g==-1){g=k.indexOf('@');if(g==-1){j=k;k=''}else{j=Dhb((BFb(g+1,k.length+1),k.substr(g+1)));k=Dhb((AFb(0,g,k.length),k.substr(0,g)))}}else{c=k.indexOf(')',g);j=(AFb(g+1,c,k.length),k.substr(g+1,c-(g+1)));k=Dhb((AFb(0,g,k.length),k.substr(0,g)))}g=qhb(k,Fhb(46));g!=-1&&(k=(BFb(g+1,k.length+1),k.substr(g+1)));(k.length==0||lhb(k,'Anonymous function'))&&(k=wwe);h=thb(j,Fhb(58));e=uhb(j,Fhb(58),h-1);i=-1;d=-1;f=ywe;if(h!=-1&&e!=-1){f=(AFb(0,e,j.length),j.substr(0,e));i=jA((AFb(e+1,h,j.length),j.substr(e+1,h-(e+1))));d=jA((BFb(h+1,j.length+1),j.substr(h+1)))}return a.ne(f,k,i,d)} +function C6b(a){var b,c,d,e,f,g,h,i,j,k,l;for(j=new Anb(a);j.a<j.c.c.length;){i=RD(ynb(j),10);g=RD(mQb(i,(yCc(),UAc)),171);f=null;switch(g.g){case 1:case 2:f=(huc(),guc);break;case 3:case 4:f=(huc(),euc);}if(f){pQb(i,(Ywc(),bwc),(huc(),guc));f==euc?F6b(i,g,(BEc(),yEc)):f==guc&&F6b(i,g,(BEc(),zEc))}else{if(Dod(RD(mQb(i,BBc),101))&&i.j.c.length!=0){b=true;for(l=new Anb(i.j);l.a<l.c.c.length;){k=RD(ynb(l),12);if(!(k.j==(qpd(),Xod)&&k.e.c.length-k.g.c.length>0||k.j==ppd&&k.e.c.length-k.g.c.length<0)){b=false;break}for(e=new Anb(k.g);e.a<e.c.c.length;){c=RD(ynb(e),18);h=RD(mQb(c.d.i,UAc),171);if(h==(cxc(),_wc)||h==axc){b=false;break}}for(d=new Anb(k.e);d.a<d.c.c.length;){c=RD(ynb(d),18);h=RD(mQb(c.c.i,UAc),171);if(h==(cxc(),Zwc)||h==$wc){b=false;break}}}b&&F6b(i,g,(BEc(),AEc))}}}} +function LNc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;w=0;n=0;for(l=new Anb(b.e);l.a<l.c.c.length;){k=RD(ynb(l),10);m=0;h=0;i=c?RD(mQb(k,HNc),17).a:qwe;r=d?RD(mQb(k,INc),17).a:qwe;j=$wnd.Math.max(i,r);for(t=new Anb(k.j);t.a<t.c.c.length;){s=RD(ynb(t),12);u=k.n.b+s.n.b+s.a.b;if(d){for(g=new Anb(s.g);g.a<g.c.c.length;){f=RD(ynb(g),18);p=f.d;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(RD(mQb(o,HNc),17).a,RD(mQb(o,INc),17).a);v=RD(mQb(f,(yCc(),MBc)),17).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}if(c){for(g=new Anb(s.e);g.a<g.c.c.length;){f=RD(ynb(g),18);p=f.c;o=p.i;if(b!=a.a[o.p]){q=$wnd.Math.max(RD(mQb(o,HNc),17).a,RD(mQb(o,INc),17).a);v=RD(mQb(f,(yCc(),MBc)),17).a;if(v>=j&&v>=q){m+=o.n.b+p.n.b+p.a.b-u;++h}}}}}if(h>0){w+=m/h;++n}}if(n>0){b.a=e*w/n;b.g=n}else{b.a=0;b.g=0}} +function hTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;f=a.f.b;m=f.a;k=f.b;o=a.e.g;n=a.e.f;zyd(a.e,f.a,f.b);w=m/o;A=k/n;for(j=new dMd(iyd(a.e));j.e!=j.i.gc();){i=RD(bMd(j),135);Dyd(i,i.i*w);Eyd(i,i.j*A)}for(s=new dMd(wCd(a.e));s.e!=s.i.gc();){r=RD(bMd(s),123);u=r.i;v=r.j;u>0&&Dyd(r,u*w);v>0&&Eyd(r,v*A)}Bvb(a.b,new tTb);b=new bnb;for(h=new vkb((new mkb(a.c)).a);h.b;){g=tkb(h);d=RD(g.ld(),74);c=RD(g.md(),407).a;e=IGd(d,false,false);l=fTb(JGd(d),ssd(e),c);lsd(l,e);t=KGd(d);if(!!t&&Wmb(b,t,0)==-1){ZEb(b.c,t);gTb(t,(sFb(l.b!=0),RD(l.a.a.c,8)),c)}}for(q=new vkb((new mkb(a.d)).a);q.b;){p=tkb(q);d=RD(p.ld(),74);c=RD(p.md(),407).a;e=IGd(d,false,false);l=fTb(LGd(d),Ijd(ssd(e)),c);l=Ijd(l);lsd(l,e);t=MGd(d);if(!!t&&Wmb(b,t,0)==-1){ZEb(b.c,t);gTb(t,(sFb(l.b!=0),RD(l.c.b.c,8)),c)}}} +function GJb(a,b,c,d){var e,f,g,h,i;h=new CLb(b);iNb(h,d);e=true;if(!!a&&a.pf((umd(),Nkd))){f=RD(a.of((umd(),Nkd)),88);e=f==(Cmd(),Amd)||f==ymd||f==zmd}$Mb(h,false);Umb(h.e.Rf(),new dNb(h,false,e));EMb(h,h.f,(ZJb(),WJb),(qpd(),Yod));EMb(h,h.f,YJb,npd);EMb(h,h.g,WJb,ppd);EMb(h,h.g,YJb,Xod);GMb(h,Yod);GMb(h,npd);FMb(h,Xod);FMb(h,ppd);RMb();g=h.A.Hc((Qpd(),Mpd))&&h.B.Hc((dqd(),$pd))?SMb(h):null;!!g&&uKb(h.a,g);XMb(h);xMb(h);GNb(h);sMb(h);gNb(h);yNb(h);oNb(h,Yod);oNb(h,npd);tMb(h);fNb(h);if(!c){return h.o}VMb(h);CNb(h);oNb(h,Xod);oNb(h,ppd);i=h.B.Hc((dqd(),_pd));IMb(h,i,Yod);IMb(h,i,npd);JMb(h,i,Xod);JMb(h,i,ppd);FDb(new SDb(null,new Swb(new glb(h.i),0)),new KMb);FDb(CDb(new SDb(null,ki(h.r).a.oc()),new MMb),new OMb);WMb(h);h.e.Pf(h.o);FDb(new SDb(null,ki(h.r).a.oc()),new YMb);return h.o} +function LYb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=oxe;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),86);j=$wnd.Math.min(j,b.d.f.g.c+b.e.a)}n=new Yub;for(g=new Anb(a.a.a);g.a<g.c.c.length;){f=RD(ynb(g),194);f.i=j;f.e==0&&(Pub(n,f,n.c.b,n.c),true)}while(n.b!=0){f=RD(n.b==0?null:(sFb(n.b!=0),Wub(n,n.a.a)),194);e=f.f.g.c;for(m=f.a.a.ec().Kc();m.Ob();){k=RD(m.Pb(),86);p=f.i+k.e.a;k.d.g||k.g.c<p?(k.o=p):(k.o=k.g.c)}e-=f.f.o;f.b+=e;a.c==(Cmd(),zmd)||a.c==xmd?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=RD(l.Pb(),86);for(i=k.f.Kc();i.Ob();){h=RD(i.Pb(),86);Dmd(a.c)?(o=a.f.yf(k,h)):(o=a.f.zf(k,h));h.d.i=$wnd.Math.max(h.d.i,k.o+k.g.b+o-h.e.a);h.k||(h.d.i=$wnd.Math.max(h.d.i,h.g.c-h.e.a));--h.d.e;h.d.e==0&&Mub(n,h.d)}}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),86);b.g.c=b.o}} +function vOb(a){var b,c,d,e,f,g,h,i;h=a.b;b=a.a;switch(RD(mQb(a,(YHb(),UHb)),435).g){case 0:_mb(h,new Frb(new UOb));break;case 1:default:_mb(h,new Frb(new ZOb));}switch(RD(mQb(a,SHb),436).g){case 1:_mb(h,new POb);_mb(h,new cPb);_mb(h,new xOb);break;case 0:default:_mb(h,new POb);_mb(h,new IOb);}switch(RD(mQb(a,WHb),257).g){case 0:i=new wPb;break;case 1:i=new qPb;break;case 2:i=new tPb;break;case 3:i=new nPb;break;case 5:i=new APb(new tPb);break;case 4:i=new APb(new qPb);break;case 7:i=new kPb(new APb(new qPb),new APb(new tPb));break;case 8:i=new kPb(new APb(new nPb),new APb(new tPb));break;case 6:default:i=new APb(new nPb);}for(g=new Anb(h);g.a<g.c.c.length;){f=RD(ynb(g),176);d=0;e=0;c=new Ptd(sgb(d),sgb(e));while(ZPb(b,f,d,e)){c=RD(i.Ve(c,f),42);d=RD(c.a,17).a;e=RD(c.b,17).a}WPb(b,f,d,e)}} +function T_c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;c.Ug(_Ee,1);m=(q$c(),XZc);a.a==(s_c(),p_c)&&(m=VZc);k=0;yob();b.jd(new uGd(m));f=b.gc();h=b.fd(b.gc());j=true;while(j&&h.Sb()){s=RD(h.Ub(),39);RD(mQb(s,m),17).a==0?--f:(j=false)}w=b.kd(0,f);g=new Zub(w);w=b.kd(f,b.gc());i=new Zub(w);if(g.b==0){for(p=Sub(i,0);p.b!=p.d.c;){o=RD(evb(p),39);pQb(o,i$c,sgb(k++))}}else{l=g.b;for(v=Sub(g,0);v.b!=v.d.c;){u=RD(evb(v),39);pQb(u,i$c,sgb(k++));d=$Wc(u);T_c(a,d,c.eh(1/l|0));tvb(d,Fob(new uGd(i$c)));n=new Yub;for(t=Sub(d,0);t.b!=t.d.c;){s=RD(evb(t),39);for(r=Sub(u.d,0);r.b!=r.d.c;){q=RD(evb(r),65);q.c==s&&(Pub(n,q,n.c.b,n.c),true)}}Xub(u.d);ye(u.d,n);h=Sub(i,i.b);e=u.d.b;j=true;while(0<e&&j&&h.Sb()){s=RD(h.Ub(),39);if(RD(mQb(s,m),17).a==0){pQb(s,i$c,sgb(k++));--e;h.Qb()}else{j=false}}}}c.Vg()} +function S3c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;l=Kfb(UD(Gxd(a,($4c(),W4c))));if(Heb(TD(Gxd(a,U4c)))){k=RD(Gxd(a,(u2c(),t2c)),27);f=RD(QHd(mzd(RD(QHd((!k.e&&(k.e=new Yie(G4,k,7,4)),k.e),(!k.e&&(k.e=new Yie(G4,k,7,4)),k.e).i-1),74)),0),27);d=RD(QHd(mzd(RD(QHd((!k.e&&(k.e=new Yie(G4,k,7,4)),k.e),0),74)),0),27);g=new rjd(f.i+f.g/2,f.j+f.f/2);e=new rjd(d.i+d.g/2,d.j+d.f/2);c=l;c<=0&&(c+=dFe);m=$wnd.Math.acos((g.a*e.a+g.b*e.b)/($wnd.Math.sqrt(g.a*g.a+g.b*g.b)*$wnd.Math.sqrt(e.a*e.a+e.b*e.b)));m<=0&&(m+=dFe);b=$wnd.Math.atan2(g.b,g.a);b<=0&&(b+=dFe);l=FEe-(b-c+m/2)}for(i=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));i.e!=i.i.gc();){h=RD(bMd(i),27);j=new rjd(h.i+h.g/2,h.j+h.f/2);n=j.a*$wnd.Math.cos(l)-j.b*$wnd.Math.sin(l);j.b=j.a*$wnd.Math.sin(l)+j.b*$wnd.Math.cos(l);j.a=n;Byd(h,j.a-h.g/2,j.b-h.f/2)}} +function qcc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;b.Ug('Inverted port preprocessing',1);k=a.b;j=new Jkb(k,0);c=null;t=new bnb;while(j.b<j.d.gc()){s=c;c=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),30));for(n=new Anb(t);n.a<n.c.c.length;){l=RD(ynb(n),10);g3b(l,s)}t.c.length=0;for(o=new Anb(c.a);o.a<o.c.c.length;){l=RD(ynb(o),10);if(l.k!=(r3b(),p3b)){continue}if(!Dod(RD(mQb(l,(yCc(),BBc)),101))){continue}for(r=d3b(l,(BEc(),yEc),(qpd(),Xod)).Kc();r.Ob();){p=RD(r.Pb(),12);i=p.e;h=RD(anb(i,$C(WQ,VAe,18,i.c.length,0,1)),482);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];occ(a,p,d,t)}}for(q=d3b(l,zEc,ppd).Kc();q.Ob();){p=RD(q.Pb(),12);i=p.g;h=RD(anb(i,$C(WQ,VAe,18,i.c.length,0,1)),482);for(e=h,f=0,g=e.length;f<g;++f){d=e[f];pcc(a,p,d,t)}}}}for(m=new Anb(t);m.a<m.c.c.length;){l=RD(ynb(m),10);g3b(l,c)}b.Vg()} +function NUc(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t;m=null;d==(dVc(),bVc)?(m=b):d==cVc&&(m=c);for(p=m.a.ec().Kc();p.Ob();){o=RD(p.Pb(),12);q=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).b;t=new _sb;h=new _sb;for(j=new l4b(o.b);xnb(j.a)||xnb(j.b);){i=RD(xnb(j.a)?ynb(j.a):ynb(j.b),18);if(Heb(TD(mQb(i,(Ywc(),Nwc))))!=e){continue}if(Wmb(f,i,0)!=-1){i.d==o?(r=i.c):(r=i.d);s=xjd(cD(WC(l3,1),Nve,8,0,[r.i.n,r.n,r.a])).b;if($wnd.Math.abs(s-q)<0.2){continue}s<q?b.a._b(r)?Ysb(t,new Ptd(bVc,i)):Ysb(t,new Ptd(cVc,i)):b.a._b(r)?Ysb(h,new Ptd(bVc,i)):Ysb(h,new Ptd(cVc,i))}}if(t.a.gc()>1){n=new xVc(o,t,d);xgb(t,new nVc(a,n));ZEb(g.c,n);for(l=t.a.ec().Kc();l.Ob();){k=RD(l.Pb(),42);Ymb(f,k.b)}}if(h.a.gc()>1){n=new xVc(o,h,d);xgb(h,new pVc(a,n));ZEb(g.c,n);for(l=h.a.ec().Kc();l.Ob();){k=RD(l.Pb(),42);Ymb(f,k.b)}}}} +function p6b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;p=a.n;q=a.o;m=a.d;l=Kfb(UD(hFc(a,(yCc(),QBc))));if(b){k=l*(b.gc()-1);n=0;for(i=b.Kc();i.Ob();){g=RD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b-m.d+n;d=q.a/(b.gc()+1);e=d;for(h=b.Kc();h.Ob();){g=RD(h.Pb(),10);g.n.a=r;g.n.b=f-g.o.b;r+=g.o.a+l;j=n6b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=g.o.b;o=RD(mQb(g,(Ywc(),Xvc)),12);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=0;P3b(o,a)}e+=d}}if(c){k=l*(c.gc()-1);n=0;for(i=c.Kc();i.Ob();){g=RD(i.Pb(),10);k+=g.o.a;n=$wnd.Math.max(n,g.o.b)}r=p.a-(k-q.a)/2;f=p.b+q.b+m.a-n;d=q.a/(c.gc()+1);e=d;for(h=c.Kc();h.Ob();){g=RD(h.Pb(),10);g.n.a=r;g.n.b=f;r+=g.o.a+l;j=n6b(g);j.n.a=g.o.a/2-j.a.a;j.n.b=0;o=RD(mQb(g,(Ywc(),Xvc)),12);if(o.e.c.length+o.g.c.length==1){o.n.a=e-o.a.a;o.n.b=q.b;P3b(o,a)}e+=d}}} +function Hac(a,b){var c,d,e,f,g,h;if(!RD(mQb(b,(Ywc(),kwc)),21).Hc((ovc(),hvc))){return}for(h=new Anb(b.a);h.a<h.c.c.length;){f=RD(ynb(h),10);if(f.k==(r3b(),p3b)){e=RD(mQb(f,(yCc(),_Ac)),140);a.c=$wnd.Math.min(a.c,f.n.a-e.b);a.a=$wnd.Math.max(a.a,f.n.a+f.o.a+e.c);a.d=$wnd.Math.min(a.d,f.n.b-e.d);a.b=$wnd.Math.max(a.b,f.n.b+f.o.b+e.a)}}for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);if(f.k!=(r3b(),p3b)){switch(f.k.g){case 2:d=RD(mQb(f,(yCc(),UAc)),171);if(d==(cxc(),$wc)){f.n.a=a.c-10;Gac(f,new Oac).Jb(new Rac(f));break}if(d==axc){f.n.a=a.a+10;Gac(f,new Uac).Jb(new Xac(f));break}c=RD(mQb(f,owc),311);if(c==(Gvc(),Fvc)){Fac(f).Jb(new $ac(f));f.n.b=a.d-10;break}if(c==Dvc){Fac(f).Jb(new bbc(f));f.n.b=a.b+10;break}break;default:throw Adb(new agb('The node type '+f.k+' is not supported by the '+XS));}}}} +function g5b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q;i=new rjd(d.i+d.g/2,d.j+d.f/2);n=W4b(d);o=RD(Gxd(b,(yCc(),BBc)),101);q=RD(Gxd(d,GBc),64);if(!HPd(Fxd(d),ABc)){d.i==0&&d.j==0?(p=0):(p=nsd(d,q));Ixd(d,ABc,p)}j=new rjd(b.g,b.f);e=f2b(d,o,q,n,j,i,new rjd(d.g,d.f),RD(mQb(c,rAc),88),c);pQb(e,(Ywc(),Awc),d);f=RD(Vmb(e.j,0),12);O3b(f,e5b(d));pQb(e,EBc,(Pod(),xsb(Nod)));l=RD(Gxd(b,EBc),181).Hc(Lod);for(h=new dMd((!d.n&&(d.n=new C5d(I4,d,1,7)),d.n));h.e!=h.i.gc();){g=RD(bMd(h),135);if(!Heb(TD(Gxd(g,pBc)))&&!!g.a){m=h5b(g);Rmb(f.f,m);if(!l){k=0;Rod(RD(Gxd(b,EBc),21))&&(k=qsd(new rjd(g.i,g.j),new rjd(g.g,g.f),new rjd(d.g,d.f),0,q));switch(q.g){case 2:case 4:m.o.a=k;break;case 1:case 3:m.o.b=k;}}}}pQb(e,_Bc,UD(Gxd(vCd(b),_Bc)));pQb(e,aCc,UD(Gxd(vCd(b),aCc)));pQb(e,ZBc,UD(Gxd(vCd(b),ZBc)));Rmb(c.a,e);Zjb(a.a,d,e)} +function j5b(a,b,c,d,e,f){var g,h,i,j,k,l;j=new R3b;kQb(j,b);Q3b(j,RD(Gxd(b,(yCc(),GBc)),64));pQb(j,(Ywc(),Awc),b);P3b(j,c);l=j.o;l.a=b.g;l.b=b.f;k=j.n;k.a=b.i;k.b=b.j;Zjb(a.a,b,j);g=yDb(GDb(EDb(new SDb(null,(!b.e&&(b.e=new Yie(G4,b,7,4)),new Swb(b.e,16))),new w5b),new o5b),new y5b(b));g||(g=yDb(GDb(EDb(new SDb(null,(!b.d&&(b.d=new Yie(G4,b,8,5)),new Swb(b.d,16))),new A5b),new q5b),new C5b(b)));g||(g=yDb(new SDb(null,(!b.e&&(b.e=new Yie(G4,b,7,4)),new Swb(b.e,16))),new E5b));pQb(j,nwc,(Geb(),g?true:false));m2b(j,f,e,RD(Gxd(b,zBc),8));for(i=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));i.e!=i.i.gc();){h=RD(bMd(i),135);!Heb(TD(Gxd(h,pBc)))&&!!h.a&&Rmb(j.f,h5b(h))}switch(e.g){case 2:case 1:(j.j==(qpd(),Yod)||j.j==npd)&&d.Fc((ovc(),lvc));break;case 4:case 3:(j.j==(qpd(),Xod)||j.j==ppd)&&d.Fc((ovc(),lvc));}return j} +function dud(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;t=0;o=0;n=0;m=1;for(s=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));s.e!=s.i.gc();){q=RD(bMd(s),27);m+=Kr(new is(Mr(zGd(q).a.Kc(),new ir)));B=q.g;o=$wnd.Math.max(o,B);l=q.f;n=$wnd.Math.max(n,l);t+=B*l}p=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i;g=t+2*d*d*m*p;f=$wnd.Math.sqrt(g);i=$wnd.Math.max(f*c,o);h=$wnd.Math.max(f/c,n);for(r=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));r.e!=r.i.gc();){q=RD(bMd(r),27);C=e.b+(Kwb(b,26)*Kxe+Kwb(b,27)*Lxe)*(i-q.g);D=e.b+(Kwb(b,26)*Kxe+Kwb(b,27)*Lxe)*(h-q.f);Dyd(q,C);Eyd(q,D)}A=i+(e.b+e.c);w=h+(e.d+e.a);for(v=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));v.e!=v.i.gc();){u=RD(bMd(v),27);for(k=new is(Mr(zGd(u).a.Kc(),new ir));gs(k);){j=RD(hs(k),74);nzd(j)||cud(j,b,A,w)}}A+=e.b+e.c;w+=e.d+e.a;Esd(a,A,w,false,true)} +function CLb(a){var b;this.r=Ty(new FLb,new JLb);this.b=new Zrb(RD(Qb(E3),296));this.p=new Zrb(RD(Qb(E3),296));this.i=new Zrb(RD(Qb(XN),296));this.e=a;this.o=new sjd(a.Mf());this.D=a.Yf()||Heb(TD(a.of((umd(),$kd))));this.A=RD(a.of((umd(),kld)),21);this.B=RD(a.of(pld),21);this.q=RD(a.of(Hld),101);this.u=RD(a.of(Lld),21);if(!Sod(this.u)){throw Adb(new Jed('Invalid port label placement: '+this.u))}this.v=Heb(TD(a.of(Nld)));this.j=RD(a.of(ild),21);if(!fod(this.j)){throw Adb(new Jed('Invalid node label placement: '+this.j))}this.n=RD(ftd(a,gld),107);this.k=Kfb(UD(ftd(a,cmd)));this.d=Kfb(UD(ftd(a,bmd)));this.w=Kfb(UD(ftd(a,jmd)));this.s=Kfb(UD(ftd(a,dmd)));this.t=Kfb(UD(ftd(a,emd)));this.C=RD(ftd(a,hmd),140);this.c=2*this.d;b=!this.B.Hc((dqd(),Wpd));this.f=new dLb(0,b,0);this.g=new dLb(1,b,0);cLb(this.f,(ZJb(),XJb),this.g)} +function s6b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;b.Ug('Comment pre-processing',1);c=0;i=new Anb(a.a);while(i.a<i.c.c.length){h=RD(ynb(i),10);if(Heb(TD(mQb(h,(yCc(),Uzc))))){++c;e=0;d=null;j=null;for(o=new Anb(h.j);o.a<o.c.c.length;){m=RD(ynb(o),12);e+=m.e.c.length+m.g.c.length;if(m.e.c.length==1){d=RD(Vmb(m.e,0),18);j=d.c}if(m.g.c.length==1){d=RD(Vmb(m.g,0),18);j=d.d}}if(e==1&&j.e.c.length+j.g.c.length==1&&!Heb(TD(mQb(j.i,Uzc)))){t6b(h,d,j,j.i);znb(i)}else{r=new bnb;for(n=new Anb(h.j);n.a<n.c.c.length;){m=RD(ynb(n),12);for(l=new Anb(m.g);l.a<l.c.c.length;){k=RD(ynb(l),18);k.d.g.c.length==0||(ZEb(r.c,k),true)}for(g=new Anb(m.e);g.a<g.c.c.length;){f=RD(ynb(g),18);f.c.e.c.length==0||(ZEb(r.c,f),true)}}for(q=new Anb(r);q.a<q.c.c.length;){p=RD(ynb(q),18);X0b(p,true)}}}}b._g()&&b.bh('Found '+c+' comment boxes');b.Vg()} +function wke(a,b){uke();var c,d,e,f,g,h,i;this.a=new zke(this);this.b=a;this.c=b;this.f=Cfe(Qee((lke(),jke),b));if(this.f.dc()){if((h=Tee(jke,a))==b){this.e=true;this.d=new bnb;this.f=new OSd;this.f.Fc(dLe);RD(tfe(Pee(jke,BXd(a)),''),29)==a&&this.f.Fc(Uee(jke,BXd(a)));for(e=Gee(jke,a).Kc();e.Ob();){d=RD(e.Pb(),179);switch(yfe(Qee(jke,d))){case 4:{this.d.Fc(d);break}case 5:{this.f.Gc(Cfe(Qee(jke,d)));break}}}}else{nke();if(RD(b,69).xk()){this.e=true;this.f=null;this.d=new bnb;for(g=0,i=(a.i==null&&rYd(a),a.i).length;g<i;++g){d=(c=(a.i==null&&rYd(a),a.i),g>=0&&g<c.length?c[g]:null);for(f=zfe(Qee(jke,d));f;f=zfe(Qee(jke,f))){f==b&&this.d.Fc(d)}}}else if(yfe(Qee(jke,b))==1&&!!h){this.f=null;this.d=(Lle(),Kle)}else{this.f=null;this.e=true;this.d=(yob(),new mpb(b))}}}else{this.e=yfe(Qee(jke,b))==5;this.f.Fb(tke)&&(this.f=tke)}} +function qNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;c=0;d=pNb(a,b);m=a.s;n=a.t;for(j=RD(RD(Qc(a.r,b),21),87).Kc();j.Ob();){i=RD(j.Pb(),117);if(!i.c||i.c.d.c.length<=0){continue}o=i.b.Mf();h=i.b.pf((umd(),Gld))?Kfb(UD(i.b.of(Gld))):0;k=i.c;l=k.i;l.b=(g=k.n,k.e.a+g.b+g.c);l.a=(f=k.n,k.e.b+f.d+f.a);switch(b.g){case 1:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=o.b+h+d;RKb(k,(EKb(),BKb));SKb(k,(vLb(),uLb));break;case 3:l.c=i.a?(o.a-l.b)/2:o.a+m;l.d=-h-d-l.a;RKb(k,(EKb(),BKb));SKb(k,(vLb(),sLb));break;case 2:l.c=-h-d-l.b;if(i.a){e=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}RKb(k,(EKb(),DKb));SKb(k,(vLb(),tLb));break;case 4:l.c=o.a+h+d;if(i.a){e=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(o.b-e)/2}else{l.d=o.b+n}RKb(k,(EKb(),CKb));SKb(k,(vLb(),tLb));}(b==(qpd(),Yod)||b==npd)&&(c=$wnd.Math.max(c,l.a))}c>0&&(RD(Vrb(a.b,b),127).a.b=c)} +function wcc(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p;m=Kfb(UD(mQb(a,(yCc(),_Bc))));n=Kfb(UD(mQb(a,aCc)));l=Kfb(UD(mQb(a,ZBc)));h=a.o;f=RD(Vmb(a.j,0),12);g=f.n;p=ucc(f,l);if(!p){return}if(b.Hc((Pod(),Lod))){switch(RD(mQb(a,(Ywc(),hwc)),64).g){case 1:p.c=(h.a-p.b)/2-g.a;p.d=n;break;case 3:p.c=(h.a-p.b)/2-g.a;p.d=-n-p.a;break;case 2:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=-m-p.b;break;case 4:if(c&&f.e.c.length==0&&f.g.c.length==0){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=h.b+n-g.b}p.c=m;}}else if(b.Hc(Nod)){switch(RD(mQb(a,(Ywc(),hwc)),64).g){case 1:case 3:p.c=g.a+m;break;case 2:case 4:if(c&&!f.c){k=d?p.a:RD(Vmb(f.f,0),72).o.b;p.d=(h.b-k)/2-g.b}else{p.d=g.b+n}}}e=p.d;for(j=new Anb(f.f);j.a<j.c.c.length;){i=RD(ynb(j),72);o=i.n;o.a=p.c;o.b=e;e+=i.o.b+l}} +function w9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;w=new bnb;for(o=new Anb(a.b);o.a<o.c.c.length;){n=RD(ynb(o),30);for(r=new Anb(n.a);r.a<r.c.c.length;){p=RD(ynb(r),10);if(p.k!=(r3b(),m3b)){continue}if(!nQb(p,(Ywc(),gwc))){continue}s=null;u=null;t=null;for(C=new Anb(p.j);C.a<C.c.c.length;){B=RD(ynb(C),12);switch(B.j.g){case 4:s=B;break;case 2:u=B;break;default:t=B;}}v=RD(Vmb(t.g,0),18);k=new Fjd(v.a);j=new sjd(t.n);$id(j,p.n);l=Sub(k,0);cvb(l,j);A=Ijd(v.a);m=new sjd(t.n);$id(m,p.n);Pub(A,m,A.c.b,A.c);D=RD(mQb(p,gwc),10);F=RD(Vmb(D.j,0),12);i=RD(anb(s.e,$C(WQ,VAe,18,0,0,1)),482);for(d=i,f=0,h=d.length;f<h;++f){b=d[f];Z0b(b,F);Ajd(b.a,b.a.b,k)}i=s2b(u.g);for(c=i,e=0,g=c.length;e<g;++e){b=c[e];Y0b(b,F);Ajd(b.a,0,A)}Y0b(v,null);Z0b(v,null);ZEb(w.c,p)}}for(q=new Anb(w);q.a<q.c.c.length;){p=RD(ynb(q),10);g3b(p,null)}} +function Dne(){RRd(Vbb,new ioe);RRd(Xbb,new Poe);RRd(Ybb,new upe);RRd(Zbb,new _pe);RRd(qJ,new lqe);RRd(WC(gE,1),new oqe);RRd(QI,new rqe);RRd(RI,new uqe);RRd(qJ,new Gne);RRd(qJ,new Jne);RRd(qJ,new Mne);RRd(VI,new Pne);RRd(qJ,new Sne);RRd(QK,new Vne);RRd(QK,new Yne);RRd(qJ,new _ne);RRd(ZI,new coe);RRd(qJ,new foe);RRd(qJ,new loe);RRd(qJ,new ooe);RRd(qJ,new roe);RRd(qJ,new uoe);RRd(WC(gE,1),new xoe);RRd(qJ,new Aoe);RRd(qJ,new Doe);RRd(QK,new Goe);RRd(QK,new Joe);RRd(qJ,new Moe);RRd(bJ,new Soe);RRd(qJ,new Voe);RRd(eJ,new Yoe);RRd(qJ,new _oe);RRd(qJ,new cpe);RRd(qJ,new fpe);RRd(qJ,new ipe);RRd(QK,new lpe);RRd(QK,new ope);RRd(qJ,new rpe);RRd(qJ,new xpe);RRd(qJ,new Ape);RRd(qJ,new Dpe);RRd(qJ,new Gpe);RRd(qJ,new Jpe);RRd(lJ,new Mpe);RRd(qJ,new Ppe);RRd(qJ,new Spe);RRd(qJ,new Vpe);RRd(lJ,new Ype);RRd(eJ,new cqe);RRd(qJ,new fqe);RRd(bJ,new iqe)} +function jsc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;k=new Ejd;switch(a.a.g){case 3:m=RD(mQb(b.e,(Ywc(),Twc)),15);n=RD(mQb(b.j,Twc),15);o=RD(mQb(b.f,Twc),15);c=RD(mQb(b.e,Rwc),15);d=RD(mQb(b.j,Rwc),15);e=RD(mQb(b.f,Rwc),15);g=new bnb;Tmb(g,m);n.Jc(new msc);Tmb(g,hv(n));Tmb(g,o);f=new bnb;Tmb(f,c);Tmb(f,hv(d));Tmb(f,e);pQb(b.f,Twc,g);pQb(b.f,Rwc,f);pQb(b.f,Uwc,b.f);pQb(b.e,Twc,null);pQb(b.e,Rwc,null);pQb(b.j,Twc,null);pQb(b.j,Rwc,null);break;case 1:ye(k,b.e.a);Mub(k,b.i.n);ye(k,hv(b.j.a));Mub(k,b.a.n);ye(k,b.f.a);break;default:ye(k,b.e.a);ye(k,hv(b.j.a));ye(k,b.f.a);}Xub(b.f.a);ye(b.f.a,k);Y0b(b.f,b.e.c);h=RD(mQb(b.e,(yCc(),RAc)),75);j=RD(mQb(b.j,RAc),75);i=RD(mQb(b.f,RAc),75);if(!!h||!!j||!!i){l=new Ejd;hsc(l,i);hsc(l,j);hsc(l,h);pQb(b.f,RAc,l)}Y0b(b.j,null);Z0b(b.j,null);Y0b(b.e,null);Z0b(b.e,null);g3b(b.a,null);g3b(b.i,null);!!b.g&&jsc(a,b.g)} +function tib(){tib=geb;var a,b,c;new Aib(1,0);new Aib(10,0);new Aib(0,0);lib=$C(tJ,Nve,247,11,0,1);mib=$C(hE,zwe,28,100,15,1);nib=cD(WC(iE,1),vxe,28,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625]);oib=$C(kE,Pwe,28,nib.length,15,1);pib=cD(WC(iE,1),vxe,28,15,[1,10,100,Awe,10000,wxe,1000000,10000000,100000000,ixe,10000000000,100000000000,1000000000000,10000000000000,100000000000000,1000000000000000,10000000000000000]);qib=$C(kE,Pwe,28,pib.length,15,1);rib=$C(tJ,Nve,247,11,0,1);a=0;for(;a<rib.length;a++){lib[a]=new Aib(a,0);rib[a]=new Aib(0,a);mib[a]=48}for(;a<mib.length;a++){mib[a]=48}for(c=0;c<oib.length;c++){oib[c]=Cib(nib[c])}for(b=0;b<qib.length;b++){qib[b]=Cib(pib[b])}Ljb()} +function Htb(){function e(){this.obj=this.createObject()} +;e.prototype.createObject=function(a){return Object.create(null)};e.prototype.get=function(a){return this.obj[a]};e.prototype.set=function(a,b){this.obj[a]=b};e.prototype[Jxe]=function(a){delete this.obj[a]};e.prototype.keys=function(){return Object.getOwnPropertyNames(this.obj)};e.prototype.entries=function(){var b=this.keys();var c=this;var d=0;return {next:function(){if(d>=b.length)return {done:true};var a=b[d++];return {value:[a,c.get(a)],done:false}}}};if(!Ftb()){e.prototype.createObject=function(){return {}};e.prototype.get=function(a){return this.obj[':'+a]};e.prototype.set=function(a,b){this.obj[':'+a]=b};e.prototype[Jxe]=function(a){delete this.obj[':'+a]};e.prototype.keys=function(){var a=[];for(var b in this.obj){b.charCodeAt(0)==58&&a.push(b.substring(1))}return a}}return e} +function q$c(){q$c=geb;h$c=new jGd(rAe);new jGd(sAe);new kGd('DEPTH',sgb(0));XZc=new kGd('FAN',sgb(0));VZc=new kGd(QEe,sgb(0));n$c=new kGd('ROOT',(Geb(),false));b$c=new kGd('LEFTNEIGHBOR',null);l$c=new kGd('RIGHTNEIGHBOR',null);c$c=new kGd('LEFTSIBLING',null);m$c=new kGd('RIGHTSIBLING',null);WZc=new kGd('DUMMY',false);new kGd('LEVEL',sgb(0));k$c=new kGd('REMOVABLE_EDGES',new Yub);o$c=new kGd('XCOOR',sgb(0));p$c=new kGd('YCOOR',sgb(0));d$c=new kGd('LEVELHEIGHT',0);f$c=new kGd('LEVELMIN',0);e$c=new kGd('LEVELMAX',0);ZZc=new kGd('GRAPH_XMIN',0);_Zc=new kGd('GRAPH_YMIN',0);YZc=new kGd('GRAPH_XMAX',0);$Zc=new kGd('GRAPH_YMAX',0);UZc=new kGd('COMPACT_LEVEL_ASCENSION',false);TZc=new kGd('COMPACT_CONSTRAINTS',new bnb);a$c=new kGd('ID','');i$c=new kGd('POSITION',sgb(0));j$c=new kGd('PRELIM',0);g$c=new kGd('MODIFIER',0);SZc=new jGd(tAe);RZc=new jGd(uAe)} +function Bqe(a){zqe();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;l=a.length*8;if(l==0){return ''}h=l%24;n=l/24|0;m=h!=0?n+1:n;f=null;f=$C(hE,zwe,28,m*4,15,1);j=0;k=0;b=0;c=0;d=0;g=0;e=0;for(i=0;i<n;i++){b=a[e++];c=a[e++];d=a[e++];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;q=(d&-128)==0?d>>6<<24>>24:(d>>6^252)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[p|j<<4];f[g++]=yqe[k<<2|q];f[g++]=yqe[d&63]}if(h==8){b=a[e];j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[j<<4];f[g++]=61;f[g++]=61}else if(h==16){b=a[e];c=a[e+1];k=(c&15)<<24>>24;j=(b&3)<<24>>24;o=(b&-128)==0?b>>2<<24>>24:(b>>2^192)<<24>>24;p=(c&-128)==0?c>>4<<24>>24:(c>>4^240)<<24>>24;f[g++]=yqe[o];f[g++]=yqe[p|j<<4];f[g++]=yqe[k<<2];f[g++]=61}return Ihb(f,0,f.length)} +function CB(a,b){var c,d,e,f,g,h,i;a.e==0&&a.p>0&&(a.p=-(a.p-1));a.p>qwe&&tB(b,a.p-Owe);g=b.q.getDate();nB(b,1);a.k>=0&&qB(b,a.k);if(a.c>=0){nB(b,a.c)}else if(a.k>=0){i=new vB(b.q.getFullYear()-Owe,b.q.getMonth(),35);d=35-i.q.getDate();nB(b,$wnd.Math.min(d,g))}else{nB(b,g)}a.f<0&&(a.f=b.q.getHours());a.b>0&&a.f<12&&(a.f+=12);oB(b,a.f==24&&a.g?0:a.f);a.j>=0&&pB(b,a.j);a.n>=0&&rB(b,a.n);a.i>=0&&sB(b,Bdb(Ndb(Fdb(Hdb(b.q.getTime()),Awe),Awe),a.i));if(a.a){e=new uB;tB(e,e.q.getFullYear()-Owe-80);Ldb(Hdb(b.q.getTime()),Hdb(e.q.getTime()))&&tB(b,e.q.getFullYear()-Owe+100)}if(a.d>=0){if(a.c==-1){c=(7+a.d-b.q.getDay())%7;c>3&&(c-=7);h=b.q.getMonth();nB(b,b.q.getDate()+c);b.q.getMonth()!=h&&nB(b,b.q.getDate()+(c>0?-7:7))}else{if(b.q.getDay()!=a.d){return false}}}if(a.o>qwe){f=b.q.getTimezoneOffset();sB(b,Bdb(Hdb(b.q.getTime()),(a.o-f)*60*Awe))}return true} +function J5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;e=mQb(b,(Ywc(),Awc));if(!ZD(e,207)){return}o=RD(e,27);p=b.e;m=new sjd(b.c);f=b.d;m.a+=f.b;m.b+=f.d;u=RD(Gxd(o,(yCc(),oBc)),181);if(Csb(u,(dqd(),Xpd))){n=RD(Gxd(o,qBc),107);E2b(n,f.a);H2b(n,f.d);F2b(n,f.b);G2b(n,f.c)}c=new bnb;for(k=new Anb(b.a);k.a<k.c.c.length;){i=RD(ynb(k),10);if(ZD(mQb(i,Awc),207)){K5b(i,m)}else if(ZD(mQb(i,Awc),193)&&!p){d=RD(mQb(i,Awc),123);s=j2b(b,i,d.g,d.f);Byd(d,s.a,s.b)}for(r=new Anb(i.j);r.a<r.c.c.length;){q=RD(ynb(r),12);FDb(CDb(new SDb(null,new Swb(q.g,16)),new Q5b(i)),new S5b(c))}}if(p){for(r=new Anb(p.j);r.a<r.c.c.length;){q=RD(ynb(r),12);FDb(CDb(new SDb(null,new Swb(q.g,16)),new U5b(p)),new W5b(c))}}t=RD(Gxd(o,yAc),223);for(h=new Anb(c);h.a<h.c.c.length;){g=RD(ynb(h),18);I5b(g,t,m)}L5b(b);for(j=new Anb(b.a);j.a<j.c.c.length;){i=RD(ynb(j),10);l=i.e;!!l&&J5b(a,l)}} +function xNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(RD(RD(Qc(a.r,b),21),87).dc()){return}g=RD(Vrb(a.b,b),127);i=g.i;h=g.n;k=BLb(a,b);d=i.b-h.b-h.c;e=g.a.a;f=i.c+h.b;n=a.w;if((k==(pod(),mod)||k==ood)&&RD(RD(Qc(a.r,b),21),87).gc()==1){e=k==mod?e-2*a.w:e;k=lod}if(d<e&&!a.B.Hc((dqd(),aqd))){if(k==mod){n+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);f+=n}else{n+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1)}}else{if(d<e){e=k==mod?e-2*a.w:e;k=lod}switch(k.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);n+=$wnd.Math.max(0,c);f+=n;break;case 1:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1);n+=$wnd.Math.max(0,c);}}for(m=RD(RD(Qc(a.r,b),21),87).Kc();m.Ob();){l=RD(m.Pb(),117);l.e.a=f+l.d.b;l.e.b=(j=l.b,j.pf((umd(),Gld))?j.ag()==(qpd(),Yod)?-j.Mf().b-Kfb(UD(j.of(Gld))):Kfb(UD(j.of(Gld))):j.ag()==(qpd(),Yod)?-j.Mf().b:0);f+=l.d.b+l.b.Mf().a+l.d.c+n}} +function BNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(RD(RD(Qc(a.r,b),21),87).dc()){return}g=RD(Vrb(a.b,b),127);i=g.i;h=g.n;l=BLb(a,b);d=i.a-h.d-h.a;e=g.a.b;f=i.d+h.d;o=a.w;j=a.o.a;if((l==(pod(),mod)||l==ood)&&RD(RD(Qc(a.r,b),21),87).gc()==1){e=l==mod?e-2*a.w:e;l=lod}if(d<e&&!a.B.Hc((dqd(),aqd))){if(l==mod){o+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);f+=o}else{o+=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1)}}else{if(d<e){e=l==mod?e-2*a.w:e;l=lod}switch(l.g){case 3:f+=(d-e)/2;break;case 4:f+=d-e;break;case 0:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()+1);o+=$wnd.Math.max(0,c);f+=o;break;case 1:c=(d-e)/(RD(RD(Qc(a.r,b),21),87).gc()-1);o+=$wnd.Math.max(0,c);}}for(n=RD(RD(Qc(a.r,b),21),87).Kc();n.Ob();){m=RD(n.Pb(),117);m.e.a=(k=m.b,k.pf((umd(),Gld))?k.ag()==(qpd(),ppd)?-k.Mf().a-Kfb(UD(k.of(Gld))):j+Kfb(UD(k.of(Gld))):k.ag()==(qpd(),ppd)?-k.Mf().a:j);m.e.b=f+m.d.d;f+=m.d.d+m.b.Mf().b+m.d.a+o}} +function bZc(a,b){var c,d,e,f,g;b.Ug('Processor determine the coords for each level',1);d=new bnb;for(g=Sub(a.b,0);g.b!=g.d.c;){e=RD(evb(g),39);while(RD(mQb(e,(h_c(),f_c)),17).a>d.c.length-1){Rmb(d,new Ptd(Hze,KEe))}c=RD(mQb(e,f_c),17).a;if(Dmd(RD(mQb(a,H$c),88))){e.e.a<Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).a))&&Ntd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.a);e.e.a+e.f.a>Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).b))&&Otd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.a+e.f.a)}else{e.e.b<Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).a))&&Ntd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.b);e.e.b+e.f.b>Kfb(UD((tFb(c,d.c.length),RD(d.c[c],42)).b))&&Otd((tFb(c,d.c.length),RD(d.c[c],42)),e.e.b+e.f.b)}}for(f=Sub(a.b,0);f.b!=f.d.c;){e=RD(evb(f),39);c=RD(mQb(e,(h_c(),f_c)),17).a;pQb(e,(q$c(),f$c),UD((tFb(c,d.c.length),RD(d.c[c],42)).a));pQb(e,e$c,UD((tFb(c,d.c.length),RD(d.c[c],42)).b))}b.Vg()} +function Tec(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;a.o=Kfb(UD(mQb(a.i,(yCc(),bCc))));a.f=Kfb(UD(mQb(a.i,XBc)));a.j=a.i.b.c.length;h=a.j-1;m=0;a.k=0;a.n=0;a.b=dv($C(bJ,Nve,17,a.j,0,1));a.c=dv($C(VI,Nve,345,a.j,7,1));for(g=new Anb(a.i.b);g.a<g.c.c.length;){e=RD(ynb(g),30);e.p=h;for(l=new Anb(e.a);l.a<l.c.c.length;){k=RD(ynb(l),10);k.p=m;++m}--h}a.g=$C(kE,Pwe,28,m,15,1);a.d=YC(kE,[Nve,Pwe],[53,28],15,[m,3],2);a.p=new bnb;a.q=new bnb;b=0;a.e=0;for(f=new Anb(a.i.b);f.a<f.c.c.length;){e=RD(ynb(f),30);h=e.p;d=0;p=0;i=e.a.c.length;j=0;for(l=new Anb(e.a);l.a<l.c.c.length;){k=RD(ynb(l),10);m=k.p;a.g[m]=k.c.p;j+=k.o.b+a.o;c=Kr(new is(Mr(Z2b(k).a.Kc(),new ir)));o=Kr(new is(Mr(a3b(k).a.Kc(),new ir)));a.d[m][0]=o-c;a.d[m][1]=c;a.d[m][2]=o;d+=c;p+=o;c>0&&Rmb(a.q,k);Rmb(a.p,k)}b-=d;n=i+b;j+=b*a.f;$mb(a.b,h,sgb(n));$mb(a.c,h,j);a.k=$wnd.Math.max(a.k,n);a.n=$wnd.Math.max(a.n,j);a.e+=b;b+=p}} +function qpd(){qpd=geb;var a;opd=new upd(Sye,0);Yod=new upd(_ye,1);Xod=new upd(aze,2);npd=new upd(bze,3);ppd=new upd(cze,4);bpd=(yob(),new Lqb((a=RD(mfb(E3),9),new Fsb(a,RD(WEb(a,a.length),9),0))));cpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[])));Zod=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[])));kpd=eq(ysb(npd,cD(WC(E3,1),NAe,64,0,[])));mpd=eq(ysb(ppd,cD(WC(E3,1),NAe,64,0,[])));hpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[npd])));apd=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[ppd])));jpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[ppd])));dpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod])));lpd=eq(ysb(npd,cD(WC(E3,1),NAe,64,0,[ppd])));$od=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[npd])));gpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,ppd])));_od=eq(ysb(Xod,cD(WC(E3,1),NAe,64,0,[npd,ppd])));ipd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[npd,ppd])));epd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,npd])));fpd=eq(ysb(Yod,cD(WC(E3,1),NAe,64,0,[Xod,npd,ppd])))} +function Gfc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A;b.Ug(qBe,1);p=new bnb;w=new bnb;for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),30);r=-1;o=t2b(i.a);for(l=o,m=0,n=l.length;m<n;++m){k=l[m];++r;if(!(k.k==(r3b(),p3b)&&Dod(RD(mQb(k,(yCc(),BBc)),101)))){continue}Cod(RD(mQb(k,(yCc(),BBc)),101))||Hfc(k);pQb(k,(Ywc(),pwc),k);p.c.length=0;w.c.length=0;c=new bnb;u=new Yub;_q(u,e3b(k,(qpd(),Yod)));Efc(a,u,p,w,c);h=r;A=k;for(f=new Anb(p);f.a<f.c.c.length;){d=RD(ynb(f),10);f3b(d,h,i);++r;pQb(d,pwc,k);g=RD(Vmb(d.j,0),12);q=RD(mQb(g,Awc),12);Heb(TD(mQb(q,Szc)))||RD(mQb(d,qwc),15).Fc(A)}Xub(u);for(t=e3b(k,npd).Kc();t.Ob();){s=RD(t.Pb(),12);Pub(u,s,u.a,u.a.a)}Efc(a,u,w,null,c);v=k;for(e=new Anb(w);e.a<e.c.c.length;){d=RD(ynb(e),10);f3b(d,++r,i);pQb(d,pwc,k);g=RD(Vmb(d.j,0),12);q=RD(mQb(g,Awc),12);Heb(TD(mQb(q,Szc)))||RD(mQb(v,qwc),15).Fc(d)}c.c.length==0||pQb(k,Uvc,c)}}b.Vg()} +function tYc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(b.b!=0){n=new Yub;h=null;o=null;d=eE($wnd.Math.floor($wnd.Math.log(b.b)*$wnd.Math.LOG10E)+1);i=0;for(t=Sub(b,0);t.b!=t.d.c;){r=RD(evb(t),39);if(dE(o)!==dE(mQb(r,(q$c(),a$c)))){o=WD(mQb(r,a$c));i=0}o!=null?(h=o+wYc(i++,d)):(h=wYc(i++,d));pQb(r,a$c,h);for(q=(e=Sub((new dXc(r)).a.d,0),new gXc(e));dvb(q.a);){p=RD(evb(q.a),65).c;Pub(n,p,n.c.b,n.c);pQb(p,a$c,h)}}m=new Tsb;for(g=0;g<h.length-d;g++){for(s=Sub(b,0);s.b!=s.d.c;){r=RD(evb(s),39);j=zhb(WD(mQb(r,(q$c(),a$c))),0,g+1);c=(j==null?Wd(qtb(m.f,null)):Ktb(m.i,j))!=null?RD(j==null?Wd(qtb(m.f,null)):Ktb(m.i,j),17).a+1:1;$jb(m,j,sgb(c))}}for(l=new vkb((new mkb(m)).a);l.b;){k=tkb(l);f=sgb(Wjb(a.a,k.ld())!=null?RD(Wjb(a.a,k.ld()),17).a:0);$jb(a.a,WD(k.ld()),sgb(RD(k.md(),17).a+f.a));f=RD(Wjb(a.b,k.ld()),17);(!f||f.a<RD(k.md(),17).a)&&$jb(a.b,WD(k.ld()),RD(k.md(),17))}tYc(a,n)}} +function Hpc(a){var b,c,d,e,f,g,h,i,j,k,l,m;c=null;i=null;e=RD(mQb(a.b,(yCc(),CAc)),349);if(e==(TEc(),REc)){c=new bnb;i=new bnb}for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),105);f=g.i;if(!f){continue}switch(g.e.g){case 0:b=RD(Nsb(new Osb(g.b)),64);e==REc&&b==(qpd(),Yod)?(ZEb(c.c,g),true):e==REc&&b==(qpd(),npd)?(ZEb(i.c,g),true):Fpc(g,b);break;case 1:j=g.a.d.j;k=g.c.d.j;j==(qpd(),Yod)?Gpc(g,Yod,(enc(),bnc),g.a):k==Yod?Gpc(g,Yod,(enc(),cnc),g.c):j==npd?Gpc(g,npd,(enc(),cnc),g.a):k==npd&&Gpc(g,npd,(enc(),bnc),g.c);break;case 2:case 3:d=g.b;Csb(d,(qpd(),Yod))?Csb(d,npd)?Csb(d,ppd)?Csb(d,Xod)||Gpc(g,Yod,(enc(),cnc),g.c):Gpc(g,Yod,(enc(),bnc),g.a):Gpc(g,Yod,(enc(),anc),null):Gpc(g,npd,(enc(),anc),null);break;case 4:l=g.a.d.j;m=g.a.d.j;l==(qpd(),Yod)||m==Yod?Gpc(g,npd,(enc(),anc),null):Gpc(g,Yod,(enc(),anc),null);}}if(c){c.c.length==0||Epc(c,(qpd(),Yod));i.c.length==0||Epc(i,(qpd(),npd))}} +function oGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c.Ug('Breadth first model order layering',1);a.a=b;q=new bnb;for(p=new Anb(a.a.a);p.a<p.c.c.length;){n=RD(ynb(p),10);n.k==(r3b(),p3b)&&(ZEb(q.c,n),true)}yob();_mb(q,new tGc);i=true;e=new R4b(a.a);d=null;Rmb(a.a.b,e);for(o=new Anb(q);o.a<o.c.c.length;){n=RD(ynb(o),10);if(i){g3b(n,e);i=false}else{for(h=new is(Mr(Z2b(n).a.Kc(),new ir));gs(h);){f=RD(hs(h),18);if(f.c.i.k==(r3b(),p3b)&&f.c.i.c==e||f.c.i.k==n3b&&RD(hs(new is(Mr(Z2b(f.c.i).a.Kc(),new ir))),18).c.i.c==e){d=new R4b(a.a);Rmb(a.a.b,d);e=new R4b(a.a);Rmb(a.a.b,e)}}for(g=new is(Mr(Z2b(n).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);f.c.i.k==(r3b(),n3b)&&!f.c.i.c&&g3b(f.c.i,d)}g3b(n,e)}}a.a.a.c.length=0;r=new bnb;for(l=new Anb(a.a.b);l.a<l.c.c.length;){j=RD(ynb(l),30);j.a.c.length==0&&(ZEb(r.c,j),true)}Ce(a.a.b,r);m=0;for(k=new Anb(a.a.b);k.a<k.c.c.length;){j=RD(ynb(k),30);j.p=m;++m}c.Vg()} +function K5b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p;d=RD(mQb(a,(Ywc(),Awc)),27);o=RD(mQb(a,(yCc(),mAc)),17).a;f=RD(mQb(a,VAc),17).a;Ixd(d,mAc,sgb(o));Ixd(d,VAc,sgb(f));Dyd(d,a.n.a+b.a);Eyd(d,a.n.b+b.b);if(RD(Gxd(d,lBc),181).gc()!=0||!!a.e||dE(mQb(Y2b(a),kBc))===dE((JDc(),HDc))&&xDc((wDc(),(!a.q?(yob(),yob(),wob):a.q)._b(iBc)?(m=RD(mQb(a,iBc),203)):(m=RD(mQb(Y2b(a),jBc),203)),m))){Cyd(d,a.o.a);Ayd(d,a.o.b)}for(l=new Anb(a.j);l.a<l.c.c.length;){j=RD(ynb(l),12);p=mQb(j,Awc);if(ZD(p,193)){e=RD(p,123);Byd(e,j.n.a,j.n.b);Ixd(e,GBc,j.j)}}n=RD(mQb(a,dBc),181).gc()!=0;for(i=new Anb(a.b);i.a<i.c.c.length;){g=RD(ynb(i),72);if(n||RD(mQb(g,dBc),181).gc()!=0){c=RD(mQb(g,Awc),135);zyd(c,g.o.a,g.o.b);Byd(c,g.n.a,g.n.b)}}if(!Rod(RD(mQb(a,EBc),21))){for(k=new Anb(a.j);k.a<k.c.c.length;){j=RD(ynb(k),12);for(h=new Anb(j.f);h.a<h.c.c.length;){g=RD(ynb(h),72);c=RD(mQb(g,Awc),135);Cyd(c,g.o.a);Ayd(c,g.o.b);Byd(c,g.n.a,g.n.b)}}}} +function X2c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;b.Ug('Calculate Graph Size',1);b.dh(a,eFe);l=Hze;m=Hze;j=fFe;k=fFe;for(p=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));p.e!=p.i.gc();){n=RD(bMd(p),27);s=n.i;t=n.j;C=n.g;h=n.f;i=RD(Gxd(n,(umd(),eld)),140);l=$wnd.Math.min(l,s-i.b);m=$wnd.Math.min(m,t-i.d);j=$wnd.Math.max(j,s+C+i.c);k=$wnd.Math.max(k,t+h+i.a)}r=RD(Gxd(a,(umd(),tld)),107);q=new rjd(l-r.b,m-r.d);B=j-l+(r.b+r.c);g=k-m+(r.d+r.a);if(Heb(TD(Gxd(a,($4c(),G4c))))){u=RD(Gxd(a,(u2c(),t2c)),27);v=RD(Gxd(u,eld),140);w=u.i+u.g/2+(v.b+v.c)/2-q.a;A=u.j+u.f/2+(v.d+v.a)/2-q.b;e=B-w;f=g-A;if(e<B/2){c=e-w;B+=c;q.a-=c}else{c=w-e;B+=c}if(f<g/2){d=f-A;g+=d;q.b-=d}else{d=A-f;g+=d}}for(o=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));o.e!=o.i.gc();){n=RD(bMd(o),27);Dyd(n,n.i-q.a);Eyd(n,n.j-q.b)}if(!Heb(TD(Gxd(a,mld)))){Cyd(a,B);Ayd(a,g)}Ixd(a,Ikd,B-(r.b+r.c));Ixd(a,Hkd,g-(r.d+r.a));b.dh(a,gFe)} +function IUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;a.e.a.$b();a.f.a.$b();a.c.c.length=0;a.i.c.length=0;a.g.a.$b();if(b){for(g=new Anb(b.a);g.a<g.c.c.length;){f=RD(ynb(g),10);for(l=e3b(f,(qpd(),Xod)).Kc();l.Ob();){k=RD(l.Pb(),12);Ysb(a.e,k);for(e=new Anb(k.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(W0b(d)){continue}Rmb(a.c,d);OUc(a,d);h=d.c.i.k;(h==(r3b(),p3b)||h==q3b||h==m3b||h==l3b)&&Rmb(a.j,d);n=d.d;m=n.i.c;m==c?Ysb(a.f,n):m==b?Ysb(a.e,n):Ymb(a.c,d)}}}}if(c){for(g=new Anb(c.a);g.a<g.c.c.length;){f=RD(ynb(g),10);for(j=new Anb(f.j);j.a<j.c.c.length;){i=RD(ynb(j),12);for(e=new Anb(i.g);e.a<e.c.c.length;){d=RD(ynb(e),18);W0b(d)&&Ysb(a.g,d)}}for(l=e3b(f,(qpd(),ppd)).Kc();l.Ob();){k=RD(l.Pb(),12);Ysb(a.f,k);for(e=new Anb(k.g);e.a<e.c.c.length;){d=RD(ynb(e),18);if(W0b(d)){continue}Rmb(a.c,d);OUc(a,d);h=d.c.i.k;(h==(r3b(),p3b)||h==q3b||h==m3b||h==l3b)&&Rmb(a.j,d);n=d.d;m=n.i.c;m==c?Ysb(a.f,n):m==b?Ysb(a.e,n):Ymb(a.c,d)}}}}} +function iSc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c.Ug('Polyline edge routing',1);q=Kfb(UD(mQb(b,(yCc(),AAc))));n=Kfb(UD(mQb(b,cCc)));e=Kfb(UD(mQb(b,UBc)));d=$wnd.Math.min(1,e/n);t=0;i=0;if(b.b.c.length!=0){u=fSc(RD(Vmb(b.b,0),30));t=0.4*d*u}h=new Jkb(b.b,0);while(h.b<h.d.gc()){g=(sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30));f=ar(g,bSc);f&&t>0&&(t-=n);p2b(g,t);k=0;for(m=new Anb(g.a);m.a<m.c.c.length;){l=RD(ynb(m),10);j=0;for(p=new is(Mr(a3b(l).a.Kc(),new ir));gs(p);){o=RD(hs(p),18);r=K3b(o.c).b;s=K3b(o.d).b;if(g==o.d.i.c&&!W0b(o)){jSc(o,t,0.4*d*$wnd.Math.abs(r-s));if(o.c.j==(qpd(),ppd)){r=0;s=0}}j=$wnd.Math.max(j,$wnd.Math.abs(s-r))}switch(l.k.g){case 0:case 4:case 1:case 3:case 5:kSc(a,l,t,q);}k=$wnd.Math.max(k,j)}if(h.b<h.d.gc()){u=fSc((sFb(h.b<h.d.gc()),RD(h.d.Xb(h.c=h.b++),30)));k=$wnd.Math.max(k,u);sFb(h.b>0);h.a.Xb(h.c=--h.b)}i=0.4*d*k;!f&&h.b<h.d.gc()&&(i+=n);t+=g.c.a+i}a.a.a.$b();b.f.a=t;c.Vg()} +function GGd(a){var b,c,d,e,f;Ivb(a,IIe);switch((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i+(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i){case 0:throw Adb(new agb('The edge must have at least one source or target.'));case 1:return (!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==0?vCd(AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84))):vCd(AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)));}if((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b).i==1&&(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c).i==1){e=AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84));f=AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84));if(vCd(e)==vCd(f)){return vCd(e)}else if(e==vCd(f)){return e}else if(f==vCd(e)){return f}}d=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),(!a.c&&(a.c=new Yie(E4,a,5,8)),a.c)])));b=AGd(RD(hs(d),84));while(gs(d)){c=AGd(RD(hs(d),84));if(c!=b&&!NGd(c,b)){if(vCd(c)==vCd(b)){b=vCd(c)}else{b=HGd(b,c);if(!b){return null}}}}return b} +function _zd(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;n=c.length;if(n>0){j=(BFb(0,c.length),c.charCodeAt(0));if(j!=64){if(j==37){m=c.lastIndexOf('%');k=false;if(m!=0&&(m==n-1||(k=(BFb(m+1,c.length),c.charCodeAt(m+1)==46)))){h=(AFb(1,m,c.length),c.substr(1,m-1));u=lhb('%',h)?null:oSd(h);e=0;if(k){try{e=Oeb((BFb(m+2,c.length+1),c.substr(m+2)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){i=a;throw Adb(new RSd(i))}else throw Adb(a)}}for(r=P2d(b.Gh());r.Ob();){p=k3d(r);if(ZD(p,519)){f=RD(p,598);t=f.d;if((u==null?t==null:lhb(u,t))&&e--==0){return f}}}return null}}l=c.lastIndexOf('.');o=l==-1?c:(AFb(0,l,c.length),c.substr(0,l));d=0;if(l!=-1){try{d=Oeb((BFb(l+1,c.length+1),c.substr(l+1)),qwe,lve)}catch(a){a=zdb(a);if(ZD(a,130)){o=c}else throw Adb(a)}}o=lhb('%',o)?null:oSd(o);for(q=P2d(b.Gh());q.Ob();){p=k3d(q);if(ZD(p,197)){g=RD(p,197);s=g.xe();if((o==null?s==null:lhb(o,s))&&d--==0){return g}}}return null}}return Pvd(b,c)} +function Hlc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;k=new Tsb;i=new Tp;for(d=new Anb(a.a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);j=Zjc(b);if(j){rtb(k.f,j,b)}else{s=$jc(b);if(s){for(f=new Anb(s.k);f.a<f.c.c.length;){e=RD(ynb(f),18);Rc(i,e,b)}}}}for(c=new Anb(a.a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);j=Zjc(b);if(j){for(h=new is(Mr(a3b(j).a.Kc(),new ir));gs(h);){g=RD(hs(h),18);if(W0b(g)){continue}o=g.c;r=g.d;if((qpd(),hpd).Hc(g.c.j)&&hpd.Hc(g.d.j)){continue}p=RD(Wjb(k,g.d.i),60);rIb(uIb(tIb(vIb(sIb(new wIb,0),100),a.c[b.a.d]),a.c[p.a.d]));if(o.j==ppd&&q4b((J3b(),G3b,o))){for(m=RD(Qc(i,g),21).Kc();m.Ob();){l=RD(m.Pb(),60);if(l.d.c<b.d.c){n=a.c[l.a.d];q=a.c[b.a.d];if(n==q){continue}rIb(uIb(tIb(vIb(sIb(new wIb,1),100),n),q))}}}if(r.j==Xod&&v4b((J3b(),E3b,r))){for(m=RD(Qc(i,g),21).Kc();m.Ob();){l=RD(m.Pb(),60);if(l.d.c>b.d.c){n=a.c[b.a.d];q=a.c[l.a.d];if(n==q){continue}rIb(uIb(tIb(vIb(sIb(new wIb,1),100),n),q))}}}}}}} +function mNb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;m=RD(RD(Qc(a.r,b),21),87);if(b==(qpd(),Xod)||b==ppd){qNb(a,b);return}f=b==Yod?(mOb(),iOb):(mOb(),lOb);u=b==Yod?(vLb(),uLb):(vLb(),sLb);c=RD(Vrb(a.b,b),127);d=c.i;e=d.c+Hid(cD(WC(iE,1),vxe,28,15,[c.n.b,a.C.b,a.k]));r=d.c+d.b-Hid(cD(WC(iE,1),vxe,28,15,[c.n.c,a.C.c,a.k]));g=WNb(_Nb(f),a.t);s=b==Yod?pxe:oxe;for(l=m.Kc();l.Ob();){j=RD(l.Pb(),117);if(!j.c||j.c.d.c.length<=0){continue}q=j.b.Mf();p=j.e;n=j.c;o=n.i;o.b=(i=n.n,n.e.a+i.b+i.c);o.a=(h=n.n,n.e.b+h.d+h.a);Ivb(u,Pye);n.f=u;RKb(n,(EKb(),DKb));o.c=p.a-(o.b-q.a)/2;v=$wnd.Math.min(e,p.a);w=$wnd.Math.max(r,p.a+q.a);o.c<v?(o.c=v):o.c+o.b>w&&(o.c=w-o.b);Rmb(g.d,new sOb(o,UNb(g,o)));s=b==Yod?$wnd.Math.max(s,p.b+j.b.Mf().b):$wnd.Math.min(s,p.b)}s+=b==Yod?a.t:-a.t;t=VNb((g.e=s,g));t>0&&(RD(Vrb(a.b,b),127).a.b=t);for(k=m.Kc();k.Ob();){j=RD(k.Pb(),117);if(!j.c||j.c.d.c.length<=0){continue}o=j.c.i;o.c-=j.e.a;o.d-=j.e.b}} +function JSb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;b=new Tsb;for(i=new dMd(a);i.e!=i.i.gc();){h=RD(bMd(i),27);c=new _sb;Zjb(FSb,h,c);n=new TSb;e=RD(zDb(new SDb(null,new Twb(new is(Mr(yGd(h).a.Kc(),new ir)))),OBb(n,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)])))),85);ISb(c,RD(e.xc((Geb(),true)),16),new VSb);d=RD(zDb(CDb(RD(e.xc(false),15).Lc(),new XSb),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);for(g=d.Kc();g.Ob();){f=RD(g.Pb(),74);m=KGd(f);if(m){j=RD(Wd(qtb(b.f,m)),21);if(!j){j=LSb(m);rtb(b.f,m,j)}ye(c,j)}}e=RD(zDb(new SDb(null,new Twb(new is(Mr(zGd(h).a.Kc(),new ir)))),OBb(n,tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb])))),85);ISb(c,RD(e.xc(true),16),new ZSb);d=RD(zDb(CDb(RD(e.xc(false),15).Lc(),new _Sb),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);for(l=d.Kc();l.Ob();){k=RD(l.Pb(),74);m=MGd(k);if(m){j=RD(Wd(qtb(b.f,m)),21);if(!j){j=LSb(m);rtb(b.f,m,j)}ye(c,j)}}}} +function zjb(a,b){xjb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p;i=Ddb(a,0)<0;i&&(a=Odb(a));if(Ddb(a,0)==0){switch(b){case 0:return '0';case 1:return zxe;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:n=new bib;b<0?(n.a+='0E+',n):(n.a+='0E',n);n.a+=b==qwe?'2147483648':''+-b;return n.a;}}k=18;l=$C(hE,zwe,28,k+1,15,1);c=k;p=a;do{j=p;p=Fdb(p,10);l[--c]=Ydb(Bdb(48,Vdb(j,Ndb(p,10))))&Bwe}while(Ddb(p,0)!=0);e=Vdb(Vdb(Vdb(k,c),b),1);if(b==0){i&&(l[--c]=45);return Ihb(l,c,k-c)}if(b>0&&Ddb(e,-6)>=0){if(Ddb(e,0)>=0){f=c+Ydb(e);for(h=k-1;h>=f;h--){l[h+1]=l[h]}l[++f]=46;i&&(l[--c]=45);return Ihb(l,c,k-c+1)}for(g=2;Ldb(g,Bdb(Odb(e),1));g++){l[--c]=48}l[--c]=46;l[--c]=48;i&&(l[--c]=45);return Ihb(l,c,k-c)}o=c+1;d=k;m=new cib;i&&(m.a+='-',m);if(d-o>=1){Thb(m,l[c]);m.a+='.';m.a+=Ihb(l,c+1,k-c-1)}else{m.a+=Ihb(l,c,k-c)}m.a+='E';Ddb(e,0)>0&&(m.a+='+',m);m.a+=''+Zdb(e);return m.a} +function Esd(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;q=new rjd(a.g,a.f);p=vsd(a);p.a=$wnd.Math.max(p.a,b);p.b=$wnd.Math.max(p.b,c);w=p.a/q.a;k=p.b/q.b;u=p.a-q.a;i=p.b-q.b;if(d){g=!vCd(a)?RD(Gxd(a,(umd(),Nkd)),88):RD(Gxd(vCd(a),(umd(),Nkd)),88);h=dE(Gxd(a,(umd(),Hld)))===dE((Bod(),wod));for(s=new dMd((!a.c&&(a.c=new C5d(K4,a,9,9)),a.c));s.e!=s.i.gc();){r=RD(bMd(s),123);t=RD(Gxd(r,Old),64);if(t==(qpd(),opd)){t=osd(r,g);Ixd(r,Old,t)}switch(t.g){case 1:h||Dyd(r,r.i*w);break;case 2:Dyd(r,r.i+u);h||Eyd(r,r.j*k);break;case 3:h||Dyd(r,r.i*w);Eyd(r,r.j+i);break;case 4:h||Eyd(r,r.j*k);}}}zyd(a,p.a,p.b);if(e){for(m=new dMd((!a.n&&(a.n=new C5d(I4,a,1,7)),a.n));m.e!=m.i.gc();){l=RD(bMd(m),135);n=l.i+l.g/2;o=l.j+l.f/2;v=n/q.a;j=o/q.b;if(v+j>=1){if(v-j>0&&o>=0){Dyd(l,l.i+u);Eyd(l,l.j+i*j)}else if(v-j<0&&n>=0){Dyd(l,l.i+u*v);Eyd(l,l.j+i)}}}}Ixd(a,(umd(),kld),(Qpd(),f=RD(mfb(H3),9),new Fsb(f,RD(WEb(f,f.length),9),0)));return new rjd(w,k)} +function _4c(a){Cgd(a,new Pfd(Wfd($fd(Xfd(Zfd(Yfd(new agd,CFe),'ELK Radial'),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new c5c),CFe)));Agd(a,CFe,fEe,iGd(R4c));Agd(a,CFe,_ze,iGd(Y4c));Agd(a,CFe,jAe,iGd(K4c));Agd(a,CFe,CAe,iGd(L4c));Agd(a,CFe,iAe,iGd(M4c));Agd(a,CFe,kAe,iGd(J4c));Agd(a,CFe,gAe,iGd(N4c));Agd(a,CFe,lAe,iGd(Q4c));Agd(a,CFe,tFe,iGd(H4c));Agd(a,CFe,sFe,iGd(I4c));Agd(a,CFe,rFe,iGd(T4c));Agd(a,CFe,xFe,iGd(W4c));Agd(a,CFe,yFe,iGd(U4c));Agd(a,CFe,zFe,iGd(V4c));Agd(a,CFe,wFe,iGd(O4c));Agd(a,CFe,pFe,iGd(P4c));Agd(a,CFe,qFe,iGd(S4c));Agd(a,CFe,uFe,iGd(X4c));Agd(a,CFe,vFe,iGd(Z4c));Agd(a,CFe,oFe,iGd(G4c))} +function Peb(a){var b,c,d,e,f,g,h,i,j,k,l;if(a==null){throw Adb(new Vgb(vve))}j=a;f=a.length;i=false;if(f>0){b=(BFb(0,a.length),a.charCodeAt(0));if(b==45||b==43){a=(BFb(1,a.length+1),a.substr(1));--f;i=b==45}}if(f==0){throw Adb(new Vgb(nxe+j+'"'))}while(a.length>0&&(BFb(0,a.length),a.charCodeAt(0)==48)){a=(BFb(1,a.length+1),a.substr(1));--f}if(f>(Ugb(),Sgb)[10]){throw Adb(new Vgb(nxe+j+'"'))}for(e=0;e<f;e++){if(dfb((BFb(e,a.length),a.charCodeAt(e)))==-1){throw Adb(new Vgb(nxe+j+'"'))}}l=0;g=Qgb[10];k=Rgb[10];h=Odb(Tgb[10]);c=true;d=f%g;if(d>0){l=-parseInt((AFb(0,d,a.length),a.substr(0,d)),10);a=(BFb(d,a.length+1),a.substr(d));f-=d;c=false}while(f>=g){d=parseInt((AFb(0,g,a.length),a.substr(0,g)),10);a=(BFb(g,a.length+1),a.substr(g));f-=g;if(c){c=false}else{if(Ddb(l,h)<0){throw Adb(new Vgb(nxe+j+'"'))}l=Ndb(l,k)}l=Vdb(l,d)}if(Ddb(l,0)>0){throw Adb(new Vgb(nxe+j+'"'))}if(!i){l=Odb(l);if(Ddb(l,0)<0){throw Adb(new Vgb(nxe+j+'"'))}}return l} +function oSd(a){gSd();var b,c,d,e,f,g,h,i;if(a==null)return null;e=qhb(a,Fhb(37));if(e<0){return a}else{i=new dib((AFb(0,e,a.length),a.substr(0,e)));b=$C(gE,YHe,28,4,15,1);h=0;d=0;for(g=a.length;e<g;e++){BFb(e,a.length);if(a.charCodeAt(e)==37&&a.length>e+2&&zSd((BFb(e+1,a.length),a.charCodeAt(e+1)),XRd,YRd)&&zSd((BFb(e+2,a.length),a.charCodeAt(e+2)),XRd,YRd)){c=DSd((BFb(e+1,a.length),a.charCodeAt(e+1)),(BFb(e+2,a.length),a.charCodeAt(e+2)));e+=2;if(d>0){(c&192)==128?(b[h++]=c<<24>>24):(d=0)}else if(c>=128){if((c&224)==192){b[h++]=c<<24>>24;d=2}else if((c&240)==224){b[h++]=c<<24>>24;d=3}else if((c&248)==240){b[h++]=c<<24>>24;d=4}}if(d>0){if(h==d){switch(h){case 2:{Thb(i,((b[0]&31)<<6|b[1]&63)&Bwe);break}case 3:{Thb(i,((b[0]&15)<<12|(b[1]&63)<<6|b[2]&63)&Bwe);break}}h=0;d=0}}else{for(f=0;f<h;++f){Thb(i,b[f]&Bwe)}h=0;i.a+=String.fromCharCode(c)}}else{for(f=0;f<h;++f){Thb(i,b[f]&Bwe)}h=0;Thb(i,(BFb(e,a.length),a.charCodeAt(e)))}}return i.a}} +function atd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o;n=vCd(AGd(RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84)));o=vCd(AGd(RD(QHd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c),0),84)));l=n==o;h=new pjd;b=RD(Gxd(a,(vnd(),ond)),75);if(!!b&&b.b>=2){if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){c=(bvd(),e=new Rzd,e);WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),c)}else if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i>1){m=new mMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));while(m.e!=m.i.gc()){cMd(m)}}lsd(b,RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166))}if(l){for(d=new dMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));d.e!=d.i.gc();){c=RD(bMd(d),166);for(j=new dMd((!c.a&&(c.a=new XZd(D4,c,5)),c.a));j.e!=j.i.gc();){i=RD(bMd(j),377);h.a=$wnd.Math.max(h.a,i.a);h.b=$wnd.Math.max(h.b,i.b)}}}for(g=new dMd((!a.n&&(a.n=new C5d(I4,a,1,7)),a.n));g.e!=g.i.gc();){f=RD(bMd(g),135);k=RD(Gxd(f,und),8);!!k&&Byd(f,k.a,k.b);if(l){h.a=$wnd.Math.max(h.a,f.i+f.g);h.b=$wnd.Math.max(h.b,f.j+f.f)}}return h} +function MA(a,b,c,d,e){var f,g,h;KA(a,b);g=b[0];f=ihb(c.c,0);h=-1;if(DA(c)){if(d>0){if(g+d>a.length){return false}h=HA((AFb(0,g+d,a.length),a.substr(0,g+d)),b)}else{h=HA(a,b)}}switch(f){case 71:h=EA(a,g,cD(WC(qJ,1),Nve,2,6,[Qwe,Rwe]),b);e.e=h;return true;case 77:return PA(a,b,e,h,g);case 76:return RA(a,b,e,h,g);case 69:return NA(a,b,g,e);case 99:return QA(a,b,g,e);case 97:h=EA(a,g,cD(WC(qJ,1),Nve,2,6,['AM','PM']),b);e.b=h;return true;case 121:return TA(a,b,g,h,c,e);case 100:if(h<=0){return false}e.c=h;return true;case 83:if(h<0){return false}return OA(h,g,b[0],e);case 104:h==12&&(h=0);case 75:case 72:if(h<0){return false}e.f=h;e.g=false;return true;case 107:if(h<0){return false}e.f=h;e.g=true;return true;case 109:if(h<0){return false}e.j=h;return true;case 115:if(h<0){return false}e.n=h;return true;case 90:if(g<a.length&&(BFb(g,a.length),a.charCodeAt(g)==90)){++b[0];e.o=0;return true}case 122:case 118:return SA(a,g,b,e);default:return false;}} +function YQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=b.c.length;e=new sQc(a.a,c,null,null);B=$C(iE,vxe,28,t,15,1);p=$C(iE,vxe,28,t,15,1);o=$C(iE,vxe,28,t,15,1);q=0;for(h=0;h<t;h++){p[h]=lve;o[h]=qwe}for(i=0;i<t;i++){d=(tFb(i,b.c.length),RD(b.c[i],185));B[i]=qQc(d);B[q]>B[i]&&(q=i);for(l=new Anb(a.a.b);l.a<l.c.c.length;){k=RD(ynb(l),30);for(s=new Anb(k.a);s.a<s.c.c.length;){r=RD(ynb(s),10);w=Kfb(d.p[r.p])+Kfb(d.d[r.p]);p[i]=$wnd.Math.min(p[i],w);o[i]=$wnd.Math.max(o[i],w+r.o.b)}}}A=$C(iE,vxe,28,t,15,1);for(j=0;j<t;j++){(tFb(j,b.c.length),RD(b.c[j],185)).o==(EQc(),CQc)?(A[j]=p[q]-p[j]):(A[j]=o[q]-o[j])}f=$C(iE,vxe,28,t,15,1);for(n=new Anb(a.a.b);n.a<n.c.c.length;){m=RD(ynb(n),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);for(g=0;g<t;g++){f[g]=Kfb((tFb(g,b.c.length),RD(b.c[g],185)).p[u.p])+Kfb((tFb(g,b.c.length),RD(b.c[g],185)).d[u.p])+A[g]}bFb(f,heb(iob.prototype.Me,iob,[]));e.p[u.p]=(f[1]+f[2])/2;e.d[u.p]=0}}return e} +function X6b(a,b,c){var d,e,f,g,h;d=b.i;f=a.i.o;e=a.i.d;h=a.n;g=xjd(cD(WC(l3,1),Nve,8,0,[h,a.a]));switch(a.j.g){case 1:SKb(b,(vLb(),sLb));d.d=-e.d-c-d.a;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){RKb(b,(EKb(),DKb));d.c=g.a-Kfb(UD(mQb(a,ywc)))-c-d.b}else{RKb(b,(EKb(),CKb));d.c=g.a+Kfb(UD(mQb(a,ywc)))+c}break;case 2:RKb(b,(EKb(),CKb));d.c=f.a+e.c+c;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){SKb(b,(vLb(),sLb));d.d=g.b-Kfb(UD(mQb(a,ywc)))-c-d.a}else{SKb(b,(vLb(),uLb));d.d=g.b+Kfb(UD(mQb(a,ywc)))+c}break;case 3:SKb(b,(vLb(),uLb));d.d=f.b+e.a+c;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){RKb(b,(EKb(),DKb));d.c=g.a-Kfb(UD(mQb(a,ywc)))-c-d.b}else{RKb(b,(EKb(),CKb));d.c=g.a+Kfb(UD(mQb(a,ywc)))+c}break;case 4:RKb(b,(EKb(),DKb));d.c=-e.b-c-d.b;if(RD(RD(Vmb(b.d,0),187).of((Ywc(),swc)),290)==(Pnd(),Lnd)){SKb(b,(vLb(),sLb));d.d=g.b-Kfb(UD(mQb(a,ywc)))-c-d.a}else{SKb(b,(vLb(),uLb));d.d=g.b+Kfb(UD(mQb(a,ywc)))+c}}} +function Q8c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;c.Ug(AFe,1);!b.a&&(b.a=new C5d(J4,b,10,11));d=Kfb(UD(Gxd(b,(X7c(),x7c))));k=Kfb(UD(Gxd(b,Q7c)));m=RD(Gxd(b,N7c),107);n=new m9c(d,k);f=l9c(n,b,m);P8c(b,n);h=RD(Gxd(b,K7c),17).a;while(h>1){e=N8c(b);l=f.g;o=RD(Gxd(b,N7c),107);p=Kfb(UD(Gxd(b,x7c)));(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i>1&&Kfb(UD(Gxd(b,(X6c(),T6c))))!=oxe&&(f.c+(o.b+o.c))/(f.b+(o.d+o.a))<p?Ixd(e,(X6c(),W6c),Kfb(UD(Gxd(b,W6c)))+Kfb(UD(Gxd(b,T6c)))):(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i>1&&Kfb(UD(Gxd(b,(X6c(),S6c))))!=oxe&&(f.c+(o.b+o.c))/(f.b+(o.d+o.a))>p&&Ixd(e,(X6c(),W6c),$wnd.Math.max(Kfb(UD(Gxd(b,U6c))),Kfb(UD(Gxd(e,W6c)))-Kfb(UD(Gxd(b,S6c)))));n=new m9c(d,k);i=l9c(n,e,m);j=i.g;if(j>=l&&j==j){for(g=0;g<(!e.a&&(e.a=new C5d(J4,e,10,11)),e.a).i;g++){O8c(a,RD(QHd((!e.a&&(e.a=new C5d(J4,e,10,11)),e.a),g),27),RD(QHd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),g),27))}P8c(b,n);jad(f,i.c);iad(f,i.b)}--h}Ixd(b,(X6c(),N6c),f.b);Ixd(b,O6c,f.c);c.Vg()} +function fHc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;b.Ug('Interactive node layering',1);c=new bnb;for(m=new Anb(a.a);m.a<m.c.c.length;){k=RD(ynb(m),10);i=k.n.a;h=i+k.o.a;h=$wnd.Math.max(i+1,h);s=new Jkb(c,0);d=null;while(s.b<s.d.gc()){q=(sFb(s.b<s.d.gc()),RD(s.d.Xb(s.c=s.b++),578));if(q.c>=h){sFb(s.b>0);s.a.Xb(s.c=--s.b);break}else if(q.a>i){if(!d){Rmb(q.b,k);q.c=$wnd.Math.min(q.c,i);q.a=$wnd.Math.max(q.a,h);d=q}else{Tmb(d.b,q.b);d.a=$wnd.Math.max(d.a,q.a);Ckb(s)}}}if(!d){d=new jHc;d.c=i;d.a=h;Ikb(s,d);Rmb(d.b,k)}}g=a.b;j=0;for(r=new Anb(c);r.a<r.c.c.length;){q=RD(ynb(r),578);e=new R4b(a);e.p=j++;ZEb(g.c,e);for(n=new Anb(q.b);n.a<n.c.c.length;){k=RD(ynb(n),10);g3b(k,e);k.p=0}}for(l=new Anb(a.a);l.a<l.c.c.length;){k=RD(ynb(l),10);if(k.p==0){p=eHc(k,a);while(p.a.gc()!=0){o=RD(p.a.ec().Kc().Pb(),10);p.a.Bc(o)!=null;ye(p,eHc(o,a))}}}f=new Jkb(g,0);while(f.b<f.d.gc()){(sFb(f.b<f.d.gc()),RD(f.d.Xb(f.c=f.b++),30)).a.c.length==0&&Ckb(f)}a.a.c.length=0;b.Vg()} +function grd(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=0;D=0;for(i=new Anb(a);i.a<i.c.c.length;){h=RD(ynb(i),27);Dsd(h);n=$wnd.Math.max(n,h.g);D+=h.g*h.f}o=D/a.c.length;C=ard(a,o);D+=a.c.length*C;n=$wnd.Math.max(n,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;m=0;k=c.b+c.c;B=new Yub;Mub(B,sgb(0));w=new Yub;j=new Jkb(a,0);while(j.b<j.d.gc()){h=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),27));G=h.g;l=h.f;if(H+G>n){if(f){Oub(w,m);Oub(B,sgb(j.b-1))}H=c.b;I+=m+b;m=0;k=$wnd.Math.max(k,c.b+c.c+G)}Dyd(h,H);Eyd(h,I);k=$wnd.Math.max(k,H+G+c.c);m=$wnd.Math.max(m,l);H+=G+b}k=$wnd.Math.max(k,d);F=I+m+c.a;if(F<e){m+=e-F;F=e}if(f){H=c.b;j=new Jkb(a,0);Oub(B,sgb(a.c.length));A=Sub(B,0);r=RD(evb(A),17).a;Oub(w,m);v=Sub(w,0);u=0;while(j.b<j.d.gc()){if(j.b==r){H=c.b;u=Kfb(UD(evb(v)));r=RD(evb(A),17).a}h=(sFb(j.b<j.d.gc()),RD(j.d.Xb(j.c=j.b++),27));s=h.f;Ayd(h,u);p=u;if(j.b==r){q=k-H-c.c;t=h.g;Cyd(h,q);Jsd(h,new rjd(q,p),new rjd(t,s))}H+=h.g+b}}return new rjd(k,F)} +function h0b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;b.Ug('Compound graph postprocessor',1);c=Heb(TD(mQb(a,(yCc(),mCc))));h=RD(mQb(a,(Ywc(),_vc)),229);k=new _sb;for(r=h.ec().Kc();r.Ob();){q=RD(r.Pb(),18);g=new dnb(h.cc(q));yob();_mb(g,new M0b(a));v=H0b((tFb(0,g.c.length),RD(g.c[0],249)));A=I0b(RD(Vmb(g,g.c.length-1),249));t=v.i;n2b(A.i,t)?(s=t.e):(s=Y2b(t));l=i0b(q,g);Xub(q.a);m=null;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),249);p=new pjd;e2b(p,e.a,s);n=e.b;d=new Ejd;Ajd(d,0,n.a);Cjd(d,p);u=new sjd(K3b(n.c));w=new sjd(K3b(n.d));$id(u,p);$id(w,p);if(m){d.b==0?(o=w):(o=(sFb(d.b!=0),RD(d.a.a.c,8)));B=$wnd.Math.abs(m.a-o.a)>Vze;C=$wnd.Math.abs(m.b-o.b)>Vze;(!c&&B&&C||c&&(B||C))&&Mub(q.a,u)}ye(q.a,d);d.b==0?(m=u):(m=(sFb(d.b!=0),RD(d.c.b.c,8)));j0b(n,l,p);if(I0b(e)==A){if(Y2b(A.i)!=e.a){p=new pjd;e2b(p,Y2b(A.i),s)}pQb(q,Wwc,p)}k0b(n,q,s);k.a.zc(n,k)}Y0b(q,v);Z0b(q,A)}for(j=k.a.ec().Kc();j.Ob();){i=RD(j.Pb(),18);Y0b(i,null);Z0b(i,null)}b.Vg()} +function lXc(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=RD(mQb(a,(h_c(),H$c)),88);k=e==(Cmd(),ymd)||e==zmd?xmd:zmd;c=RD(zDb(CDb(new SDb(null,new Swb(a.b,16)),new $Xc),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);i=RD(zDb(GDb(c.Oc(),new aYc(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);i.Gc(RD(zDb(GDb(c.Oc(),new cYc(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),16));i.jd(new eYc(k));m=new yAb(new iYc(e));d=new Tsb;for(h=i.Kc();h.Ob();){g=RD(h.Pb(),240);j=RD(g.a,39);if(Heb(TD(g.c))){m.a.zc(j,(Geb(),Eeb))==null;(new zAb(m.a.Zc(j,false))).a.gc()>0&&Zjb(d,j,RD((new zAb(m.a.Zc(j,false))).a.Vc(),39));(new zAb(m.a.ad(j,true))).a.gc()>1&&Zjb(d,nXc(m,j),j)}else{if((new zAb(m.a.Zc(j,false))).a.gc()>0){f=RD((new zAb(m.a.Zc(j,false))).a.Vc(),39);dE(f)===dE(Wd(qtb(d.f,j)))&&RD(mQb(j,(q$c(),TZc)),15).Fc(f)}if((new zAb(m.a.ad(j,true))).a.gc()>1){l=nXc(m,j);dE(Wd(qtb(d.f,l)))===dE(j)&&RD(mQb(l,(q$c(),TZc)),15).Fc(j)}m.a.Bc(j)!=null}}} +function BTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;if(a.gc()==1){return RD(a.Xb(0),235)}else if(a.gc()<=0){return new gUb}for(e=a.Kc();e.Ob();){c=RD(e.Pb(),235);o=0;k=lve;l=lve;i=qwe;j=qwe;for(n=new Anb(c.e);n.a<n.c.c.length;){m=RD(ynb(n),153);o+=RD(mQb(m,(yVb(),lVb)),17).a;k=$wnd.Math.min(k,m.d.a-m.e.a/2);l=$wnd.Math.min(l,m.d.b-m.e.b/2);i=$wnd.Math.max(i,m.d.a+m.e.a/2);j=$wnd.Math.max(j,m.d.b+m.e.b/2)}pQb(c,(yVb(),lVb),sgb(o));pQb(c,(JVb(),GVb),new rjd(k,l));pQb(c,FVb,new rjd(i,j))}yob();a.jd(new FTb);p=new gUb;kQb(p,RD(a.Xb(0),96));h=0;s=0;for(f=a.Kc();f.Ob();){c=RD(f.Pb(),235);q=ojd(ajd(RD(mQb(c,(JVb(),FVb)),8)),RD(mQb(c,GVb),8));h=$wnd.Math.max(h,q.a);s+=q.a*q.b}h=$wnd.Math.max(h,$wnd.Math.sqrt(s)*Kfb(UD(mQb(p,(yVb(),ZUb)))));r=Kfb(UD(mQb(p,rVb)));t=0;u=0;g=0;b=r;for(d=a.Kc();d.Ob();){c=RD(d.Pb(),235);q=ojd(ajd(RD(mQb(c,(JVb(),FVb)),8)),RD(mQb(c,GVb),8));if(t+q.a>h){t=0;u+=g+r;g=0}ATb(p,c,t,u);b=$wnd.Math.max(b,t+q.a);g=$wnd.Math.max(g,q.b);t+=q.a+r}return p} +function Aqe(a){zqe();var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;if(a==null)return null;f=Ahb(a);o=Dqe(f);if(o%4!=0){return null}p=o/4|0;if(p==0)return $C(gE,YHe,28,0,15,1);l=null;b=0;c=0;d=0;e=0;g=0;h=0;i=0;j=0;n=0;m=0;k=0;l=$C(gE,YHe,28,p*3,15,1);for(;n<p-1;n++){if(!Cqe(g=f[k++])||!Cqe(h=f[k++])||!Cqe(i=f[k++])||!Cqe(j=f[k++]))return null;b=xqe[g];c=xqe[h];d=xqe[i];e=xqe[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}if(!Cqe(g=f[k++])||!Cqe(h=f[k++])){return null}b=xqe[g];c=xqe[h];i=f[k++];j=f[k++];if(xqe[i]==-1||xqe[j]==-1){if(i==61&&j==61){if((c&15)!=0)return null;q=$C(gE,YHe,28,n*3+1,15,1);hib(l,0,q,0,n*3);q[m]=(b<<2|c>>4)<<24>>24;return q}else if(i!=61&&j==61){d=xqe[i];if((d&3)!=0)return null;q=$C(gE,YHe,28,n*3+2,15,1);hib(l,0,q,0,n*3);q[m++]=(b<<2|c>>4)<<24>>24;q[m]=((c&15)<<4|d>>2&15)<<24>>24;return q}else{return null}}else{d=xqe[i];e=xqe[j];l[m++]=(b<<2|c>>4)<<24>>24;l[m++]=((c&15)<<4|d>>2&15)<<24>>24;l[m++]=(d<<6|e)<<24>>24}return l} +function wfc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;b.Ug(qBe,1);o=RD(mQb(a,(yCc(),yAc)),223);for(e=new Anb(a.b);e.a<e.c.c.length;){d=RD(ynb(e),30);j=t2b(d.a);for(g=j,h=0,i=g.length;h<i;++h){f=g[h];if(f.k!=(r3b(),q3b)){continue}if(o==(Ymd(),Wmd)){for(l=new Anb(f.j);l.a<l.c.c.length;){k=RD(ynb(l),12);k.e.c.length==0||zfc(k);k.g.c.length==0||Afc(k)}}else if(ZD(mQb(f,(Ywc(),Awc)),18)){q=RD(mQb(f,Awc),18);r=RD(e3b(f,(qpd(),ppd)).Kc().Pb(),12);s=RD(e3b(f,Xod).Kc().Pb(),12);t=RD(mQb(r,Awc),12);u=RD(mQb(s,Awc),12);Y0b(q,u);Z0b(q,t);v=new sjd(s.i.n);v.a=xjd(cD(WC(l3,1),Nve,8,0,[u.i.n,u.n,u.a])).a;Mub(q.a,v);v=new sjd(r.i.n);v.a=xjd(cD(WC(l3,1),Nve,8,0,[t.i.n,t.n,t.a])).a;Mub(q.a,v)}else{if(f.j.c.length>=2){p=true;m=new Anb(f.j);c=RD(ynb(m),12);n=null;while(m.a<m.c.c.length){n=c;c=RD(ynb(m),12);if(!pb(mQb(n,Awc),mQb(c,Awc))){p=false;break}}}else{p=false}for(l=new Anb(f.j);l.a<l.c.c.length;){k=RD(ynb(l),12);k.e.c.length==0||xfc(k,p);k.g.c.length==0||yfc(k,p)}}g3b(f,null)}}b.Vg()} +function LQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;for(h=new Anb(a.a.b);h.a<h.c.c.length;){f=RD(ynb(h),30);for(t=new Anb(f.a);t.a<t.c.c.length;){s=RD(ynb(t),10);b.g[s.p]=s;b.a[s.p]=s;b.d[s.p]=0}}i=a.a.b;b.c==(wQc(),uQc)&&(i=hv(i));for(g=i.Kc();g.Ob();){f=RD(g.Pb(),30);n=-1;m=f.a;if(b.o==(EQc(),DQc)){n=lve;m=hv(m)}for(v=m.Kc();v.Ob();){u=RD(v.Pb(),10);l=null;b.c==uQc?(l=RD(Vmb(a.b.f,u.p),15)):(l=RD(Vmb(a.b.b,u.p),15));if(l.gc()>0){d=l.gc();j=eE($wnd.Math.floor((d+1)/2))-1;e=eE($wnd.Math.ceil((d+1)/2))-1;if(b.o==DQc){for(k=e;k>=j;k--){if(b.a[u.p]==u){p=RD(l.Xb(k),42);o=RD(p.a,10);if(!Zsb(c,p.b)&&n>a.b.e[o.p]){b.a[o.p]=u;b.g[u.p]=b.g[o.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Geb(),Heb(b.f[b.g[u.p].p])&u.k==(r3b(),o3b)?true:false);n=a.b.e[o.p]}}}}else{for(k=j;k<=e;k++){if(b.a[u.p]==u){r=RD(l.Xb(k),42);q=RD(r.a,10);if(!Zsb(c,r.b)&&n<a.b.e[q.p]){b.a[q.p]=u;b.g[u.p]=b.g[q.p];b.a[u.p]=b.g[u.p];b.f[b.g[u.p].p]=(Geb(),Heb(b.f[b.g[u.p].p])&u.k==(r3b(),o3b)?true:false);n=a.b.e[q.p]}}}}}}}} +function iOc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;t=a.c[(tFb(0,b.c.length),RD(b.c[0],18)).p];A=a.c[(tFb(1,b.c.length),RD(b.c[1],18)).p];if(t.a.e.e-t.a.a-(t.b.e.e-t.b.a)==0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)==0){return false}r=t.b.e.f;if(!ZD(r,10)){return false}q=RD(r,10);v=a.i[q.p];w=!q.c?-1:Wmb(q.c.a,q,0);f=oxe;if(w>0){e=RD(Vmb(q.c.a,w-1),10);g=a.i[e.p];B=$wnd.Math.ceil(bFc(a.n,e,q));f=v.a.e-q.d.d-(g.a.e+e.o.b+e.d.a)-B}j=oxe;if(w<q.c.a.c.length-1){i=RD(Vmb(q.c.a,w+1),10);k=a.i[i.p];B=$wnd.Math.ceil(bFc(a.n,i,q));j=k.a.e-i.d.d-(v.a.e+q.o.b+q.d.a)-B}if(c&&(Zy(),bz(vEe),$wnd.Math.abs(f-j)<=vEe||f==j||isNaN(f)&&isNaN(j))){return true}d=GOc(t.a);h=-GOc(t.b);l=-GOc(A.a);s=GOc(A.b);p=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)>0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)<0;o=t.a.e.e-t.a.a-(t.b.e.e-t.b.a)<0&&A.a.e.e-A.a.a-(A.b.e.e-A.b.a)>0;n=t.a.e.e+t.b.a<A.b.e.e+A.a.a;m=t.a.e.e+t.b.a>A.b.e.e+A.a.a;u=0;!p&&!o&&(m?f+l>0?(u=l):j-d>0&&(u=d):n&&(f+h>0?(u=h):j-s>0&&(u=s)));v.a.e+=u;v.b&&(v.d.e+=u);return false} +function OJb(a,b,c){var d,e,f,g,h,i,j,k,l,m;d=new Uid(b.Lf().a,b.Lf().b,b.Mf().a,b.Mf().b);e=new Tid;if(a.c){for(g=new Anb(b.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);e.c=f.Lf().a+b.Lf().a;e.d=f.Lf().b+b.Lf().b;e.b=f.Mf().a;e.a=f.Mf().b;Sid(d,e)}}for(j=new Anb(b.Xf());j.a<j.c.c.length;){i=RD(ynb(j),852);k=i.Lf().a+b.Lf().a;l=i.Lf().b+b.Lf().b;if(a.e){e.c=k;e.d=l;e.b=i.Mf().a;e.a=i.Mf().b;Sid(d,e)}if(a.d){for(g=new Anb(i.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);e.c=f.Lf().a+k;e.d=f.Lf().b+l;e.b=f.Mf().a;e.a=f.Mf().b;Sid(d,e)}}if(a.b){m=new rjd(-c,-c);if(RD(b.of((umd(),Lld)),181).Hc((Pod(),Nod))){for(g=new Anb(i.Rf());g.a<g.c.c.length;){f=RD(ynb(g),187);m.a+=f.Mf().a+c;m.b+=f.Mf().b+c}}m.a=$wnd.Math.max(m.a,0);m.b=$wnd.Math.max(m.b,0);MJb(d,i.Wf(),i.Uf(),b,i,m,c)}}a.b&&MJb(d,b.Wf(),b.Uf(),b,null,null,c);h=new S2b(b.Vf());h.d=$wnd.Math.max(0,b.Lf().b-d.d);h.a=$wnd.Math.max(0,d.d+d.a-(b.Lf().b+b.Mf().b));h.b=$wnd.Math.max(0,b.Lf().a-d.c);h.c=$wnd.Math.max(0,d.c+d.b-(b.Lf().a+b.Mf().a));b.Zf(h)} +function Mz(){var a=['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007','\\b','\\t','\\n','\\u000B','\\f','\\r','\\u000E','\\u000F','\\u0010','\\u0011','\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019','\\u001A','\\u001B','\\u001C','\\u001D','\\u001E','\\u001F'];a[34]='\\"';a[92]='\\\\';a[173]='\\u00ad';a[1536]='\\u0600';a[1537]='\\u0601';a[1538]='\\u0602';a[1539]='\\u0603';a[1757]='\\u06dd';a[1807]='\\u070f';a[6068]='\\u17b4';a[6069]='\\u17b5';a[8203]='\\u200b';a[8204]='\\u200c';a[8205]='\\u200d';a[8206]='\\u200e';a[8207]='\\u200f';a[8232]='\\u2028';a[8233]='\\u2029';a[8234]='\\u202a';a[8235]='\\u202b';a[8236]='\\u202c';a[8237]='\\u202d';a[8238]='\\u202e';a[8288]='\\u2060';a[8289]='\\u2061';a[8290]='\\u2062';a[8291]='\\u2063';a[8292]='\\u2064';a[8298]='\\u206a';a[8299]='\\u206b';a[8300]='\\u206c';a[8301]='\\u206d';a[8302]='\\u206e';a[8303]='\\u206f';a[65279]='\\ufeff';a[65529]='\\ufff9';a[65530]='\\ufffa';a[65531]='\\ufffb';return a} +function zVb(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,Zze),'ELK Force'),'Force-based algorithm provided by the Eclipse Layout Kernel. Implements methods that follow physical analogies by simulating forces that move the nodes into a balanced distribution. Currently the original Eades model and the Fruchterman - Reingold model are supported.'),new CVb),Zze),ysb((aGd(),ZFd),cD(WC(T5,1),jwe,245,0,[XFd])))));Agd(a,Zze,$ze,sgb(1));Agd(a,Zze,_ze,80);Agd(a,Zze,aAe,5);Agd(a,Zze,Dze,Yze);Agd(a,Zze,bAe,sgb(1));Agd(a,Zze,cAe,(Geb(),true));Agd(a,Zze,Eze,iVb);Agd(a,Zze,dAe,iGd(_Ub));Agd(a,Zze,eAe,iGd(jVb));Agd(a,Zze,fAe,false);Agd(a,Zze,gAe,iGd(gVb));Agd(a,Zze,hAe,iGd(eVb));Agd(a,Zze,iAe,iGd(fVb));Agd(a,Zze,jAe,iGd(dVb));Agd(a,Zze,kAe,iGd(cVb));Agd(a,Zze,lAe,iGd(kVb));Agd(a,Zze,Rze,iGd(bVb));Agd(a,Zze,Uze,iGd(sVb));Agd(a,Zze,Sze,iGd(aVb));Agd(a,Zze,Wze,iGd(nVb));Agd(a,Zze,Tze,iGd(oVb));Agd(a,Zze,mAe,iGd(vVb));Agd(a,Zze,nAe,iGd(xVb));Agd(a,Zze,oAe,iGd(uVb));Agd(a,Zze,pAe,iGd(tVb));Agd(a,Zze,qAe,wVb)} +function hte(a,b){Vse();var c,d,e,f,g,h,i,j,k,l,m,n,o;if(bkb(wse)==0){l=$C(qdb,Nve,122,yse.length,0,1);for(g=0;g<l.length;g++){l[g]=(++Use,new xte(4))}d=new Rhb;for(f=0;f<vse.length;f++){k=(++Use,new xte(4));if(f<84){h=f*2;n=(BFb(h,XLe.length),XLe.charCodeAt(h));m=(BFb(h+1,XLe.length),XLe.charCodeAt(h+1));rte(k,n,m)}else{h=(f-84)*2;rte(k,zse[h],zse[h+1])}i=vse[f];lhb(i,'Specials')&&rte(k,65520,65533);if(lhb(i,VLe)){rte(k,983040,1048573);rte(k,1048576,1114109)}$jb(wse,i,k);$jb(xse,i,yte(k));j=d.a.length;0<j?(d.a=zhb(d.a,0,0)):0>j&&(d.a+=Hhb($C(hE,zwe,28,-j,15,1)));d.a+='Is';if(qhb(i,Fhb(32))>=0){for(e=0;e<i.length;e++){BFb(e,i.length);i.charCodeAt(e)!=32&&Jhb(d,(BFb(e,i.length),i.charCodeAt(e)))}}else{d.a+=''+i}lte(d.a,i,true)}lte(WLe,'Cn',false);lte(YLe,'Cn',true);c=(++Use,new xte(4));rte(c,0,MLe);$jb(wse,'ALL',c);$jb(xse,'ALL',yte(c));!Ase&&(Ase=new Tsb);$jb(Ase,WLe,WLe);!Ase&&(Ase=new Tsb);$jb(Ase,YLe,YLe);!Ase&&(Ase=new Tsb);$jb(Ase,'ALL','ALL')}o=b?RD(Xjb(wse,a),138):RD(Xjb(xse,a),138);return o} +function i_c(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,ZEe),'ELK Mr. Tree'),"Tree-based algorithm provided by the Eclipse Layout Kernel. Computes a spanning tree of the input graph and arranges all nodes according to the resulting parent-children hierarchy. I pity the fool who doesn't use Mr. Tree Layout."),new l_c),$Ee),xsb((aGd(),WFd)))));Agd(a,ZEe,Eze,U$c);Agd(a,ZEe,_ze,20);Agd(a,ZEe,ADe,3);Agd(a,ZEe,Dze,Yze);Agd(a,ZEe,$ze,sgb(1));Agd(a,ZEe,cAe,(Geb(),true));Agd(a,ZEe,LDe,iGd(G$c));Agd(a,ZEe,PDe,I$c);Agd(a,ZEe,dAe,iGd(L$c));Agd(a,ZEe,iEe,iGd(M$c));Agd(a,ZEe,jAe,iGd(O$c));Agd(a,ZEe,hAe,iGd(P$c));Agd(a,ZEe,CAe,iGd(Q$c));Agd(a,ZEe,iAe,iGd(R$c));Agd(a,ZEe,kAe,iGd(N$c));Agd(a,ZEe,gAe,iGd(S$c));Agd(a,ZEe,lAe,iGd(V$c));Agd(a,ZEe,VEe,iGd(g_c));Agd(a,ZEe,XEe,iGd(Y$c));Agd(a,ZEe,mAe,iGd(c_c));Agd(a,ZEe,nAe,iGd(e_c));Agd(a,ZEe,oAe,iGd(b_c));Agd(a,ZEe,pAe,iGd(a_c));Agd(a,ZEe,qAe,d_c);Agd(a,ZEe,UEe,iGd(W$c));Agd(a,ZEe,WEe,iGd(K$c));Agd(a,ZEe,TEe,iGd(f_c));Agd(a,ZEe,REe,iGd(F$c));Agd(a,ZEe,SEe,iGd(J$c))} +function rNb(a,b){var c,d,e,f,g,h,i,j,k,l,m;j=RD(RD(Qc(a.r,b),21),87);g=UMb(a,b);c=a.u.Hc((Pod(),Jod));for(i=j.Kc();i.Ob();){h=RD(i.Pb(),117);if(!h.c||h.c.d.c.length<=0){continue}m=h.b.Mf();k=h.c;l=k.i;l.b=(f=k.n,k.e.a+f.b+f.c);l.a=(e=k.n,k.e.b+e.d+e.a);switch(b.g){case 1:if(h.a){l.c=(m.a-l.b)/2;RKb(k,(EKb(),BKb))}else if(g||c){l.c=-l.b-a.s;RKb(k,(EKb(),DKb))}else{l.c=m.a+a.s;RKb(k,(EKb(),CKb))}l.d=-l.a-a.t;SKb(k,(vLb(),sLb));break;case 3:if(h.a){l.c=(m.a-l.b)/2;RKb(k,(EKb(),BKb))}else if(g||c){l.c=-l.b-a.s;RKb(k,(EKb(),DKb))}else{l.c=m.a+a.s;RKb(k,(EKb(),CKb))}l.d=m.b+a.t;SKb(k,(vLb(),uLb));break;case 2:if(h.a){d=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(m.b-d)/2;SKb(k,(vLb(),tLb))}else if(g||c){l.d=-l.a-a.t;SKb(k,(vLb(),sLb))}else{l.d=m.b+a.t;SKb(k,(vLb(),uLb))}l.c=m.a+a.s;RKb(k,(EKb(),CKb));break;case 4:if(h.a){d=a.v?l.a:RD(Vmb(k.d,0),187).Mf().b;l.d=(m.b-d)/2;SKb(k,(vLb(),tLb))}else if(g||c){l.d=-l.a-a.t;SKb(k,(vLb(),sLb))}else{l.d=m.b+a.t;SKb(k,(vLb(),uLb))}l.c=-l.b-a.s;RKb(k,(EKb(),DKb));}g=false}} +function t6b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;m=false;l=false;if(Dod(RD(mQb(d,(yCc(),BBc)),101))){g=false;h=false;t:for(o=new Anb(d.j);o.a<o.c.c.length;){n=RD(ynb(o),12);for(q=Fl(Al(cD(WC(cJ,1),rve,20,0,[new T3b(n),new _3b(n)])));gs(q);){p=RD(hs(q),12);if(!Heb(TD(mQb(p.i,Uzc)))){if(n.j==(qpd(),Yod)){g=true;break t}if(n.j==npd){h=true;break t}}}}m=h&&!g;l=g&&!h}if(!m&&!l&&d.b.c.length!=0){k=0;for(j=new Anb(d.b);j.a<j.c.c.length;){i=RD(ynb(j),72);k+=i.n.b+i.o.b/2}k/=d.b.c.length;s=k>=d.o.b/2}else{s=!l}if(s){r=RD(mQb(d,(Ywc(),Xwc)),15);if(!r){f=new bnb;pQb(d,Xwc,f)}else if(m){f=r}else{e=RD(mQb(d,Vvc),15);if(!e){f=new bnb;pQb(d,Vvc,f)}else{r.gc()<=e.gc()?(f=r):(f=e)}}}else{e=RD(mQb(d,(Ywc(),Vvc)),15);if(!e){f=new bnb;pQb(d,Vvc,f)}else if(l){f=e}else{r=RD(mQb(d,Xwc),15);if(!r){f=new bnb;pQb(d,Xwc,f)}else{e.gc()<=r.gc()?(f=e):(f=r)}}}f.Fc(a);pQb(a,(Ywc(),Xvc),c);if(b.d==c){Z0b(b,null);c.e.c.length+c.g.c.length==0&&P3b(c,null);u6b(c)}else{Y0b(b,null);c.e.c.length+c.g.c.length==0&&P3b(c,null)}Xub(b.a)} +function GHc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;c.Ug('MinWidth layering',1);n=b.b;A=b.a;I=RD(mQb(b,(yCc(),WAc)),17).a;h=RD(mQb(b,XAc),17).a;a.b=Kfb(UD(mQb(b,TBc)));a.d=oxe;for(u=new Anb(A);u.a<u.c.c.length;){s=RD(ynb(u),10);if(s.k!=(r3b(),p3b)){continue}D=s.o.b;a.d=$wnd.Math.min(a.d,D)}a.d=$wnd.Math.max(1,a.d);B=A.c.length;a.c=$C(kE,Pwe,28,B,15,1);a.f=$C(kE,Pwe,28,B,15,1);a.e=$C(iE,vxe,28,B,15,1);j=0;a.a=0;for(v=new Anb(A);v.a<v.c.c.length;){s=RD(ynb(v),10);s.p=j++;a.c[s.p]=EHc(Z2b(s));a.f[s.p]=EHc(a3b(s));a.e[s.p]=s.o.b/a.d;a.a+=a.e[s.p]}a.b/=a.d;a.a/=B;w=FHc(A);_mb(A,Fob(new MHc(a)));p=oxe;o=lve;g=null;H=I;G=I;f=h;e=h;if(I<0){H=RD(BHc.a.Id(),17).a;G=RD(BHc.b.Id(),17).a}if(h<0){f=RD(AHc.a.Id(),17).a;e=RD(AHc.b.Id(),17).a}for(F=H;F<=G;F++){for(d=f;d<=e;d++){C=DHc(a,F,d,A,w);r=Kfb(UD(C.a));m=RD(C.b,15);q=m.gc();if(r<p||r==p&&q<o){p=r;o=q;g=m}}}for(l=g.Kc();l.Ob();){k=RD(l.Pb(),15);i=new R4b(b);for(t=k.Kc();t.Ob();){s=RD(t.Pb(),10);g3b(s,i)}ZEb(n.c,i)}Eob(n);A.c.length=0;c.Vg()} +function UUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;c.Ug('Spline edge routing',1);if(b.b.c.length==0){b.f.a=0;c.Vg();return}s=Kfb(UD(mQb(b,(yCc(),cCc))));h=Kfb(UD(mQb(b,XBc)));g=Kfb(UD(mQb(b,UBc)));r=RD(mQb(b,DAc),350);B=r==(lFc(),kFc);A=Kfb(UD(mQb(b,EAc)));a.d=b;a.j.c.length=0;a.a.c.length=0;akb(a.k);i=RD(Vmb(b.b,0),30);k=ar(i.a,(dSc(),bSc));o=RD(Vmb(b.b,b.b.c.length-1),30);l=ar(o.a,bSc);p=new Anb(b.b);q=null;G=0;do{t=p.a<p.c.c.length?RD(ynb(p),30):null;IUc(a,q,t);LUc(a);C=cwb(nDb(IDb(CDb(new SDb(null,new Swb(a.i,16)),new jVc),new lVc)));F=0;u=G;m=!q||k&&q==i;n=!t||l&&t==o;if(C>0){j=0;!!q&&(j+=h);j+=(C-1)*g;!!t&&(j+=h);B&&!!t&&(j=$wnd.Math.max(j,JUc(t,g,s,A)));if(j<s&&!m&&!n){F=(s-j)/2;j=s}u+=j}else !m&&!n&&(u+=s);!!t&&p2b(t,u);for(w=new Anb(a.i);w.a<w.c.c.length;){v=RD(ynb(w),131);v.a.c=G;v.a.b=u-G;v.F=F;v.p=!q}Tmb(a.a,a.i);G=u;!!t&&(G+=t.c.a);q=t;m=n}while(t);for(e=new Anb(a.j);e.a<e.c.c.length;){d=RD(ynb(e),18);f=PUc(a,d);pQb(d,(Ywc(),Rwc),f);D=RUc(a,d);pQb(d,Twc,D)}b.f.a=G;a.d=null;c.Vg()} +function Z9b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;a.b=b;a.a=RD(mQb(b,(yCc(),JAc)),17).a;a.c=RD(mQb(b,LAc),17).a;a.c==0&&(a.c=lve);q=new Jkb(b.b,0);while(q.b<q.d.gc()){p=(sFb(q.b<q.d.gc()),RD(q.d.Xb(q.c=q.b++),30));h=new bnb;k=-1;u=-1;for(t=new Anb(p.a);t.a<t.c.c.length;){s=RD(ynb(t),10);if(Kr((U9b(),new is(Mr(W2b(s).a.Kc(),new ir))))>=a.a){d=V9b(a,s);k=$wnd.Math.max(k,d.b);u=$wnd.Math.max(u,d.d);Rmb(h,new Ptd(s,d))}}B=new bnb;for(j=0;j<k;++j){Qmb(B,0,(sFb(q.b>0),q.a.Xb(q.c=--q.b),C=new R4b(a.b),Ikb(q,C),sFb(q.b<q.d.gc()),q.d.Xb(q.c=q.b++),C))}for(g=new Anb(h);g.a<g.c.c.length;){e=RD(ynb(g),42);n=RD(e.b,580).a;if(!n){continue}for(m=new Anb(n);m.a<m.c.c.length;){l=RD(ynb(m),10);Y9b(a,l,S9b,B)}}c=new bnb;for(i=0;i<u;++i){Rmb(c,(D=new R4b(a.b),Ikb(q,D),D))}for(f=new Anb(h);f.a<f.c.c.length;){e=RD(ynb(f),42);A=RD(e.b,580).c;if(!A){continue}for(w=new Anb(A);w.a<w.c.c.length;){v=RD(ynb(w),10);Y9b(a,v,T9b,c)}}}r=new Jkb(b.b,0);while(r.b<r.d.gc()){o=(sFb(r.b<r.d.gc()),RD(r.d.Xb(r.c=r.b++),30));o.a.c.length==0&&Ckb(r)}} +function wLd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;p=a.i!=0;t=false;r=null;if(Mvd(a.e)){k=b.gc();if(k>0){m=k<100?null:new gLd(k);j=new $Hd(b);o=j.g;r=$C(kE,Pwe,28,k,15,1);d=0;u=new ZHd(k);for(e=0;e<a.i;++e){h=a.g[e];n=h;v:for(s=0;s<2;++s){for(i=k;--i>=0;){if(n!=null?pb(n,o[i]):dE(n)===dE(o[i])){if(r.length<=d){q=r;r=$C(kE,Pwe,28,2*r.length,15,1);hib(q,0,r,0,d)}r[d++]=e;WGd(u,o[i]);break v}}n=n;if(dE(n)===dE(h)){break}}}j=u;o=u.g;k=d;if(d>r.length){q=r;r=$C(kE,Pwe,28,d,15,1);hib(q,0,r,0,d)}if(d>0){t=true;for(f=0;f<d;++f){n=o[f];m=Kge(a,RD(n,76),m)}for(g=d;--g>=0;){THd(a,r[g])}if(d!=k){for(e=k;--e>=d;){THd(j,e)}q=r;r=$C(kE,Pwe,28,d,15,1);hib(q,0,r,0,d)}b=j}}}else{b=aHd(a,b);for(e=a.i;--e>=0;){if(b.Hc(a.g[e])){THd(a,e);t=true}}}if(t){if(r!=null){c=b.gc();l=c==1?dZd(a,4,b.Kc().Pb(),null,r[0],p):dZd(a,6,b,r,r[0],p);m=c<100?null:new gLd(c);for(e=b.Kc();e.Ob();){n=e.Pb();m=oge(a,RD(n,76),m)}if(!m){qvd(a.e,l)}else{m.nj(l);m.oj()}}else{m=tLd(b.gc());for(e=b.Kc();e.Ob();){n=e.Pb();m=oge(a,RD(n,76),m)}!!m&&m.oj()}return true}else{return false}} +function i_b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c=new p_b(b);c.a||b_b(b);j=a_b(b);i=new Tp;q=new D_b;for(p=new Anb(b.a);p.a<p.c.c.length;){o=RD(ynb(p),10);for(e=new is(Mr(a3b(o).a.Kc(),new ir));gs(e);){d=RD(hs(e),18);if(d.c.i.k==(r3b(),m3b)||d.d.i.k==m3b){k=h_b(a,d,j,q);Rc(i,f_b(k.d),k.a)}}}g=new bnb;for(t=RD(mQb(c.c,(Ywc(),ewc)),21).Kc();t.Ob();){s=RD(t.Pb(),64);n=q.c[s.g];m=q.b[s.g];h=q.a[s.g];f=null;r=null;switch(s.g){case 4:f=new Uid(a.d.a,n,j.b.a-a.d.a,m-n);r=new Uid(a.d.a,n,h,m-n);l_b(j,new rjd(f.c+f.b,f.d));l_b(j,new rjd(f.c+f.b,f.d+f.a));break;case 2:f=new Uid(j.a.a,n,a.c.a-j.a.a,m-n);r=new Uid(a.c.a-h,n,h,m-n);l_b(j,new rjd(f.c,f.d));l_b(j,new rjd(f.c,f.d+f.a));break;case 1:f=new Uid(n,a.d.b,m-n,j.b.b-a.d.b);r=new Uid(n,a.d.b,m-n,h);l_b(j,new rjd(f.c,f.d+f.a));l_b(j,new rjd(f.c+f.b,f.d+f.a));break;case 3:f=new Uid(n,j.a.b,m-n,a.c.b-j.a.b);r=new Uid(n,a.c.b-h,m-n,h);l_b(j,new rjd(f.c,f.d));l_b(j,new rjd(f.c+f.b,f.d));}if(f){l=new y_b;l.d=s;l.b=f;l.c=r;l.a=Ux(RD(Qc(i,f_b(s)),21));ZEb(g.c,l)}}Tmb(c.b,g);c.d=DZb(LZb(j));return c} +function PQc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(c.p[b.p]!=null){return}h=true;c.p[b.p]=0;g=b;p=c.o==(EQc(),CQc)?pxe:oxe;do{e=a.b.e[g.p];f=g.c.a.c.length;if(c.o==CQc&&e>0||c.o==DQc&&e<f-1){i=null;j=null;c.o==DQc?(i=RD(Vmb(g.c.a,e+1),10)):(i=RD(Vmb(g.c.a,e-1),10));j=c.g[i.p];PQc(a,j,c);p=a.e.wg(p,b,g);c.j[b.p]==b&&(c.j[b.p]=c.j[j.p]);if(c.j[b.p]==c.j[j.p]){o=bFc(a.d,g,i);if(c.o==DQc){d=Kfb(c.p[b.p]);l=Kfb(c.p[j.p])+Kfb(c.d[i.p])-i.d.d-o-g.d.a-g.o.b-Kfb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.min(l,p)}else{c.p[b.p]=$wnd.Math.min(d,$wnd.Math.min(l,p))}}else{d=Kfb(c.p[b.p]);l=Kfb(c.p[j.p])+Kfb(c.d[i.p])+i.o.b+i.d.a+o+g.d.d-Kfb(c.d[g.p]);if(h){h=false;c.p[b.p]=$wnd.Math.max(l,p)}else{c.p[b.p]=$wnd.Math.max(d,$wnd.Math.max(l,p))}}}else{o=Kfb(UD(mQb(a.a,(yCc(),bCc))));n=NQc(a,c.j[b.p]);k=NQc(a,c.j[j.p]);if(c.o==DQc){m=Kfb(c.p[b.p])+Kfb(c.d[g.p])+g.o.b+g.d.a+o-(Kfb(c.p[j.p])+Kfb(c.d[i.p])-i.d.d);TQc(n,k,m)}else{m=Kfb(c.p[b.p])+Kfb(c.d[g.p])-g.d.d-Kfb(c.p[j.p])-Kfb(c.d[i.p])-i.o.b-i.d.a-o;TQc(n,k,m)}}}else{p=a.e.wg(p,b,g)}g=c.a[g.p]}while(g!=b);qRc(a.e,b)} +function $Kc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;c=Kfb(UD(mQb(a.a.j,(yCc(),iAc))));if(c<-1||!a.a.i||Cod(RD(mQb(a.a.o,BBc),101))||b3b(a.a.o,(qpd(),Xod)).gc()<2&&b3b(a.a.o,ppd).gc()<2){return true}if(a.a.c.kg()){return false}v=0;u=0;t=new bnb;for(i=a.a.e,j=0,k=i.length;j<k;++j){h=i[j];for(m=h,n=0,p=m.length;n<p;++n){l=m[n];if(l.k==(r3b(),q3b)){ZEb(t.c,l);continue}d=a.b[l.c.p][l.p];if(l.k==m3b){d.b=1;RD(mQb(l,(Ywc(),Awc)),12).j==(qpd(),Xod)&&(u+=d.a)}else{C=b3b(l,(qpd(),ppd));C.dc()||!br(C,new lLc)?(d.c=1):(e=b3b(l,Xod),(e.dc()||!br(e,new hLc))&&(v+=d.a))}for(g=new is(Mr(a3b(l).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);v+=d.c;u+=d.b;B=f.d.i;ZKc(a,d,B)}r=Al(cD(WC(cJ,1),rve,20,0,[b3b(l,(qpd(),Yod)),b3b(l,npd)]));for(A=new is(new Il(r.a.length,r.a));gs(A);){w=RD(hs(A),12);s=RD(mQb(w,(Ywc(),Iwc)),10);if(s){v+=d.c;u+=d.b;ZKc(a,d,s)}}}for(o=new Anb(t);o.a<o.c.c.length;){l=RD(ynb(o),10);d=a.b[l.c.p][l.p];for(g=new is(Mr(a3b(l).a.Kc(),new ir));gs(g);){f=RD(hs(g),18);v+=d.c;u+=d.b;B=f.d.i;ZKc(a,d,B)}}t.c.length=0}b=v+u;q=b==0?oxe:(v-u)/b;return q>=c} +function zEd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;t=b;s=new Tp;u=new Tp;k=wDd(t,mIe);d=new OEd(a,c,s,u);QDd(d.a,d.b,d.c,d.d,k);i=(A=s.i,!A?(s.i=new zf(s,s.c)):A);for(C=i.Kc();C.Ob();){B=RD(C.Pb(),166);e=RD(Qc(s,B),21);for(p=e.Kc();p.Ob();){o=p.Pb();v=RD(Ao(a.d,o),166);if(v){h=(!B.e&&(B.e=new Yie(F4,B,10,9)),B.e);WGd(h,v)}else{g=zDd(t,uIe);m=AIe+o+BIe+g;n=m+zIe;throw Adb(new CDd(n))}}}j=(w=u.i,!w?(u.i=new zf(u,u.c)):w);for(F=j.Kc();F.Ob();){D=RD(F.Pb(),166);f=RD(Qc(u,D),21);for(r=f.Kc();r.Ob();){q=r.Pb();v=RD(Ao(a.d,q),166);if(v){l=(!D.g&&(D.g=new Yie(F4,D,9,10)),D.g);WGd(l,v)}else{g=zDd(t,uIe);m=AIe+q+BIe+g;n=m+zIe;throw Adb(new CDd(n))}}}!c.b&&(c.b=new Yie(E4,c,4,7));if(c.b.i!=0&&(!c.c&&(c.c=new Yie(E4,c,5,8)),c.c.i!=0)&&(!c.b&&(c.b=new Yie(E4,c,4,7)),c.b.i<=1&&(!c.c&&(c.c=new Yie(E4,c,5,8)),c.c.i<=1))&&(!c.a&&(c.a=new C5d(F4,c,6,6)),c.a).i==1){G=RD(QHd((!c.a&&(c.a=new C5d(F4,c,6,6)),c.a),0),166);if(!Dzd(G)&&!Ezd(G)){Kzd(G,RD(QHd((!c.b&&(c.b=new Yie(E4,c,4,7)),c.b),0),84));Lzd(G,RD(QHd((!c.c&&(c.c=new Yie(E4,c,5,8)),c.c),0),84))}}} +function QNc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;for(t=a.a,u=0,v=t.length;u<v;++u){s=t[u];j=lve;k=lve;for(o=new Anb(s.e);o.a<o.c.c.length;){m=RD(ynb(o),10);g=!m.c?-1:Wmb(m.c.a,m,0);if(g>0){l=RD(Vmb(m.c.a,g-1),10);B=bFc(a.b,m,l);q=m.n.b-m.d.d-(l.n.b+l.o.b+l.d.a+B)}else{q=m.n.b-m.d.d}j=$wnd.Math.min(q,j);if(g<m.c.a.c.length-1){l=RD(Vmb(m.c.a,g+1),10);B=bFc(a.b,m,l);r=l.n.b-l.d.d-(m.n.b+m.o.b+m.d.a+B)}else{r=2*m.n.b}k=$wnd.Math.min(r,k)}i=lve;f=false;e=RD(Vmb(s.e,0),10);for(D=new Anb(e.j);D.a<D.c.c.length;){C=RD(ynb(D),12);p=e.n.b+C.n.b+C.a.b;for(d=new Anb(C.e);d.a<d.c.c.length;){c=RD(ynb(d),18);w=c.c;b=w.i.n.b+w.n.b+w.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}h=RD(Vmb(s.e,s.e.c.length-1),10);for(A=new Anb(h.j);A.a<A.c.c.length;){w=RD(ynb(A),12);p=h.n.b+w.n.b+w.a.b;for(d=new Anb(w.g);d.a<d.c.c.length;){c=RD(ynb(d),18);C=c.d;b=C.i.n.b+C.n.b+C.a.b-p;if($wnd.Math.abs(b)<$wnd.Math.abs(i)&&$wnd.Math.abs(b)<(b<0?j:k)){i=b;f=true}}}if(f&&i!=0){for(n=new Anb(s.e);n.a<n.c.c.length;){m=RD(ynb(n),10);m.n.b+=i}}}} +function vac(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new bnb;e=lve;f=lve;g=lve;if(c){e=a.f.a;for(p=new Anb(b.j);p.a<p.c.c.length;){o=RD(ynb(p),12);for(i=new Anb(o.g);i.a<i.c.c.length;){h=RD(ynb(i),18);if(h.a.b!=0){k=RD(Qub(h.a),8);if(k.a<e){f=e-k.a;g=lve;d.c.length=0;e=k.a}if(k.a<=e){ZEb(d.c,h);h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(RD(ju(h.a,1),8).b-k.b)))}}}}}else{for(p=new Anb(b.j);p.a<p.c.c.length;){o=RD(ynb(p),12);for(i=new Anb(o.e);i.a<i.c.c.length;){h=RD(ynb(i),18);if(h.a.b!=0){m=RD(Rub(h.a),8);if(m.a>e){f=m.a-e;g=lve;d.c.length=0;e=m.a}if(m.a>=e){ZEb(d.c,h);h.a.b>1&&(g=$wnd.Math.min(g,$wnd.Math.abs(RD(ju(h.a,h.a.b-2),8).b-m.b)))}}}}}if(d.c.length!=0&&f>b.o.a/2&&g>b.o.b/2){n=new R3b;P3b(n,b);Q3b(n,(qpd(),Yod));n.n.a=b.o.a/2;r=new R3b;P3b(r,b);Q3b(r,npd);r.n.a=b.o.a/2;r.n.b=b.o.b;for(i=new Anb(d);i.a<i.c.c.length;){h=RD(ynb(i),18);if(c){j=RD(Uub(h.a),8);q=h.a.b==0?K3b(h.d):RD(Qub(h.a),8);q.b>=j.b?Y0b(h,r):Y0b(h,n)}else{j=RD(Vub(h.a),8);q=h.a.b==0?K3b(h.c):RD(Rub(h.a),8);q.b>=j.b?Z0b(h,r):Z0b(h,n)}l=RD(mQb(h,(yCc(),RAc)),75);!!l&&ze(l,j,true)}b.n.a=e-b.o.a/2}} +function E0c(a,b,c){var d,e,f,g,h,i,j,k,l,m;for(h=Sub(a.b,0);h.b!=h.d.c;){g=RD(evb(h),39);if(lhb(g.c,IEe)){continue}j=iWc(g,a);b==(Cmd(),ymd)||b==zmd?_mb(j,new D1c):_mb(j,new H1c);i=j.c.length;for(d=0;d<i;d++){k=(tFb(d,j.c.length),RD(j.c[d],65)).c;lhb(k.c,'n11')&&o0;if(Heb(TD(mQb(g,(q$c(),UZc))))&&!mWc((tFb(d,j.c.length),RD(j.c[d],65)),a)){continue}e=i==1?0.5:(d+1)/(i+1);if(b==ymd){f=Kfb(UD(mQb(g,f$c)));m=g.e.b+g.f.b*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd($wnd.Math.min(f,g.e.a-c),m));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(g.e.a,m))}else if(b==zmd){f=Kfb(UD(mQb(g,e$c)))+c;m=g.e.b+g.f.b*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(f,m));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(g.e.a+g.f.a,m))}else if(b==Bmd){f=Kfb(UD(mQb(g,f$c)));l=g.e.a+g.f.a*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,$wnd.Math.min(g.e.b-c,f)));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,g.e.b))}else{f=Kfb(UD(mQb(g,e$c)))+c;l=g.e.a+g.f.a*e;Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,f));Nub((tFb(d,j.c.length),RD(j.c[d],65)).a,new rjd(l,g.e.b+g.f.b))}}}} +function f2b(a,b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p;n=c;k=new j3b(i);h3b(k,(r3b(),m3b));pQb(k,(Ywc(),iwc),g);pQb(k,(yCc(),BBc),(Bod(),wod));p=Kfb(UD(a.of(ABc)));pQb(k,ABc,p);l=new R3b;P3b(l,k);if(!(b!=zod&&b!=Aod)){d>=0?(n=vpd(h)):(n=spd(vpd(h)));a.qf(GBc,n)}j=new pjd;m=false;if(a.pf(zBc)){mjd(j,RD(a.of(zBc),8));m=true}else{ljd(j,g.a/2,g.b/2)}switch(n.g){case 4:pQb(k,UAc,(cxc(),$wc));pQb(k,bwc,(huc(),guc));k.o.b=g.b;p<0&&(k.o.a=-p);Q3b(l,(qpd(),Xod));m||(j.a=g.a);j.a-=g.a;break;case 2:pQb(k,UAc,(cxc(),axc));pQb(k,bwc,(huc(),euc));k.o.b=g.b;p<0&&(k.o.a=-p);Q3b(l,(qpd(),ppd));m||(j.a=0);break;case 1:pQb(k,owc,(Gvc(),Fvc));k.o.a=g.a;p<0&&(k.o.b=-p);Q3b(l,(qpd(),npd));m||(j.b=g.b);j.b-=g.b;break;case 3:pQb(k,owc,(Gvc(),Dvc));k.o.a=g.a;p<0&&(k.o.b=-p);Q3b(l,(qpd(),Yod));m||(j.b=0);}mjd(l.n,j);pQb(k,zBc,j);if(b==vod||b==xod||b==wod){o=0;if(b==vod&&a.pf(CBc)){switch(n.g){case 1:case 2:o=RD(a.of(CBc),17).a;break;case 3:case 4:o=-RD(a.of(CBc),17).a;}}else{switch(n.g){case 4:case 2:o=f.b;b==xod&&(o/=e.b);break;case 1:case 3:o=f.a;b==xod&&(o/=e.a);}}pQb(k,Jwc,o)}pQb(k,hwc,n);return k} +function OId(){MId();function h(f){var g=this;this.dispatch=function(a){var b=a.data;switch(b.cmd){case 'algorithms':var c=PId((yob(),new xpb(new glb(LId.b))));f.postMessage({id:b.id,data:c});break;case 'categories':var d=PId((yob(),new xpb(new glb(LId.c))));f.postMessage({id:b.id,data:d});break;case 'options':var e=PId((yob(),new xpb(new glb(LId.d))));f.postMessage({id:b.id,data:e});break;case 'register':SId(b.algorithms);f.postMessage({id:b.id});break;case 'layout':QId(b.graph,b.layoutOptions||{},b.options||{});f.postMessage({id:b.id,data:b.graph});break;}};this.saveDispatch=function(b){try{g.dispatch(b)}catch(a){f.postMessage({id:b.data.id,error:a})}}} +function j(b){var c=this;this.dispatcher=new h({postMessage:function(a){c.onmessage({data:a})}});this.postMessage=function(a){setTimeout(function(){c.dispatcher.saveDispatch({data:a})},0)}} +if(typeof document===Yxe&&typeof self!==Yxe){var i=new h(self);self.onmessage=i.saveDispatch}else if(typeof module!==Yxe&&module.exports){Object.defineProperty(exports,'__esModule',{value:true});module.exports={'default':j,Worker:j}}} +function i5b(a,b,c){var d,e,f,g,h,i,j,k,l,m;k=new j3b(c);kQb(k,b);pQb(k,(Ywc(),Awc),b);k.o.a=b.g;k.o.b=b.f;k.n.a=b.i;k.n.b=b.j;Rmb(c.a,k);Zjb(a.a,b,k);((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i!=0||Heb(TD(Gxd(b,(yCc(),NAc)))))&&pQb(k,Yvc,(Geb(),true));j=RD(mQb(c,kwc),21);l=RD(mQb(k,(yCc(),BBc)),101);l==(Bod(),Aod)?pQb(k,BBc,zod):l!=zod&&j.Fc((ovc(),kvc));m=0;d=RD(mQb(c,rAc),88);for(i=new dMd((!b.c&&(b.c=new C5d(K4,b,9,9)),b.c));i.e!=i.i.gc();){h=RD(bMd(i),123);e=vCd(b);(dE(Gxd(e,cAc))!==dE((kEc(),hEc))||dE(Gxd(e,pAc))===dE((Ptc(),Otc))||dE(Gxd(e,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(e,eAc)))||dE(Gxd(e,Yzc))!==dE((U$b(),T$b))||dE(Gxd(e,ZAc))===dE((aEc(),TDc))||dE(Gxd(e,ZAc))===dE((aEc(),UDc))||dE(Gxd(e,$Ac))===dE((_Cc(),SCc))||dE(Gxd(e,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(b,aAc)))&&Ixd(h,zwc,sgb(m++));Heb(TD(Gxd(h,pBc)))||j5b(a,h,k,j,d,l)}for(g=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));g.e!=g.i.gc();){f=RD(bMd(g),135);!Heb(TD(Gxd(f,pBc)))&&!!f.a&&Rmb(k.b,h5b(f))}Heb(TD(mQb(k,Uzc)))&&j.Fc((ovc(),fvc));if(Heb(TD(mQb(k,MAc)))){j.Fc((ovc(),jvc));j.Fc(ivc);pQb(k,BBc,zod)}return k} +function ird(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;p=0;D=0;for(j=new Anb(a.b);j.a<j.c.c.length;){i=RD(ynb(j),163);!!i.c&&Dsd(i.c);p=$wnd.Math.max(p,urd(i));D+=urd(i)*trd(i)}q=D/a.b.c.length;C=brd(a.b,q);D+=a.b.c.length*C;p=$wnd.Math.max(p,$wnd.Math.sqrt(D*g))+c.b;H=c.b;I=c.d;n=0;l=c.b+c.c;B=new Yub;Mub(B,sgb(0));w=new Yub;k=new Jkb(a.b,0);o=null;h=new bnb;while(k.b<k.d.gc()){i=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),163));G=urd(i);m=trd(i);if(H+G>p){if(f){Oub(w,n);Oub(B,sgb(k.b-1));Rmb(a.d,o);h.c.length=0}H=c.b;I+=n+b;n=0;l=$wnd.Math.max(l,c.b+c.c+G)}ZEb(h.c,i);xrd(i,H,I);l=$wnd.Math.max(l,H+G+c.c);n=$wnd.Math.max(n,m);H+=G+b;o=i}Tmb(a.a,h);Rmb(a.d,RD(Vmb(h,h.c.length-1),163));l=$wnd.Math.max(l,d);F=I+n+c.a;if(F<e){n+=e-F;F=e}if(f){H=c.b;k=new Jkb(a.b,0);Oub(B,sgb(a.b.c.length));A=Sub(B,0);s=RD(evb(A),17).a;Oub(w,n);v=Sub(w,0);u=0;while(k.b<k.d.gc()){if(k.b==s){H=c.b;u=Kfb(UD(evb(v)));s=RD(evb(A),17).a}i=(sFb(k.b<k.d.gc()),RD(k.d.Xb(k.c=k.b++),163));vrd(i,u);if(k.b==s){r=l-H-c.c;t=urd(i);wrd(i,r);yrd(i,(r-t)/2,0)}H+=urd(i)+b}}return new rjd(l,F)} +function zne(a){if(a.N)return;a.N=true;a.b=jBd(a,0);iBd(a.b,0);iBd(a.b,1);iBd(a.b,2);a.bb=jBd(a,1);iBd(a.bb,0);iBd(a.bb,1);a.fb=jBd(a,2);iBd(a.fb,3);iBd(a.fb,4);oBd(a.fb,5);a.qb=jBd(a,3);iBd(a.qb,0);oBd(a.qb,1);oBd(a.qb,2);iBd(a.qb,3);iBd(a.qb,4);oBd(a.qb,5);iBd(a.qb,6);a.a=kBd(a,4);a.c=kBd(a,5);a.d=kBd(a,6);a.e=kBd(a,7);a.f=kBd(a,8);a.g=kBd(a,9);a.i=kBd(a,10);a.j=kBd(a,11);a.k=kBd(a,12);a.n=kBd(a,13);a.o=kBd(a,14);a.p=kBd(a,15);a.q=kBd(a,16);a.s=kBd(a,17);a.r=kBd(a,18);a.t=kBd(a,19);a.u=kBd(a,20);a.v=kBd(a,21);a.w=kBd(a,22);a.B=kBd(a,23);a.A=kBd(a,24);a.C=kBd(a,25);a.D=kBd(a,26);a.F=kBd(a,27);a.G=kBd(a,28);a.H=kBd(a,29);a.J=kBd(a,30);a.I=kBd(a,31);a.K=kBd(a,32);a.M=kBd(a,33);a.L=kBd(a,34);a.P=kBd(a,35);a.Q=kBd(a,36);a.R=kBd(a,37);a.S=kBd(a,38);a.T=kBd(a,39);a.U=kBd(a,40);a.V=kBd(a,41);a.X=kBd(a,42);a.W=kBd(a,43);a.Y=kBd(a,44);a.Z=kBd(a,45);a.$=kBd(a,46);a._=kBd(a,47);a.ab=kBd(a,48);a.cb=kBd(a,49);a.db=kBd(a,50);a.eb=kBd(a,51);a.gb=kBd(a,52);a.hb=kBd(a,53);a.ib=kBd(a,54);a.jb=kBd(a,55);a.kb=kBd(a,56);a.lb=kBd(a,57);a.mb=kBd(a,58);a.nb=kBd(a,59);a.ob=kBd(a,60);a.pb=kBd(a,61)} +function w8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.a==0){for(q=new Anb(a);q.a<q.c.c.length;){o=RD(ynb(q),10);s=$wnd.Math.max(s,o.n.a+o.o.a+o.d.c)}}else{s=b.f.a-b.c.a}s-=b.c.a;for(p=new Anb(a);p.a<p.c.c.length;){o=RD(ynb(p),10);x8b(o.n,s-o.o.a);y8b(o.f);u8b(o);(!o.q?(yob(),yob(),wob):o.q)._b((yCc(),IBc))&&x8b(RD(mQb(o,IBc),8),s-o.o.a);switch(RD(mQb(o,Rzc),255).g){case 1:pQb(o,Rzc,(Rjd(),Pjd));break;case 2:pQb(o,Rzc,(Rjd(),Ojd));}r=o.o;for(u=new Anb(o.j);u.a<u.c.c.length;){t=RD(ynb(u),12);x8b(t.n,r.a-t.o.a);x8b(t.a,t.o.a);Q3b(t,o8b(t.j));g=RD(mQb(t,CBc),17);!!g&&pQb(t,CBc,sgb(-g.a));for(f=new Anb(t.g);f.a<f.c.c.length;){e=RD(ynb(f),18);for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.a=s-c.a}j=RD(mQb(e,RAc),75);if(j){for(i=Sub(j,0);i.b!=i.d.c;){h=RD(evb(i),8);h.a=s-h.a}}for(m=new Anb(e.b);m.a<m.c.c.length;){k=RD(ynb(m),72);x8b(k.n,s-k.o.a)}}for(n=new Anb(t.f);n.a<n.c.c.length;){k=RD(ynb(n),72);x8b(k.n,t.o.a-k.o.a)}}if(o.k==(r3b(),m3b)){pQb(o,(Ywc(),hwc),o8b(RD(mQb(o,hwc),64)));t8b(o)}for(l=new Anb(o.b);l.a<l.c.c.length;){k=RD(ynb(l),72);u8b(k);x8b(k.n,r.a-k.o.a)}}} +function z8b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;s=0;if(b.f.b==0){for(q=new Anb(a);q.a<q.c.c.length;){o=RD(ynb(q),10);s=$wnd.Math.max(s,o.n.b+o.o.b+o.d.a)}}else{s=b.f.b-b.c.b}s-=b.c.b;for(p=new Anb(a);p.a<p.c.c.length;){o=RD(ynb(p),10);A8b(o.n,s-o.o.b);B8b(o.f);v8b(o);(!o.q?(yob(),yob(),wob):o.q)._b((yCc(),IBc))&&A8b(RD(mQb(o,IBc),8),s-o.o.b);switch(RD(mQb(o,Rzc),255).g){case 3:pQb(o,Rzc,(Rjd(),Mjd));break;case 4:pQb(o,Rzc,(Rjd(),Qjd));}r=o.o;for(u=new Anb(o.j);u.a<u.c.c.length;){t=RD(ynb(u),12);A8b(t.n,r.b-t.o.b);A8b(t.a,t.o.b);Q3b(t,p8b(t.j));g=RD(mQb(t,CBc),17);!!g&&pQb(t,CBc,sgb(-g.a));for(f=new Anb(t.g);f.a<f.c.c.length;){e=RD(ynb(f),18);for(d=Sub(e.a,0);d.b!=d.d.c;){c=RD(evb(d),8);c.b=s-c.b}j=RD(mQb(e,RAc),75);if(j){for(i=Sub(j,0);i.b!=i.d.c;){h=RD(evb(i),8);h.b=s-h.b}}for(m=new Anb(e.b);m.a<m.c.c.length;){k=RD(ynb(m),72);A8b(k.n,s-k.o.b)}}for(n=new Anb(t.f);n.a<n.c.c.length;){k=RD(ynb(n),72);A8b(k.n,t.o.b-k.o.b)}}if(o.k==(r3b(),m3b)){pQb(o,(Ywc(),hwc),p8b(RD(mQb(o,hwc),64)));s8b(o)}for(l=new Anb(o.b);l.a<l.c.c.length;){k=RD(ynb(l),72);v8b(k);A8b(k.n,r.b-k.o.b)}}} +function Drc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;s=new Jkb(a.b,0);k=b.Kc();o=0;j=RD(k.Pb(),17).a;v=0;c=new _sb;A=new Iub;while(s.b<s.d.gc()){r=(sFb(s.b<s.d.gc()),RD(s.d.Xb(s.c=s.b++),30));for(u=new Anb(r.a);u.a<u.c.c.length;){t=RD(ynb(u),10);for(n=new is(Mr(a3b(t).a.Kc(),new ir));gs(n);){l=RD(hs(n),18);A.a.zc(l,A)}for(m=new is(Mr(Z2b(t).a.Kc(),new ir));gs(m);){l=RD(hs(m),18);A.a.Bc(l)!=null}}if(o+1==j){e=new R4b(a);Ikb(s,e);f=new R4b(a);Ikb(s,f);for(C=A.a.ec().Kc();C.Ob();){B=RD(C.Pb(),18);if(!c.a._b(B)){++v;c.a.zc(B,c)}g=new j3b(a);pQb(g,(yCc(),BBc),(Bod(),yod));g3b(g,e);h3b(g,(r3b(),l3b));p=new R3b;P3b(p,g);Q3b(p,(qpd(),ppd));D=new R3b;P3b(D,g);Q3b(D,Xod);d=new j3b(a);pQb(d,BBc,yod);g3b(d,f);h3b(d,l3b);q=new R3b;P3b(q,d);Q3b(q,ppd);F=new R3b;P3b(F,d);Q3b(F,Xod);w=new a1b;Y0b(w,B.c);Z0b(w,p);pQb(w,(Ywc(),zwc),RD(mQb(B,zwc),17));H=new a1b;Y0b(H,D);Z0b(H,q);pQb(H,zwc,RD(mQb(B,zwc),17));Y0b(B,F);h=new Jrc(g,d,w,H,B);pQb(g,Wvc,h);pQb(d,Wvc,h);G=w.c.i;if(G.k==l3b){i=RD(mQb(G,Wvc),313);i.d=h;h.g=i}}if(k.Ob()){j=RD(k.Pb(),17).a}else{break}}++o}return sgb(v)} +function rkc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;p=new bnb;for(m=new Anb(a.d.b);m.a<m.c.c.length;){l=RD(ynb(m),30);for(o=new Anb(l.a);o.a<o.c.c.length;){n=RD(ynb(o),10);e=RD(Wjb(a.f,n),60);for(i=new is(Mr(a3b(n).a.Kc(),new ir));gs(i);){g=RD(hs(i),18);d=Sub(g.a,0);j=true;k=null;if(d.b!=d.d.c){b=RD(evb(d),8);c=null;if(g.c.j==(qpd(),Yod)){q=new Nlc(b,new rjd(b.a,e.d.d),e,g);q.f.a=true;q.a=g.c;ZEb(p.c,q)}if(g.c.j==npd){q=new Nlc(b,new rjd(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.c;ZEb(p.c,q)}while(d.b!=d.d.c){c=RD(evb(d),8);if(!rGb(b.b,c.b)){k=new Nlc(b,c,null,g);ZEb(p.c,k);if(j){j=false;if(c.b<e.d.d){k.f.a=true}else if(c.b>e.d.d+e.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}d.b!=d.d.c&&(b=c)}if(k){f=RD(Wjb(a.f,g.d.i),60);if(b.b<f.d.d){k.f.a=true}else if(b.b>f.d.d+f.d.a){k.f.d=true}else{k.f.d=true;k.f.a=true}}}}for(h=new is(Mr(Z2b(n).a.Kc(),new ir));gs(h);){g=RD(hs(h),18);if(g.a.b!=0){b=RD(Rub(g.a),8);if(g.d.j==(qpd(),Yod)){q=new Nlc(b,new rjd(b.a,e.d.d),e,g);q.f.a=true;q.a=g.d;ZEb(p.c,q)}if(g.d.j==npd){q=new Nlc(b,new rjd(b.a,e.d.d+e.d.a),e,g);q.f.d=true;q.a=g.d;ZEb(p.c,q)}}}}}return p} +function Nvd(a,b,c){var d,e,f,g,h,i,j,k,l,m;i=new bnb;l=b.length;g=$5d(c);for(j=0;j<l;++j){k=rhb(b,Fhb(61),j);d=wvd(g,(AFb(j,k,b.length),b.substr(j,k-j)));e=iXd(d);f=e.jk().wi();switch(ihb(b,++k)){case 39:{h=phb(b,39,++k);Rmb(i,new KTd(d,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e)));j=h+1;break}case 34:{h=phb(b,34,++k);Rmb(i,new KTd(d,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e)));j=h+1;break}case 91:{m=new bnb;Rmb(i,new KTd(d,m));n:for(;;){switch(ihb(b,++k)){case 39:{h=phb(b,39,++k);Rmb(m,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e));k=h+1;break}case 34:{h=phb(b,34,++k);Rmb(m,lwd((AFb(k,h,b.length),b.substr(k,h-k)),f,e));k=h+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){m.c.push(null)}else{throw Adb(new yz(MHe))}k+=3;break}}if(k<l){switch(BFb(k,b.length),b.charCodeAt(k)){case 44:{break}case 93:{break n}default:{throw Adb(new yz('Expecting , or ]'))}}}else{break}}j=k+1;break}case 110:{++k;if(b.indexOf('ull',k)==k){Rmb(i,new KTd(d,null))}else{throw Adb(new yz(MHe))}j=k+3;break}}if(j<l){BFb(j,b.length);if(b.charCodeAt(j)!=44){throw Adb(new yz('Expecting ,'))}}else{break}}return Ovd(a,i,c)} +function Oqe(a){var b,c,d,e,f;b=a.c;f=null;switch(b){case 6:return a.Em();case 13:return a.Fm();case 23:return a.wm();case 22:return a.Bm();case 18:return a.ym();case 8:Mqe(a);f=(Vse(),Dse);break;case 9:return a.em(true);case 19:return a.fm();case 10:switch(a.a){case 100:case 68:case 119:case 87:case 115:case 83:f=a.dm(a.a);Mqe(a);return f;case 101:case 102:case 110:case 114:case 116:case 117:case 118:case 120:{c=a.cm();c<txe?(f=(Vse(),Vse(),++Use,new Hte(0,c))):(f=cte(qse(c)))}break;case 99:return a.om();case 67:return a.jm();case 105:return a.rm();case 73:return a.km();case 103:return a.pm();case 88:return a.lm();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return a.gm();case 80:case 112:f=Sqe(a,a.a);if(!f)throw Adb(new Lqe(TId((Hde(),hJe))));break;default:f=Yse(a.a);}Mqe(a);break;case 0:if(a.a==93||a.a==123||a.a==125)throw Adb(new Lqe(TId((Hde(),gJe))));f=Yse(a.a);d=a.a;Mqe(a);if((d&64512)==uxe&&a.c==0&&(a.a&64512)==56320){e=$C(hE,zwe,28,2,15,1);e[0]=d&Bwe;e[1]=a.a&Bwe;f=bte(cte(Ihb(e,0,e.length)),0);Mqe(a)}break;default:throw Adb(new Lqe(TId((Hde(),gJe))));}return f} +function WUc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;C=new Yub;w=new Yub;q=-1;for(i=new Anb(a);i.a<i.c.c.length;){g=RD(ynb(i),131);g.s=q--;k=0;t=0;for(f=new Anb(g.t);f.a<f.c.c.length;){d=RD(ynb(f),274);t+=d.c}for(e=new Anb(g.i);e.a<e.c.c.length;){d=RD(ynb(e),274);k+=d.c}g.n=k;g.u=t;t==0?(Pub(w,g,w.c.b,w.c),true):k==0&&(Pub(C,g,C.c.b,C.c),true)}F=Xx(a);l=a.c.length;p=l+1;r=l-1;n=new bnb;while(F.a.gc()!=0){while(w.b!=0){v=(sFb(w.b!=0),RD(Wub(w,w.a.a),131));F.a.Bc(v)!=null;v.s=r--;$Uc(v,C,w)}while(C.b!=0){A=(sFb(C.b!=0),RD(Wub(C,C.a.a),131));F.a.Bc(A)!=null;A.s=p++;$Uc(A,C,w)}o=qwe;for(j=F.a.ec().Kc();j.Ob();){g=RD(j.Pb(),131);s=g.u-g.n;if(s>=o){if(s>o){n.c.length=0;o=s}ZEb(n.c,g)}}if(n.c.length!=0){m=RD(Vmb(n,Jwb(b,n.c.length)),131);F.a.Bc(m)!=null;m.s=p++;$Uc(m,C,w);n.c.length=0}}u=a.c.length+1;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),131);g.s<l&&(g.s+=u)}for(B=new Anb(a);B.a<B.c.c.length;){A=RD(ynb(B),131);c=new Jkb(A.t,0);while(c.b<c.d.gc()){d=(sFb(c.b<c.d.gc()),RD(c.d.Xb(c.c=c.b++),274));D=d.b;if(A.s>D.s){Ckb(c);Ymb(D.i,d);if(d.c>0){d.a=D;Rmb(D.t,d);d.b=A;Rmb(A.i,d)}}}}} +function Efc(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F;p=new cnb(b.b);u=new cnb(b.b);m=new cnb(b.b);B=new cnb(b.b);q=new cnb(b.b);for(A=Sub(b,0);A.b!=A.d.c;){v=RD(evb(A),12);for(h=new Anb(v.g);h.a<h.c.c.length;){f=RD(ynb(h),18);if(f.c.i==f.d.i){if(v.j==f.d.j){ZEb(B.c,f);continue}else if(v.j==(qpd(),Yod)&&f.d.j==npd){ZEb(q.c,f);continue}}}}for(i=new Anb(q);i.a<i.c.c.length;){f=RD(ynb(i),18);Ffc(a,f,c,d,(qpd(),Xod))}for(g=new Anb(B);g.a<g.c.c.length;){f=RD(ynb(g),18);C=new j3b(a);h3b(C,(r3b(),q3b));pQb(C,(yCc(),BBc),(Bod(),wod));pQb(C,(Ywc(),Awc),f);D=new R3b;pQb(D,Awc,f.d);Q3b(D,(qpd(),ppd));P3b(D,C);F=new R3b;pQb(F,Awc,f.c);Q3b(F,Xod);P3b(F,C);pQb(f.c,Iwc,C);pQb(f.d,Iwc,C);Y0b(f,null);Z0b(f,null);ZEb(c.c,C);pQb(C,$vc,sgb(2))}for(w=Sub(b,0);w.b!=w.d.c;){v=RD(evb(w),12);j=v.e.c.length>0;r=v.g.c.length>0;j&&r?(ZEb(m.c,v),true):j?(ZEb(p.c,v),true):r&&(ZEb(u.c,v),true)}for(o=new Anb(p);o.a<o.c.c.length;){n=RD(ynb(o),12);Rmb(e,Dfc(a,n,null,c))}for(t=new Anb(u);t.a<t.c.c.length;){s=RD(ynb(t),12);Rmb(e,Dfc(a,null,s,c))}for(l=new Anb(m);l.a<l.c.c.length;){k=RD(ynb(l),12);Rmb(e,Dfc(a,k,k,c))}} +function psd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;m=oxe;n=oxe;k=0;l=0;i=new bnb;for(h=new dMd((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b));h.e!=h.i.gc();){f=RD(bMd(h),74);i=Al(cD(WC(cJ,1),rve,20,0,[i,(!f.n&&(f.n=new C5d(I4,f,1,7)),f.n)]))}for(t=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!a.n&&(a.n=new C5d(I4,a,1,7)),a.n),(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a),i])));gs(t);){s=RD(hs(t),422);j=RD(s.of((umd(),eld)),140);m>s.nh()-j.b&&(m=s.nh()-j.b);n>s.oh()-j.d&&(n=s.oh()-j.d);k<s.nh()+s.mh()+j.c&&(k=s.nh()+s.mh()+j.c);l<s.oh()+s.lh()+j.a&&(l=s.oh()+s.lh()+j.a)}for(g=new dMd((!a.b&&(a.b=new C5d(G4,a,12,3)),a.b));g.e!=g.i.gc();){f=RD(bMd(g),74);for(r=new dMd((!f.a&&(f.a=new C5d(F4,f,6,6)),f.a));r.e!=r.i.gc();){q=RD(bMd(r),166);o=q.j;d=q.b;p=q.k;e=q.c;m=$wnd.Math.min(m,o);m=$wnd.Math.min(m,d);k=$wnd.Math.max(k,o);k=$wnd.Math.max(k,d);n=$wnd.Math.min(n,p);n=$wnd.Math.min(n,e);l=$wnd.Math.max(l,p);l=$wnd.Math.max(l,e);for(c=new dMd((!q.a&&(q.a=new XZd(D4,q,5)),q.a));c.e!=c.i.gc();){b=RD(bMd(c),377);m=$wnd.Math.min(m,b.a);k=$wnd.Math.max(k,b.a);n=$wnd.Math.min(n,b.b);l=$wnd.Math.max(l,b.b)}}}Ixd(a,(umd(),Ikd),k-m);Ixd(a,Hkd,l-n)} +function uOc(a,b,c){var d,e,f,g,h,i,j,k,l;c.Ug('Network simplex node placement',1);a.e=b;a.n=RD(mQb(b,(Ywc(),Qwc)),312);tOc(a);fOc(a);FDb(EDb(new SDb(null,new Swb(a.e.b,16)),new iPc),new kPc(a));FDb(CDb(EDb(CDb(EDb(new SDb(null,new Swb(a.e.b,16)),new ZPc),new _Pc),new bQc),new dQc),new gPc(a));if(Heb(TD(mQb(a.e,(yCc(),gBc))))){g=c.eh(1);g.Ug('Straight Edges Pre-Processing',1);sOc(a);g.Vg()}AIb(a.f);f=RD(mQb(b,gCc),17).a*a.f.a.c.length;lJb(yJb(zJb(CJb(a.f),f),false),c.eh(1));if(a.d.a.gc()!=0){g=c.eh(1);g.Ug('Flexible Where Space Processing',1);h=RD(Lvb(KDb(GDb(new SDb(null,new Swb(a.f.a,16)),new mPc),new IOc)),17).a;i=RD(Lvb(JDb(GDb(new SDb(null,new Swb(a.f.a,16)),new oPc),new MOc)),17).a;j=i-h;k=eJb(new gJb,a.f);l=eJb(new gJb,a.f);rIb(uIb(tIb(sIb(vIb(new wIb,20000),j),k),l));FDb(CDb(CDb(_nb(a.i),new qPc),new sPc),new uPc(h,k,j,l));for(e=a.d.a.ec().Kc();e.Ob();){d=RD(e.Pb(),218);d.g=1}lJb(yJb(zJb(CJb(a.f),f),false),g.eh(1));g.Vg()}if(Heb(TD(mQb(b,gBc)))){g=c.eh(1);g.Ug('Straight Edges Post-Processing',1);rOc(a);g.Vg()}eOc(a);a.e=null;a.f=null;a.i=null;a.c=null;akb(a.k);a.j=null;a.a=null;a.o=null;a.d.a.$b();c.Vg()} +function XGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;c.Ug('Depth first model order layering',1);a.d=b;q=new bnb;for(p=new Anb(a.d.a);p.a<p.c.c.length;){n=RD(ynb(p),10);n.k==(r3b(),p3b)&&(ZEb(q.c,n),true)}yob();_mb(q,new aHc);g=true;a.b=new R4b(a.d);a.a=null;Rmb(a.d.b,a.b);a.b.p=0;a.c=0;a.f=new Yub;for(o=new Anb(q);o.a<o.c.c.length;){n=RD(ynb(o),10);if(g){g3b(n,a.b);g=false}else{if(VGc(a,n)){m=a.c;m=UGc(m,n);d=m+2;k=m-a.c;if(a.f.b==0){TGc(a,d,n)}else{if(k>0){for(t=Sub(a.f,0);t.b!=t.d.c;){s=RD(evb(t),10);s.p+=m-a.e}WGc(a);Xub(a.f);TGc(a,d,n)}else{Mub(a.f,n);n.p=d;a.e=$wnd.Math.max(a.e,d);for(f=new is(Mr(Z2b(n).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(!e.c.i.c&&e.c.i.k==(r3b(),n3b)){Mub(a.f,e.c.i);e.c.i.p=d-1}}a.c=d}}}else{WGc(a);Xub(a.f);d=0;if(gs(new is(Mr(Z2b(n).a.Kc(),new ir)))){m=0;m=UGc(m,n);d=m+2;TGc(a,d,n)}else{Mub(a.f,n);n.p=0;a.e=$wnd.Math.max(a.e,0);a.b=RD(Vmb(a.d.b,0),30);a.c=0}}}}a.f.b==0||WGc(a);a.d.a.c.length=0;r=new bnb;for(j=new Anb(a.d.b);j.a<j.c.c.length;){h=RD(ynb(j),30);h.a.c.length==0&&(ZEb(r.c,h),true)}Ce(a.d.b,r);l=0;for(i=new Anb(a.d.b);i.a<i.c.c.length;){h=RD(ynb(i),30);h.p=l;++l}c.Vg()} +function EEd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;D=null;G=b;F=pEd(a,DGd(c),G);jyd(F,zDd(G,uIe));H=RD(Ao(a.g,tDd(qC(G,bIe))),27);m=qC(G,'sourcePort');d=null;!!m&&(d=tDd(m));I=RD(Ao(a.j,d),123);if(!H){h=uDd(G);o="An edge must have a source node (edge id: '"+h;p=o+zIe;throw Adb(new CDd(p))}if(!!I&&!Hb(MCd(I),H)){i=zDd(G,uIe);q="The source port of an edge must be a port of the edge's source node (edge id: '"+i;r=q+zIe;throw Adb(new CDd(r))}B=(!F.b&&(F.b=new Yie(E4,F,4,7)),F.b);f=null;I?(f=I):(f=H);WGd(B,f);J=RD(Ao(a.g,tDd(qC(G,CIe))),27);n=qC(G,'targetPort');e=null;!!n&&(e=tDd(n));K=RD(Ao(a.j,e),123);if(!J){l=uDd(G);s="An edge must have a target node (edge id: '"+l;t=s+zIe;throw Adb(new CDd(t))}if(!!K&&!Hb(MCd(K),J)){j=zDd(G,uIe);u="The target port of an edge must be a port of the edge's target node (edge id: '"+j;v=u+zIe;throw Adb(new CDd(v))}C=(!F.c&&(F.c=new Yie(E4,F,5,8)),F.c);g=null;K?(g=K):(g=J);WGd(C,g);if((!F.b&&(F.b=new Yie(E4,F,4,7)),F.b).i==0||(!F.c&&(F.c=new Yie(E4,F,5,8)),F.c).i==0){k=zDd(G,uIe);w=yIe+k;A=w+zIe;throw Adb(new CDd(A))}GEd(G,F);FEd(G,F);D=CEd(a,G,F);return D} +function JTb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;n=RD(mQb(a,(JVb(),HVb)),27);t=lve;u=lve;r=qwe;s=qwe;for(w=new Anb(a.e);w.a<w.c.c.length;){v=RD(ynb(w),153);F=v.d;G=v.e;t=$wnd.Math.min(t,F.a-G.a/2);u=$wnd.Math.min(u,F.b-G.b/2);r=$wnd.Math.max(r,F.a+G.a/2);s=$wnd.Math.max(s,F.b+G.b/2)}for(c=new Anb(a.b);c.a<c.c.c.length;){b=RD(ynb(c),250);F=b.d;G=b.e;t=$wnd.Math.min(t,F.a-G.a/2);u=$wnd.Math.min(u,F.b-G.b/2);r=$wnd.Math.max(r,F.a+G.a/2);s=$wnd.Math.max(s,F.b+G.b/2)}D=RD(Gxd(n,(yVb(),hVb)),107);C=new rjd(D.b-t,D.d-u);for(j=new Anb(a.e);j.a<j.c.c.length;){i=RD(ynb(j),153);B=mQb(i,HVb);if(ZD(B,207)){p=RD(B,27);A=$id(new sjd(i.d),C);Byd(p,A.a-p.g/2,A.b-p.f/2)}}for(f=new Anb(a.c);f.a<f.c.c.length;){e=RD(ynb(f),289);l=RD(mQb(e,HVb),74);m=IGd(l,true,true);H=new sjd(ZTb(e));$id(H,C);Nzd(m,H.a,H.b);Umb(e.a,new OTb(C,m));d=new sjd($Tb(e));$id(d,C);Gzd(m,d.a,d.b)}for(h=new Anb(a.d);h.a<h.c.c.length;){g=RD(ynb(h),453);o=RD(mQb(g,HVb),135);q=$id(new sjd(g.d),C);Byd(o,q.a,q.b)}I=r-t+(D.b+D.c);k=s-u+(D.d+D.a);Heb(TD(Gxd(n,(umd(),mld))))||Esd(n,I,k,false,true);Ixd(n,Ikd,I-(D.b+D.c));Ixd(n,Hkd,k-(D.d+D.a))} +function F$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;l=H$b(B$b(a,(qpd(),bpd)),b);o=G$b(B$b(a,cpd),b);u=G$b(B$b(a,kpd),b);B=I$b(B$b(a,mpd),b);m=I$b(B$b(a,Zod),b);s=G$b(B$b(a,jpd),b);p=G$b(B$b(a,dpd),b);w=G$b(B$b(a,lpd),b);v=G$b(B$b(a,$od),b);C=I$b(B$b(a,apd),b);r=G$b(B$b(a,hpd),b);t=G$b(B$b(a,gpd),b);A=G$b(B$b(a,_od),b);D=I$b(B$b(a,ipd),b);n=I$b(B$b(a,epd),b);q=G$b(B$b(a,fpd),b);c=Hid(cD(WC(iE,1),vxe,28,15,[s.a,B.a,w.a,D.a]));d=Hid(cD(WC(iE,1),vxe,28,15,[o.a,l.a,u.a,q.a]));e=r.a;f=Hid(cD(WC(iE,1),vxe,28,15,[p.a,m.a,v.a,n.a]));j=Hid(cD(WC(iE,1),vxe,28,15,[s.b,o.b,p.b,t.b]));i=Hid(cD(WC(iE,1),vxe,28,15,[B.b,l.b,m.b,q.b]));k=C.b;h=Hid(cD(WC(iE,1),vxe,28,15,[w.b,u.b,v.b,A.b]));x$b(B$b(a,bpd),c+e,j+k);x$b(B$b(a,fpd),c+e,j+k);x$b(B$b(a,cpd),c+e,0);x$b(B$b(a,kpd),c+e,j+k+i);x$b(B$b(a,mpd),0,j+k);x$b(B$b(a,Zod),c+e+d,j+k);x$b(B$b(a,dpd),c+e+d,0);x$b(B$b(a,lpd),0,j+k+i);x$b(B$b(a,$od),c+e+d,j+k+i);x$b(B$b(a,apd),0,j);x$b(B$b(a,hpd),c,0);x$b(B$b(a,_od),0,j+k+i);x$b(B$b(a,epd),c+e+d,0);g=new pjd;g.a=Hid(cD(WC(iE,1),vxe,28,15,[c+d+e+f,C.a,t.a,A.a]));g.b=Hid(cD(WC(iE,1),vxe,28,15,[j+i+k+h,r.b,D.b,n.b]));return g} +function EFb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;s=new rjd(oxe,oxe);b=new rjd(pxe,pxe);for(B=new Anb(a);B.a<B.c.c.length;){A=RD(ynb(B),8);s.a=$wnd.Math.min(s.a,A.a);s.b=$wnd.Math.min(s.b,A.b);b.a=$wnd.Math.max(b.a,A.a);b.b=$wnd.Math.max(b.b,A.b)}m=new rjd(b.a-s.a,b.b-s.b);j=new rjd(s.a-50,s.b-m.a-50);k=new rjd(s.a-50,b.b+m.a+50);l=new rjd(b.a+m.b/2+50,s.b+m.b/2);n=new XFb(j,k,l);w=new _sb;f=new bnb;c=new bnb;w.a.zc(n,w);for(D=new Anb(a);D.a<D.c.c.length;){C=RD(ynb(D),8);f.c.length=0;for(v=w.a.ec().Kc();v.Ob();){t=RD(v.Pb(),317);d=t.d;bjd(d,t.a);$y(bjd(t.d,C),bjd(t.d,t.a))<0&&(ZEb(f.c,t),true)}c.c.length=0;for(u=new Anb(f);u.a<u.c.c.length;){t=RD(ynb(u),317);for(q=new Anb(t.e);q.a<q.c.c.length;){o=RD(ynb(q),177);g=true;for(i=new Anb(f);i.a<i.c.c.length;){h=RD(ynb(i),317);h!=t&&(Fvb(o,Vmb(h.e,0))||Fvb(o,Vmb(h.e,1))||Fvb(o,Vmb(h.e,2)))&&(g=false)}g&&(ZEb(c.c,o),true)}}Ve(w,f);xgb(w,new FFb);for(p=new Anb(c);p.a<p.c.c.length;){o=RD(ynb(p),177);Ysb(w,new XFb(C,o.a,o.b))}}r=new _sb;xgb(w,new HFb(r));e=r.a.ec().Kc();while(e.Ob()){o=RD(e.Pb(),177);(WFb(n,o.a)||WFb(n,o.b))&&e.Qb()}xgb(r,new JFb);return r} +function pvd(){pvd=geb;dvd();ovd=cvd.a;RD(QHd(xYd(cvd.a),0),19);ivd=cvd.f;RD(QHd(xYd(cvd.f),0),19);RD(QHd(xYd(cvd.f),1),35);nvd=cvd.n;RD(QHd(xYd(cvd.n),0),35);RD(QHd(xYd(cvd.n),1),35);RD(QHd(xYd(cvd.n),2),35);RD(QHd(xYd(cvd.n),3),35);jvd=cvd.g;RD(QHd(xYd(cvd.g),0),19);RD(QHd(xYd(cvd.g),1),35);fvd=cvd.c;RD(QHd(xYd(cvd.c),0),19);RD(QHd(xYd(cvd.c),1),19);kvd=cvd.i;RD(QHd(xYd(cvd.i),0),19);RD(QHd(xYd(cvd.i),1),19);RD(QHd(xYd(cvd.i),2),19);RD(QHd(xYd(cvd.i),3),19);RD(QHd(xYd(cvd.i),4),35);lvd=cvd.j;RD(QHd(xYd(cvd.j),0),19);gvd=cvd.d;RD(QHd(xYd(cvd.d),0),19);RD(QHd(xYd(cvd.d),1),19);RD(QHd(xYd(cvd.d),2),19);RD(QHd(xYd(cvd.d),3),19);RD(QHd(xYd(cvd.d),4),35);RD(QHd(xYd(cvd.d),5),35);RD(QHd(xYd(cvd.d),6),35);RD(QHd(xYd(cvd.d),7),35);evd=cvd.b;RD(QHd(xYd(cvd.b),0),35);RD(QHd(xYd(cvd.b),1),35);hvd=cvd.e;RD(QHd(xYd(cvd.e),0),35);RD(QHd(xYd(cvd.e),1),35);RD(QHd(xYd(cvd.e),2),35);RD(QHd(xYd(cvd.e),3),35);RD(QHd(xYd(cvd.e),4),19);RD(QHd(xYd(cvd.e),5),19);RD(QHd(xYd(cvd.e),6),19);RD(QHd(xYd(cvd.e),7),19);RD(QHd(xYd(cvd.e),8),19);RD(QHd(xYd(cvd.e),9),19);RD(QHd(xYd(cvd.e),10),35);mvd=cvd.k;RD(QHd(xYd(cvd.k),0),35);RD(QHd(xYd(cvd.k),1),35)} +function Pqe(a){var b,c,d,e,f;b=a.c;switch(b){case 11:return a.vm();case 12:return a.xm();case 14:return a.zm();case 15:return a.Cm();case 16:return a.Am();case 17:return a.Dm();case 21:Mqe(a);return Vse(),Vse(),Ese;case 10:switch(a.a){case 65:return a.hm();case 90:return a.mm();case 122:return a.tm();case 98:return a.nm();case 66:return a.im();case 60:return a.sm();case 62:return a.qm();}}f=Oqe(a);b=a.c;switch(b){case 3:return a.Im(f);case 4:return a.Gm(f);case 5:return a.Hm(f);case 0:if(a.a==123&&a.d<a.j){e=a.d;d=0;c=-1;if((b=ihb(a.i,e++))>=48&&b<=57){d=b-48;while(e<a.j&&(b=ihb(a.i,e++))>=48&&b<=57){d=d*10+b-48;if(d<0)throw Adb(new Lqe(TId((Hde(),CJe))))}}else{throw Adb(new Lqe(TId((Hde(),yJe))))}c=d;if(b==44){if(e>=a.j){throw Adb(new Lqe(TId((Hde(),AJe))))}else if((b=ihb(a.i,e++))>=48&&b<=57){c=b-48;while(e<a.j&&(b=ihb(a.i,e++))>=48&&b<=57){c=c*10+b-48;if(c<0)throw Adb(new Lqe(TId((Hde(),CJe))))}if(d>c)throw Adb(new Lqe(TId((Hde(),BJe))))}else{c=-1}}if(b!=125)throw Adb(new Lqe(TId((Hde(),zJe))));if(a.bm(e)){f=(Vse(),Vse(),++Use,new Kte(9,f));a.d=e+1}else{f=(Vse(),Vse(),++Use,new Kte(3,f));a.d=e}f.Om(d);f.Nm(c);Mqe(a)}}return f} +function bXb(a){var b,c,d,e,f;c=RD(mQb(a,(Ywc(),kwc)),21);b=vfd(YWb);e=RD(mQb(a,(yCc(),IAc)),346);e==(Fnd(),Cnd)&&ofd(b,ZWb);Heb(TD(mQb(a,GAc)))?pfd(b,(sXb(),nXb),(hcc(),Zbc)):pfd(b,(sXb(),pXb),(hcc(),Zbc));mQb(a,(rid(),qid))!=null&&ofd(b,$Wb);(Heb(TD(mQb(a,PAc)))||Heb(TD(mQb(a,HAc))))&&nfd(b,(sXb(),rXb),(hcc(),lbc));switch(RD(mQb(a,rAc),88).g){case 2:case 3:case 4:nfd(pfd(b,(sXb(),nXb),(hcc(),nbc)),rXb,mbc);}c.Hc((ovc(),fvc))&&nfd(pfd(pfd(b,(sXb(),nXb),(hcc(),kbc)),qXb,ibc),rXb,jbc);dE(mQb(a,ZAc))!==dE((aEc(),$Dc))&&pfd(b,(sXb(),pXb),(hcc(),Rbc));if(c.Hc(mvc)){pfd(b,(sXb(),nXb),(hcc(),Xbc));pfd(b,oXb,Vbc);pfd(b,pXb,Wbc)}dE(mQb(a,Xzc))!==dE(($uc(),Yuc))&&dE(mQb(a,yAc))!==dE((Ymd(),Vmd))&&nfd(b,(sXb(),rXb),(hcc(),Abc));Heb(TD(mQb(a,KAc)))&&pfd(b,(sXb(),pXb),(hcc(),zbc));Heb(TD(mQb(a,nAc)))&&pfd(b,(sXb(),pXb),(hcc(),dcc));if(eXb(a)){dE(mQb(a,IAc))===dE(Cnd)?(d=RD(mQb(a,gAc),298)):(d=RD(mQb(a,hAc),298));f=d==(xvc(),vvc)?(hcc(),Ubc):(hcc(),gcc);pfd(b,(sXb(),qXb),f)}switch(RD(mQb(a,vCc),388).g){case 1:pfd(b,(sXb(),qXb),(hcc(),ecc));break;case 2:nfd(pfd(pfd(b,(sXb(),pXb),(hcc(),ebc)),qXb,fbc),rXb,gbc);}dE(mQb(a,cAc))!==dE((kEc(),hEc))&&pfd(b,(sXb(),pXb),(hcc(),fcc));return b} +function crc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;if(Ujb(a.a,b)){if(Zsb(RD(Wjb(a.a,b),49),c)){return 1}}else{Zjb(a.a,b,new _sb)}if(Ujb(a.a,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return -1}}else{Zjb(a.a,c,new _sb)}if(Ujb(a.e,b)){if(Zsb(RD(Wjb(a.e,b),49),c)){return -1}}else{Zjb(a.e,b,new _sb)}if(Ujb(a.e,c)){if(Zsb(RD(Wjb(a.a,c),49),b)){return 1}}else{Zjb(a.e,c,new _sb)}if(a.c==(kEc(),iEc)||!nQb(b,(Ywc(),zwc))||!nQb(c,(Ywc(),zwc))){l=null;for(j=new Anb(b.j);j.a<j.c.c.length;){h=RD(ynb(j),12);h.e.c.length==0||RD(Vmb(h.e,0),18).c.i.c!=b.c&&(l=RD(Vmb(h.e,0),18).c)}n=null;for(i=new Anb(c.j);i.a<i.c.c.length;){h=RD(ynb(i),12);h.e.c.length==0||RD(Vmb(h.e,0),18).c.i.c!=c.c&&(n=RD(Vmb(h.e,0),18).c)}if(!!l&&!!n){k=l.i;m=n.i;if(!!k&&k==m){for(p=new Anb(k.j);p.a<p.c.c.length;){o=RD(ynb(p),12);if(o==l){erc(a,c,b);return -1}else if(o==n){erc(a,b,c);return 1}}return hgb(drc(a,b),drc(a,c))}for(r=a.d,s=0,t=r.length;s<t;++s){q=r[s];if(q==k){erc(a,c,b);return -1}else if(q==m){erc(a,b,c);return 1}}}if(!nQb(b,(Ywc(),zwc))||!nQb(c,zwc)){e=drc(a,b);g=drc(a,c);e>g?erc(a,b,c):erc(a,c,b);return e<g?-1:e>g?1:0}}d=RD(mQb(b,(Ywc(),zwc)),17).a;f=RD(mQb(c,zwc),17).a;d>f?erc(a,b,c):erc(a,c,b);return d<f?-1:d>f?1:0} +function uAd(b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r;if(d==null){return null}if(b.a!=c.jk()){throw Adb(new agb(VHe+c.xe()+WHe))}if(ZD(c,468)){r=z1d(RD(c,685),d);if(!r){throw Adb(new agb(XHe+d+"' is not a valid enumerator of '"+c.xe()+"'"))}return r}switch(Oee((lke(),jke),c).Nl()){case 2:{d=nue(d,false);break}case 3:{d=nue(d,true);break}}e=Oee(jke,c).Jl();if(e){return e.jk().wi().ti(e,d)}n=Oee(jke,c).Ll();if(n){r=new bnb;for(k=xAd(d),l=0,m=k.length;l<m;++l){j=k[l];Rmb(r,n.jk().wi().ti(n,j))}return r}q=Oee(jke,c).Ml();if(!q.dc()){for(p=q.Kc();p.Ob();){o=RD(p.Pb(),156);try{r=o.jk().wi().ti(o,d);if(r!=null){return r}}catch(a){a=zdb(a);if(!ZD(a,63))throw Adb(a)}}throw Adb(new agb(XHe+d+"' does not match any member types of the union datatype '"+c.xe()+"'"))}RD(c,847).ok();f=Qje(c.kk());if(!f)return null;if(f==SI){h=0;try{h=Oeb(d,qwe,lve)&Bwe}catch(a){a=zdb(a);if(ZD(a,130)){g=Ahb(d);h=g[0]}else throw Adb(a)}return hfb(h)}if(f==qK){for(i=0;i<nAd.length;++i){try{return b2d(nAd[i],d)}catch(a){a=zdb(a);if(!ZD(a,33))throw Adb(a)}}throw Adb(new agb(XHe+d+"' is not a date formatted string of the form yyyy-MM-dd'T'HH:mm:ss'.'SSSZ or a valid subset thereof"))}throw Adb(new agb(XHe+d+"' is invalid. "))} +function z$b(){z$b=geb;y$b=new Tp;Rc(y$b,(qpd(),bpd),fpd);Rc(y$b,mpd,fpd);Rc(y$b,mpd,ipd);Rc(y$b,Zod,epd);Rc(y$b,Zod,fpd);Rc(y$b,cpd,fpd);Rc(y$b,cpd,gpd);Rc(y$b,kpd,_od);Rc(y$b,kpd,fpd);Rc(y$b,hpd,apd);Rc(y$b,hpd,fpd);Rc(y$b,hpd,gpd);Rc(y$b,hpd,_od);Rc(y$b,apd,hpd);Rc(y$b,apd,ipd);Rc(y$b,apd,epd);Rc(y$b,apd,fpd);Rc(y$b,jpd,jpd);Rc(y$b,jpd,gpd);Rc(y$b,jpd,ipd);Rc(y$b,dpd,dpd);Rc(y$b,dpd,gpd);Rc(y$b,dpd,epd);Rc(y$b,lpd,lpd);Rc(y$b,lpd,_od);Rc(y$b,lpd,ipd);Rc(y$b,$od,$od);Rc(y$b,$od,_od);Rc(y$b,$od,epd);Rc(y$b,gpd,cpd);Rc(y$b,gpd,hpd);Rc(y$b,gpd,jpd);Rc(y$b,gpd,dpd);Rc(y$b,gpd,fpd);Rc(y$b,gpd,gpd);Rc(y$b,gpd,ipd);Rc(y$b,gpd,epd);Rc(y$b,_od,kpd);Rc(y$b,_od,hpd);Rc(y$b,_od,lpd);Rc(y$b,_od,$od);Rc(y$b,_od,_od);Rc(y$b,_od,ipd);Rc(y$b,_od,epd);Rc(y$b,_od,fpd);Rc(y$b,ipd,mpd);Rc(y$b,ipd,apd);Rc(y$b,ipd,jpd);Rc(y$b,ipd,lpd);Rc(y$b,ipd,gpd);Rc(y$b,ipd,_od);Rc(y$b,ipd,ipd);Rc(y$b,ipd,fpd);Rc(y$b,epd,Zod);Rc(y$b,epd,apd);Rc(y$b,epd,dpd);Rc(y$b,epd,$od);Rc(y$b,epd,gpd);Rc(y$b,epd,_od);Rc(y$b,epd,epd);Rc(y$b,epd,fpd);Rc(y$b,fpd,bpd);Rc(y$b,fpd,mpd);Rc(y$b,fpd,Zod);Rc(y$b,fpd,cpd);Rc(y$b,fpd,kpd);Rc(y$b,fpd,hpd);Rc(y$b,fpd,apd);Rc(y$b,fpd,gpd);Rc(y$b,fpd,_od);Rc(y$b,fpd,ipd);Rc(y$b,fpd,epd);Rc(y$b,fpd,fpd)} +function _$b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;a.d=new rjd(oxe,oxe);a.c=new rjd(pxe,pxe);for(m=b.Kc();m.Ob();){k=RD(m.Pb(),36);for(t=new Anb(k.a);t.a<t.c.c.length;){s=RD(ynb(t),10);a.d.a=$wnd.Math.min(a.d.a,s.n.a-s.d.b);a.d.b=$wnd.Math.min(a.d.b,s.n.b-s.d.d);a.c.a=$wnd.Math.max(a.c.a,s.n.a+s.o.a+s.d.c);a.c.b=$wnd.Math.max(a.c.b,s.n.b+s.o.b+s.d.a)}}h=new q_b;for(l=b.Kc();l.Ob();){k=RD(l.Pb(),36);d=i_b(a,k);Rmb(h.a,d);d.a=d.a|!RD(mQb(d.c,(Ywc(),ewc)),21).dc()}a.b=(NXb(),B=new XXb,B.f=new EXb(c),B.b=DXb(B.f,h),B);RXb((o=a.b,new Oqd,o));a.e=new pjd;a.a=a.b.f.e;for(g=new Anb(h.a);g.a<g.c.c.length;){e=RD(ynb(g),855);u=SXb(a.b,e);o2b(e.c,u.a,u.b);for(q=new Anb(e.c.a);q.a<q.c.c.length;){p=RD(ynb(q),10);if(p.k==(r3b(),m3b)){r=d_b(a,p.n,RD(mQb(p,(Ywc(),hwc)),64));$id(hjd(p.n),r)}}}for(f=new Anb(h.a);f.a<f.c.c.length;){e=RD(ynb(f),855);for(j=new Anb(o_b(e));j.a<j.c.c.length;){i=RD(ynb(j),18);A=new Fjd(i.a);hu(A,0,K3b(i.c));Mub(A,K3b(i.d));n=null;for(w=Sub(A,0);w.b!=w.d.c;){v=RD(evb(w),8);if(!n){n=v;continue}if(_y(n.a,v.a)){a.e.a=$wnd.Math.min(a.e.a,n.a);a.a.a=$wnd.Math.max(a.a.a,n.a)}else if(_y(n.b,v.b)){a.e.b=$wnd.Math.min(a.e.b,n.b);a.a.b=$wnd.Math.max(a.a.b,n.b)}n=v}}}fjd(a.e);$id(a.a,a.e)} +function vib(a,b){var c,d,e,f,g,h,i,j;c=0;g=0;f=b.length;h=null;j=new cib;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43)){++g;++c;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43||(BFb(g,b.length),b.charCodeAt(g)==45))){throw Adb(new Vgb(nxe+b+'"'))}}while(g<f&&(BFb(g,b.length),b.charCodeAt(g)!=46)&&(BFb(g,b.length),b.charCodeAt(g)!=101)&&(BFb(g,b.length),b.charCodeAt(g)!=69)){++g}j.a+=''+zhb(b==null?vve:(uFb(b),b),c,g);if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==46)){++g;c=g;while(g<f&&(BFb(g,b.length),b.charCodeAt(g)!=101)&&(BFb(g,b.length),b.charCodeAt(g)!=69)){++g}a.e=g-c;j.a+=''+zhb(b==null?vve:(uFb(b),b),c,g)}else{a.e=0}if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==101||(BFb(g,b.length),b.charCodeAt(g)==69))){++g;c=g;if(g<f&&(BFb(g,b.length),b.charCodeAt(g)==43)){++g;g<f&&(BFb(g,b.length),b.charCodeAt(g)!=45)&&++c}h=(AFb(c,f,b.length),b.substr(c,f-c));a.e=a.e-Oeb(h,qwe,lve);if(a.e!=eE(a.e)){throw Adb(new Vgb('Scale out of range.'))}}i=j.a;if(i.length<16){a.f=(sib==null&&(sib=new RegExp('^[+-]?\\d*$','i')),sib.test(i)?parseInt(i,10):NaN);if(isNaN(a.f)){throw Adb(new Vgb(nxe+b+'"'))}a.a=Cib(a.f)}else{wib(a,new ejb(i))}a.d=j.a.length;for(e=0;e<j.a.length;++e){d=ihb(j.a,e);if(d!=45&&d!=48){break}--a.d}a.d==0&&(a.d=1)} +function Wae(a){_Ad(a.b,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentTransient']));_Ad(a.a,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedSourceURI']));_Ad(a.o,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'InterfaceIsAbstract AtMostOneID UniqueFeatureNames UniqueOperationSignatures NoCircularSuperTypes WellFormedMapEntryClass ConsistentSuperTypes DisjointFeatureAndOperationSignatures']));_Ad(a.p,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedInstanceTypeName UniqueTypeParameterNames']));_Ad(a.v,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'UniqueEnumeratorNames UniqueEnumeratorLiterals']));_Ad(a.R,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedName']));_Ad(a.T,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'UniqueParameterNames UniqueTypeParameterNames NoRepeatingVoid']));_Ad(a.U,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'WellFormedNsURI WellFormedNsPrefix UniqueSubpackageNames UniqueClassifierNames UniqueNsURIs']));_Ad(a.W,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentOpposite SingleContainer ConsistentKeys ConsistentUnique ConsistentContainer']));_Ad(a.bb,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ValidDefaultValueLiteral']));_Ad(a.eb,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ValidLowerBound ValidUpperBound ConsistentBounds ValidType']));_Ad(a.H,AKe,cD(WC(qJ,1),Nve,2,6,[CKe,'ConsistentType ConsistentBounds ConsistentArguments']))} +function S7b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C;if(b.dc()){return}e=new Ejd;h=c?c:RD(b.Xb(0),18);o=h.c;HUc();m=o.i.k;if(!(m==(r3b(),p3b)||m==q3b||m==m3b||m==l3b)){throw Adb(new agb('The target node of the edge must be a normal node or a northSouthPort.'))}Oub(e,xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])));if((qpd(),hpd).Hc(o.j)){q=Kfb(UD(mQb(o,(Ywc(),Swc))));l=new rjd(xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a,q);Pub(e,l,e.c.b,e.c)}k=null;d=false;i=b.Kc();while(i.Ob()){g=RD(i.Pb(),18);f=g.a;if(f.b!=0){if(d){j=ijd($id(k,(sFb(f.b!=0),RD(f.a.a.c,8))),0.5);Pub(e,j,e.c.b,e.c);d=false}else{d=true}k=ajd((sFb(f.b!=0),RD(f.c.b.c,8)));ye(e,f);Xub(f)}}p=h.d;if(hpd.Hc(p.j)){q=Kfb(UD(mQb(p,(Ywc(),Swc))));l=new rjd(xjd(cD(WC(l3,1),Nve,8,0,[p.i.n,p.n,p.a])).a,q);Pub(e,l,e.c.b,e.c)}Oub(e,xjd(cD(WC(l3,1),Nve,8,0,[p.i.n,p.n,p.a])));a.d==(lFc(),iFc)&&(r=(sFb(e.b!=0),RD(e.a.a.c,8)),s=RD(ju(e,1),8),t=new qjd(BVc(o.j)),t.a*=5,t.b*=5,u=ojd(new rjd(s.a,s.b),r),v=new rjd(R7b(t.a,u.a),R7b(t.b,u.b)),$id(v,r),w=Sub(e,1),cvb(w,v),A=(sFb(e.b!=0),RD(e.c.b.c,8)),B=RD(ju(e,e.b-2),8),t=new qjd(BVc(p.j)),t.a*=5,t.b*=5,u=ojd(new rjd(B.a,B.b),A),C=new rjd(R7b(t.a,u.a),R7b(t.b,u.b)),$id(C,A),hu(e,e.b-1,C),undefined);n=new wUc(e);ye(h.a,sUc(n))} +function cud(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P;t=RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84);v=t.nh();w=t.oh();u=t.mh()/2;p=t.lh()/2;if(ZD(t,193)){s=RD(t,123);v+=MCd(s).i;v+=MCd(s).i}v+=u;w+=p;F=RD(QHd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b),0),84);H=F.nh();I=F.oh();G=F.mh()/2;A=F.lh()/2;if(ZD(F,193)){D=RD(F,123);H+=MCd(D).i;H+=MCd(D).i}H+=G;I+=A;if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i==0){h=(bvd(),j=new Rzd,j);WGd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),h)}else if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i>1){o=new mMd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a));while(o.e!=o.i.gc()){cMd(o)}}g=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);q=H;H>v+u?(q=v+u):H<v-u&&(q=v-u);r=I;I>w+p?(r=w+p):I<w-p&&(r=w-p);q>v-u&&q<v+u&&r>w-p&&r<w+p&&(q=v+u);Ozd(g,q);Pzd(g,r);B=v;v>H+G?(B=H+G):v<H-G&&(B=H-G);C=w;w>I+A?(C=I+A):w<I-A&&(C=I-A);B>H-G&&B<H+G&&C>I-A&&C<I+A&&(C=I+A);Hzd(g,B);Izd(g,C);sLd((!g.a&&(g.a=new XZd(D4,g,5)),g.a));f=Jwb(b,5);t==F&&++f;L=B-q;O=C-r;J=$wnd.Math.sqrt(L*L+O*O);l=J*0.20000000298023224;M=L/(f+1);P=O/(f+1);K=q;N=r;for(k=0;k<f;k++){K+=M;N+=P;m=K+Kwb(b,24)*Nxe*l-l/2;m<0?(m=1):m>c&&(m=c-1);n=N+Kwb(b,24)*Nxe*l-l/2;n<0?(n=1):n>d&&(n=d-1);e=(bvd(),i=new Xxd,i);Vxd(e,m);Wxd(e,n);WGd((!g.a&&(g.a=new XZd(D4,g,5)),g.a),e)}} +function Y7c(a){Cgd(a,new Pfd($fd(Xfd(Zfd(Yfd(new agd,$Fe),'ELK Rectangle Packing'),'Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces.'),new _7c)));Agd(a,$Fe,Dze,1.3);Agd(a,$Fe,hAe,(Geb(),false));Agd(a,$Fe,Eze,O7c);Agd(a,$Fe,_ze,15);Agd(a,$Fe,YDe,iGd(y7c));Agd(a,$Fe,jAe,iGd(F7c));Agd(a,$Fe,CAe,iGd(H7c));Agd(a,$Fe,iAe,iGd(I7c));Agd(a,$Fe,kAe,iGd(E7c));Agd(a,$Fe,gAe,iGd(J7c));Agd(a,$Fe,lAe,iGd(P7c));Agd(a,$Fe,RFe,iGd(U7c));Agd(a,$Fe,SFe,iGd(T7c));Agd(a,$Fe,QFe,iGd(W7c));Agd(a,$Fe,PFe,iGd(V7c));Agd(a,$Fe,TFe,iGd(M7c));Agd(a,$Fe,UFe,iGd(L7c));Agd(a,$Fe,VFe,iGd(K7c));Agd(a,$Fe,WFe,iGd(S7c));Agd(a,$Fe,dAe,iGd(B7c));Agd(a,$Fe,iEe,iGd(C7c));Agd(a,$Fe,NFe,iGd(A7c));Agd(a,$Fe,MFe,iGd(z7c));Agd(a,$Fe,OFe,iGd(D7c));Agd(a,$Fe,LFe,iGd(R7c))} +function Ajb(a,b){xjb();var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;B=a.e;o=a.d;e=a.a;if(B==0){switch(b){case 0:return '0';case 1:return zxe;case 2:return '0.00';case 3:return '0.000';case 4:return '0.0000';case 5:return '0.00000';case 6:return '0.000000';default:w=new bib;b<0?(w.a+='0E+',w):(w.a+='0E',w);w.a+=-b;return w.a;}}t=o*10+1+7;u=$C(hE,zwe,28,t+1,15,1);c=t;if(o==1){h=e[0];if(h<0){H=Cdb(h,yxe);do{p=H;H=Fdb(H,10);u[--c]=48+Ydb(Vdb(p,Ndb(H,10)))&Bwe}while(Ddb(H,0)!=0)}else{H=h;do{p=H;H=H/10|0;u[--c]=48+(p-H*10)&Bwe}while(H!=0)}}else{D=$C(kE,Pwe,28,o,15,1);G=o;hib(e,0,D,0,G);I:while(true){A=0;for(j=G-1;j>=0;j--){F=Bdb(Sdb(A,32),Cdb(D[j],yxe));r=yjb(F);D[j]=Ydb(r);A=Ydb(Tdb(r,32))}s=Ydb(A);q=c;do{u[--c]=48+s%10&Bwe}while((s=s/10|0)!=0&&c!=0);d=9-q+c;for(i=0;i<d&&c>0;i++){u[--c]=48}l=G-1;for(;D[l]==0;l--){if(l==0){break I}}G=l+1}while(u[c]==48){++c}}n=B<0;g=t-c-b-1;if(b==0){n&&(u[--c]=45);return Ihb(u,c,t-c)}if(b>0&&g>=-6){if(g>=0){k=c+g;for(m=t-1;m>=k;m--){u[m+1]=u[m]}u[++k]=46;n&&(u[--c]=45);return Ihb(u,c,t-c+1)}for(l=2;l<-g+1;l++){u[--c]=48}u[--c]=46;u[--c]=48;n&&(u[--c]=45);return Ihb(u,c,t-c)}C=c+1;f=t;v=new cib;n&&(v.a+='-',v);if(f-C>=1){Thb(v,u[c]);v.a+='.';v.a+=Ihb(u,c+1,t-c-1)}else{v.a+=Ihb(u,c,t-c)}v.a+='E';g>0&&(v.a+='+',v);v.a+=''+g;return v.a} +function Jad(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;a.c=b;a.g=new Tsb;c=(lud(),new zud(a.c));d=new PJb(c);LJb(d);t=WD(Gxd(a.c,(ncd(),gcd)));i=RD(Gxd(a.c,icd),324);v=RD(Gxd(a.c,jcd),437);g=RD(Gxd(a.c,bcd),489);u=RD(Gxd(a.c,hcd),438);a.j=Kfb(UD(Gxd(a.c,kcd)));h=a.a;switch(i.g){case 0:h=a.a;break;case 1:h=a.b;break;case 2:h=a.i;break;case 3:h=a.e;break;case 4:h=a.f;break;default:throw Adb(new agb(eGe+(i.f!=null?i.f:''+i.g)));}a.d=new qbd(h,v,g);pQb(a.d,(OQb(),MQb),TD(Gxd(a.c,dcd)));a.d.c=Heb(TD(Gxd(a.c,ccd)));if(tCd(a.c).i==0){return a.d}for(l=new dMd(tCd(a.c));l.e!=l.i.gc();){k=RD(bMd(l),27);n=k.g/2;m=k.f/2;w=new rjd(k.i+n,k.j+m);while(Ujb(a.g,w)){Zid(w,($wnd.Math.random()-0.5)*Vze,($wnd.Math.random()-0.5)*Vze)}p=RD(Gxd(k,(umd(),eld)),140);q=new TQb(w,new Uid(w.a-n-a.j/2-p.b,w.b-m-a.j/2-p.d,k.g+a.j+(p.b+p.c),k.f+a.j+(p.d+p.a)));Rmb(a.d.i,q);Zjb(a.g,w,new Ptd(q,k))}switch(u.g){case 0:if(t==null){a.d.d=RD(Vmb(a.d.i,0),68)}else{for(s=new Anb(a.d.i);s.a<s.c.c.length;){q=RD(ynb(s),68);o=RD(RD(Wjb(a.g,q.a),42).b,27).jh();o!=null&&lhb(o,t)&&(a.d.d=q)}}break;case 1:e=new rjd(a.c.g,a.c.f);e.a*=0.5;e.b*=0.5;Zid(e,a.c.i,a.c.j);f=oxe;for(r=new Anb(a.d.i);r.a<r.c.c.length;){q=RD(ynb(r),68);j=bjd(q.a,e);if(j<f){f=j;a.d.d=q}}break;default:throw Adb(new agb(eGe+(u.f!=null?u.f:''+u.g)));}return a.d} +function b5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;m=0;for(e=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));e.e!=e.i.gc();){d=RD(bMd(e),27);if(!Heb(TD(Gxd(d,(yCc(),pBc))))){k=vCd(d);if((dE(Gxd(k,cAc))!==dE((kEc(),hEc))||dE(Gxd(k,pAc))===dE((Ptc(),Otc))||dE(Gxd(k,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(k,eAc)))||dE(Gxd(k,Yzc))!==dE((U$b(),T$b))||dE(Gxd(k,ZAc))===dE((aEc(),TDc))||dE(Gxd(k,ZAc))===dE((aEc(),UDc))||dE(Gxd(k,$Ac))===dE((_Cc(),SCc))||dE(Gxd(k,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(d,aAc)))){Ixd(d,(Ywc(),zwc),sgb(m));++m}i5b(a,d,c)}}m=0;for(j=new dMd((!b.b&&(b.b=new C5d(G4,b,12,3)),b.b));j.e!=j.i.gc();){h=RD(bMd(j),74);if(dE(Gxd(b,(yCc(),cAc)))!==dE((kEc(),hEc))||dE(Gxd(b,pAc))===dE((Ptc(),Otc))||dE(Gxd(b,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(b,eAc)))||dE(Gxd(b,Yzc))!==dE((U$b(),T$b))||dE(Gxd(b,ZAc))===dE((aEc(),TDc))||dE(Gxd(b,ZAc))===dE((aEc(),UDc))||dE(Gxd(b,$Ac))===dE((_Cc(),SCc))||dE(Gxd(b,$Ac))===dE((_Cc(),UCc))){Ixd(h,(Ywc(),zwc),sgb(m));++m}p=JGd(h);q=LGd(h);l=Heb(TD(Gxd(p,NAc)));o=!Heb(TD(Gxd(h,pBc)));n=l&&ozd(h)&&Heb(TD(Gxd(h,OAc)));f=vCd(p)==b&&vCd(p)==vCd(q);g=(vCd(p)==b&&q==b)^(vCd(q)==b&&p==b);o&&!n&&(g||f)&&f5b(a,h,b,c)}if(vCd(b)){for(i=new dMd(uCd(vCd(b)));i.e!=i.i.gc();){h=RD(bMd(i),74);p=JGd(h);if(p==b&&ozd(h)){n=Heb(TD(Gxd(p,(yCc(),NAc))))&&Heb(TD(Gxd(h,OAc)));n&&f5b(a,h,b,c)}}}} +function SFc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L;c.Ug('Greedy cycle removal',1);t=b.a;L=t.c.length;a.a=$C(kE,Pwe,28,L,15,1);a.c=$C(kE,Pwe,28,L,15,1);a.b=$C(kE,Pwe,28,L,15,1);j=0;for(r=new Anb(t);r.a<r.c.c.length;){p=RD(ynb(r),10);p.p=j;for(C=new Anb(p.j);C.a<C.c.c.length;){w=RD(ynb(C),12);for(h=new Anb(w.e);h.a<h.c.c.length;){d=RD(ynb(h),18);if(d.c.i==p){continue}G=RD(mQb(d,(yCc(),KBc)),17).a;a.a[j]+=G>0?G+1:1}for(g=new Anb(w.g);g.a<g.c.c.length;){d=RD(ynb(g),18);if(d.d.i==p){continue}G=RD(mQb(d,(yCc(),KBc)),17).a;a.c[j]+=G>0?G+1:1}}a.c[j]==0?Mub(a.e,p):a.a[j]==0&&Mub(a.f,p);++j}o=-1;n=1;l=new bnb;a.d=RD(mQb(b,(Ywc(),Lwc)),234);while(L>0){while(a.e.b!=0){I=RD(Uub(a.e),10);a.b[I.p]=o--;TFc(a,I);--L}while(a.f.b!=0){J=RD(Uub(a.f),10);a.b[J.p]=n++;TFc(a,J);--L}if(L>0){m=qwe;for(s=new Anb(t);s.a<s.c.c.length;){p=RD(ynb(s),10);if(a.b[p.p]==0){u=a.c[p.p]-a.a[p.p];if(u>=m){if(u>m){l.c.length=0;m=u}ZEb(l.c,p)}}}k=a.sg(l);a.b[k.p]=n++;TFc(a,k);--L}}H=t.c.length+1;for(j=0;j<t.c.length;j++){a.b[j]<0&&(a.b[j]+=H)}for(q=new Anb(t);q.a<q.c.c.length;){p=RD(ynb(q),10);F=u2b(p.j);for(A=F,B=0,D=A.length;B<D;++B){w=A[B];v=s2b(w.g);for(e=v,f=0,i=e.length;f<i;++f){d=e[f];K=d.d.i.p;if(a.b[p.p]>a.b[K]){X0b(d,true);pQb(b,awc,(Geb(),true))}}}}a.a=null;a.c=null;a.b=null;Xub(a.f);Xub(a.e);c.Vg()} +function usd(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;v=RD(QHd((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a),0),166);k=new Ejd;u=new Tsb;w=xsd(v);rtb(u.f,v,w);m=new Tsb;d=new Yub;for(o=Fl(Al(cD(WC(cJ,1),rve,20,0,[(!b.d&&(b.d=new Yie(G4,b,8,5)),b.d),(!b.e&&(b.e=new Yie(G4,b,7,4)),b.e)])));gs(o);){n=RD(hs(o),74);if((!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i!=1){throw Adb(new agb(tHe+(!a.a&&(a.a=new C5d(F4,a,6,6)),a.a).i))}if(n!=a){q=RD(QHd((!n.a&&(n.a=new C5d(F4,n,6,6)),n.a),0),166);Pub(d,q,d.c.b,d.c);p=RD(Wd(qtb(u.f,q)),13);if(!p){p=xsd(q);rtb(u.f,q,p)}l=c?ojd(new sjd(RD(Vmb(w,w.c.length-1),8)),RD(Vmb(p,p.c.length-1),8)):ojd(new sjd((tFb(0,w.c.length),RD(w.c[0],8))),(tFb(0,p.c.length),RD(p.c[0],8)));rtb(m.f,q,l)}}if(d.b!=0){r=RD(Vmb(w,c?w.c.length-1:0),8);for(j=1;j<w.c.length;j++){s=RD(Vmb(w,c?w.c.length-1-j:j),8);e=Sub(d,0);while(e.b!=e.d.c){q=RD(evb(e),166);p=RD(Wd(qtb(u.f,q)),13);if(p.c.length<=j){gvb(e)}else{t=$id(new sjd(RD(Vmb(p,c?p.c.length-1-j:j),8)),RD(Wd(qtb(m.f,q)),8));if(s.a!=t.a||s.b!=t.b){f=s.a-r.a;h=s.b-r.b;g=t.a-r.a;i=t.b-r.b;g*h==i*f&&(f==0||isNaN(f)?f:f<0?-1:1)==(g==0||isNaN(g)?g:g<0?-1:1)&&(h==0||isNaN(h)?h:h<0?-1:1)==(i==0||isNaN(i)?i:i<0?-1:1)?($wnd.Math.abs(f)<$wnd.Math.abs(g)||$wnd.Math.abs(h)<$wnd.Math.abs(i))&&(Pub(k,s,k.c.b,k.c),true):j>1&&(Pub(k,r,k.c.b,k.c),true);gvb(e)}}}r=s}}return k} +function S_c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;c.Ug(_Ee,1);D=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new e0c),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);k=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new g0c(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);o=RD(zDb(CDb(new SDb(null,new Swb(b,16)),new i0c(b)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);p=$C(Z$,NEe,39,b.gc(),0,1);for(g=0;g<k.gc();g++){e=RD(k.Xb(g),39);C=RD(mQb(e,(h_c(),W$c)),17).a;if(C>=0&&C<k.gc()&&!p[C]){p[C]=e;k.gd(g);--g}}for(h=0;h<k.gc();h++){e=RD(k.Xb(h),39);C=RD(mQb(e,(h_c(),W$c)),17).a;for(m=0;;m++){n=C+m;if(n<p.length&&n>=0&&!p[n]){p[n]=e;k.gd(h);--h;break}n=C-m;if(n<p.length&&n>=0&&!p[n]){p[n]=e;k.gd(h);--h;break}}}o.jd(new k0c);for(i=p.length-1;i>=0;i--){if(!p[i]&&!o.dc()){p[i]=RD(o.Xb(0),39);o.gd(0)}}for(j=0;j<p.length;j++){if(!p[j]&&!D.dc()){p[j]=RD(D.Xb(0),39);D.gd(0)}}for(f=0;f<p.length;f++){pQb(p[f],(q$c(),i$c),sgb(f))}l=RD(RDb(CDb(new SDb(null,new Swb(b,16)),new o0c),new a0c),534);for(w=l,A=0,B=w.length;A<B;++A){v=w[A];d=$Wc(v);S_c(a,d,c.eh(1/l.length|0));yob();tvb(d,new uGd((q$c(),i$c)));q=new Yub;for(u=Sub(d,0);u.b!=u.d.c;){t=RD(evb(u),39);for(s=Sub(v.d,0);s.b!=s.d.c;){r=RD(evb(s),65);r.c==t&&(Pub(q,r,q.c.b,q.c),true)}}Xub(v.d);ye(v.d,q)}c.Vg()} +function jTb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=new bnb;h=new bnb;q=b/2;n=a.gc();e=RD(a.Xb(0),8);r=RD(a.Xb(1),8);o=kTb(e.a,e.b,r.a,r.b,q);Rmb(d,(tFb(0,o.c.length),RD(o.c[0],8)));Rmb(h,(tFb(1,o.c.length),RD(o.c[1],8)));for(j=2;j<n;j++){p=e;e=r;r=RD(a.Xb(j),8);o=kTb(e.a,e.b,p.a,p.b,q);Rmb(d,(tFb(1,o.c.length),RD(o.c[1],8)));Rmb(h,(tFb(0,o.c.length),RD(o.c[0],8)));o=kTb(e.a,e.b,r.a,r.b,q);Rmb(d,(tFb(0,o.c.length),RD(o.c[0],8)));Rmb(h,(tFb(1,o.c.length),RD(o.c[1],8)))}o=kTb(r.a,r.b,e.a,e.b,q);Rmb(d,(tFb(1,o.c.length),RD(o.c[1],8)));Rmb(h,(tFb(0,o.c.length),RD(o.c[0],8)));c=new Ejd;g=new bnb;Mub(c,(tFb(0,d.c.length),RD(d.c[0],8)));for(k=1;k<d.c.length-2;k+=2){f=(tFb(k,d.c.length),RD(d.c[k],8));m=iTb((tFb(k-1,d.c.length),RD(d.c[k-1],8)),f,(tFb(k+1,d.c.length),RD(d.c[k+1],8)),(tFb(k+2,d.c.length),RD(d.c[k+2],8)));!isFinite(m.a)||!isFinite(m.b)?(Pub(c,f,c.c.b,c.c),true):(Pub(c,m,c.c.b,c.c),true)}Mub(c,RD(Vmb(d,d.c.length-1),8));Rmb(g,(tFb(0,h.c.length),RD(h.c[0],8)));for(l=1;l<h.c.length-2;l+=2){f=(tFb(l,h.c.length),RD(h.c[l],8));m=iTb((tFb(l-1,h.c.length),RD(h.c[l-1],8)),f,(tFb(l+1,h.c.length),RD(h.c[l+1],8)),(tFb(l+2,h.c.length),RD(h.c[l+2],8)));!isFinite(m.a)||!isFinite(m.b)?(ZEb(g.c,f),true):(ZEb(g.c,m),true)}Rmb(g,RD(Vmb(h,h.c.length-1),8));for(i=g.c.length-1;i>=0;i--){Mub(c,(tFb(i,g.c.length),RD(g.c[i],8)))}return c} +function l9c(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;t=Kfb(UD(Gxd(b,(X6c(),W6c))));n=Kfb(UD(Gxd(b,U6c)));m=Kfb(UD(Gxd(b,R6c)));Bad((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));r=U8c((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a),t,a.b);for(q=0;q<r.c.length;q++){i=(tFb(q,r.c.length),RD(r.c[q],186));if(q!=0){o=(tFb(q-1,r.c.length),RD(r.c[q-1],186));Gad(i,o.f+o.b+a.b)}p=J8c(q,r,t,a.b,Heb(TD(Gxd(b,(X7c(),L7c)))));if(Heb(TD(p.b))){for(f=new Anb(i.a);f.a<f.c.c.length;){e=RD(ynb(f),172);e.c=false;e.k=false;N9c(e)}i.d=new bnb;i.e=t;--q}else{k9c(a,i);if(q+1<r.c.length){a.e=$wnd.Math.max(i.e+a.b+RD(Vmb((tFb(q+1,r.c.length),RD(r.c[q+1],186)).a,0),172).r-t,a.c);a.f=$wnd.Math.min(i.e+a.b+RD(Vmb((tFb(q+1,r.c.length),RD(r.c[q+1],186)).a,0),172).r-t,a.d);if(i.d.c.length!=0){a.c=$wnd.Math.max(a.c,RD(Vmb(i.d,i.d.c.length-1),315).d+(i.d.c.length<=1?0:a.b));a.d=$wnd.Math.min(a.c,RD(Vmb(i.d,i.d.c.length-1),315).d+(i.d.c.length<=1?0:a.b))}}if(r.c.length==1){l=RD(Vmb(i.d,i.d.c.length-1),315);k=RD(Vmb(l.a,l.a.c.length-1),172);for(h=new Anb(k.n);h.a<h.c.c.length;){g=RD(ynb(h),209);a.c=$wnd.Math.max(a.c,k.r-g.d);a.d=$wnd.Math.min(a.d,k.r-g.d);a.e=$wnd.Math.max(a.e,g.d+a.b);a.f=$wnd.Math.min(a.f,g.d+a.b)}}}}s=zad(r,a.b);u=$wnd.Math.max(s.a,n-(c.b+c.c));j=$wnd.Math.max(s.b,m-(c.d+c.a));d=j-s.b;Ixd(b,M6c,d);Ixd(b,V6c,r);return new lad(a.a,u,s.b+d,(sad(),rad))} +function e9b(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;A=RD(mQb(a,(yCc(),BBc)),101);if(!(A!=(Bod(),zod)&&A!=Aod)){return}o=a.b;n=o.c.length;k=new cnb((dk(n+2,lwe),dz(Bdb(Bdb(5,n+2),(n+2)/10|0))));p=new cnb((dk(n+2,lwe),dz(Bdb(Bdb(5,n+2),(n+2)/10|0))));Rmb(k,new Tsb);Rmb(k,new Tsb);Rmb(p,new bnb);Rmb(p,new bnb);w=new bnb;for(b=0;b<n;b++){c=(tFb(b,o.c.length),RD(o.c[b],30));B=(tFb(b,k.c.length),RD(k.c[b],85));q=new Tsb;ZEb(k.c,q);D=(tFb(b,p.c.length),RD(p.c[b],15));s=new bnb;ZEb(p.c,s);for(e=new Anb(c.a);e.a<e.c.c.length;){d=RD(ynb(e),10);if(a9b(d)){ZEb(w.c,d);continue}for(j=new is(Mr(Z2b(d).a.Kc(),new ir));gs(j);){h=RD(hs(j),18);F=h.c.i;if(!a9b(F)){continue}C=RD(B.xc(mQb(F,(Ywc(),Awc))),10);if(!C){C=_8b(a,F);B.zc(mQb(F,Awc),C);D.Fc(C)}Y0b(h,RD(Vmb(C.j,1),12))}for(i=new is(Mr(a3b(d).a.Kc(),new ir));gs(i);){h=RD(hs(i),18);G=h.d.i;if(!a9b(G)){continue}r=RD(Wjb(q,mQb(G,(Ywc(),Awc))),10);if(!r){r=_8b(a,G);Zjb(q,mQb(G,Awc),r);ZEb(s.c,r)}Z0b(h,RD(Vmb(r.j,0),12))}}}for(l=0;l<p.c.length;l++){t=(tFb(l,p.c.length),RD(p.c[l],15));if(t.dc()){continue}m=null;if(l==0){m=new R4b(a);wFb(0,o.c.length);XEb(o.c,0,m)}else if(l==k.c.length-1){m=new R4b(a);ZEb(o.c,m)}else{m=(tFb(l-1,o.c.length),RD(o.c[l-1],30))}for(g=t.Kc();g.Ob();){f=RD(g.Pb(),10);g3b(f,m)}}for(v=new Anb(w);v.a<v.c.c.length;){u=RD(ynb(v),10);g3b(u,null)}pQb(a,(Ywc(),fwc),w)} +function SNc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K;I=new bnb;for(o=new Anb(b.b);o.a<o.c.c.length;){m=RD(ynb(o),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);u.p=-1;l=qwe;B=qwe;for(D=new Anb(u.j);D.a<D.c.c.length;){C=RD(ynb(D),12);for(e=new Anb(C.e);e.a<e.c.c.length;){c=RD(ynb(e),18);F=RD(mQb(c,(yCc(),MBc)),17).a;l=$wnd.Math.max(l,F)}for(d=new Anb(C.g);d.a<d.c.c.length;){c=RD(ynb(d),18);F=RD(mQb(c,(yCc(),MBc)),17).a;B=$wnd.Math.max(B,F)}}pQb(u,HNc,sgb(l));pQb(u,INc,sgb(B))}}r=0;for(n=new Anb(b.b);n.a<n.c.c.length;){m=RD(ynb(n),30);for(v=new Anb(m.a);v.a<v.c.c.length;){u=RD(ynb(v),10);if(u.p<0){H=new ZNc;H.b=r++;ONc(a,u,H);ZEb(I.c,H)}}}A=ev(I.c.length);k=ev(I.c.length);for(g=0;g<I.c.length;g++){Rmb(A,new bnb);Rmb(k,sgb(0))}MNc(b,I,A,k);J=RD(anb(I,$C(SY,uEe,261,I.c.length,0,1)),854);w=RD(anb(A,$C(QK,Ize,15,A.c.length,0,1)),198);j=$C(kE,Pwe,28,k.c.length,15,1);for(h=0;h<j.length;h++){j[h]=(tFb(h,k.c.length),RD(k.c[h],17)).a}s=0;t=new bnb;for(i=0;i<J.length;i++){j[i]==0&&(ZEb(t.c,J[i]),true)}q=$C(kE,Pwe,28,J.length,15,1);while(t.c.length!=0){H=RD(Xmb(t,0),261);q[H.b]=s++;while(!w[H.b].dc()){K=RD(w[H.b].gd(0),261);--j[K.b];j[K.b]==0&&(ZEb(t.c,K),true)}}a.a=$C(SY,uEe,261,J.length,0,1);for(f=0;f<J.length;f++){p=J[f];G=q[f];a.a[G]=p;p.b=G;for(v=new Anb(p.e);v.a<v.c.c.length;){u=RD(ynb(v),10);u.p=G}}return a.a} +function J8c(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r;p=false;i=false;m=a+1;o=(tFb(a,b.c.length),RD(b.c[a],186));h=o.a;j=null;for(g=0;g<o.a.c.length;g++){f=(tFb(g,h.c.length),RD(h.c[g],172));if(f.c){continue}if(f.b.c.length==0){gib();String.fromCharCode(10);Fad(o,f);--g;p=true;continue}if(!f.k){!!j&&gad(j);j=new had(!j?0:j.e+j.d+d,o.f,d);U9c(f,j.e+j.d,o.f);Rmb(o.d,j);aad(j,f);f.k=true}k=null;k=(r=null,g<o.a.c.length-1?(r=RD(Vmb(o.a,g+1),172)):m<b.c.length&&(tFb(m,b.c.length),RD(b.c[m],186)).a.c.length!=0&&(r=RD(Vmb((tFb(m,b.c.length),RD(b.c[m],186)).a,0),172)),r);q=false;!!k&&(q=!pb(k.j,o));if(k){if(k.b.c.length!=0&&!Heb(TD(RD(Vmb(k.b,0),27).of((X7c(),D7c))))){Q9c(f,c-f.s);gad(f.q);p=p|I8c(o,f,k,c,d)}else{Fad(o,k);break}if(k.b.c.length==0){b.c.length>m&&Fad((tFb(m,b.c.length),RD(b.c[m],186)),k);k=null;while(b.c.length>m&&(tFb(m,b.c.length),RD(b.c[m],186)).a.c.length==0){Ymb(b,(tFb(m,b.c.length),b.c[m]))}}if(!k){--g;continue}if(!Heb(TD(RD(Vmb(k.b,0),27).of((X7c(),D7c))))&&K8c(b,o,f,k,q,c,m,d)){p=true;continue}if(q){n=o.b;l=k.f;if(!Heb(TD(RD(Vmb(k.b,0),27).of(D7c)))&&L8c(b,o,f,k,c,m,d,e)){p=true;if(n<l){i=true;k.j=o;break}continue}else if(M8c(o,f)){f.c=true;p=true;continue}}else if(M8c(o,f)){f.c=true;p=true;continue}if(p){continue}}if(M8c(o,f)){f.c=true;p=true;!!k&&(k.k=false);continue}else{gad(f.q)}}return new Ptd((Geb(),p?true:false),i?true:false)} +function yCc(){yCc=geb;QBc=(umd(),Wld);RBc=Xld;SBc=Yld;TBc=Zld;VBc=$ld;WBc=_ld;ZBc=bmd;_Bc=dmd;aCc=emd;$Bc=cmd;bCc=fmd;dCc=gmd;fCc=jmd;YBc=amd;PBc=(Ozc(),ezc);UBc=fzc;XBc=gzc;cCc=hzc;JBc=new mGd(Rld,sgb(0));KBc=bzc;LBc=czc;MBc=dzc;vCc=Fzc;nCc=kzc;oCc=nzc;rCc=vzc;pCc=qzc;qCc=szc;xCc=Kzc;wCc=Hzc;tCc=Bzc;sCc=zzc;uCc=Dzc;iBc=Uyc;jBc=Vyc;DAc=dyc;EAc=gyc;jCc=mmd;lCc=qmd;iCc=lmd;hCc=kmd;kCc=(mqd(),jqd);new mGd(nmd,kCc);rBc=new A3b(12);qBc=new mGd(tld,rBc);zAc=(Ymd(),Umd);yAc=new mGd(Skd,zAc);ABc=new mGd(Gld,0);NBc=new mGd(Sld,sgb(1));Tzc=new mGd(Dkd,Yze);pBc=rld;BBc=Hld;GBc=Old;qAc=Mkd;Rzc=Bkd;IAc=Xkd;OBc=new mGd(Vld,(Geb(),true));NAc=$kd;OAc=_kd;lBc=kld;oBc=pld;mBc=mld;tAc=(Cmd(),Amd);rAc=new mGd(Nkd,tAc);dBc=ild;cBc=gld;EBc=Lld;DBc=Kld;FBc=Nld;uBc=(pod(),ood);new mGd(zld,uBc);wBc=Cld;xBc=Dld;yBc=Eld;vBc=Bld;mCc=jzc;$Ac=Fyc;ZAc=Dyc;gCc=izc;UAc=vyc;pAc=Rxc;oAc=Pxc;eAc=yxc;fAc=zxc;hAc=Exc;gAc=Axc;nAc=Nxc;aBc=Hyc;bBc=Iyc;QAc=oyc;kBc=Zyc;fBc=Myc;GAc=jyc;hBc=Syc;BAc=_xc;CAc=byc;dAc=Kkd;eBc=Jyc;Xzc=mxc;Wzc=kxc;Vzc=jxc;KAc=myc;JAc=lyc;LAc=nyc;nBc=nld;RAc=cld;FAc=Ukd;wAc=Qkd;vAc=Pkd;iAc=Hxc;CBc=Jld;Uzc=Jkd;MAc=Zkd;zBc=Fld;sBc=vld;tBc=xld;WAc=yyc;XAc=Ayc;IBc=Qld;Szc=ixc;YAc=Cyc;xAc=Xxc;uAc=Vxc;_Ac=eld;SAc=syc;gBc=Pyc;eCc=hmd;sAc=Txc;HBc=_yc;AAc=Zxc;jAc=Jxc;kAc=Kxc;TAc=uyc;lAc=Lxc;PAc=bld;VAc=xyc;mAc=Mxc;cAc=wxc;_zc=sxc;Zzc=qxc;$zc=rxc;aAc=uxc;Yzc=oxc;bAc=vxc;HAc=kyc} +function Mqe(a){var b,c,d;if(a.d>=a.j){a.a=-1;a.c=1;return}b=ihb(a.i,a.d++);a.a=b;if(a.b==1){switch(b){case 92:d=10;if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),VIe))));a.a=ihb(a.i,a.d++);break;case 45:if((a.e&512)==512&&a.d<a.j&&ihb(a.i,a.d)==91){++a.d;d=24}else d=0;break;case 91:if((a.e&512)!=512&&a.d<a.j&&ihb(a.i,a.d)==58){++a.d;d=20;break}default:if((b&64512)==uxe&&a.d<a.j){c=ihb(a.i,a.d);if((c&64512)==56320){a.a=txe+(b-uxe<<10)+c-56320;++a.d}}d=0;}a.c=d;return}switch(b){case 124:d=2;break;case 42:d=3;break;case 43:d=4;break;case 63:d=5;break;case 41:d=7;break;case 46:d=8;break;case 91:d=9;break;case 94:d=11;break;case 36:d=12;break;case 40:d=6;if(a.d>=a.j)break;if(ihb(a.i,a.d)!=63)break;if(++a.d>=a.j)throw Adb(new Lqe(TId((Hde(),WIe))));b=ihb(a.i,a.d++);switch(b){case 58:d=13;break;case 61:d=14;break;case 33:d=15;break;case 91:d=19;break;case 62:d=18;break;case 60:if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),WIe))));b=ihb(a.i,a.d++);if(b==61){d=16}else if(b==33){d=17}else throw Adb(new Lqe(TId((Hde(),XIe))));break;case 35:while(a.d<a.j){b=ihb(a.i,a.d++);if(b==41)break}if(b!=41)throw Adb(new Lqe(TId((Hde(),YIe))));d=21;break;default:if(b==45||97<=b&&b<=122||65<=b&&b<=90){--a.d;d=22;break}else if(b==40){d=23;break}throw Adb(new Lqe(TId((Hde(),WIe))));}break;case 92:d=10;if(a.d>=a.j)throw Adb(new Lqe(TId((Hde(),VIe))));a.a=ihb(a.i,a.d++);break;default:d=0;}a.c=d} +function oXc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q;c.Ug('Process compaction',1);if(!Heb(TD(mQb(b,(h_c(),F$c))))){return}e=RD(mQb(b,H$c),88);n=Kfb(UD(mQb(b,_$c)));pXc(a,b,e);lXc(b,n/2/2);o=b.b;tvb(o,new EXc(e));for(j=Sub(o,0);j.b!=j.d.c;){i=RD(evb(j),39);if(!Heb(TD(mQb(i,(q$c(),n$c))))){d=mXc(i,e);p=lWc(i,b);l=0;m=0;if(d){q=d.e;switch(e.g){case 2:l=q.a-n-i.f.a;p.e.a-n-i.f.a<l&&(l=p.e.a-n-i.f.a);m=l+i.f.a;break;case 1:l=q.a+d.f.a+n;p.e.a+n>l&&(l=p.e.a+p.f.a+n);m=l+i.f.a;break;case 4:l=q.b-n-i.f.b;p.e.b-n-i.f.b<l&&(l=p.e.b-n-i.f.b);m=l+i.f.b;break;case 3:l=q.b+d.f.b+n;p.e.b+n>l&&(l=p.e.b+p.f.b+n);m=l+i.f.b;}}else if(p){switch(e.g){case 2:l=p.e.a-n-i.f.a;m=l+i.f.a;break;case 1:l=p.e.a+p.f.a+n;m=l+i.f.a;break;case 4:l=p.e.b-n-i.f.b;m=l+i.f.b;break;case 3:l=p.e.b+p.f.b+n;m=l+i.f.b;}}if(dE(mQb(b,K$c))===dE((LZc(),IZc))){f=l;g=m;h=DDb(CDb(new SDb(null,new Swb(a.a,16)),new IXc(f,g)));if(h.a!=null){e==(Cmd(),ymd)||e==zmd?(i.e.a=l):(i.e.b=l)}else{e==(Cmd(),ymd)||e==Bmd?(h=DDb(CDb(NDb(new SDb(null,new Swb(a.a,16))),new WXc(f)))):(h=DDb(CDb(NDb(new SDb(null,new Swb(a.a,16))),new YXc(f))));h.a!=null&&(e==ymd||e==zmd?(i.e.a=Kfb(UD((sFb(h.a!=null),RD(h.a,42)).a))):(i.e.b=Kfb(UD((sFb(h.a!=null),RD(h.a,42)).a))))}if(h.a!=null){k=Wmb(a.a,(sFb(h.a!=null),h.a),0);if(k>0&&k!=RD(mQb(i,f_c),17).a){pQb(i,UZc,(Geb(),true));pQb(i,f_c,sgb(k))}}}else{e==(Cmd(),ymd)||e==zmd?(i.e.a=l):(i.e.b=l)}}}c.Vg()} +function Fre(a){var b,c,d,e,f,g,h,i,j;a.b=1;Mqe(a);b=null;if(a.c==0&&a.a==94){Mqe(a);b=(Vse(),Vse(),++Use,new xte(4));rte(b,0,MLe);h=(null,++Use,new xte(4))}else{h=(Vse(),Vse(),++Use,new xte(4))}e=true;while((j=a.c)!=1){if(j==0&&a.a==93&&!e){if(b){wte(b,h);h=b}break}c=a.a;d=false;if(j==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:ute(h,Ere(c));d=true;break;case 105:case 73:case 99:case 67:c=(ute(h,Ere(c)),-1);c<0&&(d=true);break;case 112:case 80:i=Sqe(a,c);if(!i)throw Adb(new Lqe(TId((Hde(),hJe))));ute(h,i);d=true;break;default:c=Dre(a);}}else if(j==24&&!e){if(b){wte(b,h);h=b}f=Fre(a);wte(h,f);if(a.c!=0||a.a!=93)throw Adb(new Lqe(TId((Hde(),lJe))));break}Mqe(a);if(!d){if(j==0){if(c==91)throw Adb(new Lqe(TId((Hde(),mJe))));if(c==93)throw Adb(new Lqe(TId((Hde(),nJe))));if(c==45&&!e&&a.a!=93)throw Adb(new Lqe(TId((Hde(),oJe))))}if(a.c!=0||a.a!=45||c==45&&e){rte(h,c,c)}else{Mqe(a);if((j=a.c)==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(j==0&&a.a==93){rte(h,c,c);rte(h,45,45)}else if(j==0&&a.a==93||j==24){throw Adb(new Lqe(TId((Hde(),oJe))))}else{g=a.a;if(j==0){if(g==91)throw Adb(new Lqe(TId((Hde(),mJe))));if(g==93)throw Adb(new Lqe(TId((Hde(),nJe))));if(g==45)throw Adb(new Lqe(TId((Hde(),oJe))))}else j==10&&(g=Dre(a));Mqe(a);if(c>g)throw Adb(new Lqe(TId((Hde(),rJe))));rte(h,c,g)}}}e=false}if(a.c==1)throw Adb(new Lqe(TId((Hde(),jJe))));vte(h);ste(h);a.b=0;Mqe(a);return h} +function EGc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;c.Ug('Coffman-Graham Layering',1);if(b.a.c.length==0){c.Vg();return}v=RD(mQb(b,(yCc(),SAc)),17).a;i=0;g=0;for(m=new Anb(b.a);m.a<m.c.c.length;){l=RD(ynb(m),10);l.p=i++;for(f=new is(Mr(a3b(l).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);e.p=g++}}a.d=$C(xdb,Hye,28,i,16,1);a.a=$C(xdb,Hye,28,g,16,1);a.b=$C(kE,Pwe,28,i,15,1);a.e=$C(kE,Pwe,28,i,15,1);a.f=$C(kE,Pwe,28,i,15,1);Nc(a.c);FGc(a,b);o=new pwb(new JGc(a));for(u=new Anb(b.a);u.a<u.c.c.length;){s=RD(ynb(u),10);for(f=new is(Mr(Z2b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);a.a[e.p]||++a.b[s.p]}a.b[s.p]==0&&(zFb(lwb(o,s),Bxe),true)}h=0;while(o.b.c.length!=0){s=RD(mwb(o),10);a.f[s.p]=h++;for(f=new is(Mr(a3b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a.a[e.p]){continue}q=e.d.i;--a.b[q.p];Rc(a.c,q,sgb(a.f[s.p]));a.b[q.p]==0&&(zFb(lwb(o,q),Bxe),true)}}n=new pwb(new NGc(a));for(t=new Anb(b.a);t.a<t.c.c.length;){s=RD(ynb(t),10);for(f=new is(Mr(a3b(s).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);a.a[e.p]||++a.e[s.p]}a.e[s.p]==0&&(zFb(lwb(n,s),Bxe),true)}k=new bnb;d=BGc(b,k);while(n.b.c.length!=0){r=RD(mwb(n),10);(d.a.c.length>=v||!zGc(r,d))&&(d=BGc(b,k));g3b(r,d);for(f=new is(Mr(Z2b(r).a.Kc(),new ir));gs(f);){e=RD(hs(f),18);if(a.a[e.p]){continue}p=e.c.i;--a.e[p.p];a.e[p.p]==0&&(zFb(lwb(n,p),Bxe),true)}}for(j=k.c.length-1;j>=0;--j){Rmb(b.b,(tFb(j,k.c.length),RD(k.c[j],30)))}b.a.c.length=0;c.Vg()} +function Sec(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=false;do{u=false;for(f=b?(new Xkb(a.a.b)).a.gc()-2:1;b?f>=0:f<(new Xkb(a.a.b)).a.gc();f+=b?-1:1){e=_5b(a.a,sgb(f));for(n=0;n<e.b;n++){l=RD(ju(e,n),10);if(!nQb(l,(Ywc(),zwc))){continue}if(a6b(a.a,sgb(f))&&a.r==(aEc(),TDc)||b6b(a.a,sgb(f))&&a.r==(aEc(),UDc)){continue}t=true;for(r=0;r<e.b;r++){q=RD(ju(e,r),10);nQb(q,zwc)&&(b&&RD(mQb(l,zwc),17).a<RD(mQb(q,zwc),17).a||!b&&RD(mQb(l,zwc),17).a>RD(mQb(q,zwc),17).a)&&(t=false)}if(!t){continue}i=b?f+1:f-1;h=_5b(a.a,sgb(i));g=false;s=true;d=false;for(k=Sub(h,0);k.b!=k.d.c;){j=RD(evb(k),10);if(nQb(j,zwc)){if(j.p!=l.p){g=g|(b?RD(mQb(j,zwc),17).a<RD(mQb(l,zwc),17).a:RD(mQb(j,zwc),17).a>RD(mQb(l,zwc),17).a);s=false}}else if(!g&&s){if(j.k==(r3b(),n3b)){d=true;b?(m=RD(hs(new is(Mr(Z2b(j).a.Kc(),new ir))),18).c.i):(m=RD(hs(new is(Mr(a3b(j).a.Kc(),new ir))),18).d.i);if(m==l){b?(c=RD(hs(new is(Mr(a3b(j).a.Kc(),new ir))),18).d.i):(c=RD(hs(new is(Mr(Z2b(j).a.Kc(),new ir))),18).c.i);(b?RD($5b(a.a,c),17).a-RD($5b(a.a,m),17).a:RD($5b(a.a,m),17).a-RD($5b(a.a,c),17).a)<=2&&(s=false)}}}}if(d&&s){b?(c=RD(hs(new is(Mr(a3b(l).a.Kc(),new ir))),18).d.i):(c=RD(hs(new is(Mr(Z2b(l).a.Kc(),new ir))),18).c.i);(b?RD($5b(a.a,c),17).a-RD($5b(a.a,l),17).a:RD($5b(a.a,l),17).a-RD($5b(a.a,c),17).a)<=2&&c.k==(r3b(),p3b)&&(s=false)}if(g||s){p=Xec(a,l,b);while(p.a.gc()!=0){o=RD(p.a.ec().Kc().Pb(),10);p.a.Bc(o)!=null;ye(p,Xec(a,o,b))}--n;u=true}}}}while(u)} +function Xae(a){_Ad(a.c,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#decimal']));_Ad(a.d,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#integer']));_Ad(a.e,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#boolean']));_Ad(a.f,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EBoolean',GIe,'EBoolean:Object']));_Ad(a.i,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#byte']));_Ad(a.g,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#hexBinary']));_Ad(a.j,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EByte',GIe,'EByte:Object']));_Ad(a.n,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EChar',GIe,'EChar:Object']));_Ad(a.t,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#double']));_Ad(a.u,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EDouble',GIe,'EDouble:Object']));_Ad(a.F,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#float']));_Ad(a.G,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EFloat',GIe,'EFloat:Object']));_Ad(a.I,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#int']));_Ad(a.J,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EInt',GIe,'EInt:Object']));_Ad(a.N,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#long']));_Ad(a.O,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'ELong',GIe,'ELong:Object']));_Ad(a.Z,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#short']));_Ad(a.$,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'EShort',GIe,'EShort:Object']));_Ad(a._,qKe,cD(WC(qJ,1),Nve,2,6,[DKe,'http://www.w3.org/2001/XMLSchema#string']))} +function C0c(a,b,c,d,e,f,g){var h,i,j,k,l,m,n,o;m=RD(d.a,17).a;n=RD(d.b,17).a;l=a.b;o=a.c;h=0;k=0;if(b==(Cmd(),ymd)||b==zmd){k=Uvb(QCb(HDb(GDb(new SDb(null,new Swb(c.b,16)),new b2c),new b1c)));if(l.e.b+l.f.b/2>k){j=++n;h=Kfb(UD(Lvb(JDb(GDb(new SDb(null,new Swb(c.b,16)),new d2c(e,j)),new d1c))))}else{i=++m;h=Kfb(UD(Lvb(KDb(GDb(new SDb(null,new Swb(c.b,16)),new f2c(e,i)),new h1c))))}}else{k=Uvb(QCb(HDb(GDb(new SDb(null,new Swb(c.b,16)),new x1c),new l1c)));if(l.e.a+l.f.a/2>k){j=++n;h=Kfb(UD(Lvb(JDb(GDb(new SDb(null,new Swb(c.b,16)),new z1c(e,j)),new n1c))))}else{i=++m;h=Kfb(UD(Lvb(KDb(GDb(new SDb(null,new Swb(c.b,16)),new B1c(e,i)),new r1c))))}}if(b==ymd){Oub(a.a,new rjd(Kfb(UD(mQb(l,(q$c(),f$c))))-e,h));Oub(a.a,new rjd(o.e.a+o.f.a+e+f,h));Oub(a.a,new rjd(o.e.a+o.f.a+e+f,o.e.b+o.f.b/2));Oub(a.a,new rjd(o.e.a+o.f.a,o.e.b+o.f.b/2))}else if(b==zmd){Oub(a.a,new rjd(Kfb(UD(mQb(l,(q$c(),e$c))))+e,l.e.b+l.f.b/2));Oub(a.a,new rjd(l.e.a+l.f.a+e,h));Oub(a.a,new rjd(o.e.a-e-f,h));Oub(a.a,new rjd(o.e.a-e-f,o.e.b+o.f.b/2));Oub(a.a,new rjd(o.e.a,o.e.b+o.f.b/2))}else if(b==Bmd){Oub(a.a,new rjd(h,Kfb(UD(mQb(l,(q$c(),f$c))))-e));Oub(a.a,new rjd(h,o.e.b+o.f.b+e+f));Oub(a.a,new rjd(o.e.a+o.f.a/2,o.e.b+o.f.b+e+f));Oub(a.a,new rjd(o.e.a+o.f.a/2,o.e.b+o.f.b+e))}else{a.a.b==0||(RD(Rub(a.a),8).b=Kfb(UD(mQb(l,(q$c(),e$c))))+e*RD(g.b,17).a);Oub(a.a,new rjd(h,Kfb(UD(mQb(l,(q$c(),e$c))))+e*RD(g.b,17).a));Oub(a.a,new rjd(h,o.e.b-e*RD(g.a,17).a-f))}return new Ptd(sgb(m),sgb(n))} +function ASd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;g=true;l=null;d=null;e=null;b=false;n=_Rd;j=null;f=null;h=0;i=sSd(a,h,ZRd,$Rd);if(i<a.length&&(BFb(i,a.length),a.charCodeAt(i)==58)){l=(AFb(h,i,a.length),a.substr(h,i-h));h=i+1}c=l!=null&&tpb(eSd,l.toLowerCase());if(c){i=a.lastIndexOf('!/');if(i==-1){throw Adb(new agb('no archive separator'))}g=true;d=zhb(a,h,++i);h=i}else if(h>=0&&lhb(a.substr(h,'//'.length),'//')){h+=2;i=sSd(a,h,aSd,bSd);d=(AFb(h,i,a.length),a.substr(h,i-h));h=i}else if(l!=null&&(h==a.length||(BFb(h,a.length),a.charCodeAt(h)!=47))){g=false;i=rhb(a,Fhb(35),h);i==-1&&(i=a.length);d=(AFb(h,i,a.length),a.substr(h,i-h));h=i}if(!c&&h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)){i=sSd(a,h+1,aSd,bSd);k=(AFb(h+1,i,a.length),a.substr(h+1,i-(h+1)));if(k.length>0&&ihb(k,k.length-1)==58){e=k;h=i}}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)){++h;b=true}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)!=63)&&(BFb(h,a.length),a.charCodeAt(h)!=35)){m=new bnb;while(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)!=63)&&(BFb(h,a.length),a.charCodeAt(h)!=35)){i=sSd(a,h,aSd,bSd);Rmb(m,(AFb(h,i,a.length),a.substr(h,i-h)));h=i;h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==47)&&(BSd(a,++h)||(m.c.push(''),undefined,true))}n=$C(qJ,Nve,2,m.c.length,6,1);anb(m,n)}if(h<a.length&&(BFb(h,a.length),a.charCodeAt(h)==63)){i=phb(a,35,++h);i==-1&&(i=a.length);j=(AFb(h,i,a.length),a.substr(h,i-h));h=i}h<a.length&&(f=yhb(a,++h));ISd(g,l,d,e,n,j);return new lSd(g,l,d,e,b,n,j,f)} +function P_b(){P_b=geb;z$b();O_b=new Tp;Rc(O_b,(qpd(),cpd),bpd);Rc(O_b,mpd,bpd);Rc(O_b,dpd,bpd);Rc(O_b,jpd,bpd);Rc(O_b,ipd,bpd);Rc(O_b,gpd,bpd);Rc(O_b,jpd,cpd);Rc(O_b,bpd,Zod);Rc(O_b,cpd,Zod);Rc(O_b,mpd,Zod);Rc(O_b,dpd,Zod);Rc(O_b,hpd,Zod);Rc(O_b,jpd,Zod);Rc(O_b,ipd,Zod);Rc(O_b,gpd,Zod);Rc(O_b,apd,Zod);Rc(O_b,bpd,kpd);Rc(O_b,cpd,kpd);Rc(O_b,Zod,kpd);Rc(O_b,mpd,kpd);Rc(O_b,dpd,kpd);Rc(O_b,hpd,kpd);Rc(O_b,jpd,kpd);Rc(O_b,apd,kpd);Rc(O_b,lpd,kpd);Rc(O_b,ipd,kpd);Rc(O_b,epd,kpd);Rc(O_b,gpd,kpd);Rc(O_b,cpd,mpd);Rc(O_b,dpd,mpd);Rc(O_b,jpd,mpd);Rc(O_b,gpd,mpd);Rc(O_b,cpd,dpd);Rc(O_b,mpd,dpd);Rc(O_b,jpd,dpd);Rc(O_b,dpd,dpd);Rc(O_b,ipd,dpd);Rc(O_b,bpd,$od);Rc(O_b,cpd,$od);Rc(O_b,Zod,$od);Rc(O_b,kpd,$od);Rc(O_b,mpd,$od);Rc(O_b,dpd,$od);Rc(O_b,hpd,$od);Rc(O_b,jpd,$od);Rc(O_b,lpd,$od);Rc(O_b,apd,$od);Rc(O_b,gpd,$od);Rc(O_b,ipd,$od);Rc(O_b,fpd,$od);Rc(O_b,bpd,lpd);Rc(O_b,cpd,lpd);Rc(O_b,Zod,lpd);Rc(O_b,mpd,lpd);Rc(O_b,dpd,lpd);Rc(O_b,hpd,lpd);Rc(O_b,jpd,lpd);Rc(O_b,apd,lpd);Rc(O_b,gpd,lpd);Rc(O_b,epd,lpd);Rc(O_b,fpd,lpd);Rc(O_b,cpd,apd);Rc(O_b,mpd,apd);Rc(O_b,dpd,apd);Rc(O_b,jpd,apd);Rc(O_b,lpd,apd);Rc(O_b,gpd,apd);Rc(O_b,ipd,apd);Rc(O_b,bpd,_od);Rc(O_b,cpd,_od);Rc(O_b,Zod,_od);Rc(O_b,mpd,_od);Rc(O_b,dpd,_od);Rc(O_b,hpd,_od);Rc(O_b,jpd,_od);Rc(O_b,apd,_od);Rc(O_b,gpd,_od);Rc(O_b,cpd,ipd);Rc(O_b,Zod,ipd);Rc(O_b,kpd,ipd);Rc(O_b,dpd,ipd);Rc(O_b,bpd,epd);Rc(O_b,cpd,epd);Rc(O_b,kpd,epd);Rc(O_b,mpd,epd);Rc(O_b,dpd,epd);Rc(O_b,hpd,epd);Rc(O_b,jpd,epd);Rc(O_b,jpd,fpd);Rc(O_b,dpd,fpd);Rc(O_b,apd,bpd);Rc(O_b,apd,mpd);Rc(O_b,apd,Zod);Rc(O_b,hpd,bpd);Rc(O_b,hpd,cpd);Rc(O_b,hpd,kpd)} +function _Qc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;c.Ug('Brandes & Koepf node placement',1);a.a=b;a.c=iRc(b);d=RD(mQb(b,(yCc(),fBc)),281);n=Heb(TD(mQb(b,gBc)));a.d=d==(Ouc(),Luc)&&!n||d==Iuc;$Qc(a,b);v=null;w=null;r=null;s=null;q=(dk(4,iwe),new cnb(4));switch(RD(mQb(b,fBc),281).g){case 3:r=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),uQc));ZEb(q.c,r);break;case 1:s=new sQc(b,a.c.d,(EQc(),DQc),(wQc(),uQc));ZEb(q.c,s);break;case 4:v=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),vQc));ZEb(q.c,v);break;case 2:w=new sQc(b,a.c.d,(EQc(),DQc),(wQc(),vQc));ZEb(q.c,w);break;default:r=new sQc(b,a.c.d,(EQc(),CQc),(wQc(),uQc));s=new sQc(b,a.c.d,DQc,uQc);v=new sQc(b,a.c.d,CQc,vQc);w=new sQc(b,a.c.d,DQc,vQc);ZEb(q.c,v);ZEb(q.c,w);ZEb(q.c,r);ZEb(q.c,s);}e=new MQc(b,a.c);for(h=new Anb(q);h.a<h.c.c.length;){f=RD(ynb(h),185);LQc(e,f,a.b);KQc(f)}m=new RQc(b,a.c);for(i=new Anb(q);i.a<i.c.c.length;){f=RD(ynb(i),185);OQc(m,f)}if(c._g()){for(j=new Anb(q);j.a<j.c.c.length;){f=RD(ynb(j),185);c.bh(f+' size is '+qQc(f))}}l=null;if(a.d){k=YQc(a,q,a.c.d);XQc(b,k,c)&&(l=k)}if(!l){for(j=new Anb(q);j.a<j.c.c.length;){f=RD(ynb(j),185);XQc(b,f,c)&&(!l||qQc(l)>qQc(f))&&(l=f)}}!l&&(l=(tFb(0,q.c.length),RD(q.c[0],185)));for(p=new Anb(b.b);p.a<p.c.c.length;){o=RD(ynb(p),30);for(u=new Anb(o.a);u.a<u.c.c.length;){t=RD(ynb(u),10);t.n.b=Kfb(l.p[t.p])+Kfb(l.d[t.p])}}if(c._g()){c.bh('Chosen node placement: '+l);c.bh('Blocks: '+bRc(l));c.bh('Classes: '+cRc(l,c));c.bh('Marked edges: '+a.b)}for(g=new Anb(q);g.a<g.c.c.length;){f=RD(ynb(g),185);f.g=null;f.b=null;f.a=null;f.d=null;f.j=null;f.i=null;f.p=null}gRc(a.c);a.b.a.$b();c.Vg()} +function GVc(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;if(a.c.length==1){CVc((tFb(0,a.c.length),RD(a.c[0],121)));return tFb(0,a.c.length),RD(a.c[0],121)}else if(a.c.length<=0){return new YWc}for(i=new Anb(a);i.a<i.c.c.length;){g=RD(ynb(i),121);s=0;o=lve;p=lve;m=qwe;n=qwe;for(r=Sub(g.b,0);r.b!=r.d.c;){q=RD(evb(r),39);s+=RD(mQb(q,(h_c(),X$c)),17).a;o=$wnd.Math.min(o,q.e.a);p=$wnd.Math.min(p,q.e.b);m=$wnd.Math.max(m,q.e.a+q.f.a);n=$wnd.Math.max(n,q.e.b+q.f.b)}pQb(g,(h_c(),X$c),sgb(s));pQb(g,(q$c(),SZc),new rjd(o,p));pQb(g,RZc,new rjd(m,n))}yob();_mb(a,new KVc);v=new YWc;kQb(v,(tFb(0,a.c.length),RD(a.c[0],96)));l=0;D=0;for(j=new Anb(a);j.a<j.c.c.length;){g=RD(ynb(j),121);w=ojd(ajd(RD(mQb(g,(q$c(),RZc)),8)),RD(mQb(g,SZc),8));l=$wnd.Math.max(l,w.a);D+=w.a*w.b}l=$wnd.Math.max(l,$wnd.Math.sqrt(D)*Kfb(UD(mQb(v,(h_c(),E$c)))));A=Kfb(UD(mQb(v,_$c)));F=0;G=0;k=0;b=A;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),121);w=ojd(ajd(RD(mQb(g,(q$c(),RZc)),8)),RD(mQb(g,SZc),8));if(F+w.a>l){F=0;G+=k+A;k=0}FVc(v,g,F,G);b=$wnd.Math.max(b,F+w.a);k=$wnd.Math.max(k,w.b);F+=w.a+A}u=new Tsb;c=new Tsb;for(C=new Anb(a);C.a<C.c.c.length;){B=RD(ynb(C),121);d=Heb(TD(mQb(B,(umd(),Mkd))));t=!B.q?(null,wob):B.q;for(f=t.vc().Kc();f.Ob();){e=RD(f.Pb(),44);if(Ujb(u,e.ld())){if(dE(RD(e.ld(),149).Sg())!==dE(e.md())){if(d&&Ujb(c,e.ld())){gib();'Found different values for property '+RD(e.ld(),149).Pg()+' in components.';String.fromCharCode(10)}else{Zjb(u,RD(e.ld(),149),e.md());pQb(v,RD(e.ld(),149),e.md());d&&Zjb(c,RD(e.ld(),149),e.md())}}}else{Zjb(u,RD(e.ld(),149),e.md());pQb(v,RD(e.ld(),149),e.md())}}}CVc(v);return v} +function f7d(a,b){switch(a.e){case 0:case 2:case 4:case 6:case 42:case 44:case 46:case 48:case 8:case 10:case 12:case 14:case 16:case 18:case 20:case 22:case 24:case 26:case 28:case 30:case 32:case 34:case 36:case 38:return new sje(a.b,a.a,b,a.c);case 1:return new _Zd(a.a,b,BYd(b.Dh(),a.c));case 43:return new lie(a.a,b,BYd(b.Dh(),a.c));case 3:return new XZd(a.a,b,BYd(b.Dh(),a.c));case 45:return new iie(a.a,b,BYd(b.Dh(),a.c));case 41:return new DVd(RD(WVd(a.c),29),a.a,b,BYd(b.Dh(),a.c));case 50:return new Cje(RD(WVd(a.c),29),a.a,b,BYd(b.Dh(),a.c));case 5:return new oie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 47:return new sie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 7:return new C5d(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 49:return new G5d(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 9:return new gie(a.a,b,BYd(b.Dh(),a.c));case 11:return new eie(a.a,b,BYd(b.Dh(),a.c));case 13:return new aie(a.a,b,BYd(b.Dh(),a.c));case 15:return new Kfe(a.a,b,BYd(b.Dh(),a.c));case 17:return new Cie(a.a,b,BYd(b.Dh(),a.c));case 19:return new zie(a.a,b,BYd(b.Dh(),a.c));case 21:return new vie(a.a,b,BYd(b.Dh(),a.c));case 23:return new PZd(a.a,b,BYd(b.Dh(),a.c));case 25:return new bje(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 27:return new Yie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 29:return new Tie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 31:return new Nie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 33:return new $ie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 35:return new Vie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 37:return new Pie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 39:return new Iie(a.a,b,BYd(b.Dh(),a.c),a.d.n);case 40:return new Uge(b,BYd(b.Dh(),a.c));default:throw Adb(new yz('Unknown feature style: '+a.e));}} +function h2c(a){var b,c,d,e,f,g,h,i;f=0;e=a.a.b;for(i=Sub(a.a,0);i.b!=i.d.c;){h=RD(evb(i),240);g=(f+1)/(e+1);if(!a.c&&!a.d){return}else if(!!a.c&&!a.d){a.g=true;if(a.b==(Cmd(),ymd)){d=a.c.e.b+a.c.f.b+a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.c,f$c)))-a.e,d)}else if(a.b==zmd){d=a.c.e.b+a.c.f.b+a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.c,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.c.e.a+a.c.f.a+a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.c,f$c)))-a.e)}else{d=a.c.e.a+a.c.f.a+a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.c,e$c)))+a.e)}}else if(!!a.c&&!!a.d){if(a.b==(Cmd(),ymd)){d=a.d.e.b*g+(a.c.e.b+a.c.f.b)*(1-g);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.c,f$c)))-a.e,d)}else if(a.b==zmd){d=a.d.e.b*g+(a.c.e.b+a.c.f.b)*(1-g);b=new rjd(Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.c,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.d.e.a*g+(a.c.e.a+a.c.f.a)*(1-g);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.c,f$c)))-a.e)}else{d=a.d.e.a*g+(a.c.e.a+a.c.f.a)*(1-g);b=new rjd(d,Kfb(UD(mQb(a.c,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.c,e$c)))+a.e)}}else{a.f=true;if(a.b==(Cmd(),ymd)){d=a.d.e.b-a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.d,(q$c(),e$c))))+a.e,d);c=new rjd(Kfb(UD(mQb(a.d,f$c)))-a.e,d)}else if(a.b==zmd){d=a.d.e.b-a.e*(f+1);b=new rjd(Kfb(UD(mQb(a.d,(q$c(),f$c))))-a.e,d);c=new rjd(Kfb(UD(mQb(a.d,e$c)))+a.e,d)}else if(a.b==Bmd){d=a.d.e.a-a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.d,(q$c(),e$c))))+a.e);c=new rjd(d,Kfb(UD(mQb(a.d,f$c)))-a.e)}else{d=a.d.e.a-a.e*(f+1);b=new rjd(d,Kfb(UD(mQb(a.d,(q$c(),f$c))))-a.e);c=new rjd(d,Kfb(UD(mQb(a.d,e$c)))+a.e)}}RD(h.a,8).a=b.a;RD(h.a,8).b=b.b;h.b.a=c.a;h.b.b=c.b;++f}} +function LA(a,b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r;switch(b){case 71:h=d.q.getFullYear()-Owe>=-1900?1:0;c>=4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Qwe,Rwe])[h]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['BC','AD'])[h]);break;case 121:AA(a,c,d);break;case 77:zA(a,c,d);break;case 107:i=e.q.getHours();i==0?UA(a,24,c):UA(a,i,c);break;case 83:yA(a,c,e);break;case 69:k=d.q.getDay();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['S','M','T','W','T','F','S'])[k]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe])[k]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[k]);break;case 97:e.q.getHours()>=12&&e.q.getHours()<24?Zhb(a,cD(WC(qJ,1),Nve,2,6,['AM','PM'])[1]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['AM','PM'])[0]);break;case 104:l=e.q.getHours()%12;l==0?UA(a,12,c):UA(a,l,c);break;case 75:m=e.q.getHours()%12;UA(a,m,c);break;case 72:n=e.q.getHours();UA(a,n,c);break;case 99:o=d.q.getDay();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['S','M','T','W','T','F','S'])[o]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Swe,Twe,Uwe,Vwe,Wwe,Xwe,Ywe])[o]):c==3?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Sun','Mon','Tue','Wed','Thu','Fri','Sat'])[o]):UA(a,o,1);break;case 76:p=d.q.getMonth();c==5?Zhb(a,cD(WC(qJ,1),Nve,2,6,['J','F','M','A','M','J','J','A','S','O','N','D'])[p]):c==4?Zhb(a,cD(WC(qJ,1),Nve,2,6,[Cwe,Dwe,Ewe,Fwe,Gwe,Hwe,Iwe,Jwe,Kwe,Lwe,Mwe,Nwe])[p]):c==3?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Jan','Feb','Mar','Apr',Gwe,'Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[p]):UA(a,p+1,c);break;case 81:q=d.q.getMonth()/3|0;c<4?Zhb(a,cD(WC(qJ,1),Nve,2,6,['Q1','Q2','Q3','Q4'])[q]):Zhb(a,cD(WC(qJ,1),Nve,2,6,['1st quarter','2nd quarter','3rd quarter','4th quarter'])[q]);break;case 100:r=d.q.getDate();UA(a,r,c);break;case 109:j=e.q.getMinutes();UA(a,j,c);break;case 115:g=e.q.getSeconds();UA(a,g,c);break;case 122:c<4?Zhb(a,f.c[0]):Zhb(a,f.c[1]);break;case 118:Zhb(a,f.b);break;case 90:c<3?Zhb(a,cB(f)):c==3?Zhb(a,bB(f)):Zhb(a,eB(f.a));break;default:return false;}return true} +function f5b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H;X4b(b);i=RD(QHd((!b.b&&(b.b=new Yie(E4,b,4,7)),b.b),0),84);k=RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84);h=AGd(i);j=AGd(k);g=(!b.a&&(b.a=new C5d(F4,b,6,6)),b.a).i==0?null:RD(QHd((!b.a&&(b.a=new C5d(F4,b,6,6)),b.a),0),166);A=RD(Wjb(a.a,h),10);F=RD(Wjb(a.a,j),10);B=null;G=null;if(ZD(i,193)){w=RD(Wjb(a.a,i),304);if(ZD(w,12)){B=RD(w,12)}else if(ZD(w,10)){A=RD(w,10);B=RD(Vmb(A.j,0),12)}}if(ZD(k,193)){D=RD(Wjb(a.a,k),304);if(ZD(D,12)){G=RD(D,12)}else if(ZD(D,10)){F=RD(D,10);G=RD(Vmb(F.j,0),12)}}if(!A||!F){throw Adb(new Ked('The source or the target of edge '+b+' could not be found. '+'This usually happens when an edge connects a node laid out by ELK Layered to a node in '+'another level of hierarchy laid out by either another instance of ELK Layered or another '+'layout algorithm alltogether. The former can be solved by setting the hierarchyHandling '+'option to INCLUDE_CHILDREN.'))}p=new a1b;kQb(p,b);pQb(p,(Ywc(),Awc),b);pQb(p,(yCc(),RAc),null);n=RD(mQb(d,kwc),21);A==F&&n.Fc((ovc(),nvc));if(!B){v=(BEc(),zEc);C=null;if(!!g&&Dod(RD(mQb(A,BBc),101))){C=new rjd(g.j,g.k);Fsd(C,kzd(b));Gsd(C,c);if(NGd(j,h)){v=yEc;$id(C,A.n)}}B=g2b(A,C,v,d)}if(!G){v=(BEc(),yEc);H=null;if(!!g&&Dod(RD(mQb(F,BBc),101))){H=new rjd(g.b,g.c);Fsd(H,kzd(b));Gsd(H,c)}G=g2b(F,H,v,Y2b(F))}Y0b(p,B);Z0b(p,G);(B.e.c.length>1||B.g.c.length>1||G.e.c.length>1||G.g.c.length>1)&&n.Fc((ovc(),ivc));for(m=new dMd((!b.n&&(b.n=new C5d(I4,b,1,7)),b.n));m.e!=m.i.gc();){l=RD(bMd(m),135);if(!Heb(TD(Gxd(l,pBc)))&&!!l.a){q=h5b(l);Rmb(p.b,q);switch(RD(mQb(q,wAc),278).g){case 1:case 2:n.Fc((ovc(),gvc));break;case 0:n.Fc((ovc(),evc));pQb(q,wAc,(Omd(),Lmd));}}}f=RD(mQb(d,oAc),322);r=RD(mQb(d,kBc),323);e=f==(stc(),ptc)||r==(JDc(),FDc);if(!!g&&(!g.a&&(g.a=new XZd(D4,g,5)),g.a).i!=0&&e){s=ssd(g);o=new Ejd;for(u=Sub(s,0);u.b!=u.d.c;){t=RD(evb(u),8);Mub(o,new sjd(t))}pQb(p,Bwc,o)}return p} +function F0c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I;C=0;D=0;A=new Tsb;v=RD(Lvb(JDb(GDb(new SDb(null,new Swb(a.b,16)),new v1c),new Z0c)),17).a+1;B=$C(kE,Pwe,28,v,15,1);q=$C(kE,Pwe,28,v,15,1);for(p=0;p<v;p++){B[p]=0;q[p]=0}i=RD(zDb(BDb(new SDb(null,new Swb(a.a,16))),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);for(k=i.Kc();k.Ob();){j=RD(k.Pb(),65);G=RD(mQb(j.b,(h_c(),f_c)),17).a;I=RD(mQb(j.c,f_c),17).a;u=I-G;if(u>1){for(h=G+1;h<I;h++){l=h;w=RD(zDb(CDb(new SDb(null,new Swb(a.b,16)),new P1c(l)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[vBb]))),15);o=0;if(b==(Cmd(),ymd)||b==zmd){w.jd(new V1c);for(o=0;o<w.gc();o++){r=(h-G)/(I-G);if(RD(w.Xb(o),39).e.b>j.b.e.b*(1-r)+j.c.e.b*r){break}}if(w.gc()>0){H=j.a.b==0?ajd(j.b.e):RD(Rub(j.a),8);t=$id(ajd(RD(w.Xb(w.gc()-1),39).e),RD(w.Xb(w.gc()-1),39).f);m=$id(ajd(RD(w.Xb(0),39).e),RD(w.Xb(0),39).f);if(o>=w.gc()-1&&H.b>t.b&&j.c.e.b>t.b){continue}if(o<=0&&H.b<m.a&&j.c.e.b<m.b){continue}}}else{w.jd(new Z1c);for(o=0;o<w.gc();o++){r=(h-G)/(I-G);if(RD(w.Xb(o),39).e.a>j.b.e.a*(1-r)+j.c.e.a*r){break}}if(w.gc()>0){H=j.a.b==0?ajd(j.b.e):RD(Rub(j.a),8);t=$id(ajd(RD(w.Xb(w.gc()-1),39).e),RD(w.Xb(w.gc()-1),39).f);m=$id(ajd(RD(w.Xb(0),39).e),RD(w.Xb(0),39).f);if(o>=w.gc()-1&&H.a>t.a&&j.c.e.a>t.a){continue}if(o<=0&&H.a<m.a&&j.c.e.a<m.a){continue}}}e=new pjd;f=new pjd;Mub(j.a,e);Mub(j.a,f);g=new gud(e,f,j);s=Rdb(Sdb(h,32),Cdb(o,yxe));if(Ujb(A,Hgb(s))){n=RD(Wjb(A,Hgb(s)),675);Mub(n.a,g);Dmd(n.b)?tvb(n.a,new l2c):tvb(n.a,new p2c);h2c(n)}else{n=new i2c(o==0?null:RD(w.Xb(o-1),39),o==w.gc()?null:RD(w.Xb(o),39),g,a);Zjb(A,Hgb(s),n)}if(b==ymd||b==zmd){n.f&&n.d.e.b<=Kfb(UD(mQb(a,(q$c(),_Zc))))&&++C;n.g&&n.c.e.b+n.c.f.b>=Kfb(UD(mQb(a,(q$c(),$Zc))))&&++D}else{n.f&&n.d.e.a<=Kfb(UD(mQb(a,(q$c(),ZZc))))&&++C;n.g&&n.c.e.a+n.c.f.a>=Kfb(UD(mQb(a,(q$c(),YZc))))&&++D}}}else if(u==0){H0c(j)}else if(u<0){++B[G];++q[I];F=C0c(j,b,a,new Ptd(sgb(C),sgb(D)),c,d,new Ptd(sgb(q[I]),sgb(B[G])));C=RD(F.a,17).a;D=RD(F.b,17).a}}} +function qrc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;d=b;i=c;if(a.b&&d.j==(qpd(),ppd)&&i.j==(qpd(),ppd)){s=d;d=i;i=s}if(Ujb(a.a,d)){if(Zsb(RD(Wjb(a.a,d),49),i)){return 1}}else{Zjb(a.a,d,new _sb)}if(Ujb(a.a,i)){if(Zsb(RD(Wjb(a.a,i),49),d)){return -1}}else{Zjb(a.a,i,new _sb)}if(Ujb(a.d,d)){if(Zsb(RD(Wjb(a.d,d),49),i)){return -1}}else{Zjb(a.d,d,new _sb)}if(Ujb(a.d,i)){if(Zsb(RD(Wjb(a.a,i),49),d)){return 1}}else{Zjb(a.d,i,new _sb)}if(d.j!=i.j){r=yrc(d.j,i.j);r==-1?rrc(a,i,d):rrc(a,d,i);return r}if(d.e.c.length!=0&&i.e.c.length!=0){if(a.b){r=orc(d,i);if(r!=0){r==-1?rrc(a,i,d):r==1&&rrc(a,d,i);return r}}f=RD(Vmb(d.e,0),18).c.i;k=RD(Vmb(i.e,0),18).c.i;if(f==k){e=RD(mQb(RD(Vmb(d.e,0),18),(Ywc(),zwc)),17).a;j=RD(mQb(RD(Vmb(i.e,0),18),zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}for(o=a.c,p=0,q=o.length;p<q;++p){n=o[p];if(n==f){rrc(a,d,i);return 1}else if(n==k){rrc(a,i,d);return -1}}}if(d.g.c.length!=0&&i.g.c.length!=0){h=RD(mQb(d,(Ywc(),xwc)),10);m=RD(mQb(i,xwc),10);if(a.e==(kEc(),jEc)&&!!h&&!!m&&nQb(h,zwc)&&nQb(m,zwc)){e=RD(mQb(h,zwc),17).a;j=RD(mQb(m,zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}if(a.b){r=orc(d,i);if(r!=0){r==-1?rrc(a,i,d):r==1&&rrc(a,d,i);return r}}g=0;l=0;nQb(RD(Vmb(d.g,0),18),zwc)&&(g=RD(mQb(RD(Vmb(d.g,0),18),zwc),17).a);nQb(RD(Vmb(i.g,0),18),zwc)&&(l=RD(mQb(RD(Vmb(d.g,0),18),zwc),17).a);if(!!h&&h==m){if(Heb(TD(mQb(RD(Vmb(d.g,0),18),Nwc)))&&!Heb(TD(mQb(RD(Vmb(i.g,0),18),Nwc)))){rrc(a,d,i);return 1}else if(!Heb(TD(mQb(RD(Vmb(d.g,0),18),Nwc)))&&Heb(TD(mQb(RD(Vmb(i.g,0),18),Nwc)))){rrc(a,i,d);return -1}g>l?rrc(a,d,i):rrc(a,i,d);return g<l?-1:g>l?1:0}if(a.f){a.f._b(h)&&(g=RD(a.f.xc(h),17).a);a.f._b(m)&&(l=RD(a.f.xc(m),17).a)}g>l?rrc(a,d,i):rrc(a,i,d);return g<l?-1:g>l?1:0}if(d.e.c.length!=0&&i.g.c.length!=0){rrc(a,d,i);return 1}else if(d.g.c.length!=0&&i.e.c.length!=0){rrc(a,i,d);return -1}else if(nQb(d,(Ywc(),zwc))&&nQb(i,zwc)){e=RD(mQb(d,zwc),17).a;j=RD(mQb(i,zwc),17).a;e>j?rrc(a,d,i):rrc(a,i,d);return e<j?-1:e>j?1:0}else{rrc(a,i,d);return -1}} +function Yae(a){if(a.gb)return;a.gb=true;a.b=jBd(a,0);iBd(a.b,18);oBd(a.b,19);a.a=jBd(a,1);iBd(a.a,1);oBd(a.a,2);oBd(a.a,3);oBd(a.a,4);oBd(a.a,5);a.o=jBd(a,2);iBd(a.o,8);iBd(a.o,9);oBd(a.o,10);oBd(a.o,11);oBd(a.o,12);oBd(a.o,13);oBd(a.o,14);oBd(a.o,15);oBd(a.o,16);oBd(a.o,17);oBd(a.o,18);oBd(a.o,19);oBd(a.o,20);oBd(a.o,21);oBd(a.o,22);oBd(a.o,23);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);nBd(a.o);a.p=jBd(a,3);iBd(a.p,2);iBd(a.p,3);iBd(a.p,4);iBd(a.p,5);oBd(a.p,6);oBd(a.p,7);nBd(a.p);nBd(a.p);a.q=jBd(a,4);iBd(a.q,8);a.v=jBd(a,5);oBd(a.v,9);nBd(a.v);nBd(a.v);nBd(a.v);a.w=jBd(a,6);iBd(a.w,2);iBd(a.w,3);iBd(a.w,4);oBd(a.w,5);a.B=jBd(a,7);oBd(a.B,1);nBd(a.B);nBd(a.B);nBd(a.B);a.Q=jBd(a,8);oBd(a.Q,0);nBd(a.Q);a.R=jBd(a,9);iBd(a.R,1);a.S=jBd(a,10);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);nBd(a.S);a.T=jBd(a,11);oBd(a.T,10);oBd(a.T,11);oBd(a.T,12);oBd(a.T,13);oBd(a.T,14);nBd(a.T);nBd(a.T);a.U=jBd(a,12);iBd(a.U,2);iBd(a.U,3);oBd(a.U,4);oBd(a.U,5);oBd(a.U,6);oBd(a.U,7);nBd(a.U);a.V=jBd(a,13);oBd(a.V,10);a.W=jBd(a,14);iBd(a.W,18);iBd(a.W,19);iBd(a.W,20);oBd(a.W,21);oBd(a.W,22);oBd(a.W,23);a.bb=jBd(a,15);iBd(a.bb,10);iBd(a.bb,11);iBd(a.bb,12);iBd(a.bb,13);iBd(a.bb,14);iBd(a.bb,15);iBd(a.bb,16);oBd(a.bb,17);nBd(a.bb);nBd(a.bb);a.eb=jBd(a,16);iBd(a.eb,2);iBd(a.eb,3);iBd(a.eb,4);iBd(a.eb,5);iBd(a.eb,6);iBd(a.eb,7);oBd(a.eb,8);oBd(a.eb,9);a.ab=jBd(a,17);iBd(a.ab,0);iBd(a.ab,1);a.H=jBd(a,18);oBd(a.H,0);oBd(a.H,1);oBd(a.H,2);oBd(a.H,3);oBd(a.H,4);oBd(a.H,5);nBd(a.H);a.db=jBd(a,19);oBd(a.db,2);a.c=kBd(a,20);a.d=kBd(a,21);a.e=kBd(a,22);a.f=kBd(a,23);a.i=kBd(a,24);a.g=kBd(a,25);a.j=kBd(a,26);a.k=kBd(a,27);a.n=kBd(a,28);a.r=kBd(a,29);a.s=kBd(a,30);a.t=kBd(a,31);a.u=kBd(a,32);a.fb=kBd(a,33);a.A=kBd(a,34);a.C=kBd(a,35);a.D=kBd(a,36);a.F=kBd(a,37);a.G=kBd(a,38);a.I=kBd(a,39);a.J=kBd(a,40);a.L=kBd(a,41);a.M=kBd(a,42);a.N=kBd(a,43);a.O=kBd(a,44);a.P=kBd(a,45);a.X=kBd(a,46);a.Y=kBd(a,47);a.Z=kBd(a,48);a.$=kBd(a,49);a._=kBd(a,50);a.cb=kBd(a,51);a.K=kBd(a,52)} +function d5b(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G;g=new Yub;w=RD(mQb(c,(yCc(),rAc)),88);p=0;ye(g,(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));while(g.b!=0){k=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),27);j=vCd(k);(dE(Gxd(j,cAc))!==dE((kEc(),hEc))||dE(Gxd(j,pAc))===dE((Ptc(),Otc))||dE(Gxd(j,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(j,eAc)))||dE(Gxd(j,Yzc))!==dE((U$b(),T$b))||dE(Gxd(j,ZAc))===dE((aEc(),TDc))||dE(Gxd(j,ZAc))===dE((aEc(),UDc))||dE(Gxd(j,$Ac))===dE((_Cc(),SCc))||dE(Gxd(j,$Ac))===dE((_Cc(),UCc)))&&!Heb(TD(Gxd(k,aAc)))&&Ixd(k,(Ywc(),zwc),sgb(p++));r=!Heb(TD(Gxd(k,pBc)));if(r){m=(!k.a&&(k.a=new C5d(J4,k,10,11)),k.a).i!=0;o=a5b(k);n=dE(Gxd(k,IAc))===dE((Fnd(),Cnd));G=!Hxd(k,(umd(),Akd))||khb(WD(Gxd(k,Akd)));u=null;if(G&&n&&(m||o)){u=Z4b(k);pQb(u,rAc,w);nQb(u,PBc)&&HCc(new RCc(Kfb(UD(mQb(u,PBc)))),u);if(RD(Gxd(k,lBc),181).gc()!=0){l=u;FDb(new SDb(null,(!k.c&&(k.c=new C5d(K4,k,9,9)),new Swb(k.c,16))),new u5b(l));V4b(k,u)}}A=c;B=RD(Wjb(a.a,vCd(k)),10);!!B&&(A=B.e);t=i5b(a,k,A);if(u){t.e=u;u.e=t;ye(g,(!k.a&&(k.a=new C5d(J4,k,10,11)),k.a))}}}p=0;Pub(g,b,g.c.b,g.c);while(g.b!=0){f=RD(g.b==0?null:(sFb(g.b!=0),Wub(g,g.a.a)),27);for(i=new dMd((!f.b&&(f.b=new C5d(G4,f,12,3)),f.b));i.e!=i.i.gc();){h=RD(bMd(i),74);X4b(h);(dE(Gxd(b,cAc))!==dE((kEc(),hEc))||dE(Gxd(b,pAc))===dE((Ptc(),Otc))||dE(Gxd(b,pAc))===dE((Ptc(),Mtc))||Heb(TD(Gxd(b,eAc)))||dE(Gxd(b,Yzc))!==dE((U$b(),T$b))||dE(Gxd(b,ZAc))===dE((aEc(),TDc))||dE(Gxd(b,ZAc))===dE((aEc(),UDc))||dE(Gxd(b,$Ac))===dE((_Cc(),SCc))||dE(Gxd(b,$Ac))===dE((_Cc(),UCc)))&&Ixd(h,(Ywc(),zwc),sgb(p++));D=AGd(RD(QHd((!h.b&&(h.b=new Yie(E4,h,4,7)),h.b),0),84));F=AGd(RD(QHd((!h.c&&(h.c=new Yie(E4,h,5,8)),h.c),0),84));if(Heb(TD(Gxd(h,pBc)))||Heb(TD(Gxd(D,pBc)))||Heb(TD(Gxd(F,pBc)))){continue}q=ozd(h)&&Heb(TD(Gxd(D,NAc)))&&Heb(TD(Gxd(h,OAc)));v=f;q||NGd(F,D)?(v=D):NGd(D,F)&&(v=F);A=c;B=RD(Wjb(a.a,v),10);!!B&&(A=B.e);s=f5b(a,h,v,A);pQb(s,(Ywc(),Zvc),_4b(a,h,b,c))}n=dE(Gxd(f,IAc))===dE((Fnd(),Cnd));if(n){for(e=new dMd((!f.a&&(f.a=new C5d(J4,f,10,11)),f.a));e.e!=e.i.gc();){d=RD(bMd(e),27);G=!Hxd(d,(umd(),Akd))||khb(WD(Gxd(d,Akd)));C=dE(Gxd(d,IAc))===dE(Cnd);G&&C&&(Pub(g,d,g.c.b,g.c),true)}}}} +function Ywc(){Ywc=geb;var a,b;Awc=new jGd(rAe);Zvc=new jGd('coordinateOrigin');Kwc=new jGd('processors');Yvc=new kGd('compoundNode',(Geb(),false));nwc=new kGd('insideConnections',false);Bwc=new jGd('originalBendpoints');Cwc=new jGd('originalDummyNodePosition');Dwc=new jGd('originalLabelEdge');Mwc=new jGd('representedLabels');cwc=new jGd('endLabels');dwc=new jGd('endLabel.origin');swc=new kGd('labelSide',(Pnd(),Ond));ywc=new kGd('maxEdgeThickness',0);Nwc=new kGd('reversed',false);Lwc=new jGd(sAe);vwc=new kGd('longEdgeSource',null);wwc=new kGd('longEdgeTarget',null);uwc=new kGd('longEdgeHasLabelDummies',false);twc=new kGd('longEdgeBeforeLabelDummy',false);bwc=new kGd('edgeConstraint',(huc(),fuc));pwc=new jGd('inLayerLayoutUnit');owc=new kGd('inLayerConstraint',(Gvc(),Evc));qwc=new kGd('inLayerSuccessorConstraint',new bnb);rwc=new kGd('inLayerSuccessorConstraintBetweenNonDummies',false);Iwc=new jGd('portDummy');$vc=new kGd('crossingHint',sgb(0));kwc=new kGd('graphProperties',(b=RD(mfb(iX),9),new Fsb(b,RD(WEb(b,b.length),9),0)));hwc=new kGd('externalPortSide',(qpd(),opd));iwc=new kGd('externalPortSize',new pjd);fwc=new jGd('externalPortReplacedDummies');gwc=new jGd('externalPortReplacedDummy');ewc=new kGd('externalPortConnections',(a=RD(mfb(E3),9),new Fsb(a,RD(WEb(a,a.length),9),0)));Jwc=new kGd(Xye,0);Uvc=new jGd('barycenterAssociates');Xwc=new jGd('TopSideComments');Vvc=new jGd('BottomSideComments');Xvc=new jGd('CommentConnectionPort');mwc=new kGd('inputCollect',false);Gwc=new kGd('outputCollect',false);awc=new kGd('cyclic',false);_vc=new jGd('crossHierarchyMap');Wwc=new jGd('targetOffset');new kGd('splineLabelSize',new pjd);Qwc=new jGd('spacings');Hwc=new kGd('partitionConstraint',false);Wvc=new jGd('breakingPoint.info');Uwc=new jGd('splines.survivingEdge');Twc=new jGd('splines.route.start');Rwc=new jGd('splines.edgeChain');Fwc=new jGd('originalPortConstraints');Pwc=new jGd('selfLoopHolder');Swc=new jGd('splines.nsPortY');zwc=new jGd('modelOrder');xwc=new jGd('longEdgeTargetNode');jwc=new kGd(GBe,false);Owc=new kGd(GBe,false);lwc=new jGd('layerConstraints.hiddenNodes');Ewc=new jGd('layerConstraints.opposidePort');Vwc=new jGd('targetNode.modelOrder')} +function D0c(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o;for(l=Sub(a.b,0);l.b!=l.d.c;){k=RD(evb(l),39);if(lhb(k.c,IEe)){continue}f=RD(zDb(new SDb(null,new Swb(hWc(k,a),16)),tBb(new ZBb,new XBb,new wCb,cD(WC(QL,1),jwe,108,0,[(xBb(),vBb)]))),15);b==(Cmd(),ymd)||b==zmd?f.jd(new L1c):f.jd(new R1c);o=f.gc();for(e=0;e<o;e++){g=o==1?0.5:(1+e)/(o+1);if(b==ymd){j=Kfb(UD(mQb(k,(q$c(),e$c))));if(k.e.a+k.f.a+d<j){Oub(RD(f.Xb(e),65).a,new rjd(j+c,k.e.b+k.f.b*g))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(i-n)/($wnd.Math.abs(h-m)/40)>50&&(n>i?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a+d/5.3,k.e.b+k.f.b*g-d/2)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a+d/5.3,k.e.b+k.f.b*g+d/2)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a,k.e.b+k.f.b*g))}else if(b==zmd){j=Kfb(UD(mQb(k,(q$c(),f$c))));if(k.e.a-d>j){Oub(RD(f.Xb(e),65).a,new rjd(j-c,k.e.b+k.f.b*g))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(i-n)/($wnd.Math.abs(h-m)/40)>50&&(n>i?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a-d/5.3,k.e.b+k.f.b*g-d/2)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a-d/5.3,k.e.b+k.f.b*g+d/2)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a,k.e.b+k.f.b*g))}else if(b==Bmd){j=Kfb(UD(mQb(k,(q$c(),e$c))));if(k.e.b+k.f.b+d<j){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,j+c))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(h-m)/($wnd.Math.abs(i-n)/40)>50&&(m>h?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g-d/2,k.e.b+d/5.3+k.f.b)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g+d/2,k.e.b+d/5.3+k.f.b)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,k.e.b+k.f.b))}else{j=Kfb(UD(mQb(k,(q$c(),f$c))));if(mWc(RD(f.Xb(e),65),a)){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,RD(Rub(RD(f.Xb(e),65).a),8).b))}else if(k.e.b-d>j){Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,j-c))}else if(RD(f.Xb(e),65).a.b>0){h=RD(Rub(RD(f.Xb(e),65).a),8).a;m=k.e.a+k.f.a/2;i=RD(Rub(RD(f.Xb(e),65).a),8).b;n=k.e.b+k.f.b/2;d>0&&$wnd.Math.abs(h-m)/($wnd.Math.abs(i-n)/40)>50&&(m>h?Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g-d/2,k.e.b-d/5.3)):Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g+d/2,k.e.b-d/5.3)))}Oub(RD(f.Xb(e),65).a,new rjd(k.e.a+k.f.a*g,k.e.b))}}}} +function umd(){umd=geb;var a,b;Akd=new jGd(OGe);Tld=new jGd(PGe);Ckd=(Rjd(),Ljd);Bkd=new lGd(MDe,Ckd);new Xsd;Dkd=new lGd(Dze,null);Ekd=new jGd(QGe);Lkd=(ukd(),ysb(tkd,cD(WC(q3,1),jwe,297,0,[pkd])));Kkd=new lGd(YDe,Lkd);Mkd=new lGd(LDe,(Geb(),false));Okd=(Cmd(),Amd);Nkd=new lGd(PDe,Okd);Tkd=(Ymd(),Xmd);Skd=new lGd(kDe,Tkd);Wkd=new lGd(MGe,false);Ykd=(Fnd(),Dnd);Xkd=new lGd(fDe,Ykd);uld=new A3b(12);tld=new lGd(Eze,uld);ald=new lGd(dAe,false);bld=new lGd(iEe,false);sld=new lGd(gAe,false);Ild=(Bod(),Aod);Hld=new lGd(eAe,Ild);Qld=new jGd(fEe);Rld=new jGd($ze);Sld=new jGd(bAe);Vld=new jGd(cAe);dld=new Ejd;cld=new lGd(ZDe,dld);Jkd=new lGd(aEe,false);Zkd=new lGd(bEe,false);new jGd(RGe);fld=new P2b;eld=new lGd(gEe,fld);rld=new lGd(JDe,false);new Xsd;Uld=new lGd(SGe,1);Ikd=new jGd(TGe);Hkd=new jGd(UGe);mmd=new lGd(mAe,false);new lGd(VGe,true);sgb(0);new lGd(WGe,sgb(100));new lGd(XGe,false);sgb(0);new lGd(YGe,sgb(4000));sgb(0);new lGd(ZGe,sgb(400));new lGd($Ge,false);new lGd(_Ge,false);new lGd(aHe,true);new lGd(bHe,false);Gkd=(Grd(),Frd);Fkd=new lGd(NGe,Gkd);Wld=new lGd(xDe,10);Xld=new lGd(yDe,10);Yld=new lGd(Bze,20);Zld=new lGd(zDe,10);$ld=new lGd(aAe,2);_ld=new lGd(ADe,10);bmd=new lGd(BDe,0);cmd=new lGd(EDe,5);dmd=new lGd(CDe,1);emd=new lGd(DDe,1);fmd=new lGd(_ze,20);gmd=new lGd(FDe,10);jmd=new lGd(GDe,10);amd=new jGd(HDe);imd=new Q2b;hmd=new lGd(hEe,imd);xld=new jGd(eEe);wld=false;vld=new lGd(dEe,wld);hld=new A3b(5);gld=new lGd(QDe,hld);jld=(dod(),b=RD(mfb(A3),9),new Fsb(b,RD(WEb(b,b.length),9),0));ild=new lGd(kAe,jld);Ald=(pod(),mod);zld=new lGd(TDe,Ald);Cld=new jGd(UDe);Dld=new jGd(VDe);Eld=new jGd(WDe);Bld=new jGd(XDe);lld=(a=RD(mfb(H3),9),new Fsb(a,RD(WEb(a,a.length),9),0));kld=new lGd(jAe,lld);qld=xsb((dqd(),Ypd));pld=new lGd(iAe,qld);old=new rjd(0,0);nld=new lGd(CAe,old);mld=new lGd(hAe,false);Rkd=(Omd(),Lmd);Qkd=new lGd($De,Rkd);Pkd=new lGd(fAe,false);new jGd(cHe);sgb(1);new lGd(dHe,null);Fld=new jGd(cEe);Jld=new jGd(_De);Pld=(qpd(),opd);Old=new lGd(KDe,Pld);Gld=new jGd(IDe);Mld=(Pod(),xsb(Nod));Lld=new lGd(lAe,Mld);Kld=new lGd(RDe,false);Nld=new lGd(SDe,true);new Xsd;qmd=new lGd(nAe,1);smd=new lGd(eHe,null);lmd=new lGd(oAe,150);kmd=new lGd(pAe,1.414);nmd=new lGd(qAe,null);omd=new lGd(fHe,1);$kd=new lGd(NDe,false);_kd=new lGd(ODe,false);Ukd=new lGd(Cze,1);Vkd=(ind(),gnd);new lGd(gHe,Vkd);yld=true;rmd=(mqd(),jqd);tmd=jqd;pmd=jqd} +function hcc(){hcc=geb;nbc=new icc('DIRECTION_PREPROCESSOR',0);kbc=new icc('COMMENT_PREPROCESSOR',1);obc=new icc('EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER',2);Ebc=new icc('INTERACTIVE_EXTERNAL_PORT_POSITIONER',3);Xbc=new icc('PARTITION_PREPROCESSOR',4);Ibc=new icc('LABEL_DUMMY_INSERTER',5);bcc=new icc('SELF_LOOP_PREPROCESSOR',6);Nbc=new icc('LAYER_CONSTRAINT_PREPROCESSOR',7);Vbc=new icc('PARTITION_MIDPROCESSOR',8);zbc=new icc('HIGH_DEGREE_NODE_LAYER_PROCESSOR',9);Rbc=new icc('NODE_PROMOTION',10);Mbc=new icc('LAYER_CONSTRAINT_POSTPROCESSOR',11);Wbc=new icc('PARTITION_POSTPROCESSOR',12);vbc=new icc('HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR',13);dcc=new icc('SEMI_INTERACTIVE_CROSSMIN_PROCESSOR',14);ebc=new icc('BREAKING_POINT_INSERTER',15);Qbc=new icc('LONG_EDGE_SPLITTER',16);Zbc=new icc('PORT_SIDE_PROCESSOR',17);Fbc=new icc('INVERTED_PORT_PROCESSOR',18);Ybc=new icc('PORT_LIST_SORTER',19);fcc=new icc('SORT_BY_INPUT_ORDER_OF_MODEL',20);Tbc=new icc('NORTH_SOUTH_PORT_PREPROCESSOR',21);fbc=new icc('BREAKING_POINT_PROCESSOR',22);Ubc=new icc(jBe,23);gcc=new icc(kBe,24);_bc=new icc('SELF_LOOP_PORT_RESTORER',25);ecc=new icc('SINGLE_EDGE_GRAPH_WRAPPER',26);Gbc=new icc('IN_LAYER_CONSTRAINT_PROCESSOR',27);sbc=new icc('END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR',28);Hbc=new icc('LABEL_AND_NODE_SIZE_PROCESSOR',29);Dbc=new icc('INNERMOST_NODE_MARGIN_CALCULATOR',30);ccc=new icc('SELF_LOOP_ROUTER',31);ibc=new icc('COMMENT_NODE_MARGIN_CALCULATOR',32);qbc=new icc('END_LABEL_PREPROCESSOR',33);Kbc=new icc('LABEL_DUMMY_SWITCHER',34);hbc=new icc('CENTER_LABEL_MANAGEMENT_PROCESSOR',35);Lbc=new icc('LABEL_SIDE_SELECTOR',36);Bbc=new icc('HYPEREDGE_DUMMY_MERGER',37);wbc=new icc('HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR',38);Obc=new icc('LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR',39);ybc=new icc('HIERARCHICAL_PORT_POSITION_PROCESSOR',40);lbc=new icc('CONSTRAINTS_POSTPROCESSOR',41);jbc=new icc('COMMENT_POSTPROCESSOR',42);Cbc=new icc('HYPERNODE_PROCESSOR',43);xbc=new icc('HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER',44);Pbc=new icc('LONG_EDGE_JOINER',45);acc=new icc('SELF_LOOP_POSTPROCESSOR',46);gbc=new icc('BREAKING_POINT_REMOVER',47);Sbc=new icc('NORTH_SOUTH_PORT_POSTPROCESSOR',48);Abc=new icc('HORIZONTAL_COMPACTOR',49);Jbc=new icc('LABEL_DUMMY_REMOVER',50);tbc=new icc('FINAL_SPLINE_BENDPOINTS_CALCULATOR',51);rbc=new icc('END_LABEL_SORTER',52);$bc=new icc('REVERSED_EDGE_RESTORER',53);pbc=new icc('END_LABEL_POSTPROCESSOR',54);ubc=new icc('HIERARCHICAL_NODE_RESIZER',55);mbc=new icc('DIRECTION_POSTPROCESSOR',56)} +function Ozc(){Ozc=geb;Uxc=($tc(),Ytc);Txc=new lGd(HBe,Uxc);jyc=new lGd(IBe,(Geb(),false));pyc=(Ovc(),Mvc);oyc=new lGd(JBe,pyc);Hyc=new lGd(KBe,false);Iyc=new lGd(LBe,true);ixc=new lGd(MBe,false);azc=(sEc(),qEc);_yc=new lGd(NBe,azc);sgb(1);izc=new lGd(OBe,sgb(7));jzc=new lGd(PBe,false);kyc=new lGd(QBe,false);Sxc=(Ptc(),Ltc);Rxc=new lGd(RBe,Sxc);Gyc=(_Cc(),ZCc);Fyc=new lGd(SBe,Gyc);wyc=(cxc(),bxc);vyc=new lGd(TBe,wyc);sgb(-1);uyc=new lGd(UBe,null);sgb(-1);xyc=new lGd(VBe,sgb(-1));sgb(-1);yyc=new lGd(WBe,sgb(4));sgb(-1);Ayc=new lGd(XBe,sgb(2));Eyc=(aEc(),$Dc);Dyc=new lGd(YBe,Eyc);sgb(0);Cyc=new lGd(ZBe,sgb(0));syc=new lGd($Be,sgb(lve));Qxc=(stc(),qtc);Pxc=new lGd(_Be,Qxc);yxc=new lGd(aCe,false);Hxc=new lGd(bCe,0.1);Nxc=new lGd(cCe,false);Jxc=new lGd(dCe,null);Kxc=new lGd(eCe,null);sgb(-1);Lxc=new lGd(fCe,null);sgb(-1);Mxc=new lGd(gCe,sgb(-1));sgb(0);zxc=new lGd(hCe,sgb(40));Fxc=(xvc(),wvc);Exc=new lGd(iCe,Fxc);Bxc=uvc;Axc=new lGd(jCe,Bxc);$yc=(JDc(),EDc);Zyc=new lGd(kCe,$yc);Pyc=new jGd(lCe);Kyc=(Cuc(),Auc);Jyc=new lGd(mCe,Kyc);Nyc=(Ouc(),Luc);Myc=new lGd(nCe,Nyc);new Xsd;Syc=new lGd(oCe,0.3);Uyc=new jGd(pCe);Wyc=(wDc(),uDc);Vyc=new lGd(qCe,Wyc);ayc=(KEc(),IEc);_xc=new lGd(rCe,ayc);cyc=(TEc(),SEc);byc=new lGd(sCe,cyc);eyc=(lFc(),kFc);dyc=new lGd(tCe,eyc);gyc=new lGd(uCe,0.2);Zxc=new lGd(vCe,2);ezc=new lGd(wCe,null);gzc=new lGd(xCe,10);fzc=new lGd(yCe,10);hzc=new lGd(zCe,20);sgb(0);bzc=new lGd(ACe,sgb(0));sgb(0);czc=new lGd(BCe,sgb(0));sgb(0);dzc=new lGd(CCe,sgb(0));jxc=new lGd(DCe,false);nxc=($uc(),Yuc);mxc=new lGd(ECe,nxc);lxc=(jtc(),itc);kxc=new lGd(FCe,lxc);myc=new lGd(GCe,false);sgb(0);lyc=new lGd(HCe,sgb(16));sgb(0);nyc=new lGd(ICe,sgb(5));Gzc=(DFc(),BFc);Fzc=new lGd(JCe,Gzc);kzc=new lGd(KCe,10);nzc=new lGd(LCe,1);wzc=(Etc(),Dtc);vzc=new lGd(MCe,wzc);qzc=new jGd(NCe);tzc=sgb(1);sgb(0);szc=new lGd(OCe,tzc);Lzc=(uFc(),rFc);Kzc=new lGd(PCe,Lzc);Hzc=new jGd(QCe);Bzc=new lGd(RCe,true);zzc=new lGd(SCe,2);Dzc=new lGd(TCe,true);Yxc=(tuc(),ruc);Xxc=new lGd(UCe,Yxc);Wxc=(btc(),Zsc);Vxc=new lGd(VCe,Wxc);xxc=(kEc(),hEc);wxc=new lGd(WCe,xxc);vxc=new lGd(XCe,false);uxc=new lGd(YCe,false);pxc=(U$b(),T$b);oxc=new lGd(ZCe,pxc);txc=(lDc(),iDc);sxc=new lGd($Ce,txc);qxc=new lGd(_Ce,0);rxc=new lGd(aDe,0);ryc=Ntc;qyc=ptc;zyc=YCc;Byc=YCc;tyc=TCc;Ixc=(Fnd(),Cnd);Oxc=qtc;Gxc=qtc;Cxc=qtc;Dxc=Cnd;Qyc=HDc;Ryc=EDc;Lyc=EDc;Oyc=EDc;Tyc=GDc;Yyc=HDc;Xyc=HDc;fyc=(Ymd(),Wmd);hyc=Wmd;iyc=kFc;$xc=Vmd;lzc=CFc;mzc=AFc;ozc=CFc;pzc=AFc;xzc=CFc;yzc=AFc;rzc=Ctc;uzc=Dtc;Mzc=CFc;Nzc=AFc;Izc=CFc;Jzc=AFc;Czc=AFc;Azc=AFc;Ezc=AFc} +function iNc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb;cb=0;for(H=b,K=0,N=H.length;K<N;++K){F=H[K];for(V=new Anb(F.j);V.a<V.c.c.length;){U=RD(ynb(V),12);X=0;for(h=new Anb(U.g);h.a<h.c.c.length;){g=RD(ynb(h),18);F.c!=g.d.i.c&&++X}X>0&&(a.a[U.p]=cb++)}}hb=0;for(I=c,L=0,O=I.length;L<O;++L){F=I[L];P=0;for(V=new Anb(F.j);V.a<V.c.c.length;){U=RD(ynb(V),12);if(U.j==(qpd(),Yod)){for(h=new Anb(U.e);h.a<h.c.c.length;){g=RD(ynb(h),18);if(F.c!=g.c.i.c){++P;break}}}else{break}}R=0;Y=new Jkb(F.j,F.j.c.length);while(Y.b>0){U=(sFb(Y.b>0),RD(Y.a.Xb(Y.c=--Y.b),12));X=0;for(h=new Anb(U.e);h.a<h.c.c.length;){g=RD(ynb(h),18);F.c!=g.c.i.c&&++X}if(X>0){if(U.j==(qpd(),Yod)){a.a[U.p]=hb;++hb}else{a.a[U.p]=hb+P+R;++R}}}hb+=R}W=new Tsb;o=new Iub;for(G=b,J=0,M=G.length;J<M;++J){F=G[J];for(fb=new Anb(F.j);fb.a<fb.c.c.length;){eb=RD(ynb(fb),12);for(h=new Anb(eb.g);h.a<h.c.c.length;){g=RD(ynb(h),18);jb=g.d;if(F.c!=jb.i.c){db=RD(Wd(qtb(W.f,eb)),477);ib=RD(Wd(qtb(W.f,jb)),477);if(!db&&!ib){n=new lNc;o.a.zc(n,o);Rmb(n.a,g);Rmb(n.d,eb);rtb(W.f,eb,n);Rmb(n.d,jb);rtb(W.f,jb,n)}else if(!db){Rmb(ib.a,g);Rmb(ib.d,eb);rtb(W.f,eb,ib)}else if(!ib){Rmb(db.a,g);Rmb(db.d,jb);rtb(W.f,jb,db)}else if(db==ib){Rmb(db.a,g)}else{Rmb(db.a,g);for(T=new Anb(ib.d);T.a<T.c.c.length;){S=RD(ynb(T),12);rtb(W.f,S,db)}Tmb(db.a,ib.a);Tmb(db.d,ib.d);o.a.Bc(ib)!=null}}}}}p=RD(Ee(o,$C(OY,{3:1,4:1,5:1,2045:1},477,o.a.gc(),0,1)),2045);D=b[0].c;bb=c[0].c;for(k=p,l=0,m=k.length;l<m;++l){j=k[l];j.e=cb;j.f=hb;for(V=new Anb(j.d);V.a<V.c.c.length;){U=RD(ynb(V),12);Z=a.a[U.p];if(U.i.c==D){Z<j.e&&(j.e=Z);Z>j.b&&(j.b=Z)}else if(U.i.c==bb){Z<j.f&&(j.f=Z);Z>j.c&&(j.c=Z)}}}Wnb(p,0,p.length,null);gb=$C(kE,Pwe,28,p.length,15,1);d=$C(kE,Pwe,28,hb+1,15,1);for(r=0;r<p.length;r++){gb[r]=p[r].f;d[gb[r]]=1}f=0;for(s=0;s<d.length;s++){d[s]==1?(d[s]=f):--f}$=0;for(t=0;t<gb.length;t++){gb[t]+=d[gb[t]];$=$wnd.Math.max($,gb[t]+1)}i=1;while(i<$){i*=2}lb=2*i-1;i-=1;kb=$C(kE,Pwe,28,lb,15,1);e=0;for(B=0;B<gb.length;B++){A=gb[B]+i;++kb[A];while(A>0){A%2>0&&(e+=kb[A+1]);A=(A-1)/2|0;++kb[A]}}C=$C(NY,rve,374,p.length*2,0,1);for(u=0;u<p.length;u++){C[2*u]=new oNc(p[u],p[u].e,p[u].b,(sNc(),rNc));C[2*u+1]=new oNc(p[u],p[u].b,p[u].e,qNc)}Wnb(C,0,C.length,null);Q=0;for(v=0;v<C.length;v++){switch(C[v].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}ab=$C(NY,rve,374,p.length*2,0,1);for(w=0;w<p.length;w++){ab[2*w]=new oNc(p[w],p[w].f,p[w].c,(sNc(),rNc));ab[2*w+1]=new oNc(p[w],p[w].c,p[w].f,qNc)}Wnb(ab,0,ab.length,null);Q=0;for(q=0;q<ab.length;q++){switch(ab[q].d.g){case 0:++Q;break;case 1:--Q;e+=Q;}}return e} +function Vse(){Vse=geb;Ese=new Wse(7);Gse=(++Use,new Hte(8,94));++Use;new Hte(8,64);Hse=(++Use,new Hte(8,36));Nse=(++Use,new Hte(8,65));Ose=(++Use,new Hte(8,122));Pse=(++Use,new Hte(8,90));Sse=(++Use,new Hte(8,98));Lse=(++Use,new Hte(8,66));Qse=(++Use,new Hte(8,60));Tse=(++Use,new Hte(8,62));Dse=new Wse(11);Bse=(++Use,new xte(4));rte(Bse,48,57);Rse=(++Use,new xte(4));rte(Rse,48,57);rte(Rse,65,90);rte(Rse,95,95);rte(Rse,97,122);Mse=(++Use,new xte(4));rte(Mse,9,9);rte(Mse,10,10);rte(Mse,12,12);rte(Mse,13,13);rte(Mse,32,32);Ise=yte(Bse);Kse=yte(Rse);Jse=yte(Mse);wse=new Tsb;xse=new Tsb;yse=cD(WC(qJ,1),Nve,2,6,['Cn','Lu','Ll','Lt','Lm','Lo','Mn','Me','Mc','Nd','Nl','No','Zs','Zl','Zp','Cc','Cf',null,'Co','Cs','Pd','Ps','Pe','Pc','Po','Sm','Sc','Sk','So','Pi','Pf','L','M','N','Z','C','P','S']);vse=cD(WC(qJ,1),Nve,2,6,['Basic Latin','Latin-1 Supplement','Latin Extended-A','Latin Extended-B','IPA Extensions','Spacing Modifier Letters','Combining Diacritical Marks','Greek','Cyrillic','Armenian','Hebrew','Arabic','Syriac','Thaana','Devanagari','Bengali','Gurmukhi','Gujarati','Oriya','Tamil','Telugu','Kannada','Malayalam','Sinhala','Thai','Lao','Tibetan','Myanmar','Georgian','Hangul Jamo','Ethiopic','Cherokee','Unified Canadian Aboriginal Syllabics','Ogham','Runic','Khmer','Mongolian','Latin Extended Additional','Greek Extended','General Punctuation','Superscripts and Subscripts','Currency Symbols','Combining Marks for Symbols','Letterlike Symbols','Number Forms','Arrows','Mathematical Operators','Miscellaneous Technical','Control Pictures','Optical Character Recognition','Enclosed Alphanumerics','Box Drawing','Block Elements','Geometric Shapes','Miscellaneous Symbols','Dingbats','Braille Patterns','CJK Radicals Supplement','Kangxi Radicals','Ideographic Description Characters','CJK Symbols and Punctuation','Hiragana','Katakana','Bopomofo','Hangul Compatibility Jamo','Kanbun','Bopomofo Extended','Enclosed CJK Letters and Months','CJK Compatibility','CJK Unified Ideographs Extension A','CJK Unified Ideographs','Yi Syllables','Yi Radicals','Hangul Syllables',VLe,'CJK Compatibility Ideographs','Alphabetic Presentation Forms','Arabic Presentation Forms-A','Combining Half Marks','CJK Compatibility Forms','Small Form Variants','Arabic Presentation Forms-B','Specials','Halfwidth and Fullwidth Forms','Old Italic','Gothic','Deseret','Byzantine Musical Symbols','Musical Symbols','Mathematical Alphanumeric Symbols','CJK Unified Ideographs Extension B','CJK Compatibility Ideographs Supplement','Tags']);zse=cD(WC(kE,1),Pwe,28,15,[66304,66351,66352,66383,66560,66639,118784,119039,119040,119295,119808,120831,131072,173782,194560,195103,917504,917631])} +function hMb(){hMb=geb;eMb=new kMb('OUT_T_L',0,(EKb(),CKb),(vLb(),sLb),(ZJb(),WJb),WJb,cD(WC(bL,1),rve,21,0,[ysb((dod(),_nd),cD(WC(A3,1),jwe,95,0,[cod,Xnd]))]));dMb=new kMb('OUT_T_C',1,BKb,sLb,WJb,XJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd,Ynd]))]));fMb=new kMb('OUT_T_R',2,DKb,sLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[cod,Znd]))]));XLb=new kMb('OUT_B_L',3,CKb,uLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd]))]));WLb=new kMb('OUT_B_C',4,BKb,uLb,YJb,XJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd,Ynd]))]));YLb=new kMb('OUT_B_R',5,DKb,uLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[aod,Znd]))]));_Lb=new kMb('OUT_L_T',6,DKb,uLb,WJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,cod,Ynd]))]));$Lb=new kMb('OUT_L_C',7,DKb,tLb,XJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,bod])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,bod,Ynd]))]));ZLb=new kMb('OUT_L_B',8,DKb,sLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Xnd,aod,Ynd]))]));cMb=new kMb('OUT_R_T',9,CKb,uLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,cod,Ynd]))]));bMb=new kMb('OUT_R_C',10,CKb,tLb,XJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,bod])),ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,bod,Ynd]))]));aMb=new kMb('OUT_R_B',11,CKb,sLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb(_nd,cD(WC(A3,1),jwe,95,0,[Znd,aod,Ynd]))]));ULb=new kMb('IN_T_L',12,CKb,uLb,WJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Xnd,Ynd]))]));TLb=new kMb('IN_T_C',13,BKb,uLb,WJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Wnd,Ynd]))]));VLb=new kMb('IN_T_R',14,DKb,uLb,WJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[cod,Znd,Ynd]))]));RLb=new kMb('IN_C_L',15,CKb,tLb,XJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Xnd,Ynd]))]));QLb=new kMb('IN_C_C',16,BKb,tLb,XJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Wnd,Ynd]))]));SLb=new kMb('IN_C_R',17,DKb,tLb,XJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[bod,Znd,Ynd]))]));OLb=new kMb('IN_B_L',18,CKb,sLb,YJb,WJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Xnd,Ynd]))]));NLb=new kMb('IN_B_C',19,BKb,sLb,YJb,XJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Wnd,Ynd]))]));PLb=new kMb('IN_B_R',20,DKb,sLb,YJb,YJb,cD(WC(bL,1),rve,21,0,[ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Znd])),ysb($nd,cD(WC(A3,1),jwe,95,0,[aod,Znd,Ynd]))]));gMb=new kMb(Sye,21,null,null,null,null,cD(WC(bL,1),rve,21,0,[]))} +function JTd(){JTd=geb;nTd=(lTd(),kTd).b;RD(QHd(xYd(kTd.b),0),35);RD(QHd(xYd(kTd.b),1),19);mTd=kTd.a;RD(QHd(xYd(kTd.a),0),35);RD(QHd(xYd(kTd.a),1),19);RD(QHd(xYd(kTd.a),2),19);RD(QHd(xYd(kTd.a),3),19);RD(QHd(xYd(kTd.a),4),19);oTd=kTd.o;RD(QHd(xYd(kTd.o),0),35);RD(QHd(xYd(kTd.o),1),35);qTd=RD(QHd(xYd(kTd.o),2),19);RD(QHd(xYd(kTd.o),3),19);RD(QHd(xYd(kTd.o),4),19);RD(QHd(xYd(kTd.o),5),19);RD(QHd(xYd(kTd.o),6),19);RD(QHd(xYd(kTd.o),7),19);RD(QHd(xYd(kTd.o),8),19);RD(QHd(xYd(kTd.o),9),19);RD(QHd(xYd(kTd.o),10),19);RD(QHd(xYd(kTd.o),11),19);RD(QHd(xYd(kTd.o),12),19);RD(QHd(xYd(kTd.o),13),19);RD(QHd(xYd(kTd.o),14),19);RD(QHd(xYd(kTd.o),15),19);RD(QHd(uYd(kTd.o),0),62);RD(QHd(uYd(kTd.o),1),62);RD(QHd(uYd(kTd.o),2),62);RD(QHd(uYd(kTd.o),3),62);RD(QHd(uYd(kTd.o),4),62);RD(QHd(uYd(kTd.o),5),62);RD(QHd(uYd(kTd.o),6),62);RD(QHd(uYd(kTd.o),7),62);RD(QHd(uYd(kTd.o),8),62);RD(QHd(uYd(kTd.o),9),62);pTd=kTd.p;RD(QHd(xYd(kTd.p),0),35);RD(QHd(xYd(kTd.p),1),35);RD(QHd(xYd(kTd.p),2),35);RD(QHd(xYd(kTd.p),3),35);RD(QHd(xYd(kTd.p),4),19);RD(QHd(xYd(kTd.p),5),19);RD(QHd(uYd(kTd.p),0),62);RD(QHd(uYd(kTd.p),1),62);rTd=kTd.q;RD(QHd(xYd(kTd.q),0),35);sTd=kTd.v;RD(QHd(xYd(kTd.v),0),19);RD(QHd(uYd(kTd.v),0),62);RD(QHd(uYd(kTd.v),1),62);RD(QHd(uYd(kTd.v),2),62);tTd=kTd.w;RD(QHd(xYd(kTd.w),0),35);RD(QHd(xYd(kTd.w),1),35);RD(QHd(xYd(kTd.w),2),35);RD(QHd(xYd(kTd.w),3),19);uTd=kTd.B;RD(QHd(xYd(kTd.B),0),19);RD(QHd(uYd(kTd.B),0),62);RD(QHd(uYd(kTd.B),1),62);RD(QHd(uYd(kTd.B),2),62);xTd=kTd.Q;RD(QHd(xYd(kTd.Q),0),19);RD(QHd(uYd(kTd.Q),0),62);yTd=kTd.R;RD(QHd(xYd(kTd.R),0),35);zTd=kTd.S;RD(QHd(uYd(kTd.S),0),62);RD(QHd(uYd(kTd.S),1),62);RD(QHd(uYd(kTd.S),2),62);RD(QHd(uYd(kTd.S),3),62);RD(QHd(uYd(kTd.S),4),62);RD(QHd(uYd(kTd.S),5),62);RD(QHd(uYd(kTd.S),6),62);RD(QHd(uYd(kTd.S),7),62);RD(QHd(uYd(kTd.S),8),62);RD(QHd(uYd(kTd.S),9),62);RD(QHd(uYd(kTd.S),10),62);RD(QHd(uYd(kTd.S),11),62);RD(QHd(uYd(kTd.S),12),62);RD(QHd(uYd(kTd.S),13),62);RD(QHd(uYd(kTd.S),14),62);ATd=kTd.T;RD(QHd(xYd(kTd.T),0),19);RD(QHd(xYd(kTd.T),2),19);BTd=RD(QHd(xYd(kTd.T),3),19);RD(QHd(xYd(kTd.T),4),19);RD(QHd(uYd(kTd.T),0),62);RD(QHd(uYd(kTd.T),1),62);RD(QHd(xYd(kTd.T),1),19);CTd=kTd.U;RD(QHd(xYd(kTd.U),0),35);RD(QHd(xYd(kTd.U),1),35);RD(QHd(xYd(kTd.U),2),19);RD(QHd(xYd(kTd.U),3),19);RD(QHd(xYd(kTd.U),4),19);RD(QHd(xYd(kTd.U),5),19);RD(QHd(uYd(kTd.U),0),62);DTd=kTd.V;RD(QHd(xYd(kTd.V),0),19);ETd=kTd.W;RD(QHd(xYd(kTd.W),0),35);RD(QHd(xYd(kTd.W),1),35);RD(QHd(xYd(kTd.W),2),35);RD(QHd(xYd(kTd.W),3),19);RD(QHd(xYd(kTd.W),4),19);RD(QHd(xYd(kTd.W),5),19);GTd=kTd.bb;RD(QHd(xYd(kTd.bb),0),35);RD(QHd(xYd(kTd.bb),1),35);RD(QHd(xYd(kTd.bb),2),35);RD(QHd(xYd(kTd.bb),3),35);RD(QHd(xYd(kTd.bb),4),35);RD(QHd(xYd(kTd.bb),5),35);RD(QHd(xYd(kTd.bb),6),35);RD(QHd(xYd(kTd.bb),7),19);RD(QHd(uYd(kTd.bb),0),62);RD(QHd(uYd(kTd.bb),1),62);HTd=kTd.eb;RD(QHd(xYd(kTd.eb),0),35);RD(QHd(xYd(kTd.eb),1),35);RD(QHd(xYd(kTd.eb),2),35);RD(QHd(xYd(kTd.eb),3),35);RD(QHd(xYd(kTd.eb),4),35);RD(QHd(xYd(kTd.eb),5),35);RD(QHd(xYd(kTd.eb),6),19);RD(QHd(xYd(kTd.eb),7),19);FTd=kTd.ab;RD(QHd(xYd(kTd.ab),0),35);RD(QHd(xYd(kTd.ab),1),35);vTd=kTd.H;RD(QHd(xYd(kTd.H),0),19);RD(QHd(xYd(kTd.H),1),19);RD(QHd(xYd(kTd.H),2),19);RD(QHd(xYd(kTd.H),3),19);RD(QHd(xYd(kTd.H),4),19);RD(QHd(xYd(kTd.H),5),19);RD(QHd(uYd(kTd.H),0),62);ITd=kTd.db;RD(QHd(xYd(kTd.db),0),19);wTd=kTd.M} +function Ane(a){var b;if(a.O)return;a.O=true;PAd(a,'type');CBd(a,'ecore.xml.type');DBd(a,dLe);b=RD(N5d((YSd(),XSd),dLe),2044);WGd(zYd(a.fb),a.b);vBd(a.b,Vbb,'AnyType',false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.wb.D,pKe,null,0,-1,Vbb,false,false,true,false,false,false);tBd(RD(QHd(xYd(a.b),1),35),a.wb.D,'any',null,0,-1,Vbb,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.b),2),35),a.wb.D,'anyAttribute',null,0,-1,Vbb,false,false,true,false,false,false);vBd(a.bb,Xbb,iLe,false,false,true);tBd(RD(QHd(xYd(a.bb),0),35),a.gb,'data',null,0,1,Xbb,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),1),35),a.gb,CIe,null,1,1,Xbb,false,false,true,false,true,false);vBd(a.fb,Ybb,jLe,false,false,true);tBd(RD(QHd(xYd(a.fb),0),35),b.gb,'rawValue',null,0,1,Ybb,true,true,true,false,true,true);tBd(RD(QHd(xYd(a.fb),1),35),b.a,aIe,null,0,1,Ybb,true,true,true,false,true,true);zBd(RD(QHd(xYd(a.fb),2),19),a.wb.q,null,'instanceType',1,1,Ybb,false,false,true,false,false,false,false);vBd(a.qb,Zbb,kLe,false,false,true);tBd(RD(QHd(xYd(a.qb),0),35),a.wb.D,pKe,null,0,-1,null,false,false,true,false,false,false);zBd(RD(QHd(xYd(a.qb),1),19),a.wb.ab,null,'xMLNSPrefixMap',0,-1,null,true,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.qb),2),19),a.wb.ab,null,'xSISchemaLocation',0,-1,null,true,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.qb),3),35),a.gb,'cDATA',null,0,-2,null,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.qb),4),35),a.gb,'comment',null,0,-2,null,true,true,true,false,false,true);zBd(RD(QHd(xYd(a.qb),5),19),a.bb,null,KLe,0,-2,null,true,true,true,true,false,false,true);tBd(RD(QHd(xYd(a.qb),6),35),a.gb,hIe,null,0,-2,null,true,true,true,false,false,true);xBd(a.a,jJ,'AnySimpleType',true);xBd(a.c,qJ,'AnyURI',true);xBd(a.d,WC(gE,1),'Base64Binary',true);xBd(a.e,xdb,'Boolean',true);xBd(a.f,QI,'BooleanObject',true);xBd(a.g,gE,'Byte',true);xBd(a.i,RI,'ByteObject',true);xBd(a.j,qJ,'Date',true);xBd(a.k,qJ,'DateTime',true);xBd(a.n,tJ,'Decimal',true);xBd(a.o,iE,'Double',true);xBd(a.p,VI,'DoubleObject',true);xBd(a.q,qJ,'Duration',true);xBd(a.s,QK,'ENTITIES',true);xBd(a.r,QK,'ENTITIESBase',true);xBd(a.t,qJ,qLe,true);xBd(a.u,jE,'Float',true);xBd(a.v,ZI,'FloatObject',true);xBd(a.w,qJ,'GDay',true);xBd(a.B,qJ,'GMonth',true);xBd(a.A,qJ,'GMonthDay',true);xBd(a.C,qJ,'GYear',true);xBd(a.D,qJ,'GYearMonth',true);xBd(a.F,WC(gE,1),'HexBinary',true);xBd(a.G,qJ,'ID',true);xBd(a.H,qJ,'IDREF',true);xBd(a.J,QK,'IDREFS',true);xBd(a.I,QK,'IDREFSBase',true);xBd(a.K,kE,'Int',true);xBd(a.M,uJ,'Integer',true);xBd(a.L,bJ,'IntObject',true);xBd(a.P,qJ,'Language',true);xBd(a.Q,lE,'Long',true);xBd(a.R,eJ,'LongObject',true);xBd(a.S,qJ,'Name',true);xBd(a.T,qJ,rLe,true);xBd(a.U,uJ,'NegativeInteger',true);xBd(a.V,qJ,BLe,true);xBd(a.X,QK,'NMTOKENS',true);xBd(a.W,QK,'NMTOKENSBase',true);xBd(a.Y,uJ,'NonNegativeInteger',true);xBd(a.Z,uJ,'NonPositiveInteger',true);xBd(a.$,qJ,'NormalizedString',true);xBd(a._,qJ,'NOTATION',true);xBd(a.ab,qJ,'PositiveInteger',true);xBd(a.cb,qJ,'QName',true);xBd(a.db,wdb,'Short',true);xBd(a.eb,lJ,'ShortObject',true);xBd(a.gb,qJ,uwe,true);xBd(a.hb,qJ,'Time',true);xBd(a.ib,qJ,'Token',true);xBd(a.jb,wdb,'UnsignedByte',true);xBd(a.kb,lJ,'UnsignedByteObject',true);xBd(a.lb,lE,'UnsignedInt',true);xBd(a.mb,eJ,'UnsignedIntObject',true);xBd(a.nb,uJ,'UnsignedLong',true);xBd(a.ob,kE,'UnsignedShort',true);xBd(a.pb,bJ,'UnsignedShortObject',true);pBd(a,dLe);yne(a)} +function Fed(a,b,c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,ab;if(d.$g()){return yob(),yob(),vob}if(Heb(TD(Gxd(b,(umd(),rld))))){return yob(),yob(),vob}A=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i!=0;C=Ded(b);B=!C.dc();if(A||B){e=RD(Gxd(b,Tld),143);if(!e){throw Adb(new Jed('Resolved algorithm is not set; apply a LayoutAlgorithmResolver before computing layout.'))}Y=Ofd(e,(aGd(),YFd));Bed(b);if(!A&&B&&!Y){return yob(),yob(),vob}t=new bnb;if(dE(Gxd(b,Xkd))===dE((Fnd(),Cnd))&&(Ofd(e,VFd)||Ofd(e,UFd))){if(Heb(TD(Gxd(b,mmd)))){throw Adb(new Jed('Topdown layout cannot be used together with hierarchy handling.'))}M=Aed(a,b);N=new Yub;ye(N,(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));while(N.b!=0){K=RD(N.b==0?null:(sFb(N.b!=0),Wub(N,N.a.a)),27);Bed(K);X=dE(Gxd(K,Xkd))===dE(End);if(X||Hxd(K,Akd)&&!Nfd(e,Gxd(K,Tld))){q=Fed(a,K,c,d);Tmb(t,q);Ixd(K,Xkd,End);ksd(K)}else{ye(N,(!K.a&&(K.a=new C5d(J4,K,10,11)),K.a))}}}else{M=(!b.a&&(b.a=new C5d(J4,b,10,11)),b.a).i;if(Heb(TD(Gxd(b,mmd)))){Z=d.eh(1);Z.Ug(yGe,1);if(Gxd(b,nmd)==null){throw Adb(new Jed(b.k+' has not been assigned a top-down node type.'))}if(RD(Gxd(b,nmd),280)==(mqd(),jqd)||RD(Gxd(b,nmd),280)==lqd){for(s=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));s.e!=s.i.gc();){r=RD(bMd(s),27);J=RD(Gxd(r,Tld),143);if((!r.a&&(r.a=new C5d(J4,r,10,11)),r.a).i>0&&(ltd(J.f),false)){if(RD(Gxd(r,nmd),280)==jqd){throw Adb(new Jed('Topdown Layout Providers should only be used on parallel nodes.'))}fE(ltd(J.f));null.Um();zyd(r,$wnd.Math.max(r.g,null.Vm),$wnd.Math.max(r.f,null.Vm))}else if(Gxd(r,smd)!=null){h=RD(Gxd(r,smd),347);W=h.Tg(r);zyd(r,$wnd.Math.max(r.g,W.a),$wnd.Math.max(r.f,W.b))}}}O=RD(Gxd(b,tld),107);n=b.g-(O.b+O.c);m=b.f-(O.d+O.a);Z.bh('Available Child Area: ('+n+'|'+m+')');Ixd(b,Dkd,n/m);Ced(b,e,d.eh(M));if(RD(Gxd(b,nmd),280)==lqd){psd(b);zyd(b,O.b+Kfb(UD(Gxd(b,Ikd)))+O.c,O.d+Kfb(UD(Gxd(b,Hkd)))+O.a)}Z.bh('Executed layout algorithm: '+WD(Gxd(b,Akd))+' on node '+b.k);if(RD(Gxd(b,nmd),280)==jqd){if(n<0||m<0){throw Adb(new Jed('The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. '+b.k))}Hxd(b,Ikd)||Hxd(b,Hkd)||psd(b);p=Kfb(UD(Gxd(b,Ikd)));o=Kfb(UD(Gxd(b,Hkd)));Z.bh('Desired Child Area: ('+p+'|'+o+')');Q=n/p;R=m/o;P=$wnd.Math.min(Q,$wnd.Math.min(R,Kfb(UD(Gxd(b,omd)))));Ixd(b,qmd,P);Z.bh(b.k+' -- Local Scale Factor (X|Y): ('+Q+'|'+R+')');u=RD(Gxd(b,Kkd),21);f=0;g=0;P<Q&&(u.Hc((ukd(),okd))?(f=(n/2-p*P/2)/P):u.Hc(qkd)&&(f=(n-p*P)/P));P<R&&(u.Hc((ukd(),skd))?(g=(m/2-o*P/2)/P):u.Hc(rkd)&&(g=(m-o*P)/P));$=f+(O.b/P-O.b);ab=g+(O.d/P-O.d);Z.bh('Shift: ('+$+'|'+ab+')');for(L=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));L.e!=L.i.gc();){K=RD(bMd(L),27);Dyd(K,K.i+$);Eyd(K,K.j+ab)}for(w=new dMd((!b.b&&(b.b=new C5d(G4,b,12,3)),b.b));w.e!=w.i.gc();){v=RD(bMd(w),74);for(T=new dMd((!v.a&&(v.a=new C5d(F4,v,6,6)),v.a));T.e!=T.i.gc();){S=RD(bMd(T),166);Nzd(S,S.j+$,S.k+ab);Gzd(S,S.b+$,S.c+ab);for(j=new dMd((!S.a&&(S.a=new XZd(D4,S,5)),S.a));j.e!=j.i.gc();){i=RD(bMd(j),377);Uxd(i,i.a+$,i.b+ab)}}for(I=new dMd((!v.n&&(v.n=new C5d(I4,v,1,7)),v.n));I.e!=I.i.gc();){H=RD(bMd(I),135);Byd(H,H.i+$,H.j+ab)}G=RD(Gxd(v,cld),75);for(F=Sub(G,0);F.b!=F.d.c;){D=RD(evb(F),8);D.a+=$;D.b+=ab}Ixd(v,cld,G)}}Z.Vg()}for(l=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));l.e!=l.i.gc();){k=RD(bMd(l),27);q=Fed(a,k,c,d);Tmb(t,q);ksd(k)}}if(d.$g()){return yob(),yob(),vob}for(V=new Anb(t);V.a<V.c.c.length;){U=RD(ynb(V),74);Ixd(U,rld,(Geb(),true))}Heb(TD(Gxd(b,mmd)))||Ced(b,e,d.eh(M));Ged(t);return B&&Y?C:(yob(),yob(),vob)}else{return yob(),yob(),vob}} +function Jre(a,b){var c,d;if(!Bre){Bre=new Tsb;Cre=new Tsb;d=(Vse(),Vse(),++Use,new xte(4));ose(d,'\t\n\r\r ');$jb(Bre,QLe,d);$jb(Cre,QLe,yte(d));d=(null,++Use,new xte(4));ose(d,TLe);$jb(Bre,OLe,d);$jb(Cre,OLe,yte(d));d=(null,++Use,new xte(4));ose(d,TLe);$jb(Bre,OLe,d);$jb(Cre,OLe,yte(d));d=(null,++Use,new xte(4));ose(d,ULe);ute(d,RD(Xjb(Bre,OLe),122));$jb(Bre,PLe,d);$jb(Cre,PLe,yte(d));d=(null,++Use,new xte(4));ose(d,'-.0:AZ__az\xB7\xB7\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u02D0\u02D1\u0300\u0345\u0360\u0361\u0386\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0483\u0486\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u0591\u05A1\u05A3\u05B9\u05BB\u05BD\u05BF\u05BF\u05C1\u05C2\u05C4\u05C4\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0640\u0652\u0660\u0669\u0670\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06E8\u06EA\u06ED\u06F0\u06F9\u0901\u0903\u0905\u0939\u093C\u094D\u0951\u0954\u0958\u0963\u0966\u096F\u0981\u0983\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09BC\u09BC\u09BE\u09C4\u09C7\u09C8\u09CB\u09CD\u09D7\u09D7\u09DC\u09DD\u09DF\u09E3\u09E6\u09F1\u0A02\u0A02\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3C\u0A3E\u0A42\u0A47\u0A48\u0A4B\u0A4D\u0A59\u0A5C\u0A5E\u0A5E\u0A66\u0A74\u0A81\u0A83\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABC\u0AC5\u0AC7\u0AC9\u0ACB\u0ACD\u0AE0\u0AE0\u0AE6\u0AEF\u0B01\u0B03\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3C\u0B43\u0B47\u0B48\u0B4B\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F\u0B61\u0B66\u0B6F\u0B82\u0B83\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0BBE\u0BC2\u0BC6\u0BC8\u0BCA\u0BCD\u0BD7\u0BD7\u0BE7\u0BEF\u0C01\u0C03\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C3E\u0C44\u0C46\u0C48\u0C4A\u0C4D\u0C55\u0C56\u0C60\u0C61\u0C66\u0C6F\u0C82\u0C83\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CBE\u0CC4\u0CC6\u0CC8\u0CCA\u0CCD\u0CD5\u0CD6\u0CDE\u0CDE\u0CE0\u0CE1\u0CE6\u0CEF\u0D02\u0D03\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D3E\u0D43\u0D46\u0D48\u0D4A\u0D4D\u0D57\u0D57\u0D60\u0D61\u0D66\u0D6F\u0E01\u0E2E\u0E30\u0E3A\u0E40\u0E4E\u0E50\u0E59\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB9\u0EBB\u0EBD\u0EC0\u0EC4\u0EC6\u0EC6\u0EC8\u0ECD\u0ED0\u0ED9\u0F18\u0F19\u0F20\u0F29\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39\u0F3E\u0F47\u0F49\u0F69\u0F71\u0F84\u0F86\u0F8B\u0F90\u0F95\u0F97\u0F97\u0F99\u0FAD\u0FB1\u0FB7\u0FB9\u0FB9\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u20D0\u20DC\u20E1\u20E1\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3005\u3005\u3007\u3007\u3021\u302F\u3031\u3035\u3041\u3094\u3099\u309A\u309D\u309E\u30A1\u30FA\u30FC\u30FE\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3');$jb(Bre,RLe,d);$jb(Cre,RLe,yte(d));d=(null,++Use,new xte(4));ose(d,ULe);rte(d,95,95);rte(d,58,58);$jb(Bre,SLe,d);$jb(Cre,SLe,yte(d))}c=b?RD(Xjb(Bre,a),138):RD(Xjb(Cre,a),138);return c} +function zCc(a){Cgd(a,new Pfd(_fd(Wfd($fd(Xfd(Zfd(Yfd(new agd,sxe),'ELK Layered'),'Layer-based algorithm provided by the Eclipse Layout Kernel. Arranges as many edges as possible into one direction by placing nodes into subsequent layers. This implementation supports different routing styles (straight, orthogonal, splines); if orthogonal routing is selected, arbitrary port constraints are respected, thus enabling the layout of block diagrams such as actor-oriented models or circuit schematics. Furthermore, full layout of compound graphs with cross-hierarchy edges is supported when the respective option is activated on the top level.'),new CCc),sxe),ysb((aGd(),_Fd),cD(WC(T5,1),jwe,245,0,[YFd,ZFd,XFd,$Fd,VFd,UFd])))));Agd(a,sxe,xDe,iGd(QBc));Agd(a,sxe,yDe,iGd(RBc));Agd(a,sxe,Bze,iGd(SBc));Agd(a,sxe,zDe,iGd(TBc));Agd(a,sxe,aAe,iGd(VBc));Agd(a,sxe,ADe,iGd(WBc));Agd(a,sxe,BDe,iGd(ZBc));Agd(a,sxe,CDe,iGd(_Bc));Agd(a,sxe,DDe,iGd(aCc));Agd(a,sxe,EDe,iGd($Bc));Agd(a,sxe,_ze,iGd(bCc));Agd(a,sxe,FDe,iGd(dCc));Agd(a,sxe,GDe,iGd(fCc));Agd(a,sxe,HDe,iGd(YBc));Agd(a,sxe,wCe,iGd(PBc));Agd(a,sxe,yCe,iGd(UBc));Agd(a,sxe,xCe,iGd(XBc));Agd(a,sxe,zCe,iGd(cCc));Agd(a,sxe,$ze,sgb(0));Agd(a,sxe,ACe,iGd(KBc));Agd(a,sxe,BCe,iGd(LBc));Agd(a,sxe,CCe,iGd(MBc));Agd(a,sxe,JCe,iGd(vCc));Agd(a,sxe,KCe,iGd(nCc));Agd(a,sxe,LCe,iGd(oCc));Agd(a,sxe,MCe,iGd(rCc));Agd(a,sxe,NCe,iGd(pCc));Agd(a,sxe,OCe,iGd(qCc));Agd(a,sxe,PCe,iGd(xCc));Agd(a,sxe,QCe,iGd(wCc));Agd(a,sxe,RCe,iGd(tCc));Agd(a,sxe,SCe,iGd(sCc));Agd(a,sxe,TCe,iGd(uCc));Agd(a,sxe,pCe,iGd(iBc));Agd(a,sxe,qCe,iGd(jBc));Agd(a,sxe,tCe,iGd(DAc));Agd(a,sxe,uCe,iGd(EAc));Agd(a,sxe,mAe,iGd(jCc));Agd(a,sxe,nAe,iGd(lCc));Agd(a,sxe,oAe,iGd(iCc));Agd(a,sxe,pAe,iGd(hCc));Agd(a,sxe,qAe,kCc);Agd(a,sxe,Eze,rBc);Agd(a,sxe,kDe,zAc);Agd(a,sxe,IDe,0);Agd(a,sxe,bAe,sgb(1));Agd(a,sxe,Dze,Yze);Agd(a,sxe,JDe,iGd(pBc));Agd(a,sxe,eAe,iGd(BBc));Agd(a,sxe,KDe,iGd(GBc));Agd(a,sxe,LDe,iGd(qAc));Agd(a,sxe,MDe,iGd(Rzc));Agd(a,sxe,fDe,iGd(IAc));Agd(a,sxe,cAe,(Geb(),true));Agd(a,sxe,NDe,iGd(NAc));Agd(a,sxe,ODe,iGd(OAc));Agd(a,sxe,jAe,iGd(lBc));Agd(a,sxe,iAe,iGd(oBc));Agd(a,sxe,hAe,iGd(mBc));Agd(a,sxe,PDe,tAc);Agd(a,sxe,kAe,iGd(dBc));Agd(a,sxe,QDe,iGd(cBc));Agd(a,sxe,lAe,iGd(EBc));Agd(a,sxe,RDe,iGd(DBc));Agd(a,sxe,SDe,iGd(FBc));Agd(a,sxe,TDe,uBc);Agd(a,sxe,UDe,iGd(wBc));Agd(a,sxe,VDe,iGd(xBc));Agd(a,sxe,WDe,iGd(yBc));Agd(a,sxe,XDe,iGd(vBc));Agd(a,sxe,PBe,iGd(mCc));Agd(a,sxe,SBe,iGd($Ac));Agd(a,sxe,YBe,iGd(ZAc));Agd(a,sxe,OBe,iGd(gCc));Agd(a,sxe,TBe,iGd(UAc));Agd(a,sxe,RBe,iGd(pAc));Agd(a,sxe,_Be,iGd(oAc));Agd(a,sxe,aCe,iGd(eAc));Agd(a,sxe,hCe,iGd(fAc));Agd(a,sxe,iCe,iGd(hAc));Agd(a,sxe,jCe,iGd(gAc));Agd(a,sxe,cCe,iGd(nAc));Agd(a,sxe,KBe,iGd(aBc));Agd(a,sxe,LBe,iGd(bBc));Agd(a,sxe,JBe,iGd(QAc));Agd(a,sxe,kCe,iGd(kBc));Agd(a,sxe,nCe,iGd(fBc));Agd(a,sxe,IBe,iGd(GAc));Agd(a,sxe,oCe,iGd(hBc));Agd(a,sxe,rCe,iGd(BAc));Agd(a,sxe,sCe,iGd(CAc));Agd(a,sxe,YDe,iGd(dAc));Agd(a,sxe,mCe,iGd(eBc));Agd(a,sxe,ECe,iGd(Xzc));Agd(a,sxe,FCe,iGd(Wzc));Agd(a,sxe,DCe,iGd(Vzc));Agd(a,sxe,GCe,iGd(KAc));Agd(a,sxe,HCe,iGd(JAc));Agd(a,sxe,ICe,iGd(LAc));Agd(a,sxe,CAe,iGd(nBc));Agd(a,sxe,ZDe,iGd(RAc));Agd(a,sxe,Cze,iGd(FAc));Agd(a,sxe,$De,iGd(wAc));Agd(a,sxe,fAe,iGd(vAc));Agd(a,sxe,bCe,iGd(iAc));Agd(a,sxe,_De,iGd(CBc));Agd(a,sxe,aEe,iGd(Uzc));Agd(a,sxe,bEe,iGd(MAc));Agd(a,sxe,cEe,iGd(zBc));Agd(a,sxe,dEe,iGd(sBc));Agd(a,sxe,eEe,iGd(tBc));Agd(a,sxe,WBe,iGd(WAc));Agd(a,sxe,XBe,iGd(XAc));Agd(a,sxe,fEe,iGd(IBc));Agd(a,sxe,MBe,iGd(Szc));Agd(a,sxe,ZBe,iGd(YAc));Agd(a,sxe,UCe,iGd(xAc));Agd(a,sxe,VCe,iGd(uAc));Agd(a,sxe,gEe,iGd(_Ac));Agd(a,sxe,$Be,iGd(SAc));Agd(a,sxe,lCe,iGd(gBc));Agd(a,sxe,hEe,iGd(eCc));Agd(a,sxe,HBe,iGd(sAc));Agd(a,sxe,NBe,iGd(HBc));Agd(a,sxe,vCe,iGd(AAc));Agd(a,sxe,dCe,iGd(jAc));Agd(a,sxe,eCe,iGd(kAc));Agd(a,sxe,UBe,iGd(TAc));Agd(a,sxe,fCe,iGd(lAc));Agd(a,sxe,iEe,iGd(PAc));Agd(a,sxe,VBe,iGd(VAc));Agd(a,sxe,gCe,iGd(mAc));Agd(a,sxe,WCe,iGd(cAc));Agd(a,sxe,$Ce,iGd(_zc));Agd(a,sxe,_Ce,iGd(Zzc));Agd(a,sxe,aDe,iGd($zc));Agd(a,sxe,YCe,iGd(aAc));Agd(a,sxe,ZCe,iGd(Yzc));Agd(a,sxe,XCe,iGd(bAc));Agd(a,sxe,QBe,iGd(HAc))} +function yne(a){_Ad(a.a,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anySimpleType']));_Ad(a.b,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anyType',rKe,pKe]));_Ad(RD(QHd(xYd(a.b),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,GIe,':mixed']));_Ad(RD(QHd(xYd(a.b),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,cLe,eLe,GIe,':1',nLe,'lax']));_Ad(RD(QHd(xYd(a.b),2),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,WKe,cLe,eLe,GIe,':2',nLe,'lax']));_Ad(a.c,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'anyURI',bLe,ZKe]));_Ad(a.d,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'base64Binary',bLe,ZKe]));_Ad(a.e,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,hve,bLe,ZKe]));_Ad(a.f,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'boolean:Object',DKe,hve]));_Ad(a.g,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,dKe]));_Ad(a.i,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'byte:Object',DKe,dKe]));_Ad(a.j,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'date',bLe,ZKe]));_Ad(a.k,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'dateTime',bLe,ZKe]));_Ad(a.n,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'decimal',bLe,ZKe]));_Ad(a.o,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,fKe,bLe,ZKe]));_Ad(a.p,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'double:Object',DKe,fKe]));_Ad(a.q,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'duration',bLe,ZKe]));_Ad(a.s,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'ENTITIES',DKe,oLe,pLe,'1']));_Ad(a.r,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,oLe,$Ke,qLe]));_Ad(a.t,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,qLe,DKe,rLe]));_Ad(a.u,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,gKe,bLe,ZKe]));_Ad(a.v,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'float:Object',DKe,gKe]));_Ad(a.w,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gDay',bLe,ZKe]));_Ad(a.B,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gMonth',bLe,ZKe]));_Ad(a.A,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gMonthDay',bLe,ZKe]));_Ad(a.C,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gYear',bLe,ZKe]));_Ad(a.D,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'gYearMonth',bLe,ZKe]));_Ad(a.F,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'hexBinary',bLe,ZKe]));_Ad(a.G,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'ID',DKe,rLe]));_Ad(a.H,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'IDREF',DKe,rLe]));_Ad(a.J,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'IDREFS',DKe,sLe,pLe,'1']));_Ad(a.I,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,sLe,$Ke,'IDREF']));_Ad(a.K,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,hKe]));_Ad(a.M,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,tLe]));_Ad(a.L,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'int:Object',DKe,hKe]));_Ad(a.P,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'language',DKe,uLe,vLe,wLe]));_Ad(a.Q,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,iKe]));_Ad(a.R,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'long:Object',DKe,iKe]));_Ad(a.S,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'Name',DKe,uLe,vLe,xLe]));_Ad(a.T,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,rLe,DKe,'Name',vLe,yLe]));_Ad(a.U,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'negativeInteger',DKe,zLe,ALe,'-1']));_Ad(a.V,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,BLe,DKe,uLe,vLe,'\\c+']));_Ad(a.X,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'NMTOKENS',DKe,CLe,pLe,'1']));_Ad(a.W,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,CLe,$Ke,BLe]));_Ad(a.Y,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,DLe,DKe,tLe,ELe,'0']));_Ad(a.Z,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,zLe,DKe,tLe,ALe,'0']));_Ad(a.$,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,FLe,DKe,jve,bLe,'replace']));_Ad(a._,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'NOTATION',bLe,ZKe]));_Ad(a.ab,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'positiveInteger',DKe,DLe,ELe,'1']));_Ad(a.bb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'processingInstruction_._type',rKe,'empty']));_Ad(RD(QHd(xYd(a.bb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'data']));_Ad(RD(QHd(xYd(a.bb),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,CIe]));_Ad(a.cb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'QName',bLe,ZKe]));_Ad(a.db,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,jKe]));_Ad(a.eb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'short:Object',DKe,jKe]));_Ad(a.fb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'simpleAnyType',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':3',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),1),35),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':4',rKe,UKe]));_Ad(RD(QHd(xYd(a.fb),2),19),qKe,cD(WC(qJ,1),Nve,2,6,[GIe,':5',rKe,UKe]));_Ad(a.gb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,jve,bLe,'preserve']));_Ad(a.hb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'time',bLe,ZKe]));_Ad(a.ib,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,uLe,DKe,FLe,bLe,ZKe]));_Ad(a.jb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,GLe,ALe,'255',ELe,'0']));_Ad(a.kb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedByte:Object',DKe,GLe]));_Ad(a.lb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,HLe,ALe,'4294967295',ELe,'0']));_Ad(a.mb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedInt:Object',DKe,HLe]));_Ad(a.nb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedLong',DKe,DLe,ALe,ILe,ELe,'0']));_Ad(a.ob,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,JLe,ALe,'65535',ELe,'0']));_Ad(a.pb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'unsignedShort:Object',DKe,JLe]));_Ad(a.qb,qKe,cD(WC(qJ,1),Nve,2,6,[GIe,'',rKe,pKe]));_Ad(RD(QHd(xYd(a.qb),0),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,YKe,GIe,':mixed']));_Ad(RD(QHd(xYd(a.qb),1),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'xmlns:prefix']));_Ad(RD(QHd(xYd(a.qb),2),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,VKe,GIe,'xsi:schemaLocation']));_Ad(RD(QHd(xYd(a.qb),3),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,'cDATA',_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),4),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,'comment',_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),5),19),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,KLe,_Ke,aLe]));_Ad(RD(QHd(xYd(a.qb),6),35),qKe,cD(WC(qJ,1),Nve,2,6,[rKe,XKe,GIe,hIe,_Ke,aLe]))} +function TId(a){return lhb('_UI_EMFDiagnostic_marker',a)?'EMF Problem':lhb('_UI_CircularContainment_diagnostic',a)?'An object may not circularly contain itself':lhb(TIe,a)?'Wrong character.':lhb(UIe,a)?'Invalid reference number.':lhb(VIe,a)?'A character is required after \\.':lhb(WIe,a)?"'?' is not expected. '(?:' or '(?=' or '(?!' or '(?<' or '(?#' or '(?>'?":lhb(XIe,a)?"'(?<' or '(?<!' is expected.":lhb(YIe,a)?'A comment is not terminated.':lhb(ZIe,a)?"')' is expected.":lhb($Ie,a)?'Unexpected end of the pattern in a modifier group.':lhb(_Ie,a)?"':' is expected.":lhb(aJe,a)?'Unexpected end of the pattern in a conditional group.':lhb(bJe,a)?'A back reference or an anchor or a lookahead or a look-behind is expected in a conditional pattern.':lhb(cJe,a)?'There are more than three choices in a conditional group.':lhb(dJe,a)?'A character in U+0040-U+005f must follow \\c.':lhb(eJe,a)?"A '{' is required before a character category.":lhb(fJe,a)?"A property name is not closed by '}'.":lhb(gJe,a)?'Unexpected meta character.':lhb(hJe,a)?'Unknown property.':lhb(iJe,a)?"A POSIX character class must be closed by ':]'.":lhb(jJe,a)?'Unexpected end of the pattern in a character class.':lhb(kJe,a)?'Unknown name for a POSIX character class.':lhb('parser.cc.4',a)?"'-' is invalid here.":lhb(lJe,a)?"']' is expected.":lhb(mJe,a)?"'[' is invalid in a character class. Write '\\['.":lhb(nJe,a)?"']' is invalid in a character class. Write '\\]'.":lhb(oJe,a)?"'-' is an invalid character range. Write '\\-'.":lhb(pJe,a)?"'[' is expected.":lhb(qJe,a)?"')' or '-[' or '+[' or '&[' is expected.":lhb(rJe,a)?'The range end code point is less than the start code point.':lhb(sJe,a)?'Invalid Unicode hex notation.':lhb(tJe,a)?'Overflow in a hex notation.':lhb(uJe,a)?"'\\x{' must be closed by '}'.":lhb(vJe,a)?'Invalid Unicode code point.':lhb(wJe,a)?'An anchor must not be here.':lhb(xJe,a)?'This expression is not supported in the current option setting.':lhb(yJe,a)?'Invalid quantifier. A digit is expected.':lhb(zJe,a)?"Invalid quantifier. Invalid quantity or a '}' is missing.":lhb(AJe,a)?"Invalid quantifier. A digit or '}' is expected.":lhb(BJe,a)?'Invalid quantifier. A min quantity must be <= a max quantity.':lhb(CJe,a)?'Invalid quantifier. A quantity value overflow.':lhb('_UI_PackageRegistry_extensionpoint',a)?'Ecore Package Registry for Generated Packages':lhb('_UI_DynamicPackageRegistry_extensionpoint',a)?'Ecore Package Registry for Dynamic Packages':lhb('_UI_FactoryRegistry_extensionpoint',a)?'Ecore Factory Override Registry':lhb('_UI_URIExtensionParserRegistry_extensionpoint',a)?'URI Extension Parser Registry':lhb('_UI_URIProtocolParserRegistry_extensionpoint',a)?'URI Protocol Parser Registry':lhb('_UI_URIContentParserRegistry_extensionpoint',a)?'URI Content Parser Registry':lhb('_UI_ContentHandlerRegistry_extensionpoint',a)?'Content Handler Registry':lhb('_UI_URIMappingRegistry_extensionpoint',a)?'URI Converter Mapping Registry':lhb('_UI_PackageRegistryImplementation_extensionpoint',a)?'Ecore Package Registry Implementation':lhb('_UI_ValidationDelegateRegistry_extensionpoint',a)?'Validation Delegate Registry':lhb('_UI_SettingDelegateRegistry_extensionpoint',a)?'Feature Setting Delegate Factory Registry':lhb('_UI_InvocationDelegateRegistry_extensionpoint',a)?'Operation Invocation Delegate Factory Registry':lhb('_UI_EClassInterfaceNotAbstract_diagnostic',a)?'A class that is an interface must also be abstract':lhb('_UI_EClassNoCircularSuperTypes_diagnostic',a)?'A class may not be a super type of itself':lhb('_UI_EClassNotWellFormedMapEntryNoInstanceClassName_diagnostic',a)?"A class that inherits from a map entry class must have instance class name 'java.util.Map$Entry'":lhb('_UI_EReferenceOppositeOfOppositeInconsistent_diagnostic',a)?'The opposite of the opposite may not be a reference different from this one':lhb('_UI_EReferenceOppositeNotFeatureOfType_diagnostic',a)?"The opposite must be a feature of the reference's type":lhb('_UI_EReferenceTransientOppositeNotTransient_diagnostic',a)?'The opposite of a transient reference must be transient if it is proxy resolving':lhb('_UI_EReferenceOppositeBothContainment_diagnostic',a)?'The opposite of a containment reference must not be a containment reference':lhb('_UI_EReferenceConsistentUnique_diagnostic',a)?'A containment or bidirectional reference must be unique if its upper bound is different from 1':lhb('_UI_ETypedElementNoType_diagnostic',a)?'The typed element must have a type':lhb('_UI_EAttributeNoDataType_diagnostic',a)?'The generic attribute type must not refer to a class':lhb('_UI_EReferenceNoClass_diagnostic',a)?'The generic reference type must not refer to a data type':lhb('_UI_EGenericTypeNoTypeParameterAndClassifier_diagnostic',a)?"A generic type can't refer to both a type parameter and a classifier":lhb('_UI_EGenericTypeNoClass_diagnostic',a)?'A generic super type must refer to a class':lhb('_UI_EGenericTypeNoTypeParameterOrClassifier_diagnostic',a)?'A generic type in this context must refer to a classifier or a type parameter':lhb('_UI_EGenericTypeBoundsOnlyForTypeArgument_diagnostic',a)?'A generic type may have bounds only when used as a type argument':lhb('_UI_EGenericTypeNoUpperAndLowerBound_diagnostic',a)?'A generic type must not have both a lower and an upper bound':lhb('_UI_EGenericTypeNoTypeParameterOrClassifierAndBound_diagnostic',a)?'A generic type with bounds must not also refer to a type parameter or classifier':lhb('_UI_EGenericTypeNoArguments_diagnostic',a)?'A generic type may have arguments only if it refers to a classifier':lhb('_UI_EGenericTypeOutOfScopeTypeParameter_diagnostic',a)?'A generic type may only refer to a type parameter that is in scope':a} +function $Bd(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(a.r)return;a.r=true;PAd(a,'graph');CBd(a,'graph');DBd(a,$He);eBd(a.o,'T');WGd(zYd(a.a),a.p);WGd(zYd(a.f),a.a);WGd(zYd(a.n),a.f);WGd(zYd(a.g),a.n);WGd(zYd(a.c),a.n);WGd(zYd(a.i),a.c);WGd(zYd(a.j),a.c);WGd(zYd(a.d),a.f);WGd(zYd(a.e),a.a);vBd(a.p,U5,kze,true,true,false);o=bBd(a.p,a.p,'setProperty');p=fBd(o);j=lBd(a.o);k=(c=(d=new s2d,d),c);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);l=mBd(p);n2d(k,l);dBd(o,j,_He);j=mBd(p);dBd(o,j,aIe);o=bBd(a.p,null,'getProperty');p=fBd(o);j=lBd(a.o);k=mBd(p);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);dBd(o,j,_He);j=mBd(p);n=XVd(o,j,null);!!n&&n.oj();o=bBd(a.p,a.wb.e,'hasProperty');j=lBd(a.o);k=(e=(f=new s2d,f),e);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);dBd(o,j,_He);o=bBd(a.p,a.p,'copyProperties');cBd(o,a.p,bIe);o=bBd(a.p,null,'getAllProperties');j=lBd(a.wb.P);k=lBd(a.o);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);l=(g=(h=new s2d,h),g);WGd((!k.d&&(k.d=new XZd(o7,k,1)),k.d),l);k=lBd(a.wb.M);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);m=XVd(o,j,null);!!m&&m.oj();vBd(a.a,C4,xHe,true,false,true);zBd(RD(QHd(xYd(a.a),0),19),a.k,null,cIe,0,-1,C4,false,false,true,true,false,false,false);vBd(a.f,H4,zHe,true,false,true);zBd(RD(QHd(xYd(a.f),0),19),a.g,RD(QHd(xYd(a.g),0),19),'labels',0,-1,H4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.f),1),35),a.wb._,dIe,null,0,1,H4,false,false,true,false,true,false);vBd(a.n,L4,'ElkShape',true,false,true);tBd(RD(QHd(xYd(a.n),0),35),a.wb.t,eIe,zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),1),35),a.wb.t,fIe,zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),2),35),a.wb.t,'x',zxe,1,1,L4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.n),3),35),a.wb.t,'y',zxe,1,1,L4,false,false,true,false,true,false);o=bBd(a.n,null,'setDimensions');cBd(o,a.wb.t,fIe);cBd(o,a.wb.t,eIe);o=bBd(a.n,null,'setLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.g,I4,FHe,false,false,true);zBd(RD(QHd(xYd(a.g),0),19),a.f,RD(QHd(xYd(a.f),0),19),gIe,0,1,I4,false,false,true,false,false,false,false);tBd(RD(QHd(xYd(a.g),1),35),a.wb._,hIe,'',0,1,I4,false,false,true,false,true,false);vBd(a.c,E4,AHe,true,false,true);zBd(RD(QHd(xYd(a.c),0),19),a.d,RD(QHd(xYd(a.d),1),19),'outgoingEdges',0,-1,E4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.c),1),19),a.d,RD(QHd(xYd(a.d),2),19),'incomingEdges',0,-1,E4,false,false,true,false,true,false,false);vBd(a.i,J4,GHe,false,false,true);zBd(RD(QHd(xYd(a.i),0),19),a.j,RD(QHd(xYd(a.j),0),19),'ports',0,-1,J4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.i),1),19),a.i,RD(QHd(xYd(a.i),2),19),iIe,0,-1,J4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.i),2),19),a.i,RD(QHd(xYd(a.i),1),19),gIe,0,1,J4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.i),3),19),a.d,RD(QHd(xYd(a.d),0),19),'containedEdges',0,-1,J4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.i),4),35),a.wb.e,jIe,null,0,1,J4,true,true,false,false,true,true);vBd(a.j,K4,HHe,false,false,true);zBd(RD(QHd(xYd(a.j),0),19),a.i,RD(QHd(xYd(a.i),0),19),gIe,0,1,K4,false,false,true,false,false,false,false);vBd(a.d,G4,BHe,false,false,true);zBd(RD(QHd(xYd(a.d),0),19),a.i,RD(QHd(xYd(a.i),3),19),'containingNode',0,1,G4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.d),1),19),a.c,RD(QHd(xYd(a.c),0),19),kIe,0,-1,G4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.d),2),19),a.c,RD(QHd(xYd(a.c),1),19),lIe,0,-1,G4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.d),3),19),a.e,RD(QHd(xYd(a.e),5),19),mIe,0,-1,G4,false,false,true,true,false,false,false);tBd(RD(QHd(xYd(a.d),4),35),a.wb.e,'hyperedge',null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),5),35),a.wb.e,jIe,null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),6),35),a.wb.e,'selfloop',null,0,1,G4,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.d),7),35),a.wb.e,'connected',null,0,1,G4,true,true,false,false,true,true);vBd(a.b,D4,yHe,false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.wb.t,'x',zxe,1,1,D4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.b),1),35),a.wb.t,'y',zxe,1,1,D4,false,false,true,false,true,false);o=bBd(a.b,null,'set');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.e,F4,CHe,false,false,true);tBd(RD(QHd(xYd(a.e),0),35),a.wb.t,'startX',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),1),35),a.wb.t,'startY',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),2),35),a.wb.t,'endX',null,0,1,F4,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.e),3),35),a.wb.t,'endY',null,0,1,F4,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.e),4),19),a.b,null,nIe,0,-1,F4,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.e),5),19),a.d,RD(QHd(xYd(a.d),3),19),gIe,0,1,F4,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.e),6),19),a.c,null,oIe,0,1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),7),19),a.c,null,pIe,0,1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),8),19),a.e,RD(QHd(xYd(a.e),9),19),qIe,0,-1,F4,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.e),9),19),a.e,RD(QHd(xYd(a.e),8),19),rIe,0,-1,F4,false,false,true,false,true,false,false);tBd(RD(QHd(xYd(a.e),10),35),a.wb._,dIe,null,0,1,F4,false,false,true,false,true,false);o=bBd(a.e,null,'setStartLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');o=bBd(a.e,null,'setEndLocation');cBd(o,a.wb.t,'x');cBd(o,a.wb.t,'y');vBd(a.k,UK,'ElkPropertyToValueMapEntry',false,false,false);j=lBd(a.o);k=(i=(b=new s2d,b),i);WGd((!j.d&&(j.d=new XZd(o7,j,1)),j.d),k);uBd(RD(QHd(xYd(a.k),0),35),j,'key',UK,false,false,true,false);tBd(RD(QHd(xYd(a.k),1),35),a.s,aIe,null,0,1,UK,false,false,true,false,true,false);xBd(a.o,V5,'IProperty',true);xBd(a.s,jJ,'PropertyValue',true);pBd(a,$He)} +function Kqe(){Kqe=geb;Jqe=$C(gE,YHe,28,txe,15,1);Jqe[9]=35;Jqe[10]=19;Jqe[13]=19;Jqe[32]=51;Jqe[33]=49;Jqe[34]=33;Knb(Jqe,35,38,49);Jqe[38]=1;Knb(Jqe,39,45,49);Knb(Jqe,45,47,-71);Jqe[47]=49;Knb(Jqe,48,58,-71);Jqe[58]=61;Jqe[59]=49;Jqe[60]=1;Jqe[61]=49;Jqe[62]=33;Knb(Jqe,63,65,49);Knb(Jqe,65,91,-3);Knb(Jqe,91,93,33);Jqe[93]=1;Jqe[94]=33;Jqe[95]=-3;Jqe[96]=33;Knb(Jqe,97,123,-3);Knb(Jqe,123,183,33);Jqe[183]=-87;Knb(Jqe,184,192,33);Knb(Jqe,192,215,-19);Jqe[215]=33;Knb(Jqe,216,247,-19);Jqe[247]=33;Knb(Jqe,248,306,-19);Knb(Jqe,306,308,33);Knb(Jqe,308,319,-19);Knb(Jqe,319,321,33);Knb(Jqe,321,329,-19);Jqe[329]=33;Knb(Jqe,330,383,-19);Jqe[383]=33;Knb(Jqe,384,452,-19);Knb(Jqe,452,461,33);Knb(Jqe,461,497,-19);Knb(Jqe,497,500,33);Knb(Jqe,500,502,-19);Knb(Jqe,502,506,33);Knb(Jqe,506,536,-19);Knb(Jqe,536,592,33);Knb(Jqe,592,681,-19);Knb(Jqe,681,699,33);Knb(Jqe,699,706,-19);Knb(Jqe,706,720,33);Knb(Jqe,720,722,-87);Knb(Jqe,722,768,33);Knb(Jqe,768,838,-87);Knb(Jqe,838,864,33);Knb(Jqe,864,866,-87);Knb(Jqe,866,902,33);Jqe[902]=-19;Jqe[903]=-87;Knb(Jqe,904,907,-19);Jqe[907]=33;Jqe[908]=-19;Jqe[909]=33;Knb(Jqe,910,930,-19);Jqe[930]=33;Knb(Jqe,931,975,-19);Jqe[975]=33;Knb(Jqe,976,983,-19);Knb(Jqe,983,986,33);Jqe[986]=-19;Jqe[987]=33;Jqe[988]=-19;Jqe[989]=33;Jqe[990]=-19;Jqe[991]=33;Jqe[992]=-19;Jqe[993]=33;Knb(Jqe,994,1012,-19);Knb(Jqe,1012,1025,33);Knb(Jqe,1025,1037,-19);Jqe[1037]=33;Knb(Jqe,1038,1104,-19);Jqe[1104]=33;Knb(Jqe,1105,1117,-19);Jqe[1117]=33;Knb(Jqe,1118,1154,-19);Jqe[1154]=33;Knb(Jqe,1155,1159,-87);Knb(Jqe,1159,1168,33);Knb(Jqe,1168,1221,-19);Knb(Jqe,1221,1223,33);Knb(Jqe,1223,1225,-19);Knb(Jqe,1225,1227,33);Knb(Jqe,1227,1229,-19);Knb(Jqe,1229,1232,33);Knb(Jqe,1232,1260,-19);Knb(Jqe,1260,1262,33);Knb(Jqe,1262,1270,-19);Knb(Jqe,1270,1272,33);Knb(Jqe,1272,1274,-19);Knb(Jqe,1274,1329,33);Knb(Jqe,1329,1367,-19);Knb(Jqe,1367,1369,33);Jqe[1369]=-19;Knb(Jqe,1370,1377,33);Knb(Jqe,1377,1415,-19);Knb(Jqe,1415,1425,33);Knb(Jqe,1425,1442,-87);Jqe[1442]=33;Knb(Jqe,1443,1466,-87);Jqe[1466]=33;Knb(Jqe,1467,1470,-87);Jqe[1470]=33;Jqe[1471]=-87;Jqe[1472]=33;Knb(Jqe,1473,1475,-87);Jqe[1475]=33;Jqe[1476]=-87;Knb(Jqe,1477,1488,33);Knb(Jqe,1488,1515,-19);Knb(Jqe,1515,1520,33);Knb(Jqe,1520,1523,-19);Knb(Jqe,1523,1569,33);Knb(Jqe,1569,1595,-19);Knb(Jqe,1595,1600,33);Jqe[1600]=-87;Knb(Jqe,1601,1611,-19);Knb(Jqe,1611,1619,-87);Knb(Jqe,1619,1632,33);Knb(Jqe,1632,1642,-87);Knb(Jqe,1642,1648,33);Jqe[1648]=-87;Knb(Jqe,1649,1720,-19);Knb(Jqe,1720,1722,33);Knb(Jqe,1722,1727,-19);Jqe[1727]=33;Knb(Jqe,1728,1743,-19);Jqe[1743]=33;Knb(Jqe,1744,1748,-19);Jqe[1748]=33;Jqe[1749]=-19;Knb(Jqe,1750,1765,-87);Knb(Jqe,1765,1767,-19);Knb(Jqe,1767,1769,-87);Jqe[1769]=33;Knb(Jqe,1770,1774,-87);Knb(Jqe,1774,1776,33);Knb(Jqe,1776,1786,-87);Knb(Jqe,1786,2305,33);Knb(Jqe,2305,2308,-87);Jqe[2308]=33;Knb(Jqe,2309,2362,-19);Knb(Jqe,2362,2364,33);Jqe[2364]=-87;Jqe[2365]=-19;Knb(Jqe,2366,2382,-87);Knb(Jqe,2382,2385,33);Knb(Jqe,2385,2389,-87);Knb(Jqe,2389,2392,33);Knb(Jqe,2392,2402,-19);Knb(Jqe,2402,2404,-87);Knb(Jqe,2404,2406,33);Knb(Jqe,2406,2416,-87);Knb(Jqe,2416,2433,33);Knb(Jqe,2433,2436,-87);Jqe[2436]=33;Knb(Jqe,2437,2445,-19);Knb(Jqe,2445,2447,33);Knb(Jqe,2447,2449,-19);Knb(Jqe,2449,2451,33);Knb(Jqe,2451,2473,-19);Jqe[2473]=33;Knb(Jqe,2474,2481,-19);Jqe[2481]=33;Jqe[2482]=-19;Knb(Jqe,2483,2486,33);Knb(Jqe,2486,2490,-19);Knb(Jqe,2490,2492,33);Jqe[2492]=-87;Jqe[2493]=33;Knb(Jqe,2494,2501,-87);Knb(Jqe,2501,2503,33);Knb(Jqe,2503,2505,-87);Knb(Jqe,2505,2507,33);Knb(Jqe,2507,2510,-87);Knb(Jqe,2510,2519,33);Jqe[2519]=-87;Knb(Jqe,2520,2524,33);Knb(Jqe,2524,2526,-19);Jqe[2526]=33;Knb(Jqe,2527,2530,-19);Knb(Jqe,2530,2532,-87);Knb(Jqe,2532,2534,33);Knb(Jqe,2534,2544,-87);Knb(Jqe,2544,2546,-19);Knb(Jqe,2546,2562,33);Jqe[2562]=-87;Knb(Jqe,2563,2565,33);Knb(Jqe,2565,2571,-19);Knb(Jqe,2571,2575,33);Knb(Jqe,2575,2577,-19);Knb(Jqe,2577,2579,33);Knb(Jqe,2579,2601,-19);Jqe[2601]=33;Knb(Jqe,2602,2609,-19);Jqe[2609]=33;Knb(Jqe,2610,2612,-19);Jqe[2612]=33;Knb(Jqe,2613,2615,-19);Jqe[2615]=33;Knb(Jqe,2616,2618,-19);Knb(Jqe,2618,2620,33);Jqe[2620]=-87;Jqe[2621]=33;Knb(Jqe,2622,2627,-87);Knb(Jqe,2627,2631,33);Knb(Jqe,2631,2633,-87);Knb(Jqe,2633,2635,33);Knb(Jqe,2635,2638,-87);Knb(Jqe,2638,2649,33);Knb(Jqe,2649,2653,-19);Jqe[2653]=33;Jqe[2654]=-19;Knb(Jqe,2655,2662,33);Knb(Jqe,2662,2674,-87);Knb(Jqe,2674,2677,-19);Knb(Jqe,2677,2689,33);Knb(Jqe,2689,2692,-87);Jqe[2692]=33;Knb(Jqe,2693,2700,-19);Jqe[2700]=33;Jqe[2701]=-19;Jqe[2702]=33;Knb(Jqe,2703,2706,-19);Jqe[2706]=33;Knb(Jqe,2707,2729,-19);Jqe[2729]=33;Knb(Jqe,2730,2737,-19);Jqe[2737]=33;Knb(Jqe,2738,2740,-19);Jqe[2740]=33;Knb(Jqe,2741,2746,-19);Knb(Jqe,2746,2748,33);Jqe[2748]=-87;Jqe[2749]=-19;Knb(Jqe,2750,2758,-87);Jqe[2758]=33;Knb(Jqe,2759,2762,-87);Jqe[2762]=33;Knb(Jqe,2763,2766,-87);Knb(Jqe,2766,2784,33);Jqe[2784]=-19;Knb(Jqe,2785,2790,33);Knb(Jqe,2790,2800,-87);Knb(Jqe,2800,2817,33);Knb(Jqe,2817,2820,-87);Jqe[2820]=33;Knb(Jqe,2821,2829,-19);Knb(Jqe,2829,2831,33);Knb(Jqe,2831,2833,-19);Knb(Jqe,2833,2835,33);Knb(Jqe,2835,2857,-19);Jqe[2857]=33;Knb(Jqe,2858,2865,-19);Jqe[2865]=33;Knb(Jqe,2866,2868,-19);Knb(Jqe,2868,2870,33);Knb(Jqe,2870,2874,-19);Knb(Jqe,2874,2876,33);Jqe[2876]=-87;Jqe[2877]=-19;Knb(Jqe,2878,2884,-87);Knb(Jqe,2884,2887,33);Knb(Jqe,2887,2889,-87);Knb(Jqe,2889,2891,33);Knb(Jqe,2891,2894,-87);Knb(Jqe,2894,2902,33);Knb(Jqe,2902,2904,-87);Knb(Jqe,2904,2908,33);Knb(Jqe,2908,2910,-19);Jqe[2910]=33;Knb(Jqe,2911,2914,-19);Knb(Jqe,2914,2918,33);Knb(Jqe,2918,2928,-87);Knb(Jqe,2928,2946,33);Knb(Jqe,2946,2948,-87);Jqe[2948]=33;Knb(Jqe,2949,2955,-19);Knb(Jqe,2955,2958,33);Knb(Jqe,2958,2961,-19);Jqe[2961]=33;Knb(Jqe,2962,2966,-19);Knb(Jqe,2966,2969,33);Knb(Jqe,2969,2971,-19);Jqe[2971]=33;Jqe[2972]=-19;Jqe[2973]=33;Knb(Jqe,2974,2976,-19);Knb(Jqe,2976,2979,33);Knb(Jqe,2979,2981,-19);Knb(Jqe,2981,2984,33);Knb(Jqe,2984,2987,-19);Knb(Jqe,2987,2990,33);Knb(Jqe,2990,2998,-19);Jqe[2998]=33;Knb(Jqe,2999,3002,-19);Knb(Jqe,3002,3006,33);Knb(Jqe,3006,3011,-87);Knb(Jqe,3011,3014,33);Knb(Jqe,3014,3017,-87);Jqe[3017]=33;Knb(Jqe,3018,3022,-87);Knb(Jqe,3022,3031,33);Jqe[3031]=-87;Knb(Jqe,3032,3047,33);Knb(Jqe,3047,3056,-87);Knb(Jqe,3056,3073,33);Knb(Jqe,3073,3076,-87);Jqe[3076]=33;Knb(Jqe,3077,3085,-19);Jqe[3085]=33;Knb(Jqe,3086,3089,-19);Jqe[3089]=33;Knb(Jqe,3090,3113,-19);Jqe[3113]=33;Knb(Jqe,3114,3124,-19);Jqe[3124]=33;Knb(Jqe,3125,3130,-19);Knb(Jqe,3130,3134,33);Knb(Jqe,3134,3141,-87);Jqe[3141]=33;Knb(Jqe,3142,3145,-87);Jqe[3145]=33;Knb(Jqe,3146,3150,-87);Knb(Jqe,3150,3157,33);Knb(Jqe,3157,3159,-87);Knb(Jqe,3159,3168,33);Knb(Jqe,3168,3170,-19);Knb(Jqe,3170,3174,33);Knb(Jqe,3174,3184,-87);Knb(Jqe,3184,3202,33);Knb(Jqe,3202,3204,-87);Jqe[3204]=33;Knb(Jqe,3205,3213,-19);Jqe[3213]=33;Knb(Jqe,3214,3217,-19);Jqe[3217]=33;Knb(Jqe,3218,3241,-19);Jqe[3241]=33;Knb(Jqe,3242,3252,-19);Jqe[3252]=33;Knb(Jqe,3253,3258,-19);Knb(Jqe,3258,3262,33);Knb(Jqe,3262,3269,-87);Jqe[3269]=33;Knb(Jqe,3270,3273,-87);Jqe[3273]=33;Knb(Jqe,3274,3278,-87);Knb(Jqe,3278,3285,33);Knb(Jqe,3285,3287,-87);Knb(Jqe,3287,3294,33);Jqe[3294]=-19;Jqe[3295]=33;Knb(Jqe,3296,3298,-19);Knb(Jqe,3298,3302,33);Knb(Jqe,3302,3312,-87);Knb(Jqe,3312,3330,33);Knb(Jqe,3330,3332,-87);Jqe[3332]=33;Knb(Jqe,3333,3341,-19);Jqe[3341]=33;Knb(Jqe,3342,3345,-19);Jqe[3345]=33;Knb(Jqe,3346,3369,-19);Jqe[3369]=33;Knb(Jqe,3370,3386,-19);Knb(Jqe,3386,3390,33);Knb(Jqe,3390,3396,-87);Knb(Jqe,3396,3398,33);Knb(Jqe,3398,3401,-87);Jqe[3401]=33;Knb(Jqe,3402,3406,-87);Knb(Jqe,3406,3415,33);Jqe[3415]=-87;Knb(Jqe,3416,3424,33);Knb(Jqe,3424,3426,-19);Knb(Jqe,3426,3430,33);Knb(Jqe,3430,3440,-87);Knb(Jqe,3440,3585,33);Knb(Jqe,3585,3631,-19);Jqe[3631]=33;Jqe[3632]=-19;Jqe[3633]=-87;Knb(Jqe,3634,3636,-19);Knb(Jqe,3636,3643,-87);Knb(Jqe,3643,3648,33);Knb(Jqe,3648,3654,-19);Knb(Jqe,3654,3663,-87);Jqe[3663]=33;Knb(Jqe,3664,3674,-87);Knb(Jqe,3674,3713,33);Knb(Jqe,3713,3715,-19);Jqe[3715]=33;Jqe[3716]=-19;Knb(Jqe,3717,3719,33);Knb(Jqe,3719,3721,-19);Jqe[3721]=33;Jqe[3722]=-19;Knb(Jqe,3723,3725,33);Jqe[3725]=-19;Knb(Jqe,3726,3732,33);Knb(Jqe,3732,3736,-19);Jqe[3736]=33;Knb(Jqe,3737,3744,-19);Jqe[3744]=33;Knb(Jqe,3745,3748,-19);Jqe[3748]=33;Jqe[3749]=-19;Jqe[3750]=33;Jqe[3751]=-19;Knb(Jqe,3752,3754,33);Knb(Jqe,3754,3756,-19);Jqe[3756]=33;Knb(Jqe,3757,3759,-19);Jqe[3759]=33;Jqe[3760]=-19;Jqe[3761]=-87;Knb(Jqe,3762,3764,-19);Knb(Jqe,3764,3770,-87);Jqe[3770]=33;Knb(Jqe,3771,3773,-87);Jqe[3773]=-19;Knb(Jqe,3774,3776,33);Knb(Jqe,3776,3781,-19);Jqe[3781]=33;Jqe[3782]=-87;Jqe[3783]=33;Knb(Jqe,3784,3790,-87);Knb(Jqe,3790,3792,33);Knb(Jqe,3792,3802,-87);Knb(Jqe,3802,3864,33);Knb(Jqe,3864,3866,-87);Knb(Jqe,3866,3872,33);Knb(Jqe,3872,3882,-87);Knb(Jqe,3882,3893,33);Jqe[3893]=-87;Jqe[3894]=33;Jqe[3895]=-87;Jqe[3896]=33;Jqe[3897]=-87;Knb(Jqe,3898,3902,33);Knb(Jqe,3902,3904,-87);Knb(Jqe,3904,3912,-19);Jqe[3912]=33;Knb(Jqe,3913,3946,-19);Knb(Jqe,3946,3953,33);Knb(Jqe,3953,3973,-87);Jqe[3973]=33;Knb(Jqe,3974,3980,-87);Knb(Jqe,3980,3984,33);Knb(Jqe,3984,3990,-87);Jqe[3990]=33;Jqe[3991]=-87;Jqe[3992]=33;Knb(Jqe,3993,4014,-87);Knb(Jqe,4014,4017,33);Knb(Jqe,4017,4024,-87);Jqe[4024]=33;Jqe[4025]=-87;Knb(Jqe,4026,4256,33);Knb(Jqe,4256,4294,-19);Knb(Jqe,4294,4304,33);Knb(Jqe,4304,4343,-19);Knb(Jqe,4343,4352,33);Jqe[4352]=-19;Jqe[4353]=33;Knb(Jqe,4354,4356,-19);Jqe[4356]=33;Knb(Jqe,4357,4360,-19);Jqe[4360]=33;Jqe[4361]=-19;Jqe[4362]=33;Knb(Jqe,4363,4365,-19);Jqe[4365]=33;Knb(Jqe,4366,4371,-19);Knb(Jqe,4371,4412,33);Jqe[4412]=-19;Jqe[4413]=33;Jqe[4414]=-19;Jqe[4415]=33;Jqe[4416]=-19;Knb(Jqe,4417,4428,33);Jqe[4428]=-19;Jqe[4429]=33;Jqe[4430]=-19;Jqe[4431]=33;Jqe[4432]=-19;Knb(Jqe,4433,4436,33);Knb(Jqe,4436,4438,-19);Knb(Jqe,4438,4441,33);Jqe[4441]=-19;Knb(Jqe,4442,4447,33);Knb(Jqe,4447,4450,-19);Jqe[4450]=33;Jqe[4451]=-19;Jqe[4452]=33;Jqe[4453]=-19;Jqe[4454]=33;Jqe[4455]=-19;Jqe[4456]=33;Jqe[4457]=-19;Knb(Jqe,4458,4461,33);Knb(Jqe,4461,4463,-19);Knb(Jqe,4463,4466,33);Knb(Jqe,4466,4468,-19);Jqe[4468]=33;Jqe[4469]=-19;Knb(Jqe,4470,4510,33);Jqe[4510]=-19;Knb(Jqe,4511,4520,33);Jqe[4520]=-19;Knb(Jqe,4521,4523,33);Jqe[4523]=-19;Knb(Jqe,4524,4526,33);Knb(Jqe,4526,4528,-19);Knb(Jqe,4528,4535,33);Knb(Jqe,4535,4537,-19);Jqe[4537]=33;Jqe[4538]=-19;Jqe[4539]=33;Knb(Jqe,4540,4547,-19);Knb(Jqe,4547,4587,33);Jqe[4587]=-19;Knb(Jqe,4588,4592,33);Jqe[4592]=-19;Knb(Jqe,4593,4601,33);Jqe[4601]=-19;Knb(Jqe,4602,7680,33);Knb(Jqe,7680,7836,-19);Knb(Jqe,7836,7840,33);Knb(Jqe,7840,7930,-19);Knb(Jqe,7930,7936,33);Knb(Jqe,7936,7958,-19);Knb(Jqe,7958,7960,33);Knb(Jqe,7960,7966,-19);Knb(Jqe,7966,7968,33);Knb(Jqe,7968,8006,-19);Knb(Jqe,8006,8008,33);Knb(Jqe,8008,8014,-19);Knb(Jqe,8014,8016,33);Knb(Jqe,8016,8024,-19);Jqe[8024]=33;Jqe[8025]=-19;Jqe[8026]=33;Jqe[8027]=-19;Jqe[8028]=33;Jqe[8029]=-19;Jqe[8030]=33;Knb(Jqe,8031,8062,-19);Knb(Jqe,8062,8064,33);Knb(Jqe,8064,8117,-19);Jqe[8117]=33;Knb(Jqe,8118,8125,-19);Jqe[8125]=33;Jqe[8126]=-19;Knb(Jqe,8127,8130,33);Knb(Jqe,8130,8133,-19);Jqe[8133]=33;Knb(Jqe,8134,8141,-19);Knb(Jqe,8141,8144,33);Knb(Jqe,8144,8148,-19);Knb(Jqe,8148,8150,33);Knb(Jqe,8150,8156,-19);Knb(Jqe,8156,8160,33);Knb(Jqe,8160,8173,-19);Knb(Jqe,8173,8178,33);Knb(Jqe,8178,8181,-19);Jqe[8181]=33;Knb(Jqe,8182,8189,-19);Knb(Jqe,8189,8400,33);Knb(Jqe,8400,8413,-87);Knb(Jqe,8413,8417,33);Jqe[8417]=-87;Knb(Jqe,8418,8486,33);Jqe[8486]=-19;Knb(Jqe,8487,8490,33);Knb(Jqe,8490,8492,-19);Knb(Jqe,8492,8494,33);Jqe[8494]=-19;Knb(Jqe,8495,8576,33);Knb(Jqe,8576,8579,-19);Knb(Jqe,8579,12293,33);Jqe[12293]=-87;Jqe[12294]=33;Jqe[12295]=-19;Knb(Jqe,12296,12321,33);Knb(Jqe,12321,12330,-19);Knb(Jqe,12330,12336,-87);Jqe[12336]=33;Knb(Jqe,12337,12342,-87);Knb(Jqe,12342,12353,33);Knb(Jqe,12353,12437,-19);Knb(Jqe,12437,12441,33);Knb(Jqe,12441,12443,-87);Knb(Jqe,12443,12445,33);Knb(Jqe,12445,12447,-87);Knb(Jqe,12447,12449,33);Knb(Jqe,12449,12539,-19);Jqe[12539]=33;Knb(Jqe,12540,12543,-87);Knb(Jqe,12543,12549,33);Knb(Jqe,12549,12589,-19);Knb(Jqe,12589,19968,33);Knb(Jqe,19968,40870,-19);Knb(Jqe,40870,44032,33);Knb(Jqe,44032,55204,-19);Knb(Jqe,55204,uxe,33);Knb(Jqe,57344,65534,33)} +function Zae(a){var b,c,d,e,f,g,h;if(a.hb)return;a.hb=true;PAd(a,'ecore');CBd(a,'ecore');DBd(a,AKe);eBd(a.fb,'E');eBd(a.L,'T');eBd(a.P,'K');eBd(a.P,'V');eBd(a.cb,'E');WGd(zYd(a.b),a.bb);WGd(zYd(a.a),a.Q);WGd(zYd(a.o),a.p);WGd(zYd(a.p),a.R);WGd(zYd(a.q),a.p);WGd(zYd(a.v),a.q);WGd(zYd(a.w),a.R);WGd(zYd(a.B),a.Q);WGd(zYd(a.R),a.Q);WGd(zYd(a.T),a.eb);WGd(zYd(a.U),a.R);WGd(zYd(a.V),a.eb);WGd(zYd(a.W),a.bb);WGd(zYd(a.bb),a.eb);WGd(zYd(a.eb),a.R);WGd(zYd(a.db),a.R);vBd(a.b,g7,RJe,false,false,true);tBd(RD(QHd(xYd(a.b),0),35),a.e,'iD',null,0,1,g7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.b),1),19),a.q,null,'eAttributeType',1,1,g7,true,true,false,false,true,false,true);vBd(a.a,f7,OJe,false,false,true);tBd(RD(QHd(xYd(a.a),0),35),a._,bIe,null,0,1,f7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.a),1),19),a.ab,null,'details',0,-1,f7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.a),2),19),a.Q,RD(QHd(xYd(a.Q),0),19),'eModelElement',0,1,f7,true,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.a),3),19),a.S,null,'contents',0,-1,f7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.a),4),19),a.S,null,'references',0,-1,f7,false,false,true,false,true,false,false);vBd(a.o,h7,'EClass',false,false,true);tBd(RD(QHd(xYd(a.o),0),35),a.e,'abstract',null,0,1,h7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.o),1),35),a.e,'interface',null,0,1,h7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.o),2),19),a.o,null,'eSuperTypes',0,-1,h7,false,false,true,false,true,true,false);zBd(RD(QHd(xYd(a.o),3),19),a.T,RD(QHd(xYd(a.T),0),19),'eOperations',0,-1,h7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.o),4),19),a.b,null,'eAllAttributes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),5),19),a.W,null,'eAllReferences',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),6),19),a.W,null,'eReferences',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),7),19),a.b,null,'eAttributes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),8),19),a.W,null,'eAllContainments',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),9),19),a.T,null,'eAllOperations',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),10),19),a.bb,null,'eAllStructuralFeatures',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),11),19),a.o,null,'eAllSuperTypes',0,-1,h7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.o),12),19),a.b,null,'eIDAttribute',0,1,h7,true,true,false,false,false,false,true);zBd(RD(QHd(xYd(a.o),13),19),a.bb,RD(QHd(xYd(a.bb),7),19),'eStructuralFeatures',0,-1,h7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.o),14),19),a.H,null,'eGenericSuperTypes',0,-1,h7,false,false,true,true,false,true,false);zBd(RD(QHd(xYd(a.o),15),19),a.H,null,'eAllGenericSuperTypes',0,-1,h7,true,true,false,false,true,false,true);h=yBd(RD(QHd(uYd(a.o),0),62),a.e,'isSuperTypeOf');cBd(h,a.o,'someClass');yBd(RD(QHd(uYd(a.o),1),62),a.I,'getFeatureCount');h=yBd(RD(QHd(uYd(a.o),2),62),a.bb,EKe);cBd(h,a.I,'featureID');h=yBd(RD(QHd(uYd(a.o),3),62),a.I,FKe);cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.o),4),62),a.bb,EKe);cBd(h,a._,'featureName');yBd(RD(QHd(uYd(a.o),5),62),a.I,'getOperationCount');h=yBd(RD(QHd(uYd(a.o),6),62),a.T,'getEOperation');cBd(h,a.I,'operationID');h=yBd(RD(QHd(uYd(a.o),7),62),a.I,HKe);cBd(h,a.T,IKe);h=yBd(RD(QHd(uYd(a.o),8),62),a.T,'getOverride');cBd(h,a.T,IKe);h=yBd(RD(QHd(uYd(a.o),9),62),a.H,'getFeatureType');cBd(h,a.bb,GKe);vBd(a.p,i7,SJe,true,false,true);tBd(RD(QHd(xYd(a.p),0),35),a._,'instanceClassName',null,0,1,i7,false,true,true,true,true,false);b=lBd(a.L);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);uBd(RD(QHd(xYd(a.p),1),35),b,'instanceClass',i7,true,true,false,true);tBd(RD(QHd(xYd(a.p),2),35),a.M,JKe,null,0,1,i7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.p),3),35),a._,'instanceTypeName',null,0,1,i7,false,true,true,true,true,false);zBd(RD(QHd(xYd(a.p),4),19),a.U,RD(QHd(xYd(a.U),3),19),'ePackage',0,1,i7,true,false,false,false,true,false,false);zBd(RD(QHd(xYd(a.p),5),19),a.db,null,KKe,0,-1,i7,false,false,true,true,true,false,false);h=yBd(RD(QHd(uYd(a.p),0),62),a.e,LKe);cBd(h,a.M,gve);yBd(RD(QHd(uYd(a.p),1),62),a.I,'getClassifierID');vBd(a.q,k7,'EDataType',false,false,true);tBd(RD(QHd(xYd(a.q),0),35),a.e,'serializable',FGe,0,1,k7,false,false,true,false,true,false);vBd(a.v,m7,'EEnum',false,false,true);zBd(RD(QHd(xYd(a.v),0),19),a.w,RD(QHd(xYd(a.w),3),19),'eLiterals',0,-1,m7,false,false,true,true,false,false,false);h=yBd(RD(QHd(uYd(a.v),0),62),a.w,MKe);cBd(h,a._,GIe);h=yBd(RD(QHd(uYd(a.v),1),62),a.w,MKe);cBd(h,a.I,aIe);h=yBd(RD(QHd(uYd(a.v),2),62),a.w,'getEEnumLiteralByLiteral');cBd(h,a._,'literal');vBd(a.w,l7,TJe,false,false,true);tBd(RD(QHd(xYd(a.w),0),35),a.I,aIe,null,0,1,l7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.w),1),35),a.A,'instance',null,0,1,l7,true,false,true,false,true,false);tBd(RD(QHd(xYd(a.w),2),35),a._,'literal',null,0,1,l7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.w),3),19),a.v,RD(QHd(xYd(a.v),0),19),'eEnum',0,1,l7,true,false,false,false,false,false,false);vBd(a.B,n7,'EFactory',false,false,true);zBd(RD(QHd(xYd(a.B),0),19),a.U,RD(QHd(xYd(a.U),2),19),'ePackage',1,1,n7,true,false,true,false,false,false,false);h=yBd(RD(QHd(uYd(a.B),0),62),a.S,'create');cBd(h,a.o,'eClass');h=yBd(RD(QHd(uYd(a.B),1),62),a.M,'createFromString');cBd(h,a.q,'eDataType');cBd(h,a._,'literalValue');h=yBd(RD(QHd(uYd(a.B),2),62),a._,'convertToString');cBd(h,a.q,'eDataType');cBd(h,a.M,'instanceValue');vBd(a.Q,p7,DHe,true,false,true);zBd(RD(QHd(xYd(a.Q),0),19),a.a,RD(QHd(xYd(a.a),2),19),'eAnnotations',0,-1,p7,false,false,true,true,false,false,false);h=yBd(RD(QHd(uYd(a.Q),0),62),a.a,'getEAnnotation');cBd(h,a._,bIe);vBd(a.R,q7,EHe,true,false,true);tBd(RD(QHd(xYd(a.R),0),35),a._,GIe,null,0,1,q7,false,false,true,false,true,false);vBd(a.S,r7,'EObject',false,false,true);yBd(RD(QHd(uYd(a.S),0),62),a.o,'eClass');yBd(RD(QHd(uYd(a.S),1),62),a.e,'eIsProxy');yBd(RD(QHd(uYd(a.S),2),62),a.X,'eResource');yBd(RD(QHd(uYd(a.S),3),62),a.S,'eContainer');yBd(RD(QHd(uYd(a.S),4),62),a.bb,'eContainingFeature');yBd(RD(QHd(uYd(a.S),5),62),a.W,'eContainmentFeature');h=yBd(RD(QHd(uYd(a.S),6),62),null,'eContents');b=lBd(a.fb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);e=XVd(h,b,null);!!e&&e.oj();h=yBd(RD(QHd(uYd(a.S),7),62),null,'eAllContents');b=lBd(a.cb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);f=XVd(h,b,null);!!f&&f.oj();h=yBd(RD(QHd(uYd(a.S),8),62),null,'eCrossReferences');b=lBd(a.fb);c=lBd(a.S);WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);g=XVd(h,b,null);!!g&&g.oj();h=yBd(RD(QHd(uYd(a.S),9),62),a.M,'eGet');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),10),62),a.M,'eGet');cBd(h,a.bb,GKe);cBd(h,a.e,'resolve');h=yBd(RD(QHd(uYd(a.S),11),62),null,'eSet');cBd(h,a.bb,GKe);cBd(h,a.M,'newValue');h=yBd(RD(QHd(uYd(a.S),12),62),a.e,'eIsSet');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),13),62),null,'eUnset');cBd(h,a.bb,GKe);h=yBd(RD(QHd(uYd(a.S),14),62),a.M,'eInvoke');cBd(h,a.T,IKe);b=lBd(a.fb);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);dBd(h,b,'arguments');aBd(h,a.K);vBd(a.T,s7,VJe,false,false,true);zBd(RD(QHd(xYd(a.T),0),19),a.o,RD(QHd(xYd(a.o),3),19),NKe,0,1,s7,true,false,false,false,false,false,false);zBd(RD(QHd(xYd(a.T),1),19),a.db,null,KKe,0,-1,s7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.T),2),19),a.V,RD(QHd(xYd(a.V),0),19),'eParameters',0,-1,s7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.T),3),19),a.p,null,'eExceptions',0,-1,s7,false,false,true,false,true,true,false);zBd(RD(QHd(xYd(a.T),4),19),a.H,null,'eGenericExceptions',0,-1,s7,false,false,true,true,false,true,false);yBd(RD(QHd(uYd(a.T),0),62),a.I,HKe);h=yBd(RD(QHd(uYd(a.T),1),62),a.e,'isOverrideOf');cBd(h,a.T,'someOperation');vBd(a.U,t7,'EPackage',false,false,true);tBd(RD(QHd(xYd(a.U),0),35),a._,'nsURI',null,0,1,t7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.U),1),35),a._,'nsPrefix',null,0,1,t7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.U),2),19),a.B,RD(QHd(xYd(a.B),0),19),'eFactoryInstance',1,1,t7,true,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.U),3),19),a.p,RD(QHd(xYd(a.p),4),19),'eClassifiers',0,-1,t7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.U),4),19),a.U,RD(QHd(xYd(a.U),5),19),'eSubpackages',0,-1,t7,false,false,true,true,true,false,false);zBd(RD(QHd(xYd(a.U),5),19),a.U,RD(QHd(xYd(a.U),4),19),'eSuperPackage',0,1,t7,true,false,false,false,true,false,false);h=yBd(RD(QHd(uYd(a.U),0),62),a.p,'getEClassifier');cBd(h,a._,GIe);vBd(a.V,u7,WJe,false,false,true);zBd(RD(QHd(xYd(a.V),0),19),a.T,RD(QHd(xYd(a.T),2),19),'eOperation',0,1,u7,true,false,false,false,false,false,false);vBd(a.W,v7,XJe,false,false,true);tBd(RD(QHd(xYd(a.W),0),35),a.e,'containment',null,0,1,v7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.W),1),35),a.e,'container',null,0,1,v7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.W),2),35),a.e,'resolveProxies',FGe,0,1,v7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.W),3),19),a.W,null,'eOpposite',0,1,v7,false,false,true,false,true,false,false);zBd(RD(QHd(xYd(a.W),4),19),a.o,null,'eReferenceType',1,1,v7,true,true,false,false,true,false,true);zBd(RD(QHd(xYd(a.W),5),19),a.b,null,'eKeys',0,-1,v7,false,false,true,false,true,false,false);vBd(a.bb,y7,QJe,true,false,true);tBd(RD(QHd(xYd(a.bb),0),35),a.e,'changeable',FGe,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),1),35),a.e,'volatile',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),2),35),a.e,'transient',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),3),35),a._,'defaultValueLiteral',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),4),35),a.M,JKe,null,0,1,y7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.bb),5),35),a.e,'unsettable',null,0,1,y7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.bb),6),35),a.e,'derived',null,0,1,y7,false,false,true,false,true,false);zBd(RD(QHd(xYd(a.bb),7),19),a.o,RD(QHd(xYd(a.o),13),19),NKe,0,1,y7,true,false,false,false,false,false,false);yBd(RD(QHd(uYd(a.bb),0),62),a.I,FKe);h=yBd(RD(QHd(uYd(a.bb),1),62),null,'getContainerClass');b=lBd(a.L);c=Vae();WGd((!b.d&&(b.d=new XZd(o7,b,1)),b.d),c);d=XVd(h,b,null);!!d&&d.oj();vBd(a.eb,A7,PJe,true,false,true);tBd(RD(QHd(xYd(a.eb),0),35),a.e,'ordered',FGe,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),1),35),a.e,'unique',FGe,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),2),35),a.I,'lowerBound',null,0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),3),35),a.I,'upperBound','1',0,1,A7,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.eb),4),35),a.e,'many',null,0,1,A7,true,true,false,false,true,true);tBd(RD(QHd(xYd(a.eb),5),35),a.e,'required',null,0,1,A7,true,true,false,false,true,true);zBd(RD(QHd(xYd(a.eb),6),19),a.p,null,'eType',0,1,A7,false,true,true,false,true,true,false);zBd(RD(QHd(xYd(a.eb),7),19),a.H,null,'eGenericType',0,1,A7,false,true,true,true,false,true,false);vBd(a.ab,UK,'EStringToStringMapEntry',false,false,false);tBd(RD(QHd(xYd(a.ab),0),35),a._,'key',null,0,1,UK,false,false,true,false,true,false);tBd(RD(QHd(xYd(a.ab),1),35),a._,aIe,null,0,1,UK,false,false,true,false,true,false);vBd(a.H,o7,UJe,false,false,true);zBd(RD(QHd(xYd(a.H),0),19),a.H,null,'eUpperBound',0,1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),1),19),a.H,null,'eTypeArguments',0,-1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),2),19),a.p,null,'eRawType',1,1,o7,true,false,false,false,true,false,true);zBd(RD(QHd(xYd(a.H),3),19),a.H,null,'eLowerBound',0,1,o7,false,false,true,true,false,false,false);zBd(RD(QHd(xYd(a.H),4),19),a.db,null,'eTypeParameter',0,1,o7,false,false,true,false,false,false,false);zBd(RD(QHd(xYd(a.H),5),19),a.p,null,'eClassifier',0,1,o7,false,false,true,false,true,false,false);h=yBd(RD(QHd(uYd(a.H),0),62),a.e,LKe);cBd(h,a.M,gve);vBd(a.db,z7,YJe,false,false,true);zBd(RD(QHd(xYd(a.db),0),19),a.H,null,'eBounds',0,-1,z7,false,false,true,true,false,false,false);xBd(a.c,tJ,'EBigDecimal',true);xBd(a.d,uJ,'EBigInteger',true);xBd(a.e,xdb,'EBoolean',true);xBd(a.f,QI,'EBooleanObject',true);xBd(a.i,gE,'EByte',true);xBd(a.g,WC(gE,1),'EByteArray',true);xBd(a.j,RI,'EByteObject',true);xBd(a.k,hE,'EChar',true);xBd(a.n,SI,'ECharacterObject',true);xBd(a.r,qK,'EDate',true);xBd(a.s,T6,'EDiagnosticChain',false);xBd(a.t,iE,'EDouble',true);xBd(a.u,VI,'EDoubleObject',true);xBd(a.fb,Y6,'EEList',false);xBd(a.A,Z6,'EEnumerator',false);xBd(a.C,Tbb,'EFeatureMap',false);xBd(a.D,Jbb,'EFeatureMapEntry',false);xBd(a.F,jE,'EFloat',true);xBd(a.G,ZI,'EFloatObject',true);xBd(a.I,kE,'EInt',true);xBd(a.J,bJ,'EIntegerObject',true);xBd(a.L,UI,'EJavaClass',true);xBd(a.M,jJ,'EJavaObject',true);xBd(a.N,lE,'ELong',true);xBd(a.O,eJ,'ELongObject',true);xBd(a.P,VK,'EMap',false);xBd(a.X,Aab,'EResource',false);xBd(a.Y,zab,'EResourceSet',false);xBd(a.Z,wdb,'EShort',true);xBd(a.$,lJ,'EShortObject',true);xBd(a._,qJ,'EString',true);xBd(a.cb,a7,'ETreeIterator',false);xBd(a.K,$6,'EInvocationTargetException',false);pBd(a,AKe)} +var gve='object',hve='boolean',ive='number',jve='string',kve='function',lve=2147483647,mve='java.lang',nve={3:1},ove='com.google.common.base',pve=', ',qve='%s (%s) must not be negative',rve={3:1,4:1,5:1},sve='negative size: ',tve='no calls to next() since the last call to remove()',uve='Optional.of(',vve='null',wve={204:1,51:1},xve='com.google.common.collect',yve={204:1,51:1,128:1},zve={229:1,3:1},Ave={51:1},Bve='java.util',Cve={85:1},Dve={20:1,31:1,16:1},Eve=2063,Fve={20:1,31:1,16:1,21:1},Gve={85:1,139:1,133:1},Hve={20:1,31:1,16:1,21:1,87:1},Ive={20:1,31:1,16:1,277:1,21:1,87:1},Jve={51:1,128:1},Kve={358:1,44:1},Lve='AbstractMapEntry',Mve='expectedValuesPerKey',Nve={3:1,6:1,4:1,5:1},Ove=16384,Pve={159:1},Qve={41:1},Rve={202:1},Sve={l:4194303,m:4194303,h:524287},Tve={253:1,3:1,34:1},Uve='range unbounded on this side',Vve={20:1},Wve={20:1,16:1},Xve={3:1,20:1,31:1,16:1},Yve={306:1,3:1,20:1,31:1,16:1,15:1,59:1},Zve={3:1,4:1,5:1,173:1},$ve={3:1,85:1},_ve={20:1,16:1,21:1},awe={3:1,20:1,31:1,16:1,21:1},bwe={20:1,16:1,21:1,87:1},cwe=461845907,dwe=-862048943,ewe={3:1,6:1,4:1,5:1,173:1},fwe='expectedSize',gwe=1024,hwe=1073741824,iwe='initialArraySize',jwe={3:1,6:1,4:1,9:1,5:1},kwe={20:1,31:1,56:1,16:1,15:1},lwe='arraySize',mwe={20:1,31:1,56:1,16:1,15:1,59:1},nwe={46:1},owe={380:1},pwe=1.0E-4,qwe=-2147483648,rwe='__noinit__',swe={3:1,103:1,63:1,82:1},twe='com.google.gwt.core.client.impl',uwe='String',vwe='com.google.gwt.core.client',wwe='anonymous',xwe='fnStack',ywe='Unknown',zwe={201:1,3:1,4:1},Awe=1000,Bwe=65535,Cwe='January',Dwe='February',Ewe='March',Fwe='April',Gwe='May',Hwe='June',Iwe='July',Jwe='August',Kwe='September',Lwe='October',Mwe='November',Nwe='December',Owe=1900,Pwe={53:1,3:1,4:1},Qwe='Before Christ',Rwe='Anno Domini',Swe='Sunday',Twe='Monday',Uwe='Tuesday',Vwe='Wednesday',Wwe='Thursday',Xwe='Friday',Ywe='Saturday',Zwe='com.google.gwt.i18n.shared',$we='DateTimeFormat',_we='com.google.gwt.i18n.client',axe='DefaultDateTimeFormatInfo',bxe={3:1,4:1,34:1,206:1},cxe='com.google.gwt.json.client',dxe=4194303,exe=1048575,fxe=524288,gxe=4194304,hxe=17592186044416,ixe=1000000000,jxe=-17592186044416,kxe='java.io',lxe={3:1,103:1,77:1,63:1,82:1},mxe={3:1,295:1,82:1},nxe='For input string: "',oxe=Infinity,pxe=-Infinity,qxe=4096,rxe={3:1,4:1,376:1},sxe='org.eclipse.elk.layered',txe=65536,uxe=55296,vxe={109:1,3:1,4:1},wxe=100000,xxe=0.3010299956639812,yxe=4294967295,zxe='0.0',Axe={44:1},Bxe='Unable to add element to queue',Cxe={3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1},Dxe={3:1,20:1,31:1,56:1,16:1,15:1,59:1},Exe={20:1,16:1,15:1},Fxe={3:1,50:1},Gxe={189:1},Hxe={3:1,4:1,85:1},Ixe={3:1,4:1,20:1,31:1,16:1,49:1,21:1},Jxe='delete',Kxe=1.4901161193847656E-8,Lxe=1.1102230246251565E-16,Mxe=15525485,Nxe=5.9604644775390625E-8,Oxe=16777216,Pxe=16777215,Qxe=', length: ',Rxe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1},Sxe='subMap: ',Txe=' less than ',Uxe={3:1,34:1,22:1,303:1},Vxe='java.util.function',Wxe='java.util.logging',Xxe={3:1,4:1,5:1,856:1},Yxe='undefined',Zxe='java.util.stream',$xe={533:1,687:1},_xe='fromIndex: ',aye=' > toIndex: ',bye=', toIndex: ',cye='Index: ',dye=', Size: ',eye='org.eclipse.elk.alg.common',fye={50:1},gye='org.eclipse.elk.alg.common.compaction',hye='Scanline/EventHandler',iye='org.eclipse.elk.alg.common.compaction.oned',jye='CNode belongs to another CGroup.',kye='ISpacingsHandler/1',lye='The ',mye=' instance has been finished already.',nye='The direction ',oye=' is not supported by the CGraph instance.',pye='OneDimensionalCompactor',qye='OneDimensionalCompactor/lambda$0$Type',rye='Quadruplet',sye='ScanlineConstraintCalculator',tye='ScanlineConstraintCalculator/ConstraintsScanlineHandler',uye='ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type',vye='ScanlineConstraintCalculator/Timestamp',wye='ScanlineConstraintCalculator/lambda$0$Type',xye={178:1,46:1},yye='org.eclipse.elk.alg.common.compaction.options',zye='org.eclipse.elk.core.data',Aye='org.eclipse.elk.polyomino.traversalStrategy',Bye='org.eclipse.elk.polyomino.lowLevelSort',Cye='org.eclipse.elk.polyomino.highLevelSort',Dye='org.eclipse.elk.polyomino.fill',Eye={134:1},Fye='polyomino',Gye='org.eclipse.elk.alg.common.networksimplex',Hye={183:1,3:1,4:1},Iye='org.eclipse.elk.alg.common.nodespacing',Jye='org.eclipse.elk.alg.common.nodespacing.cellsystem',Kye='CENTER',Lye={217:1,336:1},Mye={3:1,4:1,5:1,603:1},Nye='LEFT',Oye='RIGHT',Pye='Vertical alignment cannot be null',Qye='BOTTOM',Rye='org.eclipse.elk.alg.common.nodespacing.internal',Sye='UNDEFINED',Tye=0.01,Uye='org.eclipse.elk.alg.common.nodespacing.internal.algorithm',Vye='LabelPlacer/lambda$0$Type',Wye='LabelPlacer/lambda$1$Type',Xye='portRatioOrPosition',Yye='org.eclipse.elk.alg.common.overlaps',Zye='DOWN',$ye='org.eclipse.elk.alg.common.polyomino',_ye='NORTH',aze='EAST',bze='SOUTH',cze='WEST',dze='org.eclipse.elk.alg.common.polyomino.structures',eze='Direction',fze='Grid is only of size ',gze='. Requested point (',hze=') is out of bounds.',ize=' Given center based coordinates were (',jze='org.eclipse.elk.graph.properties',kze='IPropertyHolder',lze={3:1,96:1,137:1},mze='org.eclipse.elk.alg.common.spore',nze='org.eclipse.elk.alg.common.utils',oze={205:1},pze='org.eclipse.elk.core',qze='Connected Components Compaction',rze='org.eclipse.elk.alg.disco',sze='org.eclipse.elk.alg.disco.graph',tze='org.eclipse.elk.alg.disco.options',uze='CompactionStrategy',vze='org.eclipse.elk.disco.componentCompaction.strategy',wze='org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm',xze='org.eclipse.elk.disco.debug.discoGraph',yze='org.eclipse.elk.disco.debug.discoPolys',zze='componentCompaction',Aze='org.eclipse.elk.disco',Bze='org.eclipse.elk.spacing.componentComponent',Cze='org.eclipse.elk.edge.thickness',Dze='org.eclipse.elk.aspectRatio',Eze='org.eclipse.elk.padding',Fze='org.eclipse.elk.alg.disco.transform',Gze=1.5707963267948966,Hze=1.7976931348623157E308,Ize={3:1,4:1,5:1,198:1},Jze={3:1,6:1,4:1,5:1,100:1,115:1},Kze='org.eclipse.elk.alg.force',Lze='ComponentsProcessor',Mze='ComponentsProcessor/1',Nze='ElkGraphImporter/lambda$0$Type',Oze='org.eclipse.elk.alg.force.graph',Pze='Component Layout',Qze='org.eclipse.elk.alg.force.model',Rze='org.eclipse.elk.force.model',Sze='org.eclipse.elk.force.iterations',Tze='org.eclipse.elk.force.repulsivePower',Uze='org.eclipse.elk.force.temperature',Vze=0.001,Wze='org.eclipse.elk.force.repulsion',Xze='org.eclipse.elk.alg.force.options',Yze=1.600000023841858,Zze='org.eclipse.elk.force',$ze='org.eclipse.elk.priority',_ze='org.eclipse.elk.spacing.nodeNode',aAe='org.eclipse.elk.spacing.edgeLabel',bAe='org.eclipse.elk.randomSeed',cAe='org.eclipse.elk.separateConnectedComponents',dAe='org.eclipse.elk.interactive',eAe='org.eclipse.elk.portConstraints',fAe='org.eclipse.elk.edgeLabels.inline',gAe='org.eclipse.elk.omitNodeMicroLayout',hAe='org.eclipse.elk.nodeSize.fixedGraphSize',iAe='org.eclipse.elk.nodeSize.options',jAe='org.eclipse.elk.nodeSize.constraints',kAe='org.eclipse.elk.nodeLabels.placement',lAe='org.eclipse.elk.portLabels.placement',mAe='org.eclipse.elk.topdownLayout',nAe='org.eclipse.elk.topdown.scaleFactor',oAe='org.eclipse.elk.topdown.hierarchicalNodeWidth',pAe='org.eclipse.elk.topdown.hierarchicalNodeAspectRatio',qAe='org.eclipse.elk.topdown.nodeType',rAe='origin',sAe='random',tAe='boundingBox.upLeft',uAe='boundingBox.lowRight',vAe='org.eclipse.elk.stress.fixed',wAe='org.eclipse.elk.stress.desiredEdgeLength',xAe='org.eclipse.elk.stress.dimension',yAe='org.eclipse.elk.stress.epsilon',zAe='org.eclipse.elk.stress.iterationLimit',AAe='org.eclipse.elk.stress',BAe='ELK Stress',CAe='org.eclipse.elk.nodeSize.minimum',DAe='org.eclipse.elk.alg.force.stress',EAe='Layered layout',FAe='org.eclipse.elk.alg.layered',GAe='org.eclipse.elk.alg.layered.compaction.components',HAe='org.eclipse.elk.alg.layered.compaction.oned',IAe='org.eclipse.elk.alg.layered.compaction.oned.algs',JAe='org.eclipse.elk.alg.layered.compaction.recthull',KAe='org.eclipse.elk.alg.layered.components',LAe='NONE',MAe='MODEL_ORDER',NAe={3:1,6:1,4:1,9:1,5:1,126:1},OAe={3:1,6:1,4:1,5:1,150:1,100:1,115:1},PAe='org.eclipse.elk.alg.layered.compound',QAe={47:1},RAe='org.eclipse.elk.alg.layered.graph',SAe=' -> ',TAe='Not supported by LGraph',UAe='Port side is undefined',VAe={3:1,6:1,4:1,5:1,482:1,150:1,100:1,115:1},WAe={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},XAe={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},YAe='([{"\' \t\r\n',ZAe=')]}"\' \t\r\n',$Ae='The given string contains parts that cannot be parsed as numbers.',_Ae='org.eclipse.elk.core.math',aBe={3:1,4:1,140:1,214:1,423:1},bBe={3:1,4:1,107:1,214:1,423:1},cBe='org.eclipse.elk.alg.layered.graph.transform',dBe='ElkGraphImporter',eBe='ElkGraphImporter/lambda$1$Type',fBe='ElkGraphImporter/lambda$2$Type',gBe='ElkGraphImporter/lambda$4$Type',hBe='org.eclipse.elk.alg.layered.intermediate',iBe='Node margin calculation',jBe='ONE_SIDED_GREEDY_SWITCH',kBe='TWO_SIDED_GREEDY_SWITCH',lBe='No implementation is available for the layout processor ',mBe='IntermediateProcessorStrategy',nBe="Node '",oBe='FIRST_SEPARATE',pBe='LAST_SEPARATE',qBe='Odd port side processing',rBe='org.eclipse.elk.alg.layered.intermediate.compaction',sBe='org.eclipse.elk.alg.layered.intermediate.greedyswitch',tBe='org.eclipse.elk.alg.layered.p3order.counting',uBe={230:1},vBe='org.eclipse.elk.alg.layered.intermediate.loops',wBe='org.eclipse.elk.alg.layered.intermediate.loops.ordering',xBe='org.eclipse.elk.alg.layered.intermediate.loops.routing',yBe='org.eclipse.elk.alg.layered.intermediate.preserveorder',zBe='org.eclipse.elk.alg.layered.intermediate.wrapping',ABe='org.eclipse.elk.alg.layered.options',BBe='INTERACTIVE',CBe='GREEDY',DBe='DEPTH_FIRST',EBe='EDGE_LENGTH',FBe='SELF_LOOPS',GBe='firstTryWithInitialOrder',HBe='org.eclipse.elk.layered.directionCongruency',IBe='org.eclipse.elk.layered.feedbackEdges',JBe='org.eclipse.elk.layered.interactiveReferencePoint',KBe='org.eclipse.elk.layered.mergeEdges',LBe='org.eclipse.elk.layered.mergeHierarchyEdges',MBe='org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides',NBe='org.eclipse.elk.layered.portSortingStrategy',OBe='org.eclipse.elk.layered.thoroughness',PBe='org.eclipse.elk.layered.unnecessaryBendpoints',QBe='org.eclipse.elk.layered.generatePositionAndLayerIds',RBe='org.eclipse.elk.layered.cycleBreaking.strategy',SBe='org.eclipse.elk.layered.layering.strategy',TBe='org.eclipse.elk.layered.layering.layerConstraint',UBe='org.eclipse.elk.layered.layering.layerChoiceConstraint',VBe='org.eclipse.elk.layered.layering.layerId',WBe='org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth',XBe='org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor',YBe='org.eclipse.elk.layered.layering.nodePromotion.strategy',ZBe='org.eclipse.elk.layered.layering.nodePromotion.maxIterations',$Be='org.eclipse.elk.layered.layering.coffmanGraham.layerBound',_Be='org.eclipse.elk.layered.crossingMinimization.strategy',aCe='org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder',bCe='org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness',cCe='org.eclipse.elk.layered.crossingMinimization.semiInteractive',dCe='org.eclipse.elk.layered.crossingMinimization.inLayerPredOf',eCe='org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf',fCe='org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint',gCe='org.eclipse.elk.layered.crossingMinimization.positionId',hCe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold',iCe='org.eclipse.elk.layered.crossingMinimization.greedySwitch.type',jCe='org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type',kCe='org.eclipse.elk.layered.nodePlacement.strategy',lCe='org.eclipse.elk.layered.nodePlacement.favorStraightEdges',mCe='org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening',nCe='org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment',oCe='org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening',pCe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility',qCe='org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default',rCe='org.eclipse.elk.layered.edgeRouting.selfLoopDistribution',sCe='org.eclipse.elk.layered.edgeRouting.selfLoopOrdering',tCe='org.eclipse.elk.layered.edgeRouting.splines.mode',uCe='org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor',vCe='org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth',wCe='org.eclipse.elk.layered.spacing.baseValue',xCe='org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers',yCe='org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers',zCe='org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers',ACe='org.eclipse.elk.layered.priority.direction',BCe='org.eclipse.elk.layered.priority.shortness',CCe='org.eclipse.elk.layered.priority.straightness',DCe='org.eclipse.elk.layered.compaction.connectedComponents',ECe='org.eclipse.elk.layered.compaction.postCompaction.strategy',FCe='org.eclipse.elk.layered.compaction.postCompaction.constraints',GCe='org.eclipse.elk.layered.highDegreeNodes.treatment',HCe='org.eclipse.elk.layered.highDegreeNodes.threshold',ICe='org.eclipse.elk.layered.highDegreeNodes.treeHeight',JCe='org.eclipse.elk.layered.wrapping.strategy',KCe='org.eclipse.elk.layered.wrapping.additionalEdgeSpacing',LCe='org.eclipse.elk.layered.wrapping.correctionFactor',MCe='org.eclipse.elk.layered.wrapping.cutting.strategy',NCe='org.eclipse.elk.layered.wrapping.cutting.cuts',OCe='org.eclipse.elk.layered.wrapping.cutting.msd.freedom',PCe='org.eclipse.elk.layered.wrapping.validify.strategy',QCe='org.eclipse.elk.layered.wrapping.validify.forbiddenIndices',RCe='org.eclipse.elk.layered.wrapping.multiEdge.improveCuts',SCe='org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty',TCe='org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges',UCe='org.eclipse.elk.layered.edgeLabels.sideSelection',VCe='org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy',WCe='org.eclipse.elk.layered.considerModelOrder.strategy',XCe='org.eclipse.elk.layered.considerModelOrder.portModelOrder',YCe='org.eclipse.elk.layered.considerModelOrder.noModelOrder',ZCe='org.eclipse.elk.layered.considerModelOrder.components',$Ce='org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy',_Ce='org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence',aDe='org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence',bDe='layering',cDe='layering.minWidth',dDe='layering.nodePromotion',eDe='crossingMinimization',fDe='org.eclipse.elk.hierarchyHandling',gDe='crossingMinimization.greedySwitch',hDe='nodePlacement',iDe='nodePlacement.bk',jDe='edgeRouting',kDe='org.eclipse.elk.edgeRouting',lDe='spacing',mDe='priority',nDe='compaction',oDe='compaction.postCompaction',pDe='Specifies whether and how post-process compaction is applied.',qDe='highDegreeNodes',rDe='wrapping',sDe='wrapping.cutting',tDe='wrapping.validify',uDe='wrapping.multiEdge',vDe='edgeLabels',wDe='considerModelOrder',xDe='org.eclipse.elk.spacing.commentComment',yDe='org.eclipse.elk.spacing.commentNode',zDe='org.eclipse.elk.spacing.edgeEdge',ADe='org.eclipse.elk.spacing.edgeNode',BDe='org.eclipse.elk.spacing.labelLabel',CDe='org.eclipse.elk.spacing.labelPortHorizontal',DDe='org.eclipse.elk.spacing.labelPortVertical',EDe='org.eclipse.elk.spacing.labelNode',FDe='org.eclipse.elk.spacing.nodeSelfLoop',GDe='org.eclipse.elk.spacing.portPort',HDe='org.eclipse.elk.spacing.individual',IDe='org.eclipse.elk.port.borderOffset',JDe='org.eclipse.elk.noLayout',KDe='org.eclipse.elk.port.side',LDe='org.eclipse.elk.debugMode',MDe='org.eclipse.elk.alignment',NDe='org.eclipse.elk.insideSelfLoops.activate',ODe='org.eclipse.elk.insideSelfLoops.yo',PDe='org.eclipse.elk.direction',QDe='org.eclipse.elk.nodeLabels.padding',RDe='org.eclipse.elk.portLabels.nextToPortIfPossible',SDe='org.eclipse.elk.portLabels.treatAsGroup',TDe='org.eclipse.elk.portAlignment.default',UDe='org.eclipse.elk.portAlignment.north',VDe='org.eclipse.elk.portAlignment.south',WDe='org.eclipse.elk.portAlignment.west',XDe='org.eclipse.elk.portAlignment.east',YDe='org.eclipse.elk.contentAlignment',ZDe='org.eclipse.elk.junctionPoints',$De='org.eclipse.elk.edgeLabels.placement',_De='org.eclipse.elk.port.index',aEe='org.eclipse.elk.commentBox',bEe='org.eclipse.elk.hypernode',cEe='org.eclipse.elk.port.anchor',dEe='org.eclipse.elk.partitioning.activate',eEe='org.eclipse.elk.partitioning.partition',fEe='org.eclipse.elk.position',gEe='org.eclipse.elk.margins',hEe='org.eclipse.elk.spacing.portsSurrounding',iEe='org.eclipse.elk.interactiveLayout',jEe='org.eclipse.elk.core.util',kEe={3:1,4:1,5:1,601:1},lEe='NETWORK_SIMPLEX',mEe='SIMPLE',nEe={106:1,47:1},oEe='org.eclipse.elk.alg.layered.p1cycles',pEe='org.eclipse.elk.alg.layered.p2layers',qEe={413:1,230:1},rEe={846:1,3:1,4:1},sEe='org.eclipse.elk.alg.layered.p3order',tEe='org.eclipse.elk.alg.layered.p4nodes',uEe={3:1,4:1,5:1,854:1},vEe=1.0E-5,wEe='org.eclipse.elk.alg.layered.p4nodes.bk',xEe='org.eclipse.elk.alg.layered.p5edges',yEe='org.eclipse.elk.alg.layered.p5edges.orthogonal',zEe='org.eclipse.elk.alg.layered.p5edges.orthogonal.direction',AEe=1.0E-6,BEe='org.eclipse.elk.alg.layered.p5edges.splines',CEe=0.09999999999999998,DEe=1.0E-8,EEe=4.71238898038469,FEe=3.141592653589793,GEe='org.eclipse.elk.alg.mrtree',HEe=0.10000000149011612,IEe='SUPER_ROOT',JEe='org.eclipse.elk.alg.mrtree.graph',KEe=-1.7976931348623157E308,LEe='org.eclipse.elk.alg.mrtree.intermediate',MEe='Processor compute fanout',NEe={3:1,6:1,4:1,5:1,534:1,100:1,115:1},OEe='Set neighbors in level',PEe='org.eclipse.elk.alg.mrtree.options',QEe='DESCENDANTS',REe='org.eclipse.elk.mrtree.compaction',SEe='org.eclipse.elk.mrtree.edgeEndTextureLength',TEe='org.eclipse.elk.mrtree.treeLevel',UEe='org.eclipse.elk.mrtree.positionConstraint',VEe='org.eclipse.elk.mrtree.weighting',WEe='org.eclipse.elk.mrtree.edgeRoutingMode',XEe='org.eclipse.elk.mrtree.searchOrder',YEe='Position Constraint',ZEe='org.eclipse.elk.mrtree',$Ee='org.eclipse.elk.tree',_Ee='Processor arrange level',aFe='org.eclipse.elk.alg.mrtree.p2order',bFe='org.eclipse.elk.alg.mrtree.p4route',cFe='org.eclipse.elk.alg.radial',dFe=6.283185307179586,eFe='Before',fFe=4.9E-324,gFe='After',hFe='org.eclipse.elk.alg.radial.intermediate',iFe='COMPACTION',jFe='org.eclipse.elk.alg.radial.intermediate.compaction',kFe={3:1,4:1,5:1,100:1},lFe='org.eclipse.elk.alg.radial.intermediate.optimization',mFe='No implementation is available for the layout option ',nFe='org.eclipse.elk.alg.radial.options',oFe='org.eclipse.elk.radial.centerOnRoot',pFe='org.eclipse.elk.radial.orderId',qFe='org.eclipse.elk.radial.radius',rFe='org.eclipse.elk.radial.rotate',sFe='org.eclipse.elk.radial.compactor',tFe='org.eclipse.elk.radial.compactionStepSize',uFe='org.eclipse.elk.radial.sorter',vFe='org.eclipse.elk.radial.wedgeCriteria',wFe='org.eclipse.elk.radial.optimizationCriteria',xFe='org.eclipse.elk.radial.rotation.targetAngle',yFe='org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace',zFe='org.eclipse.elk.radial.rotation.outgoingEdgeAngles',AFe='Compaction',BFe='rotation',CFe='org.eclipse.elk.radial',DFe='org.eclipse.elk.alg.radial.p1position.wedge',EFe='org.eclipse.elk.alg.radial.sorting',FFe=5.497787143782138,GFe=3.9269908169872414,HFe=2.356194490192345,IFe='org.eclipse.elk.alg.rectpacking',JFe='org.eclipse.elk.alg.rectpacking.intermediate',KFe='org.eclipse.elk.alg.rectpacking.options',LFe='org.eclipse.elk.rectpacking.trybox',MFe='org.eclipse.elk.rectpacking.currentPosition',NFe='org.eclipse.elk.rectpacking.desiredPosition',OFe='org.eclipse.elk.rectpacking.inNewRow',PFe='org.eclipse.elk.rectpacking.widthApproximation.strategy',QFe='org.eclipse.elk.rectpacking.widthApproximation.targetWidth',RFe='org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal',SFe='org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift',TFe='org.eclipse.elk.rectpacking.packing.strategy',UFe='org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation',VFe='org.eclipse.elk.rectpacking.packing.compaction.iterations',WFe='org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy',XFe='widthApproximation',YFe='Compaction Strategy',ZFe='packing.compaction',$Fe='org.eclipse.elk.rectpacking',_Fe='org.eclipse.elk.alg.rectpacking.p1widthapproximation',aGe='org.eclipse.elk.alg.rectpacking.p2packing',bGe='No Compaction',cGe='org.eclipse.elk.alg.rectpacking.p3whitespaceelimination',dGe='org.eclipse.elk.alg.rectpacking.util',eGe='No implementation available for ',fGe='org.eclipse.elk.alg.spore',gGe='org.eclipse.elk.alg.spore.options',hGe='org.eclipse.elk.sporeCompaction',iGe='org.eclipse.elk.underlyingLayoutAlgorithm',jGe='org.eclipse.elk.processingOrder.treeConstruction',kGe='org.eclipse.elk.processingOrder.spanningTreeCostFunction',lGe='org.eclipse.elk.processingOrder.preferredRoot',mGe='org.eclipse.elk.processingOrder.rootSelection',nGe='org.eclipse.elk.structure.structureExtractionStrategy',oGe='org.eclipse.elk.compaction.compactionStrategy',pGe='org.eclipse.elk.compaction.orthogonal',qGe='org.eclipse.elk.overlapRemoval.maxIterations',rGe='org.eclipse.elk.overlapRemoval.runScanline',sGe='processingOrder',tGe='overlapRemoval',uGe='org.eclipse.elk.sporeOverlap',vGe='org.eclipse.elk.alg.spore.p1structure',wGe='org.eclipse.elk.alg.spore.p2processingorder',xGe='org.eclipse.elk.alg.spore.p3execution',yGe='Topdown Layout',zGe='Invalid index: ',AGe='org.eclipse.elk.core.alg',BGe={341:1},CGe={294:1},DGe='Make sure its type is registered with the ',EGe=' utility class.',FGe='true',GGe='false',HGe="Couldn't clone property '",IGe=0.05,JGe='org.eclipse.elk.core.options',KGe=1.2999999523162842,LGe='org.eclipse.elk.box',MGe='org.eclipse.elk.expandNodes',NGe='org.eclipse.elk.box.packingMode',OGe='org.eclipse.elk.algorithm',PGe='org.eclipse.elk.resolvedAlgorithm',QGe='org.eclipse.elk.bendPoints',RGe='org.eclipse.elk.labelManager',SGe='org.eclipse.elk.scaleFactor',TGe='org.eclipse.elk.childAreaWidth',UGe='org.eclipse.elk.childAreaHeight',VGe='org.eclipse.elk.animate',WGe='org.eclipse.elk.animTimeFactor',XGe='org.eclipse.elk.layoutAncestors',YGe='org.eclipse.elk.maxAnimTime',ZGe='org.eclipse.elk.minAnimTime',$Ge='org.eclipse.elk.progressBar',_Ge='org.eclipse.elk.validateGraph',aHe='org.eclipse.elk.validateOptions',bHe='org.eclipse.elk.zoomToFit',cHe='org.eclipse.elk.font.name',dHe='org.eclipse.elk.font.size',eHe='org.eclipse.elk.topdown.sizeApproximator',fHe='org.eclipse.elk.topdown.scaleCap',gHe='org.eclipse.elk.edge.type',hHe='partitioning',iHe='nodeLabels',jHe='portAlignment',kHe='nodeSize',lHe='port',mHe='portLabels',nHe='topdown',oHe='insideSelfLoops',pHe='org.eclipse.elk.fixed',qHe='org.eclipse.elk.random',rHe={3:1,34:1,22:1,347:1},sHe='port must have a parent node to calculate the port side',tHe='The edge needs to have exactly one edge section. Found: ',uHe='org.eclipse.elk.core.util.adapters',vHe='org.eclipse.emf.ecore',wHe='org.eclipse.elk.graph',xHe='EMapPropertyHolder',yHe='ElkBendPoint',zHe='ElkGraphElement',AHe='ElkConnectableShape',BHe='ElkEdge',CHe='ElkEdgeSection',DHe='EModelElement',EHe='ENamedElement',FHe='ElkLabel',GHe='ElkNode',HHe='ElkPort',IHe={94:1,93:1},JHe='org.eclipse.emf.common.notify.impl',KHe="The feature '",LHe="' is not a valid changeable feature",MHe='Expecting null',NHe="' is not a valid feature",OHe='The feature ID',PHe=' is not a valid feature ID',QHe=32768,RHe={110:1,94:1,93:1,58:1,54:1,99:1},SHe='org.eclipse.emf.ecore.impl',THe='org.eclipse.elk.graph.impl',UHe='Recursive containment not allowed for ',VHe="The datatype '",WHe="' is not a valid classifier",XHe="The value '",YHe={195:1,3:1,4:1},ZHe="The class '",$He='http://www.eclipse.org/elk/ElkGraph',_He='property',aIe='value',bIe='source',cIe='properties',dIe='identifier',eIe='height',fIe='width',gIe='parent',hIe='text',iIe='children',jIe='hierarchical',kIe='sources',lIe='targets',mIe='sections',nIe='bendPoints',oIe='outgoingShape',pIe='incomingShape',qIe='outgoingSections',rIe='incomingSections',sIe='org.eclipse.emf.common.util',tIe='Severe implementation error in the Json to ElkGraph importer.',uIe='id',vIe='org.eclipse.elk.graph.json',wIe='Unhandled parameter types: ',xIe='startPoint',yIe="An edge must have at least one source and one target (edge id: '",zIe="').",AIe='Referenced edge section does not exist: ',BIe=" (edge id: '",CIe='target',DIe='sourcePoint',EIe='targetPoint',FIe='group',GIe='name',HIe='connectableShape cannot be null',IIe='edge cannot be null',JIe="Passed edge is not 'simple'.",KIe='org.eclipse.elk.graph.util',LIe="The 'no duplicates' constraint is violated",MIe='targetIndex=',NIe=', size=',OIe='sourceIndex=',PIe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},QIe={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},RIe='logging',SIe='measureExecutionTime',TIe='parser.parse.1',UIe='parser.parse.2',VIe='parser.next.1',WIe='parser.next.2',XIe='parser.next.3',YIe='parser.next.4',ZIe='parser.factor.1',$Ie='parser.factor.2',_Ie='parser.factor.3',aJe='parser.factor.4',bJe='parser.factor.5',cJe='parser.factor.6',dJe='parser.atom.1',eJe='parser.atom.2',fJe='parser.atom.3',gJe='parser.atom.4',hJe='parser.atom.5',iJe='parser.cc.1',jJe='parser.cc.2',kJe='parser.cc.3',lJe='parser.cc.5',mJe='parser.cc.6',nJe='parser.cc.7',oJe='parser.cc.8',pJe='parser.ope.1',qJe='parser.ope.2',rJe='parser.ope.3',sJe='parser.descape.1',tJe='parser.descape.2',uJe='parser.descape.3',vJe='parser.descape.4',wJe='parser.descape.5',xJe='parser.process.1',yJe='parser.quantifier.1',zJe='parser.quantifier.2',AJe='parser.quantifier.3',BJe='parser.quantifier.4',CJe='parser.quantifier.5',DJe='org.eclipse.emf.common.notify',EJe={424:1,686:1},FJe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},GJe={378:1,152:1},HJe='index=',IJe={3:1,4:1,5:1,129:1},JJe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},KJe={3:1,6:1,4:1,5:1,198:1},LJe={3:1,4:1,5:1,173:1,379:1},MJe=';/?:@&=+$,',NJe='invalid authority: ',OJe='EAnnotation',PJe='ETypedElement',QJe='EStructuralFeature',RJe='EAttribute',SJe='EClassifier',TJe='EEnumLiteral',UJe='EGenericType',VJe='EOperation',WJe='EParameter',XJe='EReference',YJe='ETypeParameter',ZJe='org.eclipse.emf.ecore.util',$Je={79:1},_Je={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},aKe='org.eclipse.emf.ecore.util.FeatureMap$Entry',bKe=8192,cKe=2048,dKe='byte',eKe='char',fKe='double',gKe='float',hKe='int',iKe='long',jKe='short',kKe='java.lang.Object',lKe={3:1,4:1,5:1,254:1},mKe={3:1,4:1,5:1,688:1},nKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},oKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},pKe='mixed',qKe='http:///org/eclipse/emf/ecore/util/ExtendedMetaData',rKe='kind',sKe={3:1,4:1,5:1,689:1},tKe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},uKe={20:1,31:1,56:1,16:1,15:1,61:1,71:1},vKe={51:1,128:1,287:1},wKe={76:1,343:1},xKe="The value of type '",yKe="' must be of type '",zKe=1352,AKe='http://www.eclipse.org/emf/2002/Ecore',BKe=-32768,CKe='constraints',DKe='baseType',EKe='getEStructuralFeature',FKe='getFeatureID',GKe='feature',HKe='getOperationID',IKe='operation',JKe='defaultValue',KKe='eTypeParameters',LKe='isInstance',MKe='getEEnumLiteral',NKe='eContainingClass',OKe={57:1},PKe={3:1,4:1,5:1,124:1},QKe='org.eclipse.emf.ecore.resource',RKe={94:1,93:1,599:1,2034:1},SKe='org.eclipse.emf.ecore.resource.impl',TKe='unspecified',UKe='simple',VKe='attribute',WKe='attributeWildcard',XKe='element',YKe='elementWildcard',ZKe='collapse',$Ke='itemType',_Ke='namespace',aLe='##targetNamespace',bLe='whiteSpace',cLe='wildcards',dLe='http://www.eclipse.org/emf/2003/XMLType',eLe='##any',fLe='uninitialized',gLe='The multiplicity constraint is violated',hLe='org.eclipse.emf.ecore.xml.type',iLe='ProcessingInstruction',jLe='SimpleAnyType',kLe='XMLTypeDocumentRoot',lLe='org.eclipse.emf.ecore.xml.type.impl',mLe='INF',nLe='processing',oLe='ENTITIES_._base',pLe='minLength',qLe='ENTITY',rLe='NCName',sLe='IDREFS_._base',tLe='integer',uLe='token',vLe='pattern',wLe='[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*',xLe='\\i\\c*',yLe='[\\i-[:]][\\c-[:]]*',zLe='nonPositiveInteger',ALe='maxInclusive',BLe='NMTOKEN',CLe='NMTOKENS_._base',DLe='nonNegativeInteger',ELe='minInclusive',FLe='normalizedString',GLe='unsignedByte',HLe='unsignedInt',ILe='18446744073709551615',JLe='unsignedShort',KLe='processingInstruction',LLe='org.eclipse.emf.ecore.xml.type.internal',MLe=1114111,NLe='Internal Error: shorthands: \\u',OLe='xml:isDigit',PLe='xml:isWord',QLe='xml:isSpace',RLe='xml:isNameChar',SLe='xml:isInitialNameChar',TLe='09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9\u0F20\u0F29',ULe='AZaz\xC0\xD6\xD8\xF6\xF8\u0131\u0134\u013E\u0141\u0148\u014A\u017E\u0180\u01C3\u01CD\u01F0\u01F4\u01F5\u01FA\u0217\u0250\u02A8\u02BB\u02C1\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u03A1\u03A3\u03CE\u03D0\u03D6\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03F3\u0401\u040C\u040E\u044F\u0451\u045C\u045E\u0481\u0490\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0\u04EB\u04EE\u04F5\u04F8\u04F9\u0531\u0556\u0559\u0559\u0561\u0586\u05D0\u05EA\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE\u06D0\u06D3\u06D5\u06D5\u06E5\u06E6\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4\u0F40\u0F47\u0F49\u0F69\u10A0\u10C5\u10D0\u10F6\u1100\u1100\u1102\u1103\u1105\u1107\u1109\u1109\u110B\u110C\u110E\u1112\u113C\u113C\u113E\u113E\u1140\u1140\u114C\u114C\u114E\u114E\u1150\u1150\u1154\u1155\u1159\u1159\u115F\u1161\u1163\u1163\u1165\u1165\u1167\u1167\u1169\u1169\u116D\u116E\u1172\u1173\u1175\u1175\u119E\u119E\u11A8\u11A8\u11AB\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BA\u11BC\u11C2\u11EB\u11EB\u11F0\u11F0\u11F9\u11F9\u1E00\u1E9B\u1EA0\u1EF9\u1F00\u1F15\u1F18\u1F1D\u1F20\u1F45\u1F48\u1F4D\u1F50\u1F57\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F7D\u1F80\u1FB4\u1FB6\u1FBC\u1FBE\u1FBE\u1FC2\u1FC4\u1FC6\u1FCC\u1FD0\u1FD3\u1FD6\u1FDB\u1FE0\u1FEC\u1FF2\u1FF4\u1FF6\u1FFC\u2126\u2126\u212A\u212B\u212E\u212E\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30A1\u30FA\u3105\u312C\u4E00\u9FA5\uAC00\uD7A3',VLe='Private Use',WLe='ASSIGNED',XLe='\x00\x7F\x80\xFF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF\u0900\u097F\u0980\u09FF\u0A00\u0A7F\u0A80\u0AFF\u0B00\u0B7F\u0B80\u0BFF\u0C00\u0C7F\u0C80\u0CFF\u0D00\u0D7F\u0D80\u0DFF\u0E00\u0E7F\u0E80\u0EFF\u0F00\u0FFF\u1000\u109F\u10A0\u10FF\u1100\u11FF\u1200\u137F\u13A0\u13FF\u1400\u167F\u1680\u169F\u16A0\u16FF\u1780\u17FF\u1800\u18AF\u1E00\u1EFF\u1F00\u1FFF\u2000\u206F\u2070\u209F\u20A0\u20CF\u20D0\u20FF\u2100\u214F\u2150\u218F\u2190\u21FF\u2200\u22FF\u2300\u23FF\u2400\u243F\u2440\u245F\u2460\u24FF\u2500\u257F\u2580\u259F\u25A0\u25FF\u2600\u26FF\u2700\u27BF\u2800\u28FF\u2E80\u2EFF\u2F00\u2FDF\u2FF0\u2FFF\u3000\u303F\u3040\u309F\u30A0\u30FF\u3100\u312F\u3130\u318F\u3190\u319F\u31A0\u31BF\u3200\u32FF\u3300\u33FF\u3400\u4DB5\u4E00\u9FFF\uA000\uA48F\uA490\uA4CF\uAC00\uD7A3\uE000\uF8FF\uF900\uFAFF\uFB00\uFB4F\uFB50\uFDFF\uFE20\uFE2F\uFE30\uFE4F\uFE50\uFE6F\uFE70\uFEFE\uFEFF\uFEFF\uFF00\uFFEF',YLe='UNASSIGNED',ZLe={3:1,122:1},$Le='org.eclipse.emf.ecore.xml.type.util',_Le={3:1,4:1,5:1,381:1},aMe='org.eclipse.xtext.xbase.lib',bMe='Cannot add elements to a Range',cMe='Cannot set elements in a Range',dMe='Cannot remove elements from a Range',eMe='user.agent';var _,eeb,_db,ydb=-1;$wnd.goog=$wnd.goog||{};$wnd.goog.global=$wnd.goog.global||$wnd;eeb={};feb(1,null,{},nb);_.Fb=function ob(a){return mb(this,a)};_.Gb=function qb(){return this.Rm};_.Hb=function sb(){return kFb(this)};_.Ib=function ub(){var a;return nfb(rb(this))+'@'+(a=tb(this)>>>0,a.toString(16))};_.equals=function(a){return this.Fb(a)};_.hashCode=function(){return this.Hb()};_.toString=function(){return this.Ib()};var ND,OD,PD;feb(296,1,{296:1,2124:1},pfb);_.ve=function qfb(a){var b;b=new pfb;b.i=4;a>1?(b.c=xfb(this,a-1)):(b.c=this);return b};_.we=function wfb(){lfb(this);return this.b};_.xe=function yfb(){return nfb(this)};_.ye=function Afb(){return lfb(this),this.k};_.ze=function Cfb(){return (this.i&4)!=0};_.Ae=function Dfb(){return (this.i&1)!=0};_.Ib=function Gfb(){return ofb(this)};_.i=0;var kfb=1;var jJ=sfb(mve,'Object',1);var UI=sfb(mve,'Class',296);feb(2096,1,nve);var oE=sfb(ove,'Optional',2096);feb(1191,2096,nve,xb);_.Fb=function yb(a){return a===this};_.Hb=function zb(){return 2040732332};_.Ib=function Ab(){return 'Optional.absent()'};_.Jb=function Bb(a){Qb(a);return wb(),vb};var vb;var mE=sfb(ove,'Absent',1191);feb(636,1,{},Gb);var nE=sfb(ove,'Joiner',636);var pE=ufb(ove,'Predicate');feb(589,1,{178:1,589:1,3:1,46:1},Yb);_.Mb=function ac(a){return Xb(this,a)};_.Lb=function Zb(a){return Xb(this,a)};_.Fb=function $b(a){var b;if(ZD(a,589)){b=RD(a,589);return Rt(this.a,b.a)}return false};_.Hb=function _b(){return Cob(this.a)+306654252};_.Ib=function bc(){return Wb(this.a)};var qE=sfb(ove,'Predicates/AndPredicate',589);feb(419,2096,{419:1,3:1},cc);_.Fb=function dc(a){var b;if(ZD(a,419)){b=RD(a,419);return pb(this.a,b.a)}return false};_.Hb=function ec(){return 1502476572+tb(this.a)};_.Ib=function fc(){return uve+this.a+')'};_.Jb=function gc(a){return new cc(Rb(a.Kb(this.a),'the Function passed to Optional.transform() must not return null.'))};var rE=sfb(ove,'Present',419);feb(204,1,wve);_.Nb=function kc(a){Ztb(this,a)};_.Qb=function lc(){jc()};var eI=sfb(xve,'UnmodifiableIterator',204);feb(2076,204,yve);_.Qb=function nc(){jc()};_.Rb=function mc(a){throw Adb(new jib)};_.Wb=function oc(a){throw Adb(new jib)};var fI=sfb(xve,'UnmodifiableListIterator',2076);feb(399,2076,yve);_.Ob=function rc(){return this.c<this.d};_.Sb=function sc(){return this.c>0};_.Pb=function tc(){if(this.c>=this.d){throw Adb(new Dvb)}return this.Xb(this.c++)};_.Tb=function uc(){return this.c};_.Ub=function vc(){if(this.c<=0){throw Adb(new Dvb)}return this.Xb(--this.c)};_.Vb=function wc(){return this.c-1};_.c=0;_.d=0;var sE=sfb(xve,'AbstractIndexedListIterator',399);feb(713,204,wve);_.Ob=function Ac(){return xc(this)};_.Pb=function Bc(){return yc(this)};_.e=1;var tE=sfb(xve,'AbstractIterator',713);feb(2084,1,{229:1});_.Zb=function Hc(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.Fb=function Ic(a){return xw(this,a)};_.Hb=function Jc(){return tb(this.Zb())};_.dc=function Kc(){return this.gc()==0};_.ec=function Lc(){return Ec(this)};_.Ib=function Mc(){return jeb(this.Zb())};var YE=sfb(xve,'AbstractMultimap',2084);feb(742,2084,zve);_.$b=function Xc(){Nc(this)};_._b=function Yc(a){return Oc(this,a)};_.ac=function Zc(){return new ne(this,this.c)};_.ic=function $c(a){return this.hc()};_.bc=function _c(){return new zf(this,this.c)};_.jc=function ad(){return this.mc(this.hc())};_.kc=function bd(){return new Hd(this)};_.lc=function cd(){return ek(this.c.vc().Nc(),new hh,64,this.d)};_.cc=function dd(a){return Qc(this,a)};_.fc=function gd(a){return Sc(this,a)};_.gc=function hd(){return this.d};_.mc=function jd(a){return yob(),new xpb(a)};_.nc=function kd(){return new Dd(this)};_.oc=function ld(){return ek(this.c.Cc().Nc(),new Fd,64,this.d)};_.pc=function md(a,b){return new lg(this,a,b,null)};_.d=0;var TE=sfb(xve,'AbstractMapBasedMultimap',742);feb(1696,742,zve);_.hc=function pd(){return new cnb(this.a)};_.jc=function qd(){return yob(),yob(),vob};_.cc=function sd(a){return RD(Qc(this,a),15)};_.fc=function ud(a){return RD(Sc(this,a),15)};_.Zb=function od(){return nd(this)};_.Fb=function rd(a){return xw(this,a)};_.qc=function td(a){return RD(Qc(this,a),15)};_.rc=function vd(a){return RD(Sc(this,a),15)};_.mc=function wd(a){return Hob(RD(a,15))};_.pc=function xd(a,b){return Vc(this,a,RD(b,15),null)};var uE=sfb(xve,'AbstractListMultimap',1696);feb(748,1,Ave);_.Nb=function zd(a){Ztb(this,a)};_.Ob=function Ad(){return this.c.Ob()||this.e.Ob()};_.Pb=function Bd(){var a;if(!this.e.Ob()){a=RD(this.c.Pb(),44);this.b=a.ld();this.a=RD(a.md(),16);this.e=this.a.Kc()}return this.sc(this.b,this.e.Pb())};_.Qb=function Cd(){this.e.Qb();RD(Hvb(this.a),16).dc()&&this.c.Qb();--this.d.d};var CE=sfb(xve,'AbstractMapBasedMultimap/Itr',748);feb(1129,748,Ave,Dd);_.sc=function Ed(a,b){return b};var vE=sfb(xve,'AbstractMapBasedMultimap/1',1129);feb(1130,1,{},Fd);_.Kb=function Gd(a){return RD(a,16).Nc()};var wE=sfb(xve,'AbstractMapBasedMultimap/1methodref$spliterator$Type',1130);feb(1131,748,Ave,Hd);_.sc=function Id(a,b){return new gp(a,b)};var xE=sfb(xve,'AbstractMapBasedMultimap/2',1131);var VK=ufb(Bve,'Map');feb(2065,1,Cve);_.wc=function Td(a){Bvb(this,a)};_.yc=function $d(a,b,c){return Cvb(this,a,b,c)};_.$b=function Od(){this.vc().$b()};_.tc=function Pd(a){return Jd(this,a)};_._b=function Qd(a){return !!Kd(this,a,false)};_.uc=function Rd(a){var b,c,d;for(c=this.vc().Kc();c.Ob();){b=RD(c.Pb(),44);d=b.md();if(dE(a)===dE(d)||a!=null&&pb(a,d)){return true}}return false};_.Fb=function Sd(a){var b,c,d;if(a===this){return true}if(!ZD(a,85)){return false}d=RD(a,85);if(this.gc()!=d.gc()){return false}for(c=d.vc().Kc();c.Ob();){b=RD(c.Pb(),44);if(!this.tc(b)){return false}}return true};_.xc=function Ud(a){return Wd(Kd(this,a,false))};_.Hb=function Xd(){return Bob(this.vc())};_.dc=function Yd(){return this.gc()==0};_.ec=function Zd(){return new Xkb(this)};_.zc=function _d(a,b){throw Adb(new kib('Put not supported on this map'))};_.Ac=function ae(a){Ld(this,a)};_.Bc=function be(a){return Wd(Kd(this,a,true))};_.gc=function ce(){return this.vc().gc()};_.Ib=function de(){return Md(this)};_.Cc=function ee(){return new glb(this)};var KJ=sfb(Bve,'AbstractMap',2065);feb(2085,2065,Cve);_.bc=function ge(){return new rf(this)};_.vc=function he(){return fe(this)};_.ec=function ie(){var a;a=this.g;return !a?(this.g=this.bc()):a};_.Cc=function je(){var a;a=this.i;return !a?(this.i=new nw(this)):a};var uH=sfb(xve,'Maps/ViewCachingAbstractMap',2085);feb(402,2085,Cve,ne);_.xc=function se(a){return ke(this,a)};_.Bc=function ve(a){return le(this,a)};_.$b=function oe(){this.d==this.e.c?this.e.$b():Ar(new mf(this))};_._b=function pe(a){return Wv(this.d,a)};_.Ec=function qe(){return new df(this)};_.Dc=function(){return this.Ec()};_.Fb=function re(a){return this===a||pb(this.d,a)};_.Hb=function te(){return tb(this.d)};_.ec=function ue(){return this.e.ec()};_.gc=function we(){return this.d.gc()};_.Ib=function xe(){return jeb(this.d)};var BE=sfb(xve,'AbstractMapBasedMultimap/AsMap',402);var cJ=ufb(mve,'Iterable');feb(31,1,Dve);_.Jc=function Le(a){xgb(this,a)};_.Lc=function Ne(){return this.Oc()};_.Nc=function Pe(){return new Swb(this,0)};_.Oc=function Qe(){return new SDb(null,this.Nc())};_.Fc=function Ge(a){throw Adb(new kib('Add not supported on this collection'))};_.Gc=function He(a){return ye(this,a)};_.$b=function Ie(){Ae(this)};_.Hc=function Je(a){return ze(this,a,false)};_.Ic=function Ke(a){return Be(this,a)};_.dc=function Me(){return this.gc()==0};_.Mc=function Oe(a){return ze(this,a,true)};_.Pc=function Re(){return De(this)};_.Qc=function Se(a){return Ee(this,a)};_.Ib=function Te(){return Fe(this)};var vJ=sfb(Bve,'AbstractCollection',31);var bL=ufb(Bve,'Set');feb(Eve,31,Fve);_.Nc=function Ye(){return new Swb(this,1)};_.Fb=function We(a){return Ue(this,a)};_.Hb=function Xe(){return Bob(this)};var RJ=sfb(Bve,'AbstractSet',Eve);feb(2068,Eve,Fve);var UH=sfb(xve,'Sets/ImprovedAbstractSet',2068);feb(2069,2068,Fve);_.$b=function $e(){this.Rc().$b()};_.Hc=function _e(a){return Ze(this,a)};_.dc=function af(){return this.Rc().dc()};_.Mc=function bf(a){var b;if(this.Hc(a)&&ZD(a,44)){b=RD(a,44);return this.Rc().ec().Mc(b.ld())}return false};_.gc=function cf(){return this.Rc().gc()};var nH=sfb(xve,'Maps/EntrySet',2069);feb(1127,2069,Fve,df);_.Hc=function ef(a){return Nk(this.a.d.vc(),a)};_.Kc=function ff(){return new mf(this.a)};_.Rc=function gf(){return this.a};_.Mc=function hf(a){var b;if(!Nk(this.a.d.vc(),a)){return false}b=RD(Hvb(RD(a,44)),44);Tc(this.a.e,b.ld());return true};_.Nc=function jf(){return gk(this.a.d.vc().Nc(),new kf(this.a))};var zE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapEntries',1127);feb(1128,1,{},kf);_.Kb=function lf(a){return me(this.a,RD(a,44))};var yE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type',1128);feb(746,1,Ave,mf);_.Nb=function nf(a){Ztb(this,a)};_.Pb=function pf(){var a;return a=RD(this.b.Pb(),44),this.a=RD(a.md(),16),me(this.c,a)};_.Ob=function of(){return this.b.Ob()};_.Qb=function qf(){Vb(!!this.a);this.b.Qb();this.c.e.d-=this.a.gc();this.a.$b();this.a=null};var AE=sfb(xve,'AbstractMapBasedMultimap/AsMap/AsMapIterator',746);feb(542,2068,Fve,rf);_.$b=function sf(){this.b.$b()};_.Hc=function tf(a){return this.b._b(a)};_.Jc=function uf(a){Qb(a);this.b.wc(new lw(a))};_.dc=function vf(){return this.b.dc()};_.Kc=function wf(){return new aw(this.b.vc().Kc())};_.Mc=function xf(a){if(this.b._b(a)){this.b.Bc(a);return true}return false};_.gc=function yf(){return this.b.gc()};var rH=sfb(xve,'Maps/KeySet',542);feb(327,542,Fve,zf);_.$b=function Af(){var a;Ar((a=this.b.vc().Kc(),new Hf(this,a)))};_.Ic=function Bf(a){return this.b.ec().Ic(a)};_.Fb=function Cf(a){return this===a||pb(this.b.ec(),a)};_.Hb=function Df(){return tb(this.b.ec())};_.Kc=function Ef(){var a;return a=this.b.vc().Kc(),new Hf(this,a)};_.Mc=function Ff(a){var b,c;c=0;b=RD(this.b.Bc(a),16);if(b){c=b.gc();b.$b();this.a.d-=c}return c>0};_.Nc=function Gf(){return this.b.ec().Nc()};var EE=sfb(xve,'AbstractMapBasedMultimap/KeySet',327);feb(747,1,Ave,Hf);_.Nb=function If(a){Ztb(this,a)};_.Ob=function Jf(){return this.c.Ob()};_.Pb=function Kf(){this.a=RD(this.c.Pb(),44);return this.a.ld()};_.Qb=function Lf(){var a;Vb(!!this.a);a=RD(this.a.md(),16);this.c.Qb();this.b.a.d-=a.gc();a.$b();this.a=null};var DE=sfb(xve,'AbstractMapBasedMultimap/KeySet/1',747);feb(502,402,{85:1,133:1},Mf);_.bc=function Nf(){return this.Sc()};_.ec=function Qf(){return this.Uc()};_.Sc=function Of(){return new eg(this.c,this.Wc())};_.Tc=function Pf(){return this.Wc().Tc()};_.Uc=function Rf(){var a;return a=this.b,!a?(this.b=this.Sc()):a};_.Vc=function Sf(){return this.Wc().Vc()};_.Wc=function Tf(){return RD(this.d,133)};var IE=sfb(xve,'AbstractMapBasedMultimap/SortedAsMap',502);feb(446,502,Gve,Uf);_.bc=function Wf(){return new gg(this.a,RD(RD(this.d,133),139))};_.Sc=function Xf(){return new gg(this.a,RD(RD(this.d,133),139))};_.ec=function _f(){var a;return a=this.b,RD(!a?(this.b=new gg(this.a,RD(RD(this.d,133),139))):a,277)};_.Uc=function ag(){var a;return a=this.b,RD(!a?(this.b=new gg(this.a,RD(RD(this.d,133),139))):a,277)};_.Wc=function cg(){return RD(RD(this.d,133),139)};_.Xc=function Vf(a){return RD(RD(this.d,133),139).Xc(a)};_.Yc=function Yf(a){return RD(RD(this.d,133),139).Yc(a)};_.Zc=function Zf(a,b){return new Uf(this.a,RD(RD(this.d,133),139).Zc(a,b))};_.$c=function $f(a){return RD(RD(this.d,133),139).$c(a)};_._c=function bg(a){return RD(RD(this.d,133),139)._c(a)};_.ad=function dg(a,b){return new Uf(this.a,RD(RD(this.d,133),139).ad(a,b))};var FE=sfb(xve,'AbstractMapBasedMultimap/NavigableAsMap',446);feb(501,327,Hve,eg);_.Nc=function fg(){return this.b.ec().Nc()};var JE=sfb(xve,'AbstractMapBasedMultimap/SortedKeySet',501);feb(401,501,Ive,gg);var GE=sfb(xve,'AbstractMapBasedMultimap/NavigableKeySet',401);feb(551,31,Dve,lg);_.Fc=function mg(a){var b,c;ig(this);c=this.d.dc();b=this.d.Fc(a);if(b){++this.f.d;c&&hg(this)}return b};_.Gc=function ng(a){var b,c,d;if(a.dc()){return false}d=(ig(this),this.d.gc());b=this.d.Gc(a);if(b){c=this.d.gc();this.f.d+=c-d;d==0&&hg(this)}return b};_.$b=function og(){var a;a=(ig(this),this.d.gc());if(a==0){return}this.d.$b();this.f.d-=a;jg(this)};_.Hc=function pg(a){ig(this);return this.d.Hc(a)};_.Ic=function qg(a){ig(this);return this.d.Ic(a)};_.Fb=function rg(a){if(a===this){return true}ig(this);return pb(this.d,a)};_.Hb=function sg(){ig(this);return tb(this.d)};_.Kc=function tg(){ig(this);return new Og(this)};_.Mc=function ug(a){var b;ig(this);b=this.d.Mc(a);if(b){--this.f.d;jg(this)}return b};_.gc=function vg(){return kg(this)};_.Nc=function wg(){return ig(this),this.d.Nc()};_.Ib=function xg(){ig(this);return jeb(this.d)};var LE=sfb(xve,'AbstractMapBasedMultimap/WrappedCollection',551);var QK=ufb(Bve,'List');feb(744,551,{20:1,31:1,16:1,15:1},yg);_.jd=function Hg(a){tvb(this,a)};_.Nc=function Ig(){return ig(this),this.d.Nc()};_.bd=function zg(a,b){var c;ig(this);c=this.d.dc();RD(this.d,15).bd(a,b);++this.a.d;c&&hg(this)};_.cd=function Ag(a,b){var c,d,e;if(b.dc()){return false}e=(ig(this),this.d.gc());c=RD(this.d,15).cd(a,b);if(c){d=this.d.gc();this.a.d+=d-e;e==0&&hg(this)}return c};_.Xb=function Bg(a){ig(this);return RD(this.d,15).Xb(a)};_.dd=function Cg(a){ig(this);return RD(this.d,15).dd(a)};_.ed=function Dg(){ig(this);return new Ug(this)};_.fd=function Eg(a){ig(this);return new Vg(this,a)};_.gd=function Fg(a){var b;ig(this);b=RD(this.d,15).gd(a);--this.a.d;jg(this);return b};_.hd=function Gg(a,b){ig(this);return RD(this.d,15).hd(a,b)};_.kd=function Jg(a,b){ig(this);return Vc(this.a,this.e,RD(this.d,15).kd(a,b),!this.b?this:this.b)};var NE=sfb(xve,'AbstractMapBasedMultimap/WrappedList',744);feb(1126,744,{20:1,31:1,16:1,15:1,59:1},Kg);var HE=sfb(xve,'AbstractMapBasedMultimap/RandomAccessWrappedList',1126);feb(628,1,Ave,Og);_.Nb=function Qg(a){Ztb(this,a)};_.Ob=function Rg(){Ng(this);return this.b.Ob()};_.Pb=function Sg(){Ng(this);return this.b.Pb()};_.Qb=function Tg(){Mg(this)};var KE=sfb(xve,'AbstractMapBasedMultimap/WrappedCollection/WrappedIterator',628);feb(745,628,Jve,Ug,Vg);_.Qb=function _g(){Mg(this)};_.Rb=function Wg(a){var b;b=kg(this.a)==0;(Ng(this),RD(this.b,128)).Rb(a);++this.a.a.d;b&&hg(this.a)};_.Sb=function Xg(){return (Ng(this),RD(this.b,128)).Sb()};_.Tb=function Yg(){return (Ng(this),RD(this.b,128)).Tb()};_.Ub=function Zg(){return (Ng(this),RD(this.b,128)).Ub()};_.Vb=function $g(){return (Ng(this),RD(this.b,128)).Vb()};_.Wb=function ah(a){(Ng(this),RD(this.b,128)).Wb(a)};var ME=sfb(xve,'AbstractMapBasedMultimap/WrappedList/WrappedListIterator',745);feb(743,551,Hve,bh);_.Nc=function dh(){return ig(this),this.d.Nc()};var QE=sfb(xve,'AbstractMapBasedMultimap/WrappedSortedSet',743);feb(1125,743,Ive,eh);var OE=sfb(xve,'AbstractMapBasedMultimap/WrappedNavigableSet',1125);feb(1124,551,Fve,fh);_.Nc=function gh(){return ig(this),this.d.Nc()};var PE=sfb(xve,'AbstractMapBasedMultimap/WrappedSet',1124);feb(1133,1,{},hh);_.Kb=function ih(a){return fd(RD(a,44))};var RE=sfb(xve,'AbstractMapBasedMultimap/lambda$1$Type',1133);feb(1132,1,{},jh);_.Kb=function kh(a){return new gp(this.a,a)};var SE=sfb(xve,'AbstractMapBasedMultimap/lambda$2$Type',1132);var UK=ufb(Bve,'Map/Entry');feb(358,1,Kve);_.Fb=function lh(a){var b;if(ZD(a,44)){b=RD(a,44);return Hb(this.ld(),b.ld())&&Hb(this.md(),b.md())}return false};_.Hb=function mh(){var a,b;a=this.ld();b=this.md();return (a==null?0:tb(a))^(b==null?0:tb(b))};_.nd=function nh(a){throw Adb(new jib)};_.Ib=function oh(){return this.ld()+'='+this.md()};var UE=sfb(xve,Lve,358);feb(2086,31,Dve);_.$b=function ph(){this.od().$b()};_.Hc=function qh(a){var b;if(ZD(a,44)){b=RD(a,44);return Cc(this.od(),b.ld(),b.md())}return false};_.Mc=function rh(a){var b;if(ZD(a,44)){b=RD(a,44);return Gc(this.od(),b.ld(),b.md())}return false};_.gc=function sh(){return this.od().d};var yH=sfb(xve,'Multimaps/Entries',2086);feb(749,2086,Dve,th);_.Kc=function uh(){return this.a.kc()};_.od=function vh(){return this.a};_.Nc=function wh(){return this.a.lc()};var VE=sfb(xve,'AbstractMultimap/Entries',749);feb(750,749,Fve,xh);_.Nc=function Ah(){return this.a.lc()};_.Fb=function yh(a){return Rx(this,a)};_.Hb=function zh(){return Sx(this)};var WE=sfb(xve,'AbstractMultimap/EntrySet',750);feb(751,31,Dve,Bh);_.$b=function Ch(){this.a.$b()};_.Hc=function Dh(a){return Dc(this.a,a)};_.Kc=function Eh(){return this.a.nc()};_.gc=function Fh(){return this.a.d};_.Nc=function Gh(){return this.a.oc()};var XE=sfb(xve,'AbstractMultimap/Values',751);feb(2087,31,{849:1,20:1,31:1,16:1});_.Jc=function Oh(a){Qb(a);Ih(this).Jc(new lx(a))};_.Nc=function Sh(){var a;return a=Ih(this).Nc(),ek(a,new sx,64|a.yd()&1296,this.a.d)};_.Fc=function Kh(a){Hh();return true};_.Gc=function Lh(a){return Qb(this),Qb(a),ZD(a,552)?nx(RD(a,849)):!a.dc()&&xr(this,a.Kc())};_.Hc=function Mh(a){var b;return b=RD(Xv(nd(this.a),a),16),(!b?0:b.gc())>0};_.Fb=function Nh(a){return ox(this,a)};_.Hb=function Ph(){return tb(Ih(this))};_.dc=function Qh(){return Ih(this).dc()};_.Mc=function Rh(a){return Rw(this,a,1)>0};_.Ib=function Th(){return jeb(Ih(this))};var $E=sfb(xve,'AbstractMultiset',2087);feb(2089,2068,Fve);_.$b=function Uh(){Nc(this.a.a)};_.Hc=function Vh(a){var b,c;if(ZD(a,503)){c=RD(a,425);if(RD(c.a.md(),16).gc()<=0){return false}b=Qw(this.a,c.a.ld());return b==RD(c.a.md(),16).gc()}return false};_.Mc=function Wh(a){var b,c,d,e;if(ZD(a,503)){c=RD(a,425);b=c.a.ld();d=RD(c.a.md(),16).gc();if(d!=0){e=this.a;return qx(e,b,d)}}return false};var IH=sfb(xve,'Multisets/EntrySet',2089);feb(1139,2089,Fve,Xh);_.Kc=function Yh(){return new _w(fe(nd(this.a.a)).Kc())};_.gc=function Zh(){return nd(this.a.a).gc()};var ZE=sfb(xve,'AbstractMultiset/EntrySet',1139);feb(627,742,zve);_.hc=function ai(){return this.pd()};_.jc=function bi(){return this.qd()};_.cc=function ei(a){return this.rd(a)};_.fc=function gi(a){return this.sd(a)};_.Zb=function _h(){var a;return a=this.f,!a?(this.f=this.ac()):a};_.qd=function ci(){return yob(),yob(),xob};_.Fb=function di(a){return xw(this,a)};_.rd=function fi(a){return RD(Qc(this,a),21)};_.sd=function hi(a){return RD(Sc(this,a),21)};_.mc=function ii(a){return yob(),new Lqb(RD(a,21))};_.pc=function ji(a,b){return new fh(this,a,RD(b,21))};var _E=sfb(xve,'AbstractSetMultimap',627);feb(1723,627,zve);_.hc=function mi(){return new yAb(this.b)};_.pd=function ni(){return new yAb(this.b)};_.jc=function oi(){return Zx(new yAb(this.b))};_.qd=function pi(){return Zx(new yAb(this.b))};_.cc=function qi(a){return RD(RD(Qc(this,a),21),87)};_.rd=function ri(a){return RD(RD(Qc(this,a),21),87)};_.fc=function si(a){return RD(RD(Sc(this,a),21),87)};_.sd=function ti(a){return RD(RD(Sc(this,a),21),87)};_.mc=function ui(a){return ZD(a,277)?Zx(RD(a,277)):(yob(),new jrb(RD(a,87)))};_.Zb=function li(){var a;return a=this.f,!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a};_.pc=function vi(a,b){return ZD(b,277)?new eh(this,a,RD(b,277)):new bh(this,a,RD(b,87))};var bF=sfb(xve,'AbstractSortedSetMultimap',1723);feb(1724,1723,zve);_.Zb=function xi(){var a;return a=this.f,RD(RD(!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a,133),139)};_.ec=function zi(){var a;return a=this.i,RD(RD(!a?(this.i=ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)):a,87),277)};_.bc=function yi(){return ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)};var aF=sfb(xve,'AbstractSortedKeySortedSetMultimap',1724);feb(2109,1,{2046:1});_.Fb=function Ai(a){return Qy(this,a)};_.Hb=function Bi(){var a;return Bob((a=this.g,!a?(this.g=new Di(this)):a))};_.Ib=function Ci(){var a;return Md((a=this.f,!a?(this.f=new Zj(this)):a))};var eF=sfb(xve,'AbstractTable',2109);feb(679,Eve,Fve,Di);_.$b=function Ei(){Xi()};_.Hc=function Fi(a){var b,c;if(ZD(a,478)){b=RD(a,697);c=RD(Xv(bj(this.a),Qm(b.c.e,b.b)),85);return !!c&&Nk(c.vc(),new gp(Qm(b.c.c,b.a),Ui(b.c,b.b,b.a)))}return false};_.Kc=function Gi(){return Vi(this.a)};_.Mc=function Hi(a){var b,c;if(ZD(a,478)){b=RD(a,697);c=RD(Xv(bj(this.a),Qm(b.c.e,b.b)),85);return !!c&&Ok(c.vc(),new gp(Qm(b.c.c,b.a),Ui(b.c,b.b,b.a)))}return false};_.gc=function Ii(){return dj(this.a)};_.Nc=function Ji(){return Wi(this.a)};var cF=sfb(xve,'AbstractTable/CellSet',679);feb(2025,31,Dve,Ki);_.$b=function Li(){Xi()};_.Hc=function Mi(a){return Yi(this.a,a)};_.Kc=function Ni(){return fj(this.a)};_.gc=function Oi(){return dj(this.a)};_.Nc=function Pi(){return gj(this.a)};var dF=sfb(xve,'AbstractTable/Values',2025);feb(1697,1696,zve);var fF=sfb(xve,'ArrayListMultimapGwtSerializationDependencies',1697);feb(520,1697,zve,Ri,Si);_.hc=function Ti(){return new cnb(this.a)};_.a=0;var gF=sfb(xve,'ArrayListMultimap',520);feb(678,2109,{678:1,2046:1,3:1},hj);var sF=sfb(xve,'ArrayTable',678);feb(2021,399,yve,ij);_.Xb=function jj(a){return new pj(this.a,a)};var hF=sfb(xve,'ArrayTable/1',2021);feb(2022,1,{},kj);_.td=function lj(a){return new pj(this.a,a)};var iF=sfb(xve,'ArrayTable/1methodref$getCell$Type',2022);feb(2110,1,{697:1});_.Fb=function mj(a){var b;if(a===this){return true}if(ZD(a,478)){b=RD(a,697);return Hb(Qm(this.c.e,this.b),Qm(b.c.e,b.b))&&Hb(Qm(this.c.c,this.a),Qm(b.c.c,b.a))&&Hb(Ui(this.c,this.b,this.a),Ui(b.c,b.b,b.a))}return false};_.Hb=function nj(){return Tnb(cD(WC(jJ,1),rve,1,5,[Qm(this.c.e,this.b),Qm(this.c.c,this.a),Ui(this.c,this.b,this.a)]))};_.Ib=function oj(){return '('+Qm(this.c.e,this.b)+','+Qm(this.c.c,this.a)+')='+Ui(this.c,this.b,this.a)};var bI=sfb(xve,'Tables/AbstractCell',2110);feb(478,2110,{478:1,697:1},pj);_.a=0;_.b=0;_.d=0;var jF=sfb(xve,'ArrayTable/2',478);feb(2024,1,{},qj);_.td=function rj(a){return _i(this.a,a)};var kF=sfb(xve,'ArrayTable/2methodref$getValue$Type',2024);feb(2023,399,yve,sj);_.Xb=function tj(a){return _i(this.a,a)};var lF=sfb(xve,'ArrayTable/3',2023);feb(2077,2065,Cve);_.$b=function vj(){Ar(this.kc())};_.vc=function wj(){return new gw(this)};_.lc=function xj(){return new Uwb(this.kc(),this.gc())};var pH=sfb(xve,'Maps/IteratorBasedAbstractMap',2077);feb(842,2077,Cve);_.$b=function Bj(){throw Adb(new jib)};_._b=function Cj(a){return En(this.c,a)};_.kc=function Dj(){return new Rj(this,this.c.b.c.gc())};_.lc=function Ej(){return fk(this.c.b.c.gc(),16,new Lj(this))};_.xc=function Fj(a){var b;b=RD(Fn(this.c,a),17);return !b?null:this.vd(b.a)};_.dc=function Gj(){return this.c.b.c.dc()};_.ec=function Hj(){return hn(this.c)};_.zc=function Ij(a,b){var c;c=RD(Fn(this.c,a),17);if(!c){throw Adb(new agb(this.ud()+' '+a+' not in '+hn(this.c)))}return this.wd(c.a,b)};_.Bc=function Jj(a){throw Adb(new jib)};_.gc=function Kj(){return this.c.b.c.gc()};var pF=sfb(xve,'ArrayTable/ArrayMap',842);feb(2020,1,{},Lj);_.td=function Mj(a){return yj(this.a,a)};var mF=sfb(xve,'ArrayTable/ArrayMap/0methodref$getEntry$Type',2020);feb(2018,358,Kve,Nj);_.ld=function Oj(){return zj(this.a,this.b)};_.md=function Pj(){return this.a.vd(this.b)};_.nd=function Qj(a){return this.a.wd(this.b,a)};_.b=0;var nF=sfb(xve,'ArrayTable/ArrayMap/1',2018);feb(2019,399,yve,Rj);_.Xb=function Sj(a){return yj(this.a,a)};var oF=sfb(xve,'ArrayTable/ArrayMap/2',2019);feb(2017,842,Cve,Tj);_.ud=function Uj(){return 'Column'};_.vd=function Vj(a){return Ui(this.b,this.a,a)};_.wd=function Wj(a,b){return cj(this.b,this.a,a,b)};_.a=0;var rF=sfb(xve,'ArrayTable/Row',2017);feb(843,842,Cve,Zj);_.vd=function _j(a){return new Tj(this.a,a)};_.zc=function ak(a,b){return RD(b,85),Xj()};_.wd=function bk(a,b){return RD(b,85),Yj()};_.ud=function $j(){return 'Row'};var qF=sfb(xve,'ArrayTable/RowMap',843);feb(1157,1,Pve,hk);_.Ad=function lk(a){return (this.a.yd()&-262&a)!=0};_.yd=function ik(){return this.a.yd()&-262};_.zd=function jk(){return this.a.zd()};_.Nb=function kk(a){this.a.Nb(new pk(a,this.b))};_.Bd=function mk(a){return this.a.Bd(new nk(a,this.b))};var yF=sfb(xve,'CollectSpliterators/1',1157);feb(1158,1,Qve,nk);_.Cd=function ok(a){this.a.Cd(this.b.Kb(a))};var tF=sfb(xve,'CollectSpliterators/1/lambda$0$Type',1158);feb(1159,1,Qve,pk);_.Cd=function qk(a){this.a.Cd(this.b.Kb(a))};var uF=sfb(xve,'CollectSpliterators/1/lambda$1$Type',1159);feb(1154,1,Pve,rk);_.Ad=function vk(a){return ((16464|this.b)&a)!=0};_.yd=function sk(){return 16464|this.b};_.zd=function tk(){return this.a.zd()};_.Nb=function uk(a){this.a.Qe(new zk(a,this.c))};_.Bd=function wk(a){return this.a.Re(new xk(a,this.c))};_.b=0;var xF=sfb(xve,'CollectSpliterators/1WithCharacteristics',1154);feb(1155,1,Rve,xk);_.Dd=function yk(a){this.a.Cd(this.b.td(a))};var vF=sfb(xve,'CollectSpliterators/1WithCharacteristics/lambda$0$Type',1155);feb(1156,1,Rve,zk);_.Dd=function Ak(a){this.a.Cd(this.b.td(a))};var wF=sfb(xve,'CollectSpliterators/1WithCharacteristics/lambda$1$Type',1156);feb(1150,1,Pve);_.Ad=function Gk(a){return (this.a&a)!=0};_.yd=function Dk(){return this.a};_.zd=function Ek(){!!this.e&&(this.b=Kgb(this.b,this.e.zd()));return Kgb(this.b,0)};_.Nb=function Fk(a){if(this.e){this.e.Nb(a);this.e=null}this.c.Nb(new Kk(this,a));this.b=0};_.Bd=function Hk(a){while(true){if(!!this.e&&this.e.Bd(a)){Pdb(this.b,Sve)&&(this.b=Vdb(this.b,1));return true}else{this.e=null}if(!this.c.Bd(new Ik(this))){return false}}};_.a=0;_.b=0;var CF=sfb(xve,'CollectSpliterators/FlatMapSpliterator',1150);feb(1152,1,Qve,Ik);_.Cd=function Jk(a){Bk(this.a,a)};var zF=sfb(xve,'CollectSpliterators/FlatMapSpliterator/lambda$0$Type',1152);feb(1153,1,Qve,Kk);_.Cd=function Lk(a){Ck(this.a,this.b,a)};var AF=sfb(xve,'CollectSpliterators/FlatMapSpliterator/lambda$1$Type',1153);feb(1151,1150,Pve,Mk);var BF=sfb(xve,'CollectSpliterators/FlatMapSpliteratorOfObject',1151);feb(253,1,Tve);_.Fd=function Sk(a){return this.Ed(RD(a,253))};_.Ed=function Rk(a){var b;if(a==(kl(),jl)){return 1}if(a==(Wk(),Vk)){return -1}b=(ux(),Leb(this.a,a.a));if(b!=0){return b}return ZD(this,526)==ZD(a,526)?0:ZD(this,526)?1:-1};_.Id=function Tk(){return this.a};_.Fb=function Uk(a){return Pk(this,a)};var HF=sfb(xve,'Cut',253);feb(1823,253,Tve,Xk);_.Ed=function Yk(a){return a==this?0:1};_.Gd=function Zk(a){throw Adb(new Ceb)};_.Hd=function $k(a){a.a+='+\u221E)'};_.Id=function _k(){throw Adb(new dgb(Uve))};_.Hb=function al(){return gib(),jFb(this)};_.Jd=function bl(a){return false};_.Ib=function cl(){return '+\u221E'};var Vk;var DF=sfb(xve,'Cut/AboveAll',1823);feb(526,253,{253:1,526:1,3:1,34:1},dl);_.Gd=function el(a){Yhb((a.a+='(',a),this.a)};_.Hd=function fl(a){Thb(Yhb(a,this.a),93)};_.Hb=function gl(){return ~tb(this.a)};_.Jd=function hl(a){return ux(),Leb(this.a,a)<0};_.Ib=function il(){return '/'+this.a+'\\'};var EF=sfb(xve,'Cut/AboveValue',526);feb(1822,253,Tve,ll);_.Ed=function ml(a){return a==this?0:-1};_.Gd=function nl(a){a.a+='(-\u221E'};_.Hd=function ol(a){throw Adb(new Ceb)};_.Id=function pl(){throw Adb(new dgb(Uve))};_.Hb=function ql(){return gib(),jFb(this)};_.Jd=function rl(a){return true};_.Ib=function sl(){return '-\u221E'};var jl;var FF=sfb(xve,'Cut/BelowAll',1822);feb(1824,253,Tve,tl);_.Gd=function ul(a){Yhb((a.a+='[',a),this.a)};_.Hd=function vl(a){Thb(Yhb(a,this.a),41)};_.Hb=function wl(){return tb(this.a)};_.Jd=function xl(a){return ux(),Leb(this.a,a)<=0};_.Ib=function yl(){return '\\'+this.a+'/'};var GF=sfb(xve,'Cut/BelowValue',1824);feb(547,1,Vve);_.Jc=function Bl(a){xgb(this,a)};_.Ib=function Cl(){return Lr(RD(Rb(this,'use Optional.orNull() instead of Optional.or(null)'),20).Kc())};var LF=sfb(xve,'FluentIterable',547);feb(442,547,Vve,Dl);_.Kc=function El(){return new is(Mr(this.a.Kc(),new ir))};var IF=sfb(xve,'FluentIterable/2',442);feb(1059,547,Vve,Gl);_.Kc=function Hl(){return Fl(this)};var KF=sfb(xve,'FluentIterable/3',1059);feb(724,399,yve,Il);_.Xb=function Jl(a){return this.a[a].Kc()};var JF=sfb(xve,'FluentIterable/3/1',724);feb(2070,1,{});_.Ib=function Kl(){return jeb(this.Kd().b)};var SF=sfb(xve,'ForwardingObject',2070);feb(2071,2070,Wve);_.Kd=function Ql(){return this.Ld()};_.Jc=function Rl(a){xgb(this,a)};_.Lc=function Ul(){return this.Oc()};_.Nc=function Xl(){return new Swb(this,0)};_.Oc=function Yl(){return new SDb(null,this.Nc())};_.Fc=function Ll(a){return this.Ld(),qpb()};_.Gc=function Ml(a){return this.Ld(),rpb()};_.$b=function Nl(){this.Ld(),spb()};_.Hc=function Ol(a){return this.Ld().Hc(a)};_.Ic=function Pl(a){return this.Ld().Ic(a)};_.dc=function Sl(){return this.Ld().b.dc()};_.Kc=function Tl(){return this.Ld().Kc()};_.Mc=function Vl(a){return this.Ld(),vpb()};_.gc=function Wl(){return this.Ld().b.gc()};_.Pc=function Zl(){return this.Ld().Pc()};_.Qc=function $l(a){return this.Ld().Qc(a)};var MF=sfb(xve,'ForwardingCollection',2071);feb(2078,31,Xve);_.Kc=function gm(){return this.Od()};_.Fc=function am(a){throw Adb(new jib)};_.Gc=function bm(a){throw Adb(new jib)};_.Md=function cm(){var a;a=this.c;return !a?(this.c=this.Nd()):a};_.$b=function dm(){throw Adb(new jib)};_.Hc=function em(a){return a!=null&&ze(this,a,false)};_.Nd=function fm(){switch(this.gc()){case 0:return tm(),tm(),sm;case 1:return tm(),new Dy(Qb(this.Od().Pb()));default:return new Fx(this,this.Pc());}};_.Mc=function hm(a){throw Adb(new jib)};var lG=sfb(xve,'ImmutableCollection',2078);feb(727,2078,Xve,im);_.Kc=function nm(){return Nr(this.a.Kc())};_.Hc=function jm(a){return a!=null&&this.a.Hc(a)};_.Ic=function km(a){return this.a.Ic(a)};_.dc=function lm(){return this.a.dc()};_.Od=function mm(){return Nr(this.a.Kc())};_.gc=function om(){return this.a.gc()};_.Pc=function pm(){return this.a.Pc()};_.Qc=function qm(a){return this.a.Qc(a)};_.Ib=function rm(){return jeb(this.a)};var NF=sfb(xve,'ForwardingImmutableCollection',727);feb(306,2078,Yve);_.Kc=function Em(){return this.Od()};_.ed=function Fm(){return this.Pd(0)};_.fd=function Hm(a){return this.Pd(a)};_.jd=function Lm(a){tvb(this,a)};_.Nc=function Mm(){return new Swb(this,16)};_.kd=function Om(a,b){return this.Qd(a,b)};_.bd=function wm(a,b){throw Adb(new jib)};_.cd=function xm(a,b){throw Adb(new jib)};_.Md=function ym(){return this};_.Fb=function Am(a){return $u(this,a)};_.Hb=function Bm(){return _u(this)};_.dd=function Cm(a){return a==null?-1:av(this,a)};_.Od=function Dm(){return this.Pd(0)};_.Pd=function Gm(a){return um(this,a)};_.gd=function Jm(a){throw Adb(new jib)};_.hd=function Km(a,b){throw Adb(new jib)};_.Qd=function Nm(a,b){var c;return Pm((c=new pv(this),new Rkb(c,a,b)))};var sm;var qG=sfb(xve,'ImmutableList',306);feb(2105,306,Yve);_.Kc=function Zm(){return Nr(this.Rd().Kc())};_.kd=function an(a,b){return Pm(this.Rd().kd(a,b))};_.Hc=function Rm(a){return a!=null&&this.Rd().Hc(a)};_.Ic=function Sm(a){return this.Rd().Ic(a)};_.Fb=function Tm(a){return pb(this.Rd(),a)};_.Xb=function Um(a){return Qm(this,a)};_.Hb=function Vm(){return tb(this.Rd())};_.dd=function Wm(a){return this.Rd().dd(a)};_.dc=function Xm(){return this.Rd().dc()};_.Od=function Ym(){return Nr(this.Rd().Kc())};_.gc=function $m(){return this.Rd().gc()};_.Qd=function _m(a,b){return Pm(this.Rd().kd(a,b))};_.Pc=function bn(){return this.Rd().Qc($C(jJ,rve,1,this.Rd().gc(),5,1))};_.Qc=function cn(a){return this.Rd().Qc(a)};_.Ib=function dn(){return jeb(this.Rd())};var OF=sfb(xve,'ForwardingImmutableList',2105);feb(729,1,$ve);_.vc=function pn(){return gn(this)};_.wc=function rn(a){Bvb(this,a)};_.ec=function vn(){return hn(this)};_.yc=function wn(a,b,c){return Cvb(this,a,b,c)};_.Cc=function Dn(){return this.Vd()};_.$b=function kn(){throw Adb(new jib)};_._b=function ln(a){return this.xc(a)!=null};_.uc=function mn(a){return this.Vd().Hc(a)};_.Td=function nn(){return new xq(this)};_.Ud=function on(){return new Gq(this)};_.Fb=function qn(a){return Tv(this,a)};_.Hb=function tn(){return gn(this).Hb()};_.dc=function un(){return this.gc()==0};_.zc=function zn(a,b){return jn()};_.Bc=function An(a){throw Adb(new jib)};_.Ib=function Bn(){return Zv(this)};_.Vd=function Cn(){if(this.e){return this.e}return this.e=this.Ud()};_.c=null;_.d=null;_.e=null;var en;var AG=sfb(xve,'ImmutableMap',729);feb(730,729,$ve);_._b=function Hn(a){return En(this,a)};_.uc=function In(a){return pqb(this.b,a)};_.Sd=function Jn(){return go(new Xn(this))};_.Td=function Kn(){return go(sqb(this.b))};_.Ud=function Ln(){return _l(),new im(tqb(this.b))};_.Fb=function Mn(a){return rqb(this.b,a)};_.xc=function Nn(a){return Fn(this,a)};_.Hb=function On(){return tb(this.b.c)};_.dc=function Pn(){return this.b.c.dc()};_.gc=function Qn(){return this.b.c.gc()};_.Ib=function Rn(){return jeb(this.b.c)};var QF=sfb(xve,'ForwardingImmutableMap',730);feb(2072,2071,_ve);_.Kd=function Sn(){return this.Wd()};_.Ld=function Tn(){return this.Wd()};_.Nc=function Wn(){return new Swb(this,1)};_.Fb=function Un(a){return a===this||this.Wd().Fb(a)};_.Hb=function Vn(){return this.Wd().Hb()};var TF=sfb(xve,'ForwardingSet',2072);feb(1085,2072,_ve,Xn);_.Kd=function Zn(){return qqb(this.a.b)};_.Ld=function $n(){return qqb(this.a.b)};_.Hc=function Yn(b){if(ZD(b,44)&&RD(b,44).ld()==null){return false}try{return Pqb(qqb(this.a.b),b)}catch(a){a=zdb(a);if(ZD(a,212)){return false}else throw Adb(a)}};_.Wd=function _n(){return qqb(this.a.b)};_.Qc=function ao(a){var b;b=Qqb(qqb(this.a.b),a);qqb(this.a.b).b.gc()<b.length&&bD(b,qqb(this.a.b).b.gc(),null);return b};var PF=sfb(xve,'ForwardingImmutableMap/1',1085);feb(2079,2078,awe);_.Kc=function eo(){return this.Od()};_.Nc=function fo(){return new Swb(this,1)};_.Fb=function bo(a){return Rx(this,a)};_.Hb=function co(){return Sx(this)};var CG=sfb(xve,'ImmutableSet',2079);feb(719,2079,awe);_.Kc=function no(){return Nr(new Ppb(this.a.b.Kc()))};_.Hc=function io(a){return a!=null&&tpb(this.a,a)};_.Ic=function jo(a){return upb(this.a,a)};_.Hb=function ko(){return tb(this.a.b)};_.dc=function lo(){return this.a.b.dc()};_.Od=function mo(){return Nr(new Ppb(this.a.b.Kc()))};_.gc=function oo(){return this.a.b.gc()};_.Pc=function po(){return this.a.b.Pc()};_.Qc=function qo(a){return wpb(this.a,a)};_.Ib=function ro(){return jeb(this.a.b)};var RF=sfb(xve,'ForwardingImmutableSet',719);feb(2073,2072,bwe);_.Kd=function so(){return this.b};_.Ld=function to(){return this.b};_.Wd=function uo(){return this.b};_.Nc=function vo(){return new $wb(this)};var UF=sfb(xve,'ForwardingSortedSet',2073);feb(543,2077,$ve,Io);_.Ac=function Ro(a){Ld(this,a)};_.Cc=function Uo(){var a;return a=this.d,new Gp(!a?(this.d=new mp(this)):a)};_.$b=function Jo(){wo(this)};_._b=function Ko(a){return !!Go(this,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))))};_.uc=function Lo(a){return xo(this,a)};_.kc=function Mo(){return new ap(this,this)};_.wc=function No(a){zo(this,a)};_.xc=function Oo(a){return Ao(this,a)};_.ec=function Po(){return new Np(this)};_.zc=function Qo(a,b){return Do(this,a,b)};_.Bc=function So(a){var b;b=Go(this,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return null}else{yo(this,b);b.e=null;b.c=null;return b.i}};_.gc=function To(){return this.i};_.xd=function Vo(){var a;return a=this.d,new Gp(!a?(this.d=new mp(this)):a)};_.f=0;_.g=0;_.i=0;var fG=sfb(xve,'HashBiMap',543);feb(544,1,Ave);_.Nb=function Yo(a){Ztb(this,a)};_.Ob=function Zo(){return Wo(this)};_.Pb=function $o(){var a;if(!Wo(this)){throw Adb(new Dvb)}a=RD(Hvb(this.c),302);this.c=a.c;this.f=a;--this.d;return this.Xd(a)};_.Qb=function _o(){if(this.e.g!=this.b){throw Adb(new Jrb)}if(!this.f){throw Adb(new dgb(tve))}yo(this.e,this.f);this.b=this.e.g;this.f=null};_.b=0;_.d=0;_.f=null;var cG=sfb(xve,'HashBiMap/Itr',544);feb(1023,544,Ave,ap);_.Xd=function bp(a){return new cp(this,a)};var WF=sfb(xve,'HashBiMap/1',1023);feb(gwe,358,Kve,cp);_.ld=function dp(){return this.a.g};_.md=function ep(){return this.a.i};_.nd=function fp(a){var b,c,d;c=this.a.i;d=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));if(d==this.a.f&&(dE(a)===dE(c)||a!=null&&pb(a,c))){return a}Nb(!Ho(this.b.a,a,d),a);yo(this.b.a,this.a);b=new kp(this.a.g,this.a.a,a,d);Bo(this.b.a,b,this.a);this.a.e=null;this.a.c=null;this.b.b=this.b.a.g;this.b.f==this.a&&(this.b.f=b);this.a=b;return c};var VF=sfb(xve,'HashBiMap/1/MapEntry',gwe);feb(246,358,{358:1,246:1,3:1,44:1},gp);_.ld=function hp(){return this.g};_.md=function ip(){return this.i};_.nd=function jp(a){throw Adb(new jib)};var mG=sfb(xve,'ImmutableEntry',246);feb(302,246,{358:1,302:1,246:1,3:1,44:1},kp);_.a=0;_.f=0;var XF=sfb(xve,'HashBiMap/BiEntry',302);feb(619,2077,$ve,mp);_.Ac=function vp(a){Ld(this,a)};_.Cc=function yp(){return new Np(this.a)};_.$b=function np(){wo(this.a)};_._b=function op(a){return xo(this.a,a)};_.kc=function pp(){return new Ap(this,this.a)};_.wc=function qp(a){Qb(a);zo(this.a,new Lp(a))};_.xc=function rp(a){return lp(this,a)};_.ec=function sp(){return new Gp(this)};_.zc=function up(a,b){return Eo(this.a,a,b,false)};_.Bc=function wp(a){var b;b=Ho(this.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return null}else{yo(this.a,b);b.e=null;b.c=null;return b.g}};_.gc=function xp(){return this.a.i};_.xd=function zp(){return new Np(this.a)};var bG=sfb(xve,'HashBiMap/Inverse',619);feb(1020,544,Ave,Ap);_.Xd=function Bp(a){return new Cp(this,a)};var ZF=sfb(xve,'HashBiMap/Inverse/1',1020);feb(1021,358,Kve,Cp);_.ld=function Dp(){return this.a.i};_.md=function Ep(){return this.a.g};_.nd=function Fp(a){var b,c,d;d=this.a.g;b=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));if(b==this.a.a&&(dE(a)===dE(d)||a!=null&&pb(a,d))){return a}Nb(!Go(this.b.a.a,a,b),a);yo(this.b.a.a,this.a);c=new kp(a,b,this.a.i,this.a.f);this.a=c;Bo(this.b.a.a,c,null);this.b.b=this.b.a.a.g;return d};var YF=sfb(xve,'HashBiMap/Inverse/1/InverseEntry',1021);feb(620,542,Fve,Gp);_.Kc=function Hp(){return new Jp(this.a.a)};_.Mc=function Ip(a){var b;b=Ho(this.a.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return false}else{yo(this.a.a,b);return true}};var _F=sfb(xve,'HashBiMap/Inverse/InverseKeySet',620);feb(1019,544,Ave,Jp);_.Xd=function Kp(a){return a.i};var $F=sfb(xve,'HashBiMap/Inverse/InverseKeySet/1',1019);feb(1022,1,{},Lp);_.Yd=function Mp(a,b){tp(this.a,a,b)};var aG=sfb(xve,'HashBiMap/Inverse/lambda$0$Type',1022);feb(618,542,Fve,Np);_.Kc=function Op(){return new Qp(this.a)};_.Mc=function Pp(a){var b;b=Go(this.a,a,Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15))));if(!b){return false}else{yo(this.a,b);b.e=null;b.c=null;return true}};var eG=sfb(xve,'HashBiMap/KeySet',618);feb(1018,544,Ave,Qp);_.Xd=function Rp(a){return a.g};var dG=sfb(xve,'HashBiMap/KeySet/1',1018);feb(1123,627,zve);var gG=sfb(xve,'HashMultimapGwtSerializationDependencies',1123);feb(271,1123,zve,Tp);_.hc=function Up(){return new atb(Sv(this.a))};_.pd=function Vp(){return new atb(Sv(this.a))};_.a=2;var hG=sfb(xve,'HashMultimap',271);feb(2097,306,Yve);_.Hc=function Yp(a){return this.Zd().Hc(a)};_.dc=function Zp(){return this.Zd().dc()};_.gc=function $p(){return this.Zd().gc()};var iG=sfb(xve,'ImmutableAsList',2097);feb(2030,730,$ve);_.Vd=function aq(){return _l(),new Fy(this.a)};_.Cc=function bq(){return _l(),new Fy(this.a)};_.xd=function cq(){return _l(),new Fy(this.a)};var jG=sfb(xve,'ImmutableBiMap',2030);feb(2075,1,{});var kG=sfb(xve,'ImmutableCollection/Builder',2075);feb(1035,719,awe,dq);var nG=sfb(xve,'ImmutableEnumSet',1035);feb(980,399,yve,fq);_.Xb=function gq(a){return this.a.Xb(a)};var oG=sfb(xve,'ImmutableList/1',980);feb(979,2075,{},hq);var pG=sfb(xve,'ImmutableList/Builder',979);feb(623,204,wve,iq);_.Ob=function jq(){return this.a.Ob()};_.Pb=function kq(){return RD(this.a.Pb(),44).ld()};var rG=sfb(xve,'ImmutableMap/1',623);feb(1054,1,{},lq);_.Kb=function mq(a){return RD(a,44).ld()};var sG=sfb(xve,'ImmutableMap/2methodref$getKey$Type',1054);feb(1053,1,{},oq);var tG=sfb(xve,'ImmutableMap/Builder',1053);feb(2098,2079,awe);_.Md=function pq(){var a;return a=this.b,!a?(this.b=new Xq(this)):a};_.Nd=function qq(){return new Fx(this,Ee(this,$C(jJ,rve,1,this.gc(),5,1)))};var BG=sfb(xve,'ImmutableSet/CachingAsList',2098);feb(2099,2098,awe);_.Kc=function uq(){var a;return a=gn(this.a).Od(),new iq(a)};_.Nd=function rq(){return new Xq(this)};_.Jc=function sq(a){var b,c;Qb(a);c=this.gc();for(b=0;b<c;b++){a.Cd(RD(gn(this.a).Md().Xb(b),44).ld())}};_.Od=function tq(){var a;return a=this.b,um(!a?(this.b=new Xq(this)):a,0)};_.Nc=function vq(){return fk(this.gc(),1296,new Vq(this))};var FG=sfb(xve,'IndexedImmutableSet',2099);feb(1230,2099,awe,xq);_.Kc=function Bq(){var a;return a=gn(this.a).Od(),new iq(a)};_.Hc=function yq(a){return this.a._b(a)};_.Jc=function zq(a){Qb(a);Bvb(this.a,new Eq(a))};_.Od=function Aq(){var a;return a=gn(this.a).Od(),new iq(a)};_.gc=function Cq(){return this.a.gc()};_.Nc=function Dq(){return gk(gn(this.a).Nc(),new lq)};var vG=sfb(xve,'ImmutableMapKeySet',1230);feb(1231,1,{},Eq);_.Yd=function Fq(a,b){_l();this.a.Cd(a)};var uG=sfb(xve,'ImmutableMapKeySet/lambda$0$Type',1231);feb(1227,2078,Xve,Gq);_.Kc=function Kq(){return new Pq(this)};_.Md=function Hq(){var a;a=gn(this.a).Md();return new Sq(this,a)};_.Hc=function Iq(a){return a!=null&&Br(new Pq(this),a)};_.Od=function Jq(){return new Pq(this)};_.gc=function Lq(){return this.a.gc()};_.Nc=function Mq(){return gk(gn(this.a).Nc(),new Nq)};var zG=sfb(xve,'ImmutableMapValues',1227);feb(1228,1,{},Nq);_.Kb=function Oq(a){return RD(a,44).md()};var wG=sfb(xve,'ImmutableMapValues/0methodref$getValue$Type',1228);feb(637,204,wve,Pq);_.Ob=function Qq(){return this.a.Ob()};_.Pb=function Rq(){return RD(this.a.Pb(),44).md()};var xG=sfb(xve,'ImmutableMapValues/1',637);feb(1229,2097,Yve,Sq);_.Zd=function Tq(){return this.a};_.Xb=function Uq(a){return RD(this.b.Xb(a),44).md()};var yG=sfb(xve,'ImmutableMapValues/2',1229);feb(1232,1,{},Vq);_.td=function Wq(a){return wq(this.a,a)};var DG=sfb(xve,'IndexedImmutableSet/0methodref$get$Type',1232);feb(638,2097,Yve,Xq);_.Zd=function Yq(){return this.a};_.Xb=function Zq(a){return wq(this.a,a)};_.gc=function $q(){return this.a.a.gc()};var EG=sfb(xve,'IndexedImmutableSet/1',638);feb(43,1,{},ir);_.Kb=function jr(a){return RD(a,20).Kc()};_.Fb=function kr(a){return this===a};var GG=sfb(xve,'Iterables/10',43);feb(1055,547,Vve,mr);_.Jc=function nr(a){Qb(a);this.b.Jc(new qr(this.a,a))};_.Kc=function or(){return lr(this)};var IG=sfb(xve,'Iterables/4',1055);feb(1056,1,Qve,qr);_.Cd=function rr(a){pr(this.b,this.a,a)};var HG=sfb(xve,'Iterables/4/lambda$0$Type',1056);feb(1057,547,Vve,sr);_.Jc=function tr(a){Qb(a);xgb(this.a,new vr(a,this.b))};_.Kc=function ur(){return Mr(new dMd(this.a),this.b)};var KG=sfb(xve,'Iterables/5',1057);feb(1058,1,Qve,vr);_.Cd=function wr(a){this.a.Cd(Ksd(a))};var JG=sfb(xve,'Iterables/5/lambda$0$Type',1058);feb(1087,204,wve,Or);_.Ob=function Pr(){return this.a.Ob()};_.Pb=function Qr(){return this.a.Pb()};var LG=sfb(xve,'Iterators/1',1087);feb(1088,713,wve,Rr);_.Yb=function Sr(){var a;while(this.b.Ob()){a=this.b.Pb();if(this.a.Lb(a)){return a}}return this.e=2,null};var MG=sfb(xve,'Iterators/5',1088);feb(496,1,Ave);_.Nb=function Ur(a){Ztb(this,a)};_.Ob=function Vr(){return this.b.Ob()};_.Pb=function Wr(){return this.$d(this.b.Pb())};_.Qb=function Xr(){this.b.Qb()};var cI=sfb(xve,'TransformedIterator',496);feb(1089,496,Ave,Yr);_.$d=function Zr(a){return this.a.Kb(a)};var NG=sfb(xve,'Iterators/6',1089);feb(732,204,wve,$r);_.Ob=function _r(){return !this.a};_.Pb=function as(){if(this.a){throw Adb(new Dvb)}this.a=true;return this.b};_.a=false;var OG=sfb(xve,'Iterators/9',732);feb(1086,399,yve,ds);_.Xb=function es(a){return this.a[this.b+a]};_.b=0;var bs;var PG=sfb(xve,'Iterators/ArrayItr',1086);feb(37,1,{37:1,51:1},is);_.Nb=function js(a){Ztb(this,a)};_.Ob=function ks(){return gs(this)};_.Pb=function ls(){return hs(this)};_.Qb=function ms(){if(!this.c){throw Adb(new dgb(tve))}this.c.Qb();this.c=null};var QG=sfb(xve,'Iterators/ConcatenatedIterator',37);feb(22,1,{3:1,34:1,22:1});_.Fd=function rs(a){return ns(this,RD(a,22))};_.Fb=function ts(a){return this===a};_.Hb=function us(){return kFb(this)};_.Ib=function vs(){return ps(this)};_.g=0;var WI=sfb(mve,'Enum',22);feb(549,22,{549:1,3:1,34:1,22:1,51:1},As);_.Nb=function Bs(a){Ztb(this,a)};_.Ob=function Cs(){return false};_.Pb=function Ds(){throw Adb(new Dvb)};_.Qb=function Es(){Vb(false)};var ys;var RG=tfb(xve,'Iterators/EmptyModifiableIterator',549,WI,Gs,Fs);var Hs;feb(1907,627,zve);var XG=sfb(xve,'LinkedHashMultimapGwtSerializationDependencies',1907);feb(1908,1907,zve,Ks);_.hc=function Ms(){return new Jub(Sv(this.b))};_.$b=function Ls(){Nc(this);Ss(this.a,this.a)};_.pd=function Ns(){return new Jub(Sv(this.b))};_.ic=function Os(a){return new it(this,a,this.b)};_.kc=function Ps(){return new Zs(this)};_.lc=function Qs(){var a;return new Swb((a=this.g,RD(!a?(this.g=new xh(this)):a,21)),17)};_.ec=function Rs(){var a;return a=this.i,!a?(this.i=new zf(this,this.c)):a};_.nc=function Us(){return new cw(new Zs(this))};_.oc=function Vs(){var a;return gk(new Swb((a=this.g,RD(!a?(this.g=new xh(this)):a,21)),17),new Ws)};_.b=2;var YG=sfb(xve,'LinkedHashMultimap',1908);feb(1911,1,{},Ws);_.Kb=function Xs(a){return RD(a,44).md()};var SG=sfb(xve,'LinkedHashMultimap/0methodref$getValue$Type',1911);feb(834,1,Ave,Zs);_.Nb=function $s(a){Ztb(this,a)};_.Pb=function at(){return Ys(this)};_.Ob=function _s(){return this.a!=this.b.a};_.Qb=function bt(){Vb(!!this.c);Gc(this.b,this.c.g,this.c.i);this.c=null};var TG=sfb(xve,'LinkedHashMultimap/1',834);feb(227,246,{358:1,246:1,227:1,604:1,3:1,44:1},ct);_._d=function dt(){return RD(Hvb(this.f),604)};_.ae=function et(a){this.c=a};_.be=function ft(a){this.f=a};_.d=0;var UG=sfb(xve,'LinkedHashMultimap/ValueEntry',227);feb(1909,2068,{604:1,20:1,31:1,16:1,21:1},it);_.Fc=function jt(a){var b,c,d,e,f;f=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));b=f&this.b.length-1;e=this.b[b];for(c=e;c;c=c.a){if(c.d==f&&Hb(c.i,a)){return false}}d=new ct(this.c,a,f,e);Ts(this.d,d);d.f=this;this.d=d;Ss(RD(Hvb(this.g.a.b),227),d);Ss(d,this.g.a);this.b[b]=d;++this.f;++this.e;gt(this);return true};_.$b=function kt(){var a,b;Mnb(this.b,null);this.f=0;for(a=this.a;a!=this;a=a._d()){b=RD(a,227);Ss(RD(Hvb(b.b),227),RD(Hvb(b.e),227))}this.a=this;this.d=this;++this.e};_.Hc=function lt(a){var b,c;c=Ydb(Ndb(cwe,qgb(Ydb(Ndb(a==null?0:tb(a),dwe)),15)));for(b=this.b[c&this.b.length-1];b;b=b.a){if(b.d==c&&Hb(b.i,a)){return true}}return false};_.Jc=function mt(a){var b;Qb(a);for(b=this.a;b!=this;b=b._d()){a.Cd(RD(b,227).i)}};_._d=function nt(){return this.a};_.Kc=function ot(){return new ut(this)};_.Mc=function pt(a){return ht(this,a)};_.ae=function qt(a){this.d=a};_.be=function rt(a){this.a=a};_.gc=function st(){return this.f};_.e=0;_.f=0;var WG=sfb(xve,'LinkedHashMultimap/ValueSet',1909);feb(1910,1,Ave,ut);_.Nb=function vt(a){Ztb(this,a)};_.Ob=function wt(){return tt(this),this.b!=this.c};_.Pb=function xt(){var a,b;tt(this);if(this.b==this.c){throw Adb(new Dvb)}a=RD(this.b,227);b=a.i;this.d=a;this.b=RD(Hvb(a.f),604);return b};_.Qb=function yt(){tt(this);Vb(!!this.d);ht(this.c,this.d.i);this.a=this.c.e;this.d=null};_.a=0;var VG=sfb(xve,'LinkedHashMultimap/ValueSet/1',1910);feb(780,2084,zve,Et);_.Zb=function Ft(){var a;return a=this.f,!a?(this.f=new zw(this)):a};_.Fb=function Kt(a){return xw(this,a)};_.cc=function Lt(a){return new su(this,a)};_.fc=function Ot(a){return Ct(this,a)};_.$b=function Gt(){At(this)};_._b=function Ht(a){return Bt(this,a)};_.ac=function It(){return new zw(this)};_.bc=function Jt(){return new vu(this)};_.qc=function Mt(a){return new su(this,a)};_.dc=function Nt(){return !this.a};_.rc=function Pt(a){return Ct(this,a)};_.gc=function Qt(){return this.d};_.c=0;_.d=0;var dH=sfb(xve,'LinkedListMultimap',780);feb(56,31,kwe);_.jd=function eu(a){tvb(this,a)};_.Nc=function fu(){return new Swb(this,16)};_.bd=function Tt(a,b){throw Adb(new kib('Add not supported on this list'))};_.Fc=function Ut(a){this.bd(this.gc(),a);return true};_.cd=function Vt(a,b){var c,d,e;uFb(b);c=false;for(e=b.Kc();e.Ob();){d=e.Pb();this.bd(a++,d);c=true}return c};_.$b=function Wt(){this.ce(0,this.gc())};_.Fb=function Xt(a){return Rt(this,a)};_.Hb=function Yt(){return Cob(this)};_.dd=function Zt(a){return St(this,a)};_.Kc=function $t(){return new Dkb(this)};_.ed=function _t(){return this.fd(0)};_.fd=function au(a){return new Jkb(this,a)};_.gd=function bu(a){throw Adb(new kib('Remove not supported on this list'))};_.ce=function cu(a,b){var c,d;d=this.fd(a);for(c=a;c<b;++c){d.Pb();d.Qb()}};_.hd=function du(a,b){throw Adb(new kib('Set not supported on this list'))};_.kd=function gu(a,b){return new Rkb(this,a,b)};_.j=0;var CJ=sfb(Bve,'AbstractList',56);feb(2062,56,kwe);_.bd=function lu(a,b){hu(this,a,b)};_.cd=function mu(a,b){return iu(this,a,b)};_.Xb=function nu(a){return ju(this,a)};_.Kc=function ou(){return this.fd(0)};_.gd=function pu(a){return ku(this,a)};_.hd=function qu(b,c){var d,e;d=this.fd(b);try{e=d.Pb();d.Wb(c);return e}catch(a){a=zdb(a);if(ZD(a,112)){throw Adb(new veb("Can't set element "+b))}else throw Adb(a)}};var QJ=sfb(Bve,'AbstractSequentialList',2062);feb(646,2062,kwe,su);_.fd=function tu(a){return ru(this,a)};_.gc=function uu(){var a;a=RD(Wjb(this.a.b,this.b),260);return !a?0:a.a};var $G=sfb(xve,'LinkedListMultimap/1',646);feb(1316,2068,Fve,vu);_.Hc=function wu(a){return Bt(this.a,a)};_.Kc=function xu(){return new Bu(this.a)};_.Mc=function yu(a){return !Ct(this.a,a).a.dc()};_.gc=function zu(){return bkb(this.a.b)};var ZG=sfb(xve,'LinkedListMultimap/1KeySetImpl',1316);feb(1315,1,Ave,Bu);_.Nb=function Cu(a){Ztb(this,a)};_.Ob=function Du(){Au(this);return !!this.c};_.Pb=function Eu(){Au(this);if(!this.c){throw Adb(new Dvb)}this.a=this.c;Ysb(this.d,this.a.a);do{this.c=this.c.b}while(!!this.c&&!Ysb(this.d,this.c.a));return this.a.a};_.Qb=function Fu(){Au(this);Vb(!!this.a);Ar(new Nu(this.e,this.a.a));this.a=null;this.b=this.e.c};_.b=0;var _G=sfb(xve,'LinkedListMultimap/DistinctKeyIterator',1315);feb(260,1,{260:1},Gu);_.a=0;var aH=sfb(xve,'LinkedListMultimap/KeyList',260);feb(511,358,{358:1,511:1,44:1},Hu);_.ld=function Iu(){return this.a};_.md=function Ju(){return this.f};_.nd=function Ku(a){var b;b=this.f;this.f=a;return b};var bH=sfb(xve,'LinkedListMultimap/Node',511);feb(566,1,Jve,Nu,Ou);_.Nb=function Qu(a){Ztb(this,a)};_.Rb=function Pu(a){this.e=zt(this.f,this.b,a,this.c);++this.d;this.a=null};_.Ob=function Ru(){return !!this.c};_.Sb=function Su(){return !!this.e};_.Pb=function Tu(){return Lu(this)};_.Tb=function Uu(){return this.d};_.Ub=function Vu(){return Mu(this)};_.Vb=function Wu(){return this.d-1};_.Qb=function Xu(){Vb(!!this.a);if(this.a!=this.c){this.e=this.a.e;--this.d}else{this.c=this.a.c}Dt(this.f,this.a);this.a=null};_.Wb=function Yu(a){Ub(!!this.a);this.a.f=a};_.d=0;var cH=sfb(xve,'LinkedListMultimap/ValueForKeyIterator',566);feb(1031,56,kwe);_.bd=function iv(a,b){this.a.bd(a,b)};_.cd=function jv(a,b){return this.a.cd(a,b)};_.Hc=function kv(a){return this.a.Hc(a)};_.Xb=function lv(a){return this.a.Xb(a)};_.gd=function mv(a){return this.a.gd(a)};_.hd=function nv(a,b){return this.a.hd(a,b)};_.gc=function ov(){return this.a.gc()};var fH=sfb(xve,'Lists/AbstractListWrapper',1031);feb(1032,1031,mwe);var gH=sfb(xve,'Lists/RandomAccessListWrapper',1032);feb(1034,1032,mwe,pv);_.fd=function qv(a){return this.a.fd(a)};var eH=sfb(xve,'Lists/1',1034);feb(441,56,{441:1,20:1,31:1,56:1,16:1,15:1},uv);_.bd=function vv(a,b){this.a.bd(tv(this,a),b)};_.$b=function wv(){this.a.$b()};_.Xb=function xv(a){return this.a.Xb(sv(this,a))};_.Kc=function yv(){return rv(this,0)};_.fd=function zv(a){return rv(this,a)};_.gd=function Av(a){return this.a.gd(sv(this,a))};_.ce=function Bv(a,b){(Tb(a,b,this.a.gc()),hv(this.a.kd(tv(this,b),tv(this,a)))).$b()};_.hd=function Cv(a,b){return this.a.hd(sv(this,a),b)};_.gc=function Dv(){return this.a.gc()};_.kd=function Ev(a,b){return Tb(a,b,this.a.gc()),hv(this.a.kd(tv(this,b),tv(this,a)))};var jH=sfb(xve,'Lists/ReverseList',441);feb(1030,441,{441:1,20:1,31:1,56:1,16:1,15:1,59:1},Fv);var hH=sfb(xve,'Lists/RandomAccessReverseList',1030);feb(1033,1,Jve,Gv);_.Nb=function Iv(a){Ztb(this,a)};_.Rb=function Hv(a){this.c.Rb(a);this.c.Ub();this.a=false};_.Ob=function Jv(){return this.c.Sb()};_.Sb=function Kv(){return this.c.Ob()};_.Pb=function Lv(){if(!this.c.Sb()){throw Adb(new Dvb)}this.a=true;return this.c.Ub()};_.Tb=function Mv(){return tv(this.b,this.c.Tb())};_.Ub=function Nv(){if(!this.c.Ob()){throw Adb(new Dvb)}this.a=true;return this.c.Pb()};_.Vb=function Ov(){return tv(this.b,this.c.Tb())-1};_.Qb=function Pv(){Vb(this.a);this.c.Qb();this.a=false};_.Wb=function Qv(a){Ub(this.a);this.c.Wb(a)};_.a=false;var iH=sfb(xve,'Lists/ReverseList/1',1033);feb(440,496,Ave,aw);_.$d=function bw(a){return _v(a)};var kH=sfb(xve,'Maps/1',440);feb(712,496,Ave,cw);_.$d=function dw(a){return RD(a,44).md()};var lH=sfb(xve,'Maps/2',712);feb(975,496,Ave,ew);_.$d=function fw(a){return new gp(a,Mw(this.a,a))};var mH=sfb(xve,'Maps/3',975);feb(972,2069,Fve,gw);_.Jc=function hw(a){uj(this.a,a)};_.Kc=function iw(){return this.a.kc()};_.Rc=function jw(){return this.a};_.Nc=function kw(){return this.a.lc()};var oH=sfb(xve,'Maps/IteratorBasedAbstractMap/1',972);feb(973,1,{},lw);_.Yd=function mw(a,b){this.a.Cd(a)};var qH=sfb(xve,'Maps/KeySet/lambda$0$Type',973);feb(971,31,Dve,nw);_.$b=function ow(){this.a.$b()};_.Hc=function pw(a){return this.a.uc(a)};_.Jc=function qw(a){Qb(a);this.a.wc(new vw(a))};_.dc=function rw(){return this.a.dc()};_.Kc=function sw(){return new cw(this.a.vc().Kc())};_.Mc=function tw(b){var c,d;try{return ze(this,b,true)}catch(a){a=zdb(a);if(ZD(a,48)){for(d=this.a.vc().Kc();d.Ob();){c=RD(d.Pb(),44);if(Hb(b,c.md())){this.a.Bc(c.ld());return true}}return false}else throw Adb(a)}};_.gc=function uw(){return this.a.gc()};var tH=sfb(xve,'Maps/Values',971);feb(974,1,{},vw);_.Yd=function ww(a,b){this.a.Cd(b)};var sH=sfb(xve,'Maps/Values/lambda$0$Type',974);feb(752,2085,Cve,zw);_.xc=function Dw(a){return this.a._b(a)?this.a.cc(a):null};_.Bc=function Gw(a){return this.a._b(a)?this.a.fc(a):null};_.$b=function Aw(){this.a.$b()};_._b=function Bw(a){return this.a._b(a)};_.Ec=function Cw(){return new Iw(this)};_.Dc=function(){return this.Ec()};_.dc=function Ew(){return this.a.dc()};_.ec=function Fw(){return this.a.ec()};_.gc=function Hw(){return this.a.ec().gc()};var xH=sfb(xve,'Multimaps/AsMap',752);feb(1134,2069,Fve,Iw);_.Kc=function Jw(){return Rv(this.a.a.ec(),new Nw(this))};_.Rc=function Kw(){return this.a};_.Mc=function Lw(a){var b;if(!Ze(this,a)){return false}b=RD(Hvb(RD(a,44)),44);yw(this.a,b.ld());return true};var wH=sfb(xve,'Multimaps/AsMap/EntrySet',1134);feb(1138,1,{},Nw);_.Kb=function Ow(a){return Mw(this,a)};_.Fb=function Pw(a){return this===a};var vH=sfb(xve,'Multimaps/AsMap/EntrySet/1',1138);feb(552,2087,{552:1,849:1,20:1,31:1,16:1},Sw);_.$b=function Tw(){Nc(this.a)};_.Hc=function Uw(a){return Oc(this.a,a)};_.Jc=function Vw(a){Qb(a);xgb(Pc(this.a),new fx(a))};_.Kc=function Ww(){return new aw(Pc(this.a).a.kc())};_.gc=function Xw(){return this.a.d};_.Nc=function Yw(){return gk(Pc(this.a).Nc(),new Zw)};var DH=sfb(xve,'Multimaps/Keys',552);feb(1136,1,{},Zw);_.Kb=function $w(a){return RD(a,44).ld()};var zH=sfb(xve,'Multimaps/Keys/0methodref$getKey$Type',1136);feb(1135,496,Ave,_w);_.$d=function ax(a){return new ex(RD(a,44))};var BH=sfb(xve,'Multimaps/Keys/1',1135);feb(2088,1,{425:1});_.Fb=function bx(a){var b;if(ZD(a,503)){b=RD(a,425);return RD(this.a.md(),16).gc()==RD(b.a.md(),16).gc()&&Hb(this.a.ld(),b.a.ld())}return false};_.Hb=function cx(){var a;a=this.a.ld();return (a==null?0:tb(a))^RD(this.a.md(),16).gc()};_.Ib=function dx(){var a,b;b=Ghb(this.a.ld());a=RD(this.a.md(),16).gc();return a==1?b:b+' x '+a};var HH=sfb(xve,'Multisets/AbstractEntry',2088);feb(503,2088,{503:1,425:1},ex);var AH=sfb(xve,'Multimaps/Keys/1/1',503);feb(1137,1,Qve,fx);_.Cd=function gx(a){this.a.Cd(RD(a,44).ld())};var CH=sfb(xve,'Multimaps/Keys/lambda$1$Type',1137);feb(1140,1,Qve,jx);_.Cd=function kx(a){hx(RD(a,425))};var EH=sfb(xve,'Multiset/lambda$0$Type',1140);feb(753,1,Qve,lx);_.Cd=function mx(a){ix(this.a,RD(a,425))};var FH=sfb(xve,'Multiset/lambda$1$Type',753);feb(1141,1,{},rx);var GH=sfb(xve,'Multisets/0methodref$add$Type',1141);feb(754,1,{},sx);_.Kb=function tx(a){return px(RD(a,425))};var JH=sfb(xve,'Multisets/lambda$1$Type',754);feb(2106,1,nve);var KH=sfb(xve,'RangeGwtSerializationDependencies',2106);feb(521,2106,{178:1,521:1,3:1,46:1},wx);_.Lb=function xx(a){return vx(this,RD(a,34))};_.Mb=function Bx(a){return vx(this,RD(a,34))};_.Fb=function zx(a){var b;if(ZD(a,521)){b=RD(a,521);return Pk(this.a,b.a)&&Pk(this.b,b.b)}return false};_.Hb=function Ax(){return this.a.Hb()*31+this.b.Hb()};_.Ib=function Cx(){return Dx(this.a,this.b)};var LH=sfb(xve,'Range',521);feb(654,2097,Yve,Fx);_.fd=function Jx(a){return um(this.b,a)};_.Zd=function Gx(){return this.a};_.Xb=function Hx(a){return Qm(this.b,a)};_.Pd=function Ix(a){return um(this.b,a)};var MH=sfb(xve,'RegularImmutableAsList',654);feb(656,2105,Yve,Kx);_.Rd=function Lx(){return this.a};var NH=sfb(xve,'RegularImmutableList',656);feb(548,730,$ve,Mx,Nx);var OH=sfb(xve,'RegularImmutableMap',548);feb(731,719,awe,Qx);var Ox;var PH=sfb(xve,'RegularImmutableSet',731);feb(2074,Eve,Fve);_.Kc=function by(){return new oy(this.a,this.b)};_.Fc=function $x(a){throw Adb(new jib)};_.Gc=function _x(a){throw Adb(new jib)};_.$b=function ay(){throw Adb(new jib)};_.Mc=function cy(a){throw Adb(new jib)};var VH=sfb(xve,'Sets/SetView',2074);feb(976,2074,Fve,ey);_.Kc=function iy(){return new oy(this.a,this.b)};_.Hc=function fy(a){return Bsb(this.a,a)&&this.b.Hc(a)};_.Ic=function gy(a){return Be(this.a,a)&&this.b.Ic(a)};_.dc=function hy(){return Aob(this.b,this.a)};_.Lc=function jy(){return CDb(new SDb(null,new Swb(this.a,1)),new qy(this.b))};_.gc=function ky(){return dy(this)};_.Oc=function ly(){return CDb(new SDb(null,new Swb(this.a,1)),new my(this.b))};var TH=sfb(xve,'Sets/2',976);feb(977,1,nwe,my);_.Mb=function ny(a){return this.a.Hc(a)};var QH=sfb(xve,'Sets/2/0methodref$contains$Type',977);feb(714,713,wve,oy);_.Yb=function py(){var a;while(Msb(this.a)){a=Nsb(this.a);if(this.c.Hc(a)){return a}}return this.e=2,null};var RH=sfb(xve,'Sets/2/1',714);feb(978,1,nwe,qy);_.Mb=function ry(a){return this.a.Hc(a)};var SH=sfb(xve,'Sets/2/1methodref$contains$Type',978);feb(616,2073,{616:1,3:1,20:1,16:1,277:1,21:1,87:1},sy);_.Kd=function ty(){return this.b};_.Ld=function uy(){return this.b};_.Wd=function vy(){return this.b};_.Jc=function wy(a){this.a.Jc(a)};_.Lc=function xy(){return this.a.Lc()};_.Oc=function yy(){return this.a.Oc()};var WH=sfb(xve,'Sets/UnmodifiableNavigableSet',616);feb(2031,2030,$ve,zy);_.Vd=function Ay(){return _l(),new Fy(this.a)};_.Cc=function By(){return _l(),new Fy(this.a)};_.xd=function Cy(){return _l(),new Fy(this.a)};var XH=sfb(xve,'SingletonImmutableBiMap',2031);feb(657,2105,Yve,Dy);_.Rd=function Ey(){return this.a};var YH=sfb(xve,'SingletonImmutableList',657);feb(363,2079,awe,Fy);_.Kc=function Iy(){return new $r(this.a)};_.Hc=function Gy(a){return pb(this.a,a)};_.Od=function Hy(){return new $r(this.a)};_.gc=function Jy(){return 1};var ZH=sfb(xve,'SingletonImmutableSet',363);feb(1148,1,{},My);_.Kb=function Ny(a){return RD(a,159)};var _H=sfb(xve,'Streams/lambda$0$Type',1148);feb(1149,1,owe,Oy);_.de=function Py(){Ky(this.a)};var aI=sfb(xve,'Streams/lambda$1$Type',1149);feb(1725,1724,zve,Ry);_.Zb=function Sy(){var a;return a=this.f,RD(RD(!a?(this.f=ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)):a,133),139)};_.hc=function Vy(){return new yAb(this.b)};_.pd=function Wy(){return new yAb(this.b)};_.ec=function Yy(){var a;return a=this.i,RD(RD(!a?(this.i=ZD(this.c,139)?new gg(this,RD(this.c,139)):ZD(this.c,133)?new eg(this,RD(this.c,133)):new zf(this,this.c)):a,87),277)};_.ac=function Uy(){return ZD(this.c,139)?new Uf(this,RD(this.c,139)):ZD(this.c,133)?new Mf(this,RD(this.c,133)):new ne(this,this.c)};_.ic=function Xy(a){a==null&&this.a.Ne(a,a);return new yAb(this.b)};var dI=sfb(xve,'TreeMultimap',1725);feb(82,1,{3:1,82:1});_.ee=function pz(a){return new Error(a)};_.fe=function rz(){return this.e};_.ge=function sz(){var a,b,c;c=(this.k==null&&(this.k=$C(rJ,Nve,82,0,0,1)),this.k);b=$C(jJ,rve,1,c.length,5,1);for(a=0;a<c.length;a++){b[a]=c[a].e}return b};_.he=function tz(){return this.f};_.ie=function uz(){return this.g};_.je=function vz(){kz(this,qz(this.ee(lz(this,this.g))));gA(this)};_.Ib=function wz(){return lz(this,this.ie())};_.e=rwe;_.i=false;_.n=true;var rJ=sfb(mve,'Throwable',82);feb(103,82,{3:1,103:1,82:1});var YI=sfb(mve,'Exception',103);feb(63,103,swe,xz,yz);var kJ=sfb(mve,'RuntimeException',63);feb(607,63,swe);var dJ=sfb(mve,'JsException',607);feb(875,607,swe);var jI=sfb(twe,'JavaScriptExceptionBase',875);feb(485,875,{485:1,3:1,103:1,63:1,82:1},Cz);_.ie=function Fz(){Bz(this);return this.c};_.ke=function Gz(){return dE(this.b)===dE(zz)?null:this.b};var zz;var gI=sfb(vwe,'JavaScriptException',485);var hI=sfb(vwe,'JavaScriptObject$',0);var Jz;feb(2047,1,{});var iI=sfb(vwe,'Scheduler',2047);var Nz=0,Oz=0,Pz=-1;feb(902,2047,{},bA);var Zz;var kI=sfb(twe,'SchedulerImpl',902);var eA;feb(2058,1,{});var oI=sfb(twe,'StackTraceCreator/Collector',2058);feb(876,2058,{},mA);_.le=function nA(a){var b={},j;var c=[];a[xwe]=c;var d=arguments.callee.caller;while(d){var e=(fA(),d.name||(d.name=iA(d.toString())));c.push(e);var f=':'+e;var g=b[f];if(g){var h,i;for(h=0,i=g.length;h<i;h++){if(g[h]===d){return}}}(g||(b[f]=[])).push(d);d=d.caller}};_.me=function oA(a){var b,c,d,e;d=(fA(),a&&a[xwe]?a[xwe]:[]);c=d.length;e=$C(mJ,Nve,319,c,0,1);for(b=0;b<c;b++){e[b]=new ehb(d[b],null,-1)}return e};var lI=sfb(twe,'StackTraceCreator/CollectorLegacy',876);feb(2059,2058,{});_.le=function qA(a){};_.ne=function rA(a,b,c,d){return new ehb(b,a+'@'+d,c<0?-1:c)};_.me=function sA(a){var b,c,d,e,f,g;e=kA(a);f=$C(mJ,Nve,319,0,0,1);b=0;d=e.length;if(d==0){return f}g=pA(this,e[0]);lhb(g.d,wwe)||(f[b++]=g);for(c=1;c<d;c++){f[b++]=pA(this,e[c])}return f};var nI=sfb(twe,'StackTraceCreator/CollectorModern',2059);feb(877,2059,{},tA);_.ne=function uA(a,b,c,d){return new ehb(b,a,-1)};var mI=sfb(twe,'StackTraceCreator/CollectorModernNoSourceMap',877);feb(1064,1,{});var vI=sfb(Zwe,$we,1064);feb(624,1064,{624:1},XA);var VA;var pI=sfb(_we,$we,624);feb(2101,1,{});var wI=sfb(Zwe,axe,2101);feb(2102,2101,{});var qI=sfb(_we,axe,2102);feb(1120,1,{},aB);var ZA;var rI=sfb(_we,'LocaleInfo',1120);feb(2027,1,{},dB);_.a=0;var sI=sfb(_we,'TimeZone',2027);feb(1293,2102,{},jB);var tI=sfb('com.google.gwt.i18n.client.impl.cldr','DateTimeFormatInfoImpl',1293);feb(443,1,{443:1},kB);_.a=false;_.b=0;var uI=sfb(Zwe,'DateTimeFormat/PatternPart',443);feb(206,1,bxe,uB,vB,wB);_.Fd=function xB(a){return lB(this,RD(a,206))};_.Fb=function yB(a){return ZD(a,206)&&Gdb(Hdb(this.q.getTime()),Hdb(RD(a,206).q.getTime()))};_.Hb=function zB(){var a;a=Hdb(this.q.getTime());return Ydb($db(a,Udb(a,32)))};_.Ib=function BB(){var a,b,c;c=-this.q.getTimezoneOffset();a=(c>=0?'+':'')+(c/60|0);b=AB($wnd.Math.abs(c)%60);return (Mrb(),Krb)[this.q.getDay()]+' '+Lrb[this.q.getMonth()]+' '+AB(this.q.getDate())+' '+AB(this.q.getHours())+':'+AB(this.q.getMinutes())+':'+AB(this.q.getSeconds())+' GMT'+a+b+' '+this.q.getFullYear()};var qK=sfb(Bve,'Date',206);feb(2015,206,bxe,DB);_.a=false;_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;_.g=false;_.i=0;_.j=0;_.k=0;_.n=0;_.o=0;_.p=0;var xI=sfb('com.google.gwt.i18n.shared.impl','DateRecord',2015);feb(2064,1,{});_.pe=function EB(){return null};_.qe=function FB(){return null};_.re=function GB(){return null};_.se=function HB(){return null};_.te=function IB(){return null};var GI=sfb(cxe,'JSONValue',2064);feb(221,2064,{221:1},MB,NB);_.Fb=function OB(a){if(!ZD(a,221)){return false}return Hz(this.a,RD(a,221).a)};_.oe=function PB(){return TB};_.Hb=function QB(){return Iz(this.a)};_.pe=function RB(){return this};_.Ib=function SB(){var a,b,c;c=new dib('[');for(b=0,a=this.a.length;b<a;b++){b>0&&(c.a+=',',c);Yhb(c,JB(this,b))}c.a+=']';return c.a};var yI=sfb(cxe,'JSONArray',221);feb(492,2064,{492:1},XB);_.oe=function YB(){return _B};_.qe=function ZB(){return this};_.Ib=function $B(){return Geb(),''+this.a};_.a=false;var UB,VB;var zI=sfb(cxe,'JSONBoolean',492);feb(997,63,swe,aC);var AI=sfb(cxe,'JSONException',997);feb(1036,2064,{},dC);_.oe=function eC(){return gC};_.Ib=function fC(){return vve};var bC;var BI=sfb(cxe,'JSONNull',1036);feb(263,2064,{263:1},hC);_.Fb=function iC(a){if(!ZD(a,263)){return false}return this.a==RD(a,263).a};_.oe=function jC(){return nC};_.Hb=function kC(){return Nfb(this.a)};_.re=function lC(){return this};_.Ib=function mC(){return this.a+''};_.a=0;var CI=sfb(cxe,'JSONNumber',263);feb(190,2064,{190:1},uC,vC);_.Fb=function wC(a){if(!ZD(a,190)){return false}return Hz(this.a,RD(a,190).a)};_.oe=function xC(){return BC};_.Hb=function yC(){return Iz(this.a)};_.se=function zC(){return this};_.Ib=function AC(){var a,b,c,d,e,f,g;g=new dib('{');a=true;f=oC(this,$C(qJ,Nve,2,0,6,1));for(c=f,d=0,e=c.length;d<e;++d){b=c[d];a?(a=false):(g.a+=pve,g);Zhb(g,Lz(b));g.a+=':';Yhb(g,qC(this,b))}g.a+='}';return g.a};var EI=sfb(cxe,'JSONObject',190);feb(605,Eve,Fve,CC);_.Hc=function DC(a){return bE(a)&&pC(this.a,WD(a))};_.Kc=function EC(){return new Dkb(new mob(this.b))};_.gc=function FC(){return this.b.length};var DI=sfb(cxe,'JSONObject/1',605);var GC;feb(211,2064,{211:1},OC);_.Fb=function PC(a){if(!ZD(a,211)){return false}return lhb(this.a,RD(a,211).a)};_.oe=function QC(){return UC};_.Hb=function RC(){return ohb(this.a)};_.te=function SC(){return this};_.Ib=function TC(){return Lz(this.a)};var FI=sfb(cxe,'JSONString',211);var eD;var ID,JD,KD,LD;feb(2060,1,{533:1});var II=sfb(kxe,'OutputStream',2060);feb(2061,2060,{533:1});var HI=sfb(kxe,'FilterOutputStream',2061);feb(878,2061,{533:1},oeb);var JI=sfb(kxe,'PrintStream',878);feb(427,1,{483:1});_.Ib=function seb(){return this.a};var KI=sfb(mve,'AbstractStringBuilder',427);feb(538,63,swe,teb);var LI=sfb(mve,'ArithmeticException',538);feb(77,63,lxe,ueb,veb);var aJ=sfb(mve,'IndexOutOfBoundsException',77);feb(333,77,{3:1,333:1,103:1,77:1,63:1,82:1},web,xeb);var MI=sfb(mve,'ArrayIndexOutOfBoundsException',333);feb(537,63,swe,yeb,zeb);var NI=sfb(mve,'ArrayStoreException',537);feb(295,82,mxe,Aeb);var XI=sfb(mve,'Error',295);feb(200,295,mxe,Ceb,Deb);var OI=sfb(mve,'AssertionError',200);ND={3:1,484:1,34:1};var Eeb,Feb;var QI=sfb(mve,'Boolean',484);feb(242,1,{3:1,242:1});var Meb;var iJ=sfb(mve,'Number',242);feb(222,242,{3:1,222:1,34:1,242:1},Seb);_.Fd=function Teb(a){return Reb(this,RD(a,222))};_.ue=function Ueb(){return this.a};_.Fb=function Veb(a){return ZD(a,222)&&RD(a,222).a==this.a};_.Hb=function Web(){return this.a};_.Ib=function Xeb(){return ''+this.a};_.a=0;var RI=sfb(mve,'Byte',222);var Yeb;feb(180,1,{3:1,180:1,34:1},bfb);_.Fd=function cfb(a){return afb(this,RD(a,180))};_.Fb=function efb(a){return ZD(a,180)&&RD(a,180).a==this.a};_.Hb=function ffb(){return this.a};_.Ib=function gfb(){return String.fromCharCode(this.a)};_.a=0;var _eb;var SI=sfb(mve,'Character',180);var ifb;feb(212,63,{3:1,212:1,103:1,63:1,82:1},Hfb,Ifb);var TI=sfb(mve,'ClassCastException',212);OD={3:1,34:1,345:1,242:1};var VI=sfb(mve,'Double',345);feb(161,242,{3:1,34:1,161:1,242:1},Tfb,Ufb);_.Fd=function Vfb(a){return Sfb(this,RD(a,161))};_.ue=function Wfb(){return this.a};_.Fb=function Xfb(a){return ZD(a,161)&&Lfb(this.a,RD(a,161).a)};_.Hb=function Yfb(){return eE(this.a)};_.Ib=function $fb(){return ''+this.a};_.a=0;var ZI=sfb(mve,'Float',161);feb(33,63,{3:1,103:1,33:1,63:1,82:1},_fb,agb,bgb);var $I=sfb(mve,'IllegalArgumentException',33);feb(73,63,swe,cgb,dgb);var _I=sfb(mve,'IllegalStateException',73);feb(17,242,{3:1,34:1,17:1,242:1},fgb);_.Fd=function igb(a){return egb(this,RD(a,17))};_.ue=function jgb(){return this.a};_.Fb=function kgb(a){return ZD(a,17)&&RD(a,17).a==this.a};_.Hb=function lgb(){return this.a};_.Ib=function rgb(){return ''+this.a};_.a=0;var bJ=sfb(mve,'Integer',17);var tgb;var vgb;feb(168,242,{3:1,34:1,168:1,242:1},zgb);_.Fd=function Bgb(a){return ygb(this,RD(a,168))};_.ue=function Cgb(){return Xdb(this.a)};_.Fb=function Dgb(a){return ZD(a,168)&&Gdb(RD(a,168).a,this.a)};_.Hb=function Egb(){return Fgb(this.a)};_.Ib=function Ggb(){return ''+Zdb(this.a)};_.a=0;var eJ=sfb(mve,'Long',168);var Igb;feb(2140,1,{});feb(1904,63,swe,Mgb);var fJ=sfb(mve,'NegativeArraySizeException',1904);feb(169,607,{3:1,103:1,169:1,63:1,82:1},Ngb,Ogb);_.ee=function Pgb(a){return new TypeError(a)};var gJ=sfb(mve,'NullPointerException',169);var Qgb,Rgb,Sgb,Tgb;feb(130,33,{3:1,103:1,33:1,130:1,63:1,82:1},Vgb);var hJ=sfb(mve,'NumberFormatException',130);feb(191,242,{3:1,34:1,242:1,191:1},Xgb);_.Fd=function Ygb(a){return Wgb(this,RD(a,191))};_.ue=function Zgb(){return this.a};_.Fb=function $gb(a){return ZD(a,191)&&RD(a,191).a==this.a};_.Hb=function _gb(){return this.a};_.Ib=function ahb(){return ''+this.a};_.a=0;var lJ=sfb(mve,'Short',191);var chb;feb(319,1,{3:1,319:1},ehb);_.Fb=function fhb(a){var b;if(ZD(a,319)){b=RD(a,319);return this.c==b.c&&this.d==b.d&&this.a==b.a&&this.b==b.b}return false};_.Hb=function ghb(){return Tnb(cD(WC(jJ,1),rve,1,5,[sgb(this.c),this.a,this.d,this.b]))};_.Ib=function hhb(){return this.a+'.'+this.d+'('+(this.b!=null?this.b:'Unknown Source')+(this.c>=0?':'+this.c:'')+')'};_.c=0;var mJ=sfb(mve,'StackTraceElement',319);PD={3:1,483:1,34:1,2:1};var qJ=sfb(mve,uwe,2);feb(111,427,{483:1},Qhb,Rhb,Shb);var nJ=sfb(mve,'StringBuffer',111);feb(104,427,{483:1},bib,cib,dib);var oJ=sfb(mve,'StringBuilder',104);feb(702,77,lxe,eib);var pJ=sfb(mve,'StringIndexOutOfBoundsException',702);feb(2145,1,{});var fib;feb(48,63,{3:1,103:1,63:1,82:1,48:1},jib,kib);var sJ=sfb(mve,'UnsupportedOperationException',48);feb(247,242,{3:1,34:1,242:1,247:1},Aib,Bib);_.Fd=function Eib(a){return uib(this,RD(a,247))};_.ue=function Fib(){return Neb(zib(this))};_.Fb=function Gib(a){var b;if(this===a){return true}if(ZD(a,247)){b=RD(a,247);return this.e==b.e&&uib(this,b)==0}return false};_.Hb=function Hib(){var a;if(this.b!=0){return this.b}if(this.a<54){a=Hdb(this.f);this.b=Ydb(Cdb(a,-1));this.b=33*this.b+Ydb(Cdb(Tdb(a,32),-1));this.b=17*this.b+eE(this.e);return this.b}this.b=17*Vib(this.c)+eE(this.e);return this.b};_.Ib=function Iib(){return zib(this)};_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var lib,mib,nib,oib,pib,qib,rib,sib;var tJ=sfb('java.math','BigDecimal',247);feb(92,242,{3:1,34:1,242:1,92:1},ajb,bjb,cjb,djb,ejb);_.Fd=function gjb(a){return Qib(this,RD(a,92))};_.ue=function hjb(){return Neb(Ajb(this,0))};_.Fb=function ijb(a){return Sib(this,a)};_.Hb=function ljb(){return Vib(this)};_.Ib=function njb(){return Ajb(this,0)};_.b=-2;_.c=0;_.d=0;_.e=0;var Jib,Kib,Lib,Mib,Nib,Oib;var uJ=sfb('java.math','BigInteger',92);var vjb,wjb;var Jjb,Kjb;feb(497,2065,Cve);_.$b=function dkb(){akb(this)};_._b=function ekb(a){return Ujb(this,a)};_.uc=function fkb(a){return Vjb(this,a,this.i)||Vjb(this,a,this.f)};_.vc=function gkb(){return new mkb(this)};_.xc=function hkb(a){return Wjb(this,a)};_.zc=function ikb(a,b){return Zjb(this,a,b)};_.Bc=function jkb(a){return _jb(this,a)};_.gc=function kkb(){return bkb(this)};_.g=0;var yJ=sfb(Bve,'AbstractHashMap',497);feb(267,Eve,Fve,mkb);_.$b=function nkb(){this.a.$b()};_.Hc=function okb(a){return lkb(this,a)};_.Kc=function pkb(){return new vkb(this.a)};_.Mc=function qkb(a){var b;if(lkb(this,a)){b=RD(a,44).ld();this.a.Bc(b);return true}return false};_.gc=function rkb(){return this.a.gc()};var xJ=sfb(Bve,'AbstractHashMap/EntrySet',267);feb(268,1,Ave,vkb);_.Nb=function wkb(a){Ztb(this,a)};_.Pb=function ykb(){return tkb(this)};_.Ob=function xkb(){return this.b};_.Qb=function zkb(){ukb(this)};_.b=false;_.d=0;var wJ=sfb(Bve,'AbstractHashMap/EntrySetIterator',268);feb(426,1,Ave,Dkb);_.Nb=function Ekb(a){Ztb(this,a)};_.Ob=function Fkb(){return Akb(this)};_.Pb=function Gkb(){return Bkb(this)};_.Qb=function Hkb(){Ckb(this)};_.b=0;_.c=-1;var zJ=sfb(Bve,'AbstractList/IteratorImpl',426);feb(98,426,Jve,Jkb);_.Qb=function Pkb(){Ckb(this)};_.Rb=function Kkb(a){Ikb(this,a)};_.Sb=function Lkb(){return this.b>0};_.Tb=function Mkb(){return this.b};_.Ub=function Nkb(){return sFb(this.b>0),this.a.Xb(this.c=--this.b)};_.Vb=function Okb(){return this.b-1};_.Wb=function Qkb(a){yFb(this.c!=-1);this.a.hd(this.c,a)};var AJ=sfb(Bve,'AbstractList/ListIteratorImpl',98);feb(244,56,kwe,Rkb);_.bd=function Skb(a,b){wFb(a,this.b);this.c.bd(this.a+a,b);++this.b};_.Xb=function Tkb(a){tFb(a,this.b);return this.c.Xb(this.a+a)};_.gd=function Ukb(a){var b;tFb(a,this.b);b=this.c.gd(this.a+a);--this.b;return b};_.hd=function Vkb(a,b){tFb(a,this.b);return this.c.hd(this.a+a,b)};_.gc=function Wkb(){return this.b};_.a=0;_.b=0;var BJ=sfb(Bve,'AbstractList/SubList',244);feb(266,Eve,Fve,Xkb);_.$b=function Ykb(){this.a.$b()};_.Hc=function Zkb(a){return this.a._b(a)};_.Kc=function $kb(){var a;return a=this.a.vc().Kc(),new blb(a)};_.Mc=function _kb(a){if(this.a._b(a)){this.a.Bc(a);return true}return false};_.gc=function alb(){return this.a.gc()};var EJ=sfb(Bve,'AbstractMap/1',266);feb(541,1,Ave,blb);_.Nb=function clb(a){Ztb(this,a)};_.Ob=function dlb(){return this.a.Ob()};_.Pb=function elb(){var a;return a=RD(this.a.Pb(),44),a.ld()};_.Qb=function flb(){this.a.Qb()};var DJ=sfb(Bve,'AbstractMap/1/1',541);feb(231,31,Dve,glb);_.$b=function hlb(){this.a.$b()};_.Hc=function ilb(a){return this.a.uc(a)};_.Kc=function jlb(){var a;return a=this.a.vc().Kc(),new llb(a)};_.gc=function klb(){return this.a.gc()};var GJ=sfb(Bve,'AbstractMap/2',231);feb(300,1,Ave,llb);_.Nb=function mlb(a){Ztb(this,a)};_.Ob=function nlb(){return this.a.Ob()};_.Pb=function olb(){var a;return a=RD(this.a.Pb(),44),a.md()};_.Qb=function plb(){this.a.Qb()};var FJ=sfb(Bve,'AbstractMap/2/1',300);feb(493,1,{493:1,44:1});_.Fb=function rlb(a){var b;if(!ZD(a,44)){return false}b=RD(a,44);return Fvb(this.d,b.ld())&&Fvb(this.e,b.md())};_.ld=function slb(){return this.d};_.md=function tlb(){return this.e};_.Hb=function ulb(){return Gvb(this.d)^Gvb(this.e)};_.nd=function vlb(a){return qlb(this,a)};_.Ib=function wlb(){return this.d+'='+this.e};var HJ=sfb(Bve,'AbstractMap/AbstractEntry',493);feb(397,493,{493:1,397:1,44:1},xlb);var IJ=sfb(Bve,'AbstractMap/SimpleEntry',397);feb(2082,1,Axe);_.Fb=function ylb(a){var b;if(!ZD(a,44)){return false}b=RD(a,44);return Fvb(this.ld(),b.ld())&&Fvb(this.md(),b.md())};_.Hb=function zlb(){return Gvb(this.ld())^Gvb(this.md())};_.Ib=function Alb(){return this.ld()+'='+this.md()};var JJ=sfb(Bve,Lve,2082);feb(2090,2065,Gve);_.Xc=function Dlb(a){return Vd(this.Ee(a))};_.tc=function Elb(a){return Blb(this,a)};_._b=function Flb(a){return Clb(this,a)};_.vc=function Glb(){return new Plb(this)};_.Tc=function Hlb(){return Klb(this.Ge())};_.Yc=function Ilb(a){return Vd(this.He(a))};_.xc=function Jlb(a){var b;b=a;return Wd(this.Fe(b))};_.$c=function Llb(a){return Vd(this.Ie(a))};_.ec=function Mlb(){return new Ulb(this)};_.Vc=function Nlb(){return Klb(this.Je())};_._c=function Olb(a){return Vd(this.Ke(a))};var OJ=sfb(Bve,'AbstractNavigableMap',2090);feb(629,Eve,Fve,Plb);_.Hc=function Qlb(a){return ZD(a,44)&&Blb(this.b,RD(a,44))};_.Kc=function Rlb(){return this.b.De()};_.Mc=function Slb(a){var b;if(ZD(a,44)){b=RD(a,44);return this.b.Le(b)}return false};_.gc=function Tlb(){return this.b.gc()};var LJ=sfb(Bve,'AbstractNavigableMap/EntrySet',629);feb(1146,Eve,Ive,Ulb);_.Nc=function $lb(){return new $wb(this)};_.$b=function Vlb(){this.a.$b()};_.Hc=function Wlb(a){return Clb(this.a,a)};_.Kc=function Xlb(){var a;a=this.a.vc().b.De();return new _lb(a)};_.Mc=function Ylb(a){if(Clb(this.a,a)){this.a.Bc(a);return true}return false};_.gc=function Zlb(){return this.a.gc()};var NJ=sfb(Bve,'AbstractNavigableMap/NavigableKeySet',1146);feb(1147,1,Ave,_lb);_.Nb=function amb(a){Ztb(this,a)};_.Ob=function bmb(){return Akb(this.a.a)};_.Pb=function cmb(){var a;a=vzb(this.a);return a.ld()};_.Qb=function dmb(){wzb(this.a)};var MJ=sfb(Bve,'AbstractNavigableMap/NavigableKeySet/1',1147);feb(2103,31,Dve);_.Fc=function emb(a){return zFb(lwb(this,a),Bxe),true};_.Gc=function fmb(a){uFb(a);mFb(a!=this,"Can't add a queue to itself");return ye(this,a)};_.$b=function gmb(){while(mwb(this)!=null);};var PJ=sfb(Bve,'AbstractQueue',2103);feb(310,31,{4:1,20:1,31:1,16:1},wmb,xmb);_.Fc=function ymb(a){return imb(this,a),true};_.$b=function Amb(){jmb(this)};_.Hc=function Bmb(a){return kmb(new Kmb(this),a)};_.dc=function Cmb(){return nmb(this)};_.Kc=function Dmb(){return new Kmb(this)};_.Mc=function Emb(a){return qmb(new Kmb(this),a)};_.gc=function Fmb(){return this.c-this.b&this.a.length-1};_.Nc=function Gmb(){return new Swb(this,272)};_.Qc=function Hmb(a){var b;b=this.c-this.b&this.a.length-1;a.length<b&&(a=cFb(new Array(b),a));lmb(this,a,b);a.length>b&&bD(a,b,null);return a};_.b=0;_.c=0;var TJ=sfb(Bve,'ArrayDeque',310);feb(458,1,Ave,Kmb);_.Nb=function Lmb(a){Ztb(this,a)};_.Ob=function Mmb(){return this.a!=this.b};_.Pb=function Nmb(){return Imb(this)};_.Qb=function Omb(){Jmb(this)};_.a=0;_.b=0;_.c=-1;var SJ=sfb(Bve,'ArrayDeque/IteratorImpl',458);feb(13,56,Cxe,bnb,cnb,dnb);_.bd=function enb(a,b){Qmb(this,a,b)};_.Fc=function fnb(a){return Rmb(this,a)};_.cd=function gnb(a,b){return Smb(this,a,b)};_.Gc=function hnb(a){return Tmb(this,a)};_.$b=function inb(){aFb(this.c,0)};_.Hc=function jnb(a){return Wmb(this,a,0)!=-1};_.Jc=function knb(a){Umb(this,a)};_.Xb=function lnb(a){return Vmb(this,a)};_.dd=function mnb(a){return Wmb(this,a,0)};_.dc=function nnb(){return this.c.length==0};_.Kc=function onb(){return new Anb(this)};_.gd=function pnb(a){return Xmb(this,a)};_.Mc=function qnb(a){return Ymb(this,a)};_.ce=function rnb(a,b){Zmb(this,a,b)};_.hd=function snb(a,b){return $mb(this,a,b)};_.gc=function tnb(){return this.c.length};_.jd=function unb(a){_mb(this,a)};_.Pc=function vnb(){return UEb(this.c)};_.Qc=function wnb(a){return anb(this,a)};var VJ=sfb(Bve,'ArrayList',13);feb(7,1,Ave,Anb);_.Nb=function Bnb(a){Ztb(this,a)};_.Ob=function Cnb(){return xnb(this)};_.Pb=function Dnb(){return ynb(this)};_.Qb=function Enb(){znb(this)};_.a=0;_.b=-1;var UJ=sfb(Bve,'ArrayList/1',7);feb(2112,$wnd.Function,{},iob);_.Me=function job(a,b){return Qfb(a,b)};feb(151,56,Dxe,mob);_.Hc=function nob(a){return St(this,a)!=-1};_.Jc=function oob(a){var b,c,d,e;uFb(a);for(c=this.a,d=0,e=c.length;d<e;++d){b=c[d];a.Cd(b)}};_.Xb=function pob(a){return kob(this,a)};_.hd=function qob(a,b){var c;c=(tFb(a,this.a.length),this.a[a]);bD(this.a,a,b);return c};_.gc=function rob(){return this.a.length};_.jd=function sob(a){Ynb(this.a,this.a.length,a)};_.Pc=function tob(){return lob(this,$C(jJ,rve,1,this.a.length,5,1))};_.Qc=function uob(a){return lob(this,a)};var WJ=sfb(Bve,'Arrays/ArrayList',151);var vob,wob,xob;feb(953,56,Dxe,Job);_.Hc=function Kob(a){return false};_.Xb=function Lob(a){return Iob(a)};_.Kc=function Mob(){return yob(),Qob(),Pob};_.ed=function Nob(){return yob(),Qob(),Pob};_.gc=function Oob(){return 0};var YJ=sfb(Bve,'Collections/EmptyList',953);feb(954,1,Jve,Rob);_.Nb=function Tob(a){Ztb(this,a)};_.Rb=function Sob(a){throw Adb(new jib)};_.Ob=function Uob(){return false};_.Sb=function Vob(){return false};_.Pb=function Wob(){throw Adb(new Dvb)};_.Tb=function Xob(){return 0};_.Ub=function Yob(){throw Adb(new Dvb)};_.Vb=function Zob(){return -1};_.Qb=function $ob(){throw Adb(new cgb)};_.Wb=function _ob(a){throw Adb(new cgb)};var Pob;var XJ=sfb(Bve,'Collections/EmptyListIterator',954);feb(956,2065,$ve,apb);_._b=function bpb(a){return false};_.uc=function cpb(a){return false};_.vc=function dpb(){return yob(),xob};_.xc=function epb(a){return null};_.ec=function fpb(){return yob(),xob};_.gc=function gpb(){return 0};_.Cc=function hpb(){return yob(),vob};var ZJ=sfb(Bve,'Collections/EmptyMap',956);feb(955,Eve,awe,ipb);_.Hc=function jpb(a){return false};_.Kc=function kpb(){return yob(),Qob(),Pob};_.gc=function lpb(){return 0};var $J=sfb(Bve,'Collections/EmptySet',955);feb(608,56,{3:1,20:1,31:1,56:1,16:1,15:1},mpb);_.Hc=function npb(a){return Fvb(this.a,a)};_.Xb=function opb(a){tFb(a,1);return this.a};_.gc=function ppb(){return 1};var _J=sfb(Bve,'Collections/SingletonList',608);feb(384,1,Wve,xpb);_.Jc=function Dpb(a){xgb(this,a)};_.Lc=function Gpb(){return new SDb(null,this.Nc())};_.Nc=function Jpb(){return new Swb(this,0)};_.Oc=function Kpb(){return new SDb(null,this.Nc())};_.Fc=function ypb(a){return qpb()};_.Gc=function zpb(a){return rpb()};_.$b=function Apb(){spb()};_.Hc=function Bpb(a){return tpb(this,a)};_.Ic=function Cpb(a){return upb(this,a)};_.dc=function Epb(){return this.b.dc()};_.Kc=function Fpb(){return new Ppb(this.b.Kc())};_.Mc=function Hpb(a){return vpb()};_.gc=function Ipb(){return this.b.gc()};_.Pc=function Lpb(){return this.b.Pc()};_.Qc=function Mpb(a){return wpb(this,a)};_.Ib=function Npb(){return jeb(this.b)};var bK=sfb(Bve,'Collections/UnmodifiableCollection',384);feb(383,1,Ave,Ppb);_.Nb=function Qpb(a){Ztb(this,a)};_.Ob=function Rpb(){return this.b.Ob()};_.Pb=function Spb(){return this.b.Pb()};_.Qb=function Tpb(){Opb()};var aK=sfb(Bve,'Collections/UnmodifiableCollectionIterator',383);feb(540,384,Exe,Upb);_.Nc=function fqb(){return new Swb(this,16)};_.bd=function Vpb(a,b){throw Adb(new jib)};_.cd=function Wpb(a,b){throw Adb(new jib)};_.Fb=function Xpb(a){return pb(this.a,a)};_.Xb=function Ypb(a){return this.a.Xb(a)};_.Hb=function Zpb(){return tb(this.a)};_.dd=function $pb(a){return this.a.dd(a)};_.dc=function _pb(){return this.a.dc()};_.ed=function aqb(){return new hqb(this.a.fd(0))};_.fd=function bqb(a){return new hqb(this.a.fd(a))};_.gd=function cqb(a){throw Adb(new jib)};_.hd=function dqb(a,b){throw Adb(new jib)};_.jd=function eqb(a){throw Adb(new jib)};_.kd=function gqb(a,b){return new Upb(this.a.kd(a,b))};var dK=sfb(Bve,'Collections/UnmodifiableList',540);feb(705,383,Jve,hqb);_.Qb=function nqb(){Opb()};_.Rb=function iqb(a){throw Adb(new jib)};_.Sb=function jqb(){return this.a.Sb()};_.Tb=function kqb(){return this.a.Tb()};_.Ub=function lqb(){return this.a.Ub()};_.Vb=function mqb(){return this.a.Vb()};_.Wb=function oqb(a){throw Adb(new jib)};var cK=sfb(Bve,'Collections/UnmodifiableListIterator',705);feb(609,1,Cve,uqb);_.wc=function Aqb(a){Bvb(this,a)};_.yc=function Fqb(a,b,c){return Cvb(this,a,b,c)};_.$b=function vqb(){throw Adb(new jib)};_._b=function wqb(a){return this.c._b(a)};_.uc=function xqb(a){return pqb(this,a)};_.vc=function yqb(){return qqb(this)};_.Fb=function zqb(a){return rqb(this,a)};_.xc=function Bqb(a){return this.c.xc(a)};_.Hb=function Cqb(){return tb(this.c)};_.dc=function Dqb(){return this.c.dc()};_.ec=function Eqb(){return sqb(this)};_.zc=function Gqb(a,b){throw Adb(new jib)};_.Bc=function Hqb(a){throw Adb(new jib)};_.gc=function Iqb(){return this.c.gc()};_.Ib=function Jqb(){return jeb(this.c)};_.Cc=function Kqb(){return tqb(this)};var hK=sfb(Bve,'Collections/UnmodifiableMap',609);feb(396,384,_ve,Lqb);_.Nc=function Oqb(){return new Swb(this,1)};_.Fb=function Mqb(a){return pb(this.b,a)};_.Hb=function Nqb(){return tb(this.b)};var jK=sfb(Bve,'Collections/UnmodifiableSet',396);feb(957,396,_ve,Sqb);_.Hc=function Tqb(a){return Pqb(this,a)};_.Ic=function Uqb(a){return this.b.Ic(a)};_.Kc=function Vqb(){var a;a=this.b.Kc();return new Yqb(a)};_.Pc=function Wqb(){var a;a=this.b.Pc();Rqb(a,a.length);return a};_.Qc=function Xqb(a){return Qqb(this,a)};var gK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet',957);feb(958,1,Ave,Yqb);_.Nb=function Zqb(a){Ztb(this,a)};_.Pb=function _qb(){return new brb(RD(this.a.Pb(),44))};_.Ob=function $qb(){return this.a.Ob()};_.Qb=function arb(){throw Adb(new jib)};var eK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet/1',958);feb(703,1,Axe,brb);_.Fb=function crb(a){return this.a.Fb(a)};_.ld=function drb(){return this.a.ld()};_.md=function erb(){return this.a.md()};_.Hb=function frb(){return this.a.Hb()};_.nd=function grb(a){throw Adb(new jib)};_.Ib=function hrb(){return jeb(this.a)};var fK=sfb(Bve,'Collections/UnmodifiableMap/UnmodifiableEntrySet/UnmodifiableEntry',703);feb(610,540,{20:1,16:1,15:1,59:1},irb);var iK=sfb(Bve,'Collections/UnmodifiableRandomAccessList',610);feb(704,396,bwe,jrb);_.Nc=function mrb(){return new $wb(this)};_.Fb=function krb(a){return pb(this.a,a)};_.Hb=function lrb(){return tb(this.a)};var kK=sfb(Bve,'Collections/UnmodifiableSortedSet',704);feb(858,1,Fxe,nrb);_.Ne=function orb(a,b){var c;return c=ygc(RD(a,12),RD(b,12)),c!=0?c:zgc(RD(a,12),RD(b,12))};_.Fb=function prb(a){return this===a};_.Oe=function qrb(){return new Frb(this)};var lK=sfb(Bve,'Comparator/lambda$0$Type',858);var rrb,srb,trb;feb(769,1,Fxe,wrb);_.Ne=function xrb(a,b){return vrb(RD(a,34),RD(b,34))};_.Fb=function yrb(a){return this===a};_.Oe=function zrb(){return urb(),trb};var mK=sfb(Bve,'Comparators/NaturalOrderComparator',769);feb(1226,1,Fxe,Brb);_.Ne=function Crb(a,b){return Arb(RD(a,34),RD(b,34))};_.Fb=function Drb(a){return this===a};_.Oe=function Erb(){return urb(),srb};var nK=sfb(Bve,'Comparators/ReverseNaturalOrderComparator',1226);feb(52,1,Fxe,Frb);_.Fb=function Hrb(a){return this===a};_.Ne=function Grb(a,b){return this.a.Ne(b,a)};_.Oe=function Irb(){return this.a};var oK=sfb(Bve,'Comparators/ReversedComparator',52);feb(175,63,swe,Jrb);var pK=sfb(Bve,'ConcurrentModificationException',175);var Krb,Lrb;feb(1948,1,Gxe,Prb);_.Pe=function Qrb(a){Nrb(this,a)};_.Ib=function Rrb(){return 'DoubleSummaryStatistics[count = '+Zdb(this.a)+', avg = '+(Idb(this.a,0)?Orb(this)/Xdb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Orb(this)+']'};_.a=0;_.b=pxe;_.c=oxe;_.d=0;_.e=0;_.f=0;var rK=sfb(Bve,'DoubleSummaryStatistics',1948);feb(1868,63,swe,Srb);var sK=sfb(Bve,'EmptyStackException',1868);feb(460,2065,Cve,Zrb);_.zc=function dsb(a,b){return Xrb(this,a,b)};_.$b=function $rb(){Trb(this)};_._b=function _rb(a){return Urb(this,a)};_.uc=function asb(a){var b,c;for(c=new Osb(this.a);c.a<c.c.a.length;){b=Nsb(c);if(Fvb(a,this.b[b.g])){return true}}return false};_.vc=function bsb(){return new hsb(this)};_.xc=function csb(a){return Vrb(this,a)};_.Bc=function esb(a){return Yrb(this,a)};_.gc=function fsb(){return this.a.c};var wK=sfb(Bve,'EnumMap',460);feb(1340,Eve,Fve,hsb);_.$b=function isb(){Trb(this.a)};_.Hc=function jsb(a){return gsb(this,a)};_.Kc=function ksb(){return new nsb(this.a)};_.Mc=function lsb(a){var b;if(gsb(this,a)){b=RD(a,44).ld();Yrb(this.a,b);return true}return false};_.gc=function msb(){return this.a.a.c};var uK=sfb(Bve,'EnumMap/EntrySet',1340);feb(1341,1,Ave,nsb);_.Nb=function osb(a){Ztb(this,a)};_.Pb=function qsb(){return this.b=Nsb(this.a),new ssb(this.c,this.b)};_.Ob=function psb(){return Msb(this.a)};_.Qb=function rsb(){yFb(!!this.b);Yrb(this.c,this.b);this.b=null};var tK=sfb(Bve,'EnumMap/EntrySetIterator',1341);feb(1342,2082,Axe,ssb);_.ld=function tsb(){return this.a};_.md=function usb(){return this.b.b[this.a.g]};_.nd=function vsb(a){return _Eb(this.b.b,this.a.g,a)};var vK=sfb(Bve,'EnumMap/MapEntry',1342);feb(181,Eve,{20:1,31:1,16:1,181:1,21:1});var zK=sfb(Bve,'EnumSet',181);feb(162,181,{20:1,31:1,16:1,181:1,162:1,21:1},Fsb);_.Fc=function Gsb(a){return zsb(this,RD(a,22))};_.Hc=function Hsb(a){return Bsb(this,a)};_.Kc=function Isb(){return new Osb(this)};_.Mc=function Jsb(a){return Dsb(this,a)};_.gc=function Ksb(){return this.c};_.c=0;var yK=sfb(Bve,'EnumSet/EnumSetImpl',162);feb(356,1,Ave,Osb);_.Nb=function Psb(a){Ztb(this,a)};_.Pb=function Rsb(){return Nsb(this)};_.Ob=function Qsb(){return Msb(this)};_.Qb=function Ssb(){yFb(this.b!=-1);bD(this.c.b,this.b,null);--this.c.c;this.b=-1};_.a=-1;_.b=-1;var xK=sfb(Bve,'EnumSet/EnumSetImpl/IteratorImpl',356);feb(45,497,Hxe,Tsb,Usb,Vsb);_.Be=function Wsb(a,b){return dE(a)===dE(b)||a!=null&&pb(a,b)};_.Ce=function Xsb(a){var b;if(a==null){return 0}b=tb(a);return b|0};var AK=sfb(Bve,'HashMap',45);feb(49,Eve,Ixe,_sb,atb,btb);_.Fc=function dtb(a){return Ysb(this,a)};_.$b=function etb(){this.a.$b()};_.Hc=function ftb(a){return Zsb(this,a)};_.dc=function gtb(){return this.a.gc()==0};_.Kc=function htb(){return this.a.ec().Kc()};_.Mc=function itb(a){return $sb(this,a)};_.gc=function jtb(){return this.a.gc()};var BK=sfb(Bve,'HashSet',49);feb(1897,1,Rve,ltb);_.Dd=function mtb(a){ktb(this,a)};_.Ib=function ntb(){return 'IntSummaryStatistics[count = '+Zdb(this.a)+', avg = '+(Idb(this.a,0)?Xdb(this.d)/Xdb(this.a):0)+', min = '+this.c+', max = '+this.b+', sum = '+Zdb(this.d)+']'};_.a=0;_.b=qwe;_.c=lve;_.d=0;var CK=sfb(Bve,'IntSummaryStatistics',1897);feb(1062,1,Vve,ttb);_.Jc=function utb(a){xgb(this,a)};_.Kc=function vtb(){return new wtb(this)};_.c=0;var EK=sfb(Bve,'InternalHashCodeMap',1062);feb(726,1,Ave,wtb);_.Nb=function xtb(a){Ztb(this,a)};_.Pb=function ztb(){return this.d=this.a[this.c++],this.d};_.Ob=function ytb(){var a;if(this.c<this.a.length){return true}a=this.b.next();if(!a.done){this.a=a.value[1];this.c=0;return true}return false};_.Qb=function Atb(){stb(this.e,this.d.ld());this.c!=0&&--this.c};_.c=0;_.d=null;var DK=sfb(Bve,'InternalHashCodeMap/1',726);var Dtb;feb(1060,1,Vve,Ntb);_.Jc=function Otb(a){xgb(this,a)};_.Kc=function Ptb(){return new Qtb(this)};_.c=0;_.d=0;var HK=sfb(Bve,'InternalStringMap',1060);feb(725,1,Ave,Qtb);_.Nb=function Rtb(a){Ztb(this,a)};_.Pb=function Ttb(){return this.c=this.a,this.a=this.b.next(),new Vtb(this.d,this.c,this.d.d)};_.Ob=function Stb(){return !this.a.done};_.Qb=function Utb(){Mtb(this.d,this.c.value[0])};var FK=sfb(Bve,'InternalStringMap/1',725);feb(1061,2082,Axe,Vtb);_.ld=function Wtb(){return this.b.value[0]};_.md=function Xtb(){if(this.a.d!=this.c){return Ktb(this.a,this.b.value[0])}return this.b.value[1]};_.nd=function Ytb(a){return Ltb(this.a,this.b.value[0],a)};_.c=0;var GK=sfb(Bve,'InternalStringMap/2',1061);feb(215,45,Hxe,gub,hub);_.$b=function iub(){aub(this)};_._b=function jub(a){return bub(this,a)};_.uc=function kub(a){var b;b=this.d.a;while(b!=this.d){if(Fvb(b.e,a)){return true}b=b.a}return false};_.vc=function lub(){return new wub(this)};_.xc=function mub(a){return cub(this,a)};_.zc=function nub(a,b){return dub(this,a,b)};_.Bc=function oub(a){return fub(this,a)};_.gc=function pub(){return bkb(this.e)};_.c=false;var LK=sfb(Bve,'LinkedHashMap',215);feb(400,397,{493:1,397:1,400:1,44:1},tub,uub);var IK=sfb(Bve,'LinkedHashMap/ChainEntry',400);feb(715,Eve,Fve,wub);_.$b=function xub(){aub(this.a)};_.Hc=function yub(a){return vub(this,a)};_.Kc=function zub(){return new Dub(this)};_.Mc=function Aub(a){var b;if(vub(this,a)){b=RD(a,44).ld();fub(this.a,b);return true}return false};_.gc=function Bub(){return bkb(this.a.e)};var KK=sfb(Bve,'LinkedHashMap/EntrySet',715);feb(716,1,Ave,Dub);_.Nb=function Eub(a){Ztb(this,a)};_.Pb=function Gub(){return Cub(this)};_.Ob=function Fub(){return this.c!=this.d.a.d};_.Qb=function Hub(){yFb(!!this.a);rFb(this.d.a.e.g,this.b);rub(this.a);_jb(this.d.a.e,this.a.d);this.b=this.d.a.e.g;this.a=null};_.b=0;var JK=sfb(Bve,'LinkedHashMap/EntrySet/EntryIterator',716);feb(174,49,Ixe,Iub,Jub,Kub);var MK=sfb(Bve,'LinkedHashSet',174);feb(67,2062,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1},Yub,Zub);_.Fc=function $ub(a){return Mub(this,a)};_.$b=function _ub(){Xub(this)};_.fd=function avb(a){return Sub(this,a)};_.gc=function bvb(){return this.b};_.b=0;var PK=sfb(Bve,'LinkedList',67);feb(981,1,Jve,hvb);_.Nb=function jvb(a){Ztb(this,a)};_.Rb=function ivb(a){cvb(this,a)};_.Ob=function kvb(){return dvb(this)};_.Sb=function lvb(){return this.b.b!=this.d.a};_.Pb=function mvb(){return evb(this)};_.Tb=function nvb(){return this.a};_.Ub=function ovb(){return fvb(this)};_.Vb=function pvb(){return this.a-1};_.Qb=function qvb(){gvb(this)};_.Wb=function rvb(a){yFb(!!this.c);this.c.c=a};_.a=0;_.c=null;var NK=sfb(Bve,'LinkedList/ListIteratorImpl',981);feb(617,1,{},svb);var OK=sfb(Bve,'LinkedList/Node',617);feb(2057,1,{});var uvb,vvb;var TK=sfb(Bve,'Locale',2057);feb(873,2057,{},xvb);_.Ib=function yvb(){return ''};var RK=sfb(Bve,'Locale/1',873);feb(874,2057,{},zvb);_.Ib=function Avb(){return 'unknown'};var SK=sfb(Bve,'Locale/4',874);feb(112,63,{3:1,103:1,63:1,82:1,112:1},Dvb,Evb);var WK=sfb(Bve,'NoSuchElementException',112);feb(474,1,{474:1},Ovb);_.Fb=function Pvb(a){var b;if(a===this){return true}if(!ZD(a,474)){return false}b=RD(a,474);return Fvb(this.a,b.a)};_.Hb=function Qvb(){return Gvb(this.a)};_.Ib=function Rvb(){return this.a!=null?uve+Ghb(this.a)+')':'Optional.empty()'};var Jvb;var ZK=sfb(Bve,'Optional',474);feb(414,1,{414:1},Xvb,Yvb);_.Fb=function Zvb(a){var b;if(a===this){return true}if(!ZD(a,414)){return false}b=RD(a,414);return this.a==b.a&&Qfb(this.b,b.b)==0};_.Hb=function $vb(){return this.a?eE(this.b):0};_.Ib=function _vb(){return this.a?'OptionalDouble.of('+(''+this.b)+')':'OptionalDouble.empty()'};_.a=false;_.b=0;var Svb;var XK=sfb(Bve,'OptionalDouble',414);feb(524,1,{524:1},dwb,ewb);_.Fb=function fwb(a){var b;if(a===this){return true}if(!ZD(a,524)){return false}b=RD(a,524);return this.a==b.a&&hgb(this.b,b.b)==0};_.Hb=function gwb(){return this.a?this.b:0};_.Ib=function hwb(){return this.a?'OptionalInt.of('+(''+this.b)+')':'OptionalInt.empty()'};_.a=false;_.b=0;var awb;var YK=sfb(Bve,'OptionalInt',524);feb(510,2103,Dve,pwb);_.Gc=function qwb(a){return iwb(this,a)};_.$b=function rwb(){aFb(this.b.c,0)};_.Hc=function swb(a){return (a==null?-1:Wmb(this.b,a,0))!=-1};_.Kc=function twb(){return new zwb(this)};_.Mc=function uwb(a){return nwb(this,a)};_.gc=function vwb(){return this.b.c.length};_.Nc=function wwb(){return new Swb(this,256)};_.Pc=function xwb(){return UEb(this.b.c)};_.Qc=function ywb(a){return anb(this.b,a)};var _K=sfb(Bve,'PriorityQueue',510);feb(1296,1,Ave,zwb);_.Nb=function Awb(a){Ztb(this,a)};_.Ob=function Bwb(){return this.a<this.c.b.c.length};_.Pb=function Cwb(){sFb(this.a<this.c.b.c.length);this.b=this.a++;return Vmb(this.c.b,this.b)};_.Qb=function Dwb(){yFb(this.b!=-1);owb(this.c,this.a=this.b);this.b=-1};_.a=0;_.b=-1;var $K=sfb(Bve,'PriorityQueue/1',1296);feb(234,1,{234:1},Owb,Pwb);_.a=0;_.b=0;var Ewb,Fwb,Gwb=0;var aL=sfb(Bve,'Random',234);feb(25,1,Pve,Swb,Twb,Uwb);_.Ad=function Ywb(a){return (this.a&a)!=0};_.yd=function Vwb(){return this.a};_.zd=function Wwb(){Qwb(this);return this.c};_.Nb=function Xwb(a){Qwb(this);this.d.Nb(a)};_.Bd=function Zwb(a){return Rwb(this,a)};_.a=0;_.c=0;var qL=sfb(Bve,'Spliterators/IteratorSpliterator',25);feb(494,25,Pve,$wb);var cL=sfb(Bve,'SortedSet/1',494);feb(611,1,Gxe,axb);_.Pe=function bxb(a){this.a.Cd(a)};var dL=sfb(Bve,'Spliterator/OfDouble/0methodref$accept$Type',611);feb(612,1,Gxe,cxb);_.Pe=function dxb(a){this.a.Cd(a)};var eL=sfb(Bve,'Spliterator/OfDouble/1methodref$accept$Type',612);feb(613,1,Rve,exb);_.Dd=function fxb(a){this.a.Cd(sgb(a))};var fL=sfb(Bve,'Spliterator/OfInt/2methodref$accept$Type',613);feb(614,1,Rve,gxb);_.Dd=function hxb(a){this.a.Cd(sgb(a))};var gL=sfb(Bve,'Spliterator/OfInt/3methodref$accept$Type',614);feb(625,1,Pve);_.Nb=function nxb(a){_wb(this,a)};_.Ad=function oxb(a){return (this.d&a)!=0};_.yd=function lxb(){return this.d};_.zd=function mxb(){return this.e};_.d=0;_.e=0;var mL=sfb(Bve,'Spliterators/BaseSpliterator',625);feb(736,625,Pve);_.Qe=function qxb(a){ixb(this,a)};_.Nb=function rxb(a){ZD(a,189)?ixb(this,RD(a,189)):ixb(this,new cxb(a))};_.Bd=function sxb(a){return ZD(a,189)?this.Re(RD(a,189)):this.Re(new axb(a))};var hL=sfb(Bve,'Spliterators/AbstractDoubleSpliterator',736);feb(735,625,Pve);_.Qe=function uxb(a){ixb(this,a)};_.Nb=function vxb(a){ZD(a,202)?ixb(this,RD(a,202)):ixb(this,new gxb(a))};_.Bd=function wxb(a){return ZD(a,202)?this.Re(RD(a,202)):this.Re(new exb(a))};var iL=sfb(Bve,'Spliterators/AbstractIntSpliterator',735);feb(499,625,Pve);var jL=sfb(Bve,'Spliterators/AbstractSpliterator',499);feb(706,1,Pve);_.Nb=function Dxb(a){_wb(this,a)};_.Ad=function Exb(a){return (this.b&a)!=0};_.yd=function Bxb(){return this.b};_.zd=function Cxb(){return this.d-this.c};_.b=0;_.c=0;_.d=0;var lL=sfb(Bve,'Spliterators/BaseArraySpliterator',706);feb(960,706,Pve,Gxb);_.Se=function Hxb(a,b){Fxb(this,RD(a,41),b)};_.Nb=function Ixb(a){yxb(this,a)};_.Bd=function Jxb(a){return zxb(this,a)};var kL=sfb(Bve,'Spliterators/ArraySpliterator',960);feb(707,706,Pve,Lxb);_.Se=function Nxb(a,b){Kxb(this,RD(a,189),b)};_.Qe=function Oxb(a){yxb(this,a)};_.Nb=function Pxb(a){ZD(a,189)?yxb(this,RD(a,189)):yxb(this,new cxb(a))};_.Re=function Qxb(a){return zxb(this,a)};_.Bd=function Rxb(a){return ZD(a,189)?zxb(this,RD(a,189)):zxb(this,new axb(a))};var nL=sfb(Bve,'Spliterators/DoubleArraySpliterator',707);feb(2066,1,Pve);_.Nb=function Wxb(a){_wb(this,a)};_.Ad=function Xxb(a){return (16448&a)!=0};_.yd=function Uxb(){return 16448};_.zd=function Vxb(){return 0};var Sxb;var pL=sfb(Bve,'Spliterators/EmptySpliterator',2066);feb(959,2066,Pve,$xb);_.Qe=function _xb(a){Yxb(a)};_.Nb=function ayb(a){ZD(a,202)?Yxb(RD(a,202)):Yxb(new gxb(a))};_.Re=function byb(a){return Zxb(a)};_.Bd=function cyb(a){return ZD(a,202)?Zxb(RD(a,202)):Zxb(new exb(a))};var oL=sfb(Bve,'Spliterators/EmptySpliterator/OfInt',959);feb(588,56,Rxe,gyb);_.bd=function hyb(a,b){lyb(a,this.a.c.length+1);Qmb(this.a,a,b)};_.Fc=function iyb(a){return Rmb(this.a,a)};_.cd=function jyb(a,b){lyb(a,this.a.c.length+1);return Smb(this.a,a,b)};_.Gc=function kyb(a){return Tmb(this.a,a)};_.$b=function myb(){aFb(this.a.c,0)};_.Hc=function nyb(a){return Wmb(this.a,a,0)!=-1};_.Ic=function oyb(a){return Be(this.a,a)};_.Jc=function pyb(a){Umb(this.a,a)};_.Xb=function qyb(a){return lyb(a,this.a.c.length),Vmb(this.a,a)};_.dd=function ryb(a){return Wmb(this.a,a,0)};_.dc=function syb(){return this.a.c.length==0};_.Kc=function tyb(){return new Anb(this.a)};_.gd=function uyb(a){return lyb(a,this.a.c.length),Xmb(this.a,a)};_.ce=function vyb(a,b){Zmb(this.a,a,b)};_.hd=function wyb(a,b){return lyb(a,this.a.c.length),$mb(this.a,a,b)};_.gc=function xyb(){return this.a.c.length};_.jd=function yyb(a){_mb(this.a,a)};_.kd=function zyb(a,b){return new Rkb(this.a,a,b)};_.Pc=function Ayb(){return UEb(this.a.c)};_.Qc=function Byb(a){return anb(this.a,a)};_.Ib=function Cyb(){return Fe(this.a)};var EL=sfb(Bve,'Vector',588);feb(824,588,Rxe,Fyb);var rL=sfb(Bve,'Stack',824);feb(213,1,{213:1},Jyb);_.Ib=function Kyb(){return Iyb(this)};var sL=sfb(Bve,'StringJoiner',213);feb(553,2090,{3:1,85:1,139:1,133:1},dzb,ezb);_.$b=function fzb(){Lyb(this)};_.De=function gzb(){return new xzb(this)};_.vc=function hzb(){return new Dzb(this)};_.Ee=function izb(a){return Pyb(this,a,true)};_.Fe=function jzb(a){return Myb(this,a)};_.Ge=function kzb(){return Nyb(this)};_.He=function lzb(a){return Qyb(this,a,true)};_.Ie=function mzb(a){return Pyb(this,a,false)};_.Je=function nzb(){return Oyb(this)};_.Ke=function ozb(a){return Qyb(this,a,false)};_.Zc=function pzb(a,b){return Ryb(this,a,b)};_.zc=function qzb(a,b){return Wyb(this,a,b)};_.Bc=function rzb(a){return Xyb(this,a)};_.Le=function szb(a){return Yyb(this,a)};_.gc=function tzb(){return this.c};_.ad=function uzb(a,b){return czb(this,a,b)};_.c=0;var CL=sfb(Bve,'TreeMap',553);feb(554,1,Ave,xzb,yzb);_.Nb=function zzb(a){Ztb(this,a)};_.Pb=function Bzb(){return vzb(this)};_.Ob=function Azb(){return Akb(this.a)};_.Qb=function Czb(){wzb(this)};var tL=sfb(Bve,'TreeMap/EntryIterator',554);feb(1142,629,Fve,Dzb);_.$b=function Ezb(){Lyb(this.a)};var uL=sfb(Bve,'TreeMap/EntrySet',1142);feb(447,397,{493:1,397:1,44:1,447:1},Fzb);_.b=false;var vL=sfb(Bve,'TreeMap/Node',447);feb(630,1,{},Gzb);_.Ib=function Hzb(){return 'State: mv='+this.c+' value='+this.d+' done='+this.a+' found='+this.b};_.a=false;_.b=false;_.c=false;var wL=sfb(Bve,'TreeMap/State',630);feb(631,2090,Gve,Kzb);_.De=function Lzb(){return new yzb(this.c,this.f,this.b,this.a,this.e,this.d)};_.vc=function Mzb(){return new Plb(this)};_.Ee=function Nzb(a){return Izb(this,Pyb(this.c,a,true))};_.Fe=function Ozb(a){return Izb(this,Myb(this.c,a))};_.Ge=function Pzb(){var a;return this.f.Te()?this.a?(a=Pyb(this.c,this.b,true)):(a=Pyb(this.c,this.b,false)):(a=Nyb(this.c)),!!a&&Jzb(this,a.d)?a:null};_.He=function Qzb(a){return Izb(this,Qyb(this.c,a,true))};_.Ie=function Rzb(a){return Izb(this,Pyb(this.c,a,false))};_.Je=function Szb(){var a;this.f.Ue()?this.d?(a=Qyb(this.c,this.e,true)):(a=Qyb(this.c,this.e,false)):(a=Oyb(this.c));return !!a&&Jzb(this,a.d)?a:null};_.Ke=function Tzb(a){return Izb(this,Qyb(this.c,a,false))};_.Zc=function Uzb(a,b){if(this.f.Ue()&&this.c.a.Ne(a,this.e)>0){throw Adb(new agb(Sxe+a+' greater than '+this.e))}return this.f.Te()?bzb(this.c,this.b,this.a,a,b):Ryb(this.c,a,b)};_.zc=function Vzb(a,b){if(!Tyb(this.c,this.f,a,this.b,this.a,this.e,this.d)){throw Adb(new agb(a+' outside the range '+this.b+' to '+this.e))}return Wyb(this.c,a,b)};_.Bc=function Wzb(a){var b;b=a;if(!Tyb(this.c,this.f,b,this.b,this.a,this.e,this.d)){return null}return Xyb(this.c,b)};_.Le=function Xzb(a){return Jzb(this,a.ld())&&Yyb(this.c,a)};_.gc=function Yzb(){var a,b,c;this.f.Te()?this.a?(b=Pyb(this.c,this.b,true)):(b=Pyb(this.c,this.b,false)):(b=Nyb(this.c));if(!(!!b&&Jzb(this,b.d)?b:null)){return 0}a=0;for(c=new yzb(this.c,this.f,this.b,this.a,this.e,this.d);Akb(c.a);c.b=RD(Bkb(c.a),44)){++a}return a};_.ad=function Zzb(a,b){if(this.f.Te()&&this.c.a.Ne(a,this.b)<0){throw Adb(new agb(Sxe+a+Txe+this.b))}return this.f.Ue()?bzb(this.c,a,b,this.e,this.d):czb(this.c,a,b)};_.a=false;_.d=false;var BL=sfb(Bve,'TreeMap/SubMap',631);feb(303,22,Uxe,dAb);_.Te=function eAb(){return false};_.Ue=function fAb(){return false};var $zb,_zb,aAb,bAb;var AL=tfb(Bve,'TreeMap/SubMapType',303,WI,hAb,gAb);feb(1143,303,Uxe,iAb);_.Ue=function jAb(){return true};var xL=tfb(Bve,'TreeMap/SubMapType/1',1143,AL,null,null);feb(1144,303,Uxe,kAb);_.Te=function lAb(){return true};_.Ue=function mAb(){return true};var yL=tfb(Bve,'TreeMap/SubMapType/2',1144,AL,null,null);feb(1145,303,Uxe,nAb);_.Te=function oAb(){return true};var zL=tfb(Bve,'TreeMap/SubMapType/3',1145,AL,null,null);var pAb;feb(157,Eve,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},xAb,yAb,zAb);_.Nc=function GAb(){return new $wb(this)};_.Fc=function AAb(a){return rAb(this,a)};_.$b=function BAb(){this.a.$b()};_.Hc=function CAb(a){return this.a._b(a)};_.Kc=function DAb(){return this.a.ec().Kc()};_.Mc=function EAb(a){return wAb(this,a)};_.gc=function FAb(){return this.a.gc()};var DL=sfb(Bve,'TreeSet',157);feb(1082,1,{},JAb);_.Ve=function KAb(a,b){return HAb(this.a,a,b)};var FL=sfb(Vxe,'BinaryOperator/lambda$0$Type',1082);feb(1083,1,{},LAb);_.Ve=function MAb(a,b){return IAb(this.a,a,b)};var GL=sfb(Vxe,'BinaryOperator/lambda$1$Type',1083);feb(952,1,{},NAb);_.Kb=function OAb(a){return a};var HL=sfb(Vxe,'Function/lambda$0$Type',952);feb(395,1,nwe,PAb);_.Mb=function QAb(a){return !this.a.Mb(a)};var IL=sfb(Vxe,'Predicate/lambda$2$Type',395);feb(581,1,{581:1});var JL=sfb(Wxe,'Handler',581);feb(2107,1,nve);_.xe=function TAb(){return 'DUMMY'};_.Ib=function UAb(){return this.xe()};var RAb;var LL=sfb(Wxe,'Level',2107);feb(1706,2107,nve,VAb);_.xe=function WAb(){return 'INFO'};var KL=sfb(Wxe,'Level/LevelInfo',1706);feb(1843,1,{},$Ab);var XAb;var ML=sfb(Wxe,'LogManager',1843);feb(1896,1,nve,aBb);_.b=null;var NL=sfb(Wxe,'LogRecord',1896);feb(525,1,{525:1},oBb);_.e=false;var bBb=false,cBb=false,dBb=false,eBb=false,fBb=false;var OL=sfb(Wxe,'Logger',525);feb(835,581,{581:1},rBb);var PL=sfb(Wxe,'SimpleConsoleLogHandler',835);feb(108,22,{3:1,34:1,22:1,108:1},yBb);var uBb,vBb,wBb;var QL=tfb(Zxe,'Collector/Characteristics',108,WI,ABb,zBb);var BBb;feb(758,1,{},DBb);var RL=sfb(Zxe,'CollectorImpl',758);feb(1074,1,{},RBb);_.Ve=function SBb(a,b){return Hyb(RD(a,213),RD(b,213))};var SL=sfb(Zxe,'Collectors/10methodref$merge$Type',1074);feb(1075,1,{},TBb);_.Kb=function UBb(a){return Iyb(RD(a,213))};var TL=sfb(Zxe,'Collectors/11methodref$toString$Type',1075);feb(1076,1,{},VBb);_.Kb=function WBb(a){return Geb(),SSb(a)?true:false};var UL=sfb(Zxe,'Collectors/12methodref$test$Type',1076);feb(144,1,{},XBb);_.Yd=function YBb(a,b){RD(a,16).Fc(b)};var VL=sfb(Zxe,'Collectors/20methodref$add$Type',144);feb(146,1,{},ZBb);_.Xe=function $Bb(){return new bnb};var WL=sfb(Zxe,'Collectors/21methodref$ctor$Type',146);feb(359,1,{},_Bb);_.Xe=function aCb(){return new _sb};var XL=sfb(Zxe,'Collectors/23methodref$ctor$Type',359);feb(360,1,{},bCb);_.Yd=function cCb(a,b){Ysb(RD(a,49),b)};var YL=sfb(Zxe,'Collectors/24methodref$add$Type',360);feb(1069,1,{},dCb);_.Ve=function eCb(a,b){return EBb(RD(a,15),RD(b,16))};var ZL=sfb(Zxe,'Collectors/4methodref$addAll$Type',1069);feb(1073,1,{},fCb);_.Yd=function gCb(a,b){Gyb(RD(a,213),RD(b,483))};var $L=sfb(Zxe,'Collectors/9methodref$add$Type',1073);feb(1072,1,{},hCb);_.Xe=function iCb(){return new Jyb(this.a,this.b,this.c)};var _L=sfb(Zxe,'Collectors/lambda$15$Type',1072);feb(1077,1,{},jCb);_.Xe=function kCb(){var a;return a=new gub,dub(a,(Geb(),false),new bnb),dub(a,true,new bnb),a};var aM=sfb(Zxe,'Collectors/lambda$22$Type',1077);feb(1078,1,{},lCb);_.Xe=function mCb(){return cD(WC(jJ,1),rve,1,5,[this.a])};var bM=sfb(Zxe,'Collectors/lambda$25$Type',1078);feb(1079,1,{},nCb);_.Yd=function oCb(a,b){GBb(this.a,SD(a))};var cM=sfb(Zxe,'Collectors/lambda$26$Type',1079);feb(1080,1,{},pCb);_.Ve=function qCb(a,b){return HBb(this.a,SD(a),SD(b))};var dM=sfb(Zxe,'Collectors/lambda$27$Type',1080);feb(1081,1,{},rCb);_.Kb=function sCb(a){return SD(a)[0]};var eM=sfb(Zxe,'Collectors/lambda$28$Type',1081);feb(728,1,{},uCb);_.Ve=function vCb(a,b){return tCb(a,b)};var fM=sfb(Zxe,'Collectors/lambda$4$Type',728);feb(145,1,{},wCb);_.Ve=function xCb(a,b){return JBb(RD(a,16),RD(b,16))};var gM=sfb(Zxe,'Collectors/lambda$42$Type',145);feb(361,1,{},yCb);_.Ve=function zCb(a,b){return KBb(RD(a,49),RD(b,49))};var hM=sfb(Zxe,'Collectors/lambda$50$Type',361);feb(362,1,{},ACb);_.Kb=function BCb(a){return RD(a,49)};var iM=sfb(Zxe,'Collectors/lambda$51$Type',362);feb(1068,1,{},CCb);_.Yd=function DCb(a,b){LBb(this.a,RD(a,85),b)};var jM=sfb(Zxe,'Collectors/lambda$7$Type',1068);feb(1070,1,{},ECb);_.Ve=function FCb(a,b){return NBb(RD(a,85),RD(b,85),new dCb)};var kM=sfb(Zxe,'Collectors/lambda$8$Type',1070);feb(1071,1,{},GCb);_.Kb=function HCb(a){return MBb(this.a,RD(a,85))};var lM=sfb(Zxe,'Collectors/lambda$9$Type',1071);feb(550,1,{});_.$e=function OCb(){ICb(this)};_.d=false;var TM=sfb(Zxe,'TerminatableStream',550);feb(827,550,$xe,WCb);_.$e=function XCb(){ICb(this)};var qM=sfb(Zxe,'DoubleStreamImpl',827);feb(1847,736,Pve,$Cb);_.Re=function aDb(a){return ZCb(this,RD(a,189))};_.a=null;var nM=sfb(Zxe,'DoubleStreamImpl/2',1847);feb(1848,1,Gxe,bDb);_.Pe=function cDb(a){_Cb(this.a,a)};var mM=sfb(Zxe,'DoubleStreamImpl/2/lambda$0$Type',1848);feb(1845,1,Gxe,dDb);_.Pe=function eDb(a){YCb(this.a,a)};var oM=sfb(Zxe,'DoubleStreamImpl/lambda$0$Type',1845);feb(1846,1,Gxe,fDb);_.Pe=function gDb(a){Nrb(this.a,a)};var pM=sfb(Zxe,'DoubleStreamImpl/lambda$2$Type',1846);feb(1397,735,Pve,kDb);_.Re=function lDb(a){return jDb(this,RD(a,202))};_.a=0;_.b=0;_.c=0;var rM=sfb(Zxe,'IntStream/5',1397);feb(806,550,$xe,oDb);_.$e=function pDb(){ICb(this)};_._e=function qDb(){return LCb(this),this.a};var vM=sfb(Zxe,'IntStreamImpl',806);feb(807,550,$xe,rDb);_.$e=function sDb(){ICb(this)};_._e=function tDb(){return LCb(this),Txb(),Sxb};var sM=sfb(Zxe,'IntStreamImpl/Empty',807);feb(1687,1,Rve,uDb);_.Dd=function vDb(a){ktb(this.a,a)};var uM=sfb(Zxe,'IntStreamImpl/lambda$4$Type',1687);var RM=ufb(Zxe,'Stream');feb(26,550,{533:1,687:1,848:1},SDb);_.$e=function TDb(){ICb(this)};var wDb;var QM=sfb(Zxe,'StreamImpl',26);feb(1102,499,Pve,YDb);_.Bd=function ZDb(a){while(WDb(this)){if(this.a.Bd(a)){return true}else{ICb(this.b);this.b=null;this.a=null}}return false};var xM=sfb(Zxe,'StreamImpl/1',1102);feb(1103,1,Qve,$Db);_.Cd=function _Db(a){XDb(this.a,RD(a,848))};var wM=sfb(Zxe,'StreamImpl/1/lambda$0$Type',1103);feb(1104,1,nwe,aEb);_.Mb=function bEb(a){return Ysb(this.a,a)};var yM=sfb(Zxe,'StreamImpl/1methodref$add$Type',1104);feb(1105,499,Pve,cEb);_.Bd=function dEb(a){var b;if(!this.a){b=new bnb;this.b.a.Nb(new eEb(b));yob();_mb(b,this.c);this.a=new Swb(b,16)}return Rwb(this.a,a)};_.a=null;var AM=sfb(Zxe,'StreamImpl/5',1105);feb(1106,1,Qve,eEb);_.Cd=function fEb(a){Rmb(this.a,a)};var zM=sfb(Zxe,'StreamImpl/5/2methodref$add$Type',1106);feb(737,499,Pve,hEb);_.Bd=function iEb(a){this.b=false;while(!this.b&&this.c.Bd(new jEb(this,a)));return this.b};_.b=false;var CM=sfb(Zxe,'StreamImpl/FilterSpliterator',737);feb(1096,1,Qve,jEb);_.Cd=function kEb(a){gEb(this.a,this.b,a)};var BM=sfb(Zxe,'StreamImpl/FilterSpliterator/lambda$0$Type',1096);feb(1091,736,Pve,nEb);_.Re=function oEb(a){return mEb(this,RD(a,189))};var EM=sfb(Zxe,'StreamImpl/MapToDoubleSpliterator',1091);feb(1095,1,Qve,pEb);_.Cd=function qEb(a){lEb(this.a,this.b,a)};var DM=sfb(Zxe,'StreamImpl/MapToDoubleSpliterator/lambda$0$Type',1095);feb(1090,735,Pve,tEb);_.Re=function uEb(a){return sEb(this,RD(a,202))};var GM=sfb(Zxe,'StreamImpl/MapToIntSpliterator',1090);feb(1094,1,Qve,vEb);_.Cd=function wEb(a){rEb(this.a,this.b,a)};var FM=sfb(Zxe,'StreamImpl/MapToIntSpliterator/lambda$0$Type',1094);feb(734,499,Pve,zEb);_.Bd=function AEb(a){return yEb(this,a)};var IM=sfb(Zxe,'StreamImpl/MapToObjSpliterator',734);feb(1093,1,Qve,BEb);_.Cd=function CEb(a){xEb(this.a,this.b,a)};var HM=sfb(Zxe,'StreamImpl/MapToObjSpliterator/lambda$0$Type',1093);feb(1092,499,Pve,DEb);_.Bd=function EEb(a){while(Idb(this.b,0)){if(!this.a.Bd(new FEb)){return false}this.b=Vdb(this.b,1)}return this.a.Bd(a)};_.b=0;var KM=sfb(Zxe,'StreamImpl/SkipSpliterator',1092);feb(1097,1,Qve,FEb);_.Cd=function GEb(a){};var JM=sfb(Zxe,'StreamImpl/SkipSpliterator/lambda$0$Type',1097);feb(626,1,Qve,IEb);_.Cd=function JEb(a){HEb(this,a)};var LM=sfb(Zxe,'StreamImpl/ValueConsumer',626);feb(1098,1,Qve,KEb);_.Cd=function LEb(a){xDb()};var MM=sfb(Zxe,'StreamImpl/lambda$0$Type',1098);feb(1099,1,Qve,MEb);_.Cd=function NEb(a){xDb()};var NM=sfb(Zxe,'StreamImpl/lambda$1$Type',1099);feb(1100,1,{},OEb);_.Ve=function PEb(a,b){return UDb(this.a,a,b)};var OM=sfb(Zxe,'StreamImpl/lambda$4$Type',1100);feb(1101,1,Qve,QEb);_.Cd=function REb(a){VDb(this.b,this.a,a)};var PM=sfb(Zxe,'StreamImpl/lambda$5$Type',1101);feb(1107,1,Qve,SEb);_.Cd=function TEb(a){PCb(this.a,RD(a,380))};var SM=sfb(Zxe,'TerminatableStream/lambda$0$Type',1107);feb(2142,1,{});feb(2014,1,{},gFb);var UM=sfb('javaemul.internal','ConsoleLogger',2014);var iFb=0;feb(2134,1,{});feb(1830,1,Qve,FFb);_.Cd=function GFb(a){RD(a,317)};var VM=sfb(eye,'BowyerWatsonTriangulation/lambda$0$Type',1830);feb(1831,1,Qve,HFb);_.Cd=function IFb(a){ye(this.a,RD(a,317).e)};var WM=sfb(eye,'BowyerWatsonTriangulation/lambda$1$Type',1831);feb(1832,1,Qve,JFb);_.Cd=function KFb(a){RD(a,177)};var XM=sfb(eye,'BowyerWatsonTriangulation/lambda$2$Type',1832);feb(1827,1,fye,NFb);_.Ne=function OFb(a,b){return MFb(this.a,RD(a,177),RD(b,177))};_.Fb=function PFb(a){return this===a};_.Oe=function QFb(){return new Frb(this)};var YM=sfb(eye,'NaiveMinST/lambda$0$Type',1827);feb(506,1,{},SFb);var ZM=sfb(eye,'NodeMicroLayout',506);feb(177,1,{177:1},TFb);_.Fb=function UFb(a){var b;if(ZD(a,177)){b=RD(a,177);return Fvb(this.a,b.a)&&Fvb(this.b,b.b)||Fvb(this.a,b.b)&&Fvb(this.b,b.a)}else{return false}};_.Hb=function VFb(){return Gvb(this.a)+Gvb(this.b)};var $M=sfb(eye,'TEdge',177);feb(317,1,{317:1},XFb);_.Fb=function YFb(a){var b;if(ZD(a,317)){b=RD(a,317);return WFb(this,b.a)&&WFb(this,b.b)&&WFb(this,b.c)}else{return false}};_.Hb=function ZFb(){return Gvb(this.a)+Gvb(this.b)+Gvb(this.c)};var _M=sfb(eye,'TTriangle',317);feb(225,1,{225:1},$Fb);var aN=sfb(eye,'Tree',225);feb(1218,1,{},aGb);var cN=sfb(gye,'Scanline',1218);var bN=ufb(gye,hye);feb(1758,1,{},dGb);var dN=sfb(iye,'CGraph',1758);feb(316,1,{316:1},fGb);_.b=0;_.c=0;_.d=0;_.g=0;_.i=0;_.k=pxe;var fN=sfb(iye,'CGroup',316);feb(830,1,{},jGb);var eN=sfb(iye,'CGroup/CGroupBuilder',830);feb(60,1,{60:1},kGb);_.Ib=function lGb(){var a;if(this.j){return WD(this.j.Kb(this))}return lfb(hN),hN.o+'@'+(a=kFb(this)>>>0,a.toString(16))};_.f=0;_.i=pxe;var hN=sfb(iye,'CNode',60);feb(829,1,{},qGb);var gN=sfb(iye,'CNode/CNodeBuilder',829);var vGb;feb(1590,1,{},xGb);_.ff=function yGb(a,b){return 0};_.gf=function zGb(a,b){return 0};var iN=sfb(iye,kye,1590);feb(1853,1,{},AGb);_.cf=function BGb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;j=oxe;for(d=new Anb(a.a.b);d.a<d.c.c.length;){b=RD(ynb(d),60);j=$wnd.Math.min(j,b.a.j.d.c+b.b.a)}n=new Yub;for(g=new Anb(a.a.a);g.a<g.c.c.length;){f=RD(ynb(g),316);f.k=j;f.g==0&&(Pub(n,f,n.c.b,n.c),true)}while(n.b!=0){f=RD(n.b==0?null:(sFb(n.b!=0),Wub(n,n.a.a)),316);e=f.j.d.c;for(m=f.a.a.ec().Kc();m.Ob();){k=RD(m.Pb(),60);p=f.k+k.b.a;!LGb(a,f,a.d)||k.d.c<p?(k.i=p):(k.i=k.d.c)}e-=f.j.i;f.b+=e;a.d==(Cmd(),zmd)||a.d==xmd?(f.c+=e):(f.c-=e);for(l=f.a.a.ec().Kc();l.Ob();){k=RD(l.Pb(),60);for(i=k.c.Kc();i.Ob();){h=RD(i.Pb(),60);Dmd(a.d)?(o=a.g.ff(k,h)):(o=a.g.gf(k,h));h.a.k=$wnd.Math.max(h.a.k,k.i+k.d.b+o-h.b.a);MGb(a,h,a.d)&&(h.a.k=$wnd.Math.max(h.a.k,h.d.c-h.b.a));--h.a.g;h.a.g==0&&Mub(n,h.a)}}}for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.d.c=b.i}};var jN=sfb(iye,'LongestPathCompaction',1853);feb(1756,1,{},VGb);_.e=false;var CGb,DGb,EGb;var lN=sfb(iye,pye,1756);feb(1757,1,Qve,WGb);_.Cd=function XGb(a){NGb(this.a,RD(a,42))};var kN=sfb(iye,qye,1757);feb(1854,1,{},YGb);_.df=function ZGb(a){var b,c,d,e,f,g,h;for(c=new Anb(a.a.b);c.a<c.c.c.length;){b=RD(ynb(c),60);b.c.$b()}for(e=new Anb(a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);for(g=new Anb(a.a.b);g.a<g.c.c.length;){f=RD(ynb(g),60);if(d==f){continue}if(!!d.a&&d.a==f.a){continue}Dmd(a.d)?(h=a.g.gf(d,f)):(h=a.g.ff(d,f));(f.d.c>d.d.c||d.d.c==f.d.c&&d.d.b<f.d.b)&&sGb(f.d.d+f.d.a+h,d.d.d)&&uGb(f.d.d,d.d.d+d.d.a+h)&&d.c.Fc(f)}}};var mN=sfb(iye,'QuadraticConstraintCalculation',1854);feb(529,1,{529:1},cHb);_.a=false;_.b=false;_.c=false;_.d=false;var nN=sfb(iye,rye,529);feb(817,1,{},fHb);_.df=function gHb(a){this.c=a;eHb(this,new xHb)};var tN=sfb(iye,sye,817);feb(1784,1,{693:1},lHb);_.bf=function mHb(a){iHb(this,RD(a,472))};var pN=sfb(iye,tye,1784);feb(1785,1,fye,oHb);_.Ne=function pHb(a,b){return nHb(RD(a,60),RD(b,60))};_.Fb=function qHb(a){return this===a};_.Oe=function rHb(){return new Frb(this)};var oN=sfb(iye,uye,1785);feb(472,1,{472:1},sHb);_.a=false;var qN=sfb(iye,vye,472);feb(1786,1,fye,tHb);_.Ne=function uHb(a,b){return hHb(RD(a,472),RD(b,472))};_.Fb=function vHb(a){return this===a};_.Oe=function wHb(){return new Frb(this)};var rN=sfb(iye,wye,1786);feb(1787,1,xye,xHb);_.Lb=function yHb(a){return RD(a,60),true};_.Fb=function zHb(a){return this===a};_.Mb=function AHb(a){return RD(a,60),true};var sN=sfb(iye,'ScanlineConstraintCalculator/lambda$1$Type',1787);feb(436,22,{3:1,34:1,22:1,436:1},EHb);var BHb,CHb;var uN=tfb(yye,'HighLevelSortingCriterion',436,WI,GHb,FHb);var HHb;feb(435,22,{3:1,34:1,22:1,435:1},MHb);var JHb,KHb;var vN=tfb(yye,'LowLevelSortingCriterion',435,WI,OHb,NHb);var PHb;var B2=ufb(zye,'ILayoutMetaDataProvider');feb(864,1,Eye,ZHb);_.hf=function $Hb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Aye),Fye),'Polyomino Traversal Strategy'),'Traversal strategy for trying different candidate positions for polyominoes.'),XHb),(kid(),eid)),xN),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Bye),Fye),'Polyomino Secondary Sorting Criterion'),'Possible secondary sorting criteria for the processing order of polyominoes. They are used when polyominoes are equal according to the primary sorting criterion HighLevelSortingCriterion.'),VHb),eid),vN),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Cye),Fye),'Polyomino Primary Sorting Criterion'),'Possible primary sorting criteria for the processing order of polyominoes.'),THb),eid),uN),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Dye),Fye),'Fill Polyominoes'),'Use the Profile Fill algorithm to fill polyominoes to prevent small polyominoes from being placed inside of big polyominoes with large holes. Might increase packing area.'),(Geb(),true)),cid),QI),xsb(Whd))))};var RHb,SHb,THb,UHb,VHb,WHb,XHb;var wN=sfb(yye,'PolyominoOptions',864);feb(257,22,{3:1,34:1,22:1,257:1},jIb);var _Hb,aIb,bIb,cIb,dIb,eIb,fIb,gIb,hIb;var xN=tfb(yye,'TraversalStrategy',257,WI,lIb,kIb);var mIb;feb(218,1,{218:1},pIb);_.Ib=function qIb(){return 'NEdge[id='+this.b+' w='+this.g+' d='+this.a+']'};_.a=1;_.b=0;_.c=0;_.f=false;_.g=0;var zN=sfb(Gye,'NEdge',218);feb(182,1,{},wIb);var yN=sfb(Gye,'NEdge/NEdgeBuilder',182);feb(662,1,{},BIb);var AN=sfb(Gye,'NGraph',662);feb(125,1,{125:1},DIb);_.c=-1;_.d=0;_.e=0;_.i=-1;_.j=false;var DN=sfb(Gye,'NNode',125);feb(808,1,Exe,GIb);_.Jc=function OIb(a){xgb(this,a)};_.Lc=function VIb(){return new SDb(null,new Swb(this,16))};_.jd=function $Ib(a){tvb(this,a)};_.Nc=function _Ib(){return new Swb(this,16)};_.Oc=function aJb(){return new SDb(null,new Swb(this,16))};_.bd=function HIb(a,b){++this.b;Qmb(this.a,a,b)};_.Fc=function IIb(a){return EIb(this,a)};_.cd=function JIb(a,b){++this.b;return Smb(this.a,a,b)};_.Gc=function KIb(a){++this.b;return Tmb(this.a,a)};_.$b=function LIb(){++this.b;aFb(this.a.c,0)};_.Hc=function MIb(a){return Wmb(this.a,a,0)!=-1};_.Ic=function NIb(a){return Be(this.a,a)};_.Xb=function PIb(a){return Vmb(this.a,a)};_.dd=function QIb(a){return Wmb(this.a,a,0)};_.dc=function RIb(){return this.a.c.length==0};_.Kc=function SIb(){return Nr(new Anb(this.a))};_.ed=function TIb(){throw Adb(new jib)};_.fd=function UIb(a){throw Adb(new jib)};_.gd=function WIb(a){++this.b;return Xmb(this.a,a)};_.Mc=function XIb(a){return FIb(this,a)};_.hd=function YIb(a,b){++this.b;return $mb(this.a,a,b)};_.gc=function ZIb(){return this.a.c.length};_.kd=function bJb(a,b){return new Rkb(this.a,a,b)};_.Pc=function cJb(){return UEb(this.a.c)};_.Qc=function dJb(a){return anb(this.a,a)};_.b=0;var BN=sfb(Gye,'NNode/ChangeAwareArrayList',808);feb(275,1,{},gJb);var CN=sfb(Gye,'NNode/NNodeBuilder',275);feb(1695,1,{},BJb);_.a=false;_.f=lve;_.j=0;var EN=sfb(Gye,'NetworkSimplex',1695);feb(1314,1,Qve,HJb);_.Cd=function IJb(a){GJb(this.a,RD(a,695),true,false)};var FN=sfb(Iye,'NodeLabelAndSizeCalculator/lambda$0$Type',1314);feb(565,1,{},PJb);_.b=true;_.c=true;_.d=true;_.e=true;var GN=sfb(Iye,'NodeMarginCalculator',565);feb(217,1,{217:1});_.j=false;_.k=false;var IN=sfb(Jye,'Cell',217);feb(127,217,{127:1,217:1},TJb);_.jf=function UJb(){return SJb(this)};_.kf=function VJb(){var a;a=this.n;return this.a.a+a.b+a.c};var HN=sfb(Jye,'AtomicCell',127);feb(237,22,{3:1,34:1,22:1,237:1},$Jb);var WJb,XJb,YJb;var JN=tfb(Jye,'ContainerArea',237,WI,aKb,_Jb);var bKb;feb(336,217,Lye);var KN=sfb(Jye,'ContainerCell',336);feb(1538,336,Lye,wKb);_.jf=function xKb(){var a;a=0;this.e?this.b?(a=this.b.b):!!this.a[1][1]&&(a=this.a[1][1].jf()):(a=vKb(this,rKb(this,true)));return a>0?a+this.n.d+this.n.a:0};_.kf=function yKb(){var a,b,c,d,e;e=0;if(this.e){this.b?(e=this.b.a):!!this.a[1][1]&&(e=this.a[1][1].kf())}else if(this.g){e=vKb(this,pKb(this,null,true))}else{for(b=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),c=0,d=b.length;c<d;++c){a=b[c];e=$wnd.Math.max(e,vKb(this,pKb(this,a,true)))}}return e>0?e+this.n.b+this.n.c:0};_.lf=function zKb(){var a,b,c,d,e;if(this.g){a=pKb(this,null,false);for(c=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),d=0,e=c.length;d<e;++d){b=c[d];nKb(this,b,a)}}else{for(c=(ZJb(),cD(WC(JN,1),jwe,237,0,[WJb,XJb,YJb])),d=0,e=c.length;d<e;++d){b=c[d];a=pKb(this,b,false);nKb(this,b,a)}}};_.mf=function AKb(){var a,b,c,d;b=this.i;a=this.n;d=rKb(this,false);lKb(this,(ZJb(),WJb),b.d+a.d,d);lKb(this,YJb,b.d+b.a-a.a-d[2],d);c=b.a-a.d-a.a;if(d[0]>0){d[0]+=this.d;c-=d[0]}if(d[2]>0){d[2]+=this.d;c-=d[2]}this.c.a=$wnd.Math.max(0,c);this.c.d=b.d+a.d+(this.c.a-c)/2;d[1]=$wnd.Math.max(d[1],c);lKb(this,XJb,b.d+a.d+d[0]-(d[1]-c)/2,d)};_.b=null;_.d=0;_.e=false;_.f=false;_.g=false;var iKb=0,jKb=0;var LN=sfb(Jye,'GridContainerCell',1538);feb(470,22,{3:1,34:1,22:1,470:1},FKb);var BKb,CKb,DKb;var MN=tfb(Jye,'HorizontalLabelAlignment',470,WI,HKb,GKb);var IKb;feb(314,217,{217:1,314:1},TKb,UKb,VKb);_.jf=function WKb(){return PKb(this)};_.kf=function XKb(){return QKb(this)};_.a=0;_.c=false;var NN=sfb(Jye,'LabelCell',314);feb(252,336,{217:1,336:1,252:1},dLb);_.jf=function eLb(){return YKb(this)};_.kf=function fLb(){return ZKb(this)};_.lf=function iLb(){$Kb(this)};_.mf=function jLb(){_Kb(this)};_.b=0;_.c=0;_.d=false;var SN=sfb(Jye,'StripContainerCell',252);feb(1691,1,nwe,kLb);_.Mb=function lLb(a){return gLb(RD(a,217))};var ON=sfb(Jye,'StripContainerCell/lambda$0$Type',1691);feb(1692,1,{},mLb);_.Ye=function nLb(a){return RD(a,217).kf()};var PN=sfb(Jye,'StripContainerCell/lambda$1$Type',1692);feb(1693,1,nwe,oLb);_.Mb=function pLb(a){return hLb(RD(a,217))};var QN=sfb(Jye,'StripContainerCell/lambda$2$Type',1693);feb(1694,1,{},qLb);_.Ye=function rLb(a){return RD(a,217).jf()};var RN=sfb(Jye,'StripContainerCell/lambda$3$Type',1694);feb(471,22,{3:1,34:1,22:1,471:1},wLb);var sLb,tLb,uLb;var TN=tfb(Jye,'VerticalLabelAlignment',471,WI,yLb,xLb);var zLb;feb(800,1,{},CLb);_.c=0;_.d=0;_.k=0;_.s=0;_.t=0;_.v=false;_.w=0;_.D=false;var WN=sfb(Rye,'NodeContext',800);feb(1536,1,fye,FLb);_.Ne=function GLb(a,b){return ELb(RD(a,64),RD(b,64))};_.Fb=function HLb(a){return this===a};_.Oe=function ILb(){return new Frb(this)};var UN=sfb(Rye,'NodeContext/0methodref$comparePortSides$Type',1536);feb(1537,1,fye,JLb);_.Ne=function KLb(a,b){return DLb(RD(a,117),RD(b,117))};_.Fb=function LLb(a){return this===a};_.Oe=function MLb(){return new Frb(this)};var VN=sfb(Rye,'NodeContext/1methodref$comparePortContexts$Type',1537);feb(164,22,{3:1,34:1,22:1,164:1},kMb);var NLb,OLb,PLb,QLb,RLb,SLb,TLb,ULb,VLb,WLb,XLb,YLb,ZLb,$Lb,_Lb,aMb,bMb,cMb,dMb,eMb,fMb,gMb;var XN=tfb(Rye,'NodeLabelLocation',164,WI,nMb,mMb);var oMb;feb(117,1,{117:1},rMb);_.a=false;var YN=sfb(Rye,'PortContext',117);feb(1541,1,Qve,KMb);_.Cd=function LMb(a){NKb(RD(a,314))};var ZN=sfb(Uye,Vye,1541);feb(1542,1,nwe,MMb);_.Mb=function NMb(a){return !!RD(a,117).c};var $N=sfb(Uye,Wye,1542);feb(1543,1,Qve,OMb);_.Cd=function PMb(a){NKb(RD(a,117).c)};var _N=sfb(Uye,'LabelPlacer/lambda$2$Type',1543);var QMb;feb(1540,1,Qve,YMb);_.Cd=function ZMb(a){RMb();qMb(RD(a,117))};var aO=sfb(Uye,'NodeLabelAndSizeUtilities/lambda$0$Type',1540);feb(801,1,Qve,dNb);_.Cd=function eNb(a){bNb(this.b,this.c,this.a,RD(a,187))};_.a=false;_.c=false;var bO=sfb(Uye,'NodeLabelCellCreator/lambda$0$Type',801);feb(1539,1,Qve,kNb);_.Cd=function lNb(a){jNb(this.a,RD(a,187))};var cO=sfb(Uye,'PortContextCreator/lambda$0$Type',1539);var sNb;feb(1902,1,{},MNb);var eO=sfb(Yye,'GreedyRectangleStripOverlapRemover',1902);feb(1903,1,fye,ONb);_.Ne=function PNb(a,b){return NNb(RD(a,226),RD(b,226))};_.Fb=function QNb(a){return this===a};_.Oe=function RNb(){return new Frb(this)};var dO=sfb(Yye,'GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type',1903);feb(1849,1,{},YNb);_.a=5;_.e=0;var kO=sfb(Yye,'RectangleStripOverlapRemover',1849);feb(1850,1,fye,aOb);_.Ne=function bOb(a,b){return ZNb(RD(a,226),RD(b,226))};_.Fb=function cOb(a){return this===a};_.Oe=function dOb(){return new Frb(this)};var fO=sfb(Yye,'RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type',1850);feb(1852,1,fye,eOb);_.Ne=function fOb(a,b){return $Nb(RD(a,226),RD(b,226))};_.Fb=function gOb(a){return this===a};_.Oe=function hOb(){return new Frb(this)};var gO=sfb(Yye,'RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type',1852);feb(417,22,{3:1,34:1,22:1,417:1},nOb);var iOb,jOb,kOb,lOb;var hO=tfb(Yye,'RectangleStripOverlapRemover/OverlapRemovalDirection',417,WI,pOb,oOb);var qOb;feb(226,1,{226:1},sOb);var iO=sfb(Yye,'RectangleStripOverlapRemover/RectangleNode',226);feb(1851,1,Qve,tOb);_.Cd=function uOb(a){TNb(this.a,RD(a,226))};var jO=sfb(Yye,'RectangleStripOverlapRemover/lambda$1$Type',1851);feb(1323,1,fye,xOb);_.Ne=function yOb(a,b){return wOb(RD(a,176),RD(b,176))};_.Fb=function zOb(a){return this===a};_.Oe=function AOb(){return new Frb(this)};var oO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator',1323);feb(1326,1,{},BOb);_.Kb=function COb(a){return RD(a,334).a};var lO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type',1326);feb(1327,1,nwe,DOb);_.Mb=function EOb(a){return RD(a,332).a};var mO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type',1327);feb(1328,1,nwe,FOb);_.Mb=function GOb(a){return RD(a,332).a};var nO=sfb($ye,'PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type',1328);feb(1321,1,fye,IOb);_.Ne=function JOb(a,b){return HOb(RD(a,176),RD(b,176))};_.Fb=function KOb(a){return this===a};_.Oe=function LOb(){return new Frb(this)};var qO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator',1321);feb(1324,1,{},MOb);_.Kb=function NOb(a){return RD(a,334).a};var pO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type',1324);feb(781,1,fye,POb);_.Ne=function QOb(a,b){return OOb(RD(a,176),RD(b,176))};_.Fb=function ROb(a){return this===a};_.Oe=function SOb(){return new Frb(this)};var rO=sfb($ye,'PolyominoCompactor/MinNumOfExtensionsComparator',781);feb(1319,1,fye,UOb);_.Ne=function VOb(a,b){return TOb(RD(a,330),RD(b,330))};_.Fb=function WOb(a){return this===a};_.Oe=function XOb(){return new Frb(this)};var tO=sfb($ye,'PolyominoCompactor/MinPerimeterComparator',1319);feb(1320,1,fye,ZOb);_.Ne=function $Ob(a,b){return YOb(RD(a,330),RD(b,330))};_.Fb=function _Ob(a){return this===a};_.Oe=function aPb(){return new Frb(this)};var sO=sfb($ye,'PolyominoCompactor/MinPerimeterComparatorWithShape',1320);feb(1322,1,fye,cPb);_.Ne=function dPb(a,b){return bPb(RD(a,176),RD(b,176))};_.Fb=function ePb(a){return this===a};_.Oe=function fPb(){return new Frb(this)};var vO=sfb($ye,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator',1322);feb(1325,1,{},gPb);_.Kb=function hPb(a){return RD(a,334).a};var uO=sfb($ye,'PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type',1325);feb(782,1,{},kPb);_.Ve=function lPb(a,b){return jPb(this,RD(a,42),RD(b,176))};var wO=sfb($ye,'SuccessorCombination',782);feb(649,1,{},nPb);_.Ve=function oPb(a,b){var c;return mPb((c=RD(a,42),RD(b,176),c))};var xO=sfb($ye,'SuccessorJitter',649);feb(648,1,{},qPb);_.Ve=function rPb(a,b){var c;return pPb((c=RD(a,42),RD(b,176),c))};var yO=sfb($ye,'SuccessorLineByLine',648);feb(573,1,{},tPb);_.Ve=function uPb(a,b){var c;return sPb((c=RD(a,42),RD(b,176),c))};var zO=sfb($ye,'SuccessorManhattan',573);feb(1344,1,{},wPb);_.Ve=function xPb(a,b){var c;return vPb((c=RD(a,42),RD(b,176),c))};var AO=sfb($ye,'SuccessorMaxNormWindingInMathPosSense',1344);feb(409,1,{},APb);_.Ve=function BPb(a,b){return yPb(this,a,b)};_.c=false;_.d=false;_.e=false;_.f=false;var CO=sfb($ye,'SuccessorQuadrantsGeneric',409);feb(1345,1,{},CPb);_.Kb=function DPb(a){return RD(a,334).a};var BO=sfb($ye,'SuccessorQuadrantsGeneric/lambda$0$Type',1345);feb(332,22,{3:1,34:1,22:1,332:1},JPb);_.a=false;var EPb,FPb,GPb,HPb;var DO=tfb(dze,eze,332,WI,LPb,KPb);var MPb;feb(1317,1,{});_.Ib=function UPb(){var a,b,c,d,e,f;c=' ';a=sgb(0);for(e=0;e<this.o;e++){c+=''+a.a;a=sgb(OPb(a.a))}c+='\n';a=sgb(0);for(f=0;f<this.p;f++){c+=''+a.a;a=sgb(OPb(a.a));for(d=0;d<this.o;d++){b=SPb(this,d,f);Ddb(b,0)==0?(c+='_'):Ddb(b,1)==0?(c+='X'):(c+='0')}c+='\n'}return zhb(c,0,c.length-1)};_.o=0;_.p=0;var HO=sfb(dze,'TwoBitGrid',1317);feb(330,1317,{330:1},gQb);_.j=0;_.k=0;var EO=sfb(dze,'PlanarGrid',330);feb(176,330,{330:1,176:1});_.g=0;_.i=0;var FO=sfb(dze,'Polyomino',176);var U5=ufb(jze,kze);feb(137,1,lze,qQb);_.qf=function uQb(a,b){return oQb(this,a,b)};_.nf=function rQb(){return lQb(this)};_.of=function sQb(a){return mQb(this,a)};_.pf=function tQb(a){return nQb(this,a)};var W5=sfb(jze,'MapPropertyHolder',137);feb(1318,137,lze,vQb);var GO=sfb(dze,'Polyominoes',1318);var wQb=false,xQb,yQb;feb(1828,1,Qve,GQb);_.Cd=function HQb(a){AQb(RD(a,225))};var IO=sfb(mze,'DepthFirstCompaction/0methodref$compactTree$Type',1828);feb(825,1,Qve,IQb);_.Cd=function JQb(a){DQb(this.a,RD(a,225))};var JO=sfb(mze,'DepthFirstCompaction/lambda$1$Type',825);feb(1829,1,Qve,KQb);_.Cd=function LQb(a){EQb(this.a,this.b,this.c,RD(a,225))};var KO=sfb(mze,'DepthFirstCompaction/lambda$2$Type',1829);var MQb,NQb;feb(68,1,{68:1},TQb);var LO=sfb(mze,'Node',68);feb(1214,1,{},WQb);var QO=sfb(mze,'ScanlineOverlapCheck',1214);feb(1215,1,{693:1},$Qb);_.bf=function _Qb(a){YQb(this,RD(a,450))};var NO=sfb(mze,'ScanlineOverlapCheck/OverlapsScanlineHandler',1215);feb(1216,1,fye,bRb);_.Ne=function cRb(a,b){return aRb(RD(a,68),RD(b,68))};_.Fb=function dRb(a){return this===a};_.Oe=function eRb(){return new Frb(this)};var MO=sfb(mze,'ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type',1216);feb(450,1,{450:1},fRb);_.a=false;var OO=sfb(mze,'ScanlineOverlapCheck/Timestamp',450);feb(1217,1,fye,gRb);_.Ne=function hRb(a,b){return XQb(RD(a,450),RD(b,450))};_.Fb=function iRb(a){return this===a};_.Oe=function jRb(){return new Frb(this)};var PO=sfb(mze,'ScanlineOverlapCheck/lambda$0$Type',1217);feb(557,1,{},kRb);var RO=sfb(nze,'SVGImage',557);feb(334,1,{334:1},lRb);_.Ib=function mRb(){return '('+this.a+pve+this.b+pve+this.c+')'};var SO=sfb(nze,'UniqueTriple',334);feb(205,1,oze);var f2=sfb(pze,'AbstractLayoutProvider',205);feb(1114,205,oze,pRb);_.rf=function qRb(a,b){var c,d,e,f;b.Ug(qze,1);this.a=Kfb(UD(Gxd(a,(tSb(),sSb))));if(Hxd(a,iSb)){e=WD(Gxd(a,iSb));c=sgd(ygd(),e);if(c){d=RD(ltd(c.f),205);d.rf(a,b.eh(1))}}f=new rTb(this.a);this.b=pTb(f,a);switch(RD(Gxd(a,(eSb(),aSb)),488).g){case 0:sRb(new wRb,this.b);Ixd(a,lSb,mQb(this.b,lSb));break;default:gib();String.fromCharCode(10);}hTb(f);Ixd(a,kSb,this.b);b.Vg()};_.a=0;var TO=sfb(rze,'DisCoLayoutProvider',1114);feb(1208,1,{},wRb);_.c=false;_.e=0;_.f=0;var UO=sfb(rze,'DisCoPolyominoCompactor',1208);feb(567,1,{567:1},DRb);_.b=true;var VO=sfb(sze,'DCComponent',567);feb(406,22,{3:1,34:1,22:1,406:1},JRb);_.a=false;var ERb,FRb,GRb,HRb;var WO=tfb(sze,'DCDirection',406,WI,LRb,KRb);var MRb;feb(272,137,{3:1,272:1,96:1,137:1},ORb);var XO=sfb(sze,'DCElement',272);feb(407,1,{407:1},QRb);_.c=0;var YO=sfb(sze,'DCExtension',407);feb(762,137,lze,TRb);var ZO=sfb(sze,'DCGraph',762);feb(488,22,{3:1,34:1,22:1,488:1},WRb);var URb;var $O=tfb(tze,uze,488,WI,YRb,XRb);var ZRb;feb(865,1,Eye,fSb);_.hf=function gSb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vze),zze),'Connected Components Compaction Strategy'),'Strategy for packing different connected components in order to save space and enhance readability of a graph.'),bSb),(kid(),eid)),$O),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,wze),zze),'Connected Components Layout Algorithm'),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),iid),qJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,xze),'debug'),'DCGraph'),'Access to the DCGraph is intended for the debug view,'),hid),jJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,yze),'debug'),'List of Polyominoes'),'Access to the polyominoes is intended for the debug view,'),hid),jJ),xsb(Whd))));uSb((new vSb,a))};var _Rb,aSb,bSb,cSb,dSb;var _O=sfb(tze,'DisCoMetaDataProvider',865);feb(1010,1,Eye,vSb);_.hf=function wSb(a){uSb(a)};var hSb,iSb,jSb,kSb,lSb,mSb,nSb,oSb,pSb,qSb,rSb,sSb;var bP=sfb(tze,'DisCoOptions',1010);feb(1011,1,{},xSb);_.sf=function ySb(){var a;return a=new pRb,a};_.tf=function zSb(a){};var aP=sfb(tze,'DisCoOptions/DiscoFactory',1011);feb(568,176,{330:1,176:1,568:1},DSb);_.a=0;_.b=0;_.c=0;_.d=0;var cP=sfb('org.eclipse.elk.alg.disco.structures','DCPolyomino',568);var ESb,FSb,GSb;feb(1286,1,nwe,TSb);_.Mb=function USb(a){return SSb(a)};var dP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$0$Type',1286);feb(1287,1,{},VSb);_.Kb=function WSb(a){return HSb(),JGd(RD(a,74))};var eP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$1$Type',1287);feb(1288,1,nwe,XSb);_.Mb=function YSb(a){return NSb(RD(a,74))};var fP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$2$Type',1288);feb(1289,1,{},ZSb);_.Kb=function $Sb(a){return HSb(),LGd(RD(a,74))};var gP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$3$Type',1289);feb(1290,1,nwe,_Sb);_.Mb=function aTb(a){return OSb(RD(a,74))};var hP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$4$Type',1290);feb(1291,1,nwe,bTb);_.Mb=function cTb(a){return PSb(this.a,RD(a,74))};var iP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$5$Type',1291);feb(1292,1,{},dTb);_.Kb=function eTb(a){return QSb(this.a,RD(a,74))};var jP=sfb(Fze,'ElkGraphComponentsProcessor/lambda$6$Type',1292);feb(1205,1,{},rTb);_.a=0;var mP=sfb(Fze,'ElkGraphTransformer',1205);feb(1206,1,{},tTb);_.Yd=function uTb(a,b){sTb(this,RD(a,167),RD(b,272))};var lP=sfb(Fze,'ElkGraphTransformer/OffsetApplier',1206);feb(1207,1,Qve,wTb);_.Cd=function xTb(a){vTb(this,RD(a,8))};var kP=sfb(Fze,'ElkGraphTransformer/OffsetApplier/OffSetToChainApplier',1207);feb(760,1,{},DTb);var oP=sfb(Kze,Lze,760);feb(1195,1,fye,FTb);_.Ne=function GTb(a,b){return ETb(RD(a,235),RD(b,235))};_.Fb=function HTb(a){return this===a};_.Oe=function ITb(){return new Frb(this)};var nP=sfb(Kze,Mze,1195);feb(1196,1,Qve,OTb);_.Cd=function PTb(a){NTb(this.b,this.a,RD(a,250))};var pP=sfb(Kze,Nze,1196);feb(738,205,oze,TTb);_.rf=function UTb(a,b){QTb(this,a,b)};var qP=sfb(Kze,'ForceLayoutProvider',738);feb(309,137,{3:1,309:1,96:1,137:1});var wP=sfb(Oze,'FParticle',309);feb(250,309,{3:1,250:1,309:1,96:1,137:1},WTb);_.Ib=function XTb(){var a;if(this.a){a=Wmb(this.a.a,this,0);return a>=0?'b'+a+'['+bUb(this.a)+']':'b['+bUb(this.a)+']'}return 'b_'+kFb(this)};var rP=sfb(Oze,'FBendpoint',250);feb(289,137,{3:1,289:1,96:1,137:1},cUb);_.Ib=function dUb(){return bUb(this)};var sP=sfb(Oze,'FEdge',289);feb(235,137,{3:1,235:1,96:1,137:1},gUb);var tP=sfb(Oze,'FGraph',235);feb(453,309,{3:1,453:1,309:1,96:1,137:1},iUb);_.Ib=function jUb(){return this.b==null||this.b.length==0?'l['+bUb(this.a)+']':'l_'+this.b};var uP=sfb(Oze,'FLabel',453);feb(153,309,{3:1,153:1,309:1,96:1,137:1},lUb);_.Ib=function mUb(){return kUb(this)};_.a=0;var vP=sfb(Oze,'FNode',153);feb(2100,1,{});_.vf=function rUb(a){nUb(this,a)};_.wf=function sUb(){oUb(this)};_.d=0;var xP=sfb(Qze,'AbstractForceModel',2100);feb(641,2100,{641:1},tUb);_.uf=function vUb(a,b){var c,d,e,f,g;qUb(this.f,a,b);e=ojd(ajd(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-ejd(a.e)/2-ejd(b.e)/2);c=fUb(this.e,a,b);c>0?(f=-uUb(d,this.c)*c):(f=yUb(d,this.b)*RD(mQb(a,(yVb(),lVb)),17).a);ijd(e,f/g);return e};_.vf=function wUb(a){nUb(this,a);this.a=RD(mQb(a,(yVb(),aVb)),17).a;this.c=Kfb(UD(mQb(a,rVb)));this.b=Kfb(UD(mQb(a,nVb)))};_.xf=function xUb(a){return a<this.a};_.a=0;_.b=0;_.c=0;var yP=sfb(Qze,'EadesModel',641);feb(642,2100,{642:1},zUb);_.uf=function BUb(a,b){var c,d,e,f,g;qUb(this.f,a,b);e=ojd(ajd(b.d),a.d);g=$wnd.Math.sqrt(e.a*e.a+e.b*e.b);d=$wnd.Math.max(0,g-ejd(a.e)/2-ejd(b.e)/2);f=FUb(d,this.a)*RD(mQb(a,(yVb(),lVb)),17).a;c=fUb(this.e,a,b);c>0&&(f-=AUb(d,this.a)*c);ijd(e,f*this.b/g);return e};_.vf=function CUb(a){var b,c,d,e,f,g,h;nUb(this,a);this.b=Kfb(UD(mQb(a,(yVb(),sVb))));this.c=this.b/RD(mQb(a,aVb),17).a;d=a.e.c.length;f=0;e=0;for(h=new Anb(a.e);h.a<h.c.c.length;){g=RD(ynb(h),153);f+=g.e.a;e+=g.e.b}b=f*e;c=Kfb(UD(mQb(a,rVb)))*Tye;this.a=$wnd.Math.sqrt(b/(2*d))*c};_.wf=function DUb(){oUb(this);this.b-=this.c};_.xf=function EUb(a){return this.b>0};_.a=0;_.b=0;_.c=0;var zP=sfb(Qze,'FruchtermanReingoldModel',642);feb(860,1,Eye,PUb);_.hf=function QUb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Rze),''),'Force Model'),'Determines the model for force calculation.'),IUb),(kid(),eid)),BP),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Sze),''),'Iterations'),'The number of iterations on the force model.'),sgb(300)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Tze),''),'Repulsive Power'),'Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Uze),''),'FR Temperature'),'The temperature is used as a scaling factor for particle displacements.'),Vze),did),VI),xsb(Whd))));zgd(a,Uze,Rze,NUb);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Wze),''),'Eades Repulsion'),"Factor for repulsive forces in Eades' model."),5),did),VI),xsb(Whd))));zgd(a,Wze,Rze,KUb);zVb((new AVb,a))};var GUb,HUb,IUb,JUb,KUb,LUb,MUb,NUb;var AP=sfb(Xze,'ForceMetaDataProvider',860);feb(432,22,{3:1,34:1,22:1,432:1},UUb);var RUb,SUb;var BP=tfb(Xze,'ForceModelStrategy',432,WI,WUb,VUb);var XUb;feb(Awe,1,Eye,AVb);_.hf=function BVb(a){zVb(a)};var ZUb,$Ub,_Ub,aVb,bVb,cVb,dVb,eVb,fVb,gVb,hVb,iVb,jVb,kVb,lVb,mVb,nVb,oVb,pVb,qVb,rVb,sVb,tVb,uVb,vVb,wVb,xVb;var DP=sfb(Xze,'ForceOptions',Awe);feb(1001,1,{},CVb);_.sf=function DVb(){var a;return a=new TTb,a};_.tf=function EVb(a){};var CP=sfb(Xze,'ForceOptions/ForceFactory',1001);var FVb,GVb,HVb,IVb;feb(861,1,Eye,RVb);_.hf=function SVb(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vAe),''),'Fixed Position'),'Prevent that the node is moved by the layout algorithm.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Vhd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,wAe),''),'Desired Edge Length'),'Either specified for parent nodes or for individual edges, where the latter takes higher precedence.'),100),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Thd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xAe),''),'Layout Dimension'),'Dimensions that are permitted to be altered during layout.'),MVb),eid),JP),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yAe),''),'Stress Epsilon'),'Termination criterion for the iterative process.'),Vze),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zAe),''),'Iteration Limit'),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),sgb(lve)),gid),bJ),xsb(Whd))));eWb((new fWb,a))};var KVb,LVb,MVb,NVb,OVb,PVb;var EP=sfb(Xze,'StressMetaDataProvider',861);feb(1004,1,Eye,fWb);_.hf=function gWb(a){eWb(a)};var TVb,UVb,VVb,WVb,XVb,YVb,ZVb,$Vb,_Vb,aWb,bWb,cWb;var GP=sfb(Xze,'StressOptions',1004);feb(1005,1,{},hWb);_.sf=function iWb(){var a;return a=new kWb,a};_.tf=function jWb(a){};var FP=sfb(Xze,'StressOptions/StressFactory',1005);feb(1110,205,oze,kWb);_.rf=function lWb(a,b){var c,d,e,f,g;b.Ug(BAe,1);Heb(TD(Gxd(a,(dWb(),XVb))))?Heb(TD(Gxd(a,bWb)))||RFb((c=new SFb((lud(),new zud(a))),c)):QTb(new TTb,a,b.eh(1));e=KTb(a);d=CTb(this.a,e);for(g=d.Kc();g.Ob();){f=RD(g.Pb(),235);if(f.e.c.length<=1){continue}uWb(this.b,f);sWb(this.b);Umb(f.d,new mWb)}e=BTb(d);JTb(e);b.Vg()};var IP=sfb(DAe,'StressLayoutProvider',1110);feb(1111,1,Qve,mWb);_.Cd=function nWb(a){hUb(RD(a,453))};var HP=sfb(DAe,'StressLayoutProvider/lambda$0$Type',1111);feb(1002,1,{},vWb);_.c=0;_.e=0;_.g=0;var LP=sfb(DAe,'StressMajorization',1002);feb(391,22,{3:1,34:1,22:1,391:1},BWb);var xWb,yWb,zWb;var JP=tfb(DAe,'StressMajorization/Dimension',391,WI,DWb,CWb);var EWb;feb(1003,1,fye,GWb);_.Ne=function HWb(a,b){return wWb(this.a,RD(a,153),RD(b,153))};_.Fb=function IWb(a){return this===a};_.Oe=function JWb(){return new Frb(this)};var KP=sfb(DAe,'StressMajorization/lambda$0$Type',1003);feb(1192,1,{},RWb);var OP=sfb(FAe,'ElkLayered',1192);feb(1193,1,Qve,UWb);_.Cd=function VWb(a){SWb(this.a,RD(a,36))};var MP=sfb(FAe,'ElkLayered/lambda$0$Type',1193);feb(1194,1,Qve,WWb);_.Cd=function XWb(a){TWb(this.a,RD(a,36))};var NP=sfb(FAe,'ElkLayered/lambda$1$Type',1194);feb(1281,1,{},dXb);var YWb,ZWb,$Wb;var SP=sfb(FAe,'GraphConfigurator',1281);feb(770,1,Qve,fXb);_.Cd=function gXb(a){aXb(this.a,RD(a,10))};var PP=sfb(FAe,'GraphConfigurator/lambda$0$Type',770);feb(771,1,{},hXb);_.Kb=function iXb(a){return _Wb(),new SDb(null,new Swb(RD(a,30).a,16))};var QP=sfb(FAe,'GraphConfigurator/lambda$1$Type',771);feb(772,1,Qve,jXb);_.Cd=function kXb(a){aXb(this.a,RD(a,10))};var RP=sfb(FAe,'GraphConfigurator/lambda$2$Type',772);feb(1109,205,oze,lXb);_.rf=function mXb(a,b){var c;c=c5b(new k5b,a);dE(Gxd(a,(yCc(),IAc)))===dE((Fnd(),Cnd))?LWb(this.a,c,b):MWb(this.a,c,b);b.$g()||J5b(new N5b,c)};var TP=sfb(FAe,'LayeredLayoutProvider',1109);feb(367,22,{3:1,34:1,22:1,367:1},tXb);var nXb,oXb,pXb,qXb,rXb;var UP=tfb(FAe,'LayeredPhases',367,WI,vXb,uXb);var wXb;feb(1717,1,{},EXb);_.i=0;var yXb;var XP=sfb(GAe,'ComponentsToCGraphTransformer',1717);var jYb;feb(1718,1,{},FXb);_.yf=function GXb(a,b){return $wnd.Math.min(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};_.zf=function HXb(a,b){return $wnd.Math.min(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};var VP=sfb(GAe,'ComponentsToCGraphTransformer/1',1718);feb(86,1,{86:1});_.i=0;_.k=true;_.o=pxe;var bQ=sfb(HAe,'CNode',86);feb(469,86,{469:1,86:1},IXb,JXb);_.Ib=function KXb(){return ''};var WP=sfb(GAe,'ComponentsToCGraphTransformer/CRectNode',469);feb(1688,1,{},XXb);var LXb,MXb;var $P=sfb(GAe,'OneDimensionalComponentsCompaction',1688);feb(1689,1,{},$Xb);_.Kb=function _Xb(a){return YXb(RD(a,42))};_.Fb=function aYb(a){return this===a};var YP=sfb(GAe,'OneDimensionalComponentsCompaction/lambda$0$Type',1689);feb(1690,1,{},bYb);_.Kb=function cYb(a){return ZXb(RD(a,42))};_.Fb=function dYb(a){return this===a};var ZP=sfb(GAe,'OneDimensionalComponentsCompaction/lambda$1$Type',1690);feb(1720,1,{},fYb);var _P=sfb(HAe,'CGraph',1720);feb(194,1,{194:1},iYb);_.b=0;_.c=0;_.e=0;_.g=true;_.i=pxe;var aQ=sfb(HAe,'CGroup',194);feb(1719,1,{},lYb);_.yf=function mYb(a,b){return $wnd.Math.max(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};_.zf=function nYb(a,b){return $wnd.Math.max(a.a!=null?Kfb(a.a):a.c.i,b.a!=null?Kfb(b.a):b.c.i)};var cQ=sfb(HAe,kye,1719);feb(1721,1,{},EYb);_.d=false;var oYb;var eQ=sfb(HAe,pye,1721);feb(1722,1,{},FYb);_.Kb=function GYb(a){return pYb(),Geb(),RD(RD(a,42).a,86).d.e!=0?true:false};_.Fb=function HYb(a){return this===a};var dQ=sfb(HAe,qye,1722);feb(833,1,{},KYb);_.a=false;_.b=false;_.c=false;_.d=false;var fQ=sfb(HAe,rye,833);feb(1898,1,{},QYb);var kQ=sfb(IAe,sye,1898);var wQ=ufb(JAe,hye);feb(1899,1,{382:1},UYb);_.bf=function VYb(a){SYb(this,RD(a,475))};var hQ=sfb(IAe,tye,1899);feb(Owe,1,fye,XYb);_.Ne=function YYb(a,b){return WYb(RD(a,86),RD(b,86))};_.Fb=function ZYb(a){return this===a};_.Oe=function $Yb(){return new Frb(this)};var gQ=sfb(IAe,uye,Owe);feb(475,1,{475:1},_Yb);_.a=false;var iQ=sfb(IAe,vye,475);feb(1901,1,fye,aZb);_.Ne=function bZb(a,b){return RYb(RD(a,475),RD(b,475))};_.Fb=function cZb(a){return this===a};_.Oe=function dZb(){return new Frb(this)};var jQ=sfb(IAe,wye,1901);feb(148,1,{148:1},eZb,fZb);_.Fb=function gZb(a){var b;if(a==null){return false}if(mQ!=rb(a)){return false}b=RD(a,148);return Fvb(this.c,b.c)&&Fvb(this.d,b.d)};_.Hb=function hZb(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.c,this.d]))};_.Ib=function iZb(){return '('+this.c+pve+this.d+(this.a?'cx':'')+this.b+')'};_.a=true;_.c=0;_.d=0;var mQ=sfb(JAe,'Point',148);feb(416,22,{3:1,34:1,22:1,416:1},qZb);var jZb,kZb,lZb,mZb;var lQ=tfb(JAe,'Point/Quadrant',416,WI,uZb,tZb);var vZb;feb(1708,1,{},EZb);_.b=null;_.c=null;_.d=null;_.e=null;_.f=null;var xZb,yZb,zZb,AZb,BZb;var vQ=sfb(JAe,'RectilinearConvexHull',1708);feb(583,1,{382:1},PZb);_.bf=function QZb(a){OZb(this,RD(a,148))};_.b=0;var MZb;var oQ=sfb(JAe,'RectilinearConvexHull/MaximalElementsEventHandler',583);feb(1710,1,fye,SZb);_.Ne=function TZb(a,b){return RZb(UD(a),UD(b))};_.Fb=function UZb(a){return this===a};_.Oe=function VZb(){return new Frb(this)};var nQ=sfb(JAe,'RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type',1710);feb(1709,1,{382:1},XZb);_.bf=function YZb(a){WZb(this,RD(a,148))};_.a=0;_.b=null;_.c=null;_.d=null;_.e=null;var pQ=sfb(JAe,'RectilinearConvexHull/RectangleEventHandler',1709);feb(1711,1,fye,ZZb);_.Ne=function $Zb(a,b){return GZb(RD(a,148),RD(b,148))};_.Fb=function _Zb(a){return this===a};_.Oe=function a$b(){return new Frb(this)};var qQ=sfb(JAe,'RectilinearConvexHull/lambda$0$Type',1711);feb(1712,1,fye,b$b);_.Ne=function c$b(a,b){return HZb(RD(a,148),RD(b,148))};_.Fb=function d$b(a){return this===a};_.Oe=function e$b(){return new Frb(this)};var rQ=sfb(JAe,'RectilinearConvexHull/lambda$1$Type',1712);feb(1713,1,fye,f$b);_.Ne=function g$b(a,b){return IZb(RD(a,148),RD(b,148))};_.Fb=function h$b(a){return this===a};_.Oe=function i$b(){return new Frb(this)};var sQ=sfb(JAe,'RectilinearConvexHull/lambda$2$Type',1713);feb(1714,1,fye,j$b);_.Ne=function k$b(a,b){return JZb(RD(a,148),RD(b,148))};_.Fb=function l$b(a){return this===a};_.Oe=function m$b(){return new Frb(this)};var tQ=sfb(JAe,'RectilinearConvexHull/lambda$3$Type',1714);feb(1715,1,fye,n$b);_.Ne=function o$b(a,b){return KZb(RD(a,148),RD(b,148))};_.Fb=function p$b(a){return this===a};_.Oe=function q$b(){return new Frb(this)};var uQ=sfb(JAe,'RectilinearConvexHull/lambda$4$Type',1715);feb(1716,1,{},s$b);var xQ=sfb(JAe,'Scanline',1716);feb(2104,1,{});var yQ=sfb(KAe,'AbstractGraphPlacer',2104);feb(335,1,{335:1},C$b);_.Ff=function D$b(a){if(this.Gf(a)){Rc(this.b,RD(mQb(a,(Ywc(),ewc)),21),a);return true}else{return false}};_.Gf=function E$b(a){var b,c,d,e;b=RD(mQb(a,(Ywc(),ewc)),21);e=RD(Qc(y$b,b),21);for(d=e.Kc();d.Ob();){c=RD(d.Pb(),21);if(!RD(Qc(this.b,c),15).dc()){return false}}return true};var y$b;var BQ=sfb(KAe,'ComponentGroup',335);feb(779,2104,{},J$b);_.Hf=function K$b(a){var b,c;for(c=new Anb(this.a);c.a<c.c.c.length;){b=RD(ynb(c),335);if(b.Ff(a)){return}}Rmb(this.a,new C$b(a))};_.Ef=function L$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;this.a.c.length=0;b.a.c.length=0;if(a.dc()){b.f.a=0;b.f.b=0;return}g=RD(a.Xb(0),36);kQb(b,g);for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);this.Hf(d)}o=new pjd;f=Kfb(UD(mQb(g,(yCc(),SBc))));for(j=new Anb(this.a);j.a<j.c.c.length;){h=RD(ynb(j),335);k=F$b(h,f);x$b(Uc(h.b),o.a,o.b);o.a+=k.a;o.b+=k.b}b.f.a=o.a-f;b.f.b=o.b-f;if(Heb(TD(mQb(g,Vzc)))&&dE(mQb(g,yAc))===dE((Ymd(),Umd))){for(n=a.Kc();n.Ob();){l=RD(n.Pb(),36);w$b(l,l.c.a,l.c.b)}c=new j_b;_$b(c,a,f);for(m=a.Kc();m.Ob();){l=RD(m.Pb(),36);$id(hjd(l.c),c.e)}$id(hjd(b.f),c.a)}for(i=new Anb(this.a);i.a<i.c.c.length;){h=RD(ynb(i),335);v$b(b,Uc(h.b))}};var zQ=sfb(KAe,'ComponentGroupGraphPlacer',779);feb(1312,779,{},N$b);_.Hf=function O$b(a){M$b(this,a)};_.Ef=function P$b(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;this.a.c.length=0;b.a.c.length=0;if(a.dc()){b.f.a=0;b.f.b=0;return}g=RD(a.Xb(0),36);kQb(b,g);for(e=a.Kc();e.Ob();){d=RD(e.Pb(),36);M$b(this,d)}t=new pjd;s=new pjd;p=new pjd;o=new pjd;f=Kfb(UD(mQb(g,(yCc(),SBc))));for(j=new Anb(this.a);j.a<j.c.c.length;){h=RD(ynb(j),335);if(Dmd(RD(mQb(b,(umd(),Nkd)),88))){p.a=t.a;for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),Yod))){p.a=s.a;break}}}else if(Emd(RD(mQb(b,Nkd),88))){p.b=t.b;for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),ppd))){p.b=s.b;break}}}k=F$b(RD(h,579),f);x$b(Uc(h.b),p.a,p.b);if(Dmd(RD(mQb(b,Nkd),88))){s.a=p.a+k.a;o.a=$wnd.Math.max(o.a,s.a);for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),npd))){t.a=p.a+k.a;break}}s.b=p.b+k.b;p.b=s.b;o.b=$wnd.Math.max(o.b,p.b)}else if(Emd(RD(mQb(b,Nkd),88))){s.b=p.b+k.b;o.b=$wnd.Math.max(o.b,s.b);for(r=new aw(Pc(Fc(h.b).a).a.kc());r.b.Ob();){q=RD(_v(r.b.Pb()),21);if(q.Hc((qpd(),Xod))){t.b=p.b+k.b;break}}s.a=p.a+k.a;p.a=s.a;o.a=$wnd.Math.max(o.a,p.a)}}b.f.a=o.a-f;b.f.b=o.b-f;if(Heb(TD(mQb(g,Vzc)))&&dE(mQb(g,yAc))===dE((Ymd(),Umd))){for(n=a.Kc();n.Ob();){l=RD(n.Pb(),36);w$b(l,l.c.a,l.c.b)}c=new j_b;_$b(c,a,f);for(m=a.Kc();m.Ob();){l=RD(m.Pb(),36);$id(hjd(l.c),c.e)}$id(hjd(b.f),c.a)}for(i=new Anb(this.a);i.a<i.c.c.length;){h=RD(ynb(i),335);v$b(b,Uc(h.b))}};var AQ=sfb(KAe,'ComponentGroupModelOrderGraphPlacer',1312);feb(389,22,{3:1,34:1,22:1,389:1},V$b);var Q$b,R$b,S$b,T$b;var CQ=tfb(KAe,'ComponentOrderingStrategy',389,WI,X$b,W$b);var Y$b;feb(659,1,{},j_b);var KQ=sfb(KAe,'ComponentsCompactor',659);feb(1533,13,Cxe,m_b);_.Fc=function n_b(a){return k_b(this,RD(a,148))};var DQ=sfb(KAe,'ComponentsCompactor/Hullpoints',1533);feb(1530,1,{855:1},p_b);_.a=false;var EQ=sfb(KAe,'ComponentsCompactor/InternalComponent',1530);feb(1529,1,Vve,q_b);_.Jc=function r_b(a){xgb(this,a)};_.Kc=function s_b(){return new Anb(this.a)};var FQ=sfb(KAe,'ComponentsCompactor/InternalConnectedComponents',1529);feb(1532,1,{602:1},t_b);_.Bf=function v_b(){return null};_.Cf=function w_b(){return this.a};_.Af=function u_b(){return f_b(this.d)};_.Df=function x_b(){return this.b};var GQ=sfb(KAe,'ComponentsCompactor/InternalExternalExtension',1532);feb(1531,1,{602:1},y_b);_.Cf=function B_b(){return this.a};_.Af=function z_b(){return f_b(this.d)};_.Bf=function A_b(){return this.c};_.Df=function C_b(){return this.b};var HQ=sfb(KAe,'ComponentsCompactor/InternalUnionExternalExtension',1531);feb(1535,1,{},D_b);var IQ=sfb(KAe,'ComponentsCompactor/OuterSegments',1535);feb(1534,1,{},E_b);var JQ=sfb(KAe,'ComponentsCompactor/Segments',1534);feb(1282,1,{},I_b);var MQ=sfb(KAe,Lze,1282);feb(1283,1,fye,K_b);_.Ne=function L_b(a,b){return J_b(RD(a,36),RD(b,36))};_.Fb=function M_b(a){return this===a};_.Oe=function N_b(){return new Frb(this)};var LQ=sfb(KAe,'ComponentsProcessor/lambda$0$Type',1283);feb(579,335,{335:1,579:1},S_b);_.Ff=function T_b(a){return Q_b(this,a)};_.Gf=function U_b(a){return R_b(this,a)};var O_b;var NQ=sfb(KAe,'ModelOrderComponentGroup',579);feb(1310,2104,{},V_b);_.Ef=function W_b(a,b){var c,d,e,f,g,h,i,j,k,l,m;if(a.gc()==1){l=RD(a.Xb(0),36);if(l!=b){b.a.c.length=0;u$b(b,l,0,0);kQb(b,l);C2b(b.d,l.d);b.f.a=l.f.a;b.f.b=l.f.b}return}else if(a.dc()){b.a.c.length=0;b.f.a=0;b.f.b=0;return}this.Jf(a,b);e=RD(a.Xb(0),36);b.a.c.length=0;kQb(b,e);j=0;m=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);k=f.f;j=$wnd.Math.max(j,k.a);m+=k.a*k.b}j=$wnd.Math.max(j,$wnd.Math.sqrt(m)*Kfb(UD(mQb(b,(yCc(),Tzc)))));d=Kfb(UD(mQb(b,SBc)));this.If(a,b,j,d);if(Heb(TD(mQb(e,Vzc)))){c=new j_b;_$b(c,a,d);for(i=a.Kc();i.Ob();){h=RD(i.Pb(),36);$id(hjd(h.c),c.e)}$id(hjd(b.f),c.a)}v$b(b,a)};_.If=function X_b(a,b,c,d){var e,f,g,h,i,j,k,l;k=0;l=0;h=0;e=d;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);j=f.f;if(k+j.a>c){k=0;l+=h+d;h=0}i=f.c;w$b(f,k+i.a,l+i.b);hjd(i);e=$wnd.Math.max(e,k+j.a);h=$wnd.Math.max(h,j.b);k+=j.a+d}b.f.a=e;b.f.b=l+h};_.Jf=function Y_b(a,b){var c,d,e,f,g;if(dE(mQb(b,(yCc(),Yzc)))===dE((U$b(),T$b))){for(d=a.Kc();d.Ob();){c=RD(d.Pb(),36);g=0;for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);g+=RD(mQb(e,JBc),17).a}c.p=g}yob();a.jd(new b0b)}};var QQ=sfb(KAe,'SimpleRowGraphPlacer',1310);feb(1313,1310,{},Z_b);_.If=function $_b(a,b,c,d){var e,f,g,h,i,j,k,l,m,n;m=0;n=0;h=0;e=d;i=null;l=0;for(g=a.Kc();g.Ob();){f=RD(g.Pb(),36);k=f.f;if(m+k.a>c&&!RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),Yod))||!!i&&RD(mQb(i,(Ywc(),ewc)),21).Hc((qpd(),Xod))||RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),ppd))){m=l;n+=h+d;h=0}j=f.c;RD(mQb(f,(Ywc(),ewc)),21).Hc((qpd(),Yod))&&(m=e+d);w$b(f,m+j.a,n+j.b);e=$wnd.Math.max(e,m+k.a);RD(mQb(f,ewc),21).Hc(npd)&&(l=$wnd.Math.max(l,m+k.a+d));hjd(j);h=$wnd.Math.max(h,k.b);m+=k.a+d;i=f}b.f.a=e;b.f.b=n+h};_.Jf=function __b(a,b){};var OQ=sfb(KAe,'ModelOrderRowGraphPlacer',1313);feb(1311,1,fye,b0b);_.Ne=function c0b(a,b){return a0b(RD(a,36),RD(b,36))};_.Fb=function d0b(a){return this===a};_.Oe=function e0b(){return new Frb(this)};var PQ=sfb(KAe,'SimpleRowGraphPlacer/1',1311);var f0b;feb(1280,1,xye,l0b);_.Lb=function m0b(a){var b;return b=RD(mQb(RD(a,249).b,(yCc(),RAc)),75),!!b&&b.b!=0};_.Fb=function n0b(a){return this===a};_.Mb=function o0b(a){var b;return b=RD(mQb(RD(a,249).b,(yCc(),RAc)),75),!!b&&b.b!=0};var RQ=sfb(PAe,'CompoundGraphPostprocessor/1',1280);feb(1279,1,QAe,E0b);_.Kf=function F0b(a,b){y0b(this,RD(a,36),b)};var TQ=sfb(PAe,'CompoundGraphPreprocessor',1279);feb(452,1,{452:1},G0b);_.c=false;var SQ=sfb(PAe,'CompoundGraphPreprocessor/ExternalPort',452);feb(249,1,{249:1},J0b);_.Ib=function K0b(){return ps(this.c)+':'+_0b(this.b)};var VQ=sfb(PAe,'CrossHierarchyEdge',249);feb(777,1,fye,M0b);_.Ne=function N0b(a,b){return L0b(this,RD(a,249),RD(b,249))};_.Fb=function O0b(a){return this===a};_.Oe=function Q0b(){return new Frb(this)};var UQ=sfb(PAe,'CrossHierarchyEdgeComparator',777);feb(304,137,{3:1,304:1,96:1,137:1});_.p=0;var dR=sfb(RAe,'LGraphElement',304);feb(18,304,{3:1,18:1,304:1,96:1,137:1},a1b);_.Ib=function b1b(){return _0b(this)};var WQ=sfb(RAe,'LEdge',18);feb(36,304,{3:1,20:1,36:1,304:1,96:1,137:1},d1b);_.Jc=function e1b(a){xgb(this,a)};_.Kc=function f1b(){return new Anb(this.b)};_.Ib=function g1b(){if(this.b.c.length==0){return 'G-unlayered'+Fe(this.a)}else if(this.a.c.length==0){return 'G-layered'+Fe(this.b)}return 'G[layerless'+Fe(this.a)+', layers'+Fe(this.b)+']'};var eR=sfb(RAe,'LGraph',36);var h1b;feb(666,1,{});_.Lf=function j1b(){return this.e.n};_.of=function k1b(a){return mQb(this.e,a)};_.Mf=function l1b(){return this.e.o};_.Nf=function m1b(){return this.e.p};_.pf=function n1b(a){return nQb(this.e,a)};_.Of=function o1b(a){this.e.n.a=a.a;this.e.n.b=a.b};_.Pf=function p1b(a){this.e.o.a=a.a;this.e.o.b=a.b};_.Qf=function q1b(a){this.e.p=a};var XQ=sfb(RAe,'LGraphAdapters/AbstractLShapeAdapter',666);feb(473,1,{853:1},r1b);_.Rf=function s1b(){var a,b;if(!this.b){this.b=ev(this.a.b.c.length);for(b=new Anb(this.a.b);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.b,new D1b(a))}}return this.b};_.b=null;var YQ=sfb(RAe,'LGraphAdapters/LEdgeAdapter',473);feb(665,1,{},t1b);_.Sf=function u1b(){var a,b,c,d,e,f;if(!this.b){this.b=new bnb;for(d=new Anb(this.a.b);d.a<d.c.c.length;){c=RD(ynb(d),30);for(f=new Anb(c.a);f.a<f.c.c.length;){e=RD(ynb(f),10);if(this.c.Mb(e)){Rmb(this.b,new F1b(this,e,this.e));if(this.d){if(nQb(e,(Ywc(),Xwc))){for(b=RD(mQb(e,Xwc),15).Kc();b.Ob();){a=RD(b.Pb(),10);Rmb(this.b,new F1b(this,a,false))}}if(nQb(e,Vvc)){for(b=RD(mQb(e,Vvc),15).Kc();b.Ob();){a=RD(b.Pb(),10);Rmb(this.b,new F1b(this,a,false))}}}}}}}return this.b};_.Lf=function v1b(){throw Adb(new kib(TAe))};_.of=function w1b(a){return mQb(this.a,a)};_.Mf=function x1b(){return this.a.f};_.Nf=function y1b(){return this.a.p};_.pf=function z1b(a){return nQb(this.a,a)};_.Of=function A1b(a){throw Adb(new kib(TAe))};_.Pf=function B1b(a){this.a.f.a=a.a;this.a.f.b=a.b};_.Qf=function C1b(a){this.a.p=a};_.b=null;_.d=false;_.e=false;var ZQ=sfb(RAe,'LGraphAdapters/LGraphAdapter',665);feb(585,666,{187:1},D1b);var $Q=sfb(RAe,'LGraphAdapters/LLabelAdapter',585);feb(584,666,{695:1},F1b);_.Tf=function G1b(){return this.b};_.Uf=function H1b(){return yob(),yob(),vob};_.Rf=function I1b(){var a,b;if(!this.a){this.a=ev(RD(this.e,10).b.c.length);for(b=new Anb(RD(this.e,10).b);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.a,new D1b(a))}}return this.a};_.Vf=function J1b(){var a;a=RD(this.e,10).d;return new R2b(a.d,a.c,a.a,a.b)};_.Wf=function K1b(){return yob(),yob(),vob};_.Xf=function L1b(){var a,b;if(!this.c){this.c=ev(RD(this.e,10).j.c.length);for(b=new Anb(RD(this.e,10).j);b.a<b.c.c.length;){a=RD(ynb(b),12);Rmb(this.c,new Q1b(a,this.d))}}return this.c};_.Yf=function M1b(){return Heb(TD(mQb(RD(this.e,10),(Ywc(),Yvc))))};_.Zf=function N1b(a){RD(this.e,10).d.b=a.b;RD(this.e,10).d.d=a.d;RD(this.e,10).d.c=a.c;RD(this.e,10).d.a=a.a};_.$f=function O1b(a){RD(this.e,10).f.b=a.b;RD(this.e,10).f.d=a.d;RD(this.e,10).f.c=a.c;RD(this.e,10).f.a=a.a};_._f=function P1b(){E1b(this,(i1b(),h1b))};_.a=null;_.b=null;_.c=null;_.d=false;var _Q=sfb(RAe,'LGraphAdapters/LNodeAdapter',584);feb(1788,666,{852:1},Q1b);_.Uf=function R1b(){var a,b,c,d,e,f,g,h;if(this.d&&RD(this.e,12).i.k==(r3b(),q3b)){return yob(),yob(),vob}else if(!this.a){this.a=new bnb;for(c=new Anb(RD(this.e,12).e);c.a<c.c.c.length;){a=RD(ynb(c),18);Rmb(this.a,new r1b(a))}if(this.d){d=RD(mQb(RD(this.e,12),(Ywc(),Iwc)),10);if(d){for(b=new is(Mr(Z2b(d).a.Kc(),new ir));gs(b);){a=RD(hs(b),18);Rmb(this.a,new r1b(a))}}}if(nQb(RD(this.e,12).i,(Ywc(),Pwc))){g=RD(mQb(RD(this.e,12).i,Pwc),337);h=RD(cub(g.e,this.e),113);if(h){for(f=new Anb(h.b);f.a<f.c.c.length;){e=RD(ynb(f),340);Rmb(this.a,new r1b(e.a))}}}}return this.a};_.Rf=function S1b(){var a,b;if(!this.b){this.b=ev(RD(this.e,12).f.c.length);for(b=new Anb(RD(this.e,12).f);b.a<b.c.c.length;){a=RD(ynb(b),72);Rmb(this.b,new D1b(a))}}return this.b};_.Wf=function T1b(){var a,b,c,d,e,f,g,h;if(this.d&&RD(this.e,12).i.k==(r3b(),q3b)){return yob(),yob(),vob}else if(!this.c){this.c=new bnb;for(c=new Anb(RD(this.e,12).g);c.a<c.c.c.length;){a=RD(ynb(c),18);Rmb(this.c,new r1b(a))}if(this.d){d=RD(mQb(RD(this.e,12),(Ywc(),Iwc)),10);if(d){for(b=new is(Mr(a3b(d).a.Kc(),new ir));gs(b);){a=RD(hs(b),18);Rmb(this.c,new r1b(a))}}}if(nQb(RD(this.e,12).i,(Ywc(),Pwc))){g=RD(mQb(RD(this.e,12).i,Pwc),337);h=RD(cub(g.e,this.e),113);if(h){for(f=new Anb(h.e);f.a<f.c.c.length;){e=RD(ynb(f),340);Rmb(this.c,new r1b(e.a))}}}}return this.c};_.ag=function U1b(){return RD(this.e,12).j};_.bg=function V1b(){return Heb(TD(mQb(RD(this.e,12),(Ywc(),nwc))))};_.a=null;_.b=null;_.c=null;_.d=false;var aR=sfb(RAe,'LGraphAdapters/LPortAdapter',1788);feb(1789,1,fye,X1b);_.Ne=function Y1b(a,b){return W1b(RD(a,12),RD(b,12))};_.Fb=function Z1b(a){return this===a};_.Oe=function $1b(){return new Frb(this)};var bR=sfb(RAe,'LGraphAdapters/PortComparator',1789);feb(818,1,nwe,_1b);_.Mb=function a2b(a){return RD(a,10),i1b(),true};var cR=sfb(RAe,'LGraphAdapters/lambda$0$Type',818);feb(404,304,{3:1,304:1,404:1,96:1,137:1});var yR=sfb(RAe,'LShape',404);feb(72,404,{3:1,304:1,72:1,404:1,96:1,137:1},x2b,y2b);_.Ib=function z2b(){var a;a=w2b(this);return a==null?'label':'l_'+a};var fR=sfb(RAe,'LLabel',72);feb(214,1,{3:1,4:1,214:1,423:1});_.Fb=function K2b(a){var b;if(ZD(a,214)){b=RD(a,214);return this.d==b.d&&this.a==b.a&&this.b==b.b&&this.c==b.c}else{return false}};_.Hb=function L2b(){var a,b;a=Nfb(this.b)<<16;a|=Nfb(this.a)&Bwe;b=Nfb(this.c)<<16;b|=Nfb(this.d)&Bwe;return a^b};_.cg=function N2b(b){var c,d,e,f,g,h,i,j,k,l,m;g=0;while(g<b.length&&M2b((BFb(g,b.length),b.charCodeAt(g)),YAe)){++g}c=b.length;while(c>0&&M2b((BFb(c-1,b.length),b.charCodeAt(c-1)),ZAe)){--c}if(g<c){l=vhb((AFb(g,c,b.length),b.substr(g,c-g)),',|;');try{for(i=l,j=0,k=i.length;j<k;++j){h=i[j];f=vhb(h,'=');if(f.length!=2){throw Adb(new agb('Expecting a list of key-value pairs.'))}e=Dhb(f[0]);m=Neb(Dhb(f[1]));lhb(e,'top')?(this.d=m):lhb(e,'left')?(this.b=m):lhb(e,'bottom')?(this.a=m):lhb(e,'right')&&(this.c=m)}}catch(a){a=zdb(a);if(ZD(a,130)){d=a;throw Adb(new agb($Ae+d))}else throw Adb(a)}}};_.Ib=function O2b(){return '[top='+this.d+',left='+this.b+',bottom='+this.a+',right='+this.c+']'};_.a=0;_.b=0;_.c=0;_.d=0;var m3=sfb(_Ae,'Spacing',214);feb(140,214,aBe,P2b,Q2b,R2b,S2b);var h3=sfb(_Ae,'ElkMargin',140);feb(660,140,aBe,T2b);var gR=sfb(RAe,'LMargin',660);feb(10,404,{3:1,304:1,10:1,404:1,96:1,137:1},j3b);_.Ib=function k3b(){return i3b(this)};_.i=false;var jR=sfb(RAe,'LNode',10);feb(273,22,{3:1,34:1,22:1,273:1},s3b);var l3b,m3b,n3b,o3b,p3b,q3b;var hR=tfb(RAe,'LNode/NodeType',273,WI,u3b,t3b);var v3b;feb(775,1,nwe,x3b);_.Mb=function y3b(a){return Heb(TD(mQb(RD(a,72),(yCc(),vAc))))};var iR=sfb(RAe,'LNode/lambda$0$Type',775);feb(107,214,bBe,z3b,A3b,B3b);var i3=sfb(_Ae,'ElkPadding',107);feb(778,107,bBe,C3b);var kR=sfb(RAe,'LPadding',778);feb(12,404,{3:1,304:1,12:1,404:1,96:1,137:1},R3b);_.Ib=function S3b(){var a,b,c;a=new bib;Zhb((a.a+='p_',a),M3b(this));!!this.i&&Zhb(Yhb((a.a+='[',a),this.i),']');if(this.e.c.length==1&&this.g.c.length==0&&RD(Vmb(this.e,0),18).c!=this){b=RD(Vmb(this.e,0),18).c;Zhb((a.a+=' << ',a),M3b(b));Zhb(Yhb((a.a+='[',a),b.i),']')}if(this.e.c.length==0&&this.g.c.length==1&&RD(Vmb(this.g,0),18).d!=this){c=RD(Vmb(this.g,0),18).d;Zhb((a.a+=' >> ',a),M3b(c));Zhb(Yhb((a.a+='[',a),c.i),']')}return a.a};_.c=true;_.d=false;var D3b,E3b,F3b,G3b,H3b,I3b;var xR=sfb(RAe,'LPort',12);feb(408,1,Vve,T3b);_.Jc=function U3b(a){xgb(this,a)};_.Kc=function V3b(){var a;a=new Anb(this.a.e);return new W3b(a)};var mR=sfb(RAe,'LPort/1',408);feb(1309,1,Ave,W3b);_.Nb=function X3b(a){Ztb(this,a)};_.Pb=function Z3b(){return RD(ynb(this.a),18).c};_.Ob=function Y3b(){return xnb(this.a)};_.Qb=function $3b(){znb(this.a)};var lR=sfb(RAe,'LPort/1/1',1309);feb(369,1,Vve,_3b);_.Jc=function a4b(a){xgb(this,a)};_.Kc=function b4b(){var a;return a=new Anb(this.a.g),new c4b(a)};var oR=sfb(RAe,'LPort/2',369);feb(776,1,Ave,c4b);_.Nb=function d4b(a){Ztb(this,a)};_.Pb=function f4b(){return RD(ynb(this.a),18).d};_.Ob=function e4b(){return xnb(this.a)};_.Qb=function g4b(){znb(this.a)};var nR=sfb(RAe,'LPort/2/1',776);feb(1302,1,Vve,h4b);_.Jc=function i4b(a){xgb(this,a)};_.Kc=function j4b(){return new l4b(this)};var qR=sfb(RAe,'LPort/CombineIter',1302);feb(208,1,Ave,l4b);_.Nb=function m4b(a){Ztb(this,a)};_.Qb=function p4b(){$tb()};_.Ob=function n4b(){return k4b(this)};_.Pb=function o4b(){return xnb(this.a)?ynb(this.a):ynb(this.b)};var pR=sfb(RAe,'LPort/CombineIter/1',208);feb(1303,1,xye,r4b);_.Lb=function s4b(a){return q4b(a)};_.Fb=function t4b(a){return this===a};_.Mb=function u4b(a){return J3b(),RD(a,12).g.c.length!=0};var rR=sfb(RAe,'LPort/lambda$0$Type',1303);feb(1304,1,xye,w4b);_.Lb=function x4b(a){return v4b(a)};_.Fb=function y4b(a){return this===a};_.Mb=function z4b(a){return J3b(),RD(a,12).e.c.length!=0};var sR=sfb(RAe,'LPort/lambda$1$Type',1304);feb(1305,1,xye,A4b);_.Lb=function B4b(a){return J3b(),RD(a,12).j==(qpd(),Yod)};_.Fb=function C4b(a){return this===a};_.Mb=function D4b(a){return J3b(),RD(a,12).j==(qpd(),Yod)};var tR=sfb(RAe,'LPort/lambda$2$Type',1305);feb(1306,1,xye,E4b);_.Lb=function F4b(a){return J3b(),RD(a,12).j==(qpd(),Xod)};_.Fb=function G4b(a){return this===a};_.Mb=function H4b(a){return J3b(),RD(a,12).j==(qpd(),Xod)};var uR=sfb(RAe,'LPort/lambda$3$Type',1306);feb(1307,1,xye,I4b);_.Lb=function J4b(a){return J3b(),RD(a,12).j==(qpd(),npd)};_.Fb=function K4b(a){return this===a};_.Mb=function L4b(a){return J3b(),RD(a,12).j==(qpd(),npd)};var vR=sfb(RAe,'LPort/lambda$4$Type',1307);feb(1308,1,xye,M4b);_.Lb=function N4b(a){return J3b(),RD(a,12).j==(qpd(),ppd)};_.Fb=function O4b(a){return this===a};_.Mb=function P4b(a){return J3b(),RD(a,12).j==(qpd(),ppd)};var wR=sfb(RAe,'LPort/lambda$5$Type',1308);feb(30,304,{3:1,20:1,304:1,30:1,96:1,137:1},R4b);_.Jc=function S4b(a){xgb(this,a)};_.Kc=function T4b(){return new Anb(this.a)};_.Ib=function U4b(){return 'L_'+Wmb(this.b.b,this,0)+Fe(this.a)};var zR=sfb(RAe,'Layer',30);feb(1330,1,{},k5b);var JR=sfb(cBe,dBe,1330);feb(1334,1,{},o5b);_.Kb=function p5b(a){return AGd(RD(a,84))};var AR=sfb(cBe,'ElkGraphImporter/0methodref$connectableShapeToNode$Type',1334);feb(1337,1,{},q5b);_.Kb=function r5b(a){return AGd(RD(a,84))};var BR=sfb(cBe,'ElkGraphImporter/1methodref$connectableShapeToNode$Type',1337);feb(1331,1,Qve,s5b);_.Cd=function t5b(a){$4b(this.a,RD(a,123))};var CR=sfb(cBe,Nze,1331);feb(1332,1,Qve,u5b);_.Cd=function v5b(a){$4b(this.a,RD(a,123))};var DR=sfb(cBe,eBe,1332);feb(1333,1,{},w5b);_.Kb=function x5b(a){return new SDb(null,new Swb(mzd(RD(a,74)),16))};var ER=sfb(cBe,fBe,1333);feb(1335,1,nwe,y5b);_.Mb=function z5b(a){return l5b(this.a,RD(a,27))};var FR=sfb(cBe,gBe,1335);feb(1336,1,{},A5b);_.Kb=function B5b(a){return new SDb(null,new Swb(lzd(RD(a,74)),16))};var GR=sfb(cBe,'ElkGraphImporter/lambda$5$Type',1336);feb(1338,1,nwe,C5b);_.Mb=function D5b(a){return m5b(this.a,RD(a,27))};var HR=sfb(cBe,'ElkGraphImporter/lambda$7$Type',1338);feb(1339,1,nwe,E5b);_.Mb=function F5b(a){return n5b(RD(a,74))};var IR=sfb(cBe,'ElkGraphImporter/lambda$8$Type',1339);feb(1297,1,{},N5b);var G5b;var OR=sfb(cBe,'ElkGraphLayoutTransferrer',1297);feb(1298,1,nwe,Q5b);_.Mb=function R5b(a){return O5b(this.a,RD(a,18))};var KR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$0$Type',1298);feb(1299,1,Qve,S5b);_.Cd=function T5b(a){H5b();Rmb(this.a,RD(a,18))};var LR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$1$Type',1299);feb(1300,1,nwe,U5b);_.Mb=function V5b(a){return P5b(this.a,RD(a,18))};var MR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$2$Type',1300);feb(1301,1,Qve,W5b);_.Cd=function X5b(a){H5b();Rmb(this.a,RD(a,18))};var NR=sfb(cBe,'ElkGraphLayoutTransferrer/lambda$3$Type',1301);feb(819,1,{},e6b);var PR=sfb(hBe,'BiLinkedHashMultiMap',819);feb(1550,1,QAe,h6b);_.Kf=function i6b(a,b){f6b(RD(a,36),b)};var SR=sfb(hBe,'CommentNodeMarginCalculator',1550);feb(1551,1,{},j6b);_.Kb=function k6b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var QR=sfb(hBe,'CommentNodeMarginCalculator/lambda$0$Type',1551);feb(1552,1,Qve,l6b);_.Cd=function m6b(a){g6b(RD(a,10))};var RR=sfb(hBe,'CommentNodeMarginCalculator/lambda$1$Type',1552);feb(1553,1,QAe,q6b);_.Kf=function r6b(a,b){o6b(RD(a,36),b)};var TR=sfb(hBe,'CommentPostprocessor',1553);feb(1554,1,QAe,v6b);_.Kf=function w6b(a,b){s6b(RD(a,36),b)};var UR=sfb(hBe,'CommentPreprocessor',1554);feb(1555,1,QAe,y6b);_.Kf=function z6b(a,b){x6b(RD(a,36),b)};var VR=sfb(hBe,'ConstraintsPostprocessor',1555);feb(1556,1,QAe,G6b);_.Kf=function H6b(a,b){E6b(RD(a,36),b)};var WR=sfb(hBe,'EdgeAndLayerConstraintEdgeReverser',1556);feb(1557,1,QAe,K6b);_.Kf=function M6b(a,b){I6b(RD(a,36),b)};var $R=sfb(hBe,'EndLabelPostprocessor',1557);feb(1558,1,{},N6b);_.Kb=function O6b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var XR=sfb(hBe,'EndLabelPostprocessor/lambda$0$Type',1558);feb(1559,1,nwe,P6b);_.Mb=function Q6b(a){return L6b(RD(a,10))};var YR=sfb(hBe,'EndLabelPostprocessor/lambda$1$Type',1559);feb(1560,1,Qve,R6b);_.Cd=function S6b(a){J6b(RD(a,10))};var ZR=sfb(hBe,'EndLabelPostprocessor/lambda$2$Type',1560);feb(1561,1,QAe,b7b);_.Kf=function e7b(a,b){Z6b(RD(a,36),b)};var fS=sfb(hBe,'EndLabelPreprocessor',1561);feb(1562,1,{},f7b);_.Kb=function g7b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var _R=sfb(hBe,'EndLabelPreprocessor/lambda$0$Type',1562);feb(1563,1,Qve,h7b);_.Cd=function i7b(a){V6b(this.a,this.b,this.c,RD(a,10))};_.a=0;_.b=0;_.c=false;var aS=sfb(hBe,'EndLabelPreprocessor/lambda$1$Type',1563);feb(1564,1,nwe,j7b);_.Mb=function k7b(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Nmd))};var bS=sfb(hBe,'EndLabelPreprocessor/lambda$2$Type',1564);feb(1565,1,Qve,l7b);_.Cd=function m7b(a){Mub(this.a,RD(a,72))};var cS=sfb(hBe,'EndLabelPreprocessor/lambda$3$Type',1565);feb(1566,1,nwe,n7b);_.Mb=function o7b(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Mmd))};var dS=sfb(hBe,'EndLabelPreprocessor/lambda$4$Type',1566);feb(1567,1,Qve,p7b);_.Cd=function q7b(a){Mub(this.a,RD(a,72))};var eS=sfb(hBe,'EndLabelPreprocessor/lambda$5$Type',1567);feb(1615,1,QAe,z7b);_.Kf=function A7b(a,b){w7b(RD(a,36),b)};var r7b;var nS=sfb(hBe,'EndLabelSorter',1615);feb(1616,1,fye,C7b);_.Ne=function D7b(a,b){return B7b(RD(a,465),RD(b,465))};_.Fb=function E7b(a){return this===a};_.Oe=function F7b(){return new Frb(this)};var gS=sfb(hBe,'EndLabelSorter/1',1616);feb(465,1,{465:1},G7b);var hS=sfb(hBe,'EndLabelSorter/LabelGroup',465);feb(1617,1,{},H7b);_.Kb=function I7b(a){return s7b(),new SDb(null,new Swb(RD(a,30).a,16))};var iS=sfb(hBe,'EndLabelSorter/lambda$0$Type',1617);feb(1618,1,nwe,J7b);_.Mb=function K7b(a){return s7b(),RD(a,10).k==(r3b(),p3b)};var jS=sfb(hBe,'EndLabelSorter/lambda$1$Type',1618);feb(1619,1,Qve,L7b);_.Cd=function M7b(a){x7b(RD(a,10))};var kS=sfb(hBe,'EndLabelSorter/lambda$2$Type',1619);feb(1620,1,nwe,N7b);_.Mb=function O7b(a){return s7b(),dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Mmd))};var lS=sfb(hBe,'EndLabelSorter/lambda$3$Type',1620);feb(1621,1,nwe,P7b);_.Mb=function Q7b(a){return s7b(),dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Nmd))};var mS=sfb(hBe,'EndLabelSorter/lambda$4$Type',1621);feb(1568,1,QAe,a8b);_.Kf=function b8b(a,b){$7b(this,RD(a,36))};_.b=0;_.c=0;var uS=sfb(hBe,'FinalSplineBendpointsCalculator',1568);feb(1569,1,{},c8b);_.Kb=function d8b(a){return new SDb(null,new Swb(RD(a,30).a,16))};var oS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$0$Type',1569);feb(1570,1,{},e8b);_.Kb=function f8b(a){return new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var pS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$1$Type',1570);feb(1571,1,nwe,g8b);_.Mb=function h8b(a){return !W0b(RD(a,18))};var qS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$2$Type',1571);feb(1572,1,nwe,i8b);_.Mb=function j8b(a){return nQb(RD(a,18),(Ywc(),Twc))};var rS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$3$Type',1572);feb(1573,1,Qve,k8b);_.Cd=function l8b(a){T7b(this.a,RD(a,131))};var sS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$4$Type',1573);feb(1574,1,Qve,m8b);_.Cd=function n8b(a){Eob(RD(a,18).a)};var tS=sfb(hBe,'FinalSplineBendpointsCalculator/lambda$5$Type',1574);feb(803,1,QAe,L8b);_.Kf=function M8b(a,b){C8b(this,RD(a,36),b)};var wS=sfb(hBe,'GraphTransformer',803);feb(517,22,{3:1,34:1,22:1,517:1},Q8b);var N8b,O8b;var vS=tfb(hBe,'GraphTransformer/Mode',517,WI,S8b,R8b);var T8b;feb(1575,1,QAe,Z8b);_.Kf=function $8b(a,b){W8b(RD(a,36),b)};var xS=sfb(hBe,'HierarchicalNodeResizingProcessor',1575);feb(1576,1,QAe,f9b);_.Kf=function g9b(a,b){b9b(RD(a,36),b)};var zS=sfb(hBe,'HierarchicalPortConstraintProcessor',1576);feb(1577,1,fye,i9b);_.Ne=function j9b(a,b){return h9b(RD(a,10),RD(b,10))};_.Fb=function k9b(a){return this===a};_.Oe=function l9b(){return new Frb(this)};var yS=sfb(hBe,'HierarchicalPortConstraintProcessor/NodeComparator',1577);feb(1578,1,QAe,o9b);_.Kf=function p9b(a,b){m9b(RD(a,36),b)};var AS=sfb(hBe,'HierarchicalPortDummySizeProcessor',1578);feb(1579,1,QAe,C9b);_.Kf=function D9b(a,b){v9b(this,RD(a,36),b)};_.a=0;var DS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter',1579);feb(1580,1,fye,F9b);_.Ne=function G9b(a,b){return E9b(RD(a,10),RD(b,10))};_.Fb=function H9b(a){return this===a};_.Oe=function I9b(){return new Frb(this)};var BS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter/1',1580);feb(1581,1,fye,K9b);_.Ne=function L9b(a,b){return J9b(RD(a,10),RD(b,10))};_.Fb=function M9b(a){return this===a};_.Oe=function N9b(){return new Frb(this)};var CS=sfb(hBe,'HierarchicalPortOrthogonalEdgeRouter/2',1581);feb(1582,1,QAe,Q9b);_.Kf=function R9b(a,b){P9b(RD(a,36),b)};var ES=sfb(hBe,'HierarchicalPortPositionProcessor',1582);feb(1583,1,QAe,$9b);_.Kf=function _9b(a,b){Z9b(this,RD(a,36))};_.a=0;_.c=0;var S9b,T9b;var IS=sfb(hBe,'HighDegreeNodeLayeringProcessor',1583);feb(580,1,{580:1},aac);_.b=-1;_.d=-1;var FS=sfb(hBe,'HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation',580);feb(1584,1,{},bac);_.Kb=function cac(a){return U9b(),Z2b(RD(a,10))};_.Fb=function dac(a){return this===a};var GS=sfb(hBe,'HighDegreeNodeLayeringProcessor/lambda$0$Type',1584);feb(1585,1,{},eac);_.Kb=function fac(a){return U9b(),a3b(RD(a,10))};_.Fb=function gac(a){return this===a};var HS=sfb(hBe,'HighDegreeNodeLayeringProcessor/lambda$1$Type',1585);feb(1591,1,QAe,mac);_.Kf=function nac(a,b){lac(this,RD(a,36),b)};var NS=sfb(hBe,'HyperedgeDummyMerger',1591);feb(804,1,{},oac);_.a=false;_.b=false;_.c=false;var JS=sfb(hBe,'HyperedgeDummyMerger/MergeState',804);feb(1592,1,{},pac);_.Kb=function qac(a){return new SDb(null,new Swb(RD(a,30).a,16))};var KS=sfb(hBe,'HyperedgeDummyMerger/lambda$0$Type',1592);feb(1593,1,{},rac);_.Kb=function sac(a){return new SDb(null,new Swb(RD(a,10).j,16))};var LS=sfb(hBe,'HyperedgeDummyMerger/lambda$1$Type',1593);feb(1594,1,Qve,tac);_.Cd=function uac(a){RD(a,12).p=-1};var MS=sfb(hBe,'HyperedgeDummyMerger/lambda$2$Type',1594);feb(1595,1,QAe,xac);_.Kf=function yac(a,b){wac(RD(a,36),b)};var OS=sfb(hBe,'HypernodesProcessor',1595);feb(1596,1,QAe,Aac);_.Kf=function Bac(a,b){zac(RD(a,36),b)};var PS=sfb(hBe,'InLayerConstraintProcessor',1596);feb(1597,1,QAe,Dac);_.Kf=function Eac(a,b){Cac(RD(a,36),b)};var QS=sfb(hBe,'InnermostNodeMarginCalculator',1597);feb(1598,1,QAe,Iac);_.Kf=function Nac(a,b){Hac(this,RD(a,36))};_.a=pxe;_.b=pxe;_.c=oxe;_.d=oxe;var XS=sfb(hBe,'InteractiveExternalPortPositioner',1598);feb(1599,1,{},Oac);_.Kb=function Pac(a){return RD(a,18).d.i};_.Fb=function Qac(a){return this===a};var RS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$0$Type',1599);feb(1600,1,{},Rac);_.Kb=function Sac(a){return Jac(this.a,UD(a))};_.Fb=function Tac(a){return this===a};var SS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$1$Type',1600);feb(1601,1,{},Uac);_.Kb=function Vac(a){return RD(a,18).c.i};_.Fb=function Wac(a){return this===a};var TS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$2$Type',1601);feb(1602,1,{},Xac);_.Kb=function Yac(a){return Kac(this.a,UD(a))};_.Fb=function Zac(a){return this===a};var US=sfb(hBe,'InteractiveExternalPortPositioner/lambda$3$Type',1602);feb(1603,1,{},$ac);_.Kb=function _ac(a){return Lac(this.a,UD(a))};_.Fb=function abc(a){return this===a};var VS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$4$Type',1603);feb(1604,1,{},bbc);_.Kb=function cbc(a){return Mac(this.a,UD(a))};_.Fb=function dbc(a){return this===a};var WS=sfb(hBe,'InteractiveExternalPortPositioner/lambda$5$Type',1604);feb(81,22,{3:1,34:1,22:1,81:1,196:1},icc);_.dg=function jcc(){switch(this.g){case 15:return new Hrc;case 22:return new bsc;case 47:return new ksc;case 28:case 35:return new Ldc;case 32:return new h6b;case 42:return new q6b;case 1:return new v6b;case 41:return new y6b;case 56:return new L8b((P8b(),O8b));case 0:return new L8b((P8b(),N8b));case 2:return new G6b;case 54:return new K6b;case 33:return new b7b;case 51:return new a8b;case 55:return new Z8b;case 13:return new f9b;case 38:return new o9b;case 44:return new C9b;case 40:return new Q9b;case 9:return new $9b;case 49:return new Yjc;case 37:return new mac;case 43:return new xac;case 27:return new Aac;case 30:return new Dac;case 3:return new Iac;case 18:return new scc;case 29:return new ycc;case 5:return new Lcc;case 50:return new Ucc;case 34:return new pdc;case 36:return new Zdc;case 52:return new z7b;case 11:return new fec;case 7:return new pec;case 39:return new Dec;case 45:return new Gec;case 16:return new Kec;case 10:return new _ec;case 48:return new Bfc;case 21:return new Ifc;case 23:return new FKc((RKc(),PKc));case 8:return new Rfc;case 12:return new Zfc;case 4:return new cgc;case 19:return new xgc;case 17:return new Vgc;case 53:return new Ygc;case 6:return new Nhc;case 25:return new ahc;case 46:return new rhc;case 31:return new Yhc;case 14:return new jic;case 26:return new Ssc;case 20:return new yic;case 24:return new FKc((RKc(),QKc));default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var ebc,fbc,gbc,hbc,ibc,jbc,kbc,lbc,mbc,nbc,obc,pbc,qbc,rbc,sbc,tbc,ubc,vbc,wbc,xbc,ybc,zbc,Abc,Bbc,Cbc,Dbc,Ebc,Fbc,Gbc,Hbc,Ibc,Jbc,Kbc,Lbc,Mbc,Nbc,Obc,Pbc,Qbc,Rbc,Sbc,Tbc,Ubc,Vbc,Wbc,Xbc,Ybc,Zbc,$bc,_bc,acc,bcc,ccc,dcc,ecc,fcc,gcc;var YS=tfb(hBe,mBe,81,WI,lcc,kcc);var mcc;feb(1605,1,QAe,scc);_.Kf=function tcc(a,b){qcc(RD(a,36),b)};var ZS=sfb(hBe,'InvertedPortProcessor',1605);feb(1606,1,QAe,ycc);_.Kf=function zcc(a,b){xcc(RD(a,36),b)};var bT=sfb(hBe,'LabelAndNodeSizeProcessor',1606);feb(1607,1,nwe,Acc);_.Mb=function Bcc(a){return RD(a,10).k==(r3b(),p3b)};var $S=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$0$Type',1607);feb(1608,1,nwe,Ccc);_.Mb=function Dcc(a){return RD(a,10).k==(r3b(),m3b)};var _S=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$1$Type',1608);feb(1609,1,Qve,Ecc);_.Cd=function Fcc(a){vcc(this.b,this.a,this.c,RD(a,10))};_.a=false;_.c=false;var aT=sfb(hBe,'LabelAndNodeSizeProcessor/lambda$2$Type',1609);feb(1610,1,QAe,Lcc);_.Kf=function Mcc(a,b){Jcc(RD(a,36),b)};var Gcc;var dT=sfb(hBe,'LabelDummyInserter',1610);feb(1611,1,xye,Ncc);_.Lb=function Occ(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Lmd))};_.Fb=function Pcc(a){return this===a};_.Mb=function Qcc(a){return dE(mQb(RD(a,72),(yCc(),wAc)))===dE((Omd(),Lmd))};var cT=sfb(hBe,'LabelDummyInserter/1',1611);feb(1612,1,QAe,Ucc);_.Kf=function Vcc(a,b){Tcc(RD(a,36),b)};var fT=sfb(hBe,'LabelDummyRemover',1612);feb(1613,1,nwe,Wcc);_.Mb=function Xcc(a){return Heb(TD(mQb(RD(a,72),(yCc(),vAc))))};var eT=sfb(hBe,'LabelDummyRemover/lambda$0$Type',1613);feb(1378,1,QAe,pdc);_.Kf=function tdc(a,b){ldc(this,RD(a,36),b)};_.a=null;var Ycc;var mT=sfb(hBe,'LabelDummySwitcher',1378);feb(292,1,{292:1},xdc);_.c=0;_.d=null;_.f=0;var gT=sfb(hBe,'LabelDummySwitcher/LabelDummyInfo',292);feb(1379,1,{},ydc);_.Kb=function zdc(a){return Zcc(),new SDb(null,new Swb(RD(a,30).a,16))};var hT=sfb(hBe,'LabelDummySwitcher/lambda$0$Type',1379);feb(1380,1,nwe,Adc);_.Mb=function Bdc(a){return Zcc(),RD(a,10).k==(r3b(),n3b)};var iT=sfb(hBe,'LabelDummySwitcher/lambda$1$Type',1380);feb(1381,1,{},Cdc);_.Kb=function Ddc(a){return qdc(this.a,RD(a,10))};var jT=sfb(hBe,'LabelDummySwitcher/lambda$2$Type',1381);feb(1382,1,Qve,Edc);_.Cd=function Fdc(a){rdc(this.a,RD(a,292))};var kT=sfb(hBe,'LabelDummySwitcher/lambda$3$Type',1382);feb(1383,1,fye,Gdc);_.Ne=function Hdc(a,b){return sdc(RD(a,292),RD(b,292))};_.Fb=function Idc(a){return this===a};_.Oe=function Jdc(){return new Frb(this)};var lT=sfb(hBe,'LabelDummySwitcher/lambda$4$Type',1383);feb(802,1,QAe,Ldc);_.Kf=function Mdc(a,b){Kdc(RD(a,36),b)};var nT=sfb(hBe,'LabelManagementProcessor',802);feb(1614,1,QAe,Zdc);_.Kf=function $dc(a,b){Tdc(RD(a,36),b)};var oT=sfb(hBe,'LabelSideSelector',1614);feb(1622,1,QAe,fec);_.Kf=function gec(a,b){bec(RD(a,36),b)};var pT=sfb(hBe,'LayerConstraintPostprocessor',1622);feb(1623,1,QAe,pec);_.Kf=function qec(a,b){nec(RD(a,36),b)};var hec;var rT=sfb(hBe,'LayerConstraintPreprocessor',1623);feb(371,22,{3:1,34:1,22:1,371:1},xec);var rec,sec,tec,uec;var qT=tfb(hBe,'LayerConstraintPreprocessor/HiddenNodeConnections',371,WI,zec,yec);var Aec;feb(1624,1,QAe,Dec);_.Kf=function Eec(a,b){Cec(RD(a,36),b)};var sT=sfb(hBe,'LayerSizeAndGraphHeightCalculator',1624);feb(1625,1,QAe,Gec);_.Kf=function Iec(a,b){Fec(RD(a,36),b)};var tT=sfb(hBe,'LongEdgeJoiner',1625);feb(1626,1,QAe,Kec);_.Kf=function Mec(a,b){Jec(RD(a,36),b)};var uT=sfb(hBe,'LongEdgeSplitter',1626);feb(1627,1,QAe,_ec);_.Kf=function cfc(a,b){Vec(this,RD(a,36),b)};_.e=0;_.f=0;_.j=0;_.k=0;_.n=0;_.o=0;var Pec,Qec;var AT=sfb(hBe,'NodePromotion',1627);feb(1628,1,fye,efc);_.Ne=function ffc(a,b){return dfc(RD(a,10),RD(b,10))};_.Fb=function gfc(a){return this===a};_.Oe=function hfc(){return new Frb(this)};var vT=sfb(hBe,'NodePromotion/1',1628);feb(1629,1,fye,jfc);_.Ne=function kfc(a,b){return ifc(RD(a,10),RD(b,10))};_.Fb=function lfc(a){return this===a};_.Oe=function mfc(){return new Frb(this)};var wT=sfb(hBe,'NodePromotion/2',1629);feb(1630,1,{},nfc);_.Kb=function ofc(a){return RD(a,42),Rec(),Geb(),true};_.Fb=function pfc(a){return this===a};var xT=sfb(hBe,'NodePromotion/lambda$0$Type',1630);feb(1631,1,{},qfc);_.Kb=function rfc(a){return afc(this.a,RD(a,42))};_.Fb=function sfc(a){return this===a};_.a=0;var yT=sfb(hBe,'NodePromotion/lambda$1$Type',1631);feb(1632,1,{},tfc);_.Kb=function ufc(a){return bfc(this.a,RD(a,42))};_.Fb=function vfc(a){return this===a};_.a=0;var zT=sfb(hBe,'NodePromotion/lambda$2$Type',1632);feb(1633,1,QAe,Bfc);_.Kf=function Cfc(a,b){wfc(RD(a,36),b)};var BT=sfb(hBe,'NorthSouthPortPostprocessor',1633);feb(1634,1,QAe,Ifc);_.Kf=function Kfc(a,b){Gfc(RD(a,36),b)};var DT=sfb(hBe,'NorthSouthPortPreprocessor',1634);feb(1635,1,fye,Lfc);_.Ne=function Mfc(a,b){return Jfc(RD(a,12),RD(b,12))};_.Fb=function Nfc(a){return this===a};_.Oe=function Ofc(){return new Frb(this)};var CT=sfb(hBe,'NorthSouthPortPreprocessor/lambda$0$Type',1635);feb(1636,1,QAe,Rfc);_.Kf=function Tfc(a,b){Qfc(RD(a,36),b)};var GT=sfb(hBe,'PartitionMidprocessor',1636);feb(1637,1,nwe,Ufc);_.Mb=function Vfc(a){return nQb(RD(a,10),(yCc(),tBc))};var ET=sfb(hBe,'PartitionMidprocessor/lambda$0$Type',1637);feb(1638,1,Qve,Wfc);_.Cd=function Xfc(a){Sfc(this.a,RD(a,10))};var FT=sfb(hBe,'PartitionMidprocessor/lambda$1$Type',1638);feb(1639,1,QAe,Zfc);_.Kf=function $fc(a,b){Yfc(RD(a,36),b)};var HT=sfb(hBe,'PartitionPostprocessor',1639);feb(1640,1,QAe,cgc);_.Kf=function dgc(a,b){agc(RD(a,36),b)};var MT=sfb(hBe,'PartitionPreprocessor',1640);feb(1641,1,nwe,egc);_.Mb=function fgc(a){return nQb(RD(a,10),(yCc(),tBc))};var IT=sfb(hBe,'PartitionPreprocessor/lambda$0$Type',1641);feb(1642,1,{},ggc);_.Kb=function hgc(a){return new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var JT=sfb(hBe,'PartitionPreprocessor/lambda$1$Type',1642);feb(1643,1,nwe,igc);_.Mb=function jgc(a){return _fc(RD(a,18))};var KT=sfb(hBe,'PartitionPreprocessor/lambda$2$Type',1643);feb(1644,1,Qve,kgc);_.Cd=function lgc(a){bgc(RD(a,18))};var LT=sfb(hBe,'PartitionPreprocessor/lambda$3$Type',1644);feb(1645,1,QAe,xgc);_.Kf=function Bgc(a,b){ugc(RD(a,36),b)};var mgc,ngc,ogc,pgc,qgc,rgc;var ST=sfb(hBe,'PortListSorter',1645);feb(1648,1,fye,Dgc);_.Ne=function Egc(a,b){return ygc(RD(a,12),RD(b,12))};_.Fb=function Fgc(a){return this===a};_.Oe=function Ggc(){return new Frb(this)};var NT=sfb(hBe,'PortListSorter/lambda$0$Type',1648);feb(1650,1,fye,Hgc);_.Ne=function Igc(a,b){return zgc(RD(a,12),RD(b,12))};_.Fb=function Jgc(a){return this===a};_.Oe=function Kgc(){return new Frb(this)};var OT=sfb(hBe,'PortListSorter/lambda$1$Type',1650);feb(1646,1,{},Lgc);_.Kb=function Mgc(a){return sgc(),RD(a,12).e};var PT=sfb(hBe,'PortListSorter/lambda$2$Type',1646);feb(1647,1,{},Ngc);_.Kb=function Ogc(a){return sgc(),RD(a,12).g};var QT=sfb(hBe,'PortListSorter/lambda$3$Type',1647);feb(1649,1,fye,Pgc);_.Ne=function Qgc(a,b){return Agc(RD(a,12),RD(b,12))};_.Fb=function Rgc(a){return this===a};_.Oe=function Sgc(){return new Frb(this)};var RT=sfb(hBe,'PortListSorter/lambda$4$Type',1649);feb(1651,1,QAe,Vgc);_.Kf=function Wgc(a,b){Tgc(RD(a,36),b)};var TT=sfb(hBe,'PortSideProcessor',1651);feb(1652,1,QAe,Ygc);_.Kf=function Zgc(a,b){Xgc(RD(a,36),b)};var UT=sfb(hBe,'ReversedEdgeRestorer',1652);feb(1657,1,QAe,ahc);_.Kf=function bhc(a,b){$gc(this,RD(a,36),b)};var _T=sfb(hBe,'SelfLoopPortRestorer',1657);feb(1658,1,{},chc);_.Kb=function dhc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var VT=sfb(hBe,'SelfLoopPortRestorer/lambda$0$Type',1658);feb(1659,1,nwe,ehc);_.Mb=function fhc(a){return RD(a,10).k==(r3b(),p3b)};var WT=sfb(hBe,'SelfLoopPortRestorer/lambda$1$Type',1659);feb(1660,1,nwe,ghc);_.Mb=function hhc(a){return nQb(RD(a,10),(Ywc(),Pwc))};var XT=sfb(hBe,'SelfLoopPortRestorer/lambda$2$Type',1660);feb(1661,1,{},ihc);_.Kb=function jhc(a){return RD(mQb(RD(a,10),(Ywc(),Pwc)),337)};var YT=sfb(hBe,'SelfLoopPortRestorer/lambda$3$Type',1661);feb(1662,1,Qve,khc);_.Cd=function lhc(a){_gc(this.a,RD(a,337))};var ZT=sfb(hBe,'SelfLoopPortRestorer/lambda$4$Type',1662);feb(805,1,Qve,mhc);_.Cd=function nhc(a){Rmc(RD(a,105))};var $T=sfb(hBe,'SelfLoopPortRestorer/lambda$5$Type',805);feb(1663,1,QAe,rhc);_.Kf=function thc(a,b){ohc(RD(a,36),b)};var iU=sfb(hBe,'SelfLoopPostProcessor',1663);feb(1664,1,{},uhc);_.Kb=function vhc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var aU=sfb(hBe,'SelfLoopPostProcessor/lambda$0$Type',1664);feb(1665,1,nwe,whc);_.Mb=function xhc(a){return RD(a,10).k==(r3b(),p3b)};var bU=sfb(hBe,'SelfLoopPostProcessor/lambda$1$Type',1665);feb(1666,1,nwe,yhc);_.Mb=function zhc(a){return nQb(RD(a,10),(Ywc(),Pwc))};var cU=sfb(hBe,'SelfLoopPostProcessor/lambda$2$Type',1666);feb(1667,1,Qve,Ahc);_.Cd=function Bhc(a){phc(RD(a,10))};var dU=sfb(hBe,'SelfLoopPostProcessor/lambda$3$Type',1667);feb(1668,1,{},Chc);_.Kb=function Dhc(a){return new SDb(null,new Swb(RD(a,105).f,1))};var eU=sfb(hBe,'SelfLoopPostProcessor/lambda$4$Type',1668);feb(1669,1,Qve,Ehc);_.Cd=function Fhc(a){qhc(this.a,RD(a,340))};var fU=sfb(hBe,'SelfLoopPostProcessor/lambda$5$Type',1669);feb(1670,1,nwe,Ghc);_.Mb=function Hhc(a){return !!RD(a,105).i};var gU=sfb(hBe,'SelfLoopPostProcessor/lambda$6$Type',1670);feb(1671,1,Qve,Ihc);_.Cd=function Jhc(a){shc(this.a,RD(a,105))};var hU=sfb(hBe,'SelfLoopPostProcessor/lambda$7$Type',1671);feb(1653,1,QAe,Nhc);_.Kf=function Ohc(a,b){Mhc(RD(a,36),b)};var mU=sfb(hBe,'SelfLoopPreProcessor',1653);feb(1654,1,{},Phc);_.Kb=function Qhc(a){return new SDb(null,new Swb(RD(a,105).f,1))};var jU=sfb(hBe,'SelfLoopPreProcessor/lambda$0$Type',1654);feb(1655,1,{},Rhc);_.Kb=function Shc(a){return RD(a,340).a};var kU=sfb(hBe,'SelfLoopPreProcessor/lambda$1$Type',1655);feb(1656,1,Qve,Thc);_.Cd=function Uhc(a){Lhc(RD(a,18))};var lU=sfb(hBe,'SelfLoopPreProcessor/lambda$2$Type',1656);feb(1672,1,QAe,Yhc);_.Kf=function Zhc(a,b){Whc(this,RD(a,36),b)};var sU=sfb(hBe,'SelfLoopRouter',1672);feb(1673,1,{},$hc);_.Kb=function _hc(a){return new SDb(null,new Swb(RD(a,30).a,16))};var nU=sfb(hBe,'SelfLoopRouter/lambda$0$Type',1673);feb(1674,1,nwe,aic);_.Mb=function bic(a){return RD(a,10).k==(r3b(),p3b)};var oU=sfb(hBe,'SelfLoopRouter/lambda$1$Type',1674);feb(1675,1,nwe,cic);_.Mb=function dic(a){return nQb(RD(a,10),(Ywc(),Pwc))};var pU=sfb(hBe,'SelfLoopRouter/lambda$2$Type',1675);feb(1676,1,{},eic);_.Kb=function fic(a){return RD(mQb(RD(a,10),(Ywc(),Pwc)),337)};var qU=sfb(hBe,'SelfLoopRouter/lambda$3$Type',1676);feb(1677,1,Qve,gic);_.Cd=function hic(a){Vhc(this.a,this.b,RD(a,337))};var rU=sfb(hBe,'SelfLoopRouter/lambda$4$Type',1677);feb(1678,1,QAe,jic);_.Kf=function mic(a,b){iic(RD(a,36),b)};var xU=sfb(hBe,'SemiInteractiveCrossMinProcessor',1678);feb(1679,1,nwe,nic);_.Mb=function oic(a){return RD(a,10).k==(r3b(),p3b)};var tU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$0$Type',1679);feb(1680,1,nwe,pic);_.Mb=function qic(a){return lQb(RD(a,10))._b((yCc(),IBc))};var uU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$1$Type',1680);feb(1681,1,fye,ric);_.Ne=function sic(a,b){return kic(RD(a,10),RD(b,10))};_.Fb=function tic(a){return this===a};_.Oe=function uic(){return new Frb(this)};var vU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$2$Type',1681);feb(1682,1,{},vic);_.Ve=function wic(a,b){return lic(RD(a,10),RD(b,10))};var wU=sfb(hBe,'SemiInteractiveCrossMinProcessor/lambda$3$Type',1682);feb(1684,1,QAe,yic);_.Kf=function Cic(a,b){xic(RD(a,36),b)};var AU=sfb(hBe,'SortByInputModelProcessor',1684);feb(1685,1,nwe,Dic);_.Mb=function Eic(a){return RD(a,12).g.c.length!=0};var yU=sfb(hBe,'SortByInputModelProcessor/lambda$0$Type',1685);feb(1686,1,Qve,Fic);_.Cd=function Gic(a){Aic(this.a,RD(a,12))};var zU=sfb(hBe,'SortByInputModelProcessor/lambda$1$Type',1686);feb(1759,817,{},Pic);_.df=function Qic(a){var b,c,d,e;this.c=a;switch(this.a.g){case 2:b=new bnb;FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new Rjc),new Tjc(this,b));eHb(this,new Zic);Umb(b,new bjc);b.c.length=0;FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new djc),new fjc(b));eHb(this,new jjc);Umb(b,new njc);b.c.length=0;c=Wvb(TCb(HDb(new SDb(null,new Swb(this.c.a.b,16)),new pjc(this))),new rjc);FDb(new SDb(null,new Swb(this.c.a.a,16)),new vjc(c,b));eHb(this,new zjc);Umb(b,new Djc);b.c.length=0;break;case 3:d=new bnb;eHb(this,new Ric);e=Wvb(TCb(HDb(new SDb(null,new Swb(this.c.a.b,16)),new Vic(this))),new tjc);FDb(CDb(new SDb(null,new Swb(this.c.a.b,16)),new Fjc),new Hjc(e,d));eHb(this,new Ljc);Umb(d,new Pjc);d.c.length=0;break;default:throw Adb(new Ied);}};_.b=0;var ZU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation',1759);feb(1760,1,xye,Ric);_.Lb=function Sic(a){return ZD(RD(a,60).g,154)};_.Fb=function Tic(a){return this===a};_.Mb=function Uic(a){return ZD(RD(a,60).g,154)};var BU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$0$Type',1760);feb(1761,1,{},Vic);_.Ye=function Wic(a){return Jic(this.a,RD(a,60))};var CU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$1$Type',1761);feb(1769,1,owe,Xic);_.de=function Yic(){Iic(this.a,this.b,-1)};_.b=0;var DU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$10$Type',1769);feb(1771,1,xye,Zic);_.Lb=function $ic(a){return ZD(RD(a,60).g,154)};_.Fb=function _ic(a){return this===a};_.Mb=function ajc(a){return ZD(RD(a,60).g,154)};var EU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$11$Type',1771);feb(1772,1,Qve,bjc);_.Cd=function cjc(a){RD(a,380).de()};var FU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$12$Type',1772);feb(1773,1,nwe,djc);_.Mb=function ejc(a){return ZD(RD(a,60).g,10)};var GU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$13$Type',1773);feb(1775,1,Qve,fjc);_.Cd=function gjc(a){Kic(this.a,RD(a,60))};var HU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$14$Type',1775);feb(1774,1,owe,hjc);_.de=function ijc(){Iic(this.b,this.a,-1)};_.a=0;var IU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$15$Type',1774);feb(1776,1,xye,jjc);_.Lb=function kjc(a){return ZD(RD(a,60).g,10)};_.Fb=function ljc(a){return this===a};_.Mb=function mjc(a){return ZD(RD(a,60).g,10)};var JU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$16$Type',1776);feb(1777,1,Qve,njc);_.Cd=function ojc(a){RD(a,380).de()};var KU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$17$Type',1777);feb(1778,1,{},pjc);_.Ye=function qjc(a){return Lic(this.a,RD(a,60))};var LU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$18$Type',1778);feb(1779,1,{},rjc);_.We=function sjc(){return 0};var MU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$19$Type',1779);feb(1762,1,{},tjc);_.We=function ujc(){return 0};var NU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$2$Type',1762);feb(1781,1,Qve,vjc);_.Cd=function wjc(a){Mic(this.a,this.b,RD(a,316))};_.a=0;var OU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$20$Type',1781);feb(1780,1,owe,xjc);_.de=function yjc(){Hic(this.a,this.b,-1)};_.b=0;var PU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$21$Type',1780);feb(1782,1,xye,zjc);_.Lb=function Ajc(a){return RD(a,60),true};_.Fb=function Bjc(a){return this===a};_.Mb=function Cjc(a){return RD(a,60),true};var QU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$22$Type',1782);feb(1783,1,Qve,Djc);_.Cd=function Ejc(a){RD(a,380).de()};var RU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$23$Type',1783);feb(1763,1,nwe,Fjc);_.Mb=function Gjc(a){return ZD(RD(a,60).g,10)};var SU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$3$Type',1763);feb(1765,1,Qve,Hjc);_.Cd=function Ijc(a){Nic(this.a,this.b,RD(a,60))};_.a=0;var TU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$4$Type',1765);feb(1764,1,owe,Jjc);_.de=function Kjc(){Iic(this.b,this.a,-1)};_.a=0;var UU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$5$Type',1764);feb(1766,1,xye,Ljc);_.Lb=function Mjc(a){return RD(a,60),true};_.Fb=function Njc(a){return this===a};_.Mb=function Ojc(a){return RD(a,60),true};var VU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$6$Type',1766);feb(1767,1,Qve,Pjc);_.Cd=function Qjc(a){RD(a,380).de()};var WU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$7$Type',1767);feb(1768,1,nwe,Rjc);_.Mb=function Sjc(a){return ZD(RD(a,60).g,154)};var XU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$8$Type',1768);feb(1770,1,Qve,Tjc);_.Cd=function Ujc(a){Oic(this.a,this.b,RD(a,60))};var YU=sfb(rBe,'EdgeAwareScanlineConstraintCalculation/lambda$9$Type',1770);feb(1586,1,QAe,Yjc);_.Kf=function bkc(a,b){Xjc(this,RD(a,36),b)};var Vjc;var bV=sfb(rBe,'HorizontalGraphCompactor',1586);feb(1587,1,{},ckc);_.ff=function dkc(a,b){var c,d,e;if(_jc(a,b)){return 0}c=Zjc(a);d=Zjc(b);if(!!c&&c.k==(r3b(),m3b)||!!d&&d.k==(r3b(),m3b)){return 0}e=RD(mQb(this.a.a,(Ywc(),Qwc)),312);return ZEc(e,c?c.k:(r3b(),o3b),d?d.k:(r3b(),o3b))};_.gf=function ekc(a,b){var c,d,e;if(_jc(a,b)){return 1}c=Zjc(a);d=Zjc(b);e=RD(mQb(this.a.a,(Ywc(),Qwc)),312);return aFc(e,c?c.k:(r3b(),o3b),d?d.k:(r3b(),o3b))};var $U=sfb(rBe,'HorizontalGraphCompactor/1',1587);feb(1588,1,{},fkc);_.ef=function gkc(a,b){return Wjc(),a.a.i==0};var _U=sfb(rBe,'HorizontalGraphCompactor/lambda$0$Type',1588);feb(1589,1,{},hkc);_.ef=function ikc(a,b){return akc(this.a,a,b)};var aV=sfb(rBe,'HorizontalGraphCompactor/lambda$1$Type',1589);feb(1730,1,{},Ckc);var jkc,kkc;var BV=sfb(rBe,'LGraphToCGraphTransformer',1730);feb(1738,1,nwe,Kkc);_.Mb=function Lkc(a){return a!=null};var cV=sfb(rBe,'LGraphToCGraphTransformer/0methodref$nonNull$Type',1738);feb(1731,1,{},Mkc);_.Kb=function Nkc(a){return lkc(),jeb(mQb(RD(RD(a,60).g,10),(Ywc(),Awc)))};var dV=sfb(rBe,'LGraphToCGraphTransformer/lambda$0$Type',1731);feb(1732,1,{},Okc);_.Kb=function Pkc(a){return lkc(),Mlc(RD(RD(a,60).g,154))};var eV=sfb(rBe,'LGraphToCGraphTransformer/lambda$1$Type',1732);feb(1741,1,nwe,Qkc);_.Mb=function Rkc(a){return lkc(),ZD(RD(a,60).g,10)};var fV=sfb(rBe,'LGraphToCGraphTransformer/lambda$10$Type',1741);feb(1742,1,Qve,Skc);_.Cd=function Tkc(a){Dkc(RD(a,60))};var gV=sfb(rBe,'LGraphToCGraphTransformer/lambda$11$Type',1742);feb(1743,1,nwe,Ukc);_.Mb=function Vkc(a){return lkc(),ZD(RD(a,60).g,154)};var hV=sfb(rBe,'LGraphToCGraphTransformer/lambda$12$Type',1743);feb(1747,1,Qve,Wkc);_.Cd=function Xkc(a){Ekc(RD(a,60))};var iV=sfb(rBe,'LGraphToCGraphTransformer/lambda$13$Type',1747);feb(1744,1,Qve,Ykc);_.Cd=function Zkc(a){Fkc(this.a,RD(a,8))};_.a=0;var jV=sfb(rBe,'LGraphToCGraphTransformer/lambda$14$Type',1744);feb(1745,1,Qve,$kc);_.Cd=function _kc(a){Gkc(this.a,RD(a,116))};_.a=0;var kV=sfb(rBe,'LGraphToCGraphTransformer/lambda$15$Type',1745);feb(1746,1,Qve,alc);_.Cd=function blc(a){Hkc(this.a,RD(a,8))};_.a=0;var lV=sfb(rBe,'LGraphToCGraphTransformer/lambda$16$Type',1746);feb(1748,1,{},clc);_.Kb=function dlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var mV=sfb(rBe,'LGraphToCGraphTransformer/lambda$17$Type',1748);feb(1749,1,nwe,elc);_.Mb=function flc(a){return lkc(),W0b(RD(a,18))};var nV=sfb(rBe,'LGraphToCGraphTransformer/lambda$18$Type',1749);feb(1750,1,Qve,glc);_.Cd=function hlc(a){ukc(this.a,RD(a,18))};var oV=sfb(rBe,'LGraphToCGraphTransformer/lambda$19$Type',1750);feb(1734,1,Qve,ilc);_.Cd=function jlc(a){vkc(this.a,RD(a,154))};var pV=sfb(rBe,'LGraphToCGraphTransformer/lambda$2$Type',1734);feb(1751,1,{},klc);_.Kb=function llc(a){return lkc(),new SDb(null,new Swb(RD(a,30).a,16))};var qV=sfb(rBe,'LGraphToCGraphTransformer/lambda$20$Type',1751);feb(1752,1,{},mlc);_.Kb=function nlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var rV=sfb(rBe,'LGraphToCGraphTransformer/lambda$21$Type',1752);feb(1753,1,{},olc);_.Kb=function plc(a){return lkc(),RD(mQb(RD(a,18),(Ywc(),Twc)),15)};var sV=sfb(rBe,'LGraphToCGraphTransformer/lambda$22$Type',1753);feb(1754,1,nwe,qlc);_.Mb=function rlc(a){return Ikc(RD(a,15))};var tV=sfb(rBe,'LGraphToCGraphTransformer/lambda$23$Type',1754);feb(1755,1,Qve,slc);_.Cd=function tlc(a){nkc(this.a,RD(a,15))};var uV=sfb(rBe,'LGraphToCGraphTransformer/lambda$24$Type',1755);feb(1733,1,Qve,ulc);_.Cd=function vlc(a){wkc(this.a,this.b,RD(a,154))};var vV=sfb(rBe,'LGraphToCGraphTransformer/lambda$3$Type',1733);feb(1735,1,{},wlc);_.Kb=function xlc(a){return lkc(),new SDb(null,new Swb(RD(a,30).a,16))};var wV=sfb(rBe,'LGraphToCGraphTransformer/lambda$4$Type',1735);feb(1736,1,{},ylc);_.Kb=function zlc(a){return lkc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var xV=sfb(rBe,'LGraphToCGraphTransformer/lambda$5$Type',1736);feb(1737,1,{},Alc);_.Kb=function Blc(a){return lkc(),RD(mQb(RD(a,18),(Ywc(),Twc)),15)};var yV=sfb(rBe,'LGraphToCGraphTransformer/lambda$6$Type',1737);feb(1739,1,Qve,Clc);_.Cd=function Dlc(a){Jkc(this.a,RD(a,15))};var zV=sfb(rBe,'LGraphToCGraphTransformer/lambda$8$Type',1739);feb(1740,1,Qve,Elc);_.Cd=function Flc(a){xkc(this.a,this.b,RD(a,154))};var AV=sfb(rBe,'LGraphToCGraphTransformer/lambda$9$Type',1740);feb(1729,1,{},Jlc);_.cf=function Klc(a){var b,c,d,e,f;this.a=a;this.d=new BIb;this.c=$C(DN,rve,125,this.a.a.a.c.length,0,1);this.b=0;for(c=new Anb(this.a.a.a);c.a<c.c.c.length;){b=RD(ynb(c),316);b.d=this.b;f=eJb(fJb(new gJb,b),this.d);this.c[this.b]=f;++this.b}Ilc(this);Hlc(this);Glc(this);lJb(CJb(this.d),new Oqd);for(e=new Anb(this.a.a.b);e.a<e.c.c.length;){d=RD(ynb(e),60);d.d.c=this.c[d.a.d].e+d.b.a}};_.b=0;var CV=sfb(rBe,'NetworkSimplexCompaction',1729);feb(154,1,{34:1,154:1},Nlc);_.Fd=function Olc(a){return Llc(this,RD(a,154))};_.Ib=function Plc(){return Mlc(this)};var DV=sfb(rBe,'VerticalSegment',154);feb(841,1,{},Ylc);_.c=0;_.e=0;_.i=0;var GV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter',841);feb(677,1,{677:1},dmc);_.Ib=function emc(){return 'AdjacencyList [node='+this.d+', adjacencies= '+this.a+']'};_.b=0;_.c=0;_.f=0;var FV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList',677);feb(293,1,{34:1,293:1},hmc);_.Fd=function imc(a){return fmc(this,RD(a,293))};_.Ib=function jmc(){return 'Adjacency [position='+this.c+', cardinality='+this.a+', currentCardinality='+this.b+']'};_.a=0;_.b=0;_.c=0;var EV=sfb(sBe,'BetweenLayerEdgeTwoNodeCrossingsCounter/AdjacencyList/Adjacency',293);feb(2026,1,{},mmc);_.b=0;_.e=false;var HV=sfb(sBe,'CrossingMatrixFiller',2026);var QY=ufb(tBe,'IInitializable');feb(1867,1,uBe,smc);_.gg=function vmc(a,b,c,d,e,f){};_.ig=function xmc(a,b,c){};_.eg=function tmc(){return this.c!=(RKc(),PKc)};_.fg=function umc(){this.e=$C(kE,Pwe,28,this.d,15,1)};_.hg=function wmc(a,b){b[a][0].c.p=a};_.jg=function ymc(a,b,c,d){++this.d};_.kg=function zmc(){return true};_.lg=function Amc(a,b,c,d){omc(this,a,b,c);return nmc(this,b)};_.mg=function Bmc(a,b){var c;c=pmc(b,a.length);omc(this,a,c,b);return qmc(this,c)};_.d=0;var IV=sfb(sBe,'GreedySwitchHeuristic',1867);feb(2029,1,{},Kmc);_.b=0;_.d=0;var JV=sfb(sBe,'NorthSouthEdgeNeighbouringNodeCrossingsCounter',2029);feb(2016,1,{},Pmc);_.a=false;var KV=sfb(sBe,'SwitchDecider',2016);feb(105,1,{105:1},Vmc);_.a=null;_.c=null;_.i=null;var NV=sfb(vBe,'SelfHyperLoop',105);feb(2013,1,{},_mc);_.c=0;_.e=0;var MV=sfb(vBe,'SelfHyperLoopLabels',2013);feb(421,22,{3:1,34:1,22:1,421:1},fnc);var anc,bnc,cnc,dnc;var LV=tfb(vBe,'SelfHyperLoopLabels/Alignment',421,WI,hnc,gnc);var inc;feb(340,1,{340:1},knc);var OV=sfb(vBe,'SelfLoopEdge',340);feb(337,1,{337:1},onc);_.a=false;var QV=sfb(vBe,'SelfLoopHolder',337);feb(1790,1,nwe,qnc);_.Mb=function rnc(a){return W0b(RD(a,18))};var PV=sfb(vBe,'SelfLoopHolder/lambda$0$Type',1790);feb(113,1,{113:1},tnc);_.a=false;_.c=false;var SV=sfb(vBe,'SelfLoopPort',113);feb(1855,1,nwe,unc);_.Mb=function vnc(a){return W0b(RD(a,18))};var RV=sfb(vBe,'SelfLoopPort/lambda$0$Type',1855);feb(375,22,{3:1,34:1,22:1,375:1},Cnc);var wnc,xnc,ync,znc,Anc;var TV=tfb(vBe,'SelfLoopType',375,WI,Fnc,Enc);var Gnc;feb(1798,1,{},boc);var Inc,Jnc,Knc,Lnc;var gW=sfb(wBe,'PortRestorer',1798);feb(372,22,{3:1,34:1,22:1,372:1},koc);var goc,hoc,ioc;var UV=tfb(wBe,'PortRestorer/PortSideArea',372,WI,moc,loc);var noc;feb(1799,1,{},poc);_.Kb=function qoc(a){return Mnc(),RD(a,15).Oc()};var VV=sfb(wBe,'PortRestorer/lambda$0$Type',1799);feb(1800,1,Qve,roc);_.Cd=function soc(a){Mnc();RD(a,113).c=false};var WV=sfb(wBe,'PortRestorer/lambda$1$Type',1800);feb(1809,1,nwe,toc);_.Mb=function uoc(a){return Mnc(),RD(a,12).j==(qpd(),ppd)};var XV=sfb(wBe,'PortRestorer/lambda$10$Type',1809);feb(1810,1,{},voc);_.Kb=function woc(a){return Mnc(),RD(a,113).d};var YV=sfb(wBe,'PortRestorer/lambda$11$Type',1810);feb(1811,1,Qve,xoc);_.Cd=function yoc(a){coc(this.a,RD(a,12))};var ZV=sfb(wBe,'PortRestorer/lambda$12$Type',1811);feb(1801,1,Qve,zoc);_.Cd=function Aoc(a){doc(this.a,RD(a,105))};var $V=sfb(wBe,'PortRestorer/lambda$2$Type',1801);feb(1802,1,fye,Boc);_.Ne=function Coc(a,b){return eoc(RD(a,113),RD(b,113))};_.Fb=function Doc(a){return this===a};_.Oe=function Eoc(){return new Frb(this)};var _V=sfb(wBe,'PortRestorer/lambda$3$Type',1802);feb(1803,1,nwe,Foc);_.Mb=function Goc(a){return Mnc(),RD(a,113).c};var aW=sfb(wBe,'PortRestorer/lambda$4$Type',1803);feb(1804,1,nwe,Hoc);_.Mb=function Ioc(a){return Tnc(RD(a,12))};var bW=sfb(wBe,'PortRestorer/lambda$5$Type',1804);feb(1805,1,nwe,Joc);_.Mb=function Koc(a){return Mnc(),RD(a,12).j==(qpd(),Yod)};var cW=sfb(wBe,'PortRestorer/lambda$6$Type',1805);feb(1806,1,nwe,Loc);_.Mb=function Moc(a){return Mnc(),RD(a,12).j==(qpd(),Xod)};var dW=sfb(wBe,'PortRestorer/lambda$7$Type',1806);feb(1807,1,nwe,Noc);_.Mb=function Ooc(a){return Unc(RD(a,12))};var eW=sfb(wBe,'PortRestorer/lambda$8$Type',1807);feb(1808,1,nwe,Poc);_.Mb=function Qoc(a){return Mnc(),RD(a,12).j==(qpd(),npd)};var fW=sfb(wBe,'PortRestorer/lambda$9$Type',1808);feb(276,22,{3:1,34:1,22:1,276:1},fpc);var Yoc,Zoc,$oc,_oc,apc,bpc,cpc,dpc;var hW=tfb(wBe,'PortSideAssigner/Target',276,WI,hpc,gpc);var ipc;feb(1791,1,{},kpc);_.Kb=function lpc(a){return CDb(new SDb(null,new Swb(RD(a,105).j,16)),new Cpc)};var iW=sfb(wBe,'PortSideAssigner/lambda$1$Type',1791);feb(1792,1,{},mpc);_.Kb=function npc(a){return RD(a,113).d};var jW=sfb(wBe,'PortSideAssigner/lambda$2$Type',1792);feb(1793,1,Qve,opc);_.Cd=function ppc(a){Q3b(RD(a,12),(qpd(),Yod))};var kW=sfb(wBe,'PortSideAssigner/lambda$3$Type',1793);feb(1794,1,{},qpc);_.Kb=function rpc(a){return RD(a,113).d};var lW=sfb(wBe,'PortSideAssigner/lambda$4$Type',1794);feb(1795,1,Qve,spc);_.Cd=function tpc(a){Voc(this.a,RD(a,12))};var mW=sfb(wBe,'PortSideAssigner/lambda$5$Type',1795);feb(1796,1,fye,upc);_.Ne=function vpc(a,b){return Woc(RD(a,105),RD(b,105))};_.Fb=function wpc(a){return this===a};_.Oe=function xpc(){return new Frb(this)};var nW=sfb(wBe,'PortSideAssigner/lambda$6$Type',1796);feb(1797,1,fye,ypc);_.Ne=function zpc(a,b){return Xoc(RD(a,113),RD(b,113))};_.Fb=function Apc(a){return this===a};_.Oe=function Bpc(){return new Frb(this)};var oW=sfb(wBe,'PortSideAssigner/lambda$7$Type',1797);feb(820,1,nwe,Cpc);_.Mb=function Dpc(a){return RD(a,113).c};var pW=sfb(wBe,'PortSideAssigner/lambda$8$Type',820);feb(2108,1,{});var qW=sfb(xBe,'AbstractSelfLoopRouter',2108);feb(1816,1,fye,Mpc);_.Ne=function Npc(a,b){return Kpc(RD(a,105),RD(b,105))};_.Fb=function Opc(a){return this===a};_.Oe=function Ppc(){return new Frb(this)};var rW=sfb(xBe,Vye,1816);feb(1817,1,fye,Qpc);_.Ne=function Rpc(a,b){return Lpc(RD(a,105),RD(b,105))};_.Fb=function Spc(a){return this===a};_.Oe=function Tpc(){return new Frb(this)};var sW=sfb(xBe,Wye,1817);feb(1856,2108,{},dqc);_.ng=function eqc(a,b,c){return c};var uW=sfb(xBe,'OrthogonalSelfLoopRouter',1856);feb(1858,1,Qve,fqc);_.Cd=function gqc(a){cqc(this.b,this.a,RD(a,8))};var tW=sfb(xBe,'OrthogonalSelfLoopRouter/lambda$0$Type',1858);feb(1857,1856,{},jqc);_.ng=function kqc(a,b,c){var d,e;d=a.c.d;hu(c,0,$id(ajd(d.n),d.a));e=a.d.d;Mub(c,$id(ajd(e.n),e.a));return hqc(c)};var vW=sfb(xBe,'PolylineSelfLoopRouter',1857);feb(1812,1,{},yqc);_.a=null;var lqc;var zW=sfb(xBe,'RoutingDirector',1812);feb(1813,1,fye,Aqc);_.Ne=function Bqc(a,b){return zqc(RD(a,113),RD(b,113))};_.Fb=function Cqc(a){return this===a};_.Oe=function Dqc(){return new Frb(this)};var wW=sfb(xBe,'RoutingDirector/lambda$0$Type',1813);feb(1814,1,{},Eqc);_.Kb=function Fqc(a){return mqc(),RD(a,105).j};var xW=sfb(xBe,'RoutingDirector/lambda$1$Type',1814);feb(1815,1,Qve,Gqc);_.Cd=function Hqc(a){mqc();RD(a,15).jd(lqc)};var yW=sfb(xBe,'RoutingDirector/lambda$2$Type',1815);feb(1818,1,{},Sqc);var CW=sfb(xBe,'RoutingSlotAssigner',1818);feb(1819,1,nwe,Vqc);_.Mb=function Wqc(a){return Tqc(this.a,RD(a,105))};var AW=sfb(xBe,'RoutingSlotAssigner/lambda$0$Type',1819);feb(1820,1,fye,Xqc);_.Ne=function Yqc(a,b){return Uqc(this.a,RD(a,105),RD(b,105))};_.Fb=function Zqc(a){return this===a};_.Oe=function $qc(){return new Frb(this)};var BW=sfb(xBe,'RoutingSlotAssigner/lambda$1$Type',1820);feb(1859,1856,{},arc);_.ng=function brc(a,b,c){var d,e,f,g;d=Kfb(UD(k2b(a.b.g.b,(yCc(),VBc))));g=new Gjd(cD(WC(l3,1),Nve,8,0,[(f=a.c.d,$id(new sjd(f.n),f.a))]));_qc(a,b,c,g,d);Mub(g,(e=a.d.d,$id(new sjd(e.n),e.a)));return sUc(new wUc(g))};var DW=sfb(xBe,'SplineSelfLoopRouter',1859);feb(586,1,fye,frc,hrc);_.Ne=function irc(a,b){return crc(this,RD(a,10),RD(b,10))};_.Fb=function jrc(a){return this===a};_.Oe=function krc(){return new Frb(this)};var FW=sfb(yBe,'ModelOrderNodeComparator',586);feb(1821,1,nwe,lrc);_.Mb=function mrc(a){return RD(a,12).e.c.length!=0};var EW=sfb(yBe,'ModelOrderNodeComparator/lambda$0$Type',1821);feb(821,1,fye,trc,urc);_.Ne=function vrc(a,b){return prc(this,a,b)};_.Fb=function wrc(a){return this===a};_.Oe=function xrc(){return new Frb(this)};_.b=false;var GW=sfb(yBe,'ModelOrderPortComparator',821);feb(815,1,{},zrc);_.og=function Brc(a,b){var c,d,e,f;e=Arc(b);c=new bnb;f=b.f/e;for(d=1;d<e;++d){Rmb(c,sgb(Ydb(Hdb($wnd.Math.round(d*f)))))}return c};_.pg=function Crc(){return false};var HW=sfb(zBe,'ARDCutIndexHeuristic',815);feb(1544,1,QAe,Hrc);_.Kf=function Irc(a,b){Grc(RD(a,36),b)};var KW=sfb(zBe,'BreakingPointInserter',1544);feb(313,1,{313:1},Jrc);_.Ib=function Mrc(){var a;a=new bib;a.a+='BPInfo[';a.a+='\n\tstart=';Yhb(a,this.i);a.a+='\n\tend=';Yhb(a,this.a);a.a+='\n\tnodeStartEdge=';Yhb(a,this.e);a.a+='\n\tstartEndEdge=';Yhb(a,this.j);a.a+='\n\toriginalEdge=';Yhb(a,this.f);a.a+='\n\tstartInLayerDummy=';Yhb(a,this.k);a.a+='\n\tstartInLayerEdge=';Yhb(a,this.n);a.a+='\n\tendInLayerDummy=';Yhb(a,this.b);a.a+='\n\tendInLayerEdge=';Yhb(a,this.c);return a.a};var IW=sfb(zBe,'BreakingPointInserter/BPInfo',313);feb(661,1,{661:1},Trc);_.a=false;_.b=0;_.c=0;var JW=sfb(zBe,'BreakingPointInserter/Cut',661);feb(1545,1,QAe,bsc);_.Kf=function csc(a,b){_rc(RD(a,36),b)};var NW=sfb(zBe,'BreakingPointProcessor',1545);feb(1546,1,nwe,dsc);_.Mb=function esc(a){return Krc(RD(a,10))};var LW=sfb(zBe,'BreakingPointProcessor/0methodref$isEnd$Type',1546);feb(1547,1,nwe,fsc);_.Mb=function gsc(a){return Lrc(RD(a,10))};var MW=sfb(zBe,'BreakingPointProcessor/1methodref$isStart$Type',1547);feb(1548,1,QAe,ksc);_.Kf=function lsc(a,b){isc(this,RD(a,36),b)};var PW=sfb(zBe,'BreakingPointRemover',1548);feb(1549,1,Qve,msc);_.Cd=function nsc(a){RD(a,131).k=true};var OW=sfb(zBe,'BreakingPointRemover/lambda$0$Type',1549);feb(811,1,{},ysc);_.b=0;_.e=0;_.f=0;_.j=0;var VW=sfb(zBe,'GraphStats',811);feb(812,1,{},Asc);_.Ve=function Bsc(a,b){return $wnd.Math.max(Kfb(UD(a)),Kfb(UD(b)))};var QW=sfb(zBe,'GraphStats/0methodref$max$Type',812);feb(813,1,{},Csc);_.Ve=function Dsc(a,b){return $wnd.Math.max(Kfb(UD(a)),Kfb(UD(b)))};var RW=sfb(zBe,'GraphStats/2methodref$max$Type',813);feb(1726,1,{},Esc);_.Ve=function Fsc(a,b){return zsc(UD(a),UD(b))};var SW=sfb(zBe,'GraphStats/lambda$1$Type',1726);feb(1727,1,{},Gsc);_.Kb=function Hsc(a){return ssc(this.a,RD(a,30))};var TW=sfb(zBe,'GraphStats/lambda$2$Type',1727);feb(1728,1,{},Isc);_.Kb=function Jsc(a){return rsc(this.a,RD(a,30))};var UW=sfb(zBe,'GraphStats/lambda$6$Type',1728);feb(814,1,{},Ksc);_.og=function Lsc(a,b){var c;c=RD(mQb(a,(yCc(),pCc)),15);return c?c:(yob(),yob(),vob)};_.pg=function Msc(){return false};var WW=sfb(zBe,'ICutIndexCalculator/ManualCutIndexCalculator',814);feb(816,1,{},Nsc);_.og=function Osc(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;u=(b.n==null&&vsc(b),b.n);i=(b.d==null&&vsc(b),b.d);t=$C(iE,vxe,28,u.length,15,1);t[0]=u[0];r=u[0];for(j=1;j<u.length;j++){t[j]=t[j-1]+u[j];r+=u[j]}e=Arc(b)-1;g=RD(mQb(a,(yCc(),qCc)),17).a;d=pxe;c=new bnb;for(m=$wnd.Math.max(0,e-g);m<=$wnd.Math.min(b.f-1,e+g);m++){p=r/(m+1);q=0;k=1;f=new bnb;s=pxe;l=0;h=0;o=i[0];if(m==0){s=r;h=(b.g==null&&(b.g=qsc(b,new Csc)),Kfb(b.g))}else{while(k<b.f){if(t[k-1]-q>=p){Rmb(f,sgb(k));s=$wnd.Math.max(s,t[k-1]-l);h+=o;q+=t[k-1]-q;l=t[k-1];o=i[k]}o=$wnd.Math.max(o,i[k]);++k}h+=o}n=$wnd.Math.min(1/s,1/b.b/h);if(n>d){d=n;c=f}}return c};_.pg=function Psc(){return false};var XW=sfb(zBe,'MSDCutIndexHeuristic',816);feb(1683,1,QAe,Ssc);_.Kf=function Tsc(a,b){Rsc(RD(a,36),b)};var YW=sfb(zBe,'SingleEdgeGraphWrapper',1683);feb(232,22,{3:1,34:1,22:1,232:1},ctc);var Xsc,Ysc,Zsc,$sc,_sc,atc;var ZW=tfb(ABe,'CenterEdgeLabelPlacementStrategy',232,WI,etc,dtc);var ftc;feb(431,22,{3:1,34:1,22:1,431:1},ktc);var htc,itc;var $W=tfb(ABe,'ConstraintCalculationStrategy',431,WI,mtc,ltc);var ntc;feb(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},utc);_.dg=function wtc(){return ttc(this)};_.qg=function vtc(){return ttc(this)};var ptc,qtc,rtc;var _W=tfb(ABe,'CrossingMinimizationStrategy',322,WI,ytc,xtc);var ztc;feb(351,22,{3:1,34:1,22:1,351:1},Ftc);var Btc,Ctc,Dtc;var aX=tfb(ABe,'CuttingStrategy',351,WI,Htc,Gtc);var Itc;feb(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},Rtc);_.dg=function Ttc(){return Qtc(this)};_.qg=function Stc(){return Qtc(this)};var Ktc,Ltc,Mtc,Ntc,Otc;var bX=tfb(ABe,'CycleBreakingStrategy',348,WI,Vtc,Utc);var Wtc;feb(428,22,{3:1,34:1,22:1,428:1},_tc);var Ytc,Ztc;var cX=tfb(ABe,'DirectionCongruency',428,WI,buc,auc);var cuc;feb(459,22,{3:1,34:1,22:1,459:1},iuc);var euc,fuc,guc;var dX=tfb(ABe,'EdgeConstraint',459,WI,kuc,juc);var luc;feb(283,22,{3:1,34:1,22:1,283:1},vuc);var nuc,ouc,puc,quc,ruc,suc;var eX=tfb(ABe,'EdgeLabelSideSelection',283,WI,xuc,wuc);var yuc;feb(487,22,{3:1,34:1,22:1,487:1},Duc);var Auc,Buc;var fX=tfb(ABe,'EdgeStraighteningStrategy',487,WI,Fuc,Euc);var Guc;feb(281,22,{3:1,34:1,22:1,281:1},Puc);var Iuc,Juc,Kuc,Luc,Muc,Nuc;var gX=tfb(ABe,'FixedAlignment',281,WI,Ruc,Quc);var Suc;feb(282,22,{3:1,34:1,22:1,282:1},_uc);var Uuc,Vuc,Wuc,Xuc,Yuc,Zuc;var hX=tfb(ABe,'GraphCompactionStrategy',282,WI,bvc,avc);var cvc;feb(259,22,{3:1,34:1,22:1,259:1},pvc);var evc,fvc,gvc,hvc,ivc,jvc,kvc,lvc,mvc,nvc;var iX=tfb(ABe,'GraphProperties',259,WI,rvc,qvc);var svc;feb(298,22,{3:1,34:1,22:1,298:1},yvc);var uvc,vvc,wvc;var jX=tfb(ABe,'GreedySwitchType',298,WI,Avc,zvc);var Bvc;feb(311,22,{3:1,34:1,22:1,311:1},Hvc);var Dvc,Evc,Fvc;var kX=tfb(ABe,'InLayerConstraint',311,WI,Jvc,Ivc);var Kvc;feb(429,22,{3:1,34:1,22:1,429:1},Pvc);var Mvc,Nvc;var lX=tfb(ABe,'InteractiveReferencePoint',429,WI,Rvc,Qvc);var Svc;var Uvc,Vvc,Wvc,Xvc,Yvc,Zvc,$vc,_vc,awc,bwc,cwc,dwc,ewc,fwc,gwc,hwc,iwc,jwc,kwc,lwc,mwc,nwc,owc,pwc,qwc,rwc,swc,twc,uwc,vwc,wwc,xwc,ywc,zwc,Awc,Bwc,Cwc,Dwc,Ewc,Fwc,Gwc,Hwc,Iwc,Jwc,Kwc,Lwc,Mwc,Nwc,Owc,Pwc,Qwc,Rwc,Swc,Twc,Uwc,Vwc,Wwc,Xwc;feb(171,22,{3:1,34:1,22:1,171:1},dxc);var Zwc,$wc,_wc,axc,bxc;var mX=tfb(ABe,'LayerConstraint',171,WI,fxc,exc);var gxc;feb(859,1,Eye,Pzc);_.hf=function Qzc(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,HBe),''),'Direction Congruency'),'Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other.'),Uxc),(kid(),eid)),cX),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,IBe),''),'Feedback Edges'),'Whether feedback edges should be highlighted by routing around the nodes.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JBe),''),'Interactive Reference Point'),'Determines which point of a node is considered by interactive layout phases.'),pyc),eid),lX),xsb(Whd))));zgd(a,JBe,RBe,ryc);zgd(a,JBe,_Be,qyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KBe),''),'Merge Edges'),'Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LBe),''),'Merge Hierarchy-Crossing Edges'),'If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Nhd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MBe),''),'Allow Non-Flow Ports To Switch Sides'),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),false),cid),QI),xsb(Xhd)),cD(WC(qJ,1),Nve,2,6,['org.eclipse.elk.layered.northOrSouthPort']))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NBe),''),'Port Sorting Strategy'),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),azc),eid),xX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OBe),''),'Thoroughness'),'How much effort should be spent to produce a nice layout.'),sgb(7)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PBe),''),'Add Unnecessary Bendpoints'),'Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QBe),''),'Generate Position and Layer IDs'),'If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RBe),'cycleBreaking'),'Cycle Breaking Strategy'),'Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right).'),Sxc),eid),bX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SBe),bDe),'Node Layering Strategy'),'Strategy for node layering.'),Gyc),eid),rX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TBe),bDe),'Layer Constraint'),'Determines a constraint on the placement of the node regarding the layering.'),wyc),eid),mX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UBe),bDe),'Layer Choice Constraint'),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VBe),bDe),'Layer ID'),'Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WBe),cDe),'Upper Bound On Width [MinWidth Layerer]'),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),sgb(4)),gid),bJ),xsb(Whd))));zgd(a,WBe,SBe,zyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XBe),cDe),'Upper Layer Estimation Scaling Factor [MinWidth Layerer]'),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),sgb(2)),gid),bJ),xsb(Whd))));zgd(a,XBe,SBe,Byc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YBe),dDe),'Node Promotion Strategy'),'Reduces number of dummy nodes after layering phase (if possible).'),Eyc),eid),vX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZBe),dDe),'Max Node Promotion Iterations'),'Limits the number of iterations for node promotion.'),sgb(0)),gid),bJ),xsb(Whd))));zgd(a,ZBe,YBe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Be),'layering.coffmanGraham'),'Layer Bound'),'The maximum number of nodes allowed per layer.'),sgb(lve)),gid),bJ),xsb(Whd))));zgd(a,$Be,SBe,tyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Be),eDe),'Crossing Minimization Strategy'),'Strategy for crossing minimization.'),Qxc),eid),_W),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aCe),eDe),'Force Node Model Order'),'The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bCe),eDe),'Hierarchical Sweepiness'),'How likely it is to use cross-hierarchy (1) vs bottom-up (-1).'),0.1),did),VI),xsb(Whd))));zgd(a,bCe,fDe,Ixc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,cCe),eDe),'Semi-Interactive Crossing Minimization'),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),false),cid),QI),xsb(Whd))));zgd(a,cCe,_Be,Oxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dCe),eDe),'In Layer Predecessor of'),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),iid),qJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eCe),eDe),'In Layer Successor of'),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),iid),qJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fCe),eDe),'Position Choice Constraint'),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gCe),eDe),'Position ID'),'Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hCe),gDe),'Greedy Switch Activation Threshold'),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),sgb(40)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iCe),gDe),'Greedy Switch Crossing Minimization'),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),Fxc),eid),jX),xsb(Whd))));zgd(a,iCe,_Be,Gxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jCe),'crossingMinimization.greedySwitchHierarchical'),'Greedy Switch Crossing Minimization (hierarchical)'),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),Bxc),eid),jX),xsb(Whd))));zgd(a,jCe,_Be,Cxc);zgd(a,jCe,fDe,Dxc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kCe),hDe),'Node Placement Strategy'),'Strategy for node placement.'),$yc),eid),uX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,lCe),hDe),'Favor Straight Edges Over Balancing'),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),cid),QI),xsb(Whd))));zgd(a,lCe,kCe,Qyc);zgd(a,lCe,kCe,Ryc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mCe),iDe),'BK Edge Straightening'),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),Kyc),eid),fX),xsb(Whd))));zgd(a,mCe,kCe,Lyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nCe),iDe),'BK Fixed Alignment'),'Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four.'),Nyc),eid),gX),xsb(Whd))));zgd(a,nCe,kCe,Oyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oCe),'nodePlacement.linearSegments'),'Linear Segments Deflection Dampening'),'Dampens the movement of nodes to keep the diagram from getting too large.'),0.3),did),VI),xsb(Whd))));zgd(a,oCe,kCe,Tyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,pCe),'nodePlacement.networkSimplex'),'Node Flexibility'),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),eid),tX),xsb(Vhd))));zgd(a,pCe,kCe,Yyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qCe),'nodePlacement.networkSimplex.nodeFlexibility'),'Node Flexibility Default'),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),Wyc),eid),tX),xsb(Whd))));zgd(a,qCe,kCe,Xyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rCe),jDe),'Self-Loop Distribution'),'Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE.'),ayc),eid),zX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,sCe),jDe),'Self-Loop Ordering'),'Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE.'),cyc),eid),AX),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,tCe),'edgeRouting.splines'),'Spline Routing Mode'),'Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes.'),eyc),eid),CX),xsb(Whd))));zgd(a,tCe,kDe,fyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,uCe),'edgeRouting.splines.sloppy'),'Sloppy Spline Layer Spacing Factor'),'Spacing factor for routing area between layers when using sloppy spline routing.'),0.2),did),VI),xsb(Whd))));zgd(a,uCe,kDe,hyc);zgd(a,uCe,tCe,iyc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vCe),'edgeRouting.polyline'),'Sloped Edge Zone Width'),'Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer.'),2),did),VI),xsb(Whd))));zgd(a,vCe,kDe,$xc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,wCe),lDe),'Spacing Base Value'),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xCe),lDe),'Edge Node Between Layers Spacing'),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yCe),lDe),'Edge Edge Between Layer Spacing'),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zCe),lDe),'Node Node Between Layers Spacing'),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ACe),mDe),'Direction Priority'),'Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,BCe),mDe),'Shortness Priority'),'Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CCe),mDe),'Straightness Priority'),'Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement.'),sgb(0)),gid),bJ),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,DCe),nDe),qze),'Tries to further compact components (disconnected sub-graphs).'),false),cid),QI),xsb(Whd))));zgd(a,DCe,cAe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ECe),oDe),'Post Compaction Strategy'),pDe),nxc),eid),hX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,FCe),oDe),'Post Compaction Constraint Calculation'),pDe),lxc),eid),$W),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,GCe),qDe),'High Degree Node Treatment'),'Makes room around high degree nodes to place leafs and trees.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,HCe),qDe),'High Degree Node Threshold'),'Whether a node is considered to have a high degree.'),sgb(16)),gid),bJ),xsb(Whd))));zgd(a,HCe,GCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ICe),qDe),'High Degree Node Maximum Tree Height'),'Maximum height of a subtree connected to a high degree node to be moved to separate layers.'),sgb(5)),gid),bJ),xsb(Whd))));zgd(a,ICe,GCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JCe),rDe),'Graph Wrapping Strategy'),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),Gzc),eid),EX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KCe),rDe),'Additional Wrapped Edges Spacing'),'To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing.'),10),did),VI),xsb(Whd))));zgd(a,KCe,JCe,lzc);zgd(a,KCe,JCe,mzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LCe),rDe),'Correction Factor for Wrapping'),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),did),VI),xsb(Whd))));zgd(a,LCe,JCe,ozc);zgd(a,LCe,JCe,pzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MCe),sDe),'Cutting Strategy'),'The strategy by which the layer indexes are determined at which the layering crumbles into chunks.'),wzc),eid),aX),xsb(Whd))));zgd(a,MCe,JCe,xzc);zgd(a,MCe,JCe,yzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,NCe),sDe),'Manually Specified Cuts'),'Allows the user to specify her own cuts for a certain graph.'),hid),QK),xsb(Whd))));zgd(a,NCe,MCe,rzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OCe),'wrapping.cutting.msd'),'MSD Freedom'),'The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts.'),tzc),gid),bJ),xsb(Whd))));zgd(a,OCe,MCe,uzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PCe),tDe),'Validification Strategy'),'When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed.'),Lzc),eid),DX),xsb(Whd))));zgd(a,PCe,JCe,Mzc);zgd(a,PCe,JCe,Nzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,QCe),tDe),'Valid Indices for Wrapping'),null),hid),QK),xsb(Whd))));zgd(a,QCe,JCe,Izc);zgd(a,QCe,JCe,Jzc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RCe),uDe),'Improve Cuts'),'For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought.'),true),cid),QI),xsb(Whd))));zgd(a,RCe,JCe,Czc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SCe),uDe),'Distance Penalty When Improving Cuts'),null),2),did),VI),xsb(Whd))));zgd(a,SCe,JCe,Azc);zgd(a,SCe,RCe,true);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TCe),uDe),'Improve Wrapped Edges'),'The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges.'),true),cid),QI),xsb(Whd))));zgd(a,TCe,JCe,Ezc);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UCe),vDe),'Edge Label Side Selection'),'Method to decide on edge label sides.'),Yxc),eid),eX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VCe),vDe),'Edge Center Label Placement Strategy'),'Determines in which layer center labels of long edges should be placed.'),Wxc),eid),ZW),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WCe),wDe),'Consider Model Order'),'Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.'),xxc),eid),wX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XCe),wDe),'Consider Port Order'),'If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YCe),wDe),'No Model Order'),'Set on a node to not set a model order for this node even though it is a real node.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZCe),wDe),'Consider Model Order for Components'),'If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected.'),pxc),eid),CQ),xsb(Whd))));zgd(a,ZCe,cAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Ce),wDe),'Long Edge Ordering Strategy'),'Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout.'),txc),eid),sX),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Ce),wDe),'Crossing Counter Node Order Influence'),'Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0).'),0),did),VI),xsb(Whd))));zgd(a,_Ce,WCe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aDe),wDe),'Crossing Counter Port Order Influence'),'Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0).'),0),did),VI),xsb(Whd))));zgd(a,aDe,WCe,null);zCc((new ACc,a))};var ixc,jxc,kxc,lxc,mxc,nxc,oxc,pxc,qxc,rxc,sxc,txc,uxc,vxc,wxc,xxc,yxc,zxc,Axc,Bxc,Cxc,Dxc,Exc,Fxc,Gxc,Hxc,Ixc,Jxc,Kxc,Lxc,Mxc,Nxc,Oxc,Pxc,Qxc,Rxc,Sxc,Txc,Uxc,Vxc,Wxc,Xxc,Yxc,Zxc,$xc,_xc,ayc,byc,cyc,dyc,eyc,fyc,gyc,hyc,iyc,jyc,kyc,lyc,myc,nyc,oyc,pyc,qyc,ryc,syc,tyc,uyc,vyc,wyc,xyc,yyc,zyc,Ayc,Byc,Cyc,Dyc,Eyc,Fyc,Gyc,Hyc,Iyc,Jyc,Kyc,Lyc,Myc,Nyc,Oyc,Pyc,Qyc,Ryc,Syc,Tyc,Uyc,Vyc,Wyc,Xyc,Yyc,Zyc,$yc,_yc,azc,bzc,czc,dzc,ezc,fzc,gzc,hzc,izc,jzc,kzc,lzc,mzc,nzc,ozc,pzc,qzc,rzc,szc,tzc,uzc,vzc,wzc,xzc,yzc,zzc,Azc,Bzc,Czc,Dzc,Ezc,Fzc,Gzc,Hzc,Izc,Jzc,Kzc,Lzc,Mzc,Nzc;var nX=sfb(ABe,'LayeredMetaDataProvider',859);feb(998,1,Eye,ACc);_.hf=function BCc(a){zCc(a)};var Rzc,Szc,Tzc,Uzc,Vzc,Wzc,Xzc,Yzc,Zzc,$zc,_zc,aAc,bAc,cAc,dAc,eAc,fAc,gAc,hAc,iAc,jAc,kAc,lAc,mAc,nAc,oAc,pAc,qAc,rAc,sAc,tAc,uAc,vAc,wAc,xAc,yAc,zAc,AAc,BAc,CAc,DAc,EAc,FAc,GAc,HAc,IAc,JAc,KAc,LAc,MAc,NAc,OAc,PAc,QAc,RAc,SAc,TAc,UAc,VAc,WAc,XAc,YAc,ZAc,$Ac,_Ac,aBc,bBc,cBc,dBc,eBc,fBc,gBc,hBc,iBc,jBc,kBc,lBc,mBc,nBc,oBc,pBc,qBc,rBc,sBc,tBc,uBc,vBc,wBc,xBc,yBc,zBc,ABc,BBc,CBc,DBc,EBc,FBc,GBc,HBc,IBc,JBc,KBc,LBc,MBc,NBc,OBc,PBc,QBc,RBc,SBc,TBc,UBc,VBc,WBc,XBc,YBc,ZBc,$Bc,_Bc,aCc,bCc,cCc,dCc,eCc,fCc,gCc,hCc,iCc,jCc,kCc,lCc,mCc,nCc,oCc,pCc,qCc,rCc,sCc,tCc,uCc,vCc,wCc,xCc;var pX=sfb(ABe,'LayeredOptions',998);feb(999,1,{},CCc);_.sf=function DCc(){var a;return a=new lXb,a};_.tf=function ECc(a){};var oX=sfb(ABe,'LayeredOptions/LayeredFactory',999);feb(1391,1,{});_.a=0;var FCc;var b4=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder',1391);feb(792,1391,{},RCc);var OCc,PCc;var qX=sfb(ABe,'LayeredSpacings/LayeredSpacingsBuilder',792);feb(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},bDc);_.dg=function dDc(){return aDc(this)};_.qg=function cDc(){return aDc(this)};var SCc,TCc,UCc,VCc,WCc,XCc,YCc,ZCc,$Cc;var rX=tfb(ABe,'LayeringStrategy',265,WI,fDc,eDc);var gDc;feb(390,22,{3:1,34:1,22:1,390:1},nDc);var iDc,jDc,kDc;var sX=tfb(ABe,'LongEdgeOrderingStrategy',390,WI,pDc,oDc);var qDc;feb(203,22,{3:1,34:1,22:1,203:1},yDc);var sDc,tDc,uDc,vDc;var tX=tfb(ABe,'NodeFlexibility',203,WI,BDc,ADc);var CDc;feb(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},LDc);_.dg=function NDc(){return KDc(this)};_.qg=function MDc(){return KDc(this)};var EDc,FDc,GDc,HDc,IDc;var uX=tfb(ABe,'NodePlacementStrategy',323,WI,PDc,ODc);var QDc;feb(243,22,{3:1,34:1,22:1,243:1},bEc);var SDc,TDc,UDc,VDc,WDc,XDc,YDc,ZDc,$Dc,_Dc;var vX=tfb(ABe,'NodePromotionStrategy',243,WI,dEc,cEc);var eEc;feb(284,22,{3:1,34:1,22:1,284:1},lEc);var gEc,hEc,iEc,jEc;var wX=tfb(ABe,'OrderingStrategy',284,WI,nEc,mEc);var oEc;feb(430,22,{3:1,34:1,22:1,430:1},tEc);var qEc,rEc;var xX=tfb(ABe,'PortSortingStrategy',430,WI,vEc,uEc);var wEc;feb(462,22,{3:1,34:1,22:1,462:1},CEc);var yEc,zEc,AEc;var yX=tfb(ABe,'PortType',462,WI,EEc,DEc);var FEc;feb(387,22,{3:1,34:1,22:1,387:1},LEc);var HEc,IEc,JEc;var zX=tfb(ABe,'SelfLoopDistributionStrategy',387,WI,NEc,MEc);var OEc;feb(349,22,{3:1,34:1,22:1,349:1},UEc);var QEc,REc,SEc;var AX=tfb(ABe,'SelfLoopOrderingStrategy',349,WI,WEc,VEc);var XEc;feb(312,1,{312:1},gFc);var BX=sfb(ABe,'Spacings',312);feb(350,22,{3:1,34:1,22:1,350:1},mFc);var iFc,jFc,kFc;var CX=tfb(ABe,'SplineRoutingMode',350,WI,oFc,nFc);var pFc;feb(352,22,{3:1,34:1,22:1,352:1},vFc);var rFc,sFc,tFc;var DX=tfb(ABe,'ValidifyStrategy',352,WI,xFc,wFc);var yFc;feb(388,22,{3:1,34:1,22:1,388:1},EFc);var AFc,BFc,CFc;var EX=tfb(ABe,'WrappingStrategy',388,WI,GFc,FFc);var HFc;feb(1398,1,nEe,NFc);_.rg=function OFc(a){return RD(a,36),JFc};_.Kf=function PFc(a,b){MFc(this,RD(a,36),b)};var JFc;var FX=sfb(oEe,'DepthFirstCycleBreaker',1398);feb(793,1,nEe,UFc);_.rg=function WFc(a){return RD(a,36),QFc};_.Kf=function XFc(a,b){SFc(this,RD(a,36),b)};_.sg=function VFc(a){return RD(Vmb(a,Jwb(this.d,a.c.length)),10)};var QFc;var GX=sfb(oEe,'GreedyCycleBreaker',793);feb(1401,793,nEe,YFc);_.sg=function ZFc(a){var b,c,d,e;e=null;b=lve;for(d=new Anb(a);d.a<d.c.c.length;){c=RD(ynb(d),10);if(nQb(c,(Ywc(),zwc))&&RD(mQb(c,zwc),17).a<b){b=RD(mQb(c,zwc),17).a;e=c}}if(!e){return RD(Vmb(a,Jwb(this.d,a.c.length)),10)}return e};var HX=sfb(oEe,'GreedyModelOrderCycleBreaker',1401);feb(1399,1,nEe,cGc);_.rg=function dGc(a){return RD(a,36),$Fc};_.Kf=function eGc(a,b){bGc(this,RD(a,36),b)};var $Fc;var IX=sfb(oEe,'InteractiveCycleBreaker',1399);feb(1400,1,nEe,jGc);_.rg=function kGc(a){return RD(a,36),fGc};_.Kf=function lGc(a,b){iGc(this,RD(a,36),b)};_.a=0;_.b=0;var fGc;var JX=sfb(oEe,'ModelOrderCycleBreaker',1400);feb(1413,1,nEe,pGc);_.rg=function qGc(a){return RD(a,36),mGc};_.Kf=function sGc(a,b){oGc(this,RD(a,36),b)};var mGc;var LX=sfb(pEe,'BreadthFirstModelOrderLayerer',1413);feb(1414,1,fye,tGc);_.Ne=function uGc(a,b){return rGc(RD(a,10),RD(b,10))};_.Fb=function vGc(a){return this===a};_.Oe=function wGc(){return new Frb(this)};var KX=sfb(pEe,'BreadthFirstModelOrderLayerer/lambda$0$Type',1414);feb(1404,1,nEe,GGc);_.rg=function HGc(a){return RD(a,36),xGc};_.Kf=function IGc(a,b){EGc(this,RD(a,36),b)};var xGc;var OX=sfb(pEe,'CoffmanGrahamLayerer',1404);feb(1405,1,fye,JGc);_.Ne=function KGc(a,b){return AGc(this.a,RD(a,10),RD(b,10))};_.Fb=function LGc(a){return this===a};_.Oe=function MGc(){return new Frb(this)};var MX=sfb(pEe,'CoffmanGrahamLayerer/0methodref$compareNodesInTopo$Type',1405);feb(1406,1,fye,NGc);_.Ne=function OGc(a,b){return DGc(this.a,RD(a,10),RD(b,10))};_.Fb=function PGc(a){return this===a};_.Oe=function QGc(){return new Frb(this)};var NX=sfb(pEe,'CoffmanGrahamLayerer/lambda$1$Type',1406);feb(1415,1,nEe,YGc);_.rg=function ZGc(a){return RD(a,36),RGc};_.Kf=function _Gc(a,b){XGc(this,RD(a,36),b)};_.c=0;_.e=0;var RGc;var QX=sfb(pEe,'DepthFirstModelOrderLayerer',1415);feb(1416,1,fye,aHc);_.Ne=function bHc(a,b){return $Gc(RD(a,10),RD(b,10))};_.Fb=function cHc(a){return this===a};_.Oe=function dHc(){return new Frb(this)};var PX=sfb(pEe,'DepthFirstModelOrderLayerer/lambda$0$Type',1416);feb(1407,1,nEe,gHc);_.rg=function hHc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),Ebc)),oXb,Nbc),pXb,Mbc)};_.Kf=function iHc(a,b){fHc(RD(a,36),b)};var SX=sfb(pEe,'InteractiveLayerer',1407);feb(578,1,{578:1},jHc);_.a=0;_.c=0;var RX=sfb(pEe,'InteractiveLayerer/LayerSpan',578);feb(1403,1,nEe,pHc);_.rg=function qHc(a){return RD(a,36),kHc};_.Kf=function rHc(a,b){mHc(this,RD(a,36),b)};var kHc;var TX=sfb(pEe,'LongestPathLayerer',1403);feb(1412,1,nEe,xHc);_.rg=function yHc(a){return RD(a,36),sHc};_.Kf=function zHc(a,b){uHc(this,RD(a,36),b)};var sHc;var UX=sfb(pEe,'LongestPathSourceLayerer',1412);feb(1410,1,nEe,IHc);_.rg=function JHc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)};_.Kf=function KHc(a,b){GHc(this,RD(a,36),b)};_.a=0;_.b=0;_.d=0;var AHc,BHc;var WX=sfb(pEe,'MinWidthLayerer',1410);feb(1411,1,fye,MHc);_.Ne=function NHc(a,b){return LHc(this,RD(a,10),RD(b,10))};_.Fb=function OHc(a){return this===a};_.Oe=function PHc(){return new Frb(this)};var VX=sfb(pEe,'MinWidthLayerer/MinOutgoingEdgesComparator',1411);feb(1402,1,nEe,XHc);_.rg=function YHc(a){return RD(a,36),QHc};_.Kf=function ZHc(a,b){WHc(this,RD(a,36),b)};var QHc;var XX=sfb(pEe,'NetworkSimplexLayerer',1402);feb(1408,1,nEe,jIc);_.rg=function kIc(a){return RD(a,36),pfd(pfd(pfd(new ufd,(sXb(),nXb),(hcc(),obc)),oXb,Nbc),pXb,Mbc)};_.Kf=function lIc(a,b){gIc(this,RD(a,36),b)};_.d=0;_.f=0;_.g=0;_.i=0;_.s=0;_.t=0;_.u=0;var ZX=sfb(pEe,'StretchWidthLayerer',1408);feb(1409,1,fye,nIc);_.Ne=function oIc(a,b){return mIc(RD(a,10),RD(b,10))};_.Fb=function pIc(a){return this===a};_.Oe=function qIc(){return new Frb(this)};var YX=sfb(pEe,'StretchWidthLayerer/1',1409);feb(413,1,qEe);_.gg=function FIc(a,b,c,d,e,f){};_.ug=function DIc(a,b,c){return wIc(this,a,b,c)};_.fg=function EIc(){this.g=$C(jE,rEe,28,this.d,15,1);this.f=$C(jE,rEe,28,this.d,15,1)};_.hg=function GIc(a,b){this.e[a]=$C(kE,Pwe,28,b[a].length,15,1)};_.ig=function HIc(a,b,c){var d;d=c[a][b];d.p=b;this.e[a][b]=b};_.jg=function IIc(a,b,c,d){RD(Vmb(d[a][b].j,c),12).p=this.d++};_.b=0;_.c=0;_.d=0;var _X=sfb(sEe,'AbstractBarycenterPortDistributor',413);feb(1698,1,fye,JIc);_.Ne=function KIc(a,b){return zIc(this.a,RD(a,12),RD(b,12))};_.Fb=function LIc(a){return this===a};_.Oe=function MIc(){return new Frb(this)};var $X=sfb(sEe,'AbstractBarycenterPortDistributor/lambda$0$Type',1698);feb(832,1,uBe,UIc);_.gg=function XIc(a,b,c,d,e,f){};_.ig=function ZIc(a,b,c){};_.jg=function $Ic(a,b,c,d){};_.eg=function VIc(){return false};_.fg=function WIc(){this.c=this.e.a;this.g=this.f.g};_.hg=function YIc(a,b){b[a][0].c.p=a};_.kg=function _Ic(){return false};_.vg=function aJc(a,b,c,d){if(c){RIc(this,a)}else{OIc(this,a,d);PIc(this,a,b)}if(a.c.length>1){Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),(yCc(),eAc))))?wLc(a,this.d,RD(this,669)):(yob(),_mb(a,this.d));nJc(this.e,a)}};_.lg=function bJc(a,b,c,d){var e,f,g,h,i,j,k;if(b!=SIc(c,a.length)){f=a[b-(c?1:-1)];sIc(this.f,f,c?(BEc(),zEc):(BEc(),yEc))}e=a[b][0];k=!d||e.k==(r3b(),m3b);j=dv(a[b]);this.vg(j,k,false,c);g=0;for(i=new Anb(j);i.a<i.c.c.length;){h=RD(ynb(i),10);a[b][g++]=h}return false};_.mg=function cJc(a,b){var c,d,e,f,g;g=SIc(b,a.length);f=dv(a[g]);this.vg(f,false,true,b);c=0;for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),10);a[g][c++]=d}return false};var cY=sfb(sEe,'BarycenterHeuristic',832);feb(667,1,{667:1},dJc);_.Ib=function eJc(){return 'BarycenterState [node='+this.c+', summedWeight='+this.d+', degree='+this.b+', barycenter='+this.a+', visited='+this.e+']'};_.b=0;_.d=0;_.e=false;var aY=sfb(sEe,'BarycenterHeuristic/BarycenterState',667);feb(1865,1,fye,fJc);_.Ne=function gJc(a,b){return QIc(this.a,RD(a,10),RD(b,10))};_.Fb=function hJc(a){return this===a};_.Oe=function iJc(){return new Frb(this)};var bY=sfb(sEe,'BarycenterHeuristic/lambda$0$Type',1865);feb(831,1,uBe,qJc);_.fg=function rJc(){};_.gg=function sJc(a,b,c,d,e,f){};_.jg=function vJc(a,b,c,d){};_.hg=function tJc(a,b){this.a[a]=$C(aY,{3:1,4:1,5:1,2117:1},667,b[a].length,0,1);this.b[a]=$C(dY,{3:1,4:1,5:1,2118:1},239,b[a].length,0,1)};_.ig=function uJc(a,b,c){mJc(this,c[a][b],true)};_.c=false;var fY=sfb(sEe,'ForsterConstraintResolver',831);feb(239,1,{239:1},yJc,zJc);_.Ib=function AJc(){var a,b;b=new bib;b.a+='[';for(a=0;a<this.d.length;a++){Zhb(b,i3b(this.d[a]));pJc(this.g,this.d[0]).a!=null&&Zhb(Zhb((b.a+='<',b),Pfb(pJc(this.g,this.d[0]).a)),'>');a<this.d.length-1&&(b.a+=pve,b)}return (b.a+=']',b).a};_.a=0;_.c=0;_.f=0;var dY=sfb(sEe,'ForsterConstraintResolver/ConstraintGroup',239);feb(1860,1,Qve,BJc);_.Cd=function CJc(a){mJc(this.a,RD(a,10),false)};var eY=sfb(sEe,'ForsterConstraintResolver/lambda$0$Type',1860);feb(219,1,{219:1,230:1},FJc);_.gg=function HJc(a,b,c,d,e,f){};_.hg=function IJc(a,b){};_.fg=function GJc(){this.r=$C(kE,Pwe,28,this.n,15,1)};_.ig=function JJc(a,b,c){var d,e;e=c[a][b];d=e.e;!!d&&Rmb(this.b,d)};_.jg=function KJc(a,b,c,d){++this.n};_.Ib=function LJc(){return Inb(this.e,new _sb)};_.g=false;_.i=false;_.n=0;_.s=false;var gY=sfb(sEe,'GraphInfoHolder',219);feb(1905,1,uBe,PJc);_.gg=function SJc(a,b,c,d,e,f){};_.hg=function TJc(a,b){};_.jg=function VJc(a,b,c,d){};_.ug=function QJc(a,b,c){c&&b>0?(pMc(this.a,a[b-1],a[b]),undefined):!c&&b<a.length-1?(pMc(this.a,a[b],a[b+1]),undefined):rMc(this.a,a[b],c?(qpd(),ppd):(qpd(),Xod));return MJc(this,a,b,c)};_.fg=function RJc(){this.d=$C(kE,Pwe,28,this.c,15,1);this.a=new DMc(this.d)};_.ig=function UJc(a,b,c){var d;d=c[a][b];this.c+=d.j.c.length};_.c=0;var hY=sfb(sEe,'GreedyPortDistributor',1905);feb(1421,1,nEe,aKc);_.rg=function bKc(a){return ZJc(RD(a,36))};_.Kf=function cKc(a,b){_Jc(RD(a,36),b)};var XJc;var jY=sfb(sEe,'InteractiveCrossingMinimizer',1421);feb(1422,1,fye,eKc);_.Ne=function fKc(a,b){return dKc(this,RD(a,10),RD(b,10))};_.Fb=function gKc(a){return this===a};_.Oe=function hKc(){return new Frb(this)};var iY=sfb(sEe,'InteractiveCrossingMinimizer/1',1422);feb(514,1,{514:1,106:1,47:1},FKc);_.rg=function GKc(a){var b;return RD(a,36),b=vfd(iKc),pfd(b,(sXb(),pXb),(hcc(),Ybc)),b};_.Kf=function HKc(a,b){wKc(this,RD(a,36),b)};_.e=0;var iKc;var pY=sfb(sEe,'LayerSweepCrossingMinimizer',514);feb(1418,1,Qve,IKc);_.Cd=function JKc(a){kKc(this.a,RD(a,219))};var kY=sfb(sEe,'LayerSweepCrossingMinimizer/0methodref$compareDifferentRandomizedLayouts$Type',1418);feb(1419,1,Qve,KKc);_.Cd=function LKc(a){tKc(this.a,RD(a,219))};var lY=sfb(sEe,'LayerSweepCrossingMinimizer/1methodref$minimizeCrossingsNoCounter$Type',1419);feb(1420,1,Qve,MKc);_.Cd=function NKc(a){vKc(this.a,RD(a,219))};var mY=sfb(sEe,'LayerSweepCrossingMinimizer/2methodref$minimizeCrossingsWithCounter$Type',1420);feb(463,22,{3:1,34:1,22:1,463:1},SKc);var OKc,PKc,QKc;var nY=tfb(sEe,'LayerSweepCrossingMinimizer/CrossMinType',463,WI,UKc,TKc);var VKc;feb(1417,1,nwe,XKc);_.Mb=function YKc(a){return jKc(),RD(a,30).a.c.length==0};var oY=sfb(sEe,'LayerSweepCrossingMinimizer/lambda$0$Type',1417);feb(1862,1,uBe,_Kc);_.fg=function aLc(){};_.gg=function bLc(a,b,c,d,e,f){};_.jg=function eLc(a,b,c,d){};_.hg=function cLc(a,b){b[a][0].c.p=a;this.b[a]=$C(qY,{3:1,4:1,5:1,2043:1},668,b[a].length,0,1)};_.ig=function dLc(a,b,c){var d;d=c[a][b];d.p=b;bD(this.b[a],b,new fLc)};var tY=sfb(sEe,'LayerSweepTypeDecider',1862);feb(668,1,{668:1},fLc);_.Ib=function gLc(){return 'NodeInfo [connectedEdges='+this.a+', hierarchicalInfluence='+this.b+', randomInfluence='+this.c+']'};_.a=0;_.b=0;_.c=0;var qY=sfb(sEe,'LayerSweepTypeDecider/NodeInfo',668);feb(1863,1,xye,hLc);_.Lb=function iLc(a){return k4b(new l4b(RD(a,12).b))};_.Fb=function jLc(a){return this===a};_.Mb=function kLc(a){return k4b(new l4b(RD(a,12).b))};var rY=sfb(sEe,'LayerSweepTypeDecider/lambda$0$Type',1863);feb(1864,1,xye,lLc);_.Lb=function mLc(a){return k4b(new l4b(RD(a,12).b))};_.Fb=function nLc(a){return this===a};_.Mb=function oLc(a){return k4b(new l4b(RD(a,12).b))};var sY=sfb(sEe,'LayerSweepTypeDecider/lambda$1$Type',1864);feb(1906,413,qEe,pLc);_.tg=function qLc(a,b,c){var d,e,f,g,h,i,j,k,l;j=this.g;switch(c.g){case 1:{d=0;e=0;for(i=new Anb(a.j);i.a<i.c.c.length;){g=RD(ynb(i),12);if(g.e.c.length!=0){++d;g.j==(qpd(),Yod)&&++e}}f=b+e;l=b+d;for(h=c3b(a,(BEc(),yEc)).Kc();h.Ob();){g=RD(h.Pb(),12);if(g.j==(qpd(),Yod)){j[g.p]=f;--f}else{j[g.p]=l;--l}}return d}case 2:{k=0;for(h=c3b(a,(BEc(),zEc)).Kc();h.Ob();){g=RD(h.Pb(),12);++k;j[g.p]=b+k}return k}default:throw Adb(new _fb);}};var uY=sfb(sEe,'LayerTotalPortDistributor',1906);feb(669,832,{669:1,230:1},vLc);_.vg=function xLc(a,b,c,d){if(c){RIc(this,a)}else{OIc(this,a,d);PIc(this,a,b)}if(a.c.length>1){Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),(yCc(),eAc))))?wLc(a,this.d,this):(yob(),_mb(a,this.d));Heb(TD(mQb(Y2b((tFb(0,a.c.length),RD(a.c[0],10))),eAc)))||nJc(this.e,a)}};var wY=sfb(sEe,'ModelOrderBarycenterHeuristic',669);feb(1866,1,fye,yLc);_.Ne=function zLc(a,b){return tLc(this.a,RD(a,10),RD(b,10))};_.Fb=function ALc(a){return this===a};_.Oe=function BLc(){return new Frb(this)};var vY=sfb(sEe,'ModelOrderBarycenterHeuristic/lambda$0$Type',1866);feb(1423,1,nEe,FLc);_.rg=function GLc(a){var b;return RD(a,36),b=vfd(CLc),pfd(b,(sXb(),pXb),(hcc(),Ybc)),b};_.Kf=function HLc(a,b){ELc((RD(a,36),b))};var CLc;var xY=sfb(sEe,'NoCrossingMinimizer',1423);feb(809,413,qEe,ILc);_.tg=function JLc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n;l=this.g;switch(c.g){case 1:{e=0;f=0;for(k=new Anb(a.j);k.a<k.c.c.length;){i=RD(ynb(k),12);if(i.e.c.length!=0){++e;i.j==(qpd(),Yod)&&++f}}d=1/(e+1);g=b+f*d;n=b+1-d;for(j=c3b(a,(BEc(),yEc)).Kc();j.Ob();){i=RD(j.Pb(),12);if(i.j==(qpd(),Yod)){l[i.p]=g;g-=d}else{l[i.p]=n;n-=d}}break}case 2:{h=0;for(k=new Anb(a.j);k.a<k.c.c.length;){i=RD(ynb(k),12);i.g.c.length==0||++h}d=1/(h+1);m=b+d;for(j=c3b(a,(BEc(),zEc)).Kc();j.Ob();){i=RD(j.Pb(),12);l[i.p]=m;m+=d}break}default:throw Adb(new agb('Port type is undefined'));}return 1};var yY=sfb(sEe,'NodeRelativePortDistributor',809);feb(822,1,{},NLc,OLc);var zY=sfb(sEe,'SweepCopy',822);feb(1861,1,uBe,RLc);_.hg=function ULc(a,b){};_.fg=function SLc(){var a;a=$C(kE,Pwe,28,this.f,15,1);this.d=new jNc(a);this.a=new DMc(a)};_.gg=function TLc(a,b,c,d,e,f){var g;g=RD(Vmb(f[a][b].j,c),12);e.c==g&&e.c.i.c==e.d.i.c&&++this.e[a]};_.ig=function VLc(a,b,c){var d;d=c[a][b];this.c[a]=this.c[a]|d.k==(r3b(),q3b)};_.jg=function WLc(a,b,c,d){var e;e=RD(Vmb(d[a][b].j,c),12);e.p=this.f++;e.g.c.length+e.e.c.length>1&&(e.j==(qpd(),Xod)?(this.b[a]=true):e.j==ppd&&a>0&&(this.b[a-1]=true))};_.f=0;var AY=sfb(tBe,'AllCrossingsCounter',1861);feb(595,1,{},_Lc);_.b=0;_.d=0;var BY=sfb(tBe,'BinaryIndexedTree',595);feb(532,1,{},DMc);var bMc,cMc;var LY=sfb(tBe,'CrossingsCounter',532);feb(1950,1,fye,HMc);_.Ne=function IMc(a,b){return wMc(this.a,RD(a,12),RD(b,12))};_.Fb=function JMc(a){return this===a};_.Oe=function KMc(){return new Frb(this)};var CY=sfb(tBe,'CrossingsCounter/lambda$0$Type',1950);feb(1951,1,fye,LMc);_.Ne=function MMc(a,b){return xMc(this.a,RD(a,12),RD(b,12))};_.Fb=function NMc(a){return this===a};_.Oe=function OMc(){return new Frb(this)};var DY=sfb(tBe,'CrossingsCounter/lambda$1$Type',1951);feb(1952,1,fye,PMc);_.Ne=function QMc(a,b){return yMc(this.a,RD(a,12),RD(b,12))};_.Fb=function RMc(a){return this===a};_.Oe=function SMc(){return new Frb(this)};var EY=sfb(tBe,'CrossingsCounter/lambda$2$Type',1952);feb(1953,1,fye,TMc);_.Ne=function UMc(a,b){return zMc(this.a,RD(a,12),RD(b,12))};_.Fb=function VMc(a){return this===a};_.Oe=function WMc(){return new Frb(this)};var FY=sfb(tBe,'CrossingsCounter/lambda$3$Type',1953);feb(1954,1,Qve,XMc);_.Cd=function YMc(a){EMc(this.a,RD(a,12))};var GY=sfb(tBe,'CrossingsCounter/lambda$4$Type',1954);feb(1955,1,nwe,ZMc);_.Mb=function $Mc(a){return FMc(this.a,RD(a,12))};var HY=sfb(tBe,'CrossingsCounter/lambda$5$Type',1955);feb(1956,1,Qve,aNc);_.Cd=function bNc(a){_Mc(this,a)};var IY=sfb(tBe,'CrossingsCounter/lambda$6$Type',1956);feb(1957,1,Qve,cNc);_.Cd=function dNc(a){var b;dMc();hmb(this.b,(b=this.a,RD(a,12),b))};var JY=sfb(tBe,'CrossingsCounter/lambda$7$Type',1957);feb(839,1,xye,eNc);_.Lb=function fNc(a){return dMc(),nQb(RD(a,12),(Ywc(),Iwc))};_.Fb=function gNc(a){return this===a};_.Mb=function hNc(a){return dMc(),nQb(RD(a,12),(Ywc(),Iwc))};var KY=sfb(tBe,'CrossingsCounter/lambda$8$Type',839);feb(1949,1,{},jNc);var PY=sfb(tBe,'HyperedgeCrossingsCounter',1949);feb(477,1,{34:1,477:1},lNc);_.Fd=function mNc(a){return kNc(this,RD(a,477))};_.b=0;_.c=0;_.e=0;_.f=0;var OY=sfb(tBe,'HyperedgeCrossingsCounter/Hyperedge',477);feb(374,1,{34:1,374:1},oNc);_.Fd=function pNc(a){return nNc(this,RD(a,374))};_.b=0;_.c=0;var NY=sfb(tBe,'HyperedgeCrossingsCounter/HyperedgeCorner',374);feb(531,22,{3:1,34:1,22:1,531:1},tNc);var qNc,rNc;var MY=tfb(tBe,'HyperedgeCrossingsCounter/HyperedgeCorner/Type',531,WI,vNc,uNc);var wNc;feb(1425,1,nEe,DNc);_.rg=function ENc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?zNc:null};_.Kf=function FNc(a,b){CNc(this,RD(a,36),b)};var zNc;var RY=sfb(tEe,'InteractiveNodePlacer',1425);feb(1426,1,nEe,TNc);_.rg=function UNc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?GNc:null};_.Kf=function VNc(a,b){RNc(this,RD(a,36),b)};var GNc,HNc,INc;var TY=sfb(tEe,'LinearSegmentsNodePlacer',1426);feb(261,1,{34:1,261:1},ZNc);_.Fd=function $Nc(a){return WNc(this,RD(a,261))};_.Fb=function _Nc(a){var b;if(ZD(a,261)){b=RD(a,261);return this.b==b.b}return false};_.Hb=function aOc(){return this.b};_.Ib=function bOc(){return 'ls'+Fe(this.e)};_.a=0;_.b=0;_.c=-1;_.d=-1;_.g=0;var SY=sfb(tEe,'LinearSegmentsNodePlacer/LinearSegment',261);feb(1428,1,nEe,yOc);_.rg=function zOc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?cOc:null};_.Kf=function HOc(a,b){uOc(this,RD(a,36),b)};_.b=0;_.g=0;var cOc;var DZ=sfb(tEe,'NetworkSimplexPlacer',1428);feb(1447,1,fye,IOc);_.Ne=function JOc(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function KOc(a){return this===a};_.Oe=function LOc(){return new Frb(this)};var UY=sfb(tEe,'NetworkSimplexPlacer/0methodref$compare$Type',1447);feb(1449,1,fye,MOc);_.Ne=function NOc(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function OOc(a){return this===a};_.Oe=function POc(){return new Frb(this)};var VY=sfb(tEe,'NetworkSimplexPlacer/1methodref$compare$Type',1449);feb(655,1,{655:1},QOc);var WY=sfb(tEe,'NetworkSimplexPlacer/EdgeRep',655);feb(412,1,{412:1},ROc);_.b=false;var XY=sfb(tEe,'NetworkSimplexPlacer/NodeRep',412);feb(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},VOc);var aZ=sfb(tEe,'NetworkSimplexPlacer/Path',515);feb(1429,1,{},WOc);_.Kb=function XOc(a){return RD(a,18).d.i.k};var YY=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$0$Type',1429);feb(1430,1,nwe,YOc);_.Mb=function ZOc(a){return RD(a,273)==(r3b(),o3b)};var ZY=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$1$Type',1430);feb(1431,1,{},$Oc);_.Kb=function _Oc(a){return RD(a,18).d.i};var $Y=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$2$Type',1431);feb(1432,1,nwe,aPc);_.Mb=function bPc(a){return EPc(zDc(RD(a,10)))};var _Y=sfb(tEe,'NetworkSimplexPlacer/Path/lambda$3$Type',1432);feb(1433,1,nwe,cPc);_.Mb=function dPc(a){return DOc(RD(a,12))};var bZ=sfb(tEe,'NetworkSimplexPlacer/lambda$0$Type',1433);feb(1434,1,Qve,ePc);_.Cd=function fPc(a){jOc(this.a,this.b,RD(a,12))};var cZ=sfb(tEe,'NetworkSimplexPlacer/lambda$1$Type',1434);feb(1443,1,Qve,gPc);_.Cd=function hPc(a){kOc(this.a,RD(a,18))};var dZ=sfb(tEe,'NetworkSimplexPlacer/lambda$10$Type',1443);feb(1444,1,{},iPc);_.Kb=function jPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var eZ=sfb(tEe,'NetworkSimplexPlacer/lambda$11$Type',1444);feb(1445,1,Qve,kPc);_.Cd=function lPc(a){lOc(this.a,RD(a,10))};var fZ=sfb(tEe,'NetworkSimplexPlacer/lambda$12$Type',1445);feb(1446,1,{},mPc);_.Kb=function nPc(a){return dOc(),sgb(RD(a,125).e)};var gZ=sfb(tEe,'NetworkSimplexPlacer/lambda$13$Type',1446);feb(1448,1,{},oPc);_.Kb=function pPc(a){return dOc(),sgb(RD(a,125).e)};var hZ=sfb(tEe,'NetworkSimplexPlacer/lambda$15$Type',1448);feb(1450,1,nwe,qPc);_.Mb=function rPc(a){return dOc(),RD(a,412).c.k==(r3b(),p3b)};var iZ=sfb(tEe,'NetworkSimplexPlacer/lambda$17$Type',1450);feb(1451,1,nwe,sPc);_.Mb=function tPc(a){return dOc(),RD(a,412).c.j.c.length>1};var jZ=sfb(tEe,'NetworkSimplexPlacer/lambda$18$Type',1451);feb(1452,1,Qve,uPc);_.Cd=function vPc(a){EOc(this.c,this.b,this.d,this.a,RD(a,412))};_.c=0;_.d=0;var kZ=sfb(tEe,'NetworkSimplexPlacer/lambda$19$Type',1452);feb(1435,1,{},wPc);_.Kb=function xPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var lZ=sfb(tEe,'NetworkSimplexPlacer/lambda$2$Type',1435);feb(1453,1,Qve,yPc);_.Cd=function zPc(a){FOc(this.a,RD(a,12))};_.a=0;var mZ=sfb(tEe,'NetworkSimplexPlacer/lambda$20$Type',1453);feb(1454,1,{},APc);_.Kb=function BPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var nZ=sfb(tEe,'NetworkSimplexPlacer/lambda$21$Type',1454);feb(1455,1,Qve,CPc);_.Cd=function DPc(a){mOc(this.a,RD(a,10))};var oZ=sfb(tEe,'NetworkSimplexPlacer/lambda$22$Type',1455);feb(1456,1,nwe,FPc);_.Mb=function GPc(a){return EPc(a)};var pZ=sfb(tEe,'NetworkSimplexPlacer/lambda$23$Type',1456);feb(1457,1,{},HPc);_.Kb=function IPc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var qZ=sfb(tEe,'NetworkSimplexPlacer/lambda$24$Type',1457);feb(1458,1,nwe,JPc);_.Mb=function KPc(a){return nOc(this.a,RD(a,10))};var rZ=sfb(tEe,'NetworkSimplexPlacer/lambda$25$Type',1458);feb(1459,1,Qve,LPc);_.Cd=function MPc(a){oOc(this.a,this.b,RD(a,10))};var sZ=sfb(tEe,'NetworkSimplexPlacer/lambda$26$Type',1459);feb(1460,1,nwe,NPc);_.Mb=function OPc(a){return dOc(),!W0b(RD(a,18))};var tZ=sfb(tEe,'NetworkSimplexPlacer/lambda$27$Type',1460);feb(1461,1,nwe,PPc);_.Mb=function QPc(a){return dOc(),!W0b(RD(a,18))};var uZ=sfb(tEe,'NetworkSimplexPlacer/lambda$28$Type',1461);feb(1462,1,{},RPc);_.Ve=function SPc(a,b){return pOc(this.a,RD(a,30),RD(b,30))};var vZ=sfb(tEe,'NetworkSimplexPlacer/lambda$29$Type',1462);feb(1436,1,{},TPc);_.Kb=function UPc(a){return dOc(),new SDb(null,new Twb(new is(Mr(a3b(RD(a,10)).a.Kc(),new ir))))};var wZ=sfb(tEe,'NetworkSimplexPlacer/lambda$3$Type',1436);feb(1437,1,nwe,VPc);_.Mb=function WPc(a){return dOc(),COc(RD(a,18))};var xZ=sfb(tEe,'NetworkSimplexPlacer/lambda$4$Type',1437);feb(1438,1,Qve,XPc);_.Cd=function YPc(a){vOc(this.a,RD(a,18))};var yZ=sfb(tEe,'NetworkSimplexPlacer/lambda$5$Type',1438);feb(1439,1,{},ZPc);_.Kb=function $Pc(a){return dOc(),new SDb(null,new Swb(RD(a,30).a,16))};var zZ=sfb(tEe,'NetworkSimplexPlacer/lambda$6$Type',1439);feb(1440,1,nwe,_Pc);_.Mb=function aQc(a){return dOc(),RD(a,10).k==(r3b(),p3b)};var AZ=sfb(tEe,'NetworkSimplexPlacer/lambda$7$Type',1440);feb(1441,1,{},bQc);_.Kb=function cQc(a){return dOc(),new SDb(null,new Twb(new is(Mr(W2b(RD(a,10)).a.Kc(),new ir))))};var BZ=sfb(tEe,'NetworkSimplexPlacer/lambda$8$Type',1441);feb(1442,1,nwe,dQc);_.Mb=function eQc(a){return dOc(),V0b(RD(a,18))};var CZ=sfb(tEe,'NetworkSimplexPlacer/lambda$9$Type',1442);feb(1424,1,nEe,iQc);_.rg=function jQc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?fQc:null};_.Kf=function kQc(a,b){hQc(RD(a,36),b)};var fQc;var EZ=sfb(tEe,'SimpleNodePlacer',1424);feb(185,1,{185:1},sQc);_.Ib=function tQc(){var a;a='';this.c==(wQc(),vQc)?(a+=Oye):this.c==uQc&&(a+=Nye);this.o==(EQc(),CQc)?(a+=Zye):this.o==DQc?(a+='UP'):(a+='BALANCED');return a};var HZ=sfb(wEe,'BKAlignedLayout',185);feb(523,22,{3:1,34:1,22:1,523:1},xQc);var uQc,vQc;var FZ=tfb(wEe,'BKAlignedLayout/HDirection',523,WI,zQc,yQc);var AQc;feb(522,22,{3:1,34:1,22:1,522:1},FQc);var CQc,DQc;var GZ=tfb(wEe,'BKAlignedLayout/VDirection',522,WI,HQc,GQc);var IQc;feb(1699,1,{},MQc);var IZ=sfb(wEe,'BKAligner',1699);feb(1702,1,{},RQc);var LZ=sfb(wEe,'BKCompactor',1702);feb(663,1,{663:1},SQc);_.a=0;var JZ=sfb(wEe,'BKCompactor/ClassEdge',663);feb(466,1,{466:1},UQc);_.a=null;_.b=0;var KZ=sfb(wEe,'BKCompactor/ClassNode',466);feb(1427,1,nEe,aRc);_.rg=function eRc(a){return RD(mQb(RD(a,36),(Ywc(),kwc)),21).Hc((ovc(),hvc))?VQc:null};_.Kf=function fRc(a,b){_Qc(this,RD(a,36),b)};_.d=false;var VQc;var MZ=sfb(wEe,'BKNodePlacer',1427);feb(1700,1,{},hRc);_.d=0;var OZ=sfb(wEe,'NeighborhoodInformation',1700);feb(1701,1,fye,mRc);_.Ne=function nRc(a,b){return lRc(this,RD(a,42),RD(b,42))};_.Fb=function oRc(a){return this===a};_.Oe=function pRc(){return new Frb(this)};var NZ=sfb(wEe,'NeighborhoodInformation/NeighborComparator',1701);feb(823,1,{});var SZ=sfb(wEe,'ThresholdStrategy',823);feb(1825,823,{},uRc);_.wg=function vRc(a,b,c){return this.a.o==(EQc(),DQc)?oxe:pxe};_.xg=function wRc(){};var PZ=sfb(wEe,'ThresholdStrategy/NullThresholdStrategy',1825);feb(587,1,{587:1},xRc);_.c=false;_.d=false;var QZ=sfb(wEe,'ThresholdStrategy/Postprocessable',587);feb(1826,823,{},BRc);_.wg=function CRc(a,b,c){var d,e,f;e=b==c;d=this.a.a[c.p]==b;if(!(e||d)){return a}f=a;if(this.a.c==(wQc(),vQc)){e&&(f=yRc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=yRc(this,c,false))}else{e&&(f=yRc(this,b,true));!isNaN(f)&&!isFinite(f)&&d&&(f=yRc(this,c,false))}return f};_.xg=function DRc(){var a,b,c,d,e;while(this.d.b!=0){e=RD(Tub(this.d),587);d=zRc(this,e);if(!d.a){continue}a=d.a;c=Heb(this.a.f[this.a.g[e.b.p].p]);if(!c&&!W0b(a)&&a.c.i.c==a.d.i.c){continue}b=ARc(this,e);b||Eyb(this.e,e)}while(this.e.a.c.length!=0){ARc(this,RD(Dyb(this.e),587))}};var RZ=sfb(wEe,'ThresholdStrategy/SimpleThresholdStrategy',1826);feb(645,1,{645:1,188:1,196:1},HRc);_.dg=function JRc(){return GRc(this)};_.qg=function IRc(){return GRc(this)};var ERc;var TZ=sfb(xEe,'EdgeRouterFactory',645);feb(1485,1,nEe,WRc);_.rg=function XRc(a){return URc(RD(a,36))};_.Kf=function YRc(a,b){VRc(RD(a,36),b)};var LRc,MRc,NRc,ORc,PRc,QRc,RRc,SRc;var UZ=sfb(xEe,'OrthogonalEdgeRouter',1485);feb(1478,1,nEe,lSc);_.rg=function mSc(a){return gSc(RD(a,36))};_.Kf=function nSc(a,b){iSc(this,RD(a,36),b)};var ZRc,$Rc,_Rc,aSc,bSc,cSc;var WZ=sfb(xEe,'PolylineEdgeRouter',1478);feb(1479,1,xye,pSc);_.Lb=function qSc(a){return oSc(RD(a,10))};_.Fb=function rSc(a){return this===a};_.Mb=function sSc(a){return oSc(RD(a,10))};var VZ=sfb(xEe,'PolylineEdgeRouter/1',1479);feb(1872,1,nwe,xSc);_.Mb=function ySc(a){return RD(a,132).c==(fTc(),dTc)};var XZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$0$Type',1872);feb(1873,1,{},zSc);_.Ze=function ASc(a){return RD(a,132).d};var YZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$1$Type',1873);feb(1874,1,nwe,BSc);_.Mb=function CSc(a){return RD(a,132).c==(fTc(),dTc)};var ZZ=sfb(yEe,'HyperEdgeCycleDetector/lambda$2$Type',1874);feb(1875,1,{},DSc);_.Ze=function ESc(a){return RD(a,132).d};var $Z=sfb(yEe,'HyperEdgeCycleDetector/lambda$3$Type',1875);feb(1876,1,{},FSc);_.Ze=function GSc(a){return RD(a,132).d};var _Z=sfb(yEe,'HyperEdgeCycleDetector/lambda$4$Type',1876);feb(1877,1,{},HSc);_.Ze=function ISc(a){return RD(a,132).d};var a$=sfb(yEe,'HyperEdgeCycleDetector/lambda$5$Type',1877);feb(118,1,{34:1,118:1},USc);_.Fd=function VSc(a){return KSc(this,RD(a,118))};_.Fb=function WSc(a){var b;if(ZD(a,118)){b=RD(a,118);return this.g==b.g}return false};_.Hb=function XSc(){return this.g};_.Ib=function ZSc(){var a,b,c,d;a=new dib('{');d=new Anb(this.n);while(d.a<d.c.c.length){c=RD(ynb(d),12);b=X2b(c.i);b==null&&(b='n'+$2b(c.i));a.a+=''+b;d.a<d.c.c.length&&(a.a+=',',a)}a.a+='}';return a.a};_.a=0;_.b=0;_.c=NaN;_.d=0;_.g=0;_.i=0;_.o=0;_.s=NaN;var l$=sfb(yEe,'HyperEdgeSegment',118);feb(132,1,{132:1},bTc);_.Ib=function cTc(){return this.a+'->'+this.b+' ('+os(this.c)+')'};_.d=0;var c$=sfb(yEe,'HyperEdgeSegmentDependency',132);feb(528,22,{3:1,34:1,22:1,528:1},gTc);var dTc,eTc;var b$=tfb(yEe,'HyperEdgeSegmentDependency/DependencyType',528,WI,iTc,hTc);var jTc;feb(1878,1,{},xTc);var k$=sfb(yEe,'HyperEdgeSegmentSplitter',1878);feb(1879,1,{},ATc);_.a=0;_.b=0;var d$=sfb(yEe,'HyperEdgeSegmentSplitter/AreaRating',1879);feb(339,1,{339:1},BTc);_.a=0;_.b=0;_.c=0;var e$=sfb(yEe,'HyperEdgeSegmentSplitter/FreeArea',339);feb(1880,1,fye,CTc);_.Ne=function DTc(a,b){return zTc(RD(a,118),RD(b,118))};_.Fb=function ETc(a){return this===a};_.Oe=function FTc(){return new Frb(this)};var f$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$0$Type',1880);feb(1881,1,Qve,GTc);_.Cd=function HTc(a){rTc(this.a,this.d,this.c,this.b,RD(a,118))};_.b=0;var g$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$1$Type',1881);feb(1882,1,{},ITc);_.Kb=function JTc(a){return new SDb(null,new Swb(RD(a,118).e,16))};var h$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$2$Type',1882);feb(1883,1,{},KTc);_.Kb=function LTc(a){return new SDb(null,new Swb(RD(a,118).j,16))};var i$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$3$Type',1883);feb(1884,1,{},MTc);_.Ye=function NTc(a){return Kfb(UD(a))};var j$=sfb(yEe,'HyperEdgeSegmentSplitter/lambda$4$Type',1884);feb(664,1,{},TTc);_.a=0;_.b=0;_.c=0;var o$=sfb(yEe,'OrthogonalRoutingGenerator',664);feb(1703,1,{},XTc);_.Kb=function YTc(a){return new SDb(null,new Swb(RD(a,118).e,16))};var m$=sfb(yEe,'OrthogonalRoutingGenerator/lambda$0$Type',1703);feb(1704,1,{},ZTc);_.Kb=function $Tc(a){return new SDb(null,new Swb(RD(a,118).j,16))};var n$=sfb(yEe,'OrthogonalRoutingGenerator/lambda$1$Type',1704);feb(670,1,{});var p$=sfb(zEe,'BaseRoutingDirectionStrategy',670);feb(1870,670,{},cUc);_.yg=function dUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(l,f);Mub(g.a,d);_Tc(this,g,e,d,false);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false);f=b+m.o*c;e=m;d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false)}d=new rjd(p,f);Mub(g.a,d);_Tc(this,g,e,d,false)}}}}};_.zg=function eUc(a){return a.i.n.a+a.n.a+a.a.a};_.Ag=function fUc(){return qpd(),npd};_.Bg=function gUc(){return qpd(),Yod};var q$=sfb(zEe,'NorthToSouthRoutingStrategy',1870);feb(1871,670,{},hUc);_.yg=function iUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b-a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).a;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).a;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(l,f);Mub(g.a,d);_Tc(this,g,e,d,false);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false);f=b-m.o*c;e=m;d=new rjd(n,f);Mub(g.a,d);_Tc(this,g,e,d,false)}d=new rjd(p,f);Mub(g.a,d);_Tc(this,g,e,d,false)}}}}};_.zg=function jUc(a){return a.i.n.a+a.n.a+a.a.a};_.Ag=function kUc(){return qpd(),Yod};_.Bg=function lUc(){return qpd(),npd};var r$=sfb(zEe,'SouthToNorthRoutingStrategy',1871);feb(1869,670,{},mUc);_.yg=function nUc(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p;if(!!a.r&&!a.q){return}k=b+a.o*c;for(j=new Anb(a.n);j.a<j.c.c.length;){i=RD(ynb(j),12);l=xjd(cD(WC(l3,1),Nve,8,0,[i.i.n,i.n,i.a])).b;for(h=new Anb(i.g);h.a<h.c.c.length;){g=RD(ynb(h),18);if(!W0b(g)){o=g.d;p=xjd(cD(WC(l3,1),Nve,8,0,[o.i.n,o.n,o.a])).b;if($wnd.Math.abs(l-p)>Vze){f=k;e=a;d=new rjd(f,l);Mub(g.a,d);_Tc(this,g,e,d,true);m=a.r;if(m){n=Kfb(UD(ju(m.e,0)));d=new rjd(f,n);Mub(g.a,d);_Tc(this,g,e,d,true);f=b+m.o*c;e=m;d=new rjd(f,n);Mub(g.a,d);_Tc(this,g,e,d,true)}d=new rjd(f,p);Mub(g.a,d);_Tc(this,g,e,d,true)}}}}};_.zg=function oUc(a){return a.i.n.b+a.n.b+a.a.b};_.Ag=function pUc(){return qpd(),Xod};_.Bg=function qUc(){return qpd(),ppd};var s$=sfb(zEe,'WestToEastRoutingStrategy',1869);feb(828,1,{},wUc);_.Ib=function xUc(){return Fe(this.a)};_.b=0;_.c=false;_.d=false;_.f=0;var u$=sfb(BEe,'NubSpline',828);feb(418,1,{418:1},AUc,BUc);var t$=sfb(BEe,'NubSpline/PolarCP',418);feb(1480,1,nEe,VUc);_.rg=function XUc(a){return QUc(RD(a,36))};_.Kf=function YUc(a,b){UUc(this,RD(a,36),b)};var CUc,DUc,EUc,FUc,GUc;var B$=sfb(BEe,'SplineEdgeRouter',1480);feb(274,1,{274:1},_Uc);_.Ib=function aVc(){return this.a+' ->('+this.c+') '+this.b};_.c=0;var v$=sfb(BEe,'SplineEdgeRouter/Dependency',274);feb(464,22,{3:1,34:1,22:1,464:1},eVc);var bVc,cVc;var w$=tfb(BEe,'SplineEdgeRouter/SideToProcess',464,WI,gVc,fVc);var hVc;feb(1481,1,nwe,jVc);_.Mb=function kVc(a){return HUc(),!RD(a,131).o};var x$=sfb(BEe,'SplineEdgeRouter/lambda$0$Type',1481);feb(1482,1,{},lVc);_.Ze=function mVc(a){return HUc(),RD(a,131).v+1};var y$=sfb(BEe,'SplineEdgeRouter/lambda$1$Type',1482);feb(1483,1,Qve,nVc);_.Cd=function oVc(a){SUc(this.a,this.b,RD(a,42))};var z$=sfb(BEe,'SplineEdgeRouter/lambda$2$Type',1483);feb(1484,1,Qve,pVc);_.Cd=function qVc(a){TUc(this.a,this.b,RD(a,42))};var A$=sfb(BEe,'SplineEdgeRouter/lambda$3$Type',1484);feb(131,1,{34:1,131:1},wVc,xVc);_.Fd=function yVc(a){return uVc(this,RD(a,131))};_.b=0;_.e=false;_.f=0;_.g=0;_.j=false;_.k=false;_.n=0;_.o=false;_.p=false;_.q=false;_.s=0;_.u=0;_.v=0;_.F=0;var D$=sfb(BEe,'SplineSegment',131);feb(467,1,{467:1},zVc);_.a=0;_.b=false;_.c=false;_.d=false;_.e=false;_.f=0;var C$=sfb(BEe,'SplineSegment/EdgeInformation',467);feb(1198,1,{},IVc);var F$=sfb(GEe,Lze,1198);feb(1199,1,fye,KVc);_.Ne=function LVc(a,b){return JVc(RD(a,121),RD(b,121))};_.Fb=function MVc(a){return this===a};_.Oe=function NVc(){return new Frb(this)};var E$=sfb(GEe,Mze,1199);feb(1197,1,{},TVc);var G$=sfb(GEe,'MrTree',1197);feb(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},$Vc);_.dg=function aWc(){return ZVc(this)};_.qg=function _Vc(){return ZVc(this)};var UVc,VVc,WVc,XVc;var H$=tfb(GEe,'TreeLayoutPhases',405,WI,cWc,bWc);var dWc;feb(1112,205,oze,fWc);_.rf=function gWc(a,b){var c,d,e,f,g,h,i,j;Heb(TD(Gxd(a,(h_c(),S$c))))||RFb((c=new SFb((lud(),new zud(a))),c));g=b.eh(HEe);g.Ug('build tGraph',1);h=(i=new YWc,kQb(i,a),pQb(i,(q$c(),h$c),a),j=new Tsb,QVc(a,i,j),PVc(a,i,j),i);g.Vg();g=b.eh(HEe);g.Ug('Split graph',1);f=HVc(this.a,h);g.Vg();for(e=new Anb(f);e.a<e.c.c.length;){d=RD(ynb(e),121);RVc(this.b,d,b.eh(0.5999999940395355/f.c.length))}g=b.eh(HEe);g.Ug('Pack components',1);h=GVc(f);g.Vg();g=b.eh(HEe);g.Ug('Apply layout results',1);OVc(h);g.Vg()};var I$=sfb(GEe,'TreeLayoutProvider',1112);feb(1894,1,Vve,uWc);_.Jc=function vWc(a){xgb(this,a)};_.Kc=function wWc(){return yob(),Qob(),Pob};var J$=sfb(GEe,'TreeUtil/1',1894);feb(1895,1,Vve,xWc);_.Jc=function yWc(a){xgb(this,a)};_.Kc=function zWc(){return yob(),Qob(),Pob};var K$=sfb(GEe,'TreeUtil/2',1895);feb(1885,1,nwe,AWc);_.Mb=function BWc(a){return Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var L$=sfb(GEe,'TreeUtil/lambda$0$Type',1885);feb(1891,1,nwe,CWc);_.Mb=function DWc(a){return this.a.Hc(RD(a,39))};var M$=sfb(GEe,'TreeUtil/lambda$10$Type',1891);feb(1892,1,{},EWc);_.Kb=function FWc(a){return nWc(this.a,RD(a,39))};var N$=sfb(GEe,'TreeUtil/lambda$11$Type',1892);feb(1893,1,nwe,GWc);_.Mb=function HWc(a){return oWc(this.a,this.b,RD(a,39))};var O$=sfb(GEe,'TreeUtil/lambda$12$Type',1893);feb(1886,1,nwe,IWc);_.Mb=function JWc(a){return pWc(this.a,RD(a,65))};var P$=sfb(GEe,'TreeUtil/lambda$3$Type',1886);feb(1887,1,fye,KWc);_.Ne=function LWc(a,b){return qWc(RD(a,65),RD(b,65))};_.Fb=function MWc(a){return this===a};_.Oe=function NWc(){return new Frb(this)};var Q$=sfb(GEe,'TreeUtil/lambda$4$Type',1887);feb(1888,1,nwe,OWc);_.Mb=function PWc(a){return rWc(this.a,RD(a,65))};var R$=sfb(GEe,'TreeUtil/lambda$7$Type',1888);feb(1889,1,fye,QWc);_.Ne=function RWc(a,b){return sWc(RD(a,65),RD(b,65))};_.Fb=function SWc(a){return this===a};_.Oe=function TWc(){return new Frb(this)};var S$=sfb(GEe,'TreeUtil/lambda$8$Type',1889);feb(1890,1,{},UWc);_.Kb=function VWc(a){return RD(a,65).b};var T$=sfb(GEe,'TreeUtil/lambda$9$Type',1890);feb(508,137,{3:1,508:1,96:1,137:1});_.g=0;var V$=sfb(JEe,'TGraphElement',508);feb(65,508,{3:1,65:1,508:1,96:1,137:1},WWc);_.Ib=function XWc(){return !!this.b&&!!this.c?aXc(this.b)+'->'+aXc(this.c):'e_'+tb(this)};var U$=sfb(JEe,'TEdge',65);feb(121,137,{3:1,121:1,96:1,137:1},YWc);_.Ib=function ZWc(){var a,b,c,d,e;e=null;for(d=Sub(this.b,0);d.b!=d.d.c;){c=RD(evb(d),39);e+=(c.c==null||c.c.length==0?'n_'+c.g:'n_'+c.c)+'\n'}for(b=Sub(this.a,0);b.b!=b.d.c;){a=RD(evb(b),65);e+=(!!a.b&&!!a.c?aXc(a.b)+'->'+aXc(a.c):'e_'+tb(a))+'\n'}return e};var W$=sfb(JEe,'TGraph',121);feb(643,508,{3:1,508:1,643:1,96:1,137:1});var $$=sfb(JEe,'TShape',643);feb(39,643,{3:1,508:1,39:1,643:1,96:1,137:1},bXc);_.Ib=function cXc(){return aXc(this)};var Z$=sfb(JEe,'TNode',39);feb(236,1,Vve,dXc);_.Jc=function eXc(a){xgb(this,a)};_.Kc=function fXc(){var a;return a=Sub(this.a.d,0),new gXc(a)};var Y$=sfb(JEe,'TNode/2',236);feb(329,1,Ave,gXc);_.Nb=function hXc(a){Ztb(this,a)};_.Pb=function jXc(){return RD(evb(this.a),65).c};_.Ob=function iXc(){return dvb(this.a)};_.Qb=function kXc(){gvb(this.a)};var X$=sfb(JEe,'TNode/2/1',329);feb(1923,1,QAe,qXc);_.Kf=function DXc(a,b){oXc(this,RD(a,121),b)};var m_=sfb(LEe,'CompactionProcessor',1923);feb(1924,1,fye,EXc);_.Ne=function FXc(a,b){return rXc(this.a,RD(a,39),RD(b,39))};_.Fb=function GXc(a){return this===a};_.Oe=function HXc(){return new Frb(this)};var _$=sfb(LEe,'CompactionProcessor/lambda$0$Type',1924);feb(1925,1,nwe,IXc);_.Mb=function JXc(a){return sXc(this.b,this.a,RD(a,42))};_.a=0;_.b=0;var a_=sfb(LEe,'CompactionProcessor/lambda$1$Type',1925);feb(1934,1,fye,KXc);_.Ne=function LXc(a,b){return tXc(RD(a,39),RD(b,39))};_.Fb=function MXc(a){return this===a};_.Oe=function NXc(){return new Frb(this)};var b_=sfb(LEe,'CompactionProcessor/lambda$10$Type',1934);feb(1935,1,fye,OXc);_.Ne=function PXc(a,b){return uXc(RD(a,39),RD(b,39))};_.Fb=function QXc(a){return this===a};_.Oe=function RXc(){return new Frb(this)};var c_=sfb(LEe,'CompactionProcessor/lambda$11$Type',1935);feb(1936,1,fye,SXc);_.Ne=function TXc(a,b){return vXc(RD(a,39),RD(b,39))};_.Fb=function UXc(a){return this===a};_.Oe=function VXc(){return new Frb(this)};var d_=sfb(LEe,'CompactionProcessor/lambda$12$Type',1936);feb(1926,1,nwe,WXc);_.Mb=function XXc(a){return wXc(this.a,RD(a,42))};_.a=0;var e_=sfb(LEe,'CompactionProcessor/lambda$2$Type',1926);feb(1927,1,nwe,YXc);_.Mb=function ZXc(a){return xXc(this.a,RD(a,42))};_.a=0;var f_=sfb(LEe,'CompactionProcessor/lambda$3$Type',1927);feb(1928,1,nwe,$Xc);_.Mb=function _Xc(a){return RD(a,39).c.indexOf(IEe)==-1};var g_=sfb(LEe,'CompactionProcessor/lambda$4$Type',1928);feb(1929,1,{},aYc);_.Kb=function bYc(a){return yXc(this.a,RD(a,39))};_.a=0;var h_=sfb(LEe,'CompactionProcessor/lambda$5$Type',1929);feb(1930,1,{},cYc);_.Kb=function dYc(a){return zXc(this.a,RD(a,39))};_.a=0;var i_=sfb(LEe,'CompactionProcessor/lambda$6$Type',1930);feb(1931,1,fye,eYc);_.Ne=function fYc(a,b){return AXc(this.a,RD(a,240),RD(b,240))};_.Fb=function gYc(a){return this===a};_.Oe=function hYc(){return new Frb(this)};var j_=sfb(LEe,'CompactionProcessor/lambda$7$Type',1931);feb(1932,1,fye,iYc);_.Ne=function jYc(a,b){return BXc(this.a,RD(a,39),RD(b,39))};_.Fb=function kYc(a){return this===a};_.Oe=function lYc(){return new Frb(this)};var k_=sfb(LEe,'CompactionProcessor/lambda$8$Type',1932);feb(1933,1,fye,mYc);_.Ne=function nYc(a,b){return CXc(RD(a,39),RD(b,39))};_.Fb=function oYc(a){return this===a};_.Oe=function pYc(){return new Frb(this)};var l_=sfb(LEe,'CompactionProcessor/lambda$9$Type',1933);feb(1921,1,QAe,rYc);_.Kf=function sYc(a,b){qYc(RD(a,121),b)};var n_=sfb(LEe,'DirectionProcessor',1921);feb(1913,1,QAe,vYc);_.Kf=function xYc(a,b){uYc(this,RD(a,121),b)};var o_=sfb(LEe,'FanProcessor',1913);feb(1937,1,QAe,zYc);_.Kf=function CYc(a,b){yYc(RD(a,121),b)};var t_=sfb(LEe,'GraphBoundsProcessor',1937);feb(1938,1,{},DYc);_.Ye=function EYc(a){return RD(a,39).e.a};var p_=sfb(LEe,'GraphBoundsProcessor/lambda$0$Type',1938);feb(1939,1,{},FYc);_.Ye=function GYc(a){return RD(a,39).e.b};var q_=sfb(LEe,'GraphBoundsProcessor/lambda$1$Type',1939);feb(1940,1,{},HYc);_.Ye=function IYc(a){return AYc(RD(a,39))};var r_=sfb(LEe,'GraphBoundsProcessor/lambda$2$Type',1940);feb(1941,1,{},JYc);_.Ye=function KYc(a){return BYc(RD(a,39))};var s_=sfb(LEe,'GraphBoundsProcessor/lambda$3$Type',1941);feb(262,22,{3:1,34:1,22:1,262:1,196:1},XYc);_.dg=function YYc(){switch(this.g){case 0:return new DZc;case 1:return new vYc;case 2:return new nZc;case 3:return new tZc;case 4:return new gZc;case 8:return new cZc;case 5:return new rYc;case 6:return new AZc;case 7:return new qXc;case 9:return new zYc;case 10:return new GZc;default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var LYc,MYc,NYc,OYc,PYc,QYc,RYc,SYc,TYc,UYc,VYc;var u_=tfb(LEe,mBe,262,WI,$Yc,ZYc);var _Yc;feb(1920,1,QAe,cZc);_.Kf=function dZc(a,b){bZc(RD(a,121),b)};var v_=sfb(LEe,'LevelCoordinatesProcessor',1920);feb(1918,1,QAe,gZc);_.Kf=function hZc(a,b){eZc(this,RD(a,121),b)};_.a=0;var x_=sfb(LEe,'LevelHeightProcessor',1918);feb(1919,1,Vve,iZc);_.Jc=function jZc(a){xgb(this,a)};_.Kc=function kZc(){return yob(),Qob(),Pob};var w_=sfb(LEe,'LevelHeightProcessor/1',1919);feb(1914,1,QAe,nZc);_.Kf=function oZc(a,b){lZc(this,RD(a,121),b)};var z_=sfb(LEe,'LevelProcessor',1914);feb(1915,1,nwe,pZc);_.Mb=function qZc(a){return Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var y_=sfb(LEe,'LevelProcessor/lambda$0$Type',1915);feb(1916,1,QAe,tZc);_.Kf=function uZc(a,b){rZc(this,RD(a,121),b)};_.a=0;var B_=sfb(LEe,'NeighborsProcessor',1916);feb(1917,1,Vve,vZc);_.Jc=function wZc(a){xgb(this,a)};_.Kc=function xZc(){return yob(),Qob(),Pob};var A_=sfb(LEe,'NeighborsProcessor/1',1917);feb(1922,1,QAe,AZc);_.Kf=function BZc(a,b){yZc(this,RD(a,121),b)};_.a=0;var C_=sfb(LEe,'NodePositionProcessor',1922);feb(1912,1,QAe,DZc);_.Kf=function EZc(a,b){CZc(this,RD(a,121),b)};var D_=sfb(LEe,'RootProcessor',1912);feb(1942,1,QAe,GZc);_.Kf=function HZc(a,b){FZc(RD(a,121),b)};var E_=sfb(LEe,'Untreeifyer',1942);feb(392,22,{3:1,34:1,22:1,392:1},MZc);var IZc,JZc,KZc;var F_=tfb(PEe,'EdgeRoutingMode',392,WI,OZc,NZc);var PZc;var RZc,SZc,TZc,UZc,VZc,WZc,XZc,YZc,ZZc,$Zc,_Zc,a$c,b$c,c$c,d$c,e$c,f$c,g$c,h$c,i$c,j$c,k$c,l$c,m$c,n$c,o$c,p$c;feb(862,1,Eye,C$c);_.hf=function D$c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,REe),''),YEe),'Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SEe),''),'Edge End Texture Length'),'Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing.'),7),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TEe),''),'Tree Level'),'The index for the tree level the node is in'),sgb(0)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UEe),''),YEe),'When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VEe),''),'Weighting of Nodes'),'Which weighting to use when computing a node order.'),A$c),eid),J_),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WEe),''),'Edge Routing Mode'),'Chooses an Edge Routing algorithm.'),u$c),eid),F_),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XEe),''),'Search Order'),'Which search order to use when computing a spanning tree.'),x$c),eid),K_),xsb(Whd))));i_c((new j_c,a))};var r$c,s$c,t$c,u$c,v$c,w$c,x$c,y$c,z$c,A$c;var G_=sfb(PEe,'MrTreeMetaDataProvider',862);feb(1006,1,Eye,j_c);_.hf=function k_c(a){i_c(a)};var E$c,F$c,G$c,H$c,I$c,J$c,K$c,L$c,M$c,N$c,O$c,P$c,Q$c,R$c,S$c,T$c,U$c,V$c,W$c,X$c,Y$c,Z$c,$$c,_$c,a_c,b_c,c_c,d_c,e_c,f_c,g_c;var I_=sfb(PEe,'MrTreeOptions',1006);feb(1007,1,{},l_c);_.sf=function m_c(){var a;return a=new fWc,a};_.tf=function n_c(a){};var H_=sfb(PEe,'MrTreeOptions/MrtreeFactory',1007);feb(353,22,{3:1,34:1,22:1,353:1},t_c);var o_c,p_c,q_c,r_c;var J_=tfb(PEe,'OrderWeighting',353,WI,v_c,u_c);var w_c;feb(433,22,{3:1,34:1,22:1,433:1},B_c);var y_c,z_c;var K_=tfb(PEe,'TreeifyingOrder',433,WI,D_c,C_c);var E_c;feb(1486,1,nEe,N_c);_.rg=function O_c(a){return RD(a,121),G_c};_.Kf=function P_c(a,b){M_c(this,RD(a,121),b)};var G_c;var L_=sfb('org.eclipse.elk.alg.mrtree.p1treeify','DFSTreeifyer',1486);feb(1487,1,nEe,V_c);_.rg=function W_c(a){return RD(a,121),Q_c};_.Kf=function $_c(a,b){U_c(this,RD(a,121),b)};var Q_c;var T_=sfb(aFe,'NodeOrderer',1487);feb(1494,1,{},a0c);_.td=function b0c(a){return __c(a)};var M_=sfb(aFe,'NodeOrderer/0methodref$lambda$6$Type',1494);feb(1488,1,nwe,c0c);_.Mb=function d0c(a){return R_c(),Heb(TD(mQb(RD(a,39),(q$c(),n$c))))};var N_=sfb(aFe,'NodeOrderer/lambda$0$Type',1488);feb(1489,1,nwe,e0c);_.Mb=function f0c(a){return R_c(),RD(mQb(RD(a,39),(h_c(),W$c)),17).a<0};var O_=sfb(aFe,'NodeOrderer/lambda$1$Type',1489);feb(1490,1,nwe,g0c);_.Mb=function h0c(a){return X_c(this.a,RD(a,39))};var P_=sfb(aFe,'NodeOrderer/lambda$2$Type',1490);feb(1491,1,nwe,i0c);_.Mb=function j0c(a){return Y_c(this.a,RD(a,39))};var Q_=sfb(aFe,'NodeOrderer/lambda$3$Type',1491);feb(1492,1,fye,k0c);_.Ne=function l0c(a,b){return Z_c(RD(a,39),RD(b,39))};_.Fb=function m0c(a){return this===a};_.Oe=function n0c(){return new Frb(this)};var R_=sfb(aFe,'NodeOrderer/lambda$4$Type',1492);feb(1493,1,nwe,o0c);_.Mb=function p0c(a){return R_c(),RD(mQb(RD(a,39),(q$c(),XZc)),17).a!=0};var S_=sfb(aFe,'NodeOrderer/lambda$5$Type',1493);feb(1495,1,nEe,x0c);_.rg=function y0c(a){return RD(a,121),q0c};_.Kf=function z0c(a,b){v0c(this,RD(a,121),b)};_.b=0;var q0c;var U_=sfb('org.eclipse.elk.alg.mrtree.p3place','NodePlacer',1495);feb(1496,1,nEe,J0c);_.rg=function K0c(a){return RD(a,121),A0c};_.Kf=function Y0c(a,b){I0c(RD(a,121),b)};var A0c;var o0=sfb(bFe,'EdgeRouter',1496);feb(1498,1,fye,Z0c);_.Ne=function $0c(a,b){return hgb(RD(a,17).a,RD(b,17).a)};_.Fb=function _0c(a){return this===a};_.Oe=function a1c(){return new Frb(this)};var V_=sfb(bFe,'EdgeRouter/0methodref$compare$Type',1498);feb(1503,1,{},b1c);_.Ye=function c1c(a){return Kfb(UD(a))};var W_=sfb(bFe,'EdgeRouter/1methodref$doubleValue$Type',1503);feb(1505,1,fye,d1c);_.Ne=function e1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function f1c(a){return this===a};_.Oe=function g1c(){return new Frb(this)};var X_=sfb(bFe,'EdgeRouter/2methodref$compare$Type',1505);feb(1507,1,fye,h1c);_.Ne=function i1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function j1c(a){return this===a};_.Oe=function k1c(){return new Frb(this)};var Y_=sfb(bFe,'EdgeRouter/3methodref$compare$Type',1507);feb(1509,1,{},l1c);_.Ye=function m1c(a){return Kfb(UD(a))};var Z_=sfb(bFe,'EdgeRouter/4methodref$doubleValue$Type',1509);feb(1511,1,fye,n1c);_.Ne=function o1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function p1c(a){return this===a};_.Oe=function q1c(){return new Frb(this)};var $_=sfb(bFe,'EdgeRouter/5methodref$compare$Type',1511);feb(1513,1,fye,r1c);_.Ne=function s1c(a,b){return Qfb(Kfb(UD(a)),Kfb(UD(b)))};_.Fb=function t1c(a){return this===a};_.Oe=function u1c(){return new Frb(this)};var __=sfb(bFe,'EdgeRouter/6methodref$compare$Type',1513);feb(1497,1,{},v1c);_.Kb=function w1c(a){return B0c(),RD(mQb(RD(a,39),(h_c(),f_c)),17)};var a0=sfb(bFe,'EdgeRouter/lambda$0$Type',1497);feb(1508,1,{},x1c);_.Kb=function y1c(a){return L0c(RD(a,39))};var b0=sfb(bFe,'EdgeRouter/lambda$11$Type',1508);feb(1510,1,{},z1c);_.Kb=function A1c(a){return M0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var c0=sfb(bFe,'EdgeRouter/lambda$13$Type',1510);feb(1512,1,{},B1c);_.Kb=function C1c(a){return N0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var d0=sfb(bFe,'EdgeRouter/lambda$15$Type',1512);feb(1514,1,fye,D1c);_.Ne=function E1c(a,b){return O0c(RD(a,65),RD(b,65))};_.Fb=function F1c(a){return this===a};_.Oe=function G1c(){return new Frb(this)};var e0=sfb(bFe,'EdgeRouter/lambda$17$Type',1514);feb(1515,1,fye,H1c);_.Ne=function I1c(a,b){return P0c(RD(a,65),RD(b,65))};_.Fb=function J1c(a){return this===a};_.Oe=function K1c(){return new Frb(this)};var f0=sfb(bFe,'EdgeRouter/lambda$18$Type',1515);feb(1516,1,fye,L1c);_.Ne=function M1c(a,b){return Q0c(RD(a,65),RD(b,65))};_.Fb=function N1c(a){return this===a};_.Oe=function O1c(){return new Frb(this)};var g0=sfb(bFe,'EdgeRouter/lambda$19$Type',1516);feb(1499,1,nwe,P1c);_.Mb=function Q1c(a){return R0c(this.a,RD(a,39))};_.a=0;var h0=sfb(bFe,'EdgeRouter/lambda$2$Type',1499);feb(1517,1,fye,R1c);_.Ne=function S1c(a,b){return S0c(RD(a,65),RD(b,65))};_.Fb=function T1c(a){return this===a};_.Oe=function U1c(){return new Frb(this)};var i0=sfb(bFe,'EdgeRouter/lambda$20$Type',1517);feb(1500,1,fye,V1c);_.Ne=function W1c(a,b){return T0c(RD(a,39),RD(b,39))};_.Fb=function X1c(a){return this===a};_.Oe=function Y1c(){return new Frb(this)};var j0=sfb(bFe,'EdgeRouter/lambda$3$Type',1500);feb(1501,1,fye,Z1c);_.Ne=function $1c(a,b){return U0c(RD(a,39),RD(b,39))};_.Fb=function _1c(a){return this===a};_.Oe=function a2c(){return new Frb(this)};var k0=sfb(bFe,'EdgeRouter/lambda$4$Type',1501);feb(1502,1,{},b2c);_.Kb=function c2c(a){return V0c(RD(a,39))};var l0=sfb(bFe,'EdgeRouter/lambda$5$Type',1502);feb(1504,1,{},d2c);_.Kb=function e2c(a){return W0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var m0=sfb(bFe,'EdgeRouter/lambda$7$Type',1504);feb(1506,1,{},f2c);_.Kb=function g2c(a){return X0c(this.b,this.a,RD(a,39))};_.a=0;_.b=0;var n0=sfb(bFe,'EdgeRouter/lambda$9$Type',1506);feb(675,1,{675:1},i2c);_.e=0;_.f=false;_.g=false;var r0=sfb(bFe,'MultiLevelEdgeNodeNodeGap',675);feb(1943,1,fye,l2c);_.Ne=function m2c(a,b){return j2c(RD(a,240),RD(b,240))};_.Fb=function n2c(a){return this===a};_.Oe=function o2c(){return new Frb(this)};var p0=sfb(bFe,'MultiLevelEdgeNodeNodeGap/lambda$0$Type',1943);feb(1944,1,fye,p2c);_.Ne=function q2c(a,b){return k2c(RD(a,240),RD(b,240))};_.Fb=function r2c(a){return this===a};_.Oe=function s2c(){return new Frb(this)};var q0=sfb(bFe,'MultiLevelEdgeNodeNodeGap/lambda$1$Type',1944);var t2c;feb(500,22,{3:1,34:1,22:1,500:1,188:1,196:1},z2c);_.dg=function B2c(){return y2c(this)};_.qg=function A2c(){return y2c(this)};var v2c,w2c;var s0=tfb(cFe,'RadialLayoutPhases',500,WI,D2c,C2c);var E2c;feb(1113,205,oze,H2c);_.rf=function I2c(a,b){var c,d,e,f,g,h;c=G2c(this,a);b.Ug('Radial layout',c.c.length);Heb(TD(Gxd(a,($4c(),N4c))))||RFb((d=new SFb((lud(),new zud(a))),d));h=K2c(a);Ixd(a,(u2c(),t2c),h);if(!h){throw Adb(new agb('The given graph is not a tree!'))}e=Kfb(UD(Gxd(a,S4c)));e==0&&(e=J2c(a));Ixd(a,S4c,e);for(g=new Anb(G2c(this,a));g.a<g.c.c.length;){f=RD(ynb(g),47);f.Kf(a,b.eh(1))}b.Vg()};var t0=sfb(cFe,'RadialLayoutProvider',1113);feb(556,1,fye,T2c);_.Ne=function U2c(a,b){return S2c(this.a,this.b,RD(a,27),RD(b,27))};_.Fb=function V2c(a){return this===a};_.Oe=function W2c(){return new Frb(this)};_.a=0;_.b=0;var u0=sfb(cFe,'RadialUtil/lambda$0$Type',556);feb(1395,1,QAe,Y2c);_.Kf=function Z2c(a,b){X2c(RD(a,27),b)};var v0=sfb(hFe,'CalculateGraphSize',1395);feb(1396,1,QAe,_2c);_.Kf=function a3c(a,b){$2c(RD(a,27))};var w0=sfb(hFe,'EdgeAngleCalculator',1396);feb(368,22,{3:1,34:1,22:1,368:1,196:1},h3c);_.dg=function i3c(){switch(this.g){case 0:return new Q3c;case 1:return new A3c;case 2:return new U3c;case 3:return new Y2c;case 4:return new _2c;default:throw Adb(new agb(lBe+(this.f!=null?this.f:''+this.g)));}};var b3c,c3c,d3c,e3c,f3c;var x0=tfb(hFe,mBe,368,WI,k3c,j3c);var l3c;feb(653,1,{});_.e=1;_.g=0;var y0=sfb(jFe,'AbstractRadiusExtensionCompaction',653);feb(1834,653,{},x3c);_.Cg=function y3c(a){var b,c,d,e,f,g,h,i,j;this.c=RD(Gxd(a,(u2c(),t2c)),27);r3c(this,this.c);this.d=u5c(RD(Gxd(a,($4c(),X4c)),299));i=RD(Gxd(a,H4c),17);!!i&&q3c(this,i.a);h=UD(Gxd(a,(umd(),fmd)));s3c(this,(uFb(h),h));j=Q2c(this.c);!!this.d&&this.d.Gg(j);t3c(this,j);g=new mob(cD(WC(J4,1),kFe,27,0,[this.c]));for(c=0;c<2;c++){for(b=0;b<j.c.length;b++){e=new mob(cD(WC(J4,1),kFe,27,0,[(tFb(b,j.c.length),RD(j.c[b],27))]));f=b<j.c.length-1?(tFb(b+1,j.c.length),RD(j.c[b+1],27)):(tFb(0,j.c.length),RD(j.c[0],27));d=b==0?RD(Vmb(j,j.c.length-1),27):(tFb(b-1,j.c.length),RD(j.c[b-1],27));v3c(this,(tFb(b,j.c.length),RD(j.c[b],27),g),d,f,e)}}};var z0=sfb(jFe,'AnnulusWedgeCompaction',1834);feb(1393,1,QAe,A3c);_.Kf=function B3c(a,b){z3c(RD(a,27),b)};var A0=sfb(jFe,'GeneralCompactor',1393);feb(1833,653,{},F3c);_.Cg=function G3c(a){var b,c,d,e;c=RD(Gxd(a,(u2c(),t2c)),27);this.f=c;this.b=u5c(RD(Gxd(a,($4c(),X4c)),299));e=RD(Gxd(a,H4c),17);!!e&&q3c(this,e.a);d=UD(Gxd(a,(umd(),fmd)));s3c(this,(uFb(d),d));b=Q2c(c);!!this.b&&this.b.Gg(b);D3c(this,b)};_.a=0;var B0=sfb(jFe,'RadialCompaction',1833);feb(1842,1,{},I3c);_.Dg=function J3c(a){var b,c,d,e,f,g;this.a=a;b=0;g=Q2c(a);d=0;for(f=new Anb(g);f.a<f.c.c.length;){e=RD(ynb(f),27);++d;for(c=d;c<g.c.length;c++){H3c(this,e,(tFb(c,g.c.length),RD(g.c[c],27)))&&(b+=1)}}return b};var C0=sfb(lFe,'CrossingMinimizationPosition',1842);feb(1840,1,{},K3c);_.Dg=function L3c(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=0;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);h=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));j=h.i+h.g/2;k=h.j+h.f/2;e=a.i+a.g/2;f=a.j+a.f/2;l=new pjd;l.a=j-e;l.b=k-f;g=new rjd(l.a,l.b);wid(g,a.g,a.f);l.a-=g.a;l.b-=g.b;e=j-l.a;f=k-l.b;i=new rjd(l.a,l.b);wid(i,h.g,h.f);l.a-=i.a;l.b-=i.b;j=e+l.a;k=f+l.b;m=j-e;n=k-f;d+=$wnd.Math.sqrt(m*m+n*n)}return d};var D0=sfb(lFe,'EdgeLengthOptimization',1840);feb(1841,1,{},M3c);_.Dg=function N3c(a){var b,c,d,e,f,g,h,i,j,k,l;d=0;for(c=new is(Mr(zGd(a).a.Kc(),new ir));gs(c);){b=RD(hs(c),74);h=AGd(RD(QHd((!b.c&&(b.c=new Yie(E4,b,5,8)),b.c),0),84));i=h.i+h.g/2;j=h.j+h.f/2;e=RD(Gxd(h,(umd(),Qld)),8);f=a.i+e.a+a.g/2;g=a.j+e.b+a.f;k=i-f;l=j-g;d+=$wnd.Math.sqrt(k*k+l*l)}return d};var E0=sfb(lFe,'EdgeLengthPositionOptimization',1841);feb(1392,653,QAe,Q3c);_.Kf=function R3c(a,b){P3c(this,RD(a,27),b)};var F0=sfb('org.eclipse.elk.alg.radial.intermediate.overlaps','RadiusExtensionOverlapRemoval',1392);feb(1394,1,QAe,U3c);_.Kf=function V3c(a,b){T3c(RD(a,27),b)};var G0=sfb('org.eclipse.elk.alg.radial.intermediate.rotation','GeneralRotator',1394);feb(434,22,{3:1,34:1,22:1,434:1},$3c);var W3c,X3c;var H0=tfb(nFe,'AnnulusWedgeCriteria',434,WI,a4c,_3c);var b4c;feb(393,22,{3:1,34:1,22:1,393:1},i4c);var d4c,e4c,f4c;var I0=tfb(nFe,uze,393,WI,k4c,j4c);var l4c;feb(863,1,Eye,E4c);_.hf=function F4c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oFe),''),'Center On Root'),'Centers the layout on the root of the tree i.e. so that the central node is also the center node of the final layout. This introduces additional whitespace.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pFe),''),'Order ID'),'The id can be used to define an order for nodes of one radius. This can be used to sort them in the layer accordingly.'),sgb(0)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qFe),''),'Radius'),'The radius option can be used to set the initial radius for the radial layouter.'),0),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rFe),''),'Rotate'),'The rotate option determines whether a rotation of the layout should be performed.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,sFe),''),AFe),'With the compacter option it can be determined how compaction on the graph is done. It can be chosen between none, the radial compaction or the compaction of wedges separately.'),q4c),eid),I0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,tFe),''),'Compaction Step Size'),'Determine the size of steps with which the compaction is done. Step size 1 correlates to a compaction of 1 pixel per Iteration.'),sgb(1)),gid),bJ),xsb(Whd))));zgd(a,tFe,sFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,uFe),''),'Sorter'),'Sort the nodes per radius according to the sorting algorithm. The strategies are none, by the given order id, or sorting them by polar coordinates.'),A4c),eid),N0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,vFe),''),'Annulus Wedge Criteria'),'Determine how the wedge for the node placement is calculated. It can be chosen between wedge determination by the number of leaves or by the maximum sum of diagonals.'),C4c),eid),H0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,wFe),''),'Translation Optimization'),'Find the optimal translation of the nodes of the first radii according to this criteria. For example edge crossings can be minimized.'),s4c),eid),M0),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xFe),BFe),'Target Angle'),'The angle in radians that the layout should be rotated to after layout.'),0),did),VI),xsb(Whd))));zgd(a,xFe,rFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yFe),BFe),'Additional Wedge Space'),'If set to true, modifies the target angle by rotating further such that space is left for an edge to pass in between the nodes. This option should only be used in conjunction with top-down layout.'),false),cid),QI),xsb(Whd))));zgd(a,yFe,rFe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zFe),BFe),'Outgoing Edge Angles'),'Calculate the required angle of connected nodes to leave space for an incoming edge. This option should only be used in conjunction with top-down layout.'),false),cid),QI),xsb(Whd))));_4c((new a5c,a))};var n4c,o4c,p4c,q4c,r4c,s4c,t4c,u4c,v4c,w4c,x4c,y4c,z4c,A4c,B4c,C4c;var J0=sfb(nFe,'RadialMetaDataProvider',863);feb(1008,1,Eye,a5c);_.hf=function b5c(a){_4c(a)};var G4c,H4c,I4c,J4c,K4c,L4c,M4c,N4c,O4c,P4c,Q4c,R4c,S4c,T4c,U4c,V4c,W4c,X4c,Y4c,Z4c;var L0=sfb(nFe,'RadialOptions',1008);feb(1009,1,{},c5c);_.sf=function d5c(){var a;return a=new H2c,a};_.tf=function e5c(a){};var K0=sfb(nFe,'RadialOptions/RadialFactory',1009);feb(354,22,{3:1,34:1,22:1,354:1},l5c);var f5c,g5c,h5c,i5c;var M0=tfb(nFe,'RadialTranslationStrategy',354,WI,n5c,m5c);var o5c;feb(299,22,{3:1,34:1,22:1,299:1},v5c);var q5c,r5c,s5c;var N0=tfb(nFe,'SortingStrategy',299,WI,x5c,w5c);var y5c;feb(1476,1,nEe,D5c);_.rg=function E5c(a){return RD(a,27),null};_.Kf=function F5c(a,b){B5c(this,RD(a,27),b)};_.c=0;var O0=sfb('org.eclipse.elk.alg.radial.p1position','EadesRadial',1476);feb(1838,1,{},G5c);_.Eg=function H5c(a){return O2c(a)};var P0=sfb(DFe,'AnnulusWedgeByLeafs',1838);feb(1839,1,{},J5c);_.Eg=function K5c(a){return I5c(this,a)};var Q0=sfb(DFe,'AnnulusWedgeByNodeSpace',1839);feb(1477,1,nEe,N5c);_.rg=function O5c(a){return RD(a,27),null};_.Kf=function P5c(a,b){L5c(this,RD(a,27),b)};var R0=sfb('org.eclipse.elk.alg.radial.p2routing','StraightLineEdgeRouter',1477);feb(826,1,{},R5c);_.Fg=function S5c(a){};_.Gg=function U5c(a){Q5c(this,a)};var T0=sfb(EFe,'IDSorter',826);feb(1837,1,fye,V5c);_.Ne=function W5c(a,b){return T5c(RD(a,27),RD(b,27))};_.Fb=function X5c(a){return this===a};_.Oe=function Y5c(){return new Frb(this)};var S0=sfb(EFe,'IDSorter/lambda$0$Type',1837);feb(1836,1,{},_5c);_.Fg=function a6c(a){Z5c(this,a)};_.Gg=function b6c(a){var b;if(!a.dc()){if(!this.e){b=L2c(RD(a.Xb(0),27));Z5c(this,b)}Q5c(this.e,a)}};var U0=sfb(EFe,'PolarCoordinateSorter',1836);feb(445,22,{3:1,34:1,22:1,445:1},g6c);var c6c,d6c,e6c;var V0=tfb(IFe,'RectPackingLayoutPhases',445,WI,i6c,h6c);var j6c;feb(1118,205,oze,l6c);_.rf=function n6c(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;b.Ug('Rectangle Packing',1);k=RD(Gxd(a,(X7c(),N7c)),107);h=Heb(TD(Gxd(a,G7c)));j=Kfb(UD(Gxd(a,Q7c)));u=Heb(TD(Gxd(a,R7c)));o=(!a.a&&(a.a=new C5d(J4,a,10,11)),a.a);t=false;if(u&&o.i>=3){q=RD(QHd(o,0),27);r=RD(QHd(o,1),27);e=0;while(e+2<o.i){p=q;q=r;r=RD(QHd(o,e+2),27);if(p.f>=q.f+r.f+j||r.f>=p.f+q.f+j){t=true;break}else{++e}}}else{t=true}if(!t){l=o.i;for(g=new dMd(o);g.e!=g.i.gc();){f=RD(bMd(g),27);Ixd(f,(umd(),Rld),sgb(l));--l}crd(a,new Oqd);b.Vg();return}c=(Sed(this.a),Ved(this.a,(f6c(),c6c),RD(Gxd(a,V7c),188)),Ved(this.a,d6c,RD(Gxd(a,M7c),188)),Ved(this.a,e6c,RD(Gxd(a,S7c),188)),Ped(this.a,(v=new ufd,pfd(v,c6c,(z6c(),y6c)),pfd(v,d6c,x6c),Heb(TD(Gxd(a,B7c)))&&pfd(v,c6c,w6c),v)),Qed(this.a,a));i=1/c.c.length;s=0;for(n=new Anb(c);n.a<n.c.c.length;){m=RD(ynb(n),47);if(b.$g()){return}m.Kf(a,b.eh(i));++s}m6c(o,k);h||Esd(a,Kfb(UD(Gxd(a,(X6c(),O6c))))+(k.b+k.c),Kfb(UD(Gxd(a,N6c)))+(k.d+k.a),false,true);Heb(TD(Gxd(a,J7c)))||RFb((d=new SFb((lud(),new zud(a))),d));b.Vg()};var W0=sfb(IFe,'RectPackingLayoutProvider',1118);feb(1518,1,QAe,p6c);_.Kf=function r6c(a,b){o6c(RD(a,27),b)};var Y0=sfb(JFe,'InteractiveNodeReorderer',1518);feb(1519,1,fye,s6c);_.Ne=function t6c(a,b){return q6c(RD(a,27),RD(b,27))};_.Fb=function u6c(a){return this===a};_.Oe=function v6c(){return new Frb(this)};var X0=sfb(JFe,'InteractiveNodeReorderer/lambda$0$Type',1519);feb(455,22,{3:1,34:1,22:1,455:1,196:1},A6c);_.dg=function B6c(){switch(this.g){case 0:return new p6c;case 1:return new K6c;case 2:return new H6c;}return null};var w6c,x6c,y6c;var Z0=tfb(JFe,mBe,455,WI,D6c,C6c);var E6c;feb(1521,1,QAe,H6c);_.Kf=function I6c(a,b){G6c(RD(a,27),b)};var $0=sfb(JFe,'MinSizePostProcessor',1521);feb(1520,1,QAe,K6c);_.Kf=function L6c(a,b){J6c(RD(a,27),b)};var _0=sfb(JFe,'MinSizePreProcessor',1520);var M6c,N6c,O6c,P6c,Q6c,R6c,S6c,T6c,U6c,V6c,W6c;feb(394,22,{3:1,34:1,22:1,394:1},a7c);var Y6c,Z6c,$6c;var a1=tfb(KFe,'OptimizationGoal',394,WI,c7c,b7c);var d7c;feb(867,1,Eye,v7c);_.hf=function w7c(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LFe),''),'Try box layout first'),'Whether one should check whether the regions are stackable to see whether box layout would do the job. For example, nodes with the same height are not stackable inside a row. Therefore, box layout will perform better and faster.'),(Geb(),false)),(kid(),cid)),QI),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MFe),''),'Current position of a node in the order of nodes'),'The rectangles are ordered. Normally according to their definition the the model. This option specifies the current position of a node.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NFe),''),'Desired index of node'),'The rectangles are ordered. Normally according to their definition the the model. This option allows to specify a desired position that has preference over the original position.'),sgb(-1)),gid),bJ),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,OFe),''),'In new Row'),'If set to true this node begins in a new row. Consequently this node cannot be moved in a previous layer during compaction. Width approximation does does not take this into account.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PFe),XFe),'Width Approximation Strategy'),'Strategy for finding an initial width of the drawing.'),s7c),eid),l1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QFe),XFe),'Target Width'),'Option to place the rectangles in the given target width instead of approximating the width using the desired aspect ratio. The padding is not included in this. Meaning a drawing will have width of targetwidth + horizontal padding.'),-1),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RFe),XFe),'Optimization Goal'),'Optimization goal for approximation of the bounding box given by the first iteration. Determines whether layout is sorted by the maximum scaling, aspect ratio, or area. Depending on the strategy the aspect ratio might be nearly ignored.'),q7c),eid),a1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SFe),XFe),'Shift Last Placed.'),'When placing a rectangle behind or below the last placed rectangle in the first iteration, it is sometimes possible to shift the rectangle further to the left or right, resulting in less whitespace. True (default) enables the shift and false disables it. Disabling the shift produces a greater approximated area by the first iteration and a layout, when using ONLY the first iteration (default not the case), where it is sometimes impossible to implement a size transformation of rectangles that will fill the bounding box and eliminate empty spaces.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TFe),'packing'),YFe),'Strategy for finding an initial placement on nodes.'),l7c),eid),o1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,UFe),ZFe),'Row Height Reevaluation'),'During the compaction step the height of a row is normally not changed. If this options is set, the blocks of other rows might be added if they exceed the row height. If this is the case the whole row has to be packed again to be optimal regarding the new row height. This option should, therefore, be used with care since it might be computation heavy.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VFe),ZFe),'Compaction iterations'),'Defines the number of compaction iterations. E.g. if set to 2 the width is initially approximated, then the drawing is compacted and based on the resulting drawing the target width is decreased or increased and a second compaction step is executed and the result compared to the first one. The best run is used based on the scale measure.'),sgb(1)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,WFe),'whiteSpaceElimination'),'White Space Approximation Strategy'),'Strategy for expanding nodes such that whitespace in the parent is eliminated.'),eid),t1),xsb(Whd))));Y7c((new Z7c,a))};var f7c,g7c,h7c,i7c,j7c,k7c,l7c,m7c,n7c,o7c,p7c,q7c,r7c,s7c,t7c;var b1=sfb(KFe,'RectPackingMetaDataProvider',867);feb(1016,1,Eye,Z7c);_.hf=function $7c(a){Y7c(a)};var x7c,y7c,z7c,A7c,B7c,C7c,D7c,E7c,F7c,G7c,H7c,I7c,J7c,K7c,L7c,M7c,N7c,O7c,P7c,Q7c,R7c,S7c,T7c,U7c,V7c,W7c;var d1=sfb(KFe,'RectPackingOptions',1016);feb(1017,1,{},_7c);_.sf=function a8c(){var a;return a=new l6c,a};_.tf=function b8c(a){};var c1=sfb(KFe,'RectPackingOptions/RectpackingFactory',1017);feb(1705,1,{},g8c);_.a=0;_.c=false;var e1=sfb(_Fe,'AreaApproximation',1705);var h1=ufb(_Fe,'BestCandidateFilter');feb(673,1,{535:1},h8c);_.Hg=function i8c(a,b,c){var d,e,f,g,h,i;i=new bnb;f=oxe;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),238);f=$wnd.Math.min(f,(g.c+(c.b+c.c))*(g.b+(c.d+c.a)))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);(d.c+(c.b+c.c))*(d.b+(c.d+c.a))==f&&(ZEb(i.c,d),true)}return i};var f1=sfb(_Fe,'AreaFilter',673);feb(674,1,{535:1},j8c);_.Hg=function k8c(a,b,c){var d,e,f,g,h,i;h=new bnb;i=oxe;for(g=new Anb(a);g.a<g.c.c.length;){f=RD(ynb(g),238);i=$wnd.Math.min(i,$wnd.Math.abs((f.c+(c.b+c.c))/(f.b+(c.d+c.a))-b))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);$wnd.Math.abs((d.c+(c.b+c.c))/(d.b+(c.d+c.a))-b)==i&&(ZEb(h.c,d),true)}return h};var g1=sfb(_Fe,'AspectRatioFilter',674);feb(1469,1,nEe,o8c);_.rg=function p8c(a){return RD(a,27),null};_.Kf=function q8c(a,b){n8c(RD(a,27),b)};var i1=sfb(_Fe,'GreedyWidthApproximator',1469);feb(672,1,{535:1},r8c);_.Hg=function s8c(a,b,c){var d,e,f,g,h,i;i=new bnb;f=pxe;for(h=new Anb(a);h.a<h.c.c.length;){g=RD(ynb(h),238);f=$wnd.Math.max(f,Aad(g.c+(c.b+c.c),g.b+(c.d+c.a),g.a))}for(e=new Anb(a);e.a<e.c.c.length;){d=RD(ynb(e),238);Aad(d.c+(c.b+c.c),d.b+(c.d+c.a),d.a)==f&&(ZEb(i.c,d),true)}return i};var j1=sfb(_Fe,'ScaleMeasureFilter',672);feb(1470,1,nEe,u8c);_.rg=function v8c(a){return RD(a,27),null};_.Kf=function w8c(a,b){t8c(RD(a,27),b)};var k1=sfb(_Fe,'TargetWidthWidthApproximator',1470);feb(490,22,{3:1,34:1,22:1,490:1,188:1,196:1},B8c);_.dg=function D8c(){return A8c(this)};_.qg=function C8c(){return A8c(this)};var x8c,y8c;var l1=tfb(_Fe,'WidthApproximationStrategy',490,WI,F8c,E8c);var G8c;feb(1471,1,nEe,R8c);_.rg=function S8c(a){return RD(a,27),null};_.Kf=function T8c(a,b){Q8c(this,RD(a,27),b)};var m1=sfb(aGe,'Compactor',1471);feb(1473,1,nEe,X8c);_.rg=function Y8c(a){return RD(a,27),null};_.Kf=function Z8c(a,b){W8c(RD(a,27),b)};var n1=sfb(aGe,'NoPlacement',1473);feb(439,22,{3:1,34:1,22:1,439:1,188:1,196:1},d9c);_.dg=function f9c(){return c9c(this)};_.qg=function e9c(){return c9c(this)};var $8c,_8c,a9c;var o1=tfb(aGe,'PackingStrategy',439,WI,h9c,g9c);var i9c;feb(810,1,{},m9c);_.a=0;_.b=0;_.c=0;_.d=oxe;_.e=0;_.f=oxe;var p1=sfb(aGe,'RowFillingAndCompaction',810);feb(1472,1,nEe,o9c);_.rg=function p9c(a){return RD(a,27),null};_.Kf=function q9c(a,b){n9c(RD(a,27),b)};var q1=sfb(aGe,'SimplePlacement',1472);feb(1474,1,nEe,s9c);_.rg=function t9c(a){return RD(a,27),null};_.Kf=function u9c(a,b){this.Ig(RD(a,27),b)};_.Ig=function v9c(a,b){r9c(a,b)};var r1=sfb(cGe,'EqualWhitespaceEliminator',1474);feb(1475,1474,nEe,x9c);_.Ig=function y9c(a,b){var c,d,e,f,g;b.Ug('To Aspect Ratio Whitesapce Eliminator',1);g=Kfb(UD(Gxd(a,(X6c(),O6c))));f=Kfb(UD(Gxd(a,N6c)));e=Kfb(UD(Gxd(a,(X7c(),x7c))));c=Kfb(UD(Gxd(a,M6c)));d=g/f;if(d<e){g=f*e;Ixd(a,O6c,g)}else{c+=g/e-f;Ixd(a,M6c,c);Ixd(a,N6c,f+c)}r9c(a,b);b.Vg()};var s1=sfb(cGe,'ToAspectratioNodeExpander',1475);feb(491,22,{3:1,34:1,22:1,491:1,188:1,196:1},D9c);_.dg=function F9c(){return C9c(this)};_.qg=function E9c(){return C9c(this)};var z9c,A9c;var t1=tfb(cGe,'WhiteSpaceEliminationStrategy',491,WI,H9c,G9c);var I9c;feb(172,1,{172:1},V9c);_.a=0;_.c=false;_.d=0;_.e=0;_.f=0;_.g=0;_.i=0;_.k=false;_.o=oxe;_.p=oxe;_.r=0;_.s=0;_.t=0;var w1=sfb(dGe,'Block',172);feb(209,1,{209:1},_9c);_.a=0;_.b=0;_.d=0;_.e=0;_.f=0;var u1=sfb(dGe,'BlockRow',209);feb(315,1,{315:1},had);_.b=0;_.c=0;_.d=0;_.e=0;_.f=0;var v1=sfb(dGe,'BlockStack',315);feb(238,1,{238:1},lad,mad);_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.g=0;var y1=sfb(dGe,'DrawingData',238);feb(373,22,{3:1,34:1,22:1,373:1},tad);var nad,oad,pad,qad,rad;var x1=tfb(dGe,'DrawingDataDescriptor',373,WI,vad,uad);var wad;feb(186,1,{186:1},Had);_.b=0;_.c=0;_.e=0;_.f=0;var z1=sfb(dGe,'RectRow',186);feb(763,1,{},Pad);_.j=0;var F1=sfb(fGe,dBe,763);feb(1209,1,{},Qad);_.af=function Rad(a){return bjd(a.a,a.b)};var A1=sfb(fGe,Nze,1209);feb(1210,1,{},Sad);_.af=function Tad(a){return Kad(this.a,a)};var B1=sfb(fGe,eBe,1210);feb(1211,1,{},Uad);_.af=function Vad(a){return Lad(this.a,a)};var C1=sfb(fGe,fBe,1211);feb(1212,1,{},Wad);_.af=function Xad(a){return Mad(this.a,a)};var D1=sfb(fGe,'ElkGraphImporter/lambda$3$Type',1212);feb(1213,1,{},Yad);_.af=function Zad(a){return Nad(this.a,a)};var E1=sfb(fGe,gBe,1213);feb(1115,205,oze,$ad);_.rf=function abd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(Hxd(a,(ncd(),mcd))){n=WD(Gxd(a,(Tcd(),Scd)));f=sgd(ygd(),n);if(f){g=RD(ltd(f.f),205);g.rf(a,b.eh(1))}}Ixd(a,hcd,(Mbd(),Kbd));Ixd(a,icd,(Xbd(),Ubd));Ixd(a,jcd,(ldd(),kdd));h=RD(Gxd(a,(Tcd(),Ocd)),17).a;b.Ug('Overlap removal',1);Heb(TD(Gxd(a,Ncd)))&&'null45scanlineOverlaps';i=new _sb;j=new cbd(i);d=new Pad;c=Jad(d,a);k=true;e=0;while(e<h&&k){if(Heb(TD(Gxd(a,Pcd)))){i.a.$b();VQb(new WQb(j),c.i);if(i.a.gc()==0){break}c.e=i}Sed(this.b);Ved(this.b,(gbd(),dbd),(_cd(),$cd));Ved(this.b,ebd,c.g);Ved(this.b,fbd,(Cbd(),Bbd));this.a=Qed(this.b,c);for(m=new Anb(this.a);m.a<m.c.c.length;){l=RD(ynb(m),47);l.Kf(c,b.eh(1))}Oad(d,c);k=Heb(TD(mQb(c,(OQb(),NQb))));++e}Iad(d,c);b.Vg()};var H1=sfb(fGe,'OverlapRemovalLayoutProvider',1115);feb(1116,1,{},cbd);var G1=sfb(fGe,'OverlapRemovalLayoutProvider/lambda$0$Type',1116);feb(444,22,{3:1,34:1,22:1,444:1},hbd);var dbd,ebd,fbd;var I1=tfb(fGe,'SPOrEPhases',444,WI,jbd,ibd);var kbd;feb(1219,1,{},nbd);var K1=sfb(fGe,'ShrinkTree',1219);feb(1117,205,oze,obd);_.rf=function pbd(a,b){var c,d,e,f,g;if(Hxd(a,(ncd(),mcd))){g=WD(Gxd(a,mcd));e=sgd(ygd(),g);if(e){f=RD(ltd(e.f),205);f.rf(a,b.eh(1))}}d=new Pad;c=Jad(d,a);mbd(this.a,c,b.eh(1));Iad(d,c)};var J1=sfb(fGe,'ShrinkTreeLayoutProvider',1117);feb(305,137,{3:1,305:1,96:1,137:1},qbd);_.c=false;var L1=sfb('org.eclipse.elk.alg.spore.graph','Graph',305);feb(489,22,{3:1,34:1,22:1,489:1,188:1,196:1},ubd);_.dg=function wbd(){return tbd(this)};_.qg=function vbd(){return tbd(this)};var rbd;var M1=tfb(gGe,uze,489,WI,ybd,xbd);var zbd;feb(558,22,{3:1,34:1,22:1,558:1,188:1,196:1},Dbd);_.dg=function Fbd(){return new Tdd};_.qg=function Ebd(){return new Tdd};var Bbd;var N1=tfb(gGe,'OverlapRemovalStrategy',558,WI,Hbd,Gbd);var Ibd;feb(438,22,{3:1,34:1,22:1,438:1},Nbd);var Kbd,Lbd;var O1=tfb(gGe,'RootSelection',438,WI,Pbd,Obd);var Qbd;feb(324,22,{3:1,34:1,22:1,324:1},Ybd);var Sbd,Tbd,Ubd,Vbd,Wbd;var P1=tfb(gGe,'SpanningTreeCostFunction',324,WI,$bd,Zbd);var _bd;feb(1014,1,Eye,pcd);_.hf=function qcd(a){ocd(a)};var bcd,ccd,dcd,ecd,fcd,gcd,hcd,icd,jcd,kcd,lcd,mcd;var R1=sfb(gGe,'SporeCompactionOptions',1014);feb(1015,1,{},rcd);_.sf=function scd(){var a;return a=new obd,a};_.tf=function tcd(a){};var Q1=sfb(gGe,'SporeCompactionOptions/SporeCompactionFactory',1015);feb(866,1,Eye,Lcd);_.hf=function Mcd(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,iGe),''),'Underlying Layout Algorithm'),'A layout algorithm that is applied to the graph before it is compacted. If this is null, nothing is applied before compaction.'),(kid(),iid)),qJ),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nGe),'structure'),'Structure Extraction Strategy'),'This option defines what kind of triangulation or other partitioning of the plane is applied to the vertices.'),Icd),eid),V1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jGe),sGe),'Tree Construction Strategy'),'Whether a minimum spanning tree or a maximum spanning tree should be constructed.'),Gcd),eid),W1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kGe),sGe),'Cost Function for Spanning Tree'),'The cost function is used in the creation of the spanning tree.'),Ecd),eid),P1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,lGe),sGe),'Root node for spanning tree construction'),'The identifier of the node that is preferred as the root of the spanning tree. If this is null, the first node is chosen.'),null),iid),qJ),xsb(Whd))));zgd(a,lGe,mGe,Acd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mGe),sGe),'Root selection for spanning tree'),'This sets the method used to select a root node for the construction of a spanning tree'),Ccd),eid),O1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oGe),nDe),YFe),'This option defines how the compaction is applied.'),vcd),eid),M1),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pGe),nDe),'Orthogonal Compaction'),'Restricts the translation of nodes to orthogonal directions in the compaction phase.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qGe),tGe),'Upper limit for iterations of overlap removal'),null),sgb(64)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,rGe),tGe),'Whether to run a supplementary scanline overlap check.'),null),true),cid),QI),xsb(Whd))));Ucd((new Vcd,a));ocd((new pcd,a))};var ucd,vcd,wcd,xcd,ycd,zcd,Acd,Bcd,Ccd,Dcd,Ecd,Fcd,Gcd,Hcd,Icd,Jcd;var S1=sfb(gGe,'SporeMetaDataProvider',866);feb(1012,1,Eye,Vcd);_.hf=function Wcd(a){Ucd(a)};var Ncd,Ocd,Pcd,Qcd,Rcd,Scd;var U1=sfb(gGe,'SporeOverlapRemovalOptions',1012);feb(1013,1,{},Xcd);_.sf=function Ycd(){var a;return a=new $ad,a};_.tf=function Zcd(a){};var T1=sfb(gGe,'SporeOverlapRemovalOptions/SporeOverlapFactory',1013);feb(539,22,{3:1,34:1,22:1,539:1,188:1,196:1},cdd);_.dg=function edd(){return bdd(this)};_.qg=function ddd(){return bdd(this)};var $cd;var V1=tfb(gGe,'StructureExtractionStrategy',539,WI,gdd,fdd);var hdd;feb(437,22,{3:1,34:1,22:1,437:1,188:1,196:1},ndd);_.dg=function pdd(){return mdd(this)};_.qg=function odd(){return mdd(this)};var jdd,kdd;var W1=tfb(gGe,'TreeConstructionStrategy',437,WI,rdd,qdd);var sdd;feb(1463,1,nEe,vdd);_.rg=function wdd(a){return RD(a,305),new ufd};_.Kf=function xdd(a,b){udd(RD(a,305),b)};var Y1=sfb(vGe,'DelaunayTriangulationPhase',1463);feb(1464,1,Qve,ydd);_.Cd=function zdd(a){Rmb(this.a,RD(a,68).a)};var X1=sfb(vGe,'DelaunayTriangulationPhase/lambda$0$Type',1464);feb(794,1,nEe,Ddd);_.rg=function Edd(a){return RD(a,305),new ufd};_.Kf=function Fdd(a,b){this.Jg(RD(a,305),b)};_.Jg=function Gdd(a,b){var c,d,e;b.Ug('Minimum spanning tree construction',1);a.d?(d=a.d.a):(d=RD(Vmb(a.i,0),68).a);Heb(TD(mQb(a,(OQb(),MQb))))?(e=LFb(a.e,d,(c=a.b,c))):(e=LFb(a.e,d,a.b));Bdd(this,e,a);b.Vg()};var a2=sfb(wGe,'MinSTPhase',794);feb(1466,794,nEe,Hdd);_.Jg=function Jdd(a,b){var c,d,e,f;b.Ug('Maximum spanning tree construction',1);c=new Kdd(a);a.d?(e=a.d.c):(e=RD(Vmb(a.i,0),68).c);Heb(TD(mQb(a,(OQb(),MQb))))?(f=LFb(a.e,e,(d=c,d))):(f=LFb(a.e,e,c));Bdd(this,f,a);b.Vg()};var $1=sfb(wGe,'MaxSTPhase',1466);feb(1467,1,{},Kdd);_.af=function Ldd(a){return Idd(this.a,a)};var Z1=sfb(wGe,'MaxSTPhase/lambda$0$Type',1467);feb(1465,1,Qve,Mdd);_.Cd=function Ndd(a){Cdd(this.a,RD(a,68))};var _1=sfb(wGe,'MinSTPhase/lambda$0$Type',1465);feb(796,1,nEe,Tdd);_.rg=function Udd(a){return RD(a,305),new ufd};_.Kf=function Vdd(a,b){Sdd(this,RD(a,305),b)};_.a=false;var c2=sfb(xGe,'GrowTreePhase',796);feb(797,1,Qve,Wdd);_.Cd=function Xdd(a){Rdd(this.a,this.b,this.c,RD(a,225))};var b2=sfb(xGe,'GrowTreePhase/lambda$0$Type',797);feb(1468,1,nEe,_dd);_.rg=function aed(a){return RD(a,305),new ufd};_.Kf=function bed(a,b){$dd(this,RD(a,305),b)};var e2=sfb(xGe,'ShrinkTreeCompactionPhase',1468);feb(795,1,Qve,ced);_.Cd=function ded(a){Zdd(this.a,this.b,this.c,RD(a,225))};var d2=sfb(xGe,'ShrinkTreeCompactionPhase/lambda$0$Type',795);var j4=ufb(jEe,'IGraphElementVisitor');feb(872,1,{536:1},med);_.Kg=function ped(a){var b;b=led(this,a);kQb(b,RD(Wjb(this.b,a),96));jed(this,a,b)};var eed,fed,ged;var l2=sfb(pze,'LayoutConfigurator',872);var g2=ufb(pze,'LayoutConfigurator/IPropertyHolderOptionFilter');feb(944,1,{2032:1},qed);_.Lg=function red(a,b){return hed(),!a.pf(b)};var h2=sfb(pze,'LayoutConfigurator/lambda$0$Type',944);feb(943,1,{845:1},sed);_.Mg=function ted(a,b){return hed(),!a.pf(b)};var i2=sfb(pze,'LayoutConfigurator/lambda$1$Type',943);feb(945,1,{2032:1},ved);_.Lg=function wed(a,b){return ued(a,b)};var j2=sfb(pze,'LayoutConfigurator/lambda$2$Type',945);feb(946,1,nwe,xed);_.Mb=function yed(a){return oed(this.a,this.b,RD(a,2032))};var k2=sfb(pze,'LayoutConfigurator/lambda$3$Type',946);feb(869,1,{},Hed);var m2=sfb(pze,'RecursiveGraphLayoutEngine',869);feb(224,63,swe,Ied,Jed);var n2=sfb(pze,'UnsupportedConfigurationException',224);feb(370,63,swe,Ked);var o2=sfb(pze,'UnsupportedGraphException',370);feb(761,1,{});var N3=sfb(jEe,'AbstractRandomListAccessor',761);feb(449,761,{},Wed);_.Ng=function Yed(){return null};_.d=true;_.e=true;_.f=0;var u2=sfb(AGe,'AlgorithmAssembler',449);feb(1200,1,nwe,Zed);_.Mb=function $ed(a){return !!RD(a,106)};var p2=sfb(AGe,'AlgorithmAssembler/lambda$0$Type',1200);feb(1201,1,{},_ed);_.Kb=function afd(a){return Xed(this.a,RD(a,106))};var q2=sfb(AGe,'AlgorithmAssembler/lambda$1$Type',1201);feb(1202,1,nwe,bfd);_.Mb=function cfd(a){return !!RD(a,80)};var r2=sfb(AGe,'AlgorithmAssembler/lambda$2$Type',1202);feb(1203,1,Qve,dfd);_.Cd=function efd(a){ofd(this.a,RD(a,80))};var s2=sfb(AGe,'AlgorithmAssembler/lambda$3$Type',1203);feb(1204,1,Qve,ffd);_.Cd=function gfd(a){Red(this.a,this.b,RD(a,196))};var t2=sfb(AGe,'AlgorithmAssembler/lambda$4$Type',1204);feb(1343,1,fye,ifd);_.Ne=function jfd(a,b){return hfd(RD(a,196),RD(b,196))};_.Fb=function kfd(a){return this===a};_.Oe=function lfd(){return new Frb(this)};var v2=sfb(AGe,'EnumBasedFactoryComparator',1343);feb(80,761,{80:1},ufd);_.Ng=function wfd(){return new _sb};_.a=0;var w2=sfb(AGe,'LayoutProcessorConfiguration',80);feb(1025,1,{536:1},Bfd);_.Kg=function Ffd(a){Bvb(yfd,new Kfd(a))};var xfd,yfd,zfd;var A2=sfb(zye,'DeprecatedLayoutOptionReplacer',1025);feb(1026,1,Qve,Gfd);_.Cd=function Hfd(a){Cfd(RD(a,167))};var x2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$0$Type',1026);feb(1027,1,Qve,Ifd);_.Cd=function Jfd(a){Dfd(RD(a,167))};var y2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$1$Type',1027);feb(1028,1,{},Kfd);_.Yd=function Lfd(a,b){Efd(this.a,RD(a,149),RD(b,41))};var z2=sfb(zye,'DeprecatedLayoutOptionReplacer/lambda$2$Type',1028);feb(143,1,{701:1,143:1},Pfd);_.Fb=function Qfd(a){return Nfd(this,a)};_.Og=function Rfd(){return this.b};_.Pg=function Sfd(){return this.c};_.xe=function Tfd(){return this.e};_.Hb=function Ufd(){return ohb(this.c)};_.Ib=function Vfd(){return 'Layout Algorithm: '+this.c};var D2=sfb(zye,'LayoutAlgorithmData',143);feb(269,1,{},agd);var C2=sfb(zye,'LayoutAlgorithmData/Builder',269);feb(1029,1,{536:1},dgd);_.Kg=function egd(a){ZD(a,207)&&!Heb(TD(a.of((umd(),rld))))&&bgd(RD(a,27))};var E2=sfb(zye,'LayoutAlgorithmResolver',1029);feb(233,1,{701:1,233:1},fgd);_.Fb=function ggd(a){if(ZD(a,233)){return lhb(this.b,RD(a,233).b)}return false};_.Og=function hgd(){return this.a};_.Pg=function igd(){return this.b};_.xe=function jgd(){return this.d};_.Hb=function kgd(){return ohb(this.b)};_.Ib=function lgd(){return 'Layout Type: '+this.b};var G2=sfb(zye,'LayoutCategoryData',233);feb(357,1,{},pgd);var F2=sfb(zye,'LayoutCategoryData/Builder',357);feb(879,1,{},xgd);var qgd;var b3=sfb(zye,'LayoutMetaDataService',879);feb(880,1,{},Ggd);var I2=sfb(zye,'LayoutMetaDataService/Registry',880);feb(486,1,{486:1},Hgd);var H2=sfb(zye,'LayoutMetaDataService/Registry/Triple',486);feb(881,1,BGe,Igd);_.Qg=function Jgd(){return new pjd};var J2=sfb(zye,'LayoutMetaDataService/lambda$0$Type',881);feb(882,1,CGe,Kgd);_.Rg=function Lgd(a){return ajd(RD(a,8))};var K2=sfb(zye,'LayoutMetaDataService/lambda$1$Type',882);feb(891,1,BGe,Mgd);_.Qg=function Ngd(){return new bnb};var L2=sfb(zye,'LayoutMetaDataService/lambda$10$Type',891);feb(892,1,CGe,Ogd);_.Rg=function Pgd(a){return new dnb(RD(a,13))};var M2=sfb(zye,'LayoutMetaDataService/lambda$11$Type',892);feb(893,1,BGe,Qgd);_.Qg=function Rgd(){return new Yub};var N2=sfb(zye,'LayoutMetaDataService/lambda$12$Type',893);feb(894,1,CGe,Sgd);_.Rg=function Tgd(a){return gv(RD(a,67))};var O2=sfb(zye,'LayoutMetaDataService/lambda$13$Type',894);feb(895,1,BGe,Ugd);_.Qg=function Vgd(){return new _sb};var P2=sfb(zye,'LayoutMetaDataService/lambda$14$Type',895);feb(896,1,CGe,Wgd);_.Rg=function Xgd(a){return Ux(RD(a,49))};var Q2=sfb(zye,'LayoutMetaDataService/lambda$15$Type',896);feb(897,1,BGe,Ygd);_.Qg=function Zgd(){return new Iub};var R2=sfb(zye,'LayoutMetaDataService/lambda$16$Type',897);feb(898,1,CGe,$gd);_.Rg=function _gd(a){return Xx(RD(a,49))};var S2=sfb(zye,'LayoutMetaDataService/lambda$17$Type',898);feb(899,1,BGe,ahd);_.Qg=function bhd(){return new xAb};var T2=sfb(zye,'LayoutMetaDataService/lambda$18$Type',899);feb(900,1,CGe,chd);_.Rg=function dhd(a){return Yx(RD(a,157))};var U2=sfb(zye,'LayoutMetaDataService/lambda$19$Type',900);feb(883,1,BGe,ehd);_.Qg=function fhd(){return new Ejd};var V2=sfb(zye,'LayoutMetaDataService/lambda$2$Type',883);feb(884,1,CGe,ghd);_.Rg=function hhd(a){return new Fjd(RD(a,75))};var W2=sfb(zye,'LayoutMetaDataService/lambda$3$Type',884);feb(885,1,BGe,ihd);_.Qg=function jhd(){return new P2b};var X2=sfb(zye,'LayoutMetaDataService/lambda$4$Type',885);feb(886,1,CGe,khd);_.Rg=function lhd(a){return new S2b(RD(a,140))};var Y2=sfb(zye,'LayoutMetaDataService/lambda$5$Type',886);feb(887,1,BGe,mhd);_.Qg=function nhd(){return new z3b};var Z2=sfb(zye,'LayoutMetaDataService/lambda$6$Type',887);feb(888,1,CGe,ohd);_.Rg=function phd(a){return new B3b(RD(a,107))};var $2=sfb(zye,'LayoutMetaDataService/lambda$7$Type',888);feb(889,1,BGe,qhd);_.Qg=function rhd(){return new dtd};var _2=sfb(zye,'LayoutMetaDataService/lambda$8$Type',889);feb(890,1,CGe,shd);_.Rg=function thd(a){return new etd(RD(a,385))};var a3=sfb(zye,'LayoutMetaDataService/lambda$9$Type',890);var V5=ufb(jze,'IProperty');feb(23,1,{34:1,701:1,23:1,149:1},Ahd);_.Fd=function Bhd(a){return vhd(this,RD(a,149))};_.Fb=function Chd(a){return ZD(a,23)?lhb(this.f,RD(a,23).f):ZD(a,149)&&lhb(this.f,RD(a,149).Pg())};_.Sg=function Dhd(){var a;if(ZD(this.b,4)){a=FId(this.b);if(a==null){throw Adb(new dgb(HGe+this.f+"'. "+"Make sure it's type is registered with the "+(lfb(b6),b6.k)+EGe))}return a}else{return this.b}};_.Og=function Ehd(){return this.d};_.Pg=function Fhd(){return this.f};_.xe=function Ghd(){return this.i};_.Hb=function Hhd(){return ohb(this.f)};_.Ib=function Ihd(){return 'Layout Option: '+this.f};var f3=sfb(zye,'LayoutOptionData',23);feb(24,1,{},Shd);var c3=sfb(zye,'LayoutOptionData/Builder',24);feb(170,22,{3:1,34:1,22:1,170:1},Zhd);var Thd,Uhd,Vhd,Whd,Xhd;var d3=tfb(zye,'LayoutOptionData/Target',170,WI,_hd,$hd);var aid;feb(285,22,{3:1,34:1,22:1,285:1},lid);var cid,did,eid,fid,gid,hid,iid,jid;var e3=tfb(zye,'LayoutOptionData/Type',285,WI,nid,mid);var oid;var qid;var sid;feb(116,1,{116:1},Tid,Uid,Vid);_.Fb=function Wid(a){var b;if(a==null||!ZD(a,116)){return false}b=RD(a,116);return Fvb(this.c,b.c)&&Fvb(this.d,b.d)&&Fvb(this.b,b.b)&&Fvb(this.a,b.a)};_.Hb=function Xid(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.c,this.d,this.b,this.a]))};_.Ib=function Yid(){return 'Rect[x='+this.c+',y='+this.d+',w='+this.b+',h='+this.a+']'};_.a=0;_.b=0;_.c=0;_.d=0;var j3=sfb(_Ae,'ElkRectangle',116);feb(8,1,{3:1,4:1,8:1,423:1},pjd,qjd,rjd,sjd);_.Fb=function tjd(a){return djd(this,a)};_.Hb=function ujd(){return Nfb(this.a)+pgb(Nfb(this.b))};_.cg=function wjd(b){var c,d,e,f;e=0;while(e<b.length&&vjd((BFb(e,b.length),b.charCodeAt(e)),YAe)){++e}c=b.length;while(c>0&&vjd((BFb(c-1,b.length),b.charCodeAt(c-1)),ZAe)){--c}if(e>=c){throw Adb(new agb('The given string does not contain any numbers.'))}f=vhb((AFb(e,c,b.length),b.substr(e,c-e)),',|;|\r|\n');if(f.length!=2){throw Adb(new agb('Exactly two numbers are expected, '+f.length+' were found.'))}try{this.a=Neb(Dhb(f[0]));this.b=Neb(Dhb(f[1]))}catch(a){a=zdb(a);if(ZD(a,130)){d=a;throw Adb(new agb($Ae+d))}else throw Adb(a)}};_.Ib=function yjd(){return '('+this.a+','+this.b+')'};_.a=0;_.b=0;var l3=sfb(_Ae,'KVector',8);feb(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},Ejd,Fjd,Gjd);_.Pc=function Jjd(){return Djd(this)};_.cg=function Hjd(b){var c,d,e,f,g,h;e=vhb(b,',|;|\\(|\\)|\\[|\\]|\\{|\\}| |\t|\n');Xub(this);try{d=0;g=0;f=0;h=0;while(d<e.length){if(e[d]!=null&&Dhb(e[d]).length>0){g%2==0?(f=Neb(e[d])):(h=Neb(e[d]));g>0&&g%2!=0&&Mub(this,new rjd(f,h));++g}++d}}catch(a){a=zdb(a);if(ZD(a,130)){c=a;throw Adb(new agb('The given string does not match the expected format for vectors.'+c))}else throw Adb(a)}};_.Ib=function Kjd(){var a,b,c;a=new dib('(');b=Sub(this,0);while(b.b!=b.d.c){c=RD(evb(b),8);Zhb(a,c.a+','+c.b);b.b!=b.d.c&&(a.a+='; ',a)}return (a.a+=')',a).a};var k3=sfb(_Ae,'KVectorChain',75);feb(255,22,{3:1,34:1,22:1,255:1},Sjd);var Ljd,Mjd,Njd,Ojd,Pjd,Qjd;var n3=tfb(JGe,'Alignment',255,WI,Ujd,Tjd);var Vjd;feb(991,1,Eye,jkd);_.hf=function kkd(a){ikd(a)};var Xjd,Yjd,Zjd,$jd,_jd,akd,bkd,ckd,dkd,ekd,fkd,gkd;var p3=sfb(JGe,'BoxLayouterOptions',991);feb(992,1,{},lkd);_.sf=function mkd(){var a;return a=new jrd,a};_.tf=function nkd(a){};var o3=sfb(JGe,'BoxLayouterOptions/BoxFactory',992);feb(297,22,{3:1,34:1,22:1,297:1},vkd);var okd,pkd,qkd,rkd,skd,tkd;var q3=tfb(JGe,'ContentAlignment',297,WI,xkd,wkd);var ykd;feb(699,1,Eye,vmd);_.hf=function wmd(a){Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,OGe),''),'Layout Algorithm'),'Select a specific layout algorithm.'),(kid(),iid)),qJ),xsb((Yhd(),Whd)))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,PGe),''),'Resolved Layout Algorithm'),'Meta data associated with the selected algorithm.'),hid),D2),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MDe),''),'Alignment'),'Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm.'),Ckd),eid),n3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,Dze),''),'Aspect Ratio'),'The desired aspect ratio of the drawing, that is the quotient of width by height.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,QGe),''),'Bend Points'),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),hid),k3),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YDe),''),'Content Alignment'),'Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option.'),Lkd),fid),q3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,LDe),''),'Debug Mode'),'Whether additional debug information shall be generated.'),(Geb(),false)),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,PDe),''),eze),'Overall direction of edges: horizontal (right / left) or vertical (down / up).'),Okd),eid),s3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kDe),''),'Edge Routing'),'What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline.'),Tkd),eid),u3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,MGe),''),'Expand Nodes'),'If active, nodes are expanded to fill the area of their parent.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fDe),''),'Hierarchy Handling'),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),Ykd),eid),y3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Eze),''),'Padding'),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),uld),hid),i3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dAe),''),'Interactive'),'Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iEe),''),'interactive Layout'),'Whether the graph should be changeable interactively and by setting constraints'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gAe),''),'Omit Node Micro Layout'),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eAe),''),'Port Constraints'),'Defines constraints of the position of the ports of a node.'),Ild),eid),C3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,fEe),''),'Position'),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),hid),l3),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,$ze),''),'Priority'),'Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used.'),gid),bJ),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,bAe),''),'Randomization Seed'),'Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time).'),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cAe),''),'Separate Connected Components'),'Whether each connected component should be processed separately.'),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZDe),''),'Junction Points'),'This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order.'),dld),hid),k3),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aEe),''),'Comment Box'),'Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bEe),''),'Hypernode'),'Whether the node should be handled as a hypernode.'),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,RGe),''),'Label Manager'),"Label managers can shorten labels upon a layout algorithm's request."),hid),g3),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gEe),''),'Margins'),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),fld),hid),h3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,JDe),''),'No Layout'),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),false),cid),QI),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd,Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SGe),''),'Scale Factor'),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),did),VI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,TGe),''),'Child Area Width'),'The width of the area occupied by the laid out children of a node.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,UGe),''),'Child Area Height'),'The height of the area occupied by the laid out children of a node.'),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,mAe),''),yGe),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),false),cid),QI),xsb(Whd))));zgd(a,mAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,VGe),''),'Animate'),'Whether the shift from the old layout to the new computed layout shall be animated.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,WGe),''),'Animation Time Factor'),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),sgb(100)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,XGe),''),'Layout Ancestors'),'Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,YGe),''),'Maximal Animation Time'),'The maximal time for animations, in milliseconds.'),sgb(4000)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ZGe),''),'Minimal Animation Time'),'The minimal time for animations, in milliseconds.'),sgb(400)),gid),bJ),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$Ge),''),'Progress Bar'),'Whether a progress bar shall be displayed during layout computations.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_Ge),''),'Validate Graph'),'Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aHe),''),'Validate Options'),'Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user.'),true),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,bHe),''),'Zoom to Fit'),'Whether the zoom level shall be set to view the whole diagram after layout.'),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NGe),'box'),'Box Layout Mode'),'Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better.'),Gkd),eid),R3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,xDe),lDe),'Comment Comment Spacing'),'Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,yDe),lDe),'Comment Node Spacing'),'Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Bze),lDe),'Components Spacing'),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,zDe),lDe),'Edge Spacing'),'Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,aAe),lDe),'Edge Label Spacing'),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ADe),lDe),'Edge Node Spacing'),'Spacing to be preserved between nodes and edges.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,BDe),lDe),'Label Spacing'),'Determines the amount of space to be left between two labels of the same graph element.'),0),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,EDe),lDe),'Label Node Spacing'),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CDe),lDe),'Horizontal spacing between Label and Port'),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,DDe),lDe),'Vertical spacing between Label and Port'),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,_ze),lDe),'Node Spacing'),'The minimal distance to be preserved between each two nodes.'),20),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,FDe),lDe),'Node Self Loop Spacing'),'Spacing to be preserved between a node and its self loops.'),10),did),VI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,GDe),lDe),'Port Spacing'),'Spacing between pairs of ports of the same node.'),10),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,HDe),lDe),'Individual Spacing'),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),hid),l4),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Thd,Xhd,Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hEe),lDe),'Additional Port Space'),'Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border.'),imd),hid),h3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,eEe),hHe),'Layout Partition'),'Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction).'),gid),bJ),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,eEe,dEe,yld);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,dEe),hHe),'Layout Partitioning'),'Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle.'),wld),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,QDe),iHe),'Node Label Padding'),'Define padding for node labels that are placed inside of a node.'),hld),hid),i3),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,kAe),iHe),'Node Label Placement'),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),jld),fid),A3),ysb(Vhd,cD(WC(d3,1),jwe,170,0,[Uhd])))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,TDe),jHe),'Port Alignment'),'Defines the default port distribution for a node. May be overridden for each side individually.'),Ald),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,UDe),jHe),'Port Alignment (North)'),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,VDe),jHe),'Port Alignment (South)'),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,WDe),jHe),'Port Alignment (West)'),"Defines how ports on the western side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,XDe),jHe),'Port Alignment (East)'),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),eid),B3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,jAe),kHe),'Node Size Constraints'),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),lld),fid),H3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,iAe),kHe),'Node Size Options'),'Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications.'),qld),fid),I3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,CAe),kHe),'Node Size Minimum'),'The minimal size to which a node can be reduced.'),old),hid),l3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,hAe),kHe),'Fixed Graph Size'),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),false),cid),QI),xsb(Whd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,$De),vDe),'Edge Label Placement'),'Gives a hint on where to put edge labels.'),Rkd),eid),t3),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fAe),vDe),'Inline Edge Labels'),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),false),cid),QI),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cHe),'font'),'Font Name'),'Font name used for a label.'),iid),qJ),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,dHe),'font'),'Font Size'),'Font size used for a label.'),gid),bJ),xsb(Uhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,cEe),lHe),'Port Anchor Offset'),'The offset to the port position where connections shall be attached.'),hid),l3),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,_De),lHe),'Port Index'),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),gid),bJ),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,KDe),lHe),'Port Side'),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),Pld),eid),E3),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Khd(Ohd(Lhd(Mhd(new Shd,IDe),lHe),'Port Border Offset'),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),did),VI),xsb(Xhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,lAe),mHe),'Port Label Placement'),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),Mld),fid),D3),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,RDe),mHe),'Port Labels Next to Port'),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,SDe),mHe),'Treat Port Labels as Group'),'If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port.'),true),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,nAe),nHe),'Topdown Scale Factor'),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),did),VI),xsb(Whd))));zgd(a,nAe,qAe,rmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,eHe),nHe),'Topdown Size Approximator'),'The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size.'),null),eid),M3),xsb(Vhd))));zgd(a,eHe,qAe,tmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,oAe),nHe),'Topdown Hierarchical Node Width'),'The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself.'),150),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,oAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,pAe),nHe),'Topdown Hierarchical Node Aspect Ratio'),'The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself.'),1.414),did),VI),ysb(Whd,cD(WC(d3,1),jwe,170,0,[Vhd])))));zgd(a,pAe,qAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,qAe),nHe),'Topdown Node Type'),'The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes.'),null),eid),J3),xsb(Vhd))));zgd(a,qAe,hAe,null);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,fHe),nHe),'Topdown Scale Cap'),'Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes.'),1),did),VI),xsb(Whd))));zgd(a,fHe,qAe,pmd);Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,NDe),oHe),'Activate Inside Self Loops'),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),false),cid),QI),xsb(Vhd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,ODe),oHe),'Inside Self Loop'),'Whether a self loop should be routed inside a node instead of around that node.'),false),cid),QI),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,Cze),'edge'),'Edge Thickness'),'The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it.'),1),did),VI),xsb(Thd))));Egd(a,new Ahd(Qhd(Phd(Rhd(Jhd(Khd(Ohd(Lhd(Mhd(new Shd,gHe),'edge'),'Edge Type'),'The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations.'),Vkd),eid),v3),xsb(Thd))));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,sxe),'Layered'),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'org.eclipse.elk.orthogonal'),'Orthogonal'),'Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia \'86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,Zze),'Force'),'Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'org.eclipse.elk.circle'),'Circle'),'Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,$Ee),'Tree'),'Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,'org.eclipse.elk.planar'),'Planar'),'Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable.')));Dgd(a,new fgd(mgd(ogd(ngd(new pgd,CFe),'Radial'),'Radial layout algorithms usually position the nodes of the graph on concentric circles.')));wnd((new xnd,a));ikd((new jkd,a));Gpd((new Hpd,a))};var Akd,Bkd,Ckd,Dkd,Ekd,Fkd,Gkd,Hkd,Ikd,Jkd,Kkd,Lkd,Mkd,Nkd,Okd,Pkd,Qkd,Rkd,Skd,Tkd,Ukd,Vkd,Wkd,Xkd,Ykd,Zkd,$kd,_kd,ald,bld,cld,dld,eld,fld,gld,hld,ild,jld,kld,lld,mld,nld,old,pld,qld,rld,sld,tld,uld,vld,wld,xld,yld,zld,Ald,Bld,Cld,Dld,Eld,Fld,Gld,Hld,Ild,Jld,Kld,Lld,Mld,Nld,Old,Pld,Qld,Rld,Sld,Tld,Uld,Vld,Wld,Xld,Yld,Zld,$ld,_ld,amd,bmd,cmd,dmd,emd,fmd,gmd,hmd,imd,jmd,kmd,lmd,mmd,nmd,omd,pmd,qmd,rmd,smd,tmd;var r3=sfb(JGe,'CoreOptions',699);feb(88,22,{3:1,34:1,22:1,88:1},Gmd);var xmd,ymd,zmd,Amd,Bmd;var s3=tfb(JGe,eze,88,WI,Imd,Hmd);var Jmd;feb(278,22,{3:1,34:1,22:1,278:1},Pmd);var Lmd,Mmd,Nmd;var t3=tfb(JGe,'EdgeLabelPlacement',278,WI,Rmd,Qmd);var Smd;feb(223,22,{3:1,34:1,22:1,223:1},Zmd);var Umd,Vmd,Wmd,Xmd;var u3=tfb(JGe,'EdgeRouting',223,WI,_md,$md);var and;feb(321,22,{3:1,34:1,22:1,321:1},jnd);var cnd,dnd,end,fnd,gnd,hnd;var v3=tfb(JGe,'EdgeType',321,WI,lnd,knd);var mnd;feb(989,1,Eye,xnd);_.hf=function ynd(a){wnd(a)};var ond,pnd,qnd,rnd,snd,tnd,und;var x3=sfb(JGe,'FixedLayouterOptions',989);feb(990,1,{},znd);_.sf=function And(){var a;return a=new btd,a};_.tf=function Bnd(a){};var w3=sfb(JGe,'FixedLayouterOptions/FixedFactory',990);feb(346,22,{3:1,34:1,22:1,346:1},Gnd);var Cnd,Dnd,End;var y3=tfb(JGe,'HierarchyHandling',346,WI,Ind,Hnd);var Jnd;feb(290,22,{3:1,34:1,22:1,290:1},Rnd);var Lnd,Mnd,Nnd,Ond;var z3=tfb(JGe,'LabelSide',290,WI,Tnd,Snd);var Und;feb(95,22,{3:1,34:1,22:1,95:1},eod);var Wnd,Xnd,Ynd,Znd,$nd,_nd,aod,bod,cod;var A3=tfb(JGe,'NodeLabelPlacement',95,WI,hod,god);var iod;feb(256,22,{3:1,34:1,22:1,256:1},qod);var kod,lod,mod,nod,ood;var B3=tfb(JGe,'PortAlignment',256,WI,sod,rod);var tod;feb(101,22,{3:1,34:1,22:1,101:1},Eod);var vod,wod,xod,yod,zod,Aod;var C3=tfb(JGe,'PortConstraints',101,WI,God,Fod);var Hod;feb(279,22,{3:1,34:1,22:1,279:1},Qod);var Jod,Kod,Lod,Mod,Nod,Ood;var D3=tfb(JGe,'PortLabelPlacement',279,WI,Uod,Tod);var Vod;feb(64,22,{3:1,34:1,22:1,64:1},upd);var Xod,Yod,Zod,$od,_od,apd,bpd,cpd,dpd,epd,fpd,gpd,hpd,ipd,jpd,kpd,lpd,mpd,npd,opd,ppd;var E3=tfb(JGe,'PortSide',64,WI,xpd,wpd);var ypd;feb(993,1,Eye,Hpd);_.hf=function Ipd(a){Gpd(a)};var Apd,Bpd,Cpd,Dpd,Epd;var G3=sfb(JGe,'RandomLayouterOptions',993);feb(994,1,{},Jpd);_.sf=function Kpd(){var a;return a=new eud,a};_.tf=function Lpd(a){};var F3=sfb(JGe,'RandomLayouterOptions/RandomFactory',994);feb(386,22,{3:1,34:1,22:1,386:1},Rpd);var Mpd,Npd,Opd,Ppd;var H3=tfb(JGe,'SizeConstraint',386,WI,Tpd,Spd);var Upd;feb(264,22,{3:1,34:1,22:1,264:1},eqd);var Wpd,Xpd,Ypd,Zpd,$pd,_pd,aqd,bqd,cqd;var I3=tfb(JGe,'SizeOptions',264,WI,gqd,fqd);var hqd;feb(280,22,{3:1,34:1,22:1,280:1},nqd);var jqd,kqd,lqd;var J3=tfb(JGe,'TopdownNodeTypes',280,WI,pqd,oqd);var qqd;feb(347,22,rHe);var sqd,tqd;var M3=tfb(JGe,'TopdownSizeApproximator',347,WI,xqd,wqd);feb(987,347,rHe,zqd);_.Tg=function Aqd(a){return yqd(a)};var K3=tfb(JGe,'TopdownSizeApproximator/1',987,M3,null,null);feb(988,347,rHe,Bqd);_.Tg=function Cqd(b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B,C,D;c=RD(Gxd(b,(umd(),Tld)),143);A=(bvd(),o=new ACd,o);zxd(A,b);B=new Tsb;for(g=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));g.e!=g.i.gc();){e=RD(bMd(g),27);t=(n=new ACd,n);yCd(t,A);zxd(t,e);D=yqd(e);zyd(t,$wnd.Math.max(e.g,D.a),$wnd.Math.max(e.f,D.b));rtb(B.f,e,t)}for(f=new dMd((!b.a&&(b.a=new C5d(J4,b,10,11)),b.a));f.e!=f.i.gc();){e=RD(bMd(f),27);for(l=new dMd((!e.e&&(e.e=new Yie(G4,e,7,4)),e.e));l.e!=l.i.gc();){k=RD(bMd(l),74);v=RD(Wd(qtb(B.f,e)),27);w=RD(Wjb(B,QHd((!k.c&&(k.c=new Yie(E4,k,5,8)),k.c),0)),27);u=(m=new rzd,m);WGd((!u.b&&(u.b=new Yie(E4,u,4,7)),u.b),v);WGd((!u.c&&(u.c=new Yie(E4,u,5,8)),u.c),w);pzd(u,vCd(v));zxd(u,k)}}q=RD(ltd(c.f),205);try{q.rf(A,new ztd);mtd(c.f,q)}catch(a){a=zdb(a);if(ZD(a,103)){p=a;throw Adb(p)}else throw Adb(a)}Hxd(A,Ikd)||Hxd(A,Hkd)||psd(A);j=Kfb(UD(Gxd(A,Ikd)));i=Kfb(UD(Gxd(A,Hkd)));h=j/i;d=Kfb(UD(Gxd(A,lmd)))*$wnd.Math.sqrt((!A.a&&(A.a=new C5d(J4,A,10,11)),A.a).i);C=RD(Gxd(A,tld),107);s=C.b+C.c+1;r=C.d+C.a+1;return new rjd($wnd.Math.max(s,d),$wnd.Math.max(r,d/h))};var L3=tfb(JGe,'TopdownSizeApproximator/2',988,M3,null,null);var Dqd;feb(344,1,{871:1},Oqd);_.Ug=function Pqd(a,b){return Fqd(this,a,b)};_.Vg=function Qqd(){Hqd(this)};_.Wg=function Rqd(){return this.q};_.Xg=function Sqd(){return !this.f?null:Hob(this.f)};_.Yg=function Tqd(){return Hob(this.a)};_.Zg=function Uqd(){return this.p};_.$g=function Vqd(){return false};_._g=function Wqd(){return this.n};_.ah=function Xqd(){return this.p!=null&&!this.b};_.bh=function Yqd(a){var b;if(this.n){b=a;Rmb(this.f,b)}};_.dh=function Zqd(a,b){var c,d;this.n&&!!a&&Jqd(this,(c=new Zje,d=Rje(c,a),Yje(c),d),(ttd(),qtd))};_.eh=function $qd(a){var b;if(this.b){return null}else{b=Gqd(this,this.g);Mub(this.a,b);b.i=this;this.d=a;return b}};_.fh=function _qd(a){a>0&&!this.b&&Iqd(this,a)};_.b=false;_.c=0;_.d=-1;_.e=null;_.f=null;_.g=-1;_.j=false;_.k=false;_.n=false;_.o=0;_.q=0;_.r=0;var O3=sfb(jEe,'BasicProgressMonitor',344);feb(717,205,oze,jrd);_.rf=function nrd(a,b){crd(a,b)};var V3=sfb(jEe,'BoxLayoutProvider',717);feb(983,1,fye,prd);_.Ne=function qrd(a,b){return ord(this,RD(a,27),RD(b,27))};_.Fb=function rrd(a){return this===a};_.Oe=function srd(){return new Frb(this)};_.a=false;var P3=sfb(jEe,'BoxLayoutProvider/1',983);feb(163,1,{163:1},zrd,Ard);_.Ib=function Brd(){return this.c?zCd(this.c):Fe(this.b)};var Q3=sfb(jEe,'BoxLayoutProvider/Group',163);feb(320,22,{3:1,34:1,22:1,320:1},Hrd);var Crd,Drd,Erd,Frd;var R3=tfb(jEe,'BoxLayoutProvider/PackingMode',320,WI,Jrd,Ird);var Krd;feb(984,1,fye,Mrd);_.Ne=function Nrd(a,b){return krd(RD(a,163),RD(b,163))};_.Fb=function Ord(a){return this===a};_.Oe=function Prd(){return new Frb(this)};var S3=sfb(jEe,'BoxLayoutProvider/lambda$0$Type',984);feb(985,1,fye,Qrd);_.Ne=function Rrd(a,b){return lrd(RD(a,163),RD(b,163))};_.Fb=function Srd(a){return this===a};_.Oe=function Trd(){return new Frb(this)};var T3=sfb(jEe,'BoxLayoutProvider/lambda$1$Type',985);feb(986,1,fye,Urd);_.Ne=function Vrd(a,b){return mrd(RD(a,163),RD(b,163))};_.Fb=function Wrd(a){return this===a};_.Oe=function Xrd(){return new Frb(this)};var U3=sfb(jEe,'BoxLayoutProvider/lambda$2$Type',986);feb(1384,1,{845:1},Yrd);_.Mg=function Zrd(a,b){return GCc(),!ZD(b,167)||ued((hed(),ged,RD(a,167)),b)};var W3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type',1384);feb(1385,1,Qve,$rd);_.Cd=function _rd(a){JCc(this.a,RD(a,149))};var X3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type',1385);feb(1386,1,Qve,asd);_.Cd=function bsd(a){RD(a,96);GCc()};var Y3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type',1386);feb(1390,1,Qve,csd);_.Cd=function dsd(a){KCc(this.a,RD(a,96))};var Z3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type',1390);feb(1388,1,nwe,esd);_.Mb=function fsd(a){return LCc(this.a,this.b,RD(a,149))};var $3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type',1388);feb(1387,1,nwe,gsd);_.Mb=function hsd(a){return NCc(this.a,this.b,RD(a,845))};var _3=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type',1387);feb(1389,1,Qve,isd);_.Cd=function jsd(a){MCc(this.a,this.b,RD(a,149))};var a4=sfb(jEe,'ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type',1389);feb(947,1,{},Lsd);_.Kb=function Msd(a){return Ksd(a)};_.Fb=function Nsd(a){return this===a};var c4=sfb(jEe,'ElkUtil/lambda$0$Type',947);feb(948,1,Qve,Osd);_.Cd=function Psd(a){ysd(this.a,this.b,RD(a,74))};_.a=0;_.b=0;var d4=sfb(jEe,'ElkUtil/lambda$1$Type',948);feb(949,1,Qve,Qsd);_.Cd=function Rsd(a){zsd(this.a,this.b,RD(a,166))};_.a=0;_.b=0;var e4=sfb(jEe,'ElkUtil/lambda$2$Type',949);feb(950,1,Qve,Ssd);_.Cd=function Tsd(a){Asd(this.a,this.b,RD(a,135))};_.a=0;_.b=0;var f4=sfb(jEe,'ElkUtil/lambda$3$Type',950);feb(951,1,Qve,Usd);_.Cd=function Vsd(a){Bsd(this.a,RD(a,377))};var g4=sfb(jEe,'ElkUtil/lambda$4$Type',951);feb(325,1,{34:1,325:1},Xsd);_.Fd=function Ysd(a){return Wsd(this,RD(a,242))};_.Fb=function Zsd(a){var b;if(ZD(a,325)){b=RD(a,325);return this.a==b.a}return false};_.Hb=function $sd(){return eE(this.a)};_.Ib=function _sd(){return this.a+' (exclusive)'};_.a=0;var h4=sfb(jEe,'ExclusiveBounds/ExclusiveLowerBound',325);feb(1119,205,oze,btd);_.rf=function ctd(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,A,B;b.Ug('Fixed Layout',1);f=RD(Gxd(a,(umd(),Skd)),223);l=0;m=0;for(s=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));s.e!=s.i.gc();){q=RD(bMd(s),27);B=RD(Gxd(q,(vnd(),und)),8);if(B){Byd(q,B.a,B.b);if(RD(Gxd(q,pnd),181).Hc((Qpd(),Mpd))){n=RD(Gxd(q,rnd),8);n.a>0&&n.b>0&&Esd(q,n.a,n.b,true,true)}}l=$wnd.Math.max(l,q.i+q.g);m=$wnd.Math.max(m,q.j+q.f);for(j=new dMd((!q.n&&(q.n=new C5d(I4,q,1,7)),q.n));j.e!=j.i.gc();){h=RD(bMd(j),135);B=RD(Gxd(h,und),8);!!B&&Byd(h,B.a,B.b);l=$wnd.Math.max(l,q.i+h.i+h.g);m=$wnd.Math.max(m,q.j+h.j+h.f)}for(v=new dMd((!q.c&&(q.c=new C5d(K4,q,9,9)),q.c));v.e!=v.i.gc();){u=RD(bMd(v),123);B=RD(Gxd(u,und),8);!!B&&Byd(u,B.a,B.b);w=q.i+u.i;A=q.j+u.j;l=$wnd.Math.max(l,w+u.g);m=$wnd.Math.max(m,A+u.f);for(i=new dMd((!u.n&&(u.n=new C5d(I4,u,1,7)),u.n));i.e!=i.i.gc();){h=RD(bMd(i),135);B=RD(Gxd(h,und),8);!!B&&Byd(h,B.a,B.b);l=$wnd.Math.max(l,w+h.i+h.g);m=$wnd.Math.max(m,A+h.j+h.f)}}for(e=new is(Mr(zGd(q).a.Kc(),new ir));gs(e);){c=RD(hs(e),74);k=atd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}for(d=new is(Mr(yGd(q).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);if(vCd(JGd(c))!=a){k=atd(c);l=$wnd.Math.max(l,k.a);m=$wnd.Math.max(m,k.b)}}}if(f==(Ymd(),Umd)){for(r=new dMd((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a));r.e!=r.i.gc();){q=RD(bMd(r),27);for(d=new is(Mr(zGd(q).a.Kc(),new ir));gs(d);){c=RD(hs(d),74);g=tsd(c);g.b==0?Ixd(c,cld,null):Ixd(c,cld,g)}}}if(!Heb(TD(Gxd(a,(vnd(),qnd))))){t=RD(Gxd(a,snd),107);p=l+t.b+t.c;o=m+t.d+t.a;Esd(a,p,o,true,true)}b.Vg()};var i4=sfb(jEe,'FixedLayoutProvider',1119);feb(385,137,{3:1,423:1,385:1,96:1,137:1},dtd,etd);_.cg=function htd(b){var c,d,e,f,g,h,i,j,k;if(!b){return}try{j=vhb(b,';,;');for(g=j,h=0,i=g.length;h<i;++h){f=g[h];d=vhb(f,'\\:');e=vgd(ygd(),d[0]);if(!e){throw Adb(new agb('Invalid option id: '+d[0]))}k=zhd(e,d[1]);if(k==null){throw Adb(new agb('Invalid option value: '+d[1]))}k==null?(!this.q&&(this.q=new Tsb),_jb(this.q,e)):(!this.q&&(this.q=new Tsb),Zjb(this.q,e,k))}}catch(a){a=zdb(a);if(ZD(a,103)){c=a;throw Adb(new bgb(c))}else throw Adb(a)}};_.Ib=function itd(){var a;a=WD(zDb(GDb((!this.q?(yob(),yob(),wob):this.q).vc().Oc(),new jtd),sBb(new hCb,new fCb,new RBb,new TBb,cD(WC(QL,1),jwe,108,0,[]))));return a};var l4=sfb(jEe,'IndividualSpacings',385);feb(982,1,{},jtd);_.Kb=function ktd(a){return gtd(RD(a,44))};var k4=sfb(jEe,'IndividualSpacings/lambda$0$Type',982);feb(718,1,{},ntd);_.c=0;var m4=sfb(jEe,'InstancePool',718);feb(1835,1,{},otd);var o4=sfb(jEe,'LoggedGraph',1835);feb(415,22,{3:1,34:1,22:1,415:1},utd);var ptd,qtd,rtd,std;var n4=tfb(jEe,'LoggedGraph/Type',415,WI,wtd,vtd);var xtd;feb(1063,1,{871:1},ztd);_.Ug=function Atd(a,b){return false};_.Vg=function Btd(){};_.Wg=function Ctd(){return 0};_.Xg=function Dtd(){return null};_.Yg=function Etd(){return null};_.Zg=function Ftd(){return null};_.$g=function Gtd(){return false};_._g=function Htd(){return false};_.ah=function Itd(){return false};_.bh=function Jtd(a){};_.dh=function Ktd(a,b){};_.eh=function Ltd(a){return this};_.fh=function Mtd(a){};var p4=sfb(jEe,'NullElkProgressMonitor',1063);feb(42,1,{20:1,42:1},Ptd);_.Jc=function Rtd(a){xgb(this,a)};_.Fb=function Qtd(a){var b,c,d;if(ZD(a,42)){c=RD(a,42);b=this.a==null?c.a==null:pb(this.a,c.a);d=this.b==null?c.b==null:pb(this.b,c.b);return b&&d}else{return false}};_.Hb=function Std(){var a,b,c,d,e,f;c=this.a==null?0:tb(this.a);a=c&Bwe;b=c&-65536;f=this.b==null?0:tb(this.b);d=f&Bwe;e=f&-65536;return a^e>>16&Bwe|b^d<<16};_.Kc=function Ttd(){return new Vtd(this)};_.Ib=function Utd(){return this.a==null&&this.b==null?'pair(null,null)':this.a==null?'pair(null,'+jeb(this.b)+')':this.b==null?'pair('+jeb(this.a)+',null)':'pair('+jeb(this.a)+','+jeb(this.b)+')'};var r4=sfb(jEe,'Pair',42);feb(995,1,Ave,Vtd);_.Nb=function Wtd(a){Ztb(this,a)};_.Ob=function Xtd(){return !this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)};_.Pb=function Ytd(){if(!this.c&&!this.b&&this.a.a!=null){this.b=true;return this.a.a}else if(!this.c&&this.a.b!=null){this.c=true;return this.a.b}throw Adb(new Dvb)};_.Qb=function Ztd(){this.c&&this.a.b!=null?(this.a.b=null):this.b&&this.a.a!=null&&(this.a.a=null);throw Adb(new cgb)};_.b=false;_.c=false;var q4=sfb(jEe,'Pair/1',995);feb(454,1,{454:1},$td);_.Fb=function _td(a){return Fvb(this.a,RD(a,454).a)&&Fvb(this.c,RD(a,454).c)&&Fvb(this.d,RD(a,454).d)&&Fvb(this.b,RD(a,454).b)};_.Hb=function aud(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.a,this.c,this.d,this.b]))};_.Ib=function bud(){return '('+this.a+pve+this.c+pve+this.d+pve+this.b+')'};var s4=sfb(jEe,'Quadruple',454);feb(1108,205,oze,eud);_.rf=function fud(a,b){var c,d,e,f,g;b.Ug('Random Layout',1);if((!a.a&&(a.a=new C5d(J4,a,10,11)),a.a).i==0){b.Vg();return}f=RD(Gxd(a,(Fpd(),Dpd)),17);!!f&&f.a!=0?(e=new Pwb(f.a)):(e=new Owb);c=Mfb(UD(Gxd(a,Apd)));g=Mfb(UD(Gxd(a,Epd)));d=RD(Gxd(a,Bpd),107);dud(a,e,c,g,d);b.Vg()};var t4=sfb(jEe,'RandomLayoutProvider',1108);feb(240,1,{240:1},gud);_.Fb=function hud(a){return Fvb(this.a,RD(a,240).a)&&Fvb(this.b,RD(a,240).b)&&Fvb(this.c,RD(a,240).c)};_.Hb=function iud(){return Tnb(cD(WC(jJ,1),rve,1,5,[this.a,this.b,this.c]))};_.Ib=function jud(){return '('+this.a+pve+this.b+pve+this.c+')'};var u4=sfb(jEe,'Triple',240);var kud;feb(562,1,{});_.Lf=function oud(){return new rjd(this.f.i,this.f.j)};_.of=function pud(a){if(hGd(a,(umd(),Gld))){return Gxd(this.f,mud)}return Gxd(this.f,a)};_.Mf=function qud(){return new rjd(this.f.g,this.f.f)};_.Nf=function rud(){return this.g};_.pf=function sud(a){return Hxd(this.f,a)};_.Of=function tud(a){Dyd(this.f,a.a);Eyd(this.f,a.b)};_.Pf=function uud(a){Cyd(this.f,a.a);Ayd(this.f,a.b)};_.Qf=function vud(a){this.g=a};_.g=0;var mud;var v4=sfb(uHe,'ElkGraphAdapters/AbstractElkGraphElementAdapter',562);feb(563,1,{853:1},wud);_.Rf=function xud(){var a,b;if(!this.b){this.b=fv(iyd(this.a).i);for(b=new dMd(iyd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),135);Rmb(this.b,new Bud(a))}}return this.b};_.b=null;var w4=sfb(uHe,'ElkGraphAdapters/ElkEdgeAdapter',563);feb(308,562,{},zud);_.Sf=function Aud(){return yud(this)};_.a=null;var x4=sfb(uHe,'ElkGraphAdapters/ElkGraphAdapter',308);feb(640,562,{187:1},Bud);var y4=sfb(uHe,'ElkGraphAdapters/ElkLabelAdapter',640);feb(639,562,{695:1},Fud);_.Rf=function Iud(){return Cud(this)};_.Vf=function Jud(){var a;return a=RD(Gxd(this.f,(umd(),eld)),140),!a&&(a=new P2b),a};_.Xf=function Lud(){return Dud(this)};_.Zf=function Nud(a){var b;b=new S2b(a);Ixd(this.f,(umd(),eld),b)};_.$f=function Oud(a){Ixd(this.f,(umd(),tld),new B3b(a))};_.Tf=function Gud(){return this.d};_.Uf=function Hud(){var a,b;if(!this.a){this.a=new bnb;for(b=new is(Mr(yGd(RD(this.f,27)).a.Kc(),new ir));gs(b);){a=RD(hs(b),74);Rmb(this.a,new wud(a))}}return this.a};_.Wf=function Kud(){var a,b;if(!this.c){this.c=new bnb;for(b=new is(Mr(zGd(RD(this.f,27)).a.Kc(),new ir));gs(b);){a=RD(hs(b),74);Rmb(this.c,new wud(a))}}return this.c};_.Yf=function Mud(){return tCd(RD(this.f,27)).i!=0||Heb(TD(RD(this.f,27).of((umd(),$kd))))};_._f=function Pud(){Eud(this,(lud(),kud))};_.a=null;_.b=null;_.c=null;_.d=null;_.e=null;var z4=sfb(uHe,'ElkGraphAdapters/ElkNodeAdapter',639);feb(1284,562,{852:1},Rud);_.Rf=function Tud(){return Qud(this)};_.Uf=function Sud(){var a,b;if(!this.a){this.a=ev(RD(this.f,123).hh().i);for(b=new dMd(RD(this.f,123).hh());b.e!=b.i.gc();){a=RD(bMd(b),74);Rmb(this.a,new wud(a))}}return this.a};_.Wf=function Uud(){var a,b;if(!this.c){this.c=ev(RD(this.f,123).ih().i);for(b=new dMd(RD(this.f,123).ih());b.e!=b.i.gc();){a=RD(bMd(b),74);Rmb(this.c,new wud(a))}}return this.c};_.ag=function Vud(){return RD(RD(this.f,123).of((umd(),Old)),64)};_.bg=function Wud(){var a,b,c,d,e,f,g,h;d=MCd(RD(this.f,123));for(c=new dMd(RD(this.f,123).ih());c.e!=c.i.gc();){a=RD(bMd(c),74);for(h=new dMd((!a.c&&(a.c=new Yie(E4,a,5,8)),a.c));h.e!=h.i.gc();){g=RD(bMd(h),84);if(NGd(AGd(g),d)){return true}else if(AGd(g)==d&&Heb(TD(Gxd(a,(umd(),_kd))))){return true}}}for(b=new dMd(RD(this.f,123).hh());b.e!=b.i.gc();){a=RD(bMd(b),74);for(f=new dMd((!a.b&&(a.b=new Yie(E4,a,4,7)),a.b));f.e!=f.i.gc();){e=RD(bMd(f),84);if(NGd(AGd(e),d)){return true}}}return false};_.a=null;_.b=null;_.c=null;var A4=sfb(uHe,'ElkGraphAdapters/ElkPortAdapter',1284);feb(1285,1,fye,Yud);_.Ne=function Zud(a,b){return Xud(RD(a,123),RD(b,123))};_.Fb=function $ud(a){return this===a};_.Oe=function _ud(){return new Frb(this)};var B4=sfb(uHe,'ElkGraphAdapters/PortComparator',1285);var r7=ufb(vHe,'EObject');var C4=ufb(wHe,xHe);var D4=ufb(wHe,yHe);var H4=ufb(wHe,zHe);var L4=ufb(wHe,'ElkShape');var E4=ufb(wHe,AHe);var G4=ufb(wHe,BHe);var F4=ufb(wHe,CHe);var p7=ufb(vHe,DHe);var n7=ufb(vHe,'EFactory');var avd;var q7=ufb(vHe,EHe);var t7=ufb(vHe,'EPackage');var cvd;var evd,fvd,gvd,hvd,ivd,jvd,kvd,lvd,mvd,nvd,ovd;var I4=ufb(wHe,FHe);var J4=ufb(wHe,GHe);var K4=ufb(wHe,HHe);feb(93,1,IHe);_.th=function rvd(){this.uh();return null};_.uh=function svd(){return null};_.vh=function tvd(){return this.uh(),false};_.wh=function uvd(){return false};_.xh=function vvd(a){qvd(this,a)};var g6=sfb(JHe,'BasicNotifierImpl',93);feb(99,93,RHe);_.Yh=function Dwd(){return Mvd(this)};_.yh=function bwd(a,b){return a};_.zh=function cwd(){throw Adb(new jib)};_.Ah=function dwd(a){var b;return b=Z5d(RD(vYd(this.Dh(),this.Fh()),19)),this.Ph().Th(this,b.n,b.f,a)};_.Bh=function ewd(a,b){throw Adb(new jib)};_.Ch=function fwd(a,b,c){return xvd(this,a,b,c)};_.Dh=function gwd(){var a;if(this.zh()){a=this.zh().Nk();if(a){return a}}return this.ii()};_.Eh=function hwd(){return yvd(this)};_.Fh=function iwd(){throw Adb(new jib)};_.Gh=function kwd(){var a,b;b=this.$h().Ok();!b&&this.zh().Tk(b=(N2d(),a=P$d(rYd(this.Dh())),a==null?M2d:new Q2d(this,a)));return b};_.Hh=function mwd(a,b){return a};_.Ih=function nwd(a){var b;b=a.pk();return !b?BYd(this.Dh(),a):a.Lj()};_.Jh=function owd(){var a;a=this.zh();return !a?null:a.Qk()};_.Kh=function pwd(){return !this.zh()?null:this.zh().Nk()};_.Lh=function qwd(a,b,c){return Dvd(this,a,b,c)};_.Mh=function rwd(a){return Evd(this,a)};_.Nh=function swd(a,b){return Fvd(this,a,b)};_.Oh=function twd(){var a;a=this.zh();return !!a&&a.Rk()};_.Ph=function uwd(){throw Adb(new jib)};_.Qh=function vwd(){return Hvd(this)};_.Rh=function wwd(a,b,c,d){return Ivd(this,a,b,d)};_.Sh=function xwd(a,b,c){var d;return d=RD(vYd(this.Dh(),b),69),d.wk().zk(this,this.hi(),b-this.ji(),a,c)};_.Th=function ywd(a,b,c,d){return Jvd(this,a,b,d)};_.Uh=function zwd(a,b,c){var d;return d=RD(vYd(this.Dh(),b),69),d.wk().Ak(this,this.hi(),b-this.ji(),a,c)};_.Vh=function Awd(){return !!this.zh()&&!!this.zh().Pk()};_.Wh=function Bwd(a){return Kvd(this,a)};_.Xh=function Cwd(a){return Lvd(this,a)};_.Zh=function Ewd(a){return Pvd(this,a)};_.$h=function Fwd(){throw Adb(new jib)};_._h=function Gwd(){return !this.zh()?null:this.zh().Pk()};_.ai=function Hwd(){return Hvd(this)};_.bi=function Iwd(a,b){Wvd(this,a,b)};_.ci=function Jwd(a){this.$h().Sk(a)};_.di=function Kwd(a){this.$h().Vk(a)};_.ei=function Lwd(a){this.$h().Uk(a)};_.fi=function Mwd(a,b){var c,d,e,f;f=this.Jh();if(!!f&&!!a){b=rLd(f.El(),this,b);f.Il(this)}d=this.Ph();if(d){if((jwd(this,this.Ph(),this.Fh()).Bb&txe)!=0){e=d.Qh();!!e&&(!a?e.Hl(this):!f&&e.Il(this))}else{b=(c=this.Fh(),c>=0?this.Ah(b):this.Ph().Th(this,-1-c,null,b));b=this.Ch(null,-1,b)}}this.di(a);return b};_.gi=function Nwd(a){var b,c,d,e,f,g,h,i;c=this.Dh();f=BYd(c,a);b=this.ji();if(f>=b){return RD(a,69).wk().Dk(this,this.hi(),f-b)}else if(f<=-1){g=Eee((lke(),jke),c,a);if(g){nke();RD(g,69).xk()||(g=zfe(Qee(jke,g)));e=(d=this.Ih(g),RD(d>=0?this.Lh(d,true,true):Qvd(this,g,true),160));i=g.Ik();if(i>1||i==-1){return RD(RD(e,220).Sl(a,false),79)}}else{throw Adb(new agb(KHe+a.xe()+NHe))}}else if(a.Jk()){return d=this.Ih(a),RD(d>=0?this.Lh(d,false,true):Qvd(this,a,false),79)}h=new NTd(this,a);return h};_.hi=function Owd(){return Yvd(this)};_.ii=function Pwd(){return (lTd(),kTd).S};_.ji=function Qwd(){return AYd(this.ii())};_.ki=function Rwd(a){$vd(this,a)};_.Ib=function Swd(){return awd(this)};var G7=sfb(SHe,'BasicEObjectImpl',99);var ZSd;feb(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1});_.li=function _wd(a){var b;b=Vwd(this);return b[a]};_.mi=function axd(a,b){var c;c=Vwd(this);bD(c,a,b)};_.ni=function bxd(a){var b;b=Vwd(this);bD(b,a,null)};_.th=function cxd(){return RD(Ywd(this,4),129)};_.uh=function dxd(){throw Adb(new jib)};_.vh=function exd(){return (this.Db&4)!=0};_.zh=function fxd(){throw Adb(new jib)};_.oi=function gxd(a){$wd(this,2,a)};_.Bh=function hxd(a,b){this.Db=b<<16|this.Db&255;this.oi(a)};_.Dh=function ixd(){return Uwd(this)};_.Fh=function jxd(){return this.Db>>16};_.Gh=function kxd(){var a,b;return N2d(),b=P$d(rYd((a=RD(Ywd(this,16),29),!a?this.ii():a))),b==null?(null,M2d):new Q2d(this,b)};_.wh=function lxd(){return (this.Db&1)==0};_.Jh=function mxd(){return RD(Ywd(this,128),2034)};_.Kh=function nxd(){return RD(Ywd(this,16),29)};_.Oh=function oxd(){return (this.Db&32)!=0};_.Ph=function pxd(){return RD(Ywd(this,2),54)};_.Vh=function qxd(){return (this.Db&64)!=0};_.$h=function rxd(){throw Adb(new jib)};_._h=function sxd(){return RD(Ywd(this,64),288)};_.ci=function txd(a){$wd(this,16,a)};_.di=function uxd(a){$wd(this,128,a)};_.ei=function vxd(a){$wd(this,64,a)};_.hi=function wxd(){return Wwd(this)};_.Db=0;var xab=sfb(SHe,'MinimalEObjectImpl',119);feb(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.oi=function xxd(a){this.Cb=a};_.Ph=function yxd(){return this.Cb};var wab=sfb(SHe,'MinimalEObjectImpl/Container',120);feb(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function Jxd(a,b,c){return Axd(this,a,b,c)};_.Uh=function Kxd(a,b,c){return Bxd(this,a,b,c)};_.Wh=function Lxd(a){return Cxd(this,a)};_.bi=function Mxd(a,b){Dxd(this,a,b)};_.ii=function Nxd(){return pvd(),ovd};_.ki=function Oxd(a){Exd(this,a)};_.nf=function Pxd(){return Fxd(this)};_.gh=function Qxd(){return !this.o&&(this.o=new DVd((pvd(),mvd),X4,this,0)),this.o};_.of=function Rxd(a){return Gxd(this,a)};_.pf=function Sxd(a){return Hxd(this,a)};_.qf=function Txd(a,b){return Ixd(this,a,b)};var M4=sfb(THe,'EMapPropertyHolderImpl',2083);feb(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Xxd);_.Lh=function Yxd(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return Dvd(this,a,b,c)};_.Wh=function Zxd(a){switch(a){case 0:return this.a!=0;case 1:return this.b!=0;}return Kvd(this,a)};_.bi=function $xd(a,b){switch(a){case 0:Vxd(this,Kfb(UD(b)));return;case 1:Wxd(this,Kfb(UD(b)));return;}Wvd(this,a,b)};_.ii=function _xd(){return pvd(),evd};_.ki=function ayd(a){switch(a){case 0:Vxd(this,0);return;case 1:Wxd(this,0);return;}$vd(this,a)};_.Ib=function byd(){var a;if((this.Db&64)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (x: ';Khb(a,this.a);a.a+=', y: ';Khb(a,this.b);a.a+=')';return a.a};_.a=0;_.b=0;var N4=sfb(THe,'ElkBendPointImpl',572);feb(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function lyd(a,b,c){return cyd(this,a,b,c)};_.Sh=function myd(a,b,c){return dyd(this,a,b,c)};_.Uh=function nyd(a,b,c){return eyd(this,a,b,c)};_.Wh=function oyd(a){return fyd(this,a)};_.bi=function pyd(a,b){gyd(this,a,b)};_.ii=function qyd(){return pvd(),ivd};_.ki=function ryd(a){hyd(this,a)};_.jh=function syd(){return this.k};_.kh=function tyd(){return iyd(this)};_.Ib=function uyd(){return kyd(this)};_.k=null;var R4=sfb(THe,'ElkGraphElementImpl',739);feb(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function Gyd(a,b,c){return vyd(this,a,b,c)};_.Wh=function Hyd(a){return wyd(this,a)};_.bi=function Iyd(a,b){xyd(this,a,b)};_.ii=function Jyd(){return pvd(),nvd};_.ki=function Kyd(a){yyd(this,a)};_.lh=function Lyd(){return this.f};_.mh=function Myd(){return this.g};_.nh=function Nyd(){return this.i};_.oh=function Oyd(){return this.j};_.ph=function Pyd(a,b){zyd(this,a,b)};_.qh=function Qyd(a,b){Byd(this,a,b)};_.rh=function Ryd(a){Dyd(this,a)};_.sh=function Syd(a){Eyd(this,a)};_.Ib=function Tyd(){return Fyd(this)};_.f=0;_.g=0;_.i=0;_.j=0;var Y4=sfb(THe,'ElkShapeImpl',740);feb(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1});_.Lh=function _yd(a,b,c){return Uyd(this,a,b,c)};_.Sh=function azd(a,b,c){return Vyd(this,a,b,c)};_.Uh=function bzd(a,b,c){return Wyd(this,a,b,c)};_.Wh=function czd(a){return Xyd(this,a)};_.bi=function dzd(a,b){Yyd(this,a,b)};_.ii=function ezd(){return pvd(),fvd};_.ki=function fzd(a){Zyd(this,a)};_.hh=function gzd(){return !this.d&&(this.d=new Yie(G4,this,8,5)),this.d};_.ih=function hzd(){return !this.e&&(this.e=new Yie(G4,this,7,4)),this.e};var O4=sfb(THe,'ElkConnectableShapeImpl',741);feb(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},rzd);_.Ah=function szd(a){return jzd(this,a)};_.Lh=function tzd(a,b,c){switch(a){case 3:return kzd(this);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),this.b;case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),this.c;case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),this.a;case 7:return Geb(),!this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i<=1&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i<=1)?false:true;case 8:return Geb(),nzd(this)?true:false;case 9:return Geb(),ozd(this)?true:false;case 10:return Geb(),!this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i!=0)?true:false;}return cyd(this,a,b,c)};_.Sh=function uzd(a,b,c){var d;switch(b){case 3:!!this.Cb&&(c=(d=this.Db>>16,d>=0?jzd(this,c):this.Cb.Th(this,-1-d,null,c)));return izd(this,RD(a,27),c);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),qLd(this.b,a,c);case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),qLd(this.c,a,c);case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),qLd(this.a,a,c);}return dyd(this,a,b,c)};_.Uh=function vzd(a,b,c){switch(b){case 3:return izd(this,null,c);case 4:return !this.b&&(this.b=new Yie(E4,this,4,7)),rLd(this.b,a,c);case 5:return !this.c&&(this.c=new Yie(E4,this,5,8)),rLd(this.c,a,c);case 6:return !this.a&&(this.a=new C5d(F4,this,6,6)),rLd(this.a,a,c);}return eyd(this,a,b,c)};_.Wh=function wzd(a){switch(a){case 3:return !!kzd(this);case 4:return !!this.b&&this.b.i!=0;case 5:return !!this.c&&this.c.i!=0;case 6:return !!this.a&&this.a.i!=0;case 7:return !this.b&&(this.b=new Yie(E4,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i<=1));case 8:return nzd(this);case 9:return ozd(this);case 10:return !this.b&&(this.b=new Yie(E4,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Yie(E4,this,5,8)),this.c.i!=0);}return fyd(this,a)};_.bi=function xzd(a,b){switch(a){case 3:pzd(this,RD(b,27));return;case 4:!this.b&&(this.b=new Yie(E4,this,4,7));sLd(this.b);!this.b&&(this.b=new Yie(E4,this,4,7));YGd(this.b,RD(b,16));return;case 5:!this.c&&(this.c=new Yie(E4,this,5,8));sLd(this.c);!this.c&&(this.c=new Yie(E4,this,5,8));YGd(this.c,RD(b,16));return;case 6:!this.a&&(this.a=new C5d(F4,this,6,6));sLd(this.a);!this.a&&(this.a=new C5d(F4,this,6,6));YGd(this.a,RD(b,16));return;}gyd(this,a,b)};_.ii=function yzd(){return pvd(),gvd};_.ki=function zzd(a){switch(a){case 3:pzd(this,null);return;case 4:!this.b&&(this.b=new Yie(E4,this,4,7));sLd(this.b);return;case 5:!this.c&&(this.c=new Yie(E4,this,5,8));sLd(this.c);return;case 6:!this.a&&(this.a=new C5d(F4,this,6,6));sLd(this.a);return;}hyd(this,a)};_.Ib=function Azd(){return qzd(this)};var P4=sfb(THe,'ElkEdgeImpl',326);feb(451,2083,{110:1,342:1,166:1,451:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},Rzd);_.Ah=function Szd(a){return Czd(this,a)};_.Lh=function Tzd(a,b,c){switch(a){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return !this.a&&(this.a=new XZd(D4,this,5)),this.a;case 6:return Fzd(this);case 7:if(b)return Ezd(this);return this.i;case 8:if(b)return Dzd(this);return this.f;case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),this.g;case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),this.e;case 11:return this.d;}return Axd(this,a,b,c)};_.Sh=function Uzd(a,b,c){var d,e,f;switch(b){case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Czd(this,c):this.Cb.Th(this,-1-e,null,c)));return Bzd(this,RD(a,74),c);case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),qLd(this.g,a,c);case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),qLd(this.e,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(pvd(),hvd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((pvd(),hvd)),a,c)};_.Uh=function Vzd(a,b,c){switch(b){case 5:return !this.a&&(this.a=new XZd(D4,this,5)),rLd(this.a,a,c);case 6:return Bzd(this,null,c);case 9:return !this.g&&(this.g=new Yie(F4,this,9,10)),rLd(this.g,a,c);case 10:return !this.e&&(this.e=new Yie(F4,this,10,9)),rLd(this.e,a,c);}return Bxd(this,a,b,c)};_.Wh=function Wzd(a){switch(a){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return !!this.a&&this.a.i!=0;case 6:return !!Fzd(this);case 7:return !!this.i;case 8:return !!this.f;case 9:return !!this.g&&this.g.i!=0;case 10:return !!this.e&&this.e.i!=0;case 11:return this.d!=null;}return Cxd(this,a)};_.bi=function Xzd(a,b){switch(a){case 1:Ozd(this,Kfb(UD(b)));return;case 2:Pzd(this,Kfb(UD(b)));return;case 3:Hzd(this,Kfb(UD(b)));return;case 4:Izd(this,Kfb(UD(b)));return;case 5:!this.a&&(this.a=new XZd(D4,this,5));sLd(this.a);!this.a&&(this.a=new XZd(D4,this,5));YGd(this.a,RD(b,16));return;case 6:Mzd(this,RD(b,74));return;case 7:Lzd(this,RD(b,84));return;case 8:Kzd(this,RD(b,84));return;case 9:!this.g&&(this.g=new Yie(F4,this,9,10));sLd(this.g);!this.g&&(this.g=new Yie(F4,this,9,10));YGd(this.g,RD(b,16));return;case 10:!this.e&&(this.e=new Yie(F4,this,10,9));sLd(this.e);!this.e&&(this.e=new Yie(F4,this,10,9));YGd(this.e,RD(b,16));return;case 11:Jzd(this,WD(b));return;}Dxd(this,a,b)};_.ii=function Yzd(){return pvd(),hvd};_.ki=function Zzd(a){switch(a){case 1:Ozd(this,0);return;case 2:Pzd(this,0);return;case 3:Hzd(this,0);return;case 4:Izd(this,0);return;case 5:!this.a&&(this.a=new XZd(D4,this,5));sLd(this.a);return;case 6:Mzd(this,null);return;case 7:Lzd(this,null);return;case 8:Kzd(this,null);return;case 9:!this.g&&(this.g=new Yie(F4,this,9,10));sLd(this.g);return;case 10:!this.e&&(this.e=new Yie(F4,this,10,9));sLd(this.e);return;case 11:Jzd(this,null);return;}Exd(this,a)};_.Ib=function $zd(){return Qzd(this)};_.b=0;_.c=0;_.d=null;_.j=0;_.k=0;var Q4=sfb(THe,'ElkEdgeSectionImpl',451);feb(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1});_.Lh=function cAd(a,b,c){var d;if(a==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function dAd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c)}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function eAd(a,b,c){var d,e;if(b==0){return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c)}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function fAd(a){var b;if(a==0){return !!this.Ab&&this.Ab.i!=0}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.Zh=function gAd(a){return _zd(this,a)};_.bi=function hAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.di=function iAd(a){$wd(this,128,a)};_.ii=function jAd(){return JTd(),xTd};_.ki=function kAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function lAd(){this.Bb|=1};_.qi=function mAd(a){return bAd(this,a)};_.Bb=0;var k8=sfb(SHe,'EModelElementImpl',158);feb(720,158,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},yAd);_.ri=function zAd(a,b){return tAd(this,a,b)};_.si=function AAd(a){var b,c,d,e,f;if(this.a!=BXd(a)||(a.Bb&256)!=0){throw Adb(new agb(ZHe+a.zb+WHe))}for(d=zYd(a);tYd(d.a).i!=0;){c=RD(N_d(d,0,(b=RD(QHd(tYd(d.a),0),89),f=b.c,ZD(f,90)?RD(f,29):(JTd(),zTd))),29);if(DXd(c)){e=BXd(c).wi().si(c);RD(e,54).ci(a);return e}d=zYd(c)}return (a.D!=null?a.D:a.B)=='java.util.Map$Entry'?new LUd(a):new zUd(a)};_.ti=function BAd(a,b){return uAd(this,a,b)};_.Lh=function CAd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.a;}return zvd(this,a-AYd((JTd(),uTd)),vYd((d=RD(Ywd(this,16),29),!d?uTd:d),a),b,c)};_.Sh=function DAd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 1:!!this.a&&(c=RD(this.a,54).Th(this,4,t7,c));return rAd(this,RD(a,241),c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),uTd):d),b),69),e.wk().zk(this,Wwd(this),b-AYd((JTd(),uTd)),a,c)};_.Uh=function EAd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 1:return rAd(this,null,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),uTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),uTd)),a,c)};_.Wh=function FAd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return !!this.a;}return Avd(this,a-AYd((JTd(),uTd)),vYd((b=RD(Ywd(this,16),29),!b?uTd:b),a))};_.bi=function GAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:wAd(this,RD(b,241));return;}Bvd(this,a-AYd((JTd(),uTd)),vYd((c=RD(Ywd(this,16),29),!c?uTd:c),a),b)};_.ii=function HAd(){return JTd(),uTd};_.ki=function IAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:wAd(this,null);return;}Cvd(this,a-AYd((JTd(),uTd)),vYd((b=RD(Ywd(this,16),29),!b?uTd:b),a))};var nAd,oAd,pAd;var i8=sfb(SHe,'EFactoryImpl',720);feb(1037,720,{110:1,2113:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},KAd);_.ri=function LAd(a,b){switch(a.hk()){case 12:return RD(b,149).Pg();case 13:return jeb(b);default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function MAd(a){var b,c,d,e,f,g,h,i;switch(a.G==-1&&(a.G=(b=BXd(a),b?fZd(b.vi(),a):-1)),a.G){case 4:return f=new hCd,f;case 6:return g=new ACd,g;case 7:return h=new PCd,h;case 8:return d=new rzd,d;case 9:return c=new Xxd,c;case 10:return e=new Rzd,e;case 11:return i=new _Cd,i;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function NAd(a,b){switch(a.hk()){case 13:case 12:return null;default:throw Adb(new agb(VHe+a.xe()+WHe));}};var S4=sfb(THe,'ElkGraphFactoryImpl',1037);feb(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1});_.Gh=function RAd(){var a,b;b=(a=RD(Ywd(this,16),29),P$d(rYd(!a?this.ii():a)));return b==null?(N2d(),N2d(),M2d):new e3d(this,b)};_.Lh=function SAd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.xe();}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Wh=function TAd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function UAd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:this.ui(WD(b));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function VAd(){return JTd(),yTd};_.ki=function WAd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:this.ui(null);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.xe=function XAd(){return this.zb};_.ui=function YAd(a){PAd(this,a)};_.Ib=function ZAd(){return QAd(this)};_.zb=null;var o8=sfb(SHe,'ENamedElementImpl',448);feb(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},EBd);_.Ah=function GBd(a){return qBd(this,a)};_.Lh=function HBd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),this.rb;case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),this.vb;case 7:if(b)return this.Db>>16==7?RD(this.Cb,241):null;return gBd(this);}return zvd(this,a-AYd((JTd(),CTd)),vYd((d=RD(Ywd(this,16),29),!d?CTd:d),a),b,c)};_.Sh=function IBd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 4:!!this.sb&&(c=RD(this.sb,54).Th(this,1,n7,c));return hBd(this,RD(a,479),c);case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),qLd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),qLd(this.vb,a,c);case 7:!!this.Cb&&(c=(e=this.Db>>16,e>=0?qBd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,7,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),CTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),CTd)),a,c)};_.Uh=function JBd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 4:return hBd(this,null,c);case 5:return !this.rb&&(this.rb=new J5d(this,i7,this)),rLd(this.rb,a,c);case 6:return !this.vb&&(this.vb=new G5d(t7,this,6,7)),rLd(this.vb,a,c);case 7:return xvd(this,null,7,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),CTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),CTd)),a,c)};_.Wh=function KBd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return !!this.sb;case 5:return !!this.rb&&this.rb.i!=0;case 6:return !!this.vb&&this.vb.i!=0;case 7:return !!gBd(this);}return Avd(this,a-AYd((JTd(),CTd)),vYd((b=RD(Ywd(this,16),29),!b?CTd:b),a))};_.Zh=function LBd(a){var b;b=sBd(this,a);return b?b:_zd(this,a)};_.bi=function MBd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:DBd(this,WD(b));return;case 3:CBd(this,WD(b));return;case 4:BBd(this,RD(b,479));return;case 5:!this.rb&&(this.rb=new J5d(this,i7,this));sLd(this.rb);!this.rb&&(this.rb=new J5d(this,i7,this));YGd(this.rb,RD(b,16));return;case 6:!this.vb&&(this.vb=new G5d(t7,this,6,7));sLd(this.vb);!this.vb&&(this.vb=new G5d(t7,this,6,7));YGd(this.vb,RD(b,16));return;}Bvd(this,a-AYd((JTd(),CTd)),vYd((c=RD(Ywd(this,16),29),!c?CTd:c),a),b)};_.ei=function NBd(a){var b,c;if(!!a&&!!this.rb){for(c=new dMd(this.rb);c.e!=c.i.gc();){b=bMd(c);ZD(b,364)&&(RD(b,364).w=null)}}$wd(this,64,a)};_.ii=function OBd(){return JTd(),CTd};_.ki=function PBd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:DBd(this,null);return;case 3:CBd(this,null);return;case 4:BBd(this,null);return;case 5:!this.rb&&(this.rb=new J5d(this,i7,this));sLd(this.rb);return;case 6:!this.vb&&(this.vb=new G5d(t7,this,6,7));sLd(this.vb);return;}Cvd(this,a-AYd((JTd(),CTd)),vYd((b=RD(Ywd(this,16),29),!b?CTd:b),a))};_.pi=function QBd(){rBd(this)};_.vi=function RBd(){return !this.rb&&(this.rb=new J5d(this,i7,this)),this.rb};_.wi=function SBd(){return this.sb};_.xi=function TBd(){return this.ub};_.yi=function UBd(){return this.xb};_.zi=function VBd(){return this.yb};_.Ai=function WBd(a){this.ub=a};_.Ib=function XBd(){var a;if((this.Db&64)!=0)return QAd(this);a=new Shb(QAd(this));a.a+=' (nsURI: ';Nhb(a,this.yb);a.a+=', nsPrefix: ';Nhb(a,this.xb);a.a+=')';return a.a};_.xb=null;_.yb=null;var $Ad;var y8=sfb(SHe,'EPackageImpl',184);feb(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},_Bd);_.q=false;_.r=false;var YBd=false;var T4=sfb(THe,'ElkGraphPackageImpl',569);feb(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},hCd);_.Ah=function iCd(a){return cCd(this,a)};_.Lh=function jCd(a,b,c){switch(a){case 7:return dCd(this);case 8:return this.a;}return vyd(this,a,b,c)};_.Sh=function kCd(a,b,c){var d;switch(b){case 7:!!this.Cb&&(c=(d=this.Db>>16,d>=0?cCd(this,c):this.Cb.Th(this,-1-d,null,c)));return bCd(this,RD(a,167),c);}return dyd(this,a,b,c)};_.Uh=function lCd(a,b,c){if(b==7){return bCd(this,null,c)}return eyd(this,a,b,c)};_.Wh=function mCd(a){switch(a){case 7:return !!dCd(this);case 8:return !lhb('',this.a);}return wyd(this,a)};_.bi=function nCd(a,b){switch(a){case 7:eCd(this,RD(b,167));return;case 8:fCd(this,WD(b));return;}xyd(this,a,b)};_.ii=function oCd(){return pvd(),jvd};_.ki=function pCd(a){switch(a){case 7:eCd(this,null);return;case 8:fCd(this,'');return;}yyd(this,a)};_.Ib=function qCd(){return gCd(this)};_.a='';var U4=sfb(THe,'ElkLabelImpl',366);feb(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},ACd);_.Ah=function BCd(a){return sCd(this,a)};_.Lh=function CCd(a,b,c){switch(a){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),this.c;case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),this.a;case 11:return vCd(this);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),this.b;case 13:return Geb(),!this.a&&(this.a=new C5d(J4,this,10,11)),this.a.i>0?true:false;}return Uyd(this,a,b,c)};_.Sh=function DCd(a,b,c){var d;switch(b){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),qLd(this.c,a,c);case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),qLd(this.a,a,c);case 11:!!this.Cb&&(c=(d=this.Db>>16,d>=0?sCd(this,c):this.Cb.Th(this,-1-d,null,c)));return rCd(this,RD(a,27),c);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),qLd(this.b,a,c);}return Vyd(this,a,b,c)};_.Uh=function ECd(a,b,c){switch(b){case 9:return !this.c&&(this.c=new C5d(K4,this,9,9)),rLd(this.c,a,c);case 10:return !this.a&&(this.a=new C5d(J4,this,10,11)),rLd(this.a,a,c);case 11:return rCd(this,null,c);case 12:return !this.b&&(this.b=new C5d(G4,this,12,3)),rLd(this.b,a,c);}return Wyd(this,a,b,c)};_.Wh=function FCd(a){switch(a){case 9:return !!this.c&&this.c.i!=0;case 10:return !!this.a&&this.a.i!=0;case 11:return !!vCd(this);case 12:return !!this.b&&this.b.i!=0;case 13:return !this.a&&(this.a=new C5d(J4,this,10,11)),this.a.i>0;}return Xyd(this,a)};_.bi=function GCd(a,b){switch(a){case 9:!this.c&&(this.c=new C5d(K4,this,9,9));sLd(this.c);!this.c&&(this.c=new C5d(K4,this,9,9));YGd(this.c,RD(b,16));return;case 10:!this.a&&(this.a=new C5d(J4,this,10,11));sLd(this.a);!this.a&&(this.a=new C5d(J4,this,10,11));YGd(this.a,RD(b,16));return;case 11:yCd(this,RD(b,27));return;case 12:!this.b&&(this.b=new C5d(G4,this,12,3));sLd(this.b);!this.b&&(this.b=new C5d(G4,this,12,3));YGd(this.b,RD(b,16));return;}Yyd(this,a,b)};_.ii=function HCd(){return pvd(),kvd};_.ki=function ICd(a){switch(a){case 9:!this.c&&(this.c=new C5d(K4,this,9,9));sLd(this.c);return;case 10:!this.a&&(this.a=new C5d(J4,this,10,11));sLd(this.a);return;case 11:yCd(this,null);return;case 12:!this.b&&(this.b=new C5d(G4,this,12,3));sLd(this.b);return;}Zyd(this,a)};_.Ib=function JCd(){return zCd(this)};var V4=sfb(THe,'ElkNodeImpl',207);feb(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},PCd);_.Ah=function QCd(a){return LCd(this,a)};_.Lh=function RCd(a,b,c){if(a==9){return MCd(this)}return Uyd(this,a,b,c)};_.Sh=function SCd(a,b,c){var d;switch(b){case 9:!!this.Cb&&(c=(d=this.Db>>16,d>=0?LCd(this,c):this.Cb.Th(this,-1-d,null,c)));return KCd(this,RD(a,27),c);}return Vyd(this,a,b,c)};_.Uh=function TCd(a,b,c){if(b==9){return KCd(this,null,c)}return Wyd(this,a,b,c)};_.Wh=function UCd(a){if(a==9){return !!MCd(this)}return Xyd(this,a)};_.bi=function VCd(a,b){switch(a){case 9:NCd(this,RD(b,27));return;}Yyd(this,a,b)};_.ii=function WCd(){return pvd(),lvd};_.ki=function XCd(a){switch(a){case 9:NCd(this,null);return;}Zyd(this,a)};_.Ib=function YCd(){return OCd(this)};var W4=sfb(THe,'ElkPortImpl',193);var O6=ufb(sIe,'BasicEMap/Entry');feb(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},_Cd);_.Fb=function fDd(a){return this===a};_.ld=function hDd(){return this.b};_.Hb=function jDd(){return kFb(this)};_.Di=function lDd(a){ZCd(this,RD(a,149))};_.Lh=function aDd(a,b,c){switch(a){case 0:return this.b;case 1:return this.c;}return Dvd(this,a,b,c)};_.Wh=function bDd(a){switch(a){case 0:return !!this.b;case 1:return this.c!=null;}return Kvd(this,a)};_.bi=function cDd(a,b){switch(a){case 0:ZCd(this,RD(b,149));return;case 1:$Cd(this,b);return;}Wvd(this,a,b)};_.ii=function dDd(){return pvd(),mvd};_.ki=function eDd(a){switch(a){case 0:ZCd(this,null);return;case 1:$Cd(this,null);return;}$vd(this,a)};_.Bi=function gDd(){var a;if(this.a==-1){a=this.b;this.a=!a?0:tb(a)}return this.a};_.md=function iDd(){return this.c};_.Ci=function kDd(a){this.a=a};_.nd=function mDd(a){var b;b=this.c;$Cd(this,a);return b};_.Ib=function nDd(){var a;if((this.Db&64)!=0)return awd(this);a=new bib;Zhb(Zhb(Zhb(a,this.b?this.b.Pg():vve),SAe),Ghb(this.c));return a.a};_.a=-1;_.c=null;var X4=sfb(THe,'ElkPropertyToValueMapEntryImpl',1122);feb(996,1,{},BDd);var Z4=sfb(vIe,'JsonAdapter',996);feb(216,63,swe,CDd);var $4=sfb(vIe,'JsonImportException',216);feb(868,1,{},IEd);var O5=sfb(vIe,'JsonImporter',868);feb(903,1,{},JEd);var _4=sfb(vIe,'JsonImporter/lambda$0$Type',903);feb(904,1,{},KEd);var a5=sfb(vIe,'JsonImporter/lambda$1$Type',904);feb(912,1,{},LEd);var b5=sfb(vIe,'JsonImporter/lambda$10$Type',912);feb(914,1,{},MEd);var c5=sfb(vIe,'JsonImporter/lambda$11$Type',914);feb(915,1,{},NEd);var d5=sfb(vIe,'JsonImporter/lambda$12$Type',915);feb(921,1,{},OEd);var e5=sfb(vIe,'JsonImporter/lambda$13$Type',921);feb(920,1,{},PEd);var f5=sfb(vIe,'JsonImporter/lambda$14$Type',920);feb(916,1,{},QEd);var g5=sfb(vIe,'JsonImporter/lambda$15$Type',916);feb(917,1,{},REd);var h5=sfb(vIe,'JsonImporter/lambda$16$Type',917);feb(918,1,{},SEd);var i5=sfb(vIe,'JsonImporter/lambda$17$Type',918);feb(919,1,{},TEd);var j5=sfb(vIe,'JsonImporter/lambda$18$Type',919);feb(924,1,{},UEd);var k5=sfb(vIe,'JsonImporter/lambda$19$Type',924);feb(905,1,{},VEd);var l5=sfb(vIe,'JsonImporter/lambda$2$Type',905);feb(922,1,{},WEd);var m5=sfb(vIe,'JsonImporter/lambda$20$Type',922);feb(923,1,{},XEd);var n5=sfb(vIe,'JsonImporter/lambda$21$Type',923);feb(927,1,{},YEd);var o5=sfb(vIe,'JsonImporter/lambda$22$Type',927);feb(925,1,{},ZEd);var p5=sfb(vIe,'JsonImporter/lambda$23$Type',925);feb(926,1,{},$Ed);var q5=sfb(vIe,'JsonImporter/lambda$24$Type',926);feb(929,1,{},_Ed);var r5=sfb(vIe,'JsonImporter/lambda$25$Type',929);feb(928,1,{},aFd);var s5=sfb(vIe,'JsonImporter/lambda$26$Type',928);feb(930,1,Qve,bFd);_.Cd=function cFd(a){_Dd(this.b,this.a,WD(a))};var t5=sfb(vIe,'JsonImporter/lambda$27$Type',930);feb(931,1,Qve,dFd);_.Cd=function eFd(a){aEd(this.b,this.a,WD(a))};var u5=sfb(vIe,'JsonImporter/lambda$28$Type',931);feb(932,1,{},fFd);var v5=sfb(vIe,'JsonImporter/lambda$29$Type',932);feb(908,1,{},gFd);var w5=sfb(vIe,'JsonImporter/lambda$3$Type',908);feb(933,1,{},hFd);var x5=sfb(vIe,'JsonImporter/lambda$30$Type',933);feb(934,1,{},iFd);var y5=sfb(vIe,'JsonImporter/lambda$31$Type',934);feb(935,1,{},jFd);var z5=sfb(vIe,'JsonImporter/lambda$32$Type',935);feb(936,1,{},kFd);var A5=sfb(vIe,'JsonImporter/lambda$33$Type',936);feb(937,1,{},lFd);var B5=sfb(vIe,'JsonImporter/lambda$34$Type',937);feb(870,1,{},nFd);var C5=sfb(vIe,'JsonImporter/lambda$35$Type',870);feb(941,1,{},pFd);var D5=sfb(vIe,'JsonImporter/lambda$36$Type',941);feb(938,1,Qve,qFd);_.Cd=function rFd(a){jEd(this.a,RD(a,377))};var E5=sfb(vIe,'JsonImporter/lambda$37$Type',938);feb(939,1,Qve,sFd);_.Cd=function tFd(a){kEd(this.a,this.b,RD(a,166))};var F5=sfb(vIe,'JsonImporter/lambda$38$Type',939);feb(940,1,Qve,uFd);_.Cd=function vFd(a){lEd(this.a,this.b,RD(a,166))};var G5=sfb(vIe,'JsonImporter/lambda$39$Type',940);feb(906,1,{},wFd);var H5=sfb(vIe,'JsonImporter/lambda$4$Type',906);feb(942,1,Qve,xFd);_.Cd=function yFd(a){mEd(this.a,RD(a,8))};var I5=sfb(vIe,'JsonImporter/lambda$40$Type',942);feb(907,1,{},zFd);var J5=sfb(vIe,'JsonImporter/lambda$5$Type',907);feb(911,1,{},AFd);var K5=sfb(vIe,'JsonImporter/lambda$6$Type',911);feb(909,1,{},BFd);var L5=sfb(vIe,'JsonImporter/lambda$7$Type',909);feb(910,1,{},CFd);var M5=sfb(vIe,'JsonImporter/lambda$8$Type',910);feb(913,1,{},DFd);var N5=sfb(vIe,'JsonImporter/lambda$9$Type',913);feb(961,1,Qve,MFd);_.Cd=function NFd(a){oDd(this.a,new OC(WD(a)))};var P5=sfb(vIe,'JsonMetaDataConverter/lambda$0$Type',961);feb(962,1,Qve,OFd);_.Cd=function PFd(a){IFd(this.a,RD(a,245))};var Q5=sfb(vIe,'JsonMetaDataConverter/lambda$1$Type',962);feb(963,1,Qve,QFd);_.Cd=function RFd(a){JFd(this.a,RD(a,143))};var R5=sfb(vIe,'JsonMetaDataConverter/lambda$2$Type',963);feb(964,1,Qve,SFd);_.Cd=function TFd(a){KFd(this.a,RD(a,170))};var S5=sfb(vIe,'JsonMetaDataConverter/lambda$3$Type',964);feb(245,22,{3:1,34:1,22:1,245:1},bGd);var UFd,VFd,WFd,XFd,YFd,ZFd,$Fd,_Fd;var T5=tfb(jze,'GraphFeature',245,WI,dGd,cGd);var eGd;feb(11,1,{34:1,149:1},jGd,kGd,lGd,mGd);_.Fd=function nGd(a){return gGd(this,RD(a,149))};_.Fb=function oGd(a){return hGd(this,a)};_.Sg=function pGd(){return iGd(this)};_.Pg=function qGd(){return this.b};_.Hb=function rGd(){return ohb(this.b)};_.Ib=function sGd(){return this.b};var Y5=sfb(jze,'Property',11);feb(671,1,fye,uGd);_.Ne=function vGd(a,b){return tGd(this,RD(a,96),RD(b,96))};_.Fb=function wGd(a){return this===a};_.Oe=function xGd(){return new Frb(this)};var X5=sfb(jze,'PropertyHolderComparator',671);feb(709,1,Ave,QGd);_.Nb=function RGd(a){Ztb(this,a)};_.Pb=function TGd(){return PGd(this)};_.Qb=function UGd(){$tb()};_.Ob=function SGd(){return !!this.a};var Z5=sfb(KIe,'ElkGraphUtil/AncestorIterator',709);var Y6=ufb(sIe,'EList');feb(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1});_.bd=function hHd(a,b){VGd(this,a,b)};_.Fc=function iHd(a){return WGd(this,a)};_.cd=function jHd(a,b){return XGd(this,a,b)};_.Gc=function kHd(a){return YGd(this,a)};_.Ii=function lHd(){return new yMd(this)};_.Ji=function mHd(){return new BMd(this)};_.Ki=function nHd(a){return ZGd(this,a)};_.Li=function oHd(){return true};_.Mi=function pHd(a,b){};_.Ni=function qHd(){};_.Oi=function rHd(a,b){$Gd(this,a,b)};_.Pi=function sHd(a,b,c){};_.Qi=function tHd(a,b){};_.Ri=function uHd(a,b,c){};_.Fb=function vHd(a){return _Gd(this,a)};_.Hb=function wHd(){return cHd(this)};_.Si=function xHd(){return false};_.Kc=function yHd(){return new dMd(this)};_.ed=function zHd(){return new mMd(this)};_.fd=function AHd(a){var b;b=this.gc();if(a<0||a>b)throw Adb(new aMd(a,b));return new nMd(this,a)};_.Ui=function BHd(a,b){this.Ti(a,this.dd(b))};_.Mc=function CHd(a){return dHd(this,a)};_.Wi=function DHd(a,b){return b};_.hd=function EHd(a,b){return eHd(this,a,b)};_.Ib=function FHd(){return fHd(this)};_.Yi=function GHd(){return true};_.Zi=function HHd(a,b){return gHd(this,b)};var u6=sfb(sIe,'AbstractEList',70);feb(66,70,PIe,YHd,ZHd,$Hd);_.Ei=function _Hd(a,b){return IHd(this,a,b)};_.Fi=function aId(a){return JHd(this,a)};_.Gi=function bId(a,b){KHd(this,a,b)};_.Hi=function cId(a){LHd(this,a)};_.$i=function dId(a){return NHd(this,a)};_.$b=function eId(){OHd(this)};_.Hc=function fId(a){return PHd(this,a)};_.Xb=function gId(a){return QHd(this,a)};_._i=function hId(a){var b,c,d;++this.j;c=this.g==null?0:this.g.length;if(a>c){d=this.g;b=c+(c/2|0)+4;b<a&&(b=a);this.g=this.aj(b);d!=null&&hib(d,0,this.g,0,this.i)}};_.dd=function iId(a){return RHd(this,a)};_.dc=function jId(){return this.i==0};_.Ti=function kId(a,b){return SHd(this,a,b)};_.aj=function lId(a){return $C(jJ,rve,1,a,5,1)};_.Vi=function mId(a){return this.g[a]};_.gd=function nId(a){return THd(this,a)};_.Xi=function oId(a,b){return UHd(this,a,b)};_.gc=function pId(){return this.i};_.Pc=function qId(){return WHd(this)};_.Qc=function rId(a){return XHd(this,a)};_.i=0;var D6=sfb(sIe,'BasicEList',66);var a7=ufb(sIe,'TreeIterator');feb(708,66,QIe);_.Nb=function vId(a){Ztb(this,a)};_.Ob=function wId(){return this.g==null&&!this.c?sId(this):this.g==null||this.i!=0&&RD(this.g[this.i-1],51).Ob()};_.Pb=function xId(){return tId(this)};_.Qb=function yId(){if(!this.e){throw Adb(new dgb('There is no valid object to remove.'))}this.e.Qb()};_.c=false;var v6=sfb(sIe,'AbstractTreeIterator',708);feb(700,708,QIe,zId);_.bj=function AId(a){var b;b=RD(a,58).Gh().Kc();ZD(b,287)&&RD(b,287).wl(new BId);return b};var _5=sfb(KIe,'ElkGraphUtil/PropertiesSkippingTreeIterator',700);feb(965,1,{},BId);var $5=sfb(KIe,'ElkGraphUtil/PropertiesSkippingTreeIterator/1',965);var CId,DId;var b6=sfb(KIe,'ElkReflect',null);feb(901,1,CGe,JId);_.Rg=function KId(a){return EId(),Asb(RD(a,181))};var a6=sfb(KIe,'ElkReflect/lambda$0$Type',901);var LId;var _6=ufb(sIe,'ResourceLocator');feb(1065,1,{});var S6=sfb(sIe,'DelegatingResourceLocator',1065);feb(1066,1065,{});var c6=sfb('org.eclipse.emf.common','EMFPlugin',1066);var d6=ufb(DJe,'Adapter');var e6=ufb(DJe,'Notification');feb(1174,1,EJe);_.cj=function VId(){return this.d};_.dj=function WId(a){};_.ej=function XId(a){this.d=a};_.fj=function YId(a){this.d==a&&(this.d=null)};_.d=null;var f6=sfb(JHe,'AdapterImpl',1174);feb(2093,70,FJe);_.Ei=function dJd(a,b){return ZId(this,a,b)};_.Fi=function eJd(a){var b,c,d;++this.j;if(a.dc()){return false}else{b=this.Ej();for(d=a.Kc();d.Ob();){c=d.Pb();this.rj(this.Zi(b,c));++b}return true}};_.Gi=function fJd(a,b){$Id(this,a,b)};_.Hi=function gJd(a){_Id(this,a)};_.pj=function hJd(){return this.sj()};_.$b=function iJd(){aJd(this,this.Ej(),this.Fj())};_.Hc=function jJd(a){return this.uj(a)};_.Ic=function kJd(a){return this.vj(a)};_.qj=function lJd(a,b){this.Bj().Um()};_.rj=function mJd(a){this.Bj().Um()};_.sj=function nJd(){return this.Bj()};_.tj=function oJd(){this.Bj().Um()};_.uj=function pJd(a){return this.Bj().Um()};_.vj=function qJd(a){return this.Bj().Um()};_.wj=function rJd(a){return this.Bj().Um()};_.xj=function sJd(a){return this.Bj().Um()};_.yj=function tJd(){return this.Bj().Um()};_.zj=function uJd(a){return this.Bj().Um()};_.Aj=function vJd(){return this.Bj().Um()};_.Cj=function wJd(a){return this.Bj().Um()};_.Dj=function xJd(a,b){return this.Bj().Um()};_.Ej=function yJd(){return this.Bj().Um()};_.Fj=function zJd(){return this.Bj().Um()};_.Gj=function AJd(a){return this.Bj().Um()};_.Hj=function BJd(){return this.Bj().Um()};_.Fb=function CJd(a){return this.wj(a)};_.Xb=function DJd(a){return this.Wi(a,this.xj(a))};_.Hb=function EJd(){return this.yj()};_.dd=function FJd(a){return this.zj(a)};_.dc=function GJd(){return this.Aj()};_.Ti=function HJd(a,b){return bJd(this,a,b)};_.Vi=function IJd(a){return this.xj(a)};_.gd=function JJd(a){return cJd(this,a)};_.Mc=function KJd(a){var b;b=this.dd(a);if(b>=0){this.gd(b);return true}else{return false}};_.Xi=function LJd(a,b){return this.Dj(a,this.Zi(a,b))};_.gc=function MJd(){return this.Ej()};_.Pc=function NJd(){return this.Fj()};_.Qc=function OJd(a){return this.Gj(a)};_.Ib=function PJd(){return this.Hj()};var R6=sfb(sIe,'DelegatingEList',2093);feb(2094,2093,FJe);_.Ei=function XJd(a,b){return QJd(this,a,b)};_.Fi=function YJd(a){return this.Ei(this.Ej(),a)};_.Gi=function ZJd(a,b){RJd(this,a,b)};_.Hi=function $Jd(a){SJd(this,a)};_.Li=function _Jd(){return !this.Mj()};_.$b=function aKd(){VJd(this)};_.Ij=function bKd(a,b,c,d,e){return new aLd(this,a,b,c,d,e)};_.Jj=function cKd(a){qvd(this.jj(),a)};_.Kj=function dKd(){return null};_.Lj=function eKd(){return -1};_.jj=function fKd(){return null};_.Mj=function gKd(){return false};_.Nj=function hKd(a,b){return b};_.Oj=function iKd(a,b){return b};_.Pj=function jKd(){return false};_.Qj=function kKd(){return !this.Aj()};_.Ti=function lKd(a,b){var c,d;if(this.Pj()){d=this.Qj();c=bJd(this,a,b);this.Jj(this.Ij(7,sgb(b),c,a,d));return c}else{return bJd(this,a,b)}};_.gd=function mKd(a){var b,c,d,e;if(this.Pj()){c=null;d=this.Qj();b=this.Ij(4,e=cJd(this,a),null,a,d);if(this.Mj()&&!!e){c=this.Oj(e,c);if(!c){this.Jj(b)}else{c.nj(b);c.oj()}}else{if(!c){this.Jj(b)}else{c.nj(b);c.oj()}}return e}else{e=cJd(this,a);if(this.Mj()&&!!e){c=this.Oj(e,null);!!c&&c.oj()}return e}};_.Xi=function nKd(a,b){return WJd(this,a,b)};var i6=sfb(JHe,'DelegatingNotifyingListImpl',2094);feb(152,1,GJe);_.nj=function PKd(a){return oKd(this,a)};_.oj=function QKd(){pKd(this)};_.gj=function RKd(){return this.d};_.Kj=function SKd(){return null};_.Rj=function TKd(){return null};_.hj=function UKd(a){return -1};_.ij=function VKd(){return yKd(this)};_.jj=function WKd(){return null};_.kj=function XKd(){return HKd(this)};_.lj=function YKd(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o};_.Sj=function ZKd(){return false};_.mj=function $Kd(a){var b,c,d,e,f,g,h,i,j,k,l;switch(this.d){case 1:case 2:{e=a.gj();switch(e){case 1:case 2:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){this.g=a.ij();a.gj()==1&&(this.d=1);return true}}}}case 4:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){j=JKd(this);i=this.o<0?this.o<-2?-2-this.o-1:-1:this.o;g=a.lj();this.d=6;l=new ZHd(2);if(i<=g){WGd(l,this.n);WGd(l,a.kj());this.g=cD(WC(kE,1),Pwe,28,15,[this.o=i,g+1])}else{WGd(l,a.kj());WGd(l,this.n);this.g=cD(WC(kE,1),Pwe,28,15,[this.o=g,i])}this.n=l;j||(this.o=-2-this.o-1);return true}break}}break}case 6:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.jj())&&this.hj(null)==a.hj(null)){j=JKd(this);g=a.lj();k=RD(this.g,53);d=$C(kE,Pwe,28,k.length+1,15,1);b=0;while(b<k.length){h=k[b];if(h<=g){d[b++]=h;++g}else{break}}c=RD(this.n,15);c.bd(b,a.kj());d[b]=g;while(++b<d.length){d[b]=k[b-1]}this.g=d;j||(this.o=-2-d[0]);return true}break}}break}}return false};_.Ib=function _Kd(){var a,b,c,d;d=new Shb(nfb(this.Rm)+'@'+(b=tb(this)>>>0,b.toString(16)));d.a+=' (eventType: ';switch(this.d){case 1:{d.a+='SET';break}case 2:{d.a+='UNSET';break}case 3:{d.a+='ADD';break}case 5:{d.a+='ADD_MANY';break}case 4:{d.a+='REMOVE';break}case 6:{d.a+='REMOVE_MANY';break}case 7:{d.a+='MOVE';break}case 8:{d.a+='REMOVING_ADAPTER';break}case 9:{d.a+='RESOLVE';break}default:{Lhb(d,this.d);break}}IKd(this)&&(d.a+=', touch: true',d);d.a+=', position: ';Lhb(d,this.o<0?this.o<-2?-2-this.o-1:-1:this.o);d.a+=', notifier: ';Mhb(d,this.jj());d.a+=', feature: ';Mhb(d,this.Kj());d.a+=', oldValue: ';Mhb(d,HKd(this));d.a+=', newValue: ';if(this.d==6&&ZD(this.g,53)){c=RD(this.g,53);d.a+='[';for(a=0;a<c.length;){d.a+=c[a];++a<c.length&&(d.a+=pve,d)}d.a+=']'}else{Mhb(d,yKd(this))}d.a+=', isTouch: ';Ohb(d,IKd(this));d.a+=', wasSet: ';Ohb(d,JKd(this));d.a+=')';return d.a};_.d=0;_.e=0;_.f=0;_.j=0;_.k=0;_.o=0;_.p=0;var k6=sfb(JHe,'NotificationImpl',152);feb(1188,152,GJe,aLd);_.Kj=function bLd(){return this.a.Kj()};_.hj=function cLd(a){return this.a.Lj()};_.jj=function dLd(){return this.a.jj()};var h6=sfb(JHe,'DelegatingNotifyingListImpl/1',1188);feb(251,66,PIe,fLd,gLd);_.Fc=function hLd(a){return eLd(this,RD(a,378))};_.nj=function iLd(a){return eLd(this,a)};_.oj=function jLd(){var a,b,c;for(a=0;a<this.i;++a){b=RD(this.g[a],378);c=b.jj();c!=null&&b.gj()!=-1&&RD(c,94).xh(b)}};_.aj=function kLd(a){return $C(e6,rve,378,a,0,1)};var j6=sfb(JHe,'NotificationChainImpl',251);feb(1524,93,IHe);_.uh=function lLd(){return this.e};_.wh=function mLd(){return (this.f&1)!=0};_.f=1;var l6=sfb(JHe,'NotifierImpl',1524);feb(2091,66,PIe);_.Ei=function yLd(a,b){return nLd(this,a,b)};_.Fi=function zLd(a){return this.Ei(this.i,a)};_.Gi=function ALd(a,b){oLd(this,a,b)};_.Hi=function BLd(a){pLd(this,a)};_.Li=function CLd(){return !this.Mj()};_.$b=function DLd(){sLd(this)};_.Ij=function ELd(a,b,c,d,e){return new VLd(this,a,b,c,d,e)};_.Jj=function FLd(a){qvd(this.jj(),a)};_.Kj=function GLd(){return null};_.Lj=function HLd(){return -1};_.jj=function ILd(){return null};_.Mj=function JLd(){return false};_.Tj=function KLd(){return false};_.Nj=function LLd(a,b){return b};_.Oj=function MLd(a,b){return b};_.Pj=function NLd(){return false};_.Qj=function OLd(){return this.i!=0};_.Ti=function PLd(a,b){return uLd(this,a,b)};_.gd=function QLd(a){return vLd(this,a)};_.Xi=function RLd(a,b){return xLd(this,a,b)};_.Uj=function SLd(a,b){return b};_.Vj=function TLd(a,b){return b};_.Wj=function ULd(a,b,c){return c};var n6=sfb(JHe,'NotifyingListImpl',2091);feb(1187,152,GJe,VLd);_.Kj=function WLd(){return this.a.Kj()};_.hj=function XLd(a){return this.a.Lj()};_.jj=function YLd(){return this.a.jj()};var m6=sfb(JHe,'NotifyingListImpl/1',1187);feb(966,66,PIe,ZLd);_.Hc=function $Ld(a){if(this.i>10){if(!this.b||this.c.j!=this.a){this.b=new btb(this);this.a=this.j}return Zsb(this.b,a)}else{return PHd(this,a)}};_.Yi=function _Ld(){return true};_.a=0;var o6=sfb(sIe,'AbstractEList/1',966);feb(301,77,lxe,aMd);var p6=sfb(sIe,'AbstractEList/BasicIndexOutOfBoundsException',301);feb(40,1,Ave,dMd);_.Nb=function gMd(a){Ztb(this,a)};_.Xj=function eMd(){if(this.i.j!=this.f){throw Adb(new Jrb)}};_.Yj=function fMd(){return bMd(this)};_.Ob=function hMd(){return this.e!=this.i.gc()};_.Pb=function iMd(){return this.Yj()};_.Qb=function jMd(){cMd(this)};_.e=0;_.f=0;_.g=-1;var q6=sfb(sIe,'AbstractEList/EIterator',40);feb(286,40,Jve,mMd,nMd);_.Qb=function vMd(){cMd(this)};_.Rb=function oMd(a){kMd(this,a)};_.Zj=function pMd(){var b;try{b=this.d.Xb(--this.e);this.Xj();this.g=this.e;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.$j=function qMd(a){lMd(this,a)};_.Sb=function rMd(){return this.e!=0};_.Tb=function sMd(){return this.e};_.Ub=function tMd(){return this.Zj()};_.Vb=function uMd(){return this.e-1};_.Wb=function wMd(a){this.$j(a)};var r6=sfb(sIe,'AbstractEList/EListIterator',286);feb(355,40,Ave,yMd);_.Yj=function zMd(){return xMd(this)};_.Qb=function AMd(){throw Adb(new jib)};var s6=sfb(sIe,'AbstractEList/NonResolvingEIterator',355);feb(398,286,Jve,BMd,CMd);_.Rb=function DMd(a){throw Adb(new jib)};_.Yj=function EMd(){var b;try{b=this.c.Vi(this.e);this.Xj();this.g=this.e++;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.Zj=function FMd(){var b;try{b=this.c.Vi(--this.e);this.Xj();this.g=this.e;return b}catch(a){a=zdb(a);if(ZD(a,77)){this.Xj();throw Adb(new Dvb)}else throw Adb(a)}};_.Qb=function GMd(){throw Adb(new jib)};_.Wb=function HMd(a){throw Adb(new jib)};var t6=sfb(sIe,'AbstractEList/NonResolvingEListIterator',398);feb(2080,70,JJe);_.Ei=function PMd(a,b){var c,d,e,f,g,h,i,j,k,l,m;e=b.gc();if(e!=0){j=RD(Ywd(this.a,4),129);k=j==null?0:j.length;m=k+e;d=NMd(this,m);l=k-a;l>0&&hib(j,a,d,a+e,l);i=b.Kc();for(g=0;g<e;++g){h=i.Pb();c=a+g;LMd(d,c,gHd(this,h))}Bde(this,d);for(f=0;f<e;++f){h=d[a];this.Mi(a,h);++a}return true}else{++this.j;return false}};_.Fi=function QMd(a){var b,c,d,e,f,g,h,i,j;d=a.gc();if(d!=0){i=(c=RD(Ywd(this.a,4),129),c==null?0:c.length);j=i+d;b=NMd(this,j);h=a.Kc();for(f=i;f<j;++f){g=h.Pb();LMd(b,f,gHd(this,g))}Bde(this,b);for(e=i;e<j;++e){g=b[e];this.Mi(e,g)}return true}else{++this.j;return false}};_.Gi=function RMd(a,b){var c,d,e,f;d=RD(Ywd(this.a,4),129);e=d==null?0:d.length;c=NMd(this,e+1);f=gHd(this,b);a!=e&&hib(d,a,c,a+1,e-a);bD(c,a,f);Bde(this,c);this.Mi(a,b)};_.Hi=function SMd(a){var b,c,d;d=(c=RD(Ywd(this.a,4),129),c==null?0:c.length);b=NMd(this,d+1);LMd(b,d,gHd(this,a));Bde(this,b);this.Mi(d,a)};_.Ii=function TMd(){return new sNd(this)};_.Ji=function UMd(){return new vNd(this)};_.Ki=function VMd(a){var b,c;c=(b=RD(Ywd(this.a,4),129),b==null?0:b.length);if(a<0||a>c)throw Adb(new aMd(a,c));return new wNd(this,a)};_.$b=function WMd(){var a,b;++this.j;a=RD(Ywd(this.a,4),129);b=a==null?0:a.length;Bde(this,null);$Gd(this,b,a)};_.Hc=function XMd(a){var b,c,d,e,f;b=RD(Ywd(this.a,4),129);if(b!=null){if(a!=null){for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(pb(a,c)){return true}}}else{for(d=b,e=0,f=d.length;e<f;++e){c=d[e];if(dE(c)===dE(a)){return true}}}}return false};_.Xb=function YMd(a){var b,c;b=RD(Ywd(this.a,4),129);c=b==null?0:b.length;if(a>=c)throw Adb(new aMd(a,c));return b[a]};_.dd=function ZMd(a){var b,c,d;b=RD(Ywd(this.a,4),129);if(b!=null){if(a!=null){for(c=0,d=b.length;c<d;++c){if(pb(a,b[c])){return c}}}else{for(c=0,d=b.length;c<d;++c){if(dE(b[c])===dE(a)){return c}}}}return -1};_.dc=function $Md(){return RD(Ywd(this.a,4),129)==null};_.Kc=function _Md(){return new jNd(this)};_.ed=function aNd(){return new nNd(this)};_.fd=function bNd(a){var b,c;c=(b=RD(Ywd(this.a,4),129),b==null?0:b.length);if(a<0||a>c)throw Adb(new aMd(a,c));return new oNd(this,a)};_.Ti=function cNd(a,b){var c,d,e;c=MMd(this);e=c==null?0:c.length;if(a>=e)throw Adb(new veb(MIe+a+NIe+e));if(b>=e)throw Adb(new veb(OIe+b+NIe+e));d=c[b];if(a!=b){a<b?hib(c,a,c,a+1,b-a):hib(c,b+1,c,b,a-b);bD(c,a,d);Bde(this,c)}return d};_.Vi=function dNd(a){return RD(Ywd(this.a,4),129)[a]};_.gd=function eNd(a){return OMd(this,a)};_.Xi=function fNd(a,b){var c,d;c=MMd(this);d=c[a];LMd(c,a,gHd(this,b));Bde(this,c);return d};_.gc=function gNd(){var a;return a=RD(Ywd(this.a,4),129),a==null?0:a.length};_.Pc=function hNd(){var a,b,c;a=RD(Ywd(this.a,4),129);c=a==null?0:a.length;b=$C(d6,IJe,424,c,0,1);c>0&&hib(a,0,b,0,c);return b};_.Qc=function iNd(a){var b,c,d;b=RD(Ywd(this.a,4),129);d=b==null?0:b.length;if(d>0){if(a.length<d){c=IMd(rb(a).c,d);a=c}hib(b,0,a,0,d)}a.length>d&&bD(a,d,null);return a};var JMd;var A6=sfb(sIe,'ArrayDelegatingEList',2080);feb(1051,40,Ave,jNd);_.Xj=function kNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};_.Qb=function lNd(){cMd(this);this.a=RD(Ywd(this.b.a,4),129)};var w6=sfb(sIe,'ArrayDelegatingEList/EIterator',1051);feb(722,286,Jve,nNd,oNd);_.Xj=function pNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};_.$j=function qNd(a){lMd(this,a);this.a=RD(Ywd(this.b.a,4),129)};_.Qb=function rNd(){cMd(this);this.a=RD(Ywd(this.b.a,4),129)};var x6=sfb(sIe,'ArrayDelegatingEList/EListIterator',722);feb(1052,355,Ave,sNd);_.Xj=function tNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};var y6=sfb(sIe,'ArrayDelegatingEList/NonResolvingEIterator',1052);feb(723,398,Jve,vNd,wNd);_.Xj=function xNd(){if(this.b.j!=this.f||dE(RD(Ywd(this.b.a,4),129))!==dE(this.a)){throw Adb(new Jrb)}};var z6=sfb(sIe,'ArrayDelegatingEList/NonResolvingEListIterator',723);feb(615,301,lxe,yNd);var B6=sfb(sIe,'BasicEList/BasicIndexOutOfBoundsException',615);feb(710,66,PIe,zNd);_.bd=function ANd(a,b){throw Adb(new jib)};_.Fc=function BNd(a){throw Adb(new jib)};_.cd=function CNd(a,b){throw Adb(new jib)};_.Gc=function DNd(a){throw Adb(new jib)};_.$b=function ENd(){throw Adb(new jib)};_._i=function FNd(a){throw Adb(new jib)};_.Kc=function GNd(){return this.Ii()};_.ed=function HNd(){return this.Ji()};_.fd=function INd(a){return this.Ki(a)};_.Ti=function JNd(a,b){throw Adb(new jib)};_.Ui=function KNd(a,b){throw Adb(new jib)};_.gd=function LNd(a){throw Adb(new jib)};_.Mc=function MNd(a){throw Adb(new jib)};_.hd=function NNd(a,b){throw Adb(new jib)};var C6=sfb(sIe,'BasicEList/UnmodifiableEList',710);feb(721,1,{3:1,20:1,16:1,15:1,61:1,597:1});_.bd=function mOd(a,b){ONd(this,a,RD(b,44))};_.Fc=function nOd(a){return PNd(this,RD(a,44))};_.Jc=function vOd(a){xgb(this,a)};_.Xb=function wOd(a){return RD(QHd(this.c,a),136)};_.Ti=function FOd(a,b){return RD(this.c.Ti(a,b),44)};_.Ui=function GOd(a,b){eOd(this,a,RD(b,44))};_.Lc=function JOd(){return new SDb(null,new Swb(this,16))};_.gd=function KOd(a){return RD(this.c.gd(a),44)};_.hd=function MOd(a,b){return kOd(this,a,RD(b,44))};_.jd=function OOd(a){tvb(this,a)};_.Nc=function POd(){return new Swb(this,16)};_.Oc=function QOd(){return new SDb(null,new Swb(this,16))};_.cd=function oOd(a,b){return this.c.cd(a,b)};_.Gc=function pOd(a){return this.c.Gc(a)};_.$b=function qOd(){this.c.$b()};_.Hc=function rOd(a){return this.c.Hc(a)};_.Ic=function sOd(a){return Be(this.c,a)};_._j=function tOd(){var a,b,c;if(this.d==null){this.d=$C(D6,KJe,66,2*this.f+1,0,1);c=this.e;this.f=0;for(b=this.c.Kc();b.e!=b.i.gc();){a=RD(b.Yj(),136);UNd(this,a)}this.e=c}};_.Fb=function uOd(a){return ZNd(this,a)};_.Hb=function xOd(){return cHd(this.c)};_.dd=function yOd(a){return this.c.dd(a)};_.ak=function zOd(){this.c=new YOd(this)};_.dc=function AOd(){return this.f==0};_.Kc=function BOd(){return this.c.Kc()};_.ed=function COd(){return this.c.ed()};_.fd=function DOd(a){return this.c.fd(a)};_.bk=function EOd(){return dOd(this)};_.ck=function HOd(a,b,c){return new ZPd(a,b,c)};_.dk=function IOd(){return new cPd};_.Mc=function LOd(a){return hOd(this,a)};_.gc=function NOd(){return this.f};_.kd=function ROd(a,b){return new Rkb(this.c,a,b)};_.Pc=function SOd(){return this.c.Pc()};_.Qc=function TOd(a){return this.c.Qc(a)};_.Ib=function UOd(){return fHd(this.c)};_.e=0;_.f=0;var Q6=sfb(sIe,'BasicEMap',721);feb(1046,66,PIe,YOd);_.Mi=function ZOd(a,b){VOd(this,RD(b,136))};_.Pi=function _Od(a,b,c){var d;++(d=this,RD(b,136),d).a.e};_.Qi=function aPd(a,b){WOd(this,RD(b,136))};_.Ri=function bPd(a,b,c){XOd(this,RD(b,136),RD(c,136))};_.Oi=function $Od(a,b){TNd(this.a)};var E6=sfb(sIe,'BasicEMap/1',1046);feb(1047,66,PIe,cPd);_.aj=function dPd(a){return $C(N6,LJe,621,a,0,1)};var F6=sfb(sIe,'BasicEMap/2',1047);feb(1048,Eve,Fve,ePd);_.$b=function fPd(){this.a.c.$b()};_.Hc=function gPd(a){return QNd(this.a,a)};_.Kc=function hPd(){return this.a.f==0?(jQd(),iQd.a):new DPd(this.a)};_.Mc=function iPd(a){var b;b=this.a.f;jOd(this.a,a);return this.a.f!=b};_.gc=function jPd(){return this.a.f};var G6=sfb(sIe,'BasicEMap/3',1048);feb(1049,31,Dve,kPd);_.$b=function lPd(){this.a.c.$b()};_.Hc=function mPd(a){return RNd(this.a,a)};_.Kc=function nPd(){return this.a.f==0?(jQd(),iQd.a):new FPd(this.a)};_.gc=function oPd(){return this.a.f};var H6=sfb(sIe,'BasicEMap/4',1049);feb(1050,Eve,Fve,qPd);_.$b=function rPd(){this.a.c.$b()};_.Hc=function sPd(a){var b,c,d,e,f,g,h,i,j;if(this.a.f>0&&ZD(a,44)){this.a._j();i=RD(a,44);h=i.ld();e=h==null?0:tb(h);f=bOd(this.a,e);b=this.a.d[f];if(b){c=RD(b.g,379);j=b.i;for(g=0;g<j;++g){d=c[g];if(d.Bi()==e&&d.Fb(i)){return true}}}}return false};_.Kc=function tPd(){return this.a.f==0?(jQd(),iQd.a):new xPd(this.a)};_.Mc=function uPd(a){return pPd(this,a)};_.gc=function vPd(){return this.a.f};var I6=sfb(sIe,'BasicEMap/5',1050);feb(622,1,Ave,xPd);_.Nb=function yPd(a){Ztb(this,a)};_.Ob=function zPd(){return this.b!=-1};_.Pb=function APd(){var a;if(this.f.e!=this.c){throw Adb(new Jrb)}if(this.b==-1){throw Adb(new Dvb)}this.d=this.a;this.e=this.b;wPd(this);a=RD(this.f.d[this.d].g[this.e],136);return this.ek(a)};_.Qb=function BPd(){if(this.f.e!=this.c){throw Adb(new Jrb)}if(this.e==-1){throw Adb(new cgb)}this.f.c.Mc(QHd(this.f.d[this.d],this.e));this.c=this.f.e;this.e=-1;this.a==this.d&&this.b!=-1&&--this.b};_.ek=function CPd(a){return a};_.a=0;_.b=-1;_.c=0;_.d=0;_.e=0;var J6=sfb(sIe,'BasicEMap/BasicEMapIterator',622);feb(1044,622,Ave,DPd);_.ek=function EPd(a){return a.ld()};var K6=sfb(sIe,'BasicEMap/BasicEMapKeyIterator',1044);feb(1045,622,Ave,FPd);_.ek=function GPd(a){return a.md()};var L6=sfb(sIe,'BasicEMap/BasicEMapValueIterator',1045);feb(1043,1,Cve,IPd);_.wc=function OPd(a){Bvb(this,a)};_.yc=function TPd(a,b,c){return Cvb(this,a,b,c)};_.$b=function JPd(){this.a.c.$b()};_._b=function KPd(a){return HPd(this,a)};_.uc=function LPd(a){return RNd(this.a,a)};_.vc=function MPd(){return YNd(this.a)};_.Fb=function NPd(a){return ZNd(this.a,a)};_.xc=function PPd(a){return $Nd(this.a,a)};_.Hb=function QPd(){return cHd(this.a.c)};_.dc=function RPd(){return this.a.f==0};_.ec=function SPd(){return cOd(this.a)};_.zc=function UPd(a,b){return fOd(this.a,a,b)};_.Bc=function VPd(a){return jOd(this.a,a)};_.gc=function WPd(){return this.a.f};_.Ib=function XPd(){return fHd(this.a.c)};_.Cc=function YPd(){return lOd(this.a)};var M6=sfb(sIe,'BasicEMap/DelegatingMap',1043);feb(621,1,{44:1,136:1,621:1},ZPd);_.Fb=function $Pd(a){var b;if(ZD(a,44)){b=RD(a,44);return (this.b!=null?pb(this.b,b.ld()):dE(this.b)===dE(b.ld()))&&(this.c!=null?pb(this.c,b.md()):dE(this.c)===dE(b.md()))}else{return false}};_.Bi=function _Pd(){return this.a};_.ld=function aQd(){return this.b};_.md=function bQd(){return this.c};_.Hb=function cQd(){return this.a^(this.c==null?0:tb(this.c))};_.Ci=function dQd(a){this.a=a};_.Di=function eQd(a){throw Adb(new xz)};_.nd=function fQd(a){var b;b=this.c;this.c=a;return b};_.Ib=function gQd(){return this.b+'->'+this.c};_.a=0;var N6=sfb(sIe,'BasicEMap/EntryImpl',621);feb(546,1,{},hQd);var P6=sfb(sIe,'BasicEMap/View',546);var iQd;feb(783,1,{});_.Fb=function xQd(a){return Rt((yob(),vob),a)};_.Hb=function yQd(){return Cob((yob(),vob))};_.Ib=function zQd(){return Fe((yob(),vob))};var V6=sfb(sIe,'ECollections/BasicEmptyUnmodifiableEList',783);feb(1348,1,Jve,AQd);_.Nb=function CQd(a){Ztb(this,a)};_.Rb=function BQd(a){throw Adb(new jib)};_.Ob=function DQd(){return false};_.Sb=function EQd(){return false};_.Pb=function FQd(){throw Adb(new Dvb)};_.Tb=function GQd(){return 0};_.Ub=function HQd(){throw Adb(new Dvb)};_.Vb=function IQd(){return -1};_.Qb=function JQd(){throw Adb(new jib)};_.Wb=function KQd(a){throw Adb(new jib)};var U6=sfb(sIe,'ECollections/BasicEmptyUnmodifiableEList/1',1348);feb(1346,783,{20:1,16:1,15:1,61:1},LQd);_.bd=function MQd(a,b){mQd()};_.Fc=function NQd(a){return nQd()};_.cd=function OQd(a,b){return oQd()};_.Gc=function PQd(a){return pQd()};_.$b=function QQd(){qQd()};_.Hc=function RQd(a){return false};_.Ic=function SQd(a){return false};_.Jc=function TQd(a){xgb(this,a)};_.Xb=function UQd(a){return Iob((yob(),vob,a)),null};_.dd=function VQd(a){return -1};_.dc=function WQd(){return true};_.Kc=function XQd(){return this.a};_.ed=function YQd(){return this.a};_.fd=function ZQd(a){return this.a};_.Ti=function $Qd(a,b){return rQd()};_.Ui=function _Qd(a,b){sQd()};_.Lc=function aRd(){return new SDb(null,new Swb(this,16))};_.gd=function bRd(a){return tQd()};_.Mc=function cRd(a){return uQd()};_.hd=function dRd(a,b){return vQd()};_.gc=function eRd(){return 0};_.jd=function fRd(a){tvb(this,a)};_.Nc=function gRd(){return new Swb(this,16)};_.Oc=function hRd(){return new SDb(null,new Swb(this,16))};_.kd=function iRd(a,b){return yob(),new Rkb(vob,a,b)};_.Pc=function jRd(){return De((yob(),vob))};_.Qc=function kRd(a){return yob(),Ee(vob,a)};var W6=sfb(sIe,'ECollections/EmptyUnmodifiableEList',1346);feb(1347,783,{20:1,16:1,15:1,61:1,597:1},lRd);_.bd=function mRd(a,b){mQd()};_.Fc=function nRd(a){return nQd()};_.cd=function oRd(a,b){return oQd()};_.Gc=function pRd(a){return pQd()};_.$b=function qRd(){qQd()};_.Hc=function rRd(a){return false};_.Ic=function sRd(a){return false};_.Jc=function tRd(a){xgb(this,a)};_.Xb=function uRd(a){return Iob((yob(),vob,a)),null};_.dd=function vRd(a){return -1};_.dc=function wRd(){return true};_.Kc=function xRd(){return this.a};_.ed=function yRd(){return this.a};_.fd=function zRd(a){return this.a};_.Ti=function BRd(a,b){return rQd()};_.Ui=function CRd(a,b){sQd()};_.Lc=function DRd(){return new SDb(null,new Swb(this,16))};_.gd=function ERd(a){return tQd()};_.Mc=function FRd(a){return uQd()};_.hd=function GRd(a,b){return vQd()};_.gc=function HRd(){return 0};_.jd=function IRd(a){tvb(this,a)};_.Nc=function JRd(){return new Swb(this,16)};_.Oc=function KRd(){return new SDb(null,new Swb(this,16))};_.kd=function LRd(a,b){return yob(),new Rkb(vob,a,b)};_.Pc=function MRd(){return De((yob(),vob))};_.Qc=function NRd(a){return yob(),Ee(vob,a)};_.bk=function ARd(){return yob(),yob(),wob};var X6=sfb(sIe,'ECollections/EmptyUnmodifiableEMap',1347);var Z6=ufb(sIe,'Enumerator');var ORd;feb(288,1,{288:1},lSd);_.Fb=function pSd(a){var b;if(this===a)return true;if(!ZD(a,288))return false;b=RD(a,288);return this.f==b.f&&rSd(this.i,b.i)&&qSd(this.a,(this.f&256)!=0?(b.f&256)!=0?b.a:null:(b.f&256)!=0?null:b.a)&&qSd(this.d,b.d)&&qSd(this.g,b.g)&&qSd(this.e,b.e)&&iSd(this,b)};_.Hb=function uSd(){return this.f};_.Ib=function CSd(){return jSd(this)};_.f=0;var SRd=0,TRd=0,URd=0,VRd=0,WRd=0,XRd=0,YRd=0,ZRd=0,$Rd=0,_Rd,aSd=0,bSd=0,cSd=0,dSd=0,eSd,fSd;var c7=sfb(sIe,'URI',288);feb(1121,45,Hxe,MSd);_.zc=function NSd(a,b){return RD($jb(this,WD(a),RD(b,288)),288)};var b7=sfb(sIe,'URI/URICache',1121);feb(505,66,PIe,OSd,PSd);_.Si=function QSd(){return true};var d7=sfb(sIe,'UniqueEList',505);feb(590,63,swe,RSd);var e7=sfb(sIe,'WrappedException',590);var f7=ufb(vHe,OJe);var A7=ufb(vHe,PJe);var y7=ufb(vHe,QJe);var g7=ufb(vHe,RJe);var i7=ufb(vHe,SJe);var h7=ufb(vHe,'EClass');var k7=ufb(vHe,'EDataType');var SSd;feb(1233,45,Hxe,VSd);_.xc=function WSd(a){return bE(a)?Xjb(this,a):Wd(qtb(this.f,a))};var j7=sfb(vHe,'EDataType/Internal/ConversionDelegate/Factory/Registry/Impl',1233);var m7=ufb(vHe,'EEnum');var l7=ufb(vHe,TJe);var o7=ufb(vHe,UJe);var s7=ufb(vHe,VJe);var XSd;var u7=ufb(vHe,WJe);var v7=ufb(vHe,XJe);feb(1042,1,{},_Sd);_.Ib=function aTd(){return 'NIL'};var w7=sfb(vHe,'EStructuralFeature/Internal/DynamicValueHolder/1',1042);var bTd;feb(1041,45,Hxe,eTd);_.xc=function fTd(a){return bE(a)?Xjb(this,a):Wd(qtb(this.f,a))};var x7=sfb(vHe,'EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl',1041);var z7=ufb(vHe,YJe);var B7=ufb(vHe,'EValidator/PatternMatcher');var gTd;var iTd;var kTd;var mTd,nTd,oTd,pTd,qTd,rTd,sTd,tTd,uTd,vTd,wTd,xTd,yTd,zTd,ATd,BTd,CTd,DTd,ETd,FTd,GTd,HTd,ITd;var Jbb=ufb(ZJe,'FeatureMap/Entry');feb(545,1,{76:1},KTd);_.Lk=function LTd(){return this.a};_.md=function MTd(){return this.b};var C7=sfb(SHe,'BasicEObjectImpl/1',545);feb(1040,1,$Je,NTd);_.Fk=function OTd(a){return Fvd(this.a,this.b,a)};_.Qj=function PTd(){return Lvd(this.a,this.b)};_.Wb=function QTd(a){Xvd(this.a,this.b,a)};_.Gk=function RTd(){_vd(this.a,this.b)};var D7=sfb(SHe,'BasicEObjectImpl/4',1040);feb(2081,1,{114:1});_.Mk=function UTd(a){this.e=a==0?STd:$C(jJ,rve,1,a,5,1)};_.li=function VTd(a){return this.e[a]};_.mi=function WTd(a,b){this.e[a]=b};_.ni=function XTd(a){this.e[a]=null};_.Nk=function YTd(){return this.c};_.Ok=function ZTd(){throw Adb(new jib)};_.Pk=function $Td(){throw Adb(new jib)};_.Qk=function _Td(){return this.d};_.Rk=function aUd(){return this.e!=null};_.Sk=function bUd(a){this.c=a};_.Tk=function cUd(a){throw Adb(new jib)};_.Uk=function dUd(a){throw Adb(new jib)};_.Vk=function eUd(a){this.d=a};var STd;var E7=sfb(SHe,'BasicEObjectImpl/EPropertiesHolderBaseImpl',2081);feb(192,2081,{114:1},fUd);_.Ok=function gUd(){return this.a};_.Pk=function hUd(){return this.b};_.Tk=function iUd(a){this.a=a};_.Uk=function jUd(a){this.b=a};var F7=sfb(SHe,'BasicEObjectImpl/EPropertiesHolderImpl',192);feb(516,99,RHe,kUd);_.uh=function lUd(){return this.f};_.zh=function mUd(){return this.k};_.Bh=function nUd(a,b){this.g=a;this.i=b};_.Dh=function oUd(){return (this.j&2)==0?this.ii():this.$h().Nk()};_.Fh=function pUd(){return this.i};_.wh=function qUd(){return (this.j&1)!=0};_.Ph=function rUd(){return this.g};_.Vh=function sUd(){return (this.j&4)!=0};_.$h=function tUd(){return !this.k&&(this.k=new fUd),this.k};_.ci=function uUd(a){this.$h().Sk(a);a?(this.j|=2):(this.j&=-3)};_.ei=function vUd(a){this.$h().Uk(a);a?(this.j|=4):(this.j&=-5)};_.ii=function wUd(){return (lTd(),kTd).S};_.i=0;_.j=1;var q8=sfb(SHe,'EObjectImpl',516);feb(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},zUd);_.li=function AUd(a){return this.e[a]};_.mi=function BUd(a,b){this.e[a]=b};_.ni=function CUd(a){this.e[a]=null};_.Dh=function DUd(){return this.d};_.Ih=function EUd(a){return BYd(this.d,a)};_.Kh=function FUd(){return this.d};_.Oh=function GUd(){return this.e!=null};_.$h=function HUd(){!this.k&&(this.k=new VUd);return this.k};_.ci=function IUd(a){this.d=a};_.hi=function JUd(){var a;if(this.e==null){a=AYd(this.d);this.e=a==0?xUd:$C(jJ,rve,1,a,5,1)}return this};_.ji=function KUd(){return 0};var xUd;var J7=sfb(SHe,'DynamicEObjectImpl',798);feb(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},LUd);_.Fb=function NUd(a){return this===a};_.Hb=function RUd(){return kFb(this)};_.ci=function MUd(a){this.d=a;this.b=wYd(a,'key');this.c=wYd(a,aIe)};_.Bi=function OUd(){var a;if(this.a==-1){a=Gvd(this,this.b);this.a=a==null?0:tb(a)}return this.a};_.ld=function PUd(){return Gvd(this,this.b)};_.md=function QUd(){return Gvd(this,this.c)};_.Ci=function SUd(a){this.a=a};_.Di=function TUd(a){Xvd(this,this.b,a)};_.nd=function UUd(a){var b;b=Gvd(this,this.c);Xvd(this,this.c,a);return b};_.a=0;var H7=sfb(SHe,'DynamicEObjectImpl/BasicEMapEntry',1522);feb(1523,1,{114:1},VUd);_.Mk=function WUd(a){throw Adb(new jib)};_.li=function XUd(a){throw Adb(new jib)};_.mi=function YUd(a,b){throw Adb(new jib)};_.ni=function ZUd(a){throw Adb(new jib)};_.Nk=function $Ud(){throw Adb(new jib)};_.Ok=function _Ud(){return this.a};_.Pk=function aVd(){return this.b};_.Qk=function bVd(){return this.c};_.Rk=function cVd(){throw Adb(new jib)};_.Sk=function dVd(a){throw Adb(new jib)};_.Tk=function eVd(a){this.a=a};_.Uk=function fVd(a){this.b=a};_.Vk=function gVd(a){this.c=a};var I7=sfb(SHe,'DynamicEObjectImpl/DynamicEPropertiesHolderImpl',1523);feb(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},pVd);_.Ah=function qVd(a){return iVd(this,a)};_.Lh=function rVd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.d;case 2:return c?(!this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),this.b):(!this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),dOd(this.b));case 3:return kVd(this);case 4:return !this.a&&(this.a=new XZd(r7,this,4)),this.a;case 5:return !this.c&&(this.c=new zie(r7,this,5)),this.c;}return zvd(this,a-AYd((JTd(),mTd)),vYd((d=RD(Ywd(this,16),29),!d?mTd:d),a),b,c)};_.Sh=function sVd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 3:!!this.Cb&&(c=(e=this.Db>>16,e>=0?iVd(this,c):this.Cb.Th(this,-1-e,null,c)));return hVd(this,RD(a,155),c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),mTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),mTd)),a,c)};_.Uh=function tVd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 2:return !this.b&&(this.b=new SVd((JTd(),FTd),C8,this)),BVd(this.b,a,c);case 3:return hVd(this,null,c);case 4:return !this.a&&(this.a=new XZd(r7,this,4)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),mTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),mTd)),a,c)};_.Wh=function uVd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return !!this.b&&this.b.f!=0;case 3:return !!kVd(this);case 4:return !!this.a&&this.a.i!=0;case 5:return !!this.c&&this.c.i!=0;}return Avd(this,a-AYd((JTd(),mTd)),vYd((b=RD(Ywd(this,16),29),!b?mTd:b),a))};_.bi=function vVd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:mVd(this,WD(b));return;case 2:!this.b&&(this.b=new SVd((JTd(),FTd),C8,this));CVd(this.b,b);return;case 3:lVd(this,RD(b,155));return;case 4:!this.a&&(this.a=new XZd(r7,this,4));sLd(this.a);!this.a&&(this.a=new XZd(r7,this,4));YGd(this.a,RD(b,16));return;case 5:!this.c&&(this.c=new zie(r7,this,5));sLd(this.c);!this.c&&(this.c=new zie(r7,this,5));YGd(this.c,RD(b,16));return;}Bvd(this,a-AYd((JTd(),mTd)),vYd((c=RD(Ywd(this,16),29),!c?mTd:c),a),b)};_.ii=function wVd(){return JTd(),mTd};_.ki=function xVd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:nVd(this,null);return;case 2:!this.b&&(this.b=new SVd((JTd(),FTd),C8,this));this.b.c.$b();return;case 3:lVd(this,null);return;case 4:!this.a&&(this.a=new XZd(r7,this,4));sLd(this.a);return;case 5:!this.c&&(this.c=new zie(r7,this,5));sLd(this.c);return;}Cvd(this,a-AYd((JTd(),mTd)),vYd((b=RD(Ywd(this,16),29),!b?mTd:b),a))};_.Ib=function yVd(){return oVd(this)};_.d=null;var L7=sfb(SHe,'EAnnotationImpl',519);feb(141,721,_Je,DVd);_.Gi=function EVd(a,b){zVd(this,a,RD(b,44))};_.Wk=function FVd(a,b){return AVd(this,RD(a,44),b)};_.$i=function GVd(a){return RD(RD(this.c,71).$i(a),136)};_.Ii=function HVd(){return RD(this.c,71).Ii()};_.Ji=function IVd(){return RD(this.c,71).Ji()};_.Ki=function JVd(a){return RD(this.c,71).Ki(a)};_.Xk=function KVd(a,b){return BVd(this,a,b)};_.Fk=function LVd(a){return RD(this.c,79).Fk(a)};_.ak=function MVd(){};_.Qj=function NVd(){return RD(this.c,79).Qj()};_.ck=function OVd(a,b,c){var d;d=RD(BXd(this.b).wi().si(this.b),136);d.Ci(a);d.Di(b);d.nd(c);return d};_.dk=function PVd(){return new uje(this)};_.Wb=function QVd(a){CVd(this,a)};_.Gk=function RVd(){RD(this.c,79).Gk()};var Dbb=sfb(ZJe,'EcoreEMap',141);feb(165,141,_Je,SVd);_._j=function TVd(){var a,b,c,d,e,f;if(this.d==null){f=$C(D6,KJe,66,2*this.f+1,0,1);for(c=this.c.Kc();c.e!=c.i.gc();){b=RD(c.Yj(),136);d=b.Bi();e=(d&lve)%f.length;a=f[e];!a&&(a=f[e]=new uje(this));a.Fc(b)}this.d=f}};var K7=sfb(SHe,'EAnnotationImpl/1',165);feb(291,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,480:1,54:1,99:1,158:1,291:1,119:1,120:1});_.Lh=function eWd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),this.Jk()?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Uh=function fWd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function gWd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function hWd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:this.ui(WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:this.Zk(RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function iWd(){return JTd(),HTd};_.ki=function jWd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:this.ui(null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.Zk(1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function kWd(){WVd(this);this.Bb|=1};_.Hk=function lWd(){return WVd(this)};_.Ik=function mWd(){return this.t};_.Jk=function nWd(){var a;return a=this.t,a>1||a==-1};_.Si=function oWd(){return (this.Bb&512)!=0};_.Yk=function pWd(a,b){return ZVd(this,a,b)};_.Zk=function qWd(a){bWd(this,a)};_.Ib=function rWd(){return cWd(this)};_.s=0;_.t=1;var A9=sfb(SHe,'ETypedElementImpl',291);feb(461,291,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,461:1,291:1,119:1,120:1,692:1});_.Ah=function IWd(a){return sWd(this,a)};_.Lh=function JWd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),this.Jk()?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function KWd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 17:!!this.Cb&&(c=(e=this.Db>>16,e>=0?sWd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,17,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),f.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function LWd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 17:return xvd(this,null,17,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function MWd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function NWd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:this.Zk(RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function OWd(){return JTd(),GTd};_.ki=function PWd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.Zk(1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function QWd(){Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.pk=function RWd(){return this.f};_.ik=function SWd(){return tWd(this)};_.qk=function TWd(){return uWd(this)};_.uk=function UWd(){return null};_.$k=function VWd(){return this.k};_.Lj=function WWd(){return this.n};_.vk=function XWd(){return vWd(this)};_.wk=function YWd(){var a,b,c,d,e,f,g,h,i;if(!this.p){c=uWd(this);(c.i==null&&rYd(c),c.i).length;d=this.uk();!!d&&AYd(uWd(d));e=WVd(this);g=e.kk();a=!g?null:(g.i&1)!=0?g==xdb?QI:g==kE?bJ:g==jE?ZI:g==iE?VI:g==lE?eJ:g==wdb?lJ:g==gE?RI:SI:g;b=tWd(this);h=e.ik();Mje(this);(this.Bb&Ove)!=0&&(!!(f=Tee((lke(),jke),c))&&f!=this||!!(f=zfe(Qee(jke,this))))?(this.p=new Z6d(this,f)):this.Jk()?this.al()?!d?(this.Bb&bKe)!=0?!a?this.bl()?(this.p=new i7d(42,this)):(this.p=new i7d(0,this)):a==UK?(this.p=new g7d(50,O6,this)):this.bl()?(this.p=new g7d(43,a,this)):(this.p=new g7d(1,a,this)):!a?this.bl()?(this.p=new i7d(44,this)):(this.p=new i7d(2,this)):a==UK?(this.p=new g7d(41,O6,this)):this.bl()?(this.p=new g7d(45,a,this)):(this.p=new g7d(3,a,this)):(this.Bb&bKe)!=0?!a?this.bl()?(this.p=new j7d(46,this,d)):(this.p=new j7d(4,this,d)):this.bl()?(this.p=new h7d(47,a,this,d)):(this.p=new h7d(5,a,this,d)):!a?this.bl()?(this.p=new j7d(48,this,d)):(this.p=new j7d(6,this,d)):this.bl()?(this.p=new h7d(49,a,this,d)):(this.p=new h7d(7,a,this,d)):ZD(e,156)?a==Jbb?(this.p=new i7d(40,this)):(this.Bb&512)!=0?(this.Bb&bKe)!=0?!a?(this.p=new i7d(8,this)):(this.p=new g7d(9,a,this)):!a?(this.p=new i7d(10,this)):(this.p=new g7d(11,a,this)):(this.Bb&bKe)!=0?!a?(this.p=new i7d(12,this)):(this.p=new g7d(13,a,this)):!a?(this.p=new i7d(14,this)):(this.p=new g7d(15,a,this)):!d?this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new i7d(16,this)):(this.p=new g7d(17,a,this)):!a?(this.p=new i7d(18,this)):(this.p=new g7d(19,a,this)):(this.Bb&bKe)!=0?!a?(this.p=new i7d(20,this)):(this.p=new g7d(21,a,this)):!a?(this.p=new i7d(22,this)):(this.p=new g7d(23,a,this)):(i=d.t,i>1||i==-1?this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new j7d(24,this,d)):(this.p=new h7d(25,a,this,d)):!a?(this.p=new j7d(26,this,d)):(this.p=new h7d(27,a,this,d)):(this.Bb&bKe)!=0?!a?(this.p=new j7d(28,this,d)):(this.p=new h7d(29,a,this,d)):!a?(this.p=new j7d(30,this,d)):(this.p=new h7d(31,a,this,d)):this.bl()?(this.Bb&bKe)!=0?!a?(this.p=new j7d(32,this,d)):(this.p=new h7d(33,a,this,d)):!a?(this.p=new j7d(34,this,d)):(this.p=new h7d(35,a,this,d)):(this.Bb&bKe)!=0?!a?(this.p=new j7d(36,this,d)):(this.p=new h7d(37,a,this,d)):!a?(this.p=new j7d(38,this,d)):(this.p=new h7d(39,a,this,d))):this._k()?this.bl()?(this.p=new K7d(RD(e,29),this,d)):(this.p=new C7d(RD(e,29),this,d)):ZD(e,156)?a==Jbb?(this.p=new i7d(40,this)):(this.Bb&bKe)!=0?!a?(this.p=new J8d(RD(e,156),b,h,this)):(this.p=new L8d(b,h,this,(a8d(),g==kE?Y7d:g==xdb?T7d:g==lE?Z7d:g==jE?X7d:g==iE?W7d:g==wdb?_7d:g==gE?U7d:g==hE?V7d:$7d))):!a?(this.p=new C8d(RD(e,156),b,h,this)):(this.p=new E8d(b,h,this,(a8d(),g==kE?Y7d:g==xdb?T7d:g==lE?Z7d:g==jE?X7d:g==iE?W7d:g==wdb?_7d:g==gE?U7d:g==hE?V7d:$7d))):this.al()?!d?(this.Bb&bKe)!=0?this.bl()?(this.p=new d9d(RD(e,29),this)):(this.p=new b9d(RD(e,29),this)):this.bl()?(this.p=new _8d(RD(e,29),this)):(this.p=new Z8d(RD(e,29),this)):(this.Bb&bKe)!=0?this.bl()?(this.p=new l9d(RD(e,29),this,d)):(this.p=new j9d(RD(e,29),this,d)):this.bl()?(this.p=new h9d(RD(e,29),this,d)):(this.p=new f9d(RD(e,29),this,d)):this.bl()?!d?(this.Bb&bKe)!=0?(this.p=new p9d(RD(e,29),this)):(this.p=new n9d(RD(e,29),this)):(this.Bb&bKe)!=0?(this.p=new t9d(RD(e,29),this,d)):(this.p=new r9d(RD(e,29),this,d)):!d?(this.Bb&bKe)!=0?(this.p=new v9d(RD(e,29),this)):(this.p=new N8d(RD(e,29),this)):(this.Bb&bKe)!=0?(this.p=new z9d(RD(e,29),this,d)):(this.p=new x9d(RD(e,29),this,d))}return this.p};_.rk=function ZWd(){return (this.Bb&gwe)!=0};_._k=function $Wd(){return false};_.al=function _Wd(){return false};_.sk=function aXd(){return (this.Bb&Ove)!=0};_.xk=function bXd(){return wWd(this)};_.bl=function cXd(){return false};_.tk=function dXd(){return (this.Bb&bKe)!=0};_.cl=function eXd(a){this.k=a};_.ui=function fXd(a){CWd(this,a)};_.Ib=function gXd(){return GWd(this)};_.e=false;_.n=0;var s9=sfb(SHe,'EStructuralFeatureImpl',461);feb(331,461,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,480:1,54:1,99:1,331:1,158:1,461:1,291:1,119:1,120:1,692:1},mXd);_.Lh=function nXd(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),jXd(this)?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);case 18:return Geb(),(this.Bb&QHe)!=0?true:false;case 19:if(b)return iXd(this);return hXd(this);}return zvd(this,a-AYd((JTd(),nTd)),vYd((d=RD(Ywd(this,16),29),!d?nTd:d),a),b,c)};_.Wh=function oXd(a){var b,c;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return jXd(this);case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);case 18:return (this.Bb&QHe)!=0;case 19:return !!hXd(this);}return Avd(this,a-AYd((JTd(),nTd)),vYd((b=RD(Ywd(this,16),29),!b?nTd:b),a))};_.bi=function pXd(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:lXd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;case 18:kXd(this,Heb(TD(b)));return;}Bvd(this,a-AYd((JTd(),nTd)),vYd((c=RD(Ywd(this,16),29),!c?nTd:c),a),b)};_.ii=function qXd(){return JTd(),nTd};_.ki=function rXd(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:this.b=0;bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;case 18:kXd(this,false);return;}Cvd(this,a-AYd((JTd(),nTd)),vYd((b=RD(Ywd(this,16),29),!b?nTd:b),a))};_.pi=function sXd(){iXd(this);Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.Jk=function tXd(){return jXd(this)};_.Yk=function uXd(a,b){this.b=0;this.a=null;return ZVd(this,a,b)};_.Zk=function vXd(a){lXd(this,a)};_.Ib=function wXd(){var a;if((this.Db&64)!=0)return GWd(this);a=new Shb(GWd(this));a.a+=' (iD: ';Ohb(a,(this.Bb&QHe)!=0);a.a+=')';return a.a};_.b=0;var M7=sfb(SHe,'EAttributeImpl',331);feb(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1});_.dl=function NXd(a){return a.Dh()==this};_.Ah=function OXd(a){return AXd(this,a)};_.Bh=function PXd(a,b){this.w=null;this.Db=b<<16|this.Db&255;this.Cb=a};_.Lh=function QXd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return this.ik();case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Sh=function RXd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),f.wk().zk(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Uh=function SXd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),b),69),e.wk().Ak(this,Wwd(this),b-AYd(this.ii()),a,c)};_.Wh=function TXd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function UXd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function VXd(){return JTd(),pTd};_.ki=function WXd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.hk=function XXd(){var a;return this.G==-1&&(this.G=(a=BXd(this),a?fZd(a.vi(),this):-1)),this.G};_.ik=function YXd(){return null};_.jk=function ZXd(){return BXd(this)};_.el=function $Xd(){return this.v};_.kk=function _Xd(){return DXd(this)};_.lk=function aYd(){return this.D!=null?this.D:this.B};_.mk=function bYd(){return this.F};_.fk=function cYd(a){return FXd(this,a)};_.fl=function dYd(a){this.v=a};_.gl=function eYd(a){GXd(this,a)};_.hl=function fYd(a){this.C=a};_.ui=function gYd(a){LXd(this,a)};_.Ib=function hYd(){return MXd(this)};_.C=null;_.D=null;_.G=-1;var c8=sfb(SHe,'EClassifierImpl',364);feb(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,481:1,119:1,120:1,691:1},HYd);_.dl=function IYd(a){return DYd(this,a.Dh())};_.Lh=function JYd(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return null;case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;case 9:return Geb(),(this.Bb&512)!=0?true:false;case 10:return zYd(this);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),this.q;case 12:return mYd(this);case 13:return qYd(this);case 14:return qYd(this),this.r;case 15:return mYd(this),this.k;case 16:return nYd(this);case 17:return pYd(this);case 18:return rYd(this);case 19:return sYd(this);case 20:return mYd(this),this.o;case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),this.s;case 22:return tYd(this);case 23:return oYd(this);}return zvd(this,a-AYd((JTd(),oTd)),vYd((d=RD(Ywd(this,16),29),!d?oTd:d),a),b,c)};_.Sh=function KYd(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),qLd(this.q,a,c);case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),qLd(this.s,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),oTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),oTd)),a,c)};_.Uh=function LYd(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);case 11:return !this.q&&(this.q=new C5d(s7,this,11,10)),rLd(this.q,a,c);case 21:return !this.s&&(this.s=new C5d(y7,this,21,17)),rLd(this.s,a,c);case 22:return rLd(tYd(this),a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),oTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),oTd)),a,c)};_.Wh=function MYd(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return false;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)!=0;case 9:return (this.Bb&512)!=0;case 10:return !!this.u&&tYd(this.u.a).i!=0&&!(!!this.n&&d$d(this.n));case 11:return !!this.q&&this.q.i!=0;case 12:return mYd(this).i!=0;case 13:return qYd(this).i!=0;case 14:return qYd(this),this.r.i!=0;case 15:return mYd(this),this.k.i!=0;case 16:return nYd(this).i!=0;case 17:return pYd(this).i!=0;case 18:return rYd(this).i!=0;case 19:return sYd(this).i!=0;case 20:return mYd(this),!!this.o;case 21:return !!this.s&&this.s.i!=0;case 22:return !!this.n&&d$d(this.n);case 23:return oYd(this).i!=0;}return Avd(this,a-AYd((JTd(),oTd)),vYd((b=RD(Ywd(this,16),29),!b?oTd:b),a))};_.Zh=function NYd(a){var b;b=this.i==null||!!this.q&&this.q.i!=0?null:wYd(this,a);return b?b:_zd(this,a)};_.bi=function OYd(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:EYd(this,Heb(TD(b)));return;case 9:FYd(this,Heb(TD(b)));return;case 10:VJd(zYd(this));YGd(zYd(this),RD(b,16));return;case 11:!this.q&&(this.q=new C5d(s7,this,11,10));sLd(this.q);!this.q&&(this.q=new C5d(s7,this,11,10));YGd(this.q,RD(b,16));return;case 21:!this.s&&(this.s=new C5d(y7,this,21,17));sLd(this.s);!this.s&&(this.s=new C5d(y7,this,21,17));YGd(this.s,RD(b,16));return;case 22:sLd(tYd(this));YGd(tYd(this),RD(b,16));return;}Bvd(this,a-AYd((JTd(),oTd)),vYd((c=RD(Ywd(this,16),29),!c?oTd:c),a),b)};_.ii=function PYd(){return JTd(),oTd};_.ki=function QYd(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:EYd(this,false);return;case 9:FYd(this,false);return;case 10:!!this.u&&VJd(this.u);return;case 11:!this.q&&(this.q=new C5d(s7,this,11,10));sLd(this.q);return;case 21:!this.s&&(this.s=new C5d(y7,this,21,17));sLd(this.s);return;case 22:!!this.n&&sLd(this.n);return;}Cvd(this,a-AYd((JTd(),oTd)),vYd((b=RD(Ywd(this,16),29),!b?oTd:b),a))};_.pi=function RYd(){var a,b;mYd(this);qYd(this);nYd(this);pYd(this);rYd(this);sYd(this);oYd(this);OHd(q$d(yYd(this)));if(this.s){for(a=0,b=this.s.i;a<b;++a){aAd(QHd(this.s,a))}}if(this.q){for(a=0,b=this.q.i;a<b;++a){aAd(QHd(this.q,a))}}Oee((lke(),jke),this).xe();this.Bb|=1};_.Ib=function SYd(){return GYd(this)};_.k=null;_.r=null;var iYd,jYd,kYd;var b8=sfb(SHe,'EClassImpl',90);feb(2092,2091,nKe);_.Ei=function TYd(a,b){return nLd(this,a,b)};_.Fi=function UYd(a){return nLd(this,this.i,a)};_.Gi=function VYd(a,b){oLd(this,a,b)};_.Hi=function WYd(a){pLd(this,a)};_.Wk=function XYd(a,b){return qLd(this,a,b)};_.$i=function YYd(a){return NHd(this,a)};_.Xk=function aZd(a,b){return rLd(this,a,b)};_.Xi=function bZd(a,b){return xLd(this,a,b)};_.Ii=function ZYd(){return new yMd(this)};_.Ji=function $Yd(){return new BMd(this)};_.Ki=function _Yd(a){return ZGd(this,a)};var Ubb=sfb(ZJe,'NotifyingInternalEListImpl',2092);feb(632,2092,oKe);_.Hc=function lZd(a){return cZd(this,a)};_.Ij=function mZd(a,b,c,d,e){return dZd(this,a,b,c,d,e)};_.Jj=function nZd(a){eZd(this,a)};_.Fk=function oZd(a){return this};_.Lk=function pZd(){return vYd(this.e.Dh(),this.Lj())};_.Kj=function qZd(){return this.Lk()};_.Lj=function rZd(){return BYd(this.e.Dh(),this.Lk())};_.il=function sZd(){return RD(this.Lk().Hk(),29).kk()};_.jl=function tZd(){return Z5d(RD(this.Lk(),19)).n};_.jj=function uZd(){return this.e};_.kl=function vZd(){return true};_.ll=function wZd(){return false};_.ml=function xZd(){return false};_.nl=function yZd(){return false};_.dd=function zZd(a){return fZd(this,a)};_.Nj=function AZd(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Rh(this.e,this.jl(),this.il(),b):c.Rh(this.e,BYd(c.Dh(),Z5d(RD(this.Lk(),19))),null,b):c.Rh(this.e,-1-this.Lj(),null,b)};_.Oj=function BZd(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Th(this.e,this.jl(),this.il(),b):c.Th(this.e,BYd(c.Dh(),Z5d(RD(this.Lk(),19))),null,b):c.Th(this.e,-1-this.Lj(),null,b)};_.al=function CZd(){return false};_.ol=function DZd(){return true};_.fk=function EZd(a){return QRd(this.d,a)};_.Pj=function FZd(){return Mvd(this.e)};_.Qj=function GZd(){return this.i!=0};_.aj=function HZd(a){return IMd(this.d,a)};_.Wi=function IZd(a,b){return this.ol()&&this.nl()?gZd(this,a,RD(b,58)):b};_.pl=function JZd(a){return a.Vh()?Vvd(this.e,RD(a,54)):a};_.Wb=function KZd(a){hZd(this,a)};_.Pc=function LZd(){return iZd(this)};_.Qc=function MZd(a){var b;if(this.nl()){for(b=this.i-1;b>=0;--b){QHd(this,b)}}return XHd(this,a)};_.Gk=function NZd(){sLd(this)};_.Zi=function OZd(a,b){return jZd(this,a,b)};var ybb=sfb(ZJe,'EcoreEList',632);feb(504,632,oKe,PZd);_.Li=function QZd(){return false};_.Lj=function RZd(){return this.c};_.Mj=function SZd(){return false};_.ol=function TZd(){return true};_.Si=function UZd(){return true};_.Wi=function VZd(a,b){return b};_.Yi=function WZd(){return false};_.c=0;var ibb=sfb(ZJe,'EObjectEList',504);feb(83,504,oKe,XZd);_.Mj=function YZd(){return true};_.ml=function ZZd(){return false};_.al=function $Zd(){return true};var cbb=sfb(ZJe,'EObjectContainmentEList',83);feb(555,83,oKe,_Zd);_.Ni=function a$d(){this.b=true};_.Qj=function b$d(){return this.b};_.Gk=function c$d(){var a;sLd(this);if(Mvd(this.e)){a=this.b;this.b=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.b=false}};_.b=false;var bbb=sfb(ZJe,'EObjectContainmentEList/Unsettable',555);feb(1161,555,oKe,h$d);_.Ti=function l$d(a,b){var c,d;return c=RD(uLd(this,a,b),89),Mvd(this.e)&&eZd(this,new c4d(this.a,7,(JTd(),qTd),sgb(b),(d=c.c,ZD(d,90)?RD(d,29):zTd),a)),c};_.Uj=function m$d(a,b){return e$d(this,RD(a,89),b)};_.Vj=function n$d(a,b){return f$d(this,RD(a,89),b)};_.Wj=function o$d(a,b,c){return g$d(this,RD(a,89),RD(b,89),c)};_.Ij=function i$d(a,b,c,d,e){switch(a){case 3:{return dZd(this,a,b,c,d,this.i>1)}case 5:{return dZd(this,a,b,c,d,this.i-RD(c,15).gc()>0)}default:{return new P3d(this.e,a,this.c,b,c,d,true)}}};_.Tj=function j$d(){return true};_.Qj=function k$d(){return d$d(this)};_.Gk=function p$d(){sLd(this)};var S7=sfb(SHe,'EClassImpl/1',1161);feb(1175,1174,EJe);_.dj=function t$d(a){var b,c,d,e,f,g,h;c=a.gj();if(c!=8){d=s$d(a);if(d==0){switch(c){case 1:case 9:{h=a.kj();if(h!=null){b=yYd(RD(h,481));!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}g=a.ij();if(g!=null){e=RD(g,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}break}case 3:{g=a.ij();if(g!=null){e=RD(g,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}break}case 5:{g=a.ij();if(g!=null){for(f=RD(g,16).Kc();f.Ob();){e=RD(f.Pb(),481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);WGd(b.c,RD(a.jj(),29))}}}break}case 4:{h=a.kj();if(h!=null){e=RD(h,481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}}break}case 6:{h=a.kj();if(h!=null){for(f=RD(h,16).Kc();f.Ob();){e=RD(f.Pb(),481);if((e.Bb&1)==0){b=yYd(e);!b.c&&(b.c=new X9d);dHd(b.c,a.jj())}}}break}}}this.ql(d)}};_.ql=function u$d(a){r$d(this,a)};_.b=63;var u9=sfb(SHe,'ESuperAdapter',1175);feb(1176,1175,EJe,w$d);_.ql=function x$d(a){v$d(this,a)};var N7=sfb(SHe,'EClassImpl/10',1176);feb(1165,710,oKe);_.Ei=function y$d(a,b){return IHd(this,a,b)};_.Fi=function z$d(a){return JHd(this,a)};_.Gi=function A$d(a,b){KHd(this,a,b)};_.Hi=function B$d(a){LHd(this,a)};_.$i=function D$d(a){return NHd(this,a)};_.Xi=function L$d(a,b){return UHd(this,a,b)};_.Wk=function C$d(a,b){throw Adb(new jib)};_.Ii=function E$d(){return new yMd(this)};_.Ji=function F$d(){return new BMd(this)};_.Ki=function G$d(a){return ZGd(this,a)};_.Xk=function H$d(a,b){throw Adb(new jib)};_.Fk=function I$d(a){return this};_.Qj=function J$d(){return this.i!=0};_.Wb=function K$d(a){throw Adb(new jib)};_.Gk=function M$d(){throw Adb(new jib)};var xbb=sfb(ZJe,'EcoreEList/UnmodifiableEList',1165);feb(328,1165,oKe,N$d);_.Yi=function O$d(){return false};var wbb=sfb(ZJe,'EcoreEList/UnmodifiableEList/FastCompare',328);feb(1168,328,oKe,R$d);_.dd=function S$d(a){var b,c,d;if(ZD(a,179)){b=RD(a,179);c=b.Lj();if(c!=-1){for(d=this.i;c<d;++c){if(dE(this.g[c])===dE(a)){return c}}}}return -1};var O7=sfb(SHe,'EClassImpl/1EAllStructuralFeaturesList',1168);feb(1162,505,PIe,W$d);_.aj=function X$d(a){return $C(o7,sKe,89,a,0,1)};_.Yi=function Y$d(){return false};var P7=sfb(SHe,'EClassImpl/1EGenericSuperTypeEList',1162);feb(633,505,PIe,Z$d);_.aj=function $$d(a){return $C(y7,lKe,179,a,0,1)};_.Yi=function _$d(){return false};var Q7=sfb(SHe,'EClassImpl/1EStructuralFeatureUniqueEList',633);feb(755,505,PIe,a_d);_.aj=function b_d(a){return $C(v7,lKe,19,a,0,1)};_.Yi=function c_d(){return false};var R7=sfb(SHe,'EClassImpl/1ReferenceList',755);feb(1163,505,PIe,e_d);_.Mi=function f_d(a,b){d_d(this,RD(b,35))};_.aj=function g_d(a){return $C(g7,lKe,35,a,0,1)};_.Yi=function h_d(){return false};var T7=sfb(SHe,'EClassImpl/2',1163);feb(1164,505,PIe,i_d);_.aj=function j_d(a){return $C(g7,lKe,35,a,0,1)};_.Yi=function k_d(){return false};var U7=sfb(SHe,'EClassImpl/3',1164);feb(1166,328,oKe,n_d);_.Fc=function o_d(a){return l_d(this,RD(a,35))};_.Hi=function p_d(a){m_d(this,RD(a,35))};var V7=sfb(SHe,'EClassImpl/4',1166);feb(1167,328,oKe,s_d);_.Fc=function t_d(a){return q_d(this,RD(a,19))};_.Hi=function u_d(a){r_d(this,RD(a,19))};var W7=sfb(SHe,'EClassImpl/5',1167);feb(1169,505,PIe,v_d);_.aj=function w_d(a){return $C(s7,mKe,62,a,0,1)};_.Yi=function x_d(){return false};var X7=sfb(SHe,'EClassImpl/6',1169);feb(1170,505,PIe,y_d);_.aj=function z_d(a){return $C(v7,lKe,19,a,0,1)};_.Yi=function A_d(){return false};var Y7=sfb(SHe,'EClassImpl/7',1170);feb(2095,2094,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,71:1});_.Ei=function B_d(a,b){return QJd(this,a,b)};_.Fi=function C_d(a){return QJd(this,this.Ej(),a)};_.Gi=function D_d(a,b){RJd(this,a,b)};_.Hi=function E_d(a){SJd(this,a)};_.Wk=function F_d(a,b){return TJd(this,a,b)};_.Xk=function L_d(a,b){return UJd(this,a,b)};_.Xi=function M_d(a,b){return WJd(this,a,b)};_.$i=function G_d(a){return this.xj(a)};_.Ii=function H_d(){return new yMd(this)};_.pj=function I_d(){return this.sj()};_.Ji=function J_d(){return new BMd(this)};_.Ki=function K_d(a){return ZGd(this,a)};var Qab=sfb(ZJe,'DelegatingNotifyingInternalEListImpl',2095);feb(756,2095,tKe);_.Li=function R_d(){var a;a=vYd(Uwd(this.b),this.Lj()).Hk();return ZD(a,156)&&!ZD(a,468)&&(a.kk().i&1)==0};_.Hc=function S_d(a){var b,c,d,e,f,g,h,i;if(this.ol()){i=this.Ej();if(i>4){if(this.fk(a)){if(this.al()){d=RD(a,54);c=d.Eh();h=c==this.b&&(this.ml()?d.yh(d.Fh(),RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk())==Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n:-1-d.Fh()==this.Lj());if(this.nl()&&!h&&!c&&!!d.Jh()){for(e=0;e<i;++e){b=O_d(this,this.xj(e));if(dE(b)===dE(a)){return true}}}return h}else if(this.ml()&&!this.ll()){f=RD(a,58).Mh(Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)));if(dE(f)===dE(this.b)){return true}else if(f==null||!RD(f,58).Vh()){return false}}}else{return false}}g=this.uj(a);if(this.nl()&&!g){for(e=0;e<i;++e){d=O_d(this,this.xj(e));if(dE(d)===dE(a)){return true}}}return g}else{return this.uj(a)}};_.Ij=function T_d(a,b,c,d,e){return new P3d(this.b,a,this.Lj(),b,c,d,e)};_.Jj=function U_d(a){qvd(this.b,a)};_.Fk=function V_d(a){return this};_.Kj=function W_d(){return vYd(Uwd(this.b),this.Lj())};_.Lj=function X_d(){return BYd(Uwd(this.b),vYd(Uwd(this.b),this.Lj()))};_.jj=function Y_d(){return this.b};_.kl=function Z_d(){return !!vYd(Uwd(this.b),this.Lj()).Hk().kk()};_.Mj=function $_d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&QHe)!=0||!!Z5d(RD(b,19))}else{return false}};_.ll=function __d(){var a,b,c,d;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);c=Z5d(a);return !!c&&(d=c.t,d>1||d==-1)}else{return false}};_.ml=function a0d(){var a,b,c;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);c=Z5d(a);return !!c}else{return false}};_.nl=function b0d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&txe)!=0}else{return false}};_.dd=function c0d(a){var b,c,d,e;d=this.zj(a);if(d>=0)return d;if(this.ol()){for(c=0,e=this.Ej();c<e;++c){b=O_d(this,this.xj(c));if(dE(b)===dE(a)){return c}}}return -1};_.Nj=function d0d(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Rh(this.b,Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n,RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk(),b):c.Rh(this.b,BYd(c.Dh(),Z5d(RD(vYd(Uwd(this.b),this.Lj()),19))),null,b):c.Rh(this.b,-1-this.Lj(),null,b)};_.Oj=function e0d(a,b){var c;return c=RD(a,54),this.ml()?this.kl()?c.Th(this.b,Z5d(RD(vYd(Uwd(this.b),this.Lj()),19)).n,RD(vYd(Uwd(this.b),this.Lj()).Hk(),29).kk(),b):c.Th(this.b,BYd(c.Dh(),Z5d(RD(vYd(Uwd(this.b),this.Lj()),19))),null,b):c.Th(this.b,-1-this.Lj(),null,b)};_.al=function f0d(){var a,b;b=vYd(Uwd(this.b),this.Lj());if(ZD(b,102)){a=RD(b,19);return (a.Bb&QHe)!=0}else{return false}};_.ol=function g0d(){return ZD(vYd(Uwd(this.b),this.Lj()).Hk(),90)};_.fk=function h0d(a){return vYd(Uwd(this.b),this.Lj()).Hk().fk(a)};_.Pj=function i0d(){return Mvd(this.b)};_.Qj=function j0d(){return !this.Aj()};_.Si=function k0d(){return vYd(Uwd(this.b),this.Lj()).Si()};_.Wi=function l0d(a,b){return N_d(this,a,b)};_.Wb=function m0d(a){VJd(this);YGd(this,RD(a,15))};_.Pc=function n0d(){var a;if(this.nl()){for(a=this.Ej()-1;a>=0;--a){N_d(this,a,this.xj(a))}}return this.Fj()};_.Qc=function o0d(a){var b;if(this.nl()){for(b=this.Ej()-1;b>=0;--b){N_d(this,b,this.xj(b))}}return this.Gj(a)};_.Gk=function p0d(){VJd(this)};_.Zi=function q0d(a,b){return P_d(this,a,b)};var Pab=sfb(ZJe,'DelegatingEcoreEList',756);feb(1171,756,tKe,w0d);_.qj=function z0d(a,b){r0d(this,a,RD(b,29))};_.rj=function A0d(a){s0d(this,RD(a,29))};_.xj=function G0d(a){var b,c;return b=RD(QHd(tYd(this.a),a),89),c=b.c,ZD(c,90)?RD(c,29):(JTd(),zTd)};_.Cj=function L0d(a){var b,c;return b=RD(vLd(tYd(this.a),a),89),c=b.c,ZD(c,90)?RD(c,29):(JTd(),zTd)};_.Dj=function M0d(a,b){return u0d(this,a,RD(b,29))};_.Li=function x0d(){return false};_.Ij=function y0d(a,b,c,d,e){return null};_.sj=function B0d(){return new c1d(this)};_.tj=function C0d(){sLd(tYd(this.a))};_.uj=function D0d(a){return t0d(this,a)};_.vj=function E0d(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!t0d(this,b)){return false}}return true};_.wj=function F0d(a){var b,c,d;if(ZD(a,15)){d=RD(a,15);if(d.gc()==tYd(this.a).i){for(b=d.Kc(),c=new dMd(this);b.Ob();){if(dE(b.Pb())!==dE(bMd(c))){return false}}return true}}return false};_.yj=function H0d(){var a,b,c,d,e;c=1;for(b=new dMd(tYd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);d=(e=a.c,ZD(e,90)?RD(e,29):(JTd(),zTd));c=31*c+(!d?0:kFb(d))}return c};_.zj=function I0d(a){var b,c,d,e;d=0;for(c=new dMd(tYd(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);if(dE(a)===dE((e=b.c,ZD(e,90)?RD(e,29):(JTd(),zTd)))){return d}++d}return -1};_.Aj=function J0d(){return tYd(this.a).i==0};_.Bj=function K0d(){return null};_.Ej=function N0d(){return tYd(this.a).i};_.Fj=function O0d(){var a,b,c,d,e,f;f=tYd(this.a).i;e=$C(jJ,rve,1,f,5,1);c=0;for(b=new dMd(tYd(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);e[c++]=(d=a.c,ZD(d,90)?RD(d,29):(JTd(),zTd))}return e};_.Gj=function P0d(a){var b,c,d,e,f,g,h;h=tYd(this.a).i;if(a.length<h){e=IMd(rb(a).c,h);a=e}a.length>h&&bD(a,h,null);d=0;for(c=new dMd(tYd(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);f=(g=b.c,ZD(g,90)?RD(g,29):(JTd(),zTd));bD(a,d++,f)}return a};_.Hj=function Q0d(){var a,b,c,d,e;e=new Qhb;e.a+='[';a=tYd(this.a);for(b=0,d=tYd(this.a).i;b<d;){Nhb(e,Ghb((c=RD(QHd(a,b),89).c,ZD(c,90)?RD(c,29):(JTd(),zTd))));++b<d&&(e.a+=pve,e)}e.a+=']';return e.a};_.Jj=function R0d(a){};_.Lj=function S0d(){return 10};_.kl=function T0d(){return true};_.Mj=function U0d(){return false};_.ll=function V0d(){return false};_.ml=function W0d(){return false};_.nl=function X0d(){return true};_.al=function Y0d(){return false};_.ol=function Z0d(){return true};_.fk=function $0d(a){return ZD(a,90)};_.Qj=function _0d(){return CYd(this.a)};_.Si=function a1d(){return true};_.Yi=function b1d(){return true};var $7=sfb(SHe,'EClassImpl/8',1171);feb(1172,2062,kwe,c1d);_.fd=function d1d(a){return ZGd(this.a,a)};_.gc=function e1d(){return tYd(this.a.a).i};var Z7=sfb(SHe,'EClassImpl/8/1',1172);feb(1173,505,PIe,f1d);_.aj=function g1d(a){return $C(i7,rve,142,a,0,1)};_.Yi=function h1d(){return false};var _7=sfb(SHe,'EClassImpl/9',1173);feb(1160,49,Ixe,i1d);var a8=sfb(SHe,'EClassImpl/MyHashSet',1160);feb(577,364,{110:1,94:1,93:1,142:1,156:1,847:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1},k1d);_.Lh=function l1d(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return this.ik();case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;}return zvd(this,a-AYd(this.ii()),vYd((d=RD(Ywd(this,16),29),!d?this.ii():d),a),b,c)};_.Wh=function m1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;}return Avd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.bi=function n1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:j1d(this,Heb(TD(b)));return;}Bvd(this,a-AYd(this.ii()),vYd((c=RD(Ywd(this,16),29),!c?this.ii():c),a),b)};_.ii=function o1d(){return JTd(),rTd};_.ki=function p1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:j1d(this,true);return;}Cvd(this,a-AYd(this.ii()),vYd((b=RD(Ywd(this,16),29),!b?this.ii():b),a))};_.pi=function q1d(){Oee((lke(),jke),this).xe();this.Bb|=1};_.ok=function r1d(){var a,b,c;if(!this.c){a=Kje(BXd(this));if(!a.dc()){for(c=a.Kc();c.Ob();){b=WD(c.Pb());!!bAd(this,b)&&Jje(this)}}}return this.b};_.ik=function s1d(){var b;if(!this.e){b=null;try{b=DXd(this)}catch(a){a=zdb(a);if(!ZD(a,103))throw Adb(a)}this.d=null;!!b&&(b.i&1)!=0&&(b==xdb?(this.d=(Geb(),Eeb)):b==kE?(this.d=sgb(0)):b==jE?(this.d=new Tfb(0)):b==iE?(this.d=0):b==lE?(this.d=Hgb(0)):b==wdb?(this.d=bhb(0)):b==gE?(this.d=$eb(0)):(this.d=hfb(0)));this.e=true}return this.d};_.nk=function t1d(){return (this.Bb&256)!=0};_.rl=function u1d(a){a&&(this.D='org.eclipse.emf.common.util.AbstractEnumerator')};_.gl=function v1d(a){GXd(this,a);this.rl(a)};_.hl=function w1d(a){this.C=a;this.e=false};_.Ib=function x1d(){var a;if((this.Db&64)!=0)return MXd(this);a=new Shb(MXd(this));a.a+=' (serializable: ';Ohb(a,(this.Bb&256)!=0);a.a+=')';return a.a};_.c=false;_.d=null;_.e=false;var d8=sfb(SHe,'EDataTypeImpl',577);feb(468,577,{110:1,94:1,93:1,142:1,156:1,847:1,685:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,468:1,158:1,119:1,120:1,691:1},A1d);_.Lh=function B1d(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return DXd(this);case 4:return y1d(this);case 5:return this.F;case 6:if(b)return BXd(this);return xXd(this);case 7:return !this.A&&(this.A=new iie(z7,this,7)),this.A;case 8:return Geb(),(this.Bb&256)!=0?true:false;case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),this.a;}return zvd(this,a-AYd((JTd(),sTd)),vYd((d=RD(Ywd(this,16),29),!d?sTd:d),a),b,c)};_.Sh=function C1d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 6:!!this.Cb&&(c=(e=this.Db>>16,e>=0?AXd(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,6,c);case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),qLd(this.a,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),sTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),sTd)),a,c)};_.Uh=function D1d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 6:return xvd(this,null,6,c);case 7:return !this.A&&(this.A=new iie(z7,this,7)),rLd(this.A,a,c);case 9:return !this.a&&(this.a=new C5d(l7,this,9,5)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),sTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),sTd)),a,c)};_.Wh=function E1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return !!DXd(this);case 4:return !!y1d(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return !!xXd(this);case 7:return !!this.A&&this.A.i!=0;case 8:return (this.Bb&256)==0;case 9:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),sTd)),vYd((b=RD(Ywd(this,16),29),!b?sTd:b),a))};_.bi=function F1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:LXd(this,WD(b));return;case 2:IXd(this,WD(b));return;case 5:KXd(this,WD(b));return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);!this.A&&(this.A=new iie(z7,this,7));YGd(this.A,RD(b,16));return;case 8:j1d(this,Heb(TD(b)));return;case 9:!this.a&&(this.a=new C5d(l7,this,9,5));sLd(this.a);!this.a&&(this.a=new C5d(l7,this,9,5));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),sTd)),vYd((c=RD(Ywd(this,16),29),!c?sTd:c),a),b)};_.ii=function G1d(){return JTd(),sTd};_.ki=function H1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,184)&&(RD(this.Cb,184).tb=null);PAd(this,null);return;case 2:yXd(this,null);zXd(this,this.D);return;case 5:KXd(this,null);return;case 7:!this.A&&(this.A=new iie(z7,this,7));sLd(this.A);return;case 8:j1d(this,true);return;case 9:!this.a&&(this.a=new C5d(l7,this,9,5));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),sTd)),vYd((b=RD(Ywd(this,16),29),!b?sTd:b),a))};_.pi=function I1d(){var a,b;if(this.a){for(a=0,b=this.a.i;a<b;++a){aAd(QHd(this.a,a))}}Oee((lke(),jke),this).xe();this.Bb|=1};_.ik=function J1d(){return y1d(this)};_.fk=function K1d(a){if(a!=null){return true}return false};_.rl=function L1d(a){};var e8=sfb(SHe,'EEnumImpl',468);feb(582,448,{110:1,94:1,93:1,2039:1,694:1,155:1,197:1,58:1,114:1,54:1,99:1,582:1,158:1,119:1,120:1},R1d);_.xe=function $1d(){return this.zb};_.Ah=function S1d(a){return M1d(this,a)};_.Lh=function T1d(a,b,c){var d,e;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return sgb(this.d);case 3:return this.b?this.b:this.a;case 4:return e=this.c,e==null?this.zb:e;case 5:return this.Db>>16==5?RD(this.Cb,685):null;}return zvd(this,a-AYd((JTd(),tTd)),vYd((d=RD(Ywd(this,16),29),!d?tTd:d),a),b,c)};_.Sh=function U1d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 5:!!this.Cb&&(c=(e=this.Db>>16,e>=0?M1d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,5,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),tTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),tTd)),a,c)};_.Uh=function V1d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 5:return xvd(this,null,5,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),tTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),tTd)),a,c)};_.Wh=function W1d(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return !!this.b;case 4:return this.c!=null;case 5:return !!(this.Db>>16==5?RD(this.Cb,685):null);}return Avd(this,a-AYd((JTd(),tTd)),vYd((b=RD(Ywd(this,16),29),!b?tTd:b),a))};_.bi=function X1d(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:Q1d(this,RD(b,17).a);return;case 3:O1d(this,RD(b,2039));return;case 4:P1d(this,WD(b));return;}Bvd(this,a-AYd((JTd(),tTd)),vYd((c=RD(Ywd(this,16),29),!c?tTd:c),a),b)};_.ii=function Y1d(){return JTd(),tTd};_.ki=function Z1d(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:Q1d(this,0);return;case 3:O1d(this,null);return;case 4:P1d(this,null);return;}Cvd(this,a-AYd((JTd(),tTd)),vYd((b=RD(Ywd(this,16),29),!b?tTd:b),a))};_.Ib=function _1d(){var a;return a=this.c,a==null?this.zb:a};_.b=null;_.c=null;_.d=0;var f8=sfb(SHe,'EEnumLiteralImpl',582);var h8=ufb(SHe,'EFactoryImpl/InternalEDateTimeFormat');feb(498,1,{2114:1},c2d);var g8=sfb(SHe,'EFactoryImpl/1ClientInternalEDateTimeFormat',498);feb(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},s2d);_.Ch=function t2d(a,b,c){var d;c=xvd(this,a,b,c);if(!!this.e&&ZD(a,179)){d=k2d(this,this.e);d!=this.c&&(c=o2d(this,d,c))}return c};_.Lh=function u2d(a,b,c){var d;switch(a){case 0:return this.f;case 1:return !this.d&&(this.d=new XZd(o7,this,1)),this.d;case 2:if(b)return i2d(this);return this.c;case 3:return this.b;case 4:return this.e;case 5:if(b)return h2d(this);return this.a;}return zvd(this,a-AYd((JTd(),vTd)),vYd((d=RD(Ywd(this,16),29),!d?vTd:d),a),b,c)};_.Uh=function v2d(a,b,c){var d,e;switch(b){case 0:return g2d(this,null,c);case 1:return !this.d&&(this.d=new XZd(o7,this,1)),rLd(this.d,a,c);case 3:return e2d(this,null,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),vTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),vTd)),a,c)};_.Wh=function w2d(a){var b;switch(a){case 0:return !!this.f;case 1:return !!this.d&&this.d.i!=0;case 2:return !!this.c;case 3:return !!this.b;case 4:return !!this.e;case 5:return !!this.a;}return Avd(this,a-AYd((JTd(),vTd)),vYd((b=RD(Ywd(this,16),29),!b?vTd:b),a))};_.bi=function x2d(a,b){var c;switch(a){case 0:q2d(this,RD(b,89));return;case 1:!this.d&&(this.d=new XZd(o7,this,1));sLd(this.d);!this.d&&(this.d=new XZd(o7,this,1));YGd(this.d,RD(b,16));return;case 3:n2d(this,RD(b,89));return;case 4:p2d(this,RD(b,850));return;case 5:l2d(this,RD(b,142));return;}Bvd(this,a-AYd((JTd(),vTd)),vYd((c=RD(Ywd(this,16),29),!c?vTd:c),a),b)};_.ii=function y2d(){return JTd(),vTd};_.ki=function z2d(a){var b;switch(a){case 0:q2d(this,null);return;case 1:!this.d&&(this.d=new XZd(o7,this,1));sLd(this.d);return;case 3:n2d(this,null);return;case 4:p2d(this,null);return;case 5:l2d(this,null);return;}Cvd(this,a-AYd((JTd(),vTd)),vYd((b=RD(Ywd(this,16),29),!b?vTd:b),a))};_.Ib=function A2d(){var a;a=new dib(awd(this));a.a+=' (expression: ';r2d(this,a);a.a+=')';return a.a};var d2d;var j8=sfb(SHe,'EGenericTypeImpl',248);feb(2067,2062,uKe);_.Gi=function C2d(a,b){B2d(this,a,b)};_.Wk=function D2d(a,b){B2d(this,this.gc(),a);return b};_.$i=function E2d(a){return ju(this.pj(),a)};_.Ii=function F2d(){return this.Ji()};_.pj=function G2d(){return new mee(this)};_.Ji=function H2d(){return this.Ki(0)};_.Ki=function I2d(a){return this.pj().fd(a)};_.Xk=function J2d(a,b){ze(this,a,true);return b};_.Ti=function K2d(a,b){var c,d;d=ku(this,b);c=this.fd(a);c.Rb(d);return d};_.Ui=function L2d(a,b){var c;ze(this,b,true);c=this.fd(a);c.Rb(b)};var Gab=sfb(ZJe,'AbstractSequentialInternalEList',2067);feb(495,2067,uKe,Q2d);_.$i=function R2d(a){return ju(this.pj(),a)};_.Ii=function S2d(){if(this.b==null){return j3d(),j3d(),i3d}return this.sl()};_.pj=function T2d(){return new Whe(this.a,this.b)};_.Ji=function U2d(){if(this.b==null){return j3d(),j3d(),i3d}return this.sl()};_.Ki=function V2d(a){var b,c;if(this.b==null){if(a<0||a>1){throw Adb(new veb(HJe+a+', size=0'))}return j3d(),j3d(),i3d}c=this.sl();for(b=0;b<a;++b){k3d(c)}return c};_.dc=function W2d(){var a,b,c,d,e,f;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.vl()||this.a.Xh(a)){f=this.a.Nh(a,false);nke();if(RD(a,69).xk()){b=RD(f,160);for(d=0,e=b.gc();d<e;++d){if(O2d(b.Tl(d))&&b.Ul(d)!=null){return false}}}else if(a.Jk()){if(!RD(f,16).dc()){return false}}else if(f!=null){return false}}}}return true};_.Kc=function X2d(){return P2d(this)};_.fd=function Y2d(a){var b,c;if(this.b==null){if(a!=0){throw Adb(new veb(HJe+a+', size=0'))}return j3d(),j3d(),i3d}c=this.ul()?this.tl():this.sl();for(b=0;b<a;++b){k3d(c)}return c};_.Ti=function Z2d(a,b){throw Adb(new jib)};_.Ui=function $2d(a,b){throw Adb(new jib)};_.sl=function _2d(){return new p3d(this.a,this.b)};_.tl=function a3d(){return new D3d(this.a,this.b)};_.ul=function b3d(){return true};_.gc=function c3d(){var a,b,c,d,e,f,g;e=0;if(this.b!=null){for(c=0;c<this.b.length;++c){a=this.b[c];if(!this.vl()||this.a.Xh(a)){g=this.a.Nh(a,false);nke();if(RD(a,69).xk()){b=RD(g,160);for(d=0,f=b.gc();d<f;++d){O2d(b.Tl(d))&&b.Ul(d)!=null&&++e}}else a.Jk()?(e+=RD(g,16).gc()):g!=null&&++e}}}return e};_.vl=function d3d(){return true};var M2d;var Wab=sfb(ZJe,'EContentsEList',495);feb(1177,495,uKe,e3d);_.sl=function f3d(){return new H3d(this.a,this.b)};_.tl=function g3d(){return new F3d(this.a,this.b)};_.vl=function h3d(){return false};var n8=sfb(SHe,'ENamedElementImpl/1',1177);feb(287,1,vKe,p3d);_.Nb=function s3d(a){Ztb(this,a)};_.Rb=function q3d(a){throw Adb(new jib)};_.wl=function r3d(a){if(this.g!=0||!!this.e){throw Adb(new dgb('Iterator already in use or already filtered'))}this.e=a};_.Ob=function t3d(){var a,b,c,d,e,f;switch(this.g){case 3:case 2:{return true}case 1:{return false}case -3:{!this.p?++this.n:this.p.Pb()}default:{if(!this.k||(!this.p?!l3d(this):!m3d(this,this.p))){while(this.d<this.c.length){b=this.c[this.d++];if((!this.e||b.pk()!=C4||b.Lj()!=0)&&(!this.vl()||this.b.Xh(b))){f=this.b.Nh(b,this.ul());this.f=(nke(),RD(b,69).xk());if(this.f||b.Jk()){if(this.ul()){d=RD(f,15);this.k=d}else{d=RD(f,71);this.k=this.j=d}if(ZD(this.k,59)){this.p=null;this.o=this.k.gc();this.n=0}else{this.p=!this.j?this.k.ed():this.j.Ji()}if(!this.p?l3d(this):m3d(this,this.p)){e=!this.p?!this.j?this.k.Xb(this.n++):this.j.$i(this.n++):this.p.Pb();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=2;return true}}}this.k=null;this.p=null;this.f=false;this.g=1;return false}else{e=!this.p?!this.j?this.k.Xb(this.n++):this.j.$i(this.n++):this.p.Pb();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=3;return true}}}};_.Sb=function u3d(){var a,b,c,d,e,f;switch(this.g){case -3:case -2:{return true}case -1:{return false}case 3:{!this.p?--this.n:this.p.Ub()}default:{if(!this.k||(!this.p?!n3d(this):!o3d(this,this.p))){while(this.d>0){b=this.c[--this.d];if((!this.e||b.pk()!=C4||b.Lj()!=0)&&(!this.vl()||this.b.Xh(b))){f=this.b.Nh(b,this.ul());this.f=(nke(),RD(b,69).xk());if(this.f||b.Jk()){if(this.ul()){d=RD(f,15);this.k=d}else{d=RD(f,71);this.k=this.j=d}if(ZD(this.k,59)){this.o=this.k.gc();this.n=this.o}else{this.p=!this.j?this.k.fd(this.k.gc()):this.j.Ki(this.k.gc())}if(!this.p?n3d(this):o3d(this,this.p)){e=!this.p?!this.j?this.k.Xb(--this.n):this.j.$i(--this.n):this.p.Ub();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}else if(f!=null){this.k=null;this.p=null;c=f;this.i=c;this.g=-2;return true}}}this.k=null;this.p=null;this.g=-1;return false}else{e=!this.p?!this.j?this.k.Xb(--this.n):this.j.$i(--this.n):this.p.Ub();if(this.f){a=RD(e,76);a.Lk();c=a.md();this.i=c}else{c=e;this.i=c}this.g=-3;return true}}}};_.Pb=function v3d(){return k3d(this)};_.Tb=function w3d(){return this.a};_.Ub=function x3d(){var a;if(this.g<-1||this.Sb()){--this.a;this.g=0;a=this.i;this.Sb();return a}else{throw Adb(new Dvb)}};_.Vb=function y3d(){return this.a-1};_.Qb=function z3d(){throw Adb(new jib)};_.ul=function A3d(){return false};_.Wb=function B3d(a){throw Adb(new jib)};_.vl=function C3d(){return true};_.a=0;_.d=0;_.f=false;_.g=0;_.n=0;_.o=0;var i3d;var Uab=sfb(ZJe,'EContentsEList/FeatureIteratorImpl',287);feb(711,287,vKe,D3d);_.ul=function E3d(){return true};var Vab=sfb(ZJe,'EContentsEList/ResolvingFeatureIteratorImpl',711);feb(1178,711,vKe,F3d);_.vl=function G3d(){return false};var l8=sfb(SHe,'ENamedElementImpl/1/1',1178);feb(1179,287,vKe,H3d);_.vl=function I3d(){return false};var m8=sfb(SHe,'ENamedElementImpl/1/2',1179);feb(38,152,GJe,L3d,M3d,N3d,O3d,P3d,Q3d,R3d,S3d,T3d,U3d,V3d,W3d,X3d,Y3d,Z3d,$3d,_3d,a4d,b4d,c4d,d4d,e4d,f4d,g4d,h4d);_.Kj=function i4d(){return K3d(this)};_.Rj=function j4d(){var a;a=K3d(this);if(a){return a.ik()}return null};_.hj=function k4d(a){this.b==-1&&!!this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk()));return this.c.yh(this.b,a)};_.jj=function l4d(){return this.c};_.Sj=function m4d(){var a;a=K3d(this);if(a){return a.tk()}return false};_.b=-1;var p8=sfb(SHe,'ENotificationImpl',38);feb(411,291,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,480:1,54:1,99:1,158:1,411:1,291:1,119:1,120:1},q4d);_.Ah=function r4d(a){return n4d(this,a)};_.Lh=function s4d(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),f=this.t,f>1||f==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?RD(this.Cb,29):null;case 11:return !this.d&&(this.d=new iie(z7,this,11)),this.d;case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),this.c;case 13:return !this.a&&(this.a=new F4d(this,this)),this.a;case 14:return o4d(this);}return zvd(this,a-AYd((JTd(),ATd)),vYd((d=RD(Ywd(this,16),29),!d?ATd:d),a),b,c)};_.Sh=function t4d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?n4d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,10,c);case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),qLd(this.c,a,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ATd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),ATd)),a,c)};_.Uh=function u4d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 10:return xvd(this,null,10,c);case 11:return !this.d&&(this.d=new iie(z7,this,11)),rLd(this.d,a,c);case 12:return !this.c&&(this.c=new C5d(u7,this,12,10)),rLd(this.c,a,c);case 14:return rLd(o4d(this),a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ATd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),ATd)),a,c)};_.Wh=function v4d(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return !!(this.Db>>16==10?RD(this.Cb,29):null);case 11:return !!this.d&&this.d.i!=0;case 12:return !!this.c&&this.c.i!=0;case 13:return !!this.a&&o4d(this.a.a).i!=0&&!(!!this.b&&o5d(this.b));case 14:return !!this.b&&o5d(this.b);}return Avd(this,a-AYd((JTd(),ATd)),vYd((b=RD(Ywd(this,16),29),!b?ATd:b),a))};_.bi=function w4d(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:bWd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 11:!this.d&&(this.d=new iie(z7,this,11));sLd(this.d);!this.d&&(this.d=new iie(z7,this,11));YGd(this.d,RD(b,16));return;case 12:!this.c&&(this.c=new C5d(u7,this,12,10));sLd(this.c);!this.c&&(this.c=new C5d(u7,this,12,10));YGd(this.c,RD(b,16));return;case 13:!this.a&&(this.a=new F4d(this,this));VJd(this.a);!this.a&&(this.a=new F4d(this,this));YGd(this.a,RD(b,16));return;case 14:sLd(o4d(this));YGd(o4d(this),RD(b,16));return;}Bvd(this,a-AYd((JTd(),ATd)),vYd((c=RD(Ywd(this,16),29),!c?ATd:c),a),b)};_.ii=function x4d(){return JTd(),ATd};_.ki=function y4d(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 11:!this.d&&(this.d=new iie(z7,this,11));sLd(this.d);return;case 12:!this.c&&(this.c=new C5d(u7,this,12,10));sLd(this.c);return;case 13:!!this.a&&VJd(this.a);return;case 14:!!this.b&&sLd(this.b);return;}Cvd(this,a-AYd((JTd(),ATd)),vYd((b=RD(Ywd(this,16),29),!b?ATd:b),a))};_.pi=function z4d(){var a,b;if(this.c){for(a=0,b=this.c.i;a<b;++a){aAd(QHd(this.c,a))}}WVd(this);this.Bb|=1};var u8=sfb(SHe,'EOperationImpl',411);feb(513,756,tKe,F4d);_.qj=function I4d(a,b){A4d(this,a,RD(b,142))};_.rj=function J4d(a){B4d(this,RD(a,142))};_.xj=function P4d(a){var b,c;return b=RD(QHd(o4d(this.a),a),89),c=b.c,c?c:(JTd(),wTd)};_.Cj=function U4d(a){var b,c;return b=RD(vLd(o4d(this.a),a),89),c=b.c,c?c:(JTd(),wTd)};_.Dj=function V4d(a,b){return D4d(this,a,RD(b,142))};_.Li=function G4d(){return false};_.Ij=function H4d(a,b,c,d,e){return null};_.sj=function K4d(){return new l5d(this)};_.tj=function L4d(){sLd(o4d(this.a))};_.uj=function M4d(a){return C4d(this,a)};_.vj=function N4d(a){var b,c;for(c=a.Kc();c.Ob();){b=c.Pb();if(!C4d(this,b)){return false}}return true};_.wj=function O4d(a){var b,c,d;if(ZD(a,15)){d=RD(a,15);if(d.gc()==o4d(this.a).i){for(b=d.Kc(),c=new dMd(this);b.Ob();){if(dE(b.Pb())!==dE(bMd(c))){return false}}return true}}return false};_.yj=function Q4d(){var a,b,c,d,e;c=1;for(b=new dMd(o4d(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);d=(e=a.c,e?e:(JTd(),wTd));c=31*c+(!d?0:tb(d))}return c};_.zj=function R4d(a){var b,c,d,e;d=0;for(c=new dMd(o4d(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);if(dE(a)===dE((e=b.c,e?e:(JTd(),wTd)))){return d}++d}return -1};_.Aj=function S4d(){return o4d(this.a).i==0};_.Bj=function T4d(){return null};_.Ej=function W4d(){return o4d(this.a).i};_.Fj=function X4d(){var a,b,c,d,e,f;f=o4d(this.a).i;e=$C(jJ,rve,1,f,5,1);c=0;for(b=new dMd(o4d(this.a));b.e!=b.i.gc();){a=RD(bMd(b),89);e[c++]=(d=a.c,d?d:(JTd(),wTd))}return e};_.Gj=function Y4d(a){var b,c,d,e,f,g,h;h=o4d(this.a).i;if(a.length<h){e=IMd(rb(a).c,h);a=e}a.length>h&&bD(a,h,null);d=0;for(c=new dMd(o4d(this.a));c.e!=c.i.gc();){b=RD(bMd(c),89);f=(g=b.c,g?g:(JTd(),wTd));bD(a,d++,f)}return a};_.Hj=function Z4d(){var a,b,c,d,e;e=new Qhb;e.a+='[';a=o4d(this.a);for(b=0,d=o4d(this.a).i;b<d;){Nhb(e,Ghb((c=RD(QHd(a,b),89).c,c?c:(JTd(),wTd))));++b<d&&(e.a+=pve,e)}e.a+=']';return e.a};_.Jj=function $4d(a){};_.Lj=function _4d(){return 13};_.kl=function a5d(){return true};_.Mj=function b5d(){return false};_.ll=function c5d(){return false};_.ml=function d5d(){return false};_.nl=function e5d(){return true};_.al=function f5d(){return false};_.ol=function g5d(){return true};_.fk=function h5d(a){return ZD(a,142)};_.Qj=function i5d(){return p4d(this.a)};_.Si=function j5d(){return true};_.Yi=function k5d(){return true};var s8=sfb(SHe,'EOperationImpl/1',513);feb(1376,2062,kwe,l5d);_.fd=function m5d(a){return ZGd(this.a,a)};_.gc=function n5d(){return o4d(this.a.a).i};var r8=sfb(SHe,'EOperationImpl/1/1',1376);feb(1377,555,oKe,s5d);_.Ti=function w5d(a,b){var c,d;return c=RD(uLd(this,a,b),89),Mvd(this.e)&&eZd(this,new c4d(this.a,7,(JTd(),BTd),sgb(b),(d=c.c,d?d:wTd),a)),c};_.Uj=function x5d(a,b){return p5d(this,RD(a,89),b)};_.Vj=function y5d(a,b){return q5d(this,RD(a,89),b)};_.Wj=function z5d(a,b,c){return r5d(this,RD(a,89),RD(b,89),c)};_.Ij=function t5d(a,b,c,d,e){switch(a){case 3:{return dZd(this,a,b,c,d,this.i>1)}case 5:{return dZd(this,a,b,c,d,this.i-RD(c,15).gc()>0)}default:{return new P3d(this.e,a,this.c,b,c,d,true)}}};_.Tj=function u5d(){return true};_.Qj=function v5d(){return o5d(this)};_.Gk=function A5d(){sLd(this)};var t8=sfb(SHe,'EOperationImpl/2',1377);feb(507,1,{2037:1,507:1},B5d);var v8=sfb(SHe,'EPackageImpl/1',507);feb(14,83,oKe,C5d);_.il=function D5d(){return this.d};_.jl=function E5d(){return this.b};_.ml=function F5d(){return true};_.b=0;var gbb=sfb(ZJe,'EObjectContainmentWithInverseEList',14);feb(365,14,oKe,G5d);_.nl=function H5d(){return true};_.Wi=function I5d(a,b){return gZd(this,a,RD(b,58))};var dbb=sfb(ZJe,'EObjectContainmentWithInverseEList/Resolving',365);feb(307,365,oKe,J5d);_.Ni=function K5d(){this.a.tb=null};var w8=sfb(SHe,'EPackageImpl/2',307);feb(1278,1,{},L5d);var x8=sfb(SHe,'EPackageImpl/3',1278);feb(733,45,Hxe,O5d);_._b=function P5d(a){return bE(a)?Yjb(this,a):!!qtb(this.f,a)};var z8=sfb(SHe,'EPackageRegistryImpl',733);feb(518,291,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,480:1,54:1,99:1,158:1,518:1,291:1,119:1,120:1},R5d);_.Ah=function S5d(a){return Q5d(this,a)};_.Lh=function T5d(a,b,c){var d,e,f;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),f=this.t,f>1||f==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return this.Db>>16==10?RD(this.Cb,62):null;}return zvd(this,a-AYd((JTd(),DTd)),vYd((d=RD(Ywd(this,16),29),!d?DTd:d),a),b,c)};_.Sh=function U5d(a,b,c){var d,e,f;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),qLd(this.Ab,a,c);case 10:!!this.Cb&&(c=(e=this.Db>>16,e>=0?Q5d(this,c):this.Cb.Th(this,-1-e,null,c)));return xvd(this,a,10,c);}return f=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),DTd):d),b),69),f.wk().zk(this,Wwd(this),b-AYd((JTd(),DTd)),a,c)};_.Uh=function V5d(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 9:return VVd(this,c);case 10:return xvd(this,null,10,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),DTd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),DTd)),a,c)};_.Wh=function W5d(a){var b,c,d;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return d=this.t,d>1||d==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return !!(this.Db>>16==10?RD(this.Cb,62):null);}return Avd(this,a-AYd((JTd(),DTd)),vYd((b=RD(Ywd(this,16),29),!b?DTd:b),a))};_.ii=function X5d(){return JTd(),DTd};var A8=sfb(SHe,'EParameterImpl',518);feb(102,461,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,480:1,54:1,99:1,158:1,102:1,461:1,291:1,119:1,120:1,692:1},d6d);_.Lh=function e6d(a,b,c){var d,e,f,g;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Geb(),(this.Bb&256)!=0?true:false;case 3:return Geb(),(this.Bb&512)!=0?true:false;case 4:return sgb(this.s);case 5:return sgb(this.t);case 6:return Geb(),g=this.t,g>1||g==-1?true:false;case 7:return Geb(),e=this.s,e>=1?true:false;case 8:if(b)return WVd(this);return this.r;case 9:return this.q;case 10:return Geb(),(this.Bb&gwe)!=0?true:false;case 11:return Geb(),(this.Bb&cKe)!=0?true:false;case 12:return Geb(),(this.Bb&qxe)!=0?true:false;case 13:return this.j;case 14:return tWd(this);case 15:return Geb(),(this.Bb&bKe)!=0?true:false;case 16:return Geb(),(this.Bb&Ove)!=0?true:false;case 17:return uWd(this);case 18:return Geb(),(this.Bb&QHe)!=0?true:false;case 19:return Geb(),f=Z5d(this),!!f&&(f.Bb&QHe)!=0?true:false;case 20:return Geb(),(this.Bb&txe)!=0?true:false;case 21:if(b)return Z5d(this);return this.b;case 22:if(b)return $5d(this);return Y5d(this);case 23:return !this.a&&(this.a=new zie(g7,this,23)),this.a;}return zvd(this,a-AYd((JTd(),ETd)),vYd((d=RD(Ywd(this,16),29),!d?ETd:d),a),b,c)};_.Wh=function f6d(a){var b,c,d,e;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return (this.Bb&256)==0;case 3:return (this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return e=this.t,e>1||e==-1;case 7:return c=this.s,c>=1;case 8:return !!this.r&&!this.q.e&&j2d(this.q).i==0;case 9:return !!this.q&&!(!!this.r&&!this.q.e&&j2d(this.q).i==0);case 10:return (this.Bb&gwe)==0;case 11:return (this.Bb&cKe)!=0;case 12:return (this.Bb&qxe)!=0;case 13:return this.j!=null;case 14:return tWd(this)!=null;case 15:return (this.Bb&bKe)!=0;case 16:return (this.Bb&Ove)!=0;case 17:return !!uWd(this);case 18:return (this.Bb&QHe)!=0;case 19:return d=Z5d(this),!!d&&(d.Bb&QHe)!=0;case 20:return (this.Bb&txe)==0;case 21:return !!this.b;case 22:return !!Y5d(this);case 23:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),ETd)),vYd((b=RD(Ywd(this,16),29),!b?ETd:b),a))};_.bi=function g6d(a,b){var c,d;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:CWd(this,WD(b));return;case 2:_Vd(this,Heb(TD(b)));return;case 3:aWd(this,Heb(TD(b)));return;case 4:$Vd(this,RD(b,17).a);return;case 5:bWd(this,RD(b,17).a);return;case 8:YVd(this,RD(b,142));return;case 9:d=XVd(this,RD(b,89),null);!!d&&d.oj();return;case 10:xWd(this,Heb(TD(b)));return;case 11:FWd(this,Heb(TD(b)));return;case 12:DWd(this,Heb(TD(b)));return;case 13:yWd(this,WD(b));return;case 15:EWd(this,Heb(TD(b)));return;case 16:AWd(this,Heb(TD(b)));return;case 18:_5d(this,Heb(TD(b)));return;case 20:c6d(this,Heb(TD(b)));return;case 21:b6d(this,RD(b,19));return;case 23:!this.a&&(this.a=new zie(g7,this,23));sLd(this.a);!this.a&&(this.a=new zie(g7,this,23));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),ETd)),vYd((c=RD(Ywd(this,16),29),!c?ETd:c),a),b)};_.ii=function h6d(){return JTd(),ETd};_.ki=function i6d(a){var b,c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),4);PAd(this,null);return;case 2:_Vd(this,true);return;case 3:aWd(this,true);return;case 4:$Vd(this,0);return;case 5:bWd(this,1);return;case 8:YVd(this,null);return;case 9:c=XVd(this,null,null);!!c&&c.oj();return;case 10:xWd(this,true);return;case 11:FWd(this,false);return;case 12:DWd(this,false);return;case 13:this.i=null;zWd(this,null);return;case 15:EWd(this,false);return;case 16:AWd(this,false);return;case 18:a6d(this,false);ZD(this.Cb,90)&&v$d(yYd(RD(this.Cb,90)),2);return;case 20:c6d(this,true);return;case 21:b6d(this,null);return;case 23:!this.a&&(this.a=new zie(g7,this,23));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),ETd)),vYd((b=RD(Ywd(this,16),29),!b?ETd:b),a))};_.pi=function j6d(){$5d(this);Afe(Qee((lke(),jke),this));WVd(this);this.Bb|=1};_.uk=function k6d(){return Z5d(this)};_._k=function l6d(){var a;return a=Z5d(this),!!a&&(a.Bb&QHe)!=0};_.al=function m6d(){return (this.Bb&QHe)!=0};_.bl=function n6d(){return (this.Bb&txe)!=0};_.Yk=function o6d(a,b){this.c=null;return ZVd(this,a,b)};_.Ib=function p6d(){var a;if((this.Db&64)!=0)return GWd(this);a=new Shb(GWd(this));a.a+=' (containment: ';Ohb(a,(this.Bb&QHe)!=0);a.a+=', resolveProxies: ';Ohb(a,(this.Bb&txe)!=0);a.a+=')';return a.a};var B8=sfb(SHe,'EReferenceImpl',102);feb(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},v6d);_.Fb=function B6d(a){return this===a};_.ld=function D6d(){return this.b};_.md=function E6d(){return this.c};_.Hb=function F6d(){return kFb(this)};_.Di=function H6d(a){q6d(this,WD(a))};_.nd=function I6d(a){return u6d(this,WD(a))};_.Lh=function w6d(a,b,c){var d;switch(a){case 0:return this.b;case 1:return this.c;}return zvd(this,a-AYd((JTd(),FTd)),vYd((d=RD(Ywd(this,16),29),!d?FTd:d),a),b,c)};_.Wh=function x6d(a){var b;switch(a){case 0:return this.b!=null;case 1:return this.c!=null;}return Avd(this,a-AYd((JTd(),FTd)),vYd((b=RD(Ywd(this,16),29),!b?FTd:b),a))};_.bi=function y6d(a,b){var c;switch(a){case 0:r6d(this,WD(b));return;case 1:t6d(this,WD(b));return;}Bvd(this,a-AYd((JTd(),FTd)),vYd((c=RD(Ywd(this,16),29),!c?FTd:c),a),b)};_.ii=function z6d(){return JTd(),FTd};_.ki=function A6d(a){var b;switch(a){case 0:s6d(this,null);return;case 1:t6d(this,null);return;}Cvd(this,a-AYd((JTd(),FTd)),vYd((b=RD(Ywd(this,16),29),!b?FTd:b),a))};_.Bi=function C6d(){var a;if(this.a==-1){a=this.b;this.a=a==null?0:ohb(a)}return this.a};_.Ci=function G6d(a){this.a=a};_.Ib=function J6d(){var a;if((this.Db&64)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (key: ';Nhb(a,this.b);a.a+=', value: ';Nhb(a,this.c);a.a+=')';return a.a};_.a=-1;_.b=null;_.c=null;var C8=sfb(SHe,'EStringToStringMapEntryImpl',561);var Ibb=ufb(ZJe,'FeatureMap/Entry/Internal');feb(576,1,wKe);_.xl=function M6d(a){return this.yl(RD(a,54))};_.yl=function N6d(a){return this.xl(a)};_.Fb=function O6d(a){var b,c;if(this===a){return true}else if(ZD(a,76)){b=RD(a,76);if(b.Lk()==this.c){c=this.md();return c==null?b.md()==null:pb(c,b.md())}else{return false}}else{return false}};_.Lk=function P6d(){return this.c};_.Hb=function Q6d(){var a;a=this.md();return tb(this.c)^(a==null?0:tb(a))};_.Ib=function R6d(){var a,b;a=this.c;b=BXd(a.qk()).yi();a.xe();return (b!=null&&b.length!=0?b+':'+a.xe():a.xe())+'='+this.md()};var D8=sfb(SHe,'EStructuralFeatureImpl/BasicFeatureMapEntry',576);feb(791,576,wKe,U6d);_.yl=function V6d(a){return new U6d(this.c,a)};_.md=function W6d(){return this.a};_.zl=function X6d(a,b,c){return S6d(this,a,this.a,b,c)};_.Al=function Y6d(a,b,c){return T6d(this,a,this.a,b,c)};var E8=sfb(SHe,'EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry',791);feb(1350,1,{},Z6d);_.yk=function $6d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Yl(this.a).Fk(d)};_.zk=function _6d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Pl(this.a,d,e)};_.Ak=function a7d(a,b,c,d,e){var f;f=RD(Evd(a,this.b),220);return f.Ql(this.a,d,e)};_.Bk=function b7d(a,b,c){var d;d=RD(Evd(a,this.b),220);return d.Yl(this.a).Qj()};_.Ck=function c7d(a,b,c,d){var e;e=RD(Evd(a,this.b),220);e.Yl(this.a).Wb(d)};_.Dk=function d7d(a,b,c){return RD(Evd(a,this.b),220).Yl(this.a)};_.Ek=function e7d(a,b,c){var d;d=RD(Evd(a,this.b),220);d.Yl(this.a).Gk()};var F8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator',1350);feb(91,1,{},g7d,h7d,i7d,j7d);_.yk=function k7d(a,b,c,d,e){var f;f=b.li(c);f==null&&b.mi(c,f=f7d(this,a));if(!e){switch(this.e){case 50:case 41:return RD(f,597).bk();case 40:return RD(f,220).Vl();}}return f};_.zk=function l7d(a,b,c,d,e){var f,g;g=b.li(c);g==null&&b.mi(c,g=f7d(this,a));f=RD(g,71).Wk(d,e);return f};_.Ak=function m7d(a,b,c,d,e){var f;f=b.li(c);f!=null&&(e=RD(f,71).Xk(d,e));return e};_.Bk=function n7d(a,b,c){var d;d=b.li(c);return d!=null&&RD(d,79).Qj()};_.Ck=function o7d(a,b,c,d){var e;e=RD(b.li(c),79);!e&&b.mi(c,e=f7d(this,a));e.Wb(d)};_.Dk=function p7d(a,b,c){var d,e;e=b.li(c);e==null&&b.mi(c,e=f7d(this,a));if(ZD(e,79)){return RD(e,79)}else{d=RD(b.li(c),15);return new I9d(d)}};_.Ek=function q7d(a,b,c){var d;d=RD(b.li(c),79);!d&&b.mi(c,d=f7d(this,a));d.Gk()};_.b=0;_.e=0;var G8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateMany',91);feb(512,1,{});_.zk=function u7d(a,b,c,d,e){throw Adb(new jib)};_.Ak=function v7d(a,b,c,d,e){throw Adb(new jib)};_.Dk=function w7d(a,b,c){return new x7d(this,a,b,c)};var r7d;var n9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingle',512);feb(1367,1,$Je,x7d);_.Fk=function y7d(a){return this.a.yk(this.c,this.d,this.b,a,true)};_.Qj=function z7d(){return this.a.Bk(this.c,this.d,this.b)};_.Wb=function A7d(a){this.a.Ck(this.c,this.d,this.b,a)};_.Gk=function B7d(){this.a.Ek(this.c,this.d,this.b)};_.b=0;var H8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingle/1',1367);feb(784,512,{},C7d);_.yk=function D7d(a,b,c,d,e){return jwd(a,a.Ph(),a.Fh())==this.b?this.bl()&&d?yvd(a):a.Ph():null};_.zk=function E7d(a,b,c,d,e){var f,g;!!a.Ph()&&(e=(f=a.Fh(),f>=0?a.Ah(e):a.Ph().Th(a,-1-f,null,e)));g=BYd(a.Dh(),this.e);return a.Ch(d,g,e)};_.Ak=function F7d(a,b,c,d,e){var f;f=BYd(a.Dh(),this.e);return a.Ch(null,f,e)};_.Bk=function G7d(a,b,c){var d;d=BYd(a.Dh(),this.e);return !!a.Ph()&&a.Fh()==d};_.Ck=function H7d(a,b,c,d){var e,f,g,h,i;if(d!=null&&!FXd(this.a,d)){throw Adb(new Ifb(xKe+(ZD(d,58)?GYd(RD(d,58).Dh()):ofb(rb(d)))+yKe+this.a+"'"))}e=a.Ph();g=BYd(a.Dh(),this.e);if(dE(d)!==dE(e)||a.Fh()!=g&&d!=null){if(Oje(a,RD(d,58)))throw Adb(new agb(UHe+a.Ib()));i=null;!!e&&(i=(f=a.Fh(),f>=0?a.Ah(i):a.Ph().Th(a,-1-f,null,i)));h=RD(d,54);!!h&&(i=h.Rh(a,BYd(h.Dh(),this.b),null,i));i=a.Ch(h,g,i);!!i&&i.oj()}else{a.vh()&&a.wh()&&qvd(a,new N3d(a,1,g,d,d))}};_.Ek=function I7d(a,b,c){var d,e,f,g;d=a.Ph();if(d){g=(e=a.Fh(),e>=0?a.Ah(null):a.Ph().Th(a,-1-e,null,null));f=BYd(a.Dh(),this.e);g=a.Ch(null,f,g);!!g&&g.oj()}else{a.vh()&&a.wh()&&qvd(a,new b4d(a,1,this.e,null,null))}};_.bl=function J7d(){return false};var J8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainer',784);feb(1351,784,{},K7d);_.bl=function L7d(){return true};var I8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving',1351);feb(574,512,{});_.yk=function O7d(a,b,c,d,e){var f;return f=b.li(c),f==null?this.b:dE(f)===dE(r7d)?null:f};_.Bk=function P7d(a,b,c){var d;d=b.li(c);return d!=null&&(dE(d)===dE(r7d)||!pb(d,this.b))};_.Ck=function Q7d(a,b,c,d){var e,f;if(a.vh()&&a.wh()){e=(f=b.li(c),f==null?this.b:dE(f)===dE(r7d)?null:f);if(d==null){if(this.c!=null){b.mi(c,null);d=this.b}else this.b!=null?b.mi(c,r7d):b.mi(c,null)}else{this.Bl(d);b.mi(c,d)}qvd(a,this.d.Cl(a,1,this.e,e,d))}else{if(d==null){this.c!=null?b.mi(c,null):this.b!=null?b.mi(c,r7d):b.mi(c,null)}else{this.Bl(d);b.mi(c,d)}}};_.Ek=function R7d(a,b,c){var d,e;if(a.vh()&&a.wh()){d=(e=b.li(c),e==null?this.b:dE(e)===dE(r7d)?null:e);b.ni(c);qvd(a,this.d.Cl(a,1,this.e,d,this.b))}else{b.ni(c)}};_.Bl=function S7d(a){throw Adb(new Hfb)};var Y8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData',574);feb(zKe,1,{},b8d);_.Cl=function c8d(a,b,c,d,e){return new b4d(a,b,c,d,e)};_.Dl=function d8d(a,b,c,d,e,f){return new d4d(a,b,c,d,e,f)};var T7d,U7d,V7d,W7d,X7d,Y7d,Z7d,$7d,_7d;var S8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator',zKe);feb(1368,zKe,{},e8d);_.Cl=function f8d(a,b,c,d,e){return new g4d(a,b,c,Heb(TD(d)),Heb(TD(e)))};_.Dl=function g8d(a,b,c,d,e,f){return new h4d(a,b,c,Heb(TD(d)),Heb(TD(e)),f)};var K8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1',1368);feb(1369,zKe,{},h8d);_.Cl=function i8d(a,b,c,d,e){return new R3d(a,b,c,RD(d,222).a,RD(e,222).a)};_.Dl=function j8d(a,b,c,d,e,f){return new S3d(a,b,c,RD(d,222).a,RD(e,222).a,f)};var L8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2',1369);feb(1370,zKe,{},k8d);_.Cl=function l8d(a,b,c,d,e){return new T3d(a,b,c,RD(d,180).a,RD(e,180).a)};_.Dl=function m8d(a,b,c,d,e,f){return new U3d(a,b,c,RD(d,180).a,RD(e,180).a,f)};var M8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3',1370);feb(1371,zKe,{},n8d);_.Cl=function o8d(a,b,c,d,e){return new V3d(a,b,c,Kfb(UD(d)),Kfb(UD(e)))};_.Dl=function p8d(a,b,c,d,e,f){return new W3d(a,b,c,Kfb(UD(d)),Kfb(UD(e)),f)};var N8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4',1371);feb(1372,zKe,{},q8d);_.Cl=function r8d(a,b,c,d,e){return new X3d(a,b,c,RD(d,161).a,RD(e,161).a)};_.Dl=function s8d(a,b,c,d,e,f){return new Y3d(a,b,c,RD(d,161).a,RD(e,161).a,f)};var O8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5',1372);feb(1373,zKe,{},t8d);_.Cl=function u8d(a,b,c,d,e){return new Z3d(a,b,c,RD(d,17).a,RD(e,17).a)};_.Dl=function v8d(a,b,c,d,e,f){return new $3d(a,b,c,RD(d,17).a,RD(e,17).a,f)};var P8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6',1373);feb(1374,zKe,{},w8d);_.Cl=function x8d(a,b,c,d,e){return new _3d(a,b,c,RD(d,168).a,RD(e,168).a)};_.Dl=function y8d(a,b,c,d,e,f){return new a4d(a,b,c,RD(d,168).a,RD(e,168).a,f)};var Q8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7',1374);feb(1375,zKe,{},z8d);_.Cl=function A8d(a,b,c,d,e){return new e4d(a,b,c,RD(d,191).a,RD(e,191).a)};_.Dl=function B8d(a,b,c,d,e,f){return new f4d(a,b,c,RD(d,191).a,RD(e,191).a,f)};var R8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8',1375);feb(1353,574,{},C8d);_.Bl=function D8d(a){if(!this.a.fk(a)){throw Adb(new Ifb(xKe+rb(a)+yKe+this.a+"'"))}};var T8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic',1353);feb(1354,574,{},E8d);_.Bl=function F8d(a){};var U8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic',1354);feb(785,574,{});_.Bk=function G8d(a,b,c){var d;d=b.li(c);return d!=null};_.Ck=function H8d(a,b,c,d){var e,f;if(a.vh()&&a.wh()){e=true;f=b.li(c);if(f==null){e=false;f=this.b}else dE(f)===dE(r7d)&&(f=null);if(d==null){if(this.c!=null){b.mi(c,null);d=this.b}else{b.mi(c,r7d)}}else{this.Bl(d);b.mi(c,d)}qvd(a,this.d.Dl(a,1,this.e,f,d,!e))}else{if(d==null){this.c!=null?b.mi(c,null):b.mi(c,r7d)}else{this.Bl(d);b.mi(c,d)}}};_.Ek=function I8d(a,b,c){var d,e;if(a.vh()&&a.wh()){d=true;e=b.li(c);if(e==null){d=false;e=this.b}else dE(e)===dE(r7d)&&(e=null);b.ni(c);qvd(a,this.d.Dl(a,2,this.e,e,this.b,d))}else{b.ni(c)}};var X8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable',785);feb(1355,785,{},J8d);_.Bl=function K8d(a){if(!this.a.fk(a)){throw Adb(new Ifb(xKe+rb(a)+yKe+this.a+"'"))}};var V8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic',1355);feb(1356,785,{},L8d);_.Bl=function M8d(a){};var W8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic',1356);feb(410,512,{},N8d);_.yk=function P8d(a,b,c,d,e){var f,g,h,i,j;j=b.li(c);if(this.tk()&&dE(j)===dE(r7d)){return null}else if(this.bl()&&d&&j!=null){h=RD(j,54);if(h.Vh()){i=Vvd(a,h);if(h!=i){if(!FXd(this.a,i)){throw Adb(new Ifb(xKe+rb(i)+yKe+this.a+"'"))}b.mi(c,j=i);if(this.al()){f=RD(i,54);g=h.Th(a,!this.b?-1-BYd(a.Dh(),this.e):BYd(h.Dh(),this.b),null,null);!f.Ph()&&(g=f.Rh(a,!this.b?-1-BYd(a.Dh(),this.e):BYd(f.Dh(),this.b),null,g));!!g&&g.oj()}a.vh()&&a.wh()&&qvd(a,new b4d(a,9,this.e,h,i))}}return j}else{return j}};_.zk=function Q8d(a,b,c,d,e){var f,g;g=b.li(c);dE(g)===dE(r7d)&&(g=null);b.mi(c,d);if(this.Mj()){if(dE(g)!==dE(d)&&g!=null){f=RD(g,54);e=f.Th(a,BYd(f.Dh(),this.b),null,e)}}else this.al()&&g!=null&&(e=RD(g,54).Th(a,-1-BYd(a.Dh(),this.e),null,e));if(a.vh()&&a.wh()){!e&&(e=new gLd(4));e.nj(new b4d(a,1,this.e,g,d))}return e};_.Ak=function R8d(a,b,c,d,e){var f;f=b.li(c);dE(f)===dE(r7d)&&(f=null);b.ni(c);if(a.vh()&&a.wh()){!e&&(e=new gLd(4));this.tk()?e.nj(new b4d(a,2,this.e,f,null)):e.nj(new b4d(a,1,this.e,f,null))}return e};_.Bk=function S8d(a,b,c){var d;d=b.li(c);return d!=null};_.Ck=function T8d(a,b,c,d){var e,f,g,h,i;if(d!=null&&!FXd(this.a,d)){throw Adb(new Ifb(xKe+(ZD(d,58)?GYd(RD(d,58).Dh()):ofb(rb(d)))+yKe+this.a+"'"))}i=b.li(c);h=i!=null;this.tk()&&dE(i)===dE(r7d)&&(i=null);g=null;if(this.Mj()){if(dE(i)!==dE(d)){if(i!=null){e=RD(i,54);g=e.Th(a,BYd(e.Dh(),this.b),null,g)}if(d!=null){e=RD(d,54);g=e.Rh(a,BYd(e.Dh(),this.b),null,g)}}}else if(this.al()){if(dE(i)!==dE(d)){i!=null&&(g=RD(i,54).Th(a,-1-BYd(a.Dh(),this.e),null,g));d!=null&&(g=RD(d,54).Rh(a,-1-BYd(a.Dh(),this.e),null,g))}}d==null&&this.tk()?b.mi(c,r7d):b.mi(c,d);if(a.vh()&&a.wh()){f=new d4d(a,1,this.e,i,d,this.tk()&&!h);if(!g){qvd(a,f)}else{g.nj(f);g.oj()}}else !!g&&g.oj()};_.Ek=function U8d(a,b,c){var d,e,f,g,h;h=b.li(c);g=h!=null;this.tk()&&dE(h)===dE(r7d)&&(h=null);f=null;if(h!=null){if(this.Mj()){d=RD(h,54);f=d.Th(a,BYd(d.Dh(),this.b),null,f)}else this.al()&&(f=RD(h,54).Th(a,-1-BYd(a.Dh(),this.e),null,f))}b.ni(c);if(a.vh()&&a.wh()){e=new d4d(a,this.tk()?2:1,this.e,h,null,g);if(!f){qvd(a,e)}else{f.nj(e);f.oj()}}else !!f&&f.oj()};_.Mj=function V8d(){return false};_.al=function W8d(){return false};_.bl=function X8d(){return false};_.tk=function Y8d(){return false};var m9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObject',410);feb(575,410,{},Z8d);_.al=function $8d(){return true};var e9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment',575);feb(1359,575,{},_8d);_.bl=function a9d(){return true};var Z8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving',1359);feb(787,575,{},b9d);_.tk=function c9d(){return true};var _8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable',787);feb(1361,787,{},d9d);_.bl=function e9d(){return true};var $8=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving',1361);feb(650,575,{},f9d);_.Mj=function g9d(){return true};var d9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse',650);feb(1360,650,{},h9d);_.bl=function i9d(){return true};var a9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving',1360);feb(788,650,{},j9d);_.tk=function k9d(){return true};var c9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable',788);feb(1362,788,{},l9d);_.bl=function m9d(){return true};var b9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving',1362);feb(651,410,{},n9d);_.bl=function o9d(){return true};var i9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving',651);feb(1363,651,{},p9d);_.tk=function q9d(){return true};var f9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable',1363);feb(789,651,{},r9d);_.Mj=function s9d(){return true};var h9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse',789);feb(1364,789,{},t9d);_.tk=function u9d(){return true};var g9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable',1364);feb(1357,410,{},v9d);_.tk=function w9d(){return true};var j9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable',1357);feb(786,410,{},x9d);_.Mj=function y9d(){return true};var l9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse',786);feb(1358,786,{},z9d);_.tk=function A9d(){return true};var k9=sfb(SHe,'EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable',1358);feb(790,576,wKe,D9d);_.yl=function E9d(a){return new D9d(this.a,this.c,a)};_.md=function F9d(){return this.b};_.zl=function G9d(a,b,c){return B9d(this,a,this.b,c)};_.Al=function H9d(a,b,c){return C9d(this,a,this.b,c)};var o9=sfb(SHe,'EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry',790);feb(1365,1,$Je,I9d);_.Fk=function J9d(a){return this.a};_.Qj=function K9d(){return ZD(this.a,97)?RD(this.a,97).Qj():!this.a.dc()};_.Wb=function L9d(a){this.a.$b();this.a.Gc(RD(a,15))};_.Gk=function M9d(){ZD(this.a,97)?RD(this.a,97).Gk():this.a.$b()};var p9=sfb(SHe,'EStructuralFeatureImpl/SettingMany',1365);feb(1366,576,wKe,N9d);_.xl=function O9d(a){return new S9d((nme(),mme),this.b.ri(this.a,a))};_.md=function P9d(){return null};_.zl=function Q9d(a,b,c){return c};_.Al=function R9d(a,b,c){return c};var q9=sfb(SHe,'EStructuralFeatureImpl/SimpleContentFeatureMapEntry',1366);feb(652,576,wKe,S9d);_.xl=function T9d(a){return new S9d(this.c,a)};_.md=function U9d(){return this.a};_.zl=function V9d(a,b,c){return c};_.Al=function W9d(a,b,c){return c};var r9=sfb(SHe,'EStructuralFeatureImpl/SimpleFeatureMapEntry',652);feb(403,505,PIe,X9d);_.aj=function Y9d(a){return $C(h7,rve,29,a,0,1)};_.Yi=function Z9d(){return false};var t9=sfb(SHe,'ESuperAdapter/1',403);feb(456,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,456:1,119:1,120:1},_9d);_.Lh=function aae(a,b,c){var d;switch(a){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),this.Ab;case 1:return this.zb;case 2:return !this.a&&(this.a=new iae(this,o7,this)),this.a;}return zvd(this,a-AYd((JTd(),ITd)),vYd((d=RD(Ywd(this,16),29),!d?ITd:d),a),b,c)};_.Uh=function bae(a,b,c){var d,e;switch(b){case 0:return !this.Ab&&(this.Ab=new C5d(f7,this,0,3)),rLd(this.Ab,a,c);case 2:return !this.a&&(this.a=new iae(this,o7,this)),rLd(this.a,a,c);}return e=RD(vYd((d=RD(Ywd(this,16),29),!d?(JTd(),ITd):d),b),69),e.wk().Ak(this,Wwd(this),b-AYd((JTd(),ITd)),a,c)};_.Wh=function cae(a){var b;switch(a){case 0:return !!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return !!this.a&&this.a.i!=0;}return Avd(this,a-AYd((JTd(),ITd)),vYd((b=RD(Ywd(this,16),29),!b?ITd:b),a))};_.bi=function dae(a,b){var c;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);!this.Ab&&(this.Ab=new C5d(f7,this,0,3));YGd(this.Ab,RD(b,16));return;case 1:PAd(this,WD(b));return;case 2:!this.a&&(this.a=new iae(this,o7,this));sLd(this.a);!this.a&&(this.a=new iae(this,o7,this));YGd(this.a,RD(b,16));return;}Bvd(this,a-AYd((JTd(),ITd)),vYd((c=RD(Ywd(this,16),29),!c?ITd:c),a),b)};_.ii=function eae(){return JTd(),ITd};_.ki=function fae(a){var b;switch(a){case 0:!this.Ab&&(this.Ab=new C5d(f7,this,0,3));sLd(this.Ab);return;case 1:PAd(this,null);return;case 2:!this.a&&(this.a=new iae(this,o7,this));sLd(this.a);return;}Cvd(this,a-AYd((JTd(),ITd)),vYd((b=RD(Ywd(this,16),29),!b?ITd:b),a))};var z9=sfb(SHe,'ETypeParameterImpl',456);feb(457,83,oKe,iae);_.Nj=function jae(a,b){return gae(this,RD(a,89),b)};_.Oj=function kae(a,b){return hae(this,RD(a,89),b)};var v9=sfb(SHe,'ETypeParameterImpl/1',457);feb(647,45,Hxe,lae);_.ec=function mae(){return new pae(this)};var y9=sfb(SHe,'ETypeParameterImpl/2',647);feb(570,Eve,Fve,pae);_.Fc=function qae(a){return nae(this,RD(a,89))};_.Gc=function rae(a){var b,c,d;d=false;for(c=a.Kc();c.Ob();){b=RD(c.Pb(),89);Zjb(this.a,b,'')==null&&(d=true)}return d};_.$b=function sae(){akb(this.a)};_.Hc=function tae(a){return Ujb(this.a,a)};_.Kc=function uae(){var a;return a=new vkb((new mkb(this.a)).a),new xae(a)};_.Mc=function vae(a){return oae(this,a)};_.gc=function wae(){return bkb(this.a)};var x9=sfb(SHe,'ETypeParameterImpl/2/1',570);feb(571,1,Ave,xae);_.Nb=function yae(a){Ztb(this,a)};_.Pb=function Aae(){return RD(tkb(this.a).ld(),89)};_.Ob=function zae(){return this.a.b};_.Qb=function Bae(){ukb(this.a)};var w9=sfb(SHe,'ETypeParameterImpl/2/1/1',571);feb(1329,45,Hxe,Cae);_._b=function Dae(a){return bE(a)?Yjb(this,a):!!qtb(this.f,a)};_.xc=function Eae(a){var b,c;b=bE(a)?Xjb(this,a):Wd(qtb(this.f,a));if(ZD(b,851)){c=RD(b,851);b=c.Kk();Zjb(this,RD(a,241),b);return b}else return b!=null?b:a==null?(Gie(),Fie):null};var B9=sfb(SHe,'EValidatorRegistryImpl',1329);feb(1349,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},Mae);_.ri=function Nae(a,b){switch(a.hk()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return b==null?null:jeb(b);case 25:return Gae(b);case 27:return Hae(b);case 28:return Iae(b);case 29:return b==null?null:a2d(nAd[0],RD(b,206));case 41:return b==null?'':nfb(RD(b,296));case 42:return jeb(b);case 50:return WD(b);default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function Oae(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;switch(a.G==-1&&(a.G=(m=BXd(a),m?fZd(m.vi(),a):-1)),a.G){case 0:return c=new mXd,c;case 1:return b=new pVd,b;case 2:return d=new HYd,d;case 4:return e=new k1d,e;case 5:return f=new A1d,f;case 6:return g=new R1d,g;case 7:return h=new yAd,h;case 10:return j=new kUd,j;case 11:return k=new q4d,k;case 12:return l=new EBd,l;case 13:return n=new R5d,n;case 14:return o=new d6d,o;case 17:return p=new v6d,p;case 18:return i=new s2d,i;case 19:return q=new _9d,q;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function Pae(a,b){switch(a.hk()){case 20:return b==null?null:new Bib(b);case 21:return b==null?null:new ejb(b);case 23:case 22:return b==null?null:Fae(b);case 26:case 24:return b==null?null:$eb(Oeb(b,-128,127)<<24>>24);case 25:return vAd(b);case 27:return Jae(b);case 28:return Kae(b);case 29:return Lae(b);case 32:case 31:return b==null?null:Neb(b);case 38:case 37:return b==null?null:new Ufb(b);case 40:case 39:return b==null?null:sgb(Oeb(b,qwe,lve));case 41:return null;case 42:return b==null?null:null;case 44:case 43:return b==null?null:Hgb(Peb(b));case 49:case 48:return b==null?null:bhb(Oeb(b,BKe,32767)<<16>>16);case 50:return b;default:throw Adb(new agb(VHe+a.xe()+WHe));}};var C9=sfb(SHe,'EcoreFactoryImpl',1349);feb(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},$ae);_.gb=false;_.hb=false;var Rae,Sae=false;var tab=sfb(SHe,'EcorePackageImpl',560);feb(1234,1,{851:1},cbe);_.Kk=function dbe(){return fke(),eke};var N9=sfb(SHe,'EcorePackageImpl/1',1234);feb(1243,1,OKe,ebe);_.fk=function fbe(a){return ZD(a,155)};_.gk=function gbe(a){return $C(p7,rve,155,a,0,1)};var D9=sfb(SHe,'EcorePackageImpl/10',1243);feb(1244,1,OKe,hbe);_.fk=function ibe(a){return ZD(a,197)};_.gk=function jbe(a){return $C(q7,rve,197,a,0,1)};var E9=sfb(SHe,'EcorePackageImpl/11',1244);feb(1245,1,OKe,kbe);_.fk=function lbe(a){return ZD(a,58)};_.gk=function mbe(a){return $C(r7,rve,58,a,0,1)};var F9=sfb(SHe,'EcorePackageImpl/12',1245);feb(1246,1,OKe,nbe);_.fk=function obe(a){return ZD(a,411)};_.gk=function pbe(a){return $C(s7,mKe,62,a,0,1)};var G9=sfb(SHe,'EcorePackageImpl/13',1246);feb(1247,1,OKe,qbe);_.fk=function rbe(a){return ZD(a,241)};_.gk=function sbe(a){return $C(t7,rve,241,a,0,1)};var H9=sfb(SHe,'EcorePackageImpl/14',1247);feb(1248,1,OKe,tbe);_.fk=function ube(a){return ZD(a,518)};_.gk=function vbe(a){return $C(u7,rve,2116,a,0,1)};var I9=sfb(SHe,'EcorePackageImpl/15',1248);feb(1249,1,OKe,wbe);_.fk=function xbe(a){return ZD(a,102)};_.gk=function ybe(a){return $C(v7,lKe,19,a,0,1)};var J9=sfb(SHe,'EcorePackageImpl/16',1249);feb(1250,1,OKe,zbe);_.fk=function Abe(a){return ZD(a,179)};_.gk=function Bbe(a){return $C(y7,lKe,179,a,0,1)};var K9=sfb(SHe,'EcorePackageImpl/17',1250);feb(1251,1,OKe,Cbe);_.fk=function Dbe(a){return ZD(a,480)};_.gk=function Ebe(a){return $C(A7,rve,480,a,0,1)};var L9=sfb(SHe,'EcorePackageImpl/18',1251);feb(1252,1,OKe,Fbe);_.fk=function Gbe(a){return ZD(a,561)};_.gk=function Hbe(a){return $C(C8,LJe,561,a,0,1)};var M9=sfb(SHe,'EcorePackageImpl/19',1252);feb(1235,1,OKe,Ibe);_.fk=function Jbe(a){return ZD(a,331)};_.gk=function Kbe(a){return $C(g7,lKe,35,a,0,1)};var Y9=sfb(SHe,'EcorePackageImpl/2',1235);feb(1253,1,OKe,Lbe);_.fk=function Mbe(a){return ZD(a,248)};_.gk=function Nbe(a){return $C(o7,sKe,89,a,0,1)};var O9=sfb(SHe,'EcorePackageImpl/20',1253);feb(1254,1,OKe,Obe);_.fk=function Pbe(a){return ZD(a,456)};_.gk=function Qbe(a){return $C(z7,rve,850,a,0,1)};var P9=sfb(SHe,'EcorePackageImpl/21',1254);feb(1255,1,OKe,Rbe);_.fk=function Sbe(a){return $D(a)};_.gk=function Tbe(a){return $C(QI,Nve,484,a,8,1)};var Q9=sfb(SHe,'EcorePackageImpl/22',1255);feb(1256,1,OKe,Ube);_.fk=function Vbe(a){return ZD(a,195)};_.gk=function Wbe(a){return $C(gE,Nve,195,a,0,2)};var R9=sfb(SHe,'EcorePackageImpl/23',1256);feb(1257,1,OKe,Xbe);_.fk=function Ybe(a){return ZD(a,222)};_.gk=function Zbe(a){return $C(RI,Nve,222,a,0,1)};var S9=sfb(SHe,'EcorePackageImpl/24',1257);feb(1258,1,OKe,$be);_.fk=function _be(a){return ZD(a,180)};_.gk=function ace(a){return $C(SI,Nve,180,a,0,1)};var T9=sfb(SHe,'EcorePackageImpl/25',1258);feb(1259,1,OKe,bce);_.fk=function cce(a){return ZD(a,206)};_.gk=function dce(a){return $C(qK,Nve,206,a,0,1)};var U9=sfb(SHe,'EcorePackageImpl/26',1259);feb(1260,1,OKe,ece);_.fk=function fce(a){return false};_.gk=function gce(a){return $C(T6,rve,2215,a,0,1)};var V9=sfb(SHe,'EcorePackageImpl/27',1260);feb(1261,1,OKe,hce);_.fk=function ice(a){return _D(a)};_.gk=function jce(a){return $C(VI,Nve,345,a,7,1)};var W9=sfb(SHe,'EcorePackageImpl/28',1261);feb(1262,1,OKe,kce);_.fk=function lce(a){return ZD(a,61)};_.gk=function mce(a){return $C(Y6,Ize,61,a,0,1)};var X9=sfb(SHe,'EcorePackageImpl/29',1262);feb(1236,1,OKe,nce);_.fk=function oce(a){return ZD(a,519)};_.gk=function pce(a){return $C(f7,{3:1,4:1,5:1,2033:1},598,a,0,1)};var hab=sfb(SHe,'EcorePackageImpl/3',1236);feb(1263,1,OKe,qce);_.fk=function rce(a){return ZD(a,582)};_.gk=function sce(a){return $C(Z6,rve,2039,a,0,1)};var Z9=sfb(SHe,'EcorePackageImpl/30',1263);feb(1264,1,OKe,tce);_.fk=function uce(a){return ZD(a,160)};_.gk=function vce(a){return $C(Tbb,Ize,160,a,0,1)};var $9=sfb(SHe,'EcorePackageImpl/31',1264);feb(1265,1,OKe,wce);_.fk=function xce(a){return ZD(a,76)};_.gk=function yce(a){return $C(Jbb,PKe,76,a,0,1)};var _9=sfb(SHe,'EcorePackageImpl/32',1265);feb(1266,1,OKe,zce);_.fk=function Ace(a){return ZD(a,161)};_.gk=function Bce(a){return $C(ZI,Nve,161,a,0,1)};var aab=sfb(SHe,'EcorePackageImpl/33',1266);feb(1267,1,OKe,Cce);_.fk=function Dce(a){return ZD(a,17)};_.gk=function Ece(a){return $C(bJ,Nve,17,a,0,1)};var bab=sfb(SHe,'EcorePackageImpl/34',1267);feb(1268,1,OKe,Fce);_.fk=function Gce(a){return ZD(a,296)};_.gk=function Hce(a){return $C(UI,rve,296,a,0,1)};var cab=sfb(SHe,'EcorePackageImpl/35',1268);feb(1269,1,OKe,Ice);_.fk=function Jce(a){return ZD(a,168)};_.gk=function Kce(a){return $C(eJ,Nve,168,a,0,1)};var dab=sfb(SHe,'EcorePackageImpl/36',1269);feb(1270,1,OKe,Lce);_.fk=function Mce(a){return ZD(a,85)};_.gk=function Nce(a){return $C(VK,rve,85,a,0,1)};var eab=sfb(SHe,'EcorePackageImpl/37',1270);feb(1271,1,OKe,Oce);_.fk=function Pce(a){return ZD(a,599)};_.gk=function Qce(a){return $C(Aab,rve,599,a,0,1)};var fab=sfb(SHe,'EcorePackageImpl/38',1271);feb(1272,1,OKe,Rce);_.fk=function Sce(a){return false};_.gk=function Tce(a){return $C(zab,rve,2216,a,0,1)};var gab=sfb(SHe,'EcorePackageImpl/39',1272);feb(1237,1,OKe,Uce);_.fk=function Vce(a){return ZD(a,90)};_.gk=function Wce(a){return $C(h7,rve,29,a,0,1)};var nab=sfb(SHe,'EcorePackageImpl/4',1237);feb(1273,1,OKe,Xce);_.fk=function Yce(a){return ZD(a,191)};_.gk=function Zce(a){return $C(lJ,Nve,191,a,0,1)};var iab=sfb(SHe,'EcorePackageImpl/40',1273);feb(1274,1,OKe,$ce);_.fk=function _ce(a){return bE(a)};_.gk=function ade(a){return $C(qJ,Nve,2,a,6,1)};var jab=sfb(SHe,'EcorePackageImpl/41',1274);feb(1275,1,OKe,bde);_.fk=function cde(a){return ZD(a,596)};_.gk=function dde(a){return $C(a7,rve,596,a,0,1)};var kab=sfb(SHe,'EcorePackageImpl/42',1275);feb(1276,1,OKe,ede);_.fk=function fde(a){return false};_.gk=function gde(a){return $C($6,Nve,2217,a,0,1)};var lab=sfb(SHe,'EcorePackageImpl/43',1276);feb(1277,1,OKe,hde);_.fk=function ide(a){return ZD(a,44)};_.gk=function jde(a){return $C(UK,Zve,44,a,0,1)};var mab=sfb(SHe,'EcorePackageImpl/44',1277);feb(1238,1,OKe,kde);_.fk=function lde(a){return ZD(a,142)};_.gk=function mde(a){return $C(i7,rve,142,a,0,1)};var oab=sfb(SHe,'EcorePackageImpl/5',1238);feb(1239,1,OKe,nde);_.fk=function ode(a){return ZD(a,156)};_.gk=function pde(a){return $C(k7,rve,156,a,0,1)};var pab=sfb(SHe,'EcorePackageImpl/6',1239);feb(1240,1,OKe,qde);_.fk=function rde(a){return ZD(a,468)};_.gk=function sde(a){return $C(m7,rve,685,a,0,1)};var qab=sfb(SHe,'EcorePackageImpl/7',1240);feb(1241,1,OKe,tde);_.fk=function ude(a){return ZD(a,582)};_.gk=function vde(a){return $C(l7,rve,694,a,0,1)};var rab=sfb(SHe,'EcorePackageImpl/8',1241);feb(1242,1,OKe,wde);_.fk=function xde(a){return ZD(a,479)};_.gk=function yde(a){return $C(n7,rve,479,a,0,1)};var sab=sfb(SHe,'EcorePackageImpl/9',1242);feb(1038,2080,JJe,Cde);_.Mi=function Dde(a,b){zde(this,RD(b,424))};_.Qi=function Ede(a,b){Ade(this,a,RD(b,424))};var vab=sfb(SHe,'MinimalEObjectImpl/1ArrayDelegatingAdapterList',1038);feb(1039,152,GJe,Fde);_.jj=function Gde(){return this.a.a};var uab=sfb(SHe,'MinimalEObjectImpl/1ArrayDelegatingAdapterList/1',1039);feb(1067,1066,{},Ide);var yab=sfb('org.eclipse.emf.ecore.plugin','EcorePlugin',1067);var Aab=ufb(QKe,'Resource');feb(799,1524,RKe);_.Hl=function Mde(a){};_.Il=function Nde(a){};_.El=function Ode(){return !this.a&&(this.a=new Zde(this)),this.a};_.Fl=function Pde(a){var b,c,d,e,f;d=a.length;if(d>0){BFb(0,a.length);if(a.charCodeAt(0)==47){f=new cnb(4);e=1;for(b=1;b<d;++b){BFb(b,a.length);if(a.charCodeAt(b)==47){Rmb(f,e==b?'':(AFb(e,b,a.length),a.substr(e,b-e)));e=b+1}}Rmb(f,(BFb(e,a.length+1),a.substr(e)));return Jde(this,f)}else{BFb(d-1,a.length);if(a.charCodeAt(d-1)==63){c=uhb(a,Fhb(63),d-2);c>0&&(a=(AFb(0,c,a.length),a.substr(0,c)))}}}return Kde(this,a)};_.Gl=function Qde(){return this.c};_.Ib=function Rde(){var a;return nfb(this.Rm)+'@'+(a=tb(this)>>>0,a.toString(16))+" uri='"+this.d+"'"};_.b=false;var Eab=sfb(SKe,'ResourceImpl',799);feb(1525,799,RKe,Sde);var Bab=sfb(SKe,'BinaryResourceImpl',1525);feb(1190,708,QIe);_.bj=function Vde(a){return ZD(a,58)?Tde(this,RD(a,58)):ZD(a,599)?new dMd(RD(a,599).El()):dE(a)===dE(this.f)?RD(a,16).Kc():(jQd(),iQd.a)};_.Ob=function Wde(){return Ude(this)};_.a=false;var Ebb=sfb(ZJe,'EcoreUtil/ContentTreeIterator',1190);feb(1526,1190,QIe,Xde);_.bj=function Yde(a){return dE(a)===dE(this.f)?RD(a,15).Kc():new _je(RD(a,58))};var Cab=sfb(SKe,'ResourceImpl/5',1526);feb(658,2092,nKe,Zde);_.Hc=function $de(a){return this.i<=4?PHd(this,a):ZD(a,54)&&RD(a,54).Jh()==this.a};_.Mi=function _de(a,b){a==this.i-1&&(this.a.b||(this.a.b=true,null))};_.Oi=function aee(a,b){a==0?this.a.b||(this.a.b=true,null):$Gd(this,a,b)};_.Qi=function bee(a,b){};_.Ri=function cee(a,b,c){};_.Lj=function dee(){return 2};_.jj=function eee(){return this.a};_.Mj=function fee(){return true};_.Nj=function gee(a,b){var c;c=RD(a,54);b=c.fi(this.a,b);return b};_.Oj=function hee(a,b){var c;c=RD(a,54);return c.fi(null,b)};_.Pj=function iee(){return false};_.Si=function jee(){return true};_.aj=function kee(a){return $C(r7,rve,58,a,0,1)};_.Yi=function lee(){return false};var Dab=sfb(SKe,'ResourceImpl/ContentsEList',658);feb(970,2062,kwe,mee);_.fd=function nee(a){return this.a.Ki(a)};_.gc=function oee(){return this.a.gc()};var Fab=sfb(ZJe,'AbstractSequentialInternalEList/1',970);var hke,ike,jke,kke;feb(634,1,{},Yee);var pee,qee;var Lab=sfb(ZJe,'BasicExtendedMetaData',634);feb(1181,1,{},afe);_.Jl=function bfe(){return null};_.Kl=function cfe(){this.a==-2&&$ee(this,uee(this.d,this.b));return this.a};_.Ll=function dfe(){return null};_.Ml=function efe(){return yob(),yob(),vob};_.xe=function ffe(){this.c==fLe&&_ee(this,zee(this.d,this.b));return this.c};_.Nl=function gfe(){return 0};_.a=-2;_.c=fLe;var Hab=sfb(ZJe,'BasicExtendedMetaData/EClassExtendedMetaDataImpl',1181);feb(1182,1,{},mfe);_.Jl=function nfe(){this.a==(ree(),pee)&&hfe(this,tee(this.f,this.b));return this.a};_.Kl=function ofe(){return 0};_.Ll=function pfe(){this.c==(ree(),pee)&&ife(this,xee(this.f,this.b));return this.c};_.Ml=function qfe(){!this.d&&jfe(this,yee(this.f,this.b));return this.d};_.xe=function rfe(){this.e==fLe&&kfe(this,zee(this.f,this.b));return this.e};_.Nl=function sfe(){this.g==-2&&lfe(this,Cee(this.f,this.b));return this.g};_.e=fLe;_.g=-2;var Iab=sfb(ZJe,'BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl',1182);feb(1180,1,{},wfe);_.b=false;_.c=false;var Jab=sfb(ZJe,'BasicExtendedMetaData/EPackageExtendedMetaDataImpl',1180);feb(1183,1,{},Jfe);_.c=-2;_.e=fLe;_.f=fLe;var Kab=sfb(ZJe,'BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl',1183);feb(593,632,oKe,Kfe);_.Lj=function Lfe(){return this.c};_.ol=function Mfe(){return false};_.Wi=function Nfe(a,b){return b};_.c=0;var Yab=sfb(ZJe,'EDataTypeEList',593);var Tbb=ufb(ZJe,'FeatureMap');feb(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Uge);_.bd=function Vge(a,b){Ofe(this,a,RD(b,76))};_.Fc=function Wge(a){return Rfe(this,RD(a,76))};_.Hi=function _ge(a){Wfe(this,RD(a,76))};_.Nj=function khe(a,b){return mge(this,RD(a,76),b)};_.Oj=function lhe(a,b){return oge(this,RD(a,76),b)};_.Ti=function nhe(a,b){return uge(this,a,b)};_.Wi=function phe(a,b){return zge(this,a,RD(b,76))};_.hd=function rhe(a,b){return Cge(this,a,RD(b,76))};_.Uj=function vhe(a,b){return Ige(this,RD(a,76),b)};_.Vj=function whe(a,b){return Kge(this,RD(a,76),b)};_.Wj=function xhe(a,b,c){return Lge(this,RD(a,76),RD(b,76),c)};_.Zi=function zhe(a,b){return Tge(this,a,RD(b,76))};_.Ol=function Xge(a,b){return Qfe(this,a,b)};_.cd=function Yge(a,b){var c,d,e,f,g,h,i,j,k;j=new ZHd(b.gc());for(e=b.Kc();e.Ob();){d=RD(e.Pb(),76);f=d.Lk();if(qke(this.e,f)){(!f.Si()||!cge(this,f,d.md())&&!PHd(j,d))&&WGd(j,d)}else{k=pke(this.e.Dh(),f);c=RD(this.g,124);g=true;for(h=0;h<this.i;++h){i=c[h];if(k.am(i.Lk())){RD(eHd(this,h,d),76);g=false;break}}g&&WGd(j,d)}}return XGd(this,a,j)};_.Gc=function Zge(a){var b,c,d,e,f,g,h,i,j;i=new ZHd(a.gc());for(d=a.Kc();d.Ob();){c=RD(d.Pb(),76);e=c.Lk();if(qke(this.e,e)){(!e.Si()||!cge(this,e,c.md())&&!PHd(i,c))&&WGd(i,c)}else{j=pke(this.e.Dh(),e);b=RD(this.g,124);f=true;for(g=0;g<this.i;++g){h=b[g];if(j.am(h.Lk())){RD(eHd(this,g,c),76);f=false;break}}f&&WGd(i,c)}}return YGd(this,i)};_.Fi=function $ge(a){this.j=-1;return nLd(this,this.i,a)};_.Pl=function ahe(a,b,c){return Xfe(this,a,b,c)};_.Xk=function bhe(a,b){return _fe(this,a,b)};_.Ql=function che(a,b,c){return age(this,a,b,c)};_.Rl=function dhe(){return this};_.Sl=function ehe(a,b){return ige(this,a,b)};_.Tl=function fhe(a){return RD(QHd(this,a),76).Lk()};_.Ul=function ghe(a){return RD(QHd(this,a),76).md()};_.Vl=function hhe(){return this.b};_.Mj=function ihe(){return true};_.Tj=function jhe(){return true};_.Wl=function mhe(a){return !pge(this,a)};_.aj=function ohe(a){return $C(Ibb,PKe,343,a,0,1)};_.pl=function qhe(a){return Age(this,a)};_.Wb=function she(a){Dge(this,a)};_.Xl=function the(a,b){Fge(this,a,b)};_.Yl=function uhe(a){return Gge(this,a)};_.Zl=function yhe(a){Sge(this,a)};var Oab=sfb(ZJe,'BasicFeatureMap',78);feb(1960,1,Jve);_.Nb=function Fhe(a){Ztb(this,a)};_.Rb=function Ehe(b){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{Pfe(this.e,this.b,this.a,b);this.d=this.e.j;Dhe(this)}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.Ob=function Ghe(){return Bhe(this)};_.Sb=function Hhe(){return Che(this)};_.Pb=function Ihe(){return Dhe(this)};_.Tb=function Jhe(){return this.a};_.Ub=function Khe(){var a;if(Che(this)){Ahe(this);this.g=--this.a;if(this.ul()){a=Bge(this.e,this.b,this.c,this.a,this.j);this.j=a}this.i=0;return this.j}else{throw Adb(new Dvb)}};_.Vb=function Lhe(){return this.a-1};_.Qb=function Mhe(){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{xge(this.e,this.b,this.g);this.d=this.e.j;if(this.g<this.a){--this.a;--this.c}--this.g}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.ul=function Nhe(){return false};_.Wb=function Ohe(b){if(this.g==-1){throw Adb(new cgb)}Ahe(this);try{Ege(this.e,this.b,this.g,b);this.d=this.e.j}catch(a){a=zdb(a);if(ZD(a,77)){throw Adb(new Jrb)}else throw Adb(a)}};_.a=0;_.c=0;_.d=0;_.f=false;_.g=0;_.i=0;var Lbb=sfb(ZJe,'FeatureMapUtil/BasicFeatureEIterator',1960);feb(420,1960,Jve,Phe);_.$l=function Qhe(){var a,b,c;c=this.e.i;a=RD(this.e.g,124);while(this.c<c){b=a[this.c];if(this.k.am(b.Lk())){this.j=this.f?b:b.md();this.i=2;return true}++this.c}this.i=1;this.g=-1;return false};_._l=function Rhe(){var a,b;a=RD(this.e.g,124);while(--this.c>=0){b=a[this.c];if(this.k.am(b.Lk())){this.j=this.f?b:b.md();this.i=-2;return true}}this.i=-1;this.g=-1;return false};var Mab=sfb(ZJe,'BasicFeatureMap/FeatureEIterator',420);feb(676,420,Jve,She);_.ul=function The(){return true};var Nab=sfb(ZJe,'BasicFeatureMap/ResolvingFeatureEIterator',676);feb(968,495,uKe,Uhe);_.pj=function Vhe(){return this};var Rab=sfb(ZJe,'EContentsEList/1',968);feb(969,495,uKe,Whe);_.ul=function Xhe(){return false};var Sab=sfb(ZJe,'EContentsEList/2',969);feb(967,287,vKe,Yhe);_.wl=function Zhe(a){};_.Ob=function $he(){return false};_.Sb=function _he(){return false};var Tab=sfb(ZJe,'EContentsEList/FeatureIteratorImpl/1',967);feb(840,593,oKe,aie);_.Ni=function bie(){this.a=true};_.Qj=function cie(){return this.a};_.Gk=function die(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var Xab=sfb(ZJe,'EDataTypeEList/Unsettable',840);feb(1958,593,oKe,eie);_.Si=function fie(){return true};var $ab=sfb(ZJe,'EDataTypeUniqueEList',1958);feb(1959,840,oKe,gie);_.Si=function hie(){return true};var Zab=sfb(ZJe,'EDataTypeUniqueEList/Unsettable',1959);feb(147,83,oKe,iie);_.nl=function jie(){return true};_.Wi=function kie(a,b){return gZd(this,a,RD(b,58))};var _ab=sfb(ZJe,'EObjectContainmentEList/Resolving',147);feb(1184,555,oKe,lie);_.nl=function mie(){return true};_.Wi=function nie(a,b){return gZd(this,a,RD(b,58))};var abb=sfb(ZJe,'EObjectContainmentEList/Unsettable/Resolving',1184);feb(766,14,oKe,oie);_.Ni=function pie(){this.a=true};_.Qj=function qie(){return this.a};_.Gk=function rie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var fbb=sfb(ZJe,'EObjectContainmentWithInverseEList/Unsettable',766);feb(1222,766,oKe,sie);_.nl=function tie(){return true};_.Wi=function uie(a,b){return gZd(this,a,RD(b,58))};var ebb=sfb(ZJe,'EObjectContainmentWithInverseEList/Unsettable/Resolving',1222);feb(757,504,oKe,vie);_.Ni=function wie(){this.a=true};_.Qj=function xie(){return this.a};_.Gk=function yie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var hbb=sfb(ZJe,'EObjectEList/Unsettable',757);feb(338,504,oKe,zie);_.nl=function Aie(){return true};_.Wi=function Bie(a,b){return gZd(this,a,RD(b,58))};var kbb=sfb(ZJe,'EObjectResolvingEList',338);feb(1844,757,oKe,Cie);_.nl=function Die(){return true};_.Wi=function Eie(a,b){return gZd(this,a,RD(b,58))};var jbb=sfb(ZJe,'EObjectResolvingEList/Unsettable',1844);feb(1527,1,{},Hie);var Fie;var lbb=sfb(ZJe,'EObjectValidator',1527);feb(559,504,oKe,Iie);_.il=function Jie(){return this.d};_.jl=function Kie(){return this.b};_.Mj=function Lie(){return true};_.ml=function Mie(){return true};_.b=0;var pbb=sfb(ZJe,'EObjectWithInverseEList',559);feb(1225,559,oKe,Nie);_.ll=function Oie(){return true};var mbb=sfb(ZJe,'EObjectWithInverseEList/ManyInverse',1225);feb(635,559,oKe,Pie);_.Ni=function Qie(){this.a=true};_.Qj=function Rie(){return this.a};_.Gk=function Sie(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var obb=sfb(ZJe,'EObjectWithInverseEList/Unsettable',635);feb(1224,635,oKe,Tie);_.ll=function Uie(){return true};var nbb=sfb(ZJe,'EObjectWithInverseEList/Unsettable/ManyInverse',1224);feb(767,559,oKe,Vie);_.nl=function Wie(){return true};_.Wi=function Xie(a,b){return gZd(this,a,RD(b,58))};var tbb=sfb(ZJe,'EObjectWithInverseResolvingEList',767);feb(32,767,oKe,Yie);_.ll=function Zie(){return true};var qbb=sfb(ZJe,'EObjectWithInverseResolvingEList/ManyInverse',32);feb(768,635,oKe,$ie);_.nl=function _ie(){return true};_.Wi=function aje(a,b){return gZd(this,a,RD(b,58))};var sbb=sfb(ZJe,'EObjectWithInverseResolvingEList/Unsettable',768);feb(1223,768,oKe,bje);_.ll=function cje(){return true};var rbb=sfb(ZJe,'EObjectWithInverseResolvingEList/Unsettable/ManyInverse',1223);feb(1185,632,oKe);_.Li=function dje(){return (this.b&1792)==0};_.Ni=function eje(){this.b|=1};_.kl=function fje(){return (this.b&4)!=0};_.Mj=function gje(){return (this.b&40)!=0};_.ll=function hje(){return (this.b&16)!=0};_.ml=function ije(){return (this.b&8)!=0};_.nl=function jje(){return (this.b&cKe)!=0};_.al=function kje(){return (this.b&32)!=0};_.ol=function lje(){return (this.b&gwe)!=0};_.fk=function mje(a){return !this.d?this.Lk().Hk().fk(a):QRd(this.d,a)};_.Qj=function nje(){return (this.b&2)!=0?(this.b&1)!=0:this.i!=0};_.Si=function oje(){return (this.b&128)!=0};_.Gk=function qje(){var a;sLd(this);if((this.b&2)!=0){if(Mvd(this.e)){a=(this.b&1)!=0;this.b&=-2;eZd(this,new Q3d(this.e,2,BYd(this.e.Dh(),this.Lk()),a,false))}else{this.b&=-2}}};_.Yi=function rje(){return (this.b&1536)==0};_.b=0;var vbb=sfb(ZJe,'EcoreEList/Generic',1185);feb(1186,1185,oKe,sje);_.Lk=function tje(){return this.a};var ubb=sfb(ZJe,'EcoreEList/Dynamic',1186);feb(765,66,PIe,uje);_.aj=function vje(a){return IMd(this.a.a,a)};var zbb=sfb(ZJe,'EcoreEMap/1',765);feb(764,83,oKe,wje);_.Mi=function xje(a,b){UNd(this.b,RD(b,136))};_.Oi=function yje(a,b){TNd(this.b)};_.Pi=function zje(a,b,c){var d;++(d=this.b,RD(b,136),d).e};_.Qi=function Aje(a,b){VNd(this.b,RD(b,136))};_.Ri=function Bje(a,b,c){VNd(this.b,RD(c,136));dE(c)===dE(b)&&RD(c,136).Ci(aOd(RD(b,136).ld()));UNd(this.b,RD(b,136))};var Abb=sfb(ZJe,'EcoreEMap/DelegateEObjectContainmentEList',764);feb(1220,141,_Je,Cje);var Cbb=sfb(ZJe,'EcoreEMap/Unsettable',1220);feb(1221,764,oKe,Dje);_.Ni=function Eje(){this.a=true};_.Qj=function Fje(){return this.a};_.Gk=function Gje(){var a;sLd(this);if(Mvd(this.e)){a=this.a;this.a=false;qvd(this.e,new Q3d(this.e,2,this.c,a,false))}else{this.a=false}};_.a=false;var Bbb=sfb(ZJe,'EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList',1221);feb(1189,215,Hxe,Zje);_.a=false;_.b=false;var Fbb=sfb(ZJe,'EcoreUtil/Copier',1189);feb(759,1,Ave,_je);_.Nb=function ake(a){Ztb(this,a)};_.Ob=function bke(){return $je(this)};_.Pb=function cke(){var a;$je(this);a=this.b;this.b=null;return a};_.Qb=function dke(){this.a.Qb()};var Gbb=sfb(ZJe,'EcoreUtil/ProperContentIterator',759);feb(1528,1527,{},gke);var eke;var Hbb=sfb(ZJe,'EcoreValidator',1528);var mke;var Sbb=ufb(ZJe,'FeatureMapUtil/Validator');feb(1295,1,{2041:1},rke);_.am=function ske(a){return true};var Kbb=sfb(ZJe,'FeatureMapUtil/1',1295);feb(773,1,{2041:1},wke);_.am=function xke(a){var b;if(this.c==a)return true;b=TD(Wjb(this.a,a));if(b==null){if(vke(this,a)){yke(this.a,a,(Geb(),Feb));return true}else{yke(this.a,a,(Geb(),Eeb));return false}}else{return b==(Geb(),Feb)}};_.e=false;var tke;var Nbb=sfb(ZJe,'FeatureMapUtil/BasicValidator',773);feb(774,45,Hxe,zke);var Mbb=sfb(ZJe,'FeatureMapUtil/BasicValidator/Cache',774);feb(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},Eke);_.bd=function Fke(a,b){Pfe(this.c,this.b,a,b)};_.Fc=function Gke(a){return Qfe(this.c,this.b,a)};_.cd=function Hke(a,b){return Sfe(this.c,this.b,a,b)};_.Gc=function Ike(a){return Ake(this,a)};_.Gi=function Jke(a,b){Ufe(this.c,this.b,a,b)};_.Wk=function Kke(a,b){return Xfe(this.c,this.b,a,b)};_.$i=function Lke(a){return hge(this.c,this.b,a,false)};_.Ii=function Mke(){return Yfe(this.c,this.b)};_.Ji=function Nke(){return Zfe(this.c,this.b)};_.Ki=function Oke(a){return $fe(this.c,this.b,a)};_.Xk=function Pke(a,b){return Bke(this,a,b)};_.$b=function Qke(){Cke(this)};_.Hc=function Rke(a){return cge(this.c,this.b,a)};_.Ic=function Ske(a){return ege(this.c,this.b,a)};_.Xb=function Tke(a){return hge(this.c,this.b,a,true)};_.Fk=function Uke(a){return this};_.dd=function Vke(a){return jge(this.c,this.b,a)};_.dc=function Wke(){return Dke(this)};_.Qj=function Xke(){return !pge(this.c,this.b)};_.Kc=function Yke(){return qge(this.c,this.b)};_.ed=function Zke(){return sge(this.c,this.b)};_.fd=function $ke(a){return tge(this.c,this.b,a)};_.Ti=function _ke(a,b){return vge(this.c,this.b,a,b)};_.Ui=function ale(a,b){wge(this.c,this.b,a,b)};_.gd=function ble(a){return xge(this.c,this.b,a)};_.Mc=function cle(a){return yge(this.c,this.b,a)};_.hd=function dle(a,b){return Ege(this.c,this.b,a,b)};_.Wb=function ele(a){bge(this.c,this.b);Ake(this,RD(a,15))};_.gc=function fle(){return Nge(this.c,this.b)};_.Pc=function gle(){return Oge(this.c,this.b)};_.Qc=function hle(a){return Qge(this.c,this.b,a)};_.Ib=function ile(){var a,b;b=new Qhb;b.a+='[';for(a=Yfe(this.c,this.b);Bhe(a);){Nhb(b,Ghb(Dhe(a)));Bhe(a)&&(b.a+=pve,b)}b.a+=']';return b.a};_.Gk=function jle(){bge(this.c,this.b)};var Obb=sfb(ZJe,'FeatureMapUtil/FeatureEList',509);feb(644,38,GJe,lle);_.hj=function mle(a){return kle(this,a)};_.mj=function nle(a){var b,c,d,e,f,g,h;switch(this.d){case 1:case 2:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.g=a.ij();a.gj()==1&&(this.d=1);return true}break}case 3:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=5;b=new ZHd(2);WGd(b,this.g);WGd(b,a.ij());this.g=b;return true}break}}break}case 5:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){c=RD(this.g,16);c.Fc(a.ij());return true}break}}break}case 4:{e=a.gj();switch(e){case 3:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=1;this.g=a.ij();return true}break}case 4:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){this.d=6;h=new ZHd(2);WGd(h,this.n);WGd(h,a.kj());this.n=h;g=cD(WC(kE,1),Pwe,28,15,[this.o,a.lj()]);this.g=g;return true}break}}break}case 6:{e=a.gj();switch(e){case 4:{f=a.jj();if(dE(f)===dE(this.c)&&kle(this,null)==a.hj(null)){c=RD(this.n,16);c.Fc(a.kj());g=RD(this.g,53);d=$C(kE,Pwe,28,g.length+1,15,1);hib(g,0,d,0,g.length);d[g.length]=a.lj();this.g=d;return true}break}}break}}return false};var Pbb=sfb(ZJe,'FeatureMapUtil/FeatureENotificationImpl',644);feb(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},ole);_.Ol=function ple(a,b){return Qfe(this.c,a,b)};_.Pl=function qle(a,b,c){return Xfe(this.c,a,b,c)};_.Ql=function rle(a,b,c){return age(this.c,a,b,c)};_.Rl=function sle(){return this};_.Sl=function tle(a,b){return ige(this.c,a,b)};_.Tl=function ule(a){return RD(hge(this.c,this.b,a,false),76).Lk()};_.Ul=function vle(a){return RD(hge(this.c,this.b,a,false),76).md()};_.Vl=function wle(){return this.a};_.Wl=function xle(a){return !pge(this.c,a)};_.Xl=function yle(a,b){Fge(this.c,a,b)};_.Yl=function zle(a){return Gge(this.c,a)};_.Zl=function Ale(a){Sge(this.c,a)};var Qbb=sfb(ZJe,'FeatureMapUtil/FeatureFeatureMap',564);feb(1294,1,$Je,Ble);_.Fk=function Cle(a){return hge(this.b,this.a,-1,a)};_.Qj=function Dle(){return !pge(this.b,this.a)};_.Wb=function Ele(a){Fge(this.b,this.a,a)};_.Gk=function Fle(){bge(this.b,this.a)};var Rbb=sfb(ZJe,'FeatureMapUtil/FeatureValue',1294);var Gle,Hle,Ile,Jle,Kle;var Vbb=ufb(hLe,'AnyType');feb(680,63,swe,Mle);var Wbb=sfb(hLe,'InvalidDatatypeValueException',680);var Xbb=ufb(hLe,iLe);var Ybb=ufb(hLe,jLe);var Zbb=ufb(hLe,kLe);var Nle;var Ple;var Rle,Sle,Tle,Ule,Vle,Wle,Xle,Yle,Zle,$le,_le,ame,bme,cme,dme,eme,fme,gme,hme,ime,jme,kme,lme,mme;feb(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},ome);_.Lh=function pme(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new Uge(this,0)),this.c;return !this.c&&(this.c=new Uge(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160);return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Vl();case 2:if(c)return !this.b&&(this.b=new Uge(this,2)),this.b;return !this.b&&(this.b=new Uge(this,2)),this.b.b;}return zvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Uh=function qme(a,b,c){var d;switch(b){case 0:return !this.c&&(this.c=new Uge(this,0)),_fe(this.c,a,c);case 1:return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),71)).Xk(a,c);case 2:return !this.b&&(this.b=new Uge(this,2)),_fe(this.b,a,c);}return d=RD(vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),b),69),d.wk().Ak(this,Yvd(this),b-AYd(this.ii()),a,c)};_.Wh=function rme(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).dc();case 2:return !!this.b&&this.b.i!=0;}return Avd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function sme(a,b){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));Dge(this.c,b);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Wb(b);return;case 2:!this.b&&(this.b=new Uge(this,2));Dge(this.b,b);return;}Bvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function tme(){return nme(),Rle};_.ki=function ume(a){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));sLd(this.c);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).$b();return;case 2:!this.b&&(this.b=new Uge(this,2));sLd(this.b);return;}Cvd(this,a-AYd(this.ii()),vYd((this.j&2)==0?this.ii():(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function vme(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (mixed: ';Mhb(a,this.c);a.a+=', anyAttribute: ';Mhb(a,this.b);a.a+=')';return a.a};var $bb=sfb(lLe,'AnyTypeImpl',844);feb(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},yme);_.Lh=function zme(a,b,c){switch(a){case 0:return this.a;case 1:return this.b;}return zvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Wh=function Ame(a){switch(a){case 0:return this.a!=null;case 1:return this.b!=null;}return Avd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Bme(a,b){switch(a){case 0:wme(this,WD(b));return;case 1:xme(this,WD(b));return;}Bvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Cme(){return nme(),cme};_.ki=function Dme(a){switch(a){case 0:this.a=null;return;case 1:this.b=null;return;}Cvd(this,a-AYd((nme(),cme)),vYd((this.j&2)==0?cme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function Eme(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (data: ';Nhb(a,this.a);a.a+=', target: ';Nhb(a,this.b);a.a+=')';return a.a};_.a=null;_.b=null;var _bb=sfb(lLe,'ProcessingInstructionImpl',681);feb(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},Hme);_.Lh=function Ime(a,b,c){switch(a){case 0:if(c)return !this.c&&(this.c=new Uge(this,0)),this.c;return !this.c&&(this.c=new Uge(this,0)),this.c.b;case 1:if(c)return !this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160);return (!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Vl();case 2:if(c)return !this.b&&(this.b=new Uge(this,2)),this.b;return !this.b&&(this.b=new Uge(this,2)),this.b.b;case 3:return !this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true));case 4:return Ije(this.a,(!this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))));case 5:return this.a;}return zvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Wh=function Jme(a){switch(a){case 0:return !!this.c&&this.c.i!=0;case 1:return !(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).dc();case 2:return !!this.b&&this.b.i!=0;case 3:return !this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))!=null;case 4:return Ije(this.a,(!this.c&&(this.c=new Uge(this,0)),WD(ige(this.c,(nme(),fme),true))))!=null;case 5:return !!this.a;}return Avd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Kme(a,b){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));Dge(this.c,b);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(RD(rge(this.c,(nme(),Sle)),160),220)).Wb(b);return;case 2:!this.b&&(this.b=new Uge(this,2));Dge(this.b,b);return;case 3:Gme(this,WD(b));return;case 4:Gme(this,Hje(this.a,b));return;case 5:Fme(this,RD(b,156));return;}Bvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Lme(){return nme(),eme};_.ki=function Mme(a){switch(a){case 0:!this.c&&(this.c=new Uge(this,0));sLd(this.c);return;case 1:(!this.c&&(this.c=new Uge(this,0)),RD(rge(this.c,(nme(),Sle)),160)).$b();return;case 2:!this.b&&(this.b=new Uge(this,2));sLd(this.b);return;case 3:!this.c&&(this.c=new Uge(this,0));Fge(this.c,(nme(),fme),null);return;case 4:Gme(this,Hje(this.a,null));return;case 5:this.a=null;return;}Cvd(this,a-AYd((nme(),eme)),vYd((this.j&2)==0?eme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};var acb=sfb(lLe,'SimpleAnyTypeImpl',682);feb(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},Nme);_.Lh=function Ome(a,b,c){switch(a){case 0:if(c)return !this.a&&(this.a=new Uge(this,0)),this.a;return !this.a&&(this.a=new Uge(this,0)),this.a.b;case 1:return c?(!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),this.b):(!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),dOd(this.b));case 2:return c?(!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),this.c):(!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),dOd(this.c));case 3:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),ime));case 4:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),jme));case 5:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),lme));case 6:return !this.a&&(this.a=new Uge(this,0)),rge(this.a,(nme(),mme));}return zvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b,c)};_.Uh=function Pme(a,b,c){var d;switch(b){case 0:return !this.a&&(this.a=new Uge(this,0)),_fe(this.a,a,c);case 1:return !this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1)),BVd(this.b,a,c);case 2:return !this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2)),BVd(this.c,a,c);case 5:return !this.a&&(this.a=new Uge(this,0)),Bke(rge(this.a,(nme(),lme)),a,c);}return d=RD(vYd((this.j&2)==0?(nme(),hme):(!this.k&&(this.k=new fUd),this.k).Nk(),b),69),d.wk().Ak(this,Yvd(this),b-AYd((nme(),hme)),a,c)};_.Wh=function Qme(a){switch(a){case 0:return !!this.a&&this.a.i!=0;case 1:return !!this.b&&this.b.f!=0;case 2:return !!this.c&&this.c.f!=0;case 3:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),ime)));case 4:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),jme)));case 5:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),lme)));case 6:return !this.a&&(this.a=new Uge(this,0)),!Dke(rge(this.a,(nme(),mme)));}return Avd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.bi=function Rme(a,b){switch(a){case 0:!this.a&&(this.a=new Uge(this,0));Dge(this.a,b);return;case 1:!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1));CVd(this.b,b);return;case 2:!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2));CVd(this.c,b);return;case 3:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),ime)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,ime),RD(b,16));return;case 4:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),jme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,jme),RD(b,16));return;case 5:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),lme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,lme),RD(b,16));return;case 6:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),mme)));!this.a&&(this.a=new Uge(this,0));Ake(rge(this.a,mme),RD(b,16));return;}Bvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a),b)};_.ii=function Sme(){return nme(),hme};_.ki=function Tme(a){switch(a){case 0:!this.a&&(this.a=new Uge(this,0));sLd(this.a);return;case 1:!this.b&&(this.b=new DVd((JTd(),FTd),C8,this,1));this.b.c.$b();return;case 2:!this.c&&(this.c=new DVd((JTd(),FTd),C8,this,2));this.c.c.$b();return;case 3:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),ime)));return;case 4:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),jme)));return;case 5:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),lme)));return;case 6:!this.a&&(this.a=new Uge(this,0));Cke(rge(this.a,(nme(),mme)));return;}Cvd(this,a-AYd((nme(),hme)),vYd((this.j&2)==0?hme:(!this.k&&(this.k=new fUd),this.k).Nk(),a))};_.Ib=function Ume(){var a;if((this.j&4)!=0)return awd(this);a=new Shb(awd(this));a.a+=' (mixed: ';Mhb(a,this.a);a.a+=')';return a.a};var bcb=sfb(lLe,'XMLTypeDocumentRootImpl',683);feb(2028,720,{110:1,94:1,93:1,479:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},rne);_.ri=function sne(a,b){switch(a.hk()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return b==null?null:jeb(b);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return WD(b);case 6:return _me(RD(b,195));case 12:case 47:case 49:case 11:return tAd(this,a,b);case 13:return b==null?null:yib(RD(b,247));case 15:case 14:return b==null?null:ane(Kfb(UD(b)));case 17:return bne((nme(),b));case 18:return bne(b);case 21:case 20:return b==null?null:cne(RD(b,161).a);case 27:return dne(RD(b,195));case 30:return ene((nme(),RD(b,15)));case 31:return ene(RD(b,15));case 40:return hne((nme(),b));case 42:return fne((nme(),b));case 43:return fne(b);case 59:case 48:return gne((nme(),b));default:throw Adb(new agb(VHe+a.xe()+WHe));}};_.si=function tne(a){var b,c,d,e,f;switch(a.G==-1&&(a.G=(c=BXd(a),c?fZd(c.vi(),a):-1)),a.G){case 0:return b=new ome,b;case 1:return d=new yme,d;case 2:return e=new Hme,e;case 3:return f=new Nme,f;default:throw Adb(new agb(ZHe+a.zb+WHe));}};_.ti=function une(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;switch(a.hk()){case 5:case 52:case 4:return b;case 6:return ine(b);case 8:case 7:return b==null?null:$me(b);case 9:return b==null?null:$eb(Oeb((d=nue(b,true),d.length>0&&(BFb(0,d.length),d.charCodeAt(0)==43)?(BFb(1,d.length+1),d.substr(1)):d),-128,127)<<24>>24);case 10:return b==null?null:$eb(Oeb((e=nue(b,true),e.length>0&&(BFb(0,e.length),e.charCodeAt(0)==43)?(BFb(1,e.length+1),e.substr(1)):e),-128,127)<<24>>24);case 11:return WD(uAd(this,(nme(),Vle),b));case 12:return WD(uAd(this,(nme(),Wle),b));case 13:return b==null?null:new Bib(nue(b,true));case 15:case 14:return jne(b);case 16:return WD(uAd(this,(nme(),Xle),b));case 17:return kne((nme(),b));case 18:return kne(b);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return nue(b,true);case 21:case 20:return lne(b);case 22:return WD(uAd(this,(nme(),Yle),b));case 23:return WD(uAd(this,(nme(),Zle),b));case 24:return WD(uAd(this,(nme(),$le),b));case 25:return WD(uAd(this,(nme(),_le),b));case 26:return WD(uAd(this,(nme(),ame),b));case 27:return mne(b);case 30:return nne((nme(),b));case 31:return nne(b);case 32:return b==null?null:sgb(Oeb((k=nue(b,true),k.length>0&&(BFb(0,k.length),k.charCodeAt(0)==43)?(BFb(1,k.length+1),k.substr(1)):k),qwe,lve));case 33:return b==null?null:new ejb((l=nue(b,true),l.length>0&&(BFb(0,l.length),l.charCodeAt(0)==43)?(BFb(1,l.length+1),l.substr(1)):l));case 34:return b==null?null:sgb(Oeb((m=nue(b,true),m.length>0&&(BFb(0,m.length),m.charCodeAt(0)==43)?(BFb(1,m.length+1),m.substr(1)):m),qwe,lve));case 36:return b==null?null:Hgb(Peb((n=nue(b,true),n.length>0&&(BFb(0,n.length),n.charCodeAt(0)==43)?(BFb(1,n.length+1),n.substr(1)):n)));case 37:return b==null?null:Hgb(Peb((o=nue(b,true),o.length>0&&(BFb(0,o.length),o.charCodeAt(0)==43)?(BFb(1,o.length+1),o.substr(1)):o)));case 40:return qne((nme(),b));case 42:return one((nme(),b));case 43:return one(b);case 44:return b==null?null:new ejb((p=nue(b,true),p.length>0&&(BFb(0,p.length),p.charCodeAt(0)==43)?(BFb(1,p.length+1),p.substr(1)):p));case 45:return b==null?null:new ejb((q=nue(b,true),q.length>0&&(BFb(0,q.length),q.charCodeAt(0)==43)?(BFb(1,q.length+1),q.substr(1)):q));case 46:return nue(b,false);case 47:return WD(uAd(this,(nme(),bme),b));case 59:case 48:return pne((nme(),b));case 49:return WD(uAd(this,(nme(),dme),b));case 50:return b==null?null:bhb(Oeb((r=nue(b,true),r.length>0&&(BFb(0,r.length),r.charCodeAt(0)==43)?(BFb(1,r.length+1),r.substr(1)):r),BKe,32767)<<16>>16);case 51:return b==null?null:bhb(Oeb((f=nue(b,true),f.length>0&&(BFb(0,f.length),f.charCodeAt(0)==43)?(BFb(1,f.length+1),f.substr(1)):f),BKe,32767)<<16>>16);case 53:return WD(uAd(this,(nme(),gme),b));case 55:return b==null?null:bhb(Oeb((g=nue(b,true),g.length>0&&(BFb(0,g.length),g.charCodeAt(0)==43)?(BFb(1,g.length+1),g.substr(1)):g),BKe,32767)<<16>>16);case 56:return b==null?null:bhb(Oeb((h=nue(b,true),h.length>0&&(BFb(0,h.length),h.charCodeAt(0)==43)?(BFb(1,h.length+1),h.substr(1)):h),BKe,32767)<<16>>16);case 57:return b==null?null:Hgb(Peb((i=nue(b,true),i.length>0&&(BFb(0,i.length),i.charCodeAt(0)==43)?(BFb(1,i.length+1),i.substr(1)):i)));case 58:return b==null?null:Hgb(Peb((j=nue(b,true),j.length>0&&(BFb(0,j.length),j.charCodeAt(0)==43)?(BFb(1,j.length+1),j.substr(1)):j)));case 60:return b==null?null:sgb(Oeb((c=nue(b,true),c.length>0&&(BFb(0,c.length),c.charCodeAt(0)==43)?(BFb(1,c.length+1),c.substr(1)):c),qwe,lve));case 61:return b==null?null:sgb(Oeb(nue(b,true),qwe,lve));default:throw Adb(new agb(VHe+a.xe()+WHe));}};var Vme,Wme,Xme,Yme;var ccb=sfb(lLe,'XMLTypeFactoryImpl',2028);feb(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},Bne);_.N=false;_.O=false;var wne=false;var bdb=sfb(lLe,'XMLTypePackageImpl',594);feb(1961,1,{851:1},Ene);_.Kk=function Fne(){return rue(),que};var ncb=sfb(lLe,'XMLTypePackageImpl/1',1961);feb(1970,1,OKe,Gne);_.fk=function Hne(a){return bE(a)};_.gk=function Ine(a){return $C(qJ,Nve,2,a,6,1)};var dcb=sfb(lLe,'XMLTypePackageImpl/10',1970);feb(1971,1,OKe,Jne);_.fk=function Kne(a){return bE(a)};_.gk=function Lne(a){return $C(qJ,Nve,2,a,6,1)};var ecb=sfb(lLe,'XMLTypePackageImpl/11',1971);feb(1972,1,OKe,Mne);_.fk=function Nne(a){return bE(a)};_.gk=function One(a){return $C(qJ,Nve,2,a,6,1)};var fcb=sfb(lLe,'XMLTypePackageImpl/12',1972);feb(1973,1,OKe,Pne);_.fk=function Qne(a){return _D(a)};_.gk=function Rne(a){return $C(VI,Nve,345,a,7,1)};var gcb=sfb(lLe,'XMLTypePackageImpl/13',1973);feb(1974,1,OKe,Sne);_.fk=function Tne(a){return bE(a)};_.gk=function Une(a){return $C(qJ,Nve,2,a,6,1)};var hcb=sfb(lLe,'XMLTypePackageImpl/14',1974);feb(1975,1,OKe,Vne);_.fk=function Wne(a){return ZD(a,15)};_.gk=function Xne(a){return $C(QK,Ize,15,a,0,1)};var icb=sfb(lLe,'XMLTypePackageImpl/15',1975);feb(1976,1,OKe,Yne);_.fk=function Zne(a){return ZD(a,15)};_.gk=function $ne(a){return $C(QK,Ize,15,a,0,1)};var jcb=sfb(lLe,'XMLTypePackageImpl/16',1976);feb(1977,1,OKe,_ne);_.fk=function aoe(a){return bE(a)};_.gk=function boe(a){return $C(qJ,Nve,2,a,6,1)};var kcb=sfb(lLe,'XMLTypePackageImpl/17',1977);feb(1978,1,OKe,coe);_.fk=function doe(a){return ZD(a,161)};_.gk=function eoe(a){return $C(ZI,Nve,161,a,0,1)};var lcb=sfb(lLe,'XMLTypePackageImpl/18',1978);feb(1979,1,OKe,foe);_.fk=function goe(a){return bE(a)};_.gk=function hoe(a){return $C(qJ,Nve,2,a,6,1)};var mcb=sfb(lLe,'XMLTypePackageImpl/19',1979);feb(1962,1,OKe,ioe);_.fk=function joe(a){return ZD(a,857)};_.gk=function koe(a){return $C(Vbb,rve,857,a,0,1)};var ycb=sfb(lLe,'XMLTypePackageImpl/2',1962);feb(1980,1,OKe,loe);_.fk=function moe(a){return bE(a)};_.gk=function noe(a){return $C(qJ,Nve,2,a,6,1)};var ocb=sfb(lLe,'XMLTypePackageImpl/20',1980);feb(1981,1,OKe,ooe);_.fk=function poe(a){return bE(a)};_.gk=function qoe(a){return $C(qJ,Nve,2,a,6,1)};var pcb=sfb(lLe,'XMLTypePackageImpl/21',1981);feb(1982,1,OKe,roe);_.fk=function soe(a){return bE(a)};_.gk=function toe(a){return $C(qJ,Nve,2,a,6,1)};var qcb=sfb(lLe,'XMLTypePackageImpl/22',1982);feb(1983,1,OKe,uoe);_.fk=function voe(a){return bE(a)};_.gk=function woe(a){return $C(qJ,Nve,2,a,6,1)};var rcb=sfb(lLe,'XMLTypePackageImpl/23',1983);feb(1984,1,OKe,xoe);_.fk=function yoe(a){return ZD(a,195)};_.gk=function zoe(a){return $C(gE,Nve,195,a,0,2)};var scb=sfb(lLe,'XMLTypePackageImpl/24',1984);feb(1985,1,OKe,Aoe);_.fk=function Boe(a){return bE(a)};_.gk=function Coe(a){return $C(qJ,Nve,2,a,6,1)};var tcb=sfb(lLe,'XMLTypePackageImpl/25',1985);feb(1986,1,OKe,Doe);_.fk=function Eoe(a){return bE(a)};_.gk=function Foe(a){return $C(qJ,Nve,2,a,6,1)};var ucb=sfb(lLe,'XMLTypePackageImpl/26',1986);feb(1987,1,OKe,Goe);_.fk=function Hoe(a){return ZD(a,15)};_.gk=function Ioe(a){return $C(QK,Ize,15,a,0,1)};var vcb=sfb(lLe,'XMLTypePackageImpl/27',1987);feb(1988,1,OKe,Joe);_.fk=function Koe(a){return ZD(a,15)};_.gk=function Loe(a){return $C(QK,Ize,15,a,0,1)};var wcb=sfb(lLe,'XMLTypePackageImpl/28',1988);feb(1989,1,OKe,Moe);_.fk=function Noe(a){return bE(a)};_.gk=function Ooe(a){return $C(qJ,Nve,2,a,6,1)};var xcb=sfb(lLe,'XMLTypePackageImpl/29',1989);feb(1963,1,OKe,Poe);_.fk=function Qoe(a){return ZD(a,681)};_.gk=function Roe(a){return $C(Xbb,rve,2119,a,0,1)};var Jcb=sfb(lLe,'XMLTypePackageImpl/3',1963);feb(1990,1,OKe,Soe);_.fk=function Toe(a){return ZD(a,17)};_.gk=function Uoe(a){return $C(bJ,Nve,17,a,0,1)};var zcb=sfb(lLe,'XMLTypePackageImpl/30',1990);feb(1991,1,OKe,Voe);_.fk=function Woe(a){return bE(a)};_.gk=function Xoe(a){return $C(qJ,Nve,2,a,6,1)};var Acb=sfb(lLe,'XMLTypePackageImpl/31',1991);feb(1992,1,OKe,Yoe);_.fk=function Zoe(a){return ZD(a,168)};_.gk=function $oe(a){return $C(eJ,Nve,168,a,0,1)};var Bcb=sfb(lLe,'XMLTypePackageImpl/32',1992);feb(1993,1,OKe,_oe);_.fk=function ape(a){return bE(a)};_.gk=function bpe(a){return $C(qJ,Nve,2,a,6,1)};var Ccb=sfb(lLe,'XMLTypePackageImpl/33',1993);feb(1994,1,OKe,cpe);_.fk=function dpe(a){return bE(a)};_.gk=function epe(a){return $C(qJ,Nve,2,a,6,1)};var Dcb=sfb(lLe,'XMLTypePackageImpl/34',1994);feb(1995,1,OKe,fpe);_.fk=function gpe(a){return bE(a)};_.gk=function hpe(a){return $C(qJ,Nve,2,a,6,1)};var Ecb=sfb(lLe,'XMLTypePackageImpl/35',1995);feb(1996,1,OKe,ipe);_.fk=function jpe(a){return bE(a)};_.gk=function kpe(a){return $C(qJ,Nve,2,a,6,1)};var Fcb=sfb(lLe,'XMLTypePackageImpl/36',1996);feb(1997,1,OKe,lpe);_.fk=function mpe(a){return ZD(a,15)};_.gk=function npe(a){return $C(QK,Ize,15,a,0,1)};var Gcb=sfb(lLe,'XMLTypePackageImpl/37',1997);feb(1998,1,OKe,ope);_.fk=function ppe(a){return ZD(a,15)};_.gk=function qpe(a){return $C(QK,Ize,15,a,0,1)};var Hcb=sfb(lLe,'XMLTypePackageImpl/38',1998);feb(1999,1,OKe,rpe);_.fk=function spe(a){return bE(a)};_.gk=function tpe(a){return $C(qJ,Nve,2,a,6,1)};var Icb=sfb(lLe,'XMLTypePackageImpl/39',1999);feb(1964,1,OKe,upe);_.fk=function vpe(a){return ZD(a,682)};_.gk=function wpe(a){return $C(Ybb,rve,2120,a,0,1)};var Ucb=sfb(lLe,'XMLTypePackageImpl/4',1964);feb(2000,1,OKe,xpe);_.fk=function ype(a){return bE(a)};_.gk=function zpe(a){return $C(qJ,Nve,2,a,6,1)};var Kcb=sfb(lLe,'XMLTypePackageImpl/40',2000);feb(2001,1,OKe,Ape);_.fk=function Bpe(a){return bE(a)};_.gk=function Cpe(a){return $C(qJ,Nve,2,a,6,1)};var Lcb=sfb(lLe,'XMLTypePackageImpl/41',2001);feb(2002,1,OKe,Dpe);_.fk=function Epe(a){return bE(a)};_.gk=function Fpe(a){return $C(qJ,Nve,2,a,6,1)};var Mcb=sfb(lLe,'XMLTypePackageImpl/42',2002);feb(2003,1,OKe,Gpe);_.fk=function Hpe(a){return bE(a)};_.gk=function Ipe(a){return $C(qJ,Nve,2,a,6,1)};var Ncb=sfb(lLe,'XMLTypePackageImpl/43',2003);feb(2004,1,OKe,Jpe);_.fk=function Kpe(a){return bE(a)};_.gk=function Lpe(a){return $C(qJ,Nve,2,a,6,1)};var Ocb=sfb(lLe,'XMLTypePackageImpl/44',2004);feb(2005,1,OKe,Mpe);_.fk=function Npe(a){return ZD(a,191)};_.gk=function Ope(a){return $C(lJ,Nve,191,a,0,1)};var Pcb=sfb(lLe,'XMLTypePackageImpl/45',2005);feb(2006,1,OKe,Ppe);_.fk=function Qpe(a){return bE(a)};_.gk=function Rpe(a){return $C(qJ,Nve,2,a,6,1)};var Qcb=sfb(lLe,'XMLTypePackageImpl/46',2006);feb(2007,1,OKe,Spe);_.fk=function Tpe(a){return bE(a)};_.gk=function Upe(a){return $C(qJ,Nve,2,a,6,1)};var Rcb=sfb(lLe,'XMLTypePackageImpl/47',2007);feb(2008,1,OKe,Vpe);_.fk=function Wpe(a){return bE(a)};_.gk=function Xpe(a){return $C(qJ,Nve,2,a,6,1)};var Scb=sfb(lLe,'XMLTypePackageImpl/48',2008);feb(2009,1,OKe,Ype);_.fk=function Zpe(a){return ZD(a,191)};_.gk=function $pe(a){return $C(lJ,Nve,191,a,0,1)};var Tcb=sfb(lLe,'XMLTypePackageImpl/49',2009);feb(1965,1,OKe,_pe);_.fk=function aqe(a){return ZD(a,683)};_.gk=function bqe(a){return $C(Zbb,rve,2121,a,0,1)};var Ycb=sfb(lLe,'XMLTypePackageImpl/5',1965);feb(2010,1,OKe,cqe);_.fk=function dqe(a){return ZD(a,168)};_.gk=function eqe(a){return $C(eJ,Nve,168,a,0,1)};var Vcb=sfb(lLe,'XMLTypePackageImpl/50',2010);feb(2011,1,OKe,fqe);_.fk=function gqe(a){return bE(a)};_.gk=function hqe(a){return $C(qJ,Nve,2,a,6,1)};var Wcb=sfb(lLe,'XMLTypePackageImpl/51',2011);feb(2012,1,OKe,iqe);_.fk=function jqe(a){return ZD(a,17)};_.gk=function kqe(a){return $C(bJ,Nve,17,a,0,1)};var Xcb=sfb(lLe,'XMLTypePackageImpl/52',2012);feb(1966,1,OKe,lqe);_.fk=function mqe(a){return bE(a)};_.gk=function nqe(a){return $C(qJ,Nve,2,a,6,1)};var Zcb=sfb(lLe,'XMLTypePackageImpl/6',1966);feb(1967,1,OKe,oqe);_.fk=function pqe(a){return ZD(a,195)};_.gk=function qqe(a){return $C(gE,Nve,195,a,0,2)};var $cb=sfb(lLe,'XMLTypePackageImpl/7',1967);feb(1968,1,OKe,rqe);_.fk=function sqe(a){return $D(a)};_.gk=function tqe(a){return $C(QI,Nve,484,a,8,1)};var _cb=sfb(lLe,'XMLTypePackageImpl/8',1968);feb(1969,1,OKe,uqe);_.fk=function vqe(a){return ZD(a,222)};_.gk=function wqe(a){return $C(RI,Nve,222,a,0,1)};var adb=sfb(lLe,'XMLTypePackageImpl/9',1969);var xqe,yqe;var Eqe,Fqe;var Jqe;feb(55,63,swe,Lqe);var cdb=sfb(LLe,'RegEx/ParseException',55);feb(836,1,{},Tqe);_.bm=function Uqe(a){return a<this.j&&ihb(this.i,a)==63};_.cm=function Vqe(){var a,b,c,d,e;if(this.c!=10)throw Adb(new Lqe(TId((Hde(),VIe))));a=this.a;switch(a){case 101:a=27;break;case 102:a=12;break;case 110:a=10;break;case 114:a=13;break;case 116:a=9;break;case 120:Mqe(this);if(this.c!=0)throw Adb(new Lqe(TId((Hde(),sJe))));if(this.a==123){e=0;c=0;do{Mqe(this);if(this.c!=0)throw Adb(new Lqe(TId((Hde(),sJe))));if((e=Xqe(this.a))<0)break;if(c>c*16)throw Adb(new Lqe(TId((Hde(),tJe))));c=c*16+e}while(true);if(this.a!=125)throw Adb(new Lqe(TId((Hde(),uJe))));if(c>MLe)throw Adb(new Lqe(TId((Hde(),vJe))));a=c}else{e=0;if(this.c!=0||(e=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));c=e;Mqe(this);if(this.c!=0||(e=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));c=c*16+e;a=c}break;case 117:d=0;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;a=b;break;case 118:Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;Mqe(this);if(this.c!=0||(d=Xqe(this.a))<0)throw Adb(new Lqe(TId((Hde(),sJe))));b=b*16+d;if(b>MLe)throw Adb(new Lqe(TId((Hde(),'parser.descappe.4'))));a=b;break;case 65:case 90:case 122:throw Adb(new Lqe(TId((Hde(),wJe))));}return a};_.dm=function Wqe(a){var b,c;switch(a){case 100:c=(this.e&32)==32?hte('Nd',true):(Vse(),Bse);break;case 68:c=(this.e&32)==32?hte('Nd',false):(Vse(),Ise);break;case 119:c=(this.e&32)==32?hte('IsWord',true):(Vse(),Rse);break;case 87:c=(this.e&32)==32?hte('IsWord',false):(Vse(),Kse);break;case 115:c=(this.e&32)==32?hte('IsSpace',true):(Vse(),Mse);break;case 83:c=(this.e&32)==32?hte('IsSpace',false):(Vse(),Jse);break;default:throw Adb(new yz((b=a,NLe+b.toString(16))));}return c};_.em=function Yqe(a){var b,c,d,e,f,g,h,i,j,k,l,m;this.b=1;Mqe(this);b=null;if(this.c==0&&this.a==94){Mqe(this);if(a){k=(Vse(),Vse(),++Use,new xte(5))}else{b=(Vse(),Vse(),++Use,new xte(4));rte(b,0,MLe);k=(null,++Use,new xte(4))}}else{k=(Vse(),Vse(),++Use,new xte(4))}e=true;while((m=this.c)!=1){if(m==0&&this.a==93&&!e)break;e=false;c=this.a;d=false;if(m==10){switch(c){case 100:case 68:case 119:case 87:case 115:case 83:ute(k,this.dm(c));d=true;break;case 105:case 73:case 99:case 67:c=this.um(k,c);c<0&&(d=true);break;case 112:case 80:l=Sqe(this,c);if(!l)throw Adb(new Lqe(TId((Hde(),hJe))));ute(k,l);d=true;break;default:c=this.cm();}}else if(m==20){g=phb(this.i,58,this.d);if(g<0)throw Adb(new Lqe(TId((Hde(),iJe))));h=true;if(ihb(this.i,this.d)==94){++this.d;h=false}f=zhb(this.i,this.d,g);i=ite(f,h,(this.e&512)==512);if(!i)throw Adb(new Lqe(TId((Hde(),kJe))));ute(k,i);d=true;if(g+1>=this.j||ihb(this.i,g+1)!=93)throw Adb(new Lqe(TId((Hde(),iJe))));this.d=g+2}Mqe(this);if(!d){if(this.c!=0||this.a!=45){rte(k,c,c)}else{Mqe(this);if((m=this.c)==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(m==0&&this.a==93){rte(k,c,c);rte(k,45,45)}else{j=this.a;m==10&&(j=this.cm());Mqe(this);rte(k,c,j)}}}(this.e&gwe)==gwe&&this.c==0&&this.a==44&&Mqe(this)}if(this.c==1)throw Adb(new Lqe(TId((Hde(),jJe))));if(b){wte(b,k);k=b}vte(k);ste(k);this.b=0;Mqe(this);return k};_.fm=function Zqe(){var a,b,c,d;c=this.em(false);while((d=this.c)!=7){a=this.a;if(d==0&&(a==45||a==38)||d==4){Mqe(this);if(this.c!=9)throw Adb(new Lqe(TId((Hde(),pJe))));b=this.em(false);if(d==4)ute(c,b);else if(a==45)wte(c,b);else if(a==38)tte(c,b);else throw Adb(new yz('ASSERT'))}else{throw Adb(new Lqe(TId((Hde(),qJe))))}}Mqe(this);return c};_.gm=function $qe(){var a,b;a=this.a-48;b=(Vse(),Vse(),++Use,new eue(12,null,a));!this.g&&(this.g=new gyb);dyb(this.g,new Bte(a));Mqe(this);return b};_.hm=function _qe(){Mqe(this);return Vse(),Nse};_.im=function are(){Mqe(this);return Vse(),Lse};_.jm=function bre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.km=function cre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.lm=function dre(){Mqe(this);return fte()};_.mm=function ere(){Mqe(this);return Vse(),Pse};_.nm=function fre(){Mqe(this);return Vse(),Sse};_.om=function gre(){var a;if(this.d>=this.j||((a=ihb(this.i,this.d++))&65504)!=64)throw Adb(new Lqe(TId((Hde(),dJe))));Mqe(this);return Vse(),Vse(),++Use,new Hte(0,a-64)};_.pm=function hre(){Mqe(this);return gte()};_.qm=function ire(){Mqe(this);return Vse(),Tse};_.rm=function jre(){var a;a=(Vse(),Vse(),++Use,new Hte(0,105));Mqe(this);return a};_.sm=function kre(){Mqe(this);return Vse(),Qse};_.tm=function lre(){Mqe(this);return Vse(),Ose};_.um=function mre(a,b){return this.cm()};_.vm=function nre(){Mqe(this);return Vse(),Gse};_.wm=function ore(){var a,b,c,d,e;if(this.d+1>=this.j)throw Adb(new Lqe(TId((Hde(),aJe))));d=-1;b=null;a=ihb(this.i,this.d);if(49<=a&&a<=57){d=a-48;!this.g&&(this.g=new gyb);dyb(this.g,new Bte(d));++this.d;if(ihb(this.i,this.d)!=41)throw Adb(new Lqe(TId((Hde(),ZIe))));++this.d}else{a==63&&--this.d;Mqe(this);b=Pqe(this);switch(b.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));break;default:throw Adb(new Lqe(TId((Hde(),bJe))));}}Mqe(this);e=Qqe(this);c=null;if(e.e==2){if(e.Pm()!=2)throw Adb(new Lqe(TId((Hde(),cJe))));c=e.Lm(1);e=e.Lm(0)}if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return Vse(),Vse(),++Use,new Ute(d,b,e,c)};_.xm=function pre(){Mqe(this);return Vse(),Hse};_.ym=function qre(){var a;Mqe(this);a=_se(24,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.zm=function rre(){var a;Mqe(this);a=_se(20,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Am=function sre(){var a;Mqe(this);a=_se(22,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Bm=function tre(){var a,b,c,d,e;a=0;c=0;b=-1;while(this.d<this.j){b=ihb(this.i,this.d);e=rse(b);if(e==0)break;a|=e;++this.d}if(this.d>=this.j)throw Adb(new Lqe(TId((Hde(),$Ie))));if(b==45){++this.d;while(this.d<this.j){b=ihb(this.i,this.d);e=rse(b);if(e==0)break;c|=e;++this.d}if(this.d>=this.j)throw Adb(new Lqe(TId((Hde(),$Ie))))}if(b==58){++this.d;Mqe(this);d=ate(Qqe(this),a,c);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this)}else if(b==41){++this.d;Mqe(this);d=ate(Qqe(this),a,c)}else throw Adb(new Lqe(TId((Hde(),_Ie))));return d};_.Cm=function ure(){var a;Mqe(this);a=_se(21,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Dm=function vre(){var a;Mqe(this);a=_se(23,Qqe(this));if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Em=function wre(){var a,b;Mqe(this);a=this.f++;b=bte(Qqe(this),a);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return b};_.Fm=function xre(){var a;Mqe(this);a=bte(Qqe(this),0);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Gm=function yre(a){Mqe(this);if(this.c==5){Mqe(this);return $se(a,(Vse(),Vse(),++Use,new Kte(9,a)))}else return $se(a,(Vse(),Vse(),++Use,new Kte(3,a)))};_.Hm=function zre(a){var b;Mqe(this);b=(Vse(),Vse(),++Use,new iue(2));if(this.c==5){Mqe(this);hue(b,(null,Ese));hue(b,a)}else{hue(b,a);hue(b,(null,Ese))}return b};_.Im=function Are(a){Mqe(this);if(this.c==5){Mqe(this);return Vse(),Vse(),++Use,new Kte(9,a)}else return Vse(),Vse(),++Use,new Kte(3,a)};_.a=0;_.b=0;_.c=0;_.d=0;_.e=0;_.f=1;_.g=null;_.j=0;var gdb=sfb(LLe,'RegEx/RegexParser',836);feb(1947,836,{},Gre);_.bm=function Hre(a){return false};_.cm=function Ire(){return Dre(this)};_.dm=function Kre(a){return Ere(a)};_.em=function Lre(a){return Fre(this)};_.fm=function Mre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.gm=function Nre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.hm=function Ore(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.im=function Pre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.jm=function Qre(){Mqe(this);return Ere(67)};_.km=function Rre(){Mqe(this);return Ere(73)};_.lm=function Sre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.mm=function Tre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.nm=function Ure(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.om=function Vre(){Mqe(this);return Ere(99)};_.pm=function Wre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.qm=function Xre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.rm=function Yre(){Mqe(this);return Ere(105)};_.sm=function Zre(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.tm=function $re(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.um=function _re(a,b){return ute(a,Ere(b)),-1};_.vm=function ase(){Mqe(this);return Vse(),Vse(),++Use,new Hte(0,94)};_.wm=function bse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.xm=function cse(){Mqe(this);return Vse(),Vse(),++Use,new Hte(0,36)};_.ym=function dse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.zm=function ese(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Am=function fse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Bm=function gse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Cm=function hse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Dm=function ise(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Em=function jse(){var a;Mqe(this);a=bte(Qqe(this),0);if(this.c!=7)throw Adb(new Lqe(TId((Hde(),ZIe))));Mqe(this);return a};_.Fm=function kse(){throw Adb(new Lqe(TId((Hde(),xJe))))};_.Gm=function lse(a){Mqe(this);return $se(a,(Vse(),Vse(),++Use,new Kte(3,a)))};_.Hm=function mse(a){var b;Mqe(this);b=(Vse(),Vse(),++Use,new iue(2));hue(b,a);hue(b,(null,Ese));return b};_.Im=function nse(a){Mqe(this);return Vse(),Vse(),++Use,new Kte(3,a)};var Bre=null,Cre=null;var ddb=sfb(LLe,'RegEx/ParserForXMLSchema',1947);feb(122,1,ZLe,Wse);_.Jm=function Xse(a){throw Adb(new yz('Not supported.'))};_.Km=function dte(){return -1};_.Lm=function ete(a){return null};_.Mm=function jte(){return null};_.Nm=function mte(a){};_.Om=function nte(a){};_.Pm=function ote(){return 0};_.Ib=function pte(){return this.Qm(0)};_.Qm=function qte(a){return this.e==11?'.':''};_.e=0;var vse,wse,xse,yse,zse,Ase=null,Bse,Cse=null,Dse,Ese,Fse=null,Gse,Hse,Ise,Jse,Kse,Lse,Mse,Nse,Ose,Pse,Qse,Rse,Sse,Tse,Use=0;var qdb=sfb(LLe,'RegEx/Token',122);feb(138,122,{3:1,138:1,122:1},xte);_.Qm=function Ate(a){var b,c,d;if(this.e==4){if(this==Dse)c='.';else if(this==Bse)c='\\d';else if(this==Rse)c='\\w';else if(this==Mse)c='\\s';else{d=new Qhb;d.a+='[';for(b=0;b<this.b.length;b+=2){(a&gwe)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Nhb(d,zte(this.b[b]))}else{Nhb(d,zte(this.b[b]));d.a+='-';Nhb(d,zte(this.b[b+1]))}}d.a+=']';c=d.a}}else{if(this==Ise)c='\\D';else if(this==Kse)c='\\W';else if(this==Jse)c='\\S';else{d=new Qhb;d.a+='[^';for(b=0;b<this.b.length;b+=2){(a&gwe)!=0&&b>0&&(d.a+=',',d);if(this.b[b]===this.b[b+1]){Nhb(d,zte(this.b[b]))}else{Nhb(d,zte(this.b[b]));d.a+='-';Nhb(d,zte(this.b[b+1]))}}d.a+=']';c=d.a}}return c};_.a=false;_.c=false;var edb=sfb(LLe,'RegEx/RangeToken',138);feb(592,1,{592:1},Bte);_.a=0;var fdb=sfb(LLe,'RegEx/RegexParser/ReferencePosition',592);feb(591,1,{3:1,591:1},Dte);_.Fb=function Ete(a){var b;if(a==null)return false;if(!ZD(a,591))return false;b=RD(a,591);return lhb(this.b,b.b)&&this.a==b.a};_.Hb=function Fte(){return ohb(this.b+'/'+pse(this.a))};_.Ib=function Gte(){return this.c.Qm(this.a)};_.a=0;var hdb=sfb(LLe,'RegEx/RegularExpression',591);feb(228,122,ZLe,Hte);_.Km=function Ite(){return this.a};_.Qm=function Jte(a){var b,c,d;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:d='\\'+XD(this.a&Bwe);break;case 12:d='\\f';break;case 10:d='\\n';break;case 13:d='\\r';break;case 9:d='\\t';break;case 27:d='\\e';break;default:if(this.a>=txe){c=(b=this.a>>>0,'0'+b.toString(16));d='\\v'+zhb(c,c.length-6,c.length)}else d=''+XD(this.a&Bwe);}break;case 8:this==Gse||this==Hse?(d=''+XD(this.a&Bwe)):(d='\\'+XD(this.a&Bwe));break;default:d=null;}return d};_.a=0;var idb=sfb(LLe,'RegEx/Token/CharToken',228);feb(318,122,ZLe,Kte);_.Lm=function Lte(a){return this.a};_.Nm=function Mte(a){this.b=a};_.Om=function Nte(a){this.c=a};_.Pm=function Ote(){return 1};_.Qm=function Pte(a){var b;if(this.e==3){if(this.c<0&&this.b<0){b=this.a.Qm(a)+'*'}else if(this.c==this.b){b=this.a.Qm(a)+'{'+this.c+'}'}else if(this.c>=0&&this.b>=0){b=this.a.Qm(a)+'{'+this.c+','+this.b+'}'}else if(this.c>=0&&this.b<0){b=this.a.Qm(a)+'{'+this.c+',}'}else throw Adb(new yz('Token#toString(): CLOSURE '+this.c+pve+this.b))}else{if(this.c<0&&this.b<0){b=this.a.Qm(a)+'*?'}else if(this.c==this.b){b=this.a.Qm(a)+'{'+this.c+'}?'}else if(this.c>=0&&this.b>=0){b=this.a.Qm(a)+'{'+this.c+','+this.b+'}?'}else if(this.c>=0&&this.b<0){b=this.a.Qm(a)+'{'+this.c+',}?'}else throw Adb(new yz('Token#toString(): NONGREEDYCLOSURE '+this.c+pve+this.b))}return b};_.b=0;_.c=0;var jdb=sfb(LLe,'RegEx/Token/ClosureToken',318);feb(837,122,ZLe,Qte);_.Lm=function Rte(a){return a==0?this.a:this.b};_.Pm=function Ste(){return 2};_.Qm=function Tte(a){var b;this.b.e==3&&this.b.Lm(0)==this.a?(b=this.a.Qm(a)+'+'):this.b.e==9&&this.b.Lm(0)==this.a?(b=this.a.Qm(a)+'+?'):(b=this.a.Qm(a)+(''+this.b.Qm(a)));return b};var kdb=sfb(LLe,'RegEx/Token/ConcatToken',837);feb(1945,122,ZLe,Ute);_.Lm=function Vte(a){if(a==0)return this.d;if(a==1)return this.b;throw Adb(new yz('Internal Error: '+a))};_.Pm=function Wte(){return !this.b?1:2};_.Qm=function Xte(a){var b;this.c>0?(b='(?('+this.c+')'):this.a.e==8?(b='(?('+this.a+')'):(b='(?'+this.a);!this.b?(b+=this.d+')'):(b+=this.d+'|'+this.b+')');return b};_.c=0;var ldb=sfb(LLe,'RegEx/Token/ConditionToken',1945);feb(1946,122,ZLe,Yte);_.Lm=function Zte(a){return this.b};_.Pm=function $te(){return 1};_.Qm=function _te(a){return '(?'+(this.a==0?'':pse(this.a))+(this.c==0?'':pse(this.c))+':'+this.b.Qm(a)+')'};_.a=0;_.c=0;var mdb=sfb(LLe,'RegEx/Token/ModifierToken',1946);feb(838,122,ZLe,aue);_.Lm=function bue(a){return this.a};_.Pm=function cue(){return 1};_.Qm=function due(a){var b;b=null;switch(this.e){case 6:this.b==0?(b='(?:'+this.a.Qm(a)+')'):(b='('+this.a.Qm(a)+')');break;case 20:b='(?='+this.a.Qm(a)+')';break;case 21:b='(?!'+this.a.Qm(a)+')';break;case 22:b='(?<='+this.a.Qm(a)+')';break;case 23:b='(?<!'+this.a.Qm(a)+')';break;case 24:b='(?>'+this.a.Qm(a)+')';}return b};_.b=0;var ndb=sfb(LLe,'RegEx/Token/ParenToken',838);feb(530,122,{3:1,122:1,530:1},eue);_.Mm=function fue(){return this.b};_.Qm=function gue(a){return this.e==12?'\\'+this.a:tse(this.b)};_.a=0;var odb=sfb(LLe,'RegEx/Token/StringToken',530);feb(476,122,ZLe,iue);_.Jm=function jue(a){hue(this,a)};_.Lm=function kue(a){return RD(eyb(this.a,a),122)};_.Pm=function lue(){return !this.a?0:this.a.a.c.length};_.Qm=function mue(a){var b,c,d,e,f;if(this.e==1){if(this.a.a.c.length==2){b=RD(eyb(this.a,0),122);c=RD(eyb(this.a,1),122);c.e==3&&c.Lm(0)==b?(e=b.Qm(a)+'+'):c.e==9&&c.Lm(0)==b?(e=b.Qm(a)+'+?'):(e=b.Qm(a)+(''+c.Qm(a)))}else{f=new Qhb;for(d=0;d<this.a.a.c.length;d++){Nhb(f,RD(eyb(this.a,d),122).Qm(a))}e=f.a}return e}if(this.a.a.c.length==2&&RD(eyb(this.a,1),122).e==7){e=RD(eyb(this.a,0),122).Qm(a)+'?'}else if(this.a.a.c.length==2&&RD(eyb(this.a,0),122).e==7){e=RD(eyb(this.a,1),122).Qm(a)+'??'}else{f=new Qhb;Nhb(f,RD(eyb(this.a,0),122).Qm(a));for(d=1;d<this.a.a.c.length;d++){f.a+='|';Nhb(f,RD(eyb(this.a,d),122).Qm(a))}e=f.a}return e};var pdb=sfb(LLe,'RegEx/Token/UnionToken',476);feb(527,1,{600:1},oue);_.Ib=function pue(){return this.a.b};var rdb=sfb($Le,'XMLTypeUtil/PatternMatcherImpl',527);feb(1707,1527,{},sue);var que;var sdb=sfb($Le,'XMLTypeValidator',1707);feb(270,1,Vve,vue);_.Jc=function wue(a){xgb(this,a)};_.Kc=function xue(){return (this.b-this.a)*this.c<0?tue:new Rue(this)};_.a=0;_.b=0;_.c=0;var tue;var vdb=sfb(aMe,'ExclusiveRange',270);feb(1084,1,Jve,Cue);_.Rb=function Due(a){RD(a,17);yue()};_.Nb=function Eue(a){Ztb(this,a)};_.Pb=function Hue(){return zue()};_.Ub=function Jue(){return Aue()};_.Wb=function Mue(a){RD(a,17);Bue()};_.Ob=function Fue(){return false};_.Sb=function Gue(){return false};_.Tb=function Iue(){return -1};_.Vb=function Kue(){return -1};_.Qb=function Lue(){throw Adb(new kib(dMe))};var tdb=sfb(aMe,'ExclusiveRange/1',1084);feb(258,1,Jve,Rue);_.Rb=function Sue(a){RD(a,17);Nue()};_.Nb=function Tue(a){Ztb(this,a)};_.Pb=function Wue(){return Oue(this)};_.Ub=function Yue(){return Pue(this)};_.Wb=function _ue(a){RD(a,17);Que()};_.Ob=function Uue(){return this.c.c<0?this.a>=this.c.b:this.a<=this.c.b};_.Sb=function Vue(){return this.b>0};_.Tb=function Xue(){return this.b};_.Vb=function Zue(){return this.b-1};_.Qb=function $ue(){throw Adb(new kib(dMe))};_.a=0;_.b=0;var udb=sfb(aMe,'ExclusiveRange/RangeIterator',258);var hE=vfb(eKe,'C');var kE=vfb(hKe,'I');var xdb=vfb(hve,'Z');var lE=vfb(iKe,'J');var gE=vfb(dKe,'B');var iE=vfb(fKe,'D');var jE=vfb(gKe,'F');var wdb=vfb(jKe,'S');var g3=ufb('org.eclipse.elk.core.labels','ILabelManager');var T6=ufb(sIe,'DiagnosticChain');var zab=ufb(QKe,'ResourceSet');var $6=sfb(sIe,'InvocationTargetException',null);var fve=(Qz(),Tz);var gwtOnLoad=gwtOnLoad=ceb;aeb(leb);deb('permProps',[[['locale','default'],[eMe,'gecko1_8']],[['locale','default'],[eMe,'safari']]]); +// -------------- RUN GWT INITIALIZATION CODE -------------- +gwtOnLoad(null, 'elk', null); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +/******************************************************************************* + * Copyright (c) 2021 Kiel University and others. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +var ELK = require('./elk-api.js').default; + +var ELKNode = function (_ELK) { + _inherits(ELKNode, _ELK); + + function ELKNode() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, ELKNode); + + var optionsClone = Object.assign({}, options); + + var workerThreadsExist = false; + try { + require.resolve('web-worker'); + workerThreadsExist = true; + } catch (e) {} + + // user requested a worker + if (options.workerUrl) { + if (workerThreadsExist) { + var Worker = require('web-worker'); + optionsClone.workerFactory = function (url) { + return new Worker(url); + }; + } else { + console.warn('Web worker requested but \'web-worker\' package not installed. \nConsider installing the package or pass your own \'workerFactory\' to ELK\'s constructor.\n... Falling back to non-web worker version.'); + } + } + + // unless no other workerFactory is registered, use the fake worker + if (!optionsClone.workerFactory) { + var _require = require('./elk-worker.min.js'), + _Worker = _require.Worker; + + optionsClone.workerFactory = function (url) { + return new _Worker(url); + }; + } + + return _possibleConstructorReturn(this, (ELKNode.__proto__ || Object.getPrototypeOf(ELKNode)).call(this, optionsClone)); + } + + return ELKNode; +}(ELK); + +Object.defineProperty(module.exports, "__esModule", { + value: true +}); +module.exports = ELKNode; +ELKNode.default = ELKNode; +},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(require,module,exports){ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +module.exports = Worker; +},{}]},{},[3])(3) +}); + + +/***/ }), + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 78932: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39164); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 93920: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ f: () => (/* binding */ flowDb), +/* harmony export */ p: () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeperator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "verticeStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "link": 39, "node": 40, "styledVertex": 41, "AMP": 42, "vertex": 43, "STYLE_SEPARATOR": 44, "idString": 45, "DOUBLECIRCLESTART": 46, "DOUBLECIRCLEEND": 47, "PS": 48, "PE": 49, "(-": 50, "-)": 51, "STADIUMSTART": 52, "STADIUMEND": 53, "SUBROUTINESTART": 54, "SUBROUTINEEND": 55, "VERTEX_WITH_PROPS_START": 56, "NODE_STRING[field]": 57, "COLON": 58, "NODE_STRING[value]": 59, "PIPE": 60, "CYLINDERSTART": 61, "CYLINDEREND": 62, "DIAMOND_START": 63, "DIAMOND_STOP": 64, "TAGEND": 65, "TRAPSTART": 66, "TRAPEND": 67, "INVTRAPSTART": 68, "INVTRAPEND": 69, "linkStatement": 70, "arrowText": 71, "TESTSTR": 72, "START_LINK": 73, "edgeText": 74, "LINK": 75, "edgeTextToken": 76, "STR": 77, "MD_STR": 78, "textToken": 79, "keywords": 80, "STYLE": 81, "LINKSTYLE": 82, "CLASSDEF": 83, "CLASS": 84, "CLICK": 85, "DOWN": 86, "UP": 87, "textNoTagsToken": 88, "stylesOpt": 89, "idString[vertex]": 90, "idString[class]": 91, "CALLBACKNAME": 92, "CALLBACKARGS": 93, "HREF": 94, "LINK_TARGET": 95, "STR[link]": 96, "STR[tooltip]": 97, "alphaNum": 98, "DEFAULT": 99, "numList": 100, "INTERPOLATE": 101, "NUM": 102, "COMMA": 103, "style": 104, "styleComponent": 105, "NODE_STRING": 106, "UNIT": 107, "BRKT": 108, "PCT": 109, "idStringToken": 110, "MINUS": 111, "MULT": 112, "UNICODE_TEXT": 113, "TEXT": 114, "TAGSTART": 115, "EDGE_TEXT": 116, "alphaNumToken": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 42: "AMP", 44: "STYLE_SEPARATOR", 46: "DOUBLECIRCLESTART", 47: "DOUBLECIRCLEEND", 48: "PS", 49: "PE", 50: "(-", 51: "-)", 52: "STADIUMSTART", 53: "STADIUMEND", 54: "SUBROUTINESTART", 55: "SUBROUTINEEND", 56: "VERTEX_WITH_PROPS_START", 57: "NODE_STRING[field]", 58: "COLON", 59: "NODE_STRING[value]", 60: "PIPE", 61: "CYLINDERSTART", 62: "CYLINDEREND", 63: "DIAMOND_START", 64: "DIAMOND_STOP", 65: "TAGEND", 66: "TRAPSTART", 67: "TRAPEND", 68: "INVTRAPSTART", 69: "INVTRAPEND", 72: "TESTSTR", 73: "START_LINK", 75: "LINK", 77: "STR", 78: "MD_STR", 81: "STYLE", 82: "LINKSTYLE", 83: "CLASSDEF", 84: "CLASS", 85: "CLICK", 86: "DOWN", 87: "UP", 90: "idString[vertex]", 91: "idString[class]", 92: "CALLBACKNAME", 93: "CALLBACKARGS", 94: "HREF", 95: "LINK_TARGET", 96: "STR[link]", 97: "STR[tooltip]", 99: "DEFAULT", 101: "INTERPOLATE", 102: "NUM", 103: "COMMA", 106: "NODE_STRING", 107: "UNIT", 108: "BRKT", 109: "PCT", 111: "MINUS", 112: "MULT", 113: "UNICODE_TEXT", 114: "TEXT", 115: "TAGSTART", 116: "EDGE_TEXT", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr" }, + productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + this.$ = []; + break; + case 3: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 4: + case 176: + this.$ = $$[$0]; + break; + case 11: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 12: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 27: + this.$ = $$[$0 - 1].nodes; + break; + case 28: + case 29: + case 30: + case 31: + case 32: + this.$ = []; + break; + case 33: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 34: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 35: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 37: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 38: + case 39: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 43: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 44: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 45: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 46: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 47: + this.$ = [$$[$0]]; + break; + case 48: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 49: + this.$ = $$[$0]; + break; + case 50: + this.$ = $$[$0 - 2]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 51: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 52: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 53: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 54: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 55: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 56: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 57: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 58: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 60: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 61: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 64: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 65: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 67: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 68: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 69: + case 70: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 71: + this.$ = $$[$0]; + break; + case 72: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 73: + this.$ = { text: $$[$0], type: "text" }; + break; + case 74: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 75: + this.$ = { text: $$[$0], type: "string" }; + break; + case 76: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 77: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 78: + this.$ = $$[$0 - 1]; + break; + case 79: + this.$ = { text: $$[$0], type: "text" }; + break; + case 80: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 81: + this.$ = { text: $$[$0], type: "string" }; + break; + case 82: + case 97: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 94: + this.$ = { text: $$[$0], type: "text" }; + break; + case 95: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 96: + this.$ = { text: $$[$0], type: "text" }; + break; + case 98: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 99: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 100: + case 108: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 101: + case 109: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 102: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 103: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 104: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 105: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 106: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 107: + this.$ = $$[$0 - 6]; + yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 6], $$[$0 - 2]); + break; + case 110: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 111: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 112: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 113: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 114: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 115: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 116: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 117: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 118: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 119: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 121: + case 123: + this.$ = [$$[$0]]; + break; + case 122: + case 124: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 126: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 174: + this.$ = $$[$0]; + break; + case 175: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 177: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 178: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 179: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 180: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 181: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 34; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 36; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + this.begin("callbackname"); + break; + case 8: + this.popState(); + break; + case 9: + this.popState(); + this.begin("callbackargs"); + break; + case 10: + return 92; + case 11: + this.popState(); + break; + case 12: + return 93; + case 13: + return "MD_STR"; + case 14: + this.popState(); + break; + case 15: + this.begin("md_string"); + break; + case 16: + return "STR"; + case 17: + this.popState(); + break; + case 18: + this.pushState("string"); + break; + case 19: + return 81; + case 20: + return 99; + case 21: + return 82; + case 22: + return 101; + case 23: + return 83; + case 24: + return 84; + case 25: + return 94; + case 26: + this.begin("click"); + break; + case 27: + this.popState(); + break; + case 28: + return 85; + case 29: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 30: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 31: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 32: + return 27; + case 33: + return 32; + case 34: + return 95; + case 35: + return 95; + case 36: + return 95; + case 37: + return 95; + case 38: + this.popState(); + return 13; + case 39: + this.popState(); + return 14; + case 40: + this.popState(); + return 14; + case 41: + this.popState(); + return 14; + case 42: + this.popState(); + return 14; + case 43: + this.popState(); + return 14; + case 44: + this.popState(); + return 14; + case 45: + this.popState(); + return 14; + case 46: + this.popState(); + return 14; + case 47: + this.popState(); + return 14; + case 48: + this.popState(); + return 14; + case 49: + return 118; + case 50: + return 119; + case 51: + return 120; + case 52: + return 121; + case 53: + return 102; + case 54: + return 108; + case 55: + return 44; + case 56: + return 58; + case 57: + return 42; + case 58: + return 8; + case 59: + return 103; + case 60: + return 112; + case 61: + this.popState(); + return 75; + case 62: + this.pushState("edgeText"); + return 73; + case 63: + return 116; + case 64: + this.popState(); + return 75; + case 65: + this.pushState("thickEdgeText"); + return 73; + case 66: + return 116; + case 67: + this.popState(); + return 75; + case 68: + this.pushState("dottedEdgeText"); + return 73; + case 69: + return 116; + case 70: + return 75; + case 71: + this.popState(); + return 51; + case 72: + return "TEXT"; + case 73: + this.pushState("ellipseText"); + return 50; + case 74: + this.popState(); + return 53; + case 75: + this.pushState("text"); + return 52; + case 76: + this.popState(); + return 55; + case 77: + this.pushState("text"); + return 54; + case 78: + return 56; + case 79: + this.pushState("text"); + return 65; + case 80: + this.popState(); + return 62; + case 81: + this.pushState("text"); + return 61; + case 82: + this.popState(); + return 47; + case 83: + this.pushState("text"); + return 46; + case 84: + this.popState(); + return 67; + case 85: + this.popState(); + return 69; + case 86: + return 114; + case 87: + this.pushState("trapText"); + return 66; + case 88: + this.pushState("trapText"); + return 68; + case 89: + return 115; + case 90: + return 65; + case 91: + return 87; + case 92: + return "SEP"; + case 93: + return 86; + case 94: + return 112; + case 95: + return 108; + case 96: + return 42; + case 97: + return 106; + case 98: + return 111; + case 99: + return 113; + case 100: + this.popState(); + return 60; + case 101: + this.pushState("text"); + return 60; + case 102: + this.popState(); + return 49; + case 103: + this.pushState("text"); + return 48; + case 104: + this.popState(); + return 31; + case 105: + this.pushState("text"); + return 29; + case 106: + this.popState(); + return 64; + case 107: + this.pushState("text"); + return 63; + case 108: + return "TEXT"; + case 109: + return "QUOTE"; + case 110: + return 9; + case 111: + return 10; + case 112: + return 11; + } + }, + rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "callbackargs": { "rules": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "callbackname": { "rules": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "href": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "click": { "rules": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dottedEdgeText": { "rules": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "thickEdgeText": { "rules": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "edgeText": { "rules": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "trapText": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], "inclusive": false }, "ellipseText": { "rules": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "text": { "rules": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], "inclusive": false }, "vertex": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dir": { "rules": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr": { "rules": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_title": { "rules": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "md_string": { "rules": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "string": { "rules": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + if ((edge == null ? void 0 : edge.length) > 10) { + edge.length = 10; + } + if (edges.length < (config.maxEdges ?? 500)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 pushing edge..."); + edges.push(edge); + } else { + throw new Error( + `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.` + ); + } +}; +const addLink = function(_start, _end, type) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos >= edges.length) { + throw new Error( + `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` + ); + } + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(ids, style) { + ids.split(",").forEach(function(id) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); + classes[id].textStyles.push(newStyle); + } + classes[id].styles.push(s); + }); + } + }); +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + if (tooltips.hasOwnProperty(id)) { + return tooltips[id]; + } + return void 0; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.bottom + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = {}; + firstGraphFlag = true; + version = ver; + config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + defaultConfig: () => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.H.flowchart, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.b, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.r +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + + + +/***/ }), + +/***/ 24858: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(93920); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(78932); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28758); +/* harmony import */ var elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17295); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22424); + + + + + + + + + + + + + + + + +const findCommonAncestor = (id1, id2, treeData) => { + const { parentById } = treeData; + const visited = /* @__PURE__ */ new Set(); + let currentId = id1; + while (currentId) { + visited.add(currentId); + if (currentId === id2) { + return currentId; + } + currentId = parentById[currentId]; + } + currentId = id2; + while (currentId) { + if (visited.has(currentId)) { + return currentId; + } + currentId = parentById[currentId]; + } + return "root"; +}; +const elk = new elkjs_lib_elk_bundled_js__WEBPACK_IMPORTED_MODULE_1__(); +let portPos = {}; +const conf = {}; +let nodeDb = {}; +const addVertices = async function(vert, svgId, root, doc, diagObj, parentLookupDb, graph) { + const svg = root.select(`[id="${svgId}"]`); + const nodes = svg.insert("g").attr("class", "nodes"); + const keys = Object.keys(vert); + await Promise.all( + keys.map(async function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + const labelData = { width: 0, height: 0 }; + const ports = [ + { + id: vertex.id + "-west", + layoutOptions: { + "port.side": "WEST" + } + }, + { + id: vertex.id + "-east", + layoutOptions: { + "port.side": "EAST" + } + }, + { + id: vertex.id + "-south", + layoutOptions: { + "port.side": "SOUTH" + } + }, + { + id: vertex.id + "-north", + layoutOptions: { + "port.side": "NORTH" + } + } + ]; + let radious = 0; + let _shape = ""; + let layoutOptions = {}; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + layoutOptions = { + portConstraints: "FIXED_SIDE" + }; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + const node = { + labelStyle: styles2.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles2.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.E)().flowchart.padding + }; + let boundingBox; + let nodeEl; + if (node.type !== "group") { + nodeEl = await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, node, vertex.dir); + boundingBox = nodeEl.node().getBBox(); + } else { + doc.createElementNS("http://www.w3.org/2000/svg", "text"); + const { shapeSvg, bbox } = await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.l)(nodes, node, void 0, true); + labelData.width = bbox.width; + labelData.wrappingWidth = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.E)().flowchart.wrappingWidth; + labelData.height = bbox.height; + labelData.labelNode = shapeSvg.node(); + node.labelData = labelData; + } + const data = { + id: vertex.id, + ports: vertex.type === "diamond" ? ports : [], + // labelStyle: styles.labelStyle, + // shape: _shape, + layoutOptions, + labelText: vertexText, + labelData, + // labels: [{ text: vertexText }], + // rx: radius, + // ry: radius, + // class: classStr, + // style: styles.style, + // link: vertex.link, + // linkTarget: vertex.linkTarget, + // tooltip: diagObj.db.getTooltip(vertex.id) || '', + domId: diagObj.db.lookUpDomId(vertex.id), + // haveCallback: vertex.haveCallback, + width: boundingBox == null ? void 0 : boundingBox.width, + height: boundingBox == null ? void 0 : boundingBox.height, + // dir: vertex.dir, + type: vertex.type, + // props: vertex.props, + // padding: getConfig().flowchart.padding, + // boundingBox, + el: nodeEl, + parent: parentLookupDb.parentById[vertex.id] + }; + nodeDb[node.id] = data; + }) + ); + return graph; +}; +const getNextPosition = (position, edgeDirection, graphDirection) => { + const portPos2 = { + TB: { + in: { + north: "north" + }, + out: { + south: "west", + west: "east", + east: "south" + } + }, + LR: { + in: { + west: "west" + }, + out: { + east: "south", + south: "north", + north: "east" + } + }, + RL: { + in: { + east: "east" + }, + out: { + west: "north", + north: "south", + south: "west" + } + }, + BT: { + in: { + south: "south" + }, + out: { + north: "east", + east: "west", + west: "north" + } + } + }; + portPos2.TD = portPos2.TB; + return portPos2[graphDirection][edgeDirection][position]; +}; +const getNextPort = (node, edgeDirection, graphDirection) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("getNextPort", { node, edgeDirection, graphDirection }); + if (!portPos[node]) { + switch (graphDirection) { + case "TB": + case "TD": + portPos[node] = { + inPosition: "north", + outPosition: "south" + }; + break; + case "BT": + portPos[node] = { + inPosition: "south", + outPosition: "north" + }; + break; + case "RL": + portPos[node] = { + inPosition: "east", + outPosition: "west" + }; + break; + case "LR": + portPos[node] = { + inPosition: "west", + outPosition: "east" + }; + break; + } + } + const result = edgeDirection === "in" ? portPos[node].inPosition : portPos[node].outPosition; + if (edgeDirection === "in") { + portPos[node].inPosition = getNextPosition( + portPos[node].inPosition, + edgeDirection, + graphDirection + ); + } else { + portPos[node].outPosition = getNextPosition( + portPos[node].outPosition, + edgeDirection, + graphDirection + ); + } + return result; +}; +const getEdgeStartEndPoint = (edge, dir) => { + let source = edge.start; + let target = edge.end; + const sourceId = source; + const targetId = target; + const startNode = nodeDb[source]; + const endNode = nodeDb[target]; + if (!startNode || !endNode) { + return { source, target }; + } + if (startNode.type === "diamond") { + source = `${source}-${getNextPort(source, "out", dir)}`; + } + if (endNode.type === "diamond") { + target = `${target}-${getNextPort(target, "in", dir)}`; + } + return { source, target, sourceId, targetId }; +}; +const addEdges = function(edges, diagObj, graph, svg) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 edges = ", edges); + const labelsEl = svg.insert("g").attr("class", "edgeLabels"); + let linkIdCnt = {}; + let dir = diagObj.db.getDirection(); + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.k)(edge.style); + style = styles2.style; + labelStyle = styles2.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + const labelEl = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.f)(labelsEl, edgeData); + const { source, target, sourceId, targetId } = getEdgeStartEndPoint(edge, dir); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("abc78 source and target", source, target); + graph.edges.push({ + id: "e" + edge.start + edge.end, + sources: [source], + targets: [target], + sourceId, + targetId, + labelEl, + labels: [ + { + width: edgeData.width, + height: edgeData.height, + orgWidth: edgeData.width, + orgHeight: edgeData.height, + text: edgeData.label, + layoutOptions: { + "edgeLabels.inline": "true", + "edgeLabels.placement": "CENTER" + } + } + ], + edgeData + }); + }); + return graph; +}; +const addMarkersToEdge = function(svgPath, edgeData, diagramType, arrowMarkerAbsolute, id) { + let url = ""; + if (arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.m)(svgPath, edgeData, url, id, diagramType); +}; +const getClasses = function(text, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Extracting classes"); + return diagObj.db.getClasses(); +}; +const addSubGraphs = function(db2) { + const parentLookupDb = { parentById: {}, childrenById: {} }; + const subgraphs = db2.getSubGraphs(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subgraphs); + subgraphs.forEach(function(subgraph) { + subgraph.nodes.forEach(function(node) { + parentLookupDb.parentById[node] = subgraph.id; + if (parentLookupDb.childrenById[subgraph.id] === void 0) { + parentLookupDb.childrenById[subgraph.id] = []; + } + parentLookupDb.childrenById[subgraph.id].push(node); + }); + }); + subgraphs.forEach(function(subgraph) { + ({ id: subgraph.id }); + if (parentLookupDb.parentById[subgraph.id] !== void 0) { + parentLookupDb.parentById[subgraph.id]; + } + }); + return parentLookupDb; +}; +const calcOffset = function(src, dest, parentLookupDb) { + const ancestor = findCommonAncestor(src, dest, parentLookupDb); + if (ancestor === void 0 || ancestor === "root") { + return { x: 0, y: 0 }; + } + const ancestorOffset = nodeDb[ancestor].offset; + return { x: ancestorOffset.posX, y: ancestorOffset.posY }; +}; +const insertEdge = function(edgesEl, edge, edgeData, diagObj, parentLookupDb, id) { + const offset = calcOffset(edge.sourceId, edge.targetId, parentLookupDb); + const src = edge.sections[0].startPoint; + const dest = edge.sections[0].endPoint; + const segments = edge.sections[0].bendPoints ? edge.sections[0].bendPoints : []; + const segPoints = segments.map((segment) => [segment.x + offset.x, segment.y + offset.y]); + const points = [ + [src.x + offset.x, src.y + offset.y], + ...segPoints, + [dest.x + offset.x, dest.y + offset.y] + ]; + const { x, y } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.k)(edge.edgeData); + const curve = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6); + const edgePath = edgesEl.insert("path").attr("d", curve(points)).attr("class", "path " + edgeData.classes).attr("fill", "none"); + const edgeG = edgesEl.insert("g").attr("class", "edgeLabel"); + const edgeWithLabel = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(edgeG.node().appendChild(edge.labelEl)); + const box = edgeWithLabel.node().firstChild.getBoundingClientRect(); + edgeWithLabel.attr("width", box.width); + edgeWithLabel.attr("height", box.height); + edgeG.attr( + "transform", + `translate(${edge.labels[0].x + offset.x}, ${edge.labels[0].y + offset.y})` + ); + addMarkersToEdge(edgePath, edgeData, diagObj.type, diagObj.arrowMarkerAbsolute, id); +}; +const insertChildren = (nodeArray, parentLookupDb) => { + nodeArray.forEach((node) => { + if (!node.children) { + node.children = []; + } + const childIds = parentLookupDb.childrenById[node.id]; + if (childIds) { + childIds.forEach((childId) => { + node.children.push(nodeDb[childId]); + }); + } + insertChildren(node.children, parentLookupDb); + }); +}; +const draw = async function(text, id, _version, diagObj) { + var _a; + diagObj.db.clear(); + nodeDb = {}; + portPos = {}; + diagObj.db.setGen("gen-2"); + diagObj.parser.parse(text); + const renderEl = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("style", "height:400px").attr("id", "cy"); + let graph = { + id: "root", + layoutOptions: { + "elk.hierarchyHandling": "INCLUDE_CHILDREN", + "org.eclipse.elk.padding": "[top=100, left=100, bottom=110, right=110]", + "elk.layered.spacing.edgeNodeBetweenLayers": "30", + // 'elk.layered.mergeEdges': 'true', + "elk.direction": "DOWN" + // 'elk.ports.sameLayerEdges': true, + // 'nodePlacement.strategy': 'SIMPLE', + }, + children: [], + edges: [] + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Drawing flowchart using v3 renderer", elk); + let dir = diagObj.db.getDirection(); + switch (dir) { + case "BT": + graph.layoutOptions["elk.direction"] = "UP"; + break; + case "TB": + graph.layoutOptions["elk.direction"] = "DOWN"; + break; + case "LR": + graph.layoutOptions["elk.direction"] = "RIGHT"; + break; + case "RL": + graph.layoutOptions["elk.direction"] = "LEFT"; + break; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const svg = root.select(`[id="${id}"]`); + const markers = ["point", "circle", "cross"]; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.a)(svg, markers, diagObj.type, id); + const vert = diagObj.db.getVertices(); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Subgraphs - ", subGraphs); + for (let i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const subGraphsEl = svg.insert("g").attr("class", "subgraphs"); + const parentLookupDb = addSubGraphs(diagObj.db); + graph = await addVertices(vert, id, root, doc, diagObj, parentLookupDb, graph); + const edgesEl = svg.insert("g").attr("class", "edges edgePath"); + const edges = diagObj.db.getEdges(); + graph = addEdges(edges, diagObj, graph, svg); + const nodes = Object.keys(nodeDb); + nodes.forEach((nodeId) => { + const node = nodeDb[nodeId]; + if (!node.parent) { + graph.children.push(node); + } + if (parentLookupDb.childrenById[nodeId] !== void 0) { + node.labels = [ + { + text: node.labelText, + layoutOptions: { + "nodeLabels.placement": "[H_CENTER, V_TOP, INSIDE]" + }, + width: node.labelData.width, + height: node.labelData.height + // width: 100, + // height: 100, + } + ]; + delete node.x; + delete node.y; + delete node.width; + delete node.height; + } + }); + insertChildren(graph.children, parentLookupDb); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", JSON.stringify(graph, null, 2)); + const g = await elk.layout(graph); + drawNodes(0, 0, g.children, svg, subGraphsEl, diagObj, 0); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("after layout", g); + (_a = g.edges) == null ? void 0 : _a.map((edge) => { + insertEdge(edgesEl, edge, edge.edgeData, diagObj, parentLookupDb, id); + }); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.o)({}, svg, conf2.diagramPadding, conf2.useMaxWidth); + renderEl.remove(); +}; +const drawNodes = (relX, relY, nodeArray, svg, subgraphsEl, diagObj, depth) => { + nodeArray.forEach(function(node) { + if (node) { + nodeDb[node.id].offset = { + posX: node.x + relX, + posY: node.y + relY, + x: relX, + y: relY, + depth, + width: node.width, + height: node.height + }; + if (node.type === "group") { + const subgraphEl = subgraphsEl.insert("g").attr("class", "subgraph"); + subgraphEl.insert("rect").attr("class", "subgraph subgraph-lvl-" + depth % 5 + " node").attr("x", node.x + relX).attr("y", node.y + relY).attr("width", node.width).attr("height", node.height); + const label = subgraphEl.insert("g").attr("class", "label"); + const labelCentering = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.E)().flowchart.htmlLabels ? node.labelData.width / 2 : 0; + label.attr( + "transform", + `translate(${node.labels[0].x + relX + node.x + labelCentering}, ${node.labels[0].y + relY + node.y + 3})` + ); + label.node().appendChild(node.labelData.labelNode); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.type, node.labels); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.info("Id (UGH)= ", node.id); + node.el.attr( + "transform", + `translate(${node.x + relX + node.width / 2}, ${node.y + relY + node.height / 2})` + ); + } + } + }); + nodeArray.forEach(function(node) { + if (node && node.type === "group") { + drawNodes(relX + node.x, relY + node.y, node.children, svg, subgraphsEl, diagObj, depth + 1); + } + }); +}; +const renderer = { + getClasses, + draw +}; +const genSections = (options) => { + let sections = ""; + for (let i = 0; i < 5; i++) { + sections += ` + .subgraph-lvl-${i} { + fill: ${options[`surface${i}`]}; + stroke: ${options[`surfacePeer${i}`]}; + } + `; + } + return sections; +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span { + color: ${options.titleColor}; + } + + .label text,span { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.85; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } + .subgraph { + stroke-width:2; + rx:3; + } + // .subgraph-lvl-1 { + // fill:#ccc; + // // stroke:black; + // } + + .flowchart-label text { + text-anchor: middle; + } + + ${genSections(options)} +`; +const styles = getStyles; +const diagram = { + db: _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__.d, + renderer, + parser: _flowDb_d35e309a_js__WEBPACK_IMPORTED_MODULE_7__.p, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/86262f09.b577aac6.js b/assets/js/86262f09.b577aac6.js new file mode 100644 index 0000000000..68c94869e2 --- /dev/null +++ b/assets/js/86262f09.b577aac6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8318],{78643:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>c,metadata:()=>i,toc:()=>d});var t=n(85893),s=n(11151);const c={},o="EXPRESSION",i={id:"about/references/keywords/EXPRESSION",title:"EXPRESSION",description:"VARIABLES /",source:"@site/docs/about/references/keywords/EXPRESSION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EXPRESSION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL"},next:{title:"EXTRAPOLATION",permalink:"/ecalc/docs/about/references/keywords/EXTRAPOLATION"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"expression",children:"EXPRESSION"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"EXPRESSION"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"No"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"VARIABLES"})}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"None"})})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["Expression for a ",(0,t.jsx)(r.code,{children:"variable<VARIABLES>"})," using ",(0,t.jsx)(r.code,{children:"EXPRESSIONS"})]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"EXPRESSION: <expression>\n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.p,{children:"With time series reference"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"EXPRESSION: time_series_ref_1;vector_name_1 {+} time_series_ref_2;vector_name_2 {*} (time_series_ref_3;vector_name_3 > 0)\n"})}),"\n",(0,t.jsx)(r.p,{children:"With variable reference"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"EXPRESSION: $var.variable_name1 {+} $var.variable_name2\n"})})]})}function h(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>i,a:()=>o});var t=n(67294);const s={},c=t.createContext(s);function o(e){const r=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/880bbd08.13a8ec3c.js b/assets/js/880bbd08.13a8ec3c.js new file mode 100644 index 0000000000..62e071adcb --- /dev/null +++ b/assets/js/880bbd08.13a8ec3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3315],{1471:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var r=s(85893),o=s(11151);const t={},c="UNITS",i={id:"about/references/keywords/UNITS",title:"UNITS",description:"Description",source:"@site/docs/about/references/keywords/UNITS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/UNITS",permalink:"/ecalc/docs/about/references/keywords/UNITS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/UNITS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE"},next:{title:"UPSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Pumps",id:"pumps",level:3},{value:"Compressors",id:"compressors",level:3},{value:"Example",id:"example",level:2},{value:"Pumps",id:"pumps-1",level:3},{value:"Compressors",id:"compressors-1",level:3}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"units",children:"UNITS"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"UNITS"})," is a keyword that can be specified for ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"PUMP"})," and ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"COMPRESSOR CHARTS"}),". This is a requirement and ",(0,r.jsx)(n.strong,{children:"must"})," be specified."]}),"\n",(0,r.jsxs)(n.p,{children:["For pumps this must be specified in ",(0,r.jsx)(n.code,{children:"FACILITY_INPUTS"}),", whilst for compressors it must be within ",(0,r.jsx)(n.code,{children:"MODELS"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.h3,{id:"pumps",children:"Pumps"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <pump chart name>\n ...\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"compressors",children:"Compressors"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n ...\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n ....\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h3,{id:"pumps-1",children:"Pumps"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: single_speed_pump\n TYPE: PUMP_CHART_SINGLE_SPEED\n ...\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,r.jsx)(n.h3,{id:"compressors-1",children:"Compressors"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n ...\n"})})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>c});var r=s(67294);const o={},t=r.createContext(o);function c(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8817.619f555e.js b/assets/js/8817.619f555e.js new file mode 100644 index 0000000000..1338bd1567 --- /dev/null +++ b/assets/js/8817.619f555e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8817],{48817:(t,e,n)=>{n.d(e,{diagram:()=>et});var a=n(28758),i=n(64218),s=n(66893),r=n(17967),l=(n(27484),n(27856),function(){var t=function(t,e,n,a){for(n=n||{},a=t.length;a--;n[t[a]]=e);return n},e=[1,24],n=[1,25],a=[1,26],i=[1,27],s=[1,28],r=[1,63],l=[1,64],o=[1,65],h=[1,66],d=[1,67],u=[1,68],p=[1,69],y=[1,29],f=[1,30],b=[1,31],g=[1,32],x=[1,33],_=[1,34],m=[1,35],E=[1,36],A=[1,37],S=[1,38],C=[1,39],k=[1,40],O=[1,41],v=[1,42],T=[1,43],w=[1,44],R=[1,45],D=[1,46],N=[1,47],P=[1,48],M=[1,50],j=[1,51],B=[1,52],Y=[1,53],L=[1,54],I=[1,55],U=[1,56],F=[1,57],X=[1,58],z=[1,59],W=[1,60],Q=[14,42],$=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],V=[1,82],G=[1,83],H=[1,84],K=[1,85],J=[12,14,42],Z=[12,14,33,42],tt=[12,14,33,42,76,77,79,80],et=[12,33],nt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],at={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(t,e,n,a,i,s,r){var l=s.length-1;switch(i){case 3:a.setDirection("TB");break;case 4:a.setDirection("BT");break;case 5:a.setDirection("RL");break;case 6:a.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:a.setC4Type(s[l-3]);break;case 19:a.setTitle(s[l].substring(6)),this.$=s[l].substring(6);break;case 20:a.setAccDescription(s[l].substring(15)),this.$=s[l].substring(15);break;case 21:this.$=s[l].trim(),a.setTitle(this.$);break;case 22:case 23:this.$=s[l].trim(),a.setAccDescription(this.$);break;case 28:case 29:s[l].splice(2,0,"ENTERPRISE"),a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 30:a.addPersonOrSystemBoundary(...s[l]),this.$=s[l];break;case 31:s[l].splice(2,0,"CONTAINER"),a.addContainerBoundary(...s[l]),this.$=s[l];break;case 32:a.addDeploymentNode("node",...s[l]),this.$=s[l];break;case 33:a.addDeploymentNode("nodeL",...s[l]),this.$=s[l];break;case 34:a.addDeploymentNode("nodeR",...s[l]),this.$=s[l];break;case 35:a.popBoundaryParseStack();break;case 39:a.addPersonOrSystem("person",...s[l]),this.$=s[l];break;case 40:a.addPersonOrSystem("external_person",...s[l]),this.$=s[l];break;case 41:a.addPersonOrSystem("system",...s[l]),this.$=s[l];break;case 42:a.addPersonOrSystem("system_db",...s[l]),this.$=s[l];break;case 43:a.addPersonOrSystem("system_queue",...s[l]),this.$=s[l];break;case 44:a.addPersonOrSystem("external_system",...s[l]),this.$=s[l];break;case 45:a.addPersonOrSystem("external_system_db",...s[l]),this.$=s[l];break;case 46:a.addPersonOrSystem("external_system_queue",...s[l]),this.$=s[l];break;case 47:a.addContainer("container",...s[l]),this.$=s[l];break;case 48:a.addContainer("container_db",...s[l]),this.$=s[l];break;case 49:a.addContainer("container_queue",...s[l]),this.$=s[l];break;case 50:a.addContainer("external_container",...s[l]),this.$=s[l];break;case 51:a.addContainer("external_container_db",...s[l]),this.$=s[l];break;case 52:a.addContainer("external_container_queue",...s[l]),this.$=s[l];break;case 53:a.addComponent("component",...s[l]),this.$=s[l];break;case 54:a.addComponent("component_db",...s[l]),this.$=s[l];break;case 55:a.addComponent("component_queue",...s[l]),this.$=s[l];break;case 56:a.addComponent("external_component",...s[l]),this.$=s[l];break;case 57:a.addComponent("external_component_db",...s[l]),this.$=s[l];break;case 58:a.addComponent("external_component_queue",...s[l]),this.$=s[l];break;case 60:a.addRel("rel",...s[l]),this.$=s[l];break;case 61:a.addRel("birel",...s[l]),this.$=s[l];break;case 62:a.addRel("rel_u",...s[l]),this.$=s[l];break;case 63:a.addRel("rel_d",...s[l]),this.$=s[l];break;case 64:a.addRel("rel_l",...s[l]),this.$=s[l];break;case 65:a.addRel("rel_r",...s[l]),this.$=s[l];break;case 66:a.addRel("rel_b",...s[l]),this.$=s[l];break;case 67:s[l].splice(0,1),a.addRel("rel",...s[l]),this.$=s[l];break;case 68:a.updateElStyle("update_el_style",...s[l]),this.$=s[l];break;case 69:a.updateRelStyle("update_rel_style",...s[l]),this.$=s[l];break;case 70:a.updateLayoutConfig("update_layout_config",...s[l]),this.$=s[l];break;case 71:this.$=[s[l]];break;case 72:s[l].unshift(s[l-1]),this.$=s[l];break;case 73:case 75:this.$=s[l].trim();break;case 74:let t={};t[s[l-1].trim()]=s[l].trim(),this.$=t;break;case 76:this.$=""}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W},{13:70,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W},{13:71,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W},{13:72,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W},{13:73,19:20,20:21,21:22,22:e,23:n,24:a,26:i,28:s,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W},{14:[1,74]},t(Q,[2,13],{43:23,29:49,30:61,32:62,20:75,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W}),t(Q,[2,14]),t($,[2,16],{12:[1,76]}),t(Q,[2,36],{12:[1,77]}),t(q,[2,19]),t(q,[2,20]),{25:[1,78]},{27:[1,79]},t(q,[2,23]),{35:80,75:81,76:V,77:G,79:H,80:K},{35:86,75:81,76:V,77:G,79:H,80:K},{35:87,75:81,76:V,77:G,79:H,80:K},{35:88,75:81,76:V,77:G,79:H,80:K},{35:89,75:81,76:V,77:G,79:H,80:K},{35:90,75:81,76:V,77:G,79:H,80:K},{35:91,75:81,76:V,77:G,79:H,80:K},{35:92,75:81,76:V,77:G,79:H,80:K},{35:93,75:81,76:V,77:G,79:H,80:K},{35:94,75:81,76:V,77:G,79:H,80:K},{35:95,75:81,76:V,77:G,79:H,80:K},{35:96,75:81,76:V,77:G,79:H,80:K},{35:97,75:81,76:V,77:G,79:H,80:K},{35:98,75:81,76:V,77:G,79:H,80:K},{35:99,75:81,76:V,77:G,79:H,80:K},{35:100,75:81,76:V,77:G,79:H,80:K},{35:101,75:81,76:V,77:G,79:H,80:K},{35:102,75:81,76:V,77:G,79:H,80:K},{35:103,75:81,76:V,77:G,79:H,80:K},{35:104,75:81,76:V,77:G,79:H,80:K},t(J,[2,59]),{35:105,75:81,76:V,77:G,79:H,80:K},{35:106,75:81,76:V,77:G,79:H,80:K},{35:107,75:81,76:V,77:G,79:H,80:K},{35:108,75:81,76:V,77:G,79:H,80:K},{35:109,75:81,76:V,77:G,79:H,80:K},{35:110,75:81,76:V,77:G,79:H,80:K},{35:111,75:81,76:V,77:G,79:H,80:K},{35:112,75:81,76:V,77:G,79:H,80:K},{35:113,75:81,76:V,77:G,79:H,80:K},{35:114,75:81,76:V,77:G,79:H,80:K},{35:115,75:81,76:V,77:G,79:H,80:K},{20:116,29:49,30:61,32:62,34:r,36:l,37:o,38:h,39:d,40:u,41:p,43:23,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W},{12:[1,118],33:[1,117]},{35:119,75:81,76:V,77:G,79:H,80:K},{35:120,75:81,76:V,77:G,79:H,80:K},{35:121,75:81,76:V,77:G,79:H,80:K},{35:122,75:81,76:V,77:G,79:H,80:K},{35:123,75:81,76:V,77:G,79:H,80:K},{35:124,75:81,76:V,77:G,79:H,80:K},{35:125,75:81,76:V,77:G,79:H,80:K},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(Q,[2,15]),t($,[2,17],{21:22,19:130,22:e,23:n,24:a,26:i,28:s}),t(Q,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:n,24:a,26:i,28:s,34:r,36:l,37:o,38:h,39:d,40:u,41:p,44:y,45:f,46:b,47:g,48:x,49:_,50:m,51:E,52:A,53:S,54:C,55:k,56:O,57:v,58:T,59:w,60:R,61:D,62:N,63:P,64:M,65:j,66:B,67:Y,68:L,69:I,70:U,71:F,72:X,73:z,74:W}),t(q,[2,21]),t(q,[2,22]),t(J,[2,39]),t(Z,[2,71],{75:81,35:132,76:V,77:G,79:H,80:K}),t(tt,[2,73]),{78:[1,133]},t(tt,[2,75]),t(tt,[2,76]),t(J,[2,40]),t(J,[2,41]),t(J,[2,42]),t(J,[2,43]),t(J,[2,44]),t(J,[2,45]),t(J,[2,46]),t(J,[2,47]),t(J,[2,48]),t(J,[2,49]),t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),t(J,[2,57]),t(J,[2,58]),t(J,[2,60]),t(J,[2,61]),t(J,[2,62]),t(J,[2,63]),t(J,[2,64]),t(J,[2,65]),t(J,[2,66]),t(J,[2,67]),t(J,[2,68]),t(J,[2,69]),t(J,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(et,[2,28]),t(et,[2,29]),t(et,[2,30]),t(et,[2,31]),t(et,[2,32]),t(et,[2,33]),t(et,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t($,[2,18]),t(Q,[2,38]),t(Z,[2,72]),t(tt,[2,74]),t(J,[2,24]),t(J,[2,35]),t(nt,[2,25]),t(nt,[2,26],{12:[1,138]}),t(nt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],a=[],i=[null],s=[],r=this.table,l="",o=0,c=0,h=s.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var y=d.yylloc;s.push(y);var f=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var b,g,x,_,m,E,A,S,C,k={};;){if(g=n[n.length-1],this.defaultActions[g]?x=this.defaultActions[g]:(null==b&&(C=void 0,"number"!=typeof(C=a.pop()||d.lex()||1)&&(C instanceof Array&&(C=(a=C).pop()),C=e.symbols_[C]||C),b=C),x=r[g]&&r[g][b]),void 0===x||!x.length||!x[0]){var O="";for(m in S=[],r[g])this.terminals_[m]&&m>2&&S.push("'"+this.terminals_[m]+"'");O=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[b]||b)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==b?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(O,{text:d.match,token:this.terminals_[b]||b,line:d.yylineno,loc:y,expected:S})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+b);switch(x[0]){case 1:n.push(b),i.push(d.yytext),s.push(d.yylloc),n.push(x[1]),b=null,c=d.yyleng,l=d.yytext,o=d.yylineno,y=d.yylloc;break;case 2:if(E=this.productions_[x[1]][1],k.$=i[i.length-E],k._$={first_line:s[s.length-(E||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(E||1)].first_column,last_column:s[s.length-1].last_column},f&&(k._$.range=[s[s.length-(E||1)].range[0],s[s.length-1].range[1]]),void 0!==(_=this.performAction.apply(k,[l,c,o,u.yy,x[1],i,s].concat(h))))return _;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),s=s.slice(0,-1*E)),n.push(this.productions_[x[1]][0]),i.push(k.$),s.push(k._$),A=r[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},it={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var a=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===a.length?this.yylloc.first_column:0)+a[a.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,a,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(a=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=a.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:a?a[a.length-1].length-a[a.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,a;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((n=this._input.match(this.rules[i[s]]))&&(!e||n[0].length>e[0].length)){if(e=n,a=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[a]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,a){switch(n){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 73:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 16:case 70:break;case 14:c;break;case 15:return 12;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:case 53:return this.begin("rel_u"),66;case 54:case 55:return this.begin("rel_d"),67;case 56:case 57:return this.begin("rel_l"),68;case 58:case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:case 79:this.popState(),this.popState();break;case 69:case 71:return 80;case 72:this.begin("string");break;case 74:case 80:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};function st(){this.yy={}}return at.lexer=it,st.prototype=at,at.Parser=st,new st}());l.parser=l;const o=l;let h=[],d=[""],u="global",p="",y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],f=[],b="",g=!1,x=4,_=2;var m;const E=function(t){return null==t?h:h.filter((e=>e.parentBoundary===t))},A=function(){return g},S={addPersonOrSystem:function(t,e,n,a,i,s,r){if(null===e||null===n)return;let l={};const o=h.find((t=>t.alias===e));if(o&&e===o.alias?l=o:(l.alias=e,h.push(l)),l.label=null==n?{text:""}:{text:n},null==a)l.descr={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]={text:e}}else l.descr={text:a};if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.sprite=i;if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=e}else l.tags=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=e}else l.link=r;l.typeC4Shape={text:t},l.parentBoundary=u,l.wrap=A()},addPersonOrSystemBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"system"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=A(),p=u,u=t,d.push(p)},addContainer:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=A(),o.typeC4Shape={text:t},o.parentBoundary=u},addContainerBoundary:function(t,e,n,a,i){if(null===t||null===e)return;let s={};const r=y.find((e=>e.alias===t));if(r&&t===r.alias?s=r:(s.alias=t,y.push(s)),s.label=null==e?{text:""}:{text:e},null==n)s.type={text:"container"};else if("object"==typeof n){let[t,e]=Object.entries(n)[0];s[t]={text:e}}else s.type={text:n};if("object"==typeof a){let[t,e]=Object.entries(a)[0];s[t]=e}else s.tags=a;if("object"==typeof i){let[t,e]=Object.entries(i)[0];s[t]=e}else s.link=i;s.parentBoundary=u,s.wrap=A(),p=u,u=t,d.push(p)},addComponent:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=h.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,h.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.techn={text:""};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.techn={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof s){let[t,e]=Object.entries(s)[0];o[t]=e}else o.sprite=s;if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.wrap=A(),o.typeC4Shape={text:t},o.parentBoundary=u},addDeploymentNode:function(t,e,n,a,i,s,r,l){if(null===e||null===n)return;let o={};const c=y.find((t=>t.alias===e));if(c&&e===c.alias?o=c:(o.alias=e,y.push(o)),o.label=null==n?{text:""}:{text:n},null==a)o.type={text:"node"};else if("object"==typeof a){let[t,e]=Object.entries(a)[0];o[t]={text:e}}else o.type={text:a};if(null==i)o.descr={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];o[t]={text:e}}else o.descr={text:i};if("object"==typeof r){let[t,e]=Object.entries(r)[0];o[t]=e}else o.tags=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];o[t]=e}else o.link=l;o.nodeType=t,o.parentBoundary=u,o.wrap=A(),p=u,u=e,d.push(p)},popBoundaryParseStack:function(){u=p,d.pop(),p=d.pop(),d.push(p)},addRel:function(t,e,n,a,i,s,r,l,o){if(null==t||null==e||null==n||null==a)return;let c={};const h=f.find((t=>t.from===e&&t.to===n));if(h?c=h:f.push(c),c.type=t,c.from=e,c.to=n,c.label={text:a},null==i)c.techn={text:""};else if("object"==typeof i){let[t,e]=Object.entries(i)[0];c[t]={text:e}}else c.techn={text:i};if(null==s)c.descr={text:""};else if("object"==typeof s){let[t,e]=Object.entries(s)[0];c[t]={text:e}}else c.descr={text:s};if("object"==typeof r){let[t,e]=Object.entries(r)[0];c[t]=e}else c.sprite=r;if("object"==typeof l){let[t,e]=Object.entries(l)[0];c[t]=e}else c.tags=l;if("object"==typeof o){let[t,e]=Object.entries(o)[0];c[t]=e}else c.link=o;c.wrap=A()},updateElStyle:function(t,e,n,a,i,s,r,l,o,c,d){let u=h.find((t=>t.alias===e));if(void 0!==u||(u=y.find((t=>t.alias===e)),void 0!==u)){if(null!=n)if("object"==typeof n){let[t,e]=Object.entries(n)[0];u[t]=e}else u.bgColor=n;if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];u[t]=e}else u.fontColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];u[t]=e}else u.borderColor=i;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];u[t]=e}else u.shadowing=s;if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];u[t]=e}else u.shape=r;if(null!=l)if("object"==typeof l){let[t,e]=Object.entries(l)[0];u[t]=e}else u.sprite=l;if(null!=o)if("object"==typeof o){let[t,e]=Object.entries(o)[0];u[t]=e}else u.techn=o;if(null!=c)if("object"==typeof c){let[t,e]=Object.entries(c)[0];u[t]=e}else u.legendText=c;if(null!=d)if("object"==typeof d){let[t,e]=Object.entries(d)[0];u[t]=e}else u.legendSprite=d}},updateRelStyle:function(t,e,n,a,i,s,r){const l=f.find((t=>t.from===e&&t.to===n));if(void 0!==l){if(null!=a)if("object"==typeof a){let[t,e]=Object.entries(a)[0];l[t]=e}else l.textColor=a;if(null!=i)if("object"==typeof i){let[t,e]=Object.entries(i)[0];l[t]=e}else l.lineColor=i;if(null!=s)if("object"==typeof s){let[t,e]=Object.entries(s)[0];l[t]=parseInt(e)}else l.offsetX=parseInt(s);if(null!=r)if("object"==typeof r){let[t,e]=Object.entries(r)[0];l[t]=parseInt(e)}else l.offsetY=parseInt(r)}},updateLayoutConfig:function(t,e,n){let a=x,i=_;if("object"==typeof e){const t=Object.values(e)[0];a=parseInt(t)}else a=parseInt(e);if("object"==typeof n){const t=Object.values(n)[0];i=parseInt(t)}else i=parseInt(n);a>=1&&(x=a),i>=1&&(_=i)},autoWrap:A,setWrap:function(t){g=t},getC4ShapeArray:E,getC4Shape:function(t){return h.find((e=>e.alias===t))},getC4ShapeKeys:function(t){return Object.keys(E(t))},getBoundarys:function(t){return null==t?y:y.filter((e=>e.parentBoundary===t))},getCurrentBoundaryParse:function(){return u},getParentBoundaryParse:function(){return p},getRels:function(){return f},getTitle:function(){return b},getC4Type:function(){return m},getC4ShapeInRow:function(){return x},getC4BoundaryInRow:function(){return _},setAccTitle:a.s,getAccTitle:a.g,getAccDescription:a.a,setAccDescription:a.b,getConfig:()=>(0,a.c)().c4,clear:function(){h=[],y=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],p="",u="global",d=[""],f=[],d=[""],b="",g=!1,x=4,_=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){let e=(0,a.d)(t,(0,a.c)());b=e},setC4Type:function(t){let e=(0,a.d)(t,(0,a.c)());m=e}},C=function(t,e){return(0,s.d)(t,e)},k=function(t,e,n,a,i,s){const l=t.append("image");l.attr("width",e),l.attr("height",n),l.attr("x",a),l.attr("y",i);let o=s.startsWith("data:image/png;base64")?s:(0,r.Nm)(s);l.attr("xlink:href",o)},O=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),v=function(){function t(t,e,n,a,s,r,l){i(e.append("text").attr("x",n+s/2).attr("y",a+r/2+5).style("text-anchor","middle").text(t),l)}function e(t,e,n,s,r,l,o,c){const{fontSize:h,fontFamily:d,fontWeight:u}=c,p=t.split(a.e.lineBreakRegex);for(let a=0;a<p.length;a++){const t=a*h-h*(p.length-1)/2,l=e.append("text").attr("x",n+r/2).attr("y",s).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",h).style("font-weight",u).style("font-family",d);l.append("tspan").attr("dy",t).text(p[a]).attr("alignment-baseline","mathematical"),i(l,o)}}function n(t,n,a,s,r,l,o,c){const h=n.append("switch"),d=h.append("foreignObject").attr("x",a).attr("y",s).attr("width",r).attr("height",l).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,h,a,s,r,0,o,c),i(d,o)}function i(t,e){for(const n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(a){return"fo"===a.textPlacement?n:"old"===a.textPlacement?t:e}}(),T=function(t,e,n){const a=t.append("g");let i=e.bgColor?e.bgColor:"none",s=e.borderColor?e.borderColor:"#444444",r=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let o={x:e.x,y:e.y,fill:i,stroke:s,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};C(a,o);let c=n.boundaryFont();c.fontWeight="bold",c.fontSize=c.fontSize+2,c.fontColor=r,v(n)(e.label.text,a,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},c),e.type&&""!==e.type.text&&(c=n.boundaryFont(),c.fontColor=r,v(n)(e.type.text,a,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},c)),e.descr&&""!==e.descr.text&&(c=n.boundaryFont(),c.fontSize=c.fontSize-2,c.fontColor=r,v(n)(e.descr.text,a,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},c))},w=function(t,e,n){var a;let i=e.bgColor?e.bgColor:n[e.typeC4Shape.text+"_bg_color"],r=e.borderColor?e.borderColor:n[e.typeC4Shape.text+"_border_color"],l=e.fontColor?e.fontColor:"#FFFFFF",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII="}const c=t.append("g");c.attr("class","person-man");const h=(0,s.g)();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":h.x=e.x,h.y=e.y,h.fill=i,h.width=e.width,h.height=e.height,h.stroke=r,h.rx=2.5,h.ry=2.5,h.attrs={"stroke-width":.5},C(c,h);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":c.append("path").attr("fill",i).attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),c.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",r).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2))}let d=O(n,e.typeC4Shape.text);switch(c.append("text").attr("fill",l).attr("font-family",d.fontFamily).attr("font-size",d.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":k(c,48,48,e.x+e.width/2-24,e.y+e.image.Y,o)}let u=n[e.typeC4Shape.text+"Font"]();return u.fontWeight="bold",u.fontSize=u.fontSize+2,u.fontColor=l,v(n)(e.label.text,c,e.x,e.y+e.label.Y,e.width,e.height,{fill:l},u),u=n[e.typeC4Shape.text+"Font"](),u.fontColor=l,e.techn&&""!==(null==(a=e.techn)?void 0:a.text)?v(n)(e.techn.text,c,e.x,e.y+e.techn.Y,e.width,e.height,{fill:l,"font-style":"italic"},u):e.type&&""!==e.type.text&&v(n)(e.type.text,c,e.x,e.y+e.type.Y,e.width,e.height,{fill:l,"font-style":"italic"},u),e.descr&&""!==e.descr.text&&(u=n.personFont(),u.fontColor=l,v(n)(e.descr.text,c,e.x,e.y+e.descr.Y,e.width,e.height,{fill:l},u)),e.height},R=(t,e,n)=>{const a=t.append("g");let i=0;for(let s of e){let t=s.textColor?s.textColor:"#444444",e=s.lineColor?s.lineColor:"#444444",r=s.offsetX?parseInt(s.offsetX):0,l=s.offsetY?parseInt(s.offsetY):0,o="";if(0===i){let t=a.append("line");t.attr("x1",s.startPoint.x),t.attr("y1",s.startPoint.y),t.attr("x2",s.endPoint.x),t.attr("y2",s.endPoint.y),t.attr("stroke-width","1"),t.attr("stroke",e),t.style("fill","none"),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)"),i=-1}else{let t=a.append("path");t.attr("fill","none").attr("stroke-width","1").attr("stroke",e).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",s.startPoint.x).replaceAll("starty",s.startPoint.y).replaceAll("controlx",s.startPoint.x+(s.endPoint.x-s.startPoint.x)/2-(s.endPoint.x-s.startPoint.x)/4).replaceAll("controly",s.startPoint.y+(s.endPoint.y-s.startPoint.y)/2).replaceAll("stopx",s.endPoint.x).replaceAll("stopy",s.endPoint.y)),"rel_b"!==s.type&&t.attr("marker-end","url("+o+"#arrowhead)"),"birel"!==s.type&&"rel_b"!==s.type||t.attr("marker-start","url("+o+"#arrowend)")}let c=n.messageFont();v(n)(s.label.text,a,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+l,s.label.width,s.label.height,{fill:t},c),s.techn&&""!==s.techn.text&&(c=n.messageFont(),v(n)("["+s.techn.text+"]",a,Math.min(s.startPoint.x,s.endPoint.x)+Math.abs(s.endPoint.x-s.startPoint.x)/2+r,Math.min(s.startPoint.y,s.endPoint.y)+Math.abs(s.endPoint.y-s.startPoint.y)/2+n.messageFontSize+5+l,Math.max(s.label.width,s.techn.width),s.techn.height,{fill:t,"font-style":"italic"},c))}},D=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},N=function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},P=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},M=function(t){const e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},j=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},B=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},Y=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")};let L=0,I=0,U=4,F=2;l.yy=S;let X={};class z{constructor(t){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,W(t.db.getConfig())}setData(t,e,n,a){this.nextData.startx=this.data.startx=t,this.nextData.stopx=this.data.stopx=e,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=a}updateVal(t,e,n,a){void 0===t[e]?t[e]=n:t[e]=a(n,t[e])}insert(t){this.nextData.cnt=this.nextData.cnt+1;let e=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+t.margin:this.nextData.stopx+2*t.margin,n=e+t.width,a=this.nextData.starty+2*t.margin,i=a+t.height;(e>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>U)&&(e=this.nextData.startx+t.margin+X.nextLinePaddingX,a=this.nextData.stopy+2*t.margin,this.nextData.stopx=n=e+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=a+t.height,this.nextData.cnt=1),t.x=e,t.y=a,this.updateVal(this.data,"startx",e,Math.min),this.updateVal(this.data,"starty",a,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",i,Math.max),this.updateVal(this.nextData,"startx",e,Math.min),this.updateVal(this.nextData,"starty",a,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",i,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},W(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}}const W=function(t){(0,a.f)(X,t),t.fontFamily&&(X.personFontFamily=X.systemFontFamily=X.messageFontFamily=t.fontFamily),t.fontSize&&(X.personFontSize=X.systemFontSize=X.messageFontSize=t.fontSize),t.fontWeight&&(X.personFontWeight=X.systemFontWeight=X.messageFontWeight=t.fontWeight)},Q=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),$=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight});function q(t,e,n,i,s){if(!e[t].width)if(n)e[t].text=(0,a.w)(e[t].text,s,i),e[t].textLines=e[t].text.split(a.e.lineBreakRegex).length,e[t].width=s,e[t].height=(0,a.j)(e[t].text,i);else{let n=e[t].text.split(a.e.lineBreakRegex);e[t].textLines=n.length;let s=0;e[t].height=0,e[t].width=0;for(const r of n)e[t].width=Math.max((0,a.h)(r,i),e[t].width),s=(0,a.j)(r,i),e[t].height=e[t].height+s}}const V=function(t,e,n){e.x=n.data.startx,e.y=n.data.starty,e.width=n.data.stopx-n.data.startx,e.height=n.data.stopy-n.data.starty,e.label.y=X.c4ShapeMargin-35;let i=e.wrap&&X.wrap,s=$(X);s.fontSize=s.fontSize+2,s.fontWeight="bold",q("label",e,i,s,(0,a.h)(e.label.text,s)),T(t,e,X)},G=function(t,e,n,i){let s=0;for(const r of i){s=0;const i=n[r];let l=Q(X,i.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,i.typeC4Shape.width=(0,a.h)("\xab"+i.typeC4Shape.text+"\xbb",l),i.typeC4Shape.height=l.fontSize+2,i.typeC4Shape.Y=X.c4ShapePadding,s=i.typeC4Shape.Y+i.typeC4Shape.height-4,i.image={width:0,height:0,Y:0},i.typeC4Shape.text){case"person":case"external_person":i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height}i.sprite&&(i.image.width=48,i.image.height=48,i.image.Y=s,s=i.image.Y+i.image.height);let o=i.wrap&&X.wrap,c=X.width-2*X.c4ShapePadding,h=Q(X,i.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",q("label",i,o,h,c),i.label.Y=s+8,s=i.label.Y+i.label.height,i.type&&""!==i.type.text){i.type.text="["+i.type.text+"]",q("type",i,o,Q(X,i.typeC4Shape.text),c),i.type.Y=s+5,s=i.type.Y+i.type.height}else if(i.techn&&""!==i.techn.text){i.techn.text="["+i.techn.text+"]",q("techn",i,o,Q(X,i.techn.text),c),i.techn.Y=s+5,s=i.techn.Y+i.techn.height}let d=s,u=i.label.width;if(i.descr&&""!==i.descr.text){q("descr",i,o,Q(X,i.typeC4Shape.text),c),i.descr.Y=s+20,s=i.descr.Y+i.descr.height,u=Math.max(i.label.width,i.descr.width),d=s-5*i.descr.textLines}u+=X.c4ShapePadding,i.width=Math.max(i.width||X.width,u,X.width),i.height=Math.max(i.height||X.height,d,X.height),i.margin=i.margin||X.c4ShapeMargin,t.insert(i),w(e,i,X)}t.bumpLastMargin(X.c4ShapeMargin)};class H{constructor(t,e){this.x=t,this.y=e}}let K=function(t,e){let n=t.x,a=t.y,i=e.x,s=e.y,r=n+t.width/2,l=a+t.height/2,o=Math.abs(n-i),c=Math.abs(a-s),h=c/o,d=t.height/t.width,u=null;return a==s&&n<i?u=new H(n+t.width,l):a==s&&n>i?u=new H(n,l):n==i&&a<s?u=new H(r,a+t.height):n==i&&a>s&&(u=new H(r,a)),n>i&&a<s?u=d>=h?new H(n,l+h*t.width/2):new H(r-o/c*t.height/2,a+t.height):n<i&&a<s?u=d>=h?new H(n+t.width,l+h*t.width/2):new H(r+o/c*t.height/2,a+t.height):n<i&&a>s?u=d>=h?new H(n+t.width,l-h*t.width/2):new H(r+t.height/2*o/c,a):n>i&&a>s&&(u=d>=h?new H(n,l-t.width/2*h):new H(r-t.height/2*o/c,a)),u},J=function(t,e){let n={x:0,y:0};n.x=e.x+e.width/2,n.y=e.y+e.height/2;let a=K(t,n);return n.x=t.x+t.width/2,n.y=t.y+t.height/2,{startPoint:a,endPoint:K(e,n)}};function Z(t,e,n,a,i){let s=new z(i);s.data.widthLimit=n.data.widthLimit/Math.min(F,a.length);for(let[r,l]of a.entries()){let a=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=a,a=l.image.Y+l.image.height);let o=l.wrap&&X.wrap,c=$(X);if(c.fontSize=c.fontSize+2,c.fontWeight="bold",q("label",l,o,c,s.data.widthLimit),l.label.Y=a+8,a=l.label.Y+l.label.height,l.type&&""!==l.type.text){l.type.text="["+l.type.text+"]",q("type",l,o,$(X),s.data.widthLimit),l.type.Y=a+5,a=l.type.Y+l.type.height}if(l.descr&&""!==l.descr.text){let t=$(X);t.fontSize=t.fontSize-2,q("descr",l,o,t,s.data.widthLimit),l.descr.Y=a+20,a=l.descr.Y+l.descr.height}if(0==r||r%F==0){let t=n.data.startx+X.diagramMarginX,e=n.data.stopy+X.diagramMarginY+a;s.setData(t,t,e,e)}else{let t=s.data.stopx!==s.data.startx?s.data.stopx+X.diagramMarginX:s.data.startx,e=s.data.starty;s.setData(t,t,e,e)}s.name=l.alias;let h=i.db.getC4ShapeArray(l.alias),d=i.db.getC4ShapeKeys(l.alias);d.length>0&&G(s,t,h,d),e=l.alias;let u=i.db.getBoundarys(e);u.length>0&&Z(t,e,s,u,i),"global"!==l.alias&&V(t,l,s),n.data.stopy=Math.max(s.data.stopy+X.c4ShapeMargin,n.data.stopy),n.data.stopx=Math.max(s.data.stopx+X.c4ShapeMargin,n.data.stopx),L=Math.max(L,n.data.stopx),I=Math.max(I,n.data.stopy)}}const tt={drawPersonOrSystemArray:G,drawBoundary:V,setConf:W,draw:function(t,e,n,s){X=(0,a.c)().c4;const r=(0,a.c)().securityLevel;let l;"sandbox"===r&&(l=(0,i.Ys)("#i"+e));const o="sandbox"===r?(0,i.Ys)(l.nodes()[0].contentDocument.body):(0,i.Ys)("body");let c=s.db;s.db.setWrap(X.wrap),U=c.getC4ShapeInRow(),F=c.getC4BoundaryInRow(),a.l.debug(`C:${JSON.stringify(X,null,2)}`);const h="sandbox"===r?o.select(`[id="${e}"]`):(0,i.Ys)(`[id="${e}"]`);B(h),j(h),Y(h);let d=new z(s);d.setData(X.diagramMarginX,X.diagramMarginX,X.diagramMarginY,X.diagramMarginY),d.data.widthLimit=screen.availWidth,L=X.diagramMarginX,I=X.diagramMarginY;const u=s.db.getTitle();Z(h,"",d,s.db.getBoundarys(""),s),D(h),N(h),M(h),P(h),function(t,e,n,i){let s=0;for(let l of e){s+=1;let t=l.wrap&&X.wrap,e={fontFamily:(r=X).messageFontFamily,fontSize:r.messageFontSize,fontWeight:r.messageFontWeight};"C4Dynamic"===i.db.getC4Type()&&(l.label.text=s+": "+l.label.text);let o=(0,a.h)(l.label.text,e);q("label",l,t,e,o),l.techn&&""!==l.techn.text&&(o=(0,a.h)(l.techn.text,e),q("techn",l,t,e,o)),l.descr&&""!==l.descr.text&&(o=(0,a.h)(l.descr.text,e),q("descr",l,t,e,o));let c=n(l.from),h=n(l.to),d=J(c,h);l.startPoint=d.startPoint,l.endPoint=d.endPoint}var r;R(t,e,X)}(h,s.db.getRels(),s.db.getC4Shape,s),d.data.stopx=L,d.data.stopy=I;const p=d.data;let y=p.stopy-p.starty+2*X.diagramMarginY;const f=p.stopx-p.startx+2*X.diagramMarginX;u&&h.append("text").text(u).attr("x",(p.stopx-p.startx)/2-4*X.diagramMarginX).attr("y",p.starty+X.diagramMarginY),(0,a.i)(h,y,f,X.useMaxWidth);const b=u?60:0;h.attr("viewBox",p.startx-X.diagramMarginX+" -"+(X.diagramMarginY+b)+" "+f+" "+(y+b)),a.l.debug("models:",p)}},et={parser:o,db:S,renderer:tt,styles:t=>`.person {\n stroke: ${t.personBorder};\n fill: ${t.personBkg};\n }\n`,init:({c4:t,wrap:e})=>{tt.setConf(t),S.setWrap(e)}}},66893:(t,e,n)=>{n.d(e,{a:()=>r,b:()=>c,c:()=>o,d:()=>s,e:()=>d,f:()=>l,g:()=>h});var a=n(17967),i=n(28758);const s=(t,e)=>{const n=t.append("rect");if(n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),void 0!==e.rx&&n.attr("rx",e.rx),void 0!==e.ry&&n.attr("ry",e.ry),void 0!==e.attrs)for(const a in e.attrs)n.attr(a,e.attrs[a]);return void 0!==e.class&&n.attr("class",e.class),n},r=(t,e)=>{const n={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};s(t,n).lower()},l=(t,e)=>{const n=e.text.replace(i.G," "),a=t.append("text");a.attr("x",e.x),a.attr("y",e.y),a.attr("class","legend"),a.style("text-anchor",e.anchor),void 0!==e.class&&a.attr("class",e.class);const s=a.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.text(n),a},o=(t,e,n,i)=>{const s=t.append("image");s.attr("x",e),s.attr("y",n);const r=(0,a.Nm)(i);s.attr("xlink:href",r)},c=(t,e,n,i)=>{const s=t.append("use");s.attr("x",e),s.attr("y",n);const r=(0,a.Nm)(i);s.attr("xlink:href",`#${r}`)},h=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),d=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0})}}]); \ No newline at end of file diff --git a/assets/js/8932.33d18fca.js b/assets/js/8932.33d18fca.js new file mode 100644 index 0000000000..f9e2f6176b --- /dev/null +++ b/assets/js/8932.33d18fca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8932],{78932:(t,e,a)=>{a.d(e,{a:()=>l,b:()=>B,c:()=>o,d:()=>I,e:()=>M,f:()=>j,g:()=>C,h:()=>A,i:()=>x,j:()=>N,k:()=>P,l:()=>d,m:()=>R,p:()=>_,s:()=>T,u:()=>h});var r=a(28758),n=a(64218),i=a(78314);const s={extension:(t,e,a)=>{r.l.trace("Making markers for ",a),t.append("defs").append("marker").attr("id",a+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",a+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",a+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},point:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",a+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",a+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(t,e,a)=>{t.append("marker").attr("id",a+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",a+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(t,e,a)=>{t.append("defs").append("marker").attr("id",a+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},l=(t,e,a,r)=>{e.forEach((e=>{s[e](t,a,r)}))};const o=(t,e,a,i)=>{let s=t||"";if("object"==typeof s&&(s=s[0]),(0,r.m)((0,r.c)().flowchart.htmlLabels)){s=s.replace(/\\n|\n/g,"<br />"),r.l.debug("vertexText"+s);let t=function(t){const e=(0,n.Ys)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=e.append("xhtml:div"),r=t.label,i=t.isNode?"nodeLabel":"edgeLabel";var s,l;return a.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+r+"</span>"),s=a,(l=t.labelStyle)&&s.attr("style",l),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}({isNode:i,label:(0,r.J)(s).replace(/fa[blrs]?:fa-[\w-]+/g,(t=>`<i class='${t.replace(":"," ")}'></i>`)),labelStyle:e.replace("fill:","color:")});return t}{const t=document.createElementNS("http://www.w3.org/2000/svg","text");t.setAttribute("style",e.replace("color:","fill:"));let r=[];r="string"==typeof s?s.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(s)?s:[];for(const e of r){const r=document.createElementNS("http://www.w3.org/2000/svg","tspan");r.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),r.setAttribute("dy","1em"),r.setAttribute("x","0"),a?r.setAttribute("class","title-row"):r.setAttribute("class","row"),r.textContent=e.trim(),t.appendChild(r)}return t}},d=async(t,e,a,s)=>{let l;const d=e.useHtmlLabels||(0,r.m)((0,r.c)().flowchart.htmlLabels);l=a||"node default";const h=t.insert("g").attr("class",l).attr("id",e.domId||e.id),c=h.insert("g").attr("class","label").attr("style",e.labelStyle);let y;y=void 0===e.labelText?"":"string"==typeof e.labelText?e.labelText:e.labelText[0];const p=c.node();let g;g="markdown"===e.labelType?(0,i.a)(c,(0,r.d)((0,r.J)(y),(0,r.c)()),{useHtmlLabels:d,width:e.width||(0,r.c)().flowchart.wrappingWidth,classes:"markdown-node-label"}):p.appendChild(o((0,r.d)((0,r.J)(y),(0,r.c)()),e.labelStyle,!1,s));let x=g.getBBox();const f=e.padding/2;if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=g.children[0],e=(0,n.Ys)(g),a=t.getElementsByTagName("img");if(a){const t=""===y.replace(/<img[^>]*>/g,"").trim();await Promise.all([...a].map((e=>new Promise((a=>{function n(){if(e.style.display="flex",e.style.flexDirection="column",t){const t=(0,r.c)().fontSize?(0,r.c)().fontSize:window.getComputedStyle(document.body).fontSize,a=5,n=parseInt(t,10)*a+"px";e.style.minWidth=n,e.style.maxWidth=n}else e.style.width="100%";a(e)}setTimeout((()=>{e.complete&&n()})),e.addEventListener("error",n),e.addEventListener("load",n)})))))}x=t.getBoundingClientRect(),e.attr("width",x.width),e.attr("height",x.height)}return d?c.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"):c.attr("transform","translate(0, "+-x.height/2+")"),e.centerLabel&&c.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),c.insert("rect",":first-child"),{shapeSvg:h,bbox:x,halfPadding:f,label:c}},h=(t,e)=>{const a=e.node().getBBox();t.width=a.width,t.height=a.height};function c(t,e,a,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+a/2+")")}function y(t,e,a,r){var n=t.x,i=t.y,s=n-r.x,l=i-r.y,o=Math.sqrt(e*e*l*l+a*a*s*s),d=Math.abs(e*a*s/o);r.x<n&&(d=-d);var h=Math.abs(e*a*l/o);return r.y<i&&(h=-h),{x:n+d,y:i+h}}function p(t,e,a,r){var n,i,s,l,o,d,h,c,y,p,x,f,u;if(n=e.y-t.y,s=t.x-e.x,o=e.x*t.y-t.x*e.y,y=n*a.x+s*a.y+o,p=n*r.x+s*r.y+o,!(0!==y&&0!==p&&g(y,p)||(i=r.y-a.y,l=a.x-r.x,d=r.x*a.y-a.x*r.y,h=i*t.x+l*t.y+d,c=i*e.x+l*e.y+d,0!==h&&0!==c&&g(h,c)||0==(x=n*l-i*s))))return f=Math.abs(x/2),{x:(u=s*d-l*o)<0?(u-f)/x:(u+f)/x,y:(u=i*o-n*d)<0?(u-f)/x:(u+f)/x}}function g(t,e){return t*e>0}const x=(t,e)=>{var a,r,n=t.x,i=t.y,s=e.x-n,l=e.y-i,o=t.width/2,d=t.height/2;return Math.abs(l)*o>Math.abs(s)*d?(l<0&&(d=-d),a=0===l?0:d*s/l,r=d):(s<0&&(o=-o),a=o,r=0===s?0:o*l/s),{x:n+a,y:i+r}},f={node:function(t,e){return t.intersect(e)},circle:function(t,e,a){return y(t,e,e,a)},ellipse:y,polygon:function(t,e,a){var r=t.x,n=t.y,i=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){s=Math.min(s,t.x),l=Math.min(l,t.y)})):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var o=r-t.width/2-s,d=n-t.height/2-l,h=0;h<e.length;h++){var c=e[h],y=e[h<e.length-1?h+1:0],g=p(t,a,{x:o+c.x,y:d+c.y},{x:o+y.x,y:d+y.y});g&&i.push(g)}return i.length?(i.length>1&&i.sort((function(t,e){var r=t.x-a.x,n=t.y-a.y,i=Math.sqrt(r*r+n*n),s=e.x-a.x,l=e.y-a.y,o=Math.sqrt(s*s+l*l);return i<o?-1:i===o?0:1})),i[0]):t},rect:x},u=(t,e,a)=>{const r=(t=>{const e=new Set;for(const a of t)switch(a){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(a)}return e})(t),n=e.height+2*a.padding,i=n/2,s=e.width+2*i+a.padding,l=a.padding/2;return r.has("right")&&r.has("left")&&r.has("up")&&r.has("down")?[{x:0,y:0},{x:i,y:0},{x:s/2,y:2*l},{x:s-i,y:0},{x:s,y:0},{x:s,y:-n/3},{x:s+2*l,y:-n/2},{x:s,y:-2*n/3},{x:s,y:-n},{x:s-i,y:-n},{x:s/2,y:-n-2*l},{x:i,y:-n},{x:0,y:-n},{x:0,y:-2*n/3},{x:-2*l,y:-n/2},{x:0,y:-n/3}]:r.has("right")&&r.has("left")&&r.has("up")?[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}]:r.has("right")&&r.has("left")&&r.has("down")?[{x:0,y:0},{x:i,y:-n},{x:s-i,y:-n},{x:s,y:0}]:r.has("right")&&r.has("up")&&r.has("down")?[{x:0,y:0},{x:s,y:-i},{x:s,y:-n+i},{x:0,y:-n}]:r.has("left")&&r.has("up")&&r.has("down")?[{x:s,y:0},{x:0,y:-i},{x:0,y:-n+i},{x:s,y:-n}]:r.has("right")&&r.has("left")?[{x:i,y:0},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n},{x:0,y:-n/2}]:r.has("up")&&r.has("down")?[{x:s/2,y:0},{x:0,y:-l},{x:i,y:-l},{x:i,y:-n+l},{x:0,y:-n+l},{x:s/2,y:-n},{x:s,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l},{x:s,y:-l}]:r.has("right")&&r.has("up")?[{x:0,y:0},{x:s,y:-i},{x:0,y:-n}]:r.has("right")&&r.has("down")?[{x:0,y:0},{x:s,y:0},{x:0,y:-n}]:r.has("left")&&r.has("up")?[{x:s,y:0},{x:0,y:-i},{x:s,y:-n}]:r.has("left")&&r.has("down")?[{x:s,y:0},{x:0,y:0},{x:s,y:-n}]:r.has("right")?[{x:i,y:-l},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n+l}]:r.has("left")?[{x:i,y:0},{x:i,y:-l},{x:s-i,y:-l},{x:s-i,y:-n+l},{x:i,y:-n+l},{x:i,y:-n},{x:0,y:-n/2}]:r.has("up")?[{x:i,y:-l},{x:i,y:-n+l},{x:0,y:-n+l},{x:s/2,y:-n},{x:s,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l}]:r.has("down")?[{x:s/2,y:0},{x:0,y:-l},{x:i,y:-l},{x:i,y:-n+l},{x:s-i,y:-n+l},{x:s-i,y:-l},{x:s,y:-l}]:[{x:0,y:0}]},w=t=>t?" "+t:"",b=(t,e)=>`${e||"node default"}${w(t.classes)} ${w(t.class)}`,m=async(t,e)=>{const{shapeSvg:a,bbox:n}=await d(t,e,b(e,void 0),!0),i=n.width+e.padding+(n.height+e.padding),s=[{x:i/2,y:0},{x:i,y:-i/2},{x:i/2,y:-i},{x:0,y:-i/2}];r.l.info("Question main (Circle)");const l=c(a,i,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return r.l.warn("Intersect called"),f.polygon(e,s,t)},a};function k(t,e,a,n){const i=[],s=t=>{i.push(t,0)},l=t=>{i.push(0,t)};e.includes("t")?(r.l.debug("add top border"),s(a)):l(a),e.includes("r")?(r.l.debug("add right border"),s(n)):l(n),e.includes("b")?(r.l.debug("add bottom border"),s(a)):l(a),e.includes("l")?(r.l.debug("add left border"),s(n)):l(n),t.attr("stroke-dasharray",i.join(" "))}const v=(t,e,a)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let n=70,i=10;"LR"===a&&(n=10,i=70);const s=r.append("rect").attr("x",-1*n/2).attr("y",-1*i/2).attr("width",n).attr("height",i).attr("class","fork-join");return h(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return f.rect(e,t)},r},L={rhombus:m,composite:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,"node "+e.classes,!0),s=a.insert("rect",":first-child"),l=e.positioned?e.width:n.width+e.padding,o=e.positioned?e.height:n.height+e.padding,c=e.positioned?-l/2:-n.width/2-i,y=e.positioned?-o/2:-n.height/2-i;if(s.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",c).attr("y",y).attr("width",l).attr("height",o),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(s,e.props.borders,l,o),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},question:m,rect:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,"node "+e.classes+" "+e.class,!0),s=a.insert("rect",":first-child"),l=e.positioned?e.width:n.width+e.padding,o=e.positioned?e.height:n.height+e.padding,c=e.positioned?-l/2:-n.width/2-i,y=e.positioned?-o/2:-n.height/2-i;if(s.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",c).attr("y",y).attr("width",l).attr("height",o),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(s,e.props.borders,l,o),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},labelRect:async(t,e)=>{const{shapeSvg:a}=await d(t,e,"label",!0);r.l.trace("Classes = ",e.class);const n=a.insert("rect",":first-child");if(n.attr("width",0).attr("height",0),a.attr("class","label edgeLabel"),e.props){const t=new Set(Object.keys(e.props));e.props.borders&&(k(n,e.props.borders,0,0),t.delete("borders")),t.forEach((t=>{r.l.warn(`Unknown node property ${t}`)}))}return h(e,n),e.intersect=function(t){return f.rect(e,t)},a},rectWithTitle:(t,e)=>{let a;a=e.classes?"node "+e.classes:"node default";const i=t.insert("g").attr("class",a).attr("id",e.domId||e.id),s=i.insert("rect",":first-child"),l=i.insert("line"),d=i.insert("g").attr("class","label"),c=e.labelText.flat?e.labelText.flat():e.labelText;let y="";y="object"==typeof c?c[0]:c,r.l.info("Label text abc79",y,c,"object"==typeof c);const p=d.node().appendChild(o(y,e.labelStyle,!0,!0));let g={width:0,height:0};if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=p.children[0],e=(0,n.Ys)(p);g=t.getBoundingClientRect(),e.attr("width",g.width),e.attr("height",g.height)}r.l.info("Text 2",c);const x=c.slice(1,c.length);let u=p.getBBox();const w=d.node().appendChild(o(x.join?x.join("<br/>"):x,e.labelStyle,!0,!0));if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=w.children[0],e=(0,n.Ys)(w);g=t.getBoundingClientRect(),e.attr("width",g.width),e.attr("height",g.height)}const b=e.padding/2;return(0,n.Ys)(w).attr("transform","translate( "+(g.width>u.width?0:(u.width-g.width)/2)+", "+(u.height+b+5)+")"),(0,n.Ys)(p).attr("transform","translate( "+(g.width<u.width?0:-(u.width-g.width)/2)+", 0)"),g=d.node().getBBox(),d.attr("transform","translate("+-g.width/2+", "+(-g.height/2-b+3)+")"),s.attr("class","outer title-state").attr("x",-g.width/2-b).attr("y",-g.height/2-b).attr("width",g.width+e.padding).attr("height",g.height+e.padding),l.attr("class","divider").attr("x1",-g.width/2-b).attr("x2",g.width/2+b).attr("y1",-g.height/2-b+u.height+b).attr("y2",-g.height/2-b+u.height+b),h(e,s),e.intersect=function(t){return f.rect(e,t)},i},choice:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=[{x:0,y:14},{x:14,y:0},{x:0,y:-14},{x:-14,y:0}];return a.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(t){return f.circle(e,14,t)},a},circle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,b(e,void 0),!0),s=a.insert("circle",":first-child");return s.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("Circle main"),h(e,s),e.intersect=function(t){return r.l.info("Circle intersect",e,n.width/2+i,t),f.circle(e,n.width/2+i,t)},a},doublecircle:async(t,e)=>{const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,b(e,void 0),!0),s=a.insert("g",":first-child"),l=s.insert("circle"),o=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+5).attr("width",n.width+e.padding+10).attr("height",n.height+e.padding+10),o.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),r.l.info("DoubleCircle main"),h(e,l),e.intersect=function(t){return r.l.info("DoubleCircle intersect",e,n.width/2+i+5,t),f.circle(e,n.width/2+i+5,t)},a},stadium:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.height+e.padding,i=r.width+n/4+e.padding,s=a.insert("rect",":first-child").attr("style",e.style).attr("rx",n/2).attr("ry",n/2).attr("x",-i/2).attr("y",-n/2).attr("width",i).attr("height",n);return h(e,s),e.intersect=function(t){return f.rect(e,t)},a},hexagon:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.height+e.padding,i=n/4,s=r.width+2*i+e.padding,l=[{x:i,y:0},{x:s-i,y:0},{x:s,y:-n/2},{x:s-i,y:-n},{x:i,y:-n},{x:0,y:-n/2}],o=c(a,s,n,l);return o.attr("style",e.style),h(e,o),e.intersect=function(t){return f.polygon(e,l,t)},a},block_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,void 0,!0),n=r.height+2*e.padding,i=n/2,s=r.width+2*i+e.padding,l=u(e.directions,r,e),o=c(a,s,n,l);return o.attr("style",e.style),h(e,o),e.intersect=function(t){return f.polygon(e,l,t)},a},rect_left_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}];return c(a,n,i,s).attr("style",e.style),e.width=n+i,e.height=i,e.intersect=function(t){return f.polygon(e,s,t)},a},lean_right:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},lean_left:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:2*i/6,y:0},{x:n+i/6,y:0},{x:n-2*i/6,y:-i},{x:-i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:-2*i/6,y:0},{x:n+2*i/6,y:0},{x:n-i/6,y:-i},{x:i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},inv_trapezoid:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:-2*i/6,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},rect_right_inv_arrow:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},cylinder:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.width+e.padding,i=n/2,s=i/(2.5+n/50),l=r.height+s+e.padding,o="M 0,"+s+" a "+i+","+s+" 0,0,0 "+n+" 0 a "+i+","+s+" 0,0,0 "+-n+" 0 l 0,"+l+" a "+i+","+s+" 0,0,0 "+n+" 0 l 0,"+-l,c=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",o).attr("transform","translate("+-n/2+","+-(l/2+s)+")");return h(e,c),e.intersect=function(t){const a=f.rect(e,t),r=a.x-e.x;if(0!=i&&(Math.abs(r)<e.width/2||Math.abs(r)==e.width/2&&Math.abs(a.y-e.y)>e.height/2-s)){let n=s*s*(1-r*r/(i*i));0!=n&&(n=Math.sqrt(n)),n=s-n,t.y-e.y>0&&(n=-n),a.y+=n}return a},a},start:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),h(e,r),e.intersect=function(t){return f.circle(e,7,t)},a},end:(t,e)=>{const a=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=a.insert("circle",":first-child"),n=a.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),h(e,n),e.intersect=function(t){return f.circle(e,7,t)},a},note:async(t,e)=>{e.useHtmlLabels||(0,r.c)().flowchart.htmlLabels||(e.centerLabel=!0);const{shapeSvg:a,bbox:n,halfPadding:i}=await d(t,e,"node "+e.classes,!0);r.l.info("Classes = ",e.classes);const s=a.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),h(e,s),e.intersect=function(t){return f.rect(e,t)},a},subroutine:async(t,e)=>{const{shapeSvg:a,bbox:r}=await d(t,e,b(e,void 0),!0),n=r.width+e.padding,i=r.height+e.padding,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],l=c(a,n,i,s);return l.attr("style",e.style),h(e,l),e.intersect=function(t){return f.polygon(e,s,t)},a},fork:v,join:v,class_box:(t,e)=>{const a=e.padding/2;let i;i=e.classes?"node "+e.classes:"node default";const s=t.insert("g").attr("class",i).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),d=s.insert("line"),c=s.insert("line");let y=0,p=4;const g=s.insert("g").attr("class","label");let x=0;const u=e.classData.annotations&&e.classData.annotations[0],w=e.classData.annotations[0]?"\xab"+e.classData.annotations[0]+"\xbb":"",b=g.node().appendChild(o(w,e.labelStyle,!0,!0));let m=b.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=b.children[0],e=(0,n.Ys)(b);m=t.getBoundingClientRect(),e.attr("width",m.width),e.attr("height",m.height)}e.classData.annotations[0]&&(p+=m.height+4,y+=m.width);let k=e.classData.label;void 0!==e.classData.type&&""!==e.classData.type&&((0,r.c)().flowchart.htmlLabels?k+="<"+e.classData.type+">":k+="<"+e.classData.type+">");const v=g.node().appendChild(o(k,e.labelStyle,!0,!0));(0,n.Ys)(v).attr("class","classTitle");let L=v.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=v.children[0],e=(0,n.Ys)(v);L=t.getBoundingClientRect(),e.attr("width",L.width),e.attr("height",L.height)}p+=L.height+4,L.width>y&&(y=L.width);const S=[];e.classData.members.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=g.node().appendChild(o(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ys)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>y&&(y=l.width),p+=l.height+4,S.push(s)})),p+=8;const M=[];if(e.classData.methods.forEach((t=>{const a=t.getDisplayDetails();let i=a.displayText;(0,r.c)().flowchart.htmlLabels&&(i=i.replace(/</g,"<").replace(/>/g,">"));const s=g.node().appendChild(o(i,a.cssStyle?a.cssStyle:e.labelStyle,!0,!0));let l=s.getBBox();if((0,r.m)((0,r.c)().flowchart.htmlLabels)){const t=s.children[0],e=(0,n.Ys)(s);l=t.getBoundingClientRect(),e.attr("width",l.width),e.attr("height",l.height)}l.width>y&&(y=l.width),p+=l.height+4,M.push(s)})),p+=8,u){let t=(y-m.width)/2;(0,n.Ys)(b).attr("transform","translate( "+(-1*y/2+t)+", "+-1*p/2+")"),x=m.height+4}let T=(y-L.width)/2;return(0,n.Ys)(v).attr("transform","translate( "+(-1*y/2+T)+", "+(-1*p/2+x)+")"),x+=L.height+4,d.attr("class","divider").attr("x1",-y/2-a).attr("x2",y/2+a).attr("y1",-p/2-a+8+x).attr("y2",-p/2-a+8+x),x+=8,S.forEach((t=>{(0,n.Ys)(t).attr("transform","translate( "+-y/2+", "+(-1*p/2+x+4)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),x+=8,c.attr("class","divider").attr("x1",-y/2-a).attr("x2",y/2+a).attr("y1",-p/2-a+8+x).attr("y2",-p/2-a+8+x),x+=8,M.forEach((t=>{(0,n.Ys)(t).attr("transform","translate( "+-y/2+", "+(-1*p/2+x)+")");const e=null==t?void 0:t.getBBox();x+=((null==e?void 0:e.height)??0)+4})),l.attr("style",e.style).attr("class","outer title-state").attr("x",-y/2-a).attr("y",-p/2-a).attr("width",y+e.padding).attr("height",p+e.padding),h(e,l),e.intersect=function(t){return f.rect(e,t)},s}};let S={};const M=async(t,e,a)=>{let n,i;if(e.link){let s;"sandbox"===(0,r.c)().securityLevel?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s),i=await L[e.shape](n,e,a)}else i=await L[e.shape](t,e,a),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),n.attr("data-node","true"),n.attr("data-id",e.id),S[e.id]=n,e.haveCallback&&S[e.id].attr("class",S[e.id].attr("class")+" clickable"),n},T=(t,e)=>{S[e.id]=t},B=()=>{S={}},_=t=>{const e=S[t.id];r.l.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const a=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+a-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),a},C=({flowchart:t})=>{var e,a;const r=(null==(e=null==t?void 0:t.subGraphTitleMargin)?void 0:e.top)??0,n=(null==(a=null==t?void 0:t.subGraphTitleMargin)?void 0:a.bottom)??0;return{subGraphTitleTopMargin:r,subGraphTitleBottomMargin:n,subGraphTitleTotalMargin:r+n}},E={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function Y(t,e){if(void 0===t||void 0===e)return{angle:0,deltaX:0,deltaY:0};t=$(t),e=$(e);const[a,r]=[t.x,t.y],[n,i]=[e.x,e.y],s=n-a,l=i-r;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}const $=t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,P=t=>({x:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(E,t.arrowTypeStart)){const{angle:e,deltaX:a}=Y(r[0],r[1]);n=E[t.arrowTypeStart]*Math.cos(e)*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(E,t.arrowTypeEnd)){const{angle:e,deltaX:a}=Y(r[r.length-1],r[r.length-2]);n=E[t.arrowTypeEnd]*Math.cos(e)*(a>=0?1:-1)}return $(e).x+n},y:function(e,a,r){let n=0;if(0===a&&Object.hasOwn(E,t.arrowTypeStart)){const{angle:e,deltaY:a}=Y(r[0],r[1]);n=E[t.arrowTypeStart]*Math.abs(Math.sin(e))*(a>=0?1:-1)}else if(a===r.length-1&&Object.hasOwn(E,t.arrowTypeEnd)){const{angle:e,deltaY:a}=Y(r[r.length-1],r[r.length-2]);n=E[t.arrowTypeEnd]*Math.abs(Math.sin(e))*(a>=0?1:-1)}return $(e).y+n}}),R=(t,e,a,r,n)=>{e.arrowTypeStart&&W(t,"start",e.arrowTypeStart,a,r,n),e.arrowTypeEnd&&W(t,"end",e.arrowTypeEnd,a,r,n)},O={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},W=(t,e,a,n,i,s)=>{const l=O[a];if(!l)return void r.l.warn(`Unknown arrow type: ${a}`);const o="start"===e?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${s}-${l}${o})`)};let X={},H={};const I=()=>{X={},H={}},j=(t,e)=>{const a=(0,r.m)((0,r.c)().flowchart.htmlLabels),s="markdown"===e.labelType?(0,i.a)(t,e.label,{style:e.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):o(e.label,e.labelStyle),l=t.insert("g").attr("class","edgeLabel"),d=l.insert("g").attr("class","label");d.node().appendChild(s);let h,c=s.getBBox();if(a){const t=s.children[0],e=(0,n.Ys)(s);c=t.getBoundingClientRect(),e.attr("width",c.width),e.attr("height",c.height)}if(d.attr("transform","translate("+-c.width/2+", "+-c.height/2+")"),X[e.id]=l,e.width=c.width,e.height=c.height,e.startLabelLeft){const a=o(e.startLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),H[e.id]||(H[e.id]={}),H[e.id].startLeft=r,D(h,e.startLabelLeft)}if(e.startLabelRight){const a=o(e.startLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=r.node().appendChild(a),n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),H[e.id]||(H[e.id]={}),H[e.id].startRight=r,D(h,e.startLabelRight)}if(e.endLabelLeft){const a=o(e.endLabelLeft,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),H[e.id]||(H[e.id]={}),H[e.id].endLeft=r,D(h,e.endLabelLeft)}if(e.endLabelRight){const a=o(e.endLabelRight,e.labelStyle),r=t.insert("g").attr("class","edgeTerminals"),n=r.insert("g").attr("class","inner");h=n.node().appendChild(a);const i=a.getBBox();n.attr("transform","translate("+-i.width/2+", "+-i.height/2+")"),r.node().appendChild(a),H[e.id]||(H[e.id]={}),H[e.id].endRight=r,D(h,e.endLabelRight)}return s};function D(t,e){(0,r.c)().flowchart.htmlLabels&&t&&(t.style.width=9*e.length+"px",t.style.height="12px")}const N=(t,e)=>{r.l.debug("Moving label abc88 ",t.id,t.label,X[t.id],e);let a=e.updatedPath?e.updatedPath:e.originalPath;const n=(0,r.c)(),{subGraphTitleTotalMargin:i}=C(n);if(t.label){const n=X[t.id];let s=t.x,l=t.y;if(a){const n=r.u.calcLabelPosition(a);r.l.debug("Moving label "+t.label+" from (",s,",",l,") to (",n.x,",",n.y,") abc88"),e.updatedPath&&(s=n.x,l=n.y)}n.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){const e=H[t.id].startLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.startLabelRight){const e=H[t.id].startRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelLeft){const e=H[t.id].endLeft;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}if(t.endLabelRight){const e=H[t.id].endRight;let n=t.x,i=t.y;if(a){const e=r.u.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",a);n=e.x,i=e.y}e.attr("transform",`translate(${n}, ${i})`)}},U=(t,e)=>{r.l.debug("abc88 cutPathAtIntersect",t,e);let a=[],n=t[0],i=!1;return t.forEach((t=>{if(((t,e)=>{const a=t.x,r=t.y,n=Math.abs(e.x-a),i=Math.abs(e.y-r),s=t.width/2,l=t.height/2;return n>=s||i>=l})(e,t)||i)n=t,i||a.push(t);else{const s=((t,e,a)=>{r.l.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(e)}\n insidePoint : ${JSON.stringify(a)}\n node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,s=Math.abs(n-a.x),l=t.width/2;let o=a.x<e.x?l-s:l+s;const d=t.height/2,h=Math.abs(e.y-a.y),c=Math.abs(e.x-a.x);if(Math.abs(i-e.y)*l>Math.abs(n-e.x)*d){let t=a.y<e.y?e.y-d-i:i-d-e.y;o=c*t/h;const n={x:a.x<e.x?a.x+o:a.x-c+o,y:a.y<e.y?a.y+h-t:a.y-h+t};return 0===o&&(n.x=e.x,n.y=e.y),0===c&&(n.x=e.x),0===h&&(n.y=e.y),r.l.debug(`abc89 topp/bott calc, Q ${h}, q ${t}, R ${c}, r ${o}`,n),n}{o=a.x<e.x?e.x-l-n:n-l-e.x;let t=h*o/c,i=a.x<e.x?a.x+c-o:a.x-c+o,s=a.y<e.y?a.y+t:a.y-t;return r.l.debug(`sides calc abc89, Q ${h}, q ${t}, R ${c}, r ${o}`,{_x:i,_y:s}),0===o&&(i=e.x,s=e.y),0===c&&(i=e.x),0===h&&(s=e.y),{x:i,y:s}}})(e,n,t);let l=!1;a.forEach((t=>{l=l||t.x===s.x&&t.y===s.y})),a.some((t=>t.x===s.x&&t.y===s.y))||a.push(s),i=!0}})),a},A=function(t,e,a,i,s,l,o){let d=a.points;r.l.debug("abc88 InsertEdge: edge=",a,"e=",e);let h=!1;const c=l.node(e.v);var y=l.node(e.w);(null==y?void 0:y.intersect)&&(null==c?void 0:c.intersect)&&(d=d.slice(1,a.points.length-1),d.unshift(c.intersect(d[0])),d.push(y.intersect(d[d.length-1]))),a.toCluster&&(r.l.debug("to cluster abc88",i[a.toCluster]),d=U(a.points,i[a.toCluster].node),h=!0),a.fromCluster&&(r.l.debug("from cluster abc88",i[a.fromCluster]),d=U(d.reverse(),i[a.fromCluster].node).reverse(),h=!0);const p=d.filter((t=>!Number.isNaN(t.y)));let g=n.$0Z;!a.curve||"graph"!==s&&"flowchart"!==s||(g=a.curve);const{x:x,y:f}=P(a),u=(0,n.jvg)().x(x).y(f).curve(g);let w;switch(a.thickness){case"normal":w="edge-thickness-normal";break;case"thick":case"invisible":w="edge-thickness-thick";break;default:w=""}switch(a.pattern){case"solid":w+=" edge-pattern-solid";break;case"dotted":w+=" edge-pattern-dotted";break;case"dashed":w+=" edge-pattern-dashed"}const b=t.append("path").attr("d",u(p)).attr("id",a.id).attr("class"," "+w+(a.classes?" "+a.classes:"")).attr("style",a.style);let m="";((0,r.c)().flowchart.arrowMarkerAbsolute||(0,r.c)().state.arrowMarkerAbsolute)&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),R(b,a,m,o,s);let k={};return h&&(k.updatedPath=d),k.originalPath=a.points,k}}}]); \ No newline at end of file diff --git a/assets/js/8961bfac.d8e88269.js b/assets/js/8961bfac.d8e88269.js new file mode 100644 index 0000000000..ff56d8d4b4 --- /dev/null +++ b/assets/js/8961bfac.d8e88269.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9128],{60066:(s,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var a=n(85893),i=n(11151);const t={sidebar_position:3,description:"eCalc EXPRESSIONS"},l="Expressions",r={id:"about/modelling/setup/file_format_and_syntax/expressions",title:"Expressions",description:"eCalc EXPRESSIONS",source:"@site/docs/about/modelling/setup/file_format_and_syntax/expressions.md",sourceDirName:"about/modelling/setup/file_format_and_syntax",slug:"/about/modelling/setup/file_format_and_syntax/expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/file_format_and_syntax/expressions.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,description:"eCalc EXPRESSIONS"},sidebar:"about",previous:{title:"File format and syntax",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"},next:{title:"Time series",permalink:"/ecalc/docs/about/modelling/setup/time_series"}},c={},d=[{value:"Available operators",id:"available-operators",level:2},{value:"Examples",id:"examples",level:2},{value:"Combining data from different reservoir inputs",id:"combining-data-from-different-reservoir-inputs",level:3},{value:"Model of additional rate",id:"model-of-additional-rate",level:3}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msqrt:"msqrt",msub:"msub",p:"p",path:"path",pre:"pre",semantics:"semantics",span:"span",svg:"svg",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...s.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.h1,{id:"expressions",children:"Expressions"}),"\n",(0,a.jsx)(e.p,{children:"The variables needed in the energy functions for the variable consumers, may not always be directly found in the\nreservoir inputs. For example, there may be two group rates that should be added to be\nconsistent with the net rate through a compressor system. Or, it may be that a pressure defined in a network node is\nnot equal to the pressure at the inlet/outlet of a compressor system and some delta pressure must be added."}),"\n",(0,a.jsxs)(e.p,{children:["To avoid forcing the users to define new variables in the simulation files/CSV data and also keep the data in the\nconsumer\u2019s energy function consistent, the calculator supports expressions to define variables (and conditions in the\n",(0,a.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/CONDITIONS",children:"CONDITIONS"}),"."]}),"\n",(0,a.jsx)(e.admonition,{type:"warning",children:(0,a.jsxs)(e.p,{children:["When creating new variables from CSV files make sure to choose the right interpolation type!\nSee ",(0,a.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," for more information."]})}),"\n",(0,a.jsx)(e.h2,{id:"available-operators",children:"Available operators"}),"\n",(0,a.jsxs)(e.p,{children:["As reservoir simulation vectors (and also CSV headers) may include mathematical operators\nlike ",(0,a.jsx)(e.code,{children:"+"}),", ",(0,a.jsx)(e.code,{children:"-"})," in their names, the operators must be surrounded by curly brackets, ",(0,a.jsx)(e.code,{children:"{}"}),",\nin the expressions. Logical operators (",(0,a.jsx)(e.code,{children:">"}),", ",(0,a.jsx)(e.code,{children:">="}),", ",(0,a.jsx)(e.code,{children:"<"}),", ",(0,a.jsx)(e.code,{children:"<="}),", ",(0,a.jsx)(e.code,{children:"=="}),", ",(0,a.jsx)(e.code,{children:"!="}),")\nevaluates to ",(0,a.jsx)(e.code,{children:"0"})," or ",(0,a.jsx)(e.code,{children:"1"}),"."]}),"\n",(0,a.jsx)(e.p,{children:"The following operators are supported:"}),"\n",(0,a.jsxs)(e.table,{children:[(0,a.jsx)(e.thead,{children:(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.th,{children:"Operator"}),(0,a.jsx)(e.th,{children:"Description"}),(0,a.jsx)(e.th,{children:"Example"})]})}),(0,a.jsxs)(e.tbody,{children:[(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{+}"})}),(0,a.jsx)(e.td,{children:"Addition"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"2 {+} 1"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{-}"})}),(0,a.jsx)(e.td,{children:"Subtraction"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {-} 10"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{*}"})}),(0,a.jsx)(e.td,{children:"Multiplication"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {*} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{/}"})}),(0,a.jsx)(e.td,{children:"Division"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {/} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"{^}"})}),(0,a.jsx)(e.td,{children:"Power"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {^} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"( )"})}),(0,a.jsx)(e.td,{children:"Parentheses"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"( SIM;GAS {+} 2 ) {/} 2"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"<"})}),(0,a.jsx)(e.td,{children:"Less than"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL < 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"<="})}),(0,a.jsx)(e.td,{children:"Less than or equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL <= 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:">"})}),(0,a.jsx)(e.td,{children:"Greater than"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL > 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:">="})}),(0,a.jsx)(e.td,{children:"Greater than or equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM1;OIL >= 150) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"=="})}),(0,a.jsx)(e.td,{children:"Equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {+} (SIM;FLAG == 1) {*} 1000000"})})]}),(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"!="})}),(0,a.jsx)(e.td,{children:"Not equal"}),(0,a.jsx)(e.td,{children:(0,a.jsx)(e.code,{children:"SIM;GAS {-} (SIM;FLAG != 1) {*} 1000000"})})]})]})]}),"\n",(0,a.jsx)(e.h2,{id:"examples",children:"Examples"}),"\n",(0,a.jsx)(e.h3,{id:"combining-data-from-different-reservoir-inputs",children:"Combining data from different reservoir inputs"}),"\n",(0,a.jsxs)(e.p,{children:["The rate through a gas injection compressor is the sum of injection rate for the field plus\nsome additional injection rate for a tie-in (whose data is specified in a CSV file with\nkey ",(0,a.jsx)(e.code,{children:"SIM2"}),"):"]}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-yaml",children:"VARIABLES:\n total_rate_through_compressor:\n VALUE: SIM1;GAS_INJ {+} SIM2;GAS_INJ\n"})}),"\n",(0,a.jsx)(e.h3,{id:"model-of-additional-rate",children:"Model of additional rate"}),"\n",(0,a.jsxs)(e.p,{children:["The rate through a compressor is the produced rate plus some additional term. This term ",(0,a.jsx)(e.em,{children:"Q"})," is a function of pressures ",(0,a.jsxs)(e.span,{className:"katex",children:[(0,a.jsx)(e.span,{className:"katex-mathml",children:(0,a.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(e.semantics,{children:[(0,a.jsx)(e.mrow,{children:(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"1"})]})}),(0,a.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_{1}"})]})})}),(0,a.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"1"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]})]})})]})," and ",(0,a.jsxs)(e.span,{className:"katex",children:[(0,a.jsx)(e.span,{className:"katex-mathml",children:(0,a.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,a.jsxs)(e.semantics,{children:[(0,a.jsx)(e.mrow,{children:(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"2"})]})}),(0,a.jsx)(e.annotation,{encoding:"application/x-tex",children:"P_{2}"})]})})}),(0,a.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"2"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]})]})})]}),","]}),"\n",(0,a.jsx)(e.span,{className:"katex-display",children:(0,a.jsxs)(e.span,{className:"katex",children:[(0,a.jsx)(e.span,{className:"katex-mathml",children:(0,a.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,a.jsxs)(e.semantics,{children:[(0,a.jsxs)(e.mrow,{children:[(0,a.jsx)(e.mi,{children:"Q"}),(0,a.jsx)(e.mo,{children:"="}),(0,a.jsx)(e.mn,{children:"25000"}),(0,a.jsx)(e.mo,{children:"\u22c5"}),(0,a.jsx)(e.msqrt,{children:(0,a.jsxs)(e.mrow,{children:[(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"1"})]}),(0,a.jsx)(e.mo,{children:"\u22c5"}),(0,a.jsxs)(e.mrow,{children:[(0,a.jsx)(e.mo,{fence:"true",children:"("}),(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"2"})]}),(0,a.jsx)(e.mo,{children:"\u2212"}),(0,a.jsxs)(e.msub,{children:[(0,a.jsx)(e.mi,{children:"P"}),(0,a.jsx)(e.mn,{children:"1"})]}),(0,a.jsx)(e.mo,{fence:"true",children:")"})]})]})})]}),(0,a.jsx)(e.annotation,{encoding:"application/x-tex",children:"Q = 25000 \\cdot \\sqrt{P_{1} \\cdot \\left( P_{2} - P_{1} \\right)}"})]})})}),(0,a.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,a.jsx)(e.span,{className:"mord mathnormal",children:"Q"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,a.jsx)(e.span,{className:"mrel",children:"="}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"0.6444em"}}),(0,a.jsx)(e.span,{className:"mord",children:"25000"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,a.jsxs)(e.span,{className:"base",children:[(0,a.jsx)(e.span,{className:"strut",style:{height:"1.24em",verticalAlign:"-0.2561em"}}),(0,a.jsx)(e.span,{className:"mord sqrt",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsxs)(e.span,{className:"vlist",style:{height:"0.9839em"},children:[(0,a.jsxs)(e.span,{className:"svg-align",style:{top:"-3.2em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"3.2em"}}),(0,a.jsxs)(e.span,{className:"mord",style:{paddingLeft:"1em"},children:[(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"1"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(e.span,{className:"mbin",children:"\u22c5"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(e.span,{className:"minner",children:[(0,a.jsx)(e.span,{className:"mopen delimcenter",style:{top:"0em"},children:"("}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"2"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,a.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,a.jsxs)(e.span,{className:"mord",children:[(0,a.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.13889em"},children:"P"}),(0,a.jsx)(e.span,{className:"msupsub",children:(0,a.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,a.jsxs)(e.span,{className:"vlist-r",children:[(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.3011em"},children:(0,a.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,a.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:(0,a.jsx)(e.span,{className:"mord mtight",children:"1"})})})]})}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.15em"},children:(0,a.jsx)(e.span,{})})})]})})]}),(0,a.jsx)(e.span,{className:"mclose delimcenter",style:{top:"0em"},children:")"})]})]})]}),(0,a.jsxs)(e.span,{style:{top:"-2.9439em"},children:[(0,a.jsx)(e.span,{className:"pstrut",style:{height:"3.2em"}}),(0,a.jsx)(e.span,{className:"hide-tail",style:{minWidth:"1.02em",height:"1.28em"},children:(0,a.jsx)(e.svg,{xmlns:"http://www.w3.org/2000/svg",width:"400em",height:"1.28em",viewBox:"0 0 400000 1296",preserveAspectRatio:"xMinYMin slice",children:(0,a.jsx)(e.path,{d:"M263,681c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl0 -0\nc4.7,-7.3,11,-11,19,-11\nH40000v40H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM1001 80h400000v40h-400000z"})})})]})]}),(0,a.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,a.jsx)(e.span,{className:"vlist-r",children:(0,a.jsx)(e.span,{className:"vlist",style:{height:"0.2561em"},children:(0,a.jsx)(e.span,{})})})]})})]})]})]})}),"\n",(0,a.jsx)(e.p,{children:"The addition is only added when the reservoir gas rate is positive."}),"\n",(0,a.jsx)(e.pre,{children:(0,a.jsx)(e.code,{className:"language-yaml",children:"VARIABLES:\n rate:\n VALUE: SIM;GAS_PROD {+} ( SIM;GAS_PROD > 0 ) {*} 25000 {*} ( SIM;P1 {*} ( SIM;P2 {-} SIM;P1 ) ) {^} 0.5\n"})})]})}function m(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,a.jsx)(e,{...s,children:(0,a.jsx)(h,{...s})}):h(s)}},11151:(s,e,n)=>{n.d(e,{Z:()=>r,a:()=>l});var a=n(67294);const i={},t=a.createContext(i);function l(s){const e=a.useContext(t);return a.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:l(s.components),a.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/90184672.c0455df2.js b/assets/js/90184672.c0455df2.js new file mode 100644 index 0000000000..5e7c25486f --- /dev/null +++ b/assets/js/90184672.c0455df2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5932],{9353:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>E,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=r(85893),s=r(11151);const o={},c="INLET_TEMPERATURE",a={id:"about/references/keywords/INLET_TEMPERATURE",title:"INLET_TEMPERATURE",description:"MODELS / INLETTEMPERATURE",source:"@site/docs/about/references/keywords/INLET_TEMPERATURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INLET_TEMPERATURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INFLUENCE_TIME_VECTOR",permalink:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR"},next:{title:"INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"inlet_temperature",children:"INLET_TEMPERATURE"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," / ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",children:"INLET_TEMPERATURE"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Required"}),(0,t.jsx)(n.th,{children:"Child of"}),(0,t.jsx)(n.th,{children:"Children/Options"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Yes"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})}),(0,t.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["This is a keyword used in ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"COMPRESSOR MODELLING"}),". It is a necessary input parameter which describes the inlet temperature to a compressor stage. Temperature ",(0,t.jsx)(n.strong,{children:"must"})," be given in ",(0,t.jsx)("sup",{children:"o"}),"C."]}),"\n",(0,t.jsx)(n.p,{children:"As of now, this is can only be given as a single value. Time-series are not accepted here."}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n ...\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20 #degC\n ...\n"})})]})}function E(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(67294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/905.bff7f89c.js b/assets/js/905.bff7f89c.js new file mode 100644 index 0000000000..e37f76c37d --- /dev/null +++ b/assets/js/905.bff7f89c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[905],{46060:(e,t,n)=>{n.d(t,{c:()=>d});var r=n(49360),i=n(92346),a=n(43836);n(52544);function d(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:o(e),edges:l(e)};return r.Z(e.graph())||(t.value=i.Z(e.graph())),t}function o(e){return a.Z(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.Z(n)||(a.value=n),r.Z(i)||(a.parent=i),a}))}function l(e){return a.Z(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.Z(t.name)||(i.name=t.name),r.Z(n)||(i.value=n),i}))}},92346:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(48451);const i=function(e){return(0,r.Z)(e,4)}},60905:(e,t,n)=>{n.d(t,{r:()=>E});var r=n(41644),i=n(46060),a=n(78932),d=n(28758),o=n(45625),l=n(78314),s=n(64218);let c={},h={},g={};const f=(e,t)=>(d.l.trace("In isDecendant",t," ",e," = ",h[t].includes(e)),!!h[t].includes(e)),u=(e,t,n,r)=>{d.l.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),d.l.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach((i=>{if(t.children(i).length>0)u(i,t,n,r);else{const a=t.node(i);d.l.info("cp ",i," to ",r," with parent ",e),n.setNode(i,a),r!==t.parent(i)&&(d.l.warn("Setting parent",i,t.parent(i)),n.setParent(i,t.parent(i))),e!==r&&i!==e?(d.l.debug("Setting parent",i,e),n.setParent(i,e)):(d.l.info("In copy ",e,"root",r,"data",t.node(e),r),d.l.debug("Not Setting parent for node=",i,"cluster!==rootId",e!==r,"node!==clusterId",i!==e));const o=t.edges(i);d.l.debug("Copying Edges",o),o.forEach((i=>{d.l.info("Edge",i);const a=t.edge(i.v,i.w,i.name);d.l.info("Edge data",a,r);try{((e,t)=>(d.l.info("Decendants of ",t," is ",h[t]),d.l.info("Edge is ",e),e.v!==t&&e.w!==t&&(h[t]?h[t].includes(e.v)||f(e.v,t)||f(e.w,t)||h[t].includes(e.w):(d.l.debug("Tilt, ",t,",not in decendants"),!1))))(i,r)?(d.l.info("Copying as ",i.v,i.w,a,i.name),n.setEdge(i.v,i.w,a,i.name),d.l.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):d.l.info("Skipping copy of edge ",i.v,"--\x3e",i.w," rootId: ",r," clusterId:",e)}catch(o){d.l.error(o)}}))}d.l.debug("Removing node",i),t.removeNode(i)}))},w=(e,t)=>{const n=t.children(e);let r=[...n];for(const i of n)g[i]=e,r=[...r,...w(i,t)];return r},p=(e,t)=>{d.l.trace("Searching",e);const n=t.children(e);if(d.l.trace("Searching children of id ",e,n),n.length<1)return d.l.trace("This is a valid node",e),e;for(const r of n){const n=p(r,t);if(n)return d.l.trace("Found replacement for",e," => ",n),n}},v=e=>c[e]&&c[e].externalConnections&&c[e]?c[e].id:e,y=(e,t)=>{if(d.l.warn("extractor - ",t,i.c(e),e.children("D")),t>10)return void d.l.error("Bailing out");let n=e.nodes(),r=!1;for(const i of n){const t=e.children(i);r=r||t.length>0}if(r){d.l.debug("Nodes = ",n,t);for(const r of n)if(d.l.debug("Extracting node",r,c,c[r]&&!c[r].externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",t),c[r])if(!c[r].externalConnections&&e.children(r)&&e.children(r).length>0){d.l.warn("Cluster without external connections, without a parent and with children",r,t);let n="TB"===e.graph().rankdir?"LR":"TB";c[r]&&c[r].clusterData&&c[r].clusterData.dir&&(n=c[r].clusterData.dir,d.l.warn("Fixing dir",c[r].clusterData.dir,n));const a=new o.k({multigraph:!0,compound:!0}).setGraph({rankdir:n,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));d.l.warn("Old graph before copy",i.c(e)),u(r,e,a,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:c[r].clusterData,labelText:c[r].labelText,graph:a}),d.l.warn("New graph after copy node: (",r,")",i.c(a)),d.l.debug("Old graph after copy",i.c(e))}else d.l.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!c[r].externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),t),d.l.debug(c);else d.l.debug("Not a cluster",r,t);n=e.nodes(),d.l.warn("New list of nodes",n);for(const r of n){const n=e.node(r);d.l.warn(" Now next level",r,n),n.clusterNode&&y(n.graph,t+1)}}else d.l.debug("Done, no node has children",e.nodes())},x=(e,t)=>{if(0===t.length)return[];let n=Object.assign(t);return t.forEach((t=>{const r=e.children(t),i=x(e,r);n=[...n,...i]})),n},m={rect:(e,t)=>{d.l.info("Creating subgraph rect for ",t.id,t);const n=(0,d.c)(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),i=r.insert("rect",":first-child"),o=(0,d.m)(n.flowchart.htmlLabels),c=r.insert("g").attr("class","cluster-label"),h="markdown"===t.labelType?(0,l.a)(c,t.labelText,{style:t.labelStyle,useHtmlLabels:o}):c.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let g=h.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=h.children[0],t=(0,s.Ys)(h);g=e.getBoundingClientRect(),t.attr("width",g.width),t.attr("height",g.height)}const f=0*t.padding,u=f/2,w=t.width<=g.width+f?g.width+f:t.width;t.width<=g.width+f?t.diff=(g.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,d.l.trace("Data ",t,JSON.stringify(t)),i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-w/2).attr("y",t.y-t.height/2-u).attr("width",w).attr("height",t.height+f);const{subGraphTitleTopMargin:p}=(0,a.g)(n);o?c.attr("transform",`translate(${t.x-g.width/2}, ${t.y-t.height/2+p})`):c.attr("transform",`translate(${t.x}, ${t.y-t.height/2+p})`);const v=i.node().getBBox();return t.width=v.width,t.height=v.height,t.intersect=function(e){return(0,a.i)(t,e)},r},roundedWithTitle:(e,t)=>{const n=(0,d.c)(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),i=r.insert("rect",":first-child"),o=r.insert("g").attr("class","cluster-label"),l=r.append("rect"),c=o.node().appendChild((0,a.c)(t.labelText,t.labelStyle,void 0,!0));let h=c.getBBox();if((0,d.m)(n.flowchart.htmlLabels)){const e=c.children[0],t=(0,s.Ys)(c);h=e.getBoundingClientRect(),t.attr("width",h.width),t.attr("height",h.height)}h=c.getBBox();const g=0*t.padding,f=g/2,u=t.width<=h.width+t.padding?h.width+t.padding:t.width;t.width<=h.width+t.padding?t.diff=(h.width+0*t.padding-t.width)/2:t.diff=-t.padding/2,i.attr("class","outer").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f).attr("width",u+g).attr("height",t.height+g),l.attr("class","inner").attr("x",t.x-u/2-f).attr("y",t.y-t.height/2-f+h.height-1).attr("width",u+g).attr("height",t.height+g-h.height-3);const{subGraphTitleTopMargin:w}=(0,a.g)(n);o.attr("transform",`translate(${t.x-h.width/2}, ${t.y-t.height/2-t.padding/3+((0,d.m)(n.flowchart.htmlLabels)?5:3)+w})`);const p=i.node().getBBox();return t.height=p.height,t.intersect=function(e){return(0,a.i)(t,e)},r},noteGroup:(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2-d).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.intersect=function(e){return(0,a.i)(t,e)},n},divider:(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,d=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-d).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);const o=r.node().getBBox();return t.width=o.width,t.height=o.height,t.diff=-t.padding/2,t.intersect=function(e){return(0,a.i)(t,e)},n}};let b={};const C=async(e,t,n,o,l,s)=>{d.l.info("Graph in recursive render: XXX",i.c(t),l);const h=t.graph().rankdir;d.l.trace("Dir in recursive render - dir:",h);const g=e.insert("g").attr("class","root");t.nodes()?d.l.info("Recursive render XXX",t.nodes()):d.l.info("No nodes found for",t),t.edges().length>0&&d.l.trace("Recursive edges",t.edge(t.edges()[0]));const f=g.insert("g").attr("class","clusters"),u=g.insert("g").attr("class","edgePaths"),w=g.insert("g").attr("class","edgeLabels"),v=g.insert("g").attr("class","nodes");await Promise.all(t.nodes().map((async function(e){const r=t.node(e);if(void 0!==l){const n=JSON.parse(JSON.stringify(l.clusterData));d.l.info("Setting data for cluster XXX (",e,") ",n,l),t.setNode(l.id,n),t.parent(e)||(d.l.trace("Setting parent",e,l.id),t.setParent(e,l.id,n))}if(d.l.info("(Insert) Node XXX"+e+": "+JSON.stringify(t.node(e))),r&&r.clusterNode){d.l.info("Cluster identified",e,r.width,t.node(e));const i=await C(v,r.graph,n,o,t.node(e),s),l=i.elem;(0,a.u)(r,l),r.diff=i.diff||0,d.l.info("Node bounds (abc123)",e,r,r.width,r.x,r.y),(0,a.s)(l,r),d.l.warn("Recursive render complete ",l,r)}else t.children(e).length>0?(d.l.info("Cluster - the non recursive path XXX",e,r.id,r,t),d.l.info(p(r.id,t)),c[r.id]={id:p(r.id,t),node:r}):(d.l.info("Node - the non recursive path",e,r.id,r),await(0,a.e)(v,t.node(e),h))}))),t.edges().forEach((function(e){const n=t.edge(e.v,e.w,e.name);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),d.l.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(t.edge(e))),d.l.info("Fix",c,"ids:",e.v,e.w,"Translateing: ",c[e.v],c[e.w]),(0,a.f)(w,n)})),t.edges().forEach((function(e){d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),d.l.info("#############################################"),d.l.info("### Layout ###"),d.l.info("#############################################"),d.l.info(t),(0,r.bK)(t),d.l.info("Graph after layout:",i.c(t));let y=0;const{subGraphTitleTotalMargin:E}=(0,a.g)(s);return(e=>x(e,e.children()))(t).forEach((function(e){const n=t.node(e);d.l.info("Position "+e+": "+JSON.stringify(t.node(e))),d.l.info("Position "+e+": ("+n.x,","+n.y,") width: ",n.width," height: ",n.height),n&&n.clusterNode?(n.y+=E,(0,a.p)(n)):t.children(e).length>0?(n.height+=E,((e,t)=>{d.l.trace("Inserting cluster");const n=t.shape||"rect";b[t.id]=m[n](e,t)})(f,n),c[n.id].node=n):(n.y+=E/2,(0,a.p)(n))})),t.edges().forEach((function(e){const r=t.edge(e);d.l.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r),r),r.points.forEach((e=>e.y+=E/2));const i=(0,a.h)(u,e,r,c,n,t,o);(0,a.j)(r,i)})),t.nodes().forEach((function(e){const n=t.node(e);d.l.info(e,n.type,n.diff),"group"===n.type&&(y=n.diff)})),{elem:g,diff:y}},E=async(e,t,n,r,o)=>{(0,a.a)(e,n,r,o),(0,a.b)(),(0,a.d)(),b={},h={},g={},c={},d.l.warn("Graph at first:",JSON.stringify(i.c(t))),((e,t)=>{if(!e||t>10)d.l.debug("Opting out, no graph ");else{d.l.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(d.l.warn("Cluster identified",t," Replacement id in edges: ",p(t,e)),h[t]=w(t,e),c[t]={id:p(t,e),clusterData:e.node(t)})})),e.nodes().forEach((function(t){const n=e.children(t),r=e.edges();n.length>0?(d.l.debug("Cluster identified",t,h),r.forEach((e=>{e.v!==t&&e.w!==t&&f(e.v,t)^f(e.w,t)&&(d.l.warn("Edge: ",e," leaves cluster ",t),d.l.warn("Decendants of XXX ",t,": ",h[t]),c[t].externalConnections=!0)}))):d.l.debug("Not a cluster ",t,h)}));for(let t of Object.keys(c)){const n=c[t].id,r=e.parent(n);r!==t&&c[r]&&!c[r].externalConnections&&(c[t].id=r)}e.edges().forEach((function(t){const n=e.edge(t);d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),d.l.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,i=t.w;if(d.l.warn("Fix XXX",c,"ids:",t.v,t.w,"Translating: ",c[t.v]," --- ",c[t.w]),c[t.v]&&c[t.w]&&c[t.v]===c[t.w]){d.l.warn("Fixing and trixing link to self - removing XXX",t.v,t.w,t.name),d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name);const a=t.w+"---"+t.v;e.setNode(a,{domId:a,id:a,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const o=structuredClone(n),l=structuredClone(n);o.label="",o.arrowTypeEnd="none",l.label="",o.fromCluster=t.v,l.toCluster=t.v,e.setEdge(r,a,o,t.name+"-cyclic-special"),e.setEdge(a,i,l,t.name+"-cyclic-special")}else if(c[t.v]||c[t.w]){if(d.l.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),r=v(t.v),i=v(t.w),e.removeEdge(t.v,t.w,t.name),r!==t.v){const i=e.parent(r);c[i].externalConnections=!0,n.fromCluster=t.v}if(i!==t.w){const r=e.parent(i);c[r].externalConnections=!0,n.toCluster=t.w}d.l.warn("Fix Replacing with XXX",r,i,t.name),e.setEdge(r,i,n,t.name)}})),d.l.warn("Adjusted Graph",i.c(e)),y(e,0),d.l.trace(c)}})(t),d.l.warn("Graph after:",JSON.stringify(i.c(t)));const l=(0,d.c)();await C(e,t,r,o,void 0,l)}}}]); \ No newline at end of file diff --git a/assets/js/9206.44aba7e5.js b/assets/js/9206.44aba7e5.js new file mode 100644 index 0000000000..960bec4a86 --- /dev/null +++ b/assets/js/9206.44aba7e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9206],{49206:(t,e,s)=>{s.d(e,{d:()=>D,p:()=>r,s:()=>_});var n=s(64218),i=s(28758),u=function(){var t=function(t,e,s,n){for(s=s||{},n=t.length;n--;s[t[n]]=e);return s},e=[1,17],s=[1,18],n=[1,19],i=[1,39],u=[1,40],r=[1,25],a=[1,23],c=[1,24],o=[1,31],l=[1,32],h=[1,33],A=[1,34],p=[1,35],d=[1,36],y=[1,26],E=[1,27],C=[1,28],m=[1,29],f=[1,43],b=[1,30],F=[1,42],g=[1,44],k=[1,41],T=[1,45],B=[1,9],D=[1,8,9],_=[1,56],S=[1,57],N=[1,58],L=[1,59],$=[1,60],v=[1,61],O=[1,62],I=[1,8,9,39],x=[1,74],R=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],w=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],P=[13,74,80,95,97,98],M=[13,64,65,74,80,95,97,98],G=[13,59,60,61,62,63,74,80,95,97,98],U=[1,93],Y=[1,110],z=[1,108],K=[1,102],j=[1,103],Q=[1,104],X=[1,105],W=[1,106],q=[1,107],H=[1,109],J=[1,8,9,37,39,42],V=[1,8,9,21],Z=[1,8,9,78],tt=[1,8,9,21,73,74,78,80,81,82,83,84,85],et={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(t,e,s,n,i,u,r){var a=u.length-1;switch(i){case 8:this.$=u[a-1];break;case 9:case 11:case 12:this.$=u[a];break;case 10:case 13:case 89:this.$=u[a-1]+u[a];break;case 14:case 15:this.$=u[a-1]+"~"+u[a]+"~";break;case 16:n.addRelation(u[a]);break;case 17:u[a-1].title=n.cleanupLabel(u[a]),n.addRelation(u[a-1]);break;case 27:this.$=u[a].trim(),n.setAccTitle(this.$);break;case 28:case 29:this.$=u[a].trim(),n.setAccDescription(this.$);break;case 30:n.addClassesToNamespace(u[a-3],u[a-1]);break;case 31:n.addClassesToNamespace(u[a-4],u[a-1]);break;case 32:this.$=u[a],n.addNamespace(u[a]);break;case 33:case 43:case 86:this.$=[u[a]];break;case 34:this.$=[u[a-1]];break;case 35:u[a].unshift(u[a-2]),this.$=u[a];break;case 37:n.setCssClass(u[a-2],u[a]);break;case 38:n.addMembers(u[a-3],u[a-1]);break;case 39:n.setCssClass(u[a-5],u[a-3]),n.addMembers(u[a-5],u[a-1]);break;case 40:this.$=u[a],n.addClass(u[a]);break;case 41:this.$=u[a-1],n.addClass(u[a-1]),n.setClassLabel(u[a-1],u[a]);break;case 42:n.addAnnotation(u[a],u[a-2]);break;case 44:u[a].push(u[a-1]),this.$=u[a];break;case 45:case 47:case 48:break;case 46:n.addMember(u[a-1],n.cleanupLabel(u[a]));break;case 49:this.$={id1:u[a-2],id2:u[a],relation:u[a-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:u[a-3],id2:u[a],relation:u[a-1],relationTitle1:u[a-2],relationTitle2:"none"};break;case 51:this.$={id1:u[a-3],id2:u[a],relation:u[a-2],relationTitle1:"none",relationTitle2:u[a-1]};break;case 52:this.$={id1:u[a-4],id2:u[a],relation:u[a-2],relationTitle1:u[a-3],relationTitle2:u[a-1]};break;case 53:n.addNote(u[a],u[a-1]);break;case 54:n.addNote(u[a]);break;case 55:n.setDirection("TB");break;case 56:n.setDirection("BT");break;case 57:n.setDirection("RL");break;case 58:n.setDirection("LR");break;case 59:this.$={type1:u[a-2],type2:u[a],lineType:u[a-1]};break;case 60:this.$={type1:"none",type2:u[a],lineType:u[a-1]};break;case 61:this.$={type1:u[a-1],type2:"none",lineType:u[a]};break;case 62:this.$={type1:"none",type2:"none",lineType:u[a]};break;case 63:this.$=n.relationType.AGGREGATION;break;case 64:this.$=n.relationType.EXTENSION;break;case 65:this.$=n.relationType.COMPOSITION;break;case 66:this.$=n.relationType.DEPENDENCY;break;case 67:this.$=n.relationType.LOLLIPOP;break;case 68:this.$=n.lineType.LINE;break;case 69:this.$=n.lineType.DOTTED_LINE;break;case 70:case 76:this.$=u[a-2],n.setClickEvent(u[a-1],u[a]);break;case 71:case 77:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 72:this.$=u[a-2],n.setLink(u[a-1],u[a]);break;case 73:this.$=u[a-3],n.setLink(u[a-2],u[a-1],u[a]);break;case 74:this.$=u[a-3],n.setLink(u[a-2],u[a-1]),n.setTooltip(u[a-2],u[a]);break;case 75:this.$=u[a-4],n.setLink(u[a-3],u[a-2],u[a]),n.setTooltip(u[a-3],u[a-1]);break;case 78:this.$=u[a-3],n.setClickEvent(u[a-2],u[a-1],u[a]);break;case 79:this.$=u[a-4],n.setClickEvent(u[a-3],u[a-2],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 80:this.$=u[a-3],n.setLink(u[a-2],u[a]);break;case 81:this.$=u[a-4],n.setLink(u[a-3],u[a-1],u[a]);break;case 82:this.$=u[a-4],n.setLink(u[a-3],u[a-1]),n.setTooltip(u[a-3],u[a]);break;case 83:this.$=u[a-5],n.setLink(u[a-4],u[a-2],u[a]),n.setTooltip(u[a-4],u[a-1]);break;case 84:this.$=u[a-2],n.setCssStyle(u[a-1],u[a]);break;case 85:n.setCssClass(u[a-1],u[a]);break;case 87:u[a-2].push(u[a]),this.$=u[a-2]}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(B,[2,5],{8:[1,46]}),{8:[1,47]},t(D,[2,16],{21:[1,48]}),t(D,[2,18]),t(D,[2,19]),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),{32:[1,49]},{34:[1,50]},t(D,[2,29]),t(D,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:_,60:S,61:N,62:L,63:$,64:v,65:O}),{37:[1,63]},t(I,[2,36],{37:[1,65],42:[1,64]}),t(D,[2,47]),t(D,[2,48]),{16:66,74:f,80:F,95:g,97:k},{16:37,17:67,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:68,18:38,74:f,80:F,95:g,97:k,98:T},{16:37,17:69,18:38,74:f,80:F,95:g,97:k,98:T},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:f,80:F,95:g,97:k,98:T},{13:x,51:73},t(D,[2,55]),t(D,[2,56]),t(D,[2,57]),t(D,[2,58]),t(R,[2,11],{16:37,18:38,17:75,19:[1,76],74:f,80:F,95:g,97:k,98:T}),t(R,[2,12],{19:[1,77]}),{15:78,16:79,74:f,80:F,95:g,97:k},{16:37,17:80,18:38,74:f,80:F,95:g,97:k,98:T},t(w,[2,112]),t(w,[2,113]),t(w,[2,114]),t(w,[2,115]),t([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),t(B,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:e,33:s,35:n,40:i,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:e,33:s,35:n,36:21,40:i,41:22,44:u,45:r,47:a,48:c,50:o,52:l,53:h,54:A,55:p,56:d,66:y,67:E,69:C,73:m,74:f,76:b,80:F,95:g,97:k,98:T},t(D,[2,17]),t(D,[2,27]),t(D,[2,28]),{13:[1,84],16:37,17:83,18:38,74:f,80:F,95:g,97:k,98:T},{49:85,57:54,58:55,59:_,60:S,61:N,62:L,63:$,64:v,65:O},t(D,[2,46]),{58:86,64:v,65:O},t(P,[2,62],{57:87,59:_,60:S,61:N,62:L,63:$}),t(M,[2,63]),t(M,[2,64]),t(M,[2,65]),t(M,[2,66]),t(M,[2,67]),t(G,[2,68]),t(G,[2,69]),{8:[1,89],23:90,38:88,41:22,44:u},{16:91,74:f,80:F,95:g,97:k},{43:92,47:U},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:Y,73:z,74:K,75:99,77:100,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},{74:[1,111]},{13:x,51:112},t(D,[2,54]),t(D,[2,117]),t(R,[2,13]),t(R,[2,14]),t(R,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:f,80:F,95:g,97:k},t(J,[2,40],{11:114,12:[1,115]}),t(B,[2,7]),{9:[1,116]},t(V,[2,49]),{16:37,17:117,18:38,74:f,80:F,95:g,97:k,98:T},{13:[1,119],16:37,17:118,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,61],{57:120,59:_,60:S,61:N,62:L,63:$}),t(P,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:u},{8:[1,123],39:[2,33]},t(I,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:U},{16:37,17:127,18:38,74:f,80:F,95:g,97:k,98:T},t(D,[2,70],{13:[1,128]}),t(D,[2,72],{13:[1,130],68:[1,129]}),t(D,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},t(D,[2,84],{78:[1,134]}),t(Z,[2,86],{79:135,21:Y,73:z,74:K,80:j,81:Q,82:X,83:W,84:q,85:H}),t(tt,[2,88]),t(tt,[2,90]),t(tt,[2,91]),t(tt,[2,92]),t(tt,[2,93]),t(tt,[2,94]),t(tt,[2,95]),t(tt,[2,96]),t(tt,[2,97]),t(tt,[2,98]),t(D,[2,85]),t(D,[2,53]),{37:[2,10]},t(J,[2,41]),{13:[1,136]},{1:[2,4]},t(V,[2,51]),t(V,[2,50]),{16:37,17:137,18:38,74:f,80:F,95:g,97:k,98:T},t(P,[2,59]),t(D,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:u},{43:140,47:U},t(I,[2,38]),{39:[2,44]},t(D,[2,42]),t(D,[2,71]),t(D,[2,73]),t(D,[2,74],{68:[1,141]}),t(D,[2,77]),t(D,[2,78],{13:[1,142]}),t(D,[2,80],{13:[1,144],68:[1,143]}),{21:Y,73:z,74:K,77:145,79:101,80:j,81:Q,82:X,83:W,84:q,85:H},t(tt,[2,89]),{14:[1,146]},t(V,[2,52]),t(D,[2,31]),{39:[2,35]},{39:[1,147]},t(D,[2,75]),t(D,[2,79]),t(D,[2,81]),t(D,[2,82],{68:[1,148]}),t(Z,[2,87],{79:135,21:Y,73:z,74:K,80:j,81:Q,82:X,83:W,84:q,85:H}),t(J,[2,8]),t(I,[2,39]),t(D,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(t,e){if(!e.recoverable){var s=new Error(t);throw s.hash=e,s}this.trace(t)},parse:function(t){var e=this,s=[0],n=[],i=[null],u=[],r=this.table,a="",c=0,o=0,l=u.slice.call(arguments,1),h=Object.create(this.lexer),A={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(A.yy[p]=this.yy[p]);h.setInput(t,A.yy),A.yy.lexer=h,A.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var d=h.yylloc;u.push(d);var y=h.options&&h.options.ranges;"function"==typeof A.yy.parseError?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var E,C,m,f,b,F,g,k,T,B={};;){if(C=s[s.length-1],this.defaultActions[C]?m=this.defaultActions[C]:(null==E&&(T=void 0,"number"!=typeof(T=n.pop()||h.lex()||1)&&(T instanceof Array&&(T=(n=T).pop()),T=e.symbols_[T]||T),E=T),m=r[C]&&r[C][E]),void 0===m||!m.length||!m[0]){var D="";for(b in k=[],r[C])this.terminals_[b]&&b>2&&k.push("'"+this.terminals_[b]+"'");D=h.showPosition?"Parse error on line "+(c+1)+":\n"+h.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[E]||E)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==E?"end of input":"'"+(this.terminals_[E]||E)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[E]||E,line:h.yylineno,loc:d,expected:k})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+E);switch(m[0]){case 1:s.push(E),i.push(h.yytext),u.push(h.yylloc),s.push(m[1]),E=null,o=h.yyleng,a=h.yytext,c=h.yylineno,d=h.yylloc;break;case 2:if(F=this.productions_[m[1]][1],B.$=i[i.length-F],B._$={first_line:u[u.length-(F||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(F||1)].first_column,last_column:u[u.length-1].last_column},y&&(B._$.range=[u[u.length-(F||1)].range[0],u[u.length-1].range[1]]),void 0!==(f=this.performAction.apply(B,[a,o,c,A.yy,m[1],i,u].concat(l))))return f;F&&(s=s.slice(0,-1*F*2),i=i.slice(0,-1*F),u=u.slice(0,-1*F)),s.push(this.productions_[m[1]][0]),i.push(B.$),u.push(B._$),g=r[s[s.length-2]][s[s.length-1]],s.push(g);break;case 3:return!0}}return!0}},st={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,s=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===n.length?this.yylloc.first_column:0)+n[n.length-s.length].length-s[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var s,n,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(n=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],s=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var u in i)this[u]=i[u];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,s,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),u=0;u<i.length;u++)if((s=this._input.match(this.rules[i[u]]))&&(!e||s[0].length>e[0].length)){if(e=s,n=u,this.options.backtrack_lexer){if(!1!==(t=this.test_match(s,i[u])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,s,n){switch(s){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:case 5:case 14:case 30:case 35:case 39:case 46:break;case 6:return this.begin("acc_title"),31;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),33;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 19:case 22:case 24:case 57:case 60:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:case 34:return 8;case 15:case 16:return 7;case 17:case 36:case 44:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 23:return 71;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;case 29:case 38:return this.popState(),8;case 31:return this.begin("namespace-body"),37;case 32:case 42:return this.popState(),39;case 33:case 43:return"EOF_IN_STRUCT";case 37:return this.begin("class"),44;case 40:return this.popState(),this.popState(),39;case 41:return this.begin("class-body"),37;case 45:return"OPEN_IN_STRUCT";case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:case 64:case 65:case 66:return 68;case 67:case 68:return 60;case 69:case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:case 84:return 84;case 85:return 85;case 86:case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:case 95:return 83;case 96:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],inclusive:!0}}};function nt(){this.yy={}}return et.lexer=st,nt.prototype=et,et.Parser=nt,new nt}();u.parser=u;const r=u,a=["#","+","~","-",""];class c{constructor(t,e){this.memberType=e,this.visibility="",this.classifier="";const s=(0,i.d)(t,(0,i.c)());this.parseMember(s)}getDisplayDetails(){let t=this.visibility+(0,i.v)(this.id);"method"===this.memberType&&(t+=`(${(0,i.v)(this.parameters.trim())})`,this.returnType&&(t+=" : "+(0,i.v)(this.returnType))),t=t.trim();return{displayText:t,cssStyle:this.parseClassifier()}}parseMember(t){let e="";if("method"===this.memberType){const s=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,n=t.match(s);if(n){const t=n[1]?n[1].trim():"";if(a.includes(t)&&(this.visibility=t),this.id=n[2].trim(),this.parameters=n[3]?n[3].trim():"",e=n[4]?n[4].trim():"",this.returnType=n[5]?n[5].trim():"",""===e){const t=this.returnType.substring(this.returnType.length-1);t.match(/[$*]/)&&(e=t,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const s=t.length,n=t.substring(0,1),i=t.substring(s-1);a.includes(n)&&(this.visibility=n),i.match(/[$*]/)&&(e=i),this.id=t.substring(""===this.visibility?0:1,""===e?s:s-1)}this.classifier=e}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const o="classId-";let l=[],h={},A=[],p=0,d={},y=0,E=[];const C=t=>i.e.sanitizeText(t,(0,i.c)()),m=function(t){const e=i.e.sanitizeText(t,(0,i.c)());let s="",n=e;if(e.indexOf("~")>0){const t=e.split("~");n=C(t[0]),s=C(t[1])}return{className:n,type:s}},f=function(t){const e=i.e.sanitizeText(t,(0,i.c)()),{className:s,type:n}=m(e);if(Object.hasOwn(h,s))return;const u=i.e.sanitizeText(s,(0,i.c)());h[u]={id:u,type:n,label:u,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:o+u+"-"+p},p++},b=function(t){const e=i.e.sanitizeText(t,(0,i.c)());if(e in h)return h[e].domId;throw new Error("Class not found: "+e)},F=function(t,e){f(t);const s=m(t).className,n=h[s];if("string"==typeof e){const t=e.trim();t.startsWith("<<")&&t.endsWith(">>")?n.annotations.push(C(t.substring(2,t.length-2))):t.indexOf(")")>0?n.methods.push(new c(t,"method")):t&&n.members.push(new c(t,"attribute"))}},g=function(t,e){t.split(",").forEach((function(t){let s=t;t[0].match(/\d/)&&(s=o+s),void 0!==h[s]&&h[s].cssClasses.push(e)}))},k=function(t,e,s){const n=i.e.sanitizeText(t,(0,i.c)());if("loose"!==(0,i.c)().securityLevel)return;if(void 0===e)return;const u=n;if(void 0!==h[u]){const t=b(u);let n=[];if("string"==typeof s){n=s.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<n.length;t++){let e=n[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),n[t]=e}}0===n.length&&n.push(t),E.push((function(){const s=document.querySelector(`[id="${t}"]`);null!==s&&s.addEventListener("click",(function(){i.u.runFunc(e,...n)}),!1)}))}},T=function(t){let e=(0,n.Ys)(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=(0,n.Ys)("body").append("div").attr("class","mermaidTooltip").style("opacity",0));(0,n.Ys)(t).select("svg").selectAll("g.node").on("mouseover",(function(){const t=(0,n.Ys)(this);if(null===t.attr("title"))return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(t.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/<br\/>/g,"<br/>")),t.classed("hover",!0)})).on("mouseout",(function(){e.transition().duration(500).style("opacity",0);(0,n.Ys)(this).classed("hover",!1)}))};E.push(T);let B="TB";const D={setAccTitle:i.s,getAccTitle:i.g,getAccDescription:i.a,setAccDescription:i.b,getConfig:()=>(0,i.c)().class,addClass:f,bindFunctions:function(t){E.forEach((function(e){e(t)}))},clear:function(){l=[],h={},A=[],E=[],E.push(T),d={},y=0,(0,i.t)()},getClass:function(t){return h[t]},getClasses:function(){return h},getNotes:function(){return A},addAnnotation:function(t,e){const s=m(t).className;h[s].annotations.push(e)},addNote:function(t,e){const s={id:`note${A.length}`,class:e,text:t};A.push(s)},getRelations:function(){return l},addRelation:function(t){i.l.debug("Adding relation: "+JSON.stringify(t)),f(t.id1),f(t.id2),t.id1=m(t.id1).className,t.id2=m(t.id2).className,t.relationTitle1=i.e.sanitizeText(t.relationTitle1.trim(),(0,i.c)()),t.relationTitle2=i.e.sanitizeText(t.relationTitle2.trim(),(0,i.c)()),l.push(t)},getDirection:()=>B,setDirection:t=>{B=t},addMember:F,addMembers:function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach((e=>F(t,e))))},cleanupLabel:function(t){return t.startsWith(":")&&(t=t.substring(1)),C(t.trim())},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},setClickEvent:function(t,e,s){t.split(",").forEach((function(t){k(t,e,s),h[t].haveCallback=!0})),g(t,"clickable")},setCssClass:g,setLink:function(t,e,s){const n=(0,i.c)();t.split(",").forEach((function(t){let u=t;t[0].match(/\d/)&&(u=o+u),void 0!==h[u]&&(h[u].link=i.u.formatUrl(e,n),"sandbox"===n.securityLevel?h[u].linkTarget="_top":h[u].linkTarget="string"==typeof s?C(s):"_blank")})),g(t,"clickable")},getTooltip:function(t,e){return e?d[e].classes[t].tooltip:h[t].tooltip},setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(h[t].tooltip=C(e))}))},lookUpDomId:b,setDiagramTitle:i.q,getDiagramTitle:i.r,setClassLabel:function(t,e){const s=i.e.sanitizeText(t,(0,i.c)());e&&(e=C(e));const{className:n}=m(s);h[n].label=e},addNamespace:function(t){void 0===d[t]&&(d[t]={id:t,classes:{},children:{},domId:o+t+"-"+y},y++)},addClassesToNamespace:function(t,e){if(void 0!==d[t])for(const s of e){const{className:e}=m(s);h[e].parent=t,d[t].classes[e]=h[e]}},getNamespace:function(t){return d[t]},getNamespaces:function(){return d},setCssStyle:function(t,e){const s=h[t];if(e&&s)for(const n of e)n.includes(",")?s.styles.push(...n.split(",")):s.styles.push(n)}},_=t=>`g.classGroup text {\n fill: ${t.nodeBorder||t.classText};\n stroke: none;\n font-family: ${t.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${t.classText};\n}\n.edgeLabel .label rect {\n fill: ${t.mainBkg};\n}\n.label text {\n fill: ${t.classText};\n}\n.edgeLabel .label span {\n background: ${t.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${t.mainBkg};\n stroke: ${t.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${t.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${t.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${t.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${t.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${t.lineColor} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${t.mainBkg} !important;\n stroke: ${t.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.textColor};\n}\n`}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.bd203e90.js b/assets/js/935f2afb.bd203e90.js new file mode 100644 index 0000000000..4524369185 --- /dev/null +++ b/assets/js/935f2afb.bd203e90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"about":[{"type":"link","label":"Introduction","href":"/ecalc/docs/about/","docId":"about/index","unlisted":false},{"type":"category","label":"Getting started","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"CLI","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"FAQ / Troubleshooting","href":"/ecalc/docs/about/getting_started/cli/faq","docId":"about/getting_started/cli/faq","unlisted":false}],"href":"/ecalc/docs/about/getting_started/cli/"},{"type":"link","label":"Python Library","href":"/ecalc/docs/about/getting_started/library/","docId":"about/getting_started/library/index","unlisted":false},{"type":"link","label":"YAML","href":"/ecalc/docs/about/getting_started/yaml/","docId":"about/getting_started/yaml/index","unlisted":false}],"href":"/ecalc/docs/about/getting_started/"},{"type":"category","label":"Modelling guide","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Theory","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pump modelling","href":"/ecalc/docs/about/modelling/theory/pump_modelling","docId":"about/modelling/theory/pump_modelling","unlisted":false},{"type":"link","label":"Compressor modelling","href":"/ecalc/docs/about/modelling/theory/compressor_modelling","docId":"about/modelling/theory/compressor_modelling","unlisted":false}],"href":"/ecalc/docs/about/modelling/theory/"},{"type":"category","label":"Setup an eCalc\u2122 Model","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"File format and syntax","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Expressions","href":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","docId":"about/modelling/setup/file_format_and_syntax/expressions","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"},{"type":"link","label":"Time series","href":"/ecalc/docs/about/modelling/setup/time_series","docId":"about/modelling/setup/time_series","unlisted":false},{"type":"category","label":"Facility inputs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generator modelling","href":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","docId":"about/modelling/setup/facility_inputs/generator_modelling","unlisted":false},{"type":"category","label":"Pump modelling","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pump chart","href":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","docId":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"},{"type":"link","label":"Sampled compressor model","href":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","docId":"about/modelling/setup/facility_inputs/sampled_compressor_model","unlisted":false},{"type":"link","label":"Tabular models","href":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","docId":"about/modelling/setup/facility_inputs/tabular","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/facility_inputs/"},{"type":"category","label":"Models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Fluid model","href":"/ecalc/docs/about/modelling/setup/models/fluid_model","docId":"about/modelling/setup/models/fluid_model","unlisted":false},{"type":"category","label":"Compressor modelling","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Compressor charts","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","docId":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","unlisted":false},{"type":"category","label":"Compressor train types","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Single speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","unlisted":false},{"type":"link","label":"Simplified variable speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","unlisted":false},{"type":"link","label":"Variable speed compressor train","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","unlisted":false},{"type":"link","label":"Variable speed compressor train model with multiple streams and pressures","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","docId":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"},{"type":"link","label":"Fixed speed pressure control","href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","docId":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"},{"type":"link","label":"Turbine modelling","href":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","docId":"about/modelling/setup/models/turbine_modeling","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/models/"},{"type":"link","label":"Fuel types","href":"/ecalc/docs/about/modelling/setup/fuel_types","docId":"about/modelling/setup/fuel_types","unlisted":false},{"type":"link","label":"Variables","href":"/ecalc/docs/about/modelling/setup/variables","docId":"about/modelling/setup/variables","unlisted":false},{"type":"category","label":"Installations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generator sets","href":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","docId":"about/modelling/setup/installations/generator_sets_in_calculations","unlisted":false},{"type":"link","label":"Pump models","href":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","docId":"about/modelling/setup/installations/pump_models_in_calculations","unlisted":false},{"type":"category","label":"Compressor models","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Compressor","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","docId":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","unlisted":false},{"type":"link","label":"Compressor system","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","docId":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","unlisted":false},{"type":"link","label":"Variable speed compressor train multiple streams and pressures","href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","docId":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"},{"type":"link","label":"Tabular models","href":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","docId":"about/modelling/setup/installations/tabular_models_in_calculations","unlisted":false},{"type":"link","label":"Direct consumers","href":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","docId":"about/modelling/setup/installations/direct_consumers","unlisted":false}],"href":"/ecalc/docs/about/modelling/setup/installations/"}],"href":"/ecalc/docs/about/modelling/setup/"},{"type":"category","label":"eCalc\u2122 Workflow","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Generic Workflow","href":"/ecalc/docs/about/modelling/workflow/generic_workflow","docId":"about/modelling/workflow/generic_workflow","unlisted":false}],"href":"/ecalc/docs/about/modelling/workflow/"},{"type":"category","label":"Examples","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Simple model","href":"/ecalc/docs/about/modelling/examples/simple","docId":"about/modelling/examples/simple","unlisted":false},{"type":"link","label":"Advanced model","href":"/ecalc/docs/about/modelling/examples/advanced","docId":"about/modelling/examples/advanced","unlisted":false},{"type":"link","label":"Drogon model","href":"/ecalc/docs/about/modelling/examples/drogon","docId":"about/modelling/examples/drogon","unlisted":false}],"href":"/ecalc/docs/about/modelling/examples/"}],"href":"/ecalc/docs/about/modelling/"},{"type":"category","label":"Reference Documentation","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"YAML keywords","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"ADJUSTMENT","href":"/ecalc/docs/about/references/keywords/ADJUSTMENT","docId":"about/references/keywords/ADJUSTMENT","unlisted":false},{"type":"link","label":"CATEGORY","href":"/ecalc/docs/about/references/keywords/CATEGORY","docId":"about/references/keywords/CATEGORY","unlisted":false},{"type":"link","label":"COMPRESSOR_MODEL","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","docId":"about/references/keywords/COMPRESSOR_MODEL","unlisted":false},{"type":"link","label":"COMPRESSORS","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","docId":"about/references/keywords/COMPRESSOR_SYSTEM","unlisted":false},{"type":"link","label":"COMPRESSOR_TRAIN_MODEL","href":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","docId":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","unlisted":false},{"type":"link","label":"CONDITION","href":"/ecalc/docs/about/references/keywords/CONDITION","docId":"about/references/keywords/CONDITION","unlisted":false},{"type":"link","label":"CONDITIONS","href":"/ecalc/docs/about/references/keywords/CONDITIONS","docId":"about/references/keywords/CONDITIONS","unlisted":false},{"type":"link","label":"CONSTANT","href":"/ecalc/docs/about/references/keywords/CONSTANT","docId":"about/references/keywords/CONSTANT","unlisted":false},{"type":"link","label":"CONSUMERS","href":"/ecalc/docs/about/references/keywords/CONSUMERS","docId":"about/references/keywords/CONSUMERS","unlisted":false},{"type":"link","label":"CONSUMPTION_RATE_TYPE","href":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","docId":"about/references/keywords/CONSUMPTION_RATE_TYPE","unlisted":false},{"type":"link","label":"CONTROL_MARGIN","href":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","docId":"about/references/keywords/CONTROL_MARGIN","unlisted":false},{"type":"link","label":"CONTROL_MARGIN_UNIT","href":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","docId":"about/references/keywords/CONTROL_MARGIN_UNIT","unlisted":false},{"type":"link","label":"CROSSOVER","href":"/ecalc/docs/about/references/keywords/CROSSOVER","docId":"about/references/keywords/CROSSOVER","unlisted":false},{"type":"link","label":"CURVE","href":"/ecalc/docs/about/references/keywords/CURVE","docId":"about/references/keywords/CURVE","unlisted":false},{"type":"link","label":"CURVES","href":"/ecalc/docs/about/references/keywords/CURVES","docId":"about/references/keywords/CURVES","unlisted":false},{"type":"link","label":"DIRECT_EMITTERS","href":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","docId":"about/references/keywords/DIRECT_EMITTERS","unlisted":false},{"type":"link","label":"DISCHARGE_PRESSURE","href":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","docId":"about/references/keywords/DISCHARGE_PRESSURE","unlisted":false},{"type":"link","label":"DOWNSTREAM_PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","docId":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","unlisted":false},{"type":"link","label":"EFFICIENCY","href":"/ecalc/docs/about/references/keywords/EFFICIENCY","docId":"about/references/keywords/EFFICIENCY","unlisted":false},{"type":"link","label":"ELECTRICITY2FUEL","href":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","docId":"about/references/keywords/ELECTRICITY2FUEL","unlisted":false},{"type":"link","label":"EMISSION","href":"/ecalc/docs/about/references/keywords/EMISSION","docId":"about/references/keywords/EMISSION","unlisted":false},{"type":"link","label":"EMISSIONS","href":"/ecalc/docs/about/references/keywords/EMISSIONS","docId":"about/references/keywords/EMISSIONS","unlisted":false},{"type":"link","label":"EMISSION_NAME","href":"/ecalc/docs/about/references/keywords/EMISSION_NAME","docId":"about/references/keywords/EMISSION_NAME","unlisted":false},{"type":"link","label":"EMISSION_RATE","href":"/ecalc/docs/about/references/keywords/EMISSION_RATE","docId":"about/references/keywords/EMISSION_RATE","unlisted":false},{"type":"link","label":"EMITTER_MODEL","href":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","docId":"about/references/keywords/EMITTER_MODEL","unlisted":false},{"type":"link","label":"END","href":"/ecalc/docs/about/references/keywords/END","docId":"about/references/keywords/END","unlisted":false},{"type":"link","label":"ENERGYFUNCTION","href":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","docId":"about/references/keywords/ENERGYFUNCTION","unlisted":false},{"type":"link","label":"ENERGY_USAGE_MODEL","href":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","docId":"about/references/keywords/ENERGY_USAGE_MODEL","unlisted":false},{"type":"link","label":"EXPRESSION","href":"/ecalc/docs/about/references/keywords/EXPRESSION","docId":"about/references/keywords/EXPRESSION","unlisted":false},{"type":"link","label":"EXTRAPOLATION","href":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","docId":"about/references/keywords/EXTRAPOLATION","unlisted":false},{"type":"link","label":"FACILITY_INPUTS","href":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","docId":"about/references/keywords/FACILITY_INPUTS","unlisted":false},{"type":"link","label":"FACTOR","href":"/ecalc/docs/about/references/keywords/FACTOR","docId":"about/references/keywords/FACTOR","unlisted":false},{"type":"link","label":"FILE","href":"/ecalc/docs/about/references/keywords/FILE","docId":"about/references/keywords/FILE","unlisted":false},{"type":"link","label":"FLUID_DENSITY","href":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","docId":"about/references/keywords/FLUID_DENSITY","unlisted":false},{"type":"link","label":"FLUID_MODEL","href":"/ecalc/docs/about/references/keywords/FLUID_MODEL","docId":"about/references/keywords/FLUID_MODEL","unlisted":false},{"type":"link","label":"FUEL","href":"/ecalc/docs/about/references/keywords/FUEL","docId":"about/references/keywords/FUEL","unlisted":false},{"type":"link","label":"FUELCONSUMERS","href":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","docId":"about/references/keywords/FUELCONSUMERS","unlisted":false},{"type":"link","label":"FUELRATE","href":"/ecalc/docs/about/references/keywords/FUELRATE","docId":"about/references/keywords/FUELRATE","unlisted":false},{"type":"link","label":"FUEL_TYPES","href":"/ecalc/docs/about/references/keywords/FUEL_TYPES","docId":"about/references/keywords/FUEL_TYPES","unlisted":false},{"type":"link","label":"GENERATORSETS","href":"/ecalc/docs/about/references/keywords/GENERATORSETS","docId":"about/references/keywords/GENERATORSETS","unlisted":false},{"type":"link","label":"HCEXPORT","href":"/ecalc/docs/about/references/keywords/HCEXPORT","docId":"about/references/keywords/HCEXPORT","unlisted":false},{"type":"link","label":"HEAD","href":"/ecalc/docs/about/references/keywords/HEAD","docId":"about/references/keywords/HEAD","unlisted":false},{"type":"link","label":"HEAD_MARGIN","href":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","docId":"about/references/keywords/HEAD_MARGIN","unlisted":false},{"type":"link","label":"INFLUENCE_TIME_VECTOR","href":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","docId":"about/references/keywords/INFLUENCE_TIME_VECTOR","unlisted":false},{"type":"link","label":"INLET_TEMPERATURE","href":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","docId":"about/references/keywords/INLET_TEMPERATURE","unlisted":false},{"type":"link","label":"INSTALLATIONS","href":"/ecalc/docs/about/references/keywords/INSTALLATIONS","docId":"about/references/keywords/INSTALLATIONS","unlisted":false},{"type":"link","label":"INTERPOLATION_TYPE","href":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","docId":"about/references/keywords/INTERPOLATION_TYPE","unlisted":false},{"type":"link","label":"INTERSTAGE_CONTROL_PRESSURE","href":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","docId":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","unlisted":false},{"type":"link","label":"LOAD","href":"/ecalc/docs/about/references/keywords/LOAD","docId":"about/references/keywords/LOAD","unlisted":false},{"type":"link","label":"LOWER_HEATING_VALUE","href":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","docId":"about/references/keywords/LOWER_HEATING_VALUE","unlisted":false},{"type":"link","label":"MAXIMUM_DISCHARGE_PRESSURE","href":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","docId":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","unlisted":false},{"type":"link","label":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","href":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","docId":"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","unlisted":false},{"type":"link","label":"MODELS","href":"/ecalc/docs/about/references/keywords/MODELS","docId":"about/references/keywords/MODELS","unlisted":false},{"type":"link","label":"NAME","href":"/ecalc/docs/about/references/keywords/NAME","docId":"about/references/keywords/NAME","unlisted":false},{"type":"link","label":"OPERATIONAL_SETTINGS","href":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","docId":"about/references/keywords/OPERATIONAL_SETTINGS","unlisted":false},{"type":"link","label":"POWERLOSSFACTOR","href":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","docId":"about/references/keywords/POWERLOSSFACTOR","unlisted":false},{"type":"link","label":"POWER_ADJUSTMENT_CONSTANT","href":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","docId":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","unlisted":false},{"type":"link","label":"PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","docId":"about/references/keywords/PRESSURE_CONTROL","unlisted":false},{"type":"link","label":"PUMPS","href":"/ecalc/docs/about/references/keywords/PUMPS","docId":"about/references/keywords/PUMPS","unlisted":false},{"type":"link","label":"RATE","href":"/ecalc/docs/about/references/keywords/RATE","docId":"about/references/keywords/RATE","unlisted":false},{"type":"link","label":"RATE_FRACTIONS","href":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","docId":"about/references/keywords/RATE_FRACTIONS","unlisted":false},{"type":"link","label":"RATE_PER_STREAM","href":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","docId":"about/references/keywords/RATE_PER_STREAM","unlisted":false},{"type":"link","label":"REGULARITY","href":"/ecalc/docs/about/references/keywords/REGULARITY","docId":"about/references/keywords/REGULARITY","unlisted":false},{"type":"link","label":"STAGES","href":"/ecalc/docs/about/references/keywords/STAGES","docId":"about/references/keywords/STAGES","unlisted":false},{"type":"link","label":"START","href":"/ecalc/docs/about/references/keywords/START","docId":"about/references/keywords/START","unlisted":false},{"type":"link","label":"STREAM","href":"/ecalc/docs/about/references/keywords/STREAM","docId":"about/references/keywords/STREAM","unlisted":false},{"type":"link","label":"STREAMS","href":"/ecalc/docs/about/references/keywords/STREAMS","docId":"about/references/keywords/STREAMS","unlisted":false},{"type":"link","label":"SUCTION_PRESSURE","href":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","docId":"about/references/keywords/SUCTION_PRESSURE","unlisted":false},{"type":"link","label":"TIME_SERIES","href":"/ecalc/docs/about/references/keywords/TIME_SERIES","docId":"about/references/keywords/TIME_SERIES","unlisted":false},{"type":"link","label":"TOTAL_SYSTEM_RATE","href":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","docId":"about/references/keywords/TOTAL_SYSTEM_RATE","unlisted":false},{"type":"link","label":"TURBINE_EFFICIENCIES","href":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","docId":"about/references/keywords/TURBINE_EFFICIENCIES","unlisted":false},{"type":"link","label":"TURBINE_LOAD","href":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","docId":"about/references/keywords/TURBINE_LOAD","unlisted":false},{"type":"link","label":"TURBINE_MODEL","href":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","docId":"about/references/keywords/TURBINE_MODEL","unlisted":false},{"type":"link","label":"TYPE","href":"/ecalc/docs/about/references/keywords/TYPE","docId":"about/references/keywords/TYPE","unlisted":false},{"type":"link","label":"UNITS","href":"/ecalc/docs/about/references/keywords/UNITS","docId":"about/references/keywords/UNITS","unlisted":false},{"type":"link","label":"UPSTREAM_PRESSURE_CONTROL","href":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","docId":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","unlisted":false},{"type":"link","label":"VARIABLES","href":"/ecalc/docs/about/references/keywords/VARIABLES","docId":"about/references/keywords/VARIABLES","unlisted":false},{"type":"link","label":"VENTING_EMITTERS","href":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","docId":"about/references/keywords/VENTING_EMITTERS","unlisted":false},{"type":"link","label":"!include","href":"/ecalc/docs/about/references/keywords/include","docId":"about/references/keywords/include","unlisted":false}],"href":"/ecalc/docs/about/references/keywords/"},{"type":"link","label":"API reference","href":"/ecalc/docs/about/references/api/","docId":"about/references/api/index","unlisted":false},{"type":"link","label":"CLI","href":"/ecalc/docs/about/references/cli_reference","docId":"about/references/cli_reference","unlisted":false}],"href":"/ecalc/docs/about/references/"},{"type":"category","label":"Migrating eCalc versions","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"v7 to v8","href":"/ecalc/docs/about/migration_guides/v7_to_v8","docId":"about/migration_guides/v7_to_v8","unlisted":false},{"type":"link","label":"v8 to v8.1","href":"/ecalc/docs/about/migration_guides/v8_to_v81","docId":"about/migration_guides/v8_to_v81","unlisted":false},{"type":"link","label":"v8.1 to v8.2","href":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","docId":"about/migration_guides/v8-1_to_v8-2","unlisted":false},{"type":"link","label":"v8.2 to v8.3","href":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","docId":"about/migration_guides/v8-2_to_v8-3","unlisted":false},{"type":"link","label":"v8.3 to v8.4","href":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","docId":"about/migration_guides/v8-3_to_v8-4","unlisted":false},{"type":"link","label":"v8.5 to v8.6","href":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","docId":"about/migration_guides/v8-5_to_v8-6","unlisted":false},{"type":"link","label":"v8.6 to v8.7","href":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","docId":"about/migration_guides/v8-6_to_v8-7","unlisted":false},{"type":"link","label":"v8.7 to v8.8","href":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","docId":"about/migration_guides/v8.7_to_v8.8","unlisted":false}],"href":"/ecalc/docs/about/migration_guides/"},{"type":"link","label":"Output data","href":"/ecalc/docs/about/miscellaneous/","docId":"about/miscellaneous/index","unlisted":false}],"contribute":[{"type":"link","label":"Get started","href":"/ecalc/docs/contribute/get-started","docId":"contribute/get-started","unlisted":false},{"type":"category","label":"Documentation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Overview","href":"/ecalc/docs/contribute/documentation-guide/documentation","docId":"contribute/documentation-guide/documentation","unlisted":false},{"type":"link","label":"Markdown","href":"/ecalc/docs/contribute/documentation-guide/markdown","docId":"contribute/documentation-guide/markdown","unlisted":false}],"href":"/ecalc/docs/category/documentation"},{"type":"category","label":"Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Git","href":"/ecalc/docs/contribute/guides/git","docId":"contribute/guides/git","unlisted":false},{"type":"link","label":"Conventional Commits","href":"/ecalc/docs/contribute/guides/conventional-commits","docId":"contribute/guides/conventional-commits","unlisted":false}],"href":"/ecalc/docs/category/guides"}],"changelog":[{"type":"link","label":"v8.10 (Latest)","href":"/ecalc/docs/changelog/v8.10-release","docId":"changelog/v8-10","unlisted":false},{"type":"link","label":"v8.8","href":"/ecalc/docs/changelog/v8.8-release","docId":"changelog/v8-8","unlisted":false},{"type":"link","label":"Next","href":"/ecalc/docs/changelog/latest","docId":"changelog/next","unlisted":false},{"type":"link","label":"---","href":"/ecalc/docs/changelog/separator","docId":"changelog/separator","unlisted":false},{"type":"link","label":"v7.0","href":"/ecalc/docs/changelog/v7-0-release","docId":"changelog/v7-0","unlisted":false},{"type":"link","label":"v7.1","href":"/ecalc/docs/changelog/v7-1-release","docId":"changelog/v7-1","unlisted":false},{"type":"link","label":"v7.2","href":"/ecalc/docs/changelog/v7-2-release","docId":"changelog/v7-2","unlisted":false},{"type":"link","label":"v7.3","href":"/ecalc/docs/changelog/v7-3-release","docId":"changelog/v7-3","unlisted":false},{"type":"link","label":"v7.4","href":"/ecalc/docs/changelog/v7-4-release","docId":"changelog/v7-4","unlisted":false},{"type":"link","label":"v7.5","href":"/ecalc/docs/changelog/v7-5-release","docId":"changelog/v7-5","unlisted":false},{"type":"link","label":"v7.6","href":"/ecalc/docs/changelog/v7-6-release","docId":"changelog/v7-6","unlisted":false},{"type":"link","label":"v8.0","href":"/ecalc/docs/changelog/v8.0-release","docId":"changelog/v8-0","unlisted":false},{"type":"link","label":"v8.1","href":"/ecalc/docs/changelog/v8.1-release","docId":"changelog/v8-1","unlisted":false},{"type":"link","label":"v8.2","href":"/ecalc/docs/changelog/v8.2-release","docId":"changelog/v8-2","unlisted":false},{"type":"link","label":"v8.3","href":"/ecalc/docs/changelog/v8.3-release","docId":"changelog/v8-3","unlisted":false},{"type":"link","label":"v8.4","href":"/ecalc/docs/changelog/v8.4-release","docId":"changelog/v8-4","unlisted":false},{"type":"link","label":"v8.5","href":"/ecalc/docs/changelog/v8.5-release","docId":"changelog/v8-5","unlisted":false},{"type":"link","label":"v8.6","href":"/ecalc/docs/changelog/v8.6-release","docId":"changelog/v8-6","unlisted":false},{"type":"link","label":"v8.7","href":"/ecalc/docs/changelog/v8.7-release","docId":"changelog/v8-7","unlisted":false},{"type":"link","label":"Changelog","href":"/ecalc/docs/changelog/","docId":"changelog/changelog","unlisted":false}]},"docs":{"about/getting_started/cli/faq":{"id":"about/getting_started/cli/faq","title":"FAQ / Troubleshooting","description":"eCalc FAQ","sidebar":"about"},"about/getting_started/cli/index":{"id":"about/getting_started/cli/index","title":"CLI","description":"Getting started with eCalc CLI","sidebar":"about"},"about/getting_started/index":{"id":"about/getting_started/index","title":"Getting started","description":"Getting started with eCalc","sidebar":"about"},"about/getting_started/library/index":{"id":"about/getting_started/library/index","title":"Python Library","description":"Getting started with eCalc Python Library","sidebar":"about"},"about/getting_started/yaml/index":{"id":"about/getting_started/yaml/index","title":"YAML","description":"Getting started with YAML","sidebar":"about"},"about/index":{"id":"about/index","title":"Introduction","description":"Introduction to eCalc documentation","sidebar":"about"},"about/migration_guides/index":{"id":"about/migration_guides/index","title":"Migrating eCalc versions","description":"Getting started with eCalc","sidebar":"about"},"about/migration_guides/v7_to_v8":{"id":"about/migration_guides/v7_to_v8","title":"v7 to v8","description":"v7 to v8 migration","sidebar":"about"},"about/migration_guides/v8_to_v81":{"id":"about/migration_guides/v8_to_v81","title":"v8 to v8.1","description":"v8 to v8.1 migration","sidebar":"about"},"about/migration_guides/v8-1_to_v8-2":{"id":"about/migration_guides/v8-1_to_v8-2","title":"v8.1 to v8.2","description":"v8.1 to v8.2 migration","sidebar":"about"},"about/migration_guides/v8-2_to_v8-3":{"id":"about/migration_guides/v8-2_to_v8-3","title":"v8.2 to v8.3","description":"v8.2 to v8.3 migration","sidebar":"about"},"about/migration_guides/v8-3_to_v8-4":{"id":"about/migration_guides/v8-3_to_v8-4","title":"v8.3 to v8.4","description":"v8.3 to v8.4 migration","sidebar":"about"},"about/migration_guides/v8-5_to_v8-6":{"id":"about/migration_guides/v8-5_to_v8-6","title":"v8.5 to v8.6","description":"v8.5 to v8.6 migration","sidebar":"about"},"about/migration_guides/v8-6_to_v8-7":{"id":"about/migration_guides/v8-6_to_v8-7","title":"v8.6 to v8.7","description":"v8.6 to v8.7 migration","sidebar":"about"},"about/migration_guides/v8.7_to_v8.8":{"id":"about/migration_guides/v8.7_to_v8.8","title":"v8.7 to v8.8","description":"v8.7 to v8.8 migration","sidebar":"about"},"about/miscellaneous/index":{"id":"about/miscellaneous/index","title":"Output data","description":"Output data","sidebar":"about"},"about/modelling/examples/advanced":{"id":"about/modelling/examples/advanced","title":"Advanced model","description":"An advanced model using consumer systems and two installations","sidebar":"about"},"about/modelling/examples/drogon":{"id":"about/modelling/examples/drogon","title":"Drogon model","description":"Model using Drogon input data","sidebar":"about"},"about/modelling/examples/index":{"id":"about/modelling/examples/index","title":"Examples","description":"Examples of eCalc usage","sidebar":"about"},"about/modelling/examples/simple":{"id":"about/modelling/examples/simple","title":"Simple model","description":"A simple model with a single installation","sidebar":"about"},"about/modelling/index":{"id":"about/modelling/index","title":"Modelling guide","description":"eCalc modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/generator_modelling":{"id":"about/modelling/setup/facility_inputs/generator_modelling","title":"Generator modelling","description":"Generator modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/index":{"id":"about/modelling/setup/facility_inputs/index","title":"Facility inputs","description":"Guide on how to use facility inputs","sidebar":"about"},"about/modelling/setup/facility_inputs/pump_modelling/index":{"id":"about/modelling/setup/facility_inputs/pump_modelling/index","title":"Pump modelling","description":"Pump modelling","sidebar":"about"},"about/modelling/setup/facility_inputs/pump_modelling/pump_charts":{"id":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","title":"Pump chart","description":"Energy usage for pumps is not based on pre-sampled data between rates,","sidebar":"about"},"about/modelling/setup/facility_inputs/sampled_compressor_model":{"id":"about/modelling/setup/facility_inputs/sampled_compressor_model","title":"Sampled compressor model","description":"Sampled compressor model","sidebar":"about"},"about/modelling/setup/facility_inputs/tabular":{"id":"about/modelling/setup/facility_inputs/tabular","title":"Tabular models","description":"Tabular models","sidebar":"about"},"about/modelling/setup/file_format_and_syntax/expressions":{"id":"about/modelling/setup/file_format_and_syntax/expressions","title":"Expressions","description":"eCalc EXPRESSIONS","sidebar":"about"},"about/modelling/setup/file_format_and_syntax/index":{"id":"about/modelling/setup/file_format_and_syntax/index","title":"File format and syntax","description":"YAML file format and syntax guide","sidebar":"about"},"about/modelling/setup/fuel_types":{"id":"about/modelling/setup/fuel_types","title":"Fuel types","description":"Guide on how to use fuel types","sidebar":"about"},"about/modelling/setup/index":{"id":"about/modelling/setup/index","title":"Setup an eCalc\u2122 Model","description":"Guide on how to setup an eCalc\u2122 model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/compressor":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","title":"Compressor","description":"COMPRESSOR Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","title":"Compressor system","description":"COMPRESSOR_SYSTEM Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/index":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/index","title":"Compressor models","description":"Using compressor models in calculations","sidebar":"about"},"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures":{"id":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","title":"Variable speed compressor train multiple streams and pressures","description":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES Energy Usage Model","sidebar":"about"},"about/modelling/setup/installations/direct_consumers":{"id":"about/modelling/setup/installations/direct_consumers","title":"Direct consumers","description":"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either","sidebar":"about"},"about/modelling/setup/installations/generator_sets_in_calculations":{"id":"about/modelling/setup/installations/generator_sets_in_calculations","title":"Generator sets","description":"Using generator sets in calculations","sidebar":"about"},"about/modelling/setup/installations/index":{"id":"about/modelling/setup/installations/index","title":"Installations","description":"Guide on how to use installations","sidebar":"about"},"about/modelling/setup/installations/pump_models_in_calculations":{"id":"about/modelling/setup/installations/pump_models_in_calculations","title":"Pump models","description":"Using pumps in calculations","sidebar":"about"},"about/modelling/setup/installations/tabular_models_in_calculations":{"id":"about/modelling/setup/installations/tabular_models_in_calculations","title":"Tabular models","description":"Using tabular models in calculations","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_charts/index":{"id":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","title":"Compressor charts","description":"Introduction into compressor charts","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/index":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/index","title":"Compressor train types","description":"This section outlines the various compressor train types that are available in eCalc\u2122.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","title":"Simplified variable speed compressor train","description":"The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","title":"Single speed compressor train","description":"The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","title":"Variable speed compressor train","description":"In this model all compressors in the train have the same speed, and the model is build on a forward model of","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures":{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","title":"Variable speed compressor train model with multiple streams and pressures","description":"This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index":{"id":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","title":"Fixed speed pressure control","description":"Introduction to fixed speed pressure control","sidebar":"about"},"about/modelling/setup/models/compressor_modelling/index":{"id":"about/modelling/setup/models/compressor_modelling/index","title":"Compressor modelling","description":"Compressor modelling","sidebar":"about"},"about/modelling/setup/models/fluid_model":{"id":"about/modelling/setup/models/fluid_model","title":"Fluid model","description":"Selecting a fluid model in eCalc","sidebar":"about"},"about/modelling/setup/models/index":{"id":"about/modelling/setup/models/index","title":"Models","description":"Guide on how to use models in eCalc\u2122","sidebar":"about"},"about/modelling/setup/models/turbine_modeling":{"id":"about/modelling/setup/models/turbine_modeling","title":"Turbine modelling","description":"Turbine modelling","sidebar":"about"},"about/modelling/setup/time_series":{"id":"about/modelling/setup/time_series","title":"Time series","description":"Time series guide and description","sidebar":"about"},"about/modelling/setup/variables":{"id":"about/modelling/setup/variables","title":"Variables","description":"Variables guide and description","sidebar":"about"},"about/modelling/theory/compressor_modelling":{"id":"about/modelling/theory/compressor_modelling","title":"Compressor modelling","description":"Compressor modelling theory","sidebar":"about"},"about/modelling/theory/index":{"id":"about/modelling/theory/index","title":"Theory","description":"Core theory about eCalc\u2122","sidebar":"about"},"about/modelling/theory/pump_modelling":{"id":"about/modelling/theory/pump_modelling","title":"Pump modelling","description":"Pump modelling theory","sidebar":"about"},"about/modelling/workflow/generic_workflow":{"id":"about/modelling/workflow/generic_workflow","title":"Generic Workflow","description":"Generic workflow","sidebar":"about"},"about/modelling/workflow/index":{"id":"about/modelling/workflow/index","title":"eCalc\u2122 Workflow","description":"eCalc modelling","sidebar":"about"},"about/references/api/index":{"id":"about/references/api/index","title":"API reference","description":"Generated API reference for the libecalc library can be found here.","sidebar":"about"},"about/references/cli_reference":{"id":"about/references/cli_reference","title":"ecalc","description":"Args:","sidebar":"about"},"about/references/index":{"id":"about/references/index","title":"Reference documentation","description":"Getting started with eCalc","sidebar":"about"},"about/references/keywords/ADJUSTMENT":{"id":"about/references/keywords/ADJUSTMENT","title":"ADJUSTMENT","description":"eCalc Model","sidebar":"about"},"about/references/keywords/CATEGORY":{"id":"about/references/keywords/CATEGORY","title":"CATEGORY","description":"eCalc Model","sidebar":"about"},"about/references/keywords/COMPRESSOR_MODEL":{"id":"about/references/keywords/COMPRESSOR_MODEL","title":"COMPRESSOR_MODEL","description":"ENERGYUSAGEMODEL / COMPRESSORMODEL","sidebar":"about"},"about/references/keywords/COMPRESSOR_SYSTEM":{"id":"about/references/keywords/COMPRESSOR_SYSTEM","title":"COMPRESSORS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/COMPRESSOR_TRAIN_MODEL":{"id":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","title":"COMPRESSOR_TRAIN_MODEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONDITION":{"id":"about/references/keywords/CONDITION","title":"CONDITION","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONDITIONS":{"id":"about/references/keywords/CONDITIONS","title":"CONDITIONS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONSTANT":{"id":"about/references/keywords/CONSTANT","title":"CONSTANT","description":"FACILITYINPUTS /","sidebar":"about"},"about/references/keywords/CONSUMERS":{"id":"about/references/keywords/CONSUMERS","title":"CONSUMERS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONSUMPTION_RATE_TYPE":{"id":"about/references/keywords/CONSUMPTION_RATE_TYPE","title":"CONSUMPTION_RATE_TYPE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CONTROL_MARGIN":{"id":"about/references/keywords/CONTROL_MARGIN","title":"CONTROL_MARGIN","description":"MODELS /","sidebar":"about"},"about/references/keywords/CONTROL_MARGIN_UNIT":{"id":"about/references/keywords/CONTROL_MARGIN_UNIT","title":"CONTROL_MARGIN_UNIT","description":"MODELS /","sidebar":"about"},"about/references/keywords/CROSSOVER":{"id":"about/references/keywords/CROSSOVER","title":"CROSSOVER","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/CURVE":{"id":"about/references/keywords/CURVE","title":"CURVE","description":"Description","sidebar":"about"},"about/references/keywords/CURVES":{"id":"about/references/keywords/CURVES","title":"CURVES","description":"Description","sidebar":"about"},"about/references/keywords/DIRECT_EMITTERS":{"id":"about/references/keywords/DIRECT_EMITTERS","title":"DIRECT_EMITTERS","description":"Deprecated from eCalc v8.7 (changed name to VENTING_EMITTERS).","sidebar":"about"},"about/references/keywords/DISCHARGE_PRESSURE":{"id":"about/references/keywords/DISCHARGE_PRESSURE","title":"DISCHARGE_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL":{"id":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","title":"DOWNSTREAM_PRESSURE_CONTROL","description":"MODELS /","sidebar":"about"},"about/references/keywords/EFFICIENCY":{"id":"about/references/keywords/EFFICIENCY","title":"EFFICIENCY","description":"Description","sidebar":"about"},"about/references/keywords/ELECTRICITY2FUEL":{"id":"about/references/keywords/ELECTRICITY2FUEL","title":"ELECTRICITY2FUEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/EMISSION":{"id":"about/references/keywords/EMISSION","title":"EMISSION","description":"New keyword from eCalc v8.8!","sidebar":"about"},"about/references/keywords/EMISSION_NAME":{"id":"about/references/keywords/EMISSION_NAME","title":"EMISSION_NAME","description":"Deprecated from eCalc v8.8 (is included in EMISSION).","sidebar":"about"},"about/references/keywords/EMISSION_RATE":{"id":"about/references/keywords/EMISSION_RATE","title":"EMISSION_RATE","description":"Deprecated from eCalc v8.8 (is included in EMISSION).","sidebar":"about"},"about/references/keywords/EMISSIONS":{"id":"about/references/keywords/EMISSIONS","title":"EMISSIONS","description":"FUELTYPES /","sidebar":"about"},"about/references/keywords/EMITTER_MODEL":{"id":"about/references/keywords/EMITTER_MODEL","title":"EMITTER_MODEL","description":"Deprecated from eCalc v8.8 (replaced by EMISSION).","sidebar":"about"},"about/references/keywords/END":{"id":"about/references/keywords/END","title":"END","description":"END","sidebar":"about"},"about/references/keywords/ENERGY_USAGE_MODEL":{"id":"about/references/keywords/ENERGY_USAGE_MODEL","title":"ENERGY_USAGE_MODEL","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/ENERGYFUNCTION":{"id":"about/references/keywords/ENERGYFUNCTION","title":"ENERGYFUNCTION","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/EXPRESSION":{"id":"about/references/keywords/EXPRESSION","title":"EXPRESSION","description":"VARIABLES /","sidebar":"about"},"about/references/keywords/EXTRAPOLATION":{"id":"about/references/keywords/EXTRAPOLATION","title":"EXTRAPOLATION","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/FACILITY_INPUTS":{"id":"about/references/keywords/FACILITY_INPUTS","title":"FACILITY_INPUTS","description":"FACILITYINPUTS","sidebar":"about"},"about/references/keywords/FACTOR":{"id":"about/references/keywords/FACTOR","title":"FACTOR","description":"[...] /","sidebar":"about"},"about/references/keywords/FILE":{"id":"about/references/keywords/FILE","title":"FILE","description":"... /","sidebar":"about"},"about/references/keywords/FLUID_DENSITY":{"id":"about/references/keywords/FLUID_DENSITY","title":"FLUID_DENSITY","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/FLUID_MODEL":{"id":"about/references/keywords/FLUID_MODEL","title":"FLUID_MODEL","description":"Description","sidebar":"about"},"about/references/keywords/FUEL":{"id":"about/references/keywords/FUEL","title":"FUEL","description":"... /","sidebar":"about"},"about/references/keywords/FUEL_TYPES":{"id":"about/references/keywords/FUEL_TYPES","title":"FUEL_TYPES","description":"FUELTYPES","sidebar":"about"},"about/references/keywords/FUELCONSUMERS":{"id":"about/references/keywords/FUELCONSUMERS","title":"FUELCONSUMERS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/FUELRATE":{"id":"about/references/keywords/FUELRATE","title":"FUELRATE","description":"INSTALLATIONS","sidebar":"about"},"about/references/keywords/GENERATORSETS":{"id":"about/references/keywords/GENERATORSETS","title":"GENERATORSETS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/HCEXPORT":{"id":"about/references/keywords/HCEXPORT","title":"HCEXPORT","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/HEAD":{"id":"about/references/keywords/HEAD","title":"HEAD","description":"Description","sidebar":"about"},"about/references/keywords/HEAD_MARGIN":{"id":"about/references/keywords/HEAD_MARGIN","title":"HEAD_MARGIN","description":"FACILITYINPUTS /","sidebar":"about"},"about/references/keywords/include":{"id":"about/references/keywords/include","title":"!include","description":"Description","sidebar":"about"},"about/references/keywords/index":{"id":"about/references/keywords/index","title":"YAML keywords","description":"eCalc KEYWORDS","sidebar":"about"},"about/references/keywords/INFLUENCE_TIME_VECTOR":{"id":"about/references/keywords/INFLUENCE_TIME_VECTOR","title":"INFLUENCE_TIME_VECTOR","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/INLET_TEMPERATURE":{"id":"about/references/keywords/INLET_TEMPERATURE","title":"INLET_TEMPERATURE","description":"MODELS / INLETTEMPERATURE","sidebar":"about"},"about/references/keywords/INSTALLATIONS":{"id":"about/references/keywords/INSTALLATIONS","title":"INSTALLATIONS","description":"INSTALLATIONS","sidebar":"about"},"about/references/keywords/INTERPOLATION_TYPE":{"id":"about/references/keywords/INTERPOLATION_TYPE","title":"INTERPOLATION_TYPE","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE":{"id":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","title":"INTERSTAGE_CONTROL_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/LOAD":{"id":"about/references/keywords/LOAD","title":"LOAD","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/LOWER_HEATING_VALUE":{"id":"about/references/keywords/LOWER_HEATING_VALUE","title":"LOWER_HEATING_VALUE","description":"Description","sidebar":"about"},"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE":{"id":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","title":"MAXIMUM_DISCHARGE_PRESSURE","description":"MODELS /","sidebar":"about"},"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE":{"id":"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","title":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","description":"MODELS /","sidebar":"about"},"about/references/keywords/MODELS":{"id":"about/references/keywords/MODELS","title":"MODELS","description":"MODELS","sidebar":"about"},"about/references/keywords/NAME":{"id":"about/references/keywords/NAME","title":"NAME","description":"[...] /","sidebar":"about"},"about/references/keywords/OPERATIONAL_SETTINGS":{"id":"about/references/keywords/OPERATIONAL_SETTINGS","title":"OPERATIONAL_SETTINGS","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/POWER_ADJUSTMENT_CONSTANT":{"id":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","title":"POWER_ADJUSTMENT_CONSTANT","description":"MODELS /","sidebar":"about"},"about/references/keywords/POWERLOSSFACTOR":{"id":"about/references/keywords/POWERLOSSFACTOR","title":"POWERLOSSFACTOR","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/PRESSURE_CONTROL":{"id":"about/references/keywords/PRESSURE_CONTROL","title":"PRESSURE_CONTROL","description":"Description","sidebar":"about"},"about/references/keywords/PUMPS":{"id":"about/references/keywords/PUMPS","title":"PUMPS","description":"INSTALLATIONS / [...] /","sidebar":"about"},"about/references/keywords/RATE":{"id":"about/references/keywords/RATE","title":"RATE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/RATE_FRACTIONS":{"id":"about/references/keywords/RATE_FRACTIONS","title":"RATE_FRACTIONS","description":"Description","sidebar":"about"},"about/references/keywords/RATE_PER_STREAM":{"id":"about/references/keywords/RATE_PER_STREAM","title":"RATE_PER_STREAM","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/REGULARITY":{"id":"about/references/keywords/REGULARITY","title":"REGULARITY","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/STAGES":{"id":"about/references/keywords/STAGES","title":"STAGES","description":"MODELS /","sidebar":"about"},"about/references/keywords/START":{"id":"about/references/keywords/START","title":"START","description":"START","sidebar":"about"},"about/references/keywords/STREAM":{"id":"about/references/keywords/STREAM","title":"STREAM","description":"MODELS /","sidebar":"about"},"about/references/keywords/STREAMS":{"id":"about/references/keywords/STREAMS","title":"STREAMS","description":"MODELS /","sidebar":"about"},"about/references/keywords/SUCTION_PRESSURE":{"id":"about/references/keywords/SUCTION_PRESSURE","title":"SUCTION_PRESSURE","description":"INSTALLATIONS /","sidebar":"about"},"about/references/keywords/TIME_SERIES":{"id":"about/references/keywords/TIME_SERIES","title":"TIME_SERIES","description":"TIMESERIES /","sidebar":"about"},"about/references/keywords/TOTAL_SYSTEM_RATE":{"id":"about/references/keywords/TOTAL_SYSTEM_RATE","title":"TOTAL_SYSTEM_RATE","description":"INSTALLATIONS / [...] /","sidebar":"about"},"about/references/keywords/TURBINE_EFFICIENCIES":{"id":"about/references/keywords/TURBINE_EFFICIENCIES","title":"TURBINE_EFFICIENCIES","description":"Description","sidebar":"about"},"about/references/keywords/TURBINE_LOAD":{"id":"about/references/keywords/TURBINE_LOAD","title":"TURBINE_LOAD","description":"Description","sidebar":"about"},"about/references/keywords/TURBINE_MODEL":{"id":"about/references/keywords/TURBINE_MODEL","title":"TURBINE_MODEL","description":"Description","sidebar":"about"},"about/references/keywords/TYPE":{"id":"about/references/keywords/TYPE","title":"TYPE","description":"[...] /","sidebar":"about"},"about/references/keywords/UNITS":{"id":"about/references/keywords/UNITS","title":"UNITS","description":"Description","sidebar":"about"},"about/references/keywords/UPSTREAM_PRESSURE_CONTROL":{"id":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","title":"UPSTREAM_PRESSURE_CONTROL","description":"MODELS /","sidebar":"about"},"about/references/keywords/VARIABLES":{"id":"about/references/keywords/VARIABLES","title":"VARIABLES","description":"VARIABLES","sidebar":"about"},"about/references/keywords/VENTING_EMITTERS":{"id":"about/references/keywords/VENTING_EMITTERS","title":"VENTING_EMITTERS","description":"New definition of VENTING_EMITTERS from eCalc v8.8!","sidebar":"about"},"changelog/changelog":{"id":"changelog/changelog","title":"Changelog","description":"8.11.0 (2024-03-18)","sidebar":"changelog"},"changelog/next":{"id":"changelog/next","title":"Next","description":"New Features","sidebar":"changelog"},"changelog/separator":{"id":"changelog/separator","title":"---","description":"","sidebar":"changelog"},"changelog/v7-0":{"id":"changelog/v7-0","title":"v7.0","description":"Features","sidebar":"changelog"},"changelog/v7-1":{"id":"changelog/v7-1","title":"v7.1","description":"Features","sidebar":"changelog"},"changelog/v7-2":{"id":"changelog/v7-2","title":"v7.2","description":"Features","sidebar":"changelog"},"changelog/v7-3":{"id":"changelog/v7-3","title":"v7.3","description":"Features","sidebar":"changelog"},"changelog/v7-4":{"id":"changelog/v7-4","title":"v7.4","description":"Features","sidebar":"changelog"},"changelog/v7-5":{"id":"changelog/v7-5","title":"v7.5","description":"Features","sidebar":"changelog"},"changelog/v7-6":{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","sidebar":"changelog"},"changelog/v8-0":{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","sidebar":"changelog"},"changelog/v8-1":{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","sidebar":"changelog"},"changelog/v8-10":{"id":"changelog/v8-10","title":"v8.10 (Latest)","description":"New Features","sidebar":"changelog"},"changelog/v8-2":{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","sidebar":"changelog"},"changelog/v8-3":{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","sidebar":"changelog"},"changelog/v8-4":{"id":"changelog/v8-4","title":"v8.4","description":"New Features","sidebar":"changelog"},"changelog/v8-5":{"id":"changelog/v8-5","title":"v8.5","description":"New Features","sidebar":"changelog"},"changelog/v8-6":{"id":"changelog/v8-6","title":"v8.6","description":"New Features","sidebar":"changelog"},"changelog/v8-7":{"id":"changelog/v8-7","title":"v8.7","description":"New Features","sidebar":"changelog"},"changelog/v8-8":{"id":"changelog/v8-8","title":"v8.8","description":"New Features","sidebar":"changelog"},"contribute/documentation-guide/documentation":{"id":"contribute/documentation-guide/documentation","title":"Overview","description":"This site was generated from the contents of your documentation folder using Docusaurus.","sidebar":"contribute"},"contribute/documentation-guide/markdown":{"id":"contribute/documentation-guide/markdown","title":"Markdown","description":"Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.","sidebar":"contribute"},"contribute/get-started":{"id":"contribute/get-started","title":"Get started","description":"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96","sidebar":"contribute"},"contribute/guides/conventional-commits":{"id":"contribute/guides/conventional-commits","title":"Conventional Commits","description":"Git commits are required to follow conventional commits.","sidebar":"contribute"},"contribute/guides/git":{"id":"contribute/guides/git","title":"Git","description":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base.","sidebar":"contribute"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9417.f108e646.js b/assets/js/9417.f108e646.js new file mode 100644 index 0000000000..674bf920fa --- /dev/null +++ b/assets/js/9417.f108e646.js @@ -0,0 +1 @@ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9417],{28734:function(t){t.exports=function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return i.bind(this)(t);var s=this.$utils(),r=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(t){switch(t){case"Q":return Math.ceil((e.$M+1)/3);case"Do":return n.ordinal(e.$D);case"gggg":return e.weekYear();case"GGGG":return e.isoWeekYear();case"wo":return n.ordinal(e.week(),"W");case"w":case"ww":return s.s(e.week(),"w"===t?1:2,"0");case"W":case"WW":return s.s(e.isoWeek(),"W"===t?1:2,"0");case"k":case"kk":return s.s(String(0===e.$H?24:e.$H),"k"===t?1:2,"0");case"X":return Math.floor(e.$d.getTime()/1e3);case"x":return e.$d.getTime();case"z":return"["+e.offsetName()+"]";case"zzz":return"["+e.offsetName("long")+"]";default:return t}}));return i.bind(this)(r)}}}()},10285:function(t){t.exports=function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,i=/\d\d?/,s=/\d*[^-_:/,()\s\d]+/,r={},a=function(t){return(t=+t)+(t>68?1900:2e3)},o=function(t){return function(e){this[t]=+e}},c=[/[+-]\d\d:?(\d\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if("Z"===t)return 0;var e=t.match(/([+-]|\d\d)/g),n=60*e[1]+(+e[2]||0);return 0===n?0:"+"===e[0]?-n:n}(t)}],l=function(t){var e=r[t];return e&&(e.indexOf?e:e.s.concat(e.f))},d=function(t,e){var n,i=r.meridiem;if(i){for(var s=1;s<=24;s+=1)if(t.indexOf(i(s,0,e))>-1){n=s>12;break}}else n=t===(e?"pm":"PM");return n},u={A:[s,function(t){this.afternoon=d(t,!1)}],a:[s,function(t){this.afternoon=d(t,!0)}],S:[/\d/,function(t){this.milliseconds=100*+t}],SS:[n,function(t){this.milliseconds=10*+t}],SSS:[/\d{3}/,function(t){this.milliseconds=+t}],s:[i,o("seconds")],ss:[i,o("seconds")],m:[i,o("minutes")],mm:[i,o("minutes")],H:[i,o("hours")],h:[i,o("hours")],HH:[i,o("hours")],hh:[i,o("hours")],D:[i,o("day")],DD:[n,o("day")],Do:[s,function(t){var e=r.ordinal,n=t.match(/\d+/);if(this.day=n[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[i,o("month")],MM:[n,o("month")],MMM:[s,function(t){var e=l("months"),n=(l("monthsShort")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[s,function(t){var e=l("months").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\d+/,o("year")],YY:[n,function(t){this.year=a(t)}],YYYY:[/\d{4}/,o("year")],Z:c,ZZ:c};function h(n){var i,s;i=n,s=r&&r.formats;for(var a=(n=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,n,i){var r=i&&i.toUpperCase();return n||s[i]||t[i]||s[r].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,n){return e||n.slice(1)}))}))).match(e),o=a.length,c=0;c<o;c+=1){var l=a[c],d=u[l],h=d&&d[0],f=d&&d[1];a[c]=f?{regex:h,parser:f}:l.replace(/^\[|\]$/g,"")}return function(t){for(var e={},n=0,i=0;n<o;n+=1){var s=a[n];if("string"==typeof s)i+=s.length;else{var r=s.regex,c=s.parser,l=t.slice(i),d=r.exec(l)[0];c.call(e,d),t=t.replace(d,"")}}return function(t){var e=t.afternoon;if(void 0!==e){var n=t.hours;e?n<12&&(t.hours+=12):12===n&&(t.hours=0),delete t.afternoon}}(e),e}}return function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(a=t.parseTwoDigitYear);var i=e.prototype,s=i.parse;i.parse=function(t){var e=t.date,i=t.utc,a=t.args;this.$u=i;var o=a[1];if("string"==typeof o){var c=!0===a[2],l=!0===a[3],d=c||l,u=a[2];l&&(u=a[2]),r=this.$locale(),!c&&u&&(r=n.Ls[u]),this.$d=function(t,e,n){try{if(["x","X"].indexOf(e)>-1)return new Date(("X"===e?1e3:1)*t);var i=h(e)(t),s=i.year,r=i.month,a=i.day,o=i.hours,c=i.minutes,l=i.seconds,d=i.milliseconds,u=i.zone,f=new Date,y=a||(s||r?1:f.getDate()),m=s||f.getFullYear(),k=0;s&&!r||(k=r>0?r-1:f.getMonth());var p=o||0,g=c||0,b=l||0,T=d||0;return u?new Date(Date.UTC(m,k,y,p,g,b,T+60*u.offset*1e3)):n?new Date(Date.UTC(m,k,y,p,g,b,T)):new Date(m,k,y,p,g,b,T)}catch(t){return new Date("")}}(e,o,i),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),d&&e!=this.format(o)&&(this.$d=new Date("")),r={}}else if(o instanceof Array)for(var f=o.length,y=1;y<=f;y+=1){a[1]=o[y-1];var m=n.apply(this,a);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}y===f&&(this.$d=new Date(""))}else s.call(this,t)}}}()},59542:function(t){t.exports=function(){"use strict";var t="day";return function(e,n,i){var s=function(e){return e.add(4-e.isoWeekday(),t)},r=n.prototype;r.isoWeekYear=function(){return s(this).year()},r.isoWeek=function(e){if(!this.$utils().u(e))return this.add(7*(e-this.isoWeek()),t);var n,r,a,o=s(this),c=(n=this.isoWeekYear(),a=4-(r=(this.$u?i.utc:i)().year(n).startOf("year")).isoWeekday(),r.isoWeekday()>4&&(a+=7),r.add(a,t));return o.diff(c,"week")+1},r.isoWeekday=function(t){return this.$utils().u(t)?this.day()||7:this.day(this.day()%7?t:t-7)};var a=r.startOf;r.startOf=function(t,e){var n=this.$utils(),i=!!n.u(e)||e;return"isoweek"===n.p(t)?i?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):a.bind(this)(t,e)}}}()},39417:(t,e,n)=>{"use strict";n.d(e,{diagram:()=>X});var i=n(17967),s=n(27484),r=n(59542),a=n(10285),o=n(28734),c=n(28758),l=n(64218),d=(n(27856),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],n=[1,25],i=[1,26],s=[1,27],r=[1,28],a=[1,29],o=[1,30],c=[1,31],l=[1,9],d=[1,10],u=[1,11],h=[1,12],f=[1,13],y=[1,14],m=[1,15],k=[1,16],p=[1,18],g=[1,19],b=[1,20],T=[1,21],x=[1,22],v=[1,24],_=[1,32],w={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(t,e,n,i,s,r,a){var o=r.length-1;switch(s){case 1:return r[o-1];case 2:case 6:case 7:this.$=[];break;case 3:r[o-1].push(r[o]),this.$=r[o-1];break;case 4:case 5:this.$=r[o];break;case 8:i.setWeekday("monday");break;case 9:i.setWeekday("tuesday");break;case 10:i.setWeekday("wednesday");break;case 11:i.setWeekday("thursday");break;case 12:i.setWeekday("friday");break;case 13:i.setWeekday("saturday");break;case 14:i.setWeekday("sunday");break;case 15:i.setDateFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 16:i.enableInclusiveEndDates(),this.$=r[o].substr(18);break;case 17:i.TopAxis(),this.$=r[o].substr(8);break;case 18:i.setAxisFormat(r[o].substr(11)),this.$=r[o].substr(11);break;case 19:i.setTickInterval(r[o].substr(13)),this.$=r[o].substr(13);break;case 20:i.setExcludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 21:i.setIncludes(r[o].substr(9)),this.$=r[o].substr(9);break;case 22:i.setTodayMarker(r[o].substr(12)),this.$=r[o].substr(12);break;case 24:i.setDiagramTitle(r[o].substr(6)),this.$=r[o].substr(6);break;case 25:this.$=r[o].trim(),i.setAccTitle(this.$);break;case 26:case 27:this.$=r[o].trim(),i.setAccDescription(this.$);break;case 28:i.addSection(r[o].substr(8)),this.$=r[o].substr(8);break;case 30:i.addTask(r[o-1],r[o]),this.$="task";break;case 31:this.$=r[o-1],i.setClickEvent(r[o-1],r[o],null);break;case 32:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],r[o]);break;case 33:this.$=r[o-2],i.setClickEvent(r[o-2],r[o-1],null),i.setLink(r[o-2],r[o]);break;case 34:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-2],r[o-1]),i.setLink(r[o-3],r[o]);break;case 35:this.$=r[o-2],i.setClickEvent(r[o-2],r[o],null),i.setLink(r[o-2],r[o-1]);break;case 36:this.$=r[o-3],i.setClickEvent(r[o-3],r[o-1],r[o]),i.setLink(r[o-3],r[o-2]);break;case 37:this.$=r[o-1],i.setLink(r[o-1],r[o]);break;case 38:case 44:this.$=r[o-1]+" "+r[o];break;case 39:case 40:case 42:this.$=r[o-2]+" "+r[o-1]+" "+r[o];break;case 41:case 43:this.$=r[o-3]+" "+r[o-2]+" "+r[o-1]+" "+r[o]}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:i,14:s,15:r,16:a,17:o,18:c,19:l,20:d,21:u,22:h,23:f,24:y,25:m,26:k,27:p,28:g,30:b,32:T,33:x,34:23,35:v,37:_},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:33,11:17,12:n,13:i,14:s,15:r,16:a,17:o,18:c,19:l,20:d,21:u,22:h,23:f,24:y,25:m,26:k,27:p,28:g,30:b,32:T,33:x,34:23,35:v,37:_},t(e,[2,5]),t(e,[2,6]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),{29:[1,34]},{31:[1,35]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),{36:[1,36]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),{38:[1,37],40:[1,38]},t(e,[2,4]),t(e,[2,25]),t(e,[2,26]),t(e,[2,30]),t(e,[2,31],{39:[1,39],40:[1,40]}),t(e,[2,37],{38:[1,41]}),t(e,[2,32],{40:[1,42]}),t(e,[2,33]),t(e,[2,35],{39:[1,43]}),t(e,[2,34]),t(e,[2,36])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],i=[],s=[null],r=[],a=this.table,o="",c=0,l=0,d=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);u.setInput(t,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var y=u.yylloc;r.push(y);var m=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var k,p,g,b,T,x,v,_,w,$={};;){if(p=n[n.length-1],this.defaultActions[p]?g=this.defaultActions[p]:(null==k&&(w=void 0,"number"!=typeof(w=i.pop()||u.lex()||1)&&(w instanceof Array&&(w=(i=w).pop()),w=e.symbols_[w]||w),k=w),g=a[p]&&a[p][k]),void 0===g||!g.length||!g[0]){var D="";for(T in _=[],a[p])this.terminals_[T]&&T>2&&_.push("'"+this.terminals_[T]+"'");D=u.showPosition?"Parse error on line "+(c+1)+":\n"+u.showPosition()+"\nExpecting "+_.join(", ")+", got '"+(this.terminals_[k]||k)+"'":"Parse error on line "+(c+1)+": Unexpected "+(1==k?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(D,{text:u.match,token:this.terminals_[k]||k,line:u.yylineno,loc:y,expected:_})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+k);switch(g[0]){case 1:n.push(k),s.push(u.yytext),r.push(u.yylloc),n.push(g[1]),k=null,l=u.yyleng,o=u.yytext,c=u.yylineno,y=u.yylloc;break;case 2:if(x=this.productions_[g[1]][1],$.$=s[s.length-x],$._$={first_line:r[r.length-(x||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(x||1)].first_column,last_column:r[r.length-1].last_column},m&&($._$.range=[r[r.length-(x||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply($,[o,l,c,h.yy,g[1],s,r].concat(d))))return b;x&&(n=n.slice(0,-1*x*2),s=s.slice(0,-1*x),r=r.slice(0,-1*x)),n.push(this.productions_[g[1]][0]),s.push($.$),r.push($._$),v=a[n[n.length-2]][n[n.length-1]],n.push(v);break;case 3:return!0}}return!0}},$={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===i.length?this.yylloc.first_column:0)+i[i.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,i,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(i=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var r in s)this[r]=s[r];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),r=0;r<s.length;r++)if((n=this._input.match(this.rules[s[r]]))&&(!e||n[0].length>e[0].length)){if(e=n,i=r,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,s[r])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[i]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,i){switch(n){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:case 15:case 18:case 21:case 24:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:case 9:case 10:case 12:case 13:break;case 11:return 10;case 14:this.begin("href");break;case 16:return 40;case 17:this.begin("callbackname");break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 38;case 22:return 39;case 23:this.begin("click");break;case 25:return 37;case 26:return 4;case 27:return 19;case 28:return 20;case 29:return 21;case 30:return 22;case 31:return 23;case 32:return 25;case 33:return 24;case 34:return 26;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return"date";case 43:return 27;case 44:return"accDescription";case 45:return 33;case 46:return 35;case 47:return 36;case 48:return":";case 49:return 6;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};function D(){this.yy={}}return w.lexer=$,D.prototype=w,w.Parser=D,new D}());d.parser=d;const u=d;s.extend(r),s.extend(a),s.extend(o);let h,f="",y="",m="",k=[],p=[],g={},b=[],T=[],x="",v="";const _=["active","done","crit","milestone"];let w=[],$=!1,D=!1,C="sunday",S=0;const E=function(t,e,n,i){return!i.includes(t.format(e.trim()))&&(!!(t.isoWeekday()>=6&&n.includes("weekends"))||(!!n.includes(t.format("dddd").toLowerCase())||n.includes(t.format(e.trim()))))},M=function(t,e,n,i){if(!n.length||t.manualEndTime)return;let r,a;r=t.startTime instanceof Date?s(t.startTime):s(t.startTime,e,!0),r=r.add(1,"d"),a=t.endTime instanceof Date?s(t.endTime):s(t.endTime,e,!0);const[o,c]=Y(r,a,e,n,i);t.endTime=o.toDate(),t.renderEndTime=c},Y=function(t,e,n,i,s){let r=!1,a=null;for(;t<=e;)r||(a=e.toDate()),r=E(t,n,i,s),r&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,a]},A=function(t,e,n){n=n.trim();const i=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==i){let t=null;if(i[1].split(" ").forEach((function(e){let n=N(e);void 0!==n&&(t?n.endTime>t.endTime&&(t=n):t=n)})),t)return t.endTime;{const t=new Date;return t.setHours(0,0,0,0),t}}let r=s(n,e.trim(),!0);if(r.isValid())return r.toDate();{c.l.debug("Invalid date:"+n),c.l.debug("With date format:"+e.trim());const t=new Date(n);if(void 0===t||isNaN(t.getTime())||t.getFullYear()<-1e4||t.getFullYear()>1e4)throw new Error("Invalid date:"+n);return t}},L=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return null!==e?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},I=function(t,e,n,i=!1){n=n.trim();let r=s(n,e.trim(),!0);if(r.isValid())return i&&(r=r.add(1,"d")),r.toDate();let a=s(t);const[o,c]=L(n);if(!Number.isNaN(o)){const t=a.add(o,c);t.isValid()&&(a=t)}return a.toDate()};let O=0;const F=function(t){return void 0===t?(O+=1,"task"+O):t};let W,B,P=[];const z={},N=function(t){const e=z[t];return P[e]},H=function(){const t=function(t){const e=P[t];let n="";switch(P[t].raw.startTime.type){case"prevTaskEnd":{const t=N(e.prevTaskId);e.startTime=t.endTime;break}case"getStartDate":n=A(0,f,P[t].raw.startTime.startData),n&&(P[t].startTime=n)}return P[t].startTime&&(P[t].endTime=I(P[t].startTime,f,P[t].raw.endTime.data,$),P[t].endTime&&(P[t].processed=!0,P[t].manualEndTime=s(P[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),M(P[t],f,p,k))),P[t].processed};let e=!0;for(const[n,i]of P.entries())t(n),e=e&&i.processed;return e},j=function(t,e){t.split(",").forEach((function(t){let n=N(t);void 0!==n&&n.classes.push(e)}))},Z=function(t,e){w.push((function(){const n=document.querySelector(`[id="${t}"]`);null!==n&&n.addEventListener("click",(function(){e()}))}),(function(){const n=document.querySelector(`[id="${t}-text"]`);null!==n&&n.addEventListener("click",(function(){e()}))}))},G={getConfig:()=>(0,c.c)().gantt,clear:function(){b=[],T=[],x="",w=[],O=0,W=void 0,B=void 0,P=[],f="",y="",v="",h=void 0,m="",k=[],p=[],$=!1,D=!1,S=0,g={},(0,c.t)(),C="sunday"},setDateFormat:function(t){f=t},getDateFormat:function(){return f},enableInclusiveEndDates:function(){$=!0},endDatesAreInclusive:function(){return $},enableTopAxis:function(){D=!0},topAxisEnabled:function(){return D},setAxisFormat:function(t){y=t},getAxisFormat:function(){return y},setTickInterval:function(t){h=t},getTickInterval:function(){return h},setTodayMarker:function(t){m=t},getTodayMarker:function(){return m},setAccTitle:c.s,getAccTitle:c.g,setDiagramTitle:c.q,getDiagramTitle:c.r,setDisplayMode:function(t){v=t},getDisplayMode:function(){return v},setAccDescription:c.b,getAccDescription:c.a,addSection:function(t){x=t,b.push(t)},getSections:function(){return b},getTasks:function(){let t=H();let e=0;for(;!t&&e<10;)t=H(),e++;return T=P,T},addTask:function(t,e){const n={section:x,type:x,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),s={};V(i,s,_);for(let r=0;r<i.length;r++)i[r]=i[r].trim();switch(i.length){case 1:s.id=F(),s.startTime={type:"prevTaskEnd",id:t},s.endTime={data:i[0]};break;case 2:s.id=F(),s.startTime={type:"getStartDate",startData:i[0]},s.endTime={data:i[1]};break;case 3:s.id=F(i[0]),s.startTime={type:"getStartDate",startData:i[1]},s.endTime={data:i[2]}}return s}(B,e);n.raw.startTime=i.startTime,n.raw.endTime=i.endTime,n.id=i.id,n.prevTaskId=B,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,n.order=S,S++;const s=P.push(n);B=n.id,z[n.id]=s-1},findTaskById:N,addTaskOrg:function(t,e){const n={section:x,type:x,description:t,task:t,classes:[]},i=function(t,e){let n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;const i=n.split(","),r={};V(i,r,_);for(let s=0;s<i.length;s++)i[s]=i[s].trim();let a="";switch(i.length){case 1:r.id=F(),r.startTime=t.endTime,a=i[0];break;case 2:r.id=F(),r.startTime=A(0,f,i[0]),a=i[1];break;case 3:r.id=F(i[0]),r.startTime=A(0,f,i[1]),a=i[2]}return a&&(r.endTime=I(r.startTime,f,a,$),r.manualEndTime=s(a,"YYYY-MM-DD",!0).isValid(),M(r,f,p,k)),r}(W,e);n.startTime=i.startTime,n.endTime=i.endTime,n.id=i.id,n.active=i.active,n.done=i.done,n.crit=i.crit,n.milestone=i.milestone,W=n,T.push(n)},setIncludes:function(t){k=t.toLowerCase().split(/[\s,]+/)},getIncludes:function(){return k},setExcludes:function(t){p=t.toLowerCase().split(/[\s,]+/)},getExcludes:function(){return p},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){if("loose"!==(0,c.c)().securityLevel)return;if(void 0===e)return;let i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let t=0;t<i.length;t++){let e=i[t].trim();'"'===e.charAt(0)&&'"'===e.charAt(e.length-1)&&(e=e.substr(1,e.length-2)),i[t]=e}}0===i.length&&i.push(t),void 0!==N(t)&&Z(t,(()=>{c.u.runFunc(e,...i)}))}(t,e,n)})),j(t,"clickable")},setLink:function(t,e){let n=e;"loose"!==(0,c.c)().securityLevel&&(n=(0,i.Nm)(e)),t.split(",").forEach((function(t){void 0!==N(t)&&(Z(t,(()=>{window.open(n,"_self")})),g[t]=n)})),j(t,"clickable")},getLinks:function(){return g},bindFunctions:function(t){w.forEach((function(e){e(t)}))},parseDuration:L,isInvalidDate:E,setWeekday:function(t){C=t},getWeekday:function(){return C}};function V(t,e,n){let i=!0;for(;i;)i=!1,n.forEach((function(n){const s=new RegExp("^\\s*"+n+"\\s*$");t[0].match(s)&&(e[n]=!0,t.shift(1),i=!0)}))}const q={monday:l.Ox9,tuesday:l.YDX,wednesday:l.EFj,thursday:l.Igq,friday:l.y2j,saturday:l.LqH,sunday:l.Zyz},R=(t,e)=>{let n=[...t].map((()=>-1/0)),i=[...t].sort(((t,e)=>t.startTime-e.startTime||t.order-e.order)),s=0;for(const r of i)for(let t=0;t<n.length;t++)if(r.startTime>=n[t]){n[t]=r.endTime,r.order=t+e,t>s&&(s=t);break}return s};let U;const X={parser:u,db:G,renderer:{setConf:function(){c.l.debug("Something is calling, setConf, remove the call")},draw:function(t,e,n,i){const r=(0,c.c)().gantt,a=(0,c.c)().securityLevel;let o;"sandbox"===a&&(o=(0,l.Ys)("#i"+e));const d="sandbox"===a?(0,l.Ys)(o.nodes()[0].contentDocument.body):(0,l.Ys)("body"),u="sandbox"===a?o.nodes()[0].contentDocument:document,h=u.getElementById(e);U=h.parentElement.offsetWidth,void 0===U&&(U=1200),void 0!==r.useWidth&&(U=r.useWidth);const f=i.db.getTasks();let y=[];for(const s of f)y.push(s.type);y=function(t){const e={},n=[];for(let i=0,s=t.length;i<s;++i)Object.prototype.hasOwnProperty.call(e,t[i])||(e[t[i]]=!0,n.push(t[i]));return n}(y);const m={};let k=2*r.topPadding;if("compact"===i.db.getDisplayMode()||"compact"===r.displayMode){const t={};for(const n of f)void 0===t[n.section]?t[n.section]=[n]:t[n.section].push(n);let e=0;for(const n of Object.keys(t)){const i=R(t[n],e)+1;e+=i,k+=i*(r.barHeight+r.barGap),m[n]=i}}else{k+=f.length*(r.barHeight+r.barGap);for(const t of y)m[t]=f.filter((e=>e.type===t)).length}h.setAttribute("viewBox","0 0 "+U+" "+k);const p=d.select(`[id="${e}"]`),g=(0,l.Xf)().domain([(0,l.VV$)(f,(function(t){return t.startTime})),(0,l.Fp7)(f,(function(t){return t.endTime}))]).rangeRound([0,U-r.leftPadding-r.rightPadding]);f.sort((function(t,e){const n=t.startTime,i=e.startTime;let s=0;return n>i?s=1:n<i&&(s=-1),s})),function(t,n,a){const o=r.barHeight,d=o+r.barGap,h=r.topPadding,f=r.leftPadding;(0,l.BYU)().domain([0,y.length]).range(["#00B9FA","#F95002"]).interpolate(l.JHv);(function(t,e,n,a,o,l,d,u){if(0===d.length&&0===u.length)return;let h,f;for(const{startTime:i,endTime:s}of l)(void 0===h||i<h)&&(h=i),(void 0===f||s>f)&&(f=s);if(!h||!f)return;if(s(f).diff(s(h),"year")>5)return void c.l.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");const y=i.db.getDateFormat(),m=[];let k=null,b=s(h);for(;b.valueOf()<=f;)i.db.isInvalidDate(b,y,d,u)?k?k.end=b:k={start:b,end:b}:k&&(m.push(k),k=null),b=b.add(1,"d");p.append("g").selectAll("rect").data(m).enter().append("rect").attr("id",(function(t){return"exclude-"+t.start.format("YYYY-MM-DD")})).attr("x",(function(t){return g(t.start)+n})).attr("y",r.gridLineStartPadding).attr("width",(function(t){const e=t.end.add(1,"day");return g(e)-g(t.start)})).attr("height",o-e-r.gridLineStartPadding).attr("transform-origin",(function(e,i){return(g(e.start)+n+.5*(g(e.end)-g(e.start))).toString()+"px "+(i*t+.5*o).toString()+"px"})).attr("class","exclude-range")})(d,h,f,0,a,t,i.db.getExcludes(),i.db.getIncludes()),function(t,e,n,s){let a=(0,l.LLu)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));const o=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(i.db.getTickInterval()||r.tickInterval);if(null!==o){const t=o[1],e=o[2],n=i.db.getWeekday()||r.weekday;switch(e){case"millisecond":a.ticks(l.U8T.every(t));break;case"second":a.ticks(l.S1K.every(t));break;case"minute":a.ticks(l.Z_i.every(t));break;case"hour":a.ticks(l.WQD.every(t));break;case"day":a.ticks(l.rr1.every(t));break;case"week":a.ticks(q[n].every(t));break;case"month":a.ticks(l.F0B.every(t))}}if(p.append("g").attr("class","grid").attr("transform","translate("+t+", "+(s-50)+")").call(a).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),i.db.topAxisEnabled()||r.topAxis){let n=(0,l.F5q)(g).tickSize(-s+e+r.gridLineStartPadding).tickFormat((0,l.i$Z)(i.db.getAxisFormat()||r.axisFormat||"%Y-%m-%d"));if(null!==o){const t=o[1],e=o[2],s=i.db.getWeekday()||r.weekday;switch(e){case"millisecond":n.ticks(l.U8T.every(t));break;case"second":n.ticks(l.S1K.every(t));break;case"minute":n.ticks(l.Z_i.every(t));break;case"hour":n.ticks(l.WQD.every(t));break;case"day":n.ticks(l.rr1.every(t));break;case"week":n.ticks(q[s].every(t));break;case"month":n.ticks(l.F0B.every(t))}}p.append("g").attr("class","grid").attr("transform","translate("+t+", "+e+")").call(n).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}(f,h,0,a),function(t,n,s,a,o,d,u){const h=[...new Set(t.map((t=>t.order)))].map((e=>t.find((t=>t.order===e))));p.append("g").selectAll("rect").data(h).enter().append("rect").attr("x",0).attr("y",(function(t,e){return t.order*n+s-2})).attr("width",(function(){return u-r.rightPadding/2})).attr("height",n).attr("class",(function(t){for(const[e,n]of y.entries())if(t.type===n)return"section section"+e%r.numberSectionStyles;return"section section0"}));const f=p.append("g").selectAll("rect").data(t).enter(),m=i.db.getLinks();f.append("rect").attr("id",(function(t){return t.id})).attr("rx",3).attr("ry",3).attr("x",(function(t){return t.milestone?g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))-.5*o:g(t.startTime)+a})).attr("y",(function(t,e){return t.order*n+s})).attr("width",(function(t){return t.milestone?o:g(t.renderEndTime||t.endTime)-g(t.startTime)})).attr("height",o).attr("transform-origin",(function(t,e){return e=t.order,(g(t.startTime)+a+.5*(g(t.endTime)-g(t.startTime))).toString()+"px "+(e*n+s+.5*o).toString()+"px"})).attr("class",(function(t){const e="task";let n="";t.classes.length>0&&(n=t.classes.join(" "));let i=0;for(const[a,o]of y.entries())t.type===o&&(i=a%r.numberSectionStyles);let s="";return t.active?t.crit?s+=" activeCrit":s=" active":t.done?s=t.crit?" doneCrit":" done":t.crit&&(s+=" crit"),0===s.length&&(s=" task"),t.milestone&&(s=" milestone "+s),s+=i,s+=" "+n,e+s})),f.append("text").attr("id",(function(t){return t.id+"-text"})).text((function(t){return t.task})).attr("font-size",r.fontSize).attr("x",(function(t){let e=g(t.startTime),n=g(t.renderEndTime||t.endTime);t.milestone&&(e+=.5*(g(t.endTime)-g(t.startTime))-.5*o),t.milestone&&(n=e+o);const i=this.getBBox().width;return i>n-e?n+i+1.5*r.leftPadding>u?e+a-5:n+a+5:(n-e)/2+e+a})).attr("y",(function(t,e){return t.order*n+r.barHeight/2+(r.fontSize/2-2)+s})).attr("text-height",o).attr("class",(function(t){const e=g(t.startTime);let n=g(t.endTime);t.milestone&&(n=e+o);const i=this.getBBox().width;let s="";t.classes.length>0&&(s=t.classes.join(" "));let a=0;for(const[o,l]of y.entries())t.type===l&&(a=o%r.numberSectionStyles);let c="";return t.active&&(c=t.crit?"activeCritText"+a:"activeText"+a),t.done?c=t.crit?c+" doneCritText"+a:c+" doneText"+a:t.crit&&(c=c+" critText"+a),t.milestone&&(c+=" milestoneText"),i>n-e?n+i+1.5*r.leftPadding>u?s+" taskTextOutsideLeft taskTextOutside"+a+" "+c:s+" taskTextOutsideRight taskTextOutside"+a+" "+c+" width-"+i:s+" taskText taskText"+a+" "+c+" width-"+i}));if("sandbox"===(0,c.c)().securityLevel){let t;t=(0,l.Ys)("#i"+e);const n=t.nodes()[0].contentDocument;f.filter((function(t){return void 0!==m[t.id]})).each((function(t){var e=n.querySelector("#"+t.id),i=n.querySelector("#"+t.id+"-text");const s=e.parentNode;var r=n.createElement("a");r.setAttribute("xlink:href",m[t.id]),r.setAttribute("target","_top"),s.appendChild(r),r.appendChild(e),r.appendChild(i)}))}}(t,d,h,f,o,0,n),function(t,e){let n=0;const i=Object.keys(m).map((t=>[t,m[t]]));p.append("g").selectAll("text").data(i).enter().append((function(t){const e=t[0].split(c.e.lineBreakRegex),n=-(e.length-1)/2,i=u.createElementNS("http://www.w3.org/2000/svg","text");i.setAttribute("dy",n+"em");for(const[s,r]of e.entries()){const t=u.createElementNS("http://www.w3.org/2000/svg","tspan");t.setAttribute("alignment-baseline","central"),t.setAttribute("x","10"),s>0&&t.setAttribute("dy","1em"),t.textContent=r,i.appendChild(t)}return i})).attr("x",10).attr("y",(function(s,r){if(!(r>0))return s[1]*t/2+e;for(let a=0;a<r;a++)return n+=i[r-1][1],s[1]*t/2+n*t+e})).attr("font-size",r.sectionFontSize).attr("class",(function(t){for(const[e,n]of y.entries())if(t[0]===n)return"sectionTitle sectionTitle"+e%r.numberSectionStyles;return"sectionTitle"}))}(d,h),function(t,e,n,s){const a=i.db.getTodayMarker();if("off"===a)return;const o=p.append("g").attr("class","today"),c=new Date,l=o.append("line");l.attr("x1",g(c)+t).attr("x2",g(c)+t).attr("y1",r.titleTopMargin).attr("y2",s-r.titleTopMargin).attr("class","today"),""!==a&&l.attr("style",a.replace(/,/g,";"))}(f,0,0,a)}(f,U,k),(0,c.i)(p,k,U,r.useMaxWidth),p.append("text").text(i.db.getDiagramTitle()).attr("x",U/2).attr("y",r.titleTopMargin).attr("class","titleText")}},styles:t=>`\n .mermaid-main-font {\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .exclude-range {\n fill: ${t.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${t.sectionBkgColor};\n }\n\n .section2 {\n fill: ${t.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${t.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${t.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${t.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n }\n\n .grid .tick text {\n font-family: ${t.fontFamily};\n fill: ${t.textColor};\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${t.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .taskTextOutsideRight {\n fill: ${t.taskTextDarkColor};\n text-anchor: start;\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n\n .taskTextOutsideLeft {\n fill: ${t.taskTextDarkColor};\n text-anchor: end;\n }\n\n\n /* Special case clickable */\n\n .task.clickable {\n cursor: pointer;\n }\n\n .taskText.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${t.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${t.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${t.taskBkgColor};\n stroke: ${t.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${t.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${t.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${t.activeTaskBkgColor};\n stroke: ${t.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${t.doneTaskBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${t.critBorderColor};\n fill: ${t.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${t.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${t.titleColor||t.textColor};\n font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif);\n }\n`}}}]); \ No newline at end of file diff --git a/assets/js/9496.ce93e692.js b/assets/js/9496.ce93e692.js new file mode 100644 index 0000000000..3db849957d --- /dev/null +++ b/assets/js/9496.ce93e692.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9496],{79496:(t,e,a)=>{a.d(e,{diagram:()=>b});var i=a(27180),n=a(64218),d=a(41644),r=a(45625),s=a(28758);a(27484),a(17967),a(27856);const o={},c=(t,e)=>{o[t]=e},g=(t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+1.3*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),i=a.height,n=t.append("text").attr("x",(0,s.c)().state.padding).attr("y",i+.4*(0,s.c)().state.padding+(0,s.c)().state.dividerMargin+(0,s.c)().state.textHeight).attr("class","state-description");let d=!0,r=!0;e.descriptions.forEach((function(t){d||(!function(t,e,a){const i=t.append("tspan").attr("x",2*(0,s.c)().state.padding).text(e);a||i.attr("dy",(0,s.c)().state.textHeight)}(n,t,r),r=!1),d=!1}));const o=t.append("line").attr("x1",(0,s.c)().state.padding).attr("y1",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("y2",(0,s.c)().state.padding+i+(0,s.c)().state.dividerMargin/2).attr("class","descr-divider"),c=n.node().getBBox(),g=Math.max(c.width,a.width);return o.attr("x2",g+3*(0,s.c)().state.padding),t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",g+2*(0,s.c)().state.padding).attr("height",c.height+i+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius),t},p=(t,e,a)=>{const i=(0,s.c)().state.padding,n=2*(0,s.c)().state.padding,d=t.node().getBBox(),r=d.width,o=d.x,c=t.append("text").attr("x",0).attr("y",(0,s.c)().state.titleShift).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),g=c.node().getBBox().width+n;let p,h=Math.max(g,r);h===r&&(h+=n);const l=t.node().getBBox();e.doc,p=o-i,g>r&&(p=(r-h)/2+i),Math.abs(o-l.x)<i&&g>r&&(p=o-(g-r)/2);const x=1-(0,s.c)().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",x).attr("class",a?"alt-composit":"composit").attr("width",h).attr("height",l.height+(0,s.c)().state.textHeight+(0,s.c)().state.titleShift+1).attr("rx","0"),c.attr("x",p+i),g<=r&&c.attr("x",o+(h-n)/2-g/2+i),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",3*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",(0,s.c)().state.titleShift-(0,s.c)().state.textHeight-(0,s.c)().state.padding).attr("width",h).attr("height",l.height+3+2*(0,s.c)().state.textHeight).attr("rx",(0,s.c)().state.radius),t},h=(t,e)=>{e.attr("class","state-note");const a=e.append("rect").attr("x",0).attr("y",(0,s.c)().state.padding),i=e.append("g"),{textWidth:n,textHeight:d}=((t,e,a,i)=>{let n=0;const d=i.append("text");d.style("text-anchor","start"),d.attr("class","noteText");let r=t.replace(/\r\n/g,"<br/>");r=r.replace(/\n/g,"<br/>");const o=r.split(s.e.lineBreakRegex);let c=1.25*(0,s.c)().state.noteMargin;for(const g of o){const t=g.trim();if(t.length>0){const i=d.append("tspan");i.text(t),0===c&&(c+=i.node().getBBox().height),n+=c,i.attr("x",e+(0,s.c)().state.noteMargin),i.attr("y",a+n+1.25*(0,s.c)().state.noteMargin)}}return{textWidth:d.node().getBBox().width,textHeight:n}})(t,0,0,i);return a.attr("height",d+2*(0,s.c)().state.noteMargin),a.attr("width",n+2*(0,s.c)().state.noteMargin),a},l=function(t,e){const a=e.id,i={id:a,label:e.id,width:0,height:0},n=t.append("g").attr("id",a).attr("class","stateGroup");"start"===e.type&&(t=>{t.append("circle").attr("class","start-state").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit)})(n),"end"===e.type&&(t=>{t.append("circle").attr("class","end-state-outer").attr("r",(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+(0,s.c)().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",(0,s.c)().state.sizeUnit).attr("cx",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2).attr("cy",(0,s.c)().state.padding+(0,s.c)().state.sizeUnit+2)})(n),"fork"!==e.type&&"join"!==e.type||((t,e)=>{let a=(0,s.c)().state.forkWidth,i=(0,s.c)().state.forkHeight;if(e.parentId){let t=a;a=i,i=t}t.append("rect").style("stroke","black").style("fill","black").attr("width",a).attr("height",i).attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding)})(n,e),"note"===e.type&&h(e.note.text,n),"divider"===e.type&&(t=>{t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",(0,s.c)().state.textHeight).attr("class","divider").attr("x2",2*(0,s.c)().state.textHeight).attr("y1",0).attr("y2",0)})(n),"default"===e.type&&0===e.descriptions.length&&((t,e)=>{const a=t.append("text").attr("x",2*(0,s.c)().state.padding).attr("y",(0,s.c)().state.textHeight+2*(0,s.c)().state.padding).attr("font-size",(0,s.c)().state.fontSize).attr("class","state-title").text(e.id),i=a.node().getBBox();t.insert("rect",":first-child").attr("x",(0,s.c)().state.padding).attr("y",(0,s.c)().state.padding).attr("width",i.width+2*(0,s.c)().state.padding).attr("height",i.height+2*(0,s.c)().state.padding).attr("rx",(0,s.c)().state.radius)})(n,e),"default"===e.type&&e.descriptions.length>0&&g(n,e);const d=n.node().getBBox();return i.width=d.width+2*(0,s.c)().state.padding,i.height=d.height+2*(0,s.c)().state.padding,c(a,i),i};let x=0;let u;const f={},y=(t,e,a,o,c,g,h)=>{const w=new r.k({compound:!0,multigraph:!0});let b,m=!0;for(b=0;b<t.length;b++)if("relation"===t[b].stmt){m=!1;break}a?w.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:m?1:u.edgeLengthFactor,nodeSep:m?1:50,isMultiGraph:!0}):w.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:m?1:u.edgeLengthFactor,nodeSep:m?1:50,ranker:"tight-tree",isMultiGraph:!0}),w.setDefaultEdgeLabel((function(){return{}})),h.db.extract(t);const B=h.db.getStates(),k=h.db.getRelations(),N=Object.keys(B);for(const i of N){const t=B[i];let n;if(a&&(t.parentId=a),t.doc){let a=e.append("g").attr("id",t.id).attr("class","stateGroup");n=y(t.doc,a,t.id,!o,c,g,h);{a=p(a,t,o);let e=a.node().getBBox();n.width=e.width,n.height=e.height+u.padding/2,f[t.id]={y:u.compositTitleSize}}}else n=l(e,t);if(t.note){const a={descriptions:[],id:t.id+"-note",note:t.note,type:"note"},i=l(e,a);"left of"===t.note.position?(w.setNode(n.id+"-note",i),w.setNode(n.id,n)):(w.setNode(n.id,n),w.setNode(n.id+"-note",i)),w.setParent(n.id,n.id+"-group"),w.setParent(n.id+"-note",n.id+"-group")}else w.setNode(n.id,n)}s.l.debug("Count=",w.nodeCount(),w);let E=0;k.forEach((function(t){var e;E++,s.l.debug("Setting edge",t),w.setEdge(t.id1,t.id2,{relation:t,width:(e=t.title,e?e.length*u.fontSizeFactor:1),height:u.labelHeight*s.e.getRows(t.title).length,labelpos:"c"},"id"+E)})),(0,d.bK)(w),s.l.debug("Graph after layout",w.nodes());const M=e.node();w.nodes().forEach((function(t){if(void 0!==t&&void 0!==w.node(t)){s.l.warn("Node "+t+": "+JSON.stringify(w.node(t))),c.select("#"+M.id+" #"+t).attr("transform","translate("+(w.node(t).x-w.node(t).width/2)+","+(w.node(t).y+(f[t]?f[t].y:0)-w.node(t).height/2)+" )"),c.select("#"+M.id+" #"+t).attr("data-x-shift",w.node(t).x-w.node(t).width/2);g.querySelectorAll("#"+M.id+" #"+t+" .divider").forEach((t=>{const e=t.parentElement;let a=0,i=0;e&&(e.parentElement&&(a=e.parentElement.getBBox().width),i=parseInt(e.getAttribute("data-x-shift"),10),Number.isNaN(i)&&(i=0)),t.setAttribute("x1",0-i+8),t.setAttribute("x2",a-i-8)}))}else s.l.debug("No Node "+t+": "+JSON.stringify(w.node(t)))}));let v=M.getBBox();w.edges().forEach((function(t){void 0!==t&&void 0!==w.edge(t)&&(s.l.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(w.edge(t))),function(t,e,a){e.points=e.points.filter((t=>!Number.isNaN(t.y)));const d=e.points,r=(0,n.jvg)().x((function(t){return t.x})).y((function(t){return t.y})).curve(n.$0Z),o=t.append("path").attr("d",r(d)).attr("id","edge"+x).attr("class","transition");let c="";if((0,s.c)().state.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),o.attr("marker-end","url("+c+"#"+function(t){switch(t){case i.d.relationType.AGGREGATION:return"aggregation";case i.d.relationType.EXTENSION:return"extension";case i.d.relationType.COMPOSITION:return"composition";case i.d.relationType.DEPENDENCY:return"dependency"}}(i.d.relationType.DEPENDENCY)+"End)"),void 0!==a.title){const i=t.append("g").attr("class","stateLabel"),{x:n,y:d}=s.u.calcLabelPosition(e.points),r=s.e.getRows(a.title);let o=0;const c=[];let g=0,p=0;for(let t=0;t<=r.length;t++){const e=i.append("text").attr("text-anchor","middle").text(r[t]).attr("x",n).attr("y",d+o),a=e.node().getBBox();if(g=Math.max(g,a.width),p=Math.min(p,a.x),s.l.info(a.x,n,d+o),0===o){const t=e.node().getBBox();o=t.height,s.l.info("Title height",o,d)}c.push(e)}let h=o*r.length;if(r.length>1){const t=(r.length-1)*o*.5;c.forEach(((e,a)=>e.attr("y",d+a*o-t))),h=o*r.length}const l=i.node().getBBox();i.insert("rect",":first-child").attr("class","box").attr("x",n-g/2-(0,s.c)().state.padding/2).attr("y",d-h/2-(0,s.c)().state.padding/2-3.5).attr("width",g+(0,s.c)().state.padding).attr("height",h+(0,s.c)().state.padding),s.l.info(l)}x++}(e,w.edge(t),w.edge(t).relation))})),v=M.getBBox();const S={id:a||"root",label:a||"root",width:0,height:0};return S.width=v.width+2*u.padding,S.height=v.height+2*u.padding,s.l.debug("Doc rendered",S,w),S},w={setConf:function(){},draw:function(t,e,a,i){u=(0,s.c)().state;const d=(0,s.c)().securityLevel;let r;"sandbox"===d&&(r=(0,n.Ys)("#i"+e));const o="sandbox"===d?(0,n.Ys)(r.nodes()[0].contentDocument.body):(0,n.Ys)("body"),c="sandbox"===d?r.nodes()[0].contentDocument:document;s.l.debug("Rendering diagram "+t);const g=o.select(`[id='${e}']`);g.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z");const p=i.db.getRootDoc();y(p,g,void 0,!1,o,c,i);const h=u.padding,l=g.node().getBBox(),x=l.width+2*h,f=l.height+2*h,w=1.75*x;(0,s.i)(g,f,w,u.useMaxWidth),g.attr("viewBox",`${l.x-u.padding} ${l.y-u.padding} `+x+" "+f)}},b={parser:i.p,db:i.d,renderer:w,styles:i.s,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,i.d.clear()}}}}]); \ No newline at end of file diff --git a/assets/js/952.2576dcf8.js b/assets/js/952.2576dcf8.js new file mode 100644 index 0000000000..9961640a50 --- /dev/null +++ b/assets/js/952.2576dcf8.js @@ -0,0 +1,28486 @@ +"use strict"; +exports.id = 952; +exports.ids = [952]; +exports.modules = { + +/***/ 43349: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ addHtmlLabel) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96225); + + + + +function addHtmlLabel(root, node) { + var fo = root.append('foreignObject').attr('width', '100000'); + + var div = fo.append('xhtml:div'); + div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); + + var label = node.label; + switch (typeof label) { + case 'function': + div.insert(label); + break; + case 'object': + // Currently we assume this is a DOM object. + div.insert(function () { + return label; + }); + break; + default: + div.html(label); + } + + _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .bg(div, node.labelStyle); + div.style('display', 'inline-block'); + // Fix for firefox + div.style('white-space', 'nowrap'); + + var client = div.node().getBoundingClientRect(); + fo.attr('width', client.width).attr('height', client.height); + + return fo; +} + + +/***/ }), + +/***/ 96225: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $p: () => (/* binding */ applyClass), +/* harmony export */ O1: () => (/* binding */ edgeToId), +/* harmony export */ WR: () => (/* binding */ applyTransition), +/* harmony export */ bF: () => (/* binding */ isSubgraph), +/* harmony export */ bg: () => (/* binding */ applyStyle) +/* harmony export */ }); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37514); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234); + + +// Public utility functions + + +/* + * Returns true if the specified node in the graph is a subgraph node. A + * subgraph node is one that contains other nodes. + */ +function isSubgraph(g, v) { + return !!g.children(v).length; +} + +function edgeToId(e) { + return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +} + +var ID_DELIM = /:/g; +function escapeId(str) { + return str ? String(str).replace(ID_DELIM, '\\:') : ''; +} + +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr('style', styleFn); + } +} + +function applyClass(dom, classFn, otherClasses) { + if (classFn) { + dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); + } +} + +function applyTransition(selection, g) { + var graph = g.graph(); + + if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(graph)) { + var transition = graph.transition; + if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) { + return transition(selection); + } + } + + return selection; +} + + +/***/ }), + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 46060: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ c: () => (/* binding */ write) +/* harmony export */ }); +/* unused harmony export read */ +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49360); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92346); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43836); +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(g.graph())) { + json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(g.graph()); + } + return json; +} + +function writeNodes(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(nodeValue)) { + node.value = nodeValue; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(e.name)) { + edge.name = e.name; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 59792: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61691); +/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71610); +/* IMPORT */ + + +/* MAIN */ +const channel = (color, channel) => { + return _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z.lang.round(_color_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z.parse(color)[channel]); +}; +/* EXPORT */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (channel); + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 92346: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(48451); + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 78932: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39164); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 93920: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ f: () => (/* binding */ flowDb), +/* harmony export */ p: () => (/* binding */ parser$1) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "graphConfig": 4, "document": 5, "line": 6, "statement": 7, "SEMI": 8, "NEWLINE": 9, "SPACE": 10, "EOF": 11, "GRAPH": 12, "NODIR": 13, "DIR": 14, "FirstStmtSeperator": 15, "ending": 16, "endToken": 17, "spaceList": 18, "spaceListNewline": 19, "verticeStatement": 20, "separator": 21, "styleStatement": 22, "linkStyleStatement": 23, "classDefStatement": 24, "classStatement": 25, "clickStatement": 26, "subgraph": 27, "textNoTags": 28, "SQS": 29, "text": 30, "SQE": 31, "end": 32, "direction": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "link": 39, "node": 40, "styledVertex": 41, "AMP": 42, "vertex": 43, "STYLE_SEPARATOR": 44, "idString": 45, "DOUBLECIRCLESTART": 46, "DOUBLECIRCLEEND": 47, "PS": 48, "PE": 49, "(-": 50, "-)": 51, "STADIUMSTART": 52, "STADIUMEND": 53, "SUBROUTINESTART": 54, "SUBROUTINEEND": 55, "VERTEX_WITH_PROPS_START": 56, "NODE_STRING[field]": 57, "COLON": 58, "NODE_STRING[value]": 59, "PIPE": 60, "CYLINDERSTART": 61, "CYLINDEREND": 62, "DIAMOND_START": 63, "DIAMOND_STOP": 64, "TAGEND": 65, "TRAPSTART": 66, "TRAPEND": 67, "INVTRAPSTART": 68, "INVTRAPEND": 69, "linkStatement": 70, "arrowText": 71, "TESTSTR": 72, "START_LINK": 73, "edgeText": 74, "LINK": 75, "edgeTextToken": 76, "STR": 77, "MD_STR": 78, "textToken": 79, "keywords": 80, "STYLE": 81, "LINKSTYLE": 82, "CLASSDEF": 83, "CLASS": 84, "CLICK": 85, "DOWN": 86, "UP": 87, "textNoTagsToken": 88, "stylesOpt": 89, "idString[vertex]": 90, "idString[class]": 91, "CALLBACKNAME": 92, "CALLBACKARGS": 93, "HREF": 94, "LINK_TARGET": 95, "STR[link]": 96, "STR[tooltip]": 97, "alphaNum": 98, "DEFAULT": 99, "numList": 100, "INTERPOLATE": 101, "NUM": 102, "COMMA": 103, "style": 104, "styleComponent": 105, "NODE_STRING": 106, "UNIT": 107, "BRKT": 108, "PCT": 109, "idStringToken": 110, "MINUS": 111, "MULT": 112, "UNICODE_TEXT": 113, "TEXT": 114, "TAGSTART": 115, "EDGE_TEXT": 116, "alphaNumToken": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 42: "AMP", 44: "STYLE_SEPARATOR", 46: "DOUBLECIRCLESTART", 47: "DOUBLECIRCLEEND", 48: "PS", 49: "PE", 50: "(-", 51: "-)", 52: "STADIUMSTART", 53: "STADIUMEND", 54: "SUBROUTINESTART", 55: "SUBROUTINEEND", 56: "VERTEX_WITH_PROPS_START", 57: "NODE_STRING[field]", 58: "COLON", 59: "NODE_STRING[value]", 60: "PIPE", 61: "CYLINDERSTART", 62: "CYLINDEREND", 63: "DIAMOND_START", 64: "DIAMOND_STOP", 65: "TAGEND", 66: "TRAPSTART", 67: "TRAPEND", 68: "INVTRAPSTART", 69: "INVTRAPEND", 72: "TESTSTR", 73: "START_LINK", 75: "LINK", 77: "STR", 78: "MD_STR", 81: "STYLE", 82: "LINKSTYLE", 83: "CLASSDEF", 84: "CLASS", 85: "CLICK", 86: "DOWN", 87: "UP", 90: "idString[vertex]", 91: "idString[class]", 92: "CALLBACKNAME", 93: "CALLBACKARGS", 94: "HREF", 95: "LINK_TARGET", 96: "STR[link]", 97: "STR[tooltip]", 99: "DEFAULT", 101: "INTERPOLATE", 102: "NUM", 103: "COMMA", 106: "NODE_STRING", 107: "UNIT", 108: "BRKT", 109: "PCT", 111: "MINUS", 112: "MULT", 113: "UNICODE_TEXT", 114: "TEXT", 115: "TAGSTART", 116: "EDGE_TEXT", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr" }, + productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 2: + this.$ = []; + break; + case 3: + if (!Array.isArray($$[$0]) || $$[$0].length > 0) { + $$[$0 - 1].push($$[$0]); + } + this.$ = $$[$0 - 1]; + break; + case 4: + case 176: + this.$ = $$[$0]; + break; + case 11: + yy.setDirection("TB"); + this.$ = "TB"; + break; + case 12: + yy.setDirection($$[$0 - 1]); + this.$ = $$[$0 - 1]; + break; + case 27: + this.$ = $$[$0 - 1].nodes; + break; + case 28: + case 29: + case 30: + case 31: + case 32: + this.$ = []; + break; + case 33: + this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); + break; + case 34: + this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); + break; + case 35: + this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0); + break; + case 37: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 38: + case 39: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 43: + yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]); + this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) }; + break; + case 44: + yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]); + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) }; + break; + case 45: + this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] }; + break; + case 46: + this.$ = { stmt: $$[$0], nodes: $$[$0] }; + break; + case 47: + this.$ = [$$[$0]]; + break; + case 48: + this.$ = $$[$0 - 4].concat($$[$0]); + break; + case 49: + this.$ = $$[$0]; + break; + case 50: + this.$ = $$[$0 - 2]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 51: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "square"); + break; + case 52: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle"); + break; + case 53: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle"); + break; + case 54: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse"); + break; + case 55: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium"); + break; + case 56: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine"); + break; + case 57: + this.$ = $$[$0 - 7]; + yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]])); + break; + case 58: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder"); + break; + case 59: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "round"); + break; + case 60: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond"); + break; + case 61: + this.$ = $$[$0 - 5]; + yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon"); + break; + case 62: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd"); + break; + case 63: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid"); + break; + case 64: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid"); + break; + case 65: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right"); + break; + case 66: + this.$ = $$[$0 - 3]; + yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left"); + break; + case 67: + this.$ = $$[$0]; + yy.addVertex($$[$0]); + break; + case 68: + $$[$0 - 1].text = $$[$0]; + this.$ = $$[$0 - 1]; + break; + case 69: + case 70: + $$[$0 - 2].text = $$[$0 - 1]; + this.$ = $$[$0 - 2]; + break; + case 71: + this.$ = $$[$0]; + break; + case 72: + var inf = yy.destructLink($$[$0], $$[$0 - 2]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] }; + break; + case 73: + this.$ = { text: $$[$0], type: "text" }; + break; + case 74: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 75: + this.$ = { text: $$[$0], type: "string" }; + break; + case 76: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 77: + var inf = yy.destructLink($$[$0]); + this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; + break; + case 78: + this.$ = $$[$0 - 1]; + break; + case 79: + this.$ = { text: $$[$0], type: "text" }; + break; + case 80: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 81: + this.$ = { text: $$[$0], type: "string" }; + break; + case 82: + case 97: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 94: + this.$ = { text: $$[$0], type: "text" }; + break; + case 95: + this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; + break; + case 96: + this.$ = { text: $$[$0], type: "text" }; + break; + case 98: + this.$ = $$[$0 - 4]; + yy.addClass($$[$0 - 2], $$[$0]); + break; + case 99: + this.$ = $$[$0 - 4]; + yy.setClass($$[$0 - 2], $$[$0]); + break; + case 100: + case 108: + this.$ = $$[$0 - 1]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 101: + case 109: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 102: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 103: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 104: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 105: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2]); + yy.setTooltip($$[$0 - 4], $$[$0]); + break; + case 106: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + break; + case 107: + this.$ = $$[$0 - 6]; + yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 6], $$[$0 - 2]); + break; + case 110: + this.$ = $$[$0 - 1]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 111: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 112: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + break; + case 113: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); + yy.setTooltip($$[$0 - 5], $$[$0 - 2]); + break; + case 114: + this.$ = $$[$0 - 4]; + yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); + break; + case 115: + this.$ = $$[$0 - 4]; + yy.updateLink([$$[$0 - 2]], $$[$0]); + break; + case 116: + this.$ = $$[$0 - 4]; + yy.updateLink($$[$0 - 2], $$[$0]); + break; + case 117: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); + yy.updateLink([$$[$0 - 6]], $$[$0]); + break; + case 118: + this.$ = $$[$0 - 8]; + yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); + yy.updateLink($$[$0 - 6], $$[$0]); + break; + case 119: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); + break; + case 120: + this.$ = $$[$0 - 6]; + yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); + break; + case 121: + case 123: + this.$ = [$$[$0]]; + break; + case 122: + case 124: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 126: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 174: + this.$ = $$[$0]; + break; + case 175: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 177: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + case 178: + this.$ = { stmt: "dir", value: "TB" }; + break; + case 179: + this.$ = { stmt: "dir", value: "BT" }; + break; + case 180: + this.$ = { stmt: "dir", value: "RL" }; + break; + case 181: + this.$ = { stmt: "dir", value: "LR" }; + break; + } + }, + table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })], + defaultActions: {}, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex2() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex2(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex2() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + this.begin("acc_title"); + return 34; + case 1: + this.popState(); + return "acc_title_value"; + case 2: + this.begin("acc_descr"); + return 36; + case 3: + this.popState(); + return "acc_descr_value"; + case 4: + this.begin("acc_descr_multiline"); + break; + case 5: + this.popState(); + break; + case 6: + return "acc_descr_multiline_value"; + case 7: + this.begin("callbackname"); + break; + case 8: + this.popState(); + break; + case 9: + this.popState(); + this.begin("callbackargs"); + break; + case 10: + return 92; + case 11: + this.popState(); + break; + case 12: + return 93; + case 13: + return "MD_STR"; + case 14: + this.popState(); + break; + case 15: + this.begin("md_string"); + break; + case 16: + return "STR"; + case 17: + this.popState(); + break; + case 18: + this.pushState("string"); + break; + case 19: + return 81; + case 20: + return 99; + case 21: + return 82; + case 22: + return 101; + case 23: + return 83; + case 24: + return 84; + case 25: + return 94; + case 26: + this.begin("click"); + break; + case 27: + this.popState(); + break; + case 28: + return 85; + case 29: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 30: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 31: + if (yy.lex.firstGraph()) { + this.begin("dir"); + } + return 12; + case 32: + return 27; + case 33: + return 32; + case 34: + return 95; + case 35: + return 95; + case 36: + return 95; + case 37: + return 95; + case 38: + this.popState(); + return 13; + case 39: + this.popState(); + return 14; + case 40: + this.popState(); + return 14; + case 41: + this.popState(); + return 14; + case 42: + this.popState(); + return 14; + case 43: + this.popState(); + return 14; + case 44: + this.popState(); + return 14; + case 45: + this.popState(); + return 14; + case 46: + this.popState(); + return 14; + case 47: + this.popState(); + return 14; + case 48: + this.popState(); + return 14; + case 49: + return 118; + case 50: + return 119; + case 51: + return 120; + case 52: + return 121; + case 53: + return 102; + case 54: + return 108; + case 55: + return 44; + case 56: + return 58; + case 57: + return 42; + case 58: + return 8; + case 59: + return 103; + case 60: + return 112; + case 61: + this.popState(); + return 75; + case 62: + this.pushState("edgeText"); + return 73; + case 63: + return 116; + case 64: + this.popState(); + return 75; + case 65: + this.pushState("thickEdgeText"); + return 73; + case 66: + return 116; + case 67: + this.popState(); + return 75; + case 68: + this.pushState("dottedEdgeText"); + return 73; + case 69: + return 116; + case 70: + return 75; + case 71: + this.popState(); + return 51; + case 72: + return "TEXT"; + case 73: + this.pushState("ellipseText"); + return 50; + case 74: + this.popState(); + return 53; + case 75: + this.pushState("text"); + return 52; + case 76: + this.popState(); + return 55; + case 77: + this.pushState("text"); + return 54; + case 78: + return 56; + case 79: + this.pushState("text"); + return 65; + case 80: + this.popState(); + return 62; + case 81: + this.pushState("text"); + return 61; + case 82: + this.popState(); + return 47; + case 83: + this.pushState("text"); + return 46; + case 84: + this.popState(); + return 67; + case 85: + this.popState(); + return 69; + case 86: + return 114; + case 87: + this.pushState("trapText"); + return 66; + case 88: + this.pushState("trapText"); + return 68; + case 89: + return 115; + case 90: + return 65; + case 91: + return 87; + case 92: + return "SEP"; + case 93: + return 86; + case 94: + return 112; + case 95: + return 108; + case 96: + return 42; + case 97: + return 106; + case 98: + return 111; + case 99: + return 113; + case 100: + this.popState(); + return 60; + case 101: + this.pushState("text"); + return 60; + case 102: + this.popState(); + return 49; + case 103: + this.pushState("text"); + return 48; + case 104: + this.popState(); + return 31; + case 105: + this.pushState("text"); + return 29; + case 106: + this.popState(); + return 64; + case 107: + this.pushState("text"); + return 63; + case 108: + return "TEXT"; + case 109: + return "QUOTE"; + case 110: + return 9; + case 111: + return 10; + case 112: + return 11; + } + }, + rules: [/^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:[^`"]+)/, /^(?:[`]["])/, /^(?:["][`])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:["])/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s])/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:[^=]|=(?!))/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:[^\.]|\.(?!))/, /^(?:\s*~~[\~]+\s*)/, /^(?:[-/\)][\)])/, /^(?:[^\(\)\[\]\{\}]|!\)+)/, /^(?:\(-)/, /^(?:\]\))/, /^(?:\(\[)/, /^(?:\]\])/, /^(?:\[\[)/, /^(?:\[\|)/, /^(?:>)/, /^(?:\)\])/, /^(?:\[\()/, /^(?:\)\)\))/, /^(?:\(\(\()/, /^(?:[\\(?=\])][\]])/, /^(?:\/(?=\])\])/, /^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/, /^(?:\[\/)/, /^(?:\[\\)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/, /^(?:-)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\|)/, /^(?:\))/, /^(?:\()/, /^(?:\])/, /^(?:\[)/, /^(?:(\}))/, /^(?:\{)/, /^(?:[^\[\]\(\)\{\}\|\"]+)/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/], + conditions: { "callbackargs": { "rules": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "callbackname": { "rules": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "href": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "click": { "rules": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dottedEdgeText": { "rules": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "thickEdgeText": { "rules": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "edgeText": { "rules": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "trapText": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], "inclusive": false }, "ellipseText": { "rules": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "text": { "rules": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], "inclusive": false }, "vertex": { "rules": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "dir": { "rules": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_descr": { "rules": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "acc_title": { "rules": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "md_string": { "rules": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "string": { "rules": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const MERMAID_DOM_ID_PREFIX = "flowchart-"; +let vertexCounter = 0; +let config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); +let vertices = {}; +let edges = []; +let classes = {}; +let subGraphs = []; +let subGraphLookup = {}; +let tooltips = {}; +let subCount = 0; +let firstGraphFlag = true; +let direction; +let version; +let funs = []; +const sanitizeText = (txt) => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, config); +const lookUpDomId = function(id) { + const veritceKeys = Object.keys(vertices); + for (const veritceKey of veritceKeys) { + if (vertices[veritceKey].id === id) { + return vertices[veritceKey].domId; + } + } + return id; +}; +const addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) { + let txt; + let id = _id; + if (id === void 0) { + return; + } + if (id.trim().length === 0) { + return; + } + if (vertices[id] === void 0) { + vertices[id] = { + id, + labelType: "text", + domId: MERMAID_DOM_ID_PREFIX + id + "-" + vertexCounter, + styles: [], + classes: [] + }; + } + vertexCounter++; + if (textObj !== void 0) { + config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + txt = sanitizeText(textObj.text.trim()); + vertices[id].labelType = textObj.type; + if (txt[0] === '"' && txt[txt.length - 1] === '"') { + txt = txt.substring(1, txt.length - 1); + } + vertices[id].text = txt; + } else { + if (vertices[id].text === void 0) { + vertices[id].text = _id; + } + } + if (type !== void 0) { + vertices[id].type = type; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + vertices[id].styles.push(s); + }); + } + if (classes2 !== void 0 && classes2 !== null) { + classes2.forEach(function(s) { + vertices[id].classes.push(s); + }); + } + if (dir !== void 0) { + vertices[id].dir = dir; + } + if (vertices[id].props === void 0) { + vertices[id].props = props; + } else if (props !== void 0) { + Object.assign(vertices[id].props, props); + } +}; +const addSingleLink = function(_start, _end, type) { + let start = _start; + let end = _end; + const edge = { start, end, type: void 0, text: "", labelType: "text" }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 Got edge...", edge); + const linkTextObj = type.text; + if (linkTextObj !== void 0) { + edge.text = sanitizeText(linkTextObj.text.trim()); + if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; + } + if (type !== void 0) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length; + } + if ((edge == null ? void 0 : edge.length) > 10) { + edge.length = 10; + } + if (edges.length < (config.maxEdges ?? 500)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("abc78 pushing edge..."); + edges.push(edge); + } else { + throw new Error( + `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.` + ); + } +}; +const addLink = function(_start, _end, type) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("addLink (abc78)", _start, _end, type); + let i, j; + for (i = 0; i < _start.length; i++) { + for (j = 0; j < _end.length; j++) { + addSingleLink(_start[i], _end[j], type); + } + } +}; +const updateLinkInterpolate = function(positions, interp) { + positions.forEach(function(pos) { + if (pos === "default") { + edges.defaultInterpolate = interp; + } else { + edges[pos].interpolate = interp; + } + }); +}; +const updateLink = function(positions, style) { + positions.forEach(function(pos) { + if (pos >= edges.length) { + throw new Error( + `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` + ); + } + if (pos === "default") { + edges.defaultStyle = style; + } else { + if (_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.isSubstringInArray("fill", style) === -1) { + style.push("fill:none"); + } + edges[pos].style = style; + } + }); +}; +const addClass = function(ids, style) { + ids.split(",").forEach(function(id) { + if (classes[id] === void 0) { + classes[id] = { id, styles: [], textStyles: [] }; + } + if (style !== void 0 && style !== null) { + style.forEach(function(s) { + if (s.match("color")) { + const newStyle = s.replace("fill", "bgFill").replace("color", "fill"); + classes[id].textStyles.push(newStyle); + } + classes[id].styles.push(s); + }); + } + }); +}; +const setDirection = function(dir) { + direction = dir; + if (direction.match(/.*</)) { + direction = "RL"; + } + if (direction.match(/.*\^/)) { + direction = "BT"; + } + if (direction.match(/.*>/)) { + direction = "LR"; + } + if (direction.match(/.*v/)) { + direction = "TB"; + } + if (direction === "TD") { + direction = "TB"; + } +}; +const setClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (vertices[id] !== void 0) { + vertices[id].classes.push(className); + } + if (subGraphLookup[id] !== void 0) { + subGraphLookup[id].classes.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + tooltips[version === "gen-1" ? lookUpDomId(id) : id] = sanitizeText(tooltip); + } + }); +}; +const setClickFun = function(id, functionName, functionArgs) { + let domId = lookUpDomId(id); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(id); + } + if (vertices[id] !== void 0) { + vertices[id].haveCallback = true; + funs.push(function() { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const setLink = function(ids, linkStr, target) { + ids.split(",").forEach(function(id) { + if (vertices[id] !== void 0) { + vertices[id].link = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + vertices[id].linkTarget = target; + } + }); + setClass(ids, "clickable"); +}; +const getTooltip = function(id) { + if (tooltips.hasOwnProperty(id)) { + return tooltips[id]; + } + return void 0; +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFun(id, functionName, functionArgs); + }); + setClass(ids, "clickable"); +}; +const bindFunctions = function(element) { + funs.forEach(function(fun) { + fun(element); + }); +}; +const getDirection = function() { + return direction.trim(); +}; +const getVertices = function() { + return vertices; +}; +const getEdges = function() { + return edges; +}; +const getClasses = function() { + return classes; +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.bottom + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +funs.push(setupToolTips); +const clear = function(ver = "gen-1") { + vertices = {}; + classes = {}; + edges = []; + funs = [setupToolTips]; + subGraphs = []; + subGraphLookup = {}; + subCount = 0; + tooltips = {}; + firstGraphFlag = true; + version = ver; + config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +const setGen = (ver) => { + version = ver || "gen-2"; +}; +const defaultStyle = function() { + return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; +}; +const addSubGraph = function(_id, list, _title) { + let id = _id.text.trim(); + let title = _title.text; + if (_id === _title && _title.text.match(/\s/)) { + id = void 0; + } + function uniq(a) { + const prims = { boolean: {}, number: {}, string: {} }; + const objs = []; + let dir2; + const nodeList2 = a.filter(function(item) { + const type = typeof item; + if (item.stmt && item.stmt === "dir") { + dir2 = item.value; + return false; + } + if (item.trim() === "") { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList: nodeList2, dir: dir2 }; + } + let nodeList = []; + const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list)); + nodeList = nl; + if (version === "gen-1") { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = lookUpDomId(nodeList[i]); + } + } + id = id || "subGraph" + subCount; + title = title || ""; + title = sanitizeText(title); + subCount = subCount + 1; + const subGraph = { + id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); + subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; + subGraphs.push(subGraph); + subGraphLookup[id] = subGraph; + return id; +}; +const getPosForId = function(id) { + for (const [i, subGraph] of subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; +}; +let secCount = -1; +const posCrossRef = []; +const indexNodes2 = function(id, pos) { + const nodes = subGraphs[pos].nodes; + secCount = secCount + 1; + if (secCount > 2e3) { + return; + } + posCrossRef[secCount] = pos; + if (subGraphs[pos].id === id) { + return { + result: true, + count: 0 + }; + } + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = getPosForId(nodes[count]); + if (childPos >= 0) { + const res = indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { + result: false, + count: posCount + }; +}; +const getDepthFirstPos = function(pos) { + return posCrossRef[pos]; +}; +const indexNodes = function() { + secCount = -1; + if (subGraphs.length > 0) { + indexNodes2("none", subGraphs.length - 1); + } +}; +const getSubGraphs = function() { + return subGraphs; +}; +const firstGraph = () => { + if (firstGraphFlag) { + firstGraphFlag = false; + return true; + } + return false; +}; +const destructStartLink = (_str) => { + let str = _str.trim(); + let type = "arrow_open"; + switch (str[0]) { + case "<": + type = "arrow_point"; + str = str.slice(1); + break; + case "x": + type = "arrow_cross"; + str = str.slice(1); + break; + case "o": + type = "arrow_circle"; + str = str.slice(1); + break; + } + let stroke = "normal"; + if (str.includes("=")) { + stroke = "thick"; + } + if (str.includes(".")) { + stroke = "dotted"; + } + return { type, stroke }; +}; +const countChar = (char, str) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; +}; +const destructEndLink = (_str) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = "arrow_open"; + switch (str.slice(-1)) { + case "x": + type = "arrow_cross"; + if (str[0] === "x") { + type = "double_" + type; + line = line.slice(1); + } + break; + case ">": + type = "arrow_point"; + if (str[0] === "<") { + type = "double_" + type; + line = line.slice(1); + } + break; + case "o": + type = "arrow_circle"; + if (str[0] === "o") { + type = "double_" + type; + line = line.slice(1); + } + break; + } + let stroke = "normal"; + let length = line.length - 1; + if (line[0] === "=") { + stroke = "thick"; + } + if (line[0] === "~") { + stroke = "invisible"; + } + let dots = countChar(".", line); + if (dots) { + stroke = "dotted"; + length = dots; + } + return { type, stroke, length }; +}; +const destructLink = (_str, _startStr) => { + const info = destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = destructStartLink(_startStr); + if (startInfo.stroke !== info.stroke) { + return { type: "INVALID", stroke: "INVALID" }; + } + if (startInfo.type === "arrow_open") { + startInfo.type = info.type; + } else { + if (startInfo.type !== info.type) { + return { type: "INVALID", stroke: "INVALID" }; + } + startInfo.type = "double_" + startInfo.type; + } + if (startInfo.type === "double_arrow") { + startInfo.type = "double_arrow_point"; + } + startInfo.length = info.length; + return startInfo; + } + return info; +}; +const exists = (allSgs, _id) => { + let res = false; + allSgs.forEach((sg) => { + const pos = sg.nodes.indexOf(_id); + if (pos >= 0) { + res = true; + } + }); + return res; +}; +const makeUniq = (sg, allSubgraphs) => { + const res = []; + sg.nodes.forEach((_id, pos) => { + if (!exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } + }); + return { nodes: res }; +}; +const lex = { + firstGraph +}; +const flowDb = { + defaultConfig: () => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.H.flowchart, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.b, + addVertex, + lookUpDomId, + addLink, + updateLinkInterpolate, + updateLink, + addClass, + setDirection, + setClass, + setTooltip, + getTooltip, + setClickEvent, + setLink, + bindFunctions, + getDirection, + getVertices, + getEdges, + getClasses, + clear, + setGen, + defaultStyle, + addSubGraph, + getDepthFirstPos, + indexNodes, + getSubGraphs, + destructLink, + lex, + exists, + makeUniq, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.r +}; +const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + addClass, + addLink, + addSingleLink, + addSubGraph, + addVertex, + bindFunctions, + clear, + default: flowDb, + defaultStyle, + destructLink, + firstGraph, + getClasses, + getDepthFirstPos, + getDirection, + getEdges, + getSubGraphs, + getTooltip, + getVertices, + indexNodes, + lex, + lookUpDomId, + setClass, + setClickEvent, + setDirection, + setGen, + setLink, + updateLink, + updateLinkInterpolate +}, Symbol.toStringTag, { value: "Module" })); + + + +/***/ }), + +/***/ 63952: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + diagram: () => (/* binding */ diagram) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/flowDb-d35e309a.js +var flowDb_d35e309a = __webpack_require__(93920); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 197 modules +var src = __webpack_require__(64218); +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 64 modules +var dagre = __webpack_require__(41644); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/util.js +var util = __webpack_require__(96225); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/arrows.js + + + + +var arrows = { + normal, + vee, + undirected, +}; + +function setArrows(value) { + arrows = value; +} + +function normal(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function vee(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +function undirected(parent, id, edge, type) { + var marker = parent + .append('marker') + .attr('id', id) + .attr('viewBox', '0 0 10 10') + .attr('refX', 9) + .attr('refY', 5) + .attr('markerUnits', 'strokeWidth') + .attr('markerWidth', 8) + .attr('markerHeight', 6) + .attr('orient', 'auto'); + + var path = marker + .append('path') + .attr('d', 'M 0 5 L 10 5') + .style('stroke-width', 1) + .style('stroke-dasharray', '1,0'); + util/* applyStyle */.bg(path, edge[type + 'Style']); + if (edge[type + 'Class']) { + path.attr('class', edge[type + 'Class']); + } +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js +var add_html_label = __webpack_require__(43349); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js + + + + +function addSVGLabel(root, node) { + var domNode = root; + + domNode.node().appendChild(node.label); + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js + + + + +/* + * Attaches a text label to the specified root. Handles escape sequences. + */ +function addTextLabel(root, node) { + var domNode = root.append('text'); + + var lines = processEscapeSequences(node.label).split('\n'); + for (var i = 0; i < lines.length; i++) { + domNode + .append('tspan') + .attr('xml:space', 'preserve') + .attr('dy', '1em') + .attr('x', '1') + .text(lines[i]); + } + + util/* applyStyle */.bg(domNode, node.labelStyle); + + return domNode; +} + +function processEscapeSequences(text) { + var newText = ''; + var escaped = false; + var ch; + for (var i = 0; i < text.length; ++i) { + ch = text[i]; + if (escaped) { + switch (ch) { + case 'n': + newText += '\n'; + break; + default: + newText += ch; + } + escaped = false; + } else if (ch === '\\') { + escaped = true; + } else { + newText += ch; + } + } + return newText; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-label.js + + + + + + +function addLabel(root, node, location) { + var label = node.label; + var labelSvg = root.append('g'); + + // Allow the label to be a string, a function that returns a DOM element, or + // a DOM element itself. + if (node.labelType === 'svg') { + addSVGLabel(labelSvg, node); + } else if (typeof label !== 'string' || node.labelType === 'html') { + (0,add_html_label/* addHtmlLabel */.a)(labelSvg, node); + } else { + addTextLabel(labelSvg, node); + } + + var labelBBox = labelSvg.node().getBBox(); + var y; + switch (location) { + case 'top': + y = -node.height / 2; + break; + case 'bottom': + y = node.height / 2 - labelBBox.height; + break; + default: + y = -labelBBox.height / 2; + } + labelSvg.attr('transform', 'translate(' + -labelBBox.width / 2 + ',' + y + ')'); + + return labelSvg; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-clusters.js + + + + + + +var createClusters = function (selection, g) { + var clusters = g.nodes().filter(function (v) { + return util/* isSubgraph */.bF(g, v); + }); + var svgClusters = selection.selectAll('g.cluster').data(clusters, function (v) { + return v; + }); + + util/* applyTransition */.WR(svgClusters.exit(), g).style('opacity', 0).remove(); + + var enterSelection = svgClusters + .enter() + .append('g') + .attr('class', 'cluster') + .attr('id', function (v) { + var node = g.node(v); + return node.id; + }) + .style('opacity', 0) + .each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + src/* select */.Ys(this).append('rect'); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + addLabel(labelGroup, node, node.clusterLabelPos); + }); + + svgClusters = svgClusters.merge(enterSelection); + + svgClusters = util/* applyTransition */.WR(svgClusters, g).style('opacity', 1); + + svgClusters.selectAll('rect').each(function (c) { + var node = g.node(c); + var domCluster = src/* select */.Ys(this); + util/* applyStyle */.bg(domCluster, node.style); + }); + + return svgClusters; +}; + +function setCreateClusters(value) { + createClusters = value; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js + + + + + + + +let createEdgeLabels = function (selection, g) { + var svgEdgeLabels = selection + .selectAll('g.edgeLabel') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + svgEdgeLabels.exit().remove(); + svgEdgeLabels.enter().append('g').classed('edgeLabel', true).style('opacity', 0); + + svgEdgeLabels = selection.selectAll('g.edgeLabel'); + + svgEdgeLabels.each(function (e) { + var root = src/* select */.Ys(this); + root.select('.label').remove(); + var edge = g.edge(e); + var label = addLabel(root, g.edge(e), 0).classed('label', true); + var bbox = label.node().getBBox(); + + if (edge.labelId) { + label.attr('id', edge.labelId); + } + if (!has/* default */.Z(edge, 'width')) { + edge.width = bbox.width; + } + if (!has/* default */.Z(edge, 'height')) { + edge.height = bbox.height; + } + }); + + var exitSelection; + + if (svgEdgeLabels.exit) { + exitSelection = svgEdgeLabels.exit(); + } else { + exitSelection = svgEdgeLabels.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgEdgeLabels; +}; + +function setCreateEdgeLabels(value) { + createEdgeLabels = value; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js + + +function intersectNode(node, point) { + return node.intersect(point); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js + + + + + + + +var createEdgePaths = function (selection, g, arrows) { + var previousPaths = selection + .selectAll('g.edgePath') + .data(g.edges(), function (e) { + return util/* edgeToId */.O1(e); + }) + .classed('update', true); + + var newPaths = enter(previousPaths, g); + exit(previousPaths, g); + + var svgPaths = previousPaths.merge !== undefined ? previousPaths.merge(newPaths) : previousPaths; + util/* applyTransition */.WR(svgPaths, g).style('opacity', 1); + + // Save DOM element in the path group, and set ID and class + svgPaths.each(function (e) { + var domEdge = src/* select */.Ys(this); + var edge = g.edge(e); + edge.elem = this; + + if (edge.id) { + domEdge.attr('id', edge.id); + } + + util/* applyClass */.$p( + domEdge, + edge['class'], + (domEdge.classed('update') ? 'update ' : '') + 'edgePath' + ); + }); + + svgPaths.selectAll('path.path').each(function (e) { + var edge = g.edge(e); + edge.arrowheadId = uniqueId/* default */.Z('arrowhead'); + + var domEdge = src/* select */.Ys(this) + .attr('marker-end', function () { + return 'url(' + makeFragmentRef(location.href, edge.arrowheadId) + ')'; + }) + .style('fill', 'none'); + + util/* applyTransition */.WR(domEdge, g).attr('d', function (e) { + return calcPoints(g, e); + }); + + util/* applyStyle */.bg(domEdge, edge.style); + }); + + svgPaths.selectAll('defs *').remove(); + svgPaths.selectAll('defs').each(function (e) { + var edge = g.edge(e); + var arrowhead = arrows[edge.arrowhead]; + arrowhead(src/* select */.Ys(this), edge.arrowheadId, edge, 'arrowhead'); + }); + + return svgPaths; +}; + +function setCreateEdgePaths(value) { + createEdgePaths = value; +} + +function makeFragmentRef(url, fragmentId) { + var baseUrl = url.split('#')[0]; + return baseUrl + '#' + fragmentId; +} + +function calcPoints(g, e) { + var edge = g.edge(e); + var tail = g.node(e.v); + var head = g.node(e.w); + var points = edge.points.slice(1, edge.points.length - 1); + points.unshift(intersectNode(tail, points[0])); + points.push(intersectNode(head, points[points.length - 1])); + + return createLine(edge, points); +} + +function createLine(edge, points) { + // @ts-expect-error + var line = (src/* line */.jvg || src/* svg */.YPS.line)() + .x(function (d) { + return d.x; + }) + .y(function (d) { + return d.y; + }); + + (line.curve || line.interpolate)(edge.curve); + + return line(points); +} + +function getCoords(elem) { + var bbox = elem.getBBox(); + var matrix = elem.ownerSVGElement + .getScreenCTM() + .inverse() + .multiply(elem.getScreenCTM()) + .translate(bbox.width / 2, bbox.height / 2); + return { x: matrix.e, y: matrix.f }; +} + +function enter(svgPaths, g) { + var svgPathsEnter = svgPaths.enter().append('g').attr('class', 'edgePath').style('opacity', 0); + svgPathsEnter + .append('path') + .attr('class', 'path') + .attr('d', function (e) { + var edge = g.edge(e); + var sourceElem = g.node(e.v).elem; + var points = range/* default */.Z(edge.points.length).map(function () { + return getCoords(sourceElem); + }); + return createLine(edge, points); + }); + svgPathsEnter.append('defs'); + return svgPathsEnter; +} + +function exit(svgPaths, g) { + var svgPathExit = svgPaths.exit(); + util/* applyTransition */.WR(svgPathExit, g).style('opacity', 0).remove(); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-nodes.js + + + + + + + +var createNodes = function (selection, g, shapes) { + var simpleNodes = g.nodes().filter(function (v) { + return !util/* isSubgraph */.bF(g, v); + }); + var svgNodes = selection + .selectAll('g.node') + .data(simpleNodes, function (v) { + return v; + }) + .classed('update', true); + + svgNodes.exit().remove(); + + svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0); + + svgNodes = selection.selectAll('g.node'); + + svgNodes.each(function (v) { + var node = g.node(v); + var thisGroup = src/* select */.Ys(this); + util/* applyClass */.$p( + thisGroup, + node['class'], + (thisGroup.classed('update') ? 'update ' : '') + 'node' + ); + + thisGroup.select('g.label').remove(); + var labelGroup = thisGroup.append('g').attr('class', 'label'); + var labelDom = addLabel(labelGroup, node); + var shape = shapes[node.shape]; + var bbox = pick/* default */.Z(labelDom.node().getBBox(), 'width', 'height'); + + node.elem = this; + + if (node.id) { + thisGroup.attr('id', node.id); + } + if (node.labelId) { + labelGroup.attr('id', node.labelId); + } + + if (has/* default */.Z(node, 'width')) { + bbox.width = node.width; + } + if (has/* default */.Z(node, 'height')) { + bbox.height = node.height; + } + + bbox.width += node.paddingLeft + node.paddingRight; + bbox.height += node.paddingTop + node.paddingBottom; + labelGroup.attr( + 'transform', + 'translate(' + + (node.paddingLeft - node.paddingRight) / 2 + + ',' + + (node.paddingTop - node.paddingBottom) / 2 + + ')' + ); + + var root = src/* select */.Ys(this); + root.select('.label-container').remove(); + var shapeSvg = shape(root, bbox, node).classed('label-container', true); + util/* applyStyle */.bg(shapeSvg, node.style); + + var shapeBBox = shapeSvg.node().getBBox(); + node.width = shapeBBox.width; + node.height = shapeBBox.height; + }); + + var exitSelection; + + if (svgNodes.exit) { + exitSelection = svgNodes.exit(); + } else { + exitSelection = svgNodes.selectAll(null); // empty selection + } + + util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove(); + + return svgNodes; +}; + +function setCreateNodes(value) { + createNodes = value; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-clusters.js + + + + + +function positionClusters(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); + + util/* applyTransition */.WR(created.selectAll('rect'), g) + .attr('width', function (v) { + return g.node(v).width; + }) + .attr('height', function (v) { + return g.node(v).height; + }) + .attr('x', function (v) { + var node = g.node(v); + return -node.width / 2; + }) + .attr('y', function (v) { + var node = g.node(v); + return -node.height / 2; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js + + + + + + +function positionEdgeLabels(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(e) { + var edge = g.edge(e); + return has/* default */.Z(edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : ''; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-nodes.js + + + + + +function positionNodes(selection, g) { + var created = selection.filter(function () { + return !src/* select */.Ys(this).classed('update'); + }); + + function translate(v) { + var node = g.node(v); + return 'translate(' + node.x + ',' + node.y + ')'; + } + + created.attr('transform', translate); + + util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js + + +function intersectEllipse(node, rx, ry, point) { + // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html + + var cx = node.x; + var cy = node.y; + + var px = cx - point.x; + var py = cy - point.y; + + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + + var dx = Math.abs((rx * ry * px) / det); + if (point.x < cx) { + dx = -dx; + } + var dy = Math.abs((rx * ry * py) / det); + if (point.y < cy) { + dy = -dy; + } + + return { x: cx + dx, y: cy + dy }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js + + + + +function intersectCircle(node, rx, point) { + return intersectEllipse(node, rx, rx, point); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js + + +/* + * Returns the point at which two lines, p and q, intersect or returns + * undefined if they do not intersect. + */ +function intersectLine(p1, p2, q1, q2) { + // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994, + // p7 and p473. + + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + + // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x + + // b1 y + c1 = 0. + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + + // Compute r3 and r4. + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + + // Check signs of r3 and r4. If both point 3 and point 4 lie on + // same side of line 1, the line segments do not intersect. + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return /*DONT_INTERSECT*/; + } + + // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0 + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + + // Compute r1 and r2 + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + + // Check signs of r1 and r2. If both point 1 and point 2 lie + // on same side of second line segment, the line segments do + // not intersect. + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return /*DONT_INTERSECT*/; + } + + // Line segments intersect: compute intersection point. + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return /*COLLINEAR*/; + } + + offset = Math.abs(denom / 2); + + // The denom/2 is to get rounding instead of truncating. It + // is added or subtracted to the numerator, depending upon the + // sign of the numerator. + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + + return { x: x, y: y }; +} + +function sameSign(r1, r2) { + return r1 * r2 > 0; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js + + + + +/* + * Returns the point ({x, y}) at which the point argument intersects with the + * node argument assuming that it has the shape specified by polygon. + */ +function intersectPolygon(node, polyPoints, point) { + var x1 = node.x; + var y1 = node.y; + + var intersections = []; + + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + polyPoints.forEach(function (entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect = intersectLine( + node, + point, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect) { + intersections.push(intersect); + } + } + + if (!intersections.length) { + console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node); + return node; + } + + if (intersections.length > 1) { + // More intersections, find the one nearest to edge end point + intersections.sort(function (p, q) { + var pdx = p.x - point.x; + var pdy = p.y - point.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + + var qdx = q.x - point.x; + var qdy = q.y - point.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js + + +function intersectRect(node, point) { + var x = node.x; + var y = node.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = node.width / 2; + var h = node.height / 2; + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/shapes.js + + + + + + + +var shapes = { + rect, + ellipse, + circle, + diamond, +}; + +function setShapes(value) { + shapes = value; +} + +function rect(parent, bbox, node) { + var shapeSvg = parent + .insert('rect', ':first-child') + .attr('rx', node.rx) + .attr('ry', node.ry) + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('width', bbox.width) + .attr('height', bbox.height); + + node.intersect = function (point) { + return intersectRect(node, point); + }; + + return shapeSvg; +} + +function ellipse(parent, bbox, node) { + var rx = bbox.width / 2; + var ry = bbox.height / 2; + var shapeSvg = parent + .insert('ellipse', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('rx', rx) + .attr('ry', ry); + + node.intersect = function (point) { + return intersectEllipse(node, rx, ry, point); + }; + + return shapeSvg; +} + +function circle(parent, bbox, node) { + var r = Math.max(bbox.width, bbox.height) / 2; + var shapeSvg = parent + .insert('circle', ':first-child') + .attr('x', -bbox.width / 2) + .attr('y', -bbox.height / 2) + .attr('r', r); + + node.intersect = function (point) { + return intersectCircle(node, r, point); + }; + + return shapeSvg; +} + +// Circumscribe an ellipse for the bounding box with a diamond shape. I derived +// the function to calculate the diamond shape from: +// http://mathforum.org/kb/message.jspa?messageID=3750236 +function diamond(parent, bbox, node) { + var w = (bbox.width * Math.SQRT2) / 2; + var h = (bbox.height * Math.SQRT2) / 2; + var points = [ + { x: 0, y: -h }, + { x: -w, y: 0 }, + { x: 0, y: h }, + { x: w, y: 0 }, + ]; + var shapeSvg = parent.insert('polygon', ':first-child').attr( + 'points', + points + .map(function (p) { + return p.x + ',' + p.y; + }) + .join(' ') + ); + + node.intersect = function (p) { + return intersectPolygon(node, points, p); + }; + + return shapeSvg; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/render.js + + + + + + + + + + + + + + + +// This design is based on http://bost.ocks.org/mike/chart/. +function render() { + var fn = function (svg, g) { + preProcessGraph(g); + + var outputGroup = createOrSelectGroup(svg, 'output'); + var clustersGroup = createOrSelectGroup(outputGroup, 'clusters'); + var edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths'); + var edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, 'edgeLabels'), g); + var nodes = createNodes(createOrSelectGroup(outputGroup, 'nodes'), g, shapes); + + (0,dagre/* layout */.bK)(g); + + positionNodes(nodes, g); + positionEdgeLabels(edgeLabels, g); + createEdgePaths(edgePathsGroup, g, arrows); + + var clusters = createClusters(clustersGroup, g); + positionClusters(clusters, g); + + postProcessGraph(g); + }; + + fn.createNodes = function (value) { + if (!arguments.length) return createNodes; + setCreateNodes(value); + return fn; + }; + + fn.createClusters = function (value) { + if (!arguments.length) return createClusters; + setCreateClusters(value); + return fn; + }; + + fn.createEdgeLabels = function (value) { + if (!arguments.length) return createEdgeLabels; + setCreateEdgeLabels(value); + return fn; + }; + + fn.createEdgePaths = function (value) { + if (!arguments.length) return createEdgePaths; + setCreateEdgePaths(value); + return fn; + }; + + fn.shapes = function (value) { + if (!arguments.length) return shapes; + setShapes(value); + return fn; + }; + + fn.arrows = function (value) { + if (!arguments.length) return arrows; + setArrows(value); + return fn; + }; + + return fn; +} + +var NODE_DEFAULT_ATTRS = { + paddingLeft: 10, + paddingRight: 10, + paddingTop: 10, + paddingBottom: 10, + rx: 0, + ry: 0, + shape: 'rect', +}; + +var EDGE_DEFAULT_ATTRS = { + arrowhead: 'normal', + curve: src/* curveLinear */.c_6, +}; + +function preProcessGraph(g) { + g.nodes().forEach(function (v) { + var node = g.node(v); + if (!has/* default */.Z(node, 'label') && !g.children(v).length) { + node.label = v; + } + + if (has/* default */.Z(node, 'paddingX')) { + defaults/* default */.Z(node, { + paddingLeft: node.paddingX, + paddingRight: node.paddingX, + }); + } + + if (has/* default */.Z(node, 'paddingY')) { + defaults/* default */.Z(node, { + paddingTop: node.paddingY, + paddingBottom: node.paddingY, + }); + } + + if (has/* default */.Z(node, 'padding')) { + defaults/* default */.Z(node, { + paddingLeft: node.padding, + paddingRight: node.padding, + paddingTop: node.padding, + paddingBottom: node.padding, + }); + } + + defaults/* default */.Z(node, NODE_DEFAULT_ATTRS); + + forEach/* default */.Z(['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) { + node[k] = Number(node[k]); + }); + + // Save dimensions for restore during post-processing + if (has/* default */.Z(node, 'width')) { + node._prevWidth = node.width; + } + if (has/* default */.Z(node, 'height')) { + node._prevHeight = node.height; + } + }); + + g.edges().forEach(function (e) { + var edge = g.edge(e); + if (!has/* default */.Z(edge, 'label')) { + edge.label = ''; + } + defaults/* default */.Z(edge, EDGE_DEFAULT_ATTRS); + }); +} + +function postProcessGraph(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + + // Restore original dimensions + if (has/* default */.Z(node, '_prevWidth')) { + node.width = node._prevWidth; + } else { + delete node.width; + } + + if (has/* default */.Z(node, '_prevHeight')) { + node.height = node._prevHeight; + } else { + delete node.height; + } + + delete node._prevWidth; + delete node._prevHeight; + }); +} + +function createOrSelectGroup(root, name) { + var selection = root.select('g.' + name); + if (selection.empty()) { + selection = root.append('g').attr('class', name); + } + return selection; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/index.js + + + + + + + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/styles-7383a064.js +var styles_7383a064 = __webpack_require__(36841); +// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js +var dayjs_min = __webpack_require__(27484); +// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js +var dist = __webpack_require__(17967); +// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.mjs +var purify_es = __webpack_require__(22424); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js +var json = __webpack_require__(46060); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/flowDiagram-d949d7c1.js + + + + + + + + + + + + + + + + + + + + + + + + + +function question(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const s = (w + h) * 0.9; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, s, s, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function hexagon(parent, bbox, node) { + const f = 4; + const h = bbox.height; + const m = h / f; + const w = bbox.width + 2 * m; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_left_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_right(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function lean_left(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function inv_trapezoid(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function rect_right_inv_arrow(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function stadium(parent, bbox, node) { + const h = bbox.height; + const w = bbox.width + h / 4; + const shapeSvg = parent.insert("rect", ":first-child").attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + node.intersect = function(point) { + return intersectRect(node, point); + }; + return shapeSvg; +} +function subroutine(parent, bbox, node) { + const w = bbox.width; + const h = bbox.height; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const shapeSvg = insertPolygonShape(parent, w, h, points); + node.intersect = function(point) { + return intersectPolygon(node, points, point); + }; + return shapeSvg; +} +function cylinder(parent, bbox, node) { + const w = bbox.width; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const shapeSvg = parent.attr("label-offset-y", ry).insert("path", ":first-child").attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + node.intersect = function(point) { + const pos = intersectRect(node, point); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +} +function addToRender(render2) { + render2.shapes().question = question; + render2.shapes().hexagon = hexagon; + render2.shapes().stadium = stadium; + render2.shapes().subroutine = subroutine; + render2.shapes().cylinder = cylinder; + render2.shapes().rect_left_inv_arrow = rect_left_inv_arrow; + render2.shapes().lean_right = lean_right; + render2.shapes().lean_left = lean_left; + render2.shapes().trapezoid = trapezoid; + render2.shapes().inv_trapezoid = inv_trapezoid; + render2.shapes().rect_right_inv_arrow = rect_right_inv_arrow; +} +function addToRenderV2(addShape) { + addShape({ question }); + addShape({ hexagon }); + addShape({ stadium }); + addShape({ subroutine }); + addShape({ cylinder }); + addShape({ rect_left_inv_arrow }); + addShape({ lean_right }); + addShape({ lean_left }); + addShape({ trapezoid }); + addShape({ inv_trapezoid }); + addShape({ rect_right_inv_arrow }); +} +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +const flowChartShapes = { + addToRender, + addToRenderV2 +}; +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, _doc, diagObj) { + const svg = !root ? (0,src/* select */.Ys)(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`); + const doc = !_doc ? document : _doc; + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + const styles = (0,mermaid_0603ccf8.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + if ((0,mermaid_0603ccf8.m)((0,mermaid_0603ccf8.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,add_html_label/* addHtmlLabel */.a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(mermaid_0603ccf8.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + default: + _shape = "rect"; + } + mermaid_0603ccf8.l.warn("Adding node", vertex.id, vertex.domId); + g.setNode(diagObj.db.lookUpDomId(vertex.id), { + labelType: "svg", + labelStyle: styles.labelStyle, + shape: _shape, + label: vertexNode, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: diagObj.db.lookUpDomId(vertex.id) + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + let cnt = 0; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,mermaid_0603ccf8.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkId = "L-" + edge.start + "-" + edge.end; + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = {}; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + let style = ""; + let labelStyle = ""; + if (edge.style !== void 0) { + const styles = (0,mermaid_0603ccf8.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } else { + switch (edge.stroke) { + case "normal": + style = "fill:none"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + break; + case "dotted": + style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + style = " stroke-width: 3.5px;fill:none"; + break; + } + } + edgeData.style = style; + edgeData.labelStyle = labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,mermaid_0603ccf8.n)(edge.interpolate, src/* curveLinear */.c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,mermaid_0603ccf8.n)(edges.defaultInterpolate, src/* curveLinear */.c_6); + } else { + edgeData.curve = (0,mermaid_0603ccf8.n)(conf.curve, src/* curveLinear */.c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + if ((0,mermaid_0603ccf8.m)((0,mermaid_0603ccf8.c)().flowchart.htmlLabels)) { + edgeData.labelType = "html"; + edgeData.label = `<span id="L-${linkId}" class="edgeLabel L-${linkNameStart}' L-${linkNameEnd}" style="${edgeData.labelStyle}">${edge.text.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + )}</span>`; + } else { + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(mermaid_0603ccf8.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + } + } + edgeData.id = linkId; + edgeData.class = linkNameStart + " " + linkNameEnd; + edgeData.minlen = edge.length || 1; + g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + mermaid_0603ccf8.l.info("Extracting classes"); + return diagObj.db.getClasses(); +}; +const draw = function(text, id, _version, diagObj) { + mermaid_0603ccf8.l.info("Drawing flowchart"); + const { securityLevel, flowchart: conf2 } = (0,mermaid_0603ccf8.c)(); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,src/* select */.Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + const g = new graphlib/* Graph */.k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes); + } + const vert = diagObj.db.getVertices(); + mermaid_0603ccf8.l.warn("Get vertices", vert); + const edges = diagObj.db.getEdges(); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,src/* selectAll */.td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + mermaid_0603ccf8.l.warn( + "Setting subgraph", + subG.nodes[j], + diagObj.db.lookUpDomId(subG.nodes[j]), + diagObj.db.lookUpDomId(subG.id) + ); + g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id)); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g, diagObj); + const render$1 = new render(); + flowChartShapes.addToRender(render$1); + render$1.arrows().none = function normal(parent, id2, edge, type) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + const path = marker.append("path").attr("d", "M 0 0 L 0 0 L 0 0 z"); + (0,util/* applyStyle */.bg)(path, edge[type + "Style"]); + }; + render$1.arrows().normal = function normal(parent, id2) { + const marker = parent.append("marker").attr("id", id2).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto"); + marker.append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowheadPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + }; + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + render$1(element, g); + element.selectAll("g.node").attr("title", function() { + return diagObj.db.getTooltip(this.id); + }); + diagObj.db.indexNodes("subGraph" + i); + for (i = 0; i < subGraphs.length; i++) { + subG = subGraphs[i]; + if (subG.title !== "undefined") { + const clusterRects = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"] rect' + ); + const clusterEl = doc.querySelectorAll( + "#" + id + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"]' + ); + const xPos = clusterRects[0].x.baseVal.value; + const yPos = clusterRects[0].y.baseVal.value; + const _width = clusterRects[0].width.baseVal.value; + const cluster = (0,src/* select */.Ys)(clusterEl[0]); + const te = cluster.select(".label"); + te.attr("transform", `translate(${xPos + _width / 2}, ${yPos + 14})`); + te.attr("id", id + "Text"); + for (let j = 0; j < subG.classes.length; j++) { + clusterEl[0].classList.add(subG.classes[j]); + } + } + } + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + (0,mermaid_0603ccf8.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = root.select("#" + id + ' [id="' + diagObj.db.lookUpDomId(key) + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRenderer = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const diagram = { + parser: flowDb_d35e309a.p, + db: flowDb_d35e309a.f, + renderer: styles_7383a064.f, + styles: styles_7383a064.a, + init: (cnf) => { + if (!cnf.flowchart) { + cnf.flowchart = {}; + } + cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + flowRenderer.setConf(cnf.flowchart); + flowDb_d35e309a.f.clear(); + flowDb_d35e309a.f.setGen("gen-1"); + } +}; + + + +/***/ }), + +/***/ 60905: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46060); +/* harmony import */ var _edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(78932); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39164); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + for (let id of Object.keys(clusterDb)) { + const nonClusterChild = clusterDb[id].id; + const parent = graph.parent(nonClusterChild); + if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { + clusterDb[id].id = parent; + } + } + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = structuredClone(edge); + const edge2 = structuredClone(edge); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + const parent = graph.parent(v); + clusterDb[parent].externalConnections = true; + edge.fromCluster = e.v; + } + if (w !== e.w) { + const parent = graph.parent(w); + clusterDb[parent].externalConnections = true; + edge.toCluster = e.w; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + label.attr( + "transform", + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, siteConfig) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender( + nodes, + node.graph, + diagramtype, + id, + graph.node(v), + siteConfig + ); + const newEl = o.elem; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + const { subGraphTitleTotalMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + node.y += subGraphTitleTotalMargin; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + node.height += subGraphTitleTotalMargin; + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + node.y += subGraphTitleTotalMargin / 2; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); + const paths = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + await recursiveRender(elem, graph, diagramtype, id, void 0, siteConfig); +}; + + + +/***/ }), + +/***/ 36841: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ flowStyles), +/* harmony export */ f: () => (/* binding */ flowRendererV2) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45625); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28758); +/* harmony import */ var _index_8fae9850_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(60905); +/* harmony import */ var dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43349); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59792); +/* harmony import */ var khroma__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(51117); + + + + + + +const conf = {}; +const setConf = function(cnf) { + const keys = Object.keys(cnf); + for (const key of keys) { + conf[key] = cnf[key]; + } +}; +const addVertices = function(vert, g, svgId, root, doc, diagObj) { + const svg = root.select(`[id="${svgId}"]`); + const keys = Object.keys(vert); + keys.forEach(function(id) { + const vertex = vert[id]; + let classStr = "default"; + if (vertex.classes.length > 0) { + classStr = vertex.classes.join(" "); + } + classStr = classStr + " flowchart-label"; + const styles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.k)(vertex.styles); + let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id; + let vertexNode; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); + if (vertex.labelType === "markdown") { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("vertex", vertex, vertex.labelType); + } else { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.htmlLabels)) { + const node = { + label: vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ) + }; + vertexNode = (0,dagre_d3_es_src_dagre_js_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_3__/* .addHtmlLabel */ .a)(svg, node).node(); + vertexNode.parentNode.removeChild(vertexNode); + } else { + const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:")); + const rows = vertexText.split(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex); + for (const row of rows) { + const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "1"); + tspan.textContent = row; + svgLabel.appendChild(tspan); + } + vertexNode = svgLabel; + } + } + let radious = 0; + let _shape = ""; + switch (vertex.type) { + case "round": + radious = 5; + _shape = "rect"; + break; + case "square": + _shape = "rect"; + break; + case "diamond": + _shape = "question"; + break; + case "hexagon": + _shape = "hexagon"; + break; + case "odd": + _shape = "rect_left_inv_arrow"; + break; + case "lean_right": + _shape = "lean_right"; + break; + case "lean_left": + _shape = "lean_left"; + break; + case "trapezoid": + _shape = "trapezoid"; + break; + case "inv_trapezoid": + _shape = "inv_trapezoid"; + break; + case "odd_right": + _shape = "rect_left_inv_arrow"; + break; + case "circle": + _shape = "circle"; + break; + case "ellipse": + _shape = "ellipse"; + break; + case "stadium": + _shape = "stadium"; + break; + case "subroutine": + _shape = "subroutine"; + break; + case "cylinder": + _shape = "cylinder"; + break; + case "group": + _shape = "rect"; + break; + case "doublecircle": + _shape = "doublecircle"; + break; + default: + _shape = "rect"; + } + g.setNode(vertex.id, { + labelStyle: styles.labelStyle, + shape: _shape, + labelText: vertexText, + labelType: vertex.labelType, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: diagObj.db.getTooltip(vertex.id) || "", + domId: diagObj.db.lookUpDomId(vertex.id), + haveCallback: vertex.haveCallback, + width: vertex.type === "group" ? 500 : void 0, + dir: vertex.dir, + type: vertex.type, + props: vertex.props, + padding: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("setNode", { + labelStyle: styles.labelStyle, + labelType: vertex.labelType, + shape: _shape, + labelText: vertexText, + rx: radious, + ry: radious, + class: classStr, + style: styles.style, + id: vertex.id, + domId: diagObj.db.lookUpDomId(vertex.id), + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + dir: vertex.dir, + props: vertex.props, + padding: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)().flowchart.padding + }); + }); +}; +const addEdges = function(edges, g, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 edges = ", edges); + let cnt = 0; + let linkIdCnt = {}; + let defaultStyle; + let defaultLabelStyle; + if (edges.defaultStyle !== void 0) { + const defaultStyles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.k)(edges.defaultStyle); + defaultStyle = defaultStyles.style; + defaultLabelStyle = defaultStyles.labelStyle; + } + edges.forEach(function(edge) { + cnt++; + const linkIdBase = "L-" + edge.start + "-" + edge.end; + if (linkIdCnt[linkIdBase] === void 0) { + linkIdCnt[linkIdBase] = 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } else { + linkIdCnt[linkIdBase]++; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]); + } + let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]); + const linkNameStart = "LS-" + edge.start; + const linkNameEnd = "LE-" + edge.end; + const edgeData = { style: "", labelStyle: "" }; + edgeData.minlen = edge.length || 1; + if (edge.type === "arrow_open") { + edgeData.arrowhead = "none"; + } else { + edgeData.arrowhead = "normal"; + } + edgeData.arrowTypeStart = "arrow_open"; + edgeData.arrowTypeEnd = "arrow_open"; + switch (edge.type) { + case "double_arrow_cross": + edgeData.arrowTypeStart = "arrow_cross"; + case "arrow_cross": + edgeData.arrowTypeEnd = "arrow_cross"; + break; + case "double_arrow_point": + edgeData.arrowTypeStart = "arrow_point"; + case "arrow_point": + edgeData.arrowTypeEnd = "arrow_point"; + break; + case "double_arrow_circle": + edgeData.arrowTypeStart = "arrow_circle"; + case "arrow_circle": + edgeData.arrowTypeEnd = "arrow_circle"; + break; + } + let style = ""; + let labelStyle = ""; + switch (edge.stroke) { + case "normal": + style = "fill:none;"; + if (defaultStyle !== void 0) { + style = defaultStyle; + } + if (defaultLabelStyle !== void 0) { + labelStyle = defaultLabelStyle; + } + edgeData.thickness = "normal"; + edgeData.pattern = "solid"; + break; + case "dotted": + edgeData.thickness = "normal"; + edgeData.pattern = "dotted"; + edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;"; + break; + case "thick": + edgeData.thickness = "thick"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 3.5px;fill:none;"; + break; + case "invisible": + edgeData.thickness = "invisible"; + edgeData.pattern = "solid"; + edgeData.style = "stroke-width: 0;fill:none;"; + break; + } + if (edge.style !== void 0) { + const styles = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.k)(edge.style); + style = styles.style; + labelStyle = styles.labelStyle; + } + edgeData.style = edgeData.style += style; + edgeData.labelStyle = edgeData.labelStyle += labelStyle; + if (edge.interpolate !== void 0) { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.n)(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else if (edges.defaultInterpolate !== void 0) { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.n)(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } else { + edgeData.curve = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__/* .curveLinear */ .c_6); + } + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + } + edgeData.labelType = edge.labelType; + edgeData.label = edge.text.replace(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + edgeData.id = linkId; + edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd; + g.setEdge(edge.start, edge.end, edgeData, cnt); + }); +}; +const getClasses = function(text, diagObj) { + return diagObj.db.getClasses(); +}; +const draw = async function(text, id, _version, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Drawing flowchart"); + let dir = diagObj.db.getDirection(); + if (dir === void 0) { + dir = "TD"; + } + const { securityLevel, flowchart: conf2 } = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.c)(); + const nodeSpacing = conf2.nodeSpacing || 50; + const rankSpacing = conf2.rankSpacing || 50; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("body"); + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_0__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 0, + marginy: 0 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let subG; + const subGraphs = diagObj.db.getSubGraphs(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraphs - ", subGraphs); + for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) { + subG = subGraphs[i2]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Subgraph - ", subG); + diagObj.db.addVertex( + subG.id, + { text: subG.title, type: subG.labelType }, + "group", + void 0, + subG.classes, + subG.dir + ); + } + const vert = diagObj.db.getVertices(); + const edges = diagObj.db.getEdges(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Edges", edges); + let i = 0; + for (i = subGraphs.length - 1; i >= 0; i--) { + subG = subGraphs[i]; + (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .selectAll */ .td_)("cluster").append("text"); + for (let j = 0; j < subG.nodes.length; j++) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.l.info("Setting up subgraphs", subG.nodes[j], subG.id); + g.setParent(subG.nodes[j], subG.id); + } + } + addVertices(vert, g, id, root, doc, diagObj); + addEdges(edges, g); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_8fae9850_js__WEBPACK_IMPORTED_MODULE_4__.r)(element, g, ["point", "circle", "cross"], "flowchart", id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.u.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_2__.o)(g, svg, conf2.diagramPadding, conf2.useMaxWidth); + diagObj.db.indexNodes("subGraph" + i); + if (!conf2.htmlLabels) { + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } + const keys = Object.keys(vert); + keys.forEach(function(key) { + const vertex = vert[key]; + if (vertex.link) { + const node = (0,d3__WEBPACK_IMPORTED_MODULE_1__/* .select */ .Ys)("#" + id + ' [id="' + key + '"]'); + if (node) { + const link = doc.createElementNS("http://www.w3.org/2000/svg", "a"); + link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" ")); + link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link); + link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); + if (securityLevel === "sandbox") { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); + } else if (vertex.linkTarget) { + link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); + } + const linkNode = node.insert(function() { + return link; + }, ":first-child"); + const shape = node.select(".label-container"); + if (shape) { + linkNode.append(function() { + return shape.node(); + }); + } + const label = node.select(".label"); + if (label) { + linkNode.append(function() { + return label.node(); + }); + } + } + } + }); +}; +const flowRendererV2 = { + setConf, + addVertices, + addEdges, + getClasses, + draw +}; +const fade = (color, opacity) => { + const channel = khroma__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z; + const r = channel(color, "r"); + const g = channel(color, "g"); + const b = channel(color, "b"); + return khroma__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z(r, g, b, opacity); +}; +const getStyles = (options) => `.label { + font-family: ${options.fontFamily}; + color: ${options.nodeTextColor || options.textColor}; + } + .cluster-label text { + fill: ${options.titleColor}; + } + .cluster-label span,p { + color: ${options.titleColor}; + } + + .label text,span,p { + fill: ${options.nodeTextColor || options.textColor}; + color: ${options.nodeTextColor || options.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${options.arrowheadColor}; + } + + .edgePath .path { + stroke: ${options.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${options.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${options.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${options.edgeLabelBackground}; + fill: ${options.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${fade(options.edgeLabelBackground, 0.5)}; + // background-color: + } + + .cluster rect { + fill: ${options.clusterBkg}; + stroke: ${options.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${options.titleColor}; + } + + .cluster span,p { + color: ${options.titleColor}; + } + /* .cluster div { + color: ${options.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${options.fontFamily}; + font-size: 12px; + background: ${options.tertiaryColor}; + border: 1px solid ${options.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; + } +`; +const flowStyles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/955.0221cbc8.js b/assets/js/955.0221cbc8.js new file mode 100644 index 0000000000..27baa9acca --- /dev/null +++ b/assets/js/955.0221cbc8.js @@ -0,0 +1,26178 @@ +"use strict"; +exports.id = 955; +exports.ids = [955]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 46060: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ c: () => (/* binding */ write) +/* harmony export */ }); +/* unused harmony export read */ +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49360); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92346); +/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43836); +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); + + + + + +function write(g) { + var json = { + options: { + directed: g.isDirected(), + multigraph: g.isMultigraph(), + compound: g.isCompound(), + }, + nodes: writeNodes(g), + edges: writeEdges(g), + }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(g.graph())) { + json.value = lodash_es__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(g.graph()); + } + return json; +} + +function writeNodes(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.nodes(), function (v) { + var nodeValue = g.node(v); + var parent = g.parent(v); + var node = { v: v }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(nodeValue)) { + node.value = nodeValue; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(parent)) { + node.parent = parent; + } + return node; + }); +} + +function writeEdges(g) { + return lodash_es__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(g.edges(), function (e) { + var edgeValue = g.edge(e); + var edge = { v: e.v, w: e.w }; + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(e.name)) { + edge.name = e.name; + } + if (!lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(edgeValue)) { + edge.value = edgeValue; + } + return edge; + }); +} + +function read(json) { + var g = new Graph(json.options).setGraph(json.value); + _.each(json.nodes, function (entry) { + g.setNode(entry.v, entry.value); + if (entry.parent) { + g.setParent(entry.v, entry.parent); + } + }); + _.each(json.edges, function (entry) { + g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); + }); + return g; +} + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 92346: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseClone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(48451); + + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return (0,_baseClone_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value, CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clone); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 92955: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(49206); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45625); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(28758); +/* harmony import */ var _index_8fae9850_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(60905); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(22424); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46060); + + + + + + + + + + + + + + + + + + + +const sanitizeText = (txt) => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.e.sanitizeText(txt, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)()); +let conf = { + dividerMargin: 10, + padding: 5, + textHeight: 10, + curve: void 0 +}; +const addNamespaces = function(namespaces, g, _id, diagObj) { + const keys = Object.keys(namespaces); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info("keys:", keys); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info(namespaces); + keys.forEach(function(id) { + var _a, _b; + const vertex = namespaces[id]; + const shape = "rect"; + const node = { + shape, + id: vertex.id, + domId: vertex.domId, + labelText: sanitizeText(vertex.id), + labelStyle: "", + style: "fill: none; stroke: black", + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + addClasses(vertex.classes, g, _id, diagObj, vertex.id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); + }); +}; +const addClasses = function(classes, g, _id, diagObj, parent) { + const keys = Object.keys(classes); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info("keys:", keys); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info(classes); + keys.filter((id) => classes[id].parent == parent).forEach(function(id) { + var _a, _b; + const vertex = classes[id]; + const cssClassStr = vertex.cssClasses.join(" "); + const styles2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.k)(vertex.styles); + const vertexText = vertex.label ?? vertex.id; + const radius = 0; + const shape = "class_box"; + const node = { + labelStyle: styles2.labelStyle, + shape, + labelText: sanitizeText(vertexText), + classData: vertex, + rx: radius, + ry: radius, + class: cssClassStr, + style: styles2.style, + id: vertex.id, + domId: vertex.domId, + tooltip: diagObj.db.getTooltip(vertex.id, parent) || "", + haveCallback: vertex.haveCallback, + link: vertex.link, + width: vertex.type === "group" ? 500 : void 0, + type: vertex.type, + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + if (parent) { + g.setParent(vertex.id, parent); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); + }); +}; +const addNotes = function(notes, g, startEdgeId, classes) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info(notes); + notes.forEach(function(note, i) { + var _a, _b; + const vertex = note; + const cssNoteStr = ""; + const styles2 = { labelStyle: "", style: "" }; + const vertexText = vertex.text; + const radius = 0; + const shape = "note"; + const node = { + labelStyle: styles2.labelStyle, + shape, + labelText: sanitizeText(vertexText), + noteData: vertex, + rx: radius, + ry: radius, + class: cssNoteStr, + style: styles2.style, + id: vertex.id, + domId: vertex.id, + tooltip: "", + type: "note", + // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release + padding: ((_a = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.padding) ?? ((_b = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().class) == null ? void 0 : _b.padding) + }; + g.setNode(vertex.id, node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info("setNode", node); + if (!vertex.class || !(vertex.class in classes)) { + return; + } + const edgeId = startEdgeId + i; + const edgeData = { + id: `edgeNote${edgeId}`, + //Set relationship style and line type + classes: "relation", + pattern: "dotted", + // Set link type for rendering + arrowhead: "none", + //Set edge extra labels + startLabelRight: "", + endLabelLeft: "", + //Set relation arrow types + arrowTypeStart: "none", + arrowTypeEnd: "none", + style: "fill:none", + labelStyle: "", + curve: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.n)(conf.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6) + }; + g.setEdge(vertex.id, vertex.class, edgeData, edgeId); + }); +}; +const addRelations = function(relations, g) { + const conf2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart; + let cnt = 0; + relations.forEach(function(edge) { + var _a; + cnt++; + const edgeData = { + //Set relationship style and line type + classes: "relation", + pattern: edge.relation.lineType == 1 ? "dashed" : "solid", + id: `id_${edge.id1}_${edge.id2}_${cnt}`, + // Set link type for rendering + arrowhead: edge.type === "arrow_open" ? "none" : "normal", + //Set edge extra labels + startLabelRight: edge.relationTitle1 === "none" ? "" : edge.relationTitle1, + endLabelLeft: edge.relationTitle2 === "none" ? "" : edge.relationTitle2, + //Set relation arrow types + arrowTypeStart: getArrowMarker(edge.relation.type1), + arrowTypeEnd: getArrowMarker(edge.relation.type2), + style: "fill:none", + labelStyle: "", + curve: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.n)(conf2 == null ? void 0 : conf2.curve, d3__WEBPACK_IMPORTED_MODULE_0__/* .curveLinear */ .c_6) + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info(edgeData, edge); + if (edge.style !== void 0) { + const styles2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.k)(edge.style); + edgeData.style = styles2.style; + edgeData.labelStyle = styles2.labelStyle; + } + edge.text = edge.title; + if (edge.text === void 0) { + if (edge.style !== void 0) { + edgeData.arrowheadStyle = "fill: #333"; + } + } else { + edgeData.arrowheadStyle = "fill: #333"; + edgeData.labelpos = "c"; + if (((_a = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart) == null ? void 0 : _a.htmlLabels) ?? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().htmlLabels) { + edgeData.labelType = "html"; + edgeData.label = '<span class="edgeLabel">' + edge.text + "</span>"; + } else { + edgeData.labelType = "text"; + edgeData.label = edge.text.replace(_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.e.lineBreakRegex, "\n"); + if (edge.style === void 0) { + edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none"; + } + edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:"); + } + } + g.setEdge(edge.id1, edge.id2, edgeData, cnt); + }); +}; +const setConf = function(cnf) { + conf = { + ...conf, + ...cnf + }; +}; +const draw = async function(text, id, _version, diagObj) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info("Drawing class - ", id); + const conf2 = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().flowchart ?? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().class; + const securityLevel = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.c)().securityLevel; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info("config:", conf2); + const nodeSpacing = (conf2 == null ? void 0 : conf2.nodeSpacing) ?? 50; + const rankSpacing = (conf2 == null ? void 0 : conf2.rankSpacing) ?? 50; + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_1__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: diagObj.db.getDirection(), + nodesep: nodeSpacing, + ranksep: rankSpacing, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + const namespaces = diagObj.db.getNamespaces(); + const classes = diagObj.db.getClasses(); + const relations = diagObj.db.getRelations(); + const notes = diagObj.db.getNotes(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.l.info(relations); + addNamespaces(namespaces, g, id, diagObj); + addClasses(classes, g, id, diagObj); + addRelations(relations, g); + addNotes(notes, g, relations.length + 1, classes); + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id="${id}"]`); + const element = root.select("#" + id + " g"); + await (0,_index_8fae9850_js__WEBPACK_IMPORTED_MODULE_8__.r)( + element, + g, + ["aggregation", "extension", "composition", "dependency", "lollipop"], + "classDiagram", + id + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.u.insertTitle(svg, "classTitleText", (conf2 == null ? void 0 : conf2.titleTopMargin) ?? 5, diagObj.db.getDiagramTitle()); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_7__.o)(g, svg, conf2 == null ? void 0 : conf2.diagramPadding, conf2 == null ? void 0 : conf2.useMaxWidth); + if (!(conf2 == null ? void 0 : conf2.htmlLabels)) { + const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; + const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label'); + for (const label of labels) { + const dim = label.getBBox(); + const rect = doc.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.setAttribute("rx", 0); + rect.setAttribute("ry", 0); + rect.setAttribute("width", dim.width); + rect.setAttribute("height", dim.height); + label.insertBefore(rect, label.firstChild); + } + } +}; +function getArrowMarker(type) { + let marker; + switch (type) { + case 0: + marker = "aggregation"; + break; + case 1: + marker = "extension"; + break; + case 2: + marker = "composition"; + break; + case 3: + marker = "dependency"; + break; + case 4: + marker = "lollipop"; + break; + default: + marker = "none"; + } + return marker; +} +const renderer = { + setConf, + draw +}; +const diagram = { + parser: _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_9__.p, + db: _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_9__.d, + renderer, + styles: _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_9__.s, + init: (cnf) => { + if (!cnf.class) { + cnf.class = {}; + } + cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; + _styles_6860f46c_js__WEBPACK_IMPORTED_MODULE_9__.d.clear(); + } +}; + + + +/***/ }), + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 78932: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ a: () => (/* binding */ insertMarkers$1), +/* harmony export */ b: () => (/* binding */ clear$1), +/* harmony export */ c: () => (/* binding */ createLabel$1), +/* harmony export */ d: () => (/* binding */ clear), +/* harmony export */ e: () => (/* binding */ insertNode), +/* harmony export */ f: () => (/* binding */ insertEdgeLabel), +/* harmony export */ g: () => (/* binding */ getSubGraphTitleMargins), +/* harmony export */ h: () => (/* binding */ insertEdge), +/* harmony export */ i: () => (/* binding */ intersectRect$1), +/* harmony export */ j: () => (/* binding */ positionEdgeLabel), +/* harmony export */ k: () => (/* binding */ getLineFunctionsWithOffset), +/* harmony export */ l: () => (/* binding */ labelHelper), +/* harmony export */ m: () => (/* binding */ addEdgeMarkers), +/* harmony export */ p: () => (/* binding */ positionNode), +/* harmony export */ s: () => (/* binding */ setNodeElem), +/* harmony export */ u: () => (/* binding */ updateNodeBounds) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39164); + + + +const insertMarkers = (elem, markerArray, type, id) => { + markerArray.forEach((markerName) => { + markers[markerName](elem, type, id); + }); +}; +const extension = (elem, type, id) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Making markers for ", id); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionStart").attr("class", "marker extension " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-extensionEnd").attr("class", "marker extension " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z"); +}; +const composition = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionStart").attr("class", "marker composition " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-compositionEnd").attr("class", "marker composition " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const aggregation = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationStart").attr("class", "marker aggregation " + type).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-aggregationEnd").attr("class", "marker aggregation " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"); +}; +const dependency = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyStart").attr("class", "marker dependency " + type).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-dependencyEnd").attr("class", "marker dependency " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z"); +}; +const lollipop = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopStart").attr("class", "marker lollipop " + type).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); + elem.append("defs").append("marker").attr("id", id + "_" + type + "-lollipopEnd").attr("class", "marker lollipop " + type).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6); +}; +const point = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-pointEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-pointStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const circle$1 = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-circleEnd").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-circleStart").attr("class", "marker " + type).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"); +}; +const cross = (elem, type, id) => { + elem.append("marker").attr("id", id + "_" + type + "-crossEnd").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); + elem.append("marker").attr("id", id + "_" + type + "-crossStart").attr("class", "marker cross " + type).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"); +}; +const barb = (elem, type, id) => { + elem.append("defs").append("marker").attr("id", id + "_" + type + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z"); +}; +const markers = { + extension, + composition, + aggregation, + dependency, + lollipop, + point, + circle: circle$1, + cross, + barb +}; +const insertMarkers$1 = insertMarkers; +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlLabel(node) { + const fo = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "inline-block"); + div.style("white-space", "nowrap"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + return fo.node(); +} +const createLabel = (_vertexText, style, isTitle, isNode) => { + let vertexText = _vertexText || ""; + if (typeof vertexText === "object") { + vertexText = vertexText[0]; + } + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + vertexText = vertexText.replace(/\\n|\n/g, "<br />"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("vertexText" + vertexText); + const node = { + isNode, + label: (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(vertexText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + let vertexNode = addHtmlLabel(node); + return vertexNode; + } else { + const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + svgLabel.setAttribute("style", style.replace("color:", "fill:")); + let rows = []; + if (typeof vertexText === "string") { + rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi); + } else if (Array.isArray(vertexText)) { + rows = vertexText; + } else { + rows = []; + } + for (const row of rows) { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + tspan.setAttribute("dy", "1em"); + tspan.setAttribute("x", "0"); + if (isTitle) { + tspan.setAttribute("class", "title-row"); + } else { + tspan.setAttribute("class", "row"); + } + tspan.textContent = row.trim(); + svgLabel.appendChild(tspan); + } + return svgLabel; + } +}; +const createLabel$1 = createLabel; +const labelHelper = async (parent, node, _classes, isNode) => { + let classes; + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + if (!_classes) { + classes = "node default"; + } else { + classes = _classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle); + let labelText; + if (node.labelText === void 0) { + labelText = ""; + } else { + labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0]; + } + const textNode = label.node(); + let text; + if (node.labelType === "markdown") { + text = (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(label, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), { + useHtmlLabels, + width: node.width || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.wrappingWidth, + classes: "markdown-node-label" + }); + } else { + text = textNode.appendChild( + createLabel$1( + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.J)(labelText), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()), + node.labelStyle, + false, + isNode + ) + ); + } + let bbox = text.getBBox(); + const halfPadding = node.padding / 2; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + const images = div.getElementsByTagName("img"); + if (images) { + const noImgText = labelText.replace(/<img[^>]*>/g, "").trim() === ""; + await Promise.all( + [...images].map( + (img) => new Promise((res) => { + function setupImage() { + img.style.display = "flex"; + img.style.flexDirection = "column"; + if (noImgText) { + const bodyFontSize = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize ? (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().fontSize : window.getComputedStyle(document.body).fontSize; + const enlargingFactor = 5; + const width = parseInt(bodyFontSize, 10) * enlargingFactor + "px"; + img.style.minWidth = width; + img.style.maxWidth = width; + } else { + img.style.width = "100%"; + } + res(img); + } + setTimeout(() => { + if (img.complete) { + setupImage(); + } + }); + img.addEventListener("error", setupImage); + img.addEventListener("load", setupImage); + }) + ) + ); + } + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (useHtmlLabels) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } else { + label.attr("transform", "translate(0, " + -bbox.height / 2 + ")"); + } + if (node.centerLabel) { + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + } + label.insert("rect", ":first-child"); + return { shapeSvg, bbox, halfPadding, label }; +}; +const updateNodeBounds = (node, element) => { + const bbox = element.node().getBBox(); + node.width = bbox.width; + node.height = bbox.height; +}; +function insertPolygonShape(parent, w, h, points) { + return parent.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ).attr("class", "label-container").attr("transform", "translate(" + -w / 2 + "," + h / 2 + ")"); +} +function intersectNode(node, point2) { + return node.intersect(point2); +} +function intersectEllipse(node, rx, ry, point2) { + var cx = node.x; + var cy = node.y; + var px = cx - point2.x; + var py = cy - point2.y; + var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px); + var dx = Math.abs(rx * ry * px / det); + if (point2.x < cx) { + dx = -dx; + } + var dy = Math.abs(rx * ry * py / det); + if (point2.y < cy) { + dy = -dy; + } + return { x: cx + dx, y: cy + dy }; +} +function intersectCircle(node, rx, point2) { + return intersectEllipse(node, rx, rx, point2); +} +function intersectLine(p1, p2, q1, q2) { + var a1, a2, b1, b2, c1, c2; + var r1, r2, r3, r4; + var denom, offset, num; + var x, y; + a1 = p2.y - p1.y; + b1 = p1.x - p2.x; + c1 = p2.x * p1.y - p1.x * p2.y; + r3 = a1 * q1.x + b1 * q1.y + c1; + r4 = a1 * q2.x + b1 * q2.y + c1; + if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { + return; + } + a2 = q2.y - q1.y; + b2 = q1.x - q2.x; + c2 = q2.x * q1.y - q1.x * q2.y; + r1 = a2 * p1.x + b2 * p1.y + c2; + r2 = a2 * p2.x + b2 * p2.y + c2; + if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { + return; + } + denom = a1 * b2 - a2 * b1; + if (denom === 0) { + return; + } + offset = Math.abs(denom / 2); + num = b1 * c2 - b2 * c1; + x = num < 0 ? (num - offset) / denom : (num + offset) / denom; + num = a2 * c1 - a1 * c2; + y = num < 0 ? (num - offset) / denom : (num + offset) / denom; + return { x, y }; +} +function sameSign(r1, r2) { + return r1 * r2 > 0; +} +function intersectPolygon(node, polyPoints, point2) { + var x1 = node.x; + var y1 = node.y; + var intersections = []; + var minX = Number.POSITIVE_INFINITY; + var minY = Number.POSITIVE_INFINITY; + if (typeof polyPoints.forEach === "function") { + polyPoints.forEach(function(entry) { + minX = Math.min(minX, entry.x); + minY = Math.min(minY, entry.y); + }); + } else { + minX = Math.min(minX, polyPoints.x); + minY = Math.min(minY, polyPoints.y); + } + var left = x1 - node.width / 2 - minX; + var top = y1 - node.height / 2 - minY; + for (var i = 0; i < polyPoints.length; i++) { + var p1 = polyPoints[i]; + var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0]; + var intersect2 = intersectLine( + node, + point2, + { x: left + p1.x, y: top + p1.y }, + { x: left + p2.x, y: top + p2.y } + ); + if (intersect2) { + intersections.push(intersect2); + } + } + if (!intersections.length) { + return node; + } + if (intersections.length > 1) { + intersections.sort(function(p, q) { + var pdx = p.x - point2.x; + var pdy = p.y - point2.y; + var distp = Math.sqrt(pdx * pdx + pdy * pdy); + var qdx = q.x - point2.x; + var qdy = q.y - point2.y; + var distq = Math.sqrt(qdx * qdx + qdy * qdy); + return distp < distq ? -1 : distp === distq ? 0 : 1; + }); + } + return intersections[0]; +} +const intersectRect = (node, point2) => { + var x = node.x; + var y = node.y; + var dx = point2.x - x; + var dy = point2.y - y; + var w = node.width / 2; + var h = node.height / 2; + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + if (dy < 0) { + h = -h; + } + sx = dy === 0 ? 0 : h * dx / dy; + sy = h; + } else { + if (dx < 0) { + w = -w; + } + sx = w; + sy = dx === 0 ? 0 : w * dy / dx; + } + return { x: x + sx, y: y + sy }; +}; +const intersectRect$1 = intersectRect; +const intersect = { + node: intersectNode, + circle: intersectCircle, + ellipse: intersectEllipse, + polygon: intersectPolygon, + rect: intersectRect$1 +}; +const note = async (parent, node) => { + const useHtmlLabels = node.useHtmlLabels || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels; + if (!useHtmlLabels) { + node.centerLabel = true; + } + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Classes = ", node.classes); + const rect2 = shapeSvg.insert("rect", ":first-child"); + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const note$1 = note; +const expandAndDeduplicateDirections = (directions) => { + const uniqueDirections = /* @__PURE__ */ new Set(); + for (const direction of directions) { + switch (direction) { + case "x": + uniqueDirections.add("right"); + uniqueDirections.add("left"); + break; + case "y": + uniqueDirections.add("up"); + uniqueDirections.add("down"); + break; + default: + uniqueDirections.add(direction); + break; + } + } + return uniqueDirections; +}; +const getArrowPoints = (duplicatedDirections, bbox, node) => { + const directions = expandAndDeduplicateDirections(duplicatedDirections); + const f = 2; + const height = bbox.height + 2 * node.padding; + const midpoint = height / f; + const width = bbox.width + 2 * midpoint + node.padding; + const padding = node.padding / 2; + if (directions.has("right") && directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + // Bottom + { x: 0, y: 0 }, + { x: midpoint, y: 0 }, + { x: width / 2, y: 2 * padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: 0 }, + // Right + { x: width, y: -height / 3 }, + { x: width + 2 * padding, y: -height / 2 }, + { x: width, y: -2 * height / 3 }, + { x: width, y: -height }, + // Top + { x: width - midpoint, y: -height }, + { x: width / 2, y: -height - 2 * padding }, + { x: midpoint, y: -height }, + // Left + { x: 0, y: -height }, + { x: 0, y: -2 * height / 3 }, + { x: -2 * padding, y: -height / 2 }, + { x: 0, y: -height / 3 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("up")) { + return [ + { x: midpoint, y: 0 }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("right") && directions.has("left") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: midpoint, y: -height }, + { x: width - midpoint, y: -height }, + { x: width, y: 0 } + ]; + } + if (directions.has("right") && directions.has("up") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: width, y: -height + midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: 0, y: -height + midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("right") && directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up") && directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + if (directions.has("right") && directions.has("up")) { + return [ + { x: 0, y: 0 }, + { x: width, y: -midpoint }, + { x: 0, y: -height } + ]; + } + if (directions.has("right") && directions.has("down")) { + return [ + { x: 0, y: 0 }, + { x: width, y: 0 }, + { x: 0, y: -height } + ]; + } + if (directions.has("left") && directions.has("up")) { + return [ + { x: width, y: 0 }, + { x: 0, y: -midpoint }, + { x: width, y: -height } + ]; + } + if (directions.has("left") && directions.has("down")) { + return [ + { x: width, y: 0 }, + { x: 0, y: 0 }, + { x: width, y: -height } + ]; + } + if (directions.has("right")) { + return [ + { x: midpoint, y: -padding }, + { x: midpoint, y: -padding }, + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: 0 }, + { x: width, y: -height / 2 }, + { x: width - midpoint, y: -height }, + { x: width - midpoint, y: -height + padding }, + // top left corner of arrow + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding } + ]; + } + if (directions.has("left")) { + return [ + { x: midpoint, y: 0 }, + { x: midpoint, y: -padding }, + // Two points, the right corners + { x: width - midpoint, y: -padding }, + { x: width - midpoint, y: -height + padding }, + { x: midpoint, y: -height + padding }, + { x: midpoint, y: -height }, + { x: 0, y: -height / 2 } + ]; + } + if (directions.has("up")) { + return [ + // Bottom center + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: 0, y: -height + padding }, + // Top of arrow + { x: width / 2, y: -height }, + { x: width, y: -height + padding }, + // Top of right vertical bar + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding } + ]; + } + if (directions.has("down")) { + return [ + // Bottom center + { x: width / 2, y: 0 }, + // Left pont of bottom arrow + { x: 0, y: -padding }, + { x: midpoint, y: -padding }, + // Left top over vertical section + { x: midpoint, y: -height + padding }, + { x: width - midpoint, y: -height + padding }, + { x: width - midpoint, y: -padding }, + { x: width, y: -padding } + ]; + } + return [{ x: 0, y: 0 }]; +}; +const formatClass = (str) => { + if (str) { + return " " + str; + } + return ""; +}; +const getClassesFromNode = (node, otherClasses) => { + return `${otherClasses ? otherClasses : "node default"}${formatClass(node.classes)} ${formatClass( + node.class + )}`; +}; +const question = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const s = w + h; + const points = [ + { x: s / 2, y: 0 }, + { x: s, y: -s / 2 }, + { x: s / 2, y: -s }, + { x: 0, y: -s / 2 } + ]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Question main (Circle)"); + const questionElem = insertPolygonShape(shapeSvg, s, s, points); + questionElem.attr("style", node.style); + updateNodeBounds(node, questionElem); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn("Intersect called"); + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const choice = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const s = 28; + const points = [ + { x: 0, y: s / 2 }, + { x: s / 2, y: 0 }, + { x: 0, y: -s / 2 }, + { x: -s / 2, y: 0 } + ]; + const choice2 = shapeSvg.insert("polygon", ":first-child").attr( + "points", + points.map(function(d) { + return d.x + "," + d.y; + }).join(" ") + ); + choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28); + node.width = 28; + node.height = 28; + node.intersect = function(point2) { + return intersect.circle(node, 14, point2); + }; + return shapeSvg; +}; +const hexagon = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const f = 4; + const h = bbox.height + node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = [ + { x: m, y: 0 }, + { x: w - m, y: 0 }, + { x: w, y: -h / 2 }, + { x: w - m, y: -h }, + { x: m, y: -h }, + { x: 0, y: -h / 2 } + ]; + const hex = insertPolygonShape(shapeSvg, w, h, points); + hex.attr("style", node.style); + updateNodeBounds(node, hex); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const block_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true); + const f = 2; + const h = bbox.height + 2 * node.padding; + const m = h / f; + const w = bbox.width + 2 * m + node.padding; + const points = getArrowPoints(node.directions, bbox, node); + const blockArrow = insertPolygonShape(shapeSvg, w, h, points); + blockArrow.attr("style", node.style); + updateNodeBounds(node, blockArrow); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_left_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -h / 2, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: -h / 2, y: -h }, + { x: 0, y: -h / 2 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + node.width = w + h; + node.height = h; + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_right = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const lean_left = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 2 * h / 6, y: 0 }, + { x: w + h / 6, y: 0 }, + { x: w - 2 * h / 6, y: -h }, + { x: -h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: -2 * h / 6, y: 0 }, + { x: w + 2 * h / 6, y: 0 }, + { x: w - h / 6, y: -h }, + { x: h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const inv_trapezoid = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: h / 6, y: 0 }, + { x: w - h / 6, y: 0 }, + { x: w + 2 * h / 6, y: -h }, + { x: -2 * h / 6, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const rect_right_inv_arrow = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w + h / 2, y: 0 }, + { x: w, y: -h / 2 }, + { x: w + h / 2, y: -h }, + { x: 0, y: -h } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const cylinder = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const rx = w / 2; + const ry = rx / (2.5 + w / 50); + const h = bbox.height + ry + node.padding; + const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 a " + rx + "," + ry + " 0,0,0 " + -w + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w + " 0 l 0," + -h; + const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w / 2 + "," + -(h / 2 + ry) + ")"); + updateNodeBounds(node, el); + node.intersect = function(point2) { + const pos = intersect.rect(node, point2); + const x = pos.x - node.x; + if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) { + let y = ry * ry * (1 - x * x / (rx * rx)); + if (y != 0) { + y = Math.sqrt(y); + } + y = ry - y; + if (point2.y - node.y > 0) { + y = -y; + } + pos.y += y; + } + return pos; + }; + return shapeSvg; +}; +const rect = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes + " " + node.class, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const composite = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + "node " + node.classes, + true + ); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = node.positioned ? node.width : bbox.width + node.padding; + const totalHeight = node.positioned ? node.height : bbox.height + node.padding; + const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding; + const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding; + rect2.attr("class", "basic cluster composite label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", x).attr("y", y).attr("width", totalWidth).attr("height", totalHeight); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const labelRect = async (parent, node) => { + const { shapeSvg } = await labelHelper(parent, node, "label", true); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace("Classes = ", node.class); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const totalWidth = 0; + const totalHeight = 0; + rect2.attr("width", totalWidth).attr("height", totalHeight); + shapeSvg.attr("class", "label edgeLabel"); + if (node.props) { + const propKeys = new Set(Object.keys(node.props)); + if (node.props.borders) { + applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight); + propKeys.delete("borders"); + } + propKeys.forEach((propKey) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown node property ${propKey}`); + }); + } + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) { + const strokeDashArray = []; + const addBorder = (length) => { + strokeDashArray.push(length, 0); + }; + const skipBorder = (length) => { + strokeDashArray.push(0, length); + }; + if (borders.includes("t")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add top border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("r")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add right border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + if (borders.includes("b")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add bottom border"); + addBorder(totalWidth); + } else { + skipBorder(totalWidth); + } + if (borders.includes("l")) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("add left border"); + addBorder(totalHeight); + } else { + skipBorder(totalHeight); + } + rect2.attr("stroke-dasharray", strokeDashArray.join(" ")); +} +const rectWithTitle = (parent, node) => { + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const innerLine = shapeSvg.insert("line"); + const label = shapeSvg.insert("g").attr("class", "label"); + const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText; + let title = ""; + if (typeof text2 === "object") { + title = text2[0]; + } else { + title = text2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Label text abc79", title, text2, typeof text2 === "object"); + const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true)); + let bbox = { width: 0, height: 0 }; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Text 2", text2); + const textRows = text2.slice(1, text2.length); + let titleBox = text.getBBox(); + const descr = label.node().appendChild( + createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true) + ); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = descr.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const halfPadding = node.padding / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(descr).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")" + ); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(text).attr( + "transform", + "translate( " + // (titleBox.width - bbox.width) / 2 + + (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", 0)" + ); + bbox = label.node().getBBox(); + label.attr( + "transform", + "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")" + ); + rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const stadium = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const h = bbox.height + node.padding; + const w = bbox.width + h / 4 + node.padding; + const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const circle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle main"); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding, point2); + }; + return shapeSvg; +}; +const doublecircle = async (parent, node) => { + const { shapeSvg, bbox, halfPadding } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const gap = 5; + const circleGroup = shapeSvg.insert("g", ":first-child"); + const outerCircle = circleGroup.insert("circle"); + const innerCircle = circleGroup.insert("circle"); + circleGroup.attr("class", node.class); + outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2); + innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle main"); + updateNodeBounds(node, outerCircle); + node.intersect = function(point2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2); + return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2); + }; + return shapeSvg; +}; +const subroutine = async (parent, node) => { + const { shapeSvg, bbox } = await labelHelper( + parent, + node, + getClassesFromNode(node, void 0), + true + ); + const w = bbox.width + node.padding; + const h = bbox.height + node.padding; + const points = [ + { x: 0, y: 0 }, + { x: w, y: 0 }, + { x: w, y: -h }, + { x: 0, y: -h }, + { x: 0, y: 0 }, + { x: -8, y: 0 }, + { x: w + 8, y: 0 }, + { x: w + 8, y: -h }, + { x: -8, y: -h }, + { x: -8, y: 0 } + ]; + const el = insertPolygonShape(shapeSvg, w, h, points); + el.attr("style", node.style); + updateNodeBounds(node, el); + node.intersect = function(point2) { + return intersect.polygon(node, points, point2); + }; + return shapeSvg; +}; +const start = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const forkJoin = (parent, node, dir) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + let width = 70; + let height = 10; + if (dir === "LR") { + width = 10; + height = 70; + } + const shape = shapeSvg.append("rect").attr("x", -1 * width / 2).attr("y", -1 * height / 2).attr("width", width).attr("height", height).attr("class", "fork-join"); + updateNodeBounds(node, shape); + node.height = node.height + node.padding / 2; + node.width = node.width + node.padding / 2; + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const end = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id); + const innerCircle = shapeSvg.insert("circle", ":first-child"); + const circle2 = shapeSvg.insert("circle", ":first-child"); + circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); + innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10); + updateNodeBounds(node, circle2); + node.intersect = function(point2) { + return intersect.circle(node, 7, point2); + }; + return shapeSvg; +}; +const class_box = (parent, node) => { + const halfPadding = node.padding / 2; + const rowPadding = 4; + const lineHeight = 8; + let classes; + if (!node.classes) { + classes = "node default"; + } else { + classes = "node " + node.classes; + } + const shapeSvg = parent.insert("g").attr("class", classes).attr("id", node.domId || node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const topLine = shapeSvg.insert("line"); + const bottomLine = shapeSvg.insert("line"); + let maxWidth = 0; + let maxHeight = rowPadding; + const labelContainer = shapeSvg.insert("g").attr("class", "label"); + let verticalPos = 0; + const hasInterface = node.classData.annotations && node.classData.annotations[0]; + const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : ""; + const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true)); + let interfaceBBox = interfaceLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = interfaceLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel); + interfaceBBox = div.getBoundingClientRect(); + dv.attr("width", interfaceBBox.width); + dv.attr("height", interfaceBBox.height); + } + if (node.classData.annotations[0]) { + maxHeight += interfaceBBox.height + rowPadding; + maxWidth += interfaceBBox.width; + } + let classTitleString = node.classData.label; + if (node.classData.type !== void 0 && node.classData.type !== "") { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + classTitleString += "<" + node.classData.type + ">"; + } else { + classTitleString += "<" + node.classData.type + ">"; + } + } + const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true)); + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr("class", "classTitle"); + let classTitleBBox = classTitleLabel.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = classTitleLabel.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel); + classTitleBBox = div.getBoundingClientRect(); + dv.attr("width", classTitleBBox.width); + dv.attr("height", classTitleBBox.height); + } + maxHeight += classTitleBBox.height + rowPadding; + if (classTitleBBox.width > maxWidth) { + maxWidth = classTitleBBox.width; + } + const classAttributes = []; + node.classData.members.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let parsedText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + parsedText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classAttributes.push(lbl); + }); + maxHeight += lineHeight; + const classMethods = []; + node.classData.methods.forEach((member) => { + const parsedInfo = member.getDisplayDetails(); + let displayText = parsedInfo.displayText; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels) { + displayText = displayText.replace(/</g, "<").replace(/>/g, ">"); + } + const lbl = labelContainer.node().appendChild( + createLabel$1( + displayText, + parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle, + true, + true + ) + ); + let bbox = lbl.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels)) { + const div = lbl.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + if (bbox.width > maxWidth) { + maxWidth = bbox.width; + } + maxHeight += bbox.height + rowPadding; + classMethods.push(lbl); + }); + maxHeight += lineHeight; + if (hasInterface) { + let diffX2 = (maxWidth - interfaceBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(interfaceLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" + ); + verticalPos = interfaceBBox.height + rowPadding; + } + let diffX = (maxWidth - classTitleBBox.width) / 2; + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(classTitleLabel).attr( + "transform", + "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + verticalPos += classTitleBBox.height + rowPadding; + topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classAttributes.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + verticalPos += lineHeight; + bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos); + verticalPos += lineHeight; + classMethods.forEach((lbl) => { + (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(lbl).attr( + "transform", + "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" + ); + const memberBBox = lbl == null ? void 0 : lbl.getBBox(); + verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding; + }); + rect2.attr("style", node.style).attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding); + updateNodeBounds(node, rect2); + node.intersect = function(point2) { + return intersect.rect(node, point2); + }; + return shapeSvg; +}; +const shapes = { + rhombus: question, + composite, + question, + rect, + labelRect, + rectWithTitle, + choice, + circle, + doublecircle, + stadium, + hexagon, + block_arrow, + rect_left_inv_arrow, + lean_right, + lean_left, + trapezoid, + inv_trapezoid, + rect_right_inv_arrow, + cylinder, + start, + end, + note: note$1, + subroutine, + fork: forkJoin, + join: forkJoin, + class_box +}; +let nodeElems = {}; +const insertNode = async (elem, node, dir) => { + let newEl; + let el; + if (node.link) { + let target; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().securityLevel === "sandbox") { + target = "_top"; + } else if (node.linkTarget) { + target = node.linkTarget || "_blank"; + } + newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target); + el = await shapes[node.shape](newEl, node, dir); + } else { + el = await shapes[node.shape](elem, node, dir); + newEl = el; + } + if (node.tooltip) { + el.attr("title", node.tooltip); + } + if (node.class) { + el.attr("class", "node default " + node.class); + } + newEl.attr("data-node", "true"); + newEl.attr("data-id", node.id); + nodeElems[node.id] = newEl; + if (node.haveCallback) { + nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable"); + } + return newEl; +}; +const setNodeElem = (elem, node) => { + nodeElems[node.id] = elem; +}; +const clear$1 = () => { + nodeElems = {}; +}; +const positionNode = (node) => { + const el = nodeElems[node.id]; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.trace( + "Transforming node", + node.diff, + node, + "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")" + ); + const padding = 8; + const diff = node.diff || 0; + if (node.clusterNode) { + el.attr( + "transform", + "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding) + ")" + ); + } else { + el.attr("transform", "translate(" + node.x + ", " + node.y + ")"); + } + return diff; +}; +const getSubGraphTitleMargins = ({ + flowchart +}) => { + var _a, _b; + const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0; + const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0; + const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin; + return { + subGraphTitleTopMargin, + subGraphTitleBottomMargin, + subGraphTitleTotalMargin + }; +}; +const markerOffsets = { + aggregation: 18, + extension: 18, + composition: 18, + dependency: 6, + lollipop: 13.5, + arrow_point: 5.3 +}; +function calculateDeltaAndAngle(point1, point2) { + if (point1 === void 0 || point2 === void 0) { + return { angle: 0, deltaX: 0, deltaY: 0 }; + } + point1 = pointTransformer(point1); + point2 = pointTransformer(point2); + const [x1, y1] = [point1.x, point1.y]; + const [x2, y2] = [point2.x, point2.y]; + const deltaX = x2 - x1; + const deltaY = y2 - y1; + return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY }; +} +const pointTransformer = (data) => { + if (Array.isArray(data)) { + return { x: data[0], y: data[1] }; + } + return data; +}; +const getLineFunctionsWithOffset = (edge) => { + return { + x: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaX } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1); + } + return pointTransformer(d).x + offset; + }, + y: function(d, i, data) { + let offset = 0; + if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { + const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]); + offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { + const { angle, deltaY } = calculateDeltaAndAngle( + data[data.length - 1], + data[data.length - 2] + ); + offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1); + } + return pointTransformer(d).y + offset; + } + }; +}; +const addEdgeMarkers = (svgPath, edge, url, id, diagramType) => { + if (edge.arrowTypeStart) { + addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id, diagramType); + } + if (edge.arrowTypeEnd) { + addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id, diagramType); + } +}; +const arrowTypesMap = { + arrow_cross: "cross", + arrow_point: "point", + arrow_barb: "barb", + arrow_circle: "circle", + aggregation: "aggregation", + extension: "extension", + composition: "composition", + dependency: "dependency", + lollipop: "lollipop" +}; +const addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => { + const endMarkerType = arrowTypesMap[arrowType]; + if (!endMarkerType) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unknown arrow type: ${arrowType}`); + return; + } + const suffix = position === "start" ? "Start" : "End"; + svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`); +}; +let edgeLabels = {}; +let terminalLabels = {}; +const clear = () => { + edgeLabels = {}; + terminalLabels = {}; +}; +const insertEdgeLabel = (elem, edge) => { + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.m)((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels); + const labelElement = edge.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_2__.a)(elem, edge.label, { + style: edge.labelStyle, + useHtmlLabels, + addSvgBackground: true + }) : createLabel$1(edge.label, edge.labelStyle); + const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); + const label = edgeLabel.insert("g").attr("class", "label"); + label.node().appendChild(labelElement); + let bbox = labelElement.getBBox(); + if (useHtmlLabels) { + const div = labelElement.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(labelElement); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); + edgeLabels[edge.id] = edgeLabel; + edge.width = bbox.width; + edge.height = bbox.height; + let fo; + if (edge.startLabelLeft) { + const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle); + const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startLeft = startEdgeLabelLeft; + setTerminalWidth(fo, edge.startLabelLeft); + } + if (edge.startLabelRight) { + const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle); + const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = startEdgeLabelRight.insert("g").attr("class", "inner"); + fo = startEdgeLabelRight.node().appendChild(startLabelElement); + inner.node().appendChild(startLabelElement); + const slBox = startLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].startRight = startEdgeLabelRight; + setTerminalWidth(fo, edge.startLabelRight); + } + if (edge.endLabelLeft) { + const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle); + const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelLeft.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelLeft.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endLeft = endEdgeLabelLeft; + setTerminalWidth(fo, edge.endLabelLeft); + } + if (edge.endLabelRight) { + const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle); + const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); + const inner = endEdgeLabelRight.insert("g").attr("class", "inner"); + fo = inner.node().appendChild(endLabelElement); + const slBox = endLabelElement.getBBox(); + inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); + endEdgeLabelRight.node().appendChild(endLabelElement); + if (!terminalLabels[edge.id]) { + terminalLabels[edge.id] = {}; + } + terminalLabels[edge.id].endRight = endEdgeLabelRight; + setTerminalWidth(fo, edge.endLabelRight); + } + return labelElement; +}; +function setTerminalWidth(fo, value) { + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.htmlLabels && fo) { + fo.style.width = value.length * 9 + "px"; + fo.style.height = "12px"; + } +} +const positionEdgeLabel = (edge, paths) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Moving label abc88 ", edge.id, edge.label, edgeLabels[edge.id], paths); + let path = paths.updatedPath ? paths.updatedPath : paths.originalPath; + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig); + if (edge.label) { + const el = edgeLabels[edge.id]; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcLabelPosition(path); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug( + "Moving label " + edge.label + " from (", + x, + ",", + y, + ") to (", + pos.x, + ",", + pos.y, + ") abc88" + ); + if (paths.updatedPath) { + x = pos.x; + y = pos.y; + } + } + el.attr("transform", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`); + } + if (edge.startLabelLeft) { + const el = terminalLabels[edge.id].startLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.startLabelRight) { + const el = terminalLabels[edge.id].startRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition( + edge.arrowTypeStart ? 10 : 0, + "start_right", + path + ); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelLeft) { + const el = terminalLabels[edge.id].endLeft; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } + if (edge.endLabelRight) { + const el = terminalLabels[edge.id].endRight; + let x = edge.x; + let y = edge.y; + if (path) { + const pos = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path); + x = pos.x; + y = pos.y; + } + el.attr("transform", `translate(${x}, ${y})`); + } +}; +const outsideNode = (node, point2) => { + const x = node.x; + const y = node.y; + const dx = Math.abs(point2.x - x); + const dy = Math.abs(point2.y - y); + const w = node.width / 2; + const h = node.height / 2; + if (dx >= w || dy >= h) { + return true; + } + return false; +}; +const intersection = (node, outsidePoint, insidePoint) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(outsidePoint)} + insidePoint : ${JSON.stringify(insidePoint)} + node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`); + const x = node.x; + const y = node.y; + const dx = Math.abs(x - insidePoint.x); + const w = node.width / 2; + let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx; + const h = node.height / 2; + const Q = Math.abs(outsidePoint.y - insidePoint.y); + const R = Math.abs(outsidePoint.x - insidePoint.x); + if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { + let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y; + r = R * q / Q; + const res = { + x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r, + y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q + }; + if (r === 0) { + res.x = outsidePoint.x; + res.y = outsidePoint.y; + } + if (R === 0) { + res.x = outsidePoint.x; + } + if (Q === 0) { + res.y = outsidePoint.y; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + return res; + } else { + if (insidePoint.x < outsidePoint.x) { + r = outsidePoint.x - w - x; + } else { + r = x - w - outsidePoint.x; + } + let q = Q * r / R; + let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r; + let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y }); + if (r === 0) { + _x = outsidePoint.x; + _y = outsidePoint.y; + } + if (R === 0) { + _x = outsidePoint.x; + } + if (Q === 0) { + _y = outsidePoint.y; + } + return { x: _x, y: _y }; + } +}; +const cutPathAtIntersect = (_points, boundryNode) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 cutPathAtIntersect", _points, boundryNode); + let points = []; + let lastPointOutside = _points[0]; + let isInside = false; + _points.forEach((point2) => { + if (!outsideNode(boundryNode, point2) && !isInside) { + const inter = intersection(boundryNode, lastPointOutside, point2); + let pointPresent = false; + points.forEach((p) => { + pointPresent = pointPresent || p.x === inter.x && p.y === inter.y; + }); + if (!points.some((e) => e.x === inter.x && e.y === inter.y)) { + points.push(inter); + } + isInside = true; + } else { + lastPointOutside = point2; + if (!isInside) { + points.push(point2); + } + } + }); + return points; +}; +const insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) { + let points = edge.points; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("abc88 InsertEdge: edge=", edge, "e=", e); + let pointsHasChanged = false; + const tail = graph.node(e.v); + var head = graph.node(e.w); + if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) { + points = points.slice(1, edge.points.length - 1); + points.unshift(tail.intersect(points[0])); + points.push(head.intersect(points[points.length - 1])); + } + if (edge.toCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("to cluster abc88", clusterDb[edge.toCluster]); + points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node); + pointsHasChanged = true; + } + if (edge.fromCluster) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("from cluster abc88", clusterDb[edge.fromCluster]); + points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse(); + pointsHasChanged = true; + } + const lineData = points.filter((p) => !Number.isNaN(p.y)); + let curve = d3__WEBPACK_IMPORTED_MODULE_0__/* .curveBasis */ .$0Z; + if (edge.curve && (diagramType === "graph" || diagramType === "flowchart")) { + curve = edge.curve; + } + const { x, y } = getLineFunctionsWithOffset(edge); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(x).y(y).curve(curve); + let strokeClasses; + switch (edge.thickness) { + case "normal": + strokeClasses = "edge-thickness-normal"; + break; + case "thick": + strokeClasses = "edge-thickness-thick"; + break; + case "invisible": + strokeClasses = "edge-thickness-thick"; + break; + default: + strokeClasses = ""; + } + switch (edge.pattern) { + case "solid": + strokeClasses += " edge-pattern-solid"; + break; + case "dotted": + strokeClasses += " edge-pattern-dotted"; + break; + case "dashed": + strokeClasses += " edge-pattern-dashed"; + break; + } + const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style); + let url = ""; + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().flowchart.arrowMarkerAbsolute || (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().state.arrowMarkerAbsolute) { + url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; + url = url.replace(/\(/g, "\\("); + url = url.replace(/\)/g, "\\)"); + } + addEdgeMarkers(svgPath, edge, url, id, diagramType); + let paths = {}; + if (pointsHasChanged) { + paths.updatedPath = points; + } + paths.originalPath = edge.points; + return paths; +}; + + + +/***/ }), + +/***/ 60905: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ r: () => (/* binding */ render) +/* harmony export */ }); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46060); +/* harmony import */ var _edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(78932); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28758); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39164); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64218); + + + + + + + +let clusterDb = {}; +let descendants = {}; +let parents = {}; +const clear$1 = () => { + descendants = {}; + parents = {}; + clusterDb = {}; +}; +const isDescendant = (id, ancenstorId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("In isDecendant", ancenstorId, " ", id, " = ", descendants[ancenstorId].includes(id)); + if (descendants[ancenstorId].includes(id)) { + return true; + } + return false; +}; +const edgeInCluster = (edge, clusterId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Decendants of ", clusterId, " is ", descendants[clusterId]); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge is ", edge); + if (edge.v === clusterId) { + return false; + } + if (edge.w === clusterId) { + return false; + } + if (!descendants[clusterId]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Tilt, ", clusterId, ",not in decendants"); + return false; + } + return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w); +}; +const copy = (clusterId, graph, newGraph, rootId) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Copying children of ", + clusterId, + "root", + rootId, + "data", + graph.node(clusterId), + rootId + ); + const nodes = graph.children(clusterId) || []; + if (clusterId !== rootId) { + nodes.push(clusterId); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes); + nodes.forEach((node) => { + if (graph.children(node).length > 0) { + copy(node, graph, newGraph, rootId); + } else { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("cp ", node, " to ", rootId, " with parent ", clusterId); + newGraph.setNode(node, data); + if (rootId !== graph.parent(node)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Setting parent", node, graph.parent(node)); + newGraph.setParent(node, graph.parent(node)); + } + if (clusterId !== rootId && node !== clusterId) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Setting parent", node, clusterId); + newGraph.setParent(node, clusterId); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Not Setting parent for node=", + node, + "cluster!==rootId", + clusterId !== rootId, + "node!==clusterId", + node !== clusterId + ); + } + const edges = graph.edges(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Copying Edges", edges); + edges.forEach((edge) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge", edge); + const data2 = graph.edge(edge.v, edge.w, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge data", data2, rootId); + try { + if (edgeInCluster(edge, rootId)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Copying as ", edge.v, edge.w, data2, edge.name); + newGraph.setEdge(edge.v, edge.w, data2, edge.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Skipping copy of edge ", + edge.v, + "-->", + edge.w, + " rootId: ", + rootId, + " clusterId:", + clusterId + ); + } + } catch (e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error(e); + } + }); + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Removing node", node); + graph.removeNode(node); + }); +}; +const extractDescendants = (id, graph) => { + const children = graph.children(id); + let res = [...children]; + for (const child of children) { + parents[child] = id; + res = [...res, ...extractDescendants(child, graph)]; + } + return res; +}; +const findNonClusterChild = (id, graph) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching", id); + const children = graph.children(id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Searching children of id ", id, children); + if (children.length < 1) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("This is a valid node", id); + return id; + } + for (const child of children) { + const _id = findNonClusterChild(child, graph); + if (_id) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Found replacement for", id, " => ", _id); + return _id; + } + } +}; +const getAnchorId = (id) => { + if (!clusterDb[id]) { + return id; + } + if (!clusterDb[id].externalConnections) { + return id; + } + if (clusterDb[id]) { + return clusterDb[id].id; + } + return id; +}; +const adjustClustersAndEdges = (graph, depth) => { + if (!graph || depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting out, no graph "); + return; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Opting in, graph "); + } + graph.nodes().forEach(function(id) { + const children = graph.children(id); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster identified", + id, + " Replacement id in edges: ", + findNonClusterChild(id, graph) + ); + descendants[id] = extractDescendants(id, graph); + clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) }; + } + }); + graph.nodes().forEach(function(id) { + const children = graph.children(id); + const edges = graph.edges(); + if (children.length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Cluster identified", id, descendants); + edges.forEach((edge) => { + if (edge.v !== id && edge.w !== id) { + const d1 = isDescendant(edge.v, id); + const d2 = isDescendant(edge.w, id); + if (d1 ^ d2) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge: ", edge, " leaves cluster ", id); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Decendants of XXX ", id, ": ", descendants[id]); + clusterDb[id].externalConnections = true; + } + } + }); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster ", id, descendants); + } + }); + for (let id of Object.keys(clusterDb)) { + const nonClusterChild = clusterDb[id].id; + const parent = graph.parent(nonClusterChild); + if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) { + clusterDb[id].id = parent; + } + } + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e))); + let v = e.v; + let w = e.w; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Fix XXX", + clusterDb, + "ids:", + e.v, + e.w, + "Translating: ", + clusterDb[e.v], + " --- ", + clusterDb[e.w] + ); + if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + const specialId = e.w + "---" + e.v; + graph.setNode(specialId, { + domId: specialId, + id: specialId, + labelStyle: "", + labelText: edge.label, + padding: 0, + shape: "labelRect", + style: "" + }); + const edge1 = structuredClone(edge); + const edge2 = structuredClone(edge); + edge1.label = ""; + edge1.arrowTypeEnd = "none"; + edge2.label = ""; + edge1.fromCluster = e.v; + edge2.toCluster = e.v; + graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special"); + graph.setEdge(specialId, w, edge2, e.name + "-cyclic-special"); + } else if (clusterDb[e.v] || clusterDb[e.w]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name); + v = getAnchorId(e.v); + w = getAnchorId(e.w); + graph.removeEdge(e.v, e.w, e.name); + if (v !== e.v) { + const parent = graph.parent(v); + clusterDb[parent].externalConnections = true; + edge.fromCluster = e.v; + } + if (w !== e.w) { + const parent = graph.parent(w); + clusterDb[parent].externalConnections = true; + edge.toCluster = e.w; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fix Replacing with XXX", v, w, e.name); + graph.setEdge(v, w, edge, e.name); + } + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Adjusted Graph", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + extractor(graph, 0); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace(clusterDb); +}; +const extractor = (graph, depth) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("extractor - ", depth, dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), graph.children("D")); + if (depth > 10) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.error("Bailing out"); + return; + } + let nodes = graph.nodes(); + let hasChildren = false; + for (const node of nodes) { + const children = graph.children(node); + hasChildren = hasChildren || children.length > 0; + } + if (!hasChildren) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Done, no node has children", graph.nodes()); + return; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Nodes = ", nodes, depth); + for (const node of nodes) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug( + "Extracting node", + node, + clusterDb, + clusterDb[node] && !clusterDb[node].externalConnections, + !graph.parent(node), + graph.node(node), + graph.children("D"), + " Depth ", + depth + ); + if (!clusterDb[node]) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Not a cluster", node, depth); + } else if (!clusterDb[node].externalConnections && // !graph.parent(node) && + graph.children(node) && graph.children(node).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster without external connections, without a parent and with children", + node, + depth + ); + const graphSettings = graph.graph(); + let dir = graphSettings.rankdir === "TB" ? "LR" : "TB"; + if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) { + dir = clusterDb[node].clusterData.dir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Fixing dir", clusterDb[node].clusterData.dir, dir); + } + const clusterGraph = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: true, + compound: true + }).setGraph({ + rankdir: dir, + // Todo: set proper spacing + nodesep: 50, + ranksep: 50, + marginx: 8, + marginy: 8 + }).setDefaultEdgeLabel(function() { + return {}; + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Old graph before copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + copy(node, graph, clusterGraph, node); + graph.setNode(node, { + clusterNode: true, + id: node, + clusterData: clusterDb[node].clusterData, + labelText: clusterDb[node].labelText, + graph: clusterGraph + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New graph after copy node: (", node, ")", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(clusterGraph)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Old graph after copy", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn( + "Cluster ** ", + node, + " **not meeting the criteria !externalConnections:", + !clusterDb[node].externalConnections, + " no parent: ", + !graph.parent(node), + " children ", + graph.children(node) && graph.children(node).length > 0, + graph.children("D"), + depth + ); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(clusterDb); + } + } + nodes = graph.nodes(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("New list of nodes", nodes); + for (const node of nodes) { + const data = graph.node(node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn(" Now next level", node, data); + if (data.clusterNode) { + extractor(data.graph, depth + 1); + } + } +}; +const sorter = (graph, nodes) => { + if (nodes.length === 0) { + return []; + } + let result = Object.assign(nodes); + nodes.forEach((node) => { + const children = graph.children(node); + const sorted = sorter(graph, children); + result = [...result, ...sorted]; + }); + return result; +}; +const sortNodesByHierarchy = (graph) => sorter(graph, graph.children()); +const rect = (parent, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Creating subgraph rect for ", node.id, node); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const useHtmlLabels = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const text = node.labelType === "markdown" ? (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_5__.a)(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width; + if (node.width <= bbox.width + padding) { + node.diff = (bbox.width - node.width) / 2 - node.padding / 2; + } else { + node.diff = -node.padding / 2; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Data ", node, JSON.stringify(node)); + rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width).attr("height", node.height + padding); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + if (useHtmlLabels) { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } else { + label.attr( + "transform", + // This puts the labal on top of the box instead of inside it + `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` + ); + } + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const noteGroup = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding).attr("height", node.height + padding).attr("fill", "none"); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const roundedWithTitle = (parent, node) => { + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const label = shapeSvg.insert("g").attr("class", "cluster-label"); + const innerRect = shapeSvg.append("rect"); + const text = label.node().appendChild((0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.c)(node.labelText, node.labelStyle, void 0, true)); + let bbox = text.getBBox(); + if ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = (0,d3__WEBPACK_IMPORTED_MODULE_3__/* .select */ .Ys)(text); + bbox = div.getBoundingClientRect(); + dv.attr("width", bbox.width); + dv.attr("height", bbox.height); + } + bbox = text.getBBox(); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width; + if (node.width <= bbox.width + node.padding) { + node.diff = (bbox.width + node.padding * 0 - node.width) / 2; + } else { + node.diff = -node.padding / 2; + } + rect2.attr("class", "outer").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width + padding).attr("height", node.height + padding); + innerRect.attr("class", "inner").attr("x", node.x - width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width + padding).attr("height", node.height + padding - bbox.height - 3); + const { subGraphTitleTopMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + label.attr( + "transform", + `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + ((0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.m)(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})` + ); + const rectBox = rect2.node().getBBox(); + node.height = rectBox.height; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const divider = (parent, node) => { + const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id); + const rect2 = shapeSvg.insert("rect", ":first-child"); + const padding = 0 * node.padding; + const halfPadding = padding / 2; + rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding).attr("height", node.height + padding); + const rectBox = rect2.node().getBBox(); + node.width = rectBox.width; + node.height = rectBox.height; + node.diff = -node.padding / 2; + node.intersect = function(point) { + return (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.i)(node, point); + }; + return shapeSvg; +}; +const shapes = { rect, roundedWithTitle, noteGroup, divider }; +let clusterElems = {}; +const insertCluster = (elem, node) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Inserting cluster"); + const shape = node.shape || "rect"; + clusterElems[node.id] = shapes[shape](elem, node); +}; +const clear = () => { + clusterElems = {}; +}; +const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, siteConfig) => { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph in recursive render: XXX", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph), parentCluster); + const dir = graph.graph().rankdir; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Dir in recursive render - dir:", dir); + const elem = _elem.insert("g").attr("class", "root"); + if (!graph.nodes()) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("No nodes found for", graph); + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Recursive render XXX", graph.nodes()); + } + if (graph.edges().length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Recursive edges", graph.edge(graph.edges()[0])); + } + const clusters = elem.insert("g").attr("class", "clusters"); + const edgePaths = elem.insert("g").attr("class", "edgePaths"); + const edgeLabels = elem.insert("g").attr("class", "edgeLabels"); + const nodes = elem.insert("g").attr("class", "nodes"); + await Promise.all( + graph.nodes().map(async function(v) { + const node = graph.node(v); + if (parentCluster !== void 0) { + const data = JSON.parse(JSON.stringify(parentCluster.clusterData)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Setting data for cluster XXX (", v, ") ", data, parentCluster); + graph.setNode(parentCluster.id, data); + if (!graph.parent(v)) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.trace("Setting parent", v, parentCluster.id); + graph.setParent(v, parentCluster.id, data); + } + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v))); + if (node && node.clusterNode) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster identified", v, node.width, graph.node(v)); + const o = await recursiveRender( + nodes, + node.graph, + diagramtype, + id, + graph.node(v), + siteConfig + ); + const newEl = o.elem; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.u)(node, newEl); + node.diff = o.diff || 0; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node bounds (abc123)", v, node, node.width, node.x, node.y); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.s)(newEl, node); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Recursive render complete ", newEl, node); + } else { + if (graph.children(v).length > 0) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Cluster - the non recursive path XXX", v, node.id, node, graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(findNonClusterChild(node.id, graph)); + clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node }; + } else { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Node - the non recursive path", v, node.id, node); + await (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.e)(nodes, graph.node(v), dir); + } + } + }) + ); + graph.edges().forEach(function(e) { + const edge = graph.edge(e.v, e.w, e.name); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.f)(edgeLabels, edge); + }); + graph.edges().forEach(function(e) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e)); + }); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("### Layout ###"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("#############################################"); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(graph); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_0__/* .layout */ .bK)(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Graph after layout:", dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph)); + let diff = 0; + const { subGraphTitleTotalMargin } = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.g)(siteConfig); + sortNodesByHierarchy(graph).forEach(function(v) { + const node = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Position " + v + ": " + JSON.stringify(graph.node(v))); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info( + "Position " + v + ": (" + node.x, + "," + node.y, + ") width: ", + node.width, + " height: ", + node.height + ); + if (node && node.clusterNode) { + node.y += subGraphTitleTotalMargin; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } else { + if (graph.children(v).length > 0) { + node.height += subGraphTitleTotalMargin; + insertCluster(clusters, node); + clusterDb[node.id].node = node; + } else { + node.y += subGraphTitleTotalMargin / 2; + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.p)(node); + } + } + }); + graph.edges().forEach(function(e) { + const edge = graph.edge(e); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge); + edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2); + const paths = (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.h)(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.j)(edge, paths); + }); + graph.nodes().forEach(function(v) { + const n = graph.node(v); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.info(v, n.type, n.diff); + if (n.type === "group") { + diff = n.diff; + } + }); + return { elem, diff }; +}; +const render = async (elem, graph, markers, diagramtype, id) => { + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.a)(elem, markers, diagramtype, id); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.b)(); + (0,_edges_d417c7a0_js__WEBPACK_IMPORTED_MODULE_6__.d)(); + clear(); + clear$1(); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph at first:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + adjustClustersAndEdges(graph); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.l.warn("Graph after:", JSON.stringify(dagre_d3_es_src_graphlib_json_js__WEBPACK_IMPORTED_MODULE_1__/* .write */ .c(graph))); + const siteConfig = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_4__.c)(); + await recursiveRender(elem, graph, diagramtype, id, void 0, siteConfig); +}; + + + +/***/ }), + +/***/ 49206: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ d: () => (/* binding */ db), +/* harmony export */ p: () => (/* binding */ parser$1), +/* harmony export */ s: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28758); + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 17], $V1 = [1, 18], $V2 = [1, 19], $V3 = [1, 39], $V4 = [1, 40], $V5 = [1, 25], $V6 = [1, 23], $V7 = [1, 24], $V8 = [1, 31], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 43], $Vj = [1, 30], $Vk = [1, 42], $Vl = [1, 44], $Vm = [1, 41], $Vn = [1, 45], $Vo = [1, 9], $Vp = [1, 8, 9], $Vq = [1, 56], $Vr = [1, 57], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 60], $Vv = [1, 61], $Vw = [1, 62], $Vx = [1, 8, 9, 39], $Vy = [1, 74], $Vz = [1, 8, 9, 12, 13, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], $VA = [1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 46, 59, 60, 61, 62, 63, 64, 65, 70, 72, 74, 80, 95, 97, 98], $VB = [13, 74, 80, 95, 97, 98], $VC = [13, 64, 65, 74, 80, 95, 97, 98], $VD = [13, 59, 60, 61, 62, 63, 74, 80, 95, 97, 98], $VE = [1, 93], $VF = [1, 110], $VG = [1, 108], $VH = [1, 102], $VI = [1, 103], $VJ = [1, 104], $VK = [1, 105], $VL = [1, 106], $VM = [1, 107], $VN = [1, 109], $VO = [1, 8, 9, 37, 39, 42], $VP = [1, 8, 9, 21], $VQ = [1, 8, 9, 78], $VR = [1, 8, 9, 21, 73, 74, 78, 80, 81, 82, 83, 84, 85]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statements": 5, "graphConfig": 6, "CLASS_DIAGRAM": 7, "NEWLINE": 8, "EOF": 9, "statement": 10, "classLabel": 11, "SQS": 12, "STR": 13, "SQE": 14, "namespaceName": 15, "alphaNumToken": 16, "className": 17, "classLiteralName": 18, "GENERICTYPE": 19, "relationStatement": 20, "LABEL": 21, "namespaceStatement": 22, "classStatement": 23, "memberStatement": 24, "annotationStatement": 25, "clickStatement": 26, "styleStatement": 27, "cssClassStatement": 28, "noteStatement": 29, "direction": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "namespaceIdentifier": 36, "STRUCT_START": 37, "classStatements": 38, "STRUCT_STOP": 39, "NAMESPACE": 40, "classIdentifier": 41, "STYLE_SEPARATOR": 42, "members": 43, "CLASS": 44, "ANNOTATION_START": 45, "ANNOTATION_END": 46, "MEMBER": 47, "SEPARATOR": 48, "relation": 49, "NOTE_FOR": 50, "noteText": 51, "NOTE": 52, "direction_tb": 53, "direction_bt": 54, "direction_rl": 55, "direction_lr": 56, "relationType": 57, "lineType": 58, "AGGREGATION": 59, "EXTENSION": 60, "COMPOSITION": 61, "DEPENDENCY": 62, "LOLLIPOP": 63, "LINE": 64, "DOTTED_LINE": 65, "CALLBACK": 66, "LINK": 67, "LINK_TARGET": 68, "CLICK": 69, "CALLBACK_NAME": 70, "CALLBACK_ARGS": 71, "HREF": 72, "STYLE": 73, "ALPHA": 74, "stylesOpt": 75, "CSSCLASS": 76, "style": 77, "COMMA": 78, "styleComponent": 79, "NUM": 80, "COLON": 81, "UNIT": 82, "SPACE": 83, "BRKT": 84, "PCT": 85, "commentToken": 86, "textToken": 87, "graphCodeTokens": 88, "textNoTagsToken": 89, "TAGSTART": 90, "TAGEND": 91, "==": 92, "--": 93, "DEFAULT": 94, "MINUS": 95, "keywords": 96, "UNICODE_TEXT": 97, "BQUOTE_STR": 98, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 19: "GENERICTYPE", 21: "LABEL", 31: "acc_title", 32: "acc_title_value", 33: "acc_descr", 34: "acc_descr_value", 35: "acc_descr_multiline_value", 37: "STRUCT_START", 39: "STRUCT_STOP", 40: "NAMESPACE", 42: "STYLE_SEPARATOR", 44: "CLASS", 45: "ANNOTATION_START", 46: "ANNOTATION_END", 47: "MEMBER", 48: "SEPARATOR", 50: "NOTE_FOR", 52: "NOTE", 53: "direction_tb", 54: "direction_bt", 55: "direction_rl", 56: "direction_lr", 59: "AGGREGATION", 60: "EXTENSION", 61: "COMPOSITION", 62: "DEPENDENCY", 63: "LOLLIPOP", 64: "LINE", 65: "DOTTED_LINE", 66: "CALLBACK", 67: "LINK", 68: "LINK_TARGET", 69: "CLICK", 70: "CALLBACK_NAME", 71: "CALLBACK_ARGS", 72: "HREF", 73: "STYLE", 74: "ALPHA", 76: "CSSCLASS", 78: "COMMA", 80: "NUM", 81: "COLON", 82: "UNIT", 83: "SPACE", 84: "BRKT", 85: "PCT", 88: "graphCodeTokens", 90: "TAGSTART", 91: "TAGEND", 92: "==", 93: "--", 94: "DEFAULT", 95: "MINUS", 96: "keywords", 97: "UNICODE_TEXT", 98: "BQUOTE_STR" }, + productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 2], [17, 1], [17, 1], [17, 2], [17, 2], [17, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [22, 4], [22, 5], [36, 2], [38, 1], [38, 2], [38, 3], [23, 1], [23, 3], [23, 4], [23, 6], [41, 2], [41, 3], [25, 4], [43, 1], [43, 2], [24, 1], [24, 2], [24, 1], [24, 1], [20, 3], [20, 4], [20, 4], [20, 5], [29, 3], [29, 2], [30, 1], [30, 1], [30, 1], [30, 1], [49, 3], [49, 2], [49, 2], [49, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [58, 1], [58, 1], [26, 3], [26, 4], [26, 3], [26, 4], [26, 4], [26, 5], [26, 3], [26, 4], [26, 4], [26, 5], [26, 4], [26, 5], [26, 5], [26, 6], [27, 3], [28, 3], [75, 1], [75, 3], [77, 1], [77, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [86, 1], [86, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [89, 1], [89, 1], [89, 1], [89, 1], [16, 1], [16, 1], [16, 1], [16, 1], [18, 1], [51, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 8: + this.$ = $$[$0 - 1]; + break; + case 9: + case 11: + case 12: + this.$ = $$[$0]; + break; + case 10: + case 13: + this.$ = $$[$0 - 1] + $$[$0]; + break; + case 14: + case 15: + this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; + break; + case 16: + yy.addRelation($$[$0]); + break; + case 17: + $$[$0 - 1].title = yy.cleanupLabel($$[$0]); + yy.addRelation($$[$0 - 1]); + break; + case 27: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 28: + case 29: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 30: + yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); + break; + case 31: + yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); + break; + case 32: + this.$ = $$[$0]; + yy.addNamespace($$[$0]); + break; + case 33: + this.$ = [$$[$0]]; + break; + case 34: + this.$ = [$$[$0 - 1]]; + break; + case 35: + $$[$0].unshift($$[$0 - 2]); + this.$ = $$[$0]; + break; + case 37: + yy.setCssClass($$[$0 - 2], $$[$0]); + break; + case 38: + yy.addMembers($$[$0 - 3], $$[$0 - 1]); + break; + case 39: + yy.setCssClass($$[$0 - 5], $$[$0 - 3]); + yy.addMembers($$[$0 - 5], $$[$0 - 1]); + break; + case 40: + this.$ = $$[$0]; + yy.addClass($$[$0]); + break; + case 41: + this.$ = $$[$0 - 1]; + yy.addClass($$[$0 - 1]); + yy.setClassLabel($$[$0 - 1], $$[$0]); + break; + case 42: + yy.addAnnotation($$[$0], $$[$0 - 2]); + break; + case 43: + this.$ = [$$[$0]]; + break; + case 44: + $$[$0].push($$[$0 - 1]); + this.$ = $$[$0]; + break; + case 45: + break; + case 46: + yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); + break; + case 47: + break; + case 48: + break; + case 49: + this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; + break; + case 50: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; + break; + case 51: + this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; + break; + case 52: + this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; + break; + case 53: + yy.addNote($$[$0], $$[$0 - 1]); + break; + case 54: + yy.addNote($$[$0]); + break; + case 55: + yy.setDirection("TB"); + break; + case 56: + yy.setDirection("BT"); + break; + case 57: + yy.setDirection("RL"); + break; + case 58: + yy.setDirection("LR"); + break; + case 59: + this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 60: + this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; + break; + case 61: + this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; + break; + case 62: + this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; + break; + case 63: + this.$ = yy.relationType.AGGREGATION; + break; + case 64: + this.$ = yy.relationType.EXTENSION; + break; + case 65: + this.$ = yy.relationType.COMPOSITION; + break; + case 66: + this.$ = yy.relationType.DEPENDENCY; + break; + case 67: + this.$ = yy.relationType.LOLLIPOP; + break; + case 68: + this.$ = yy.lineType.LINE; + break; + case 69: + this.$ = yy.lineType.DOTTED_LINE; + break; + case 70: + case 76: + this.$ = $$[$0 - 2]; + yy.setClickEvent($$[$0 - 1], $$[$0]); + break; + case 71: + case 77: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 72: + this.$ = $$[$0 - 2]; + yy.setLink($$[$0 - 1], $$[$0]); + break; + case 73: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 74: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 2], $$[$0]); + break; + case 75: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 3], $$[$0 - 1]); + break; + case 78: + this.$ = $$[$0 - 3]; + yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 79: + this.$ = $$[$0 - 4]; + yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 80: + this.$ = $$[$0 - 3]; + yy.setLink($$[$0 - 2], $$[$0]); + break; + case 81: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 82: + this.$ = $$[$0 - 4]; + yy.setLink($$[$0 - 3], $$[$0 - 1]); + yy.setTooltip($$[$0 - 3], $$[$0]); + break; + case 83: + this.$ = $$[$0 - 5]; + yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); + yy.setTooltip($$[$0 - 4], $$[$0 - 1]); + break; + case 84: + this.$ = $$[$0 - 2]; + yy.setCssStyle($$[$0 - 1], $$[$0]); + break; + case 85: + yy.setCssClass($$[$0 - 1], $$[$0]); + break; + case 86: + this.$ = [$$[$0]]; + break; + case 87: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 89: + this.$ = $$[$0 - 1] + $$[$0]; + break; + } + }, + table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vo, [2, 5], { 8: [1, 46] }), { 8: [1, 47] }, o($Vp, [2, 16], { 21: [1, 48] }), o($Vp, [2, 18]), o($Vp, [2, 19]), o($Vp, [2, 20]), o($Vp, [2, 21]), o($Vp, [2, 22]), o($Vp, [2, 23]), o($Vp, [2, 24]), o($Vp, [2, 25]), o($Vp, [2, 26]), { 32: [1, 49] }, { 34: [1, 50] }, o($Vp, [2, 29]), o($Vp, [2, 45], { 49: 51, 57: 54, 58: 55, 13: [1, 52], 21: [1, 53], 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }), { 37: [1, 63] }, o($Vx, [2, 36], { 37: [1, 65], 42: [1, 64] }), o($Vp, [2, 47]), o($Vp, [2, 48]), { 16: 66, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 67, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 68, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 69, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 74: [1, 70] }, { 13: [1, 71] }, { 16: 37, 17: 72, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: $Vy, 51: 73 }, o($Vp, [2, 55]), o($Vp, [2, 56]), o($Vp, [2, 57]), o($Vp, [2, 58]), o($Vz, [2, 11], { 16: 37, 18: 38, 17: 75, 19: [1, 76], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), o($Vz, [2, 12], { 19: [1, 77] }), { 15: 78, 16: 79, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 80, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VA, [2, 112]), o($VA, [2, 113]), o($VA, [2, 114]), o($VA, [2, 115]), o([1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], [2, 116]), o($Vo, [2, 6], { 10: 5, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 17: 20, 36: 21, 41: 22, 16: 37, 18: 38, 5: 81, 31: $V0, 33: $V1, 35: $V2, 40: $V3, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), { 5: 82, 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 17]), o($Vp, [2, 27]), o($Vp, [2, 28]), { 13: [1, 84], 16: 37, 17: 83, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 49: 85, 57: 54, 58: 55, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }, o($Vp, [2, 46]), { 58: 86, 64: $Vv, 65: $Vw }, o($VB, [2, 62], { 57: 87, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VD, [2, 68]), o($VD, [2, 69]), { 8: [1, 89], 23: 90, 38: 88, 41: 22, 44: $V4 }, { 16: 91, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 43: 92, 47: $VE }, { 46: [1, 94] }, { 13: [1, 95] }, { 13: [1, 96] }, { 70: [1, 97], 72: [1, 98] }, { 21: $VF, 73: $VG, 74: $VH, 75: 99, 77: 100, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, { 74: [1, 111] }, { 13: $Vy, 51: 112 }, o($Vp, [2, 54]), o($Vp, [2, 117]), o($Vz, [2, 13]), o($Vz, [2, 14]), o($Vz, [2, 15]), { 37: [2, 32] }, { 15: 113, 16: 79, 37: [2, 9], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, o($VO, [2, 40], { 11: 114, 12: [1, 115] }), o($Vo, [2, 7]), { 9: [1, 116] }, o($VP, [2, 49]), { 16: 37, 17: 117, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: [1, 119], 16: 37, 17: 118, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 61], { 57: 120, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VB, [2, 60]), { 39: [1, 121] }, { 23: 90, 38: 122, 41: 22, 44: $V4 }, { 8: [1, 123], 39: [2, 33] }, o($Vx, [2, 37], { 37: [1, 124] }), { 39: [1, 125] }, { 39: [2, 43], 43: 126, 47: $VE }, { 16: 37, 17: 127, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 70], { 13: [1, 128] }), o($Vp, [2, 72], { 13: [1, 130], 68: [1, 129] }), o($Vp, [2, 76], { 13: [1, 131], 71: [1, 132] }), { 13: [1, 133] }, o($Vp, [2, 84], { 78: [1, 134] }), o($VQ, [2, 86], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VR, [2, 88]), o($VR, [2, 90]), o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 93]), o($VR, [2, 94]), o($VR, [2, 95]), o($VR, [2, 96]), o($VR, [2, 97]), o($VR, [2, 98]), o($Vp, [2, 85]), o($Vp, [2, 53]), { 37: [2, 10] }, o($VO, [2, 41]), { 13: [1, 136] }, { 1: [2, 4] }, o($VP, [2, 51]), o($VP, [2, 50]), { 16: 37, 17: 137, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 59]), o($Vp, [2, 30]), { 39: [1, 138] }, { 23: 90, 38: 139, 39: [2, 34], 41: 22, 44: $V4 }, { 43: 140, 47: $VE }, o($Vx, [2, 38]), { 39: [2, 44] }, o($Vp, [2, 42]), o($Vp, [2, 71]), o($Vp, [2, 73]), o($Vp, [2, 74], { 68: [1, 141] }), o($Vp, [2, 77]), o($Vp, [2, 78], { 13: [1, 142] }), o($Vp, [2, 80], { 13: [1, 144], 68: [1, 143] }), { 21: $VF, 73: $VG, 74: $VH, 77: 145, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, o($VR, [2, 89]), { 14: [1, 146] }, o($VP, [2, 52]), o($Vp, [2, 31]), { 39: [2, 35] }, { 39: [1, 147] }, o($Vp, [2, 75]), o($Vp, [2, 79]), o($Vp, [2, 81]), o($Vp, [2, 82], { 68: [1, 148] }), o($VQ, [2, 87], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VO, [2, 8]), o($Vx, [2, 39]), o($Vp, [2, 83])], + defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 78: [2, 32], 113: [2, 10], 116: [2, 4], 126: [2, 44], 139: [2, 35] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return 53; + case 1: + return 54; + case 2: + return 55; + case 3: + return 56; + case 4: + break; + case 5: + break; + case 6: + this.begin("acc_title"); + return 31; + case 7: + this.popState(); + return "acc_title_value"; + case 8: + this.begin("acc_descr"); + return 33; + case 9: + this.popState(); + return "acc_descr_value"; + case 10: + this.begin("acc_descr_multiline"); + break; + case 11: + this.popState(); + break; + case 12: + return "acc_descr_multiline_value"; + case 13: + return 8; + case 14: + break; + case 15: + return 7; + case 16: + return 7; + case 17: + return "EDGE_STATE"; + case 18: + this.begin("callback_name"); + break; + case 19: + this.popState(); + break; + case 20: + this.popState(); + this.begin("callback_args"); + break; + case 21: + return 70; + case 22: + this.popState(); + break; + case 23: + return 71; + case 24: + this.popState(); + break; + case 25: + return "STR"; + case 26: + this.begin("string"); + break; + case 27: + return 73; + case 28: + this.begin("namespace"); + return 40; + case 29: + this.popState(); + return 8; + case 30: + break; + case 31: + this.begin("namespace-body"); + return 37; + case 32: + this.popState(); + return 39; + case 33: + return "EOF_IN_STRUCT"; + case 34: + return 8; + case 35: + break; + case 36: + return "EDGE_STATE"; + case 37: + this.begin("class"); + return 44; + case 38: + this.popState(); + return 8; + case 39: + break; + case 40: + this.popState(); + this.popState(); + return 39; + case 41: + this.begin("class-body"); + return 37; + case 42: + this.popState(); + return 39; + case 43: + return "EOF_IN_STRUCT"; + case 44: + return "EDGE_STATE"; + case 45: + return "OPEN_IN_STRUCT"; + case 46: + break; + case 47: + return "MEMBER"; + case 48: + return 76; + case 49: + return 66; + case 50: + return 67; + case 51: + return 69; + case 52: + return 50; + case 53: + return 52; + case 54: + return 45; + case 55: + return 46; + case 56: + return 72; + case 57: + this.popState(); + break; + case 58: + return "GENERICTYPE"; + case 59: + this.begin("generic"); + break; + case 60: + this.popState(); + break; + case 61: + return "BQUOTE_STR"; + case 62: + this.begin("bqstring"); + break; + case 63: + return 68; + case 64: + return 68; + case 65: + return 68; + case 66: + return 68; + case 67: + return 60; + case 68: + return 60; + case 69: + return 62; + case 70: + return 62; + case 71: + return 61; + case 72: + return 59; + case 73: + return 63; + case 74: + return 64; + case 75: + return 65; + case 76: + return 21; + case 77: + return 42; + case 78: + return 95; + case 79: + return "DOT"; + case 80: + return "PLUS"; + case 81: + return 81; + case 82: + return 78; + case 83: + return 84; + case 84: + return 84; + case 85: + return 85; + case 86: + return "EQUALS"; + case 87: + return "EQUALS"; + case 88: + return 74; + case 89: + return 12; + case 90: + return 14; + case 91: + return "PUNCTUATION"; + case 92: + return 80; + case 93: + return 97; + case 94: + return 83; + case 95: + return 83; + case 96: + return 9; + } + }, + rules: [/^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:\[\*\])/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:["])/, /^(?:[^"]*)/, /^(?:["])/, /^(?:style\b)/, /^(?:namespace\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:\[\*\])/, /^(?:class\b)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\[\*\])/, /^(?:[{])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:\[)/, /^(?:\])/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:\s)/, /^(?:$)/], + conditions: { "namespace-body": { "rules": [26, 32, 33, 34, 35, 36, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "namespace": { "rules": [26, 28, 29, 30, 31, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class-body": { "rules": [26, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "class": { "rules": [26, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_descr": { "rules": [9, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "acc_title": { "rules": [7, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "href": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "struct": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "generic": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "bqstring": { "rules": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "string": { "rules": [24, 25, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +const visibilityValues = ["#", "+", "~", "-", ""]; +class ClassMember { + constructor(input, memberType) { + this.memberType = memberType; + this.visibility = ""; + this.classifier = ""; + const sanitizedInput = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.d)(input, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + this.parseMember(sanitizedInput); + } + getDisplayDetails() { + let displayText = this.visibility + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.id); + if (this.memberType === "method") { + displayText += `(${(0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.parameters.trim())})`; + if (this.returnType) { + displayText += " : " + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.v)(this.returnType); + } + } + displayText = displayText.trim(); + const cssStyle = this.parseClassifier(); + return { + displayText, + cssStyle + }; + } + parseMember(input) { + let potentialClassifier = ""; + if (this.memberType === "method") { + const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/; + const match = input.match(methodRegEx); + if (match) { + const detectedVisibility = match[1] ? match[1].trim() : ""; + if (visibilityValues.includes(detectedVisibility)) { + this.visibility = detectedVisibility; + } + this.id = match[2].trim(); + this.parameters = match[3] ? match[3].trim() : ""; + potentialClassifier = match[4] ? match[4].trim() : ""; + this.returnType = match[5] ? match[5].trim() : ""; + if (potentialClassifier === "") { + const lastChar = this.returnType.substring(this.returnType.length - 1); + if (lastChar.match(/[$*]/)) { + potentialClassifier = lastChar; + this.returnType = this.returnType.substring(0, this.returnType.length - 1); + } + } + } + } else { + const length = input.length; + const firstChar = input.substring(0, 1); + const lastChar = input.substring(length - 1); + if (visibilityValues.includes(firstChar)) { + this.visibility = firstChar; + } + if (lastChar.match(/[$*]/)) { + potentialClassifier = lastChar; + } + this.id = input.substring( + this.visibility === "" ? 0 : 1, + potentialClassifier === "" ? length : length - 1 + ); + } + this.classifier = potentialClassifier; + } + parseClassifier() { + switch (this.classifier) { + case "*": + return "font-style:italic;"; + case "$": + return "text-decoration:underline;"; + default: + return ""; + } + } +} +const MERMAID_DOM_ID_PREFIX = "classId-"; +let relations = []; +let classes = {}; +let notes = []; +let classCounter = 0; +let namespaces = {}; +let namespaceCounter = 0; +let functions = []; +const sanitizeText = (txt) => _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(txt, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); +const splitClassNameAndType = function(_id) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + let genericType = ""; + let className = id; + if (id.indexOf("~") > 0) { + const split = id.split("~"); + className = sanitizeText(split[0]); + genericType = sanitizeText(split[1]); + } + return { className, type: genericType }; +}; +const setClassLabel = function(_id, label) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + if (label) { + label = sanitizeText(label); + } + const { className } = splitClassNameAndType(id); + classes[className].label = label; +}; +const addClass = function(_id) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const { className, type } = splitClassNameAndType(id); + if (Object.hasOwn(classes, className)) { + return; + } + const name = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(className, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + classes[name] = { + id: name, + type, + label: name, + cssClasses: [], + methods: [], + members: [], + annotations: [], + styles: [], + domId: MERMAID_DOM_ID_PREFIX + name + "-" + classCounter + }; + classCounter++; +}; +const lookUpDomId = function(_id) { + const id = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_id, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + if (id in classes) { + return classes[id].domId; + } + throw new Error("Class not found: " + id); +}; +const clear = function() { + relations = []; + classes = {}; + notes = []; + functions = []; + functions.push(setupToolTips); + namespaces = {}; + namespaceCounter = 0; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.t)(); +}; +const getClass = function(id) { + return classes[id]; +}; +const getClasses = function() { + return classes; +}; +const getRelations = function() { + return relations; +}; +const getNotes = function() { + return notes; +}; +const addRelation = function(relation) { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.l.debug("Adding relation: " + JSON.stringify(relation)); + addClass(relation.id1); + addClass(relation.id2); + relation.id1 = splitClassNameAndType(relation.id1).className; + relation.id2 = splitClassNameAndType(relation.id2).className; + relation.relationTitle1 = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle1.trim(), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relation.relationTitle2 = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(relation.relationTitle2.trim(), (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + relations.push(relation); +}; +const addAnnotation = function(className, annotation) { + const validatedClassName = splitClassNameAndType(className).className; + classes[validatedClassName].annotations.push(annotation); +}; +const addMember = function(className, member) { + addClass(className); + const validatedClassName = splitClassNameAndType(className).className; + const theClass = classes[validatedClassName]; + if (typeof member === "string") { + const memberString = member.trim(); + if (memberString.startsWith("<<") && memberString.endsWith(">>")) { + theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2))); + } else if (memberString.indexOf(")") > 0) { + theClass.methods.push(new ClassMember(memberString, "method")); + } else if (memberString) { + theClass.members.push(new ClassMember(memberString, "attribute")); + } + } +}; +const addMembers = function(className, members) { + if (Array.isArray(members)) { + members.reverse(); + members.forEach((member) => addMember(className, member)); + } +}; +const addNote = function(text, className) { + const note = { + id: `note${notes.length}`, + class: className, + text + }; + notes.push(note); +}; +const cleanupLabel = function(label) { + if (label.startsWith(":")) { + label = label.substring(1); + } + return sanitizeText(label.trim()); +}; +const setCssClass = function(ids, className) { + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].cssClasses.push(className); + } + }); +}; +const setTooltip = function(ids, tooltip) { + ids.split(",").forEach(function(id) { + if (tooltip !== void 0) { + classes[id].tooltip = sanitizeText(tooltip); + } + }); +}; +const getTooltip = function(id, namespace) { + if (namespace) { + return namespaces[namespace].classes[id].tooltip; + } + return classes[id].tooltip; +}; +const setLink = function(ids, linkStr, target) { + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + ids.split(",").forEach(function(_id) { + let id = _id; + if (_id[0].match(/\d/)) { + id = MERMAID_DOM_ID_PREFIX + id; + } + if (classes[id] !== void 0) { + classes[id].link = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.formatUrl(linkStr, config); + if (config.securityLevel === "sandbox") { + classes[id].linkTarget = "_top"; + } else if (typeof target === "string") { + classes[id].linkTarget = sanitizeText(target); + } else { + classes[id].linkTarget = "_blank"; + } + } + }); + setCssClass(ids, "clickable"); +}; +const setClickEvent = function(ids, functionName, functionArgs) { + ids.split(",").forEach(function(id) { + setClickFunc(id, functionName, functionArgs); + classes[id].haveCallback = true; + }); + setCssClass(ids, "clickable"); +}; +const setClickFunc = function(_domId, functionName, functionArgs) { + const domId = _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.e.sanitizeText(_domId, (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)()); + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)(); + if (config.securityLevel !== "loose") { + return; + } + if (functionName === void 0) { + return; + } + const id = domId; + if (classes[id] !== void 0) { + const elemId = lookUpDomId(id); + let argList = []; + if (typeof functionArgs === "string") { + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + if (argList.length === 0) { + argList.push(elemId); + } + functions.push(function() { + const elem = document.querySelector(`[id="${elemId}"]`); + if (elem !== null) { + elem.addEventListener( + "click", + function() { + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.u.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } +}; +const bindFunctions = function(element) { + functions.forEach(function(fun) { + fun(element); + }); +}; +const lineType = { + LINE: 0, + DOTTED_LINE: 1 +}; +const relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + LOLLIPOP: 4 +}; +const setupToolTips = function(element) { + let tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(".mermaidTooltip"); + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + tooltipElem = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); + } + const svg = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(element).select("svg"); + const nodes = svg.selectAll("g.node"); + nodes.on("mouseover", function() { + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + const title = el.attr("title"); + if (title === null) { + return; + } + const rect = this.getBoundingClientRect(); + tooltipElem.transition().duration(200).style("opacity", ".9"); + tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect.left + (rect.right - rect.left) / 2 + "px").style("top", window.scrollY + rect.top - 14 + document.body.scrollTop + "px"); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>")); + el.classed("hover", true); + }).on("mouseout", function() { + tooltipElem.transition().duration(500).style("opacity", 0); + const el = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(this); + el.classed("hover", false); + }); +}; +functions.push(setupToolTips); +let direction = "TB"; +const getDirection = () => direction; +const setDirection = (dir) => { + direction = dir; +}; +const addNamespace = function(id) { + if (namespaces[id] !== void 0) { + return; + } + namespaces[id] = { + id, + classes: {}, + children: {}, + domId: MERMAID_DOM_ID_PREFIX + id + "-" + namespaceCounter + }; + namespaceCounter++; +}; +const getNamespace = function(name) { + return namespaces[name]; +}; +const getNamespaces = function() { + return namespaces; +}; +const addClassesToNamespace = function(id, classNames) { + if (namespaces[id] === void 0) { + return; + } + for (const name of classNames) { + const { className } = splitClassNameAndType(name); + classes[className].parent = id; + namespaces[id].classes[className] = classes[className]; + } +}; +const setCssStyle = function(id, styles2) { + const thisClass = classes[id]; + if (!styles2 || !thisClass) { + return; + } + for (const s of styles2) { + if (s.includes(",")) { + thisClass.styles.push(...s.split(",")); + } else { + thisClass.styles.push(s); + } + } +}; +const db = { + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.g, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.b, + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.c)().class, + addClass, + bindFunctions, + clear, + getClass, + getClasses, + getNotes, + addAnnotation, + addNote, + getRelations, + addRelation, + getDirection, + setDirection, + addMember, + addMembers, + cleanupLabel, + lineType, + relationType, + setClickEvent, + setCssClass, + setLink, + getTooltip, + setTooltip, + lookUpDomId, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_1__.r, + setClassLabel, + addNamespace, + addClassesToNamespace, + getNamespace, + getNamespaces, + setCssStyle +}; +const getStyles = (options) => `g.classGroup text { + fill: ${options.nodeBorder || options.classText}; + stroke: none; + font-family: ${options.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${options.classText}; +} +.edgeLabel .label rect { + fill: ${options.mainBkg}; +} +.label text { + fill: ${options.classText}; +} +.edgeLabel .label span { + background: ${options.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${options.mainBkg}; + stroke: ${options.nodeBorder}; +} + +g.classGroup line { + stroke: ${options.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${options.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${options.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${options.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${options.lineColor} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${options.mainBkg} !important; + stroke: ${options.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${options.textColor}; +} +`; +const styles = getStyles; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/96533a10.c15c51f0.js b/assets/js/96533a10.c15c51f0.js new file mode 100644 index 0000000000..adbe9cc98c --- /dev/null +++ b/assets/js/96533a10.c15c51f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2484],{99279:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>o});var t=a(85893),s=a(11151);const i={slug:"v8.10-release",title:"v8.10 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},c="eCalc",r={id:"changelog/v8-10",title:"v8.10 (Latest)",description:"New Features",source:"@site/docs/changelog/v8-10.md",sourceDirName:"changelog",slug:"/changelog/v8.10-release",permalink:"/ecalc/docs/changelog/v8.10-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-10.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:0,frontMatter:{slug:"v8.10-release",title:"v8.10 (Latest)",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:0},sidebar:"changelog",next:{title:"v8.8",permalink:"/ecalc/docs/changelog/v8.8-release"}},l={},o=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,t.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,t.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Make sure that maximum standard rate calculations takes a potential maximum power constraint into account for single speed compressor trains and variable speed compressor trains."}),"\n",(0,t.jsx)(n.li,{children:"is_valid in json now contains booleans (integers in v8.8)"}),"\n",(0,t.jsxs)(n.li,{children:["energy_usage_unit and power_unit no longer in csv, json. The unit is still available in the csv header, and as the ",(0,t.jsx)(n.code,{children:"unit"})," property in json (inside ",(0,t.jsx)(n.code,{children:"energy_usage"})," and ",(0,t.jsx)(n.code,{children:"power"})," ++)"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>c});var t=a(67294);const s={},i=t.createContext(s);function c(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/966.e26e751e.js b/assets/js/966.e26e751e.js new file mode 100644 index 0000000000..5660445be7 --- /dev/null +++ b/assets/js/966.e26e751e.js @@ -0,0 +1,14570 @@ +"use strict"; +exports.id = 966; +exports.ids = [966]; +exports.modules = { + +/***/ 39164: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + a: () => (/* binding */ createText), + c: () => (/* binding */ computeDimensionOfText) +}); + +// NAMESPACE OBJECT: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +var constructs_namespaceObject = {}; +__webpack_require__.r(constructs_namespaceObject); +__webpack_require__.d(constructs_namespaceObject, { + attentionMarkers: () => (attentionMarkers), + contentInitial: () => (contentInitial), + disable: () => (disable), + document: () => (constructs_document), + flow: () => (constructs_flow), + flowInitial: () => (flowInitial), + insideSpan: () => (insideSpan), + string: () => (constructs_string), + text: () => (constructs_text) +}); + +// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-0603ccf8.js + 8 modules +var mermaid_0603ccf8 = __webpack_require__(28758); +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-to-string/lib/index.js +/** + * @typedef {import('mdast').Root|import('mdast').Content} Node + * + * @typedef Options + * Configuration (optional). + * @property {boolean | null | undefined} [includeImageAlt=true] + * Whether to use `alt` for `image`s. + * @property {boolean | null | undefined} [includeHtml=true] + * Whether to use `value` of HTML. + */ + +/** @type {Options} */ +const emptyOptions = {} + +/** + * Get the text content of a node or list of nodes. + * + * Prefers the node’s plain-text fields, otherwise serializes its children, + * and if the given value is an array, serialize the nodes in it. + * + * @param {unknown} value + * Thing to serialize, typically `Node`. + * @param {Options | null | undefined} [options] + * Configuration (optional). + * @returns {string} + * Serialized `value`. + */ +function lib_toString(value, options) { + const settings = options || emptyOptions + const includeImageAlt = + typeof settings.includeImageAlt === 'boolean' + ? settings.includeImageAlt + : true + const includeHtml = + typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true + + return one(value, includeImageAlt, includeHtml) +} + +/** + * One node or several nodes. + * + * @param {unknown} value + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized node. + */ +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { + if ('value' in value) { + return value.type === 'html' && !includeHtml ? '' : value.value + } + + if (includeImageAlt && 'alt' in value && value.alt) { + return value.alt + } + + if ('children' in value) { + return lib_all(value.children, includeImageAlt, includeHtml) + } + } + + if (Array.isArray(value)) { + return lib_all(value, includeImageAlt, includeHtml) + } + + return '' +} + +/** + * Serialize a list of nodes. + * + * @param {Array<unknown>} values + * Thing to serialize. + * @param {boolean} includeImageAlt + * Include image `alt`s. + * @param {boolean} includeHtml + * Include HTML. + * @returns {string} + * Serialized nodes. + */ +function lib_all(values, includeImageAlt, includeHtml) { + /** @type {Array<string>} */ + const result = [] + let index = -1 + + while (++index < values.length) { + result[index] = one(values[index], includeImageAlt, includeHtml) + } + + return result.join('') +} + +/** + * Check if `value` looks like a node. + * + * @param {unknown} value + * Thing. + * @returns {value is Node} + * Whether `value` is a node. + */ +function node(value) { + return Boolean(value && typeof value === 'object') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-chunked/index.js +/** + * Like `Array#splice`, but smarter for giant arrays. + * + * `Array#splice` takes all items to be inserted as individual argument which + * causes a stack overflow in V8 when trying to insert 100k items for instance. + * + * Otherwise, this does not return the removed items, and takes `items` as an + * array instead of rest parameters. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {number} start + * Index to remove/insert at (can be negative). + * @param {number} remove + * Number of items to remove. + * @param {Array<T>} items + * Items to inject into `list`. + * @returns {void} + * Nothing. + */ +function splice(list, start, remove, items) { + const end = list.length + let chunkStart = 0 + /** @type {Array<unknown>} */ + let parameters + + // Make start between zero and `end` (included). + if (start < 0) { + start = -start > end ? 0 : end + start + } else { + start = start > end ? end : start + } + remove = remove > 0 ? remove : 0 + + // No need to chunk the items if there’s only a couple (10k) items. + if (items.length < 10000) { + parameters = Array.from(items) + parameters.unshift(start, remove) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + } else { + // Delete `remove` items starting from `start` + if (remove) list.splice(start, remove) + + // Insert the items in chunks to not cause stack overflows. + while (chunkStart < items.length) { + parameters = items.slice(chunkStart, chunkStart + 10000) + parameters.unshift(start, 0) + // @ts-expect-error Hush, it’s fine. + list.splice(...parameters) + chunkStart += 10000 + start += 10000 + } + } +} + +/** + * Append `items` (an array) at the end of `list` (another array). + * When `list` was empty, returns `items` instead. + * + * This prevents a potentially expensive operation when `list` is empty, + * and adds items in batches to prevent V8 from hanging. + * + * @template {unknown} T + * Item type. + * @param {Array<T>} list + * List to operate on. + * @param {Array<T>} items + * Items to add to `list`. + * @returns {Array<T>} + * Either `list` or `items`. + */ +function push(list, items) { + if (list.length > 0) { + splice(list, list.length, 0, items) + return list + } + return items +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-combine-extensions/index.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + * @typedef {import('micromark-util-types').Handles} Handles + * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension + * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension + */ + + + +const micromark_util_combine_extensions_hasOwnProperty = {}.hasOwnProperty + +/** + * Combine multiple syntax extensions into one. + * + * @param {Array<Extension>} extensions + * List of syntax extensions. + * @returns {NormalizedExtension} + * A single combined extension. + */ +function combineExtensions(extensions) { + /** @type {NormalizedExtension} */ + const all = {} + let index = -1 + + while (++index < extensions.length) { + syntaxExtension(all, extensions[index]) + } + + return all +} + +/** + * Merge `extension` into `all`. + * + * @param {NormalizedExtension} all + * Extension to merge into. + * @param {Extension} extension + * Extension to merge. + * @returns {void} + */ +function syntaxExtension(all, extension) { + /** @type {keyof Extension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + /** @type {Record<string, unknown>} */ + const left = maybe || (all[hook] = {}) + /** @type {Record<string, unknown> | undefined} */ + const right = extension[hook] + /** @type {string} */ + let code + + if (right) { + for (code in right) { + if (!micromark_util_combine_extensions_hasOwnProperty.call(left, code)) left[code] = [] + const value = right[code] + constructs( + // @ts-expect-error Looks like a list. + left[code], + Array.isArray(value) ? value : value ? [value] : [] + ) + } + } + } +} + +/** + * Merge `list` into `existing` (both lists of constructs). + * Mutates `existing`. + * + * @param {Array<unknown>} existing + * @param {Array<unknown>} list + * @returns {void} + */ +function constructs(existing, list) { + let index = -1 + /** @type {Array<unknown>} */ + const before = [] + + while (++index < list.length) { + // @ts-expect-error Looks like an object. + ;(list[index].add === 'after' ? existing : before).push(list[index]) + } + + splice(existing, 0, 0, before) +} + +/** + * Combine multiple HTML extensions into one. + * + * @param {Array<HtmlExtension>} htmlExtensions + * List of HTML extensions. + * @returns {HtmlExtension} + * A single combined HTML extension. + */ +function combineHtmlExtensions(htmlExtensions) { + /** @type {HtmlExtension} */ + const handlers = {} + let index = -1 + + while (++index < htmlExtensions.length) { + htmlExtension(handlers, htmlExtensions[index]) + } + + return handlers +} + +/** + * Merge `extension` into `all`. + * + * @param {HtmlExtension} all + * Extension to merge into. + * @param {HtmlExtension} extension + * Extension to merge. + * @returns {void} + */ +function htmlExtension(all, extension) { + /** @type {keyof HtmlExtension} */ + let hook + + for (hook in extension) { + const maybe = micromark_util_combine_extensions_hasOwnProperty.call(all, hook) ? all[hook] : undefined + const left = maybe || (all[hook] = {}) + const right = extension[hook] + /** @type {keyof Handles} */ + let type + + if (right) { + for (type in right) { + // @ts-expect-error assume document vs regular handler are managed correctly. + left[type] = right[type] + } + } + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/lib/unicode-punctuation-regex.js +// This module is generated by `script/`. +// +// CommonMark handles attention (emphasis, strong) markers based on what comes +// before or after them. +// One such difference is if those characters are Unicode punctuation. +// This script is generated from the Unicode data. + +/** + * Regular expression that matches a unicode punctuation character. + */ +const unicodePunctuationRegex = + /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/ + +;// CONCATENATED MODULE: ./node_modules/micromark-util-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + + +/** + * Check whether the character code represents an ASCII alpha (`a` through `z`, + * case insensitive). + * + * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha. + * + * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`) + * to U+005A (`Z`). + * + * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`) + * to U+007A (`z`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlpha = regexCheck(/[A-Za-z]/) + +/** + * Check whether the character code represents an ASCII alphanumeric (`a` + * through `z`, case insensitive, or `0` through `9`). + * + * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha + * (see `asciiAlpha`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/) + +/** + * Check whether the character code represents an ASCII atext. + * + * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in + * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`), + * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F + * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E + * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE + * (`{`) to U+007E TILDE (`~`). + * + * See: + * **\[RFC5322]**: + * [Internet Message Format](https://tools.ietf.org/html/rfc5322). + * P. Resnick. + * IETF. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/) + +/** + * Check whether a character code is an ASCII control character. + * + * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL) + * to U+001F (US), or U+007F (DEL). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function asciiControl(code) { + return ( + // Special whitespace codes (which have negative values), C0 and Control + // character DEL + code !== null && (code < 32 || code === 127) + ) +} + +/** + * Check whether the character code represents an ASCII digit (`0` through `9`). + * + * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to + * U+0039 (`9`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiDigit = regexCheck(/\d/) + +/** + * Check whether the character code represents an ASCII hex digit (`a` through + * `f`, case insensitive, or `0` through `9`). + * + * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex + * digit, or an ASCII lower hex digit. + * + * An **ASCII upper hex digit** is a character in the inclusive range U+0041 + * (`A`) to U+0046 (`F`). + * + * An **ASCII lower hex digit** is a character in the inclusive range U+0061 + * (`a`) to U+0066 (`f`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiHexDigit = regexCheck(/[\dA-Fa-f]/) + +/** + * Check whether the character code represents ASCII punctuation. + * + * An **ASCII punctuation** is a character in the inclusive ranges U+0021 + * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT + * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT + * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`). + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/) + +/** + * Check whether a character code is a markdown line ending. + * + * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN + * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR). + * + * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE + * RETURN (CR) are replaced by these virtual characters depending on whether + * they occurred together. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEnding(code) { + return code !== null && code < -2 +} + +/** + * Check whether a character code is a markdown line ending (see + * `markdownLineEnding`) or markdown space (see `markdownSpace`). + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownLineEndingOrSpace(code) { + return code !== null && (code < 0 || code === 32) +} + +/** + * Check whether a character code is a markdown space. + * + * A **markdown space** is the concrete character U+0020 SPACE (SP) and the + * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT). + * + * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is + * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL + * SPACE (VS) characters, depending on the column at which the tab occurred. + * + * @param {Code} code + * Code. + * @returns {boolean} + * Whether it matches. + */ +function markdownSpace(code) { + return code === -2 || code === -1 || code === 32 +} + +// Size note: removing ASCII from the regex and using `asciiPunctuation` here +// In fact adds to the bundle size. +/** + * Check whether the character code represents Unicode punctuation. + * + * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation, + * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf` + * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po` + * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII + * punctuation (see `asciiPunctuation`). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodePunctuation = regexCheck(unicodePunctuationRegex) + +/** + * Check whether the character code represents Unicode whitespace. + * + * Note that this does handle micromark specific markdown whitespace characters. + * See `markdownLineEndingOrSpace` to check that. + * + * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator, + * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF), + * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\[UNICODE]**). + * + * See: + * **\[UNICODE]**: + * [The Unicode Standard](https://www.unicode.org/versions/). + * Unicode Consortium. + * + * @param code + * Code. + * @returns + * Whether it matches. + */ +const unicodeWhitespace = regexCheck(/\s/) + +/** + * Create a code check from a regex. + * + * @param {RegExp} regex + * @returns {(code: Code) => boolean} + */ +function regexCheck(regex) { + return check + + /** + * Check whether a code matches the bound regex. + * + * @param {Code} code + * Character code. + * @returns {boolean} + * Whether the character code matches the bound regex. + */ + function check(code) { + return code !== null && regex.test(String.fromCharCode(code)) + } +} + +;// CONCATENATED MODULE: ./node_modules/micromark-factory-space/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`. + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * spaces in markdown are often optional, in which case this factory can be + * used and `ok` will be switched to whether spaces were found or not + * * one line ending or space can be detected with `markdownSpace(code)` right + * before using `factorySpace` + * + * ###### Examples + * + * Where `␉` represents a tab (plus how much it expands) and `␠` represents a + * single space. + * + * ```markdown + * ␉ + * ␠␠␠␠ + * ␉␠ + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {TokenType} type + * Type (`' \t'`). + * @param {number | undefined} [max=Infinity] + * Max (exclusive). + * @returns + * Start state. + */ +function factorySpace(effects, ok, type, max) { + const limit = max ? max - 1 : Number.POSITIVE_INFINITY + let size = 0 + return start + + /** @type {State} */ + function start(code) { + if (markdownSpace(code)) { + effects.enter(type) + return prefix(code) + } + return ok(code) + } + + /** @type {State} */ + function prefix(code) { + if (markdownSpace(code) && size++ < limit) { + effects.consume(code) + return prefix + } + effects.exit(type) + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/content.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + +/** @type {InitialConstruct} */ +const content = { + tokenize: initializeContent +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeContent(effects) { + const contentStart = effects.attempt( + this.parser.constructs.contentInitial, + afterContentStartConstruct, + paragraphInitial + ) + /** @type {Token} */ + let previous + return contentStart + + /** @type {State} */ + function afterContentStartConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, contentStart, 'linePrefix') + } + + /** @type {State} */ + function paragraphInitial(code) { + effects.enter('paragraph') + return lineStart(code) + } + + /** @type {State} */ + function lineStart(code) { + const token = effects.enter('chunkText', { + contentType: 'text', + previous + }) + if (previous) { + previous.next = token + } + previous = token + return data(code) + } + + /** @type {State} */ + function data(code) { + if (code === null) { + effects.exit('chunkText') + effects.exit('paragraph') + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + effects.exit('chunkText') + return lineStart + } + + // Data. + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/document.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + +/** + * @typedef {[Construct, ContainerState]} StackItem + */ + + + + +/** @type {InitialConstruct} */ +const document_document = { + tokenize: initializeDocument +} + +/** @type {Construct} */ +const containerConstruct = { + tokenize: tokenizeContainer +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeDocument(effects) { + const self = this + /** @type {Array<StackItem>} */ + const stack = [] + let continued = 0 + /** @type {TokenizeContext | undefined} */ + let childFlow + /** @type {Token | undefined} */ + let childToken + /** @type {number} */ + let lineStartOffset + return start + + /** @type {State} */ + function start(code) { + // First we iterate through the open blocks, starting with the root + // document, and descending through last children down to the last open + // block. + // Each block imposes a condition that the line must satisfy if the block is + // to remain open. + // For example, a block quote requires a `>` character. + // A paragraph requires a non-blank line. + // In this phase we may match all or just some of the open blocks. + // But we cannot close unmatched blocks yet, because we may have a lazy + // continuation line. + if (continued < stack.length) { + const item = stack[continued] + self.containerState = item[1] + return effects.attempt( + item[0].continuation, + documentContinue, + checkNewContainers + )(code) + } + + // Done. + return checkNewContainers(code) + } + + /** @type {State} */ + function documentContinue(code) { + continued++ + + // Note: this field is called `_closeFlow` but it also closes containers. + // Perhaps a good idea to rename it but it’s already used in the wild by + // extensions. + if (self.containerState._closeFlow) { + self.containerState._closeFlow = undefined + if (childFlow) { + closeFlow() + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when dealing with lazy lines in `writeToChild`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {Point | undefined} */ + let point + + // Find the flow chunk. + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + point = self.events[indexBeforeFlow][1].end + break + } + } + exitContainers(continued) + + // Fix positions. + let index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + return checkNewContainers(code) + } + return start(code) + } + + /** @type {State} */ + function checkNewContainers(code) { + // Next, after consuming the continuation markers for existing blocks, we + // look for new block starts (e.g. `>` for a block quote). + // If we encounter a new block start, we close any blocks unmatched in + // step 1 before creating the new block as a child of the last matched + // block. + if (continued === stack.length) { + // No need to `check` whether there’s a container, of `exitContainers` + // would be moot. + // We can instead immediately `attempt` to parse one. + if (!childFlow) { + return documentContinued(code) + } + + // If we have concrete content, such as block HTML or fenced code, + // we can’t have containers “pierce” into them, so we can immediately + // start. + if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) { + return flowStart(code) + } + + // If we do have flow, it could still be a blank line, + // but we’d be interrupting it w/ a new container if there’s a current + // construct. + // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer + // needed in micromark-extension-gfm-table@1.0.6). + self.interrupt = Boolean( + childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack + ) + } + + // Check if there is a new container. + self.containerState = {} + return effects.check( + containerConstruct, + thereIsANewContainer, + thereIsNoNewContainer + )(code) + } + + /** @type {State} */ + function thereIsANewContainer(code) { + if (childFlow) closeFlow() + exitContainers(continued) + return documentContinued(code) + } + + /** @type {State} */ + function thereIsNoNewContainer(code) { + self.parser.lazy[self.now().line] = continued !== stack.length + lineStartOffset = self.now().offset + return flowStart(code) + } + + /** @type {State} */ + function documentContinued(code) { + // Try new containers. + self.containerState = {} + return effects.attempt( + containerConstruct, + containerContinue, + flowStart + )(code) + } + + /** @type {State} */ + function containerContinue(code) { + continued++ + stack.push([self.currentConstruct, self.containerState]) + // Try another. + return documentContinued(code) + } + + /** @type {State} */ + function flowStart(code) { + if (code === null) { + if (childFlow) closeFlow() + exitContainers(0) + effects.consume(code) + return + } + childFlow = childFlow || self.parser.flow(self.now()) + effects.enter('chunkFlow', { + contentType: 'flow', + previous: childToken, + _tokenizer: childFlow + }) + return flowContinue(code) + } + + /** @type {State} */ + function flowContinue(code) { + if (code === null) { + writeToChild(effects.exit('chunkFlow'), true) + exitContainers(0) + effects.consume(code) + return + } + if (markdownLineEnding(code)) { + effects.consume(code) + writeToChild(effects.exit('chunkFlow')) + // Get ready for the next line. + continued = 0 + self.interrupt = undefined + return start + } + effects.consume(code) + return flowContinue + } + + /** + * @param {Token} token + * @param {boolean | undefined} [eof] + * @returns {void} + */ + function writeToChild(token, eof) { + const stream = self.sliceStream(token) + if (eof) stream.push(null) + token.previous = childToken + if (childToken) childToken.next = token + childToken = token + childFlow.defineSkip(token.start) + childFlow.write(stream) + + // Alright, so we just added a lazy line: + // + // ```markdown + // > a + // b. + // + // Or: + // + // > ~~~c + // d + // + // Or: + // + // > | e | + // f + // ``` + // + // The construct in the second example (fenced code) does not accept lazy + // lines, so it marked itself as done at the end of its first line, and + // then the content construct parses `d`. + // Most constructs in markdown match on the first line: if the first line + // forms a construct, a non-lazy line can’t “unmake” it. + // + // The construct in the third example is potentially a GFM table, and + // those are *weird*. + // It *could* be a table, from the first line, if the following line + // matches a condition. + // In this case, that second line is lazy, which “unmakes” the first line + // and turns the whole into one content block. + // + // We’ve now parsed the non-lazy and the lazy line, and can figure out + // whether the lazy line started a new flow block. + // If it did, we exit the current containers between the two flow blocks. + if (self.parser.lazy[token.start.line]) { + let index = childFlow.events.length + while (index--) { + if ( + // The token starts before the line ending… + childFlow.events[index][1].start.offset < lineStartOffset && + // …and either is not ended yet… + (!childFlow.events[index][1].end || + // …or ends after it. + childFlow.events[index][1].end.offset > lineStartOffset) + ) { + // Exit: there’s still something open, which means it’s a lazy line + // part of something. + return + } + } + + // Note: this algorithm for moving events around is similar to the + // algorithm when closing flow in `documentContinue`. + const indexBeforeExits = self.events.length + let indexBeforeFlow = indexBeforeExits + /** @type {boolean | undefined} */ + let seen + /** @type {Point | undefined} */ + let point + + // Find the previous chunk (the one before the lazy line). + while (indexBeforeFlow--) { + if ( + self.events[indexBeforeFlow][0] === 'exit' && + self.events[indexBeforeFlow][1].type === 'chunkFlow' + ) { + if (seen) { + point = self.events[indexBeforeFlow][1].end + break + } + seen = true + } + } + exitContainers(continued) + + // Fix positions. + index = indexBeforeExits + while (index < self.events.length) { + self.events[index][1].end = Object.assign({}, point) + index++ + } + + // Inject the exits earlier (they’re still also at the end). + splice( + self.events, + indexBeforeFlow + 1, + 0, + self.events.slice(indexBeforeExits) + ) + + // Discard the duplicate exits. + self.events.length = index + } + } + + /** + * @param {number} size + * @returns {void} + */ + function exitContainers(size) { + let index = stack.length + + // Exit open containers. + while (index-- > size) { + const entry = stack[index] + self.containerState = entry[1] + entry[0].exit.call(self, effects) + } + stack.length = size + } + function closeFlow() { + childFlow.write([null]) + childToken = undefined + childFlow = undefined + self.containerState._closeFlow = undefined + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContainer(effects, ok, nok) { + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(this.parser.constructs.document, ok, nok), + 'linePrefix', + this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/blank-line.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blankLine = { + tokenize: tokenizeBlankLine, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLine(effects, ok, nok) { + return start + + /** + * Start of blank line. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + return markdownSpace(code) + ? factorySpace(effects, after, 'linePrefix')(code) + : after(code) + } + + /** + * At eof/eol, after optional whitespace. + * + * > 👉 **Note**: `␠` represents a space character. + * + * ```markdown + * > | ␠␠␊ + * ^ + * > | ␊ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-subtokenize/index.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Token} Token + */ + + +/** + * Tokenize subcontent. + * + * @param {Array<Event>} events + * List of events. + * @returns {boolean} + * Whether subtokens were found. + */ +function subtokenize(events) { + /** @type {Record<string, number>} */ + const jumps = {} + let index = -1 + /** @type {Event} */ + let event + /** @type {number | undefined} */ + let lineIndex + /** @type {number} */ + let otherIndex + /** @type {Event} */ + let otherEvent + /** @type {Array<Event>} */ + let parameters + /** @type {Array<Event>} */ + let subevents + /** @type {boolean | undefined} */ + let more + while (++index < events.length) { + while (index in jumps) { + index = jumps[index] + } + event = events[index] + + // Add a hook for the GFM tasklist extension, which needs to know if text + // is in the first content of a list item. + if ( + index && + event[1].type === 'chunkFlow' && + events[index - 1][1].type === 'listItemPrefix' + ) { + subevents = event[1]._tokenizer.events + otherIndex = 0 + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'lineEndingBlank' + ) { + otherIndex += 2 + } + if ( + otherIndex < subevents.length && + subevents[otherIndex][1].type === 'content' + ) { + while (++otherIndex < subevents.length) { + if (subevents[otherIndex][1].type === 'content') { + break + } + if (subevents[otherIndex][1].type === 'chunkText') { + subevents[otherIndex][1]._isInFirstContentOfListItem = true + otherIndex++ + } + } + } + } + + // Enter. + if (event[0] === 'enter') { + if (event[1].contentType) { + Object.assign(jumps, subcontent(events, index)) + index = jumps[index] + more = true + } + } + // Exit. + else if (event[1]._container) { + otherIndex = index + lineIndex = undefined + while (otherIndex--) { + otherEvent = events[otherIndex] + if ( + otherEvent[1].type === 'lineEnding' || + otherEvent[1].type === 'lineEndingBlank' + ) { + if (otherEvent[0] === 'enter') { + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + } + otherEvent[1].type = 'lineEnding' + lineIndex = otherIndex + } + } else { + break + } + } + if (lineIndex) { + // Fix position. + event[1].end = Object.assign({}, events[lineIndex][1].start) + + // Switch container exit w/ line endings. + parameters = events.slice(lineIndex, index) + parameters.unshift(event) + splice(events, lineIndex, index - lineIndex + 1, parameters) + } + } + } + return !more +} + +/** + * Tokenize embedded tokens. + * + * @param {Array<Event>} events + * @param {number} eventIndex + * @returns {Record<string, number>} + */ +function subcontent(events, eventIndex) { + const token = events[eventIndex][1] + const context = events[eventIndex][2] + let startPosition = eventIndex - 1 + /** @type {Array<number>} */ + const startPositions = [] + const tokenizer = + token._tokenizer || context.parser[token.contentType](token.start) + const childEvents = tokenizer.events + /** @type {Array<[number, number]>} */ + const jumps = [] + /** @type {Record<string, number>} */ + const gaps = {} + /** @type {Array<Chunk>} */ + let stream + /** @type {Token | undefined} */ + let previous + let index = -1 + /** @type {Token | undefined} */ + let current = token + let adjust = 0 + let start = 0 + const breaks = [start] + + // Loop forward through the linked tokens to pass them in order to the + // subtokenizer. + while (current) { + // Find the position of the event for this token. + while (events[++startPosition][1] !== current) { + // Empty. + } + startPositions.push(startPosition) + if (!current._tokenizer) { + stream = context.sliceStream(current) + if (!current.next) { + stream.push(null) + } + if (previous) { + tokenizer.defineSkip(current.start) + } + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = true + } + tokenizer.write(stream) + if (current._isInFirstContentOfListItem) { + tokenizer._gfmTasklistFirstContentOfListItem = undefined + } + } + + // Unravel the next token. + previous = current + current = current.next + } + + // Now, loop back through all events (and linked tokens), to figure out which + // parts belong where. + current = token + while (++index < childEvents.length) { + if ( + // Find a void token that includes a break. + childEvents[index][0] === 'exit' && + childEvents[index - 1][0] === 'enter' && + childEvents[index][1].type === childEvents[index - 1][1].type && + childEvents[index][1].start.line !== childEvents[index][1].end.line + ) { + start = index + 1 + breaks.push(start) + // Help GC. + current._tokenizer = undefined + current.previous = undefined + current = current.next + } + } + + // Help GC. + tokenizer.events = [] + + // If there’s one more token (which is the cases for lines that end in an + // EOF), that’s perfect: the last point we found starts it. + // If there isn’t then make sure any remaining content is added to it. + if (current) { + // Help GC. + current._tokenizer = undefined + current.previous = undefined + } else { + breaks.pop() + } + + // Now splice the events from the subtokenizer into the current events, + // moving back to front so that splice indices aren’t affected. + index = breaks.length + while (index--) { + const slice = childEvents.slice(breaks[index], breaks[index + 1]) + const start = startPositions.pop() + jumps.unshift([start, start + slice.length - 1]) + splice(events, start, 2, slice) + } + index = -1 + while (++index < jumps.length) { + gaps[adjust + jumps[index][0]] = adjust + jumps[index][1] + adjust += jumps[index][1] - jumps[index][0] - 1 + } + return gaps +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/content.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** + * No name because it must not be turned off. + * @type {Construct} + */ +const content_content = { + tokenize: tokenizeContent, + resolve: resolveContent +} + +/** @type {Construct} */ +const continuationConstruct = { + tokenize: tokenizeContinuation, + partial: true +} + +/** + * Content is transparent: it’s parsed right now. That way, definitions are also + * parsed right now: before text in paragraphs (specifically, media) are parsed. + * + * @type {Resolver} + */ +function resolveContent(events) { + subtokenize(events) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContent(effects, ok) { + /** @type {Token | undefined} */ + let previous + return chunkStart + + /** + * Before a content chunk. + * + * ```markdown + * > | abc + * ^ + * ``` + * + * @type {State} + */ + function chunkStart(code) { + effects.enter('content') + previous = effects.enter('chunkContent', { + contentType: 'content' + }) + return chunkInside(code) + } + + /** + * In a content chunk. + * + * ```markdown + * > | abc + * ^^^ + * ``` + * + * @type {State} + */ + function chunkInside(code) { + if (code === null) { + return contentEnd(code) + } + + // To do: in `markdown-rs`, each line is parsed on its own, and everything + // is stitched together resolving. + if (markdownLineEnding(code)) { + return effects.check( + continuationConstruct, + contentContinue, + contentEnd + )(code) + } + + // Data. + effects.consume(code) + return chunkInside + } + + /** + * + * + * @type {State} + */ + function contentEnd(code) { + effects.exit('chunkContent') + effects.exit('content') + return ok(code) + } + + /** + * + * + * @type {State} + */ + function contentContinue(code) { + effects.consume(code) + effects.exit('chunkContent') + previous.next = effects.enter('chunkContent', { + contentType: 'content', + previous + }) + previous = previous.next + return chunkInside + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeContinuation(effects, ok, nok) { + const self = this + return startLookahead + + /** + * + * + * @type {State} + */ + function startLookahead(code) { + effects.exit('chunkContent') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, prefixed, 'linePrefix') + } + + /** + * + * + * @type {State} + */ + function prefixed(code) { + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + + // Always populated by defaults. + + const tail = self.events[self.events.length - 1] + if ( + !self.parser.constructs.disable.null.includes('codeIndented') && + tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ) { + return ok(code) + } + return effects.interrupt(self.parser.constructs.flow, nok, ok)(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/flow.js +/** + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + + + + +/** @type {InitialConstruct} */ +const flow = { + tokenize: initializeFlow +} + +/** + * @this {TokenizeContext} + * @type {Initializer} + */ +function initializeFlow(effects) { + const self = this + const initial = effects.attempt( + // Try to parse a blank line. + blankLine, + atBlankEnding, + // Try to parse initial flow (essentially, only code). + effects.attempt( + this.parser.constructs.flowInitial, + afterConstruct, + factorySpace( + effects, + effects.attempt( + this.parser.constructs.flow, + afterConstruct, + effects.attempt(content_content, afterConstruct) + ), + 'linePrefix' + ) + ) + ) + return initial + + /** @type {State} */ + function atBlankEnding(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEndingBlank') + effects.consume(code) + effects.exit('lineEndingBlank') + self.currentConstruct = undefined + return initial + } + + /** @type {State} */ + function afterConstruct(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + self.currentConstruct = undefined + return initial + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/initialize/text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').Initializer} Initializer + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +const resolver = { + resolveAll: createResolver() +} +const string = initializeFactory('string') +const text_text = initializeFactory('text') + +/** + * @param {'string' | 'text'} field + * @returns {InitialConstruct} + */ +function initializeFactory(field) { + return { + tokenize: initializeText, + resolveAll: createResolver( + field === 'text' ? resolveAllLineSuffixes : undefined + ) + } + + /** + * @this {TokenizeContext} + * @type {Initializer} + */ + function initializeText(effects) { + const self = this + const constructs = this.parser.constructs[field] + const text = effects.attempt(constructs, start, notText) + return start + + /** @type {State} */ + function start(code) { + return atBreak(code) ? text(code) : notText(code) + } + + /** @type {State} */ + function notText(code) { + if (code === null) { + effects.consume(code) + return + } + effects.enter('data') + effects.consume(code) + return data + } + + /** @type {State} */ + function data(code) { + if (atBreak(code)) { + effects.exit('data') + return text(code) + } + + // Data. + effects.consume(code) + return data + } + + /** + * @param {Code} code + * @returns {boolean} + */ + function atBreak(code) { + if (code === null) { + return true + } + const list = constructs[code] + let index = -1 + if (list) { + // Always populated by defaults. + + while (++index < list.length) { + const item = list[index] + if (!item.previous || item.previous.call(self, self.previous)) { + return true + } + } + } + return false + } + } +} + +/** + * @param {Resolver | undefined} [extraResolver] + * @returns {Resolver} + */ +function createResolver(extraResolver) { + return resolveAllText + + /** @type {Resolver} */ + function resolveAllText(events, context) { + let index = -1 + /** @type {number | undefined} */ + let enter + + // A rather boring computation (to merge adjacent `data` events) which + // improves mm performance by 29%. + while (++index <= events.length) { + if (enter === undefined) { + if (events[index] && events[index][1].type === 'data') { + enter = index + index++ + } + } else if (!events[index] || events[index][1].type !== 'data') { + // Don’t do anything if there is one data token. + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + index = enter + 2 + } + enter = undefined + } + } + return extraResolver ? extraResolver(events, context) : events + } +} + +/** + * A rather ugly set of instructions which again looks at chunks in the input + * stream. + * The reason to do this here is that it is *much* faster to parse in reverse. + * And that we can’t hook into `null` to split the line suffix before an EOF. + * To do: figure out if we can make this into a clean utility, or even in core. + * As it will be useful for GFMs literal autolink extension (and maybe even + * tables?) + * + * @type {Resolver} + */ +function resolveAllLineSuffixes(events, context) { + let eventIndex = 0 // Skip first. + + while (++eventIndex <= events.length) { + if ( + (eventIndex === events.length || + events[eventIndex][1].type === 'lineEnding') && + events[eventIndex - 1][1].type === 'data' + ) { + const data = events[eventIndex - 1][1] + const chunks = context.sliceStream(data) + let index = chunks.length + let bufferIndex = -1 + let size = 0 + /** @type {boolean | undefined} */ + let tabs + while (index--) { + const chunk = chunks[index] + if (typeof chunk === 'string') { + bufferIndex = chunk.length + while (chunk.charCodeAt(bufferIndex - 1) === 32) { + size++ + bufferIndex-- + } + if (bufferIndex) break + bufferIndex = -1 + } + // Number + else if (chunk === -2) { + tabs = true + size++ + } else if (chunk === -1) { + // Empty + } else { + // Replacement character, exit. + index++ + break + } + } + if (size) { + const token = { + type: + eventIndex === events.length || tabs || size < 2 + ? 'lineSuffix' + : 'hardBreakTrailing', + start: { + line: data.end.line, + column: data.end.column - size, + offset: data.end.offset - size, + _index: data.start._index + index, + _bufferIndex: index + ? bufferIndex + : data.start._bufferIndex + bufferIndex + }, + end: Object.assign({}, data.end) + } + data.end = Object.assign({}, token.start) + if (data.start.offset === data.end.offset) { + Object.assign(data, token) + } else { + events.splice( + eventIndex, + 0, + ['enter', token, context], + ['exit', token, context] + ) + eventIndex += 2 + } + } + eventIndex++ + } + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-resolve-all/index.js +/** + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * Call all `resolveAll`s. + * + * @param {Array<{resolveAll?: Resolver | undefined}>} constructs + * List of constructs, optionally with `resolveAll`s. + * @param {Array<Event>} events + * List of events. + * @param {TokenizeContext} context + * Context used by `tokenize`. + * @returns {Array<Event>} + * Changed events. + */ +function resolveAll(constructs, events, context) { + /** @type {Array<Resolver>} */ + const called = [] + let index = -1 + + while (++index < constructs.length) { + const resolve = constructs[index].resolveAll + + if (resolve && !called.includes(resolve)) { + events = resolve(events, context) + called.push(resolve) + } + } + + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/create-tokenizer.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenType} TokenType + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + */ + +/** + * @callback Restore + * @returns {void} + * + * @typedef Info + * @property {Restore} restore + * @property {number} from + * + * @callback ReturnHandle + * Handle a successful run. + * @param {Construct} construct + * @param {Info} info + * @returns {void} + */ + + + + +/** + * Create a tokenizer. + * Tokenizers deal with one type of data (e.g., containers, flow, text). + * The parser is the object dealing with it all. + * `initialize` works like other constructs, except that only its `tokenize` + * function is used, in which case it doesn’t receive an `ok` or `nok`. + * `from` can be given to set the point before the first character, although + * when further lines are indented, they must be set with `defineSkip`. + * + * @param {ParseContext} parser + * @param {InitialConstruct} initialize + * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from] + * @returns {TokenizeContext} + */ +function createTokenizer(parser, initialize, from) { + /** @type {Point} */ + let point = Object.assign( + from + ? Object.assign({}, from) + : { + line: 1, + column: 1, + offset: 0 + }, + { + _index: 0, + _bufferIndex: -1 + } + ) + /** @type {Record<string, number>} */ + const columnStart = {} + /** @type {Array<Construct>} */ + const resolveAllConstructs = [] + /** @type {Array<Chunk>} */ + let chunks = [] + /** @type {Array<Token>} */ + let stack = [] + /** @type {boolean | undefined} */ + let consumed = true + + /** + * Tools used for tokenizing. + * + * @type {Effects} + */ + const effects = { + consume, + enter, + exit, + attempt: constructFactory(onsuccessfulconstruct), + check: constructFactory(onsuccessfulcheck), + interrupt: constructFactory(onsuccessfulcheck, { + interrupt: true + }) + } + + /** + * State and tools for resolving and serializing. + * + * @type {TokenizeContext} + */ + const context = { + previous: null, + code: null, + containerState: {}, + events: [], + parser, + sliceStream, + sliceSerialize, + now, + defineSkip, + write + } + + /** + * The state function. + * + * @type {State | void} + */ + let state = initialize.tokenize.call(context, effects) + + /** + * Track which character we expect to be consumed, to catch bugs. + * + * @type {Code} + */ + let expectedCode + if (initialize.resolveAll) { + resolveAllConstructs.push(initialize) + } + return context + + /** @type {TokenizeContext['write']} */ + function write(slice) { + chunks = push(chunks, slice) + main() + + // Exit if we’re not done, resolve might change stuff. + if (chunks[chunks.length - 1] !== null) { + return [] + } + addResult(initialize, 0) + + // Otherwise, resolve, and exit. + context.events = resolveAll(resolveAllConstructs, context.events, context) + return context.events + } + + // + // Tools. + // + + /** @type {TokenizeContext['sliceSerialize']} */ + function sliceSerialize(token, expandTabs) { + return serializeChunks(sliceStream(token), expandTabs) + } + + /** @type {TokenizeContext['sliceStream']} */ + function sliceStream(token) { + return sliceChunks(chunks, token) + } + + /** @type {TokenizeContext['now']} */ + function now() { + // This is a hot path, so we clone manually instead of `Object.assign({}, point)` + const {line, column, offset, _index, _bufferIndex} = point + return { + line, + column, + offset, + _index, + _bufferIndex + } + } + + /** @type {TokenizeContext['defineSkip']} */ + function defineSkip(value) { + columnStart[value.line] = value.column + accountForPotentialSkip() + } + + // + // State management. + // + + /** + * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by + * `consume`). + * Here is where we walk through the chunks, which either include strings of + * several characters, or numerical character codes. + * The reason to do this in a loop instead of a call is so the stack can + * drain. + * + * @returns {void} + */ + function main() { + /** @type {number} */ + let chunkIndex + while (point._index < chunks.length) { + const chunk = chunks[point._index] + + // If we’re in a buffer chunk, loop through it. + if (typeof chunk === 'string') { + chunkIndex = point._index + if (point._bufferIndex < 0) { + point._bufferIndex = 0 + } + while ( + point._index === chunkIndex && + point._bufferIndex < chunk.length + ) { + go(chunk.charCodeAt(point._bufferIndex)) + } + } else { + go(chunk) + } + } + } + + /** + * Deal with one code. + * + * @param {Code} code + * @returns {void} + */ + function go(code) { + consumed = undefined + expectedCode = code + state = state(code) + } + + /** @type {Effects['consume']} */ + function consume(code) { + if (markdownLineEnding(code)) { + point.line++ + point.column = 1 + point.offset += code === -3 ? 2 : 1 + accountForPotentialSkip() + } else if (code !== -1) { + point.column++ + point.offset++ + } + + // Not in a string chunk. + if (point._bufferIndex < 0) { + point._index++ + } else { + point._bufferIndex++ + + // At end of string chunk. + // @ts-expect-error Points w/ non-negative `_bufferIndex` reference + // strings. + if (point._bufferIndex === chunks[point._index].length) { + point._bufferIndex = -1 + point._index++ + } + } + + // Expose the previous character. + context.previous = code + + // Mark as consumed. + consumed = true + } + + /** @type {Effects['enter']} */ + function enter(type, fields) { + /** @type {Token} */ + // @ts-expect-error Patch instead of assign required fields to help GC. + const token = fields || {} + token.type = type + token.start = now() + context.events.push(['enter', token, context]) + stack.push(token) + return token + } + + /** @type {Effects['exit']} */ + function exit(type) { + const token = stack.pop() + token.end = now() + context.events.push(['exit', token, context]) + return token + } + + /** + * Use results. + * + * @type {ReturnHandle} + */ + function onsuccessfulconstruct(construct, info) { + addResult(construct, info.from) + } + + /** + * Discard results. + * + * @type {ReturnHandle} + */ + function onsuccessfulcheck(_, info) { + info.restore() + } + + /** + * Factory to attempt/check/interrupt. + * + * @param {ReturnHandle} onreturn + * @param {{interrupt?: boolean | undefined} | undefined} [fields] + */ + function constructFactory(onreturn, fields) { + return hook + + /** + * Handle either an object mapping codes to constructs, a list of + * constructs, or a single construct. + * + * @param {Array<Construct> | Construct | ConstructRecord} constructs + * @param {State} returnState + * @param {State | undefined} [bogusState] + * @returns {State} + */ + function hook(constructs, returnState, bogusState) { + /** @type {Array<Construct>} */ + let listOfConstructs + /** @type {number} */ + let constructIndex + /** @type {Construct} */ + let currentConstruct + /** @type {Info} */ + let info + return Array.isArray(constructs) /* c8 ignore next 1 */ + ? handleListOfConstructs(constructs) + : 'tokenize' in constructs + ? // @ts-expect-error Looks like a construct. + handleListOfConstructs([constructs]) + : handleMapOfConstructs(constructs) + + /** + * Handle a list of construct. + * + * @param {ConstructRecord} map + * @returns {State} + */ + function handleMapOfConstructs(map) { + return start + + /** @type {State} */ + function start(code) { + const def = code !== null && map[code] + const all = code !== null && map.null + const list = [ + // To do: add more extension tests. + /* c8 ignore next 2 */ + ...(Array.isArray(def) ? def : def ? [def] : []), + ...(Array.isArray(all) ? all : all ? [all] : []) + ] + return handleListOfConstructs(list)(code) + } + } + + /** + * Handle a list of construct. + * + * @param {Array<Construct>} list + * @returns {State} + */ + function handleListOfConstructs(list) { + listOfConstructs = list + constructIndex = 0 + if (list.length === 0) { + return bogusState + } + return handleConstruct(list[constructIndex]) + } + + /** + * Handle a single construct. + * + * @param {Construct} construct + * @returns {State} + */ + function handleConstruct(construct) { + return start + + /** @type {State} */ + function start(code) { + // To do: not needed to store if there is no bogus state, probably? + // Currently doesn’t work because `inspect` in document does a check + // w/o a bogus, which doesn’t make sense. But it does seem to help perf + // by not storing. + info = store() + currentConstruct = construct + if (!construct.partial) { + context.currentConstruct = construct + } + + // Always populated by defaults. + + if ( + construct.name && + context.parser.constructs.disable.null.includes(construct.name) + ) { + return nok(code) + } + return construct.tokenize.call( + // If we do have fields, create an object w/ `context` as its + // prototype. + // This allows a “live binding”, which is needed for `interrupt`. + fields ? Object.assign(Object.create(context), fields) : context, + effects, + ok, + nok + )(code) + } + } + + /** @type {State} */ + function ok(code) { + consumed = true + onreturn(currentConstruct, info) + return returnState + } + + /** @type {State} */ + function nok(code) { + consumed = true + info.restore() + if (++constructIndex < listOfConstructs.length) { + return handleConstruct(listOfConstructs[constructIndex]) + } + return bogusState + } + } + } + + /** + * @param {Construct} construct + * @param {number} from + * @returns {void} + */ + function addResult(construct, from) { + if (construct.resolveAll && !resolveAllConstructs.includes(construct)) { + resolveAllConstructs.push(construct) + } + if (construct.resolve) { + splice( + context.events, + from, + context.events.length - from, + construct.resolve(context.events.slice(from), context) + ) + } + if (construct.resolveTo) { + context.events = construct.resolveTo(context.events, context) + } + } + + /** + * Store state. + * + * @returns {Info} + */ + function store() { + const startPoint = now() + const startPrevious = context.previous + const startCurrentConstruct = context.currentConstruct + const startEventsIndex = context.events.length + const startStack = Array.from(stack) + return { + restore, + from: startEventsIndex + } + + /** + * Restore state. + * + * @returns {void} + */ + function restore() { + point = startPoint + context.previous = startPrevious + context.currentConstruct = startCurrentConstruct + context.events.length = startEventsIndex + stack = startStack + accountForPotentialSkip() + } + } + + /** + * Move the current point a bit forward in the line when it’s on a column + * skip. + * + * @returns {void} + */ + function accountForPotentialSkip() { + if (point.line in columnStart && point.column < 2) { + point.column = columnStart[point.line] + point.offset += columnStart[point.line] - 1 + } + } +} + +/** + * Get the chunks from a slice of chunks in the range of a token. + * + * @param {Array<Chunk>} chunks + * @param {Pick<Token, 'end' | 'start'>} token + * @returns {Array<Chunk>} + */ +function sliceChunks(chunks, token) { + const startIndex = token.start._index + const startBufferIndex = token.start._bufferIndex + const endIndex = token.end._index + const endBufferIndex = token.end._bufferIndex + /** @type {Array<Chunk>} */ + let view + if (startIndex === endIndex) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)] + } else { + view = chunks.slice(startIndex, endIndex) + if (startBufferIndex > -1) { + const head = view[0] + if (typeof head === 'string') { + view[0] = head.slice(startBufferIndex) + } else { + view.shift() + } + } + if (endBufferIndex > 0) { + // @ts-expect-error `_bufferIndex` is used on string chunks. + view.push(chunks[endIndex].slice(0, endBufferIndex)) + } + } + return view +} + +/** + * Get the string value of a slice of chunks. + * + * @param {Array<Chunk>} chunks + * @param {boolean | undefined} [expandTabs=false] + * @returns {string} + */ +function serializeChunks(chunks, expandTabs) { + let index = -1 + /** @type {Array<string>} */ + const result = [] + /** @type {boolean | undefined} */ + let atTab + while (++index < chunks.length) { + const chunk = chunks[index] + /** @type {string} */ + let value + if (typeof chunk === 'string') { + value = chunk + } else + switch (chunk) { + case -5: { + value = '\r' + break + } + case -4: { + value = '\n' + break + } + case -3: { + value = '\r' + '\n' + break + } + case -2: { + value = expandTabs ? ' ' : '\t' + break + } + case -1: { + if (!expandTabs && atTab) continue + value = ' ' + break + } + default: { + // Currently only replacement character. + value = String.fromCharCode(chunk) + } + } + atTab = chunk === -2 + result.push(value) + } + return result.join('') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/thematic-break.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const thematicBreak = { + name: 'thematicBreak', + tokenize: tokenizeThematicBreak +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeThematicBreak(effects, ok, nok) { + let size = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of thematic break. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('thematicBreak') + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * After optional whitespace, at marker. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + marker = code + return atBreak(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.enter('thematicBreakSequence') + return sequence(code) + } + if (size >= 3 && (code === null || markdownLineEnding(code))) { + effects.exit('thematicBreak') + return ok(code) + } + return nok(code) + } + + /** + * In sequence. + * + * ```markdown + * > | *** + * ^ + * ``` + * + * @type {State} + */ + function sequence(code) { + if (code === marker) { + effects.consume(code) + size++ + return sequence + } + effects.exit('thematicBreakSequence') + return markdownSpace(code) + ? factorySpace(effects, atBreak, 'whitespace')(code) + : atBreak(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/list.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').ContainerState} ContainerState + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + +/** @type {Construct} */ +const list = { + name: 'list', + tokenize: tokenizeListStart, + continuation: { + tokenize: tokenizeListContinuation + }, + exit: tokenizeListEnd +} + +/** @type {Construct} */ +const listItemPrefixWhitespaceConstruct = { + tokenize: tokenizeListItemPrefixWhitespace, + partial: true +} + +/** @type {Construct} */ +const indentConstruct = { + tokenize: tokenizeIndent, + partial: true +} + +// To do: `markdown-rs` parses list items on their own and later stitches them +// together. + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListStart(effects, ok, nok) { + const self = this + const tail = self.events[self.events.length - 1] + let initialSize = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + let size = 0 + return start + + /** @type {State} */ + function start(code) { + const kind = + self.containerState.type || + (code === 42 || code === 43 || code === 45 + ? 'listUnordered' + : 'listOrdered') + if ( + kind === 'listUnordered' + ? !self.containerState.marker || code === self.containerState.marker + : asciiDigit(code) + ) { + if (!self.containerState.type) { + self.containerState.type = kind + effects.enter(kind, { + _container: true + }) + } + if (kind === 'listUnordered') { + effects.enter('listItemPrefix') + return code === 42 || code === 45 + ? effects.check(thematicBreak, nok, atMarker)(code) + : atMarker(code) + } + if (!self.interrupt || code === 49) { + effects.enter('listItemPrefix') + effects.enter('listItemValue') + return inside(code) + } + } + return nok(code) + } + + /** @type {State} */ + function inside(code) { + if (asciiDigit(code) && ++size < 10) { + effects.consume(code) + return inside + } + if ( + (!self.interrupt || size < 2) && + (self.containerState.marker + ? code === self.containerState.marker + : code === 41 || code === 46) + ) { + effects.exit('listItemValue') + return atMarker(code) + } + return nok(code) + } + + /** + * @type {State} + **/ + function atMarker(code) { + effects.enter('listItemMarker') + effects.consume(code) + effects.exit('listItemMarker') + self.containerState.marker = self.containerState.marker || code + return effects.check( + blankLine, + // Can’t be empty when interrupting. + self.interrupt ? nok : onBlank, + effects.attempt( + listItemPrefixWhitespaceConstruct, + endOfPrefix, + otherPrefix + ) + ) + } + + /** @type {State} */ + function onBlank(code) { + self.containerState.initialBlankLine = true + initialSize++ + return endOfPrefix(code) + } + + /** @type {State} */ + function otherPrefix(code) { + if (markdownSpace(code)) { + effects.enter('listItemPrefixWhitespace') + effects.consume(code) + effects.exit('listItemPrefixWhitespace') + return endOfPrefix + } + return nok(code) + } + + /** @type {State} */ + function endOfPrefix(code) { + self.containerState.size = + initialSize + + self.sliceSerialize(effects.exit('listItemPrefix'), true).length + return ok(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListContinuation(effects, ok, nok) { + const self = this + self.containerState._closeFlow = undefined + return effects.check(blankLine, onBlank, notBlank) + + /** @type {State} */ + function onBlank(code) { + self.containerState.furtherBlankLines = + self.containerState.furtherBlankLines || + self.containerState.initialBlankLine + + // We have a blank line. + // Still, try to consume at most the items size. + return factorySpace( + effects, + ok, + 'listItemIndent', + self.containerState.size + 1 + )(code) + } + + /** @type {State} */ + function notBlank(code) { + if (self.containerState.furtherBlankLines || !markdownSpace(code)) { + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return notInCurrentItem(code) + } + self.containerState.furtherBlankLines = undefined + self.containerState.initialBlankLine = undefined + return effects.attempt(indentConstruct, ok, notInCurrentItem)(code) + } + + /** @type {State} */ + function notInCurrentItem(code) { + // While we do continue, we signal that the flow should be closed. + self.containerState._closeFlow = true + // As we’re closing flow, we’re no longer interrupting. + self.interrupt = undefined + // Always populated by defaults. + + return factorySpace( + effects, + effects.attempt(list, ok, nok), + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeIndent(effects, ok, nok) { + const self = this + return factorySpace( + effects, + afterPrefix, + 'listItemIndent', + self.containerState.size + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'listItemIndent' && + tail[2].sliceSerialize(tail[1], true).length === self.containerState.size + ? ok(code) + : nok(code) + } +} + +/** + * @type {Exiter} + * @this {TokenizeContext} + */ +function tokenizeListEnd(effects) { + effects.exit(this.containerState.type) +} + +/** + * @type {Tokenizer} + * @this {TokenizeContext} + */ +function tokenizeListItemPrefixWhitespace(effects, ok, nok) { + const self = this + + // Always populated by defaults. + + return factorySpace( + effects, + afterPrefix, + 'listItemPrefixWhitespace', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + 1 + ) + + /** @type {State} */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return !markdownSpace(code) && + tail && + tail[1].type === 'listItemPrefixWhitespace' + ? ok(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/block-quote.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Exiter} Exiter + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const blockQuote = { + name: 'blockQuote', + tokenize: tokenizeBlockQuoteStart, + continuation: { + tokenize: tokenizeBlockQuoteContinuation + }, + exit +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteStart(effects, ok, nok) { + const self = this + return start + + /** + * Start of block quote. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 62) { + const state = self.containerState + if (!state.open) { + effects.enter('blockQuote', { + _container: true + }) + state.open = true + } + effects.enter('blockQuotePrefix') + effects.enter('blockQuoteMarker') + effects.consume(code) + effects.exit('blockQuoteMarker') + return after + } + return nok(code) + } + + /** + * After `>`, before optional whitespace. + * + * ```markdown + * > | > a + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownSpace(code)) { + effects.enter('blockQuotePrefixWhitespace') + effects.consume(code) + effects.exit('blockQuotePrefixWhitespace') + effects.exit('blockQuotePrefix') + return ok + } + effects.exit('blockQuotePrefix') + return ok(code) + } +} + +/** + * Start of block quote continuation. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlockQuoteContinuation(effects, ok, nok) { + const self = this + return contStart + + /** + * Start of block quote continuation. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contStart(code) { + if (markdownSpace(code)) { + // Always populated by defaults. + + return factorySpace( + effects, + contBefore, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + } + return contBefore(code) + } + + /** + * At `>`, after optional whitespace. + * + * Also used to parse the first block quote opening. + * + * ```markdown + * | > a + * > | > b + * ^ + * ``` + * + * @type {State} + */ + function contBefore(code) { + return effects.attempt(blockQuote, ok, nok)(code) + } +} + +/** @type {Exiter} */ +function exit(effects) { + effects.exit('blockQuote') +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-destination/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse destinations. + * + * ###### Examples + * + * ```markdown + * <a> + * <a\>b> + * <a b> + * <a)> + * a + * a\)b + * a(b)c + * a(b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type for whole (`<a>` or `b`). + * @param {TokenType} literalType + * Type when enclosed (`<a>`). + * @param {TokenType} literalMarkerType + * Type for enclosing (`<` and `>`). + * @param {TokenType} rawType + * Type when not enclosed (`b`). + * @param {TokenType} stringType + * Type for the value (`a` or `b`). + * @param {number | undefined} [max=Infinity] + * Depth of nested parens (inclusive). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryDestination( + effects, + ok, + nok, + type, + literalType, + literalMarkerType, + rawType, + stringType, + max +) { + const limit = max || Number.POSITIVE_INFINITY + let balance = 0 + return start + + /** + * Start of destination. + * + * ```markdown + * > | <aa> + * ^ + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 60) { + effects.enter(type) + effects.enter(literalType) + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + return enclosedBefore + } + + // ASCII control, space, closing paren. + if (code === null || code === 32 || code === 41 || asciiControl(code)) { + return nok(code) + } + effects.enter(type) + effects.enter(rawType) + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return raw(code) + } + + /** + * After `<`, at an enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosedBefore(code) { + if (code === 62) { + effects.enter(literalMarkerType) + effects.consume(code) + effects.exit(literalMarkerType) + effects.exit(literalType) + effects.exit(type) + return ok + } + effects.enter(stringType) + effects.enter('chunkString', { + contentType: 'string' + }) + return enclosed(code) + } + + /** + * In enclosed destination. + * + * ```markdown + * > | <aa> + * ^ + * ``` + * + * @type {State} + */ + function enclosed(code) { + if (code === 62) { + effects.exit('chunkString') + effects.exit(stringType) + return enclosedBefore(code) + } + if (code === null || code === 60 || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? enclosedEscape : enclosed + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | <a\*a> + * ^ + * ``` + * + * @type {State} + */ + function enclosedEscape(code) { + if (code === 60 || code === 62 || code === 92) { + effects.consume(code) + return enclosed + } + return enclosed(code) + } + + /** + * In raw destination. + * + * ```markdown + * > | aa + * ^ + * ``` + * + * @type {State} + */ + function raw(code) { + if ( + !balance && + (code === null || code === 41 || markdownLineEndingOrSpace(code)) + ) { + effects.exit('chunkString') + effects.exit(stringType) + effects.exit(rawType) + effects.exit(type) + return ok(code) + } + if (balance < limit && code === 40) { + effects.consume(code) + balance++ + return raw + } + if (code === 41) { + effects.consume(code) + balance-- + return raw + } + + // ASCII control (but *not* `\0`) and space and `(`. + // Note: in `markdown-rs`, `\0` exists in codes, in `micromark-js` it + // doesn’t. + if (code === null || code === 32 || code === 40 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return code === 92 ? rawEscape : raw + } + + /** + * After `\`, at special character. + * + * ```markdown + * > | a\*a + * ^ + * ``` + * + * @type {State} + */ + function rawEscape(code) { + if (code === 40 || code === 41 || code === 92) { + effects.consume(code) + return raw + } + return raw(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-label/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + +/** + * Parse labels. + * + * > 👉 **Note**: labels in markdown are capped at 999 characters in the string. + * + * ###### Examples + * + * ```markdown + * [a] + * [a + * b] + * [a\]b] + * ``` + * + * @this {TokenizeContext} + * Tokenize context. + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole label (`[a]`). + * @param {TokenType} markerType + * Type for the markers (`[` and `]`). + * @param {TokenType} stringType + * Type for the identifier (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryLabel(effects, ok, nok, type, markerType, stringType) { + const self = this + let size = 0 + /** @type {boolean} */ + let seen + return start + + /** + * Start of label. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.enter(stringType) + return atBreak + } + + /** + * In label, at something, before something else. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if ( + size > 999 || + code === null || + code === 91 || + (code === 93 && !seen) || + // To do: remove in the future once we’ve switched from + // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`, + // which doesn’t need this. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + (code === 94 && + !size && + '_hiddenFootnoteSupport' in self.parser.constructs) + ) { + return nok(code) + } + if (code === 93) { + effects.exit(stringType) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + + // To do: indent? Link chunks and EOLs together? + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return atBreak + } + effects.enter('chunkString', { + contentType: 'string' + }) + return labelInside(code) + } + + /** + * In label, in text. + * + * ```markdown + * > | [a] + * ^ + * ``` + * + * @type {State} + */ + function labelInside(code) { + if ( + code === null || + code === 91 || + code === 93 || + markdownLineEnding(code) || + size++ > 999 + ) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + if (!seen) seen = !markdownSpace(code) + return code === 92 ? labelEscape : labelInside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | [a\*a] + * ^ + * ``` + * + * @type {State} + */ + function labelEscape(code) { + if (code === 91 || code === 92 || code === 93) { + effects.consume(code) + size++ + return labelInside + } + return labelInside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-title/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenType} TokenType + */ + + + +/** + * Parse titles. + * + * ###### Examples + * + * ```markdown + * "a" + * 'b' + * (c) + * "a + * b" + * 'a + * b' + * (a\)b) + * ``` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @param {State} nok + * State switched to when unsuccessful. + * @param {TokenType} type + * Type of the whole title (`"a"`, `'b'`, `(c)`). + * @param {TokenType} markerType + * Type for the markers (`"`, `'`, `(`, and `)`). + * @param {TokenType} stringType + * Type for the value (`a`). + * @returns {State} + * Start state. + */ // eslint-disable-next-line max-params +function factoryTitle(effects, ok, nok, type, markerType, stringType) { + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of title. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + if (code === 34 || code === 39 || code === 40) { + effects.enter(type) + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + marker = code === 40 ? 41 : code + return begin + } + return nok(code) + } + + /** + * After opening marker. + * + * This is also used at the closing marker. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function begin(code) { + if (code === marker) { + effects.enter(markerType) + effects.consume(code) + effects.exit(markerType) + effects.exit(type) + return ok + } + effects.enter(stringType) + return atBreak(code) + } + + /** + * At something, before something else. + * + * ```markdown + * > | "a" + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === marker) { + effects.exit(stringType) + return begin(marker) + } + if (code === null) { + return nok(code) + } + + // Note: blank lines can’t exist in content. + if (markdownLineEnding(code)) { + // To do: use `space_or_tab_eol_with_options`, connect. + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, atBreak, 'linePrefix') + } + effects.enter('chunkString', { + contentType: 'string' + }) + return inside(code) + } + + /** + * + * + * @type {State} + */ + function inside(code) { + if (code === marker || code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + return atBreak(code) + } + effects.consume(code) + return code === 92 ? escape : inside + } + + /** + * After `\`, at a special character. + * + * ```markdown + * > | "a\*b" + * ^ + * ``` + * + * @type {State} + */ + function escape(code) { + if (code === marker || code === 92) { + effects.consume(code) + return inside + } + return inside(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-factory-whitespace/index.js +/** + * @typedef {import('micromark-util-types').Effects} Effects + * @typedef {import('micromark-util-types').State} State + */ + + + +/** + * Parse spaces and tabs. + * + * There is no `nok` parameter: + * + * * line endings or spaces in markdown are often optional, in which case this + * factory can be used and `ok` will be switched to whether spaces were found + * or not + * * one line ending or space can be detected with + * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace` + * + * @param {Effects} effects + * Context. + * @param {State} ok + * State switched to when successful. + * @returns + * Start state. + */ +function factoryWhitespace(effects, ok) { + /** @type {boolean} */ + let seen + return start + + /** @type {State} */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + seen = true + return start + } + if (markdownSpace(code)) { + return factorySpace( + effects, + start, + seen ? 'linePrefix' : 'lineSuffix' + )(code) + } + return ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-normalize-identifier/index.js +/** + * Normalize an identifier (as found in references, definitions). + * + * Collapses markdown whitespace, trim, and then lower- and uppercase. + * + * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their + * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different + * uppercase character (U+0398 (`Θ`)). + * So, to get a canonical form, we perform both lower- and uppercase. + * + * Using uppercase last makes sure keys will never interact with default + * prototypal values (such as `constructor`): nothing in the prototype of + * `Object` is uppercase. + * + * @param {string} value + * Identifier to normalize. + * @returns {string} + * Normalized identifier. + */ +function normalizeIdentifier(value) { + return ( + value + // Collapse markdown whitespace. + .replace(/[\t\n\r ]+/g, ' ') + // Trim. + .replace(/^ | $/g, '') + // Some characters are considered “uppercase”, but if their lowercase + // counterpart is uppercased will result in a different uppercase + // character. + // Hence, to get that form, we perform both lower- and uppercase. + // Upper case makes sure keys will not interact with default prototypal + // methods: no method is uppercase. + .toLowerCase() + .toUpperCase() + ) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/definition.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + +/** @type {Construct} */ +const definition = { + name: 'definition', + tokenize: tokenizeDefinition +} + +/** @type {Construct} */ +const titleBefore = { + tokenize: tokenizeTitleBefore, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeDefinition(effects, ok, nok) { + const self = this + /** @type {string} */ + let identifier + return start + + /** + * At start of a definition. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Do not interrupt paragraphs (but do follow definitions). + // To do: do `interrupt` the way `markdown-rs` does. + // To do: parse whitespace the way `markdown-rs` does. + effects.enter('definition') + return before(code) + } + + /** + * After optional whitespace, at `[`. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + // To do: parse whitespace the way `markdown-rs` does. + + return factoryLabel.call( + self, + effects, + labelAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionLabel', + 'definitionLabelMarker', + 'definitionLabelString' + )(code) + } + + /** + * After label. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function labelAfter(code) { + identifier = normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + if (code === 58) { + effects.enter('definitionMarker') + effects.consume(code) + effects.exit('definitionMarker') + return markerAfter + } + return nok(code) + } + + /** + * After marker. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function markerAfter(code) { + // Note: whitespace is optional. + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, destinationBefore)(code) + : destinationBefore(code) + } + + /** + * Before destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationBefore(code) { + return factoryDestination( + effects, + destinationAfter, + // Note: we don’t need to reset the way `markdown-rs` does. + nok, + 'definitionDestination', + 'definitionDestinationLiteral', + 'definitionDestinationLiteralMarker', + 'definitionDestinationRaw', + 'definitionDestinationString' + )(code) + } + + /** + * After destination. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function destinationAfter(code) { + return effects.attempt(titleBefore, after, after)(code) + } + + /** + * After definition. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return markdownSpace(code) + ? factorySpace(effects, afterWhitespace, 'whitespace')(code) + : afterWhitespace(code) + } + + /** + * After definition, after optional whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function afterWhitespace(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('definition') + + // Note: we don’t care about uniqueness. + // It’s likely that that doesn’t happen very frequently. + // It is more likely that it wastes precious time. + self.parser.defined.push(identifier) + + // To do: `markdown-rs` interrupt. + // // You’d be interrupting. + // tokenizer.interrupt = true + return ok(code) + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeTitleBefore(effects, ok, nok) { + return titleBefore + + /** + * After destination, at whitespace. + * + * ```markdown + * > | [a]: b + * ^ + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, beforeMarker)(code) + : nok(code) + } + + /** + * At title. + * + * ```markdown + * | [a]: b + * > | "c" + * ^ + * ``` + * + * @type {State} + */ + function beforeMarker(code) { + return factoryTitle( + effects, + titleAfter, + nok, + 'definitionTitle', + 'definitionTitleMarker', + 'definitionTitleString' + )(code) + } + + /** + * After title. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfter(code) { + return markdownSpace(code) + ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) + : titleAfterOptionalWhitespace(code) + } + + /** + * After title, after optional whitespace. + * + * ```markdown + * > | [a]: b "c" + * ^ + * ``` + * + * @type {State} + */ + function titleAfterOptionalWhitespace(code) { + return code === null || markdownLineEnding(code) ? ok(code) : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-indented.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const codeIndented = { + name: 'codeIndented', + tokenize: tokenizeCodeIndented +} + +/** @type {Construct} */ +const furtherStart = { + tokenize: tokenizeFurtherStart, + partial: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeIndented(effects, ok, nok) { + const self = this + return start + + /** + * Start of code (indented). + * + * > **Parsing note**: it is not needed to check if this first line is a + * > filled line (that it has a non-whitespace character), because blank lines + * > are parsed already, so we never run into that. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: manually check if interrupting like `markdown-rs`. + + effects.enter('codeIndented') + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? atBreak(code) + : nok(code) + } + + /** + * At a break. + * + * ```markdown + * > | aaa + * ^ ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === null) { + return after(code) + } + if (markdownLineEnding(code)) { + return effects.attempt(furtherStart, atBreak, after)(code) + } + effects.enter('codeFlowValue') + return inside(code) + } + + /** + * In code content. + * + * ```markdown + * > | aaa + * ^^^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return atBreak(code) + } + effects.consume(code) + return inside + } + + /** @type {State} */ + function after(code) { + effects.exit('codeIndented') + // To do: allow interrupting like `markdown-rs`. + // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeFurtherStart(effects, ok, nok) { + const self = this + return furtherStart + + /** + * At eol, trying to parse another indent. + * + * ```markdown + * > | aaa + * ^ + * | bbb + * ``` + * + * @type {State} + */ + function furtherStart(code) { + // To do: improve `lazy` / `pierce` handling. + // If this is a lazy line, it can’t be code. + if (self.parser.lazy[self.now().line]) { + return nok(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return furtherStart + } + + // To do: the code here in `micromark-js` is a bit different from + // `markdown-rs` because there it can attempt spaces. + // We can’t yet. + // + // To do: use an improved `space_or_tab` function like `markdown-rs`, + // so that we can drop the next state. + return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code) + } + + /** + * At start, after 1 or 4 spaces. + * + * ```markdown + * > | aaa + * ^ + * ``` + * + * @type {State} + */ + function afterPrefix(code) { + const tail = self.events[self.events.length - 1] + return tail && + tail[1].type === 'linePrefix' && + tail[2].sliceSerialize(tail[1], true).length >= 4 + ? ok(code) + : markdownLineEnding(code) + ? furtherStart(code) + : nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/heading-atx.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const headingAtx = { + name: 'headingAtx', + tokenize: tokenizeHeadingAtx, + resolve: resolveHeadingAtx +} + +/** @type {Resolver} */ +function resolveHeadingAtx(events, context) { + let contentEnd = events.length - 2 + let contentStart = 3 + /** @type {Token} */ + let content + /** @type {Token} */ + let text + + // Prefix whitespace, part of the opening. + if (events[contentStart][1].type === 'whitespace') { + contentStart += 2 + } + + // Suffix whitespace, part of the closing. + if ( + contentEnd - 2 > contentStart && + events[contentEnd][1].type === 'whitespace' + ) { + contentEnd -= 2 + } + if ( + events[contentEnd][1].type === 'atxHeadingSequence' && + (contentStart === contentEnd - 1 || + (contentEnd - 4 > contentStart && + events[contentEnd - 2][1].type === 'whitespace')) + ) { + contentEnd -= contentStart + 1 === contentEnd ? 2 : 4 + } + if (contentEnd > contentStart) { + content = { + type: 'atxHeadingText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end + } + text = { + type: 'chunkText', + start: events[contentStart][1].start, + end: events[contentEnd][1].end, + contentType: 'text' + } + splice(events, contentStart, contentEnd - contentStart + 1, [ + ['enter', content, context], + ['enter', text, context], + ['exit', text, context], + ['exit', content, context] + ]) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHeadingAtx(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of a heading (atx). + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + effects.enter('atxHeading') + return before(code) + } + + /** + * After optional whitespace, at `#`. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('atxHeadingSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 35 && size++ < 6) { + effects.consume(code) + return sequenceOpen + } + + // Always at least one `#`. + if (code === null || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingSequence') + return atBreak(code) + } + return nok(code) + } + + /** + * After something, before something else. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function atBreak(code) { + if (code === 35) { + effects.enter('atxHeadingSequence') + return sequenceFurther(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('atxHeading') + // To do: interrupt like `markdown-rs`. + // // Feel free to interrupt. + // tokenizer.interrupt = false + return ok(code) + } + if (markdownSpace(code)) { + return factorySpace(effects, atBreak, 'whitespace')(code) + } + + // To do: generate `data` tokens, add the `text` token later. + // Needs edit map, see: `markdown.rs`. + effects.enter('atxHeadingText') + return data(code) + } + + /** + * In further sequence (after whitespace). + * + * Could be normal “visible” hashes in the heading or a final sequence. + * + * ```markdown + * > | ## aa ## + * ^ + * ``` + * + * @type {State} + */ + function sequenceFurther(code) { + if (code === 35) { + effects.consume(code) + return sequenceFurther + } + effects.exit('atxHeadingSequence') + return atBreak(code) + } + + /** + * In text. + * + * ```markdown + * > | ## aa + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if (code === null || code === 35 || markdownLineEndingOrSpace(code)) { + effects.exit('atxHeadingText') + return atBreak(code) + } + effects.consume(code) + return data + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/setext-underline.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const setextUnderline = { + name: 'setextUnderline', + tokenize: tokenizeSetextUnderline, + resolveTo: resolveToSetextUnderline +} + +/** @type {Resolver} */ +function resolveToSetextUnderline(events, context) { + // To do: resolve like `markdown-rs`. + let index = events.length + /** @type {number | undefined} */ + let content + /** @type {number | undefined} */ + let text + /** @type {number | undefined} */ + let definition + + // Find the opening of the content. + // It’ll always exist: we don’t tokenize if it isn’t there. + while (index--) { + if (events[index][0] === 'enter') { + if (events[index][1].type === 'content') { + content = index + break + } + if (events[index][1].type === 'paragraph') { + text = index + } + } + // Exit + else { + if (events[index][1].type === 'content') { + // Remove the content end (if needed we’ll add it later) + events.splice(index, 1) + } + if (!definition && events[index][1].type === 'definition') { + definition = index + } + } + } + const heading = { + type: 'setextHeading', + start: Object.assign({}, events[text][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + + // Change the paragraph to setext heading text. + events[text][1].type = 'setextHeadingText' + + // If we have definitions in the content, we’ll keep on having content, + // but we need move it. + if (definition) { + events.splice(text, 0, ['enter', heading, context]) + events.splice(definition + 1, 0, ['exit', events[content][1], context]) + events[content][1].end = Object.assign({}, events[definition][1].end) + } else { + events[content][1] = heading + } + + // Add the heading exit at the end. + events.push(['exit', heading, context]) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeSetextUnderline(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * At start of heading (setext) underline. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + let index = self.events.length + /** @type {boolean | undefined} */ + let paragraph + // Find an opening. + while (index--) { + // Skip enter/exit of line ending, line prefix, and content. + // We can now either have a definition or a paragraph. + if ( + self.events[index][1].type !== 'lineEnding' && + self.events[index][1].type !== 'linePrefix' && + self.events[index][1].type !== 'content' + ) { + paragraph = self.events[index][1].type === 'paragraph' + break + } + } + + // To do: handle lazy/pierce like `markdown-rs`. + // To do: parse indent like `markdown-rs`. + if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) { + effects.enter('setextHeadingLine') + marker = code + return before(code) + } + return nok(code) + } + + /** + * After optional whitespace, at `-` or `=`. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('setextHeadingLineSequence') + return inside(code) + } + + /** + * In sequence. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + effects.exit('setextHeadingLineSequence') + return markdownSpace(code) + ? factorySpace(effects, after, 'lineSuffix')(code) + : after(code) + } + + /** + * After sequence, after optional whitespace. + * + * ```markdown + * | aa + * > | == + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('setextHeadingLine') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-html-tag-name/index.js +/** + * List of lowercase HTML “block” tag names. + * + * The list, when parsing HTML (flow), results in more relaxed rules (condition + * 6). + * Because they are known blocks, the HTML-like syntax doesn’t have to be + * strictly parsed. + * For tag names not in this list, a more strict algorithm (condition 7) is used + * to detect whether the HTML-like syntax is seen as HTML (flow) or not. + * + * This is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `search` was added in `CommonMark@0.31`. + */ +const htmlBlockNames = [ + 'address', + 'article', + 'aside', + 'base', + 'basefont', + 'blockquote', + 'body', + 'caption', + 'center', + 'col', + 'colgroup', + 'dd', + 'details', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'fieldset', + 'figcaption', + 'figure', + 'footer', + 'form', + 'frame', + 'frameset', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hr', + 'html', + 'iframe', + 'legend', + 'li', + 'link', + 'main', + 'menu', + 'menuitem', + 'nav', + 'noframes', + 'ol', + 'optgroup', + 'option', + 'p', + 'param', + 'search', + 'section', + 'summary', + 'table', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'title', + 'tr', + 'track', + 'ul' +] + +/** + * List of lowercase HTML “raw” tag names. + * + * The list, when parsing HTML (flow), results in HTML that can include lines + * without exiting, until a closing tag also in this list is found (condition + * 1). + * + * This module is copied from: + * <https://spec.commonmark.org/0.30/#html-blocks>. + * + * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`. + */ +const htmlRawNames = ['pre', 'script', 'style', 'textarea'] + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-flow.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + +/** @type {Construct} */ +const htmlFlow = { + name: 'htmlFlow', + tokenize: tokenizeHtmlFlow, + resolveTo: resolveToHtmlFlow, + concrete: true +} + +/** @type {Construct} */ +const blankLineBefore = { + tokenize: tokenizeBlankLineBefore, + partial: true +} +const nonLazyContinuationStart = { + tokenize: tokenizeNonLazyContinuationStart, + partial: true +} + +/** @type {Resolver} */ +function resolveToHtmlFlow(events) { + let index = events.length + while (index--) { + if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') { + break + } + } + if (index > 1 && events[index - 2][1].type === 'linePrefix') { + // Add the prefix start to the HTML token. + events[index][1].start = events[index - 2][1].start + // Add the prefix start to the HTML line token. + events[index + 1][1].start = events[index - 2][1].start + // Remove the line prefix. + events.splice(index - 2, 2) + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlFlow(effects, ok, nok) { + const self = this + /** @type {number} */ + let marker + /** @type {boolean} */ + let closingTag + /** @type {string} */ + let buffer + /** @type {number} */ + let index + /** @type {Code} */ + let markerB + return start + + /** + * Start of HTML (flow). + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse indent like `markdown-rs`. + return before(code) + } + + /** + * At `<`, after optional whitespace. + * + * ```markdown + * > | <x /> + * ^ + * ``` + * + * @type {State} + */ + function before(code) { + effects.enter('htmlFlow') + effects.enter('htmlFlowData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | <x /> + * ^ + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + closingTag = true + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + marker = 3 + // To do: + // tokenizer.concrete = true + // To do: use `markdown-rs` style interrupt. + // While we’re in an instruction instead of a declaration, we’re on a `?` + // right now, so we do need to search for `>`, similar to declarations. + return self.interrupt ? ok : continuationDeclarationInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | <!doctype> + * ^ + * > | <!--xxx--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + marker = 2 + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + marker = 5 + index = 0 + return cdataOpenInside + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + marker = 4 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<!-`, inside a comment, at another `-`. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuationDeclarationInside + } + return nok(code) + } + + /** + * After `<![`, inside CDATA, expecting `CDATA[`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + if (index === value.length) { + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return cdataOpenInside + } + return nok(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | </x> + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + if (asciiAlpha(code)) { + effects.consume(code) + // @ts-expect-error: not null. + buffer = String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * In tag name. + * + * ```markdown + * > | <ab> + * ^^ + * > | </ab> + * ^^ + * ``` + * + * @type {State} + */ + function tagName(code) { + if ( + code === null || + code === 47 || + code === 62 || + markdownLineEndingOrSpace(code) + ) { + const slash = code === 47 + const name = buffer.toLowerCase() + if (!slash && !closingTag && htmlRawNames.includes(name)) { + marker = 1 + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + if (htmlBlockNames.includes(buffer.toLowerCase())) { + marker = 6 + if (slash) { + effects.consume(code) + return basicSelfClosing + } + + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok(code) : continuation(code) + } + marker = 7 + // Do not support complete HTML when interrupting. + return self.interrupt && !self.parser.lazy[self.now().line] + ? nok(code) + : closingTag + ? completeClosingTagAfter(code) + : completeAttributeNameBefore(code) + } + + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + buffer += String.fromCharCode(code) + return tagName + } + return nok(code) + } + + /** + * After closing slash of a basic tag name. + * + * ```markdown + * > | <div/> + * ^ + * ``` + * + * @type {State} + */ + function basicSelfClosing(code) { + if (code === 62) { + effects.consume(code) + // // Do not form containers. + // tokenizer.concrete = true + return self.interrupt ? ok : continuation + } + return nok(code) + } + + /** + * After closing slash of a complete tag name. + * + * ```markdown + * > | <x/> + * ^ + * ``` + * + * @type {State} + */ + function completeClosingTagAfter(code) { + if (markdownSpace(code)) { + effects.consume(code) + return completeClosingTagAfter + } + return completeEnd(code) + } + + /** + * At an attribute name. + * + * At first, this state is used after a complete tag name, after whitespace, + * where it expects optional attributes or the end of the tag. + * It is also reused after attributes, when expecting more optional + * attributes. + * + * ```markdown + * > | <a /> + * ^ + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * > | <a > + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameBefore(code) { + if (code === 47) { + effects.consume(code) + return completeEnd + } + + // ASCII alphanumerical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return completeAttributeName + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameBefore + } + return completeEnd(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | <a :b> + * ^ + * > | <a _b> + * ^ + * > | <a b> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeName(code) { + // ASCII alphanumerical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return completeAttributeName + } + return completeAttributeNameAfter(code) + } + + /** + * After attribute name, at an optional initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | <a b> + * ^ + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return completeAttributeValueBefore + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeNameAfter + } + return completeAttributeNameBefore(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | <a b=c> + * ^ + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + markerB = code + return completeAttributeValueQuoted + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAttributeValueBefore + } + return completeAttributeValueUnquoted(code) + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | <a b="c"> + * ^ + * > | <a b='c'> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuoted(code) { + if (code === markerB) { + effects.consume(code) + markerB = null + return completeAttributeValueQuotedAfter + } + if (code === null || markdownLineEnding(code)) { + return nok(code) + } + effects.consume(code) + return completeAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | <a b=c> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 47 || + code === 60 || + code === 61 || + code === 62 || + code === 96 || + markdownLineEndingOrSpace(code) + ) { + return completeAttributeNameAfter(code) + } + effects.consume(code) + return completeAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the + * end of the tag. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownSpace(code)) { + return completeAttributeNameBefore(code) + } + return nok(code) + } + + /** + * In certain circumstances of a complete tag where only an `>` is allowed. + * + * ```markdown + * > | <a b="c"> + * ^ + * ``` + * + * @type {State} + */ + function completeEnd(code) { + if (code === 62) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * After `>` in a complete tag. + * + * ```markdown + * > | <x> + * ^ + * ``` + * + * @type {State} + */ + function completeAfter(code) { + if (code === null || markdownLineEnding(code)) { + // // Do not form containers. + // tokenizer.concrete = true + return continuation(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return completeAfter + } + return nok(code) + } + + /** + * In continuation of any HTML kind. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuation(code) { + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationCommentInside + } + if (code === 60 && marker === 1) { + effects.consume(code) + return continuationRawTagOpen + } + if (code === 62 && marker === 4) { + effects.consume(code) + return continuationClose + } + if (code === 63 && marker === 3) { + effects.consume(code) + return continuationDeclarationInside + } + if (code === 93 && marker === 5) { + effects.consume(code) + return continuationCdataInside + } + if (markdownLineEnding(code) && (marker === 6 || marker === 7)) { + effects.exit('htmlFlowData') + return effects.check( + blankLineBefore, + continuationAfter, + continuationStart + )(code) + } + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationStart(code) + } + effects.consume(code) + return continuation + } + + /** + * In continuation, at eol. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStart(code) { + return effects.check( + nonLazyContinuationStart, + continuationStartNonLazy, + continuationAfter + )(code) + } + + /** + * In continuation, at eol, before non-lazy content. + * + * ```markdown + * > | <x> + * ^ + * | asd + * ``` + * + * @type {State} + */ + function continuationStartNonLazy(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return continuationBefore + } + + /** + * In continuation, before non-lazy content. + * + * ```markdown + * | <x> + * > | asd + * ^ + * ``` + * + * @type {State} + */ + function continuationBefore(code) { + if (code === null || markdownLineEnding(code)) { + return continuationStart(code) + } + effects.enter('htmlFlowData') + return continuation(code) + } + + /** + * In comment continuation, after one `-`, expecting another. + * + * ```markdown + * > | <!--xxx--> + * ^ + * ``` + * + * @type {State} + */ + function continuationCommentInside(code) { + if (code === 45) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In raw continuation, after `<`, at `/`. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^ + * ``` + * + * @type {State} + */ + function continuationRawTagOpen(code) { + if (code === 47) { + effects.consume(code) + buffer = '' + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In raw continuation, after `</`, in a raw tag name. + * + * ```markdown + * > | <script>console.log(1)</script> + * ^^^^^^ + * ``` + * + * @type {State} + */ + function continuationRawEndTag(code) { + if (code === 62) { + const name = buffer.toLowerCase() + if (htmlRawNames.includes(name)) { + effects.consume(code) + return continuationClose + } + return continuation(code) + } + if (asciiAlpha(code) && buffer.length < 8) { + effects.consume(code) + // @ts-expect-error: not null. + buffer += String.fromCharCode(code) + return continuationRawEndTag + } + return continuation(code) + } + + /** + * In cdata continuation, after `]`, expecting `]>`. + * + * ```markdown + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationCdataInside(code) { + if (code === 93) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In declaration or instruction continuation, at `>`. + * + * ```markdown + * > | <!--> + * ^ + * > | <?> + * ^ + * > | <!q> + * ^ + * > | <!--ab--> + * ^ + * > | <![CDATA[>&<]]> + * ^ + * ``` + * + * @type {State} + */ + function continuationDeclarationInside(code) { + if (code === 62) { + effects.consume(code) + return continuationClose + } + + // More dashes. + if (code === 45 && marker === 2) { + effects.consume(code) + return continuationDeclarationInside + } + return continuation(code) + } + + /** + * In closed continuation: everything we get until the eol/eof is part of it. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationClose(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('htmlFlowData') + return continuationAfter(code) + } + effects.consume(code) + return continuationClose + } + + /** + * Done. + * + * ```markdown + * > | <!doctype> + * ^ + * ``` + * + * @type {State} + */ + function continuationAfter(code) { + effects.exit('htmlFlow') + // // Feel free to interrupt. + // tokenizer.interrupt = false + // // No longer concrete. + // tokenizer.concrete = false + return ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuationStart(effects, ok, nok) { + const self = this + return start + + /** + * At eol, before continuation. + * + * ```markdown + * > | * ```js + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return after + } + return nok(code) + } + + /** + * A continuation. + * + * ```markdown + * | * ```js + * > | b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeBlankLineBefore(effects, ok, nok) { + return start + + /** + * Before eol, expecting blank line. + * + * ```markdown + * > | <div> + * ^ + * | + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return effects.attempt(blankLine, ok, nok) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-fenced.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const nonLazyContinuation = { + tokenize: tokenizeNonLazyContinuation, + partial: true +} + +/** @type {Construct} */ +const codeFenced = { + name: 'codeFenced', + tokenize: tokenizeCodeFenced, + concrete: true +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeFenced(effects, ok, nok) { + const self = this + /** @type {Construct} */ + const closeStart = { + tokenize: tokenizeCloseStart, + partial: true + } + let initialPrefix = 0 + let sizeOpen = 0 + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Start of code. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function start(code) { + // To do: parse whitespace like `markdown-rs`. + return beforeSequenceOpen(code) + } + + /** + * In opening fence, after prefix, at sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeSequenceOpen(code) { + const tail = self.events[self.events.length - 1] + initialPrefix = + tail && tail[1].type === 'linePrefix' + ? tail[2].sliceSerialize(tail[1], true).length + : 0 + marker = code + effects.enter('codeFenced') + effects.enter('codeFencedFence') + effects.enter('codeFencedFenceSequence') + return sequenceOpen(code) + } + + /** + * In opening fence sequence. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === marker) { + sizeOpen++ + effects.consume(code) + return sequenceOpen + } + if (sizeOpen < 3) { + return nok(code) + } + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, infoBefore, 'whitespace')(code) + : infoBefore(code) + } + + /** + * In opening fence, after the sequence (and optional whitespace), before info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function infoBefore(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return self.interrupt + ? ok(code) + : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFencedFenceInfo') + effects.enter('chunkString', { + contentType: 'string' + }) + return info(code) + } + + /** + * In info. + * + * ```markdown + * > | ~~~js + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function info(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return infoBefore(code) + } + if (markdownSpace(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceInfo') + return factorySpace(effects, metaBefore, 'whitespace')(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return info + } + + /** + * In opening fence, after info and whitespace, before meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function metaBefore(code) { + if (code === null || markdownLineEnding(code)) { + return infoBefore(code) + } + effects.enter('codeFencedFenceMeta') + effects.enter('chunkString', { + contentType: 'string' + }) + return meta(code) + } + + /** + * In meta. + * + * ```markdown + * > | ~~~js eval + * ^ + * | alert(1) + * | ~~~ + * ``` + * + * @type {State} + */ + function meta(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('chunkString') + effects.exit('codeFencedFenceMeta') + return infoBefore(code) + } + if (code === 96 && code === marker) { + return nok(code) + } + effects.consume(code) + return meta + } + + /** + * At eol/eof in code, before a non-lazy closing fence or content. + * + * ```markdown + * > | ~~~js + * ^ + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function atNonLazyBreak(code) { + return effects.attempt(closeStart, after, contentBefore)(code) + } + + /** + * Before code content, not a closing fence, at eol. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return contentStart + } + + /** + * Before code content, not a closing fence. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentStart(code) { + return initialPrefix > 0 && markdownSpace(code) + ? factorySpace( + effects, + beforeContentChunk, + 'linePrefix', + initialPrefix + 1 + )(code) + : beforeContentChunk(code) + } + + /** + * Before code content, after optional prefix. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^ + * | ~~~ + * ``` + * + * @type {State} + */ + function beforeContentChunk(code) { + if (code === null || markdownLineEnding(code)) { + return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code) + } + effects.enter('codeFlowValue') + return contentChunk(code) + } + + /** + * In code content. + * + * ```markdown + * | ~~~js + * > | alert(1) + * ^^^^^^^^ + * | ~~~ + * ``` + * + * @type {State} + */ + function contentChunk(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFlowValue') + return beforeContentChunk(code) + } + effects.consume(code) + return contentChunk + } + + /** + * After code. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + effects.exit('codeFenced') + return ok(code) + } + + /** + * @this {TokenizeContext} + * @type {Tokenizer} + */ + function tokenizeCloseStart(effects, ok, nok) { + let size = 0 + return startBefore + + /** + * + * + * @type {State} + */ + function startBefore(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return start + } + + /** + * Before closing fence, at optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + // Always populated by defaults. + + // To do: `enter` here or in next state? + effects.enter('codeFencedFence') + return markdownSpace(code) + ? factorySpace( + effects, + beforeSequenceClose, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : beforeSequenceClose(code) + } + + /** + * In closing fence, after optional whitespace, at sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function beforeSequenceClose(code) { + if (code === marker) { + effects.enter('codeFencedFenceSequence') + return sequenceClose(code) + } + return nok(code) + } + + /** + * In closing fence sequence. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + if (code === marker) { + size++ + effects.consume(code) + return sequenceClose + } + if (size >= sizeOpen) { + effects.exit('codeFencedFenceSequence') + return markdownSpace(code) + ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) + : sequenceCloseAfter(code) + } + return nok(code) + } + + /** + * After closing fence sequence, after optional whitespace. + * + * ```markdown + * | ~~~js + * | alert(1) + * > | ~~~ + * ^ + * ``` + * + * @type {State} + */ + function sequenceCloseAfter(code) { + if (code === null || markdownLineEnding(code)) { + effects.exit('codeFencedFence') + return ok(code) + } + return nok(code) + } + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeNonLazyContinuation(effects, ok, nok) { + const self = this + return start + + /** + * + * + * @type {State} + */ + function start(code) { + if (code === null) { + return nok(code) + } + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineStart + } + + /** + * + * + * @type {State} + */ + function lineStart(code) { + return self.parser.lazy[self.now().line] ? nok(code) : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/character-entities/index.js +/** + * Map of named character references. + * + * @type {Record<string, string>} + */ +const characterEntities = { + AElig: 'Æ', + AMP: '&', + Aacute: 'Á', + Abreve: 'Ă', + Acirc: 'Â', + Acy: 'А', + Afr: '𝔄', + Agrave: 'À', + Alpha: 'Α', + Amacr: 'Ā', + And: '⩓', + Aogon: 'Ą', + Aopf: '𝔸', + ApplyFunction: '⁡', + Aring: 'Å', + Ascr: '𝒜', + Assign: '≔', + Atilde: 'Ã', + Auml: 'Ä', + Backslash: '∖', + Barv: '⫧', + Barwed: '⌆', + Bcy: 'Б', + Because: '∵', + Bernoullis: 'ℬ', + Beta: 'Β', + Bfr: '𝔅', + Bopf: '𝔹', + Breve: '˘', + Bscr: 'ℬ', + Bumpeq: '≎', + CHcy: 'Ч', + COPY: '©', + Cacute: 'Ć', + Cap: '⋒', + CapitalDifferentialD: 'ⅅ', + Cayleys: 'ℭ', + Ccaron: 'Č', + Ccedil: 'Ç', + Ccirc: 'Ĉ', + Cconint: '∰', + Cdot: 'Ċ', + Cedilla: '¸', + CenterDot: '·', + Cfr: 'ℭ', + Chi: 'Χ', + CircleDot: '⊙', + CircleMinus: '⊖', + CirclePlus: '⊕', + CircleTimes: '⊗', + ClockwiseContourIntegral: '∲', + CloseCurlyDoubleQuote: '”', + CloseCurlyQuote: '’', + Colon: '∷', + Colone: '⩴', + Congruent: '≡', + Conint: '∯', + ContourIntegral: '∮', + Copf: 'ℂ', + Coproduct: '∐', + CounterClockwiseContourIntegral: '∳', + Cross: '⨯', + Cscr: '𝒞', + Cup: '⋓', + CupCap: '≍', + DD: 'ⅅ', + DDotrahd: '⤑', + DJcy: 'Ђ', + DScy: 'Ѕ', + DZcy: 'Џ', + Dagger: '‡', + Darr: '↡', + Dashv: '⫤', + Dcaron: 'Ď', + Dcy: 'Д', + Del: '∇', + Delta: 'Δ', + Dfr: '𝔇', + DiacriticalAcute: '´', + DiacriticalDot: '˙', + DiacriticalDoubleAcute: '˝', + DiacriticalGrave: '`', + DiacriticalTilde: '˜', + Diamond: '⋄', + DifferentialD: 'ⅆ', + Dopf: '𝔻', + Dot: '¨', + DotDot: '⃜', + DotEqual: '≐', + DoubleContourIntegral: '∯', + DoubleDot: '¨', + DoubleDownArrow: '⇓', + DoubleLeftArrow: '⇐', + DoubleLeftRightArrow: '⇔', + DoubleLeftTee: '⫤', + DoubleLongLeftArrow: '⟸', + DoubleLongLeftRightArrow: '⟺', + DoubleLongRightArrow: '⟹', + DoubleRightArrow: '⇒', + DoubleRightTee: '⊨', + DoubleUpArrow: '⇑', + DoubleUpDownArrow: '⇕', + DoubleVerticalBar: '∥', + DownArrow: '↓', + DownArrowBar: '⤓', + DownArrowUpArrow: '⇵', + DownBreve: '̑', + DownLeftRightVector: '⥐', + DownLeftTeeVector: '⥞', + DownLeftVector: '↽', + DownLeftVectorBar: '⥖', + DownRightTeeVector: '⥟', + DownRightVector: '⇁', + DownRightVectorBar: '⥗', + DownTee: '⊤', + DownTeeArrow: '↧', + Downarrow: '⇓', + Dscr: '𝒟', + Dstrok: 'Đ', + ENG: 'Ŋ', + ETH: 'Ð', + Eacute: 'É', + Ecaron: 'Ě', + Ecirc: 'Ê', + Ecy: 'Э', + Edot: 'Ė', + Efr: '𝔈', + Egrave: 'È', + Element: '∈', + Emacr: 'Ē', + EmptySmallSquare: '◻', + EmptyVerySmallSquare: '▫', + Eogon: 'Ę', + Eopf: '𝔼', + Epsilon: 'Ε', + Equal: '⩵', + EqualTilde: '≂', + Equilibrium: '⇌', + Escr: 'ℰ', + Esim: '⩳', + Eta: 'Η', + Euml: 'Ë', + Exists: '∃', + ExponentialE: 'ⅇ', + Fcy: 'Ф', + Ffr: '𝔉', + FilledSmallSquare: '◼', + FilledVerySmallSquare: '▪', + Fopf: '𝔽', + ForAll: '∀', + Fouriertrf: 'ℱ', + Fscr: 'ℱ', + GJcy: 'Ѓ', + GT: '>', + Gamma: 'Γ', + Gammad: 'Ϝ', + Gbreve: 'Ğ', + Gcedil: 'Ģ', + Gcirc: 'Ĝ', + Gcy: 'Г', + Gdot: 'Ġ', + Gfr: '𝔊', + Gg: '⋙', + Gopf: '𝔾', + GreaterEqual: '≥', + GreaterEqualLess: '⋛', + GreaterFullEqual: '≧', + GreaterGreater: '⪢', + GreaterLess: '≷', + GreaterSlantEqual: '⩾', + GreaterTilde: '≳', + Gscr: '𝒢', + Gt: '≫', + HARDcy: 'Ъ', + Hacek: 'ˇ', + Hat: '^', + Hcirc: 'Ĥ', + Hfr: 'ℌ', + HilbertSpace: 'ℋ', + Hopf: 'ℍ', + HorizontalLine: '─', + Hscr: 'ℋ', + Hstrok: 'Ħ', + HumpDownHump: '≎', + HumpEqual: '≏', + IEcy: 'Е', + IJlig: 'IJ', + IOcy: 'Ё', + Iacute: 'Í', + Icirc: 'Î', + Icy: 'И', + Idot: 'İ', + Ifr: 'ℑ', + Igrave: 'Ì', + Im: 'ℑ', + Imacr: 'Ī', + ImaginaryI: 'ⅈ', + Implies: '⇒', + Int: '∬', + Integral: '∫', + Intersection: '⋂', + InvisibleComma: '⁣', + InvisibleTimes: '⁢', + Iogon: 'Į', + Iopf: '𝕀', + Iota: 'Ι', + Iscr: 'ℐ', + Itilde: 'Ĩ', + Iukcy: 'І', + Iuml: 'Ï', + Jcirc: 'Ĵ', + Jcy: 'Й', + Jfr: '𝔍', + Jopf: '𝕁', + Jscr: '𝒥', + Jsercy: 'Ј', + Jukcy: 'Є', + KHcy: 'Х', + KJcy: 'Ќ', + Kappa: 'Κ', + Kcedil: 'Ķ', + Kcy: 'К', + Kfr: '𝔎', + Kopf: '𝕂', + Kscr: '𝒦', + LJcy: 'Љ', + LT: '<', + Lacute: 'Ĺ', + Lambda: 'Λ', + Lang: '⟪', + Laplacetrf: 'ℒ', + Larr: '↞', + Lcaron: 'Ľ', + Lcedil: 'Ļ', + Lcy: 'Л', + LeftAngleBracket: '⟨', + LeftArrow: '←', + LeftArrowBar: '⇤', + LeftArrowRightArrow: '⇆', + LeftCeiling: '⌈', + LeftDoubleBracket: '⟦', + LeftDownTeeVector: '⥡', + LeftDownVector: '⇃', + LeftDownVectorBar: '⥙', + LeftFloor: '⌊', + LeftRightArrow: '↔', + LeftRightVector: '⥎', + LeftTee: '⊣', + LeftTeeArrow: '↤', + LeftTeeVector: '⥚', + LeftTriangle: '⊲', + LeftTriangleBar: '⧏', + LeftTriangleEqual: '⊴', + LeftUpDownVector: '⥑', + LeftUpTeeVector: '⥠', + LeftUpVector: '↿', + LeftUpVectorBar: '⥘', + LeftVector: '↼', + LeftVectorBar: '⥒', + Leftarrow: '⇐', + Leftrightarrow: '⇔', + LessEqualGreater: '⋚', + LessFullEqual: '≦', + LessGreater: '≶', + LessLess: '⪡', + LessSlantEqual: '⩽', + LessTilde: '≲', + Lfr: '𝔏', + Ll: '⋘', + Lleftarrow: '⇚', + Lmidot: 'Ŀ', + LongLeftArrow: '⟵', + LongLeftRightArrow: '⟷', + LongRightArrow: '⟶', + Longleftarrow: '⟸', + Longleftrightarrow: '⟺', + Longrightarrow: '⟹', + Lopf: '𝕃', + LowerLeftArrow: '↙', + LowerRightArrow: '↘', + Lscr: 'ℒ', + Lsh: '↰', + Lstrok: 'Ł', + Lt: '≪', + Map: '⤅', + Mcy: 'М', + MediumSpace: ' ', + Mellintrf: 'ℳ', + Mfr: '𝔐', + MinusPlus: '∓', + Mopf: '𝕄', + Mscr: 'ℳ', + Mu: 'Μ', + NJcy: 'Њ', + Nacute: 'Ń', + Ncaron: 'Ň', + Ncedil: 'Ņ', + Ncy: 'Н', + NegativeMediumSpace: '​', + NegativeThickSpace: '​', + NegativeThinSpace: '​', + NegativeVeryThinSpace: '​', + NestedGreaterGreater: '≫', + NestedLessLess: '≪', + NewLine: '\n', + Nfr: '𝔑', + NoBreak: '⁠', + NonBreakingSpace: ' ', + Nopf: 'ℕ', + Not: '⫬', + NotCongruent: '≢', + NotCupCap: '≭', + NotDoubleVerticalBar: '∦', + NotElement: '∉', + NotEqual: '≠', + NotEqualTilde: '≂̸', + NotExists: '∄', + NotGreater: '≯', + NotGreaterEqual: '≱', + NotGreaterFullEqual: '≧̸', + NotGreaterGreater: '≫̸', + NotGreaterLess: '≹', + NotGreaterSlantEqual: '⩾̸', + NotGreaterTilde: '≵', + NotHumpDownHump: '≎̸', + NotHumpEqual: '≏̸', + NotLeftTriangle: '⋪', + NotLeftTriangleBar: '⧏̸', + NotLeftTriangleEqual: '⋬', + NotLess: '≮', + NotLessEqual: '≰', + NotLessGreater: '≸', + NotLessLess: '≪̸', + NotLessSlantEqual: '⩽̸', + NotLessTilde: '≴', + NotNestedGreaterGreater: '⪢̸', + NotNestedLessLess: '⪡̸', + NotPrecedes: '⊀', + NotPrecedesEqual: '⪯̸', + NotPrecedesSlantEqual: '⋠', + NotReverseElement: '∌', + NotRightTriangle: '⋫', + NotRightTriangleBar: '⧐̸', + NotRightTriangleEqual: '⋭', + NotSquareSubset: '⊏̸', + NotSquareSubsetEqual: '⋢', + NotSquareSuperset: '⊐̸', + NotSquareSupersetEqual: '⋣', + NotSubset: '⊂⃒', + NotSubsetEqual: '⊈', + NotSucceeds: '⊁', + NotSucceedsEqual: '⪰̸', + NotSucceedsSlantEqual: '⋡', + NotSucceedsTilde: '≿̸', + NotSuperset: '⊃⃒', + NotSupersetEqual: '⊉', + NotTilde: '≁', + NotTildeEqual: '≄', + NotTildeFullEqual: '≇', + NotTildeTilde: '≉', + NotVerticalBar: '∤', + Nscr: '𝒩', + Ntilde: 'Ñ', + Nu: 'Ν', + OElig: 'Œ', + Oacute: 'Ó', + Ocirc: 'Ô', + Ocy: 'О', + Odblac: 'Ő', + Ofr: '𝔒', + Ograve: 'Ò', + Omacr: 'Ō', + Omega: 'Ω', + Omicron: 'Ο', + Oopf: '𝕆', + OpenCurlyDoubleQuote: '“', + OpenCurlyQuote: '‘', + Or: '⩔', + Oscr: '𝒪', + Oslash: 'Ø', + Otilde: 'Õ', + Otimes: '⨷', + Ouml: 'Ö', + OverBar: '‾', + OverBrace: '⏞', + OverBracket: '⎴', + OverParenthesis: '⏜', + PartialD: '∂', + Pcy: 'П', + Pfr: '𝔓', + Phi: 'Φ', + Pi: 'Π', + PlusMinus: '±', + Poincareplane: 'ℌ', + Popf: 'ℙ', + Pr: '⪻', + Precedes: '≺', + PrecedesEqual: '⪯', + PrecedesSlantEqual: '≼', + PrecedesTilde: '≾', + Prime: '″', + Product: '∏', + Proportion: '∷', + Proportional: '∝', + Pscr: '𝒫', + Psi: 'Ψ', + QUOT: '"', + Qfr: '𝔔', + Qopf: 'ℚ', + Qscr: '𝒬', + RBarr: '⤐', + REG: '®', + Racute: 'Ŕ', + Rang: '⟫', + Rarr: '↠', + Rarrtl: '⤖', + Rcaron: 'Ř', + Rcedil: 'Ŗ', + Rcy: 'Р', + Re: 'ℜ', + ReverseElement: '∋', + ReverseEquilibrium: '⇋', + ReverseUpEquilibrium: '⥯', + Rfr: 'ℜ', + Rho: 'Ρ', + RightAngleBracket: '⟩', + RightArrow: '→', + RightArrowBar: '⇥', + RightArrowLeftArrow: '⇄', + RightCeiling: '⌉', + RightDoubleBracket: '⟧', + RightDownTeeVector: '⥝', + RightDownVector: '⇂', + RightDownVectorBar: '⥕', + RightFloor: '⌋', + RightTee: '⊢', + RightTeeArrow: '↦', + RightTeeVector: '⥛', + RightTriangle: '⊳', + RightTriangleBar: '⧐', + RightTriangleEqual: '⊵', + RightUpDownVector: '⥏', + RightUpTeeVector: '⥜', + RightUpVector: '↾', + RightUpVectorBar: '⥔', + RightVector: '⇀', + RightVectorBar: '⥓', + Rightarrow: '⇒', + Ropf: 'ℝ', + RoundImplies: '⥰', + Rrightarrow: '⇛', + Rscr: 'ℛ', + Rsh: '↱', + RuleDelayed: '⧴', + SHCHcy: 'Щ', + SHcy: 'Ш', + SOFTcy: 'Ь', + Sacute: 'Ś', + Sc: '⪼', + Scaron: 'Š', + Scedil: 'Ş', + Scirc: 'Ŝ', + Scy: 'С', + Sfr: '𝔖', + ShortDownArrow: '↓', + ShortLeftArrow: '←', + ShortRightArrow: '→', + ShortUpArrow: '↑', + Sigma: 'Σ', + SmallCircle: '∘', + Sopf: '𝕊', + Sqrt: '√', + Square: '□', + SquareIntersection: '⊓', + SquareSubset: '⊏', + SquareSubsetEqual: '⊑', + SquareSuperset: '⊐', + SquareSupersetEqual: '⊒', + SquareUnion: '⊔', + Sscr: '𝒮', + Star: '⋆', + Sub: '⋐', + Subset: '⋐', + SubsetEqual: '⊆', + Succeeds: '≻', + SucceedsEqual: '⪰', + SucceedsSlantEqual: '≽', + SucceedsTilde: '≿', + SuchThat: '∋', + Sum: '∑', + Sup: '⋑', + Superset: '⊃', + SupersetEqual: '⊇', + Supset: '⋑', + THORN: 'Þ', + TRADE: '™', + TSHcy: 'Ћ', + TScy: 'Ц', + Tab: '\t', + Tau: 'Τ', + Tcaron: 'Ť', + Tcedil: 'Ţ', + Tcy: 'Т', + Tfr: '𝔗', + Therefore: '∴', + Theta: 'Θ', + ThickSpace: '  ', + ThinSpace: ' ', + Tilde: '∼', + TildeEqual: '≃', + TildeFullEqual: '≅', + TildeTilde: '≈', + Topf: '𝕋', + TripleDot: '⃛', + Tscr: '𝒯', + Tstrok: 'Ŧ', + Uacute: 'Ú', + Uarr: '↟', + Uarrocir: '⥉', + Ubrcy: 'Ў', + Ubreve: 'Ŭ', + Ucirc: 'Û', + Ucy: 'У', + Udblac: 'Ű', + Ufr: '𝔘', + Ugrave: 'Ù', + Umacr: 'Ū', + UnderBar: '_', + UnderBrace: '⏟', + UnderBracket: '⎵', + UnderParenthesis: '⏝', + Union: '⋃', + UnionPlus: '⊎', + Uogon: 'Ų', + Uopf: '𝕌', + UpArrow: '↑', + UpArrowBar: '⤒', + UpArrowDownArrow: '⇅', + UpDownArrow: '↕', + UpEquilibrium: '⥮', + UpTee: '⊥', + UpTeeArrow: '↥', + Uparrow: '⇑', + Updownarrow: '⇕', + UpperLeftArrow: '↖', + UpperRightArrow: '↗', + Upsi: 'ϒ', + Upsilon: 'Υ', + Uring: 'Ů', + Uscr: '𝒰', + Utilde: 'Ũ', + Uuml: 'Ü', + VDash: '⊫', + Vbar: '⫫', + Vcy: 'В', + Vdash: '⊩', + Vdashl: '⫦', + Vee: '⋁', + Verbar: '‖', + Vert: '‖', + VerticalBar: '∣', + VerticalLine: '|', + VerticalSeparator: '❘', + VerticalTilde: '≀', + VeryThinSpace: ' ', + Vfr: '𝔙', + Vopf: '𝕍', + Vscr: '𝒱', + Vvdash: '⊪', + Wcirc: 'Ŵ', + Wedge: '⋀', + Wfr: '𝔚', + Wopf: '𝕎', + Wscr: '𝒲', + Xfr: '𝔛', + Xi: 'Ξ', + Xopf: '𝕏', + Xscr: '𝒳', + YAcy: 'Я', + YIcy: 'Ї', + YUcy: 'Ю', + Yacute: 'Ý', + Ycirc: 'Ŷ', + Ycy: 'Ы', + Yfr: '𝔜', + Yopf: '𝕐', + Yscr: '𝒴', + Yuml: 'Ÿ', + ZHcy: 'Ж', + Zacute: 'Ź', + Zcaron: 'Ž', + Zcy: 'З', + Zdot: 'Ż', + ZeroWidthSpace: '​', + Zeta: 'Ζ', + Zfr: 'ℨ', + Zopf: 'ℤ', + Zscr: '𝒵', + aacute: 'á', + abreve: 'ă', + ac: '∾', + acE: '∾̳', + acd: '∿', + acirc: 'â', + acute: '´', + acy: 'а', + aelig: 'æ', + af: '⁡', + afr: '𝔞', + agrave: 'à', + alefsym: 'ℵ', + aleph: 'ℵ', + alpha: 'α', + amacr: 'ā', + amalg: '⨿', + amp: '&', + and: '∧', + andand: '⩕', + andd: '⩜', + andslope: '⩘', + andv: '⩚', + ang: '∠', + ange: '⦤', + angle: '∠', + angmsd: '∡', + angmsdaa: '⦨', + angmsdab: '⦩', + angmsdac: '⦪', + angmsdad: '⦫', + angmsdae: '⦬', + angmsdaf: '⦭', + angmsdag: '⦮', + angmsdah: '⦯', + angrt: '∟', + angrtvb: '⊾', + angrtvbd: '⦝', + angsph: '∢', + angst: 'Å', + angzarr: '⍼', + aogon: 'ą', + aopf: '𝕒', + ap: '≈', + apE: '⩰', + apacir: '⩯', + ape: '≊', + apid: '≋', + apos: "'", + approx: '≈', + approxeq: '≊', + aring: 'å', + ascr: '𝒶', + ast: '*', + asymp: '≈', + asympeq: '≍', + atilde: 'ã', + auml: 'ä', + awconint: '∳', + awint: '⨑', + bNot: '⫭', + backcong: '≌', + backepsilon: '϶', + backprime: '‵', + backsim: '∽', + backsimeq: '⋍', + barvee: '⊽', + barwed: '⌅', + barwedge: '⌅', + bbrk: '⎵', + bbrktbrk: '⎶', + bcong: '≌', + bcy: 'б', + bdquo: '„', + becaus: '∵', + because: '∵', + bemptyv: '⦰', + bepsi: '϶', + bernou: 'ℬ', + beta: 'β', + beth: 'ℶ', + between: '≬', + bfr: '𝔟', + bigcap: '⋂', + bigcirc: '◯', + bigcup: '⋃', + bigodot: '⨀', + bigoplus: '⨁', + bigotimes: '⨂', + bigsqcup: '⨆', + bigstar: '★', + bigtriangledown: '▽', + bigtriangleup: '△', + biguplus: '⨄', + bigvee: '⋁', + bigwedge: '⋀', + bkarow: '⤍', + blacklozenge: '⧫', + blacksquare: '▪', + blacktriangle: '▴', + blacktriangledown: '▾', + blacktriangleleft: '◂', + blacktriangleright: '▸', + blank: '␣', + blk12: '▒', + blk14: '░', + blk34: '▓', + block: '█', + bne: '=⃥', + bnequiv: '≡⃥', + bnot: '⌐', + bopf: '𝕓', + bot: '⊥', + bottom: '⊥', + bowtie: '⋈', + boxDL: '╗', + boxDR: '╔', + boxDl: '╖', + boxDr: '╓', + boxH: '═', + boxHD: '╦', + boxHU: '╩', + boxHd: '╤', + boxHu: '╧', + boxUL: '╝', + boxUR: '╚', + boxUl: '╜', + boxUr: '╙', + boxV: '║', + boxVH: '╬', + boxVL: '╣', + boxVR: '╠', + boxVh: '╫', + boxVl: '╢', + boxVr: '╟', + boxbox: '⧉', + boxdL: '╕', + boxdR: '╒', + boxdl: '┐', + boxdr: '┌', + boxh: '─', + boxhD: '╥', + boxhU: '╨', + boxhd: '┬', + boxhu: '┴', + boxminus: '⊟', + boxplus: '⊞', + boxtimes: '⊠', + boxuL: '╛', + boxuR: '╘', + boxul: '┘', + boxur: '└', + boxv: '│', + boxvH: '╪', + boxvL: '╡', + boxvR: '╞', + boxvh: '┼', + boxvl: '┤', + boxvr: '├', + bprime: '‵', + breve: '˘', + brvbar: '¦', + bscr: '𝒷', + bsemi: '⁏', + bsim: '∽', + bsime: '⋍', + bsol: '\\', + bsolb: '⧅', + bsolhsub: '⟈', + bull: '•', + bullet: '•', + bump: '≎', + bumpE: '⪮', + bumpe: '≏', + bumpeq: '≏', + cacute: 'ć', + cap: '∩', + capand: '⩄', + capbrcup: '⩉', + capcap: '⩋', + capcup: '⩇', + capdot: '⩀', + caps: '∩︀', + caret: '⁁', + caron: 'ˇ', + ccaps: '⩍', + ccaron: 'č', + ccedil: 'ç', + ccirc: 'ĉ', + ccups: '⩌', + ccupssm: '⩐', + cdot: 'ċ', + cedil: '¸', + cemptyv: '⦲', + cent: '¢', + centerdot: '·', + cfr: '𝔠', + chcy: 'ч', + check: '✓', + checkmark: '✓', + chi: 'χ', + cir: '○', + cirE: '⧃', + circ: 'ˆ', + circeq: '≗', + circlearrowleft: '↺', + circlearrowright: '↻', + circledR: '®', + circledS: 'Ⓢ', + circledast: '⊛', + circledcirc: '⊚', + circleddash: '⊝', + cire: '≗', + cirfnint: '⨐', + cirmid: '⫯', + cirscir: '⧂', + clubs: '♣', + clubsuit: '♣', + colon: ':', + colone: '≔', + coloneq: '≔', + comma: ',', + commat: '@', + comp: '∁', + compfn: '∘', + complement: '∁', + complexes: 'ℂ', + cong: '≅', + congdot: '⩭', + conint: '∮', + copf: '𝕔', + coprod: '∐', + copy: '©', + copysr: '℗', + crarr: '↵', + cross: '✗', + cscr: '𝒸', + csub: '⫏', + csube: '⫑', + csup: '⫐', + csupe: '⫒', + ctdot: '⋯', + cudarrl: '⤸', + cudarrr: '⤵', + cuepr: '⋞', + cuesc: '⋟', + cularr: '↶', + cularrp: '⤽', + cup: '∪', + cupbrcap: '⩈', + cupcap: '⩆', + cupcup: '⩊', + cupdot: '⊍', + cupor: '⩅', + cups: '∪︀', + curarr: '↷', + curarrm: '⤼', + curlyeqprec: '⋞', + curlyeqsucc: '⋟', + curlyvee: '⋎', + curlywedge: '⋏', + curren: '¤', + curvearrowleft: '↶', + curvearrowright: '↷', + cuvee: '⋎', + cuwed: '⋏', + cwconint: '∲', + cwint: '∱', + cylcty: '⌭', + dArr: '⇓', + dHar: '⥥', + dagger: '†', + daleth: 'ℸ', + darr: '↓', + dash: '‐', + dashv: '⊣', + dbkarow: '⤏', + dblac: '˝', + dcaron: 'ď', + dcy: 'д', + dd: 'ⅆ', + ddagger: '‡', + ddarr: '⇊', + ddotseq: '⩷', + deg: '°', + delta: 'δ', + demptyv: '⦱', + dfisht: '⥿', + dfr: '𝔡', + dharl: '⇃', + dharr: '⇂', + diam: '⋄', + diamond: '⋄', + diamondsuit: '♦', + diams: '♦', + die: '¨', + digamma: 'ϝ', + disin: '⋲', + div: '÷', + divide: '÷', + divideontimes: '⋇', + divonx: '⋇', + djcy: 'ђ', + dlcorn: '⌞', + dlcrop: '⌍', + dollar: '$', + dopf: '𝕕', + dot: '˙', + doteq: '≐', + doteqdot: '≑', + dotminus: '∸', + dotplus: '∔', + dotsquare: '⊡', + doublebarwedge: '⌆', + downarrow: '↓', + downdownarrows: '⇊', + downharpoonleft: '⇃', + downharpoonright: '⇂', + drbkarow: '⤐', + drcorn: '⌟', + drcrop: '⌌', + dscr: '𝒹', + dscy: 'ѕ', + dsol: '⧶', + dstrok: 'đ', + dtdot: '⋱', + dtri: '▿', + dtrif: '▾', + duarr: '⇵', + duhar: '⥯', + dwangle: '⦦', + dzcy: 'џ', + dzigrarr: '⟿', + eDDot: '⩷', + eDot: '≑', + eacute: 'é', + easter: '⩮', + ecaron: 'ě', + ecir: '≖', + ecirc: 'ê', + ecolon: '≕', + ecy: 'э', + edot: 'ė', + ee: 'ⅇ', + efDot: '≒', + efr: '𝔢', + eg: '⪚', + egrave: 'è', + egs: '⪖', + egsdot: '⪘', + el: '⪙', + elinters: '⏧', + ell: 'ℓ', + els: '⪕', + elsdot: '⪗', + emacr: 'ē', + empty: '∅', + emptyset: '∅', + emptyv: '∅', + emsp13: ' ', + emsp14: ' ', + emsp: ' ', + eng: 'ŋ', + ensp: ' ', + eogon: 'ę', + eopf: '𝕖', + epar: '⋕', + eparsl: '⧣', + eplus: '⩱', + epsi: 'ε', + epsilon: 'ε', + epsiv: 'ϵ', + eqcirc: '≖', + eqcolon: '≕', + eqsim: '≂', + eqslantgtr: '⪖', + eqslantless: '⪕', + equals: '=', + equest: '≟', + equiv: '≡', + equivDD: '⩸', + eqvparsl: '⧥', + erDot: '≓', + erarr: '⥱', + escr: 'ℯ', + esdot: '≐', + esim: '≂', + eta: 'η', + eth: 'ð', + euml: 'ë', + euro: '€', + excl: '!', + exist: '∃', + expectation: 'ℰ', + exponentiale: 'ⅇ', + fallingdotseq: '≒', + fcy: 'ф', + female: '♀', + ffilig: 'ffi', + fflig: 'ff', + ffllig: 'ffl', + ffr: '𝔣', + filig: 'fi', + fjlig: 'fj', + flat: '♭', + fllig: 'fl', + fltns: '▱', + fnof: 'ƒ', + fopf: '𝕗', + forall: '∀', + fork: '⋔', + forkv: '⫙', + fpartint: '⨍', + frac12: '½', + frac13: '⅓', + frac14: '¼', + frac15: '⅕', + frac16: '⅙', + frac18: '⅛', + frac23: '⅔', + frac25: '⅖', + frac34: '¾', + frac35: '⅗', + frac38: '⅜', + frac45: '⅘', + frac56: '⅚', + frac58: '⅝', + frac78: '⅞', + frasl: '⁄', + frown: '⌢', + fscr: '𝒻', + gE: '≧', + gEl: '⪌', + gacute: 'ǵ', + gamma: 'γ', + gammad: 'ϝ', + gap: '⪆', + gbreve: 'ğ', + gcirc: 'ĝ', + gcy: 'г', + gdot: 'ġ', + ge: '≥', + gel: '⋛', + geq: '≥', + geqq: '≧', + geqslant: '⩾', + ges: '⩾', + gescc: '⪩', + gesdot: '⪀', + gesdoto: '⪂', + gesdotol: '⪄', + gesl: '⋛︀', + gesles: '⪔', + gfr: '𝔤', + gg: '≫', + ggg: '⋙', + gimel: 'ℷ', + gjcy: 'ѓ', + gl: '≷', + glE: '⪒', + gla: '⪥', + glj: '⪤', + gnE: '≩', + gnap: '⪊', + gnapprox: '⪊', + gne: '⪈', + gneq: '⪈', + gneqq: '≩', + gnsim: '⋧', + gopf: '𝕘', + grave: '`', + gscr: 'ℊ', + gsim: '≳', + gsime: '⪎', + gsiml: '⪐', + gt: '>', + gtcc: '⪧', + gtcir: '⩺', + gtdot: '⋗', + gtlPar: '⦕', + gtquest: '⩼', + gtrapprox: '⪆', + gtrarr: '⥸', + gtrdot: '⋗', + gtreqless: '⋛', + gtreqqless: '⪌', + gtrless: '≷', + gtrsim: '≳', + gvertneqq: '≩︀', + gvnE: '≩︀', + hArr: '⇔', + hairsp: ' ', + half: '½', + hamilt: 'ℋ', + hardcy: 'ъ', + harr: '↔', + harrcir: '⥈', + harrw: '↭', + hbar: 'ℏ', + hcirc: 'ĥ', + hearts: '♥', + heartsuit: '♥', + hellip: '…', + hercon: '⊹', + hfr: '𝔥', + hksearow: '⤥', + hkswarow: '⤦', + hoarr: '⇿', + homtht: '∻', + hookleftarrow: '↩', + hookrightarrow: '↪', + hopf: '𝕙', + horbar: '―', + hscr: '𝒽', + hslash: 'ℏ', + hstrok: 'ħ', + hybull: '⁃', + hyphen: '‐', + iacute: 'í', + ic: '⁣', + icirc: 'î', + icy: 'и', + iecy: 'е', + iexcl: '¡', + iff: '⇔', + ifr: '𝔦', + igrave: 'ì', + ii: 'ⅈ', + iiiint: '⨌', + iiint: '∭', + iinfin: '⧜', + iiota: '℩', + ijlig: 'ij', + imacr: 'ī', + image: 'ℑ', + imagline: 'ℐ', + imagpart: 'ℑ', + imath: 'ı', + imof: '⊷', + imped: 'Ƶ', + in: '∈', + incare: '℅', + infin: '∞', + infintie: '⧝', + inodot: 'ı', + int: '∫', + intcal: '⊺', + integers: 'ℤ', + intercal: '⊺', + intlarhk: '⨗', + intprod: '⨼', + iocy: 'ё', + iogon: 'į', + iopf: '𝕚', + iota: 'ι', + iprod: '⨼', + iquest: '¿', + iscr: '𝒾', + isin: '∈', + isinE: '⋹', + isindot: '⋵', + isins: '⋴', + isinsv: '⋳', + isinv: '∈', + it: '⁢', + itilde: 'ĩ', + iukcy: 'і', + iuml: 'ï', + jcirc: 'ĵ', + jcy: 'й', + jfr: '𝔧', + jmath: 'ȷ', + jopf: '𝕛', + jscr: '𝒿', + jsercy: 'ј', + jukcy: 'є', + kappa: 'κ', + kappav: 'ϰ', + kcedil: 'ķ', + kcy: 'к', + kfr: '𝔨', + kgreen: 'ĸ', + khcy: 'х', + kjcy: 'ќ', + kopf: '𝕜', + kscr: '𝓀', + lAarr: '⇚', + lArr: '⇐', + lAtail: '⤛', + lBarr: '⤎', + lE: '≦', + lEg: '⪋', + lHar: '⥢', + lacute: 'ĺ', + laemptyv: '⦴', + lagran: 'ℒ', + lambda: 'λ', + lang: '⟨', + langd: '⦑', + langle: '⟨', + lap: '⪅', + laquo: '«', + larr: '←', + larrb: '⇤', + larrbfs: '⤟', + larrfs: '⤝', + larrhk: '↩', + larrlp: '↫', + larrpl: '⤹', + larrsim: '⥳', + larrtl: '↢', + lat: '⪫', + latail: '⤙', + late: '⪭', + lates: '⪭︀', + lbarr: '⤌', + lbbrk: '❲', + lbrace: '{', + lbrack: '[', + lbrke: '⦋', + lbrksld: '⦏', + lbrkslu: '⦍', + lcaron: 'ľ', + lcedil: 'ļ', + lceil: '⌈', + lcub: '{', + lcy: 'л', + ldca: '⤶', + ldquo: '“', + ldquor: '„', + ldrdhar: '⥧', + ldrushar: '⥋', + ldsh: '↲', + le: '≤', + leftarrow: '←', + leftarrowtail: '↢', + leftharpoondown: '↽', + leftharpoonup: '↼', + leftleftarrows: '⇇', + leftrightarrow: '↔', + leftrightarrows: '⇆', + leftrightharpoons: '⇋', + leftrightsquigarrow: '↭', + leftthreetimes: '⋋', + leg: '⋚', + leq: '≤', + leqq: '≦', + leqslant: '⩽', + les: '⩽', + lescc: '⪨', + lesdot: '⩿', + lesdoto: '⪁', + lesdotor: '⪃', + lesg: '⋚︀', + lesges: '⪓', + lessapprox: '⪅', + lessdot: '⋖', + lesseqgtr: '⋚', + lesseqqgtr: '⪋', + lessgtr: '≶', + lesssim: '≲', + lfisht: '⥼', + lfloor: '⌊', + lfr: '𝔩', + lg: '≶', + lgE: '⪑', + lhard: '↽', + lharu: '↼', + lharul: '⥪', + lhblk: '▄', + ljcy: 'љ', + ll: '≪', + llarr: '⇇', + llcorner: '⌞', + llhard: '⥫', + lltri: '◺', + lmidot: 'ŀ', + lmoust: '⎰', + lmoustache: '⎰', + lnE: '≨', + lnap: '⪉', + lnapprox: '⪉', + lne: '⪇', + lneq: '⪇', + lneqq: '≨', + lnsim: '⋦', + loang: '⟬', + loarr: '⇽', + lobrk: '⟦', + longleftarrow: '⟵', + longleftrightarrow: '⟷', + longmapsto: '⟼', + longrightarrow: '⟶', + looparrowleft: '↫', + looparrowright: '↬', + lopar: '⦅', + lopf: '𝕝', + loplus: '⨭', + lotimes: '⨴', + lowast: '∗', + lowbar: '_', + loz: '◊', + lozenge: '◊', + lozf: '⧫', + lpar: '(', + lparlt: '⦓', + lrarr: '⇆', + lrcorner: '⌟', + lrhar: '⇋', + lrhard: '⥭', + lrm: '‎', + lrtri: '⊿', + lsaquo: '‹', + lscr: '𝓁', + lsh: '↰', + lsim: '≲', + lsime: '⪍', + lsimg: '⪏', + lsqb: '[', + lsquo: '‘', + lsquor: '‚', + lstrok: 'ł', + lt: '<', + ltcc: '⪦', + ltcir: '⩹', + ltdot: '⋖', + lthree: '⋋', + ltimes: '⋉', + ltlarr: '⥶', + ltquest: '⩻', + ltrPar: '⦖', + ltri: '◃', + ltrie: '⊴', + ltrif: '◂', + lurdshar: '⥊', + luruhar: '⥦', + lvertneqq: '≨︀', + lvnE: '≨︀', + mDDot: '∺', + macr: '¯', + male: '♂', + malt: '✠', + maltese: '✠', + map: '↦', + mapsto: '↦', + mapstodown: '↧', + mapstoleft: '↤', + mapstoup: '↥', + marker: '▮', + mcomma: '⨩', + mcy: 'м', + mdash: '—', + measuredangle: '∡', + mfr: '𝔪', + mho: '℧', + micro: 'µ', + mid: '∣', + midast: '*', + midcir: '⫰', + middot: '·', + minus: '−', + minusb: '⊟', + minusd: '∸', + minusdu: '⨪', + mlcp: '⫛', + mldr: '…', + mnplus: '∓', + models: '⊧', + mopf: '𝕞', + mp: '∓', + mscr: '𝓂', + mstpos: '∾', + mu: 'μ', + multimap: '⊸', + mumap: '⊸', + nGg: '⋙̸', + nGt: '≫⃒', + nGtv: '≫̸', + nLeftarrow: '⇍', + nLeftrightarrow: '⇎', + nLl: '⋘̸', + nLt: '≪⃒', + nLtv: '≪̸', + nRightarrow: '⇏', + nVDash: '⊯', + nVdash: '⊮', + nabla: '∇', + nacute: 'ń', + nang: '∠⃒', + nap: '≉', + napE: '⩰̸', + napid: '≋̸', + napos: 'ʼn', + napprox: '≉', + natur: '♮', + natural: '♮', + naturals: 'ℕ', + nbsp: ' ', + nbump: '≎̸', + nbumpe: '≏̸', + ncap: '⩃', + ncaron: 'ň', + ncedil: 'ņ', + ncong: '≇', + ncongdot: '⩭̸', + ncup: '⩂', + ncy: 'н', + ndash: '–', + ne: '≠', + neArr: '⇗', + nearhk: '⤤', + nearr: '↗', + nearrow: '↗', + nedot: '≐̸', + nequiv: '≢', + nesear: '⤨', + nesim: '≂̸', + nexist: '∄', + nexists: '∄', + nfr: '𝔫', + ngE: '≧̸', + nge: '≱', + ngeq: '≱', + ngeqq: '≧̸', + ngeqslant: '⩾̸', + nges: '⩾̸', + ngsim: '≵', + ngt: '≯', + ngtr: '≯', + nhArr: '⇎', + nharr: '↮', + nhpar: '⫲', + ni: '∋', + nis: '⋼', + nisd: '⋺', + niv: '∋', + njcy: 'њ', + nlArr: '⇍', + nlE: '≦̸', + nlarr: '↚', + nldr: '‥', + nle: '≰', + nleftarrow: '↚', + nleftrightarrow: '↮', + nleq: '≰', + nleqq: '≦̸', + nleqslant: '⩽̸', + nles: '⩽̸', + nless: '≮', + nlsim: '≴', + nlt: '≮', + nltri: '⋪', + nltrie: '⋬', + nmid: '∤', + nopf: '𝕟', + not: '¬', + notin: '∉', + notinE: '⋹̸', + notindot: '⋵̸', + notinva: '∉', + notinvb: '⋷', + notinvc: '⋶', + notni: '∌', + notniva: '∌', + notnivb: '⋾', + notnivc: '⋽', + npar: '∦', + nparallel: '∦', + nparsl: '⫽⃥', + npart: '∂̸', + npolint: '⨔', + npr: '⊀', + nprcue: '⋠', + npre: '⪯̸', + nprec: '⊀', + npreceq: '⪯̸', + nrArr: '⇏', + nrarr: '↛', + nrarrc: '⤳̸', + nrarrw: '↝̸', + nrightarrow: '↛', + nrtri: '⋫', + nrtrie: '⋭', + nsc: '⊁', + nsccue: '⋡', + nsce: '⪰̸', + nscr: '𝓃', + nshortmid: '∤', + nshortparallel: '∦', + nsim: '≁', + nsime: '≄', + nsimeq: '≄', + nsmid: '∤', + nspar: '∦', + nsqsube: '⋢', + nsqsupe: '⋣', + nsub: '⊄', + nsubE: '⫅̸', + nsube: '⊈', + nsubset: '⊂⃒', + nsubseteq: '⊈', + nsubseteqq: '⫅̸', + nsucc: '⊁', + nsucceq: '⪰̸', + nsup: '⊅', + nsupE: '⫆̸', + nsupe: '⊉', + nsupset: '⊃⃒', + nsupseteq: '⊉', + nsupseteqq: '⫆̸', + ntgl: '≹', + ntilde: 'ñ', + ntlg: '≸', + ntriangleleft: '⋪', + ntrianglelefteq: '⋬', + ntriangleright: '⋫', + ntrianglerighteq: '⋭', + nu: 'ν', + num: '#', + numero: '№', + numsp: ' ', + nvDash: '⊭', + nvHarr: '⤄', + nvap: '≍⃒', + nvdash: '⊬', + nvge: '≥⃒', + nvgt: '>⃒', + nvinfin: '⧞', + nvlArr: '⤂', + nvle: '≤⃒', + nvlt: '<⃒', + nvltrie: '⊴⃒', + nvrArr: '⤃', + nvrtrie: '⊵⃒', + nvsim: '∼⃒', + nwArr: '⇖', + nwarhk: '⤣', + nwarr: '↖', + nwarrow: '↖', + nwnear: '⤧', + oS: 'Ⓢ', + oacute: 'ó', + oast: '⊛', + ocir: '⊚', + ocirc: 'ô', + ocy: 'о', + odash: '⊝', + odblac: 'ő', + odiv: '⨸', + odot: '⊙', + odsold: '⦼', + oelig: 'œ', + ofcir: '⦿', + ofr: '𝔬', + ogon: '˛', + ograve: 'ò', + ogt: '⧁', + ohbar: '⦵', + ohm: 'Ω', + oint: '∮', + olarr: '↺', + olcir: '⦾', + olcross: '⦻', + oline: '‾', + olt: '⧀', + omacr: 'ō', + omega: 'ω', + omicron: 'ο', + omid: '⦶', + ominus: '⊖', + oopf: '𝕠', + opar: '⦷', + operp: '⦹', + oplus: '⊕', + or: '∨', + orarr: '↻', + ord: '⩝', + order: 'ℴ', + orderof: 'ℴ', + ordf: 'ª', + ordm: 'º', + origof: '⊶', + oror: '⩖', + orslope: '⩗', + orv: '⩛', + oscr: 'ℴ', + oslash: 'ø', + osol: '⊘', + otilde: 'õ', + otimes: '⊗', + otimesas: '⨶', + ouml: 'ö', + ovbar: '⌽', + par: '∥', + para: '¶', + parallel: '∥', + parsim: '⫳', + parsl: '⫽', + part: '∂', + pcy: 'п', + percnt: '%', + period: '.', + permil: '‰', + perp: '⊥', + pertenk: '‱', + pfr: '𝔭', + phi: 'φ', + phiv: 'ϕ', + phmmat: 'ℳ', + phone: '☎', + pi: 'π', + pitchfork: '⋔', + piv: 'ϖ', + planck: 'ℏ', + planckh: 'ℎ', + plankv: 'ℏ', + plus: '+', + plusacir: '⨣', + plusb: '⊞', + pluscir: '⨢', + plusdo: '∔', + plusdu: '⨥', + pluse: '⩲', + plusmn: '±', + plussim: '⨦', + plustwo: '⨧', + pm: '±', + pointint: '⨕', + popf: '𝕡', + pound: '£', + pr: '≺', + prE: '⪳', + prap: '⪷', + prcue: '≼', + pre: '⪯', + prec: '≺', + precapprox: '⪷', + preccurlyeq: '≼', + preceq: '⪯', + precnapprox: '⪹', + precneqq: '⪵', + precnsim: '⋨', + precsim: '≾', + prime: '′', + primes: 'ℙ', + prnE: '⪵', + prnap: '⪹', + prnsim: '⋨', + prod: '∏', + profalar: '⌮', + profline: '⌒', + profsurf: '⌓', + prop: '∝', + propto: '∝', + prsim: '≾', + prurel: '⊰', + pscr: '𝓅', + psi: 'ψ', + puncsp: ' ', + qfr: '𝔮', + qint: '⨌', + qopf: '𝕢', + qprime: '⁗', + qscr: '𝓆', + quaternions: 'ℍ', + quatint: '⨖', + quest: '?', + questeq: '≟', + quot: '"', + rAarr: '⇛', + rArr: '⇒', + rAtail: '⤜', + rBarr: '⤏', + rHar: '⥤', + race: '∽̱', + racute: 'ŕ', + radic: '√', + raemptyv: '⦳', + rang: '⟩', + rangd: '⦒', + range: '⦥', + rangle: '⟩', + raquo: '»', + rarr: '→', + rarrap: '⥵', + rarrb: '⇥', + rarrbfs: '⤠', + rarrc: '⤳', + rarrfs: '⤞', + rarrhk: '↪', + rarrlp: '↬', + rarrpl: '⥅', + rarrsim: '⥴', + rarrtl: '↣', + rarrw: '↝', + ratail: '⤚', + ratio: '∶', + rationals: 'ℚ', + rbarr: '⤍', + rbbrk: '❳', + rbrace: '}', + rbrack: ']', + rbrke: '⦌', + rbrksld: '⦎', + rbrkslu: '⦐', + rcaron: 'ř', + rcedil: 'ŗ', + rceil: '⌉', + rcub: '}', + rcy: 'р', + rdca: '⤷', + rdldhar: '⥩', + rdquo: '”', + rdquor: '”', + rdsh: '↳', + real: 'ℜ', + realine: 'ℛ', + realpart: 'ℜ', + reals: 'ℝ', + rect: '▭', + reg: '®', + rfisht: '⥽', + rfloor: '⌋', + rfr: '𝔯', + rhard: '⇁', + rharu: '⇀', + rharul: '⥬', + rho: 'ρ', + rhov: 'ϱ', + rightarrow: '→', + rightarrowtail: '↣', + rightharpoondown: '⇁', + rightharpoonup: '⇀', + rightleftarrows: '⇄', + rightleftharpoons: '⇌', + rightrightarrows: '⇉', + rightsquigarrow: '↝', + rightthreetimes: '⋌', + ring: '˚', + risingdotseq: '≓', + rlarr: '⇄', + rlhar: '⇌', + rlm: '‏', + rmoust: '⎱', + rmoustache: '⎱', + rnmid: '⫮', + roang: '⟭', + roarr: '⇾', + robrk: '⟧', + ropar: '⦆', + ropf: '𝕣', + roplus: '⨮', + rotimes: '⨵', + rpar: ')', + rpargt: '⦔', + rppolint: '⨒', + rrarr: '⇉', + rsaquo: '›', + rscr: '𝓇', + rsh: '↱', + rsqb: ']', + rsquo: '’', + rsquor: '’', + rthree: '⋌', + rtimes: '⋊', + rtri: '▹', + rtrie: '⊵', + rtrif: '▸', + rtriltri: '⧎', + ruluhar: '⥨', + rx: '℞', + sacute: 'ś', + sbquo: '‚', + sc: '≻', + scE: '⪴', + scap: '⪸', + scaron: 'š', + sccue: '≽', + sce: '⪰', + scedil: 'ş', + scirc: 'ŝ', + scnE: '⪶', + scnap: '⪺', + scnsim: '⋩', + scpolint: '⨓', + scsim: '≿', + scy: 'с', + sdot: '⋅', + sdotb: '⊡', + sdote: '⩦', + seArr: '⇘', + searhk: '⤥', + searr: '↘', + searrow: '↘', + sect: '§', + semi: ';', + seswar: '⤩', + setminus: '∖', + setmn: '∖', + sext: '✶', + sfr: '𝔰', + sfrown: '⌢', + sharp: '♯', + shchcy: 'щ', + shcy: 'ш', + shortmid: '∣', + shortparallel: '∥', + shy: '­', + sigma: 'σ', + sigmaf: 'ς', + sigmav: 'ς', + sim: '∼', + simdot: '⩪', + sime: '≃', + simeq: '≃', + simg: '⪞', + simgE: '⪠', + siml: '⪝', + simlE: '⪟', + simne: '≆', + simplus: '⨤', + simrarr: '⥲', + slarr: '←', + smallsetminus: '∖', + smashp: '⨳', + smeparsl: '⧤', + smid: '∣', + smile: '⌣', + smt: '⪪', + smte: '⪬', + smtes: '⪬︀', + softcy: 'ь', + sol: '/', + solb: '⧄', + solbar: '⌿', + sopf: '𝕤', + spades: '♠', + spadesuit: '♠', + spar: '∥', + sqcap: '⊓', + sqcaps: '⊓︀', + sqcup: '⊔', + sqcups: '⊔︀', + sqsub: '⊏', + sqsube: '⊑', + sqsubset: '⊏', + sqsubseteq: '⊑', + sqsup: '⊐', + sqsupe: '⊒', + sqsupset: '⊐', + sqsupseteq: '⊒', + squ: '□', + square: '□', + squarf: '▪', + squf: '▪', + srarr: '→', + sscr: '𝓈', + ssetmn: '∖', + ssmile: '⌣', + sstarf: '⋆', + star: '☆', + starf: '★', + straightepsilon: 'ϵ', + straightphi: 'ϕ', + strns: '¯', + sub: '⊂', + subE: '⫅', + subdot: '⪽', + sube: '⊆', + subedot: '⫃', + submult: '⫁', + subnE: '⫋', + subne: '⊊', + subplus: '⪿', + subrarr: '⥹', + subset: '⊂', + subseteq: '⊆', + subseteqq: '⫅', + subsetneq: '⊊', + subsetneqq: '⫋', + subsim: '⫇', + subsub: '⫕', + subsup: '⫓', + succ: '≻', + succapprox: '⪸', + succcurlyeq: '≽', + succeq: '⪰', + succnapprox: '⪺', + succneqq: '⪶', + succnsim: '⋩', + succsim: '≿', + sum: '∑', + sung: '♪', + sup1: '¹', + sup2: '²', + sup3: '³', + sup: '⊃', + supE: '⫆', + supdot: '⪾', + supdsub: '⫘', + supe: '⊇', + supedot: '⫄', + suphsol: '⟉', + suphsub: '⫗', + suplarr: '⥻', + supmult: '⫂', + supnE: '⫌', + supne: '⊋', + supplus: '⫀', + supset: '⊃', + supseteq: '⊇', + supseteqq: '⫆', + supsetneq: '⊋', + supsetneqq: '⫌', + supsim: '⫈', + supsub: '⫔', + supsup: '⫖', + swArr: '⇙', + swarhk: '⤦', + swarr: '↙', + swarrow: '↙', + swnwar: '⤪', + szlig: 'ß', + target: '⌖', + tau: 'τ', + tbrk: '⎴', + tcaron: 'ť', + tcedil: 'ţ', + tcy: 'т', + tdot: '⃛', + telrec: '⌕', + tfr: '𝔱', + there4: '∴', + therefore: '∴', + theta: 'θ', + thetasym: 'ϑ', + thetav: 'ϑ', + thickapprox: '≈', + thicksim: '∼', + thinsp: ' ', + thkap: '≈', + thksim: '∼', + thorn: 'þ', + tilde: '˜', + times: '×', + timesb: '⊠', + timesbar: '⨱', + timesd: '⨰', + tint: '∭', + toea: '⤨', + top: '⊤', + topbot: '⌶', + topcir: '⫱', + topf: '𝕥', + topfork: '⫚', + tosa: '⤩', + tprime: '‴', + trade: '™', + triangle: '▵', + triangledown: '▿', + triangleleft: '◃', + trianglelefteq: '⊴', + triangleq: '≜', + triangleright: '▹', + trianglerighteq: '⊵', + tridot: '◬', + trie: '≜', + triminus: '⨺', + triplus: '⨹', + trisb: '⧍', + tritime: '⨻', + trpezium: '⏢', + tscr: '𝓉', + tscy: 'ц', + tshcy: 'ћ', + tstrok: 'ŧ', + twixt: '≬', + twoheadleftarrow: '↞', + twoheadrightarrow: '↠', + uArr: '⇑', + uHar: '⥣', + uacute: 'ú', + uarr: '↑', + ubrcy: 'ў', + ubreve: 'ŭ', + ucirc: 'û', + ucy: 'у', + udarr: '⇅', + udblac: 'ű', + udhar: '⥮', + ufisht: '⥾', + ufr: '𝔲', + ugrave: 'ù', + uharl: '↿', + uharr: '↾', + uhblk: '▀', + ulcorn: '⌜', + ulcorner: '⌜', + ulcrop: '⌏', + ultri: '◸', + umacr: 'ū', + uml: '¨', + uogon: 'ų', + uopf: '𝕦', + uparrow: '↑', + updownarrow: '↕', + upharpoonleft: '↿', + upharpoonright: '↾', + uplus: '⊎', + upsi: 'υ', + upsih: 'ϒ', + upsilon: 'υ', + upuparrows: '⇈', + urcorn: '⌝', + urcorner: '⌝', + urcrop: '⌎', + uring: 'ů', + urtri: '◹', + uscr: '𝓊', + utdot: '⋰', + utilde: 'ũ', + utri: '▵', + utrif: '▴', + uuarr: '⇈', + uuml: 'ü', + uwangle: '⦧', + vArr: '⇕', + vBar: '⫨', + vBarv: '⫩', + vDash: '⊨', + vangrt: '⦜', + varepsilon: 'ϵ', + varkappa: 'ϰ', + varnothing: '∅', + varphi: 'ϕ', + varpi: 'ϖ', + varpropto: '∝', + varr: '↕', + varrho: 'ϱ', + varsigma: 'ς', + varsubsetneq: '⊊︀', + varsubsetneqq: '⫋︀', + varsupsetneq: '⊋︀', + varsupsetneqq: '⫌︀', + vartheta: 'ϑ', + vartriangleleft: '⊲', + vartriangleright: '⊳', + vcy: 'в', + vdash: '⊢', + vee: '∨', + veebar: '⊻', + veeeq: '≚', + vellip: '⋮', + verbar: '|', + vert: '|', + vfr: '𝔳', + vltri: '⊲', + vnsub: '⊂⃒', + vnsup: '⊃⃒', + vopf: '𝕧', + vprop: '∝', + vrtri: '⊳', + vscr: '𝓋', + vsubnE: '⫋︀', + vsubne: '⊊︀', + vsupnE: '⫌︀', + vsupne: '⊋︀', + vzigzag: '⦚', + wcirc: 'ŵ', + wedbar: '⩟', + wedge: '∧', + wedgeq: '≙', + weierp: '℘', + wfr: '𝔴', + wopf: '𝕨', + wp: '℘', + wr: '≀', + wreath: '≀', + wscr: '𝓌', + xcap: '⋂', + xcirc: '◯', + xcup: '⋃', + xdtri: '▽', + xfr: '𝔵', + xhArr: '⟺', + xharr: '⟷', + xi: 'ξ', + xlArr: '⟸', + xlarr: '⟵', + xmap: '⟼', + xnis: '⋻', + xodot: '⨀', + xopf: '𝕩', + xoplus: '⨁', + xotime: '⨂', + xrArr: '⟹', + xrarr: '⟶', + xscr: '𝓍', + xsqcup: '⨆', + xuplus: '⨄', + xutri: '△', + xvee: '⋁', + xwedge: '⋀', + yacute: 'ý', + yacy: 'я', + ycirc: 'ŷ', + ycy: 'ы', + yen: '¥', + yfr: '𝔶', + yicy: 'ї', + yopf: '𝕪', + yscr: '𝓎', + yucy: 'ю', + yuml: 'ÿ', + zacute: 'ź', + zcaron: 'ž', + zcy: 'з', + zdot: 'ż', + zeetrf: 'ℨ', + zeta: 'ζ', + zfr: '𝔷', + zhcy: 'ж', + zigrarr: '⇝', + zopf: '𝕫', + zscr: '𝓏', + zwj: '‍', + zwnj: '‌' +} + +;// CONCATENATED MODULE: ./node_modules/decode-named-character-reference/index.js + + +const own = {}.hasOwnProperty + +/** + * Decode a single character reference (without the `&` or `;`). + * You probably only need this when you’re building parsers yourself that follow + * different rules compared to HTML. + * This is optimized to be tiny in browsers. + * + * @param {string} value + * `notin` (named), `#123` (deci), `#x123` (hexa). + * @returns {string|false} + * Decoded reference. + */ +function decodeNamedCharacterReference(value) { + return own.call(characterEntities, value) ? characterEntities[value] : false +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-reference.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const characterReference = { + name: 'characterReference', + tokenize: tokenizeCharacterReference +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterReference(effects, ok, nok) { + const self = this + let size = 0 + /** @type {number} */ + let max + /** @type {(code: Code) => boolean} */ + let test + return start + + /** + * Start of character reference. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterReference') + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + return open + } + + /** + * After `&`, at `#` for numeric references or alphanumeric for named + * references. + * + * ```markdown + * > | a&b + * ^ + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 35) { + effects.enter('characterReferenceMarkerNumeric') + effects.consume(code) + effects.exit('characterReferenceMarkerNumeric') + return numeric + } + effects.enter('characterReferenceValue') + max = 31 + test = asciiAlphanumeric + return value(code) + } + + /** + * After `#`, at `x` for hexadecimals or digit for decimals. + * + * ```markdown + * > | a{b + * ^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function numeric(code) { + if (code === 88 || code === 120) { + effects.enter('characterReferenceMarkerHexadecimal') + effects.consume(code) + effects.exit('characterReferenceMarkerHexadecimal') + effects.enter('characterReferenceValue') + max = 6 + test = asciiHexDigit + return value + } + effects.enter('characterReferenceValue') + max = 7 + test = asciiDigit + return value(code) + } + + /** + * After markers (`&#x`, `&#`, or `&`), in value, before `;`. + * + * The character reference kind defines what and how many characters are + * allowed. + * + * ```markdown + * > | a&b + * ^^^ + * > | a{b + * ^^^ + * > | a b + * ^ + * ``` + * + * @type {State} + */ + function value(code) { + if (code === 59 && size) { + const token = effects.exit('characterReferenceValue') + if ( + test === asciiAlphanumeric && + !decodeNamedCharacterReference(self.sliceSerialize(token)) + ) { + return nok(code) + } + + // To do: `markdown-rs` uses a different name: + // `CharacterReferenceMarkerSemi`. + effects.enter('characterReferenceMarker') + effects.consume(code) + effects.exit('characterReferenceMarker') + effects.exit('characterReference') + return ok + } + if (test(code) && size++ < max) { + effects.consume(code) + return value + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/character-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const characterEscape = { + name: 'characterEscape', + tokenize: tokenizeCharacterEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCharacterEscape(effects, ok, nok) { + return start + + /** + * Start of character escape. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('characterEscape') + effects.enter('escapeMarker') + effects.consume(code) + effects.exit('escapeMarker') + return inside + } + + /** + * After `\`, at punctuation. + * + * ```markdown + * > | a\*b + * ^ + * ``` + * + * @type {State} + */ + function inside(code) { + // ASCII punctuation. + if (asciiPunctuation(code)) { + effects.enter('characterEscapeValue') + effects.consume(code) + effects.exit('characterEscapeValue') + effects.exit('characterEscape') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/line-ending.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const lineEnding = { + name: 'lineEnding', + tokenize: tokenizeLineEnding +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLineEnding(effects, ok) { + return start + + /** @type {State} */ + function start(code) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return factorySpace(effects, ok, 'linePrefix') + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-end.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + + + + + + +/** @type {Construct} */ +const labelEnd = { + name: 'labelEnd', + tokenize: tokenizeLabelEnd, + resolveTo: resolveToLabelEnd, + resolveAll: resolveAllLabelEnd +} + +/** @type {Construct} */ +const resourceConstruct = { + tokenize: tokenizeResource +} +/** @type {Construct} */ +const referenceFullConstruct = { + tokenize: tokenizeReferenceFull +} +/** @type {Construct} */ +const referenceCollapsedConstruct = { + tokenize: tokenizeReferenceCollapsed +} + +/** @type {Resolver} */ +function resolveAllLabelEnd(events) { + let index = -1 + while (++index < events.length) { + const token = events[index][1] + if ( + token.type === 'labelImage' || + token.type === 'labelLink' || + token.type === 'labelEnd' + ) { + // Remove the marker. + events.splice(index + 1, token.type === 'labelImage' ? 4 : 2) + token.type = 'data' + index++ + } + } + return events +} + +/** @type {Resolver} */ +function resolveToLabelEnd(events, context) { + let index = events.length + let offset = 0 + /** @type {Token} */ + let token + /** @type {number | undefined} */ + let open + /** @type {number | undefined} */ + let close + /** @type {Array<Event>} */ + let media + + // Find an opening. + while (index--) { + token = events[index][1] + if (open) { + // If we see another link, or inactive link label, we’ve been here before. + if ( + token.type === 'link' || + (token.type === 'labelLink' && token._inactive) + ) { + break + } + + // Mark other link openings as inactive, as we can’t have links in + // links. + if (events[index][0] === 'enter' && token.type === 'labelLink') { + token._inactive = true + } + } else if (close) { + if ( + events[index][0] === 'enter' && + (token.type === 'labelImage' || token.type === 'labelLink') && + !token._balanced + ) { + open = index + if (token.type !== 'labelLink') { + offset = 2 + break + } + } + } else if (token.type === 'labelEnd') { + close = index + } + } + const group = { + type: events[open][1].type === 'labelLink' ? 'link' : 'image', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[events.length - 1][1].end) + } + const label = { + type: 'label', + start: Object.assign({}, events[open][1].start), + end: Object.assign({}, events[close][1].end) + } + const text = { + type: 'labelText', + start: Object.assign({}, events[open + offset + 2][1].end), + end: Object.assign({}, events[close - 2][1].start) + } + media = [ + ['enter', group, context], + ['enter', label, context] + ] + + // Opening marker. + media = push(media, events.slice(open + 1, open + offset + 3)) + + // Text open. + media = push(media, [['enter', text, context]]) + + // Always populated by defaults. + + // Between. + media = push( + media, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + offset + 4, close - 3), + context + ) + ) + + // Text close, marker close, label close. + media = push(media, [ + ['exit', text, context], + events[close - 2], + events[close - 1], + ['exit', label, context] + ]) + + // Reference, resource, or so. + media = push(media, events.slice(close + 1)) + + // Media close. + media = push(media, [['exit', group, context]]) + splice(events, open, events.length, media) + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelEnd(effects, ok, nok) { + const self = this + let index = self.events.length + /** @type {Token} */ + let labelStart + /** @type {boolean} */ + let defined + + // Find an opening. + while (index--) { + if ( + (self.events[index][1].type === 'labelImage' || + self.events[index][1].type === 'labelLink') && + !self.events[index][1]._balanced + ) { + labelStart = self.events[index][1] + break + } + } + return start + + /** + * Start of label end. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ``` + * + * @type {State} + */ + function start(code) { + // If there is not an okay opening. + if (!labelStart) { + return nok(code) + } + + // If the corresponding label (link) start is marked as inactive, + // it means we’d be wrapping a link, like this: + // + // ```markdown + // > | a [b [c](d) e](f) g. + // ^ + // ``` + // + // We can’t have that, so it’s just balanced brackets. + if (labelStart._inactive) { + return labelEndNok(code) + } + defined = self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize({ + start: labelStart.end, + end: self.now() + }) + ) + ) + effects.enter('labelEnd') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelEnd') + return after + } + + /** + * After `]`. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function after(code) { + // Note: `markdown-rs` also parses GFM footnotes here, which for us is in + // an extension. + + // Resource (`[asd](fgh)`)? + if (code === 40) { + return effects.attempt( + resourceConstruct, + labelEndOk, + defined ? labelEndOk : labelEndNok + )(code) + } + + // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? + if (code === 91) { + return effects.attempt( + referenceFullConstruct, + labelEndOk, + defined ? referenceNotFull : labelEndNok + )(code) + } + + // Shortcut (`[asd]`) reference? + return defined ? labelEndOk(code) : labelEndNok(code) + } + + /** + * After `]`, at `[`, but not at a full reference. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function referenceNotFull(code) { + return effects.attempt( + referenceCollapsedConstruct, + labelEndOk, + labelEndNok + )(code) + } + + /** + * Done, we found something. + * + * ```markdown + * > | [a](b) c + * ^ + * > | [a][b] c + * ^ + * > | [a][] b + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndOk(code) { + // Note: `markdown-rs` does a bunch of stuff here. + return ok(code) + } + + /** + * Done, it’s nothing. + * + * There was an okay opening, but we didn’t match anything. + * + * ```markdown + * > | [a](b c + * ^ + * > | [a][b c + * ^ + * > | [a] b + * ^ + * ``` + * + * @type {State} + */ + function labelEndNok(code) { + labelStart._balanced = true + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeResource(effects, ok, nok) { + return resourceStart + + /** + * At a resource. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceStart(code) { + effects.enter('resource') + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + return resourceBefore + } + + /** + * In resource, after `(`, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBefore(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceOpen)(code) + : resourceOpen(code) + } + + /** + * In resource, after optional whitespace, at `)` or a destination. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceOpen(code) { + if (code === 41) { + return resourceEnd(code) + } + return factoryDestination( + effects, + resourceDestinationAfter, + resourceDestinationMissing, + 'resourceDestination', + 'resourceDestinationLiteral', + 'resourceDestinationLiteralMarker', + 'resourceDestinationRaw', + 'resourceDestinationString', + 32 + )(code) + } + + /** + * In resource, after destination, at optional whitespace. + * + * ```markdown + * > | [a](b) c + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceBetween)(code) + : resourceEnd(code) + } + + /** + * At invalid destination. + * + * ```markdown + * > | [a](<<) b + * ^ + * ``` + * + * @type {State} + */ + function resourceDestinationMissing(code) { + return nok(code) + } + + /** + * In resource, after destination and whitespace, at `(` or title. + * + * ```markdown + * > | [a](b ) c + * ^ + * ``` + * + * @type {State} + */ + function resourceBetween(code) { + if (code === 34 || code === 39 || code === 40) { + return factoryTitle( + effects, + resourceTitleAfter, + nok, + 'resourceTitle', + 'resourceTitleMarker', + 'resourceTitleString' + )(code) + } + return resourceEnd(code) + } + + /** + * In resource, after title, at optional whitespace. + * + * ```markdown + * > | [a](b "c") d + * ^ + * ``` + * + * @type {State} + */ + function resourceTitleAfter(code) { + return markdownLineEndingOrSpace(code) + ? factoryWhitespace(effects, resourceEnd)(code) + : resourceEnd(code) + } + + /** + * In resource, at `)`. + * + * ```markdown + * > | [a](b) d + * ^ + * ``` + * + * @type {State} + */ + function resourceEnd(code) { + if (code === 41) { + effects.enter('resourceMarker') + effects.consume(code) + effects.exit('resourceMarker') + effects.exit('resource') + return ok + } + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceFull(effects, ok, nok) { + const self = this + return referenceFull + + /** + * In a reference (full), at the `[`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFull(code) { + return factoryLabel.call( + self, + effects, + referenceFullAfter, + referenceFullMissing, + 'reference', + 'referenceMarker', + 'referenceString' + )(code) + } + + /** + * In a reference (full), after `]`. + * + * ```markdown + * > | [a][b] d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullAfter(code) { + return self.parser.defined.includes( + normalizeIdentifier( + self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) + ) + ) + ? ok(code) + : nok(code) + } + + /** + * In reference (full) that was missing. + * + * ```markdown + * > | [a][b d + * ^ + * ``` + * + * @type {State} + */ + function referenceFullMissing(code) { + return nok(code) + } +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeReferenceCollapsed(effects, ok, nok) { + return referenceCollapsedStart + + /** + * In reference (collapsed), at `[`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedStart(code) { + // We only attempt a collapsed label if there’s a `[`. + + effects.enter('reference') + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + return referenceCollapsedOpen + } + + /** + * In reference (collapsed), at `]`. + * + * > 👉 **Note**: we only get here if the label is defined. + * + * ```markdown + * > | [a][] d + * ^ + * ``` + * + * @type {State} + */ + function referenceCollapsedOpen(code) { + if (code === 93) { + effects.enter('referenceMarker') + effects.consume(code) + effects.exit('referenceMarker') + effects.exit('reference') + return ok + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-image.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartImage = { + name: 'labelStartImage', + tokenize: tokenizeLabelStartImage, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartImage(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (image) start. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelImage') + effects.enter('labelImageMarker') + effects.consume(code) + effects.exit('labelImageMarker') + return open + } + + /** + * After `!`, at `[`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 91) { + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelImage') + return after + } + return nok(code) + } + + /** + * After `![`. + * + * ```markdown + * > | a ![b] c + * ^ + * ``` + * + * This is needed in because, when GFM footnotes are enabled, images never + * form when started with a `^`. + * Instead, links form: + * + * ```markdown + * ![^a](b) + * + * ![^a][b] + * + * [b]: c + * ``` + * + * ```html + * <p>!<a href=\"b\">^a</a></p> + * <p>!<a href=\"c\">^a</a></p> + * ``` + * + * @type {State} + */ + function after(code) { + // To do: use a new field to do this, this is still needed for + // `micromark-extension-gfm-footnote`, but the `label-start-link` + // behavior isn’t. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-classify-character/index.js +/** + * @typedef {import('micromark-util-types').Code} Code + */ + + +/** + * Classify whether a code represents whitespace, punctuation, or something + * else. + * + * Used for attention (emphasis, strong), whose sequences can open or close + * based on the class of surrounding characters. + * + * > 👉 **Note**: eof (`null`) is seen as whitespace. + * + * @param {Code} code + * Code. + * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined} + * Group. + */ +function classifyCharacter(code) { + if ( + code === null || + markdownLineEndingOrSpace(code) || + unicodeWhitespace(code) + ) { + return 1 + } + if (unicodePunctuation(code)) { + return 2 + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/attention.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').Point} Point + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + + +/** @type {Construct} */ +const attention = { + name: 'attention', + tokenize: tokenizeAttention, + resolveAll: resolveAllAttention +} + +/** + * Take all events and resolve attention to emphasis or strong. + * + * @type {Resolver} + */ +function resolveAllAttention(events, context) { + let index = -1 + /** @type {number} */ + let open + /** @type {Token} */ + let group + /** @type {Token} */ + let text + /** @type {Token} */ + let openingSequence + /** @type {Token} */ + let closingSequence + /** @type {number} */ + let use + /** @type {Array<Event>} */ + let nextEvents + /** @type {number} */ + let offset + + // Walk through all events. + // + // Note: performance of this is fine on an mb of normal markdown, but it’s + // a bottleneck for malicious stuff. + while (++index < events.length) { + // Find a token that can close. + if ( + events[index][0] === 'enter' && + events[index][1].type === 'attentionSequence' && + events[index][1]._close + ) { + open = index + + // Now walk back to find an opener. + while (open--) { + // Find a token that can open the closer. + if ( + events[open][0] === 'exit' && + events[open][1].type === 'attentionSequence' && + events[open][1]._open && + // If the markers are the same: + context.sliceSerialize(events[open][1]).charCodeAt(0) === + context.sliceSerialize(events[index][1]).charCodeAt(0) + ) { + // If the opening can close or the closing can open, + // and the close size *is not* a multiple of three, + // but the sum of the opening and closing size *is* multiple of three, + // then don’t match. + if ( + (events[open][1]._close || events[index][1]._open) && + (events[index][1].end.offset - events[index][1].start.offset) % 3 && + !( + (events[open][1].end.offset - + events[open][1].start.offset + + events[index][1].end.offset - + events[index][1].start.offset) % + 3 + ) + ) { + continue + } + + // Number of markers to use from the sequence. + use = + events[open][1].end.offset - events[open][1].start.offset > 1 && + events[index][1].end.offset - events[index][1].start.offset > 1 + ? 2 + : 1 + const start = Object.assign({}, events[open][1].end) + const end = Object.assign({}, events[index][1].start) + movePoint(start, -use) + movePoint(end, use) + openingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start, + end: Object.assign({}, events[open][1].end) + } + closingSequence = { + type: use > 1 ? 'strongSequence' : 'emphasisSequence', + start: Object.assign({}, events[index][1].start), + end + } + text = { + type: use > 1 ? 'strongText' : 'emphasisText', + start: Object.assign({}, events[open][1].end), + end: Object.assign({}, events[index][1].start) + } + group = { + type: use > 1 ? 'strong' : 'emphasis', + start: Object.assign({}, openingSequence.start), + end: Object.assign({}, closingSequence.end) + } + events[open][1].end = Object.assign({}, openingSequence.start) + events[index][1].start = Object.assign({}, closingSequence.end) + nextEvents = [] + + // If there are more markers in the opening, add them before. + if (events[open][1].end.offset - events[open][1].start.offset) { + nextEvents = push(nextEvents, [ + ['enter', events[open][1], context], + ['exit', events[open][1], context] + ]) + } + + // Opening. + nextEvents = push(nextEvents, [ + ['enter', group, context], + ['enter', openingSequence, context], + ['exit', openingSequence, context], + ['enter', text, context] + ]) + + // Always populated by defaults. + + // Between. + nextEvents = push( + nextEvents, + resolveAll( + context.parser.constructs.insideSpan.null, + events.slice(open + 1, index), + context + ) + ) + + // Closing. + nextEvents = push(nextEvents, [ + ['exit', text, context], + ['enter', closingSequence, context], + ['exit', closingSequence, context], + ['exit', group, context] + ]) + + // If there are more markers in the closing, add them after. + if (events[index][1].end.offset - events[index][1].start.offset) { + offset = 2 + nextEvents = push(nextEvents, [ + ['enter', events[index][1], context], + ['exit', events[index][1], context] + ]) + } else { + offset = 0 + } + splice(events, open - 1, index - open + 3, nextEvents) + index = open + nextEvents.length - offset - 2 + break + } + } + } + } + + // Remove remaining sequences. + index = -1 + while (++index < events.length) { + if (events[index][1].type === 'attentionSequence') { + events[index][1].type = 'data' + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAttention(effects, ok) { + const attentionMarkers = this.parser.constructs.attentionMarkers.null + const previous = this.previous + const before = classifyCharacter(previous) + + /** @type {NonNullable<Code>} */ + let marker + return start + + /** + * Before a sequence. + * + * ```markdown + * > | ** + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + marker = code + effects.enter('attentionSequence') + return inside(code) + } + + /** + * In a sequence. + * + * ```markdown + * > | ** + * ^^ + * ``` + * + * @type {State} + */ + function inside(code) { + if (code === marker) { + effects.consume(code) + return inside + } + const token = effects.exit('attentionSequence') + + // To do: next major: move this to resolver, just like `markdown-rs`. + const after = classifyCharacter(code) + + // Always populated by defaults. + + const open = + !after || (after === 2 && before) || attentionMarkers.includes(code) + const close = + !before || (before === 2 && after) || attentionMarkers.includes(previous) + token._open = Boolean(marker === 42 ? open : open && (before || !close)) + token._close = Boolean(marker === 42 ? close : close && (after || !open)) + return ok(code) + } +} + +/** + * Move a point a bit. + * + * Note: `move` only works inside lines! It’s not possible to move past other + * chunks (replacement characters, tabs, or line endings). + * + * @param {Point} point + * @param {number} offset + * @returns {void} + */ +function movePoint(point, offset) { + point.column += offset + point.offset += offset + point._bufferIndex += offset +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/autolink.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const autolink = { + name: 'autolink', + tokenize: tokenizeAutolink +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeAutolink(effects, ok, nok) { + let size = 0 + return start + + /** + * Start of an autolink. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('autolink') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.enter('autolinkProtocol') + return open + } + + /** + * After `<`, at protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (asciiAlpha(code)) { + effects.consume(code) + return schemeOrEmailAtext + } + return emailAtext(code) + } + + /** + * At second byte of protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeOrEmailAtext(code) { + // ASCII alphanumeric and `+`, `-`, and `.`. + if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) { + // Count the previous alphabetical from `open` too. + size = 1 + return schemeInsideOrEmailAtext(code) + } + return emailAtext(code) + } + + /** + * In ambiguous protocol or atext. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * > | a<user@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function schemeInsideOrEmailAtext(code) { + if (code === 58) { + effects.consume(code) + size = 0 + return urlInside + } + + // ASCII alphanumeric and `+`, `-`, and `.`. + if ( + (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && + size++ < 32 + ) { + effects.consume(code) + return schemeInsideOrEmailAtext + } + size = 0 + return emailAtext(code) + } + + /** + * After protocol, in URL. + * + * ```markdown + * > | a<https://example.com>b + * ^ + * ``` + * + * @type {State} + */ + function urlInside(code) { + if (code === 62) { + effects.exit('autolinkProtocol') + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + + // ASCII control, space, or `<`. + if (code === null || code === 32 || code === 60 || asciiControl(code)) { + return nok(code) + } + effects.consume(code) + return urlInside + } + + /** + * In email atext. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailAtext(code) { + if (code === 64) { + effects.consume(code) + return emailAtSignOrDot + } + if (asciiAtext(code)) { + effects.consume(code) + return emailAtext + } + return nok(code) + } + + /** + * In label, after at-sign or dot. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ ^ + * ``` + * + * @type {State} + */ + function emailAtSignOrDot(code) { + return asciiAlphanumeric(code) ? emailLabel(code) : nok(code) + } + + /** + * In label, where `.` and `>` are allowed. + * + * ```markdown + * > | a<user.name@example.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailLabel(code) { + if (code === 46) { + effects.consume(code) + size = 0 + return emailAtSignOrDot + } + if (code === 62) { + // Exit, then change the token type. + effects.exit('autolinkProtocol').type = 'autolinkEmail' + effects.enter('autolinkMarker') + effects.consume(code) + effects.exit('autolinkMarker') + effects.exit('autolink') + return ok + } + return emailValue(code) + } + + /** + * In label, where `.` and `>` are *not* allowed. + * + * Though, this is also used in `emailLabel` to parse other values. + * + * ```markdown + * > | a<user.name@ex-ample.com>b + * ^ + * ``` + * + * @type {State} + */ + function emailValue(code) { + // ASCII alphanumeric or `-`. + if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) { + const next = code === 45 ? emailValue : emailLabel + effects.consume(code) + return next + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/html-text.js +/** + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const htmlText = { + name: 'htmlText', + tokenize: tokenizeHtmlText +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHtmlText(effects, ok, nok) { + const self = this + /** @type {NonNullable<Code> | undefined} */ + let marker + /** @type {number} */ + let index + /** @type {State} */ + let returnState + return start + + /** + * Start of HTML (text). + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('htmlText') + effects.enter('htmlTextData') + effects.consume(code) + return open + } + + /** + * After `<`, at tag name or other stuff. + * + * ```markdown + * > | a <b> c + * ^ + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function open(code) { + if (code === 33) { + effects.consume(code) + return declarationOpen + } + if (code === 47) { + effects.consume(code) + return tagCloseStart + } + if (code === 63) { + effects.consume(code) + return instruction + } + + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagOpen + } + return nok(code) + } + + /** + * After `<!`, at declaration, comment, or CDATA. + * + * ```markdown + * > | a <!doctype> c + * ^ + * > | a <!--b--> c + * ^ + * > | a <![CDATA[>&<]]> c + * ^ + * ``` + * + * @type {State} + */ + function declarationOpen(code) { + if (code === 45) { + effects.consume(code) + return commentOpenInside + } + if (code === 91) { + effects.consume(code) + index = 0 + return cdataOpenInside + } + if (asciiAlpha(code)) { + effects.consume(code) + return declaration + } + return nok(code) + } + + /** + * In a comment, after `<!-`, at another `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentOpenInside(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return nok(code) + } + + /** + * In comment. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function comment(code) { + if (code === null) { + return nok(code) + } + if (code === 45) { + effects.consume(code) + return commentClose + } + if (markdownLineEnding(code)) { + returnState = comment + return lineEndingBefore(code) + } + effects.consume(code) + return comment + } + + /** + * In comment, after `-`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentClose(code) { + if (code === 45) { + effects.consume(code) + return commentEnd + } + return comment(code) + } + + /** + * In comment, after `--`. + * + * ```markdown + * > | a <!--b--> c + * ^ + * ``` + * + * @type {State} + */ + function commentEnd(code) { + return code === 62 + ? end(code) + : code === 45 + ? commentClose(code) + : comment(code) + } + + /** + * After `<![`, in CDATA, expecting `CDATA[`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^^^^ + * ``` + * + * @type {State} + */ + function cdataOpenInside(code) { + const value = 'CDATA[' + if (code === value.charCodeAt(index++)) { + effects.consume(code) + return index === value.length ? cdata : cdataOpenInside + } + return nok(code) + } + + /** + * In CDATA. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^^^ + * ``` + * + * @type {State} + */ + function cdata(code) { + if (code === null) { + return nok(code) + } + if (code === 93) { + effects.consume(code) + return cdataClose + } + if (markdownLineEnding(code)) { + returnState = cdata + return lineEndingBefore(code) + } + effects.consume(code) + return cdata + } + + /** + * In CDATA, after `]`, at another `]`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataClose(code) { + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In CDATA, after `]]`, at `>`. + * + * ```markdown + * > | a <![CDATA[>&<]]> b + * ^ + * ``` + * + * @type {State} + */ + function cdataEnd(code) { + if (code === 62) { + return end(code) + } + if (code === 93) { + effects.consume(code) + return cdataEnd + } + return cdata(code) + } + + /** + * In declaration. + * + * ```markdown + * > | a <!b> c + * ^ + * ``` + * + * @type {State} + */ + function declaration(code) { + if (code === null || code === 62) { + return end(code) + } + if (markdownLineEnding(code)) { + returnState = declaration + return lineEndingBefore(code) + } + effects.consume(code) + return declaration + } + + /** + * In instruction. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instruction(code) { + if (code === null) { + return nok(code) + } + if (code === 63) { + effects.consume(code) + return instructionClose + } + if (markdownLineEnding(code)) { + returnState = instruction + return lineEndingBefore(code) + } + effects.consume(code) + return instruction + } + + /** + * In instruction, after `?`, at `>`. + * + * ```markdown + * > | a <?b?> c + * ^ + * ``` + * + * @type {State} + */ + function instructionClose(code) { + return code === 62 ? end(code) : instruction(code) + } + + /** + * After `</`, in closing tag, at tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseStart(code) { + // ASCII alphabetical. + if (asciiAlpha(code)) { + effects.consume(code) + return tagClose + } + return nok(code) + } + + /** + * After `</x`, in a tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagClose(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagClose + } + return tagCloseBetween(code) + } + + /** + * In closing tag, after tag name. + * + * ```markdown + * > | a </b> c + * ^ + * ``` + * + * @type {State} + */ + function tagCloseBetween(code) { + if (markdownLineEnding(code)) { + returnState = tagCloseBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagCloseBetween + } + return end(code) + } + + /** + * After `<x`, in opening tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpen(code) { + // ASCII alphanumerical and `-`. + if (code === 45 || asciiAlphanumeric(code)) { + effects.consume(code) + return tagOpen + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In opening tag, after tag name. + * + * ```markdown + * > | a <b> c + * ^ + * ``` + * + * @type {State} + */ + function tagOpenBetween(code) { + if (code === 47) { + effects.consume(code) + return end + } + + // ASCII alphabetical and `:` and `_`. + if (code === 58 || code === 95 || asciiAlpha(code)) { + effects.consume(code) + return tagOpenAttributeName + } + if (markdownLineEnding(code)) { + returnState = tagOpenBetween + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenBetween + } + return end(code) + } + + /** + * In attribute name. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeName(code) { + // ASCII alphabetical and `-`, `.`, `:`, and `_`. + if ( + code === 45 || + code === 46 || + code === 58 || + code === 95 || + asciiAlphanumeric(code) + ) { + effects.consume(code) + return tagOpenAttributeName + } + return tagOpenAttributeNameAfter(code) + } + + /** + * After attribute name, before initializer, the end of the tag, or + * whitespace. + * + * ```markdown + * > | a <b c> d + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeNameAfter(code) { + if (code === 61) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeNameAfter + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeNameAfter + } + return tagOpenBetween(code) + } + + /** + * Before unquoted, double quoted, or single quoted attribute value, allowing + * whitespace. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueBefore(code) { + if ( + code === null || + code === 60 || + code === 61 || + code === 62 || + code === 96 + ) { + return nok(code) + } + if (code === 34 || code === 39) { + effects.consume(code) + marker = code + return tagOpenAttributeValueQuoted + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueBefore + return lineEndingBefore(code) + } + if (markdownSpace(code)) { + effects.consume(code) + return tagOpenAttributeValueBefore + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * In double or single quoted attribute value. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuoted(code) { + if (code === marker) { + effects.consume(code) + marker = undefined + return tagOpenAttributeValueQuotedAfter + } + if (code === null) { + return nok(code) + } + if (markdownLineEnding(code)) { + returnState = tagOpenAttributeValueQuoted + return lineEndingBefore(code) + } + effects.consume(code) + return tagOpenAttributeValueQuoted + } + + /** + * In unquoted attribute value. + * + * ```markdown + * > | a <b c=d> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueUnquoted(code) { + if ( + code === null || + code === 34 || + code === 39 || + code === 60 || + code === 61 || + code === 96 + ) { + return nok(code) + } + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + effects.consume(code) + return tagOpenAttributeValueUnquoted + } + + /** + * After double or single quoted attribute value, before whitespace or the end + * of the tag. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function tagOpenAttributeValueQuotedAfter(code) { + if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) { + return tagOpenBetween(code) + } + return nok(code) + } + + /** + * In certain circumstances of a tag where only an `>` is allowed. + * + * ```markdown + * > | a <b c="d"> e + * ^ + * ``` + * + * @type {State} + */ + function end(code) { + if (code === 62) { + effects.consume(code) + effects.exit('htmlTextData') + effects.exit('htmlText') + return ok + } + return nok(code) + } + + /** + * At eol. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * > | a <!--a + * ^ + * | b--> + * ``` + * + * @type {State} + */ + function lineEndingBefore(code) { + effects.exit('htmlTextData') + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return lineEndingAfter + } + + /** + * After eol, at optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfter(code) { + // Always populated by defaults. + + return markdownSpace(code) + ? factorySpace( + effects, + lineEndingAfterPrefix, + 'linePrefix', + self.parser.constructs.disable.null.includes('codeIndented') + ? undefined + : 4 + )(code) + : lineEndingAfterPrefix(code) + } + + /** + * After eol, after optional whitespace. + * + * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about + * > empty tokens. + * + * ```markdown + * | a <!--a + * > | b--> + * ^ + * ``` + * + * @type {State} + */ + function lineEndingAfterPrefix(code) { + effects.enter('htmlTextData') + return returnState(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/label-start-link.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + + +/** @type {Construct} */ +const labelStartLink = { + name: 'labelStartLink', + tokenize: tokenizeLabelStartLink, + resolveAll: labelEnd.resolveAll +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeLabelStartLink(effects, ok, nok) { + const self = this + return start + + /** + * Start of label (link) start. + * + * ```markdown + * > | a [b] c + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('labelLink') + effects.enter('labelMarker') + effects.consume(code) + effects.exit('labelMarker') + effects.exit('labelLink') + return after + } + + /** @type {State} */ + function after(code) { + // To do: this isn’t needed in `micromark-extension-gfm-footnote`, + // remove. + // Hidden footnotes hook. + /* c8 ignore next 3 */ + return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs + ? nok(code) + : ok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const hardBreakEscape = { + name: 'hardBreakEscape', + tokenize: tokenizeHardBreakEscape +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeHardBreakEscape(effects, ok, nok) { + return start + + /** + * Start of a hard break (escape). + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('hardBreakEscape') + effects.consume(code) + return after + } + + /** + * After `\`, at eol. + * + * ```markdown + * > | a\ + * ^ + * | b + * ``` + * + * @type {State} + */ + function after(code) { + if (markdownLineEnding(code)) { + effects.exit('hardBreakEscape') + return ok(code) + } + return nok(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-core-commonmark/lib/code-text.js +/** + * @typedef {import('micromark-util-types').Construct} Construct + * @typedef {import('micromark-util-types').Previous} Previous + * @typedef {import('micromark-util-types').Resolver} Resolver + * @typedef {import('micromark-util-types').State} State + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Tokenizer} Tokenizer + */ + + +/** @type {Construct} */ +const codeText = { + name: 'codeText', + tokenize: tokenizeCodeText, + resolve: resolveCodeText, + previous +} + +// To do: next major: don’t resolve, like `markdown-rs`. +/** @type {Resolver} */ +function resolveCodeText(events) { + let tailExitIndex = events.length - 4 + let headEnterIndex = 3 + /** @type {number} */ + let index + /** @type {number | undefined} */ + let enter + + // If we start and end with an EOL or a space. + if ( + (events[headEnterIndex][1].type === 'lineEnding' || + events[headEnterIndex][1].type === 'space') && + (events[tailExitIndex][1].type === 'lineEnding' || + events[tailExitIndex][1].type === 'space') + ) { + index = headEnterIndex + + // And we have data. + while (++index < tailExitIndex) { + if (events[index][1].type === 'codeTextData') { + // Then we have padding. + events[headEnterIndex][1].type = 'codeTextPadding' + events[tailExitIndex][1].type = 'codeTextPadding' + headEnterIndex += 2 + tailExitIndex -= 2 + break + } + } + } + + // Merge adjacent spaces and data. + index = headEnterIndex - 1 + tailExitIndex++ + while (++index <= tailExitIndex) { + if (enter === undefined) { + if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') { + enter = index + } + } else if ( + index === tailExitIndex || + events[index][1].type === 'lineEnding' + ) { + events[enter][1].type = 'codeTextData' + if (index !== enter + 2) { + events[enter][1].end = events[index - 1][1].end + events.splice(enter + 2, index - enter - 2) + tailExitIndex -= index - enter - 2 + index = enter + 2 + } + enter = undefined + } + } + return events +} + +/** + * @this {TokenizeContext} + * @type {Previous} + */ +function previous(code) { + // If there is a previous code, there will always be a tail. + return ( + code !== 96 || + this.events[this.events.length - 1][1].type === 'characterEscape' + ) +} + +/** + * @this {TokenizeContext} + * @type {Tokenizer} + */ +function tokenizeCodeText(effects, ok, nok) { + const self = this + let sizeOpen = 0 + /** @type {number} */ + let size + /** @type {Token} */ + let token + return start + + /** + * Start of code (text). + * + * ```markdown + * > | `a` + * ^ + * > | \`a` + * ^ + * ``` + * + * @type {State} + */ + function start(code) { + effects.enter('codeText') + effects.enter('codeTextSequence') + return sequenceOpen(code) + } + + /** + * In opening sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceOpen(code) { + if (code === 96) { + effects.consume(code) + sizeOpen++ + return sequenceOpen + } + effects.exit('codeTextSequence') + return between(code) + } + + /** + * Between something and something else. + * + * ```markdown + * > | `a` + * ^^ + * ``` + * + * @type {State} + */ + function between(code) { + // EOF. + if (code === null) { + return nok(code) + } + + // To do: next major: don’t do spaces in resolve, but when compiling, + // like `markdown-rs`. + // Tabs don’t work, and virtual spaces don’t make sense. + if (code === 32) { + effects.enter('space') + effects.consume(code) + effects.exit('space') + return between + } + + // Closing fence? Could also be data. + if (code === 96) { + token = effects.enter('codeTextSequence') + size = 0 + return sequenceClose(code) + } + if (markdownLineEnding(code)) { + effects.enter('lineEnding') + effects.consume(code) + effects.exit('lineEnding') + return between + } + + // Data. + effects.enter('codeTextData') + return data(code) + } + + /** + * In data. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function data(code) { + if ( + code === null || + code === 32 || + code === 96 || + markdownLineEnding(code) + ) { + effects.exit('codeTextData') + return between(code) + } + effects.consume(code) + return data + } + + /** + * In closing sequence. + * + * ```markdown + * > | `a` + * ^ + * ``` + * + * @type {State} + */ + function sequenceClose(code) { + // More. + if (code === 96) { + effects.consume(code) + size++ + return sequenceClose + } + + // Done! + if (size === sizeOpen) { + effects.exit('codeTextSequence') + effects.exit('codeText') + return ok(code) + } + + // More or less accents: mark as data. + token.type = 'codeTextData' + return data(code) + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/constructs.js +/** + * @typedef {import('micromark-util-types').Extension} Extension + */ + + + + +/** @satisfies {Extension['document']} */ +const constructs_document = { + [42]: list, + [43]: list, + [45]: list, + [48]: list, + [49]: list, + [50]: list, + [51]: list, + [52]: list, + [53]: list, + [54]: list, + [55]: list, + [56]: list, + [57]: list, + [62]: blockQuote +} + +/** @satisfies {Extension['contentInitial']} */ +const contentInitial = { + [91]: definition +} + +/** @satisfies {Extension['flowInitial']} */ +const flowInitial = { + [-2]: codeIndented, + [-1]: codeIndented, + [32]: codeIndented +} + +/** @satisfies {Extension['flow']} */ +const constructs_flow = { + [35]: headingAtx, + [42]: thematicBreak, + [45]: [setextUnderline, thematicBreak], + [60]: htmlFlow, + [61]: setextUnderline, + [95]: thematicBreak, + [96]: codeFenced, + [126]: codeFenced +} + +/** @satisfies {Extension['string']} */ +const constructs_string = { + [38]: characterReference, + [92]: characterEscape +} + +/** @satisfies {Extension['text']} */ +const constructs_text = { + [-5]: lineEnding, + [-4]: lineEnding, + [-3]: lineEnding, + [33]: labelStartImage, + [38]: characterReference, + [42]: attention, + [60]: [autolink, htmlText], + [91]: labelStartLink, + [92]: [hardBreakEscape, characterEscape], + [93]: labelEnd, + [95]: attention, + [96]: codeText +} + +/** @satisfies {Extension['insideSpan']} */ +const insideSpan = { + null: [attention, resolver] +} + +/** @satisfies {Extension['attentionMarkers']} */ +const attentionMarkers = { + null: [42, 95] +} + +/** @satisfies {Extension['disable']} */ +const disable = { + null: [] +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/parse.js +/** + * @typedef {import('micromark-util-types').Create} Create + * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension + * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct + * @typedef {import('micromark-util-types').ParseContext} ParseContext + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + */ + + + + + + + + + +/** + * @param {ParseOptions | null | undefined} [options] + * @returns {ParseContext} + */ +function parse(options) { + const settings = options || {} + const constructs = + /** @type {FullNormalizedExtension} */ + combineExtensions([constructs_namespaceObject, ...(settings.extensions || [])]) + + /** @type {ParseContext} */ + const parser = { + defined: [], + lazy: {}, + constructs, + content: create(content), + document: create(document_document), + flow: create(flow), + string: create(string), + text: create(text_text) + } + return parser + + /** + * @param {InitialConstruct} initial + */ + function create(initial) { + return creator + /** @type {Create} */ + function creator(from) { + return createTokenizer(parser, initial, from) + } + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/preprocess.js +/** + * @typedef {import('micromark-util-types').Chunk} Chunk + * @typedef {import('micromark-util-types').Code} Code + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Value} Value + */ + +/** + * @callback Preprocessor + * @param {Value} value + * @param {Encoding | null | undefined} [encoding] + * @param {boolean | null | undefined} [end=false] + * @returns {Array<Chunk>} + */ + +const search = /[\0\t\n\r]/g + +/** + * @returns {Preprocessor} + */ +function preprocess() { + let column = 1 + let buffer = '' + /** @type {boolean | undefined} */ + let start = true + /** @type {boolean | undefined} */ + let atCarriageReturn + return preprocessor + + /** @type {Preprocessor} */ + function preprocessor(value, encoding, end) { + /** @type {Array<Chunk>} */ + const chunks = [] + /** @type {RegExpMatchArray | null} */ + let match + /** @type {number} */ + let next + /** @type {number} */ + let startPosition + /** @type {number} */ + let endPosition + /** @type {Code} */ + let code + + // @ts-expect-error `Buffer` does allow an encoding. + value = buffer + value.toString(encoding) + startPosition = 0 + buffer = '' + if (start) { + // To do: `markdown-rs` actually parses BOMs (byte order mark). + if (value.charCodeAt(0) === 65279) { + startPosition++ + } + start = undefined + } + while (startPosition < value.length) { + search.lastIndex = startPosition + match = search.exec(value) + endPosition = + match && match.index !== undefined ? match.index : value.length + code = value.charCodeAt(endPosition) + if (!match) { + buffer = value.slice(startPosition) + break + } + if (code === 10 && startPosition === endPosition && atCarriageReturn) { + chunks.push(-3) + atCarriageReturn = undefined + } else { + if (atCarriageReturn) { + chunks.push(-5) + atCarriageReturn = undefined + } + if (startPosition < endPosition) { + chunks.push(value.slice(startPosition, endPosition)) + column += endPosition - startPosition + } + switch (code) { + case 0: { + chunks.push(65533) + column++ + break + } + case 9: { + next = Math.ceil(column / 4) * 4 + chunks.push(-2) + while (column++ < next) chunks.push(-1) + break + } + case 10: { + chunks.push(-4) + column = 1 + break + } + default: { + atCarriageReturn = true + column = 1 + } + } + } + startPosition = endPosition + 1 + } + if (end) { + if (atCarriageReturn) chunks.push(-5) + if (buffer) chunks.push(buffer) + chunks.push(null) + } + return chunks + } +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark/lib/postprocess.js +/** + * @typedef {import('micromark-util-types').Event} Event + */ + + + +/** + * @param {Array<Event>} events + * @returns {Array<Event>} + */ +function postprocess(events) { + while (!subtokenize(events)) { + // Empty + } + return events +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference/index.js +/** + * Turn the number (in string form as either hexa- or plain decimal) coming from + * a numeric character reference into a character. + * + * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes + * non-characters and control characters safe. + * + * @param {string} value + * Value to decode. + * @param {number} base + * Numeric base. + * @returns {string} + * Character. + */ +function decodeNumericCharacterReference(value, base) { + const code = Number.parseInt(value, base) + if ( + // C0 except for HT, LF, FF, CR, space. + code < 9 || + code === 11 || + (code > 13 && code < 32) || + // Control character (DEL) of C0, and C1 controls. + (code > 126 && code < 160) || + // Lone high surrogates and low surrogates. + (code > 55295 && code < 57344) || + // Noncharacters. + (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ || + (code & 65535) === 65535 || + (code & 65535) === 65534 /* eslint-enable no-bitwise */ || + // Out of range + code > 1114111 + ) { + return '\uFFFD' + } + return String.fromCharCode(code) +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/micromark-util-decode-string/index.js + + +const characterEscapeOrReference = + /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi + +/** + * Decode markdown strings (which occur in places such as fenced code info + * strings, destinations, labels, and titles). + * + * The “string” content type allows character escapes and -references. + * This decodes those. + * + * @param {string} value + * Value to decode. + * @returns {string} + * Decoded value. + */ +function decodeString(value) { + return value.replace(characterEscapeOrReference, decode) +} + +/** + * @param {string} $0 + * @param {string} $1 + * @param {string} $2 + * @returns {string} + */ +function decode($0, $1, $2) { + if ($1) { + // Escape. + return $1 + } + + // Reference. + const head = $2.charCodeAt(0) + if (head === 35) { + const head = $2.charCodeAt(1) + const hex = head === 120 || head === 88 + return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10) + } + return decodeNamedCharacterReference($2) || $0 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/unist-util-stringify-position/lib/index.js +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} + +;// CONCATENATED MODULE: ./node_modules/mermaid/node_modules/mdast-util-from-markdown/lib/index.js +/** + * @typedef {import('micromark-util-types').Encoding} Encoding + * @typedef {import('micromark-util-types').Event} Event + * @typedef {import('micromark-util-types').ParseOptions} ParseOptions + * @typedef {import('micromark-util-types').Token} Token + * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext + * @typedef {import('micromark-util-types').Value} Value + * + * @typedef {import('unist').Parent} UnistParent + * @typedef {import('unist').Point} Point + * + * @typedef {import('mdast').PhrasingContent} PhrasingContent + * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent + * @typedef {import('mdast').Content} Content + * @typedef {import('mdast').Break} Break + * @typedef {import('mdast').Blockquote} Blockquote + * @typedef {import('mdast').Code} Code + * @typedef {import('mdast').Definition} Definition + * @typedef {import('mdast').Emphasis} Emphasis + * @typedef {import('mdast').Heading} Heading + * @typedef {import('mdast').HTML} HTML + * @typedef {import('mdast').Image} Image + * @typedef {import('mdast').ImageReference} ImageReference + * @typedef {import('mdast').InlineCode} InlineCode + * @typedef {import('mdast').Link} Link + * @typedef {import('mdast').LinkReference} LinkReference + * @typedef {import('mdast').List} List + * @typedef {import('mdast').ListItem} ListItem + * @typedef {import('mdast').Paragraph} Paragraph + * @typedef {import('mdast').Root} Root + * @typedef {import('mdast').Strong} Strong + * @typedef {import('mdast').Text} Text + * @typedef {import('mdast').ThematicBreak} ThematicBreak + * @typedef {import('mdast').ReferenceType} ReferenceType + * @typedef {import('../index.js').CompileData} CompileData + */ + +/** + * @typedef {Root | Content} Node + * @typedef {Extract<Node, UnistParent>} Parent + * + * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment + */ + +/** + * @callback Transform + * Extra transform, to change the AST afterwards. + * @param {Root} tree + * Tree to transform. + * @returns {Root | undefined | null | void} + * New tree or nothing (in which case the current tree is used). + * + * @callback Handle + * Handle a token. + * @param {CompileContext} this + * Context. + * @param {Token} token + * Current token. + * @returns {void} + * Nothing. + * + * @typedef {Record<string, Handle>} Handles + * Token types mapping to handles + * + * @callback OnEnterError + * Handle the case where the `right` token is open, but it is closed (by the + * `left` token) or because we reached the end of the document. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token | undefined} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @callback OnExitError + * Handle the case where the `right` token is open but it is closed by + * exiting the `left` token. + * @param {Omit<CompileContext, 'sliceSerialize'>} this + * Context. + * @param {Token} left + * Left token. + * @param {Token} right + * Right token. + * @returns {void} + * Nothing. + * + * @typedef {[Token, OnEnterError | undefined]} TokenTuple + * Open token on the stack, with an optional error handler for when + * that token isn’t closed properly. + */ + +/** + * @typedef Config + * Configuration. + * + * We have our defaults, but extensions will add more. + * @property {Array<string>} canContainEols + * Token types where line endings are used. + * @property {Handles} enter + * Opening handles. + * @property {Handles} exit + * Closing handles. + * @property {Array<Transform>} transforms + * Tree transforms. + * + * @typedef {Partial<Config>} Extension + * Change how markdown tokens from micromark are turned into mdast. + * + * @typedef CompileContext + * mdast compiler context. + * @property {Array<Node | Fragment>} stack + * Stack of nodes. + * @property {Array<TokenTuple>} tokenStack + * Stack of tokens. + * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData + * Get data from the key/value store. + * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData + * Set data into the key/value store. + * @property {(this: CompileContext) => void} buffer + * Capture some of the output data. + * @property {(this: CompileContext) => string} resume + * Stop capturing and access the output data. + * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter + * Enter a token. + * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit + * Exit a token. + * @property {TokenizeContext['sliceSerialize']} sliceSerialize + * Get the string value of a token. + * @property {Config} config + * Configuration. + * + * @typedef FromMarkdownOptions + * Configuration for how to build mdast. + * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions] + * Extensions for this utility to change how tokens are turned into a tree. + * + * @typedef {ParseOptions & FromMarkdownOptions} Options + * Configuration. + */ + +// To do: micromark: create a registry of tokens? +// To do: next major: don’t return given `Node` from `enter`. +// To do: next major: remove setter/getter. + + + + + + + + + + +const lib_own = {}.hasOwnProperty + +/** + * @param value + * Markdown to parse. + * @param encoding + * Character encoding for when `value` is `Buffer`. + * @param options + * Configuration. + * @returns + * mdast tree. + */ +const fromMarkdown = + /** + * @type {( + * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) & + * ((value: Value, options?: Options | null | undefined) => Root) + * )} + */ + + /** + * @param {Value} value + * @param {Encoding | Options | null | undefined} [encoding] + * @param {Options | null | undefined} [options] + * @returns {Root} + */ + function (value, encoding, options) { + if (typeof encoding !== 'string') { + options = encoding + encoding = undefined + } + return compiler(options)( + postprocess( + parse(options).document().write(preprocess()(value, encoding, true)) + ) + ) + } + +/** + * Note this compiler only understand complete buffering, not streaming. + * + * @param {Options | null | undefined} [options] + */ +function compiler(options) { + /** @type {Config} */ + const config = { + transforms: [], + canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'], + enter: { + autolink: opener(link), + autolinkProtocol: onenterdata, + autolinkEmail: onenterdata, + atxHeading: opener(heading), + blockQuote: opener(blockQuote), + characterEscape: onenterdata, + characterReference: onenterdata, + codeFenced: opener(codeFlow), + codeFencedFenceInfo: buffer, + codeFencedFenceMeta: buffer, + codeIndented: opener(codeFlow, buffer), + codeText: opener(codeText, buffer), + codeTextData: onenterdata, + data: onenterdata, + codeFlowValue: onenterdata, + definition: opener(definition), + definitionDestinationString: buffer, + definitionLabelString: buffer, + definitionTitleString: buffer, + emphasis: opener(emphasis), + hardBreakEscape: opener(hardBreak), + hardBreakTrailing: opener(hardBreak), + htmlFlow: opener(html, buffer), + htmlFlowData: onenterdata, + htmlText: opener(html, buffer), + htmlTextData: onenterdata, + image: opener(image), + label: buffer, + link: opener(link), + listItem: opener(listItem), + listItemValue: onenterlistitemvalue, + listOrdered: opener(list, onenterlistordered), + listUnordered: opener(list), + paragraph: opener(paragraph), + reference: onenterreference, + referenceString: buffer, + resourceDestinationString: buffer, + resourceTitleString: buffer, + setextHeading: opener(heading), + strong: opener(strong), + thematicBreak: opener(thematicBreak) + }, + exit: { + atxHeading: closer(), + atxHeadingSequence: onexitatxheadingsequence, + autolink: closer(), + autolinkEmail: onexitautolinkemail, + autolinkProtocol: onexitautolinkprotocol, + blockQuote: closer(), + characterEscapeValue: onexitdata, + characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker, + characterReferenceMarkerNumeric: onexitcharacterreferencemarker, + characterReferenceValue: onexitcharacterreferencevalue, + codeFenced: closer(onexitcodefenced), + codeFencedFence: onexitcodefencedfence, + codeFencedFenceInfo: onexitcodefencedfenceinfo, + codeFencedFenceMeta: onexitcodefencedfencemeta, + codeFlowValue: onexitdata, + codeIndented: closer(onexitcodeindented), + codeText: closer(onexitcodetext), + codeTextData: onexitdata, + data: onexitdata, + definition: closer(), + definitionDestinationString: onexitdefinitiondestinationstring, + definitionLabelString: onexitdefinitionlabelstring, + definitionTitleString: onexitdefinitiontitlestring, + emphasis: closer(), + hardBreakEscape: closer(onexithardbreak), + hardBreakTrailing: closer(onexithardbreak), + htmlFlow: closer(onexithtmlflow), + htmlFlowData: onexitdata, + htmlText: closer(onexithtmltext), + htmlTextData: onexitdata, + image: closer(onexitimage), + label: onexitlabel, + labelText: onexitlabeltext, + lineEnding: onexitlineending, + link: closer(onexitlink), + listItem: closer(), + listOrdered: closer(), + listUnordered: closer(), + paragraph: closer(), + referenceString: onexitreferencestring, + resourceDestinationString: onexitresourcedestinationstring, + resourceTitleString: onexitresourcetitlestring, + resource: onexitresource, + setextHeading: closer(onexitsetextheading), + setextHeadingLineSequence: onexitsetextheadinglinesequence, + setextHeadingText: onexitsetextheadingtext, + strong: closer(), + thematicBreak: closer() + } + } + configure(config, (options || {}).mdastExtensions || []) + + /** @type {CompileData} */ + const data = {} + return compile + + /** + * Turn micromark events into an mdast tree. + * + * @param {Array<Event>} events + * Events. + * @returns {Root} + * mdast tree. + */ + function compile(events) { + /** @type {Root} */ + let tree = { + type: 'root', + children: [] + } + /** @type {Omit<CompileContext, 'sliceSerialize'>} */ + const context = { + stack: [tree], + tokenStack: [], + config, + enter, + exit, + buffer, + resume, + setData, + getData + } + /** @type {Array<number>} */ + const listStack = [] + let index = -1 + while (++index < events.length) { + // We preprocess lists to add `listItem` tokens, and to infer whether + // items the list itself are spread out. + if ( + events[index][1].type === 'listOrdered' || + events[index][1].type === 'listUnordered' + ) { + if (events[index][0] === 'enter') { + listStack.push(index) + } else { + const tail = listStack.pop() + index = prepareList(events, tail, index) + } + } + } + index = -1 + while (++index < events.length) { + const handler = config[events[index][0]] + if (lib_own.call(handler, events[index][1].type)) { + handler[events[index][1].type].call( + Object.assign( + { + sliceSerialize: events[index][2].sliceSerialize + }, + context + ), + events[index][1] + ) + } + } + + // Handle tokens still being open. + if (context.tokenStack.length > 0) { + const tail = context.tokenStack[context.tokenStack.length - 1] + const handler = tail[1] || defaultOnError + handler.call(context, undefined, tail[0]) + } + + // Figure out `root` position. + tree.position = { + start: lib_point( + events.length > 0 + ? events[0][1].start + : { + line: 1, + column: 1, + offset: 0 + } + ), + end: lib_point( + events.length > 0 + ? events[events.length - 2][1].end + : { + line: 1, + column: 1, + offset: 0 + } + ) + } + + // Call transforms. + index = -1 + while (++index < config.transforms.length) { + tree = config.transforms[index](tree) || tree + } + return tree + } + + /** + * @param {Array<Event>} events + * @param {number} start + * @param {number} length + * @returns {number} + */ + function prepareList(events, start, length) { + let index = start - 1 + let containerBalance = -1 + let listSpread = false + /** @type {Token | undefined} */ + let listItem + /** @type {number | undefined} */ + let lineIndex + /** @type {number | undefined} */ + let firstBlankLineIndex + /** @type {boolean | undefined} */ + let atMarker + while (++index <= length) { + const event = events[index] + if ( + event[1].type === 'listUnordered' || + event[1].type === 'listOrdered' || + event[1].type === 'blockQuote' + ) { + if (event[0] === 'enter') { + containerBalance++ + } else { + containerBalance-- + } + atMarker = undefined + } else if (event[1].type === 'lineEndingBlank') { + if (event[0] === 'enter') { + if ( + listItem && + !atMarker && + !containerBalance && + !firstBlankLineIndex + ) { + firstBlankLineIndex = index + } + atMarker = undefined + } + } else if ( + event[1].type === 'linePrefix' || + event[1].type === 'listItemValue' || + event[1].type === 'listItemMarker' || + event[1].type === 'listItemPrefix' || + event[1].type === 'listItemPrefixWhitespace' + ) { + // Empty. + } else { + atMarker = undefined + } + if ( + (!containerBalance && + event[0] === 'enter' && + event[1].type === 'listItemPrefix') || + (containerBalance === -1 && + event[0] === 'exit' && + (event[1].type === 'listUnordered' || + event[1].type === 'listOrdered')) + ) { + if (listItem) { + let tailIndex = index + lineIndex = undefined + while (tailIndex--) { + const tailEvent = events[tailIndex] + if ( + tailEvent[1].type === 'lineEnding' || + tailEvent[1].type === 'lineEndingBlank' + ) { + if (tailEvent[0] === 'exit') continue + if (lineIndex) { + events[lineIndex][1].type = 'lineEndingBlank' + listSpread = true + } + tailEvent[1].type = 'lineEnding' + lineIndex = tailIndex + } else if ( + tailEvent[1].type === 'linePrefix' || + tailEvent[1].type === 'blockQuotePrefix' || + tailEvent[1].type === 'blockQuotePrefixWhitespace' || + tailEvent[1].type === 'blockQuoteMarker' || + tailEvent[1].type === 'listItemIndent' + ) { + // Empty + } else { + break + } + } + if ( + firstBlankLineIndex && + (!lineIndex || firstBlankLineIndex < lineIndex) + ) { + listItem._spread = true + } + + // Fix position. + listItem.end = Object.assign( + {}, + lineIndex ? events[lineIndex][1].start : event[1].end + ) + events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]) + index++ + length++ + } + + // Create a new list item. + if (event[1].type === 'listItemPrefix') { + listItem = { + type: 'listItem', + _spread: false, + start: Object.assign({}, event[1].start), + // @ts-expect-error: we’ll add `end` in a second. + end: undefined + } + // @ts-expect-error: `listItem` is most definitely defined, TS... + events.splice(index, 0, ['enter', listItem, event[2]]) + index++ + length++ + firstBlankLineIndex = undefined + atMarker = true + } + } + } + events[start][1]._spread = listSpread + return length + } + + /** + * Set data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @param {CompileData[Key]} [value] + * New value. + * @returns {void} + * Nothing. + */ + function setData(key, value) { + data[key] = value + } + + /** + * Get data. + * + * @template {keyof CompileData} Key + * Field type. + * @param {Key} key + * Key of field. + * @returns {CompileData[Key]} + * Value. + */ + function getData(key) { + return data[key] + } + + /** + * Create an opener handle. + * + * @param {(token: Token) => Node} create + * Create a node. + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function opener(create, and) { + return open + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function open(token) { + enter.call(this, create(token), token) + if (and) and.call(this, token) + } + } + + /** + * @this {CompileContext} + * @returns {void} + */ + function buffer() { + this.stack.push({ + type: 'fragment', + children: [] + }) + } + + /** + * @template {Node} Kind + * Node type. + * @this {CompileContext} + * Context. + * @param {Kind} node + * Node to enter. + * @param {Token} token + * Corresponding token. + * @param {OnEnterError | undefined} [errorHandler] + * Handle the case where this token is open, but it is closed by something else. + * @returns {Kind} + * The given node. + */ + function enter(node, token, errorHandler) { + const parent = this.stack[this.stack.length - 1] + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. + parent.children.push(node) + this.stack.push(node) + this.tokenStack.push([token, errorHandler]) + // @ts-expect-error: `end` will be patched later. + node.position = { + start: lib_point(token.start) + } + return node + } + + /** + * Create a closer handle. + * + * @param {Handle} [and] + * Optional function to also run. + * @returns {Handle} + * Handle. + */ + function closer(and) { + return close + + /** + * @this {CompileContext} + * @param {Token} token + * @returns {void} + */ + function close(token) { + if (and) and.call(this, token) + exit.call(this, token) + } + } + + /** + * @this {CompileContext} + * Context. + * @param {Token} token + * Corresponding token. + * @param {OnExitError | undefined} [onExitError] + * Handle the case where another token is open. + * @returns {Node} + * The closed node. + */ + function exit(token, onExitError) { + const node = this.stack.pop() + const open = this.tokenStack.pop() + if (!open) { + throw new Error( + 'Cannot close `' + + token.type + + '` (' + + stringifyPosition({ + start: token.start, + end: token.end + }) + + '): it’s not open' + ) + } else if (open[0].type !== token.type) { + if (onExitError) { + onExitError.call(this, token, open[0]) + } else { + const handler = open[1] || defaultOnError + handler.call(this, token, open[0]) + } + } + node.position.end = lib_point(token.end) + return node + } + + /** + * @this {CompileContext} + * @returns {string} + */ + function resume() { + return lib_toString(this.stack.pop()) + } + + // + // Handlers. + // + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistordered() { + setData('expectingFirstListItemValue', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onenterlistitemvalue(token) { + if (getData('expectingFirstListItemValue')) { + const ancestor = this.stack[this.stack.length - 2] + ancestor.start = Number.parseInt(this.sliceSerialize(token), 10) + setData('expectingFirstListItemValue') + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfenceinfo() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.lang = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfencemeta() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.meta = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefencedfence() { + // Exit if this is the closing fence. + if (getData('flowCodeInside')) return + this.buffer() + setData('flowCodeInside', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodefenced() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, '') + setData('flowCodeInside') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcodeindented() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data.replace(/(\r?\n|\r)$/g, '') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitionlabelstring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + node.label = label + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiontitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitdefinitiondestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitatxheadingsequence(token) { + const node = this.stack[this.stack.length - 1] + if (!node.depth) { + const depth = this.sliceSerialize(token).length + node.depth = depth + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadingtext() { + setData('setextHeadingSlurpLineEnding', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheadinglinesequence(token) { + const node = this.stack[this.stack.length - 1] + node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2 + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitsetextheading() { + setData('setextHeadingSlurpLineEnding') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterdata(token) { + const node = this.stack[this.stack.length - 1] + let tail = node.children[node.children.length - 1] + if (!tail || tail.type !== 'text') { + // Add a new text node. + tail = text() + // @ts-expect-error: we’ll add `end` later. + tail.position = { + start: lib_point(token.start) + } + // @ts-expect-error: Assume `parent` accepts `text`. + node.children.push(tail) + } + this.stack.push(tail) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitdata(token) { + const tail = this.stack.pop() + tail.value += this.sliceSerialize(token) + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlineending(token) { + const context = this.stack[this.stack.length - 1] + // If we’re at a hard break, include the line ending in there. + if (getData('atHardBreak')) { + const tail = context.children[context.children.length - 1] + tail.position.end = lib_point(token.end) + setData('atHardBreak') + return + } + if ( + !getData('setextHeadingSlurpLineEnding') && + config.canContainEols.includes(context.type) + ) { + onenterdata.call(this, token) + onexitdata.call(this, token) + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithardbreak() { + setData('atHardBreak', true) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmlflow() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexithtmltext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcodetext() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.value = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlink() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitimage() { + const node = this.stack[this.stack.length - 1] + // Note: there are also `identifier` and `label` fields on this link node! + // These are used / cleaned here. + // To do: clean. + if (getData('inReference')) { + /** @type {ReferenceType} */ + const referenceType = getData('referenceType') || 'shortcut' + node.type += 'Reference' + // @ts-expect-error: mutate. + node.referenceType = referenceType + // @ts-expect-error: mutate. + delete node.url + delete node.title + } else { + // @ts-expect-error: mutate. + delete node.identifier + // @ts-expect-error: mutate. + delete node.label + } + setData('referenceType') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabeltext(token) { + const string = this.sliceSerialize(token) + const ancestor = this.stack[this.stack.length - 2] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + ancestor.label = decodeString(string) + // @ts-expect-error: same as above. + ancestor.identifier = normalizeIdentifier(string).toLowerCase() + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitlabel() { + const fragment = this.stack[this.stack.length - 1] + const value = this.resume() + const node = this.stack[this.stack.length - 1] + // Assume a reference. + setData('inReference', true) + if (node.type === 'link') { + /** @type {Array<StaticPhrasingContent>} */ + // @ts-expect-error: Assume static phrasing content. + const children = fragment.children + node.children = children + } else { + node.alt = value + } + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcedestinationstring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.url = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresourcetitlestring() { + const data = this.resume() + const node = this.stack[this.stack.length - 1] + node.title = data + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitresource() { + setData('inReference') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onenterreference() { + setData('referenceType', 'collapsed') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitreferencestring(token) { + const label = this.resume() + const node = this.stack[this.stack.length - 1] + // @ts-expect-error: stash this on the node, as it might become a reference + // later. + node.label = label + // @ts-expect-error: same as above. + node.identifier = normalizeIdentifier( + this.sliceSerialize(token) + ).toLowerCase() + setData('referenceType', 'full') + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + + function onexitcharacterreferencemarker(token) { + setData('characterReferenceType', token.type) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitcharacterreferencevalue(token) { + const data = this.sliceSerialize(token) + const type = getData('characterReferenceType') + /** @type {string} */ + let value + if (type) { + value = decodeNumericCharacterReference( + data, + type === 'characterReferenceMarkerNumeric' ? 10 : 16 + ) + setData('characterReferenceType') + } else { + const result = decodeNamedCharacterReference(data) + value = result + } + const tail = this.stack.pop() + tail.value += value + tail.position.end = lib_point(token.end) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkprotocol(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = this.sliceSerialize(token) + } + + /** + * @this {CompileContext} + * @type {Handle} + */ + function onexitautolinkemail(token) { + onexitdata.call(this, token) + const node = this.stack[this.stack.length - 1] + node.url = 'mailto:' + this.sliceSerialize(token) + } + + // + // Creaters. + // + + /** @returns {Blockquote} */ + function blockQuote() { + return { + type: 'blockquote', + children: [] + } + } + + /** @returns {Code} */ + function codeFlow() { + return { + type: 'code', + lang: null, + meta: null, + value: '' + } + } + + /** @returns {InlineCode} */ + function codeText() { + return { + type: 'inlineCode', + value: '' + } + } + + /** @returns {Definition} */ + function definition() { + return { + type: 'definition', + identifier: '', + label: null, + title: null, + url: '' + } + } + + /** @returns {Emphasis} */ + function emphasis() { + return { + type: 'emphasis', + children: [] + } + } + + /** @returns {Heading} */ + function heading() { + // @ts-expect-error `depth` will be set later. + return { + type: 'heading', + depth: undefined, + children: [] + } + } + + /** @returns {Break} */ + function hardBreak() { + return { + type: 'break' + } + } + + /** @returns {HTML} */ + function html() { + return { + type: 'html', + value: '' + } + } + + /** @returns {Image} */ + function image() { + return { + type: 'image', + title: null, + url: '', + alt: null + } + } + + /** @returns {Link} */ + function link() { + return { + type: 'link', + title: null, + url: '', + children: [] + } + } + + /** + * @param {Token} token + * @returns {List} + */ + function list(token) { + return { + type: 'list', + ordered: token.type === 'listOrdered', + start: null, + spread: token._spread, + children: [] + } + } + + /** + * @param {Token} token + * @returns {ListItem} + */ + function listItem(token) { + return { + type: 'listItem', + spread: token._spread, + checked: null, + children: [] + } + } + + /** @returns {Paragraph} */ + function paragraph() { + return { + type: 'paragraph', + children: [] + } + } + + /** @returns {Strong} */ + function strong() { + return { + type: 'strong', + children: [] + } + } + + /** @returns {Text} */ + function text() { + return { + type: 'text', + value: '' + } + } + + /** @returns {ThematicBreak} */ + function thematicBreak() { + return { + type: 'thematicBreak' + } + } +} + +/** + * Copy a point-like value. + * + * @param {Point} d + * Point-like value. + * @returns {Point} + * unist point. + */ +function lib_point(d) { + return { + line: d.line, + column: d.column, + offset: d.offset + } +} + +/** + * @param {Config} combined + * @param {Array<Extension | Array<Extension>>} extensions + * @returns {void} + */ +function configure(combined, extensions) { + let index = -1 + while (++index < extensions.length) { + const value = extensions[index] + if (Array.isArray(value)) { + configure(combined, value) + } else { + extension(combined, value) + } + } +} + +/** + * @param {Config} combined + * @param {Extension} extension + * @returns {void} + */ +function extension(combined, extension) { + /** @type {keyof Extension} */ + let key + for (key in extension) { + if (lib_own.call(extension, key)) { + if (key === 'canContainEols') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'transforms') { + const right = extension[key] + if (right) { + combined[key].push(...right) + } + } else if (key === 'enter' || key === 'exit') { + const right = extension[key] + if (right) { + Object.assign(combined[key], right) + } + } + } + } +} + +/** @type {OnEnterError} */ +function defaultOnError(left, right) { + if (left) { + throw new Error( + 'Cannot close `' + + left.type + + '` (' + + stringifyPosition({ + start: left.start, + end: left.end + }) + + '): a different token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is open' + ) + } else { + throw new Error( + 'Cannot close document, a token (`' + + right.type + + '`, ' + + stringifyPosition({ + start: right.start, + end: right.end + }) + + ') is still open' + ) + } +} + +// EXTERNAL MODULE: ./node_modules/ts-dedent/esm/index.js +var esm = __webpack_require__(18464); +;// CONCATENATED MODULE: ./node_modules/mermaid/dist/createText-423428c9.js + + + +function preprocessMarkdown(markdown) { + const withoutMultipleNewlines = markdown.replace(/\n{2,}/g, "\n"); + const withoutExtraSpaces = (0,esm/* dedent */.Z)(withoutMultipleNewlines); + return withoutExtraSpaces; +} +function markdownToLines(markdown) { + const preprocessedMarkdown = preprocessMarkdown(markdown); + const { children } = fromMarkdown(preprocessedMarkdown); + const lines = [[]]; + let currentLine = 0; + function processNode(node, parentType = "normal") { + if (node.type === "text") { + const textLines = node.value.split("\n"); + textLines.forEach((textLine, index) => { + if (index !== 0) { + currentLine++; + lines.push([]); + } + textLine.split(" ").forEach((word) => { + if (word) { + lines[currentLine].push({ content: word, type: parentType }); + } + }); + }); + } else if (node.type === "strong" || node.type === "emphasis") { + node.children.forEach((contentNode) => { + processNode(contentNode, node.type); + }); + } + } + children.forEach((treeNode) => { + if (treeNode.type === "paragraph") { + treeNode.children.forEach((contentNode) => { + processNode(contentNode); + }); + } + }); + return lines; +} +function markdownToHTML(markdown) { + const { children } = fromMarkdown(markdown); + function output(node) { + if (node.type === "text") { + return node.value.replace(/\n/g, "<br/>"); + } else if (node.type === "strong") { + return `<strong>${node.children.map(output).join("")}</strong>`; + } else if (node.type === "emphasis") { + return `<em>${node.children.map(output).join("")}</em>`; + } else if (node.type === "paragraph") { + return `<p>${node.children.map(output).join("")}</p>`; + } + return `Unsupported markdown: ${node.type}`; + } + return children.map(output).join(""); +} +function splitTextToChars(text) { + if (Intl.Segmenter) { + return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); + } + return [...text]; +} +function splitWordToFitWidth(checkFit, word) { + const characters = splitTextToChars(word.content); + return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); +} +function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { + if (remainingChars.length === 0) { + return [ + { content: usedChars.join(""), type }, + { content: "", type } + ]; + } + const [nextChar, ...rest] = remainingChars; + const newWord = [...usedChars, nextChar]; + if (checkFit([{ content: newWord.join(""), type }])) { + return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); + } + if (usedChars.length === 0 && nextChar) { + usedChars.push(nextChar); + remainingChars.shift(); + } + return [ + { content: usedChars.join(""), type }, + { content: remainingChars.join(""), type } + ]; +} +function splitLineToFitWidth(line, checkFit) { + if (line.some(({ content }) => content.includes("\n"))) { + throw new Error("splitLineToFitWidth does not support newlines in the line"); + } + return splitLineToFitWidthRecursion(line, checkFit); +} +function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { + if (words.length === 0) { + if (newLine.length > 0) { + lines.push(newLine); + } + return lines.length > 0 ? lines : []; + } + let joiner = ""; + if (words[0].content === " ") { + joiner = " "; + words.shift(); + } + const nextWord = words.shift() ?? { content: " ", type: "normal" }; + const lineWithNextWord = [...newLine]; + if (joiner !== "") { + lineWithNextWord.push({ content: joiner, type: "normal" }); + } + lineWithNextWord.push(nextWord); + if (checkFit(lineWithNextWord)) { + return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); + } + if (newLine.length > 0) { + lines.push(newLine); + words.unshift(nextWord); + } else if (nextWord.content) { + const [line, rest] = splitWordToFitWidth(checkFit, nextWord); + lines.push([line]); + if (rest.content) { + words.unshift(rest); + } + } + return splitLineToFitWidthRecursion(words, checkFit, lines); +} +function applyStyle(dom, styleFn) { + if (styleFn) { + dom.attr("style", styleFn); + } +} +function addHtmlSpan(element, node, width, classes, addBackground = false) { + const fo = element.append("foreignObject"); + const div = fo.append("xhtml:div"); + const label = node.label; + const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; + div.html( + ` + <span class="${labelClass} ${classes}" ` + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>" + ); + applyStyle(div, node.labelStyle); + div.style("display", "table-cell"); + div.style("white-space", "nowrap"); + div.style("max-width", width + "px"); + div.attr("xmlns", "http://www.w3.org/1999/xhtml"); + if (addBackground) { + div.attr("class", "labelBkg"); + } + let bbox = div.node().getBoundingClientRect(); + if (bbox.width === width) { + div.style("display", "table"); + div.style("white-space", "break-spaces"); + div.style("width", width + "px"); + bbox = div.node().getBoundingClientRect(); + } + fo.style("width", bbox.width); + fo.style("height", bbox.height); + return fo.node(); +} +function createTspan(textElement, lineIndex, lineHeight) { + return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); +} +function computeWidthOfText(parentNode, lineHeight, line) { + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, line); + const textLength = testSpan.node().getComputedTextLength(); + testElement.remove(); + return textLength; +} +function computeDimensionOfText(parentNode, lineHeight, text) { + var _a; + const testElement = parentNode.append("text"); + const testSpan = createTspan(testElement, 1, lineHeight); + updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); + const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect(); + if (textDimension) { + testElement.remove(); + } + return textDimension; +} +function createFormattedText(width, g, structuredText, addBackground = false) { + const lineHeight = 1.1; + const labelGroup = g.append("g"); + const bkg = labelGroup.insert("rect").attr("class", "background"); + const textElement = labelGroup.append("text").attr("y", "-10.1"); + let lineIndex = 0; + for (const line of structuredText) { + const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width; + const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); + for (const preparedLine of linesUnderWidth) { + const tspan = createTspan(textElement, lineIndex, lineHeight); + updateTextContentAndStyles(tspan, preparedLine); + lineIndex++; + } + } + if (addBackground) { + const bbox = textElement.node().getBBox(); + const padding = 2; + bkg.attr("x", -padding).attr("y", -padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); + return labelGroup.node(); + } else { + return textElement.node(); + } +} +function updateTextContentAndStyles(tspan, wrappedLine) { + tspan.text(""); + wrappedLine.forEach((word, index) => { + const innerTspan = tspan.append("tspan").attr("font-style", word.type === "emphasis" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); + if (index === 0) { + innerTspan.text(word.content); + } else { + innerTspan.text(" " + word.content); + } + }); +} +const createText = (el, text = "", { + style = "", + isTitle = false, + classes = "", + useHtmlLabels = true, + isNode = true, + width = 200, + addSvgBackground = false +} = {}) => { + mermaid_0603ccf8.l.info("createText", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground); + if (useHtmlLabels) { + const htmlText = markdownToHTML(text); + const node = { + isNode, + label: (0,mermaid_0603ccf8.J)(htmlText).replace( + /fa[blrs]?:fa-[\w-]+/g, + (s) => `<i class='${s.replace(":", " ")}'></i>` + ), + labelStyle: style.replace("fill:", "color:") + }; + const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground); + return vertexNode; + } else { + const structuredText = markdownToLines(text); + const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground); + return svgLabel; + } +}; + + + +/***/ }), + +/***/ 83966: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28758); +/* harmony import */ var _createText_423428c9_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(39164); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22424); + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 10, 12, 14, 16, 18, 19, 21, 23], $V1 = [2, 6], $V2 = [1, 3], $V3 = [1, 5], $V4 = [1, 6], $V5 = [1, 7], $V6 = [1, 5, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $V7 = [1, 25], $V8 = [1, 26], $V9 = [1, 28], $Va = [1, 29], $Vb = [1, 30], $Vc = [1, 31], $Vd = [1, 32], $Ve = [1, 33], $Vf = [1, 34], $Vg = [1, 35], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 43], $Vk = [1, 42], $Vl = [1, 47], $Vm = [1, 50], $Vn = [1, 10, 12, 14, 16, 18, 19, 21, 23, 34, 35, 36], $Vo = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36], $Vp = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $Vq = [1, 64]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "eol": 4, "XYCHART": 5, "chartConfig": 6, "document": 7, "CHART_ORIENTATION": 8, "statement": 9, "title": 10, "text": 11, "X_AXIS": 12, "parseXAxis": 13, "Y_AXIS": 14, "parseYAxis": 15, "LINE": 16, "plotData": 17, "BAR": 18, "acc_title": 19, "acc_title_value": 20, "acc_descr": 21, "acc_descr_value": 22, "acc_descr_multiline_value": 23, "SQUARE_BRACES_START": 24, "commaSeparatedNumbers": 25, "SQUARE_BRACES_END": 26, "NUMBER_WITH_DECIMAL": 27, "COMMA": 28, "xAxisData": 29, "bandData": 30, "ARROW_DELIMITER": 31, "commaSeparatedTexts": 32, "yAxisData": 33, "NEWLINE": 34, "SEMI": 35, "EOF": 36, "alphaNum": 37, "STR": 38, "MD_STR": 39, "alphaNumToken": 40, "AMP": 41, "NUM": 42, "ALPHA": 43, "PLUS": 44, "EQUALS": 45, "MULT": 46, "DOT": 47, "BRKT": 48, "MINUS": 49, "UNDERSCORE": 50, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "XYCHART", 8: "CHART_ORIENTATION", 10: "title", 12: "X_AXIS", 14: "Y_AXIS", 16: "LINE", 18: "BAR", 19: "acc_title", 20: "acc_title_value", 21: "acc_descr", 22: "acc_descr_value", 23: "acc_descr_multiline_value", 24: "SQUARE_BRACES_START", 26: "SQUARE_BRACES_END", 27: "NUMBER_WITH_DECIMAL", 28: "COMMA", 31: "ARROW_DELIMITER", 34: "NEWLINE", 35: "SEMI", 36: "EOF", 38: "STR", 39: "MD_STR", 41: "AMP", 42: "NUM", 43: "ALPHA", 44: "PLUS", 45: "EQUALS", 46: "MULT", 47: "DOT", 48: "BRKT", 49: "MINUS", 50: "UNDERSCORE" }, + productions_: [0, [3, 2], [3, 3], [3, 2], [3, 1], [6, 1], [7, 0], [7, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 2], [9, 3], [9, 2], [9, 3], [9, 2], [9, 2], [9, 1], [17, 3], [25, 3], [25, 1], [13, 1], [13, 2], [13, 1], [29, 1], [29, 3], [30, 3], [32, 3], [32, 1], [15, 1], [15, 2], [15, 1], [33, 3], [4, 1], [4, 1], [4, 1], [11, 1], [11, 1], [11, 1], [37, 1], [37, 2], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 5: + yy.setOrientation($$[$0]); + break; + case 9: + yy.setDiagramTitle($$[$0].text.trim()); + break; + case 12: + yy.setLineData({ text: "", type: "text" }, $$[$0]); + break; + case 13: + yy.setLineData($$[$0 - 1], $$[$0]); + break; + case 14: + yy.setBarData({ text: "", type: "text" }, $$[$0]); + break; + case 15: + yy.setBarData($$[$0 - 1], $$[$0]); + break; + case 16: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 17: + case 18: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 19: + this.$ = $$[$0 - 1]; + break; + case 20: + this.$ = [Number($$[$0 - 2]), ...$$[$0]]; + break; + case 21: + this.$ = [Number($$[$0])]; + break; + case 22: + yy.setXAxisTitle($$[$0]); + break; + case 23: + yy.setXAxisTitle($$[$0 - 1]); + break; + case 24: + yy.setXAxisTitle({ type: "text", text: "" }); + break; + case 25: + yy.setXAxisBand($$[$0]); + break; + case 26: + yy.setXAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); + break; + case 27: + this.$ = $$[$0 - 1]; + break; + case 28: + this.$ = [$$[$0 - 2], ...$$[$0]]; + break; + case 29: + this.$ = [$$[$0]]; + break; + case 30: + yy.setYAxisTitle($$[$0]); + break; + case 31: + yy.setYAxisTitle($$[$0 - 1]); + break; + case 32: + yy.setYAxisTitle({ type: "text", text: "" }); + break; + case 33: + yy.setYAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); + break; + case 37: + this.$ = { text: $$[$0], type: "text" }; + break; + case 38: + this.$ = { text: $$[$0], type: "text" }; + break; + case 39: + this.$ = { text: $$[$0], type: "markdown" }; + break; + case 40: + this.$ = $$[$0]; + break; + case 41: + this.$ = $$[$0 - 1] + "" + $$[$0]; + break; + } + }, + table: [o($V0, $V1, { 3: 1, 4: 2, 7: 4, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [3] }, o($V0, $V1, { 4: 2, 7: 4, 3: 8, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), o($V0, $V1, { 4: 2, 7: 4, 6: 9, 3: 10, 5: $V2, 8: [1, 11], 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 4], 9: 12, 10: [1, 13], 12: [1, 14], 14: [1, 15], 16: [1, 16], 18: [1, 17], 19: [1, 18], 21: [1, 19], 23: [1, 20] }, o($V6, [2, 34]), o($V6, [2, 35]), o($V6, [2, 36]), { 1: [2, 1] }, o($V0, $V1, { 4: 2, 7: 4, 3: 21, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 3] }, o($V6, [2, 5]), o($V0, [2, 7], { 4: 22, 34: $V3, 35: $V4, 36: $V5 }), { 11: 23, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 39, 13: 38, 24: $Vj, 27: $Vk, 29: 40, 30: 41, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 45, 15: 44, 27: $Vl, 33: 46, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 49, 17: 48, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 52, 17: 51, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 20: [1, 53] }, { 22: [1, 54] }, o($Vn, [2, 18]), { 1: [2, 2] }, o($Vn, [2, 8]), o($Vn, [2, 9]), o($Vo, [2, 37], { 40: 55, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }), o($Vo, [2, 38]), o($Vo, [2, 39]), o($Vp, [2, 40]), o($Vp, [2, 42]), o($Vp, [2, 43]), o($Vp, [2, 44]), o($Vp, [2, 45]), o($Vp, [2, 46]), o($Vp, [2, 47]), o($Vp, [2, 48]), o($Vp, [2, 49]), o($Vp, [2, 50]), o($Vp, [2, 51]), o($Vn, [2, 10]), o($Vn, [2, 22], { 30: 41, 29: 56, 24: $Vj, 27: $Vk }), o($Vn, [2, 24]), o($Vn, [2, 25]), { 31: [1, 57] }, { 11: 59, 32: 58, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o($Vn, [2, 11]), o($Vn, [2, 30], { 33: 60, 27: $Vl }), o($Vn, [2, 32]), { 31: [1, 61] }, o($Vn, [2, 12]), { 17: 62, 24: $Vm }, { 25: 63, 27: $Vq }, o($Vn, [2, 14]), { 17: 65, 24: $Vm }, o($Vn, [2, 16]), o($Vn, [2, 17]), o($Vp, [2, 41]), o($Vn, [2, 23]), { 27: [1, 66] }, { 26: [1, 67] }, { 26: [2, 29], 28: [1, 68] }, o($Vn, [2, 31]), { 27: [1, 69] }, o($Vn, [2, 13]), { 26: [1, 70] }, { 26: [2, 21], 28: [1, 71] }, o($Vn, [2, 15]), o($Vn, [2, 26]), o($Vn, [2, 27]), { 11: 59, 32: 72, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o($Vn, [2, 33]), o($Vn, [2, 19]), { 25: 73, 27: $Vq }, { 26: [2, 28] }, { 26: [2, 20] }], + defaultActions: { 8: [2, 1], 10: [2, 3], 21: [2, 2], 72: [2, 28], 73: [2, 20] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + break; + case 2: + this.popState(); + return 34; + case 3: + this.popState(); + return 34; + case 4: + return 34; + case 5: + break; + case 6: + return 10; + case 7: + this.pushState("acc_title"); + return 19; + case 8: + this.popState(); + return "acc_title_value"; + case 9: + this.pushState("acc_descr"); + return 21; + case 10: + this.popState(); + return "acc_descr_value"; + case 11: + this.pushState("acc_descr_multiline"); + break; + case 12: + this.popState(); + break; + case 13: + return "acc_descr_multiline_value"; + case 14: + return 5; + case 15: + return 8; + case 16: + this.pushState("axis_data"); + return "X_AXIS"; + case 17: + this.pushState("axis_data"); + return "Y_AXIS"; + case 18: + this.pushState("axis_band_data"); + return 24; + case 19: + return 31; + case 20: + this.pushState("data"); + return 16; + case 21: + this.pushState("data"); + return 18; + case 22: + this.pushState("data_inner"); + return 24; + case 23: + return 27; + case 24: + this.popState(); + return 26; + case 25: + this.popState(); + break; + case 26: + this.pushState("string"); + break; + case 27: + this.popState(); + break; + case 28: + return "STR"; + case 29: + return 24; + case 30: + return 26; + case 31: + return 43; + case 32: + return "COLON"; + case 33: + return 44; + case 34: + return 28; + case 35: + return 45; + case 36: + return 46; + case 37: + return 48; + case 38: + return 50; + case 39: + return 47; + case 40: + return 41; + case 41: + return 49; + case 42: + return 42; + case 43: + break; + case 44: + return 35; + case 45: + return 36; + } + }, + rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:(\r?\n))/i, /^(?:(\r?\n))/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:title\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:\{)/i, /^(?:[^\}]*)/i, /^(?:xychart-beta\b)/i, /^(?:(?:vertical|horizontal))/i, /^(?:x-axis\b)/i, /^(?:y-axis\b)/i, /^(?:\[)/i, /^(?:-->)/i, /^(?:line\b)/i, /^(?:bar\b)/i, /^(?:\[)/i, /^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i, /^(?:\])/i, /^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:\[)/i, /^(?:\])/i, /^(?:[A-Za-z]+)/i, /^(?::)/i, /^(?:\+)/i, /^(?:,)/i, /^(?:=)/i, /^(?:\*)/i, /^(?:#)/i, /^(?:[\_])/i, /^(?:\.)/i, /^(?:&)/i, /^(?:-)/i, /^(?:[0-9]+)/i, /^(?:\s+)/i, /^(?:;)/i, /^(?:$)/i], + conditions: { "data_inner": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "data": { "rules": [0, 1, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 22, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "axis_band_data": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "axis_data": { "rules": [0, 1, 2, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "title": { "rules": [], "inclusive": false }, "md_string": { "rules": [], "inclusive": false }, "string": { "rules": [27, 28], "inclusive": false }, "INITIAL": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +function isBarPlot(data) { + return data.type === "bar"; +} +function isBandAxisData(data) { + return data.type === "band"; +} +function isLinearAxisData(data) { + return data.type === "linear"; +} +class TextDimensionCalculatorWithFont { + constructor(parentGroup) { + this.parentGroup = parentGroup; + } + getMaxDimension(texts, fontSize) { + if (!this.parentGroup) { + return { + width: texts.reduce((acc, cur) => Math.max(cur.length, acc), 0) * fontSize, + height: fontSize + }; + } + const dimension = { + width: 0, + height: 0 + }; + const elem = this.parentGroup.append("g").attr("visibility", "hidden").attr("font-size", fontSize); + for (const t of texts) { + const bbox = (0,_createText_423428c9_js__WEBPACK_IMPORTED_MODULE_4__.c)(elem, 1, t); + const width = bbox ? bbox.width : t.length * fontSize; + const height = bbox ? bbox.height : fontSize; + dimension.width = Math.max(dimension.width, width); + dimension.height = Math.max(dimension.height, height); + } + elem.remove(); + return dimension; + } +} +const BAR_WIDTH_TO_TICK_WIDTH_RATIO = 0.7; +const MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL = 0.2; +class BaseAxis { + constructor(axisConfig, title, textDimensionCalculator, axisThemeConfig) { + this.axisConfig = axisConfig; + this.title = title; + this.textDimensionCalculator = textDimensionCalculator; + this.axisThemeConfig = axisThemeConfig; + this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; + this.axisPosition = "left"; + this.showTitle = false; + this.showLabel = false; + this.showTick = false; + this.showAxisLine = false; + this.outerPadding = 0; + this.titleTextHeight = 0; + this.labelTextHeight = 0; + this.range = [0, 10]; + this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; + this.axisPosition = "left"; + } + setRange(range) { + this.range = range; + if (this.axisPosition === "left" || this.axisPosition === "right") { + this.boundingRect.height = range[1] - range[0]; + } else { + this.boundingRect.width = range[1] - range[0]; + } + this.recalculateScale(); + } + getRange() { + return [this.range[0] + this.outerPadding, this.range[1] - this.outerPadding]; + } + setAxisPosition(axisPosition) { + this.axisPosition = axisPosition; + this.setRange(this.range); + } + getTickDistance() { + const range = this.getRange(); + return Math.abs(range[0] - range[1]) / this.getTickValues().length; + } + getAxisOuterPadding() { + return this.outerPadding; + } + getLabelDimension() { + return this.textDimensionCalculator.getMaxDimension( + this.getTickValues().map((tick) => tick.toString()), + this.axisConfig.labelFontSize + ); + } + recalculateOuterPaddingToDrawBar() { + if (BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() > this.outerPadding * 2) { + this.outerPadding = Math.floor(BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() / 2); + } + this.recalculateScale(); + } + calculateSpaceIfDrawnHorizontally(availableSpace) { + let availableHeight = availableSpace.height; + if (this.axisConfig.showAxisLine && availableHeight > this.axisConfig.axisLineWidth) { + availableHeight -= this.axisConfig.axisLineWidth; + this.showAxisLine = true; + } + if (this.axisConfig.showLabel) { + const spaceRequired = this.getLabelDimension(); + const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.width; + this.outerPadding = Math.min(spaceRequired.width / 2, maxPadding); + const heightRequired = spaceRequired.height + this.axisConfig.labelPadding * 2; + this.labelTextHeight = spaceRequired.height; + if (heightRequired <= availableHeight) { + availableHeight -= heightRequired; + this.showLabel = true; + } + } + if (this.axisConfig.showTick && availableHeight >= this.axisConfig.tickLength) { + this.showTick = true; + availableHeight -= this.axisConfig.tickLength; + } + if (this.axisConfig.showTitle && this.title) { + const spaceRequired = this.textDimensionCalculator.getMaxDimension( + [this.title], + this.axisConfig.titleFontSize + ); + const heightRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; + this.titleTextHeight = spaceRequired.height; + if (heightRequired <= availableHeight) { + availableHeight -= heightRequired; + this.showTitle = true; + } + } + this.boundingRect.width = availableSpace.width; + this.boundingRect.height = availableSpace.height - availableHeight; + } + calculateSpaceIfDrawnVertical(availableSpace) { + let availableWidth = availableSpace.width; + if (this.axisConfig.showAxisLine && availableWidth > this.axisConfig.axisLineWidth) { + availableWidth -= this.axisConfig.axisLineWidth; + this.showAxisLine = true; + } + if (this.axisConfig.showLabel) { + const spaceRequired = this.getLabelDimension(); + const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.height; + this.outerPadding = Math.min(spaceRequired.height / 2, maxPadding); + const widthRequired = spaceRequired.width + this.axisConfig.labelPadding * 2; + if (widthRequired <= availableWidth) { + availableWidth -= widthRequired; + this.showLabel = true; + } + } + if (this.axisConfig.showTick && availableWidth >= this.axisConfig.tickLength) { + this.showTick = true; + availableWidth -= this.axisConfig.tickLength; + } + if (this.axisConfig.showTitle && this.title) { + const spaceRequired = this.textDimensionCalculator.getMaxDimension( + [this.title], + this.axisConfig.titleFontSize + ); + const widthRequired = spaceRequired.height + this.axisConfig.titlePadding * 2; + this.titleTextHeight = spaceRequired.height; + if (widthRequired <= availableWidth) { + availableWidth -= widthRequired; + this.showTitle = true; + } + } + this.boundingRect.width = availableSpace.width - availableWidth; + this.boundingRect.height = availableSpace.height; + } + calculateSpace(availableSpace) { + if (this.axisPosition === "left" || this.axisPosition === "right") { + this.calculateSpaceIfDrawnVertical(availableSpace); + } else { + this.calculateSpaceIfDrawnHorizontally(availableSpace); + } + this.recalculateScale(); + return { + width: this.boundingRect.width, + height: this.boundingRect.height + }; + } + setBoundingBoxXY(point) { + this.boundingRect.x = point.x; + this.boundingRect.y = point.y; + } + getDrawableElementsForLeftAxis() { + const drawableElement = []; + if (this.showAxisLine) { + const x = this.boundingRect.x + this.boundingRect.width - this.axisConfig.axisLineWidth / 2; + drawableElement.push({ + type: "path", + groupTexts: ["left-axis", "axisl-line"], + data: [ + { + path: `M ${x},${this.boundingRect.y} L ${x},${this.boundingRect.y + this.boundingRect.height} `, + strokeFill: this.axisThemeConfig.axisLineColor, + strokeWidth: this.axisConfig.axisLineWidth + } + ] + }); + } + if (this.showLabel) { + drawableElement.push({ + type: "text", + groupTexts: ["left-axis", "label"], + data: this.getTickValues().map((tick) => ({ + text: tick.toString(), + x: this.boundingRect.x + this.boundingRect.width - (this.showLabel ? this.axisConfig.labelPadding : 0) - (this.showTick ? this.axisConfig.tickLength : 0) - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0), + y: this.getScaleValue(tick), + fill: this.axisThemeConfig.labelColor, + fontSize: this.axisConfig.labelFontSize, + rotation: 0, + verticalPos: "middle", + horizontalPos: "right" + })) + }); + } + if (this.showTick) { + const x = this.boundingRect.x + this.boundingRect.width - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); + drawableElement.push({ + type: "path", + groupTexts: ["left-axis", "ticks"], + data: this.getTickValues().map((tick) => ({ + path: `M ${x},${this.getScaleValue(tick)} L ${x - this.axisConfig.tickLength},${this.getScaleValue(tick)}`, + strokeFill: this.axisThemeConfig.tickColor, + strokeWidth: this.axisConfig.tickWidth + })) + }); + } + if (this.showTitle) { + drawableElement.push({ + type: "text", + groupTexts: ["left-axis", "title"], + data: [ + { + text: this.title, + x: this.boundingRect.x + this.axisConfig.titlePadding, + y: this.boundingRect.y + this.boundingRect.height / 2, + fill: this.axisThemeConfig.titleColor, + fontSize: this.axisConfig.titleFontSize, + rotation: 270, + verticalPos: "top", + horizontalPos: "center" + } + ] + }); + } + return drawableElement; + } + getDrawableElementsForBottomAxis() { + const drawableElement = []; + if (this.showAxisLine) { + const y = this.boundingRect.y + this.axisConfig.axisLineWidth / 2; + drawableElement.push({ + type: "path", + groupTexts: ["bottom-axis", "axis-line"], + data: [ + { + path: `M ${this.boundingRect.x},${y} L ${this.boundingRect.x + this.boundingRect.width},${y}`, + strokeFill: this.axisThemeConfig.axisLineColor, + strokeWidth: this.axisConfig.axisLineWidth + } + ] + }); + } + if (this.showLabel) { + drawableElement.push({ + type: "text", + groupTexts: ["bottom-axis", "label"], + data: this.getTickValues().map((tick) => ({ + text: tick.toString(), + x: this.getScaleValue(tick), + y: this.boundingRect.y + this.axisConfig.labelPadding + (this.showTick ? this.axisConfig.tickLength : 0) + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0), + fill: this.axisThemeConfig.labelColor, + fontSize: this.axisConfig.labelFontSize, + rotation: 0, + verticalPos: "top", + horizontalPos: "center" + })) + }); + } + if (this.showTick) { + const y = this.boundingRect.y + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0); + drawableElement.push({ + type: "path", + groupTexts: ["bottom-axis", "ticks"], + data: this.getTickValues().map((tick) => ({ + path: `M ${this.getScaleValue(tick)},${y} L ${this.getScaleValue(tick)},${y + this.axisConfig.tickLength}`, + strokeFill: this.axisThemeConfig.tickColor, + strokeWidth: this.axisConfig.tickWidth + })) + }); + } + if (this.showTitle) { + drawableElement.push({ + type: "text", + groupTexts: ["bottom-axis", "title"], + data: [ + { + text: this.title, + x: this.range[0] + (this.range[1] - this.range[0]) / 2, + y: this.boundingRect.y + this.boundingRect.height - this.axisConfig.titlePadding - this.titleTextHeight, + fill: this.axisThemeConfig.titleColor, + fontSize: this.axisConfig.titleFontSize, + rotation: 0, + verticalPos: "top", + horizontalPos: "center" + } + ] + }); + } + return drawableElement; + } + getDrawableElementsForTopAxis() { + const drawableElement = []; + if (this.showAxisLine) { + const y = this.boundingRect.y + this.boundingRect.height - this.axisConfig.axisLineWidth / 2; + drawableElement.push({ + type: "path", + groupTexts: ["top-axis", "axis-line"], + data: [ + { + path: `M ${this.boundingRect.x},${y} L ${this.boundingRect.x + this.boundingRect.width},${y}`, + strokeFill: this.axisThemeConfig.axisLineColor, + strokeWidth: this.axisConfig.axisLineWidth + } + ] + }); + } + if (this.showLabel) { + drawableElement.push({ + type: "text", + groupTexts: ["top-axis", "label"], + data: this.getTickValues().map((tick) => ({ + text: tick.toString(), + x: this.getScaleValue(tick), + y: this.boundingRect.y + (this.showTitle ? this.titleTextHeight + this.axisConfig.titlePadding * 2 : 0) + this.axisConfig.labelPadding, + fill: this.axisThemeConfig.labelColor, + fontSize: this.axisConfig.labelFontSize, + rotation: 0, + verticalPos: "top", + horizontalPos: "center" + })) + }); + } + if (this.showTick) { + const y = this.boundingRect.y; + drawableElement.push({ + type: "path", + groupTexts: ["top-axis", "ticks"], + data: this.getTickValues().map((tick) => ({ + path: `M ${this.getScaleValue(tick)},${y + this.boundingRect.height - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)} L ${this.getScaleValue(tick)},${y + this.boundingRect.height - this.axisConfig.tickLength - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)}`, + strokeFill: this.axisThemeConfig.tickColor, + strokeWidth: this.axisConfig.tickWidth + })) + }); + } + if (this.showTitle) { + drawableElement.push({ + type: "text", + groupTexts: ["top-axis", "title"], + data: [ + { + text: this.title, + x: this.boundingRect.x + this.boundingRect.width / 2, + y: this.boundingRect.y + this.axisConfig.titlePadding, + fill: this.axisThemeConfig.titleColor, + fontSize: this.axisConfig.titleFontSize, + rotation: 0, + verticalPos: "top", + horizontalPos: "center" + } + ] + }); + } + return drawableElement; + } + getDrawableElements() { + if (this.axisPosition === "left") { + return this.getDrawableElementsForLeftAxis(); + } + if (this.axisPosition === "right") { + throw Error("Drawing of right axis is not implemented"); + } + if (this.axisPosition === "bottom") { + return this.getDrawableElementsForBottomAxis(); + } + if (this.axisPosition === "top") { + return this.getDrawableElementsForTopAxis(); + } + return []; + } +} +class BandAxis extends BaseAxis { + constructor(axisConfig, axisThemeConfig, categories, title, textDimensionCalculator) { + super(axisConfig, title, textDimensionCalculator, axisThemeConfig); + this.categories = categories; + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleBand */ .tiA)().domain(this.categories).range(this.getRange()); + } + setRange(range) { + super.setRange(range); + } + recalculateScale() { + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleBand */ .tiA)().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(0.5); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.trace("BandAxis axis final categories, range: ", this.categories, this.getRange()); + } + getTickValues() { + return this.categories; + } + getScaleValue(value) { + return this.scale(value) || this.getRange()[0]; + } +} +class LinearAxis extends BaseAxis { + constructor(axisConfig, axisThemeConfig, domain, title, textDimensionCalculator) { + super(axisConfig, title, textDimensionCalculator, axisThemeConfig); + this.domain = domain; + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain(this.domain).range(this.getRange()); + } + getTickValues() { + return this.scale.ticks(); + } + recalculateScale() { + const domain = [...this.domain]; + if (this.axisPosition === "left") { + domain.reverse(); + } + this.scale = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .scaleLinear */ .BYU)().domain(domain).range(this.getRange()); + } + getScaleValue(value) { + return this.scale(value); + } +} +function getAxis(data, axisConfig, axisThemeConfig, tmpSVGGroup2) { + const textDimansionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); + if (isBandAxisData(data)) { + return new BandAxis( + axisConfig, + axisThemeConfig, + data.categories, + data.title, + textDimansionCalculator + ); + } + return new LinearAxis( + axisConfig, + axisThemeConfig, + [data.min, data.max], + data.title, + textDimansionCalculator + ); +} +class ChartTitle { + constructor(textDimensionCalculator, chartConfig, chartData, chartThemeConfig) { + this.textDimensionCalculator = textDimensionCalculator; + this.chartConfig = chartConfig; + this.chartData = chartData; + this.chartThemeConfig = chartThemeConfig; + this.boundingRect = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + this.showChartTitle = false; + } + setBoundingBoxXY(point) { + this.boundingRect.x = point.x; + this.boundingRect.y = point.y; + } + calculateSpace(availableSpace) { + const titleDimension = this.textDimensionCalculator.getMaxDimension( + [this.chartData.title], + this.chartConfig.titleFontSize + ); + const widthRequired = Math.max(titleDimension.width, availableSpace.width); + const heightRequired = titleDimension.height + 2 * this.chartConfig.titlePadding; + if (titleDimension.width <= widthRequired && titleDimension.height <= heightRequired && this.chartConfig.showTitle && this.chartData.title) { + this.boundingRect.width = widthRequired; + this.boundingRect.height = heightRequired; + this.showChartTitle = true; + } + return { + width: this.boundingRect.width, + height: this.boundingRect.height + }; + } + getDrawableElements() { + const drawableElem = []; + if (this.showChartTitle) { + drawableElem.push({ + groupTexts: ["chart-title"], + type: "text", + data: [ + { + fontSize: this.chartConfig.titleFontSize, + text: this.chartData.title, + verticalPos: "middle", + horizontalPos: "center", + x: this.boundingRect.x + this.boundingRect.width / 2, + y: this.boundingRect.y + this.boundingRect.height / 2, + fill: this.chartThemeConfig.titleColor, + rotation: 0 + } + ] + }); + } + return drawableElem; + } +} +function getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { + const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); + return new ChartTitle(textDimensionCalculator, chartConfig, chartData, chartThemeConfig); +} +class LinePlot { + constructor(plotData, xAxis, yAxis, orientation, plotIndex2) { + this.plotData = plotData; + this.xAxis = xAxis; + this.yAxis = yAxis; + this.orientation = orientation; + this.plotIndex = plotIndex2; + } + getDrawableElement() { + const finalData = this.plotData.data.map((d) => [ + this.xAxis.getScaleValue(d[0]), + this.yAxis.getScaleValue(d[1]) + ]); + let path; + if (this.orientation === "horizontal") { + path = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().y((d) => d[0]).x((d) => d[1])(finalData); + } else { + path = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x((d) => d[0]).y((d) => d[1])(finalData); + } + if (!path) { + return []; + } + return [ + { + groupTexts: ["plot", `line-plot-${this.plotIndex}`], + type: "path", + data: [ + { + path, + strokeFill: this.plotData.strokeFill, + strokeWidth: this.plotData.strokeWidth + } + ] + } + ]; + } +} +class BarPlot { + constructor(barData, boundingRect, xAxis, yAxis, orientation, plotIndex2) { + this.barData = barData; + this.boundingRect = boundingRect; + this.xAxis = xAxis; + this.yAxis = yAxis; + this.orientation = orientation; + this.plotIndex = plotIndex2; + } + getDrawableElement() { + const finalData = this.barData.data.map((d) => [ + this.xAxis.getScaleValue(d[0]), + this.yAxis.getScaleValue(d[1]) + ]); + const barPaddingPercent = 0.05; + const barWidth = Math.min(this.xAxis.getAxisOuterPadding() * 2, this.xAxis.getTickDistance()) * (1 - barPaddingPercent); + const barWidthHalf = barWidth / 2; + if (this.orientation === "horizontal") { + return [ + { + groupTexts: ["plot", `bar-plot-${this.plotIndex}`], + type: "rect", + data: finalData.map((data) => ({ + x: this.boundingRect.x, + y: data[0] - barWidthHalf, + height: barWidth, + width: data[1] - this.boundingRect.x, + fill: this.barData.fill, + strokeWidth: 0, + strokeFill: this.barData.fill + })) + } + ]; + } + return [ + { + groupTexts: ["plot", `bar-plot-${this.plotIndex}`], + type: "rect", + data: finalData.map((data) => ({ + x: data[0] - barWidthHalf, + y: data[1], + width: barWidth, + height: this.boundingRect.y + this.boundingRect.height - data[1], + fill: this.barData.fill, + strokeWidth: 0, + strokeFill: this.barData.fill + })) + } + ]; + } +} +class BasePlot { + constructor(chartConfig, chartData, chartThemeConfig) { + this.chartConfig = chartConfig; + this.chartData = chartData; + this.chartThemeConfig = chartThemeConfig; + this.boundingRect = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + } + setAxes(xAxis, yAxis) { + this.xAxis = xAxis; + this.yAxis = yAxis; + } + setBoundingBoxXY(point) { + this.boundingRect.x = point.x; + this.boundingRect.y = point.y; + } + calculateSpace(availableSpace) { + this.boundingRect.width = availableSpace.width; + this.boundingRect.height = availableSpace.height; + return { + width: this.boundingRect.width, + height: this.boundingRect.height + }; + } + getDrawableElements() { + if (!(this.xAxis && this.yAxis)) { + throw Error("Axes must be passed to render Plots"); + } + const drawableElem = []; + for (const [i, plot] of this.chartData.plots.entries()) { + switch (plot.type) { + case "line": + { + const linePlot = new LinePlot( + plot, + this.xAxis, + this.yAxis, + this.chartConfig.chartOrientation, + i + ); + drawableElem.push(...linePlot.getDrawableElement()); + } + break; + case "bar": + { + const barPlot = new BarPlot( + plot, + this.boundingRect, + this.xAxis, + this.yAxis, + this.chartConfig.chartOrientation, + i + ); + drawableElem.push(...barPlot.getDrawableElement()); + } + break; + } + } + return drawableElem; + } +} +function getPlotComponent(chartConfig, chartData, chartThemeConfig) { + return new BasePlot(chartConfig, chartData, chartThemeConfig); +} +class Orchestrator { + constructor(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2) { + this.chartConfig = chartConfig; + this.chartData = chartData; + this.componentStore = { + title: getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup2), + plot: getPlotComponent(chartConfig, chartData, chartThemeConfig), + xAxis: getAxis( + chartData.xAxis, + chartConfig.xAxis, + { + titleColor: chartThemeConfig.xAxisTitleColor, + labelColor: chartThemeConfig.xAxisLabelColor, + tickColor: chartThemeConfig.xAxisTickColor, + axisLineColor: chartThemeConfig.xAxisLineColor + }, + tmpSVGGroup2 + ), + yAxis: getAxis( + chartData.yAxis, + chartConfig.yAxis, + { + titleColor: chartThemeConfig.yAxisTitleColor, + labelColor: chartThemeConfig.yAxisLabelColor, + tickColor: chartThemeConfig.yAxisTickColor, + axisLineColor: chartThemeConfig.yAxisLineColor + }, + tmpSVGGroup2 + ) + }; + } + calculateVerticalSpace() { + let availableWidth = this.chartConfig.width; + let availableHeight = this.chartConfig.height; + let plotX = 0; + let plotY = 0; + let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); + let chartHeight = Math.floor( + availableHeight * this.chartConfig.plotReservedSpacePercent / 100 + ); + let spaceUsed = this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + availableWidth -= spaceUsed.width; + availableHeight -= spaceUsed.height; + spaceUsed = this.componentStore.title.calculateSpace({ + width: this.chartConfig.width, + height: availableHeight + }); + plotY = spaceUsed.height; + availableHeight -= spaceUsed.height; + this.componentStore.xAxis.setAxisPosition("bottom"); + spaceUsed = this.componentStore.xAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + availableHeight -= spaceUsed.height; + this.componentStore.yAxis.setAxisPosition("left"); + spaceUsed = this.componentStore.yAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + plotX = spaceUsed.width; + availableWidth -= spaceUsed.width; + if (availableWidth > 0) { + chartWidth += availableWidth; + availableWidth = 0; + } + if (availableHeight > 0) { + chartHeight += availableHeight; + availableHeight = 0; + } + this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); + this.componentStore.xAxis.setRange([plotX, plotX + chartWidth]); + this.componentStore.xAxis.setBoundingBoxXY({ x: plotX, y: plotY + chartHeight }); + this.componentStore.yAxis.setRange([plotY, plotY + chartHeight]); + this.componentStore.yAxis.setBoundingBoxXY({ x: 0, y: plotY }); + if (this.chartData.plots.some((p) => isBarPlot(p))) { + this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); + } + } + calculateHorizonatalSpace() { + let availableWidth = this.chartConfig.width; + let availableHeight = this.chartConfig.height; + let titleYEnd = 0; + let plotX = 0; + let plotY = 0; + let chartWidth = Math.floor(availableWidth * this.chartConfig.plotReservedSpacePercent / 100); + let chartHeight = Math.floor( + availableHeight * this.chartConfig.plotReservedSpacePercent / 100 + ); + let spaceUsed = this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + availableWidth -= spaceUsed.width; + availableHeight -= spaceUsed.height; + spaceUsed = this.componentStore.title.calculateSpace({ + width: this.chartConfig.width, + height: availableHeight + }); + titleYEnd = spaceUsed.height; + availableHeight -= spaceUsed.height; + this.componentStore.xAxis.setAxisPosition("left"); + spaceUsed = this.componentStore.xAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + availableWidth -= spaceUsed.width; + plotX = spaceUsed.width; + this.componentStore.yAxis.setAxisPosition("top"); + spaceUsed = this.componentStore.yAxis.calculateSpace({ + width: availableWidth, + height: availableHeight + }); + availableHeight -= spaceUsed.height; + plotY = titleYEnd + spaceUsed.height; + if (availableWidth > 0) { + chartWidth += availableWidth; + availableWidth = 0; + } + if (availableHeight > 0) { + chartHeight += availableHeight; + availableHeight = 0; + } + this.componentStore.plot.calculateSpace({ + width: chartWidth, + height: chartHeight + }); + this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY }); + this.componentStore.yAxis.setRange([plotX, plotX + chartWidth]); + this.componentStore.yAxis.setBoundingBoxXY({ x: plotX, y: titleYEnd }); + this.componentStore.xAxis.setRange([plotY, plotY + chartHeight]); + this.componentStore.xAxis.setBoundingBoxXY({ x: 0, y: plotY }); + if (this.chartData.plots.some((p) => isBarPlot(p))) { + this.componentStore.xAxis.recalculateOuterPaddingToDrawBar(); + } + } + calculateSpace() { + if (this.chartConfig.chartOrientation === "horizontal") { + this.calculateHorizonatalSpace(); + } else { + this.calculateVerticalSpace(); + } + } + getDrawableElement() { + this.calculateSpace(); + const drawableElem = []; + this.componentStore.plot.setAxes(this.componentStore.xAxis, this.componentStore.yAxis); + for (const component of Object.values(this.componentStore)) { + drawableElem.push(...component.getDrawableElements()); + } + return drawableElem; + } +} +class XYChartBuilder { + static build(config, chartData, chartThemeConfig, tmpSVGGroup2) { + const orchestrator = new Orchestrator(config, chartData, chartThemeConfig, tmpSVGGroup2); + return orchestrator.getDrawableElement(); + } +} +let plotIndex = 0; +let tmpSVGGroup; +let xyChartConfig = getChartDefaultConfig(); +let xyChartThemeConfig = getChartDefaultThemeConfig(); +let xyChartData = getChartDefaultData(); +let plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color) => color.trim()); +let hasSetXAxis = false; +let hasSetYAxis = false; +function getChartDefaultThemeConfig() { + const defaultThemeVariables = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.D)(); + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + return (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.B)(defaultThemeVariables.xyChart, config.themeVariables.xyChart); +} +function getChartDefaultConfig() { + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + return (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.B)( + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.A.xyChart, + config.xyChart + ); +} +function getChartDefaultData() { + return { + yAxis: { + type: "linear", + title: "", + min: Infinity, + max: -Infinity + }, + xAxis: { + type: "band", + title: "", + categories: [] + }, + title: "", + plots: [] + }; +} +function textSanitizer(text) { + const config = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.E)(); + return (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.d)(text.trim(), config); +} +function setTmpSVGG(SVGG) { + tmpSVGGroup = SVGG; +} +function setOrientation(orientation) { + if (orientation === "horizontal") { + xyChartConfig.chartOrientation = "horizontal"; + } else { + xyChartConfig.chartOrientation = "vertical"; + } +} +function setXAxisTitle(title) { + xyChartData.xAxis.title = textSanitizer(title.text); +} +function setXAxisRangeData(min, max) { + xyChartData.xAxis = { type: "linear", title: xyChartData.xAxis.title, min, max }; + hasSetXAxis = true; +} +function setXAxisBand(categories) { + xyChartData.xAxis = { + type: "band", + title: xyChartData.xAxis.title, + categories: categories.map((c) => textSanitizer(c.text)) + }; + hasSetXAxis = true; +} +function setYAxisTitle(title) { + xyChartData.yAxis.title = textSanitizer(title.text); +} +function setYAxisRangeData(min, max) { + xyChartData.yAxis = { type: "linear", title: xyChartData.yAxis.title, min, max }; + hasSetYAxis = true; +} +function setYAxisRangeFromPlotData(data) { + const minValue = Math.min(...data); + const maxValue = Math.max(...data); + const prevMinValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.min : Infinity; + const prevMaxValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.max : -Infinity; + xyChartData.yAxis = { + type: "linear", + title: xyChartData.yAxis.title, + min: Math.min(prevMinValue, minValue), + max: Math.max(prevMaxValue, maxValue) + }; +} +function transformDataWithoutCategory(data) { + let retData = []; + if (data.length === 0) { + return retData; + } + if (!hasSetXAxis) { + const prevMinValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.min : Infinity; + const prevMaxValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.max : -Infinity; + setXAxisRangeData(Math.min(prevMinValue, 1), Math.max(prevMaxValue, data.length)); + } + if (!hasSetYAxis) { + setYAxisRangeFromPlotData(data); + } + if (isBandAxisData(xyChartData.xAxis)) { + retData = xyChartData.xAxis.categories.map((c, i) => [c, data[i]]); + } + if (isLinearAxisData(xyChartData.xAxis)) { + const min = xyChartData.xAxis.min; + const max = xyChartData.xAxis.max; + const step = (max - min + 1) / data.length; + const categories = []; + for (let i = min; i <= max; i += step) { + categories.push(`${i}`); + } + retData = categories.map((c, i) => [c, data[i]]); + } + return retData; +} +function getPlotColorFromPalette(plotIndex2) { + return plotColorPalette[plotIndex2 === 0 ? 0 : plotIndex2 % plotColorPalette.length]; +} +function setLineData(title, data) { + const plotData = transformDataWithoutCategory(data); + xyChartData.plots.push({ + type: "line", + strokeFill: getPlotColorFromPalette(plotIndex), + strokeWidth: 2, + data: plotData + }); + plotIndex++; +} +function setBarData(title, data) { + const plotData = transformDataWithoutCategory(data); + xyChartData.plots.push({ + type: "bar", + fill: getPlotColorFromPalette(plotIndex), + data: plotData + }); + plotIndex++; +} +function getDrawableElem() { + if (xyChartData.plots.length === 0) { + throw Error("No Plot to render, please provide a plot with some data"); + } + xyChartData.title = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.r)(); + return XYChartBuilder.build(xyChartConfig, xyChartData, xyChartThemeConfig, tmpSVGGroup); +} +function getChartThemeConfig() { + return xyChartThemeConfig; +} +function getChartConfig() { + return xyChartConfig; +} +const clear = function() { + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.t)(); + plotIndex = 0; + xyChartConfig = getChartDefaultConfig(); + xyChartData = getChartDefaultData(); + xyChartThemeConfig = getChartDefaultThemeConfig(); + plotColorPalette = xyChartThemeConfig.plotColorPalette.split(",").map((color) => color.trim()); + hasSetXAxis = false; + hasSetYAxis = false; +}; +const db = { + getDrawableElem, + clear, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.g, + setDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.q, + getDiagramTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.r, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.a, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.b, + setOrientation, + setXAxisTitle, + setXAxisRangeData, + setXAxisBand, + setYAxisTitle, + setYAxisRangeData, + setLineData, + setBarData, + setTmpSVGG, + getChartThemeConfig, + getChartConfig +}; +const draw = (txt, id, _version, diagObj) => { + const db2 = diagObj.db; + const themeConfig = db2.getChartThemeConfig(); + const chartConfig = db2.getChartConfig(); + function getDominantBaseLine(horizontalPos) { + return horizontalPos === "top" ? "text-before-edge" : "middle"; + } + function getTextAnchor(verticalPos) { + return verticalPos === "left" ? "start" : verticalPos === "right" ? "end" : "middle"; + } + function getTextTransformation(data) { + return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`; + } + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.l.debug("Rendering xychart chart\n" + txt); + const svg = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.z)(id); + const group = svg.append("g").attr("class", "main"); + const background = group.append("rect").attr("width", chartConfig.width).attr("height", chartConfig.height).attr("class", "background"); + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_5__.i)(svg, chartConfig.height, chartConfig.width, true); + svg.attr("viewBox", `0 0 ${chartConfig.width} ${chartConfig.height}`); + background.attr("fill", themeConfig.backgroundColor); + db2.setTmpSVGG(svg.append("g").attr("class", "mermaid-tmp-group")); + const shapes = db2.getDrawableElem(); + const groups = {}; + function getGroup(gList) { + let elem = group; + let prefix = ""; + for (const [i] of gList.entries()) { + let parent = group; + if (i > 0 && groups[prefix]) { + parent = groups[prefix]; + } + prefix += gList[i]; + elem = groups[prefix]; + if (!elem) { + elem = groups[prefix] = parent.append("g").attr("class", gList[i]); + } + } + return elem; + } + for (const shape of shapes) { + if (shape.data.length === 0) { + continue; + } + const shapeGroup = getGroup(shape.groupTexts); + switch (shape.type) { + case "rect": + shapeGroup.selectAll("rect").data(shape.data).enter().append("rect").attr("x", (data) => data.x).attr("y", (data) => data.y).attr("width", (data) => data.width).attr("height", (data) => data.height).attr("fill", (data) => data.fill).attr("stroke", (data) => data.strokeFill).attr("stroke-width", (data) => data.strokeWidth); + break; + case "text": + shapeGroup.selectAll("text").data(shape.data).enter().append("text").attr("x", 0).attr("y", 0).attr("fill", (data) => data.fill).attr("font-size", (data) => data.fontSize).attr("dominant-baseline", (data) => getDominantBaseLine(data.verticalPos)).attr("text-anchor", (data) => getTextAnchor(data.horizontalPos)).attr("transform", (data) => getTextTransformation(data)).text((data) => data.text); + break; + case "path": + shapeGroup.selectAll("path").data(shape.data).enter().append("path").attr("d", (data) => data.path).attr("fill", (data) => data.fill ? data.fill : "none").attr("stroke", (data) => data.strokeFill).attr("stroke-width", (data) => data.strokeWidth); + break; + } + } +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/97732f4b.b6556d43.js b/assets/js/97732f4b.b6556d43.js new file mode 100644 index 0000000000..95d6a6b798 --- /dev/null +++ b/assets/js/97732f4b.b6556d43.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7594],{64111:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>T,frontMatter:()=>c,metadata:()=>a,toc:()=>i});var r=t(85893),o=t(11151);const c={},s="POWER_ADJUSTMENT_CONSTANT",a={id:"about/references/keywords/POWER_ADJUSTMENT_CONSTANT",title:"POWER_ADJUSTMENT_CONSTANT",description:"MODELS /",source:"@site/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",permalink:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"},next:{title:"PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"power_adjustment_constant",children:"POWER_ADJUSTMENT_CONSTANT"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",children:"POWER_ADJUSTMENT_CONSTANT"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(n.p,{children:"Optional constant MW adjustment added to the model. Only added if (electrical) POWER > 0."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <model type>\n ...\n POWER_ADJUSTMENT_CONSTANT: <value in MW>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: simple_compressor\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n ...\n POWER_ADJUSTMENT_CONSTANT: 10 #MW\n"})})]})}function T(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>s});var r=t(67294);const o={},c=r.createContext(o);function s(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/977fea76.20ac3fb4.js b/assets/js/977fea76.20ac3fb4.js new file mode 100644 index 0000000000..1d567808b8 --- /dev/null +++ b/assets/js/977fea76.20ac3fb4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8023],{83769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/995.b5d03916.js b/assets/js/995.b5d03916.js new file mode 100644 index 0000000000..535e20809f --- /dev/null +++ b/assets/js/995.b5d03916.js @@ -0,0 +1,10065 @@ +"use strict"; +exports.id = 995; +exports.ids = [995]; +exports.modules = { + +/***/ 41644: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + bK: () => (/* reexport */ layout) +}); + +// UNUSED EXPORTS: acyclic, normalize, rank + +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js +var uniqueId = __webpack_require__(66749); +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/map.js +var map = __webpack_require__(43836); +// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules +var range = __webpack_require__(74379); +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js +var graphlib = __webpack_require__(45625); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js +/* + * Simple doubly linked list implementation derived from Cormen, et al., + * "Introduction to Algorithms". + */ + + + +class List { + constructor() { + var sentinel = {}; + sentinel._next = sentinel._prev = sentinel; + this._sentinel = sentinel; + } + dequeue() { + var sentinel = this._sentinel; + var entry = sentinel._prev; + if (entry !== sentinel) { + unlink(entry); + return entry; + } + } + enqueue(entry) { + var sentinel = this._sentinel; + if (entry._prev && entry._next) { + unlink(entry); + } + entry._next = sentinel._next; + sentinel._next._prev = entry; + sentinel._next = entry; + entry._prev = sentinel; + } + toString() { + var strs = []; + var sentinel = this._sentinel; + var curr = sentinel._prev; + while (curr !== sentinel) { + strs.push(JSON.stringify(curr, filterOutLinks)); + curr = curr._prev; + } + return '[' + strs.join(', ') + ']'; + } +} + +function unlink(entry) { + entry._prev._next = entry._next; + entry._next._prev = entry._prev; + delete entry._next; + delete entry._prev; +} + +function filterOutLinks(k, v) { + if (k !== '_next' && k !== '_prev') { + return v; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js + + + + +/* + * A greedy heuristic for finding a feedback arc set for a graph. A feedback + * arc set is a set of edges that can be removed to make a graph acyclic. + * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and + * effective heuristic for the feedback arc set problem." This implementation + * adjusts that from the paper to allow for weighted edges. + */ + + +var DEFAULT_WEIGHT_FN = constant/* default */.Z(1); + +function greedyFAS(g, weightFn) { + if (g.nodeCount() <= 1) { + return []; + } + var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN); + var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx); + + // Expand multi-edges + return flatten/* default */.Z( + map/* default */.Z(results, function (e) { + return g.outEdges(e.v, e.w); + }) + ); +} + +function doGreedyFAS(g, buckets, zeroIdx) { + var results = []; + var sources = buckets[buckets.length - 1]; + var sinks = buckets[0]; + + var entry; + while (g.nodeCount()) { + while ((entry = sinks.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + while ((entry = sources.dequeue())) { + removeNode(g, buckets, zeroIdx, entry); + } + if (g.nodeCount()) { + for (var i = buckets.length - 2; i > 0; --i) { + entry = buckets[i].dequeue(); + if (entry) { + results = results.concat(removeNode(g, buckets, zeroIdx, entry, true)); + break; + } + } + } + } + + return results; +} + +function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) { + var results = collectPredecessors ? [] : undefined; + + forEach/* default */.Z(g.inEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var uEntry = g.node(edge.v); + + if (collectPredecessors) { + results.push({ v: edge.v, w: edge.w }); + } + + uEntry.out -= weight; + assignBucket(buckets, zeroIdx, uEntry); + }); + + forEach/* default */.Z(g.outEdges(entry.v), function (edge) { + var weight = g.edge(edge); + var w = edge.w; + var wEntry = g.node(w); + wEntry['in'] -= weight; + assignBucket(buckets, zeroIdx, wEntry); + }); + + g.removeNode(entry.v); + + return results; +} + +function buildState(g, weightFn) { + var fasGraph = new graphlib/* Graph */.k(); + var maxIn = 0; + var maxOut = 0; + + forEach/* default */.Z(g.nodes(), function (v) { + fasGraph.setNode(v, { v: v, in: 0, out: 0 }); + }); + + // Aggregate weights on nodes, but also sum the weights across multi-edges + // into a single edge for the fasGraph. + forEach/* default */.Z(g.edges(), function (e) { + var prevWeight = fasGraph.edge(e.v, e.w) || 0; + var weight = weightFn(e); + var edgeWeight = prevWeight + weight; + fasGraph.setEdge(e.v, e.w, edgeWeight); + maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight)); + maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight)); + }); + + var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () { + return new List(); + }); + var zeroIdx = maxIn + 1; + + forEach/* default */.Z(fasGraph.nodes(), function (v) { + assignBucket(buckets, zeroIdx, fasGraph.node(v)); + }); + + return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx }; +} + +function assignBucket(buckets, zeroIdx, entry) { + if (!entry.out) { + buckets[0].enqueue(entry); + } else if (!entry['in']) { + buckets[buckets.length - 1].enqueue(entry); + } else { + buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js + + + + + +function run(g) { + var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g); + forEach/* default */.Z(fas, function (e) { + var label = g.edge(e); + g.removeEdge(e); + label.forwardName = e.name; + label.reversed = true; + g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev')); + }); + + function weightFn(g) { + return function (e) { + return g.edge(e).weight; + }; + } +} + +function dfsFAS(g) { + var fas = []; + var stack = {}; + var visited = {}; + + function dfs(v) { + if (has/* default */.Z(visited, v)) { + return; + } + visited[v] = true; + stack[v] = true; + forEach/* default */.Z(g.outEdges(v), function (e) { + if (has/* default */.Z(stack, e.w)) { + fas.push(e); + } else { + dfs(e.w); + } + }); + delete stack[v]; + } + + forEach/* default */.Z(g.nodes(), dfs); + return fas; +} + +function undo(g) { + forEach/* default */.Z(g.edges(), function (e) { + var label = g.edge(e); + if (label.reversed) { + g.removeEdge(e); + + var forwardName = label.forwardName; + delete label.reversed; + delete label.forwardName; + g.setEdge(e.w, e.v, label, forwardName); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/merge.js + 6 modules +var merge = __webpack_require__(59236); +// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules +var pick = __webpack_require__(61666); +// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js +var defaults = __webpack_require__(3688); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js + + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !(0,isSymbol/* default */.Z)(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +/* harmony default export */ const _baseExtremum = (baseExtremum); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +/* harmony default export */ const _baseGt = (baseGt); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js + + + + +/** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ +function max(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseGt) + : undefined; +} + +/* harmony default export */ const lodash_es_max = (max); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +/* harmony default export */ const lodash_es_last = (last); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js +var _baseAssignValue = __webpack_require__(74752); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js + + + + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3); + + (0,_baseForOwn/* default */.Z)(object, function(value, key, object) { + (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object)); + }); + return result; +} + +/* harmony default export */ const lodash_es_mapValues = (mapValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +/* harmony default export */ const _baseLt = (baseLt); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js + + + + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? _baseExtremum(array, identity/* default */.Z, _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_min = (min); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js +var _root = __webpack_require__(66092); +;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js + + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return _root/* default */.Z.Date.now(); +}; + +/* harmony default export */ const lodash_es_now = (now); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js + + + + + +/* + * Adds a dummy node to the graph and return v. + */ +function addDummyNode(g, type, attrs, name) { + var v; + do { + v = uniqueId/* default */.Z(name); + } while (g.hasNode(v)); + + attrs.dummy = type; + g.setNode(v, attrs); + return v; +} + +/* + * Returns a new graph with only simple edges. Handles aggregation of data + * associated with multi-edges. + */ +function simplify(g) { + var simplified = new graphlib/* Graph */.k().setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + simplified.setNode(v, g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 }; + var label = g.edge(e); + simplified.setEdge(e.v, e.w, { + weight: simpleLabel.weight + label.weight, + minlen: Math.max(simpleLabel.minlen, label.minlen), + }); + }); + return simplified; +} + +function asNonCompoundGraph(g) { + var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph()); + forEach/* default */.Z(g.nodes(), function (v) { + if (!g.children(v).length) { + simplified.setNode(v, g.node(v)); + } + }); + forEach/* default */.Z(g.edges(), function (e) { + simplified.setEdge(e, g.edge(e)); + }); + return simplified; +} + +function successorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var sucs = {}; + _.forEach(g.outEdges(v), function (e) { + sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight; + }); + return sucs; + }); + return _.zipObject(g.nodes(), weightMap); +} + +function predecessorWeights(g) { + var weightMap = _.map(g.nodes(), function (v) { + var preds = {}; + _.forEach(g.inEdges(v), function (e) { + preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight; + }); + return preds; + }); + return _.zipObject(g.nodes(), weightMap); +} + +/* + * Finds where a line starting at point ({x, y}) would intersect a rectangle + * ({x, y, width, height}) if it were pointing at the rectangle's center. + */ +function intersectRect(rect, point) { + var x = rect.x; + var y = rect.y; + + // Rectangle intersection algorithm from: + // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes + var dx = point.x - x; + var dy = point.y - y; + var w = rect.width / 2; + var h = rect.height / 2; + + if (!dx && !dy) { + throw new Error('Not possible to find intersection inside of the rectangle'); + } + + var sx, sy; + if (Math.abs(dy) * w > Math.abs(dx) * h) { + // Intersection is top or bottom of rect. + if (dy < 0) { + h = -h; + } + sx = (h * dx) / dy; + sy = h; + } else { + // Intersection is left or right of rect. + if (dx < 0) { + w = -w; + } + sx = w; + sy = (w * dy) / dx; + } + + return { x: x + sx, y: y + sy }; +} + +/* + * Given a DAG with each node assigned "rank" and "order" properties, this + * function will produce a matrix with the ids of each node. + */ +function buildLayerMatrix(g) { + var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () { + return []; + }); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + var rank = node.rank; + if (!isUndefined/* default */.Z(rank)) { + layering[rank][node.order] = v; + } + }); + return layering; +} + +/* + * Adjusts the ranks for all nodes in the graph such that all nodes v have + * rank(v) >= 0 and at least one node w has rank(w) = 0. + */ +function normalizeRanks(g) { + var min = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (has/* default */.Z(node, 'rank')) { + node.rank -= min; + } + }); +} + +function removeEmptyRanks(g) { + // Ranks may not start at 0, so we need to offset them + var offset = lodash_es_min( + map/* default */.Z(g.nodes(), function (v) { + return g.node(v).rank; + }) + ); + + var layers = []; + forEach/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank - offset; + if (!layers[rank]) { + layers[rank] = []; + } + layers[rank].push(v); + }); + + var delta = 0; + var nodeRankFactor = g.graph().nodeRankFactor; + forEach/* default */.Z(layers, function (vs, i) { + if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) { + --delta; + } else if (delta) { + forEach/* default */.Z(vs, function (v) { + g.node(v).rank += delta; + }); + } + }); +} + +function addBorderNode(g, prefix, rank, order) { + var node = { + width: 0, + height: 0, + }; + if (arguments.length >= 4) { + node.rank = rank; + node.order = order; + } + return addDummyNode(g, 'border', node, prefix); +} + +function util_maxRank(g) { + return lodash_es_max( + map/* default */.Z(g.nodes(), function (v) { + var rank = g.node(v).rank; + if (!isUndefined/* default */.Z(rank)) { + return rank; + } + }) + ); +} + +/* + * Partition a collection into two groups: `lhs` and `rhs`. If the supplied + * function returns true for an entry it goes into `lhs`. Otherwise it goes + * into `rhs. + */ +function partition(collection, fn) { + var result = { lhs: [], rhs: [] }; + forEach/* default */.Z(collection, function (value) { + if (fn(value)) { + result.lhs.push(value); + } else { + result.rhs.push(value); + } + }); + return result; +} + +/* + * Returns a new function that wraps `fn` with a timer. The wrapper logs the + * time it takes to execute the function. + */ +function util_time(name, fn) { + var start = lodash_es_now(); + try { + return fn(); + } finally { + console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms'); + } +} + +function notime(name, fn) { + return fn(); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js + + + + + +function addBorderSegments(g) { + function dfs(v) { + var children = g.children(v); + var node = g.node(v); + if (children.length) { + forEach/* default */.Z(children, dfs); + } + + if (has/* default */.Z(node, 'minRank')) { + node.borderLeft = []; + node.borderRight = []; + for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) { + add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank); + add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank); + } + } + } + + forEach/* default */.Z(g.children(), dfs); +} + +function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) { + var label = { width: 0, height: 0, rank: rank, borderType: prop }; + var prev = sgNode[prop][rank - 1]; + var curr = addDummyNode(g, 'border', label, prefix); + sgNode[prop][rank] = curr; + g.setParent(curr, sg); + if (prev) { + g.setEdge(prev, curr, { weight: 1 }); + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js + + + + +function adjust(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'lr' || rankDir === 'rl') { + swapWidthHeight(g); + } +} + +function coordinate_system_undo(g) { + var rankDir = g.graph().rankdir.toLowerCase(); + if (rankDir === 'bt' || rankDir === 'rl') { + reverseY(g); + } + + if (rankDir === 'lr' || rankDir === 'rl') { + swapXY(g); + swapWidthHeight(g); + } +} + +function swapWidthHeight(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapWidthHeightOne(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + swapWidthHeightOne(g.edge(e)); + }); +} + +function swapWidthHeightOne(attrs) { + var w = attrs.width; + attrs.width = attrs.height; + attrs.height = w; +} + +function reverseY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + reverseYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, reverseYOne); + if (has/* default */.Z(edge, 'y')) { + reverseYOne(edge); + } + }); +} + +function reverseYOne(attrs) { + attrs.y = -attrs.y; +} + +function swapXY(g) { + forEach/* default */.Z(g.nodes(), function (v) { + swapXYOne(g.node(v)); + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, swapXYOne); + if (has/* default */.Z(edge, 'x')) { + swapXYOne(edge); + } + }); +} + +function swapXYOne(attrs) { + var x = attrs.x; + attrs.x = attrs.y; + attrs.y = x; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js + + + + + +/* + * Breaks any long edges in the graph into short segments that span 1 layer + * each. This operation is undoable with the denormalize function. + * + * Pre-conditions: + * + * 1. The input graph is a DAG. + * 2. Each node in the graph has a "rank" property. + * + * Post-condition: + * + * 1. All edges in the graph have a length of 1. + * 2. Dummy nodes are added where edges have been split into segments. + * 3. The graph is augmented with a "dummyChains" attribute which contains + * the first dummy in each chain of dummy nodes produced. + */ +function normalize_run(g) { + g.graph().dummyChains = []; + forEach/* default */.Z(g.edges(), function (edge) { + normalizeEdge(g, edge); + }); +} + +function normalizeEdge(g, e) { + var v = e.v; + var vRank = g.node(v).rank; + var w = e.w; + var wRank = g.node(w).rank; + var name = e.name; + var edgeLabel = g.edge(e); + var labelRank = edgeLabel.labelRank; + + if (wRank === vRank + 1) return; + + g.removeEdge(e); + + var dummy, attrs, i; + for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) { + edgeLabel.points = []; + attrs = { + width: 0, + height: 0, + edgeLabel: edgeLabel, + edgeObj: e, + rank: vRank, + }; + dummy = addDummyNode(g, 'edge', attrs, '_d'); + if (vRank === labelRank) { + attrs.width = edgeLabel.width; + attrs.height = edgeLabel.height; + // @ts-expect-error + attrs.dummy = 'edge-label'; + // @ts-expect-error + attrs.labelpos = edgeLabel.labelpos; + } + g.setEdge(v, dummy, { weight: edgeLabel.weight }, name); + if (i === 0) { + g.graph().dummyChains.push(dummy); + } + v = dummy; + } + + g.setEdge(v, w, { weight: edgeLabel.weight }, name); +} + +function normalize_undo(g) { + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var origLabel = node.edgeLabel; + var w; + g.setEdge(node.edgeObj, origLabel); + while (node.dummy) { + w = g.successors(v)[0]; + g.removeNode(v); + origLabel.points.push({ x: node.x, y: node.y }); + if (node.dummy === 'edge-label') { + origLabel.x = node.x; + origLabel.y = node.y; + origLabel.width = node.width; + origLabel.height = node.height; + } + v = w; + node = g.node(v); + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js + + + + +/** + * This method is like `_.min` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * the value is ranked. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Math + * @param {Array} array The array to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {*} Returns the minimum value. + * @example + * + * var objects = [{ 'n': 1 }, { 'n': 2 }]; + * + * _.minBy(objects, function(o) { return o.n; }); + * // => { 'n': 1 } + * + * // The `_.property` iteratee shorthand. + * _.minBy(objects, 'n'); + * // => { 'n': 1 } + */ +function minBy(array, iteratee) { + return (array && array.length) + ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt) + : undefined; +} + +/* harmony default export */ const lodash_es_minBy = (minBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js + + + + +/* + * Initializes ranks for the input graph using the longest path algorithm. This + * algorithm scales well and is fast in practice, it yields rather poor + * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom + * ranks wide and leaving edges longer than necessary. However, due to its + * speed, this algorithm is good for getting an initial ranking that can be fed + * into other algorithms. + * + * This algorithm does not normalize layers because it will be used by other + * algorithms in most cases. If using this algorithm directly, be sure to + * run normalize at the end. + * + * Pre-conditions: + * + * 1. Input graph is a DAG. + * 2. Input graph node labels can be assigned properties. + * + * Post-conditions: + * + * 1. Each node will be assign an (unnormalized) "rank" property. + */ +function longestPath(g) { + var visited = {}; + + function dfs(v) { + var label = g.node(v); + if (has/* default */.Z(visited, v)) { + return label.rank; + } + visited[v] = true; + + var rank = lodash_es_min( + map/* default */.Z(g.outEdges(v), function (e) { + return dfs(e.w) - g.edge(e).minlen; + }) + ); + + if ( + rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3 + rank === undefined || // return value of _.map([]) for Lodash 4 + rank === null + ) { + // return value of _.map([null]) + rank = 0; + } + + return (label.rank = rank); + } + + forEach/* default */.Z(g.sources(), dfs); +} + +/* + * Returns the amount of slack for the given edge. The slack is defined as the + * difference between the length of the edge and its minimum length. + */ +function slack(g, e) { + return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js + + + + + + +/* + * Constructs a spanning tree with tight edges and adjusted the input node's + * ranks to achieve this. A tight edge is one that is has a length that matches + * its "minlen" attribute. + * + * The basic structure for this function is derived from Gansner, et al., "A + * Technique for Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a DAG. + * 2. Graph must be connected. + * 3. Graph must have at least one node. + * 5. Graph nodes must have been previously assigned a "rank" property that + * respects the "minlen" property of incident edges. + * 6. Graph edges must have a "minlen" property. + * + * Post-conditions: + * + * - Graph nodes will have their rank adjusted to ensure that all edges are + * tight. + * + * Returns a tree (undirected graph) that is constructed using only "tight" + * edges. + */ +function feasibleTree(g) { + var t = new graphlib/* Graph */.k({ directed: false }); + + // Choose arbitrary node from which to start our tree + var start = g.nodes()[0]; + var size = g.nodeCount(); + t.setNode(start, {}); + + var edge, delta; + while (tightTree(t, g) < size) { + edge = findMinSlackEdge(t, g); + delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge); + shiftRanks(t, g, delta); + } + + return t; +} + +/* + * Finds a maximal tree of tight edges and returns the number of nodes in the + * tree. + */ +function tightTree(t, g) { + function dfs(v) { + forEach/* default */.Z(g.nodeEdges(v), function (e) { + var edgeV = e.v, + w = v === edgeV ? e.w : edgeV; + if (!t.hasNode(w) && !slack(g, e)) { + t.setNode(w, {}); + t.setEdge(v, w, {}); + dfs(w); + } + }); + } + + forEach/* default */.Z(t.nodes(), dfs); + return t.nodeCount(); +} + +/* + * Finds the edge with the smallest slack that is incident on tree and returns + * it. + */ +function findMinSlackEdge(t, g) { + return lodash_es_minBy(g.edges(), function (e) { + if (t.hasNode(e.v) !== t.hasNode(e.w)) { + return slack(g, e); + } + }); +} + +function shiftRanks(t, g, delta) { + forEach/* default */.Z(t.nodes(), function (v) { + g.node(v).rank += delta; + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js + + + + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!(0,isArrayLike/* default */.Z)(collection)) { + var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3); + collection = (0,keys/* default */.Z)(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +/* harmony default export */ const _createFind = (createFind); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js + + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = (0,toFinite/* default */.Z)(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/* harmony default export */ const lodash_es_toInteger = (toInteger); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index); +} + +/* harmony default export */ const lodash_es_findIndex = (findIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js + + + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = _createFind(lodash_es_findIndex); + +/* harmony default export */ const lodash_es_find = (find); + +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js + + + + + +var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function dijkstra_dijkstra(g, source, weightFn, edgeFn) { + return runDijkstra( + g, + String(source), + weightFn || DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runDijkstra(g, source, weightFn, edgeFn) { + var results = {}; + var pq = new PriorityQueue(); + var v, vEntry; + + var updateNeighbors = function (edge) { + var w = edge.v !== v ? edge.v : edge.w; + var wEntry = results[w]; + var weight = weightFn(edge); + var distance = vEntry.distance + weight; + + if (weight < 0) { + throw new Error( + 'dijkstra does not allow negative edge weights. ' + + 'Bad edge: ' + + edge + + ' Weight: ' + + weight + ); + } + + if (distance < wEntry.distance) { + wEntry.distance = distance; + wEntry.predecessor = v; + pq.decrease(w, distance); + } + }; + + g.nodes().forEach(function (v) { + var distance = v === source ? 0 : Number.POSITIVE_INFINITY; + results[v] = { distance: distance }; + pq.add(v, distance); + }); + + while (pq.size() > 0) { + v = pq.removeMin(); + vEntry = results[v]; + if (vEntry.distance === Number.POSITIVE_INFINITY) { + break; + } + + edgeFn(v).forEach(updateNeighbors); + } + + return results; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js + + + + + +function dijkstraAll(g, weightFunc, edgeFunc) { + return _.transform( + g.nodes(), + function (acc, v) { + acc[v] = dijkstra(g, v, weightFunc, edgeFunc); + }, + {} + ); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js + + + + +var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1); + +function floydWarshall(g, weightFn, edgeFn) { + return runFloydWarshall( + g, + weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC, + edgeFn || + function (v) { + return g.outEdges(v); + } + ); +} + +function runFloydWarshall(g, weightFn, edgeFn) { + var results = {}; + var nodes = g.nodes(); + + nodes.forEach(function (v) { + results[v] = {}; + results[v][v] = { distance: 0 }; + nodes.forEach(function (w) { + if (v !== w) { + results[v][w] = { distance: Number.POSITIVE_INFINITY }; + } + }); + edgeFn(v).forEach(function (edge) { + var w = edge.v === v ? edge.w : edge.v; + var d = weightFn(edge); + results[v][w] = { distance: d, predecessor: v }; + }); + }); + + nodes.forEach(function (k) { + var rowK = results[k]; + nodes.forEach(function (i) { + var rowI = results[i]; + nodes.forEach(function (j) { + var ik = rowI[k]; + var kj = rowK[j]; + var ij = rowI[j]; + var altDistance = ik.distance + kj.distance; + if (altDistance < ij.distance) { + ij.distance = altDistance; + ij.predecessor = kj.predecessor; + } + }); + }); + }); + + return results; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules +var _baseKeys = __webpack_require__(39473); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules +var _baseGetTag = __webpack_require__(93589); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js + + + + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag); +} + +/* harmony default export */ const lodash_es_isString = (isString); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js + + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = (0,_baseProperty/* default */.Z)('length'); + +/* harmony default export */ const _asciiSize = (asciiSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/* harmony default export */ const _hasUnicode = (hasUnicode); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js +/** Used to compose unicode character classes. */ +var _unicodeSize_rsAstralRange = '\\ud800-\\udfff', + _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f', + _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f', + _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff', + _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange, + _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + _unicodeSize_rsAstralRange + ']', + rsCombo = '[' + _unicodeSize_rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + _unicodeSize_rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + _unicodeSize_rsVarRange + ']?', + rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +/* harmony default export */ const _unicodeSize = (unicodeSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js + + + + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return _hasUnicode(string) + ? _unicodeSize(string) + : _asciiSize(string); +} + +/* harmony default export */ const _stringSize = (stringSize); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js + + + + + + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ +function size(collection) { + if (collection == null) { + return 0; + } + if ((0,isArrayLike/* default */.Z)(collection)) { + return lodash_es_isString(collection) ? _stringSize(collection) : collection.length; + } + var tag = (0,_getTag/* default */.Z)(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return (0,_baseKeys/* default */.Z)(collection).length; +} + +/* harmony default export */ const lodash_es_size = (size); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js + + + + +topsort_topsort.CycleException = topsort_CycleException; + +function topsort_topsort(g) { + var visited = {}; + var stack = {}; + var results = []; + + function visit(node) { + if (has/* default */.Z(stack, node)) { + throw new topsort_CycleException(); + } + + if (!has/* default */.Z(visited, node)) { + stack[node] = true; + visited[node] = true; + forEach/* default */.Z(g.predecessors(node), visit); + delete stack[node]; + results.push(node); + } + } + + forEach/* default */.Z(g.sinks(), visit); + + if (lodash_es_size(visited) !== g.nodeCount()) { + throw new topsort_CycleException(); + } + + return results; +} + +function topsort_CycleException() {} +topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js + + + + +function isAcyclic(g) { + try { + topsort(g); + } catch (e) { + if (e instanceof CycleException) { + return false; + } + throw e; + } + return true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js + + + + +/* + * A helper that preforms a pre- or post-order traversal on the input graph + * and returns the nodes in the order they were visited. If the graph is + * undirected then this algorithm will navigate using neighbors. If the graph + * is directed then this algorithm will navigate using successors. + * + * Order must be one of "pre" or "post". + */ +function dfs(g, vs, order) { + if (!isArray/* default */.Z(vs)) { + vs = [vs]; + } + + var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g); + + var acc = []; + var visited = {}; + forEach/* default */.Z(vs, function (v) { + if (!g.hasNode(v)) { + throw new Error('Graph does not have node: ' + v); + } + + doDfs(g, v, order === 'post', visited, navigation, acc); + }); + return acc; +} + +function doDfs(g, v, postorder, visited, navigation, acc) { + if (!has/* default */.Z(visited, v)) { + visited[v] = true; + + if (!postorder) { + acc.push(v); + } + forEach/* default */.Z(navigation(v), function (w) { + doDfs(g, w, postorder, visited, navigation, acc); + }); + if (postorder) { + acc.push(v); + } + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js + + + + +function postorder(g, vs) { + return dfs(g, vs, 'post'); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js + + + + +function preorder(g, vs) { + return dfs(g, vs, 'pre'); +} + +// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules +var graph = __webpack_require__(52544); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js + + + + + + +function prim(g, weightFunc) { + var result = new Graph(); + var parents = {}; + var pq = new PriorityQueue(); + var v; + + function updateNeighbors(edge) { + var w = edge.v === v ? edge.w : edge.v; + var pri = pq.priority(w); + if (pri !== undefined) { + var edgeWeight = weightFunc(edge); + if (edgeWeight < pri) { + parents[w] = v; + pq.decrease(w, edgeWeight); + } + } + } + + if (g.nodeCount() === 0) { + return result; + } + + _.each(g.nodes(), function (v) { + pq.add(v, Number.POSITIVE_INFINITY); + result.setNode(v); + }); + + // Start from an arbitrary node + pq.decrease(g.nodes()[0], 0); + + var init = false; + while (pq.size() > 0) { + v = pq.removeMin(); + if (_.has(parents, v)) { + result.setEdge(v, parents[v]); + } else if (init) { + throw new Error('Input graph is not connected: ' + g); + } else { + init = true; + } + + g.nodeEdges(v).forEach(updateNeighbors); + } + + return result; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js + + + + + + + + + + + + + + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js + + + + + + + + +// Expose some internals for testing purposes +networkSimplex.initLowLimValues = initLowLimValues; +networkSimplex.initCutValues = initCutValues; +networkSimplex.calcCutValue = calcCutValue; +networkSimplex.leaveEdge = leaveEdge; +networkSimplex.enterEdge = enterEdge; +networkSimplex.exchangeEdges = exchangeEdges; + +/* + * The network simplex algorithm assigns ranks to each node in the input graph + * and iteratively improves the ranking to reduce the length of edges. + * + * Preconditions: + * + * 1. The input graph must be a DAG. + * 2. All nodes in the graph must have an object value. + * 3. All edges in the graph must have "minlen" and "weight" attributes. + * + * Postconditions: + * + * 1. All nodes in the graph will have an assigned "rank" attribute that has + * been optimized by the network simplex algorithm. Ranks start at 0. + * + * + * A rough sketch of the algorithm is as follows: + * + * 1. Assign initial ranks to each node. We use the longest path algorithm, + * which assigns ranks to the lowest position possible. In general this + * leads to very wide bottom ranks and unnecessarily long edges. + * 2. Construct a feasible tight tree. A tight tree is one such that all + * edges in the tree have no slack (difference between length of edge + * and minlen for the edge). This by itself greatly improves the assigned + * rankings by shorting edges. + * 3. Iteratively find edges that have negative cut values. Generally a + * negative cut value indicates that the edge could be removed and a new + * tree edge could be added to produce a more compact graph. + * + * Much of the algorithms here are derived from Gansner, et al., "A Technique + * for Drawing Directed Graphs." The structure of the file roughly follows the + * structure of the overall algorithm. + */ +function networkSimplex(g) { + g = simplify(g); + longestPath(g); + var t = feasibleTree(g); + initLowLimValues(t); + initCutValues(t, g); + + var e, f; + while ((e = leaveEdge(t))) { + f = enterEdge(t, g, e); + exchangeEdges(t, g, e, f); + } +} + +/* + * Initializes cut values for all edges in the tree. + */ +function initCutValues(t, g) { + var vs = postorder(t, t.nodes()); + vs = vs.slice(0, vs.length - 1); + forEach/* default */.Z(vs, function (v) { + assignCutValue(t, g, v); + }); +} + +function assignCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + t.edge(child, parent).cutvalue = calcCutValue(t, g, child); +} + +/* + * Given the tight tree, its graph, and a child in the graph calculate and + * return the cut value for the edge between the child and its parent. + */ +function calcCutValue(t, g, child) { + var childLab = t.node(child); + var parent = childLab.parent; + // True if the child is on the tail end of the edge in the directed graph + var childIsTail = true; + // The graph's view of the tree edge we're inspecting + var graphEdge = g.edge(child, parent); + // The accumulated cut value for the edge between this node and its parent + var cutValue = 0; + + if (!graphEdge) { + childIsTail = false; + graphEdge = g.edge(parent, child); + } + + cutValue = graphEdge.weight; + + forEach/* default */.Z(g.nodeEdges(child), function (e) { + var isOutEdge = e.v === child, + other = isOutEdge ? e.w : e.v; + + if (other !== parent) { + var pointsToHead = isOutEdge === childIsTail, + otherWeight = g.edge(e).weight; + + cutValue += pointsToHead ? otherWeight : -otherWeight; + if (isTreeEdge(t, child, other)) { + var otherCutValue = t.edge(child, other).cutvalue; + cutValue += pointsToHead ? -otherCutValue : otherCutValue; + } + } + }); + + return cutValue; +} + +function initLowLimValues(tree, root) { + if (arguments.length < 2) { + root = tree.nodes()[0]; + } + dfsAssignLowLim(tree, {}, 1, root); +} + +function dfsAssignLowLim(tree, visited, nextLim, v, parent) { + var low = nextLim; + var label = tree.node(v); + + visited[v] = true; + forEach/* default */.Z(tree.neighbors(v), function (w) { + if (!has/* default */.Z(visited, w)) { + nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v); + } + }); + + label.low = low; + label.lim = nextLim++; + if (parent) { + label.parent = parent; + } else { + // TODO should be able to remove this when we incrementally update low lim + delete label.parent; + } + + return nextLim; +} + +function leaveEdge(tree) { + return lodash_es_find(tree.edges(), function (e) { + return tree.edge(e).cutvalue < 0; + }); +} + +function enterEdge(t, g, edge) { + var v = edge.v; + var w = edge.w; + + // For the rest of this function we assume that v is the tail and w is the + // head, so if we don't have this edge in the graph we should flip it to + // match the correct orientation. + if (!g.hasEdge(v, w)) { + v = edge.w; + w = edge.v; + } + + var vLabel = t.node(v); + var wLabel = t.node(w); + var tailLabel = vLabel; + var flip = false; + + // If the root is in the tail of the edge then we need to flip the logic that + // checks for the head and tail nodes in the candidates function below. + if (vLabel.lim > wLabel.lim) { + tailLabel = wLabel; + flip = true; + } + + var candidates = filter/* default */.Z(g.edges(), function (edge) { + return ( + flip === isDescendant(t, t.node(edge.v), tailLabel) && + flip !== isDescendant(t, t.node(edge.w), tailLabel) + ); + }); + + return lodash_es_minBy(candidates, function (edge) { + return slack(g, edge); + }); +} + +function exchangeEdges(t, g, e, f) { + var v = e.v; + var w = e.w; + t.removeEdge(v, w); + t.setEdge(f.v, f.w, {}); + initLowLimValues(t); + initCutValues(t, g); + updateRanks(t, g); +} + +function updateRanks(t, g) { + var root = lodash_es_find(t.nodes(), function (v) { + return !g.node(v).parent; + }); + var vs = preorder(t, root); + vs = vs.slice(1); + forEach/* default */.Z(vs, function (v) { + var parent = t.node(v).parent, + edge = g.edge(v, parent), + flipped = false; + + if (!edge) { + edge = g.edge(parent, v); + flipped = true; + } + + g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen); + }); +} + +/* + * Returns true if the edge is in the tree. + */ +function isTreeEdge(tree, u, v) { + return tree.hasEdge(u, v); +} + +/* + * Returns true if the specified node is descendant of the root node per the + * assigned low and lim attributes in the tree. + */ +function isDescendant(tree, vLabel, rootLabel) { + return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js + + + + + + +/* + * Assigns a rank to each node in the input graph that respects the "minlen" + * constraint specified on edges between nodes. + * + * This basic structure is derived from Gansner, et al., "A Technique for + * Drawing Directed Graphs." + * + * Pre-conditions: + * + * 1. Graph must be a connected DAG + * 2. Graph nodes must be objects + * 3. Graph edges must have "weight" and "minlen" attributes + * + * Post-conditions: + * + * 1. Graph nodes will have a "rank" attribute based on the results of the + * algorithm. Ranks can start at any index (including negative), we'll + * fix them up later. + */ +function rank(g) { + switch (g.graph().ranker) { + case 'network-simplex': + networkSimplexRanker(g); + break; + case 'tight-tree': + tightTreeRanker(g); + break; + case 'longest-path': + longestPathRanker(g); + break; + default: + networkSimplexRanker(g); + } +} + +// A fast and simple ranker, but results are far from optimal. +var longestPathRanker = longestPath; + +function tightTreeRanker(g) { + longestPath(g); + feasibleTree(g); +} + +function networkSimplexRanker(g) { + networkSimplex(g); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js + + + + + +/* + * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs, + * adds appropriate edges to ensure that all cluster nodes are placed between + * these boundries, and ensures that the graph is connected. + * + * In addition we ensure, through the use of the minlen property, that nodes + * and subgraph border nodes to not end up on the same rank. + * + * Preconditions: + * + * 1. Input graph is a DAG + * 2. Nodes in the input graph has a minlen attribute + * + * Postconditions: + * + * 1. Input graph is connected. + * 2. Dummy nodes are added for the tops and bottoms of subgraphs. + * 3. The minlen attribute for nodes is adjusted to ensure nodes do not + * get placed on the same rank as subgraph border nodes. + * + * The nesting graph idea comes from Sander, "Layout of Compound Directed + * Graphs." + */ +function nesting_graph_run(g) { + var root = addDummyNode(g, 'root', {}, '_root'); + var depths = treeDepths(g); + var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array + var nodeSep = 2 * height + 1; + + g.graph().nestingRoot = root; + + // Multiply minlen by nodeSep to align nodes on non-border ranks. + forEach/* default */.Z(g.edges(), function (e) { + g.edge(e).minlen *= nodeSep; + }); + + // Calculate a weight that is sufficient to keep subgraphs vertically compact + var weight = sumWeights(g) + 1; + + // Create border nodes and link them up + forEach/* default */.Z(g.children(), function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + }); + + // Save the multiplier for node layers for later removal of empty border + // layers. + g.graph().nodeRankFactor = nodeSep; +} + +function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) { + var children = g.children(v); + if (!children.length) { + if (v !== root) { + g.setEdge(root, v, { weight: 0, minlen: nodeSep }); + } + return; + } + + var top = addBorderNode(g, '_bt'); + var bottom = addBorderNode(g, '_bb'); + var label = g.node(v); + + g.setParent(top, v); + label.borderTop = top; + g.setParent(bottom, v); + label.borderBottom = bottom; + + forEach/* default */.Z(children, function (child) { + nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child); + + var childNode = g.node(child); + var childTop = childNode.borderTop ? childNode.borderTop : child; + var childBottom = childNode.borderBottom ? childNode.borderBottom : child; + var thisWeight = childNode.borderTop ? weight : 2 * weight; + var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1; + + g.setEdge(top, childTop, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + + g.setEdge(childBottom, bottom, { + weight: thisWeight, + minlen: minlen, + nestingEdge: true, + }); + }); + + if (!g.parent(v)) { + g.setEdge(root, top, { weight: 0, minlen: height + depths[v] }); + } +} + +function treeDepths(g) { + var depths = {}; + function dfs(v, depth) { + var children = g.children(v); + if (children && children.length) { + forEach/* default */.Z(children, function (child) { + dfs(child, depth + 1); + }); + } + depths[v] = depth; + } + forEach/* default */.Z(g.children(), function (v) { + dfs(v, 1); + }); + return depths; +} + +function sumWeights(g) { + return reduce/* default */.Z( + g.edges(), + function (acc, e) { + return acc + g.edge(e).weight; + }, + 0 + ); +} + +function cleanup(g) { + var graphLabel = g.graph(); + g.removeNode(graphLabel.nestingRoot); + delete graphLabel.nestingRoot; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.nestingEdge) { + g.removeEdge(e); + } + }); +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules +var _baseClone = __webpack_require__(48451); +;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js + + + + +function addSubgraphConstraints(g, cg, vs) { + var prev = {}, + rootPrev; + + forEach/* default */.Z(vs, function (v) { + var child = g.parent(v), + parent, + prevChild; + while (child) { + parent = g.parent(child); + if (parent) { + prevChild = prev[parent]; + prev[parent] = child; + } else { + prevChild = rootPrev; + rootPrev = child; + } + if (prevChild && prevChild !== child) { + cg.setEdge(prevChild, child); + return; + } + child = parent; + } + }); + + /* + function dfs(v) { + var children = v ? g.children(v) : g.children(); + if (children.length) { + var min = Number.POSITIVE_INFINITY, + subgraphs = []; + _.each(children, function(child) { + var childMin = dfs(child); + if (g.children(child).length) { + subgraphs.push({ v: child, order: childMin }); + } + min = Math.min(min, childMin); + }); + _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) { + cg.setEdge(prev.v, curr.v); + return curr; + }); + return min; + } + return g.node(v).order; + } + dfs(undefined); + */ +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js + + + + + +/* + * Constructs a graph that can be used to sort a layer of nodes. The graph will + * contain all base and subgraph nodes from the request layer in their original + * hierarchy and any edges that are incident on these nodes and are of the type + * requested by the "relationship" parameter. + * + * Nodes from the requested rank that do not have parents are assigned a root + * node in the output graph, which is set in the root graph attribute. This + * makes it easy to walk the hierarchy of movable nodes during ordering. + * + * Pre-conditions: + * + * 1. Input graph is a DAG + * 2. Base nodes in the input graph have a rank attribute + * 3. Subgraph nodes in the input graph has minRank and maxRank attributes + * 4. Edges have an assigned weight + * + * Post-conditions: + * + * 1. Output graph has all nodes in the movable rank with preserved + * hierarchy. + * 2. Root nodes in the movable layer are made children of the node + * indicated by the root attribute of the graph. + * 3. Non-movable nodes incident on movable nodes, selected by the + * relationship parameter, are included in the graph (without hierarchy). + * 4. Edges incident on movable nodes, selected by the relationship + * parameter, are added to the output graph. + * 5. The weights for copied edges are aggregated as need, since the output + * graph is not a multi-graph. + */ +function buildLayerGraph(g, rank, relationship) { + var root = createRootNode(g), + result = new graphlib/* Graph */.k({ compound: true }) + .setGraph({ root: root }) + .setDefaultNodeLabel(function (v) { + return g.node(v); + }); + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v), + parent = g.parent(v); + + if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) { + result.setNode(v); + result.setParent(v, parent || root); + + // This assumes we have only short edges! + forEach/* default */.Z(g[relationship](v), function (e) { + var u = e.v === v ? e.w : e.v, + edge = result.edge(u, v), + weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0; + result.setEdge(u, v, { weight: g.edge(e).weight + weight }); + }); + + if (has/* default */.Z(node, 'minRank')) { + result.setNode(v, { + borderLeft: node.borderLeft[rank], + borderRight: node.borderRight[rank], + }); + } + } + }); + + return result; +} + +function createRootNode(g) { + var v; + while (g.hasNode((v = uniqueId/* default */.Z('_root')))); + return v; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +/* harmony default export */ const _baseZipObject = (baseZipObject); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js + + + +/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ +function zipObject(props, values) { + return _baseZipObject(props || [], values || [], _assignValue/* default */.Z); +} + +/* harmony default export */ const lodash_es_zipObject = (zipObject); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js +var _baseMap = __webpack_require__(21018); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/* harmony default export */ const _baseSortBy = (baseSortBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js + + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = (0,isSymbol/* default */.Z)(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = (0,isSymbol/* default */.Z)(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/* harmony default export */ const _compareAscending = (compareAscending); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js + + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = _compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/* harmony default export */ const _compareMultiple = (compareMultiple); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js + + + + + + + + + + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + if ((0,isArray/* default */.Z)(iteratee)) { + return function(value) { + return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity/* default */.Z]; + } + + var index = -1; + iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z)); + + var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) { + var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return _baseSortBy(result, function(object, other) { + return _compareMultiple(object, other, orders); + }); +} + +/* harmony default export */ const _baseOrderBy = (baseOrderBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js + + + + + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ +var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []); +}); + +/* harmony default export */ const lodash_es_sortBy = (sortBy); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js + + + + +/* + * A function that takes a layering (an array of layers, each with an array of + * ordererd nodes) and a graph and returns a weighted crossing count. + * + * Pre-conditions: + * + * 1. Input graph must be simple (not a multigraph), directed, and include + * only simple edges. + * 2. Edges in the input graph must have assigned weights. + * + * Post-conditions: + * + * 1. The graph and layering matrix are left unchanged. + * + * This algorithm is derived from Barth, et al., "Bilayer Cross Counting." + */ +function crossCount(g, layering) { + var cc = 0; + for (var i = 1; i < layering.length; ++i) { + cc += twoLayerCrossCount(g, layering[i - 1], layering[i]); + } + return cc; +} + +function twoLayerCrossCount(g, northLayer, southLayer) { + // Sort all of the edges between the north and south layers by their position + // in the north layer and then the south. Map these edges to the position of + // their head in the south layer. + var southPos = lodash_es_zipObject( + southLayer, + map/* default */.Z(southLayer, function (v, i) { + return i; + }) + ); + var southEntries = flatten/* default */.Z( + map/* default */.Z(northLayer, function (v) { + return lodash_es_sortBy( + map/* default */.Z(g.outEdges(v), function (e) { + return { pos: southPos[e.w], weight: g.edge(e).weight }; + }), + 'pos' + ); + }) + ); + + // Build the accumulator tree + var firstIndex = 1; + while (firstIndex < southLayer.length) firstIndex <<= 1; + var treeSize = 2 * firstIndex - 1; + firstIndex -= 1; + var tree = map/* default */.Z(new Array(treeSize), function () { + return 0; + }); + + // Calculate the weighted crossings + var cc = 0; + forEach/* default */.Z( + // @ts-expect-error + southEntries.forEach(function (entry) { + var index = entry.pos + firstIndex; + tree[index] += entry.weight; + var weightSum = 0; + // @ts-expect-error + while (index > 0) { + // @ts-expect-error + if (index % 2) { + weightSum += tree[index + 1]; + } + // @ts-expect-error + index = (index - 1) >> 1; + tree[index] += entry.weight; + } + cc += entry.weight * weightSum; + }) + ); + + return cc; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js + + + + +/* + * Assigns an initial order value for each node by performing a DFS search + * starting from nodes in the first rank. Nodes are assigned an order in their + * rank as they are first visited. + * + * This approach comes from Gansner, et al., "A Technique for Drawing Directed + * Graphs." + * + * Returns a layering matrix with an array per layer and each layer sorted by + * the order of its nodes. + */ +function initOrder(g) { + var visited = {}; + var simpleNodes = filter/* default */.Z(g.nodes(), function (v) { + return !g.children(v).length; + }); + var maxRank = lodash_es_max( + map/* default */.Z(simpleNodes, function (v) { + return g.node(v).rank; + }) + ); + var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () { + return []; + }); + + function dfs(v) { + if (has/* default */.Z(visited, v)) return; + visited[v] = true; + var node = g.node(v); + layers[node.rank].push(v); + forEach/* default */.Z(g.successors(v), dfs); + } + + var orderedVs = lodash_es_sortBy(simpleNodes, function (v) { + return g.node(v).rank; + }); + forEach/* default */.Z(orderedVs, dfs); + + return layers; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js + + + + +function barycenter(g, movable) { + return map/* default */.Z(movable, function (v) { + var inV = g.inEdges(v); + if (!inV.length) { + return { v: v }; + } else { + var result = reduce/* default */.Z( + inV, + function (acc, e) { + var edge = g.edge(e), + nodeU = g.node(e.v); + return { + sum: acc.sum + edge.weight * nodeU.order, + weight: acc.weight + edge.weight, + }; + }, + { sum: 0, weight: 0 } + ); + + return { + v: v, + barycenter: result.sum / result.weight, + weight: result.weight, + }; + } + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js + + + + +/* + * Given a list of entries of the form {v, barycenter, weight} and a + * constraint graph this function will resolve any conflicts between the + * constraint graph and the barycenters for the entries. If the barycenters for + * an entry would violate a constraint in the constraint graph then we coalesce + * the nodes in the conflict into a new node that respects the contraint and + * aggregates barycenter and weight information. + * + * This implementation is based on the description in Forster, "A Fast and + * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it + * differs in some specific details. + * + * Pre-conditions: + * + * 1. Each entry has the form {v, barycenter, weight}, or if the node has + * no barycenter, then {v}. + * + * Returns: + * + * A new list of entries of the form {vs, i, barycenter, weight}. The list + * `vs` may either be a singleton or it may be an aggregation of nodes + * ordered such that they do not violate constraints from the constraint + * graph. The property `i` is the lowest original index of any of the + * elements in `vs`. + */ +function resolveConflicts(entries, cg) { + var mappedEntries = {}; + forEach/* default */.Z(entries, function (entry, i) { + var tmp = (mappedEntries[entry.v] = { + indegree: 0, + in: [], + out: [], + vs: [entry.v], + i: i, + }); + if (!isUndefined/* default */.Z(entry.barycenter)) { + // @ts-expect-error + tmp.barycenter = entry.barycenter; + // @ts-expect-error + tmp.weight = entry.weight; + } + }); + + forEach/* default */.Z(cg.edges(), function (e) { + var entryV = mappedEntries[e.v]; + var entryW = mappedEntries[e.w]; + if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) { + entryW.indegree++; + entryV.out.push(mappedEntries[e.w]); + } + }); + + var sourceSet = filter/* default */.Z(mappedEntries, function (entry) { + // @ts-expect-error + return !entry.indegree; + }); + + return doResolveConflicts(sourceSet); +} + +function doResolveConflicts(sourceSet) { + var entries = []; + + function handleIn(vEntry) { + return function (uEntry) { + if (uEntry.merged) { + return; + } + if ( + isUndefined/* default */.Z(uEntry.barycenter) || + isUndefined/* default */.Z(vEntry.barycenter) || + uEntry.barycenter >= vEntry.barycenter + ) { + mergeEntries(vEntry, uEntry); + } + }; + } + + function handleOut(vEntry) { + return function (wEntry) { + wEntry['in'].push(vEntry); + if (--wEntry.indegree === 0) { + sourceSet.push(wEntry); + } + }; + } + + while (sourceSet.length) { + var entry = sourceSet.pop(); + entries.push(entry); + forEach/* default */.Z(entry['in'].reverse(), handleIn(entry)); + forEach/* default */.Z(entry.out, handleOut(entry)); + } + + return map/* default */.Z( + filter/* default */.Z(entries, function (entry) { + return !entry.merged; + }), + function (entry) { + return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']); + } + ); +} + +function mergeEntries(target, source) { + var sum = 0; + var weight = 0; + + if (target.weight) { + sum += target.barycenter * target.weight; + weight += target.weight; + } + + if (source.weight) { + sum += source.barycenter * source.weight; + weight += source.weight; + } + + target.vs = source.vs.concat(target.vs); + target.barycenter = sum / weight; + target.weight = weight; + target.i = Math.min(source.i, target.i); + source.merged = true; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js + + + + + +function sort(entries, biasRight) { + var parts = partition(entries, function (entry) { + return has/* default */.Z(entry, 'barycenter'); + }); + var sortable = parts.lhs, + unsortable = lodash_es_sortBy(parts.rhs, function (entry) { + return -entry.i; + }), + vs = [], + sum = 0, + weight = 0, + vsIndex = 0; + + sortable.sort(compareWithBias(!!biasRight)); + + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + + forEach/* default */.Z(sortable, function (entry) { + vsIndex += entry.vs.length; + vs.push(entry.vs); + sum += entry.barycenter * entry.weight; + weight += entry.weight; + vsIndex = consumeUnsortable(vs, unsortable, vsIndex); + }); + + var result = { vs: flatten/* default */.Z(vs) }; + if (weight) { + result.barycenter = sum / weight; + result.weight = weight; + } + return result; +} + +function consumeUnsortable(vs, unsortable, index) { + var last; + while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) { + unsortable.pop(); + vs.push(last.vs); + index++; + } + return index; +} + +function compareWithBias(bias) { + return function (entryV, entryW) { + if (entryV.barycenter < entryW.barycenter) { + return -1; + } else if (entryV.barycenter > entryW.barycenter) { + return 1; + } + + return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; + }; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js + + + + + + + +function sortSubgraph(g, v, cg, biasRight) { + var movable = g.children(v); + var node = g.node(v); + var bl = node ? node.borderLeft : undefined; + var br = node ? node.borderRight : undefined; + var subgraphs = {}; + + if (bl) { + movable = filter/* default */.Z(movable, function (w) { + return w !== bl && w !== br; + }); + } + + var barycenters = barycenter(g, movable); + forEach/* default */.Z(barycenters, function (entry) { + if (g.children(entry.v).length) { + var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight); + subgraphs[entry.v] = subgraphResult; + if (has/* default */.Z(subgraphResult, 'barycenter')) { + mergeBarycenters(entry, subgraphResult); + } + } + }); + + var entries = resolveConflicts(barycenters, cg); + expandSubgraphs(entries, subgraphs); + + var result = sort(entries, biasRight); + + if (bl) { + result.vs = flatten/* default */.Z([bl, result.vs, br]); + if (g.predecessors(bl).length) { + var blPred = g.node(g.predecessors(bl)[0]), + brPred = g.node(g.predecessors(br)[0]); + if (!has/* default */.Z(result, 'barycenter')) { + result.barycenter = 0; + result.weight = 0; + } + result.barycenter = + (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); + result.weight += 2; + } + } + + return result; +} + +function expandSubgraphs(entries, subgraphs) { + forEach/* default */.Z(entries, function (entry) { + entry.vs = flatten/* default */.Z( + entry.vs.map(function (v) { + if (subgraphs[v]) { + return subgraphs[v].vs; + } + return v; + }) + ); + }); +} + +function mergeBarycenters(target, other) { + if (!isUndefined/* default */.Z(target.barycenter)) { + target.barycenter = + (target.barycenter * target.weight + other.barycenter * other.weight) / + (target.weight + other.weight); + target.weight += other.weight; + } else { + target.barycenter = other.barycenter; + target.weight = other.weight; + } +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js + + + + + + + + + + + +/* + * Applies heuristics to minimize edge crossings in the graph and sets the best + * order solution as an order attribute on each node. + * + * Pre-conditions: + * + * 1. Graph must be DAG + * 2. Graph nodes must be objects with a "rank" attribute + * 3. Graph edges must have the "weight" attribute + * + * Post-conditions: + * + * 1. Graph nodes will have an "order" attribute based on the results of the + * algorithm. + */ +function order(g) { + var maxRank = util_maxRank(g), + downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'), + upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges'); + + var layering = initOrder(g); + assignOrder(g, layering); + + var bestCC = Number.POSITIVE_INFINITY, + best; + + for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) { + sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2); + + layering = buildLayerMatrix(g); + var cc = crossCount(g, layering); + if (cc < bestCC) { + lastBest = 0; + best = lodash_es_cloneDeep(layering); + bestCC = cc; + } + } + + assignOrder(g, best); +} + +function buildLayerGraphs(g, ranks, relationship) { + return map/* default */.Z(ranks, function (rank) { + return buildLayerGraph(g, rank, relationship); + }); +} + +function sweepLayerGraphs(layerGraphs, biasRight) { + var cg = new graphlib/* Graph */.k(); + forEach/* default */.Z(layerGraphs, function (lg) { + var root = lg.graph().root; + var sorted = sortSubgraph(lg, root, cg, biasRight); + forEach/* default */.Z(sorted.vs, function (v, i) { + lg.node(v).order = i; + }); + addSubgraphConstraints(lg, cg, sorted.vs); + }); +} + +function assignOrder(g, layering) { + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, i) { + g.node(v).order = i; + }); + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js + + + + +function parentDummyChains(g) { + var postorderNums = parent_dummy_chains_postorder(g); + + forEach/* default */.Z(g.graph().dummyChains, function (v) { + var node = g.node(v); + var edgeObj = node.edgeObj; + var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w); + var path = pathData.path; + var lca = pathData.lca; + var pathIdx = 0; + var pathV = path[pathIdx]; + var ascending = true; + + while (v !== edgeObj.w) { + node = g.node(v); + + if (ascending) { + while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) { + pathIdx++; + } + + if (pathV === lca) { + ascending = false; + } + } + + if (!ascending) { + while ( + pathIdx < path.length - 1 && + g.node((pathV = path[pathIdx + 1])).minRank <= node.rank + ) { + pathIdx++; + } + pathV = path[pathIdx]; + } + + g.setParent(v, pathV); + v = g.successors(v)[0]; + } + }); +} + +// Find a path from v to w through the lowest common ancestor (LCA). Return the +// full path and the LCA. +function findPath(g, postorderNums, v, w) { + var vPath = []; + var wPath = []; + var low = Math.min(postorderNums[v].low, postorderNums[w].low); + var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim); + var parent; + var lca; + + // Traverse up from v to find the LCA + parent = v; + do { + parent = g.parent(parent); + vPath.push(parent); + } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); + lca = parent; + + // Traverse from w to LCA + parent = w; + while ((parent = g.parent(parent)) !== lca) { + wPath.push(parent); + } + + return { path: vPath.concat(wPath.reverse()), lca: lca }; +} + +function parent_dummy_chains_postorder(g) { + var result = {}; + var lim = 0; + + function dfs(v) { + var low = lim; + forEach/* default */.Z(g.children(v), dfs); + result[v] = { low: low, lim: lim++ }; + } + forEach/* default */.Z(g.children(), dfs); + + return result; +} + +// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js +var _castFunction = __webpack_require__(68882); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forOwn.js + + + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee)); +} + +/* harmony default export */ const lodash_es_forOwn = (forOwn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules +var _baseFor = __webpack_require__(61395); +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js + + + + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z); +} + +/* harmony default export */ const lodash_es_forIn = (forIn); + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js + + + + +/* + * This module provides coordinate assignment based on Brandes and Köpf, "Fast + * and Simple Horizontal Coordinate Assignment." + */ + + + +/* + * Marks all edges in the graph with a type-1 conflict with the "type1Conflict" + * property. A type-1 conflict is one where a non-inner segment crosses an + * inner segment. An inner segment is an edge with both incident nodes marked + * with the "dummy" property. + * + * This algorithm scans layer by layer, starting with the second, for type-1 + * conflicts between the current layer and the previous layer. For each layer + * it scans the nodes from left to right until it reaches one that is incident + * on an inner segment. It then scans predecessors to determine if they have + * edges that cross that inner segment. At the end a final scan is done for all + * nodes on the current rank to see if they cross the last visited inner + * segment. + * + * This algorithm (safely) assumes that a dummy node will only be incident on a + * single node in the layers being scanned. + */ +function findType1Conflicts(g, layering) { + var conflicts = {}; + + function visitLayer(prevLayer, layer) { + var // last visited node in the previous layer that is incident on an inner + // segment. + k0 = 0, + // Tracks the last node in this layer scanned for crossings with a type-1 + // segment. + scanPos = 0, + prevLayerLength = prevLayer.length, + lastNode = lodash_es_last(layer); + + forEach/* default */.Z(layer, function (v, i) { + var w = findOtherInnerSegmentNode(g, v), + k1 = w ? g.node(w).order : prevLayerLength; + + if (w || v === lastNode) { + forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) { + forEach/* default */.Z(g.predecessors(scanNode), function (u) { + var uLabel = g.node(u), + uPos = uLabel.order; + if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) { + addConflict(conflicts, u, scanNode); + } + }); + }); + // @ts-expect-error + scanPos = i + 1; + k0 = k1; + } + }); + + return layer; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findType2Conflicts(g, layering) { + var conflicts = {}; + + function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) { + var v; + forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) { + v = south[i]; + if (g.node(v).dummy) { + forEach/* default */.Z(g.predecessors(v), function (u) { + var uNode = g.node(u); + if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { + addConflict(conflicts, u, v); + } + }); + } + }); + } + + function visitLayer(north, south) { + var prevNorthPos = -1, + nextNorthPos, + southPos = 0; + + forEach/* default */.Z(south, function (v, southLookahead) { + if (g.node(v).dummy === 'border') { + var predecessors = g.predecessors(v); + if (predecessors.length) { + nextNorthPos = g.node(predecessors[0]).order; + scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); + // @ts-expect-error + southPos = southLookahead; + prevNorthPos = nextNorthPos; + } + } + scan(south, southPos, south.length, nextNorthPos, north.length); + }); + + return south; + } + + reduce/* default */.Z(layering, visitLayer); + return conflicts; +} + +function findOtherInnerSegmentNode(g, v) { + if (g.node(v).dummy) { + return lodash_es_find(g.predecessors(v), function (u) { + return g.node(u).dummy; + }); + } +} + +function addConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + + var conflictsV = conflicts[v]; + if (!conflictsV) { + conflicts[v] = conflictsV = {}; + } + conflictsV[w] = true; +} + +function hasConflict(conflicts, v, w) { + if (v > w) { + var tmp = v; + v = w; + w = tmp; + } + return has/* default */.Z(conflicts[v], w); +} + +/* + * Try to align nodes into vertical "blocks" where possible. This algorithm + * attempts to align a node with one of its median neighbors. If the edge + * connecting a neighbor is a type-1 conflict then we ignore that possibility. + * If a previous node has already formed a block with a node after the node + * we're trying to form a block with, we also ignore that possibility - our + * blocks would be split in that scenario. + */ +function verticalAlignment(g, layering, conflicts, neighborFn) { + var root = {}, + align = {}, + pos = {}; + + // We cache the position here based on the layering because the graph and + // layering may be out of sync. The layering matrix is manipulated to + // generate different extreme alignments. + forEach/* default */.Z(layering, function (layer) { + forEach/* default */.Z(layer, function (v, order) { + root[v] = v; + align[v] = v; + pos[v] = order; + }); + }); + + forEach/* default */.Z(layering, function (layer) { + var prevIdx = -1; + forEach/* default */.Z(layer, function (v) { + var ws = neighborFn(v); + if (ws.length) { + ws = lodash_es_sortBy(ws, function (w) { + return pos[w]; + }); + var mp = (ws.length - 1) / 2; + for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) { + var w = ws[i]; + if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) { + align[w] = v; + align[v] = root[v] = root[w]; + prevIdx = pos[w]; + } + } + } + }); + }); + + return { root: root, align: align }; +} + +function horizontalCompaction(g, layering, root, align, reverseSep) { + // This portion of the algorithm differs from BK due to a number of problems. + // Instead of their algorithm we construct a new block graph and do two + // sweeps. The first sweep places blocks with the smallest possible + // coordinates. The second sweep removes unused space by moving blocks to the + // greatest coordinates without violating separation. + var xs = {}, + blockG = buildBlockGraph(g, layering, root, reverseSep), + borderType = reverseSep ? 'borderLeft' : 'borderRight'; + + function iterate(setXsFunc, nextNodesFunc) { + var stack = blockG.nodes(); + var elem = stack.pop(); + var visited = {}; + while (elem) { + if (visited[elem]) { + setXsFunc(elem); + } else { + visited[elem] = true; + stack.push(elem); + stack = stack.concat(nextNodesFunc(elem)); + } + + elem = stack.pop(); + } + } + + // First pass, assign smallest coordinates + function pass1(elem) { + xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) { + return Math.max(acc, xs[e.v] + blockG.edge(e)); + }, 0); + } + + // Second pass, assign greatest coordinates + function pass2(elem) { + var min = blockG.outEdges(elem).reduce(function (acc, e) { + return Math.min(acc, xs[e.w] - blockG.edge(e)); + }, Number.POSITIVE_INFINITY); + + var node = g.node(elem); + if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { + xs[elem] = Math.max(xs[elem], min); + } + } + + iterate(pass1, blockG.predecessors.bind(blockG)); + iterate(pass2, blockG.successors.bind(blockG)); + + // Assign x coordinates to all nodes + forEach/* default */.Z(align, function (v) { + xs[v] = xs[root[v]]; + }); + + return xs; +} + +function buildBlockGraph(g, layering, root, reverseSep) { + var blockGraph = new graphlib/* Graph */.k(), + graphLabel = g.graph(), + sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); + + forEach/* default */.Z(layering, function (layer) { + var u; + forEach/* default */.Z(layer, function (v) { + var vRoot = root[v]; + blockGraph.setNode(vRoot); + if (u) { + var uRoot = root[u], + prevMax = blockGraph.edge(uRoot, vRoot); + blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0)); + } + u = v; + }); + }); + + return blockGraph; +} + +/* + * Returns the alignment that has the smallest width of the given alignments. + */ +function findSmallestWidthAlignment(g, xss) { + return lodash_es_minBy(values/* default */.Z(xss), function (xs) { + var max = Number.NEGATIVE_INFINITY; + var min = Number.POSITIVE_INFINITY; + + lodash_es_forIn(xs, function (x, v) { + var halfWidth = width(g, v) / 2; + + max = Math.max(x + halfWidth, max); + min = Math.min(x - halfWidth, min); + }); + + return max - min; + }); +} + +/* + * Align the coordinates of each of the layout alignments such that + * left-biased alignments have their minimum coordinate at the same point as + * the minimum coordinate of the smallest width alignment and right-biased + * alignments have their maximum coordinate at the same point as the maximum + * coordinate of the smallest width alignment. + */ +function alignCoordinates(xss, alignTo) { + var alignToVals = values/* default */.Z(alignTo), + alignToMin = lodash_es_min(alignToVals), + alignToMax = lodash_es_max(alignToVals); + + forEach/* default */.Z(['u', 'd'], function (vert) { + forEach/* default */.Z(['l', 'r'], function (horiz) { + var alignment = vert + horiz, + xs = xss[alignment], + delta; + if (xs === alignTo) return; + + var xsVals = values/* default */.Z(xs); + delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals); + + if (delta) { + xss[alignment] = lodash_es_mapValues(xs, function (x) { + return x + delta; + }); + } + }); + }); +} + +function balance(xss, align) { + return lodash_es_mapValues(xss.ul, function (ignore, v) { + if (align) { + return xss[align.toLowerCase()][v]; + } else { + var xs = lodash_es_sortBy(map/* default */.Z(xss, v)); + return (xs[1] + xs[2]) / 2; + } + }); +} + +function positionX(g) { + var layering = buildLayerMatrix(g); + var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering)); + + var xss = {}; + var adjustedLayering; + forEach/* default */.Z(['u', 'd'], function (vert) { + adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse(); + forEach/* default */.Z(['l', 'r'], function (horiz) { + if (horiz === 'r') { + adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) { + return values/* default */.Z(inner).reverse(); + }); + } + + var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g); + var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn); + var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r'); + if (horiz === 'r') { + xs = lodash_es_mapValues(xs, function (x) { + return -x; + }); + } + xss[vert + horiz] = xs; + }); + }); + + var smallestWidth = findSmallestWidthAlignment(g, xss); + alignCoordinates(xss, smallestWidth); + return balance(xss, g.graph().align); +} + +function sep(nodeSep, edgeSep, reverseSep) { + return function (g, v, w) { + var vLabel = g.node(v); + var wLabel = g.node(w); + var sum = 0; + var delta; + + sum += vLabel.width / 2; + if (has/* default */.Z(vLabel, 'labelpos')) { + switch (vLabel.labelpos.toLowerCase()) { + case 'l': + delta = -vLabel.width / 2; + break; + case 'r': + delta = vLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; + sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; + + sum += wLabel.width / 2; + if (has/* default */.Z(wLabel, 'labelpos')) { + switch (wLabel.labelpos.toLowerCase()) { + case 'l': + delta = wLabel.width / 2; + break; + case 'r': + delta = -wLabel.width / 2; + break; + } + } + if (delta) { + sum += reverseSep ? delta : -delta; + } + delta = 0; + + return sum; + }; +} + +function width(g, v) { + return g.node(v).width; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js + + + + + + +function position(g) { + g = asNonCompoundGraph(g); + + positionY(g); + lodash_es_forOwn(positionX(g), function (x, v) { + g.node(v).x = x; + }); +} + +function positionY(g) { + var layering = buildLayerMatrix(g); + var rankSep = g.graph().ranksep; + var prevY = 0; + forEach/* default */.Z(layering, function (layer) { + var maxHeight = lodash_es_max( + map/* default */.Z(layer, function (v) { + return g.node(v).height; + }) + ); + forEach/* default */.Z(layer, function (v) { + g.node(v).y = prevY + maxHeight / 2; + }); + prevY += maxHeight + rankSep; + }); +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js + + + + + + + + + + + + + + + +function layout(g, opts) { + var time = opts && opts.debugTiming ? util_time : notime; + time('layout', function () { + var layoutGraph = time(' buildLayoutGraph', function () { + return buildLayoutGraph(g); + }); + time(' runLayout', function () { + runLayout(layoutGraph, time); + }); + time(' updateInputGraph', function () { + updateInputGraph(g, layoutGraph); + }); + }); +} + +function runLayout(g, time) { + time(' makeSpaceForEdgeLabels', function () { + makeSpaceForEdgeLabels(g); + }); + time(' removeSelfEdges', function () { + removeSelfEdges(g); + }); + time(' acyclic', function () { + run(g); + }); + time(' nestingGraph.run', function () { + nesting_graph_run(g); + }); + time(' rank', function () { + rank(asNonCompoundGraph(g)); + }); + time(' injectEdgeLabelProxies', function () { + injectEdgeLabelProxies(g); + }); + time(' removeEmptyRanks', function () { + removeEmptyRanks(g); + }); + time(' nestingGraph.cleanup', function () { + cleanup(g); + }); + time(' normalizeRanks', function () { + normalizeRanks(g); + }); + time(' assignRankMinMax', function () { + assignRankMinMax(g); + }); + time(' removeEdgeLabelProxies', function () { + removeEdgeLabelProxies(g); + }); + time(' normalize.run', function () { + normalize_run(g); + }); + time(' parentDummyChains', function () { + parentDummyChains(g); + }); + time(' addBorderSegments', function () { + addBorderSegments(g); + }); + time(' order', function () { + order(g); + }); + time(' insertSelfEdges', function () { + insertSelfEdges(g); + }); + time(' adjustCoordinateSystem', function () { + adjust(g); + }); + time(' position', function () { + position(g); + }); + time(' positionSelfEdges', function () { + positionSelfEdges(g); + }); + time(' removeBorderNodes', function () { + removeBorderNodes(g); + }); + time(' normalize.undo', function () { + normalize_undo(g); + }); + time(' fixupEdgeLabelCoords', function () { + fixupEdgeLabelCoords(g); + }); + time(' undoCoordinateSystem', function () { + coordinate_system_undo(g); + }); + time(' translateGraph', function () { + translateGraph(g); + }); + time(' assignNodeIntersects', function () { + assignNodeIntersects(g); + }); + time(' reversePoints', function () { + reversePointsForReversedEdges(g); + }); + time(' acyclic.undo', function () { + undo(g); + }); +} + +/* + * Copies final layout information from the layout graph back to the input + * graph. This process only copies whitelisted attributes from the layout graph + * to the input graph, so it serves as a good place to determine what + * attributes can influence layout. + */ +function updateInputGraph(inputGraph, layoutGraph) { + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var inputLabel = inputGraph.node(v); + var layoutLabel = layoutGraph.node(v); + + if (inputLabel) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + + if (layoutGraph.children(v).length) { + inputLabel.width = layoutLabel.width; + inputLabel.height = layoutLabel.height; + } + } + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var inputLabel = inputGraph.edge(e); + var layoutLabel = layoutGraph.edge(e); + + inputLabel.points = layoutLabel.points; + if (has/* default */.Z(layoutLabel, 'x')) { + inputLabel.x = layoutLabel.x; + inputLabel.y = layoutLabel.y; + } + }); + + inputGraph.graph().width = layoutGraph.graph().width; + inputGraph.graph().height = layoutGraph.graph().height; +} + +var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy']; +var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' }; +var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align']; +var nodeNumAttrs = ['width', 'height']; +var nodeDefaults = { width: 0, height: 0 }; +var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset']; +var edgeDefaults = { + minlen: 1, + weight: 1, + width: 0, + height: 0, + labeloffset: 10, + labelpos: 'r', +}; +var edgeAttrs = ['labelpos']; + +/* + * Constructs a new graph from the input graph, which can be used for layout. + * This process copies only whitelisted attributes from the input graph to the + * layout graph. Thus this function serves as a good place to determine what + * attributes can influence layout. + */ +function buildLayoutGraph(inputGraph) { + var g = new graphlib/* Graph */.k({ multigraph: true, compound: true }); + var graph = canonicalize(inputGraph.graph()); + + g.setGraph( + merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs)) + ); + + forEach/* default */.Z(inputGraph.nodes(), function (v) { + var node = canonicalize(inputGraph.node(v)); + g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults)); + g.setParent(v, inputGraph.parent(v)); + }); + + forEach/* default */.Z(inputGraph.edges(), function (e) { + var edge = canonicalize(inputGraph.edge(e)); + g.setEdge( + e, + merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs)) + ); + }); + + return g; +} + +/* + * This idea comes from the Gansner paper: to account for edge labels in our + * layout we split each rank in half by doubling minlen and halving ranksep. + * Then we can place labels at these mid-points between nodes. + * + * We also add some minimal padding to the width to push the label for the edge + * away from the edge itself a bit. + */ +function makeSpaceForEdgeLabels(g) { + var graph = g.graph(); + graph.ranksep /= 2; + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + edge.minlen *= 2; + if (edge.labelpos.toLowerCase() !== 'c') { + if (graph.rankdir === 'TB' || graph.rankdir === 'BT') { + edge.width += edge.labeloffset; + } else { + edge.height += edge.labeloffset; + } + } + }); +} + +/* + * Creates temporary dummy nodes that capture the rank in which each edge's + * label is going to, if it has one of non-zero width and height. We do this + * so that we can safely remove empty ranks while preserving balance for the + * label's position. + */ +function injectEdgeLabelProxies(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.width && edge.height) { + var v = g.node(e.v); + var w = g.node(e.w); + var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e }; + addDummyNode(g, 'edge-proxy', label, '_ep'); + } + }); +} + +function assignRankMinMax(g) { + var maxRank = 0; + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.borderTop) { + node.minRank = g.node(node.borderTop).rank; + node.maxRank = g.node(node.borderBottom).rank; + // @ts-expect-error + maxRank = lodash_es_max(maxRank, node.maxRank); + } + }); + g.graph().maxRank = maxRank; +} + +function removeEdgeLabelProxies(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'edge-proxy') { + g.edge(node.e).labelRank = node.rank; + g.removeNode(v); + } + }); +} + +function translateGraph(g) { + var minX = Number.POSITIVE_INFINITY; + var maxX = 0; + var minY = Number.POSITIVE_INFINITY; + var maxY = 0; + var graphLabel = g.graph(); + var marginX = graphLabel.marginx || 0; + var marginY = graphLabel.marginy || 0; + + function getExtremes(attrs) { + var x = attrs.x; + var y = attrs.y; + var w = attrs.width; + var h = attrs.height; + minX = Math.min(minX, x - w / 2); + maxX = Math.max(maxX, x + w / 2); + minY = Math.min(minY, y - h / 2); + maxY = Math.max(maxY, y + h / 2); + } + + forEach/* default */.Z(g.nodes(), function (v) { + getExtremes(g.node(v)); + }); + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + getExtremes(edge); + } + }); + + minX -= marginX; + minY -= marginY; + + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + node.x -= minX; + node.y -= minY; + }); + + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + forEach/* default */.Z(edge.points, function (p) { + p.x -= minX; + p.y -= minY; + }); + if (has/* default */.Z(edge, 'x')) { + edge.x -= minX; + } + if (has/* default */.Z(edge, 'y')) { + edge.y -= minY; + } + }); + + graphLabel.width = maxX - minX + marginX; + graphLabel.height = maxY - minY + marginY; +} + +function assignNodeIntersects(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + var nodeV = g.node(e.v); + var nodeW = g.node(e.w); + var p1, p2; + if (!edge.points) { + edge.points = []; + p1 = nodeW; + p2 = nodeV; + } else { + p1 = edge.points[0]; + p2 = edge.points[edge.points.length - 1]; + } + edge.points.unshift(intersectRect(nodeV, p1)); + edge.points.push(intersectRect(nodeW, p2)); + }); +} + +function fixupEdgeLabelCoords(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (has/* default */.Z(edge, 'x')) { + if (edge.labelpos === 'l' || edge.labelpos === 'r') { + edge.width -= edge.labeloffset; + } + switch (edge.labelpos) { + case 'l': + edge.x -= edge.width / 2 + edge.labeloffset; + break; + case 'r': + edge.x += edge.width / 2 + edge.labeloffset; + break; + } + } + }); +} + +function reversePointsForReversedEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + var edge = g.edge(e); + if (edge.reversed) { + edge.points.reverse(); + } + }); +} + +function removeBorderNodes(g) { + forEach/* default */.Z(g.nodes(), function (v) { + if (g.children(v).length) { + var node = g.node(v); + var t = g.node(node.borderTop); + var b = g.node(node.borderBottom); + var l = g.node(lodash_es_last(node.borderLeft)); + var r = g.node(lodash_es_last(node.borderRight)); + + node.width = Math.abs(r.x - l.x); + node.height = Math.abs(b.y - t.y); + node.x = l.x + node.width / 2; + node.y = t.y + node.height / 2; + } + }); + + forEach/* default */.Z(g.nodes(), function (v) { + if (g.node(v).dummy === 'border') { + g.removeNode(v); + } + }); +} + +function removeSelfEdges(g) { + forEach/* default */.Z(g.edges(), function (e) { + if (e.v === e.w) { + var node = g.node(e.v); + if (!node.selfEdges) { + node.selfEdges = []; + } + node.selfEdges.push({ e: e, label: g.edge(e) }); + g.removeEdge(e); + } + }); +} + +function insertSelfEdges(g) { + var layers = buildLayerMatrix(g); + forEach/* default */.Z(layers, function (layer) { + var orderShift = 0; + forEach/* default */.Z(layer, function (v, i) { + var node = g.node(v); + node.order = i + orderShift; + forEach/* default */.Z(node.selfEdges, function (selfEdge) { + addDummyNode( + g, + 'selfedge', + { + width: selfEdge.label.width, + height: selfEdge.label.height, + rank: node.rank, + order: i + ++orderShift, + e: selfEdge.e, + label: selfEdge.label, + }, + '_se' + ); + }); + delete node.selfEdges; + }); + }); +} + +function positionSelfEdges(g) { + forEach/* default */.Z(g.nodes(), function (v) { + var node = g.node(v); + if (node.dummy === 'selfedge') { + var selfNode = g.node(node.e.v); + var x = selfNode.x + selfNode.width / 2; + var y = selfNode.y; + var dx = node.x - x; + var dy = selfNode.height / 2; + g.setEdge(node.e, node.label); + g.removeNode(v); + node.label.points = [ + { x: x + (2 * dx) / 3, y: y - dy }, + { x: x + (5 * dx) / 6, y: y - dy }, + { x: x + dx, y: y }, + { x: x + (5 * dx) / 6, y: y + dy }, + { x: x + (2 * dx) / 3, y: y + dy }, + ]; + node.label.x = node.x; + node.label.y = node.y; + } + }); +} + +function selectNumberAttrs(obj, attrs) { + return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number); +} + +function canonicalize(attrs) { + var newAttrs = {}; + forEach/* default */.Z(attrs, function (v, k) { + newAttrs[k.toLowerCase()] = v; + }); + return newAttrs; +} + +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + + + + + + + + +/***/ }), + +/***/ 52544: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + k: () => (/* binding */ Graph) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules +var has = __webpack_require__(17452); +// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js +var constant = __webpack_require__(62002); +// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js +var isFunction = __webpack_require__(73234); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules +var filter = __webpack_require__(13445); +// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js +var isEmpty = __webpack_require__(79697); +// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js +var forEach = __webpack_require__(70870); +// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js +var isUndefined = __webpack_require__(49360); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules +var _baseFlatten = __webpack_require__(10626); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js +var _baseRest = __webpack_require__(69581); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js +var _baseFindIndex = __webpack_require__(21692); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/* harmony default export */ const _baseIsNaN = (baseIsNaN); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/* harmony default export */ const _strictIndexOf = (strictIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js + + + + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? _strictIndexOf(array, value, fromIndex) + : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex); +} + +/* harmony default export */ const _baseIndexOf = (baseIndexOf); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js + + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && _baseIndexOf(array, value, 0) > -1; +} + +/* harmony default export */ const _arrayIncludes = (arrayIncludes); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js +var _Set = __webpack_require__(93203); +;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +/* harmony default export */ const lodash_es_noop = (noop); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) { + return new _Set/* default */.Z(values); +}; + +/* harmony default export */ const _createSet = (createSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js + + + + + + + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = _arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = _arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : _createSet(array); + if (set) { + return (0,_setToArray/* default */.Z)(set); + } + isCommon = false; + includes = _cacheHas/* default */.Z; + seen = new _SetCache/* default */.Z; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/* harmony default export */ const _baseUniq = (baseUniq); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js +var isArrayLikeObject = __webpack_require__(836); +;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js + + + + + +/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ +var union = (0,_baseRest/* default */.Z)(function(arrays) { + return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true)); +}); + +/* harmony default export */ const lodash_es_union = (union); + +// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules +var values = __webpack_require__(34148); +// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules +var reduce = __webpack_require__(92344); +;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + + +var DEFAULT_EDGE_NAME = '\x00'; +var GRAPH_NODE = '\x00'; +var EDGE_KEY_DELIM = '\x01'; + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. + +// Implementation notes: +// +// * Node id query functions should return string ids for the nodes +// * Edge id query functions should return an "edgeObj", edge object, that is +// composed of enough information to uniquely identify an edge: {v, w, name}. +// * Internally we use an "edgeId", a stringified form of the edgeObj, to +// reference edges. This is because we need a performant way to look these +// edges up and, object properties, which have string keys, are the closest +// we're going to get to a performant hashtable in JavaScript. +class Graph { + constructor(opts = {}) { + this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true; + this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false; + this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false; + + // Label for the graph itself + this._label = undefined; + + // Defaults to be set when creating a new node + this._defaultNodeLabelFn = constant/* default */.Z(undefined); + + // Defaults to be set when creating a new edge + this._defaultEdgeLabelFn = constant/* default */.Z(undefined); + + // v -> label + this._nodes = {}; + + if (this._isCompound) { + // v -> parent + this._parent = {}; + + // v -> children + this._children = {}; + this._children[GRAPH_NODE] = {}; + } + + // v -> edgeObj + this._in = {}; + + // u -> v -> Number + this._preds = {}; + + // v -> edgeObj + this._out = {}; + + // v -> w -> Number + this._sucs = {}; + + // e -> edgeObj + this._edgeObjs = {}; + + // e -> label + this._edgeLabels = {}; + } + /* === Graph functions ========= */ + isDirected() { + return this._isDirected; + } + isMultigraph() { + return this._isMultigraph; + } + isCompound() { + return this._isCompound; + } + setGraph(label) { + this._label = label; + return this; + } + graph() { + return this._label; + } + /* === Node functions ========== */ + setDefaultNodeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultNodeLabelFn = newDefault; + return this; + } + nodeCount() { + return this._nodeCount; + } + nodes() { + return keys/* default */.Z(this._nodes); + } + sources() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._in[v]); + }); + } + sinks() { + var self = this; + return filter/* default */.Z(this.nodes(), function (v) { + return isEmpty/* default */.Z(self._out[v]); + }); + } + setNodes(vs, value) { + var args = arguments; + var self = this; + forEach/* default */.Z(vs, function (v) { + if (args.length > 1) { + self.setNode(v, value); + } else { + self.setNode(v); + } + }); + return this; + } + setNode(v, value) { + if (has/* default */.Z(this._nodes, v)) { + if (arguments.length > 1) { + this._nodes[v] = value; + } + return this; + } + + // @ts-expect-error + this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v); + if (this._isCompound) { + this._parent[v] = GRAPH_NODE; + this._children[v] = {}; + this._children[GRAPH_NODE][v] = true; + } + this._in[v] = {}; + this._preds[v] = {}; + this._out[v] = {}; + this._sucs[v] = {}; + ++this._nodeCount; + return this; + } + node(v) { + return this._nodes[v]; + } + hasNode(v) { + return has/* default */.Z(this._nodes, v); + } + removeNode(v) { + var self = this; + if (has/* default */.Z(this._nodes, v)) { + var removeEdge = function (e) { + self.removeEdge(self._edgeObjs[e]); + }; + delete this._nodes[v]; + if (this._isCompound) { + this._removeFromParentsChildList(v); + delete this._parent[v]; + forEach/* default */.Z(this.children(v), function (child) { + self.setParent(child); + }); + delete this._children[v]; + } + forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge); + delete this._in[v]; + delete this._preds[v]; + forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge); + delete this._out[v]; + delete this._sucs[v]; + --this._nodeCount; + } + return this; + } + setParent(v, parent) { + if (!this._isCompound) { + throw new Error('Cannot set parent in a non-compound graph'); + } + + if (isUndefined/* default */.Z(parent)) { + parent = GRAPH_NODE; + } else { + // Coerce parent to string + parent += ''; + for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) { + if (ancestor === v) { + throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle'); + } + } + + this.setNode(parent); + } + + this.setNode(v); + this._removeFromParentsChildList(v); + this._parent[v] = parent; + this._children[parent][v] = true; + return this; + } + _removeFromParentsChildList(v) { + delete this._children[this._parent[v]][v]; + } + parent(v) { + if (this._isCompound) { + var parent = this._parent[v]; + if (parent !== GRAPH_NODE) { + return parent; + } + } + } + children(v) { + if (isUndefined/* default */.Z(v)) { + v = GRAPH_NODE; + } + + if (this._isCompound) { + var children = this._children[v]; + if (children) { + return keys/* default */.Z(children); + } + } else if (v === GRAPH_NODE) { + return this.nodes(); + } else if (this.hasNode(v)) { + return []; + } + } + predecessors(v) { + var predsV = this._preds[v]; + if (predsV) { + return keys/* default */.Z(predsV); + } + } + successors(v) { + var sucsV = this._sucs[v]; + if (sucsV) { + return keys/* default */.Z(sucsV); + } + } + neighbors(v) { + var preds = this.predecessors(v); + if (preds) { + return lodash_es_union(preds, this.successors(v)); + } + } + isLeaf(v) { + var neighbors; + if (this.isDirected()) { + neighbors = this.successors(v); + } else { + neighbors = this.neighbors(v); + } + return neighbors.length === 0; + } + filterNodes(filter) { + // @ts-expect-error + var copy = new this.constructor({ + directed: this._isDirected, + multigraph: this._isMultigraph, + compound: this._isCompound, + }); + + copy.setGraph(this.graph()); + + var self = this; + forEach/* default */.Z(this._nodes, function (value, v) { + if (filter(v)) { + copy.setNode(v, value); + } + }); + + forEach/* default */.Z(this._edgeObjs, function (e) { + // @ts-expect-error + if (copy.hasNode(e.v) && copy.hasNode(e.w)) { + copy.setEdge(e, self.edge(e)); + } + }); + + var parents = {}; + function findParent(v) { + var parent = self.parent(v); + if (parent === undefined || copy.hasNode(parent)) { + parents[v] = parent; + return parent; + } else if (parent in parents) { + return parents[parent]; + } else { + return findParent(parent); + } + } + + if (this._isCompound) { + forEach/* default */.Z(copy.nodes(), function (v) { + copy.setParent(v, findParent(v)); + }); + } + + return copy; + } + /* === Edge functions ========== */ + setDefaultEdgeLabel(newDefault) { + if (!isFunction/* default */.Z(newDefault)) { + newDefault = constant/* default */.Z(newDefault); + } + this._defaultEdgeLabelFn = newDefault; + return this; + } + edgeCount() { + return this._edgeCount; + } + edges() { + return values/* default */.Z(this._edgeObjs); + } + setPath(vs, value) { + var self = this; + var args = arguments; + reduce/* default */.Z(vs, function (v, w) { + if (args.length > 1) { + self.setEdge(v, w, value); + } else { + self.setEdge(v, w); + } + return w; + }); + return this; + } + /* + * setEdge(v, w, [value, [name]]) + * setEdge({ v, w, [name] }, [value]) + */ + setEdge() { + var v, w, name, value; + var valueSpecified = false; + var arg0 = arguments[0]; + + if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { + v = arg0.v; + w = arg0.w; + name = arg0.name; + if (arguments.length === 2) { + value = arguments[1]; + valueSpecified = true; + } + } else { + v = arg0; + w = arguments[1]; + name = arguments[3]; + if (arguments.length > 2) { + value = arguments[2]; + valueSpecified = true; + } + } + + v = '' + v; + w = '' + w; + if (!isUndefined/* default */.Z(name)) { + name = '' + name; + } + + var e = edgeArgsToId(this._isDirected, v, w, name); + if (has/* default */.Z(this._edgeLabels, e)) { + if (valueSpecified) { + this._edgeLabels[e] = value; + } + return this; + } + + if (!isUndefined/* default */.Z(name) && !this._isMultigraph) { + throw new Error('Cannot set a named edge when isMultigraph = false'); + } + + // It didn't exist, so we need to create it. + // First ensure the nodes exist. + this.setNode(v); + this.setNode(w); + + // @ts-expect-error + this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name); + + var edgeObj = edgeArgsToObj(this._isDirected, v, w, name); + // Ensure we add undirected edges in a consistent way. + v = edgeObj.v; + w = edgeObj.w; + + Object.freeze(edgeObj); + this._edgeObjs[e] = edgeObj; + incrementOrInitEntry(this._preds[w], v); + incrementOrInitEntry(this._sucs[v], w); + this._in[w][e] = edgeObj; + this._out[v][e] = edgeObj; + this._edgeCount++; + return this; + } + edge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return this._edgeLabels[e]; + } + hasEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + return has/* default */.Z(this._edgeLabels, e); + } + removeEdge(v, w, name) { + var e = + arguments.length === 1 + ? edgeObjToId(this._isDirected, arguments[0]) + : edgeArgsToId(this._isDirected, v, w, name); + var edge = this._edgeObjs[e]; + if (edge) { + v = edge.v; + w = edge.w; + delete this._edgeLabels[e]; + delete this._edgeObjs[e]; + decrementOrRemoveEntry(this._preds[w], v); + decrementOrRemoveEntry(this._sucs[v], w); + delete this._in[w][e]; + delete this._out[v][e]; + this._edgeCount--; + } + return this; + } + inEdges(v, u) { + var inV = this._in[v]; + if (inV) { + var edges = values/* default */.Z(inV); + if (!u) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.v === u; + }); + } + } + outEdges(v, w) { + var outV = this._out[v]; + if (outV) { + var edges = values/* default */.Z(outV); + if (!w) { + return edges; + } + return filter/* default */.Z(edges, function (edge) { + return edge.w === w; + }); + } + } + nodeEdges(v, w) { + var inEdges = this.inEdges(v, w); + if (inEdges) { + return inEdges.concat(this.outEdges(v, w)); + } + } +} + +/* Number of nodes in the graph. Should only be changed by the implementation. */ +Graph.prototype._nodeCount = 0; + +/* Number of edges in the graph. Should only be changed by the implementation. */ +Graph.prototype._edgeCount = 0; + +function incrementOrInitEntry(map, k) { + if (map[k]) { + map[k]++; + } else { + map[k] = 1; + } +} + +function decrementOrRemoveEntry(map, k) { + if (!--map[k]) { + delete map[k]; + } +} + +function edgeArgsToId(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name); +} + +function edgeArgsToObj(isDirected, v_, w_, name) { + var v = '' + v_; + var w = '' + w_; + if (!isDirected && v > w) { + var tmp = v; + v = w; + w = tmp; + } + var edgeObj = { v: v, w: w }; + if (name) { + edgeObj.name = name; + } + return edgeObj; +} + +function edgeObjToId(isDirected, edgeObj) { + return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); +} + + +/***/ }), + +/***/ 45625: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ k: () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k) +/* harmony export */ }); +/* unused harmony export version */ +/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544); +// Includes only the "core" of graphlib + + + +const version = '2.1.9-pre'; + + + + +/***/ }), + +/***/ 63001: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _SetCache) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules +var _MapCache = __webpack_require__(37834); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/* harmony default export */ const _setCacheAdd = (setCacheAdd); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/* harmony default export */ const _setCacheHas = (setCacheHas); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js + + + + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new _MapCache/* default */.Z; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; +SetCache.prototype.has = _setCacheHas; + +/* harmony default export */ const _SetCache = (SetCache); + + +/***/ }), + +/***/ 76579: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach); + + +/***/ }), + +/***/ 68774: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter); + + +/***/ }), + +/***/ 74073: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap); + + +/***/ }), + +/***/ 58694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush); + + +/***/ }), + +/***/ 48451: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseClone) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js +var _arrayEach = __webpack_require__(76579); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js +var _copyObject = __webpack_require__(31899); +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js + + + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssign = (baseAssign); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules +var keysIn = __webpack_require__(32957); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js + + + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object); +} + +/* harmony default export */ const _baseAssignIn = (baseAssignIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js +var _cloneBuffer = __webpack_require__(91050); +// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js +var _copyArray = __webpack_require__(87215); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js +var _getSymbols = __webpack_require__(95695); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js + + + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object); +} + +/* harmony default export */ const _copySymbols = (copySymbols); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js +var _getPrototype = __webpack_require__(12513); +// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js +var stubArray = __webpack_require__(60532); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js + + + + + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) { + var result = []; + while (object) { + (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object)); + object = (0,_getPrototype/* default */.Z)(object); + } + return result; +}; + +/* harmony default export */ const _getSymbolsIn = (getSymbolsIn); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js + + + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object); +} + +/* harmony default export */ const _copySymbolsIn = (copySymbolsIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js +var _baseGetAllKeys = __webpack_require__(63327); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js + + + + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn); +} + +/* harmony default export */ const _getAllKeysIn = (getAllKeysIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +/* harmony default export */ const _initCloneArray = (initCloneArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js +var _cloneArrayBuffer = __webpack_require__(41884); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js + + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +/* harmony default export */ const _cloneDataView = (cloneDataView); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +/* harmony default export */ const _cloneRegExp = (cloneRegExp); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js + + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +/* harmony default export */ const _cloneSymbol = (cloneSymbol); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js +var _cloneTypedArray = __webpack_require__(12701); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js + + + + + + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return (0,_cloneArrayBuffer/* default */.Z)(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return _cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return (0,_cloneTypedArray/* default */.Z)(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return _cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return _cloneSymbol(object); + } +} + +/* harmony default export */ const _initCloneByTag = (initCloneByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules +var _initCloneObject = __webpack_require__(73658); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js + + + +/** `Object#toString` result references. */ +var _baseIsMap_mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag; +} + +/* harmony default export */ const _baseIsMap = (baseIsMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js +var _baseUnary = __webpack_require__(21162); +// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js +var _nodeUtil = __webpack_require__(98351); +;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js + + + + +/* Node.js helper references. */ +var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap; + +/* harmony default export */ const lodash_es_isMap = (isMap); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js + + + +/** `Object#toString` result references. */ +var _baseIsSet_setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag; +} + +/* harmony default export */ const _baseIsSet = (baseIsSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js + + + + +/* Node.js helper references. */ +var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default */.Z.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet; + +/* harmony default export */ const lodash_es_isSet = (isSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js + + + + + + + + + + + + + + + + + + + + + + + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + _baseClone_boolTag = '[object Boolean]', + _baseClone_dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + _baseClone_mapTag = '[object Map]', + _baseClone_numberTag = '[object Number]', + objectTag = '[object Object]', + _baseClone_regexpTag = '[object RegExp]', + _baseClone_setTag = '[object Set]', + _baseClone_stringTag = '[object String]', + _baseClone_symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var _baseClone_arrayBufferTag = '[object ArrayBuffer]', + _baseClone_dataViewTag = '[object DataView]', + _baseClone_float32Tag = '[object Float32Array]', + _baseClone_float64Tag = '[object Float64Array]', + _baseClone_int8Tag = '[object Int8Array]', + _baseClone_int16Tag = '[object Int16Array]', + _baseClone_int32Tag = '[object Int32Array]', + _baseClone_uint8Tag = '[object Uint8Array]', + _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]', + _baseClone_uint16Tag = '[object Uint16Array]', + _baseClone_uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] = +cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] = +cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] = +cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] = +cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] = +cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] = +cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] = +cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] = +cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] = +cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!(0,isObject/* default */.Z)(value)) { + return value; + } + var isArr = (0,isArray/* default */.Z)(value); + if (isArr) { + result = _initCloneArray(value); + if (!isDeep) { + return (0,_copyArray/* default */.Z)(value, result); + } + } else { + var tag = (0,_getTag/* default */.Z)(value), + isFunc = tag == funcTag || tag == genTag; + + if ((0,isBuffer/* default */.Z)(value)) { + return (0,_cloneBuffer/* default */.Z)(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value); + if (!isDeep) { + return isFlat + ? _copySymbolsIn(value, _baseAssignIn(result, value)) + : _copySymbols(value, _baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = _initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new _Stack/* default */.Z); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (lodash_es_isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (lodash_es_isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z) + : (isFlat ? keysIn/* default */.Z : keys/* default */.Z); + + var props = isArr ? undefined : keysFunc(value); + (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +/* harmony default export */ const _baseClone = (baseClone); + + +/***/ }), + +/***/ 49811: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseEach) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js +var _baseForOwn = __webpack_require__(2693); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js +var isArrayLike = __webpack_require__(50585); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js + + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!(0,isArrayLike/* default */.Z)(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/* harmony default export */ const _createBaseEach = (createBaseEach); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js + + + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = _createBaseEach(_baseForOwn/* default */.Z); + +/* harmony default export */ const _baseEach = (baseEach); + + +/***/ }), + +/***/ 21692: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex); + + +/***/ }), + +/***/ 10626: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseFlatten) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js +var _arrayPush = __webpack_require__(58694); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules +var isArguments = __webpack_require__(29169); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js + + + + +/** Built-in value references. */ +var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default */.Z.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/* harmony default export */ const _isFlattenable = (isFlattenable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js + + + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = _isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + (0,_arrayPush/* default */.Z)(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/* harmony default export */ const _baseFlatten = (baseFlatten); + + +/***/ }), + +/***/ 2693: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn); + + +/***/ }), + +/***/ 13317: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet); + + +/***/ }), + +/***/ 63327: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys); + + +/***/ }), + +/***/ 74765: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _baseIteratee) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules +var _Stack = __webpack_require__(31667); +// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules +var _SetCache = __webpack_require__(63001); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/* harmony default export */ const _arraySome = (arraySome); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js +var _cacheHas = __webpack_require__(59548); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js + + + + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!_arraySome(other, function(othValue, othIndex) { + if (!(0,_cacheHas/* default */.Z)(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalArrays = (equalArrays); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js +var _Uint8Array = __webpack_require__(84073); +// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js +var eq = __webpack_require__(79651); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/* harmony default export */ const _mapToArray = (mapToArray); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js +var _setToArray = __webpack_require__(6545); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _equalByTag_COMPARE_PARTIAL_FLAG = 1, + _equalByTag_COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return (0,eq/* default */.Z)(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = _mapToArray; + + case setTag: + var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG; + convert || (convert = _setToArray/* default */.Z); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/* harmony default export */ const _equalByTag = (equalByTag); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js +var _getAllKeys = __webpack_require__(1808); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js + + +/** Used to compose bitmasks for value comparisons. */ +var _equalObjects_COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG, + objProps = (0,_getAllKeys/* default */.Z)(object), + objLength = objProps.length, + othProps = (0,_getAllKeys/* default */.Z)(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/* harmony default export */ const _equalObjects = (equalObjects); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules +var _getTag = __webpack_require__(83970); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules +var isBuffer = __webpack_require__(77008); +// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules +var isTypedArray = __webpack_require__(18843); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js + + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var _baseIsEqualDeep_objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = (0,isArray/* default */.Z)(object), + othIsArr = (0,isArray/* default */.Z)(other), + objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object), + othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && (0,isBuffer/* default */.Z)(object)) { + if (!(0,isBuffer/* default */.Z)(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new _Stack/* default */.Z); + return (objIsArr || (0,isTypedArray/* default */.Z)(object)) + ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new _Stack/* default */.Z); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new _Stack/* default */.Z); + return _equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js +var isObjectLike = __webpack_require__(18533); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js + + + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) { + return value !== value && other !== other; + } + return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/* harmony default export */ const _baseIsEqual = (baseIsEqual); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1, + _baseIsMatch_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new _Stack/* default */.Z; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/* harmony default export */ const _baseIsMatch = (baseIsMatch); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js + + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !(0,isObject/* default */.Z)(value); +} + +/* harmony default export */ const _isStrictComparable = (isStrictComparable); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js + + + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = (0,keys/* default */.Z)(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, _isStrictComparable(value)]; + } + return result; +} + +/* harmony default export */ const _getMatchData = (getMatchData); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js + + + + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = _getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return _matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || _baseIsMatch(object, source, matchData); + }; +} + +/* harmony default export */ const _baseMatches = (baseMatches); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js + + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path); + return result === undefined ? defaultValue : result; +} + +/* harmony default export */ const lodash_es_get = (get); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js + + + + + + + + +/** Used to compose bitmasks for value comparisons. */ +var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1, + _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) { + return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue); + } + return function(object) { + var objValue = lodash_es_get(object, path); + return (objValue === undefined && objValue === srcValue) + ? (0,hasIn/* default */.Z)(object, path) + : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG); + }; +} + +/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty); + +// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js +var identity = __webpack_require__(69203); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js +var _baseProperty = __webpack_require__(54193); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js + + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return (0,_baseGet/* default */.Z)(object, path); + }; +} + +/* harmony default export */ const _basePropertyDeep = (basePropertyDeep); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js + + + + + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path); +} + +/* harmony default export */ const lodash_es_property = (property); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js + + + + + + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity/* default */.Z; + } + if (typeof value == 'object') { + return (0,isArray/* default */.Z)(value) + ? _baseMatchesProperty(value[0], value[1]) + : _baseMatches(value); + } + return lodash_es_property(value); +} + +/* harmony default export */ const _baseIteratee = (baseIteratee); + + +/***/ }), + +/***/ 21018: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : []; + + (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap); + + +/***/ }), + +/***/ 54193: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty); + + +/***/ }), + +/***/ 59548: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas); + + +/***/ }), + +/***/ 68882: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203); + + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction); + + +/***/ }), + +/***/ 22823: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ _castPath) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js +var _isKey = __webpack_require__(99365); +// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js +var memoize = __webpack_require__(42454); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js + + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = (0,memoize/* default */.Z)(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +/* harmony default export */ const _memoizeCapped = (memoizeCapped); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js + + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = _memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/* harmony default export */ const _stringToPath = (stringToPath); + +// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules +var lodash_es_toString = __webpack_require__(50751); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js + + + + + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if ((0,isArray/* default */.Z)(value)) { + return value; + } + return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value)); +} + +/* harmony default export */ const _castPath = (castPath); + + +/***/ }), + +/***/ 1808: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327); +/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695); +/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179); + + + + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys); + + +/***/ }), + +/***/ 95695: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774); +/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532); + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols); + + +/***/ }), + +/***/ 16174: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823); +/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771); +/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009); +/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656); +/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281); + + + + + + + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) && + ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath); + + +/***/ }), + +/***/ 99365: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714); + + + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey); + + +/***/ }), + +/***/ 6545: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray); + + +/***/ }), + +/***/ 62281: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714); + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey); + + +/***/ }), + +/***/ 3688: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581); +/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651); +/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439); +/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957); + + + + + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults); + + +/***/ }), + +/***/ 13445: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_filter) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js +var _arrayFilter = __webpack_require__(68774); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js + + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + (0,_baseEach/* default */.Z)(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +/* harmony default export */ const _baseFilter = (baseFilter); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js + + + + + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ +function filter(collection, predicate) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter; + return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3)); +} + +/* harmony default export */ const lodash_es_filter = (filter); + + +/***/ }), + +/***/ 27961: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626); + + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten); + + +/***/ }), + +/***/ 70870: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579); +/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811); +/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach); + + +/***/ }), + +/***/ 17452: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_has) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var _baseHas_hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && _baseHas_hasOwnProperty.call(object, key); +} + +/* harmony default export */ const _baseHas = (baseHas); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js + + + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas); +} + +/* harmony default export */ const lodash_es_has = (has); + + +/***/ }), + +/***/ 75487: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_hasIn) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/* harmony default export */ const _baseHasIn = (baseHasIn); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js +var _hasPath = __webpack_require__(16174); +;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js + + + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn); +} + +/* harmony default export */ const lodash_es_hasIn = (hasIn); + + +/***/ }), + +/***/ 72714: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589); +/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533); + + + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol); + + +/***/ }), + +/***/ 49360: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined); + + +/***/ }), + +/***/ 17179: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668); +/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473); +/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585); + + + + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys); + + +/***/ }), + +/***/ 43836: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073); +/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765); +/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018); +/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771); + + + + + +/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ +function map(collection, iteratee) { + var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z; + return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3)); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); + + +/***/ }), + +/***/ 61666: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_pick) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js +var _baseGet = __webpack_require__(13317); +// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js +var _assignValue = __webpack_require__(72954); +// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules +var _castPath = __webpack_require__(22823); +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js +var _isIndex = __webpack_require__(56009); +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js +var _toKey = __webpack_require__(62281); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js + + + + + + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!(0,isObject/* default */.Z)(object)) { + return object; + } + path = (0,_castPath/* default */.Z)(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = (0,_toKey/* default */.Z)(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = (0,isObject/* default */.Z)(objValue) + ? objValue + : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {}); + } + } + (0,_assignValue/* default */.Z)(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/* harmony default export */ const _baseSet = (baseSet); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js + + + + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = (0,_baseGet/* default */.Z)(object, path); + + if (predicate(value, path)) { + _baseSet(result, (0,_castPath/* default */.Z)(path, object), value); + } + } + return result; +} + +/* harmony default export */ const _basePickBy = (basePickBy); + +// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules +var hasIn = __webpack_require__(75487); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js + + + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return _basePickBy(object, paths, function(value, path) { + return (0,hasIn/* default */.Z)(object, path); + }); +} + +/* harmony default export */ const _basePick = (basePick); + +// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js +var flatten = __webpack_require__(27961); +// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules +var _overRest = __webpack_require__(81211); +// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules +var _setToString = __webpack_require__(27227); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js + + + + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + ''); +} + +/* harmony default export */ const _flatRest = (flatRest); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js + + + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = _flatRest(function(object, paths) { + return object == null ? {} : _basePick(object, paths); +}); + +/* harmony default export */ const lodash_es_pick = (pick); + + +/***/ }), + +/***/ 74379: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_range) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/* harmony default export */ const _baseRange = (baseRange); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js +var _isIterateeCall = __webpack_require__(50439); +// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules +var toFinite = __webpack_require__(94099); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js + + + + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = (0,toFinite/* default */.Z)(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = (0,toFinite/* default */.Z)(end); + } + step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step); + return _baseRange(start, end, step, fromRight); + }; +} + +/* harmony default export */ const _createRange = (createRange); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js + + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = _createRange(); + +/* harmony default export */ const lodash_es_range = (range); + + +/***/ }), + +/***/ 92344: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_reduce) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +/* harmony default export */ const _arrayReduce = (arrayReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules +var _baseEach = __webpack_require__(49811); +// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules +var _baseIteratee = __webpack_require__(74765); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +/* harmony default export */ const _baseReduce = (baseReduce); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js + + + + + + +/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ +function reduce(collection, iteratee, accumulator) { + var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce, + initAccum = arguments.length < 3; + + return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z); +} + +/* harmony default export */ const lodash_es_reduce = (reduce); + + +/***/ }), + +/***/ 60532: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray); + + +/***/ }), + +/***/ 94099: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toFinite) +}); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js + + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/* harmony default export */ const _baseTrim = (baseTrim); + +// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js +var isObject = __webpack_require__(77226); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js + + + + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if ((0,isSymbol/* default */.Z)(value)) { + return NAN; + } + if ((0,isObject/* default */.Z)(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = (0,isObject/* default */.Z)(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = _baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/* harmony default export */ const lodash_es_toNumber = (toNumber); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = lodash_es_toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/* harmony default export */ const lodash_es_toFinite = (toFinite); + + +/***/ }), + +/***/ 50751: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_toString) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js +var _Symbol = __webpack_require__(17685); +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js +var isArray = __webpack_require__(27771); +// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js +var isSymbol = __webpack_require__(72714); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js + + + + + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = _Symbol/* default */.Z ? _Symbol/* default */.Z.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if ((0,isArray/* default */.Z)(value)) { + // Recursively convert values (susceptible to call stack limits). + return (0,_arrayMap/* default */.Z)(value, baseToString) + ''; + } + if ((0,isSymbol/* default */.Z)(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/* harmony default export */ const _baseToString = (baseToString); + +;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js + + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString_toString(value) { + return value == null ? '' : _baseToString(value); +} + +/* harmony default export */ const lodash_es_toString = (toString_toString); + + +/***/ }), + +/***/ 66749: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751); + + +/** Used to generate unique IDs. */ +var idCounter = 0; + +/** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ +function uniqueId(prefix) { + var id = ++idCounter; + return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id; +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId); + + +/***/ }), + +/***/ 34148: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + Z: () => (/* binding */ lodash_es_values) +}); + +// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js +var _arrayMap = __webpack_require__(74073); +;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js + + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return (0,_arrayMap/* default */.Z)(props, function(key) { + return object[key]; + }); +} + +/* harmony default export */ const _baseValues = (baseValues); + +// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js +var keys = __webpack_require__(17179); +;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js + + + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object)); +} + +/* harmony default export */ const lodash_es_values = (values); + + +/***/ }), + +/***/ 52995: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ diagram: () => (/* binding */ diagram) +/* harmony export */ }); +/* harmony import */ var _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28758); +/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64218); +/* harmony import */ var dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41644); +/* harmony import */ var dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45625); +/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27484); +/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17967); +/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(22424); + + + + + + + + + + + + + +var parser = function() { + var o = function(k, v, o2, l) { + for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) + ; + return o2; + }, $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [5, 6, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63], $V5 = [1, 18], $V6 = [2, 7], $V7 = [1, 22], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 20], $Ve = [1, 28], $Vf = [1, 29], $Vg = [62, 63], $Vh = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 51, 53, 62, 63], $Vi = [1, 47], $Vj = [1, 48], $Vk = [1, 49], $Vl = [1, 50], $Vm = [1, 51], $Vn = [1, 52], $Vo = [1, 53], $Vp = [53, 54], $Vq = [1, 64], $Vr = [1, 60], $Vs = [1, 61], $Vt = [1, 62], $Vu = [1, 63], $Vv = [1, 65], $Vw = [1, 69], $Vx = [1, 70], $Vy = [1, 67], $Vz = [1, 68], $VA = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63]; + var parser2 = { + trace: function trace() { + }, + yy: {}, + symbols_: { "error": 2, "start": 3, "directive": 4, "NEWLINE": 5, "RD": 6, "diagram": 7, "EOF": 8, "acc_title": 9, "acc_title_value": 10, "acc_descr": 11, "acc_descr_value": 12, "acc_descr_multiline_value": 13, "requirementDef": 14, "elementDef": 15, "relationshipDef": 16, "requirementType": 17, "requirementName": 18, "STRUCT_START": 19, "requirementBody": 20, "ID": 21, "COLONSEP": 22, "id": 23, "TEXT": 24, "text": 25, "RISK": 26, "riskLevel": 27, "VERIFYMTHD": 28, "verifyType": 29, "STRUCT_STOP": 30, "REQUIREMENT": 31, "FUNCTIONAL_REQUIREMENT": 32, "INTERFACE_REQUIREMENT": 33, "PERFORMANCE_REQUIREMENT": 34, "PHYSICAL_REQUIREMENT": 35, "DESIGN_CONSTRAINT": 36, "LOW_RISK": 37, "MED_RISK": 38, "HIGH_RISK": 39, "VERIFY_ANALYSIS": 40, "VERIFY_DEMONSTRATION": 41, "VERIFY_INSPECTION": 42, "VERIFY_TEST": 43, "ELEMENT": 44, "elementName": 45, "elementBody": 46, "TYPE": 47, "type": 48, "DOCREF": 49, "ref": 50, "END_ARROW_L": 51, "relationship": 52, "LINE": 53, "END_ARROW_R": 54, "CONTAINS": 55, "COPIES": 56, "DERIVES": 57, "SATISFIES": 58, "VERIFIES": 59, "REFINES": 60, "TRACES": 61, "unqString": 62, "qString": 63, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "NEWLINE", 6: "RD", 8: "EOF", 9: "acc_title", 10: "acc_title_value", 11: "acc_descr", 12: "acc_descr_value", 13: "acc_descr_multiline_value", 19: "STRUCT_START", 21: "ID", 22: "COLONSEP", 24: "TEXT", 26: "RISK", 28: "VERIFYMTHD", 30: "STRUCT_STOP", 31: "REQUIREMENT", 32: "FUNCTIONAL_REQUIREMENT", 33: "INTERFACE_REQUIREMENT", 34: "PERFORMANCE_REQUIREMENT", 35: "PHYSICAL_REQUIREMENT", 36: "DESIGN_CONSTRAINT", 37: "LOW_RISK", 38: "MED_RISK", 39: "HIGH_RISK", 40: "VERIFY_ANALYSIS", 41: "VERIFY_DEMONSTRATION", 42: "VERIFY_INSPECTION", 43: "VERIFY_TEST", 44: "ELEMENT", 47: "TYPE", 49: "DOCREF", 51: "END_ARROW_L", 53: "LINE", 54: "END_ARROW_R", 55: "CONTAINS", 56: "COPIES", 57: "DERIVES", 58: "SATISFIES", 59: "VERIFIES", 60: "REFINES", 61: "TRACES", 62: "unqString", 63: "qString" }, + productions_: [0, [3, 3], [3, 2], [3, 4], [4, 2], [4, 2], [4, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [14, 5], [20, 5], [20, 5], [20, 5], [20, 5], [20, 2], [20, 1], [17, 1], [17, 1], [17, 1], [17, 1], [17, 1], [17, 1], [27, 1], [27, 1], [27, 1], [29, 1], [29, 1], [29, 1], [29, 1], [15, 5], [46, 5], [46, 5], [46, 2], [46, 1], [16, 5], [16, 5], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [18, 1], [18, 1], [23, 1], [23, 1], [25, 1], [25, 1], [45, 1], [45, 1], [48, 1], [48, 1], [50, 1], [50, 1]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + var $0 = $$.length - 1; + switch (yystate) { + case 4: + this.$ = $$[$0].trim(); + yy.setAccTitle(this.$); + break; + case 5: + case 6: + this.$ = $$[$0].trim(); + yy.setAccDescription(this.$); + break; + case 7: + this.$ = []; + break; + case 13: + yy.addRequirement($$[$0 - 3], $$[$0 - 4]); + break; + case 14: + yy.setNewReqId($$[$0 - 2]); + break; + case 15: + yy.setNewReqText($$[$0 - 2]); + break; + case 16: + yy.setNewReqRisk($$[$0 - 2]); + break; + case 17: + yy.setNewReqVerifyMethod($$[$0 - 2]); + break; + case 20: + this.$ = yy.RequirementType.REQUIREMENT; + break; + case 21: + this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT; + break; + case 22: + this.$ = yy.RequirementType.INTERFACE_REQUIREMENT; + break; + case 23: + this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT; + break; + case 24: + this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT; + break; + case 25: + this.$ = yy.RequirementType.DESIGN_CONSTRAINT; + break; + case 26: + this.$ = yy.RiskLevel.LOW_RISK; + break; + case 27: + this.$ = yy.RiskLevel.MED_RISK; + break; + case 28: + this.$ = yy.RiskLevel.HIGH_RISK; + break; + case 29: + this.$ = yy.VerifyType.VERIFY_ANALYSIS; + break; + case 30: + this.$ = yy.VerifyType.VERIFY_DEMONSTRATION; + break; + case 31: + this.$ = yy.VerifyType.VERIFY_INSPECTION; + break; + case 32: + this.$ = yy.VerifyType.VERIFY_TEST; + break; + case 33: + yy.addElement($$[$0 - 3]); + break; + case 34: + yy.setNewElementType($$[$0 - 2]); + break; + case 35: + yy.setNewElementDocRef($$[$0 - 2]); + break; + case 38: + yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]); + break; + case 39: + yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]); + break; + case 40: + this.$ = yy.Relationships.CONTAINS; + break; + case 41: + this.$ = yy.Relationships.COPIES; + break; + case 42: + this.$ = yy.Relationships.DERIVES; + break; + case 43: + this.$ = yy.Relationships.SATISFIES; + break; + case 44: + this.$ = yy.Relationships.VERIFIES; + break; + case 45: + this.$ = yy.Relationships.REFINES; + break; + case 46: + this.$ = yy.Relationships.TRACES; + break; + } + }, + table: [{ 3: 1, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [3] }, { 3: 8, 4: 2, 5: [1, 7], 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 5: [1, 9] }, { 10: [1, 10] }, { 12: [1, 11] }, o($V4, [2, 6]), { 3: 12, 4: 2, 6: $V0, 9: $V1, 11: $V2, 13: $V3 }, { 1: [2, 2] }, { 4: 17, 5: $V5, 7: 13, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, o($V4, [2, 4]), o($V4, [2, 5]), { 1: [2, 1] }, { 8: [1, 30] }, { 4: 17, 5: $V5, 7: 31, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 32, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 33, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 34, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 35, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 18: 36, 62: [1, 37], 63: [1, 38] }, { 45: 39, 62: [1, 40], 63: [1, 41] }, { 51: [1, 42], 53: [1, 43] }, o($Vg, [2, 20]), o($Vg, [2, 21]), o($Vg, [2, 22]), o($Vg, [2, 23]), o($Vg, [2, 24]), o($Vg, [2, 25]), o($Vh, [2, 49]), o($Vh, [2, 50]), { 1: [2, 3] }, { 8: [2, 8] }, { 8: [2, 9] }, { 8: [2, 10] }, { 8: [2, 11] }, { 8: [2, 12] }, { 19: [1, 44] }, { 19: [2, 47] }, { 19: [2, 48] }, { 19: [1, 45] }, { 19: [2, 53] }, { 19: [2, 54] }, { 52: 46, 55: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 52: 54, 55: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 5: [1, 55] }, { 5: [1, 56] }, { 53: [1, 57] }, o($Vp, [2, 40]), o($Vp, [2, 41]), o($Vp, [2, 42]), o($Vp, [2, 43]), o($Vp, [2, 44]), o($Vp, [2, 45]), o($Vp, [2, 46]), { 54: [1, 58] }, { 5: $Vq, 20: 59, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 66, 47: $Vy, 49: $Vz }, { 23: 71, 62: $Ve, 63: $Vf }, { 23: 72, 62: $Ve, 63: $Vf }, o($VA, [2, 13]), { 22: [1, 73] }, { 22: [1, 74] }, { 22: [1, 75] }, { 22: [1, 76] }, { 5: $Vq, 20: 77, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, o($VA, [2, 19]), o($VA, [2, 33]), { 22: [1, 78] }, { 22: [1, 79] }, { 5: $Vw, 30: $Vx, 46: 80, 47: $Vy, 49: $Vz }, o($VA, [2, 37]), o($VA, [2, 38]), o($VA, [2, 39]), { 23: 81, 62: $Ve, 63: $Vf }, { 25: 82, 62: [1, 83], 63: [1, 84] }, { 27: 85, 37: [1, 86], 38: [1, 87], 39: [1, 88] }, { 29: 89, 40: [1, 90], 41: [1, 91], 42: [1, 92], 43: [1, 93] }, o($VA, [2, 18]), { 48: 94, 62: [1, 95], 63: [1, 96] }, { 50: 97, 62: [1, 98], 63: [1, 99] }, o($VA, [2, 36]), { 5: [1, 100] }, { 5: [1, 101] }, { 5: [2, 51] }, { 5: [2, 52] }, { 5: [1, 102] }, { 5: [2, 26] }, { 5: [2, 27] }, { 5: [2, 28] }, { 5: [1, 103] }, { 5: [2, 29] }, { 5: [2, 30] }, { 5: [2, 31] }, { 5: [2, 32] }, { 5: [1, 104] }, { 5: [2, 55] }, { 5: [2, 56] }, { 5: [1, 105] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: $Vq, 20: 106, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 107, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 108, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 109, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 110, 47: $Vy, 49: $Vz }, { 5: $Vw, 30: $Vx, 46: 111, 47: $Vy, 49: $Vz }, o($VA, [2, 14]), o($VA, [2, 15]), o($VA, [2, 16]), o($VA, [2, 17]), o($VA, [2, 34]), o($VA, [2, 35])], + defaultActions: { 8: [2, 2], 12: [2, 1], 30: [2, 3], 31: [2, 8], 32: [2, 9], 33: [2, 10], 34: [2, 11], 35: [2, 12], 37: [2, 47], 38: [2, 48], 40: [2, 53], 41: [2, 54], 83: [2, 51], 84: [2, 52], 86: [2, 26], 87: [2, 27], 88: [2, 28], 90: [2, 29], 91: [2, 30], 92: [2, 31], 93: [2, 32], 95: [2, 55], 96: [2, 56], 98: [2, 57], 99: [2, 58] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer2 = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer2.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer2; + sharedState.yy.parser = this; + if (typeof lexer2.yylloc == "undefined") { + lexer2.yylloc = {}; + } + var yyloc = lexer2.yylloc; + lstack.push(yyloc); + var ranges = lexer2.options && lexer2.options.ranges; + if (typeof sharedState.yy.parseError === "function") { + this.parseError = sharedState.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + function lex() { + var token; + token = tstack.pop() || lexer2.lex() || EOF; + if (typeof token !== "number") { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } + token = self.symbols_[token] || token; + } + return token; + } + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer2.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer2.match, + token: this.terminals_[symbol] || symbol, + line: lexer2.yylineno, + loc: yyloc, + expected + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer2.yytext); + lstack.push(lexer2.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer2.yyleng; + yytext = lexer2.yytext; + yylineno = lexer2.yylineno; + yyloc = lexer2.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + if (ranges) { + yyval._$.range = [ + lstack[lstack.length - (len || 1)].range[0], + lstack[lstack.length - 1].range[1] + ]; + } + r = this.performAction.apply(yyval, [ + yytext, + yyleng, + yylineno, + sharedState.yy, + action[1], + vstack, + lstack + ].concat(args)); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + var lexer = function() { + var lexer2 = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function(input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ""; + this.conditionStack = ["INITIAL"]; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function() { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function() { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + return this; + }, + // retain first n characters of the match + less: function(n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, ""); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, ""); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function(match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + for (var k in backup) { + this[k] = backup[k]; + } + return false; + } + return false; + }, + // return next match in input + next: function() { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ""; + this.match = ""; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; + } else { + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: { "case-insensitive": true }, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + return "title"; + case 1: + this.begin("acc_title"); + return 9; + case 2: + this.popState(); + return "acc_title_value"; + case 3: + this.begin("acc_descr"); + return 11; + case 4: + this.popState(); + return "acc_descr_value"; + case 5: + this.begin("acc_descr_multiline"); + break; + case 6: + this.popState(); + break; + case 7: + return "acc_descr_multiline_value"; + case 8: + return 5; + case 9: + break; + case 10: + break; + case 11: + break; + case 12: + return 8; + case 13: + return 6; + case 14: + return 19; + case 15: + return 30; + case 16: + return 22; + case 17: + return 21; + case 18: + return 24; + case 19: + return 26; + case 20: + return 28; + case 21: + return 31; + case 22: + return 32; + case 23: + return 33; + case 24: + return 34; + case 25: + return 35; + case 26: + return 36; + case 27: + return 37; + case 28: + return 38; + case 29: + return 39; + case 30: + return 40; + case 31: + return 41; + case 32: + return 42; + case 33: + return 43; + case 34: + return 44; + case 35: + return 55; + case 36: + return 56; + case 37: + return 57; + case 38: + return 58; + case 39: + return 59; + case 40: + return 60; + case 41: + return 61; + case 42: + return 47; + case 43: + return 49; + case 44: + return 51; + case 45: + return 54; + case 46: + return 53; + case 47: + this.begin("string"); + break; + case 48: + this.popState(); + break; + case 49: + return "qString"; + case 50: + yy_.yytext = yy_.yytext.trim(); + return 62; + } + }, + rules: [/^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/i, /^(?::)/i, /^(?:id\b)/i, /^(?:text\b)/i, /^(?:risk\b)/i, /^(?:verifyMethod\b)/i, /^(?:requirement\b)/i, /^(?:functionalRequirement\b)/i, /^(?:interfaceRequirement\b)/i, /^(?:performanceRequirement\b)/i, /^(?:physicalRequirement\b)/i, /^(?:designConstraint\b)/i, /^(?:low\b)/i, /^(?:medium\b)/i, /^(?:high\b)/i, /^(?:analysis\b)/i, /^(?:demonstration\b)/i, /^(?:inspection\b)/i, /^(?:test\b)/i, /^(?:element\b)/i, /^(?:contains\b)/i, /^(?:copies\b)/i, /^(?:derives\b)/i, /^(?:satisfies\b)/i, /^(?:verifies\b)/i, /^(?:refines\b)/i, /^(?:traces\b)/i, /^(?:type\b)/i, /^(?:docref\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^\r\n\{\<\>\-\=]*)/i], + conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "unqString": { "rules": [], "inclusive": false }, "token": { "rules": [], "inclusive": false }, "string": { "rules": [48, 49], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50], "inclusive": true } } + }; + return lexer2; + }(); + parser2.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser2; + parser2.Parser = Parser; + return new Parser(); +}(); +parser.parser = parser; +const parser$1 = parser; +let relations = []; +let latestRequirement = {}; +let requirements = {}; +let latestElement = {}; +let elements = {}; +const RequirementType = { + REQUIREMENT: "Requirement", + FUNCTIONAL_REQUIREMENT: "Functional Requirement", + INTERFACE_REQUIREMENT: "Interface Requirement", + PERFORMANCE_REQUIREMENT: "Performance Requirement", + PHYSICAL_REQUIREMENT: "Physical Requirement", + DESIGN_CONSTRAINT: "Design Constraint" +}; +const RiskLevel = { + LOW_RISK: "Low", + MED_RISK: "Medium", + HIGH_RISK: "High" +}; +const VerifyType = { + VERIFY_ANALYSIS: "Analysis", + VERIFY_DEMONSTRATION: "Demonstration", + VERIFY_INSPECTION: "Inspection", + VERIFY_TEST: "Test" +}; +const Relationships = { + CONTAINS: "contains", + COPIES: "copies", + DERIVES: "derives", + SATISFIES: "satisfies", + VERIFIES: "verifies", + REFINES: "refines", + TRACES: "traces" +}; +const addRequirement = (name, type) => { + if (requirements[name] === void 0) { + requirements[name] = { + name, + type, + id: latestRequirement.id, + text: latestRequirement.text, + risk: latestRequirement.risk, + verifyMethod: latestRequirement.verifyMethod + }; + } + latestRequirement = {}; + return requirements[name]; +}; +const getRequirements = () => requirements; +const setNewReqId = (id) => { + if (latestRequirement !== void 0) { + latestRequirement.id = id; + } +}; +const setNewReqText = (text) => { + if (latestRequirement !== void 0) { + latestRequirement.text = text; + } +}; +const setNewReqRisk = (risk) => { + if (latestRequirement !== void 0) { + latestRequirement.risk = risk; + } +}; +const setNewReqVerifyMethod = (verifyMethod) => { + if (latestRequirement !== void 0) { + latestRequirement.verifyMethod = verifyMethod; + } +}; +const addElement = (name) => { + if (elements[name] === void 0) { + elements[name] = { + name, + type: latestElement.type, + docRef: latestElement.docRef + }; + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", name); + } + latestElement = {}; + return elements[name]; +}; +const getElements = () => elements; +const setNewElementType = (type) => { + if (latestElement !== void 0) { + latestElement.type = type; + } +}; +const setNewElementDocRef = (docRef) => { + if (latestElement !== void 0) { + latestElement.docRef = docRef; + } +}; +const addRelationship = (type, src, dst) => { + relations.push({ + type, + src, + dst + }); +}; +const getRelationships = () => relations; +const clear = () => { + relations = []; + latestRequirement = {}; + requirements = {}; + latestElement = {}; + elements = {}; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.t)(); +}; +const db = { + RequirementType, + RiskLevel, + VerifyType, + Relationships, + getConfig: () => (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().req, + addRequirement, + getRequirements, + setNewReqId, + setNewReqText, + setNewReqRisk, + setNewReqVerifyMethod, + setAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.s, + getAccTitle: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.g, + setAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.b, + getAccDescription: _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.a, + addElement, + getElements, + setNewElementType, + setNewElementDocRef, + addRelationship, + getRelationships, + clear +}; +const getStyles = (options) => ` + + marker { + fill: ${options.relationColor}; + stroke: ${options.relationColor}; + } + + marker.cross { + stroke: ${options.lineColor}; + } + + svg { + font-family: ${options.fontFamily}; + font-size: ${options.fontSize}; + } + + .reqBox { + fill: ${options.requirementBackground}; + fill-opacity: 1.0; + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${options.requirementTextColor}; + } + .reqLabelBox { + fill: ${options.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${options.requirementBorderColor}; + stroke-width: ${options.requirementBorderSize}; + } + .relationshipLine { + stroke: ${options.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${options.relationLabelColor}; + } + +`; +const styles = getStyles; +const ReqMarkers = { + CONTAINS: "contains", + ARROW: "arrow" +}; +const insertLineEndings = (parentNode, conf2) => { + let containsNode = parentNode.append("defs").append("marker").attr("id", ReqMarkers.CONTAINS + "_line_ending").attr("refX", 0).attr("refY", conf2.line_height / 2).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("g"); + containsNode.append("circle").attr("cx", conf2.line_height / 2).attr("cy", conf2.line_height / 2).attr("r", conf2.line_height / 2).attr("fill", "none"); + containsNode.append("line").attr("x1", 0).attr("x2", conf2.line_height).attr("y1", conf2.line_height / 2).attr("y2", conf2.line_height / 2).attr("stroke-width", 1); + containsNode.append("line").attr("y1", 0).attr("y2", conf2.line_height).attr("x1", conf2.line_height / 2).attr("x2", conf2.line_height / 2).attr("stroke-width", 1); + parentNode.append("defs").append("marker").attr("id", ReqMarkers.ARROW + "_line_ending").attr("refX", conf2.line_height).attr("refY", 0.5 * conf2.line_height).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("path").attr( + "d", + `M0,0 + L${conf2.line_height},${conf2.line_height / 2} + M${conf2.line_height},${conf2.line_height / 2} + L0,${conf2.line_height}` + ).attr("stroke-width", 1); +}; +const markers = { + ReqMarkers, + insertLineEndings +}; +let conf = {}; +let relCnt = 0; +const newRectNode = (parentNode, id) => { + return parentNode.insert("rect", "#" + id).attr("class", "req reqBox").attr("x", 0).attr("y", 0).attr("width", conf.rect_min_width + "px").attr("height", conf.rect_min_height + "px"); +}; +const newTitleNode = (parentNode, id, txts) => { + let x = conf.rect_min_width / 2; + let title = parentNode.append("text").attr("class", "req reqLabel reqTitle").attr("id", id).attr("x", x).attr("y", conf.rect_padding).attr("dominant-baseline", "hanging"); + let i = 0; + txts.forEach((textStr) => { + if (i == 0) { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", 0).text(textStr); + } else { + title.append("tspan").attr("text-anchor", "middle").attr("x", conf.rect_min_width / 2).attr("dy", conf.line_height * 0.75).text(textStr); + } + i++; + }); + let yPadding = 1.5 * conf.rect_padding; + let linePadding = i * conf.line_height * 0.75; + let totalY = yPadding + linePadding; + parentNode.append("line").attr("class", "req-title-line").attr("x1", "0").attr("x2", conf.rect_min_width).attr("y1", totalY).attr("y2", totalY); + return { + titleNode: title, + y: totalY + }; +}; +const newBodyNode = (parentNode, id, txts, yStart) => { + let body = parentNode.append("text").attr("class", "req reqLabel").attr("id", id).attr("x", conf.rect_padding).attr("y", yStart).attr("dominant-baseline", "hanging"); + let currentRow = 0; + const charLimit = 30; + let wrappedTxts = []; + txts.forEach((textStr) => { + let currentTextLen = textStr.length; + while (currentTextLen > charLimit && currentRow < 3) { + let firstPart = textStr.substring(0, charLimit); + textStr = textStr.substring(charLimit, textStr.length); + currentTextLen = textStr.length; + wrappedTxts[wrappedTxts.length] = firstPart; + currentRow++; + } + if (currentRow == 3) { + let lastStr = wrappedTxts[wrappedTxts.length - 1]; + wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + "..."; + } else { + wrappedTxts[wrappedTxts.length] = textStr; + } + currentRow = 0; + }); + wrappedTxts.forEach((textStr) => { + body.append("tspan").attr("x", conf.rect_padding).attr("dy", conf.line_height).text(textStr); + }); + return body; +}; +const addEdgeLabel = (parentNode, svgPath, conf2, txt) => { + const len = svgPath.node().getTotalLength(); + const labelPoint = svgPath.node().getPointAtLength(len * 0.5); + const labelId = "rel" + relCnt; + relCnt++; + const labelNode = parentNode.append("text").attr("class", "req relationshipLabel").attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(txt); + const labelBBox = labelNode.node().getBBox(); + parentNode.insert("rect", "#" + labelId).attr("class", "req reqLabelBox").attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height).attr("fill", "white").attr("fill-opacity", "85%"); +}; +const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) { + const edge = g.edge(elementString(rel.src), elementString(rel.dst)); + const lineFunction = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .line */ .jvg)().x(function(d) { + return d.x; + }).y(function(d) { + return d.y; + }); + const svgPath = svg.insert("path", "#" + insert).attr("class", "er relationshipLine").attr("d", lineFunction(edge.points)).attr("fill", "none"); + if (rel.type == diagObj.db.Relationships.CONTAINS) { + svgPath.attr( + "marker-start", + "url(" + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + rel.type + "_line_ending)" + ); + } else { + svgPath.attr("stroke-dasharray", "10,7"); + svgPath.attr( + "marker-end", + "url(" + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.e.getUrl(conf.arrowMarkerAbsolute) + "#" + markers.ReqMarkers.ARROW + "_line_ending)" + ); + } + addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`); + return; +}; +const drawReqs = (reqs, graph, svgNode) => { + Object.keys(reqs).forEach((reqName) => { + let req = reqs[reqName]; + reqName = elementString(reqName); + _mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.l.info("Added new requirement: ", reqName); + const groupNode = svgNode.append("g").attr("id", reqName); + const textId = "req-" + reqName; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, reqName + "_title", [ + `<<${req.type}>>`, + `${req.name}` + ]); + newBodyNode( + groupNode, + reqName + "_body", + [ + `Id: ${req.id}`, + `Text: ${req.text}`, + `Risk: ${req.risk}`, + `Verification: ${req.verifyMethod}` + ], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(reqName, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id: reqName + }); + }); +}; +const drawElements = (els, graph, svgNode) => { + Object.keys(els).forEach((elName) => { + let el = els[elName]; + const id = elementString(elName); + const groupNode = svgNode.append("g").attr("id", id); + const textId = "element-" + id; + const rectNode = newRectNode(groupNode, textId); + let titleNodeInfo = newTitleNode(groupNode, textId + "_title", [`<<Element>>`, `${elName}`]); + newBodyNode( + groupNode, + textId + "_body", + [`Type: ${el.type || "Not Specified"}`, `Doc Ref: ${el.docRef || "None"}`], + titleNodeInfo.y + ); + const rectBBox = rectNode.node().getBBox(); + graph.setNode(id, { + width: rectBBox.width, + height: rectBBox.height, + shape: "rect", + id + }); + }); +}; +const addRelationships = (relationships, g) => { + relationships.forEach(function(r) { + let src = elementString(r.src); + let dst = elementString(r.dst); + g.setEdge(src, dst, { relationship: r }); + }); + return relationships; +}; +const adjustEntities = function(svgNode, graph) { + graph.nodes().forEach(function(v) { + if (v !== void 0 && graph.node(v) !== void 0) { + svgNode.select("#" + v); + svgNode.select("#" + v).attr( + "transform", + "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )" + ); + } + }); + return; +}; +const elementString = (str) => { + return str.replace(/\s/g, "").replace(/\./g, "_"); +}; +const draw = (text, id, _version, diagObj) => { + conf = (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.c)().requirement; + const securityLevel = conf.securityLevel; + let sandboxElement; + if (securityLevel === "sandbox") { + sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id); + } + const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body"); + const svg = root.select(`[id='${id}']`); + markers.insertLineEndings(svg, conf); + const g = new dagre_d3_es_src_graphlib_index_js__WEBPACK_IMPORTED_MODULE_2__/* .Graph */ .k({ + multigraph: false, + compound: false, + directed: true + }).setGraph({ + rankdir: conf.layoutDirection, + marginx: 20, + marginy: 20, + nodesep: 100, + edgesep: 100, + ranksep: 100 + }).setDefaultEdgeLabel(function() { + return {}; + }); + let requirements2 = diagObj.db.getRequirements(); + let elements2 = diagObj.db.getElements(); + let relationships = diagObj.db.getRelationships(); + drawReqs(requirements2, g, svg); + drawElements(elements2, g, svg); + addRelationships(relationships, g); + (0,dagre_d3_es_src_dagre_index_js__WEBPACK_IMPORTED_MODULE_1__/* .layout */ .bK)(g); + adjustEntities(svg, g); + relationships.forEach(function(rel) { + drawRelationshipFromLayout(svg, rel, g, id, diagObj); + }); + const padding = conf.rect_padding; + const svgBounds = svg.node().getBBox(); + const width = svgBounds.width + padding * 2; + const height = svgBounds.height + padding * 2; + (0,_mermaid_0603ccf8_js__WEBPACK_IMPORTED_MODULE_6__.i)(svg, height, width, conf.useMaxWidth); + svg.attr("viewBox", `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); +}; +const renderer = { + draw +}; +const diagram = { + parser: parser$1, + db, + renderer, + styles +}; + + + +/***/ }) + +}; +; \ No newline at end of file diff --git a/assets/js/9a118db7.62ebf45b.js b/assets/js/9a118db7.62ebf45b.js new file mode 100644 index 0000000000..5735adc146 --- /dev/null +++ b/assets/js/9a118db7.62ebf45b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9364],{61944:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>t,metadata:()=>r,toc:()=>c});var a=i(85893),s=i(11151);const t={title:"Variables",sidebar_position:6,description:"Variables guide and description"},l=void 0,r={id:"about/modelling/setup/variables",title:"Variables",description:"Variables guide and description",source:"@site/docs/about/modelling/setup/variables.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/variables",permalink:"/ecalc/docs/about/modelling/setup/variables",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/variables.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Variables",sidebar_position:6,description:"Variables guide and description"},sidebar:"about",previous:{title:"Fuel types",permalink:"/ecalc/docs/about/modelling/setup/fuel_types"},next:{title:"Installations",permalink:"/ecalc/docs/about/modelling/setup/installations/"}},o={},c=[{value:"Defining variables",id:"defining-variables",level:2},{value:"Format",id:"format",level:3},{value:"Examples",id:"examples",level:3},{value:"Using variables",id:"using-variables",level:2},{value:"Example",id:"example",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.admonition,{type:"note",children:(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"})," keyword is ",(0,a.jsx)(n.strong,{children:"optional"})," for an eCalc\u2122 model to run."]})}),"\n",(0,a.jsx)(n.h2,{id:"defining-variables",children:"Defining variables"}),"\n",(0,a.jsx)(n.p,{children:"Variables are defined in their own section in the YAML file, they can either be defined without link to time, or linked to time."}),"\n",(0,a.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n <variable name>:\n VALUE: <expression>\n"})}),"\n",(0,a.jsx)(n.p,{children:"With time link:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n <variable name>:\n <YYYY-MM-DD [HH:mm:ss]>:\n VALUE: <expression>\n"})}),"\n",(0,a.jsx)(n.h3,{id:"examples",children:"Examples"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n"})}),"\n",(0,a.jsx)(n.p,{children:"With time link:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n 2010-01-01:\n VALUE: SIM1:COL1 {*} 2\n 2020-01-01:\n VALUE: SIM1:COL1\n"})}),"\n",(0,a.jsx)(n.h2,{id:"using-variables",children:"Using variables"}),"\n",(0,a.jsx)(n.p,{children:"Variables can be used in any expression throughout the YAML file and can even be used within defining other variables."}),"\n",(0,a.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,a.jsxs)(n.p,{children:["Using variables in the ",(0,a.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATION"})," section:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n gas_rateA:\n VALUE: SIM;COL1\n gas_rateB:\n VALUE: SIM;COL2\n\nINSTALLATIONS: \n - NAME: installationA\n CATEGORY: FIXED\n ...\n - NAME: sample_compressor\n CATEGORY: COMPRESSOR\n ENERGYFUNCTION: compressorA\n RATE: $var.gas_rateA {+} $var.gas_rateB\n ...\n"})}),"\n",(0,a.jsx)(n.p,{children:"Using variables in defining another variable:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n double_injection_rate:\n VALUE: $var.salt_water_injection {*} 2\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>l});var a=i(67294);const s={},t=a.createContext(s);function l(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e136365.e03d4aca.js b/assets/js/9e136365.e03d4aca.js new file mode 100644 index 0000000000..c92cfeb3be --- /dev/null +++ b/assets/js/9e136365.e03d4aca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9591],{43507:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>d,contentTitle:()=>n,default:()=>a,frontMatter:()=>t,metadata:()=>i,toc:()=>c});var r=o(85893),l=o(11151);const t={title:"Compressor train types",sidebar_position:2},n=void 0,i={id:"about/modelling/setup/models/compressor_modelling/compressor_models_types/index",title:"Compressor train types",description:"This section outlines the various compressor train types that are available in eCalc\u2122.",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_models_types",slug:"/about/modelling/setup/models/compressor_modelling/compressor_models_types/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor train types",sidebar_position:2},sidebar:"about",previous:{title:"Compressor charts",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/"},next:{title:"Single speed compressor train",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model"}},d={},c=[];function m(e){const s={a:"a",code:"code",li:"li",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.p,{children:"This section outlines the various compressor train types that are available in eCalc\u2122.\nThese are as follows:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Single speed compressor train model"})})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model"})})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:(0,r.jsx)(s.code,{children:"Simplified variable speed compressor train model"})})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:(0,r.jsx)(s.code,{children:"Variable speed compressor train model with multiple streams and pressures"})})}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,l.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},11151:(e,s,o)=>{o.d(s,{Z:()=>i,a:()=>n});var r=o(67294);const l={},t=r.createContext(l);function n(e){const s=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:n(e.components),r.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e4a10de.2da2b698.js b/assets/js/9e4a10de.2da2b698.js new file mode 100644 index 0000000000..49ed06ac24 --- /dev/null +++ b/assets/js/9e4a10de.2da2b698.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4395],{50331:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var r=t(85893),o=t(11151);const s={},c="TURBINE_MODEL",i={id:"about/references/keywords/TURBINE_MODEL",title:"TURBINE_MODEL",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD"},next:{title:"TYPE",permalink:"/ecalc/docs/about/references/keywords/TYPE"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"turbine_model",children:"TURBINE_MODEL"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["When using a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",children:"TURBINE"})," it is required for a ",(0,r.jsx)(n.code,{children:"TURBINE_MODEL"})," to be specified. This is done under the ",(0,r.jsx)(n.code,{children:"MODELS"})," section."]}),"\n",(0,r.jsxs)(n.p,{children:["A turbine model describes a gas-fired turbine that is coupled to a compressor or compression train. It is specified in a similar way to a ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSET"}),". ",(0,r.jsx)(n.code,{children:"TURBINE_LOAD"}),", ",(0,r.jsx)(n.code,{children:"TURBINE_EFFICIENCY"})," and ",(0,r.jsx)(n.code,{children:"LOWER_HEATING_VALUE"})," needs to be inputted here."]}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n TURBINE_LOADS: <list of power values in mega watt>\n TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>\n POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function E(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>c});var r=t(67294);const o={},s=r.createContext(o);function c(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e7755e6.acc3cd32.js b/assets/js/9e7755e6.acc3cd32.js new file mode 100644 index 0000000000..24a5ed2e60 --- /dev/null +++ b/assets/js/9e7755e6.acc3cd32.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7212],{88412:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>E,frontMatter:()=>c,metadata:()=>d,toc:()=>i});var s=n(85893),t=n(11151);const c={},o="DISCHARGE_PRESSURE",d={id:"about/references/keywords/DISCHARGE_PRESSURE",title:"DISCHARGE_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/DISCHARGE_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/DISCHARGE_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"DIRECT_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS"},next:{title:"DOWNSTREAM_PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"discharge_pressure",children:"DISCHARGE_PRESSURE"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n[...] / ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Yes"}),(0,s.jsxs)(r.td,{children:[(0,s.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})," ",(0,s.jsx)("br",{})," ",(0,s.jsx)(r.code,{children:"OPERATIONAL_SETTINGS"})]}),(0,s.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Used to define the discharge pressure for some ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\ntypes and in ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," using an\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"Expressions"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"DISCHARGE_PRESSURE: <discharge pressure expression>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"DISCHARGE_PRESSURE: 200 # [bar]\n"})})]})}function E(e={}){const{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var s=n(67294);const t={},c=s.createContext(t);function o(e){const r=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e91bf8d.760beddb.js b/assets/js/9e91bf8d.760beddb.js new file mode 100644 index 0000000000..fbba4480ad --- /dev/null +++ b/assets/js/9e91bf8d.760beddb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4631],{21064:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>a,toc:()=>c});var t=r(85893),o=r(11151);const n={title:"Fixed speed pressure control",sidebar_position:3,description:"Introduction to fixed speed pressure control"},i="Fixed speed pressure control",a={id:"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index",title:"Fixed speed pressure control",description:"Introduction to fixed speed pressure control",source:"@site/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control",slug:"/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Fixed speed pressure control",sidebar_position:3,description:"Introduction to fixed speed pressure control"},sidebar:"about",previous:{title:"Variable speed compressor train model with multiple streams and pressures",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures"},next:{title:"Turbine modelling",permalink:"/ecalc/docs/about/modelling/setup/models/turbine_modeling"}},l={},c=[{value:"Theory",id:"theory",level:2},{value:"Control modelling in eCalc\u2122",id:"control-modelling-in-ecalc",level:2},{value:"Pressure control methods - choking options",id:"pressure-control-methods---choking-options",level:3},{value:"UPSTREAM_CHOKE",id:"upstream_choke",level:4},{value:"DOWNSTREAM_CHOKE",id:"downstream_choke",level:4},{value:"Pressure control methods - recirculation options",id:"pressure-control-methods---recirculation-options",level:3},{value:"INDIVIDUAL_ASV_PRESSURE",id:"individual_asv_pressure",level:4},{value:"INDIVIDUAL_ASV_RATE",id:"individual_asv_rate",level:4},{value:"COMMON_ASV",id:"common_asv",level:4}];function h(e){const s={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"fixed-speed-pressure-control",children:"Fixed speed pressure control"}),"\n",(0,t.jsx)(s.h2,{id:"theory",children:"Theory"}),"\n",(0,t.jsxs)(s.p,{children:["Compressors are typically controlled by changing the rotational speed of the compressor train shaft, which can either increase or decrease the work performed.\nIn the case where this is not possible (",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"single speed compressors"}),"), or this is not sufficient to control the compressor, other methods of control need to be used.\nIn eCalc\u2122, there are three main compressor control methods considered (aside from rotational speed control), these are:"]}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Upstream choking/throttling"}),"\n",(0,t.jsx)(s.li,{children:"Downstream choking/throttling"}),"\n",(0,t.jsx)(s.li,{children:"Anti-surge recycling"}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Each of these methods are used depending on the situation and placement of the compressor's operating points.\nA summary of how these methods work in practice are seen below.\nIn these figures, the red point represents a singular operating point, which is shifted with the given control mechanism. The operating point first starts below the compressor curve and is then adjusted toward the curve (by either changing head or rate). The different pressure control methods will change the operating points in the follow way:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Upstream throttling will decrease the inlet pressure, and in turn increase the head and the inlet volumetric flow rate (lower pressure = lower density = lower flow rate)."}),"\n",(0,t.jsx)(s.li,{children:"Downstream throttling will increase the head, as the outlet pressure is increased. There is no influence on the inlet rate in this case.\nHowever, when the operating points is on the compressor curve, and the head is further increased (by increasing the outlet pressure), the rate of the compressor will thus be reduced."}),"\n",(0,t.jsx)(s.li,{children:"ASV recycling will simply increase the throughout of the compressor without influencing the head.\nHowever, when the operating points is on the compressor curve, and the mass rate through is further increased, compressor head will in turn be reduced (along the curve)."}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"Upstream Choking"}),(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"Downstream Choking"})]})}),(0,t.jsx)(s.tbody,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"center"},children:(0,t.jsx)(s.img,{src:r(3232).Z+"",width:"2990",height:"1906"})}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:(0,t.jsx)(s.img,{src:r(4548).Z+"",width:"2990",height:"1906"})})]})})]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsx)(s.tr,{children:(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"ASV Recycling"})})}),(0,t.jsx)(s.tbody,{children:(0,t.jsx)(s.tr,{children:(0,t.jsx)(s.td,{style:{textAlign:"center"},children:(0,t.jsx)(s.img,{src:r(22366).Z+"",width:"2990",height:"1906"})})})})]}),"\n",(0,t.jsx)(s.h2,{id:"control-modelling-in-ecalc",children:"Control modelling in eCalc\u2122"}),"\n",(0,t.jsxs)(s.p,{children:["In eCalc\u2122, upstream and downstream choking is modelled as described in the ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/#theory",children:"theory section"}),".\nASV recycling on the other hand is done in three separate ways.\nThese three modelling methods are important for a compression train with more than one stage. This is due the fact that when each compressor stage has an individual ASV, the solution is under determined.\nFor a single stage compressor, the results of these methods will be identical.\nThis will further be elaborated upon in the ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/#pressure-control-methods---recirculation-options",children:"recirculation options"})," section."]}),"\n",(0,t.jsx)(s.p,{children:"Some scenarios where additional pressure control is required can be when:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The compressor train only operates at one speed (",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"SINGLE_SPEED_COMPRESSOR_TRAIN"}),"),\nand the given rate and suction pressure gives a too high discharge pressure."]}),"\n",(0,t.jsxs)(s.li,{children:["The compressor train is a ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"}),",\nbut it already operates at the minimum speed, and still the discharge pressure is too high."]}),"\n",(0,t.jsxs)(s.li,{children:["The compressor train is a ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"\nrequired to meet an export pressure, before compressing gas further for injection. Here the\nrotational speed required to bring the gas from inlet pressure to export pressure may be higher than the speed\nrequired to bring the gas from export pressure to discharge pressure. Hence, the rotational speed giving\nthe correct export pressure will give a too high discharge pressure."]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"pressure-control-methods---choking-options",children:"Pressure control methods - choking options"}),"\n",(0,t.jsx)(s.p,{children:"In a situation where the rotational speed of the shaft can not be varied here are only two degrees of freedom.\nThis means that if you give the suction pressure and the flow rate as input, the discharge pressure is decided by those\ntwo inputs. Similarly, if you give the rate and the discharge pressure as input, the suction pressure is decided by\nthose two inputs. Hence, to calculate the energy usage for a given rate, suction pressure and discharge pressure, a\nmethod for fixed speed pressure control must be defined. This can be done by a choke valve upstream or downstream\nof the compressor train, or by recirculating fluid inside the compressor train."}),"\n",(0,t.jsx)(s.p,{children:"Currently, there are two options for choking the pressure in eCalc\u2122:"}),"\n",(0,t.jsx)(s.h4,{id:"upstream_choke",children:"UPSTREAM_CHOKE"}),"\n",(0,t.jsx)(s.p,{children:"The suction pressure is reduced such that the resulting suction pressure after choking together with the given speed results in the required discharge pressure.\nAs the inlet pressure is reduced, the inlet flow rate will also increase."}),"\n",(0,t.jsx)(s.h4,{id:"downstream_choke",children:"DOWNSTREAM_CHOKE"}),"\n",(0,t.jsx)(s.p,{children:"The pressure is choked to the required discharge pressure after the compressor train. So the compressor's head will increase, as the compressor will compress the gas to a higher discharge pressure - which will subsequently be choked to the desired pressure."}),"\n",(0,t.jsx)(s.h3,{id:"pressure-control-methods---recirculation-options",children:"Pressure control methods - recirculation options"}),"\n",(0,t.jsx)(s.p,{children:"As previously mentioned, there are three different methods in eCalc\u2122 for modelling ASV recycling.\nThis is necessary as when there is more than one compressor stage, there will be individual ASVs per stage.\nThus, the problem is under determined, and there are multiple possible solutions.\nTherefore, some modelling choices must\nbe done.\nThere are currently three options available in eCalc\u2122:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,t.jsx)(s.li,{children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,t.jsx)(s.li,{children:"COMMON_ASV"}),"\n"]}),"\n",(0,t.jsxs)(s.admonition,{title:"Note",type:"note",children:[(0,t.jsx)(s.p,{children:"With only one compressor stage or only one recirculation loop (common asv over the entire compressor train),\na unique solution to how much volume to recirculate is available."}),(0,t.jsx)(s.p,{children:"For a single stage compressor, all recirculation options should give the same result."})]}),"\n",(0,t.jsx)(s.p,{children:"A further explanation of ASV recycling can be seen in the figure below.\nHere, it can be seen that the head of a compressor is reduced when the rate is increased.\nThis means that recirculation can reduce the\ndischarge pressure for a single speed compressor."}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{src:r(46374).Z+"",width:"512",height:"384"})}),"\n",(0,t.jsx)(s.p,{children:"Looking at the figure above, for an actual volume rate of 1882 am3/hr, the head is 93 kJ/kg (blue dashed line). If this head leads to a too large discharge pressure, it can be reduced by recirculation\nusing the anti-surge valve. As the actual flow rate through the compressor increases, the head is also reduced,\nmeaning that a higher actual flow rate leads to a lower discharge pressure."}),"\n",(0,t.jsx)(s.p,{children:"For example, by increasing the actual volume rate\nto 2322 am3/hr (by recirculating 440 am3/hr through the ASV), the head is reduced to about 81.3 kJ/kg (red dashed lines)\n, in turn leading to a lower discharge pressure. The head can be reduced further down to 42.5 kJ/kg at the maximum flow\nrate (3201 am3/hr) for the compressor (yellow dashed lines). The difference between the flow rate entering the\ncompressor train and the maximum flow rate for the compressor gives the amount of additional volume that can be\nrecirculated through the compressor - the available capacity."}),"\n",(0,t.jsx)(s.h4,{id:"individual_asv_pressure",children:"INDIVIDUAL_ASV_PRESSURE"}),"\n",(0,t.jsx)(s.p,{children:"The pressure ratio (discharge pressure/suction pressure) over each compressor stage is constant.\nEssentially, with each time step there will be no change in the pressure ratio, but the volume flow will adjust to keep the pressure ratio constant."}),"\n",(0,t.jsx)(s.h4,{id:"individual_asv_rate",children:"INDIVIDUAL_ASV_RATE"}),"\n",(0,t.jsx)(s.p,{children:"The flow rate through each compressor stage is increased with the same fraction of the available capacity in that stage."}),"\n",(0,t.jsxs)(s.p,{children:["For example, if you have a 2-stage compressor and the first stage has 500 Am",(0,t.jsx)("sup",{children:"3"}),"/h available capacity and the second has 400 Am",(0,t.jsx)("sup",{children:"3"}),"/h available capacity.\nIf the first stage increases by 25 % of the available capacity (125 Am",(0,t.jsx)("sup",{children:"3"}),"/h), the second stage increase by 25 % too (100 Am",(0,t.jsx)("sup",{children:"3"}),"/h) - given that this matches the required output."]}),"\n",(0,t.jsx)(s.h4,{id:"common_asv",children:"COMMON_ASV"}),"\n",(0,t.jsx)(s.p,{children:"The same volume is recirculated through the entire compressor train.\nThus, each compression stage will have the same mass throughput."})]})}function d(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},22366:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/asv_recycling-8cbf643933baa1262460838cc4b483ae.png"},4548:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/downstream_choking-e0ac6b7a8379c76a8f29199d7aa9086c.png"},46374:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/make_recirculation_pressure_control_plot-527cac79a8c53527147492b170308459.png"},3232:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/upstream_choking-dc5aedeb280843ea22445ce83731b8dc.png"},11151:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>i});var t=r(67294);const o={},n=t.createContext(o);function i(e){const s=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a2e97e20.bbf524d9.js b/assets/js/a2e97e20.bbf524d9.js new file mode 100644 index 0000000000..c33db9b620 --- /dev/null +++ b/assets/js/a2e97e20.bbf524d9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8988],{61009:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var t=o(85893),s=o(11151);const i={title:"Models",sidebar_position:4,description:"Guide on how to use models in eCalc\u2122"},r=void 0,d={id:"about/modelling/setup/models/index",title:"Models",description:"Guide on how to use models in eCalc\u2122",source:"@site/docs/about/modelling/setup/models/index.md",sourceDirName:"about/modelling/setup/models",slug:"/about/modelling/setup/models/",permalink:"/ecalc/docs/about/modelling/setup/models/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Models",sidebar_position:4,description:"Guide on how to use models in eCalc\u2122"},sidebar:"about",previous:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular"},next:{title:"Fluid model",permalink:"/ecalc/docs/about/modelling/setup/models/fluid_model"}},l={},c=[{value:"Format",id:"format",level:2},{value:"Supported types",id:"supported-types",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," keyword is ",(0,t.jsx)(n.strong,{children:"optional"})," for an eCalc\u2122 model to run. However, it is critical for compressor and turbine modelling."]})}),"\n",(0,t.jsxs)(n.p,{children:["This part of the setup defines input files that characterize various fluid, compressor and turbine models. These are later used as input in the ",(0,t.jsx)(n.a,{href:"../../../references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their ",(0,t.jsx)(n.a,{href:"../../../references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of model, for reference>\n TYPE: <model type>\n <other keywords according to TYPE>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"supported-types",children:"Supported types"}),"\n",(0,t.jsx)(n.p,{children:"The supported types are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"FLUID"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"COMPRESSOR_CHART"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"TURBINE"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"COMPRESSOR_WITH_TURBINE"})}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>d,a:()=>r});var t=o(67294);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5dcc804.8a68248d.js b/assets/js/a5dcc804.8a68248d.js new file mode 100644 index 0000000000..e5a2d8169c --- /dev/null +++ b/assets/js/a5dcc804.8a68248d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8276],{84814:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=t(85893),a=t(11151);const s={title:"Output data",sidebar_position:1e3,description:"Output data"},o="Output data",l={id:"about/miscellaneous/index",title:"Output data",description:"Output data",source:"@site/docs/about/miscellaneous/index.md",sourceDirName:"about/miscellaneous",slug:"/about/miscellaneous/",permalink:"/ecalc/docs/about/miscellaneous/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/miscellaneous/index.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{title:"Output data",sidebar_position:1e3,description:"Output data"},sidebar:"about",previous:{title:"v8.7 to v8.8",permalink:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8"}},r={},c=[{value:"Decimals and significant digits in eCalc",id:"decimals-and-significant-digits-in-ecalc",level:2},{value:"Quality control",id:"quality-control",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"output-data",children:"Output data"}),"\n",(0,n.jsx)(i.p,{children:"In general, each model is outputted to a .csv file with what is viewed as necessary information for an operator.\nFurther details, if necessary, can be seen in a .json file."}),"\n",(0,n.jsx)(i.h2,{id:"decimals-and-significant-digits-in-ecalc",children:"Decimals and significant digits in eCalc"}),"\n",(0,n.jsxs)(i.p,{children:['Output numbers/result in eCalc are currently given at "6 significant digits/figures accuracy". This statement is valid\nfor positive and negative integers and float numbers. Read more about significant digits ',(0,n.jsx)(i.a,{href:"https://en.wikipedia.org/wiki/Significant_figures",children:"here"}),"."]}),"\n",(0,n.jsx)(i.admonition,{type:"caution",children:(0,n.jsx)(i.p,{children:'Be aware that the output is never more accurate than the input (ie the measurements/prognosis). So, e.g. if your input\nis rounded off to "nearest million", then that is also how you should consider the accuracy of the output. The output accuracy\nis not more reliable than the lowest input accuracy given.'})}),"\n",(0,n.jsx)(i.p,{children:"In practice, for the output, this means:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Numbers higher than 1e6 (and lower than -1e6) will not have digits after decimal sign"}),"\n",(0,n.jsx)(i.li,{children:"Numbers smaller than 1e-6 (and -1e-6) is considered to be 0 (rounded to 0), and we will\nnot operate with more than 6 digits after the decimal sign."}),"\n",(0,n.jsx)(i.li,{children:'We only round numbers in the decimal part, to within the "significant digits"'}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"We may in the future allow user to specify number of significant digits in output, but for now it is fixed."}),"\n",(0,n.jsx)(i.h2,{id:"quality-control",children:"Quality control"}),"\n",(0,n.jsxs)(i.p,{children:["eCalc\u2122 has a quality control function, which is represented by a validity flag. This validity flag gives the user information to whether or not their model is valid.\nThis flag can either be seen in the .csv or .json output file.\nEssentially, if the ",(0,n.jsx)(i.code,{children:"<name>.is_valid"})," is shown as a ",(0,n.jsx)(i.code,{children:"1"}),", the level is considered to be valid, and on the opposite end if it is shown to be ",(0,n.jsx)(i.code,{children:"0"}),", it can be considered invalid."]}),"\n",(0,n.jsx)(i.p,{children:"The most likely reason for an invalid flag is that a consumer (pump, compressor) is operating outside its operational limit (potentially outside the pump/compressor chart)."}),"\n",(0,n.jsx)(i.p,{children:"This validity flag can be seen on multiple component levels:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"The highest level being the eCalc\u2122 model (or otherwise known as the asset level). If the highest level flag is given as invalid, this means that any number of the installations in the model can have one or more invalid consumer."}),"\n",(0,n.jsx)(i.li,{children:"If you dig further down in the component levels, the next would be on installation level. This means that if this flag is given as invalid, any consumer within that installation can be invalid."}),"\n",(0,n.jsx)(i.li,{children:"Past the installation level, is the consumer level. Here, the validity of the individual consumers can be seen."}),"\n",(0,n.jsx)(i.li,{children:"If the consumer is a multi-stage compressor (for example), the validity of each compression stage can be viewed (only in the .json file when detailed output is selected)"}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"This is further illustrated in the diagram below:"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Validity flag example",src:t(33773).Z+"",width:"4331",height:"2500"})})]})}function u(e={}){const{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},33773:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/validity_flag_example-5b8c9832693a18b6500cf408c0b4873b.png"},11151:(e,i,t)=>{t.d(i,{Z:()=>l,a:()=>o});var n=t(67294);const a={},s=n.createContext(a);function o(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.2d920f9f.js b/assets/js/a7bd4aaa.2d920f9f.js new file mode 100644 index 0000000000..84213801ea --- /dev/null +++ b/assets/js/a7bd4aaa.2d920f9f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8518],{8564:(n,e,s)=>{s.r(e),s.d(e,{default:()=>l});s(67294);var o=s(1944),r=s(43320),t=s(74477),i=s(18790),c=s(90197),u=s(85893);function a(n){const{version:e}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.Z,{version:e.version,tag:(0,r.os)(e.pluginId,e.version)}),(0,u.jsx)(o.d,{children:e.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function d(n){const{version:e,route:s}=n;return(0,u.jsx)(o.FG,{className:e.className,children:(0,u.jsx)(t.q,{version:e,children:(0,i.H)(s.routes)})})}function l(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(d,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.e28c5e5d.js b/assets/js/a94703ab.e28c5e5d.js new file mode 100644 index 0000000000..01ca394a40 --- /dev/null +++ b/assets/js/a94703ab.e28c5e5d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4368],{12674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(67294),o=n(90512),i=n(1944),s=n(35281),l=n(52802),r=n(1116),c=n(95999),d=n(12466),u=n(85936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(85893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(91442),x=n(16550),f=n(87524),j=n(86668),k=n(21327);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:v.collapseSidebarButtonIcon})})}var C=n(59689),S=n(902);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(86043),Z=n(48596),A=n(33692),L=n(72389);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),_=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(13919),H=n(39471);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(13102),X=n(72961);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5658);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5658:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var a=n(90512),o=n(95999),i=n(92503),s=n(85893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/ad129716.ec7faabf.js b/assets/js/ad129716.ec7faabf.js new file mode 100644 index 0000000000..06f7111d8b --- /dev/null +++ b/assets/js/ad129716.ec7faabf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[754],{12635:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>a});var n=o(85893),t=o(11151);const i={title:"Compressor models",sidebar_position:3,description:"Using compressor models in calculations"},l="Compressor models in calculations",r={id:"about/modelling/setup/installations/compressor_models_in_calculations/index",title:"Compressor models",description:"Using compressor models in calculations",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Compressor models",sidebar_position:3,description:"Using compressor models in calculations"},sidebar:"about",previous:{title:"Pump models",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations"},next:{title:"Compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor"}},c={},a=[];function d(e){const s={a:"a",code:"code",h1:"h1",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"compressor-models-in-calculations",children:"Compressor models in calculations"}),"\n",(0,n.jsxs)(s.p,{children:["There are different options on how to utilise compressor models in the calculations within the\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," section in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),". Three different options will be illustrated here:"]}),"\n",(0,n.jsx)(s.p,{children:"No matter the compressor model type, it can either be placed in two sections, which can be:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Under the ",(0,n.jsx)(s.code,{children:"CONSUMERS"})," section under ",(0,n.jsx)(s.code,{children:"GENERATORSETS"}),". This is applicable for electrical motor driven compressors where electricity is generated in de-coupled gas turbines and distributed to the individual process units."]}),"\n",(0,n.jsxs)(s.li,{children:["Under the ",(0,n.jsx)(s.code,{children:"FUELCONSUMERS"})," section. Here it is necessary for the compressor model to be coupled to a gas turbine model. The coupled turbine is solely driving the compressor system to which it is attached to."]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Example"})}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: InstallationA\n CATEGORY: FIXED\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: gensetA\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: genset\n CONSUMERS:\n - NAME: Gas injection compressor\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n ...\n\n FUELCONSUMERS:\n - NAME: Gas export compressor\n CATEGORY: GAS-DRIVEN-COMPRESSOR \n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n ...\n"})})]})}function m(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,s,o)=>{o.d(s,{Z:()=>r,a:()=>l});var n=o(67294);const t={},i=n.createContext(t);function l(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/af105519.55536628.js b/assets/js/af105519.55536628.js new file mode 100644 index 0000000000..2c7f605c34 --- /dev/null +++ b/assets/js/af105519.55536628.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4199],{71071:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>v,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var n=o(85893),i=o(11151);const s={title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",sidebar_position:3},r="v8.2 to v8.3",c={id:"about/migration_guides/v8-2_to_v8-3",title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",source:"@site/docs/about/migration_guides/v8-2_to_v8-3.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8-2_to_v8-3",permalink:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8-2_to_v8-3.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"v8.2 to v8.3",description:"v8.2 to v8.3 migration",sidebar_position:3},sidebar:"about",previous:{title:"v8.1 to v8.2",permalink:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2"},next:{title:"v8.3 to v8.4",permalink:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4"}},a={},d=[];function u(t){const e={code:"code",h1:"h1",p:"p",...(0,i.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"v82-to-v83",children:"v8.2 to v8.3"}),"\n",(0,n.jsxs)(e.p,{children:["It is no longer accepted to change ",(0,n.jsx)(e.code,{children:"ENERGY_USAGE_MODEL TYPE"})," over time, within one consumer. In case ",(0,n.jsx)(e.code,{children:"TYPE"})," evolution is needed, the model can be split in two consumers."]})]})}function v(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},11151:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>r});var n=o(67294);const i={},s=n.createContext(i);function r(t){const e=n.useContext(s);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:r(t.components),n.createElement(s.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/b0a5d2c7.758cd55a.js b/assets/js/b0a5d2c7.758cd55a.js new file mode 100644 index 0000000000..ae2640b424 --- /dev/null +++ b/assets/js/b0a5d2c7.758cd55a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3414],{71003:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>m,frontMatter:()=>l,metadata:()=>t,toc:()=>d});var s=r(85893),o=r(11151);const l={},a="CONTROL_MARGIN",t={id:"about/references/keywords/CONTROL_MARGIN",title:"CONTROL_MARGIN",description:"MODELS /",source:"@site/docs/about/references/keywords/CONTROL_MARGIN.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONTROL_MARGIN",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONTROL_MARGIN.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"},next:{title:"CONTROL_MARGIN_UNIT",permalink:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Use in Single speed compressor train model",id:"use-in-single-speed-compressor-train-model",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Use in Variable speed compressor train model",id:"use-in-variable-speed-compressor-train-model",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3},{value:"Use in Variable speed compressor train model with multiple streams and pressures",id:"use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures",level:2},{value:"Format",id:"format-2",level:3},{value:"Example",id:"example-2",level:3}];function c(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"control_margin",children:"CONTROL_MARGIN"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STAGES",children:"STAGES"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"This keyword defines the surge control margin for a single speed compressor chart or a variable speed compressor chart."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"CONTROL_MARGIN"})," behaves as an alternate to the minimum flow line: For each chart curve (a single speed chart will have one, a variable speed chart will have at least two) the input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"CONTROL_MARGIN"})," is given as a percentage or fraction (",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",children:"CONTROL_MARGIN_UNIT"}),") of the rate difference between minimum- and maximum flow,\nfor the given speed. It is used to calculate the increase in minimum flow for each individual speed curve.\nIt is defined when setting up the stages in a ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"Single speed compressor train model"}),", ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})," or ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"Surge control margin for variable speed compressor chart"})," for more details."]}),"\n",(0,s.jsxs)(n.h2,{id:"use-in-single-speed-compressor-train-model",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",children:"Single speed compressor train model"})]}),"\n",(0,s.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n ....\n"})}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20\n COMPRESSOR_CHART: 1_stage_chart\n CONTROL_MARGIN: 0.1\n CONTROL_MARGIN_UNIT: FRACTION\n ....\n"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Stashed changes"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"use-in-variable-speed-compressor-train-model",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:"Variable speed compressor train model"})]}),"\n",(0,s.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n ....\n"})}),"\n",(0,s.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: 20\n COMPRESSOR_CHART: 1_stage_chart\n CONTROL_MARGIN: 0.1\n CONTROL_MARGIN_UNIT: FRACTION\n ....\n"})}),"\n",(0,s.jsxs)(n.h2,{id:"use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"})]}),"\n",(0,s.jsx)(n.h3,{id:"format-2",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STREAMS:\n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING # NB: No fluid definition for outgoing streams!\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <Optional>\n - <reference stream from STREAMS for one in- or outgoing stream. Optional>\n - <reference stream from STREAMS for another in- or outgoing stream. Optional>\n CONTROL_MARGIN: <Default value 0.0>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <pressure control>\n DOWNSTREAM_PRESSURE_CONTROL: <pressure control>\n - ...\n"})}),"\n",(0,s.jsx)(n.h3,{id:"example-2",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ....\n STREAMS:\n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n STAGES:\n - COMPRESSOR_CHART: 1_stage_chart\n INLET_TEMPERATURE: 20\n STREAM: \n - 1_stage_inlet\n CONTROL_MARGIN: 10\n CONTROL_MARGIN_UNIT: PERCENTAGE\n - COMPRESSOR_CHART: 2_stage_chart \n INLET_TEMPERATURE: 30\n CONTROL_MARGIN: 15\n CONTROL_MARGIN_UNIT: PERCENTAGE\n - COMPRESSOR_CHART: 3_stage_chart \n INLET_TEMPERATURE: 35\n STREAM: \n - 2_stage_outlet\n - 3_stage_inlet\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage\n DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage\n - COMPRESSOR_CHART: 4_stage_chart \n INLET_TEMPERATURE: 15\n"})})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>a});var s=r(67294);const o={},l=s.createContext(o);function a(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b15ba3bd.1515f234.js b/assets/js/b15ba3bd.1515f234.js new file mode 100644 index 0000000000..3149a8d41e --- /dev/null +++ b/assets/js/b15ba3bd.1515f234.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2547],{44040:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>E});var t=r(85893),c=r(11151);const a={},o="PUMPS",s={id:"about/references/keywords/PUMPS",title:"PUMPS",description:"INSTALLATIONS / [...] /",source:"@site/docs/about/references/keywords/PUMPS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/PUMPS",permalink:"/ecalc/docs/about/references/keywords/PUMPS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/PUMPS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"PRESSURE_CONTROL",permalink:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL"},next:{title:"RATE",permalink:"/ecalc/docs/about/references/keywords/RATE"}},i={},E=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1",id:"example-1",level:2},{value:"Example 2 (Detailed)",id:"example-2-detailed",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pumps",children:"PUMPS"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," / [...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/PUMPS",children:"PUMPS"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used to define a list of pumps in a ",(0,t.jsx)(n.code,{children:"PUMP_SYSTEM ENERGY USAGE MODEL"}),". Each pump is defined with a name and with a\n",(0,t.jsx)(n.code,{children:"facility input<FACILITY_INPUTS>"})," reference to a pump type energy function."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: <name of compressor>\n CHART: <reference to pump model in facility inputs>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example-1",children:"Example 1"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example-2-detailed",children:"Example 2 (Detailed)"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"- NAME: waterinjection\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n 2019-01-01:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a\n CHART: winj_pumpchart_PA03A\n - NAME: pump_b\n CHART: winj_pumpchart_PA03B\n - NAME: pump_c\n CHART: winj_pumpchart_PA03C\n - NAME: pump_d\n CHART: winj_pumpchart_PA03D\n - NAME: pump_e\n CHART: winj_pumpchart_PA03E\n TOTAL_SYSTEM_RATE: SIM8;WATER_INJ\n FLUID_DENSITY: 1030\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0, 0, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.5, 0.5, 0, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25, 0]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n - RATE_FRACTIONS: [0.2, 0.2, 0.2, 0.2, 0.2]\n SUCTION_PRESSURE: 14\n DISCHARGE_PRESSURE: 250\n"})})]})}function l(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>s,a:()=>o});var t=r(67294);const c={},a=t.createContext(c);function o(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2781c74.a424ad9a.js b/assets/js/b2781c74.a424ad9a.js new file mode 100644 index 0000000000..606532d112 --- /dev/null +++ b/assets/js/b2781c74.a424ad9a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4278],{12776:e=>{e.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b17913.970b4d8a.js b/assets/js/b2b17913.970b4d8a.js new file mode 100644 index 0000000000..69100f95cd --- /dev/null +++ b/assets/js/b2b17913.970b4d8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3190],{43011:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>l,contentTitle:()=>t,default:()=>a,frontMatter:()=>c,metadata:()=>i,toc:()=>o});var n=r(85893),d=r(11151);const c={},t="CATEGORY",i={id:"about/references/keywords/CATEGORY",title:"CATEGORY",description:"eCalc Model",source:"@site/docs/about/references/keywords/CATEGORY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CATEGORY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT"},next:{title:"COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"}},l={},o=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"category",children:"CATEGORY"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/",children:"eCalc Model"}),"\n/ ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"\n/ [...] / ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Required"}),(0,n.jsx)(s.th,{children:"Child of"}),(0,n.jsx)(s.th,{children:"Children/Options"})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Yes"}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," ",(0,n.jsx)("br",{})," ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"})," ",(0,n.jsx)("br",{})," ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," ",(0,n.jsx)("br",{})," ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," ",(0,n.jsx)("br",{})]}),(0,n.jsx)(s.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," keyword is used to specify which category certain data types belong to - these data types are:"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),": Required"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),": Optional"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPE"}),": Optional"]}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:["Only a limited pre-defined set of categories is valid input to the\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," keyword. The complete list of possible categories is given below.\nPlease note that the input is case-sensitive. The names should be in upper-case and the spelling/dash must match the names in the list exactly."]}),"\n",(0,n.jsxs)(s.p,{children:["Allowed categories for ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),":"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Category"}),(0,n.jsx)(s.th,{children:"Description/Examples"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"BASE-LOAD"})}),(0,n.jsx)(s.td,{children:"Consumers that do not vary with production"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"COLD-VENTING-FUGITIVE"})}),(0,n.jsx)(s.td,{children:"Direct emissions through cold venting and fugitive emissions"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"COMPRESSOR"})}),(0,n.jsx)(s.td,{children:"Gas injection compressors, export compressors, etc."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FIXED-PRODUCTION-LOAD"})}),(0,n.jsxs)(s.td,{children:["Consumer that is fixed/constant when production stream is on. Note that this is simply the name of the category. eCalc\u2122 does ",(0,n.jsx)(s.strong,{children:"not"})," imply any condition (that production must be > 0) when this keyword is applied. For this to occur, ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"})," must be used. See example below."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FLARE"})}),(0,n.jsx)(s.td,{children:"Flaring related energy usage/emissions"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"MISCELLANEOUS"})}),(0,n.jsxs)(s.td,{children:["Anything that don't apply other categories. Compressor and Genset (New in ",(0,n.jsx)(s.strong,{children:"v7.2"}),")"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"PUMP"})}),(0,n.jsx)(s.td,{children:"Single speed pumps, variable speed pumps."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"GAS-DRIVEN-COMPRESSOR"})}),(0,n.jsxs)(s.td,{children:["Compressor only. New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"TURBINE-GENERATOR"})}),(0,n.jsxs)(s.td,{children:["Genset only. New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"POWER-FROM-SHORE"})}),(0,n.jsxs)(s.td,{children:["Genset only. Dummy Genset (should have e.g. 0 fuel). New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"OFFSHORE-WIND"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Negative load. Indicate external power. New in ",(0,n.jsx)(s.strong,{children:"v7.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"LOADING"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Indicate oil volume to be loaded. New in ",(0,n.jsx)(s.strong,{children:"v8.0"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"STORAGE"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Indicate oil volume to be stored. New in ",(0,n.jsx)(s.strong,{children:"v8.0"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"STEAM-TURBINE-GENERATOR"})}),(0,n.jsxs)(s.td,{children:["Direct load consumer only. Negative load. Indicate power generated steam turbine. New in ",(0,n.jsx)(s.strong,{children:"v8.1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"BOILER"})}),(0,n.jsxs)(s.td,{children:["Genset only. Indicate steam generated. New in ",(0,n.jsx)(s.strong,{children:"v8.2"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"HEATER"})}),(0,n.jsxs)(s.td,{children:["Genset only. Indicate hot medium generated. New in ",(0,n.jsx)(s.strong,{children:"v8.2"})]})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:["Allowed categories for ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),":"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Category"}),(0,n.jsx)(s.th,{children:"Description/Examples"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FIXED"})}),(0,n.jsx)(s.td,{children:"Fixed installation"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"MOBILE"})}),(0,n.jsx)(s.td,{children:"Mobile/satellite installation."})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:["Allowed categories for ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"}),":"]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Category"}),(0,n.jsx)(s.th,{children:"Description/Examples"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"FUEL-GAS"})}),(0,n.jsx)(s.td,{children:"Normally associated with a fixed installation"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"DIESEL"})}),(0,n.jsx)(s.td,{children:"Normally associated with a mobile installation"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"CATEGORY: <CATEGORY>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"- NAME: name_of_my_electrical_consumer\n CATEGORY: FIXED-PRODUCTION-LOAD\n ENERGY_USAGE_MODEL:\n LOAD: 5\n CONDITION: SIM;OIL_PROD > 0\n"})})]})}function a(e={}){const{wrapper:s}={...(0,d.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},11151:(e,s,r)=>{r.d(s,{Z:()=>i,a:()=>t});var n=r(67294);const d={},c=n.createContext(d);function t(e){const s=n.useContext(c);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:t(e.components),n.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b677d687.464b512b.js b/assets/js/b677d687.464b512b.js new file mode 100644 index 0000000000..f93dc47ad4 --- /dev/null +++ b/assets/js/b677d687.464b512b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[262],{59574:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>E,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var r=t(85893),o=t(11151);const i={},s="RATE_FRACTIONS",c={id:"about/references/keywords/RATE_FRACTIONS",title:"RATE_FRACTIONS",description:"Description",source:"@site/docs/about/references/keywords/RATE_FRACTIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/RATE_FRACTIONS",permalink:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/RATE_FRACTIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"RATE",permalink:"/ecalc/docs/about/references/keywords/RATE"},next:{title:"RATE_PER_STREAM",permalink:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM"}},a={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"rate_fractions",children:"RATE_FRACTIONS"}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, ",(0,r.jsx)(n.code,{children:"TOTAL_SYSTEM_RATE"})," for the ",(0,r.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," is also required. You can use either ",(0,r.jsx)(n.code,{children:"RATES"})," or ",(0,r.jsx)(n.code,{children:"RATE_FRACTIONS"}),"; however, not both in one operational setting."]}),"\n",(0,r.jsx)(n.p,{children:"When specifying the rate fraction, the first fraction will relate to the first operational unit mentioned - i.e. if a pump system has two pumps, the first pump mentioned will relate to the rate fraction."}),"\n",(0,r.jsx)(n.p,{children:"Note that in the case of a compressor, the same method is utilised for specifying rate fractions."}),"\n",(0,r.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: <pump name>\n CHART: <chart reference>\n - NAME: <pump name>\n CHART: <chart reference>\n TOTAL_SYSTEM_RATE: <system rate>\n FLUID_DENSITY: <fluid density>\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n - RATE_FRACTIONS: <[fraction 1, fraction 2]>\n ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1030\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITIES:\n - 1000\n - 1050\n"})})]})}function E(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>s});var r=t(67294);const o={},i=r.createContext(o);function s(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b8c59810.aec9431a.js b/assets/js/b8c59810.aec9431a.js new file mode 100644 index 0000000000..780f91889f --- /dev/null +++ b/assets/js/b8c59810.aec9431a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9643],{41414:e=>{e.exports=JSON.parse('{"label":"eCalc","permalink":"/ecalc/docs/tags/e-calc","allTagsPath":"/ecalc/docs/tags","count":19,"items":[{"id":"changelog/separator","title":"---","description":"","permalink":"/ecalc/docs/changelog/separator"},{"id":"changelog/next","title":"Next","description":"New Features","permalink":"/ecalc/docs/changelog/latest"},{"id":"changelog/v7-0","title":"v7.0","description":"Features","permalink":"/ecalc/docs/changelog/v7-0-release"},{"id":"changelog/v7-1","title":"v7.1","description":"Features","permalink":"/ecalc/docs/changelog/v7-1-release"},{"id":"changelog/v7-2","title":"v7.2","description":"Features","permalink":"/ecalc/docs/changelog/v7-2-release"},{"id":"changelog/v7-3","title":"v7.3","description":"Features","permalink":"/ecalc/docs/changelog/v7-3-release"},{"id":"changelog/v7-4","title":"v7.4","description":"Features","permalink":"/ecalc/docs/changelog/v7-4-release"},{"id":"changelog/v7-5","title":"v7.5","description":"Features","permalink":"/ecalc/docs/changelog/v7-5-release"},{"id":"changelog/v7-6","title":"v7.6","description":"Breaking changes","permalink":"/ecalc/docs/changelog/v7-6-release"},{"id":"changelog/v8-0","title":"v8.0","description":"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some","permalink":"/ecalc/docs/changelog/v8.0-release"},{"id":"changelog/v8-1","title":"v8.1","description":"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:","permalink":"/ecalc/docs/changelog/v8.1-release"},{"id":"changelog/v8-10","title":"v8.10 (Latest)","description":"New Features","permalink":"/ecalc/docs/changelog/v8.10-release"},{"id":"changelog/v8-2","title":"v8.2","description":"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.2-release"},{"id":"changelog/v8-3","title":"v8.3","description":"eCalc\u2122 v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See","permalink":"/ecalc/docs/changelog/v8.3-release"},{"id":"changelog/v8-4","title":"v8.4","description":"New Features","permalink":"/ecalc/docs/changelog/v8.4-release"},{"id":"changelog/v8-5","title":"v8.5","description":"New Features","permalink":"/ecalc/docs/changelog/v8.5-release"},{"id":"changelog/v8-6","title":"v8.6","description":"New Features","permalink":"/ecalc/docs/changelog/v8.6-release"},{"id":"changelog/v8-7","title":"v8.7","description":"New Features","permalink":"/ecalc/docs/changelog/v8.7-release"},{"id":"changelog/v8-8","title":"v8.8","description":"New Features","permalink":"/ecalc/docs/changelog/v8.8-release"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/bb45b332.89053c6c.js b/assets/js/bb45b332.89053c6c.js new file mode 100644 index 0000000000..b86183fc77 --- /dev/null +++ b/assets/js/bb45b332.89053c6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4103],{75062:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var o=t(85893),i=t(11151);const a={title:"Modelling guide",sidebar_position:4,description:"eCalc modelling"},d="Modelling",c={id:"about/modelling/index",title:"Modelling guide",description:"eCalc modelling",source:"@site/docs/about/modelling/index.md",sourceDirName:"about/modelling",slug:"/about/modelling/",permalink:"/ecalc/docs/about/modelling/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/index.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Modelling guide",sidebar_position:4,description:"eCalc modelling"},sidebar:"about",previous:{title:"YAML",permalink:"/ecalc/docs/about/getting_started/yaml/"},next:{title:"Theory",permalink:"/ecalc/docs/about/modelling/theory/"}},l={},s=[];function r(e){const n={admonition:"admonition",code:"code",h1:"h1",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"modelling",children:"Modelling"}),"\n",(0,o.jsx)(n.p,{children:"This section describes how to use eCalc."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"It is good practice when writing the eCalc YAML setup file to include, as comments, the version it was written for, your name and a \u2018change log\u2019 which should include the date and changes made."})}),"\n",(0,o.jsx)(n.p,{children:"The YAML setup file:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"# ecalc version v5.3.1\n# input by: john.doe@example.com\n#\n# change log - add comments regarding relevant changes made to the file\n# date: YYYYMMDD, john doe\n# extended suction and discharge pressure range for precompressor\n# date: YYYYMMDD, jane doe\n# updated gensetA\n\nTIME_SERIES:\n - NAME: SIM1\n FILE: examplecase_inputvariables.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n...\n"})})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(r,{...e})}):r(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>d});var o=t(67294);const i={},a=o.createContext(i);function d(e){const n=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bdf25f4c.fe9eff3a.js b/assets/js/bdf25f4c.fe9eff3a.js new file mode 100644 index 0000000000..21eb3b02b5 --- /dev/null +++ b/assets/js/bdf25f4c.fe9eff3a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4025],{75710:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>t,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var s=r(85893),l=r(11151);const o={slug:"v7-1-release",title:"v7.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:4},i="eCalc v7.1",a={id:"changelog/v7-1",title:"v7.1",description:"Features",source:"@site/docs/changelog/v7-1.md",sourceDirName:"changelog",slug:"/changelog/v7-1-release",permalink:"/ecalc/docs/changelog/v7-1-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-1.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:4,frontMatter:{slug:"v7-1-release",title:"v7.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:4},sidebar:"changelog",previous:{title:"v7.0",permalink:"/ecalc/docs/changelog/v7-0-release"},next:{title:"v7.2",permalink:"/ecalc/docs/changelog/v7-2-release"}},t={},c=[{value:"<em>Features</em>",id:"features",level:2},{value:"CLI",id:"cli",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc-v71",children:"eCalc v7.1"}),"\n",(0,s.jsx)(n.h2,{id:"features",children:(0,s.jsx)(n.em,{children:"Features"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add new ",(0,s.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,s.jsx)(n.em,{children:"OFFSHORE-WIND"})," to report power usage from offshore windfarms. Should be negative load to deduct from genset, if what is supplied externally. Also added to ",(0,s.jsx)(n.code,{children:"LTP Reporting"}),". See excerpt example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: wind_turbine\n CATEGORY: OFFSHORE-WIND\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: -4.4 # MW\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add new ",(0,s.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,s.jsx)(n.em,{children:"TURBINE-GENERATOR"})," and ",(0,s.jsx)(n.em,{children:"POWER-FROM-SHORE"})," to report power consumption separately from installation and onshore (land) for generators. If not set,\ndefaults to ",(0,s.jsx)(n.em,{children:"TURBINE-GENERATOR"}),". See excerpt example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: genset\n CATEGORY: TURBINE-GENERATOR\n ELECTRICITY2FUEL: A_genset\n ...\n ...\n - NAME: power_from_shore\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: onshore_power\n ...\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["where ",(0,s.jsx)(n.em,{children:"electricity2fuel"})," for onshore power in general would have power map to 0 fuel usage"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add new ",(0,s.jsx)(n.a,{href:"../about/references/keywords/CATEGORY",children:"CATEGORY"})," with name ",(0,s.jsx)(n.em,{children:"GAS-DRIVEN-COMPRESSOR"})," to report power consumption for gas(-turbine)-driven compressors for LTP. Also added to ",(0,s.jsx)(n.code,{children:"LTP Reporting"}),". See excerpt example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: gascompression_2\n CATEGORY: GAS-DRIVEN-COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Allow single speed and variable speed compressor train to run with zero pressure and non-zero rate. Will raise warning, and affected time steps will not be calculated, but eCalc will run."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add a ",(0,s.jsx)(n.em,{children:"POWER"})," column data to the ",(0,s.jsx)(n.em,{children:"COMPRESSOR_TABULAR"})," csv-file for a fuel-driven ",(0,s.jsx)(n.em,{children:"SAMPLED_COMPRESSOR"})," in order to also get energy reported as power (MW). See ",(0,s.jsx)(n.code,{children:"Header requirements for the sampled compressor csv file"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add surge control margin to variable speed compressor charts. See ",(0,s.jsx)(n.code,{children:"Surge control margin for variable speed compressor chart"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Ensure non-infinite loops by setting max 50 iterations for compressor models. Will raise warning in the logger if not converged."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Bug in max rate calculation for simplified compressor train. Wrong convergence criterion leading to too early exit from iteration."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"VARIABLES can be specified in yaml and referred to in expressions."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"VARIABLES:\n salt_water_injection:\n VALUE: SIM1:COL1 {*} 2\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Use this variable by referencing it as ",(0,s.jsx)(n.code,{children:"$var.salt_water_injection"})," in an\nexpression."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'EXPRESSION: "$var.salt_water_injection {/} 2"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"../about/references/keywords/VARIABLES",children:"VARIABLES"})," for more information."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"Breaking changes"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"CONVERT_TO_RATE no longer supported. If this was something you used, let us know so we can know the use case."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"cli",children:"CLI"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Experimental: Add JSON v3 output to cover needs that are no longer supported by v2 because of tight coupling with core code. Both new and old format is provided, and will be stored when using the --json argument."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var s=r(67294);const l={},o=s.createContext(l);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bfdf430b.79bacaf3.js b/assets/js/bfdf430b.79bacaf3.js new file mode 100644 index 0000000000..4090ba7696 --- /dev/null +++ b/assets/js/bfdf430b.79bacaf3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8583],{38952:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var l=s(85893),i=s(11151);const r={slug:"v8.0-release",title:"v8.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:10},a="eCalc v8.0",t={id:"changelog/v8-0",title:"v8.0",description:"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some",source:"@site/docs/changelog/v8-0.md",sourceDirName:"changelog",slug:"/changelog/v8.0-release",permalink:"/ecalc/docs/changelog/v8.0-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-0.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:10,frontMatter:{slug:"v8.0-release",title:"v8.0",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:10},sidebar:"changelog",previous:{title:"v7.6",permalink:"/ecalc/docs/changelog/v7-6-release"},next:{title:"v8.1",permalink:"/ecalc/docs/changelog/v8.1-release"}},o={},c=[{value:"New features",id:"new-features",level:2},{value:"Experimental features",id:"experimental-features",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"YAML",id:"yaml",level:3},{value:"CLI",id:"cli",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h1,{id:"ecalc-v80",children:"eCalc v8.0"}),"\n",(0,l.jsx)(n.p,{children:"eCalc\u2122 v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some\nof the highlights:"}),"\n",(0,l.jsx)(n.h2,{id:"new-features",children:"New features"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Improved the accuracy of the compressor and pump models"}),"\n",(0,l.jsxs)(n.li,{children:["Changes to CSV output","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"reduced the number of columns"}),"\n",(0,l.jsx)(n.li,{children:"simplified headers, added units"}),"\n",(0,l.jsx)(n.li,{children:"renamed power_rate to power"}),"\n",(0,l.jsx)(n.li,{children:"the is_invalid column is now reported as is_valid"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Changes to LTP:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"renamed loading and storage columns"}),"\n",(0,l.jsx)(n.li,{children:"added categories for flare, fugitive emissions, name should no longer be used"}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["Changes to JSON:","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"json_v1 and json_v2 has been removed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"experimental-features",children:"Experimental features"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"Add maximum power limit for compressor models"}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,l.jsx)(n.p,{children:"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"}),"\n",(0,l.jsx)(n.h3,{id:"yaml",children:"YAML"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsx)(n.li,{children:"All component names must be unique to avoid ambiguity in reporting"}),"\n",(0,l.jsx)(n.li,{children:"UNITS are required when setting up compressor and pump charts"}),"\n",(0,l.jsx)(n.li,{children:"Restrict allowed characters in component names and emission names"}),"\n",(0,l.jsx)(n.li,{children:"NAME no longer used for LTP reporting, use CATEGORY instead"}),"\n",(0,l.jsx)(n.li,{children:"Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)"}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"cli",children:"CLI"}),"\n",(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsxs)(n.li,{children:["Invoking eCalc\u2122 directly is no longer supported, use ",(0,l.jsx)(n.code,{children:"ecalc run"})," instead."]}),"\n",(0,l.jsx)(n.li,{children:"Log level should be specified as the first argument + log to file"}),"\n",(0,l.jsx)(n.li,{children:"Model yaml-file needs to come last"}),"\n",(0,l.jsx)(n.li,{children:"Extrapolation (correction) is now always used and cannot be disabled"}),"\n",(0,l.jsxs)(n.li,{children:["Argument for LTP export has changed from: ",(0,l.jsx)(n.code,{children:"--centuries-ltp-export"})," to ",(0,l.jsx)(n.code,{children:"--ltp-export"})]}),"\n",(0,l.jsx)(n.li,{children:"Simple results are now default for json"}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["Check out the ",(0,l.jsx)(n.a,{href:"../about/migration_guides/v7_to_v8",children:"migration guide"})]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>a});var l=s(67294);const i={},r=l.createContext(i);function a(e){const n=l.useContext(r);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),l.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c21bc46a.dffda344.js b/assets/js/c21bc46a.dffda344.js new file mode 100644 index 0000000000..ad7ce61433 --- /dev/null +++ b/assets/js/c21bc46a.dffda344.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3443],{30734:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>l});var s=r(85893),o=r(11151);const c={},t="MODELS",d={id:"about/references/keywords/MODELS",title:"MODELS",description:"MODELS",source:"@site/docs/about/references/keywords/MODELS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/MODELS",permalink:"/ecalc/docs/about/references/keywords/MODELS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/MODELS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"MAXIMUM_PRESSURE_RATIO_PER_STAGE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE"},next:{title:"NAME",permalink:"/ecalc/docs/about/references/keywords/NAME"}},i={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Supported Model types",id:"supported-model-types",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"models",children:"MODELS"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["Each element is specified in a list. These are later used as input to other models, or in the\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup by referencing their\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["This part of the setup specifies models not having any input data and/or multi level models, that is models which use\nother models (from both ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," and from ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),")."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of model, for reference>\n TYPE: <model type>\n <other keywords according to TYPE>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"supported-model-types",children:"Supported Model types"}),"\n",(0,s.jsx)(n.p,{children:"The supported types are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"FLUID"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"COMPRESSOR_CHART"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"SINGLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"TURBINE"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"COMPRESSOR_WITH_TURBINE"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The documentation of each of these is found on the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"Compressor Modelling"})," page."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>t});var s=r(67294);const o={},c=s.createContext(o);function t(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c3d1f0cd.43748911.js b/assets/js/c3d1f0cd.43748911.js new file mode 100644 index 0000000000..180f822681 --- /dev/null +++ b/assets/js/c3d1f0cd.43748911.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4733],{56204:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>r,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>o,toc:()=>d});var l=n(85893),i=n(11151);const c={sidebar_label:"CLI"},t="ecalc",o={id:"about/references/cli_reference",title:"ecalc",description:"Args:",source:"@site/docs/about/references/cli_reference.md",sourceDirName:"about/references",slug:"/about/references/cli_reference",permalink:"/ecalc/docs/about/references/cli_reference",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/cli_reference.md",tags:[],version:"current",frontMatter:{sidebar_label:"CLI"},sidebar:"about",previous:{title:"API reference",permalink:"/ecalc/docs/about/references/api/"},next:{title:"Migrating eCalc versions",permalink:"/ecalc/docs/about/migration_guides/"}},r={},d=[{value:"<code>ecalc run</code>",id:"ecalc-run",level:2},{value:"<code>ecalc selftest</code>",id:"ecalc-selftest",level:2},{value:"<code>ecalc show</code>",id:"ecalc-show",level:2},{value:"<code>ecalc show results</code>",id:"ecalc-show-results",level:3},{value:"<code>ecalc show yaml</code>",id:"ecalc-show-yaml",level:3}];function a(e){const s={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.h1,{id:"ecalc",children:(0,l.jsx)(s.code,{children:"ecalc"})}),"\n",(0,l.jsx)(s.p,{children:"Args:\nlog_level: Log level of the CLI logger, defaults to INFO\nlog_folder: Path to location of log files\nversion: Option to show libecalc version."}),"\n",(0,l.jsx)(s.p,{children:"Returns:"}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc [OPTIONS] COMMAND [ARGS]...\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--log [ERROR|WARNING|INFO|DEBUG]"}),": Set the loglevel. [default: INFO]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--log-folder PATH"}),": Store log files in a folder"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--version"}),": Show current eCalc\u2122 version."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--install-completion [bash|zsh|fish|powershell|pwsh]"}),": Install completion for the specified shell."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--show-completion [bash|zsh|fish|powershell|pwsh]"}),": Show completion for the specified shell, to copy it or customize the installation."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Commands"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"run"}),": CLI command to run a ecalc model."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"selftest"}),": Test that eCalc has been successfully..."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"show"}),": Command to show information in the model..."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-run",children:(0,l.jsx)(s.code,{children:"ecalc run"})}),"\n",(0,l.jsx)(s.p,{children:"CLI command to run a ecalc model."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc run [OPTIONS] MODEL_FILE\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Arguments"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"MODEL_FILE"}),": The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]"]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]"}),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-c, --csv"}),": Toggle output of csv data. [default: True]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--json"}),": Toggle output of json output."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-o, --output-folder, --outputfolder PATH"}),": Outputfolder. Defaults to output/ relative to the yml setup file"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-n, --name-prefix, --nameprefix TEXT"}),": Name prefix for output data. Defaults to name of setup file."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--ltp-export"}),": In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values)."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--stp-export"}),": In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values)."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--flow-diagram"}),": Output the input model formatted to be displayed in a custom flow diagram format in JSON"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--detailed-output, --detailedoutput"}),": Output detailed output. When False you will get basic results such as energy usage, power, time vector."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--date-format-option [0|1|2]"}),': Date format option. 0: "YYYY-MM-DD HH:MM',":SS",'" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM',":SS",'" (ISO8601), 2: "DD.MM.YYYY HH:MM',":SS",'". Default 0 (ISO 8601) [default: 0]']}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-selftest",children:(0,l.jsx)(s.code,{children:"ecalc selftest"})}),"\n",(0,l.jsx)(s.p,{children:"Test that eCalc has been successfully installed"}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc selftest [OPTIONS]\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h2,{id:"ecalc-show",children:(0,l.jsx)(s.code,{children:"ecalc show"})}),"\n",(0,l.jsx)(s.p,{children:"Command to show information in the model or results."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show [OPTIONS] COMMAND [ARGS]...\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Commands"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"results"}),": Show results."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"yaml"}),": Show yaml model."]}),"\n"]}),"\n",(0,l.jsx)(s.h3,{id:"ecalc-show-results",children:(0,l.jsx)(s.code,{children:"ecalc show results"})}),"\n",(0,l.jsx)(s.p,{children:"Show results. You need to run eCalc\u2122 before this will be available."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show results [OPTIONS]\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-n, --name TEXT"}),": Filter the results to only show the component with this name"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--output-format [csv|json]"}),": Show the data in this format. [default: json]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--file PATH"}),": Write the data to a file with the specified name."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--output-folder PATH"}),": Output folder. Defaults to current working directory"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--detailed-output"}),": Output detailed output. When False you will get basic energy usage and emissions results"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--date-format-option [0|1|2]"}),': Date format option. 0: "YYYY-MM-DD HH:MM',":SS",'" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM',":SS",'" (ISO8601), 2: "DD.MM.YYYY HH:MM',":SS",'". Default 0 (ISO 8601) [default: 0]']}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"-f, --output-frequency [NONE|YEAR|MONTH|DAY]"}),": Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]"]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]}),"\n",(0,l.jsx)(s.h3,{id:"ecalc-show-yaml",children:(0,l.jsx)(s.code,{children:"ecalc show yaml"})}),"\n",(0,l.jsx)(s.p,{children:"Show yaml model. This will show the yaml after processing !include."}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Usage"}),":"]}),"\n",(0,l.jsx)(s.pre,{children:(0,l.jsx)(s.code,{className:"language-console",children:"$ ecalc show yaml [OPTIONS] MODEL_FILE\n"})}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Arguments"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"MODEL_FILE"}),": YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]"]}),"\n"]}),"\n",(0,l.jsxs)(s.p,{children:[(0,l.jsx)(s.strong,{children:"Options"}),":"]}),"\n",(0,l.jsxs)(s.ul,{children:["\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--file PATH"}),": Write the data to a file with the specified name."]}),"\n",(0,l.jsxs)(s.li,{children:[(0,l.jsx)(s.code,{children:"--help"}),": Show this message and exit."]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,l.jsx)(s,{...e,children:(0,l.jsx)(a,{...e})}):a(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>t});var l=n(67294);const i={},c=l.createContext(i);function t(e){const s=l.useContext(c);return l.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),l.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c5daebe9.57e3eaf1.js b/assets/js/c5daebe9.57e3eaf1.js new file mode 100644 index 0000000000..c1800458b2 --- /dev/null +++ b/assets/js/c5daebe9.57e3eaf1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2013],{27442:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=r(85893),s=r(11151);const o={},c="TURBINE_LOAD",a={id:"about/references/keywords/TURBINE_LOAD",title:"TURBINE_LOAD",description:"Description",source:"@site/docs/about/references/keywords/TURBINE_LOAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TURBINE_LOAD",permalink:"/ecalc/docs/about/references/keywords/TURBINE_LOAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TURBINE_LOAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES"},next:{title:"TURBINE_MODEL",permalink:"/ecalc/docs/about/references/keywords/TURBINE_MODEL"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"turbine_load",children:"TURBINE_LOAD"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"TURBINE_LOAD"})," is a required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword."]}),"\n",(0,t.jsxs)(n.p,{children:["This ",(0,t.jsx)(n.strong,{children:"must"})," be specified in MW (Mega-Watts) and ",(0,t.jsx)(n.strong,{children:"must"})," have equal length to the corresponding ",(0,t.jsx)(n.code,{children:"TURBINE_EFFICIENCY"})," values."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n TURBINE_LOADS: <list of power values in mega watt>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(67294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c8caddd1.c09a1e7d.js b/assets/js/c8caddd1.c09a1e7d.js new file mode 100644 index 0000000000..e9115b4558 --- /dev/null +++ b/assets/js/c8caddd1.c09a1e7d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6721],{36703:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=i(85893),o=i(11151);const s={},r="Get started",l={id:"contribute/get-started",title:"Get started",description:"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96",source:"@site/docs/contribute/01-get-started.md",sourceDirName:"contribute",slug:"/contribute/get-started",permalink:"/ecalc/docs/contribute/get-started",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/01-get-started.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"contribute",next:{title:"Documentation",permalink:"/ecalc/docs/category/documentation"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"How to contribute",id:"how-to-contribute",level:2},{value:"Initiate change",id:"initiate-change",level:3},{value:"Make a Pull Request",id:"make-a-pull-request",level:3},{value:"Get code review",id:"get-code-review",level:3},{value:"Guidelines",id:"guidelines",level:2},{value:"Pull Requests",id:"pull-requests",level:2},{value:"Git commit format",id:"git-commit-format",level:2},{value:"Readability",id:"readability",level:2},{value:"Code style",id:"code-style",level:3}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"get-started",children:"Get started"}),"\n",(0,n.jsx)(t.p,{children:"Welcome! We are glad that you want to contribute to our project! \ud83d\udc96"}),"\n",(0,n.jsx)(t.p,{children:"This project accepts contributions via GitHub Pull Requests."}),"\n",(0,n.jsx)(t.p,{children:"This document outlines the process to help get your contribution accepted."}),"\n",(0,n.jsx)(t.p,{children:"There are many ways to contribute:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Suggest ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=&template=feature_request.md&title=",children:"features"})]}),"\n",(0,n.jsxs)(t.li,{children:["Suggest ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=bug&template=code-maintainer.md&title=",children:"changes"})]}),"\n",(0,n.jsxs)(t.li,{children:["Report ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues/new?assignees=&labels=bug&template=bug_report.md&title=",children:"bugs"})]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["You can start by looking through the ",(0,n.jsx)(t.a,{href:"https://github.com/equinor/ecalc/issues",children:"GitHub Issues"})," filtered by labels."]}),"\n",(0,n.jsxs)(t.admonition,{type:"info",children:[(0,n.jsxs)(t.p,{children:["We follow some contributor guidelines that you will find in our ",(0,n.jsx)(t.a,{href:"#guidelines",children:"contributor guidelines"}),"."]}),(0,n.jsxs)(t.p,{children:["Don't worry if your contribution does not follow all the guidelines. We will guide you in the ",(0,n.jsx)(t.a,{href:"#get-code-review",children:"code review process"}),".\nThe threshold for contributing is low, and we appreciate any contribution great or small. \ud83d\ude4f"]})]}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["See ",(0,n.jsx)(t.a,{href:"/ecalc/docs/contribute/documentation-guide/documentation",children:"Documentation guide"})," for how to get started with contributions to this\ndocumentation."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"how-to-contribute",children:"How to contribute"}),"\n",(0,n.jsx)(t.p,{children:"Contribution is done in 3 simple steps:"}),"\n",(0,n.jsx)(t.h3,{id:"initiate-change",children:"Initiate change"}),"\n",(0,n.jsx)(t.p,{children:"For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient\nto explain the change without referring to an issue."}),"\n",(0,n.jsx)(t.h3,{id:"make-a-pull-request",children:"Make a Pull Request"}),"\n",(0,n.jsx)(t.p,{children:"To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role."}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:["Equinor internal contributors, you may open a ",(0,n.jsx)(t.a,{href:"guides/git#pull-requests",children:"Pull Request directly"}),","]}),"\n",(0,n.jsxs)(t.li,{children:["Independent contributors, you will ",(0,n.jsx)(t.a,{href:"guides/git#fork-the-repository",children:"Fork the repository"}),"."]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"get-code-review",children:"Get code review"}),"\n",(0,n.jsx)(t.p,{children:"Once a Pull Request has been made, we will give you feedback and maybe suggest changes."}),"\n",(0,n.jsxs)(t.p,{children:["The core team looks at pull requests on a regular basis, we review the code and guide you if needed.\nHere you will find more information about the\n",(0,n.jsx)(t.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews",children:"GitHub Code Review Process"})]}),"\n",(0,n.jsx)(t.h2,{id:"guidelines",children:"Guidelines"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"For major changes, please open an issue first to discuss what you would like to change"}),"\n",(0,n.jsx)(t.li,{children:"Work on your own fork of the main repo"}),"\n",(0,n.jsx)(t.li,{children:"Use a separate branch for each issue you\u2019re working on"}),"\n",(0,n.jsxs)(t.li,{children:["Use conventional commit. See our ",(0,n.jsx)(t.a,{href:"#git-commit-format",children:"Git commit format"})," for details,\nand our ",(0,n.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/git",children:"Git guide"})," for our full guide"]}),"\n",(0,n.jsxs)(t.li,{children:["Please include ",(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Unit_testing",children:"unit tests"})," with all your code changes"]}),"\n",(0,n.jsxs)(t.li,{children:["We follow ",(0,n.jsx)(t.a,{href:"https://trunkbaseddevelopment.com/",children:"Trunk Based Development"})," style of working with short-lived feature\nbranches."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"pull-requests",children:"Pull Requests"}),"\n",(0,n.jsxs)(t.p,{children:["Please try to make your ",(0,n.jsx)(t.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests",children:"Pull Requests"})," easy to review for us."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon."}),"\n",(0,n.jsx)(t.li,{children:"Don't make changes unrelated to the goals of your PR."}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["While you're writing up the pull request, you can add ",(0,n.jsx)(t.code,{children:"closes #<issue number>"})," in the message body where issue number\nis the issue you're fixing. Therefore, an example would be ",(0,n.jsx)(t.code,{children:"closes #42"})," would close issue #42."]}),"\n",(0,n.jsx)(t.h2,{id:"git-commit-format",children:"Git commit format"}),"\n",(0,n.jsxs)(t.p,{children:["Git commits are required to follow ",(0,n.jsx)(t.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"conventional commits"}),". Please see\nour ",(0,n.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/conventional-commits",children:"Conventional Commit Guide"})," for examples."]}),"\n",(0,n.jsx)(t.h2,{id:"readability",children:"Readability"}),"\n",(0,n.jsxs)(t.p,{children:["We use the ",(0,n.jsx)(t.a,{href:"https://pre-commit.com/",children:"pre-commit hooks"})," in order to ensure uniform formatting and to exclude potential code issues."]}),"\n",(0,n.jsx)(t.p,{children:"We strive for readable code. A few good tips are:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Self-documenting_code",children:"Self-documenting code"})," with self-explaining variable names"]}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Composition_over_inheritance",children:"Composition over inheritance"})}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Functional_programming",children:"Functional code"})," over Object-Oriented Code"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://ruggedsoftware.org/",children:"Rugged code"})," to write more robust code"]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Domain-driven_design",children:"Domain Driven Design"})," to to match the code with the domain we are working on"]}),"\n"]}),"\n",(0,n.jsx)(t.h3,{id:"code-style",children:"Code style"}),"\n",(0,n.jsx)(t.p,{children:"Except for the pre-commits hooks mentioned above, we also strive to follow the following code style:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Use capital letters for constants i.e. SECONDS_PER_HOUR"}),"\n",(0,n.jsx)(t.li,{children:"Try to split methods/modules/classes into smaller bits of code"}),"\n",(0,n.jsx)(t.li,{children:"Remove, do not comment out, unused code"}),"\n",(0,n.jsx)(t.li,{children:"Use types and type hinting"}),"\n",(0,n.jsx)(t.li,{children:"We comment the code when it is not self-explanatory"}),"\n",(0,n.jsxs)(t.li,{children:["Be consistent with existing code style - try to make it look like the code is written by ",(0,n.jsx)(t.strong,{children:"one"})," developer"]}),"\n",(0,n.jsxs)(t.li,{children:["For Python, we follow ",(0,n.jsx)(t.a,{href:"https://peps.python.org/pep-0008/",children:"PEP 8 \u2013 Style Guide for Python Code"})," and ",(0,n.jsx)(t.a,{href:"https://peps.python.org/pep-0020/",children:"PEP 20 - The Zen of Python"}),":"]}),"\n"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.\nReadability counts.\nSpecial cases aren't special enough to break the rules.\nAlthough practicality beats purity.\nErrors should never pass silently.\nUnless explicitly silenced.\nIn the face of ambiguity, refuse the temptation to guess.\nThere should be one-- and preferably only one --obvious way to do it.\nAlthough that way may not be obvious at first unless you're Dutch.\nNow is better than never.\nAlthough never is often better than *right* now.\nIf the implementation is hard to explain, it's a bad idea.\nIf the implementation is easy to explain, it may be a good idea.\nNamespaces are one honking great idea -- let's do more of those!\n"})}),"\n",(0,n.jsx)(t.p,{children:"Please reach out to us if you have any questions. \ud83d\udc4b"}),"\n",(0,n.jsx)(t.p,{children:"Thank you for your contribution! \ud83c\udf89"})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,t,i)=>{i.d(t,{Z:()=>l,a:()=>r});var n=i(67294);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c90bf1e8.db11fafc.js b/assets/js/c90bf1e8.db11fafc.js new file mode 100644 index 0000000000..a14a6623b8 --- /dev/null +++ b/assets/js/c90bf1e8.db11fafc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8186],{6378:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>i});var t=s(85893),r=s(11151);const o={slug:"v7-3-release",title:"v7.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:6},l="eCalc v7.3",c={id:"changelog/v7-3",title:"v7.3",description:"Features",source:"@site/docs/changelog/v7-3.md",sourceDirName:"changelog",slug:"/changelog/v7-3-release",permalink:"/ecalc/docs/changelog/v7-3-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-3.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:6,frontMatter:{slug:"v7-3-release",title:"v7.3",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:6},sidebar:"changelog",previous:{title:"v7.2",permalink:"/ecalc/docs/changelog/v7-2-release"},next:{title:"v7.4",permalink:"/ecalc/docs/changelog/v7-4-release"}},a={},i=[{value:"<em>Features</em>",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v73",children:"eCalc v7.3"}),"\n",(0,t.jsx)(n.h2,{id:"features",children:(0,t.jsx)(n.em,{children:"Features"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["BREAKING CHANGE!:\n",(0,t.jsx)(n.code,{children:"Fixed speed pressure control"})," options changed. One option is added, where the ASV is modelled as\nbeing common for the entire train, and the names of the options with individual ASVs have changed.\nThe available options for pressure control in a single speed compressor train are now:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"UPSTREAM_CHOKE"}),"\n",(0,t.jsx)(n.li,{children:"DOWNSTREAM_CHOKE"}),"\n",(0,t.jsx)(n.li,{children:"COMMON_ASV (NEW)"}),"\n",(0,t.jsx)(n.li,{children:"INDIVIDUAL_ASV_RATE (changed from ASV_BALANCED_MARGIN)"}),"\n",(0,t.jsx)(n.li,{children:"INDIVIDUAL_ASV_PRESSURE (changed from ASV_WITH_BALANCED_PRESSURE_RATIOS)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"fixes",children:(0,t.jsx)(n.em,{children:"Fixes"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Power rate reporting now works for consumer systems for supported compressor models for LTP reporting."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>l});var t=s(67294);const r={},o=t.createContext(r);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c93dcb87.3428dcd7.js b/assets/js/c93dcb87.3428dcd7.js new file mode 100644 index 0000000000..8c10ae87c6 --- /dev/null +++ b/assets/js/c93dcb87.3428dcd7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4168],{49219:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>o,default:()=>E,frontMatter:()=>c,metadata:()=>d,toc:()=>l});var t=n(85893),s=n(11151);const c={},o="CONSUMERS",d={id:"about/references/keywords/CONSUMERS",title:"CONSUMERS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONSUMERS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSUMERS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT"},next:{title:"CONSUMPTION_RATE_TYPE",permalink:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE"}},a={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function i(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"consumers",children:"CONSUMERS"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"Yes"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"GENERATORSETS"})}),(0,t.jsxs)(r.td,{children:[(0,t.jsx)(r.code,{children:"CATEGORY"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"NAME"})," ",(0,t.jsx)("br",{})," ",(0,t.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})]})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["Consumers getting electrical power from the generator set. The attributes ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"}),",\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"})," and ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nare all required"]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"CONSUMERS:\n - NAME: <consumer name>\n CATEGORY: <category>\n ENERGY_USAGE_MODEL: <energy usage model>\n"})}),"\n",(0,t.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"CONSUMERS:\n - NAME: SomeElectricalConsumer\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n - NAME: SomeOtherElectricalConsumer\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n ...\n - NAME: ElectricalConsumerN\n CATEGORY: MISCELLANEOUS\n ENERGY_USAGE_MODEL:\n <energy usage model data>\n"})})]})}function E(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var t=n(67294);const s={},c=t.createContext(s);function o(e){const r=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(c.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9b29382.c2e26cd6.js b/assets/js/c9b29382.c2e26cd6.js new file mode 100644 index 0000000000..9f0452c5e6 --- /dev/null +++ b/assets/js/c9b29382.c2e26cd6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8285],{79222:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>t,metadata:()=>d,toc:()=>S});var s=r(85893),o=r(11151);const t={},c="COMPRESSORS",d={id:"about/references/keywords/COMPRESSOR_SYSTEM",title:"COMPRESSORS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_SYSTEM",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL"},next:{title:"COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL"}},a={},S=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1",id:"example-1",level:2},{value:"Example 2 (Detailed)",id:"example-2-detailed",level:2}];function i(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR_SYSTEM"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Yes"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(n.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"Used to define a list of compressors in a compressor system model ("}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," of type ",(0,s.jsx)(n.code,{children:"COMPRESSOR_SYSTEM"}),").\nEach compressor is defined with a name and a reference to a compressor energy function defined in either\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," or ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model in facility inputs>\n TOTAL_SYSTEM_RATE: <optional total system rate [Sm3/day]>\n OPERATIONAL_SETTINGS: <operational settings>\n"})}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})," for details."]}),"\n",(0,s.jsx)(n.h2,{id:"example-1",children:"Example 1"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example-2-detailed",children:"Example 2 (Detailed)"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"When adding a \u201cDATE\u201d the next line is indented."})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"- NAME: gassys27\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n 2020-04-01:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: gassys27a\n COMPRESSOR_MODEL: gas3da\n - NAME: gassys27b\n COMPRESSOR_MODEL: gas3db\n TOTAL_SYSTEM_RATE: SIM8;GAS_PROD # [Sm3/day]\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURE: 155\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURE: 155\n"})})]})}function E(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>c});var s=r(67294);const o={},t=s.createContext(o);function c(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cb266b33.dd733855.js b/assets/js/cb266b33.dd733855.js new file mode 100644 index 0000000000..7681f1b663 --- /dev/null +++ b/assets/js/cb266b33.dd733855.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2706],{35982:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>t,metadata:()=>a,toc:()=>i});var o=r(85893),s=r(11151);const t={},c="LOAD",a={id:"about/references/keywords/LOAD",title:"LOAD",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/LOAD.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/LOAD.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE"},next:{title:"LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"load",children:"LOAD"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,o.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/LOAD",children:"LOAD"})]}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:["Used for direct load ",(0,o.jsx)(n.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"})," to define electrical power load directly\nwith an ",(0,o.jsx)(n.code,{children:"expression <Expressions>"})]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: <load expression>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION: <condition expression>\n POWERLOSSFACTOR: <power loss factor (number)>\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var o=r(67294);const s={},t=o.createContext(s);function c(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cbe196b2.4b99558d.js b/assets/js/cbe196b2.4b99558d.js new file mode 100644 index 0000000000..61a1c97d85 --- /dev/null +++ b/assets/js/cbe196b2.4b99558d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4734],{54918:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var n=r(85893),o=r(11151);const s={},c="FILE",a={id:"about/references/keywords/FILE",title:"FILE",description:"... /",source:"@site/docs/about/references/keywords/FILE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FILE",permalink:"/ecalc/docs/about/references/keywords/FILE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FILE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR"},next:{title:"FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"file",children:"FILE"}),"\n",(0,n.jsxs)(t.p,{children:["... /\n",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/FILE",children:"FILE"})]}),"\n",(0,n.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,n.jsx)(t.p,{children:"Specifies the path (relative or absolute) to the input file."}),"\n",(0,n.jsxs)(t.p,{children:["The path should be a reference to a ",(0,n.jsx)(t.a,{href:"https://en.wikipedia.org/wiki/Comma-separated_values",children:"CSV"})," file."]}),"\n",(0,n.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-yaml",children:"FILE: </path/to/file.csv>\n"})}),"\n",(0,n.jsx)(t.h2,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(t.p,{children:["See the ",(0,n.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," ",(0,n.jsx)(t.code,{children:"time_series_format"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,t,r)=>{r.d(t,{Z:()=>a,a:()=>c});var n=r(67294);const o={},s=n.createContext(o);function c(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cc88a418.debf1f02.js b/assets/js/cc88a418.debf1f02.js new file mode 100644 index 0000000000..d886a1e276 --- /dev/null +++ b/assets/js/cc88a418.debf1f02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2e3],{24381:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>t,metadata:()=>d,toc:()=>i});var s=n(85893),o=n(11151);const t={},c="COMPRESSOR_TRAIN_MODEL",d={id:"about/references/keywords/COMPRESSOR_TRAIN_MODEL",title:"COMPRESSOR_TRAIN_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_TRAIN_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"COMPRESSORS",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"},next:{title:"CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"compressor_train_model",children:"COMPRESSOR_TRAIN_MODEL"}),"\n",(0,s.jsxs)(r.p,{children:[(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",children:"COMPRESSOR_TRAIN_MODEL"})]}),"\n",(0,s.jsxs)(r.table,{children:[(0,s.jsx)(r.thead,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.th,{children:"Required"}),(0,s.jsx)(r.th,{children:"Child of"}),(0,s.jsx)(r.th,{children:"Children/Options"})]})}),(0,s.jsx)(r.tbody,{children:(0,s.jsxs)(r.tr,{children:[(0,s.jsx)(r.td,{children:"Yes"}),(0,s.jsx)(r.td,{children:(0,s.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})}),(0,s.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,s.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(r.p,{children:["Reference to an compressor train model defined in ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," or\n",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," used for ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nTYPE ",(0,s.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n COMPRESSOR_TRAIN_MODEL: <reference to compressor train model in facility inputs or models of compressor type>\n"})}),"\n",(0,s.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: advanced_compressor_train\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS:\n -\n -\n\n...\n\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n COMPRESSOR_TRAIN_MODEL: advanced_compressor_train\n"})})]})}function E(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>c});var s=n(67294);const o={},t=s.createContext(o);function c(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccf7588a.7ca310d4.js b/assets/js/ccf7588a.7ca310d4.js new file mode 100644 index 0000000000..8bb2bc4a5c --- /dev/null +++ b/assets/js/ccf7588a.7ca310d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8967],{84589:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>t,toc:()=>c});var n=a(85893),i=a(11151);const l={},r="FACTOR",t={id:"about/references/keywords/FACTOR",title:"FACTOR",description:"[...] /",source:"@site/docs/about/references/keywords/FACTOR.mdx",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FACTOR",permalink:"/ecalc/docs/about/references/keywords/FACTOR",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FACTOR.mdx",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FACILITY_INPUTS",permalink:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS"},next:{title:"FILE",permalink:"/ecalc/docs/about/references/keywords/FILE"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2},{value:"Use in ADJUSTMENT",id:"use-in-adjustment-1",level:3},{value:"Use in EMISSIONS",id:"use-in-emissions-1",level:3}];function h(s){const e={a:"a",admonition:"admonition",annotation:"annotation",code:"code",h1:"h1",h2:"h2",h3:"h3",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"factor",children:"FACTOR"}),"\n",(0,n.jsxs)(e.p,{children:["[...] /\n",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(e.p,{children:["The keyword ",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," can be used to add a multiplier. The\n",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," keyword can be used in various places in the eCalc configuration file.\nA factor can either be a number, or an ",(0,n.jsx)(e.code,{children:"expression <Expressions>"}),"."]}),"\n",(0,n.jsx)(e.admonition,{title:"Warning",type:"warning",children:(0,n.jsxs)(e.p,{children:["The ",(0,n.jsx)(e.a,{href:"FACTOR",children:"FACTOR"})," keyword will have slightly different behavior depending on in which keyword\nit is used. Carefully read the documentation below!"]})}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-adjustment",children:["Use in ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsx)(e.p,{children:"Adjustment of input data with a factor."}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-emissions",children:["Use in ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,n.jsxs)(e.p,{children:["A single value with unit kg/Sm",(0,n.jsx)("sup",{children:"3"})," defines the CO",(0,n.jsx)("sub",{children:"2"})," factor for the fuel gas used on the\ninstallation. That is, how many kilograms of CO",(0,n.jsx)("sub",{children:"2"})," are emitted"]}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"FACTOR: <VALUE>\n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-adjustment-1",children:["Use in ",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})]}),"\n",(0,n.jsx)(e.p,{children:"Say you have input that that is of by 3% percentage.\nYou could fix this like:"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n FACTOR: 1.03\n"})}),"\n",(0,n.jsxs)(e.p,{children:["The resulting energy consumption ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsx)(e.mn,{children:"1.03"}),(0,n.jsx)(e.mo,{children:"\xd7"}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = 1.03 \\times E_\\mathrm{original}"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,n.jsx)(e.span,{className:"mord",children:"1.03"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\xd7"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]}),"\n",(0,n.jsxs)(e.h3,{id:"use-in-emissions-1",children:["Use in ",(0,n.jsx)(e.a,{href:"/ecalc/docs/about/references/keywords/EMISSIONS",children:"EMISSIONS"})]}),"\n",(0,n.jsxs)(e.p,{children:["Say your fuel emits 2.5 kg CO",(0,n.jsx)("sub",{children:"2"})," per Sm",(0,n.jsx)("sup",{children:"3"})," of burned fuel, you can model this like:"]}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: my_fuel\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.5 # [kg/Sm3]\n"})})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},11151:(s,e,a)=>{a.d(e,{Z:()=>t,a:()=>r});var n=a(67294);const i={},l=n.createContext(i);function r(s){const e=n.useContext(l);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function t(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(l.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/cda37ba5.21794b26.js b/assets/js/cda37ba5.21794b26.js new file mode 100644 index 0000000000..6a0106910c --- /dev/null +++ b/assets/js/cda37ba5.21794b26.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4189],{88572:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>i});var t=a(85893),c=a(11151);const s={slug:"v7-6-release",title:"v7.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:9},l="eCalc v7.6",r={id:"changelog/v7-6",title:"v7.6",description:"Breaking changes",source:"@site/docs/changelog/v7-6.md",sourceDirName:"changelog",slug:"/changelog/v7-6-release",permalink:"/ecalc/docs/changelog/v7-6-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-6.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:9,frontMatter:{slug:"v7-6-release",title:"v7.6",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:9},sidebar:"changelog",previous:{title:"v7.5",permalink:"/ecalc/docs/changelog/v7-5-release"},next:{title:"v8.0",permalink:"/ecalc/docs/changelog/v8.0-release"}},o={},i=[{value:"Breaking changes",id:"breaking-changes",level:2}];function u(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v76",children:"eCalc v7.6"}),"\n",(0,t.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["UNITS are now required for PUMP_CHART and COMPRESSOR_CHART, see ",(0,t.jsx)(n.a,{href:"../about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"pump charts"}),"\nand ",(0,t.jsx)(n.a,{href:"../about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"compressor charts"})]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>l});var t=a(67294);const c={},s=t.createContext(c);function l(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:l(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d17664a7.93f64476.js b/assets/js/d17664a7.93f64476.js new file mode 100644 index 0000000000..24328036ff --- /dev/null +++ b/assets/js/d17664a7.93f64476.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6922],{54488:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>c,default:()=>E,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=r(85893),t=r(11151);const o={},c="STREAMS",a={id:"about/references/keywords/STREAMS",title:"STREAMS",description:"MODELS /",source:"@site/docs/about/references/keywords/STREAMS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/STREAMS",permalink:"/ecalc/docs/about/references/keywords/STREAMS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/STREAMS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"STREAM",permalink:"/ecalc/docs/about/references/keywords/STREAM"},next:{title:"SUCTION_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"streams",children:"STREAMS"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/STREAMS",children:"STREAMS"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["This keyword can ",(0,s.jsx)(n.strong,{children:"only"})," be utilised for a ",(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," model type."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"STREAMS"})," is a list of all in- and out-going streams for the compressor train."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The same equation of state (EOS) must be used for each INGOING stream fluid models"}),"\n",(0,s.jsxs)(n.li,{children:["OUTGOING fluid models ",(0,s.jsx)(n.strong,{children:"cannot"})," be specified."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: <name of stream 1>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - NAME: <name of stream 2>\n TYPE: INGOING\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n - ...\n - NAME: <name of stream N>\n TYPE: OUTGOING \n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_model\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n STREAMS: \n - NAME: 1_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_1\n - NAME: 3_stage_inlet\n TYPE: INGOING\n FLUID_MODEL: fluid_model_2\n - NAME: 2_stage_outlet\n TYPE: OUTGOING\n ...\n"})})]})}function E(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var s=r(67294);const t={},o=s.createContext(t);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d185ab52.4428bb46.js b/assets/js/d185ab52.4428bb46.js new file mode 100644 index 0000000000..31134ecfca --- /dev/null +++ b/assets/js/d185ab52.4428bb46.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9524],{27407:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>E,contentTitle:()=>o,default:()=>T,frontMatter:()=>c,metadata:()=>a,toc:()=>d});var t=r(85893),s=r(11151);const c={},o="TOTAL_SYSTEM_RATE",a={id:"about/references/keywords/TOTAL_SYSTEM_RATE",title:"TOTAL_SYSTEM_RATE",description:"INSTALLATIONS / [...] /",source:"@site/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/TOTAL_SYSTEM_RATE",permalink:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"TIME_SERIES",permalink:"/ecalc/docs/about/references/keywords/TIME_SERIES"},next:{title:"TURBINE_EFFICIENCIES",permalink:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES"}},E={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function i(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"total_system_rate",children:"TOTAL_SYSTEM_RATE"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," / [...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",children:"TOTAL_SYSTEM_RATE"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used to define the total system rate [Sm",(0,t.jsx)("sup",{children:"3"}),"/day] for ",(0,t.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," of type ",(0,t.jsx)(n.code,{children:"COMPRESSOR_SYSTEM"}),"\nand ",(0,t.jsx)(n.code,{children:"PUMP_SYSTEM"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system [Sm3/day]>\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n"})})]})}function T(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>o});var t=r(67294);const s={},c=t.createContext(s);function o(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d19423a2.bfad80c3.js b/assets/js/d19423a2.bfad80c3.js new file mode 100644 index 0000000000..6afdd418a6 --- /dev/null +++ b/assets/js/d19423a2.bfad80c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1686],{93447:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>a,toc:()=>u});var o=n(85893),i=n(11151);const s={title:"Overview"},r="Get started",a={id:"contribute/documentation-guide/documentation",title:"Overview",description:"This site was generated from the contents of your documentation folder using Docusaurus.",source:"@site/docs/contribute/documentation-guide/01-documentation.md",sourceDirName:"contribute/documentation-guide",slug:"/contribute/documentation-guide/documentation",permalink:"/ecalc/docs/contribute/documentation-guide/documentation",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/contribute/documentation-guide/01-documentation.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Overview"},sidebar:"contribute",previous:{title:"Documentation",permalink:"/ecalc/docs/category/documentation"},next:{title:"Markdown",permalink:"/ecalc/docs/contribute/documentation-guide/markdown"}},c={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Contributing",id:"contributing",level:2},{value:"How it works",id:"how-it-works",level:2},{value:"Special features",id:"special-features",level:2}];function d(e){const t={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"get-started",children:"Get started"}),"\n",(0,o.jsxs)(t.p,{children:["This site was generated from the contents of your ",(0,o.jsx)(t.code,{children:"documentation"})," folder using ",(0,o.jsx)(t.a,{href:"https://docusaurus.io/",children:"Docusaurus"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["You will find the full documentation of Docusaurus here: ",(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next",children:"Docusaurus Docs"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsxs)(t.p,{children:["You can contribute as long as you have access to the ",(0,o.jsx)(t.a,{href:"https://github.com/equinor/ecalc",children:"ecalc - GitHub Repository"}),".\nIt is entirely possible to make changes by using your web browser alone. However, if you want to get live feedback on your\nchanges, we recommend that you run the documentation locally with the following prerequisites:"]}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.em,{children:"Linux or macOS"}),": For ",(0,o.jsx)(t.a,{href:"https://docs.microsoft.com/en-us/windows/wsl/install-win10",children:"Windows you can run Ubuntu or similar in WSL 2"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.em,{children:"Git"}),": ",(0,o.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/git#setting-up-git",children:"Set up Git"})]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.em,{children:"Node"}),": Download from nodejs.org or use ",(0,o.jsx)(t.a,{href:"https://github.com/nvm-sh/nvm",children:"nvm"})]}),"\n"]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Since not all managed computers have the ability to install Node, you can use an IDE such as PyCharm, IntelliJ, VSCode, or similar, to preview Markdown code.\nThis has some limitations such as missing navigation bar, and it does not preview Docusaurus specific syntax such as the Admonitions used here."})}),"\n",(0,o.jsx)(t.h2,{id:"contributing",children:"Contributing"}),"\n",(0,o.jsxs)(t.p,{children:["As a contributor you will have to use Git. Please find the ",(0,o.jsx)(t.a,{href:"/ecalc/docs/contribute/guides/git",children:"Git Documentation"})," for more details about git."]}),"\n",(0,o.jsx)(t.h2,{id:"how-it-works",children:"How it works"}),"\n",(0,o.jsx)(t.p,{children:"From Docusaurus own documentation:"}),"\n",(0,o.jsxs)(t.blockquote,{children:["\n",(0,o.jsx)(t.p,{children:"Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc)."}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in ",(0,o.jsx)(t.code,{children:"documentation/docs"}),". This is where you as a collaborator are encouraged to make changes."]}),"\n",(0,o.jsxs)(t.p,{children:["For a quick intro to Markdown, see our ",(0,o.jsx)(t.a,{href:"/ecalc/docs/contribute/documentation-guide/markdown",children:"Markdown section"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"special-features",children:"Special features"}),"\n",(0,o.jsx)(t.p,{children:"Docusuaurs has some special features that we are using actively. Please find the links listed here:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/math-equations",children:"Math Equations using LaTeX"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/code-blocks",children:"Code blocks"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/admonitions",children:"Admonitions"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/diagrams",children:"Diagrams using Mermaid"})}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.a,{href:"https://docusaurus.io/docs/next/markdown-features/head-metadata",children:"Head metadata"})," to set titles, menu order, etc."]}),"\n"]})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>r});var o=n(67294);const i={},s=o.createContext(i);function r(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d2b7592b.3c905ba4.js b/assets/js/d2b7592b.3c905ba4.js new file mode 100644 index 0000000000..2a69b8bdfe --- /dev/null +++ b/assets/js/d2b7592b.3c905ba4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3305],{60253:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>c,metadata:()=>t,toc:()=>a});var r=n(85893),o=n(11151);const c={},i="OPERATIONAL_SETTINGS",t={id:"about/references/keywords/OPERATIONAL_SETTINGS",title:"OPERATIONAL_SETTINGS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/OPERATIONAL_SETTINGS",permalink:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"NAME",permalink:"/ecalc/docs/about/references/keywords/NAME"},next:{title:"POWERLOSSFACTOR",permalink:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR"}},d={},a=[{value:"Description",id:"description",level:2},{value:"RATES",id:"rates",level:3},{value:"RATE_FRACTIONS",id:"rate_fractions",level:3},{value:"SUCTION_PRESSURES",id:"suction_pressures",level:3},{value:"DISCHARGE_PRESSURES",id:"discharge_pressures",level:3},{value:"FLUID_DENSITIES",id:"fluid_densities",level:3},{value:"CROSSOVER",id:"crossover",level:3},{value:"Example 1:",id:"example-1",level:3},{value:"Example 2:",id:"example-2",level:3},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function S(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"operational_settings",children:"OPERATIONAL_SETTINGS"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",children:"OPERATIONAL_SETTINGS"})]}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(s.p,{children:["Used to define the operational settings in an ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nof type ",(0,r.jsx)(s.code,{children:"PUMP_SYSTEM"})," or ",(0,r.jsx)(s.code,{children:"COMPRESSOR_SYSTEM"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["The rate [Sm",(0,r.jsx)("sup",{children:"3"}),"/day] through each consumer in the system may be specified in two different ways, either directly using\n",(0,r.jsx)(s.code,{children:"RATES"}),", or by defining the ",(0,r.jsx)(s.code,{children:"rate fraction<RATE_FRACTIONS>"})," for each consumer which is then multiplied with the\n",(0,r.jsx)(s.code,{children:"total system rate<TOTAL_SYSTEM_RATE>"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["The suction pressure may either be specified with ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"}),"\nwhich will then be the common suction pressure for all consumers in the system. Alternatively,\n",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"})," may be used to specify one suction pressure expression per consumer."]}),"\n",(0,r.jsxs)(s.p,{children:["The discharge pressure may either be specified with ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"}),"\nwhich will then be the common discharge pressure for all consumers in the system. Alternatively,\n",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"})," may be used to specify one discharge pressure expression per consumer."]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"CROSSOVER"})," may be used to specify if there are any available cross-overs between the consumers in this operational\nsetting."]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"FLUID_DENSITIES"})," may be used for pump systems to specify one fluid density expression per pump."]}),"\n",(0,r.jsxs)(s.p,{children:["For all keywords where there is one expression per consumer, ",(0,r.jsx)(s.code,{children:"RATES"}),", ",(0,r.jsx)(s.code,{children:"RATE_FRACTIONS"}),", ",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"}),",\n",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"})," and ",(0,r.jsx)(s.code,{children:"FLUID_DENSITIES"}),", the expressions must be entered in a\nlist where the number of elements is equal to the number of ",(0,r.jsx)(s.code,{children:"compressors<COMPRESSORS>"}),"/",(0,r.jsx)(s.code,{children:"pumps<PUMPS>"})]}),"\n",(0,r.jsx)(s.h3,{id:"rates",children:"RATES"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the rate [Sm",(0,r.jsx)("sup",{children:"3"}),"/day] for each consumer. Use either ",(0,r.jsx)(s.code,{children:"RATES"})," or ",(0,r.jsx)(s.code,{children:"RATE_FRACTIONS"}),",\nnot both in one operational setting."]}),"\n",(0,r.jsx)(s.h3,{id:"rate_fractions",children:"RATE_FRACTIONS"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the rate fraction for each consumer. If this is used,\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",children:"TOTAL_SYSTEM_RATE"})," for the ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"\nis also required. Use either ",(0,r.jsx)(s.code,{children:"RATES"})," or ",(0,r.jsx)(s.code,{children:"RATE_FRACTIONS"}),", not both in one operational setting."]}),"\n",(0,r.jsx)(s.h3,{id:"suction_pressures",children:"SUCTION_PRESSURES"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the suction pressure for each consumer. Use either ",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"})," or\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"}),", not both in the same operational setting."]}),"\n",(0,r.jsxs)(s.p,{children:["Use ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"})," to set the same suction pressure for all consumers in the system and\n",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURES"})," to specify one suction pressure expression per consumer."]}),"\n",(0,r.jsx)(s.h3,{id:"discharge_pressures",children:"DISCHARGE_PRESSURES"}),"\n",(0,r.jsxs)(s.p,{children:["A list with one expression per consumer specifying the discharge pressure for each consumer. Use either ",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"}),"\nor ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"}),", not both in the same operational setting."]}),"\n",(0,r.jsxs)(s.p,{children:["Use ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"})," to set the same discharge pressure for all consumers in the system and\n",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURES"})," to specify one discharge pressure expression per consumer."]}),"\n",(0,r.jsx)(s.h3,{id:"fluid_densities",children:"FLUID_DENSITIES"}),"\n",(0,r.jsxs)(s.p,{children:["Only supported for ",(0,r.jsx)(s.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"})," of type ",(0,r.jsx)(s.code,{children:"PUMP_SYSTEM"}),".\nA list with one expression per consumer specifying the fluid density for each consumer. If used, it will over-ride\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",children:"FLUID_DENSITY"})," for the ",(0,r.jsx)(s.code,{children:"PUMP_SYSTEM"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Use ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",children:"FLUID_DENSITY"})," for the ",(0,r.jsx)(s.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"}),"\nto set one fixed fluid density for the entire system for all operational settings. Use\n",(0,r.jsx)(s.code,{children:"FLUID_DENSITIES"})," for the ",(0,r.jsx)(s.code,{children:"operational setting<OPERATIONAL_SETTINGS>"})," to vary the fluid density between consumers and operational settings."]}),"\n",(0,r.jsx)(s.h3,{id:"crossover",children:"CROSSOVER"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"CROSSOVER"}),' specifies if rates are to be crossed over to another consumer if rate capacity is exceeded. If the\nenergy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the\nconsumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. To avoid\nloops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure\nat the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending"\nconsumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower\npressure, but not possible to "pressure up" in the crossover flow line.\nSome examples show how the crossover logic works:']}),"\n",(0,r.jsxs)(s.p,{children:["Crossover is given as and list of integer values for the first position is the first consumer, second position is the\nsecond consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over\npossible. ",(0,r.jsx)(s.strong,{children:"Note that we use 1-index here."})]}),"\n",(0,r.jsx)(s.h3,{id:"example-1",children:"Example 1:"}),"\n",(0,r.jsx)(s.p,{children:"Two consumers where there is a cross-over such that if the rate for the first consumer exceeds its capacity,\nthe excess rate will be processed by the second consumer. The second consumer can not cross-over to anyone."}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"CROSSOVER: [2, 0]\n"})}),"\n",(0,r.jsx)(s.h3,{id:"example-2",children:"Example 2:"}),"\n",(0,r.jsx)(s.p,{children:"The first and second consumers may both send exceeding rate to the third consumer if their capacity is\nexceeded."}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"CROSSOVER: [3,3,0]\n"})}),"\n",(0,r.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,r.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT\n OPERATIONAL_SETTINGS:\n - RATES:\n - SIM1;GAS_SALES\n - 0\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n - RATES:\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_SALES {/} 2\n - SIM1;GAS_INJ\n SUCTION_PRESSURE: 50\n DISCHARGE_PRESSURES:\n - 150\n - 150\n - SIM1;INJ_PRESSURE\n CROSSOVER: [3, 3, 0]\n"})}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: (1000 {*} SIM1;WATER_PROD {+} 1050 {*} SIM2;WATER_PROD) {/} (SIM1;WATER_PROD {+} SIM2;WATER_PROD)\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITIES:\n - 1000\n - 1050\n"})})]})}function l(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(S,{...e})}):S(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>i});var r=n(67294);const o={},c=r.createContext(o);function i(e){const s=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d2eeb42a.df54ed09.js b/assets/js/d2eeb42a.df54ed09.js new file mode 100644 index 0000000000..3351c41d7c --- /dev/null +++ b/assets/js/d2eeb42a.df54ed09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8485],{95077:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>a,toc:()=>u});var r=t(85893),c=t(11151);const o={title:"API reference",sidebar_position:3},i="API reference",a={id:"about/references/api/index",title:"API reference",description:"Generated API reference for the libecalc library can be found here.",source:"@site/docs/about/references/api/index.md",sourceDirName:"about/references/api",slug:"/about/references/api/",permalink:"/ecalc/docs/about/references/api/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/api/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"API reference",sidebar_position:3},sidebar:"about",previous:{title:"!include",permalink:"/ecalc/docs/about/references/keywords/include"},next:{title:"CLI",permalink:"/ecalc/docs/about/references/cli_reference"}},s={},u=[];function d(e){const n={a:"a",h1:"h1",p:"p",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"api-reference",children:"API reference"}),"\n",(0,r.jsxs)(n.p,{children:["Generated API reference for the libecalc library can be found ",(0,r.jsx)(n.a,{href:"https://equinor.github.io/ecalc/docs/about/references/api/libecalc.html",children:"here"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var r=t(67294);const c={},o=r.createContext(c);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d547c67b.5e9fddc4.js b/assets/js/d547c67b.5e9fddc4.js new file mode 100644 index 0000000000..00d40c2410 --- /dev/null +++ b/assets/js/d547c67b.5e9fddc4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5917],{16221:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var o=r(85893),t=r(11151);const s={},d="FLUID_MODEL",i={id:"about/references/keywords/FLUID_MODEL",title:"FLUID_MODEL",description:"Description",source:"@site/docs/about/references/keywords/FLUID_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FLUID_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY"},next:{title:"FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL"}},c={},l=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"fluid_model",children:"FLUID_MODEL"}),"\n",(0,o.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,o.jsxs)(n.p,{children:["This keyword is necessary when defining a compressor model. It relates to a defined fluid model in the ",(0,o.jsx)(n.code,{children:"MODELS"})," section. How a fluid model is defined is described in further detail in ",(0,o.jsx)(n.a,{href:"../../modelling/setup/models/fluid_model",children:"FLUID MODEL"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: <compressor model type>\n FLUID_MODEL: <reference to fluid model, must be defined in MODELS>\n ...\n"})}),"\n",(0,o.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: fluid_model\n TYPE: FLUID\n FLUID_MODEL_TYPE: PREDEFINED\n EOS_MODEL: SRK\n GAS_TYPE: MEDIUM\n\n - NAME: single_speed_compressor\n TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: fluid_model\n ...\n"})})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>d});var o=r(67294);const t={},s=o.createContext(t);function d(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d5b0ea4b.3c6603c6.js b/assets/js/d5b0ea4b.3c6603c6.js new file mode 100644 index 0000000000..cee95fe2ab --- /dev/null +++ b/assets/js/d5b0ea4b.3c6603c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2991],{39389:t=>{t.exports=JSON.parse('{"title":"Documentation","description":"This section of the documentation lists instructions and guidelines on how to contribute to the documentation","slug":"/category/documentation","permalink":"/ecalc/docs/category/documentation","navigation":{"previous":{"title":"Get started","permalink":"/ecalc/docs/contribute/get-started"},"next":{"title":"Overview","permalink":"/ecalc/docs/contribute/documentation-guide/documentation"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d5cd246e.17723f6d.js b/assets/js/d5cd246e.17723f6d.js new file mode 100644 index 0000000000..a4d06d11d2 --- /dev/null +++ b/assets/js/d5cd246e.17723f6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4441],{82814:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var o=t(85893),s=t(11151);const r={title:"Direct consumers",sidebar_position:7},i="DIRECT ENERGY USAGE MODEL",l={id:"about/modelling/setup/installations/direct_consumers",title:"Direct consumers",description:"This energy model usage type allows for defining energy usage directly with an expression. It needs to be either",source:"@site/docs/about/modelling/setup/installations/direct_consumers.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/direct_consumers",permalink:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/direct_consumers.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"Direct consumers",sidebar_position:7},sidebar:"about",previous:{title:"Tabular models",permalink:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations"},next:{title:"eCalc\u2122 Workflow",permalink:"/ecalc/docs/about/modelling/workflow/"}},c={},a=[{value:"Format",id:"format",level:4},{value:"Example",id:"example",level:4}];function d(e){const n={code:"code",h1:"h1",h4:"h4",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"direct-energy-usage-model",children:"DIRECT ENERGY USAGE MODEL"}),"\n",(0,o.jsxs)(n.p,{children:["This energy model usage type allows for defining energy usage directly with an expression. It needs to be either\naccompanied by ",(0,o.jsx)(n.code,{children:"LOAD"})," (for electrical consumers) or ",(0,o.jsx)(n.code,{children:"FUELRATE"})," (for fuel consumers). The energy usage will be\nequal to the result of the expression given for ",(0,o.jsx)(n.code,{children:"LOAD"}),"/",(0,o.jsx)(n.code,{children:"FUELRATE"}),"."]}),"\n",(0,o.jsxs)(n.p,{children:["When a model is run with ",(0,o.jsx)(n.code,{children:"REGULARITY"}),", there is an option to specify whether the direct consumer is of stream day\nor calendar day energy usage rate with ",(0,o.jsx)(n.code,{children:"CONSUMPTION_RATE_TYPE"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"format",children:"Format"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD/FUELRATE: <choose either load or fuelrate>\n CONSUMPTION_RATE_TYPE: <consumption rate type>\n CONDITION/S: <choose either condition or conditions>\n POWERLOSSFACTOR: <power loss factor (number)>\n"})}),"\n",(0,o.jsx)(n.h4,{id:"example",children:"Example"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Direct load"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 10 \n"})}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Direct fuel rate"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n FUELRATE: 100000 \n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>i});var o=t(67294);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d77448ee.e9054d1c.js b/assets/js/d77448ee.e9054d1c.js new file mode 100644 index 0000000000..0d12db2f58 --- /dev/null +++ b/assets/js/d77448ee.e9054d1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5201],{72649:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>a,contentTitle:()=>c,default:()=>E,frontMatter:()=>t,metadata:()=>d,toc:()=>i});var n=s(85893),o=s(11151);const t={},c="COMPRESSOR_MODEL",d={id:"about/references/keywords/COMPRESSOR_MODEL",title:"COMPRESSOR_MODEL",description:"ENERGYUSAGEMODEL / COMPRESSORMODEL",source:"@site/docs/about/references/keywords/COMPRESSOR_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/COMPRESSOR_MODEL",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/COMPRESSOR_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CATEGORY",permalink:"/ecalc/docs/about/references/keywords/CATEGORY"},next:{title:"COMPRESSORS",permalink:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM"}},a={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h1,{id:"compressor_model",children:"COMPRESSOR_MODEL"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," / ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",children:"COMPRESSOR_MODEL"})]}),"\n",(0,n.jsxs)(r.table,{children:[(0,n.jsx)(r.thead,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.th,{children:"Required"}),(0,n.jsx)(r.th,{children:"Child of"}),(0,n.jsx)(r.th,{children:"Children/Options"})]})}),(0,n.jsx)(r.tbody,{children:(0,n.jsxs)(r.tr,{children:[(0,n.jsx)(r.td,{children:"Yes"}),(0,n.jsx)(r.td,{children:(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})}),(0,n.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(r.p,{children:["This keyword links the predefined ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",children:"COMPRESSOR MODEL"})," to the ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"COMPRESSOR ENERGY USAGE MODEL"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["Note that this can ",(0,n.jsx)(r.strong,{children:"only"})," be used when a ",(0,n.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",children:"COMPRESSOR SYSTEM"})," is used. It is possible to use the same compressor model twice in the same system - this is a common feature when there are identical compressor trains in parallel."]}),"\n",(0,n.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: <name of compressor>\n COMPRESSOR_MODEL: <reference to compressor model>\n ...\n"})}),"\n",(0,n.jsx)(r.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: export_compressor1\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: export_compressor2\n COMPRESSOR_MODEL: export_compressor_reference\n - NAME: injection_compressor\n COMPRESSOR_MODEL: injection_compressor_reference\n"})})]})}function E(e={}){const{wrapper:r}={...(0,o.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,r,s)=>{s.d(r,{Z:()=>d,a:()=>c});var n=s(67294);const o={},t=n.createContext(o);function c(e){const r=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:c(e.components),n.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.d40f6615.js b/assets/js/df203c0f.d40f6615.js new file mode 100644 index 0000000000..61a00c98bf --- /dev/null +++ b/assets/js/df203c0f.d40f6615.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9924],{59047:(e,n,t)=>{t.d(n,{Z:()=>M});var i=t(67294),s=t(85893);function o(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=i.Children.toArray(e),t=n.find((e=>i.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=n.filter((e=>e!==t)),l=t?.props.children;return{mdxAdmonitionTitle:l,rest:o.length>0?(0,s.jsx)(s.Fragment,{children:o}):null}}(e.children),o=e.title??n;return{...e,...o&&{title:o},children:t}}var l=t(90512),a=t(95999),c=t(35281);const r={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:n,className:t,children:i}=e;return(0,s.jsx)("div",{className:(0,l.Z)(c.k.common.admonition,c.k.common.admonitionType(n),r.admonition,t),children:i})}function u(e){let{icon:n,title:t}=e;return(0,s.jsxs)("div",{className:r.admonitionHeading,children:[(0,s.jsx)("span",{className:r.admonitionIcon,children:n}),t]})}function h(e){let{children:n}=e;return n?(0,s.jsx)("div",{className:r.admonitionContent,children:n}):null}function m(e){const{type:n,icon:t,title:i,children:o,className:l}=e;return(0,s.jsxs)(d,{type:n,className:l,children:[(0,s.jsx)(u,{title:i,icon:t}),(0,s.jsx)(h,{children:o})]})}function g(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const x={icon:(0,s.jsx)(g,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function f(e){return(0,s.jsx)(m,{...x,...e,className:(0,l.Z)("alert alert--secondary",e.className),children:e.children})}function j(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const p={icon:(0,s.jsx)(j,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,s.jsx)(m,{...p,...e,className:(0,l.Z)("alert alert--success",e.className),children:e.children})}function N(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const Z={icon:(0,s.jsx)(N,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,s.jsx)(m,{...Z,...e,className:(0,l.Z)("alert alert--info",e.className),children:e.children})}function T(e){return(0,s.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const b={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function y(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const z={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const C={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const k={...{note:f,tip:v,info:w,warning:function(e){return(0,s.jsx)(m,{...b,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,s.jsx)(m,{...z,...e,className:(0,l.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,s.jsx)(f,{title:"secondary",...e}),important:e=>(0,s.jsx)(w,{title:"important",...e}),success:e=>(0,s.jsx)(v,{title:"success",...e}),caution:function(e){return(0,s.jsx)(m,{...C,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})}}};function M(e){const n=o(e),t=(i=n.type,k[i]||(console.warn(`No admonition component found for admonition type "${i}". Using Info as fallback.`),k.info));var i;return(0,s.jsx)(t,{...n})}},40491:(e,n,t)=>{t.r(n),t.d(n,{default:()=>j});t(67294);var i=t(90512),s=t(33692),o=t(88824),l=t(1944),a=t(35281),c=t(95999),r=t(90197),d=t(22212),u=t(92503),h=t(85893);function m(e){const n=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,c.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:n}))}();return(0,c.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:n(e.tag.count),tagName:e.tag.label})}function g(e){let{doc:n}=e;return(0,h.jsxs)("article",{className:"margin-vert--lg",children:[(0,h.jsx)(s.Z,{to:n.permalink,children:(0,h.jsx)(u.Z,{as:"h2",children:n.title})}),n.description&&(0,h.jsx)("p",{children:n.description})]})}function x(e){let{title:n}=e;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l.d,{title:n}),(0,h.jsx)(r.Z,{tag:"doc_tag_doc_list"})]})}function f(e){let{tag:n,title:t}=e;return(0,h.jsx)(l.FG,{className:(0,i.Z)(a.k.page.docsTagDocListPage),children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsx)("div",{className:"row",children:(0,h.jsxs)("main",{className:"col col--8 col--offset-2",children:[n.unlisted&&(0,h.jsx)(d.Z,{}),(0,h.jsxs)("header",{className:"margin-bottom--xl",children:[(0,h.jsx)(u.Z,{as:"h1",children:t}),(0,h.jsx)(s.Z,{href:n.allTagsPath,children:(0,h.jsx)(c.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,h.jsx)("section",{className:"margin-vert--lg",children:n.items.map((e=>(0,h.jsx)(g,{doc:e},e.id)))})]})})})})}function j(e){const n=m(e);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(x,{...e,title:n}),(0,h.jsx)(f,{...e,title:n})]})}},22212:(e,n,t)=>{t.d(n,{Z:()=>m});t(67294);var i=t(90512),s=t(95999),o=t(35742),l=t(85893);function a(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function r(){return(0,l.jsx)(o.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(35281),u=t(59047);function h(e){let{className:n}=e;return(0,l.jsx)(u.Z,{type:"caution",title:(0,l.jsx)(a,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,l.jsx)(c,{})})}function m(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(r,{}),(0,l.jsx)(h,{...e})]})}},88824:(e,n,t)=>{t.d(n,{c:()=>r});var i=t(67294),s=t(52263);const o=["zero","one","two","few","many","other"];function l(e){return o.filter((n=>e.includes(n)))}const a={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,i.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:l(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),a}}),[e])}function r(){const e=c();return{selectMessage:(n,t)=>function(e,n,t){const i=e.split("|");if(1===i.length)return i[0];i.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${i.length}: ${e}`);const s=t.select(n),o=t.pluralForms.indexOf(s);return i[Math.min(o,i.length-1)]}(t,n,e)}}}}]); \ No newline at end of file diff --git a/assets/js/df3c944d.47411cb6.js b/assets/js/df3c944d.47411cb6.js new file mode 100644 index 0000000000..82798700b1 --- /dev/null +++ b/assets/js/df3c944d.47411cb6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7611],{95825:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>d,metadata:()=>t,toc:()=>i});var r=n(85893),c=n(11151);const d={},o="ENERGY_USAGE_MODEL",t={id:"about/references/keywords/ENERGY_USAGE_MODEL",title:"ENERGY_USAGE_MODEL",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/ENERGY_USAGE_MODEL",permalink:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ENERGYFUNCTION",permalink:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION"},next:{title:"EXPRESSION",permalink:"/ecalc/docs/about/references/keywords/EXPRESSION"}},l={},i=[{value:"Description",id:"description",level:2},{value:"Temporal energy usage model",id:"temporal-energy-usage-model",level:2}];function a(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"energy_usage_model",children:"ENERGY_USAGE_MODEL"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Required"}),(0,r.jsx)(s.th,{children:"Child of"}),(0,r.jsx)(s.th,{children:"Children/Options"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Yes"}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"FUELCONSUMERS"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"COMPRESSORS"})})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"CONSUMERS"})}),(0,r.jsxs)(s.td,{children:[(0,r.jsx)(s.code,{children:"CONDITION"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"CONDITIONS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"CONSUMPTION_RATE_TYPE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"DISCHARGE_PRESSURE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"ENERGYFUNCTION"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"FLUID_DENSITY"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"FUELRATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"LOAD"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"OPERATIONAL_SETTINGS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"POWERLOSSFACTOR"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"PUMPS"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"RATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"SUCTION_PRESSURE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"TOTAL_SYSTEM_RATE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"TYPE"})," ",(0,r.jsx)("br",{})," ",(0,r.jsx)(s.code,{children:"VARIABLES"})]})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"description",children:"Description"}),"\n",(0,r.jsx)(s.p,{children:"The energy usage model specifies the data to calculate the energy usage of a consumer. This data is used to set up a\nfunction that may be evaluated for a set of time series and returns a result including the calculated energy usage."}),"\n",(0,r.jsxs)(s.p,{children:["The type of energy usage model is defined by ",(0,r.jsx)(s.code,{children:"TYPE"}),", and which keywords are required/supported will be different\nfor each type. The available types are:"]}),"\n",(0,r.jsx)(s.p,{children:"Energy usage model types:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",children:"DIRECT"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",children:"TABULATED"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump-energy-usage-model",children:"PUMP"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations#pump_system-energy-usage-model",children:"PUMP_SYSTEM"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",children:"COMPRESSOR"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",children:"COMPRESSOR_SYSTEM"})}),"\n",(0,r.jsx)(s.li,{children:(0,r.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["For all types, the keywords ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"}),", ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONDITIONS",children:"CONDITIONS"})," and ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",children:"POWERLOSSFACTOR"})," are optional and supported, and these will act\non the calculated energy usage after the calculated energy usage from the model defined by ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"}),"."]}),"\n",(0,r.jsx)(s.h2,{id:"temporal-energy-usage-model",children:"Temporal energy usage model"}),"\n",(0,r.jsxs)(s.p,{children:["It is possible to update the energy model within a consumer over time, as long as the\n",(0,r.jsx)(s.code,{children:"ENERGY_USAGE_MODEL"})," stays within one type. The ",(0,r.jsx)(s.code,{children:"TYPE"})," cannot change over time. In case ",(0,r.jsx)(s.code,{children:"TYPE"})," evolution is needed, we recommend that you split the model into two ",(0,r.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"}),"."]}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n 2020-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_initial\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n 2022-01-01:\n TYPE: TABULATED\n ENERGYFUNCTION: tabulated_energy_function_reference_new\n VARIABLES:\n - NAME: RATE\n EXPRESSION: SIM1;GAS_PROD\n"})})]})}function h(e={}){const{wrapper:s}={...(0,c.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>o});var r=n(67294);const c={},d=r.createContext(c);function o(e){const s=r.useContext(d);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),r.createElement(d.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dfbab2f3.47acfba7.js b/assets/js/dfbab2f3.47acfba7.js new file mode 100644 index 0000000000..729cbb916b --- /dev/null +++ b/assets/js/dfbab2f3.47acfba7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7907],{85201:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var s=n(85893),a=n(11151);const i={title:"CLI",sidebar_position:2,description:"Getting started with eCalc CLI"},o="eCalc CLI",c={id:"about/getting_started/cli/index",title:"CLI",description:"Getting started with eCalc CLI",source:"@site/docs/about/getting_started/cli/index.md",sourceDirName:"about/getting_started/cli",slug:"/about/getting_started/cli/",permalink:"/ecalc/docs/about/getting_started/cli/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/cli/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"CLI",sidebar_position:2,description:"Getting started with eCalc CLI"},sidebar:"about",previous:{title:"Getting started",permalink:"/ecalc/docs/about/getting_started/"},next:{title:"FAQ / Troubleshooting",permalink:"/ecalc/docs/about/getting_started/cli/faq"}},r={},l=[{value:"Example Usage",id:"example-usage",level:2},{value:"Use show command to inspect results",id:"use-show-command-to-inspect-results",level:4},{value:"Output Monthly CSV data",id:"output-monthly-csv-data",level:4},{value:"Specify different output folder",id:"specify-different-output-folder",level:4},{value:"Specify a different naming prefix to outputs",id:"specify-a-different-naming-prefix-to-outputs",level:4},{value:"Show stack trace for debugging",id:"show-stack-trace-for-debugging",level:4}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h4:"h4",p:"p",pre:"pre",strong:"strong",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"ecalc-cli",children:"eCalc CLI"}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["It is currently ",(0,s.jsx)(t.strong,{children:"recommended"})," to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library"]})}),"\n",(0,s.jsxs)(t.p,{children:["The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the\neCalc Python library, and should be accessible from the command line as ",(0,s.jsx)(t.code,{children:"ecalc"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["See all commands and options in the ",(0,s.jsx)(t.a,{href:"/ecalc/docs/about/references/cli_reference",children:"CLI reference"})]}),"\n",(0,s.jsx)(t.h2,{id:"example-usage",children:"Example Usage"}),"\n",(0,s.jsx)(t.h4,{id:"use-show-command-to-inspect-results",children:"Use show command to inspect results"}),"\n",(0,s.jsx)(t.p,{children:"First run ecalc (here shown with default output folder)"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run /somelocation/myfield.yaml --output-folder output\n"})}),"\n",(0,s.jsx)(t.p,{children:"Enter the output folder"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ cd output\n"})}),"\n",(0,s.jsx)(t.p,{children:"Show results for a single component"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc show results --name waterinj --output-format json\n"})}),"\n",(0,s.jsx)(t.p,{children:"or as csv"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc show results --name waterinj --output-format csv\n"})}),"\n",(0,s.jsxs)(t.p,{children:["or write the full csv result to a file (this will give the same output as ",(0,s.jsx)(t.code,{children:"ecalc run"})," with the csv option)"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc show results --output-format csv --file results.csv\n"})}),"\n",(0,s.jsx)(t.h4,{id:"output-monthly-csv-data",children:"Output Monthly CSV data"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run -f MONTH /somelocation/myfield.yml\n"})}),"\n",(0,s.jsx)(t.h4,{id:"specify-different-output-folder",children:"Specify different output folder"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml\n"})}),"\n",(0,s.jsx)(t.h4,{id:"specify-a-different-naming-prefix-to-outputs",children:"Specify a different naming prefix to outputs"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run -n myfield_myproject /somelocation/myfield.yml\n"})}),"\n",(0,s.jsx)(t.h4,{id:"show-stack-trace-for-debugging",children:"Show stack trace for debugging"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"$ ecalc run --log DEBUG /somelocation/myfield.yml\n"})})]})}function u(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>c,a:()=>o});var s=n(67294);const a={},i=s.createContext(a);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e023757a.8ac686a4.js b/assets/js/e023757a.8ac686a4.js new file mode 100644 index 0000000000..9d31179ccb --- /dev/null +++ b/assets/js/e023757a.8ac686a4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4858],{98380:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=n(85893),s=n(11151);const o={},c="INSTALLATIONS",i={id:"about/references/keywords/INSTALLATIONS",title:"INSTALLATIONS",description:"INSTALLATIONS",source:"@site/docs/about/references/keywords/INSTALLATIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INSTALLATIONS",permalink:"/ecalc/docs/about/references/keywords/INSTALLATIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INSTALLATIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INLET_TEMPERATURE",permalink:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE"},next:{title:"INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"}},a={},d=[{value:"Description",id:"description",level:2}];function l(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"installations",children:"INSTALLATIONS"}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})}),"\n",(0,r.jsx)(t.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(t.p,{children:["In ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation."]}),"\n",(0,r.jsx)(t.p,{children:"The structure of the keywords under installations\nis linked to the structure in the general consumer overview for an installation."}),"\n",(0,r.jsxs)(t.p,{children:["See ",(0,r.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"})," for more details about usage."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>c});var r=n(67294);const s={},o=r.createContext(s);function c(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e0edce1a.658a6fe8.js b/assets/js/e0edce1a.658a6fe8.js new file mode 100644 index 0000000000..a2f478317c --- /dev/null +++ b/assets/js/e0edce1a.658a6fe8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8596],{36513:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>u,frontMatter:()=>c,metadata:()=>l,toc:()=>i});var r=t(85893),s=t(11151);const c={},a="FUEL",l={id:"about/references/keywords/FUEL",title:"FUEL",description:"... /",source:"@site/docs/about/references/keywords/FUEL.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FUEL",permalink:"/ecalc/docs/about/references/keywords/FUEL",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FUEL.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL"},next:{title:"FUELCONSUMERS",permalink:"/ecalc/docs/about/references/keywords/FUELCONSUMERS"}},o={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Constant fuel type",id:"constant-fuel-type",level:4},{value:"Time-varying fuel type",id:"time-varying-fuel-type",level:4}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"fuel",children:"FUEL"}),"\n",(0,r.jsxs)(n.p,{children:["... /\n",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})]}),"\n",(0,r.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," keyword defines the fuel type that can be used in\n",(0,r.jsx)(n.code,{children:"INSTALLATIONS"}),", ",(0,r.jsx)(n.code,{children:"GENERATORSETS"}),", or ",(0,r.jsx)(n.code,{children:"FUELCONSUMERS"}),".\nIt can be set directly and used for the entire time interval, or it can be set differently for different time intervals."]}),"\n",(0,r.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL: <fuel_type>\n"})}),"\n",(0,r.jsx)(n.p,{children:"or"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL:\n <DATE>: <fuel_type>\n <DATE>: <fuel_type>\n"})}),"\n",(0,r.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.h4,{id:"constant-fuel-type",children:"Constant fuel type"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL: fuel_gas\n"})}),"\n",(0,r.jsx)(n.h4,{id:"time-varying-fuel-type",children:"Time-varying fuel type"}),"\n",(0,r.jsxs)(n.p,{children:["This example assumes that two fuels have been defined: ",(0,r.jsx)(n.code,{children:"fuel_gas"})," and ",(0,r.jsx)(n.code,{children:"diesel"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"FUEL:\n 1994-01-01: fuel_gas\n 2000-01-01: diesel\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>a});var r=t(67294);const s={},c=r.createContext(s);function a(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1df8231.d15fcb5c.js b/assets/js/e1df8231.d15fcb5c.js new file mode 100644 index 0000000000..89effe1543 --- /dev/null +++ b/assets/js/e1df8231.d15fcb5c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[517],{61665:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var a=n(85893),o=n(11151);const r={title:"YAML",sidebar_position:3,description:"Getting started with YAML"},i="YAML",s={id:"about/getting_started/yaml/index",title:"YAML",description:"Getting started with YAML",source:"@site/docs/about/getting_started/yaml/index.md",sourceDirName:"about/getting_started/yaml",slug:"/about/getting_started/yaml/",permalink:"/ecalc/docs/about/getting_started/yaml/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/getting_started/yaml/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"YAML",sidebar_position:3,description:"Getting started with YAML"},sidebar:"about",previous:{title:"Python Library",permalink:"/ecalc/docs/about/getting_started/library/"},next:{title:"Modelling guide",permalink:"/ecalc/docs/about/modelling/"}},c={},l=[];function d(e){const t={a:"a",h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"yaml",children:"YAML"}),"\n",(0,a.jsxs)(t.p,{children:["We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see ",(0,a.jsx)(t.a,{href:"https://learnxinyminutes.com/docs/yaml/",children:"here"})]}),"\n",(0,a.jsxs)(t.p,{children:["The eCalc YAML model can either be run directly with the ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/getting_started/cli/",children:"eCalc CLI"})," or loaded using the ",(0,a.jsx)(t.a,{href:"../library",children:"Python library"})]}),"\n",(0,a.jsxs)(t.p,{children:["For getting started setting up your first eCalc YAML model, please see ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/",children:"Setup an eCalc Model"}),",\nlook at some example YAMLs ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/modelling/examples/",children:"here"})," and refer to the vocabulary that we use ",(0,a.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/",children:"here"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>s,a:()=>i});var a=n(67294);const o={},r=a.createContext(o);function i(e){const t=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e26167e6.5bb19507.js b/assets/js/e26167e6.5bb19507.js new file mode 100644 index 0000000000..9501e88b23 --- /dev/null +++ b/assets/js/e26167e6.5bb19507.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[476],{20573:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>a});var s=r(85893),t=r(11151);const o={},c="EMISSION",i={id:"about/references/keywords/EMISSION",title:"EMISSION",description:"New keyword from eCalc v8.8!",source:"@site/docs/about/references/keywords/EMISSION.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/EMISSION",permalink:"/ecalc/docs/about/references/keywords/EMISSION",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/EMISSION.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"ELECTRICITY2FUEL",permalink:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL"},next:{title:"EMISSIONS",permalink:"/ecalc/docs/about/references/keywords/EMISSIONS"}},d={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"emission",children:"EMISSION"}),"\n",(0,s.jsx)("span",{className:"major-change-new-feature",children:(0,s.jsx)(n.p,{children:"New keyword from eCalc v8.8!"})}),"\n",(0,s.jsx)("br",{}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Child of"}),(0,s.jsx)(n.th,{children:"Children/Options"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"No"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"VENTING_EMITTERS"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"NAME"}),(0,s.jsx)("br",{}),(0,s.jsx)(n.code,{children:"RATE"})]})]})})]}),"\n",(0,s.jsx)(n.admonition,{type:"important",children:(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["From eCalc version 8.8: The new keyword ",(0,s.jsx)(n.code,{children:"EMISSION"})," is a part of an updated definition of ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",children:"VENTING_EMITTERS"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["eCalc version 8.7 and earlier: ",(0,s.jsx)(n.code,{children:"EMISSION"}),"-keyword cannot be used."]}),"\n"]})}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsx)(n.p,{children:"The emission specifies the data to calculate the direct emissions on an installation. This data is used to set up\na function that may be evaluated for a set of time series and return an emission result."}),"\n",(0,s.jsxs)(n.p,{children:["The attributes ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/RATE",children:"RATE"})," are required."]}),"\n",(0,s.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSION:\n - NAME: <emission name>\n RATE:\n VALUE: <emission rate>\n UNIT: <emission rate unit, default kg/d>\n TYPE: <emission rate type, default STREAM_DAY>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"EMISSION:\n - NAME: CH4\n RATE:\n VALUE: 4\n UNIT: kg/d\n TYPE: STREAM_DAY\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>c});var s=r(67294);const t={},o=s.createContext(t);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e2712b99.e6b7fbca.js b/assets/js/e2712b99.e6b7fbca.js new file mode 100644 index 0000000000..6081f37f9f --- /dev/null +++ b/assets/js/e2712b99.e6b7fbca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7253],{64006:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var t=a(85893),r=a(11151);const s={slug:"v8.1-release",title:"v8.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:11},i="eCalc v8.1",l={id:"changelog/v8-1",title:"v8.1",description:"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:",source:"@site/docs/changelog/v8-1.md",sourceDirName:"changelog",slug:"/changelog/v8.1-release",permalink:"/ecalc/docs/changelog/v8.1-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-1.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:11,frontMatter:{slug:"v8.1-release",title:"v8.1",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:11},sidebar:"changelog",previous:{title:"v8.0",permalink:"/ecalc/docs/changelog/v8.0-release"},next:{title:"v8.2",permalink:"/ecalc/docs/changelog/v8.2-release"}},o={},c=[{value:"New features",id:"new-features",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"Input: YAML / Resource files",id:"input-yaml--resource-files",level:3},{value:"Output: LTP",id:"output-ltp",level:3}];function u(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ecalc-v81",children:"eCalc v8.1"}),"\n",(0,t.jsx)(n.p,{children:"eCalc\u2122 v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:"}),"\n",(0,t.jsx)(n.h2,{id:"new-features",children:"New features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Bug fixes"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,t.jsx)(n.p,{children:"Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:"}),"\n",(0,t.jsx)(n.h3,{id:"input-yaml--resource-files",children:"Input: YAML / Resource files"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"We do no longer accept missing data in resource or timeseries resource files, since it easily leads to ambiguities and errors."}),"\n",(0,t.jsx)(n.li,{children:"New Category: STEAM-TURBINE-GENERATOR has been introduced, which works similar as OFFSHORE-WIND"}),"\n",(0,t.jsx)(n.li,{children:"TIME_SERIES has had a makeover with new type and renamed attributes, to be less ambiguous and error-prone."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"output-ltp",children:"Output: LTP"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"A few columns in LTP export has changed names in order to be compatible with Centuries"}),"\n",(0,t.jsx)(n.li,{children:"A new column in LTP export has been introduced: steamTurbineGeneratorConsumption (matching with the new category)"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Check out the ",(0,t.jsx)(n.a,{href:"../about/migration_guides/v8_to_v81",children:"migration guide"})]})]})}function d(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>l,a:()=>i});var t=a(67294);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e7fdd821.0aea6554.js b/assets/js/e7fdd821.0aea6554.js new file mode 100644 index 0000000000..7fd4110578 --- /dev/null +++ b/assets/js/e7fdd821.0aea6554.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8202],{95815:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>a});var t=n(85893),c=n(11151);const s={},o="CONDITIONS",d={id:"about/references/keywords/CONDITIONS",title:"CONDITIONS",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/CONDITIONS.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONDITIONS.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONDITION",permalink:"/ecalc/docs/about/references/keywords/CONDITION"},next:{title:"CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT"}},i={},a=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2}];function l(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"conditions",children:"CONDITIONS"}),"\n",(0,t.jsxs)(r.p,{children:[(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONDITIONS",children:"CONDITIONS"})]}),"\n",(0,t.jsxs)(r.table,{children:[(0,t.jsx)(r.thead,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.th,{children:"Required"}),(0,t.jsx)(r.th,{children:"Child of"}),(0,t.jsx)(r.th,{children:"Children/Options"})]})}),(0,t.jsx)(r.tbody,{children:(0,t.jsxs)(r.tr,{children:[(0,t.jsx)(r.td,{children:"No"}),(0,t.jsx)(r.td,{children:(0,t.jsx)(r.code,{children:"ENERGY_USAGE_MODEL"})}),(0,t.jsx)(r.td,{children:"None"})]})})]}),"\n",(0,t.jsx)(r.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(r.p,{children:["See ",(0,t.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CONDITION",children:"CONDITION"}),"."]}),"\n",(0,t.jsx)(r.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-yaml",children:"CONDITIONS:\n - <CONDITION>\n - <CONDITION>\n"})})]})}function h(e={}){const{wrapper:r}={...(0,c.a)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,r,n)=>{n.d(r,{Z:()=>d,a:()=>o});var t=n(67294);const c={},s=t.createContext(c);function o(e){const r=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function d(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:o(e.components),t.createElement(s.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e862d0e9.ff1189cf.js b/assets/js/e862d0e9.ff1189cf.js new file mode 100644 index 0000000000..69405f22bf --- /dev/null +++ b/assets/js/e862d0e9.ff1189cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8703],{39472:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>E,default:()=>l,frontMatter:()=>t,metadata:()=>c,toc:()=>a});var s=r(85893),o=r(11151);const t={},E="INTERSTAGE_CONTROL_PRESSURE",c={id:"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",title:"INTERSTAGE_CONTROL_PRESSURE",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"INTERPOLATION_TYPE",permalink:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE"},next:{title:"LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD"}},i={},a=[{value:"Description",id:"description",level:2},{value:"Use in MODELS",id:"use-in-models",level:3},{value:"Format",id:"format",level:4},{value:"Use in ENERGY_USAGE_MODEL",id:"use-in-energy_usage_model",level:3},{value:"Format",id:"format-1",level:4},{value:"Example",id:"example",level:4}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"interstage_control_pressure",children:"INTERSTAGE_CONTROL_PRESSURE"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," / [...] /\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",children:"INTERSTAGE_CONTROL_PRESSURE"})]}),"\n",(0,s.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["This keyword can ",(0,s.jsx)(n.strong,{children:"only"})," be utilised for a ",(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"})," type, and it is used in two separate sections:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"MODELS"})," - to define the upstream and downstream pressure control methods"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," - to define the interstage pressure"]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"use-in-models",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["This keyword cannot be specified for the first stage, and it may only be used ",(0,s.jsx)(n.strong,{children:"once"})," in a given compression train."]})}),"\n",(0,s.jsxs)(n.p,{children:["Under the ",(0,s.jsx)(n.code,{children:"INTERSTAGE_CONTROL_PRESSURE"})," keyword, the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",children:"UPSTREAM_PRESSURE_CONTROL"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",children:"DOWNSTREAM_PRESSURE_CONTROL"})," keywords can be specified."]}),"\n",(0,s.jsx)(n.h4,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <compressor model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>\n ...\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>\n INTERSTAGE_CONTROL_PRESSURE:\n UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE> \n DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>\n ...\n"})}),"\n",(0,s.jsxs)(n.p,{children:['The reason why upstream and downstream pressure control methods need to be specified is that the compression train is essentially split in two - before and after the interstage pressure. Thus, a control method for each "side" of the model needs to be defined.\nSee ',(0,s.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:"Variable speed compressor train model with multiple streams and pressures"})," for more details."]}),"\n",(0,s.jsxs)(n.h3,{id:"use-in-energy_usage_model",children:["Use in ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})]}),"\n",(0,s.jsxs)(n.p,{children:["Within the ",(0,s.jsx)(n.code,{children:"ENERGY_USAGE_MODEL"})," section (",(0,s.jsx)(n.strong,{children:"only"})," when ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"})," is set to ",(0,s.jsx)(n.code,{children:"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"}),") the actual value for the interstage pressure is set in ",(0,s.jsx)(n.strong,{children:"bar"}),".\nThis can either be a single value or an ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/EXPRESSION",children:"EXPRESSION"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: <reference name>\n ...\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure value/expression>\n ...\n"})}),"\n",(0,s.jsx)(n.h4,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:" - NAME: export_compressor\n ...\n ENERGY_USAGE_MODEL:\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES\n ...\n SUCTION_PRESSURE: 10 # bar\n INTERSTAGE_CONTROL_PRESSURE: 40 #bar\n DISCHARGE_PRESSURE: 120 #bar\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>E});var s=r(67294);const o={},t=s.createContext(o);function E(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:E(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e8ebc025.d321550d.js b/assets/js/e8ebc025.d321550d.js new file mode 100644 index 0000000000..e48267753c --- /dev/null +++ b/assets/js/e8ebc025.d321550d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3902],{42991:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=n(85893),o=n(11151);const i={title:"Setup an eCalc\u2122 Model",sidebar_position:2,description:"Guide on how to setup an eCalc\u2122 model"},l="Set up an eCalc Model",r={id:"about/modelling/setup/index",title:"Setup an eCalc\u2122 Model",description:"Guide on how to setup an eCalc\u2122 model",source:"@site/docs/about/modelling/setup/index.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/",permalink:"/ecalc/docs/about/modelling/setup/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Setup an eCalc\u2122 Model",sidebar_position:2,description:"Guide on how to setup an eCalc\u2122 model"},sidebar:"about",previous:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/theory/compressor_modelling"},next:{title:"File format and syntax",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/"}},a={},c=[];function d(e){const t={a:"a",em:"em",h1:"h1",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"set-up-an-ecalc-model",children:"Set up an eCalc Model"}),"\n",(0,s.jsx)(t.p,{children:"This section describes how to create your own eCalc\u2122 model file."}),"\n",(0,s.jsx)(t.p,{children:"There are six separate sections which make up each model, these being:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Input"}),(0,s.jsx)(t.th,{children:"Function"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/time_series",children:"TIME_SERIES"})}),(0,s.jsx)(t.td,{children:"Input of time dependent variables. For example, production profiles for an installation"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})}),(0,s.jsxs)(t.td,{children:["Input of generator sets, and facility equipment that consumers either power or fuel ",(0,s.jsx)(t.em,{children:"(with the exception of compressors that are modelled with compressor charts)"})]})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/models/",children:"MODELS"})}),(0,s.jsx)(t.td,{children:"Input of compressor models that use compressor charts. Gas turbines that are directly coupled to a compressor are also included here"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/fuel_types",children:"FUEL_TYPES"})}),(0,s.jsx)(t.td,{children:"Input of the various fuel types used in the specified installation(s)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/variables",children:"VARIABLES"})}),(0,s.jsx)(t.td,{children:"Input of variables that can reference to in expressions within the YAML set-up file"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/installations/",children:"INSTALLATIONS"})}),(0,s.jsxs)(t.td,{children:["This is essentially the only ",(0,s.jsx)(t.em,{children:'"output"'})," section in the YAML setup file. All the inputs are specified and related to specific platforms/rigs, and whether or not they consume either power or fuel"]})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"All of the above are mandatory inputs for eCalc\u2122 to run, with the exception of models (which is an optional, but still important input) and variables."})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>l});var s=n(67294);const o={},i=s.createContext(o);function l(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e9e63826.5ad2ec79.js b/assets/js/e9e63826.5ad2ec79.js new file mode 100644 index 0000000000..43ead2c556 --- /dev/null +++ b/assets/js/e9e63826.5ad2ec79.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6159],{2755:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var t=s(85893),r=s(11151);const i={title:"File format and syntax",sidebar_position:1,description:"YAML file format and syntax guide"},a="File format",o={id:"about/modelling/setup/file_format_and_syntax/index",title:"File format and syntax",description:"YAML file format and syntax guide",source:"@site/docs/about/modelling/setup/file_format_and_syntax/index.md",sourceDirName:"about/modelling/setup/file_format_and_syntax",slug:"/about/modelling/setup/file_format_and_syntax/",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/file_format_and_syntax/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"File format and syntax",sidebar_position:1,description:"YAML file format and syntax guide"},sidebar:"about",previous:{title:"Setup an eCalc\u2122 Model",permalink:"/ecalc/docs/about/modelling/setup/"},next:{title:"Expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions"}},l={},c=[{value:"Setup file syntax",id:"setup-file-syntax",level:2},{value:"Examples",id:"examples",level:2},{value:"YAML format example",id:"yaml-format-example",level:3},{value:"Full examples",id:"full-examples",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"file-format",children:"File format"}),"\n",(0,t.jsx)(n.p,{children:"The setup file is written in YAML format and needs to follow a strict pattern which consists of several levels specified by indentation. The indentation is very important. It is recommended to use an indentation of 2 spaces per level. At each level, there might be both required and optional keywords."}),"\n",(0,t.jsx)(n.h2,{id:"setup-file-syntax",children:"Setup file syntax"}),"\n",(0,t.jsx)(n.p,{children:"The overall system in eCalc is that the user defines inputs from subsurface and facility and\nthen establishes a model between these."}),"\n",(0,t.jsxs)(n.p,{children:["On the top level, the required keywords are ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})," which defines the input from facility characterization, ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," which defines time-dependant input parameters (e.g. reservoir profiles), ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"})," which defines the various fuel types used in the system, and ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," which is the top node defining the system of energy consumers. ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," is optional and may be used for multi-level energy usage models."]}),"\n",(0,t.jsx)(n.p,{children:"Documentation about how to set up each of these fields are found here, respectively:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"}),": List of input sources, CSV-files, containing all time series data including the\nreservoir variables."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),": List of input files from facility characterization. Typically, this can be\ncharacteristics for an element in a consumer system or characteristics for a generator set."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL_TYPES",children:"FUEL_TYPES"}),": Defining the fuel types being used in the model and the corresponding\nemissions."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"}),": Used for multi-level models, one model may refer to other models from either\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/MODELS",children:"MODELS"})," or ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/VARIABLES",children:"VARIABLES"}),": Used for defining variables to be used in expressions throughout the YAML file"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),": Defining the system of energy consumers on each installation\n(e.g. platform or mobile unit)."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"An eCalc model may contain one or several installations. Each installation has a set of specifications\n(e.g. fuel type, hydrocarbon export, ...) and specifications of the system of consumers."}),"\n",(0,t.jsx)(n.p,{children:"Emissions are emitted when fuel is burned. Thus, the first sublevel of consumers for an installation,\nare the fuel burners. As the figure below shows, there are three main types of fuel burners:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Electricity generation (generator sets),"}),"\n",(0,t.jsx)(n.li,{children:"Turbine-driven processes,"}),"\n",(0,t.jsx)(n.li,{children:"Flare/vent/other non reservoir dependent burners/emitters."}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["In eCalc under each installation, there is one keyword (",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),")\nspecifying the generator sets and one keyword (",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),")\nspecifying processes that require fuel directly (turbine-driven processes and flare/vent)."]}),"\n",(0,t.jsxs)(n.p,{children:["The processes with electrical motor drives and other electrical loads are modeled at the sublevel\nunder ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),"."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{src:s(19100).Z+"",width:"962",height:"495"})}),"\n",(0,t.jsx)(n.admonition,{title:"Comments",type:"tip",children:(0,t.jsx)(n.p,{children:"Comments are supported anywhere in the yml and csv files by using '#' to indicate the start of a comment.\nAll data after a '#' on the same line is ignored. If '#' is used at the beginning of the file, the\nfirst line without a preceding '#' is used as the header."})}),"\n",(0,t.jsx)(n.h2,{id:"examples",children:"Examples"}),"\n",(0,t.jsx)(n.h3,{id:"yaml-format-example",children:"YAML format example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - FILE:\n TYPE:\n NAME:\n\nFACILITY INPUTS:\n - FILE:\n TYPE:\n NAME:\n\nFUEL_TYPES:\n - NAME:\n FACTOR:\n\nMODELS:\n - NAME:\n - TYPE:\n\nVARIABLES:\n <variable_name>\n VALUE: <expression>\n\nINSTALLATIONS:\n - NAME:\n HCEXPORT:\n FUEL:\n GENERATORSETS:\n - NAME:\n ELECTRICITY2FUEL:\n CATEGORY:\n CONSUMERS:\n - NAME:\n CATEGORY:\n ENERGY_USAGE_MODEL:\n\n"})}),"\n",(0,t.jsx)(n.h3,{id:"full-examples",children:"Full examples"}),"\n",(0,t.jsxs)(n.p,{children:["Examples are an excellent way to quickly get an overview of the syntax. Check them out ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/examples/",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},19100:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/ecalc_general_consumer_overview-26f2e87a69f9a685f123b818e6bed313.png"},11151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>a});var t=s(67294);const r={},i=t.createContext(r);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebdd570f.490a72f9.js b/assets/js/ebdd570f.490a72f9.js new file mode 100644 index 0000000000..8d118887b4 --- /dev/null +++ b/assets/js/ebdd570f.490a72f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3177],{78929:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var t=i(85893),s=i(11151);const o={title:"v8.7 to v8.8",description:"v8.7 to v8.8 migration",sidebar_position:7},r="v8.7 to v8.8",a={id:"about/migration_guides/v8.7_to_v8.8",title:"v8.7 to v8.8",description:"v8.7 to v8.8 migration",source:"@site/docs/about/migration_guides/v8.7_to_v8.8.md",sourceDirName:"about/migration_guides",slug:"/about/migration_guides/v8.7_to_v8.8",permalink:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/migration_guides/v8.7_to_v8.8.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{title:"v8.7 to v8.8",description:"v8.7 to v8.8 migration",sidebar_position:7},sidebar:"about",previous:{title:"v8.6 to v8.7",permalink:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7"},next:{title:"Output data",permalink:"/ecalc/docs/about/miscellaneous/"}},d={},l=[{value:"Yaml migration",id:"yaml-migration",level:2},{value:"1. Changes to VENTING_EMITTERS",id:"1-changes-to-venting_emitters",level:3}];function c(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"v87-to-v88",children:"v8.7 to v8.8"}),"\n",(0,t.jsx)(e.p,{children:"In this migration guide you will find:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"#yaml-migration",children:"YAML changes"})}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"yaml-migration",children:"Yaml migration"}),"\n",(0,t.jsx)(e.h3,{id:"1-changes-to-venting_emitters",children:"1. Changes to VENTING_EMITTERS"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["Update ",(0,t.jsx)(e.code,{children:"VENTING_EMITTERS"})," to support rate ",(0,t.jsx)(e.code,{children:"TYPE"})," and ",(0,t.jsx)(e.code,{children:"UNIT"})]}),"\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.code,{children:"EMITTER_MODEL"})," is deprecated and replaced by a new keyword ",(0,t.jsx)(e.code,{children:"EMISSION"})]}),"\n",(0,t.jsxs)(e.li,{children:["In the new keyword ",(0,t.jsx)(e.code,{children:"EMISSION"})," the following should be specified:","\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.code,{children:"NAME"})," of the emission"]}),"\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.code,{children:"RATE"}),", including ",(0,t.jsx)(e.code,{children:"VALUE"})," and optionally ",(0,t.jsx)(e.code,{children:"UNIT"})," and ",(0,t.jsx)(e.code,{children:"TYPE"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.p,{children:"Previously, the format looked like this:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: <emitter name>\n CATEGORY: <category>\n # This is old\n EMISSION_NAME: <emission name>\n # This is old\n EMITTER_MODEL:\n # This is old\n - EMISSION_RATE: <emission rate [kg/day]>\n"})}),"\n",(0,t.jsxs)(e.p,{children:["But the new valid definition of ",(0,t.jsx)(e.code,{children:"VENTING_EMITTERS"})," in the yaml is now:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: <emitter name>\n CATEGORY: <category>\n # This is new\n EMISSION:\n # This is new\n NAME: <emission name>\n # This is new\n RATE:\n # This is new\n VALUE: <emission rate>\n # This is new\n UNIT: <emission rate unit, default kg/d>\n # This is new\n TYPE: <emission rate type, default STREAM_DAY>\n"})}),"\n",(0,t.jsxs)(e.p,{children:["Example with the new yaml-definition of ",(0,t.jsx)(e.code,{children:"VENTING_EMITTERS"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-yaml",children:"VENTING_EMITTERS:\n - NAME: SomeVentingEmitter\n CATEGORY: COLD-VENTING-FUGITIVE\n # This is new\n EMISSION:\n # This is new\n NAME: CH4\n # This is new\n RATE:\n # This is new\n VALUE: 4\n # This is new\n UNIT: kg/d\n # This is new\n TYPE: STREAM_DAY\n"})})]})}function h(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(c,{...n})}):c(n)}},11151:(n,e,i)=>{i.d(e,{Z:()=>a,a:()=>r});var t=i(67294);const s={},o=t.createContext(s);function r(n){const e=t.useContext(o);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:r(n.components),t.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/ec96df16.a887ab97.js b/assets/js/ec96df16.a887ab97.js new file mode 100644 index 0000000000..05f6258e77 --- /dev/null +++ b/assets/js/ec96df16.a887ab97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8519],{83773:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>s,default:()=>m,frontMatter:()=>t,metadata:()=>c,toc:()=>r});var l=i(85893),a=i(11151);const t={},s="!include",c={id:"about/references/keywords/include",title:"!include",description:"Description",source:"@site/docs/about/references/keywords/include.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/include",permalink:"/ecalc/docs/about/references/keywords/include",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/include.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"VENTING_EMITTERS",permalink:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS"},next:{title:"API reference",permalink:"/ecalc/docs/about/references/api/"}},o={},r=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example 1 - include map/object into list item",id:"example-1---include-mapobject-into-list-item",level:2},{value:"Example 2 - include map/object into object value",id:"example-2---include-mapobject-into-object-value",level:2},{value:"Example 3 - include list into object value",id:"example-3---include-list-into-object-value",level:2}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h1,{id:"include",children:"!include"}),"\n",(0,l.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,l.jsxs)(n.p,{children:["You can use ",(0,l.jsx)(n.code,{children:"!include"})," to separate your model into several files. ",(0,l.jsx)(n.code,{children:"!include"}),"\ncan be used as value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping, or as a value in a list."]}),"\n",(0,l.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",children:"!include <some_yaml_file.yaml>\n"})}),"\n",(0,l.jsxs)(n.admonition,{type:"tip",children:[(0,l.jsxs)(n.p,{children:["You can use ",(0,l.jsx)(n.code,{children:"ecalc show yaml <model_file>"})," to see the read yaml with ",(0,l.jsx)(n.code,{children:"!include"})," processed."]}),(0,l.jsx)(n.p,{children:"New in v7.2."})]}),"\n",(0,l.jsx)(n.h2,{id:"example-1---include-mapobject-into-list-item",children:"Example 1 - include map/object into list item"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a map/object as a single list element"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2}',children:" INSTALLATIONS:\n - !include installationA.yaml\n - NAME: installationB\n ...\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="installationA.yaml"',children:" NAME: installationA\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2,3}',children:" INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n"})}),"\n",(0,l.jsx)(n.h2,{id:"example-2---include-mapobject-into-object-value",children:"Example 2 - include map/object into object value"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a map/object as a value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {5}',children:" INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL: !include consumerB.yaml\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="consumerB.yaml"',children:" TYPE: COMPRESSOR\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {6,7}',children:" INSTALLATIONS:\n - NAME: installationA\n FUELCONSUMERS:\n - NAME: consumerB\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ...\n\n"})}),"\n",(0,l.jsx)(n.h2,{id:"example-3---include-list-into-object-value",children:"Example 3 - include list into object value"}),"\n",(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"!include"})," can be used to insert a list as a value in a ",(0,l.jsx)(n.code,{children:"KEY: VALUE"})," mapping"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {1}',children:"INSTALLATIONS: !include installations.yaml\n\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="installations.yaml"',children:" - NAME: installationA\n ...\n - NAME: installationB\n ...\n\n"})}),"\n",(0,l.jsx)(n.p,{children:"This is the same as"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-yaml",metastring:'title="main.yaml" {2-5}',children:" INSTALLATIONS:\n - NAME: installationA\n ...\n - NAME: installationB\n ...\n"})})]})}function m(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>s});var l=i(67294);const a={},t=l.createContext(a);function s(e){const n=l.useContext(t);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),l.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/edb3a98b.198e2662.js b/assets/js/edb3a98b.198e2662.js new file mode 100644 index 0000000000..40c17f3137 --- /dev/null +++ b/assets/js/edb3a98b.198e2662.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1728],{64115:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var s=r(85893),t=r(11151);const i={title:"Generator sets",sidebar_position:1,description:"Using generator sets in calculations"},a="Generator sets in calculations",o={id:"about/modelling/setup/installations/generator_sets_in_calculations",title:"Generator sets",description:"Using generator sets in calculations",source:"@site/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/generator_sets_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Generator sets",sidebar_position:1,description:"Using generator sets in calculations"},sidebar:"about",previous:{title:"Installations",permalink:"/ecalc/docs/about/modelling/setup/installations/"},next:{title:"Pump models",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations"}},l={},c=[{value:"Format",id:"format",level:3},{value:"Electricity2fuel function",id:"electricity2fuel-function",level:2},{value:"Description",id:"description",level:3},{value:"Format",id:"format-1",level:3},{value:"Power from shore",id:"power-from-shore",level:2},{value:"Description",id:"description-1",level:3},{value:"Example",id:"example",level:3},{value:"Heaters and boilers",id:"heaters-and-boilers",level:2},{value:"Description",id:"description-2",level:3},{value:"Example: Boiler as generator set",id:"example-boiler-as-generator-set",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"generator-sets-in-calculations",children:"Generator sets in calculations"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," keyword is optional. However, the only requirement is that each\ninstallation must have defined either ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," or\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",children:"FUELCONSUMERS"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"})," one or several ",(0,s.jsx)(n.code,{children:"generator sets"}),"\n(a 'set' of an engine of some sort and a generator) are specified in a list."]}),"\n",(0,s.jsxs)(n.p,{children:["Each generator set requires three sub-keywords, ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\nand ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CONSUMERS",children:"CONSUMERS"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"CATEGORY"}),".\nOptionally, ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," may be used to override the default fuel type specification for\nthe installation. If not specified, it will inherit that of the installation."]}),"\n",(0,s.jsx)(n.admonition,{title:"What happens when fuel is specified?",type:"tip",children:(0,s.jsxs)(n.p,{children:["When ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FUEL",children:"FUEL"})," is defined for a generator set, there is no merging between the installation fuel\ndefinition and the generator set fuel definition, but a complete override of the configuration."]})}),"\n",(0,s.jsxs)(n.p,{children:["Category can be either ",(0,s.jsx)(n.code,{children:"TURBINE-GENERATOR"})," or ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: <generatorset name>\n CATEGORY: <category>\n FUEL: <optional fuel configuration reference>\n ELECTRICITY2FUEL: <electricity to fuel facility input reference>\n CONSUMERS:\n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"electricity2fuel-function",children:"Electricity2fuel function"}),"\n",(0,s.jsx)(n.h3,{id:"description",children:"Description"}),"\n",(0,s.jsxs)(n.p,{children:["The behavior of a generator set is described by an ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\ntable, which relates the burned fuel rate to delivered power, including the power generation efficiency at different loads.\nIt also defines the operational envelope of the generator set."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," may be modeled with a constant function through time or\nwith different power vs. fuel relations for different time intervals."]}),"\n",(0,s.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ELECTRICITY2FUEL: <facility_input_reference>\n"})}),"\n",(0,s.jsx)(n.p,{children:"or"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"ELECTRICITY2FUEL:\n <DATE>: <facility_input_reference_1>\n <DATE>: <facility_input_reference_2>\n"})}),"\n",(0,s.jsx)(n.h2,{id:"power-from-shore",children:"Power from shore"}),"\n",(0,s.jsx)(n.h3,{id:"description-1",children:"Description"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Power from shore is currently handled in eCalc\u2122 by defining a dummy ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," model with zero fuel usage, and applying the ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"})," category. This is an intermediate solution and will be dealt with differently in the future."]})}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["Make an ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," input file with zero fuel usage."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-text",children:"POWER, FUEL\n# [MW], [SM3/day]\n0, 0\n50, 0\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Specify ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})," under\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: genset_pfs\n TYPE: ELECTRICITY2FUEL\n FILE: genset_pfs.csv\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.code,{children:"POWER-FROM-SHORE"})," category and the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\nspecified under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: generatorset_with_pfs_event\n CATEGORY:\n 2020-01-01: TURBINE-GENERATOR\n 2030-01-01: POWER-FROM-SHORE\n ELECTRICITY2FUEL:\n 2020-01-01: genset_turbine\n 2030-01-01: genset_pfs\n CONSUMERS:\n ...\n"})}),"\n",(0,s.jsx)(n.p,{children:"If power from shore is used for the full time range you can skip the dates in both CATEGORY and ELECTRICITY2FUEL"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: generatorset_with_pfs_event\n CATEGORY: POWER-FROM-SHORE\n ELECTRICITY2FUEL: genset_pfs\n CONSUMERS:\n ...\n"})}),"\n",(0,s.jsx)(n.h2,{id:"heaters-and-boilers",children:"Heaters and boilers"}),"\n",(0,s.jsx)(n.h3,{id:"description-2",children:"Description"}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Heaters and boilers should be modeled in eCalc\u2122 as\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/GENERATORSETS",children:"GENERATORSETS"}),", applying the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"HEATER"})," and ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/CATEGORY",children:"BOILER"})," categories. This is an intermediate solution and may be dealt with differently in the future."]})}),"\n",(0,s.jsx)(n.h3,{id:"example-boiler-as-generator-set",children:"Example: Boiler as generator set"}),"\n",(0,s.jsxs)(n.p,{children:["Specify the correlation between energy delivered and fuel consumed under\n",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: boiler_energy_fuel\n TYPE: ELECTRICITY2FUEL\n FILE: boiler_energy_fuel.csv\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.code,{children:"BOILER"})," category and the ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"}),"\nspecified under ",(0,s.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",children:"FACILITY_INPUTS"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"GENERATORSETS:\n - NAME: boiler_as_generator\n CATEGORY: BOILER\n ELECTRICITY2FUEL: boiler_energy_fuel\n CONSUMERS:\n ...\n"})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>o,a:()=>a});var s=r(67294);const t={},i=s.createContext(t);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eee46244.b69274dc.js b/assets/js/eee46244.b69274dc.js new file mode 100644 index 0000000000..180fd8bfbc --- /dev/null +++ b/assets/js/eee46244.b69274dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7154],{32593:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>t,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>c});var i=s(85893),r=s(11151);const l={slug:"v7-5-release",title:"v7.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:8},t="eCalc v7.5",a={id:"changelog/v7-5",title:"v7.5",description:"Features",source:"@site/docs/changelog/v7-5.md",sourceDirName:"changelog",slug:"/changelog/v7-5-release",permalink:"/ecalc/docs/changelog/v7-5-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v7-5.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:8,frontMatter:{slug:"v7-5-release",title:"v7.5",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:8},sidebar:"changelog",previous:{title:"v7.4",permalink:"/ecalc/docs/changelog/v7-4-release"},next:{title:"v7.6",permalink:"/ecalc/docs/changelog/v7-6-release"}},o={},c=[{value:"Features",id:"features",level:2},{value:"<em>Fixes</em>",id:"fixes",level:2},{value:"CLI",id:"cli",level:2}];function d(e){const n={em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ecalc-v75",children:"eCalc v7.5"}),"\n",(0,i.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Add YAML interface for PRESSURE_CONTROL for Single and Variable Speed Compressor Train"}),"\n",(0,i.jsx)(n.li,{children:"Add support for PRESSURE_CONTROL: NONE for Variable Speed Compressor Train"}),"\n",(0,i.jsx)(n.li,{children:"Run GENERATORSETS at max capacity with invalid timestep-flags instead of forward-filling last valid value (extrapcorrection)"}),"\n",(0,i.jsx)(n.li,{children:"Add support for uploading models as a zip-file"}),"\n",(0,i.jsx)(n.li,{children:"Apply resampling by FREQUENCY when exporting CSV"}),"\n",(0,i.jsx)(n.li,{children:"Support single speed compressor chart as csv resource"}),"\n",(0,i.jsx)(n.li,{children:"Improved support for uploading YAML-files. Comments, whitespaces, inline lists should now be preserved instead of removed and reformatted"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fixes",children:(0,i.jsx)(n.em,{children:"Fixes"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Add missing power loss factor for Compressor Train Variable Speed Multiple Pressure model."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Ensure that GENERATORSETS stops when consumer power rate is zero"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Ensure invalid time-step and zero power rate for the genset when the el-consumer(s) starts before the Genset providing power."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Correct handling of power rate in LTP export wen combining compressors with and without fuel in temporal models."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"validate order of temporal models"}),"\n",(0,i.jsx)(n.p,{children:"Temporal models should be specified in chronological order"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"validation of variable names"}),"\n",(0,i.jsx)(n.p,{children:"Make sure the full variable name is matched against the regular expression.\nPreviously we allowed special characters for all characters except the first."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Avoid crash when ENERGY_USAGE_MODELs are defined only outside the time window of the CONSUMER."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Proper result handling when GENERATORSETS has not yet started and el-consumer is running."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"cli",children:"CLI"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"add --skip-validation argument"}),"\n",(0,i.jsx)(n.p,{children:"Make it possible to skip the validation step, passing the data to the next step. This will still have some\nvalidation and might give a more clear error message."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"add --simple-output argument"}),"\n",(0,i.jsx)(n.p,{children:"Use simple output argument to get a simplified result object showing only the most relevant results such as\nenergy consumption and emissions."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(67294);const r={},l=i.createContext(r);function t(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f054b415.0c59b1a7.js b/assets/js/f054b415.0c59b1a7.js new file mode 100644 index 0000000000..0efa961515 --- /dev/null +++ b/assets/js/f054b415.0c59b1a7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7652],{99846:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var n=o(85893),i=o(11151);const r={title:"Theory",sidebar_position:1,description:"Core theory about eCalc\u2122"},c=void 0,a={id:"about/modelling/theory/index",title:"Theory",description:"Core theory about eCalc\u2122",source:"@site/docs/about/modelling/theory/index.md",sourceDirName:"about/modelling/theory",slug:"/about/modelling/theory/",permalink:"/ecalc/docs/about/modelling/theory/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/theory/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Theory",sidebar_position:1,description:"Core theory about eCalc\u2122"},sidebar:"about",previous:{title:"Modelling guide",permalink:"/ecalc/docs/about/modelling/"},next:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/theory/pump_modelling"}},s={},l=[];function d(e){const t={p:"p",...(0,i.a)(),...e.components};return(0,n.jsx)(t.p,{children:"This section will describe core pump and compressor theory that is used in eCalc\u2122."})}function u(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,t,o)=>{o.d(t,{Z:()=>a,a:()=>c});var n=o(67294);const i={},r=n.createContext(i);function c(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f52ed7e3.574da84b.js b/assets/js/f52ed7e3.574da84b.js new file mode 100644 index 0000000000..73e8c6ff14 --- /dev/null +++ b/assets/js/f52ed7e3.574da84b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9922],{82197:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=r(85893),n=r(11151);const i={title:"Time series",sidebar_position:2,description:"Time series guide and description"},o=void 0,a={id:"about/modelling/setup/time_series",title:"Time series",description:"Time series guide and description",source:"@site/docs/about/modelling/setup/time_series.md",sourceDirName:"about/modelling/setup",slug:"/about/modelling/setup/time_series",permalink:"/ecalc/docs/about/modelling/setup/time_series",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/time_series.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Time series",sidebar_position:2,description:"Time series guide and description"},sidebar:"about",previous:{title:"Expressions",permalink:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions"},next:{title:"Facility inputs",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/"}},d={},c=[{value:"Supported types",id:"supported-types",level:2},{value:"Format",id:"format",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Example",id:"example",level:2}];function l(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," keyword is ",(0,t.jsx)(s.strong,{children:"mandatory"})," within the eCalc\u2122 YAML file."]})}),"\n",(0,t.jsx)(s.p,{children:'This part of the setup file defines the inputs for time dependent variables, or "reservoir\nvariables". For many fields, this may be only one reservoir simulation model. But in some\ncases, one might have several sources for reservoir and other relevant time series variables.'}),"\n",(0,t.jsxs)(s.p,{children:["For example, a field may have a reservoir simulation model for some areas and decline curves in other area of\nthe reservoir. There may also be tie-ins which are affecting the energy/emissions on the field\ninstallations. Also, there may be time profiles for other variables.\nTherefore, a set of sources may be specified with a name, path to data and type. The name is\nlater referred to in the system of energy consumers defined under ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"}),"."]}),"\n",(0,t.jsxs)(s.p,{children:["Reservoir variables and other time varying data not coming from a reservoir simulation model can\nbe specified in a ",(0,t.jsx)(s.a,{href:"https://en.wikipedia.org/wiki/Comma-separated_values",children:"CSV"})," file."]}),"\n",(0,t.jsx)(s.p,{children:"The paths to the input files may be either absolute or relative to the setup file."}),"\n",(0,t.jsx)(s.h2,{id:"supported-types",children:"Supported types"}),"\n",(0,t.jsx)(s.p,{children:"The supported time series types are:"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Type"}),(0,t.jsx)(s.th,{children:"Supported file formats"}),(0,t.jsx)(s.th,{children:"Interpolation type"}),(0,t.jsx)(s.th,{children:"Comment"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"DEFAULT"}),(0,t.jsx)(s.td,{children:".csv"}),(0,t.jsxs)(s.td,{children:["Not possible to specify: ",(0,t.jsx)("br",{}),(0,t.jsx)(s.code,{children:"RIGHT"})," is used"]}),(0,t.jsx)(s.td,{children:(0,t.jsx)(s.strong,{children:"New in v8.1"})})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"MISCELLANEOUS"}),(0,t.jsx)(s.td,{children:".csv"}),(0,t.jsxs)(s.td,{children:["Mandatory input:",(0,t.jsx)("br",{}),(0,t.jsx)(s.code,{children:"LEFT"}),"/",(0,t.jsx)(s.code,{children:"RIGHT"}),"/",(0,t.jsx)(s.code,{children:"LINEAR"})]}),(0,t.jsx)(s.td,{})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,t.jsxs)(s.p,{children:["Each line under ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TIME_SERIES",children:"TIME_SERIES"})," has the format:"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: <time series reference name>\n TYPE: <type>\n FILE: <path_to_file>\n INFLUENCE_TIME_VECTOR: <True/False>\n EXTRAPOLATION: <True/False>\n INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>\n"})}),"\n",(0,t.jsxs)(s.p,{children:["The input data is expected to be in metric units. The ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/NAME",children:"NAME"})," is later referred\nto in the ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," part of the setup file.\n",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"}),", ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",children:"EXTRAPOLATION"}),"\nand ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",children:"INTERPOLATION_TYPE"})," may have default values set depending\non the choice of ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/TYPE",children:"TYPE"}),". See the documentation for each keyword for details."]}),"\n",(0,t.jsx)(s.h3,{id:"requirements",children:"Requirements"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["At least one input source with ",(0,t.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",children:"INFLUENCE_TIME_VECTOR"})," set to True."]}),"\n",(0,t.jsx)(s.li,{children:"Must include sources referred to in the variables for each consumer."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: SIM1\n TYPE: DEFAULT\n FILE: /path_to_model1/model_data.csv\n - NAME: SIM2\n TYPE: DEFAULT\n FILE: /path_to_tiein/tie_in_field.csv\n - NAME: DATA3\n TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures\n FILE: inputs/somecsvdata.csv\n INFLUENCE_TIME_VECTOR: FALSE\n EXTRAPOLATION: TRUE\n INTERPOLATION_TYPE: RIGHT\n"})})]})}function h(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,s,r)=>{r.d(s,{Z:()=>a,a:()=>o});var t=r(67294);const n={},i=t.createContext(n);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f54e894e.8fedba0d.js b/assets/js/f54e894e.8fedba0d.js new file mode 100644 index 0000000000..4321425e02 --- /dev/null +++ b/assets/js/f54e894e.8fedba0d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[770],{33790:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>E,frontMatter:()=>t,metadata:()=>o,toc:()=>d});var i=s(85893),r=s(11151);const t={sidebar_position:4,title:"Drogon model",description:"Model using Drogon input data"},l="Drogon model example",o={id:"about/modelling/examples/drogon",title:"Drogon model",description:"Model using Drogon input data",source:"@site/docs/about/modelling/examples/drogon.md",sourceDirName:"about/modelling/examples",slug:"/about/modelling/examples/drogon",permalink:"/ecalc/docs/about/modelling/examples/drogon",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/examples/drogon.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,title:"Drogon model",description:"Model using Drogon input data"},sidebar:"about",previous:{title:"Advanced model",permalink:"/ecalc/docs/about/modelling/examples/advanced"},next:{title:"Reference documentation",permalink:"/ecalc/docs/about/references/"}},a={},d=[{value:"YAML model overview",id:"yaml-model-overview",level:2},{value:"TIME_SERIES",id:"time_series",level:2},{value:"FACILITY_INPUTS",id:"facility_inputs",level:2},{value:"MODELS",id:"models",level:2},{value:"FUEL_TYPES",id:"fuel_types",level:2},{value:"INSTALLATIONS",id:"installations",level:2},{value:"GENERATORSETS",id:"generatorsets",level:3},{value:"PUMPS",id:"pumps",level:4},{value:"COMPRESSORS",id:"compressors",level:4},{value:"BASE-LOAD",id:"base-load",level:4},{value:"Full Model",id:"full-model",level:2},{value:"Input Data",id:"input-data",level:2},{value:"Facility resources",id:"facility-resources",level:3},{value:"Timeseries resources",id:"timeseries-resources",level:3}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",mermaid:"mermaid",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"drogon-model-example",children:"Drogon model example"}),"\n",(0,i.jsx)(n.p,{children:"The Drogon example is based on a synthetic data set."}),"\n",(0,i.jsx)(n.p,{children:"On the installation, the following consumers are identified:"}),"\n",(0,i.jsx)(n.mermaid,{value:"graph TD;\n A(Drogon Installation) --\x3e B(Generator set A);\n B --\x3e C(Base production load);\n B --\x3e D(Gas compression train);\n B --\x3e E(Gas re-compressors);\n B --\x3e F(Sea water injection pump);\n B --\x3e G(Booster pump);\n style A stroke:red;\n style C stroke:blue;\n style D stroke:blue;\n style E stroke:blue;\n style F stroke:blue;\n style G stroke:blue;"}),"\n",(0,i.jsx)(n.p,{children:"The results of a performed characterization of the equipment are listed below:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Consumer"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Generator set A"}),(0,i.jsx)(n.td,{children:"Generator set"}),(0,i.jsx)(n.td,{children:"Variable fuel consumer with electricity to fuel function"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Base production load"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Constant load - 9 MW"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Gas compression train"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Variable consumption depending on produced gas rate"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Gas re-compressors"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Constant load - 2 MW"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Sea water injection pump"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Variable consumption depending on water injection rate"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Booster pump"}),(0,i.jsx)(n.td,{children:"Power consumer"}),(0,i.jsx)(n.td,{children:"Constant load - 2 MW"})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"yaml-model-overview",children:"YAML model overview"}),"\n",(0,i.jsx)(n.p,{children:"The YAML model consists of the following components:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Time series input"}),"\n",(0,i.jsx)(n.li,{children:"Facility inputs"}),"\n",(0,i.jsx)(n.li,{children:"Model inputs"}),"\n",(0,i.jsx)(n.li,{children:"Fuel type input"}),"\n",(0,i.jsx)(n.li,{children:"Installation topography"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The skeleton of the YAML file looks like the following:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES: \n <placeholder>\nFACILITY_INPUTS:\n <placeholder>\nMODELS:\n <placeholder>\nFUEL_TYPES:\n <placeholder>\nINSTALLATIONS:\n <placeholder>\n"})}),"\n",(0,i.jsx)(n.h2,{id:"time_series",children:"TIME_SERIES"}),"\n",(0,i.jsxs)(n.p,{children:["The reservoir variables. In this case the file is called: ",(0,i.jsx)(n.code,{children:"drogon_mean.csv"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES: \n - NAME: SIM1\n TYPE: DEFAULT\n FILE: drogon_mean.csv\n"})}),"\n",(0,i.jsx)(n.h2,{id:"facility_inputs",children:"FACILITY_INPUTS"}),"\n",(0,i.jsxs)(n.p,{children:["In this case, the compressors are not specified in this section as ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"GENERIC COMPRESSOR CHARTS"}),". Thus, the pump chart and generator set will be the only facility components specified within this section."]}),"\n",(0,i.jsxs)(n.p,{children:["The pump will be single speed, meaning that the pump type will be ",(0,i.jsx)(n.code,{children:"PUMP_CHART_SINGLE_SPEED"}),". The generator set will be a tabulated, where power consumption will be linked to fuel gas utilised."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"FACILITY_INPUTS: \n - NAME: genset_a_power_fuel\n TYPE: ELECTRICITY2FUEL\n FILE: genset.csv\n - NAME: wi_200\n FILE: wi_200bar_ssp.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\n"})}),"\n",(0,i.jsx)(n.h2,{id:"models",children:"MODELS"}),"\n",(0,i.jsx)(n.p,{children:"The model section will contain the fluid model, the compressor chart and the subsequent compressor model.\nPeng-Robinson (PR) will be the selected equation of state in this example."}),"\n",(0,i.jsxs)(n.p,{children:['This example will use a generic compressor chart. In this case, a generic compressor chart from input will utilised. Here, the a "typical" chart will be shifted to match the input head and rate data. See ',(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",children:"GENERIC COMPRESSOR CHARTS"})," for more details. When a generic chart is used, a polytropic efficiency needs to be specified. This value will be constant throughout the use, in this case a value of 0.8 is used."]}),"\n",(0,i.jsxs)(n.p,{children:["A ",(0,i.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",children:"SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN"})," model is used in this example, as this is necessary when a generic chart is used. Instead of manually specifying the number of compression stages, a ",(0,i.jsx)(n.code,{children:"MAXIMUM_PRESSURE_RATIO_PER_STAGE"})," of 3.5 is defined. This will automatically distribute the pressure increase amongst the compression train so that no pressure ratio per compression stage will be above 3.5."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: drogon_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: PR\n COMPOSITION:\n water: 0.0\n nitrogen: 0.510676386339746\n CO2: 2.44965511776504\n methane: 75.6328106126248\n ethane: 10.9074631209139\n propane: 8.11875087121037\n i_butane: 0.849146377471569\n n_butane: 1.34903656604691\n i_pentane: 0.104982143381498\n n_pentane: 0.071218218251483\n n_hexane: 0.0063\n\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.8\n UNITS:\n EFFICIENCY: FRACTION\n\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: drogon_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 19.3\n"})}),"\n",(0,i.jsx)(n.h2,{id:"fuel_types",children:"FUEL_TYPES"}),"\n",(0,i.jsxs)(n.p,{children:["The fuel gas has a CO",(0,i.jsx)("sub",{children:"2"})," factor of 2.416."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"FUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: CO2\n FACTOR: 2.416 #CO2/Sm3 fuel gas burned\n"})}),"\n",(0,i.jsx)(n.h2,{id:"installations",children:"INSTALLATIONS"}),"\n",(0,i.jsxs)(n.p,{children:["In the ",(0,i.jsx)(n.code,{children:"INSTALLATIONS"})," section, the previously defined models and facility inputs are further defined. Here the hydrocarbon export can be specified. This is used in order to get a hydrocarbon-to-emission value. In this case, it is assumed that this facility exports oil (",(0,i.jsx)(n.code,{children:"OIL_PROD"}),") and gas (",(0,i.jsx)(n.code,{children:"GAS_PROD"}),")."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"INSTALLATIONS:\n - NAME: drogon_installation\n CATEGORY: FIXED\n HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000\n FUEL: fuel_gas\n"})}),"\n",(0,i.jsx)(n.h3,{id:"generatorsets",children:"GENERATORSETS"}),"\n",(0,i.jsxs)(n.p,{children:["There is one generator set used in this example - ",(0,i.jsx)(n.code,{children:"Generator set A"}),". This is a tabular relationship between power generated/consumed and fuel gas burnt.\nUnder this category, all consumers that utilise electricity are defined. In this case scenario, all pumps and compressors are electrically driven; thus, all consumers will be specified under this category."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" GENERATORSETS:\n - NAME: main_power\n ELECTRICITY2FUEL: genset_a_power_fuel\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n"})}),"\n",(0,i.jsx)(n.h4,{id:"pumps",children:"PUMPS"}),"\n",(0,i.jsxs)(n.p,{children:["The previously defined variable speed pump (in ",(0,i.jsx)(n.code,{children:"FACILITY_INPUTS"}),") is put into further defined with suction and discharge pressures, rates and operational settings."]}),"\n",(0,i.jsxs)(n.p,{children:["Here, a system of pumps is used. This means that instead of a single pump being used to deliver the respective injection rate, a system of pumps is defined. In this case, a system of two pumps will be used. If the first pump is unable to deliver the requested head or rate, a second pump will be additionally used and the rate will be split across the pump system.\nAs only one pump has been defined, the same pump model will be used for each train. As each pump is identical, the rate will be equally split across the train when needed (this is to ensure the highest pump efficiency - see ",(0,i.jsx)(n.a,{href:"../setup/installations/pump_models_in_calculations",children:"PUMP MODELLING"})," for more details.)"]}),"\n",(0,i.jsxs)(n.p,{children:["A fluid density of 1025 kg/m",(0,i.jsx)("sup",{children:"3"})," is used, with a suction and discharge pressure of 12 and 200 bar respectively."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: water injection\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a_lp\n CHART: wi_200\n - NAME: pump_b_lp\n CHART: wi_200\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1025\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n - 0\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS:\n - 0.5\n - 0.5\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,i.jsx)(n.h4,{id:"compressors",children:"COMPRESSORS"}),"\n",(0,i.jsx)(n.p,{children:"For the compression model, a compressor system is not used. This is due to the use of generic compressor charts. As the generic charts are shifted from input data there is no need for an additional compression train. No matter what rate/head values are inputted here, the generic chart is shifted so that all operational points will be within the operational envelope of the compressor."}),"\n",(0,i.jsx)(n.p,{children:"Here, 13 bar and 421 bar is specified for the suction and discharge pressure respectively."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: gas export compressor train\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_2\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n SUCTION_PRESSURE: 13\n DISCHARGE_PRESSURE: 421\n"})}),"\n",(0,i.jsx)(n.h4,{id:"base-load",children:"BASE-LOAD"}),"\n",(0,i.jsx)(n.p,{children:"Three different constant-loads are specified in this section. These being the booster pump, the re-compressors and then the general facility base-load."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:" - NAME: boosterpump\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n - NAME: baseload\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 9\n - NAME: re-compressors\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n\n"})}),"\n",(0,i.jsx)(n.h2,{id:"full-model",children:"Full Model"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"TIME_SERIES:\n - NAME: SIM1\n FILE: drogon_mean.csv\n TYPE: DEFAULT\nFACILITY_INPUTS:\n - NAME: genset_a_power_fuel\n FILE: genset.csv\n TYPE: ELECTRICITY2FUEL\n - NAME: wi_200\n FILE: wi_200bar_ssp.csv\n TYPE: PUMP_CHART_SINGLE_SPEED\n UNITS:\n HEAD: M\n RATE: AM3_PER_HOUR\n EFFICIENCY: PERCENTAGE\nMODELS:\n - NAME: drogon_fluid\n TYPE: FLUID\n FLUID_MODEL_TYPE: COMPOSITION\n EOS_MODEL: PR\n COMPOSITION:\n water: 0.0\n nitrogen: 0.510676386339746\n CO2: 2.44965511776504\n methane: 75.6328106126248\n ethane: 10.9074631209139\n propane: 8.11875087121037\n i_butane: 0.849146377471569\n n_butane: 1.34903656604691\n i_pentane: 0.104982143381498\n n_pentane: 0.071218218251483\n n_hexane: 0.0063\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.8\n UNITS:\n EFFICIENCY: FRACTION\n - NAME: simplified_compressor_train_model\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: drogon_fluid\n COMPRESSOR_TRAIN:\n MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5\n COMPRESSOR_CHART: generic_from_input_compressor_chart\n INLET_TEMPERATURE: 19.3\nFUEL_TYPES:\n - NAME: fuel_gas\n CATEGORY: FUEL-GAS\n EMISSIONS:\n - NAME: co2_fuel_gas\n FACTOR: 2.416\nINSTALLATIONS:\n - NAME: drogon_installation\n CATEGORY: FIXED\n HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000\n FUEL: fuel_gas\n GENERATORSETS:\n - NAME: main_power\n ELECTRICITY2FUEL: genset_a_power_fuel\n CATEGORY: TURBINE-GENERATOR\n CONSUMERS:\n - NAME: wi_lp\n CATEGORY: PUMP\n ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump_a_lp\n CHART: wi_200\n - NAME: pump_b_lp\n CHART: wi_200\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1025\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n - 0\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS:\n - 0.5\n - 0.5\n SUCTION_PRESSURE: 12\n DISCHARGE_PRESSURE: 200\n \n - NAME: gas export compressor train\n CATEGORY: COMPRESSOR\n ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR_SYSTEM\n COMPRESSORS:\n - NAME: train1_2\n COMPRESSOR_MODEL: simplified_compressor_train_model\n TOTAL_SYSTEM_RATE: SIM1;GAS_PROD\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS:\n - 1\n SUCTION_PRESSURE: 13\n DISCHARGE_PRESSURE: 421\n\n - NAME: boosterpump\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n - NAME: baseload\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 9\n - NAME: re-compressors\n CATEGORY: BASE-LOAD\n ENERGY_USAGE_MODEL:\n TYPE: DIRECT\n LOAD: 2\n"})}),"\n",(0,i.jsx)(n.h2,{id:"input-data",children:"Input Data"}),"\n",(0,i.jsx)(n.h3,{id:"facility-resources",children:"Facility resources"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",metastring:'title="genset.csv"',children:"POWER, FUEL\n# [MW], [Sm3/d]\n0,0\n2.38,37766.13\n4.76,50769.26\n5.9,59258.52\n7.14,63772.39\n9.52,76775.52\n10.71,83277.09\n11.9,89808.09\n14.28,102781.8\n16.66,115784.9\n17.8,119883.6\n19.04,128788\n21.42,141791.2\n21.4201,166554.2\n28.56,205563.6\n33.32,231569.8\n38.08,257576.1\n42.84,283582.3\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",metastring:'title="wi_200bar_ssp.csv"',children:"RATE,HEAD,EFFICIENCY,SPEED\n830,1490,81,3741\n800,1550,81.7,3741\n600,1825,78,3741\n500,1915,72.5,3741\n415,1955,66,3741\n"})}),"\n",(0,i.jsx)(n.h3,{id:"timeseries-resources",children:"Timeseries resources"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",metastring:'title="drogon_mean.csv"',children:"DATE,GAS_PROD,OIL_PROD,WATER_INJ\n01.01.2020,329327.76,2301.9189,3796.9621\n01.01.2021,533620.39,3699.8435,8533.0322\n01.01.2022,416004.76,2837.5915,9434.1385\n01.01.2023,340118.19,2280.7372,10019.154\n01.01.2024,290127.01,1905.7952,10428.387\n01.01.2025,253292.19,1635.7671,10725.254\n01.01.2026,223584.53,1426.9726,10954.338\n01.01.2027,198453.07,1249.781,11153.675\n01.01.2028,177306.77,1099.8572,11318.01\n01.01.2029,159723.78,977.37529,11450.614\n01.01.2030,145056.33,875.30836,11561.335\n01.01.2031,132577.75,788.45521,11654.645\n01.01.2032,122166.68,715.64707,11734.129\n01.01.2033,113070.74,653.71407,11802.565\n01.01.2034,105114.67,600.04874,11860.717\n01.01.2035,98147.958,553.56297,11910.283\n"})})]})}function E(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>l});var i=s(67294);const r={},t=i.createContext(r);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f571fee5.08c2d17b.js b/assets/js/f571fee5.08c2d17b.js new file mode 100644 index 0000000000..b31b335f32 --- /dev/null +++ b/assets/js/f571fee5.08c2d17b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[505],{54132:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=n(85893),r=n(11151);const i={title:"YAML keywords",sidebar_position:2,description:"eCalc KEYWORDS"},d="Keywords",o={id:"about/references/keywords/index",title:"YAML keywords",description:"eCalc KEYWORDS",source:"@site/docs/about/references/keywords/index.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/",permalink:"/ecalc/docs/about/references/keywords/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"YAML keywords",sidebar_position:2,description:"eCalc KEYWORDS"},sidebar:"about",previous:{title:"Reference documentation",permalink:"/ecalc/docs/about/references/"},next:{title:"ADJUSTMENT",permalink:"/ecalc/docs/about/references/keywords/ADJUSTMENT"}},c={},l=[{value:"Top level keywords",id:"top-level-keywords",level:2}];function a(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"keywords",children:"Keywords"}),"\n",(0,s.jsxs)(t.p,{children:["eCalc models are defined using keywords in ",(0,s.jsx)(t.code,{children:"YAML"})," (YAML Ain't Markup Language) model files. This\npage gives an overview of the top level keywords as well as and overview of all available keywords in\neCalc with a short description."]}),"\n",(0,s.jsx)(t.h2,{id:"top-level-keywords",children:"Top level keywords"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Keyword"}),(0,s.jsx)(t.th,{children:"Required"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"END",children:"END"})}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Global end date for eCalc calculations."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"})}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"List of input files from facility characterization."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"FUEL_TYPES",children:"FUEL_TYPES"})}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Definition(s) the fuel type(s) being used in the model and the corresponding emissions."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"INSTALLATIONS",children:"INSTALLATIONS"})}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"Definitions of the system of energy consumers on each installation (e.g. platform)."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"START",children:"START"})}),(0,s.jsx)(t.td,{children:"No"}),(0,s.jsx)(t.td,{children:"Global start date for eCalc calculations."})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"TIME_SERIES",children:"TIME_SERIES"})}),(0,s.jsx)(t.td,{children:"Yes"}),(0,s.jsx)(t.td,{children:"List of input sources (files) containing all time series data."})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>d});var s=n(67294);const r={},i=s.createContext(r);function d(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f577f5c2.837972fc.js b/assets/js/f577f5c2.837972fc.js new file mode 100644 index 0000000000..fa98c15431 --- /dev/null +++ b/assets/js/f577f5c2.837972fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7959],{97335:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var i=n(85893),s=n(11151);const t={title:"Compressor charts",sidebar_position:2,description:"Introduction into compressor charts"},o="Compressor chart",a={id:"about/modelling/setup/models/compressor_modelling/compressor_charts/index",title:"Compressor charts",description:"Introduction into compressor charts",source:"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",sourceDirName:"about/modelling/setup/models/compressor_modelling/compressor_charts",slug:"/about/modelling/setup/models/compressor_modelling/compressor_charts/",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Compressor charts",sidebar_position:2,description:"Introduction into compressor charts"},sidebar:"about",previous:{title:"Compressor modelling",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/"},next:{title:"Compressor train types",permalink:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/"}},c={},l=[{value:"User defined single speed compressor chart",id:"user-defined-single-speed-compressor-chart",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Format",id:"format-1",level:4},{value:"Example",id:"example-1",level:4},{value:"User defined variable speed compressor chart",id:"user-defined-variable-speed-compressor-chart",level:2},{value:"Format",id:"format-2",level:3},{value:"Example",id:"example-2",level:3},{value:"Format",id:"format-3",level:4},{value:"Example",id:"example-3",level:4},{value:"Generic compressor chart with predefined design point",id:"generic-compressor-chart-with-predefined-design-point",level:2},{value:"Format",id:"format-4",level:3},{value:"Example",id:"example-4",level:3},{value:"Example",id:"example-5",level:3},{value:"Generic compressor chart with design point calculated from input data",id:"generic-compressor-chart-with-design-point-calculated-from-input-data",level:2},{value:"Format",id:"format-5",level:3},{value:"Example",id:"example-6",level:3},{value:"Surge control margin for variable speed compressor chart",id:"surge-control-margin-for-variable-speed-compressor-chart",level:2},{value:"Format",id:"format-6",level:3}];function d(e){const r={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.h1,{id:"compressor-chart",children:"Compressor chart"}),"\n",(0,i.jsx)(r.p,{children:"The compressor chart is used to set up a model of each compressor. eCalc\u2122 currently support four ways to set up a\ncompressor chart"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"Predefined single speed chart"}),"\n",(0,i.jsx)(r.li,{children:"Predefined variable speed chart"}),"\n",(0,i.jsx)(r.li,{children:"Generic compressor chart with a specified design point"}),"\n",(0,i.jsx)(r.li,{children:"Generic compressor chart which is automatically adjusted to have capacity for the input data"}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"user-defined-single-speed-compressor-chart",children:"User defined single speed compressor chart"}),"\n",(0,i.jsxs)(r.p,{children:["The single speed chart type allows a single compressor curve for one speed, using the keyword ",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CURVE",children:"CURVE"})]}),"\n",(0,i.jsx)(r.h3,{id:"format",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n CURVE:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_single_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: SINGLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVE:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n"})}),"\n",(0,i.jsxs)(r.admonition,{title:"Tip",type:"tip",children:[(0,i.jsx)(r.p,{children:"It is also possible to input single speed compressor chart as csv file."}),(0,i.jsx)(r.h4,{id:"format-1",children:"Format"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVE:\n FILE: <csv file with single speed compressor chart>\n"})}),(0,i.jsx)(r.h4,{id:"example-1",children:"Example"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVE:\n FILE: compressor_chart_single_speed.csv\n"})})]}),"\n",(0,i.jsx)(r.h2,{id:"user-defined-variable-speed-compressor-chart",children:"User defined variable speed compressor chart"}),"\n",(0,i.jsxs)(r.p,{children:["The variable speed chart type allows a fully defined compressor chart with data for two or more speeds, using the keyword ",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/references/keywords/CURVES",children:"CURVES"}),". The upper and\nlower speed curves will be interpreted as the speed capacity limits for the chart.\nWhilst the lowest rate points on each of the upper and lower speed curves will define the minimum flow line for the compressor."]}),"\n",(0,i.jsxs)(r.p,{children:["Additionally, there is functionality to define a control line which behaves as an alternate to the minimum flow line. This means that your input will be 'cropped' to only include points to the right of the control line - modelling recirculation (",(0,i.jsx)(r.code,{children:"ASV"}),") from the correct control line.\nSee ",(0,i.jsx)(r.code,{children:"Surge control margin for variable speed compressor chart"})," for more details."]}),"\n",(0,i.jsx)(r.admonition,{type:"note",children:(0,i.jsx)(r.p,{children:"Using a variable speed compressor chart as input essentially does the same as if a process simulation tool was used to\ncreate an energy function. It has been verified to be close to identical to Unisim within 2% accuracy (smaller\ndifferences in density arise from differences in PVT assumptions and calculations)."})}),"\n",(0,i.jsx)(r.h3,{id:"format-2",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n CURVES:\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - SPEED: <shaft speed for this curve, a number>\n RATE: <list of rate values for this chart curve>\n HEAD: <list of polytropic head values for this chart curve>\n EFFICIENCY: <list of polytropic efficiency values for this chart curve>\n - ... and so forth for all chart curves. Minimum two curves needed.\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example-2",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: predefined_variable_speed_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: VARIABLE_SPEED\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: M\n EFFICIENCY: FRACTION\n CURVES:\n - SPEED: 7500\n RATE: [2900, 3503, 4002, 4595.0]\n HEAD: [8412.9, 7996, 7363, 6127]\n EFFICIENCY: [0.72, 0.75, 0.74, 0.70]\n - SPEED: 9886\n RATE: [3708, 4502, 4993.6, 5507, 5924]\n HEAD: [13845, 13182, 12425, 11276, 10054]\n EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]\n - SPEED: 10767\n RATE: [4052, 4500, 4999, 5492, 6000, 6439,]\n HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]\n EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]\n"})}),"\n",(0,i.jsxs)(r.admonition,{title:"Tip",type:"tip",children:[(0,i.jsx)(r.p,{children:"It is also possible to input variable speed compressor chart as csv file."}),(0,i.jsx)(r.h4,{id:"format-3",children:"Format"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVES:\n FILE: <csv file with variable speed compressor chart>\n"})}),(0,i.jsx)(r.h4,{id:"example-3",children:"Example"}),(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"CURVES:\n FILE: compressor_chart_variable_speed.csv\n"})})]}),"\n",(0,i.jsx)(r.h2,{id:"generic-compressor-chart-with-predefined-design-point",children:"Generic compressor chart with predefined design point"}),"\n",(0,i.jsx)(r.p,{children:'The generic compressor chart used is an "average" chart of compressors used on the NCS and cannot be expected to be equal to\nthe actual chart for a compressor which has been designed and delivered. However, it can be a good first estimation of\nhow a chart may be for a future process not yet in the design phase.'}),"\n",(0,i.jsxs)(r.p,{children:["This chart will not replace any future compressor curves and it may not be accurate in comparison to the final compressor curve; however, it is a good method to capture the major effects (such as ",(0,i.jsx)(r.code,{children:"ASV"}),' (anti-surge valve) recirculation).\nWith this method it is possible to view how a "typical" compressor curve would react a large spread in the data set. If the design point is set within the middle of the data spread, points with rates lower than the minimum flow will have some recirculation; whilst, too high or unrealistic rates will not be solved. This is an essential difference in comparison to the generic chart with its design point calculated from input data (which is covered in ',(0,i.jsx)(r.code,{children:"Generic compressor chart with design point calculated from input data"}),"), which will shift the entire compressor curve to solve for even the highest rate and head points."]}),"\n",(0,i.jsx)(r.p,{children:"Unified generic compressor chart:"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:n(18501).Z+"",width:"1048",height:"729"})}),"\n",(0,i.jsxs)(r.p,{children:["The compressor chart is created by scaling the unified generic compressor chart in the figure above with a design actual\nrate and head. Note that the rate is here in the units ",(0,i.jsx)(r.em,{children:"am3/hr"})," which is NOT EQUAL to ",(0,i.jsx)(r.em,{children:"Sm3/hr"}),".\nThe units ",(0,i.jsx)(r.em,{children:"am3/hr"})," refers to the volumetric rate at inlet conditions (inlet pressure and temperature), and it will differ from the inputted standard rates\ndue to the difference in density.\nThe design polytropic head is given in either ",(0,i.jsx)(r.em,{children:"kJ/kg"}),", ",(0,i.jsx)(r.em,{children:"m"})," or J/kg, ",(0,i.jsx)(r.code,{children:"UNITS"}),"."]}),"\n",(0,i.jsx)(r.p,{children:"The generic compressor chart is currently accompanied by a fixed polytropic efficiency (polytropic efficiency\nvariations within the chart may be supported in the future)."}),"\n",(0,i.jsx)(r.h3,{id:"format-4",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>\n DESIGN_RATE: <design rate>\n DESIGN_HEAD: <design polytropic head>\n UNITS:\n RATE: <rate unit, currently only AM3_PER_HOUR supported>\n HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example-4",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_design_point_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_DESIGN_POINT\n POLYTROPIC_EFFICIENCY: 0.75\n DESIGN_RATE: 7000\n DESIGN_HEAD: 50\n UNITS:\n RATE: AM3_PER_HOUR\n HEAD: KJ_PER_KG\n EFFICIENCY: FRACTION\n"})}),"\n",(0,i.jsxs)(r.p,{children:["For this method it is important to note that only ",(0,i.jsx)(r.code,{children:"Simplified variable speed compressor train model"})," is supported."]}),"\n",(0,i.jsx)(r.h3,{id:"example-5",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_compression_train_design_point\n TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: sample_fluid\n PRESSURE_CONTROL: UPSTREAM_CHOKE\n COMPRESSOR_TRAIN:\n STAGES:\n - COMPRESSOR_CHART: generic_from_design_point_compressor_chart\n INLET_TEMPERATURE: 30\n"})}),"\n",(0,i.jsx)(r.h2,{id:"generic-compressor-chart-with-design-point-calculated-from-input-data",children:"Generic compressor chart with design point calculated from input data"}),"\n",(0,i.jsx)(r.admonition,{title:"Caution",type:"caution",children:(0,i.jsxs)(r.p,{children:["Beware that using this functionality in a ",(0,i.jsx)(r.code,{children:"COMPRESSOR_SYSTEM energy usage model"})," can give some unwanted effects.\nE.g. splitting/halving the rates into two equal compressor trains will in effect change the compressor chart for a\ncompressor set up with GENERIC_FROM_INPUT compared to running the full rate through a single compressor train.\nConsider using a single design point instead."]})}),"\n",(0,i.jsx)(r.p,{children:"The generic chart from input is also based on the unified generic compressor chart:"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:n(18501).Z+"",width:"1048",height:"729"})}),"\n",(0,i.jsx)(r.p,{children:"However, in this case the design point is not specified when setting up the model, instead it is estimated at run time and is entirely based on the inputted data set.\nAn algorithm is used to set a design point such that all the input data is within the capacity.\nEven if there is a large spread in the data, all data points will solve. High rate/head data points will just be covered by the curve; whilst low rate points outside the minimum flow point will have recirculation."}),"\n",(0,i.jsxs)(r.p,{children:["This method has one major potential downside in comparison to the ",(0,i.jsx)(r.code,{children:"Generic compressor chart with predefined design point"}),'. As all data points will be covered by the compressor curve, if there is an extremely large or unrealistic head or rate value, the other more "normal" data points will be impacted and will either result in a large head adjustment (via upstream/downstream choking) or it will have a large recirculation rate. This has the potential to skew the entire data set solely due to one unrealistic data point. Thus, if this generic chart is utilised it is important to make sure that unrealistic data is filtered out.']}),"\n",(0,i.jsx)(r.h3,{id:"format-5",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of chart, for reference>\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>\n UNITS:\n EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>\n"})}),"\n",(0,i.jsx)(r.h3,{id:"example-6",children:"Example"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: generic_from_input_compressor_chart\n TYPE: COMPRESSOR_CHART\n CHART_TYPE: GENERIC_FROM_INPUT\n POLYTROPIC_EFFICIENCY: 0.75\n UNITS:\n EFFICIENCY: FRACTION\n"})}),"\n",(0,i.jsx)(r.h2,{id:"surge-control-margin-for-variable-speed-compressor-chart",children:"Surge control margin for variable speed compressor chart"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:n(62484).Z+"",width:"1048",height:"729"})}),"\n",(0,i.jsxs)(r.p,{children:["For a variable speed compressor chart it is possible to add a surge control margin. This is currently done by giving a\nfraction or percentage as input. The control margin is used to calculate the increase in minimum flow, i.e. as a percentage\nor fraction of the rate difference between minimum- and maximum flow, for the given speed. The increase in minimum\nflow is calculated individually for each speed curve. The corresponding head and efficiency values for the new minimum flow rate\nis found by interpolation along the speed curves. The same compressor chart can be used for multiple compressor stages,\nbut with different surge control margins. Hence, the surge control margin is defined when setting up the stages in a\n",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",children:(0,i.jsx)(r.code,{children:"Variable speed compressor train model"})})," or ",(0,i.jsx)(r.a,{href:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",children:(0,i.jsx)(r.code,{children:"Variable speed compressor train model with multiple streams and pressures"})}),"."]}),"\n",(0,i.jsx)(r.h3,{id:"format-6",children:"Format"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-yaml",children:"MODELS:\n - NAME: <model name>\n TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN\n FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]\n COMPRESSOR_TRAIN:\n STAGES:\n - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>\n COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>\n CONTROL_MARGIN: <Default value is zero>\n CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>\n"})})]})}function h(e={}){const{wrapper:r}={...(0,s.a)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},62484:(e,r,n)=>{n.d(r,{Z:()=>i});const i=n.p+"assets/images/compressor_chart_surge_control_margin_line-98e32f3b0d5332a371ec4bb2dbc66da8.png"},18501:(e,r,n)=>{n.d(r,{Z:()=>i});const i=n.p+"assets/images/generic_unified_compressor_chart-ba6f49b5df22923cfcbe4d5d2aa4525b.png"},11151:(e,r,n)=>{n.d(r,{Z:()=>a,a:()=>o});var i=n(67294);const s={},t=i.createContext(s);function o(e){const r=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f59fd0ba.07e13be5.js b/assets/js/f59fd0ba.07e13be5.js new file mode 100644 index 0000000000..7f7d552862 --- /dev/null +++ b/assets/js/f59fd0ba.07e13be5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2562],{33954:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>i});var t=r(85893),s=r(11151);const o={},c="FLUID_DENSITY",a={id:"about/references/keywords/FLUID_DENSITY",title:"FLUID_DENSITY",description:"INSTALLATIONS /",source:"@site/docs/about/references/keywords/FLUID_DENSITY.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/FLUID_DENSITY",permalink:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/FLUID_DENSITY.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"FILE",permalink:"/ecalc/docs/about/references/keywords/FILE"},next:{title:"FLUID_MODEL",permalink:"/ecalc/docs/about/references/keywords/FLUID_MODEL"}},d={},i=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"fluid_density",children:"FLUID_DENSITY"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/INSTALLATIONS",children:"INSTALLATIONS"})," /\n[...] /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," /\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",children:"FLUID_DENSITY"})]}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:["Used to define the fluid density for\npump type ",(0,t.jsx)(n.code,{children:"energy usage models<ENERGY_USAGE_MODEL>"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FLUID_DENSITY: <fluid density value or expression>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"FLUID_DENSITY: 1030 # [kg/m3]\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>c});var t=r(67294);const s={},o=t.createContext(s);function c(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5b92c38.0bf0df97.js b/assets/js/f5b92c38.0bf0df97.js new file mode 100644 index 0000000000..e1758ebded --- /dev/null +++ b/assets/js/f5b92c38.0bf0df97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[8984],{84502:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var t=r(85893),s=r(11151);const o={},a="LOWER_HEATING_VALUE",c={id:"about/references/keywords/LOWER_HEATING_VALUE",title:"LOWER_HEATING_VALUE",description:"Description",source:"@site/docs/about/references/keywords/LOWER_HEATING_VALUE.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/LOWER_HEATING_VALUE",permalink:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/LOWER_HEATING_VALUE.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"LOAD",permalink:"/ecalc/docs/about/references/keywords/LOAD"},next:{title:"MAXIMUM_DISCHARGE_PRESSURE",permalink:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE"}},i={},d=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"lower_heating_value",children:"LOWER_HEATING_VALUE"}),"\n",(0,t.jsx)(n.h2,{id:"description",children:"Description"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"LOWER_HEATING_VALUE"})," is a required to be specified under the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",children:"TURBINE_MODEL"})," keyword.\nThis ",(0,t.jsx)(n.strong,{children:"must"})," be specified in MJ/Sm",(0,t.jsx)("sup",{children:"3"})]}),"\n",(0,t.jsx)(n.p,{children:"This can only be inputted as a single value and dictates the quantity of thermal energy available after burning a standard cubic metre of fuel (natural gas in this gas)."}),"\n",(0,t.jsx)(n.h2,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: <name of turbine>\n TYPE: TURBINE\n ...\n LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>\n"})}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"MODELS:\n - NAME: compressor_train_turbine\n TYPE: TURBINE\n LOWER_HEATING_VALUE: 38 # MJ/Sm3\n TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW\n TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]\n POWER_ADJUSTMENT_CONSTANT: 10\n"})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>a});var t=r(67294);const s={},o=t.createContext(s);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f85d2ba9.8dbe7681.js b/assets/js/f85d2ba9.8dbe7681.js new file mode 100644 index 0000000000..6de99f547d --- /dev/null +++ b/assets/js/f85d2ba9.8dbe7681.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2488],{15745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/f92867ed.9c565ea8.js b/assets/js/f92867ed.9c565ea8.js new file mode 100644 index 0000000000..bad69da7d0 --- /dev/null +++ b/assets/js/f92867ed.9c565ea8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2138],{18134:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var i=t(85893),a=t(11151);const s={slug:"v8.7-release",title:"v8.7",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:17},l="eCalc",r={id:"changelog/v8-7",title:"v8.7",description:"New Features",source:"@site/docs/changelog/v8-7.md",sourceDirName:"changelog",slug:"/changelog/v8.7-release",permalink:"/ecalc/docs/changelog/v8.7-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-7.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:17,frontMatter:{slug:"v8.7-release",title:"v8.7",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:17},sidebar:"changelog",previous:{title:"v8.6",permalink:"/ecalc/docs/changelog/v8.6-release"},next:{title:"Changelog",permalink:"/ecalc/docs/changelog/"}},o={},c=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,i.jsx)(n.h2,{id:"new-features",children:"New Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Change emission rate type to calendar day, in alignment with the fuel rate which is also calendar day."}),"\n",(0,i.jsx)(n.li,{children:"Update documentation with info about changing name from direct emitters to venting emitters. Both keywords will exist in the documentation for a while, with a description of which keyword is valid for which verisions of eCalc."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bug in compressor with turbine models with multiple streams and only one date."}),"\n",(0,i.jsx)(n.li,{children:"Fix bug when aggregating model results, where the first model was wrongly reported as the aggregated result."}),"\n",(0,i.jsx)(n.li,{children:"Fix problem with missing compressor chart when combining trains/compressors."}),"\n",(0,i.jsx)(n.li,{children:"Improve error message when model/facility input does not exist."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Change name from ",(0,i.jsx)(n.code,{children:"DIRECT_EMITTERS"})," to ",(0,i.jsx)(n.code,{children:"VENTING_EMITTERS"})," in input Yaml-file. Using DIRECT_EMITTERS will not cause eCalc to fail (this will change in a future version), but no output will be given for the actual emitters if the deprecated keyword is used."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var i=t(67294);const a={},s=i.createContext(a);function l(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fa0b6059.5e02f31b.js b/assets/js/fa0b6059.5e02f31b.js new file mode 100644 index 0000000000..bdd326d815 --- /dev/null +++ b/assets/js/fa0b6059.5e02f31b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9251],{34220:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>a,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=o(85893),r=o(11151);const t={title:"Compressor",sidebar_position:1,description:"COMPRESSOR Energy Usage Model"},i="COMPRESSOR Energy Usage Model",l={id:"about/modelling/setup/installations/compressor_models_in_calculations/compressor",title:"Compressor",description:"COMPRESSOR Energy Usage Model",source:"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",sourceDirName:"about/modelling/setup/installations/compressor_models_in_calculations",slug:"/about/modelling/setup/installations/compressor_models_in_calculations/compressor",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Compressor",sidebar_position:1,description:"COMPRESSOR Energy Usage Model"},sidebar:"about",previous:{title:"Compressor models",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"},next:{title:"Compressor system",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system"}},a={},c=[{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"compressor-energy-usage-model",children:"COMPRESSOR Energy Usage Model"}),"\n",(0,n.jsxs)(s.p,{children:["When ",(0,n.jsx)(s.code,{children:"COMPRESSOR"})," is specified under ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"})," the only keyword that is allowed is ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",children:"ENERGYFUNCTION"}),".\nThis model only supports a single compressor, which can either be a tabular compressor model defined in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})," or a compressor model defined in ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/modelling/setup/models/",children:"MODELS"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The attributes ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/RATE",children:"RATE"}),", ",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",children:"SUCTION_PRESSURE"})," and\n",(0,n.jsx)(s.a,{href:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",children:"DISCHARGE_PRESSURE"})," are required to be specified in the energy usage model. Here, the specified rate will be for the entire train, the\nsuction pressure will be at the inlet of the first stage, whilst the discharge pressure will be the outlet pressure of the last stage."]}),"\n",(0,n.jsx)(s.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"NAME: <Reference name>\nTYPE: COMPRESSOR\nENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>\n RATE: <rate expression>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n"})}),"\n",(0,n.jsx)(s.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: COMPRESSOR\n ENERGYFUNCTION: booster_compressor_reference\n RATE: SIM1;GAS_PROD\n SUCTION_PRESSURE: SIM1;SUCTION_PRESSURE\n DISCHARGE_PRESSURE: SIM1;DISCHARGE_PRESSURE\n"})})]})}function m(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},11151:(e,s,o)=>{o.d(s,{Z:()=>l,a:()=>i});var n=o(67294);const r={},t=n.createContext(r);function i(e){const s=n.useContext(t);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fa17a3e5.6dd1bddc.js b/assets/js/fa17a3e5.6dd1bddc.js new file mode 100644 index 0000000000..59bc74070f --- /dev/null +++ b/assets/js/fa17a3e5.6dd1bddc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3181],{25111:(e,n,s)=>{s.r(n),s.d(n,{default:()=>j});s(67294);var i=s(52263),r=s(33692),t=s(95999),d=s(80143),l=s(32045),a=s(92503),c=s(85893);const o=void 0;function h(){return(0,c.jsx)(t.Z,{id:"versionsPage.versionEntry.link",children:"Documentation"})}function x(){return(0,c.jsx)(t.Z,{id:"versionsPage.versionEntry.releaseNotes",children:"Release Notes"})}function j(){const{siteConfig:{organizationName:e,projectName:n}}=(0,i.Z)(),s=(0,d.gB)(o),j=(0,d.yW)(o),u=s.find((e=>"current"===e.name)),m=s.filter((e=>e!==j&&"current"!==e.name)),g=`https://github.com/${e}/${n}`;return(0,c.jsx)(l.Z,{title:"Versions",description:"eCalc Versions page listing all documented versions",children:(0,c.jsxs)("main",{className:"container margin-vert--lg",children:[(0,c.jsx)(a.Z,{as:"h1",children:(0,c.jsx)(t.Z,{id:"versionsPage.title",children:"eCalc documentation versions"})}),(0,c.jsxs)("div",{className:"margin-bottom--lg",children:[(0,c.jsx)(a.Z,{as:"h3",id:"next",children:(0,c.jsx)(t.Z,{id:"versionsPage.current.title",children:"Current version (Stable)"})}),(0,c.jsx)("p",{children:(0,c.jsx)(t.Z,{id:"versionsPage.current.description",children:"Here you can find the documentation for current released version."})}),(0,c.jsx)("table",{children:(0,c.jsx)("tbody",{children:(0,c.jsxs)("tr",{children:[(0,c.jsx)("th",{children:j.label}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:j.path+"/about",children:(0,c.jsx)(h,{})})}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:j.path+"/changelog/latest",children:(0,c.jsx)(x,{})})})]})})})]}),u!==j&&(0,c.jsxs)("div",{className:"margin-bottom--lg",children:[(0,c.jsx)(a.Z,{as:"h3",id:"latest",children:(0,c.jsx)(t.Z,{id:"versionsPage.next.title",children:"Next version (Unreleased)"})}),(0,c.jsx)("p",{children:(0,c.jsx)(t.Z,{id:"versionsPage.next.description",children:"Here you can find the documentation for work-in-process unreleased version."})}),(0,c.jsx)("table",{children:(0,c.jsx)("tbody",{children:(0,c.jsxs)("tr",{children:[(0,c.jsx)("th",{children:u.label}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:u.path+"/about",children:(0,c.jsx)(h,{})})}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:u.path+"/changelog/latest",children:(0,c.jsx)(x,{})})})]})})})]}),m.length>0&&(0,c.jsxs)("div",{className:"margin-bottom--lg",children:[(0,c.jsx)(a.Z,{as:"h3",id:"archive",children:(0,c.jsx)(t.Z,{id:"versionsPage.archived.title",children:"Past versions (Not maintained anymore)"})}),(0,c.jsx)("p",{children:(0,c.jsx)(t.Z,{id:"versionsPage.archived.description",children:"Here you can find documentation for previous versions of eCalc."})}),(0,c.jsx)("table",{children:(0,c.jsx)("tbody",{children:m.map((e=>(0,c.jsxs)("tr",{children:[(0,c.jsx)("th",{children:e.label}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{to:e.path+"/about",children:(0,c.jsx)(h,{})})}),(0,c.jsx)("td",{children:(0,c.jsx)(r.Z,{href:`${g}/releases/tag/${e.name}`,children:(0,c.jsx)(x,{})})})]},e.name)))})})]})]})})}}}]); \ No newline at end of file diff --git a/assets/js/fa3d98bd.5bbcc4ed.js b/assets/js/fa3d98bd.5bbcc4ed.js new file mode 100644 index 0000000000..bc15b832ef --- /dev/null +++ b/assets/js/fa3d98bd.5bbcc4ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6696],{99747:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=n(85893),l=n(11151);const r={sidebar_position:1,description:"Generator modelling"},o="Generator modelling",a={id:"about/modelling/setup/facility_inputs/generator_modelling",title:"Generator modelling",description:"Generator modelling",source:"@site/docs/about/modelling/setup/facility_inputs/generator_modelling.md",sourceDirName:"about/modelling/setup/facility_inputs",slug:"/about/modelling/setup/facility_inputs/generator_modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/facility_inputs/generator_modelling.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,description:"Generator modelling"},sidebar:"about",previous:{title:"Facility inputs",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/"},next:{title:"Pump modelling",permalink:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/"}},s={},d=[{value:"ELECTRICITY2FUEL",id:"electricity2fuel",level:2},{value:"Facility input format",id:"facility-input-format",level:3},{value:"Example table",id:"table-example",level:3},{value:"Header and unit requirements",id:"header-and-unit-requirements",level:3}];function c(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"generator-modelling",children:"Generator modelling"}),"\n",(0,i.jsxs)(t.p,{children:["In eCalc\u2122, the term ",(0,i.jsx)(t.em,{children:"generator"})," refers to equipment producing ",(0,i.jsx)(t.strong,{children:"electrical power from fuel"}),". Hence, the turbine part (fuel combustion to produce mechanical energy) is included in the term."]}),"\n",(0,i.jsx)(t.p,{children:"An installation usually have one or more generators to fill the electrical power demand. In eCalc\u2122, the separate generators are combined into a common generator set (genset)."}),"\n",(0,i.jsx)(t.admonition,{type:"note",children:(0,i.jsx)(t.p,{children:"In the future, eCalc\u2122 will most likely offer modelling of single generators that could be combined in systems."})}),"\n",(0,i.jsx)(t.h2,{id:"electricity2fuel",children:"ELECTRICITY2FUEL"}),"\n",(0,i.jsxs)(t.p,{children:['Electricity to fuel is a table specifying the relationship between electrical load\nand fuel consumption for an entire generator set. This means that if you have several generators,\nthis table needs to include a "jump" every time a new generator is started. An example of this\nis shown ',(0,i.jsx)(t.a,{href:"#table-example",children:"below"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Under ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"}),", this electricity to fuel table is specified using the keyword ",(0,i.jsx)(t.a,{href:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",children:"ELECTRICITY2FUEL"})]}),"\n",(0,i.jsx)(t.h3,{id:"facility-input-format",children:"Facility input format"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-yaml",children:"FACILITY_INPUTS:\n - NAME: <generator name>\n FILE: <file path to .csv file>\n TYPE: ELECTRICITY2FUEL\n"})}),"\n",(0,i.jsx)(t.h3,{id:"table-example",children:"Example table"}),"\n",(0,i.jsx)(t.p,{children:"The table for this curve would look like:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-text",children:"POWER, FUEL\n#[MW], [Sm3/day]\n0.00, 0.0\n0.10, 84000.0\n5.00, 84000.0\n42.0, 220000.0\n42.01, 280000.0\n45.0, 300000.0\n50.0, 330000.0\n60.0, 350000.0\n"})}),"\n",(0,i.jsx)(t.h3,{id:"header-and-unit-requirements",children:"Header and unit requirements"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Header"}),(0,i.jsx)(t.th,{children:"Unit"}),(0,i.jsx)(t.th,{children:"Mandatory"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Power"}),(0,i.jsx)(t.td,{children:"MW"}),(0,i.jsx)(t.td,{children:"Yes"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Fuel"}),(0,i.jsxs)(t.td,{children:["Sm",(0,i.jsx)("sup",{children:"3"}),"/day"]}),(0,i.jsx)(t.td,{children:"Yes"})]})]})]})]})}function u(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>o});var i=n(67294);const l={},r=i.createContext(l);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fb7e7841.024cb53d.js b/assets/js/fb7e7841.024cb53d.js new file mode 100644 index 0000000000..2f848f0657 --- /dev/null +++ b/assets/js/fb7e7841.024cb53d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4466],{43005:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>i});var a=n(85893),c=n(11151);const s={slug:"latest",title:"Next",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:1},l="eCalc",o={id:"changelog/next",title:"Next",description:"New Features",source:"@site/docs/changelog/next.md",sourceDirName:"changelog",slug:"/changelog/latest",permalink:"/ecalc/docs/changelog/latest",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/next.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:1,frontMatter:{slug:"latest",title:"Next",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:1},sidebar:"changelog",previous:{title:"v8.8",permalink:"/ecalc/docs/changelog/v8.8-release"},next:{title:"---",permalink:"/ecalc/docs/changelog/separator"}},r={},i=[{value:"New Features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2}];function u(e){const t={h1:"h1",h2:"h2",...(0,c.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{id:"ecalc",children:"eCalc"}),"\n",(0,a.jsx)(t.h2,{id:"new-features",children:"New Features"}),"\n",(0,a.jsx)(t.h2,{id:"fixes",children:"Fixes"}),"\n",(0,a.jsx)(t.h2,{id:"breaking-changes",children:"Breaking changes"})]})}function d(e={}){const{wrapper:t}={...(0,c.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>l});var a=n(67294);const c={},s=a.createContext(c);function l(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:l(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fba8a418.31a34e34.js b/assets/js/fba8a418.31a34e34.js new file mode 100644 index 0000000000..c6de5013e7 --- /dev/null +++ b/assets/js/fba8a418.31a34e34.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6638],{18052:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var s=t(85893),a=t(11151);const r={slug:"v8.2-release",title:"v8.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:12},l="eCalc v8.2",o={id:"changelog/v8-2",title:"v8.2",description:"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See",source:"@site/docs/changelog/v8-2.md",sourceDirName:"changelog",slug:"/changelog/v8.2-release",permalink:"/ecalc/docs/changelog/v8.2-release",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/changelog/v8-2.md",tags:[{label:"release",permalink:"/ecalc/docs/tags/release"},{label:"eCalc",permalink:"/ecalc/docs/tags/e-calc"}],version:"current",sidebarPosition:12,frontMatter:{slug:"v8.2-release",title:"v8.2",authors:"ecalc-team",tags:["release","eCalc"],sidebar_position:12},sidebar:"changelog",previous:{title:"v8.1",permalink:"/ecalc/docs/changelog/v8.1-release"},next:{title:"v8.3",permalink:"/ecalc/docs/changelog/v8.3-release"}},i={},c=[{value:"New features",id:"new-features",level:2},{value:"Fixes",id:"fixes",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ecalc-v82",children:"eCalc v8.2"}),"\n",(0,s.jsx)(n.p,{children:"eCalc\u2122 v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See\r\nthe migration guide for details on changes, where relevant."}),"\n",(0,s.jsx)(n.h2,{id:"new-features",children:"New features"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["STP is available as a predefined TSV file-export of data. Use argument ",(0,s.jsx)(n.code,{children:"--stp-export"})," on cli."]}),"\n",(0,s.jsx)(n.li,{children:"Output emissions in fixed and predicted order in JSON export"}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"BREAKING"}),": ",(0,s.jsx)(n.code,{children:"Conditions"})," in YAML model that evaluates to ",(0,s.jsx)(n.strong,{children:"false"})," will ",(0,s.jsx)(n.em,{children:"no longer"})," be calculated and outputted"]}),"\n",(0,s.jsx)(n.li,{children:"Using average rates instead of forward filling when resampling rates to a given output frequency"}),"\n",(0,s.jsxs)(n.li,{children:["New ",(0,s.jsx)(n.code,{children:"Categories"})," added to STP and LTP export"]}),"\n",(0,s.jsx)(n.li,{children:"Operational settings are now 1-based instead of 0-based."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"fixes",children:"Fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Some VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES models have returned a too low INTERSTAGE_PRESSURE when using INDIVIDUAL_ASV_RATE control. The INDIVIDUAL_ASV_RATE fixed speed pressure control now returns the required INTERSTAGE_PRESSURE correctly."}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>l});var s=t(67294);const a={},r=s.createContext(a);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fd734e2c.5ebf1c81.js b/assets/js/fd734e2c.5ebf1c81.js new file mode 100644 index 0000000000..6c047e9e40 --- /dev/null +++ b/assets/js/fd734e2c.5ebf1c81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[583],{19582:(s,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=a(85893),i=a(11151);const t={},r="CONSTANT",l={id:"about/references/keywords/CONSTANT",title:"CONSTANT",description:"FACILITYINPUTS /",source:"@site/docs/about/references/keywords/CONSTANT.md",sourceDirName:"about/references/keywords",slug:"/about/references/keywords/CONSTANT",permalink:"/ecalc/docs/about/references/keywords/CONSTANT",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/references/keywords/CONSTANT.md",tags:[],version:"current",frontMatter:{},sidebar:"about",previous:{title:"CONDITIONS",permalink:"/ecalc/docs/about/references/keywords/CONDITIONS"},next:{title:"CONSUMERS",permalink:"/ecalc/docs/about/references/keywords/CONSUMERS"}},m={},c=[{value:"Description",id:"description",level:2},{value:"Format",id:"format",level:2},{value:"Example",id:"example",level:2}];function h(s){const e={a:"a",annotation:"annotation",code:"code",h1:"h1",h2:"h2",math:"math",mi:"mi",mn:"mn",mo:"mo",mrow:"mrow",msub:"msub",p:"p",pre:"pre",semantics:"semantics",span:"span",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"constant",children:"CONSTANT"}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"FACILITY_INPUTS",children:"FACILITY_INPUTS"})," /\n",(0,n.jsx)(e.a,{href:"ADJUSTMENT",children:"ADJUSTMENT"})," /\n",(0,n.jsx)(e.a,{href:"CONSTANT",children:"CONSTANT"})]}),"\n",(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{children:"Required"}),(0,n.jsx)(e.th,{children:"Child of"}),(0,n.jsx)(e.th,{children:"Children/Options"})]})}),(0,n.jsx)(e.tbody,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{children:"No"}),(0,n.jsx)(e.td,{children:(0,n.jsx)(e.code,{children:"ADJUSTMENT"})}),(0,n.jsx)(e.td,{children:"None"})]})})]}),"\n",(0,n.jsx)(e.h2,{id:"description",children:"Description"}),"\n",(0,n.jsxs)(e.p,{children:["The keyword ",(0,n.jsx)(e.a,{href:"CONSTANT",children:"CONSTANT"})," can be used for adjustment of input data with a constant."]}),"\n",(0,n.jsx)(e.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"CONSTANT: <VALUE>\n"})}),"\n",(0,n.jsx)(e.h2,{id:"example",children:"Example"}),"\n",(0,n.jsx)(e.p,{children:"Say you have input that that is off by -10 [some units].\nYou could fix this like:"}),"\n",(0,n.jsx)(e.pre,{children:(0,n.jsx)(e.code,{className:"language-yaml",children:"NAME: some_facility_input\nFILE: filename.csv\nTYPE: FACILITY_INPUT_TYPE\nADJUSTMENT:\n CONSTANT: -10\n"})}),"\n",(0,n.jsxs)(e.p,{children:["The resulting energy consumption ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]}),", i.e. fuel or power, will then be"]}),"\n",(0,n.jsx)(e.span,{className:"katex-display",children:(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsxs)(e.mrow,{children:[(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"j"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"u"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"s"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"t"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"e"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"d"})]})]}),(0,n.jsx)(e.mo,{children:"="}),(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]}),(0,n.jsx)(e.mo,{children:"\u2212"}),(0,n.jsx)(e.mn,{children:"10"})]}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{adjusted} = E_\\mathrm{original} - 10"})]})})}),(0,n.jsxs)(e.span,{className:"katex-html","aria-hidden":"true",children:[(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"adjusted"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}}),(0,n.jsx)(e.span,{className:"mrel",children:"="}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2778em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}}),(0,n.jsx)(e.span,{className:"mbin",children:"\u2212"}),(0,n.jsx)(e.span,{className:"mspace",style:{marginRight:"0.2222em"}})]}),(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.6444em"}}),(0,n.jsx)(e.span,{className:"mord",children:"10"})]})]})]})}),"\n",(0,n.jsxs)(e.p,{children:["where ",(0,n.jsxs)(e.span,{className:"katex",children:[(0,n.jsx)(e.span,{className:"katex-mathml",children:(0,n.jsx)(e.math,{xmlns:"http://www.w3.org/1998/Math/MathML",children:(0,n.jsxs)(e.semantics,{children:[(0,n.jsx)(e.mrow,{children:(0,n.jsxs)(e.msub,{children:[(0,n.jsx)(e.mi,{children:"E"}),(0,n.jsxs)(e.mrow,{children:[(0,n.jsx)(e.mi,{mathvariant:"normal",children:"o"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"r"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"g"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"i"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"n"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"a"}),(0,n.jsx)(e.mi,{mathvariant:"normal",children:"l"})]})]})}),(0,n.jsx)(e.annotation,{encoding:"application/x-tex",children:"E_\\mathrm{original}"})]})})}),(0,n.jsx)(e.span,{className:"katex-html","aria-hidden":"true",children:(0,n.jsxs)(e.span,{className:"base",children:[(0,n.jsx)(e.span,{className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,n.jsxs)(e.span,{className:"mord",children:[(0,n.jsx)(e.span,{className:"mord mathnormal",style:{marginRight:"0.05764em"},children:"E"}),(0,n.jsx)(e.span,{className:"msupsub",children:(0,n.jsxs)(e.span,{className:"vlist-t vlist-t2",children:[(0,n.jsxs)(e.span,{className:"vlist-r",children:[(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.3361em"},children:(0,n.jsxs)(e.span,{style:{top:"-2.55em",marginLeft:"-0.0576em",marginRight:"0.05em"},children:[(0,n.jsx)(e.span,{className:"pstrut",style:{height:"2.7em"}}),(0,n.jsx)(e.span,{className:"sizing reset-size6 size3 mtight",children:(0,n.jsx)(e.span,{className:"mord mtight",children:(0,n.jsx)(e.span,{className:"mord mathrm mtight",children:"original"})})})]})}),(0,n.jsx)(e.span,{className:"vlist-s",children:"\u200b"})]}),(0,n.jsx)(e.span,{className:"vlist-r",children:(0,n.jsx)(e.span,{className:"vlist",style:{height:"0.2861em"},children:(0,n.jsx)(e.span,{})})})]})})]})]})})]})," is the energy consumption before the adjustment."]})]})}function d(s={}){const{wrapper:e}={...(0,i.a)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(h,{...s})}):h(s)}},11151:(s,e,a)=>{a.d(e,{Z:()=>l,a:()=>r});var n=a(67294);const i={},t=n.createContext(i);function r(s){const e=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function l(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(i):s.components||i:r(s.components),n.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/fe44757f.d3cb6819.js b/assets/js/fe44757f.d3cb6819.js new file mode 100644 index 0000000000..278c00253c --- /dev/null +++ b/assets/js/fe44757f.d3cb6819.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9083],{23907:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>o});var t=s(85893),i=s(11151);const l={title:"Pump models",sidebar_position:2,description:"Using pumps in calculations"},a="Pump models in calculations",r={id:"about/modelling/setup/installations/pump_models_in_calculations",title:"Pump models",description:"Using pumps in calculations",source:"@site/docs/about/modelling/setup/installations/pump_models_in_calculations.md",sourceDirName:"about/modelling/setup/installations",slug:"/about/modelling/setup/installations/pump_models_in_calculations",permalink:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",draft:!1,unlisted:!1,editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/docs/about/modelling/setup/installations/pump_models_in_calculations.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"Pump models",sidebar_position:2,description:"Using pumps in calculations"},sidebar:"about",previous:{title:"Generator sets",permalink:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations"},next:{title:"Compressor models",permalink:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/"}},d={},o=[{value:"PUMP energy usage model",id:"pump-energy-usage-model",level:2},{value:"Format",id:"format",level:3},{value:"Example",id:"example",level:3},{value:"Units",id:"units",level:3},{value:"PUMP_SYSTEM energy usage model",id:"pump_system-energy-usage-model",level:2},{value:"Format",id:"format-1",level:3},{value:"Example",id:"example-1",level:3},{value:"Units",id:"units-1",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"pump-models-in-calculations",children:"Pump models in calculations"}),"\n",(0,t.jsxs)(n.p,{children:["Pump charts are defined in the ",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/",children:"FACILITY_INPUTS"})," section, and is then referred to from an\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",children:"ENERGY_USAGE_MODEL"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"pump-energy-usage-model",children:"PUMP energy usage model"}),"\n",(0,t.jsxs)(n.p,{children:["To configure a single pump, the pump rate, suction- and discharge pressures and fluid density must be given as inputs. In addition, a reference to a pump chart defined in the\n",(0,t.jsx)(n.a,{href:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",children:"FACILITY_INPUTS"})," section has to be included."]}),"\n",(0,t.jsx)(n.h3,{id:"format",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP\n CONDITION: <condition expression>\n ENERGYFUNCTION: <reference energy function in facility inputs of pump type>\n RATE: <rate expression>\n SUCTION_PRESSURE: <suction pressure expression>\n DISCHARGE_PRESSURE: <discharge pressure expression>\n FLUID_DENSITY: <fluid density expression>\n"})}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP\n ENERGYFUNCTION: waterinjection_pump_reference\n RATE: SIM1;WATER_INJ\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n FLUID_DENSITY: 1000\n"})}),"\n",(0,t.jsx)(n.h3,{id:"units",children:"Units"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Quantity"}),(0,t.jsx)(n.th,{children:"Default units"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"RATE"}),(0,t.jsxs)(n.td,{children:["Sm",(0,t.jsx)("sup",{children:"3"}),"/day"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"SUCTION_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"DISCHARGE_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"FLUID_DENSITY"}),(0,t.jsxs)(n.td,{children:["kg/m",(0,t.jsx)("sup",{children:"3"})]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"pump_system-energy-usage-model",children:"PUMP_SYSTEM energy usage model"}),"\n",(0,t.jsx)(n.p,{children:"Model a system of pumps that share common manifolds and have cross-overs between them and for which the rate may be\nsplit between them based on various operational strategies."}),"\n",(0,t.jsx)(n.h3,{id:"format-1",children:"Format"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n CONDITION: <condition expression>\n PUMPS:\n - NAME: <name of compressor>\n CHART: <reference to pump model in facility inputs>\n TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>\n FLUID_DENSITY: <expression defining the fluid density>\n OPERATIONAL_SETTINGS:\n <operational settings data>\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsxs)(n.p,{children:["If all ",(0,t.jsx)(n.code,{children:"OPERATIONAL_SETTINGS"}),' have been exhausted, and there were still some time steps that were outside the\ncapacity of the operational setting, the last operational setting will be "chosen" nevertheless. In this case the\n',(0,t.jsx)(n.code,{children:"energy_usage"})," in the output will be set to ",(0,t.jsx)(n.code,{children:"NaN"})," which indicates that the operational setting, is in fact, invalid\n(or converted to 0 when aggregating upwards to e.g. genset)"]})}),"\n",(0,t.jsx)(n.h3,{id:"example-1",children:"Example"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"ENERGY_USAGE_MODEL:\n TYPE: PUMP_SYSTEM\n PUMPS:\n - NAME: pump1\n CHART: water_injection_pump_reference\n - NAME: pump2\n CHART: water_injection_pump_reference\n TOTAL_SYSTEM_RATE: SIM1;WATER_INJ\n FLUID_DENSITY: 1000.0\n OPERATIONAL_SETTINGS:\n - RATE_FRACTIONS: [1, 0]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n - RATE_FRACTIONS: [0.5, 0.5]\n SUCTION_PRESSURE: 3\n DISCHARGE_PRESSURE: 200\n"})}),"\n",(0,t.jsx)(n.h3,{id:"units-1",children:"Units"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Quantity"}),(0,t.jsx)(n.th,{children:"Default units"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"RATE"}),(0,t.jsxs)(n.td,{children:["Sm",(0,t.jsx)("sup",{children:"3"}),"/day"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"SUCTION_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"DISCHARGE_PRESSURE"}),(0,t.jsx)(n.td,{children:"bara"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"FLUID_DENSITY"}),(0,t.jsxs)(n.td,{children:["kg/m",(0,t.jsx)("sup",{children:"3"})]})]})]})]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>a});var t=s(67294);const i={},l=t.createContext(i);function a(e){const n=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.a150b672.js b/assets/js/main.a150b672.js new file mode 100644 index 0000000000..0a2894ca15 --- /dev/null +++ b/assets/js/main.a150b672.js @@ -0,0 +1,2 @@ +/*! For license information please see main.a150b672.js.LICENSE.txt */ +(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[179],{1728:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(67294);var r=n(68356),o=n.n(r),a=n(16887);const s={"00440000":[()=>n.e(5595).then(n.bind(n,69462)),"@site/docs/about/references/keywords/CONDITION.md",69462],"00bdc23f":[()=>n.e(8088).then(n.bind(n,20312)),"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts.md",20312],"0425b884":[()=>n.e(9336).then(n.bind(n,50025)),"@site/docs/about/getting_started/library/index.md",50025],"0477162f":[()=>n.e(6173).then(n.bind(n,83954)),"@site/docs/about/references/keywords/VENTING_EMITTERS.md",83954],"06adec10":[()=>n.e(2153).then(n.bind(n,50904)),"@site/docs/about/references/keywords/POWERLOSSFACTOR.md",50904],"06dd1efa":[()=>n.e(6039).then(n.bind(n,50332)),"@site/docs/about/references/keywords/END.md",50332],"0745e7f0":[()=>n.e(4069).then(n.bind(n,98273)),"@site/docs/changelog/v8-5.md",98273],"074935d7":[()=>n.e(1042).then(n.bind(n,52926)),"@site/docs/about/references/keywords/RATE_PER_STREAM.md",52926],"07b341f3":[()=>n.e(8267).then(n.bind(n,73985)),"@site/docs/about/references/keywords/VARIABLES.md",73985],"084f7ebf":[()=>n.e(3847).then(n.bind(n,54395)),"@site/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL.md",54395],"0aeda122":[()=>n.e(7832).then(n.bind(n,88870)),"@site/docs/about/references/keywords/HEAD.md",88870],"0f7b5825":[()=>n.e(7238).then(n.bind(n,8418)),"@site/docs/about/references/keywords/ELECTRICITY2FUEL.md",8418],"0fd76486":[()=>n.e(8746).then(n.bind(n,39632)),"@site/docs/about/modelling/examples/index.md",39632],"10c684b0":[()=>n.e(5870).then(n.bind(n,30047)),"@site/docs/about/references/keywords/START.md",30047],"11516e85":[()=>n.e(3054).then(n.bind(n,14788)),"@site/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL.md",14788],"1287dd43":[()=>n.e(3700).then(n.bind(n,49474)),"@site/docs/contribute/guides/01-git.md",49474],"1300feb7":[()=>n.e(8269).then(n.bind(n,72256)),"@site/docs/about/references/keywords/RATE.md",72256],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,34228)),"@theme/DocCategoryGeneratedIndexPage",34228],"15962da1":[()=>n.e(996).then(n.bind(n,25730)),"@site/docs/about/references/keywords/GENERATORSETS.md",25730],"163041ea":[()=>n.e(9480).then(n.bind(n,17498)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model.md",17498],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,17744)),"@theme/DocItem",17744],"17e50ecd":[()=>n.e(7756).then(n.bind(n,84166)),"@site/docs/about/references/keywords/ADJUSTMENT.md",84166],"18b0ec42":[()=>n.e(2962).then(n.bind(n,10946)),"@site/docs/changelog/v8-8.md",10946],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,51473)),"@theme/SearchPage",51473],"1c663d3d":[()=>n.e(8392).then(n.bind(n,46703)),"@site/docs/about/getting_started/index.md",46703],"1df93b7f":[()=>n.e(3237).then(n.bind(n,69754)),"@site/src/pages/index.tsx",69754],"1e7de7fe":[()=>n.e(6124).then(n.t.bind(n,20043,19)),"~docs/default/category-ecalcdocs-contribute-category-guides-4cd.json",20043],"1f60d0d4":[()=>n.e(6539).then(n.bind(n,64587)),"@site/docs/about/index.md",64587],"1f7805b6":[()=>n.e(2802).then(n.bind(n,51816)),"@site/docs/changelog/v8-6.md",51816],"22f0e129":[()=>n.e(6893).then(n.bind(n,13243)),"@site/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE.md",13243],"2781f0ad":[()=>n.e(3787).then(n.bind(n,39483)),"@site/docs/about/modelling/examples/advanced.md",39483],"29367e59":[()=>n.e(3173).then(n.bind(n,33918)),"@site/docs/about/references/keywords/INFLUENCE_TIME_VECTOR.md",33918],"295f424e":[()=>n.e(5133).then(n.bind(n,59579)),"@site/docs/about/references/keywords/DIRECT_EMITTERS.md",59579],"29d00dd8":[()=>n.e(8084).then(n.bind(n,24890)),"@site/docs/about/references/keywords/ENERGYFUNCTION.md",24890],"2b15d891":[()=>n.e(2225).then(n.bind(n,31015)),"@site/docs/about/references/keywords/NAME.md",31015],"2b2be347":[()=>n.e(1404).then(n.bind(n,77387)),"@site/docs/changelog/v7-0.md",77387],"2c19a041":[()=>n.e(4507).then(n.bind(n,77509)),"@site/docs/about/references/keywords/REGULARITY.md",77509],"2c73e373":[()=>n.e(2655).then(n.bind(n,22498)),"@site/docs/contribute/guides/02-conventional-commits.md",22498],"2ce3b5da":[()=>n.e(9050).then(n.bind(n,40806)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model.md",40806],"2cedaf2f":[()=>n.e(5408).then(n.bind(n,74877)),"@site/docs/about/modelling/workflow/generic_workflow.md",74877],"2df92a48":[()=>n.e(3596).then(n.bind(n,49134)),"@site/docs/about/references/keywords/FUEL_TYPES.md",49134],"2f04f592":[()=>n.e(7495).then(n.bind(n,42787)),"@site/docs/changelog/separator.md",42787],"3261da49":[()=>n.e(3091).then(n.bind(n,29333)),"@site/docs/about/references/keywords/INTERPOLATION_TYPE.md",29333],"33498b04":[()=>n.e(381).then(n.bind(n,20902)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model.md",20902],"3409ab5c":[()=>n.e(2017).then(n.bind(n,39384)),"@site/docs/about/modelling/theory/pump_modelling.md",39384],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,9861)),"@theme/DocTagsListPage",9861],"3810e8e5":[()=>n.e(6887).then(n.bind(n,2177)),"@site/docs/about/references/keywords/HCEXPORT.md",2177],"382d59b5":[()=>n.e(9306).then(n.bind(n,4706)),"@site/docs/about/references/keywords/CURVES.md",4706],"38d592cf":[()=>n.e(1398).then(n.bind(n,18824)),"@site/docs/about/modelling/theory/compressor_modelling.md",18824],"3aeef25a":[()=>n.e(7396).then(n.bind(n,61984)),"@site/docs/about/references/keywords/HEAD_MARGIN.md",61984],"3b0e82f8":[()=>n.e(925).then(n.bind(n,61850)),"@site/docs/about/references/keywords/CURVE.md",61850],"3e38e310":[()=>n.e(8094).then(n.bind(n,39424)),"@site/docs/changelog/v8-3.md",39424],"3fbb770c":[()=>n.e(4838).then(n.bind(n,75894)),"@site/docs/about/references/keywords/SUCTION_PRESSURE.md",75894],"40d6382c":[()=>n.e(9814).then(n.bind(n,13334)),"@site/docs/about/migration_guides/index.md",13334],"4147f87e":[()=>n.e(9786).then(n.bind(n,32718)),"@site/docs/about/references/keywords/STAGES.md",32718],"41d1792a":[()=>n.e(1748).then(n.t.bind(n,92977,19)),"~docs/default/tag-ecalc-docs-tags-release-eb8.json",92977],"428320b6":[()=>n.e(6193).then(n.bind(n,683)),"@site/docs/changelog/changelog.md",683],"43a1031a":[()=>n.e(8010).then(n.bind(n,34629)),"@site/docs/about/modelling/setup/facility_inputs/index.md",34629],"43a26e71":[()=>n.e(4845).then(n.bind(n,52414)),"@site/docs/about/modelling/setup/facility_inputs/pump_modelling/index.md",52414],"45c974ba":[()=>n.e(2459).then(n.bind(n,93948)),"@site/docs/changelog/v7-2.md",93948],"47daf389":[()=>n.e(8082).then(n.bind(n,90514)),"@site/docs/changelog/v8-4.md",90514],"496ed8d5":[()=>n.e(2206).then(n.bind(n,89388)),"@site/docs/about/getting_started/cli/faq.md",89388],"498bfcff":[()=>n.e(749).then(n.bind(n,38084)),"@site/docs/about/modelling/setup/fuel_types.md",38084],"4aa4fc36":[()=>n.e(1044).then(n.bind(n,51075)),"@site/docs/about/migration_guides/v8_to_v81.md",51075],"4b5a01f9":[()=>n.e(3211).then(n.bind(n,89150)),"@site/docs/about/modelling/setup/models/fluid_model.md",89150],"4b80f681":[()=>n.e(9842).then(n.bind(n,18186)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",18186],"4c3c1dc2":[()=>n.e(6686).then(n.bind(n,19999)),"@site/docs/about/references/keywords/PRESSURE_CONTROL.md",19999],"4da8ac19":[()=>n.e(6038).then(n.bind(n,24571)),"@site/docs/about/references/keywords/EFFICIENCY.md",24571],"4ee97ba8":[()=>n.e(1668).then(n.bind(n,89158)),"@site/docs/about/references/index.md",89158],"502e1773":[()=>n.e(2693).then(n.bind(n,90056)),"@site/docs/about/references/keywords/CONTROL_MARGIN_UNIT.md",90056],"51ad0f66":[()=>n.e(5713).then(n.bind(n,56778)),"@site/docs/about/references/keywords/EMISSION_RATE.md",56778],"54094f37":[()=>n.e(3172).then(n.bind(n,10655)),"@site/docs/about/references/keywords/EMITTER_MODEL.md",10655],"54d7341e":[()=>n.e(510).then(n.bind(n,17379)),"@site/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE.md",17379],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,88070,19)),"~docs/default/tags-list-current-prop-15a.json",88070],"577efb1d":[()=>n.e(628).then(n.bind(n,26095)),"@site/docs/about/references/keywords/STREAM.md",26095],"5989d566":[()=>n.e(1709).then(n.bind(n,98039)),"@site/docs/about/references/keywords/EMISSIONS.md",98039],"5a5e553d":[()=>n.e(1110).then(n.bind(n,63007)),"@site/docs/about/references/keywords/EXTRAPOLATION.md",63007],"5c08a402":[()=>n.e(8846).then(n.bind(n,13135)),"@site/docs/about/migration_guides/v8-1_to_v8-2.md",13135],"5c8ec56d":[()=>n.e(4070).then(n.bind(n,60959)),"@site/docs/about/modelling/setup/models/compressor_modelling/index.md",60959],"5e10e9e1":[()=>n.e(443).then(n.bind(n,94021)),"@site/docs/about/modelling/setup/installations/tabular_models_in_calculations.md",94021],"5e3ed04b":[()=>n.e(2205).then(n.bind(n,35502)),"@site/docs/about/references/keywords/FACILITY_INPUTS.md",35502],"5e95c892":[()=>n.e(9661).then(n.bind(n,41892)),"@theme/DocsRoot",41892],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],60746895:[()=>n.e(8282).then(n.bind(n,3652)),"@site/docs/contribute/documentation-guide/02-markdown.md",3652],"61639be2":[()=>n.e(4075).then(n.bind(n,192)),"@site/docs/about/references/keywords/FUELCONSUMERS.md",192],"63ecd22d":[()=>n.e(8980).then(n.bind(n,10990)),"@site/docs/about/migration_guides/v8-6_to_v8-7.md",10990],66286265:[()=>n.e(180).then(n.bind(n,49067)),"@site/docs/about/modelling/setup/facility_inputs/tabular.md",49067],"66a649c0":[()=>n.e(3240).then(n.bind(n,96262)),"@site/docs/about/references/keywords/CROSSOVER.md",96262],"676abc7a":[()=>n.e(5654).then(n.bind(n,60577)),"@site/docs/about/references/keywords/TIME_SERIES.md",60577],"69fd9be6":[()=>n.e(8570).then(n.bind(n,39364)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures.md",39364],"6adcc868":[()=>n.e(8122).then(n.bind(n,16408)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system.md",16408],"6bd3279d":[()=>n.e(639).then(n.bind(n,57597)),"@site/docs/about/references/keywords/EMISSION_NAME.md",57597],"70f31d65":[()=>n.e(7337).then(n.bind(n,6151)),"@site/docs/about/references/keywords/TURBINE_EFFICIENCIES.md",6151],"72083b41":[()=>n.e(5178).then(n.bind(n,33740)),"@site/docs/about/references/keywords/TYPE.md",33740],"721cfe60":[()=>n.e(3802).then(n.bind(n,20808)),"@site/docs/about/migration_guides/v8-3_to_v8-4.md",20808],"7514af75":[()=>n.e(6305).then(n.bind(n,917)),"@site/docs/about/references/keywords/FUELRATE.md",917],"7557b935":[()=>n.e(856).then(n.bind(n,97398)),"@site/docs/about/migration_guides/v7_to_v8.md",97398],"7b02141e":[()=>n.e(2638).then(n.bind(n,19519)),"@site/docs/about/modelling/workflow/index.md",19519],"7c623a68":[()=>n.e(1310).then(n.bind(n,2047)),"@site/docs/about/references/keywords/CONSUMPTION_RATE_TYPE.md",2047],"7cebed78":[()=>n.e(9376).then(n.bind(n,46582)),"@site/docs/about/modelling/examples/simple.md",46582],"7d3b81bb":[()=>n.e(8230).then(n.bind(n,8886)),"@site/docs/changelog/v7-4.md",8886],"7db788f5":[()=>n.e(3074).then(n.bind(n,67422)),"@site/docs/about/modelling/setup/installations/index.md",67422],"7e6991bb":[()=>n.e(2040).then(n.bind(n,8148)),"@site/docs/about/modelling/setup/facility_inputs/sampled_compressor_model.md",8148],"81dd00c5":[()=>n.e(2548).then(n.bind(n,87206)),"@site/docs/about/migration_guides/v8-5_to_v8-6.md",87206],"841adc37":[()=>n.e(6768).then(n.bind(n,67057)),"@site/docs/about/modelling/setup/models/turbine_modeling.md",67057],"86262f09":[()=>n.e(8318).then(n.bind(n,78643)),"@site/docs/about/references/keywords/EXPRESSION.md",78643],"880bbd08":[()=>n.e(3315).then(n.bind(n,1471)),"@site/docs/about/references/keywords/UNITS.md",1471],"8961bfac":[()=>n.e(9128).then(n.bind(n,60066)),"@site/docs/about/modelling/setup/file_format_and_syntax/expressions.md",60066],90184672:[()=>n.e(5932).then(n.bind(n,9353)),"@site/docs/about/references/keywords/INLET_TEMPERATURE.md",9353],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"96533a10":[()=>n.e(2484).then(n.bind(n,99279)),"@site/docs/changelog/v8-10.md",99279],"97732f4b":[()=>n.e(7594).then(n.bind(n,64111)),"@site/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT.md",64111],"977fea76":[()=>n.e(8023).then(n.t.bind(n,83769,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],"9a118db7":[()=>n.e(9364).then(n.bind(n,61944)),"@site/docs/about/modelling/setup/variables.md",61944],"9e136365":[()=>n.e(9591).then(n.bind(n,43507)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.md",43507],"9e4a10de":[()=>n.e(4395).then(n.bind(n,50331)),"@site/docs/about/references/keywords/TURBINE_MODEL.md",50331],"9e7755e6":[()=>n.e(7212).then(n.bind(n,88412)),"@site/docs/about/references/keywords/DISCHARGE_PRESSURE.md",88412],"9e91bf8d":[()=>n.e(4631).then(n.bind(n,21064)),"@site/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.md",21064],a2e97e20:[()=>n.e(8988).then(n.bind(n,61009)),"@site/docs/about/modelling/setup/models/index.md",61009],a5dcc804:[()=>n.e(8276).then(n.bind(n,84814)),"@site/docs/about/miscellaneous/index.md",84814],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,12674)),"@theme/DocRoot",12674],ad129716:[()=>n.e(754).then(n.bind(n,12635)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.md",12635],af105519:[()=>n.e(4199).then(n.bind(n,71071)),"@site/docs/about/migration_guides/v8-2_to_v8-3.md",71071],b0a5d2c7:[()=>n.e(3414).then(n.bind(n,71003)),"@site/docs/about/references/keywords/CONTROL_MARGIN.md",71003],b15ba3bd:[()=>n.e(2547).then(n.bind(n,44040)),"@site/docs/about/references/keywords/PUMPS.md",44040],b2781c74:[()=>n.e(4278).then(n.t.bind(n,12776,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",12776],b2b17913:[()=>n.e(3190).then(n.bind(n,43011)),"@site/docs/about/references/keywords/CATEGORY.md",43011],b677d687:[()=>n.e(262).then(n.bind(n,59574)),"@site/docs/about/references/keywords/RATE_FRACTIONS.md",59574],b8c59810:[()=>n.e(9643).then(n.t.bind(n,41414,19)),"~docs/default/tag-ecalc-docs-tags-e-calc-236.json",41414],bb45b332:[()=>n.e(4103).then(n.bind(n,75062)),"@site/docs/about/modelling/index.md",75062],bdf25f4c:[()=>n.e(4025).then(n.bind(n,75710)),"@site/docs/changelog/v7-1.md",75710],bfdf430b:[()=>n.e(8583).then(n.bind(n,38952)),"@site/docs/changelog/v8-0.md",38952],c21bc46a:[()=>n.e(3443).then(n.bind(n,30734)),"@site/docs/about/references/keywords/MODELS.md",30734],c3d1f0cd:[()=>n.e(4733).then(n.bind(n,56204)),"@site/docs/about/references/cli_reference.md",56204],c5daebe9:[()=>n.e(2013).then(n.bind(n,27442)),"@site/docs/about/references/keywords/TURBINE_LOAD.md",27442],c8caddd1:[()=>n.e(6721).then(n.bind(n,36703)),"@site/docs/contribute/01-get-started.md",36703],c90bf1e8:[()=>n.e(8186).then(n.bind(n,6378)),"@site/docs/changelog/v7-3.md",6378],c93dcb87:[()=>n.e(4168).then(n.bind(n,49219)),"@site/docs/about/references/keywords/CONSUMERS.md",49219],c9b29382:[()=>n.e(8285).then(n.bind(n,79222)),"@site/docs/about/references/keywords/COMPRESSOR_SYSTEM.md",79222],cb266b33:[()=>n.e(2706).then(n.bind(n,35982)),"@site/docs/about/references/keywords/LOAD.md",35982],cbe196b2:[()=>n.e(4734).then(n.bind(n,54918)),"@site/docs/about/references/keywords/FILE.md",54918],cc88a418:[()=>n.e(2e3).then(n.bind(n,24381)),"@site/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL.md",24381],ccf7588a:[()=>n.e(8967).then(n.bind(n,84589)),"@site/docs/about/references/keywords/FACTOR.mdx",84589],cda37ba5:[()=>n.e(4189).then(n.bind(n,88572)),"@site/docs/changelog/v7-6.md",88572],d17664a7:[()=>n.e(6922).then(n.bind(n,54488)),"@site/docs/about/references/keywords/STREAMS.md",54488],d185ab52:[()=>n.e(9524).then(n.bind(n,27407)),"@site/docs/about/references/keywords/TOTAL_SYSTEM_RATE.md",27407],d19423a2:[()=>n.e(1686).then(n.bind(n,93447)),"@site/docs/contribute/documentation-guide/01-documentation.md",93447],d2b7592b:[()=>n.e(3305).then(n.bind(n,60253)),"@site/docs/about/references/keywords/OPERATIONAL_SETTINGS.md",60253],d2eeb42a:[()=>n.e(8485).then(n.bind(n,95077)),"@site/docs/about/references/api/index.md",95077],d547c67b:[()=>n.e(5917).then(n.bind(n,16221)),"@site/docs/about/references/keywords/FLUID_MODEL.md",16221],d5b0ea4b:[()=>n.e(2991).then(n.t.bind(n,39389,19)),"~docs/default/category-ecalcdocs-contribute-category-documentation-815.json",39389],d5cd246e:[()=>n.e(4441).then(n.bind(n,82814)),"@site/docs/about/modelling/setup/installations/direct_consumers.md",82814],d77448ee:[()=>n.e(5201).then(n.bind(n,72649)),"@site/docs/about/references/keywords/COMPRESSOR_MODEL.md",72649],df203c0f:[()=>Promise.all([n.e(532),n.e(9924)]).then(n.bind(n,40491)),"@theme/DocTagDocListPage",40491],df3c944d:[()=>n.e(7611).then(n.bind(n,95825)),"@site/docs/about/references/keywords/ENERGY_USAGE_MODEL.md",95825],dfbab2f3:[()=>n.e(7907).then(n.bind(n,85201)),"@site/docs/about/getting_started/cli/index.md",85201],e023757a:[()=>n.e(4858).then(n.bind(n,98380)),"@site/docs/about/references/keywords/INSTALLATIONS.md",98380],e0edce1a:[()=>n.e(8596).then(n.bind(n,36513)),"@site/docs/about/references/keywords/FUEL.md",36513],e1df8231:[()=>n.e(517).then(n.bind(n,61665)),"@site/docs/about/getting_started/yaml/index.md",61665],e26167e6:[()=>n.e(476).then(n.bind(n,20573)),"@site/docs/about/references/keywords/EMISSION.md",20573],e2712b99:[()=>n.e(7253).then(n.bind(n,64006)),"@site/docs/changelog/v8-1.md",64006],e7fdd821:[()=>n.e(8202).then(n.bind(n,95815)),"@site/docs/about/references/keywords/CONDITIONS.md",95815],e862d0e9:[()=>n.e(8703).then(n.bind(n,39472)),"@site/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE.md",39472],e8ebc025:[()=>n.e(3902).then(n.bind(n,42991)),"@site/docs/about/modelling/setup/index.md",42991],e9e63826:[()=>n.e(6159).then(n.bind(n,2755)),"@site/docs/about/modelling/setup/file_format_and_syntax/index.md",2755],ebdd570f:[()=>n.e(3177).then(n.bind(n,78929)),"@site/docs/about/migration_guides/v8.7_to_v8.8.md",78929],ec96df16:[()=>n.e(8519).then(n.bind(n,83773)),"@site/docs/about/references/keywords/include.md",83773],edb3a98b:[()=>n.e(1728).then(n.bind(n,64115)),"@site/docs/about/modelling/setup/installations/generator_sets_in_calculations.md",64115],eee46244:[()=>n.e(7154).then(n.bind(n,32593)),"@site/docs/changelog/v7-5.md",32593],f054b415:[()=>n.e(7652).then(n.bind(n,99846)),"@site/docs/about/modelling/theory/index.md",99846],f52ed7e3:[()=>n.e(9922).then(n.bind(n,82197)),"@site/docs/about/modelling/setup/time_series.md",82197],f54e894e:[()=>n.e(770).then(n.bind(n,33790)),"@site/docs/about/modelling/examples/drogon.md",33790],f571fee5:[()=>n.e(505).then(n.bind(n,54132)),"@site/docs/about/references/keywords/index.md",54132],f577f5c2:[()=>n.e(7959).then(n.bind(n,97335)),"@site/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.md",97335],f59fd0ba:[()=>n.e(2562).then(n.bind(n,33954)),"@site/docs/about/references/keywords/FLUID_DENSITY.md",33954],f5b92c38:[()=>n.e(8984).then(n.bind(n,84502)),"@site/docs/about/references/keywords/LOWER_HEATING_VALUE.md",84502],f85d2ba9:[()=>n.e(2488).then(n.t.bind(n,15745,19)),"/home/runner/work/ecalc/ecalc/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],f92867ed:[()=>n.e(2138).then(n.bind(n,18134)),"@site/docs/changelog/v8-7.md",18134],fa0b6059:[()=>n.e(9251).then(n.bind(n,34220)),"@site/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor.md",34220],fa17a3e5:[()=>n.e(3181).then(n.bind(n,25111)),"@site/src/pages/versions.tsx",25111],fa3d98bd:[()=>n.e(6696).then(n.bind(n,99747)),"@site/docs/about/modelling/setup/facility_inputs/generator_modelling.md",99747],fb7e7841:[()=>n.e(4466).then(n.bind(n,43005)),"@site/docs/changelog/next.md",43005],fba8a418:[()=>n.e(6638).then(n.bind(n,18052)),"@site/docs/changelog/v8-2.md",18052],fd734e2c:[()=>n.e(583).then(n.bind(n,19582)),"@site/docs/about/references/keywords/CONSTANT.md",19582],fe44757f:[()=>n.e(9083).then(n.bind(n,23907)),"@site/docs/about/modelling/setup/installations/pump_models_in_calculations.md",23907]};var i=n(85893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,i.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,i.jsx)("p",{children:String(t)}),(0,i.jsx)("div",{children:(0,i.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,i.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,i.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,i.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,i.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,i.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,i.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,i.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,i.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,i.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,i.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(99670),u=n(30226);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(1772).then(n.bind(n,51772)),modules:["@theme/NotFound"],webpack:()=>[51772],render(e,t){const n=e.default;return(0,i.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,i.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=s[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let s=o;const i=n.split(".");i.slice(0,-1).forEach((e=>{s=s[e]})),s[i[i.length-1]]=a}));const a=o.__comp;delete o.__comp;const s=o.__context;return delete o.__context,(0,i.jsx)(u.z,{value:s,children:(0,i.jsx)(a,{...o,...n})})}})}const p=[{path:"/ecalc/search",component:d("/ecalc/search","bdd"),exact:!0},{path:"/ecalc/versions",component:d("/ecalc/versions","284"),exact:!0},{path:"/ecalc/docs",component:d("/ecalc/docs","cad"),routes:[{path:"/ecalc/docs",component:d("/ecalc/docs","a95"),routes:[{path:"/ecalc/docs/tags",component:d("/ecalc/docs/tags","909"),exact:!0},{path:"/ecalc/docs/tags/e-calc",component:d("/ecalc/docs/tags/e-calc","b17"),exact:!0},{path:"/ecalc/docs/tags/release",component:d("/ecalc/docs/tags/release","816"),exact:!0},{path:"/ecalc/docs",component:d("/ecalc/docs","261"),routes:[{path:"/ecalc/docs/about/",component:d("/ecalc/docs/about/","a31"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/",component:d("/ecalc/docs/about/getting_started/","123"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/cli/",component:d("/ecalc/docs/about/getting_started/cli/","d3b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/cli/faq",component:d("/ecalc/docs/about/getting_started/cli/faq","97e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/library/",component:d("/ecalc/docs/about/getting_started/library/","d50"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/getting_started/yaml/",component:d("/ecalc/docs/about/getting_started/yaml/","cec"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/",component:d("/ecalc/docs/about/migration_guides/","b3e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v7_to_v8",component:d("/ecalc/docs/about/migration_guides/v7_to_v8","313"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8_to_v81",component:d("/ecalc/docs/about/migration_guides/v8_to_v81","7ca"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-1_to_v8-2",component:d("/ecalc/docs/about/migration_guides/v8-1_to_v8-2","14c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-2_to_v8-3",component:d("/ecalc/docs/about/migration_guides/v8-2_to_v8-3","273"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-3_to_v8-4",component:d("/ecalc/docs/about/migration_guides/v8-3_to_v8-4","115"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-5_to_v8-6",component:d("/ecalc/docs/about/migration_guides/v8-5_to_v8-6","163"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8-6_to_v8-7",component:d("/ecalc/docs/about/migration_guides/v8-6_to_v8-7","e5f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/migration_guides/v8.7_to_v8.8",component:d("/ecalc/docs/about/migration_guides/v8.7_to_v8.8","3cf"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/miscellaneous/",component:d("/ecalc/docs/about/miscellaneous/","b76"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/",component:d("/ecalc/docs/about/modelling/","d6a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/",component:d("/ecalc/docs/about/modelling/examples/","e7e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/advanced",component:d("/ecalc/docs/about/modelling/examples/advanced","362"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/drogon",component:d("/ecalc/docs/about/modelling/examples/drogon","966"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/examples/simple",component:d("/ecalc/docs/about/modelling/examples/simple","257"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/",component:d("/ecalc/docs/about/modelling/setup/","dff"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/","1cc"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","f62"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","592"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","2c2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","04c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/facility_inputs/tabular",component:d("/ecalc/docs/about/modelling/setup/facility_inputs/tabular","542"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/",component:d("/ecalc/docs/about/modelling/setup/file_format_and_syntax/","0e3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions",component:d("/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","d12"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/fuel_types",component:d("/ecalc/docs/about/modelling/setup/fuel_types","620"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/",component:d("/ecalc/docs/about/modelling/setup/installations/","99b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","9b9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","c00"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","0e8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",component:d("/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","65b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/direct_consumers",component:d("/ecalc/docs/about/modelling/setup/installations/direct_consumers","d56"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations",component:d("/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","f2a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations",component:d("/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","2f5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations",component:d("/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","d10"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/",component:d("/ecalc/docs/about/modelling/setup/models/","15b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/","c1c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","5eb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","b0e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","f09"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","e08"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","de2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","2fb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/",component:d("/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","fb2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/fluid_model",component:d("/ecalc/docs/about/modelling/setup/models/fluid_model","849"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/models/turbine_modeling",component:d("/ecalc/docs/about/modelling/setup/models/turbine_modeling","0f3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/time_series",component:d("/ecalc/docs/about/modelling/setup/time_series","b2a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/setup/variables",component:d("/ecalc/docs/about/modelling/setup/variables","5f7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/",component:d("/ecalc/docs/about/modelling/theory/","6a0"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/compressor_modelling",component:d("/ecalc/docs/about/modelling/theory/compressor_modelling","0df"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/theory/pump_modelling",component:d("/ecalc/docs/about/modelling/theory/pump_modelling","c3a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/workflow/",component:d("/ecalc/docs/about/modelling/workflow/","9a1"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/modelling/workflow/generic_workflow",component:d("/ecalc/docs/about/modelling/workflow/generic_workflow","b21"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/",component:d("/ecalc/docs/about/references/","5da"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/api/",component:d("/ecalc/docs/about/references/api/","225"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/cli_reference",component:d("/ecalc/docs/about/references/cli_reference","b63"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/",component:d("/ecalc/docs/about/references/keywords/","424"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ADJUSTMENT",component:d("/ecalc/docs/about/references/keywords/ADJUSTMENT","382"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CATEGORY",component:d("/ecalc/docs/about/references/keywords/CATEGORY","de9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL",component:d("/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","8c1"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM",component:d("/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","8f7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL",component:d("/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","9b6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONDITION",component:d("/ecalc/docs/about/references/keywords/CONDITION","b74"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONDITIONS",component:d("/ecalc/docs/about/references/keywords/CONDITIONS","ea9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSTANT",component:d("/ecalc/docs/about/references/keywords/CONSTANT","677"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSUMERS",component:d("/ecalc/docs/about/references/keywords/CONSUMERS","15f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE",component:d("/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","f62"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN",component:d("/ecalc/docs/about/references/keywords/CONTROL_MARGIN","b71"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT",component:d("/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","415"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CROSSOVER",component:d("/ecalc/docs/about/references/keywords/CROSSOVER","55f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CURVE",component:d("/ecalc/docs/about/references/keywords/CURVE","aa7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/CURVES",component:d("/ecalc/docs/about/references/keywords/CURVES","429"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS",component:d("/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","8cf"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE",component:d("/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","16d"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL",component:d("/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","efb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EFFICIENCY",component:d("/ecalc/docs/about/references/keywords/EFFICIENCY","f47"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL",component:d("/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","1f9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION",component:d("/ecalc/docs/about/references/keywords/EMISSION","1c4"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION_NAME",component:d("/ecalc/docs/about/references/keywords/EMISSION_NAME","29b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSION_RATE",component:d("/ecalc/docs/about/references/keywords/EMISSION_RATE","d80"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMISSIONS",component:d("/ecalc/docs/about/references/keywords/EMISSIONS","e05"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EMITTER_MODEL",component:d("/ecalc/docs/about/references/keywords/EMITTER_MODEL","c46"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/END",component:d("/ecalc/docs/about/references/keywords/END","8f6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL",component:d("/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","55a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/ENERGYFUNCTION",component:d("/ecalc/docs/about/references/keywords/ENERGYFUNCTION","f2d"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EXPRESSION",component:d("/ecalc/docs/about/references/keywords/EXPRESSION","6c2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/EXTRAPOLATION",component:d("/ecalc/docs/about/references/keywords/EXTRAPOLATION","b1f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FACILITY_INPUTS",component:d("/ecalc/docs/about/references/keywords/FACILITY_INPUTS","070"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FACTOR",component:d("/ecalc/docs/about/references/keywords/FACTOR","7d6"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FILE",component:d("/ecalc/docs/about/references/keywords/FILE","642"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FLUID_DENSITY",component:d("/ecalc/docs/about/references/keywords/FLUID_DENSITY","c60"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FLUID_MODEL",component:d("/ecalc/docs/about/references/keywords/FLUID_MODEL","2fd"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUEL",component:d("/ecalc/docs/about/references/keywords/FUEL","c8b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUEL_TYPES",component:d("/ecalc/docs/about/references/keywords/FUEL_TYPES","a2e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUELCONSUMERS",component:d("/ecalc/docs/about/references/keywords/FUELCONSUMERS","aee"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/FUELRATE",component:d("/ecalc/docs/about/references/keywords/FUELRATE","255"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/GENERATORSETS",component:d("/ecalc/docs/about/references/keywords/GENERATORSETS","d03"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HCEXPORT",component:d("/ecalc/docs/about/references/keywords/HCEXPORT","ccb"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HEAD",component:d("/ecalc/docs/about/references/keywords/HEAD","b50"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/HEAD_MARGIN",component:d("/ecalc/docs/about/references/keywords/HEAD_MARGIN","794"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/include",component:d("/ecalc/docs/about/references/keywords/include","80e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR",component:d("/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","423"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE",component:d("/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","dc7"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INSTALLATIONS",component:d("/ecalc/docs/about/references/keywords/INSTALLATIONS","ed5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE",component:d("/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","13e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE",component:d("/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","47e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/LOAD",component:d("/ecalc/docs/about/references/keywords/LOAD","cc8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE",component:d("/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","d7b"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE",component:d("/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","bf3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE",component:d("/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","c59"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/MODELS",component:d("/ecalc/docs/about/references/keywords/MODELS","a5a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/NAME",component:d("/ecalc/docs/about/references/keywords/NAME","d44"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS",component:d("/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","3da"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT",component:d("/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","330"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR",component:d("/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","f94"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL",component:d("/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","dd5"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/PUMPS",component:d("/ecalc/docs/about/references/keywords/PUMPS","6dd"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE",component:d("/ecalc/docs/about/references/keywords/RATE","a33"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE_FRACTIONS",component:d("/ecalc/docs/about/references/keywords/RATE_FRACTIONS","d5a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/RATE_PER_STREAM",component:d("/ecalc/docs/about/references/keywords/RATE_PER_STREAM","b6a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/REGULARITY",component:d("/ecalc/docs/about/references/keywords/REGULARITY","3a2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STAGES",component:d("/ecalc/docs/about/references/keywords/STAGES","a5c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/START",component:d("/ecalc/docs/about/references/keywords/START","c55"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STREAM",component:d("/ecalc/docs/about/references/keywords/STREAM","d9a"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/STREAMS",component:d("/ecalc/docs/about/references/keywords/STREAMS","3c3"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE",component:d("/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","45c"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TIME_SERIES",component:d("/ecalc/docs/about/references/keywords/TIME_SERIES","56f"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE",component:d("/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","0e8"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES",component:d("/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","5ab"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_LOAD",component:d("/ecalc/docs/about/references/keywords/TURBINE_LOAD","5a2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TURBINE_MODEL",component:d("/ecalc/docs/about/references/keywords/TURBINE_MODEL","0df"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/TYPE",component:d("/ecalc/docs/about/references/keywords/TYPE","9b2"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/UNITS",component:d("/ecalc/docs/about/references/keywords/UNITS","5a9"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL",component:d("/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","bd0"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/VARIABLES",component:d("/ecalc/docs/about/references/keywords/VARIABLES","f4e"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/about/references/keywords/VENTING_EMITTERS",component:d("/ecalc/docs/about/references/keywords/VENTING_EMITTERS","6b4"),exact:!0,sidebar:"about"},{path:"/ecalc/docs/category/documentation",component:d("/ecalc/docs/category/documentation","cd3"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/category/guides",component:d("/ecalc/docs/category/guides","0bf"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/changelog/",component:d("/ecalc/docs/changelog/","b3d"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/latest",component:d("/ecalc/docs/changelog/latest","045"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/separator",component:d("/ecalc/docs/changelog/separator","796"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-0-release",component:d("/ecalc/docs/changelog/v7-0-release","2b8"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-1-release",component:d("/ecalc/docs/changelog/v7-1-release","6a0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-2-release",component:d("/ecalc/docs/changelog/v7-2-release","ac2"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-3-release",component:d("/ecalc/docs/changelog/v7-3-release","783"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-4-release",component:d("/ecalc/docs/changelog/v7-4-release","2af"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-5-release",component:d("/ecalc/docs/changelog/v7-5-release","753"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v7-6-release",component:d("/ecalc/docs/changelog/v7-6-release","bab"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.0-release",component:d("/ecalc/docs/changelog/v8.0-release","4b0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.1-release",component:d("/ecalc/docs/changelog/v8.1-release","074"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.10-release",component:d("/ecalc/docs/changelog/v8.10-release","659"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.2-release",component:d("/ecalc/docs/changelog/v8.2-release","249"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.3-release",component:d("/ecalc/docs/changelog/v8.3-release","7c0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.4-release",component:d("/ecalc/docs/changelog/v8.4-release","2a6"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.5-release",component:d("/ecalc/docs/changelog/v8.5-release","5a0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.6-release",component:d("/ecalc/docs/changelog/v8.6-release","520"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.7-release",component:d("/ecalc/docs/changelog/v8.7-release","553"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/changelog/v8.8-release",component:d("/ecalc/docs/changelog/v8.8-release","df0"),exact:!0,sidebar:"changelog"},{path:"/ecalc/docs/contribute/documentation-guide/documentation",component:d("/ecalc/docs/contribute/documentation-guide/documentation","65b"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/documentation-guide/markdown",component:d("/ecalc/docs/contribute/documentation-guide/markdown","de5"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/get-started",component:d("/ecalc/docs/contribute/get-started","873"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/guides/conventional-commits",component:d("/ecalc/docs/contribute/guides/conventional-commits","573"),exact:!0,sidebar:"contribute"},{path:"/ecalc/docs/contribute/guides/git",component:d("/ecalc/docs/contribute/guides/git","151"),exact:!0,sidebar:"contribute"}]}]}]},{path:"/ecalc/",component:d("/ecalc/","94a"),exact:!0},{path:"*",component:d("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>s});var r=n(67294),o=n(85893);const a=r.createContext(!1);function s(e){let{children:t}=e;const[n,s]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{s(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},97221:(e,t,n)=>{"use strict";var r=n(67294),o=n(20745),a=n(73727),s=n(70405),i=n(10412);const l=[n(32497),n(3310),n(18320),n(52295)];var c=n(723),u=n(16550),d=n(18790),p=n(85893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(35742),h=n(52263),g=n(44996),b=n(86668),y=n(1944),v=n(94711),w=n(19727),_=n(43320),k=n(18780),E=n(90197);function x(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,v.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function S(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,k.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function T(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(y.d,{image:n}),(0,p.jsx)(S,{}),(0,p.jsx)(x,{}),(0,p.jsx)(E.Z,{tag:_.HX,locale:e}),(0,p.jsx)(m.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const R=new Map;function C(e){if(R.has(e.pathname))return{...e,pathname:R.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return R.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return R.set(e.pathname,t),{...e,pathname:t}}var N=n(98934),O=n(58940),A=n(20469);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,A.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:s}=t;if(s){const e=decodeURIComponent(s.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=i.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(I,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const M=j,D="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",U="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${D}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${F}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${U}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${U}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function z(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,p.jsx)(p.Fragment,{children:!i.Z.canUseDOM&&(0,p.jsx)(m.Z,{children:(0,p.jsx)("script",{children:B(e)})})})}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?(0,p.jsx)(z,{}):null}function G(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,h.Z)(),a=(0,g.Z)(e),{htmlLang:s,direction:i}=o[r];return(0,p.jsxs)(m.Z,{children:[(0,p.jsx)("html",{lang:s,dir:i}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:a})]})}var H=n(44763),q=n(72389);function V(){const e=(0,q.Z)();return(0,p.jsx)(m.Z,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function Q(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return(0,p.jsx)(H.Z,{children:(0,p.jsx)(O.M,{children:(0,p.jsxs)(N.t,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)(G,{}),(0,p.jsx)(T,{}),(0,p.jsx)($,{}),(0,p.jsx)(M,{location:C(t),children:e})]}),(0,p.jsx)(V,{})]})})})}var Z=n(16887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(99670);const X=new Set,K=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!K.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Z).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!K.has(e))(e)&&(K.add(e),P(e))},te=Object.freeze(ee),ne=Boolean(!0);if(i.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(s.B6,{children:(0,p.jsx)(a.VK,{children:(0,p.jsx)(Q,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};P(window.location.pathname).then(i)}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(67294),o=n(36809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/ecalc/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/ecalc/docs","mainDocId":"about/index","docs":[{"id":"about/getting_started/cli/faq","path":"/ecalc/docs/about/getting_started/cli/faq","sidebar":"about"},{"id":"about/getting_started/cli/index","path":"/ecalc/docs/about/getting_started/cli/","sidebar":"about"},{"id":"about/getting_started/index","path":"/ecalc/docs/about/getting_started/","sidebar":"about"},{"id":"about/getting_started/library/index","path":"/ecalc/docs/about/getting_started/library/","sidebar":"about"},{"id":"about/getting_started/yaml/index","path":"/ecalc/docs/about/getting_started/yaml/","sidebar":"about"},{"id":"about/index","path":"/ecalc/docs/about/","sidebar":"about"},{"id":"about/migration_guides/index","path":"/ecalc/docs/about/migration_guides/","sidebar":"about"},{"id":"about/migration_guides/v7_to_v8","path":"/ecalc/docs/about/migration_guides/v7_to_v8","sidebar":"about"},{"id":"about/migration_guides/v8_to_v81","path":"/ecalc/docs/about/migration_guides/v8_to_v81","sidebar":"about"},{"id":"about/migration_guides/v8-1_to_v8-2","path":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","sidebar":"about"},{"id":"about/migration_guides/v8-2_to_v8-3","path":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","sidebar":"about"},{"id":"about/migration_guides/v8-3_to_v8-4","path":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","sidebar":"about"},{"id":"about/migration_guides/v8-5_to_v8-6","path":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","sidebar":"about"},{"id":"about/migration_guides/v8-6_to_v8-7","path":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","sidebar":"about"},{"id":"about/migration_guides/v8.7_to_v8.8","path":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","sidebar":"about"},{"id":"about/miscellaneous/index","path":"/ecalc/docs/about/miscellaneous/","sidebar":"about"},{"id":"about/modelling/examples/advanced","path":"/ecalc/docs/about/modelling/examples/advanced","sidebar":"about"},{"id":"about/modelling/examples/drogon","path":"/ecalc/docs/about/modelling/examples/drogon","sidebar":"about"},{"id":"about/modelling/examples/index","path":"/ecalc/docs/about/modelling/examples/","sidebar":"about"},{"id":"about/modelling/examples/simple","path":"/ecalc/docs/about/modelling/examples/simple","sidebar":"about"},{"id":"about/modelling/index","path":"/ecalc/docs/about/modelling/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/generator_modelling","path":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/index","path":"/ecalc/docs/about/modelling/setup/facility_inputs/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/pump_modelling/index","path":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/pump_modelling/pump_charts","path":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/sampled_compressor_model","path":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","sidebar":"about"},{"id":"about/modelling/setup/facility_inputs/tabular","path":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","sidebar":"about"},{"id":"about/modelling/setup/file_format_and_syntax/expressions","path":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","sidebar":"about"},{"id":"about/modelling/setup/file_format_and_syntax/index","path":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","sidebar":"about"},{"id":"about/modelling/setup/fuel_types","path":"/ecalc/docs/about/modelling/setup/fuel_types","sidebar":"about"},{"id":"about/modelling/setup/index","path":"/ecalc/docs/about/modelling/setup/","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/index","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","sidebar":"about"},{"id":"about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","path":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","sidebar":"about"},{"id":"about/modelling/setup/installations/direct_consumers","path":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","sidebar":"about"},{"id":"about/modelling/setup/installations/generator_sets_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/installations/index","path":"/ecalc/docs/about/modelling/setup/installations/","sidebar":"about"},{"id":"about/modelling/setup/installations/pump_models_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/installations/tabular_models_in_calculations","path":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_charts/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","sidebar":"about"},{"id":"about/modelling/setup/models/compressor_modelling/index","path":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","sidebar":"about"},{"id":"about/modelling/setup/models/fluid_model","path":"/ecalc/docs/about/modelling/setup/models/fluid_model","sidebar":"about"},{"id":"about/modelling/setup/models/index","path":"/ecalc/docs/about/modelling/setup/models/","sidebar":"about"},{"id":"about/modelling/setup/models/turbine_modeling","path":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","sidebar":"about"},{"id":"about/modelling/setup/time_series","path":"/ecalc/docs/about/modelling/setup/time_series","sidebar":"about"},{"id":"about/modelling/setup/variables","path":"/ecalc/docs/about/modelling/setup/variables","sidebar":"about"},{"id":"about/modelling/theory/compressor_modelling","path":"/ecalc/docs/about/modelling/theory/compressor_modelling","sidebar":"about"},{"id":"about/modelling/theory/index","path":"/ecalc/docs/about/modelling/theory/","sidebar":"about"},{"id":"about/modelling/theory/pump_modelling","path":"/ecalc/docs/about/modelling/theory/pump_modelling","sidebar":"about"},{"id":"about/modelling/workflow/generic_workflow","path":"/ecalc/docs/about/modelling/workflow/generic_workflow","sidebar":"about"},{"id":"about/modelling/workflow/index","path":"/ecalc/docs/about/modelling/workflow/","sidebar":"about"},{"id":"about/references/api/index","path":"/ecalc/docs/about/references/api/","sidebar":"about"},{"id":"about/references/cli_reference","path":"/ecalc/docs/about/references/cli_reference","sidebar":"about"},{"id":"about/references/index","path":"/ecalc/docs/about/references/","sidebar":"about"},{"id":"about/references/keywords/ADJUSTMENT","path":"/ecalc/docs/about/references/keywords/ADJUSTMENT","sidebar":"about"},{"id":"about/references/keywords/CATEGORY","path":"/ecalc/docs/about/references/keywords/CATEGORY","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_MODEL","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_SYSTEM","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","sidebar":"about"},{"id":"about/references/keywords/COMPRESSOR_TRAIN_MODEL","path":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","sidebar":"about"},{"id":"about/references/keywords/CONDITION","path":"/ecalc/docs/about/references/keywords/CONDITION","sidebar":"about"},{"id":"about/references/keywords/CONDITIONS","path":"/ecalc/docs/about/references/keywords/CONDITIONS","sidebar":"about"},{"id":"about/references/keywords/CONSTANT","path":"/ecalc/docs/about/references/keywords/CONSTANT","sidebar":"about"},{"id":"about/references/keywords/CONSUMERS","path":"/ecalc/docs/about/references/keywords/CONSUMERS","sidebar":"about"},{"id":"about/references/keywords/CONSUMPTION_RATE_TYPE","path":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","sidebar":"about"},{"id":"about/references/keywords/CONTROL_MARGIN","path":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","sidebar":"about"},{"id":"about/references/keywords/CONTROL_MARGIN_UNIT","path":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","sidebar":"about"},{"id":"about/references/keywords/CROSSOVER","path":"/ecalc/docs/about/references/keywords/CROSSOVER","sidebar":"about"},{"id":"about/references/keywords/CURVE","path":"/ecalc/docs/about/references/keywords/CURVE","sidebar":"about"},{"id":"about/references/keywords/CURVES","path":"/ecalc/docs/about/references/keywords/CURVES","sidebar":"about"},{"id":"about/references/keywords/DIRECT_EMITTERS","path":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","sidebar":"about"},{"id":"about/references/keywords/DISCHARGE_PRESSURE","path":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/EFFICIENCY","path":"/ecalc/docs/about/references/keywords/EFFICIENCY","sidebar":"about"},{"id":"about/references/keywords/ELECTRICITY2FUEL","path":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","sidebar":"about"},{"id":"about/references/keywords/EMISSION","path":"/ecalc/docs/about/references/keywords/EMISSION","sidebar":"about"},{"id":"about/references/keywords/EMISSION_NAME","path":"/ecalc/docs/about/references/keywords/EMISSION_NAME","sidebar":"about"},{"id":"about/references/keywords/EMISSION_RATE","path":"/ecalc/docs/about/references/keywords/EMISSION_RATE","sidebar":"about"},{"id":"about/references/keywords/EMISSIONS","path":"/ecalc/docs/about/references/keywords/EMISSIONS","sidebar":"about"},{"id":"about/references/keywords/EMITTER_MODEL","path":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","sidebar":"about"},{"id":"about/references/keywords/END","path":"/ecalc/docs/about/references/keywords/END","sidebar":"about"},{"id":"about/references/keywords/ENERGY_USAGE_MODEL","path":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","sidebar":"about"},{"id":"about/references/keywords/ENERGYFUNCTION","path":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","sidebar":"about"},{"id":"about/references/keywords/EXPRESSION","path":"/ecalc/docs/about/references/keywords/EXPRESSION","sidebar":"about"},{"id":"about/references/keywords/EXTRAPOLATION","path":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","sidebar":"about"},{"id":"about/references/keywords/FACILITY_INPUTS","path":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","sidebar":"about"},{"id":"about/references/keywords/FACTOR","path":"/ecalc/docs/about/references/keywords/FACTOR","sidebar":"about"},{"id":"about/references/keywords/FILE","path":"/ecalc/docs/about/references/keywords/FILE","sidebar":"about"},{"id":"about/references/keywords/FLUID_DENSITY","path":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","sidebar":"about"},{"id":"about/references/keywords/FLUID_MODEL","path":"/ecalc/docs/about/references/keywords/FLUID_MODEL","sidebar":"about"},{"id":"about/references/keywords/FUEL","path":"/ecalc/docs/about/references/keywords/FUEL","sidebar":"about"},{"id":"about/references/keywords/FUEL_TYPES","path":"/ecalc/docs/about/references/keywords/FUEL_TYPES","sidebar":"about"},{"id":"about/references/keywords/FUELCONSUMERS","path":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","sidebar":"about"},{"id":"about/references/keywords/FUELRATE","path":"/ecalc/docs/about/references/keywords/FUELRATE","sidebar":"about"},{"id":"about/references/keywords/GENERATORSETS","path":"/ecalc/docs/about/references/keywords/GENERATORSETS","sidebar":"about"},{"id":"about/references/keywords/HCEXPORT","path":"/ecalc/docs/about/references/keywords/HCEXPORT","sidebar":"about"},{"id":"about/references/keywords/HEAD","path":"/ecalc/docs/about/references/keywords/HEAD","sidebar":"about"},{"id":"about/references/keywords/HEAD_MARGIN","path":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","sidebar":"about"},{"id":"about/references/keywords/include","path":"/ecalc/docs/about/references/keywords/include","sidebar":"about"},{"id":"about/references/keywords/index","path":"/ecalc/docs/about/references/keywords/","sidebar":"about"},{"id":"about/references/keywords/INFLUENCE_TIME_VECTOR","path":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","sidebar":"about"},{"id":"about/references/keywords/INLET_TEMPERATURE","path":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","sidebar":"about"},{"id":"about/references/keywords/INSTALLATIONS","path":"/ecalc/docs/about/references/keywords/INSTALLATIONS","sidebar":"about"},{"id":"about/references/keywords/INTERPOLATION_TYPE","path":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","sidebar":"about"},{"id":"about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","path":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/LOAD","path":"/ecalc/docs/about/references/keywords/LOAD","sidebar":"about"},{"id":"about/references/keywords/LOWER_HEATING_VALUE","path":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","sidebar":"about"},{"id":"about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","path":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","path":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","sidebar":"about"},{"id":"about/references/keywords/MODELS","path":"/ecalc/docs/about/references/keywords/MODELS","sidebar":"about"},{"id":"about/references/keywords/NAME","path":"/ecalc/docs/about/references/keywords/NAME","sidebar":"about"},{"id":"about/references/keywords/OPERATIONAL_SETTINGS","path":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","sidebar":"about"},{"id":"about/references/keywords/POWER_ADJUSTMENT_CONSTANT","path":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","sidebar":"about"},{"id":"about/references/keywords/POWERLOSSFACTOR","path":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","sidebar":"about"},{"id":"about/references/keywords/PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/PUMPS","path":"/ecalc/docs/about/references/keywords/PUMPS","sidebar":"about"},{"id":"about/references/keywords/RATE","path":"/ecalc/docs/about/references/keywords/RATE","sidebar":"about"},{"id":"about/references/keywords/RATE_FRACTIONS","path":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","sidebar":"about"},{"id":"about/references/keywords/RATE_PER_STREAM","path":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","sidebar":"about"},{"id":"about/references/keywords/REGULARITY","path":"/ecalc/docs/about/references/keywords/REGULARITY","sidebar":"about"},{"id":"about/references/keywords/STAGES","path":"/ecalc/docs/about/references/keywords/STAGES","sidebar":"about"},{"id":"about/references/keywords/START","path":"/ecalc/docs/about/references/keywords/START","sidebar":"about"},{"id":"about/references/keywords/STREAM","path":"/ecalc/docs/about/references/keywords/STREAM","sidebar":"about"},{"id":"about/references/keywords/STREAMS","path":"/ecalc/docs/about/references/keywords/STREAMS","sidebar":"about"},{"id":"about/references/keywords/SUCTION_PRESSURE","path":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","sidebar":"about"},{"id":"about/references/keywords/TIME_SERIES","path":"/ecalc/docs/about/references/keywords/TIME_SERIES","sidebar":"about"},{"id":"about/references/keywords/TOTAL_SYSTEM_RATE","path":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","sidebar":"about"},{"id":"about/references/keywords/TURBINE_EFFICIENCIES","path":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","sidebar":"about"},{"id":"about/references/keywords/TURBINE_LOAD","path":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","sidebar":"about"},{"id":"about/references/keywords/TURBINE_MODEL","path":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","sidebar":"about"},{"id":"about/references/keywords/TYPE","path":"/ecalc/docs/about/references/keywords/TYPE","sidebar":"about"},{"id":"about/references/keywords/UNITS","path":"/ecalc/docs/about/references/keywords/UNITS","sidebar":"about"},{"id":"about/references/keywords/UPSTREAM_PRESSURE_CONTROL","path":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","sidebar":"about"},{"id":"about/references/keywords/VARIABLES","path":"/ecalc/docs/about/references/keywords/VARIABLES","sidebar":"about"},{"id":"about/references/keywords/VENTING_EMITTERS","path":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","sidebar":"about"},{"id":"changelog/changelog","path":"/ecalc/docs/changelog/","sidebar":"changelog"},{"id":"changelog/next","path":"/ecalc/docs/changelog/latest","sidebar":"changelog"},{"id":"changelog/separator","path":"/ecalc/docs/changelog/separator","sidebar":"changelog"},{"id":"changelog/v7-0","path":"/ecalc/docs/changelog/v7-0-release","sidebar":"changelog"},{"id":"changelog/v7-1","path":"/ecalc/docs/changelog/v7-1-release","sidebar":"changelog"},{"id":"changelog/v7-2","path":"/ecalc/docs/changelog/v7-2-release","sidebar":"changelog"},{"id":"changelog/v7-3","path":"/ecalc/docs/changelog/v7-3-release","sidebar":"changelog"},{"id":"changelog/v7-4","path":"/ecalc/docs/changelog/v7-4-release","sidebar":"changelog"},{"id":"changelog/v7-5","path":"/ecalc/docs/changelog/v7-5-release","sidebar":"changelog"},{"id":"changelog/v7-6","path":"/ecalc/docs/changelog/v7-6-release","sidebar":"changelog"},{"id":"changelog/v8-0","path":"/ecalc/docs/changelog/v8.0-release","sidebar":"changelog"},{"id":"changelog/v8-1","path":"/ecalc/docs/changelog/v8.1-release","sidebar":"changelog"},{"id":"changelog/v8-10","path":"/ecalc/docs/changelog/v8.10-release","sidebar":"changelog"},{"id":"changelog/v8-2","path":"/ecalc/docs/changelog/v8.2-release","sidebar":"changelog"},{"id":"changelog/v8-3","path":"/ecalc/docs/changelog/v8.3-release","sidebar":"changelog"},{"id":"changelog/v8-4","path":"/ecalc/docs/changelog/v8.4-release","sidebar":"changelog"},{"id":"changelog/v8-5","path":"/ecalc/docs/changelog/v8.5-release","sidebar":"changelog"},{"id":"changelog/v8-6","path":"/ecalc/docs/changelog/v8.6-release","sidebar":"changelog"},{"id":"changelog/v8-7","path":"/ecalc/docs/changelog/v8.7-release","sidebar":"changelog"},{"id":"changelog/v8-8","path":"/ecalc/docs/changelog/v8.8-release","sidebar":"changelog"},{"id":"contribute/documentation-guide/documentation","path":"/ecalc/docs/contribute/documentation-guide/documentation","sidebar":"contribute"},{"id":"contribute/documentation-guide/markdown","path":"/ecalc/docs/contribute/documentation-guide/markdown","sidebar":"contribute"},{"id":"contribute/get-started","path":"/ecalc/docs/contribute/get-started","sidebar":"contribute"},{"id":"contribute/guides/conventional-commits","path":"/ecalc/docs/contribute/guides/conventional-commits","sidebar":"contribute"},{"id":"contribute/guides/git","path":"/ecalc/docs/contribute/guides/git","sidebar":"contribute"},{"id":"/category/documentation","path":"/ecalc/docs/category/documentation","sidebar":"contribute"},{"id":"/category/guides","path":"/ecalc/docs/category/guides","sidebar":"contribute"}],"draftIds":[],"sidebars":{"about":{"link":{"path":"/ecalc/docs/about/","label":"about/index"}},"contribute":{"link":{"path":"/ecalc/docs/contribute/get-started","label":"contribute/get-started"}},"changelog":{"link":{"path":"/ecalc/docs/changelog/v8.10-release","label":"changelog/v8-10"}}}}],"breadcrumbs":true}}}'),s=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var i=n(57529);const l=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.1.1"},"@easyops-cn/docusaurus-search-local":{"type":"local"}}}');var c=n(85893);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:s,codeTranslations:i},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),o=n(10412),a=n(35742),s=n(18780),i=n(32045),l=n(85893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,s.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(a.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(i.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(67294);var r=n(70405),o=n(85893);function a(e){return(0,o.jsx)(r.ql,{...e})}},33692:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),o=n(73727),a=n(18780),s=n(52263),i=n(13919),l=n(10412),c=n(28138),u=n(44996),d=n(85893);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:_}=(0,u.C)(),k=(0,c.Z)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const x=p||f;const S=(0,i.Z)(x),T=x?.replace("pathname://","");let R=void 0!==T?(C=T,b&&(e=>e.startsWith("/"))(C)?_(C):C):void 0;var C;R&&S&&(R=(0,a.applyTrailingSlash)(R,{trailingSlash:v,baseUrl:w}));const N=(0,r.useRef)(!1),O=n?o.OL:o.rU,A=l.Z.canUseIntersectionObserver,L=(0,r.useRef)(),I=()=>{N.current||null==R||(window.docusaurus.preload(R),N.current=!0)};(0,r.useEffect)((()=>(!A&&S&&null!=R&&window.docusaurus.prefetch(R),()=>{A&&L.current&&L.current.disconnect()})),[L,R,A,S]);const P=R?.startsWith("#")??!1,j=!y.target||"_self"===y.target,M=!R||!S||!j||P;return g||!P&&M||k.collectLink(R),y.id&&k.collectAnchor(y.id),M?(0,d.jsx)("a",{ref:E,href:R,...x&&!S&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(O,{...y,onMouseEnter:I,onTouchStart:I,innerRef:e=>{E.current=e,A&&e&&S&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=R&&window.docusaurus.prefetch(R))}))})),L.current.observe(e))},to:R,...n&&{isActive:h,activeClassName:m}})}const f=r.forwardRef(p)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(67294),o=n(85893);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var s=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return s[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(s,r)})}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},13919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>s,Z:()=>i});var r=n(67294),o=n(52263),a=n(13919);function s(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:s=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const i=n.startsWith(t)?n:t+n.replace(/^\//,"");return s?e+i:i}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=s();return n(e,t)}},28138:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(67294);n(85893);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function s(){return a()}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(58940);function a(){return(0,r.useContext)(o._)}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(98934);function a(){return(0,r.useContext)(o._)}},20469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294);const o=n(10412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,s]=n;const i=o?`${o}.${a}`:a;r(s)?e(s,i):t[i]=s}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>s});var r=n(67294),o=n(85893);const a=r.createContext(null);function s(e){let{children:t,value:n}=e;const s=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:s,value:n})),[s,n]);return(0,o.jsx)(a.Provider,{value:i,children:t})}},80143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>p,_r:()=>u,Jo:()=>g,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(16550),o=n(52263),a=n(29935);function s(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const i=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=i(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>s("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=s(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return i(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=i(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(74865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(42573),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(96854),n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},92503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(67294);var r=n(90512),o=n(95999),a=n(86668),s=n(33692),i=n(28138);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(85893);function u(e){let{as:t,id:n,...u}=e;const d=(0,i.Z)(),{navbar:{hideOnScroll:p}}=(0,a.L)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.Z)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(s.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(67294);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(85893);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},32045:(e,t,n)=>{"use strict";n.d(t,{Z:()=>At});var r=n(67294),o=n(90512),a=n(44763),s=n(1944),i=n(16550),l=n(95999),c=n(85936),u=n(85893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,i.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(35281),b=n(19727);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(h,{className:y.skipToContent})}var w=n(86668),_=n(59689);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...s}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...s,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const E={closeButton:"closeButton_CVFx"};function x(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",E.closeButton,e.className),children:(0,u.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}const S={content:"content_knG7"};function T(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.Z)(S.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const R={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,_.nT)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:R.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:R.announcementBarPlaceholder}),(0,u.jsx)(T,{className:R.announcementBarContent}),a&&(0,u.jsx)(x,{onClick:n,className:R.announcementBarClose})]})}var N=n(72961),O=n(12466);var A=n(902),L=n(13102);const I=r.createContext(null);function P(e){let{children:t}=e;const n=function(){const e=(0,N.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,s=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!s&&o(!0)}),[a,s]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(I.Provider,{value:n,children:t})}function j(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function M(){const e=(0,r.useContext)(I);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:j(a)})),[o,a,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=M();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(92949),U=n(72389);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const s=(0,U.Z)(),i=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.Z)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!s&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!s,title:i,"aria-label":i,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(z,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})]})})}const H=r.memo(G),q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,F.I)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?q.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var Q=n(21327);function Z(){return(0,u.jsx)(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function W(){const e=(0,N.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Z,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(W,{})]})}var X=n(33692),K=n(44996),J=n(13919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(39471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:s,isDropdownLink:i,prependBaseUrlToHref:l,...c}=e;const d=(0,K.Z)(r),p=(0,K.Z)(t),f=(0,K.Z)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,m&&(0,u.jsx)(te.Z,{...i&&{width:12,height:12}})]})};return o?(0,u.jsx)(X.Z,{href:l?f:o,...c,...h}):(0,u.jsx)(X.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var se=n(86043),ie=n(48596),le=n(52263);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,ie.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:s,...i}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:i.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:i.children??i.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Qe,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:s,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,i.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,se.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(se.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Qe,{mobile:!0,isDropdownItem:!0,onClick:s,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(94711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";var be=n(61029),ye=n(1728),ve=n(60373),we=n(80143),_e=n(90022),ke=n(98202),Ee=n(73926),xe=n(91073),Se=n(82539),Te=n(10726);const Re='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',Ce='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg>',Ne='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 5H3h14zm0 5H3h14zm0 5H3h14z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',Oe='<svg width="20" height="20" viewBox="0 0 20 20"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M18 3v4c0 2-2 4-4 4H2"></path><path d="M8 17l-6-6 6-6"></path></g></svg>',Ae='<svg width="40" height="40" viewBox="0 0 20 20" fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"></path></svg>',Le='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v42M20 27H8.3"></path></g></svg>',Ie='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v21M20 27H8.3"></path></g></svg>',Pe={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function je(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:s,isLastOfTree:i}=e;const l=0===n,c=1===n,u=[];s?u.push(Le):i&&u.push(Ie);const d=u.map((e=>`<span class="${Pe.hitTree}">${e}</span>`)),p=`<span class="${Pe.hitIcon}">${l?Re:c?Ce:Ne}</span>`,f=[`<span class="${Pe.hitTitle}">${(0,Te.o)(t.t,(0,xe.m)(o,"t"),a)}</span>`];if(!s&&!i&&be.H6){const e=r?(r.b??[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;f.push(`<span class="${Pe.hitPath}">${(0,Ee.e)(e??[])}</span>`)}else l||f.push(`<span class="${Pe.hitPath}">${(0,Se.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}</span>`);const m=`<span class="${Pe.hitAction}">${Oe}</span>`;return[...d,p,`<span class="${Pe.hitWrapper}">`,...f,"</span>",m].join("")}function Me(){return`<span class="${Pe.noResults}"><span class="${Pe.noResultsIcon}">${Ae}</span><span>${(0,l.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}</span></span>`}var De=n(80311),Fe=n(50051);async function Ue(){const e=await Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,68443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const Be="_highlight";const ze=function(e){let{handleSearchBarToggle:t}=e;const n=(0,U.Z)(),{siteConfig:{baseUrl:o},i18n:{currentLocale:a}}=(0,le.Z)(),s=(0,we.gA)();let c=o;try{const{preferredVersion:e}=(0,ve.J)(s?.pluginId??be.gQ);e&&!e.isLast&&(c=e.path+"/")}catch(D){if(be.l9&&!(D instanceof A.i6))throw D}const d=(0,i.k6)(),p=(0,i.TH)(),f=(0,r.useRef)(null),m=(0,r.useRef)(new Map),h=(0,r.useRef)(!1),[g,b]=(0,r.useState)(!1),[y,v]=(0,r.useState)(!1),[w,_]=(0,r.useState)(""),k=(0,r.useRef)(null),E=(0,r.useRef)(""),[x,S]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(be.Kc))return;let e="";if(p.pathname.startsWith(c)){const t=p.pathname.substring(c.length);let n;for(const e of be.Kc){const r="string"==typeof e?e:e.path;if(t===r||t.startsWith(`${r}/`)){n=r;break}}n&&(e=n)}E.current!==e&&(m.current.delete(e),E.current=e),S(e)}),[p.pathname,c]);const T=!!be.hG&&Array.isArray(be.Kc)&&""===x,R=(0,r.useCallback)((async()=>{if(T||m.current.get(x))return;m.current.set(x,"loading"),k.current?.autocomplete.destroy(),b(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,_e.w)(c,x),Ue()]);if(k.current=n(f.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,ye.Z)(Pe.searchBar,{[Pe.searchBarLeft]:"left"===be.pu}),noPrefix:!0,dropdownMenu:Pe.dropdownMenu,input:Pe.input,hint:Pe.hint,suggestions:Pe.suggestions,suggestion:Pe.suggestion,cursor:Pe.cursor,dataset:Pe.dataset,empty:Pe.empty}},[{source:(0,ke.v)(e,t,be.qo),templates:{suggestion:je,empty:Me,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&(!x||!be.pQ))return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),s=new URLSearchParams;let i;if(s.set("q",t),x){const e=x&&Array.isArray(be.Kc)?be.Kc.find((e=>"string"==typeof e?e===x:e.path===x)):x,t=e?(0,Fe._)(e,a).label:x;i=be.pQ&&n?(0,l.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:t}):(0,l.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:t})}else i=(0,l.I)({id:"theme.SearchBar.seeAll",message:"See all results"});if(!x||!Array.isArray(be.Kc)||be.pQ&&n||s.set("ctx",x),c!==o){if(!c.startsWith(o))throw new Error(`Version url '${c}' does not start with base url '${o}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);s.set("version",c.substring(o.length))}const u=`${o}search?${s.toString()}`;return r.href=u,r.textContent=i,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),k.current?.autocomplete.close(),d.push(u))})),r})({query:t,isEmpty:n}),s=document.createElement("div");return s.className=Pe.hitFooter,s.appendChild(r),s}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;f.current?.blur();let a=n;if(be.vc&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(Be,t);a+=`?${e.toString()}`}r&&(a+=r),d.push(a)})).on("autocomplete:closed",(()=>{f.current?.blur()})),m.current.set(x,"done"),b(!1),h.current){const e=f.current;e.value&&k.current?.autocomplete.open(),e.focus()}}),[T,x,c,o,d]);(0,r.useEffect)((()=>{if(!be.vc)return;const e=n?new URLSearchParams(p.search).getAll(Be):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new be.vc(t);n.unmark(),0!==e.length&&n.mark(e),_(e.join(" ")),k.current?.autocomplete.setVal(e.join(" "))}))}),[n,p.search,p.pathname]);const[C,N]=(0,r.useState)(!1),O=(0,r.useCallback)((()=>{h.current=!0,R(),N(!0),t?.(!0)}),[t,R]),L=(0,r.useCallback)((()=>{N(!1),t?.(!1)}),[t]),I=(0,r.useCallback)((()=>{R()}),[R]),P=(0,r.useCallback)((e=>{_(e.target.value),e.target.value&&v(!0)}),[]),j=!!n&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!be.AY)return;const e=e=>{!(j?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),f.current?.focus(),O())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[j,O]);const M=(0,r.useCallback)((()=>{const e=new URLSearchParams(p.search);e.delete(Be);const t=e.toString(),n=p.pathname+(""!=t?`?${t}`:"")+p.hash;n!=p.pathname+p.search+p.hash&&d.push(n),_(""),k.current?.autocomplete.setVal("")}),[p.pathname,p.search,p.hash,d]);return(0,u.jsxs)("div",{className:(0,ye.Z)("navbar__search",Pe.searchBarContainer,{[Pe.searchIndexLoading]:g&&y,[Pe.focused]:C}),hidden:T,children:[(0,u.jsx)("input",{placeholder:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:I,onFocus:O,onBlur:L,onChange:P,ref:f,value:w}),(0,u.jsx)(De.Z,{className:Pe.searchBarLoadingRing}),be.AY&&be.t_&&(""!==w?(0,u.jsx)("button",{className:Pe.searchClearButton,onClick:M,children:"\u2715"}):n&&(0,u.jsxs)("div",{className:Pe.searchHintContainer,children:[(0,u.jsx)("kbd",{className:Pe.searchHint,children:j?"\u2318":"ctrl"}),(0,u.jsx)("kbd",{className:Pe.searchHint,children:"K"})]}))]})},$e={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Ge(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.Z)(n,$e.navbarSearchContainer),children:t})}var He=n(52802);const qe=e=>e.docs.find((t=>t.id===e.mainDocId));const Ve={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:s,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,me.l)(),{search:f,hash:m}=(0,i.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===s?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[s].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:ge}),g]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Ge,{className:n,children:(0,u.jsx)(ze,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const s=a?"li":"div";return(0,u.jsx)(s,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.Iw)(r),s=(0,He.vY)(t,r),i=a?.path===s?.path;return null===s||s.unlisted&&!i?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>i||!!a?.sidebar&&a.sidebar===s.sidebar,label:n??s.id,to:s.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.Iw)(r),s=(0,He.oz)(t,r).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??s.label,to:s.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,He.lO)(r)[0],s=t??a.label,i=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:s,to:i})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...s}=e;const{search:c,hash:d}=(0,i.TH)(),p=(0,we.Iw)(n),f=(0,we.gB)(n),{savePreferredVersionName:m}=(0,ve.J)(n),h=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??qe(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],g=(0,He.lO)(n)[0],b=t&&h.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=t&&h.length>1?void 0:qe(g).path;return h.length<=1?(0,u.jsx)(ae,{...s,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...s,mobile:t,label:b,to:y,items:h,isActive:r?()=>!1:void 0})}};function Qe(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ve[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ze(){const e=(0,N.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Qe,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function We(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ye(){const e=0===(0,w.L)().navbar.items.length,t=M();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(We,{onClick:()=>t.hide()}),t.content]})}function Xe(){const e=(0,N.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(D,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ze,{}),secondaryMenu:(0,u.jsx)(Ye,{})}):null}const Ke={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Je(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function et(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),s=(0,N.e)(),{navbarRef:i,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),s=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,O.RF)(((t,r)=>{let{scrollY:s}=t;if(!e)return;if(s<a.current)return void n(!0);if(o.current)return void(o.current=!1);const i=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;i&&s>=i?n(!1):s+c<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:s,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:i,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ke.navbarHideable,!d&&Ke.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":s.shown}),children:[t,(0,u.jsx)(Je,{onClick:s.toggle}),(0,u.jsx)(Xe,{})]})}var tt=n(69690);const nt="right";function rt(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function ot(){const{toggle:e,shown:t}=(0,N.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(rt,{})})}const at={colorModeToggle:"colorModeToggle_DEke"};function st(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(tt.QW,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Qe,{...e})},t)))})}function it(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function lt(){const e=(0,N.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??nt)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(it,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(ot,{}),(0,u.jsx)(Z,{}),(0,u.jsx)(st,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(st,{items:r}),(0,u.jsx)(V,{className:at.colorModeToggle}),!o&&(0,u.jsx)(Ge,{children:(0,u.jsx)(ze,{})})]})})}function ct(){return(0,u.jsx)(et,{children:(0,u.jsx)(lt,{})})}function ut(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...s}=t,i=(0,K.Z)(n),l=(0,K.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(X.Z,{className:"footer__link-item",...r?{href:a?l:r}:{to:i},...s,children:[o,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function dt(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(ut,{item:t})},t.href??t.to)}function pt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(dt,{item:e},t)))})]})}function ft(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(pt,{column:e},t)))})}function mt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function ht(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(ut,{item:t})}function gt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(ht,{item:e}),t.length!==n+1&&(0,u.jsx)(mt,{})]},n)))})})}function bt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ft,{columns:t}):(0,u.jsx)(gt,{links:t})}var yt=n(19965);const vt={footerLogoLink:"footerLogoLink_BH7S"};function wt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,K.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(yt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function _t(e){let{logo:t}=e;return t.href?(0,u.jsx)(X.Z,{href:t.href,className:vt.footerLogoLink,target:t.target,children:(0,u.jsx)(wt,{logo:t})}):(0,u.jsx)(wt,{logo:t})}function kt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Et(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function xt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(Et,{style:o,links:n&&n.length>0&&(0,u.jsx)(bt,{links:n}),logo:r&&(0,u.jsx)(_t,{logo:r}),copyright:t&&(0,u.jsx)(kt,{copyright:t})})}const St=r.memo(xt),Tt=(0,A.Qc)([F.S,_.pl,O.OC,ve.L5,s.VC,function(e){let{children:t}=e;return(0,u.jsx)(L.n2,{children:(0,u.jsx)(N.M,{children:(0,u.jsx)(P,{children:t})})})}]);function Rt(e){let{children:t}=e;return(0,u.jsx)(Tt,{children:t})}var Ct=n(92503);function Nt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Ct.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(tt.Cw,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(tt.aG,{error:t})})]})})})}const Ot={mainWrapper:"mainWrapper_z2l0"};function At(e){const{children:t,noFooter:n,wrapperClassName:r,title:i,description:l}=e;return(0,b.t)(),(0,u.jsxs)(Rt,{children:[(0,u.jsx)(s.d,{title:i,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(C,{}),(0,u.jsx)(ct,{}),(0,u.jsx)("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,Ot.mainWrapper,r),children:(0,u.jsx)(a.Z,{fallback:e=>(0,u.jsx)(Nt,{...e}),children:t})}),!n&&(0,u.jsx)(St,{})]})}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(67294);var r=n(33692),o=n(44996),a=n(52263),s=n(86668),i=n(19965),l=n(85893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},s=(0,l.jsx)(i.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:s}):s}function u(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:i}}=(0,s.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Z)(i?.href||"/"),m=n?"":t,h=i?.alt??m;return(0,l.jsxs)(r.Z,{to:f,...p,...i?.target&&{target:i.target},children:[i&&(0,l.jsx)(c,{logo:i,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(67294);var r=n(35742),o=n(85893);function a(e){let{locale:t,version:n,tag:a}=e;const s=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),s&&(0,o.jsx)("meta",{name:"docsearch:language",content:s}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},19965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(67294),o=n(90512),a=n(72389),s=n(92949);const i={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(85893);function c(e){let{className:t,children:n}=e;const c=(0,a.Z)(),{colorMode:u}=(0,s.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,i.themedComponent,i[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(67294),o=n(10412),a=n(20469),s=n(91442),i=n(85893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,s.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function i(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.Z.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:s,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,i.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),s?.(n))},className:l,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,s]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.Z)((()=>{t||s(!0)}),[t]),(0,a.Z)((()=>{o&&c(t)}),[o,t]),o?(0,i.jsx)(h,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,i.jsx)(r,{...n})}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>m});var r=n(67294),o=n(72389),a=n(50012),s=n(902),i=n(86668),l=n(85893);const c=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,i.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const s=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:s})),[e,n,s])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new s.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>g});var r=n(67294),o=n(10412),a=n(902),s=n(50012),i=n(86668),l=n(85893);const c=r.createContext(void 0),u="theme",d=(0,s.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,i.L)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&s(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:s,get isDarkTheme(){return o===p.dark},setLightTheme(){s(p.light)},setDarkTheme(){s(p.dark)}})),[o,s])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b});var r=n(67294),o=n(80143),a=n(29935),s=n(86668),i=n(52802),l=n(902),c=n(50012),u=n(85893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function h(){const e=(0,o._r)(),t=(0,s.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,i]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{i(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),i((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=h();return(0,u.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return i.cE?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(m);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,s]=y(),{preferredVersionName:i}=n[e];return{preferredVersion:t.versions.find((e=>e.name===i))??null,savePreferredVersionName:(0,r.useCallback)((t=>{s.savePreferredVersion(e,t)}),[s,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(67294),o=n(902),a=n(85893);const s=Symbol("EmptyContext"),i=r.createContext(s);function l(e){let{children:t,name:n,items:o}=e;const s=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(i.Provider,{value:s,children:t})}function c(){const e=(0,r.useContext)(i);if(e===s)throw new o.i6("DocsSidebarProvider");return e}},74477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(67294),o=n(902),a=n(85893);const s=r.createContext(null);function i(e){let{children:t,version:n}=e;return(0,a.jsx)(s.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(s);if(null===e)throw new o.i6("DocsVersionProvider");return e}},72961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>m});var r=n(67294),o=n(13102),a=n(87524),s=n(16550),i=n(902);function l(e){!function(e){const t=(0,s.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(86668),u=n(85893);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,i]=(0,r.useState)(!1);l((()=>{if(s)return i(!1),!1}));const u=(0,r.useCallback)((()=>{i((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&i(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:s})),[e,n,u,s])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new i.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>i});var r=n(67294),o=n(902),a=n(85893);const s=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(s.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(s);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(s);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,i]=a,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{i({component:t,props:l})}),[i,t,l]),(0,r.useEffect)((()=>()=>i({component:null,props:null})),[i]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(67294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>i});var r=n(67294),o=n(10412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},s=996;function i(e){let{desktopBreakpoint:t=s}=void 0===e?{}:e;const[n,i]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){i(function(e){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},91442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},52802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>R,LM:()=>m,_F:()=>y,cE:()=>p,jA:()=>h,xz:()=>f,SN:()=>T,lO:()=>E,vY:()=>S,oz:()=>x,s1:()=>k,f:()=>w});var r=n(67294),o=n(16550),a=n(18790),s=n(80143),i=n(60373),l=n(74477),c=n(1116);function u(e){return Array.from(new Set(e))}var d=n(48596);const p=!!s._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=m(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,o.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=_({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const g=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||b(e.items,t))}function v(e,t){switch(e.type){case"category":return y(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||y(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function _(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function k(){const e=(0,c.V)(),{pathname:t}=(0,o.TH)(),n=(0,s.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?_({sidebarItems:e.items,pathname:t}):null}function E(e){const{activeVersion:t}=(0,s.Iw)(e),{preferredVersion:n}=(0,i.J)(e),o=(0,s.yW)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=E(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=E(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function T(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,l.E)(),s=t.routes,i=s.find((e=>(0,o.LX)(n.pathname,e)));if(!i)return null;const c=i.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.H)(s),sidebarName:c,sidebarItems:u}}function R(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},69690:(e,t,n)=>{"use strict";n.d(t,{aG:()=>u,Ac:()=>c,Cw:()=>l,QW:()=>d});var r=n(67294),o=n(95999),a=n(18780);const s={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};var i=n(85893);function l(e){return(0,i.jsx)("button",{type:"button",...e,children:(0,i.jsx)(o.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:n}=e;return(0,i.jsxs)("div",{className:s.errorBoundaryFallback,children:[(0,i.jsx)("p",{children:t.message}),(0,i.jsx)(l,{onClick:n})]})}function u(e){let{error:t}=e;const n=(0,a.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,i.jsx)("p",{className:s.errorBoundaryError,children:n})}class d extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>m});var r=n(67294),o=n(90512),a=n(35742),s=n(30226);function i(){const e=r.useContext(s._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(44996),c=n(52263);var u=n(85893);function d(e){let{title:t,description:n,keywords:r,image:o,children:s}=e;const i=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.Z,{children:[t&&(0,u.jsx)("title",{children:i}),t&&(0,u.jsx)("meta",{property:"og:title",content:i}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),s]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const s=r.useContext(p),i=(0,o.Z)(s,t);return(0,u.jsxs)(p.Provider,{value:i,children:[(0,u.jsx)(a.Z,{children:(0,u.jsx)("html",{className:i})}),n]})}function m(e){let{children:t}=e;const n=i(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.Z)(r,a),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>s});var r=n(67294),o=n(20469),a=n(85893);function s(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>s,Ns:()=>i});var r=n(67294),o=n(723),a=n(52263);function s(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function i(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>c,RF:()=>p});var r=n(67294),o=n(10412),a=n(72389),s=(n(20469),n(902)),i=n(85893);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,i.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new s.i6("ScrollControllerProvider");return e}const d=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,s.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(52263);const r="default";function o(e,t){return`docs-${e}-${t}`}},50012:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(67294);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const i={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(52263),o=n(16550),a=n(18780);function s(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:s,currentLocale:i}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=i===s?e:e.replace(`/${i}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===s?`${u}`:`${u}${e}/`}(n)}${d}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>s});var r=n(67294),o=n(16550),a=n(902);function s(e){const t=(0,o.TH)(),n=(0,a.D9)(t),s=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&s({location:t,previousLocation:n})}),[s,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(52263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(s=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(s):function(e){return e.endsWith("/")?e.slice(0,-1):e}(s));var s;return e.replace(o,a)}},54143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},18780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},80311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});n(67294);var r=n(1728);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var a=n(85893);function s(e){let{className:t}=e;return(0,a.jsxs)("div",{className:(0,r.Z)(o.loadingRing,t),children:[(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{})]})}},90022:(e,t,n)=>{"use strict";n.d(t,{w:()=>i});var r=n(31336),o=n.n(r),a=n(61029);const s=new Map;function i(e,t){const n=`${e}${t}`;let r=s.get(n);return r||(r=async function(e,t){{const n=`${e}${a.J.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),s=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),i=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:s,zhDictionary:Array.from(i)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),s.set(n,r)),r}},98202:(e,t,n)=>{"use strict";n.d(t,{v:()=>l});var r=n(31336),o=n.n(r);var a=n(61029);function s(e){return i(e).concat(i(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function i(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}function l(e,t,n){return function(r,i){const l=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.dK);if(0===l.length)return void i([]);const c=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,s=!1;for(const i of t)if(r.substr(0,i.length)===i){const t={missed:o.missed,term:o.term.concat({value:i})};r.length>i.length?e(r.substr(i.length),t):n.push(t),s=!0}else for(let t=i.length-1;t>a;t-=1){const l=i.substr(0,t);if(r.substr(0,t)===l){a=t;const i={missed:o.missed,term:o.term.concat({value:l,trailing:!0})};r.length>t?e(r.substr(t),i):n.push(i),s=!0;break}}s||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const s of a.dK)if("en"===s)a._k||r.unshift(o().stopWordFilter);else{const e=o()[s];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let i;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);i=[];const t=[];for(const r of n){const n=e(r);i.push(n),n.length<r.length&&n.length>0&&t.push(n)}n.push(...t)}else i=n.slice();const l=[];for(const o of i)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)l.push(o.slice(0,e).concat(o.slice(e+1)));return s(n).concat(s(l))}(l,t),u=[];e:for(const{term:t,tokens:o}of c)for(const{documents:r,index:a,type:s}of e)if(u.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!u.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-u.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:s,page:0!==s&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),u.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,o=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===o&&(o=n.index),r===o?0===t.type?-1:0===n.type?1:t.index-n.index:r-o}))}(u),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(u),i(u)}}},73926:(e,t,n)=>{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},21690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},91073:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{m:()=>r})},82539:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});var r=n(21690);function o(e,t,n){const a=[];for(const s of t){const n=e.toLowerCase().indexOf(s);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`<mark>${(0,r.X)(e.substr(n,s.length))}</mark>`);const i=n+s.length;i<e.length&&a.push(o(e.substr(i),t));break}}return 0===a.length?n?`<mark>${(0,r.X)(e)}</mark>`:(0,r.X)(e):a.join("")}},10726:(e,t,n)=>{"use strict";n.d(t,{o:()=>l});var r=n(21690),o=n(82539);const a=/\w+|\p{Unified_Ideograph}/u;function s(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var i=n(61029);function l(e,t,n,a){void 0===a&&(a=i.Hk);const{chunkIndex:l,chunks:c}=function(e,t,n){const a=[];let i=0,l=0,c=-1;for(;i<t.length;){const[u,d]=t[i];if(i+=1,!(u<l)){if(u>l){const t=s(e.substring(l,u)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}-1===c&&(c=a.length),l=u+d,a.push({html:(0,o.C)(e.substring(u,l),n,!0),textLength:d})}}if(l<e.length){const t=s(e.substring(l)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:c,chunks:a}}(e,t,n),u=c.slice(0,l),d=c[l],p=[d.html],f=c.slice(l+1);let m=d.textLength,h=0,g=0,b=!1,y=!1;for(;m<a;)if((h<=g||0===f.length)&&u.length>0){const e=u.pop();m+e.textLength<=a?(p.unshift(e.html),h+=e.textLength,m+=e.textLength):(b=!0,u.length=0)}else{if(!(f.length>0))break;{const e=f.shift();m+e.textLength<=a?(p.push(e.html),g+=e.textLength,m+=e.textLength):(y=!0,f.length=0)}}return(b||u.length>0)&&p.unshift("\u2026"),(y||f.length>0)&&p.push("\u2026"),p.join("")}},50051:(e,t,n)=>{"use strict";function r(e,t){if("string"==typeof e)return{label:e,path:e};{const{label:n,path:r}=e;return"string"==typeof n?{label:n,path:r}:Object.prototype.hasOwnProperty.call(n,t)?{label:n[t],path:r}:{label:r,path:r}}}n.d(t,{_:()=>r})},61029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>a,gQ:()=>f,H6:()=>c,hG:()=>g,l9:()=>m,dK:()=>r,_k:()=>o,pu:()=>p,AY:()=>u,t_:()=>d,Kc:()=>h,J:()=>s,Hk:()=>l,qo:()=>i,pQ:()=>b});n(31336);const r=["en"],o=!1,a=null,s="search-index{dir}.json?_=80dc351e",i=8,l=50,c=!0,u=!0,d=!0,p="right",f=void 0,m=!0,h=null,g=!1,b=!1},42358:(e,t,n)=>{"use strict";n.d(t,{lX:()=>E,q_:()=>N,ob:()=>h,PP:()=>A,Ep:()=>m,Hp:()=>g});var r=n(87462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const s=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],s=t&&t.split("/")||[],i=e&&o(e),l=t&&o(t),c=i||l;if(e&&o(e)?s=r:r.length&&(s.pop(),s=s.concat(r)),!s.length)return"/";if(s.length){var u=s[s.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=s.length;p>=0;p--){var f=s[p];"."===f?a(s,p):".."===f?(a(s,p),d++):d&&(a(s,p),d--)}if(!c)for(;d--;d)s.unshift("..");!c||""===s[0]||s[0]&&o(s[0])||s.unshift("");var m=s.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function i(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=i(t),o=i(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var c=n(38776);function u(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function f(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function h(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(i){throw i instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):i}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=s(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var y=!("undefined"==typeof window||!window.document||!window.document.createElement);function v(e,t){t(window.confirm(e))}var w="popstate",_="hashchange";function k(){try{return window.history.state||{}}catch(e){return{}}}function E(e){void 0===e&&(e={}),y||(0,c.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),s=e,i=s.forceRefresh,l=void 0!==i&&i,d=s.getUserConfirmation,g=void 0===d?v:d,E=s.keyLength,x=void 0===E?6:E,S=e.basename?f(u(e.basename)):"";function T(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return S&&(a=p(a,S)),h(a,r,n)}function R(){return Math.random().toString(36).substr(2,x)}var C=b();function N(e){(0,r.Z)(z,e),z.length=n.length,C.notifyListeners(z.location,z.action)}function O(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||I(T(e.state))}function A(){I(T(k()))}var L=!1;function I(e){if(L)L=!1,N();else{C.confirmTransitionTo(e,"POP",g,(function(t){t?N({action:"POP",location:e}):function(e){var t=z.location,n=j.indexOf(t.key);-1===n&&(n=0);var r=j.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(L=!0,D(o))}(e)}))}}var P=T(k()),j=[P.key];function M(e){return S+m(e)}function D(e){n.go(e)}var F=0;function U(e){1===(F+=e)&&1===e?(window.addEventListener(w,O),a&&window.addEventListener(_,A)):0===F&&(window.removeEventListener(w,O),a&&window.removeEventListener(_,A))}var B=!1;var z={length:n.length,action:"POP",location:P,createHref:M,push:function(e,t){var r="PUSH",a=h(e,t,R(),z.location);C.confirmTransitionTo(a,r,g,(function(e){if(e){var t=M(a),s=a.key,i=a.state;if(o)if(n.pushState({key:s,state:i},null,t),l)window.location.href=t;else{var c=j.indexOf(z.location.key),u=j.slice(0,c+1);u.push(a.key),j=u,N({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=h(e,t,R(),z.location);C.confirmTransitionTo(a,r,g,(function(e){if(e){var t=M(a),s=a.key,i=a.state;if(o)if(n.replaceState({key:s,state:i},null,t),l)window.location.replace(t);else{var c=j.indexOf(z.location.key);-1!==c&&(j[c]=a.key),N({action:r,location:a})}else window.location.replace(t)}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return B||(U(1),B=!0),function(){return B&&(B=!1,U(-1)),t()}},listen:function(e){var t=C.appendListener(e);return U(1),function(){U(-1),t()}}};return z}var x="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+d(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:d,decodePath:u},slash:{encodePath:u,decodePath:u}};function T(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function R(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function C(e){window.location.replace(T(window.location.href)+"#"+e)}function N(e){void 0===e&&(e={}),y||(0,c.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?v:o,s=n.hashType,i=void 0===s?"slash":s,l=e.basename?f(u(e.basename)):"",d=S[i],g=d.encodePath,w=d.decodePath;function _(){var e=w(R());return l&&(e=p(e,l)),h(e)}var k=b();function E(e){(0,r.Z)(B,e),B.length=t.length,k.notifyListeners(B.location,B.action)}var N=!1,O=null;function A(){var e,t,n=R(),r=g(n);if(n!==r)C(r);else{var o=_(),s=B.location;if(!N&&(t=o,(e=s).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(O===m(o))return;O=null,function(e){if(N)N=!1,E();else{var t="POP";k.confirmTransitionTo(e,t,a,(function(n){n?E({action:t,location:e}):function(e){var t=B.location,n=j.lastIndexOf(m(t));-1===n&&(n=0);var r=j.lastIndexOf(m(e));-1===r&&(r=0);var o=n-r;o&&(N=!0,M(o))}(e)}))}}(o)}}var L=R(),I=g(L);L!==I&&C(I);var P=_(),j=[m(P)];function M(e){t.go(e)}var D=0;function F(e){1===(D+=e)&&1===e?window.addEventListener(x,A):0===D&&window.removeEventListener(x,A)}var U=!1;var B={length:t.length,action:"POP",location:P,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=T(window.location.href)),n+"#"+g(l+m(e))},push:function(e,t){var n="PUSH",r=h(e,void 0,void 0,B.location);k.confirmTransitionTo(r,n,a,(function(e){if(e){var t=m(r),o=g(l+t);if(R()!==o){O=t,function(e){window.location.hash=e}(o);var a=j.lastIndexOf(m(B.location)),s=j.slice(0,a+1);s.push(t),j=s,E({action:n,location:r})}else E()}}))},replace:function(e,t){var n="REPLACE",r=h(e,void 0,void 0,B.location);k.confirmTransitionTo(r,n,a,(function(e){if(e){var t=m(r),o=g(l+t);R()!==o&&(O=t,C(o));var a=j.indexOf(m(B.location));-1!==a&&(j[a]=t),E({action:n,location:r})}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=k.setPrompt(e);return U||(F(1),U=!0),function(){return U&&(U=!1,F(-1)),t()}},listen:function(e){var t=k.appendListener(e);return F(1),function(){F(-1),t()}}};return B}function O(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,s=t.initialIndex,i=void 0===s?0:s,l=t.keyLength,c=void 0===l?6:l,u=b();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function p(){return Math.random().toString(36).substr(2,c)}var f=O(i,0,a.length-1),g=a.map((function(e){return h(e,void 0,"string"==typeof e?p():e.key||p())})),y=m;function v(e){var t=O(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:g.length,action:"POP",location:g[f],index:f,entries:g,createHref:y,push:function(e,t){var r="PUSH",o=h(e,t,p(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=h(e,t,p(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},s={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function l(e){return r.isMemo(e)?s:i[e.$$typeof]||o}i[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},i[r.Memo]=s;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var s=u(n);d&&(s=s.concat(d(n)));for(var i=l(t),h=l(n),g=0;g<s.length;++g){var b=s[g];if(!(a[b]||r&&r[b]||h&&h[b]||i&&i[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},41143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,s,i){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,s,i],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},31336:(e,t,n)=>{var r,o;!function(){var a,s,i,l,c,u,d,p,f,m,h,g,b,y,v,w,_,k,E,x,S,T,R,C,N,O,A,L,I,P,j=function(e){var t=new j.Builder;return t.pipeline.add(j.trimmer,j.stopWordFilter,j.stemmer),t.searchPipeline.add(j.stemmer),e.call(t,t),t.build()};j.version="2.3.9",j.utils={},j.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),j.utils.asString=function(e){return null==e?"":e.toString()},j.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},j.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},j.FieldRef.joiner="/",j.FieldRef.fromString=function(e){var t=e.indexOf(j.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new j.FieldRef(r,n,e)},j.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+j.FieldRef.joiner+this.docRef),this._stringValue},j.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},j.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},j.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},j.Set.prototype.contains=function(e){return!!this.elements[e]},j.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===j.Set.complete)return this;if(e===j.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var s=r[a];s in n.elements&&o.push(s)}return new j.Set(o)},j.Set.prototype.union=function(e){return e===j.Set.complete?j.Set.complete:e===j.Set.empty?this:new j.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},j.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},j.Token=function(e,t){this.str=e||"",this.metadata=t||{}},j.Token.prototype.toString=function(){return this.str},j.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},j.Token.prototype.clone=function(e){return e=e||function(e){return e},new j.Token(e(this.str,this.metadata),this.metadata)},j.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new j.Token(j.utils.asString(e).toLowerCase(),j.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,s=0;a<=r;a++){var i=a-s;if(n.charAt(a).match(j.tokenizer.separator)||a==r){if(i>0){var l=j.utils.clone(t)||{};l.position=[s,i],l.index=o.length,o.push(new j.Token(n.slice(s,a),l))}s=a+1}}return o},j.tokenizer.separator=/[\s\-]+/,j.Pipeline=function(){this._stack=[]},j.Pipeline.registeredFunctions=Object.create(null),j.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&j.utils.warn("Overwriting existing registered function: "+t),e.label=t,j.Pipeline.registeredFunctions[e.label]=e},j.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||j.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},j.Pipeline.load=function(e){var t=new j.Pipeline;return e.forEach((function(e){var n=j.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},j.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){j.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},j.Pipeline.prototype.after=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},j.Pipeline.prototype.before=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},j.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},j.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var s=r(e[a],a,e);if(null!=s&&""!==s)if(Array.isArray(s))for(var i=0;i<s.length;i++)o.push(s[i]);else o.push(s)}e=o}return e},j.Pipeline.prototype.runString=function(e,t){var n=new j.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},j.Pipeline.prototype.reset=function(){this._stack=[]},j.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return j.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},j.Vector=function(e){this._magnitude=0,this.elements=e||[]},j.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},j.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},j.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},j.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},j.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,s=0,i=0,l=0,c=0;l<o&&c<a;)(s=n[l])<(i=r[c])?l+=2:s>i?c+=2:s==i&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},j.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},j.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},j.Vector.prototype.toJSON=function(){return this.elements},j.stemmer=(s={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},i={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(c="[^aeiou][^aeiouy]*")+")?"+(u=(l="[aeiouy]")+"[aeiou]*")+c+"("+u+")?$",p="^("+c+")?"+u+c+u+c,f="^("+c+")?"+l,m=new RegExp("^("+c+")?"+u+c),h=new RegExp(p),g=new RegExp(d),b=new RegExp(f),y=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,_=/^(.+?)(ed|ing)$/,k=/.$/,E=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),S=new RegExp("^"+c+l+"[^aeiouwxy]$"),T=/^(.+?[^aeiou])y$/,R=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,N=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,O=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,L=/ll$/,I=new RegExp("^"+c+l+"[^aeiouwxy]$"),P=function(e){var t,n,r,o,a,l,c;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=y).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=_,(o=w).test(e)){var u=o.exec(e);(o=m).test(u[1])&&(o=k,e=e.replace(o,""))}else a.test(e)&&(t=(u=a.exec(e))[1],(a=b).test(t)&&(l=x,c=S,(a=E).test(e=t)?e+="e":l.test(e)?(o=k,e=e.replace(o,"")):c.test(e)&&(e+="e")));return(o=T).test(e)&&(e=(t=(u=o.exec(e))[1])+"i"),(o=R).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=m).test(t)&&(e=t+s[n])),(o=C).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=m).test(t)&&(e=t+i[n])),a=O,(o=N).test(e)?(t=(u=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(u=a.exec(e))[1]+u[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(u=o.exec(e))[1],a=g,l=I,((o=h).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=h,(o=L).test(e)&&a.test(e)&&(o=k,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(P)}),j.Pipeline.registerFunction(j.stemmer,"stemmer"),j.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},j.stopWordFilter=j.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),j.Pipeline.registerFunction(j.stopWordFilter,"stopWordFilter"),j.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},j.Pipeline.registerFunction(j.trimmer,"trimmer"),j.TokenSet=function(){this.final=!1,this.edges={},this.id=j.TokenSet._nextId,j.TokenSet._nextId+=1},j.TokenSet._nextId=1,j.TokenSet.fromArray=function(e){for(var t=new j.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},j.TokenSet.fromClause=function(e){return"editDistance"in e?j.TokenSet.fromFuzzyString(e.term,e.editDistance):j.TokenSet.fromString(e.term)},j.TokenSet.fromFuzzyString=function(e,t){for(var n=new j.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,s=o.str.charAt(0);s in o.node.edges?a=o.node.edges[s]:(a=new j.TokenSet,o.node.edges[s]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var i=o.node.edges["*"];else{i=new j.TokenSet;o.node.edges["*"]=i}if(0==o.str.length&&(i.final=!0),r.push({node:i,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new j.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new j.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},j.TokenSet.fromString=function(e){for(var t=new j.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],s=r==o-1;if("*"==a)t.edges[a]=t,t.final=s;else{var i=new j.TokenSet;i.final=s,t.edges[a]=i,t=i}}return n},j.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var s=r[a];t.push({prefix:n.prefix.concat(s),node:n.node.edges[s]})}}return e},j.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},j.TokenSet.prototype.intersect=function(e){for(var t=new j.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,s=Object.keys(n.node.edges),i=s.length,l=0;l<a;l++)for(var c=o[l],u=0;u<i;u++){var d=s[u];if(d==c||"*"==c){var p=n.node.edges[d],f=n.qNode.edges[c],m=p.final&&f.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new j.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:f,output:h,node:p})}}}return t},j.TokenSet.Builder=function(){this.previousWord="",this.root=new j.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},j.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new j.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},j.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},j.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},j.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},j.Index.prototype.search=function(e){return this.query((function(t){new j.QueryParser(e,t).parse()}))},j.Index.prototype.query=function(e){for(var t=new j.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),s=Object.create(null),i=0;i<this.fields.length;i++)r[this.fields[i]]=new j.Vector;e.call(t,t);for(i=0;i<t.clauses.length;i++){var l=t.clauses[i],c=null,u=j.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var p=c[d];l.term=p;var f=j.TokenSet.fromClause(l),m=this.tokenSet.intersect(f).toArray();if(0===m.length&&l.presence===j.Query.presence.REQUIRED){for(var h=0;h<l.fields.length;h++){a[A=l.fields[h]]=j.Set.empty}break}for(var g=0;g<m.length;g++){var b=m[g],y=this.invertedIndex[b],v=y._index;for(h=0;h<l.fields.length;h++){var w=y[A=l.fields[h]],_=Object.keys(w),k=b+"/"+A,E=new j.Set(_);if(l.presence==j.Query.presence.REQUIRED&&(u=u.union(E),void 0===a[A]&&(a[A]=j.Set.complete)),l.presence!=j.Query.presence.PROHIBITED){if(r[A].upsert(v,l.boost,(function(e,t){return e+t})),!o[k]){for(var x=0;x<_.length;x++){var S,T=_[x],R=new j.FieldRef(T,A),C=w[T];void 0===(S=n[R])?n[R]=new j.MatchData(b,A,C):S.add(b,A,C)}o[k]=!0}}else void 0===s[A]&&(s[A]=j.Set.empty),s[A]=s[A].union(E)}}}if(l.presence===j.Query.presence.REQUIRED)for(h=0;h<l.fields.length;h++){a[A=l.fields[h]]=a[A].intersect(u)}}var N=j.Set.complete,O=j.Set.empty;for(i=0;i<this.fields.length;i++){var A;a[A=this.fields[i]]&&(N=N.intersect(a[A])),s[A]&&(O=O.union(s[A]))}var L=Object.keys(n),I=[],P=Object.create(null);if(t.isNegated()){L=Object.keys(this.fieldVectors);for(i=0;i<L.length;i++){R=L[i];var M=j.FieldRef.fromString(R);n[R]=new j.MatchData}}for(i=0;i<L.length;i++){var D=(M=j.FieldRef.fromString(L[i])).docRef;if(N.contains(D)&&!O.contains(D)){var F,U=this.fieldVectors[M],B=r[M.fieldName].similarity(U);if(void 0!==(F=P[D]))F.score+=B,F.matchData.combine(n[M]);else{var z={ref:D,score:B,matchData:n[M]};P[D]=z,I.push(z)}}}return I.sort((function(e,t){return t.score-e.score}))},j.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:j.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},j.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,s=new j.TokenSet.Builder,i=j.Pipeline.load(e.pipeline);e.version!=j.version&&j.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+j.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var c=(d=r[l])[0],u=d[1];n[c]=new j.Vector(u)}for(l=0;l<a.length;l++){var d,p=(d=a[l])[0],f=d[1];s.insert(p),o[p]=f}return s.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=s.root,t.pipeline=i,new j.Index(t)},j.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=j.tokenizer,this.pipeline=new j.Pipeline,this.searchPipeline=new j.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},j.Builder.prototype.ref=function(e){this._ref=e},j.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},j.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},j.Builder.prototype.k1=function(e){this._k1=e},j.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],s=this._fields[a].extractor,i=s?s(e):e[a],l=this.tokenizer(i,{fields:[a]}),c=this.pipeline.run(l),u=new j.FieldRef(n,a),d=Object.create(null);this.fieldTermFrequencies[u]=d,this.fieldLengths[u]=0,this.fieldLengths[u]+=c.length;for(var p=0;p<c.length;p++){var f=c[p];if(null==d[f]&&(d[f]=0),d[f]+=1,null==this.invertedIndex[f]){var m=Object.create(null);m._index=this.termIndex,this.termIndex+=1;for(var h=0;h<r.length;h++)m[r[h]]=Object.create(null);this.invertedIndex[f]=m}null==this.invertedIndex[f][a][n]&&(this.invertedIndex[f][a][n]=Object.create(null));for(var g=0;g<this.metadataWhitelist.length;g++){var b=this.metadataWhitelist[g],y=f.metadata[b];null==this.invertedIndex[f][a][n][b]&&(this.invertedIndex[f][a][n][b]=[]),this.invertedIndex[f][a][n][b].push(y)}}}},j.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=j.FieldRef.fromString(e[o]),s=a.fieldName;r[s]||(r[s]=0),r[s]+=1,n[s]||(n[s]=0),n[s]+=this.fieldLengths[a]}var i=Object.keys(this._fields);for(o=0;o<i.length;o++){var l=i[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},j.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=j.FieldRef.fromString(t[o]),s=a.fieldName,i=this.fieldLengths[a],l=new j.Vector,c=this.fieldTermFrequencies[a],u=Object.keys(c),d=u.length,p=this._fields[s].boost||1,f=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,b,y=u[m],v=c[y],w=this.invertedIndex[y]._index;void 0===r[y]?(h=j.idf(this.invertedIndex[y],this.documentCount),r[y]=h):h=r[y],g=h*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(i/this.averageFieldLength[s]))+v),g*=p,g*=f,b=Math.round(1e3*g)/1e3,l.insert(w,b)}e[a]=l}this.fieldVectors=e},j.Builder.prototype.createTokenSet=function(){this.tokenSet=j.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},j.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new j.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},j.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},j.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var s=o[a];r[s]=n[s].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},j.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var s=o[a],i=Object.keys(e.metadata[r][s]);null==this.metadata[r][s]&&(this.metadata[r][s]=Object.create(null));for(var l=0;l<i.length;l++){var c=i[l];null==this.metadata[r][s][c]?this.metadata[r][s][c]=e.metadata[r][s][c]:this.metadata[r][s][c]=this.metadata[r][s][c].concat(e.metadata[r][s][c])}}}},j.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},j.Query=function(e){this.clauses=[],this.allFields=e},j.Query.wildcard=new String("*"),j.Query.wildcard.NONE=0,j.Query.wildcard.LEADING=1,j.Query.wildcard.TRAILING=2,j.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},j.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=j.Query.wildcard.NONE),e.wildcard&j.Query.wildcard.LEADING&&e.term.charAt(0)!=j.Query.wildcard&&(e.term="*"+e.term),e.wildcard&j.Query.wildcard.TRAILING&&e.term.slice(-1)!=j.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=j.Query.presence.OPTIONAL),this.clauses.push(e),this},j.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=j.Query.presence.PROHIBITED)return!1;return!0},j.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,j.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},j.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},j.QueryParseError.prototype=new Error,j.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},j.QueryLexer.prototype.run=function(){for(var e=j.QueryLexer.lexText;e;)e=e(this)},j.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},j.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},j.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},j.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return j.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},j.QueryLexer.prototype.width=function(){return this.pos-this.start},j.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},j.QueryLexer.prototype.backup=function(){this.pos-=1},j.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=j.QueryLexer.EOS&&this.backup()},j.QueryLexer.prototype.more=function(){return this.pos<this.length},j.QueryLexer.EOS="EOS",j.QueryLexer.FIELD="FIELD",j.QueryLexer.TERM="TERM",j.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",j.QueryLexer.BOOST="BOOST",j.QueryLexer.PRESENCE="PRESENCE",j.QueryLexer.lexField=function(e){return e.backup(),e.emit(j.QueryLexer.FIELD),e.ignore(),j.QueryLexer.lexText},j.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(j.QueryLexer.TERM)),e.ignore(),e.more())return j.QueryLexer.lexText},j.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.EDIT_DISTANCE),j.QueryLexer.lexText},j.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.BOOST),j.QueryLexer.lexText},j.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(j.QueryLexer.TERM)},j.QueryLexer.termSeparator=j.tokenizer.separator,j.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==j.QueryLexer.EOS)return j.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return j.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if(t.match(j.QueryLexer.termSeparator))return j.QueryLexer.lexTerm}else e.escapeCharacter()}},j.QueryParser=function(e,t){this.lexer=new j.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},j.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=j.QueryParser.parseClause;e;)e=e(this);return this.query},j.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},j.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},j.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},j.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case j.QueryLexer.PRESENCE:return j.QueryParser.parsePresence;case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new j.QueryParseError(n,t.start,t.end)}},j.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=j.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=j.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new j.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new j.QueryParseError(n,t.start,t.end)}switch(r.type){case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new j.QueryParseError(n,r.start,r.end)}}},j.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new j.QueryParseError(r,t.start,t.end)}if(o.type===j.QueryLexer.TERM)return j.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}},j.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new j.QueryParseError(r,n.start,n.end)}else e.nextClause()}},j.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},j.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new j.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new j.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return j})?r.call(t,n,t,e):r)||(e.exports=o)}()},32497:(e,t,n)=>{"use strict";n.r(t)},52295:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function s(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,i((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,s(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,s=t.querySelector(r.barSelector),i=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(s,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var i=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},14779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return i(a(e,t),t)},e.exports.tokensToFunction=i,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,s=0,i="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(i+=e.slice(s,f),s=f+d.length,p)i+=p[1];else{var m=e[s],h=n[2],g=n[3],b=n[4],y=n[5],v=n[6],w=n[7];i&&(r.push(i),i="");var _=null!=h&&null!=m&&m!==h,k="+"===v||"*"===v,E="?"===v||"*"===v,x=n[2]||u,S=b||y;r.push({name:g||a++,prefix:h||"",delimiter:x,optional:E,repeat:k,partial:_,asterisk:!!w,pattern:S?c(S):w?".*":"[^"+l(x)+"]+?"})}}return s<e.length&&(i+=e.substr(s)),i&&r.push(i),r}function s(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function i(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",i=t||{},l=(o||{}).pretty?s:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=i[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,s="",i=0;i<e.length;i++){var c=e[i];if("string"==typeof c)s+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),s+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=l(n.delimiter||"/"),h=s.slice(-m.length)===m;return o||(s=(h?s.slice(0,-m.length):s)+"(?:"+m+"(?=$))?"),s+=a?"$":o&&h?"":"(?="+m+"|$)",u(new RegExp("^"+s,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},29901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(29901),o=n(39642),a=new Set;function s(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(s.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),a.add(e)}))}s.silent=!1,e.exports=s},96854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var s=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,i=s.length;-1!==n.code.indexOf(o=t(r,i));)++i;return s[i]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function s(i){for(var l=0;l<i.length&&!(o>=a.length);l++){var c=i[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];h&&y.push.apply(y,s([h])),y.push(g),b&&y.push.apply(y,s([b])),"string"==typeof c?i.splice.apply(i,[l,1].concat(y)):c.content=y}}else c.content&&s(c.content)}return i}(n.tokens)}}}})}(Prism)},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},16500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=16500},39642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var s=a.indexOf(r);if(s<a.length-1)throw new Error("Circular dependency: "+a.slice(s).join(" -> "));var i={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in i))for(var s in o(t,a),i[t]=!0,n[t])i[s]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=i,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,s,i){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);s=s.map(c),i=(i||[]).map(c);var u=n(s),d=n(i);s.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;o(m);){for(var h in p={},m){var g=l[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in m=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,s=o?o.parallel:e,i={},l={};function c(e){if(e in i)return i[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=s(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return i[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(i[p]);return s(d)}(f,u,t,n)}};return w}}();e.exports=t},92703:(e,t,n)=>{"use strict";var r=n(50414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,s){if(s!==r){var i=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),o=n(63840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var s=new Set,i={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(i[e]=t,e=0;e<t.length;e++)s.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function h(e,t,n,r,o,a,s){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=s}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(m,e)||!d.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_=Symbol.for("react.element"),k=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),T=Symbol.for("react.provider"),R=Symbol.for("react.context"),C=Symbol.for("react.forward_ref"),N=Symbol.for("react.suspense"),O=Symbol.for("react.suspense_list"),A=Symbol.for("react.memo"),L=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var I=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var P=Symbol.iterator;function j(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=P&&e[P]||e["@@iterator"])?e:null}var M,D=Object.assign;function F(e){if(void 0===M)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);M=t&&t[1]||""}return"\n"+M+e}var U=!1;function B(e,t){if(!e||U)return"";U=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),s=o.length-1,i=a.length-1;1<=s&&0<=i&&o[s]!==a[i];)i--;for(;1<=s&&0<=i;s--,i--)if(o[s]!==a[i]){if(1!==s||1!==i)do{if(s--,0>--i||o[s]!==a[i]){var l="\n"+o[s].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=s&&0<=i);break}}}finally{U=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?F(e):""}function z(e){switch(e.tag){case 5:return F(e.type);case 16:return F("Lazy");case 13:return F("Suspense");case 19:return F("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function $(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case E:return"Fragment";case k:return"Portal";case S:return"Profiler";case x:return"StrictMode";case N:return"Suspense";case O:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case R:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case C:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case A:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case L:t=e._payload,e=e._init;try{return $(e(t))}catch(n){}}return null}function G(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===x?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function H(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function q(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function V(e){e._valueTracker||(e._valueTracker=function(e){var t=q(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=q(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Z(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function W(e,t){var n=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function X(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function K(e,t){X(e,t);var n=H(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&Z(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+H(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return D({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:H(n)}}function ae(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function se(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function ie(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?ie(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,Ee=null,xe=null;function Se(e){if(e=wo(e)){if("function"!=typeof ke)throw Error(a(280));var t=e.stateNode;t&&(t=ko(t),ke(e.stateNode,e.type,t))}}function Te(e){Ee?xe?xe.push(e):xe=[e]:Ee=e}function Re(){if(Ee){var e=Ee,t=xe;if(xe=Ee=null,Se(e),t)for(e=0;e<t.length;e++)Se(t[e])}}function Ce(e,t){return e(t)}function Ne(){}var Oe=!1;function Ae(e,t,n){if(Oe)return e(t,n);Oe=!0;try{return Ce(e,t,n)}finally{Oe=!1,(null!==Ee||null!==xe)&&(Ne(),Re())}}function Le(e,t){var n=e.stateNode;if(null===n)return null;var r=ko(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ie=!1;if(u)try{var Pe={};Object.defineProperty(Pe,"passive",{get:function(){Ie=!0}}),window.addEventListener("test",Pe,Pe),window.removeEventListener("test",Pe,Pe)}catch(ue){Ie=!1}function je(e,t,n,r,o,a,s,i,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Me=!1,De=null,Fe=!1,Ue=null,Be={onError:function(e){Me=!0,De=e}};function ze(e,t,n,r,o,a,s,i,l){Me=!1,De=null,je.apply(Be,arguments)}function $e(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ge(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function He(e){if($e(e)!==e)throw Error(a(188))}function qe(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var s=o.alternate;if(null===s){if(null!==(r=o.return)){n=r;continue}break}if(o.child===s.child){for(s=o.child;s;){if(s===n)return He(o),e;if(s===r)return He(o),t;s=s.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=s;else{for(var i=!1,l=o.child;l;){if(l===n){i=!0,n=o,r=s;break}if(l===r){i=!0,r=o,n=s;break}l=l.sibling}if(!i){for(l=s.child;l;){if(l===n){i=!0,n=s,r=o;break}if(l===r){i=!0,r=s,n=o;break}l=l.sibling}if(!i)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Ve(e):null}function Ve(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ve(e);if(null!==t)return t;e=e.sibling}return null}var Qe=o.unstable_scheduleCallback,Ze=o.unstable_cancelCallback,We=o.unstable_shouldYield,Ye=o.unstable_requestPaint,Xe=o.unstable_now,Ke=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var st=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(it(e)/lt|0)|0},it=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,s=268435455&n;if(0!==s){var i=s&~o;0!==i?r=dt(i):0!==(a&=s)&&(r=dt(a))}else 0!==(s=n&~o)?r=dt(s):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-st(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-st(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-st(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var _t,kt,Et,xt,St,Tt=!1,Rt=[],Ct=null,Nt=null,Ot=null,At=new Map,Lt=new Map,It=[],Pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function jt(e,t){switch(e){case"focusin":case"focusout":Ct=null;break;case"dragenter":case"dragleave":Nt=null;break;case"mouseover":case"mouseout":Ot=null;break;case"pointerover":case"pointerout":At.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Lt.delete(t.pointerId)}}function Mt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&kt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Dt(e){var t=vo(e.target);if(null!==t){var n=$e(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ge(n)))return e.blockedOn=t,void St(e.priority,(function(){Et(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Ft(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Wt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&kt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function Ut(e,t,n){Ft(e)&&n.delete(t)}function Bt(){Tt=!1,null!==Ct&&Ft(Ct)&&(Ct=null),null!==Nt&&Ft(Nt)&&(Nt=null),null!==Ot&&Ft(Ot)&&(Ot=null),At.forEach(Ut),Lt.forEach(Ut)}function zt(e,t){e.blockedOn===t&&(e.blockedOn=null,Tt||(Tt=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function $t(e){function t(t){return zt(t,e)}if(0<Rt.length){zt(Rt[0],e);for(var n=1;n<Rt.length;n++){var r=Rt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Ct&&zt(Ct,e),null!==Nt&&zt(Nt,e),null!==Ot&&zt(Ot,e),At.forEach(t),Lt.forEach(t),n=0;n<It.length;n++)(r=It[n]).blockedOn===e&&(r.blockedOn=null);for(;0<It.length&&null===(n=It[0]).blockedOn;)Dt(n),null===n.blockedOn&&It.shift()}var Gt=w.ReactCurrentBatchConfig,Ht=!0;function qt(e,t,n,r){var o=vt,a=Gt.transition;Gt.transition=null;try{vt=1,Qt(e,t,n,r)}finally{vt=o,Gt.transition=a}}function Vt(e,t,n,r){var o=vt,a=Gt.transition;Gt.transition=null;try{vt=4,Qt(e,t,n,r)}finally{vt=o,Gt.transition=a}}function Qt(e,t,n,r){if(Ht){var o=Wt(e,t,n,r);if(null===o)Hr(e,t,r,Zt,n),jt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Ct=Mt(Ct,e,t,n,r,o),!0;case"dragenter":return Nt=Mt(Nt,e,t,n,r,o),!0;case"mouseover":return Ot=Mt(Ot,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return At.set(a,Mt(At.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Lt.set(a,Mt(Lt.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(jt(e,r),4&t&&-1<Pt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&_t(a),null===(a=Wt(e,t,n,r))&&Hr(e,t,r,Zt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Hr(e,t,r,null,n)}}var Zt=null;function Wt(e,t,n,r){if(Zt=null,null!==(e=vo(e=_e(r))))if(null===(t=$e(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=Ge(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Zt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ke()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Xt=null,Kt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Kt,r=n.length,o="value"in Xt?Xt.value:Xt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var s=r-e;for(t=1;t<=s&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var s in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(s)&&(t=e[s],this[s]=t?t(o):o[s]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return D(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=D({},cn,{view:0,detail:0}),pn=on(dn),fn=D({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),mn=on(fn),hn=on(D({},fn,{dataTransfer:0})),gn=on(D({},dn,{relatedTarget:0})),bn=on(D({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=D({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=on(yn),wn=on(D({},cn,{data:0})),_n={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},En={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function xn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=En[e])&&!!t[e]}function Sn(){return xn}var Tn=D({},dn,{key:function(e){if(e.key){var t=_n[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Rn=on(Tn),Cn=on(D({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=on(D({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),On=on(D({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),An=D({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Ln=on(An),In=[9,13,27,32],Pn=u&&"CompositionEvent"in window,jn=null;u&&"documentMode"in document&&(jn=document.documentMode);var Mn=u&&"TextEvent"in window&&!jn,Dn=u&&(!Pn||jn&&8<jn&&11>=jn),Fn=String.fromCharCode(32),Un=!1;function Bn(e,t){switch(e){case"keyup":return-1!==In.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function qn(e,t,n,r){Te(r),0<(t=Vr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Vn=null,Qn=null;function Zn(e){Fr(e,0)}function Wn(e){if(Q(_o(e)))return e}function Yn(e,t){if("change"===e)return t}var Xn=!1;if(u){var Kn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Kn=Jn}else Kn=!1;Xn=Kn&&(!document.documentMode||9<document.documentMode)}function tr(){Vn&&(Vn.detachEvent("onpropertychange",nr),Qn=Vn=null)}function nr(e){if("value"===e.propertyName&&Wn(Qn)){var t=[];qn(t,Qn,e,_e(e)),Ae(Zn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Qn=n,(Vn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Wn(Qn)}function ar(e,t){if("click"===e)return Wn(t)}function sr(e,t){if("input"===e||"change"===e)return Wn(t)}var ir="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(ir(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!ir(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=Z();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Z((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function mr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var s=ur(n,r);o&&s&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==gr||gr!==Z(r)||("selectionStart"in(r=gr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Vr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function _r(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kr={animationend:_r("Animation","AnimationEnd"),animationiteration:_r("Animation","AnimationIteration"),animationstart:_r("Animation","AnimationStart"),transitionend:_r("Transition","TransitionEnd")},Er={},xr={};function Sr(e){if(Er[e])return Er[e];if(!kr[e])return e;var t,n=kr[e];for(t in n)if(n.hasOwnProperty(t)&&t in xr)return Er[e]=n[t];return e}u&&(xr=document.createElement("div").style,"AnimationEvent"in window||(delete kr.animationend.animation,delete kr.animationiteration.animation,delete kr.animationstart.animation),"TransitionEvent"in window||delete kr.transitionend.transition);var Tr=Sr("animationend"),Rr=Sr("animationiteration"),Cr=Sr("animationstart"),Nr=Sr("transitionend"),Or=new Map,Ar="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Lr(e,t){Or.set(e,t),l(t,[e])}for(var Ir=0;Ir<Ar.length;Ir++){var Pr=Ar[Ir];Lr(Pr.toLowerCase(),"on"+(Pr[0].toUpperCase()+Pr.slice(1)))}Lr(Tr,"onAnimationEnd"),Lr(Rr,"onAnimationIteration"),Lr(Cr,"onAnimationStart"),Lr("dblclick","onDoubleClick"),Lr("focusin","onFocus"),Lr("focusout","onBlur"),Lr(Nr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var jr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Mr=new Set("cancel close invalid load scroll toggle".split(" ").concat(jr));function Dr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,s,i,l,c){if(ze.apply(this,arguments),Me){if(!Me)throw Error(a(198));var u=De;Me=!1,De=null,Fe||(Fe=!0,Ue=u)}}(r,t,void 0,e),e.currentTarget=null}function Fr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var s=r.length-1;0<=s;s--){var i=r[s],l=i.instance,c=i.currentTarget;if(i=i.listener,l!==a&&o.isPropagationStopped())break e;Dr(o,i,c),a=l}else for(s=0;s<r.length;s++){if(l=(i=r[s]).instance,c=i.currentTarget,i=i.listener,l!==a&&o.isPropagationStopped())break e;Dr(o,i,c),a=l}}}if(Fe)throw e=Ue,Fe=!1,Ue=null,e}function Ur(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(Gr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),Gr(n,e,r,t)}var zr="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[zr]){e[zr]=!0,s.forEach((function(t){"selectionchange"!==t&&(Mr.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[zr]||(t[zr]=!0,Br("selectionchange",!1,t))}}function Gr(e,t,n,r){switch(Yt(t)){case 1:var o=qt;break;case 4:o=Vt;break;default:o=Qt}n=o.bind(null,t,n,e),o=void 0,!Ie||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Hr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var s=r.tag;if(3===s||4===s){var i=r.stateNode.containerInfo;if(i===o||8===i.nodeType&&i.parentNode===o)break;if(4===s)for(s=r.return;null!==s;){var l=s.tag;if((3===l||4===l)&&((l=s.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;s=s.return}for(;null!==i;){if(null===(s=vo(i)))return;if(5===(l=s.tag)||6===l){r=a=s;continue e}i=i.parentNode}}r=r.return}Ae((function(){var r=a,o=_e(n),s=[];e:{var i=Or.get(e);if(void 0!==i){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Rn;break;case"focusin":c="focus",l=gn;break;case"focusout":c="blur",l=gn;break;case"beforeblur":case"afterblur":l=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Nn;break;case Tr:case Rr:case Cr:l=bn;break;case Nr:l=On;break;case"scroll":l=pn;break;case"wheel":l=Ln;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Cn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==i?i+"Capture":null:i;u=[];for(var f,m=r;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&(null!=(h=Le(m,p))&&u.push(qr(m,h,f)))),d)break;m=m.return}0<u.length&&(i=new l(i,c,null,n,o),s.push({event:i,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(i="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!vo(c)&&!c[ho])&&(l||i)&&(i=o.window===o?o:(i=o.ownerDocument)?i.defaultView||i.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?vo(c):null)&&(c!==(d=$e(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=mn,h="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Cn,h="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?i:_o(l),f=null==c?i:_o(c),(i=new u(h,m+"leave",l,n,o)).target=d,i.relatedTarget=f,h=null,vo(o)===r&&((u=new u(p,m+"enter",c,n,o)).target=f,u.relatedTarget=d,h=u),d=h,l&&c)e:{for(p=c,m=0,f=u=l;f;f=Qr(f))m++;for(f=0,h=p;h;h=Qr(h))f++;for(;0<m-f;)u=Qr(u),m--;for(;0<f-m;)p=Qr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Qr(u),p=Qr(p)}u=null}else u=null;null!==l&&Zr(s,i,l,u,!1),null!==c&&null!==d&&Zr(s,d,c,u,!0)}if("select"===(l=(i=r?_o(r):window).nodeName&&i.nodeName.toLowerCase())||"input"===l&&"file"===i.type)var g=Yn;else if(Hn(i))if(Xn)g=sr;else{g=or;var b=rr}else(l=i.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===i.type||"radio"===i.type)&&(g=ar);switch(g&&(g=g(e,r))?qn(s,g,n,o):(b&&b(e,i,r),"focusout"===e&&(b=i._wrapperState)&&b.controlled&&"number"===i.type&&ee(i,"number",i.value)),b=r?_o(r):window,e){case"focusin":(Hn(b)||"true"===b.contentEditable)&&(gr=b,br=r,yr=null);break;case"focusout":yr=br=gr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(s,n,o);break;case"selectionchange":if(hr)break;case"keydown":case"keyup":wr(s,n,o)}var y;if(Pn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else $n?Bn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Dn&&"ko"!==n.locale&&($n||"onCompositionStart"!==v?"onCompositionEnd"===v&&$n&&(y=en()):(Kt="value"in(Xt=o)?Xt.value:Xt.textContent,$n=!0)),0<(b=Vr(r,v)).length&&(v=new wn(v,e,null,n,o),s.push({event:v,listeners:b}),y?v.data=y:null!==(y=zn(n))&&(v.data=y))),(y=Mn?function(e,t){switch(e){case"compositionend":return zn(t);case"keypress":return 32!==t.which?null:(Un=!0,Fn);case"textInput":return(e=t.data)===Fn&&Un?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!Pn&&Bn(e,t)?(e=en(),Jt=Kt=Xt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Dn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Vr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),s.push({event:o,listeners:r}),o.data=y))}Fr(s,t)}))}function qr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Vr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Le(e,n))&&r.unshift(qr(e,a,o)),null!=(a=Le(e,t))&&r.push(qr(e,a,o))),e=e.return}return r}function Qr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Zr(e,t,n,r,o){for(var a=t._reactName,s=[];null!==n&&n!==r;){var i=n,l=i.alternate,c=i.stateNode;if(null!==l&&l===r)break;5===i.tag&&null!==c&&(i=c,o?null!=(l=Le(n,a))&&s.unshift(qr(n,l,i)):o||null!=(l=Le(n,a))&&s.push(qr(n,l,i))),n=n.return}0!==s.length&&e.push({event:t,listeners:s})}var Wr=/\r\n?/g,Yr=/\u0000|\uFFFD/g;function Xr(e){return("string"==typeof e?e:""+e).replace(Wr,"\n").replace(Yr,"")}function Kr(e,t,n){if(t=Xr(t),Xr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,so="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(io)}:ro;function io(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void $t(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);$t(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,ho="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,yo="__reactHandles$"+po;function vo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ho]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[ho])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function _o(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function ko(e){return e[mo]||null}var Eo=[],xo=-1;function So(e){return{current:e}}function To(e){0>xo||(e.current=Eo[xo],Eo[xo]=null,xo--)}function Ro(e,t){xo++,Eo[xo]=e.current,e.current=t}var Co={},No=So(Co),Oo=So(!1),Ao=Co;function Lo(e,t){var n=e.type.contextTypes;if(!n)return Co;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Io(e){return null!=(e=e.childContextTypes)}function Po(){To(Oo),To(No)}function jo(e,t,n){if(No.current!==Co)throw Error(a(168));Ro(No,t),Ro(Oo,n)}function Mo(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,G(e)||"Unknown",o));return D({},n,r)}function Do(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Co,Ao=No.current,Ro(No,e),Ro(Oo,Oo.current),!0}function Fo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Mo(e,t,Ao),r.__reactInternalMemoizedMergedChildContext=e,To(Oo),To(No),Ro(No,e)):To(Oo),Ro(Oo,n)}var Uo=null,Bo=!1,zo=!1;function $o(e){null===Uo?Uo=[e]:Uo.push(e)}function Go(){if(!zo&&null!==Uo){zo=!0;var e=0,t=vt;try{var n=Uo;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Uo=null,Bo=!1}catch(o){throw null!==Uo&&(Uo=Uo.slice(e+1)),Qe(Je,Go),o}finally{vt=t,zo=!1}}return null}var Ho=[],qo=0,Vo=null,Qo=0,Zo=[],Wo=0,Yo=null,Xo=1,Ko="";function Jo(e,t){Ho[qo++]=Qo,Ho[qo++]=Vo,Vo=e,Qo=t}function ea(e,t,n){Zo[Wo++]=Xo,Zo[Wo++]=Ko,Zo[Wo++]=Yo,Yo=e;var r=Xo;e=Ko;var o=32-st(r)-1;r&=~(1<<o),n+=1;var a=32-st(t)+o;if(30<a){var s=o-o%5;a=(r&(1<<s)-1).toString(32),r>>=s,o-=s,Xo=1<<32-st(t)+o|n<<o|r,Ko=a+e}else Xo=1<<a|n<<o|r,Ko=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===Vo;)Vo=Ho[--qo],Ho[qo]=null,Qo=Ho[--qo],Ho[qo]=null;for(;e===Yo;)Yo=Zo[--Wo],Zo[Wo]=null,Ko=Zo[--Wo],Zo[Wo]=null,Xo=Zo[--Wo],Zo[Wo]=null}var ra=null,oa=null,aa=!1,sa=null;function ia(e,t){var n=Lc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Yo?{id:Xo,overflow:Ko}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Lc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?ia(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)ia(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ma(){oa=ra=null,aa=!1}function ha(e){null===sa?sa=[e]:sa.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var n in t=D({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var ya=So(null),va=null,wa=null,_a=null;function ka(){_a=wa=va=null}function Ea(e){var t=ya.current;To(ya),e._currentValue=t}function xa(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Sa(e,t){va=e,_a=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(wi=!0),e.firstContext=null)}function Ta(e){var t=e._currentValue;if(_a!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===va)throw Error(a(308));wa=e,va.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var Ra=null;function Ca(e){null===Ra?Ra=[e]:Ra.push(e)}function Na(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Ca(t)):(n.next=o.next,o.next=n),t.interleaved=n,Oa(e,r)}function Oa(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Aa=!1;function La(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ia(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Pa(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ja(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Nl)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Oa(e,n)}return null===(o=r.interleaved)?(t.next=t,Ca(r)):(t.next=o.next,o.next=t),r.interleaved=t,Oa(e,n)}function Ma(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Da(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=s:a=a.next=s,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Fa(e,t,n,r){var o=e.updateQueue;Aa=!1;var a=o.firstBaseUpdate,s=o.lastBaseUpdate,i=o.shared.pending;if(null!==i){o.shared.pending=null;var l=i,c=l.next;l.next=null,null===s?a=c:s.next=c,s=l;var u=e.alternate;null!==u&&((i=(u=u.updateQueue).lastBaseUpdate)!==s&&(null===i?u.firstBaseUpdate=c:i.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(s=0,u=c=l=null,i=a;;){var p=i.lane,f=i.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(p=t,f=n,h.tag){case 1:if("function"==typeof(m=h.payload)){d=m.call(f,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=h.payload)?m.call(f,d,p):m))break e;d=D({},d,p);break e;case 2:Aa=!0}}null!==i.callback&&0!==i.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[i]:p.push(i))}else f={eventTime:f,lane:p,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,s|=p;if(null===(i=i.next)){if(null===(i=o.shared.pending))break;i=(p=i).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{s|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Dl|=s,e.lanes=s,e.memoizedState=d}}function Ua(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Ba=(new r.Component).refs;function za(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:D({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Pa(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=ja(e,a,o))&&(rc(t,e,o,r),Ma(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Pa(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=ja(e,a,o))&&(rc(t,e,o,r),Ma(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),o=Pa(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=ja(e,o,r))&&(rc(t,e,r,n),Ma(t,e,r))}};function Ga(e,t,n,r,o,a,s){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,s):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function Ha(e,t,n){var r=!1,o=Co,a=t.contextType;return"object"==typeof a&&null!==a?a=Ta(a):(o=Io(t)?Ao:No.current,a=(r=null!=(r=t.contextTypes))?Lo(e,o):Co),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function qa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function Va(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Ba,La(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Ta(a):(a=Io(t)?Ao:No.current,o.context=Lo(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(za(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Fa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Qa(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,s=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===s?t.ref:(t=function(e){var t=o.refs;t===Ba&&(t=o.refs={}),null===e?delete t[s]:t[s]=e},t._stringRef=s,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Za(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Wa(e){return(0,e._init)(e._payload)}function Ya(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Pc(e,t)).index=0,e.sibling=null,e}function s(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function i(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Fc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===E?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===L&&Wa(a)===t.type)?((r=o(t,n.props)).ref=Qa(e,t,n),r.return=e,r):((r=jc(n.type,n.key,n.props,null,e.mode,r)).ref=Qa(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Uc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Mc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Fc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case _:return(n=jc(t.type,t.key,t.props,null,e.mode,n)).ref=Qa(e,null,t),n.return=e,n;case k:return(t=Uc(t,e.mode,n)).return=e,t;case L:return p(e,(0,t._init)(t._payload),n)}if(te(t)||j(t))return(t=Mc(t,e.mode,n,null)).return=e,t;Za(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case _:return n.key===o?c(e,t,n,r):null;case k:return n.key===o?u(e,t,n,r):null;case L:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||j(n))return null!==o?null:d(e,t,n,r,null);Za(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case _:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case k:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case L:return m(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||j(r))return d(t,e=e.get(n)||null,r,o,null);Za(t,r)}return null}function h(o,a,i,l){for(var c=null,u=null,d=a,h=a=0,g=null;null!==d&&h<i.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=f(o,d,i[h],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=s(b,a,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===i.length)return n(o,d),aa&&Jo(o,h),c;if(null===d){for(;h<i.length;h++)null!==(d=p(o,i[h],l))&&(a=s(d,a,h),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,h),c}for(d=r(o,d);h<i.length;h++)null!==(g=m(d,o,h,i[h],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=s(g,a,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,h),c}function g(o,i,l,c){var u=j(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,h=i,g=i=0,b=null,y=l.next();null!==h&&!y.done;g++,y=l.next()){h.index>g?(b=h,h=null):b=h.sibling;var v=f(o,h,y.value,c);if(null===v){null===h&&(h=b);break}e&&h&&null===v.alternate&&t(o,h),i=s(v,i,g),null===d?u=v:d.sibling=v,d=v,h=b}if(y.done)return n(o,h),aa&&Jo(o,g),u;if(null===h){for(;!y.done;g++,y=l.next())null!==(y=p(o,y.value,c))&&(i=s(y,i,g),null===d?u=y:d.sibling=y,d=y);return aa&&Jo(o,g),u}for(h=r(o,h);!y.done;g++,y=l.next())null!==(y=m(h,o,g,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?g:y.key),i=s(y,i,g),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,s,l){if("object"==typeof s&&null!==s&&s.type===E&&null===s.key&&(s=s.props.children),"object"==typeof s&&null!==s){switch(s.$$typeof){case _:e:{for(var c=s.key,u=a;null!==u;){if(u.key===c){if((c=s.type)===E){if(7===u.tag){n(r,u.sibling),(a=o(u,s.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===L&&Wa(c)===u.type){n(r,u.sibling),(a=o(u,s.props)).ref=Qa(r,u,s),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}s.type===E?((a=Mc(s.props.children,r.mode,l,s.key)).return=r,r=a):((l=jc(s.type,s.key,s.props,null,r.mode,l)).ref=Qa(r,a,s),l.return=r,r=l)}return i(r);case k:e:{for(u=s.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===s.containerInfo&&a.stateNode.implementation===s.implementation){n(r,a.sibling),(a=o(a,s.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Uc(s,r.mode,l)).return=r,r=a}return i(r);case L:return e(r,a,(u=s._init)(s._payload),l)}if(te(s))return h(r,a,s,l);if(j(s))return g(r,a,s,l);Za(r,s)}return"string"==typeof s&&""!==s||"number"==typeof s?(s=""+s,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,s)).return=r,r=a):(n(r,a),(a=Fc(s,r.mode,l)).return=r,r=a),i(r)):n(r,a)}}var Xa=Ya(!0),Ka=Ya(!1),Ja={},es=So(Ja),ts=So(Ja),ns=So(Ja);function rs(e){if(e===Ja)throw Error(a(174));return e}function os(e,t){switch(Ro(ns,t),Ro(ts,e),Ro(es,Ja),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}To(es),Ro(es,t)}function as(){To(es),To(ts),To(ns)}function ss(e){rs(ns.current);var t=rs(es.current),n=le(t,e.type);t!==n&&(Ro(ts,e),Ro(es,n))}function is(e){ts.current===e&&(To(es),To(ts))}var ls=So(0);function cs(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var us=[];function ds(){for(var e=0;e<us.length;e++)us[e]._workInProgressVersionPrimary=null;us.length=0}var ps=w.ReactCurrentDispatcher,fs=w.ReactCurrentBatchConfig,ms=0,hs=null,gs=null,bs=null,ys=!1,vs=!1,ws=0,_s=0;function ks(){throw Error(a(321))}function Es(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ir(e[n],t[n]))return!1;return!0}function xs(e,t,n,r,o,s){if(ms=s,hs=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,ps.current=null===e||null===e.memoizedState?ii:li,e=n(r,o),vs){s=0;do{if(vs=!1,ws=0,25<=s)throw Error(a(301));s+=1,bs=gs=null,t.updateQueue=null,ps.current=ci,e=n(r,o)}while(vs)}if(ps.current=si,t=null!==gs&&null!==gs.next,ms=0,bs=gs=hs=null,ys=!1,t)throw Error(a(300));return e}function Ss(){var e=0!==ws;return ws=0,e}function Ts(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bs?hs.memoizedState=bs=e:bs=bs.next=e,bs}function Rs(){if(null===gs){var e=hs.alternate;e=null!==e?e.memoizedState:null}else e=gs.next;var t=null===bs?hs.memoizedState:bs.next;if(null!==t)bs=t,gs=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gs=e).memoizedState,baseState:gs.baseState,baseQueue:gs.baseQueue,queue:gs.queue,next:null},null===bs?hs.memoizedState=bs=e:bs=bs.next=e}return bs}function Cs(e,t){return"function"==typeof t?t(e):t}function Ns(e){var t=Rs(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=gs,o=r.baseQueue,s=n.pending;if(null!==s){if(null!==o){var i=o.next;o.next=s.next,s.next=i}r.baseQueue=o=s,n.pending=null}if(null!==o){s=o.next,r=r.baseState;var l=i=null,c=null,u=s;do{var d=u.lane;if((ms&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,i=r):c=c.next=p,hs.lanes|=d,Dl|=d}u=u.next}while(null!==u&&u!==s);null===c?i=r:c.next=l,ir(r,t.memoizedState)||(wi=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{s=o.lane,hs.lanes|=s,Dl|=s,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Os(e){var t=Rs(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,s=t.memoizedState;if(null!==o){n.pending=null;var i=o=o.next;do{s=e(s,i.action),i=i.next}while(i!==o);ir(s,t.memoizedState)||(wi=!0),t.memoizedState=s,null===t.baseQueue&&(t.baseState=s),n.lastRenderedState=s}return[s,r]}function As(){}function Ls(e,t){var n=hs,r=Rs(),o=t(),s=!ir(r.memoizedState,o);if(s&&(r.memoizedState=o,wi=!0),r=r.queue,Hs(js.bind(null,n,r,e),[e]),r.getSnapshot!==t||s||null!==bs&&1&bs.memoizedState.tag){if(n.flags|=2048,Us(9,Ps.bind(null,n,r,o,t),void 0,null),null===Ol)throw Error(a(349));0!=(30&ms)||Is(n,t,o)}return o}function Is(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=hs.updateQueue)?(t={lastEffect:null,stores:null},hs.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ps(e,t,n,r){t.value=n,t.getSnapshot=r,Ms(t)&&Ds(e)}function js(e,t,n){return n((function(){Ms(t)&&Ds(e)}))}function Ms(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!ir(e,n)}catch(r){return!0}}function Ds(e){var t=Oa(e,1);null!==t&&rc(t,e,1,-1)}function Fs(e){var t=Ts();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Cs,lastRenderedState:e},t.queue=e,e=e.dispatch=ni.bind(null,hs,e),[t.memoizedState,e]}function Us(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=hs.updateQueue)?(t={lastEffect:null,stores:null},hs.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Bs(){return Rs().memoizedState}function zs(e,t,n,r){var o=Ts();hs.flags|=e,o.memoizedState=Us(1|t,n,void 0,void 0===r?null:r)}function $s(e,t,n,r){var o=Rs();r=void 0===r?null:r;var a=void 0;if(null!==gs){var s=gs.memoizedState;if(a=s.destroy,null!==r&&Es(r,s.deps))return void(o.memoizedState=Us(t,n,a,r))}hs.flags|=e,o.memoizedState=Us(1|t,n,a,r)}function Gs(e,t){return zs(8390656,8,e,t)}function Hs(e,t){return $s(2048,8,e,t)}function qs(e,t){return $s(4,2,e,t)}function Vs(e,t){return $s(4,4,e,t)}function Qs(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Zs(e,t,n){return n=null!=n?n.concat([e]):null,$s(4,4,Qs.bind(null,t,e),n)}function Ws(){}function Ys(e,t){var n=Rs();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Es(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Xs(e,t){var n=Rs();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Es(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ks(e,t,n){return 0==(21&ms)?(e.baseState&&(e.baseState=!1,wi=!0),e.memoizedState=n):(ir(n,t)||(n=ht(),hs.lanes|=n,Dl|=n,e.baseState=!0),t)}function Js(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fs.transition;fs.transition={};try{e(!1),t()}finally{vt=n,fs.transition=r}}function ei(){return Rs().memoizedState}function ti(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ri(e))oi(t,n);else if(null!==(n=Na(e,t,n,r))){rc(n,e,r,tc()),ai(n,t,r)}}function ni(e,t,n){var r=nc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ri(e))oi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var s=t.lastRenderedState,i=a(s,n);if(o.hasEagerState=!0,o.eagerState=i,ir(i,s)){var l=t.interleaved;return null===l?(o.next=o,Ca(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=Na(e,t,o,r))&&(rc(n,e,r,o=tc()),ai(n,t,r))}}function ri(e){var t=e.alternate;return e===hs||null!==t&&t===hs}function oi(e,t){vs=ys=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function ai(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var si={readContext:Ta,useCallback:ks,useContext:ks,useEffect:ks,useImperativeHandle:ks,useInsertionEffect:ks,useLayoutEffect:ks,useMemo:ks,useReducer:ks,useRef:ks,useState:ks,useDebugValue:ks,useDeferredValue:ks,useTransition:ks,useMutableSource:ks,useSyncExternalStore:ks,useId:ks,unstable_isNewReconciler:!1},ii={readContext:Ta,useCallback:function(e,t){return Ts().memoizedState=[e,void 0===t?null:t],e},useContext:Ta,useEffect:Gs,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,zs(4194308,4,Qs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return zs(4194308,4,e,t)},useInsertionEffect:function(e,t){return zs(4,2,e,t)},useMemo:function(e,t){var n=Ts();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ts();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ti.bind(null,hs,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ts().memoizedState=e},useState:Fs,useDebugValue:Ws,useDeferredValue:function(e){return Ts().memoizedState=e},useTransition:function(){var e=Fs(!1),t=e[0];return e=Js.bind(null,e[1]),Ts().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hs,o=Ts();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Ol)throw Error(a(349));0!=(30&ms)||Is(r,t,n)}o.memoizedState=n;var s={value:n,getSnapshot:t};return o.queue=s,Gs(js.bind(null,r,s,e),[e]),r.flags|=2048,Us(9,Ps.bind(null,r,s,n,t),void 0,null),n},useId:function(){var e=Ts(),t=Ol.identifierPrefix;if(aa){var n=Ko;t=":"+t+"R"+(n=(Xo&~(1<<32-st(Xo)-1)).toString(32)+n),0<(n=ws++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=_s++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},li={readContext:Ta,useCallback:Ys,useContext:Ta,useEffect:Hs,useImperativeHandle:Zs,useInsertionEffect:qs,useLayoutEffect:Vs,useMemo:Xs,useReducer:Ns,useRef:Bs,useState:function(){return Ns(Cs)},useDebugValue:Ws,useDeferredValue:function(e){return Ks(Rs(),gs.memoizedState,e)},useTransition:function(){return[Ns(Cs)[0],Rs().memoizedState]},useMutableSource:As,useSyncExternalStore:Ls,useId:ei,unstable_isNewReconciler:!1},ci={readContext:Ta,useCallback:Ys,useContext:Ta,useEffect:Hs,useImperativeHandle:Zs,useInsertionEffect:qs,useLayoutEffect:Vs,useMemo:Xs,useReducer:Os,useRef:Bs,useState:function(){return Os(Cs)},useDebugValue:Ws,useDeferredValue:function(e){var t=Rs();return null===gs?t.memoizedState=e:Ks(t,gs.memoizedState,e)},useTransition:function(){return[Os(Cs)[0],Rs().memoizedState]},useMutableSource:As,useSyncExternalStore:Ls,useId:ei,unstable_isNewReconciler:!1};function ui(e,t){try{var n="",r=t;do{n+=z(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function di(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function pi(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fi="function"==typeof WeakMap?WeakMap:Map;function mi(e,t,n){(n=Pa(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){ql||(ql=!0,Vl=r),pi(0,t)},n}function hi(e,t,n){(n=Pa(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){pi(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){pi(0,t),"function"!=typeof r&&(null===Ql?Ql=new Set([this]):Ql.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function gi(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fi;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Tc.bind(null,e,t,n),t.then(e,e))}function bi(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function yi(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Pa(-1,1)).tag=2,ja(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var vi=w.ReactCurrentOwner,wi=!1;function _i(e,t,n,r){t.child=null===e?Ka(t,null,n,r):Xa(t,e.child,n,r)}function ki(e,t,n,r,o){n=n.render;var a=t.ref;return Sa(t,o),r=xs(e,t,n,r,a,o),n=Ss(),null===e||wi?(aa&&n&&ta(t),t.flags|=1,_i(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,qi(e,t,o))}function Ei(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Ic(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=jc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,xi(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var s=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(s,r)&&e.ref===t.ref)return qi(e,t,o)}return t.flags|=1,(e=Pc(a,r)).ref=t.ref,e.return=t,t.child=e}function xi(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(wi=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,qi(e,t,o);0!=(131072&e.flags)&&(wi=!0)}}return Ri(e,t,n,r,o)}function Si(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ro(Pl,Il),Il|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ro(Pl,Il),Il|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,Ro(Pl,Il),Il|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Ro(Pl,Il),Il|=r;return _i(e,t,o,n),t.child}function Ti(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ri(e,t,n,r,o){var a=Io(n)?Ao:No.current;return a=Lo(t,a),Sa(t,o),n=xs(e,t,n,r,a,o),r=Ss(),null===e||wi?(aa&&r&&ta(t),t.flags|=1,_i(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,qi(e,t,o))}function Ci(e,t,n,r,o){if(Io(n)){var a=!0;Do(t)}else a=!1;if(Sa(t,o),null===t.stateNode)Hi(e,t),Ha(t,n,r),Va(t,n,r,o),r=!0;else if(null===e){var s=t.stateNode,i=t.memoizedProps;s.props=i;var l=s.context,c=n.contextType;"object"==typeof c&&null!==c?c=Ta(c):c=Lo(t,c=Io(n)?Ao:No.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof s.getSnapshotBeforeUpdate;d||"function"!=typeof s.UNSAFE_componentWillReceiveProps&&"function"!=typeof s.componentWillReceiveProps||(i!==r||l!==c)&&qa(t,s,r,c),Aa=!1;var p=t.memoizedState;s.state=p,Fa(t,r,s,o),l=t.memoizedState,i!==r||p!==l||Oo.current||Aa?("function"==typeof u&&(za(t,n,u,r),l=t.memoizedState),(i=Aa||Ga(t,n,i,r,p,l,c))?(d||"function"!=typeof s.UNSAFE_componentWillMount&&"function"!=typeof s.componentWillMount||("function"==typeof s.componentWillMount&&s.componentWillMount(),"function"==typeof s.UNSAFE_componentWillMount&&s.UNSAFE_componentWillMount()),"function"==typeof s.componentDidMount&&(t.flags|=4194308)):("function"==typeof s.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),s.props=r,s.state=l,s.context=c,r=i):("function"==typeof s.componentDidMount&&(t.flags|=4194308),r=!1)}else{s=t.stateNode,Ia(e,t),i=t.memoizedProps,c=t.type===t.elementType?i:ba(t.type,i),s.props=c,d=t.pendingProps,p=s.context,"object"==typeof(l=n.contextType)&&null!==l?l=Ta(l):l=Lo(t,l=Io(n)?Ao:No.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof s.getSnapshotBeforeUpdate)||"function"!=typeof s.UNSAFE_componentWillReceiveProps&&"function"!=typeof s.componentWillReceiveProps||(i!==d||p!==l)&&qa(t,s,r,l),Aa=!1,p=t.memoizedState,s.state=p,Fa(t,r,s,o);var m=t.memoizedState;i!==d||p!==m||Oo.current||Aa?("function"==typeof f&&(za(t,n,f,r),m=t.memoizedState),(c=Aa||Ga(t,n,c,r,p,m,l)||!1)?(u||"function"!=typeof s.UNSAFE_componentWillUpdate&&"function"!=typeof s.componentWillUpdate||("function"==typeof s.componentWillUpdate&&s.componentWillUpdate(r,m,l),"function"==typeof s.UNSAFE_componentWillUpdate&&s.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof s.componentDidUpdate&&(t.flags|=4),"function"==typeof s.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof s.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof s.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),s.props=r,s.state=m,s.context=l,r=c):("function"!=typeof s.componentDidUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof s.getSnapshotBeforeUpdate||i===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Ni(e,t,n,r,a,o)}function Ni(e,t,n,r,o,a){Ti(e,t);var s=0!=(128&t.flags);if(!r&&!s)return o&&Fo(t,n,!1),qi(e,t,a);r=t.stateNode,vi.current=t;var i=s&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&s?(t.child=Xa(t,e.child,null,a),t.child=Xa(t,null,i,a)):_i(e,t,i,a),t.memoizedState=r.state,o&&Fo(t,n,!0),t.child}function Oi(e){var t=e.stateNode;t.pendingContext?jo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&jo(0,t.context,!1),os(e,t.containerInfo)}function Ai(e,t,n,r,o){return ma(),ha(o),t.flags|=256,_i(e,t,n,r),t.child}var Li,Ii,Pi,ji,Mi={dehydrated:null,treeContext:null,retryLane:0};function Di(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fi(e,t,n){var r,o=t.pendingProps,s=ls.current,i=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&s)),r?(i=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(s|=1),Ro(ls,1&s),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,i?(o=t.mode,i=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==i?(i.childLanes=0,i.pendingProps=l):i=Dc(l,o,0,null),e=Mc(e,o,n,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=Di(n),t.memoizedState=Mi,e):Ui(t,l));if(null!==(s=e.memoizedState)&&null!==(r=s.dehydrated))return function(e,t,n,r,o,s,i){if(n)return 256&t.flags?(t.flags&=-257,Bi(e,t,i,r=di(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(s=r.fallback,o=t.mode,r=Dc({mode:"visible",children:r.children},o,0,null),(s=Mc(s,o,i,null)).flags|=2,r.return=t,s.return=t,r.sibling=s,t.child=r,0!=(1&t.mode)&&Xa(t,e.child,null,i),t.child.memoizedState=Di(i),t.memoizedState=Mi,s);if(0==(1&t.mode))return Bi(e,t,i,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,Bi(e,t,i,r=di(s=Error(a(419)),r,void 0))}if(l=0!=(i&e.childLanes),wi||l){if(null!==(r=Ol)){switch(i&-i){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|i))?0:o)&&o!==s.retryLane&&(s.retryLane=o,Oa(e,o),rc(r,e,o,-1))}return gc(),Bi(e,t,i,r=di(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Cc.bind(null,e),o._reactRetry=t,null):(e=s.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,sa=null,null!==e&&(Zo[Wo++]=Xo,Zo[Wo++]=Ko,Zo[Wo++]=Yo,Xo=e.id,Ko=e.overflow,Yo=t),t=Ui(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,s,n);if(i){i=o.fallback,l=t.mode,r=(s=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==s?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Pc(s,c)).subtreeFlags=14680064&s.subtreeFlags,null!==r?i=Pc(r,i):(i=Mc(i,l,n,null)).flags|=2,i.return=t,o.return=t,o.sibling=i,t.child=o,o=i,i=t.child,l=null===(l=e.child.memoizedState)?Di(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},i.memoizedState=l,i.childLanes=e.childLanes&~n,t.memoizedState=Mi,o}return e=(i=e.child).sibling,o=Pc(i,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ui(e,t){return(t=Dc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Bi(e,t,n,r){return null!==r&&ha(r),Xa(t,e.child,null,n),(e=Ui(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function zi(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),xa(e.return,t,n)}function $i(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Gi(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(_i(e,t,r.children,n),0!=(2&(r=ls.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&zi(e,n,t);else if(19===e.tag)zi(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Ro(ls,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===cs(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$i(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===cs(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$i(t,!0,n,null,a);break;case"together":$i(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Hi(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function qi(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Dl|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Pc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Pc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Vi(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Qi(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Zi(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Qi(t),null;case 1:case 17:return Io(t.type)&&Po(),Qi(t),null;case 3:return r=t.stateNode,as(),To(Oo),To(No),ds(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==sa&&(ic(sa),sa=null))),Ii(e,t),Qi(t),null;case 5:is(t);var o=rs(ns.current);if(n=t.type,null!==e&&null!=t.stateNode)Pi(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Qi(t),null}if(e=rs(es.current),pa(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[fo]=t,r[mo]=s,e=0!=(1&t.mode),n){case"dialog":Ur("cancel",r),Ur("close",r);break;case"iframe":case"object":case"embed":Ur("load",r);break;case"video":case"audio":for(o=0;o<jr.length;o++)Ur(jr[o],r);break;case"source":Ur("error",r);break;case"img":case"image":case"link":Ur("error",r),Ur("load",r);break;case"details":Ur("toggle",r);break;case"input":Y(r,s),Ur("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!s.multiple},Ur("invalid",r);break;case"textarea":oe(r,s),Ur("invalid",r)}for(var l in ye(n,s),o=null,s)if(s.hasOwnProperty(l)){var c=s[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==s.suppressHydrationWarning&&Kr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==s.suppressHydrationWarning&&Kr(r.textContent,c,e),o=["children",""+c]):i.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Ur("scroll",r)}switch(n){case"input":V(r),J(r,s,!0);break;case"textarea":V(r),se(r);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=ie(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[mo]=r,Li(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Ur("cancel",e),Ur("close",e),o=r;break;case"iframe":case"object":case"embed":Ur("load",e),o=r;break;case"video":case"audio":for(o=0;o<jr.length;o++)Ur(jr[o],e);o=r;break;case"source":Ur("error",e),o=r;break;case"img":case"image":case"link":Ur("error",e),Ur("load",e),o=r;break;case"details":Ur("toggle",e),o=r;break;case"input":Y(e,r),o=W(e,r),Ur("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=D({},r,{value:void 0}),Ur("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),Ur("invalid",e)}for(s in ye(n,o),c=o)if(c.hasOwnProperty(s)){var u=c[s];"style"===s?ge(e,u):"dangerouslySetInnerHTML"===s?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===s?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(i.hasOwnProperty(s)?null!=u&&"onScroll"===s&&Ur("scroll",e):null!=u&&v(e,s,u,l))}switch(n){case"input":V(e),J(e,r,!1);break;case"textarea":V(e),se(e);break;case"option":null!=r.value&&e.setAttribute("value",""+H(r.value));break;case"select":e.multiple=!!r.multiple,null!=(s=r.value)?ne(e,!!r.multiple,s,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Qi(t),null;case 6:if(e&&null!=t.stateNode)ji(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=rs(ns.current),rs(es.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(s=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Kr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Kr(r.nodeValue,n,0!=(1&e.mode))}s&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return Qi(t),null;case 13:if(To(ls),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ma(),t.flags|=98560,s=!1;else if(s=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!s)throw Error(a(318));if(!(s=null!==(s=t.memoizedState)?s.dehydrated:null))throw Error(a(317));s[fo]=t}else ma(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Qi(t),s=!1}else null!==sa&&(ic(sa),sa=null),s=!0;if(!s)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ls.current)?0===jl&&(jl=3):gc())),null!==t.updateQueue&&(t.flags|=4),Qi(t),null);case 4:return as(),Ii(e,t),null===e&&$r(t.stateNode.containerInfo),Qi(t),null;case 10:return Ea(t.type._context),Qi(t),null;case 19:if(To(ls),null===(s=t.memoizedState))return Qi(t),null;if(r=0!=(128&t.flags),null===(l=s.rendering))if(r)Vi(s,!1);else{if(0!==jl||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=cs(e))){for(t.flags|=128,Vi(s,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(s=n).flags&=14680066,null===(l=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=l.childLanes,s.lanes=l.lanes,s.child=l.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=l.memoizedProps,s.memoizedState=l.memoizedState,s.updateQueue=l.updateQueue,s.type=l.type,e=l.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Ro(ls,1&ls.current|2),t.child}e=e.sibling}null!==s.tail&&Xe()>Gl&&(t.flags|=128,r=!0,Vi(s,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=cs(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Vi(s,!0),null===s.tail&&"hidden"===s.tailMode&&!l.alternate&&!aa)return Qi(t),null}else 2*Xe()-s.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=128,r=!0,Vi(s,!1),t.lanes=4194304);s.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=s.last)?n.sibling=l:t.child=l,s.last=l)}return null!==s.tail?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=Xe(),t.sibling=null,n=ls.current,Ro(ls,r?1&n|2:1&n),t):(Qi(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Il)&&(Qi(t),6&t.subtreeFlags&&(t.flags|=8192)):Qi(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Wi(e,t){switch(na(t),t.tag){case 1:return Io(t.type)&&Po(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return as(),To(Oo),To(No),ds(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return is(t),null;case 13:if(To(ls),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ma()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return To(ls),null;case 4:return as(),null;case 10:return Ea(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}Li=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ii=function(){},Pi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,rs(es.current);var a,s=null;switch(n){case"input":o=W(e,o),r=W(e,r),s=[];break;case"select":o=D({},o,{value:void 0}),r=D({},r,{value:void 0}),s=[];break;case"textarea":o=re(e,o),r=re(e,r),s=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(i.hasOwnProperty(u)?s||(s=[]):(s=s||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(s||(s=[]),s.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(s=s||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(s=s||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(i.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Ur("scroll",e),s||l===c||(s=[])):(s=s||[]).push(u,c))}n&&(s=s||[]).push("style",n);var u=s;(t.updateQueue=u)&&(t.flags|=4)}},ji=function(e,t,n,r){n!==r&&(t.flags|=4)};var Yi=!1,Xi=!1,Ki="function"==typeof WeakSet?WeakSet:Set,Ji=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){Sc(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){Sc(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&tl(t,n,a)}o=o.next}while(o!==r)}}function ol(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function al(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function sl(e){var t=e.alternate;null!==t&&(e.alternate=null,sl(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[go],delete t[bo],delete t[yo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)ml(e,t,n),n=n.sibling}function ml(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(i){}switch(n.tag){case 5:Xi||el(n,t);case 6:var r=dl,o=pl;dl=null,fl(e,t,n),pl=o,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),$t(e)):lo(dl,n.stateNode));break;case 4:r=dl,o=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=o;break;case 0:case 11:case 14:case 15:if(!Xi&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,s=a.destroy;a=a.tag,void 0!==s&&(0!=(2&a)||0!=(4&a))&&tl(n,t,s),o=o.next}while(o!==r)}fl(e,t,n);break;case 1:if(!Xi&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(i){Sc(n,t,i)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Xi=(r=Xi)||null!==n.memoizedState,fl(e,t,n),Xi=r):fl(e,t,n);break;default:fl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Ki),t.forEach((function(t){var r=Nc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function gl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var s=e,i=t,l=i;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(a(160));ml(s,i,o),dl=null,pl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){Sc(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gl(t,e),yl(e),4&r){try{rl(3,e,e.return),ol(3,e)}catch(g){Sc(e,e.return,g)}try{rl(5,e,e.return)}catch(g){Sc(e,e.return,g)}}break;case 1:gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(g){Sc(e,e.return,g)}}if(4&r&&null!=(o=e.stateNode)){var s=e.memoizedProps,i=null!==n?n.memoizedProps:s,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===s.type&&null!=s.name&&X(o,s),ve(l,i);var u=ve(l,s);for(i=0;i<c.length;i+=2){var d=c[i],p=c[i+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):v(o,d,p,u)}switch(l){case"input":K(o,s);break;case"textarea":ae(o,s);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!s.multiple;var m=s.value;null!=m?ne(o,!!s.multiple,m,!1):f!==!!s.multiple&&(null!=s.defaultValue?ne(o,!!s.multiple,s.defaultValue,!0):ne(o,!!s.multiple,s.multiple?[]:"",!1))}o[mo]=s}catch(g){Sc(e,e.return,g)}}break;case 6:if(gl(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,s=e.memoizedProps;try{o.nodeValue=s}catch(g){Sc(e,e.return,g)}}break;case 3:if(gl(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(g){Sc(e,e.return,g)}break;case 4:default:gl(t,e),yl(e);break;case 13:gl(t,e),yl(e),8192&(o=e.child).flags&&(s=null!==o.memoizedState,o.stateNode.isHidden=s,!s||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Xe())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Xi=(u=Xi)||d,gl(t,e),Xi=u):gl(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Ji=e,d=e.child;null!==d;){for(p=Ji=d;null!==Ji;){switch(m=(f=Ji).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(g){Sc(r,n,g)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==m?(m.return=f,Ji=m):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(s=o.style).setProperty?s.setProperty("display","none","important"):s.display="none":(l=p.stateNode,i=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=he("display",i))}catch(g){Sc(e,e.return,g)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(g){Sc(e,e.return,g)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:gl(t,e),yl(e),4&r&&hl(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(il(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),ul(e,ll(e),o);break;case 3:case 4:var s=r.stateNode.containerInfo;cl(e,ll(e),s);break;default:throw Error(a(161))}}catch(i){Sc(e,e.return,i)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Ji=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Ji;){var o=Ji,a=o.child;if(22===o.tag&&r){var s=null!==o.memoizedState||Yi;if(!s){var i=o.alternate,l=null!==i&&null!==i.memoizedState||Xi;i=Yi;var c=Xi;if(Yi=s,(Xi=l)&&!c)for(Ji=o;null!==Ji;)l=(s=Ji).child,22===s.tag&&null!==s.memoizedState?El(o):null!==l?(l.return=s,Ji=l):El(o);for(;null!==a;)Ji=a,wl(a,t,n),a=a.sibling;Ji=o,Yi=i,Xi=c}_l(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Ji=a):_l(e)}}function _l(e){for(;null!==Ji;){var t=Ji;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Xi||ol(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Xi)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ba(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var s=t.updateQueue;null!==s&&Ua(t,s,r);break;case 3:var i=t.updateQueue;if(null!==i){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ua(t,i,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&$t(p)}}}break;default:throw Error(a(163))}Xi||512&t.flags&&al(t)}catch(f){Sc(t,t.return,f)}}if(t===e){Ji=null;break}if(null!==(n=t.sibling)){n.return=t.return,Ji=n;break}Ji=t.return}}function kl(e){for(;null!==Ji;){var t=Ji;if(t===e){Ji=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Ji=n;break}Ji=t.return}}function El(e){for(;null!==Ji;){var t=Ji;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{ol(4,t)}catch(l){Sc(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){Sc(t,o,l)}}var a=t.return;try{al(t)}catch(l){Sc(t,a,l)}break;case 5:var s=t.return;try{al(t)}catch(l){Sc(t,s,l)}}}catch(l){Sc(t,t.return,l)}if(t===e){Ji=null;break}var i=t.sibling;if(null!==i){i.return=t.return,Ji=i;break}Ji=t.return}}var xl,Sl=Math.ceil,Tl=w.ReactCurrentDispatcher,Rl=w.ReactCurrentOwner,Cl=w.ReactCurrentBatchConfig,Nl=0,Ol=null,Al=null,Ll=0,Il=0,Pl=So(0),jl=0,Ml=null,Dl=0,Fl=0,Ul=0,Bl=null,zl=null,$l=0,Gl=1/0,Hl=null,ql=!1,Vl=null,Ql=null,Zl=!1,Wl=null,Yl=0,Xl=0,Kl=null,Jl=-1,ec=0;function tc(){return 0!=(6&Nl)?Xe():-1!==Jl?Jl:Jl=Xe()}function nc(e){return 0==(1&e.mode)?1:0!=(2&Nl)&&0!==Ll?Ll&-Ll:null!==ga.transition?(0===ec&&(ec=ht()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function rc(e,t,n,r){if(50<Xl)throw Xl=0,Kl=null,Error(a(185));bt(e,n,r),0!=(2&Nl)&&e===Ol||(e===Ol&&(0==(2&Nl)&&(Fl|=n),4===jl&&lc(e,Ll)),oc(e,r),1===n&&0===Nl&&0==(1&t.mode)&&(Gl=Xe()+500,Bo&&Go()))}function oc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var s=31-st(a),i=1<<s,l=o[s];-1===l?0!=(i&n)&&0==(i&r)||(o[s]=ft(i,t)):l<=t&&(e.expiredLanes|=i),a&=~i}}(e,t);var r=pt(e,e===Ol?Ll:0);if(0===r)null!==n&&Ze(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ze(n),1===t)0===e.tag?function(e){Bo=!0,$o(e)}(cc.bind(null,e)):$o(cc.bind(null,e)),so((function(){0==(6&Nl)&&Go()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Oc(n,ac.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ac(e,t){if(Jl=-1,ec=0,0!=(6&Nl))throw Error(a(327));var n=e.callbackNode;if(Ec()&&e.callbackNode!==n)return null;var r=pt(e,e===Ol?Ll:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var o=Nl;Nl|=2;var s=hc();for(Ol===e&&Ll===t||(Hl=null,Gl=Xe()+500,fc(e,t));;)try{vc();break}catch(l){mc(e,l)}ka(),Tl.current=s,Nl=o,null!==Al?t=0:(Ol=null,Ll=0,t=jl)}if(0!==t){if(2===t&&(0!==(o=mt(e))&&(r=o,t=sc(e,o))),1===t)throw n=Ml,fc(e,0),lc(e,r),oc(e,Xe()),n;if(6===t)lc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!ir(a(),o))return!1}catch(i){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bc(e,r))&&(0!==(s=mt(e))&&(r=s,t=sc(e,s))),1===t))throw n=Ml,fc(e,0),lc(e,r),oc(e,Xe()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:kc(e,zl,Hl);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=$l+500-Xe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(kc.bind(null,e,zl,Hl),t);break}kc(e,zl,Hl);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var i=31-st(r);s=1<<i,(i=t[i])>o&&(o=i),r&=~s}if(r=o,10<(r=(120>(r=Xe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Sl(r/1960))-r)){e.timeoutHandle=ro(kc.bind(null,e,zl,Hl),r);break}kc(e,zl,Hl);break;default:throw Error(a(329))}}}return oc(e,Xe()),e.callbackNode===n?ac.bind(null,e):null}function sc(e,t){var n=Bl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=zl,zl=n,null!==t&&ic(t)),e}function ic(e){null===zl?zl=e:zl.push.apply(zl,e)}function lc(e,t){for(t&=~Ul,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-st(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&Nl))throw Error(a(327));Ec();var t=pt(e,0);if(0==(1&t))return oc(e,Xe()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=sc(e,r))}if(1===n)throw n=Ml,fc(e,0),lc(e,t),oc(e,Xe()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,zl,Hl),oc(e,Xe()),null}function uc(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Gl=Xe()+500,Bo&&Go())}}function dc(e){null!==Wl&&0===Wl.tag&&0==(6&Nl)&&Ec();var t=Nl;Nl|=1;var n=Cl.transition,r=vt;try{if(Cl.transition=null,vt=1,e)return e()}finally{vt=r,Cl.transition=n,0==(6&(Nl=t))&&Go()}}function pc(){Il=Pl.current,To(Pl)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Al)for(n=Al.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Po();break;case 3:as(),To(Oo),To(No),ds();break;case 5:is(r);break;case 4:as();break;case 13:case 19:To(ls);break;case 10:Ea(r.type._context);break;case 22:case 23:pc()}n=n.return}if(Ol=e,Al=e=Pc(e.current,null),Ll=Il=t,jl=0,Ml=null,Ul=Fl=Dl=0,zl=Bl=null,null!==Ra){for(t=0;t<Ra.length;t++)if(null!==(r=(n=Ra[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var s=a.next;a.next=o,r.next=s}n.pending=r}Ra=null}return e}function mc(e,t){for(;;){var n=Al;try{if(ka(),ps.current=si,ys){for(var r=hs.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ys=!1}if(ms=0,bs=gs=hs=null,vs=!1,ws=0,Rl.current=null,null===n||null===n.return){jl=1,Ml=t,Al=null;break}e:{var s=e,i=n.return,l=n,c=t;if(t=Ll,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=bi(i);if(null!==m){m.flags&=-257,yi(m,i,l,0,t),1&m.mode&&gi(s,u,t),c=u;var h=(t=m).updateQueue;if(null===h){var g=new Set;g.add(c),t.updateQueue=g}else h.add(c);break e}if(0==(1&t)){gi(s,u,t),gc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=bi(i);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),yi(b,i,l,0,t),ha(ui(c,l));break e}}s=c=ui(c,l),4!==jl&&(jl=2),null===Bl?Bl=[s]:Bl.push(s),s=i;do{switch(s.tag){case 3:s.flags|=65536,t&=-t,s.lanes|=t,Da(s,mi(0,c,t));break e;case 1:l=c;var y=s.type,v=s.stateNode;if(0==(128&s.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Ql||!Ql.has(v)))){s.flags|=65536,t&=-t,s.lanes|=t,Da(s,hi(s,l,t));break e}}s=s.return}while(null!==s)}_c(n)}catch(w){t=w,Al===n&&null!==n&&(Al=n=n.return);continue}break}}function hc(){var e=Tl.current;return Tl.current=si,null===e?si:e}function gc(){0!==jl&&3!==jl&&2!==jl||(jl=4),null===Ol||0==(268435455&Dl)&&0==(268435455&Fl)||lc(Ol,Ll)}function bc(e,t){var n=Nl;Nl|=2;var r=hc();for(Ol===e&&Ll===t||(Hl=null,fc(e,t));;)try{yc();break}catch(o){mc(e,o)}if(ka(),Nl=n,Tl.current=r,null!==Al)throw Error(a(261));return Ol=null,Ll=0,jl}function yc(){for(;null!==Al;)wc(Al)}function vc(){for(;null!==Al&&!We();)wc(Al)}function wc(e){var t=xl(e.alternate,e,Il);e.memoizedProps=e.pendingProps,null===t?_c(e):Al=t,Rl.current=null}function _c(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Zi(n,t,Il)))return void(Al=n)}else{if(null!==(n=Wi(n,t)))return n.flags&=32767,void(Al=n);if(null===e)return jl=6,void(Al=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Al=t);Al=t=e}while(null!==t);0===jl&&(jl=5)}function kc(e,t,n){var r=vt,o=Cl.transition;try{Cl.transition=null,vt=1,function(e,t,n,r){do{Ec()}while(null!==Wl);if(0!=(6&Nl))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var s=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-st(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,s),e===Ol&&(Al=Ol=null,Ll=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Zl||(Zl=!0,Oc(tt,(function(){return Ec(),null}))),s=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||s){s=Cl.transition,Cl.transition=null;var i=vt;vt=1;var l=Nl;Nl|=4,Rl.current=null,function(e,t){if(eo=Ht,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,s=r.focusNode;r=r.focusOffset;try{n.nodeType,s.nodeType}catch(_){n=null;break e}var i=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(l=i+o),p!==s||0!==r&&3!==p.nodeType||(c=i+r),3===p.nodeType&&(i+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=i),f===s&&++d===r&&(c=i),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Ht=!1,Ji=t;null!==Ji;)if(e=(t=Ji).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Ji=e;else for(;null!==Ji;){t=Ji;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,b=h.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?g:ba(t.type,g),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(_){Sc(t,t.return,_)}if(null!==(e=t.sibling)){e.return=t.return,Ji=e;break}Ji=t.return}h=nl,nl=!1}(e,n),bl(n,e),mr(to),Ht=!!eo,to=eo=null,e.current=n,vl(n,e,o),Ye(),Nl=l,vt=i,Cl.transition=s}else e.current=n;if(Zl&&(Zl=!1,Wl=e,Yl=o),s=e.pendingLanes,0===s&&(Ql=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),oc(e,Xe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(ql)throw ql=!1,e=Vl,Vl=null,e;0!=(1&Yl)&&0!==e.tag&&Ec(),s=e.pendingLanes,0!=(1&s)?e===Kl?Xl++:(Xl=0,Kl=e):Xl=0,Go()}(e,t,n,r)}finally{Cl.transition=o,vt=r}return null}function Ec(){if(null!==Wl){var e=wt(Yl),t=Cl.transition,n=vt;try{if(Cl.transition=null,vt=16>e?16:e,null===Wl)var r=!1;else{if(e=Wl,Wl=null,Yl=0,0!=(6&Nl))throw Error(a(331));var o=Nl;for(Nl|=4,Ji=e.current;null!==Ji;){var s=Ji,i=s.child;if(0!=(16&Ji.flags)){var l=s.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Ji=u;null!==Ji;){var d=Ji;switch(d.tag){case 0:case 11:case 15:rl(8,d,s)}var p=d.child;if(null!==p)p.return=d,Ji=p;else for(;null!==Ji;){var f=(d=Ji).sibling,m=d.return;if(sl(d),d===u){Ji=null;break}if(null!==f){f.return=m,Ji=f;break}Ji=m}}}var h=s.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Ji=s}}if(0!=(2064&s.subtreeFlags)&&null!==i)i.return=s,Ji=i;else e:for(;null!==Ji;){if(0!=(2048&(s=Ji).flags))switch(s.tag){case 0:case 11:case 15:rl(9,s,s.return)}var y=s.sibling;if(null!==y){y.return=s.return,Ji=y;break e}Ji=s.return}}var v=e.current;for(Ji=v;null!==Ji;){var w=(i=Ji).child;if(0!=(2064&i.subtreeFlags)&&null!==w)w.return=i,Ji=w;else e:for(i=v;null!==Ji;){if(0!=(2048&(l=Ji).flags))try{switch(l.tag){case 0:case 11:case 15:ol(9,l)}}catch(k){Sc(l,l.return,k)}if(l===i){Ji=null;break e}var _=l.sibling;if(null!==_){_.return=l.return,Ji=_;break e}Ji=l.return}}if(Nl=o,Go(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(k){}r=!0}return r}finally{vt=n,Cl.transition=t}}return!1}function xc(e,t,n){e=ja(e,t=mi(0,t=ui(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),oc(e,t))}function Sc(e,t,n){if(3===e.tag)xc(e,e,n);else for(;null!==t;){if(3===t.tag){xc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r))){t=ja(t,e=hi(t,e=ui(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),oc(t,e));break}}t=t.return}}function Tc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,Ol===e&&(Ll&n)===n&&(4===jl||3===jl&&(130023424&Ll)===Ll&&500>Xe()-$l?fc(e,0):Ul|=n),oc(e,t)}function Rc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=Oa(e,t))&&(bt(e,t,n),oc(e,n))}function Cc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Rc(e,n)}function Nc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Rc(e,n)}function Oc(e,t){return Qe(e,t)}function Ac(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Lc(e,t,n,r){return new Ac(e,t,n,r)}function Ic(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Pc(e,t){var n=e.alternate;return null===n?((n=Lc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function jc(e,t,n,r,o,s){var i=2;if(r=e,"function"==typeof e)Ic(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case E:return Mc(n.children,o,s,t);case x:i=8,o|=8;break;case S:return(e=Lc(12,n,t,2|o)).elementType=S,e.lanes=s,e;case N:return(e=Lc(13,n,t,o)).elementType=N,e.lanes=s,e;case O:return(e=Lc(19,n,t,o)).elementType=O,e.lanes=s,e;case I:return Dc(n,o,s,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:i=10;break e;case R:i=9;break e;case C:i=11;break e;case A:i=14;break e;case L:i=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Lc(i,n,t,o)).elementType=e,t.type=r,t.lanes=s,t}function Mc(e,t,n,r){return(e=Lc(7,e,r,t)).lanes=n,e}function Dc(e,t,n,r){return(e=Lc(22,e,r,t)).elementType=I,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Lc(6,e,null,t)).lanes=n,e}function Uc(e,t,n){return(t=Lc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function zc(e,t,n,r,o,a,s,i,l){return e=new Bc(e,t,n,i,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Lc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},La(a),e}function $c(e){if(!e)return Co;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Io(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(Io(n))return Mo(e,n,t)}return t}function Gc(e,t,n,r,o,a,s,i,l){return(e=zc(n,r,!0,e,0,a,0,i,l)).context=$c(null),n=e.current,(a=Pa(r=tc(),o=nc(n))).callback=null!=t?t:null,ja(n,a,o),e.current.lanes=o,bt(e,o,r),oc(e,r),e}function Hc(e,t,n,r){var o=t.current,a=tc(),s=nc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=Pa(a,s)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=ja(o,t,s))&&(rc(e,o,s,a),Ma(e,o,s)),s}function qc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Vc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Qc(e,t){Vc(e,t),(e=e.alternate)&&Vc(e,t)}xl=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Oo.current)wi=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return wi=!1,function(e,t,n){switch(t.tag){case 3:Oi(t),ma();break;case 5:ss(t);break;case 1:Io(t.type)&&Do(t);break;case 4:os(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;Ro(ya,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Ro(ls,1&ls.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Fi(e,t,n):(Ro(ls,1&ls.current),null!==(e=qi(e,t,n))?e.sibling:null);Ro(ls,1&ls.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Gi(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Ro(ls,ls.current),r)break;return null;case 22:case 23:return t.lanes=0,Si(e,t,n)}return qi(e,t,n)}(e,t,n);wi=0!=(131072&e.flags)}else wi=!1,aa&&0!=(1048576&t.flags)&&ea(t,Qo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Hi(e,t),e=t.pendingProps;var o=Lo(t,No.current);Sa(t,n),o=xs(null,t,r,e,o,n);var s=Ss();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Io(r)?(s=!0,Do(t)):s=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,La(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,Va(t,r,e,n),t=Ni(null,t,r,!0,s,n)):(t.tag=0,aa&&s&&ta(t),_i(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Hi(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Ic(e)?1:0;if(null!=e){if((e=e.$$typeof)===C)return 11;if(e===A)return 14}return 2}(r),e=ba(r,e),o){case 0:t=Ri(null,t,r,e,n);break e;case 1:t=Ci(null,t,r,e,n);break e;case 11:t=ki(null,t,r,e,n);break e;case 14:t=Ei(null,t,r,ba(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ri(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 1:return r=t.type,o=t.pendingProps,Ci(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 3:e:{if(Oi(t),null===e)throw Error(a(387));r=t.pendingProps,o=(s=t.memoizedState).element,Ia(e,t),Fa(t,r,null,n);var i=t.memoizedState;if(r=i.element,s.isDehydrated){if(s={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=s,t.memoizedState=s,256&t.flags){t=Ai(e,t,r,n,o=ui(Error(a(423)),t));break e}if(r!==o){t=Ai(e,t,r,n,o=ui(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,sa=null,n=Ka(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ma(),r===o){t=qi(e,t,n);break e}_i(e,t,r,n)}t=t.child}return t;case 5:return ss(t),null===e&&ua(t),r=t.type,o=t.pendingProps,s=null!==e?e.memoizedProps:null,i=o.children,no(r,o)?i=null:null!==s&&no(r,s)&&(t.flags|=32),Ti(e,t),_i(e,t,i,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Fi(e,t,n);case 4:return os(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Xa(t,null,r,n):_i(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,ki(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 7:return _i(e,t,t.pendingProps,n),t.child;case 8:case 12:return _i(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,s=t.memoizedProps,i=o.value,Ro(ya,r._currentValue),r._currentValue=i,null!==s)if(ir(s.value,i)){if(s.children===o.children&&!Oo.current){t=qi(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var l=s.dependencies;if(null!==l){i=s.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===s.tag){(c=Pa(-1,n&-n)).tag=2;var u=s.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),xa(s.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===s.tag)i=s.type===t.type?null:s.child;else if(18===s.tag){if(null===(i=s.return))throw Error(a(341));i.lanes|=n,null!==(l=i.alternate)&&(l.lanes|=n),xa(i,n,t),i=s.sibling}else i=s.child;if(null!==i)i.return=s;else for(i=s;null!==i;){if(i===t){i=null;break}if(null!==(s=i.sibling)){s.return=i.return,i=s;break}i=i.return}s=i}_i(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Sa(t,n),r=r(o=Ta(o)),t.flags|=1,_i(e,t,r,n),t.child;case 14:return o=ba(r=t.type,t.pendingProps),Ei(e,t,r,o=ba(r.type,o),n);case 15:return xi(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ba(r,o),Hi(e,t),t.tag=1,Io(r)?(e=!0,Do(t)):e=!1,Sa(t,n),Ha(t,r,o),Va(t,r,o,n),Ni(null,t,r,!0,e,n);case 19:return Gi(e,t,n);case 22:return Si(e,t,n)}throw Error(a(156,t.tag))};var Zc="function"==typeof reportError?reportError:function(e){console.error(e)};function Wc(e){this._internalRoot=e}function Yc(e){this._internalRoot=e}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Kc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var s=a;if("function"==typeof o){var i=o;o=function(){var e=qc(s);i.call(e)}}Hc(t,s,e,o)}else s=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=qc(s);a.call(e)}}var s=Gc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=s,e[ho]=s.current,$r(8===e.nodeType?e.parentNode:e),dc(),s}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var i=r;r=function(){var e=qc(l);i.call(e)}}var l=zc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[ho]=l.current,$r(8===e.nodeType?e.parentNode:e),dc((function(){Hc(t,l,n,r)})),l}(n,t,e,o,r);return qc(s)}Yc.prototype.render=Wc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Hc(e,t,null,null)},Yc.prototype.unmount=Wc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){Hc(null,e,null,null)})),t[ho]=null}},Yc.prototype.unstable_scheduleHydration=function(e){if(e){var t=xt();e={blockedOn:null,target:e,priority:t};for(var n=0;n<It.length&&0!==t&&t<It[n].priority;n++);It.splice(n,0,e),0===n&&Dt(e)}},_t=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),oc(t,Xe()),0==(6&Nl)&&(Gl=Xe()+500,Go()))}break;case 13:dc((function(){var t=Oa(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Qc(e,1)}},kt=function(e){if(13===e.tag){var t=Oa(e,134217728);if(null!==t)rc(t,e,134217728,tc());Qc(e,134217728)}},Et=function(e){if(13===e.tag){var t=nc(e),n=Oa(e,t);if(null!==n)rc(n,e,t,tc());Qc(e,t)}},xt=function(){return vt},St=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},ke=function(e,t,n){switch(t){case"input":if(K(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=ko(r);if(!o)throw Error(a(90));Q(r),K(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ce=uc,Ne=dc;var tu={usingClientEntryPoint:!1,Events:[wo,_o,ko,Te,Re,uc]},nu={findFiberByHostInstance:vo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=qe(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(ru),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Xc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Xc(e))throw Error(a(299));var n=!1,r="",o=Zc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=zc(e,1,!1,null,0,n,0,r,o),e[ho]=t.current,$r(8===e.nodeType?e.parentNode:e),new Wc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=qe(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Kc(t))throw Error(a(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Xc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,s="",i=Zc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(s=n.identifierPrefix),void 0!==n.onRecoverableError&&(i=n.onRecoverableError)),t=Gc(t,null,e,1,null!=n?n:null,o,0,s,i),e[ho]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Yc(t)},t.render=function(e,t,n){if(!Kc(t))throw Error(a(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Kc(e))throw Error(a(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ho]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Kc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},20745:(e,t,n)=>{"use strict";var r=n(73935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},73935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(64448)},69590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,s){if(e===s)return!0;if(e&&s&&"object"==typeof e&&"object"==typeof s){if(e.constructor!==s.constructor)return!1;var i,l,c,u;if(Array.isArray(e)){if((i=e.length)!=s.length)return!1;for(l=i;0!=l--;)if(!a(e[l],s[l]))return!1;return!0}if(n&&e instanceof Map&&s instanceof Map){if(e.size!==s.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!s.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],s.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&s instanceof Set){if(e.size!==s.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!s.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(s)){if((i=e.length)!=s.length)return!1;for(l=i;0!=l--;)if(e[l]!==s[l])return!1;return!0}if(e.constructor===RegExp)return e.source===s.source&&e.flags===s.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof s.valueOf)return e.valueOf()===s.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof s.toString)return e.toString()===s.toString();if((i=(c=Object.keys(e)).length)!==Object.keys(s).length)return!1;for(l=i;0!=l--;)if(!Object.prototype.hasOwnProperty.call(s,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=i;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],s[c[l]]))return!1;return!0}return e!=e&&s!=s}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>q,ql:()=>J});var r=n(67294),o=n(45697),a=n.n(o),s=n(69590),i=n.n(s),l=n(41143),c=n.n(l),u=n(96774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),_={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(_).reduce((function(e,t){return e[_[t]]=t,e}),{}),E=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},x=function(e){var t=E(e,g.TITLE),n=E(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=E(e,"defaultTitle");return t||r||void 0},S=function(e){return E(e,"onChangeClientState")||function(){}},T=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},R=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),s=0;s<a.length;s+=1){var i=a[s],l=i.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(i)||"innerHTML"!==i&&"cssText"!==i&&"itemprop"!==i||(n=i)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),s=0;s<a.length;s+=1){var i=a[s],l=p({},r[i],o[i]);r[i]=l}return e}),[]).reverse()},N=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},O=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},L=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},I=[g.NOSCRIPT,g.SCRIPT,g.STYLE],P=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},j=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[_[n]||n]=e[n],t}),t)},D=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=_[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=M(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=j(n),a=O(t);return o?"<"+e+' data-rh="true" '+o+">"+P(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+P(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return j(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+P(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",s=-1===I.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(s?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},U=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,s=e.styleTags,i=e.title,l=void 0===i?"":i,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,b),s=A(n,y);return{priorityMethods:{toComponent:function(){return[].concat(D(g.META,o.priority),D(g.LINK,a.priority),D(g.SCRIPT,s.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,s.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:s.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,u,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,p,r),style:F(g.STYLE,s,r),title:F(g.TITLE,{title:l,titleAttributes:c},r)}},B=[],z=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=U({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),G=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new z(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);q.canUseDOM=H,q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},q.defaultProps={context:{}},q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),s=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):s.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),s.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:s}},Q=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),s=Object.keys(t),i=0;i<s.length;i+=1){var l=s[i],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==s.join(",")&&n.setAttribute("data-rh",s.join(","))}},Z=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,s=e.noscriptTags,i=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;Q(g.BODY,e.bodyAttributes),Q(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=O(e)),Q(g.TITLE,t)}(u,d);var p={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,s),scriptTags:V(g.SCRIPT,l),styleTags:V(g.STYLE,c)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),i(e,f,m)},W=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:R(["href"],e),bodyAttributes:T("bodyAttributes",e),defer:E(e,"defer"),encode:E(e,"encodeSpecialCharacters"),htmlAttributes:T("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:S(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:x(e),titleAttributes:T("titleAttributes",e),prioritizeSeoTags:N(e,"prioritizeSeoTags")});q.canUseDOM?(t=a,W&&cancelAnimationFrame(W),t.defer?W=requestAnimationFrame((function(){Z(t,(function(){W=null}))})):(Z(t),W=null)):U&&(o=U(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:G.isRequired},Y.displayName="HelmetDispatcher";var X=["children"],K=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!i()(L(this.props,"helmetData"),L(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,s=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=s,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,s=h(r,X),i=Object.keys(s).reduce((function(e,t){return e[k[t]||t]=s[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:i,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:i,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,K),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof z||(a=new z(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(Y,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},69921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,s=n?Symbol.for("react.strict_mode"):60108,i=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function _(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case i:case s:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case l:return e;default:return t}}case o:return t}}}function k(e){return _(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=i,t.StrictMode=s,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||_(e)===u},t.isConcurrentMode=k,t.isContextConsumer=function(e){return _(e)===c},t.isContextProvider=function(e){return _(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return _(e)===p},t.isFragment=function(e){return _(e)===a},t.isLazy=function(e){return _(e)===g},t.isMemo=function(e){return _(e)===h},t.isPortal=function(e){return _(e)===o},t.isProfiler=function(e){return _(e)===i},t.isStrictMode=function(e){return _(e)===s},t.isSuspense=function(e){return _(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===i||e===s||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=_},59864:(e,t,n)=>{"use strict";e.exports=n(69921)},68356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(){return s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s.apply(this,arguments)}var i=n(67294),l=n(45697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return i.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=s({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return c.push(g),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var s=n.prototype;return s.UNSAFE_componentWillMount=function(){this._loadModule()},s.componentDidMount=function(){this._mounted=!0},s._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},s.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},s._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},s.render=function(){return this.state.loading||this.state.error?i.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(i.Component),a(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return i.Children.only(this.props.children)},t}(i.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}a(g,"propTypes",{report:l.func.isRequired}),a(g,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},18790:(e,t,n)=>{"use strict";n.d(t,{H:()=>i,f:()=>s});var r=n(16550),o=n(87462),a=n(67294);function s(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&s(e.routes,t,n)),o})),n}function i(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},73727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>g});var r=n(16550),o=n(75068),a=n(67294),s=n(42358),i=n(87462),l=n(63366),c=n(38776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,s.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,s.ob)(e,null,null,t):e},f=function(e){return e},m=a.forwardRef;void 0===m&&(m=f);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,s=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=s.target,u=(0,i.Z)({},s,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==m&&t||n,a.createElement("a",u)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,g=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(g,e.location),e.location),l=r?n.createHref(r):"",h=(0,i.Z)({},y,{href:l,navigate:function(){var t=d(g,e.location),r=(0,s.Ep)(e.location)===(0,s.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==m?h.ref=t||b:h.innerRef=b,a.createElement(o,h)}))})),b=function(e){return e},y=a.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,s=e.activeClassName,u=void 0===s?"active":s,f=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,_=e.sensitive,k=e.strict,E=e.style,x=e.to,S=e.innerRef,T=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,s=p(d(x,n),n),l=s.pathname,R=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=R?(0,r.LX)(n.pathname,{path:R,exact:h,sensitive:_,strict:k}):null,N=!!(v?v(C,n):C),O="function"==typeof m?m(N):m,A="function"==typeof E?E(N):E;N&&(O=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(O,u),A=(0,i.Z)({},A,f));var L=(0,i.Z)({"aria-current":N&&o||null,className:O,style:A,to:s},T);return b!==y?L.ref=t||S:L.innerRef=S,a.createElement(g,L)}))}))},16550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>O,F0:()=>v,LX:()=>N,TH:()=>U,k6:()=>F,l_:()=>S,rs:()=>M,s6:()=>y});var r=n(75068),o=n(67294),a=n(45697),s=n.n(a),i=n(42358),l=n(38776),c=n(87462),u=n(14779),d=n.n(u),p=(n(59864),n(63366)),f=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,i="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),s=0;s<o;s++)a[s]=arguments[s];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(s=o)?0!==a||1/a==1/s:a!=a&&s!=s)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,s},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[i]=s().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},o.getValue=function(){return this.context[i]?this.context[i].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[i]=s().object,a),{Provider:l,Consumer:c}},g=function(e){var t=h();return t.displayName=e,t},b=g("Router-History"),y=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;var w=function(e){function t(){return e.apply(this,arguments)||this}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.props.onMount&&this.props.onMount.call(this,this)},n.componentDidUpdate=function(e){this.props.onUpdate&&this.props.onUpdate.call(this,this,e)},n.componentWillUnmount=function(){this.props.onUnmount&&this.props.onUnmount.call(this,this)},n.render=function(){return null},t}(o.Component);var _={},k=1e4,E=0;function x(e,t){return void 0===e&&(e="/"),void 0===t&&(t={}),"/"===e?e:function(e){if(_[e])return _[e];var t=d().compile(e);return E<k&&(_[e]=t,E++),t}(e)(t,{pretty:!0})}function S(e){var t=e.computedMatch,n=e.to,r=e.push,a=void 0!==r&&r;return o.createElement(y.Consumer,null,(function(e){e||(0,l.Z)(!1);var r=e.history,s=e.staticContext,u=a?r.push:r.replace,d=(0,i.ob)(t?"string"==typeof n?x(n,t.params):(0,c.Z)({},n,{pathname:x(n.pathname,t.params)}):n);return s?(u(d),null):o.createElement(w,{onMount:function(){u(d)},onUpdate:function(e,t){var n=(0,i.ob)(t.to);(0,i.Hp)(n,(0,c.Z)({},d,{key:n.key}))||u(d)},to:n})}))}var T={},R=1e4,C=0;function N(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,s=n.strict,i=void 0!==s&&s,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=T[n]||(T[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return C<R&&(r[e]=a,C++),a}(n,{end:a,strict:i,sensitive:c}),o=r.regexp,s=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:s.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var O=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?N(n.pathname,e.props):t.match,a=(0,c.Z)({},t,{location:n,match:r}),s=e.props,i=s.children,u=s.component,d=s.render;return Array.isArray(i)&&function(e){return 0===o.Children.count(e)}(i)&&(i=null),o.createElement(y.Provider,{value:a},a.match?i?"function"==typeof i?i(a):i:u?o.createElement(u,a):d?d(a):null:"function"==typeof i?i(a):null)}))},t}(o.Component);function A(e){return"/"===e.charAt(0)?e:"/"+e}function L(e,t){if(!e)return t;var n=A(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function I(e){return"string"==typeof e?e:(0,i.Ep)(e)}function P(e){return function(){(0,l.Z)(!1)}}function j(){}o.Component;var M=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var s=e.props.path||e.props.from;r=s?N(a.pathname,(0,c.Z)({},e.props,{path:s})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var D=o.useContext;function F(){return D(b)}function U(){return D(y).location}},75251:(e,t,n)=>{"use strict";var r=n(67294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,i=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)s.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:i.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},72408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,h(w,b.prototype),w.isPureReactComponent=!0;var _=Array.isArray,k=Object.prototype.hasOwnProperty,E={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,r){var o,a={},s=null,i=null;if(null!=t)for(o in void 0!==t.ref&&(i=t.ref),void 0!==t.key&&(s=""+t.key),t)k.call(t,o)&&!x.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:s,ref:i,props:a,_owner:E.current}}function T(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var R=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function N(e,t,o,a,s){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var l=!1;if(null===e)l=!0;else switch(i){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return s=s(l=e),e=""===a?"."+C(l,0):a,_(s)?(o="",null!=e&&(o=e.replace(R,"$&/")+"/"),N(s,t,o,"",(function(e){return e}))):null!=s&&(T(s)&&(s=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(s,o+(!s.key||l&&l.key===s.key?"":(""+s.key).replace(R,"$&/")+"/")+e)),t.push(s)),1;if(l=0,a=""===a?".":a+":",_(e))for(var c=0;c<e.length;c++){var u=a+C(i=e[c],c);l+=N(i,t,o,u,s)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(i=e.next()).done;)l+=N(i=i.value,t,o,u=a+C(i,c++),s);else if("object"===i)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function O(e,t,n){if(null==e)return e;var r=[],o=0;return N(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function A(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var L={current:null},I={transition:null},P={ReactCurrentDispatcher:L,ReactCurrentBatchConfig:I,ReactCurrentOwner:E};t.Children={map:O,forEach:function(e,t,n){O(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return O(e,(function(){t++})),t},toArray:function(e){return O(e,(function(e){return e}))||[]},only:function(e){if(!T(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=s,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=P,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,s=e.ref,i=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,i=E.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)k.call(t,c)&&!x.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:s,props:o,_owner:i}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=T,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=I.transition;I.transition={};try{e()}finally{I.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return L.current.useCallback(e,t)},t.useContext=function(e){return L.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return L.current.useDeferredValue(e)},t.useEffect=function(e,t){return L.current.useEffect(e,t)},t.useId=function(){return L.current.useId()},t.useImperativeHandle=function(e,t,n){return L.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return L.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return L.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return L.current.useMemo(e,t)},t.useReducer=function(e,t,n){return L.current.useReducer(e,t,n)},t.useRef=function(e){return L.current.useRef(e)},t.useState=function(e){return L.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return L.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return L.current.useTransition()},t.version="18.2.0"},67294:(e,t,n)=>{"use strict";e.exports=n(72408)},85893:(e,t,n)=>{"use strict";e.exports=n(75251)},60053:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,s=o>>>1;r<s;){var i=2*(r+1)-1,l=e[i],c=i+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[i]=n,r=i);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var s=performance;t.unstable_now=function(){return s.now()}}else{var i=Date,l=i.now();t.unstable_now=function(){return i.now()-l}}var c=[],u=[],d=1,p=null,f=3,m=!1,h=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function _(e){if(g=!1,w(e),!h)if(null!==r(c))h=!0,I(k);else{var t=r(u);null!==t&&P(_,t.startTime-e)}}function k(e,n){h=!1,g&&(g=!1,y(T),T=-1),m=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!N());){var s=p.callback;if("function"==typeof s){p.callback=null,f=p.priorityLevel;var i=s(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof i?p.callback=i:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&P(_,d.startTime-n),l=!1}return l}finally{p=null,f=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var E,x=!1,S=null,T=-1,R=5,C=-1;function N(){return!(t.unstable_now()-C<R)}function O(){if(null!==S){var e=t.unstable_now();C=e;var n=!0;try{n=S(!0,e)}finally{n?E():(x=!1,S=null)}}else x=!1}if("function"==typeof v)E=function(){v(O)};else if("undefined"!=typeof MessageChannel){var A=new MessageChannel,L=A.port2;A.port1.onmessage=O,E=function(){L.postMessage(null)}}else E=function(){b(O,0)};function I(e){S=e,x||(x=!0,E())}function P(e,n){T=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,I(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):R=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var s=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?s+a:s:a=s,e){case 1:var i=-1;break;case 2:i=250;break;case 5:i=1073741823;break;case 4:i=1e4;break;default:i=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:i=a+i,sortIndex:-1},a>s?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(y(T),T=-1):g=!0,P(_,a-s))):(e.sortIndex=i,n(c,e),h||m||(h=!0,I(k))),e},t.unstable_shouldYield=N,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},63840:(e,t,n)=>{"use strict";e.exports=n(60053)},96774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),s=Object.keys(t);if(a.length!==s.length)return!1;for(var i=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!i(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},36809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"eCalc\u2122 Docs",tagline:"Documentation for eCalc\u2122",url:"https://equinor.github.io",baseUrl:"/ecalc/",onBrokenLinks:"throw",onBrokenAnchors:"throw",onBrokenMarkdownLinks:"throw",onDuplicateRoutes:"throw",favicon:"img/favicon.svg",organizationName:"equinor",projectName:"ecalc",deploymentBranch:"gh-pages",markdown:{mermaid:!0,format:"mdx",mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}},i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{sidebarPath:"./sidebars.js",editUrl:"https://github.com/equinor/ecalc/tree/main/documentation/",remarkPlugins:[null],rehypePlugins:[null]},blog:!1,theme:{customCss:"/home/runner/work/ecalc/ecalc/docs/src/css/custom.css"}}]],themeConfig:{navbar:{title:"",logo:{alt:"eCalc Logo",src:"img/logo.svg",href:"/"},items:[{type:"docSidebar",sidebarId:"about",position:"left",label:"Docs"},{type:"docSidebar",sidebarId:"contribute",position:"left",label:"Contribute"},{type:"docSidebar",sidebarId:"changelog",position:"left",label:"Changelog"},{href:"https://github.com/equinor/ecalc",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"More",items:[{label:"GitHub",href:"https://github.com/equinor/ecalc"}]}],copyright:"eCalc\u2122 Copyright \xa9 2024 Equinor ASA. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}},{className:"code-block-old-line",line:"This is old",block:{start:"highlight-old-start",end:"highlight-old-end"}},{className:"code-block-new-line",line:"This is new",block:{start:"highlight-new-start",end:"highlight-new-end"}}],additionalLanguages:[]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3},mermaid:{theme:{dark:"dark",light:"default"},options:{}}},stylesheets:[{href:"/ecalc/katex/katex.min.css",type:"text/css"}],themes:["@docusaurus/theme-mermaid",[null,{hashed:!0,explicitSearchResultPath:!0}]],baseUrlIssueBanner:!0,staticDirectories:["static"],customFields:{},plugins:[],scripts:[],headTags:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},87462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},75068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},63366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},90512:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},42573:(e,t,n)=>{"use strict";n.d(t,{p1:()=>R,y$:()=>ee});var r,o,a,s,i,l,c,u=n(67294),d=n(90512),p=Object.create,f=Object.defineProperty,m=Object.defineProperties,h=Object.getOwnPropertyDescriptor,g=Object.getOwnPropertyDescriptors,b=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,E=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&k(e,n,t[n]);if(y)for(var n of y(t))_.call(t,n)&&k(e,n,t[n]);return e},x=(e,t)=>m(e,g(t)),S=(e,t)=>{var n={};for(var r in e)w.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&y)for(var r of y(e))t.indexOf(r)<0&&_.call(e,r)&&(n[r]=e[r]);return n},T=(r={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var s in o={},n[a]=o,t)t.hasOwnProperty(s)&&(o[s]=e(t[s],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],s={};for(var i in a)if(a.hasOwnProperty(i)){if(i==t)for(var l in n)n.hasOwnProperty(l)&&(s[l]=n[l]);n.hasOwnProperty(i)||(s[i]=a[i])}var c=o[e];return o[e]=s,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=s)})),s},DFS:function e(t,n,o,a){a=a||{};var s=r.util.objId;for(var i in t)if(t.hasOwnProperty(i)){n.call(t,i,t[i],o||i);var l=t[i],c=r.util.type(l);"Object"!==c||a[s(l)]?"Array"!==c||a[s(l)]||(a[s(l)]=!0,e(l,n,i,a)):(a[s(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new i;return l(o,o.head,e),s(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function s(e,t,n,i,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var h=f[m],g=h.inside,b=!!h.lookbehind,y=!!h.greedy,v=h.alias;if(y&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var _=h.pattern||h,k=i.next,E=u;k!==t.tail&&!(d&&E>=d.reach);E+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof o)){var S,T=1;if(y){if(!(S=a(_,E,e,b))||S.index>=e.length)break;var R=S.index,C=S.index+S[0].length,N=E;for(N+=k.value.length;R>=N;)N+=(k=k.next).value.length;if(E=N-=k.value.length,k.value instanceof o)continue;for(var O=k;O!==t.tail&&(N<C||"string"==typeof O.value);O=O.next)T++,N+=O.value.length;T--,x=e.slice(E,N),S.index-=E}else if(!(S=a(_,0,x,b)))continue;R=S.index;var A=S[0],L=x.slice(0,R),I=x.slice(R+A.length),P=E+x.length;d&&P>d.reach&&(d.reach=P);var j=k.prev;if(L&&(j=l(t,j,L),E+=L.length),c(t,j,T),k=l(t,j,new o(p,g?r.tokenize(A,g):A,v,A)),I&&l(t,k,I),T>1){var M={cause:p+","+m,reach:P};s(e,t,n,k.prev,E,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function i(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},s=t.alias;s&&(Array.isArray(s)?Array.prototype.push.apply(a.classes,s):a.classes.push(s)),r.hooks.run("wrap",a);var i="";for(var l in a.attributes)i+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+i+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return o||(0,r[b(r)[0]])((o={exports:{}}).exports,o),o.exports}),R=((e,t,n)=>(n=null!=e?p(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of b(t))w.call(e,o)||o===n||f(e,o,{get:()=>t[o],enumerable:!(r=h(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:f(n,"default",{value:e,enumerable:!0}),e)))(T());R.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},R.languages.markup.tag.inside["attr-value"].inside.entity=R.languages.markup.entity,R.languages.markup.doctype.inside["internal-subset"].inside=R.languages.markup,R.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(R.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:R.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:R.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},R.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(R.languages.markup.tag,"addAttribute",{value:function(e,t){R.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:R.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),R.languages.html=R.languages.markup,R.languages.mathml=R.languages.markup,R.languages.svg=R.languages.markup,R.languages.xml=R.languages.extend("markup",{}),R.languages.ssml=R.languages.xml,R.languages.atom=R.languages.xml,R.languages.rss=R.languages.xml,a=R,s={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},l="(?:[^\\\\-]|"+(i=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/).source+")",l=RegExp(l+"-"+l),c={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},a.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:l,inside:{escape:i,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":s,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:i}},"special-escape":s,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":c}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:i,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":c}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},R.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},R.languages.javascript=R.languages.extend("clike",{"class-name":[R.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),R.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,R.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:R.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:R.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:R.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:R.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:R.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),R.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:R.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),R.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),R.languages.markup&&(R.languages.markup.tag.addInlined("script","javascript"),R.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),R.languages.js=R.languages.javascript,R.languages.actionscript=R.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),R.languages.actionscript["class-name"].alias="function",delete R.languages.actionscript.parameter,delete R.languages.actionscript["literal-property"],R.languages.markup&&R.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:R.languages.markup}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(R),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,s=a[o];if((s=s||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(s=a[o]={pattern:s}),Array.isArray(s))for(var i=0,l=s.length;i<l;i++)s[i]instanceof RegExp&&(s[i]={pattern:s[i]}),r(s[i]);else r(s)}}))}}),t.addSupport(["java","javascript","php"],t)}(R),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(R),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(R),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function s(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:s(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:s(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:s(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:s(a),lookbehind:!0,greedy:!0},number:{pattern:s(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(R),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,s=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(s,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):i[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),i={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(R),R.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:R.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},R.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var s=u(0);"variable"===s.type&&(f(s,"variable-input"),o.push(s.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var i=p(/^\{$/,/^\}$/);if(-1!==i)for(var l=n;l<i;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var s=t[a],i=s.content;if("punctuation"===s.type&&"string"==typeof i)if(e.test(i))o++;else if(r.test(i)&&0==--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),R.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function s(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function i(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,s){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=i(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+s.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,s),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var s,l,p,f,m,h,g,b=n[a];"string"==typeof b||"string"==typeof b.content?(s=d[c],-1!==(g=(h="string"==typeof b?b:b.content).indexOf(s))&&(++c,l=h.substring(0,g),m=u[s],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(m,f)).length&&((p=[1,1]).push.apply(p,i(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,m),f=h.substring(g+s.length),m=[],l&&m.push(l),m.push(p),f&&(t(h=[f]),m.push.apply(m,h)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(m)),a+=m.length-1):b.content=m)):(g=b.content,Array.isArray(g)?t(g):t([g]))}}(l),new e.Token(s,l,"language-"+s,t)}e.languages.javascript["template-string"]=[s("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),s("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),s("svg",/\bsvg/.source),s("markdown",/\b(?:markdown|md)/.source),s("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),s("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,s,i,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(s=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,i=e.languages[c])&&(a[1]=l(s,i,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(R),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(R),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(R),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(R),R.languages.n4js=R.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),R.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),R.languages.n4jsd=R.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(R),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function s(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=i(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=i(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=i(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&s(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(R),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(R),R.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},R.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=R.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(R),R.languages.c=R.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),R.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),R.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},R.languages.c.string],char:R.languages.c.char,comment:R.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:R.languages.c}}}}),R.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete R.languages.c.boolean,R.languages.objectivec=R.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete R.languages.objectivec["class-name"],R.languages.objc=R.languages.objectivec,R.languages.reason=R.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),R.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete R.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(R),R.languages.go=R.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),R.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete R.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(R),R.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},R.languages.python["string-interpolation"].inside.interpolation.inside.rest=R.languages.python,R.languages.py=R.languages.python;((e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>C,duotoneDark:()=>N,duotoneLight:()=>O,github:()=>A,jettwaveDark:()=>H,jettwaveLight:()=>q,nightOwl:()=>L,nightOwlLight:()=>I,oceanicNext:()=>M,okaidia:()=>D,oneDark:()=>V,oneLight:()=>Q,palenight:()=>F,shadesOfPurple:()=>U,synthwave84:()=>B,ultramin:()=>z,vsDark:()=>$,vsLight:()=>G});var C={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},N={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},O={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},A={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},L={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},I={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},P="#c5a5c5",j="#8dc891",M={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:P}},{types:["attr-value"],style:{color:j}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:j}},{types:["punctuation"],style:{color:j}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:P}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},D={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},F={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},U={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},z={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},G={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},H={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},q={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},Q={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},Z=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=E(E({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=x(E({},n),{backgroundColor:void 0}),r},W=/\r\n|\r|\n/,Y=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},X=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},K=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,s=0,i=[];const l=[i];for(;s>-1;){for(;(a=r[s]++)<o[s];){let e,c=t[s];const u=n[s][a];if("string"==typeof u?(c=s>0?c:["plain"],e=u):(c=X(c,u.type),u.alias&&(c=X(c,u.alias)),e=u.content),"string"!=typeof e){s++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(W),p=d.length;i.push({types:c,content:d[0]});for(let t=1;t<p;t++)Y(i),l.push(i=[]),i.push({types:c,content:d[t]})}s--,t.pop(),n.pop(),r.pop(),o.pop()}return Y(i),l},J=({children:e,language:t,code:n,theme:r,prism:o})=>{const a=t.toLowerCase(),s=((e,t)=>{const[n,r]=(0,u.useState)(Z(t,e)),o=(0,u.useRef)(),a=(0,u.useRef)();return(0,u.useEffect)((()=>{t===o.current&&e===a.current||(o.current=t,a.current=e,r(Z(t,e)))}),[e,t]),n})(a,r),i=(e=>(0,u.useCallback)((t=>{var n=t,{className:r,style:o,line:a}=n,s=S(n,["className","style","line"]);const i=x(E({},s),{className:(0,d.Z)("token-line",r)});return"object"==typeof e&&"plain"in e&&(i.style=e.plain),"object"==typeof o&&(i.style=E(E({},i.style||{}),o)),i}),[e]))(s),l=(e=>{const t=(0,u.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,u.useCallback)((e=>{var n=e,{token:r,className:o,style:a}=n,s=S(n,["token","className","style"]);const i=x(E({},s),{className:(0,d.Z)("token",...r.types,o),children:r.content,style:t(r)});return null!=a&&(i.style=E(E({},i.style||{}),a)),i}),[t])})(s),c=(({prism:e,code:t,grammar:n,language:r})=>{const o=(0,u.useRef)(e);return(0,u.useMemo)((()=>{if(null==n)return K([t]);const e={code:t,grammar:n,language:r,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,n),o.current.hooks.run("after-tokenize",e),K(e.tokens)}),[t,n,r])})({prism:o,language:a,code:n,grammar:o.languages[a]});return e({tokens:c,className:`prism-code language-${a}`,style:null!=s?s.root:{},getLineProps:i,getTokenProps:l})},ee=e=>(0,u.createElement)(J,x(E({},e),{prism:e.prism||R,theme:e.theme||$,code:e.code,language:e.language}))},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/ecalc/search-bdd":{"__comp":"1a4e3797","__context":{"plugin":"b2781c74"}},"/ecalc/versions-284":{"__comp":"fa17a3e5","__context":{"plugin":"f85d2ba9"},"config":"5e9f5e1a"},"/ecalc/docs-cad":{"__comp":"5e95c892","__context":{"plugin":"977fea76"}},"/ecalc/docs-a95":{"__comp":"a7bd4aaa","version":"935f2afb"},"/ecalc/docs/tags-909":{"__comp":"3720c009","tags":"55960ee5"},"/ecalc/docs/tags/e-calc-b17":{"__comp":"df203c0f","tag":"b8c59810"},"/ecalc/docs/tags/release-816":{"__comp":"df203c0f","tag":"41d1792a"},"/ecalc/docs-261":{"__comp":"a94703ab"},"/ecalc/docs/about/-a31":{"__comp":"17896441","content":"1f60d0d4"},"/ecalc/docs/about/getting_started/-123":{"__comp":"17896441","content":"1c663d3d"},"/ecalc/docs/about/getting_started/cli/-d3b":{"__comp":"17896441","content":"dfbab2f3"},"/ecalc/docs/about/getting_started/cli/faq-97e":{"__comp":"17896441","content":"496ed8d5"},"/ecalc/docs/about/getting_started/library/-d50":{"__comp":"17896441","content":"0425b884"},"/ecalc/docs/about/getting_started/yaml/-cec":{"__comp":"17896441","content":"e1df8231"},"/ecalc/docs/about/migration_guides/-b3e":{"__comp":"17896441","content":"40d6382c"},"/ecalc/docs/about/migration_guides/v7_to_v8-313":{"__comp":"17896441","content":"7557b935"},"/ecalc/docs/about/migration_guides/v8_to_v81-7ca":{"__comp":"17896441","content":"4aa4fc36"},"/ecalc/docs/about/migration_guides/v8-1_to_v8-2-14c":{"__comp":"17896441","content":"5c08a402"},"/ecalc/docs/about/migration_guides/v8-2_to_v8-3-273":{"__comp":"17896441","content":"af105519"},"/ecalc/docs/about/migration_guides/v8-3_to_v8-4-115":{"__comp":"17896441","content":"721cfe60"},"/ecalc/docs/about/migration_guides/v8-5_to_v8-6-163":{"__comp":"17896441","content":"81dd00c5"},"/ecalc/docs/about/migration_guides/v8-6_to_v8-7-e5f":{"__comp":"17896441","content":"63ecd22d"},"/ecalc/docs/about/migration_guides/v8.7_to_v8.8-3cf":{"__comp":"17896441","content":"ebdd570f"},"/ecalc/docs/about/miscellaneous/-b76":{"__comp":"17896441","content":"a5dcc804"},"/ecalc/docs/about/modelling/-d6a":{"__comp":"17896441","content":"bb45b332"},"/ecalc/docs/about/modelling/examples/-e7e":{"__comp":"17896441","content":"0fd76486"},"/ecalc/docs/about/modelling/examples/advanced-362":{"__comp":"17896441","content":"2781f0ad"},"/ecalc/docs/about/modelling/examples/drogon-966":{"__comp":"17896441","content":"f54e894e"},"/ecalc/docs/about/modelling/examples/simple-257":{"__comp":"17896441","content":"7cebed78"},"/ecalc/docs/about/modelling/setup/-dff":{"__comp":"17896441","content":"e8ebc025"},"/ecalc/docs/about/modelling/setup/facility_inputs/-1cc":{"__comp":"17896441","content":"43a1031a"},"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling-f62":{"__comp":"17896441","content":"fa3d98bd"},"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/-592":{"__comp":"17896441","content":"43a26e71"},"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts-2c2":{"__comp":"17896441","content":"00bdc23f"},"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model-04c":{"__comp":"17896441","content":"7e6991bb"},"/ecalc/docs/about/modelling/setup/facility_inputs/tabular-542":{"__comp":"17896441","content":"66286265"},"/ecalc/docs/about/modelling/setup/file_format_and_syntax/-0e3":{"__comp":"17896441","content":"e9e63826"},"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions-d12":{"__comp":"17896441","content":"8961bfac"},"/ecalc/docs/about/modelling/setup/fuel_types-620":{"__comp":"17896441","content":"498bfcff"},"/ecalc/docs/about/modelling/setup/installations/-99b":{"__comp":"17896441","content":"7db788f5"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/-9b9":{"__comp":"17896441","content":"ad129716"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor-c00":{"__comp":"17896441","content":"fa0b6059"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system-0e8":{"__comp":"17896441","content":"6adcc868"},"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures-65b":{"__comp":"17896441","content":"69fd9be6"},"/ecalc/docs/about/modelling/setup/installations/direct_consumers-d56":{"__comp":"17896441","content":"d5cd246e"},"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations-f2a":{"__comp":"17896441","content":"edb3a98b"},"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations-2f5":{"__comp":"17896441","content":"fe44757f"},"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations-d10":{"__comp":"17896441","content":"5e10e9e1"},"/ecalc/docs/about/modelling/setup/models/-15b":{"__comp":"17896441","content":"a2e97e20"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/-c1c":{"__comp":"17896441","content":"5c8ec56d"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/-5eb":{"__comp":"17896441","content":"f577f5c2"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/-b0e":{"__comp":"17896441","content":"9e136365"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model-f09":{"__comp":"17896441","content":"33498b04"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model-e08":{"__comp":"17896441","content":"163041ea"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model-de2":{"__comp":"17896441","content":"2ce3b5da"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures-2fb":{"__comp":"17896441","content":"4b80f681"},"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/-fb2":{"__comp":"17896441","content":"9e91bf8d"},"/ecalc/docs/about/modelling/setup/models/fluid_model-849":{"__comp":"17896441","content":"4b5a01f9"},"/ecalc/docs/about/modelling/setup/models/turbine_modeling-0f3":{"__comp":"17896441","content":"841adc37"},"/ecalc/docs/about/modelling/setup/time_series-b2a":{"__comp":"17896441","content":"f52ed7e3"},"/ecalc/docs/about/modelling/setup/variables-5f7":{"__comp":"17896441","content":"9a118db7"},"/ecalc/docs/about/modelling/theory/-6a0":{"__comp":"17896441","content":"f054b415"},"/ecalc/docs/about/modelling/theory/compressor_modelling-0df":{"__comp":"17896441","content":"38d592cf"},"/ecalc/docs/about/modelling/theory/pump_modelling-c3a":{"__comp":"17896441","content":"3409ab5c"},"/ecalc/docs/about/modelling/workflow/-9a1":{"__comp":"17896441","content":"7b02141e"},"/ecalc/docs/about/modelling/workflow/generic_workflow-b21":{"__comp":"17896441","content":"2cedaf2f"},"/ecalc/docs/about/references/-5da":{"__comp":"17896441","content":"4ee97ba8"},"/ecalc/docs/about/references/api/-225":{"__comp":"17896441","content":"d2eeb42a"},"/ecalc/docs/about/references/cli_reference-b63":{"__comp":"17896441","content":"c3d1f0cd"},"/ecalc/docs/about/references/keywords/-424":{"__comp":"17896441","content":"f571fee5"},"/ecalc/docs/about/references/keywords/ADJUSTMENT-382":{"__comp":"17896441","content":"17e50ecd"},"/ecalc/docs/about/references/keywords/CATEGORY-de9":{"__comp":"17896441","content":"b2b17913"},"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL-8c1":{"__comp":"17896441","content":"d77448ee"},"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM-8f7":{"__comp":"17896441","content":"c9b29382"},"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL-9b6":{"__comp":"17896441","content":"cc88a418"},"/ecalc/docs/about/references/keywords/CONDITION-b74":{"__comp":"17896441","content":"00440000"},"/ecalc/docs/about/references/keywords/CONDITIONS-ea9":{"__comp":"17896441","content":"e7fdd821"},"/ecalc/docs/about/references/keywords/CONSTANT-677":{"__comp":"17896441","content":"fd734e2c"},"/ecalc/docs/about/references/keywords/CONSUMERS-15f":{"__comp":"17896441","content":"c93dcb87"},"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE-f62":{"__comp":"17896441","content":"7c623a68"},"/ecalc/docs/about/references/keywords/CONTROL_MARGIN-b71":{"__comp":"17896441","content":"b0a5d2c7"},"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT-415":{"__comp":"17896441","content":"502e1773"},"/ecalc/docs/about/references/keywords/CROSSOVER-55f":{"__comp":"17896441","content":"66a649c0"},"/ecalc/docs/about/references/keywords/CURVE-aa7":{"__comp":"17896441","content":"3b0e82f8"},"/ecalc/docs/about/references/keywords/CURVES-429":{"__comp":"17896441","content":"382d59b5"},"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS-8cf":{"__comp":"17896441","content":"295f424e"},"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE-16d":{"__comp":"17896441","content":"9e7755e6"},"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL-efb":{"__comp":"17896441","content":"084f7ebf"},"/ecalc/docs/about/references/keywords/EFFICIENCY-f47":{"__comp":"17896441","content":"4da8ac19"},"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL-1f9":{"__comp":"17896441","content":"0f7b5825"},"/ecalc/docs/about/references/keywords/EMISSION-1c4":{"__comp":"17896441","content":"e26167e6"},"/ecalc/docs/about/references/keywords/EMISSION_NAME-29b":{"__comp":"17896441","content":"6bd3279d"},"/ecalc/docs/about/references/keywords/EMISSION_RATE-d80":{"__comp":"17896441","content":"51ad0f66"},"/ecalc/docs/about/references/keywords/EMISSIONS-e05":{"__comp":"17896441","content":"5989d566"},"/ecalc/docs/about/references/keywords/EMITTER_MODEL-c46":{"__comp":"17896441","content":"54094f37"},"/ecalc/docs/about/references/keywords/END-8f6":{"__comp":"17896441","content":"06dd1efa"},"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL-55a":{"__comp":"17896441","content":"df3c944d"},"/ecalc/docs/about/references/keywords/ENERGYFUNCTION-f2d":{"__comp":"17896441","content":"29d00dd8"},"/ecalc/docs/about/references/keywords/EXPRESSION-6c2":{"__comp":"17896441","content":"86262f09"},"/ecalc/docs/about/references/keywords/EXTRAPOLATION-b1f":{"__comp":"17896441","content":"5a5e553d"},"/ecalc/docs/about/references/keywords/FACILITY_INPUTS-070":{"__comp":"17896441","content":"5e3ed04b"},"/ecalc/docs/about/references/keywords/FACTOR-7d6":{"__comp":"17896441","content":"ccf7588a"},"/ecalc/docs/about/references/keywords/FILE-642":{"__comp":"17896441","content":"cbe196b2"},"/ecalc/docs/about/references/keywords/FLUID_DENSITY-c60":{"__comp":"17896441","content":"f59fd0ba"},"/ecalc/docs/about/references/keywords/FLUID_MODEL-2fd":{"__comp":"17896441","content":"d547c67b"},"/ecalc/docs/about/references/keywords/FUEL-c8b":{"__comp":"17896441","content":"e0edce1a"},"/ecalc/docs/about/references/keywords/FUEL_TYPES-a2e":{"__comp":"17896441","content":"2df92a48"},"/ecalc/docs/about/references/keywords/FUELCONSUMERS-aee":{"__comp":"17896441","content":"61639be2"},"/ecalc/docs/about/references/keywords/FUELRATE-255":{"__comp":"17896441","content":"7514af75"},"/ecalc/docs/about/references/keywords/GENERATORSETS-d03":{"__comp":"17896441","content":"15962da1"},"/ecalc/docs/about/references/keywords/HCEXPORT-ccb":{"__comp":"17896441","content":"3810e8e5"},"/ecalc/docs/about/references/keywords/HEAD-b50":{"__comp":"17896441","content":"0aeda122"},"/ecalc/docs/about/references/keywords/HEAD_MARGIN-794":{"__comp":"17896441","content":"3aeef25a"},"/ecalc/docs/about/references/keywords/include-80e":{"__comp":"17896441","content":"ec96df16"},"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR-423":{"__comp":"17896441","content":"29367e59"},"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE-dc7":{"__comp":"17896441","content":"90184672"},"/ecalc/docs/about/references/keywords/INSTALLATIONS-ed5":{"__comp":"17896441","content":"e023757a"},"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE-13e":{"__comp":"17896441","content":"3261da49"},"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE-47e":{"__comp":"17896441","content":"e862d0e9"},"/ecalc/docs/about/references/keywords/LOAD-cc8":{"__comp":"17896441","content":"cb266b33"},"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE-d7b":{"__comp":"17896441","content":"f5b92c38"},"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE-bf3":{"__comp":"17896441","content":"22f0e129"},"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE-c59":{"__comp":"17896441","content":"54d7341e"},"/ecalc/docs/about/references/keywords/MODELS-a5a":{"__comp":"17896441","content":"c21bc46a"},"/ecalc/docs/about/references/keywords/NAME-d44":{"__comp":"17896441","content":"2b15d891"},"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS-3da":{"__comp":"17896441","content":"d2b7592b"},"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT-330":{"__comp":"17896441","content":"97732f4b"},"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR-f94":{"__comp":"17896441","content":"06adec10"},"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL-dd5":{"__comp":"17896441","content":"4c3c1dc2"},"/ecalc/docs/about/references/keywords/PUMPS-6dd":{"__comp":"17896441","content":"b15ba3bd"},"/ecalc/docs/about/references/keywords/RATE-a33":{"__comp":"17896441","content":"1300feb7"},"/ecalc/docs/about/references/keywords/RATE_FRACTIONS-d5a":{"__comp":"17896441","content":"b677d687"},"/ecalc/docs/about/references/keywords/RATE_PER_STREAM-b6a":{"__comp":"17896441","content":"074935d7"},"/ecalc/docs/about/references/keywords/REGULARITY-3a2":{"__comp":"17896441","content":"2c19a041"},"/ecalc/docs/about/references/keywords/STAGES-a5c":{"__comp":"17896441","content":"4147f87e"},"/ecalc/docs/about/references/keywords/START-c55":{"__comp":"17896441","content":"10c684b0"},"/ecalc/docs/about/references/keywords/STREAM-d9a":{"__comp":"17896441","content":"577efb1d"},"/ecalc/docs/about/references/keywords/STREAMS-3c3":{"__comp":"17896441","content":"d17664a7"},"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE-45c":{"__comp":"17896441","content":"3fbb770c"},"/ecalc/docs/about/references/keywords/TIME_SERIES-56f":{"__comp":"17896441","content":"676abc7a"},"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE-0e8":{"__comp":"17896441","content":"d185ab52"},"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES-5ab":{"__comp":"17896441","content":"70f31d65"},"/ecalc/docs/about/references/keywords/TURBINE_LOAD-5a2":{"__comp":"17896441","content":"c5daebe9"},"/ecalc/docs/about/references/keywords/TURBINE_MODEL-0df":{"__comp":"17896441","content":"9e4a10de"},"/ecalc/docs/about/references/keywords/TYPE-9b2":{"__comp":"17896441","content":"72083b41"},"/ecalc/docs/about/references/keywords/UNITS-5a9":{"__comp":"17896441","content":"880bbd08"},"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL-bd0":{"__comp":"17896441","content":"11516e85"},"/ecalc/docs/about/references/keywords/VARIABLES-f4e":{"__comp":"17896441","content":"07b341f3"},"/ecalc/docs/about/references/keywords/VENTING_EMITTERS-6b4":{"__comp":"17896441","content":"0477162f"},"/ecalc/docs/category/documentation-cd3":{"__comp":"14eb3368","categoryGeneratedIndex":"d5b0ea4b"},"/ecalc/docs/category/guides-0bf":{"__comp":"14eb3368","categoryGeneratedIndex":"1e7de7fe"},"/ecalc/docs/changelog/-b3d":{"__comp":"17896441","content":"428320b6"},"/ecalc/docs/changelog/latest-045":{"__comp":"17896441","content":"fb7e7841"},"/ecalc/docs/changelog/separator-796":{"__comp":"17896441","content":"2f04f592"},"/ecalc/docs/changelog/v7-0-release-2b8":{"__comp":"17896441","content":"2b2be347"},"/ecalc/docs/changelog/v7-1-release-6a0":{"__comp":"17896441","content":"bdf25f4c"},"/ecalc/docs/changelog/v7-2-release-ac2":{"__comp":"17896441","content":"45c974ba"},"/ecalc/docs/changelog/v7-3-release-783":{"__comp":"17896441","content":"c90bf1e8"},"/ecalc/docs/changelog/v7-4-release-2af":{"__comp":"17896441","content":"7d3b81bb"},"/ecalc/docs/changelog/v7-5-release-753":{"__comp":"17896441","content":"eee46244"},"/ecalc/docs/changelog/v7-6-release-bab":{"__comp":"17896441","content":"cda37ba5"},"/ecalc/docs/changelog/v8.0-release-4b0":{"__comp":"17896441","content":"bfdf430b"},"/ecalc/docs/changelog/v8.1-release-074":{"__comp":"17896441","content":"e2712b99"},"/ecalc/docs/changelog/v8.10-release-659":{"__comp":"17896441","content":"96533a10"},"/ecalc/docs/changelog/v8.2-release-249":{"__comp":"17896441","content":"fba8a418"},"/ecalc/docs/changelog/v8.3-release-7c0":{"__comp":"17896441","content":"3e38e310"},"/ecalc/docs/changelog/v8.4-release-2a6":{"__comp":"17896441","content":"47daf389"},"/ecalc/docs/changelog/v8.5-release-5a0":{"__comp":"17896441","content":"0745e7f0"},"/ecalc/docs/changelog/v8.6-release-520":{"__comp":"17896441","content":"1f7805b6"},"/ecalc/docs/changelog/v8.7-release-553":{"__comp":"17896441","content":"f92867ed"},"/ecalc/docs/changelog/v8.8-release-df0":{"__comp":"17896441","content":"18b0ec42"},"/ecalc/docs/contribute/documentation-guide/documentation-65b":{"__comp":"17896441","content":"d19423a2"},"/ecalc/docs/contribute/documentation-guide/markdown-de5":{"__comp":"17896441","content":"60746895"},"/ecalc/docs/contribute/get-started-873":{"__comp":"17896441","content":"c8caddd1"},"/ecalc/docs/contribute/guides/conventional-commits-573":{"__comp":"17896441","content":"2c73e373"},"/ecalc/docs/contribute/guides/git-151":{"__comp":"17896441","content":"1287dd43"},"/ecalc/-94a":{"__comp":"1df93b7f","__context":{"plugin":"f85d2ba9"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=97221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.a150b672.js.LICENSE.txt b/assets/js/main.a150b672.js.LICENSE.txt new file mode 100644 index 0000000000..5b49ae6363 --- /dev/null +++ b/assets/js/main.a150b672.js.LICENSE.txt @@ -0,0 +1,126 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ + +/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.5c08b6d2.js b/assets/js/runtime~main.5c08b6d2.js new file mode 100644 index 0000000000..066ead4383 --- /dev/null +++ b/assets/js/runtime~main.5c08b6d2.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,d,a,b,f,c={},t={};function r(e){var d=t[e];if(void 0!==d)return d.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=c,r.c=t,e=[],r.O=(d,a,b,f)=>{if(!a){var c=1/0;for(i=0;i<e.length;i++){a=e[i][0],b=e[i][1],f=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&f||c>=f)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,f<c&&(c=f));if(t){e.splice(i--,1);var n=b();void 0!==n&&(d=n)}}return d}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[a,b,f]},r.n=e=>{var d=e&&e.__esModule?()=>e.default:()=>e;return r.d(d,{a:d}),d},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,b){if(1&b&&(e=this(e)),8&b)return e;if("object"==typeof e&&e){if(4&b&&e.__esModule)return e;if(16&b&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var c={};d=d||[null,a({}),a([]),a(a)];for(var t=2&b&&e;"object"==typeof t&&!~d.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((d=>c[d]=()=>e[d]));return c.default=()=>e,r.d(f,c),f},r.d=(e,d)=>{for(var a in d)r.o(d,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:d[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((d,a)=>(r.f[a](e,d),d)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",180:"66286265",262:"b677d687",381:"33498b04",443:"5e10e9e1",476:"e26167e6",505:"f571fee5",510:"54d7341e",517:"e1df8231",583:"fd734e2c",628:"577efb1d",639:"6bd3279d",749:"498bfcff",754:"ad129716",770:"f54e894e",856:"7557b935",925:"3b0e82f8",996:"15962da1",1042:"074935d7",1044:"4aa4fc36",1110:"5a5e553d",1310:"7c623a68",1398:"38d592cf",1404:"2b2be347",1668:"4ee97ba8",1686:"d19423a2",1709:"5989d566",1728:"edb3a98b",1748:"41d1792a",2e3:"cc88a418",2013:"c5daebe9",2017:"3409ab5c",2040:"7e6991bb",2138:"f92867ed",2153:"06adec10",2205:"5e3ed04b",2206:"496ed8d5",2225:"2b15d891",2459:"45c974ba",2484:"96533a10",2488:"f85d2ba9",2547:"b15ba3bd",2548:"81dd00c5",2562:"f59fd0ba",2638:"7b02141e",2655:"2c73e373",2693:"502e1773",2706:"cb266b33",2802:"1f7805b6",2962:"18b0ec42",2991:"d5b0ea4b",3054:"11516e85",3074:"7db788f5",3091:"3261da49",3172:"54094f37",3173:"29367e59",3177:"ebdd570f",3181:"fa17a3e5",3190:"b2b17913",3211:"4b5a01f9",3237:"1df93b7f",3240:"66a649c0",3305:"d2b7592b",3315:"880bbd08",3414:"b0a5d2c7",3443:"c21bc46a",3596:"2df92a48",3700:"1287dd43",3751:"3720c009",3787:"2781f0ad",3802:"721cfe60",3847:"084f7ebf",3902:"e8ebc025",4025:"bdf25f4c",4069:"0745e7f0",4070:"5c8ec56d",4075:"61639be2",4103:"bb45b332",4121:"55960ee5",4168:"c93dcb87",4189:"cda37ba5",4199:"af105519",4278:"b2781c74",4368:"a94703ab",4395:"9e4a10de",4441:"d5cd246e",4466:"fb7e7841",4507:"2c19a041",4631:"9e91bf8d",4733:"c3d1f0cd",4734:"cbe196b2",4838:"3fbb770c",4845:"43a26e71",4858:"e023757a",5133:"295f424e",5178:"72083b41",5201:"d77448ee",5408:"2cedaf2f",5595:"00440000",5654:"676abc7a",5713:"51ad0f66",5870:"10c684b0",5917:"d547c67b",5932:"90184672",6038:"4da8ac19",6039:"06dd1efa",6124:"1e7de7fe",6159:"e9e63826",6173:"0477162f",6193:"428320b6",6305:"7514af75",6539:"1f60d0d4",6638:"fba8a418",6686:"4c3c1dc2",6696:"fa3d98bd",6721:"c8caddd1",6768:"841adc37",6887:"3810e8e5",6893:"22f0e129",6922:"d17664a7",7154:"eee46244",7212:"9e7755e6",7238:"0f7b5825",7253:"e2712b99",7337:"70f31d65",7396:"3aeef25a",7495:"2f04f592",7594:"97732f4b",7611:"df3c944d",7652:"f054b415",7756:"17e50ecd",7832:"0aeda122",7907:"dfbab2f3",7918:"17896441",7920:"1a4e3797",7959:"f577f5c2",8010:"43a1031a",8023:"977fea76",8082:"47daf389",8084:"29d00dd8",8088:"00bdc23f",8094:"3e38e310",8122:"6adcc868",8186:"c90bf1e8",8202:"e7fdd821",8230:"7d3b81bb",8267:"07b341f3",8269:"1300feb7",8276:"a5dcc804",8282:"60746895",8285:"c9b29382",8318:"86262f09",8392:"1c663d3d",8485:"d2eeb42a",8518:"a7bd4aaa",8519:"ec96df16",8570:"69fd9be6",8583:"bfdf430b",8596:"e0edce1a",8703:"e862d0e9",8746:"0fd76486",8846:"5c08a402",8967:"ccf7588a",8980:"63ecd22d",8984:"f5b92c38",8988:"a2e97e20",9050:"2ce3b5da",9083:"fe44757f",9128:"8961bfac",9251:"fa0b6059",9306:"382d59b5",9336:"0425b884",9364:"9a118db7",9376:"7cebed78",9480:"163041ea",9524:"d185ab52",9591:"9e136365",9643:"b8c59810",9661:"5e95c892",9786:"4147f87e",9814:"40d6382c",9817:"14eb3368",9842:"4b80f681",9922:"f52ed7e3",9924:"df203c0f"}[e]||e)+"."+{53:"bd203e90",85:"cab88e4e",180:"54c83ec6",262:"464b512b",295:"e011aaa9",381:"af3705af",443:"7ace1ffa",476:"5bb19507",505:"08c2d17b",510:"d7e29d8d",517:"d15fcb5c",583:"5ebf1c81",628:"bff2fbed",639:"a0920aed",749:"7cb5395f",754:"ec7faabf",770:"8fedba0d",856:"3c07d124",905:"bff7f89c",925:"eaddd6fc",996:"478c8ccb",1042:"787161b6",1044:"546789e2",1110:"66840528",1310:"59eed68b",1398:"39635619",1404:"ab9ace89",1644:"956c5f9d",1668:"5de44dbc",1686:"bfad80c3",1709:"0ca83421",1728:"198e2662",1736:"5a1f964c",1748:"1467e923",1772:"dbafd945",2e3:"debf1f02",2013:"57e3eaf1",2017:"da6f95e5",2040:"55d8ba6f",2138:"9c565ea8",2153:"4c91d0a5",2205:"4cc7e731",2206:"a66004a5",2225:"72863a33",2237:"660f8cae",2459:"3fe59b9a",2465:"bf434e4e",2484:"c15c51f0",2488:"8dbe7681",2547:"1515f234",2548:"6a7d0b4d",2562:"07e13be5",2638:"f6863e42",2655:"a47cc11b",2661:"122dc9a7",2689:"61fc2af9",2693:"15957f54",2706:"dd733855",2802:"cb8ffae1",2955:"1a515cc6",2962:"7932013a",2991:"3c6603c6",2995:"5d18433e",3054:"7d67d8fc",3074:"2315ec42",3091:"5ea59cab",3172:"9512c0c0",3173:"5e394ff1",3177:"490a72f9",3181:"6dd1bddc",3190:"970b4d8a",3211:"f1b16e5a",3237:"9c9986b4",3240:"fe4ad4d1",3305:"3c905ba4",3315:"13a8ec3c",3414:"758cd55a",3443:"dffda344",3449:"f5c6982a",3594:"f73537cc",3596:"3a6cca1e",3700:"379819cf",3727:"85fa440d",3751:"e2cfbcc1",3787:"5961fd92",3802:"59c0aa13",3847:"d2478f08",3902:"d321550d",3920:"5e403fe8",3952:"a9404373",3966:"e4cb16cd",4025:"fe9eff3a",4069:"012598cb",4070:"8762b795",4075:"ecdff55a",4103:"89053c6c",4121:"ffe88e68",4168:"3428dcd7",4189:"21794b26",4199:"55536628",4278:"a424ad9a",4368:"e28c5e5d",4395:"2da2b698",4441:"17723f6d",4466:"024cb53d",4507:"f0278a48",4631:"760beddb",4733:"43748911",4734:"4b99558d",4838:"39674007",4845:"875cfcf4",4858:"8ac686a4",5054:"62d51cca",5114:"198e5e9e",5133:"f4b1ea30",5178:"ebdce974",5201:"e9054d1c",5408:"533693ab",5525:"1fda8ddb",5595:"cceb5e85",5654:"03893271",5713:"4bc6fee4",5718:"548e327d",5870:"11d7ac8c",5917:"5e9fddc4",5932:"c0455df2",6038:"740674be",6039:"556a007e",6124:"48c2fda9",6159:"5ad2ec79",6173:"6c398dc7",6193:"53300601",6305:"19e992cc",6539:"12f89e4f",6638:"31a34e34",6686:"2d79bead",6696:"5bbcc4ed",6721:"c09a1e7d",6733:"06beca23",6768:"c737b647",6887:"936df7c3",6893:"700978f3",6922:"93f64476",7154:"b69274dc",7180:"ddfad669",7212:"acc3cd32",7238:"3ef7c2f4",7253:"e6b7fbca",7337:"fe06b9e1",7381:"77f96fa1",7396:"1896e4de",7495:"7ecac6a9",7497:"e58bfc8c",7594:"b6556d43",7611:"47411cb6",7652:"0c59b1a7",7756:"84c65831",7832:"cbb99604",7907:"47acfba7",7918:"1c4eee25",7920:"b588d37a",7959:"837972fc",8010:"8029b5e8",8023:"20ac3fb4",8082:"f427e7eb",8084:"f86ec347",8088:"a7fe7f57",8094:"bc8854f8",8122:"7dba0b56",8186:"db11fafc",8202:"0aea6554",8230:"d3992b48",8267:"a32e4fb7",8269:"787000b1",8276:"8a68248d",8282:"21f8ec3d",8285:"c2e26cd6",8314:"51d97488",8318:"b577aac6",8392:"3b2eb3c1",8443:"c83222a4",8485:"df54ed09",8518:"2d920f9f",8519:"a887ab97",8570:"5e6f3b90",8583:"79bacaf3",8596:"658a6fe8",8703:"ff1189cf",8746:"e7925637",8817:"619f555e",8846:"b9d91040",8932:"33d18fca",8967:"7ca310d4",8980:"27ad13ee",8984:"0bf0df97",8988:"bbf524d9",9050:"c94b7f25",9083:"d3cb6819",9128:"d8e88269",9206:"44aba7e5",9251:"5e02f31b",9306:"fac6029d",9336:"948254ce",9364:"62ebf45b",9376:"799c5db3",9417:"f108e646",9480:"3ded8d57",9496:"ce93e692",9524:"4428bb46",9591:"e03d4aca",9643:"aec9431a",9661:"3970a74d",9786:"4efdf1e5",9814:"6514d67d",9817:"1716a525",9842:"649f2d17",9922:"574da84b",9924:"d40f6615"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,d)=>Object.prototype.hasOwnProperty.call(e,d),b={},f="documentation:",r.l=(e,d,a,c)=>{if(b[e])b[e].push(d);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==f+a){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",f+a),t.src=e),b[e]=[d];var l=(d,a)=>{t.onerror=t.onload=null,clearTimeout(s);var f=b[e];if(delete b[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(a))),d)return d(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/ecalc/",r.gca=function(e){return e={17896441:"7918",60746895:"8282",66286265:"180",90184672:"5932","935f2afb":"53",b677d687:"262","33498b04":"381","5e10e9e1":"443",e26167e6:"476",f571fee5:"505","54d7341e":"510",e1df8231:"517",fd734e2c:"583","577efb1d":"628","6bd3279d":"639","498bfcff":"749",ad129716:"754",f54e894e:"770","7557b935":"856","3b0e82f8":"925","15962da1":"996","074935d7":"1042","4aa4fc36":"1044","5a5e553d":"1110","7c623a68":"1310","38d592cf":"1398","2b2be347":"1404","4ee97ba8":"1668",d19423a2:"1686","5989d566":"1709",edb3a98b:"1728","41d1792a":"1748",cc88a418:"2000",c5daebe9:"2013","3409ab5c":"2017","7e6991bb":"2040",f92867ed:"2138","06adec10":"2153","5e3ed04b":"2205","496ed8d5":"2206","2b15d891":"2225","45c974ba":"2459","96533a10":"2484",f85d2ba9:"2488",b15ba3bd:"2547","81dd00c5":"2548",f59fd0ba:"2562","7b02141e":"2638","2c73e373":"2655","502e1773":"2693",cb266b33:"2706","1f7805b6":"2802","18b0ec42":"2962",d5b0ea4b:"2991","11516e85":"3054","7db788f5":"3074","3261da49":"3091","54094f37":"3172","29367e59":"3173",ebdd570f:"3177",fa17a3e5:"3181",b2b17913:"3190","4b5a01f9":"3211","1df93b7f":"3237","66a649c0":"3240",d2b7592b:"3305","880bbd08":"3315",b0a5d2c7:"3414",c21bc46a:"3443","2df92a48":"3596","1287dd43":"3700","3720c009":"3751","2781f0ad":"3787","721cfe60":"3802","084f7ebf":"3847",e8ebc025:"3902",bdf25f4c:"4025","0745e7f0":"4069","5c8ec56d":"4070","61639be2":"4075",bb45b332:"4103","55960ee5":"4121",c93dcb87:"4168",cda37ba5:"4189",af105519:"4199",b2781c74:"4278",a94703ab:"4368","9e4a10de":"4395",d5cd246e:"4441",fb7e7841:"4466","2c19a041":"4507","9e91bf8d":"4631",c3d1f0cd:"4733",cbe196b2:"4734","3fbb770c":"4838","43a26e71":"4845",e023757a:"4858","295f424e":"5133","72083b41":"5178",d77448ee:"5201","2cedaf2f":"5408","00440000":"5595","676abc7a":"5654","51ad0f66":"5713","10c684b0":"5870",d547c67b:"5917","4da8ac19":"6038","06dd1efa":"6039","1e7de7fe":"6124",e9e63826:"6159","0477162f":"6173","428320b6":"6193","7514af75":"6305","1f60d0d4":"6539",fba8a418:"6638","4c3c1dc2":"6686",fa3d98bd:"6696",c8caddd1:"6721","841adc37":"6768","3810e8e5":"6887","22f0e129":"6893",d17664a7:"6922",eee46244:"7154","9e7755e6":"7212","0f7b5825":"7238",e2712b99:"7253","70f31d65":"7337","3aeef25a":"7396","2f04f592":"7495","97732f4b":"7594",df3c944d:"7611",f054b415:"7652","17e50ecd":"7756","0aeda122":"7832",dfbab2f3:"7907","1a4e3797":"7920",f577f5c2:"7959","43a1031a":"8010","977fea76":"8023","47daf389":"8082","29d00dd8":"8084","00bdc23f":"8088","3e38e310":"8094","6adcc868":"8122",c90bf1e8:"8186",e7fdd821:"8202","7d3b81bb":"8230","07b341f3":"8267","1300feb7":"8269",a5dcc804:"8276",c9b29382:"8285","86262f09":"8318","1c663d3d":"8392",d2eeb42a:"8485",a7bd4aaa:"8518",ec96df16:"8519","69fd9be6":"8570",bfdf430b:"8583",e0edce1a:"8596",e862d0e9:"8703","0fd76486":"8746","5c08a402":"8846",ccf7588a:"8967","63ecd22d":"8980",f5b92c38:"8984",a2e97e20:"8988","2ce3b5da":"9050",fe44757f:"9083","8961bfac":"9128",fa0b6059:"9251","382d59b5":"9306","0425b884":"9336","9a118db7":"9364","7cebed78":"9376","163041ea":"9480",d185ab52:"9524","9e136365":"9591",b8c59810:"9643","5e95c892":"9661","4147f87e":"9786","40d6382c":"9814","14eb3368":"9817","4b80f681":"9842",f52ed7e3:"9922",df203c0f:"9924"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(d,a)=>{var b=r.o(e,d)?e[d]:void 0;if(0!==b)if(b)a.push(b[2]);else if(/^(1303|532)$/.test(d))e[d]=0;else{var f=new Promise(((a,f)=>b=e[d]=[a,f]));a.push(b[2]=f);var c=r.p+r.u(d),t=new Error;r.l(c,(a=>{if(r.o(e,d)&&(0!==(b=e[d])&&(e[d]=void 0),b)){var f=a&&("load"===a.type?"missing":a.type),c=a&&a.target&&a.target.src;t.message="Loading chunk "+d+" failed.\n("+f+": "+c+")",t.name="ChunkLoadError",t.type=f,t.request=c,b[1](t)}}),"chunk-"+d,d)}},r.O.j=d=>0===e[d];var d=(d,a)=>{var b,f,c=a[0],t=a[1],o=a[2],n=0;if(c.some((d=>0!==e[d]))){for(b in t)r.o(t,b)&&(r.m[b]=t[b]);if(o)var i=o(r)}for(d&&d(a);n<c.length;n++)f=c[n],r.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return r.O(i)},a=self.webpackChunkdocumentation=self.webpackChunkdocumentation||[];a.forEach(d.bind(null,0)),a.push=d.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/docs/about/getting_started/cli/faq/index.html b/docs/about/getting_started/cli/faq/index.html new file mode 100644 index 0000000000..bf1fddf370 --- /dev/null +++ b/docs/about/getting_started/cli/faq/index.html @@ -0,0 +1,43 @@ +<!doctype html> +<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-about/getting_started/cli/faq" data-has-hydrated="false"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v3.1.1"> +<title data-rh="true">FAQ / Troubleshooting | eCalc™ Docs + + + + +

    FAQ / Troubleshooting

    +

    While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages. +This page tries to explain some common error messages and proposes how to fix them.

    +

    Indentation errors

    +

    In YAML, the indentation is very important and specifies the level in the hierarchy for the input. +If you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors.

    +

    Error messages due to YAML read problems

    +

    The following error messages are common when you have formatting issues in your YAML file:

    +
    mapping values are not allowed here
    +
    while scanning a simple key in "<setupfile.yml>", line <n>, column <m>
    could not find expected ':', line <n>, column <m>
    +
    while parsing a block mapping in <setupfile>, line <n>, column <m>
    expected <block end>, but found '<block mapping start>'
    +

    Error messages due to invalid eCalc configuration

    +

    The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type +dictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would +indicate that the type is wrong because it is not a 'dict'/'list' or other type

    +
    None should be instance of 'dict'
    +
    None should be instance of 'list'
    +

    Proposed solution

    +

    Check your YAML setup file for correct indentation and correct format of values for each eCalc key.

    +

    Special characters in Unicode

    +

    eCalc uses ruamel.yaml to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message.

    +

    One example of this is an unrecognized "BOM" character in "UTF-8 Unicode".

    +

    Error message

    +
    while scanning a simple key in "<setupfile.yml>", line <n>, column 1
    could not find expected ':', line <n>, column 1
    +

    Proposed solution

    +

    Check the encoding of your setupfile (and inputfiles):

    +
    $ file <setupfile>.yml
    +

    If the output of this is not "ASCII text", convert your file to "US-ASCII" using iconv.

    +

    Example when <setupfile>.yml is of type "UTF-8"

    +
    $ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o <new_setup_file_name_ascii>.yml <old_setup_file_name_utf-8>.yml
    +

    Now try to run again using the new file <new_setup_file_name_ascii>.yml.

    + + \ No newline at end of file diff --git a/docs/about/getting_started/cli/index.html b/docs/about/getting_started/cli/index.html new file mode 100644 index 0000000000..4aaab78733 --- /dev/null +++ b/docs/about/getting_started/cli/index.html @@ -0,0 +1,37 @@ + + + + + +CLI | eCalc™ Docs + + + + +

    eCalc CLI

    +
    info

    It is currently recommended to use the CLI instead of the Python library directly due to upcoming breaking changes in the Python library

    +

    The current recommended way to use eCalc is through the CLI (Command Line Interpreter). This is a part of the +eCalc Python library, and should be accessible from the command line as ecalc.

    +

    See all commands and options in the CLI reference

    +

    Example Usage

    +

    Use show command to inspect results

    +

    First run ecalc (here shown with default output folder)

    +
    $ ecalc run /somelocation/myfield.yaml --output-folder output
    +

    Enter the output folder

    +
    $ cd output
    +

    Show results for a single component

    +
    $ ecalc show results --name waterinj --output-format json
    +

    or as csv

    +
    $ ecalc show results --name waterinj --output-format csv
    +

    or write the full csv result to a file (this will give the same output as ecalc run with the csv option)

    +
    $ ecalc show results --output-format csv --file results.csv
    +

    Output Monthly CSV data

    +
    $ ecalc run -f MONTH /somelocation/myfield.yml
    +

    Specify different output folder

    +
    $ ecalc run -o /somedirectory/foo/bar/ /somelocation/myfield.yml
    +

    Specify a different naming prefix to outputs

    +
    $ ecalc run -n myfield_myproject /somelocation/myfield.yml
    +

    Show stack trace for debugging

    +
    $ ecalc run --log DEBUG /somelocation/myfield.yml
    + + \ No newline at end of file diff --git a/docs/about/getting_started/index.html b/docs/about/getting_started/index.html new file mode 100644 index 0000000000..5a2103f36a --- /dev/null +++ b/docs/about/getting_started/index.html @@ -0,0 +1,35 @@ + + + + + +Getting started | eCalc™ Docs + + + + +

    API Reference

    +
    info

    Currently the only officially supported method is the eCalc CLI using eCalc YAML models.

    +

    There are three options to run eCalc models:

    + +

    What method should I choose?

    +

    eCalc CLI

    +

    Choose the eCalc CLI option if you:

    +
      +
    • Don't know much about programming
    • +
    • Have simple requirements
    • +
    • Can define the eCalc models statically
    • +
    +

    Python Library

    +

    Choose the Python Library option if you:

    +
      +
    • Are a developer or advanced user, and want to build eCalc models and get results programmatically
    • +
    • Use Python, and you need to use (parts of) eCalc as a dependency
    • +
    • Need access to "inner core functionality" of eCalc
    • +
    +
    note

    Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon

    + + \ No newline at end of file diff --git a/docs/about/getting_started/library/index.html b/docs/about/getting_started/library/index.html new file mode 100644 index 0000000000..b4fbd437d8 --- /dev/null +++ b/docs/about/getting_started/library/index.html @@ -0,0 +1,17 @@ + + + + + +Python Library | eCalc™ Docs + + + + +

    Python Library

    +
    warning

    It is currently not recommended to use the Python library due to upcoming breaking changes.

    +

    If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in +dynamically changing the eCalc models.

    +

    See all commands and options in the API reference

    + + \ No newline at end of file diff --git a/docs/about/getting_started/yaml/index.html b/docs/about/getting_started/yaml/index.html new file mode 100644 index 0000000000..09cf548da9 --- /dev/null +++ b/docs/about/getting_started/yaml/index.html @@ -0,0 +1,17 @@ + + + + + +YAML | eCalc™ Docs + + + + +

    YAML

    +

    We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see here

    +

    The eCalc YAML model can either be run directly with the eCalc CLI or loaded using the Python library

    +

    For getting started setting up your first eCalc YAML model, please see Setup an eCalc Model, +look at some example YAMLs here and refer to the vocabulary that we use here.

    + + \ No newline at end of file diff --git a/docs/about/index.html b/docs/about/index.html new file mode 100644 index 0000000000..bd081d00f3 --- /dev/null +++ b/docs/about/index.html @@ -0,0 +1,25 @@ + + + + + +Introduction | eCalc™ Docs + + + + +

    Introduction to eCalc™

    +

    The eCalc™ technology is being developed by Equinor within the Technology, Digital and Innovation (TDI) business area.

    +

    What is eCalc™?

    +

    eCalc™ is a software tool for calculation of energy demand and greenhouse gas emissions from oil and gas production and processing. It enables the cross-disciplinary collaboration required to achieve high-quality and transparent energy and GHG emission prognosis and decision support.

    +

    eCalc™ performs energy and emission calculations by integrating data, knowledge and future plans from different disciplines. This could be production and injection profiles from the reservoir engineer, characteristics of energy consuming equipment units such as gas turbines, compressors and pumps from the facility engineer, and emission factors for different fuels from the sustainability engineer. The main idea is using physical or data-driven models to relate production rates and pressures to the required processing energy and resulting emissions. Integrated bookkeeping for all emission sources is offered.

    +

    eCalc™ uses a bottom-up approach to give high-quality installation and portfolio level forecasts at the same time as detailed insights about the energy drivers and processing capacities for the individual installation.

    +

    +

    Why should I use eCalc™?

    +

    By using eCalc™ you will be able to forecast your energy consumption and emissions with consistency and transparency. You will also be enabled to study the effect on energy demand and emissions of your investment opportunities as well as studying emission reduction measures.

    +

    How to use eCalc™?

    +

    To use eCalc™ you need to create a model setup of your asset. +This is described in the Modelling section.

    +

    Once the model is ready, you can run the eCalc™ calculator. Different user interfaces for the calculator are offered. These are described in detail in the Getting started section.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/index.html b/docs/about/migration_guides/index.html new file mode 100644 index 0000000000..a880928168 --- /dev/null +++ b/docs/about/migration_guides/index.html @@ -0,0 +1,13 @@ + + + + + +Migrating eCalc versions | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v7_to_v8/index.html b/docs/about/migration_guides/v7_to_v8/index.html new file mode 100644 index 0000000000..d08447997c --- /dev/null +++ b/docs/about/migration_guides/v7_to_v8/index.html @@ -0,0 +1,109 @@ + + + + + +v7 to v8 | eCalc™ Docs + + + + +

    v7 to v8

    +

    In this migration guide you will find:

    +
      +
    1. YAML changes
    2. +
    3. CLI changes
    4. +
    +

    Yaml migration

    +

    Migration overview

    +

    This doc guides you through migrating an existing eCalc™ model from version v7 to v8.

    +

    We try to make this as easy as possible, and provide a step-by-step migration guide.

    +

    Main differences

    +
      +
    1. All component names must be unique to avoid ambiguity in reporting
    2. +
    3. UNITS are required when setting up compressor and pump charts
    4. +
    5. Restrict allowed characters in component names and emission names
    6. +
    7. NAME no longer used for LTP reporting, use CATEGORY instead
    8. +
    9. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)
    10. +
    +

    1. All component names must be unique

    +

    All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation, +generator sets, electricity consumers, fuel consumers and direct emitters.

    +
    main.yaml
    INSTALLATIONS:
    - NAME: Installation
    ...

    GENERATORSETS:
    - NAME: Genset
    ...
    CONSUMERS:
    - NAME: Consumer
    ...
    - NAME: Consumer
    ...
    - NAME: Genset
    ...

    FUELCONSUMERS:
    - NAME: FuelConsumer
    ...
    - NAME: FuelConsumer
    ...

    DIRECT_EMITTER:
    - NAME: DirectEmitter
    ...
    - NAME: DirectEmitter
    ...
    - NAME: Installation
    ...
    +

    This model is no longer valid, and the duplicated installation names are highlighted. +To make this model valid these names needs to be changed. For example:

    +
    main.yaml
    INSTALLATIONS:
    - NAME: Installation_A
    ...

    GENERATORSETS:
    - NAME: Genset_A
    ...
    CONSUMERS:
    - NAME: Consumer_A
    ...
    - NAME: Consumer_B
    ...
    - NAME: Genset_B
    ...

    FUELCONSUMERS:
    - NAME: FuelConsumer_A
    ...
    - NAME: FuelConsumer_B
    ...

    DIRECT_EMITTER:
    - NAME: DirectEmitter_A
    ...
    - NAME: DirectEmitter_B
    ...
    - NAME: Installation_B
    ...
    +

    This will make it possible to attribute results to each consumer by name, and removes any an ambiguity +when interpreting eCalc™ results.

    +

    See INSTALLATION, +GENERATORSET, +CONSUMERS, +FUELCONSUMERS, +VENTING_EMITTER +for more details about the relevant keywords.

    +
    Are you using power from shore?

    We have implemented temporal categories for consumers to support the power from shore implementation in use.

    Instead of duplicating the generator set and setting the POWER-FROM-SHORE category, +it is now possible to change the category at a certain date. This is the same syntax as other temporal models.

    CATEGORY:
    2020-01-01: TURBINE-GENERATOR
    2030-01-01: POWER-FROM-SHORE

    See Power from shore for more information.

    +

    2. UNITS for pump and compressor charts

    +

    Compressor and pump charts has previously had implicit units, without requiring the operator to specify what +units are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand +over models.

    +

    To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify.

    +

    To keep the old defaults you can do the following:

    +
    main.yaml
    FACILITY_INPUTS:
    - NAME: single_speed_pump_chart
    FILE: <some input csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    - NAME: variable_speed_pump_chart
    FILE: <some input csv>
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    MODELS:
    - NAME: single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: FRACTION
    CURVES:
    ...
    - NAME: variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: FRACTION
    CURVES:
    ...

    ...
    +

    See COMPRESSOR CHART +and PUMP CHART +for more details about the relevant keywords.

    +

    3. Restrict allowed characters in component names and emission names

    +

    Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (_), hyphen (-) and space ( ).

    +

    Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (_).

    +

    4. NAME no longer used for LTP reporting, use CATEGORY instead

    +

    We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME.

    +
    main.yaml
    INSTALLATIONS:
    - NAME: Installation_A
    ...

    GENERATORSETS:
    - NAME: Genset_A
    ...
    CONSUMERS:
    - NAME: Consumer_A
    ...

    FUELCONSUMERS:
    - NAME: loading # Name will no longer be used in LTP reporting
    CATEGORY: LOADING # Category must be used to include it in LTP reporting
    FUEL: Fuel_A
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: storage # Name will no longer be used in LTP reporting
    CATEGORY: STORAGE # Category must be used to include it in LTP reporting
    FUEL: Fuel_B
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: flare # Name will no longer be used in LTP reporting
    CATEGORY: FLARE # Category must be used to include it in LTP reporting
    FUEL: Fuel_C
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...
    - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting
    CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting
    FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: Oil_rate_per_timestep
    ...

    ...
    +

    5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)

    +

    Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names. +The input is case-sensitive and must match exactly with the pre-defined names. See CLI Docs for full documentation.

    +

    CLI migration

    +

    This version includes some changes to how the CLI is invoked and changes to default behavior.

    +
      +
    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.
    2. +
    3. Log level should be specified as the first argument + log to file
    4. +
    5. Model yaml-file needs to come last
    6. +
    7. Extrapolation (correction) is now always used and cannot be disabled
    8. +
    9. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export
    10. +
    11. Simple results are now default for json
    12. +
    +

    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.

    +

    To make it possible to add ecalc show we added the ecalc run command. In v8 it is required to specify run when calculating a model.

    +

    If you previously ran eCalc™ with this command

    +
    $ ecalc ./my-model.yaml
    +

    you should now use

    +
    $ ecalc run ./my-model.yaml
    +

    2. Log level should be specified as the first argument + log to file

    +

    Previously you could specify the --log argument after run, this is no longer possible.

    +

    This is the new way of specifying log level.

    +
    $ ecalc --log DEBUG run ./my-model.yaml
    +

    In addition we are introducing --log-folder <path> where you can direct and store the log in a given path to easily +look at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc +produces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages). +The user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT +do that for you.

    +
    $ ecalc --log DEBUG --log-folder . run ./my-model.yaml
    +

    As you see above, the argument MUST be added BEFORE the run argument.

    +

    3. Model yaml-file needs to come last

    +

    When running eCalc™ you will now need to set the model file argument last.

    +

    ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file]

    +

    See the CLI Docs or run ecalc --help for the full documentation.

    +

    4. Extrapolation correction is no longer optional

    +

    We have removed the extrapolation correction argument. eCalc™ will now always "extrapolate" values. +The main reason for making this change was that the feature was in general always used, in addition to being a confusing term. +Let us know if you have a use-case where this was needed.

    +

    5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export

    +

    To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily +affected by Centuries), we simplify the argument to get LTP results. See CLI Docs for +full documentation.

    +

    6. Simple results are now default for json

    +

    Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now +needs to use the --detailed-output option when running the CLI. See CLI reference docs +for more details.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-1_to_v8-2/index.html b/docs/about/migration_guides/v8-1_to_v8-2/index.html new file mode 100644 index 0000000000..4b4e6d8b8d --- /dev/null +++ b/docs/about/migration_guides/v8-1_to_v8-2/index.html @@ -0,0 +1,62 @@ + + + + + +v8.1 to v8.2 | eCalc™ Docs + + + + +

    v8.1 to v8.2

    +
      +
    1. Model changes
    2. +
    3. Result changes
    4. +
    5. Behaviour
    6. +
    +

    Modelling

    +

    YAML

    +

    LTP

    +
      +
    1. Two new consumer categories are added: HEATER and BOILER
    2. +
    +

    Result

    +

    Operational settings used is now 1-based

    +

    Consumer systems will now refer to the first operational setting as 1 instead of 0. 0 means that "No setting was used", indicating that none of the operational settings was able to handle the stream. This will make it easier for users to find the corresponding operational setting that is/was active for the different timesteps.

    +

    Resampling of rates changed from forward filling to average rates

    +

    All calculations are performed on a global time vector, which is the union of all dates found in the +input resource files (csv files) where INFLUENCE_TIME_VECTOR is set to +True, dates found in the eCalc model yaml-file (temporal models), and dates in the requested output frequency.

    +

    If the global time vector and the dates in the requested output frequency does not coincide fully, a resampling of the +results needs to be performed. Previously this was done by simply picking the first +available rate in the time interval (forward filling). The rates are thought to be constant in a period between two +dates, hence the forward filling will disconnect the rates and the cumulative volumes. This has now been changed to +calculating the average rate from all dates in the global time vector within a date range in the requested output +frequency, to keep the rate and cumulative consistent with each other. This average will take into +account the lengths of the periods and the regularity within each period. The figure below shows a comparison of how the +resampling would previously have been done compared to how it is done now when making quarterly output from monthly results.

    +

    +

    TLDR; this change will make it possible to use the rate output data (rate from a point in time) from eCalc correctly.

    +

    LTP .tsv file

    +
      +
    1. Column Total CO2 is removed from LTP output (both for fixed & mobile installations)
    2. +
    3. Add relevant columns in ltp-file for the two new consumer categories HEATER and BOILER
    4. +
    5. Re-order some of the columns in the ltp-file, for more logical order
    6. +
    7. Turbine-columns are now filtered on the two consumer categories TURBINE-GENERATOR and GAS-DRIVEN-COMPRESSOR, as it is no longer only turbines that are consumers of FUEL-GAS
    8. +
    +

    STP .tsv file

    +
      +
    1. Report CO2 emissions for both fixed- and mobile installations
    2. +
    3. Report CH4 emissions for fixed installations
    4. +
    +

    Emissions, structure and order

    +

    The JSON result file has changed format for emissions. Emissions were previously listed in a list, but is now listed in a map:

    +
        "emissions":
    [
    {
    "name": "co2"
    ...
    +

    to

    +
        "emissions":
    {
    "co2":
    {
    "name": "co2"
    ...
    +

    This will/may also affect the order of which emissions are presented in the result file, but should from now on be consistent.

    +

    Behaviour

    +

    Conditions

    +

    eCalc will now consistently NOT evaluate and run calculations if a CONDITION is not fulfilled. Conditions can be set on most energy consumers, to indicate whether the consumer is active or not at a given timestep. Previously the consumer was evaluated even though a condition was not fulfilled to reflect "what would have happened if it was active". However this has proven to be difficult for users to understand and remember when the overall model result is being evaluated and analyzed. In order to prevent user errors, we have decided to consistently NOT evaluate a consumer for timesteps where it is disabled (conditions evaluated to true).

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-2_to_v8-3/index.html b/docs/about/migration_guides/v8-2_to_v8-3/index.html new file mode 100644 index 0000000000..55f0f53c4b --- /dev/null +++ b/docs/about/migration_guides/v8-2_to_v8-3/index.html @@ -0,0 +1,14 @@ + + + + + +v8.2 to v8.3 | eCalc™ Docs + + + + +

    v8.2 to v8.3

    +

    It is no longer accepted to change ENERGY_USAGE_MODEL TYPE over time, within one consumer. In case TYPE evolution is needed, the model can be split in two consumers.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-3_to_v8-4/index.html b/docs/about/migration_guides/v8-3_to_v8-4/index.html new file mode 100644 index 0000000000..162bd86b58 --- /dev/null +++ b/docs/about/migration_guides/v8-3_to_v8-4/index.html @@ -0,0 +1,14 @@ + + + + + +v8.3 to v8.4 | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-5_to_v8-6/index.html b/docs/about/migration_guides/v8-5_to_v8-6/index.html new file mode 100644 index 0000000000..e36ddd22ce --- /dev/null +++ b/docs/about/migration_guides/v8-5_to_v8-6/index.html @@ -0,0 +1,17 @@ + + + + + +v8.5 to v8.6 | eCalc™ Docs + + + + +

    v8.5 to v8.6

    +

    Economics

    +

    Economic details have been deprecated from eCalc. +If you have used input data such as TAX, QUOTA and PRICE for fuel and emissions in your model, +they will be ignored and hence not reported. It will be treated as an error in a future version of eCalc.

    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8-6_to_v8-7/index.html b/docs/about/migration_guides/v8-6_to_v8-7/index.html new file mode 100644 index 0000000000..32060f1ef9 --- /dev/null +++ b/docs/about/migration_guides/v8-6_to_v8-7/index.html @@ -0,0 +1,14 @@ + + + + + +v8.6 to v8.7 | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8.7_to_v8.8/index.html b/docs/about/migration_guides/v8.7_to_v8.8/index.html new file mode 100644 index 0000000000..8de2be52de --- /dev/null +++ b/docs/about/migration_guides/v8.7_to_v8.8/index.html @@ -0,0 +1,35 @@ + + + + + +v8.7 to v8.8 | eCalc™ Docs + + + + +

    v8.7 to v8.8

    +

    In this migration guide you will find:

    +
      +
    1. YAML changes
    2. +
    +

    Yaml migration

    +

    1. Changes to VENTING_EMITTERS

    +
      +
    • Update VENTING_EMITTERS to support rate TYPE and UNIT
    • +
    • EMITTER_MODEL is deprecated and replaced by a new keyword EMISSION
    • +
    • In the new keyword EMISSION the following should be specified: +
        +
      • NAME of the emission
      • +
      • RATE, including VALUE and optionally UNIT and TYPE
      • +
      +
    • +
    +

    Previously, the format looked like this:

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION_NAME: <emission name>
    EMITTER_MODEL:
    - EMISSION_RATE: <emission rate [kg/day]>
    +

    But the new valid definition of VENTING_EMITTERS in the yaml is now:

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION:
    NAME: <emission name>
    RATE:
    VALUE: <emission rate>
    UNIT: <emission rate unit, default kg/d>
    TYPE: <emission rate type, default STREAM_DAY>
    +

    Example with the new yaml-definition of VENTING_EMITTERS:

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    NAME: CH4
    RATE:
    VALUE: 4
    UNIT: kg/d
    TYPE: STREAM_DAY
    + + \ No newline at end of file diff --git a/docs/about/migration_guides/v8_to_v81/index.html b/docs/about/migration_guides/v8_to_v81/index.html new file mode 100644 index 0000000000..b8d4aa0cdd --- /dev/null +++ b/docs/about/migration_guides/v8_to_v81/index.html @@ -0,0 +1,64 @@ + + + + + +v8 to v8.1 | eCalc™ Docs + + + + +

    v8 to v8.1

    +

    In this migration guide you will find:

    +
      +
    1. YAML changes
    2. +
    +

    Yaml migration

    +

    Migration overview

    +

    This doc guides you through migrating an existing eCalc™ model from version v8 to v8.1.

    +

    We try to make this as easy as possible, and provide a step-by-step migration guide.

    +

    1. Changes to TIME_SERIES

    +
      +
    • RATE_INTERPOLATION_TYPE is renamed to INTERPOLATION_TYPE
    • +
    • New time series type: DEFAULT with default RIGHT interpolation
    • +
    • RESERVOIR type is removed
    • +
    +

    Previously, it looked like this:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <MISCELLANEOUS/RESERVOIR>
    FILE: <path to file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    RATE_INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +

    But the new valid definition of time series in the yaml is now:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <MISCELLANEOUS/DEFAULT>
    FILE: <path to file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +
    important

    We have understood that the previous definitions lead to misunderstandings and errors. It is therefore of high importance +that you now go through the reservoir data timeseries one-by-one and make sure that the correct type and interpolation type +is set. See below for the 2 possibilities of migrating from the old RESERVOIR type.

    +

    If you previously used the RESERVOIR type, you know have 2 options. See below.

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: RESERVOIR
    ...
    +

    If you know that the reservoir data comes from Centuries, and/or that the data is right-interpolated, then you should +change to the new DEFAULT type, like this:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: DEFAULT
    ...
    +
    important

    If you do NOT know the origin of the timeseries or whether it uses LEFT or RIGHT interpolation, you MUST contact +somebody that can help you out to make this right. The consequences of doing it wrong is that the calculations is +easily offset by 1 year.

    +

    2. Not possible to have different interpolation types for vectors within one file

    +

    Previously eCalc™ tried to recognize vectors as rates- or non-rates for time series. +Hence, rate-vectors were set to use LEFT interpolation type, or if the type was +MISCELLANEOUS it was set to the method given by the user. If the vector was not recognized +as a rate, the interpolation method was automatically set to LINEAR, regardless of user input.

    +

    This behaviour is now changed:

    +
    important

    eCalc™ will no longer auto-detect rates and set interpolation type based on recognized +rate vectors. If different vectors (e.g. pressures and rates) should be interpolated differently, they now need +to be in separate files.

    +

    3. Empty data in time series columns no longer allowed

    +

    Each column in a time series resource should have data for all time steps, eCalc™ will now show an error if this is not the case. +The reason behind this is that it can be ambiguous to know whether missing data should be interpolated or considered as 0. Now +users will have to be explicit, and this will lead to fewer ambiguities and errors.

    +

    4. New LTP Category: STEAM-TURBINE-GENERATOR

    +

    A new LTP requirement to report steam turbine generator consumption/generation. This affects the total generator production +negatively (reduced load), as some energy is provided through this steam turbine generator. It is therefore modelled as a consumer +with a negative load in order to subtract from the total energy provided by the generator set.

    +

    The load on the steam turbine generator is reported separately in a new column in LTP Export.

    +

    Added new CATEGORY with name STEAM-TURBINE-GENERATOR to report power generated by a steam turbine. +Should be negative load to deduct from genset. See excerpt example below:

    +
        - NAME: steamgen
    CATEGORY: STEAM-TURBINE-GENERATOR
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: -1.1 # MW
    +
    important

    Set negative load for STEAM-TURBINE-GENERATOR (similar to the way OFFSHORE-WIND is being used)

    + + \ No newline at end of file diff --git a/docs/about/miscellaneous/index.html b/docs/about/miscellaneous/index.html new file mode 100644 index 0000000000..13e3b19933 --- /dev/null +++ b/docs/about/miscellaneous/index.html @@ -0,0 +1,43 @@ + + + + + +Output data | eCalc™ Docs + + + + +

    Output data

    +

    In general, each model is outputted to a .csv file with what is viewed as necessary information for an operator. +Further details, if necessary, can be seen in a .json file.

    +

    Decimals and significant digits in eCalc

    +

    Output numbers/result in eCalc are currently given at "6 significant digits/figures accuracy". This statement is valid +for positive and negative integers and float numbers. Read more about significant digits here.

    +
    caution

    Be aware that the output is never more accurate than the input (ie the measurements/prognosis). So, e.g. if your input +is rounded off to "nearest million", then that is also how you should consider the accuracy of the output. The output accuracy +is not more reliable than the lowest input accuracy given.

    +

    In practice, for the output, this means:

    +
      +
    • Numbers higher than 1e6 (and lower than -1e6) will not have digits after decimal sign
    • +
    • Numbers smaller than 1e-6 (and -1e-6) is considered to be 0 (rounded to 0), and we will +not operate with more than 6 digits after the decimal sign.
    • +
    • We only round numbers in the decimal part, to within the "significant digits"
    • +
    +

    We may in the future allow user to specify number of significant digits in output, but for now it is fixed.

    +

    Quality control

    +

    eCalc™ has a quality control function, which is represented by a validity flag. This validity flag gives the user information to whether or not their model is valid. +This flag can either be seen in the .csv or .json output file. +Essentially, if the <name>.is_valid is shown as a 1, the level is considered to be valid, and on the opposite end if it is shown to be 0, it can be considered invalid.

    +

    The most likely reason for an invalid flag is that a consumer (pump, compressor) is operating outside its operational limit (potentially outside the pump/compressor chart).

    +

    This validity flag can be seen on multiple component levels:

    +
      +
    • The highest level being the eCalc™ model (or otherwise known as the asset level). If the highest level flag is given as invalid, this means that any number of the installations in the model can have one or more invalid consumer.
    • +
    • If you dig further down in the component levels, the next would be on installation level. This means that if this flag is given as invalid, any consumer within that installation can be invalid.
    • +
    • Past the installation level, is the consumer level. Here, the validity of the individual consumers can be seen.
    • +
    • If the consumer is a multi-stage compressor (for example), the validity of each compression stage can be viewed (only in the .json file when detailed output is selected)
    • +
    +

    This is further illustrated in the diagram below:

    +

    Validity flag example

    + + \ No newline at end of file diff --git a/docs/about/modelling/examples/advanced/index.html b/docs/about/modelling/examples/advanced/index.html new file mode 100644 index 0000000000..3d3fc5bccc --- /dev/null +++ b/docs/about/modelling/examples/advanced/index.html @@ -0,0 +1,144 @@ + + + + + +Advanced model | eCalc™ Docs + + + + +

    Advanced model example

    +

    This is a model very similar to Simple example. The main difference is the use of more advanced +energy usage models and consumer systems, and the addition of a second installation.

    +

    Both installations exports oil (OIL_PROD) and gas (GAS_PROD). +The installations emits CO2 and CH4.

    +

    The following is an example with one installation called Installation A and Installation B.

    + +

    The results of a performed characterization of the equipment are listed below:

    +
    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production load APower consumerProduction base load varying depending on a binary condition
    Gas export compressor APower consumerVariable consumption depending on gas sales rate
    Produced water reinjection pump APower consumerVariable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.
    Sea water injection pump APower consumerVariable consumption depending on a complex combination on water injection rate and water production rate
    Flare ADirect fuel consumerFlare A
    Generator set BGenerator setVariable fuel consumption with electricity to fuel function
    Base production load BPower consumerProduction base load at 7.6 MW
    Gas export compressor BDirect fuel consumerVariable fuel consumption depending on gas sales rate
    Flare BDirect fuel consumerFlare B
    +

    YAML model overview

    +

    The YAML model consist of these main components:

    + +

    The YAML setup file looks like this:

    +
    model.yaml
    TIME_SERIES:
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    VARIABLES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>
    +

    We will now replace the placeholders for each of the main keywords above.

    +

    TIME_SERIES

    +

    The reservoir variables, in this case, are found in a CSV (Comma separated file) production_data.csv. +We give the time-series data a name that can be referenced as variables elsewhere in the form <NAME>:<NAME OF COLUMN>. +See TIME_SERIES for further details.

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    TYPE: DEFAULT
    FILE: base_profile.csv
    +

    FACILITY_INPUTS

    +

    We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets, +tabulated/sampled models and pump charts. See FACILITY_INPUTS for further details.

    +

    Here we define a tabulated genset, a sampled compressor, and a single speed pump chart. +Note that more complicated energy models are defined under the MODELS-keyword.

    +
    model.yaml
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: gasexp
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    +

    FUEL_TYPES

    +

    In this example there are two FUEL_TYPES - fuel_gas and bad_fuel_gas. +These are used for Installation A and Installation B respectively. +Here we also define emissions in CO2 and CH4:

    +
    model.yaml
    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.20 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    - NAME: bad_fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 5.0 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    +

    MODELS

    +

    This advanced example requires some energy usage models to be defined under the model section. See MODELS for details.

    +

    Here we specify:

    +
      +
    • Compressor chart based on design points
    • +
    • Compressor chart based on chart data
    • +
    • Medium density fluid
    • +
    • Gas turbine
    • +
    • Simplified compressor train model
    • +
    +
    model.yaml
    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 10000
    DESIGN_HEAD: 80
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M # M or KJ_PER_KG
    EFFICIENCY: FRACTION
    CURVES:
    FILE: compressor_chart.csv
    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # [MJ/Sm3]
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart
    +

    See MODELS for further details.

    +

    VARIABLES

    +

    To run the model it is recommended to specify VARIABLES, +instead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model +by allowing descriptive variable names and avoid duplications.

    +

    For our model, we specify the following variables:

    +
    model.yaml
    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    water_injection_rate:
    VALUE: SIM;WATER_INJ
    gas_export_condition:
    VALUE: SIM;GAS_PROD > 0
    base_production_load_mw:
    VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)
    water_injection_condition:
    VALUE: SIM;WATER_PROD >0
    flare_a_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 5000
    2030-01-01:
    VALUE: 2000
    flare_b_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 10000
    2030-01-01:
    VALUE: 7000
    +

    We reference the TIME_SERIES SIM using the column names from the CSV file.

    +
    tip

    You can use boolean condition such as shown in base_production_load_mw and time varying variables such as shown in +flare_a_fuel_rate_sm3_day and flare_b_fuel_rate_sm3_day to write simpler models with less duplicated code.

    The base_production_load_mw adds another 4.1 MW when the gas lift injection rate is positive.

    The flare rate changes in year 2030.

    +

    INSTALLATIONS

    +

    An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form +of generatorsets (with electric sub-consumers), and direct fuel consumers.

    +

    We specify:

    +
      +
    • NAME: the installation name
    • +
    • HCEXPORT: Hydrocarbon export in Sm3/day by referring to the variable $var.hydrocarbon_export_sm3_per_day specified under VARIABLES above.
    • +
    • FUEl: Default fuel specified in FUEL_TYPES above. Note the different fuels used by the two installations.
    • +
    • CATEGORY: FIXED (installation) category is used to group result data for reporting. See CATEGORY for details.
    • +
    +
    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>
    - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>
    +

    Installation A

    +

    There is one generator set, Generator set A. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumers getting +power from the generator set are Base production load, Gas injection compressor, Produced water reinjection pump +and Sea-water injection pump.

    +

    The direct fuel consumers are Flare.

    +

    The setup for Installation A thus becomes:

    +
      - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set A
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL: <placeholder>
    FUELCONSUMERS:
    - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL: <placeholder>
    +

    Installation B

    +

    There is one generator set, Generator set B. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumer getting +power from the generator set is Base production load.

    +

    The direct fuel consumers are Flare and Gas export compressor.

    +

    The setup for Installation B thus becomes:

    +
      - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set B
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL: <placeholder>
    FUELCONSUMERS:
    - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL: <placeholder>
    - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL: <placeholder>
    +

    ENERGY_USAGE_MODEL

    +

    We will now fill in the final placeholders with detailed ENERGY_USAGE_MODELs.

    +

    Base production loads A has a load of 7.6 MW with additional 4.1 MW when the field gas injection rate is positive:

    +
              - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: $var.base_production_load_mw
    +

    Gas export compressor system A is represented by a consumer system of two simplified compressor train models. +The system has defined the variable gas_export_rate_sm3_per_day and will run two different +rate distributions between these two compressor trains. It will first send all rate to the first compressor train +and nothing to the second RATE_FRACTIONS: [1.0, 0.0] and then it will run the same input while distributing equal +rates to the two compressor trains RATE_FRACTIONS: [0.5, 0.5]. The final result will be composed of the first +setting that returns a valid result for the compressors. +See COMPRESSOR_SYSTEM for further details.

    +

    The model compressor model is defined:

    +
              - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    - NAME: train2_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1.0, 0.0]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    +

    Water injection pump system A is variable and its energy function is dependent on the field's water +injection rate (WATER_INJ) that is set in the variable water_injection_rate as SIM;WATER_INJ. +The pump only runs when the variables water_injection_condition evaluates to true as SIM;WATER_PROD > 0. +This is when the water injection rate is positive. Fluid density, suction pressure and discharge pressure +is also defined.

    +

    This PUMP_SYSTEM behaves much the same as the COMPRESSOR_SYSTEM above. +See PUMP_SYSTEM for further details.

    +
              - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: pump_chart
    - NAME: pump2
    CHART: pump_chart
    - NAME: pump3
    CHART: pump_chart
    - NAME: pump4
    CHART: pump_chart
    FLUID_DENSITY: 1026
    TOTAL_SYSTEM_RATE: $var.water_injection_rate
    CONDITION: $var.water_injection_condition
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0]
    SUCTION_PRESSURES: [3, 3, 3, 3]
    DISCHARGE_PRESSURES: [200, 200, 200, 200]
    CROSSOVER: [2, 0, 0, 0]
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    +

    Single pump A has an energy function that is dependent on the seawater injection rate, same as the system above. +It uses the pump_chart defined in FACILITY_INPUTS above.

    +

    The pump model is then defined:

    +
              - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.water_injection_condition
    ENERGYFUNCTION: pump_chart
    RATE: 5000
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1026
    +

    The Flare A is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_a_fuel_rate_sm3_day.

    +

    The model becomes:

    +
          - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_a_fuel_rate_sm3_day
    +

    Base production loads B has a load of 7.6 :

    +
              - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 7.6
    +

    The Flare B is changing on the 1st of July 2020 and 1st of January 2030. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_a_fuel_rate_sm3_day.

    +

    The model becomes:

    +
          - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_b_fuel_rate_sm3_day
    +

    The Gas export compressors B is a variable fuel consumer whose energy function depends on the field gas production rate (GAS_PROD) defined +in the variable gas_export_rate_sm3_per_day as SIM;GAS_PROD, and put to the condition gas_export_condition as SIM;GAS_PROD > 0

    +

    The model is specified:

    +
          - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: gasexp
    CONDITION: $var.gas_export_condition
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 200
    +

    Full eCalc YAML model

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    TYPE: DEFAULT
    FILE: base_profile.csv

    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: gasexp
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.20 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3
    - NAME: bad_fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 5.0 #kg/Sm3
    - NAME: CH4
    FACTOR: 0.01 #kg/Sm3

    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 10000
    DESIGN_HEAD: 80
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M # M or KJ_PER_KG
    EFFICIENCY: FRACTION
    CURVES:
    FILE: compressor_chart.csv
    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart

    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    water_injection_rate:
    VALUE: SIM;WATER_INJ
    gas_export_condition:
    VALUE: SIM;GAS_PROD > 0
    base_production_load_mw:
    VALUE: 7.6 {+} 4.1 {*} (SIM;GAS_LIFT > 0)
    water_injection_condition:
    VALUE: SIM;WATER_PROD >0
    flare_a_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 5000
    2030-01-01:
    VALUE: 2000
    flare_b_fuel_rate_sm3_day:
    2020-06-01:
    VALUE: 10000
    2030-01-01:
    VALUE: 7000

    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set A
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads A
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: $var.base_production_load_mw
    - NAME: Gas export compressors system A
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    - NAME: train2_A
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: $var.gas_export_rate_sm3_per_day
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1.0, 0.0]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 120
    - NAME: Water injection pump system A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: pump_chart
    - NAME: pump2
    CHART: pump_chart
    - NAME: pump3
    CHART: pump_chart
    - NAME: pump4
    CHART: pump_chart
    FLUID_DENSITY: 1026
    TOTAL_SYSTEM_RATE: $var.water_injection_rate
    CONDITION: $var.water_injection_condition
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0]
    SUCTION_PRESSURES: [3, 3, 3, 3]
    DISCHARGE_PRESSURES: [200, 200, 200, 200]
    CROSSOVER: [2, 0, 0, 0]
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - NAME: Single pump A
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.water_injection_condition
    ENERGYFUNCTION: pump_chart
    RATE: 5000
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1026
    FUELCONSUMERS:
    - NAME: Flare A
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_a_fuel_rate_sm3_day

    - NAME: Installation B
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: bad_fuel_gas
    CATEGORY: FIXED
    GENERATORSETS:
    - NAME: Generator set B
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Fixed production loads B
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 7.6
    FUELCONSUMERS:
    - NAME: Flare B
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_b_fuel_rate_sm3_day
    - NAME: Gas export compressors B
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: gasexp
    CONDITION: $var.gas_export_condition
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 20
    DISCHARGE_PRESSURE: 200
    +

    Input files

    +
    compressor_chart.csv
    RATE,       HEAD,   EFFICIENCY, SPEED
    # [m3/h], [m], [frac], [rpm]
    3000, 8500, 0.72, 7500
    3500, 8000, 0.75, 7500
    4000, 7500, 0.74, 7500
    4500, 6500, 0.70, 7500
    4100, 16500, 0.72, 10500
    4600, 16000, 0.73, 10500
    5000, 15500, 0.74, 10500
    5500, 14500, 0.74, 10500
    6000, 13500, 0.72, 10500
    6500, 12000, 0.70, 10500
    +
    compressor_sampled.csv
    RATE,   FUEL
    0, 0
    0.01, 100
    10, 500
    20, 1200
    +
    genset.csv
    POWER,  FUEL
    # [MW], [Sm3/d]
    0, 0
    0.1, 75000
    10, 80000
    20, 100000
    50, 500000
    100, 1000000

    +
    pump_chart.csv
    RATE,       HEAD,   EFFICIENCY, SPEED
    # [m3/h], [m], [%], [rpm]
    250, 2350, 50, 10000
    300, 2300, 55, 10000
    350, 2250, 60, 10000
    400, 2200, 70, 10000
    450, 2150, 75, 10000
    500, 2100, 80, 10000
    550, 2050, 75, 10000
    600, 2000, 70, 10000
    +
    base_profile.csv
    DATE,           OIL_PROD,  WATER_PROD,  GAS_PROD,  WATER_INJ,  GAS_LIFT
    01.01.2020, 1000, 20000, 4000000, 30000, 1200000
    01.01.2021, 1000, 20000, 4000000, 30000, 1200000
    01.01.2022, 1000, 20000, 4000000, 30000, 1200000
    01.01.2023, 2500, 21000, 4000000, 30000, 1200000
    01.01.2024, 3000, 22000, 4500000, 28000, 1300000
    01.01.2025, 3500, 23000, 5000000, 26000, 1350000
    01.01.2026, 4000, 24000, 5500000, 25000, 1400000
    01.01.2027, 4000, 25000, 6000000, 24000, 1400000
    01.01.2028, 4000, 20000, 6000000, 23000, 1400000
    01.01.2029, 5000, 20000, 5500000, 22000, 1350000
    01.01.2030, 9000, 20000, 5000000, 21000, 1300000
    01.01.2031, 5000, 20000, 3000000, 22000, 1300000
    01.01.2032, 4000, 22100, 3000000, 23000, 2000000
    01.01.2033, 4000, 22100, 3000000, 23000, 2000000
    01.01.2034, 1200, 25000, 1000000, 21000, 2000000
    01.01.2035, 1100, 25000, 1000000, 20000, 1500000
    01.01.2036, 1000, 22000, 500000, 18000, 1400000
    01.01.2037, 900, 20000, 500000, 17000, 1400000
    01.01.2038, 800, 18000, 500000, 17000, 1400000
    01.01.2039, 700, 18000, 200000, 17000, 1400000
    01.01.2040, 600, 10000, 200000, 15000, 1400000
    01.01.2041, 0, 0, 0, 0, 0
    + + \ No newline at end of file diff --git a/docs/about/modelling/examples/drogon/index.html b/docs/about/modelling/examples/drogon/index.html new file mode 100644 index 0000000000..fbb2c63d2c --- /dev/null +++ b/docs/about/modelling/examples/drogon/index.html @@ -0,0 +1,73 @@ + + + + + +Drogon model | eCalc™ Docs + + + + +

    Drogon model example

    +

    The Drogon example is based on a synthetic data set.

    +

    On the installation, the following consumers are identified:

    + +

    The results of a performed characterization of the equipment are listed below:

    +
    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production loadPower consumerConstant load - 9 MW
    Gas compression trainPower consumerVariable consumption depending on produced gas rate
    Gas re-compressorsPower consumerConstant load - 2 MW
    Sea water injection pumpPower consumerVariable consumption depending on water injection rate
    Booster pumpPower consumerConstant load - 2 MW
    +

    YAML model overview

    +

    The YAML model consists of the following components:

    +
      +
    • Time series input
    • +
    • Facility inputs
    • +
    • Model inputs
    • +
    • Fuel type input
    • +
    • Installation topography
    • +
    +

    The skeleton of the YAML file looks like the following:

    +
    TIME_SERIES: 
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    MODELS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>
    +

    TIME_SERIES

    +

    The reservoir variables. In this case the file is called: drogon_mean.csv.

    +
    TIME_SERIES: 
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: drogon_mean.csv
    +

    FACILITY_INPUTS

    +

    In this case, the compressors are not specified in this section as GENERIC COMPRESSOR CHARTS. Thus, the pump chart and generator set will be the only facility components specified within this section.

    +

    The pump will be single speed, meaning that the pump type will be PUMP_CHART_SINGLE_SPEED. The generator set will be a tabulated, where power consumption will be linked to fuel gas utilised.

    +
    FACILITY_INPUTS: 
    - NAME: genset_a_power_fuel
    TYPE: ELECTRICITY2FUEL
    FILE: genset.csv
    - NAME: wi_200
    FILE: wi_200bar_ssp.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    +

    MODELS

    +

    The model section will contain the fluid model, the compressor chart and the subsequent compressor model. +Peng-Robinson (PR) will be the selected equation of state in this example.

    +

    This example will use a generic compressor chart. In this case, a generic compressor chart from input will utilised. Here, the a "typical" chart will be shifted to match the input head and rate data. See GENERIC COMPRESSOR CHARTS for more details. When a generic chart is used, a polytropic efficiency needs to be specified. This value will be constant throughout the use, in this case a value of 0.8 is used.

    +

    A SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN model is used in this example, as this is necessary when a generic chart is used. Instead of manually specifying the number of compression stages, a MAXIMUM_PRESSURE_RATIO_PER_STAGE of 3.5 is defined. This will automatically distribute the pressure increase amongst the compression train so that no pressure ratio per compression stage will be above 3.5.

    +
    MODELS:
    - NAME: drogon_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: PR
    COMPOSITION:
    water: 0.0
    nitrogen: 0.510676386339746
    CO2: 2.44965511776504
    methane: 75.6328106126248
    ethane: 10.9074631209139
    propane: 8.11875087121037
    i_butane: 0.849146377471569
    n_butane: 1.34903656604691
    i_pentane: 0.104982143381498
    n_pentane: 0.071218218251483
    n_hexane: 0.0063

    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.8
    UNITS:
    EFFICIENCY: FRACTION

    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: drogon_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 19.3
    +

    FUEL_TYPES

    +

    The fuel gas has a CO2 factor of 2.416.

    +
    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.416 #CO2/Sm3 fuel gas burned
    +

    INSTALLATIONS

    +

    In the INSTALLATIONS section, the previously defined models and facility inputs are further defined. Here the hydrocarbon export can be specified. This is used in order to get a hydrocarbon-to-emission value. In this case, it is assumed that this facility exports oil (OIL_PROD) and gas (GAS_PROD).

    +
    INSTALLATIONS:
    - NAME: drogon_installation
    CATEGORY: FIXED
    HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000
    FUEL: fuel_gas
    +

    GENERATORSETS

    +

    There is one generator set used in this example - Generator set A. This is a tabular relationship between power generated/consumed and fuel gas burnt. +Under this category, all consumers that utilise electricity are defined. In this case scenario, all pumps and compressors are electrically driven; thus, all consumers will be specified under this category.

    +
        GENERATORSETS:
    - NAME: main_power
    ELECTRICITY2FUEL: genset_a_power_fuel
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    +

    PUMPS

    +

    The previously defined variable speed pump (in FACILITY_INPUTS) is put into further defined with suction and discharge pressures, rates and operational settings.

    +

    Here, a system of pumps is used. This means that instead of a single pump being used to deliver the respective injection rate, a system of pumps is defined. In this case, a system of two pumps will be used. If the first pump is unable to deliver the requested head or rate, a second pump will be additionally used and the rate will be split across the pump system. +As only one pump has been defined, the same pump model will be used for each train. As each pump is identical, the rate will be equally split across the train when needed (this is to ensure the highest pump efficiency - see PUMP MODELLING for more details.)

    +

    A fluid density of 1025 kg/m3 is used, with a suction and discharge pressure of 12 and 200 bar respectively.

    +
              - NAME: water injection
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a_lp
    CHART: wi_200
    - NAME: pump_b_lp
    CHART: wi_200
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1025
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    - 0
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS:
    - 0.5
    - 0.5
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    +

    COMPRESSORS

    +

    For the compression model, a compressor system is not used. This is due to the use of generic compressor charts. As the generic charts are shifted from input data there is no need for an additional compression train. No matter what rate/head values are inputted here, the generic chart is shifted so that all operational points will be within the operational envelope of the compressor.

    +

    Here, 13 bar and 421 bar is specified for the suction and discharge pressure respectively.

    +
              - NAME: gas export compressor train
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_2
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    SUCTION_PRESSURE: 13
    DISCHARGE_PRESSURE: 421
    +

    BASE-LOAD

    +

    Three different constant-loads are specified in this section. These being the booster pump, the re-compressors and then the general facility base-load.

    +
              - NAME: boosterpump
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    - NAME: baseload
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 9
    - NAME: re-compressors
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2

    +

    Full Model

    +
    TIME_SERIES:
    - NAME: SIM1
    FILE: drogon_mean.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    - NAME: genset_a_power_fuel
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: wi_200
    FILE: wi_200bar_ssp.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    MODELS:
    - NAME: drogon_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: PR
    COMPOSITION:
    water: 0.0
    nitrogen: 0.510676386339746
    CO2: 2.44965511776504
    methane: 75.6328106126248
    ethane: 10.9074631209139
    propane: 8.11875087121037
    i_butane: 0.849146377471569
    n_butane: 1.34903656604691
    i_pentane: 0.104982143381498
    n_pentane: 0.071218218251483
    n_hexane: 0.0063
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.8
    UNITS:
    EFFICIENCY: FRACTION
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: drogon_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 19.3
    FUEL_TYPES:
    - NAME: fuel_gas
    CATEGORY: FUEL-GAS
    EMISSIONS:
    - NAME: co2_fuel_gas
    FACTOR: 2.416
    INSTALLATIONS:
    - NAME: drogon_installation
    CATEGORY: FIXED
    HCEXPORT: SIM1;OIL_PROD {+} SIM1;GAS_PROD {/} 1000
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: main_power
    ELECTRICITY2FUEL: genset_a_power_fuel
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: wi_lp
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a_lp
    CHART: wi_200
    - NAME: pump_b_lp
    CHART: wi_200
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1025
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    - 0
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS:
    - 0.5
    - 0.5
    SUCTION_PRESSURE: 12
    DISCHARGE_PRESSURE: 200

    - NAME: gas export compressor train
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: train1_2
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS:
    - 1
    SUCTION_PRESSURE: 13
    DISCHARGE_PRESSURE: 421

    - NAME: boosterpump
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    - NAME: baseload
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 9
    - NAME: re-compressors
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 2
    +

    Input Data

    +

    Facility resources

    +
    genset.csv
    POWER, FUEL
    # [MW], [Sm3/d]
    0,0
    2.38,37766.13
    4.76,50769.26
    5.9,59258.52
    7.14,63772.39
    9.52,76775.52
    10.71,83277.09
    11.9,89808.09
    14.28,102781.8
    16.66,115784.9
    17.8,119883.6
    19.04,128788
    21.42,141791.2
    21.4201,166554.2
    28.56,205563.6
    33.32,231569.8
    38.08,257576.1
    42.84,283582.3
    +
    wi_200bar_ssp.csv
    RATE,HEAD,EFFICIENCY,SPEED
    830,1490,81,3741
    800,1550,81.7,3741
    600,1825,78,3741
    500,1915,72.5,3741
    415,1955,66,3741
    +

    Timeseries resources

    +
    drogon_mean.csv
    DATE,GAS_PROD,OIL_PROD,WATER_INJ
    01.01.2020,329327.76,2301.9189,3796.9621
    01.01.2021,533620.39,3699.8435,8533.0322
    01.01.2022,416004.76,2837.5915,9434.1385
    01.01.2023,340118.19,2280.7372,10019.154
    01.01.2024,290127.01,1905.7952,10428.387
    01.01.2025,253292.19,1635.7671,10725.254
    01.01.2026,223584.53,1426.9726,10954.338
    01.01.2027,198453.07,1249.781,11153.675
    01.01.2028,177306.77,1099.8572,11318.01
    01.01.2029,159723.78,977.37529,11450.614
    01.01.2030,145056.33,875.30836,11561.335
    01.01.2031,132577.75,788.45521,11654.645
    01.01.2032,122166.68,715.64707,11734.129
    01.01.2033,113070.74,653.71407,11802.565
    01.01.2034,105114.67,600.04874,11860.717
    01.01.2035,98147.958,553.56297,11910.283
    + + \ No newline at end of file diff --git a/docs/about/modelling/examples/index.html b/docs/about/modelling/examples/index.html new file mode 100644 index 0000000000..939791a7dc --- /dev/null +++ b/docs/about/modelling/examples/index.html @@ -0,0 +1,20 @@ + + + + + +Examples | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/examples/simple/index.html b/docs/about/modelling/examples/simple/index.html new file mode 100644 index 0000000000..82d0f032bd --- /dev/null +++ b/docs/about/modelling/examples/simple/index.html @@ -0,0 +1,130 @@ + + + + + +Simple model | eCalc™ Docs + + + + +

    Simple model example

    +

    The following is an example with one installation called Installation A that exports oil (OIL_PROD) and gas (GAS_PROD). +The installation emits CO2.

    +

    On this installation, the following components are identified:

    + +

    The results of a performed characterization of the equipment are listed below:

    +
    ConsumerTypeDescription
    Generator set AGenerator setVariable fuel consumer with electricity to fuel function
    Base production loadPower consumerConstant load 11.8 MW
    Gas injection compressorPower consumerVariable consumption depending on gas injection rate and lift gas rate
    Produced water reinjection pumpPower consumerVariable consumption depending on water production rate and water injection rate. The pump suction pressure is 10 bar and discharge pressure is 200 bar.
    Sea water injection pumpPower consumerVariable consumption depending on a complex combination on water injection rate and water production rate
    FlareDirect fuel consumerBefore 1.1.2005: Constant fuel rate 10000 Sm3/day, From 1.1.2005: Constant fuel rate 7000 Sm3/day
    Gas export compressorDirect fuel consumerVariable fuel consumer depending on gas sales rate
    +

    YAML model overview

    +

    The YAML model consist of these main components:

    + +

    The YAML setup file looks like this:

    +
    model.yaml
    TIME_SERIES:
    <placeholder>
    FACILITY_INPUTS:
    <placeholder>
    FUEL_TYPES:
    <placeholder>
    VARIABLES:
    <placeholder>
    INSTALLATIONS:
    <placeholder>
    +

    We will now replace the placeholders for each of the main keywords above.

    +

    TIME_SERIES

    +

    The reservoir variables, in this case, are found in a CSV (Comma separated file) production_data.csv. +We give the time-series data a name that can be referenced as variables elsewhere in the form <NAME>:<NAME OF COLUMN>. +See TIME_SERIES for further details.

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    FILE: production_data.csv
    TYPE: DEFAULT
    +

    FACILITY_INPUTS

    +

    We specify CSV input data for processing equipment using FACILITY_INPUTS. This is used for generatorsets, +tabulated/sampled models and pump charts. +See FACILITY_INPUTS for further details.

    +

    Here we define a tabulated genset, a sampled compressor, a sampled compressor driven by a turbine, a sampled pump, +and a single speed pump chart. These will be used in the final model for illustration. +Note that more complicated energy models are defined under the MODELS-keyword.

    +

    See the input data further down to understand the input formats.

    +
    model.yaml
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: compressor_sampled
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: compressor_with_turbine_sampled
    FILE: compressor_sampled_with_turbine.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_sampled
    FILE: pump_sampled.csv
    TYPE: TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    +

    FUEL_TYPES

    +

    In this example there is only one FUEL_TYPES - fuel_gas. The emissions we model with the fuel is CO2. The CO2 factor +is 2.19 kg CO2 per Sm3 fuel gas burned.

    +
    model.yaml
    FUEL_TYPES:
    - NAME: fuel_gas
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.19 #CO2/Sm3 fuel gas burned
    +

    VARIABLES

    +

    To run the model it is recommended to specify VARIABLES, +instead of hard coding values in difference places. This makes it easier to develop, maintain and understand the model +by allowing descriptive variable names and avoid duplications.

    +

    For our model, we specify the following variables:

    +
    model.yaml
    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent
    sea_water_injection_rate_m3_per_day:
    VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    gas_injection_rate_sm3_per_day:
    VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT
    produced_water_reinjection_condition:
    VALUE: SIM;WATER_PROD > 1500
    produced_water_reinjection_total_system_rate_m3_per_day:
    VALUE: SIM;WATER_PROD
    flare_fuel_rate_sm3_day:
    1995-10-01:
    VALUE: 10000
    2005-01-01:
    VALUE: 7000
    +

    We reference the TIME_SERIES SIM using the column names from the CSV file. Here we use for example +SIM:OIL_PROD (Field Oil Production Rate) SIM:GAS_PROD (Field Gas Sales Rate).

    +
    tip

    It is possible to specify if-else conditions by multiplying with boolean values. +This has been done in the $var.sea_water_injection_rate_m3_per_day variable example above.

    +

    INSTALLATION

    +

    An installation is composed of hydrocarbon export, a default fuel for that installation and consumers in the form +of generatorsets (with electric sub-consumers), and direct fuel consumers.

    +

    We specify:

    +
      +
    • NAME: the installation name
    • +
    • HCEXPORT: Hydrocarbon export in Sm3/day by referring to the variable specified under VARIABLES above.
    • +
    • FUEl: Default fuel specified in FUEL_TYPES above.
    • +
    +
    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    GENERATORSETS:
    <placeholder>
    FUELCONSUMERS:
    <placeholder>
    +

    GENERATORSETS

    +

    There is one generator set, Generator set A. This has a power to fuel function defined in +FACILITY_INPUTS with the name genset. Further, the consumers getting +power from the generator set are Base production load, Gas injection compressor, Produced water re-injection pump +and Sea-water injection pump. The setup for Generator set A thus becomes:

    +
        GENERATORSETS:
    - NAME: Generator set A
    ELECTRICITY2FUEL: genset
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    <placeholder>
    +

    FUELCONSUMERS

    +

    The direct fuel consumers are Flare and Gas export compressor.

    +
    model.yaml
        FUELCONSUMERS:
    - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    <placeholder>
    - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <placeholder>
    +

    ENERGY_USAGE_MODEL

    +

    We will now fill in the final placeholders with detailed ENERGY_USAGE_MODELs.

    +

    Base production load has a constant load of 11.8 MW:

    +
              - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 11.8 # MW
    +

    Gas injection compressor is represented by a tabulated (sampled) energy usage model defining the relationship +between the gas injection rate [Sm3/day] and the corresponding power requirement. The gas rate is already defined +in the variable gas_injection_rate_sm3_per_day as SIM;GAS_INJ {+} SIM;GAS_LIFT:

    +
              - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_sampled
    RATE: $var.gas_injection_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    +

    Produced water reinjection pump is variable and its energy function is dependent on the field's water +production rate (WATER_PROD) that is set in the variable produced_water_reinjection_condition as SIM;WATER_PROD. +The pump only runs when the variables produced_water_reinjection_condition evaluates to true as SIM;WATER_PROD > 1500. +This is when the water production is above 1500 Sm3/day. Fluid density, suction pressure and discharge pressure +is also defined:

    +
              - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.produced_water_reinjection_condition
    ENERGYFUNCTION: pump_chart
    RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day
    FLUID_DENSITY: 1010
    SUCTION_PRESSURE: 10 # [bara]
    DISCHARGE_PRESSURE: 200 # [bara]
    +

    Sea water injection pump has an energy function that is dependent on the seawater injection rate. +This rate is not modeled explicitly in the reservoir input source, but it may be computed +from the injection (WATER_INJ) and production (WATER_PROD) rate by the following rules:

    +
      +
    • +

      In general, the seawater injection rate (SEAWATER_INJ), is the difference between injected and +produced water: SEAWATER_INJ = WATER_INJ - WATER_PROD.

      +
    • +
    • +

      When the produced water rate is below 1500 SM3/day, this goes directly to sea, such that +SEAWATER_INJ = WATER_INJ when WATER_PROD < 1500.

      +
    • +
    • +

      When the produced water rate is between 17000 and 18500 SM3/day, everything above 17000 SM3/day +goes directly to the sea, thus SEAWATER_INJ = WATER_INJ - 17000 when 17000 < WATER_PROD < 18500.

      +
    • +
    +

    This is specified as the variable sea_water_injection_rate_m3_per_day above and is defined as:

    +

    The model is specified:

    +
              - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: pump_sampled
    VARIABLES:
    - NAME: RATE
    EXPRESSION: $var.sea_water_injection_rate_m3_per_day
    +

    The flare is changing on the 1st of January 2005. Therefore, we need to use a different constant +fuel consumption value before and after this date. This is done using the variable flare_fuel_rate_sm3_day +above.

    +

    The model is specified:

    +
          - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_fuel_rate_sm3_day
    +

    Gasexport is a variable fuel consumer whose energy function depends on the field gas sales rate (GAS_PROD) defined +in the variable gas_export_rate_sm3_per_day as SIM;GAS_PROD. Even though it is not used in the eCalc model, suction and discharge pressure needs to be specified in order for the model to run.

    +

    The model is specified:

    +
          - NAME: Gas export compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: GAS-DRIVEN-COMPRESSOR
    ENERGYFUNCTION: compressor_with_turbine_sampled
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    +

    Full eCalc YAML model

    +
    model.yaml
    TIME_SERIES:
    - NAME: SIM
    FILE: production_data.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    - NAME: genset
    FILE: genset.csv
    TYPE: ELECTRICITY2FUEL
    - NAME: compressor_sampled
    FILE: compressor_sampled.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: compressor_with_turbine_sampled
    FILE: compressor_sampled_with_turbine.csv
    TYPE: COMPRESSOR_TABULAR
    - NAME: pump_sampled
    FILE: pump_sampled.csv
    TYPE: TABULAR
    - NAME: pump_chart
    FILE: pump_chart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE

    FUEL_TYPES:
    - NAME: fuel_gas
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.19 # CO2/Sm3 fuel gas burned

    VARIABLES:
    hydrocarbon_export_sm3_per_day:
    VALUE: SIM;OIL_PROD {+} SIM;GAS_PROD {/} 1000 # divide the gas rate by 1000 to get oil equivalent
    sea_water_injection_rate_m3_per_day:
    VALUE: SIM;WATER_INJ {-} SIM;WATER_PROD {+} SIM;WATER_PROD {*} (SIM;WATER_PROD < 1500) {+} (SIM;WATER_PROD {-} 17000) {*} (SIM;WATER_PROD > 17000) {*} (SIM;WATER_PROD < 18500)
    gas_export_rate_sm3_per_day:
    VALUE: SIM;GAS_PROD
    gas_injection_rate_sm3_per_day:
    VALUE: SIM;GAS_INJ {+} SIM;GAS_LIFT
    produced_water_reinjection_condition:
    VALUE: SIM;WATER_PROD > 1500
    produced_water_reinjection_total_system_rate_m3_per_day:
    VALUE: SIM;WATER_PROD
    flare_fuel_rate_sm3_day:
    1995-10-01:
    VALUE: 10000
    2005-01-01:
    VALUE: 7000

    INSTALLATIONS:
    - NAME: Installation A
    HCEXPORT: $var.hydrocarbon_export_sm3_per_day
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: Generator set A
    ELECTRICITY2FUEL: genset
    CATEGORY: TURBINE-GENERATOR
    CONSUMERS:
    - NAME: Base production load
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 11.8 # MW
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_sampled
    RATE: $var.gas_injection_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    - NAME: Produced water reinjection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: $var.produced_water_reinjection_condition
    ENERGYFUNCTION: pump_chart
    RATE: $var.produced_water_reinjection_total_system_rate_m3_per_day
    FLUID_DENSITY: 1010
    SUCTION_PRESSURE: 10 # bara
    DISCHARGE_PRESSURE: 200 # bara
    - NAME: Sea water injection pump
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: pump_sampled
    VARIABLES:
    - NAME: RATE
    EXPRESSION: $var.sea_water_injection_rate_m3_per_day
    FUELCONSUMERS:
    - NAME: Flare
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: $var.flare_fuel_rate_sm3_day
    - NAME: Gas export compressor
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_with_turbine_sampled
    RATE: $var.gas_export_rate_sm3_per_day
    SUCTION_PRESSURE: 50 #not used but a number is needed for eCalc
    DISCHARGE_PRESSURE: 200 #not used but a number is needed for eCalc
    +

    Input files

    +
    compressor_sampled.csv
    RATE,POWER
    #[Sm3/day],[MW]
    0,0
    1,4.1
    100000000,4.1
    200000000,4.1
    210000000,4.1
    220000000,4.4
    230000000,4.8
    240000000,5.1
    250000000,5.4
    260000000,5.8
    270000000,6.1
    280000000,6.4
    290000000,6.8
    300000000,7.1
    500000000,14.2
    +
    compressor_sampled_with_turbine.csv
    RATE,FUEL
    #[Sm3/day],[Sm3/day]
    0,0
    0.1,50000
    3000000,50000
    3500000,130000
    7000000,170000
    +
    genset.csv
    POWER,FUEL
    #[MW],[Sm3/day]
    0, 0
    0.1, 65000
    10.0, 75000
    20.0, 126000
    40.0, 250000
    100.0, 750000
    +
    pump_chart.csv
    SPEED,RATE,HEAD,EFFICIENCY
    3250,250,2640,59
    3250,360,2490,68
    3250,500,2342,77
    3250,600,2210,80
    3250,667,2068,78
    3250,735,1870,74
    +
    pump_sampled.csv
    RATE,POWER
    #[Sm3/day],[MW]
    0,0
    1,3
    8500,4
    9000,4
    17000,6
    17500,9
    36000,13
    +
    production_data.csv
    Dates,                  OIL_PROD,  GAS_PROD,    WATER_PROD, WATER_INJ,  GAS_INJ,    GAS_LIFT
    #, Sm3/d, Sm3/d, m3/d, m3/d, Sm3/d, Sm3/d
    2020-01-01 00:00:00, 9000, 3500000, 18000, 34000, 2200000, 130000
    2021-01-01 00:00:00, 8000, 3600000, 19000, 33000, 2200000, 170000
    2022-01-01 00:00:00, 7000, 3700000, 15000, 30000, 2200000, 210000
    2023-01-01 00:00:00, 6000, 3800000, 16000, 33000, 2300000, 240000
    2024-01-01 00:00:00, 6000, 3900000, 14000, 35000, 2300000, 280000
    2024-12-01 00:00:00, 6000, 4000000, 15000, 36000, 2400000, 310000
    2026-01-01 00:00:00, 7000, 4100000, 18000, 36000, 2400000, 350000
    2027-01-01 00:00:00, 6000, 4500000, 15000, 38000, 2400000, 390000
    2028-01-01 00:00:00, 6000, 3500000, 12000, 33000, 2400000, 430000
    2029-01-01 00:00:00, 5000, 2500000, 14000, 36000, 2400000, 460000
    2030-01-01 00:00:00, 6000, 2000000, 16000, 35000, 2400000, 500000
    2031-01-01 00:00:00, 4000, 3000000, 14000, 33000, 2400000, 530000
    + + \ No newline at end of file diff --git a/docs/about/modelling/index.html b/docs/about/modelling/index.html new file mode 100644 index 0000000000..1b5980e540 --- /dev/null +++ b/docs/about/modelling/index.html @@ -0,0 +1,17 @@ + + + + + +Modelling guide | eCalc™ Docs + + + + +

    Modelling

    +

    This section describes how to use eCalc.

    +
    tip

    It is good practice when writing the eCalc YAML setup file to include, as comments, the version it was written for, your name and a ‘change log’ which should include the date and changes made.

    +

    The YAML setup file:

    +
    # ecalc version v5.3.1
    # input by: john.doe@example.com
    #
    # change log - add comments regarding relevant changes made to the file
    # date: YYYYMMDD, john doe
    # extended suction and discharge pressure range for precompressor
    # date: YYYYMMDD, jane doe
    # updated gensetA

    TIME_SERIES:
    - NAME: SIM1
    FILE: examplecase_inputvariables.csv
    TYPE: DEFAULT
    FACILITY_INPUTS:
    ...
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html b/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html new file mode 100644 index 0000000000..9218c49586 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/generator_modelling/index.html @@ -0,0 +1,29 @@ + + + + + +Generator modelling | eCalc™ Docs + + + + +

    Generator modelling

    +

    In eCalc™, the term generator refers to equipment producing electrical power from fuel. Hence, the turbine part (fuel combustion to produce mechanical energy) is included in the term.

    +

    An installation usually have one or more generators to fill the electrical power demand. In eCalc™, the separate generators are combined into a common generator set (genset).

    +
    note

    In the future, eCalc™ will most likely offer modelling of single generators that could be combined in systems.

    +

    ELECTRICITY2FUEL

    +

    Electricity to fuel is a table specifying the relationship between electrical load +and fuel consumption for an entire generator set. This means that if you have several generators, +this table needs to include a "jump" every time a new generator is started. An example of this +is shown below.

    +

    Under FACILITY_INPUTS, this electricity to fuel table is specified using the keyword ELECTRICITY2FUEL

    +

    Facility input format

    +
    FACILITY_INPUTS:
    - NAME: <generator name>
    FILE: <file path to .csv file>
    TYPE: ELECTRICITY2FUEL
    +

    Example table

    +

    The table for this curve would look like:

    +
    POWER, FUEL
    #[MW], [Sm3/day]
    0.00, 0.0
    0.10, 84000.0
    5.00, 84000.0
    42.0, 220000.0
    42.01, 280000.0
    45.0, 300000.0
    50.0, 330000.0
    60.0, 350000.0
    +

    Header and unit requirements

    +
    HeaderUnitMandatory
    PowerMWYes
    FuelSm3/dayYes
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/index.html b/docs/about/modelling/setup/facility_inputs/index.html new file mode 100644 index 0000000000..d7dd43212a --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/index.html @@ -0,0 +1,43 @@ + + + + + +Facility inputs | eCalc™ Docs + + + + +

    Facility inputs

    note

    The FACILITY_INPUTS keyword is mandatory within the eCalc™ YAML file.

    +

    This part of the setup defines input files that characterize various facility elements. Each facility element is +specified in a list. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME.

    +

    All facility inputs are in essence a CSV (Comma separated file) file that specifies input data to a model that +calculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple +supported types.

    +

    There are four categories of data that can be used here:

    +
      +
    • Files describing the performance of a generator set
    • +
    • Files describing the performance of pumps (pump charts)
    • +
    • Files describing the performance of only tabular compressors (sampled compressor data)
    • +
    • Other energy consuming equipment modeled variable w.r.t. reservoir management +(tabulated relationship between variables and consumption)
    • +
    +

    eCalc™ supports making simple adjustments to a table by using the ADJUSTMENT +keyword as well as modification of the HEAD_MARGIN +which can be used while calibrating pump charts.

    +

    Format

    +

    Each facility input has the skeleton as seen below. However, some inputs require further information. For example, pump models

    +
    FACILITY_INPUTS:
    - NAME: <reference name>
    FILE: <file_path.csv>
    TYPE: <consumer type>
    +

    Supported types

    +

    The facility input type is defined using the TYPE keyword and defines the type of model applied +to the data in this file. The input files are in CSV (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file.

    +

    The supported types are:

    +
      +
    • ELECTRICITY2FUEL
    • +
    • TABULAR
    • +
    • COMPRESSOR_TABULAR
    • +
    • PUMP_CHART_SINGLE_SPEED
    • +
    • PUMP_CHART_VARIABLE_SPEED
    • +
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html b/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html new file mode 100644 index 0000000000..3a36a1f145 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/pump_modelling/index.html @@ -0,0 +1,19 @@ + + + + + +Pump modelling | eCalc™ Docs + + + + +

    Pump modelling

    +

    Attention

    +

    Pumps can both be single speed and variable speed. Often, the pumping capacity on an installation is filled with a system of several pumps in parallel.

    +
    Attention

    The pump models in eCalc™ are intended for water, i.e., there is no friction dependency. +Thus, for usage in other types of pumps (e.g., where the +fluid viscosity changes with the fluid mixture), the results might not be as intended.

    +

    Core theory behind the modelling of pumps in eCalc™ can be found here.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html b/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html new file mode 100644 index 0000000000..0f72776da7 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts/index.html @@ -0,0 +1,67 @@ + + + + + +Pump chart | eCalc™ Docs + + + + +

    Pump chart

    +

    Energy usage for pumps is not based on pre-sampled data between rates, +pressures and energy usage, but on equations and the pump chart defining the pumps.

    +

    There are two types of pump models supported:

    +
      +
    • Variable speed pumps
    • +
    • Single speed pumps
    • +
    +

    The pump chart defines the pump's operational area. When rates below minimum flow +(a point with the lowest rate for a single speed pump and a line defined by the lowest rate vs. +head for each speed for variable speed) are requested, the rate is projected up and +evaluated at minimum flow to mimic the ASV (anti-surge valve).

    +

    For heads below minimum head/minimum speed, i.e., when the requested pressure +difference between the outlet and the inlet is smaller than the minimum pressure difference, +the head will be lifted up to minimum head to mimic that the pump will then be run on +its minimum speed and the pressure will be choked back downstream of the pump. +For single speed pumps, the minimum speed/minimum head curve is the same as +the head vs. rate curve.

    +
    Tip

    When calibrating pump charts to historical data, the head values for maximum speed could be +put in the cloud of data to be unbiased. However, eCalc will treat all head values above the +maximum defined in the chart as infeasible (outside pump capacity).

    To mitigate this when +running through historical data for power calibration, the keyword HEAD_MARGIN may be used to move points outside capacity (but inside the margin) to the capacity limit.

    +

    PUMP_CHART_SINGLE_SPEED

    +

    Pump chart data for single speed pump. The required fields are RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. +(if not given, efficiency is set to 100%).

    +

    Header Requirements

    +

    Required

    +
      +
    • RATE
    • +
    • HEAD
    • +
    +

    Optional

    +
      +
    • EFFICIENCY, if not set the efficiency is assumed to be 100%.
    • +
    • SPEED, if set all values must be equal.
    • +
    +

    Note that speed is not used in any way for single speed pumps and is only included here to allow the speed column to be +present in the input file without the run failing. There is still a check that all speeds are equal if speed is present +to avoid usage of the wrong pump model, i.e. avoid using the single speed model for variable speed pump chart data.

    +

    Format

    +
    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, only M supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    PUMP_CHART_VARIABLE_SPEED

    +

    Description

    +

    Pump chart data for variable speed (VSD) pump. The required fields are SPEED, +RATE and HEAD. Optionally (and most likely) EFFICIENCY and UNITS should be supplied as well. +(if not given, efficiency is set to 100%).

    +

    Header Requirements

    +
      +
    • RATE, HEAD and SPEED required.
    • +
    • EFFICIENCY, UNITS optional.
    • +
    +

    Format

    +
    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, only M supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    Examples

    +
    FACILITY_INPUTS:
    - NAME: a_single_speed_pump
    FILE: inputs/single_speed_pumpchart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    - NAME: a_variable_speed_pump
    FILE: inputs/variable_speed_pumpchart.csv
    TYPE: PUMP_CHART_VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE

    - NAME: a_single_speed_pump_with_head_margin_applied
    FILE: inputs/single_speed_pumpchart.csv
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    HEAD_MARGIN: 10
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html b/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html new file mode 100644 index 0000000000..62287f0e75 --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/sampled_compressor_model/index.html @@ -0,0 +1,67 @@ + + + + + +Sampled compressor model | eCalc™ Docs + + + + +

    Sampled compressor model

    The compressor model is set up in an external tool, and this model is sampled by +running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a .csv file and +inputted into eCalc™. Each line in the .csv defines a point (rate, suction pressure, discharge pressure) and the total energy usage.

    +
      +
    • +

      For electrically driven compressor trains. The total energy usage should be given in megawatts (MW).

      +
    • +
    • +

      For turbine driven compressor trains. It is recommended to give the total energy usage in megawatts (MW) and couple the compressor model to a turbine model. However, it is possible (for backward compatibility) to give the total energy usage as fuel usage in standard cubic meters per day (Sm3/day) and use the model directly. In this case, you can also provide a POWER (MW) column to calculate power for the shaft based on fuel usage.

      +
    • +
    • +

      The latter (turbine driven compressor train) will at some point become deprecated as it is replaced by COMPRESSOR_WITH_TURBINE mentioned above.*

      +
    • +
    • +

      Inside the convex hull defined by the input variables, there is a +barycentric interpolation +based on a Delaunay triangulation.

      +
    • +
    • +

      Outside the defined area, there may be extrapolations where this is reasonable, i.e.,

      +
        +
      • for rates lower than the defined rates, the table is extrapolated up to minimum +flow (to mimic ASV (anti-surge valve)/recirculation valve)
      • +
      • the suction pressure is extrapolated down to the defined area
      • +
      • the discharge pressure is extrapolated up to defined area to mimic choking when the required +head is lower than the compressor operational area.
      • +
      +
    • +
    +

    Format

    +

    The sampled compressor model is defined under the main keyword FACILITY_INPUTS in the format

    +
        NAME: <model name>
    FILE: <sampled_data>.csv
    TYPE: COMPRESSOR_TABULAR
    +

    Header requirements for the sampled compressor csv file

    +
      +
    • POWER (and/or FUEL)
    • +
    • A minimum of one (but more are allowed) of the following: +
        +
      • RATE
      • +
      • SUCTION_PRESSURE
      • +
      • DISCHARGE_PRESSURE
      • +
      +
    • +
    +

    In cases where the model is directly used as a turbine/fuel driven compressor without coupling it to an eCalc turbine +model, POWER may be replaced by FUEL.

    +
    Shaft power reporting

    In the case FUEL is provided, it is also possible to specify POWER in the csv-file in order to calculate shaft power usage for fuel driven compressors

    +

    If only POWER is provided, we assume that the compressor is electrical-driven +If FUEL is provided, we assume that the compressor is turbine-driven (also when both FUEL and POWER is given)

    +

    Units

    +
    QuantityUnits
    POWERMW
    RATESm3/day
    SUCTION_PRESSUREbar
    DISCHARGE_PRESSUREbar
    FUELSm3/day
    +

    Example tables

    +

    1D example

    +
    RATEPOWER
    00
    10000010
    100000010
    260000015
    440000020
    +

    3D example

    +
    RATESUCTION_PRESSUREDISCHARGE_PRESSUREPOWER
    1.00E+061012.720.3664
    1.00E+061026.212.293
    1.00E+062631.360.2739
    1.00E+062670.776.28
    1.00E+063441.210.368
    1.00E+063494.248.435
    1.00E+067894.120.7401
    1.00E+0678231.622.46
    6.00E+062636.934.197
    6.00E+062657.437.32
    6.00E+063846.962.156
    6.00E+0638106.29.557
    6.00E+065467.261.95
    6.00E+0654155.614.35
    6.00E+067894.171.399
    6.00E+0678231.622.46
    1.10E+074266.929.712
    1.10E+074281.6311.89
    1.10E+076275.643.678
    1.10E+0762180.816.94
    1.10E+077897.793.452
    1.10E+0778231.622.46
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/facility_inputs/tabular/index.html b/docs/about/modelling/setup/facility_inputs/tabular/index.html new file mode 100644 index 0000000000..c423c7532f --- /dev/null +++ b/docs/about/modelling/setup/facility_inputs/tabular/index.html @@ -0,0 +1,37 @@ + + + + + +Tabular models | eCalc™ Docs + + + + +

    Tabular models

    Additional equipment that are considered to be energy consumers can be specified using the keyword TABULAR. +This is given that a form of reservoir rates (oil/gas production) can be linked to either fuel or power consumption.

    +

    This is considered to be a consumer energy function for pure barycentric interpolation, no extrapolation outside +convex area. One column defines the function value, the rest of the columns defines the +variables for a 1D (if one variable column) or multidimensional interpolation.

    +

    Header and unit requirements

    +
    HeaderUnitComment
    PowerMWFor power driven consumers
    FuelSm3/dayFor fuel (turbine) driven consumers
    +

    Variable headers can be chosen freely as long as these correspond to the defined variables for the function.

    +

    Example

    +

    1D tabular energy function

    +

    Contents of the file energyfunc_1d_rate_fuel.csv:

    +
    RATE,     FUEL
    0, 0
    1, 137750
    1000000, 137750
    2000000, 145579
    3000000, 153335
    4000000, 161022
    5000000, 168644
    +

    The entry in FACILITY_INPUTS:

    +
    FACILITY_INPUTS:
    - NAME: gasinjectiondata
    FILE: energyfunc_1d_rate_fuel.csv
    TYPE: TABULAR
    +

    The entry in INSTALLATIONS under a fuel consumer:

    +
    INSTALLATIONS:
    ....
    - NAME: gasinjection
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: gasinjectiondata
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_INJ # [Sm3/day]
    +
    Note

    Note that the name RATE in the input file (under FACILITY_INPUT) and the variable name RATE under VARIABLES +must be equal!

    +

    3D tabular energy function

    +

    Contents of file energyfunc_3d_rate_ps_pd_power.csv:

    +
         RATE, SUCTION_PRESSURE, DISCHARGE_PRESSURE,       POWER
    # [Sm3/d], [bar], [bar], [MW]
    1.00E+06, 10, 12.72, 0.3664
    1.00E+06, 10, 26.21, 2.293
    1.00E+06, 26, 31.36, 0.2739
    1.00E+06, 26, 70.77, 6.28
    1.00E+06, 34, 41.21, 0.368
    1.00E+06, 34, 94.24, 8.435
    1.00E+06, 78, 94.12, 0.7401
    1.00E+06, 78, 231.6, 22.46
    6.00E+06, 26, 36.93, 4.197
    6.00E+06, 26, 57.43, 7.32
    6.00E+06, 38, 46.96, 2.156
    6.00E+06, 38, 106.2, 9.557
    6.00E+06, 54, 67.26, 1.95
    6.00E+06, 54, 155.6, 14.35
    6.00E+06, 78, 94.17, 1.399
    6.00E+06, 78, 231.6, 22.46
    1.10E+07, 42, 66.92, 9.712
    1.10E+07, 42, 81.63, 11.89
    1.10E+07, 62, 75.64, 3.678
    1.10E+07, 62, 180.8, 16.94
    1.10E+07, 78, 97.79, 3.452
    1.10E+07, 78, 231.6, 22.46
    +

    The entry in FACILITY_INPUTS:

    +
    FACILITY_INPUTS:
    - NAME: booster
    FILE: energyfunc_3d_rate_ps_pd_power.csv
    TYPE: TABULAR
    +

    The entry in INSTALLATIONS under a fuel consumer (for 3-d tabular):

    +
    INSTALLATIONS:
    ...
    - NAME: gasexport
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: booster
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_SALES # [Sm3/day]
    - NAME: SUCTION_PRESSURE
    EXPRESSION: SIM1;SUCTION_PRESSURE {+} 3 # [bara]
    - NAME: DISCHARGE_PRESSURE
    EXPRESSION: 100 # [bara]
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html b/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html new file mode 100644 index 0000000000..5b3c71a3f9 --- /dev/null +++ b/docs/about/modelling/setup/file_format_and_syntax/expressions/index.html @@ -0,0 +1,50 @@ + + + + + +Expressions | eCalc™ Docs + + + + +

    Expressions

    +

    The variables needed in the energy functions for the variable consumers, may not always be directly found in the +reservoir inputs. For example, there may be two group rates that should be added to be +consistent with the net rate through a compressor system. Or, it may be that a pressure defined in a network node is +not equal to the pressure at the inlet/outlet of a compressor system and some delta pressure must be added.

    +

    To avoid forcing the users to define new variables in the simulation files/CSV data and also keep the data in the +consumer’s energy function consistent, the calculator supports expressions to define variables (and conditions in the +CONDITIONS.

    +
    warning

    When creating new variables from CSV files make sure to choose the right interpolation type! +See INTERPOLATION_TYPE for more information.

    +

    Available operators

    +

    As reservoir simulation vectors (and also CSV headers) may include mathematical operators +like +, - in their names, the operators must be surrounded by curly brackets, {}, +in the expressions. Logical operators (>, >=, <, <=, ==, !=) +evaluates to 0 or 1.

    +

    The following operators are supported:

    +
    OperatorDescriptionExample
    {+}Addition2 {+} 1
    {-}SubtractionSIM;GAS {-} 10
    {*}MultiplicationSIM;GAS {*} 2
    {/}DivisionSIM;GAS {/} 2
    {^}PowerSIM;GAS {^} 2
    ( )Parentheses( SIM;GAS {+} 2 ) {/} 2
    <Less thanSIM;GAS {+} (SIM1;OIL < 150) {*} 1000000
    <=Less than or equalSIM;GAS {+} (SIM1;OIL <= 150) {*} 1000000
    >Greater thanSIM;GAS {+} (SIM1;OIL > 150) {*} 1000000
    >=Greater than or equalSIM;GAS {+} (SIM1;OIL >= 150) {*} 1000000
    ==EqualSIM;GAS {+} (SIM;FLAG == 1) {*} 1000000
    !=Not equalSIM;GAS {-} (SIM;FLAG != 1) {*} 1000000
    +

    Examples

    +

    Combining data from different reservoir inputs

    +

    The rate through a gas injection compressor is the sum of injection rate for the field plus +some additional injection rate for a tie-in (whose data is specified in a CSV file with +key SIM2):

    +
    VARIABLES:
    total_rate_through_compressor:
    VALUE: SIM1;GAS_INJ {+} SIM2;GAS_INJ
    +

    Model of additional rate

    +

    The rate through a compressor is the produced rate plus some additional term. This term Q is a function of pressures P1P_{1} and P2P_{2},

    +Q=25000P1(P2P1)Q = 25000 \cdot \sqrt{P_{1} \cdot \left( P_{2} - P_{1} \right)} +

    The addition is only added when the reservoir gas rate is positive.

    +
    VARIABLES:
    rate:
    VALUE: SIM;GAS_PROD {+} ( SIM;GAS_PROD > 0 ) {*} 25000 {*} ( SIM;P1 {*} ( SIM;P2 {-} SIM;P1 ) ) {^} 0.5
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/file_format_and_syntax/index.html b/docs/about/modelling/setup/file_format_and_syntax/index.html new file mode 100644 index 0000000000..f1466e99ec --- /dev/null +++ b/docs/about/modelling/setup/file_format_and_syntax/index.html @@ -0,0 +1,55 @@ + + + + + +File format and syntax | eCalc™ Docs + + + + +

    File format

    +

    The setup file is written in YAML format and needs to follow a strict pattern which consists of several levels specified by indentation. The indentation is very important. It is recommended to use an indentation of 2 spaces per level. At each level, there might be both required and optional keywords.

    +

    Setup file syntax

    +

    The overall system in eCalc is that the user defines inputs from subsurface and facility and +then establishes a model between these.

    +

    On the top level, the required keywords are FACILITY_INPUTS which defines the input from facility characterization, TIME_SERIES which defines time-dependant input parameters (e.g. reservoir profiles), FUEL_TYPES which defines the various fuel types used in the system, and INSTALLATIONS which is the top node defining the system of energy consumers. MODELS is optional and may be used for multi-level energy usage models.

    +

    Documentation about how to set up each of these fields are found here, respectively:

    +
      +
    • TIME_SERIES: List of input sources, CSV-files, containing all time series data including the +reservoir variables.
    • +
    • FACILITY_INPUTS: List of input files from facility characterization. Typically, this can be +characteristics for an element in a consumer system or characteristics for a generator set.
    • +
    • FUEL_TYPES: Defining the fuel types being used in the model and the corresponding +emissions.
    • +
    • MODELS: Used for multi-level models, one model may refer to other models from either +MODELS or FACILITY_INPUTS
    • +
    • VARIABLES: Used for defining variables to be used in expressions throughout the YAML file
    • +
    • INSTALLATIONS: Defining the system of energy consumers on each installation +(e.g. platform or mobile unit).
    • +
    +

    An eCalc model may contain one or several installations. Each installation has a set of specifications +(e.g. fuel type, hydrocarbon export, ...) and specifications of the system of consumers.

    +

    Emissions are emitted when fuel is burned. Thus, the first sublevel of consumers for an installation, +are the fuel burners. As the figure below shows, there are three main types of fuel burners:

    +
      +
    • Electricity generation (generator sets),
    • +
    • Turbine-driven processes,
    • +
    • Flare/vent/other non reservoir dependent burners/emitters.
    • +
    +

    In eCalc under each installation, there is one keyword (GENERATORSETS) +specifying the generator sets and one keyword (FUELCONSUMERS) +specifying processes that require fuel directly (turbine-driven processes and flare/vent).

    +

    The processes with electrical motor drives and other electrical loads are modeled at the sublevel +under GENERATORSETS.

    +

    +
    Comments

    Comments are supported anywhere in the yml and csv files by using '#' to indicate the start of a comment. +All data after a '#' on the same line is ignored. If '#' is used at the beginning of the file, the +first line without a preceding '#' is used as the header.

    +

    Examples

    +

    YAML format example

    +
    TIME_SERIES:
    - FILE:
    TYPE:
    NAME:

    FACILITY INPUTS:
    - FILE:
    TYPE:
    NAME:

    FUEL_TYPES:
    - NAME:
    FACTOR:

    MODELS:
    - NAME:
    - TYPE:

    VARIABLES:
    <variable_name>
    VALUE: <expression>

    INSTALLATIONS:
    - NAME:
    HCEXPORT:
    FUEL:
    GENERATORSETS:
    - NAME:
    ELECTRICITY2FUEL:
    CATEGORY:
    CONSUMERS:
    - NAME:
    CATEGORY:
    ENERGY_USAGE_MODEL:

    +

    Full examples

    +

    Examples are an excellent way to quickly get an overview of the syntax. Check them out here.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/fuel_types/index.html b/docs/about/modelling/setup/fuel_types/index.html new file mode 100644 index 0000000000..3cbd2213da --- /dev/null +++ b/docs/about/modelling/setup/fuel_types/index.html @@ -0,0 +1,24 @@ + + + + + +Fuel types | eCalc™ Docs + + + + +

    Fuel types

    note

    The FUEL_TYPES keyword is mandatory within the eCalc™ YAML file.

    +

    This part of the setup specifies the various fuel types and associated emissions +used in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the +INSTALLATIONS part of the setup by its name.

    +

    The use of fuel can lead to one or more emission types, specified in EMISSIONS.

    +

    You can optionally specify a CATEGORY.

    +

    Format

    +
    FUEL_TYPES:
    - NAME: <name_1>
    CATEGORY: <category_1>
    EMISSIONS: <emissions data>
    - NAME: <name_2>
    CATEGORY: <category_2>
    EMISSIONS: <emissions data>
    +

    Example

    +

    This is a full example where there are 3 fuel type definitions, i.e., there are 3 different +fuels defined that can be used in your INSTALLATIONS.

    +
    FUEL_TYPES:
    - NAME: fuel_gas # Name of this fuel, use this when referencing this fuel in the FUEL specification in the INSTALLATIONS part
    EMISSIONS:
    - NAME: CO2 # Name of the emission type
    FACTOR: 2.15 # kg/Sm3
    - NAME: CH4
    FACTOR: 0.00091 # kg/Sm3
    - NAME: flare_gas
    CATEGORY: FUEL_GAS
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.73
    - NAME: CH4
    FACTOR: 0.00024
    - NAME: diesel
    CATEGORY: DIESEL
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.7085 # kg/l - input diesel usage in l/d
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/index.html b/docs/about/modelling/setup/index.html new file mode 100644 index 0000000000..79534e066e --- /dev/null +++ b/docs/about/modelling/setup/index.html @@ -0,0 +1,17 @@ + + + + + +Setup an eCalc™ Model | eCalc™ Docs + + + + +

    Set up an eCalc Model

    +

    This section describes how to create your own eCalc™ model file.

    +

    There are six separate sections which make up each model, these being:

    +
    InputFunction
    TIME_SERIESInput of time dependent variables. For example, production profiles for an installation
    FACILITY_INPUTSInput of generator sets, and facility equipment that consumers either power or fuel (with the exception of compressors that are modelled with compressor charts)
    MODELSInput of compressor models that use compressor charts. Gas turbines that are directly coupled to a compressor are also included here
    FUEL_TYPESInput of the various fuel types used in the specified installation(s)
    VARIABLESInput of variables that can reference to in expressions within the YAML set-up file
    INSTALLATIONSThis is essentially the only "output" section in the YAML setup file. All the inputs are specified and related to specific platforms/rigs, and whether or not they consume either power or fuel
    +

    All of the above are mandatory inputs for eCalc™ to run, with the exception of models (which is an optional, but still important input) and variables.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html new file mode 100644 index 0000000000..70c2c59e1c --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor/index.html @@ -0,0 +1,22 @@ + + + + + +Compressor | eCalc™ Docs + + + + +

    COMPRESSOR Energy Usage Model

    +

    When COMPRESSOR is specified under ENERGY_USAGE_MODEL the only keyword that is allowed is ENERGYFUNCTION. +This model only supports a single compressor, which can either be a tabular compressor model defined in FACILITY_INPUTS or a compressor model defined in MODELS.

    +

    The attributes RATE, SUCTION_PRESSURE and +DISCHARGE_PRESSURE are required to be specified in the energy usage model. Here, the specified rate will be for the entire train, the +suction pressure will be at the inlet of the first stage, whilst the discharge pressure will be the outlet pressure of the last stage.

    +

    Format

    +
    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>
    RATE: <rate expression>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: booster_compressor_reference
    RATE: SIM1;GAS_PROD
    SUCTION_PRESSURE: SIM1;SUCTION_PRESSURE
    DISCHARGE_PRESSURE: SIM1;DISCHARGE_PRESSURE
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html new file mode 100644 index 0000000000..da6c33cd72 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system/index.html @@ -0,0 +1,25 @@ + + + + + +Compressor system | eCalc™ Docs + + + + +

    COMPRESSOR_SYSTEM energy usage model

    +

    When COMPRESSOR_SYSTEM is specified under ENERGY_USAGE_MODEL a fully defined compressor model (with charts) can be used. Here, the following are allowed under the +COMPRESSOR_SYSTEM keyword:

    + +

    The key difference between this model and the COMPRESSOR keyword is that multiple compression trains can be specified.

    +

    Format

    +
    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    CONDITION: <condition expression>
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model in facility inputs>
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    OPERATIONAL_SETTINGS:
    <operational settings data>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    - RATES:
    - SIM1;GAS_SALES
    - 0
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    - RATES:
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html new file mode 100644 index 0000000000..8dd2ece8e5 --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/index.html @@ -0,0 +1,22 @@ + + + + + +Compressor models | eCalc™ Docs + + + + +

    Compressor models in calculations

    +

    There are different options on how to utilise compressor models in the calculations within the +ENERGY_USAGE_MODEL section in INSTALLATIONS. Three different options will be illustrated here:

    +

    No matter the compressor model type, it can either be placed in two sections, which can be:

    +
      +
    • Under the CONSUMERS section under GENERATORSETS. This is applicable for electrical motor driven compressors where electricity is generated in de-coupled gas turbines and distributed to the individual process units.
    • +
    • Under the FUELCONSUMERS section. Here it is necessary for the compressor model to be coupled to a gas turbine model. The coupled turbine is solely driving the compressor system to which it is attached to.
    • +
    +

    Example

    +
    INSTALLATIONS:
    - NAME: InstallationA
    CATEGORY: FIXED
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: gensetA
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: Gas injection compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    ...

    FUELCONSUMERS:
    - NAME: Gas export compressor
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    ...
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html b/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html new file mode 100644 index 0000000000..d0bd9c373d --- /dev/null +++ b/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html @@ -0,0 +1,22 @@ + + + + + +Variable speed compressor train multiple streams and pressures | eCalc™ Docs + + + + +

    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model

    +

    This energy usage model allows the compressor train model type +Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    NAME: <Reference name>
    TYPE: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    CONDITION: <condition expression>
    COMPRESSOR_TRAIN_MODEL: <reference a Variable speed compressor train model with multiple streams and pressures model>
    RATE_PER_STREAM:
    - <Expression for stream 1>
    - <Expression for stream 2>
    - ...
    - <Expression for stream N>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure expression>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    The number of elements in RATE_PER_STREAM must correspond to the number of streams defined for the model referenced in +COMPRESSOR_TRAIN_MODEL.

    +

    INTERSTAGE_CONTROL_PRESSURE is required if the model referenced in COMPRESSOR_TRAIN_MODEL has has an +interstage control pressure defined. If there is no interstage control pressure defined in COMPRESSOR_TRAIN_MODEL, +INTERSTAGE_CONTROL_PRESSURE should not be defined.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/direct_consumers/index.html b/docs/about/modelling/setup/installations/direct_consumers/index.html new file mode 100644 index 0000000000..b1d8651088 --- /dev/null +++ b/docs/about/modelling/setup/installations/direct_consumers/index.html @@ -0,0 +1,25 @@ + + + + + +Direct consumers | eCalc™ Docs + + + + +

    DIRECT ENERGY USAGE MODEL

    +

    This energy model usage type allows for defining energy usage directly with an expression. It needs to be either +accompanied by LOAD (for electrical consumers) or FUELRATE (for fuel consumers). The energy usage will be +equal to the result of the expression given for LOAD/FUELRATE.

    +

    When a model is run with REGULARITY, there is an option to specify whether the direct consumer is of stream day +or calendar day energy usage rate with CONSUMPTION_RATE_TYPE.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD/FUELRATE: <choose either load or fuelrate>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION/S: <choose either condition or conditions>
    POWERLOSSFACTOR: <power loss factor (number)>
    +

    Example

    +

    Direct load

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10
    +

    Direct fuel rate

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: 100000
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html b/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html new file mode 100644 index 0000000000..f602db1975 --- /dev/null +++ b/docs/about/modelling/setup/installations/generator_sets_in_calculations/index.html @@ -0,0 +1,63 @@ + + + + + +Generator sets | eCalc™ Docs + + + + +

    Generator sets in calculations

    +

    The GENERATORSETS keyword is optional. However, the only requirement is that each +installation must have defined either GENERATORSETS or +FUELCONSUMERS.

    +

    Under GENERATORSETS one or several generator sets +(a 'set' of an engine of some sort and a generator) are specified in a list.

    +

    Each generator set requires three sub-keywords, ELECTRICITY2FUEL +and CONSUMERS and CATEGORY. +Optionally, FUEL may be used to override the default fuel type specification for +the installation. If not specified, it will inherit that of the installation.

    +
    What happens when fuel is specified?

    When FUEL is defined for a generator set, there is no merging between the installation fuel +definition and the generator set fuel definition, but a complete override of the configuration.

    +

    Category can be either TURBINE-GENERATOR or POWER-FROM-SHORE.

    +

    Format

    +
    GENERATORSETS:
    - NAME: <generatorset name>
    CATEGORY: <category>
    FUEL: <optional fuel configuration reference>
    ELECTRICITY2FUEL: <electricity to fuel facility input reference>
    CONSUMERS:
    ...
    +

    Electricity2fuel function

    +

    Description

    +

    The behavior of a generator set is described by an ELECTRICITY2FUEL +table, which relates the burned fuel rate to delivered power, including the power generation efficiency at different loads. +It also defines the operational envelope of the generator set.

    +

    ELECTRICITY2FUEL may be modeled with a constant function through time or +with different power vs. fuel relations for different time intervals.

    +

    Format

    +
    ELECTRICITY2FUEL: <facility_input_reference>
    +

    or

    +
    ELECTRICITY2FUEL:
    <DATE>: <facility_input_reference_1>
    <DATE>: <facility_input_reference_2>
    +

    Power from shore

    +

    Description

    +
    note

    Power from shore is currently handled in eCalc™ by defining a dummy ELECTRICITY2FUEL model with zero fuel usage, and applying the POWER-FROM-SHORE category. This is an intermediate solution and will be dealt with differently in the future.

    +

    Example

    +

    Make an ELECTRICITY2FUEL input file with zero fuel usage.

    +
    POWER, FUEL
    # [MW], [SM3/day]
    0, 0
    50, 0
    +

    Specify ELECTRICITY2FUEL under +FACILITY_INPUTS.

    +
    FACILITY_INPUTS:
    - NAME: genset_pfs
    TYPE: ELECTRICITY2FUEL
    FILE: genset_pfs.csv
    +

    Use the POWER-FROM-SHORE category and the ELECTRICITY2FUEL +specified under FACILITY_INPUTS.

    +
    GENERATORSETS:
    - NAME: generatorset_with_pfs_event
    CATEGORY:
    2020-01-01: TURBINE-GENERATOR
    2030-01-01: POWER-FROM-SHORE
    ELECTRICITY2FUEL:
    2020-01-01: genset_turbine
    2030-01-01: genset_pfs
    CONSUMERS:
    ...
    +

    If power from shore is used for the full time range you can skip the dates in both CATEGORY and ELECTRICITY2FUEL

    +
    GENERATORSETS:
    - NAME: generatorset_with_pfs_event
    CATEGORY: POWER-FROM-SHORE
    ELECTRICITY2FUEL: genset_pfs
    CONSUMERS:
    ...
    +

    Heaters and boilers

    +

    Description

    +
    note

    Heaters and boilers should be modeled in eCalc™ as +GENERATORSETS, applying the HEATER and BOILER categories. This is an intermediate solution and may be dealt with differently in the future.

    +

    Example: Boiler as generator set

    +

    Specify the correlation between energy delivered and fuel consumed under +FACILITY_INPUTS:

    +
    FACILITY_INPUTS:
    - NAME: boiler_energy_fuel
    TYPE: ELECTRICITY2FUEL
    FILE: boiler_energy_fuel.csv
    +

    Use the BOILER category and the ELECTRICITY2FUEL +specified under FACILITY_INPUTS:

    +
    GENERATORSETS:
    - NAME: boiler_as_generator
    CATEGORY: BOILER
    ELECTRICITY2FUEL: boiler_energy_fuel
    CONSUMERS:
    ...
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/index.html b/docs/about/modelling/setup/installations/index.html new file mode 100644 index 0000000000..eacebff2a2 --- /dev/null +++ b/docs/about/modelling/setup/installations/index.html @@ -0,0 +1,62 @@ + + + + + +Installations | eCalc™ Docs + + + + +

    Installations

    note

    The INSTALLATIONS keyword is mandatory within the eCalc™ YAML file.

    +

    In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation.

    +
      +
    • Essentially installations on which fuel is burned to generate energy for the consumers.
    • +
    +

    The structure of the keywords under INSTALLATIONS +is linked to the structure in the general consumer overview for an installation.

    +

    CATEGORY is optional, and generally reserved for use with LTP.

    +

    Referring to time series

    +

    In the installations set up, one may refer to variables from TIME_SERIES +in many places by using expressions to build up custom, or changing, configurations.

    +

    Referring to variables is done on the format:

    +
    <KEY>;<VARIABLE_NAME>
    +

    where <KEY> must be defined in TIME_SERIES, defining the time series input source +(e.g., CSV file), and <VARIABLE_NAME> is the name of the variable. +See TIME SERIES for more examples

    +

    Time intervals for variables/expressions and models

    +

    For various reasons, the data in the INSTALLATIONS section may vary in time. +The consumers may need to be modeled differently due to rebuilds or degeneration. It could be that the user wants to +make a simple model for some periods and a more detailed model for others (e.g., a rate only model early time periods and a pressure +dependent model in the field's late life).

    +

    For the fields that support multiple time intervals, the syntax is generally to insert a +date on the format YYYY-MM-DD followed by the expression/model for the time interval between +this date and the next entered date. See Time intervals for an example.

    +
    Note

    When time dependency is used, the values before the first time default to 0 (zero)

    +
      +
    • HCEXPORT is zero before the first time given.
    • +
    • ELECTRICITY2FUEL will have 0 fuel usage before the first time defined, despite a non-zero power load.
    • +
    • FUEL: The fuel rate will be 0 before the first entered date.
    • +
    • Consumer energy consumption will be 0 before the first defined time.
    • +
    +

    Format

    +
    INSTALLATIONS:
    - NAME: <name of installation 1>
    GENERATORSETS: <generator set specifications for installation 1>
    FUELCONSUMERS: <fuel consumer specifications for installation 1>
    FUEL: <fuel specification for installation 1>
    HCEXPORT: <hydrocarbon export specification for installation 1>
    REGULARITY: <regularity specification for installation 1>
    VENTING_EMITTERS: <direct emissions specification for installation 1>
    CATEGORY: <category for installation 1>
    - NAME: <name of installation 2>
    GENERATORSETS: <generator set specifications for installation 2>
    FUELCONSUMERS: <fuel consumer specifications for installation 2>
    FUEL: <fuel specification for installation 2>
    HCEXPORT: <hydrocarbon export specification for installation 2>
    REGULARITY: <regularity specification for installation 2>
    VENTING_EMITTERS: <direct emissions specification for installation 2>
    CATEGORY: <category for installation 2>
    - ...
    +

    Example

    +

    General structure

    +
    INSTALLATIONS
    - NAME: Platform_A
    CATEGORY: FIXED
    <The data for installation 1 to be put here>
    - NAME: Platform_B
    CATEGORY: MOBILE
    <The data for installation 2 to be put here>
    +

    Referring to time series

    +
    SIM;OIL_PROD
    +

    SIM is the key defined in TIME_SERIES.

    +

    The user can define expressions of variables, +see expressions for details. The following is an example of using expressions:

    +
    SIM1;WATER_PROD:FIELD_A {+} SIM2;WATER_PROD:FIELD_B
    +

    SIM1 and SIM2 are here different reservoir sources with potential different time steps. +This is not a problem and handled by eCalc automatically.

    +

    Time intervals

    +

    This example uses the HCEXPORT keyword.

    +

    Example: same expression for the entire time frame

    +
    HCEXPORT: SIM;OIL_PROD
    +

    Example: expression varies through time

    +
    HCEXPORT:
    2001-01-01: SIM1;OIL_PROD
    2005-01-01: SIM2:OIL_PROD {+} SIM2;GAS_SALES
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html b/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html new file mode 100644 index 0000000000..059413f228 --- /dev/null +++ b/docs/about/modelling/setup/installations/pump_models_in_calculations/index.html @@ -0,0 +1,37 @@ + + + + + +Pump models | eCalc™ Docs + + + + +

    Pump models in calculations

    +

    Pump charts are defined in the FACILITY_INPUTS section, and is then referred to from an +ENERGY_USAGE_MODEL.

    +

    PUMP energy usage model

    +

    To configure a single pump, the pump rate, suction- and discharge pressures and fluid density must be given as inputs. In addition, a reference to a pump chart defined in the +FACILITY_INPUTS section has to be included.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference energy function in facility inputs of pump type>
    RATE: <rate expression>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    FLUID_DENSITY: <fluid density expression>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP
    ENERGYFUNCTION: waterinjection_pump_reference
    RATE: SIM1;WATER_INJ
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITY: 1000
    +

    Units

    +
    QuantityDefault units
    RATESm3/day
    SUCTION_PRESSUREbara
    DISCHARGE_PRESSUREbara
    FLUID_DENSITYkg/m3
    +

    PUMP_SYSTEM energy usage model

    +

    Model a system of pumps that share common manifolds and have cross-overs between them and for which the rate may be +split between them based on various operational strategies.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    CONDITION: <condition expression>
    PUMPS:
    - NAME: <name of compressor>
    CHART: <reference to pump model in facility inputs>
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    FLUID_DENSITY: <expression defining the fluid density>
    OPERATIONAL_SETTINGS:
    <operational settings data>
    +
    warning

    If all OPERATIONAL_SETTINGS have been exhausted, and there were still some time steps that were outside the +capacity of the operational setting, the last operational setting will be "chosen" nevertheless. In this case the +energy_usage in the output will be set to NaN which indicates that the operational setting, is in fact, invalid +(or converted to 0 when aggregating upwards to e.g. genset)

    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1000.0
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    +

    Units

    +
    QuantityDefault units
    RATESm3/day
    SUCTION_PRESSUREbara
    DISCHARGE_PRESSUREbara
    FLUID_DENSITYkg/m3
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html b/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html new file mode 100644 index 0000000000..4f3e114d03 --- /dev/null +++ b/docs/about/modelling/setup/installations/tabular_models_in_calculations/index.html @@ -0,0 +1,25 @@ + + + + + +Tabular models | eCalc™ Docs + + + + +

    Tabular models

    This type is a pure interpolation model where the user may freely choose all the variables. No extrapolation is done, thus the user +must ensure to cover the entire variable space in the input data. For points outside the input data, the output is +invalid and no energy usage is given (shown in the output vector extrapolations).

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    CONDITION: <condition expression>
    ENERGYFUNCTION: <reference to energy function in facility inputs of type tabular>
    VARIABLES:
    - NAME: <name of variable>
    EXPRESSION: <expression defining the variable>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    - NAME: Gas oil ratio
    EXPRESSION: SIM1;GOR
    - NAME: GAS_TEMPERATURE
    EXPRESSION: SIM1;TEMP
    +

    COMPRESSOR_TABULAR input type

    +

    Consumer energy function for the compressor (or compressor train) is in a tabulated format, +where each line is a point defining the energy consumption for the given variables.

    +

    See Sampled compressor model for details.

    +

    As a single compressor/compressor train (no system), it can be set up in the following way:

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: <facility_inputs_key>
    RATE: <rate expression [Sm3/day]>
    SUCTION_PRESSURE: <suction pressure expression>
    DISCHARGE_PRESSURE: <discharge pressure expression>
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html new file mode 100644 index 0000000000..7214010654 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/index.html @@ -0,0 +1,90 @@ + + + + + +Compressor charts | eCalc™ Docs + + + + +

    Compressor chart

    +

    The compressor chart is used to set up a model of each compressor. eCalc™ currently support four ways to set up a +compressor chart

    +
      +
    • Predefined single speed chart
    • +
    • Predefined variable speed chart
    • +
    • Generic compressor chart with a specified design point
    • +
    • Generic compressor chart which is automatically adjusted to have capacity for the input data
    • +
    +

    User defined single speed compressor chart

    +

    The single speed chart type allows a single compressor curve for one speed, using the keyword CURVE

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    CURVE:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    +

    Example

    +
    MODELS:
    - NAME: predefined_single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVE:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    +
    Tip

    It is also possible to input single speed compressor chart as csv file.

    Format

    CURVE:
    FILE: <csv file with single speed compressor chart>

    Example

    CURVE:
    FILE: compressor_chart_single_speed.csv
    +

    User defined variable speed compressor chart

    +

    The variable speed chart type allows a fully defined compressor chart with data for two or more speeds, using the keyword CURVES. The upper and +lower speed curves will be interpreted as the speed capacity limits for the chart. +Whilst the lowest rate points on each of the upper and lower speed curves will define the minimum flow line for the compressor.

    +

    Additionally, there is functionality to define a control line which behaves as an alternate to the minimum flow line. This means that your input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line. +See Surge control margin for variable speed compressor chart for more details.

    +
    note

    Using a variable speed compressor chart as input essentially does the same as if a process simulation tool was used to +create an energy function. It has been verified to be close to identical to Unisim within 2% accuracy (smaller +differences in density arise from differences in PVT assumptions and calculations).

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    CURVES:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - ... and so forth for all chart curves. Minimum two curves needed.
    +

    Example

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 9886
    RATE: [3708, 4502, 4993.6, 5507, 5924]
    HEAD: [13845, 13182, 12425, 11276, 10054]
    EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]
    +
    Tip

    It is also possible to input variable speed compressor chart as csv file.

    Format

    CURVES:
    FILE: <csv file with variable speed compressor chart>

    Example

    CURVES:
    FILE: compressor_chart_variable_speed.csv
    +

    Generic compressor chart with predefined design point

    +

    The generic compressor chart used is an "average" chart of compressors used on the NCS and cannot be expected to be equal to +the actual chart for a compressor which has been designed and delivered. However, it can be a good first estimation of +how a chart may be for a future process not yet in the design phase.

    +

    This chart will not replace any future compressor curves and it may not be accurate in comparison to the final compressor curve; however, it is a good method to capture the major effects (such as ASV (anti-surge valve) recirculation). +With this method it is possible to view how a "typical" compressor curve would react a large spread in the data set. If the design point is set within the middle of the data spread, points with rates lower than the minimum flow will have some recirculation; whilst, too high or unrealistic rates will not be solved. This is an essential difference in comparison to the generic chart with its design point calculated from input data (which is covered in Generic compressor chart with design point calculated from input data), which will shift the entire compressor curve to solve for even the highest rate and head points.

    +

    Unified generic compressor chart:

    +

    +

    The compressor chart is created by scaling the unified generic compressor chart in the figure above with a design actual +rate and head. Note that the rate is here in the units am3/hr which is NOT EQUAL to Sm3/hr. +The units am3/hr refers to the volumetric rate at inlet conditions (inlet pressure and temperature), and it will differ from the inputted standard rates +due to the difference in density. +The design polytropic head is given in either kJ/kg, m or J/kg, UNITS.

    +

    The generic compressor chart is currently accompanied by a fixed polytropic efficiency (polytropic efficiency +variations within the chart may be supported in the future).

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>
    DESIGN_RATE: <design rate>
    DESIGN_HEAD: <design polytropic head>
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    +

    Example

    +
    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 7000
    DESIGN_HEAD: 50
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION
    +

    For this method it is important to note that only Simplified variable speed compressor train model is supported.

    +

    Example

    +
    MODELS:
    - NAME: generic_compression_train_design_point
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: sample_fluid
    PRESSURE_CONTROL: UPSTREAM_CHOKE
    COMPRESSOR_TRAIN:
    STAGES:
    - COMPRESSOR_CHART: generic_from_design_point_compressor_chart
    INLET_TEMPERATURE: 30
    +

    Generic compressor chart with design point calculated from input data

    +
    Caution

    Beware that using this functionality in a COMPRESSOR_SYSTEM energy usage model can give some unwanted effects. +E.g. splitting/halving the rates into two equal compressor trains will in effect change the compressor chart for a +compressor set up with GENERIC_FROM_INPUT compared to running the full rate through a single compressor train. +Consider using a single design point instead.

    +

    The generic chart from input is also based on the unified generic compressor chart:

    +

    +

    However, in this case the design point is not specified when setting up the model, instead it is estimated at run time and is entirely based on the inputted data set. +An algorithm is used to set a design point such that all the input data is within the capacity. +Even if there is a large spread in the data, all data points will solve. High rate/head data points will just be covered by the curve; whilst low rate points outside the minimum flow point will have recirculation.

    +

    This method has one major potential downside in comparison to the Generic compressor chart with predefined design point. As all data points will be covered by the compressor curve, if there is an extremely large or unrealistic head or rate value, the other more "normal" data points will be impacted and will either result in a large head adjustment (via upstream/downstream choking) or it will have a large recirculation rate. This has the potential to skew the entire data set solely due to one unrealistic data point. Thus, if this generic chart is utilised it is important to make sure that unrealistic data is filtered out.

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: <polytropic efficiency of the compressor (fixed number)>
    UNITS:
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    +

    Example

    +
    MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    POLYTROPIC_EFFICIENCY: 0.75
    UNITS:
    EFFICIENCY: FRACTION
    +

    Surge control margin for variable speed compressor chart

    +

    +

    For a variable speed compressor chart it is possible to add a surge control margin. This is currently done by giving a +fraction or percentage as input. The control margin is used to calculate the increase in minimum flow, i.e. as a percentage +or fraction of the rate difference between minimum- and maximum flow, for the given speed. The increase in minimum +flow is calculated individually for each speed curve. The corresponding head and efficiency values for the new minimum flow rate +is found by interpolation along the speed curves. The same compressor chart can be used for multiple compressor stages, +but with different surge control margins. Hence, the surge control margin is defined when setting up the stages in a +Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html new file mode 100644 index 0000000000..e3d4e607da --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/index.html @@ -0,0 +1,20 @@ + + + + + +Compressor train types | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..caeec08d12 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model/index.html @@ -0,0 +1,44 @@ + + + + + +Simplified variable speed compressor train | eCalc™ Docs + + + + +

    Simplified variable speed compressor train

    The simplified variable speed compressor train model is a model of a compressor train where the inter stage pressures +are assumed based on an assumption of equal pressure fractions for each stage. Based on this, the compressor work is +calculated independently for each compressor as if it was a standalone compressor, neglecting that they are in fact on +the same shaft and thus have a common speed.

    +

    This model supports both user defined compressor charts and +generic compressor charts. See compressor charts for more information.

    +

    In addition, a FLUID MODEL must be specified.

    +

    The model comes in two versions, one where the compressor stages are known (pre defined), and one where the compressor +stages are calculated at run-time based on input data.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS
    COMPRESSOR_TRAIN: <compressor train specification>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional. compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    +

    Simplified compressor train model with known compressor stages

    +

    When the compressor stages are known, each stage is defined with a compressor chart and an inlet temperature:

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    +

    Simplified compressor train model with unknown number of compressor stages

    +

    When the number of compressor stages are not known, one may specify the maximum pressure ratio per stage. +When the maximum pressure ratio is set, the number of compressors will be determined at run time (based on input data) +such that the number of compressors is large enough to ensure no pressure ratios are above a given maximum pressure +ratio per stage, but not larger.

    +

    This model is intended for (but not limited to) the use of a generic compressor chart. Especially one can test with the +generic compressor chart which are adjusted at run time (based on input data), for example to explore future +rebuilds/designs where no specifications/data is yet available from vendors et.c.

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>
    COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>
    INLET_TEMPERATURE: <inlet temperature for all stages>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Examples

    +

    A (single) compressor with a user-defined variable speed compressor chart and fluid composition

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]

    - NAME: fluid_model_1
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: SRK
    COMPOSITION:
    nitrogen: 0.74373
    CO2: 2.415619
    methane: 85.60145
    ethane: 6.707826
    propane: 2.611471
    i_butane: 0.45077
    n_butane: 0.691702
    i_pentane: 0.210714
    n_pentane: 0.197937
    n_hexane: 0.368786

    - NAME: simplified_compressor_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model_1
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart
    +

    A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition

    +
    MODELS:
    - NAME: generic_from_design_point_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_DESIGN_POINT
    POLYTROPIC_EFFICIENCY: 0.75
    DESIGN_RATE: 7000
    DESIGN_HEAD: 50
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: KJ_PER_KG
    EFFICIENCY: FRACTION

    - NAME: medium_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    - NAME: simplified_compressor_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: medium_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_design_point_compressor_chart

    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362] # fractions between 0 and 1

    - NAME: simplified_compressor_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: simplified_compressor_model
    TURBINE_MODEL: compressor_train_turbine
    +

    A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart

    +
                MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT

    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 10767
    RATE: [4052, 4500, 4999, 5492, 6000, 6439,]
    HEAD: [16447, 16081, 15546, 14640, 13454, 11973,]
    EFFICIENCY: [0.72, 0.73, 0.74, 0.74, 0.72, 0.70]

    - NAME: dry_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: DRY

    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: dry_fluid
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    - INLET_TEMPERATURE: 30
    COMPRESSOR_CHART: predefined_variable_speed_compressor_chart
    +

    A compressor train where the number of stages are unknown

    +
                MODELS:
    - NAME: generic_from_input_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: GENERIC_FROM_INPUT
    - NAME: dry_fluid
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: DRY
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: dry_fluid
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: generic_from_input_compressor_chart
    INLET_TEMPERATURE: 30
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..8ac0fb0ea2 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model/index.html @@ -0,0 +1,27 @@ + + + + + +Single speed compressor train | eCalc™ Docs + + + + +

    Single speed compressor train

    The single speed compressor train model is modelling one or more single speed compressors mounted on a common shaft. +Being single speed compressors on a common shaft means that all compressors will run at the exact same fixed speed, and +this shaft speed can not be varied. Since the shaft speed can not vary, the problem is overdefined given the rate, +suction pressure and discharge pressure. A method for controlling the pressure also needs to be defined, to be able +to calculate the energy usage for given rates, suction pressures and discharge pressures.

    +

    This means that a single speed compressor model needs the following to be defined:

    +
      +
    • A polytropic compressor chart for every compressor stage in the compressor train. For single speed trains, eCalc +only supports user defined single speed compressor charts.
    • +
    • A FLUID MODEL.
    • +
    • A PRESSURE_CONTROL.
    • +
    +

    The model is defined under the main keyword MODELS in the format

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE or COMMON_ASV>
    MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar (can only use if pressure control is DOWNSTREAM_CHOKE)>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html new file mode 100644 index 0000000000..3f1e33ef23 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model/index.html @@ -0,0 +1,32 @@ + + + + + +Variable speed compressor train | eCalc™ Docs + + + + +

    Variable speed compressor train

    In this model all compressors in the train have the same speed, and the model is build on a forward model of +the fluid properties/state where speed is a parameter. Then the speed is iterated until the discharge pressure of the +outlet is equal to the requested discharge pressure.

    +

    This model only supports User defined variable speed compressor chart.

    +

    In addition, a FLUID MODEL must be specified.

    +

    Control mechanisms

    +

    The variable speed compressor train model has a set of automatic control mechanisms. The figure below shows several operational points (rate/head) outside a variable speed compressor chart.

    +

    +

    The points will be treated as follows:

    +
      +
    1. Points with head above the maximum head on the maximum speed curve will be out of capacity.
    2. +
    3. Points with head below the minimum head on the minimum speed curve will be out of capacity.
    4. +
    5. Points below the stone wall will be out of capacity.
    6. +
    7. Points above the maximum speed curve will be out of capacity.
    8. +
    9. Points where the flow is below the minimum flow at the minimum speed curve will be moved to the minimum speed curve by increasing the rate using the ASV of the compressor.
    10. +
    11. Points where the flow is below the surge line of the compressor will be moved to the surge line of the compressor by increasing the rate using the ASV of the compressor.
    12. +
    +

    Format

    +

    The model is defined under the main keyword MODELS in the format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for second stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Surge control margin for the compressor stage. Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ... and so forth for each stage in the train
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    CALCULATE_MAX_RATE: <Optional compressor train max standard rate [Sm3/day] in result if set to true. Default false. Use with caution. This will increase runtime significantly. >
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html new file mode 100644 index 0000000000..cd15586359 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures/index.html @@ -0,0 +1,80 @@ + + + + + +Variable speed compressor train model with multiple streams and pressures | eCalc™ Docs + + + + +

    Variable speed compressor train model with multiple streams and pressures

    This compressor type is a more advanced model which covers compressor trains which may have multiple ingoing and/or outgoing streams and/or extra pressure controls. The figure below is an example of what this compression train could look like.

    +

    Compressor train with multiple streams and pressures

    +

    Format

    +

    The model is defined under the main keyword MODELS in the format:

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    # All streams defined ahead of stage
    # Default outlet stream after last stage should not be defined
    STREAMS: # All inlet streams must have fluid models with the same eos model
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING # NB: No fluid definition for outgoing streams!
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    CONTROL_MARGIN: <Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    - ...
    MAXIMUM_POWER: <Optional constant MW maximum power the compressor train can require>
    +

    Keyword usage

    +
      +
    • +

      STREAMS is a list of all in- and out-going streams for the compressor train.

      +
        +
      • The same equation of state (EOS) must be used for each INGOING stream fluid models
      • +
      • OUTGOING fluid models cannot be specified.
      • +
      +
    • +
    • +

      STAGES is a list of all the stages in the compressor train.

      +
        +
      • For each stage, a temperature in Celsius must be defined. It +is assumed that the gas is cooled down to this temperature ahead of the compression at this stage.
      • +
      • A reference to a +compressor chart needs to be specified for each stage.
      • +
      • For the first stage, it is required to have at least one stream of INGOING type. In addition, INTERSTAGE_CONTROL_PRESSURE cannot be used on the first stage.
      • +
      • Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream +will be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the +molar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will +be subtracted the rate of the outgoing stream.
      • +
      +
    • +
    • +

      PRESSURE_DROP_AHEAD_OF_STAGE is optional, but if defined it will reduce the inlet pressure of that particular stage by a fixed value. +As of now, only a single value is supported - i.e. a time series cannot be used here.

      +
    • +
    • +

      CONTROL_MARGIN is a surge control margin, see Surge control margin for variable speed compressor chart.

      +
    • +
    • +

      CONTROL_MARGIN_UNIT is the unit of the surge control margin.

      +
    • +
    +

    INTERSTAGE_PRESSURE_CONTROL

    +
    note

    INTERSTAGE_CONTROL_PRESSURE may be specified for one (only one!) of the stages 2, ..., N. It may not be specified for the first stage. See INTERSTAGE_CONTROL_PRESSURE for more usage details

    +

    This is optional but essentially when this is specified the compression train is split into two parts - before and after the INTERSTAGE_CONTROL_PRESSURE. As all rates and pressures (suction, discharge and interstage) are known, each side of the compression train can be solved independently.

    +

    Thus, given this, the rotational speed needed to match the suction and interstage pressure can be found. This speed will be for the first section of the compression train. The same is done for the second part of the train, only here the rotational speed is found to match the interstage and discharge pressure, for the given rates.

    +

    The highest speed between the first and second parts of the train is then taken as the rotational speed of the compression train. +This speed will essentially be needed to meet the most demanding pressure interval. +The section with the lower rotational speed must then be run with a form of pressure control (see UPSTREAM_PRESSURE_CONTROL/DOWNSTREAM_PRESSURE_CONTROL).

    +

    In a given simulation, the section of the compression train that requires either upstream or downstream pressure control is not fixed. This means that for different time steps, the part of the train with the highest rotational speed is not set to either the first or second section. Thus, both pressure control methods must be specified but only one of them will be used for each time step.

    +

    Technically, the INTERSTAGE_PRESSURE_CONTROL may be set independent of where the streams are defined. I.e. it may be +defined at a stage where there is an in- or out-going stream defined, or at a stage where there is no defined stream. +In reality, the INTERSTAGE_PRESSURE_CONTROL is linked to a stream, for example an outgoing stream for export where the +export pressure is defined, and where the rest of the gas continues through the compressor train for example for +injection at a higher pressure.

    +

    Fixed pressure control

    +

    The available pressure controls are

    +
      +
    • DOWNSTREAM_CHOKE
    • +
    • UPSTREAM_CHOKE
    • +
    • INDIVIDUAL_ASV_PRESSURE
    • +
    • INDIVIDUAL_ASV_RATE
    • +
    • COMMON_ASV
    • +
    +

    The sub-train where the pressure control is used, is now modeling wise equal to a single speed train as the speed is +determined from the other sub-train. The inlet and outlet pressures for a sub-train, may be either the suction pressure +and the interstage control pressure or interstage control pressure and the discharge pressure, depending on which sub +part governs the speed of the full train.

    +

    See FIXED PRESSURE CONTROL for more details.

    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html b/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html new file mode 100644 index 0000000000..c402a75425 --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/index.html @@ -0,0 +1,103 @@ + + + + + +Fixed speed pressure control | eCalc™ Docs + + + + +

    Fixed speed pressure control

    +

    Theory

    +

    Compressors are typically controlled by changing the rotational speed of the compressor train shaft, which can either increase or decrease the work performed. +In the case where this is not possible (single speed compressors), or this is not sufficient to control the compressor, other methods of control need to be used. +In eCalc™, there are three main compressor control methods considered (aside from rotational speed control), these are:

    +
      +
    • Upstream choking/throttling
    • +
    • Downstream choking/throttling
    • +
    • Anti-surge recycling
    • +
    +

    Each of these methods are used depending on the situation and placement of the compressor's operating points. +A summary of how these methods work in practice are seen below. +In these figures, the red point represents a singular operating point, which is shifted with the given control mechanism. The operating point first starts below the compressor curve and is then adjusted toward the curve (by either changing head or rate). The different pressure control methods will change the operating points in the follow way:

    +
      +
    • Upstream throttling will decrease the inlet pressure, and in turn increase the head and the inlet volumetric flow rate (lower pressure = lower density = lower flow rate).
    • +
    • Downstream throttling will increase the head, as the outlet pressure is increased. There is no influence on the inlet rate in this case. +However, when the operating points is on the compressor curve, and the head is further increased (by increasing the outlet pressure), the rate of the compressor will thus be reduced.
    • +
    • ASV recycling will simply increase the throughout of the compressor without influencing the head. +However, when the operating points is on the compressor curve, and the mass rate through is further increased, compressor head will in turn be reduced (along the curve).
    • +
    +
    Upstream ChokingDownstream Choking
    +
    ASV Recycling
    +

    Control modelling in eCalc™

    +

    In eCalc™, upstream and downstream choking is modelled as described in the theory section. +ASV recycling on the other hand is done in three separate ways. +These three modelling methods are important for a compression train with more than one stage. This is due the fact that when each compressor stage has an individual ASV, the solution is under determined. +For a single stage compressor, the results of these methods will be identical. +This will further be elaborated upon in the recirculation options section.

    +

    Some scenarios where additional pressure control is required can be when:

    +
      +
    • The compressor train only operates at one speed (SINGLE_SPEED_COMPRESSOR_TRAIN), +and the given rate and suction pressure gives a too high discharge pressure.
    • +
    • The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN, +but it already operates at the minimum speed, and still the discharge pressure is too high.
    • +
    • The compressor train is a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES +required to meet an export pressure, before compressing gas further for injection. Here the +rotational speed required to bring the gas from inlet pressure to export pressure may be higher than the speed +required to bring the gas from export pressure to discharge pressure. Hence, the rotational speed giving +the correct export pressure will give a too high discharge pressure.
    • +
    +

    Pressure control methods - choking options

    +

    In a situation where the rotational speed of the shaft can not be varied here are only two degrees of freedom. +This means that if you give the suction pressure and the flow rate as input, the discharge pressure is decided by those +two inputs. Similarly, if you give the rate and the discharge pressure as input, the suction pressure is decided by +those two inputs. Hence, to calculate the energy usage for a given rate, suction pressure and discharge pressure, a +method for fixed speed pressure control must be defined. This can be done by a choke valve upstream or downstream +of the compressor train, or by recirculating fluid inside the compressor train.

    +

    Currently, there are two options for choking the pressure in eCalc™:

    +

    UPSTREAM_CHOKE

    +

    The suction pressure is reduced such that the resulting suction pressure after choking together with the given speed results in the required discharge pressure. +As the inlet pressure is reduced, the inlet flow rate will also increase.

    +

    DOWNSTREAM_CHOKE

    +

    The pressure is choked to the required discharge pressure after the compressor train. So the compressor's head will increase, as the compressor will compress the gas to a higher discharge pressure - which will subsequently be choked to the desired pressure.

    +

    Pressure control methods - recirculation options

    +

    As previously mentioned, there are three different methods in eCalc™ for modelling ASV recycling. +This is necessary as when there is more than one compressor stage, there will be individual ASVs per stage. +Thus, the problem is under determined, and there are multiple possible solutions. +Therefore, some modelling choices must +be done. +There are currently three options available in eCalc™:

    +
      +
    • INDIVIDUAL_ASV_PRESSURE
    • +
    • INDIVIDUAL_ASV_RATE
    • +
    • COMMON_ASV
    • +
    +
    Note

    With only one compressor stage or only one recirculation loop (common asv over the entire compressor train), +a unique solution to how much volume to recirculate is available.

    For a single stage compressor, all recirculation options should give the same result.

    +

    A further explanation of ASV recycling can be seen in the figure below. +Here, it can be seen that the head of a compressor is reduced when the rate is increased. +This means that recirculation can reduce the +discharge pressure for a single speed compressor.

    +

    +

    Looking at the figure above, for an actual volume rate of 1882 am3/hr, the head is 93 kJ/kg (blue dashed line). If this head leads to a too large discharge pressure, it can be reduced by recirculation +using the anti-surge valve. As the actual flow rate through the compressor increases, the head is also reduced, +meaning that a higher actual flow rate leads to a lower discharge pressure.

    +

    For example, by increasing the actual volume rate +to 2322 am3/hr (by recirculating 440 am3/hr through the ASV), the head is reduced to about 81.3 kJ/kg (red dashed lines) +, in turn leading to a lower discharge pressure. The head can be reduced further down to 42.5 kJ/kg at the maximum flow +rate (3201 am3/hr) for the compressor (yellow dashed lines). The difference between the flow rate entering the +compressor train and the maximum flow rate for the compressor gives the amount of additional volume that can be +recirculated through the compressor - the available capacity.

    +

    INDIVIDUAL_ASV_PRESSURE

    +

    The pressure ratio (discharge pressure/suction pressure) over each compressor stage is constant. +Essentially, with each time step there will be no change in the pressure ratio, but the volume flow will adjust to keep the pressure ratio constant.

    +

    INDIVIDUAL_ASV_RATE

    +

    The flow rate through each compressor stage is increased with the same fraction of the available capacity in that stage.

    +

    For example, if you have a 2-stage compressor and the first stage has 500 Am3/h available capacity and the second has 400 Am3/h available capacity. +If the first stage increases by 25 % of the available capacity (125 Am3/h), the second stage increase by 25 % too (100 Am3/h) - given that this matches the required output.

    +

    COMMON_ASV

    +

    The same volume is recirculated through the entire compressor train. +Thus, each compression stage will have the same mass throughput.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/compressor_modelling/index.html b/docs/about/modelling/setup/models/compressor_modelling/index.html new file mode 100644 index 0000000000..33a84228dc --- /dev/null +++ b/docs/about/modelling/setup/models/compressor_modelling/index.html @@ -0,0 +1,36 @@ + + + + + +Compressor modelling | eCalc™ Docs + + + + +

    Compressor modelling

    +

    Compressors may be single speed or variable speed, they may be stand-alone or there may be multiple compressors mounted +on a common shaft (compressor train), they may be run with an electric motor or be driven by a turbine coupled +directly to the shaft, there may be one or many compressors/compressor trains in parallel connected to a common +manifold from which the gas is distributed between these in different operational settings.

    +

    +

    In eCalc™, single compressors and compressor trains are modeled the same way, a single compressor is just a train with +just one stage. There are multiple modeling options for compressor trains:

    +
      +
    • Sampled compressor model: The compressor model is setup in an external tool, and this model is sampled by +running a point set of rates and pressures which span the operational area of the compressor train. The sampled data (rates, inlet pressures, outlet pressures and total energy usage for all stages) are specified in a csv file and input to eCalc™. Note, this is not inputted in the MODELS section, rather in the FACILITY_INPUTS section
    • +
    • Single speed compressor train model: The compressor train modeling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage. In addition, since the speed is fixed, defining a pressure control method is required. This pressure control is used to meet the required discharge pressure.
    • +
    • Variable speed compressor train model: The compressor train modelling is done in eCalc™. This model requires a fluid to be specified and a polytropic compressor chart for each compressor stage.
    • +
    • Simplified variable speed compressor train model: Model the same compressor train as the above, but is more +lightweight in that instead of iterating to meet the requested discharge pressure, it assumes all stages has equal +pressure fractions and solves for each stage independently. As the shaft speed is not used in the calculations, this +model supports using generic compressor charts, see the Compressor charts section.
    • +
    • Variable speed compressor train model with multiple streams and pressures: This is a more complex model, where it is +possible to define fluid streams going in and out at different stages in the compressor train. Also, an additional +pressure requirement may be specified between two stages. This model is suitable in cases where for example a part of +the fluid stream is taken out after one stage at a specified pressure for export, and the rest is further compressed +for injection at a higher pressure.
    • +
    +

    Core theory behind the modelling of compressors in eCalc™ can be found here.

    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/fluid_model/index.html b/docs/about/modelling/setup/models/fluid_model/index.html new file mode 100644 index 0000000000..6455988105 --- /dev/null +++ b/docs/about/modelling/setup/models/fluid_model/index.html @@ -0,0 +1,57 @@ + + + + + +Fluid model | eCalc™ Docs + + + + +

    Fluid model

    +

    To calculate the energy usage related to compression of a natural gas, information about the composition is needed, i.e. +which components it consist of and the (mole) fraction of each. Typical components for natural gas are alkanes such as +methane, ethane, propane, butane, pentane, hexane in addition to water, nitrogen and carbone dioxide. Alkanes with seven +or more carbon atoms may occur, but these are often just part of the liquid (oil) phase and not significant in dry gas +compression.

    +

    As the fluid is going through the compressor in a fluid dynamic process, the enthalpy changes, resulting in a new state +with increased pressure and temperature, and decreased volume. To estimate these changes, an equation-of-state (EOS) +model is used. The default EOS model in eCalc is SRK (Soave-Redlich-Kwong).

    +

    The GERG models (GERG 2008) are used to calculate enthalpy, gamma and density, whilst other properties such as molar mass +is based on either SRK or PR.

    +

    Available EOS models

    +
      +
    • SRK (Soave-Redlich-Kwong)
    • +
    • PR (Peng-Robinson)
    • +
    • GERG_SRK
    • +
    • GERG_PR
    • +
    +

    Fluid model using predefined composition

    +

    Available predefined fluid compositions (with mole weights) are

    +
      +
    • ULTRA_DRY (17.1 kg/kmol)
    • +
    • DRY (18.3 kg/kmol)
    • +
    • MEDIUM (19.4 kg/kmol)
    • +
    • RICH (21.1 kg/kmol)
    • +
    • ULTRA_RICH (24.6 kg/kmol)
    • +
    +

    Format

    +
    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: <eos model>
    GAS_TYPE: <name of a predefined composition>
    +

    Examples

    +

    Examples with predefined fluid

    +
    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM
    +
    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: PR
    GAS_TYPE: ULTRA_DRY
    +

    Example where EOS is defaulted to SRK and GAS_TYPE defaulted to MEDIUM

    +
    MODELS:
    - NAME: fluid_model_reference_name
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    +

    Fluid model with user-specified composition

    +

    The composition is specified by setting the mole fraction of each component. Setting the mole fraction for methane is +required, all other components are optional and will be set to 0 if not specified. If methane is not part of your +composition, simply put 0.0 for it.

    +

    It is not important that the fractions sum to one as they will be normalized by eCalc. It is the relative amount of each +that will be important.

    +

    Format

    +
    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: <eos model>
    COMPOSITION:
    water: <mole fraction>
    nitrogen: <mole fraction>
    CO2: <mole fraction>
    methane: <mole fraction, required>
    ethane: <mole fraction>
    propane: <mole fraction>
    i_butane: <mole fraction>
    n_butane: <mole fraction>
    i_pentane: <mole fraction>
    n_pentane: <mole fraction>
    n_hexane: <mole fraction>
    +

    Example

    +
    MODELS:
    - NAME: <name of fluid model, for reference>
    TYPE: FLUID
    FLUID_MODEL_TYPE: COMPOSITION
    EOS_MODEL: srk
    COMPOSITION:
    water: 0.1
    nitrogen: 0.74373
    CO2: 2.415619
    methane: 85.60145
    ethane: 6.707826
    propane: 2.611471
    i_butane: 0.45077
    n_butane: 0.691702
    i_pentane: 0.210714
    n_pentane: 0.197937
    n_hexane: 0.368786
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/index.html b/docs/about/modelling/setup/models/index.html new file mode 100644 index 0000000000..65fd06167c --- /dev/null +++ b/docs/about/modelling/setup/models/index.html @@ -0,0 +1,28 @@ + + + + + +Models | eCalc™ Docs + + + + +

    Models

    note

    The MODELS keyword is optional for an eCalc™ model to run. However, it is critical for compressor and turbine modelling.

    +

    This part of the setup defines input files that characterize various fluid, compressor and turbine models. These are later used as input in the INSTALLATIONS part of the setup by referencing their NAME.

    +

    Format

    +
    MODELS:
    - NAME: <name of model, for reference>
    TYPE: <model type>
    <other keywords according to TYPE>
    +

    Supported types

    +

    The supported types are:

    +
      +
    • FLUID
    • +
    • COMPRESSOR_CHART
    • +
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • +
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    • TURBINE
    • +
    • COMPRESSOR_WITH_TURBINE
    • +
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/models/turbine_modeling/index.html b/docs/about/modelling/setup/models/turbine_modeling/index.html new file mode 100644 index 0000000000..a3ca6adc07 --- /dev/null +++ b/docs/about/modelling/setup/models/turbine_modeling/index.html @@ -0,0 +1,38 @@ + + + + + +Turbine modelling | eCalc™ Docs + + + + +

    Turbine modelling

    +

    The turbine model requires values for efficiencies vs corresponding loads. Currently also a lower heating value needs to +be specified (planned feature is to get this from the fuel type used)

    +

    The load values are given in MW, while efficiency values are numbers between 0 and 1.

    +

    The fuel usage for a turbine is equal to

    +FUEL_USAGE=LOAD_IN_MEGAWATTSECONDS_PER_DAYLOWER_HEATING_VALUEEFFICIENCYFUEL\_USAGE = \frac{LOAD\_IN\_MEGAWATT * SECONDS\_PER\_DAY}{LOWER\_HEATING\_VALUE * EFFICIENCY} +

    When evaluated for a load (in units MW), the efficiency is evaluated by linearly interpolating the input load vs +efficiency data.

    +

    The input values for load and efficiency are lists which both MUST START WITH 0! The user is thus responsible for the +behaviour also for small load values.

    +

    For load values equal to 0, the fuel usage is also set to 0.

    +

    Lower heating value is given in units MJ/Sm3

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    TURBINE_LOADS: <list of power values in mega watt>
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    +

    Combining a compressor train and a turbine into one model

    +

    To model a turbine driven compressor train, a compressor train model needs to be combined with a turbine model. The +calculated shaft power required for the compressor train, will then be the input of the turbine model to calculate +fuel usage.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine model, for reference>
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: <reference to compressor train model defined in [MODELS](../references/keywords/MODELS) or [FACILITY_INPUTS](../references/keywords/FACILITY_INPUTS) (of type COMPRESSOR_TABULAR)>
    TURBINE_MODEL: <reference to a turbine model defined in [MODELS](../references/keywords/MODELS) (of type TURBINE)>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Examples

    +
    MODELS:
    - NAME: simplified_compressor_train_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: simplified_compressor_train_model
    TURBINE_MODEL: compressor_train_turbine
    POWER_ADJUSTMENT_CONSTANT: 10
    +

    Turbine combined with presampled compressor model (COMPRESSOR_TABULAR<COMPRESSOR_TABULAR facility input type>)

    +
    MODELS:
    - NAME: compressor_sampled_tabulated_model_with_turbine
    TYPE: COMPRESSOR_WITH_TURBINE
    COMPRESSOR_MODEL: compressor_sampled_tabulated_model
    TURBINE_MODEL: compressor_train_turbine
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/time_series/index.html b/docs/about/modelling/setup/time_series/index.html new file mode 100644 index 0000000000..ea274b5926 --- /dev/null +++ b/docs/about/modelling/setup/time_series/index.html @@ -0,0 +1,42 @@ + + + + + +Time series | eCalc™ Docs + + + + +

    Time series

    note

    The TIME_SERIES keyword is mandatory within the eCalc™ YAML file.

    +

    This part of the setup file defines the inputs for time dependent variables, or "reservoir +variables". For many fields, this may be only one reservoir simulation model. But in some +cases, one might have several sources for reservoir and other relevant time series variables.

    +

    For example, a field may have a reservoir simulation model for some areas and decline curves in other area of +the reservoir. There may also be tie-ins which are affecting the energy/emissions on the field +installations. Also, there may be time profiles for other variables. +Therefore, a set of sources may be specified with a name, path to data and type. The name is +later referred to in the system of energy consumers defined under INSTALLATIONS.

    +

    Reservoir variables and other time varying data not coming from a reservoir simulation model can +be specified in a CSV file.

    +

    The paths to the input files may be either absolute or relative to the setup file.

    +

    Supported types

    +

    The supported time series types are:

    +
    TypeSupported file formatsInterpolation typeComment
    DEFAULT.csvNot possible to specify:
    RIGHT is used
    New in v8.1
    MISCELLANEOUS.csvMandatory input:
    LEFT/RIGHT/LINEAR
    +

    Format

    +

    Each line under TIME_SERIES has the format:

    +
    TIME_SERIES:
    - NAME: <time series reference name>
    TYPE: <type>
    FILE: <path_to_file>
    INFLUENCE_TIME_VECTOR: <True/False>
    EXTRAPOLATION: <True/False>
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +

    The input data is expected to be in metric units. The NAME is later referred +to in the INSTALLATIONS part of the setup file. +INFLUENCE_TIME_VECTOR, EXTRAPOLATION +and INTERPOLATION_TYPE may have default values set depending +on the choice of TYPE. See the documentation for each keyword for details.

    +

    Requirements

    +
      +
    • At least one input source with INFLUENCE_TIME_VECTOR set to True.
    • +
    • Must include sources referred to in the variables for each consumer.
    • +
    +

    Example

    +
    TIME_SERIES:
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: /path_to_model1/model_data.csv
    - NAME: SIM2
    TYPE: DEFAULT
    FILE: /path_to_tiein/tie_in_field.csv
    - NAME: DATA3
    TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures
    FILE: inputs/somecsvdata.csv
    INFLUENCE_TIME_VECTOR: FALSE
    EXTRAPOLATION: TRUE
    INTERPOLATION_TYPE: RIGHT
    + + \ No newline at end of file diff --git a/docs/about/modelling/setup/variables/index.html b/docs/about/modelling/setup/variables/index.html new file mode 100644 index 0000000000..d1d470d94b --- /dev/null +++ b/docs/about/modelling/setup/variables/index.html @@ -0,0 +1,30 @@ + + + + + +Variables | eCalc™ Docs + + + + +

    Variables

    note

    The VARIABLES keyword is optional for an eCalc™ model to run.

    +

    Defining variables

    +

    Variables are defined in their own section in the YAML file, they can either be defined without link to time, or linked to time.

    +

    Format

    +
    VARIABLES:
    <variable name>:
    VALUE: <expression>
    +

    With time link:

    +
    VARIABLES:
    <variable name>:
    <YYYY-MM-DD [HH:mm:ss]>:
    VALUE: <expression>
    +

    Examples

    +
    VARIABLES:
    salt_water_injection:
    VALUE: SIM1:COL1 {*} 2
    +

    With time link:

    +
    VARIABLES:
    salt_water_injection:
    2010-01-01:
    VALUE: SIM1:COL1 {*} 2
    2020-01-01:
    VALUE: SIM1:COL1
    +

    Using variables

    +

    Variables can be used in any expression throughout the YAML file and can even be used within defining other variables.

    +

    Example

    +

    Using variables in the INSTALLATION section:

    +
    VARIABLES:
    gas_rateA:
    VALUE: SIM;COL1
    gas_rateB:
    VALUE: SIM;COL2

    INSTALLATIONS:
    - NAME: installationA
    CATEGORY: FIXED
    ...
    - NAME: sample_compressor
    CATEGORY: COMPRESSOR
    ENERGYFUNCTION: compressorA
    RATE: $var.gas_rateA {+} $var.gas_rateB
    ...
    +

    Using variables in defining another variable:

    +
    VARIABLES:
    salt_water_injection:
    VALUE: SIM1:COL1 {*} 2
    double_injection_rate:
    VALUE: $var.salt_water_injection {*} 2
    + + \ No newline at end of file diff --git a/docs/about/modelling/theory/compressor_modelling/index.html b/docs/about/modelling/theory/compressor_modelling/index.html new file mode 100644 index 0000000000..12557a32b6 --- /dev/null +++ b/docs/about/modelling/theory/compressor_modelling/index.html @@ -0,0 +1,55 @@ + + + + + +Compressor modelling | eCalc™ Docs + + + + +

    Compressor modelling

    A compressor model describes what happens to a fluid going through a compressor and calculates how much power is +required in the process.

    +

    At the suction side, one need information about the fluid (natural gas) which has a (static) specification of the +composition, a specified rate, a temperature and a pressure. As the fluid is going through the compressor in a fluid +dynamic process, the enthalpy changes, resulting in a new state and both the pressure and the +temperature of the fluid is increased, while the volume is decreased. This change is calculated using an +equation-of-state (EOS) model. See Fluid model

    +

    +

    eCalc does not perform fluid dynamic modeling. Instead, the behaviour of the compressor is described by a polytropic +compressor chart which specifies both the operational domain of the compressor, but also relates volume rate, head and +efficiency for the compressor.

    +

    An isentropic (adiabatic) compression is the process where no heat is added or removed from a system. In a polytropic +process, changes in the gas characteristics is considered. Dynamic natural gas compressors typically follow a polytropic +process defined by the formula P1V1n=P2V2nP_\mathrm{1} V_\mathrm{1}^n = P_\mathrm{2} V_\mathrm{2}^n, where nn is the +polytropic exponent which is experimentally determined for a given compressor.

    +

    +The power need for compression is given by

    +power=polytropic_headmass_rateefficiencypower = \frac{polytropic\_head * mass\_rate}{efficiency} +

    and the relationship between polytropic head and the pressures are

    +polytropic_head=nn1ZRT1MW((P1P2)n1n1)polytropic\_head = \frac{n}{n-1} \frac{Z R T_1}{MW} \left( \left(\frac{P_1}{P_2} \right)^{\frac{n-1}{n}} -1 \right) +

    where nn is the polytropic exponent, ZZ the compressibility, RR is the gas constant, T1T_1 is the inlet temperature and MWMW the molecular weight.

    +

    Further, the polytropic exponent is approximated as

    +κpolytropic_efficiencyκ1\frac{\kappa * polytropic\_efficiency}{\kappa -1} +

    where κ\kappa is the heat capacity ratio of the fluid.

    +

    κ\kappa and ZZ are not for inlet conditions, but average values for the fluid throughout the process, and +the polytropic process and the calculations are iterated until these converge.

    +

    If there is only one compressor, the outlet pressure for each compressor is known, and the polytropic head and +efficiency may be calculated from directly from the above polytropic head and efficiency formulas.

    +

    However, for compressor trains, the intermediate pressures are not known ahead, instead one may use the fact that all +compressors run with the same speed as they are mounted on the same shaft.

    +

    To calculate the energy usage for the compressor train using the common speed, eCalc uses a forward model to +calculate the outlet stream given the inlet stream and a given speed. Then, this model is iterated until the discharge pressure is equal to the requested discharge pressure for evaluation. To use this model, see +Variable speed compressor train model An alternative is to neglect the common speed property of the train, an instead assume (incorrectly but maybe good +enough for some purposes) that the pressure fraction is equal for all stages. With this assumption, the intermediate pressures can be calculated and each stage may be calculated independently without the speed iteration. To use this model, see +Simplified variable speed compressor train model.

    +

    In some cases, the shaft of the compressor train can only run on a single fixed speed. In these cases eCalc needs +information about how the pressure should be controlled to meet the required discharge pressure. Available pressure +control options are choking and recirculating using anti-surge valves. To use this model, see Single speed compressor train model.

    +

    In other cases, the compressor trains have more complex setup and process control which needs a more flexible model. The +figure below shows an example where one may have two inlet streams with different pressures and potentially different +gas compositions and one outlet stream for export gas with a pressure control. To use a model suitable for such cases, +see Variable speed compressor train model with multiple streams and pressures.

    +

    + + \ No newline at end of file diff --git a/docs/about/modelling/theory/index.html b/docs/about/modelling/theory/index.html new file mode 100644 index 0000000000..d5363eea5e --- /dev/null +++ b/docs/about/modelling/theory/index.html @@ -0,0 +1,13 @@ + + + + + +Theory | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/modelling/theory/pump_modelling/index.html b/docs/about/modelling/theory/pump_modelling/index.html new file mode 100644 index 0000000000..cf7e1d74c1 --- /dev/null +++ b/docs/about/modelling/theory/pump_modelling/index.html @@ -0,0 +1,21 @@ + + + + + +Pump modelling | eCalc™ Docs + + + + +

    Pump modelling

    As liquid can be assumed incompressible, pump calculations are simpler compared to compressor calculations. The pumped fluid can be characterized with its density, and no fluid calculations are necessary.

    +

    The power demand of a pump is calculated as

    +power=headmass_rateefficiency.power = \frac{head * mass\_rate}{efficiency}. +

    Here, the relationship between head and pressures is given by

    +head=(P2P1)liquid_densityghead = \frac{(P_2-P_1)}{liquid\_density * g} +

    where P1P_1 and P2P_2 are the pump suction and discharge pressures, respectively, and gg is the gravitational constant.

    +

    eCalc uses the pump chart to relate liquid flow, head and efficiency for the pump, as well as defining the operational envelope for the pump.

    +

    For single speed pumps, eCalc does extrapolations corresponding to minflow (liquid recirculation) and choking to keep the pump operation within the operational envelope.

    +

    + + \ No newline at end of file diff --git a/docs/about/modelling/workflow/generic_workflow/index.html b/docs/about/modelling/workflow/generic_workflow/index.html new file mode 100644 index 0000000000..fa94d61ee6 --- /dev/null +++ b/docs/about/modelling/workflow/generic_workflow/index.html @@ -0,0 +1,56 @@ + + + + + +Generic Workflow | eCalc™ Docs + + + + +

    Generic Workflow

    Simplified Process Flow Diagram

    +

    The image below illustrates a simplified process flow diagram for a generic offshore oil and gas facility. Each unit included in this diagram can be modelled with the use of eCalc. +The workflow below will outline what is necessary to obtain for each step. In addition, there are some accompanied explanations to the workflow.

    +

    +

    Workflow

    + +

    Workflow Explanation

    +

    Required Subsurface Profiles

    +

    All subsurface profiles must be in calendar day rate Sm3/day and with its PE (REGULARITY). This data must be inputted as a TIME-SERIES and references to how it is used in the facility or by a relevant consumer.

    +

    Facility Information

    +

    Constant Power Loads

    +

    To simplify certain models, there could be some common assumptions made. Here are some examples:

    +
      +
    • Base Load: As eCalc™ is not simulating the whole facility there are often energy consumers that are not modelled. +Typically these energy consumers, related to things such as the energy consumption of living quarters and direct energy consumers dependent on there being production/injection, are often constant loads. +These smaller constant loads are then grouped into a larger term, called the "baseload". This is assumed to be constant and independent of the production rate of the facility.
    • +
    • Recompressor: The main function of a recompressor is to compressor gas from separator pressures back up to the inlet separator pressure. +If this compressor is small and has little fluctuation in its load, or its processed gas rate and composition are unknown, +thus, to simplify modelling, this recompressor could be modelled as a constant load. And at times, is included within the facility's base load
    • +
    • Oil Export Pumps: As eCalc™ does not model oil pumps, these are often modelled as constant loads or modelled with a table (that relates oil rate to power consumption). The method in which they are modelled depends from facility to facility
    • +
    +

    Additional Information

    +

    Any emissions that do not fall within the defined categories can still be considered for a given platform. For example, if there are drilling activities, an additional fuel type can be specified and related to the fuel consumption of a drilling rig.

    +

    Consumer Information

    +

    Generator Set

    +

    As eCalc™ does not indepthly model gas turbine generators, alternative methods are used. +Here, fuel consumed and power generated is related in tabular form. These are typically linear relationships, and if more than one generator is used, "generator switching" is modelled by adding another generator curve on top of the existing.

    +

    This means that the facility will operate in the most efficient manner, i.e. meaning that if one generator will satisfy the power demand, only one generator will always be used.

    +

    Compressor Curves

    +

    eCalc™ has generic compressor curve functionality which can be used when compressor curves are not available. +However, if a manufactor compressor chart is available, it is always recommended to use this over a generic chart. +The generic compressor curves, use the assumption of constant polytropic efficiency, which is only a good assumption if the compressor is running near the design points.

    +

    Validation

    +

    Before running an eCalc™ model, checking whether the eCalc™ model is valid or not is an essential task. If a model is not valid, this means that input requirements set by the user are not being fulfilled, or that some consumers are giving unrealistic solutions.

    +

    Validity can be checked by consumers, and there are often specific reasons why certain consumers are invalid. Therefore, it requires engineers not only to understand the validation of operation points (history data) from consumers, but also to know the specific limits of compressor or pump charts. The charts of consumers should fit their operation points. For example:

    +
      +
    • Compressors and Pumps: It is common that either too high a head or rate value is specified. This means that the invalid point is outside the limits of the performance chart. To determine the issue, it is recommended that the operational points (Head, and actual flowrate) are plotted together with the chart.
    • +
    • Generator Set: The most common issue here is that the amount of power required is higher than the maximum value in the utilised genset.
    • +
    +

    Before any chart adjustments are made, engineers should first verify who provide the input that the adjustments make sense.

    +

    Calibration

    +

    The term calibration in eCalc™ often refers to the history matching of the facility. Essentially, real operational data is compared against the eCalc™ model results. If they do not correlate various changes are made to the model.

    +

    The main workflow with this would be to match every individual consumer, e.g. each pump and compressor. After that, it is the recommended to compare on the facility level (e.g. total power consumed or total fuel used), then various adjustments can be made. +These adjustments can mean changes to the base load, shifting the compressor curves, or simply by using a POWERLOSSFACTOR.

    + + \ No newline at end of file diff --git a/docs/about/modelling/workflow/index.html b/docs/about/modelling/workflow/index.html new file mode 100644 index 0000000000..9fd6cf9013 --- /dev/null +++ b/docs/about/modelling/workflow/index.html @@ -0,0 +1,13 @@ + + + + + +eCalc™ Workflow | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/api/index.html b/docs/about/references/api/index.html new file mode 100644 index 0000000000..ff8e18d623 --- /dev/null +++ b/docs/about/references/api/index.html @@ -0,0 +1,14 @@ + + + + + +API reference | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc.html b/docs/about/references/api/libecalc.html new file mode 100644 index 0000000000..74d19b8b62 --- /dev/null +++ b/docs/about/references/api/libecalc.html @@ -0,0 +1,238 @@ + + + + + + + libecalc API documentation + + + + + + + + + +
    +
    +

    +libecalc

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common.html b/docs/about/references/api/libecalc/common.html new file mode 100644 index 0000000000..833f5f3fd2 --- /dev/null +++ b/docs/about/references/api/libecalc/common.html @@ -0,0 +1,268 @@ + + + + + + + libecalc.common API documentation + + + + + + + + + +
    +
    +

    +libecalc.common

    + +

    Components, helpers, utils and "extensions" of the language and its batteries should reside here. What is here could +easily have been as a part of the language or its batteries, and therefore there should be no rules as to which +parts of the code that can include these things.

    +
    + + + + + +
    1"""
    +2Components, helpers, utils and "extensions" of the language and its batteries should reside here. What is here could
    +3easily have been as a part of the language or its batteries, and therefore there should be no rules as to which
    +4parts of the code that can include these things.
    +5"""
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info.html b/docs/about/references/api/libecalc/common/component_info.html new file mode 100644 index 0000000000..ca2b952297 --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.component_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info/component_level.html b/docs/about/references/api/libecalc/common/component_info/component_level.html new file mode 100644 index 0000000000..938f91d6b4 --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info/component_level.html @@ -0,0 +1,431 @@ + + + + + + + libecalc.common.component_info.component_level API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info.component_level

    + + + + + + +
     1from enum import Enum
    + 2
    + 3
    + 4class ComponentLevel(str, Enum):
    + 5    ASSET = "ASSET"
    + 6    INSTALLATION = "INSTALLATION"
    + 7    GENERATOR_SET = "GENERATOR_SET"
    + 8    SYSTEM = "SYSTEM"
    + 9    CONSUMER = "CONSUMER"
    +10    MODEL = "MODEL"
    +
    + + +
    +
    + +
    + + class + ComponentLevel(builtins.str, enum.Enum): + + + +
    + +
     5class ComponentLevel(str, Enum):
    + 6    ASSET = "ASSET"
    + 7    INSTALLATION = "INSTALLATION"
    + 8    GENERATOR_SET = "GENERATOR_SET"
    + 9    SYSTEM = "SYSTEM"
    +10    CONSUMER = "CONSUMER"
    +11    MODEL = "MODEL"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + ASSET = +<ComponentLevel.ASSET: 'ASSET'> + + +
    + + + + +
    +
    +
    + INSTALLATION = +<ComponentLevel.INSTALLATION: 'INSTALLATION'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET = +<ComponentLevel.GENERATOR_SET: 'GENERATOR_SET'> + + +
    + + + + +
    +
    +
    + SYSTEM = +<ComponentLevel.SYSTEM: 'SYSTEM'> + + +
    + + + + +
    +
    +
    + CONSUMER = +<ComponentLevel.CONSUMER: 'CONSUMER'> + + +
    + + + + +
    +
    +
    + MODEL = +<ComponentLevel.MODEL: 'MODEL'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/component_info/compressor.html b/docs/about/references/api/libecalc/common/component_info/compressor.html new file mode 100644 index 0000000000..fb303368ae --- /dev/null +++ b/docs/about/references/api/libecalc/common/component_info/compressor.html @@ -0,0 +1,363 @@ + + + + + + + libecalc.common.component_info.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.component_info.compressor

    + + + + + + +
    1from enum import Enum
    +2
    +3
    +4class CompressorPressureType(str, Enum):
    +5    INLET_PRESSURE = "INLET_PRESSURE"
    +6    OUTLET_PRESSURE = "OUTLET_PRESSURE"
    +
    + + +
    +
    + +
    + + class + CompressorPressureType(builtins.str, enum.Enum): + + + +
    + +
    5class CompressorPressureType(str, Enum):
    +6    INLET_PRESSURE = "INLET_PRESSURE"
    +7    OUTLET_PRESSURE = "OUTLET_PRESSURE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INLET_PRESSURE = +<CompressorPressureType.INLET_PRESSURE: 'INLET_PRESSURE'> + + +
    + + + + +
    +
    +
    + OUTLET_PRESSURE = +<CompressorPressureType.OUTLET_PRESSURE: 'OUTLET_PRESSURE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/datetime.html b/docs/about/references/api/libecalc/common/datetime.html new file mode 100644 index 0000000000..bcea90127a --- /dev/null +++ b/docs/about/references/api/libecalc/common/datetime.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.datetime API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.datetime

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/datetime/utils.html b/docs/about/references/api/libecalc/common/datetime/utils.html new file mode 100644 index 0000000000..1167b2856e --- /dev/null +++ b/docs/about/references/api/libecalc/common/datetime/utils.html @@ -0,0 +1,461 @@ + + + + + + + libecalc.common.datetime.utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.datetime.utils

    + + + + + + +
     1from enum import Enum
    + 2
    + 3from libecalc.common.logger import logger
    + 4
    + 5
    + 6class DateTimeFormats(str, Enum):
    + 7    date_format_iso_8601 = "%Y-%m-%d"
    + 8    date_format_iso_8601_no_dash = "%Y%m%d"
    + 9    date_format_alternative_dd_mm_yyyy = "%d.%m.%Y"
    +10    time_format = "%H:%M:%S"
    +11
    +12    @staticmethod
    +13    def get_format(format_number: int = 0) -> str:
    +14        if format_number == 0:
    +15            date_format = DateTimeFormats.date_format_iso_8601.value
    +16        elif format_number == 1:
    +17            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +18        elif format_number == 2:
    +19            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +20        else:
    +21            # Default for numbers outside supported range
    +22            date_format = DateTimeFormats.date_format_iso_8601
    +23            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +24        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + +
    +
    + +
    + + class + DateTimeFormats(builtins.str, enum.Enum): + + + +
    + +
     7class DateTimeFormats(str, Enum):
    + 8    date_format_iso_8601 = "%Y-%m-%d"
    + 9    date_format_iso_8601_no_dash = "%Y%m%d"
    +10    date_format_alternative_dd_mm_yyyy = "%d.%m.%Y"
    +11    time_format = "%H:%M:%S"
    +12
    +13    @staticmethod
    +14    def get_format(format_number: int = 0) -> str:
    +15        if format_number == 0:
    +16            date_format = DateTimeFormats.date_format_iso_8601.value
    +17        elif format_number == 1:
    +18            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +19        elif format_number == 2:
    +20            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +21        else:
    +22            # Default for numbers outside supported range
    +23            date_format = DateTimeFormats.date_format_iso_8601
    +24            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +25        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + date_format_iso_8601 = +<DateTimeFormats.date_format_iso_8601: '%Y-%m-%d'> + + +
    + + + + +
    +
    +
    + date_format_iso_8601_no_dash = +<DateTimeFormats.date_format_iso_8601_no_dash: '%Y%m%d'> + + +
    + + + + +
    +
    +
    + date_format_alternative_dd_mm_yyyy = +<DateTimeFormats.date_format_alternative_dd_mm_yyyy: '%d.%m.%Y'> + + +
    + + + + +
    +
    +
    + time_format = +<DateTimeFormats.time_format: '%H:%M:%S'> + + +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_format(format_number: int = 0) -> str: + + + +
    + +
    13    @staticmethod
    +14    def get_format(format_number: int = 0) -> str:
    +15        if format_number == 0:
    +16            date_format = DateTimeFormats.date_format_iso_8601.value
    +17        elif format_number == 1:
    +18            date_format = DateTimeFormats.date_format_iso_8601_no_dash.value
    +19        elif format_number == 2:
    +20            date_format = DateTimeFormats.date_format_alternative_dd_mm_yyyy.value
    +21        else:
    +22            # Default for numbers outside supported range
    +23            date_format = DateTimeFormats.date_format_iso_8601
    +24            logger.warning(f"{DateTimeFormats.__class__}: {format_number} not supported, defaulted to 0 (ISO8601)")
    +25        return f"{date_format} {DateTimeFormats.time_format.value}"
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators.html b/docs/about/references/api/libecalc/common/decorators.html new file mode 100644 index 0000000000..cf3ee0abc6 --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.decorators API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators/capturer.html b/docs/about/references/api/libecalc/common/decorators/capturer.html new file mode 100644 index 0000000000..0a3b4bb62a --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators/capturer.html @@ -0,0 +1,602 @@ + + + + + + + libecalc.common.decorators.capturer API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators.capturer

    + + + + + + +
     1import os
    + 2import typing
    + 3from functools import wraps
    + 4from pathlib import Path
    + 5from typing import Any, Callable, Optional
    + 6
    + 7from libecalc.common.logger import logger
    + 8
    + 9unique_id: int = 1
    +10"""
    +11global static id to increase by one for each file being dumped
    +12"""
    +13
    +14
    +15class Jsonable(typing.Protocol):
    +16    """
    +17    Protocol to make sure that functions that are decorated for capture
    +18    can be serialized to json through the json() method
    +19    """
    +20
    +21    def json(self) -> str:
    +22        """
    +23        Serialize object as JSON
    +24
    +25        :return: a string according to json spec
    +26        """
    +27        ...
    +28
    +29
    +30def save(output_directory: Path, content: Jsonable):
    +31    """
    +32    A function to save serializable content. Each time this function is
    +33    called the name of the file that data is dumped to (which is an integer) will be incremented with 1.
    +34    E.g. file number one will be given the name 1.json, number two; 2.json and so on.
    +35
    +36    :param output_directory:   Where to save it. Missing parent directories will be created.
    +37    :param content:    What to save. Must be serializable to JSON through .json() method
    +38    """
    +39    Path.mkdir(output_directory, parents=True, exist_ok=True)
    +40    global unique_id
    +41    file_name = output_directory / f"{str(unique_id)}.json"
    +42    unique_id += 1
    +43
    +44    with open(file_name, "w") as file:
    +45        file.write(content.json())
    +46
    +47
    +48class Capturer:
    +49    """Decorator to capture values from a decorated function and optionally save to file"""
    +50
    +51    @staticmethod
    +52    def capture_return_values(
    +53        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +54    ) -> Optional[Any]:
    +55        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +56        the function works as if the decorator is not there.
    +57
    +58        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +59
    +60        Args:
    +61            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +62            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +63
    +64        Returns:
    +65            The same signature as the function it is decorating
    +66        """
    +67
    +68        def decorate(capturable: Callable[..., Jsonable]):
    +69            @wraps(capturable)
    +70            def with_capture(self, *args, **kwargs):
    +71                return_values = capturable(self, *args, **kwargs)
    +72                try:
    +73                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +74                except Exception as e:
    +75                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +76                return return_values
    +77
    +78            return with_capture
    +79
    +80        return decorate
    +
    + + +
    +
    +
    + unique_id: int = +1 + + +
    + + +

    global static id to increase by one for each file being dumped

    +
    + + +
    +
    + +
    + + class + Jsonable(typing.Protocol): + + + +
    + +
    16class Jsonable(typing.Protocol):
    +17    """
    +18    Protocol to make sure that functions that are decorated for capture
    +19    can be serialized to json through the json() method
    +20    """
    +21
    +22    def json(self) -> str:
    +23        """
    +24        Serialize object as JSON
    +25
    +26        :return: a string according to json spec
    +27        """
    +28        ...
    +
    + + +

    Protocol to make sure that functions that are decorated for capture +can be serialized to json through the json() method

    +
    + + +
    + +
    + + Jsonable(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    + +
    + + def + json(self) -> str: + + + +
    + +
    22    def json(self) -> str:
    +23        """
    +24        Serialize object as JSON
    +25
    +26        :return: a string according to json spec
    +27        """
    +28        ...
    +
    + + +

    Serialize object as JSON

    + +
    Returns
    + +
    +

    a string according to json spec

    +
    +
    + + +
    +
    +
    + +
    + + def + save( output_directory: pathlib.Path, content: libecalc.common.decorators.capturer.Jsonable): + + + +
    + +
    31def save(output_directory: Path, content: Jsonable):
    +32    """
    +33    A function to save serializable content. Each time this function is
    +34    called the name of the file that data is dumped to (which is an integer) will be incremented with 1.
    +35    E.g. file number one will be given the name 1.json, number two; 2.json and so on.
    +36
    +37    :param output_directory:   Where to save it. Missing parent directories will be created.
    +38    :param content:    What to save. Must be serializable to JSON through .json() method
    +39    """
    +40    Path.mkdir(output_directory, parents=True, exist_ok=True)
    +41    global unique_id
    +42    file_name = output_directory / f"{str(unique_id)}.json"
    +43    unique_id += 1
    +44
    +45    with open(file_name, "w") as file:
    +46        file.write(content.json())
    +
    + + +

    A function to save serializable content. Each time this function is +called the name of the file that data is dumped to (which is an integer) will be incremented with 1. +E.g. file number one will be given the name 1.json, number two; 2.json and so on.

    + +
    Parameters
    + +
      +
    • output_directory: Where to save it. Missing parent directories will be created.
    • +
    • content: What to save. Must be serializable to JSON through .json() method
    • +
    +
    + + +
    +
    + +
    + + class + Capturer: + + + +
    + +
    49class Capturer:
    +50    """Decorator to capture values from a decorated function and optionally save to file"""
    +51
    +52    @staticmethod
    +53    def capture_return_values(
    +54        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +55    ) -> Optional[Any]:
    +56        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +57        the function works as if the decorator is not there.
    +58
    +59        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +60
    +61        Args:
    +62            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +63            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +64
    +65        Returns:
    +66            The same signature as the function it is decorating
    +67        """
    +68
    +69        def decorate(capturable: Callable[..., Jsonable]):
    +70            @wraps(capturable)
    +71            def with_capture(self, *args, **kwargs):
    +72                return_values = capturable(self, *args, **kwargs)
    +73                try:
    +74                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +75                except Exception as e:
    +76                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +77                return return_values
    +78
    +79            return with_capture
    +80
    +81        return decorate
    +
    + + +

    Decorator to capture values from a decorated function and optionally save to file

    +
    + + +
    + +
    +
    @staticmethod
    + + def + capture_return_values( do_save_captured_content: bool = False, output_directory: pathlib.Path = PosixPath('/home/runner/work/ecalc/ecalc/docs/captured_data')) -> Union[Any, NoneType]: + + + +
    + +
    52    @staticmethod
    +53    def capture_return_values(
    +54        do_save_captured_content: bool = False, output_directory: Path = Path(os.getcwd()) / "captured_data"
    +55    ) -> Optional[Any]:
    +56        """If enabled, save the return values from decorated function to the given output directory. If disabled,
    +57        the function works as if the decorator is not there.
    +58
    +59        Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method
    +60
    +61        Args:
    +62            do_save_captured_content: whether the captured content should be saved or not. Default False.
    +63            output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.
    +64
    +65        Returns:
    +66            The same signature as the function it is decorating
    +67        """
    +68
    +69        def decorate(capturable: Callable[..., Jsonable]):
    +70            @wraps(capturable)
    +71            def with_capture(self, *args, **kwargs):
    +72                return_values = capturable(self, *args, **kwargs)
    +73                try:
    +74                    save(output_directory, return_values) if do_save_captured_content is True else ...
    +75                except Exception as e:
    +76                    logger.debug(f"Failed to dump data for debug {str(e)}. Not critical.")
    +77                return return_values
    +78
    +79            return with_capture
    +80
    +81        return decorate
    +
    + + +

    If enabled, save the return values from decorated function to the given output directory. If disabled, +the function works as if the decorator is not there.

    + +

    Note! This currently only supports functions that returns a value/object that support serialization to json() through implementing a .json() method

    + +

    Args: + do_save_captured_content: whether the captured content should be saved or not. Default False. + output_directory: Directory to where the captured content should be stored. Missing parent directories will be created.

    + +

    Returns: + The same signature as the function it is decorating

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/decorators/feature_flags.html b/docs/about/references/api/libecalc/common/decorators/feature_flags.html new file mode 100644 index 0000000000..fe86cd519c --- /dev/null +++ b/docs/about/references/api/libecalc/common/decorators/feature_flags.html @@ -0,0 +1,607 @@ + + + + + + + libecalc.common.decorators.feature_flags API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.decorators.feature_flags

    + + + + + + +
     1from functools import wraps
    + 2from typing import Any, Callable, Optional
    + 3
    + 4from libecalc.common.logger import logger
    + 5
    + 6
    + 7class Feature:
    + 8    """Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way."""
    + 9
    +10    @staticmethod
    +11    def experimental(feature_description: str) -> Optional[Any]:
    +12        """Flag for experimental/beta features
    +13        Args:
    +14            feature_description: Description of new feature.
    +15
    +16        Returns:
    +17
    +18        """
    +19
    +20        def decorate(experimental_feature: Callable):
    +21            @wraps(experimental_feature)
    +22            def with_experimental(*args, **kwargs):
    +23                logger.warning(
    +24                    f"!EXPERIMENTAL! {feature_description}."
    +25                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +26                )
    +27                try:
    +28                    return experimental_feature(*args, **kwargs)
    +29                except Exception as e:
    +30                    logger.error(
    +31                        f"Error in {feature_description}: {e}."
    +32                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +33                        e,
    +34                    )
    +35                return None
    +36
    +37            return with_experimental
    +38
    +39        return decorate
    +40
    +41    @staticmethod
    +42    def deprecated(message: str):
    +43        """Flag for handling deprecated features
    +44        Args:
    +45            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +46
    +47        Returns:
    +48
    +49        """
    +50        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +51
    +52
    +53class FeatureToggle:
    +54    """Decorator to handle 2 paths, depending on whether toggle is on or off."""
    +55
    +56    @staticmethod
    +57    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +58        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +59
    +60        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +61        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +62        redeploy. E.g. essential for trunk based development and similar approaches.
    +63
    +64        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +65        and possibly the in-place mutable changes done on in-parameters.
    +66
    +67        :param feature_toggle:
    +68        :param fallback: the old safe known method
    +69        :return:
    +70        """
    +71
    +72        def decorate(experimental_feature: Callable):
    +73            @wraps(experimental_feature)
    +74            def with_feature_toggle(self, *args, **kwargs):
    +75                if feature_toggle:
    +76                    return experimental_feature(self, *args, **kwargs)
    +77                else:
    +78                    return fallback(self, *args, **kwargs)
    +79
    +80            return with_feature_toggle
    +81
    +82        return decorate
    +
    + + +
    +
    + +
    + + class + Feature: + + + +
    + +
     8class Feature:
    + 9    """Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way."""
    +10
    +11    @staticmethod
    +12    def experimental(feature_description: str) -> Optional[Any]:
    +13        """Flag for experimental/beta features
    +14        Args:
    +15            feature_description: Description of new feature.
    +16
    +17        Returns:
    +18
    +19        """
    +20
    +21        def decorate(experimental_feature: Callable):
    +22            @wraps(experimental_feature)
    +23            def with_experimental(*args, **kwargs):
    +24                logger.warning(
    +25                    f"!EXPERIMENTAL! {feature_description}."
    +26                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +27                )
    +28                try:
    +29                    return experimental_feature(*args, **kwargs)
    +30                except Exception as e:
    +31                    logger.error(
    +32                        f"Error in {feature_description}: {e}."
    +33                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +34                        e,
    +35                    )
    +36                return None
    +37
    +38            return with_experimental
    +39
    +40        return decorate
    +41
    +42    @staticmethod
    +43    def deprecated(message: str):
    +44        """Flag for handling deprecated features
    +45        Args:
    +46            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +47
    +48        Returns:
    +49
    +50        """
    +51        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +
    + + +

    Class with utils for handling new (beta) and old (deprecated) features in a safe and communicative way.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + experimental(feature_description: str) -> Union[Any, NoneType]: + + + +
    + +
    11    @staticmethod
    +12    def experimental(feature_description: str) -> Optional[Any]:
    +13        """Flag for experimental/beta features
    +14        Args:
    +15            feature_description: Description of new feature.
    +16
    +17        Returns:
    +18
    +19        """
    +20
    +21        def decorate(experimental_feature: Callable):
    +22            @wraps(experimental_feature)
    +23            def with_experimental(*args, **kwargs):
    +24                logger.warning(
    +25                    f"!EXPERIMENTAL! {feature_description}."
    +26                    f" It has not been thoroughly tested and Quality Assured yet. Use at own risk. !EXPERIMENTAL!"
    +27                )
    +28                try:
    +29                    return experimental_feature(*args, **kwargs)
    +30                except Exception as e:
    +31                    logger.error(
    +32                        f"Error in {feature_description}: {e}."
    +33                        f" However, this is an experimental feature and should be reported in #ecalc_support on Slack.",
    +34                        e,
    +35                    )
    +36                return None
    +37
    +38            return with_experimental
    +39
    +40        return decorate
    +
    + + +

    Flag for experimental/beta features +Args: + feature_description: Description of new feature.

    + +

    Returns:

    +
    + + +
    +
    + +
    +
    @staticmethod
    + + def + deprecated(message: str): + + + +
    + +
    42    @staticmethod
    +43    def deprecated(message: str):
    +44        """Flag for handling deprecated features
    +45        Args:
    +46            message: Info about deprecation of feature, and (if available) instructions on usage of replacement.
    +47
    +48        Returns:
    +49
    +50        """
    +51        logger.warning(f"DEPRECATED! {message}. It will be removed in a future version.")
    +
    + + +

    Flag for handling deprecated features +Args: + message: Info about deprecation of feature, and (if available) instructions on usage of replacement.

    + +

    Returns:

    +
    + + +
    +
    +
    + +
    + + class + FeatureToggle: + + + +
    + +
    54class FeatureToggle:
    +55    """Decorator to handle 2 paths, depending on whether toggle is on or off."""
    +56
    +57    @staticmethod
    +58    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +59        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +60
    +61        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +62        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +63        redeploy. E.g. essential for trunk based development and similar approaches.
    +64
    +65        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +66        and possibly the in-place mutable changes done on in-parameters.
    +67
    +68        :param feature_toggle:
    +69        :param fallback: the old safe known method
    +70        :return:
    +71        """
    +72
    +73        def decorate(experimental_feature: Callable):
    +74            @wraps(experimental_feature)
    +75            def with_feature_toggle(self, *args, **kwargs):
    +76                if feature_toggle:
    +77                    return experimental_feature(self, *args, **kwargs)
    +78                else:
    +79                    return fallback(self, *args, **kwargs)
    +80
    +81            return with_feature_toggle
    +82
    +83        return decorate
    +
    + + +

    Decorator to handle 2 paths, depending on whether toggle is on or off.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + experimental(feature_toggle: bool, fallback: Callable) -> Union[Any, NoneType]: + + + +
    + +
    57    @staticmethod
    +58    def experimental(feature_toggle: bool, fallback: Callable) -> Optional[Any]:
    +59        """If feature_toggle is true, call current (experimental) method, if false fallback to old method.
    +60
    +61        To easily and safely rollback to a working version in production for high(er) risk changes, but with
    +62        e.g. more functionality. To safely roll out new features with safety net to old version instead of
    +63        redeploy. E.g. essential for trunk based development and similar approaches.
    +64
    +65        Both old and new must be compatible signature wise wrt in/out parameters, return values
    +66        and possibly the in-place mutable changes done on in-parameters.
    +67
    +68        :param feature_toggle:
    +69        :param fallback: the old safe known method
    +70        :return:
    +71        """
    +72
    +73        def decorate(experimental_feature: Callable):
    +74            @wraps(experimental_feature)
    +75            def with_feature_toggle(self, *args, **kwargs):
    +76                if feature_toggle:
    +77                    return experimental_feature(self, *args, **kwargs)
    +78                else:
    +79                    return fallback(self, *args, **kwargs)
    +80
    +81            return with_feature_toggle
    +82
    +83        return decorate
    +
    + + +

    If feature_toggle is true, call current (experimental) method, if false fallback to old method.

    + +

    To easily and safely rollback to a working version in production for high(er) risk changes, but with +e.g. more functionality. To safely roll out new features with safety net to old version instead of +redeploy. E.g. essential for trunk based development and similar approaches.

    + +

    Both old and new must be compatible signature wise wrt in/out parameters, return values +and possibly the in-place mutable changes done on in-parameters.

    + +
    Parameters
    + +
      +
    • feature_toggle:
    • +
    • fallback: the old safe known method
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/discriminator_fallback.html b/docs/about/references/api/libecalc/common/discriminator_fallback.html new file mode 100644 index 0000000000..ff28745a70 --- /dev/null +++ b/docs/about/references/api/libecalc/common/discriminator_fallback.html @@ -0,0 +1,314 @@ + + + + + + + libecalc.common.discriminator_fallback API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.discriminator_fallback

    + + + + + + +
     1from typing import Any
    + 2
    + 3from pydantic import BeforeValidator
    + 4
    + 5
    + 6def DiscriminatorWithFallback(discriminator_alias: str, discriminator_fallback: str) -> BeforeValidator:
    + 7    """
    + 8    Use if one of the objects in the Union does not contain the discriminator.
    + 9
    +10    Args:
    +11        discriminator_alias: The discriminator alias, used when checking if discriminator exists.
    +12        discriminator_fallback: the value that should be used for the fallback discriminator
    +13
    +14    Returns:
    +15    """
    +16
    +17    def fallback_discriminator(data: Any):
    +18        if not isinstance(data, dict):
    +19            raise ValueError("data must be dict")
    +20        if discriminator_alias not in data:
    +21            data[discriminator_alias] = discriminator_fallback
    +22
    +23        return data
    +24
    +25    return BeforeValidator(fallback_discriminator)
    +
    + + +
    +
    + +
    + + def + DiscriminatorWithFallback( discriminator_alias: str, discriminator_fallback: str) -> pydantic.functional_validators.BeforeValidator: + + + +
    + +
     7def DiscriminatorWithFallback(discriminator_alias: str, discriminator_fallback: str) -> BeforeValidator:
    + 8    """
    + 9    Use if one of the objects in the Union does not contain the discriminator.
    +10
    +11    Args:
    +12        discriminator_alias: The discriminator alias, used when checking if discriminator exists.
    +13        discriminator_fallback: the value that should be used for the fallback discriminator
    +14
    +15    Returns:
    +16    """
    +17
    +18    def fallback_discriminator(data: Any):
    +19        if not isinstance(data, dict):
    +20            raise ValueError("data must be dict")
    +21        if discriminator_alias not in data:
    +22            data[discriminator_alias] = discriminator_fallback
    +23
    +24        return data
    +25
    +26    return BeforeValidator(fallback_discriminator)
    +
    + + +

    Use if one of the objects in the Union does not contain the discriminator.

    + +

    Args: + discriminator_alias: The discriminator alias, used when checking if discriminator exists. + discriminator_fallback: the value that should be used for the fallback discriminator

    + +

    Returns:

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/errors.html b/docs/about/references/api/libecalc/common/errors.html new file mode 100644 index 0000000000..d317039f3a --- /dev/null +++ b/docs/about/references/api/libecalc/common/errors.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.errors API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.errors

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/errors/exceptions.html b/docs/about/references/api/libecalc/common/errors/exceptions.html new file mode 100644 index 0000000000..eeee9e6ee2 --- /dev/null +++ b/docs/about/references/api/libecalc/common/errors/exceptions.html @@ -0,0 +1,915 @@ + + + + + + + libecalc.common.errors.exceptions API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.errors.exceptions

    + + + + + + +
     1import enum
    + 2from typing import Optional
    + 3
    + 4
    + 5class EcalcErrorType(str, enum.Enum):
    + 6    """Valid error types in libecalc."""
    + 7
    + 8    CLIENT_ERROR = "User error"
    + 9    """The user made an error"""
    +10
    +11    SERVER_ERROR = "Server error"  # TODO: Does not make sense in a library, rename?
    +12    """ The eCalc library failed"""
    +13
    +14
    +15class EcalcError(Exception):
    +16    """Base eCalc library exception."""
    +17
    +18    title: Optional[str] = None
    +19    message: Optional[str] = None
    +20
    +21    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +22        super().__init__()
    +23
    +24        self.title = title
    +25        self.message = message
    +26        self.error_type = error_type
    +27
    +28    def __str__(self):
    +29        return f"{self.title}: {self.message}"
    +30
    +31
    +32class IncompatibleDataError(EcalcError):
    +33    """The data provided by the user is invalid."""
    +34
    +35    def __init__(self, message: str, title: str = "Incompatible Data"):
    +36        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +37
    +38
    +39class DifferentLengthsError(IncompatibleDataError):
    +40    """The data provided has incompatible lengths."""
    +41
    +42    def __init__(self, message: str):
    +43        super().__init__(title="Different Lengths", message=message)
    +44
    +45
    +46class MissingKeyError(IncompatibleDataError):
    +47    """The data provided is missing a required key."""
    +48
    +49    def __init__(self, message: str):
    +50        super().__init__(title="Missing Key", message=message)
    +51
    +52
    +53class ProgrammingError(EcalcError):
    +54    """The eCalc library has caused an error, and reached an invalid state. Likely a bug."""
    +55
    +56    def __init__(self, message: str):
    +57        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +58
    +59
    +60class IllegalStateException(EcalcError):
    +61    """This exception should hopefully never occur, and indicates a bug in the code."""
    +62
    +63    def __init__(self, message: str):
    +64        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +65
    +66
    +67class InvalidReferenceException(EcalcError):
    +68    """The data provided is missing a required reference."""
    +69
    +70    def __init__(self, message: str):
    +71        super().__init__("Invalid reference", message, error_type=EcalcErrorType.CLIENT_ERROR)
    +72
    +73
    +74class InvalidDateException(EcalcError):
    +75    ...
    +
    + + +
    +
    + +
    + + class + EcalcErrorType(builtins.str, enum.Enum): + + + +
    + +
     6class EcalcErrorType(str, enum.Enum):
    + 7    """Valid error types in libecalc."""
    + 8
    + 9    CLIENT_ERROR = "User error"
    +10    """The user made an error"""
    +11
    +12    SERVER_ERROR = "Server error"  # TODO: Does not make sense in a library, rename?
    +13    """ The eCalc library failed"""
    +
    + + +

    Valid error types in libecalc.

    +
    + + +
    +
    + CLIENT_ERROR = +<EcalcErrorType.CLIENT_ERROR: 'User error'> + + +
    + + +

    The user made an error

    +
    + + +
    +
    +
    + SERVER_ERROR = +<EcalcErrorType.SERVER_ERROR: 'Server error'> + + +
    + + +

    The eCalc library failed

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcError(builtins.Exception): + + + +
    + +
    16class EcalcError(Exception):
    +17    """Base eCalc library exception."""
    +18
    +19    title: Optional[str] = None
    +20    message: Optional[str] = None
    +21
    +22    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +23        super().__init__()
    +24
    +25        self.title = title
    +26        self.message = message
    +27        self.error_type = error_type
    +28
    +29    def __str__(self):
    +30        return f"{self.title}: {self.message}"
    +
    + + +

    Base eCalc library exception.

    +
    + + +
    + +
    + + EcalcError( title: str, message: str, error_type: libecalc.common.errors.exceptions.EcalcErrorType = <EcalcErrorType.CLIENT_ERROR: 'User error'>) + + + +
    + +
    22    def __init__(self, title: str, message: str, error_type: EcalcErrorType = EcalcErrorType.CLIENT_ERROR):
    +23        super().__init__()
    +24
    +25        self.title = title
    +26        self.message = message
    +27        self.error_type = error_type
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + IncompatibleDataError(EcalcError): + + + +
    + +
    33class IncompatibleDataError(EcalcError):
    +34    """The data provided by the user is invalid."""
    +35
    +36    def __init__(self, message: str, title: str = "Incompatible Data"):
    +37        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + +

    The data provided by the user is invalid.

    +
    + + +
    + +
    + + IncompatibleDataError(message: str, title: str = 'Incompatible Data') + + + +
    + +
    36    def __init__(self, message: str, title: str = "Incompatible Data"):
    +37        super().__init__(title, message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + DifferentLengthsError(IncompatibleDataError): + + + +
    + +
    40class DifferentLengthsError(IncompatibleDataError):
    +41    """The data provided has incompatible lengths."""
    +42
    +43    def __init__(self, message: str):
    +44        super().__init__(title="Different Lengths", message=message)
    +
    + + +

    The data provided has incompatible lengths.

    +
    + + +
    + +
    + + DifferentLengthsError(message: str) + + + +
    + +
    43    def __init__(self, message: str):
    +44        super().__init__(title="Different Lengths", message=message)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + MissingKeyError(IncompatibleDataError): + + + +
    + +
    47class MissingKeyError(IncompatibleDataError):
    +48    """The data provided is missing a required key."""
    +49
    +50    def __init__(self, message: str):
    +51        super().__init__(title="Missing Key", message=message)
    +
    + + +

    The data provided is missing a required key.

    +
    + + +
    + +
    + + MissingKeyError(message: str) + + + +
    + +
    50    def __init__(self, message: str):
    +51        super().__init__(title="Missing Key", message=message)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + ProgrammingError(EcalcError): + + + +
    + +
    54class ProgrammingError(EcalcError):
    +55    """The eCalc library has caused an error, and reached an invalid state. Likely a bug."""
    +56
    +57    def __init__(self, message: str):
    +58        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + +

    The eCalc library has caused an error, and reached an invalid state. Likely a bug.

    +
    + + +
    + +
    + + ProgrammingError(message: str) + + + +
    + +
    57    def __init__(self, message: str):
    +58        super().__init__("Violation of programming rules", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + IllegalStateException(EcalcError): + + + +
    + +
    61class IllegalStateException(EcalcError):
    +62    """This exception should hopefully never occur, and indicates a bug in the code."""
    +63
    +64    def __init__(self, message: str):
    +65        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + +

    This exception should hopefully never occur, and indicates a bug in the code.

    +
    + + +
    + +
    + + IllegalStateException(message: str) + + + +
    + +
    64    def __init__(self, message: str):
    +65        super().__init__("Illegal state", message, error_type=EcalcErrorType.SERVER_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + InvalidReferenceException(EcalcError): + + + +
    + +
    68class InvalidReferenceException(EcalcError):
    +69    """The data provided is missing a required reference."""
    +70
    +71    def __init__(self, message: str):
    +72        super().__init__("Invalid reference", message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + +

    The data provided is missing a required reference.

    +
    + + +
    + +
    + + InvalidReferenceException(message: str) + + + +
    + +
    71    def __init__(self, message: str):
    +72        super().__init__("Invalid reference", message, error_type=EcalcErrorType.CLIENT_ERROR)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + InvalidDateException(EcalcError): + + + +
    + +
    75class InvalidDateException(EcalcError):
    +76    ...
    +
    + + +

    Base eCalc library exception.

    +
    + + +
    +
    Inherited Members
    +
    + +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/graph.html b/docs/about/references/api/libecalc/common/graph.html new file mode 100644 index 0000000000..0788c82d9a --- /dev/null +++ b/docs/about/references/api/libecalc/common/graph.html @@ -0,0 +1,710 @@ + + + + + + + libecalc.common.graph API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.graph

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import Dict, Generic, List, Protocol, TypeVar
    + 4
    + 5import networkx as nx
    + 6from typing_extensions import Self
    + 7
    + 8NodeID = str
    + 9
    +10
    +11class NodeWithID(Protocol):
    +12    @property
    +13    def id(self) -> NodeID:
    +14        ...
    +15
    +16
    +17TNode = TypeVar("TNode", bound=NodeWithID)
    +18
    +19
    +20class Graph(Generic[TNode]):
    +21    def __init__(self):
    +22        self.graph = nx.DiGraph()
    +23        self.nodes: Dict[NodeID, TNode] = {}
    +24
    +25    def add_node(self, node: TNode) -> Self:
    +26        self.graph.add_node(node.id)
    +27        self.nodes[node.id] = node
    +28        return self
    +29
    +30    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +31        if from_id not in self.nodes or to_id not in self.nodes:
    +32            raise ValueError("Add node before adding edges")
    +33
    +34        self.graph.add_edge(from_id, to_id)
    +35        return self
    +36
    +37    def add_subgraph(self, subgraph: Graph) -> Self:
    +38        self.nodes.update(subgraph.nodes)
    +39        self.graph = nx.compose(self.graph, subgraph.graph)
    +40        return self
    +41
    +42    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +43        if recursively:
    +44            return [
    +45                successor_id
    +46                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +47                if successor_id != node_id
    +48            ]
    +49        else:
    +50            return list(self.graph.successors(node_id))
    +51
    +52    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +53        predecessors = list(self.graph.predecessors(node_id))
    +54        if len(predecessors) > 1:
    +55            raise ValueError(
    +56                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +57                f"Predecessors: {', '.join(predecessors)}"
    +58            )
    +59        return predecessors[0]
    +60
    +61    @property
    +62    def root(self) -> NodeID:
    +63        return list(nx.topological_sort(self.graph))[0]
    +64
    +65    def get_node(self, node_id: NodeID) -> TNode:
    +66        return self.nodes[node_id]
    +67
    +68    @property
    +69    def sorted_node_ids(self) -> List[NodeID]:
    +70        return list(nx.topological_sort(self.graph))
    +71
    +72    def breadth_first_search_tree(self, source_id: NodeID) -> List[NodeID]:
    +73        """
    +74        Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes
    +75        that are closer to the source before nodes that are further out.
    +76
    +77        Args:
    +78            source_id:
    +79
    +80        Returns:
    +81
    +82        """
    +83        return list(nx.bfs_tree(self.graph, source_id))
    +84
    +85    def __iter__(self):
    +86        return iter(self.graph)
    +
    + + +
    +
    + +
    + + class + NodeWithID(typing.Protocol): + + + +
    + +
    12class NodeWithID(Protocol):
    +13    @property
    +14    def id(self) -> NodeID:
    +15        ...
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + NodeWithID(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + class + Graph(typing.Generic[~TNode]): + + + +
    + +
    21class Graph(Generic[TNode]):
    +22    def __init__(self):
    +23        self.graph = nx.DiGraph()
    +24        self.nodes: Dict[NodeID, TNode] = {}
    +25
    +26    def add_node(self, node: TNode) -> Self:
    +27        self.graph.add_node(node.id)
    +28        self.nodes[node.id] = node
    +29        return self
    +30
    +31    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +32        if from_id not in self.nodes or to_id not in self.nodes:
    +33            raise ValueError("Add node before adding edges")
    +34
    +35        self.graph.add_edge(from_id, to_id)
    +36        return self
    +37
    +38    def add_subgraph(self, subgraph: Graph) -> Self:
    +39        self.nodes.update(subgraph.nodes)
    +40        self.graph = nx.compose(self.graph, subgraph.graph)
    +41        return self
    +42
    +43    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +44        if recursively:
    +45            return [
    +46                successor_id
    +47                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +48                if successor_id != node_id
    +49            ]
    +50        else:
    +51            return list(self.graph.successors(node_id))
    +52
    +53    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +54        predecessors = list(self.graph.predecessors(node_id))
    +55        if len(predecessors) > 1:
    +56            raise ValueError(
    +57                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +58                f"Predecessors: {', '.join(predecessors)}"
    +59            )
    +60        return predecessors[0]
    +61
    +62    @property
    +63    def root(self) -> NodeID:
    +64        return list(nx.topological_sort(self.graph))[0]
    +65
    +66    def get_node(self, node_id: NodeID) -> TNode:
    +67        return self.nodes[node_id]
    +68
    +69    @property
    +70    def sorted_node_ids(self) -> List[NodeID]:
    +71        return list(nx.topological_sort(self.graph))
    +72
    +73    def breadth_first_search_tree(self, source_id: NodeID) -> List[NodeID]:
    +74        """
    +75        Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes
    +76        that are closer to the source before nodes that are further out.
    +77
    +78        Args:
    +79            source_id:
    +80
    +81        Returns:
    +82
    +83        """
    +84        return list(nx.bfs_tree(self.graph, source_id))
    +85
    +86    def __iter__(self):
    +87        return iter(self.graph)
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + add_node(self, node: ~TNode) -> typing_extensions.Self: + + + +
    + +
    26    def add_node(self, node: TNode) -> Self:
    +27        self.graph.add_node(node.id)
    +28        self.nodes[node.id] = node
    +29        return self
    +
    + + + + +
    +
    + +
    + + def + add_edge(self, from_id: str, to_id: str) -> typing_extensions.Self: + + + +
    + +
    31    def add_edge(self, from_id: NodeID, to_id: NodeID) -> Self:
    +32        if from_id not in self.nodes or to_id not in self.nodes:
    +33            raise ValueError("Add node before adding edges")
    +34
    +35        self.graph.add_edge(from_id, to_id)
    +36        return self
    +
    + + + + +
    +
    + +
    + + def + add_subgraph(self, subgraph: libecalc.common.graph.Graph) -> typing_extensions.Self: + + + +
    + +
    38    def add_subgraph(self, subgraph: Graph) -> Self:
    +39        self.nodes.update(subgraph.nodes)
    +40        self.graph = nx.compose(self.graph, subgraph.graph)
    +41        return self
    +
    + + + + +
    +
    + +
    + + def + get_successors(self, node_id: str, recursively=False) -> List[str]: + + + +
    + +
    43    def get_successors(self, node_id: NodeID, recursively=False) -> List[NodeID]:
    +44        if recursively:
    +45            return [
    +46                successor_id
    +47                for successor_id in nx.dfs_tree(self.graph, source=node_id).nodes()
    +48                if successor_id != node_id
    +49            ]
    +50        else:
    +51            return list(self.graph.successors(node_id))
    +
    + + + + +
    +
    + +
    + + def + get_predecessor(self, node_id: str) -> str: + + + +
    + +
    53    def get_predecessor(self, node_id: NodeID) -> NodeID:
    +54        predecessors = list(self.graph.predecessors(node_id))
    +55        if len(predecessors) > 1:
    +56            raise ValueError(
    +57                f"Tried to get a single predecessor of node with several predecessors. NodeID: {node_id}, "
    +58                f"Predecessors: {', '.join(predecessors)}"
    +59            )
    +60        return predecessors[0]
    +
    + + + + +
    +
    + +
    + + def + get_node(self, node_id: str) -> ~TNode: + + + +
    + +
    66    def get_node(self, node_id: NodeID) -> TNode:
    +67        return self.nodes[node_id]
    +
    + + + + +
    +
    + +
    + + def + breadth_first_search_tree(self, source_id: str) -> List[str]: + + + +
    + +
    73    def breadth_first_search_tree(self, source_id: NodeID) -> List[NodeID]:
    +74        """
    +75        Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes
    +76        that are closer to the source before nodes that are further out.
    +77
    +78        Args:
    +79            source_id:
    +80
    +81        Returns:
    +82
    +83        """
    +84        return list(nx.bfs_tree(self.graph, source_id))
    +
    + + +

    Create a tree with source as root by searching edges close to the source first. Breadth first orders the nodes +that are closer to the source before nodes that are further out.

    + +

    Args: + source_id:

    + +

    Returns:

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list.html b/docs/about/references/api/libecalc/common/list.html new file mode 100644 index 0000000000..07f0191b69 --- /dev/null +++ b/docs/about/references/api/libecalc/common/list.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.list API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list/adjustment.html b/docs/about/references/api/libecalc/common/list/adjustment.html new file mode 100644 index 0000000000..6010162251 --- /dev/null +++ b/docs/about/references/api/libecalc/common/list/adjustment.html @@ -0,0 +1,292 @@ + + + + + + + libecalc.common.list.adjustment API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list.adjustment

    + + + + + + +
     1from typing import Union
    + 2
    + 3import numpy as np
    + 4from numpy.typing import NDArray
    + 5
    + 6
    + 7def transform_linear(
    + 8    values: Union[NDArray[np.float64], float],
    + 9    constant: float = 0.0,
    +10    factor: float = 1.0,
    +11) -> Union[NDArray[np.float64], float]:
    +12    """Linear transformation of an array. May typically be used for energy functions to adjust a result
    +13    according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.
    +14    """
    +15    constant = constant if constant is not None else 0.0
    +16    factor = factor if factor is not None else 1.0
    +17    return values * factor + constant
    +
    + + +
    +
    + +
    + + def + transform_linear( values: Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], float], constant: float = 0.0, factor: float = 1.0) -> Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], float]: + + + +
    + +
     8def transform_linear(
    + 9    values: Union[NDArray[np.float64], float],
    +10    constant: float = 0.0,
    +11    factor: float = 1.0,
    +12) -> Union[NDArray[np.float64], float]:
    +13    """Linear transformation of an array. May typically be used for energy functions to adjust a result
    +14    according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.
    +15    """
    +16    constant = constant if constant is not None else 0.0
    +17    factor = factor if factor is not None else 1.0
    +18    return values * factor + constant
    +
    + + +

    Linear transformation of an array. May typically be used for energy functions to adjust a result +according to given energy_usage_adjustment_constant and energy_usage_adjustment_factor.

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/list/list_utils.html b/docs/about/references/api/libecalc/common/list/list_utils.html new file mode 100644 index 0000000000..98c923e1fe --- /dev/null +++ b/docs/about/references/api/libecalc/common/list/list_utils.html @@ -0,0 +1,626 @@ + + + + + + + libecalc.common.list.list_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.list.list_utils

    + + + + + + +
      1from collections import defaultdict
    +  2from datetime import datetime
    +  3from typing import Any, Dict, List, Optional, Sequence, Union, cast
    +  4
    +  5import numpy as np
    +  6from numpy import float64
    +  7from numpy.typing import NDArray
    +  8
    +  9"""
    + 10NOTE! A "list util" class is not the best, but maybe we should try to
    + 11expand a "prototype" class instead, e.g. create "our own static list class" where we extend
    + 12python list and add static methods to it..?
    + 13"""
    + 14
    + 15
    + 16def transpose(a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]:
    + 17    """Easily transpose from row based to column based data, and other
    + 18    way around, in order to use the format that best fits a certain
    + 19    purpose to work with such a list/dataframe.
    + 20
    + 21    Args:
    + 22        a: List to be transposed
    + 23
    + 24    Returns:
    + 25        Transposed list
    + 26
    + 27    """
    + 28    return list(map(list, zip(*a)))
    + 29
    + 30
    + 31def group_data_by_value_at_index(index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]:
    + 32    """Given an index of the list, group the list by the value corresponding to that index and
    + 33    return a dict with lists, where the keys correspond to the different values at the index provided.
    + 34
    + 35    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0,
    + 36    we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}
    + 37
    + 38    Args:
    + 39        index: Positive index
    + 40        row_based_data:
    + 41
    + 42    Returns:
    + 43        dict with lists, where the keys correspond to the different values at the index provided.
    + 44
    + 45    Raises:
    + 46        IndexError: if index specified is out of range/bounds, which should be handled by calling function.
    + 47
    + 48    """
    + 49    if index < 0:
    + 50        raise IndexError(f"Negative indexes are not allowed: {index}")
    + 51
    + 52    chart_grouped_by_index = defaultdict(list)
    + 53    for row in row_based_data:
    + 54        current_value = row[index]
    + 55        chart_grouped_by_index[current_value].append(row)
    + 56
    + 57    return chart_grouped_by_index
    + 58
    + 59
    + 60def elementwise_sum(
    + 61    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 62) -> NDArray[np.float64]:
    + 63    """Sum up multiple vectors elementwise.
    + 64
    + 65    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]
    + 66
    + 67    Args:
    + 68        *vectors: Sequences to be summed up elementwise
    + 69        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 70
    + 71    Returns:
    + 72        Numpy array where the elements of provided vectors are summed up elementwise
    + 73
    + 74    """
    + 75    if timesteps is not None:
    + 76        result = np.full_like(timesteps, fill_value=0.0, dtype=float64)
    + 77    else:
    + 78        result = np.full_like(vectors[0], fill_value=0.0, dtype=float64)
    + 79
    + 80    for vector in vectors:
    + 81        result = np.add(result, vector)  # type: ignore[arg-type]
    + 82    return result
    + 83
    + 84
    + 85def elementwise_multiplication(
    + 86    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 87) -> NDArray[np.float64]:
    + 88    """Multiply multiple vectors elementwise.
    + 89
    + 90    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1*2*1,20*10*30] = [2,6000]
    + 91
    + 92    Args:
    + 93        *vectors: Sequences to be multiplied up elementwise
    + 94        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 95
    + 96    Returns:
    + 97        Numpy array where the elements of provided vectors are multiplied up elementwise
    + 98
    + 99    """
    +100    if timesteps is not None:
    +101        result = np.full_like(timesteps, fill_value=1.0, dtype=float64)
    +102    else:
    +103        result = np.full_like(vectors[0], fill_value=1.0, dtype=float64)
    +104
    +105    for vector in vectors:
    +106        result = np.multiply(result, vector)  # type: ignore[arg-type]
    +107    return result
    +108
    +109
    +110def array_to_list(result_array: Union[NDArray[np.float64], List[NDArray[np.float64]], None]) -> Optional[List]:
    +111    """Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.
    +112
    +113    Args:
    +114        result_array: A numpy array, a list of numpy arrays or None
    +115
    +116    Returns:
    +117        list or list of lists
    +118    """
    +119    if result_array is None:
    +120        return None
    +121
    +122    if isinstance(result_array, list):
    +123        # In case we have a list of arrays.
    +124        return [array_to_list(array) for array in result_array]
    +125    elif isinstance(result_array, np.ndarray):
    +126        return cast(list, result_array.tolist())
    +
    + + +
    +
    + +
    + + def + transpose( a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]: + + + +
    + +
    17def transpose(a: List[List[Union[str, int, float]]]) -> List[List[Union[str, int, float]]]:
    +18    """Easily transpose from row based to column based data, and other
    +19    way around, in order to use the format that best fits a certain
    +20    purpose to work with such a list/dataframe.
    +21
    +22    Args:
    +23        a: List to be transposed
    +24
    +25    Returns:
    +26        Transposed list
    +27
    +28    """
    +29    return list(map(list, zip(*a)))
    +
    + + +

    Easily transpose from row based to column based data, and other +way around, in order to use the format that best fits a certain +purpose to work with such a list/dataframe.

    + +

    Args: + a: List to be transposed

    + +

    Returns: + Transposed list

    +
    + + +
    +
    + +
    + + def + group_data_by_value_at_index( index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]: + + + +
    + +
    32def group_data_by_value_at_index(index: int, row_based_data: List[List[Any]]) -> Dict[Union[float, int], List[Any]]:
    +33    """Given an index of the list, group the list by the value corresponding to that index and
    +34    return a dict with lists, where the keys correspond to the different values at the index provided.
    +35
    +36    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0,
    +37    we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}
    +38
    +39    Args:
    +40        index: Positive index
    +41        row_based_data:
    +42
    +43    Returns:
    +44        dict with lists, where the keys correspond to the different values at the index provided.
    +45
    +46    Raises:
    +47        IndexError: if index specified is out of range/bounds, which should be handled by calling function.
    +48
    +49    """
    +50    if index < 0:
    +51        raise IndexError(f"Negative indexes are not allowed: {index}")
    +52
    +53    chart_grouped_by_index = defaultdict(list)
    +54    for row in row_based_data:
    +55        current_value = row[index]
    +56        chart_grouped_by_index[current_value].append(row)
    +57
    +58    return chart_grouped_by_index
    +
    + + +

    Given an index of the list, group the list by the value corresponding to that index and +return a dict with lists, where the keys correspond to the different values at the index provided.

    + +

    E.g. if we provide a list [[1,20], [2,10], [1,30]] and provide index 0, +we will get the dict: {1: [[1, 20], [1, 30]], 2: [[2, 10]]}

    + +

    Args: + index: Positive index + row_based_data:

    + +

    Returns: + dict with lists, where the keys correspond to the different values at the index provided.

    + +

    Raises: + IndexError: if index specified is out of range/bounds, which should be handled by calling function.

    +
    + + +
    +
    + +
    + + def + elementwise_sum( *vectors: Sequence[Union[float, NoneType]], timesteps: Union[List[datetime.datetime], NoneType] = None) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    61def elementwise_sum(
    +62    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    +63) -> NDArray[np.float64]:
    +64    """Sum up multiple vectors elementwise.
    +65
    +66    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]
    +67
    +68    Args:
    +69        *vectors: Sequences to be summed up elementwise
    +70        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    +71
    +72    Returns:
    +73        Numpy array where the elements of provided vectors are summed up elementwise
    +74
    +75    """
    +76    if timesteps is not None:
    +77        result = np.full_like(timesteps, fill_value=0.0, dtype=float64)
    +78    else:
    +79        result = np.full_like(vectors[0], fill_value=0.0, dtype=float64)
    +80
    +81    for vector in vectors:
    +82        result = np.add(result, vector)  # type: ignore[arg-type]
    +83    return result
    +
    + + +

    Sum up multiple vectors elementwise.

    + +

    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1+2+1,20+10+30] = [4,60]

    + +

    Args: + *vectors: Sequences to be summed up elementwise + timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used

    + +

    Returns: + Numpy array where the elements of provided vectors are summed up elementwise

    +
    + + +
    +
    + +
    + + def + elementwise_multiplication( *vectors: Sequence[Union[float, NoneType]], timesteps: Union[List[datetime.datetime], NoneType] = None) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
     86def elementwise_multiplication(
    + 87    *vectors: Sequence[Optional[float]], timesteps: Optional[List[datetime]] = None
    + 88) -> NDArray[np.float64]:
    + 89    """Multiply multiple vectors elementwise.
    + 90
    + 91    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [1*2*1,20*10*30] = [2,6000]
    + 92
    + 93    Args:
    + 94        *vectors: Sequences to be multiplied up elementwise
    + 95        timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used
    + 96
    + 97    Returns:
    + 98        Numpy array where the elements of provided vectors are multiplied up elementwise
    + 99
    +100    """
    +101    if timesteps is not None:
    +102        result = np.full_like(timesteps, fill_value=1.0, dtype=float64)
    +103    else:
    +104        result = np.full_like(vectors[0], fill_value=1.0, dtype=float64)
    +105
    +106    for vector in vectors:
    +107        result = np.multiply(result, vector)  # type: ignore[arg-type]
    +108    return result
    +
    + + +

    Multiply multiple vectors elementwise.

    + +

    E.g. if we provide three lists [1,20], [2,10], [1,30], the result will be [121,201030] = [2,6000]

    + +

    Args: + *vectors: Sequences to be multiplied up elementwise + timesteps: Optional list of timesteps used to initialize resulting array. If no timesteps are provided, the first vector is used

    + +

    Returns: + Numpy array where the elements of provided vectors are multiplied up elementwise

    +
    + + +
    +
    + +
    + + def + array_to_list( result_array: Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], List[numpy.ndarray[Any, numpy.dtype[numpy.float64]]], NoneType]) -> Union[List, NoneType]: + + + +
    + +
    111def array_to_list(result_array: Union[NDArray[np.float64], List[NDArray[np.float64]], None]) -> Optional[List]:
    +112    """Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.
    +113
    +114    Args:
    +115        result_array: A numpy array, a list of numpy arrays or None
    +116
    +117    Returns:
    +118        list or list of lists
    +119    """
    +120    if result_array is None:
    +121        return None
    +122
    +123    if isinstance(result_array, list):
    +124        # In case we have a list of arrays.
    +125        return [array_to_list(array) for array in result_array]
    +126    elif isinstance(result_array, np.ndarray):
    +127        return cast(list, result_array.tolist())
    +
    + + +

    Method to convert numpy arrays and list of numpy arrays into lists (or list of lists). Method is used recursively on lists so needs to handle None as well.

    + +

    Args: + result_array: A numpy array, a list of numpy arrays or None

    + +

    Returns: + list or list of lists

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/logger.html b/docs/about/references/api/libecalc/common/logger.html new file mode 100644 index 0000000000..8deccecb2d --- /dev/null +++ b/docs/about/references/api/libecalc/common/logger.html @@ -0,0 +1,258 @@ + + + + + + + libecalc.common.logger API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.logger

    + + + + + + +
     1import logging
    + 2
    + 3"""
    + 4We provide a logger object for the library with the logger named 'libecalc'
    + 5It is the user of the library's responsibility to configure it:
    + 6
    + 7https://docs.python.org/3/howto/logging.html#configuring-logging-for-a-library
    + 8
    + 9TLDR;
    +10A library do not and shall NOT configure a logger itself. It reserves a logging namespace called "libecalc",
    +11that applications that use the library will need to configure themselves. Therefore we explicitly add a NullHandler
    +12to make sure that the logger is not activated.
    +13"""
    +14logger = logging.getLogger(
    +15    "libecalc",
    +16)
    +17logger.addHandler(logging.NullHandler())
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math.html b/docs/about/references/api/libecalc/common/math.html new file mode 100644 index 0000000000..1fb3555e72 --- /dev/null +++ b/docs/about/references/api/libecalc/common/math.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.common.math API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math/math_utils.html b/docs/about/references/api/libecalc/common/math/math_utils.html new file mode 100644 index 0000000000..bb086017e9 --- /dev/null +++ b/docs/about/references/api/libecalc/common/math/math_utils.html @@ -0,0 +1,409 @@ + + + + + + + libecalc.common.math.math_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math.math_utils

    + + + + + + +
     1from typing import Dict, TypeVar
    + 2
    + 3from libecalc.common.errors.exceptions import (
    + 4    DifferentLengthsError,
    + 5    IncompatibleDataError,
    + 6    MissingKeyError,
    + 7)
    + 8
    + 9T = TypeVar("T")
    +10
    +11
    +12class MathUtil:
    +13    @staticmethod
    +14    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +15        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +16        :param this:
    +17        :param that:
    +18        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +19
    +20        :throws: IncompatibleDataError if dicts cannot be subtracted
    +21        """
    +22        if this is None or that is None:
    +23            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +24
    +25        if len(this.items()) != len(that.items()):
    +26            raise DifferentLengthsError(
    +27                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +28            )
    +29
    +30        delta_dict: Dict[T, float] = {}
    +31
    +32        for item_key, this_value in this.items():
    +33            that_value = that.get(item_key)
    +34
    +35            if that_value is None:
    +36                raise MissingKeyError(
    +37                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +38                )
    +39
    +40            if that_value is not None:
    +41                delta_dict[item_key] = this_value - that_value
    +42
    +43        return delta_dict
    +
    + + +
    +
    + +
    + + class + MathUtil: + + + +
    + +
    13class MathUtil:
    +14    @staticmethod
    +15    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +16        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +17        :param this:
    +18        :param that:
    +19        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +20
    +21        :throws: IncompatibleDataError if dicts cannot be subtracted
    +22        """
    +23        if this is None or that is None:
    +24            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +25
    +26        if len(this.items()) != len(that.items()):
    +27            raise DifferentLengthsError(
    +28                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +29            )
    +30
    +31        delta_dict: Dict[T, float] = {}
    +32
    +33        for item_key, this_value in this.items():
    +34            that_value = that.get(item_key)
    +35
    +36            if that_value is None:
    +37                raise MissingKeyError(
    +38                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +39                )
    +40
    +41            if that_value is not None:
    +42                delta_dict[item_key] = this_value - that_value
    +43
    +44        return delta_dict
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + elementwise_subtraction_by_key(this: Dict[~T, float], that: Dict[~T, float]) -> Dict[~T, float]: + + + +
    + +
    14    @staticmethod
    +15    def elementwise_subtraction_by_key(this: Dict[T, float], that: Dict[T, float]) -> Dict[T, float]:
    +16        """For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key
    +17        :param this:
    +18        :param that:
    +19        :return:    a dict containing the delta/subtraction of each value for corresponding key.
    +20
    +21        :throws: IncompatibleDataError if dicts cannot be subtracted
    +22        """
    +23        if this is None or that is None:
    +24            raise IncompatibleDataError(f"A or B is None. Dict A has value {this}, and B has {that}")
    +25
    +26        if len(this.items()) != len(that.items()):
    +27            raise DifferentLengthsError(
    +28                f"Subtracting values A-B failed due to different vector lengths. Dict A has value {len(this.items())}, but B has {len(that.items())}"
    +29            )
    +30
    +31        delta_dict: Dict[T, float] = {}
    +32
    +33        for item_key, this_value in this.items():
    +34            that_value = that.get(item_key)
    +35
    +36            if that_value is None:
    +37                raise MissingKeyError(
    +38                    f"Subtracting values A-B failed due to missing time step in B. Key {item_key} had value {this_value} in A but is missing in B"
    +39                )
    +40
    +41            if that_value is not None:
    +42                delta_dict[item_key] = this_value - that_value
    +43
    +44        return delta_dict
    +
    + + +

    For compatible dicts, with the same keys, subtract corresponding numbers in lists for each key

    + +
    Parameters
    + +
      +
    • this:
    • +
    • that:
    • +
    + +
    Returns
    + +
    +
    a dict containing the delta/subtraction of each value for corresponding key.
    +
    +
    + +

    :throws: IncompatibleDataError if dicts cannot be subtracted

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/math/numbers.html b/docs/about/references/api/libecalc/common/math/numbers.html new file mode 100644 index 0000000000..15eb974585 --- /dev/null +++ b/docs/about/references/api/libecalc/common/math/numbers.html @@ -0,0 +1,598 @@ + + + + + + + libecalc.common.math.numbers API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.math.numbers

    + + + + + + +
     1from copy import deepcopy
    + 2from decimal import Decimal
    + 3from typing import TypeVar
    + 4
    + 5import numpy as np
    + 6from pydantic import BaseModel
    + 7
    + 8TResult = TypeVar("TResult")
    + 9
    +10
    +11class Numbers:
    +12    """Class to handle eCalc specific logic to numbers."""
    +13
    +14    @staticmethod
    +15    def format_to_precision(number: float, precision: int) -> str:
    +16        """This method is currently only to format numbers for consistent
    +17        reporting, and hence a string is returned, and not the number
    +18        primitive.
    +19
    +20        See tests for examples on how it works, but in general:
    +21
    +22        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +23        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +24        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +25        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +26        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +27        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +28
    +29        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +30        Ref.
    +31            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +32            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +33
    +34        :param number:
    +35        :param precision:
    +36        :return:
    +37        """
    +38        if precision < -1:
    +39            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +40
    +41        if abs(number) <= pow(
    +42            10, (-precision) - 1
    +43        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +44            return "0"
    +45
    +46        my_decimal = Decimal(number)
    +47        significant_digits = my_decimal.adjusted()
    +48
    +49        if significant_digits < 0:
    +50            new_precision = precision
    +51        elif significant_digits < precision:
    +52            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +53        else:
    +54            new_precision = 0
    +55
    +56        return str(
    +57            np.format_float_positional(
    +58                number,
    +59                new_precision,
    +60                unique=True,
    +61                fractional=True,
    +62                trim="-",
    +63            )
    +64        )
    +65
    +66    @staticmethod
    +67    def format_results_to_precision(result: TResult, precision: int) -> TResult:
    +68        """Traverse the graph_results, locate all numbers and round to the specified precision
    +69
    +70        Args:
    +71            result: The results
    +72            precision: The precision
    +73
    +74        Returns:
    +75            Copy of results, rounded to the given precision
    +76        """
    +77
    +78        def recursive_rounding(value):
    +79            if isinstance(value, BaseModel):
    +80                for k, v in value.__dict__.items():
    +81                    value.__setattr__(k, recursive_rounding(v))
    +82                return value
    +83            elif isinstance(value, dict):
    +84                return {k: recursive_rounding(v) for k, v in value.items()}
    +85            elif isinstance(value, list):
    +86                return [recursive_rounding(val) for val in value]
    +87            elif isinstance(value, float):
    +88                return float(Numbers.format_to_precision(value, precision=precision))
    +89            else:
    +90                return value
    +91
    +92        return recursive_rounding(deepcopy(result))
    +
    + + +
    +
    + +
    + + class + Numbers: + + + +
    + +
    12class Numbers:
    +13    """Class to handle eCalc specific logic to numbers."""
    +14
    +15    @staticmethod
    +16    def format_to_precision(number: float, precision: int) -> str:
    +17        """This method is currently only to format numbers for consistent
    +18        reporting, and hence a string is returned, and not the number
    +19        primitive.
    +20
    +21        See tests for examples on how it works, but in general:
    +22
    +23        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +24        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +25        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +26        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +27        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +28        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +29
    +30        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +31        Ref.
    +32            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +33            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +34
    +35        :param number:
    +36        :param precision:
    +37        :return:
    +38        """
    +39        if precision < -1:
    +40            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +41
    +42        if abs(number) <= pow(
    +43            10, (-precision) - 1
    +44        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +45            return "0"
    +46
    +47        my_decimal = Decimal(number)
    +48        significant_digits = my_decimal.adjusted()
    +49
    +50        if significant_digits < 0:
    +51            new_precision = precision
    +52        elif significant_digits < precision:
    +53            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +54        else:
    +55            new_precision = 0
    +56
    +57        return str(
    +58            np.format_float_positional(
    +59                number,
    +60                new_precision,
    +61                unique=True,
    +62                fractional=True,
    +63                trim="-",
    +64            )
    +65        )
    +66
    +67    @staticmethod
    +68    def format_results_to_precision(result: TResult, precision: int) -> TResult:
    +69        """Traverse the graph_results, locate all numbers and round to the specified precision
    +70
    +71        Args:
    +72            result: The results
    +73            precision: The precision
    +74
    +75        Returns:
    +76            Copy of results, rounded to the given precision
    +77        """
    +78
    +79        def recursive_rounding(value):
    +80            if isinstance(value, BaseModel):
    +81                for k, v in value.__dict__.items():
    +82                    value.__setattr__(k, recursive_rounding(v))
    +83                return value
    +84            elif isinstance(value, dict):
    +85                return {k: recursive_rounding(v) for k, v in value.items()}
    +86            elif isinstance(value, list):
    +87                return [recursive_rounding(val) for val in value]
    +88            elif isinstance(value, float):
    +89                return float(Numbers.format_to_precision(value, precision=precision))
    +90            else:
    +91                return value
    +92
    +93        return recursive_rounding(deepcopy(result))
    +
    + + +

    Class to handle eCalc specific logic to numbers.

    +
    + + +
    + +
    +
    @staticmethod
    + + def + format_to_precision(number: float, precision: int) -> str: + + + +
    + +
    15    @staticmethod
    +16    def format_to_precision(number: float, precision: int) -> str:
    +17        """This method is currently only to format numbers for consistent
    +18        reporting, and hence a string is returned, and not the number
    +19        primitive.
    +20
    +21        See tests for examples on how it works, but in general:
    +22
    +23        * Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign,
    +24        but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    +25        * Numbers without decimals, are reported without decimals (ie, where it is not significant)
    +26        * Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    +27        * If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    +28        * If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    +29
    +30        Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above.
    +31        Ref.
    +32            Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf
    +33            Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html
    +34
    +35        :param number:
    +36        :param precision:
    +37        :return:
    +38        """
    +39        if precision < -1:
    +40            raise ValueError(f"Precision must be >= 0. {precision} was given.")
    +41
    +42        if abs(number) <= pow(
    +43            10, (-precision) - 1
    +44        ):  # -1, because user indicates number of significant decimals behind decimal sign
    +45            return "0"
    +46
    +47        my_decimal = Decimal(number)
    +48        significant_digits = my_decimal.adjusted()
    +49
    +50        if significant_digits < 0:
    +51            new_precision = precision
    +52        elif significant_digits < precision:
    +53            new_precision = precision - significant_digits  # we dont want unnecessary decimals on high numbers
    +54        else:
    +55            new_precision = 0
    +56
    +57        return str(
    +58            np.format_float_positional(
    +59                number,
    +60                new_precision,
    +61                unique=True,
    +62                fractional=True,
    +63                trim="-",
    +64            )
    +65        )
    +
    + + +

    This method is currently only to format numbers for consistent +reporting, and hence a string is returned, and not the number +primitive.

    + +

    See tests for examples on how it works, but in general:

    + +
      +
    • Numbers with decimals are restricted to <#precision> decimals/digits after the decimal sign, +but only when they are significant (matter, ie. 0.10 is formatted to 0.1)
    • +
    • Numbers without decimals, are reported without decimals (ie, where it is not significant)
    • +
    • Floats that equal integers are NOT rounded (ie 1000.0 is reported as 1000)
    • +
    • If a number has more decimals than precision, it is rounded (3.1415288454854 to 3.14 if precision is 2)
    • +
    • If a number is smaller than the 10^-precision (EPSILON), then it is rounded off to "0" (0.001 ~= 0 if precision is 2)
    • +
    + +

    Uses Dragon4 algorithm implemented by Numpy, with some modifications/overrides as stated above. +Ref. + Article: https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf + Numpy: https://numpy.org/devdocs/reference/generated/numpy.format_float_positional.html

    + +
    Parameters
    + +
      +
    • number:
    • +
    • precision:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    +
    @staticmethod
    + + def + format_results_to_precision(result: ~TResult, precision: int) -> ~TResult: + + + +
    + +
    67    @staticmethod
    +68    def format_results_to_precision(result: TResult, precision: int) -> TResult:
    +69        """Traverse the graph_results, locate all numbers and round to the specified precision
    +70
    +71        Args:
    +72            result: The results
    +73            precision: The precision
    +74
    +75        Returns:
    +76            Copy of results, rounded to the given precision
    +77        """
    +78
    +79        def recursive_rounding(value):
    +80            if isinstance(value, BaseModel):
    +81                for k, v in value.__dict__.items():
    +82                    value.__setattr__(k, recursive_rounding(v))
    +83                return value
    +84            elif isinstance(value, dict):
    +85                return {k: recursive_rounding(v) for k, v in value.items()}
    +86            elif isinstance(value, list):
    +87                return [recursive_rounding(val) for val in value]
    +88            elif isinstance(value, float):
    +89                return float(Numbers.format_to_precision(value, precision=precision))
    +90            else:
    +91                return value
    +92
    +93        return recursive_rounding(deepcopy(result))
    +
    + + +

    Traverse the graph_results, locate all numbers and round to the specified precision

    + +

    Args: + result: The results + precision: The precision

    + +

    Returns: + Copy of results, rounded to the given precision

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/priorities.html b/docs/about/references/api/libecalc/common/priorities.html new file mode 100644 index 0000000000..4811cdff14 --- /dev/null +++ b/docs/about/references/api/libecalc/common/priorities.html @@ -0,0 +1,248 @@ + + + + + + + libecalc.common.priorities API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.priorities

    + + + + + + +
    1from typing import Dict, TypeVar
    +2
    +3TPriorityValue = TypeVar("TPriorityValue")
    +4
    +5PriorityID = str
    +6
    +7Priorities = Dict[PriorityID, TPriorityValue]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/priority_optimizer.html b/docs/about/references/api/libecalc/common/priority_optimizer.html new file mode 100644 index 0000000000..5b3c155d03 --- /dev/null +++ b/docs/about/references/api/libecalc/common/priority_optimizer.html @@ -0,0 +1,557 @@ + + + + + + + libecalc.common.priority_optimizer API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.priority_optimizer

    + + + + + + +
     1import operator
    + 2import typing
    + 3from collections import defaultdict
    + 4from dataclasses import dataclass
    + 5from functools import reduce
    + 6from typing import Dict, Generic, List, TypeVar
    + 7
    + 8from libecalc.common.priorities import PriorityID
    + 9
    +10TResult = TypeVar("TResult")
    +11
    +12ComponentID = str
    +13
    +14
    +15@dataclass
    +16class PriorityOptimizerResult(Generic[TResult]):
    +17    priority_used: PriorityID
    +18    priority_results: List[typing.Any]  # TODO: typing. This is the consumer results merged based on priorities used
    +19
    +20
    +21@dataclass
    +22class EvaluatorResult(Generic[TResult]):
    +23    id: ComponentID
    +24    result: TResult
    +25    is_valid: bool
    +26
    +27
    +28class PriorityOptimizer(Generic[TResult]):
    +29    def optimize(
    +30        self,
    +31        priorities: List[PriorityID],
    +32        evaluator: typing.Callable[[PriorityID], List[EvaluatorResult[TResult]]],
    +33    ) -> PriorityOptimizerResult:
    +34        """
    +35        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +36        the priority is selected, if invalid try the next priority.
    +37
    +38        It will default to the last priority if all settings fails
    +39
    +40        Args:
    +41            priorities: List of priorities
    +42            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +43
    +44        Returns:
    +45            PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities
    +46            used,
    +47
    +48        """
    +49        priority_used = priorities[-1]
    +50        priority_results: Dict[PriorityID, Dict[str, TResult]] = defaultdict(dict)
    +51
    +52        for priority in priorities:
    +53            evaluator_results = evaluator(priority)
    +54            for evaluator_result in evaluator_results:
    +55                priority_results[priority][evaluator_result.id] = evaluator_result.result
    +56
    +57            # Check if consumers are valid for this priority, should be valid for all consumers
    +58            all_evaluator_results_valid = reduce(
    +59                operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +60            )
    +61
    +62            if all_evaluator_results_valid:
    +63                priority_used = priority
    +64                # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +65                break
    +66        return PriorityOptimizerResult(
    +67            priority_used=priority_used,
    +68            priority_results=[
    +69                ecalc_model_result.component_result for ecalc_model_result in priority_results[priority_used].values()
    +70            ],
    +71        )
    +
    + + +
    +
    + +
    + + class + PriorityOptimizerResult(typing.Generic[~TResult]): + + + +
    + +
    17class PriorityOptimizerResult(Generic[TResult]):
    +18    priority_used: PriorityID
    +19    priority_results: List[typing.Any]  # TODO: typing. This is the consumer results merged based on priorities used
    +
    + + + + +
    +
    + + PriorityOptimizerResult(priority_used: str, priority_results: List[Any]) + + +
    + + + + +
    +
    +
    + +
    + + class + EvaluatorResult(typing.Generic[~TResult]): + + + +
    + +
    23class EvaluatorResult(Generic[TResult]):
    +24    id: ComponentID
    +25    result: TResult
    +26    is_valid: bool
    +
    + + + + +
    +
    + + EvaluatorResult(id: str, result: ~TResult, is_valid: bool) + + +
    + + + + +
    +
    +
    + +
    + + class + PriorityOptimizer(typing.Generic[~TResult]): + + + +
    + +
    29class PriorityOptimizer(Generic[TResult]):
    +30    def optimize(
    +31        self,
    +32        priorities: List[PriorityID],
    +33        evaluator: typing.Callable[[PriorityID], List[EvaluatorResult[TResult]]],
    +34    ) -> PriorityOptimizerResult:
    +35        """
    +36        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +37        the priority is selected, if invalid try the next priority.
    +38
    +39        It will default to the last priority if all settings fails
    +40
    +41        Args:
    +42            priorities: List of priorities
    +43            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +44
    +45        Returns:
    +46            PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities
    +47            used,
    +48
    +49        """
    +50        priority_used = priorities[-1]
    +51        priority_results: Dict[PriorityID, Dict[str, TResult]] = defaultdict(dict)
    +52
    +53        for priority in priorities:
    +54            evaluator_results = evaluator(priority)
    +55            for evaluator_result in evaluator_results:
    +56                priority_results[priority][evaluator_result.id] = evaluator_result.result
    +57
    +58            # Check if consumers are valid for this priority, should be valid for all consumers
    +59            all_evaluator_results_valid = reduce(
    +60                operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +61            )
    +62
    +63            if all_evaluator_results_valid:
    +64                priority_used = priority
    +65                # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +66                break
    +67        return PriorityOptimizerResult(
    +68            priority_used=priority_used,
    +69            priority_results=[
    +70                ecalc_model_result.component_result for ecalc_model_result in priority_results[priority_used].values()
    +71            ],
    +72        )
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + optimize( self, priorities: List[str], evaluator: Callable[[str], List[libecalc.common.priority_optimizer.EvaluatorResult[~TResult]]]) -> libecalc.common.priority_optimizer.PriorityOptimizerResult: + + + +
    + +
    30    def optimize(
    +31        self,
    +32        priorities: List[PriorityID],
    +33        evaluator: typing.Callable[[PriorityID], List[EvaluatorResult[TResult]]],
    +34    ) -> PriorityOptimizerResult:
    +35        """
    +36        Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid
    +37        the priority is selected, if invalid try the next priority.
    +38
    +39        It will default to the last priority if all settings fails
    +40
    +41        Args:
    +42            priorities: List of priorities
    +43            evaluator: The evaluator function gives a list of results back, each result with its own unique id.
    +44
    +45        Returns:
    +46            PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities
    +47            used,
    +48
    +49        """
    +50        priority_used = priorities[-1]
    +51        priority_results: Dict[PriorityID, Dict[str, TResult]] = defaultdict(dict)
    +52
    +53        for priority in priorities:
    +54            evaluator_results = evaluator(priority)
    +55            for evaluator_result in evaluator_results:
    +56                priority_results[priority][evaluator_result.id] = evaluator_result.result
    +57
    +58            # Check if consumers are valid for this priority, should be valid for all consumers
    +59            all_evaluator_results_valid = reduce(
    +60                operator.mul, [evaluator_result.is_valid for evaluator_result in evaluator_results]
    +61            )
    +62
    +63            if all_evaluator_results_valid:
    +64                priority_used = priority
    +65                # quit as soon as all time-steps are valid. This means that we do not need to test all settings.
    +66                break
    +67        return PriorityOptimizerResult(
    +68            priority_used=priority_used,
    +69            priority_results=[
    +70                ecalc_model_result.component_result for ecalc_model_result in priority_results[priority_used].values()
    +71            ],
    +72        )
    +
    + + +

    Given a list of priorities, evaluate each priority using the evaluator. If the result of an evaluation is valid +the priority is selected, if invalid try the next priority.

    + +

    It will default to the last priority if all settings fails

    + +

    Args: + priorities: List of priorities + evaluator: The evaluator function gives a list of results back, each result with its own unique id.

    + +

    Returns: + PriorityOptimizerResult: result containing priorities used and a list of the results merged on priorities + used,

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/run_info.html b/docs/about/references/api/libecalc/common/run_info.html new file mode 100644 index 0000000000..c135cd7cff --- /dev/null +++ b/docs/about/references/api/libecalc/common/run_info.html @@ -0,0 +1,332 @@ + + + + + + + libecalc.common.run_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.run_info

    + + + + + + +
     1from datetime import datetime
    + 2from typing import Optional
    + 3
    + 4from pydantic import BaseModel
    + 5
    + 6from libecalc.common.version import Version
    + 7
    + 8
    + 9class RunInfo(BaseModel):
    +10    """Data model for metadata about eCalc model runs."""
    +11
    +12    version: Version
    +13    start: datetime
    +14    end: Optional[datetime] = None
    +15
    +16    def __str__(self):
    +17        rstr = f"version '{str(self.version)}' started at '{self.start.strftime('%Y.%m.%d %H:%M:%S')}'"
    +18        if self.end is not None:
    +19            rstr += f" ended at '{self.end.strftime('%Y.%m.%d %H:%M:%S')}'"
    +20        return rstr
    +
    + + +
    +
    + +
    + + class + RunInfo(pydantic.main.BaseModel): + + + +
    + +
    10class RunInfo(BaseModel):
    +11    """Data model for metadata about eCalc model runs."""
    +12
    +13    version: Version
    +14    start: datetime
    +15    end: Optional[datetime] = None
    +16
    +17    def __str__(self):
    +18        rstr = f"version '{str(self.version)}' started at '{self.start.strftime('%Y.%m.%d %H:%M:%S')}'"
    +19        if self.end is not None:
    +20            rstr += f" ended at '{self.end.strftime('%Y.%m.%d %H:%M:%S')}'"
    +21        return rstr
    +
    + + +

    Data model for metadata about eCalc model runs.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/stream_conditions.html b/docs/about/references/api/libecalc/common/stream_conditions.html new file mode 100644 index 0000000000..7a9a2332bb --- /dev/null +++ b/docs/about/references/api/libecalc/common/stream_conditions.html @@ -0,0 +1,785 @@ + + + + + + + libecalc.common.stream_conditions API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.stream_conditions

    + + + + + + +
      1import operator
    +  2from datetime import datetime
    +  3from functools import reduce
    +  4from typing import List, Optional
    +  5
    +  6from pydantic import BaseModel, ConfigDict
    +  7
    +  8from libecalc.common.string.string_utils import generate_id, to_camel_case
    +  9from libecalc.common.utils.rates import TimeSeriesFloat, TimeSeriesStreamDayRate
    + 10from libecalc.domain.stream_conditions import (
    + 11    Density,
    + 12    Pressure,
    + 13    Rate,  # TODO: import from domain, domain also imports from common
    + 14    StreamConditions,
    + 15    Temperature,
    + 16)
    + 17
    + 18
    + 19class TimeSeriesStreamConditions(BaseModel):
    + 20    model_config = ConfigDict(extra="forbid", alias_generator=to_camel_case, populate_by_name=True)
    + 21
    + 22    id: str
    + 23    name: str
    + 24    rate: Optional[TimeSeriesStreamDayRate] = None
    + 25    pressure: Optional[TimeSeriesFloat] = None
    + 26    temperature: Optional[TimeSeriesFloat] = None
    + 27    fluid_density: Optional[TimeSeriesFloat] = None
    + 28
    + 29    def mix(self, *other_streams: "TimeSeriesStreamConditions") -> "TimeSeriesStreamConditions":
    + 30        """
    + 31        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    + 32
    + 33        Assuming 'self' sets the target pressure.
    + 34        Args:
    + 35            other_streams: The streams to be mixed in.
    + 36
    + 37        Returns: The mixed stream
    + 38
    + 39        """
    + 40        streams = [self, *other_streams]
    + 41        if any(stream.rate is None for stream in streams):
    + 42            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 43            raise ValueError(
    + 44                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 45            )
    + 46
    + 47        if any(stream.pressure is None for stream in streams):
    + 48            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 49            raise ValueError(
    + 50                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 51            )
    + 52
    + 53        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 54        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    + 55            # TODO: return a warning object with the specific timesteps?
    + 56            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 57
    + 58        return TimeSeriesStreamConditions(
    + 59            id=generate_id(*[stream.id for stream in streams]),
    + 60            name=f"{'-'.join(stream.name for stream in streams)}",
    + 61            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 62            pressure=target_pressure,
    + 63            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    + 64        )
    + 65
    + 66    def for_timestep(self, current_timestep: datetime) -> StreamConditions:
    + 67        """
    + 68        For a given timestep, get the stream that is relevant for that timestep only.
    + 69
    + 70        Args:
    + 71            current_timestep: the timestep must be a part of the global timevector
    + 72
    + 73        Returns: the stream that is relevant for the given timestep.
    + 74
    + 75        """
    + 76        return StreamConditions(
    + 77            id=self.id,
    + 78            name=self.name,
    + 79            timestep=current_timestep,
    + 80            rate=Rate(value=self.rate.for_timestep(current_timestep).values[0], unit=self.rate.unit)
    + 81            if self.rate is not None
    + 82            else None,
    + 83            pressure=Pressure(value=self.pressure.for_timestep(current_timestep).values[0], unit=self.pressure.unit)
    + 84            if self.pressure is not None
    + 85            else None,
    + 86            density=Density(
    + 87                value=self.fluid_density.for_timestep(current_timestep).values[0], unit=self.fluid_density.unit
    + 88            )
    + 89            if self.fluid_density is not None
    + 90            else None,
    + 91            temperature=Temperature(
    + 92                value=self.temperature.for_timestep(current_timestep).values[0], unit=self.temperature.unit
    + 93            )
    + 94            if self.temperature is not None
    + 95            else None,
    + 96        )
    + 97
    + 98    @classmethod
    + 99    def from_stream_condition(cls, stream_conditions: StreamConditions) -> "TimeSeriesStreamConditions":
    +100        return TimeSeriesStreamConditions(
    +101            id=stream_conditions.id,
    +102            name=stream_conditions.name,
    +103            rate=TimeSeriesStreamDayRate(
    +104                timesteps=[stream_conditions.timestep],
    +105                values=[stream_conditions.rate.value],
    +106                unit=stream_conditions.rate.unit,
    +107            ),
    +108            pressure=TimeSeriesFloat(
    +109                timesteps=[stream_conditions.timestep],
    +110                values=[stream_conditions.pressure.value],
    +111                unit=stream_conditions.pressure.unit,
    +112            ),
    +113            temperature=TimeSeriesFloat(
    +114                timesteps=[stream_conditions.timestep],
    +115                values=[stream_conditions.temperature.value],
    +116                unit=stream_conditions.temperature.unit,
    +117            )
    +118            if stream_conditions.temperature is not None
    +119            else None,
    +120            fluid_density=TimeSeriesFloat(
    +121                timesteps=[stream_conditions.timestep],
    +122                values=[stream_conditions.density.value],
    +123                unit=stream_conditions.density.unit,
    +124            )
    +125            if stream_conditions.density is not None
    +126            else None,
    +127        )
    +128
    +129    @classmethod
    +130    def mix_all(cls, streams: List["TimeSeriesStreamConditions"]) -> "TimeSeriesStreamConditions":
    +131        if len(streams) == 0:
    +132            raise ValueError("No streams to mix")
    +133        if len(streams) == 1:
    +134            return streams[0].model_copy()
    +135
    +136        first, *rest = streams
    +137        return first.model_copy().mix(*rest)
    +
    + + +
    +
    + +
    + + class + TimeSeriesStreamConditions(pydantic.main.BaseModel): + + + +
    + +
     20class TimeSeriesStreamConditions(BaseModel):
    + 21    model_config = ConfigDict(extra="forbid", alias_generator=to_camel_case, populate_by_name=True)
    + 22
    + 23    id: str
    + 24    name: str
    + 25    rate: Optional[TimeSeriesStreamDayRate] = None
    + 26    pressure: Optional[TimeSeriesFloat] = None
    + 27    temperature: Optional[TimeSeriesFloat] = None
    + 28    fluid_density: Optional[TimeSeriesFloat] = None
    + 29
    + 30    def mix(self, *other_streams: "TimeSeriesStreamConditions") -> "TimeSeriesStreamConditions":
    + 31        """
    + 32        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    + 33
    + 34        Assuming 'self' sets the target pressure.
    + 35        Args:
    + 36            other_streams: The streams to be mixed in.
    + 37
    + 38        Returns: The mixed stream
    + 39
    + 40        """
    + 41        streams = [self, *other_streams]
    + 42        if any(stream.rate is None for stream in streams):
    + 43            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 44            raise ValueError(
    + 45                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 46            )
    + 47
    + 48        if any(stream.pressure is None for stream in streams):
    + 49            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 50            raise ValueError(
    + 51                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 52            )
    + 53
    + 54        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 55        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    + 56            # TODO: return a warning object with the specific timesteps?
    + 57            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 58
    + 59        return TimeSeriesStreamConditions(
    + 60            id=generate_id(*[stream.id for stream in streams]),
    + 61            name=f"{'-'.join(stream.name for stream in streams)}",
    + 62            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 63            pressure=target_pressure,
    + 64            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    + 65        )
    + 66
    + 67    def for_timestep(self, current_timestep: datetime) -> StreamConditions:
    + 68        """
    + 69        For a given timestep, get the stream that is relevant for that timestep only.
    + 70
    + 71        Args:
    + 72            current_timestep: the timestep must be a part of the global timevector
    + 73
    + 74        Returns: the stream that is relevant for the given timestep.
    + 75
    + 76        """
    + 77        return StreamConditions(
    + 78            id=self.id,
    + 79            name=self.name,
    + 80            timestep=current_timestep,
    + 81            rate=Rate(value=self.rate.for_timestep(current_timestep).values[0], unit=self.rate.unit)
    + 82            if self.rate is not None
    + 83            else None,
    + 84            pressure=Pressure(value=self.pressure.for_timestep(current_timestep).values[0], unit=self.pressure.unit)
    + 85            if self.pressure is not None
    + 86            else None,
    + 87            density=Density(
    + 88                value=self.fluid_density.for_timestep(current_timestep).values[0], unit=self.fluid_density.unit
    + 89            )
    + 90            if self.fluid_density is not None
    + 91            else None,
    + 92            temperature=Temperature(
    + 93                value=self.temperature.for_timestep(current_timestep).values[0], unit=self.temperature.unit
    + 94            )
    + 95            if self.temperature is not None
    + 96            else None,
    + 97        )
    + 98
    + 99    @classmethod
    +100    def from_stream_condition(cls, stream_conditions: StreamConditions) -> "TimeSeriesStreamConditions":
    +101        return TimeSeriesStreamConditions(
    +102            id=stream_conditions.id,
    +103            name=stream_conditions.name,
    +104            rate=TimeSeriesStreamDayRate(
    +105                timesteps=[stream_conditions.timestep],
    +106                values=[stream_conditions.rate.value],
    +107                unit=stream_conditions.rate.unit,
    +108            ),
    +109            pressure=TimeSeriesFloat(
    +110                timesteps=[stream_conditions.timestep],
    +111                values=[stream_conditions.pressure.value],
    +112                unit=stream_conditions.pressure.unit,
    +113            ),
    +114            temperature=TimeSeriesFloat(
    +115                timesteps=[stream_conditions.timestep],
    +116                values=[stream_conditions.temperature.value],
    +117                unit=stream_conditions.temperature.unit,
    +118            )
    +119            if stream_conditions.temperature is not None
    +120            else None,
    +121            fluid_density=TimeSeriesFloat(
    +122                timesteps=[stream_conditions.timestep],
    +123                values=[stream_conditions.density.value],
    +124                unit=stream_conditions.density.unit,
    +125            )
    +126            if stream_conditions.density is not None
    +127            else None,
    +128        )
    +129
    +130    @classmethod
    +131    def mix_all(cls, streams: List["TimeSeriesStreamConditions"]) -> "TimeSeriesStreamConditions":
    +132        if len(streams) == 0:
    +133            raise ValueError("No streams to mix")
    +134        if len(streams) == 1:
    +135            return streams[0].model_copy()
    +136
    +137        first, *rest = streams
    +138        return first.model_copy().mix(*rest)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + + + +
    30    def mix(self, *other_streams: "TimeSeriesStreamConditions") -> "TimeSeriesStreamConditions":
    +31        """
    +32        Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).
    +33
    +34        Assuming 'self' sets the target pressure.
    +35        Args:
    +36            other_streams: The streams to be mixed in.
    +37
    +38        Returns: The mixed stream
    +39
    +40        """
    +41        streams = [self, *other_streams]
    +42        if any(stream.rate is None for stream in streams):
    +43            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    +44            raise ValueError(
    +45                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    +46            )
    +47
    +48        if any(stream.pressure is None for stream in streams):
    +49            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    +50            raise ValueError(
    +51                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    +52            )
    +53
    +54        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    +55        if any(stream.pressure < target_pressure for stream in other_streams):  # type: ignore
    +56            # TODO: return a warning object with the specific timesteps?
    +57            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    +58
    +59        return TimeSeriesStreamConditions(
    +60            id=generate_id(*[stream.id for stream in streams]),
    +61            name=f"{'-'.join(stream.name for stream in streams)}",
    +62            rate=reduce(operator.add, [stream.rate for stream in streams]),
    +63            pressure=target_pressure,
    +64            fluid_density=self.fluid_density,  # TODO: Check that they are equal? Or handle it?
    +65        )
    +
    + + +

    Mix two streams. This needs to be expanded to handle fluids (density, composition, etc.).

    + +

    Assuming 'self' sets the target pressure. +Args: + other_streams: The streams to be mixed in.

    + +

    Returns: The mixed stream

    +
    + + +
    +
    + +
    + + def + for_timestep( self, current_timestep: datetime.datetime) -> libecalc.domain.stream_conditions.StreamConditions: + + + +
    + +
    67    def for_timestep(self, current_timestep: datetime) -> StreamConditions:
    +68        """
    +69        For a given timestep, get the stream that is relevant for that timestep only.
    +70
    +71        Args:
    +72            current_timestep: the timestep must be a part of the global timevector
    +73
    +74        Returns: the stream that is relevant for the given timestep.
    +75
    +76        """
    +77        return StreamConditions(
    +78            id=self.id,
    +79            name=self.name,
    +80            timestep=current_timestep,
    +81            rate=Rate(value=self.rate.for_timestep(current_timestep).values[0], unit=self.rate.unit)
    +82            if self.rate is not None
    +83            else None,
    +84            pressure=Pressure(value=self.pressure.for_timestep(current_timestep).values[0], unit=self.pressure.unit)
    +85            if self.pressure is not None
    +86            else None,
    +87            density=Density(
    +88                value=self.fluid_density.for_timestep(current_timestep).values[0], unit=self.fluid_density.unit
    +89            )
    +90            if self.fluid_density is not None
    +91            else None,
    +92            temperature=Temperature(
    +93                value=self.temperature.for_timestep(current_timestep).values[0], unit=self.temperature.unit
    +94            )
    +95            if self.temperature is not None
    +96            else None,
    +97        )
    +
    + + +

    For a given timestep, get the stream that is relevant for that timestep only.

    + +

    Args: + current_timestep: the timestep must be a part of the global timevector

    + +

    Returns: the stream that is relevant for the given timestep.

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + from_stream_condition( cls, stream_conditions: libecalc.domain.stream_conditions.StreamConditions) -> libecalc.common.stream_conditions.TimeSeriesStreamConditions: + + + +
    + +
     99    @classmethod
    +100    def from_stream_condition(cls, stream_conditions: StreamConditions) -> "TimeSeriesStreamConditions":
    +101        return TimeSeriesStreamConditions(
    +102            id=stream_conditions.id,
    +103            name=stream_conditions.name,
    +104            rate=TimeSeriesStreamDayRate(
    +105                timesteps=[stream_conditions.timestep],
    +106                values=[stream_conditions.rate.value],
    +107                unit=stream_conditions.rate.unit,
    +108            ),
    +109            pressure=TimeSeriesFloat(
    +110                timesteps=[stream_conditions.timestep],
    +111                values=[stream_conditions.pressure.value],
    +112                unit=stream_conditions.pressure.unit,
    +113            ),
    +114            temperature=TimeSeriesFloat(
    +115                timesteps=[stream_conditions.timestep],
    +116                values=[stream_conditions.temperature.value],
    +117                unit=stream_conditions.temperature.unit,
    +118            )
    +119            if stream_conditions.temperature is not None
    +120            else None,
    +121            fluid_density=TimeSeriesFloat(
    +122                timesteps=[stream_conditions.timestep],
    +123                values=[stream_conditions.density.value],
    +124                unit=stream_conditions.density.unit,
    +125            )
    +126            if stream_conditions.density is not None
    +127            else None,
    +128        )
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + mix_all( cls, streams: list[libecalc.common.stream_conditions.TimeSeriesStreamConditions]) -> libecalc.common.stream_conditions.TimeSeriesStreamConditions: + + + +
    + +
    130    @classmethod
    +131    def mix_all(cls, streams: List["TimeSeriesStreamConditions"]) -> "TimeSeriesStreamConditions":
    +132        if len(streams) == 0:
    +133            raise ValueError("No streams to mix")
    +134        if len(streams) == 1:
    +135            return streams[0].model_copy()
    +136
    +137        first, *rest = streams
    +138        return first.model_copy().mix(*rest)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/string.html b/docs/about/references/api/libecalc/common/string.html new file mode 100644 index 0000000000..a71c2e7382 --- /dev/null +++ b/docs/about/references/api/libecalc/common/string.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.common.string API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.string

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/string/string_utils.html b/docs/about/references/api/libecalc/common/string/string_utils.html new file mode 100644 index 0000000000..2a09b8ed67 --- /dev/null +++ b/docs/about/references/api/libecalc/common/string/string_utils.html @@ -0,0 +1,396 @@ + + + + + + + libecalc.common.string.string_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.string.string_utils

    + + + + + + +
     1from typing import Iterable, Set
    + 2
    + 3
    + 4def get_duplicates(names: Iterable[str]) -> Set[str]:
    + 5    seen = set()
    + 6    duplicates = set()
    + 7    for name in names:
    + 8        if name in seen:
    + 9            duplicates.add(name)
    +10        else:
    +11            seen.add(name)
    +12    return duplicates
    +13
    +14
    +15def generate_id(*args: str) -> str:
    +16    """
    +17    Deprecated: When names were not unique, this was necessary in order to make names unique based on context/hierarchy. Now names should
    +18    be unique for any part of the eCalc model that supports names, and it should therefore not be needed any more.
    +19
    +20    TODO: First step is to make the function return the string as normal, next step is to remove it altogether.
    +21
    +22    Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than
    +23    the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.
    +24
    +25    If there are many strings they are joined together.
    +26    """
    +27    return "-".join(args)
    +28
    +29
    +30def to_camel_case(string: str) -> str:
    +31    """Convert string from snake_case to camelCase
    +32
    +33    Args:
    +34        string: String in snake_case format
    +35
    +36    Returns:
    +37        String in camelCase format
    +38
    +39    """
    +40    string_split = string.replace("__", "_").split("_")
    +41    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +42    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +
    +
    + +
    + + def + get_duplicates(names: Iterable[str]) -> Set[str]: + + + +
    + +
     5def get_duplicates(names: Iterable[str]) -> Set[str]:
    + 6    seen = set()
    + 7    duplicates = set()
    + 8    for name in names:
    + 9        if name in seen:
    +10            duplicates.add(name)
    +11        else:
    +12            seen.add(name)
    +13    return duplicates
    +
    + + + + +
    +
    + +
    + + def + generate_id(*args: str) -> str: + + + +
    + +
    16def generate_id(*args: str) -> str:
    +17    """
    +18    Deprecated: When names were not unique, this was necessary in order to make names unique based on context/hierarchy. Now names should
    +19    be unique for any part of the eCalc model that supports names, and it should therefore not be needed any more.
    +20
    +21    TODO: First step is to make the function return the string as normal, next step is to remove it altogether.
    +22
    +23    Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than
    +24    the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.
    +25
    +26    If there are many strings they are joined together.
    +27    """
    +28    return "-".join(args)
    +
    + + +

    Deprecated: When names were not unique, this was necessary in order to make names unique based on context/hierarchy. Now names should +be unique for any part of the eCalc model that supports names, and it should therefore not be needed any more.

    + +

    TODO: First step is to make the function return the string as normal, next step is to remove it altogether.

    + +

    Generate an id from one or more strings. The string is encoded to avoid it being used to get other info than +the id, i.e. it should not be used to get the name of a consumer, even if the name might be used to create the id.

    + +

    If there are many strings they are joined together.

    +
    + + +
    +
    + +
    + + def + to_camel_case(string: str) -> str: + + + +
    + +
    31def to_camel_case(string: str) -> str:
    +32    """Convert string from snake_case to camelCase
    +33
    +34    Args:
    +35        string: String in snake_case format
    +36
    +37    Returns:
    +38        String in camelCase format
    +39
    +40    """
    +41    string_split = string.replace("__", "_").split("_")
    +42    string_split = [word for word in string_split if len(word) > 0]  # Allow names such as 'from_'
    +43    return string_split[0] + "".join(word[0].upper() + word[1:] for word in string_split[1:])
    +
    + + +

    Convert string from snake_case to camelCase

    + +

    Args: + string: String in snake_case format

    + +

    Returns: + String in camelCase format

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/tabular_time_series.html b/docs/about/references/api/libecalc/common/tabular_time_series.html new file mode 100644 index 0000000000..0f76000335 --- /dev/null +++ b/docs/about/references/api/libecalc/common/tabular_time_series.html @@ -0,0 +1,612 @@ + + + + + + + libecalc.common.tabular_time_series API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.tabular_time_series

    + + + + + + +
     1import itertools
    + 2from typing import Protocol, TypeVar
    + 3
    + 4from pydantic import BaseModel
    + 5from typing_extensions import Self
    + 6
    + 7from libecalc.common.list.list_utils import transpose
    + 8from libecalc.common.utils.rates import TimeSeries
    + 9
    +10
    +11class TabularTimeSeries(Protocol):
    +12    def model_copy(self, deep: bool = False) -> Self:
    +13        """
    +14        Duplicate a model
    +15        Args:
    +16            deep: set to `True` to make a deep copy of the model
    +17
    +18        Returns: new model instance
    +19
    +20        """
    +21        ...
    +22
    +23
    +24ObjectWithTimeSeries = TypeVar("ObjectWithTimeSeries", bound=TabularTimeSeries)
    +25
    +26
    +27class TabularTimeSeriesUtils:
    +28    """
    +29    Utility functions for objects containing TimeSeries
    +30    """
    +31
    +32    @classmethod
    +33    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +34        """
    +35        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +36        Args:
    +37            *objects_with_time_series: list of objects to merge
    +38
    +39        Returns: a merged object of the same type
    +40
    +41        """
    +42        # Verify that we are merging the same types
    +43        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +44            raise ValueError("Can not merge objects of differing types.")
    +45
    +46        first, *others = objects_with_time_series
    +47        merged_object = first.model_copy(deep=True)
    +48
    +49        for key, value in first.__dict__.items():
    +50            for other in others:
    +51                accumulated_value = merged_object.__getattribute__(key)
    +52                other_value = other.__getattribute__(key)
    +53                if key == "timesteps":
    +54                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +55                    merged_object.__setattr__(key, merged_timesteps)
    +56                elif isinstance(value, TimeSeries):
    +57                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +58                elif isinstance(value, BaseModel):
    +59                    merged_object.__setattr__(
    +60                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +61                    )
    +62                elif (
    +63                    isinstance(value, list)
    +64                    and len(value) > 0
    +65                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +66                ):
    +67                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +68                    transposed_list_attributes = transpose(list_attributes)
    +69                    merged_list_attributes = []
    +70                    if isinstance(value[0], TimeSeries):
    +71                        for time_series_to_merge in transposed_list_attributes:
    +72                            first_time_series, *others_time_series = time_series_to_merge
    +73                            merged_time_series = first_time_series
    +74                            for other_time_series in others_time_series:
    +75                                merged_time_series = merged_time_series.merge(other_time_series)
    +76                            merged_list_attributes.append(merged_time_series)
    +77                    elif isinstance(value[0], BaseModel):
    +78                        merged_list_attributes = [
    +79                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +80                        ]
    +81
    +82                    merged_object.__setattr__(key, merged_list_attributes)
    +83
    +84        return merged_object
    +
    + + +
    +
    + +
    + + class + TabularTimeSeries(typing.Protocol): + + + +
    + +
    12class TabularTimeSeries(Protocol):
    +13    def model_copy(self, deep: bool = False) -> Self:
    +14        """
    +15        Duplicate a model
    +16        Args:
    +17            deep: set to `True` to make a deep copy of the model
    +18
    +19        Returns: new model instance
    +20
    +21        """
    +22        ...
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + TabularTimeSeries(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    + +
    + + def + model_copy(self, deep: bool = False) -> typing_extensions.Self: + + + +
    + +
    13    def model_copy(self, deep: bool = False) -> Self:
    +14        """
    +15        Duplicate a model
    +16        Args:
    +17            deep: set to `True` to make a deep copy of the model
    +18
    +19        Returns: new model instance
    +20
    +21        """
    +22        ...
    +
    + + +

    Duplicate a model +Args: + deep: set to True to make a deep copy of the model

    + +

    Returns: new model instance

    +
    + + +
    +
    +
    + +
    + + class + TabularTimeSeriesUtils: + + + +
    + +
    28class TabularTimeSeriesUtils:
    +29    """
    +30    Utility functions for objects containing TimeSeries
    +31    """
    +32
    +33    @classmethod
    +34    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +35        """
    +36        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +37        Args:
    +38            *objects_with_time_series: list of objects to merge
    +39
    +40        Returns: a merged object of the same type
    +41
    +42        """
    +43        # Verify that we are merging the same types
    +44        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +45            raise ValueError("Can not merge objects of differing types.")
    +46
    +47        first, *others = objects_with_time_series
    +48        merged_object = first.model_copy(deep=True)
    +49
    +50        for key, value in first.__dict__.items():
    +51            for other in others:
    +52                accumulated_value = merged_object.__getattribute__(key)
    +53                other_value = other.__getattribute__(key)
    +54                if key == "timesteps":
    +55                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +56                    merged_object.__setattr__(key, merged_timesteps)
    +57                elif isinstance(value, TimeSeries):
    +58                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +59                elif isinstance(value, BaseModel):
    +60                    merged_object.__setattr__(
    +61                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +62                    )
    +63                elif (
    +64                    isinstance(value, list)
    +65                    and len(value) > 0
    +66                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +67                ):
    +68                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +69                    transposed_list_attributes = transpose(list_attributes)
    +70                    merged_list_attributes = []
    +71                    if isinstance(value[0], TimeSeries):
    +72                        for time_series_to_merge in transposed_list_attributes:
    +73                            first_time_series, *others_time_series = time_series_to_merge
    +74                            merged_time_series = first_time_series
    +75                            for other_time_series in others_time_series:
    +76                                merged_time_series = merged_time_series.merge(other_time_series)
    +77                            merged_list_attributes.append(merged_time_series)
    +78                    elif isinstance(value[0], BaseModel):
    +79                        merged_list_attributes = [
    +80                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +81                        ]
    +82
    +83                    merged_object.__setattr__(key, merged_list_attributes)
    +84
    +85        return merged_object
    +
    + + +

    Utility functions for objects containing TimeSeries

    +
    + + +
    + +
    +
    @classmethod
    + + def + merge(cls, *objects_with_time_series: ~ObjectWithTimeSeries): + + + +
    + +
    33    @classmethod
    +34    def merge(cls, *objects_with_time_series: ObjectWithTimeSeries):
    +35        """
    +36        Merge objects containing TimeSeries. Other attributes will be copied from the first object.
    +37        Args:
    +38            *objects_with_time_series: list of objects to merge
    +39
    +40        Returns: a merged object of the same type
    +41
    +42        """
    +43        # Verify that we are merging the same types
    +44        if len({type(object_with_time_series) for object_with_time_series in objects_with_time_series}) != 1:
    +45            raise ValueError("Can not merge objects of differing types.")
    +46
    +47        first, *others = objects_with_time_series
    +48        merged_object = first.model_copy(deep=True)
    +49
    +50        for key, value in first.__dict__.items():
    +51            for other in others:
    +52                accumulated_value = merged_object.__getattribute__(key)
    +53                other_value = other.__getattribute__(key)
    +54                if key == "timesteps":
    +55                    merged_timesteps = sorted(itertools.chain(accumulated_value, other_value))
    +56                    merged_object.__setattr__(key, merged_timesteps)
    +57                elif isinstance(value, TimeSeries):
    +58                    merged_object.__setattr__(key, accumulated_value.merge(other_value))
    +59                elif isinstance(value, BaseModel):
    +60                    merged_object.__setattr__(
    +61                        key, cls.merge(*[obj.__getattribute__(key) for obj in objects_with_time_series])
    +62                    )
    +63                elif (
    +64                    isinstance(value, list)
    +65                    and len(value) > 0
    +66                    and (isinstance(value[0], TimeSeries) or isinstance(value[0], BaseModel))
    +67                ):
    +68                    list_attributes = [obj.__getattribute__(key) for obj in objects_with_time_series]
    +69                    transposed_list_attributes = transpose(list_attributes)
    +70                    merged_list_attributes = []
    +71                    if isinstance(value[0], TimeSeries):
    +72                        for time_series_to_merge in transposed_list_attributes:
    +73                            first_time_series, *others_time_series = time_series_to_merge
    +74                            merged_time_series = first_time_series
    +75                            for other_time_series in others_time_series:
    +76                                merged_time_series = merged_time_series.merge(other_time_series)
    +77                            merged_list_attributes.append(merged_time_series)
    +78                    elif isinstance(value[0], BaseModel):
    +79                        merged_list_attributes = [
    +80                            cls.merge(*objs_to_merge) for objs_to_merge in transposed_list_attributes
    +81                        ]
    +82
    +83                    merged_object.__setattr__(key, merged_list_attributes)
    +84
    +85        return merged_object
    +
    + + +

    Merge objects containing TimeSeries. Other attributes will be copied from the first object. +Args: + *objects_with_time_series: list of objects to merge

    + +

    Returns: a merged object of the same type

    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/temporal_model.html b/docs/about/references/api/libecalc/common/temporal_model.html new file mode 100644 index 0000000000..5f01537ca1 --- /dev/null +++ b/docs/about/references/api/libecalc/common/temporal_model.html @@ -0,0 +1,559 @@ + + + + + + + libecalc.common.temporal_model API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.temporal_model

    + + + + + + +
     1from dataclasses import dataclass
    + 2from datetime import datetime
    + 3from typing import Dict, Generic, Iterator, List, Tuple, TypeVar
    + 4
    + 5from libecalc.common.time_utils import Period
    + 6from libecalc.dto.variables import VariablesMap
    + 7from libecalc.expression import Expression
    + 8
    + 9ModelType = TypeVar("ModelType")
    +10
    +11
    +12@dataclass
    +13class Model(Generic[ModelType]):
    +14    period: Period
    +15    model: ModelType
    +16
    +17
    +18class TemporalModel(Generic[ModelType]):
    +19    def __init__(self, data: Dict[datetime, ModelType]):
    +20        self._data = data
    +21        start_times = list(data.keys())
    +22        end_times = [*start_times[1:], datetime.max]
    +23        self.models = [
    +24            Model(
    +25                period=Period(start=start_time, end=end_time),
    +26                model=model,
    +27            )
    +28            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +29        ]
    +30
    +31    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +32        return ((model.period, model.model) for model in self.models)
    +33
    +34    def get_model(self, timestep: datetime) -> ModelType:
    +35        for model in self.models:
    +36            if timestep in model.period:
    +37                return model.model
    +38
    +39        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +40
    +41
    +42class TemporalExpression:
    +43    @staticmethod
    +44    def evaluate(
    +45        temporal_expression: TemporalModel[Expression],
    +46        variables_map: VariablesMap,
    +47    ) -> List[float]:
    +48        result = variables_map.zeros()
    +49        for period, expression in temporal_expression.items():
    +50            if Period.intersects(period, variables_map.period):
    +51                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +52                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +53                evaluated_expression = expression.evaluate(
    +54                    variables=variables_map_for_this_period.variables,
    +55                    fill_length=len(variables_map_for_this_period.time_vector),
    +56                )
    +57                result[start_index:end_index] = evaluated_expression
    +58        return result
    +
    + + +
    +
    + +
    + + class + Model(typing.Generic[~ModelType]): + + + +
    + +
    14class Model(Generic[ModelType]):
    +15    period: Period
    +16    model: ModelType
    +
    + + + + +
    +
    + + Model(period: libecalc.common.time_utils.Period, model: ~ModelType) + + +
    + + + + +
    +
    +
    + +
    + + class + TemporalModel(typing.Generic[~ModelType]): + + + +
    + +
    19class TemporalModel(Generic[ModelType]):
    +20    def __init__(self, data: Dict[datetime, ModelType]):
    +21        self._data = data
    +22        start_times = list(data.keys())
    +23        end_times = [*start_times[1:], datetime.max]
    +24        self.models = [
    +25            Model(
    +26                period=Period(start=start_time, end=end_time),
    +27                model=model,
    +28            )
    +29            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +30        ]
    +31
    +32    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +33        return ((model.period, model.model) for model in self.models)
    +34
    +35    def get_model(self, timestep: datetime) -> ModelType:
    +36        for model in self.models:
    +37            if timestep in model.period:
    +38                return model.model
    +39
    +40        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + TemporalModel(data: Dict[datetime.datetime, ~ModelType]) + + + +
    + +
    20    def __init__(self, data: Dict[datetime, ModelType]):
    +21        self._data = data
    +22        start_times = list(data.keys())
    +23        end_times = [*start_times[1:], datetime.max]
    +24        self.models = [
    +25            Model(
    +26                period=Period(start=start_time, end=end_time),
    +27                model=model,
    +28            )
    +29            for start_time, end_time, model in zip(start_times, end_times, data.values())
    +30        ]
    +
    + + + + +
    +
    + +
    + + def + items(self) -> Iterator[Tuple[libecalc.common.time_utils.Period, ~ModelType]]: + + + +
    + +
    32    def items(self) -> Iterator[Tuple[Period, ModelType]]:
    +33        return ((model.period, model.model) for model in self.models)
    +
    + + + + +
    +
    + +
    + + def + get_model(self, timestep: datetime.datetime) -> ~ModelType: + + + +
    + +
    35    def get_model(self, timestep: datetime) -> ModelType:
    +36        for model in self.models:
    +37            if timestep in model.period:
    +38                return model.model
    +39
    +40        raise ValueError(f"Model for timestep '{timestep}' not found in Temporal model")
    +
    + + + + +
    +
    +
    + +
    + + class + TemporalExpression: + + + +
    + +
    43class TemporalExpression:
    +44    @staticmethod
    +45    def evaluate(
    +46        temporal_expression: TemporalModel[Expression],
    +47        variables_map: VariablesMap,
    +48    ) -> List[float]:
    +49        result = variables_map.zeros()
    +50        for period, expression in temporal_expression.items():
    +51            if Period.intersects(period, variables_map.period):
    +52                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +53                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +54                evaluated_expression = expression.evaluate(
    +55                    variables=variables_map_for_this_period.variables,
    +56                    fill_length=len(variables_map_for_this_period.time_vector),
    +57                )
    +58                result[start_index:end_index] = evaluated_expression
    +59        return result
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + evaluate( temporal_expression: libecalc.common.temporal_model.TemporalModel[libecalc.expression.expression.Expression], variables_map: libecalc.dto.variables.VariablesMap) -> List[float]: + + + +
    + +
    44    @staticmethod
    +45    def evaluate(
    +46        temporal_expression: TemporalModel[Expression],
    +47        variables_map: VariablesMap,
    +48    ) -> List[float]:
    +49        result = variables_map.zeros()
    +50        for period, expression in temporal_expression.items():
    +51            if Period.intersects(period, variables_map.period):
    +52                start_index, end_index = period.get_timestep_indices(variables_map.time_vector)
    +53                variables_map_for_this_period = variables_map.get_subset(start_index=start_index, end_index=end_index)
    +54                evaluated_expression = expression.evaluate(
    +55                    variables=variables_map_for_this_period.variables,
    +56                    fill_length=len(variables_map_for_this_period.time_vector),
    +57                )
    +58                result[start_index:end_index] = evaluated_expression
    +59        return result
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/time_utils.html b/docs/about/references/api/libecalc/common/time_utils.html new file mode 100644 index 0000000000..bbef7c1b2c --- /dev/null +++ b/docs/about/references/api/libecalc/common/time_utils.html @@ -0,0 +1,1391 @@ + + + + + + + libecalc.common.time_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.time_utils

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3import enum
    +  4from dataclasses import dataclass
    +  5from datetime import date, datetime, timedelta
    +  6from typing import Any, Dict, List, Optional, Tuple, Union
    +  7
    +  8import numpy as np
    +  9import pandas as pd
    + 10from numpy.typing import ArrayLike, NDArray
    + 11
    + 12from libecalc.common.errors.exceptions import (
    + 13    InvalidDateException,
    + 14    ProgrammingError,
    + 15)
    + 16from libecalc.common.units import UnitConstants
    + 17
    + 18
    + 19def calculate_delta_days(time_vector: ArrayLike) -> NDArray[np.float64]:
    + 20    return np.array([x.total_seconds() / UnitConstants.SECONDS_IN_A_DAY for x in np.diff(time_vector)])
    + 21
    + 22
    + 23@dataclass
    + 24class Period:
    + 25    start: datetime = datetime.min
    + 26    end: datetime = datetime.max
    + 27
    + 28    def __str__(self) -> str:
    + 29        return f"{self.start}:{self.end}"
    + 30
    + 31    def __contains__(self, time: datetime) -> bool:
    + 32        """
    + 33        A period of time is defined as [start, end>,
    + 34        ie inclusive start and exclusive end.
    + 35
    + 36        Args:
    + 37            time:
    + 38
    + 39        Returns:
    + 40
    + 41        """
    + 42        return self.start <= time < self.end
    + 43
    + 44    @staticmethod
    + 45    def intersects(first: Period, second: Period) -> bool:
    + 46        """
    + 47        Args:
    + 48            first:
    + 49            second:
    + 50
    + 51        Returns:
    + 52
    + 53        """
    + 54        return first.start in second or second.start in first
    + 55
    + 56    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    + 57        try:
    + 58            start_index = timesteps.index(max(self.start, timesteps[0]))
    + 59            if self.end > timesteps[-1]:
    + 60                end_index = len(timesteps) + 1
    + 61            else:
    + 62                end_index = timesteps.index(self.end)
    + 63
    + 64            return start_index, end_index
    + 65        except (IndexError, ValueError) as e:
    + 66            raise ProgrammingError(
    + 67                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    + 68                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    + 69            ) from e
    + 70
    + 71
    + 72@dataclass
    + 73class Periods:
    + 74    periods: List[Period]
    + 75
    + 76    @classmethod
    + 77    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 78        """
    + 79        Create periods from the provided datetimes
    + 80        :param times: the datetimes to create periods from
    + 81        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 82        before the earliest provided datetime.
    + 83        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 84        after the latest provided datetime.
    + 85        :return:
    + 86        """
    + 87        if len(times) == 0:
    + 88            return cls([])
    + 89
    + 90        periods = []
    + 91
    + 92        if include_before:
    + 93            periods.append(
    + 94                Period(
    + 95                    end=times[0],
    + 96                )
    + 97            )
    + 98
    + 99        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    +100
    +101        if include_after:
    +102            periods.append(Period(start=times[-1]))
    +103
    +104        return cls(periods)
    +105
    +106    def __iter__(self):
    +107        return self.periods.__iter__()
    +108
    +109    def get_period(self, time: datetime) -> Period:
    +110        for period in self.periods:
    +111            if time in period:
    +112                return period
    +113
    +114        raise ProgrammingError(f"Period for date '{time}' not found in periods")
    +115
    +116
    +117def define_time_model_for_period(
    +118    time_model_data: Optional[Any], target_period: Period
    +119) -> Optional[Dict[datetime, Any]]:
    +120    """Process time model based on the target period.
    +121
    +122    Steps:
    +123        - Add a default start date if the model is not already a time model
    +124        - Filter definitions outside given time period
    +125        - Adjust start_date of the first model to the period
    +126    :param time_model_data: a model that can vary based on time,
    +127        i.e. {1900.01.01: some model, 1950.01.01: some other model}
    +128    :param target_period: period for which a model is defined (START,END specified by user or default to everything)
    +129    :return: the time model for the target period
    +130    """
    +131    if time_model_data is None:
    +132        return None
    +133
    +134    # Make sure the model is a time model
    +135    time_model_data = default_temporal_model(time_model_data, default_start=target_period.start)
    +136
    +137    model_periods = Periods.create_periods(list(time_model_data.keys()), include_before=False)
    +138
    +139    return {
    +140        max(model_period.start, target_period.start): model
    +141        for model_period, model in zip(model_periods.periods, time_model_data.values())
    +142        if Period.intersects(model_period, target_period)
    +143    }
    +144
    +145
    +146class Frequency(str, enum.Enum):
    +147    """Represents frequency/resolution of output data
    +148    Using the offset aliases from pandas
    +149    YS: year start
    +150    MS: month start
    +151    D: calendar day.
    +152    """
    +153
    +154    NONE = None
    +155    YEAR = "YS"
    +156    MONTH = "MS"
    +157    DAY = "D"
    +158
    +159    def formatstring(self) -> str:
    +160        """The format to write a string describing a certain period of time."""
    +161        if self.value == "YS":
    +162            return "%Y"
    +163        elif self.value == "MS":
    +164            return "%m/%Y"
    +165        else:
    +166            return "%d/%m/%Y"
    +167
    +168
    +169def resample_time_steps(
    +170    time_steps: List[datetime],
    +171    frequency: Frequency,
    +172    include_start_date: bool = True,
    +173    include_end_date: bool = True,
    +174) -> List[datetime]:
    +175    """Makes a time vector, based on the first and last date in time_vector and the frequency
    +176
    +177    Args:
    +178        time_steps: The original time vector
    +179        frequency: The reporting frequency
    +180        include_start_date: Whether to include the start date if it is not part of the requested reporting frequency
    +181        include_end_date: Whether to include the end date if it is not part of the requested reporting frequency
    +182
    +183    Returns: Time vector with dates according to given input
    +184
    +185    """
    +186    if frequency is not Frequency.NONE:
    +187        time_step_vector = create_time_steps(
    +188            start=time_steps[0],
    +189            end=time_steps[-1],
    +190            frequency=frequency,
    +191            include_start_date=include_start_date,
    +192            include_end_date=include_end_date,
    +193        )
    +194    else:
    +195        time_step_vector = time_steps
    +196
    +197    return time_step_vector
    +198
    +199
    +200def create_time_steps(
    +201    frequency: Frequency, start: datetime, end: datetime, include_start_date: bool, include_end_date: bool
    +202) -> List[datetime]:
    +203    """
    +204
    +205    Args:
    +206        frequency: The requested frequency
    +207        start: The start date
    +208        end: The end date
    +209        include_start_date: Whether to include the start date if it is not part of the requested frequency
    +210        include_end_date:  Whether to include the end date if it is not part of the requested frequency
    +211
    +212    Returns:
    +213        A list of dates (and possibly including the start/end dates) between the given start and end dates following
    +214        the requested frequency
    +215
    +216    """
    +217    # If the start date or end date is part of the date_range made by the frequency, the returned date range will
    +218    # always include the start and end date (no matter what the include_start_date and include_end_date booleans are).
    +219    # To avoid this add one day to start and subtract one day from end.
    +220    date_range = pd.date_range(start=start + timedelta(days=1), end=end - timedelta(days=1), freq=frequency.value)
    +221
    +222    time_steps = [clear_time(time_step) for time_step in date_range]
    +223    if include_start_date:
    +224        time_steps = [clear_time(start)] + time_steps
    +225    if include_end_date:
    +226        time_steps = [clear_time(end)] + time_steps
    +227
    +228    return sorted(set(time_steps))
    +229
    +230
    +231def clear_time(d: datetime) -> datetime:
    +232    return datetime.combine(d.date(), datetime.min.time())
    +233
    +234
    +235def is_temporal_model(data: Dict) -> bool:
    +236    if isinstance(data, dict):
    +237        is_date = []
    +238        is_not_date_keys = []
    +239        for key in data:
    +240            if isinstance(key, date):
    +241                is_date.append(True)
    +242            else:
    +243                try:
    +244                    datetime.strptime(key, "%Y-%m-%dT%H:%M:%S")
    +245                    is_date.append(True)
    +246                except (TypeError, ValueError):
    +247                    is_not_date_keys.append(str(key))
    +248                    is_date.append(False)
    +249        if any(is_date):
    +250            if not all(is_date):
    +251                raise InvalidDateException(
    +252                    title="Invalid model",
    +253                    message="Temporal models should only contain date keys. "
    +254                    f"Invalid date(s): {','.join(is_not_date_keys)}",
    +255                )
    +256            return True
    +257    return False
    +258
    +259
    +260def convert_date_to_datetime(d: Union[date, datetime]) -> datetime:
    +261    if isinstance(d, datetime):
    +262        return d
    +263    return datetime(d.year, d.month, d.day, 0, 0, 0)
    +264
    +265
    +266def default_temporal_model(data: Any, default_start: datetime) -> Optional[Dict[datetime, Any]]:
    +267    """Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00
    +268    :param default_start: the start time to use as default
    +269    :param data:
    +270    :return:
    +271    """
    +272    if data is None:
    +273        return None
    +274    elif is_temporal_model(data):
    +275        # Already a date-dict
    +276        return {convert_date_to_datetime(_date): value for _date, value in data.items()}
    +277    else:
    +278        # Set default start
    +279        return {
    +280            default_start: data,
    +281        }
    +
    + + +
    +
    + +
    + + def + calculate_delta_days( time_vector: Union[numpy.__array_like._SupportsArray[numpy.dtype], numpy.__nested_sequence._NestedSequence[numpy.__array_like._SupportsArray[numpy.dtype]], bool, int, float, complex, str, bytes, numpy.__nested_sequence._NestedSequence[Union[bool, int, float, complex, str, bytes]]]) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    20def calculate_delta_days(time_vector: ArrayLike) -> NDArray[np.float64]:
    +21    return np.array([x.total_seconds() / UnitConstants.SECONDS_IN_A_DAY for x in np.diff(time_vector)])
    +
    + + + + +
    +
    + +
    + + class + Period: + + + +
    + +
    25class Period:
    +26    start: datetime = datetime.min
    +27    end: datetime = datetime.max
    +28
    +29    def __str__(self) -> str:
    +30        return f"{self.start}:{self.end}"
    +31
    +32    def __contains__(self, time: datetime) -> bool:
    +33        """
    +34        A period of time is defined as [start, end>,
    +35        ie inclusive start and exclusive end.
    +36
    +37        Args:
    +38            time:
    +39
    +40        Returns:
    +41
    +42        """
    +43        return self.start <= time < self.end
    +44
    +45    @staticmethod
    +46    def intersects(first: Period, second: Period) -> bool:
    +47        """
    +48        Args:
    +49            first:
    +50            second:
    +51
    +52        Returns:
    +53
    +54        """
    +55        return first.start in second or second.start in first
    +56
    +57    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    +58        try:
    +59            start_index = timesteps.index(max(self.start, timesteps[0]))
    +60            if self.end > timesteps[-1]:
    +61                end_index = len(timesteps) + 1
    +62            else:
    +63                end_index = timesteps.index(self.end)
    +64
    +65            return start_index, end_index
    +66        except (IndexError, ValueError) as e:
    +67            raise ProgrammingError(
    +68                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    +69                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    +70            ) from e
    +
    + + + + +
    +
    + + Period( start: datetime.datetime = datetime.datetime(1, 1, 1, 0, 0), end: datetime.datetime = datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)) + + +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + intersects( first: libecalc.common.time_utils.Period, second: libecalc.common.time_utils.Period) -> bool: + + + +
    + +
    45    @staticmethod
    +46    def intersects(first: Period, second: Period) -> bool:
    +47        """
    +48        Args:
    +49            first:
    +50            second:
    +51
    +52        Returns:
    +53
    +54        """
    +55        return first.start in second or second.start in first
    +
    + + +

    Args: + first: + second:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_timestep_indices(self, timesteps: List[datetime.datetime]) -> Tuple[int, int]: + + + +
    + +
    57    def get_timestep_indices(self, timesteps: List[datetime]) -> Tuple[int, int]:
    +58        try:
    +59            start_index = timesteps.index(max(self.start, timesteps[0]))
    +60            if self.end > timesteps[-1]:
    +61                end_index = len(timesteps) + 1
    +62            else:
    +63                end_index = timesteps.index(self.end)
    +64
    +65            return start_index, end_index
    +66        except (IndexError, ValueError) as e:
    +67            raise ProgrammingError(
    +68                "Trying to access a timestep index that does not exist. Please contact eCalc support.\n\t"
    +69                f"Period: {self.start}:{self.end} - timesteps: {timesteps}"
    +70            ) from e
    +
    + + + + +
    +
    +
    + +
    + + class + Periods: + + + +
    + +
     74class Periods:
    + 75    periods: List[Period]
    + 76
    + 77    @classmethod
    + 78    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 79        """
    + 80        Create periods from the provided datetimes
    + 81        :param times: the datetimes to create periods from
    + 82        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 83        before the earliest provided datetime.
    + 84        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 85        after the latest provided datetime.
    + 86        :return:
    + 87        """
    + 88        if len(times) == 0:
    + 89            return cls([])
    + 90
    + 91        periods = []
    + 92
    + 93        if include_before:
    + 94            periods.append(
    + 95                Period(
    + 96                    end=times[0],
    + 97                )
    + 98            )
    + 99
    +100        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    +101
    +102        if include_after:
    +103            periods.append(Period(start=times[-1]))
    +104
    +105        return cls(periods)
    +106
    +107    def __iter__(self):
    +108        return self.periods.__iter__()
    +109
    +110    def get_period(self, time: datetime) -> Period:
    +111        for period in self.periods:
    +112            if time in period:
    +113                return period
    +114
    +115        raise ProgrammingError(f"Period for date '{time}' not found in periods")
    +
    + + + + +
    +
    + + Periods(periods: List[libecalc.common.time_utils.Period]) + + +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + create_periods( cls, times: List[datetime.datetime], include_before: bool = True, include_after: bool = True) -> libecalc.common.time_utils.Periods: + + + +
    + +
     77    @classmethod
    + 78    def create_periods(cls, times: List[datetime], include_before: bool = True, include_after: bool = True) -> Periods:
    + 79        """
    + 80        Create periods from the provided datetimes
    + 81        :param times: the datetimes to create periods from
    + 82        :param include_before: whether to add a period that ends with the first provided datetime, i.e. define a period
    + 83        before the earliest provided datetime.
    + 84        :param include_after: whether to add a period that starts with the last provided datetime, i.e. define a period
    + 85        after the latest provided datetime.
    + 86        :return:
    + 87        """
    + 88        if len(times) == 0:
    + 89            return cls([])
    + 90
    + 91        periods = []
    + 92
    + 93        if include_before:
    + 94            periods.append(
    + 95                Period(
    + 96                    end=times[0],
    + 97                )
    + 98            )
    + 99
    +100        periods.extend([Period(start=times[index], end=times[index + 1]) for index in range(len(times) - 1)])
    +101
    +102        if include_after:
    +103            periods.append(Period(start=times[-1]))
    +104
    +105        return cls(periods)
    +
    + + +

    Create periods from the provided datetimes

    + +
    Parameters
    + +
      +
    • times: the datetimes to create periods from
    • +
    • include_before: whether to add a period that ends with the first provided datetime, i.e. define a period +before the earliest provided datetime.
    • +
    • include_after: whether to add a period that starts with the last provided datetime, i.e. define a period +after the latest provided datetime.
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + get_period(self, time: datetime.datetime) -> libecalc.common.time_utils.Period: + + + +
    + +
    110    def get_period(self, time: datetime) -> Period:
    +111        for period in self.periods:
    +112            if time in period:
    +113                return period
    +114
    +115        raise ProgrammingError(f"Period for date '{time}' not found in periods")
    +
    + + + + +
    +
    +
    + +
    + + def + define_time_model_for_period( time_model_data: Union[Any, NoneType], target_period: libecalc.common.time_utils.Period) -> Union[Dict[datetime.datetime, Any], NoneType]: + + + +
    + +
    118def define_time_model_for_period(
    +119    time_model_data: Optional[Any], target_period: Period
    +120) -> Optional[Dict[datetime, Any]]:
    +121    """Process time model based on the target period.
    +122
    +123    Steps:
    +124        - Add a default start date if the model is not already a time model
    +125        - Filter definitions outside given time period
    +126        - Adjust start_date of the first model to the period
    +127    :param time_model_data: a model that can vary based on time,
    +128        i.e. {1900.01.01: some model, 1950.01.01: some other model}
    +129    :param target_period: period for which a model is defined (START,END specified by user or default to everything)
    +130    :return: the time model for the target period
    +131    """
    +132    if time_model_data is None:
    +133        return None
    +134
    +135    # Make sure the model is a time model
    +136    time_model_data = default_temporal_model(time_model_data, default_start=target_period.start)
    +137
    +138    model_periods = Periods.create_periods(list(time_model_data.keys()), include_before=False)
    +139
    +140    return {
    +141        max(model_period.start, target_period.start): model
    +142        for model_period, model in zip(model_periods.periods, time_model_data.values())
    +143        if Period.intersects(model_period, target_period)
    +144    }
    +
    + + +

    Process time model based on the target period.

    + +

    Steps: + - Add a default start date if the model is not already a time model + - Filter definitions outside given time period + - Adjust start_date of the first model to the period

    + +
    Parameters
    + +
      +
    • time_model_data: a model that can vary based on time, +i.e. {1900.01.01: some model, 1950.01.01: some other model}
    • +
    • target_period: period for which a model is defined (START,END specified by user or default to everything)
    • +
    + +
    Returns
    + +
    +

    the time model for the target period

    +
    +
    + + +
    +
    + +
    + + class + Frequency(builtins.str, enum.Enum): + + + +
    + +
    147class Frequency(str, enum.Enum):
    +148    """Represents frequency/resolution of output data
    +149    Using the offset aliases from pandas
    +150    YS: year start
    +151    MS: month start
    +152    D: calendar day.
    +153    """
    +154
    +155    NONE = None
    +156    YEAR = "YS"
    +157    MONTH = "MS"
    +158    DAY = "D"
    +159
    +160    def formatstring(self) -> str:
    +161        """The format to write a string describing a certain period of time."""
    +162        if self.value == "YS":
    +163            return "%Y"
    +164        elif self.value == "MS":
    +165            return "%m/%Y"
    +166        else:
    +167            return "%d/%m/%Y"
    +
    + + +

    Represents frequency/resolution of output data +Using the offset aliases from pandas +YS: year start +MS: month start +D: calendar day.

    +
    + + +
    +
    + NONE = +<Frequency.NONE: 'None'> + + +
    + + + + +
    +
    +
    + YEAR = +<Frequency.YEAR: 'YS'> + + +
    + + + + +
    +
    +
    + MONTH = +<Frequency.MONTH: 'MS'> + + +
    + + + + +
    +
    +
    + DAY = +<Frequency.DAY: 'D'> + + +
    + + + + +
    +
    + +
    + + def + formatstring(self) -> str: + + + +
    + +
    160    def formatstring(self) -> str:
    +161        """The format to write a string describing a certain period of time."""
    +162        if self.value == "YS":
    +163            return "%Y"
    +164        elif self.value == "MS":
    +165            return "%m/%Y"
    +166        else:
    +167            return "%d/%m/%Y"
    +
    + + +

    The format to write a string describing a certain period of time.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + def + resample_time_steps( time_steps: List[datetime.datetime], frequency: libecalc.common.time_utils.Frequency, include_start_date: bool = True, include_end_date: bool = True) -> List[datetime.datetime]: + + + +
    + +
    170def resample_time_steps(
    +171    time_steps: List[datetime],
    +172    frequency: Frequency,
    +173    include_start_date: bool = True,
    +174    include_end_date: bool = True,
    +175) -> List[datetime]:
    +176    """Makes a time vector, based on the first and last date in time_vector and the frequency
    +177
    +178    Args:
    +179        time_steps: The original time vector
    +180        frequency: The reporting frequency
    +181        include_start_date: Whether to include the start date if it is not part of the requested reporting frequency
    +182        include_end_date: Whether to include the end date if it is not part of the requested reporting frequency
    +183
    +184    Returns: Time vector with dates according to given input
    +185
    +186    """
    +187    if frequency is not Frequency.NONE:
    +188        time_step_vector = create_time_steps(
    +189            start=time_steps[0],
    +190            end=time_steps[-1],
    +191            frequency=frequency,
    +192            include_start_date=include_start_date,
    +193            include_end_date=include_end_date,
    +194        )
    +195    else:
    +196        time_step_vector = time_steps
    +197
    +198    return time_step_vector
    +
    + + +

    Makes a time vector, based on the first and last date in time_vector and the frequency

    + +

    Args: + time_steps: The original time vector + frequency: The reporting frequency + include_start_date: Whether to include the start date if it is not part of the requested reporting frequency + include_end_date: Whether to include the end date if it is not part of the requested reporting frequency

    + +

    Returns: Time vector with dates according to given input

    +
    + + +
    +
    + +
    + + def + create_time_steps( frequency: libecalc.common.time_utils.Frequency, start: datetime.datetime, end: datetime.datetime, include_start_date: bool, include_end_date: bool) -> List[datetime.datetime]: + + + +
    + +
    201def create_time_steps(
    +202    frequency: Frequency, start: datetime, end: datetime, include_start_date: bool, include_end_date: bool
    +203) -> List[datetime]:
    +204    """
    +205
    +206    Args:
    +207        frequency: The requested frequency
    +208        start: The start date
    +209        end: The end date
    +210        include_start_date: Whether to include the start date if it is not part of the requested frequency
    +211        include_end_date:  Whether to include the end date if it is not part of the requested frequency
    +212
    +213    Returns:
    +214        A list of dates (and possibly including the start/end dates) between the given start and end dates following
    +215        the requested frequency
    +216
    +217    """
    +218    # If the start date or end date is part of the date_range made by the frequency, the returned date range will
    +219    # always include the start and end date (no matter what the include_start_date and include_end_date booleans are).
    +220    # To avoid this add one day to start and subtract one day from end.
    +221    date_range = pd.date_range(start=start + timedelta(days=1), end=end - timedelta(days=1), freq=frequency.value)
    +222
    +223    time_steps = [clear_time(time_step) for time_step in date_range]
    +224    if include_start_date:
    +225        time_steps = [clear_time(start)] + time_steps
    +226    if include_end_date:
    +227        time_steps = [clear_time(end)] + time_steps
    +228
    +229    return sorted(set(time_steps))
    +
    + + +

    Args: + frequency: The requested frequency + start: The start date + end: The end date + include_start_date: Whether to include the start date if it is not part of the requested frequency + include_end_date: Whether to include the end date if it is not part of the requested frequency

    + +

    Returns: + A list of dates (and possibly including the start/end dates) between the given start and end dates following + the requested frequency

    +
    + + +
    +
    + +
    + + def + clear_time(d: datetime.datetime) -> datetime.datetime: + + + +
    + +
    232def clear_time(d: datetime) -> datetime:
    +233    return datetime.combine(d.date(), datetime.min.time())
    +
    + + + + +
    +
    + +
    + + def + is_temporal_model(data: Dict) -> bool: + + + +
    + +
    236def is_temporal_model(data: Dict) -> bool:
    +237    if isinstance(data, dict):
    +238        is_date = []
    +239        is_not_date_keys = []
    +240        for key in data:
    +241            if isinstance(key, date):
    +242                is_date.append(True)
    +243            else:
    +244                try:
    +245                    datetime.strptime(key, "%Y-%m-%dT%H:%M:%S")
    +246                    is_date.append(True)
    +247                except (TypeError, ValueError):
    +248                    is_not_date_keys.append(str(key))
    +249                    is_date.append(False)
    +250        if any(is_date):
    +251            if not all(is_date):
    +252                raise InvalidDateException(
    +253                    title="Invalid model",
    +254                    message="Temporal models should only contain date keys. "
    +255                    f"Invalid date(s): {','.join(is_not_date_keys)}",
    +256                )
    +257            return True
    +258    return False
    +
    + + + + +
    +
    + +
    + + def + convert_date_to_datetime(d: Union[datetime.date, datetime.datetime]) -> datetime.datetime: + + + +
    + +
    261def convert_date_to_datetime(d: Union[date, datetime]) -> datetime:
    +262    if isinstance(d, datetime):
    +263        return d
    +264    return datetime(d.year, d.month, d.day, 0, 0, 0)
    +
    + + + + +
    +
    + +
    + + def + default_temporal_model( data: Any, default_start: datetime.datetime) -> Union[Dict[datetime.datetime, Any], NoneType]: + + + +
    + +
    267def default_temporal_model(data: Any, default_start: datetime) -> Optional[Dict[datetime, Any]]:
    +268    """Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00
    +269    :param default_start: the start time to use as default
    +270    :param data:
    +271    :return:
    +272    """
    +273    if data is None:
    +274        return None
    +275    elif is_temporal_model(data):
    +276        # Already a date-dict
    +277        return {convert_date_to_datetime(_date): value for _date, value in data.items()}
    +278    else:
    +279        # Set default start
    +280        return {
    +281            default_start: data,
    +282        }
    +
    + + +

    Ensure the data is a time dependent dict. Also convert all dates to datetime with default time 00:00:00

    + +
    Parameters
    + +
      +
    • default_start: the start time to use as default
    • +
    • data:
    • +
    + +
    Returns
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/units.html b/docs/about/references/api/libecalc/common/units.html new file mode 100644 index 0000000000..e7ca1404e0 --- /dev/null +++ b/docs/about/references/api/libecalc/common/units.html @@ -0,0 +1,1322 @@ + + + + + + + libecalc.common.units API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.units

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from collections import defaultdict
    +  4from enum import Enum
    +  5from functools import singledispatch
    +  6from typing import Callable, Dict, TypeVar, Union
    +  7
    +  8import numpy as np
    +  9from numpy.typing import NDArray
    + 10
    + 11from libecalc.common.logger import logger
    + 12
    + 13TInput = TypeVar("TInput", bound=Union[int, float, NDArray[np.float64], list])
    + 14
    + 15
    + 16def _type_handler(unit_func: Callable[[TInput], TInput]) -> Callable[[TInput], TInput]:
    + 17    """
    + 18    Receives a unit conversion function and registers a list specific override so that the resulting unit
    + 19    function can handle conversion of both lists and single items.
    + 20
    + 21    Args:
    + 22        unit_func: the unit conversion function
    + 23
    + 24    Returns: a unit conversion function that can handle both lists and single items
    + 25
    + 26    """
    + 27
    + 28    @singledispatch
    + 29    def func(i: TInput) -> Callable[[TInput], TInput]:
    + 30        """
    + 31        Apply unit_func to a single item
    + 32        Args:
    + 33            i: the single item that should be converted
    + 34
    + 35        Returns:
    + 36
    + 37        """
    + 38        return unit_func(i)
    + 39
    + 40    @func.register  # type: ignore
    + 41    def _(i: list) -> TInput:
    + 42        """
    + 43        List specific override. The type of the first parameter is used to decide which function to use.
    + 44        Args:
    + 45            i: list of items that should be converted
    + 46
    + 47        Returns:
    + 48
    + 49        """
    + 50        return unit_func(np.asarray(i, dtype=(type(i)))).tolist()  # type: ignore
    + 51
    + 52    return func
    + 53
    + 54
    + 55class UnitConstants:
    + 56    TO_KILO = 1e-3
    + 57    STANDARD_PRESSURE_BARA = 1.01325
    + 58    STANDARD_TEMPERATURE_KELVIN = 288.15
    + 59    STANDARD_TEMPERATURE_CELSIUS = 15.0
    + 60    CELSIUS_TO_KELVIN = 273.15
    + 61    HOURS_PER_DAY = 24.0
    + 62    EARTH_GRAVITY = 9.81
    + 63    GAS_CONSTANT = 8.314472  # m3 * Pa / (K * mol) - SI units
    + 64    WATT_TO_MEGAWATT = 1e-6
    + 65    SECONDS_PER_HOUR = 3600.0
    + 66    SECONDS_IN_A_DAY = 86400.0
    + 67    WATT_PER_MEGAWATT = 1e6
    + 68
    + 69
    + 70class Unit(str, Enum):
    + 71    """A very simple unit registry to convert between common eCalc units."""
    + 72
    + 73    NONE = "N/A"
    + 74    KG_BOE = "kg/BOE"
    + 75    KG_SM3 = "kg/Sm3"
    + 76    KG_M3 = "kg/m3"
    + 77    STANDARD_CUBIC_METER = "Sm3"
    + 78    BOE = "BOE"
    + 79
    + 80    TONS_PER_DAY = "t/d"
    + 81    TONS = "t"
    + 82
    + 83    KILO_PER_DAY = "kg/d"
    + 84    KILO_PER_HOUR = "kg/h"
    + 85    KILO = "kg"
    + 86
    + 87    LITRES_PER_DAY = "L/d"
    + 88    LITRES = "L"
    + 89
    + 90    MEGA_WATT_DAYS = "MWd"
    + 91    GIGA_WATT_HOURS = "GWh"
    + 92    MEGA_WATT = "MW"
    + 93
    + 94    YEAR = "Y"
    + 95    BARA = "bara"
    + 96    KILO_PASCAL = "kPa"
    + 97    PASCAL = "Pa"
    + 98
    + 99    CELSIUS = "C"
    +100    KELVIN = "K"
    +101
    +102    FRACTION = "frac"
    +103    PERCENTAGE = "%"
    +104
    +105    POLYTROPIC_HEAD_KILO_JOULE_PER_KG = "kJ/kg"
    +106    POLYTROPIC_HEAD_JOULE_PER_KG = "J/kg"
    +107    POLYTROPIC_HEAD_METER_LIQUID_COLUMN = "N.m/kg"
    +108
    +109    ACTUAL_VOLUMETRIC_M3_PER_HOUR = "Am3/h"
    +110    STANDARD_CUBIC_METER_PER_DAY = "Sm3/d"
    +111
    +112    SPEED_RPM = "RPM"
    +113
    +114    def __str__(self) -> str:
    +115        return self.value
    +116
    +117    @staticmethod
    +118    def _unit_registry() -> Dict[Unit, Dict[Unit, Callable]]:
    +119        unit_registry: Dict[Unit, Dict[Unit, Callable]] = defaultdict(dict)
    +120
    +121        unit_registry[Unit.TONS_PER_DAY][Unit.KILO_PER_DAY] = lambda a: a * 1000
    +122        unit_registry[Unit.KILO_PER_DAY][Unit.TONS_PER_DAY] = lambda a: a / 1000
    +123
    +124        unit_registry[Unit.KILO][Unit.TONS] = lambda a: a / 1000
    +125        unit_registry[Unit.TONS][Unit.KILO] = lambda a: a * 1000
    +126
    +127        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.LITRES] = lambda a: a * 1000
    +128        unit_registry[Unit.LITRES][Unit.STANDARD_CUBIC_METER] = lambda a: a / 1000
    +129
    +130        # Temperature
    +131        unit_registry[Unit.CELSIUS][Unit.KELVIN] = lambda a: a + 273.15
    +132        unit_registry[Unit.KELVIN][Unit.CELSIUS] = lambda a: a - 273.15
    +133
    +134        # Pressure
    +135        unit_registry[Unit.BARA][Unit.KILO_PASCAL] = lambda a: a * 100
    +136        unit_registry[Unit.KILO_PASCAL][Unit.BARA] = lambda a: a / 100
    +137        unit_registry[Unit.BARA][Unit.PASCAL] = lambda a: a * 1e5
    +138        unit_registry[Unit.PASCAL][Unit.BARA] = lambda a: a / 1e5
    +139
    +140        # User for compressor charts.
    +141        unit_registry[Unit.PERCENTAGE][Unit.FRACTION] = lambda a: a / 100
    +142        unit_registry[Unit.FRACTION][Unit.PERCENTAGE] = lambda a: a * 100
    +143
    +144        # Compressor chart polytropic head
    +145        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = lambda a: a / 1000
    +146        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = lambda a: a * 1000
    +147        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = (
    +148            lambda a: a * UnitConstants.EARTH_GRAVITY
    +149        )
    +150        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = (
    +151            lambda a: (a * UnitConstants.EARTH_GRAVITY) / 1000
    +152        )
    +153        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +154            lambda a: a / UnitConstants.EARTH_GRAVITY
    +155        )
    +156        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +157            lambda a: (a * 1000) / UnitConstants.EARTH_GRAVITY
    +158        )
    +159
    +160        # Other
    +161        unit_registry[Unit.KG_BOE][Unit.KG_SM3] = lambda a: a * 6.29
    +162        unit_registry[Unit.KG_SM3][Unit.KG_BOE] = lambda a: a / 6.29
    +163        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.BOE] = lambda a: a * 6.29
    +164        unit_registry[Unit.BOE][Unit.STANDARD_CUBIC_METER] = lambda a: a / 6.29
    +165        unit_registry[Unit.MEGA_WATT_DAYS][Unit.GIGA_WATT_HOURS] = lambda a: a * 24 / 1000
    +166
    +167        return unit_registry
    +168
    +169    def to(self, unit: Unit) -> Callable:
    +170        if self is unit:
    +171            return lambda a: a
    +172
    +173        try:
    +174            unit_registry = Unit._unit_registry()
    +175            try:
    +176                converter = _type_handler(unit_registry[self][unit])
    +177                if converter is not None:
    +178                    return converter
    +179            except KeyError as ke:
    +180                msg = (
    +181                    f"The conversion between {self.value} to {unit.value}"
    +182                    f" has not been added to unit conversion registry."
    +183                )
    +184                logger.exception(msg)
    +185                raise NotImplementedError(msg) from ke
    +186                # NOTE: Not sure about this one, add conversion manually both ways for now
    +187                # Maybe add all conversions as of base of 10?
    +188                # return lambda inv: inv / unit_registry[unit][self](1)
    +189        except Exception as e:
    +190            msg = (
    +191                f"The conversion between {self.value} to {unit.value}"
    +192                f" has not been added to unit conversion registry.: {e}"
    +193            )
    +194            logger.exception(msg)
    +195            raise NotImplementedError(msg) from e
    +196
    +197    def volume_to_rate(self) -> Unit:
    +198        """
    +199        For a unit describing volume in a period, the corresponding rate unit is returned.
    +200        """
    +201        if self == Unit.STANDARD_CUBIC_METER:
    +202            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +203        elif self == Unit.MEGA_WATT_DAYS:
    +204            return Unit.MEGA_WATT
    +205        elif self == Unit.TONS:
    +206            return Unit.TONS_PER_DAY
    +207        elif self == Unit.KILO:
    +208            return Unit.KILO_PER_DAY
    +209        elif self == Unit.LITRES:
    +210            return Unit.LITRES_PER_DAY
    +211        else:
    +212            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +213
    +214    def rate_to_volume(self) -> Unit:
    +215        """
    +216        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +217        """
    +218        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +219            return Unit.STANDARD_CUBIC_METER
    +220        elif self == Unit.MEGA_WATT:
    +221            return Unit.MEGA_WATT_DAYS
    +222        elif self == Unit.TONS_PER_DAY:
    +223            return Unit.TONS
    +224        elif self == Unit.KILO_PER_DAY:
    +225            return Unit.KILO
    +226        elif self == Unit.LITRES_PER_DAY:
    +227            return Unit.LITRES
    +228        else:
    +229            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +
    +
    + +
    + + class + UnitConstants: + + + +
    + +
    56class UnitConstants:
    +57    TO_KILO = 1e-3
    +58    STANDARD_PRESSURE_BARA = 1.01325
    +59    STANDARD_TEMPERATURE_KELVIN = 288.15
    +60    STANDARD_TEMPERATURE_CELSIUS = 15.0
    +61    CELSIUS_TO_KELVIN = 273.15
    +62    HOURS_PER_DAY = 24.0
    +63    EARTH_GRAVITY = 9.81
    +64    GAS_CONSTANT = 8.314472  # m3 * Pa / (K * mol) - SI units
    +65    WATT_TO_MEGAWATT = 1e-6
    +66    SECONDS_PER_HOUR = 3600.0
    +67    SECONDS_IN_A_DAY = 86400.0
    +68    WATT_PER_MEGAWATT = 1e6
    +
    + + + + +
    +
    + +
    + + class + Unit(builtins.str, enum.Enum): + + + +
    + +
     71class Unit(str, Enum):
    + 72    """A very simple unit registry to convert between common eCalc units."""
    + 73
    + 74    NONE = "N/A"
    + 75    KG_BOE = "kg/BOE"
    + 76    KG_SM3 = "kg/Sm3"
    + 77    KG_M3 = "kg/m3"
    + 78    STANDARD_CUBIC_METER = "Sm3"
    + 79    BOE = "BOE"
    + 80
    + 81    TONS_PER_DAY = "t/d"
    + 82    TONS = "t"
    + 83
    + 84    KILO_PER_DAY = "kg/d"
    + 85    KILO_PER_HOUR = "kg/h"
    + 86    KILO = "kg"
    + 87
    + 88    LITRES_PER_DAY = "L/d"
    + 89    LITRES = "L"
    + 90
    + 91    MEGA_WATT_DAYS = "MWd"
    + 92    GIGA_WATT_HOURS = "GWh"
    + 93    MEGA_WATT = "MW"
    + 94
    + 95    YEAR = "Y"
    + 96    BARA = "bara"
    + 97    KILO_PASCAL = "kPa"
    + 98    PASCAL = "Pa"
    + 99
    +100    CELSIUS = "C"
    +101    KELVIN = "K"
    +102
    +103    FRACTION = "frac"
    +104    PERCENTAGE = "%"
    +105
    +106    POLYTROPIC_HEAD_KILO_JOULE_PER_KG = "kJ/kg"
    +107    POLYTROPIC_HEAD_JOULE_PER_KG = "J/kg"
    +108    POLYTROPIC_HEAD_METER_LIQUID_COLUMN = "N.m/kg"
    +109
    +110    ACTUAL_VOLUMETRIC_M3_PER_HOUR = "Am3/h"
    +111    STANDARD_CUBIC_METER_PER_DAY = "Sm3/d"
    +112
    +113    SPEED_RPM = "RPM"
    +114
    +115    def __str__(self) -> str:
    +116        return self.value
    +117
    +118    @staticmethod
    +119    def _unit_registry() -> Dict[Unit, Dict[Unit, Callable]]:
    +120        unit_registry: Dict[Unit, Dict[Unit, Callable]] = defaultdict(dict)
    +121
    +122        unit_registry[Unit.TONS_PER_DAY][Unit.KILO_PER_DAY] = lambda a: a * 1000
    +123        unit_registry[Unit.KILO_PER_DAY][Unit.TONS_PER_DAY] = lambda a: a / 1000
    +124
    +125        unit_registry[Unit.KILO][Unit.TONS] = lambda a: a / 1000
    +126        unit_registry[Unit.TONS][Unit.KILO] = lambda a: a * 1000
    +127
    +128        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.LITRES] = lambda a: a * 1000
    +129        unit_registry[Unit.LITRES][Unit.STANDARD_CUBIC_METER] = lambda a: a / 1000
    +130
    +131        # Temperature
    +132        unit_registry[Unit.CELSIUS][Unit.KELVIN] = lambda a: a + 273.15
    +133        unit_registry[Unit.KELVIN][Unit.CELSIUS] = lambda a: a - 273.15
    +134
    +135        # Pressure
    +136        unit_registry[Unit.BARA][Unit.KILO_PASCAL] = lambda a: a * 100
    +137        unit_registry[Unit.KILO_PASCAL][Unit.BARA] = lambda a: a / 100
    +138        unit_registry[Unit.BARA][Unit.PASCAL] = lambda a: a * 1e5
    +139        unit_registry[Unit.PASCAL][Unit.BARA] = lambda a: a / 1e5
    +140
    +141        # User for compressor charts.
    +142        unit_registry[Unit.PERCENTAGE][Unit.FRACTION] = lambda a: a / 100
    +143        unit_registry[Unit.FRACTION][Unit.PERCENTAGE] = lambda a: a * 100
    +144
    +145        # Compressor chart polytropic head
    +146        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = lambda a: a / 1000
    +147        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = lambda a: a * 1000
    +148        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_JOULE_PER_KG] = (
    +149            lambda a: a * UnitConstants.EARTH_GRAVITY
    +150        )
    +151        unit_registry[Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN][Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG] = (
    +152            lambda a: (a * UnitConstants.EARTH_GRAVITY) / 1000
    +153        )
    +154        unit_registry[Unit.POLYTROPIC_HEAD_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +155            lambda a: a / UnitConstants.EARTH_GRAVITY
    +156        )
    +157        unit_registry[Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG][Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN] = (
    +158            lambda a: (a * 1000) / UnitConstants.EARTH_GRAVITY
    +159        )
    +160
    +161        # Other
    +162        unit_registry[Unit.KG_BOE][Unit.KG_SM3] = lambda a: a * 6.29
    +163        unit_registry[Unit.KG_SM3][Unit.KG_BOE] = lambda a: a / 6.29
    +164        unit_registry[Unit.STANDARD_CUBIC_METER][Unit.BOE] = lambda a: a * 6.29
    +165        unit_registry[Unit.BOE][Unit.STANDARD_CUBIC_METER] = lambda a: a / 6.29
    +166        unit_registry[Unit.MEGA_WATT_DAYS][Unit.GIGA_WATT_HOURS] = lambda a: a * 24 / 1000
    +167
    +168        return unit_registry
    +169
    +170    def to(self, unit: Unit) -> Callable:
    +171        if self is unit:
    +172            return lambda a: a
    +173
    +174        try:
    +175            unit_registry = Unit._unit_registry()
    +176            try:
    +177                converter = _type_handler(unit_registry[self][unit])
    +178                if converter is not None:
    +179                    return converter
    +180            except KeyError as ke:
    +181                msg = (
    +182                    f"The conversion between {self.value} to {unit.value}"
    +183                    f" has not been added to unit conversion registry."
    +184                )
    +185                logger.exception(msg)
    +186                raise NotImplementedError(msg) from ke
    +187                # NOTE: Not sure about this one, add conversion manually both ways for now
    +188                # Maybe add all conversions as of base of 10?
    +189                # return lambda inv: inv / unit_registry[unit][self](1)
    +190        except Exception as e:
    +191            msg = (
    +192                f"The conversion between {self.value} to {unit.value}"
    +193                f" has not been added to unit conversion registry.: {e}"
    +194            )
    +195            logger.exception(msg)
    +196            raise NotImplementedError(msg) from e
    +197
    +198    def volume_to_rate(self) -> Unit:
    +199        """
    +200        For a unit describing volume in a period, the corresponding rate unit is returned.
    +201        """
    +202        if self == Unit.STANDARD_CUBIC_METER:
    +203            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +204        elif self == Unit.MEGA_WATT_DAYS:
    +205            return Unit.MEGA_WATT
    +206        elif self == Unit.TONS:
    +207            return Unit.TONS_PER_DAY
    +208        elif self == Unit.KILO:
    +209            return Unit.KILO_PER_DAY
    +210        elif self == Unit.LITRES:
    +211            return Unit.LITRES_PER_DAY
    +212        else:
    +213            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +214
    +215    def rate_to_volume(self) -> Unit:
    +216        """
    +217        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +218        """
    +219        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +220            return Unit.STANDARD_CUBIC_METER
    +221        elif self == Unit.MEGA_WATT:
    +222            return Unit.MEGA_WATT_DAYS
    +223        elif self == Unit.TONS_PER_DAY:
    +224            return Unit.TONS
    +225        elif self == Unit.KILO_PER_DAY:
    +226            return Unit.KILO
    +227        elif self == Unit.LITRES_PER_DAY:
    +228            return Unit.LITRES
    +229        else:
    +230            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +

    A very simple unit registry to convert between common eCalc units.

    +
    + + +
    +
    + NONE = +<Unit.NONE: 'N/A'> + + +
    + + + + +
    +
    +
    + KG_BOE = +<Unit.KG_BOE: 'kg/BOE'> + + +
    + + + + +
    +
    +
    + KG_SM3 = +<Unit.KG_SM3: 'kg/Sm3'> + + +
    + + + + +
    +
    +
    + KG_M3 = +<Unit.KG_M3: 'kg/m3'> + + +
    + + + + +
    +
    +
    + STANDARD_CUBIC_METER = +<Unit.STANDARD_CUBIC_METER: 'Sm3'> + + +
    + + + + +
    +
    +
    + BOE = +<Unit.BOE: 'BOE'> + + +
    + + + + +
    +
    +
    + TONS_PER_DAY = +<Unit.TONS_PER_DAY: 't/d'> + + +
    + + + + +
    +
    +
    + TONS = +<Unit.TONS: 't'> + + +
    + + + + +
    +
    +
    + KILO_PER_DAY = +<Unit.KILO_PER_DAY: 'kg/d'> + + +
    + + + + +
    +
    +
    + KILO_PER_HOUR = +<Unit.KILO_PER_HOUR: 'kg/h'> + + +
    + + + + +
    +
    +
    + KILO = +<Unit.KILO: 'kg'> + + +
    + + + + +
    +
    +
    + LITRES_PER_DAY = +<Unit.LITRES_PER_DAY: 'L/d'> + + +
    + + + + +
    +
    +
    + LITRES = +<Unit.LITRES: 'L'> + + +
    + + + + +
    +
    +
    + MEGA_WATT_DAYS = +<Unit.MEGA_WATT_DAYS: 'MWd'> + + +
    + + + + +
    +
    +
    + GIGA_WATT_HOURS = +<Unit.GIGA_WATT_HOURS: 'GWh'> + + +
    + + + + +
    +
    +
    + MEGA_WATT = +<Unit.MEGA_WATT: 'MW'> + + +
    + + + + +
    +
    +
    + YEAR = +<Unit.YEAR: 'Y'> + + +
    + + + + +
    +
    +
    + BARA = +<Unit.BARA: 'bara'> + + +
    + + + + +
    +
    +
    + KILO_PASCAL = +<Unit.KILO_PASCAL: 'kPa'> + + +
    + + + + +
    +
    +
    + PASCAL = +<Unit.PASCAL: 'Pa'> + + +
    + + + + +
    +
    +
    + CELSIUS = +<Unit.CELSIUS: 'C'> + + +
    + + + + +
    +
    +
    + KELVIN = +<Unit.KELVIN: 'K'> + + +
    + + + + +
    +
    +
    + FRACTION = +<Unit.FRACTION: 'frac'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<Unit.PERCENTAGE: '%'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_KILO_JOULE_PER_KG = +<Unit.POLYTROPIC_HEAD_KILO_JOULE_PER_KG: 'kJ/kg'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_JOULE_PER_KG = +<Unit.POLYTROPIC_HEAD_JOULE_PER_KG: 'J/kg'> + + +
    + + + + +
    +
    +
    + POLYTROPIC_HEAD_METER_LIQUID_COLUMN = +<Unit.POLYTROPIC_HEAD_METER_LIQUID_COLUMN: 'N.m/kg'> + + +
    + + + + +
    +
    +
    + ACTUAL_VOLUMETRIC_M3_PER_HOUR = +<Unit.ACTUAL_VOLUMETRIC_M3_PER_HOUR: 'Am3/h'> + + +
    + + + + +
    +
    +
    + STANDARD_CUBIC_METER_PER_DAY = +<Unit.STANDARD_CUBIC_METER_PER_DAY: 'Sm3/d'> + + +
    + + + + +
    +
    +
    + SPEED_RPM = +<Unit.SPEED_RPM: 'RPM'> + + +
    + + + + +
    +
    + +
    + + def + to(self, unit: libecalc.common.units.Unit) -> Callable: + + + +
    + +
    170    def to(self, unit: Unit) -> Callable:
    +171        if self is unit:
    +172            return lambda a: a
    +173
    +174        try:
    +175            unit_registry = Unit._unit_registry()
    +176            try:
    +177                converter = _type_handler(unit_registry[self][unit])
    +178                if converter is not None:
    +179                    return converter
    +180            except KeyError as ke:
    +181                msg = (
    +182                    f"The conversion between {self.value} to {unit.value}"
    +183                    f" has not been added to unit conversion registry."
    +184                )
    +185                logger.exception(msg)
    +186                raise NotImplementedError(msg) from ke
    +187                # NOTE: Not sure about this one, add conversion manually both ways for now
    +188                # Maybe add all conversions as of base of 10?
    +189                # return lambda inv: inv / unit_registry[unit][self](1)
    +190        except Exception as e:
    +191            msg = (
    +192                f"The conversion between {self.value} to {unit.value}"
    +193                f" has not been added to unit conversion registry.: {e}"
    +194            )
    +195            logger.exception(msg)
    +196            raise NotImplementedError(msg) from e
    +
    + + + + +
    +
    + +
    + + def + volume_to_rate(self) -> libecalc.common.units.Unit: + + + +
    + +
    198    def volume_to_rate(self) -> Unit:
    +199        """
    +200        For a unit describing volume in a period, the corresponding rate unit is returned.
    +201        """
    +202        if self == Unit.STANDARD_CUBIC_METER:
    +203            return Unit.STANDARD_CUBIC_METER_PER_DAY
    +204        elif self == Unit.MEGA_WATT_DAYS:
    +205            return Unit.MEGA_WATT
    +206        elif self == Unit.TONS:
    +207            return Unit.TONS_PER_DAY
    +208        elif self == Unit.KILO:
    +209            return Unit.KILO_PER_DAY
    +210        elif self == Unit.LITRES:
    +211            return Unit.LITRES_PER_DAY
    +212        else:
    +213            raise NotImplementedError(f"Unknown unit for cumulative calculation '{self}'")
    +
    + + +

    For a unit describing volume in a period, the corresponding rate unit is returned.

    +
    + + +
    +
    + +
    + + def + rate_to_volume(self) -> libecalc.common.units.Unit: + + + +
    + +
    215    def rate_to_volume(self) -> Unit:
    +216        """
    +217        For a unit describing rates, the corresponding unit for volume in a period is returned.
    +218        """
    +219        if self == Unit.STANDARD_CUBIC_METER_PER_DAY:
    +220            return Unit.STANDARD_CUBIC_METER
    +221        elif self == Unit.MEGA_WATT:
    +222            return Unit.MEGA_WATT_DAYS
    +223        elif self == Unit.TONS_PER_DAY:
    +224            return Unit.TONS
    +225        elif self == Unit.KILO_PER_DAY:
    +226            return Unit.KILO
    +227        elif self == Unit.LITRES_PER_DAY:
    +228            return Unit.LITRES
    +229        else:
    +230            raise NotImplementedError(f"Unknown unit for rate calculation '{self}'")
    +
    + + +

    For a unit describing rates, the corresponding unit for volume in a period is returned.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/common/version.html b/docs/about/references/api/libecalc/common/version.html new file mode 100644 index 0000000000..3e00101c83 --- /dev/null +++ b/docs/about/references/api/libecalc/common/version.html @@ -0,0 +1,516 @@ + + + + + + + libecalc.common.version API documentation + + + + + + + + + +
    +
    +

    +libecalc.common.version

    + + + + + + +
     1import re
    + 2from typing import Optional
    + 3
    + 4from libecalc.dto.base import EcalcBaseModel
    + 5
    + 6VERSION_FORMAT = r"^(\d+)(\.\d+)?(\.\d+)?$"
    + 7
    + 8
    + 9class Version(EcalcBaseModel):
    +10    major: int = 0
    +11    minor: int = 0
    +12    patch: int = 0
    +13
    +14    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +15        super().__init__()
    +16        self.major = major
    +17        self.minor = minor
    +18        self.patch = patch
    +19
    +20    @classmethod
    +21    def from_string(cls, version_string: Optional[str]) -> "Version":
    +22        """From any version that has either major, minor or patch in string, get the full
    +23        version with major, minor and patch set.
    +24
    +25        If null, empty or invalid string, return Version 0.0.0
    +26
    +27        :param version_string:
    +28        :return:
    +29        """
    +30        if version_string is None:
    +31            return Version()
    +32
    +33        pattern = re.compile(VERSION_FORMAT)
    +34        match = pattern.match(version_string)
    +35
    +36        if match is None:
    +37            return Version()
    +38
    +39        if len(match.groups()):
    +40            # NOTE! Group 0 is full (matched) expression
    +41            major = int(match[1]) if match[1] is not None else 0
    +42            minor = int(match[2][1:]) if match[2] is not None else 0
    +43            patch = int(match[3][1:]) if match[3] is not None else 0
    +44            return cls(major=major, minor=minor, patch=patch)
    +45        else:
    +46            # ignore wrong format for now, assume not set
    +47            return Version()
    +48
    +49    def __str__(self) -> str:
    +50        return f"{self.major}.{self.minor}.{self.patch}"
    +51
    +52    def __repr__(self) -> str:
    +53        return f"Major: {self.major}\nMinor: {self.minor}\nPatch: {self.patch}"
    +
    + + +
    +
    + +
    + + class + Version(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    10class Version(EcalcBaseModel):
    +11    major: int = 0
    +12    minor: int = 0
    +13    patch: int = 0
    +14
    +15    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +16        super().__init__()
    +17        self.major = major
    +18        self.minor = minor
    +19        self.patch = patch
    +20
    +21    @classmethod
    +22    def from_string(cls, version_string: Optional[str]) -> "Version":
    +23        """From any version that has either major, minor or patch in string, get the full
    +24        version with major, minor and patch set.
    +25
    +26        If null, empty or invalid string, return Version 0.0.0
    +27
    +28        :param version_string:
    +29        :return:
    +30        """
    +31        if version_string is None:
    +32            return Version()
    +33
    +34        pattern = re.compile(VERSION_FORMAT)
    +35        match = pattern.match(version_string)
    +36
    +37        if match is None:
    +38            return Version()
    +39
    +40        if len(match.groups()):
    +41            # NOTE! Group 0 is full (matched) expression
    +42            major = int(match[1]) if match[1] is not None else 0
    +43            minor = int(match[2][1:]) if match[2] is not None else 0
    +44            patch = int(match[3][1:]) if match[3] is not None else 0
    +45            return cls(major=major, minor=minor, patch=patch)
    +46        else:
    +47            # ignore wrong format for now, assume not set
    +48            return Version()
    +49
    +50    def __str__(self) -> str:
    +51        return f"{self.major}.{self.minor}.{self.patch}"
    +52
    +53    def __repr__(self) -> str:
    +54        return f"Major: {self.major}\nMinor: {self.minor}\nPatch: {self.patch}"
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    + + Version(major: int = 0, minor: int = 0, patch: int = 0) + + + +
    + +
    15    def __init__(self, major: int = 0, minor: int = 0, patch: int = 0):
    +16        super().__init__()
    +17        self.major = major
    +18        self.minor = minor
    +19        self.patch = patch
    +
    + + +

    Create a new model by parsing and validating input data from keyword arguments.

    + +

    Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be +validated to form a valid model.

    + +

    self is explicitly positional-only to allow self as a field name.

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + from_string( cls, version_string: Union[str, NoneType]) -> libecalc.common.version.Version: + + + +
    + +
    21    @classmethod
    +22    def from_string(cls, version_string: Optional[str]) -> "Version":
    +23        """From any version that has either major, minor or patch in string, get the full
    +24        version with major, minor and patch set.
    +25
    +26        If null, empty or invalid string, return Version 0.0.0
    +27
    +28        :param version_string:
    +29        :return:
    +30        """
    +31        if version_string is None:
    +32            return Version()
    +33
    +34        pattern = re.compile(VERSION_FORMAT)
    +35        match = pattern.match(version_string)
    +36
    +37        if match is None:
    +38            return Version()
    +39
    +40        if len(match.groups()):
    +41            # NOTE! Group 0 is full (matched) expression
    +42            major = int(match[1]) if match[1] is not None else 0
    +43            minor = int(match[2][1:]) if match[2] is not None else 0
    +44            patch = int(match[3][1:]) if match[3] is not None else 0
    +45            return cls(major=major, minor=minor, patch=patch)
    +46        else:
    +47            # ignore wrong format for now, assume not set
    +48            return Version()
    +
    + + +

    From any version that has either major, minor or patch in string, get the full +version with major, minor and patch set.

    + +

    If null, empty or invalid string, return Version 0.0.0

    + +
    Parameters
    + +
      +
    • version_string:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/domain.html b/docs/about/references/api/libecalc/domain.html new file mode 100644 index 0000000000..f2d56c2758 --- /dev/null +++ b/docs/about/references/api/libecalc/domain.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.domain API documentation + + + + + + + + + +
    +
    +

    +libecalc.domain

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/domain/stream_conditions.html b/docs/about/references/api/libecalc/domain/stream_conditions.html new file mode 100644 index 0000000000..78e1c73fec --- /dev/null +++ b/docs/about/references/api/libecalc/domain/stream_conditions.html @@ -0,0 +1,740 @@ + + + + + + + libecalc.domain.stream_conditions API documentation + + + + + + + + + +
    +
    +

    +libecalc.domain.stream_conditions

    + +

    Point in time stream conditions

    +
    + + + + + +
      1"""
    +  2Point in time stream conditions
    +  3"""
    +  4from __future__ import annotations
    +  5
    +  6import dataclasses
    +  7import operator
    +  8from dataclasses import dataclass
    +  9from datetime import datetime
    + 10from functools import reduce
    + 11from typing import Dict, List
    + 12
    + 13from libecalc.common.string.string_utils import generate_id
    + 14from libecalc.common.units import Unit
    + 15
    + 16
    + 17@dataclass
    + 18class Pressure:
    + 19    value: float
    + 20    unit: Unit
    + 21
    + 22    def __lt__(self, other: Pressure) -> bool:
    + 23        if self.unit != other.unit:
    + 24            raise ValueError("Unit mismatch")
    + 25
    + 26        return self.value < other.value
    + 27
    + 28
    + 29@dataclass
    + 30class Rate:
    + 31    value: float
    + 32    unit: Unit
    + 33
    + 34    def __add__(self, other) -> Rate:
    + 35        if self.unit != other.unit:
    + 36            raise ValueError("Unit mismatch")
    + 37
    + 38        return Rate(
    + 39            value=self.value + other.value,
    + 40            unit=self.unit,
    + 41        )
    + 42
    + 43
    + 44@dataclass
    + 45class Density:
    + 46    value: float
    + 47    unit: Unit
    + 48
    + 49
    + 50@dataclass
    + 51class Temperature:
    + 52    value: float
    + 53    unit: Unit
    + 54
    + 55
    + 56@dataclass
    + 57class StreamConditions:
    + 58    id: str
    + 59    name: str
    + 60    timestep: datetime
    + 61    rate: Rate
    + 62    pressure: Pressure
    + 63    density: Density = None
    + 64    temperature: Temperature = None
    + 65
    + 66    def mix(self, *other_stream_conditions: StreamConditions) -> StreamConditions:
    + 67        streams = [self, *other_stream_conditions]
    + 68        if any(stream.rate is None for stream in streams):
    + 69            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 70            raise ValueError(
    + 71                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 72            )
    + 73
    + 74        if any(stream.pressure is None for stream in streams):
    + 75            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 76            raise ValueError(
    + 77                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 78            )
    + 79
    + 80        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 81        if any(stream.pressure < target_pressure for stream in other_stream_conditions):
    + 82            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 83
    + 84        target_temperature = self.temperature  # Assuming 'self' decides the target temperature
    + 85        if target_temperature is not None and any(
    + 86            stream.temperature == target_temperature for stream in other_stream_conditions
    + 87        ):
    + 88            raise ValueError("Changing temperature when mixing streams. That should not happen.")
    + 89
    + 90        return StreamConditions(
    + 91            id=generate_id(*[stream.id for stream in streams]),
    + 92            name=f"{'-'.join(stream.name for stream in streams)}",
    + 93            timestep=self.timestep,
    + 94            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 95            pressure=target_pressure,
    + 96            density=self.density,  # TODO: Check that they are equal? Or handle it?
    + 97            temperature=self.temperature,
    + 98        )
    + 99
    +100    def copy(self, update: Dict = None):
    +101        if update is None:
    +102            update = {}
    +103
    +104        return dataclasses.replace(self, **update)
    +105
    +106    @classmethod
    +107    def mix_all(cls, streams: List[StreamConditions]) -> StreamConditions:
    +108        if len(streams) == 0:
    +109            raise ValueError("No streams to mix")
    +110        if len(streams) == 1:
    +111            return streams[0].copy()
    +112
    +113        first, *rest = streams
    +114        return first.copy().mix(*rest)
    +
    + + +
    +
    + +
    + + class + Pressure: + + + +
    + +
    19class Pressure:
    +20    value: float
    +21    unit: Unit
    +22
    +23    def __lt__(self, other: Pressure) -> bool:
    +24        if self.unit != other.unit:
    +25            raise ValueError("Unit mismatch")
    +26
    +27        return self.value < other.value
    +
    + + + + +
    +
    + + Pressure(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + Rate: + + + +
    + +
    31class Rate:
    +32    value: float
    +33    unit: Unit
    +34
    +35    def __add__(self, other) -> Rate:
    +36        if self.unit != other.unit:
    +37            raise ValueError("Unit mismatch")
    +38
    +39        return Rate(
    +40            value=self.value + other.value,
    +41            unit=self.unit,
    +42        )
    +
    + + + + +
    +
    + + Rate(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + Density: + + + +
    + +
    46class Density:
    +47    value: float
    +48    unit: Unit
    +
    + + + + +
    +
    + + Density(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + Temperature: + + + +
    + +
    52class Temperature:
    +53    value: float
    +54    unit: Unit
    +
    + + + + +
    +
    + + Temperature(value: float, unit: libecalc.common.units.Unit) + + +
    + + + + +
    +
    +
    + +
    + + class + StreamConditions: + + + +
    + +
     58class StreamConditions:
    + 59    id: str
    + 60    name: str
    + 61    timestep: datetime
    + 62    rate: Rate
    + 63    pressure: Pressure
    + 64    density: Density = None
    + 65    temperature: Temperature = None
    + 66
    + 67    def mix(self, *other_stream_conditions: StreamConditions) -> StreamConditions:
    + 68        streams = [self, *other_stream_conditions]
    + 69        if any(stream.rate is None for stream in streams):
    + 70            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    + 71            raise ValueError(
    + 72                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    + 73            )
    + 74
    + 75        if any(stream.pressure is None for stream in streams):
    + 76            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    + 77            raise ValueError(
    + 78                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    + 79            )
    + 80
    + 81        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    + 82        if any(stream.pressure < target_pressure for stream in other_stream_conditions):
    + 83            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    + 84
    + 85        target_temperature = self.temperature  # Assuming 'self' decides the target temperature
    + 86        if target_temperature is not None and any(
    + 87            stream.temperature == target_temperature for stream in other_stream_conditions
    + 88        ):
    + 89            raise ValueError("Changing temperature when mixing streams. That should not happen.")
    + 90
    + 91        return StreamConditions(
    + 92            id=generate_id(*[stream.id for stream in streams]),
    + 93            name=f"{'-'.join(stream.name for stream in streams)}",
    + 94            timestep=self.timestep,
    + 95            rate=reduce(operator.add, [stream.rate for stream in streams]),
    + 96            pressure=target_pressure,
    + 97            density=self.density,  # TODO: Check that they are equal? Or handle it?
    + 98            temperature=self.temperature,
    + 99        )
    +100
    +101    def copy(self, update: Dict = None):
    +102        if update is None:
    +103            update = {}
    +104
    +105        return dataclasses.replace(self, **update)
    +106
    +107    @classmethod
    +108    def mix_all(cls, streams: List[StreamConditions]) -> StreamConditions:
    +109        if len(streams) == 0:
    +110            raise ValueError("No streams to mix")
    +111        if len(streams) == 1:
    +112            return streams[0].copy()
    +113
    +114        first, *rest = streams
    +115        return first.copy().mix(*rest)
    +
    + + + + +
    +
    + + StreamConditions( id: str, name: str, timestep: datetime.datetime, rate: libecalc.domain.stream_conditions.Rate, pressure: libecalc.domain.stream_conditions.Pressure, density: libecalc.domain.stream_conditions.Density = None, temperature: libecalc.domain.stream_conditions.Temperature = None) + + +
    + + + + +
    +
    + +
    + + def + mix( self, *other_stream_conditions: libecalc.domain.stream_conditions.StreamConditions) -> libecalc.domain.stream_conditions.StreamConditions: + + + +
    + +
    67    def mix(self, *other_stream_conditions: StreamConditions) -> StreamConditions:
    +68        streams = [self, *other_stream_conditions]
    +69        if any(stream.rate is None for stream in streams):
    +70            streams_with_undefined_rate = [stream.name for stream in streams if stream.rate is None]
    +71            raise ValueError(
    +72                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_rate)} does not have a rate."
    +73            )
    +74
    +75        if any(stream.pressure is None for stream in streams):
    +76            streams_with_undefined_pressure = [stream.name for stream in streams if stream.pressure is None]
    +77            raise ValueError(
    +78                f"Mixing streams {', '.join(stream.name for stream in streams)} where {', '.join(streams_with_undefined_pressure)} does not have a pressure."
    +79            )
    +80
    +81        target_pressure = self.pressure  # Assuming 'self' decides the target pressure
    +82        if any(stream.pressure < target_pressure for stream in other_stream_conditions):
    +83            raise ValueError("Increasing pressure when mixing streams. That should not happen.")
    +84
    +85        target_temperature = self.temperature  # Assuming 'self' decides the target temperature
    +86        if target_temperature is not None and any(
    +87            stream.temperature == target_temperature for stream in other_stream_conditions
    +88        ):
    +89            raise ValueError("Changing temperature when mixing streams. That should not happen.")
    +90
    +91        return StreamConditions(
    +92            id=generate_id(*[stream.id for stream in streams]),
    +93            name=f"{'-'.join(stream.name for stream in streams)}",
    +94            timestep=self.timestep,
    +95            rate=reduce(operator.add, [stream.rate for stream in streams]),
    +96            pressure=target_pressure,
    +97            density=self.density,  # TODO: Check that they are equal? Or handle it?
    +98            temperature=self.temperature,
    +99        )
    +
    + + + + +
    +
    + +
    + + def + copy(self, update: Dict = None): + + + +
    + +
    101    def copy(self, update: Dict = None):
    +102        if update is None:
    +103            update = {}
    +104
    +105        return dataclasses.replace(self, **update)
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + mix_all( cls, streams: List[libecalc.domain.stream_conditions.StreamConditions]) -> libecalc.domain.stream_conditions.StreamConditions: + + + +
    + +
    107    @classmethod
    +108    def mix_all(cls, streams: List[StreamConditions]) -> StreamConditions:
    +109        if len(streams) == 0:
    +110            raise ValueError("No streams to mix")
    +111        if len(streams) == 1:
    +112            return streams[0].copy()
    +113
    +114        first, *rest = streams
    +115        return first.copy().mix(*rest)
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto.html b/docs/about/references/api/libecalc/dto.html new file mode 100644 index 0000000000..26d4bd6d5a --- /dev/null +++ b/docs/about/references/api/libecalc/dto.html @@ -0,0 +1,310 @@ + + + + + + + libecalc.dto API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto

    + + + + + + +
     1from libecalc.dto.components import (
    + 2    Asset,
    + 3    BaseConsumer,
    + 4    ElectricityConsumer,
    + 5    FuelConsumer,
    + 6    GeneratorSet,
    + 7    Installation,
    + 8)
    + 9from libecalc.dto.emission import Emission
    +10from libecalc.dto.models import (
    +11    ChartCurve,
    +12    CompressorChart,
    +13    CompressorConsumerFunction,
    +14    CompressorModel,
    +15    CompressorSampled,
    +16    CompressorSystemCompressor,
    +17    CompressorSystemConsumerFunction,
    +18    CompressorSystemOperationalSetting,
    +19    CompressorTrainSimplifiedWithKnownStages,
    +20    CompressorTrainSimplifiedWithUnknownStages,
    +21    CompressorWithTurbine,
    +22    ConsumerFunction,
    +23    DirectConsumerFunction,
    +24    ElectricEnergyUsageModel,
    +25    EnergyModel,
    +26    EnergyModelSampled,
    +27    FluidComposition,
    +28    FluidModel,
    +29    FluidStream,
    +30    FuelEnergyUsageModel,
    +31    GeneratorSetSampled,
    +32    GenericChartFromDesignPoint,
    +33    GenericChartFromInput,
    +34    PumpConsumerFunction,
    +35    PumpModel,
    +36    PumpSystemConsumerFunction,
    +37    PumpSystemOperationalSetting,
    +38    PumpSystemPump,
    +39    SingleSpeedChart,
    +40    SystemOperationalSetting,
    +41    TabulatedConsumerFunction,
    +42    TabulatedData,
    +43    Turbine,
    +44    Variables,
    +45    VariableSpeedChart,
    +46)
    +47from libecalc.dto.models.compressor import (
    +48    CompressorStage,
    +49    InterstagePressureControl,
    +50    MultipleStreamsAndPressureStream,
    +51    MultipleStreamsCompressorStage,
    +52    SingleSpeedCompressorTrain,
    +53    VariableSpeedCompressorTrain,
    +54    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +55)
    +56from libecalc.dto.result_options import ResultOptions
    +57from libecalc.dto.types import FuelType, TimeSeriesType
    +58from libecalc.dto.variables import VariablesMap
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/base.html b/docs/about/references/api/libecalc/dto/base.html new file mode 100644 index 0000000000..de10884320 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/base.html @@ -0,0 +1,1396 @@ + + + + + + + libecalc.dto.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.base

    + + + + + + +
     1from abc import ABC, abstractmethod
    + 2from enum import Enum
    + 3
    + 4from pydantic import BaseModel, ConfigDict
    + 5
    + 6from libecalc.common.string.string_utils import to_camel_case
    + 7
    + 8
    + 9class ComponentType(str, Enum):
    +10    ASSET = "ASSET"
    +11    INSTALLATION = "INSTALLATION"
    +12    GENERATOR_SET = "GENERATOR_SET"
    +13
    +14    CONSUMER_SYSTEM_V2 = "CONSUMER_SYSTEM@v2"
    +15    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +16    PUMP_SYSTEM = "PUMP_SYSTEM"
    +17    COMPRESSOR = "COMPRESSOR"
    +18    COMPRESSOR_V2 = "COMPRESSOR@v2"
    +19    PUMP = "PUMP"
    +20    PUMP_V2 = "PUMP@v2"
    +21    GENERIC = "GENERIC"
    +22    # TURBINE = "TURBINE"
    +23    VENTING_EMITTER = "VENTING_EMITTER"
    +24    TRAIN_V2 = "TRAIN@V2"
    +25
    +26    def __lt__(self, other: "ComponentType"):  # type: ignore[override]
    +27        if self == other:
    +28            return False
    +29        # the following works because the order of elements in the definition is preserved
    +30        for elem in ComponentType:
    +31            if self == elem:
    +32                return True
    +33            elif other == elem:
    +34                return False
    +35
    +36
    +37class ConsumerUserDefinedCategoryType(str, Enum):
    +38    """
    +39    Consumer category
    +40    """
    +41
    +42    BASE_LOAD = "BASE-LOAD"
    +43    COLD_VENTING_FUGITIVE = "COLD-VENTING-FUGITIVE"
    +44    COMPRESSOR = "COMPRESSOR"
    +45    FIXED_PRODUCTION_LOAD = "FIXED-PRODUCTION-LOAD"
    +46    FLARE = "FLARE"
    +47    MISCELLANEOUS = "MISCELLANEOUS"
    +48    PUMP = "PUMP"
    +49    GAS_DRIVEN_COMPRESSOR = "GAS-DRIVEN-COMPRESSOR"
    +50    TURBINE_GENERATOR = "TURBINE-GENERATOR"
    +51    POWER_FROM_SHORE = "POWER-FROM-SHORE"
    +52    OFFSHORE_WIND = "OFFSHORE-WIND"
    +53    LOADING = "LOADING"
    +54    STORAGE = "STORAGE"
    +55    STEAM_TURBINE_GENERATOR = "STEAM-TURBINE-GENERATOR"
    +56    BOILER = "BOILER"
    +57    HEATER = "HEATER"
    +58
    +59
    +60class InstallationUserDefinedCategoryType(str, Enum):
    +61    """
    +62    Installation category
    +63    """
    +64
    +65    FIXED = "FIXED"
    +66    MOBILE = "MOBILE"
    +67
    +68
    +69class FuelTypeUserDefinedCategoryType(str, Enum):
    +70    FUEL_GAS = "FUEL-GAS"
    +71    DIESEL = "DIESEL"
    +72
    +73
    +74class EcalcBaseModel(BaseModel):
    +75    model_config = ConfigDict(
    +76        extra="forbid",
    +77        alias_generator=to_camel_case,
    +78        populate_by_name=True,
    +79    )
    +80
    +81
    +82class Component(EcalcBaseModel, ABC):
    +83    component_type: ComponentType
    +84
    +85    @property
    +86    @abstractmethod
    +87    def id(self) -> str:
    +88        ...
    +
    + + +
    +
    + +
    + + class + ComponentType(builtins.str, enum.Enum): + + + +
    + +
    10class ComponentType(str, Enum):
    +11    ASSET = "ASSET"
    +12    INSTALLATION = "INSTALLATION"
    +13    GENERATOR_SET = "GENERATOR_SET"
    +14
    +15    CONSUMER_SYSTEM_V2 = "CONSUMER_SYSTEM@v2"
    +16    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +17    PUMP_SYSTEM = "PUMP_SYSTEM"
    +18    COMPRESSOR = "COMPRESSOR"
    +19    COMPRESSOR_V2 = "COMPRESSOR@v2"
    +20    PUMP = "PUMP"
    +21    PUMP_V2 = "PUMP@v2"
    +22    GENERIC = "GENERIC"
    +23    # TURBINE = "TURBINE"
    +24    VENTING_EMITTER = "VENTING_EMITTER"
    +25    TRAIN_V2 = "TRAIN@V2"
    +26
    +27    def __lt__(self, other: "ComponentType"):  # type: ignore[override]
    +28        if self == other:
    +29            return False
    +30        # the following works because the order of elements in the definition is preserved
    +31        for elem in ComponentType:
    +32            if self == elem:
    +33                return True
    +34            elif other == elem:
    +35                return False
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + ASSET = +<ComponentType.ASSET: 'ASSET'> + + +
    + + + + +
    +
    +
    + INSTALLATION = +<ComponentType.INSTALLATION: 'INSTALLATION'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET = +<ComponentType.GENERATOR_SET: 'GENERATOR_SET'> + + +
    + + + + +
    +
    +
    + CONSUMER_SYSTEM_V2 = +<ComponentType.CONSUMER_SYSTEM_V2: 'CONSUMER_SYSTEM@v2'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SYSTEM = +<ComponentType.COMPRESSOR_SYSTEM: 'COMPRESSOR_SYSTEM'> + + +
    + + + + +
    +
    +
    + PUMP_SYSTEM = +<ComponentType.PUMP_SYSTEM: 'PUMP_SYSTEM'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ComponentType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_V2 = +<ComponentType.COMPRESSOR_V2: 'COMPRESSOR@v2'> + + +
    + + + + +
    +
    +
    + PUMP = +<ComponentType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + PUMP_V2 = +<ComponentType.PUMP_V2: 'PUMP@v2'> + + +
    + + + + +
    +
    +
    + GENERIC = +<ComponentType.GENERIC: 'GENERIC'> + + +
    + + + + +
    +
    +
    + VENTING_EMITTER = +<ComponentType.VENTING_EMITTER: 'VENTING_EMITTER'> + + +
    + + + + +
    +
    +
    + TRAIN_V2 = +<ComponentType.TRAIN_V2: 'TRAIN@V2'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    38class ConsumerUserDefinedCategoryType(str, Enum):
    +39    """
    +40    Consumer category
    +41    """
    +42
    +43    BASE_LOAD = "BASE-LOAD"
    +44    COLD_VENTING_FUGITIVE = "COLD-VENTING-FUGITIVE"
    +45    COMPRESSOR = "COMPRESSOR"
    +46    FIXED_PRODUCTION_LOAD = "FIXED-PRODUCTION-LOAD"
    +47    FLARE = "FLARE"
    +48    MISCELLANEOUS = "MISCELLANEOUS"
    +49    PUMP = "PUMP"
    +50    GAS_DRIVEN_COMPRESSOR = "GAS-DRIVEN-COMPRESSOR"
    +51    TURBINE_GENERATOR = "TURBINE-GENERATOR"
    +52    POWER_FROM_SHORE = "POWER-FROM-SHORE"
    +53    OFFSHORE_WIND = "OFFSHORE-WIND"
    +54    LOADING = "LOADING"
    +55    STORAGE = "STORAGE"
    +56    STEAM_TURBINE_GENERATOR = "STEAM-TURBINE-GENERATOR"
    +57    BOILER = "BOILER"
    +58    HEATER = "HEATER"
    +
    + + +

    Consumer category

    +
    + + +
    +
    + BASE_LOAD = +<ConsumerUserDefinedCategoryType.BASE_LOAD: 'BASE-LOAD'> + + +
    + + + + +
    +
    +
    + COLD_VENTING_FUGITIVE = +<ConsumerUserDefinedCategoryType.COLD_VENTING_FUGITIVE: 'COLD-VENTING-FUGITIVE'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ConsumerUserDefinedCategoryType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + FIXED_PRODUCTION_LOAD = +<ConsumerUserDefinedCategoryType.FIXED_PRODUCTION_LOAD: 'FIXED-PRODUCTION-LOAD'> + + +
    + + + + +
    +
    +
    + FLARE = +<ConsumerUserDefinedCategoryType.FLARE: 'FLARE'> + + +
    + + + + +
    +
    +
    + MISCELLANEOUS = +<ConsumerUserDefinedCategoryType.MISCELLANEOUS: 'MISCELLANEOUS'> + + +
    + + + + +
    +
    +
    + PUMP = +<ConsumerUserDefinedCategoryType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + GAS_DRIVEN_COMPRESSOR = +<ConsumerUserDefinedCategoryType.GAS_DRIVEN_COMPRESSOR: 'GAS-DRIVEN-COMPRESSOR'> + + +
    + + + + +
    +
    +
    + TURBINE_GENERATOR = +<ConsumerUserDefinedCategoryType.TURBINE_GENERATOR: 'TURBINE-GENERATOR'> + + +
    + + + + +
    +
    +
    + POWER_FROM_SHORE = +<ConsumerUserDefinedCategoryType.POWER_FROM_SHORE: 'POWER-FROM-SHORE'> + + +
    + + + + +
    +
    +
    + OFFSHORE_WIND = +<ConsumerUserDefinedCategoryType.OFFSHORE_WIND: 'OFFSHORE-WIND'> + + +
    + + + + +
    +
    +
    + LOADING = +<ConsumerUserDefinedCategoryType.LOADING: 'LOADING'> + + +
    + + + + +
    +
    +
    + STORAGE = +<ConsumerUserDefinedCategoryType.STORAGE: 'STORAGE'> + + +
    + + + + +
    +
    +
    + STEAM_TURBINE_GENERATOR = +<ConsumerUserDefinedCategoryType.STEAM_TURBINE_GENERATOR: 'STEAM-TURBINE-GENERATOR'> + + +
    + + + + +
    +
    +
    + BOILER = +<ConsumerUserDefinedCategoryType.BOILER: 'BOILER'> + + +
    + + + + +
    +
    +
    + HEATER = +<ConsumerUserDefinedCategoryType.HEATER: 'HEATER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + InstallationUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    61class InstallationUserDefinedCategoryType(str, Enum):
    +62    """
    +63    Installation category
    +64    """
    +65
    +66    FIXED = "FIXED"
    +67    MOBILE = "MOBILE"
    +
    + + +

    Installation category

    +
    + + +
    +
    + FIXED = +<InstallationUserDefinedCategoryType.FIXED: 'FIXED'> + + +
    + + + + +
    +
    +
    + MOBILE = +<InstallationUserDefinedCategoryType.MOBILE: 'MOBILE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FuelTypeUserDefinedCategoryType(builtins.str, enum.Enum): + + + +
    + +
    70class FuelTypeUserDefinedCategoryType(str, Enum):
    +71    FUEL_GAS = "FUEL-GAS"
    +72    DIESEL = "DIESEL"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL_GAS = +<FuelTypeUserDefinedCategoryType.FUEL_GAS: 'FUEL-GAS'> + + +
    + + + + +
    +
    +
    + DIESEL = +<FuelTypeUserDefinedCategoryType.DIESEL: 'DIESEL'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcBaseModel(pydantic.main.BaseModel): + + + +
    + +
    75class EcalcBaseModel(BaseModel):
    +76    model_config = ConfigDict(
    +77        extra="forbid",
    +78        alias_generator=to_camel_case,
    +79        populate_by_name=True,
    +80    )
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Component(EcalcBaseModel, abc.ABC): + + + +
    + +
    83class Component(EcalcBaseModel, ABC):
    +84    component_type: ComponentType
    +85
    +86    @property
    +87    @abstractmethod
    +88    def id(self) -> str:
    +89        ...
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/component_graph.html b/docs/about/references/api/libecalc/dto/component_graph.html new file mode 100644 index 0000000000..5412f6f440 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/component_graph.html @@ -0,0 +1,551 @@ + + + + + + + libecalc.dto.component_graph API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.component_graph

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import List
    + 4
    + 5from libecalc import dto
    + 6from libecalc.common.component_info.component_level import ComponentLevel
    + 7from libecalc.common.graph import Graph, NodeID
    + 8from libecalc.dto.base import ComponentType
    + 9from libecalc.dto.node_info import NodeInfo
    +10
    +11
    +12class ComponentGraph(Graph):
    +13    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +14        """
    +15        Simple helper function to get the installation of any component with id
    +16
    +17        Args:
    +18            node_id:
    +19
    +20        Returns:
    +21
    +22        """
    +23
    +24        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +25        node_info = self.get_node_info(node_id)
    +26        if node_info.component_level == ComponentLevel.INSTALLATION:
    +27            return node_id
    +28
    +29        parent_id = self.get_predecessor(node_id)
    +30        return self.get_parent_installation_id(parent_id)
    +31
    +32    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +33        component_dto = self.nodes[node_id]
    +34        if isinstance(component_dto, dto.Asset):
    +35            component_level = ComponentLevel.ASSET
    +36        elif isinstance(component_dto, dto.Installation):
    +37            component_level = ComponentLevel.INSTALLATION
    +38        elif isinstance(component_dto, dto.GeneratorSet):
    +39            component_level = ComponentLevel.GENERATOR_SET
    +40        elif component_dto.component_type in [
    +41            ComponentType.COMPRESSOR_SYSTEM,
    +42            ComponentType.PUMP_SYSTEM,
    +43            ComponentType.CONSUMER_SYSTEM_V2,
    +44        ]:
    +45            component_level = ComponentLevel.SYSTEM
    +46        else:
    +47            component_level = ComponentLevel.CONSUMER
    +48
    +49        return NodeInfo(
    +50            id=component_dto.id,
    +51            name=component_dto.name,
    +52            component_type=component_dto.component_type,
    +53            component_level=component_level,
    +54        )
    +55
    +56    def get_node_id_by_name(self, name: str) -> NodeID:
    +57        for node in self.nodes.values():
    +58            if node.name == name:
    +59                return node.id
    +60
    +61        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +62
    +63    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +64        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + +
    +
    + +
    + + class + ComponentGraph(typing.Generic[~TNode]): + + + +
    + +
    13class ComponentGraph(Graph):
    +14    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +15        """
    +16        Simple helper function to get the installation of any component with id
    +17
    +18        Args:
    +19            node_id:
    +20
    +21        Returns:
    +22
    +23        """
    +24
    +25        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +26        node_info = self.get_node_info(node_id)
    +27        if node_info.component_level == ComponentLevel.INSTALLATION:
    +28            return node_id
    +29
    +30        parent_id = self.get_predecessor(node_id)
    +31        return self.get_parent_installation_id(parent_id)
    +32
    +33    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +34        component_dto = self.nodes[node_id]
    +35        if isinstance(component_dto, dto.Asset):
    +36            component_level = ComponentLevel.ASSET
    +37        elif isinstance(component_dto, dto.Installation):
    +38            component_level = ComponentLevel.INSTALLATION
    +39        elif isinstance(component_dto, dto.GeneratorSet):
    +40            component_level = ComponentLevel.GENERATOR_SET
    +41        elif component_dto.component_type in [
    +42            ComponentType.COMPRESSOR_SYSTEM,
    +43            ComponentType.PUMP_SYSTEM,
    +44            ComponentType.CONSUMER_SYSTEM_V2,
    +45        ]:
    +46            component_level = ComponentLevel.SYSTEM
    +47        else:
    +48            component_level = ComponentLevel.CONSUMER
    +49
    +50        return NodeInfo(
    +51            id=component_dto.id,
    +52            name=component_dto.name,
    +53            component_type=component_dto.component_type,
    +54            component_level=component_level,
    +55        )
    +56
    +57    def get_node_id_by_name(self, name: str) -> NodeID:
    +58        for node in self.nodes.values():
    +59            if node.name == name:
    +60                return node.id
    +61
    +62        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +63
    +64    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +65        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + +

    Abstract base class for generic types.

    + +

    A generic type is typically declared by inheriting from +this class parameterized with one or more type variables. +For example, a generic mapping type might be defined as::

    + +

    class Mapping(Generic[KT, VT]): + def __getitem__(self, key: KT) -> VT: + ... + # Etc.

    + +

    This class can then be used as follows::

    + +

    def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: + try: + return mapping[key] + except KeyError: + return default

    +
    + + +
    + +
    + + def + get_parent_installation_id(self, node_id: str) -> str: + + + +
    + +
    14    def get_parent_installation_id(self, node_id: NodeID) -> NodeID:
    +15        """
    +16        Simple helper function to get the installation of any component with id
    +17
    +18        Args:
    +19            node_id:
    +20
    +21        Returns:
    +22
    +23        """
    +24
    +25        # stop as soon as we get an installation. Ie. an installation of an installation, is itself...
    +26        node_info = self.get_node_info(node_id)
    +27        if node_info.component_level == ComponentLevel.INSTALLATION:
    +28            return node_id
    +29
    +30        parent_id = self.get_predecessor(node_id)
    +31        return self.get_parent_installation_id(parent_id)
    +
    + + +

    Simple helper function to get the installation of any component with id

    + +

    Args: + node_id:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_node_info(self, node_id: str) -> libecalc.dto.node_info.NodeInfo: + + + +
    + +
    33    def get_node_info(self, node_id: NodeID) -> NodeInfo:
    +34        component_dto = self.nodes[node_id]
    +35        if isinstance(component_dto, dto.Asset):
    +36            component_level = ComponentLevel.ASSET
    +37        elif isinstance(component_dto, dto.Installation):
    +38            component_level = ComponentLevel.INSTALLATION
    +39        elif isinstance(component_dto, dto.GeneratorSet):
    +40            component_level = ComponentLevel.GENERATOR_SET
    +41        elif component_dto.component_type in [
    +42            ComponentType.COMPRESSOR_SYSTEM,
    +43            ComponentType.PUMP_SYSTEM,
    +44            ComponentType.CONSUMER_SYSTEM_V2,
    +45        ]:
    +46            component_level = ComponentLevel.SYSTEM
    +47        else:
    +48            component_level = ComponentLevel.CONSUMER
    +49
    +50        return NodeInfo(
    +51            id=component_dto.id,
    +52            name=component_dto.name,
    +53            component_type=component_dto.component_type,
    +54            component_level=component_level,
    +55        )
    +
    + + + + +
    +
    + +
    + + def + get_node_id_by_name(self, name: str) -> str: + + + +
    + +
    57    def get_node_id_by_name(self, name: str) -> NodeID:
    +58        for node in self.nodes.values():
    +59            if node.name == name:
    +60                return node.id
    +61
    +62        raise ValueError(f"Component with name '{name}' not found in '{self.nodes[self.root].name}'")
    +
    + + + + +
    +
    + +
    + + def + get_nodes_of_type(self, component_type: libecalc.dto.base.ComponentType) -> List[str]: + + + +
    + +
    64    def get_nodes_of_type(self, component_type: ComponentType) -> List[NodeID]:
    +65        return [node.id for node in self.nodes.values() if node.component_type == component_type]
    +
    + + + + +
    + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/components.html b/docs/about/references/api/libecalc/dto/components.html new file mode 100644 index 0000000000..4b27270dfe --- /dev/null +++ b/docs/about/references/api/libecalc/dto/components.html @@ -0,0 +1,3094 @@ + + + + + + + libecalc.dto.components API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.components

    + + + + + + +
      1from abc import ABC
    +  2from collections import defaultdict
    +  3from datetime import datetime
    +  4from typing import Dict, List, Literal, Optional, TypeVar, Union
    +  5
    +  6from pydantic import ConfigDict, Field, field_validator, model_validator
    +  7from pydantic_core.core_schema import ValidationInfo
    +  8from typing_extensions import Annotated
    +  9
    + 10from libecalc import dto
    + 11from libecalc.common.priorities import Priorities
    + 12from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 13from libecalc.common.string.string_utils import generate_id, get_duplicates
    + 14from libecalc.common.units import Unit
    + 15from libecalc.common.utils.rates import (
    + 16    RateType,
    + 17    TimeSeriesFloat,
    + 18    TimeSeriesStreamDayRate,
    + 19)
    + 20from libecalc.dto.base import (
    + 21    Component,
    + 22    ComponentType,
    + 23    ConsumerUserDefinedCategoryType,
    + 24    EcalcBaseModel,
    + 25    InstallationUserDefinedCategoryType,
    + 26)
    + 27from libecalc.dto.component_graph import ComponentGraph
    + 28from libecalc.dto.models import (
    + 29    ConsumerFunction,
    + 30    ElectricEnergyUsageModel,
    + 31    FuelEnergyUsageModel,
    + 32    GeneratorSetSampled,
    + 33)
    + 34from libecalc.dto.models.compressor import CompressorModel
    + 35from libecalc.dto.models.pump import PumpModel
    + 36from libecalc.dto.types import ConsumptionType, EnergyUsageType, FuelType
    + 37from libecalc.dto.utils.validators import (
    + 38    ComponentNameStr,
    + 39    ExpressionType,
    + 40    convert_expression,
    + 41    validate_temporal_model,
    + 42)
    + 43from libecalc.dto.variables import VariablesMap
    + 44from libecalc.expression import Expression
    + 45from libecalc.presentation.yaml.yaml_keywords import EcalcYamlKeywords
    + 46from libecalc.presentation.yaml.yaml_types.emitters.yaml_venting_emitter import (
    + 47    YamlVentingEmitter,
    + 48)
    + 49
    + 50
    + 51def check_model_energy_usage_type(model_data: Dict[datetime, ConsumerFunction], energy_type: EnergyUsageType):
    + 52    for model in model_data.values():
    + 53        if model.energy_usage_type != energy_type:
    + 54            raise ValueError(f"Model does not consume {energy_type}")
    + 55    return model_data
    + 56
    + 57
    + 58class BaseComponent(Component, ABC):
    + 59    name: ComponentNameStr
    + 60
    + 61    regularity: Dict[datetime, Expression]
    + 62
    + 63    _validate_base_temporal_model = field_validator("regularity")(validate_temporal_model)
    + 64
    + 65
    + 66class BaseEquipment(BaseComponent, ABC):
    + 67    user_defined_category: Dict[datetime, ConsumerUserDefinedCategoryType] = Field(..., validate_default=True)
    + 68
    + 69    @property
    + 70    def id(self) -> str:
    + 71        return generate_id(self.name)
    + 72
    + 73    @field_validator("user_defined_category", mode="before")
    + 74    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    + 75        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    + 76        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    + 77            for user_category in user_defined_category.values():
    + 78                if user_category not in list(ConsumerUserDefinedCategoryType):
    + 79                    name_context_str = ""
    + 80                    if (name := info.data.get("name")) is not None:
    + 81                        name_context_str = f"with the name {name}"
    + 82
    + 83                    raise ValueError(
    + 84                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    + 85                    )
    + 86
    + 87        return user_defined_category
    + 88
    + 89
    + 90class BaseConsumer(BaseEquipment, ABC):
    + 91    """Base class for all consumers."""
    + 92
    + 93    consumes: ConsumptionType
    + 94    fuel: Optional[Dict[datetime, FuelType]] = None
    + 95
    + 96    @field_validator("fuel")
    + 97    @classmethod
    + 98    def validate_fuel_exist(cls, fuel, info: ValidationInfo):
    + 99        """
    +100        Make sure fuel is set if consumption type is FUEL.
    +101        """
    +102        if info.data.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    +103            msg = f"Missing fuel for fuel consumer '{info.data.get('name')}'"
    +104            raise ValueError(msg)
    +105        return fuel
    +106
    +107
    +108class ElectricityConsumer(BaseConsumer):
    +109    component_type: Literal[
    +110        ComponentType.COMPRESSOR,
    +111        ComponentType.PUMP,
    +112        ComponentType.GENERIC,
    +113        ComponentType.PUMP_SYSTEM,
    +114        ComponentType.COMPRESSOR_SYSTEM,
    +115    ]
    +116    consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
    +117    energy_usage_model: Dict[
    +118        datetime,
    +119        ElectricEnergyUsageModel,
    +120    ]
    +121
    +122    _validate_el_consumer_temporal_model = field_validator("energy_usage_model")(validate_temporal_model)
    +123
    +124    _check_model_energy_usage = field_validator("energy_usage_model")(
    +125        lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
    +126    )
    +127
    +128
    +129class FuelConsumer(BaseConsumer):
    +130    component_type: Literal[
    +131        ComponentType.COMPRESSOR,
    +132        ComponentType.GENERIC,
    +133        ComponentType.COMPRESSOR_SYSTEM,
    +134    ]
    +135    consumes: Literal[ConsumptionType.FUEL] = ConsumptionType.FUEL
    +136    fuel: Dict[datetime, FuelType]
    +137    energy_usage_model: Dict[datetime, FuelEnergyUsageModel]
    +138
    +139    _validate_fuel_consumer_temporal_models = field_validator("energy_usage_model", "fuel")(validate_temporal_model)
    +140
    +141    _check_model_energy_usage = field_validator("energy_usage_model")(
    +142        lambda data: check_model_energy_usage_type(data, EnergyUsageType.FUEL)
    +143    )
    +144
    +145
    +146Consumer = Annotated[Union[FuelConsumer, ElectricityConsumer], Field(discriminator="consumes")]
    +147
    +148
    +149class CompressorOperationalSettings(EcalcBaseModel):
    +150    rate: Expression
    +151    inlet_pressure: Expression
    +152    outlet_pressure: Expression
    +153
    +154
    +155class PumpOperationalSettings(EcalcBaseModel):
    +156    rate: Expression
    +157    inlet_pressure: Expression
    +158    outlet_pressure: Expression
    +159    fluid_density: Expression
    +160
    +161
    +162class CompressorComponent(BaseConsumer):
    +163    component_type: Literal[ComponentType.COMPRESSOR] = ComponentType.COMPRESSOR
    +164    energy_usage_model: Dict[datetime, CompressorModel]
    +165
    +166
    +167class PumpComponent(BaseConsumer):
    +168    component_type: Literal[ComponentType.PUMP] = ComponentType.PUMP
    +169    energy_usage_model: Dict[datetime, PumpModel]
    +170
    +171
    +172class Stream(EcalcBaseModel):
    +173    model_config = ConfigDict(populate_by_name=True)
    +174
    +175    stream_name: Optional[str] = Field(None)
    +176    from_component_id: str
    +177    to_component_id: str
    +178
    +179
    +180ConsumerComponent = TypeVar("ConsumerComponent", bound=Union[CompressorComponent, PumpComponent])
    +181
    +182
    +183class TrainComponent(BaseConsumer):
    +184    component_type: Literal[ComponentType.TRAIN_V2] = Field(
    +185        ComponentType.TRAIN_V2,
    +186        title="TYPE",
    +187        description="The type of the component",
    +188        alias="TYPE",
    +189    )
    +190    stages: List[ConsumerComponent]
    +191    streams: List[Stream]
    +192
    +193
    +194class ExpressionTimeSeries(EcalcBaseModel):
    +195    value: ExpressionType
    +196    unit: Unit
    +197    type: Optional[RateType] = None
    +198
    +199
    +200class ExpressionStreamConditions(EcalcBaseModel):
    +201    rate: Optional[ExpressionTimeSeries] = None
    +202    pressure: Optional[ExpressionTimeSeries] = None
    +203    temperature: Optional[ExpressionTimeSeries] = None
    +204    fluid_density: Optional[ExpressionTimeSeries] = None
    +205
    +206
    +207ConsumerID = str
    +208PriorityID = str
    +209StreamID = str
    +210
    +211SystemStreamConditions = Dict[ConsumerID, Dict[StreamID, ExpressionStreamConditions]]
    +212
    +213
    +214class Crossover(EcalcBaseModel):
    +215    model_config = ConfigDict(populate_by_name=True)
    +216
    +217    stream_name: Optional[str] = Field(None)
    +218    from_component_id: str
    +219    to_component_id: str
    +220
    +221
    +222class SystemComponentConditions(EcalcBaseModel):
    +223    crossover: List[Crossover]
    +224
    +225
    +226class ConsumerSystem(BaseConsumer):
    +227    component_type: Literal[ComponentType.CONSUMER_SYSTEM_V2] = Field(
    +228        ComponentType.CONSUMER_SYSTEM_V2,
    +229        title="TYPE",
    +230        description="The type of the component",
    +231    )
    +232    component_conditions: SystemComponentConditions
    +233    stream_conditions_priorities: Priorities[SystemStreamConditions]
    +234    consumers: Union[List[CompressorComponent], List[PumpComponent]]
    +235
    +236    def get_graph(self) -> ComponentGraph:
    +237        graph = ComponentGraph()
    +238        graph.add_node(self)
    +239        for consumer in self.consumers:
    +240            graph.add_node(consumer)
    +241            graph.add_edge(self.id, consumer.id)
    +242        return graph
    +243
    +244    def evaluate_stream_conditions(
    +245        self, variables_map: VariablesMap
    +246    ) -> Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]]:
    +247        parsed_priorities: Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]] = defaultdict(dict)
    +248        for priority_name, priority in self.stream_conditions_priorities.items():
    +249            for consumer_name, streams_conditions in priority.items():
    +250                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +251                    TimeSeriesStreamConditions(
    +252                        id=generate_id(consumer_name, stream_name),
    +253                        name="-".join([consumer_name, stream_name]),
    +254                        rate=TimeSeriesStreamDayRate(
    +255                            timesteps=variables_map.time_vector,
    +256                            values=list(
    +257                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +258                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +259                                )
    +260                            ),
    +261                            unit=stream_conditions.rate.unit,
    +262                        )
    +263                        if stream_conditions.rate is not None
    +264                        else None,
    +265                        pressure=TimeSeriesFloat(
    +266                            timesteps=variables_map.time_vector,
    +267                            values=list(
    +268                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +269                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +270                                )
    +271                            ),
    +272                            unit=stream_conditions.pressure.unit,
    +273                        )
    +274                        if stream_conditions.pressure is not None
    +275                        else None,
    +276                        fluid_density=TimeSeriesFloat(
    +277                            timesteps=variables_map.time_vector,
    +278                            values=list(
    +279                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +280                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +281                                )
    +282                            ),
    +283                            unit=stream_conditions.fluid_density.unit,
    +284                        )
    +285                        if stream_conditions.fluid_density is not None
    +286                        else None,
    +287                    )
    +288                    for stream_name, stream_conditions in streams_conditions.items()
    +289                ]
    +290        return dict(parsed_priorities)
    +291
    +292
    +293class GeneratorSet(BaseEquipment):
    +294    component_type: Literal[ComponentType.GENERATOR_SET] = ComponentType.GENERATOR_SET
    +295    fuel: Dict[datetime, FuelType]
    +296    generator_set_model: Dict[datetime, GeneratorSetSampled]
    +297    consumers: List[
    +298        Annotated[
    +299            Union[ElectricityConsumer, ConsumerSystem],
    +300            Field(discriminator="component_type"),
    +301        ]
    +302    ] = Field(default_factory=list)
    +303    _validate_genset_temporal_models = field_validator("generator_set_model", "fuel")(validate_temporal_model)
    +304
    +305    @field_validator("user_defined_category", mode="before")
    +306    @classmethod
    +307    def check_mandatory_category_for_generator_set(cls, user_defined_category, info: ValidationInfo):
    +308        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +309        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +310        """
    +311        if user_defined_category is None or user_defined_category == "":
    +312            raise ValueError(f"CATEGORY is mandatory and must be set for '{info.data.get('name', cls.__name__)}'")
    +313
    +314        return user_defined_category
    +315
    +316    def get_graph(self) -> ComponentGraph:
    +317        graph = ComponentGraph()
    +318        graph.add_node(self)
    +319        for electricity_consumer in self.consumers:
    +320            if hasattr(electricity_consumer, "get_graph"):
    +321                graph.add_subgraph(electricity_consumer.get_graph())
    +322            else:
    +323                graph.add_node(electricity_consumer)
    +324
    +325            graph.add_edge(self.id, electricity_consumer.id)
    +326
    +327        return graph
    +328
    +329
    +330class Installation(BaseComponent):
    +331    component_type: Literal[ComponentType.INSTALLATION] = ComponentType.INSTALLATION
    +332    user_defined_category: Optional[InstallationUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +333    hydrocarbon_export: Dict[datetime, Expression]
    +334    fuel_consumers: List[
    +335        Annotated[
    +336            Union[GeneratorSet, FuelConsumer, ConsumerSystem],
    +337            Field(discriminator="component_type"),
    +338        ]
    +339    ] = Field(default_factory=list)
    +340    venting_emitters: List[YamlVentingEmitter] = Field(default_factory=list)
    +341
    +342    @property
    +343    def id(self) -> str:
    +344        return generate_id(self.name)
    +345
    +346    _validate_installation_temporal_model = field_validator("hydrocarbon_export")(validate_temporal_model)
    +347
    +348    _convert_expression_installation = field_validator("regularity", "hydrocarbon_export", mode="before")(
    +349        convert_expression
    +350    )
    +351
    +352    @field_validator("user_defined_category", mode="before")
    +353    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +354        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +355        if user_defined_category is not None:
    +356            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +357                name_context_str = ""
    +358                if (name := info.data.get("name")) is not None:
    +359                    name_context_str = f"with the name {name}"
    +360
    +361                raise ValueError(
    +362                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +363                )
    +364
    +365        return user_defined_category
    +366
    +367    @model_validator(mode="after")
    +368    def check_fuel_consumers_or_venting_emitters_exist(self):
    +369        try:
    +370            if self.fuel_consumers or self.venting_emitters or self.generator_sets:
    +371                return self
    +372        except AttributeError:
    +373            raise ValueError(
    +374                f"Keywords are missing:\n It is required to specify at least one of the keywords "
    +375                f"{EcalcYamlKeywords.fuel_consumers}, {EcalcYamlKeywords.generator_sets} or {EcalcYamlKeywords.installation_venting_emitters} in the model.",
    +376            ) from None
    +377
    +378    def get_graph(self) -> ComponentGraph:
    +379        graph = ComponentGraph()
    +380        graph.add_node(self)
    +381        for component in [*self.fuel_consumers, *self.venting_emitters]:
    +382            if hasattr(component, "get_graph"):
    +383                graph.add_subgraph(component.get_graph())
    +384            else:
    +385                graph.add_node(component)
    +386
    +387            graph.add_edge(self.id, component.id)
    +388
    +389        return graph
    +390
    +391
    +392class Asset(Component):
    +393    @property
    +394    def id(self):
    +395        return generate_id(self.name)
    +396
    +397    component_type: Literal[ComponentType.ASSET] = ComponentType.ASSET
    +398
    +399    name: ComponentNameStr
    +400    installations: List[Installation] = Field(default_factory=list)
    +401
    +402    @property
    +403    def installation_ids(self) -> List[str]:
    +404        return [installation.id for installation in self.installations]
    +405
    +406    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +407        installation = self.get_installation(installation_id)
    +408        component_ids = []
    +409        for fuel_consumer in installation.fuel_consumers:
    +410            component_ids.append(fuel_consumer.id)
    +411            if isinstance(fuel_consumer, dto.GeneratorSet):
    +412                for electricity_consumer in fuel_consumer.consumers:
    +413                    component_ids.append(electricity_consumer.id)
    +414
    +415        for emitter in installation.venting_emitters:
    +416            component_ids.append(emitter.id)
    +417        return component_ids
    +418
    +419    def get_installation(self, installation_id: str) -> Installation:
    +420        return next(installation for installation in self.installations if installation.id == installation_id)
    +421
    +422    @model_validator(mode="after")
    +423    def validate_unique_names(self):
    +424        """Ensure unique component names within installation."""
    +425        names = [self.name]
    +426        fuel_types = [dto.FuelType]
    +427        fuel_names = [str]
    +428        for installation in self.installations:
    +429            names.append(installation.name)
    +430            fuel_consumers = installation.fuel_consumers
    +431            venting_emitters = installation.venting_emitters
    +432
    +433            names.extend([venting_emitter.name for venting_emitter in venting_emitters])
    +434            for fuel_consumer in fuel_consumers:
    +435                names.append(fuel_consumer.name)
    +436                if isinstance(fuel_consumer, GeneratorSet):
    +437                    for electricity_consumer in fuel_consumer.consumers:
    +438                        if isinstance(electricity_consumer, ConsumerSystem):
    +439                            for consumer in electricity_consumer.consumers:
    +440                                names.append(consumer.name)
    +441                elif isinstance(fuel_consumer, ConsumerSystem):
    +442                    for consumer in fuel_consumer.consumers:
    +443                        names.append(consumer.name)
    +444                if fuel_consumer.fuel is not None:
    +445                    for fuel_type in fuel_consumer.fuel.values():
    +446                        # Need to verify that it is a different fuel
    +447                        if fuel_type is not None and fuel_type not in fuel_types:
    +448                            fuel_types.append(fuel_type)
    +449                            fuel_names.append(fuel_type.name)
    +450
    +451        duplicated_names = get_duplicates(names)
    +452        duplicated_fuel_names = get_duplicates(fuel_names)
    +453
    +454        if len(duplicated_names) > 0:
    +455            raise ValueError(
    +456                "Component names must be unique. Components include the main model, installations,"
    +457                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +458                f" Duplicated names are: {', '.join(duplicated_names)}"
    +459            )
    +460
    +461        if len(duplicated_fuel_names) > 0:
    +462            raise ValueError(
    +463                "Fuel type names must be unique across installations."
    +464                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +465            )
    +466        return self
    +467
    +468    def get_graph(self) -> ComponentGraph:
    +469        graph = ComponentGraph()
    +470        graph.add_node(self)
    +471        for installation in self.installations:
    +472            graph.add_subgraph(installation.get_graph())
    +473            graph.add_edge(self.id, installation.id)
    +474
    +475        return graph
    +476
    +477
    +478ComponentDTO = Union[
    +479    Asset,
    +480    Installation,
    +481    GeneratorSet,
    +482    FuelConsumer,
    +483    ElectricityConsumer,
    +484    ConsumerSystem,
    +485    CompressorComponent,
    +486    PumpComponent,
    +487]
    +
    + + +
    +
    + +
    + + def + check_model_energy_usage_type( model_data: Dict[datetime.datetime, libecalc.dto.models.base.ConsumerFunction], energy_type: libecalc.dto.types.EnergyUsageType): + + + +
    + +
    52def check_model_energy_usage_type(model_data: Dict[datetime, ConsumerFunction], energy_type: EnergyUsageType):
    +53    for model in model_data.values():
    +54        if model.energy_usage_type != energy_type:
    +55            raise ValueError(f"Model does not consume {energy_type}")
    +56    return model_data
    +
    + + + + +
    +
    + +
    + + class + BaseComponent(libecalc.dto.base.Component, abc.ABC): + + + +
    + +
    59class BaseComponent(Component, ABC):
    +60    name: ComponentNameStr
    +61
    +62    regularity: Dict[datetime, Expression]
    +63
    +64    _validate_base_temporal_model = field_validator("regularity")(validate_temporal_model)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + BaseEquipment(BaseComponent, abc.ABC): + + + +
    + +
    67class BaseEquipment(BaseComponent, ABC):
    +68    user_defined_category: Dict[datetime, ConsumerUserDefinedCategoryType] = Field(..., validate_default=True)
    +69
    +70    @property
    +71    def id(self) -> str:
    +72        return generate_id(self.name)
    +73
    +74    @field_validator("user_defined_category", mode="before")
    +75    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +76        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +77        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    +78            for user_category in user_defined_category.values():
    +79                if user_category not in list(ConsumerUserDefinedCategoryType):
    +80                    name_context_str = ""
    +81                    if (name := info.data.get("name")) is not None:
    +82                        name_context_str = f"with the name {name}"
    +83
    +84                    raise ValueError(
    +85                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    +86                    )
    +87
    +88        return user_defined_category
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    + + def + check_user_defined_category( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    74    @field_validator("user_defined_category", mode="before")
    +75    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +76        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +77        if isinstance(user_defined_category, dict) and len(user_defined_category.values()) > 0:
    +78            for user_category in user_defined_category.values():
    +79                if user_category not in list(ConsumerUserDefinedCategoryType):
    +80                    name_context_str = ""
    +81                    if (name := info.data.get("name")) is not None:
    +82                        name_context_str = f"with the name {name}"
    +83
    +84                    raise ValueError(
    +85                        f"CATEGORY: {user_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[(consumer_user_defined_category.value) for consumer_user_defined_category in ConsumerUserDefinedCategoryType]}"
    +86                    )
    +87
    +88        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + BaseConsumer(BaseEquipment, abc.ABC): + + + +
    + +
     91class BaseConsumer(BaseEquipment, ABC):
    + 92    """Base class for all consumers."""
    + 93
    + 94    consumes: ConsumptionType
    + 95    fuel: Optional[Dict[datetime, FuelType]] = None
    + 96
    + 97    @field_validator("fuel")
    + 98    @classmethod
    + 99    def validate_fuel_exist(cls, fuel, info: ValidationInfo):
    +100        """
    +101        Make sure fuel is set if consumption type is FUEL.
    +102        """
    +103        if info.data.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    +104            msg = f"Missing fuel for fuel consumer '{info.data.get('name')}'"
    +105            raise ValueError(msg)
    +106        return fuel
    +
    + + +

    Base class for all consumers.

    +
    + + +
    + +
    +
    @field_validator('fuel')
    +
    @classmethod
    + + def + validate_fuel_exist(cls, fuel, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
     97    @field_validator("fuel")
    + 98    @classmethod
    + 99    def validate_fuel_exist(cls, fuel, info: ValidationInfo):
    +100        """
    +101        Make sure fuel is set if consumption type is FUEL.
    +102        """
    +103        if info.data.get("consumes") == ConsumptionType.FUEL and (fuel is None or len(fuel) < 1):
    +104            msg = f"Missing fuel for fuel consumer '{info.data.get('name')}'"
    +105            raise ValueError(msg)
    +106        return fuel
    +
    + + +

    Make sure fuel is set if consumption type is FUEL.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ElectricityConsumer(BaseConsumer): + + + +
    + +
    109class ElectricityConsumer(BaseConsumer):
    +110    component_type: Literal[
    +111        ComponentType.COMPRESSOR,
    +112        ComponentType.PUMP,
    +113        ComponentType.GENERIC,
    +114        ComponentType.PUMP_SYSTEM,
    +115        ComponentType.COMPRESSOR_SYSTEM,
    +116    ]
    +117    consumes: Literal[ConsumptionType.ELECTRICITY] = ConsumptionType.ELECTRICITY
    +118    energy_usage_model: Dict[
    +119        datetime,
    +120        ElectricEnergyUsageModel,
    +121    ]
    +122
    +123    _validate_el_consumer_temporal_model = field_validator("energy_usage_model")(validate_temporal_model)
    +124
    +125    _check_model_energy_usage = field_validator("energy_usage_model")(
    +126        lambda data: check_model_energy_usage_type(data, EnergyUsageType.POWER)
    +127    )
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + FuelConsumer(BaseConsumer): + + + +
    + +
    130class FuelConsumer(BaseConsumer):
    +131    component_type: Literal[
    +132        ComponentType.COMPRESSOR,
    +133        ComponentType.GENERIC,
    +134        ComponentType.COMPRESSOR_SYSTEM,
    +135    ]
    +136    consumes: Literal[ConsumptionType.FUEL] = ConsumptionType.FUEL
    +137    fuel: Dict[datetime, FuelType]
    +138    energy_usage_model: Dict[datetime, FuelEnergyUsageModel]
    +139
    +140    _validate_fuel_consumer_temporal_models = field_validator("energy_usage_model", "fuel")(validate_temporal_model)
    +141
    +142    _check_model_energy_usage = field_validator("energy_usage_model")(
    +143        lambda data: check_model_energy_usage_type(data, EnergyUsageType.FUEL)
    +144    )
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + CompressorOperationalSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    150class CompressorOperationalSettings(EcalcBaseModel):
    +151    rate: Expression
    +152    inlet_pressure: Expression
    +153    outlet_pressure: Expression
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpOperationalSettings(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    156class PumpOperationalSettings(EcalcBaseModel):
    +157    rate: Expression
    +158    inlet_pressure: Expression
    +159    outlet_pressure: Expression
    +160    fluid_density: Expression
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorComponent(BaseConsumer): + + + +
    + +
    163class CompressorComponent(BaseConsumer):
    +164    component_type: Literal[ComponentType.COMPRESSOR] = ComponentType.COMPRESSOR
    +165    energy_usage_model: Dict[datetime, CompressorModel]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + PumpComponent(BaseConsumer): + + + +
    + +
    168class PumpComponent(BaseConsumer):
    +169    component_type: Literal[ComponentType.PUMP] = ComponentType.PUMP
    +170    energy_usage_model: Dict[datetime, PumpModel]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + Stream(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    173class Stream(EcalcBaseModel):
    +174    model_config = ConfigDict(populate_by_name=True)
    +175
    +176    stream_name: Optional[str] = Field(None)
    +177    from_component_id: str
    +178    to_component_id: str
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + TrainComponent(BaseConsumer): + + + +
    + +
    184class TrainComponent(BaseConsumer):
    +185    component_type: Literal[ComponentType.TRAIN_V2] = Field(
    +186        ComponentType.TRAIN_V2,
    +187        title="TYPE",
    +188        description="The type of the component",
    +189        alias="TYPE",
    +190    )
    +191    stages: List[ConsumerComponent]
    +192    streams: List[Stream]
    +
    + + +

    Base class for all consumers.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + ExpressionTimeSeries(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    195class ExpressionTimeSeries(EcalcBaseModel):
    +196    value: ExpressionType
    +197    unit: Unit
    +198    type: Optional[RateType] = None
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + ExpressionStreamConditions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    201class ExpressionStreamConditions(EcalcBaseModel):
    +202    rate: Optional[ExpressionTimeSeries] = None
    +203    pressure: Optional[ExpressionTimeSeries] = None
    +204    temperature: Optional[ExpressionTimeSeries] = None
    +205    fluid_density: Optional[ExpressionTimeSeries] = None
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Crossover(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    215class Crossover(EcalcBaseModel):
    +216    model_config = ConfigDict(populate_by_name=True)
    +217
    +218    stream_name: Optional[str] = Field(None)
    +219    from_component_id: str
    +220    to_component_id: str
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SystemComponentConditions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    223class SystemComponentConditions(EcalcBaseModel):
    +224    crossover: List[Crossover]
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerSystem(BaseConsumer): + + + +
    + +
    227class ConsumerSystem(BaseConsumer):
    +228    component_type: Literal[ComponentType.CONSUMER_SYSTEM_V2] = Field(
    +229        ComponentType.CONSUMER_SYSTEM_V2,
    +230        title="TYPE",
    +231        description="The type of the component",
    +232    )
    +233    component_conditions: SystemComponentConditions
    +234    stream_conditions_priorities: Priorities[SystemStreamConditions]
    +235    consumers: Union[List[CompressorComponent], List[PumpComponent]]
    +236
    +237    def get_graph(self) -> ComponentGraph:
    +238        graph = ComponentGraph()
    +239        graph.add_node(self)
    +240        for consumer in self.consumers:
    +241            graph.add_node(consumer)
    +242            graph.add_edge(self.id, consumer.id)
    +243        return graph
    +244
    +245    def evaluate_stream_conditions(
    +246        self, variables_map: VariablesMap
    +247    ) -> Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]]:
    +248        parsed_priorities: Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]] = defaultdict(dict)
    +249        for priority_name, priority in self.stream_conditions_priorities.items():
    +250            for consumer_name, streams_conditions in priority.items():
    +251                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +252                    TimeSeriesStreamConditions(
    +253                        id=generate_id(consumer_name, stream_name),
    +254                        name="-".join([consumer_name, stream_name]),
    +255                        rate=TimeSeriesStreamDayRate(
    +256                            timesteps=variables_map.time_vector,
    +257                            values=list(
    +258                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +259                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +260                                )
    +261                            ),
    +262                            unit=stream_conditions.rate.unit,
    +263                        )
    +264                        if stream_conditions.rate is not None
    +265                        else None,
    +266                        pressure=TimeSeriesFloat(
    +267                            timesteps=variables_map.time_vector,
    +268                            values=list(
    +269                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +270                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +271                                )
    +272                            ),
    +273                            unit=stream_conditions.pressure.unit,
    +274                        )
    +275                        if stream_conditions.pressure is not None
    +276                        else None,
    +277                        fluid_density=TimeSeriesFloat(
    +278                            timesteps=variables_map.time_vector,
    +279                            values=list(
    +280                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +281                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +282                                )
    +283                            ),
    +284                            unit=stream_conditions.fluid_density.unit,
    +285                        )
    +286                        if stream_conditions.fluid_density is not None
    +287                        else None,
    +288                    )
    +289                    for stream_name, stream_conditions in streams_conditions.items()
    +290                ]
    +291        return dict(parsed_priorities)
    +
    + + +

    Base class for all consumers.

    +
    + + +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    237    def get_graph(self) -> ComponentGraph:
    +238        graph = ComponentGraph()
    +239        graph.add_node(self)
    +240        for consumer in self.consumers:
    +241            graph.add_node(consumer)
    +242            graph.add_edge(self.id, consumer.id)
    +243        return graph
    +
    + + + + +
    +
    + +
    + + def + evaluate_stream_conditions( self, variables_map: libecalc.dto.variables.VariablesMap) -> Dict[str, Dict[str, List[libecalc.common.stream_conditions.TimeSeriesStreamConditions]]]: + + + +
    + +
    245    def evaluate_stream_conditions(
    +246        self, variables_map: VariablesMap
    +247    ) -> Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]]:
    +248        parsed_priorities: Priorities[Dict[ConsumerID, List[TimeSeriesStreamConditions]]] = defaultdict(dict)
    +249        for priority_name, priority in self.stream_conditions_priorities.items():
    +250            for consumer_name, streams_conditions in priority.items():
    +251                parsed_priorities[priority_name][generate_id(consumer_name)] = [
    +252                    TimeSeriesStreamConditions(
    +253                        id=generate_id(consumer_name, stream_name),
    +254                        name="-".join([consumer_name, stream_name]),
    +255                        rate=TimeSeriesStreamDayRate(
    +256                            timesteps=variables_map.time_vector,
    +257                            values=list(
    +258                                Expression.setup_from_expression(stream_conditions.rate.value).evaluate(
    +259                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +260                                )
    +261                            ),
    +262                            unit=stream_conditions.rate.unit,
    +263                        )
    +264                        if stream_conditions.rate is not None
    +265                        else None,
    +266                        pressure=TimeSeriesFloat(
    +267                            timesteps=variables_map.time_vector,
    +268                            values=list(
    +269                                Expression.setup_from_expression(stream_conditions.pressure.value).evaluate(
    +270                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +271                                )
    +272                            ),
    +273                            unit=stream_conditions.pressure.unit,
    +274                        )
    +275                        if stream_conditions.pressure is not None
    +276                        else None,
    +277                        fluid_density=TimeSeriesFloat(
    +278                            timesteps=variables_map.time_vector,
    +279                            values=list(
    +280                                Expression.setup_from_expression(stream_conditions.fluid_density.value).evaluate(
    +281                                    variables=variables_map.variables, fill_length=len(variables_map.time_vector)
    +282                                )
    +283                            ),
    +284                            unit=stream_conditions.fluid_density.unit,
    +285                        )
    +286                        if stream_conditions.fluid_density is not None
    +287                        else None,
    +288                    )
    +289                    for stream_name, stream_conditions in streams_conditions.items()
    +290                ]
    +291        return dict(parsed_priorities)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + + +
    +
    +
    +
    + +
    + + class + GeneratorSet(BaseEquipment): + + + +
    + +
    294class GeneratorSet(BaseEquipment):
    +295    component_type: Literal[ComponentType.GENERATOR_SET] = ComponentType.GENERATOR_SET
    +296    fuel: Dict[datetime, FuelType]
    +297    generator_set_model: Dict[datetime, GeneratorSetSampled]
    +298    consumers: List[
    +299        Annotated[
    +300            Union[ElectricityConsumer, ConsumerSystem],
    +301            Field(discriminator="component_type"),
    +302        ]
    +303    ] = Field(default_factory=list)
    +304    _validate_genset_temporal_models = field_validator("generator_set_model", "fuel")(validate_temporal_model)
    +305
    +306    @field_validator("user_defined_category", mode="before")
    +307    @classmethod
    +308    def check_mandatory_category_for_generator_set(cls, user_defined_category, info: ValidationInfo):
    +309        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +310        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +311        """
    +312        if user_defined_category is None or user_defined_category == "":
    +313            raise ValueError(f"CATEGORY is mandatory and must be set for '{info.data.get('name', cls.__name__)}'")
    +314
    +315        return user_defined_category
    +316
    +317    def get_graph(self) -> ComponentGraph:
    +318        graph = ComponentGraph()
    +319        graph.add_node(self)
    +320        for electricity_consumer in self.consumers:
    +321            if hasattr(electricity_consumer, "get_graph"):
    +322                graph.add_subgraph(electricity_consumer.get_graph())
    +323            else:
    +324                graph.add_node(electricity_consumer)
    +325
    +326            graph.add_edge(self.id, electricity_consumer.id)
    +327
    +328        return graph
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    +
    @classmethod
    + + def + check_mandatory_category_for_generator_set( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    306    @field_validator("user_defined_category", mode="before")
    +307    @classmethod
    +308    def check_mandatory_category_for_generator_set(cls, user_defined_category, info: ValidationInfo):
    +309        """This could be handled automatically with Pydantic, but I want to inform the users in a better way, in
    +310        particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.
    +311        """
    +312        if user_defined_category is None or user_defined_category == "":
    +313            raise ValueError(f"CATEGORY is mandatory and must be set for '{info.data.get('name', cls.__name__)}'")
    +314
    +315        return user_defined_category
    +
    + + +

    This could be handled automatically with Pydantic, but I want to inform the users in a better way, in +particular since we introduced a breaking change for this to be mandatory for GeneratorSets in v7.2.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    317    def get_graph(self) -> ComponentGraph:
    +318        graph = ComponentGraph()
    +319        graph.add_node(self)
    +320        for electricity_consumer in self.consumers:
    +321            if hasattr(electricity_consumer, "get_graph"):
    +322                graph.add_subgraph(electricity_consumer.get_graph())
    +323            else:
    +324                graph.add_node(electricity_consumer)
    +325
    +326            graph.add_edge(self.id, electricity_consumer.id)
    +327
    +328        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + Installation(BaseComponent): + + + +
    + +
    331class Installation(BaseComponent):
    +332    component_type: Literal[ComponentType.INSTALLATION] = ComponentType.INSTALLATION
    +333    user_defined_category: Optional[InstallationUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +334    hydrocarbon_export: Dict[datetime, Expression]
    +335    fuel_consumers: List[
    +336        Annotated[
    +337            Union[GeneratorSet, FuelConsumer, ConsumerSystem],
    +338            Field(discriminator="component_type"),
    +339        ]
    +340    ] = Field(default_factory=list)
    +341    venting_emitters: List[YamlVentingEmitter] = Field(default_factory=list)
    +342
    +343    @property
    +344    def id(self) -> str:
    +345        return generate_id(self.name)
    +346
    +347    _validate_installation_temporal_model = field_validator("hydrocarbon_export")(validate_temporal_model)
    +348
    +349    _convert_expression_installation = field_validator("regularity", "hydrocarbon_export", mode="before")(
    +350        convert_expression
    +351    )
    +352
    +353    @field_validator("user_defined_category", mode="before")
    +354    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +355        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +356        if user_defined_category is not None:
    +357            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +358                name_context_str = ""
    +359                if (name := info.data.get("name")) is not None:
    +360                    name_context_str = f"with the name {name}"
    +361
    +362                raise ValueError(
    +363                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +364                )
    +365
    +366        return user_defined_category
    +367
    +368    @model_validator(mode="after")
    +369    def check_fuel_consumers_or_venting_emitters_exist(self):
    +370        try:
    +371            if self.fuel_consumers or self.venting_emitters or self.generator_sets:
    +372                return self
    +373        except AttributeError:
    +374            raise ValueError(
    +375                f"Keywords are missing:\n It is required to specify at least one of the keywords "
    +376                f"{EcalcYamlKeywords.fuel_consumers}, {EcalcYamlKeywords.generator_sets} or {EcalcYamlKeywords.installation_venting_emitters} in the model.",
    +377            ) from None
    +378
    +379    def get_graph(self) -> ComponentGraph:
    +380        graph = ComponentGraph()
    +381        graph.add_node(self)
    +382        for component in [*self.fuel_consumers, *self.venting_emitters]:
    +383            if hasattr(component, "get_graph"):
    +384                graph.add_subgraph(component.get_graph())
    +385            else:
    +386                graph.add_node(component)
    +387
    +388            graph.add_edge(self.id, component.id)
    +389
    +390        return graph
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    + + def + check_user_defined_category( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    353    @field_validator("user_defined_category", mode="before")
    +354    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +355        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +356        if user_defined_category is not None:
    +357            if user_defined_category not in list(InstallationUserDefinedCategoryType):
    +358                name_context_str = ""
    +359                if (name := info.data.get("name")) is not None:
    +360                    name_context_str = f"with the name {name}"
    +361
    +362                raise ValueError(
    +363                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(installation_user_defined_category.value) for installation_user_defined_category in InstallationUserDefinedCategoryType]}"
    +364                )
    +365
    +366        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    + +
    +
    @model_validator(mode='after')
    + + def + check_fuel_consumers_or_venting_emitters_exist(self): + + + +
    + +
    368    @model_validator(mode="after")
    +369    def check_fuel_consumers_or_venting_emitters_exist(self):
    +370        try:
    +371            if self.fuel_consumers or self.venting_emitters or self.generator_sets:
    +372                return self
    +373        except AttributeError:
    +374            raise ValueError(
    +375                f"Keywords are missing:\n It is required to specify at least one of the keywords "
    +376                f"{EcalcYamlKeywords.fuel_consumers}, {EcalcYamlKeywords.generator_sets} or {EcalcYamlKeywords.installation_venting_emitters} in the model.",
    +377            ) from None
    +
    + + + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    379    def get_graph(self) -> ComponentGraph:
    +380        graph = ComponentGraph()
    +381        graph.add_node(self)
    +382        for component in [*self.fuel_consumers, *self.venting_emitters]:
    +383            if hasattr(component, "get_graph"):
    +384                graph.add_subgraph(component.get_graph())
    +385            else:
    +386                graph.add_node(component)
    +387
    +388            graph.add_edge(self.id, component.id)
    +389
    +390        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Asset(libecalc.dto.base.Component): + + + +
    + +
    393class Asset(Component):
    +394    @property
    +395    def id(self):
    +396        return generate_id(self.name)
    +397
    +398    component_type: Literal[ComponentType.ASSET] = ComponentType.ASSET
    +399
    +400    name: ComponentNameStr
    +401    installations: List[Installation] = Field(default_factory=list)
    +402
    +403    @property
    +404    def installation_ids(self) -> List[str]:
    +405        return [installation.id for installation in self.installations]
    +406
    +407    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +408        installation = self.get_installation(installation_id)
    +409        component_ids = []
    +410        for fuel_consumer in installation.fuel_consumers:
    +411            component_ids.append(fuel_consumer.id)
    +412            if isinstance(fuel_consumer, dto.GeneratorSet):
    +413                for electricity_consumer in fuel_consumer.consumers:
    +414                    component_ids.append(electricity_consumer.id)
    +415
    +416        for emitter in installation.venting_emitters:
    +417            component_ids.append(emitter.id)
    +418        return component_ids
    +419
    +420    def get_installation(self, installation_id: str) -> Installation:
    +421        return next(installation for installation in self.installations if installation.id == installation_id)
    +422
    +423    @model_validator(mode="after")
    +424    def validate_unique_names(self):
    +425        """Ensure unique component names within installation."""
    +426        names = [self.name]
    +427        fuel_types = [dto.FuelType]
    +428        fuel_names = [str]
    +429        for installation in self.installations:
    +430            names.append(installation.name)
    +431            fuel_consumers = installation.fuel_consumers
    +432            venting_emitters = installation.venting_emitters
    +433
    +434            names.extend([venting_emitter.name for venting_emitter in venting_emitters])
    +435            for fuel_consumer in fuel_consumers:
    +436                names.append(fuel_consumer.name)
    +437                if isinstance(fuel_consumer, GeneratorSet):
    +438                    for electricity_consumer in fuel_consumer.consumers:
    +439                        if isinstance(electricity_consumer, ConsumerSystem):
    +440                            for consumer in electricity_consumer.consumers:
    +441                                names.append(consumer.name)
    +442                elif isinstance(fuel_consumer, ConsumerSystem):
    +443                    for consumer in fuel_consumer.consumers:
    +444                        names.append(consumer.name)
    +445                if fuel_consumer.fuel is not None:
    +446                    for fuel_type in fuel_consumer.fuel.values():
    +447                        # Need to verify that it is a different fuel
    +448                        if fuel_type is not None and fuel_type not in fuel_types:
    +449                            fuel_types.append(fuel_type)
    +450                            fuel_names.append(fuel_type.name)
    +451
    +452        duplicated_names = get_duplicates(names)
    +453        duplicated_fuel_names = get_duplicates(fuel_names)
    +454
    +455        if len(duplicated_names) > 0:
    +456            raise ValueError(
    +457                "Component names must be unique. Components include the main model, installations,"
    +458                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +459                f" Duplicated names are: {', '.join(duplicated_names)}"
    +460            )
    +461
    +462        if len(duplicated_fuel_names) > 0:
    +463            raise ValueError(
    +464                "Fuel type names must be unique across installations."
    +465                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +466            )
    +467        return self
    +468
    +469    def get_graph(self) -> ComponentGraph:
    +470        graph = ComponentGraph()
    +471        graph.add_node(self)
    +472        for installation in self.installations:
    +473            graph.add_subgraph(installation.get_graph())
    +474            graph.add_edge(self.id, installation.id)
    +475
    +476        return graph
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    + + def + get_component_ids_for_installation_id(self, installation_id: str) -> List[str]: + + + +
    + +
    407    def get_component_ids_for_installation_id(self, installation_id: str) -> List[str]:
    +408        installation = self.get_installation(installation_id)
    +409        component_ids = []
    +410        for fuel_consumer in installation.fuel_consumers:
    +411            component_ids.append(fuel_consumer.id)
    +412            if isinstance(fuel_consumer, dto.GeneratorSet):
    +413                for electricity_consumer in fuel_consumer.consumers:
    +414                    component_ids.append(electricity_consumer.id)
    +415
    +416        for emitter in installation.venting_emitters:
    +417            component_ids.append(emitter.id)
    +418        return component_ids
    +
    + + + + +
    +
    + +
    + + def + get_installation(self, installation_id: str) -> libecalc.dto.components.Installation: + + + +
    + +
    420    def get_installation(self, installation_id: str) -> Installation:
    +421        return next(installation for installation in self.installations if installation.id == installation_id)
    +
    + + + + +
    +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_unique_names(self): + + + +
    + +
    423    @model_validator(mode="after")
    +424    def validate_unique_names(self):
    +425        """Ensure unique component names within installation."""
    +426        names = [self.name]
    +427        fuel_types = [dto.FuelType]
    +428        fuel_names = [str]
    +429        for installation in self.installations:
    +430            names.append(installation.name)
    +431            fuel_consumers = installation.fuel_consumers
    +432            venting_emitters = installation.venting_emitters
    +433
    +434            names.extend([venting_emitter.name for venting_emitter in venting_emitters])
    +435            for fuel_consumer in fuel_consumers:
    +436                names.append(fuel_consumer.name)
    +437                if isinstance(fuel_consumer, GeneratorSet):
    +438                    for electricity_consumer in fuel_consumer.consumers:
    +439                        if isinstance(electricity_consumer, ConsumerSystem):
    +440                            for consumer in electricity_consumer.consumers:
    +441                                names.append(consumer.name)
    +442                elif isinstance(fuel_consumer, ConsumerSystem):
    +443                    for consumer in fuel_consumer.consumers:
    +444                        names.append(consumer.name)
    +445                if fuel_consumer.fuel is not None:
    +446                    for fuel_type in fuel_consumer.fuel.values():
    +447                        # Need to verify that it is a different fuel
    +448                        if fuel_type is not None and fuel_type not in fuel_types:
    +449                            fuel_types.append(fuel_type)
    +450                            fuel_names.append(fuel_type.name)
    +451
    +452        duplicated_names = get_duplicates(names)
    +453        duplicated_fuel_names = get_duplicates(fuel_names)
    +454
    +455        if len(duplicated_names) > 0:
    +456            raise ValueError(
    +457                "Component names must be unique. Components include the main model, installations,"
    +458                " generator sets, electricity consumers, fuel consumers, systems and its consumers and direct emitters."
    +459                f" Duplicated names are: {', '.join(duplicated_names)}"
    +460            )
    +461
    +462        if len(duplicated_fuel_names) > 0:
    +463            raise ValueError(
    +464                "Fuel type names must be unique across installations."
    +465                f" Duplicated names are: {', '.join(duplicated_fuel_names)}"
    +466            )
    +467        return self
    +
    + + +

    Ensure unique component names within installation.

    +
    + + +
    +
    + +
    + + def + get_graph(self) -> libecalc.dto.component_graph.ComponentGraph: + + + +
    + +
    469    def get_graph(self) -> ComponentGraph:
    +470        graph = ComponentGraph()
    +471        graph.add_node(self)
    +472        for installation in self.installations:
    +473            graph.add_subgraph(installation.get_graph())
    +474            graph.add_edge(self.id, installation.id)
    +475
    +476        return graph
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs.html b/docs/about/references/api/libecalc/dto/core_specs.html new file mode 100644 index 0000000000..75c0c28cad --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs.html @@ -0,0 +1,240 @@ + + + + + + + libecalc.dto.core_specs API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/base.html b/docs/about/references/api/libecalc/dto/core_specs/base.html new file mode 100644 index 0000000000..ab9718ee33 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/base.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.base

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html new file mode 100644 index 0000000000..70fb3a1e3d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/base/operational_settings.html @@ -0,0 +1,341 @@ + + + + + + + libecalc.dto.core_specs.base.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.base.operational_settings

    + + + + + + +
     1from abc import ABC, abstractmethod
    + 2from datetime import datetime
    + 3
    + 4from typing_extensions import Self
    + 5
    + 6from libecalc.dto.base import EcalcBaseModel
    + 7
    + 8
    + 9class OperationalSettings(ABC, EcalcBaseModel):
    +10    @abstractmethod
    +11    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +12        ...
    +
    + + +
    +
    + +
    + + class + OperationalSettings(abc.ABC, libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    10class OperationalSettings(ABC, EcalcBaseModel):
    +11    @abstractmethod
    +12    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +13        ...
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    +
    @abstractmethod
    + + def + get_subset_for_timestep(self, timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    11    @abstractmethod
    +12    def get_subset_for_timestep(self, timestep: datetime) -> Self:
    +13        ...
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/compressor.html b/docs/about/references/api/libecalc/dto/core_specs/compressor.html new file mode 100644 index 0000000000..3d996554e2 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/compressor.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.compressor

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html new file mode 100644 index 0000000000..42eac1fee2 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/compressor/operational_settings.html @@ -0,0 +1,394 @@ + + + + + + + libecalc.dto.core_specs.compressor.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.compressor.operational_settings

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 9from libecalc.dto.core_specs.base.operational_settings import OperationalSettings
    +10
    +11
    +12class CompressorOperationalSettings(OperationalSettings):
    +13    inlet_streams: List[TimeSeriesStreamConditions]
    +14    outlet_stream: TimeSeriesStreamConditions
    +15
    +16    timesteps: List[datetime]
    +17
    +18    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +19        """
    +20        For a given timestep, get the operational settings that is relevant
    +21        for that timestep only. Only valid for timesteps a part of the global timevector.
    +22        :param current_timestep: the timestep must be a part of the global timevector
    +23        :return:
    +24        """
    +25
    +26        return CompressorOperationalSettings(
    +27            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +28            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +29            timesteps=[current_timestep],
    +30        )
    +
    + + +
    +
    + +
    + + class + CompressorOperationalSettings(libecalc.dto.core_specs.base.operational_settings.OperationalSettings): + + + +
    + +
    13class CompressorOperationalSettings(OperationalSettings):
    +14    inlet_streams: List[TimeSeriesStreamConditions]
    +15    outlet_stream: TimeSeriesStreamConditions
    +16
    +17    timesteps: List[datetime]
    +18
    +19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return CompressorOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + get_subset_for_timestep(self, current_timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return CompressorOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    For a given timestep, get the operational settings that is relevant +for that timestep only. Only valid for timesteps a part of the global timevector.

    + +
    Parameters
    + +
      +
    • current_timestep: the timestep must be a part of the global timevector
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/pump.html b/docs/about/references/api/libecalc/dto/core_specs/pump.html new file mode 100644 index 0000000000..a1be5ff613 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/pump.html @@ -0,0 +1,237 @@ + + + + + + + libecalc.dto.core_specs.pump API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.pump

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html b/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html new file mode 100644 index 0000000000..da7c39608d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/pump/operational_settings.html @@ -0,0 +1,394 @@ + + + + + + + libecalc.dto.core_specs.pump.operational_settings API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.pump.operational_settings

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 9from libecalc.dto.core_specs.base.operational_settings import OperationalSettings
    +10
    +11
    +12class PumpOperationalSettings(OperationalSettings):
    +13    inlet_streams: List[TimeSeriesStreamConditions]
    +14    outlet_stream: TimeSeriesStreamConditions
    +15
    +16    timesteps: List[datetime]
    +17
    +18    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +19        """
    +20        For a given timestep, get the operational settings that is relevant
    +21        for that timestep only. Only valid for timesteps a part of the global timevector.
    +22        :param current_timestep: the timestep must be a part of the global timevector
    +23        :return:
    +24        """
    +25
    +26        return PumpOperationalSettings(
    +27            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +28            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +29            timesteps=[current_timestep],
    +30        )
    +
    + + +
    +
    + +
    + + class + PumpOperationalSettings(libecalc.dto.core_specs.base.operational_settings.OperationalSettings): + + + +
    + +
    13class PumpOperationalSettings(OperationalSettings):
    +14    inlet_streams: List[TimeSeriesStreamConditions]
    +15    outlet_stream: TimeSeriesStreamConditions
    +16
    +17    timesteps: List[datetime]
    +18
    +19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return PumpOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + get_subset_for_timestep(self, current_timestep: datetime.datetime) -> typing_extensions.Self: + + + +
    + +
    19    def get_subset_for_timestep(self, current_timestep: datetime) -> Self:
    +20        """
    +21        For a given timestep, get the operational settings that is relevant
    +22        for that timestep only. Only valid for timesteps a part of the global timevector.
    +23        :param current_timestep: the timestep must be a part of the global timevector
    +24        :return:
    +25        """
    +26
    +27        return PumpOperationalSettings(
    +28            inlet_streams=[stream_condition.for_timestep(current_timestep) for stream_condition in self.inlet_streams],
    +29            outlet_stream=self.outlet_stream.for_timestep(current_timestep),
    +30            timesteps=[current_timestep],
    +31        )
    +
    + + +

    For a given timestep, get the operational settings that is relevant +for that timestep only. Only valid for timesteps a part of the global timevector.

    + +
    Parameters
    + +
      +
    • current_timestep: the timestep must be a part of the global timevector
    • +
    + +
    Returns
    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/core_specs/system.html b/docs/about/references/api/libecalc/dto/core_specs/system.html new file mode 100644 index 0000000000..4fff21cb13 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/core_specs/system.html @@ -0,0 +1,233 @@ + + + + + + + libecalc.dto.core_specs.system API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.core_specs.system

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/emission.html b/docs/about/references/api/libecalc/dto/emission.html new file mode 100644 index 0000000000..ef06155873 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/emission.html @@ -0,0 +1,379 @@ + + + + + + + libecalc.dto.emission API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.emission

    + + + + + + +
     1from pydantic import field_validator
    + 2
    + 3from libecalc.dto.base import EcalcBaseModel
    + 4from libecalc.dto.utils.validators import EmissionNameStr, convert_expression
    + 5from libecalc.expression import Expression
    + 6
    + 7
    + 8class Emission(EcalcBaseModel):
    + 9    name: EmissionNameStr
    +10    factor: Expression  # Conversion factor for kg/day, i.e. fuel rate * factor -> kg/day
    +11
    +12    _convert_expression = field_validator("factor", mode="before")(convert_expression)
    +13
    +14    @field_validator("name", mode="before")
    +15    @classmethod
    +16    def convert_name(cls, name):
    +17        return name.lower()
    +
    + + +
    +
    + +
    + + class + Emission(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     9class Emission(EcalcBaseModel):
    +10    name: EmissionNameStr
    +11    factor: Expression  # Conversion factor for kg/day, i.e. fuel rate * factor -> kg/day
    +12
    +13    _convert_expression = field_validator("factor", mode="before")(convert_expression)
    +14
    +15    @field_validator("name", mode="before")
    +16    @classmethod
    +17    def convert_name(cls, name):
    +18        return name.lower()
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('name', mode='before')
    +
    @classmethod
    + + def + convert_name(cls, name): + + + +
    + +
    15    @field_validator("name", mode="before")
    +16    @classmethod
    +17    def convert_name(cls, name):
    +18        return name.lower()
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models.html b/docs/about/references/api/libecalc/dto/models.html new file mode 100644 index 0000000000..612c8e6304 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models.html @@ -0,0 +1,332 @@ + + + + + + + libecalc.dto.models API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models

    + + + + + + +
     1from typing import Union
    + 2
    + 3from pydantic import Field
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.models.compressor import (
    + 7    CompressorChart,
    + 8    CompressorConsumerFunction,
    + 9    CompressorModel,
    +10    CompressorSampled,
    +11    CompressorStage,
    +12    CompressorTrainSimplifiedWithKnownStages,
    +13    CompressorTrainSimplifiedWithUnknownStages,
    +14    CompressorWithTurbine,
    +15    FluidComposition,
    +16    FluidModel,
    +17    FluidStream,
    +18    InterstagePressureControl,
    +19    MultipleStreamsAndPressureStream,
    +20    MultipleStreamsCompressorStage,
    +21    SingleSpeedCompressorTrain,
    +22    VariableSpeedCompressorTrain,
    +23    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +24)
    +25
    +26from .base import ConsumerFunction, EnergyModel
    +27from .chart import (
    +28    ChartCurve,
    +29    GenericChartFromDesignPoint,
    +30    GenericChartFromInput,
    +31    SingleSpeedChart,
    +32    VariableSpeedChart,
    +33)
    +34from .consumer_system import (
    +35    CompressorSystemCompressor,
    +36    CompressorSystemConsumerFunction,
    +37    CompressorSystemOperationalSetting,
    +38    PumpSystemConsumerFunction,
    +39    PumpSystemOperationalSetting,
    +40    PumpSystemPump,
    +41    SystemOperationalSetting,
    +42)
    +43from .direct import DirectConsumerFunction
    +44from .generator_set import GeneratorSetSampled
    +45from .pump import PumpConsumerFunction, PumpModel
    +46from .sampled import EnergyModelSampled
    +47from .tabulated import TabulatedConsumerFunction, TabulatedData, Variables
    +48from .turbine import Turbine
    +49
    +50ElectricEnergyUsageModel = Annotated[
    +51    Union[
    +52        DirectConsumerFunction,
    +53        CompressorConsumerFunction,
    +54        CompressorSystemConsumerFunction,
    +55        PumpConsumerFunction,
    +56        TabulatedConsumerFunction,
    +57        PumpSystemConsumerFunction,
    +58    ],
    +59    Field(discriminator="typ"),
    +60]
    +61
    +62FuelEnergyUsageModel = Annotated[
    +63    Union[
    +64        DirectConsumerFunction,
    +65        CompressorConsumerFunction,
    +66        CompressorSystemConsumerFunction,
    +67        TabulatedConsumerFunction,
    +68    ],
    +69    Field(discriminator="typ"),
    +70]
    +71
    +72EnergyUsageModel = Annotated[
    +73    Union[
    +74        FuelEnergyUsageModel,
    +75        ElectricEnergyUsageModel,
    +76    ],
    +77    Field(discriminator="typ"),
    +78]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/base.html b/docs/about/references/api/libecalc/dto/models/base.html new file mode 100644 index 0000000000..871a8758ab --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/base.html @@ -0,0 +1,423 @@ + + + + + + + libecalc.dto.models.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.base

    + + + + + + +
     1from typing import Optional
    + 2
    + 3from pydantic import ConfigDict, field_validator
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.types import ConsumerType, EnergyUsageType
    + 7from libecalc.dto.utils.validators import convert_expression
    + 8from libecalc.expression import Expression
    + 9
    +10
    +11class ConsumerFunction(EcalcBaseModel):
    +12    typ: ConsumerType
    +13    energy_usage_type: EnergyUsageType
    +14    condition: Optional[Expression] = None
    +15
    +16    _convert_condition_to_expression = field_validator("condition", mode="before")(convert_expression)
    +17    model_config = ConfigDict(use_enum_values=True)
    +18
    +19
    +20class EnergyModel(EcalcBaseModel):
    +21    """Generic/template/protocol. Only for sub classing, not direct use."""
    +22
    +23    energy_usage_adjustment_constant: float
    +24    energy_usage_adjustment_factor: float
    +25    model_config = ConfigDict(use_enum_values=True)
    +
    + + +
    +
    + +
    + + class + ConsumerFunction(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class ConsumerFunction(EcalcBaseModel):
    +13    typ: ConsumerType
    +14    energy_usage_type: EnergyUsageType
    +15    condition: Optional[Expression] = None
    +16
    +17    _convert_condition_to_expression = field_validator("condition", mode="before")(convert_expression)
    +18    model_config = ConfigDict(use_enum_values=True)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    21class EnergyModel(EcalcBaseModel):
    +22    """Generic/template/protocol. Only for sub classing, not direct use."""
    +23
    +24    energy_usage_adjustment_constant: float
    +25    energy_usage_adjustment_factor: float
    +26    model_config = ConfigDict(use_enum_values=True)
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/chart.html b/docs/about/references/api/libecalc/dto/models/chart.html new file mode 100644 index 0000000000..0616fdbea8 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/chart.html @@ -0,0 +1,944 @@ + + + + + + + libecalc.dto.models.chart API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.chart

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3import numpy as np
    +  4from pydantic import Field, field_validator, model_validator
    +  5from typing_extensions import Annotated, Self
    +  6
    +  7from libecalc.common.logger import logger
    +  8from libecalc.dto.base import EcalcBaseModel
    +  9from libecalc.dto.types import ChartType
    + 10
    + 11
    + 12class ChartCurve(EcalcBaseModel):
    + 13    speed_rpm: float = Field(..., ge=0)
    + 14    rate_actual_m3_hour: List[Annotated[float, Field(ge=0)]]
    + 15    polytropic_head_joule_per_kg: List[Annotated[float, Field(ge=0)]]
    + 16    efficiency_fraction: List[Annotated[float, Field(ge=0, le=1)]]
    + 17
    + 18    @model_validator(mode="after")
    + 19    def validate_equal_lengths_and_sort(self) -> Self:
    + 20        rate = self.rate_actual_m3_hour
    + 21        head = self.polytropic_head_joule_per_kg
    + 22        efficiency = self.efficiency_fraction
    + 23
    + 24        if not len(rate) == len(head) == len(efficiency):
    + 25            raise ValueError("All chart curve data must have equal number of points")
    + 26
    + 27        if not len(rate) > 1:
    + 28            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    + 29
    + 30        # Sort all values by rate
    + 31        array = np.asarray([rate, head, efficiency]).T
    + 32        array_sorted = array[array[:, 0].argsort()]
    + 33
    + 34        self.rate_actual_m3_hour = list(array_sorted[:, 0])
    + 35        self.polytropic_head_joule_per_kg = list(array_sorted[:, 1])
    + 36        self.efficiency_fraction = list(array_sorted[:, 2])
    + 37
    + 38        if len(set(self.rate_actual_m3_hour)) != len(self.rate_actual_m3_hour):
    + 39            duplicate_rates = {x for x in self.rate_actual_m3_hour if self.rate_actual_m3_hour.count(x) > 1}
    + 40            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    + 41
    + 42        if not np.all(np.diff(np.asarray(self.polytropic_head_joule_per_kg)) <= 0):
    + 43            heads = self.polytropic_head_joule_per_kg
    + 44            rates = self.rate_actual_m3_hour
    + 45            logger.warning(
    + 46                "Head is increasing with rate in a ChartCurve."
    + 47                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    + 48                f" Given head values: {heads}"
    + 49                f" Given rate values: {rates}"
    + 50            )
    + 51
    + 52        return self
    + 53
    + 54    @property
    + 55    def rate(self) -> List[float]:
    + 56        return self.rate_actual_m3_hour
    + 57
    + 58    @property
    + 59    def head(self) -> List[float]:
    + 60        return self.polytropic_head_joule_per_kg
    + 61
    + 62    @property
    + 63    def efficiency(self) -> List[float]:
    + 64        return self.efficiency_fraction
    + 65
    + 66    @property
    + 67    def speed(self) -> float:
    + 68        return self.speed_rpm
    + 69
    + 70
    + 71class SingleSpeedChart(ChartCurve):
    + 72    typ: Literal[ChartType.SINGLE_SPEED] = ChartType.SINGLE_SPEED
    + 73
    + 74
    + 75class VariableSpeedChart(EcalcBaseModel):
    + 76    typ: Literal[ChartType.VARIABLE_SPEED] = ChartType.VARIABLE_SPEED
    + 77    curves: List[ChartCurve]
    + 78    control_margin: Optional[float] = None  # Todo: Raise warning if this is used in an un-supported model.
    + 79    design_rate: Optional[float] = Field(None, ge=0)
    + 80    design_head: Optional[float] = Field(None, ge=0)
    + 81
    + 82    @field_validator("curves")
    + 83    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    + 84        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    + 85        return sorted(curves, key=lambda x: x.speed)
    + 86
    + 87    @property
    + 88    def min_speed(self) -> float:
    + 89        return min([curve.speed for curve in self.curves])
    + 90
    + 91    @property
    + 92    def max_speed(self) -> float:
    + 93        return max([curve.speed for curve in self.curves])
    + 94
    + 95
    + 96class GenericChartFromDesignPoint(EcalcBaseModel):
    + 97    typ: Literal[ChartType.GENERIC_FROM_DESIGN_POINT] = ChartType.GENERIC_FROM_DESIGN_POINT
    + 98    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    + 99    design_rate_actual_m3_per_hour: float = Field(..., ge=0)
    +100    design_polytropic_head_J_per_kg: float = Field(..., ge=0)
    +101
    +102
    +103class GenericChartFromInput(EcalcBaseModel):
    +104    typ: Literal[ChartType.GENERIC_FROM_INPUT] = ChartType.GENERIC_FROM_INPUT
    +105    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +
    + + +
    +
    + +
    + + class + ChartCurve(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    13class ChartCurve(EcalcBaseModel):
    +14    speed_rpm: float = Field(..., ge=0)
    +15    rate_actual_m3_hour: List[Annotated[float, Field(ge=0)]]
    +16    polytropic_head_joule_per_kg: List[Annotated[float, Field(ge=0)]]
    +17    efficiency_fraction: List[Annotated[float, Field(ge=0, le=1)]]
    +18
    +19    @model_validator(mode="after")
    +20    def validate_equal_lengths_and_sort(self) -> Self:
    +21        rate = self.rate_actual_m3_hour
    +22        head = self.polytropic_head_joule_per_kg
    +23        efficiency = self.efficiency_fraction
    +24
    +25        if not len(rate) == len(head) == len(efficiency):
    +26            raise ValueError("All chart curve data must have equal number of points")
    +27
    +28        if not len(rate) > 1:
    +29            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    +30
    +31        # Sort all values by rate
    +32        array = np.asarray([rate, head, efficiency]).T
    +33        array_sorted = array[array[:, 0].argsort()]
    +34
    +35        self.rate_actual_m3_hour = list(array_sorted[:, 0])
    +36        self.polytropic_head_joule_per_kg = list(array_sorted[:, 1])
    +37        self.efficiency_fraction = list(array_sorted[:, 2])
    +38
    +39        if len(set(self.rate_actual_m3_hour)) != len(self.rate_actual_m3_hour):
    +40            duplicate_rates = {x for x in self.rate_actual_m3_hour if self.rate_actual_m3_hour.count(x) > 1}
    +41            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    +42
    +43        if not np.all(np.diff(np.asarray(self.polytropic_head_joule_per_kg)) <= 0):
    +44            heads = self.polytropic_head_joule_per_kg
    +45            rates = self.rate_actual_m3_hour
    +46            logger.warning(
    +47                "Head is increasing with rate in a ChartCurve."
    +48                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    +49                f" Given head values: {heads}"
    +50                f" Given rate values: {rates}"
    +51            )
    +52
    +53        return self
    +54
    +55    @property
    +56    def rate(self) -> List[float]:
    +57        return self.rate_actual_m3_hour
    +58
    +59    @property
    +60    def head(self) -> List[float]:
    +61        return self.polytropic_head_joule_per_kg
    +62
    +63    @property
    +64    def efficiency(self) -> List[float]:
    +65        return self.efficiency_fraction
    +66
    +67    @property
    +68    def speed(self) -> float:
    +69        return self.speed_rpm
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_equal_lengths_and_sort(self) -> typing_extensions.Self: + + + +
    + +
    19    @model_validator(mode="after")
    +20    def validate_equal_lengths_and_sort(self) -> Self:
    +21        rate = self.rate_actual_m3_hour
    +22        head = self.polytropic_head_joule_per_kg
    +23        efficiency = self.efficiency_fraction
    +24
    +25        if not len(rate) == len(head) == len(efficiency):
    +26            raise ValueError("All chart curve data must have equal number of points")
    +27
    +28        if not len(rate) > 1:
    +29            raise ValueError("A chart curve can not be defined by a single point. At least two points must be given.")
    +30
    +31        # Sort all values by rate
    +32        array = np.asarray([rate, head, efficiency]).T
    +33        array_sorted = array[array[:, 0].argsort()]
    +34
    +35        self.rate_actual_m3_hour = list(array_sorted[:, 0])
    +36        self.polytropic_head_joule_per_kg = list(array_sorted[:, 1])
    +37        self.efficiency_fraction = list(array_sorted[:, 2])
    +38
    +39        if len(set(self.rate_actual_m3_hour)) != len(self.rate_actual_m3_hour):
    +40            duplicate_rates = {x for x in self.rate_actual_m3_hour if self.rate_actual_m3_hour.count(x) > 1}
    +41            logger.warning(f"Duplicate rate values in ChartCurve: {duplicate_rates}")
    +42
    +43        if not np.all(np.diff(np.asarray(self.polytropic_head_joule_per_kg)) <= 0):
    +44            heads = self.polytropic_head_joule_per_kg
    +45            rates = self.rate_actual_m3_hour
    +46            logger.warning(
    +47                "Head is increasing with rate in a ChartCurve."
    +48                " Interpolations are based on the assumption of an inverse monotonic function between head and rate."
    +49                f" Given head values: {heads}"
    +50                f" Given rate values: {rates}"
    +51            )
    +52
    +53        return self
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SingleSpeedChart(ChartCurve): + + + +
    + +
    72class SingleSpeedChart(ChartCurve):
    +73    typ: Literal[ChartType.SINGLE_SPEED] = ChartType.SINGLE_SPEED
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + VariableSpeedChart(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    76class VariableSpeedChart(EcalcBaseModel):
    +77    typ: Literal[ChartType.VARIABLE_SPEED] = ChartType.VARIABLE_SPEED
    +78    curves: List[ChartCurve]
    +79    control_margin: Optional[float] = None  # Todo: Raise warning if this is used in an un-supported model.
    +80    design_rate: Optional[float] = Field(None, ge=0)
    +81    design_head: Optional[float] = Field(None, ge=0)
    +82
    +83    @field_validator("curves")
    +84    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    +85        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    +86        return sorted(curves, key=lambda x: x.speed)
    +87
    +88    @property
    +89    def min_speed(self) -> float:
    +90        return min([curve.speed for curve in self.curves])
    +91
    +92    @property
    +93    def max_speed(self) -> float:
    +94        return max([curve.speed for curve in self.curves])
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('curves')
    + + def + sort_chart_curves_by_speed( cls, curves: List[libecalc.dto.models.chart.ChartCurve]) -> List[libecalc.dto.models.chart.ChartCurve]: + + + +
    + +
    83    @field_validator("curves")
    +84    def sort_chart_curves_by_speed(cls, curves: List[ChartCurve]) -> List[ChartCurve]:
    +85        """Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly."""
    +86        return sorted(curves, key=lambda x: x.speed)
    +
    + + +

    Note: It is essential that the sort the curves by speed in order to set up the interpolations correctly.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + GenericChartFromDesignPoint(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     97class GenericChartFromDesignPoint(EcalcBaseModel):
    + 98    typ: Literal[ChartType.GENERIC_FROM_DESIGN_POINT] = ChartType.GENERIC_FROM_DESIGN_POINT
    + 99    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +100    design_rate_actual_m3_per_hour: float = Field(..., ge=0)
    +101    design_polytropic_head_J_per_kg: float = Field(..., ge=0)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + GenericChartFromInput(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    104class GenericChartFromInput(EcalcBaseModel):
    +105    typ: Literal[ChartType.GENERIC_FROM_INPUT] = ChartType.GENERIC_FROM_INPUT
    +106    polytropic_efficiency_fraction: float = Field(..., ge=0, le=1)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor.html b/docs/about/references/api/libecalc/dto/models/compressor.html new file mode 100644 index 0000000000..ff82c1c93d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor.html @@ -0,0 +1,283 @@ + + + + + + + libecalc.dto.models.compressor API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor

    + + + + + + +
     1from typing import Union
    + 2
    + 3from .base import CompressorConsumerFunction, CompressorWithTurbine
    + 4from .chart import CompressorChart
    + 5from .fluid import (
    + 6    FluidComposition,
    + 7    FluidModel,
    + 8    FluidStream,
    + 9    MultipleStreamsAndPressureStream,
    +10)
    +11from .sampled import CompressorSampled
    +12from .stage import (
    +13    CompressorStage,
    +14    InterstagePressureControl,
    +15    MultipleStreamsCompressorStage,
    +16)
    +17from .train import (
    +18    CompressorTrainSimplifiedWithKnownStages,
    +19    CompressorTrainSimplifiedWithUnknownStages,
    +20    SingleSpeedCompressorTrain,
    +21    VariableSpeedCompressorTrain,
    +22    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +23)
    +24
    +25CompressorModel = Union[
    +26    CompressorSampled,
    +27    CompressorTrainSimplifiedWithUnknownStages,
    +28    CompressorTrainSimplifiedWithKnownStages,
    +29    CompressorWithTurbine,
    +30    VariableSpeedCompressorTrain,
    +31    SingleSpeedCompressorTrain,
    +32    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +33]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/base.html b/docs/about/references/api/libecalc/dto/models/compressor/base.html new file mode 100644 index 0000000000..6bda2e30c9 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/base.html @@ -0,0 +1,485 @@ + + + + + + + libecalc.dto.models.compressor.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.base

    + + + + + + +
     1from typing import List, Literal, Optional, Union
    + 2
    + 3from pydantic import Field, field_validator
    + 4
    + 5from libecalc.dto.models.base import ConsumerFunction, EnergyModel
    + 6from libecalc.dto.models.compressor.sampled import CompressorSampled
    + 7from libecalc.dto.models.compressor.train import (
    + 8    CompressorTrainSimplifiedWithKnownStages,
    + 9    CompressorTrainSimplifiedWithUnknownStages,
    +10    SingleSpeedCompressorTrain,
    +11    VariableSpeedCompressorTrain,
    +12    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +13)
    +14from libecalc.dto.models.turbine import Turbine
    +15from libecalc.dto.types import ConsumerType, EnergyModelType
    +16from libecalc.dto.utils.validators import convert_expression, convert_expressions
    +17from libecalc.expression import Expression
    +18
    +19
    +20class CompressorWithTurbine(EnergyModel):
    +21    typ: Literal[EnergyModelType.COMPRESSOR_WITH_TURBINE] = EnergyModelType.COMPRESSOR_WITH_TURBINE
    +22    compressor_train: Union[
    +23        CompressorSampled,
    +24        CompressorTrainSimplifiedWithKnownStages,
    +25        CompressorTrainSimplifiedWithUnknownStages,
    +26        SingleSpeedCompressorTrain,
    +27        VariableSpeedCompressorTrain,
    +28        VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +29    ] = Field(..., discriminator="typ")
    +30    turbine: Turbine
    +31
    +32
    +33CompressorModel = Union[
    +34    CompressorSampled,
    +35    CompressorTrainSimplifiedWithUnknownStages,
    +36    CompressorTrainSimplifiedWithKnownStages,
    +37    CompressorWithTurbine,
    +38    VariableSpeedCompressorTrain,
    +39    SingleSpeedCompressorTrain,
    +40    VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +41]
    +42
    +43
    +44class CompressorConsumerFunction(ConsumerFunction):
    +45    typ: Literal[ConsumerType.COMPRESSOR] = ConsumerType.COMPRESSOR
    +46    power_loss_factor: Optional[Expression] = None
    +47    model: CompressorModel = Field(..., discriminator="typ")
    +48    rate_standard_m3_day: Union[Expression, List[Expression]]
    +49    suction_pressure: Optional[Expression] = None
    +50    discharge_pressure: Optional[Expression] = None
    +51    interstage_control_pressure: Optional[Expression] = None
    +52    # Todo: add pressure_control_first_part, pressure_control_last_part and stage_number_interstage_pressure
    +53    # TODO: validate power loss factor wrt energy usage type
    +54    # validate energy function has the same energy_usage_type
    +55
    +56    _convert_expressions = field_validator(
    +57        "suction_pressure",
    +58        "discharge_pressure",
    +59        "power_loss_factor",
    +60        "interstage_control_pressure",
    +61        mode="before",
    +62    )(convert_expression)
    +63    _convert_rate_expressions = field_validator(
    +64        "rate_standard_m3_day",
    +65        mode="before",
    +66    )(convert_expressions)
    +
    + + +
    +
    + +
    + + class + CompressorWithTurbine(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    21class CompressorWithTurbine(EnergyModel):
    +22    typ: Literal[EnergyModelType.COMPRESSOR_WITH_TURBINE] = EnergyModelType.COMPRESSOR_WITH_TURBINE
    +23    compressor_train: Union[
    +24        CompressorSampled,
    +25        CompressorTrainSimplifiedWithKnownStages,
    +26        CompressorTrainSimplifiedWithUnknownStages,
    +27        SingleSpeedCompressorTrain,
    +28        VariableSpeedCompressorTrain,
    +29        VariableSpeedCompressorTrainMultipleStreamsAndPressures,
    +30    ] = Field(..., discriminator="typ")
    +31    turbine: Turbine
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    45class CompressorConsumerFunction(ConsumerFunction):
    +46    typ: Literal[ConsumerType.COMPRESSOR] = ConsumerType.COMPRESSOR
    +47    power_loss_factor: Optional[Expression] = None
    +48    model: CompressorModel = Field(..., discriminator="typ")
    +49    rate_standard_m3_day: Union[Expression, List[Expression]]
    +50    suction_pressure: Optional[Expression] = None
    +51    discharge_pressure: Optional[Expression] = None
    +52    interstage_control_pressure: Optional[Expression] = None
    +53    # Todo: add pressure_control_first_part, pressure_control_last_part and stage_number_interstage_pressure
    +54    # TODO: validate power loss factor wrt energy usage type
    +55    # validate energy function has the same energy_usage_type
    +56
    +57    _convert_expressions = field_validator(
    +58        "suction_pressure",
    +59        "discharge_pressure",
    +60        "power_loss_factor",
    +61        "interstage_control_pressure",
    +62        mode="before",
    +63    )(convert_expression)
    +64    _convert_rate_expressions = field_validator(
    +65        "rate_standard_m3_day",
    +66        mode="before",
    +67    )(convert_expressions)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/chart.html b/docs/about/references/api/libecalc/dto/models/compressor/chart.html new file mode 100644 index 0000000000..c55bc495cc --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/chart.html @@ -0,0 +1,262 @@ + + + + + + + libecalc.dto.models.compressor.chart API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.chart

    + + + + + + +
     1from typing import Union
    + 2
    + 3from pydantic import Field
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.models.chart import (
    + 7    GenericChartFromDesignPoint,
    + 8    GenericChartFromInput,
    + 9    SingleSpeedChart,
    +10    VariableSpeedChart,
    +11)
    +12
    +13CompressorChart = Annotated[
    +14    Union[
    +15        GenericChartFromInput,
    +16        GenericChartFromDesignPoint,
    +17        VariableSpeedChart,
    +18        SingleSpeedChart,
    +19    ],
    +20    Field(discriminator="typ"),
    +21]
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/fluid.html b/docs/about/references/api/libecalc/dto/models/compressor/fluid.html new file mode 100644 index 0000000000..417cc793ac --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/fluid.html @@ -0,0 +1,762 @@ + + + + + + + libecalc.dto.models.compressor.fluid API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.fluid

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from typing import Optional
    + 4
    + 5from pydantic import Field, model_validator
    + 6
    + 7from libecalc.dto.base import EcalcBaseModel
    + 8from libecalc.dto.types import EoSModel, FluidStreamType
    + 9
    +10
    +11class FluidComposition(EcalcBaseModel):
    +12    water: float = Field(0.0, ge=0.0)
    +13    nitrogen: float = Field(0.0, ge=0.0)
    +14    CO2: float = Field(0.0, ge=0.0)
    +15    methane: float = Field(0.0, ge=0.0)
    +16    ethane: float = Field(0.0, ge=0.0)
    +17    propane: float = Field(0.0, ge=0.0)
    +18    i_butane: float = Field(0.0, ge=0.0)
    +19    n_butane: float = Field(0.0, ge=0.0)
    +20    i_pentane: float = Field(0.0, ge=0.0)
    +21    n_pentane: float = Field(0.0, ge=0.0)
    +22    n_hexane: float = Field(0.0, ge=0.0)
    +23
    +24
    +25class FluidModel(EcalcBaseModel):
    +26    eos_model: EoSModel
    +27    composition: FluidComposition
    +28
    +29
    +30class FluidStream(FluidModel):
    +31    pressure_bara: float
    +32    temperature_kelvin: float
    +33    density_kg_per_m3: float
    +34    kappa: float
    +35    z: float
    +36
    +37    @classmethod
    +38    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +39        return cls(
    +40            eos_model=fluid_stream.fluid_model.eos_model,
    +41            composition=fluid_stream.fluid_model.composition,
    +42            pressure_bara=fluid_stream.pressure_bara,
    +43            temperature_kelvin=fluid_stream.temperature_kelvin,
    +44            density_kg_per_m3=fluid_stream.density,
    +45            kappa=fluid_stream.kappa,
    +46            z=fluid_stream.z,
    +47        )
    +48
    +49
    +50class MultipleStreamsAndPressureStream(EcalcBaseModel):
    +51    name: str
    +52    typ: FluidStreamType
    +53    fluid_model: Optional[FluidModel] = None
    +54
    +55    @model_validator(mode="after")
    +56    def validate_stream(self):
    +57        stream_name, stream_type, stream_fluid_model = (
    +58            self.name,
    +59            self.typ,
    +60            self.fluid_model,
    +61        )
    +62        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +63            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +64        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +65            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +66        return self
    +
    + + +
    +
    + +
    + + class + FluidComposition(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class FluidComposition(EcalcBaseModel):
    +13    water: float = Field(0.0, ge=0.0)
    +14    nitrogen: float = Field(0.0, ge=0.0)
    +15    CO2: float = Field(0.0, ge=0.0)
    +16    methane: float = Field(0.0, ge=0.0)
    +17    ethane: float = Field(0.0, ge=0.0)
    +18    propane: float = Field(0.0, ge=0.0)
    +19    i_butane: float = Field(0.0, ge=0.0)
    +20    n_butane: float = Field(0.0, ge=0.0)
    +21    i_pentane: float = Field(0.0, ge=0.0)
    +22    n_pentane: float = Field(0.0, ge=0.0)
    +23    n_hexane: float = Field(0.0, ge=0.0)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + FluidModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    26class FluidModel(EcalcBaseModel):
    +27    eos_model: EoSModel
    +28    composition: FluidComposition
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStream(FluidModel): + + + +
    + +
    31class FluidStream(FluidModel):
    +32    pressure_bara: float
    +33    temperature_kelvin: float
    +34    density_kg_per_m3: float
    +35    kappa: float
    +36    z: float
    +37
    +38    @classmethod
    +39    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +40        return cls(
    +41            eos_model=fluid_stream.fluid_model.eos_model,
    +42            composition=fluid_stream.fluid_model.composition,
    +43            pressure_bara=fluid_stream.pressure_bara,
    +44            temperature_kelvin=fluid_stream.temperature_kelvin,
    +45            density_kg_per_m3=fluid_stream.density,
    +46            kappa=fluid_stream.kappa,
    +47            z=fluid_stream.z,
    +48        )
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @classmethod
    + + def + from_fluid_domain_object(cls, fluid_stream) -> libecalc.dto.models.compressor.fluid.FluidStream: + + + +
    + +
    38    @classmethod
    +39    def from_fluid_domain_object(cls, fluid_stream) -> FluidStream:
    +40        return cls(
    +41            eos_model=fluid_stream.fluid_model.eos_model,
    +42            composition=fluid_stream.fluid_model.composition,
    +43            pressure_bara=fluid_stream.pressure_bara,
    +44            temperature_kelvin=fluid_stream.temperature_kelvin,
    +45            density_kg_per_m3=fluid_stream.density,
    +46            kappa=fluid_stream.kappa,
    +47            z=fluid_stream.z,
    +48        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + MultipleStreamsAndPressureStream(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    51class MultipleStreamsAndPressureStream(EcalcBaseModel):
    +52    name: str
    +53    typ: FluidStreamType
    +54    fluid_model: Optional[FluidModel] = None
    +55
    +56    @model_validator(mode="after")
    +57    def validate_stream(self):
    +58        stream_name, stream_type, stream_fluid_model = (
    +59            self.name,
    +60            self.typ,
    +61            self.fluid_model,
    +62        )
    +63        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +64            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +65        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +66            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +67        return self
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_stream(self): + + + +
    + +
    56    @model_validator(mode="after")
    +57    def validate_stream(self):
    +58        stream_name, stream_type, stream_fluid_model = (
    +59            self.name,
    +60            self.typ,
    +61            self.fluid_model,
    +62        )
    +63        if stream_type == FluidStreamType.INGOING and not isinstance(stream_fluid_model, FluidModel):
    +64            raise ValueError(f"Stream {stream_name} is of type {stream_type} and needs a fluid model to be defined")
    +65        if stream_type == FluidStreamType.OUTGOING and isinstance(stream_fluid_model, FluidModel):
    +66            raise ValueError(f"Stream {stream_name} is of type {stream_type} and should not have a fluid model defined")
    +67        return self
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/sampled.html b/docs/about/references/api/libecalc/dto/models/compressor/sampled.html new file mode 100644 index 0000000000..163488b83c --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/sampled.html @@ -0,0 +1,454 @@ + + + + + + + libecalc.dto.models.compressor.sampled API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.sampled

    + + + + + + +
     1from typing import List, Literal, Optional
    + 2
    + 3from pydantic import Field, model_validator
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.models.base import EnergyModel
    + 7from libecalc.dto.types import EnergyModelType, EnergyUsageType
    + 8
    + 9
    +10class CompressorSampled(EnergyModel):
    +11    typ: Literal[EnergyModelType.COMPRESSOR_SAMPLED] = EnergyModelType.COMPRESSOR_SAMPLED
    +12    energy_usage_type: EnergyUsageType
    +13    energy_usage_values: List[Annotated[float, Field(ge=0)]]
    +14    rate_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +15    suction_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +16    discharge_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +17    power_interpolation_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +18
    +19    # skip_on_failure required if not pre=True, we don't need validation of lengths if other validations fails
    +20    @model_validator(mode="after")
    +21    def validate_equal_list_lengths(self):
    +22        number_of_data_points = len(self.energy_usage_values)
    +23        for variable_name in (
    +24            "rate_values",
    +25            "suction_pressure_values",
    +26            "discharge_pressure_values",
    +27            "power_interpolation_values",
    +28        ):
    +29            variable = getattr(self, variable_name)
    +30            if variable is not None:
    +31                if len(variable) != number_of_data_points:
    +32                    raise ValueError(
    +33                        f"{variable_name} has wrong number of points. "
    +34                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +35                    )
    +36        return self
    +37
    +38    @model_validator(mode="before")
    +39    def validate_minimum_one_variable(cls, values):
    +40        rate_not_given = "rate_values" not in values
    +41        suction_pressure_not_given = "suction_pressure_values" not in values
    +42        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +43        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +44            raise ValueError(
    +45                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +46            )
    +47        return values
    +
    + + +
    +
    + +
    + + class + CompressorSampled(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    11class CompressorSampled(EnergyModel):
    +12    typ: Literal[EnergyModelType.COMPRESSOR_SAMPLED] = EnergyModelType.COMPRESSOR_SAMPLED
    +13    energy_usage_type: EnergyUsageType
    +14    energy_usage_values: List[Annotated[float, Field(ge=0)]]
    +15    rate_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +16    suction_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +17    discharge_pressure_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +18    power_interpolation_values: Optional[List[Annotated[float, Field(ge=0)]]] = None
    +19
    +20    # skip_on_failure required if not pre=True, we don't need validation of lengths if other validations fails
    +21    @model_validator(mode="after")
    +22    def validate_equal_list_lengths(self):
    +23        number_of_data_points = len(self.energy_usage_values)
    +24        for variable_name in (
    +25            "rate_values",
    +26            "suction_pressure_values",
    +27            "discharge_pressure_values",
    +28            "power_interpolation_values",
    +29        ):
    +30            variable = getattr(self, variable_name)
    +31            if variable is not None:
    +32                if len(variable) != number_of_data_points:
    +33                    raise ValueError(
    +34                        f"{variable_name} has wrong number of points. "
    +35                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +36                    )
    +37        return self
    +38
    +39    @model_validator(mode="before")
    +40    def validate_minimum_one_variable(cls, values):
    +41        rate_not_given = "rate_values" not in values
    +42        suction_pressure_not_given = "suction_pressure_values" not in values
    +43        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +44        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +45            raise ValueError(
    +46                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +47            )
    +48        return values
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_equal_list_lengths(self): + + + +
    + +
    21    @model_validator(mode="after")
    +22    def validate_equal_list_lengths(self):
    +23        number_of_data_points = len(self.energy_usage_values)
    +24        for variable_name in (
    +25            "rate_values",
    +26            "suction_pressure_values",
    +27            "discharge_pressure_values",
    +28            "power_interpolation_values",
    +29        ):
    +30            variable = getattr(self, variable_name)
    +31            if variable is not None:
    +32                if len(variable) != number_of_data_points:
    +33                    raise ValueError(
    +34                        f"{variable_name} has wrong number of points. "
    +35                        f"Should have {number_of_data_points} (equal to number of energy usage value points)"
    +36                    )
    +37        return self
    +
    + + + + +
    +
    + +
    +
    @model_validator(mode='before')
    + + def + validate_minimum_one_variable(cls, values): + + + +
    + +
    39    @model_validator(mode="before")
    +40    def validate_minimum_one_variable(cls, values):
    +41        rate_not_given = "rate_values" not in values
    +42        suction_pressure_not_given = "suction_pressure_values" not in values
    +43        discharge_pressure_not_given = "discharge_pressure_values" not in values
    +44        if rate_not_given and suction_pressure_not_given and discharge_pressure_not_given:
    +45            raise ValueError(
    +46                "Need at least one variable for CompressorTrainSampled (rate, suction_pressure or discharge_pressure)"
    +47            )
    +48        return values
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/stage.html b/docs/about/references/api/libecalc/dto/models/compressor/stage.html new file mode 100644 index 0000000000..d448ab5c38 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/stage.html @@ -0,0 +1,522 @@ + + + + + + + libecalc.dto.models.compressor.stage API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.stage

    + + + + + + +
     1from typing import List, Optional
    + 2
    + 3from pydantic import Field
    + 4from typing_extensions import Annotated
    + 5
    + 6from libecalc.dto.base import EcalcBaseModel
    + 7from libecalc.dto.models.compressor.chart import CompressorChart, VariableSpeedChart
    + 8from libecalc.dto.types import FixedSpeedPressureControl
    + 9
    +10
    +11class CompressorStage(EcalcBaseModel):
    +12    compressor_chart: CompressorChart
    +13    inlet_temperature_kelvin: Annotated[float, Field(ge=0)]
    +14    pressure_drop_before_stage: Annotated[float, Field(ge=0)]
    +15    remove_liquid_after_cooling: bool
    +16    control_margin: Annotated[float, Field(ge=0, le=1)] = 0.0  # Todo: this probably belong to the chart, not the stage.
    +17
    +18
    +19class InterstagePressureControl(EcalcBaseModel):
    +20    upstream_pressure_control: FixedSpeedPressureControl
    +21    downstream_pressure_control: FixedSpeedPressureControl
    +22
    +23
    +24class MultipleStreamsCompressorStage(CompressorStage):
    +25    """Special case for multiple streams model."""
    +26
    +27    compressor_chart: VariableSpeedChart
    +28    stream_reference: Optional[List[str]] = None
    +29    interstage_pressure_control: Optional[InterstagePressureControl] = None
    +30
    +31    @property
    +32    def has_control_pressure(self):
    +33        return self.interstage_pressure_control is not None
    +
    + + +
    +
    + +
    + + class + CompressorStage(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    12class CompressorStage(EcalcBaseModel):
    +13    compressor_chart: CompressorChart
    +14    inlet_temperature_kelvin: Annotated[float, Field(ge=0)]
    +15    pressure_drop_before_stage: Annotated[float, Field(ge=0)]
    +16    remove_liquid_after_cooling: bool
    +17    control_margin: Annotated[float, Field(ge=0, le=1)] = 0.0  # Todo: this probably belong to the chart, not the stage.
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + InterstagePressureControl(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    20class InterstagePressureControl(EcalcBaseModel):
    +21    upstream_pressure_control: FixedSpeedPressureControl
    +22    downstream_pressure_control: FixedSpeedPressureControl
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + MultipleStreamsCompressorStage(CompressorStage): + + + +
    + +
    25class MultipleStreamsCompressorStage(CompressorStage):
    +26    """Special case for multiple streams model."""
    +27
    +28    compressor_chart: VariableSpeedChart
    +29    stream_reference: Optional[List[str]] = None
    +30    interstage_pressure_control: Optional[InterstagePressureControl] = None
    +31
    +32    @property
    +33    def has_control_pressure(self):
    +34        return self.interstage_pressure_control is not None
    +
    + + +

    Special case for multiple streams model.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/compressor/train.html b/docs/about/references/api/libecalc/dto/models/compressor/train.html new file mode 100644 index 0000000000..dbea80dfec --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/compressor/train.html @@ -0,0 +1,999 @@ + + + + + + + libecalc.dto.models.compressor.train API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.compressor.train

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3from pydantic import Field, field_validator
    +  4from typing_extensions import Annotated
    +  5
    +  6from libecalc.dto.models.base import EnergyModel
    +  7from libecalc.dto.models.compressor.chart import SingleSpeedChart, VariableSpeedChart
    +  8from libecalc.dto.models.compressor.fluid import (
    +  9    FluidModel,
    + 10    MultipleStreamsAndPressureStream,
    + 11)
    + 12from libecalc.dto.models.compressor.stage import (
    + 13    CompressorStage,
    + 14    MultipleStreamsCompressorStage,
    + 15)
    + 16from libecalc.dto.types import EnergyModelType, FixedSpeedPressureControl
    + 17
    + 18
    + 19class CompressorTrain(EnergyModel):
    + 20    typ: EnergyModelType
    + 21    stages: List[CompressorStage]
    + 22    fluid_model: FluidModel
    + 23    calculate_max_rate: bool = False
    + 24    maximum_power: Optional[float] = None
    + 25    pressure_control: FixedSpeedPressureControl
    + 26
    + 27
    + 28class CompressorTrainSimplifiedWithKnownStages(CompressorTrain):
    + 29    typ: Literal[
    + 30        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    + 31    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    + 32
    + 33    # Not in use:
    + 34    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    + 35
    + 36    @field_validator("stages")
    + 37    @classmethod
    + 38    def _validate_stages(cls, stages):
    + 39        for stage in stages:
    + 40            if isinstance(stage.compressor_chart, SingleSpeedChart):
    + 41                raise ValueError(
    + 42                    "Simplified Compressor Train does not support Single Speed Compressor Chart."
    + 43                    f" Given type was {type(stage.compressor_chart)}"
    + 44                )
    + 45        return stages
    + 46
    + 47
    + 48class CompressorTrainSimplifiedWithUnknownStages(CompressorTrain):
    + 49    """Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed.
    + 50    Will be constrained by a maximum pressure ratio per stage.
    + 51    """
    + 52
    + 53    typ: Literal[
    + 54        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    + 55    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    + 56    stage: CompressorStage
    + 57    maximum_pressure_ratio_per_stage: Annotated[float, Field(ge=0)]
    + 58
    + 59    # Not in use:
    + 60    stages: List[CompressorStage] = []  # Not relevant since the stage is Unknown
    + 61    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    + 62
    + 63    @field_validator("stage")
    + 64    @classmethod
    + 65    def _validate_stages(cls, stage):
    + 66        if isinstance(stage.compressor_chart, SingleSpeedChart):
    + 67            raise ValueError(
    + 68                "Simplified Compressor Train does not support Single Speed Compressor Chart."
    + 69                f" Given type was {type(stage.compressor_chart)}"
    + 70            )
    + 71        return stage
    + 72
    + 73
    + 74class SingleSpeedCompressorTrain(CompressorTrain):
    + 75    """Single speed train has a control mechanism for max discharge pressure."""
    + 76
    + 77    typ: Literal[
    + 78        EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 79    ] = EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 80    maximum_discharge_pressure: Optional[Annotated[float, Field(ge=0)]] = None
    + 81
    + 82    @field_validator("stages")
    + 83    @classmethod
    + 84    def _validate_stages(cls, stages):
    + 85        for stage in stages:
    + 86            if not isinstance(stage.compressor_chart, SingleSpeedChart):
    + 87                raise ValueError(
    + 88                    "Single Speed Compressor train only accepts Single Speed Compressor Charts."
    + 89                    f" Given type was {type(stage.compressor_chart)}"
    + 90                )
    + 91        return stages
    + 92
    + 93
    + 94class VariableSpeedCompressorTrain(CompressorTrain):
    + 95    typ: Literal[
    + 96        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 97    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 98
    + 99    @field_validator("stages")
    +100    @classmethod
    +101    def _validate_stages(cls, stages):
    +102        min_speed_per_stage = []
    +103        max_speed_per_stage = []
    +104        for stage in stages:
    +105            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +106                raise ValueError(
    +107                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +108                    f" Given type was {type(stage.compressor_chart)}"
    +109                )
    +110            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +111            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +112        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +113            raise ValueError(
    +114                "Variable speed compressors in compressor train have incompatible compressor charts."
    +115                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +116                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +117            )
    +118        return stages
    +119
    +120
    +121class VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain):
    +122    """This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and
    +123    possibly an interstage control pressure
    +124    The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of
    +125    the streams, as this determine the mapping of which rate is mapped to which stream at evaluation
    +126    Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do
    +127    the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement
    +128    in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax
    +129    and the dto similar.
    +130    """
    +131
    +132    typ: Literal[
    +133        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +134    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +135    streams: List[MultipleStreamsAndPressureStream]
    +136    stages: List[MultipleStreamsCompressorStage]
    +137
    +138    # Not in use:
    +139    fluid_model: Optional[FluidModel] = None  # Not relevant. set by the individual stream.
    +140
    +141    @field_validator("stages")
    +142    @classmethod
    +143    def _validate_stages(cls, stages):
    +144        if sum([stage.has_control_pressure for stage in stages]) > 1:
    +145            raise ValueError("Only one interstage pressure should be defined for a compressor train")
    +146        min_speed_per_stage = []
    +147        max_speed_per_stage = []
    +148        for stage in stages:
    +149            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +150                raise ValueError(
    +151                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +152                    f" Given type was {type(stage.compressor_chart)}"
    +153                )
    +154            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +155            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +156        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +157            raise ValueError(
    +158                "Variable speed compressors in compressor train have incompatible compressor charts."
    +159                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +160                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +161            )
    +162        return stages
    +163
    +164    @property
    +165    def has_interstage_pressure(self):
    +166        return any(stage.has_control_pressure for stage in self.stages)
    +167
    +168    @property
    +169    def stage_number_interstage_pressure(self):
    +170        """Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the
    +171        inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train
    +172        (zero indexed, first stage is stage_0).
    +173        """
    +174        return (
    +175            [i for i, stage in enumerate(self.stages) if stage.has_control_pressure][0]
    +176            if self.has_interstage_pressure
    +177            else None
    +178        )
    +179
    +180    @property
    +181    def stream_references(self):
    +182        return {
    +183            stream_ref: i
    +184            for i, stage in enumerate(self.stages)
    +185            if stage.stream_reference
    +186            for stream_ref in stage.stream_reference
    +187        }
    +188
    +189    @property
    +190    def pressure_control_first_part(self) -> FixedSpeedPressureControl:
    +191        return (
    +192            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.upstream_pressure_control
    +193            if self.stage_number_interstage_pressure
    +194            else None
    +195        )
    +196
    +197    @property
    +198    def pressure_control_last_part(self) -> FixedSpeedPressureControl:
    +199        return (
    +200            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.downstream_pressure_control
    +201            if self.stage_number_interstage_pressure
    +202            else None
    +203        )
    +
    + + +
    +
    + +
    + + class + CompressorTrain(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    20class CompressorTrain(EnergyModel):
    +21    typ: EnergyModelType
    +22    stages: List[CompressorStage]
    +23    fluid_model: FluidModel
    +24    calculate_max_rate: bool = False
    +25    maximum_power: Optional[float] = None
    +26    pressure_control: FixedSpeedPressureControl
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorTrainSimplifiedWithKnownStages(CompressorTrain): + + + +
    + +
    29class CompressorTrainSimplifiedWithKnownStages(CompressorTrain):
    +30    typ: Literal[
    +31        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    +32    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES
    +33
    +34    # Not in use:
    +35    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    +36
    +37    @field_validator("stages")
    +38    @classmethod
    +39    def _validate_stages(cls, stages):
    +40        for stage in stages:
    +41            if isinstance(stage.compressor_chart, SingleSpeedChart):
    +42                raise ValueError(
    +43                    "Simplified Compressor Train does not support Single Speed Compressor Chart."
    +44                    f" Given type was {type(stage.compressor_chart)}"
    +45                )
    +46        return stages
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorTrainSimplifiedWithUnknownStages(CompressorTrain): + + + +
    + +
    49class CompressorTrainSimplifiedWithUnknownStages(CompressorTrain):
    +50    """Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed.
    +51    Will be constrained by a maximum pressure ratio per stage.
    +52    """
    +53
    +54    typ: Literal[
    +55        EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    +56    ] = EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES
    +57    stage: CompressorStage
    +58    maximum_pressure_ratio_per_stage: Annotated[float, Field(ge=0)]
    +59
    +60    # Not in use:
    +61    stages: List[CompressorStage] = []  # Not relevant since the stage is Unknown
    +62    pressure_control: Optional[FixedSpeedPressureControl] = None  # Not relevant for simplified trains.
    +63
    +64    @field_validator("stage")
    +65    @classmethod
    +66    def _validate_stages(cls, stage):
    +67        if isinstance(stage.compressor_chart, SingleSpeedChart):
    +68            raise ValueError(
    +69                "Simplified Compressor Train does not support Single Speed Compressor Chart."
    +70                f" Given type was {type(stage.compressor_chart)}"
    +71            )
    +72        return stage
    +
    + + +

    Unknown stages does not have stages, instead we have one stage that will be multiplied as many times as needed. +Will be constrained by a maximum pressure ratio per stage.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SingleSpeedCompressorTrain(CompressorTrain): + + + +
    + +
    75class SingleSpeedCompressorTrain(CompressorTrain):
    +76    """Single speed train has a control mechanism for max discharge pressure."""
    +77
    +78    typ: Literal[
    +79        EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    +80    ] = EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    +81    maximum_discharge_pressure: Optional[Annotated[float, Field(ge=0)]] = None
    +82
    +83    @field_validator("stages")
    +84    @classmethod
    +85    def _validate_stages(cls, stages):
    +86        for stage in stages:
    +87            if not isinstance(stage.compressor_chart, SingleSpeedChart):
    +88                raise ValueError(
    +89                    "Single Speed Compressor train only accepts Single Speed Compressor Charts."
    +90                    f" Given type was {type(stage.compressor_chart)}"
    +91                )
    +92        return stages
    +
    + + +

    Single speed train has a control mechanism for max discharge pressure.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + VariableSpeedCompressorTrain(CompressorTrain): + + + +
    + +
     95class VariableSpeedCompressorTrain(CompressorTrain):
    + 96    typ: Literal[
    + 97        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 98    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT
    + 99
    +100    @field_validator("stages")
    +101    @classmethod
    +102    def _validate_stages(cls, stages):
    +103        min_speed_per_stage = []
    +104        max_speed_per_stage = []
    +105        for stage in stages:
    +106            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +107                raise ValueError(
    +108                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +109                    f" Given type was {type(stage.compressor_chart)}"
    +110                )
    +111            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +112            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +113        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +114            raise ValueError(
    +115                "Variable speed compressors in compressor train have incompatible compressor charts."
    +116                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +117                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +118            )
    +119        return stages
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain): + + + +
    + +
    122class VariableSpeedCompressorTrainMultipleStreamsAndPressures(CompressorTrain):
    +123    """This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and
    +124    possibly an interstage control pressure
    +125    The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of
    +126    the streams, as this determine the mapping of which rate is mapped to which stream at evaluation
    +127    Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do
    +128    the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement
    +129    in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax
    +130    and the dto similar.
    +131    """
    +132
    +133    typ: Literal[
    +134        EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +135    ] = EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    +136    streams: List[MultipleStreamsAndPressureStream]
    +137    stages: List[MultipleStreamsCompressorStage]
    +138
    +139    # Not in use:
    +140    fluid_model: Optional[FluidModel] = None  # Not relevant. set by the individual stream.
    +141
    +142    @field_validator("stages")
    +143    @classmethod
    +144    def _validate_stages(cls, stages):
    +145        if sum([stage.has_control_pressure for stage in stages]) > 1:
    +146            raise ValueError("Only one interstage pressure should be defined for a compressor train")
    +147        min_speed_per_stage = []
    +148        max_speed_per_stage = []
    +149        for stage in stages:
    +150            if not isinstance(stage.compressor_chart, VariableSpeedChart):
    +151                raise ValueError(
    +152                    "Variable Speed Compressor train only accepts Variable Speed Compressor Charts."
    +153                    f" Given type was {type(stage.compressor_chart)}"
    +154                )
    +155            max_speed_per_stage.append(stage.compressor_chart.max_speed)
    +156            min_speed_per_stage.append(stage.compressor_chart.min_speed)
    +157        if max(min_speed_per_stage) > min(max_speed_per_stage):
    +158            raise ValueError(
    +159                "Variable speed compressors in compressor train have incompatible compressor charts."
    +160                f" Stage {min_speed_per_stage.index(max(min_speed_per_stage)) + 1}'s minimum speed is higher"
    +161                f" than max speed of stage {max_speed_per_stage.index(min(max_speed_per_stage)) + 1}"
    +162            )
    +163        return stages
    +164
    +165    @property
    +166    def has_interstage_pressure(self):
    +167        return any(stage.has_control_pressure for stage in self.stages)
    +168
    +169    @property
    +170    def stage_number_interstage_pressure(self):
    +171        """Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the
    +172        inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train
    +173        (zero indexed, first stage is stage_0).
    +174        """
    +175        return (
    +176            [i for i, stage in enumerate(self.stages) if stage.has_control_pressure][0]
    +177            if self.has_interstage_pressure
    +178            else None
    +179        )
    +180
    +181    @property
    +182    def stream_references(self):
    +183        return {
    +184            stream_ref: i
    +185            for i, stage in enumerate(self.stages)
    +186            if stage.stream_reference
    +187            for stream_ref in stage.stream_reference
    +188        }
    +189
    +190    @property
    +191    def pressure_control_first_part(self) -> FixedSpeedPressureControl:
    +192        return (
    +193            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.upstream_pressure_control
    +194            if self.stage_number_interstage_pressure
    +195            else None
    +196        )
    +197
    +198    @property
    +199    def pressure_control_last_part(self) -> FixedSpeedPressureControl:
    +200        return (
    +201            self.stages[self.stage_number_interstage_pressure].interstage_pressure_control.downstream_pressure_control
    +202            if self.stage_number_interstage_pressure
    +203            else None
    +204        )
    +
    + + +

    This is the dto for the "advanced" (common shaft) compressor train model, with multiple input and output streams and +possibly an interstage control pressure +The streams are listed separately and then mapped into the stages. We need to keep the info of the input ordering of +the streams, as this determine the mapping of which rate is mapped to which stream at evaluation +Two options - either keep the streams as a separate attribute from stages and do the mapping at evaluation, or do +the mapping of streams and add these to the stages now, but let the stream get a number representing it's placement +in the syntax. The first option - keep the reference and do the mapping later is used here to keep the yaml syntax +and the dto similar.

    +
    + + +
    +
    + stage_number_interstage_pressure + + +
    + + +

    Number of the stage after the fixed intermediate pressure, meaning the intermediate pressure will be the +inlet pressure of this stage. Must be larger than 0 and smaller than the number of stages in the train +(zero indexed, first stage is stage_0).

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/consumer_system.html b/docs/about/references/api/libecalc/dto/models/consumer_system.html new file mode 100644 index 0000000000..11c81ca5a0 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/consumer_system.html @@ -0,0 +1,1079 @@ + + + + + + + libecalc.dto.models.consumer_system API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.consumer_system

    + + + + + + +
      1from typing import List, Literal, Optional
    +  2
    +  3from pydantic import Field, field_validator
    +  4
    +  5from libecalc.common.logger import logger
    +  6from libecalc.dto.base import EcalcBaseModel
    +  7from libecalc.dto.models.base import ConsumerFunction
    +  8from libecalc.dto.models.compressor import CompressorModel
    +  9from libecalc.dto.models.compressor.train import (
    + 10    CompressorTrainSimplifiedWithKnownStages,
    + 11    CompressorTrainSimplifiedWithUnknownStages,
    + 12)
    + 13from libecalc.dto.models.pump import PumpModel
    + 14from libecalc.dto.types import ChartType, ConsumerType, EnergyUsageType
    + 15from libecalc.dto.utils.validators import convert_expression, convert_expressions
    + 16from libecalc.expression import Expression
    + 17
    + 18
    + 19class CompressorSystemCompressor(EcalcBaseModel):
    + 20    name: str
    + 21    compressor_train: CompressorModel = Field(..., discriminator="typ")
    + 22
    + 23
    + 24class SystemOperationalSetting(EcalcBaseModel):
    + 25    rate_fractions: Optional[List[Expression]] = None
    + 26    rates: Optional[List[Expression]] = None
    + 27    suction_pressure: Optional[Expression] = None
    + 28    suction_pressures: Optional[List[Expression]] = None
    + 29    discharge_pressure: Optional[Expression] = None
    + 30    discharge_pressures: Optional[List[Expression]] = None
    + 31    crossover: Optional[List[int]] = None
    + 32
    + 33    _convert_expression_lists = field_validator(
    + 34        "rate_fractions",
    + 35        "rates",
    + 36        "suction_pressures",
    + 37        "discharge_pressures",
    + 38        mode="before",
    + 39    )(convert_expressions)
    + 40    _convert_expression = field_validator("suction_pressure", "discharge_pressure", mode="before")(convert_expression)
    + 41
    + 42
    + 43class PumpSystemOperationalSetting(SystemOperationalSetting):
    + 44    fluid_densities: Optional[List[Expression]] = None
    + 45
    + 46    _convert_expression_lists = field_validator(
    + 47        "fluid_densities",
    + 48        mode="before",
    + 49    )(convert_expressions)
    + 50
    + 51
    + 52class PumpSystemPump(EcalcBaseModel):
    + 53    name: str
    + 54    pump_model: PumpModel
    + 55
    + 56
    + 57class PumpSystemConsumerFunction(ConsumerFunction):
    + 58    typ: Literal[ConsumerType.PUMP_SYSTEM] = ConsumerType.PUMP_SYSTEM
    + 59    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    + 60    power_loss_factor: Optional[Expression] = None
    + 61    pumps: List[PumpSystemPump]
    + 62    fluid_density: Expression
    + 63    total_system_rate: Optional[Expression] = None
    + 64    operational_settings: List[PumpSystemOperationalSetting]
    + 65
    + 66    _convert_expression = field_validator("fluid_density", "total_system_rate", "power_loss_factor", mode="before")(
    + 67        convert_expression
    + 68    )
    + 69
    + 70
    + 71class CompressorSystemOperationalSetting(SystemOperationalSetting):
    + 72    pass
    + 73
    + 74
    + 75class CompressorSystemConsumerFunction(ConsumerFunction):
    + 76    typ: Literal[ConsumerType.COMPRESSOR_SYSTEM] = ConsumerType.COMPRESSOR_SYSTEM
    + 77    power_loss_factor: Optional[Expression] = None
    + 78    compressors: List[CompressorSystemCompressor]
    + 79    total_system_rate: Optional[Expression] = None
    + 80    operational_settings: List[CompressorSystemOperationalSetting]
    + 81
    + 82    _convert_total_system_rate_to_expression = field_validator("total_system_rate", "power_loss_factor", mode="before")(
    + 83        convert_expression
    + 84    )
    + 85
    + 86    @field_validator("compressors")
    + 87    @classmethod
    + 88    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 89        cls, v: List[CompressorSystemCompressor]
    + 90    ) -> List[CompressorSystemCompressor]:
    + 91        for compressor_system_compressor in v:
    + 92            compressor_train = compressor_system_compressor.compressor_train
    + 93            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    + 94                for i, stage in enumerate(compressor_train.stages):
    + 95                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    + 96                        logger.warning(
    + 97                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    + 98                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    + 99                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +100                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +101                            f" changing rates!"
    +102                        )
    +103            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +104                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +105                    logger.warning(
    +106                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +107                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +108                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +109                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +110                        f" changing rates!"
    +111                    )
    +112        return v
    +
    + + +
    +
    + +
    + + class + CompressorSystemCompressor(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    20class CompressorSystemCompressor(EcalcBaseModel):
    +21    name: str
    +22    compressor_train: CompressorModel = Field(..., discriminator="typ")
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + SystemOperationalSetting(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    25class SystemOperationalSetting(EcalcBaseModel):
    +26    rate_fractions: Optional[List[Expression]] = None
    +27    rates: Optional[List[Expression]] = None
    +28    suction_pressure: Optional[Expression] = None
    +29    suction_pressures: Optional[List[Expression]] = None
    +30    discharge_pressure: Optional[Expression] = None
    +31    discharge_pressures: Optional[List[Expression]] = None
    +32    crossover: Optional[List[int]] = None
    +33
    +34    _convert_expression_lists = field_validator(
    +35        "rate_fractions",
    +36        "rates",
    +37        "suction_pressures",
    +38        "discharge_pressures",
    +39        mode="before",
    +40    )(convert_expressions)
    +41    _convert_expression = field_validator("suction_pressure", "discharge_pressure", mode="before")(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpSystemOperationalSetting(SystemOperationalSetting): + + + +
    + +
    44class PumpSystemOperationalSetting(SystemOperationalSetting):
    +45    fluid_densities: Optional[List[Expression]] = None
    +46
    +47    _convert_expression_lists = field_validator(
    +48        "fluid_densities",
    +49        mode="before",
    +50    )(convert_expressions)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpSystemPump(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    53class PumpSystemPump(EcalcBaseModel):
    +54    name: str
    +55    pump_model: PumpModel
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpSystemConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    58class PumpSystemConsumerFunction(ConsumerFunction):
    +59    typ: Literal[ConsumerType.PUMP_SYSTEM] = ConsumerType.PUMP_SYSTEM
    +60    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    +61    power_loss_factor: Optional[Expression] = None
    +62    pumps: List[PumpSystemPump]
    +63    fluid_density: Expression
    +64    total_system_rate: Optional[Expression] = None
    +65    operational_settings: List[PumpSystemOperationalSetting]
    +66
    +67    _convert_expression = field_validator("fluid_density", "total_system_rate", "power_loss_factor", mode="before")(
    +68        convert_expression
    +69    )
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorSystemOperationalSetting(SystemOperationalSetting): + + + +
    + +
    72class CompressorSystemOperationalSetting(SystemOperationalSetting):
    +73    pass
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorSystemConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
     76class CompressorSystemConsumerFunction(ConsumerFunction):
    + 77    typ: Literal[ConsumerType.COMPRESSOR_SYSTEM] = ConsumerType.COMPRESSOR_SYSTEM
    + 78    power_loss_factor: Optional[Expression] = None
    + 79    compressors: List[CompressorSystemCompressor]
    + 80    total_system_rate: Optional[Expression] = None
    + 81    operational_settings: List[CompressorSystemOperationalSetting]
    + 82
    + 83    _convert_total_system_rate_to_expression = field_validator("total_system_rate", "power_loss_factor", mode="before")(
    + 84        convert_expression
    + 85    )
    + 86
    + 87    @field_validator("compressors")
    + 88    @classmethod
    + 89    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 90        cls, v: List[CompressorSystemCompressor]
    + 91    ) -> List[CompressorSystemCompressor]:
    + 92        for compressor_system_compressor in v:
    + 93            compressor_train = compressor_system_compressor.compressor_train
    + 94            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    + 95                for i, stage in enumerate(compressor_train.stages):
    + 96                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    + 97                        logger.warning(
    + 98                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    + 99                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +100                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +101                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +102                            f" changing rates!"
    +103                        )
    +104            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +105                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +106                    logger.warning(
    +107                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +108                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +109                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +110                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +111                        f" changing rates!"
    +112                    )
    +113        return v
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('compressors')
    +
    @classmethod
    + + def + check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system( cls, v: List[libecalc.dto.models.consumer_system.CompressorSystemCompressor]) -> List[libecalc.dto.models.consumer_system.CompressorSystemCompressor]: + + + +
    + +
     87    @field_validator("compressors")
    + 88    @classmethod
    + 89    def check_for_generic_from_input_compressor_chart_in_simplified_train_compressor_system(
    + 90        cls, v: List[CompressorSystemCompressor]
    + 91    ) -> List[CompressorSystemCompressor]:
    + 92        for compressor_system_compressor in v:
    + 93            compressor_train = compressor_system_compressor.compressor_train
    + 94            if isinstance(compressor_train, CompressorTrainSimplifiedWithKnownStages):
    + 95                for i, stage in enumerate(compressor_train.stages):
    + 96                    if stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    + 97                        logger.warning(
    + 98                            f"Stage number {i + 1} in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    + 99                            f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +100                            f"the rate input used to generate a specific compressor chart will also change. Consider"
    +101                            f" to define a design point yourself instead of letting an algorithm find one based on"
    +102                            f" changing rates!"
    +103                        )
    +104            elif isinstance(compressor_train, CompressorTrainSimplifiedWithUnknownStages):
    +105                if compressor_train.stage.compressor_chart.typ == ChartType.GENERIC_FROM_INPUT:
    +106                    logger.warning(
    +107                        f"Compressor chart in {compressor_system_compressor.name} uses GENERIC_FROM_INPUT. "
    +108                        f"Beware that when splitting rates on several compressor trains in a compressor system, "
    +109                        f"the rate input used to generate a specific compressor chart will also change. Consider"
    +110                        f" to define a design point yourself instead of letting an algorithm find one based on"
    +111                        f" changing rates!"
    +112                    )
    +113        return v
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/direct.html b/docs/about/references/api/libecalc/dto/models/direct.html new file mode 100644 index 0000000000..a1bf61f90f --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/direct.html @@ -0,0 +1,398 @@ + + + + + + + libecalc.dto.models.direct API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.direct

    + + + + + + +
     1from typing import Literal, Optional
    + 2
    + 3from pydantic import field_validator, model_validator
    + 4from typing_extensions import Self
    + 5
    + 6from libecalc.common.utils.rates import RateType
    + 7from libecalc.dto.models.base import ConsumerFunction
    + 8from libecalc.dto.types import ConsumerType
    + 9from libecalc.dto.utils.validators import convert_expression
    +10from libecalc.expression import Expression
    +11
    +12
    +13class DirectConsumerFunction(ConsumerFunction):
    +14    typ: Literal[ConsumerType.DIRECT] = ConsumerType.DIRECT
    +15    fuel_rate: Optional[Expression] = None
    +16    load: Optional[Expression] = None
    +17    power_loss_factor: Optional[Expression] = None
    +18    consumption_rate_type: RateType = RateType.STREAM_DAY
    +19
    +20    _convert_expressions = field_validator("fuel_rate", "load", "power_loss_factor", mode="before")(convert_expression)
    +21
    +22    @model_validator(mode="after")
    +23    def validate_either_load_or_fuel_rate(self) -> Self:
    +24        has_fuel_rate = getattr(self, "fuel_rate", None) is not None
    +25        has_load = getattr(self, "load", None) is not None
    +26        if (has_fuel_rate and not has_load) or (not has_fuel_rate and has_load):
    +27            return self
    +28        raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +
    + + +
    +
    + +
    + + class + DirectConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    14class DirectConsumerFunction(ConsumerFunction):
    +15    typ: Literal[ConsumerType.DIRECT] = ConsumerType.DIRECT
    +16    fuel_rate: Optional[Expression] = None
    +17    load: Optional[Expression] = None
    +18    power_loss_factor: Optional[Expression] = None
    +19    consumption_rate_type: RateType = RateType.STREAM_DAY
    +20
    +21    _convert_expressions = field_validator("fuel_rate", "load", "power_loss_factor", mode="before")(convert_expression)
    +22
    +23    @model_validator(mode="after")
    +24    def validate_either_load_or_fuel_rate(self) -> Self:
    +25        has_fuel_rate = getattr(self, "fuel_rate", None) is not None
    +26        has_load = getattr(self, "load", None) is not None
    +27        if (has_fuel_rate and not has_load) or (not has_fuel_rate and has_load):
    +28            return self
    +29        raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_either_load_or_fuel_rate(self) -> typing_extensions.Self: + + + +
    + +
    23    @model_validator(mode="after")
    +24    def validate_either_load_or_fuel_rate(self) -> Self:
    +25        has_fuel_rate = getattr(self, "fuel_rate", None) is not None
    +26        has_load = getattr(self, "load", None) is not None
    +27        if (has_fuel_rate and not has_load) or (not has_fuel_rate and has_load):
    +28            return self
    +29        raise ValueError(f"Either 'fuel_rate' or 'load' should be specified for '{ConsumerType.DIRECT}' models.")
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/generator_set.html b/docs/about/references/api/libecalc/dto/models/generator_set.html new file mode 100644 index 0000000000..5c83083694 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/generator_set.html @@ -0,0 +1,416 @@ + + + + + + + libecalc.dto.models.generator_set API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.generator_set

    + + + + + + +
     1from typing import List, Literal
    + 2
    + 3from pydantic import field_validator
    + 4
    + 5from libecalc.dto.types import EnergyModelType
    + 6
    + 7from .sampled import EnergyModelSampled
    + 8
    + 9
    +10class GeneratorSetSampled(EnergyModelSampled):
    +11    typ: Literal[EnergyModelType.GENERATOR_SET_SAMPLED] = EnergyModelType.GENERATOR_SET_SAMPLED
    +12
    +13    @field_validator("headers")
    +14    @classmethod
    +15    def validate_headers(cls, headers: List[str]) -> List[str]:
    +16        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +17        if not is_valid_headers:
    +18            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +19        return headers
    +20
    +21    @field_validator("data")
    +22    @classmethod
    +23    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +24        if len({len(lst) for lst in data}) > 1:
    +25            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +26        return data
    +27
    +28    @property
    +29    def fuel_values(self) -> List[float]:
    +30        return self.data[self.headers.index("FUEL")]
    +31
    +32    @property
    +33    def power_values(self) -> List[float]:
    +34        return self.data[self.headers.index("POWER")]
    +
    + + +
    +
    + +
    + + class + GeneratorSetSampled(libecalc.dto.models.sampled.EnergyModelSampled): + + + +
    + +
    11class GeneratorSetSampled(EnergyModelSampled):
    +12    typ: Literal[EnergyModelType.GENERATOR_SET_SAMPLED] = EnergyModelType.GENERATOR_SET_SAMPLED
    +13
    +14    @field_validator("headers")
    +15    @classmethod
    +16    def validate_headers(cls, headers: List[str]) -> List[str]:
    +17        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +18        if not is_valid_headers:
    +19            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +20        return headers
    +21
    +22    @field_validator("data")
    +23    @classmethod
    +24    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +25        if len({len(lst) for lst in data}) > 1:
    +26            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +27        return data
    +28
    +29    @property
    +30    def fuel_values(self) -> List[float]:
    +31        return self.data[self.headers.index("FUEL")]
    +32
    +33    @property
    +34    def power_values(self) -> List[float]:
    +35        return self.data[self.headers.index("POWER")]
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @field_validator('headers')
    +
    @classmethod
    + + def + validate_headers(cls, headers: List[str]) -> List[str]: + + + +
    + +
    14    @field_validator("headers")
    +15    @classmethod
    +16    def validate_headers(cls, headers: List[str]) -> List[str]:
    +17        is_valid_headers = len(headers) == 2 and "FUEL" in headers and "POWER" in headers
    +18        if not is_valid_headers:
    +19            raise ValueError("Sampled generator set data should have a 'FUEL' and 'POWER' header")
    +20        return headers
    +
    + + + + +
    +
    + +
    +
    @field_validator('data')
    +
    @classmethod
    + + def + validate_data(cls, data: List[List[float]]) -> List[List[float]]: + + + +
    + +
    22    @field_validator("data")
    +23    @classmethod
    +24    def validate_data(cls, data: List[List[float]]) -> List[List[float]]:
    +25        if len({len(lst) for lst in data}) > 1:
    +26            raise ValueError("Sampled generator set data should have equal number of datapoints for FUEL and POWER.")
    +27        return data
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/pump.html b/docs/about/references/api/libecalc/dto/models/pump.html new file mode 100644 index 0000000000..a79afee392 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/pump.html @@ -0,0 +1,442 @@ + + + + + + + libecalc.dto.models.pump API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.pump

    + + + + + + +
     1from typing import Literal, Optional, Union
    + 2
    + 3from pydantic import field_validator
    + 4
    + 5from libecalc.dto.models.base import ConsumerFunction, EnergyModel
    + 6from libecalc.dto.models.chart import SingleSpeedChart, VariableSpeedChart
    + 7from libecalc.dto.types import ConsumerType, EnergyModelType, EnergyUsageType
    + 8from libecalc.dto.utils.validators import convert_expression
    + 9from libecalc.expression import Expression
    +10
    +11
    +12class PumpModel(EnergyModel):
    +13    typ: Literal[EnergyModelType.PUMP_MODEL] = EnergyModelType.PUMP_MODEL
    +14    chart: Union[SingleSpeedChart, VariableSpeedChart]
    +15    head_margin: float
    +16
    +17
    +18class PumpConsumerFunction(ConsumerFunction):
    +19    typ: Literal[ConsumerType.PUMP] = ConsumerType.PUMP
    +20    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    +21    power_loss_factor: Optional[Expression] = None
    +22    model: PumpModel
    +23    rate_standard_m3_day: Expression
    +24    suction_pressure: Expression
    +25    discharge_pressure: Expression
    +26    fluid_density: Expression
    +27
    +28    _convert_pump_expressions = field_validator(
    +29        "rate_standard_m3_day",
    +30        "suction_pressure",
    +31        "discharge_pressure",
    +32        "fluid_density",
    +33        "power_loss_factor",
    +34        mode="before",
    +35    )(convert_expression)
    +
    + + +
    +
    + +
    + + class + PumpModel(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    13class PumpModel(EnergyModel):
    +14    typ: Literal[EnergyModelType.PUMP_MODEL] = EnergyModelType.PUMP_MODEL
    +15    chart: Union[SingleSpeedChart, VariableSpeedChart]
    +16    head_margin: float
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + PumpConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    19class PumpConsumerFunction(ConsumerFunction):
    +20    typ: Literal[ConsumerType.PUMP] = ConsumerType.PUMP
    +21    energy_usage_type: EnergyUsageType = EnergyUsageType.POWER
    +22    power_loss_factor: Optional[Expression] = None
    +23    model: PumpModel
    +24    rate_standard_m3_day: Expression
    +25    suction_pressure: Expression
    +26    discharge_pressure: Expression
    +27    fluid_density: Expression
    +28
    +29    _convert_pump_expressions = field_validator(
    +30        "rate_standard_m3_day",
    +31        "suction_pressure",
    +32        "discharge_pressure",
    +33        "fluid_density",
    +34        "power_loss_factor",
    +35        mode="before",
    +36    )(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/sampled.html b/docs/about/references/api/libecalc/dto/models/sampled.html new file mode 100644 index 0000000000..375eb73f4e --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/sampled.html @@ -0,0 +1,315 @@ + + + + + + + libecalc.dto.models.sampled API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.sampled

    + + + + + + +
     1from typing import List
    + 2
    + 3from libecalc.dto.models.base import EnergyModel
    + 4
    + 5
    + 6class EnergyModelSampled(EnergyModel):
    + 7    headers: List[str]
    + 8    data: List[List[float]]
    + 9    # TODO: validate number of headers equals number of vectors
    +10    # validate all vectors (in data) have equal length
    +
    + + +
    +
    + +
    + + class + EnergyModelSampled(libecalc.dto.models.base.EnergyModel): + + + +
    + +
     7class EnergyModelSampled(EnergyModel):
    + 8    headers: List[str]
    + 9    data: List[List[float]]
    +10    # TODO: validate number of headers equals number of vectors
    +11    # validate all vectors (in data) have equal length
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/tabulated.html b/docs/about/references/api/libecalc/dto/models/tabulated.html new file mode 100644 index 0000000000..53b27fd636 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/tabulated.html @@ -0,0 +1,559 @@ + + + + + + + libecalc.dto.models.tabulated API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.tabulated

    + + + + + + +
     1from typing import List, Literal, Optional
    + 2
    + 3from pydantic import field_validator
    + 4
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6from libecalc.dto.models.base import ConsumerFunction
    + 7from libecalc.dto.models.sampled import EnergyModelSampled
    + 8from libecalc.dto.types import ConsumerType, EnergyModelType
    + 9from libecalc.dto.utils.validators import convert_expression
    +10from libecalc.expression import Expression
    +11
    +12
    +13class TabulatedData(EnergyModelSampled):
    +14    typ: Literal[EnergyModelType.TABULATED] = EnergyModelType.TABULATED
    +15
    +16    @field_validator("headers")
    +17    @classmethod
    +18    def validate_headers(cls, headers: List[str]) -> List[str]:
    +19        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +20        if not is_valid_headers:
    +21            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +22        return headers
    +23
    +24
    +25class Variables(EcalcBaseModel):
    +26    name: str
    +27    expression: Expression
    +28
    +29    _convert_variable_expression = field_validator("expression", mode="before")(convert_expression)
    +30
    +31
    +32class TabulatedConsumerFunction(ConsumerFunction):
    +33    typ: Literal[ConsumerType.TABULATED] = ConsumerType.TABULATED
    +34    power_loss_factor: Optional[Expression] = None
    +35    model: TabulatedData
    +36    variables: List[Variables]
    +37
    +38    _convert_to_expression = field_validator("power_loss_factor", mode="before")(convert_expression)
    +
    + + +
    +
    + +
    + + class + TabulatedData(libecalc.dto.models.sampled.EnergyModelSampled): + + + +
    + +
    14class TabulatedData(EnergyModelSampled):
    +15    typ: Literal[EnergyModelType.TABULATED] = EnergyModelType.TABULATED
    +16
    +17    @field_validator("headers")
    +18    @classmethod
    +19    def validate_headers(cls, headers: List[str]) -> List[str]:
    +20        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +21        if not is_valid_headers:
    +22            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +23        return headers
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @field_validator('headers')
    +
    @classmethod
    + + def + validate_headers(cls, headers: List[str]) -> List[str]: + + + +
    + +
    17    @field_validator("headers")
    +18    @classmethod
    +19    def validate_headers(cls, headers: List[str]) -> List[str]:
    +20        is_valid_headers = len(headers) > 0 and "FUEL" in headers or "POWER" in headers
    +21        if not is_valid_headers:
    +22            raise ValueError("TABULAR facility input type data must have a 'FUEL' or 'POWER' header")
    +23        return headers
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + Variables(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    26class Variables(EcalcBaseModel):
    +27    name: str
    +28    expression: Expression
    +29
    +30    _convert_variable_expression = field_validator("expression", mode="before")(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + TabulatedConsumerFunction(libecalc.dto.models.base.ConsumerFunction): + + + +
    + +
    33class TabulatedConsumerFunction(ConsumerFunction):
    +34    typ: Literal[ConsumerType.TABULATED] = ConsumerType.TABULATED
    +35    power_loss_factor: Optional[Expression] = None
    +36    model: TabulatedData
    +37    variables: List[Variables]
    +38
    +39    _convert_to_expression = field_validator("power_loss_factor", mode="before")(convert_expression)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/models/turbine.html b/docs/about/references/api/libecalc/dto/models/turbine.html new file mode 100644 index 0000000000..d675c64b73 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/models/turbine.html @@ -0,0 +1,379 @@ + + + + + + + libecalc.dto.models.turbine API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.models.turbine

    + + + + + + +
     1from typing import List, Literal
    + 2
    + 3from pydantic import Field, model_validator
    + 4from typing_extensions import Annotated, Self
    + 5
    + 6from libecalc.dto.types import EnergyModelType
    + 7
    + 8from .base import EnergyModel
    + 9
    +10
    +11class Turbine(EnergyModel):
    +12    typ: Literal[EnergyModelType.TURBINE] = EnergyModelType.TURBINE  # type: ignore
    +13    lower_heating_value: Annotated[float, Field(ge=0)]
    +14    turbine_loads: List[Annotated[float, Field(ge=0)]]
    +15    turbine_efficiency_fractions: List[float]
    +16
    +17    @model_validator(mode="after")
    +18    def validate_loads_and_efficiency_factors(self) -> Self:
    +19        turbine_loads, turbine_efficiencies = (
    +20            self.turbine_loads,
    +21            self.turbine_efficiency_fractions,
    +22        )
    +23        if len(turbine_loads) != len(turbine_efficiencies):
    +24            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +25
    +26        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +27            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +28        return self
    +
    + + +
    +
    + +
    + + class + Turbine(libecalc.dto.models.base.EnergyModel): + + + +
    + +
    12class Turbine(EnergyModel):
    +13    typ: Literal[EnergyModelType.TURBINE] = EnergyModelType.TURBINE  # type: ignore
    +14    lower_heating_value: Annotated[float, Field(ge=0)]
    +15    turbine_loads: List[Annotated[float, Field(ge=0)]]
    +16    turbine_efficiency_fractions: List[float]
    +17
    +18    @model_validator(mode="after")
    +19    def validate_loads_and_efficiency_factors(self) -> Self:
    +20        turbine_loads, turbine_efficiencies = (
    +21            self.turbine_loads,
    +22            self.turbine_efficiency_fractions,
    +23        )
    +24        if len(turbine_loads) != len(turbine_efficiencies):
    +25            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +26
    +27        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +28            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +29        return self
    +
    + + +

    Generic/template/protocol. Only for sub classing, not direct use.

    +
    + + +
    + +
    +
    @model_validator(mode='after')
    + + def + validate_loads_and_efficiency_factors(self) -> typing_extensions.Self: + + + +
    + +
    18    @model_validator(mode="after")
    +19    def validate_loads_and_efficiency_factors(self) -> Self:
    +20        turbine_loads, turbine_efficiencies = (
    +21            self.turbine_loads,
    +22            self.turbine_efficiency_fractions,
    +23        )
    +24        if len(turbine_loads) != len(turbine_efficiencies):
    +25            raise ValueError("Need equal number of load and efficiency values for turbine model")
    +26
    +27        if not all(0 <= x <= 1 for x in turbine_efficiencies):
    +28            raise ValueError("Turbine efficiency fraction should be a number between 0 and 1")
    +29        return self
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/node_info.html b/docs/about/references/api/libecalc/dto/node_info.html new file mode 100644 index 0000000000..f64e8567ed --- /dev/null +++ b/docs/about/references/api/libecalc/dto/node_info.html @@ -0,0 +1,343 @@ + + + + + + + libecalc.dto.node_info API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.node_info

    + + + + + + +
     1from pydantic import BaseModel
    + 2
    + 3from libecalc.common.component_info.component_level import ComponentLevel
    + 4from libecalc.dto.base import ComponentType
    + 5from libecalc.dto.utils.validators import ComponentNameStr
    + 6
    + 7
    + 8class NodeInfo(BaseModel):
    + 9    id: str
    +10    name: ComponentNameStr
    +11    component_level: ComponentLevel
    +12    component_type: ComponentType
    +
    + + +
    +
    + +
    + + class + NodeInfo(pydantic.main.BaseModel): + + + +
    + +
     9class NodeInfo(BaseModel):
    +10    id: str
    +11    name: ComponentNameStr
    +12    component_level: ComponentLevel
    +13    component_type: ComponentType
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result.html b/docs/about/references/api/libecalc/dto/result.html new file mode 100644 index 0000000000..530ade966d --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result.html @@ -0,0 +1,262 @@ + + + + + + + libecalc.dto.result API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result

    + + + + + + +
     1from .emission import EmissionResult
    + 2from .results import (
    + 3    AssetResult,
    + 4    ComponentResult,
    + 5    CompressorModelResult,
    + 6    CompressorResult,
    + 7    ConsumerModelResult,
    + 8    ConsumerSystemResult,
    + 9    EcalcModelResult,
    +10    GeneratorSetResult,
    +11    GenericConsumerResult,
    +12    GenericModelResult,
    +13    InstallationResult,
    +14    PumpModelResult,
    +15    PumpResult,
    +16    VentingEmitterResult,
    +17)
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/base.html b/docs/about/references/api/libecalc/dto/result/base.html new file mode 100644 index 0000000000..3764475b79 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/base.html @@ -0,0 +1,335 @@ + + + + + + + libecalc.dto.result.base API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.base

    + + + + + + +
    1from __future__ import annotations
    +2
    +3from libecalc.dto.base import EcalcBaseModel
    +4
    +5
    +6class EcalcResultBaseModel(EcalcBaseModel):
    +7    pass
    +
    + + +
    +
    + +
    + + class + EcalcResultBaseModel(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    7class EcalcResultBaseModel(EcalcBaseModel):
    +8    pass
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/emission.html b/docs/about/references/api/libecalc/dto/result/emission.html new file mode 100644 index 0000000000..5a06540993 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/emission.html @@ -0,0 +1,640 @@ + + + + + + + libecalc.dto.result.emission API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.emission

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime
    + 4from typing import List
    + 5
    + 6from typing_extensions import Self
    + 7
    + 8from libecalc.common.units import Unit
    + 9from libecalc.common.utils.rates import (
    +10    TimeSeriesFloat,
    +11    TimeSeriesIntensity,
    +12    TimeSeriesRate,
    +13    TimeSeriesVolumesCumulative,
    +14)
    +15from libecalc.core.result.emission import EmissionResult as EmissionCoreResult
    +16from libecalc.dto.result.tabular_time_series import TabularTimeSeries
    +17
    +18
    +19class EmissionResult(TabularTimeSeries):
    +20    """The emissions for a result component."""
    +21
    +22    name: str
    +23    rate: TimeSeriesRate
    +24    cumulative: TimeSeriesVolumesCumulative
    +25
    +26    @classmethod
    +27    def create_empty(cls, name: str, timesteps: List[datetime]):
    +28        """Empty placeholder for emissions, when needed
    +29
    +30        Args:
    +31            name:
    +32            timesteps:
    +33
    +34        Returns:
    +35
    +36        """
    +37        return cls(
    +38            name=name,
    +39            timesteps=timesteps,
    +40            rate=TimeSeriesRate(
    +41                timesteps=timesteps,
    +42                values=[0] * len(timesteps),
    +43                unit=Unit.TONS_PER_DAY,
    +44            ),
    +45            cumulative=TimeSeriesVolumesCumulative(
    +46                timesteps=timesteps,
    +47                values=[0] * len(timesteps),
    +48                unit=Unit.TONS,
    +49            ),
    +50        )
    +51
    +52
    +53class PartialEmissionResult(TabularTimeSeries):
    +54    """The partial emissions - a direct translation from the core emission results"""
    +55
    +56    name: str
    +57    rate: TimeSeriesRate
    +58
    +59    @classmethod
    +60    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +61        return PartialEmissionResult(
    +62            name=emission_result.name,
    +63            timesteps=emission_result.timesteps,
    +64            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +65        )
    +66
    +67
    +68class EmissionIntensityResult(TabularTimeSeries):
    +69    name: str
    +70    intensity_sm3: TimeSeriesIntensity
    +71    intensity_boe: TimeSeriesIntensity
    +72    intensity_yearly_sm3: TimeSeriesIntensity
    +73    intensity_yearly_boe: TimeSeriesIntensity
    +
    + + +
    +
    + +
    + + class + EmissionResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    20class EmissionResult(TabularTimeSeries):
    +21    """The emissions for a result component."""
    +22
    +23    name: str
    +24    rate: TimeSeriesRate
    +25    cumulative: TimeSeriesVolumesCumulative
    +26
    +27    @classmethod
    +28    def create_empty(cls, name: str, timesteps: List[datetime]):
    +29        """Empty placeholder for emissions, when needed
    +30
    +31        Args:
    +32            name:
    +33            timesteps:
    +34
    +35        Returns:
    +36
    +37        """
    +38        return cls(
    +39            name=name,
    +40            timesteps=timesteps,
    +41            rate=TimeSeriesRate(
    +42                timesteps=timesteps,
    +43                values=[0] * len(timesteps),
    +44                unit=Unit.TONS_PER_DAY,
    +45            ),
    +46            cumulative=TimeSeriesVolumesCumulative(
    +47                timesteps=timesteps,
    +48                values=[0] * len(timesteps),
    +49                unit=Unit.TONS,
    +50            ),
    +51        )
    +
    + + +

    The emissions for a result component.

    +
    + + +
    + +
    +
    @classmethod
    + + def + create_empty(cls, name: str, timesteps: List[datetime.datetime]): + + + +
    + +
    27    @classmethod
    +28    def create_empty(cls, name: str, timesteps: List[datetime]):
    +29        """Empty placeholder for emissions, when needed
    +30
    +31        Args:
    +32            name:
    +33            timesteps:
    +34
    +35        Returns:
    +36
    +37        """
    +38        return cls(
    +39            name=name,
    +40            timesteps=timesteps,
    +41            rate=TimeSeriesRate(
    +42                timesteps=timesteps,
    +43                values=[0] * len(timesteps),
    +44                unit=Unit.TONS_PER_DAY,
    +45            ),
    +46            cumulative=TimeSeriesVolumesCumulative(
    +47                timesteps=timesteps,
    +48                values=[0] * len(timesteps),
    +49                unit=Unit.TONS,
    +50            ),
    +51        )
    +
    + + +

    Empty placeholder for emissions, when needed

    + +

    Args: + name: + timesteps:

    + +

    Returns:

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PartialEmissionResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    54class PartialEmissionResult(TabularTimeSeries):
    +55    """The partial emissions - a direct translation from the core emission results"""
    +56
    +57    name: str
    +58    rate: TimeSeriesRate
    +59
    +60    @classmethod
    +61    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +62        return PartialEmissionResult(
    +63            name=emission_result.name,
    +64            timesteps=emission_result.timesteps,
    +65            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +66        )
    +
    + + +

    The partial emissions - a direct translation from the core emission results

    +
    + + +
    + +
    +
    @classmethod
    + + def + from_emission_core_result( cls, emission_result: libecalc.core.result.emission.EmissionResult, regularity: libecalc.common.utils.rates.TimeSeriesFloat) -> typing_extensions.Self: + + + +
    + +
    60    @classmethod
    +61    def from_emission_core_result(cls, emission_result: EmissionCoreResult, regularity: TimeSeriesFloat) -> Self:
    +62        return PartialEmissionResult(
    +63            name=emission_result.name,
    +64            timesteps=emission_result.timesteps,
    +65            rate=TimeSeriesRate.from_timeseries_stream_day_rate(emission_result.rate, regularity),
    +66        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + EmissionIntensityResult(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    69class EmissionIntensityResult(TabularTimeSeries):
    +70    name: str
    +71    intensity_sm3: TimeSeriesIntensity
    +72    intensity_boe: TimeSeriesIntensity
    +73    intensity_yearly_sm3: TimeSeriesIntensity
    +74    intensity_yearly_boe: TimeSeriesIntensity
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/results.html b/docs/about/references/api/libecalc/dto/result/results.html new file mode 100644 index 0000000000..a5ca0b58a0 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/results.html @@ -0,0 +1,2281 @@ + + + + + + + libecalc.dto.result.results API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.results

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from operator import attrgetter
    +  4from typing import Any, Dict, List, Literal, Optional, Union
    +  5
    +  6from pydantic import Field, field_validator
    +  7from pydantic_core.core_schema import ValidationInfo
    +  8from typing_extensions import Annotated
    +  9
    + 10from libecalc.common.component_info.component_level import ComponentLevel
    + 11from libecalc.common.logger import logger
    + 12from libecalc.common.math.numbers import Numbers
    + 13from libecalc.common.stream_conditions import TimeSeriesStreamConditions
    + 14from libecalc.common.time_utils import Frequency
    + 15from libecalc.common.units import Unit
    + 16from libecalc.common.utils.rates import (
    + 17    TimeSeriesBoolean,
    + 18    TimeSeriesFloat,
    + 19    TimeSeriesInt,
    + 20    TimeSeriesRate,
    + 21    TimeSeriesVolumesCumulative,
    + 22)
    + 23from libecalc.core.models.results.compressor import (
    + 24    CompressorTrainCommonShaftFailureStatus,
    + 25)
    + 26from libecalc.dto.base import ComponentType
    + 27from libecalc.dto.models import SingleSpeedChart, VariableSpeedChart
    + 28from libecalc.dto.result.base import EcalcResultBaseModel
    + 29from libecalc.dto.result.emission import EmissionIntensityResult, EmissionResult
    + 30from libecalc.dto.result.tabular_time_series import TabularTimeSeries
    + 31
    + 32
    + 33class NodeInfo(EcalcResultBaseModel):
    + 34    componentType: ComponentType
    + 35    component_level: ComponentLevel
    + 36    parent: Optional[str] = None  # reference parent id
    + 37    name: str
    + 38
    + 39
    + 40class CommonResultBase(TabularTimeSeries):
    + 41    """Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc."""
    + 42
    + 43    # we need to use camelCase here due to serialization/stub restrictions wrt FE stub generation
    + 44
    + 45    is_valid: TimeSeriesBoolean
    + 46
    + 47    # We need both energy usage and power rate since we sometimes want both fuel and power usage.
    + 48    energy_usage: TimeSeriesRate
    + 49    energy_usage_cumulative: TimeSeriesVolumesCumulative
    + 50
    + 51    power: Optional[TimeSeriesRate] = None
    + 52    power_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    + 53
    + 54
    + 55class ComponentResultBase(CommonResultBase, NodeInfo):
    + 56    id: str
    + 57    emissions: Dict[str, EmissionResult]
    + 58
    + 59
    + 60class EquipmentResultBase(ComponentResultBase):
    + 61    ...
    + 62
    + 63
    + 64class AssetResult(ComponentResultBase):
    + 65    """The aggregated eCalc model result."""
    + 66
    + 67    componentType: Literal[ComponentType.ASSET]
    + 68    hydrocarbon_export_rate: TimeSeriesRate
    + 69    emission_intensities: List[EmissionIntensityResult]
    + 70    power_electrical: Optional[TimeSeriesRate] = None
    + 71    power_electrical_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    + 72    power_mechanical: Optional[TimeSeriesRate] = None
    + 73    power_mechanical_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    + 74
    + 75
    + 76class InstallationResult(AssetResult):
    + 77    """The installation result component."""
    + 78
    + 79    componentType: Literal[ComponentType.INSTALLATION]
    + 80    regularity: TimeSeriesFloat  # Regularity is currently set at per installation, send through. Possibly skip in output if confusing
    + 81
    + 82
    + 83class GeneratorSetResult(EquipmentResultBase):
    + 84    """The Generator set result component."""
    + 85
    + 86    componentType: Literal[ComponentType.GENERATOR_SET]
    + 87    power_capacity_margin: TimeSeriesRate
    + 88
    + 89
    + 90class ConsumerSystemResult(EquipmentResultBase):
    + 91    componentType: Literal[
    + 92        ComponentType.PUMP_SYSTEM,
    + 93        ComponentType.COMPRESSOR_SYSTEM,
    + 94        ComponentType.CONSUMER_SYSTEM_V2,
    + 95    ]
    + 96
    + 97    consumer_type: Literal[ComponentType.COMPRESSOR, ComponentType.PUMP] = None
    + 98
    + 99    @field_validator("consumer_type", mode="before")
    +100    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: ValidationInfo):
    +101        """
    +102        Set consumer type for legacy system where component type contains the same information.
    +103        """
    +104        component_type = info.data.get("componentType")
    +105        if consumer_type is None:
    +106            if component_type == ComponentType.PUMP_SYSTEM:
    +107                return ComponentType.PUMP
    +108            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +109                return ComponentType.COMPRESSOR
    +110
    +111        return consumer_type
    +112
    +113    operational_settings_used: Optional[TimeSeriesInt] = Field(
    +114        None,
    +115        description="The operational settings used for this system. "
    +116        "0 indicates that no valid operational setting was found.",
    +117    )
    +118    operational_settings_results: Optional[Dict[int, List[Any]]] = None
    +119
    +120
    +121class GenericConsumerResult(EquipmentResultBase):
    +122    componentType: Literal[ComponentType.GENERIC]
    +123
    +124
    +125class PumpResult(EquipmentResultBase):
    +126    componentType: Literal[ComponentType.PUMP]
    +127    inlet_liquid_rate_m3_per_day: TimeSeriesRate
    +128    inlet_pressure_bar: TimeSeriesFloat
    +129    outlet_pressure_bar: TimeSeriesFloat
    +130    operational_head: TimeSeriesFloat
    +131
    +132    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +133
    +134
    +135class CompressorResult(EquipmentResultBase):
    +136    componentType: Literal[ComponentType.COMPRESSOR]
    +137    recirculation_loss: TimeSeriesRate
    +138    rate_exceeds_maximum: TimeSeriesBoolean
    +139    outlet_pressure_before_choking: TimeSeriesFloat
    +140
    +141    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +142
    +143
    +144class VentingEmitterResult(EquipmentResultBase):
    +145    componentType: Literal[ComponentType.VENTING_EMITTER]
    +146
    +147
    +148class ConsumerModelResultBase(NodeInfo, CommonResultBase):
    +149    """The Consumer base result component."""
    +150
    +151    ...
    +152
    +153
    +154class PumpModelResult(ConsumerModelResultBase):
    +155    """The Pump result component."""
    +156
    +157    componentType: Literal[ComponentType.PUMP]
    +158    inlet_liquid_rate_m3_per_day: Optional[TimeSeriesRate] = None
    +159    inlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +160    outlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +161    operational_head: Optional[TimeSeriesFloat] = None
    +162    is_valid: TimeSeriesBoolean
    +163
    +164
    +165class TurbineModelResult(EcalcResultBaseModel):
    +166    energy_usage_unit: Unit
    +167    power_unit: Unit
    +168    efficiency: TimeSeriesFloat
    +169    energy_usage: TimeSeriesRate
    +170    exceeds_maximum_load: TimeSeriesBoolean
    +171    fuel_rate: TimeSeriesRate
    +172    is_valid: TimeSeriesBoolean
    +173    load: TimeSeriesRate
    +174    power: TimeSeriesRate
    +175
    +176
    +177class CompressorStreamConditionResult(EcalcResultBaseModel):
    +178    actual_rate_m3_per_hr: TimeSeriesRate
    +179    actual_rate_before_asv_m3_per_hr: TimeSeriesRate
    +180    kappa: TimeSeriesFloat
    +181    density_kg_per_m3: TimeSeriesRate
    +182    pressure: TimeSeriesFloat
    +183    pressure_before_choking: TimeSeriesFloat
    +184    temperature_kelvin: TimeSeriesFloat
    +185    z: TimeSeriesFloat
    +186
    +187
    +188class CompressorModelStageResult(EcalcResultBaseModel):
    +189    chart: Optional[Union[SingleSpeedChart, VariableSpeedChart]]
    +190    chart_area_flags: List[str]
    +191    energy_usage_unit: Unit
    +192    power_unit: Unit
    +193    fluid_composition: Dict[str, Optional[float]]
    +194
    +195    head_exceeds_maximum: TimeSeriesBoolean
    +196    is_valid: TimeSeriesBoolean
    +197    polytropic_efficiency: TimeSeriesFloat
    +198    polytropic_enthalpy_change_before_choke_kJ_per_kg: TimeSeriesFloat
    +199    polytropic_enthalpy_change_kJ_per_kg: TimeSeriesFloat
    +200    polytropic_head_kJ_per_kg: TimeSeriesFloat
    +201    asv_recirculation_loss_mw: TimeSeriesRate
    +202    energy_usage: TimeSeriesRate
    +203    mass_rate_kg_per_hr: TimeSeriesRate
    +204    mass_rate_before_asv_kg_per_hr: TimeSeriesRate
    +205    power: TimeSeriesRate
    +206    pressure_is_choked: TimeSeriesBoolean
    +207    rate_exceeds_maximum: TimeSeriesBoolean
    +208    rate_has_recirculation: TimeSeriesBoolean
    +209    speed: TimeSeriesFloat
    +210    inlet_stream_condition: CompressorStreamConditionResult
    +211    outlet_stream_condition: CompressorStreamConditionResult
    +212
    +213
    +214class CompressorModelResult(ConsumerModelResultBase):
    +215    componentType: Literal[ComponentType.COMPRESSOR]
    +216    failure_status: List[Optional[CompressorTrainCommonShaftFailureStatus]]
    +217    requested_inlet_pressure: TimeSeriesFloat
    +218    requested_outlet_pressure: TimeSeriesFloat
    +219    rate: TimeSeriesRate
    +220    maximum_rate: TimeSeriesRate
    +221    stage_results: List[CompressorModelStageResult]
    +222    turbine_result: Optional[TurbineModelResult] = None
    +223
    +224
    +225class GenericModelResult(ConsumerModelResultBase):
    +226    """Generic consumer result component."""
    +227
    +228    componentType: Literal[ComponentType.GENERIC]
    +229
    +230
    +231# Consumer result is referred to as ENERGY_USAGE_MODEL in the input YAML
    +232ConsumerModelResult = Annotated[
    +233    Union[CompressorModelResult, PumpModelResult, GenericModelResult],
    +234    Field(discriminator="componentType"),
    +235]
    +236
    +237ComponentResult = Annotated[
    +238    Union[
    +239        AssetResult,
    +240        InstallationResult,
    +241        GeneratorSetResult,
    +242        ConsumerSystemResult,
    +243        CompressorResult,
    +244        PumpResult,
    +245        GenericConsumerResult,
    +246        VentingEmitterResult,
    +247    ],
    +248    Field(discriminator="componentType"),
    +249]
    +250
    +251
    +252class EcalcModelResult(EcalcResultBaseModel):
    +253    """Result object holding one component for each part of the eCalc model run:
    +254
    +255    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult
    +256    """
    +257
    +258    component_result: ComponentResult
    +259    sub_components: List[ComponentResult]
    +260    models: List[ConsumerModelResult]
    +261
    +262    @field_validator("sub_components")
    +263    @classmethod
    +264    def sort_sub_components(cls, sub_components):
    +265        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +266
    +267    @field_validator("models")
    +268    @classmethod
    +269    def sort_models(cls, models):
    +270        return sorted(models, key=attrgetter("componentType", "name"))
    +271
    +272    @property
    +273    def timesteps(self):
    +274        return self.component_result.timesteps
    +275
    +276    @property
    +277    def components(self) -> List[ComponentResult]:
    +278        return [self.component_result, *self.sub_components]
    +279
    +280    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +281        return [component for component in self.components if component.id in component_ids]
    +282
    +283    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +284        components = [component for component in self.components if component.name == component_name]
    +285        if not components:
    +286            return None
    +287
    +288        if len(components) > 1:
    +289            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +290
    +291        return components[0]
    +292
    +293    def resample(self, freq: Frequency) -> EcalcModelResult:
    +294        return Numbers.format_results_to_precision(
    +295            self.__class__(
    +296                component_result=self.component_result.resample(freq),
    +297                sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +298                models=[model.resample(freq) for model in self.models],
    +299            ),
    +300            precision=6,
    +301        )
    +
    + + +
    +
    + +
    + + class + NodeInfo(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    34class NodeInfo(EcalcResultBaseModel):
    +35    componentType: ComponentType
    +36    component_level: ComponentLevel
    +37    parent: Optional[str] = None  # reference parent id
    +38    name: str
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CommonResultBase(libecalc.dto.result.tabular_time_series.TabularTimeSeries): + + + +
    + +
    41class CommonResultBase(TabularTimeSeries):
    +42    """Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc."""
    +43
    +44    # we need to use camelCase here due to serialization/stub restrictions wrt FE stub generation
    +45
    +46    is_valid: TimeSeriesBoolean
    +47
    +48    # We need both energy usage and power rate since we sometimes want both fuel and power usage.
    +49    energy_usage: TimeSeriesRate
    +50    energy_usage_cumulative: TimeSeriesVolumesCumulative
    +51
    +52    power: Optional[TimeSeriesRate] = None
    +53    power_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ComponentResultBase(CommonResultBase, NodeInfo): + + + +
    + +
    56class ComponentResultBase(CommonResultBase, NodeInfo):
    +57    id: str
    +58    emissions: Dict[str, EmissionResult]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + EquipmentResultBase(ComponentResultBase): + + + +
    + +
    61class EquipmentResultBase(ComponentResultBase):
    +62    ...
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + AssetResult(ComponentResultBase): + + + +
    + +
    65class AssetResult(ComponentResultBase):
    +66    """The aggregated eCalc model result."""
    +67
    +68    componentType: Literal[ComponentType.ASSET]
    +69    hydrocarbon_export_rate: TimeSeriesRate
    +70    emission_intensities: List[EmissionIntensityResult]
    +71    power_electrical: Optional[TimeSeriesRate] = None
    +72    power_electrical_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    +73    power_mechanical: Optional[TimeSeriesRate] = None
    +74    power_mechanical_cumulative: Optional[TimeSeriesVolumesCumulative] = None
    +
    + + +

    The aggregated eCalc model result.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + InstallationResult(AssetResult): + + + +
    + +
    77class InstallationResult(AssetResult):
    +78    """The installation result component."""
    +79
    +80    componentType: Literal[ComponentType.INSTALLATION]
    +81    regularity: TimeSeriesFloat  # Regularity is currently set at per installation, send through. Possibly skip in output if confusing
    +
    + + +

    The installation result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GeneratorSetResult(EquipmentResultBase): + + + +
    + +
    84class GeneratorSetResult(EquipmentResultBase):
    +85    """The Generator set result component."""
    +86
    +87    componentType: Literal[ComponentType.GENERATOR_SET]
    +88    power_capacity_margin: TimeSeriesRate
    +
    + + +

    The Generator set result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ConsumerSystemResult(EquipmentResultBase): + + + +
    + +
     91class ConsumerSystemResult(EquipmentResultBase):
    + 92    componentType: Literal[
    + 93        ComponentType.PUMP_SYSTEM,
    + 94        ComponentType.COMPRESSOR_SYSTEM,
    + 95        ComponentType.CONSUMER_SYSTEM_V2,
    + 96    ]
    + 97
    + 98    consumer_type: Literal[ComponentType.COMPRESSOR, ComponentType.PUMP] = None
    + 99
    +100    @field_validator("consumer_type", mode="before")
    +101    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: ValidationInfo):
    +102        """
    +103        Set consumer type for legacy system where component type contains the same information.
    +104        """
    +105        component_type = info.data.get("componentType")
    +106        if consumer_type is None:
    +107            if component_type == ComponentType.PUMP_SYSTEM:
    +108                return ComponentType.PUMP
    +109            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +110                return ComponentType.COMPRESSOR
    +111
    +112        return consumer_type
    +113
    +114    operational_settings_used: Optional[TimeSeriesInt] = Field(
    +115        None,
    +116        description="The operational settings used for this system. "
    +117        "0 indicates that no valid operational setting was found.",
    +118    )
    +119    operational_settings_results: Optional[Dict[int, List[Any]]] = None
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    + +
    +
    @field_validator('consumer_type', mode='before')
    + + def + set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    100    @field_validator("consumer_type", mode="before")
    +101    def set_consumer_type_based_on_component_type_if_possible(cls, consumer_type, info: ValidationInfo):
    +102        """
    +103        Set consumer type for legacy system where component type contains the same information.
    +104        """
    +105        component_type = info.data.get("componentType")
    +106        if consumer_type is None:
    +107            if component_type == ComponentType.PUMP_SYSTEM:
    +108                return ComponentType.PUMP
    +109            elif component_type == ComponentType.COMPRESSOR_SYSTEM:
    +110                return ComponentType.COMPRESSOR
    +111
    +112        return consumer_type
    +
    + + +

    Set consumer type for legacy system where component type contains the same information.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GenericConsumerResult(EquipmentResultBase): + + + +
    + +
    122class GenericConsumerResult(EquipmentResultBase):
    +123    componentType: Literal[ComponentType.GENERIC]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpResult(EquipmentResultBase): + + + +
    + +
    126class PumpResult(EquipmentResultBase):
    +127    componentType: Literal[ComponentType.PUMP]
    +128    inlet_liquid_rate_m3_per_day: TimeSeriesRate
    +129    inlet_pressure_bar: TimeSeriesFloat
    +130    outlet_pressure_bar: TimeSeriesFloat
    +131    operational_head: TimeSeriesFloat
    +132
    +133    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + CompressorResult(EquipmentResultBase): + + + +
    + +
    136class CompressorResult(EquipmentResultBase):
    +137    componentType: Literal[ComponentType.COMPRESSOR]
    +138    recirculation_loss: TimeSeriesRate
    +139    rate_exceeds_maximum: TimeSeriesBoolean
    +140    outlet_pressure_before_choking: TimeSeriesFloat
    +141
    +142    streams: Optional[List[TimeSeriesStreamConditions]]  # Optional because only in v2
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + VentingEmitterResult(EquipmentResultBase): + + + +
    + +
    145class VentingEmitterResult(EquipmentResultBase):
    +146    componentType: Literal[ComponentType.VENTING_EMITTER]
    +
    + + +

    Base component for all results: Model, Installation, GenSet, Consumer System, Consumer, etc.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + ConsumerModelResultBase(NodeInfo, CommonResultBase): + + + +
    + +
    149class ConsumerModelResultBase(NodeInfo, CommonResultBase):
    +150    """The Consumer base result component."""
    +151
    +152    ...
    +
    + + +

    The Consumer base result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + PumpModelResult(ConsumerModelResultBase): + + + +
    + +
    155class PumpModelResult(ConsumerModelResultBase):
    +156    """The Pump result component."""
    +157
    +158    componentType: Literal[ComponentType.PUMP]
    +159    inlet_liquid_rate_m3_per_day: Optional[TimeSeriesRate] = None
    +160    inlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +161    outlet_pressure_bar: Optional[TimeSeriesFloat] = None
    +162    operational_head: Optional[TimeSeriesFloat] = None
    +163    is_valid: TimeSeriesBoolean
    +
    + + +

    The Pump result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + TurbineModelResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    166class TurbineModelResult(EcalcResultBaseModel):
    +167    energy_usage_unit: Unit
    +168    power_unit: Unit
    +169    efficiency: TimeSeriesFloat
    +170    energy_usage: TimeSeriesRate
    +171    exceeds_maximum_load: TimeSeriesBoolean
    +172    fuel_rate: TimeSeriesRate
    +173    is_valid: TimeSeriesBoolean
    +174    load: TimeSeriesRate
    +175    power: TimeSeriesRate
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorStreamConditionResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    178class CompressorStreamConditionResult(EcalcResultBaseModel):
    +179    actual_rate_m3_per_hr: TimeSeriesRate
    +180    actual_rate_before_asv_m3_per_hr: TimeSeriesRate
    +181    kappa: TimeSeriesFloat
    +182    density_kg_per_m3: TimeSeriesRate
    +183    pressure: TimeSeriesFloat
    +184    pressure_before_choking: TimeSeriesFloat
    +185    temperature_kelvin: TimeSeriesFloat
    +186    z: TimeSeriesFloat
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorModelStageResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    189class CompressorModelStageResult(EcalcResultBaseModel):
    +190    chart: Optional[Union[SingleSpeedChart, VariableSpeedChart]]
    +191    chart_area_flags: List[str]
    +192    energy_usage_unit: Unit
    +193    power_unit: Unit
    +194    fluid_composition: Dict[str, Optional[float]]
    +195
    +196    head_exceeds_maximum: TimeSeriesBoolean
    +197    is_valid: TimeSeriesBoolean
    +198    polytropic_efficiency: TimeSeriesFloat
    +199    polytropic_enthalpy_change_before_choke_kJ_per_kg: TimeSeriesFloat
    +200    polytropic_enthalpy_change_kJ_per_kg: TimeSeriesFloat
    +201    polytropic_head_kJ_per_kg: TimeSeriesFloat
    +202    asv_recirculation_loss_mw: TimeSeriesRate
    +203    energy_usage: TimeSeriesRate
    +204    mass_rate_kg_per_hr: TimeSeriesRate
    +205    mass_rate_before_asv_kg_per_hr: TimeSeriesRate
    +206    power: TimeSeriesRate
    +207    pressure_is_choked: TimeSeriesBoolean
    +208    rate_exceeds_maximum: TimeSeriesBoolean
    +209    rate_has_recirculation: TimeSeriesBoolean
    +210    speed: TimeSeriesFloat
    +211    inlet_stream_condition: CompressorStreamConditionResult
    +212    outlet_stream_condition: CompressorStreamConditionResult
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + CompressorModelResult(ConsumerModelResultBase): + + + +
    + +
    215class CompressorModelResult(ConsumerModelResultBase):
    +216    componentType: Literal[ComponentType.COMPRESSOR]
    +217    failure_status: List[Optional[CompressorTrainCommonShaftFailureStatus]]
    +218    requested_inlet_pressure: TimeSeriesFloat
    +219    requested_outlet_pressure: TimeSeriesFloat
    +220    rate: TimeSeriesRate
    +221    maximum_rate: TimeSeriesRate
    +222    stage_results: List[CompressorModelStageResult]
    +223    turbine_result: Optional[TurbineModelResult] = None
    +
    + + +

    The Consumer base result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + GenericModelResult(ConsumerModelResultBase): + + + +
    + +
    226class GenericModelResult(ConsumerModelResultBase):
    +227    """Generic consumer result component."""
    +228
    +229    componentType: Literal[ComponentType.GENERIC]
    +
    + + +

    Generic consumer result component.

    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    + +
    +
    +
    +
    + +
    + + class + EcalcModelResult(libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
    253class EcalcModelResult(EcalcResultBaseModel):
    +254    """Result object holding one component for each part of the eCalc model run:
    +255
    +256    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult
    +257    """
    +258
    +259    component_result: ComponentResult
    +260    sub_components: List[ComponentResult]
    +261    models: List[ConsumerModelResult]
    +262
    +263    @field_validator("sub_components")
    +264    @classmethod
    +265    def sort_sub_components(cls, sub_components):
    +266        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +267
    +268    @field_validator("models")
    +269    @classmethod
    +270    def sort_models(cls, models):
    +271        return sorted(models, key=attrgetter("componentType", "name"))
    +272
    +273    @property
    +274    def timesteps(self):
    +275        return self.component_result.timesteps
    +276
    +277    @property
    +278    def components(self) -> List[ComponentResult]:
    +279        return [self.component_result, *self.sub_components]
    +280
    +281    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +282        return [component for component in self.components if component.id in component_ids]
    +283
    +284    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +285        components = [component for component in self.components if component.name == component_name]
    +286        if not components:
    +287            return None
    +288
    +289        if len(components) > 1:
    +290            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +291
    +292        return components[0]
    +293
    +294    def resample(self, freq: Frequency) -> EcalcModelResult:
    +295        return Numbers.format_results_to_precision(
    +296            self.__class__(
    +297                component_result=self.component_result.resample(freq),
    +298                sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +299                models=[model.resample(freq) for model in self.models],
    +300            ),
    +301            precision=6,
    +302        )
    +
    + + +

    Result object holding one component for each part of the eCalc model run:

    + +

    ModelResult, InstallationResult, GeneratorSetResult, ConsumerSystemResult, ConsumerGroupResult and ConsumerResult

    +
    + + +
    + +
    +
    @field_validator('sub_components')
    +
    @classmethod
    + + def + sort_sub_components(cls, sub_components): + + + +
    + +
    263    @field_validator("sub_components")
    +264    @classmethod
    +265    def sort_sub_components(cls, sub_components):
    +266        return sorted(sub_components, key=attrgetter("componentType", "name"))
    +
    + + + + +
    +
    + +
    +
    @field_validator('models')
    +
    @classmethod
    + + def + sort_models(cls, models): + + + +
    + +
    268    @field_validator("models")
    +269    @classmethod
    +270    def sort_models(cls, models):
    +271        return sorted(models, key=attrgetter("componentType", "name"))
    +
    + + + + +
    +
    + + + +
    281    def get_components(self, component_ids: List[str]) -> List[ComponentResult]:
    +282        return [component for component in self.components if component.id in component_ids]
    +
    + + + + +
    +
    + + + +
    284    def get_component_by_name(self, component_name: str) -> Optional[ComponentResult]:
    +285        components = [component for component in self.components if component.name == component_name]
    +286        if not components:
    +287            return None
    +288
    +289        if len(components) > 1:
    +290            logger.warning(f"Querying duplicate component {component_name}. Returning first match")
    +291
    +292        return components[0]
    +
    + + + + +
    +
    + +
    + + def + resample( self, freq: libecalc.common.time_utils.Frequency) -> libecalc.dto.result.results.EcalcModelResult: + + + +
    + +
    294    def resample(self, freq: Frequency) -> EcalcModelResult:
    +295        return Numbers.format_results_to_precision(
    +296            self.__class__(
    +297                component_result=self.component_result.resample(freq),
    +298                sub_components=[sub_component.resample(freq) for sub_component in self.sub_components],
    +299                models=[model.resample(freq) for model in self.models],
    +300            ),
    +301            precision=6,
    +302        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/tabular_time_series.html b/docs/about/references/api/libecalc/dto/result/tabular_time_series.html new file mode 100644 index 0000000000..41513270a1 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/tabular_time_series.html @@ -0,0 +1,671 @@ + + + + + + + libecalc.dto.result.tabular_time_series API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.tabular_time_series

    + + + + + + +
      1from abc import ABC
    +  2from datetime import datetime
    +  3from typing import List, Optional
    +  4
    +  5import pandas as pd
    +  6from typing_extensions import Self
    +  7
    +  8from libecalc.common.time_utils import Frequency, resample_time_steps
    +  9from libecalc.common.units import Unit
    + 10from libecalc.common.utils.rates import (
    + 11    RateType,
    + 12    TimeSeries,
    + 13    TimeSeriesBoolean,
    + 14    TimeSeriesRate,
    + 15    TimeSeriesVolumesCumulative,
    + 16)
    + 17from libecalc.dto.result.base import EcalcResultBaseModel
    + 18
    + 19
    + 20class TabularTimeSeries(ABC, EcalcResultBaseModel):
    + 21    name: str
    + 22    timesteps: List[datetime]
    + 23
    + 24    def to_dataframe(
    + 25        self,
    + 26        prefix: Optional[str] = None,
    + 27    ) -> pd.DataFrame:
    + 28        """
    + 29        Provide a dataframe representing the timeseries data in the object.
    + 30
    + 31        TimeSeriesBoolean is converted into ints.
    + 32
    + 33        Args:
    + 34            prefix: prefix for all column names
    + 35
    + 36        Returns:
    + 37
    + 38        """
    + 39        timesteps = self.timesteps
    + 40        df = pd.DataFrame(index=timesteps)
    + 41
    + 42        for attribute_name, attribute_value in self.__dict__.items():
    + 43            if isinstance(attribute_value, TimeSeries):
    + 44                unit_value = attribute_value.unit
    + 45                if isinstance(attribute_value, TimeSeriesRate):
    + 46                    unit_extension = "sd" if attribute_value.rate_type == RateType.STREAM_DAY else "cd"
    + 47                    if attribute_value.unit == Unit.MEGA_WATT:
    + 48                        unit_value = unit_value.replace(Unit.MEGA_WATT, f"{Unit.MEGA_WATT} ({unit_extension})")
    + 49                    else:
    + 50                        unit_value = unit_value.replace("/d", f"/{unit_extension}")
    + 51                elif isinstance(attribute_value, TimeSeriesVolumesCumulative):
    + 52                    unit_value = unit_value.replace(attribute_value.unit, f"{attribute_value.unit} (cd)")
    + 53
    + 54                column_name = f"{attribute_name}[{unit_value}]"
    + 55
    + 56                if isinstance(attribute_value, TimeSeriesBoolean):
    + 57                    values = [int(v) for v in attribute_value.values]
    + 58                else:
    + 59                    values = attribute_value.values
    + 60
    + 61                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    + 62                df = df.join(timeseries_df)
    + 63            elif isinstance(attribute_value, list):
    + 64                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    + 65                    for item in attribute_value:
    + 66                        tabular_df = item.to_dataframe(prefix=item.name)
    + 67                        df = df.join(tabular_df)
    + 68
    + 69            elif (
    + 70                isinstance(attribute_value, dict)
    + 71                and len(attribute_value) > 0
    + 72                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    + 73            ):
    + 74                for item in attribute_value.values():
    + 75                    tabular_df = item.to_dataframe(prefix=item.name)
    + 76                    df = df.join(tabular_df)
    + 77
    + 78        if prefix is not None:
    + 79            df = df.add_prefix(prefix=f"{prefix}.")
    + 80
    + 81        return df
    + 82
    + 83    def resample(self, freq: Frequency) -> Self:
    + 84        """
    + 85        Immutable - returns a copy of itself
    + 86
    + 87        Resample the given time series to the new Frequency given. Only data
    + 88        that is defined as a timeseries will be resampled.
    + 89
    + 90        Args:
    + 91            freq: which frequency to resample to
    + 92
    + 93        Returns: return a copy of itself with all data resampled to given frequency
    + 94
    + 95        """
    + 96        if freq == freq.NONE:
    + 97            return self.model_copy()
    + 98        resampled = self.model_copy()
    + 99        for attribute, values in self.__dict__.items():
    +100            if isinstance(values, TimeSeries):
    +101                resampled.__setattr__(attribute, values.resample(freq=freq))
    +102
    +103            elif isinstance(values, list):
    +104                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    +105                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    +106
    +107            elif isinstance(values, dict):
    +108                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    +109                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    +110                else:
    +111                    # NOTE: Operational settings are not resampled. Should add support?
    +112                    pass
    +113            else:
    +114                # NOTE: turbine_result is not resampled. Should add support?
    +115                pass
    +116
    +117        resampled.timesteps = resample_time_steps(self.timesteps, frequency=freq)
    +118        return resampled
    +
    + + +
    +
    + +
    + + class + TabularTimeSeries(abc.ABC, libecalc.dto.result.base.EcalcResultBaseModel): + + + +
    + +
     21class TabularTimeSeries(ABC, EcalcResultBaseModel):
    + 22    name: str
    + 23    timesteps: List[datetime]
    + 24
    + 25    def to_dataframe(
    + 26        self,
    + 27        prefix: Optional[str] = None,
    + 28    ) -> pd.DataFrame:
    + 29        """
    + 30        Provide a dataframe representing the timeseries data in the object.
    + 31
    + 32        TimeSeriesBoolean is converted into ints.
    + 33
    + 34        Args:
    + 35            prefix: prefix for all column names
    + 36
    + 37        Returns:
    + 38
    + 39        """
    + 40        timesteps = self.timesteps
    + 41        df = pd.DataFrame(index=timesteps)
    + 42
    + 43        for attribute_name, attribute_value in self.__dict__.items():
    + 44            if isinstance(attribute_value, TimeSeries):
    + 45                unit_value = attribute_value.unit
    + 46                if isinstance(attribute_value, TimeSeriesRate):
    + 47                    unit_extension = "sd" if attribute_value.rate_type == RateType.STREAM_DAY else "cd"
    + 48                    if attribute_value.unit == Unit.MEGA_WATT:
    + 49                        unit_value = unit_value.replace(Unit.MEGA_WATT, f"{Unit.MEGA_WATT} ({unit_extension})")
    + 50                    else:
    + 51                        unit_value = unit_value.replace("/d", f"/{unit_extension}")
    + 52                elif isinstance(attribute_value, TimeSeriesVolumesCumulative):
    + 53                    unit_value = unit_value.replace(attribute_value.unit, f"{attribute_value.unit} (cd)")
    + 54
    + 55                column_name = f"{attribute_name}[{unit_value}]"
    + 56
    + 57                if isinstance(attribute_value, TimeSeriesBoolean):
    + 58                    values = [int(v) for v in attribute_value.values]
    + 59                else:
    + 60                    values = attribute_value.values
    + 61
    + 62                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    + 63                df = df.join(timeseries_df)
    + 64            elif isinstance(attribute_value, list):
    + 65                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    + 66                    for item in attribute_value:
    + 67                        tabular_df = item.to_dataframe(prefix=item.name)
    + 68                        df = df.join(tabular_df)
    + 69
    + 70            elif (
    + 71                isinstance(attribute_value, dict)
    + 72                and len(attribute_value) > 0
    + 73                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    + 74            ):
    + 75                for item in attribute_value.values():
    + 76                    tabular_df = item.to_dataframe(prefix=item.name)
    + 77                    df = df.join(tabular_df)
    + 78
    + 79        if prefix is not None:
    + 80            df = df.add_prefix(prefix=f"{prefix}.")
    + 81
    + 82        return df
    + 83
    + 84    def resample(self, freq: Frequency) -> Self:
    + 85        """
    + 86        Immutable - returns a copy of itself
    + 87
    + 88        Resample the given time series to the new Frequency given. Only data
    + 89        that is defined as a timeseries will be resampled.
    + 90
    + 91        Args:
    + 92            freq: which frequency to resample to
    + 93
    + 94        Returns: return a copy of itself with all data resampled to given frequency
    + 95
    + 96        """
    + 97        if freq == freq.NONE:
    + 98            return self.model_copy()
    + 99        resampled = self.model_copy()
    +100        for attribute, values in self.__dict__.items():
    +101            if isinstance(values, TimeSeries):
    +102                resampled.__setattr__(attribute, values.resample(freq=freq))
    +103
    +104            elif isinstance(values, list):
    +105                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    +106                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    +107
    +108            elif isinstance(values, dict):
    +109                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    +110                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    +111                else:
    +112                    # NOTE: Operational settings are not resampled. Should add support?
    +113                    pass
    +114            else:
    +115                # NOTE: turbine_result is not resampled. Should add support?
    +116                pass
    +117
    +118        resampled.timesteps = resample_time_steps(self.timesteps, frequency=freq)
    +119        return resampled
    +
    + + +

    Helper class that provides a standard way to create an ABC using +inheritance.

    +
    + + +
    + +
    + + def + to_dataframe(self, prefix: Union[str, NoneType] = None) -> pandas.core.frame.DataFrame: + + + +
    + +
    25    def to_dataframe(
    +26        self,
    +27        prefix: Optional[str] = None,
    +28    ) -> pd.DataFrame:
    +29        """
    +30        Provide a dataframe representing the timeseries data in the object.
    +31
    +32        TimeSeriesBoolean is converted into ints.
    +33
    +34        Args:
    +35            prefix: prefix for all column names
    +36
    +37        Returns:
    +38
    +39        """
    +40        timesteps = self.timesteps
    +41        df = pd.DataFrame(index=timesteps)
    +42
    +43        for attribute_name, attribute_value in self.__dict__.items():
    +44            if isinstance(attribute_value, TimeSeries):
    +45                unit_value = attribute_value.unit
    +46                if isinstance(attribute_value, TimeSeriesRate):
    +47                    unit_extension = "sd" if attribute_value.rate_type == RateType.STREAM_DAY else "cd"
    +48                    if attribute_value.unit == Unit.MEGA_WATT:
    +49                        unit_value = unit_value.replace(Unit.MEGA_WATT, f"{Unit.MEGA_WATT} ({unit_extension})")
    +50                    else:
    +51                        unit_value = unit_value.replace("/d", f"/{unit_extension}")
    +52                elif isinstance(attribute_value, TimeSeriesVolumesCumulative):
    +53                    unit_value = unit_value.replace(attribute_value.unit, f"{attribute_value.unit} (cd)")
    +54
    +55                column_name = f"{attribute_name}[{unit_value}]"
    +56
    +57                if isinstance(attribute_value, TimeSeriesBoolean):
    +58                    values = [int(v) for v in attribute_value.values]
    +59                else:
    +60                    values = attribute_value.values
    +61
    +62                timeseries_df = pd.DataFrame({column_name: values}, index=attribute_value.timesteps)
    +63                df = df.join(timeseries_df)
    +64            elif isinstance(attribute_value, list):
    +65                if len(attribute_value) > 0 and all(isinstance(item, TabularTimeSeries) for item in attribute_value):
    +66                    for item in attribute_value:
    +67                        tabular_df = item.to_dataframe(prefix=item.name)
    +68                        df = df.join(tabular_df)
    +69
    +70            elif (
    +71                isinstance(attribute_value, dict)
    +72                and len(attribute_value) > 0
    +73                and all(isinstance(item, TabularTimeSeries) for item in attribute_value.values())
    +74            ):
    +75                for item in attribute_value.values():
    +76                    tabular_df = item.to_dataframe(prefix=item.name)
    +77                    df = df.join(tabular_df)
    +78
    +79        if prefix is not None:
    +80            df = df.add_prefix(prefix=f"{prefix}.")
    +81
    +82        return df
    +
    + + +

    Provide a dataframe representing the timeseries data in the object.

    + +

    TimeSeriesBoolean is converted into ints.

    + +

    Args: + prefix: prefix for all column names

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + resample( self, freq: libecalc.common.time_utils.Frequency) -> typing_extensions.Self: + + + +
    + +
     84    def resample(self, freq: Frequency) -> Self:
    + 85        """
    + 86        Immutable - returns a copy of itself
    + 87
    + 88        Resample the given time series to the new Frequency given. Only data
    + 89        that is defined as a timeseries will be resampled.
    + 90
    + 91        Args:
    + 92            freq: which frequency to resample to
    + 93
    + 94        Returns: return a copy of itself with all data resampled to given frequency
    + 95
    + 96        """
    + 97        if freq == freq.NONE:
    + 98            return self.model_copy()
    + 99        resampled = self.model_copy()
    +100        for attribute, values in self.__dict__.items():
    +101            if isinstance(values, TimeSeries):
    +102                resampled.__setattr__(attribute, values.resample(freq=freq))
    +103
    +104            elif isinstance(values, list):
    +105                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values):
    +106                    resampled.__setattr__(attribute, [item.resample(freq) for item in values])
    +107
    +108            elif isinstance(values, dict):
    +109                if len(values) > 0 and all(isinstance(item, TabularTimeSeries) for item in values.values()):
    +110                    resampled.__setattr__(attribute, {key: item.resample(freq) for key, item in values.items()})
    +111                else:
    +112                    # NOTE: Operational settings are not resampled. Should add support?
    +113                    pass
    +114            else:
    +115                # NOTE: turbine_result is not resampled. Should add support?
    +116                pass
    +117
    +118        resampled.timesteps = resample_time_steps(self.timesteps, frequency=freq)
    +119        return resampled
    +
    + + +

    Immutable - returns a copy of itself

    + +

    Resample the given time series to the new Frequency given. Only data +that is defined as a timeseries will be resampled.

    + +

    Args: + freq: which frequency to resample to

    + +

    Returns: return a copy of itself with all data resampled to given frequency

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result/types.html b/docs/about/references/api/libecalc/dto/result/types.html new file mode 100644 index 0000000000..9f6471add4 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result/types.html @@ -0,0 +1,455 @@ + + + + + + + libecalc.dto.result.types API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result.types

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from enum import Enum
    + 4from typing import Optional
    + 5
    + 6opt_float = Optional[float]
    + 7
    + 8
    + 9class CompressorTrainCommonShaftFailureStatus(str, Enum):
    +10    TARGET_DISCHARGE_PRESSURE_TOO_HIGH = "TARGET_DISCHARGE_PRESSURE_TOO_HIGH"
    +11    TARGET_DISCHARGE_PRESSURE_TOO_LOW = "TARGET_DISCHARGE_PRESSURE_TOO_LOW"
    +12    SUCTION_PRESSURE_TOO_LOW = "SUCTION_PRESSURE_TOO_LOW"
    +13    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +14    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +15    ABOVE_MAXIMUM_POWER = "ABOVE_MAXIMUM_POWER"
    +16    NOT_CALCULATED = "NOT_CALCULATED"
    +
    + + +
    +
    + +
    + + class + CompressorTrainCommonShaftFailureStatus(builtins.str, enum.Enum): + + + +
    + +
    10class CompressorTrainCommonShaftFailureStatus(str, Enum):
    +11    TARGET_DISCHARGE_PRESSURE_TOO_HIGH = "TARGET_DISCHARGE_PRESSURE_TOO_HIGH"
    +12    TARGET_DISCHARGE_PRESSURE_TOO_LOW = "TARGET_DISCHARGE_PRESSURE_TOO_LOW"
    +13    SUCTION_PRESSURE_TOO_LOW = "SUCTION_PRESSURE_TOO_LOW"
    +14    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +15    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +16    ABOVE_MAXIMUM_POWER = "ABOVE_MAXIMUM_POWER"
    +17    NOT_CALCULATED = "NOT_CALCULATED"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + TARGET_DISCHARGE_PRESSURE_TOO_HIGH = + + <CompressorTrainCommonShaftFailureStatus.TARGET_DISCHARGE_PRESSURE_TOO_HIGH: 'TARGET_DISCHARGE_PRESSURE_TOO_HIGH'> + + +
    + + + + +
    +
    +
    + TARGET_DISCHARGE_PRESSURE_TOO_LOW = + + <CompressorTrainCommonShaftFailureStatus.TARGET_DISCHARGE_PRESSURE_TOO_LOW: 'TARGET_DISCHARGE_PRESSURE_TOO_LOW'> + + +
    + + + + +
    +
    +
    + SUCTION_PRESSURE_TOO_LOW = +<CompressorTrainCommonShaftFailureStatus.SUCTION_PRESSURE_TOO_LOW: 'SUCTION_PRESSURE_TOO_LOW'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_FLOW_RATE = +<CompressorTrainCommonShaftFailureStatus.ABOVE_MAXIMUM_FLOW_RATE: 'ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_FLOW_RATE = +<CompressorTrainCommonShaftFailureStatus.BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_POWER = +<CompressorTrainCommonShaftFailureStatus.ABOVE_MAXIMUM_POWER: 'ABOVE_MAXIMUM_POWER'> + + +
    + + + + +
    +
    +
    + NOT_CALCULATED = +<CompressorTrainCommonShaftFailureStatus.NOT_CALCULATED: 'NOT_CALCULATED'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/result_options.html b/docs/about/references/api/libecalc/dto/result_options.html new file mode 100644 index 0000000000..4e8be54124 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/result_options.html @@ -0,0 +1,343 @@ + + + + + + + libecalc.dto.result_options API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.result_options

    + + + + + + +
     1from datetime import datetime
    + 2from typing import Optional
    + 3
    + 4from libecalc.common.time_utils import Frequency
    + 5from libecalc.dto.base import EcalcBaseModel
    + 6
    + 7
    + 8class ResultOptions(EcalcBaseModel):
    + 9    start: Optional[datetime] = None
    +10    end: Optional[datetime] = None
    +11
    +12    output_frequency: Frequency = Frequency.NONE
    +
    + + +
    +
    + +
    + + class + ResultOptions(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
     9class ResultOptions(EcalcBaseModel):
    +10    start: Optional[datetime] = None
    +11    end: Optional[datetime] = None
    +12
    +13    output_frequency: Frequency = Frequency.NONE
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/types.html b/docs/about/references/api/libecalc/dto/types.html new file mode 100644 index 0000000000..8b72651eff --- /dev/null +++ b/docs/about/references/api/libecalc/dto/types.html @@ -0,0 +1,2907 @@ + + + + + + + libecalc.dto.types API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.types

    + + + + + + +
      1from enum import Enum
    +  2from typing import List, Optional
    +  3
    +  4from pydantic import Field, field_validator
    +  5from pydantic_core.core_schema import ValidationInfo
    +  6
    +  7from libecalc.dto.base import EcalcBaseModel, FuelTypeUserDefinedCategoryType
    +  8from libecalc.dto.emission import Emission
    +  9
    + 10
    + 11class ConsumptionType(str, Enum):
    + 12    FUEL = "FUEL"
    + 13    ELECTRICITY = "ELECTRICITY"
    + 14
    + 15
    + 16class EnergyUsageType(str, Enum):
    + 17    FUEL = "FUEL"
    + 18    POWER = "POWER"
    + 19
    + 20
    + 21class ConsumerType(str, Enum):
    + 22    DIRECT = "DIRECT"
    + 23    COMPRESSOR = "COMPRESSOR"
    + 24    PUMP = "PUMP"
    + 25    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    + 26    PUMP_SYSTEM = "PUMP_SYSTEM"
    + 27    TABULATED = "TABULATED"
    + 28    GENERATOR_SET_SIMPLE = "GENERATOR_SET_SIMPLE"
    + 29
    + 30
    + 31class EnergyModelType(str, Enum):
    + 32    GENERATOR_SET_SAMPLED = "GENERATOR_SET_SAMPLED"
    + 33    TABULATED = "TABULATED"
    + 34    COMPRESSOR_SAMPLED = "COMPRESSOR_SAMPLED"
    + 35    PUMP_MODEL = "PUMP_MODEL"
    + 36    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS"
    + 37    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS"
    + 38    VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    + 39    SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    + 40    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = (
    + 41        "VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"
    + 42    )
    + 43    TURBINE = "TURBINE"
    + 44    COMPRESSOR_WITH_TURBINE = "COMPRESSOR_WITH_TURBINE"
    + 45
    + 46
    + 47class ChartType(str, Enum):
    + 48    SINGLE_SPEED = "SINGLE_SPEED_CHART"
    + 49    VARIABLE_SPEED = "VARIABLE_SPEED_CHART"
    + 50    GENERIC_FROM_DESIGN_POINT = "GENERIC_CHART_FROM_DESIGN_POINT"
    + 51    GENERIC_FROM_INPUT = "GENERIC_CHART_FROM_INPUT"
    + 52
    + 53
    + 54class ChartRateUnit(str, Enum):
    + 55    AM3_PER_HOUR = "AM3_PER_HOUR"
    + 56
    + 57
    + 58class ChartPolytropicHeadUnit(str, Enum):
    + 59    J_PER_KG = "JOULE_PER_KG"
    + 60    KJ_PER_KG = "KJ_PER_KG"
    + 61    M = "M"
    + 62
    + 63
    + 64class ChartEfficiencyUnit(str, Enum):
    + 65    FRACTION = "FRACTION"
    + 66    PERCENTAGE = "PERCENTAGE"
    + 67
    + 68
    + 69class ChartControlMarginUnit(str, Enum):
    + 70    FRACTION = "FRACTION"
    + 71    PERCENTAGE = "PERCENTAGE"
    + 72
    + 73
    + 74class EoSModel(str, Enum):
    + 75    SRK = "SRK"
    + 76    PR = "PR"
    + 77    GERG_SRK = "GERG_SRK"
    + 78    GERG_PR = "GERG_PR"
    + 79
    + 80
    + 81class FluidStreamFlowRateType(str, Enum):
    + 82    STANDARD_RATE = "Sm3/day"  # Standard conditions are 15 C at 1 atm = 1.01325 bara
    + 83    ACTUAL_VOLUME_RATE = "Am3/hr"
    + 84    MASS_RATE = "kg/hr"
    + 85
    + 86
    + 87class FixedSpeedPressureControl(str, Enum):
    + 88    UPSTREAM_CHOKE = "UPSTREAM_CHOKE"
    + 89    DOWNSTREAM_CHOKE = "DOWNSTREAM_CHOKE"
    + 90    INDIVIDUAL_ASV_PRESSURE = "INDIVIDUAL_ASV_PRESSURE"
    + 91    INDIVIDUAL_ASV_RATE = "INDIVIDUAL_ASV_RATE"
    + 92    COMMON_ASV = "COMMON_ASV"
    + 93
    + 94
    + 95class FluidStreamType(str, Enum):
    + 96    INGOING = "INGOING"
    + 97    OUTGOING = "OUTGOING"
    + 98
    + 99
    +100# TODO: time series types defined both here and in yaml_entities.py. Should be defined once.
    +101class TimeSeriesType(str, Enum):
    +102    MISCELLANEOUS = "MISCELLANEOUS"
    +103    DEFAULT = "DEFAULT"
    +104
    +105
    +106class InterpolationType(str, Enum):
    +107    LEFT = "LEFT"
    +108    RIGHT = "RIGHT"
    +109    LINEAR = "LINEAR"
    +110
    +111
    +112class FuelType(EcalcBaseModel):
    +113    name: str
    +114    user_defined_category: Optional[FuelTypeUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +115    emissions: List[Emission] = Field(default_factory=list)
    +116
    +117    @field_validator("user_defined_category", mode="before")
    +118    @classmethod
    +119    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +120        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +121        if user_defined_category is not None:
    +122            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +123                name_context_str = ""
    +124                if (name := info.data.get("name")) is not None:
    +125                    name_context_str = f"with the name {name}"
    +126
    +127                raise ValueError(
    +128                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +129                )
    +130
    +131        return user_defined_category
    +132
    +133
    +134class ChartAreaFlag(str, Enum):
    +135    INTERNAL_POINT = "INTERNAL_POINT"
    +136    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +137    BELOW_MINIMUM_HEAD = "BELOW_MINIMUM_HEAD"
    +138    BELOW_MINIMUM_SPEED = "BELOW_MINIMUM_SPEED"
    +139    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +140    ABOVE_MAXIMUM_HEAD = "ABOVE_MAXIMUM_HEAD"
    +141    ABOVE_MAXIMUM_SPEED = "ABOVE_MAXIMUM_SPEED"
    +142    BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE"
    +143    BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE"
    +144    NOT_CALCULATED = "NOT_CALCULATED"
    +145    NO_FLOW_RATE = "NO_FLOW_RATE"
    +
    + + +
    +
    + +
    + + class + ConsumptionType(builtins.str, enum.Enum): + + + +
    + +
    12class ConsumptionType(str, Enum):
    +13    FUEL = "FUEL"
    +14    ELECTRICITY = "ELECTRICITY"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL = +<ConsumptionType.FUEL: 'FUEL'> + + +
    + + + + +
    +
    +
    + ELECTRICITY = +<ConsumptionType.ELECTRICITY: 'ELECTRICITY'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyUsageType(builtins.str, enum.Enum): + + + +
    + +
    17class EnergyUsageType(str, Enum):
    +18    FUEL = "FUEL"
    +19    POWER = "POWER"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FUEL = +<EnergyUsageType.FUEL: 'FUEL'> + + +
    + + + + +
    +
    +
    + POWER = +<EnergyUsageType.POWER: 'POWER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ConsumerType(builtins.str, enum.Enum): + + + +
    + +
    22class ConsumerType(str, Enum):
    +23    DIRECT = "DIRECT"
    +24    COMPRESSOR = "COMPRESSOR"
    +25    PUMP = "PUMP"
    +26    COMPRESSOR_SYSTEM = "COMPRESSOR_SYSTEM"
    +27    PUMP_SYSTEM = "PUMP_SYSTEM"
    +28    TABULATED = "TABULATED"
    +29    GENERATOR_SET_SIMPLE = "GENERATOR_SET_SIMPLE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + DIRECT = +<ConsumerType.DIRECT: 'DIRECT'> + + +
    + + + + +
    +
    +
    + COMPRESSOR = +<ConsumerType.COMPRESSOR: 'COMPRESSOR'> + + +
    + + + + +
    +
    +
    + PUMP = +<ConsumerType.PUMP: 'PUMP'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SYSTEM = +<ConsumerType.COMPRESSOR_SYSTEM: 'COMPRESSOR_SYSTEM'> + + +
    + + + + +
    +
    +
    + PUMP_SYSTEM = +<ConsumerType.PUMP_SYSTEM: 'PUMP_SYSTEM'> + + +
    + + + + +
    +
    +
    + TABULATED = +<ConsumerType.TABULATED: 'TABULATED'> + + +
    + + + + +
    +
    +
    + GENERATOR_SET_SIMPLE = +<ConsumerType.GENERATOR_SET_SIMPLE: 'GENERATOR_SET_SIMPLE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EnergyModelType(builtins.str, enum.Enum): + + + +
    + +
    32class EnergyModelType(str, Enum):
    +33    GENERATOR_SET_SAMPLED = "GENERATOR_SET_SAMPLED"
    +34    TABULATED = "TABULATED"
    +35    COMPRESSOR_SAMPLED = "COMPRESSOR_SAMPLED"
    +36    PUMP_MODEL = "PUMP_MODEL"
    +37    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS"
    +38    COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = "COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS"
    +39    VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    +40    SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = "SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT"
    +41    VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = (
    +42        "VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES"
    +43    )
    +44    TURBINE = "TURBINE"
    +45    COMPRESSOR_WITH_TURBINE = "COMPRESSOR_WITH_TURBINE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + GENERATOR_SET_SAMPLED = +<EnergyModelType.GENERATOR_SET_SAMPLED: 'GENERATOR_SET_SAMPLED'> + + +
    + + + + +
    +
    +
    + TABULATED = +<EnergyModelType.TABULATED: 'TABULATED'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_SAMPLED = +<EnergyModelType.COMPRESSOR_SAMPLED: 'COMPRESSOR_SAMPLED'> + + +
    + + + + +
    +
    +
    + PUMP_MODEL = +<EnergyModelType.PUMP_MODEL: 'PUMP_MODEL'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES = + + <EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_STAGES: 'COMPRESSOR_TRAIN_SIMPLIFIED_WITH_KNOWN_NUMBER_OF_COMPRESSORS'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES = + + <EnergyModelType.COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_STAGES: 'COMPRESSOR_TRAIN_SIMPLIFIED_WITH_UNKNOWN_NUMBER_OF_COMPRESSORS'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = + + <EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT: 'VARIABLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT'> + + +
    + + + + +
    +
    +
    + SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT = + + <EnergyModelType.SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT: 'SINGLE_SPEED_COMPRESSOR_TRAIN_COMMON_SHAFT'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES = + + <EnergyModelType.VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES: 'VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES'> + + +
    + + + + +
    +
    +
    + TURBINE = +<EnergyModelType.TURBINE: 'TURBINE'> + + +
    + + + + +
    +
    +
    + COMPRESSOR_WITH_TURBINE = +<EnergyModelType.COMPRESSOR_WITH_TURBINE: 'COMPRESSOR_WITH_TURBINE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartType(builtins.str, enum.Enum): + + + +
    + +
    48class ChartType(str, Enum):
    +49    SINGLE_SPEED = "SINGLE_SPEED_CHART"
    +50    VARIABLE_SPEED = "VARIABLE_SPEED_CHART"
    +51    GENERIC_FROM_DESIGN_POINT = "GENERIC_CHART_FROM_DESIGN_POINT"
    +52    GENERIC_FROM_INPUT = "GENERIC_CHART_FROM_INPUT"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + SINGLE_SPEED = +<ChartType.SINGLE_SPEED: 'SINGLE_SPEED_CHART'> + + +
    + + + + +
    +
    +
    + VARIABLE_SPEED = +<ChartType.VARIABLE_SPEED: 'VARIABLE_SPEED_CHART'> + + +
    + + + + +
    +
    +
    + GENERIC_FROM_DESIGN_POINT = +<ChartType.GENERIC_FROM_DESIGN_POINT: 'GENERIC_CHART_FROM_DESIGN_POINT'> + + +
    + + + + +
    +
    +
    + GENERIC_FROM_INPUT = +<ChartType.GENERIC_FROM_INPUT: 'GENERIC_CHART_FROM_INPUT'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartRateUnit(builtins.str, enum.Enum): + + + +
    + +
    55class ChartRateUnit(str, Enum):
    +56    AM3_PER_HOUR = "AM3_PER_HOUR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + AM3_PER_HOUR = +<ChartRateUnit.AM3_PER_HOUR: 'AM3_PER_HOUR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartPolytropicHeadUnit(builtins.str, enum.Enum): + + + +
    + +
    59class ChartPolytropicHeadUnit(str, Enum):
    +60    J_PER_KG = "JOULE_PER_KG"
    +61    KJ_PER_KG = "KJ_PER_KG"
    +62    M = "M"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + J_PER_KG = +<ChartPolytropicHeadUnit.J_PER_KG: 'JOULE_PER_KG'> + + +
    + + + + +
    +
    +
    + KJ_PER_KG = +<ChartPolytropicHeadUnit.KJ_PER_KG: 'KJ_PER_KG'> + + +
    + + + + +
    +
    +
    + M = +<ChartPolytropicHeadUnit.M: 'M'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartEfficiencyUnit(builtins.str, enum.Enum): + + + +
    + +
    65class ChartEfficiencyUnit(str, Enum):
    +66    FRACTION = "FRACTION"
    +67    PERCENTAGE = "PERCENTAGE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FRACTION = +<ChartEfficiencyUnit.FRACTION: 'FRACTION'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<ChartEfficiencyUnit.PERCENTAGE: 'PERCENTAGE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + ChartControlMarginUnit(builtins.str, enum.Enum): + + + +
    + +
    70class ChartControlMarginUnit(str, Enum):
    +71    FRACTION = "FRACTION"
    +72    PERCENTAGE = "PERCENTAGE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + FRACTION = +<ChartControlMarginUnit.FRACTION: 'FRACTION'> + + +
    + + + + +
    +
    +
    + PERCENTAGE = +<ChartControlMarginUnit.PERCENTAGE: 'PERCENTAGE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EoSModel(builtins.str, enum.Enum): + + + +
    + +
    75class EoSModel(str, Enum):
    +76    SRK = "SRK"
    +77    PR = "PR"
    +78    GERG_SRK = "GERG_SRK"
    +79    GERG_PR = "GERG_PR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + SRK = +<EoSModel.SRK: 'SRK'> + + +
    + + + + +
    +
    +
    + PR = +<EoSModel.PR: 'PR'> + + +
    + + + + +
    +
    +
    + GERG_SRK = +<EoSModel.GERG_SRK: 'GERG_SRK'> + + +
    + + + + +
    +
    +
    + GERG_PR = +<EoSModel.GERG_PR: 'GERG_PR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStreamFlowRateType(builtins.str, enum.Enum): + + + +
    + +
    82class FluidStreamFlowRateType(str, Enum):
    +83    STANDARD_RATE = "Sm3/day"  # Standard conditions are 15 C at 1 atm = 1.01325 bara
    +84    ACTUAL_VOLUME_RATE = "Am3/hr"
    +85    MASS_RATE = "kg/hr"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + STANDARD_RATE = +<FluidStreamFlowRateType.STANDARD_RATE: 'Sm3/day'> + + +
    + + + + +
    +
    +
    + ACTUAL_VOLUME_RATE = +<FluidStreamFlowRateType.ACTUAL_VOLUME_RATE: 'Am3/hr'> + + +
    + + + + +
    +
    +
    + MASS_RATE = +<FluidStreamFlowRateType.MASS_RATE: 'kg/hr'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FixedSpeedPressureControl(builtins.str, enum.Enum): + + + +
    + +
    88class FixedSpeedPressureControl(str, Enum):
    +89    UPSTREAM_CHOKE = "UPSTREAM_CHOKE"
    +90    DOWNSTREAM_CHOKE = "DOWNSTREAM_CHOKE"
    +91    INDIVIDUAL_ASV_PRESSURE = "INDIVIDUAL_ASV_PRESSURE"
    +92    INDIVIDUAL_ASV_RATE = "INDIVIDUAL_ASV_RATE"
    +93    COMMON_ASV = "COMMON_ASV"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + UPSTREAM_CHOKE = +<FixedSpeedPressureControl.UPSTREAM_CHOKE: 'UPSTREAM_CHOKE'> + + +
    + + + + +
    +
    +
    + DOWNSTREAM_CHOKE = +<FixedSpeedPressureControl.DOWNSTREAM_CHOKE: 'DOWNSTREAM_CHOKE'> + + +
    + + + + +
    +
    +
    + INDIVIDUAL_ASV_PRESSURE = +<FixedSpeedPressureControl.INDIVIDUAL_ASV_PRESSURE: 'INDIVIDUAL_ASV_PRESSURE'> + + +
    + + + + +
    +
    +
    + INDIVIDUAL_ASV_RATE = +<FixedSpeedPressureControl.INDIVIDUAL_ASV_RATE: 'INDIVIDUAL_ASV_RATE'> + + +
    + + + + +
    +
    +
    + COMMON_ASV = +<FixedSpeedPressureControl.COMMON_ASV: 'COMMON_ASV'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FluidStreamType(builtins.str, enum.Enum): + + + +
    + +
    96class FluidStreamType(str, Enum):
    +97    INGOING = "INGOING"
    +98    OUTGOING = "OUTGOING"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INGOING = +<FluidStreamType.INGOING: 'INGOING'> + + +
    + + + + +
    +
    +
    + OUTGOING = +<FluidStreamType.OUTGOING: 'OUTGOING'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + TimeSeriesType(builtins.str, enum.Enum): + + + +
    + +
    102class TimeSeriesType(str, Enum):
    +103    MISCELLANEOUS = "MISCELLANEOUS"
    +104    DEFAULT = "DEFAULT"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + MISCELLANEOUS = +<TimeSeriesType.MISCELLANEOUS: 'MISCELLANEOUS'> + + +
    + + + + +
    +
    +
    + DEFAULT = +<TimeSeriesType.DEFAULT: 'DEFAULT'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + InterpolationType(builtins.str, enum.Enum): + + + +
    + +
    107class InterpolationType(str, Enum):
    +108    LEFT = "LEFT"
    +109    RIGHT = "RIGHT"
    +110    LINEAR = "LINEAR"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + LEFT = +<InterpolationType.LEFT: 'LEFT'> + + +
    + + + + +
    +
    +
    + RIGHT = +<InterpolationType.RIGHT: 'RIGHT'> + + +
    + + + + +
    +
    +
    + LINEAR = +<InterpolationType.LINEAR: 'LINEAR'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + FuelType(libecalc.dto.base.EcalcBaseModel): + + + +
    + +
    113class FuelType(EcalcBaseModel):
    +114    name: str
    +115    user_defined_category: Optional[FuelTypeUserDefinedCategoryType] = Field(default=None, validate_default=True)
    +116    emissions: List[Emission] = Field(default_factory=list)
    +117
    +118    @field_validator("user_defined_category", mode="before")
    +119    @classmethod
    +120    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +121        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +122        if user_defined_category is not None:
    +123            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +124                name_context_str = ""
    +125                if (name := info.data.get("name")) is not None:
    +126                    name_context_str = f"with the name {name}"
    +127
    +128                raise ValueError(
    +129                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +130                )
    +131
    +132        return user_defined_category
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    + +
    +
    @field_validator('user_defined_category', mode='before')
    +
    @classmethod
    + + def + check_user_defined_category( cls, user_defined_category, info: pydantic_core.core_schema.ValidationInfo): + + + +
    + +
    118    @field_validator("user_defined_category", mode="before")
    +119    @classmethod
    +120    def check_user_defined_category(cls, user_defined_category, info: ValidationInfo):
    +121        """Provide which value and context to make it easier for user to correct wrt mandatory changes."""
    +122        if user_defined_category is not None:
    +123            if user_defined_category not in list(FuelTypeUserDefinedCategoryType):
    +124                name_context_str = ""
    +125                if (name := info.data.get("name")) is not None:
    +126                    name_context_str = f"with the name {name}"
    +127
    +128                raise ValueError(
    +129                    f"CATEGORY: {user_defined_category} is not allowed for {cls.__name__} {name_context_str}. Valid categories are: {[str(fuel_type_user_defined_category.value) for fuel_type_user_defined_category in FuelTypeUserDefinedCategoryType]}"
    +130                )
    +131
    +132        return user_defined_category
    +
    + + +

    Provide which value and context to make it easier for user to correct wrt mandatory changes.

    +
    + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + +
    + + class + ChartAreaFlag(builtins.str, enum.Enum): + + + +
    + +
    135class ChartAreaFlag(str, Enum):
    +136    INTERNAL_POINT = "INTERNAL_POINT"
    +137    BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_FLOW_RATE"
    +138    BELOW_MINIMUM_HEAD = "BELOW_MINIMUM_HEAD"
    +139    BELOW_MINIMUM_SPEED = "BELOW_MINIMUM_SPEED"
    +140    ABOVE_MAXIMUM_FLOW_RATE = "ABOVE_MAXIMUM_FLOW_RATE"
    +141    ABOVE_MAXIMUM_HEAD = "ABOVE_MAXIMUM_HEAD"
    +142    ABOVE_MAXIMUM_SPEED = "ABOVE_MAXIMUM_SPEED"
    +143    BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE"
    +144    BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = "BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE"
    +145    NOT_CALCULATED = "NOT_CALCULATED"
    +146    NO_FLOW_RATE = "NO_FLOW_RATE"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + INTERNAL_POINT = +<ChartAreaFlag.INTERNAL_POINT: 'INTERNAL_POINT'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_FLOW_RATE = +<ChartAreaFlag.BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_HEAD = +<ChartAreaFlag.BELOW_MINIMUM_HEAD: 'BELOW_MINIMUM_HEAD'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED = +<ChartAreaFlag.BELOW_MINIMUM_SPEED: 'BELOW_MINIMUM_SPEED'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_FLOW_RATE = +<ChartAreaFlag.ABOVE_MAXIMUM_FLOW_RATE: 'ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_HEAD = +<ChartAreaFlag.ABOVE_MAXIMUM_HEAD: 'ABOVE_MAXIMUM_HEAD'> + + +
    + + + + +
    +
    +
    + ABOVE_MAXIMUM_SPEED = +<ChartAreaFlag.ABOVE_MAXIMUM_SPEED: 'ABOVE_MAXIMUM_SPEED'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE = + + <ChartAreaFlag.BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE: 'BELOW_MINIMUM_SPEED_AND_BELOW_MINIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE = + + <ChartAreaFlag.BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE: 'BELOW_MINIMUM_SPEED_AND_ABOVE_MAXIMUM_FLOW_RATE'> + + +
    + + + + +
    +
    +
    + NOT_CALCULATED = +<ChartAreaFlag.NOT_CALCULATED: 'NOT_CALCULATED'> + + +
    + + + + +
    +
    +
    + NO_FLOW_RATE = +<ChartAreaFlag.NO_FLOW_RATE: 'NO_FLOW_RATE'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils.html b/docs/about/references/api/libecalc/dto/utils.html new file mode 100644 index 0000000000..8e97ae7799 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.dto.utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils/aggregators.html b/docs/about/references/api/libecalc/dto/utils/aggregators.html new file mode 100644 index 0000000000..15a0d85d18 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils/aggregators.html @@ -0,0 +1,533 @@ + + + + + + + libecalc.dto.utils.aggregators API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils.aggregators

    + + + + + + +
     1import operator
    + 2from functools import reduce
    + 3from typing import Dict, List, Protocol
    + 4
    + 5from libecalc.common.list.list_utils import transpose
    + 6from libecalc.common.utils.rates import (
    + 7    TimeSeriesBoolean,
    + 8)
    + 9from libecalc.dto.result.emission import PartialEmissionResult
    +10
    +11
    +12class HasIsValid(Protocol):
    +13    is_valid: TimeSeriesBoolean
    +14
    +15
    +16def aggregate_is_valid(components: List[HasIsValid]) -> List[bool]:
    +17    is_valid_arrays = [component.is_valid.values for component in components]
    +18    return [all(is_valid_step) for is_valid_step in transpose(is_valid_arrays)]
    +19
    +20
    +21class HasEmissions(Protocol):
    +22    emissions: List[PartialEmissionResult]
    +23
    +24
    +25def aggregate_emissions(
    +26    emissions_lists: List[Dict[str, PartialEmissionResult]],
    +27) -> Dict[str, PartialEmissionResult]:
    +28    """Aggregates emissions e.g. for a total asset across installations
    +29    Args:
    +30        emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate
    +31
    +32    Returns:
    +33        dto.types.FuelType
    +34    """
    +35
    +36    all_emissions = [emission for emissions in emissions_lists for emission in emissions.values()]
    +37
    +38    # Keep order of emissions
    +39    emission_names = []
    +40    for emission in all_emissions:
    +41        if emission.name not in emission_names:
    +42            emission_names.append(emission.name)
    +43
    +44    emissions_aggregated = {}
    +45    for emission_name in emission_names:
    +46        emissions = [emission for emission in all_emissions if emission.name == emission_name]
    +47
    +48        emissions_aggregated[emission_name] = PartialEmissionResult(
    +49            name=emission_name,
    +50            timesteps=emissions[0].timesteps,
    +51            rate=reduce(operator.add, [emission.rate.to_calendar_day() for emission in emissions]),
    +52        )
    +53
    +54    return emissions_aggregated
    +
    + + +
    +
    + +
    + + class + HasIsValid(typing.Protocol): + + + +
    + +
    13class HasIsValid(Protocol):
    +14    is_valid: TimeSeriesBoolean
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + HasIsValid(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + def + aggregate_is_valid( components: List[libecalc.dto.utils.aggregators.HasIsValid]) -> List[bool]: + + + +
    + +
    17def aggregate_is_valid(components: List[HasIsValid]) -> List[bool]:
    +18    is_valid_arrays = [component.is_valid.values for component in components]
    +19    return [all(is_valid_step) for is_valid_step in transpose(is_valid_arrays)]
    +
    + + + + +
    +
    + +
    + + class + HasEmissions(typing.Protocol): + + + +
    + +
    22class HasEmissions(Protocol):
    +23    emissions: List[PartialEmissionResult]
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + HasEmissions(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + def + aggregate_emissions( emissions_lists: List[Dict[str, libecalc.dto.result.emission.PartialEmissionResult]]) -> Dict[str, libecalc.dto.result.emission.PartialEmissionResult]: + + + +
    + +
    26def aggregate_emissions(
    +27    emissions_lists: List[Dict[str, PartialEmissionResult]],
    +28) -> Dict[str, PartialEmissionResult]:
    +29    """Aggregates emissions e.g. for a total asset across installations
    +30    Args:
    +31        emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate
    +32
    +33    Returns:
    +34        dto.types.FuelType
    +35    """
    +36
    +37    all_emissions = [emission for emissions in emissions_lists for emission in emissions.values()]
    +38
    +39    # Keep order of emissions
    +40    emission_names = []
    +41    for emission in all_emissions:
    +42        if emission.name not in emission_names:
    +43            emission_names.append(emission.name)
    +44
    +45    emissions_aggregated = {}
    +46    for emission_name in emission_names:
    +47        emissions = [emission for emission in all_emissions if emission.name == emission_name]
    +48
    +49        emissions_aggregated[emission_name] = PartialEmissionResult(
    +50            name=emission_name,
    +51            timesteps=emissions[0].timesteps,
    +52            rate=reduce(operator.add, [emission.rate.to_calendar_day() for emission in emissions]),
    +53        )
    +54
    +55    return emissions_aggregated
    +
    + + +

    Aggregates emissions e.g. for a total asset across installations +Args: + emissions_lists (List[Dict[str, PartialEmissionResult]] or dict.values): Includes emissions to aggregate

    + +

    Returns: + dto.types.FuelType

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/utils/validators.html b/docs/about/references/api/libecalc/dto/utils/validators.html new file mode 100644 index 0000000000..8157ffdece --- /dev/null +++ b/docs/about/references/api/libecalc/dto/utils/validators.html @@ -0,0 +1,405 @@ + + + + + + + libecalc.dto.utils.validators API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.utils.validators

    + + + + + + +
     1from datetime import date, datetime
    + 2from typing import Dict, List, Optional, TypeVar, Union
    + 3
    + 4from pydantic import StringConstraints
    + 5from typing_extensions import Annotated
    + 6
    + 7from libecalc.common.time_utils import is_temporal_model
    + 8from libecalc.expression import Expression
    + 9
    +10EmissionNameStr = Annotated[str, StringConstraints(pattern=r"^\w*$")]
    +11COMPONENT_NAME_ALLOWED_CHARS = "A-ZÆØÅa-zæøå\\d_/\\- "
    +12COMPONENT_NAME_PATTERN = r"^[" + COMPONENT_NAME_ALLOWED_CHARS + "]*$"
    +13ComponentNameStr = Annotated[
    +14    str, StringConstraints(pattern=COMPONENT_NAME_PATTERN)
    +15]  # synced with valid regexp in BE4FE
    +16
    +17ExpressionType = Union[str, int, float, Expression]
    +18
    +19
    +20def convert_expression(
    +21    value: Optional[Union[ExpressionType, Dict[date, ExpressionType]]]
    +22) -> Optional[Union[Expression, Dict[date, Expression]]]:
    +23    if value is None or isinstance(value, Expression):
    +24        return value
    +25    elif is_temporal_model(value):
    +26        return {start_time: convert_expression(value=expression) for start_time, expression in value.items()}
    +27    return Expression.setup_from_expression(value=value)
    +28
    +29
    +30def convert_expressions(
    +31    value: Optional[List[Optional[Union[ExpressionType, Dict[date, ExpressionType]]]]]
    +32) -> Optional[List[Optional[Union[Expression, Dict[date, Expression]]]]]:
    +33    if value is None:
    +34        return value
    +35    if not isinstance(value, list):
    +36        return convert_expression(value=value)
    +37    else:
    +38        return [convert_expression(value=value) for value in value]
    +39
    +40
    +41def uppercase_user_defined_category(value):
    +42    if value is not None and isinstance(value, str):
    +43        return value.upper()
    +44    elif value is not None and is_temporal_model(value):
    +45        return {timestep: category.upper() for timestep, category in value.items()}
    +46    return value
    +47
    +48
    +49TModel = TypeVar("TModel")
    +50
    +51
    +52def validate_temporal_model(model: Dict[datetime, TModel]) -> Dict[datetime, TModel]:
    +53    if not (list(model.keys()) == sorted(model)):
    +54        raise ValueError("Dates in a temporal model should be sorted with the earliest date first")
    +55
    +56    return model
    +
    + + +
    +
    + +
    + + def + convert_expression( value: Union[str, int, float, libecalc.expression.expression.Expression, Dict[datetime.date, Union[str, int, float, libecalc.expression.expression.Expression]], NoneType]) -> Union[libecalc.expression.expression.Expression, Dict[datetime.date, libecalc.expression.expression.Expression], NoneType]: + + + +
    + +
    21def convert_expression(
    +22    value: Optional[Union[ExpressionType, Dict[date, ExpressionType]]]
    +23) -> Optional[Union[Expression, Dict[date, Expression]]]:
    +24    if value is None or isinstance(value, Expression):
    +25        return value
    +26    elif is_temporal_model(value):
    +27        return {start_time: convert_expression(value=expression) for start_time, expression in value.items()}
    +28    return Expression.setup_from_expression(value=value)
    +
    + + + + +
    +
    + +
    + + def + convert_expressions( value: Union[List[Union[str, int, float, libecalc.expression.expression.Expression, Dict[datetime.date, Union[str, int, float, libecalc.expression.expression.Expression]], NoneType]], NoneType]) -> Union[List[Union[libecalc.expression.expression.Expression, Dict[datetime.date, libecalc.expression.expression.Expression], NoneType]], NoneType]: + + + +
    + +
    31def convert_expressions(
    +32    value: Optional[List[Optional[Union[ExpressionType, Dict[date, ExpressionType]]]]]
    +33) -> Optional[List[Optional[Union[Expression, Dict[date, Expression]]]]]:
    +34    if value is None:
    +35        return value
    +36    if not isinstance(value, list):
    +37        return convert_expression(value=value)
    +38    else:
    +39        return [convert_expression(value=value) for value in value]
    +
    + + + + +
    +
    + +
    + + def + uppercase_user_defined_category(value): + + + +
    + +
    42def uppercase_user_defined_category(value):
    +43    if value is not None and isinstance(value, str):
    +44        return value.upper()
    +45    elif value is not None and is_temporal_model(value):
    +46        return {timestep: category.upper() for timestep, category in value.items()}
    +47    return value
    +
    + + + + +
    +
    + +
    + + def + validate_temporal_model( model: Dict[datetime.datetime, ~TModel]) -> Dict[datetime.datetime, ~TModel]: + + + +
    + +
    53def validate_temporal_model(model: Dict[datetime, TModel]) -> Dict[datetime, TModel]:
    +54    if not (list(model.keys()) == sorted(model)):
    +55        raise ValueError("Dates in a temporal model should be sorted with the earliest date first")
    +56
    +57    return model
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/dto/variables.html b/docs/about/references/api/libecalc/dto/variables.html new file mode 100644 index 0000000000..b00c120e49 --- /dev/null +++ b/docs/about/references/api/libecalc/dto/variables.html @@ -0,0 +1,545 @@ + + + + + + + libecalc.dto.variables API documentation + + + + + + + + + +
    +
    +

    +libecalc.dto.variables

    + + + + + + +
     1from __future__ import annotations
    + 2
    + 3from datetime import datetime, timedelta
    + 4from typing import Dict, List
    + 5
    + 6from pydantic import BaseModel, ConfigDict, Field
    + 7from typing_extensions import Annotated
    + 8
    + 9from libecalc.common.time_utils import Period
    +10
    +11
    +12class VariablesMap(BaseModel):
    +13    """A map of all (timeseries) variables that can be used in eCalc YAML
    +14    A variable name has the format "{name_of_case};{title_of_header} from the original
    +15    file/resource with time series, ie;
    +16
    +17    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will
    +18    result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which
    +19    can be referred to in the eCalc YAML.
    +20
    +21    Currently, the relevant variables are sent/injected to the components that have used
    +22    it in the yaml, but at some point it may be replaced with the data/parameters directly,
    +23    ie the variables will be evaluated before the calculation starts.
    +24
    +25    The variables must be interpolated and extrapolated before being added to the variablesmap,
    +26    to make sure that the resolution of ALL variables are the same for everywhere it is being used,
    +27    BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation
    +28    directly.
    +29    """
    +30
    +31    model_config = ConfigDict(extra="forbid")
    +32
    +33    time_vector: List[datetime] = Field(default_factory=list)
    +34    variables: Dict[str, List[Annotated[float, Field(allow_inf_nan=False)]]] = Field(default_factory=dict)
    +35
    +36    @property
    +37    def period(self):
    +38        return Period(
    +39            start=self.time_vector[0],
    +40            end=self.time_vector[-1] + timedelta(microseconds=1),  # Make sure the last timestep is included
    +41            # TODO: Change this? Need to change where stuff depends on this ...
    +42        )
    +43
    +44    @property
    +45    def length(self) -> int:
    +46        return len(self.time_vector)
    +47
    +48    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +49        subset_time_vector = self.time_vector[start_index:end_index]
    +50        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +51        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +52
    +53    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +54        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +55        return self.get_subset(start_index, end_index)
    +56
    +57    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +58        """
    +59        Get variables that are active and in use for the given timestep only
    +60        :param current_timestep:
    +61        :return:
    +62        """
    +63        timestep_index = self.time_vector.index(current_timestep)
    +64        return self.get_subset(timestep_index, timestep_index + 1)
    +65
    +66    def zeros(self) -> List[float]:
    +67        return [0.0] * len(self.time_vector)
    +
    + + +
    +
    + +
    + + class + VariablesMap(pydantic.main.BaseModel): + + + +
    + +
    13class VariablesMap(BaseModel):
    +14    """A map of all (timeseries) variables that can be used in eCalc YAML
    +15    A variable name has the format "{name_of_case};{title_of_header} from the original
    +16    file/resource with time series, ie;
    +17
    +18    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will
    +19    result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which
    +20    can be referred to in the eCalc YAML.
    +21
    +22    Currently, the relevant variables are sent/injected to the components that have used
    +23    it in the yaml, but at some point it may be replaced with the data/parameters directly,
    +24    ie the variables will be evaluated before the calculation starts.
    +25
    +26    The variables must be interpolated and extrapolated before being added to the variablesmap,
    +27    to make sure that the resolution of ALL variables are the same for everywhere it is being used,
    +28    BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation
    +29    directly.
    +30    """
    +31
    +32    model_config = ConfigDict(extra="forbid")
    +33
    +34    time_vector: List[datetime] = Field(default_factory=list)
    +35    variables: Dict[str, List[Annotated[float, Field(allow_inf_nan=False)]]] = Field(default_factory=dict)
    +36
    +37    @property
    +38    def period(self):
    +39        return Period(
    +40            start=self.time_vector[0],
    +41            end=self.time_vector[-1] + timedelta(microseconds=1),  # Make sure the last timestep is included
    +42            # TODO: Change this? Need to change where stuff depends on this ...
    +43        )
    +44
    +45    @property
    +46    def length(self) -> int:
    +47        return len(self.time_vector)
    +48
    +49    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +50        subset_time_vector = self.time_vector[start_index:end_index]
    +51        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +52        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +53
    +54    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +55        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +56        return self.get_subset(start_index, end_index)
    +57
    +58    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +59        """
    +60        Get variables that are active and in use for the given timestep only
    +61        :param current_timestep:
    +62        :return:
    +63        """
    +64        timestep_index = self.time_vector.index(current_timestep)
    +65        return self.get_subset(timestep_index, timestep_index + 1)
    +66
    +67    def zeros(self) -> List[float]:
    +68        return [0.0] * len(self.time_vector)
    +
    + + +

    A map of all (timeseries) variables that can be used in eCalc YAML +A variable name has the format "{name_of_case};{title_of_header} from the original +file/resource with time series, ie;

    + +

    A file is named "reservoir1" and contains headers "rgi" and "pwi", then this will +result in 2 mappings in this object; "reservoir1;rgi" and "reservoir1;pwi", which +can be referred to in the eCalc YAML.

    + +

    Currently, the relevant variables are sent/injected to the components that have used +it in the yaml, but at some point it may be replaced with the data/parameters directly, +ie the variables will be evaluated before the calculation starts.

    + +

    The variables must be interpolated and extrapolated before being added to the variablesmap, +to make sure that the resolution of ALL variables are the same for everywhere it is being used, +BEFORE the calculation starts; ie happens as a pre step before calculation, and not in the calculation +directly.

    +
    + + +
    + +
    + + def + get_subset( self, start_index: int = 0, end_index: int = -1) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    49    def get_subset(self, start_index: int = 0, end_index: int = -1) -> VariablesMap:
    +50        subset_time_vector = self.time_vector[start_index:end_index]
    +51        subset_dict = {ref: array[start_index:end_index] for ref, array in self.variables.items()}
    +52        return VariablesMap(variables=subset_dict, time_vector=subset_time_vector)
    +
    + + + + +
    +
    + +
    + + def + get_subset_from_period( self, period: libecalc.common.time_utils.Period) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    54    def get_subset_from_period(self, period: Period) -> VariablesMap:
    +55        start_index, end_index = period.get_timestep_indices(self.time_vector)
    +56        return self.get_subset(start_index, end_index)
    +
    + + + + +
    +
    + +
    + + def + get_subset_for_timestep( self, current_timestep: datetime.datetime) -> libecalc.dto.variables.VariablesMap: + + + +
    + +
    58    def get_subset_for_timestep(self, current_timestep: datetime) -> VariablesMap:
    +59        """
    +60        Get variables that are active and in use for the given timestep only
    +61        :param current_timestep:
    +62        :return:
    +63        """
    +64        timestep_index = self.time_vector.index(current_timestep)
    +65        return self.get_subset(timestep_index, timestep_index + 1)
    +
    + + +

    Get variables that are active and in use for the given timestep only

    + +
    Parameters
    + +
      +
    • current_timestep:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + zeros(self) -> List[float]: + + + +
    + +
    67    def zeros(self) -> List[float]:
    +68        return [0.0] * len(self.time_vector)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples.html b/docs/about/references/api/libecalc/examples.html new file mode 100644 index 0000000000..77a8799e9c --- /dev/null +++ b/docs/about/references/api/libecalc/examples.html @@ -0,0 +1,244 @@ + + + + + + + libecalc.examples API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples

    + + + + + + +
    1from .advanced import *  # noqa: F403
    +2from .simple import *  # noqa: F403
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples/advanced.html b/docs/about/references/api/libecalc/examples/advanced.html new file mode 100644 index 0000000000..aa0726af30 --- /dev/null +++ b/docs/about/references/api/libecalc/examples/advanced.html @@ -0,0 +1,304 @@ + + + + + + + libecalc.examples.advanced API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples.advanced

    + + + + + + +
     1from pathlib import Path
    + 2
    + 3import pytest
    + 4
    + 5from libecalc.fixtures import YamlCase
    + 6from libecalc.fixtures.case_utils import YamlCaseLoader
    + 7
    + 8"""
    + 9Test project for Advanced
    +10
    +11The purpose of this fixture is to showcase an advanced version an eCalc Model for use with
    +12examples and testing.
    +13
    +14"""
    +15
    +16
    +17@pytest.fixture
    +18def advanced_yaml() -> YamlCase:
    +19    return YamlCaseLoader.load(
    +20        case_path=Path(__file__).parent,
    +21        main_file="model.yaml",
    +22        resource_names=[
    +23            "base_profile.csv",
    +24            "compressor_chart.csv",
    +25            "compressor_sampled.csv",
    +26            "genset.csv",
    +27            "pump_chart.csv",
    +28        ],
    +29    )
    +
    + + +
    +
    + +
    +
    @pytest.fixture
    + + def + advanced_yaml() -> libecalc.fixtures.case_types.YamlCase: + + + +
    + +
    18@pytest.fixture
    +19def advanced_yaml() -> YamlCase:
    +20    return YamlCaseLoader.load(
    +21        case_path=Path(__file__).parent,
    +22        main_file="model.yaml",
    +23        resource_names=[
    +24            "base_profile.csv",
    +25            "compressor_chart.csv",
    +26            "compressor_sampled.csv",
    +27            "genset.csv",
    +28            "pump_chart.csv",
    +29        ],
    +30    )
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/examples/simple.html b/docs/about/references/api/libecalc/examples/simple.html new file mode 100644 index 0000000000..69d2033f18 --- /dev/null +++ b/docs/about/references/api/libecalc/examples/simple.html @@ -0,0 +1,357 @@ + + + + + + + libecalc.examples.simple API documentation + + + + + + + + + +
    +
    +

    +libecalc.examples.simple

    + + + + + + +
     1from pathlib import Path
    + 2
    + 3import pytest
    + 4
    + 5from libecalc.fixtures import YamlCase
    + 6from libecalc.fixtures.case_utils import YamlCaseLoader
    + 7
    + 8"""
    + 9Test project for Simple
    +10
    +11The purpose of this fixture is to show a simple example of an eCalc model for testing and examples, and to
    +12have a lightweight version of a complete model for lightweight e2e testing.
    +13
    +14"""
    +15
    +16
    +17@pytest.fixture
    +18def simple_yaml() -> YamlCase:
    +19    return YamlCaseLoader.load(
    +20        case_path=Path(__file__).parent,
    +21        main_file="model.yaml",
    +22        resource_names=[
    +23            "compressor_sampled.csv",
    +24            "compressor_sampled_with_turbine.csv",
    +25            "genset.csv",
    +26            "production_data.csv",
    +27            "pump_chart.csv",
    +28            "pump_sampled.csv",
    +29        ],
    +30    )
    +31
    +32
    +33@pytest.fixture
    +34def simple_temporal_yaml() -> YamlCase:
    +35    return YamlCaseLoader.load(
    +36        case_path=Path(__file__).parent,
    +37        main_file="model_temporal.yaml",
    +38        resource_names=[
    +39            "compressor_sampled.csv",
    +40            "compressor_sampled_with_turbine.csv",
    +41            "genset.csv",
    +42            "production_data.csv",
    +43            "pump_chart.csv",
    +44            "pump_sampled.csv",
    +45        ],
    +46    )
    +
    + + +
    +
    + +
    +
    @pytest.fixture
    + + def + simple_yaml() -> libecalc.fixtures.case_types.YamlCase: + + + +
    + +
    18@pytest.fixture
    +19def simple_yaml() -> YamlCase:
    +20    return YamlCaseLoader.load(
    +21        case_path=Path(__file__).parent,
    +22        main_file="model.yaml",
    +23        resource_names=[
    +24            "compressor_sampled.csv",
    +25            "compressor_sampled_with_turbine.csv",
    +26            "genset.csv",
    +27            "production_data.csv",
    +28            "pump_chart.csv",
    +29            "pump_sampled.csv",
    +30        ],
    +31    )
    +
    + + + + +
    +
    + +
    +
    @pytest.fixture
    + + def + simple_temporal_yaml() -> libecalc.fixtures.case_types.YamlCase: + + + +
    + +
    34@pytest.fixture
    +35def simple_temporal_yaml() -> YamlCase:
    +36    return YamlCaseLoader.load(
    +37        case_path=Path(__file__).parent,
    +38        main_file="model_temporal.yaml",
    +39        resource_names=[
    +40            "compressor_sampled.csv",
    +41            "compressor_sampled_with_turbine.csv",
    +42            "genset.csv",
    +43            "production_data.csv",
    +44            "pump_chart.csv",
    +45            "pump_sampled.csv",
    +46        ],
    +47    )
    +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression.html b/docs/about/references/api/libecalc/expression.html new file mode 100644 index 0000000000..aa689be9d9 --- /dev/null +++ b/docs/about/references/api/libecalc/expression.html @@ -0,0 +1,243 @@ + + + + + + + libecalc.expression API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression

    + + + + + + +
    1from libecalc.expression.expression import Expression
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression/expression.html b/docs/about/references/api/libecalc/expression/expression.html new file mode 100644 index 0000000000..1b4402e8cb --- /dev/null +++ b/docs/about/references/api/libecalc/expression/expression.html @@ -0,0 +1,873 @@ + + + + + + + libecalc.expression.expression API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression.expression

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3from typing import Any, Dict, List, Union
    +  4
    +  5import numpy as np
    +  6from numpy.typing import NDArray
    +  7from pydantic import GetCoreSchemaHandler, GetJsonSchemaHandler
    +  8from pydantic.json_schema import JsonSchemaValue
    +  9from pydantic_core import CoreSchema, core_schema
    + 10
    + 11from libecalc.common.errors.exceptions import EcalcError, EcalcErrorType
    + 12from libecalc.common.logger import logger
    + 13from libecalc.expression.expression_evaluator import (
    + 14    Operators,
    + 15    Token,
    + 16    TokenTag,
    + 17    eval_tokens,
    + 18    lexer,
    + 19)
    + 20
    + 21LEFT_PARENTHESIS_TOKEN = Token(tag=TokenTag.operator, value=Operators.left_parenthesis.value)
    + 22RIGHT_PARENTHESIS_TOKEN = Token(tag=TokenTag.operator, value=Operators.right_parenthesis.value)
    + 23MULTIPLICATION_TOKEN = Token(tag=TokenTag.operator, value=Operators.multiply.value)
    + 24
    + 25ExpressionType = Union[str, float, int]
    + 26
    + 27
    + 28class InvalidExpressionError(EcalcError):
    + 29    """
    + 30    Invalid expression error
    + 31    """
    + 32
    + 33    def __init__(self, message: str):
    + 34        super().__init__(
    + 35            title="Invalid expression",
    + 36            message=message,
    + 37            error_type=EcalcErrorType.CLIENT_ERROR,
    + 38        )
    + 39
    + 40
    + 41class Expression:
    + 42    def __init__(
    + 43        self,
    + 44        tokens: List[Token],
    + 45    ):
    + 46        self.tokens = tokens
    + 47
    + 48    @classmethod
    + 49    def setup_from_expression(
    + 50        cls,
    + 51        value: ExpressionType,
    + 52    ) -> Expression:
    + 53        tokens = cls.validate(value)
    + 54        return cls(tokens=tokens)
    + 55
    + 56    def __str__(self):
    + 57        expression_string = " ".join(str(token) for token in self.tokens)
    + 58        expression_string = expression_string.replace(" )", ")")
    + 59        expression_string = expression_string.replace("( ", "(")
    + 60        return expression_string
    + 61
    + 62    @property
    + 63    def variables(self) -> List[str]:
    + 64        return [token.value for token in self.tokens if token.tag == TokenTag.reference]
    + 65
    + 66    @classmethod
    + 67    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    + 68        """Create new expression by multiplying two expressions
    + 69        new expression = "(expression1) {*} (expression2)".
    + 70        """
    + 71        tokens1 = expression1.tokens
    + 72        tokens2 = expression2.tokens
    + 73        tokens_multiplied = (
    + 74            [LEFT_PARENTHESIS_TOKEN]
    + 75            + tokens1
    + 76            + [RIGHT_PARENTHESIS_TOKEN]
    + 77            + [MULTIPLICATION_TOKEN]
    + 78            + [LEFT_PARENTHESIS_TOKEN]
    + 79            + tokens2
    + 80            + [RIGHT_PARENTHESIS_TOKEN]
    + 81        )
    + 82        return cls(tokens=tokens_multiplied)
    + 83
    + 84    @classmethod
    + 85    def validate(cls, expression: Any) -> List[Token]:
    + 86        expression = _expression_as_number_if_number(expression_input=expression)
    + 87
    + 88        if not isinstance(expression, (str, float, int)):
    + 89            raise InvalidExpressionError("Expression should be of type str, int or float")
    + 90
    + 91        try:
    + 92            return lexer(expression)
    + 93        except (KeyError, ValueError) as e:
    + 94            raise InvalidExpressionError(message=str(e)) from e
    + 95
    + 96    @classmethod
    + 97    def __get_pydantic_core_schema__(cls, source_type: Any, handler: GetCoreSchemaHandler) -> CoreSchema:
    + 98        def parse_expression(x: Any):
    + 99            if isinstance(x, Expression):
    +100                return x
    +101
    +102            try:
    +103                return Expression(tokens=cls.validate(x))
    +104            except InvalidExpressionError as e:
    +105                # Raise ValueError for pydantic to pick up
    +106                raise ValueError(str(e)) from e
    +107
    +108        from_str_schema = core_schema.chain_schema(
    +109            [
    +110                # core_schema.union_schema(
    +111                #    [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()],
    +112                # ),
    +113                core_schema.no_info_plain_validator_function(parse_expression),
    +114            ]
    +115        )
    +116
    +117        def serialize_expression(instance):
    +118            if isinstance(instance, list):
    +119                # TODO[pydantic]: Why is list passed into this? Bug: https://github.com/pydantic/pydantic/issues/6830
    +120                return [serialize_expression(x) for x in instance]
    +121            if isinstance(instance, Expression):
    +122                return str(instance)
    +123
    +124            raise ValueError("Wrong type")
    +125
    +126        return core_schema.json_or_python_schema(
    +127            json_schema=from_str_schema,
    +128            python_schema=core_schema.union_schema(
    +129                [
    +130                    # check if it's an instance first before doing any further work
    +131                    core_schema.is_instance_schema(Expression),
    +132                    from_str_schema,
    +133                ]
    +134            ),
    +135            serialization=core_schema.plain_serializer_function_ser_schema(serialize_expression),
    +136        )
    +137
    +138    @classmethod
    +139    def validator(cls, expression: Union[str, float, int, Expression]):
    +140        if isinstance(expression, Expression):
    +141            return expression
    +142        tokens = cls.validate(expression=expression)
    +143        instance = cls(tokens=tokens)
    +144        return instance
    +145
    +146    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    +147        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    +148        if len(missing_references) != 0:
    +149            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    +150            logger.error(msg)
    +151            raise InvalidExpressionError(msg)
    +152
    +153        tokens = [
    +154            Token(
    +155                tag=TokenTag.numeric,
    +156                value=np.asarray(variables.get(token.value)),
    +157            )
    +158            if token.tag == TokenTag.reference
    +159            else token
    +160            for token in self.tokens
    +161        ]
    +162        try:
    +163            return eval_tokens(tokens=tokens, array_length=fill_length)
    +164        except (KeyError, ValueError) as e:
    +165            raise InvalidExpressionError(message=str(e)) from e
    +166
    +167    def __eq__(self, other):
    +168        if not isinstance(other, Expression):
    +169            return NotImplemented
    +170        return self.tokens == other.tokens
    +171
    +172    def __repr__(self):
    +173        return f"Expression(tokens={''.join(repr(token) for token in self.tokens)})"
    +174
    +175    @classmethod
    +176    def __get_pydantic_json_schema__(
    +177        cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler
    +178    ) -> JsonSchemaValue:
    +179        # TODO: missing pattern, removed when migrating to pydantic v2
    +180        return handler(
    +181            core_schema.union_schema(
    +182                [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()],
    +183            )
    +184        )
    +185
    +186
    +187def _expression_as_number_if_number(expression_input: ExpressionType) -> ExpressionType:
    +188    """Expressions may be either pure numbers, booleans or strings which define a combination of numbers, operators and
    +189    references as a string. If very small numbers are parsed and represented in scientific notation, the expression
    +190    parsing will wrongfully treat these as expressions with references/operators instead of pure numeric values. Thus,
    +191    all inputs are tested if they can be directly converted to a number, and if so we use the value instead of the
    +192    string representation in further calculations.
    +193    """
    +194    if isinstance(expression_input, str):
    +195        try:
    +196            expression_as_number_if_number = float(expression_input)
    +197        except Exception:
    +198            expression_as_number_if_number = expression_input  # type: ignore[assignment]
    +199    else:
    +200        expression_as_number_if_number = expression_input
    +201
    +202    return expression_as_number_if_number
    +
    + + +
    +
    + +
    + + class + InvalidExpressionError(libecalc.common.errors.exceptions.EcalcError): + + + +
    + +
    29class InvalidExpressionError(EcalcError):
    +30    """
    +31    Invalid expression error
    +32    """
    +33
    +34    def __init__(self, message: str):
    +35        super().__init__(
    +36            title="Invalid expression",
    +37            message=message,
    +38            error_type=EcalcErrorType.CLIENT_ERROR,
    +39        )
    +
    + + +

    Invalid expression error

    +
    + + +
    + +
    + + InvalidExpressionError(message: str) + + + +
    + +
    34    def __init__(self, message: str):
    +35        super().__init__(
    +36            title="Invalid expression",
    +37            message=message,
    +38            error_type=EcalcErrorType.CLIENT_ERROR,
    +39        )
    +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    builtins.BaseException
    +
    with_traceback
    + +
    +
    +
    +
    +
    + +
    + + class + Expression: + + + +
    + +
     42class Expression:
    + 43    def __init__(
    + 44        self,
    + 45        tokens: List[Token],
    + 46    ):
    + 47        self.tokens = tokens
    + 48
    + 49    @classmethod
    + 50    def setup_from_expression(
    + 51        cls,
    + 52        value: ExpressionType,
    + 53    ) -> Expression:
    + 54        tokens = cls.validate(value)
    + 55        return cls(tokens=tokens)
    + 56
    + 57    def __str__(self):
    + 58        expression_string = " ".join(str(token) for token in self.tokens)
    + 59        expression_string = expression_string.replace(" )", ")")
    + 60        expression_string = expression_string.replace("( ", "(")
    + 61        return expression_string
    + 62
    + 63    @property
    + 64    def variables(self) -> List[str]:
    + 65        return [token.value for token in self.tokens if token.tag == TokenTag.reference]
    + 66
    + 67    @classmethod
    + 68    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    + 69        """Create new expression by multiplying two expressions
    + 70        new expression = "(expression1) {*} (expression2)".
    + 71        """
    + 72        tokens1 = expression1.tokens
    + 73        tokens2 = expression2.tokens
    + 74        tokens_multiplied = (
    + 75            [LEFT_PARENTHESIS_TOKEN]
    + 76            + tokens1
    + 77            + [RIGHT_PARENTHESIS_TOKEN]
    + 78            + [MULTIPLICATION_TOKEN]
    + 79            + [LEFT_PARENTHESIS_TOKEN]
    + 80            + tokens2
    + 81            + [RIGHT_PARENTHESIS_TOKEN]
    + 82        )
    + 83        return cls(tokens=tokens_multiplied)
    + 84
    + 85    @classmethod
    + 86    def validate(cls, expression: Any) -> List[Token]:
    + 87        expression = _expression_as_number_if_number(expression_input=expression)
    + 88
    + 89        if not isinstance(expression, (str, float, int)):
    + 90            raise InvalidExpressionError("Expression should be of type str, int or float")
    + 91
    + 92        try:
    + 93            return lexer(expression)
    + 94        except (KeyError, ValueError) as e:
    + 95            raise InvalidExpressionError(message=str(e)) from e
    + 96
    + 97    @classmethod
    + 98    def __get_pydantic_core_schema__(cls, source_type: Any, handler: GetCoreSchemaHandler) -> CoreSchema:
    + 99        def parse_expression(x: Any):
    +100            if isinstance(x, Expression):
    +101                return x
    +102
    +103            try:
    +104                return Expression(tokens=cls.validate(x))
    +105            except InvalidExpressionError as e:
    +106                # Raise ValueError for pydantic to pick up
    +107                raise ValueError(str(e)) from e
    +108
    +109        from_str_schema = core_schema.chain_schema(
    +110            [
    +111                # core_schema.union_schema(
    +112                #    [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()],
    +113                # ),
    +114                core_schema.no_info_plain_validator_function(parse_expression),
    +115            ]
    +116        )
    +117
    +118        def serialize_expression(instance):
    +119            if isinstance(instance, list):
    +120                # TODO[pydantic]: Why is list passed into this? Bug: https://github.com/pydantic/pydantic/issues/6830
    +121                return [serialize_expression(x) for x in instance]
    +122            if isinstance(instance, Expression):
    +123                return str(instance)
    +124
    +125            raise ValueError("Wrong type")
    +126
    +127        return core_schema.json_or_python_schema(
    +128            json_schema=from_str_schema,
    +129            python_schema=core_schema.union_schema(
    +130                [
    +131                    # check if it's an instance first before doing any further work
    +132                    core_schema.is_instance_schema(Expression),
    +133                    from_str_schema,
    +134                ]
    +135            ),
    +136            serialization=core_schema.plain_serializer_function_ser_schema(serialize_expression),
    +137        )
    +138
    +139    @classmethod
    +140    def validator(cls, expression: Union[str, float, int, Expression]):
    +141        if isinstance(expression, Expression):
    +142            return expression
    +143        tokens = cls.validate(expression=expression)
    +144        instance = cls(tokens=tokens)
    +145        return instance
    +146
    +147    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    +148        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    +149        if len(missing_references) != 0:
    +150            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    +151            logger.error(msg)
    +152            raise InvalidExpressionError(msg)
    +153
    +154        tokens = [
    +155            Token(
    +156                tag=TokenTag.numeric,
    +157                value=np.asarray(variables.get(token.value)),
    +158            )
    +159            if token.tag == TokenTag.reference
    +160            else token
    +161            for token in self.tokens
    +162        ]
    +163        try:
    +164            return eval_tokens(tokens=tokens, array_length=fill_length)
    +165        except (KeyError, ValueError) as e:
    +166            raise InvalidExpressionError(message=str(e)) from e
    +167
    +168    def __eq__(self, other):
    +169        if not isinstance(other, Expression):
    +170            return NotImplemented
    +171        return self.tokens == other.tokens
    +172
    +173    def __repr__(self):
    +174        return f"Expression(tokens={''.join(repr(token) for token in self.tokens)})"
    +175
    +176    @classmethod
    +177    def __get_pydantic_json_schema__(
    +178        cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler
    +179    ) -> JsonSchemaValue:
    +180        # TODO: missing pattern, removed when migrating to pydantic v2
    +181        return handler(
    +182            core_schema.union_schema(
    +183                [core_schema.int_schema(), core_schema.float_schema(), core_schema.str_schema()],
    +184            )
    +185        )
    +
    + + + + +
    + +
    + + Expression(tokens: List[libecalc.expression.expression_evaluator.Token]) + + + +
    + +
    43    def __init__(
    +44        self,
    +45        tokens: List[Token],
    +46    ):
    +47        self.tokens = tokens
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + setup_from_expression( cls, value: Union[str, float, int]) -> libecalc.expression.expression.Expression: + + + +
    + +
    49    @classmethod
    +50    def setup_from_expression(
    +51        cls,
    +52        value: ExpressionType,
    +53    ) -> Expression:
    +54        tokens = cls.validate(value)
    +55        return cls(tokens=tokens)
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + multiply( cls, expression1: libecalc.expression.expression.Expression, expression2: libecalc.expression.expression.Expression) -> libecalc.expression.expression.Expression: + + + +
    + +
    67    @classmethod
    +68    def multiply(cls, expression1: Expression, expression2: Expression) -> Expression:
    +69        """Create new expression by multiplying two expressions
    +70        new expression = "(expression1) {*} (expression2)".
    +71        """
    +72        tokens1 = expression1.tokens
    +73        tokens2 = expression2.tokens
    +74        tokens_multiplied = (
    +75            [LEFT_PARENTHESIS_TOKEN]
    +76            + tokens1
    +77            + [RIGHT_PARENTHESIS_TOKEN]
    +78            + [MULTIPLICATION_TOKEN]
    +79            + [LEFT_PARENTHESIS_TOKEN]
    +80            + tokens2
    +81            + [RIGHT_PARENTHESIS_TOKEN]
    +82        )
    +83        return cls(tokens=tokens_multiplied)
    +
    + + +

    Create new expression by multiplying two expressions +new expression = "(expression1) {*} (expression2)".

    +
    + + +
    +
    + +
    +
    @classmethod
    + + def + validate( cls, expression: Any) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    85    @classmethod
    +86    def validate(cls, expression: Any) -> List[Token]:
    +87        expression = _expression_as_number_if_number(expression_input=expression)
    +88
    +89        if not isinstance(expression, (str, float, int)):
    +90            raise InvalidExpressionError("Expression should be of type str, int or float")
    +91
    +92        try:
    +93            return lexer(expression)
    +94        except (KeyError, ValueError) as e:
    +95            raise InvalidExpressionError(message=str(e)) from e
    +
    + + + + +
    +
    + +
    +
    @classmethod
    + + def + validator( cls, expression: Union[str, float, int, libecalc.expression.expression.Expression]): + + + +
    + +
    139    @classmethod
    +140    def validator(cls, expression: Union[str, float, int, Expression]):
    +141        if isinstance(expression, Expression):
    +142            return expression
    +143        tokens = cls.validate(expression=expression)
    +144        instance = cls(tokens=tokens)
    +145        return instance
    +
    + + + + +
    +
    + +
    + + def + evaluate( self, variables: Dict[str, List[float]], fill_length: int) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    147    def evaluate(self, variables: Dict[str, List[float]], fill_length: int) -> NDArray[np.float64]:
    +148        missing_references = [reference_id for reference_id in self.variables if reference_id not in variables]
    +149        if len(missing_references) != 0:
    +150            msg = f"Unable to evaluate expression. Missing reference(s) {', '.join(missing_references)}"
    +151            logger.error(msg)
    +152            raise InvalidExpressionError(msg)
    +153
    +154        tokens = [
    +155            Token(
    +156                tag=TokenTag.numeric,
    +157                value=np.asarray(variables.get(token.value)),
    +158            )
    +159            if token.tag == TokenTag.reference
    +160            else token
    +161            for token in self.tokens
    +162        ]
    +163        try:
    +164            return eval_tokens(tokens=tokens, array_length=fill_length)
    +165        except (KeyError, ValueError) as e:
    +166            raise InvalidExpressionError(message=str(e)) from e
    +
    + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/expression/expression_evaluator.html b/docs/about/references/api/libecalc/expression/expression_evaluator.html new file mode 100644 index 0000000000..b9a90ef21c --- /dev/null +++ b/docs/about/references/api/libecalc/expression/expression_evaluator.html @@ -0,0 +1,1608 @@ + + + + + + + libecalc.expression.expression_evaluator API documentation + + + + + + + + + +
    +
    +

    +libecalc.expression.expression_evaluator

    + + + + + + +
      1from __future__ import annotations
    +  2
    +  3import operator as op
    +  4import re
    +  5import warnings
    +  6from enum import Enum
    +  7from numbers import Number
    +  8from typing import List, Optional, Tuple, Union
    +  9
    + 10import numpy as np
    + 11from numpy.typing import NDArray
    + 12from pydantic import BaseModel, ConfigDict, Field
    + 13
    + 14from libecalc.common.logger import logger
    + 15
    + 16"""
    + 17Module for expression parsing used in Energy/CO2/emissions calculator
    + 18
    + 19Eval expressions
    + 20
    + 21Variable example: SIM1;OIL_PROD:SC-102
    + 22
    + 23Operators allowed: (with {} to allow + - * / in variable names)
    + 24    plus:       {+}
    + 25    minus:      {-}
    + 26    multiply:   {*}
    + 27    division:   {/}
    + 28    power:      {^}
    + 29
    + 30Parenteses are supported: ()
    + 31
    + 32Logicals are supported and returns 0 or 1
    + 33    Larger than:              >
    + 34    Larger than or equal to:  >=
    + 35    Smaller than:             <
    + 36    Smaller than or equal to: <=
    + 37    Equal to:                 ==
    + 38    Not equal to:             !=
    + 39
    + 40Example: SIM2;OIL_PROD:SC-102 {*} 2.0 {-} SIM1;OIL_PROD {+} SIM3:OIL_PROD_TOTAL:TMP; {*} (SIM3:OIL_PROD>0)
    + 41
    + 42"""
    + 43
    + 44
    + 45def eval_tokens(tokens: List[Token], array_length: int) -> NDArray[np.float64]:
    + 46    token_values = [token.value for token in tokens]
    + 47    check_tokens(token_values)
    + 48
    + 49    evaluated_values = np.nan_to_num(
    + 50        x=eval_parentheses(
    + 51            tokens=token_values,
    + 52        )  # type: ignore[arg-type]
    + 53    )
    + 54
    + 55    if isinstance(evaluated_values, (Number, int, float)):
    + 56        evaluated_values = np.full(fill_value=evaluated_values, shape=array_length)
    + 57    return evaluated_values
    + 58
    + 59
    + 60def eval_parentheses(
    + 61    tokens: List[Union[float, int, bool, NDArray[np.float64], str]],
    + 62    original_expression: Optional[str] = None,
    + 63) -> Union[NDArray[np.float64], Number]:
    + 64    """Evaluate expressions within parentheses"""
    + 65    with warnings.catch_warnings():
    + 66        warnings.simplefilter("ignore")
    + 67        number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    + 68        while number_of_left_parentheses or number_of_right_parentheses:
    + 69            if number_of_left_parentheses != number_of_right_parentheses:
    + 70                error_message = "Number of left and right parentheses do not match"
    + 71                if original_expression is not None:
    + 72                    error_message += f" for expression '{original_expression}'"
    + 73                raise ValueError(error_message)
    + 74
    + 75            ind = 0
    + 76            while ind < len(tokens) and str(tokens[ind]) != ")":
    + 77                ind += 1
    + 78            subend = ind
    + 79            while ind >= 0 and str(tokens[ind]) != "(":
    + 80                ind -= 1
    + 81            substart = ind
    + 82
    + 83            tokens_to_evaluate = tokens[substart + 1 : subend]
    + 84
    + 85            try:
    + 86                tokens_evaluated = eval_parentheses(
    + 87                    tokens_to_evaluate,
    + 88                    original_expression=original_expression,
    + 89                )
    + 90            except Exception as e:
    + 91                logger.exception(e)
    + 92                errorstr = ""
    + 93                if tokens_to_evaluate:
    + 94                    for token in tokens_to_evaluate:
    + 95                        if isinstance(token, np.ndarray):
    + 96                            errorstr += "array(len=" + str(len(token)) + ") "
    + 97                        else:
    + 98                            errorstr += str(token) + " "
    + 99                raise ValueError(
    +100                    "expression evaluator" + ": I have trouble calculating the expression: " + errorstr
    +101                ) from e
    +102
    +103            tokens = tokens[:substart] + [tokens_evaluated] + tokens[subend + 1 :]
    +104            number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    +105
    +106    return eval_logicals(tokens)
    +107
    +108
    +109def count_parentheses(tokens: List[Union[float, int, bool, NDArray[np.float64], str]]) -> Tuple[int, int]:
    +110    """Count the number of left "(" and right ")" parentheses in a list of tokens"""
    +111    strings_in_tokens = [element for element in tokens if isinstance(element, str)]
    +112    return strings_in_tokens.count(Operators.left_parenthesis.value), strings_in_tokens.count(
    +113        Operators.right_parenthesis.value
    +114    )
    +115
    +116
    +117def eval_logicals(tokens):
    +118    """Evaluate logical operators in expression"""
    +119    logical_ops = [">", "<", ">=", "<=", "==", "!="]
    +120    ind = 0
    +121    while ind < len(tokens):
    +122        if str(tokens[ind]) in logical_ops:
    +123            divind = ind
    +124            left_tokens = tokens[0:divind]
    +125            right_tokens = tokens[divind + 1 :]
    +126            # Check that there are not more than one logical operator in tokens
    +127            for right_tok in right_tokens:
    +128                if str(right_tok)[0] in logical_ops or str(right_tok)[:2] in logical_ops:
    +129                    raise KeyError("Not more than one logical operator within each parenthesis set")
    +130            return np.array(
    +131                OPERATORS[tokens[divind]](
    +132                    eval_additions(left_tokens),
    +133                    eval_additions(right_tokens),
    +134                ),
    +135                dtype=float,
    +136            )
    +137        ind += 1
    +138    return eval_additions(tokens)
    +139
    +140
    +141def eval_additions(tokens):
    +142    """Evaluate additions and subtractions in expression"""
    +143    add_ops = ["{+}", "{-}"]
    +144    values = []
    +145    with warnings.catch_warnings():
    +146        warnings.simplefilter("ignore")
    +147        if tokens.count("{+}") or tokens.count(
    +148            "{-}"
    +149        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +150            ind = 0
    +151            seqstart = 0
    +152            signNext = 1.0
    +153            while ind < len(tokens):
    +154                if str(tokens[ind]) in add_ops:
    +155                    values.append(signNext * eval_mults(tokens[seqstart:ind]))
    +156                    signNext = 1.0 if tokens[ind] == "{+}" else -1.0
    +157                    seqstart = ind + 1
    +158                ind += 1
    +159            if tokens[seqstart - 1] == "{+}":
    +160                values.append(eval_mults(tokens[seqstart:ind]))
    +161            else:
    +162                values.append(-1.0 * eval_mults(tokens[seqstart:ind]))
    +163
    +164        else:
    +165            values.append(eval_mults(tokens))
    +166    return sum(values)
    +167
    +168
    +169def eval_mults(tokens):
    +170    """Evaluate multiplications in expression"""
    +171    mult_ops = ["{*}", "{/}"]
    +172    values = []
    +173
    +174    # We may sometimes divide by zero in large vectors, but as these values might get removed
    +175    # by conditions later, we allow this and ignore related warnings
    +176    current_numpy_error = np.geterr()
    +177    np.seterr(divide="ignore", invalid="ignore")
    +178    with warnings.catch_warnings():
    +179        warnings.simplefilter("ignore")
    +180        if tokens.count("{*}") or tokens.count(
    +181            "{/}"
    +182        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +183            ind = 0
    +184            seqstart = 0
    +185            opnext = "mult"
    +186            while ind < len(tokens):
    +187                if str(tokens[ind]) in mult_ops:
    +188                    if opnext == "mult":
    +189                        values.append(eval_powers(tokens[seqstart:ind]))
    +190                    else:
    +191                        denominator = eval_powers(tokens[seqstart:ind])
    +192                        # By default, this throws a warning when denomonator contains 0
    +193                        # Want to allow division by 0 here, as these values may be ruled out later anyway
    +194                        # by conditions
    +195                        mult = np.divide(1.0, denominator)
    +196                        values.append(mult)
    +197                    opnext = "mult" if tokens[ind] == "{*}" else "div"
    +198                    seqstart = ind + 1
    +199                ind += 1
    +200            if tokens[seqstart - 1] == "{*}":
    +201                values.append(eval_powers(tokens[seqstart:ind]))
    +202            else:
    +203                denominator = eval_powers(tokens[seqstart:ind])
    +204                mult = np.divide(1.0, denominator)
    +205                values.append(mult)
    +206        else:
    +207            tmp = eval_powers(tokens)
    +208            if tmp is not None:
    +209                values.append(eval_powers(tokens))
    +210        value = 1.0
    +211        for factor in values:
    +212            value = value * factor
    +213        np.seterr(**current_numpy_error)
    +214    return np.nan_to_num(value)
    +215
    +216
    +217def eval_powers(tokens):
    +218    """Evaluate exponential calculations in expression"""
    +219    with warnings.catch_warnings():
    +220        warnings.simplefilter("ignore")
    +221        if tokens.count(
    +222            "{^}"
    +223        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +224            if len(tokens) != 3:
    +225                raise ValueError("Number of tokens needs to be 3 for evalPowers, quotient, {^} and exponent")
    +226            quotient = eval_value([tokens[0]])
    +227            exponent = eval_value([tokens[2]])
    +228            value = np.power(quotient, exponent)
    +229        else:
    +230            value = eval_value(tokens)
    +231
    +232    return np.nan_to_num(value)
    +233
    +234
    +235def eval_value(tokens):
    +236    numpattern = r"[0-9.]+"
    +237    regexnumber = re.compile(numpattern)
    +238
    +239    if type(tokens) is NDArray[np.float64]:
    +240        var = tokens[0]
    +241    elif len(tokens) < 1:
    +242        raise ValueError(f"expression_evaluator: I can not evaluate {tokens}")
    +243    elif len(tokens) > 2:
    +244        outtext = "Wrong format of variable "
    +245        for ind in range(len(tokens)):
    +246            outtext += " " + str(tokens[ind])
    +247        raise Exception(outtext)
    +248    elif len(tokens) == 2:
    +249        raise ValueError("Should not enter here - no time series in expression evaluator")
    +250    elif isinstance(tokens[0], (int, float)):
    +251        return float(tokens[0])
    +252    else:
    +253        pos = 0
    +254        match = regexnumber.match(str(tokens[0]), pos)
    +255        if match:  # This is a number
    +256            return float(match.group(0))
    +257        elif type(tokens[0]) is not np.ndarray:
    +258            tmp = tokens[0].split(";")
    +259            if len(tmp) != 2:
    +260                raise KeyError(
    +261                    'Not correct format of reservoir variable "'
    +262                    + tokens[0]
    +263                    + '", did you forget to specify reservoir case (e.g. "SIM1;'
    +264                    + tokens[0]
    +265                    + '")?'
    +266                )
    +267            raise ValueError("Should not enter here - no time series in expression evaluator")
    +268        else:
    +269            var = tokens[0]
    +270    var = np.nan_to_num(var)
    +271    return var
    +272
    +273
    +274def lex(expression: str, token_exprs: List[Tuple[str, Optional[TokenTag]]]) -> List[Token]:
    +275    pos = 0
    +276    tokens = []
    +277
    +278    while pos < len(expression):
    +279        match = None
    +280        for token_expr in token_exprs:
    +281            pattern, tag = token_expr
    +282            regex = re.compile(pattern)
    +283            match = regex.match(expression, pos)
    +284            if match:
    +285                text = match.group(0)
    +286                if tag:
    +287                    token = text  # (text, tag)
    +288                    tokens.append(
    +289                        Token(
    +290                            tag=tag,
    +291                            value=token,
    +292                        )
    +293                    )
    +294                break
    +295        if not match:
    +296            raise KeyError(
    +297                f'Illegal character: "{str(expression[pos])}" in "{expression}". '
    +298                f"Did you forget to put {{}} around operators?"
    +299            )
    +300        else:
    +301            pos = match.end(0)
    +302    return tokens
    +303
    +304
    +305def lexer(expression: Union[str, int, float]) -> List[Token]:
    +306    if isinstance(expression, (int, float)):
    +307        return [Token(tag=TokenTag.numeric, value=expression)]
    +308
    +309    number_of_left_parentheses = expression.count(Operators.left_parenthesis.value)
    +310    number_of_right_parentheses = expression.count(Operators.right_parenthesis.value)
    +311    if number_of_left_parentheses != number_of_right_parentheses:
    +312        raise ValueError(f"Number of left and right parentheses do not match for expression '{expression}'")
    +313
    +314    # Arithmetic operators redefined with {} to allow +-*/ et.c. in variable names
    +315    token_exprs = [
    +316        (r"[ \n\t]+", None),
    +317        (r"#[^\n]*", None),
    +318        (r"\:=", TokenTag.operator),
    +319        (r"\(", TokenTag.operator),
    +320        (r"\)", TokenTag.operator),
    +321        (r";", TokenTag.operator),
    +322        (r"\{\+\}", TokenTag.operator),
    +323        (
    +324            r"\{-\}",
    +325            TokenTag.operator,
    +326        ),  # Redef - to {-} to allow - in summary variable names
    +327        (r"\{\*\}", TokenTag.operator),
    +328        (r"\{/\}", TokenTag.operator),
    +329        (r"\{\^\}", TokenTag.operator),
    +330        (r"<=", TokenTag.operator),
    +331        (r"<", TokenTag.operator),
    +332        (r">=", TokenTag.operator),
    +333        (r">", TokenTag.operator),
    +334        (r"==", TokenTag.operator),
    +335        (r"!=", TokenTag.operator),
    +336        (r"and", TokenTag.operator),
    +337        (r"or", TokenTag.operator),
    +338        (r"not", TokenTag.operator),
    +339        (r"if", TokenTag.operator),
    +340        (r"then", TokenTag.operator),
    +341        (r"else", TokenTag.operator),
    +342        (r"while", TokenTag.operator),
    +343        (r"do", TokenTag.operator),
    +344        (r"end", TokenTag.operator),
    +345        (r"[0-9](\.[0-9]+)?e[-+]?[0-9]+", TokenTag.numeric),  # Scientific notation, e.g. 1.23e-05, 3.4e7, 1e+1
    +346        (r"[0-9.]+", TokenTag.numeric),
    +347        (r"[A-Za-z][A-Za-z0-9._;:+*/-]*", TokenTag.reference),
    +348        (r"\$var\.[A-Za-z][A-Za-z0-9_]*", TokenTag.reference),
    +349    ]
    +350
    +351    return lex(expression, token_exprs)
    +352
    +353
    +354OPERATORS = {
    +355    "{+}": op.add,
    +356    "{-}": op.sub,
    +357    "{/}": op.truediv,
    +358    "{*}": op.mul,
    +359    "{^}": op.pow,
    +360    ">": op.gt,
    +361    ">=": op.ge,
    +362    "<": op.lt,
    +363    "<=": op.le,
    +364    "==": op.eq,
    +365    "ne": op.ne,
    +366}
    +367
    +368
    +369# Check that two operators are not coming after each other, e.g. {+} {-} or {+} > et.c.
    +370def check_tokens(tokens):
    +371    tokens_dummy = ["ref" if isinstance(token, np.ndarray) else str(token) for token in tokens]
    +372    var = " ".join(tokens_dummy)
    +373    first_token, last_token = tokens[0], tokens[-1]
    +374    if str(first_token) in list(OPERATORS.keys()):
    +375        raise ValueError(f"Expression ({var}) can not start with an operator")
    +376    if str(last_token) in list(OPERATORS.keys()):
    +377        raise ValueError(f"Expression ({var}) can not end with an operator")
    +378    for idx, token in enumerate(tokens):
    +379        prev_token = tokens[idx - 1]
    +380        if str(prev_token) in list(OPERATORS.keys()) and str(token) in list(OPERATORS.keys()):
    +381            raise ValueError(f"Expression ({var}) can not have two operators after each other")
    +382
    +383
    +384class TokenTag(Enum):
    +385    reference = "ID"
    +386    operator = "RESERVED"
    +387    numeric = "NUMBER"
    +388
    +389
    +390class Operators(Enum):
    +391    add = "{+}"
    +392    subtract = "{-}"
    +393    divide = "{/}"
    +394    multiply = "{*}"
    +395    power = "{^}"
    +396    left_parenthesis = "("
    +397    right_parenthesis = ")"
    +398    larger_than = ">"
    +399    larger_than_or_equal = ">="
    +400    less_than = "<"
    +401    less_than_or_equal = "<="
    +402    equal = "=="
    +403    not_equal = "ne"
    +404
    +405
    +406class Token(BaseModel):
    +407    tag: TokenTag
    +408    value: Union[float, int, bool, NDArray[np.float64], str] = Field(union_mode="left_to_right")
    +409
    +410    def __str__(self):
    +411        return str(self.value)
    +412
    +413    model_config = ConfigDict(arbitrary_types_allowed=True)
    +
    + + +
    +
    + +
    + + def + eval_tokens( tokens: List[libecalc.expression.expression_evaluator.Token], array_length: int) -> numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]: + + + +
    + +
    46def eval_tokens(tokens: List[Token], array_length: int) -> NDArray[np.float64]:
    +47    token_values = [token.value for token in tokens]
    +48    check_tokens(token_values)
    +49
    +50    evaluated_values = np.nan_to_num(
    +51        x=eval_parentheses(
    +52            tokens=token_values,
    +53        )  # type: ignore[arg-type]
    +54    )
    +55
    +56    if isinstance(evaluated_values, (Number, int, float)):
    +57        evaluated_values = np.full(fill_value=evaluated_values, shape=array_length)
    +58    return evaluated_values
    +
    + + + + +
    +
    + +
    + + def + eval_parentheses( tokens: List[Union[float, int, bool, numpy.ndarray[Any, numpy.dtype[numpy.float64]], str]], original_expression: Union[str, NoneType] = None) -> Union[numpy.ndarray[Any, numpy.dtype[numpy.float64]], numbers.Number]: + + + +
    + +
     61def eval_parentheses(
    + 62    tokens: List[Union[float, int, bool, NDArray[np.float64], str]],
    + 63    original_expression: Optional[str] = None,
    + 64) -> Union[NDArray[np.float64], Number]:
    + 65    """Evaluate expressions within parentheses"""
    + 66    with warnings.catch_warnings():
    + 67        warnings.simplefilter("ignore")
    + 68        number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    + 69        while number_of_left_parentheses or number_of_right_parentheses:
    + 70            if number_of_left_parentheses != number_of_right_parentheses:
    + 71                error_message = "Number of left and right parentheses do not match"
    + 72                if original_expression is not None:
    + 73                    error_message += f" for expression '{original_expression}'"
    + 74                raise ValueError(error_message)
    + 75
    + 76            ind = 0
    + 77            while ind < len(tokens) and str(tokens[ind]) != ")":
    + 78                ind += 1
    + 79            subend = ind
    + 80            while ind >= 0 and str(tokens[ind]) != "(":
    + 81                ind -= 1
    + 82            substart = ind
    + 83
    + 84            tokens_to_evaluate = tokens[substart + 1 : subend]
    + 85
    + 86            try:
    + 87                tokens_evaluated = eval_parentheses(
    + 88                    tokens_to_evaluate,
    + 89                    original_expression=original_expression,
    + 90                )
    + 91            except Exception as e:
    + 92                logger.exception(e)
    + 93                errorstr = ""
    + 94                if tokens_to_evaluate:
    + 95                    for token in tokens_to_evaluate:
    + 96                        if isinstance(token, np.ndarray):
    + 97                            errorstr += "array(len=" + str(len(token)) + ") "
    + 98                        else:
    + 99                            errorstr += str(token) + " "
    +100                raise ValueError(
    +101                    "expression evaluator" + ": I have trouble calculating the expression: " + errorstr
    +102                ) from e
    +103
    +104            tokens = tokens[:substart] + [tokens_evaluated] + tokens[subend + 1 :]
    +105            number_of_left_parentheses, number_of_right_parentheses = count_parentheses(tokens=tokens)
    +106
    +107    return eval_logicals(tokens)
    +
    + + +

    Evaluate expressions within parentheses

    +
    + + +
    +
    + +
    + + def + count_parentheses( tokens: List[Union[float, int, bool, numpy.ndarray[Any, numpy.dtype[numpy.float64]], str]]) -> Tuple[int, int]: + + + +
    + +
    110def count_parentheses(tokens: List[Union[float, int, bool, NDArray[np.float64], str]]) -> Tuple[int, int]:
    +111    """Count the number of left "(" and right ")" parentheses in a list of tokens"""
    +112    strings_in_tokens = [element for element in tokens if isinstance(element, str)]
    +113    return strings_in_tokens.count(Operators.left_parenthesis.value), strings_in_tokens.count(
    +114        Operators.right_parenthesis.value
    +115    )
    +
    + + +

    Count the number of left "(" and right ")" parentheses in a list of tokens

    +
    + + +
    +
    + +
    + + def + eval_logicals(tokens): + + + +
    + +
    118def eval_logicals(tokens):
    +119    """Evaluate logical operators in expression"""
    +120    logical_ops = [">", "<", ">=", "<=", "==", "!="]
    +121    ind = 0
    +122    while ind < len(tokens):
    +123        if str(tokens[ind]) in logical_ops:
    +124            divind = ind
    +125            left_tokens = tokens[0:divind]
    +126            right_tokens = tokens[divind + 1 :]
    +127            # Check that there are not more than one logical operator in tokens
    +128            for right_tok in right_tokens:
    +129                if str(right_tok)[0] in logical_ops or str(right_tok)[:2] in logical_ops:
    +130                    raise KeyError("Not more than one logical operator within each parenthesis set")
    +131            return np.array(
    +132                OPERATORS[tokens[divind]](
    +133                    eval_additions(left_tokens),
    +134                    eval_additions(right_tokens),
    +135                ),
    +136                dtype=float,
    +137            )
    +138        ind += 1
    +139    return eval_additions(tokens)
    +
    + + +

    Evaluate logical operators in expression

    +
    + + +
    +
    + +
    + + def + eval_additions(tokens): + + + +
    + +
    142def eval_additions(tokens):
    +143    """Evaluate additions and subtractions in expression"""
    +144    add_ops = ["{+}", "{-}"]
    +145    values = []
    +146    with warnings.catch_warnings():
    +147        warnings.simplefilter("ignore")
    +148        if tokens.count("{+}") or tokens.count(
    +149            "{-}"
    +150        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +151            ind = 0
    +152            seqstart = 0
    +153            signNext = 1.0
    +154            while ind < len(tokens):
    +155                if str(tokens[ind]) in add_ops:
    +156                    values.append(signNext * eval_mults(tokens[seqstart:ind]))
    +157                    signNext = 1.0 if tokens[ind] == "{+}" else -1.0
    +158                    seqstart = ind + 1
    +159                ind += 1
    +160            if tokens[seqstart - 1] == "{+}":
    +161                values.append(eval_mults(tokens[seqstart:ind]))
    +162            else:
    +163                values.append(-1.0 * eval_mults(tokens[seqstart:ind]))
    +164
    +165        else:
    +166            values.append(eval_mults(tokens))
    +167    return sum(values)
    +
    + + +

    Evaluate additions and subtractions in expression

    +
    + + +
    +
    + +
    + + def + eval_mults(tokens): + + + +
    + +
    170def eval_mults(tokens):
    +171    """Evaluate multiplications in expression"""
    +172    mult_ops = ["{*}", "{/}"]
    +173    values = []
    +174
    +175    # We may sometimes divide by zero in large vectors, but as these values might get removed
    +176    # by conditions later, we allow this and ignore related warnings
    +177    current_numpy_error = np.geterr()
    +178    np.seterr(divide="ignore", invalid="ignore")
    +179    with warnings.catch_warnings():
    +180        warnings.simplefilter("ignore")
    +181        if tokens.count("{*}") or tokens.count(
    +182            "{/}"
    +183        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +184            ind = 0
    +185            seqstart = 0
    +186            opnext = "mult"
    +187            while ind < len(tokens):
    +188                if str(tokens[ind]) in mult_ops:
    +189                    if opnext == "mult":
    +190                        values.append(eval_powers(tokens[seqstart:ind]))
    +191                    else:
    +192                        denominator = eval_powers(tokens[seqstart:ind])
    +193                        # By default, this throws a warning when denomonator contains 0
    +194                        # Want to allow division by 0 here, as these values may be ruled out later anyway
    +195                        # by conditions
    +196                        mult = np.divide(1.0, denominator)
    +197                        values.append(mult)
    +198                    opnext = "mult" if tokens[ind] == "{*}" else "div"
    +199                    seqstart = ind + 1
    +200                ind += 1
    +201            if tokens[seqstart - 1] == "{*}":
    +202                values.append(eval_powers(tokens[seqstart:ind]))
    +203            else:
    +204                denominator = eval_powers(tokens[seqstart:ind])
    +205                mult = np.divide(1.0, denominator)
    +206                values.append(mult)
    +207        else:
    +208            tmp = eval_powers(tokens)
    +209            if tmp is not None:
    +210                values.append(eval_powers(tokens))
    +211        value = 1.0
    +212        for factor in values:
    +213            value = value * factor
    +214        np.seterr(**current_numpy_error)
    +215    return np.nan_to_num(value)
    +
    + + +

    Evaluate multiplications in expression

    +
    + + +
    +
    + +
    + + def + eval_powers(tokens): + + + +
    + +
    218def eval_powers(tokens):
    +219    """Evaluate exponential calculations in expression"""
    +220    with warnings.catch_warnings():
    +221        warnings.simplefilter("ignore")
    +222        if tokens.count(
    +223            "{^}"
    +224        ):  # Fixme: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
    +225            if len(tokens) != 3:
    +226                raise ValueError("Number of tokens needs to be 3 for evalPowers, quotient, {^} and exponent")
    +227            quotient = eval_value([tokens[0]])
    +228            exponent = eval_value([tokens[2]])
    +229            value = np.power(quotient, exponent)
    +230        else:
    +231            value = eval_value(tokens)
    +232
    +233    return np.nan_to_num(value)
    +
    + + +

    Evaluate exponential calculations in expression

    +
    + + +
    +
    + +
    + + def + eval_value(tokens): + + + +
    + +
    236def eval_value(tokens):
    +237    numpattern = r"[0-9.]+"
    +238    regexnumber = re.compile(numpattern)
    +239
    +240    if type(tokens) is NDArray[np.float64]:
    +241        var = tokens[0]
    +242    elif len(tokens) < 1:
    +243        raise ValueError(f"expression_evaluator: I can not evaluate {tokens}")
    +244    elif len(tokens) > 2:
    +245        outtext = "Wrong format of variable "
    +246        for ind in range(len(tokens)):
    +247            outtext += " " + str(tokens[ind])
    +248        raise Exception(outtext)
    +249    elif len(tokens) == 2:
    +250        raise ValueError("Should not enter here - no time series in expression evaluator")
    +251    elif isinstance(tokens[0], (int, float)):
    +252        return float(tokens[0])
    +253    else:
    +254        pos = 0
    +255        match = regexnumber.match(str(tokens[0]), pos)
    +256        if match:  # This is a number
    +257            return float(match.group(0))
    +258        elif type(tokens[0]) is not np.ndarray:
    +259            tmp = tokens[0].split(";")
    +260            if len(tmp) != 2:
    +261                raise KeyError(
    +262                    'Not correct format of reservoir variable "'
    +263                    + tokens[0]
    +264                    + '", did you forget to specify reservoir case (e.g. "SIM1;'
    +265                    + tokens[0]
    +266                    + '")?'
    +267                )
    +268            raise ValueError("Should not enter here - no time series in expression evaluator")
    +269        else:
    +270            var = tokens[0]
    +271    var = np.nan_to_num(var)
    +272    return var
    +
    + + + + +
    +
    + +
    + + def + lex( expression: str, token_exprs: List[Tuple[str, Union[libecalc.expression.expression_evaluator.TokenTag, NoneType]]]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    275def lex(expression: str, token_exprs: List[Tuple[str, Optional[TokenTag]]]) -> List[Token]:
    +276    pos = 0
    +277    tokens = []
    +278
    +279    while pos < len(expression):
    +280        match = None
    +281        for token_expr in token_exprs:
    +282            pattern, tag = token_expr
    +283            regex = re.compile(pattern)
    +284            match = regex.match(expression, pos)
    +285            if match:
    +286                text = match.group(0)
    +287                if tag:
    +288                    token = text  # (text, tag)
    +289                    tokens.append(
    +290                        Token(
    +291                            tag=tag,
    +292                            value=token,
    +293                        )
    +294                    )
    +295                break
    +296        if not match:
    +297            raise KeyError(
    +298                f'Illegal character: "{str(expression[pos])}" in "{expression}". '
    +299                f"Did you forget to put {{}} around operators?"
    +300            )
    +301        else:
    +302            pos = match.end(0)
    +303    return tokens
    +
    + + + + +
    +
    + +
    + + def + lexer( expression: Union[str, int, float]) -> List[libecalc.expression.expression_evaluator.Token]: + + + +
    + +
    306def lexer(expression: Union[str, int, float]) -> List[Token]:
    +307    if isinstance(expression, (int, float)):
    +308        return [Token(tag=TokenTag.numeric, value=expression)]
    +309
    +310    number_of_left_parentheses = expression.count(Operators.left_parenthesis.value)
    +311    number_of_right_parentheses = expression.count(Operators.right_parenthesis.value)
    +312    if number_of_left_parentheses != number_of_right_parentheses:
    +313        raise ValueError(f"Number of left and right parentheses do not match for expression '{expression}'")
    +314
    +315    # Arithmetic operators redefined with {} to allow +-*/ et.c. in variable names
    +316    token_exprs = [
    +317        (r"[ \n\t]+", None),
    +318        (r"#[^\n]*", None),
    +319        (r"\:=", TokenTag.operator),
    +320        (r"\(", TokenTag.operator),
    +321        (r"\)", TokenTag.operator),
    +322        (r";", TokenTag.operator),
    +323        (r"\{\+\}", TokenTag.operator),
    +324        (
    +325            r"\{-\}",
    +326            TokenTag.operator,
    +327        ),  # Redef - to {-} to allow - in summary variable names
    +328        (r"\{\*\}", TokenTag.operator),
    +329        (r"\{/\}", TokenTag.operator),
    +330        (r"\{\^\}", TokenTag.operator),
    +331        (r"<=", TokenTag.operator),
    +332        (r"<", TokenTag.operator),
    +333        (r">=", TokenTag.operator),
    +334        (r">", TokenTag.operator),
    +335        (r"==", TokenTag.operator),
    +336        (r"!=", TokenTag.operator),
    +337        (r"and", TokenTag.operator),
    +338        (r"or", TokenTag.operator),
    +339        (r"not", TokenTag.operator),
    +340        (r"if", TokenTag.operator),
    +341        (r"then", TokenTag.operator),
    +342        (r"else", TokenTag.operator),
    +343        (r"while", TokenTag.operator),
    +344        (r"do", TokenTag.operator),
    +345        (r"end", TokenTag.operator),
    +346        (r"[0-9](\.[0-9]+)?e[-+]?[0-9]+", TokenTag.numeric),  # Scientific notation, e.g. 1.23e-05, 3.4e7, 1e+1
    +347        (r"[0-9.]+", TokenTag.numeric),
    +348        (r"[A-Za-z][A-Za-z0-9._;:+*/-]*", TokenTag.reference),
    +349        (r"\$var\.[A-Za-z][A-Za-z0-9_]*", TokenTag.reference),
    +350    ]
    +351
    +352    return lex(expression, token_exprs)
    +
    + + + + +
    +
    + +
    + + def + check_tokens(tokens): + + + +
    + +
    371def check_tokens(tokens):
    +372    tokens_dummy = ["ref" if isinstance(token, np.ndarray) else str(token) for token in tokens]
    +373    var = " ".join(tokens_dummy)
    +374    first_token, last_token = tokens[0], tokens[-1]
    +375    if str(first_token) in list(OPERATORS.keys()):
    +376        raise ValueError(f"Expression ({var}) can not start with an operator")
    +377    if str(last_token) in list(OPERATORS.keys()):
    +378        raise ValueError(f"Expression ({var}) can not end with an operator")
    +379    for idx, token in enumerate(tokens):
    +380        prev_token = tokens[idx - 1]
    +381        if str(prev_token) in list(OPERATORS.keys()) and str(token) in list(OPERATORS.keys()):
    +382            raise ValueError(f"Expression ({var}) can not have two operators after each other")
    +
    + + + + +
    +
    + +
    + + class + TokenTag(enum.Enum): + + + +
    + +
    385class TokenTag(Enum):
    +386    reference = "ID"
    +387    operator = "RESERVED"
    +388    numeric = "NUMBER"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + reference = +<TokenTag.reference: 'ID'> + + +
    + + + + +
    +
    +
    + operator = +<TokenTag.operator: 'RESERVED'> + + +
    + + + + +
    +
    +
    + numeric = +<TokenTag.numeric: 'NUMBER'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + class + Operators(enum.Enum): + + + +
    + +
    391class Operators(Enum):
    +392    add = "{+}"
    +393    subtract = "{-}"
    +394    divide = "{/}"
    +395    multiply = "{*}"
    +396    power = "{^}"
    +397    left_parenthesis = "("
    +398    right_parenthesis = ")"
    +399    larger_than = ">"
    +400    larger_than_or_equal = ">="
    +401    less_than = "<"
    +402    less_than_or_equal = "<="
    +403    equal = "=="
    +404    not_equal = "ne"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + add = +<Operators.add: '{+}'> + + +
    + + + + +
    +
    +
    + subtract = +<Operators.subtract: '{-}'> + + +
    + + + + +
    +
    +
    + divide = +<Operators.divide: '{/}'> + + +
    + + + + +
    +
    +
    + multiply = +<Operators.multiply: '{*}'> + + +
    + + + + +
    +
    +
    + power = +<Operators.power: '{^}'> + + +
    + + + + +
    +
    +
    + left_parenthesis = +<Operators.left_parenthesis: '('> + + +
    + + + + +
    +
    +
    + right_parenthesis = +<Operators.right_parenthesis: ')'> + + +
    + + + + +
    +
    +
    + larger_than = +<Operators.larger_than: '>'> + + +
    + + + + +
    +
    +
    + larger_than_or_equal = +<Operators.larger_than_or_equal: '>='> + + +
    + + + + +
    +
    +
    + less_than = +<Operators.less_than: '<'> + + +
    + + + + +
    +
    +
    + less_than_or_equal = +<Operators.less_than_or_equal: '<='> + + +
    + + + + +
    +
    +
    + equal = +<Operators.equal: '=='> + + +
    + + + + +
    +
    +
    + not_equal = +<Operators.not_equal: 'ne'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + class + Token(pydantic.main.BaseModel): + + + +
    + +
    407class Token(BaseModel):
    +408    tag: TokenTag
    +409    value: Union[float, int, bool, NDArray[np.float64], str] = Field(union_mode="left_to_right")
    +410
    +411    def __str__(self):
    +412        return str(self.value)
    +413
    +414    model_config = ConfigDict(arbitrary_types_allowed=True)
    +
    + + +

    Usage docs: https://docs.pydantic.dev/2.6/concepts/models/

    + +

    A base class for creating Pydantic models.

    + +

    Attributes: + __class_vars__: The names of classvars defined on the model. + __private_attributes__: Metadata about the private attributes of the model. + __signature__: The signature for instantiating the model.

    + +
    __pydantic_complete__: Whether model building is completed, or if there are still undefined fields.
    +__pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
    +__pydantic_custom_init__: Whether the model has a custom `__init__` function.
    +__pydantic_decorators__: Metadata containing the decorators defined on the model.
    +    This replaces `Model.__validators__` and `Model.__root_validators__` from Pydantic V1.
    +__pydantic_generic_metadata__: Metadata for generic models; contains data used for a similar purpose to
    +    __args__, __origin__, __parameters__ in typing-module generics. May eventually be replaced by these.
    +__pydantic_parent_namespace__: Parent namespace of the model, used for automatic rebuilding of models.
    +__pydantic_post_init__: The name of the post-init method for the model, if defined.
    +__pydantic_root_model__: Whether the model is a `RootModel`.
    +__pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the model.
    +__pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the model.
    +
    +__pydantic_extra__: An instance attribute with the values of extra fields from validation when
    +    `model_config['extra'] == 'allow'`.
    +__pydantic_fields_set__: An instance attribute with the names of fields explicitly set.
    +__pydantic_private__: Instance attribute with the values of private attributes set on the model instance.
    +
    +
    + + +
    +
    Inherited Members
    +
    +
    pydantic.main.BaseModel
    +
    BaseModel
    +
    model_extra
    +
    model_fields_set
    +
    model_construct
    +
    model_copy
    +
    model_dump
    +
    model_dump_json
    +
    model_json_schema
    +
    model_parametrized_name
    +
    model_post_init
    +
    model_rebuild
    +
    model_validate
    +
    model_validate_json
    +
    model_validate_strings
    +
    dict
    +
    json
    +
    parse_obj
    +
    parse_raw
    +
    parse_file
    +
    from_orm
    +
    construct
    +
    copy
    +
    schema
    +
    schema_json
    +
    validate
    +
    update_forward_refs
    + +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure.html b/docs/about/references/api/libecalc/infrastructure.html new file mode 100644 index 0000000000..feb379a1dd --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure.html @@ -0,0 +1,238 @@ + + + + + + + libecalc.infrastructure API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure

    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure/file_io.html b/docs/about/references/api/libecalc/infrastructure/file_io.html new file mode 100644 index 0000000000..d6c54dda37 --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure/file_io.html @@ -0,0 +1,2356 @@ + + + + + + + libecalc.infrastructure.file_io API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure.file_io

    + + + + + + +
      1import enum
    +  2import math
    +  3import re
    +  4import uuid
    +  5import zipfile
    +  6from abc import abstractmethod
    +  7from collections import Counter
    +  8from dataclasses import dataclass
    +  9from io import BytesIO, StringIO
    + 10from pathlib import Path
    + 11from tempfile import TemporaryFile
    + 12from typing import IO, Dict, List, Protocol, TextIO, Tuple, Union
    + 13
    + 14import numpy as np
    + 15import pandas
    + 16import pandas as pd
    + 17
    + 18from libecalc.common.errors.exceptions import EcalcError, EcalcErrorType
    + 19from libecalc.common.logger import logger
    + 20from libecalc.presentation.yaml.yaml_entities import Resource, YamlTimeseriesType
    + 21
    + 22YAML_EXTENSIONS = [".yml", ".yaml"]
    + 23CSV_EXTENSION = ".csv"
    + 24ZIP_EXTENSION = ".zip"
    + 25MAIN_PROVEN_FILE = ["INSTALLATION", "TIME_SERIES", "FACILITY_INPUTS", "FUEL_TYPES"]
    + 26
    + 27IGNORED_ZIP_CONTENTS_KEYWORDS = [".DS_Store", "__MACOSX"]
    + 28
    + 29
    + 30def is_main_yaml_file(file: IO) -> bool:
    + 31    """Deprecated. To be removed when zip is verified.
    + 32    :param file:
    + 33    :return:
    + 34    """
    + 35    bytes_str = file.read()
    + 36    file.seek(0)
    + 37    text_obj = bytes_str.decode("UTF-8")
    + 38    return any(x in text_obj for x in MAIN_PROVEN_FILE)
    + 39
    + 40
    + 41def is_ignored_zip_content(file: Path) -> bool:
    + 42    return bool(file.is_dir() or any(substring in str(file) for substring in IGNORED_ZIP_CONTENTS_KEYWORDS))
    + 43
    + 44
    + 45class FileWithName(Protocol):
    + 46    filename: str
    + 47    file: IO
    + 48
    + 49
    + 50@dataclass
    + 51class UnzippedFile:
    + 52    """Class for mimicking FileWithName."""
    + 53
    + 54    filename: str  # including path
    + 55    file: IO
    + 56
    + 57
    + 58class EcalcFileType(str, enum.Enum):
    + 59    YAML = "yaml"
    + 60    CSV = "csv"
    + 61    ZIP = "zip"
    + 62
    + 63
    + 64@dataclass
    + 65class EcalcFile:
    + 66    @abstractmethod
    + 67    def is_valid(self) -> bool:
    + 68        pass
    + 69
    + 70    @staticmethod
    + 71    def is_csv(filename: Path) -> bool:
    + 72        return filename.suffix.lower() == CSV_EXTENSION
    + 73
    + 74    @staticmethod
    + 75    def is_yaml(filename: Path) -> bool:
    + 76        try:
    + 77            file_extension = filename.suffix
    + 78            return file_extension.lower() in YAML_EXTENSIONS
    + 79        except AttributeError as e:
    + 80            logger.exception(e)
    + 81            return False
    + 82
    + 83    @staticmethod
    + 84    def is_zip(filename: Path) -> bool:
    + 85        try:
    + 86            file_extension = filename.suffix
    + 87            return file_extension.lower() in ZIP_EXTENSION
    + 88        except AttributeError as e:
    + 89            logger.exception(e)
    + 90            return False
    + 91
    + 92    @staticmethod
    + 93    def get_type(filename: Path) -> EcalcFileType:
    + 94        if EcalcFile.is_csv(filename):
    + 95            return EcalcFileType.CSV
    + 96        elif EcalcFile.is_yaml(filename):
    + 97            return EcalcFileType.YAML
    + 98        elif EcalcFile.is_zip(filename):
    + 99            return EcalcFileType.ZIP
    +100
    +101        message = f"Cannot get (valid) file type of {filename}"
    +102        logger.warning(message)
    +103        raise EcalcError(
    +104            message=message,
    +105            title="Invalid file type",
    +106            error_type=EcalcErrorType.CLIENT_ERROR,
    +107        )
    +108
    +109
    +110@dataclass
    +111class ValidEcalcFile(EcalcFile):
    +112    """Class for mimicking FileWithName."""
    +113
    +114    original_filename: Path  # full path, e.g. in archive
    +115    filename: str  # just the (file)name
    +116    file: IO
    +117    file_type: EcalcFileType
    +118
    +119    def is_valid(self) -> bool:
    +120        return True
    +121
    +122    def is_main_yaml_file(self) -> bool:
    +123        bytes_str = self.file.read()
    +124        self.file.seek(0)
    +125        text_obj = bytes_str.decode("UTF-8")
    +126        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +127
    +128
    +129@dataclass
    +130class InvalidEcalcFile(EcalcFile):
    +131    """Class for mimicking FileWithName."""
    +132
    +133    original_filename: Path  # full path in archive
    +134    filename: str  # just the filename
    +135    error: str
    +136
    +137    def is_valid(self) -> bool:
    +138        return False
    +139
    +140
    +141@dataclass
    +142class EcalcFiles:
    +143    ALLOWED_EXTENSIONS = {"yaml", "csv", "yml", "zip"}
    +144
    +145    @staticmethod
    +146    def allowed_file(filename: str) -> bool:
    +147        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +148
    +149    @staticmethod
    +150    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +151        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +152        yaml file can have !include and a certain set of sections.
    +153
    +154        * Only one main file is allowed
    +155
    +156        if none or more than one main file is detected an exception is raised
    +157        :param files:
    +158        :return:
    +159        """
    +160        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +161        if len(main_files) > 1:
    +162            raise EcalcError(
    +163                "Bad Request",
    +164                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +165                error_type=EcalcErrorType.CLIENT_ERROR,
    +166            )
    +167
    +168        if len(main_files) == 0:
    +169            raise EcalcError(
    +170                "Bad Request",
    +171                "No main files found. There must be one main file",
    +172                error_type=EcalcErrorType.CLIENT_ERROR,
    +173            )
    +174
    +175        return main_files[0]
    +176
    +177    @staticmethod
    +178    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +179        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +180        filter out bad files for further processing of good files only.
    +181
    +182        The current validation implementation is very naĩve, by only checking file extension.
    +183
    +184        :param files:
    +185        :return:
    +186        """
    +187        valid_files: List[ValidEcalcFile] = []
    +188        invalid_files: List[InvalidEcalcFile] = []
    +189        for file in files:
    +190            if EcalcFiles.allowed_file(file.filename):
    +191                if EcalcFile.is_zip(Path(file.filename)):
    +192                    if len(files) > 1:
    +193                        raise EcalcError(
    +194                            title="Invalid file combination",
    +195                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +196                        )
    +197
    +198                    valid_files, invalid_files = unpack_zip(file.file)
    +199                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +200                    valid_files.append(
    +201                        ValidEcalcFile(
    +202                            original_filename=Path(file.filename),
    +203                            filename=file.filename,
    +204                            file=file.file,
    +205                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +206                        )
    +207                    )
    +208                else:
    +209                    invalid_files.append(
    +210                        InvalidEcalcFile(
    +211                            original_filename=Path(file.filename),
    +212                            filename=file.filename,
    +213                            error="Invalid File Extension",
    +214                        )
    +215                    )
    +216            else:
    +217                invalid_files.append(
    +218                    InvalidEcalcFile(
    +219                        original_filename=Path(file.filename),
    +220                        filename=file.filename,
    +221                        error="Invalid File Extension",
    +222                    )
    +223                )
    +224
    +225        return valid_files, invalid_files
    +226
    +227
    +228def find_longest_common_path(file_path_1: Path, file_path_2: Path) -> str:
    +229    """Given 2 paths, find the longest common path, part by part that the 2 paths share; ie
    +230    until which position in the file hierarchy do they diverge?
    +231
    +232    :param file_path_1:
    +233    :param file_path_2:
    +234    :return:
    +235    """
    +236    common_path = ""
    +237    for path_1, path_2 in zip(file_path_1.parts, file_path_2.parts):
    +238        if path_1 == path_2:
    +239            common_path += path_1 + "/"
    +240        else:
    +241            break
    +242
    +243    return common_path
    +244
    +245
    +246def strip_common_path(common_path: str, path: str) -> str:
    +247    """Remove/strip the given subpath from path
    +248    :param common_path:
    +249    :param path:
    +250    :return:
    +251    """
    +252    return path.replace(common_path, "")
    +253
    +254
    +255def make_relative_path(linked_file: str, main_file: str) -> str:
    +256    """Given a main file and a file to be linked to from that file, only
    +257    include the parts of the path of both files that _differ_.
    +258
    +259    The parts that is different in main_file, will be replaced with "../",
    +260
    +261    :param linked_file:
    +262    :param main_file:
    +263    :return:
    +264    """
    +265    main_file_path = Path(main_file)
    +266    for part in main_file_path.parts[:-1]:
    +267        if part != "" and part != "/":
    +268            linked_file = "../" + linked_file
    +269
    +270    return linked_file
    +271
    +272
    +273def find_duplicates(files: List[ValidEcalcFile]) -> List[str]:
    +274    """Find files with duplicate names (names = without path).
    +275
    +276    :param files:
    +277    :return:
    +278    """
    +279    count_filenames = Counter([file.filename for file in files])
    +280    duplicates = [filename for filename, count in count_filenames.items() if count > 1]
    +281
    +282    return duplicates
    +283
    +284
    +285def rename_duplicates(valid_files: List[ValidEcalcFile], duplicates: List[str]) -> Dict[Path, str]:
    +286    """Rename duplicate files. All with same name will be renamed. Those that are not duplicates,
    +287    will also be returned, with the original filename in the mapping.
    +288
    +289    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist
    +290    at the same level.
    +291
    +292    :param valid_files:
    +293    :param duplicates:
    +294    :return:
    +295    """
    +296    renamed_files: Dict[Path, str] = {}
    +297    for file in valid_files:
    +298        if file.filename in duplicates:
    +299            renamed_filename = str(file.original_filename).replace("/", "_")
    +300            if len(renamed_filename) > 100:
    +301                renamed_filename = renamed_filename[-94:] + str(uuid.uuid4().hex.upper()[0:6])
    +302            renamed_files[file.original_filename] = renamed_filename
    +303        else:
    +304            renamed_files[file.original_filename] = file.filename
    +305
    +306    return renamed_files
    +307
    +308
    +309def make_relative_paths(files: List[ValidEcalcFile], main_yaml: ValidEcalcFile) -> Dict[Path, str]:
    +310    """For all files in the list, generate the relative paths for all files, relative
    +311    to the provided main file. All files provided, must have the original_filename set, which must
    +312    be the relative path to the root of the model; e.g. the (zip) archive path, or
    +313    if only one level, the filename itself.
    +314
    +315    :param files:
    +316    :param main_yaml:
    +317    :return:
    +318    """
    +319    relative_paths: Dict[Path, str] = {}
    +320    for file in files:
    +321        if file == main_yaml:
    +322            # since all files are relative to this given file, this must be the filename itself, only
    +323            relative_paths[main_yaml.original_filename] = main_yaml.filename
    +324        else:
    +325            common_path = find_longest_common_path(Path(file.original_filename), Path(main_yaml.original_filename))
    +326            stripped_file = strip_common_path(common_path, str(file.original_filename))
    +327            stripped_main = strip_common_path(common_path, str(main_yaml.original_filename))
    +328            relative_path = make_relative_path(stripped_file, stripped_main)
    +329
    +330            relative_paths[file.original_filename] = relative_path
    +331
    +332    return relative_paths
    +333
    +334
    +335def unpack_zip(file: IO) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +336    """Unpack the zip similarility to how single files are handled, by returning a tuple
    +337    of valid and invalid files.
    +338
    +339    :param file:
    +340    :return:
    +341    """
    +342    valid_files: List[ValidEcalcFile] = []
    +343    invalid_files: List[InvalidEcalcFile] = []
    +344    try:
    +345        with zipfile.ZipFile(BytesIO(file.read())) as archive:
    +346            for zip_info in archive.infolist():
    +347                try:
    +348                    file_path = Path(zip_info.filename)
    +349
    +350                    if is_ignored_zip_content(file_path) or zip_info.is_dir():
    +351                        # Just ignore, dont event mention it. Will just confuse users (because those files are normally hidden)
    +352                        continue
    +353                    elif EcalcFile.is_csv(file_path) or EcalcFile.is_yaml(file_path):
    +354                        with archive.open(zip_info) as file:
    +355                            file_like = TemporaryFile()
    +356                            file_like.write(file.read())
    +357                            file_like.seek(0)
    +358                            valid_files.append(
    +359                                ValidEcalcFile(
    +360                                    original_filename=file_path,
    +361                                    filename=file_path.name,
    +362                                    file=file_like,
    +363                                    file_type=EcalcFile.get_type(filename=file_path),
    +364                                )
    +365                            )
    +366                    else:
    +367                        invalid_files.append(
    +368                            InvalidEcalcFile(
    +369                                original_filename=file_path, filename=file_path.name, error="Invalid file extension"
    +370                            )
    +371                        )
    +372                        continue
    +373
    +374                except EcalcError as ee:
    +375                    logger.warning(f"An error occurred while reading file({file_path}) in zip archive")
    +376                    invalid_files.append(
    +377                        InvalidEcalcFile(original_filename=file_path, filename=file_path.name, error=ee.message)
    +378                    )
    +379
    +380        valid_file_paths = [valid_file.original_filename for valid_file in valid_files]
    +381        if len(valid_file_paths) != len(set(valid_file_paths)):
    +382            raise EcalcError(title="Bad zip file", message="Duplicated filepaths in zip archive detected. Please fix.")
    +383
    +384        return valid_files, invalid_files
    +385
    +386    except zipfile.BadZipFile as e:
    +387        raise EcalcError(title="Bad zip file", message="An error occurred while unpacking the zip file") from e
    +388
    +389
    +390def _validate_headers(headers: List[str]):
    +391    for header in headers:
    +392        if not re.match(r"^[A-Za-z][A-Za-z0-9_.,\-\s#+:\/]*$", header):
    +393            raise ValueError(
    +394                "Each header value must start with a letter in the english "
    +395                "alphabet (a-zA-Z). And may only contain letters, spaces, numbers or any of the following characters "
    +396                "[ _ - # + : . , /] "
    +397            )
    +398        elif re.match(r"^Unnamed: \d+$", header):
    +399            raise ValueError("CSV input file must include header")
    +400
    +401
    +402def _validate_not_nan(columns: List[List]):
    +403    for column in columns:
    +404        for index, item in enumerate(column):
    +405            if isinstance(item, float) and math.isnan(item):
    +406                raise ValueError(
    +407                    f"csv file contains invalid data at row {index + 1}, "
    +408                    f"all headers must be associated with a valid column value"
    +409                )
    +410
    +411
    +412def _dataframe_to_resource(df: pd.DataFrame, validate_headers: bool = True) -> Resource:
    +413    headers = df.columns.tolist()
    +414    headers = [header.strip() for header in headers]
    +415    if validate_headers:
    +416        _validate_headers(headers)
    +417    df.columns = df.columns.str.strip()
    +418    columns = [df[header].tolist() for header in headers]
    +419    return Resource(
    +420        headers=headers,
    +421        data=columns,
    +422    )
    +423
    +424
    +425def read_csv(csv_data: Union[str, TextIO, BytesIO]) -> pandas.DataFrame:
    +426    """Wrapper of pandas read csv function
    +427
    +428    Settings used:
    +429        float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001
    +430        skipinitialspace=True converts "  10" to 10,
    +431        thousands=" " removes spaces used as thousand separators (normal in excel)
    +432
    +433    Args:
    +434        csv_data:
    +435
    +436    Returns:
    +437
    +438    """
    +439    stream = StringIO(csv_data) if isinstance(csv_data, str) else csv_data
    +440
    +441    return pd.read_csv(stream, comment="#", float_precision="round_trip", skipinitialspace=True, thousands=" ")
    +442
    +443
    +444def read_resource_from_string(resource_string: str, validate_headers: bool = True) -> Resource:
    +445    """Read resource from stream without validation."""
    +446    resource_df = read_csv(resource_string)
    +447
    +448    resource = _dataframe_to_resource(resource_df.replace(np.nan, ""), validate_headers=validate_headers)
    +449    return resource
    +450
    +451
    +452def convert_dataframe_to_timeseries_resource(resource_df: pd.DataFrame) -> Resource:
    +453    # TODO: This might give a different result than calculator-cli since we are not yet
    +454    #  filtering on columns that are actually used. I.e. an unused column might have a number where all used columns
    +455    #  have nan. This method would include that row. Although it is unlikely.
    +456    # Drop rows if all values are na (sometimes lines with ,,, are exported from Excel).
    +457
    +458    resource_df = resource_df.dropna(axis=0, how="all")
    +459    # Drop columns if all values are na
    +460    resource_df = resource_df.dropna(axis=1, how="all")
    +461
    +462    return _dataframe_to_resource(resource_df)
    +463
    +464
    +465def read_timeseries_resource(
    +466    resource_input: Union[Path, BytesIO, str], timeseries_type: YamlTimeseriesType
    +467) -> Resource:
    +468    """Read timeseries resource from filepath with timeseries specific manipulation/validation.
    +469
    +470    - Timeseries is allowed to have nans
    +471    """
    +472    if not isinstance(resource_input, (BytesIO, str, Path)):
    +473        raise ValueError(f"Invalid resource_input type '{type(resource_input)}'")
    +474
    +475    if timeseries_type in (YamlTimeseriesType.DEFAULT, YamlTimeseriesType.MISCELLANEOUS):
    +476        if isinstance(resource_input, Path):
    +477            with open(resource_input) as resource_file:
    +478                resource_df = read_csv(resource_file)
    +479        else:
    +480            resource_df = read_csv(resource_input)
    +481    else:
    +482        raise ValueError(f"Invalid timeseries type '{timeseries_type}' for resource '{resource_input}'")
    +483
    +484    return convert_dataframe_to_timeseries_resource(resource_df=resource_df)
    +485
    +486
    +487def read_facility_resource(resource_input: Union[Path, BytesIO, str]) -> Resource:
    +488    """Read facility file from filepath with facility file specific validation.
    +489
    +490    - Facility files are not allowed to have nans
    +491    """
    +492    if isinstance(resource_input, Path):
    +493        with open(resource_input) as resource_file:
    +494            resource_df = read_csv(resource_file)
    +495    elif isinstance(resource_input, (BytesIO, str)):
    +496        resource_df = read_csv(resource_input)
    +497    else:
    +498        raise ValueError("")
    +499    resource = _dataframe_to_resource(resource_df)
    +500    _validate_not_nan(resource.data)
    +501    return resource
    +502
    +503
    +504def read_resource_from_filepath(resource_path: Path) -> Resource:
    +505    """Read resource from filepath without validation, should only be used as a util for tests/fixtures."""
    +506    if EcalcFile.is_csv(resource_path):
    +507        with open(resource_path) as resource_file:
    +508            resource_df = read_csv(resource_file)
    +509            return _dataframe_to_resource(resource_df)
    +510    else:
    +511        raise ValueError(f"Invalid file extension: {resource_path}")
    +
    + + +
    +
    + +
    + + def + is_main_yaml_file(file: <class 'IO'>) -> bool: + + + +
    + +
    31def is_main_yaml_file(file: IO) -> bool:
    +32    """Deprecated. To be removed when zip is verified.
    +33    :param file:
    +34    :return:
    +35    """
    +36    bytes_str = file.read()
    +37    file.seek(0)
    +38    text_obj = bytes_str.decode("UTF-8")
    +39    return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + +

    Deprecated. To be removed when zip is verified.

    + +
    Parameters
    + +
      +
    • file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + is_ignored_zip_content(file: pathlib.Path) -> bool: + + + +
    + +
    42def is_ignored_zip_content(file: Path) -> bool:
    +43    return bool(file.is_dir() or any(substring in str(file) for substring in IGNORED_ZIP_CONTENTS_KEYWORDS))
    +
    + + + + +
    +
    + +
    + + class + FileWithName(typing.Protocol): + + + +
    + +
    46class FileWithName(Protocol):
    +47    filename: str
    +48    file: IO
    +
    + + +

    Base class for protocol classes.

    + +

    Protocol classes are defined as::

    + +
    class Proto(Protocol):
    +    def meth(self) -> int:
    +        ...
    +
    + +

    Such classes are primarily used with static type checkers that recognize +structural subtyping (static duck-typing), for example::

    + +
    class C:
    +    def meth(self) -> int:
    +        return 0
    +
    +def func(x: Proto) -> int:
    +    return x.meth()
    +
    +func(C())  # Passes static type check
    +
    + +

    See PEP 544 for details. Protocol classes decorated with +@typing.runtime_checkable act as simple-minded runtime protocols that check +only the presence of given attributes, ignoring their type signatures. +Protocol classes can be generic, they are defined as::

    + +
    class GenProto(Protocol[T]):
    +    def meth(self) -> T:
    +        ...
    +
    +
    + + +
    + +
    + + FileWithName(*args, **kwargs) + + + +
    + +
    981def _no_init(self, *args, **kwargs):
    +982    if type(self)._is_protocol:
    +983        raise TypeError('Protocols cannot be instantiated')
    +
    + + + + +
    +
    +
    + +
    + + class + UnzippedFile: + + + +
    + +
    52class UnzippedFile:
    +53    """Class for mimicking FileWithName."""
    +54
    +55    filename: str  # including path
    +56    file: IO
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + UnzippedFile(filename: str, file: <class 'IO'>) + + +
    + + + + +
    +
    +
    + +
    + + class + EcalcFileType(builtins.str, enum.Enum): + + + +
    + +
    59class EcalcFileType(str, enum.Enum):
    +60    YAML = "yaml"
    +61    CSV = "csv"
    +62    ZIP = "zip"
    +
    + + +

    An enumeration.

    +
    + + +
    +
    + YAML = +<EcalcFileType.YAML: 'yaml'> + + +
    + + + + +
    +
    +
    + CSV = +<EcalcFileType.CSV: 'csv'> + + +
    + + + + +
    +
    +
    + ZIP = +<EcalcFileType.ZIP: 'zip'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    builtins.str
    +
    encode
    +
    replace
    +
    split
    +
    rsplit
    +
    join
    +
    capitalize
    +
    casefold
    +
    title
    +
    center
    +
    count
    +
    expandtabs
    +
    find
    +
    partition
    +
    index
    +
    ljust
    +
    lower
    +
    lstrip
    +
    rfind
    +
    rindex
    +
    rjust
    +
    rstrip
    +
    rpartition
    +
    splitlines
    +
    strip
    +
    swapcase
    +
    translate
    +
    upper
    +
    startswith
    +
    endswith
    +
    isascii
    +
    islower
    +
    isupper
    +
    istitle
    +
    isspace
    +
    isdecimal
    +
    isdigit
    +
    isnumeric
    +
    isalpha
    +
    isalnum
    +
    isidentifier
    +
    isprintable
    +
    zfill
    +
    format
    +
    format_map
    +
    maketrans
    + +
    +
    +
    +
    +
    + +
    + + class + EcalcFile: + + + +
    + +
     66class EcalcFile:
    + 67    @abstractmethod
    + 68    def is_valid(self) -> bool:
    + 69        pass
    + 70
    + 71    @staticmethod
    + 72    def is_csv(filename: Path) -> bool:
    + 73        return filename.suffix.lower() == CSV_EXTENSION
    + 74
    + 75    @staticmethod
    + 76    def is_yaml(filename: Path) -> bool:
    + 77        try:
    + 78            file_extension = filename.suffix
    + 79            return file_extension.lower() in YAML_EXTENSIONS
    + 80        except AttributeError as e:
    + 81            logger.exception(e)
    + 82            return False
    + 83
    + 84    @staticmethod
    + 85    def is_zip(filename: Path) -> bool:
    + 86        try:
    + 87            file_extension = filename.suffix
    + 88            return file_extension.lower() in ZIP_EXTENSION
    + 89        except AttributeError as e:
    + 90            logger.exception(e)
    + 91            return False
    + 92
    + 93    @staticmethod
    + 94    def get_type(filename: Path) -> EcalcFileType:
    + 95        if EcalcFile.is_csv(filename):
    + 96            return EcalcFileType.CSV
    + 97        elif EcalcFile.is_yaml(filename):
    + 98            return EcalcFileType.YAML
    + 99        elif EcalcFile.is_zip(filename):
    +100            return EcalcFileType.ZIP
    +101
    +102        message = f"Cannot get (valid) file type of {filename}"
    +103        logger.warning(message)
    +104        raise EcalcError(
    +105            message=message,
    +106            title="Invalid file type",
    +107            error_type=EcalcErrorType.CLIENT_ERROR,
    +108        )
    +
    + + + + +
    + +
    +
    @abstractmethod
    + + def + is_valid(self) -> bool: + + + +
    + +
    67    @abstractmethod
    +68    def is_valid(self) -> bool:
    +69        pass
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_csv(filename: pathlib.Path) -> bool: + + + +
    + +
    71    @staticmethod
    +72    def is_csv(filename: Path) -> bool:
    +73        return filename.suffix.lower() == CSV_EXTENSION
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_yaml(filename: pathlib.Path) -> bool: + + + +
    + +
    75    @staticmethod
    +76    def is_yaml(filename: Path) -> bool:
    +77        try:
    +78            file_extension = filename.suffix
    +79            return file_extension.lower() in YAML_EXTENSIONS
    +80        except AttributeError as e:
    +81            logger.exception(e)
    +82            return False
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + is_zip(filename: pathlib.Path) -> bool: + + + +
    + +
    84    @staticmethod
    +85    def is_zip(filename: Path) -> bool:
    +86        try:
    +87            file_extension = filename.suffix
    +88            return file_extension.lower() in ZIP_EXTENSION
    +89        except AttributeError as e:
    +90            logger.exception(e)
    +91            return False
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_type(filename: pathlib.Path) -> libecalc.infrastructure.file_io.EcalcFileType: + + + +
    + +
     93    @staticmethod
    + 94    def get_type(filename: Path) -> EcalcFileType:
    + 95        if EcalcFile.is_csv(filename):
    + 96            return EcalcFileType.CSV
    + 97        elif EcalcFile.is_yaml(filename):
    + 98            return EcalcFileType.YAML
    + 99        elif EcalcFile.is_zip(filename):
    +100            return EcalcFileType.ZIP
    +101
    +102        message = f"Cannot get (valid) file type of {filename}"
    +103        logger.warning(message)
    +104        raise EcalcError(
    +105            message=message,
    +106            title="Invalid file type",
    +107            error_type=EcalcErrorType.CLIENT_ERROR,
    +108        )
    +
    + + + + +
    +
    +
    + +
    + + class + ValidEcalcFile(EcalcFile): + + + +
    + +
    112class ValidEcalcFile(EcalcFile):
    +113    """Class for mimicking FileWithName."""
    +114
    +115    original_filename: Path  # full path, e.g. in archive
    +116    filename: str  # just the (file)name
    +117    file: IO
    +118    file_type: EcalcFileType
    +119
    +120    def is_valid(self) -> bool:
    +121        return True
    +122
    +123    def is_main_yaml_file(self) -> bool:
    +124        bytes_str = self.file.read()
    +125        self.file.seek(0)
    +126        text_obj = bytes_str.decode("UTF-8")
    +127        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + ValidEcalcFile( original_filename: pathlib.Path, filename: str, file: <class 'IO'>, file_type: libecalc.infrastructure.file_io.EcalcFileType) + + +
    + + + + +
    +
    + +
    + + def + is_valid(self) -> bool: + + + +
    + +
    120    def is_valid(self) -> bool:
    +121        return True
    +
    + + + + +
    +
    + +
    + + def + is_main_yaml_file(self) -> bool: + + + +
    + +
    123    def is_main_yaml_file(self) -> bool:
    +124        bytes_str = self.file.read()
    +125        self.file.seek(0)
    +126        text_obj = bytes_str.decode("UTF-8")
    +127        return any(x in text_obj for x in MAIN_PROVEN_FILE)
    +
    + + + + +
    +
    +
    Inherited Members
    +
    + +
    +
    +
    +
    + +
    + + class + InvalidEcalcFile(EcalcFile): + + + +
    + +
    131class InvalidEcalcFile(EcalcFile):
    +132    """Class for mimicking FileWithName."""
    +133
    +134    original_filename: Path  # full path in archive
    +135    filename: str  # just the filename
    +136    error: str
    +137
    +138    def is_valid(self) -> bool:
    +139        return False
    +
    + + +

    Class for mimicking FileWithName.

    +
    + + +
    +
    + + InvalidEcalcFile(original_filename: pathlib.Path, filename: str, error: str) + + +
    + + + + +
    +
    + +
    + + def + is_valid(self) -> bool: + + + +
    + +
    138    def is_valid(self) -> bool:
    +139        return False
    +
    + + + + +
    +
    +
    Inherited Members
    +
    + +
    +
    +
    +
    + +
    + + class + EcalcFiles: + + + +
    + +
    143class EcalcFiles:
    +144    ALLOWED_EXTENSIONS = {"yaml", "csv", "yml", "zip"}
    +145
    +146    @staticmethod
    +147    def allowed_file(filename: str) -> bool:
    +148        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +149
    +150    @staticmethod
    +151    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +152        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +153        yaml file can have !include and a certain set of sections.
    +154
    +155        * Only one main file is allowed
    +156
    +157        if none or more than one main file is detected an exception is raised
    +158        :param files:
    +159        :return:
    +160        """
    +161        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +162        if len(main_files) > 1:
    +163            raise EcalcError(
    +164                "Bad Request",
    +165                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +166                error_type=EcalcErrorType.CLIENT_ERROR,
    +167            )
    +168
    +169        if len(main_files) == 0:
    +170            raise EcalcError(
    +171                "Bad Request",
    +172                "No main files found. There must be one main file",
    +173                error_type=EcalcErrorType.CLIENT_ERROR,
    +174            )
    +175
    +176        return main_files[0]
    +177
    +178    @staticmethod
    +179    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +180        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +181        filter out bad files for further processing of good files only.
    +182
    +183        The current validation implementation is very naĩve, by only checking file extension.
    +184
    +185        :param files:
    +186        :return:
    +187        """
    +188        valid_files: List[ValidEcalcFile] = []
    +189        invalid_files: List[InvalidEcalcFile] = []
    +190        for file in files:
    +191            if EcalcFiles.allowed_file(file.filename):
    +192                if EcalcFile.is_zip(Path(file.filename)):
    +193                    if len(files) > 1:
    +194                        raise EcalcError(
    +195                            title="Invalid file combination",
    +196                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +197                        )
    +198
    +199                    valid_files, invalid_files = unpack_zip(file.file)
    +200                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +201                    valid_files.append(
    +202                        ValidEcalcFile(
    +203                            original_filename=Path(file.filename),
    +204                            filename=file.filename,
    +205                            file=file.file,
    +206                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +207                        )
    +208                    )
    +209                else:
    +210                    invalid_files.append(
    +211                        InvalidEcalcFile(
    +212                            original_filename=Path(file.filename),
    +213                            filename=file.filename,
    +214                            error="Invalid File Extension",
    +215                        )
    +216                    )
    +217            else:
    +218                invalid_files.append(
    +219                    InvalidEcalcFile(
    +220                        original_filename=Path(file.filename),
    +221                        filename=file.filename,
    +222                        error="Invalid File Extension",
    +223                    )
    +224                )
    +225
    +226        return valid_files, invalid_files
    +
    + + + + +
    + +
    +
    @staticmethod
    + + def + allowed_file(filename: str) -> bool: + + + +
    + +
    146    @staticmethod
    +147    def allowed_file(filename: str) -> bool:
    +148        return "." in filename and Path(filename).suffix.split(".")[1] in EcalcFiles.ALLOWED_EXTENSIONS
    +
    + + + + +
    +
    + +
    +
    @staticmethod
    + + def + get_main_file( files: List[libecalc.infrastructure.file_io.ValidEcalcFile]) -> libecalc.infrastructure.file_io.ValidEcalcFile: + + + +
    + +
    150    @staticmethod
    +151    def get_main_file(files: List[ValidEcalcFile]) -> ValidEcalcFile:
    +152        """Get the main yaml file. Detected by checking for a specific format. Only the main
    +153        yaml file can have !include and a certain set of sections.
    +154
    +155        * Only one main file is allowed
    +156
    +157        if none or more than one main file is detected an exception is raised
    +158        :param files:
    +159        :return:
    +160        """
    +161        main_files = [file for file in files if file.is_yaml(file.original_filename) and file.is_main_yaml_file()]
    +162        if len(main_files) > 1:
    +163            raise EcalcError(
    +164                "Bad Request",
    +165                f"Only one main file is supported, the following files were detected as main files: {', '.join([main_file.filename for main_file in main_files])}",
    +166                error_type=EcalcErrorType.CLIENT_ERROR,
    +167            )
    +168
    +169        if len(main_files) == 0:
    +170            raise EcalcError(
    +171                "Bad Request",
    +172                "No main files found. There must be one main file",
    +173                error_type=EcalcErrorType.CLIENT_ERROR,
    +174            )
    +175
    +176        return main_files[0]
    +
    + + +

    Get the main yaml file. Detected by checking for a specific format. Only the main +yaml file can have !include and a certain set of sections.

    + +
      +
    • Only one main file is allowed
    • +
    + +

    if none or more than one main file is detected an exception is raised

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    +
    @staticmethod
    + + def + validate_filetypes( files: List[libecalc.infrastructure.file_io.FileWithName]) -> Tuple[List[libecalc.infrastructure.file_io.ValidEcalcFile], List[libecalc.infrastructure.file_io.InvalidEcalcFile]]: + + + +
    + +
    178    @staticmethod
    +179    def validate_filetypes(files: List[FileWithName]) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +180        """Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to
    +181        filter out bad files for further processing of good files only.
    +182
    +183        The current validation implementation is very naĩve, by only checking file extension.
    +184
    +185        :param files:
    +186        :return:
    +187        """
    +188        valid_files: List[ValidEcalcFile] = []
    +189        invalid_files: List[InvalidEcalcFile] = []
    +190        for file in files:
    +191            if EcalcFiles.allowed_file(file.filename):
    +192                if EcalcFile.is_zip(Path(file.filename)):
    +193                    if len(files) > 1:
    +194                        raise EcalcError(
    +195                            title="Invalid file combination",
    +196                            message="A zip file cannot be combined with other file types. Please provide a zip file alone.",
    +197                        )
    +198
    +199                    valid_files, invalid_files = unpack_zip(file.file)
    +200                elif EcalcFile.is_csv(Path(file.filename)) or EcalcFile.is_yaml(Path(file.filename)):
    +201                    valid_files.append(
    +202                        ValidEcalcFile(
    +203                            original_filename=Path(file.filename),
    +204                            filename=file.filename,
    +205                            file=file.file,
    +206                            file_type=EcalcFile.get_type(filename=Path(file.filename)),
    +207                        )
    +208                    )
    +209                else:
    +210                    invalid_files.append(
    +211                        InvalidEcalcFile(
    +212                            original_filename=Path(file.filename),
    +213                            filename=file.filename,
    +214                            error="Invalid File Extension",
    +215                        )
    +216                    )
    +217            else:
    +218                invalid_files.append(
    +219                    InvalidEcalcFile(
    +220                        original_filename=Path(file.filename),
    +221                        filename=file.filename,
    +222                        error="Invalid File Extension",
    +223                    )
    +224                )
    +225
    +226        return valid_files, invalid_files
    +
    + + +

    Given a list of files (e.g uploaded by a user), given a name, do an initial attempt to +filter out bad files for further processing of good files only.

    + +

    The current validation implementation is very naĩve, by only checking file extension.

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    +
    + +
    + + def + find_longest_common_path(file_path_1: pathlib.Path, file_path_2: pathlib.Path) -> str: + + + +
    + +
    229def find_longest_common_path(file_path_1: Path, file_path_2: Path) -> str:
    +230    """Given 2 paths, find the longest common path, part by part that the 2 paths share; ie
    +231    until which position in the file hierarchy do they diverge?
    +232
    +233    :param file_path_1:
    +234    :param file_path_2:
    +235    :return:
    +236    """
    +237    common_path = ""
    +238    for path_1, path_2 in zip(file_path_1.parts, file_path_2.parts):
    +239        if path_1 == path_2:
    +240            common_path += path_1 + "/"
    +241        else:
    +242            break
    +243
    +244    return common_path
    +
    + + +

    Given 2 paths, find the longest common path, part by part that the 2 paths share; ie +until which position in the file hierarchy do they diverge?

    + +
    Parameters
    + +
      +
    • file_path_1:
    • +
    • file_path_2:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + strip_common_path(common_path: str, path: str) -> str: + + + +
    + +
    247def strip_common_path(common_path: str, path: str) -> str:
    +248    """Remove/strip the given subpath from path
    +249    :param common_path:
    +250    :param path:
    +251    :return:
    +252    """
    +253    return path.replace(common_path, "")
    +
    + + +

    Remove/strip the given subpath from path

    + +
    Parameters
    + +
      +
    • common_path:
    • +
    • path:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + make_relative_path(linked_file: str, main_file: str) -> str: + + + +
    + +
    256def make_relative_path(linked_file: str, main_file: str) -> str:
    +257    """Given a main file and a file to be linked to from that file, only
    +258    include the parts of the path of both files that _differ_.
    +259
    +260    The parts that is different in main_file, will be replaced with "../",
    +261
    +262    :param linked_file:
    +263    :param main_file:
    +264    :return:
    +265    """
    +266    main_file_path = Path(main_file)
    +267    for part in main_file_path.parts[:-1]:
    +268        if part != "" and part != "/":
    +269            linked_file = "../" + linked_file
    +270
    +271    return linked_file
    +
    + + +

    Given a main file and a file to be linked to from that file, only +include the parts of the path of both files that _differ_.

    + +

    The parts that is different in main_file, will be replaced with "../",

    + +
    Parameters
    + +
      +
    • linked_file:
    • +
    • main_file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + find_duplicates(files: List[libecalc.infrastructure.file_io.ValidEcalcFile]) -> List[str]: + + + +
    + +
    274def find_duplicates(files: List[ValidEcalcFile]) -> List[str]:
    +275    """Find files with duplicate names (names = without path).
    +276
    +277    :param files:
    +278    :return:
    +279    """
    +280    count_filenames = Counter([file.filename for file in files])
    +281    duplicates = [filename for filename, count in count_filenames.items() if count > 1]
    +282
    +283    return duplicates
    +
    + + +

    Find files with duplicate names (names = without path).

    + +
    Parameters
    + +
      +
    • files:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + rename_duplicates( valid_files: List[libecalc.infrastructure.file_io.ValidEcalcFile], duplicates: List[str]) -> Dict[pathlib.Path, str]: + + + +
    + +
    286def rename_duplicates(valid_files: List[ValidEcalcFile], duplicates: List[str]) -> Dict[Path, str]:
    +287    """Rename duplicate files. All with same name will be renamed. Those that are not duplicates,
    +288    will also be returned, with the original filename in the mapping.
    +289
    +290    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist
    +291    at the same level.
    +292
    +293    :param valid_files:
    +294    :param duplicates:
    +295    :return:
    +296    """
    +297    renamed_files: Dict[Path, str] = {}
    +298    for file in valid_files:
    +299        if file.filename in duplicates:
    +300            renamed_filename = str(file.original_filename).replace("/", "_")
    +301            if len(renamed_filename) > 100:
    +302                renamed_filename = renamed_filename[-94:] + str(uuid.uuid4().hex.upper()[0:6])
    +303            renamed_files[file.original_filename] = renamed_filename
    +304        else:
    +305            renamed_files[file.original_filename] = file.filename
    +306
    +307    return renamed_files
    +
    + + +

    Rename duplicate files. All with same name will be renamed. Those that are not duplicates, +will also be returned, with the original filename in the mapping.

    + +

    Only resource files (csv) needs to be renamed, because they are flattened out and will then exist +at the same level.

    + +
    Parameters
    + +
      +
    • valid_files:
    • +
    • duplicates:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + make_relative_paths( files: List[libecalc.infrastructure.file_io.ValidEcalcFile], main_yaml: libecalc.infrastructure.file_io.ValidEcalcFile) -> Dict[pathlib.Path, str]: + + + +
    + +
    310def make_relative_paths(files: List[ValidEcalcFile], main_yaml: ValidEcalcFile) -> Dict[Path, str]:
    +311    """For all files in the list, generate the relative paths for all files, relative
    +312    to the provided main file. All files provided, must have the original_filename set, which must
    +313    be the relative path to the root of the model; e.g. the (zip) archive path, or
    +314    if only one level, the filename itself.
    +315
    +316    :param files:
    +317    :param main_yaml:
    +318    :return:
    +319    """
    +320    relative_paths: Dict[Path, str] = {}
    +321    for file in files:
    +322        if file == main_yaml:
    +323            # since all files are relative to this given file, this must be the filename itself, only
    +324            relative_paths[main_yaml.original_filename] = main_yaml.filename
    +325        else:
    +326            common_path = find_longest_common_path(Path(file.original_filename), Path(main_yaml.original_filename))
    +327            stripped_file = strip_common_path(common_path, str(file.original_filename))
    +328            stripped_main = strip_common_path(common_path, str(main_yaml.original_filename))
    +329            relative_path = make_relative_path(stripped_file, stripped_main)
    +330
    +331            relative_paths[file.original_filename] = relative_path
    +332
    +333    return relative_paths
    +
    + + +

    For all files in the list, generate the relative paths for all files, relative +to the provided main file. All files provided, must have the original_filename set, which must +be the relative path to the root of the model; e.g. the (zip) archive path, or +if only one level, the filename itself.

    + +
    Parameters
    + +
      +
    • files:
    • +
    • main_yaml:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + unpack_zip( file: <class 'IO'>) -> Tuple[List[libecalc.infrastructure.file_io.ValidEcalcFile], List[libecalc.infrastructure.file_io.InvalidEcalcFile]]: + + + +
    + +
    336def unpack_zip(file: IO) -> Tuple[List[ValidEcalcFile], List[InvalidEcalcFile]]:
    +337    """Unpack the zip similarility to how single files are handled, by returning a tuple
    +338    of valid and invalid files.
    +339
    +340    :param file:
    +341    :return:
    +342    """
    +343    valid_files: List[ValidEcalcFile] = []
    +344    invalid_files: List[InvalidEcalcFile] = []
    +345    try:
    +346        with zipfile.ZipFile(BytesIO(file.read())) as archive:
    +347            for zip_info in archive.infolist():
    +348                try:
    +349                    file_path = Path(zip_info.filename)
    +350
    +351                    if is_ignored_zip_content(file_path) or zip_info.is_dir():
    +352                        # Just ignore, dont event mention it. Will just confuse users (because those files are normally hidden)
    +353                        continue
    +354                    elif EcalcFile.is_csv(file_path) or EcalcFile.is_yaml(file_path):
    +355                        with archive.open(zip_info) as file:
    +356                            file_like = TemporaryFile()
    +357                            file_like.write(file.read())
    +358                            file_like.seek(0)
    +359                            valid_files.append(
    +360                                ValidEcalcFile(
    +361                                    original_filename=file_path,
    +362                                    filename=file_path.name,
    +363                                    file=file_like,
    +364                                    file_type=EcalcFile.get_type(filename=file_path),
    +365                                )
    +366                            )
    +367                    else:
    +368                        invalid_files.append(
    +369                            InvalidEcalcFile(
    +370                                original_filename=file_path, filename=file_path.name, error="Invalid file extension"
    +371                            )
    +372                        )
    +373                        continue
    +374
    +375                except EcalcError as ee:
    +376                    logger.warning(f"An error occurred while reading file({file_path}) in zip archive")
    +377                    invalid_files.append(
    +378                        InvalidEcalcFile(original_filename=file_path, filename=file_path.name, error=ee.message)
    +379                    )
    +380
    +381        valid_file_paths = [valid_file.original_filename for valid_file in valid_files]
    +382        if len(valid_file_paths) != len(set(valid_file_paths)):
    +383            raise EcalcError(title="Bad zip file", message="Duplicated filepaths in zip archive detected. Please fix.")
    +384
    +385        return valid_files, invalid_files
    +386
    +387    except zipfile.BadZipFile as e:
    +388        raise EcalcError(title="Bad zip file", message="An error occurred while unpacking the zip file") from e
    +
    + + +

    Unpack the zip similarility to how single files are handled, by returning a tuple +of valid and invalid files.

    + +
    Parameters
    + +
      +
    • file:
    • +
    + +
    Returns
    +
    + + +
    +
    + +
    + + def + read_csv(csv_data: Union[str, TextIO, _io.BytesIO]) -> pandas.core.frame.DataFrame: + + + +
    + +
    426def read_csv(csv_data: Union[str, TextIO, BytesIO]) -> pandas.DataFrame:
    +427    """Wrapper of pandas read csv function
    +428
    +429    Settings used:
    +430        float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001
    +431        skipinitialspace=True converts "  10" to 10,
    +432        thousands=" " removes spaces used as thousand separators (normal in excel)
    +433
    +434    Args:
    +435        csv_data:
    +436
    +437    Returns:
    +438
    +439    """
    +440    stream = StringIO(csv_data) if isinstance(csv_data, str) else csv_data
    +441
    +442    return pd.read_csv(stream, comment="#", float_precision="round_trip", skipinitialspace=True, thousands=" ")
    +
    + + +

    Wrapper of pandas read csv function

    + +

    Settings used: + float_precision="round_trip" to avoid reading inaccurate floats, i.e. 0.724 becomes 0.7240000000000001 + skipinitialspace=True converts " 10" to 10, + thousands=" " removes spaces used as thousand separators (normal in excel)

    + +

    Args: + csv_data:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + read_resource_from_string( resource_string: str, validate_headers: bool = True) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    445def read_resource_from_string(resource_string: str, validate_headers: bool = True) -> Resource:
    +446    """Read resource from stream without validation."""
    +447    resource_df = read_csv(resource_string)
    +448
    +449    resource = _dataframe_to_resource(resource_df.replace(np.nan, ""), validate_headers=validate_headers)
    +450    return resource
    +
    + + +

    Read resource from stream without validation.

    +
    + + +
    +
    + +
    + + def + convert_dataframe_to_timeseries_resource( resource_df: pandas.core.frame.DataFrame) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    453def convert_dataframe_to_timeseries_resource(resource_df: pd.DataFrame) -> Resource:
    +454    # TODO: This might give a different result than calculator-cli since we are not yet
    +455    #  filtering on columns that are actually used. I.e. an unused column might have a number where all used columns
    +456    #  have nan. This method would include that row. Although it is unlikely.
    +457    # Drop rows if all values are na (sometimes lines with ,,, are exported from Excel).
    +458
    +459    resource_df = resource_df.dropna(axis=0, how="all")
    +460    # Drop columns if all values are na
    +461    resource_df = resource_df.dropna(axis=1, how="all")
    +462
    +463    return _dataframe_to_resource(resource_df)
    +
    + + + + +
    +
    + +
    + + def + read_timeseries_resource( resource_input: Union[pathlib.Path, _io.BytesIO, str], timeseries_type: libecalc.presentation.yaml.yaml_entities.YamlTimeseriesType) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    466def read_timeseries_resource(
    +467    resource_input: Union[Path, BytesIO, str], timeseries_type: YamlTimeseriesType
    +468) -> Resource:
    +469    """Read timeseries resource from filepath with timeseries specific manipulation/validation.
    +470
    +471    - Timeseries is allowed to have nans
    +472    """
    +473    if not isinstance(resource_input, (BytesIO, str, Path)):
    +474        raise ValueError(f"Invalid resource_input type '{type(resource_input)}'")
    +475
    +476    if timeseries_type in (YamlTimeseriesType.DEFAULT, YamlTimeseriesType.MISCELLANEOUS):
    +477        if isinstance(resource_input, Path):
    +478            with open(resource_input) as resource_file:
    +479                resource_df = read_csv(resource_file)
    +480        else:
    +481            resource_df = read_csv(resource_input)
    +482    else:
    +483        raise ValueError(f"Invalid timeseries type '{timeseries_type}' for resource '{resource_input}'")
    +484
    +485    return convert_dataframe_to_timeseries_resource(resource_df=resource_df)
    +
    + + +

    Read timeseries resource from filepath with timeseries specific manipulation/validation.

    + +
      +
    • Timeseries is allowed to have nans
    • +
    +
    + + +
    +
    + +
    + + def + read_facility_resource( resource_input: Union[pathlib.Path, _io.BytesIO, str]) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    488def read_facility_resource(resource_input: Union[Path, BytesIO, str]) -> Resource:
    +489    """Read facility file from filepath with facility file specific validation.
    +490
    +491    - Facility files are not allowed to have nans
    +492    """
    +493    if isinstance(resource_input, Path):
    +494        with open(resource_input) as resource_file:
    +495            resource_df = read_csv(resource_file)
    +496    elif isinstance(resource_input, (BytesIO, str)):
    +497        resource_df = read_csv(resource_input)
    +498    else:
    +499        raise ValueError("")
    +500    resource = _dataframe_to_resource(resource_df)
    +501    _validate_not_nan(resource.data)
    +502    return resource
    +
    + + +

    Read facility file from filepath with facility file specific validation.

    + +
      +
    • Facility files are not allowed to have nans
    • +
    +
    + + +
    +
    + +
    + + def + read_resource_from_filepath( resource_path: pathlib.Path) -> libecalc.presentation.yaml.yaml_entities.Resource: + + + +
    + +
    505def read_resource_from_filepath(resource_path: Path) -> Resource:
    +506    """Read resource from filepath without validation, should only be used as a util for tests/fixtures."""
    +507    if EcalcFile.is_csv(resource_path):
    +508        with open(resource_path) as resource_file:
    +509            resource_df = read_csv(resource_file)
    +510            return _dataframe_to_resource(resource_df)
    +511    else:
    +512        raise ValueError(f"Invalid file extension: {resource_path}")
    +
    + + +

    Read resource from filepath without validation, should only be used as a util for tests/fixtures.

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/infrastructure/file_utils.html b/docs/about/references/api/libecalc/infrastructure/file_utils.html new file mode 100644 index 0000000000..d489b7fd74 --- /dev/null +++ b/docs/about/references/api/libecalc/infrastructure/file_utils.html @@ -0,0 +1,773 @@ + + + + + + + libecalc.infrastructure.file_utils API documentation + + + + + + + + + +
    +
    +

    +libecalc.infrastructure.file_utils

    + + + + + + +
      1import enum
    +  2import sys
    +  3from datetime import datetime
    +  4from typing import Any, Callable, Optional, Union
    +  5
    +  6import numpy as np
    +  7import pandas as pd
    +  8from orjson import orjson
    +  9
    + 10from libecalc.common.datetime.utils import DateTimeFormats
    + 11from libecalc.common.logger import logger
    + 12from libecalc.dto.result import ComponentResult, EcalcModelResult
    + 13from libecalc.presentation.simple_result import SimpleResultData
    + 14
    + 15
    + 16class OutputFormat(enum.Enum):
    + 17    """Supported output file formats from eCalc"""
    + 18
    + 19    CSV = "csv"
    + 20    JSON = "json"
    + 21
    + 22    def __str__(self):
    + 23        """Dump enum to string"""
    + 24        return self.value
    + 25
    + 26
    + 27def dataframe_to_csv(
    + 28    df: pd.DataFrame,
    + 29    separator: str = ",",
    + 30    show_index: bool = True,
    + 31    float_formatter: Optional[Union[Callable, str]] = "%20.5f",
    + 32    date_format: Optional[str] = None,
    + 33) -> str:
    + 34    """Dump pandas dataframe to csv file
    + 35
    + 36    Wraps pandas to_csv functionality, for more options see pandas docs
    + 37
    + 38    Args:
    + 39        df: Dataframe to dump
    + 40        separator: value separator in out, defaults to ',' for csv
    + 41        show_index: if true, will include index in dump
    + 42        float_formatter:
    + 43        date_format:
    + 44
    + 45    Returns:
    + 46
    + 47    """
    + 48    return df.to_csv(
    + 49        float_format=float_formatter,
    + 50        index=show_index,
    + 51        index_label="timesteps",
    + 52        encoding="utf-8",
    + 53        sep=separator,
    + 54        date_format=date_format,
    + 55    )
    + 56
    + 57
    + 58def to_json(result: Union[ComponentResult, EcalcModelResult], simple_output: bool, date_format_option: int) -> str:
    + 59    """Dump result classes to json file
    + 60
    + 61    Args:
    + 62        result: eCalc result data class
    + 63        simple_output: If true, will provide a simplified output format
    + 64        date_format_option:
    + 65
    + 66    Returns:
    + 67        String dump of json output
    + 68
    + 69    """
    + 70    data_to_dump = SimpleResultData.from_dto(result) if simple_output else result
    + 71    data = data_to_dump.model_dump(exclude_none=True)
    + 72    date_format = DateTimeFormats.get_format(date_format_option)
    + 73
    + 74    def default_serializer(x: Any):
    + 75        if isinstance(x, datetime):
    + 76            return x.strftime(date_format)
    + 77        if isinstance(x, np.float64):
    + 78            return float(x)
    + 79
    + 80        raise ValueError(f"Unable to serialize '{type(x)}'")
    + 81
    + 82    # Using orjson to both allow custom date format and convert nan to null.
    + 83    # NaN to null is not supported by json module.
    + 84    # Custom date format is not supported by pydantic -> https://github.com/pydantic/pydantic/issues/7143
    + 85    return orjson.dumps(
    + 86        data,
    + 87        default=default_serializer,
    + 88        option=orjson.OPT_PASSTHROUGH_DATETIME | orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS,
    + 89    ).decode()
    + 90
    + 91
    + 92def get_result_output(
    + 93    results: EcalcModelResult,
    + 94    output_format: OutputFormat,
    + 95    simple_output: bool,
    + 96    date_format_option: int,
    + 97) -> str:
    + 98    """Result output controller
    + 99
    +100    Output eCalc results in desired format and
    +101
    +102    Args:
    +103        results:
    +104        output_format:
    +105        simple_output: If true, will provide a simplified output format. Only supported for json format
    +106        date_format_option:
    +107
    +108    Returns:
    +109
    +110    """
    +111    if output_format == OutputFormat.JSON:
    +112        return to_json(results, simple_output=simple_output, date_format_option=date_format_option)
    +113    elif output_format == OutputFormat.CSV:
    +114        df = pd.DataFrame(index=results.timesteps)
    +115        for component in results.components:
    +116            component_df = component.to_dataframe(
    +117                prefix=component.name,
    +118            )
    +119            try:
    +120                df = df.join(component_df)
    +121            except ValueError:
    +122                logger.warning(
    +123                    f"Duplicate component names in result detected. Component name '{component.name}', "
    +124                    f"component type '{component.componentType}'."
    +125                )
    +126                df = pd.concat([df, component_df], axis=1)
    +127        return dataframe_to_csv(df.fillna("nan"), date_format=DateTimeFormats.get_format(date_format_option))
    +128    else:
    +129        raise ValueError(
    +130            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +131        )
    +132
    +133
    +134def get_component_output(
    +135    results: EcalcModelResult,
    +136    component_name: str,
    +137    output_format: OutputFormat,
    +138    simple_output: bool,
    +139    date_format_option: int,
    +140) -> str:
    +141    """Get eCalc output for a single component by name
    +142
    +143    Args:
    +144        results: Complete from eCalc model
    +145        component_name: Name of component to output results from
    +146        output_format: Format of output file, CSV and JSON is currently supported
    +147        simple_output: If true, will provide a simplified output format. Only supported for json format
    +148        date_format_option:
    +149
    +150    Returns:
    +151
    +152    """
    +153    components = [component for component in results.components if component.name == component_name]
    +154
    +155    if len(components) == 0:
    +156        msg = f"Unable to find component with name '{component_name}'"
    +157        logger.error(msg)
    +158        raise ValueError(msg)
    +159    elif len(components) == 1:
    +160        component = components[0]
    +161    else:
    +162        print("Several components match this name\n")
    +163        format_str = "{:<5} {:<18} {:<10}"
    +164        print(format_str.format("index", "type", "name"))
    +165        for index, component in enumerate(components):
    +166            print(format_str.format(index, component.componentType.value, component.name))
    +167        print()
    +168        selected_component_index = input("Enter the index of the component you want to select (q to quit): ")
    +169        if selected_component_index == "q":
    +170            sys.exit(0)
    +171
    +172        component = components[int(selected_component_index)]
    +173
    +174    if output_format == OutputFormat.JSON:
    +175        return to_json(component, simple_output=simple_output, date_format_option=date_format_option)
    +176    elif output_format == OutputFormat.CSV:
    +177        df = component.to_dataframe()
    +178        return dataframe_to_csv(df, date_format=DateTimeFormats.get_format(date_format_option))
    +179    else:
    +180        raise ValueError(
    +181            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +182        )
    +
    + + +
    +
    + +
    + + class + OutputFormat(enum.Enum): + + + +
    + +
    17class OutputFormat(enum.Enum):
    +18    """Supported output file formats from eCalc"""
    +19
    +20    CSV = "csv"
    +21    JSON = "json"
    +22
    +23    def __str__(self):
    +24        """Dump enum to string"""
    +25        return self.value
    +
    + + +

    Supported output file formats from eCalc

    +
    + + +
    +
    + CSV = +<OutputFormat.CSV: 'csv'> + + +
    + + + + +
    +
    +
    + JSON = +<OutputFormat.JSON: 'json'> + + +
    + + + + +
    +
    +
    Inherited Members
    +
    +
    enum.Enum
    +
    name
    +
    value
    + +
    +
    +
    +
    +
    + +
    + + def + dataframe_to_csv( df: pandas.core.frame.DataFrame, separator: str = ',', show_index: bool = True, float_formatter: Union[Callable, str, NoneType] = '%20.5f', date_format: Union[str, NoneType] = None) -> str: + + + +
    + +
    28def dataframe_to_csv(
    +29    df: pd.DataFrame,
    +30    separator: str = ",",
    +31    show_index: bool = True,
    +32    float_formatter: Optional[Union[Callable, str]] = "%20.5f",
    +33    date_format: Optional[str] = None,
    +34) -> str:
    +35    """Dump pandas dataframe to csv file
    +36
    +37    Wraps pandas to_csv functionality, for more options see pandas docs
    +38
    +39    Args:
    +40        df: Dataframe to dump
    +41        separator: value separator in out, defaults to ',' for csv
    +42        show_index: if true, will include index in dump
    +43        float_formatter:
    +44        date_format:
    +45
    +46    Returns:
    +47
    +48    """
    +49    return df.to_csv(
    +50        float_format=float_formatter,
    +51        index=show_index,
    +52        index_label="timesteps",
    +53        encoding="utf-8",
    +54        sep=separator,
    +55        date_format=date_format,
    +56    )
    +
    + + +

    Dump pandas dataframe to csv file

    + +

    Wraps pandas to_csv functionality, for more options see pandas docs

    + +

    Args: + df: Dataframe to dump + separator: value separator in out, defaults to ',' for csv + show_index: if true, will include index in dump + float_formatter: + date_format:

    + +

    Returns:

    +
    + + +
    +
    + + + +
    59def to_json(result: Union[ComponentResult, EcalcModelResult], simple_output: bool, date_format_option: int) -> str:
    +60    """Dump result classes to json file
    +61
    +62    Args:
    +63        result: eCalc result data class
    +64        simple_output: If true, will provide a simplified output format
    +65        date_format_option:
    +66
    +67    Returns:
    +68        String dump of json output
    +69
    +70    """
    +71    data_to_dump = SimpleResultData.from_dto(result) if simple_output else result
    +72    data = data_to_dump.model_dump(exclude_none=True)
    +73    date_format = DateTimeFormats.get_format(date_format_option)
    +74
    +75    def default_serializer(x: Any):
    +76        if isinstance(x, datetime):
    +77            return x.strftime(date_format)
    +78        if isinstance(x, np.float64):
    +79            return float(x)
    +80
    +81        raise ValueError(f"Unable to serialize '{type(x)}'")
    +82
    +83    # Using orjson to both allow custom date format and convert nan to null.
    +84    # NaN to null is not supported by json module.
    +85    # Custom date format is not supported by pydantic -> https://github.com/pydantic/pydantic/issues/7143
    +86    return orjson.dumps(
    +87        data,
    +88        default=default_serializer,
    +89        option=orjson.OPT_PASSTHROUGH_DATETIME | orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS,
    +90    ).decode()
    +
    + + +

    Dump result classes to json file

    + +

    Args: + result: eCalc result data class + simple_output: If true, will provide a simplified output format + date_format_option:

    + +

    Returns: + String dump of json output

    +
    + + +
    +
    + +
    + + def + get_result_output( results: libecalc.dto.result.results.EcalcModelResult, output_format: libecalc.infrastructure.file_utils.OutputFormat, simple_output: bool, date_format_option: int) -> str: + + + +
    + +
     93def get_result_output(
    + 94    results: EcalcModelResult,
    + 95    output_format: OutputFormat,
    + 96    simple_output: bool,
    + 97    date_format_option: int,
    + 98) -> str:
    + 99    """Result output controller
    +100
    +101    Output eCalc results in desired format and
    +102
    +103    Args:
    +104        results:
    +105        output_format:
    +106        simple_output: If true, will provide a simplified output format. Only supported for json format
    +107        date_format_option:
    +108
    +109    Returns:
    +110
    +111    """
    +112    if output_format == OutputFormat.JSON:
    +113        return to_json(results, simple_output=simple_output, date_format_option=date_format_option)
    +114    elif output_format == OutputFormat.CSV:
    +115        df = pd.DataFrame(index=results.timesteps)
    +116        for component in results.components:
    +117            component_df = component.to_dataframe(
    +118                prefix=component.name,
    +119            )
    +120            try:
    +121                df = df.join(component_df)
    +122            except ValueError:
    +123                logger.warning(
    +124                    f"Duplicate component names in result detected. Component name '{component.name}', "
    +125                    f"component type '{component.componentType}'."
    +126                )
    +127                df = pd.concat([df, component_df], axis=1)
    +128        return dataframe_to_csv(df.fillna("nan"), date_format=DateTimeFormats.get_format(date_format_option))
    +129    else:
    +130        raise ValueError(
    +131            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +132        )
    +
    + + +

    Result output controller

    + +

    Output eCalc results in desired format and

    + +

    Args: + results: + output_format: + simple_output: If true, will provide a simplified output format. Only supported for json format + date_format_option:

    + +

    Returns:

    +
    + + +
    +
    + +
    + + def + get_component_output( results: libecalc.dto.result.results.EcalcModelResult, component_name: str, output_format: libecalc.infrastructure.file_utils.OutputFormat, simple_output: bool, date_format_option: int) -> str: + + + +
    + +
    135def get_component_output(
    +136    results: EcalcModelResult,
    +137    component_name: str,
    +138    output_format: OutputFormat,
    +139    simple_output: bool,
    +140    date_format_option: int,
    +141) -> str:
    +142    """Get eCalc output for a single component by name
    +143
    +144    Args:
    +145        results: Complete from eCalc model
    +146        component_name: Name of component to output results from
    +147        output_format: Format of output file, CSV and JSON is currently supported
    +148        simple_output: If true, will provide a simplified output format. Only supported for json format
    +149        date_format_option:
    +150
    +151    Returns:
    +152
    +153    """
    +154    components = [component for component in results.components if component.name == component_name]
    +155
    +156    if len(components) == 0:
    +157        msg = f"Unable to find component with name '{component_name}'"
    +158        logger.error(msg)
    +159        raise ValueError(msg)
    +160    elif len(components) == 1:
    +161        component = components[0]
    +162    else:
    +163        print("Several components match this name\n")
    +164        format_str = "{:<5} {:<18} {:<10}"
    +165        print(format_str.format("index", "type", "name"))
    +166        for index, component in enumerate(components):
    +167            print(format_str.format(index, component.componentType.value, component.name))
    +168        print()
    +169        selected_component_index = input("Enter the index of the component you want to select (q to quit): ")
    +170        if selected_component_index == "q":
    +171            sys.exit(0)
    +172
    +173        component = components[int(selected_component_index)]
    +174
    +175    if output_format == OutputFormat.JSON:
    +176        return to_json(component, simple_output=simple_output, date_format_option=date_format_option)
    +177    elif output_format == OutputFormat.CSV:
    +178        df = component.to_dataframe()
    +179        return dataframe_to_csv(df, date_format=DateTimeFormats.get_format(date_format_option))
    +180    else:
    +181        raise ValueError(
    +182            f"Invalid output format. Expected {OutputFormat.CSV} or {OutputFormat.JSON}, got '{output_format}'"
    +183        )
    +
    + + +

    Get eCalc output for a single component by name

    + +

    Args: + results: Complete from eCalc model + component_name: Name of component to output results from + output_format: Format of output file, CSV and JSON is currently supported + simple_output: If true, will provide a simplified output format. Only supported for json format + date_format_option:

    + +

    Returns:

    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/api/libecalc/version.html b/docs/about/references/api/libecalc/version.html new file mode 100644 index 0000000000..6a5e5e0c74 --- /dev/null +++ b/docs/about/references/api/libecalc/version.html @@ -0,0 +1,285 @@ + + + + + + + libecalc.version API documentation + + + + + + + + + +
    +
    +

    +libecalc.version

    + + + + + + +
     1from libecalc.common.version import Version
    + 2
    + 3# DO NOT EDIT - replaced in CI with release please
    + 4__version__ = "8.11.0"  # x-release-please-version
    + 5# END DO NOT EDIT
    + 6
    + 7
    + 8def current_version() -> Version:
    + 9    """Get the current version of eCalc. This is set and
    +10    built in the CICD pipeline.
    +11    :return:
    +12    """
    +13    return Version.from_string(__version__)
    +
    + + +
    +
    + +
    + + def + current_version() -> libecalc.common.version.Version: + + + +
    + +
     9def current_version() -> Version:
    +10    """Get the current version of eCalc. This is set and
    +11    built in the CICD pipeline.
    +12    :return:
    +13    """
    +14    return Version.from_string(__version__)
    +
    + + +

    Get the current version of eCalc. This is set and +built in the CICD pipeline.

    + +
    Returns
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/docs/about/references/cli_reference/index.html b/docs/about/references/cli_reference/index.html new file mode 100644 index 0000000000..ea17590ebd --- /dev/null +++ b/docs/about/references/cli_reference/index.html @@ -0,0 +1,106 @@ + + + + + +ecalc | eCalc™ Docs + + + + +

    ecalc

    +

    Args: +log_level: Log level of the CLI logger, defaults to INFO +log_folder: Path to location of log files +version: Option to show libecalc version.

    +

    Returns:

    +

    Usage:

    +
    $ ecalc [OPTIONS] COMMAND [ARGS]...
    +

    Options:

    +
      +
    • --log [ERROR|WARNING|INFO|DEBUG]: Set the loglevel. [default: INFO]
    • +
    • --log-folder PATH: Store log files in a folder
    • +
    • --version: Show current eCalc™ version.
    • +
    • --install-completion [bash|zsh|fish|powershell|pwsh]: Install completion for the specified shell.
    • +
    • --show-completion [bash|zsh|fish|powershell|pwsh]: Show completion for the specified shell, to copy it or customize the installation.
    • +
    • --help: Show this message and exit.
    • +
    +

    Commands:

    +
      +
    • run: CLI command to run a ecalc model.
    • +
    • selftest: Test that eCalc has been successfully...
    • +
    • show: Command to show information in the model...
    • +
    +

    ecalc run

    +

    CLI command to run a ecalc model.

    +

    Usage:

    +
    $ ecalc run [OPTIONS] MODEL_FILE
    +

    Arguments:

    +
      +
    • MODEL_FILE: The Model YAML-file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]
    • +
    +

    Options:

    +
      +
    • -f, --output-frequency, --outputfrequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]
    • +
    • -c, --csv: Toggle output of csv data. [default: True]
    • +
    • --json: Toggle output of json output.
    • +
    • -o, --output-folder, --outputfolder PATH: Outputfolder. Defaults to output/ relative to the yml setup file
    • +
    • -n, --name-prefix, --nameprefix TEXT: Name prefix for output data. Defaults to name of setup file.
    • +
    • --ltp-export: In addition to standard output, a specific Long Term Prognosis (LTP) file will be provided for simple export of LTP relevant data (Tabular Separated Values).
    • +
    • --stp-export: In addition to standard output, a specific Short Term Prognosis (STP) file will be provided for simple export of STP relevant data (Tabular Separated Values).
    • +
    • --flow-diagram: Output the input model formatted to be displayed in a custom flow diagram format in JSON
    • +
    • --detailed-output, --detailedoutput: Output detailed output. When False you will get basic results such as energy usage, power, time vector.
    • +
    • --date-format-option [0|1|2]: Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) [default: 0]
    • +
    • --help: Show this message and exit.
    • +
    +

    ecalc selftest

    +

    Test that eCalc has been successfully installed

    +

    Usage:

    +
    $ ecalc selftest [OPTIONS]
    +

    Options:

    +
      +
    • --help: Show this message and exit.
    • +
    +

    ecalc show

    +

    Command to show information in the model or results.

    +

    Usage:

    +
    $ ecalc show [OPTIONS] COMMAND [ARGS]...
    +

    Options:

    +
      +
    • --help: Show this message and exit.
    • +
    +

    Commands:

    +
      +
    • results: Show results.
    • +
    • yaml: Show yaml model.
    • +
    +

    ecalc show results

    +

    Show results. You need to run eCalc™ before this will be available.

    +

    Usage:

    +
    $ ecalc show results [OPTIONS]
    +

    Options:

    +
      +
    • -n, --name TEXT: Filter the results to only show the component with this name
    • +
    • --output-format [csv|json]: Show the data in this format. [default: json]
    • +
    • --file PATH: Write the data to a file with the specified name.
    • +
    • --output-folder PATH: Output folder. Defaults to current working directory
    • +
    • --detailed-output: Output detailed output. When False you will get basic energy usage and emissions results
    • +
    • --date-format-option [0|1|2]: Date format option. 0: "YYYY-MM-DD HH:MM:SS" (Accepted variant of ISO8601), 1: "YYYYMMDD HH:MM:SS" (ISO8601), 2: "DD.MM.YYYY HH:MM:SS". Default 0 (ISO 8601) [default: 0]
    • +
    • -f, --output-frequency [NONE|YEAR|MONTH|DAY]: Frequency of output. Options are DAY, MONTH, YEAR. If not specified, it will give time steps equal to the union of all input given with INFLUENCE_TIME_VECTOR set to True. Down-sampling the result may lead to loss of data, and rates such as MW may not add up to cumulative values [default: NONE]
    • +
    • --help: Show this message and exit.
    • +
    +

    ecalc show yaml

    +

    Show yaml model. This will show the yaml after processing !include.

    +

    Usage:

    +
    $ ecalc show yaml [OPTIONS] MODEL_FILE
    +

    Arguments:

    +
      +
    • MODEL_FILE: YAML file specifying time series inputs, facility inputs and the relationship between energy consumers. [required]
    • +
    +

    Options:

    +
      +
    • --file PATH: Write the data to a file with the specified name.
    • +
    • --help: Show this message and exit.
    • +
    + + \ No newline at end of file diff --git a/docs/about/references/index.html b/docs/about/references/index.html new file mode 100644 index 0000000000..e6f03626af --- /dev/null +++ b/docs/about/references/index.html @@ -0,0 +1,13 @@ + + + + + +Reference documentation | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/about/references/keywords/ADJUSTMENT/index.html b/docs/about/references/keywords/ADJUSTMENT/index.html new file mode 100644 index 0000000000..1e402c616a --- /dev/null +++ b/docs/about/references/keywords/ADJUSTMENT/index.html @@ -0,0 +1,35 @@ + + + + + +ADJUSTMENT | eCalc™ Docs + + + + +

    ADJUSTMENT

    +

    eCalc Model +/ FACILITY_INPUTS +/ ADJUSTMENT

    +
    RequiredChild ofChildren/Options
    NoFACILITY_INPUTSCONSTANT
    FACTOR
    +

    Description

    +

    For various reasons (degenerated equipment, liquid pumps, etc.), the predicted energy usage from +the facility input does not always match the historic usage. To account for this, adjustments +may be added to the facility input. Currently, linear adjustment to the energy usage is supported.

    +
    warning

    Even though The ADJUSTMENT factor and constant can be added to any +FACILITY_INPUTS, it is only +implemented and used for a small subset of equipment, namely: SAMPLED COMPRESSOR MODEL, TABULATED ENERGY USAGE MODEL, +GENERATORSETS +, PUMP MODEL (Single Speed, Variable Speed and System) and compressors in a compressor system. +If you are not sure, give it a test first.

    +

    Format

    +
    ADJUSTMENT:
    <ADJUSTMENT 1>: <VALUE>
    <ADJUSTMENT 2>: <VALUE>
    +

    Example

    +

    Say you have input that is off by a constant and percentage. You could fix this in the following way:

    +
    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    CONSTANT: 2
    FACTOR: 1.05
    +

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    +Eadjusted=2+1.05×EoriginalE_\mathrm{adjusted} = 2 + 1.05 \times E_\mathrm{original} +

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CATEGORY/index.html b/docs/about/references/keywords/CATEGORY/index.html new file mode 100644 index 0000000000..ccdda7f4c9 --- /dev/null +++ b/docs/about/references/keywords/CATEGORY/index.html @@ -0,0 +1,37 @@ + + + + + +CATEGORY | eCalc™ Docs + + + + +

    CATEGORY

    +

    eCalc Model +/ INSTALLATIONS +/ [...] / CATEGORY

    +
    RequiredChild ofChildren/Options
    YesCONSUMERS
    FUELCONSUMERS
    INSTALLATIONS
    FUEL_TYPES
    None
    +

    Description

    +

    The CATEGORY keyword is used to specify which category certain data types belong to - these data types are:

    + +

    Only a limited pre-defined set of categories is valid input to the +CATEGORY keyword. The complete list of possible categories is given below. +Please note that the input is case-sensitive. The names should be in upper-case and the spelling/dash must match the names in the list exactly.

    +

    Allowed categories for CONSUMERS and FUELCONSUMERS:

    +
    CategoryDescription/Examples
    BASE-LOADConsumers that do not vary with production
    COLD-VENTING-FUGITIVEDirect emissions through cold venting and fugitive emissions
    COMPRESSORGas injection compressors, export compressors, etc.
    FIXED-PRODUCTION-LOADConsumer that is fixed/constant when production stream is on. Note that this is simply the name of the category. eCalc™ does not imply any condition (that production must be > 0) when this keyword is applied. For this to occur, CONDITION must be used. See example below.
    FLAREFlaring related energy usage/emissions
    MISCELLANEOUSAnything that don't apply other categories. Compressor and Genset (New in v7.2)
    PUMPSingle speed pumps, variable speed pumps.
    GAS-DRIVEN-COMPRESSORCompressor only. New in v7.1
    TURBINE-GENERATORGenset only. New in v7.1
    POWER-FROM-SHOREGenset only. Dummy Genset (should have e.g. 0 fuel). New in v7.1
    OFFSHORE-WINDDirect load consumer only. Negative load. Indicate external power. New in v7.1
    LOADINGDirect load consumer only. Indicate oil volume to be loaded. New in v8.0
    STORAGEDirect load consumer only. Indicate oil volume to be stored. New in v8.0
    STEAM-TURBINE-GENERATORDirect load consumer only. Negative load. Indicate power generated steam turbine. New in v8.1
    BOILERGenset only. Indicate steam generated. New in v8.2
    HEATERGenset only. Indicate hot medium generated. New in v8.2
    +

    Allowed categories for INSTALLATIONS:

    +
    CategoryDescription/Examples
    FIXEDFixed installation
    MOBILEMobile/satellite installation.
    +

    Allowed categories for FUEL_TYPES:

    +
    CategoryDescription/Examples
    FUEL-GASNormally associated with a fixed installation
    DIESELNormally associated with a mobile installation
    +

    Format

    +
    CATEGORY: <CATEGORY>
    +

    Example

    +
    - NAME: name_of_my_electrical_consumer
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    LOAD: 5
    CONDITION: SIM;OIL_PROD > 0
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_MODEL/index.html b/docs/about/references/keywords/COMPRESSOR_MODEL/index.html new file mode 100644 index 0000000000..fc191f63e5 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_MODEL/index.html @@ -0,0 +1,22 @@ + + + + + +COMPRESSOR_MODEL | eCalc™ Docs + + + + +

    COMPRESSOR_MODEL

    +

    ENERGY_USAGE_MODEL / COMPRESSOR_MODEL

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone
    +

    Description

    +

    This keyword links the predefined COMPRESSOR MODEL to the COMPRESSOR ENERGY USAGE MODEL.

    +

    Note that this can only be used when a COMPRESSOR SYSTEM is used. It is possible to use the same compressor model twice in the same system - this is a common feature when there are identical compressor trains in parallel.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model>
    ...
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html b/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html new file mode 100644 index 0000000000..e74965c5a4 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_SYSTEM/index.html @@ -0,0 +1,31 @@ + + + + + +COMPRESSORS | eCalc™ Docs + + + + +

    COMPRESSORS

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +COMPRESSOR_SYSTEM

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone
    +

    Description

    +

    Used to define a list of compressors in a compressor system model (

    +

    ENERGY_USAGE_MODEL of type COMPRESSOR_SYSTEM). +Each compressor is defined with a name and a reference to a compressor energy function defined in either +FACILITY_INPUTS or MODELS

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: <name of compressor>
    COMPRESSOR_MODEL: <reference to compressor model in facility inputs>
    TOTAL_SYSTEM_RATE: <optional total system rate [Sm3/day]>
    OPERATIONAL_SETTINGS: <operational settings>
    +

    See OPERATIONAL_SETTINGS for details.

    +

    Example 1

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    +

    Example 2 (Detailed)

    +
    note

    When adding a “DATE” the next line is indented.

    +
    - NAME: gassys27
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    2020-04-01:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: gassys27a
    COMPRESSOR_MODEL: gas3da
    - NAME: gassys27b
    COMPRESSOR_MODEL: gas3db
    TOTAL_SYSTEM_RATE: SIM8;GAS_PROD # [Sm3/day]
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURE: 155
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURE: 155
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html b/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html new file mode 100644 index 0000000000..20a66047b1 --- /dev/null +++ b/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL/index.html @@ -0,0 +1,26 @@ + + + + + +COMPRESSOR_TRAIN_MODEL | eCalc™ Docs + + + + +

    COMPRESSOR_TRAIN_MODEL

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +COMPRESSOR_TRAIN_MODEL

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODELNone
    +

    Description

    +

    Reference to an compressor train model defined in FACILITY_INPUTS or +MODELS used for ENERGY_USAGE_MODEL +TYPE VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    COMPRESSOR_TRAIN_MODEL: <reference to compressor train model in facility inputs or models of compressor type>
    +

    Example

    +
    MODELS:
    - NAME: advanced_compressor_train
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    -
    -

    ...

    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    COMPRESSOR_TRAIN_MODEL: advanced_compressor_train
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONDITION/index.html b/docs/about/references/keywords/CONDITION/index.html new file mode 100644 index 0000000000..3618bbcf53 --- /dev/null +++ b/docs/about/references/keywords/CONDITION/index.html @@ -0,0 +1,32 @@ + + + + + +CONDITION | eCalc™ Docs + + + + +

    CONDITION

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +CONDITION

    +
    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone
    +

    Description

    +

    All energy usage models may have a keyword CONDITION +which specifies conditions for the consumer to be used. At points in the time series where the condition +evaluates to 0 (or False), the energy consumption will be 0. +This is practical for some otherwise +constant consumers. +For example, if you use the category FIXED-PRODUCTION-LOAD and you want it to depend on whether or not there is production, the CONDITION keyword can be specified.

    +

    CONDITION supports the functionality described in Expressions, but is required to evaluate to True/False or 1/0.

    +

    Format

    +
    CONDITION: <CONDITION>
    +

    Example

    +

    A simple example is shown below where the load is only present whenever the oil production is positive:

    +
    - NAME: production_load
    CATEGORY: FIXED-PRODUCTION-LOAD
    ENERGY_USAGE_MODEL:
    LOAD: 5
    CONDITION: SIM1;OIL_PROD:PLA > 0
    +

    This condition is an expression. See Expressions.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONDITIONS/index.html b/docs/about/references/keywords/CONDITIONS/index.html new file mode 100644 index 0000000000..eb24657fbe --- /dev/null +++ b/docs/about/references/keywords/CONDITIONS/index.html @@ -0,0 +1,22 @@ + + + + + +CONDITIONS | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSTANT/index.html b/docs/about/references/keywords/CONSTANT/index.html new file mode 100644 index 0000000000..43f452b458 --- /dev/null +++ b/docs/about/references/keywords/CONSTANT/index.html @@ -0,0 +1,28 @@ + + + + + +CONSTANT | eCalc™ Docs + + + + +

    CONSTANT

    +

    FACILITY_INPUTS / +ADJUSTMENT / +CONSTANT

    +
    RequiredChild ofChildren/Options
    NoADJUSTMENTNone
    +

    Description

    +

    The keyword CONSTANT can be used for adjustment of input data with a constant.

    +

    Format

    +
    CONSTANT: <VALUE>
    +

    Example

    +

    Say you have input that that is off by -10 [some units]. +You could fix this like:

    +
    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    CONSTANT: -10
    +

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    +Eadjusted=Eoriginal10E_\mathrm{adjusted} = E_\mathrm{original} - 10 +

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSUMERS/index.html b/docs/about/references/keywords/CONSUMERS/index.html new file mode 100644 index 0000000000..5daa4444fe --- /dev/null +++ b/docs/about/references/keywords/CONSUMERS/index.html @@ -0,0 +1,25 @@ + + + + + +CONSUMERS | eCalc™ Docs + + + + +

    CONSUMERS

    +

    INSTALLATIONS / +GENERATORSETS / +CONSUMERS

    +
    RequiredChild ofChildren/Options
    YesGENERATORSETSCATEGORY
    NAME
    ENERGY_USAGE_MODEL
    +

    Description

    +

    Consumers getting electrical power from the generator set. The attributes NAME, +CATEGORY and ENERGY_USAGE_MODEL +are all required

    +

    Format

    +
    CONSUMERS:
    - NAME: <consumer name>
    CATEGORY: <category>
    ENERGY_USAGE_MODEL: <energy usage model>
    +

    Example

    +
    CONSUMERS:
    - NAME: SomeElectricalConsumer
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    - NAME: SomeOtherElectricalConsumer
    CATEGORY: BASE-LOAD
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    ...
    - NAME: ElectricalConsumerN
    CATEGORY: MISCELLANEOUS
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html b/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html new file mode 100644 index 0000000000..181ad8faa2 --- /dev/null +++ b/docs/about/references/keywords/CONSUMPTION_RATE_TYPE/index.html @@ -0,0 +1,42 @@ + + + + + +CONSUMPTION_RATE_TYPE | eCalc™ Docs + + + + +

    CONSUMPTION_RATE_TYPE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +CONSUMPTION_RATE_TYPE

    +
    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone
    +

    Description

    +
    important

    You must have good control of the input rates - which are stream day rates and which are calendar day rates - and +specify CALENDAR_DAY as input if necessary.

    +

    When REGULARITY is used,the consumption rate type may be specified for +DIRECT ENERGY USAGE MODEL(LOAD or FUELRATE) +by setting CONSUMPTION_RATE_TYPE to either CALENDAR_DAY or +STREAM_DAY.

    +

    The default behaviour, is that these will be interpreted as STREAM_DAY if not set explicitly. This will result in +fuel rates being multiplied by regularity to obtain (average) calendar day fuel rates, while the loads will be kept +stream day when passed to the generator set calculation.

    +
    note

    CALENDAR_DAY: The average rate over a period after adjusting for operating conditions that keeps the +average throughput below the maximum achievable throughput for a single day, known as stream day.

    STREAM_DAY: The actual rate at a given moment. When multiplied with a REGULARITY +factor you get the calendar day rate which needs to be used when evaluating the economics of a process unit.

    stream day rate=calendar day rateregularitystream\ day\ rate = \frac{calendar\ day\ rate}{regularity}
    +

    Format

    +
    CONSUMPTION_RATE_TYPE: <consumption_rate_type>
    +

    Where <consumption_rate_type> can either be CALENDAR_DAY or STREAM_DAY.

    +

    Example

    +

    Specifying consumption rate type for fixed/direct consumers:

    +
    LOAD: 10
    CONSUMPTION_RATE_TYPE: CALENDAR_DAY
    ...
    FUELRATE: 10000
    CONSUMPTION_RATE_TYPE: STREAM_DAY
    +

    Given CALENDAR_DAY input the rate will be converted to STREAM_DAY when evaluating, and any fuel rate in output +will be converted back again to CALENDAR_DAY rate equivalent in the results.

    +

    Given STREAM_DAY input, and a REGULARITY factor of 0.5 (50%), the +interpretation is that the process unit will run at full capacity half of the time. The resulting fuel rate reported +for a fuel consumer will be halved compared to 1 (100%) regularity.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONTROL_MARGIN/index.html b/docs/about/references/keywords/CONTROL_MARGIN/index.html new file mode 100644 index 0000000000..2bab223d9e --- /dev/null +++ b/docs/about/references/keywords/CONTROL_MARGIN/index.html @@ -0,0 +1,53 @@ + + + + + +CONTROL_MARGIN | eCalc™ Docs + + + + +

    CONTROL_MARGIN

    +

    MODELS / +[...] / +STAGES

    +

    Description

    +

    This keyword defines the surge control margin for a single speed compressor chart or a variable speed compressor chart.

    +

    The CONTROL_MARGIN behaves as an alternate to the minimum flow line: For each chart curve (a single speed chart will have one, a variable speed chart will have at least two) the input will be 'cropped' to only include points to the right of the control line - modelling recirculation (ASV) from the correct control line.

    +

    The CONTROL_MARGIN is given as a percentage or fraction (CONTROL_MARGIN_UNIT) of the rate difference between minimum- and maximum flow, +for the given speed. It is used to calculate the increase in minimum flow for each individual speed curve. +It is defined when setting up the stages in a Single speed compressor train model, Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    +

    See Surge control margin for variable speed compressor chart for more details.

    +

    Use in Single speed compressor train model

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    ....
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20
    COMPRESSOR_CHART: 1_stage_chart
    CONTROL_MARGIN: 0.1
    CONTROL_MARGIN_UNIT: FRACTION
    ....
    +
    +
    +
    +
    +
    +
    +
    +

    Stashed changes

    +
    +
    +
    +
    +
    +
    +
    +

    Use in Variable speed compressor train model

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    ....
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20
    COMPRESSOR_CHART: 1_stage_chart
    CONTROL_MARGIN: 0.1
    CONTROL_MARGIN_UNIT: FRACTION
    ....
    +

    Use in Variable speed compressor train model with multiple streams and pressures

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STREAMS:
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING # NB: No fluid definition for outgoing streams!
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    CONTROL_MARGIN: 10
    CONTROL_MARGIN_UNIT: PERCENTAGE
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    CONTROL_MARGIN: 15
    CONTROL_MARGIN_UNIT: PERCENTAGE
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html b/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html new file mode 100644 index 0000000000..23bc2f5a1f --- /dev/null +++ b/docs/about/references/keywords/CONTROL_MARGIN_UNIT/index.html @@ -0,0 +1,26 @@ + + + + + +CONTROL_MARGIN_UNIT | eCalc™ Docs + + + + +

    CONTROL_MARGIN_UNIT

    +

    MODELS / +[...] / +STAGES

    +

    Description

    +

    This keyword defines the unit of the surge control margin for a variable speed compressor chart.

    +

    The CONTROL_MARGIN_UNIT is given as a percentage or fraction of the rate difference between minimum- and maximum flow.

    +

    It is defined when setting up the stages in a Variable speed compressor train model or Variable speed compressor train model with multiple streams and pressures.

    +

    It is currently only possible to define a surge control margin for variable speed compressors.

    +

    See Surge control margin for variable speed compressor chart for more details.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    CONTROL_MARGIN: <Default value is zero>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    ....
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20
    COMPRESSOR_CHART: 1_stage_chart
    CONTROL_MARGIN: 0.1
    CONTROL_MARGIN_UNIT: FRACTION
    ....
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CROSSOVER/index.html b/docs/about/references/keywords/CROSSOVER/index.html new file mode 100644 index 0000000000..f9687d482b --- /dev/null +++ b/docs/about/references/keywords/CROSSOVER/index.html @@ -0,0 +1,24 @@ + + + + + +CROSSOVER | eCalc™ Docs + + + + +

    CROSSOVER

    +

    INSTALLATIONS / +[...] / ENERGY_USAGE_MODEL / +OPERATIONAL_SETTINGS / CROSSOVER

    +
    RequiredChild ofChildren/Options
    YesOPERATIONAL_SETTINGSNone
    +

    Description

    +

    CROSSOVER specifies what rates will be crossed over from one consumer to another if rate capacity is exceed. +If the energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. +To avoid loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower pressure, but not possible to "pressure up" in the crossover flow line. Some examples show how the crossover logic works:

    +

    Crossover is given as and list of integer values for the first position is the first consumer, second position is the second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over possible. Note that we use 1-index here.

    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    ...
    CROSSOVER: [3, 3, 0]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CURVE/index.html b/docs/about/references/keywords/CURVE/index.html new file mode 100644 index 0000000000..ba6cab7889 --- /dev/null +++ b/docs/about/references/keywords/CURVE/index.html @@ -0,0 +1,20 @@ + + + + + +CURVE | eCalc™ Docs + + + + +

    CURVE

    +

    Description

    +

    When using a detailed single speed compressor model, it is necessary to specify the single speed COMPRESSOR CHART. This can be defined from a .csv file, or it can be defined directly in the YAML file. +In either case, the keyword CURVE needs to be used. If a .csv file is being used, under the CURVE keyword, FILE must be used. If specified directly in the YAML file, SPEED, RATE, HEAD and EFFICIENCY must be defined.

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>

    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - FILE: <filepath to compressor curve>
    +

    Example

    +
    MODELS:
    - NAME: predefined_single_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: SINGLE_SPEED
    ...
    CURVE:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]

    - NAME: compressor_chart
    TYPE: COMPRESSOR_CHART
    ...
    CURVE:
    - FILE: compressor_chart.csv
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/CURVES/index.html b/docs/about/references/keywords/CURVES/index.html new file mode 100644 index 0000000000..15ecdb1ced --- /dev/null +++ b/docs/about/references/keywords/CURVES/index.html @@ -0,0 +1,20 @@ + + + + + +CURVES | eCalc™ Docs + + + + +

    CURVES

    +

    Description

    +

    When using a detailed variable speed compressor model, it is necessary to specify the variable speed COMPRESSOR CHART. This can be defined from a .csv file, or it can be defined directly in the YAML file. +In either case, the keyword CURVES needs to be used, and curves for at least two different speeds must be defined. If a .csv file is being used, under the CURVES keyword, FILE must be used. If specified directly in the YAML file, SPEED, RATE, HEAD and EFFICIENCY must be defined for each speed.

    +

    Format

    +
    MODELS:
    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>
    - SPEED: <shaft speed for this curve, a number>
    RATE: <list of rate values for this chart curve>
    HEAD: <list of polytropic head values for this chart curve>
    EFFICIENCY: <list of polytropic efficiency values for this chart curve>

    - NAME: <name of chart, for reference>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - FILE: <filepath to compressor curve>
    +

    Example

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    - SPEED: 9886
    RATE: [3708, 4502, 4993.6, 5507, 5924]
    HEAD: [13845, 13182, 12425, 11276, 10054]
    EFFICIENCY: [ 0.72, 0.75, 0.748, 0.73, 0.70]

    - NAME: compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    ...
    CURVES:
    - FILE: compressor_chart.csv
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/DIRECT_EMITTERS/index.html b/docs/about/references/keywords/DIRECT_EMITTERS/index.html new file mode 100644 index 0000000000..0bbe0450b3 --- /dev/null +++ b/docs/about/references/keywords/DIRECT_EMITTERS/index.html @@ -0,0 +1,30 @@ + + + + + +DIRECT_EMITTERS | eCalc™ Docs + + + + +

    DIRECT_EMITTERS

    +

    Deprecated from eCalc v8.7 (changed name to VENTING_EMITTERS).

    +

    INSTALLATIONS / +DIRECT_EMITTERS

    +
    RequiredChild ofChildren/Options
    YesINSTALLATIONSNAME
    EMISSION_NAME
    CATEGORY
    EMITTER_MODEL
    +
    important
      +
    • eCalc version 8.7: DIRECT_EMITTERS are renamed to VENTING_EMITTERS.
    • +
    • eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before.
    • +
    +

    Description

    +

    The DIRECT_EMITTERS keyword covers the direct emissions on the installation +that are not consuming energy. The attributes NAME, +EMISSION_NAME, CATEGORY and +EMITTER_MODEL are required.

    +

    Format

    +
    DIRECT_EMITTERS:
    - NAME: <emitter name>
    EMISSION_NAME: <emission name>
    CATEGORY: <category>
    EMITTER_MODEL: <emitter model>
    +

    Example

    +
    DIRECT_EMITTERS:
    - NAME: SomeDirectEmitter
    EMISSION_NAME: CH4
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    ...
    - NAME: SomeOtherDirectEmitter
    EMISSION_NAME: C2H6
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html b/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html new file mode 100644 index 0000000000..f9b8ff0cd0 --- /dev/null +++ b/docs/about/references/keywords/DISCHARGE_PRESSURE/index.html @@ -0,0 +1,26 @@ + + + + + +DISCHARGE_PRESSURE | eCalc™ Docs + + + + +

    DISCHARGE_PRESSURE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +[...] / DISCHARGE_PRESSURE

    +
    RequiredChild ofChildren/Options
    YesENERGY_USAGE_MODEL
    OPERATIONAL_SETTINGS
    None
    +

    Description

    +

    Used to define the discharge pressure for some ENERGY_USAGE_MODEL +types and in OPERATIONAL_SETTINGS using an +Expressions.

    +

    Format

    +
    DISCHARGE_PRESSURE: <discharge pressure expression>
    +

    Example

    +
    DISCHARGE_PRESSURE: 200 # [bar]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html b/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..4caa9736d9 --- /dev/null +++ b/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL/index.html @@ -0,0 +1,25 @@ + + + + + +DOWNSTREAM_PRESSURE_CONTROL | eCalc™ Docs + + + + +

    DOWNSTREAM_PRESSURE_CONTROL

    +

    MODELS / +[...] / +INTERSTAGE_CONTROL_PRESSURE +/ DOWNSTREAM_PRESSURE_CONTROL

    +

    Description

    +

    This keyword is used only for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type. It is used within the INTERSTAGE_CONTROL_PRESSURE keyword.

    +

    The pressure control method downstream (after) the interstage pressure is specified in this keyword. +For more explanation see Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EFFICIENCY/index.html b/docs/about/references/keywords/EFFICIENCY/index.html new file mode 100644 index 0000000000..8f1af9a7ae --- /dev/null +++ b/docs/about/references/keywords/EFFICIENCY/index.html @@ -0,0 +1,29 @@ + + + + + +EFFICIENCY | eCalc™ Docs + + + + +

    EFFICIENCY

    +

    Description

    +

    EFFICIENCY is a keyword that is used defining PUMP and COMPRESSOR CHARTS. +Efficiency can either be given as a fraction or percentage.

    +

    For compressors, it is used in two separate ways under the MODELS or section:

    +
      +
    • Defining the UNITS of EFFICIENCY
    • +
    • Defining the set of values for EFFICIENCY under CURVES section. Here, this must be given as a set of values whose length (number of variables) match the correlating HEAD and RATE values.
    • +
    +

    For pumps, it is defined under the FACILITY_INPUTS section.

    +

    Format

    +

    COMPRESSORS

    +
    MODELS:
    - NAME: <compressor chart name>
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: <compressor chart type>
    UNITS:
    ...
    EFFICIENCY: <FRACTION or PERCENTAGE>
    CURVES:
    ...
    EFFICIENCY: <set of values>
    +

    PUMPS

    +
    FACILITY_INPUTS:
    - NAME: <FACILITY_INPUT_NAME>
    FILE: <path_to_file.csv>
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    ...
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    Example

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/ELECTRICITY2FUEL/index.html b/docs/about/references/keywords/ELECTRICITY2FUEL/index.html new file mode 100644 index 0000000000..6a3b7b1a1b --- /dev/null +++ b/docs/about/references/keywords/ELECTRICITY2FUEL/index.html @@ -0,0 +1,36 @@ + + + + + +ELECTRICITY2FUEL | eCalc™ Docs + + + + +

    ELECTRICITY2FUEL

    +

    INSTALLATIONS / +GENERATORSETS / +ELECTRICITY2FUEL

    +
    RequiredChild ofChildren/Options
    YesGENERATORSETSNone
    +

    Description

    +

    ELECTRICITY2FUEL specifies the correlation between the electric power +delivered and the fuel consumed by a generator set.

    +
    note

    Note that this describes the relation for a set of generators and if there is more than one +generator, the power vs. fuel usually makes a "jump" when the capacity of the generator(s) is +exceeded and an additional generator is started.

    +

    ELECTRICITY2FUEL may be modelled with a constant function through time or +with different power vs. fuel relations for different time intervals.

    +

    Format

    +
    ELECTRICITY2FUEL: <facility_input_reference>
    +

    or

    +
    ELECTRICITY2FUEL:
    <DATE>: <facility_input_reference_1>
    <DATE>: <facility_input_reference_2>
    +

    Example

    +

    Example 1

    +
    ELECTRICITY2FUEL: generatorset_electricity_to_fuel_reference
    +

    Example 2

    +
    ELECTRICITY2FUEL:
    2001-01-01: generatorset_electricity_to_fuel_reference1
    2005-01-01: generatorset_electricity_to_fuel_reference2
    +

    Where generatorset_electricity_to_fuel_reference<N> is a FACILITY_INPUTS +of TYPE ELECTRICITY2FUEL.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION/index.html b/docs/about/references/keywords/EMISSION/index.html new file mode 100644 index 0000000000..dede9c19b1 --- /dev/null +++ b/docs/about/references/keywords/EMISSION/index.html @@ -0,0 +1,30 @@ + + + + + +EMISSION | eCalc™ Docs + + + + +

    EMISSION

    +

    New keyword from eCalc v8.8!

    +
    +

    INSTALLATIONS / +VENTING_EMITTERS

    +
    RequiredChild ofChildren/Options
    NoVENTING_EMITTERSNAME
    RATE
    +
    important
      +
    • From eCalc version 8.8: The new keyword EMISSION is a part of an updated definition of VENTING_EMITTERS.
    • +
    • eCalc version 8.7 and earlier: EMISSION-keyword cannot be used.
    • +
    +

    Description

    +

    The emission specifies the data to calculate the direct emissions on an installation. This data is used to set up +a function that may be evaluated for a set of time series and return an emission result.

    +

    The attributes NAME and RATE are required.

    +

    Format

    +
    EMISSION:
    - NAME: <emission name>
    RATE:
    VALUE: <emission rate>
    UNIT: <emission rate unit, default kg/d>
    TYPE: <emission rate type, default STREAM_DAY>
    +

    Example

    +
    EMISSION:
    - NAME: CH4
    RATE:
    VALUE: 4
    UNIT: kg/d
    TYPE: STREAM_DAY
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSIONS/index.html b/docs/about/references/keywords/EMISSIONS/index.html new file mode 100644 index 0000000000..7520b650df --- /dev/null +++ b/docs/about/references/keywords/EMISSIONS/index.html @@ -0,0 +1,25 @@ + + + + + +EMISSIONS | eCalc™ Docs + + + + +

    EMISSIONS

    +

    FUEL_TYPES / +EMISSIONS

    +
    RequiredChild ofChildren/Options
    NoFUEL_TYPESFACTOR
    NAME
    +

    Description

    +

    In EMISSIONS one or more emissions related to the use of fuel is specified as +a list. Each emission entry is required to have a NAME and a FACTOR.

    +

    Format

    +
    EMISSIONS:
    - NAME: <name>
    FACTOR: <factor>
    +

    Example

    +

    For example, if you want to add CO2 emissions associated to the usage of a FUEL_TYPES +you write the following:

    +
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION_NAME/index.html b/docs/about/references/keywords/EMISSION_NAME/index.html new file mode 100644 index 0000000000..9f116783d1 --- /dev/null +++ b/docs/about/references/keywords/EMISSION_NAME/index.html @@ -0,0 +1,30 @@ + + + + + +EMISSION_NAME | eCalc™ Docs + + + + +

    EMISSION_NAME

    +

    Deprecated from eCalc v8.8 (is included in EMISSION).

    +
    +

    [...] / +EMISSION_NAME

    +
    RequiredChild ofChildren/Options
    YesVENTING_EMITTERSNone
    +
    important
    +

    Description

    +

    Name of an entity.

    +

    Format

    +
    EMISSION_NAME: <name>
    +

    Example

    +

    Usage in VENTING_EMITTERS:

    +
    VENTING_EMITTERS:
    - EMISSION_NAME: CH4
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMISSION_RATE/index.html b/docs/about/references/keywords/EMISSION_RATE/index.html new file mode 100644 index 0000000000..e8a015a547 --- /dev/null +++ b/docs/about/references/keywords/EMISSION_RATE/index.html @@ -0,0 +1,27 @@ + + + + + +EMISSION_RATE | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EMITTER_MODEL/index.html b/docs/about/references/keywords/EMITTER_MODEL/index.html new file mode 100644 index 0000000000..b9676725ed --- /dev/null +++ b/docs/about/references/keywords/EMITTER_MODEL/index.html @@ -0,0 +1,32 @@ + + + + + +EMITTER_MODEL | eCalc™ Docs + + + + +

    EMITTER_MODEL

    +

    Deprecated from eCalc v8.8 (replaced by EMISSION).

    +
    +

    INSTALLATIONS / +[...] / +EMITTER_MODEL

    +
    RequiredChild ofChildren/Options
    NoVENTING_EMITTERSEMISSION_RATE
    +
    important
    +

    Description

    +

    The emitter model specifies the data to calculate the direct emissions on an installation. This data is used to set up +a function that may be evaluated for a set of time series and return an emission result.

    +

    The EMISSION_RATE describes the rate [kg/day] of emissions, and is required.

    +

    Format

    +
    EMITTER_MODEL:
    - EMISSION_RATE: <emission rate [kg/day]>
    +

    Example

    +
    EMITTER_MODEL:
    - EMISSION_RATE: 4 # [kg/day]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/END/index.html b/docs/about/references/keywords/END/index.html new file mode 100644 index 0000000000..e8e043edde --- /dev/null +++ b/docs/about/references/keywords/END/index.html @@ -0,0 +1,28 @@ + + + + + +END | eCalc™ Docs + + + + +

    END

    +

    END

    +
    RequiredChild ofChildren/Options
    NoNoneNone
    +

    Description

    +

    Global end date for eCalc to stop energy and emission calculations. It is recommended that you have control of which date you want data to be calculated and exported for.

    +

    If you specify the end date as 2080-01-01, the last period to be calculated is 2079 is included in the output. The hours, minutes and seconds of the day are implicitly set to "00:00:00", so the counting ends at midnight on January 1st 2080 (2079-12-31 23:59:59).

    +

    You can provide a date that is after the global time vector, but it is recommended to set it to the end of your timeseries data. Normally the timeseries do not provide this information directly. The last timestep provided in a timeseries is e.g. 2079-01-01, which would often mean that the data changed at that point, +and will e.g. be valid 1 year from then (if we work with YEARLY output frequency). To make sure that eCalc stops at the correct place, you should therefore specify the exclusive date of the data.

    +

    The START keyword have similar behaviour.

    +

    If END is not specified, eCalc will make an educated (but possibly incorrect) guess on when the output data should end.

    +

    Format

    +
    END: <YYYY-MM-DD>
    +

    Example

    +

    Given an input dataset from 01-01-2000 - 01-01-2040, ignoring the last 20 years of data +can be achieved as follows:

    +
    END: 2020-01-01
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/ENERGYFUNCTION/index.html b/docs/about/references/keywords/ENERGYFUNCTION/index.html new file mode 100644 index 0000000000..5153ec78ed --- /dev/null +++ b/docs/about/references/keywords/ENERGYFUNCTION/index.html @@ -0,0 +1,30 @@ + + + + + +ENERGYFUNCTION | eCalc™ Docs + + + + +

    ENERGYFUNCTION

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +ENERGYFUNCTION

    +
    RequiredChild ofChildren/Options
    NoENERGY_USAGE_MODELNone
    +

    Description

    +

    This refers to an energy function model defined in either FACILITY INPUTS or in MODELS used for ENERGY USAGE MODEL. +The following attributes can be utilised:

    + +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: <energy usage model type>
    ENERGYFUNCTION: <reference to energy function in facility inputs or models of compressor type>
    +

    Example

    +

    FACILITY_INPUTS:
    - NAME: compressor_model_reference
    TYPE: COMPRESSOR_TABULAR
    FILE: <file path>

    ...

    INSTALLATIONS:
    - NAME: InstallationA
    CATEGORY: FIXED
    FUEL: fuel_gas
    GENERATORSETS:
    - NAME: gensetA
    CATEGORY: TURBINE-GENERATOR
    ELECTRICITY2FUEL: genset
    CONSUMERS:
    - NAME: compressor
    CATEGORY: COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_model_reference
    ...

    FUELCONSUMERS:
    - NAME: compressor
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ENERGYFUNCTION: compressor_model_reference
    ...

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html b/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html new file mode 100644 index 0000000000..48aad09c6b --- /dev/null +++ b/docs/about/references/keywords/ENERGY_USAGE_MODEL/index.html @@ -0,0 +1,38 @@ + + + + + +ENERGY_USAGE_MODEL | eCalc™ Docs + + + + +

    ENERGY_USAGE_MODEL

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL

    +
    RequiredChild ofChildren/Options
    YesFUELCONSUMERSCOMPRESSORS
    CONSUMERSCONDITION
    CONDITIONS
    CONSUMPTION_RATE_TYPE
    DISCHARGE_PRESSURE
    ENERGYFUNCTION
    FLUID_DENSITY
    FUELRATE
    LOAD
    OPERATIONAL_SETTINGS
    POWERLOSSFACTOR
    PUMPS
    RATE
    SUCTION_PRESSURE
    TOTAL_SYSTEM_RATE
    TYPE
    VARIABLES
    +

    Description

    +

    The energy usage model specifies the data to calculate the energy usage of a consumer. This data is used to set up a +function that may be evaluated for a set of time series and returns a result including the calculated energy usage.

    +

    The type of energy usage model is defined by TYPE, and which keywords are required/supported will be different +for each type. The available types are:

    +

    Energy usage model types:

    + +

    For all types, the keywords CONDITION, CONDITIONS and POWERLOSSFACTOR are optional and supported, and these will act +on the calculated energy usage after the calculated energy usage from the model defined by TYPE.

    +

    Temporal energy usage model

    +

    It is possible to update the energy model within a consumer over time, as long as the +ENERGY_USAGE_MODEL stays within one type. The TYPE cannot change over time. In case TYPE evolution is needed, we recommend that you split the model into two CONSUMERS.

    +
    ENERGY_USAGE_MODEL:
    2020-01-01:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference_initial
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    2022-01-01:
    TYPE: TABULATED
    ENERGYFUNCTION: tabulated_energy_function_reference_new
    VARIABLES:
    - NAME: RATE
    EXPRESSION: SIM1;GAS_PROD
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EXPRESSION/index.html b/docs/about/references/keywords/EXPRESSION/index.html new file mode 100644 index 0000000000..568bc9ae17 --- /dev/null +++ b/docs/about/references/keywords/EXPRESSION/index.html @@ -0,0 +1,25 @@ + + + + + +EXPRESSION | eCalc™ Docs + + + + +

    EXPRESSION

    +

    VARIABLES / +EXPRESSION

    +
    RequiredChild ofChildren/Options
    NoVARIABLESNone
    +

    Description

    +

    Expression for a variable<VARIABLES> using EXPRESSIONS

    +

    Format

    +
    EXPRESSION: <expression>
    +

    Example

    +

    With time series reference

    +
    EXPRESSION: time_series_ref_1;vector_name_1 {+} time_series_ref_2;vector_name_2 {*} (time_series_ref_3;vector_name_3 > 0)
    +

    With variable reference

    +
    EXPRESSION: $var.variable_name1 {+} $var.variable_name2
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/EXTRAPOLATION/index.html b/docs/about/references/keywords/EXTRAPOLATION/index.html new file mode 100644 index 0000000000..5fc136ce88 --- /dev/null +++ b/docs/about/references/keywords/EXTRAPOLATION/index.html @@ -0,0 +1,27 @@ + + + + + +EXTRAPOLATION | eCalc™ Docs + + + + +

    EXTRAPOLATION

    +

    TIME_SERIES / +EXTRAPOLATION

    +
    RequiredChild ofChildren/Options
    N/ATIME_SERIESNone
    +

    Description

    +
    caution

    Only valid for TIME_SERIES of TYPE MISCELLANEOUS. For type +DEFAULT the keyword is not supported as input, and the functionality is defaulted to False.

    +

    Defines whether the rates in the source should be set to 0 after the last time step (False), or equal +to value at last time step after the time interval (True).

    +

    Format

    +
    EXTRAPOLATION: <True/False>
    +

    Requirements

    +
    TYPE set toEXTRAPOLATION default
    DEFAULTalways False
    MISCELLANEOUSFalse
    +

    Example

    +

    See the TIME_SERIES time_series_format.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FACILITY_INPUTS/index.html b/docs/about/references/keywords/FACILITY_INPUTS/index.html new file mode 100644 index 0000000000..23d7a646ee --- /dev/null +++ b/docs/about/references/keywords/FACILITY_INPUTS/index.html @@ -0,0 +1,34 @@ + + + + + +FACILITY_INPUTS | eCalc™ Docs + + + + +

    FACILITY_INPUTS

    +

    FACILITY_INPUTS

    +
    RequiredChild ofChildren/Options
    YesNoneADJUSTMENT
    FILE
    HEAD_MARGIN
    TYPE
    +

    Description

    +

    This part of the setup defines input files that characterize various facility elements. Each facility element is +specified in a list. These are later used as input in the INSTALLATIONS part of the setup by referencing their +NAME.

    +

    All facility inputs are in essence a CSV (Comma separated file) file that specifies input data to a model that +calculates how much energy the equipment is using depending on the operating mode/throughput. There are multiple +supported types.

    +

    Supported types

    +

    The facility input type is defined using the TYPE keyword and defines the type of model applied +to the data in this file. The input files are in CSV (Comma separated file) format. The paths to the input files may be either absolute or relative to the setup file.

    +

    The supported types are:

    +
      +
    • ELECTRICITY2FUEL
    • +
    • TABULAR
    • +
    • COMPRESSOR_TABULAR
    • +
    • PUMP_CHART_SINGLE_SPEED
    • +
    • PUMP_CHART_VARIABLE_SPEED
    • +
    +

    See FACILITY INPUTS for details about each of the above supported types and their usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FACTOR/index.html b/docs/about/references/keywords/FACTOR/index.html new file mode 100644 index 0000000000..858eda2c7e --- /dev/null +++ b/docs/about/references/keywords/FACTOR/index.html @@ -0,0 +1,39 @@ + + + + + +FACTOR | eCalc™ Docs + + + + +

    FACTOR

    +

    [...] / +FACTOR

    +

    Description

    +

    The keyword FACTOR can be used to add a multiplier. The +FACTOR keyword can be used in various places in the eCalc configuration file. +A factor can either be a number, or an expression <Expressions>.

    +
    Warning

    The FACTOR keyword will have slightly different behavior depending on in which keyword +it is used. Carefully read the documentation below!

    +

    Use in ADJUSTMENT

    +

    Adjustment of input data with a factor.

    +

    Use in EMISSIONS

    +

    A single value with unit kg/Sm3 defines the CO2 factor for the fuel gas used on the +installation. That is, how many kilograms of CO2 are emitted

    +

    Format

    +
    FACTOR: <VALUE>
    +

    Example

    +

    Use in ADJUSTMENT

    +

    Say you have input that that is of by 3% percentage. +You could fix this like:

    +
    NAME: some_facility_input
    FILE: filename.csv
    TYPE: FACILITY_INPUT_TYPE
    ADJUSTMENT:
    FACTOR: 1.03
    +

    The resulting energy consumption EadjustedE_\mathrm{adjusted}, i.e. fuel or power, will then be

    +Eadjusted=1.03×EoriginalE_\mathrm{adjusted} = 1.03 \times E_\mathrm{original} +

    where EoriginalE_\mathrm{original} is the energy consumption before the adjustment.

    +

    Use in EMISSIONS

    +

    Say your fuel emits 2.5 kg CO2 per Sm3 of burned fuel, you can model this like:

    +
    FUEL_TYPES:
    - NAME: my_fuel
    EMISSIONS:
    - NAME: CO2
    FACTOR: 2.5 # [kg/Sm3]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FILE/index.html b/docs/about/references/keywords/FILE/index.html new file mode 100644 index 0000000000..285cbf8a43 --- /dev/null +++ b/docs/about/references/keywords/FILE/index.html @@ -0,0 +1,22 @@ + + + + + +FILE | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FLUID_DENSITY/index.html b/docs/about/references/keywords/FLUID_DENSITY/index.html new file mode 100644 index 0000000000..eb54bed088 --- /dev/null +++ b/docs/about/references/keywords/FLUID_DENSITY/index.html @@ -0,0 +1,24 @@ + + + + + +FLUID_DENSITY | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FLUID_MODEL/index.html b/docs/about/references/keywords/FLUID_MODEL/index.html new file mode 100644 index 0000000000..1ed091bbcc --- /dev/null +++ b/docs/about/references/keywords/FLUID_MODEL/index.html @@ -0,0 +1,19 @@ + + + + + +FLUID_MODEL | eCalc™ Docs + + + + +

    FLUID_MODEL

    +

    Description

    +

    This keyword is necessary when defining a compressor model. It relates to a defined fluid model in the MODELS section. How a fluid model is defined is described in further detail in FLUID MODEL.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <compressor model type>
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    ...
    +

    Example

    +
    MODELS:
    - NAME: fluid_model
    TYPE: FLUID
    FLUID_MODEL_TYPE: PREDEFINED
    EOS_MODEL: SRK
    GAS_TYPE: MEDIUM

    - NAME: single_speed_compressor
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: fluid_model
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUEL/index.html b/docs/about/references/keywords/FUEL/index.html new file mode 100644 index 0000000000..5eb548e8ab --- /dev/null +++ b/docs/about/references/keywords/FUEL/index.html @@ -0,0 +1,29 @@ + + + + + +FUEL | eCalc™ Docs + + + + +

    FUEL

    +

    ... / +FUEL

    +

    Description

    +

    The FUEL keyword defines the fuel type that can be used in +INSTALLATIONS, GENERATORSETS, or FUELCONSUMERS. +It can be set directly and used for the entire time interval, or it can be set differently for different time intervals.

    +

    Format

    +
    FUEL: <fuel_type>
    +

    or

    +
    FUEL:
    <DATE>: <fuel_type>
    <DATE>: <fuel_type>
    +

    Example

    +

    Constant fuel type

    +
    FUEL: fuel_gas
    +

    Time-varying fuel type

    +

    This example assumes that two fuels have been defined: fuel_gas and diesel.

    +
    FUEL:
    1994-01-01: fuel_gas
    2000-01-01: diesel
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUELCONSUMERS/index.html b/docs/about/references/keywords/FUELCONSUMERS/index.html new file mode 100644 index 0000000000..ad7a7e2bb8 --- /dev/null +++ b/docs/about/references/keywords/FUELCONSUMERS/index.html @@ -0,0 +1,26 @@ + + + + + +FUELCONSUMERS | eCalc™ Docs + + + + +

    FUELCONSUMERS

    +

    INSTALLATIONS / +FUELCONSUMERS

    +

    Description

    +

    The FUELCONSUMERS keyword covers the fuel consumers on the installation +that are not generators. The attributes NAME, +ENERGY_USAGE_MODEL and +CATEGORY are required, while +FUEL is optional and may be used to +override the installation's default fuel type.

    +

    Format

    +
    FUELCONSUMERS:
    - NAME: <consumer name>
    CATEGORY: <category>
    ENERGY_USAGE_MODEL: <energy usage model>
    FUEL: <fuel specification>
    +

    Example

    +
    FUELCONSUMERS:
    - NAME: CompressorFuelConsumer
    CATEGORY: GAS-DRIVEN-COMPRESSOR
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    - NAME: FlareFuelConsumer
    CATEGORY: FLARE
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    ...
    - NAME: SomeOtherFuelConsumer
    CATEGORY: MISCELLANEOUS
    FUEL: fuel_gas
    ENERGY_USAGE_MODEL:
    <energy usage model data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUELRATE/index.html b/docs/about/references/keywords/FUELRATE/index.html new file mode 100644 index 0000000000..92989c20ff --- /dev/null +++ b/docs/about/references/keywords/FUELRATE/index.html @@ -0,0 +1,28 @@ + + + + + +FUELRATE | eCalc™ Docs + + + + +

    FUELRATE

    +

    INSTALLATIONS +/ +[...] / +ENERGY_USAGE_MODEL / +FUELRATE

    +

    Description

    +

    Used for direct fuel energy usage models<ENERGY_USAGE_MODEL> to define fuel consumption directly with an +expression <Expressions>

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: <fuel rate expression [m3/day]>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION: <condition expression>
    +

    Example

    +

    Constant fuel rate:

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: 100000 # [m3/day]
    +

    Fuel rate varying in time:

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    FUELRATE: fueldata;FUEL_RATE # [m3/day]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/FUEL_TYPES/index.html b/docs/about/references/keywords/FUEL_TYPES/index.html new file mode 100644 index 0000000000..2ad184d91e --- /dev/null +++ b/docs/about/references/keywords/FUEL_TYPES/index.html @@ -0,0 +1,21 @@ + + + + + +FUEL_TYPES | eCalc™ Docs + + + + +

    FUEL_TYPES

    +

    FUEL_TYPES

    +

    Description

    +

    This part of the setup specifies the various fuel types and associated emissions +used in the model. Each fuel type is specified in a list and the defined fuels can later be referred to the +INSTALLATIONS part of the setup by its name.

    +

    The use of fuel can lead to one or more emission types, specified in EMISSIONS. +You can optionally specify a CATEGORY.

    +

    See FUEL TYPES for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/GENERATORSETS/index.html b/docs/about/references/keywords/GENERATORSETS/index.html new file mode 100644 index 0000000000..c0173839b1 --- /dev/null +++ b/docs/about/references/keywords/GENERATORSETS/index.html @@ -0,0 +1,24 @@ + + + + + +GENERATORSETS | eCalc™ Docs + + + + +

    GENERATORSETS

    +

    INSTALLATIONS / +GENERATORSETS

    +

    Description

    +

    Under GENERATORSETS one or +several generator sets (a 'set' of an engine of some sort and a generator) are specified in a list. +Each generator set requires three sub-keywords, ELECTRICITY2FUEL and +CONSUMERS and CATEGORY.

    +

    This keyword is optional. However, the only requirement is that each +installation must have at least one of GENERATORSETS +and FUELCONSUMERS.

    +

    See GENERATOR SETS for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/HCEXPORT/index.html b/docs/about/references/keywords/HCEXPORT/index.html new file mode 100644 index 0000000000..6498f60d4f --- /dev/null +++ b/docs/about/references/keywords/HCEXPORT/index.html @@ -0,0 +1,36 @@ + + + + + +HCEXPORT | eCalc™ Docs + + + + +

    HCEXPORT

    +

    INSTALLATIONS / +HCEXPORT

    +

    Description

    +

    HCEXPORT defines the export of hydrocarbons as a number of oil equivalents in Sm3. +This keyword is required for the output of emission intensity (i.e., kg CO2/boe). +This could be a single time series variable or an expression <expressions> containing multiple time series variables. +Typically it would be the sum of exported oil and gas in units of oil equivalents.

    +
    What is hydrocarbon export?

    Hydrocarbon export is the oil equivalents of what is exported for sale and only these volumes should +be included here. I.e., it is important to distinguish between produced gas and sales gas. +See GL0093 in Docmap.

    +

    Format

    +
    HCEXPORT: <EXPRESSION>  # [Sm3/day]
    +

    or

    +
    HCEXPORT:
    <DATE>: <EXPRESSION> # [Sm3/day]
    <DATE>: <EXPRESSION> # [Sm3/day]
    +

    Example

    +

    Basic usage

    +
    HCEXPORT: SIM;OIL_PROD {+} SIM;GAS_SALES {/} 1000
    +

    With time dependency

    +

    In this example the gas export starts later than production start up:

    +
    HCEXPORT:
    2001-01-01: SIM1;OIL_PROD
    2005-01-01: SIM2:OIL_PROD {+} SIM1;GAS_SALES {/} 1000
    +

    Full example

    +

    Example showing HCEXPORT the modelling hierarchy:

    +
    INSTALLATIONS:
    - NAME: installation_A
    FUEL: fuel_gas
    HCEXPORT: SIM;OIL_PROD:FIELD_A {+} SIM;GAS_SALES:FIELD_A {/} 1000
    GENERATORSETS:
    <Data for the generator sets to be put her>
    FUELCONSUMERS:
    <Data for the fuel consumers to be put here>
    - NAME: installation_B
    HCEXPORT: SIM;OIL_PROD:FIELD_B {+} SIM;GAS_SALES:FIELD_B{/} 1000
    GENERATORSETS:
    <Data for the generator sets to be put her>
    FUELCONSUMERS:
    <Data for the fuel consumers to be put here>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/HEAD/index.html b/docs/about/references/keywords/HEAD/index.html new file mode 100644 index 0000000000..727a4b41f8 --- /dev/null +++ b/docs/about/references/keywords/HEAD/index.html @@ -0,0 +1,30 @@ + + + + + +HEAD | eCalc™ Docs + + + + +

    HEAD

    +

    Description

    +

    HEAD is a keyword that is used defining PUMP and COMPRESSOR CHARTS. +Head can either be given as a M, KJ_PER_KG, JOULE_PER_KG.

    +

    For compressors, it is used in two separate ways under the MODELS or section:

    +
      +
    • Defining the UNITS of HEAD
    • +
    • Defining the set of values for HEAD under CURVES section. Here, this must be given as a set of values whose length (number of variables) match the correlating EFFICIENCY and RATE values.
    • +
    +

    For pumps, it is defined under the FACILITY_INPUTS section.

    +

    Format

    +

    COMPRESSORS

    +
    MODELS:
    - NAME: <name of chart, for reference>
    ...
    UNITS:
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    ...
    ....
    +

    PUMPS

    +
    FACILITY_INPUTS:
    - NAME: <pump chart name>
    ...
    UNITS:
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    ...
    +

    Example

    +

    COMPRESSORS

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    CURVES:
    - SPEED: 7500
    RATE: [2900, 3503, 4002, 4595.0]
    HEAD: [8412.9, 7996, 7363, 6127]
    EFFICIENCY: [0.72, 0.75, 0.74, 0.70]
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/HEAD_MARGIN/index.html b/docs/about/references/keywords/HEAD_MARGIN/index.html new file mode 100644 index 0000000000..470cad2ee5 --- /dev/null +++ b/docs/about/references/keywords/HEAD_MARGIN/index.html @@ -0,0 +1,29 @@ + + + + + +HEAD_MARGIN | eCalc™ Docs + + + + +

    HEAD_MARGIN

    +

    FACILITY_INPUTS / +HEAD_MARGIN

    +

    Description

    +

    When calibrating pump charts to historical data, the head values at maximum speed +could be put in the cloud of data to be unbiased. However, eCalc will treat all +head values above the maximum defined area in the chart infeasible (i.e., +outside pump capacity). To mitigate this when running through historical data for +power calibration, one can adjust the head margin with this keyword.

    +

    Calculated head values above maximum head values from the chart will be set equal to +maximum head values before power calculations if they are within the margin given. +Calculated head values larger than maximum + margin will still be infeasible.

    +

    Format

    +

    The head margin can be specified in mlc (meter liquid column):

    +
    HEAD_MARGIN: <margin>
    +

    Example

    +
        NAME: pump_name
    TYPE: PUMP_CHART_SINGLE_SPEED
    UNITS:
    HEAD: M
    RATE: AM3_PER_HOUR
    EFFICIENCY: PERCENTAGE
    FILE: <path_to_chart_file>.csv
    HEAD_MARGIN: 10.0
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html b/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html new file mode 100644 index 0000000000..4cb5d6ff6f --- /dev/null +++ b/docs/about/references/keywords/INFLUENCE_TIME_VECTOR/index.html @@ -0,0 +1,23 @@ + + + + + +INFLUENCE_TIME_VECTOR | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INLET_TEMPERATURE/index.html b/docs/about/references/keywords/INLET_TEMPERATURE/index.html new file mode 100644 index 0000000000..9687c55ed8 --- /dev/null +++ b/docs/about/references/keywords/INLET_TEMPERATURE/index.html @@ -0,0 +1,22 @@ + + + + + +INLET_TEMPERATURE | eCalc™ Docs + + + + +

    INLET_TEMPERATURE

    +

    MODELS / INLET_TEMPERATURE

    +
    RequiredChild ofChildren/Options
    YesMODELSNone
    +

    Description

    +

    This is a keyword used in COMPRESSOR MODELLING. It is a necessary input parameter which describes the inlet temperature to a compressor stage. Temperature must be given in oC.

    +

    As of now, this is can only be given as a single value. Time-series are not accepted here.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_train
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: 20 #degC
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INSTALLATIONS/index.html b/docs/about/references/keywords/INSTALLATIONS/index.html new file mode 100644 index 0000000000..922c9d9824 --- /dev/null +++ b/docs/about/references/keywords/INSTALLATIONS/index.html @@ -0,0 +1,19 @@ + + + + + +INSTALLATIONS | eCalc™ Docs + + + + +

    INSTALLATIONS

    +

    INSTALLATIONS

    +

    Description

    +

    In INSTALLATIONS the system of energy consumers is described. Installations, in this setting, are typically the different platforms and production units for a field, group of fields, or area. Mobile units (such as drilling rigs) are also modelled as an installation.

    +

    The structure of the keywords under installations +is linked to the structure in the general consumer overview for an installation.

    +

    See INSTALLATIONS for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INTERPOLATION_TYPE/index.html b/docs/about/references/keywords/INTERPOLATION_TYPE/index.html new file mode 100644 index 0000000000..518089b75d --- /dev/null +++ b/docs/about/references/keywords/INTERPOLATION_TYPE/index.html @@ -0,0 +1,47 @@ + + + + + +INTERPOLATION_TYPE | eCalc™ Docs + + + + +

    INTERPOLATION_TYPE

    +

    TIME_SERIES / +INTERPOLATION_TYPE

    +

    New in v8.1, previously known as RATE_INTERPOLATION_TYPE that was renamed to INTERPOLATION_TYPE.

    +

    Description

    +
    Caution

    Only valid for CSV data of source MISCELLANEOUS. For TIME_SERIES of TYPE +DEFAULT the keyword is not allowed as input. The following applies:

      +
    • MISCELLANEOUS: Interpolation type is mandatory.
    • +
    • DEFAULT: Interpolation type not allowed. Default RIGHT is used.
    • +
    +
    Caution

    Different data types may require different types of interpolation. While reservoir rates are +typically interpolated RIGHT or LEFT, other data such as pressure is often interpolated +linearly (LINEAR). Data that should be interpolated differently must be specified in +different input files, as it is not possible to have multiple interpolation types for vectors +within the same file.

    +

    Rates are given at defined time steps in the data source but are in essence valid for a time +interval. The INTERPOLATION_TYPE +will determine how rates are interpolated between the given time steps.

    +
      +
    • LEFT: The rate given at the current time step is defining the rate in the time interval between the current and +previous time step. This is in data science also known as backwards filling of missing values.
    • +
    • RIGHT: The rate given at the current time step is defining the rate in the time interval between the current and +next time step. This is in data science also known as forward filling of missing values.
    • +
    • LINEAR: The rate will be linearly interpolated between the time steps.
    • +
    +

    The plot below shows how the different choices for INTERPOLATION_TYPE works in practice.

    +

    +

    Format

    +
    INTERPOLATION_TYPE: <LEFT/RIGHT/LINEAR>
    +

    Requirements

    +

    INTERPOLATION_TYPE has to be specified if +TYPE is set to MISCELLANEOUS.

    +

    INTERPOLATION_TYPE can not be specified if TYPE is set to DEFAULT.

    +

    Example

    +

    See the TIME_SERIES time_series_format.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html b/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html new file mode 100644 index 0000000000..5295e2cf9b --- /dev/null +++ b/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE/index.html @@ -0,0 +1,37 @@ + + + + + +INTERSTAGE_CONTROL_PRESSURE | eCalc™ Docs + + + + +

    INTERSTAGE_CONTROL_PRESSURE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / [...] / +INTERSTAGE_CONTROL_PRESSURE

    +

    Description

    +

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type, and it is used in two separate sections:

    +
      +
    • MODELS - to define the upstream and downstream pressure control methods
    • +
    • ENERGY_USAGE_MODEL - to define the interstage pressure
    • +
    +

    Use in MODELS

    +
    note

    This keyword cannot be specified for the first stage, and it may only be used once in a given compression train.

    +

    Under the INTERSTAGE_CONTROL_PRESSURE keyword, the UPSTREAM_PRESSURE_CONTROL and DOWNSTREAM_PRESSURE_CONTROL keywords can be specified.

    +

    Format

    +
    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    DOWNSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...
    +

    The reason why upstream and downstream pressure control methods need to be specified is that the compression train is essentially split in two - before and after the interstage pressure. Thus, a control method for each "side" of the model needs to be defined. +See Variable speed compressor train model with multiple streams and pressures for more details.

    +

    Use in ENERGY_USAGE_MODEL

    +

    Within the ENERGY_USAGE_MODEL section (only when TYPE is set to VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES) the actual value for the interstage pressure is set in bar. +This can either be a single value or an EXPRESSION.

    +

    Format

    +
          - NAME: <reference name>
    ...
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    INTERSTAGE_CONTROL_PRESSURE: <interstage control pressure value/expression>
    ...
    +

    Example

    +
          - NAME: export_compressor
    ...
    ENERGY_USAGE_MODEL:
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    SUCTION_PRESSURE: 10 # bar
    INTERSTAGE_CONTROL_PRESSURE: 40 #bar
    DISCHARGE_PRESSURE: 120 #bar
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/LOAD/index.html b/docs/about/references/keywords/LOAD/index.html new file mode 100644 index 0000000000..f7084ca3bd --- /dev/null +++ b/docs/about/references/keywords/LOAD/index.html @@ -0,0 +1,24 @@ + + + + + +LOAD | eCalc™ Docs + + + + +

    LOAD

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +LOAD

    +

    Description

    +

    Used for direct load energy usage models<ENERGY_USAGE_MODEL> to define electrical power load directly +with an expression <Expressions>

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: <load expression>
    CONSUMPTION_RATE_TYPE: <consumption rate type>
    CONDITION: <condition expression>
    POWERLOSSFACTOR: <power loss factor (number)>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: DIRECT
    LOAD: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html b/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html new file mode 100644 index 0000000000..ac429657b3 --- /dev/null +++ b/docs/about/references/keywords/LOWER_HEATING_VALUE/index.html @@ -0,0 +1,21 @@ + + + + + +LOWER_HEATING_VALUE | eCalc™ Docs + + + + +

    LOWER_HEATING_VALUE

    +

    Description

    +

    LOWER_HEATING_VALUE is a required to be specified under the TURBINE_MODEL keyword. +This must be specified in MJ/Sm3

    +

    This can only be inputted as a single value and dictates the quantity of thermal energy available after burning a standard cubic metre of fuel (natural gas in this gas).

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html b/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html new file mode 100644 index 0000000000..d90cf7b6c2 --- /dev/null +++ b/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE/index.html @@ -0,0 +1,27 @@ + + + + + +MAXIMUM_DISCHARGE_PRESSURE | eCalc™ Docs + + + + +

    MAXIMUM_DISCHARGE_PRESSURE

    +

    MODELS / +MAXIMUM_DISCHARGE_PRESSURE

    +

    Description

    +

    MAXIMUM_DISCHARGE_PRESSURE sets the highest possible discharge pressure that a compressor can deliver. +In reality, setting the maximum discharge pressure can be to avoid excessively high pressures which can be a safety concern on an installation.

    +

    Functionality

    +

    This is an optional setting and is only supported for SINGLE SPEED COMPRESSORS, and only if the PRESSURE_CONTROL is DOWNSTREAM_CHOKE.

    +
      +
    • If MAXIMUM_DISCHARGE_PRESSURE has been defined and if any of the inputted discharge pressures exceeds the maximum value, a ValueError message will be raised.
    • +
    • If any of the input rates and suction pressures result in a discharge pressure which is above the MAXIMUM_DISCHARGE_PRESSURE, the suction pressure will be reduced until the calculations provide a discharge pressure below the maximum value (assuming an upstream choke can handle this).
    • +
    • The outlet stream will then be further choked from the MAXIMUM_DISCHARGE_PRESSURE to the target discharge pressure using the DOWNSTREAM_CHOKE pressure control.
    • +
    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SINGLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model>
    PRESSURE_CONTROL: <DOWNSTREAM_CHOKE>
    MAXIMUM_DISCHARGE_PRESSURE: <Maximum discharge pressure in bar>
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model>
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html b/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html new file mode 100644 index 0000000000..9e88540a70 --- /dev/null +++ b/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE/index.html @@ -0,0 +1,26 @@ + + + + + +MAXIMUM_PRESSURE_RATIO_PER_STAGE | eCalc™ Docs + + + + +

    MAXIMUM_PRESSURE_RATIO_PER_STAGE

    +

    MODELS / +MAXIMUM_PRESSURE_RATIO_PER_STAGE

    +

    Description

    +

    MAXIMUM_PRESSURE_RATIO_PER_STAGE is used in the process of determining (at run time) the number of compressors +in a SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN +with unknown stages. The number of compressors is set such that there are just enough compressors to ensure no pressure ratios are above the given +MAXIMUM_PRESSURE_RATIO_PER_STAGE.

    +

    Functionality

    +

    This is an optional setting and is only supported for SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN with unknown stages, i.e. if STAGES are not specified.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: <reference to fluid model, must be defined in [MODELS]>
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: <maximum pressure ratio per stage>
    COMPRESSOR_CHART: <reference to compressor chart model used for all stages, must be defined in [MODELS] or [FACILITY_INPUTS]>
    INLET_TEMPERATURE: <inlet temperature for all stages>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    ...
    +

    Example

    +
    MODELS:
    - NAME: simplified_compressor_train_model
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    FLUID_MODEL: some_fluid_model
    COMPRESSOR_TRAIN:
    MAXIMUM_PRESSURE_RATIO_PER_STAGE: 3.5
    COMPRESSOR_CHART: some_compressor_chart
    INLET_TEMPERATURE: 30
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/MODELS/index.html b/docs/about/references/keywords/MODELS/index.html new file mode 100644 index 0000000000..0d11e32795 --- /dev/null +++ b/docs/about/references/keywords/MODELS/index.html @@ -0,0 +1,35 @@ + + + + + +MODELS | eCalc™ Docs + + + + +

    MODELS

    +

    MODELS

    +

    Description

    +

    Each element is specified in a list. These are later used as input to other models, or in the +INSTALLATIONS part of the setup by referencing their +NAME.

    +

    This part of the setup specifies models not having any input data and/or multi level models, that is models which use +other models (from both MODELS and from FACILITY_INPUTS).

    +

    Format

    +
    MODELS:
    - NAME: <name of model, for reference>
    TYPE: <model type>
    <other keywords according to TYPE>
    +

    Supported Model types

    +

    The supported types are:

    +
      +
    • FLUID
    • +
    • COMPRESSOR_CHART
    • +
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • +
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    • TURBINE
    • +
    • COMPRESSOR_WITH_TURBINE
    • +
    +

    The documentation of each of these is found on the Compressor Modelling page.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/NAME/index.html b/docs/about/references/keywords/NAME/index.html new file mode 100644 index 0000000000..a0e33c005a --- /dev/null +++ b/docs/about/references/keywords/NAME/index.html @@ -0,0 +1,25 @@ + + + + + +NAME | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html b/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html new file mode 100644 index 0000000000..bbd0f86023 --- /dev/null +++ b/docs/about/references/keywords/OPERATIONAL_SETTINGS/index.html @@ -0,0 +1,83 @@ + + + + + +OPERATIONAL_SETTINGS | eCalc™ Docs + + + + +

    OPERATIONAL_SETTINGS

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +OPERATIONAL_SETTINGS

    +

    Description

    +

    Used to define the operational settings in an ENERGY_USAGE_MODEL +of type PUMP_SYSTEM or COMPRESSOR_SYSTEM.

    +

    The rate [Sm3/day] through each consumer in the system may be specified in two different ways, either directly using +RATES, or by defining the rate fraction<RATE_FRACTIONS> for each consumer which is then multiplied with the +total system rate<TOTAL_SYSTEM_RATE>.

    +

    The suction pressure may either be specified with SUCTION_PRESSURE +which will then be the common suction pressure for all consumers in the system. Alternatively, +SUCTION_PRESSURES may be used to specify one suction pressure expression per consumer.

    +

    The discharge pressure may either be specified with DISCHARGE_PRESSURE +which will then be the common discharge pressure for all consumers in the system. Alternatively, +DISCHARGE_PRESSURES may be used to specify one discharge pressure expression per consumer.

    +

    CROSSOVER may be used to specify if there are any available cross-overs between the consumers in this operational +setting.

    +

    FLUID_DENSITIES may be used for pump systems to specify one fluid density expression per pump.

    +

    For all keywords where there is one expression per consumer, RATES, RATE_FRACTIONS, SUCTION_PRESSURES, +DISCHARGE_PRESSURES and FLUID_DENSITIES, the expressions must be entered in a +list where the number of elements is equal to the number of compressors<COMPRESSORS>/pumps<PUMPS>

    +

    RATES

    +

    A list with one expression per consumer specifying the rate [Sm3/day] for each consumer. Use either RATES or RATE_FRACTIONS, +not both in one operational setting.

    +

    RATE_FRACTIONS

    +

    A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, +TOTAL_SYSTEM_RATE for the ENERGY_USAGE_MODEL +is also required. Use either RATES or RATE_FRACTIONS, not both in one operational setting.

    +

    SUCTION_PRESSURES

    +

    A list with one expression per consumer specifying the suction pressure for each consumer. Use either SUCTION_PRESSURES or +SUCTION_PRESSURE, not both in the same operational setting.

    +

    Use SUCTION_PRESSURE to set the same suction pressure for all consumers in the system and +SUCTION_PRESSURES to specify one suction pressure expression per consumer.

    +

    DISCHARGE_PRESSURES

    +

    A list with one expression per consumer specifying the discharge pressure for each consumer. Use either DISCHARGE_PRESSURES +or DISCHARGE_PRESSURE, not both in the same operational setting.

    +

    Use DISCHARGE_PRESSURE to set the same discharge pressure for all consumers in the system and +DISCHARGE_PRESSURES to specify one discharge pressure expression per consumer.

    +

    FLUID_DENSITIES

    +

    Only supported for energy usage models<ENERGY_USAGE_MODEL> of type PUMP_SYSTEM. +A list with one expression per consumer specifying the fluid density for each consumer. If used, it will over-ride +FLUID_DENSITY for the PUMP_SYSTEM.

    +

    Use FLUID_DENSITY for the energy usage models<ENERGY_USAGE_MODEL> +to set one fixed fluid density for the entire system for all operational settings. Use +FLUID_DENSITIES for the operational setting<OPERATIONAL_SETTINGS> to vary the fluid density between consumers and operational settings.

    +

    CROSSOVER

    +

    CROSSOVER specifies if rates are to be crossed over to another consumer if rate capacity is exceeded. If the +energy consumption calculation is not successful for a consumer, and the consumer has a valid cross-over defined, the +consumer will be allocated its maximum rate and the exceeding rate will be added to the cross-over consumer. To avoid +loops, a consumer can only be either receiving or giving away rate. For a cross-over to be valid, the discharge pressure +at the consumer "receiving" overshooting rate must be higher than or equal to the discharge pressure of the "sending" +consumer. This is because it is possible to choke pressure down to meet the outlet pressure in a flow line with lower +pressure, but not possible to "pressure up" in the crossover flow line. +Some examples show how the crossover logic works:

    +

    Crossover is given as and list of integer values for the first position is the first consumer, second position is the +second consumer, etc. The number specifies which consumer to send cross-over flow to, and 0 signifies no cross-over +possible. Note that we use 1-index here.

    +

    Example 1:

    +

    Two consumers where there is a cross-over such that if the rate for the first consumer exceeds its capacity, +the excess rate will be processed by the second consumer. The second consumer can not cross-over to anyone.

    +
    CROSSOVER: [2, 0]
    +

    Example 2:

    +

    The first and second consumers may both send exceeding rate to the third consumer if their capacity is +exceeded.

    +
    CROSSOVER: [3,3,0]
    +

    Format

    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    COMPRESSORS:
    - NAME: export_compressor1
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: export_compressor2
    COMPRESSOR_MODEL: export_compressor_reference
    - NAME: injection_compressor
    COMPRESSOR_MODEL: injection_compressor_reference
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    OPERATIONAL_SETTINGS:
    - RATES:
    - SIM1;GAS_SALES
    - 0
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    - RATES:
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_SALES {/} 2
    - SIM1;GAS_INJ
    SUCTION_PRESSURE: 50
    DISCHARGE_PRESSURES:
    - 150
    - 150
    - SIM1;INJ_PRESSURE
    CROSSOVER: [3, 3, 0]
    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: (1000 {*} SIM1;WATER_PROD {+} 1050 {*} SIM2;WATER_PROD) {/} (SIM1;WATER_PROD {+} SIM2;WATER_PROD)
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITIES:
    - 1000
    - 1050
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/POWERLOSSFACTOR/index.html b/docs/about/references/keywords/POWERLOSSFACTOR/index.html new file mode 100644 index 0000000000..d8a7e7f9bc --- /dev/null +++ b/docs/about/references/keywords/POWERLOSSFACTOR/index.html @@ -0,0 +1,28 @@ + + + + + +POWERLOSSFACTOR | eCalc™ Docs + + + + +

    POWERLOSSFACTOR

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +POWERLOSSFACTOR

    +

    Description

    +

    A factor that may be added to account for power line losses. E.g. if you have a subsea installation with a power line to +another installation, there may be line losses. For a power line loss of 5%, POWERLOSSFACTOR +is set to 0.05 and the power required from the power source (generator set) will be

    +powerrequired=powersubsea1POWERLOSSFACTORpower_{required} = \frac{power_{subsea}}{1-POWERLOSSFACTOR} +

    where powersubseapower_{subsea} is the power calculated from the energy function (before power loss is taken into account).

    +

    Format

    +
    POWERLOSSFACTOR: <EXPRESSION>
    +

    Example

    +
    POWERLOSSFACTOR: 0.05
    +
    POWERLOSSFACTOR: SIM1;POWERLOSS {+} 0.05
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html b/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html new file mode 100644 index 0000000000..08e8c095a5 --- /dev/null +++ b/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT/index.html @@ -0,0 +1,21 @@ + + + + + +POWER_ADJUSTMENT_CONSTANT | eCalc™ Docs + + + + +

    POWER_ADJUSTMENT_CONSTANT

    +

    MODELS / +POWER_ADJUSTMENT_CONSTANT

    +

    Description

    +

    Optional constant MW adjustment added to the model. Only added if (electrical) POWER > 0.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <model type>
    ...
    POWER_ADJUSTMENT_CONSTANT: <value in MW>
    +

    Example

    +
    MODELS:
    - NAME: simple_compressor
    TYPE: SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    ...
    POWER_ADJUSTMENT_CONSTANT: 10 #MW
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/PRESSURE_CONTROL/index.html b/docs/about/references/keywords/PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..db026b1f0e --- /dev/null +++ b/docs/about/references/keywords/PRESSURE_CONTROL/index.html @@ -0,0 +1,28 @@ + + + + + +PRESSURE_CONTROL | eCalc™ Docs + + + + +

    PRESSURE_CONTROL

    +

    Description

    +

    PRESSURE_CONTROL is required when a compressor model is defined. This dictates how the compressor will be controlled, the method for pressure control are as follows:

    +
      +
    • DOWNSTREAM_CHOKE (default)
    • +
    • UPSTREAM_CHOKE
    • +
    • INDIVIDUAL_ASV_PRESSURE
    • +
    • INDIVIDUAL_ASV_RATE
    • +
    • COMMON_ASV
    • +
    • NONE
    • +
    +

    Further description on how each pressure control method works can be found in COMPRESSOR MODELLING

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <compressor model type>
    ...
    PRESSURE_CONTROL: <method for pressure control, DOWNSTREAM_CHOKE (default), UPSTREAM_CHOKE, , INDIVIDUAL_ASV_PRESSURE, INDIVIDUAL_ASV_RATE, COMMON_ASV or NONE>
    +

    Example

    +
    MODELS:
    - NAME: variable_compressor
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN
    ...
    PRESSURE_CONTROL: INDIVIDUAL_ASV_PRESSURE
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/PUMPS/index.html b/docs/about/references/keywords/PUMPS/index.html new file mode 100644 index 0000000000..6371979d1a --- /dev/null +++ b/docs/about/references/keywords/PUMPS/index.html @@ -0,0 +1,25 @@ + + + + + +PUMPS | eCalc™ Docs + + + + +

    PUMPS

    +

    INSTALLATIONS / [...] / +ENERGY_USAGE_MODEL / +PUMPS

    +

    Description

    +

    Used to define a list of pumps in a PUMP_SYSTEM ENERGY USAGE MODEL. Each pump is defined with a name and with a +facility input<FACILITY_INPUTS> reference to a pump type energy function.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: <name of compressor>
    CHART: <reference to pump model in facility inputs>
    +

    Example 1

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    +

    Example 2 (Detailed)

    +
    - NAME: waterinjection
    CATEGORY: PUMP
    ENERGY_USAGE_MODEL:
    2019-01-01:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump_a
    CHART: winj_pumpchart_PA03A
    - NAME: pump_b
    CHART: winj_pumpchart_PA03B
    - NAME: pump_c
    CHART: winj_pumpchart_PA03C
    - NAME: pump_d
    CHART: winj_pumpchart_PA03D
    - NAME: pump_e
    CHART: winj_pumpchart_PA03E
    TOTAL_SYSTEM_RATE: SIM8;WATER_INJ
    FLUID_DENSITY: 1030
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0, 0, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.5, 0.5, 0, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.33, 0.33, 0.34, 0, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.25, 0.25, 0.25, 0.25, 0]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    - RATE_FRACTIONS: [0.2, 0.2, 0.2, 0.2, 0.2]
    SUCTION_PRESSURE: 14
    DISCHARGE_PRESSURE: 250
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE/index.html b/docs/about/references/keywords/RATE/index.html new file mode 100644 index 0000000000..93212bb73f --- /dev/null +++ b/docs/about/references/keywords/RATE/index.html @@ -0,0 +1,38 @@ + + + + + +RATE | eCalc™ Docs + + + + +

    RATE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +RATE

    +

    Description

    +

    This can be used in three ways:

    + +

    Format

    +
    RATE: <rate expression>
    +
        - NAME: <model name>
    TYPE: <pump or compressor type>
    ...
    UNITS:
    RATE: <AM3_PER_HOUR>
    ...
    +

    Example

    +
    RATE: SIM1:GAS_PROD
    +
        - NAME: pump
    TYPE: PUMP_CHART_VARIABLE_SPEED
    ...
    UNITS:
    RATE: <AM3_PER_HOUR>
    ...
    +

    Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)

    +

    The attribute VALUE is required, while UNIT and TYPE are optional. Allowed values for +UNIT are kg/d and t/d, while STREAM_DAY and CALENDAR_DAY are valid for TYPE.

    +

    Format

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION:
    NAME: <emission name>
    RATE:
    VALUE: <emission rate>
    UNIT: <emission rate unit, default kg/d>
    TYPE: <emission rate type, default STREAM_DAY>
    +

    Example

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    NAME: CH4
    RATE:
    VALUE: 4
    UNIT: kg/d
    TYPE: STREAM_DAY
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE_FRACTIONS/index.html b/docs/about/references/keywords/RATE_FRACTIONS/index.html new file mode 100644 index 0000000000..2ac4852979 --- /dev/null +++ b/docs/about/references/keywords/RATE_FRACTIONS/index.html @@ -0,0 +1,21 @@ + + + + + +RATE_FRACTIONS | eCalc™ Docs + + + + +

    RATE_FRACTIONS

    +

    Description

    +

    A list with one expression per consumer specifying the rate fraction for each consumer. If this is used, TOTAL_SYSTEM_RATE for the ENERGY_USAGE_MODEL is also required. You can use either RATES or RATE_FRACTIONS; however, not both in one operational setting.

    +

    When specifying the rate fraction, the first fraction will relate to the first operational unit mentioned - i.e. if a pump system has two pumps, the first pump mentioned will relate to the rate fraction.

    +

    Note that in the case of a compressor, the same method is utilised for specifying rate fractions.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: <pump name>
    CHART: <chart reference>
    - NAME: <pump name>
    CHART: <chart reference>
    TOTAL_SYSTEM_RATE: <system rate>
    FLUID_DENSITY: <fluid density>
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: <[fraction 1, fraction 2]>
    ...
    - RATE_FRACTIONS: <[fraction 1, fraction 2]>
    ...
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    PUMPS:
    - NAME: pump1
    CHART: water_injection_pump_reference
    - NAME: pump2
    CHART: water_injection_pump_reference
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    FLUID_DENSITY: 1030
    OPERATIONAL_SETTINGS:
    - RATE_FRACTIONS: [1, 0]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    - RATE_FRACTIONS: [0.5, 0.5]
    SUCTION_PRESSURE: 3
    DISCHARGE_PRESSURE: 200
    FLUID_DENSITIES:
    - 1000
    - 1050
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/RATE_PER_STREAM/index.html b/docs/about/references/keywords/RATE_PER_STREAM/index.html new file mode 100644 index 0000000000..080fef1074 --- /dev/null +++ b/docs/about/references/keywords/RATE_PER_STREAM/index.html @@ -0,0 +1,24 @@ + + + + + +RATE_PER_STREAM | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/REGULARITY/index.html b/docs/about/references/keywords/REGULARITY/index.html new file mode 100644 index 0000000000..b150689c85 --- /dev/null +++ b/docs/about/references/keywords/REGULARITY/index.html @@ -0,0 +1,60 @@ + + + + + +REGULARITY | eCalc™ Docs + + + + +

    REGULARITY

    +

    INSTALLATIONS / +REGULARITY

    +

    Description

    +

    In eCalc™, consumers in an ENERGY USAGE MODEL are evaluated with the actual rate passing through them whilst +they are in operation. This actual rate is referred to as stream day (sd) rates. +Despite the consumers being evaluated with stream day rates, input files are often given in calender day (cd) rates. As expected from this definition, REGULARITY is closely related to the production efficiency (PE) of a facility.

    +

    Stream day rates can be expressed as:

    +stream day rate=calendar day rateregularitystream\ day\ rate = \frac{calendar\ day\ rate}{regularity} +

    To give an example of this, an input file may have a gas export rate for a whole year. However, this rate will take into account any downtime for the facility. So in reality, this calender day rate is not the rate the compressor will process whilst in operation that year. This will rather be the higher stream day rate.

    +

    An example of this can be seen in the figure below:

    +

    Regularity work flow example

    +

    For detailed modeling, it might be a better option to increase the resolution in the TIME_SERIES +inputs to capture down periods and variations in conditions rather than using regularity.

    +
    note
      +
    • Rates from reservoir simulations may be both stream day and calendar day.
    • +
    • If eCalc™ is used +without specifying REGULARITY, then regularity will default to 1.
    • +
    • All user defined input rates used in ENERGY_USAGE_MODEL are assumed to be calendar day rates.
    • +
    +

    Use in a DIRECT ENERGY USAGE MODEL

    +

    It should be noted that not all ENERGY USAGE MODELS are evaluated with stream day rates. +DIRECT ENERGY USAGE MODELS can be specified with the keyword CONSUMPTION_RATE_TYPE - where either CALENDAR_DAY or STREAM_DAY can be specified. +Note that the default input rate is STREAM_DAY rate - the opposite of the other models.

    +

    For further details on stream day rate vs. calendar day rate, see CONSUMPTION_RATE_TYPE.

    +
    ENERGY_USAGE_MODEL TypeCan use CONSUMPTION_RATE_TYPE?Evaluated rate type
    DIRECTStream/calendar day
    COMPRESSORStream day
    PUMPStream day
    COMPRESSOR_SYSTEMStream day
    PUMP_SYSTEMStream day
    TABULATEDStream day
    +

    Reporting

    +
      +
    • All fuel rates are reported in calendar days.
    • +
    • All power and volume rates results are reported in stream day rates. Note that the volume rates are only present in the .json file.
    • +
    +

    The reason for reporting calendar day rate is to account for potential downtime for process units, i.e. some units may not run all the time throughout a year due to different reasons. Typically all process units have some downtime, and regularity is +on average something closer to 0.99 over a longer period such as a year.

    +

    Format

    +

    REGULARITY can be specified by a single number or as an expression.

    +
    INSTALLATIONS:
    - NAME: <installation name>
    CATEGORY: <installation category>
    REGULARITY: <regularity expression>
    +

    Example

    +

    Constant regularity

    +
    REGULARITY: 0.95
    +

    Regularity from time series data

    +
    REGULARITY: SIM1;REGULARITY
    +

    Special: Combining calendar and stream day rates

    +

    If there is a need to combine stream day and calendar day rates in an expression, +(or to use a stream day rate from a TIME_SERIES source), one can manually do +what is necessary to obtain calendar day rates by dividing by regularity.

    +

    For example, combining a calendar day rate (SIM2;GAS_PROD_A) with stream day rate +(SIM1;GAS_PROD_B) on an installation with a fixed regularity of 0.95 can be done like:

    +
    RATE: SIM2:GAS_PROD_A {+} SIM1;GAS_PROD_B {*} 0.95
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/STAGES/index.html b/docs/about/references/keywords/STAGES/index.html new file mode 100644 index 0000000000..eb82608b1a --- /dev/null +++ b/docs/about/references/keywords/STAGES/index.html @@ -0,0 +1,37 @@ + + + + + +STAGES | eCalc™ Docs + + + + +

    STAGES

    +

    MODELS / +[...] / +STREAMS

    +

    Description

    +

    This keyword is used to define each stage in a compression train model. This is to be defined for all compressor models types.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: <compressor type>
    ...
    COMPRESSOR_TRAIN:
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to compressor chart model for first stage, must be defined in MODELS or FACILITY_INPUTS>
    ....
    +

    Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES

    +

    STAGES is a list of all the stages in the compressor train.

    +
      +
    • For each stage, a temperature in Celsius must be defined. It +is assumed that the gas is cooled down to this temperature ahead of the compression at this stage.
    • +
    • A reference to a +compressor chart needs to be specified for each stage.
    • +
    • For the first stage, it is required to have at least one stream of INGOING type. In addition, INTERSTAGE_CONTROL_PRESSURE cannot be used on the first stage.
    • +
    • Stages 2, ..., N may have a stream defined and it may be in- or outgoing. If an ingoing stream is defined, this stream +will be mixed with the outlet stream of the previous stage, obtaining a composition for the mixed fluid based on the +molar fractions and rate for each of them. If an outgoing stream is defined, the rate continuing to the next stage, will +be subtracted the rate of the outgoing stream.
    • +
    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    CONTROL_MARGIN: <Default value 0.0>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    CONTROL_MARGIN: <Default value 0.0>
    CONTROL_MARGIN_UNIT: <FRACTION or PERCENTAGE, default is PERCENTAGE>
    PRESSURE_DROP_AHEAD_OF_STAGE: <Pressure drop before compression stage [in bar]>
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <pressure control>
    DOWNSTREAM_PRESSURE_CONTROL: <pressure control>
    - ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ....
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    - COMPRESSOR_CHART: 2_stage_chart
    INLET_TEMPERATURE: 30
    - COMPRESSOR_CHART: 3_stage_chart
    INLET_TEMPERATURE: 35
    STREAM:
    - 2_stage_outlet
    - 3_stage_inlet
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #1st and 2nd stage
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE #3rd and 4th stage
    - COMPRESSOR_CHART: 4_stage_chart
    INLET_TEMPERATURE: 15
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/START/index.html b/docs/about/references/keywords/START/index.html new file mode 100644 index 0000000000..ebebff3af1 --- /dev/null +++ b/docs/about/references/keywords/START/index.html @@ -0,0 +1,32 @@ + + + + + +START | eCalc™ Docs + + + + +

    START

    +

    START

    +

    Description

    +

    The global start date for eCalc to begin energy and emission calculations. It is recommended that you have control +of which date you want data to be calculated and exported for, in particular when using LTP and FDE workflows.

    +

    The is , meaning that if you specify 2020-01-01, the whole year of 2020 is included in the output. The hours, minutes and seconds +of the day are implicitly set to "00:00:00", so the counting starts from midnight on January 1st 2020.

    +

    You can provide a date that is before the global time vector, but it is recommended to set it to the start of your timeseries data. Normally the +timeseries data provides this information directly, when specifying the first time step e.g. 2020-01-01, meaning that the data is valid from January 1st 2020, +but data by default has (INTERPOLATION_TYPE), which means that it backfills data, and then we will know how far back +to backfill data (ie defines this for the first period).

    +

    The cousin of is END and have similar behaviour, but check the reference for details, to make sure you have the correct understanding.

    +

    If is not specified, eCalc will make and educated GUESS on when the output data should start, but that may be incorrect, therefore it is recommended that you +stay in control of that to make sure you get correct output.

    +

    Format

    +
    START: <YYYY-MM-DD>
    +

    Example

    +

    Given an input dataset from 01-01-2000 - 01-01-2040, ignoring the first 20 years of data +can be achieved as follows:

    +
    START: 2020-01-01
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/STREAM/index.html b/docs/about/references/keywords/STREAM/index.html new file mode 100644 index 0000000000..b046fbe38f --- /dev/null +++ b/docs/about/references/keywords/STREAM/index.html @@ -0,0 +1,24 @@ + + + + + +STREAM | eCalc™ Docs + + + + +

    STREAM

    +

    MODELS / +[...] / STAGES +STREAMS

    +
    note

    This keyword is not to be confused with STREAMS - which is also utilised for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES

    +

    Description

    +

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES model type and is used under the STAGES keyword.

    +

    This is used to refer a STAGE to a previously defined STREAMS.

    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <reference stream from STREAMS. Needs to be an INGOING type stream.>
    - ...
    - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
    COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
    STREAM: <Optional>
    - <reference stream from STREAMS for one in- or outgoing stream. Optional>
    - <reference stream from STREAMS for another in- or outgoing stream. Optional>
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    - COMPRESSOR_CHART: 1_stage_chart
    INLET_TEMPERATURE: 20
    STREAM:
    - 1_stage_inlet
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/STREAMS/index.html b/docs/about/references/keywords/STREAMS/index.html new file mode 100644 index 0000000000..9efdcf0827 --- /dev/null +++ b/docs/about/references/keywords/STREAMS/index.html @@ -0,0 +1,27 @@ + + + + + +STREAMS | eCalc™ Docs + + + + +

    STREAMS

    +

    MODELS / +[...] / +STREAMS

    +

    Description

    +

    This keyword can only be utilised for a VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES model type.

    +

    STREAMS is a list of all in- and out-going streams for the compressor train.

    +
      +
    • The same equation of state (EOS) must be used for each INGOING stream fluid models
    • +
    • OUTGOING fluid models cannot be specified.
    • +
    +

    Format

    +
    MODELS:
    - NAME: <model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: <name of stream 1>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - NAME: <name of stream 2>
    TYPE: INGOING
    FLUID_MODEL: <reference to fluid model, must be defined in MODELS>
    - ...
    - NAME: <name of stream N>
    TYPE: OUTGOING
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    STREAMS:
    - NAME: 1_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_1
    - NAME: 3_stage_inlet
    TYPE: INGOING
    FLUID_MODEL: fluid_model_2
    - NAME: 2_stage_outlet
    TYPE: OUTGOING
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/SUCTION_PRESSURE/index.html b/docs/about/references/keywords/SUCTION_PRESSURE/index.html new file mode 100644 index 0000000000..b772a5865a --- /dev/null +++ b/docs/about/references/keywords/SUCTION_PRESSURE/index.html @@ -0,0 +1,27 @@ + + + + + +SUCTION_PRESSURE | eCalc™ Docs + + + + +

    SUCTION_PRESSURE

    +

    INSTALLATIONS / +[...] / +ENERGY_USAGE_MODEL / +[...] / +SUCTION_PRESSURE

    +

    Description

    +

    Used to define the suction pressure for some ENERGY_USAGE_MODEL +types and in OPERATIONAL_SETTINGS using +a fixed value or an expression. If an expression is used, a time series can be used so that the suction pressure of the unit can vary over the lifespan of the model.

    +

    Note that pressure values must be inputted in bar.

    +

    Format

    +
    SUCTION_PRESSURE: <suction pressure value/expression>
    +

    Example

    +
    SUCTION_PRESSURE: 10 
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TIME_SERIES/index.html b/docs/about/references/keywords/TIME_SERIES/index.html new file mode 100644 index 0000000000..8fb3638412 --- /dev/null +++ b/docs/about/references/keywords/TIME_SERIES/index.html @@ -0,0 +1,32 @@ + + + + + +TIME_SERIES | eCalc™ Docs + + + + +

    TIME_SERIES

    +

    TIME_SERIES /

    +

    Description

    +

    This keyword defines the inputs for time dependent variables, or "reservoir +variables". For many fields, this may be only one reservoir simulation model. But in some +cases, one might have several sources for reservoir and other relevant time series variables.

    +

    For example, a field may have a reservoir simulation model for some areas and decline curves in other area of +the reservoir. There may also be tie-ins which are affecting the energy/emissions on the field +installations. Also, there may be time profiles for other variables. +Therefore, a set of sources may be specified with a name, path to data and type. The name is +later referred to in the system of energy consumers defined under INSTALLATIONS.

    +

    Reservoir variables and other time varying data not coming from a reservoir simulation model can +be specified in a CSV file.

    +

    Required attributes

    +
    AttributesDescription
    NAMEReference name of time series
    TYPETime series type; DEFAULT or MISCELLANEOUS
    FILEPath to input file
    +

    Attributes dependent on time series type

    +
    DEFAULTMISCELLANEOUSDescription
    INTERPOLATION_TYPERIGHTRequired: LEFT, RIGHT or LINEARDefines how rates are interpolated between the given time steps (LEFT/RIGHT/LINEAR).
    EXTRAPOLATIONFALSEOptional. Default: FALSEDefines whether the rates in the source should be set to 0 after the last time step (FALSE), or equal to value at last time step after the time interval (TRUE).
    INFLUENCE_TIME_VECTOROptional. Default: TRUEOptional. Default: TRUEDetermine if time steps should contribute to global time vector. TRUE or FALSE. At least one time vector is required to be TRUE.
    +

    Example

    +
    TIME_SERIES:
    - NAME: SIM1
    TYPE: DEFAULT
    FILE: /path_to_model1/model_data.csv
    - NAME: DATA2
    TYPE: MISCELLANEOUS # e.g. variable flare, compressor suction and discharge pressures
    FILE: inputs/somecsvdata.csv
    INFLUENCE_TIME_VECTOR: FALSE
    EXTRAPOLATION: TRUE
    INTERPOLATION_TYPE: RIGHT
    +

    See TIME SERIES for more details about usage.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html b/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html new file mode 100644 index 0000000000..343ceecafc --- /dev/null +++ b/docs/about/references/keywords/TOTAL_SYSTEM_RATE/index.html @@ -0,0 +1,25 @@ + + + + + +TOTAL_SYSTEM_RATE | eCalc™ Docs + + + + +

    TOTAL_SYSTEM_RATE

    +

    INSTALLATIONS / [...] / +ENERGY_USAGE_MODEL / +TOTAL_SYSTEM_RATE

    +

    Description

    +

    Used to define the total system rate [Sm3/day] for ENERGY_USAGE_MODEL of type COMPRESSOR_SYSTEM +and PUMP_SYSTEM.

    +

    Format

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system [Sm3/day]>
    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    TOTAL_SYSTEM_RATE: <expression defining the total rate in the system>
    +

    Example

    +
    ENERGY_USAGE_MODEL:
    TYPE: PUMP_SYSTEM
    TOTAL_SYSTEM_RATE: SIM1;WATER_INJ
    +
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR_SYSTEM
    TOTAL_SYSTEM_RATE: SIM1;GAS_PROD {+} SIM1;GAS_LIFT
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html b/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html new file mode 100644 index 0000000000..53ea2f7f37 --- /dev/null +++ b/docs/about/references/keywords/TURBINE_EFFICIENCIES/index.html @@ -0,0 +1,20 @@ + + + + + +TURBINE_EFFICIENCIES | eCalc™ Docs + + + + +

    TURBINE_EFFICIENCIES

    +

    Description

    +

    TURBINE_EFFICIENCIES is a required to be specified under the TURBINE_MODEL keyword.

    +

    This must be specified as a fraction and must have equal length to the corresponding TURBINE_LOAD values.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_LOAD/index.html b/docs/about/references/keywords/TURBINE_LOAD/index.html new file mode 100644 index 0000000000..5468d9067d --- /dev/null +++ b/docs/about/references/keywords/TURBINE_LOAD/index.html @@ -0,0 +1,20 @@ + + + + + +TURBINE_LOAD | eCalc™ Docs + + + + +

    TURBINE_LOAD

    +

    Description

    +

    TURBINE_LOAD is a required to be specified under the TURBINE_MODEL keyword.

    +

    This must be specified in MW (Mega-Watts) and must have equal length to the corresponding TURBINE_EFFICIENCY values.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    ...
    TURBINE_LOADS: <list of power values in mega watt>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TURBINE_MODEL/index.html b/docs/about/references/keywords/TURBINE_MODEL/index.html new file mode 100644 index 0000000000..e0394fe499 --- /dev/null +++ b/docs/about/references/keywords/TURBINE_MODEL/index.html @@ -0,0 +1,20 @@ + + + + + +TURBINE_MODEL | eCalc™ Docs + + + + +

    TURBINE_MODEL

    +

    Description

    +

    When using a TURBINE it is required for a TURBINE_MODEL to be specified. This is done under the MODELS section.

    +

    A turbine model describes a gas-fired turbine that is coupled to a compressor or compression train. It is specified in a similar way to a GENERATORSET. TURBINE_LOAD, TURBINE_EFFICIENCY and LOWER_HEATING_VALUE needs to be inputted here.

    +

    Format

    +
    MODELS:
    - NAME: <name of turbine>
    TYPE: TURBINE
    LOWER_HEATING_VALUE: <lower heating value in MJ/Sm3>
    TURBINE_LOADS: <list of power values in mega watt>
    TURBINE_EFFICIENCIES: <list of efficiency values, fractions between 0 and 1 corresponding to 0-100%>
    POWER_ADJUSTMENT_CONSTANT: <Optional constant MW adjustment added to the model>
    +

    Example

    +
    MODELS:
    - NAME: compressor_train_turbine
    TYPE: TURBINE
    LOWER_HEATING_VALUE: 38 # MJ/Sm3
    TURBINE_LOADS: [0, 2.352, 4.589, 6.853, 9.125, 11.399, 13.673, 15.947, 18.223, 20.496, 22.767] # MW
    TURBINE_EFFICIENCIES: [0, 0.138, 0.210, 0.255, 0.286, 0.310, 0.328, 0.342, 0.353, 0.360, 0.362]
    POWER_ADJUSTMENT_CONSTANT: 10
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/TYPE/index.html b/docs/about/references/keywords/TYPE/index.html new file mode 100644 index 0000000000..037f562d06 --- /dev/null +++ b/docs/about/references/keywords/TYPE/index.html @@ -0,0 +1,53 @@ + + + + + +TYPE | eCalc™ Docs + + + + +

    TYPE

    +

    [...] / +TYPE /

    +

    Description

    +

    The TYPE is always a string. The allowed strings, and the resulting change in behavior, +will depend on where TYPE is used:

    +

    Use in FACILITY_INPUTS

    +
      +
    • ELECTRICITY2FUEL
    • +
    • TABULAR
    • +
    • COMPRESSOR_TABULAR
    • +
    • PUMP_CHART_SINGLE_SPEED
    • +
    • PUMP_CHART_VARIABLE_SPEED
    • +
    +

    Use in TIME_SERIES

    +
      +
    • MISCELLANEOUS
    • +
    • DEFAULT
    • +
    +

    Use in ENERGY_USAGE_MODEL

    +
      +
    • DIRECT
    • +
    • COMPRESSOR
    • +
    • PUMP
    • +
    • COMPRESSOR_SYSTEM
    • +
    • PUMP_SYSTEM
    • +
    • TABULATED
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    +

    Use in MODELS

    +
      +
    • FLUID
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    • VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    • +
    • SINGLE_SPEED_COMPRESSOR_TRAIN
    • +
    • TURBINE
    • +
    • COMPRESSOR_WITH_TURBINE
    • +
    • SIMPLIFIED_VARIABLE_SPEED_COMPRESSOR_TRAIN
    • +
    +

    Format

    +
    TYPE: <type>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/UNITS/index.html b/docs/about/references/keywords/UNITS/index.html new file mode 100644 index 0000000000..e2ed045d35 --- /dev/null +++ b/docs/about/references/keywords/UNITS/index.html @@ -0,0 +1,26 @@ + + + + + +UNITS | eCalc™ Docs + + + + +

    UNITS

    +

    Description

    +

    UNITS is a keyword that can be specified for PUMP and COMPRESSOR CHARTS. This is a requirement and must be specified.

    +

    For pumps this must be specified in FACILITY_INPUTS, whilst for compressors it must be within MODELS.

    +

    Format

    +

    Pumps

    +
    FACILITY_INPUTS:
    - NAME: <pump chart name>
    ...
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <Pump efficiency unit FRACTION or PERCENTAGE.>
    +

    Compressors

    +
    MODELS:
    - NAME: <name of chart, for reference>
    ...
    UNITS:
    RATE: <rate unit, currently only AM3_PER_HOUR supported>
    HEAD: <polytropic head unit, M, KJ_PER_KG, JOULE_PER_KG supported>
    EFFICIENCY: <polytropic efficiency unit, FRACTION and PERCENTAGE.>
    ....
    +

    Example

    +

    Pumps

    +
    FACILITY_INPUTS:
    - NAME: single_speed_pump
    TYPE: PUMP_CHART_SINGLE_SPEED
    ...
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: PERCENTAGE
    +

    Compressors

    +
    MODELS:
    - NAME: predefined_variable_speed_compressor_chart
    TYPE: COMPRESSOR_CHART
    CHART_TYPE: VARIABLE_SPEED
    UNITS:
    RATE: AM3_PER_HOUR
    HEAD: M
    EFFICIENCY: FRACTION
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html b/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html new file mode 100644 index 0000000000..e5b4178d81 --- /dev/null +++ b/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL/index.html @@ -0,0 +1,25 @@ + + + + + +UPSTREAM_PRESSURE_CONTROL | eCalc™ Docs + + + + +

    UPSTREAM_PRESSURE_CONTROL

    +

    MODELS / +[...] / +INTERSTAGE_CONTROL_PRESSURE +/ UPSTREAM_PRESSURE_CONTROL

    +

    Description

    +

    This keyword is used only for VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES type. It is used within the INTERSTAGE_CONTROL_PRESSURE keyword.

    +

    The pressure control method upstream (before) the interstage pressure is specified in this keyword. +For more explanation see Variable speed compressor train model with multiple streams and pressures.

    +

    Format

    +
    MODELS:
    - NAME: <compressor model name>
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: <DOWNSTREAM_CHOKE / UPSTREAM_CHOKE / INDIVIDUAL_ASV_RATE>
    ...
    +

    Example

    +
    MODELS:
    - NAME: compressor_model
    TYPE: VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES
    ...
    STAGES:
    ...
    INTERSTAGE_CONTROL_PRESSURE:
    UPSTREAM_PRESSURE_CONTROL: UPSTREAM_CHOKE
    DOWNSTREAM_PRESSURE_CONTROL: INDIVIDUAL_ASV_RATE
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/VARIABLES/index.html b/docs/about/references/keywords/VARIABLES/index.html new file mode 100644 index 0000000000..a4689665b2 --- /dev/null +++ b/docs/about/references/keywords/VARIABLES/index.html @@ -0,0 +1,18 @@ + + + + + +VARIABLES | eCalc™ Docs + + + + +

    VARIABLES

    +

    VARIABLES

    +

    Description

    +

    This keyword is used to define variables which can be used throughout the YAML file via the use of expressions. +These variables can be based on time or can be independent.

    +

    Information about defining and using variables can be seen here.

    + + \ No newline at end of file diff --git a/docs/about/references/keywords/VENTING_EMITTERS/index.html b/docs/about/references/keywords/VENTING_EMITTERS/index.html new file mode 100644 index 0000000000..d7b6174f13 --- /dev/null +++ b/docs/about/references/keywords/VENTING_EMITTERS/index.html @@ -0,0 +1,39 @@ + + + + + +VENTING_EMITTERS | eCalc™ Docs + + + + +

    VENTING_EMITTERS

    +

    New definition of VENTING_EMITTERS from eCalc v8.8!

    +
    +

    INSTALLATIONS / +VENTING_EMITTERS

    +
    RequiredChild ofChildren/Options
    YesINSTALLATIONSNAME
    EMISSION_NAME
    CATEGORY
    EMITTER_MODEL
    +
    important
      +
    • eCalc version 8.8: Updated definition of VENTING_EMITTERS. New keyword EMISSION is replacing EMITTER_MODEL and EMISSION_NAME. Now possible to define UNIT and TYPE for emission rate.
    • +
    • eCalc version 8.7: VENTING_EMITTERS keyword is replacing the DIRECT_EMITTERS keyword.
    • +
    • eCalc version 8.6 and earlier: Use DIRECT_EMITTERS as before.
    • +
    +

    eCalc version 8.7 and before: Description

    +

    The VENTING_EMITTERS keyword covers the direct emissions on the installation +that are not consuming energy. The attributes NAME, +EMISSION_NAME, CATEGORY and +EMITTER_MODEL are required.

    +

    Format

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    EMISSION_NAME: <emission name>
    CATEGORY: <category>
    EMITTER_MODEL: <emitter model>
    +

    Example

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    EMISSION_NAME: CH4
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    ...
    - NAME: SomeOtherVentingEmitter
    EMISSION_NAME: C2H6
    CATEGORY: COLD-VENTING-FUGITIVE
    EMITTER_MODEL:
    <emitter model data>
    +

    eCalc from version 8.8: Description

    +

    The attributes NAME, CATEGORY and +EMISSION are required.

    +

    Format

    +
    VENTING_EMITTERS:
    - NAME: <emitter name>
    CATEGORY: <category>
    EMISSION:
    <emission data>

    +

    Example

    +
    VENTING_EMITTERS:
    - NAME: SomeVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    <emission data>
    ...
    - NAME: SomeOtherVentingEmitter
    CATEGORY: COLD-VENTING-FUGITIVE
    EMISSION:
    <emission data>
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/include/index.html b/docs/about/references/keywords/include/index.html new file mode 100644 index 0000000000..9e62d0f53b --- /dev/null +++ b/docs/about/references/keywords/include/index.html @@ -0,0 +1,37 @@ + + + + + +!include | eCalc™ Docs + + + + +

    !include

    +

    Description

    +

    You can use !include to separate your model into several files. !include +can be used as value in a KEY: VALUE mapping, or as a value in a list.

    +

    Format

    +
    !include <some_yaml_file.yaml>
    +
    tip

    You can use ecalc show yaml <model_file> to see the read yaml with !include processed.

    New in v7.2.

    +

    Example 1 - include map/object into list item

    +

    !include can be used to insert a map/object as a single list element

    +
    main.yaml
     INSTALLATIONS:
    - !include installationA.yaml
    - NAME: installationB
    ...
    +
    installationA.yaml
        NAME: installationA
    ...

    +

    This is the same as

    +
    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    ...
    - NAME: installationB
    ...

    +

    Example 2 - include map/object into object value

    +

    !include can be used to insert a map/object as a value in a KEY: VALUE mapping

    +
    main.yaml
     INSTALLATIONS:
    - NAME: installationA
    FUELCONSUMERS:
    - NAME: consumerB
    ENERGY_USAGE_MODEL: !include consumerB.yaml
    +
    consumerB.yaml
        TYPE: COMPRESSOR
    ...

    +

    This is the same as

    +
    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    FUELCONSUMERS:
    - NAME: consumerB
    ENERGY_USAGE_MODEL:
    TYPE: COMPRESSOR
    ...

    +

    Example 3 - include list into object value

    +

    !include can be used to insert a list as a value in a KEY: VALUE mapping

    +
    main.yaml
    INSTALLATIONS: !include installations.yaml

    +
    installations.yaml
        - NAME: installationA
    ...
    - NAME: installationB
    ...

    +

    This is the same as

    +
    main.yaml
         INSTALLATIONS:
    - NAME: installationA
    ...
    - NAME: installationB
    ...
    + + \ No newline at end of file diff --git a/docs/about/references/keywords/index.html b/docs/about/references/keywords/index.html new file mode 100644 index 0000000000..8e5ca0d79b --- /dev/null +++ b/docs/about/references/keywords/index.html @@ -0,0 +1,18 @@ + + + + + +YAML keywords | eCalc™ Docs + + + + +

    Keywords

    +

    eCalc models are defined using keywords in YAML (YAML Ain't Markup Language) model files. This +page gives an overview of the top level keywords as well as and overview of all available keywords in +eCalc with a short description.

    +

    Top level keywords

    +
    KeywordRequiredDescription
    ENDNoGlobal end date for eCalc calculations.
    FACILITY_INPUTSYesList of input files from facility characterization.
    FUEL_TYPESNoDefinition(s) the fuel type(s) being used in the model and the corresponding emissions.
    INSTALLATIONSYesDefinitions of the system of energy consumers on each installation (e.g. platform).
    STARTNoGlobal start date for eCalc calculations.
    TIME_SERIESYesList of input sources (files) containing all time series data.
    + + \ No newline at end of file diff --git a/docs/category/documentation/index.html b/docs/category/documentation/index.html new file mode 100644 index 0000000000..fe7c1f6305 --- /dev/null +++ b/docs/category/documentation/index.html @@ -0,0 +1,13 @@ + + + + + +Documentation | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/category/guides/index.html b/docs/category/guides/index.html new file mode 100644 index 0000000000..ead4c73d21 --- /dev/null +++ b/docs/category/guides/index.html @@ -0,0 +1,13 @@ + + + + + +Guides | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/changelog/index.html b/docs/changelog/index.html new file mode 100644 index 0000000000..be8199a5df --- /dev/null +++ b/docs/changelog/index.html @@ -0,0 +1,597 @@ + + + + + +Changelog | eCalc™ Docs + + + + +

    Changelog

    +

    8.11.0 (2024-03-18)

    +

    Features

    +
      +
    • add file context to model validation error (#401) (0a75da4)
    • +
    • check that file exist when validating yaml for run (#388) (441722f)
    • +
    • validate expression reference tokens (#404) (2af9d13)
    • +
    +

    Bug Fixes

    +
      +
    • add control margin to compressor stage validation (#405) (0f1e6f8)
    • +
    +

    Documentation

    + +

    Miscellaneous Chores

    +
      +
    • allow venting emitters without fuelconsumers (#392) (f75f18f)
    • +
    • also rounding of results for show command, cache and after resampling (4b04729)
    • +
    • fix failing tests (4b04729)
    • +
    • sum and split electrical and mechanical power (#406) (86754cc)
    • +
    • switch license to LGPLv3 (424635e)
    • +
    • update contribution docs (b428c03)
    • +
    • update snapshots (4b04729)
    • +
    • upgrade dependencies (#410) (016c0bd)
    • +
    • upgrade node to 18 for codespace (#399) (14c1793)
    • +
    +

    Code Refactoring

    +
      +
    • all rounding of numers to a given precision is now performed after all calculations are finished (#400) (4b04729)
    • +
    • move rounding to result objects (#402) (383e7f6)
    • +
    • remove unnecessary collection handling in expression (#390) (650aa74)
    • +
    +

    8.10.0 (2024-02-16)

    +

    Bug Fixes

    +
      +
    • add name constraints to yaml classes (#358) (f586181)
    • +
    • add pydantic ndarray type (d005ed4)
    • +
    • convert numpy to python (2be1736)
    • +
    • custom date format in json (#359) (d62e650)
    • +
    • error when creating references (ed1060e)
    • +
    • expression error messages (#361) (6a62db5)
    • +
    • generate schema for energy usage models (c448942)
    • +
    • generate schema for models and generator set model (b87fd2f)
    • +
    • get_max_rate for single speed train (00cd9c5)
    • +
    • get_max_rate for variable speed train with and without multiple streams and pressures (#374) (00cd9c5)
    • +
    • issue with TimeSeriesBoolean becoming float (3622927)
    • +
    • libecalc: handle dict, list and expression when parsing expression (1b2ee32)
    • +
    • libecalc: init pydantic v2 update (158b90d)
    • +
    • libecalc: optional pressure control (42cedb7)
    • +
    • libecalc: pydantic models not automatically parsed/converted (af68417)
    • +
    • libecalc: results serialization and parsing (44b3f57)
    • +
    • libecalc: tests (edc9c4c)
    • +
    • libecalc: update pydantic (1ab5105)
    • +
    • none to nan conversion (e8b720a)
    • +
    • remove deprecated validator (9765874)
    • +
    • remove generate_json_schemas function (#382) (cf5a16d)
    • +
    • resample method for TimeSeriesBoolean (#349) (8feaf6c)
    • +
    • use discriminated union (d66fed3)
    • +
    • use EcalcError and provide context (975d3b1)
    • +
    • validation using yaml classes (#377) (66aada1)
    • +
    • yaml models schema (b5d3451)
    • +
    +

    Documentation

    +
      +
    • fix broken links (ab80399)
    • +
    • fixed the Error in Simple model example in eCalc Docs, variable name started from salt_water to sea_water in full eCalc YAML model (#369) (2961d2f)
    • +
    • remove subgraph markdown styling (3632fbd)
    • +
    • remove v2 expectations (#386) (0595fbd)
    • +
    • The new update of Drogon eCalc model with a single speed pump (#241) (a22ffe8)
    • +
    • update description of control mechanisms in a variable speed compressor chart (#291) (67c3476)
    • +
    • update info about time series (#352) (aff50d7)
    • +
    • update migration guide venting emitters (#337) (551e1e1)
    • +
    • Wrong_category_for_directly_driven_compressor_in_simple_model_example_in_eCalc_Docs (#368) (e01080b)
    • +
    +

    Miscellaneous Chores

    + +

    Code Refactoring

    +
      +
    • allow str in resource stream (#371) (fe9f3f2)
    • +
    • remove inheritance of CompressorTrainResult (3ab8964)
    • +
    • remove need for id on components etc (#347) (f9e32ae)
    • +
    +

    Tests

    +
      +
    • add test for yaml validation errors (#378) (e5a0772)
    • +
    +

    8.9.0 (2024-01-11)

    +

    Bug Fixes

    +
      +
    • don't run pdoc on application module (abbb704)
    • +
    +

    Documentation

    +
      +
    • maximum pressure ratio per stage in docs (#338) (261749f)
    • +
    • remove docstring for number of compressors (#339) (be148ba)
    • +
    • update migration guide economics (#335) (c4b50d6)
    • +
    +

    Miscellaneous Chores

    + +

    Code Refactoring

    + +

    8.8.0 (2023-12-27)

    +

    ⚠ BREAKING CHANGES

    +
      +
    • include direct emitter results in ltp export (#305)
    • +
    +

    Features

    +
      +
    • add emitter rate type to venting emitters (#312) (d6e16fa)
    • +
    +

    Bug Fixes

    +
      +
    • correct changelog for venting emitters (#324) (eff911e)
    • +
    • correct fallback to pydantic v1 (#332) (4f89e48)
    • +
    • include direct emitter results in ltp export (#305) (f6b6371)
    • +
    • remove interpolation method (#321) (d125552)
    • +
    • support mismatching timesteps in ltp delta profile (#319) (32f0289)
    • +
    +

    Documentation

    +
      +
    • remove costs mentioned in docs (#322) (ee03965)
    • +
    • remove reference to fuel price- and tax in drogon example (#323) (963d9ea)
    • +
    • update docs for v8.8 release (#334) (153f7c4)
    • +
    • update PR template with checkboxes for stuff we forget (09f52bd)
    • +
    +

    Miscellaneous Chores

    + +

    Code Refactoring

    +
      +
    • move simple result to presentation (#318) (e90a6eb)
    • +
    • use time series collection yaml classes (#328) (c36f62b)
    • +
    +

    Tests

    +
      +
    • update tests with maximum rate (2cb09e2)
    • +
    +

    Continuous Integration

    + +

    8.7.0 (2023-12-05)

    +

    Bug Fixes

    +
      +
    • bug in compressor with turbine models with multiple streams and only one date (#296) (8c2c786)
    • +
    • deep copy when aggregating model results (#311) (53c8df4)
    • +
    • do not merge model results (#304) (34cebc4)
    • +
    • error message when model/facility input does not exist (4437032)
    • +
    +

    Documentation

    +
      +
    • update documentation with info about direct emitters name change (#310) (990f3c2)
    • +
    +

    Miscellaneous Chores

    + +

    Code Refactoring

    +
      +
    • change emission rate type to calendar day (#300) (f8e5052)
    • +
    • change name from direct to venting emitter (#303) (8d03822)
    • +
    • remove duplicated function (ba48dcd)
    • +
    +

    Continuous Integration

    + +

    8.7.0

    +

    ⚠ BREAKING CHANGES

    +
      +
    • Change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file (#303)
    • +
    +

    8.6.0 (2023-11-21)

    +

    ⚠ BREAKING CHANGES

    +
      +
    • remove economy from ecalc (#282)
    • +
    • graph.components and graph.get_component renamed to nodes and get_node
    • +
    • add type to consumers in system
    • +
    • change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file (#303)
    • +
    +

    Features

    + +

    Bug Fixes

    +
      +
    • ensure that start date in global time vector is consistent with the requested output frequency (#269) (e8ef9b9)
    • +
    • make iteration loops for simplified train consistent (#263) (b066c74)
    • +
    • wrong handling of values and timesteps in temporal models (#261) (4e20264)
    • +
    +

    Documentation

    + +

    Miscellaneous Chores

    +
      +
    • add INVALID_INPUT and INVALID_MAX_RATE (d651ed6)
    • +
    • add test of get_max_standard_rate for single speed compressor train (d651ed6)
    • +
    • clean up common module (#277) (e1959ab)
    • +
    • extend tests of time series resampling (e8ef9b9)
    • +
    • improve algorithm to generate generic variable speed compressor charts from input points (#276) (b257567)
    • +
    • make sure no mismatch between timestamps and time series values (#251) (ae6ade9)
    • +
    • only calculate max standard rate for time steps with valid model input (#252) (d651ed6)
    • +
    • possibility to include start and end date in resampling (e8ef9b9)
    • +
    • update changelog for v8.6 release (#288) (af32274)
    • +
    • update dependencies for new v8.6 release (#289) (5a245a3)
    • +
    +

    Code Refactoring

    +
      +
    • add option to skip header validation on resource files (#260) (883b7e6)
    • +
    • calculate timesteps separately (#284) (bd9d684)
    • +
    • collect results in priority optimizer (16b9ccc)
    • +
    • common consumer system type (fe09263)
    • +
    • common yaml system v2 class (98198fc)
    • +
    • consistent naming of nodes in graph (676c7b8)
    • +
    • generic graph class (6f63e40)
    • +
    • move into presentation layer (#271) (52530e0)
    • +
    • remove economy from ecalc (#282) (a50148c)
    • +
    • rename Stream to StreamConditions (cf908ec)
    • +
    • rename to component graph (9629f22)
    • +
    • system v2 stream conditions format (#257) (e228e8b)
    • +
    • use common consumer system dto class (#267) (3c58b53)
    • +
    • use PriorityOptimizer outside ConsumerSystem (f1af9e6)
    • +
    +

    8.5.0 (2023-10-30)

    +

    Features

    + +

    Bug Fixes

    +
      +
    • don't require HCEXPORT in editor (#254) (e497245)
    • +
    • ensure unique names in system v2 (#238) (3634a9e)
    • +
    • rate when multiple streams model (#214) (892720e)
    • +
    • set_regularity fixture (#213) (e9ea04f)
    • +
    • update ecalc validation for yaml file in web (#243) (2981f2c)
    • +
    • use file reference instead of urls in docs (#216) (35c4f68)
    • +
    • wrong data for boilers and heaters in ltp-results (#237) (851e831)
    • +
    +

    Documentation

    +
      +
    • add missing keywords surge control margin (#239) (8b97673)
    • +
    • update changelog for upcoming release v8.4 (#203) (66671e0)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add init file to ecalc_cli (af6bee9)
    • +
    • add chart area flag to test of full recirculation (0c45251)
    • +
    • add check for zero efficiency in stage (3ea3035)
    • +
    • add dependabot actions monitoring (#219) (d5f5dfd)
    • +
    • add ModelInputFailureStatus (6b0c728)
    • +
    • add NO_FLOW ChartAreaFlag (0c45251)
    • +
    • add rate type to pump model result (#209) (21deeb7)
    • +
    • cli: add all energy usage models load_results test (#220) (e09febb)
    • +
    • deps: bump actions/cache from 3.0.11 to 3.3.2 (#223) (087867c)
    • +
    • deps: bump actions/checkout from 2 to 4 (#221) (bcc2f81)
    • +
    • deps: bump actions/setup-node from 3 to 4 (cb7e816)
    • +
    • deps: bump snok/install-poetry from 1.3.3 to 1.3.4 (#222) (80dab72)
    • +
    • fix tests (6b0c728)
    • +
    • handle requested pressures correct for compressors without system (#233) (445fc9d)
    • +
    • handle requested pressures for compressor systems (#215) (6b05439)
    • +
    • more robust surge control margin calculation (#229) (74b4e59)
    • +
    • move feature experimental to main method for requested pressures (#230) (00ad854)
    • +
    • pre-commit (a310df2)
    • +
    • show correct version (#211) (f8de992)
    • +
    • update dependencies (#212) (c9b8506)
    • +
    • update dependencies (#259) (e7f031f)
    • +
    • update python deps (#247) (514da16)
    • +
    • update system v2 tests to only use one crossover (#205) (aa65163)
    • +
    • update zero efficiency error message (#258) (5be6fe4)
    • +
    • upgrade packages (#255) (035aad1)
    • +
    • version must be updated in version.py (63eb672)
    • +
    • warn user about full recirculation of fluids in a compressor stage in a multiple streams and pressures compressor train (#196) (0c45251)
    • +
    +

    Code Refactoring

    +
      +
    • implement evaluate streams in models (#232) (df6b6b0)
    • +
    • libecalc.core: stream as input (#224) (e06f970)
    • +
    • move crossover to component_conditions for system v2 (#204) (018b472)
    • +
    • move RateType into common module (#253) (c7f5a99)
    • +
    • move validate operational conditions from compressor train, rename to validate model input (#256) (6b0c728)
    • +
    • remove regularity our of core/domain (#246) (714888b)
    • +
    • remove temporal operational settings system v2 (#244) (a1d2ce6)
    • +
    • rename streamCondition to stream (32885b5)
    • +
    • separate optimization from system (#245) (b580e3d)
    • +
    • use Graph object to build graph (#250) (ce65dba)
    • +
    +

    8.4.0 (2023-09-25)

    +

    Features

    +
      +
    • add compressor inlet- and outlet pressures to models/train level (#152) (9b95ee5)
    • +
    • add input compressor pressures to output (#140) (74e3e56)
    • +
    • add support for system v2 in FDE (e6d1f93)
    • +
    • add support for temporal operational settings in v2 (f2b217a)
    • +
    +

    Bug Fixes

    +
      +
    • add system v2 subcomponents to components list (b61a0fe)
    • +
    • add system v2 to generator set consumers (#166) (d40558e)
    • +
    • avoid name conflicts with ecalc cli package (#197) (140c448)
    • +
    • bug in asset_result_dto (#170) (c45a7ac)
    • +
    • correct type for total system rate in pump system v2 (#167) (5559cdd)
    • +
    • do not return actual rate in results for compressor sampled since it can not be calculated (#190) (74fcfd8)
    • +
    • expression type in system v2 (5318fb5)
    • +
    • forbid extra attributes in TimeSeries (#195) (24c27bb)
    • +
    • full run with system v2 components (#147) (2279ef4)
    • +
    • generate system v2 schema (#161) (a27c392)
    • +
    • handle all situations where zero mass rate is entering a compressor stage in a multiple streams compressor train (#164) (ba9235e)
    • +
    • handle dates in yaml correctly (e9c28d0)
    • +
    • issue with crossover rate calculation in system v2 (#188) (623a1cf)
    • +
    • make ecalc installable again (58693de)
    • +
    • rate_type was snake_case in json output (#172) (dc82a88)
    • +
    • requested pressures not always an attribute (#155) (0078405)
    • +
    • system v2 evaluation (6494257)
    • +
    • use results base (#199) (cebde33)
    • +
    • wrongly accessed rate in pump system v2 (56da4b2)
    • +
    +

    Documentation

    +
      +
    • add further explanation to generic workflow (ddcb462)
    • +
    • add generic workflow (30553e0)
    • +
    • add powerlossfactor in generic workflow (3d152c8)
    • +
    • changelog v8.4 add input compressor pressures to output (#150) (46e308f)
    • +
    • correct order of diagrams (71a07f5)
    • +
    • make mermaid diagram of workflow render correctly (b1c5b23)
    • +
    • make mermaid workflow diagram render correctly (7a99b5b)
    • +
    • update changelog for v8.3 (b424176)
    • +
    • update workflow with comments (a71abfe)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add pressure drop ahead of stage to inlet pressure before choking (#146) (e5368de)
    • +
    • add rate type to compressor model results and convert to time series (#187) (c86bf3f)
    • +
    • add validation for missing headers in csv resource file (#191) (60e8403)
    • +
    • adding test of full recirculation in multiple streams compressor trains (ba9235e)
    • +
    • calculate correct standard condition density when mixing two streams (ba9235e)
    • +
    • clarify neqsim depenedency in ecalc (#198) (d6635a9)
    • +
    • docs: fix equations showing twice (#141) (2455e34)
    • +
    • enable mypy for cli (#189) (da713fc)
    • +
    • fix spelling errors in changelog (de3c2eb)
    • +
    • remove unnecessary folders (#186) (e861d87)
    • +
    • rename conflicting file names (#153) (654175e)
    • +
    • revert nan to num in expressions (#202) (2f95c29)
    • +
    • update archive (#181) (03abf64)
    • +
    • update deps to latest (0f30f49)
    • +
    +

    Code Refactoring

    +
      +
    • change typ to rate_type for TimeSeriesRate (#89) (8be87dd)
    • +
    • generate asset/ecalc model schema (#157) (6818848)
    • +
    • generate direct emitter schema (#180) (924526a)
    • +
    • generate facility type schema (#182) (9428979)
    • +
    • generate fuel consumer schema (#160) (9f580c1)
    • +
    • generate fuel types schema (#179) (e17ef3b)
    • +
    • generate generator set schema (#165) (ab25e05)
    • +
    • generate installation schema (#159) (030a44b)
    • +
    • generate time series schema (#176) (b02d68d)
    • +
    • improve error message when wrong CURVE-keyword input to single speed compressor (#173) (9502bcc)
    • +
    • improve error message when wrong CURVES-keyword input to variable speed compressor (#175) (714e867)
    • +
    • merge functionality for results (#193) (db1e9b1)
    • +
    • move common properties for system v2 operational settings (10b5e07)
    • +
    • move yaml system into package (b477b15)
    • +
    • remove condition and power_loss_factor from system v2 (2507bb9)
    • +
    • remove rate_fractions from system v2 (ba788fd)
    • +
    • use common Period,Periods classes (76366ce)
    • +
    • use common to_camel_case function (#171) (f5f0c2f)
    • +
    • use yaml prefix for yaml klasses/modules (#174) (e91ac2a)
    • +
    +

    8.3.0 (2023-08-11)

    +

    ⚠ BREAKING CHANGES

    +
      +
    • energy model type not allowed to change over time (#131)
    • +
    +

    Features

    + +

    Bug Fixes

    +
      +
    • avoid zero discharge pressure after validation of operational conditions (830c75e)
    • +
    • bug fix to joining results from different temporal models with compressor train models having multiple inlet or outlet streams (#63) (da3144a)
    • +
    • json schema accepts MAXIMUM_DISCHARGE_PRESSURE for single speed train (#86) (a18de1e)
    • +
    • json schema allow stages to have control_margin and control_margin_unit (#90) (2415534)
    • +
    • make apply_condition work for 2D numpy arrays also (#78) (bce91cb)
    • +
    • make sure that suction pressure is less than or equal to discharge pressure for compressor train (#104) (d218273)
    • +
    • parse scientific notation numbers in expression (#85) (fdf322b)
    • +
    • parse spaces as thousand separators from excel (#107) (5a3bd6a)
    • +
    • pump results wrong when resampled (#71) (daffdb3)
    • +
    • resample emissions correctly to create valid json (3c9b52e)
    • +
    • result of validation of operational conditions when rate is zero should always be valid (9de403c)
    • +
    • validate time steps where rate is different from zero, not only when larger than zero (6ce07c4)
    • +
    • wrong standard_conditions_density when mixing two fluids (a16a695)
    • +
    +

    Documentation

    +
      +
    • fix generic compressor example (38870a3)
    • +
    • fix links (#116) (62cadfc)
    • +
    • how to migrate from 8.1 to 8.2 (4d3be58)
    • +
    • remove unnecessary information from migration guide (4730538)
    • +
    • specify only gensets for boiler/heater (#53) (2df3bdf)
    • +
    • update changelog 8.2 with changes for ltp- and stp (#43) (6fe4b77)
    • +
    • update changelog for 8.2 (3ccea74)
    • +
    • update docs and changelog for energy models (#133) (8f0d716)
    • +
    • update documentation for heaters and boilers (#52) (2bef707)
    • +
    • update migration guide with ltp- and stp changes (#42) (4b0b230)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add 8.3 changelog (9f4a4af)
    • +
    • add fluid mixing checks (53c1626)
    • +
    • add fluid mixing checks (0f3ddca)
    • +
    • add installation filter to flare nmvoc (#87) (f37b76d)
    • +
    • add installation filter to remaining ltp-columns (#91) (39df792)
    • +
    • add power adjustment constant also for compressor trains with interstage pressure (#136) (c8a4861)
    • +
    • add test for adjust energy usage on multiple streams and pressures compressor trains (c8a4861)
    • +
    • add test of count_parentheses (0d1ce6f)
    • +
    • add test of validation of operational conditions when suction pressure exceeds discharge pressure (d218273)
    • +
    • added changelog entry about interstage pressure fix (#95) (2a1e8b0)
    • +
    • count parentheses in list of tokens only among the elements that are strings (#94) (0d1ce6f)
    • +
    • energy model type not allowed to change over time (#131) (670cff2)
    • +
    • enforce unique fuel type names, and unique emission names within one fuel type (#84) (4ea9c63)
    • +
    • fix broken link in documentation of GENERATORSETS keyword (#103) (329c8e9)
    • +
    • fix typing of fluid composition (c0d98b3)
    • +
    • improve documentation on defining compressor charts using CURVE and CURVES (#97) (1bde68a)
    • +
    • improve error message when bad yaml file name (#77) (d2eb733)
    • +
    • merge queue (d4489c6)
    • +
    • numpy ndarray typing (#46) (9b7b308)
    • +
    • pin numpy to compatible numpy version (35a3640)
    • +
    • remove limiting dependency typer-cli (8208444)
    • +
    • simplify dependencies for use with komodo (39c5c36)
    • +
    • update dependencies to be aligned with external requirements (fbfbfeb)
    • +
    • update snapshots after power adjustment constant fix for compressor trains with interstage pressure (c8a4861)
    • +
    +

    Code Refactoring

    +
      +
    • consumer system v2 (248dabb)
    • +
    • ensure neqsim fluid is contained to FluidStream object (#118) (d1d6ad6)
    • +
    • enthalpy calculations (#109) (a01a215)
    • +
    • enthalpy calculations (#110) (cf7d1a9)
    • +
    • improve naming and documentation (94be7fa)
    • +
    • molar_mass_kg_per_mol is not used in the code (3ea535e)
    • +
    • move NeqSimfluid creation into NeqSim wrapper (57c4b24)
    • +
    • NeqSim mapping (#120) (0a0b2fe)
    • +
    • remove FluidStream copy (#119) (0e30ab2)
    • +
    • Use a list comprehension to create a transformed list (#112) (5d7292b)
    • +
    +

    Tests

    +
      +
    • add test for fluid stream mixing (0ba8f8f)
    • +
    +

    Continuous Integration

    +
      +
    • create release-please pr against correct branch (be9426a)
    • +
    • fix issue with api reference docs generation (#44) (42c1402)
    • +
    • fix syntax for gh action workflow (d8700dd)
    • +
    • Lock pydantic version in CI and update hooks (#106) (2ea517e)
    • +
    • remove duplicate build of docs (#62) (e5b896b)
    • +
    • set default ownership for source (16d54f1)
    • +
    • support hotfix releases (0346929)
    • +
    • update pre-commit settings (6092255)
    • +
    +

    8.2.2 (2023-05-28)

    +

    Bug Fixes

    +
      +
    • allow electrical driven consumers in consumer system v2 (92cb4fa)
    • +
    • cast float to numpy array in function call (#39) (250928c)
    • +
    • NeqSim Wrapper: inconsistent return type (9482421)
    • +
    • output emissions in fixed and predicted order (059dab5)
    • +
    +

    Continuous Integration

    +
      +
    • enable mypy for neqsim wrapper (871c038)
    • +
    • parallelize tests in docker (4e73b68)
    • +
    • remove docker tests (a2b5c1a)
    • +
    • use xdist to parallelize test suite (2895ae7)
    • +
    +

    Tests

    +
      +
    • compare consumer system v1 vs v2 both fuel and power consumers (74fafce)
    • +
    +

    Code Refactoring

    +
      +
    • even more typing! (a7b22e2)
    • +
    • fix more typing (08394a3)
    • +
    • make units lowercase in function names (272f0d7)
    • +
    • raise exceptions from error (ee6e474)
    • +
    • remove duplicate function for converting to standard rate (93de4f4)
    • +
    • remove unused code (7ccf2c1)
    • +
    • rename function variables (c56693a)
    • +
    • typing and typos (936b941)
    • +
    +

    Documentation

    +
      +
    • add docstrings to undocumented functions (064adfa)
    • +
    • update compressor pressure control (#14) (1da1999)
    • +
    +

    Miscellaneous Chores

    +
      +
    • add consumer function utils (50e2d66)
    • +
    • add consumer system v2 sub results (b78b035)
    • +
    • add testing of condition in consumer system consumer function (50e2d66)
    • +
    • capture return values from a decorated function (09ef23e), closes #4489
    • +
    • capture valid neqsim states (f9c8b09)
    • +
    • change to absolute image links in readme (#16) (9a54f51)
    • +
    • conditions in tabular consumer function (50e2d66)
    • +
    • correct link to documentation from README.md (f185a7f)
    • +
    • coverage from coverage.py is not directly supported (8e76c8a)
    • +
    • enable B904 (65ac18b)
    • +
    • evaluate consumer system v2 consumers according to input order (0088232)
    • +
    • fix badges (dd2fd6b)
    • +
    • migration guide changed resampling method (#38) (d4f11dc)
    • +
    • move conditioning for consumer system consumer function (50e2d66)
    • +
    • move conditions for compressor consumer function (50e2d66)
    • +
    • move conditions for direct consumer function (50e2d66)
    • +
    • move conditions in pump consumer function (50e2d66)
    • +
    • move evaluation of conditions before calculations (#24) (50e2d66)
    • +
    • remove energy usage before conditioning from tests (50e2d66)
    • +
    • remove energy_usage_before_conditioning from results (50e2d66)
    • +
    • set power to zero when rate (and fuel consumption) is zero (#27) (1ee5bfd)
    • +
    • typo (9c3af00)
    • +
    • typo (389db6f)
    • +
    • update dependencies to latest compatible (5809862)
    • +
    • update description etc in readme (f37dbb7)
    • +
    • update docstring for numeric_methods (be435c3)
    • +
    • update test snapshots (1ee5bfd)
    • +
    +

    8.2.1 (2023-05-09)

    +

    Miscellaneous Chores

    + +

    Continuous Integration

    +
    + + \ No newline at end of file diff --git a/docs/changelog/latest/index.html b/docs/changelog/latest/index.html new file mode 100644 index 0000000000..7a4b40092b --- /dev/null +++ b/docs/changelog/latest/index.html @@ -0,0 +1,16 @@ + + + + + +Next | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/changelog/separator/index.html b/docs/changelog/separator/index.html new file mode 100644 index 0000000000..a249557665 --- /dev/null +++ b/docs/changelog/separator/index.html @@ -0,0 +1,13 @@ + + + + + +--- | eCalc™ Docs + + + + + + + \ No newline at end of file diff --git a/docs/changelog/v7-0-release/index.html b/docs/changelog/v7-0-release/index.html new file mode 100644 index 0000000000..674931e3a8 --- /dev/null +++ b/docs/changelog/v7-0-release/index.html @@ -0,0 +1,65 @@ + + + + + +v7.0 | eCalc™ Docs + + + + +

    eCalc v7.0

    +

    Features

    +
      +
    • +

      Add VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES compressor model. See Variable speed compressor train model with multiple streams and pressures.

      +
    • +
    • +

      Add GERG model to FLUID model as EOS_MODEL. Now available GERG_PR and GERG_SRK.

      +
    • +
    • +

      Add UNITS: EFFICIENCY to compressor charts and pump charts. Plus additional input unit support.

      +
    • +
    • +

      Add support for both water and H2O in fluid composition.

      +
    • +
    • +

      Add POWER_ADJUSTMENT_CONSTANT for all applicable models to adjust power/energy usage with a constant factor.

      +
    • +
    • +

      Add water as allowed FLUID model component.

      +
    • +
    • +

      Improve models documentation

      +
    • +
    • +

      Deprecation: CONDITION is now a single expression instead of list.

      +

      If you previously had a list it is recommended to use the CONDITIONS keyword instead. This will become a requirement in a future release.

      +

      Alternatively you could merge the conditions to a single expression. This is what is done automatically when using the CONDITIONS keyword.

      +
           CONDITION: expression1 {*} expression2 
      CONDITION:
      - expression1
      - expression2
      +
    • +
    +

    Fixes

    +
      +
    • Handle date columns year as year and not timestamps
    • +
    • Handle suppressed ecalc errors and division by zero
    • +
    • Handle timeseries with one entry
    • +
    • Handle poorly formatted csv data with tabs, multiple spaces and mixed float/integers.
    • +
    • Handle 0 regularity
    • +
    • Handle emission intensity when only one timestep
    • +
    • Changed emission intensity to NaN when hydrocarbon export is zero
    • +
    +

    CLI

    +

    Feature

    +
      +
    • Major revision of CLI for future development.
    • +
    • Add Flow diagram support
    • +
    • Improve logging, warnings and error messages. DEBUG should now give a lot of information.
    • +
    • Add support for list in 'CONDITION' keyword
    • +
    +

    Fix

    +
      +
    • Fix issue when using dates in ELECTRICITY2FUEL
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-1-release/index.html b/docs/changelog/v7-1-release/index.html new file mode 100644 index 0000000000..3fb449262d --- /dev/null +++ b/docs/changelog/v7-1-release/index.html @@ -0,0 +1,63 @@ + + + + + +v7.1 | eCalc™ Docs + + + + +

    eCalc v7.1

    +

    Features

    +
      +
    • +

      Add new CATEGORY with name OFFSHORE-WIND to report power usage from offshore windfarms. Should be negative load to deduct from genset, if what is supplied externally. Also added to LTP Reporting. See excerpt example below:

      +
      - NAME: wind_turbine
      CATEGORY: OFFSHORE-WIND
      ENERGY_USAGE_MODEL:
      TYPE: DIRECT
      LOAD: -4.4 # MW
      +
    • +
    • +

      Add new CATEGORY with name TURBINE-GENERATOR and POWER-FROM-SHORE to report power consumption separately from installation and onshore (land) for generators. If not set, +defaults to TURBINE-GENERATOR. See excerpt example below:

      +
      GENERATORSETS:
      - NAME: genset
      CATEGORY: TURBINE-GENERATOR
      ELECTRICITY2FUEL: A_genset
      ...
      ...
      - NAME: power_from_shore
      CATEGORY: POWER-FROM-SHORE
      ELECTRICITY2FUEL: onshore_power
      ...
      +
    • +
    +

    where electricity2fuel for onshore power in general would have power map to 0 fuel usage

    +
      +
    • +

      Add new CATEGORY with name GAS-DRIVEN-COMPRESSOR to report power consumption for gas(-turbine)-driven compressors for LTP. Also added to LTP Reporting. See excerpt example below:

      +
      - NAME: gascompression_2
      CATEGORY: GAS-DRIVEN-COMPRESSOR
      ENERGY_USAGE_MODEL:
      TYPE: COMPRESSOR
      +
    • +
    • +

      Allow single speed and variable speed compressor train to run with zero pressure and non-zero rate. Will raise warning, and affected time steps will not be calculated, but eCalc will run.

      +
    • +
    • +

      Add a POWER column data to the COMPRESSOR_TABULAR csv-file for a fuel-driven SAMPLED_COMPRESSOR in order to also get energy reported as power (MW). See Header requirements for the sampled compressor csv file

      +
    • +
    • +

      Add surge control margin to variable speed compressor charts. See Surge control margin for variable speed compressor chart.

      +
    • +
    • +

      Ensure non-infinite loops by setting max 50 iterations for compressor models. Will raise warning in the logger if not converged.

      +
    • +
    • +

      Bug in max rate calculation for simplified compressor train. Wrong convergence criterion leading to too early exit from iteration.

      +
    • +
    • +

      VARIABLES can be specified in yaml and referred to in expressions.

      +
      VARIABLES:
      salt_water_injection:
      VALUE: SIM1:COL1 {*} 2
      +

      Use this variable by referencing it as $var.salt_water_injection in an +expression.

      +
      EXPRESSION: "$var.salt_water_injection {/} 2"
      +

      See VARIABLES for more information.

      +
    • +
    +

    Breaking changes

    +
      +
    • CONVERT_TO_RATE no longer supported. If this was something you used, let us know so we can know the use case.
    • +
    +

    CLI

    +
      +
    • Experimental: Add JSON v3 output to cover needs that are no longer supported by v2 because of tight coupling with core code. Both new and old format is provided, and will be stored when using the --json argument.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-2-release/index.html b/docs/changelog/v7-2-release/index.html new file mode 100644 index 0000000000..cab3194b9c --- /dev/null +++ b/docs/changelog/v7-2-release/index.html @@ -0,0 +1,59 @@ + + + + + +v7.2 | eCalc™ Docs + + + + +

    eCalc v7.2

    +

    Features

    +
      +
    • +

      Add :code:ecalc show yaml model.yaml command.

      +

      The command will only read the yaml file, include the files that should be included, then show the resulting yaml. +There is no need to run the model beforehand.

      +

      This should help figure out problems with :code:!include.

      +
    • +
    • +

      BREAKING CHANGE!: CATEGORY is MANDATORY for Generator Sets. To be able to handle this, the MISCELLANEOUS category +has been introduced for Generator sets for users to be able to set this to generator sets that do not apply to other categories, +and to e.g. except for LTP output.

      +
      GENERATORSETS:
      - NAME: genset
      CATEGORY: TURBINE-GENERATOR
      ELECTRICITY2FUEL: A_genset
      ...
      ...
      - NAME: power_from_shore
      CATEGORY: POWER-FROM-SHORE
      ELECTRICITY2FUEL: onshore_power
      ...
      +
    • +
    • +

      EXPERIMENTAL: Add show results command to cli.

      +

      When running ecalc, either by ecalc run model.yaml or ecalc model.yaml we will store the results in your +home-directory. You don't have to specify any specific arguments for this to happen.

      +

      A new command ecalc show results is introduced. This command can be used to display all the results, or you can use +the argument --name to only show results for a specific component.

      +

      What is a component? Currently the supported component names are the name of the model (filename without the yaml ending), +installation names, generator set names, electricity consumer names and fuel consumer names.

      +

      ecalc show results --name "component name" will give a json file with only the specified component results.

      +

      The output format can be changed to csv by specifying --output-format csv. This will try to give all the data represented +in the json output, but some of it will be filtered as it does not fit the tabular csv format.

      +

      Examples

      +

      Show all results in json format: ecalc show results or ecalc show results --output-format json +Show model results (totals) in json format ecalc show results --name model (if using the model.yaml file as shown above) +Show model results (totals) in csv format ecalc show results --name model --output-format csv

      +

      Deprecation warning: Running ecalc without the 'run' argument is deprecated. Use 'ecalc run arg1 ... argN' instead. +As this is an experimental feature ecalc run might see breaking changes in future releases, you are free to ignore +the deprecation warning for a while if you don't want to be exposed to those changes. ecalc show will still work as +expected.

      +
    • +
    +

    Fixes

    +
      +
    • Deprecate json_v2 output, json_v3 should be used instead. json_v2 (and json_v1) will be removed in the next release.
    • +
    • Allow Single and Variable Speed Compressor Trains to run regardless of non-convergence in numeric root finding algorithms. This is a rate situation and caused by numeric instability. If this happens there will be logged an error in the log together with relevant data. Use result with caution.
    • +
    • Use Brent's method instead of secant method to find roots used in numeric iterations for compressor models. Faster and more robust compared to old secant method.
    • +
    • Correct prioritazion of compressor system when the compressor system is more complex than only splitting rates on more and more duplicate compressor trains.
    • +
    • Added warning both in documentation and code about using Generic compressor chart with design point calculated from input data in a COMPRESSOR_SYSTEM energy usage model
    • +
    • Improved units and results mapping. The consumed energy is now reported under energy_usage, and power_rate is included if relevant regardless of energy_usage.
    • +
    • Suction pressures were not correctly set, and defaulting to 0, in some cases when a list of pressures were given.
    • +
    • In cases when only one timestep was evaluated in a consumer system, and the first prioritized operational setting was outside capacity, it was nevertheless chosen.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-3-release/index.html b/docs/changelog/v7-3-release/index.html new file mode 100644 index 0000000000..6faa7d8022 --- /dev/null +++ b/docs/changelog/v7-3-release/index.html @@ -0,0 +1,33 @@ + + + + + +v7.3 | eCalc™ Docs + + + + +

    eCalc v7.3

    +

    Features

    +
      +
    • +

      BREAKING CHANGE!: +Fixed speed pressure control options changed. One option is added, where the ASV is modelled as +being common for the entire train, and the names of the options with individual ASVs have changed. +The available options for pressure control in a single speed compressor train are now:

      +
        +
      • UPSTREAM_CHOKE
      • +
      • DOWNSTREAM_CHOKE
      • +
      • COMMON_ASV (NEW)
      • +
      • INDIVIDUAL_ASV_RATE (changed from ASV_BALANCED_MARGIN)
      • +
      • INDIVIDUAL_ASV_PRESSURE (changed from ASV_WITH_BALANCED_PRESSURE_RATIOS)
      • +
      +
    • +
    +

    Fixes

    +
      +
    • Power rate reporting now works for consumer systems for supported compressor models for LTP reporting.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-4-release/index.html b/docs/changelog/v7-4-release/index.html new file mode 100644 index 0000000000..8b640a6270 --- /dev/null +++ b/docs/changelog/v7-4-release/index.html @@ -0,0 +1,64 @@ + + + + + +v7.4 | eCalc™ Docs + + + + +

    eCalc v7.4

    +

    Features

    +
      +
    • +

      Added is_valid and is_extrapolation flags in JSON-output.

      +
    • +
    • +

      Added is_valid flags to all energy usage model and consumer model results.

      +
    • +
    • +

      Add additional result data when compressors are running outside of capacity

      +
    • +
    • +

      Add Direct Emitters to JSON-output.

      +
    • +
    • +

      Add power capacity margin for generator set results.

      +
    • +
    • +

      Add design head, rate and efficiency for generic compressor charts from design point.

      +
    • +
    • +

      Add UNITS to PUMP_CHART_SINGLE_SPEED and PUMP_CHART_VARIABLE_SPEED

      +
    • +
    • +

      Added FixedSpeedPressureControl to VariableSpeedCompressorTrainCommonShaft and VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPressures, enabling eCalc to possibly find a solution either along the minimum speed curve or through choking if the discharge pressure at minimum speed it too high. Default set to DOWNSTREAM_CHOKING.

      +
    • +
    • +

      BREAKING CHANGE!: When specifying a stage in a VariableSpeedCompressorTrainCommonShaftMultipleStreamsAndPRessures, the STREAM yaml keyword has been changed from a string to a list, to allow for multiple streams entering or leaving the compressor train at the same stage.

      +
      STAGES:
      - INLET_TEMPERATURE: <inlet temperature in Celsius for stage>
      COMPRESSOR_CHART: <reference to a compressor chart model defined in MODELS>
      STREAM: <Optional>
      - <reference stream from STREAMS for one in- or outgoing stream. Optional>
      - <reference stream from STREAMS for another in- or outgoing stream. Optional>
      +
    • +
    • +

      BREAKING CHANGE!: A CONSUMER with a CONSUMER_SYSTEM. Mixing between SYSTEM and non-system is no longer supported.

      +
    • +
    • +

      BREAKING CHANGE!: User MUST specify FUEL or POWER as one of the headers in TABULAR format. This was documented as mandatory, but not validated properly, hence eCalc would be allowed to run assuming POWER (incorrectly).

      +
    • +
    +

    Fixes

    +
      +
    • Having several ingoing/outgoing streams at the same compressor train stage should now actually work.
    • +
    • Extrapolation flag in JSON/CSV-output now correctly indicates if data has been extrapolated. is_valid now indicates if datapoint is valid when extrapolation is turned off.
    • +
    • Speed-column no longer required for single speed compressor chart read from file
    • +
    • Support time-slots for CONSUMER with ENERGY_USAGE_MODEL TYPE: CONSUMER_SYSTEM
    • +
    • Re-add support for FUEL timeslots
    • +
    • Failing compressor train when target pressure is too low and pressure control is used. Now correctly runs with valid result and chart area flag "below minimum flow rate".
    • +
    • Use of TABULATED energy_usage_model was not supported in new json result format causing error, will now work.
    • +
    • Incorrect default energy_usage_type POWER was always set for TABULATED energy_usage_model. Now it will be set based on FUEL or POWER column specified in facility input. eCalc will fail if neither FUEL nor POWER is specified in the facility inputs file. Patched in v7.4.1
    • +
    • Correct LTP gasTurbineCompressorConsumption calculation when a consumer is not initialized at first timestep of global time vector. Patched in v7.4.2
    • +
    • Choke discharge pressure when using DOWNSTREAM_PRESSURE_CONTROL for variable speed compressor train. Patched in v7.4.2
    • +
    • eCalc must support when using more than one energy usage model for calculating FuelConsumerPowerConsumption for LTP. Previously this resulted in missing calculations. Patched in v7.4.3.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-5-release/index.html b/docs/changelog/v7-5-release/index.html new file mode 100644 index 0000000000..32aee1e314 --- /dev/null +++ b/docs/changelog/v7-5-release/index.html @@ -0,0 +1,66 @@ + + + + + +v7.5 | eCalc™ Docs + + + + +

    eCalc v7.5

    +

    Features

    +
      +
    • Add YAML interface for PRESSURE_CONTROL for Single and Variable Speed Compressor Train
    • +
    • Add support for PRESSURE_CONTROL: NONE for Variable Speed Compressor Train
    • +
    • Run GENERATORSETS at max capacity with invalid timestep-flags instead of forward-filling last valid value (extrapcorrection)
    • +
    • Add support for uploading models as a zip-file
    • +
    • Apply resampling by FREQUENCY when exporting CSV
    • +
    • Support single speed compressor chart as csv resource
    • +
    • Improved support for uploading YAML-files. Comments, whitespaces, inline lists should now be preserved instead of removed and reformatted
    • +
    +

    Fixes

    +
      +
    • +

      Add missing power loss factor for Compressor Train Variable Speed Multiple Pressure model.

      +
    • +
    • +

      Ensure that GENERATORSETS stops when consumer power rate is zero

      +
    • +
    • +

      Ensure invalid time-step and zero power rate for the genset when the el-consumer(s) starts before the Genset providing power.

      +
    • +
    • +

      Correct handling of power rate in LTP export wen combining compressors with and without fuel in temporal models.

      +
    • +
    • +

      validate order of temporal models

      +

      Temporal models should be specified in chronological order

      +
    • +
    • +

      validation of variable names

      +

      Make sure the full variable name is matched against the regular expression. +Previously we allowed special characters for all characters except the first.

      +
    • +
    • +

      Avoid crash when ENERGY_USAGE_MODELs are defined only outside the time window of the CONSUMER.

      +
    • +
    • +

      Proper result handling when GENERATORSETS has not yet started and el-consumer is running.

      +
    • +
    +

    CLI

    +
      +
    • +

      add --skip-validation argument

      +

      Make it possible to skip the validation step, passing the data to the next step. This will still have some +validation and might give a more clear error message.

      +
    • +
    • +

      add --simple-output argument

      +

      Use simple output argument to get a simplified result object showing only the most relevant results such as +energy consumption and emissions.

      +
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v7-6-release/index.html b/docs/changelog/v7-6-release/index.html new file mode 100644 index 0000000000..e908e59e41 --- /dev/null +++ b/docs/changelog/v7-6-release/index.html @@ -0,0 +1,18 @@ + + + + + +v7.6 | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.0-release/index.html b/docs/changelog/v8.0-release/index.html new file mode 100644 index 0000000000..f01285c890 --- /dev/null +++ b/docs/changelog/v8.0-release/index.html @@ -0,0 +1,62 @@ + + + + + +v8.0 | eCalc™ Docs + + + + +

    eCalc v8.0

    +

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some +of the highlights:

    +

    New features

    +
      +
    • Improved the accuracy of the compressor and pump models
    • +
    • Changes to CSV output +
        +
      • reduced the number of columns
      • +
      • simplified headers, added units
      • +
      • renamed power_rate to power
      • +
      • the is_invalid column is now reported as is_valid
      • +
      +
    • +
    • Changes to LTP: +
        +
      • renamed loading and storage columns
      • +
      • added categories for flare, fugitive emissions, name should no longer be used
      • +
      +
    • +
    • Changes to JSON: +
        +
      • json_v1 and json_v2 has been removed.
      • +
      +
    • +
    +

    Experimental features

    +
      +
    • Add maximum power limit for compressor models
    • +
    +

    Breaking changes

    +

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    +

    YAML

    +
      +
    1. All component names must be unique to avoid ambiguity in reporting
    2. +
    3. UNITS are required when setting up compressor and pump charts
    4. +
    5. Restrict allowed characters in component names and emission names
    6. +
    7. NAME no longer used for LTP reporting, use CATEGORY instead
    8. +
    9. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)
    10. +
    +

    CLI

    +
      +
    1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.
    2. +
    3. Log level should be specified as the first argument + log to file
    4. +
    5. Model yaml-file needs to come last
    6. +
    7. Extrapolation (correction) is now always used and cannot be disabled
    8. +
    9. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export
    10. +
    11. Simple results are now default for json
    12. +
    +

    Check out the migration guide

    + + \ No newline at end of file diff --git a/docs/changelog/v8.1-release/index.html b/docs/changelog/v8.1-release/index.html new file mode 100644 index 0000000000..01b8eb94dd --- /dev/null +++ b/docs/changelog/v8.1-release/index.html @@ -0,0 +1,32 @@ + + + + + +v8.1 | eCalc™ Docs + + + + +

    eCalc v8.1

    +

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    +

    New features

    +
      +
    • Bug fixes
    • +
    +

    Breaking changes

    +

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    +

    Input: YAML / Resource files

    +
      +
    1. We do no longer accept missing data in resource or timeseries resource files, since it easily leads to ambiguities and errors.
    2. +
    3. New Category: STEAM-TURBINE-GENERATOR has been introduced, which works similar as OFFSHORE-WIND
    4. +
    5. TIME_SERIES has had a makeover with new type and renamed attributes, to be less ambiguous and error-prone.
    6. +
    +

    Output: LTP

    +
      +
    1. A few columns in LTP export has changed names in order to be compatible with Centuries
    2. +
    3. A new column in LTP export has been introduced: steamTurbineGeneratorConsumption (matching with the new category)
    4. +
    +

    Check out the migration guide

    + + \ No newline at end of file diff --git a/docs/changelog/v8.10-release/index.html b/docs/changelog/v8.10-release/index.html new file mode 100644 index 0000000000..7d6fcd7e02 --- /dev/null +++ b/docs/changelog/v8.10-release/index.html @@ -0,0 +1,21 @@ + + + + + +v8.10 (Latest) | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +

    Fixes

    +
      +
    • Make sure that maximum standard rate calculations takes a potential maximum power constraint into account for single speed compressor trains and variable speed compressor trains.
    • +
    • is_valid in json now contains booleans (integers in v8.8)
    • +
    • energy_usage_unit and power_unit no longer in csv, json. The unit is still available in the csv header, and as the unit property in json (inside energy_usage and power ++)
    • +
    +

    Breaking changes

    + + \ No newline at end of file diff --git a/docs/changelog/v8.2-release/index.html b/docs/changelog/v8.2-release/index.html new file mode 100644 index 0000000000..9f3b6dbeb2 --- /dev/null +++ b/docs/changelog/v8.2-release/index.html @@ -0,0 +1,28 @@ + + + + + +v8.2 | eCalc™ Docs + + + + +

    eCalc v8.2

    +

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See +the migration guide for details on changes, where relevant.

    +

    New features

    +
      +
    • STP is available as a predefined TSV file-export of data. Use argument --stp-export on cli.
    • +
    • Output emissions in fixed and predicted order in JSON export
    • +
    • BREAKING: Conditions in YAML model that evaluates to false will no longer be calculated and outputted
    • +
    • Using average rates instead of forward filling when resampling rates to a given output frequency
    • +
    • New Categories added to STP and LTP export
    • +
    • Operational settings are now 1-based instead of 0-based.
    • +
    +

    Fixes

    +
      +
    • Some VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES models have returned a too low INTERSTAGE_PRESSURE when using INDIVIDUAL_ASV_RATE control. The INDIVIDUAL_ASV_RATE fixed speed pressure control now returns the required INTERSTAGE_PRESSURE correctly.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.3-release/index.html b/docs/changelog/v8.3-release/index.html new file mode 100644 index 0000000000..61467997b4 --- /dev/null +++ b/docs/changelog/v8.3-release/index.html @@ -0,0 +1,29 @@ + + + + + +v8.3 | eCalc™ Docs + + + + +

    eCalc v8.3

    +

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See +the migration guide for details on changes, where relevant.

    +

    New Features

    +
      +
    • To save time in calibration and help diagnose pump issues: When calibrating or seeing why a pump is invalid, the most important thing to look at is the head. Now the head is available in the JSON file.
    • +
    +

    Fixes

    +
      +
    • A bug in the mixing of fluid-streams in compressor trains were fixed. This bug caused the density at standard conditions not to be updated, leading to the standard rates being wrong. This is expected to change the results of some eCalc Models
    • +
    +

    Breaking changes

    +

    Some breaking changes are needed to keep improving eCalc, remove ambiguity and prepare eCalc for the future:

    +

    Input: YAML / Resource files

    +
      +
    1. It is no longer accepted to change ENERGY_USAGE_MODEL TYPE over time, within one consumer. In case TYPE evolution is needed, the model can be split in two consumers.
    2. +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.4-release/index.html b/docs/changelog/v8.4-release/index.html new file mode 100644 index 0000000000..3f3331755e --- /dev/null +++ b/docs/changelog/v8.4-release/index.html @@ -0,0 +1,26 @@ + + + + + +v8.4 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Add requested inlet- and outlet compressor pressures from input data to results. In cases where active pressure control mechanisms are active, requested inlet- and outlet pressures may differ from calculated pressures. It is now possible to analyse both requested- and calculated pressures.
    • +
    • Specify rate type for majority of output rate results as either stream day or calendar day.
    • +
    • Improved error messages
    • +
    +

    Fixes

    +
      +
    • Actual rate was incorrectly returned for compressor sampled. Actual rate cannot be known for compressor sampled since we need to know fluid properties in order to do that. Actual rate has therefore been removed from compressor sampled.
    • +
    • Handle bug in Variable Speed Compressor Train With Multiple Streams And Pressures when no rate is entering a compressor stage wrt. recirculation.
    • +
    • Other minor fixes
    • +
    +

    Breaking changes

    + + \ No newline at end of file diff --git a/docs/changelog/v8.5-release/index.html b/docs/changelog/v8.5-release/index.html new file mode 100644 index 0000000000..80feed3962 --- /dev/null +++ b/docs/changelog/v8.5-release/index.html @@ -0,0 +1,28 @@ + + + + + +v8.5 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Added chart area flag NO_FLOW_RATE to the possible statuses for an operational point in a variable speed compressor chart. The chart area flags can currently only be found in the json result file, but we will also try to find a way of displaying this information in the WebApp as well.
    • +
    • Whenever there is a variable speed compressor only recirculation fluid (can happen in a multiple streams and pressures compressor train) a warning will be logged.
    • +
    • Add rate type to more equipment in results
    • +
    +

    Fixes

    +
      +
    • nmvoc emissions were incorrectly reported for the ltp categories HEATER and BOILER: The emission query filters included nox, and are now corrected to nmvoc.
    • +
    • Instead of applying the surge control margin to the average of the minimum flow rate for all speed curves in the compressor chart, a more robust calculation is implemented for variable speed compressors: The updated minimum flow is calculated individually for each speed, using the control margin as the increase in minimum flow, in percentage or fraction of the rate difference between minimum- and maximum flow, for the given speed. This solves the problem of eCalc failing when the new calculated minimum rate was outside the compressor chart for a given speed.
    • +
    • Improved error messages
    • +
    • Other fixes
    • +
    +

    Breaking changes

    +

    None

    + + \ No newline at end of file diff --git a/docs/changelog/v8.6-release/index.html b/docs/changelog/v8.6-release/index.html new file mode 100644 index 0000000000..a652bf7161 --- /dev/null +++ b/docs/changelog/v8.6-release/index.html @@ -0,0 +1,28 @@ + + + + + +v8.6 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Added a ModelInputFailureStatus. If there are errors in the rate or pressure input to a compressor a failure code will be returned in the compressors failure_status (INVALID_RATE_INPUT or INVALID_SUCTION/INTERMEDIATE/DISCHARGE_PRESSURE_INPUT.
    • +
    • Rate type is included in header for csv export. E.g. Sm3/sd for streaming day and Sm3/cd for calendar day.
    • +
    • Generating generic variable speed compressor charts from input rates/heads has a new and improved algorithm. The new algorithm tends to favour increase in head compared to the previous one. Running old models with this new algorithm may lead to slight changes in the results.
    • +
    +

    Fixes

    +
      +
    • Fixed bug giving small numerical difficulties when calculating maximum standard rate for a simplified compressor train
    • +
    • Ensure that start date and end date in the global time vector is consistent with the requested output frequency. This makes sure that resampling (typically for monthly or yearly reporting) can be done even when the start or end date is outside of the requested reporting frequency (e.g. starting in August when the reporting frquency is yearly), and that the resampling is done without dropping volumes.
    • +
    +

    Breaking changes

    +
      +
    • Economic details have been deprecated from eCalc. Input data such as tax, quota and price for fuel and emissions will now be ignored, and will hence also no longer be reported. If you have used those in your model, they will be ignored. It will be treated as an error in a future version of eCalc.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.7-release/index.html b/docs/changelog/v8.7-release/index.html new file mode 100644 index 0000000000..896a83818e --- /dev/null +++ b/docs/changelog/v8.7-release/index.html @@ -0,0 +1,29 @@ + + + + + +v8.7 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Change emission rate type to calendar day, in alignment with the fuel rate which is also calendar day.
    • +
    • Update documentation with info about changing name from direct emitters to venting emitters. Both keywords will exist in the documentation for a while, with a description of which keyword is valid for which verisions of eCalc.
    • +
    +

    Fixes

    +
      +
    • Bug in compressor with turbine models with multiple streams and only one date.
    • +
    • Fix bug when aggregating model results, where the first model was wrongly reported as the aggregated result.
    • +
    • Fix problem with missing compressor chart when combining trains/compressors.
    • +
    • Improve error message when model/facility input does not exist.
    • +
    +

    Breaking changes

    +
      +
    • Change name from DIRECT_EMITTERS to VENTING_EMITTERS in input Yaml-file. Using DIRECT_EMITTERS will not cause eCalc to fail (this will change in a future version), but no output will be given for the actual emitters if the deprecated keyword is used.
    • +
    + + \ No newline at end of file diff --git a/docs/changelog/v8.8-release/index.html b/docs/changelog/v8.8-release/index.html new file mode 100644 index 0000000000..826e89f39a --- /dev/null +++ b/docs/changelog/v8.8-release/index.html @@ -0,0 +1,21 @@ + + + + + +v8.8 | eCalc™ Docs + + + + +

    eCalc

    +

    New Features

    +
      +
    • Updated NeqSim to version 2.5.9. This may lead to small numerical differences in the results when old models are re-run with the latest version of eCalc.
    • +
    • Provide maximum rate in CompressorModelResult (if there are more than one stream, only max rate for the first one is reported)
    • +
    • Support for specifying RATE_TYPE (STREAM_DAY or CALENDAR_DAY) for VENTING_EMITTERS
    • +
    +

    Fixes

    +

    Breaking changes

    + + \ No newline at end of file diff --git a/docs/contribute/documentation-guide/documentation/index.html b/docs/contribute/documentation-guide/documentation/index.html new file mode 100644 index 0000000000..fd304ed4e3 --- /dev/null +++ b/docs/contribute/documentation-guide/documentation/index.html @@ -0,0 +1,44 @@ + + + + + +Overview | eCalc™ Docs + + + + +

    Get started

    +

    This site was generated from the contents of your documentation folder using Docusaurus.

    +

    You will find the full documentation of Docusaurus here: Docusaurus Docs.

    +

    Prerequisites

    +

    You can contribute as long as you have access to the ecalc - GitHub Repository. +It is entirely possible to make changes by using your web browser alone. However, if you want to get live feedback on your +changes, we recommend that you run the documentation locally with the following prerequisites:

    + +
    info

    Since not all managed computers have the ability to install Node, you can use an IDE such as PyCharm, IntelliJ, VSCode, or similar, to preview Markdown code. +This has some limitations such as missing navigation bar, and it does not preview Docusaurus specific syntax such as the Admonitions used here.

    +

    Contributing

    +

    As a contributor you will have to use Git. Please find the Git Documentation for more details about git.

    +

    How it works

    +

    From Docusaurus own documentation:

    +
    +

    Docusaurus is a static-site generator. It builds a single-page application with fast client-side navigation, leveraging the full power of React to make your site interactive. It provides out-of-the-box documentation features but can be used to create any kind of site (personal website, product, blog, marketing landing pages, etc).

    +
    +

    While Docusaurus is rich on features, we use it mostly to host markdown pages. The main bulk of the documentation is located in documentation/docs. This is where you as a collaborator are encouraged to make changes.

    +

    For a quick intro to Markdown, see our Markdown section.

    +

    Special features

    +

    Docusuaurs has some special features that we are using actively. Please find the links listed here:

    +
    + + \ No newline at end of file diff --git a/docs/contribute/documentation-guide/markdown/index.html b/docs/contribute/documentation-guide/markdown/index.html new file mode 100644 index 0000000000..b8e985d2f6 --- /dev/null +++ b/docs/contribute/documentation-guide/markdown/index.html @@ -0,0 +1,21 @@ + + + + + +Markdown | eCalc™ Docs + + + + +

    Markdown

    +

    Docusaurus uses standard Markdown syntax plus Docusaurus Extended Markdown functionality.

    +

    Standard Markdown

    +

    Here is a quick summary or standard Markdown syntax:

    +

    summary = md`

    +

    Markdown summary

    +
    Desired styleUse the following Markdown annotationProduces the following sample HTML
    Heading 1# Title<h1>Title</h1>
    Heading 2## Title<h2>Title</h2>
    Heading 3### Title<h3>Title</h3>
    Heading 4#### Title<h4>Title</h4>
    Heading 5##### Title<h5>Title</h5>
    Heading 6###### Title<h6>Title</h6>
    ParagraphJust start typing<p>Just start typing<p>
    Bold**Text**<strong>Text</strong>
    Italic*Text*<em>Text</em>
    Strike~~Text~~<del>Text</del>
    Quoted (indent)> Text<blockquote><p>Text</p></blockquote>
    Code (inline)Statement<code>Statement</code>
    Code (fenced)Statement 1
    Statement 2
    Statement 3
    <pre><code><span>Statement 1</span><span>Statement 2</span><span>Statement 3</span></code></pre>
    List (unordered)* List item 1
    * List item 2
    * List item 3
    <ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>
    List (ordered)1. List item 1
    2. List item 2
    3. List item 3
    <ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>
    Images![Alternate text for image](path/to/image)<img src="path/image.jpg" alt="Alternative text for image>
    Hyperlinks[Link text](https://www.google.com/)<a href="https://www.google.com/">Link text</a>
    +
    note

    You may want to escape special html characters using \, and replace the great than symbol with &lt, otherwise Docusaurus +will confuse it with html code.

    + + \ No newline at end of file diff --git a/docs/contribute/get-started/index.html b/docs/contribute/get-started/index.html new file mode 100644 index 0000000000..0e53b02d2b --- /dev/null +++ b/docs/contribute/get-started/index.html @@ -0,0 +1,92 @@ + + + + + +Get started | eCalc™ Docs + + + + +

    Get started

    +

    Welcome! We are glad that you want to contribute to our project! 💖

    +

    This project accepts contributions via GitHub Pull Requests.

    +

    This document outlines the process to help get your contribution accepted.

    +

    There are many ways to contribute:

    + +

    You can start by looking through the GitHub Issues filtered by labels.

    +
    info

    We follow some contributor guidelines that you will find in our contributor guidelines.

    Don't worry if your contribution does not follow all the guidelines. We will guide you in the code review process. +The threshold for contributing is low, and we appreciate any contribution great or small. 🙏

    +

    Prerequisites

    + +

    How to contribute

    +

    Contribution is done in 3 simple steps:

    +

    Initiate change

    +

    For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient +to explain the change without referring to an issue.

    +

    Make a Pull Request

    +

    To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role.

    +
      +
    1. Equinor internal contributors, you may open a Pull Request directly,
    2. +
    3. Independent contributors, you will Fork the repository.
    4. +
    +

    Get code review

    +

    Once a Pull Request has been made, we will give you feedback and maybe suggest changes.

    +

    The core team looks at pull requests on a regular basis, we review the code and guide you if needed. +Here you will find more information about the +GitHub Code Review Process

    +

    Guidelines

    +
      +
    • For major changes, please open an issue first to discuss what you would like to change
    • +
    • Work on your own fork of the main repo
    • +
    • Use a separate branch for each issue you’re working on
    • +
    • Use conventional commit. See our Git commit format for details, +and our Git guide for our full guide
    • +
    • Please include unit tests with all your code changes
    • +
    • We follow Trunk Based Development style of working with short-lived feature +branches.
    • +
    +

    Pull Requests

    +

    Please try to make your Pull Requests easy to review for us.

    +
      +
    • Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon.
    • +
    • Don't make changes unrelated to the goals of your PR.
    • +
    +

    While you're writing up the pull request, you can add closes #<issue number> in the message body where issue number +is the issue you're fixing. Therefore, an example would be closes #42 would close issue #42.

    +

    Git commit format

    +

    Git commits are required to follow conventional commits. Please see +our Conventional Commit Guide for examples.

    +

    Readability

    +

    We use the pre-commit hooks in order to ensure uniform formatting and to exclude potential code issues.

    +

    We strive for readable code. A few good tips are:

    +
      +
    1. Self-documenting code with self-explaining variable names
    2. +
    3. Composition over inheritance
    4. +
    5. Functional code over Object-Oriented Code
    6. +
    7. Rugged code to write more robust code
    8. +
    9. Domain Driven Design to to match the code with the domain we are working on
    10. +
    +

    Code style

    +

    Except for the pre-commits hooks mentioned above, we also strive to follow the following code style:

    +
      +
    • Use capital letters for constants i.e. SECONDS_PER_HOUR
    • +
    • Try to split methods/modules/classes into smaller bits of code
    • +
    • Remove, do not comment out, unused code
    • +
    • Use types and type hinting
    • +
    • We comment the code when it is not self-explanatory
    • +
    • Be consistent with existing code style - try to make it look like the code is written by one developer
    • +
    • For Python, we follow PEP 8 – Style Guide for Python Code and PEP 20 - The Zen of Python:
    • +
    +
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
    +

    Please reach out to us if you have any questions. 👋

    +

    Thank you for your contribution! 🎉

    + + \ No newline at end of file diff --git a/docs/contribute/guides/conventional-commits/index.html b/docs/contribute/guides/conventional-commits/index.html new file mode 100644 index 0000000000..68d530ad87 --- /dev/null +++ b/docs/contribute/guides/conventional-commits/index.html @@ -0,0 +1,24 @@ + + + + + +Conventional Commits | eCalc™ Docs + + + + +

    Conventional Commits

    +

    Git commits are required to follow conventional commits.

    +

    The message should be structured like this:

    +
    <type>[optional scope]: <description>

    [optional body]

    [optional footer(s)]
    +

    The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore.

    +

    The description should be lower-case for the first letter. For description of optional parts, please refer to the +conventional Commits Docs.

    +

    Here are some simple example conventional commits:

    +
    feat: implement new awesome feature
    +
    docs: add developer guidelines
    +

    A more advanced example:

    +
    fix: prevent racing of requests

    Introduce a request id and a reference to latest request. Dismiss
    incoming responses other than from latest request.

    Remove timeouts which were used to mitigate the racing issue but are
    obsolete now.

    Reviewed-by: Z
    Refs: #123
    + + \ No newline at end of file diff --git a/docs/contribute/guides/git/index.html b/docs/contribute/guides/git/index.html new file mode 100644 index 0000000000..a8dce2f78f --- /dev/null +++ b/docs/contribute/guides/git/index.html @@ -0,0 +1,135 @@ + + + + + +Git | eCalc™ Docs + + + + +

    Git

    +

    Git is the version control system (VCS) that is responsible for tracking all changes done to the code base. +Git is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development +of source code and documentation. We use Git as a service through GitHub. See GitHub Docs +for more information about GitHub and how to get started.

    +
    info

    If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including:

    +

    Setting up Git

    +

    Go to git-scm.com to download the appropriate git client unless it is already installed on your system.

    +

    To verify that git is installed, you can run:

    +
    git --version
    +

    See GitHub Docs - Set up Git for detailed instructions.

    +

    Using Git

    +

    Git is a powerful tool that can be used in many ways. We recommend the following resources:

    +
      +
    1. Introduction to git - GitHub - About git
    2. +
    3. How to get out of git trouble Oh shit, Git!?!
    4. +
    +

    Below we will describe the most commonly used commands and scenarios when working with git.

    +
    info

    In the following sections we use the syntax &ltsome text> where you should fill in your own values, such as:

      +
    • &ltchange type>: conventional commits change types such as feat, fix, docs, test, chore, refactor, etc.
    • +
    • &ltissue number>: the GitHub Issue Number that you are solving. This may be omitted if you are fixing something tiny.
    • +
    • &ltdescription>: a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.
    • +
    +

    Cloning a git repository

    +

    Navigate to the location where you want to store the code, and clone the repository:

    +
    git clone git@github.com:equinor/ecalc.git
    +

    This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the +same name as the repository, ecalc/.

    +

    Tell Git who you are

    +
    git config --global user.name "My name"
    git config --global user.email example@email.com
    +

    This is what will show in the git log when you make changes.

    +

    Create your own branch

    +

    In order to create a new local branch and switch to it:

    +
    git checkout -b <type of change>/<issue number>-<description>
    +

    for new versions of git you may also use the more intuitive.

    +
    git switch -c <type of change>/<issue number>-<description>
    +

    Switch between existing branches

    +
    git checkout <branch name>
    +

    Fetch changes from GitHub

    +
    git pull
    +

    This will update the local branch you are currently in, with changes done in GitHub.

    +
    git push --set-upstream origin <change type>/<issue number>-<description>
    +

    Send your changes to GitHub

    +
    git push
    +

    This will update the remove repository on GitHub. If it is the first time for a new branch you will also +have to tell git that you are creating a new remote branch by using the command:

    +

    Check status of changes

    +

    List the files you have changed and those you still need to add or commit:

    +
    git status
    +

    Add files

    +

    Add new or changed files

    +
    git add <filename>
    +

    or adding everything in and below your working directory

    +
    git add .
    +

    Commit changes

    +

    Commit any files you've added with git add, and also commit any files you've changed since then:

    +
    git commit -m "<change type>: <description"
    +

    This will save a snapshot to the project history and completes the change-tracking process. +Anything that has been previously staged with git add will become a part of the snapshot with git commit.

    +

    Send changes to GitHub

    +

    In order to send changes back to GitHub, you will use the following command:

    +
    git commit -m "<change type>: <description"
    +

    Workflow examples

    +

    Pull Requests

    +

    For Equinor internal developers you are welcome to open a Pull Request directly in the ecalc repository.

    +

    Here's a quick guide:

    +
      +
    1. Clone the project to your machine: +
      git clone git@github.com:equinor/ecalc.git
      +
    2. +
    3. Create a branch locally with a succinct but descriptive name and prefixed with change type. +
      git checkout -b <change type>/<issue number>-<description of change>
      +
    4. +
    5. Add the changed files +
      git add <path to changed file(s)>
      +
    6. +
    7. Commit your changes using the conventional commits formatting for the commit messages. +
      git commit -m "<change type>: <description>"
      +
    8. +
    9. If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code. +
      git fetch
      git rebase origin/main
      +
    10. +
    11. Push changes to GitHub +
      git push --set-upstream origin <change type>/<issue number>-<description>
      +
    12. +
    13. You can now Create a Pull Request
    14. +
    +

    Fork the repository

    +

    For external developers, you will contribute to the project through forking.

    +

    Here's a quick guide:

    +
      +
    1. Create your own fork of the repository
    2. +
    3. Clone the project to your machine +
      git clone git@github.com:equinor/ecalc.git
      +
    4. +
    5. To keep track of the original repository add another remote named upstream +
      git remote add upstream git@github.com:equinor/template-fastapi-react.git
      +
    6. +
    7. Create a branch locally with a succinct but descriptive name and prefixed with change type. +
      git checkout -b <change type>/<issue number>-<description>
      +
    8. +
    9. Make the changes in the created branch.
    10. +
    11. Add and run tests for your changes if needed (we only take pull requests with passing tests).
    12. +
    13. Add the changed files +
      git add <path to changed file(s)>
      +
    14. +
    15. Commit your changes using the conventional commits formatting for the commit messages. +
      git commit -m "<change type>: <description>"
      +
    16. +
    17. Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code. +
      git fetch upstream
      git rebase upstream/main
      +
    18. +
    19. Push to your fork. +
      git push origin feature/my-new-feature
      +
    20. +
    21. Submit a Pull Request from a fork. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us.
    22. +
    +

    That's it... thank you for your contribution!

    +

    After your pull request is merged, you can safely delete your branch.

    + + \ No newline at end of file diff --git a/docs/tags/e-calc/index.html b/docs/tags/e-calc/index.html new file mode 100644 index 0000000000..4a4324a323 --- /dev/null +++ b/docs/tags/e-calc/index.html @@ -0,0 +1,13 @@ + + + + + +19 docs tagged with "eCalc" | eCalc™ Docs + + + + +

    19 docs tagged with "eCalc"

    View All Tags

    v7.6

    Breaking changes

    v8.0

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some

    v8.1

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    v8.2

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See

    v8.3

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See

    + + \ No newline at end of file diff --git a/docs/tags/index.html b/docs/tags/index.html new file mode 100644 index 0000000000..d432cf7f85 --- /dev/null +++ b/docs/tags/index.html @@ -0,0 +1,13 @@ + + + + + +Tags | eCalc™ Docs + + + + +
    + + \ No newline at end of file diff --git a/docs/tags/release/index.html b/docs/tags/release/index.html new file mode 100644 index 0000000000..77f9b53987 --- /dev/null +++ b/docs/tags/release/index.html @@ -0,0 +1,13 @@ + + + + + +19 docs tagged with "release" | eCalc™ Docs + + + + +

    19 docs tagged with "release"

    View All Tags

    v7.6

    Breaking changes

    v8.0

    eCalc™ v8 is finally here! This new release brings a lot of nice new features and better usability. Here are some

    v8.1

    eCalc™ v8.1 is a smaller upgrade from v8.0. Here are some of the highlights:

    v8.2

    eCalc™ v8.2 is a smaller upgrade from v8.1. Here are some of the highlights. See

    v8.3

    eCalc™ v8.3 is a smaller upgrade from v8.2. Here are some of the highlights. See

    + + \ No newline at end of file diff --git a/img/docs/asgb/asgb_lpp3_pd.png b/img/docs/asgb/asgb_lpp3_pd.png new file mode 100644 index 0000000000000000000000000000000000000000..400dfea968bcb91e6ba47099959f8fd4b79f6e0a GIT binary patch literal 8296 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 T#E$U)4geHislKd`Gx_*$?|LlL literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png b/img/docs/asgb/asgb_lpp3_predef_fuel_result_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5c446cba995c2c97bdb0fcd265fe02ed7052f6 GIT binary patch literal 150658 zcmbSzcRZGT`1WmOCVTG?krCP13Yj6vCaYwxvR77!>>Z($Eqjk-WLC%~E1RsW_q=+Z z=lA~Jf8WnXo}S$9`?|j0^Lw7hc^t=ig=whWzKBPIheDw)Dk;j}MWHYVQ7Ci{oD1+T z&CT^g@E=?UMLlN}im)B|gBH(4NDKdn?V_ZrfW3f=gO7nrXJ{9OLNTF~=5 zlgJhJ51P{LG6)1P1o#N#)X-T(0|_*xWlS~6WC*Aqd*(rOX?UYwZx#m5*QKW$Z39*Ix~?701%0Ay#Kf~C&6@|8 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%0AL8tOs!vq@T`rSTpMNWPKs0dGCQh#N6 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ÌwZMAY&g+Y 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage1.png b/img/docs/asgb/asgb_lpp3_predef_stage1.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0bd23bc3d1e24990cee592784313b9d07f841d GIT binary patch literal 19860 zcmb5Wb8uu|*ex7e6FZs7#I|kQwry)-&Lo-Gb~3R!v2EKnzB9kK-dp#-uWna$r8-IH z?B3_Wde&My5ejnRh;X=YARr)!k`f|HARwSyz>^pT4EWBj9=jXx1=LwdTnMCU0{<9z z0bwpED+mHo8wdYp2noD~b&$|>1_43p`}YJLv@bCM0gp4Y~rMBfAZeqBlV3jAdHJt++;VQ-W?bIB zuc)f1+}+(dpg;(suo>Fh+q>T$j33Vy&tkv?5yNm((9s>thyp+RVVWaA0uxk&j&1?G z`W*xoLk!caq>%FkLQn$^js^H#X~94-6bM5~iYefoG?0+Ez?%yHf8W&OkRR?DpS96J zqAFzXV1yQDA5$=jAnXn+BjM*96HXO@Y$s7_)OZwG(K876Ok^id39i#YY^ z(cJi@9~~VF%UK}j^-F*MUgzi2?&V>bO^FRvDPMzhz8#3wr*3iCai!sd%0)dq-^@&C z)j(1g113s8O900%IR!O->`P^gjy71ybE*1j~FF zL=ehqqggu{G;(LHwv2(oE2?>Qj*eXS%Z;GcTJ>hyU@Sk~w4@q)T+~)h21^M^!drm7 zpb4NLj;Evi8Cge4TwR8SsiinVO3vmuGzS%O=Yl&YE*|-f6+_E>H?azOK%~s4$VTWF zEg2lG*6qRdF0Mb4;1~oPixFr+(wGfHPU2K|z|Vb84(SvN2bMXs5Hkb=0rOoYON_8x zdfb~_iM`2f2`Xr90hFjfu$UBr!VbI?6n+tlcg~%4JgDW$yjt{Ma|GNouV1i3fz(vdwL$BgFp$lcqOr0AEh=>_6Aw0vypvk@~CG=53&y%GD=CUy{ z20&wIWe;+7b6GiW!}Kx% z5pv6TCe4>4#g!*Xt#xZ=L?dyBa;jcBIfnql>suSx%z~`yo*7f_TauAX=qZLTI0gbN ziEPLS*_Qr!sQo&A(P<-xiPu+9LanyTm95HjKx>^?90eYT z$dr)4Qp8F+>;6Y0hZ`XulnR6Urf`;eG}aF0{eg;OVR09BR^67Ui2+gT1;rr$08eWP z9#QNr3y4~Z<~ck@@H-_-SCwQrR`=79<4CW8OQm zyoTMrb#s*d5+LyM|4WK5C>9wz0{`#9|NoXTk&qBtKJgO->?{py$LnRsSEaP1;1LXW zrGh9BwPa&-Q!}%ipd%1Y!?5^V-6K79Tw^_F*` z*Z;~+fIuHRJIQ>p8*k^S3TsE9)Wxd{Z^P(oOF`sWx%{|6Pt=A${IoG> z;KG<>iDrJPy+SrFL@lxTY1MByyJ}pRcFm^+kJgzY?$to(pO3pkeZ$&9E%S zGk&aCF_3>{iskTneGMP$53AEZKcqM+1O3qvd(~Ffd6~YpB3wM;{#FTc=jAN5;cZ!X z=yYm@=e;#Mz_vWy+#*d-q9PR1X#TkES-`7`J zb>zK<#8)nl?;ces6!=GRocMvgj&YmHo1JKF-kF0@u({Tk7~=>9N@9s>?inpAw{9nu zG4|o??Q|PYFG(4_P$gs3mVO^wu5%VYdVnYk=7fcwst`m`Q<|O4P)X!^J}Wwe=c_uZ zfOo#;N3A`dD2wCQe&HWh&f2FwGbG9i`g|)G)Q`}FH1((d7@@eNbrgJUnuP2K-Bi#c zWE`Fq)!6)gdY<6S;WiS=NqgQwPe=ulo@VonEw&KCi-CL_B#jlOmrEeFN#|9+ChgPb z_V!>S)>Lo%ILZxU!+(oi`GTC=M!&h9ov(qPu7mzV|MlXTv{VKB%%Y~~(I(@=QzaY%08P`cJg|JNa|Cin{6cV(LqeqvnH@z0rFL2 z#|5L8Nd~=U^9>Bqsg;CVOf{3$sw8s6b+Ac{sdaoh-|YMO-)O2(gVA+vZFkqr%7oN= zNCmeoShTkbPt$>yQndEr;+LF!Zy-)2#UoeREMnZ;_CB|}f-cifleFhtDl1sK3JMiw z#Q4B?bblxs62hA|_t-BbRIy_JCerC8Ck{-1iwsqMd=DB9pN*r0ju*6QawA1?Nk->27kr*_!+C@+qV>#!WM zy=k6$LWB#5>hau~o$4U{$|qze5nMExR?!lMzUD=m)gC2q0W;}!dLWz6%%3*(fdCzK8Ce>yVkH0>M3pRQS}wf z8OkSh$|Sjz?xHf6z4>YRlC=kAQiyj6fIQ9x;e=9L*v{&q`r$*jG&)%c|G`6f65Ris zvjVyi`-e|-V7|@1cq7uE)BN?rnw(x@SP0wXt#`H2cC|mk*oO&MUqwYlCX*{^!+;18 z5z&SZMQyF4{rAm!NVZ+8*OrsAqkh-h^zgJerj5Vni?IRUtT%SFr1<2lYBTX1??u*d zd7h6z5ym^drLVhhl#EZ^^PcE&AzsWMJxJ`8y~1xPtM>TRALeHF$exJI;JRxW5DLRL z!SG85^PuB9_$=BruKkex4c@V>`bJRzEX&DPdhzaCzu63Yzy{ji}Pi~ftL_g{rw z-8nkH4DNjQeT%dId4yv>;RROkJf4a-xWzN*Cy=a~lr{)yN%+UA_D>bOuzw8>xS+f>GbpTGFouI&EYpxgd{={IZcy7@Wfkl#_wy@agszmRQ8wFItcaR(Y@X}^=wyhlcsHTMw!BrJ6ZeD z)UC2USG(#cdxtmhV-WK%8xX6Q9UMzRww=Xnm}TqWt1Ti935l>iAqR zD011Mj&?_?{4R$|n5SkoUO)LLx?S}pOBRxc$!%e?B2 z`y@%QhOI!rG^)v-U9+sZ!XrGCHBpY+4A$0MOmgk`%G{OZ8FF;|O{ZnZ``$>ONS=y5 z(6eT|96XKn6~F$@#cR<1;rw~L6}#s-5&zLON@Ql%TbV?O!N>f@tWyVQV>`|8K24vC#RE7jSN2Rc~Du5?~;^Z13Vt$`r& zw=KsG-ZQ*a69aL5YTNO#a{eUO!=;uHYtzcY8KggT#pUs5HpIJ+Tdkb1y~Qn6vDdm7 z`{0o}t8?J|ko%S7^irb*nS@nf`jb8A`bB;JZWT}+&zX$B{8UPAOt<7*OM%wu7xzc- zKang`+N0;lCd*`%PGbvA`+|WBRLZ4g-kN0g{f#j2I^fgF1e;CbM%{}-(h(!>H8(#Roq()rxce=J*lS$ludhq77Zip~n&b1pf@!}P8FDuKL zJ%C-*T?;;r-v=?l27d09QF>>m-d|5Z0&PG2&F1NMGcoESnA;G&B`1(QkFz_Q7q65b z`xyjbaD2}Pjan9F>0l;a;zC1*l8Ovc3|C65K(;&DzO`Kp2`9et2@*oa3Q?j_dBttPK$|P zqY<-VCT|SHgY|+nI}Y=+7s>Z~1Fk;lk>_ttJ@nN7cw_apghedZH0zn;@QI5unXSoAMS}YUYrD-CyaInT_DxiVRLej*NgZ2 z@MTSXlhoMm;u<&<(DL-Pj*H4Scx|-|^%(lE1ElHZ2+GAI1}fBvu~STi8vMLCCK-o_ zip#2y|EWLo>(23K5%Xpl1<_CI!?gXnjF{wu`DSd#yOp*VzR40fUVTVY!enaoDP%OL zDuh4(qUUeY51=Z__iQU996Z|z5|78p#gb)P_5PY(&G=PJvKRklwjCEMKaP+`>FjMw zEV)Ad)-Y%To3zo>RiLi<7m6VPfExI3-#&TtuNX_1C7fUKbk&m!j}*)waxi0HMzjeL zgGMw#6Zu((7PhOu6YrcRI3*}cGgWOsdMBJ&ns!%)TSL$AluUpOuo8d+>_e19m{(B1hwy_7^WMmd4?u`&p^34gfVTkn45ootz@*E^+nsnK?uT z(=HtdE?>IX#jHt?ONGxHK)xEdIc~&)?gn z$BiNTIPTuqCnl@7oWUpUv~QZvKnFT1gKX(GeZ}jt@eW+fQ1rzX^9Y=uOD`wZS{J6Dcoea>5#yRP)!LwG z@Vb|bX1ZG|-a4@_EEhdPl0Z|&*~uwFKEUY!8YB=iLSGF-K4;?~eo67x_LPGMm`w+n z!K>MmptG*UJfAeE+ZPbD|72YCJgH5)>~@&2rgYze)lYBPo(-84Zw;GjizTGS1`1k! zFAt&i0Xu!aEX9`8X`5haby8#2NNYl>`sO@I_MV;nH*wzEXhI+E=6xM13mOXhO6y;= zu#W}&Q{d%YT=ih%c>;Bir+kp}e=^?k4}8po1@*gldi;+U8U4M6xP$D?r<}O0ad{PL z|JL!KT|6Q`IRC-AvP$th>i}A z%G~BM0v0Z&G2PTbHkd=e1dO-;IygkuBNCS*HV`N0$3uz(+uU0q zBcL?ef&Zoj%=lx1kkvtSh&fw#!{y{Skx?A zW=neNfQY%={C4m_8ltrlidjGe$PlD6j1wf-AU*MBj;715hb?$bAO+m^Os+>kC!T7EvXbY>xyOtROD&y>oImh+bkO%h#*}nK@pnXm1DqX0__y1W*BrttwMb&yVw_ zGjdbhMDpI_+qg(k8Qu;8+m;})O!$x5ssz%9vU7|?ww3B(b~&0+&C80{r%If`Ut^)b zDG>X4l`aA~VKw`gTGgjDu|9XTJ!$s=c*(J7`q})dOVkuryw$~UEQuTA%-? z5gwxH$c_7L0e2dV@WEWp6&8~dQpO44$`Rqp&F6sLvoe#(NG^?2@v(&AqDNI598BtQ zvkT!Y*_r9~^i~>*M0pb4QJZbjdKh0`KKaXADXqsvPYe!W))pH+#sMfYbRQ{F(@43o zNRH+$JWGkAmVl9rTbdb%xs+2WO5V4ZPi(tH-soKKoKa+bzsjOE%M*ypYU2;|gEMje z93lhMAf@0P7nf0-=OTV(CLJ4juV7j1_pJj=){bjQM{)V=j)2!S;~tq0Q0zSEMLhBH zx!=5xcheT9ZCrPtX{?{XTV(0C~3AF|$qppb9 zNWa+nPCRsm;+kWTgPdeS1f+N5M2&~FS@WvCkt!tKKr>ATsHg>-sNs!TP>=)<6Jcya z{+tN_R?O2TlRnXphx^+0o2Yn!HDU~lH;~d%cuGI9e8S#AQ<-3};B%|D?Ak+K(;vRM zZORXqlA6=aTVyiS+6jaR=0EZ=Q@`I^?7V^|MJI1$#raJ%dnKO@L;3KWZwKsf3(IO4 z8c9%-W-RshYsjgsSXxn1Fl7x}Q~K+?A(h!W9#6}B)|L1X{UI00H((!E`)x6b>#~_c>LJfxHy)n)& zFy+mx09zmR529}?bmQ$!1wY%P8_!-HvF|k9?D9lf^b&7P8a%1WO*a5|LojU1kf(e6 zWAY^-rZW9s|ib9FHe>R4nwGd^FT=Ie!v6}8*rudLFL8> z0(F?zJ2}25AcevBq|^QSv5s}dZoL^lXbk%=FdEbcb(So@xI&3>d*#eMlhP6|5JS5p zp~jQPAGgfvL};)#4lD7|v+|r%rX$n&41T^o#=!HB4vkHgQDl!hDytsGjv?bG@)9Xp zljzI9=;DZSmP9|68`}U^{gXor3RnO2=z{RbNyN-Z)I3vk4u`?y?nYWWT%)|T2sHOY zuF1O1+e@$!;l9r7vj+oGhJ>@F#|6@L0~Jdoaat*3w9=dV9uxh6j~QO()zQ~A8pmRx z(QFe%d8+a#=JT3X;gA8#KcN$YJF68?3xaIt1 zQ(l6;1wMmrqi%7rC%B50egKzOUp@>n_X1h`H9)5Lo%me&ZkC9`^7O3DCBL?#4!Po3 zk(Qc>9vaKU>#qj= z>dW6V36NQ8mTR$dSbfyj z&Q5&Q)3Q_(1nK6iD9bOwx9q+ib^ zbN|K}b+Zb035Xql=%eBWnLXZUjTqBioctbjlhuDb7>jYK3}Ki)+DAgW0Sgef_jn7- zP7~w$0*bv}>r4jlLHei{rDbQ`&D_o1`QA=jQL}j9KCf~#x=bVng7$Kli)^C+kO871 zs>&3NjH`2s#>=rL#L*EEi*@ZCAZcaaX_4@~Tb#9HDy{*N24D-PxiyjCV+m7cfH_&O zb-JWAhlkDQ+tA$~82TLzUOFVY4#w_-M4krHn=9SUH7sHKl;lzM$c=Y*ZR7NRWYf(} zyy}0q=;>EHZOtd|jBaeuF!j=awPmuq=e^vA&xM`5xwjYjsA12vvomTp^V13Trm7+z zU)Dp%&Bw|Bp@J<#mAr}6CCeQL=MBU=0l=K4t;1ir{iyC9qgq;CzQ2E5WR0a;F0VbZ zv2UkmI(kcL3;D(7!BzWYh07}A@*-F_fM#*sgUJ1n#wH=V)hbF-O~^H*ZZ_fBi}yM_ zjzXW`m&8O>QU+sx06h7Jk`dCUP|_}+?*M|+njw#IA9c zI3bXT#l7*6a8mmDehpM4eR6p5pskNu>yO!NS;hl_^zJE|?K6iLE>)SCLaSQ=JUzxv zOX!E>L~tw?Jog;JahqKjbnb8HNUn!?Mcyd1#Q8 zPL#d!#WeopOqp9{T*;OF{4SbilmL)`5v3D4Rg~oyCc+CQ^*H@W@i((d8Vr5!e&?@Yec3K7kcS){e5g ze^StBewz{E)lkZqh5Y>k+Ao%;p?Y=LbtnseVlu(}bMaEXulV#M(YX!tyUZwmu|L!c z=N^mMria^jcD3uI8#Gn}?{?eg;VPIHG}MD{zR{-xhuEjPn$V>%!-D?g#D)JpMw!@c zGxC+Q=qbtPC2Gd^&xsj}wKHr<(fL5Ln0pr#9D?+u{Kb`?p~}H9xgQdLmot8NV8Ck> zeq-VbOrZUJqAZLtF5t&k+>%Piyti*zTK}6@G8CQS&AqNkxZLZ4qDhq0M`)Uy?qF)3tNs5rg9AeV4^3G!+nHZU_(wXKu8rPV*+*+YT^3C;9 z<=j%2F7ZLS{P#r5A%dp}5i8pUhewPEi@XX=K(qXg!o0QD-NipsUhoSSQAzmuT-1v` z>Wb;u=CURq>&wV6UYf6!AIu>Y1|+%!ufFRObwqV>-*)DgI}rzW_QM;~G8D{#>-$2u zG7%94)C#CGSa*6>zNY|XWns%Zi9rH8V*porw89{FFiZx;GLmt<=V<0@PHD%L=MGjd zfDiro)vw`ZLh9mPBnLT9R8q^^iqU~=-UWBUvq?LY^QPJtM-GFMD)vU~_yK?dxvT=y zap~mzU58Jfc4qn|+sT1rxrfB375HZDMJU@i=lzS2vsh7}PF*@yZnq3yuoN;SBi2`+~EX0tKoxsP#j zcv^iduNo+y@awJxp(i{GYiD7JZ1vTWQP)&g!=kh)4KfpLy!~<3iojS-D5|F6B;j(! z?g^GB7V?A8Z?>Um58$bgyDZPoa@DJs;m?Fbf+jBf$h--A1~b{$yY!^$STKoOwt0!4a@IE%`vU5o08;#wI*kLfw%HH!o(M@ zhE#F`tsy$dz$^%H|8k+jOB1_X&A-HG>!`u~-c+xW-&1j9OiDb&lP3L=^>+a|D{DsH zx3c(D$#Z$y)X9{;~A2dMPH|^5)jDc-+hjWHr=C&+Fw?Li}3u{!9A|M-mS%> zaQv}vy{XfV0J$T^Sa6n$_s8}@PS}~W8!pOikAMGJ0SS1nS&W@R&ix^vV6f}*Zgr#i zbv(s=kEJMYg*HOuUzF0`X6ML_0iEY#rO$ayT6%5}Xj;_MzqooDMIymjBPB<%{_&6tu}(@QZg{8Jq>4=5&l&HAJ-| z+LU(BS&%+l>D6QAc14S)VmxG8oPPIYot}OX)%-SWgqbbT=XlmB%v;-X9|a$uV}Jj| z{$#@|>UNx61(Yu)wg|4KPZ$|v)MTZtcyrZ>10sEMIR7o5T~42nF#?z!TA`(byOpmr#Hw3Toyh5^;y6%3Q_7l6&n~*N!z^zrr!To^6^4gMwkicL%eJEY%5yVPN%+(n+!^8DU zhoP6u|1MBuP(xlI^YFb!cOYM1>>B+|l%IEdP7?Cyo7Td-&hWvli0xgs1|}9OS}j=} zs2e^veATitfAg3K!}S~F@_Qdq$!3|&vJh-NF7bFsNa9DCf*!^DbzQVQ)j1U}xFIu} z&(3TY4E}t_AjKhJ>JbP$?wLjFh{w@IZdy}bz~Fid<6URV!Kk4{UKCcEXrLK98P|Xp zs+W;^gu&H0&(<6(BbhrIW#4=!^+xLWVMOdS_f7*lQX7H8>np_*nq?@rHN0y0|%g zjts+uI^Oz`+*`N`z9j5=DL6+rz)+wpigsj+k+N3ZO5i76loy0XB;N+IN(o*gn>7Xt zhpVCi#gMQqK2Gp7^u^T`Du;|R;^Qkfa`i+&T=Dzw<{V>sdL8d-7!{^_pZVF>s@|{p z{A|1q<-yuu=)aVuQ<6c=!0ll5&tg6vGBxz&p<9^D!QOi~1_j`~rapy&x7#^rptPp? zrq@;(k4I&F-GqH&AUk3oP3;TWRUF**pkFxyPXI~?LNNvFOw8XvQ4F8Aq1XWWtNj4_ z;miq=67!jnD1)(}&#+5BGCu|XmV$GemDclucE)U7cnTm#PQRzbMwd?P5YI82{hF|6M`*#p5DV!-e^aqJ_JGWL^xi&;ngKnA_%My*l za+s`Rs5Dsp>bHrZmuSLU^okQh#H6Or=lfQ5ze>>@LA`AMtPK@XlHe?70}Hz%EXH8h z3QKtHqphGX@53#tzP?xEVh$*5Mvq%r(71@0chC{HG1v%~+~XKOi2ElsWszj|PT3--PcMqdf}EX7ERA-UWTsG# z`YS)z(q4Zir%%~N+=xK!L%u^sc^H^!`qQ{Npl#AO>ut!)rGkK0JzLE+uaij1Z{dT) z6qO^0eG>ZJjGr4HQUP25!6;Q$?f$!w$_yy;TO z=HgP_SbONEOU|=|xo!syE;ZhddDFsN+!~Ux>t9UBS%{s=|@GSB`Ge3UG zP{PfNb@RiL4gqG-$8d$J$eXX02#6xtgc~iZFPC*#UfykO-YrpBw2?7a#rzDs|4rC% zEZPi*tYanrq#tBY@u>zbMyW>@L@rfKyr5g3jpkPm&RG0(@%Enh}Oe}aZiVN1z%QN+$|l2g)+;fv^;NMgy>p- zL_Xf+-5r-v9 z^w^I&*{7oUSX%`H$>Ieh6hK`4T>iYwUN~SEdRsveTqAEUJ91BECC|CAae4k~a1c;Q zfeyb1v!A$YNwhvEHo$6Yb9TE>xy@%-Jp#@7n_R`tRJ;Gf=i-;c`40&8YYM63A5BF?_;b~x`FV0AIyh@ayj=;$@idco*0G?HNnn5wA7 zER&EgRweyTBrgX8(V+4{?}a@K@s+<@Gg&}C96Wrs&KMPHLsvqcNa9|7;EE`Gt6Cm0 z4?3EQC}OFoiwh5)Ax6^YW$9Ox{~Oow5PL+|>wHDAKcnkvU~$4{!?``yuZ0cjpi`U& zh_=fs^I-Kx6)byyvJGzKWlo42${B0kM|&F^|Ez! zbz*UwN=ztTl5@tfV2nTNT-AxXeu0Gm zP8!k>(s(Hn@W{8P-8m<7adEEK=_1)Vd$Ws_?Yc>d!^mg^Ib}3cEa9)bnQ5A8J7+`C zqjxQ?J%f5$FgMU4OIHyN4Z$aYv=4(_Sd6h=AdKqTZRo%Ml=||VgZs>{U!HNe0Yk`H zqNPXdSL;8U($tW**(zx;91ae6;I5&spt`0ATwGi?x3_}Hb$|Ypm6iPv%8d$>&kh>J zp6-Clx}59b%(#xKh43OSXHTh9rNm<^P?nSK9P0GIPk3EqpGB-+_$F-4^^QNyl?F;VTx93D~eC&xdB1FhNWEo2jhEFH` zF(7&>JJbu%&0L-D=jX`aSLO_!%0tHvZ=2!TKJ1;Wd-ljD5bmHW0R7UxCL0Z5F;$w? zC22UICorA*?JL1$*u4l{a&l5qCcpp3T&Xg<-P+N~$<57;R=bCzkIx%Dksc$di=aNg zDJ%6$OO~G@GHs^p$9(gEkRHAg+5Y@iIbYgR|6Tw~gHLcu!W0TzTcP~MM~&)6!vgQk z_;B2GgBJ-6_3hIhnxJK=u;P~{*DK!Wy(oGwvxx%sM3}Pj%&u1?D%07bd(Tv=rQLK( zS=D=COnr-1_1EUxkNS;-4F-6A^%1_0#>#T_uY0ScYp3`p)NdbN=5mh6!__eFnwt(x6+-uH`HRk1~gX>L18-UIhlfJrb`T)deGS=`;-9Y`NzV`F_H z*CR-XOe(+!e zsU|Z{#3tXG6|}CYCG|y8A_vp4Bo8wszZOEk6ncQX%5AL0GO!|3Zg(R>UZypfFn z`Q-jWp?n z)QIk)?AT7~O8*6ra9V#WC<=;#fr+Z=x0sY2p0wU>*KYl+8kx$ z+kZZdQIuIb-t6UmS^U=_imRPjD4SkSUmv*@;e;l6)KHlMeIkX?81N~}$zgULTZO!X z$wrkYE@;#QGHT2mVXreTkZ5KU)H*E=PI9S8U7lw)Z{Pbbc_ZmQ6k&cv6B}4e9#LkG z*0sq~o}vhleJ}3gPZ)*>_<^d5*bW^D;X10LMp*6C$_4 zwAhNeg%qE3F9|`VO{_OPm@kK#1wo92yCpVj;6&7zpAKG?d+#U~?_+bcxqo=mNqro+- z6;|xt;n7af04NB18+&k2d1J850>mLDO_Vx{xTh% z0&0GJH#LRBY}VY`I-|N$^Ji9GK1Xvm6JjSAFVw*yrEp{D$nYQvi~itjMU+#knOm8x zZbZI~xl6>MPEZ5>#AdM8+jK-ZnhQ|wXs}y?G6UeqE3Wt-W_sUO4})-nXo8f80R8qF z(b35YmKn{6Pyp?pWc$4AP_whz_5#=@{DCwhGt0tpa4k5{$hp$fqAX?PVoI&3s2Gb_ zEW>03m)j^Qp;$k$8O5HA3J&2^3GKClZ*9@^dTTEE^9$8TU*C%K&H{$F7Je>uLt$rS z_g?u-e|rSl)ejK)L&+Iyz0jZ#tmYN+01Gp~t^@}%Nd?gXn45s(t?)>#7W0t6q>pF#< ztdjb)@u4o2sQ28$A}pHAHpXQ5Spn-w+X;`38|DiT8Z5 z(f;)Gw6wGYeW8nujce%pg;^#n5R;{W!dv2djNn~Vp1l~2nV`Cg0vprYM!P2OEVRV! za^2k6&CcJ@wI9g(qsvM!di2Sic93v`$v)X$q-Ge2*&n0wP1a!@Sv{EW*Um`kI|x=) z-YuDkX$)RwI`d(S?(|J1l*dD|I2ZxFQ|8134C~DO;TK0o6qJ;po9FF2wTOJ9q^Ga0tR!X48Oj;``1sHwI2Z^;%<==5CEYmJ@6k!Z1l90EH+~SyA+8Lxi*1UJdcN7%Qc7E^a}cuj*3n zaY3dtNRW$&1yzpDTIm3sRU@yj`@ZiJv2TD|IUnxDSmKf863tF72(6kfk3Blj>QQM@ zo!~<%FYXIsq|Cy{&nExa*jVBb60Wfr#93Veu^y52U^CipQzH>yk}`gz8OA{s%Y{w~ z0EbM{YvJo-heQm>AO7zt%*)oE1rmvJ;+Bynab#3#U^Wf>3 z#;9!~Z|8>5^qxH!Ogg_-Peg}Dh{>OCG&;0;0|mfQ18|*!q%Pb>;mz!8jF=0I;BST0?s7N+ltk*OJy-}CIDy77Gs^Xc%+j8$adS&ihDpmL! zr>fF1$FQWw15M$Cp<%{7iML~{_?94HbU)A!mtV&!fLX)6`qslv_v$8GQp%7}#T>-u z+_}Y-SmUm-0o;xBXcs8q3~Yc@xqLf4S@dz?K-{^6_kPY@tKZdO;uns$M)T;WCF5@f z_N`bxJexN2Z030E((Ry0e`18=QP<4N>t%m5SuoR+hcNtRB#C-=XUA+Z%NEMD(R7S{ zs*fZ|4YJH6%ak+Qcc8^N%qc=S3e~*u$@^NJ{(8O6(JOuvqE#xSN!h+qeq=r47jzKh z0h_LMNB6q5xDd=*YYxc4IY7w$^1wCQ`g@;i&~lhupJG?Ky=?#4_hS^~NypPSQ-v-$ z;Z3RQWxjf=NzsQn{)=Ip0JSrk9iC%e5YYWgq<;PTb?*01~75cjl`}CMTUAFk8$=8belPN?N>#y)Dfc}6Nw7m{~%Cvi;i(;*c zY+VCt4#nmF(NSMHN<3)w5KYL#^}YCaH!bu9uS1}PTBUqE6A_kObvoGba>j(>Dhp;?DXs|C^J?d3%# zPq-eCj`KgO`ZGL^REsE(xwt{S0?2!SpWOiDrkQyBBzAsxvRI33zmrYP`WxTpy{<5e4bM`g_DS5ZR z3r-F5rPVm!@#uz7W6G6T|5`6Q;YikoX1x`1`RhV};eOHBxG`~^F=aiO0N?TlZutB{ zFQlOTJ2$tsa&obJHqtH$ipArn@pB9Gf9CXm4&YTDNYEPUU{SebdzSkVjPGRAjZa$* zkC8DrHtRjbG7 zA-WxnNL-qJ(TlETd=;0sPZC7AOgbqs8#XPI^c23!+zhv$7S*5Lb^-KY$@9O;TdV@rP zZEIDXSJaY~b-(g-D?Kd#Ox1iB*6SM+z+xx&#UdKncj8F6y}jjL(Vm~vBs=7-FBTu8C6o>Ixow@IYQSkCPem=DPgl#ck4hUWHrb;kQ!KtO?n;k zTB@6{>?vsjb{>4;spp(|Voi;WdTnm!K*Xa)6jWBmjP4GXdcOLZb!1=8UB!1R7JM-< z_&+x&oq%Zqa99V4`2+0U$GNk*=rbTCt>qPw9Ih^q?*kOQE%Og*rg#9IeD#|sV{C9O z&QBUPX|h{?c{#0~%-{rvTtbf!sjaPrJzabaqv?mJSU{W*1a5nVDKoxi_P1NB_lW37 zz|*BZx%`u;%jE_z?<-7Zwd+{r7n^fwF{EzaKzQSb;IILmpjb8?6BX6S<Eli*3{4w6wOhR;s!UN>nE|JpUsmJ4!Qm(WpPbzeJe?I!Si$QqUvI@ zHoiVRmsco>{)d5t?%EhP@?;4uUGdu$4DpD8d`arq_4PII4-xtbN!da~A+)@_9zzk^ zeHEJ^+kbc)aUpQxEup_=ED7`AYnTd70!Ov#9A9Q~pyvBYh4eNXs6SgAcg57zv4(Yn z$e4}%0@WrZIT{gu{GOByufd-FelI#N#FwmDF$4v8IomV6S@sOWmb_zmpC+WjMkXec(b#dL{DHaqS@z0pxp9v>YMvl{$= zrJQ>_)B7LCH?s}7%w^c*G~_Z(?sv)?UzdgBNar)Z-`~IU`2BwWe;%LD`}_XBKcDyK@_s#ch{NHRUkIBuVkHN` zURb1Mi~a*IyC+my*Zjc31r1NHc^)bAv9A+aK2#N4spqC$R8a)pT@089`n4yf+6MXL z*4EZ9m(SRM+mYcCOG8jNXB9@sy0$U#I88>)B4#~-*)#60LEx<`b6q?g8UJ`;9EzLZ zjLPf>@)+~kLBqp92RiZcnWgE7HYl&J8LZXX_YM|eJUPf`_y~f_v#zoCxm7ou&2wfSOA&f;MS~AQ5s{5eO}d-M1rrv5 zFjOI&);TwiRN2(PIUCCI1Q6%sBY$pPmBDtsrV@YIqxd})dPeiDKu}#%bMW3N%mCOx zSM+5++Dac0CQF!LKiwt9$a|^Gfoa)4_6bzcgglSn8=Vjgv5vhRt}_@6Yz~6j3~3+$ zDq&L3ahGMJ_axYN`jv~BU9GAb+qQYuOW^Y)jY|Ff{mV*AeO_&h+G?a90s?i5C%~_| zzKAm}_sdRtY|8}@%*{(m*u<+BiDxv2vyZ7881G%O(e&qW9GY7SbjTYqlpfFg+iaqpYPtvwH!Ke~qgejMb1Lrjy9G;3Zd__{va zFjMvxsv@8>85JQtkWCi{{bH(IH72B??nNlx;%1wF0&Xcg|YAZ1qDP(9b84Xw}90_F!Zp4%J;zjidpPt--gf;QwBDjJiU0&|0 zRM%5C%A2YxpFJ%r)*>#OkK z@c2ka%Sn5u?j=n6VOgBnV5W71o3{N~LPKHqks-HqfUcnjRyaquYx}UN-Xo%meC-&2 zEoMF7CJg9zI5uGc2;zg-F@;w6^iW3_0dNw!zkvK{eP)C(J+mkx$6$fK{!c0lU2}xu z>u7_&z6&E^9xZ}2NLomk=^d7GWd(j(jb%)NiXdR>L#b3>H$!rFX&T@&K-9!L_G-G( z1lxI2QsTsmL^?`tKR{4;3O_d#noIX^&xD>fLFH=b&ViR0B`J7UDo!GJ`_`>nl??+a zM^y9p{NUq~+>JOpga}=Oac$NLy03>b+Tm*5rhyLkSa&|j!0|*Q(d{|pU*S5Ra((m< z5Ogi_Ss%##mHJ|e1sRc?O{B)N?p(YqZ~+PSFDnB+6Z#=i_?C6E0?EU9(aYNGCCwbMTh9ots8 zc4?v`zCFQ9zd@?%#h|N8ue&~*uyE*&uY%?&)TW6yk}A#pSs%M0dM!7Tu+7}0iE{2L zqcXPIkB@E9O#La{&s~>sNSiP8`H|3Jh{+kk^>_<35dQL^T8PKpjNT zMl>%<9Q(_OG}4a=Sd9G&&)TnLbf5%3jcS;>LcLshH?GdlB1PWzh~{g^8i^uH4!MEg zGfa*X;&SM(l#t(r4;-t&RC{+pU0D;bbh>Y;-8^OGDox~usrx^5(oSS$L$?HI`Ra}w zO>C=e2{|}4rjf!tJ*(z$%7~r0=DqlFjyn0w>+^%uQimW!>sLD;W>JPl@n>v{f@LSs zRT;fc`R8&~;8^%Nn+th%|3TwY*0UO&0QXLC9z6P>Q# zknbnsSP}7Fp-a)?k8(6c6eVfPOc2X|A0=Sn`CI7HWAxZ~XIG!0j^ymao+lr3*z%J^s}q(Bi-xiOZFTDLT@vDkq`V=+*rh|n1a{`)X? zghws1T*g61$w$Yb_USu6#J5O!8_q7goQ3f!vi45;xDYvl=z7}So9~aL{2Iv)CFjbx zuOi3a8=qhPJ@kSe4h6ace3Z}`)SYjM!2~qn!0Gcap&>i->L1jrtu%aLawcg*p}^5k ze_k9>pj5s$ww*L97T(S}b=t{v*==tdthQP)WbXMz7c`B-aQW5SDxu$l%bUcF<-8N+26~rY$DA#hcMUSTv;vpPxo;{haFfo-4%xK9yu8GvqzSe_g|Z#D z4b@e)lb|%~8a8cz{ITwA8p~O^MlN(|Jcr(MR+hw44yZ?JefUa!txn{E%$=P=ihfBE zdd*%hEt`afed>-eVvqO@tPf6bNwoTEr`c{h3EIp6H~(RVx{ZplbpB^a8h#+-K(xwRFqK8PucZGDUi3dP!ZK$Y{C^Xz+vjj#7Ql8E{rLl$oke{e TBsmQTY7mHf literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage1_2031.png b/img/docs/asgb/asgb_lpp3_predef_stage1_2031.png new file mode 100644 index 0000000000000000000000000000000000000000..2adb02883040bc2fc35eb6b36d6032bd23b9bbd7 GIT binary patch literal 19734 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage2.png b/img/docs/asgb/asgb_lpp3_predef_stage2.png new file mode 100644 index 0000000000000000000000000000000000000000..495e68ea58871f35166eb491017b81c633829e91 GIT binary patch literal 18719 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

    ;L>Vl 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

    fqD1)+6CiIoeHfo4dph1~wW$qj4|k7P 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 L`njxgN@xNAcVBYh literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_predef_stage2_2031.png b/img/docs/asgb/asgb_lpp3_predef_stage2_2031.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad0daba60f4f955ff4dd8247f9cf3ceb17790a5 GIT binary patch literal 16372 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

    _9GC=MNPB^=sVaHod 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 a|J0`%^}gSnSW*tu$l&Sf=d#Wzp$Py3Opy`* literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png b/img/docs/asgb/asgb_lpp3_sys26_capacity_and_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..a426c3ddda5c2ffa3101f46e792b71202acfdc74 GIT binary patch literal 11469 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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd200.png new file mode 100644 index 0000000000000000000000000000000000000000..64c6f8296ac8dd3f443b43d2d1d83cacc21d8ee8 GIT binary patch literal 7903 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 W$E;WRIB-R2fV#4_QpGcy$o~TSWmR?n literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png b/img/docs/asgb/asgb_lpp3_sys26_maxcapacity_at_pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..332651bad374ab39473ef1b56d1a02d23ee6b322 GIT binary patch literal 6555 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≫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 bwr?L+N^ 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 UZ>u4&>BWU7s#=dK9-4>#7xbE$Jpcdz literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png b/img/docs/asgb/asgb_lpp3_sys26_stage1_at_ps31pd250.png new file mode 100644 index 0000000000000000000000000000000000000000..439c83b3ea600fc6859f4bb5a04c20e9789fbcad GIT binary patch literal 40153 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

    ^c{T3c;w@OY3KDVb~zx&dL2;jinH z#8g$CMMQkXQ+9jbCcaN#OAwBWWuT_Entyd(V|h5ImtpTdbfcD6z|CZ^+vnBfa^-fT zeKvbIdu`K6Hh8(Q_$Zml{9#~)s0eXbM40xjD*w&XFdpjK+DF(aH&qkNu(^u{UL6eu zeK`QI75vch)vNpJwP@RX!O)l@omqF`CK!&)r=t^(XX)+HOO1v*Z4D&HQgzN-Z$4`U zL@X@Mma~8$e5kk-7CtTE4}bqa?4VX*3;$x;|E8IX?4SFmsLj%z&8MM!BZAb0A z4h{w?QevsIA)NhVTIKMSjO16lx{o{aPqZW7Yvd?V3gN=@$)%!CZ~?#8I5(fk+^TbA zYs8#j*Rq*GJ~ED13t51en})D*Y$FJjfu<;5l^lxG8BExB|0%t2RO|LQ(|+}t7blU^ zd;ejsCjd0DE3iQ6i{fPi5X1l@4O_LvNk9Wf%)%>-SpV6 z2ZAb&Hc+uuL{MI!(O-=c4~rQVy*ogoxI#mZMR(enNE=>jth&fzvE|U)b>L0yefXUS zT^@je{B@u5p#TvMe^ZiJN)E3WNGWpgXY3H{U-EYdP_|=mo;+iIo@b?)W4R?e{R~y|ml`0v&>L>2MRef5It0V^g8Dm} z@O=%qISHMT=(ZFKw?@bC!FFFGf8I^Nd#IA^YanpH&lB;5+3egZnzyLWB#H zad3wjDR1cSn!gnl$;gP&idJPfh?bU8E}ylB69v52|E}Mgj+YsuKu~E;I3>6zFOzrU zsi~ibs+e5+afoBd!fa5B*X1y35ocfk-`aKuLEFn$c05QtBVWX8>o#qd#p6Cg|h{1Z!=bB=jcfFI%He!y&bwQOJbohH_9o zisX-b#A8fMszrEmjfbECG8l+fx4U!ZN&$~h!n1#-T4&!I8y*=6Rs?z}{`I4t08Cx} zNz!YPLLcKpOl;+3C(-Lcr_tkZa?gpzgX*S=^cP$5p$W9uRkzA?sB?<2wh0t5M4^fJ zslliV@Frg{_SG~5GBOGZ&V7si0H=LL6~nu4-DE9>wvlX)4Riwo7Kl_e3f9&t7HoR! z*VO(4^x$;toHZYUYvUA3PZt?KKwA{~oz0kxYqq+A3l^8lqcWZ`&utC(WG9YzE#rGf z#~JHZ6Lj~BXc%(`uZM_&Uw#?m$k)6&vYHK91{<#h%XZ({^%0Kf$tmhK27mioy|!qg zXpOBMPFe_@?u|O1xIz>qU9?of*-y{Ghij3fU`QNm51>sR6|zRtNBrEzwO_89pO6(J z${XZU$gQXtK`!7SRA^Rs6_dH)nw1*W7~cQ+?mm?3!IJGcz>M(fiCuXuFQ2#pZQ&k) z-)?(UML3aP^UxMbfHMy?D}-7Q6&0C!dUdV4^V0iaV;#1EUYGCtSrPF_85Dhe*)Ey` z01;Z7hB64L2d0v8@XH@=BYE%A(%Mjpjtx4_4rIIU!@0>O_OdO}Wn}bzh#v7xtJX1z z9g9n$d_WNtR-ZxC1}vqhF+rt%SUx`T#j&D8?g{eeEo&f$Ry9>%Fg1P-Ix zYK!G5uA@=r8H$2d^EIcc;g_iE&fzQL3oxrWSm;K2HXtR6od!o+Xqfi}XQEx?9$S9p6xi<=8JcEV$r`&NE8bE~E)y9_9Xd*l*L zD{*rB`)!2KIFL9D$eEaW%5H0lm4%!dLOct5BT4^3R|>E-w5Fo6bq04E7Hbw{v$|Bq z<)R~ve!{}0RVs?kZ0_kawqK`676hVolU5dr%Db7snO;0sjOyZZd7cI8V)M@}uPAbO0>3J*#))$| zKId12s7XIB%I?}E%;xEqZyV0TR(K6W3!in*j9X%#ov$i}%+xA;#z4ZiU0RZ*ps~v% z&EP9(dUNEfKHESeV_{yHUw&5hbHu5BulqPz^Q2(oK}axR=~nsBVk|$GbYIF|OvDD> z!>{9FBFSBx429O8mQ(m=$_DLNIqTF%s_VgsQ~+$X+iJdu<=%4#(j0RRB3YH4; z>Z?NpSwIU}ULZLZj;Z@a8a-cA6kaC1*mkld=ELWP9fs{W*3=)9k`$!v~o2 zqf{gOhs!z4F9*1dY6_gmy@v$+oELbubSD(1v~EDbd1M(6`dL6qOW9q=JrJB zMpBm(%$OLLoK-Q|cy?-!fnLJg%rvs3dui$DewI!uYQXj=r@WKmLlP})|B)~giTTu0 zGcRne%`R*zDTP!hs7U)fgemFX_+h3M5t}F3+V*ki-m{xHz?E4al1$<$(9KSNm-*eu zn1bwf^oRHXq2w-A@}@N5jLhQH7Pn(d!1%Px{=@iOvxk{U*t(##ooi#@2LM>fG7k(pT%W2x`K`6`*ZkCzyaq>i%6ugPw4niTTRL zUhcd3mTVedFLPK0dR?8R>^Fs^FB7*H~6iaT#0Eb za!!Mo#5kDmHmN8e-paT|OUj3wv$`SXrPw4*Y)kWTe};T-4A43|rk>W)oHD$!lv*|1 z>KYdY(<&5s7GyNK(~t1aMcAnlDp!T9OzHFQFABi2RLt}kxlwybv$y)x*cs;C~z^7 zkZ_LgLH_Wqn)PZqY0(mmIg_^+b-9OYnSBu&=hgxbHWnF+Bk154ygW@c__0%ma;DCa zROr9Wn^SbFfUh8j_(iS#s*|P6K71{_U~2-`cTRm4{h_3IBrg{1h7H<}ME8LNPDTSD z=uWh$s2H14OG}BZqGN`Am**p7KYzRvF~G(a!k-&D0wB~IVrV=jwsB|BF`BXV%c6m~ zupNK=aP(^tJ}H+s^swuk<2Pjd-pI4HL=0ajLD&z^16 z$i-T4;I|`oksi^M0%ul|vK~Y`gU7z5H%8qf_~b~R%Y zJ$kQ#(AK}#=V(bVxT@Fc)%fs+Tr58Yli8SQNnBubQHyBI{=Nc_h{$ub?=G+S zGHc?7`-{V`2Yp8~DKC^i-bK+KA3rK7D6&cAX?cK}-m}q%yCrO~)2??f+))7;JFLn) zs%LC!DnwE%R*CmBd0^d7qOMZY=^z@ZA*wBjyPMVQ&LQeDZnrTojtatab(Do}`k-=P zB0lHWQje<927_N8bR`CB14VkcIA%>}d}E^4_GoM0tDE9dwbn*Mv?BmajcwJzB&s6K zF27rcEaV(;CZax`p2qZUX${gZO;M{5t)&sgepZtzr7x}0{exb)9T3)MFx(5&s_@h{J+KBd%FFE}OhN)o0E(p{Hy2UB za~S*;aJ<7sep7L==g?4;SxdmlWVe2)CCZV<_vqV~#J2;f;o+ynFF{`+@-$622%iAJ zim5|WNuh($ZYJCP0^DA6&=8%hX_i8(q@2M?r~sVftH$dI_u; zePYcs3QS!A?1WyvUyoOsFn)yUPQ=sbn27ht(^;LG6W~G{`y$ttVRtN{^r+#f!aAvn zS{8x#q$HxkE!h=F;Q1@38gbr!nA+re0_?M(%)L7;s|6G%))O{2ALCd8X1;$nB!cC) zwTo25)rLN4@bVFhqtl?#PZi~dHdy|8GfSgOeX3C`&@h{x(T$8n-g3Lk_fut$DDgo% zyc!Ey65)@!LX!XXu0Xhsy_Xk=T^P-$NXi&F9HEBL=yz)O=;9N!alxNf(@8DgrCO*d zZq!^)LV>kQng*s%CDNeUF617oXe~~cR7hJ|9#!QJeAzZ$@!fkVLrUiv==(S$wKbYP z9RKLZNo`jEn);Q8enqm&t8!FM*2YvfkJDDcs4tl@A;wkDN3x(W{zur^9o>=i~Z&;OqiUjr+TB$0) zp=UXHd2Yw};O=`?a~mMXTCVGrj2@uJL}&V=;yRU@#H8~_;s2o8##Um4Dnz|#2Tncd zo6WBXw6#at6|d;CA7V$!$@Occ@=fKdY;S`qQ~9Bs;(_kAmu{*68Z{H?Zc)0xx{ur> z4K4vUjc!ET*kfE=E1v8xPq4@qNdd0s{>UEJM8)9P;^#*5YN!3&I|NMh!SG`#k+5su zQ!_&)DGxu)S7YE)(!gpoH5sgLqvKN`Njs%1h(CCs&u&O?^=LRs^nFl}Y+|M)CU%Id zoc@c5(M)uCx2H4=loUOSku4c!JPoH$b%RsZZoCUst z>v{3%6=+ydgYKaQMx|-k_G?>Xj@$;t*&M|OF>?07`Q=3y}Bf;Z5xLc zul#*^`S&qs`qNAz{wY^;WTcYNed|)~MJG8}_$wJw?I<&`ofYekS&+2321JeQ(L1}i3zmx zdmgTTuF6ORbSRJGk{Dt_CB-zdUFvP~o_t<-$86(lnDmuN@Vdm>+IpuV?0CIU(kY*l z68ilg?*mT&<2R8`p4Qj5f}UiT`))z~+&$8MW76|Sxez?uL;`}5ll%}JnMpWkz3lDV z0jWS>PLb*CoI0pPp!5DT{XZxJo;m0Vpw-XUWvnP2K$}QO(|bZc`o7B?sD(S_)GAUM zzVop0v3);UCfY$m3iu^TAF#3bVJfpOHpjo)`9=uR^&jqr`7Q)$P!+eN(5530H^a6g zNv${Ywyn5QaZWpXuEXMwtI!W2y3GWfFR+<`h;U;cAd@ZE{ht=I!>-a(`EJXZ=A%W6 zO2u?PNqjkPqa0i5SQZw-%*=01#B*hmWtNZtBK3cFe{4id{JEBa-N!I!rv$-^Wr)jxBC9>{3`HM?i>556lPXVz zgDqkuOIZvzUkODOj0!nEUK>;-UpcZ``Oqb;1=*dO`}*JAADGnYf_<4Q)=QNCM9q13 z83_uGlEU`Bba$)Dm2u5fn5q`-b5BUpvTL@?G-TL#$#hx^VIoS zZ071e_?RF|w`ye?dKOmE2l+hF?a#6OX>enrx`i|~Q6v+y+1L<`-IBQfkm;7P_Aj`4lW`EnCY%GL@$v8Qofj2Qe<@F$gW%`0y0Xm^5 z|EyIS6U@L|iQa8<92|e~TO=yeag{&ohD==^x8lI@@JzMk7aY#E?}&lG$c%Cs)bTe}}; zI3_fk#bcYDy(ykubl-J6!9r*tj(K-?8bPNEtFaDBW3}(EwViy5lT^PFZ0~l2wet9b z8kta_ufIQ&9kT5I7?)&AQtP+hnLv zrc`4zP)uF@;_`e?L19lg1P}e0@dP}e>_soOjG39UY5rG9ZS6gM{f_U?S&9YA9n0Rx z!CYb(Sc0eI45?XI@fef!7w*x0t|I%BA*eMLOjF9Km6Vg$rILB_1~;2clhT{FdW$f+ z(jLCrKPXc&5{tp}#05k;hVZyJkhe449sGQEgx*h^0Ywx916&*HqR#r7N$PxRs;b#6 zoSki50oj^7K7k7N;C>a%I$%C^K*YEnxj=y8MNK?SUZBdOom`rP@GP-9%i_+Z7$>Fi zx;;P$Zfa09#bhB~xi-k`zBfBjAX}uYM$1jsaI9l&Y_eMID0LkT{^Dm;aj?zF-~&$6 zmd(cy`$rA2zcLtsXx?pS;nw5Fc_+d)_N=cf=hapA_dja{*Kv{I%`W`g#>Q#vlP|wd zxnXit2>+;Iiog2#d54`6V7uc0wtH%exow3DpXt<3y^-DY_9oyXBhi%6xD{Or8|1F~ z835mZTV_M8;+YZf@xm@An#U%a#ZLBoZh1mGCgeYAxlcUh1-4C6oJzMX47X&tDB2k^ z(i=%TI(xU7z&9q`JSzkFV`r7mo9e}p&8wrUdy%gq`9CNy|X|p6IE~cvX(|cpwr*uQ0 zjNId`kXK8Gj^q&FOLYUs0%%$5wm>ml+#{c&z9f3v?8;23$oJOFj{zOF_K?mrKAaR9 zF3;K5AH^Cky`&o}ruen*C^3qhu-NV(x)=~P)KMSY57;yx27L&Iru zOt5hjC=|CoO*4_v<&I^SlKsGeUVXAwILRmoPvuh(@q>3v!4Ju$c+T?#8SAwtry*l8 znlSqU9R{sS_vTQH;UFhUdb%+_r@|jZF;%D!BHXim0Fdi`u#>WSh3L$;&LA>6zE?_u zN|)CAMaj{|mC}T}1b`Z_{`C0BH9Ybx;p@p=)})7TZ$`uvNFP6ANkt&b6&!e7@6q zDASYL51HxDpuuMIC793X^aKp0w~C9UZ%e%MIJ_m4zl8+5HR`OKo*bbIXb~zYoo(sq zLjfc_wI6~x40oq|QGK1PkG&u6Lm>^%$-FtEP!xbolA^bkgX(u6lEKD?PRJ?iy)KV% z1Tb%0Svh_>iuk$@jn!24ZHp%frb1euK%hqg(Q6yZ7}3^D8nejRUEYFbXSH?+iEvaq zBo%LRH@7q6sYbbUjZ>zurQl=L*?hme&O{)8kIslI^z)pAyvHaMm3(#~WZ!N=G5BNP zzBG&n;y&BfV#&MGg19GKgOI1tZ35Wy^p@q%!6G%|4>0_pV?R9Y#ryiuGDt?I@0L-q zz%ujJa&nmG?8Y8M#!}(GW<$D0T#GU?y*jI9p`v%w*Ynm|9H+3x&fP}mD*4S|LfRZC zY+KuKu=c=bC_}ajC=LvZ(6#S(!*ffS&PnA}s7*L$gL&du9~43mmzo5l-Po12icd$D zNaTo<0R-w}VT+ES*KnzpMnQiPbabz(x75HG|2Z8g-}OEpJ4G&~viuADyP!d#HoS<= zX8Hm31yI(G+M%oI2Zv z0?6PW>0!I3Rl#LWGMHFv*d@B;R4;wId@F4?AIoXa`oUi-BMcR#^Wh7kB$ zaj8k(Jk^jY?wU+Nb&R6COH_r5bJRN2n3YcTF-Lo|}e|~a| z;s=K@ArN`V*QB ztsMgA2VNfCi;96E4b%KFitSf2(7FfYPJ7iyt;Drwd;ASl+g7{JxIH~ILow)0&t_HY zCf1GyoHZJYc95dAO=vi)XTO~V-h2+J7|32ld1z@VB%YsNzUK0(LAg|*aJ))!wtqi8 zMBVXR|LhTjxXYLI2@ZwC8yHMTiSo;r&92^llSB>n7u=|*sM++7?$S^I9GhExo?>_D z)^jpazLsb>)A4Ru2S(kHVRK3i?j|nousPtL+m@#C;fX%x>oZAIVCd(*^e*?xdGpHr ztBt-cTIT##!-FSL7u@rLeD0c2$|_q6B_VAB=fM)z%tOpfsq>(q8i36w8B;M3-NZz` zMcZwX95J&zr>?8~)~PoCKuMD*-kOO^Krz~eSK;W0kMd+k8$fwyB|eYF!-gWJdvO$q zLHE9y5;5YNXp+cnX=v<{PT(KJGU3TU9Tu|G;2gwKJzF)q%iX{nie z*ysMuuHinR^GEIl)`K3#7xdTA0k-5n*Gl#B3K{b@(qPy|A)tDro+%GHRL@0?jATQU zHO*hYoi&H+PP5(1SW#sUc+HCJQIU;_fbQ@nTcgDf_-Swot*-#Bv2XVwE#w|)o--Psk% zXl>yG;6%o4GUO9b@BM%>CdTnjIkv40WcV38b!BSSWsVdce~0A|LR^eu<|t+>>!3n^ zKfmxtFqUt)V>%B&f1oADw@E*sUaxXJPPBsp$+D06J|b$y)1E_a4hls1@+AXgn zPYM_qBsEzwzBMnjhV0jh6)rloHXt>h0$f#>pWhb27$%W90!ls+QCwL5I_|by_dw;L zi;!KO@SPzpK-o%tg{a|fC z<}P;ud~%thULbpxdb{=ufPXw$!(*u?fyC{(M<5D&;9&auoibYogVvn<@DmUTU5w-#cv* z%M1fpFaY5BnTj4eRUt-E%LS}%*N%@xU6XCZTnEO4v*sEd&f_Qj{5)xXyPQ1Lzp$G{ zvo@GQeM|%9vT6a~yV6`C<|yt4{&Uhb6z^sx{je_F0&2Z*LN2AW|9ao^I|hb!llA}& z1 =2wA2Oh&^;!*;9cwsalW==lzole;CT{YBWzYozjnG?(cv59>E2YIf1n%ELsCs zLc3~P(>5=DCb37%325L!!fi>N(uqCpXX}MELP2O?2doo@(*C>WdwtQgYJTA-o*5hY zB8@7R)bQonM(-E)eeHo5my^c&E-2va&syc&RYkn3gC5sd~Ef0+SdXLKo zs&8_ufO*`Xr)UIncY!%H9l|?6|K&>l#-)w;nq+IP6evpH$Y>G$x`s?4@PR*dbo8Eh z@dyTs`uriZV<7c&bI4p^E4?>TQpCGQ51`70TUDsPU#!($lhrj{ufqC>Fg(7%a%H!w zv3M^%-R0+$ZYd}h+Rj>2N`#xlC*0x!pRAf4>{ltuGS3y%;r=8!IbS?)*`B2Ml&h2l z>cjJ=dy4Eu=E^$3Qy2XYL`l_f*Y?P^9>Gz{K5nE2pm(^ZKOI16@QOK9qqzi!OdcI= z2D7^N^rUkup|9bj8zPpGt4vZTl0aEqch}(%T3=`*lM!8ERiF&mNb1Eo8BzdKlu-OK zE;*xQ_}MRY&BCHzrU_o&dxFGGm>AFf=A2fPREvUKj+Sn!KF-)b=w0}5CDfexpTz<~ z7h;S5;b!(5L=V?+sDAa6gN%Pjz0R!^agw;Wet9gF zHFsDZF@?YA${nVXpyN7Fr9wS*wGabGG5mA{}64Y0PW6t9!$)oqe%-%)XE zXR=m|`Qxc+7-!MEZ^~hik+J4pqW^CfROI)f{)%d}Wvkg;*|$ma%Fw=?9~ZE?>H~O{ z$~r#Et=7}MSvKvKJGvHK<6z2g0tX?c+qK_x0_*-gwTG&xuKS@<3BrE*3lE;CA)1-q|R{2r+T-i}n7F!$S73%Oe?qprAd_-!BHU++itY7kj$a$%hEjO<8+!_WR z1{h7QDfSQrR8+n6<4`8XhZYBO&qkRxApNxMc(r3JR>`QZaTbzy;x% zOGyb+bVe#4=?c)CZL4UkEa$B5;WjaiCGzz5x*!!l2kCI+BOeWlcQ*Ppbq`K$>U+uF zbPD|Cew@1SdAJO$#RHgG1&wIVDDa;dtmH8gQ;nB@mHX>G#@%mKq&xPhf8#sTwM+{aS!r! zsyr=8|F=(Ul3725Pe?WXL>lb$(`u-w<$hSL$~)&eUwn43OscMbZAe`=Nd)v%Vk_=` zKsA9t0Z8`cn0!7pZA9D?UEPWXXA75~@9qZ#>Ti`zO-*dLy*>ydCYNwz09rLUbFDs6 zN(dZK+nVt(u_}NG*QHAwna|7#eH}g@|hp-XSJ7>z?cHlHV2(JXtaq*=+|4jb1HHA!JEc-n=-F{`gA;mfJ~DV z(hGd?Pz4+2Ie0X6Z?_`|^ss39v6kB?s9?;Q5DYbni;It)9#}L`9(RZL_dO!a_C=v* zki4BLIt4-G?2rT$^vOzdv#Xib<5DGxj5n>jL+^$rF*2^P-@XLPuuDdl|AszfI>nRK zu~fb3(A)VQ9)D(C ze-_Pv)6mBioH{-u<^HG~wWheQhAFWhZ~W(W7kKC1V-mzCN?^%jrYKZh5#%HgAXVj` zU>o7$0+&2h0}3Pu?mn{ble}Th2&D!h<|TE13<8XN31C3i*2ZiY=s93ObU*3u=l1sn zzI^dAQczG8_yV9z0M=tUbXXgBCnV%`@a?xnUNXr*ERv& zSnGEliW+-7cOWQ_z?n(a(=!4zV&ENi6hYn+BVLsa21KQS7fn0(HH0BCU!>uss4YwH z$*s4=h=0bQ`tD401OEpb@jLF{5Wi6#`NRw;JHP3YLhb<5S&}hq9AhJ+zkkdQszksr zMjg9GK3G7)$qMY7%mo2p5qusTOmW-z#k$=%YGja zG=922jzb67k`O2Gu>N?atz9aVT+6^X$!hxY(QSwe2r@r~w+R5#i0Q6gT^a(&CNNiZ zZ+(J;XL8b?WJYicVgtU2A8(ujj-%;kfWia=@)iN{9l*lRi;C>(_}TBU%j|4J`HL z_LVa$_+$hFGq^H*+Wk&aWyJ#AXHE3?=5CyxExnpr=^%nQtZtb2`GK`-E{0y5O2oeW zK2=7t6{f6fTBlw}L2sll!>0ib=j`8BFKp$eG|KV`;4(xz^NHgZAdXYut96G2V|d5QERz z+1VPSGi0PQ05=n?d>=snsL200aAtFW^6^fuUe1Hpe~ivKnSO!Q$3lG0K_1XsLioT& zZJ9F!|2Zpd`#j|orqe@Q9|2#{ll0V7#GvqCuv)o`+}|y^Tg|w13&bU27H# z+g4(K9gX4PI=js=;A|8-Gpj%r?Pd%B&M=3SjyDGtJ~xMP{|RYI<8{oiJPuu^L%s7a zk5ka>C_w{Az54k(pMj$aso)8)GY7n1;Bq-?zms52J^RaZgQ!7nkx=!k;9q{}e*%TP zbBtRbivNdq2-uR?A;8Vc#kbMb;nO`panGXvx9=Ikk{rsm!*+R?5_yQ4@|yI!T+wZ9VcW8%W*3YDzk(M~!|JUe7*N;E%`TtJR z1fN+eKN$md*q8bKDM!J31CBAnHU^&1ijj}3h-Vi9aVhSNjY>g`a&69FqJXE-zl+hI z3WS|nAkh46d%MRBY;VCQK$yQnAO_%=fIwowrVoL903{*_#2qA_|NjsEUJ?Ts7;5Eg zRYO>{As2w$*YZ4#9nGw>sTkV!|PWH_ie&7&IRkr!Ga z|Mtm-xEFfw0nlyBm-`(_85O29pU$X%Pg#w%R9Iuyo9F(0=O!%#dHlLMaC2K~xvP5* ze9J>#K0cl8?YLY>Il#tB2zQvftLB&cmo}V=6i0oYns=uaBq8>@h^L2NUtksnnuN4} z9V4~qf8H4ARB8a$hqrA;J8*>4%ee^nE9YVx|5wU|_;dkPEOi$othihZMh2%ZxQrMJ zhuP}p9{*lD8||uV#CG}2!EQGMY?bb}fM@Cdqx&x|ZF2cowME5&er2~o(&h-U0w?|7 zLT0sMu*)72-W8;FJSoRx7fgQ|6tc0rQ*9m4D{SPz%OOdlCAbPxqI5uFdm45&y4_q? zRb)?8BRvUiY-xyhJ6HhnOj+3N zqp$McaRjAiE6Jr=`cDkkFC0h&F}f<}yKWlPjIy!1k6mit)VviX2{ls-yK$%@wIXIo zR5AB>bM>~;Oz?VTJ|O$SLc{#cnR&+Q)fWe(1HLu>nfN-R>GH;oD3-}z6k&hd^-S(x zJ5c53<(i5n6}mmhh(xpHGJf449r>3VpRMuep`g5yYJSpCk5_kx>%GO!L{)X}NLio( zmNFA+S=B4ZnZBAMP!Z)$eBUS|!2M%>)}Hzhd4ZNmhmHQXuHl-K7VMw!3+v)e{*cRu zAG;&w$2THnrAX5>W;~*Ko(Ohf%OEBjxzx-!&w2L8mbY^vIXSKm2HY?l(|lc)=ee4( z{MddL5+q}o_#1AbvV!qnvESx;9n@I6mb#2z%E!i8Yf715Y`CJ`{7ItyPAezFi_~*B zvI5_~Rrjf~VsBbV1kj{$IMmP)ST7tr;CociQv5quJY+!9;#8v< z5?n1$_38#A4uONYuzTtq51R$0H=+*r%cbSsWy{Am{Rm?F>3+CB&%Ds=ET~pCF#jM$ z#0mZVL(8W^53PzjgBqll=4Df)MKv6t$_0r;8NAH?R8&ut1~J#^Uc=wZh;sjUSkG4P zeDNLM0YuFUbBx(J-pao#G4bs4;$woQDeyTrg?T1s{pQ ze!q;>0`Tw;1J)S?c%VmNY$2Y&|2Kk_*98dW5;*ul+>FSi(g6+Nd6?teU~5770Q+l_ zZM(6Lh3Q}3Up+njS%6Vx@=*h-ywaX;3aW^Vk+MWCODAjot;itQd6_0rI6__frLSXZBw(ToR< zwWQf}d6F**A{1+`P2cX9KhWnKtDvsvjFxXe9o!j!bI>NC~ zymR1VM_{vG8|KmFf+(lH4{>n~j^SmCo9WLlHKf219M(#TF7*86^+irxu9QB|%-q znu``^eh%Z6qf<=UwlE&A)K!zyr3Zu$52R*ZHEO~Qe5rMd>WZ0M+BItLBc9q-W>EBn zHJ3MLea&czeYM+4$W314cwm2tv(kyjCMcOe`#dK%D^Sm0U1P?sj&hFS^M#X;PSO<0o;L1cYtAtc-dIozKhCvr^*a=xIA5YixJ`?+C%Pnf`W2Ux*L^ooAeNm_)1xZMLc~xb)n+1e+0D=Bsi!2mmt#k7N9!G$L0cyfAz};ciL(m_YdHFgX(zVZ%ACjdrR_%*n#$9P+i(J)Tufd77m8T+27}1`yHbNI zHGcZ0<#|RBg4%#`D+!LnQ>=mkyYP4Z;b|O#l|q~W?bFAKP}2YLhGPreq05bJ(f}RZ z8NNQIQKcJp8E0JhNIa<6`7Z7ysCxLseCN8bfZ?|3ms<$D+1I9H(fj;jkotq|F_Nx} zzep;Rz8DZyGsN(ZuLJKmN@pI^jFD%@b8Ec1N;mX7GUo18HnZiWu-`8<)dGfN^`sOd zj_9|*Y-y?71Nouz}<;{lIxeFiq6Wbimat z!cW~@`w*Cwcpg)4xAykWc$MX}k&idfzW>BNm@4b(Ri1rOInN=_hTxWB5a?kFU~lN` zkp0Z;)9=vRehJ=<-%8f=4Q$%&m%ToOTJk8hgklZdR$ZWcs%E}+kDZ$F1wLk*%m%2d2`_omZNfAFQddA-S?_|KHqD{x z=~y8X=)B$motDw4=Fjh%f=Zmn-H*rTeJQ*cnlNM0m(B`UvaGIvMG|?e zrA7X*#Eq{zomzxhPI*}tESku1@sVHg%M^j0Irt%4yWHE`>#2;Z0cY_1yfR@e&l;C+ zm3ZpqF4V@NxfQT!#c9J>v2K$`k9KR6;JbRBX-E=wJ$J=}*s0W*?)TRAd1S{B+wg@| zz37I0GoAB!Btv}>L;0s9GF~cl+peecK+V9AyE#cuqpq!MesE&pe zu=Oel35m&F`*5N&V>I;rwRSGFAal}0pCyFKw{>`1^~!d7ykDbrIaQ<=u&6lI+uxs| z?PTM$J$uF;+h-*N1mFgweTw7X9JWB56A;q^t0G4pC${LDsM#PHPlC&JRB|4Q<)xVya+4>mQ>ycI zUGD6!z#EPEOr4nhulPalJ_&bzNdJ8huagxV3QfYHQslT4dWxIbGAW@zYW5w>E3BlA zJMC~OFE4uAmkWy+d&T-8l#)s>j8pr)#K8984r`}x@dmu+v&*>q;rJvwgUdz3*Zb>> zAY%0YI&6rvZZdgR2Ebk;$zA8{VMcqEu5;@)B%6vN#ot@B8}~Hs`FyhI5|>j|a?pS8l{qA0|IO7;*pUB43)d75oJ^Fttz-?v!2e zf*woU|CUsi3my)*osw(1WT>Rnx=*|cS4ox15N`E@ zhjCTmTZk)H4jKjYUbAvNV%Ye&M|pYDHN-Cvk86>bKNk%QPvDfUz?C5$qCDTA05+O(Rm$DM*(JBHazrjdXW+cY}a5n{JTYbZu%=&*J*# zeLsJ|^ZxMi`QUOb)>*U8nK@?WID?fGq_8lEF+d;?mh=a46%Yu?8~8;;M+BZUu!u|o z7X&*MsrR7rQPN%D2H8YZUK9kXihO=&hyvU{v;LrI2LfUDJpCf{TNQo=fqL1b#YNSe z^$wPCbUt3(i<}tmfOXHdk{q5Cp2G}Zn>FE(@O%4s4lvip6 z`RT^`8M4yfSNi`)*P?$-t`!ZG$zs9XGN@O)vN-Yf2p-tW9NuQvUeRbW01tjJl+|FO za5fs*cH=qt*sX4T^DA>=D_8jew^B z2t>eVy#~^Hhw!e>jP99bCi3k2-I3LdhS~$>mD;FBSpSR%XHYa_WxAAQmQiiMWb-KLC1NtEYJ#3y;wadH!oTh^FK z_#m#_vbgoE?BPqYAV-e%bkz(+({+cSdv7Ept+4oDP+=^ zJd#M6QWAKaHeuxJ*hu~t??6Nvz}GnJ9*eu`ut7eA> zoifw6Pfk~+=i^DoX?#6y>k>EAaP4|+PVOWvDkYMKKIQbcw68UJywkUy7X75NN~|Pj z^B=bOzkJUx%;$=}LGl$vb6x-PP+Pt<@QZic@R|K^hqCaO-=8Lb6ksZFyoV!$M!Ho} zL7D2dZE_d^Mn(3rH3{38VF_HUhPxE6c(j$VDYmz!cSmK;IX4xFn}6kPO(cfwUKUC# z-JNy?T3nNiJUV+lR?gR;r5oKSR-QghBn=4-+ugV~gkZ8jF@XdGn#ws$ODL9)@fM~y zB7Gd!u4wxWs|_u0h{?SUn9Nv*6 zmw#!QaP{;;r~lG-+~{w^1stCPe)f`5^{%dVNIcU`;OyvYY__kTM$XwAcVLX&Iau(V zq0x{%ZofT}Ak?Kg?sS$<;>hdh&|mrStTWvn{XjCX)AH#e)s=1^WH%;sRa{aY?L>Om z`2z_9Maea7saGIneFNM^d5mf7IR*cQbal9F896v8M5-SfYDK`%Ixg#R%s zMlwr|uKlUaUe-L`6uP`RHv90;rR_b-G)i|bEh1cY@+|a{{WkwjI=_126}!gD%D)!R zfjVVdSP)FdFY+0=@XKrX8!w~Zl$VwbAAuid=f+l~4TrT(1Te8(>DRd!>>ta}7jxlH z7dqhX&(!hg6NJ8U<+WjrZ zmm{?!2Lk~kCK(9ASc70V@vycW4hF3y{jg(Yzt*>351lNN>cBU&AF01L{yhF#c#>SY zackQxLqRd*t|Bmd7j>C?IE|VD6$Bz8L!|STDiOJMS({FvbGxK_`O-hq%IjK9ezB^( zbNAkGR#8!x|0-!Ba`QZZ&t(smUskar=r~)$`oP_B&D|{OB%v<|DDvEkcL;*Xt6Qo~ zNi|i62u~O78Ble0G?ckvz39ItPcdBC!j1h>2X2@j&)5i(=!}O5!mD ztNC^yisgn4=m`4MkyiKH4(1kZ{^Q3Y747|!7HidR_@;3M@24dG zkHJAo)zytzwK-yUUBD{E1KmtdmKH7HJj<@JrYC7l&?5Xhk8 zKUg%Uq_`LZ2PeVFp!LarY>d1~t)*T4cA%x+p+zcxQzC~+Yj<3M_)uHN& zv#*uCQ%btPUsQe_uUIyZW7Wwvhm$H4Gj8BM=VJtUY0!YVqffklks-D~-c*v1p}0-F zNo^+C4a`Bo2ca^fpUg+qt<_x^eoF4Ej>-A;%UaUb>1dGl|qLk44rYK0ojx zU6=}0o`K9M%=}Bb((*IVJ2&8ycYf>cY2vQU_0yJITx^Qt;*0^iy4V!B+ps&0Ysb4} z`z_Ft2#ox918RGIa$1J392b{o*AO2>a#=IY?O-E1f93PvknOKGCJ3N++Caw!9LOlA zg7EC@u0BW@rX?x$c2tg$mWR9GSoLbd7_1)zdiVV4wd&wLNGho%>EZFtX^xAF@8q7W zY#hvb?joJO*Ik@iU_&WFAq0Dt{@O!!`jxRctpkc2rnDlts?}G4i12))w&n8 zFQ+s#&bjhKF!&16gV=~khEURde4B9t6yH;+3viSKw1o657xpuZ0yf2=-c{P$4f zuU<+@fIT!{kC|Yg7iL^g{AdYvNj0^u@jiPBP4v6T>>6OBhwhgyd2RQ< z7LP6NcApPe5Y#S*X79YKq0?w(W!WCg0kFkq0J3Fz02U9hm*RmyGI-vMXSK%AYHsjwXead6q9v?E zR{Pf>!h_Ae?GcO&p4dxK<EvD17rz&o=yl8}%z*-kQ6oH%h> zS*3q}?4dYwN>i}(GqmRVpZ@vk8$#ZR^seekl>71UyrrRTYR5VSf5rr@kefphZo_D; z%a^$otUg_fd=bNA0Gqvf(K#8%z_2+*4PjbX7RuG+0w>rpfIxDIEy&}^BP5qV1gZU+ z<~TApzqFRxyvX$4JvhD1$13`Nz%&C1Ib8-irQ~Gio4i&*%Lgi>+QP2P;UvoE%SfP3 z=O$TDT8I0sqv{yEkXM|+@VUIujzt;spt=5ejfaN`BXb!k*WnU2hz)hUHtg4 zj0-&U{z_O_(5k3*YUM%%&@b+op9^Ni+IJg95)bAA<_ll9{|1AUmljX(u5WuQ?^iFq zghVU3heKT-d6=TPf(^PwwfLUn(J(%d2{-19Bc3cr(b}eL9!y(qM47f1GJf7 z(9Y3V*^SCkaP37$isCvc(oO}mCzJF>8+}v>##nf?Pl3>nA`Oi7>I0R zRB7MP7*wNvFkl>=f z_rlHPf-&T7Viz70b2~J+X~%^n^*7MMczVwPJb|MjK`1yTObqn|SM9yuVR7^l(Z2YN}P!IeABWi{>f_Vl0 z28a<~(na;POFn-c%*yWV{g4d;#V>uqEG$B9Yqj7|vhuw4RvcJYOw1TMShi%u&vrte zLUY7FkPfu&wKO;1Y?2Xh#GH9?ak-t^?9A>(k-%xvF6^+gq5*gpz!5hJd0-u<5mHOs!Z&03xq3_% zD4#VfxgSr$JSHY-L7lu$-q?@*?NAb@e&|SPBAJq9EXRQii?M9Ovc#7C@^!n8rf|NoR$J(K|6|!gS#Ztf@;FpiFYW5Re;& z{pN7=Vp)*V?cxaD-l7*3HKtW|9r(p4u?j)K0h##$KuMPPWHX9$j#Lp3Sp@ zd>ZX&I*_*vU=N*}t8VSsSHIXoFLG!gMXD|Fc8BXTV6K z0Phn$-)?CPjfyrkT&)`#^dva-@L1dXRf(e~dmpvRnMV;^0Cddx^y1L3ofZS)7+*~) zh-(iHA}e1n$TwQ~=a1{eTQA3x^rAb=WKfmf|rvOPGLd<((y(Oaw$J`YiOW{=jlK^{6B_FU|S*K73vvh86w^ zvKzbol^U$UP87RlkXNa+3;pQ@05YMc^o5;rHK_$L9Ie_fO7*p6>87nw1qfm6ql}oVcAW+XsA* z4l2-s3neeDPpm?NgTvX+)Pfl`7}5LrlT`9EYbX7XQ4D|5ff_+i-U~xUfUj@PSN!Ub zQ|KAUAQf2pJ5{BHfhb85Dq`ZnwsU`fcS2C7=RZf=#8>wfr%&YJ87#larK)J=zu^Lb z7J;5Y-Xp`lPxJfvf*e;%$9-$rDMu6^bl?Ll8RUo?>aMO4nitpJer+^_svPzL#k=My z=<`11U@o(VmNhVuh_k=P2aRF?a|hAnKKeWdo|H)jWdnT#hyia_62xorKR?$xr{oFB z4xj^JKE;kt532{pUuKIDi|-1=Um=5l4F*~?OrpO1#1j+{c>Z&|`@JO=7S>k0GFK3y zGuzXjwGETX5gLUq{efT-qoCW!b6)`DWpKKYs&x=dD!+;gn^KVsh%3mw3Bi)43%RpC+Y93WFf zM7qvR5`C+UBGrOkK_Ym>Gxki^S6JB>c4CM)2i)Kw;$kO2seTtAc+&uqm*e;wIf+E9 z^ljIVSxP&@m%X?ruNqb)ZhwYkwco$6vGGJ`FRQrgS^CR$^G{qeYXn16lZ;fLJ2t40 z6c~$&acREwpq`P^#{_k>?N|9qp9_3QgKEiEap4?xU!T&>+~9+e)!s(XOtg4*G%!kA z9d~(&x9Dizx<9Zv3#OCI;V{9TxkMgEMON~bR`)tN?<`?e26T#E6`z7aY&~shF)=Pr z?PK`zirt;~s-3oe2cxU7$K&Sj9ozj6Q_SERe z#Rk<0No>&oDe0%qx1Da(j_j_^)>rzDjwp{0XMtd?x+X3NokebAqX!%&nO7StR_q^P zoFQ^~63Nnfu&AMbwVXkCK$5dTj%98cQH}wOHRuD%Ak%!Vr%j=Lx!DZ_J~B!#SPQ16 zer<>|GlC&`#PBTyHFN}ggJ>J8jidNc#&Tf1OJkCZ>(x!~7@4m$th&&{k-Bfi#m+Eo z_f}le;j-MUEE!jLuNQnWETUedNV52={^cF~l;w|T__OlAVl)QJWA+?Xb7M-A z@%!7G00~Oy!eWh>b}{8w*lE&rehTp&;&VL__(9I&8;W}Cv#DLQ47w0aSlXG!>SAo1 z^(hzYjdy-*S`)*14Jau5YOdgoiV#ZF-g;V~urbBOEV@wnxo)rxcvV z7SLU{hi41M+&#K(c0v$x?8VGy$w_}=vk$aHu}p-7@&$*qJEuiRg#rMJq}V41qFhN! z)?L&R<;mN;hA>4#1q5y1S1Y@Y`8#IX9{UMeRxuk{V6wxsR@@T5{6= z_~jTenurs_%xIofF+mSsY`3ytLqs^e1sl}K47kZc0vvLWjhfNQl(^DTJl2kSn~|eU zQ+;Yy#o*vSsvKznLqjf?D&l@Fn{-ag!Ohd8{KMnBYa{`PMG;&zK%0Wnz*ocb8_O@0Rgn2;Kt$?3wl5L_p$f zoK&jHO;P=$4XVcm*2Bs&GZ>eZl|3-{mSs2K+hqW=vE(iv0DY7`a0{PH84r@3!xBnt z=IF3L1X}Mef6^)ze7rNzch^a^UGI&YIq_oS#UB*~WM#>nbS z?-qI_#K!N@qa)b|(5WJwU3wvpK1MHg_YJE1EcU)IEr&_tIl9K8Klf)4$P%mmryx%k zZ|Ns=;zH*{Lu&`7PK%?DjE}S7A;7wGaHuZu93`DsRovN)a@{Ly-eot(Us^cvyotp> zN>Egk>JaSA1x)ve`O1pmx8TvixHuUv5wC*9TL1dV;HKKxvB|Ek*1uHkYZFyjA5uRa z+Ls72q;rx=Ms$D9&Pgt>`*i{>q$3Y~pP+4@CDDJGE_B8RTEhjrlYuB~Dj{wl9iIIb z7`?!ZUo2&3N=kg#*){x6j%!|pqW$DzV?2)QUKjJP-cxIQ{_dEVCjImXi^0rTaR@8U z8UxS?8^&N-tgwV)8(no`d|&9uPln08O#4wD91@R>ihy0!-Iq~PH++<$ib9Pq`MaNE zT+fXTZFt^nf1PKIyx2lWeTt3EGbe3wUZxd%{~ouZXLsS|`2mw8JbcU2Rh5V=XQ41$ z=mJ!}aX6x(E-$}yq8MoJ1Rfhm;S3A~bMp-DfV^{_BHgssR_8k%^_jIwWsDp^G$}i5 zz-Gb=S5@H+(^B)Ot|}lm!2R{>q)SJ4WLC?=L#I7G!mzoTBf%OG)GrD`@eY25v%{vP z+{K(@e>OT0WmsDkB{ii?#N7}UpD>o_S`KxgXaV||@bfz{jmf96e3jSJ*qYieG>IUW zpaNRs1!S?tYk&4?TC%LWuqnlJPfZVh%9PY*!sdU+_Dv3;uj9V^&d8m%RAT02r=-{a^teT(WrH~J=cMd~sleqtF7Lai_;VHklEOuCgYx+(%!74V1Qe*dkb$Qiyeh_b=j-1x*PRZKTmo4 zHSJldoAlhpq-w&bM?Q@5reB`Tmz*XrfiS_>)RZVSPh3L@UyNP$nE~Pxw)2PTkP}dw zOg1zO@#pZTO+b_%^wU{&5W zz^c5Z-#4jFz0RZ3(%uK(x6Twk_Al=5#V##Tis)qDuG4`z;^IS;of1WHEZ@)t;b^hT z4lJf79~Ncl9{4$o03K(-;}e`QS|g5-(UN;8d+CRoz>O znE8$Sd3wMK6L##tOfrC(u&WKLEHp&!%%Py2zkCkjd6IC$3*M_}KM7Cz{e8;S)Fih1 z{-~0pC-3R*Ncf%gaK7iG#Ln;^1;w1Gu`5u_sGzKLX`Y%!zs03}?ArjuR4f1nHin`g z2n$rdYONP8Js9wR*~Q7{Ix)X2sKrGi8BaJevPG`Q{`_;MFR)|A4e4i8vUAj!cBQ3g z$TAA&k=gj4V7;4Bt*Pc~#q5IPfdTjAV`$|;=1%sN{W@BrxP7b&W}aAVc^dRuPH|^u zyp(CEw-fa4Y3?6`gOxEbuDMpnJIP?#^-w0!BXD}rbZ4dXpQE0c=%Iz*v((kzD>Wc=(MsA zZ(Kn1-g%lPR&WS$ldoP_A1Bdu-v=@nFq{HD{x6|3dHIW3ch(bYW_@A^gowfl%Ky3U zpN*_hFxlLY40{t`O6ov1gbg2-qyB3xb)#Pbmu!UwW6j#Pgjvvz?oW4K6yp)*?dgcl zNcx0{xSy9CX2iP_Qb51T-woK-J~dB6MnKR>tIEo1%6?C!Y?ne8O~*U^bNW^H-3_m~ z)sBCxee-i@b5O)P-yb*ZLa#FJOlf?bP2)G4JT1n+Cle~Gso_*N+A z%e_96(54B!y)*tPZfHwQb5>>2l)kf-aNgH(=N}jnQqd=Q^SROpPLdj=jQ^(OU0CPQWN{%fCWg4B66P&w6_C*vv-KUi8lefM( zVW|2d2+e8IUy049lj)eI(MZbm3X?~pN;?3uxMTvTWAK#~9S!$WqX%Ide2&sH7v ziXO6EOHUdh)e4Gg zlHDXp%10z7h*fM%&$pH64;npQl!N!`9r!}D)L;BMmUZ@~!_r@qS=={F9;>KybN^w6 zSdqOnyl;3S{ zNSCfM;Tg5jqMh&XKSy})MwIP7fj&wGg|^;T%H`lSS+p2~S9mwT9aRq?veR&`bt&fb zZ?4-3`kprn5A_v- zgAl~5EJ|3__SR|RJ6X3&>&DkCl)g?y)RVDhE{nMLN1B>v^=u2AyA}Cf-g)d^+duK* z4!v3qJ6^WEtxX6ZX-|+`%)kr#j*XLPk2$$24Eyi^Uk@G2+9xf!X7pL^@*S))cE3us z!`IjUa%sLIu@NycG z$CwzZJ!uZ#F0eS}P{U~LNSij^{HF-aviK~LEAmSdh35! zp_|#hU3=Wbhts*My?aUaq!TvZ{XGq|k}sm<^n1LREZC2e{$x?OWh|?)_Vg<-9?`vPs&As(SXNcNb{ySv@$;7dSpaQ%NNQA zlhYm-+3qEDQ7gQObQ@Z^8P&Fw1;Emm23?ok-kl7nP}{}yOvbWX+3FY7t;yQnB4+CJ zp8VwxQd*9e25I??yj!RJQsk9?zWr+9eY?(-K?SpvS4EOn z)R7H|iOP$_LRemwnD^_o~b z^skh9!*_gBAfsMUp_?O#KqKX(sK2wLug85m5sBk8q1*hXJ_Ul8zM_(J)xVUX>r!*t zxgU^DX>>bF=ykp(P`6$ms@wM0b?S!xpa4zGb!1Y|b7Eo^7RHpz*^U)ADbcR_U$Pz0 zJ3zVIEIaPc6BBP&+l|h9IJeG0GzUw@{qB0sf1;~7^u}eC+gtwxj1n+HTb!pj!>^^! zj>%Z%J#HEc1@npRu7vS|X77P;hhWXo*;?wYM!E{&=MnXkD=( zKSI+;yIL;5bv%O!XE}Cb*dhB_l3rdet8Z+Hci8AW(?&1g;+)qKzG#QsT0v%%+EP^# z+P{%3MH?816CrV_CU!~HwlOTa7wAH9Igz}izP?rR}X8@W{P1A$s z$TpT+T&4d~_>q9fR7YN|oUodz`T}l!Y|A9TyIG6s`$RZ3Y{Z?P{iR3U*rx^qfapMN zFZSXh%1fBF%Sm%{Fwd|9UQ|jV^YRV7bP~60aO94PI0#QFi-FSDxbT~%OFFp}du+Mm z@MK)A*{X24lB^Zo;F4;7m{NJ@rJUw#jYJtaahN^h5eI54nwJ)SDg_;%m8Q^2HHJ{t zHJ%uGrBh3pQqam9HtiW@ol4pf)!p5Cq`j4vJZav)1o#`j?cMC~y+y|-Twjk3q^M_c zEhY!b2Y!@Jlv|?*=9;OZ6+7KY>i!?NJ5AMW?Y1m9Rp*s~1jhf(bK!MUOn2a>u}B<7 zs;-KX<<(>n7e|PFs_cg37W-V)iSc@ZRWO$umG$-t!2uH;9Tir7D&K)<`o|0WU;57p z&#r##ta;o2gTRBHS^pm7fbP!18&Y$%36wdc1l%y~Og_$%?*UZ|3$VwcEqDGO)C7Hw zaJ)Pcqm~rAP^9W&nOAt+kr?42Dn~7mxBC`MQvCBL?T+Xshm!oY)iu-jVpoS76>!(~ z4>=_7RbwvRr{z2)f)tj+VLczg&z^yF3BLzHEWzdlk}>32WR>g*T+Y)U|5gjQ!_5Rgs7;$irfJ3{kC?Lu&m-qMYpdY^P{rnh4A^0GU2M9^9hl_X^Y zDnb|unXbINdy#Q^HWxj6EH0a_zVcwM7l>@JCvxxSi*_nm*$po<2kwOE0+`$}dK?VZ z`|v5GLr_>yT6kvu{^l>fB*kVdEO+Ak7W>iBk&l?DmaiF@#P4Z{I(~`oC!N_VHD$)N z<@i397pdNuG4Lk`A}d|yb!cE>R^k)%K1ZDF`1w%O)9>LE@RTn{np0UA7}oh5+a5~7 z=Hm?##%gF_Bp`6-xI9}YABe^8?GF@y%F1p{f)3uJ;p)yQVU7%MR*Ty!Nr+qX+ke0l z&}C9C&29YV??Xd9+AjRCD1l@milG0cw|9Wndk2WrL1=7|ugTmB3%wC?E`vkXkA9c4 zJSa3g%Ts*HOVCFqn|uS!MfhaW>1RZBHPDk0V+x+xIy;h*P>*)MCx82%UY*N&BK*Mo zrtmdc13q}SV*fA>D|KK%a1>dP=qa)zMh%NV%k%psZiz)u(u9m`tuL5%D<;Orzq!3Y zMg{_O{+?>k-$>8hQ)U+&hNL_$pJFQJTbALvO*@w!OftldoOt>q1}EI!yGy$?J6 zDRR}pLXxBfiWua>0Rdg2+2P?!$o_e8oqAofCwrpyn~8*S{L3SU33l5jby!&?#Ox+? z{K*~KS$8r6aqZBM!s=*kF#XU3H?GVpA1o!bDfL36y%%(2+jPY%G23r*jHg~X$Qvq$ zlm5hiDK75@sG-j#{&TvNX5^JwZ1!g@Q4=N|t@QHjBVvRb{G&n|d=~8D0(3zwkZBOw zKdYZWnhVsJ%#0+-t}unItgN$D)t1(xDp4lI71Z7MQN!*z-OJq=?A(tfjk-0}(Z`6q z=ufhu48yBSQRv5$5vM3j)X~uz6e_@{VSA6yG(ByD<0cc*DzG%fYPaOR{_N;;!Sj@n zl$%KBEL>XNCyMe@V=@t-`ye{;36z0YdL5tii2|Z6zHDz0d4JPatVquM(4=-@VLzzi zpKFAtEDgx%vxcEE5dyJzmyAo3+|O86JiI2{9ZiU`I3Z_T+?^CL$<1|ecyAXH_ET*E z*c#p0U+HW_5V?X}5r=m7VCxD=9Nj7?-@e(FyNV&r#>y+Gw-%h1QVy{$aOgPmKECAl zY;EJ~4f#$)BFl{sh6sGQS|rs3NqPL#EK{s=cWGx9DsLK#Z74me_3XxQz->SB^9!d<(UJ0Hn&vwXIZ%^x!D| z4+p0zJ>$kuSUF1pQ?BJSB?a*y8cy+we0FP1+jCPXGHzdAVF`X$}O#wZ&c{5tD!vWjjOfE&JaSzd4c z)uX|Dk6Y!|?}WAjaooI8U%@?WHirRAfbBwhVvd#lf05bLt<&3u+lew~vnzj+2umxy zaPks)Xx#lXAgRH`$LD@wWQifKczm}>gpFHCrvAQ~K>fWfdK`g!q(3fVd*Pyv;DE7wwdGVqI{9gN|JtGBWj6;``ad~G$S3+ z9~YLxBOkT2Vmse?PFaiz+ox{sFwW1XtzLiKYtxSRmurFbp-_@jmHQ$6hj+EcMCX(* zeCr8R9)NObw=avw*{mD6+x4itw!X+?tKDSGt7(txD!cX2`p08IXJFAeo$~+g-N%z zUax9uYd69YhKhM4s3cH@lV0)MlJI_5D+NCLXtuS?M*C+B&nevY6S_dN<{wP;yu8?#i<%&iCQi5Gb2WwyV6fb1w& zZJ4kIv0q9VLXSLhIrqNQ3<2T7&Jz7jnrjELZX`1o5YWc^!N45Y zv?j{`s7L*IWApMQrzLv(Vc&PC?{wu+g2vtP%+@2jaZgVu&mGePK8ez=tBYp}-T{S)(Kz zn*a(}7|%^U3%^XRovJ)p47gcsX5NP|*555SPrJyn+y=P7pG(LMeOQ>cV<>_8rr?2v z>Wj8%OBym$$fw@^spr#fe>rzE=9Q?>Wxrwl-Z;?O_(>SafKCqB_B3z!{D}JlW+~vQ z!k=oQ5n0-TObklzJvI&#++WQscjlP^q&qWEkQSdv*C6m3aA<$SNmAVtkV(UTlMTlCJ#Zlf z@o~N1e*$GFW$2*HLv7x9mEIUdyW8cIQwHJnNp$+q*Vn6a^|=QP9q{ ze+t(HN4$W42n$({?8>Dguld1^Z2%AiymKJINoRCv*)lTD@~xMS82O%r7Y!?|&V4|u z!xWT_jPRYE*PW0d#+f zzr4g}!Np^%l)o=2GYoLEEa<2ugg;9T1hdferoO>Yfkou+1o9dN%VOn-WoP@etnI${ z7$a|*di6A$Nyv_soZR~}d2LJieL>G?DQJbq*Nw;w>2kLyg)vS?bI#Ag`N(J_+g?K_ zzd0UER~p8OHSKFJMj#v*mVOcEsif`e*@Z9he?cZqH*2F}scxamQu-7PQxk+JTL#*)IdNP%XWml8-&I~>88 zhx^;xF4VZVxU*MsK!I4fuHh;n7FLjVfrbLG!M0{0$4qx@F4RKsKa0m+&Xw|lx(5Rd z``9Bb+`jFh;oXqYbia?Rq({))|M0$nhePx!;RkD|Rj>xK`+Q8t&$pLB+0hf~~i z@$ljTDID(%2G`c!EZ@U|$?$WT^h)D}?Z^0uNl09r19+)Obqk&WX$9*&%Up^G7H7~E zP(zbAwzJ(lK!YnZ>~bd8gTd#+!Lj%r_V#1bv&7mfT4$#MebD_8yu{z8x|hi3Ni?Aa zk)fHtGXqz0}TtSf^Y36Htc;Q)UVam7KCj?>AAuWa4Wuj2olp% zPc0X>^-fwrT}DQDrNzk_J4SCTCPJP$C!~vQLwlCUvt5OriOc<>X?j8i z;2Rn3MXQFZ4|d}1+UpD#wxva`ywC%urnG+@S?AlO91Y7yYH9p*Sr(XrkqV*6_03p$ zo{3;D7#n-CN!2Wh=H1n4$9`x=h~@yK|X%M@Zw6EO0%$YXT5m#{jO`D)LKB;jXC@}&0RA5)MP6X{dp;NF!gu*dECO5(TR0W$ z1&TVq3{dK(E^STKFvr1?Fiu2!hQ20g15f0b{l?&UW2Chv2LL7V0fw+w_|_zGg`6@O zXVTJ3Qi>VZ^z=fkaU{q3pVJ$r=IzW5>yb*H3;$*?GrzATB!d}*cN^(vq`pZ==${OO z-?}W^@{TLZNPTq^a2ns2Q_bDj01E83%wMJ5(D_4%i5pRBTT(<4vU374iBY+M%F&6l zeKI)CQKh-rxt!e}72XICdsr&FyI)`3iS#tUU`=EwQmWBb!sfUjx|=_ zIlLKD`Plm{+O~75C?s+W{kzNL1tztEG9?pp_#y{wPG}QS|2hwT< zW(&OgiCPZN=ws)HiV6Uxbc z#JZ2;`@(nYXlhUNJxS4w3qHOj8V0j~{@!W*o8`_0jV2^69`z*t>7SP|0o#@vUI7uG zKB;y7r3@x;$10G13g80L1o(V$`5BEP9ddu@H!I7LwYR|ut-+v3%bLQl69 zV^>!|*%*myL{NctH!$Q!Cu?YPd_J?L=29o$_Zjq^i++loIogHZ^D|zQ1wrb0dP$&y zu5XW2%S`E85wc5JnB$xBUR8zduTObTxfk`n>6s!Gb~iHo2&twIpN-9wZI6Y8?`NlN zyiBdx8YCb$op0L>p2=`$5mptOZKlgxSsh*H&n}dG8d1siayMt92ux%tvp_(w^?pIm zw5g$kuMPV66d`M)jJEl4m=40>zdyR+c}^0)zD=vN7(1EDtLCtLn}cPH{MQkDZDPvlsZ>TYwTwsN zFHqR(djlMKkr=Q0LHlAdZ)ot^^Z>fH>M=_C5RojOES~TRrZriB1&Gd=oV8ZwDRYGf zy;z!4*Bl^&QBzkBdKl+KXNMCGWg8>59wp ztoAOOSqm4h=f1`sIfQt-sma#6y69`nv@6ECqIU?S0IO|@f6@%4t4ogvw-^<$8*6g0 z0=@ievEqyj*Mg$+v52BJ>^Qh-{Bb7X_^-6$Z3X$Z*E86H9F1LWev7T1ojL1aQ!7+8 zdb{K?)|8VUSvLR!F5r=mN|7BRDAxo>)biN@hp4{oH9IlSs=h;=_5lc0S-S+s(8jZ) zmK!a?C6Yex1q|bNWQbyRq!P<+K*BX``I8mVFkCK3e zqZwr(+>z2>fju*(J>@FBP=?cGs)}UyEv-Px8GJ!IEDPsowm#ix&H==+uu8~lv7q(m-kLQnsp-oS}GzG@RNh=YTPJ3_i zl_t{i;CSbFJNVGxdD`gl-jEjK3P%FAknI(Ru6{wPBv!IDa5ll^1D$Rn#DUl&`qO2t z_aeZ2`1xxoA#Vs=_MverD}&&XipTukiji)0=^xd4XaHaI+hBh3t>Q!?%S?bV8?Vf+ zR-0oSMpfL^BoiKfciY#0ek||>UH>U^=yJ9H@X(UIlh6Stmzdbp zZ*6o~_SMjJnIGh)j`ie7f9TmmvwDu1$ZS-oT9U7QR(gZs;4m1!keJrbRZ=g zv4Z=h@m2~isbrI-#b!@UL2xC1i-iz4h4<#o*&FWh-;fWG$D)GIs`H=KDz8exb)1^V z(#@SYp%{ZX0CkGI zlLUp?j8wT}#T#USCQC367mN@e*57;D;mGS6+pZ?7DrKyx2~=IkCJFMEBYbNYu)MIqToz6*7b; zoz57WMOS;Vq)uT@mJZysd@>p9x$pI3W$05>-q!`%IT>ptV5Y@CDhzTZ=XB*n37_O- zZ^~|O^#;bD8`CNDM{t~_=R)cA0E=&cR6za{*29j9->Lq@s`1o=d-iUv^u-FqGr^CF z(X#uAf=&5U7j5UDKuU4Ap%<%C@dG-chLzRMYrcU2+aq_+c7W(>d_6I_Y&0q=Gq{$h z04MANmflpaE{t)+Rn1))?tG3$cm zxjNb#{SUMvaKgQdGi7TpQBfVTFg@WxmfXffoZ@TehQ`((HkqOCTt(@9C!~;d6*_YP zD4+OZ=&Q0#&xCYn(!x%LQ#oH)0O}a`YQD%;F!wasC_}KTTV%XA^DKhMgomVgEy+C> z{7+R?Yq`)p!ONF|imNgo&}U_{4}8Xp%wT81B|)`Zqbz_5g-ptJSY@~)7Jg8}PcX?I zLu*cbhnl7axB`W#bBPRSQNb~g+DqzzLPqhn7yA`qn$v1h5FyCoZ*u9TXqS7$yO>=f6Q7X9I?ND%?+n0RkEO*48(;*E12%=kH0|x-IUljGIy!&K$fA6lR6+s#?tNB(l~u$wn*U>F zUt%3xV@xpYLWQrZ>uPACu2tuceXg@}WU|&J%@TNnc(FhcVZH4^559(>Wau?kcuvJb zdbsSif4fo3*V4S1^`c6YjRRP#S{su583pqSMxr79*eM}!vyrU?9w5toKmwE%&IqJl zZU6o{w~>SPbx?ZC06ya}?%c5GCjqvIKKyMku5e)ZdT56EuThfh@|Y8f5y=Hk&kfNKIj0S!rtZflc>P-iaiG6U!jObJ#KZGU+c0YE!|J07d^r66 z@p=h3&2%WqTSzf2NC8@PT5(+tRYJuee9pk}*3$EK@+S@6aNGQ3XT^-G(QbRNzSp9@ z{3M5TBGLu!oAuh~zjE>CM}M2~fBt+`C8H#Trtv8riv&yd=o(_(tjY{zJF=;_S$(GV z<+@*$-TRyn)kdJt*I0dtmjUc+t#4yRgK4RGS)~&@ZDk{gD0Ous6R>9~sY6*TA+#tM zq*!9@0%Lr@gqBwqC?s0v>(o|) zl<*}fv|ePrxA;<^09jN*7XG5>D@Q%XL&x)dMj>Z5^?P4nb5j~k^5}|$3^@a8&70MI z$aNTc&d>KeT#3wP%2j;=V}$xRNKB04bkFdB5n+@-Z(clNH%&rL&U+kq8RNHO;7-<~ zf(~Nh(~`O~^0G&OL5Y-udw!Nyu4o0UvPBFig-^`FBi5>O+{nzCXTNA9E`G)TBBrX^ zkd5#G8<!UO8e@QE)|-%J_i!1H-;Jol#13E*n-9udBm6Bise$WH;y2aQvY9TN|BB zdJuz>{!I+j2DPk}$;eY)=-S4*!K5U-^xV4t+C?#i9 zAo-B*NmNoF!D#=iTZe#blfNor0g%1L2^KfuFns1N1}%+nNKSSI@e}jl53dPA6o_B{ zX3B;cA{GJfC&$XbpQ-yj-NEO2k%cjlJ)jE+A3A@TV9y}y=!D}4Mo1D-%076ZVTDwW z#Ze%-E8`cKrBoPh4}Nd-U_uFKeBmQOPk+Tp&)j3Iyz~8M;KRN5*><0ALb>Ic0O3Vw z`C_YI>tZ(Tzd2uffCa?kc^$a`I2&&NL*@98abRo;$AdSI4A~5|9#Trydt>OjmM*uA{8PjL3g=CbF;^Za zsz5f~%lt7PEC~;4SwJvG%X6RLtF|?)wN=$;pj{ogqgI=u+{sressjEsV+s3n6nd^w zc7I-Emof78+S)2D`Y>Sd4i0T?yI#j4geOD^dSGG0WnH}NUpYPhzW|tIAf3!s?>%gU zUszk4>SDG~kqnt**rYf!+ql&$wS_#AW`3tg?iFS!&otB4;1LaKB>eojDGBHsNlEF; z@d-T9rFa&QNEGx@9-eeoUS9L6@Yo)GDtr-TWnljHJD$)B62&m6z(*^d=IDbAl})&} z!bj?CAHe_1$Pi;SIm8m)VOeSQuk!V$Bq9g=Fol_Czoy?<{Hlb{wYJtsaMXG7J&CsI znv*lHeG4#Upu@%ZliXV987XB2USoub|ay{EhoZi z$0h(m=8@~fV>)xI&6Fo2liu<&!<3zU>-j}jO}TXbTNM=-8!BL3t<#;Nd73ZQy^yxT ziTKQ@B71t@oHiY+cK=F8%mcrQ2h9 zc-1tIJ61d}6tDO<*U$+DOz@o!vu;b3XK^{LEFWAH|M-zuZ~XMp1jo)jp8%K)EiCT( z`tA@A{CCpRj+cB5PwzZLeb#maT27IviQ?4$KizLd?S*{LZbW#OB0Bb7}p zz``gK;ioPD*l)sBJk8wQ1Es_HMInewA#6OyLHg%=mwV_Qm%wQ?jPVj;eRI1^W4mdl zyEA#odFSLljZpVrY3<+7lakL&Q>v@=1xu={t*$M47+MW~-Xm|E@|Ay#Dh=3DvO4BU z!nC(umCcQa;HP~kmOhXFBezp=s&t&O6~_9ap_#_d>gjGw^;$E zvwgPex(d4FrAF|H5^JP4xF;_GUw~oEJijOh`R4(#Tq2CG4IeUxz5%Wk=rJq)X7)#? z!vCR~c%K!1LAuA+QNichV1VPxM>ju)sY@;k zDt&%?rx$tun>*K%PcH%tRHzLO-18wG=RGmOQ~NC~Jbt6Yo-<%|2QcAO&-9XXn3QU~ z{$bKG=*5c+JVV`vn(u;WMcx^{4+r;|#|R&|tcbq?IkcUGZ#`vj-zR@9c};Wp%G^Mn z3w`Z)!+vP`F3|T#jU-fCdDKYdWUWbofopo;562MnXfZVOesHio&T5^3MM>~u8?ZYd zC9%sRgc&Td=7j++Os9stgjPL)O*@A>1ZgREm9ekMK@Jn&mX}9jv+^kdrz%%QZVfuy zKz?*tLf%d!&cL35qUCK%3$*yk?%VzH9|ovd)uHjF-Vv#wyK`Qs&?S4;wn&fk-|Ur85daSJXj>C+1G>HYdC zF5xVZGOybTBdr{hjl_Ztg9ZnpkU}-J&fbk}nmZsBBva6poY9MYwA3h8a_k@%!l8!g z!z}ZkQP7tj^T`bKXGLE@Gd>yB|5nR7 z?nXA?AczSa7}aET=$n*@ub?nC5ByH zyk^t!*`*q5s=g)%=2P;z(~lg4$81rn&I?}4tHzAj=T0Pz^;-P^+;U-PD;Twbv@if( z!$aC@sTMwk_$V&O)+lIXV1snz#Kpw#_XH7)r5h zK0C;~kn$_IqOJeCjH1Cb0&$QZPl(!{)2CjG9SYnho;&r*q~J6J>F^; zg}wxaWd7>If-I(oF^zy`!8BV_h|UFNh}|^`%1?*+{lo3e@|m+_*-^#+RVJ6}K0eP_ zm(x(CIp1!-ZGT8Cku2RwsbJze%gz4VAWY^R*(= z-s%$rgF9T@ySH!4Nal5S@a&iaC!9}y_^NrFeoUaEx;r>H?W1;_Ax`zQl^pCO#PD=m zZaRg7L#HQz81M4LO?NU4v`O1z{4Il0Y%>j%H0v8zLoLP9G#L4tlgs5Z7oz@tFM*Ly zV)a7Iu^<$hiB*SmH1y>d9-dr9>_8U!ctU|-26X9bw*r4cY>K0gaerxW(FiZ9Ru6^* zGtO3gLI!D!bReitHyTAzO0!+s3tVQWx zJ(2*uZYBO0wm0<(c1LmUzft3~(sk0T=s~v2GYfRSMz3EYLTrCB}0oRy2>|T-V$L5{o_2N8=$irR08^c?5@shQ$MR10@SI)A16?kFR_IZq&$T{N;35tf&#^76(SupU6*cmzJNlSXVu$ulb+m+r{| zXDTZcGD3^6o3=tKrt8ju2fGiGt$=LF{oIi1;i|#i?O5l_XG@o#=b8CmMEYhsC4J(m zrNT3lB++|oayu6*s+(i;eyn&9)n%xTC5h2z~a(&119dzUc; z8PZ-im7T3_TbS)h&CGv--uqHnt8NE+svS)73JUBfS?r84ny_nz*g63?C_at5awuR2 zbT&>hEa(rp_7A*~G+K$gA*Y!XlwwO(B+0e3QpMu7c;(oI^78mMOs0o9(|&CUY<9lj0sufxz}@_v8c!^{A>&qZ~*$Nt@ppZpfurvE@q|;5#6Rjq=pYMM>1L`T}#r{d9~`^yCv=LQ)lPJcf6kv2tN=Ici;lXA9Z+yj}zV_81=U<8%U+arn%d>E(n#%2+9T7E3wx*8&o&X)~ zYV|`Q?;3mjA*cSD80mGWRzI3;Ko6;gY3b{XC*pC52;cVZi0pXCO(Dr)3n0?HLUX6n zvD$>dWhOkc{Dvp24v8NU65xJ1D(!2*r$CH;L^ZebXS2Q_Qf;KDsvj=srW?({2ah8X_Pb3b7Z_dY56V1OrCu^cmBKCwA2Ad_`aivg`MaQ)|BVu1#+GpcoesyzyA zn0wCxA|wIU#sNOMsV+mDi^Q6S!yA00e#e`Y({}U9sqBH*g)94lfa_7hCI^-;0TRNo zXFfKc5|jnh=T2?>#9vKo*-9_07mj%qiodd=v$5SGvse~>79b)K z-ucr5Kk~QHN^3@aBIfOThV(5t`E*Rm1(oNhIrFSJ`lzj$@{(=iXoiF7>b@|`ei;5~ zrKZiFr|qgP{m&uRi%jvlfdMOhQ8w7bFt#Gg!Djn#I()uHwH1Zg<`L-L=oCO4{kB1X3eN8kAV3^L$nAoNi(PQ;!`zgS@?o9>^)ZL? z-jkwbbemTJ)+iq5_B3IfI-~3|zmY`Emru&O{I4J9@QV5BmqAY)UZ|suL=CMMQGa4% z<6@?H0azCx_Z`{ToCaqOpFAtbu-x~ZI37TwqNavLT`Vl$l&NZab?5adIT$rjo?&ii zk#ZmSSWHaMsA0E)#`lIdps0*vV=2jhtR_A`ZB_7ApRDF4U^9_OqveX=Rp2EyB1A$u zvlX}vMwJxj8(MUH!sY6PT3m9jwiS~>A&Oco<|Qr{fj`&iN>ijX7DQP{2*SufD=kgb zGF&^N)}OaY9Z6alf4G_EOR8e+WXdsZ(gD)#fZaEXSO`9JHsTE#E@M6u1ab9)6Me?F3dZl$Rb6C zD5yV|Uz>Qed(J-|NS@3LgDMH-{8X)|`2LN{Y}l^TsvNHsUPyMv)>*!ia3;}ZWc43- z-bhBy#KX}Ncfd*7Wx!9Lfj{L^0uIU>U9kTFSdL#R#k%#ClQ2++f`oZ%RAH3e-HW23 zYdNW#2Se_urDZ(+0Np44+!{rIL0;k~DK#0wY~EqE1TNJCo;_RMh%GPoL>Q;Phn3}N zVr(JxJqM}9X1YHlY}88MFq8KEyoeANbF9!QFYgsgL9bjpH%BdNz3H6$9WdEAqFmhR zxTw2N84X{4w@u+2_&H2l$ee-uMw>uH`E`9*UHw@DW+a`4#^R*yNy)}{=cXcQ5A zSg`jB45Mmn^sD|9|I&)8ki6w87mA)v{P>VFI7ZL8t^m`ieQ?uF6=j<=#WuJfZ=8c~ zTq0dk8n_h=K~3`{YE zS8}qD6rsymHp5ltVIp;mDS~TZTkF*vJb(X1JW_(l8Bg`?5@~JRK1s!Lw@NB)YXER5T;`R}JgN8=oP4`9;YTJN6K~CW|Yqm2B3~a#jQ$SL$h`8?H{c=sCBn^PVKGm)T?*dH%|QJ%rq#YDV|bJ1T@lREiH!2+*=(gLR0)HGF3 zSaf&WH6?T{K`)XEw}sqiN5Vv9Q2X=A>nSn1P)o~x9oa+?X#cB(tvV6zDmyHT9|FEt z1kc!8%SSUYTaG_$+XuZ-4$9fxm2B`Tfa&P;(aemr;m;$iRJxt_?lkb6^jW8N4~85j z)6gLxgpTOG3cU3nIhBfO8`!45#0$LdThQ+so*1a=6jzq->tDy0J;DPsSyrb|4-C)* zm5xc+*)w4X6phG$!M!8N3nJRhDQ!oyCg5jg&b^FRaaJuLX1lG6t+Orrso#uVVNNSD ze_$rMy8TgbF0Rttlq$0eb60kwlD1QndaINd&(rmB&W(@uQ<^%Y7&`+1eoyLm@uOCx z{L*MJ;f=g)C;xe33gd`E{u?=;NL*~l4M(NxQQOiA5M#I{!YC}vi!+>qx$)4;=+F5y zjbSAwG}73N45oHJ!-Wt;qkD0>{&jE4NdM}fqzrTVvr(RF+Ix$fF?<&`i;Z;DSHVmo zsC3iLF%o3OXyC@PbbtH@BcP$NxUF7Ga7bJ(;oIZQXSEUo%S3sJ?-#YTza`hww(4G0{0>*ae#3lMlC=>CmM@HvD5|bI|==33M zAFeh7t?Yg7M^b8^dqhR7wKF9p!3xXT_QAhngm#AeVQ!K6h!0T&y6W%K2^hzuXe~xJ z%@2JFLE-t7t!rzLbkSrOPQMDfJ7DiyouhRghq6)xTge6C^45)J=5z@|n~SA2@k`3~ zynR}n^@igoePh(nL0mS-_PMO|6N!RtjqG|yw`^faw|?L%9+!taaFl?j1hab{C(G&Yj;N8&{Z$)*#S!(npdA-`I#iPX0hI)5()bmtTbVIGpBHvIRzTMh>+dh? z*Bqb5Q1AQh`U@o_gfv5J_fbo&V78C*lq~8$&9Zz9wN)^TNaC%)PNaaeiou%`ooup0 z?e||@I)^iwcW$o#^F9V3v%>GHu`o>}rEf0uQA>)VQLQVAhy zB!s#+Z%Ae;FINCf*;dQXF}MUZ#tDZDjeP4F(4HzjyiJ z*Eh;WD|4sQ#k78Ec;- z6RehEiY3S+7t%id82;eh@%YRUSOT22p-m1Oa1*hCI=74Te){Xx?Jfn7eJQ+emkFO{ z7YcbTE4MK{`uVAYd}-On+!xnvV;%1)z(MLjd#!i`8&w7oPBKh~NTEV#^*Nn2uK7rq9<0ZLu-QW{xW`TU}@0VzC;kPz6Z%3l;xS{vV9+!sBM13#Po zZr4JCP02F3&itGW8lLZFw8Z>4Vs!oQLQ7w^m?w(lXL6_r-z1;!o zT0@we88Mo>8D}p0p>uX&*u65MwfroFRiz>X3(dbc#MQtS<9lJY!}49_Ss6BbLslIKQMH-gKswK^n^I>*d`sHV)J^@hK?siTdU;Z^V+^K3NeKe zb4xkiMxq43AxV)j=ReS7`_ceak}?(}`>}&TS5|9$9U9V(!`N zg17lfQ`NG$g(Hybv&xr)0r@+rPd0q{l51NY%8(rHk2jRMCsf*y5xcuj21R+jAO|b$ z1O2YHw5G*3d7fY-OXV@tHrFC3I@;P7<}3I>y`vF;6MhL$k6DpOB>&w|{EstP%b_kr z@sHKJK_@M~IKY;ec;V6Z9j|t|Ipt4;=3yafv>e{uasOFic;g7gw>l({q@!P#^3=(1 zGytz|*!;PA%FFYeBEhqMvPn^N0wI$RY}+g_-YfvH6o+bAG52d_8ckREchb~rfjaRb zIcfcdt?Am~;Bwe?W(q0zqzAXJY34NI9~TU*;_;+y^ThI_Z=E(dk|-d~5QhKBeT6NYKsJWi%pzd-(LJyN?o z_Nsd6O{y-3g`I{*bGm^y+&DAabKU>adH?t#b9G#nq?RzFFUEs{n1+zM-$e+P6PMZ_ zlCFLVUDJ^=Q^gvgI)Bf!L}$7CA=dXmhBs~u7xS*rz~I(E;Qz=R6G9HelAk(W2P7+P z33{r9NCWVq-tHOzxP3*@XT3SjFDTf2+t=z(#Ag_2knqeJ92*D^I`Kr(6Knybz8F$Z zBB8OcfK5#0MMnB{5j?lzaA!Om7J2q;rJki4I!B~$nx947zNl;VM?}EJK20mvZ}A*t z`v}w*jXFjeUgZGq`3f(R*QZZ}C%zHrhgd`Ji%Jz)0OZM-9ycZ5@GV9XIOR3eL`E_I0;%djE6sTd)wvZlS`BDB73`= zk_w_Mx6Cq%|!>|+ZAU|(7X3fgB5o44OhrcVR; z@jWMUzA5by+}{B#rIdAl4>w9mnzQ2Q(9pL~5PqRjf!2z0?VOYEb5dM4FXLZyFSqdt zusX6x+zw>fYO9n1^IOn+S_AD!G~WI{4R5juAkyhP$bCSoic5n+V!op-agH7d|MLHz zx!D{c7~I?fSBp?2TzL>|bEGp(?S~ydA(&4|paAc~*`rRaJ-7m00PJ1S8?Xpm4DBJc zm(f=X3eR<%dN$_%a9w}In8n~G2=A`UA)P~aLmO=$o$Qj5FeNADiivq|KAI%s%;sb8 zNd>LEV*8gXuQ6nUiYf&3TFslq2^D6er1jEmNt$$3*FLwsQ%)lB?YEW`}C_wO6hT609URmKEmF~)ZAGSs`S#^}@% zM@Kt;{Ip2+Ct%x?|7Q?946WG*?uMpym!mD@db?ry+4LkQ$H7ZMo^dMDXA5I0B0E)U z!Q%dY4b{!HlQ7C-J2&IeFhpV+-i$%s_V(>4jTCuP609wD6f4-TDSD32=o?pWl+~W% z+B#n^e>ba;CjEuw`t^6UI0^1S9*$)992L)ZDWrJ+o87i6OXKU7pUxa~eadiEF*y)a z35?mFozw36%GGKNaBTP!8XRwM`+cR&fyulDnE$dU^CUr)c4?`J&HVSU;jqC9X zh?qup*;BAjem!f8iL2|DWK28js7d5qgXH*$VoLRpB9&E z`1mIE%eKiC)=J(9&3yn!z?A36nHEakiC8iwIb4No?JpStB(iU#;fVhUEHW(gwBRMN z3jxVTL@Nn88m1UCYfI{tiqiGM(OGRY;!JZgvc=EB(USJ)UtePEY`g-llG8T+=&w`) zwkJ5hQK*6-*65#MIvde|Mm5seiA@4_9>55ghaXYkh%4F!n3w@A9AG?nW#MXCdEc0hLLBD))Z2vYk1|-i9ah&D zpD@t~%bcVd3AuL+=(t5)ay^Ay<=`#%-vdEG;$1+nJ$cI~gjwGebAPYoVVUAsrfy+T z(EMU!ddhvhhwuhBq%Al18ZhZz^o>tW8mUiarOZ~&3$LEb71Xj3zW)yDBzFJ(42 zU(4Q5))Ux;ClAwp53-)x?b^y4rVTAJ%KWza%g*hMzngHo?LyypL2t1pnYoP)FD zUn&Xl^3(nhNar_nGz8+`xZibk$DZ#(qkB+S{M5MoG}WEXIycAn8n=S)*%TCRHB>vy zkN}G5U0$<(3{xJBQpR%a`8goL&g@JW~~fI;~QzkD7sVh(?P!=h56ox625ez2^lpU~npPjHSH5%rU6V zWvSxm#oOsStSKyh6?ru7uTeIquy5S>UOn-ew)stO8^zB&+ltK1(;JNEd+bRmS3c_I zi4%6QD%buq~d}#JQ+Y|`1eq5sP`Yq*ECG9eIt7~ZBGFKQFKYg^Qt!@k@0m5ML z29Wn_vS7~nE&Hbjh|;W_`!tUAO}5Z1^}K9~bCI+u0oVz_OXh9|z&J5OiKAgcnJPd4 zWy*^0c$+x7kj^aIEsHe#iM#Gt(QF1h9t^-93NsGW_ESI3^< z4(F*p)5U+LjU3eF%i;8c?d!A8fRK*!^qg|3&?31=eoVIox$N6mE;)&uFk!ddbv|XL zs4eU9+o;2F#V4Gnr|Zde;8dfnP4fVMsA;g_gig&BRnICDNVKvQAD;lH%kgYh8>hna zQ#(~^f~9!v{uXFr-4vcO|6TU^=_`)USn^FZn3nAerMbCAMF|Nq&ZdrJ_xN6J?Y(wkjHr5-ggYj{SXE3c{-1*37Mg1(LnEN4RVIs&zh|_bz(f%2#Wa6 zK9-8NnN&90i!9{{vmwG5X?0b`cMrFnUEDI?kWO@ZO~0eL4)+GQ#tw5caR`YPngGXT7Kw&>psPk4P|Fpa5R%$%(HGcmO=~%aPk0WzQngs#`ChD`Z zXFLV3q<5i&$#>Sn1$bG3xtFkMExkaGqdK!@kNFLqBU>N7qM`}9oU;x&wIc?@i>V=Jc6RfG2r|`)a9Bq4*=G)p`2(vDG8?oWU{k4wG2|RmSQv*C zEh$kBhgY=S6(|apw*~G~3F|k~+$aVlRqci(8EAk9`*A)!a}n-+FW_Dqufy*bNZrog#W((fimF77Ds2-dsp>x*J~ zULerb<_(^%-)*FS+LAalB;}Ghbxzct=sk2c;a_u3GvIA(EgwC;G*szpL}TbybbPvw zjs(0!Z-`7O)&`B|tj~3;rmKV-@+^i*aMzJv5mXeK!zJ`& zGiDZiw%qwsa;lUgVgy{~h?bxm`hn&@g`9@Y51@SD)v%56xym|E=9VzSe(b=?WiKN` z7Yo5Qr<|Ny32x<1{V4N37%EG_ULSVga*eaI`a$U86)x zm;94!?c;q@`F~!52~FrIl}o_EZ!)?HS>}P!+mR4pFpfhLySl#Ak~+vNPwK!i44;|@ zKzazZDBIFIX=-$8HYt66^ly9vv~f`#N(+Dg&C(X+O8E$RFwg$b!W2E{OGs64xMX5k1m99U5I~u`E zs2%{(8QJn={h5|QhyahXqR=}zg(&*(3p}Q#04(jByEe!3qdgI~q?AnNl^OuM!)m5o z9W`dmok@JKaO)R9nv~SXL;=V>`EnDZ%J=+^ALI2FL4VJtu-c$sb;RH50sL)btanT{ z_h7>~P5RU-);lHUXl)o136ri$4(#Hz)^>hpdHH9sAn*0=3)BWWa07mZzXKCQZp3mI?C9*U!i|wY)wkq1#)39YIKIgaz&Iu0MUbJu^H| zCd8&fSV^!vLy?`#M z2HZPabgy111l|y?yzUe&Ep4#sH(q4{e_Cri1W3>eKvupXgpoP6=pC>ak$XeHt36G^ z5p3wd*8O$4W?N&O72Rw7J$s}3cR|>sp_D5CfxYh`Eab}sN(p*41!9o=bpyuUI6X5m zaDIVjRq-QH;UKvT|IU;|13dlGf$kAqkBy$S0@kv0k|s-8>R!2*kLVKK$>3I#R$sp&q|4&)zsO zxS8g`WIlz)1C=I4s@0D@Gk*wVbH~OAzH^td!QO9eI-xPq$H$oCD0E?+Wg4VQ1d9)N znvzSs0uR1K?~&sts}+LwmsbFTT{aB)_3PhZUy3et8nvF3&-nq(mv$tE9X9y~fS0*e zrOK}tD5E66!tK60O|*g7Nv(yNzRF?PPsGW*GG(RJ(J9{AG;D7EkgTqCh6i-!=2L8&AgN1Z3+DT-;s*GjY~0J1EPd931soLo`i4Z~H<(+ZG#!gCQ?pp=i^m?v7|%nFrIQbUAKaG9adwZi-oYZJS;%-3 z_+W;)3~Oo8=TVw;5yf)XgZYdlJ?mEX>C4S+2>DU<)u<3+ zEw4U~?h`>58acyF7h$B|jC3G@Y{)napH!nK5tG5AgheSwU-bTR0=)5O$&M?6s^72U z>g(%%X)}K~+T+txe+$^pgQS3}1Fl~c%#^#uyqUc^Ej{$j7YVWzk!_J zUXS0zG4nvWU!iYf{x-(D7Dh!`Z=Z0BD^yJs>=vf08-bAGX();kXkHmI3j^&`-Wb0p z-bIwY=uQNx?4(2huz@Rk@?0*y>as6&sHXDRB(J#|z9T*HSR1I;_LjoQ?Vq zV>gtwxv=P`%grhL^gbwO;V)Nt_?H*K|GLOM%F%Q+G`9F=!%?#7Cho6iY%1FnS4MaO z^zC@ur!)lWm!<)t4bUj@Nk)ogl&YZMaUb3wSE)Fo6aZ`qDGxvU_@8AxG&8cF-GYP) z7cwveCgH2WMn-8@;cJNJuD^#!*-zAEFlt8A?A@K;!3z2l&HbZ{qkWz_kA+WDFG$UCIe!JrGt_@R zd;Yu^erhU{;(y~sKJY__Km2v4*wnzl-fXD`@SYIaAt`mXE~A~Y`h!Cmdr~cmt%M_J z7~|ZLjwxY^-?m>?uj8AGC-^a=!SRdg|53jOLfa*G8!yoMWJ=p2k0V1@f*(U92BiM^ z)w>}DKPt9Aw!&ib#3hb6&xfm=UsZle%~ley09T4~FLkX5RN^N9p6)G?OtBuJt3TgE ztz&=r_hzv=n*CcQ+o1gcm3kE@yLI5$)*jMtp#e<5ZqlT2uqFOwp?Agy>zp~pAw7#vS{*8j`z>(BFEVGHoiaW>)Z14 zg_sqiMQ%sJJpDb^3S82y)vyHu_WJ9)ur)+%ktkc9_w|W|hJ8!w3rl}w(cqhKYpVAm ze1@f3njbe|NG5*k@uj1dTvS^@c#G5Z5Wr1%wfESGtDgbTomh1sPnViuegKrgyQLg# zYkqW_&Lh>~IFoUSi&&vR;5tWrb_|FfhdtdceDt`u-Fcz_wZof*J9!`^S8*boBrshl zwST~ywU{8nB)hWN6udzPz!!}5R^o5R16@6_wlc@Z z+lPIes2m-6_|?@h3I>AnDRsI?D#Le2%Va9e+&MklC* zfGQbtOkXfpwq0c3X(={V$1|dd@hhwjYjsgEwyD8+|I3rh4pEJZ-=lkSj1f8c+v_-Sf-#V!>yu?FqNRYMdg!NdV5 z97GC#>#+7yt!r}5s4Ox%L&9ly-ZjvCqlAoi5(t%%_=abo5H zq!0r+N~)77;`y4PuKx6b0yV`q@`m4v9SfgIjPM?w|u5p$LF0ua1RQ?G+UTOt19j>Wm;4qOX0 zVJy3>{Sw(2L~3sXkH%FSB_tsIU)43dhlTAQ>lIpyX$6f`v6$%MvTC-^eOaX^&!2AU z%AU^z2pvPh_>Ge*kjTl=6pnz(+TNX@G;9h6dGDwNk%@^d4-6}M*`u=#)ZHj&AA!Iz z&c;7Dyg+X6iPp*cBqw@?4N730F@*aqSUg6u8jRHtZg}K*Zc!fS8^*`n(vnnKN)dH5 zma$9n!xFY^D~MQa%c8sybCUg$J24QEN>^96h$mm9 z1U@XnwsK(hq(($KvsQ5%Y7&3c(;fY$8+VZlN}yfyR$R;XHJbuT&d5wYxUa=DJ~8hC zmt888nXGG&5(mZq%H+PHr$m~B3+?d&QY#5R$r4OU-2{ZYwCSl6KW|dfiuEsOo96lw zwsA&}j1Z$chP5a{iV4%sZ!BvA&wOyj(YpC9X@rpT@>u?Li4a9_DhJq45W4s2N3@M1=y zT!iNwf|v>E8Q@zKP^jPCcJDN5wd44Xx=JyLxM zl&|yA=y$nwJchzjQRed$hUZL8H+?e6LnEi2zZP5imWgWBEXkkSU~))Fck4VmoOI=O=}H8RKa`AR{PV%Nyl3aO&;cuZXtPusXPhm-y1@m_FWL67Z}{2!_i;M{L3PkHgyY#I|32zD14tO zruuBoNrf@aXDzCxy75I!L@X65Wu@wxpa{WHNa`o%^16G|$Ip=puy}RO-o9NF{OIty z;E04Z{NsC_E@cM4Ko)P$ZbT( zPE9Q$0T%3MtMYsF?gTZe+>@b(I|+av%cXsAr6r&lfK$SYj6XB-Zov~l_`43xEnBJe zZgHzTZ`EVe;(+s=t+157Q6dUB_=KB8MH^y$eE9;o%M%T*?s*1e1KylW@I6~$LDOwklH}x(+^^ix0BeB$q{kcBSMbg zJS%6)06Qc+@wnB0VjQ(=X()6`6$6ByI%=on+LrsL<0Z za**gI*RnMpc9Tu*3lvGm42+i4f>W`Tf^3i(=KFBO1YBZVxXIsJdwK1QZIq1ozxJ84 zVWal}3IGWPvw4Y&?7 zw|;b0ul4a=tK<9oHQ^ulKf5=$mhTDB5^zY(#d6eWg^_HZ${E!ZJ@#%_8}LVc6gDI| z+5z*D08IoF)k|ONJ@3*9AL~5-G}>fP20uv56X6o$cAxbV5>C|$zPL++l7G5yC%D4_ zcoR=pky)9J=n4m;hE3Vrskt;Q&a9S*GSnu{Jo@7DIA3P}W}FEXF>rWdSwRLo`VPc~hV<18x!|7tO$jF9}I zZ5U6No`BW{4>$(aqYC*x3TFxB##g*qK?lrFIEQwI9t%l;e-^5$Jy7!wf%>!JGYgAF zO{>ge%IhsUP_EH38DKBM&;n-B1_0m@Ha5F23!I%^YKsw|nQax|dL3lrRBCV>DKxpR zVG4_s2wi!vP9-0|(A0e6&kYL&Bx<)Muu%ZXAd@Z(LkLf?c)~TjF&I1 z&D0F^JV0s2^^0xZ=uUt$8-4y0?L0fmZRa#uZ&!XShRi=bxm5*b=H|Vn+LYYMX2p>` z2PFg&weeVj9RmY(jUy5w%IESDyXl8%K1R-v`~EL-AnU)s1MSDFv!(}?_w0W|LZE;+ z{qG|?D%XoeQLC%Q7LPGOIy%2^-EiFBjMS2EUUQBl7kNfX%RMXN9y}(b$%rLPD=TXh zsmKc!iV_v$Uc>)+Dleg{T6CpJq{xc1XzDr9Bd;PVtXno?xWGFwS>|N z+AiDfFX}G^%lT&Srf>d`7#iIiQ5f|Xm3;SYDS;*cYLKUwVdi2kiPc;JtPBW3R8CJ) z);CmZv;}0vp514^yXU^V^z@tdJWAkPC$n<>my>0jcI-p~(op`*ly`Th&svcG<&Vvn z2hgxyZK&ICCP_h_SfbYGpIDK0b|$sQBDVL!T1TIVd;a_G?92!{`t8clqJxxCK|!j) z&ghHgmc~zwIU*5}^tX!RKQnB}zcHcMl}oIlTjgMQT>qw-*ZVrnk1O*kSbqz@QRx1= zViS#zlA|B=tEDE2@RJZ{V6|7nn1MkHy0|#i`E+WnOR%FdKHKZK4|5ZQMxNxsFf|RC zdG}O2aQHu$#I|IuMNUga|GfDic;D;J4QX}8%G2y&`TyE`tGKMb^;>+=iiFY5ol;WL9fBfVQqr9Qf~0gvNq4t&ch{LOd++aWpL2W8#sA{(4If@!=UQvdHRpWh zGsZK<^Ecn~@*4TcY`R#hqdgQO7e6yU-b((=-%p!&a&qt!B~+omG|4VxX6*FO8o$K9 z$QcfUl%z_)ec1+)hhF|!Z#R)8X|~kb@^bS*W_2~6;6#TwDT&T`YnbsGX+YfJ!>+K; ztCTaW&cS;beP@{R1g~v9_uIXzmP;9)JxhrGa>2f|y0$lbnLEC$c-Yn^j`wA&Pk@mW zp(8`ivBqPnOx%L)@5YRX9tlalx~zdswl_7t7-E04)+n$hO!A%sE+8q9rfT?V-*S|E zzn9&D>`2jF7ca}zlN9Z}rA!fVB1z876Zmq;N?l9y5RbcrFKtK>0+-=GFVt+Ju#)>k z8|&KpwwRieBSGf8$W6%1{O@lPF23mN4!!+8kx@5)u#clj4h>gSN;k#@W%-H8{{TA! zb!LBY9!(0f^=6?pE%RBTtKgQ7g!ZG%+QcIM@MXRN-nkdoF9JDII6^KMqPKm|IXsLYj$|*UbMm70;PIAMlcf zgzeb9*$5n?)QE=M1{X+O^;{+jnC;{|fd`)9OH3kB0;CVvO15ntuC`tsn2Lgfn|T66jm(}!)f0>6E=f@t(ET=_%6e!(7a8^>to#sS2^`hmBDHkUfz1-`zr^?6A zho7V*bm^p00bmr6%ZAU)bl2v*Y8!!JP@5CiqF8OjsqRO9y@nz5Cy64>BpfzpT#h1$ zUR1f+oeJqzJz=jUVm*$>GNoc4E0s9^T!5*Gz0!QseB+k}`T| zS`-Q#&P?LYJ9aL7lGrpiP{yNL@vHlg%ONK`oY`Xmj1Z?NV!z1BOD!bC{lbn6vRi1f z%s;k0tsf=s`BVY07xdwG;SjzS%g!!cgVP2%@e#vq7IXH)CT3DnD=uL6A&4i>%FN7P zN$aQhWoT>5a~0|K`rR%)`>5q_JIP8(>18})1<7Q7QX0R%gpQv9Y*Ld~r_Eayu|5t| z>TLBi6ZEoyrD&Qgxt~JK8~jvqu$z=V84lVQ!c*aVlP&$E3zVtUY;yCntW)TtA_n3jg4-^7gQsJ5S%*KaZwC zvG>ncVS7gt(8 z2X3bLo|Z!>-#KSIxxB=g>ns32`+Y!A0sTcrcnZHXN}m{w z2ZEK1bnz3`XpE&}hgNys03I1r)Z~C3X^aD3Uvl000?g#+>mdUZ0cPe!z_9jN`*is= zVRH5Kv};eEF{!6j(ROBdD5Lh>xUt|`#y)x#hdmnl0|G4JC%Jv7GU?bjI27ajG7=G5 zBVltgMjaT#BsNHh^85M@SXiDQZGWxPlbIVna(H+d#`ej1z9-lI(uI*(e38gT&*5*D z)c4YteTb_B2{FC|Zceb<0!js{Er)iYA-VYWiyP*Mvk!`ZJGwsM7vM#@Hps<6i-h!X z?W9uIl_b1`o~nZM}K+xnCGUf>6h&)0l6YL&HS=hwPqNnV!v*;CLv;seZl+vM0d} zl;Xib62PvLFFuez>+q;LKQA1UD_)=Doeh0J`jU5!ygMbez0zpF6veL;2U->uaEX`xA64H zf_%UN@o}KGeA9;vhtmvu0#BYZ+d%i-?nI8@exqZFPzuy2aJZ$_9JHk|pwS^|wkZ#8 zt&N-eEk=%S(8BBdYVg732=KB;+_~ONf)T}@UAzBoybW-SOGbsmX#%q4t8w4bxninf zE0O?8srO6*hYG)Kzz?}P#{<*_kvv5sV0sD9I+~O5`HCHAAJ>2RX(dV@n&!)!7(2U5 zI#|kO)3N&Vsopyh6PTNk4X#q4yGFMJ8ZM=(1kUhU^GR#Mp{r|B5h0Ol+FKizoR8t& zMbBu9htGDcFt+02jYP3S(@szXFq8KBi(lU0`TDB+Pr8D!*Y2Cv!oVd-5otTVxb~n> zu&F3#e=59jURbd7ecnOgiz8m)KwrAWpU+cVh zn}BBN4--Ppb!XfdQvYT z>ddD@X5dtpb}KgU0`TBLjMqE}dTs_QdB~4iAt+^Xk}OcxYqz>@3R5Z7Q{b3~v_@CF z`mqfv@Lc!h1kUEKX*n5X%-9VMd()PUbYs+t*Cr352U*QkvB?FSkzh?t(?~d6=E(Rq zo-dV-bBS%w5TC2K1D9n5Cd4G)Ar*xuzx)&{)7Ik?yUB%F_6Hd#zW9F`>PsKNeex;) zb}9}7vk&BC(y&%3%r#Ab8Xe_{+DESa)Y{$;8GezyH2CncA~4--tt*i$RS!OA9z#dT z=IKOdSy_yES-G=gR2fr5BqESg&Xbpx7MBf!iCJ^qrCf<^ERRpPP^@Xp9$@SuW?_1U zh$2t}zw0snn#Wi`tlEc)GTD7Q&SRtnfVvS>ZUT7t_DXrwjp)6hX;3Bz+2rY&@DHo? z*2?2`rGnKm+8rhwN*93(o zl$IOG4LQ6Gu=0=7hThOv0CrCS>|2PRMS!!fF}o(G_jU);%pUG+(-aXfdjp-d;e(R* z>q3ng@$ihl3$HwZm}yLXnzz5ew^(Q0v*Z!IdR!js1abTaM~8pG4#h~zn^;TEhfXN? zPCB0uVRLJ(nAmFR&E!-@&nd2LPwO9`e$m^5*BvX$)buUXR}!63KhBd4*-2_@*pRo)Z=2!ti@>KYg#{X&5Wq4 zGC_Mi0u6OvJ#)PHN4qfgn?@k4c4zW3eyUby4q+b=+^|Ajee(Oa0f9%oy`^8UeH9pZ zFfjx>R1_3E7k+$-P5Ns=6r_D{;Pb6U*Ypl%6A;D0UPJkNjk+t-V! z=9sIId+q$dY2HHhrix|j)8yg1a0fwQpS{DCHP1r{@qyp(qYi5udDarwQp;QxePi9d zg!zRt`(8U)_Vt3gZ)qvl3yGQ;Bo$j-emAEn{$nkZ0nYk+?Fj-1BGCBD=kay(%T;e z*4yDho7U!${rf-(Bo%4SW)H#ZT1!M|Rx8xH-fMgDq~aS}IlDW1PIjjpu39qyegB1) zo1x{INe&5FwUz&ubei`suCqU}F}8aif^g$uFIHBx>pDC9bLroGrI|4M`DTL6AM0~y z1efkpr@!R8-kbzg+IbyATaQR*OSk8l#g(nl>$vDFHN$g5!aT2ScY|}~a2dYB;f-Mb zo7;hJu_=0%Ou9L*s7Y1eIu;#M8Bl!)s3Z^@t8GI~!de6%2ySQZTBQ_GAO{YikCdY% zGCtU!jHp5X3s0NpS*Orh0?dTMayHb!7I6^mTf_@|#X|~EFZEV^8Q-N1Nz#&G zCzQN-UXP^q-4-)mfOv%mJHXc*8R};oJf&PmI{%sURss(@KLBwgM1FkYHb?hJ7}g@0 z5iO2XpJHeVfDw6a;Op|P!z!zVmRHNE73gbZOS5jau#J#jdH@N!!Yps8{;SJYk`fE% zz`FWee#`MAvH*)~)2tpH-9G$h8JziSi=I3Gwxv`-0Y-!2vZ2u&qT_tYd^8S0mooON zHZo7`uV}m(*KIPc1^uzJ``g8K!?*}vuRSItCb})kY27ESs@6&xA)K$G66p7X$^%T)&aQ7ua|;WfS4p-fbW1-W`0+> zOz^-1R4N$$E8-LLEA@(EafX+S^s4`--i`7@Onhj2>ubzOl?@HO@)&j(to0G(ZRDXoDe48D1S#?t z7C0UI>abydDorlp+U23}WZueZ)v80Itk66F-sXA1kC@O#`bn1_Xq(9!wM;;jaB6ohet={`}`hfn4eyXKTE>a_F8mY|KPwb*za72Kjvx%Xby!I50h;0eXkvn z;zxdl0Kohizh7Lx>^L|M{s{0~ou1g@Q;3Ex=r=5yJ@Rd_iB=OalFHb}-pXJE*|%O>H_I$WGn{q$h0jkW0r#&(#_w6_s$(_aC% z_>6$d0xuk1WQ8g`d-$M-qDJJ!1<+c`=-hSLaccGP2ggb%=4asy4sai1<4t@NKt-9Z zH)n5bw4Wy*WU9Fn#^u~PJQ&u^IPe%ORr0tB)!!?>8Tz|sL^e0IC9>DKy$E?h@kOh{ z(13lKM6SbCIlAsI`~Z*%hvcb)NDML*H3@TvUb|OetMA!pQhtv=K+gG$I;j*b^Fs z-SG)Fk_e-}KVc{zpR)al#R9|nD83=v`XM=wrc&D`8{36lFjL9l(Fz^}bM%4GpR|D0 z)o7B6M@0!OG+ewR8zsFUA`)xzeR6W|?7@`jqg*|dvWPdrVBWv6r|}Fbm03Mm0d}+j zrWFRar5bn4zI7$b-Ly3O6^N zv~Hj8+gLGYbz^=w)=qp+K04aT2yKE?50sEI+_@5sit6$}$DU1Y>CF>&OhNo-F)@5@ zkxbk}!>%lTQ^l{>31nqgiNGl%26pe53oC88JAf}chK)tW%evMx_%t*lz!OLURZL?P zGMzs!$SVQ(_<=vrIxr9}Bw>wwOhML>9xwC$dxgyA8RZ z=7EdMTE*0l)c;*UO!`#WA|u1dH>ZZDXdr77oGJKeeX!U+e@=is>Dp5ogL%h!PoV7n z?#_$hO4y{eRP>YeH(wor*Nz)A?RDCiM6-Yv^9iB zo))}D`<8QaAJuwIJwK!}7|hRjP#l@f2FkHYNt7KPE@veB`qC9)5n_{%Ys)(-F}bk7 z{)fZE;Ook5s|{_pa78Wmzy0o zPK8fm1k?0h0MVi$psS<>jldR>HyV!@%E&F6Ew);^QnU%4@I~=*$&^J`eU~oG#v$&J zF?K)wBLES;0rga-Z{NZIdEYDHToN_Cr(b%cZ^LSi(}cj(hceT=73G^)qh*gWYB_ll zqG)oSS@@Z0DlXRdGq@Yti(H3(B2_6UM1$9%1r#)L8p)TRroiNfLL_pR9!l)&@GZ+8 zPb5%v9}R`Yc^AUz>YmhCqs(1@_{gyVpIJ4r;04N)1AkqHH$8n(m z{SLWPP#rckm%h{((w6=PFpKy<`IOzyXYQ10YF^nkmxmS;OEjz-Uc}KEnRL}0t0!UK zcURL#R#xqyq=t1dXD;WCOp_>c^lySL0OJwA#kwetZFzPVm_U`}>TYN&D^CJ0<9&dN zxt239HT8lcF*1^cQo|9s`*~q4E!pnXwRwAcJ~(Mpcf)l#Fe0YGoPZ!~!=g#xg(WN+ z9PFCI*A|;kcY!D$TgX63E^PcX8iSA3@8o+f3m1km92mQ%C&z9nsUocGjG?t6-QCqz zG@dW~@)cym7_4zfi`hB5LaqABU%iLTJ`LuA!VLa@J$c9AM%9b1QU@RnAUU}5g3+GQWIfi9oE!P1xNAhAM-_ zIxhRajqyEj4w_S%sE3tR6-fCo!T#oLA1CFnS?Q-3-Hbz7k*4-DL#V-NW5X_!r~qK* zX$No(s{o2b4h$)3aN)3y^ion|$_6%`Mt~F)AwRzmia@k3qi&I_U4rFGV*;Z7cGgvpVJneB5Uiy1p z6p&tBokzBtQ&;Dr$k*8~&Vk?^2wNKCUyy9l1fYdaqLw(^I#_tNv|FO!KPnn=_@}chrA3rY;RszOE#Da3VbZ=)c)@7 zXWI&B$YH$e5zbtqqSx@a_?hI-^vPh&%pg-HhM;k?L}$Er;>1K_WR4C0%=_ShJmA1u zXJsuMLi#iJUkj1#KoF*((RdGN1Mz9Kjs>Idf2p$#Dspuh$TcR$h7c5CmpN$ID|>%;$mx;_$u z%wK38C8UH+zJ*RfVt2 z7ZVrY##ys%DqEQuE;4_zDA;{vL2Vo*m0#^bs+*)090W_uL3vTK9R zI0h6zRk8>UvIIGBD9t1=&_^a6h+`8ijo;L>gsv;rTg&q#b8_)A! z0O@v9L`FtY9XE&wY=MxekloATB#LhVS!fABV#nvvfK~2|+|O6k-XCD2QBDSM_@dRA zuE0THyjMMW4877bp~7qjB%y;U$c7WP77+r97yYras$JuCgQuho%h@B)3Pyj=HjJ-w zcQm;98M8EqutZ&;i2&9lJ2hX@d#bk9{V!SPE)1hfgvn=fsW8?FFE93`Ir+WqpukI- zCe!=t|C!dJr3c)`Dj9YGy}*Ds5zpV#&kQ$MHjf0{6r4U|66$x-HIt-gBARERLM0tz|$q6B)epfAv;Fr^CtrCAhg^ZcmN}Ac469k3h zVz&qj`FxJ9;n8LJUZ)K%ZNoo`2*d_9@$RbBBLt=~5-Z~`E-&c)rvp5vS6)LiGsPgcyb$9KXqHVr0LE>86c$X|AyqmB$ zT{{axSeW~-H(eN)N>hphFrF419lhbvY0Nm@I=QK+u*>}LlZXVqc2MCzrl(bOH4Cn% zgKy4i16A;OoJ+2*E~XkuAPBKUAIsC)YSm04JKK&I^2W}4;XPJY@0@lS`HvOA3{esZ zDD{CL7U0b)q-6IJ-y|qpZ3vLcAxPZ*4x%$@)LIdp=e4g&SbI%HgwgRMs)cuF76XFt z>gvFm9`Jj?Dq4;WC5bRbeWfB*1<64M`9+$ED2z|Duku0Rimr#af5y0d+W;uM^`w{x z1)s0O{(N7gq5aws%*`fa7783F=^>a!kl5!J>Cgf@Y=*O-vQn@!hg%!IrGZ{yfXx^R zp=AtB6oPTq>2|}cEu*L5pmtbH4E0g*CHa3rMzRHnPmu2toW22U8aE*W4H%#HR{cd6 zDDD+(=KT!)#T9GR)w2xd6R|KWxN19WU4*tH0K^mh+tiiYxr2+V8@ybcu)Pf81vG2t zI)EGs`S>(m^m}!Izf{7Of9MJc>7YDo-zK}(-AM=@-wYo5`Sku4gTb-a2ZZ1|#}1UV zfl^}#&;$g#1l4oqV$T+2CJjC9LJ<*%k9L;-ZMLe$kMi%uA?|C+v^9RrChxq!*URNO z`P8|8go#L>0;^G2Yz<-KVP%Yr;kBDE7I-lIo!kFEN{k^$9mfBM#0R#v)@B~NgmU4d zgoddG{bwN(hl3bktGl=1d2h{64zJ*(Z_&{X|6(~9yCFjQ4`7{T6Y}r9==PA7lI^G! zX_&LYj^ZNeY{d`^|9uCu!U|fSvIB0bk(|+Qa<9Pa@$PqW6z@h|AOgUsgCJs){}Eu+ za#j*)udk!!B?8Y;cz=C+3Mx8ap5*h=)a<(%HU!;wdTu&eLR1S^WMs7Gm2@Hm-CybZ z%a47NIYN8#eyW?!zFP;%mJwIM+FLqmOZsMytolN{#0SXQgJ^O=%)sJ z>H9nzybINRXGHu?yZS~l_4Gj1On))zzb#Xs1&RAx6x~deMJ$q8dy($z+tuKCuiWRh zZ1~TgubEP(c#h~OnZx(kxk&GmCEdplAQ!xUwf~>ac8MRF_cA!p`6vGY$-$D05EIs` zGpw#O+W$=#=sq6wroMmf@&EI%q+|uoys+>O{9}Uc4*&np|9AbcvU@K<`Yoh(Y8gRt znkjR}rT=xJ#j==$UPCe8R522qz`h0k#VQFyv$cX4 zv&8FM))u^$myPkosf~73p%cFViUs=ye!@S7Q&vAd#168Dv8~DaTKC?APQm`b+UbXU zN|{BitH^i8+uO57ubY$cL$I_%-cGKruD)Ns{NW9AT4;j9MUo$mK1cWG{!}@L-bN;W zh~S}DVt>`-3A>05I%--z5rR43yN&wx>1^MAT$+Hj0Wq!3fgUOo?d(hFB|4>h_Xv2I zJAcgck}`|;$jd1#r?jMX&Yi9W8x;g;_x08;$Sm<|Et7cddUAD$?TXFQTVc31!S;F3 z4?N~X2=}iqU2Z#T8tkJqE7+t4e^UIv{iz*cYjQ$ zU$^J+HqE_WopiU0o_~gt<;mdX9-M4^xBJ_Q_#M|@Q)1?lHHPrF?q>w26eV+^ub%Jx zt(xT+oOJ=c<_mAyxCTm0>wa#KRQn!`y&$5PO98-cBGAFS%tkpKr{-m2aPqEqw=ADd z`SfvV(3u?Lt=3=zQR$jk9b3e7%DbM~fXu;<*C~B}((Za18}GmQ%y@Y=0Aa`^Y)U6{ zwvxnGE`0ZM@nqdQ=9RmccZatVQ%?0F{kkuh@m7Jd`7h=1^3aA^pB_D{hRcI`d$YKq zA@j?doms<_25Rxi(9C8l;`qH}?p3^;i$}KXVZ$`Fw(Jw3h8EK&+TXE$u`AC}zIxvA z?%awP-6>OtYQyw+9g?KJ-dXLRC^NVCpkQ*9kh%jREDx&iN|Nna!-*)TW-C7W+i2zA zcnONH!`f}jX6`SdB=dA7=hJWnK&d{GZ?^*#fhpt2FfnN%!nQf|vj^=u2E{-zfb(X) z2Z$VU&xnc5G3~h$2HVHfyQ8_=4eTrNW4xUPO20v#6*Uf^ypV!8)QQN9OY#-r&Ts3r zpV`9p*cfkXL(7RMfr&``{;u7Kl?X%v_bWtl>u>bXC;~H961wx(@-IKi-PvEFy{jj( zeKXZ@)<;}jt4en)QClr$g;E<*N@UA^dw04^-5OEoz2tK8Aaen&%58#U`U6G_CkASU zky*m??M@#CbeTtff|&F!1b??*vF@?BCbd)S(%^GsNOQ%^U0t|9sQaIPTX^YPCEDlb}HX%mj2 z=Z~rtM@1nLxqcvlOk_lAAF|=oH)S=3Cs90%<0V}F+cgBqA|zo1Ym`9ThapSRTKViAB!~!-+U#4e6pmXF{VFQEKDm`4LcpfBu9BY1y_9Q*p>-gZ@YhNj|!} z?1w?ZOe&=URwVS&SDH)4=^SCeGpkjEDk)QP?s*&{!)+qzeU%2Nyr)^_s<)z>L~M_5dTu}c=KwGf&MbS@N`LK zr=uKojMsp-w369R-Pi0LBhHT!q@vCq^DIF;LmiL5aGjzB!RGAUsvJXv%x_fZ7TuJQ zL_xnO8;rj7VK53BbsRL`KD)Y>dJ9$w8*xN=zXh=3F2L#xAxIWfsQusng1zCmJ2S~o zkiY@`2?yKj)V{tu6MRe!M)ojUB9rLepR=y5m`MJ2?bX_z1W*}l2R_Qxw%FO-9ium? z_)5b@r_s#XlWG{l36NAX{p?(U5|2%G4cH0Sw{Uv zRlsT2VN>EXe6vS)_xBmRe(G8J8wp+=mio2N zE>%6@yZeJ`Vplj(P_(h}m5iLDHYMTtckwtjNYjKn|U9ZT5UGHEJz z)QHU03RF+0Cm;4$qX^H`WGd7-T2o%~36_}eW+m}_e{YX`#Qi9VhUu~?-<{HS}K(E z)@_ylS&W4-LHW2(S)4&{(NO#A_@>h`cy+S=HorRYC41=-?6#FUyyi{X4_AL#EJSpN zFNQ@f-ze*v8A{>2;<3bpUI5!jZl(M}t%nY;_|Q9o09QwnK{iIUYi{AEvz2;ehiiBC ze!aO4QKw<{kew4mBw#y4=cHVMZA@g(7};Q}W5Lk<6gsdP8@V=%%|#_n0x_TwnKyhK zmlJ%l&xDv~QXoMR)9D(6x>Qxi7W@Zi=j$g%T? z)#R4taHX+@TUw%`r>leGZJui@*fQ;1FxzExb`l0%hIXbxIRFvT$JjuuX-r+e8}T{X z*+<@4Y<8NKo9oj_s@tP=Rr2Vo9ahOfV=JlI&}ODHXUgUfJb|a~l8QDJz<=4PJd%+7aD%?K!yhu6lR;ZNN>GqAU6+TMpBWtpa3%CcF=u z-~KOLz>g|1*r~@`2^LU8uSEa9^-G0=heusajrkbF5Df;PjCY`WwB4#c1E11et$J)~ zlEziH*gkj1*T0iP;DD)uQ6u`Rs^;oOhe!TJ7LyD2mSo4C=#xj|<=*u9^LxVxs0@X= zxvr%Z1?A?(jrE=^?Czg?4CCrdvBk?hpHMF8E!LAaYW{G$Rp_^re<_KbyXRK%ZE7sf zFSq|zInMd-S$DE*;f^$}%%ds*ku*v3xL+?fyWimyi<9zmCZZOMv@oR&wX2R2CB^M6 z&3$y1{}8hA?Byiu6KQ`G_m7T08fY7)cMubF6ZopMYu`)e1#qEbxF24}r<#8R%b8P| z`%?R!<8C*ztCUnp?8HkVyq{)pYM_WN?)BcyiO=}F$Jx$&Qb4Tw;{uZohvP7h;+k*q zF3M}~D_DmZdA3O~mZv3S9C<&PM04^zb?MIj8K7w9DtqXi_pAV)d2@JpdZh+y%QH9( z_3Tmei)P)M_by*1D7ux2PgiaZ`sb9GPqDP9uxlq|-)qUv?_XDHhnln0iM^OGw~qSV zEyqjH6e9v5neB<1*prMhGkeE zs@EJ$=O5XZi!=R6C6n$#ta(2dt&lK7tfWcnp4;LQQYsLGEpUFoe0Q=g@Rt&=C+GX& zv^%|dpI|1>dIJX*p{R#>YJ$W=p{^bjh2Mh-Gvj$(Ster9!&0?>Bk{G0_x=<_DzPCA zH?#^a=2a);ru(?Oa?Vtt7q<^uXCTAWknuh1#>3xx z9~~_&{B%8U*;3Dkm_NGR#aR2Jgt*tACUEQY>@WOirMXyeSV_4hlgmjo|DpQK;Y{2u zHsks`cHUEYwNfdf_s2>)HNC~2EAG~HjJgKRmI?Vk=c`J;aYBVPpMJPWJsI(5cwT82 zvAZ-<89Sxi8o`~cWfB&Qi}GPxqztpi8s{X+q&{O)p@Q9hr4;F#MdGR{cYBJ)HJhm> z1ZpgrMs4mIG+yi+XHHKym9vIcoewdM}{v`bI zDsfOraL&xq>ni*k)snch!CU?tC7ntj{>D_Ypqkw_+?r{~E)dIJx<{+vH-e-4m|)o5|ukGTmO%n~l*Ee5?9%iL%-U zN5)Cl399wcf_KK3M%9u!GD2u%>+7LngESsuW}DtNGb2T_#jlFM^ zVu+LR?QA8P@fqFvGi^>qhHx2k{GDhn65lYe5fiaAhG z-U7QHltBcxjb&@n+fz(0{71}Qx7E`tiEf6h`R<*3(bEC*{j7&gRu?xUuLE>RmO7o$ z45vfW&Lk~mn0uGu>f_u@$Y;3de{bb;YSOzOG7&00bfbMmaVzarQt5;<=Kpw1*{1M) zBem+Ay7I~A0!M$^{O(SCf`26lSF396J}U~STxgpP7|p`^(P3qIG+6G<$YH(jQYlBMIf}f7E1|2DS$l;r6gHgg7L$W^meVqWxEVNBI9R vzJnGZ)7!+`G>{`|OHRQ<1|!B}N5-Ko|=0(i$MplReA2FT|-V1R5e110Ny;emQa=efokK??o3|*?@?Uj_1!@r%oq@zpyF1VRg^?BDMe0p#*@I2UU=-- z(sJFE5Ggg(zSOygtePJbkf&+(R*#5y9thBkWD8Bt&sRJFfoK&J6(@Gj11xQ5RI>Ov z9Ot+pFF~L|my>mc;4XopRz+6+izEl5hCw`^n;_khZtF5+R@N8 zeicO044)tcx2tg5mK60wTk}Ke=Mwr?$d{xiDfqr@v}IJ7&NHealVmT*bCj5$uNHCW ziQs*kf=oX!NRd{Gg`qs0x?53Tgk1%`uDU31GVw#~mwQ151)TAx`=|T{7)@MT%bFdQ zT|0v+U?O{1a+yW(RwkYX-ooKp@4fMKk%Bo?{jbaKr%waSOU%6uj&pChu>D?DM{M13 zFJTS1sUi?v9&QYc?N}JMOquGjJU%YG zOcVZ4(s3c@GDlO@EW(YRnY;RVGx_M-Aa-?%4Iw@;PX=$Me^O;-gG|Bnto_^YKT^}? zFL(LF1N_(r3SxG7Jat@qvva-cwRNY)9FZ!V!~gWkDl604({1=)lQqQfrha{s)Y5wJ z&U~Ut?*hY9`~j9ZC2yakC7jrO`e5iU@MhWaU^gn<&$1&eG5M5*R&Mpwn=~M*hp@D0 zYB0xtTL|;oCdzM4?f(Ak8Dt%lhf7%WN|EjV!?U8H2W&?A76JRG^nWj5&C zOf$T~iVF)pU1l7&tGjyDS?jliX|crqrd}BP^RctN;D; zSqH}eTX~)hxbshbV$}$<%9SR(t6UIo9u580!sp!q?1**MuSgftSrkQYHZ>80v{ z$Vw;I+Ii}y9=0*=V$Psys!T@GcGARYPOPgaelbObL0H)!drn3NB4B~z3YNc0Ko|O4 zQkXwS#q5)qHU18_R#C$0sH0wec*rlSCn^qP@0E$+hs=vim7ab8_9lh582OZE%)C%f z$0k0$dt^82x;77zQTI(Kuyv_HlNU#?7;>Q9q((FG++QHkk=!lTxltM)-*Y9!*k^$y zr(YZ2c!oWz#`ngVz71a|%JZsLJHY)AZG!s7pcpv+IHoEk=Bg!q|Ima+S}TRs#wx6{AnFZSWHZSZ>`@*+4lr=NBH$?;CFnP6hSO^Q`kjoz;aS2xq#an z9-fqHhM(yi=1vREzjTwSz~Hi`rnG7XP;@^%UV>P%j^dhhfQ(bn$X-Dnb|;0-zP5Ac znU}VZNfNPNe2i2C<}s~hv+pULiN@!e&hMh%A_F9GuBB{?@Fv!d>+ZUjvdk8(ZC&d> zqQ$NNz};wM(P)8R;ExIt2WbhYpR9IAblxr=p5VXO-r3R6I>kJ`lx8+klNQa3yvwWC zKt&wC&$syZ{Q627xvjQKz33#y1%V{#`mwhV?*^(0(-;A`Zu_zU0_EXaM4s+?2%mw+ zS?3rIPG%7#AW%4lj8O3y9YjG|ry=SUUd;JQAKhGss&eKiI4K0uXHc z&n0Y7=d`hJA{%PRc6n3@qC{%R(ERS{m^j1B3@&Ym$H%OVeRX#}Y(i2TYbTIM8#hLTY>TiQRH|bbBF3;>`ZMZM5m(C`88p3AhD@G6etXY@w1YQgE(tpl|C*43* zaH`IKIS6yanq}lvtu)z|Eb+jk>W=48r5-lg5B8NeR{B&@Rp;;12K zCK*;+!u^NnAPF=Gor;99vDD*qrtt3*Y~s?WTfA05JQ?@8eFDofqIpMy<{8(BL+n_U zxY3+sPWzotTxVtV;#4Xm;Em4)NtV(4UX^u=Tp*7{rGeQQ*um~9QY!<$9=?N1-=;93+V1_JZsR>-co z*l&W>i(<&4N5;Vz$67k171`TjSeD0yB<8JW_$RAcddKSaXu3);NqsosiVCwQk z=L*4FL>i&3F9J4)zYK#}Kbyzr{qJ*mM@C>vF2uxDLH4z`=2#cgzdTTet*P-?PDK=6 zcd<17Y?`Yj*x!o+JA8D;2!T=ydYmbK-Qa#9D58WIg6Ti=o1yFpl#IN^W1$-9oWq06 zP9C5^o3fCP^J<1@O!WD$FNTNA`z#Lx$8JV`IMZsURt?HCH<8;|s=SO1EN0tyv*fK*|nw&r{6hXeF$+1Oe&bf@lDNyYe!(C+y1 znHB-t`SOv6?c8d}4+K`{Rp(Z<=f$|JqKl#<>LotfxusZEOR(mz(Ph6bhrzrabnA`j zg7JalA~w~MX9bpmZd2Z2`%gi+Ay}@JBRSIs*+xSijIFAcP%cV(?|)}->hEfGE!?xQ|7yjlP5pJ;3^fSGt5Zy#46qzMgEt|zbkzl?;w{a zG@fM2?620=bXbCX7Jt~*9|5aySj>KJduQzy^fNYqiWNPaHViS_RetU^TJ@~5UL581 zCgyaWIEC2!a(ZRvmxalR1~b@rxYe|10_bNyK71+~pv^?N*~+08$w!D?3cb$T=l4pp zd}7W|m&@IfS2CwZ@|R27N^*DB09eU61j?UlJGkG}_!ysD$|6VP{))#?DFiEKlpb2hGHltqU> zhRphK(xKkI48_kX0`;4nK5NXUwlT9IzS&oAv{MN^D?w4+6^YGNBHyS#+CG;V6YDnZOq9Fe}RWI3} zo-)x9KZ=Ph0zZnU>_1}7Y$_Sbhb|xI-$Emq5@``S)tD5b-~TW&JkYCT`K)%mfV`3| zVO_X~?vT_U708&Ae@*|%%b4_8X40j~`*QVQzT=rbR&OV-7>kJZNZkN(^kkd-J0S6T z2;)!)$p8~1*9jl`+$2C%_{;)>t%n1oZIX{E~s`TRG1CnPaiN!#^}0{U{7-!b+Zee zPbQ^ zceZy7&n2GSw*^2BZqevYD@V*qD!-K#Rd{TUEQp~1VIhn|mq-waB2I!Zj-o(-y% zisN$ai2Kt59y$LGZK7J92~nVugp1#ANXb>d>4SFE?HSh2eu1mJ<_i4t_C|hpm*T4C z$JgQcfy*b-Z7Z7M73PH7k$+rxYq3I+wSP8gXBUNSoO-rWS&7H#GZE}4ndGQ^eDJ+5 zYRK$tog5$X21)Y}Nd}B(gc!K1CyXU_`4`TVGjV{W860K;f3%f|@zG;ofXM*{FyHQ_ zb5WQKq#~xF_*!3~C;6GATWfPNB-ujvs3hTgG??9Iz|JL6@umZYc@3utz-=})r(o?L z`li|jP!jKeaNnm?gD=S7I%%doWbBlASq5yEHQ~wACjBGws%9j=Xl}B>n^Xeiy$O z`o(+ND0?Ov%0S=|SvQ-|D+(S_!%xE{*{Bi2SoHD4A1fcPTG`KcJPIR(Mi=4PR%$9di*l{AyU zTn|d;4x}dKT~t&t-ZgjAvRQW+u-$1HBhawGQ@1YH0c5*@&8C+Mf5$?j8R;%O6vMND z?53{%|v$tUy5G=Bgy&y#q1!fGp@!#y%> zaMOMP=;g4~&=971P4_w#Sm{lKqa!)Vk|+RB2 zxv7Y`+6?9>EGrsvtBED}T})ao^COnsfe4`hz?dJebHHf!$Ldj!ICA`d^Ert>A(*Zl zox_!3$j-h19RWg_NC3>2yU&{Cr?#G}X8-$)7r~sO96{^jTpj+wFv!t7(V?Nr@gj&3 zFCelBRadhn&m#MqvM>XX&y4q)lfH@$26iDK%XTA1(g=6T6h&D*-(>GPlnF~c!sk@f z*k+5Z(Mn1wq8lHs&OIptrO=Xj9^xw*!(4SD%$BB_10bw?Li_Q`^eRRQ_Z!voLe7gF z)h)RqU`vE|J7wEKdBDZx2Hs@rI1HH&4vsZ24y2vhYu1%@}PYuuOKNX6kjT5=Wo&@%`R9FzogQN%Xo)R$YanKAj604}jn%ofVSblxnO2 zSI)!rHFn3{>E6ofKj@2+A;R}t&LXvxY@hP)PH&WkrVPP@`fUQ@Jp=ggaN1VIT0Ye9 z0y0eAL2W0Mxl>iE6XkDj&IaswH}-;{;_52aN_ZOp7Ni^q$1y}iCRGabippi0^BaV= zbp9*N$En1bG`+Q4W`|~cK6?{=@-A4!8v!$jJ^`Q?Z)4Lj7GtHKOL2Gd5T$K}`pL7Bl*^6GK+msHg2Xs)*w znHRrmUZczJDw{n1{7Z$Geck)amv}t$7#<%&2HKXswwdMSq=E;Pyvd<>x7a}^fwlTo ztEUb(BaX**BfmBY28@O{re2y0%=Cq$nY8$zE@>1#1r(`%gBX(ZR#UtY6- zB;P_ZnvLm+!c*OROT+Qz8e}wW%p6&>mU{ZA;>&6s005e4x3@P*R}6l1pea>13s{&a zY4BG%&8k{7i3i3@y6%j7*;_;09arZ&-Gj16xNiB{I&RHSVqnR&TH5{4Ty0n9b9X-`MTOWUv0Yk25X0ZvBGIN_H_o=s(>!n!n>sm!I7GFU72e}X z<#w4!5AQc!klTrQoS_=N`;t}*fC-IARBD+Yq~YXjIOpSd0bDmgwfajQA$xS5s^aTj z_HFEvLHD96hXSwM-AK4pEWL{N>vq~jo2bej2b@iWMa2VmcPU?wJ#jU#c2#DTt!JsS z8<40DGz+8u7E}OApGl190Bn}UkMXqRaqe!S{Wyu!r+Y|f2vQVEDhCuY_*CR5j2N!v zjsrYK{}dq9hSGQ&xpyNMKo0B`jif2IEMoTelKi!XYpbiNG~HNU2f(#i(`QNm5EPMJ zXH~Y!LiV=}sf~Vr+TCCLOAJtQ{+k#)uVn;o@LgNynXTgj^6)_8f%oIaXJ13}-3@X< znF7+Sre{ZgxAoMY*J%5(vvV?GeHns<&65BoM8p{@e2y>R+8E;r`_x(((_JHcJ;oDa&%C6&hb-|{%2{BF=5fsQ_TpL;zk{lRue!dd*Ikqm&mP#Hp zZ7<6wsB8snkj^i|e$Ss>odLKiw3N|J7dn5eKg5*z@WGeo7gxeb>qU#`d14Q^*6qH~DNL5u1Tq*ltE<|jvf6wC!&S+EaS5>tH5&z&wI9kN} z8ejVDfU35V$L_&RfN^y_A6}s}jBK()MUSiIYzPl&Oh2Gsnil&>SCjiMA_3}_IsbrB zEvhI65ccgeC(G+vM{R2`?Aj^P6p$P0>*p9c8ua1XqK!JD#EPHi0IoXR*4XI6xcnTO zI}dlr(7n_w2bfHtQpC@U6AXuiq|@p~lAO%)WQ5ZeH=g9@pYXyG(;ZdvqF?P2gs*l< zc;PJr_x5+s@zGZnR5$~<4v1JWQ1~rl)XFtxG@J75>h=o}_c`z#Lmr;owB?6w<^C@8 z!<|Q_WLpef|DnzGH;r2R1No@>Ze=EJ)L^><>Mg~bP%ZF6`rrJ)?hicTn(o6`dM=+S z)X+Uuw6f@`IH?mDB;4%&^&68&G$}&C(DGm^q2PsgBqpt=%}-US5UP>qAj2jHV%e4u z_Se~@s(-?U?X8E$N;LLO0WoMS_hoAm6t5*j_BAVQge)C3oMo=|j=HQqsc%1Y2EJ@e2Ujsj`or{Cv@|%m4)sgJA#=sHcz;?n2`d?5DmH z@i~#2kU(%dMN3Ui?wyafC#+~mzr%!Y=}#JC9?ydL*f_05GP#26wdY%g?(Z)T4n-!t z3T~Y=m2{=t>F+(35uHn(mlNm4Hwtefl~jla4v9F=S|sHfIu8a9AAQzh!tG1u+v@0x z+TU?IS}Y(3#UQtM?Prj(RXE(-+$1I@^X!P9;p50$1KW05@G!?=U(~Ps^r*H1=1~BR zCweevtc;ADSdym_Ar~7mY5W=pK=o}s$#pt7NX3Wr8==x}Q%6E(PR7*&$q3i4>qLON zaX2Y#&Zy(|ohUhP=XnqXyq^I;6C6DIBX{QOFD5kl_~=7te*cn_rpC|&S3~1m{Oz^S zr&bro;OLlAfYAXfaMpJxr2TVBObL2*8XoYC0t(kHP-&}hSu0)%*cY4po+k$K^M+N) zef~*Po%JXr==7j*r%ov+WBW?u;p*B6>gIl1X=;Khap)t5P2UGq&K2gT4|Gx?Hkq)w zm^NngabV6S%IX|D-W21}EEY>ny&Cd9y*fb7>tE%H|d0{3+1<+Zp2B`=TwCGdleTRfOU%i)1I?3#5ru#v9*ck*4lEydj~;@#ozjZEs*>c^I{Dg?2TOZclh zfQ|jqrT&|VwxdgnkLNang}QfG0U~Ui#WyfIg%9M8aeR0c2BRBqVY6Dl!(|-Tr{~It zkyjRvqv(=boz)d>e|G00@n(~ry`(xIquo<|n2sW8IxM2256#E?>nDH!%(ISxgc!r zTgehzBiWgpmZ&CCSwO{$RYVIpRflzw*6dezXq`Ds!CJ761946ehipqbEl^!)nl;(a zMA_`hd^6uEaJIAIFM44WVgg!a{&9{QKdg>^S{%P< zm~p9q_#Sw;!DL$B)oH+)@?dlwUHbTN55$Xu?Q^2~3)nHwOT-@Jwn->+=0|(!MXT@r zcRuC#&jedRhCpJB7ZW?&Mq9ydTszKvilrc6v6oHl#kl@B9a!rZGC&wqmc48ts~!OK z9XE_4Ku6=%&2dG9Y&^2SG;z!Pl+cp*0FwK=@7lDf-Sc+o9_PZ@f6s_`BP8HL-1(aD za0>cfC@X{S-^=~ZH9mH)C^dGRsvuIEa~1M%Z%_+9jLU+~RZ z$fFLsYtYj3c$A01VzDtS?Vgamq-Why)x~RP45w5STWjRELpd!j^MM7AO@*je{=ot? z{u-zqPo@IThQk->!LV7DMclhzNJb>A{|p0REUjpxq>h|&u3~CdL#J}A{A*aZXJ^3M zo#N&oD(v6zvKHa(!Cu7XFcC#7TZ|g6^|t$E1s5N}WRT8)CD6Ckb(3Gw z{l>v-ov@==>?USUEE~W0P!}i_0CrbmU9uJEy7UIX<^&P)csw8Z&w#-07FY|eFL7wm zJNoXk+ELlM-e3|BCOwH!Hho+sd%M!Kxhq!vhVWc!+5U?pWX1!zyU9!I@S*&g&a%nY zSm!uKASM>K1R>kT9jtVHr)Y7kiHjKD#;ID`Zu96!BX2L?e41?*vCTC0`q3ztqvSmtJaqRmy7;eIuvU7lWt zW_GQk-|M5CwX+D+T;q~}6axqdxdF_Jfsyr*ggDt04pqYLwNlM@`?KxG9UYf!#`{@c z9#*0c5%?3i@eKR1g`pYEMvideSY!GDqpE}Q^8$~%ByYIdKY*@W#kt050eaW*S|`{t~irW7w3>|VM`m(K0-YJSW`ZAen>t%p8}#95+Wp$ z65n2|7X@E%2EgLN)bXTJ=n|8(t;0NcsNiNY`0DC;=L?4T&n6D2!_)-EpUym6=oY=u zoK+H-1zG%EuZ~PBbtH0eaOqXrT~?o(pp3Qo3s!leq;0LMC}i-^CIpeoCmx_0sDDA5HJF~9-U#?_bZ*86503{G#iFB#A z;usYYJms|JsiDXd4y^{LsaWsUE?UVlqD2+sd}RtOZZClqAW=RFvHVvmD<8vvDR9V(3IO5RlTr;*V-#Cy~)dS+Q` zMF^$q7>I{}8Ox$Hy`}>KD=*@w5hh-iT-va~Abu`k6T1Op+{=;i*hPMK(roSKT)omN zx(9&0gG;uP2FCfm8bbiNI4+^;>|6?qP?4k(>a4ap=2#fER+=M3_a5cNWY1#Ro*9MT zvy?+eQR_Bd*E>Dh&lY`g&_D|wKX*2h;GSaw>*-D5YahQE$Q-JBq!P5!iedQCUqIZ<@Lt|fI^qmdr77?w+;G#Zk?{BKE(QY~-)?3-3_>_SU16L_nk_+#? zP&p-?$-7cL`oIsk$oZN3huAaSuA&zK>b|gbmwKE^!%cHwzkM(0Bb=PU;0jnx9(cg77pq0RSVtSd|j1v}Vj z`SC7_?z_h%d#zOAb{krGd2dVn1OZ?}cJ-DB$}N6Z?~0}AfM=G;#JeNK4$@isnki)| z@u?(FheXAHj$w@@ta>*)4ryANU28uhm+#}NtkjNnJ9O;@(ov22Vx5nos-%IG@5r`7b++ zw#j~mW4OsHDO@#mKH@@Nc_|8!m-SEe6djdcgYE3#2iw2D1LT*6UJ$X2d5hi@%F{U3 z`M_5VG=Ej9avTk^`+kgaV1#;_FjUPHs(RWE5wleLnlhS1Juf1Q=Uml(#<&hhQJKmD zaUYTN3Q#R?01cqp;iemqENwpO%MGg?lZFwA&d=yDBfxlqX^pR8Rw>)0*o267}o2=UGuHHa!D%u31ZD z#@%+gd|qeA&H{d|P_^4j9WBX7x$WrTm7WzJ_(#;O_p=Y;IM;YXGTcFLUu~SjOX&Wp z^B!>&MBZfumv+`BYqOb;>fW}0waVxN`Te|`H3Ck z%=v_}4?*`vEMH0gBI`hx;&s!bji6)8l>O;qCOJq z^6x^j+uvgH(8q#D0Plz@19dP%WpeUZuNs6G@Dd^mT}zU_Lw^G50-AnJ+PbLk(1+go znKDbQ248QRA%n2(euVi{$WHXC*)!NwNGX$oC@0tLRcvh=)cx%1>_X2P8~k#>fE#li zuv(Cu#G3h$q^8de#zYU!OR|HXgFww+D(Rf`hFR;k-0wpzC=Ea$7djKbuLBAt`(Fk| zI`_!=?>guqFF@G5Kf?Ii-ouQH!G+D0t%c8}h@XN&|CwOitxyKuXnO;xkFwjm2NVM@ zZX<(0AH;!b%^azrH_plqe9=&0Q-IHoM`rQ15FU2`=&6JUptJS%_$3G%)M9m! zhuy?N^gUQJa(V+vbhRVbTPWbFMyKN2R7Mmoy>YY4$LbG%7pj`{gPH+&{8&1`ih@Wo zE3v6PoDGYU04Zw~@YuLJN_;&me*JcI6L*vR6h&qox7hkr0R>hUR!T<>qH1LcSTPVw zqM$m!eKq(uOhD0>j16~dh$7L!YVxL}xKP7$xkUqsJ0w+mN3SQ6;cU)42O$fzNRqlc zJOxRAaG;74;02-;%4=cLK7O8 zq=42nosrIh3!+4~Ks(lnRcV%mwT>ogGmoUUV08f3l2itU;|gN7CnMpOseqjh13oH2 z;MajGOv-ueHqpZdLyViiXNth}u7B!&_vWvB|C|~0VJr#ISU|vqeT# zDT6*B10m&r(t*UU2Bxz@{<%G1-Tre74yB>;Ka&xf8}QczhV8`}+RVO=zpKiyZ~0mt zOG?y6=fmYw(1#VN1*^(o#zxh(0=^WKSg?O|tRru51V_ELGY-=5s{?J#sBtX7n?)}b z>3U}5u1RIL+?f@t>X$F!}jv!%PYWf6bma zs{8lX2a+B_>qx0odRDx+E6`uIQiS6GCMk8cb}Dl8)o0%t)FK1RCvUoz7-sl}V=<4s3kdWG{`NPdPLrCrNT3g^lKzTe0^U;DpO65`ck8O`Q{Z{<}cbWVY#c{zii^&Fnj0f=1Y?rE*Pk5ymMUM z@tr{4&;PS`YEm&g5h=we*!YEkNLBrSI$Dy7iQ2Sz{i&2zd#nW;t!a;jF>iQ4!7`27 zr-0-s07F<*7^xVTN*Adi4F=2&g059joSK=J3N&w=86Gfsnh0d)QF0t)q%S#R!g?M; z3L*n!-uyVIv%r^~ZHw&JQJh$hn?emq1RusI%iX`P5t-WmNk(b(3FnrT!jN&cCEfU_R zfBF1AYG`1bqsuS_B&Nyj>dKt}`8AaK1W6H0Y^s3_7}mS~W~Onh|6nx#9~_nc$&>zn z9txcNwWvK{GL5bI#)rbSHTTzs_KV1SRu=M#*aMV9zpou1nMTEsnwunP!_admwTI~N zKb%33oWVSA0he9rMR}$6zQgK%TH{pA{GJVL-oaWg^cuk*mSSpw`a}{s>LRNwOu*B$ z?B{I_+h6jp7k2B3RIV0D6#<9s6B9I{a{QrhvYFzarb60H?}Lj}@LZrWnEp|=mx*HO z{MKmH9@{*y=|z%;#1T2FY15fhQ>&-xl>2f9Cea@;cy!-UB1;d2xj}~^-l>61>z49{ z7q+N#%mf(t;a<6#tKY{RYNuCv6BCm0%1`aWGWdOD&!PFjrNNC?Vq{{$#s=Q|R&2{6 z=uX-{Zz`)A6jgbYg@U|WVM-Sfd6rvp7EP}H*tcBskE*1jEVFb%jNQ|s{C=&KnU%)v zUJ*Lo8sRxXv_U2aDfvUP!H^GXlFGv2dsp9kfd+f^49kDBVZcP$7yJ5nE+4Fv>s9{! z`ab=DN48vR&c54=+^#pS?>+S-ewm$s58DIw$oV-uWKOZEwd|^fc%b{V&2BMwoG`xA zjiDL8z{GOfk7@cTw;ov=B6T9w(|@0I@&zs}^b25b3sA_dEjur0rQi z@5m^$UMC$$!twjDz5ddcbRx?;zjNn(-uLrOP3k*N87P0G`tY2d zJa{9oIXSP!E0^tNUE^~%SSmM6s&?ce`pe2V`Y^aQeB_3(`nIE9z!I@MDPZvO>FV*> zQYCFDjuVqD`IjvCJVn@nO(%U@?XBaCmn)iiXViMJH2-tXW(hB?@S&x;i=_^zj;-l% z1jZ_Z6x3?q$30bHTZGSZHGHvdBA(;)q@0Xqzk%*DEac_>1i;ZIrpNBfZ!)NVIZoss z0~peQM=7F6cJ0n`?0){!t#b2%p)yrgflDnfxtpwru46yzSHgMgXe)dge%Zhtvk8o+zUIs%iZVFjNqg=K08m;Kw)tcbJ0Eqf=NAdkxd1F1Z^hKp zMYWQ62*L$_DR8Gzl_J>znM5%(gC8V*_W%3%2(VRo;ge;W&z@D)wSqw67QMZ_8|%#@ zHQP=-_qRc+j6ljp{RCLA|KFcbNtHc)d}6Vd@TB>J(|h2t9gu>IigcCa`;h+vn8_0f literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_crossover_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58be5ebd7a6d798746e2ee3b2fac80cf9d2cc009 GIT binary patch literal 12063 zcmbt)bx>P>pLHlLw9r6{7j4l3MT-;*Zbe(%rATmhFIF6iyA>@`yjUp3J&@uqf#B}8 zx4(UMXaCt}-ktZ(B$=CJZgRhJKIe1J2~$>-24j(8fj}Uztc=7*5D0Avc)Wc40C;Cr zpVt+5L38>jEe5I>Cf@{39-50Ph=M>>G1xaokAU+h_A**dAP`Q+-v?TcU9kxW#9AvW zA*$-GzdLVdtuyJvdyrotp0W|9lB zn82S@234Ym65fPl9U{bVsCl)z+v}Gu=q9fI)H)&z=C7$SzKfKY8J$lDPOArMhts|v zL9m+b=BZ!Rjyv5Q9_fEQ|4NP9*DYzQF#mpfzrhMF+gyF z2V5Zk!e=>XAg*8#7?i{KzkJm->cZI2p8W?&a$nhzhrDT5VckGZh}LKA08n|vPL<02 z7c3B6AZV9#VPR=b_s1l2ycY791O$Kd&-K~!!&z4%0uI>^m9)1TChFc0?xsEUB*qYD z_V$w7dSW54)TaOoc8(d!JgRy$@W~hvm}_&t_Bi!DL|HJpe8Y=(cWwo)#I@0tK-T9@ z>ZN}_@ov^_YqO->Vr1|NgJn>O+dNDNQBT6R@g~)DfO13&F=cWrIAUnIp@=j*cimYm z99nRXE{ox+>`yZ4=NVDv1I8u@1BDL%H9Q^`5D@lVfRj;c@`%9Yu!)foKPmJGxfT+* zP0TVPvlm^#v(J)R`z^{Rg<>yEFxB(ZbbY_c(XOfA54wFv*c+-gr?30n61G1(6?jY*9G=tuLV;W@RNdC3u4i_3QK8pW z@EFh7+bX`6i@{0+rn0`3pjL{9+|ChryPH|0F<~qi$2h{!O}wFj`lK?>u~<@NTg}N< z;niP$6b6j;x3*w5$4wpS8*WPi_j2%Hh!v5+rJNDz&DZ>0uNrTm` z-0?}Q*%m6%jz7Evc($E(hbB$K;fELXy^$&&SQCPQ7|(L_!cHf0)R?a3DNPE8>b@Pl z?Ga-lJk;FjHKOZW3^3%%T0g~DEsMxAu`F{*l1>^NTS$95>-fV*K+z82YnSwR=yx^a z!At@Ju%xw#T?x6jlt26uQTp=2HAJy3F)?z~B8t6)1a*)V-_&!_EW?pKaZEV9__7Tp zc@uy0YDLtek4DaHdM4R=ItktUpNZOyl7`;-*Iw+XX63wk2(?KW{s5jHHpLB7{|%+s zv5%9Wpky2)HFBr<{N=@sP@#nW)k=*_IWH)X^HrPBvvwCOq|vEtk`J`+?M}fI zHa?n8(eUJBW3OM;_;`G-fH2)-f`7zMM{l;nb4IzKTg9FvFqQbjUl)d&^vp9QiQM^~ zLw4coX2ZSUd4AaktB%Y*&2Lsez{1}9RUAq=wuxRnzISzObH3I*cmHD7+s7woHX(h~ zGecaX!Z+1Qaow<4%NrnxvQIf(B;in>O=3V{@s@%>D5#GQg#!8i6buX7SFP%Z>QG}BH1dqk7XeYx3n#Wg9GRw<#gafpQ0UlytA_` zJhG`E$CNodkY#3)4Y2-PyXg5If#AU*X#B8uguDDV@)H26tK`alT8#)` zhbZ@kwD$#B0=T062-@T-IOFmqb%`cUMoB3~9=g;Xh^c*R2uCj)PuOir#2p&h+hYyy zMT3Y9zfa2!AKV&h9*YX)|cFhR;C^f;2rfvzE2F>lkT z{^VpX)2x+!yDX6blY&4;pZ^_d|ND{sKi2}nC-B3rUrUCD9IWw--srp(@!vrp%fwQU zg826@C7j)6*ll9gp7!A<*E%L+w7>}4lBVZ(H)*WfxV_xjjZ4-)xlaMLsa^jJ?tG}3aB=NzJvzC;Fq+~MR5*Hh?w5VD-3B>Z@G|j8y&0uaRdrfowmx zZ477D*Yl(@iFtFdQ!dcXe{w4Fe#0RtRjrZGXpPHWIZzcC;}bd8#+DpEu|F3lXDY1} zkNn!Fq9k-$Zs)VTS(Ke*vBw~M*{1PpiHgv4&rQSiam|9 zfIc5>Gxc&grl}!{>%~ps=Hc1f+v^X)fci%NU3;bFm6bKP?V^{vx|u0In`rRAdg#^f z(o4rsJ~O^N@5Fahq3c~4{83v=OBE+E*=wU-;BG=1DxI`4J`|Ji-8$iF{86)X8lP}A zL8YzW$HMZ?!v0cu?;mdWcRr2ZLcgwu-imGG=S=qpL`+VPokpN59$p%HT;{;^L(HyX zSnmhgdKD61wkfGQ>d^I)YxdbBzH~CAYf$?#7?e1t{)7_~_(1ZNhyb&Tzxp@^Mfz}q zIl0f;(vrKo(_2ASPed0ndLAOQp`p!-uJg)2sQ#AbY?mhJ#H)rQq~F}!+(htva%}AA?s}h% zjqMz+{RM;T>ajzUPuKf2D(#DYOSl!Y#2?@IeuwXU_qV@^r~EW3j|iYU{e)NhZm@G9 zqLLCj-}uU4XM>v+;?2c)3I%s^^0BqxVD#yw+_1MY|?9dpF6!}1`PZ_d`wFI#E@o0zqi%Y@Fj zY7~!7n~zDTlhFSz;Sp-V@P6XL5E|@eM;YVFclOCOidmxqP7>9xh~q1qnqnwAZGXwB zr5QT_G8A8y6mycs2{n4Bi)0e^@H^}xmc*+bXi*gL8?(0{eo1U<14o!PGo_3#Q1ZDc zo>j3BYrDa^n;|4>6vFUm0cF6Bu7 z6#+^kGYfC54Y_NLIUTl*R$i_s?lL)9gELB?&1apHnBQH31t7QoXg3Ehuap?!rVZ~~ zaY{(-TopzlwekC5%9T9ar=*3}U(|8_WK#9;tp_` z^cVSvKPxA{z9#v-I1GowKY$A{1H+Yxa=ZdRb*3CKNp#N%kcR#&joy#M*Jdm{BAd+mxd`<>KqgO5%0Lm$e)(sWO94SKguu}_iCwtPJJEk#qZvfm| z8PxpbRL12Y;}PlV?kwHbfJ3?!6#DB~K1kWJ3lmDI%95)tVVIufde~KBkH5diG11Ct z_oU;n%LBqPFgN#YaW2nC6PUn_ESkzz`uO)@XHlys3FM%h&Tw3KnW;FJa82ys@6&fN zzovEgrgWLBn=!YyjM9SX6y%nPUuZ9+^-5l4&D6DmkN?y#a}hPj{|DZ)pjKvnZ9DLxAxII)S81$1t)#y4IA4)0hil8 zzSqTgS9az)SGBVAkV=_&)$tF(BjP7M)1(=#t*z6uxvj0Y^UOEVN$~n?rQ0EXpC9@z z3k%Qh>su!28p|KA(0|fZWn^&hYWV5Z3|bjueh>?GuprHknIM{1G{Whs4-3pQ?{8mf zZ}sBTB5KO?OT1okb*(lFA4oRk6pub?bcqmZg~6=L$+?8bU9i}+`SuoCnGpq{^f=~p zLosReI0~ch=Qk!?vM7GE2Zp~N zJ??L6YLcO)M#Rc;ofFT&Ugacqi~`&0_wUa|DR?2JA5Huf=j$_b@jjg;N22`Fe#NHX zOiWBIQrj)RAT?$XdMpC^T*_0pO{}1|TVXI*6t8=jF_Sai2+U4-jk2?7MRl$Yx|SB% zv;763cYgY;v+y5i&uz+vl_3CAr3$uzSJl}J_}}V{{_Yur4<#~doSmP0d3tV*=I!Rx zB}PW~n}U=@)%+*if88O9WE}#xKiz;q#g9$VX7~;L4(C(G8(pIYhl%DmUdG9Mu?i$< z$Ketk*I0Ykvrw`!_hrcga;u_W}s7&ph)x z`~pwPZ%8{N$iMcirlzF)dKy#@rQO}8*%FX=M%y@ zNO}5K`z9BQkwZE8Qc(97W{uwF{r+!Er>AdDjt6RDWp%5Gk}KQ0{*347j7b$D!chJJ zal7xAcN?Y`H?lXLxY+lShec3Bk@iArXlbY3SxmNhlXzP@CJn`{SEcfwnY#Tee1(<1 zBM==-qg+=nLDK+EY8;TQTlS~DBl?}5ZUiw%{DvrBpu|m0HTuL5pgmbpMWWz$udRb5 zRf`l&h7Ve3qKn3xBC!qvxZ~apz+B`g6V-6e~B46=2TC$JMz_~@CE^Y1beC3WmkDxZq(}c8m zVLQ9Kbqx)x1Y=LYL-_bxv%C*uLf^2(lkuA1<(vW74?yU|knPywm=I6T{dVydJx*j> zT(V*8Epz6X>t{-oatFW~SdJh5&^MSoON-`4MS)%ABq@jbS5|(uNigh#Kpx7Io$cmp zXP)WmnkKBS>U$qkGwA|A*W10&#hf)JklyGB6NaKA^ItwNIz&@b88b3S!5M>-NzaWf zmtv+skY%sI+xR&O=L#l;5(22gEA%yBQxhu_`z zmee-A*LN3n-3)xncI=BUMW?IczMSLCAwk ze*6t-CdXB=&iH(zQ&D-jLg9Nh7)c5>O%RVQ-Nc5^0~;lk-ocdB_fG4BBZ-PM zdCP}PZ{!wl_uP8AyQ3+Ewyw}*Tm($Ggr%d&h%PVuDWWa3wR2WGFX6WKqvI4Gvm^(#X+REy)T~AgCsb4WbmoiXclFvYS4NSt)yzu z?{L&|N9gJ4X)O~AV(VwV_xqx6m$|`}rC~HMy28U~mIDasCxt>j7)#4v1ow8GUK^|~ zo2A%S-PomA_Bp}8?AcUg;+z`W*?H5Hu>NujYPuKrTB=^0ITTEqW;gfKVS9ol6=PEQ z1Y7odM_IquZC)_}8R6F0N1ebzDhKVCLXxTo=W7oQgIfT^$4$scO^#y2nW#Kb zH}OpHo175TQ{*bpihs}yR9wgryYeV_M?^@tRZ2axuPw)Q5@Y2qXnhuV?9oqY}vNV@+)Es4Y@L9P*MXKxPWv??yuywS@k4#%rnnJ~z= zypc9dKnT$)ec)^z1;!NOofuNlHy}0&oV6&2W!)Ayq-x|XuB$NT0{cXp7SH2kRNA2@ z-0B}1cl?u7%^~hbU80`Dds@v679QbKUvY8t8Qz>yI=m-WvcAVdyr!h38P%Y9vYkaz zs;A`#qg>tjdMyz(d-AJ}Z&+9)^FP$uP35(jG}sLw`_nQB+e%_LFAi5v-bOm`>HcjA zjyo6B#zMvC?(C6R<-&-qxBOFlo7*%aLPcFZ)Eymf-lo_HkpU~3H8lP8Q@C1jYv!$7 zy`w*iHbuUqgc6(cyAF14c~SaE$QHdM2GljZK8h)ITt}C%bM9_f!lkT8T3@TYjM%`$ zkHfGG{I73$cwuo**hCWchA%M-|J9skcPPHTEq2pfNi_f>i{;L{iMs z4;fyJE2-gQZkr`z^}%2j#Y2X&O}QI8X{t}_=(-1r9?_-kFynw#8e7`K*uiQFf4e7q z#Dz;$uzg}=mjkjt5h&8ry2sv=TpU6v>cXF>PjXVnrM$eZQ{S3zeb_Db?SJ5GXCHZx zE0($@lXrzLBz5jky<=z-bvwRAl%-){%6-LUhrg zF`!gKoeN)4;=2pvn)fs1y##dXKL&36b{tXG|de?&H25FC>qHWV8B-n{)_F#n`Rr6zFf`Y<7#r( z-G{3?Y__qFi2qh0puXUT1<8xoeVB;I-)fq6adpiS_VYC}lPZ)H$J|r;&dPPN^sR@o z+z;r@Qfx^Ju$S*r8`eeq6v!rO*h-do& zPAb^JM^e82$+*nlRRwi5w*0;Gan;SFHKCVRqwtXqmsEbD_!kMyC4{$NXb8rc_-Ao5 z@yLPaVG=<9R6u}%y6FUjScMzQ70vU0Z!_{}7K!E?WBsIR{BrVr*Z@Aal4^5juf&X4 zM*Dsm3VU%v|FzwU?3r&t!N@T5knynwinEG2+#jK~;BL79}SaZQC(-w7OiE zhW7CxIlsUtJ5s*Z(ePxHNzEBpCJpeml7OA3isj@yD-p*gW&Rr_D~GYEFC34)$xl?v z1nKz+cqS-3EqwdwF+;86)WP*FgJK2>g^IN(W(v1GEj&fRv0ky<^^p@}{v%mZQ<~`4 z(|$q(xEnw;UeLsSne;+ko$1)Mp5E^J36ng90H%;*BK3c9{vpx_0X>VJ+iiDOmG@RA z5)~hF36RHA=dcYSmn{t?;nu2JS`DN^$0{-{Mmg*snUk({TxVC4oKvv|t4=|33L=8| zX%L9VUS#34ra`$)RdPSBLk+lVXtn`bfp#WrK>%t-NCZV+An{W7fE~#5wWYn_R1UmE!Oi~+9E3bZfG8M zcykPF4nGhvpV!$Au!-38nrIQqgnM(1PReyj$;rr%zDY?*0QLB%O>o_t7dUXA5^l05 zIp1GQmh*(~E^Ymlp6gU37B9MaQRkVycc%Qpfd0&E;R{{KQ~Tj9qsIt%Fu2BWuR)4DOHlrppLJ%BN+Qc zK1D%SISRFpb*q4^0f`regkU&G>J6%(sR6wH%*DB~tdUU+u@%xIzD-v4QA?l`ckGow zH%d&tQQ0bVhn@WjIt~yneI426kD5rrtt-zL`BtGMj>WmT+UU+hJo3mPfWx5j$Hlb3 zGh8IK%I%^t1dZOQbIm=lGj1_wW`a{V6CG*cf^Ry*OFeP%4hLWF^UV3jLhsgfv$LDTy+bvdXT^&JAPr1mAh8(xa88mV$O|ct)asuPcl~)%P1b^4A8~ z+TMJPeN^tX(A<-!QR)}&Y4xrMOGDN}0ManHJpUhauOJs!;Dz#C;dIZ4U6Ob}1(DxK}I;RFV z*nNpd+LI(g?W2G`R+`Gk+1*{UP*h{vys1_IKbNyeqU)g`VM{#m`>9S>}@rJ{3->Rs&>}!9`n8H%f0ZuO$VbMqfz!?(mZgj zqiX2UNXic<7qK~aA^XE7-9+cxyg5z>7wHN|=cyNJSmy_?d^pY~<7^Q^YmlEkF;veS z+27K{)2UDVZO~imCe%|0L)MFu%%47YDr-6HCgaQmo2fbg5T$A?mH218vuZEVV<55f zVnzFyc9wIKVOiBHj7X4DeaKl$z<(5~GEOr!{T!@v@(pv=X^LnvuxkAmI~^wv#)OH-At+1rLZu4_83zalH*2j2*D99nsMlKhW;9cc zYF5l17qP7h{#&a5?RrQ6CQdnx&s{Mox0>=;o#unGjV+uY;33^o>0|Pb~aSvd$M?#3FCuGZT zLs6{`x5l34;ChykJF?GuY&aa1O6(*F7QxY!rb1NKDA%wT$xE4k4WNu%?~Ft);o5@; zyA{L0L-r~waX=4ni-3&f+6deA8fuVSBD4%Fe}^)gV%c`_%<$f<;E2@m z@JxX__nLW0EvFitHZU+S?AxWJEqz}_;SA2@TDEufY6liFZ(eWh>?By!g@kDCYo}M_ z7vH@@{J09F&g*=!F*f#9K0W83zwq7?p5gLwzdssd9)WPWySYqFeUYj@FptjA2*}rp zp5%h}H^(P-sccgs5Q0b0A%MFiS(?c^Xq@cMj{D4>JB`G_AdR}%A)(V{*n7nKR8(q zQ;&9AM20cZ4x3n6V(HC&Oo>Qwe4HP%g@JZ;5KU#?P^`8OcF#*v4QFMY!2_#&|87fm z1~BJDaavLQ$M8phl)%wMDoOoDrmns^AjmSbhXyl93{*WjGsDl%A080zyjltp5)hc3 zoJ^LXH6i5$gwV872zH(?azKZw{4)@cFoXXMS znGa`7|I$nL1g=)-*OkJC?2u;vwTrt%eHPgIlht7W% zp!3B^`6Og4$m_w$(UGH7DjOO%*AJaPs142gSt^uLZ|Yl;(WqR^?-kMDE%0=$Q+Ljm zvesUsjOL4#ko|_m^(Rq!O%ft6NK$p?y;BE-_Qjwq@N32_gw ztKV=?NQo}{RWamQP6U8$w&@c$6Dd((9z|szA*)!ld?PG?0K)roaUY`c^kDLP3yA}s zc&jfFY56@J2=4tZ;%NitwyN{GN}s5^(S;ImWq-SoB~xc~h4gF!2QrGdhg2i#0sp^*g}ie3Db-sPrA?#J0Wh1wWuJ7AsEBan%2*R9DTaK%;t>C4Tv2G`Z56Nh6rCQ1x_0H-L{@DtbQ-} zC^%O3*}$VCjz$^+1PBKHi3~tjl$TK-Jj^U_yjGqxmQXtn#DoCqVIN!KfBCHGUTQgE z9oyT~%a0Z$Y3iTR>%mkhrj6qFhO^CYr=B`rQr(HNY6RI{jy}VAp&HCNnNzY&jQLPY zy08wpW(;UQF+yi4gFbkAG!1I~V`J@r{Te=!A47SA5bjGP{HEi}6(nw^^v~Q}j^(#E z&e;GFvDlc?QGB}t=eqAT$gS3YH`XR!7cw0Ow=|fx1MHM*y0^Y$jbN< zDM?`PG%}R;lBn~=Ji{64%D@(1Uv7f%9mxVdnt0w`u z-z{N3I0qQGdF-PP4>=hv*bs zC5tXL%-@pRWUX1<%pQA3Q6P$>e4hg5jGoI`L76wIrrYC5*nV+DF*7x5{WIIG9_iP8 zs*v^Kor&z*_oEloxrgZ4mJfE444z$W@1Ceo7-WRIM)mH0y&+NL8EJm=u!NCnRfm6q zfN1dp@rRS=E5=sL^AwO&`zM6R)m@51yUq!$1^4P@Q_>+nr=UI~7^C(#gi&bsH>#?y*s-3~` zlg<)mrWvW8hO{Q6HuKqss(Nks{%GN7VSmFVzs%7|L}X*}bL|h8KSCd`F4OZS;udVt zbgGY0xlIOBsv$plhs>RV5kVohIg|YBij8IEN)!o7im$27UuT!*PTS}26un!6F?00i zcmvKppZKLJ+0!XpP!7#M&usro;_&|`yMiQ0r<5OF!RCR!(Aq!~%(yVlNhvaC;uP*G zImLbY!1?*vxh(DPJ32f^FmyB3JgcN8&uWc_Me}p%{vTaBdIRna(a;-EAY&z#%Q3yj zrK#gRMCWdPk?#J?ZVmMTwrr2mFcKWxXxXPs-;Tf}l9_aUCx2tDfBlE2{)7CntQA2n zAuQb4&8@PGHaUK_yvz%w`L+lvXpXg7 ztCm&sHRP&-!4#qXh1sg_GD2~2A*YO2w~Dt`(05bwi8{v({|Wi2&-wrbml_~z>zucX z?ms>Fnj?jD6(GT|*g4|`Yy+?Pj8OR(eC(BmoUT8`CwnQX&&_?DJ$gr)6X#stm7IUo zE%b|0>sD`yH7Myve|7)1JU_Hw^V5QjV>$ALuA{;_QFjInJx!><`i9n7oV-a(Q&r4K zW_oJFA@T$>9ntNpQmGP$8%Ynfm%nLhe21bIAp9kuCXInmFKUVeDk3T`{9GUs^8Y{X4~^(666}!7R)CC#Uj=E zxcTG~C!R$`IVP%crR@g4&VSviV5~Q+_k<5Oey*)1QiDw-7{acGg*HQr7l&=8rE!On zc5L725l+H3OH~?a>hQi)9QttbEyXu&b2_goV_d zq^Pc}8q7Rplnj%~KN5tm+13Y2QZXhw_O*`eVA3`AYsS~8>ZC~?BC`8;#uqABuk-B^ zoivEfLN^ak%shQmp@T$rfvi+1Ou-RB!B-o8^!fQ~fw)tSK0=qXZFGL88r~htB+24a zr(a<|kynbAWaXcFw}q#bOl(-;CVQe~Gm7*nwah~CL&sW`94{h$s=v$X-1KW~P5<3P z83IU!iY4OwiI#S;Qmd|aj%&SazK7VUOO#$aRhYPxy`8z=h#3_sSt4b3M7uJLg2O(@5X5oAh!ryO`+`M8iA z@gI!Gj{`Rl$KMxHk8Qp&2*heBBQB!qs&}w} z=BYZ>#Cn|OB8p9pgcQ_?ghKf7jdG0P;JMS?i)pD3l+}@S<7#zk@6i#2jF}lf-SHq1 zycFMXBgx@48sXlrq(c{Fg?`3yZ{`v`#ie;d74njLL|9sMG4^)JqbzCPjfNvhfWzwI zu36q*h}Of@#MHae^q^`6)d~XH-`RN$0{L>Vv9THSM3SWlcyP}H`~96?R)%R71_HHG z7;}O^Ezx5j(4D9x3g{S(2p!bQ`rq7azZzR+QRzZtSI}0sZ=-jSR60SPf+hn_plvF+ z{rq@$KEK-z~c(H-LL1L#bx>Z66g!)qTd)tKMQOh+{I3*#@{Gm&PN?M>}z+A>esEt6uW+t zN;H3K@oM4h1eGYJ( zI{ig?)3{RLEQQsF?qr5~uSgw{DU&UXg?Lwp#Jt;0Hj_wxA)72??k25B2KyPI&XnB& zdB`3LpCOIO^Pdk|@+J+s3&g@NiO|Wjj?VTSDTz?&d0*4F?Cg1}m0A~?GAsM1vq+4@ zOc)od1wxI@S)n7JYU;kpcHWjpA66Ed!yG(2gs?Y|$fRk&4|tCC#vG*;W;#5_a+URg^z}1m08BsMW2#CF+(gk*OyEU%st#y_~NBV zW(j-^{j95a1eWTPycg0E$ya&Kt> z%2)(qv76?&pqV>-+&Fo*P^`Flu;j=0;DRnz6dSl`t(!1WGIuLlulaF$>gYIc z`59>eOJQ*+1F?r@+`tNb0DLu9mCI>7*}5mI%RP9O*2Y0L_LrX=y~X{<_dgkuX~T0u z2joeKrFDoleLEjSLVa-Ejm3O$Q}~|}V%$jiHNeU)FNR9b@Vu4e^o14jr&;{R0fGc$4Zh~WPPq!9Ou0Y*;po8dSia4)0dAyVY z2CIobm~XZ-$_*do9}@@%f#%&z}H@L5XhSniUhg}2!94z zCSWK2n71OABp=$g|C>m=Pxp*Y<=hpEee@FJBaO4W&G5$6sz8A{cSG&`p}YMC3tdwl zo_cK5Y}Ncu(>orm-b?Dkm7B6>AKP^_mwD|A>4J7(l5(kHvQ>V4+tEL%5ks;j{ER13|( zp1Dh4HGcjy^RBpD?YFssbxS;nLrII`d^-UfgP-kfA&qbqYfU6L4p|@X}y$v zGGRCsdb+5jpHyd^LSW$-ZoJ_wGl{A`Iaoiryr0jtLiJ$y6G4j6fo&gc0XB(4NMev9 zH9ZMUSKv=<31s#7NhWNb3ER*4Ve$>*{l6xf->E3OFN+S1()ms}5(s@0?|-)WWB7c| zjE!26_Y04G;>0d@>-*@j<=1k-eYg=QVzB;q^X4JuTQzW_6wC4Gd$AS+i=61(Wwp}U zaDloy(Ye~O$r$A~k_};wd7<@ZyvmSKbxlEX$iSZeT2n6s!E3xa`j{{67X+*sadwv$ z&<8ohvFcJy{UV{DZYADOn?t=J&Oig!o8<4RQ+gs+ZtaZ0HU1&DL5B=q1)R(-mo8um zdxo8NDXKGBg7h&k{8?16lZZB?S&jai=2d^C+5vay>ymsqzPcQgCPPutA7VFk62-68 zP4E~Rre!+h8g#?(gp@iH@#zxnc}MDEJq$W!;cKi2o(+^*Bp?#~Krp4M*;tQj7w4+Q zybUMSw)c$EHkDCC#5sSMU$tlKF2ZnGvw4HrFf6st>|iCx(`{mOnM*V zO@&@@_HVO4Uzj1@n#}=li`u?d%#folnKG=N9@O{9;U}2sIMlrnXq%lWnw6x#9~zL} zeF^tDPMxKFe_BNtS{d*r2C-?6{rays6hq9Okj-0LQ)VAX>z-hZE%U;iKp;C*YcdcB z2y6dsRz!ZE8{-6b8OYq8Mh~?gM*@lJz3EnE2T#JJIi~SQp6tP;r)BoBMnND{?-6rd z=jPOo)lS#MUUJZv58te!xRbPs{aUqY_bE&jd_cZfxcO`k@_1G}XiuHxNq|gxipxU` z6T026?Ccb;&bBZxF!1y9gGfw>!eFkVRdnp^rwFSu6Glt4+0@F?_QdKLCSo_W;r{;q zdE1t>5_4h!F-mqhh2S_`#r%saILy)RvBv2$IzqyFPE|=SN0F!i8y$qjcb7i4`a5O% z!mJ!gYY?KTr1_PS&lv=I^|GJWY-~D9fKplcV-{jU;8)8wwogFX)q`eX0U>(hZ_tQQ`gAPwIk1gp zn|hr~>*qNf;M6%anf~?Ky>la5X)=DP4Cw&~qvo$xu%F}-tWRl3UKGNlJ%bu=Gp~j3b z>Ur3FNWd5R1MMP;oue%g{%V2Aj(BP8n0a=QLLZ5lVSc-sG9X1VZxMfh^#s*0)ChHh zcLK-an>CpdAi1H#h9m!KZhNPF4NBVFo0)m<^C4ULB$p z{4-aYT_Uwl+=;}ANrXNKFM{w<({)PVf3#!Pe)-P*ZI|NUP%{6CqZLor*~+tm=P!iK zf#epvoA>y^laif^iG}aGno)LpMsJe+JbLVU6A}R#QS-wOI1P~sU;WKY)5H0L-_|S! zs02V)+wm?@6D^p(1xpOqu8p}7F z`{!ogv|8dib8cuAM5RD!5%~eW=Nqy+rV?vNk2FWCckkNAH9}}Q)^4?dJ}+b$!-H&| zxWs`_Rf<(^jKwAKuUIgAo5H}IKtm9kf?8SF&s>M@J&ssxxEEvF2Q*HC>lIC4_G$5W z_WbPgfS?6E3x8JQ^lM>{yNC2ilP$A7*i+q#QA75Zv_@55dSwWBa<&NlEvZEjW$TFz zMr~js3!GWn!!a>tZ$leVo%Nn7v*{LaP~tOmG@YhCW6LqKTseF6ZxxTrb%^>fTxZ4v z1+$dzoupo?xl=s7>b1p-XHQG*kV;ThC4o(YWTr$^Un`WL!8Y%R@4r}ipKv$e-}9^EvGrw4euph!@16nQs7TIu5DMZr0EMq?sddgCm0&~k^*b~)s{;t22ZnMsiOWsXAFlA0@ZN{7kb zYlaW=NLY}`esf(^5-%~s-@3H0W7mFKc+>StO`MwQ(0cW}Unt0MVCLp~H+8Y|F%=!=yImx3w4Hvs}zP@z&#fH>IC}0OCcPW^?d2(6=Wa zfL@SWnsCaDn3armrs)kY3pL$u&Mewy1^`Z%|DE3U)l)!=(|t&4wl~?;hg86}-l`6o zFRRbdF%OwFY==Eo%!?jVKc5}C3zfTbu@_ZF|*^$#?G;}Yh_|FyucX8hA6BYfUM zPe^nAH2CmKpeb%zmWaV`)tJ*ngy6@rbM`l#*-u0FJJ7Aq{30n@Ii}d_H3enNe=|qS z=qDC`@O$x1qCniuacM|pYa3@SH(DILOQHOA;q887uHpe`C)DFO?u83et>rzn#fklo=NK769_4v! zvO@Q8r;C#Nqq0#U%qy6hWZo8`mh9=NtiR3)BdoTQ^jS(R;ugb=@tv3Ugm9I( zAKV7lx_tmRf#{Cgn`E9YyHz8%;!N$1?T3oFh4X8Pj9_3u<|k&yrZTu(sHQ09XtDe| z*_6taxXbR4{(P~eC?$SQ?v^mtt(;1>u4cW^b^m-sLMpJ#ds(ac<=Y*LwT=$!-7(WY z%gu;NuoTNLCy5J0n z{!PPG$!5}Xvp(%sB_Q=vu+{~7Z*JoN5n-nT((?z6z95gbYrJQk(WK|cWGl)!JEEPo zXbgn?;`GHBE}v?YX-X?PQ$dFIRk*=V_5v5O_hU=33olw*CP&QC=!?c0I*#6b&L?Mf z4sIqO%a*dR?>073wq0=edL1SWL_{ujt^Ea&PCgE8@q1q3Vrp>$BGbTqlO@X^vF?C= z&z$@petlI=@EZSa)zg;I=tGji(69Zfi+=-yoaWTf;Om?z%n<}}expv=R(MjJn>C<(i(L@mxjCQr>tKh@A;+ zV;wNYO?DM+;tR3OBu`?NmMzq8z3sjMEh$k#Cpfe%VK&b7`w^!(%iqg$8LWQn@tWnF z$OR=AGe^umIhci3-FMK+hVtHY-rA)1bAPiPR3xLLbCN_nxiSCk)C#}r8i}4!i(8U5#w48GvG@hkIrJCr<0F_Z3gMME7!tP0bU zWYl7Mo33Lzs~X5ABxyaf)P?akA1AOX7^Jketi!zj%pEcJC5jeJ!)yfSX_i1=Cfg&) z__;kUAl2ONaibgbT{h~`|EvQpcw8>u#K*_;krl3HPdooXJF31we}se(f<%_rO3O=jo;sC+h`?!e%@o(+c@Ei_Vy52>>QCxz)b7--DDnS{P3M4w-v2 z+AVGIaoPR7A+v@9;DQu(UWMiyHH-b1WPyruvd`6vN~i_sDiQMoYM<~n!0w-xR+|AY zRuZP8krZ-2;)38D8^|gT#?}?^r|Z}5tLZu#y8@Wes@hA};Y@Vk`az72RK zW%8q$xdr%Von_QdL`hhGGE93SVpe>0yn9{rvS>A{6k6mnpDwA@`eN*N_Lj+C-<(vZ z>%u@)%`(M7gFBtw-;_X4*;|iQAyLkG@uFnrdvD6(dG_zm&hC;7^>wT16D@9wPJD`s zcJ|9#s7}htOv`DQMYV$%CLwzoabOz#K4fpZ+N=mStU{CRC0sU#2& zNvsO}3$droDci6fo2i_Gz4iC8?w4B>C+-U9tTn0}1HbBB%x(uKCLROlFS$BsgUTO3 z7=1Ykr=WA;nqqg8hp)f)3tCtR&P(h-YB`duk(-AU$!ZQ)=1$lQKlO-*RDx{1cDn&< zp1xR|N@<>bcr96jlmH0jg}3m|-QkkLSUX3cCLtwXurW;j>PtuVcuyJP_UooD8r_7{ z{$JdbQE`?fCleuu(?*ZCxZXXU<&0i1@vQBsU-PM!n;1~(G^gY#GlyG$&#YP{_d3CG zh{c9RaaWZw@%r!JwEegwDj{4O*3eRp2iM{l-QA)#1py@mw1%^(W{&p7*FP#f);`W6 zfK`y`-j~IZv9j=g!wJcRbtjk%IMKyTyNg8<&g_I$B){)&>F<;ghPnMxV@WIhi1f5A zGJWVg3f32)4tR?u_$whDc3b~#_;k*TDan4L0&Hf*4&>(J&7dXaPe3tH3&2MRj(P8D zc;9?_Gn?(OTDtjPs#Z4yifF{lNMonzt2i9~p!ZZBmK$*l79|klQ^i$bs`ue7@GKtRE8du5h z1A9sn6yKHtS_703=jFfARY{G1a8j?J-XjB2J`6z_TtETYAN&8 zY8f$H#|v>JBj1!Sk=1+VsFTAXI--+4ncMhmze==lscd(Y za4WANGi6JBvX7Edfvoze*h~Zo|6b5lTtuX;GX!TY@Xgrl><6zK$Lduh)`R@V%?6CU z{1}0z&6dgZ>pNHNjjTU;!!Bet=CMB8%#&06cAJJ#cQ|BtQ) zUrSv)JtxDWbSYjBll#%?*4j~S>jgpIhZ;tPMcuT?tJHf8Nh#av zZ9Jzu^~cWm8HW++e)b|Yl3|DbCRDb7nN`L5-9hpbx1_f;l6jwq3gcDK)2e5|i#?r^ z5Vx<*Lh~ATnCIKCr>1q|g8Jox!*ni>_y6Xt=Lw&q)Si-&5(#{drwJlfaH_zQ@r10~ zlFLJDLciY5g*D}|I#=R}Wa=*JFyqtu(+By};f~r0-U?J_OZ1w%j0U;b&%H#o(rP~1 zEC671W|XHJfo=3y;b$SJyd*R_{cvyi`NQBg0MhoB3M-$nfDO`blyXXO?m5f(j0o|VueXG;+a z*lDeL%f8wnp9vKdEb?4^FD#}!x9fAGgISi&)I^RMDuSp?j2s+OSbmxx11VyiLw~6_ z@Dx*LKn?Wd+wL&nRQ596xP|h6VZ;K7e$8sAc!V+|lo{&W`>ER!3CA-keIfc-aeeR@ z?(~#1%5oGa?Dr^Spiy==g*CfV9bfsm%)>(u#`@7TVfdIC0q~4@KI9krgk0SOT`=Oa zz?wbG46G41rUr1$s-6HQ9rnpM_$irA*OoG`?oUh%<_ym@!X~aLayc=1hf^8ATnUN#4 zasbfguMEi3nKPvC^jic}9nO%aiZRn_&%(x8Ur)422ZaAbWT91_87?(Y5(*K&5kAzg zo2qUn!CA{5^b=Drs{VI&dh)so!8iWLJ{ilGLm{1vP6ikH-%2W)7{mm$Jb-rQ9d6}{su=(YGQ6h>Nt>)91y3$W=#+*Kw{89Z z+)$N6U|2o+;iA(BN?%pdvJRimQPb&I^z#Wtz=e7|19duJ zcElYHY*1*snGTuH06Gr(WBNy_3_=1D`?|_U9c@Lwg38m;>q|!Y9&J94+aa88$vTb{ zD!ux`OuwS3X#-McUkuO-T2(7=b{?l52Q&aj)_U5@?!sMVw+g8V^yv8?mTwS$6T4HZ z|KjvRma_+^@UL1&nfzj09|fZ;%7jq}nH|H$-mkjvCjM3$jeZyA2PalC4GjVM56Z6h zPLv9}O{4RSOqx`U*SYV#8{zXooX7r=vk-X_xkc*_PKT$klb1yfWm6ZP7o9T)V;{_V zxs2gA?=rVW2%7KJbbf_~V&{H(ZD|!ypfZQQG&+kT%XYt`UeaAJm!~~P!NI`(iSX4P z31Kv=7)1isdB*i0IN3z=usL9`pzq?|&7;2|IHRyKMRSYSU%$>W)b^Cm)wk&XddAr% ztgt91DdwBR&*IqFQ84dw)hwxEAsoZ z5YRR3?sjfk9H&;z@v-o=6OXc|YMo&t_-b>nt1(cwtA{WX8xZR?POf+Uop|%qwDNiR z2euEQ2-@tFB)k*(0eC>k3*?0un-R4@Jg;Kr=4|@n6bAR<&dwLCEleNJakbBphJ>;h z9A;K)Lr-(-_Wu#^d9*F~WM0CTOE_lpQZp{Q-4l z&FM8xpq?x4rNK)vFLh{POUUnEn%j;_m0`hHdY(!em4PKUzMC8fn>Ts>wY_=XafJt( z2Yxirh#V_<-nf3kGBL20yIcxu(z9W%iyBXvs^xEgBJP*SjQCSSJ|z+06LqMWJKcy@ zi&H_VW4FppP&Ybda62I;;z1ZM&-yKJ@$#%+2QQ`b6$yuTdvZ%T zp1#H};ZK%k&v2lu_nyOFj6Z<8*AA~V2fstA#RRgV$Jpak@f_`@N(~H*=wH?uq6K}B zGC+Msgiep!(QT~&C>fa73B$b31`Tr7#oq0_1*VWl=rN$!q-Y7W^qwe6&g-K`TD3{pUe%uch^$e+oP1Q7 z>-v7kV|l@hvZZ*zEA^wspm!3Wj}jWwDV13==h>w^MZN7!_miOWABtmL3THB zuyHp0dH&U@o+4!(oKAy1S^o3(p=aRYn5QIvH_gtT{#EfkN9;lC-h!tS9Pxdtx7un1{y56o0s(*4@^vkPo?TEz*x7jh2R z2^j0KUm;ycQw{~g18StBEIpy`!PpI#wq*NtRAr&MOcfbX4>b+zV12ag8cu-_)jU%f zG9t3rla5(!@7+xTw7>F|lhhW|vYH`sM{pJwV@&L}?%cE;Iy>CD^_yHjEA5r9cU=GF zAF??d))aJkBgBF-+SN|Ay*O^D{P+j+i~wqK8A}X|G(=*@9@a;~oe`WLH=CW{?+u-1 z6>2?`DmK{bf(t5ltSX8I){zMlkY2-VElvicHueA~nP8`JI%{kI+-mNC{46%nL5qNxn@0oeWN#ZA0?#0Di4E2 zHf`iNm!bZ9g4fi7|J%4&fd$^l_He10vxfaM7J06YQpMi_L zq(tVecm>WM!_BSt`8DU8y`CBp|6cc!+*3aL$>-oMSo9?26SF&JkE$gDV?Rzw$ui44 z)O6wFN}bQ!rsHdWeX!NTZ?gRFG46x+d);{6geliT^aZz3>Pa4a#b)V4X$1U>^u~;! z4&}AftjWZWlMhVi&2r=$@ym|Ir*S`sVT_E7PJE?W;vgN=BO5tHJZs|IuS+#AmC~9A zMw0O0-3-pKlFxBc5k%6bh3FB7eC6)it}_x2s-8XBcqm3Er6(^ls-=o1%lytmO&f^{ zJH|(nOZYZM90I=u;IJZ=*9R-N+Hq(lb-4UWq`~LMC+d}WT2)Of^ryRf&u%^Lg?7X6 z0QB&g6*@&_>gAM6a&B%6?>29M0SS}LL=n@uYM{t~&B)N!`@>iF`h`~d>E;V|7Zxw# zXA+f~H!}=W7Kqxshe0*ZSFF0=S>dc^gt#0H!jpfL7OU^6Mnz)5{JGRI&K5?k#hMqb$t8} zs^#7()} z#kGu!DR95hRbQiRb+?>4kbfqjNTOO-uDXzJl#qd%Pa2n(R}?nkNi}boxPKImt7hd| za)C<=Lgn!eR(c$tEQv^>_y%VuAtxIqw-XOd-vQG-Uja_-KLGOx#G=HfBB`RRqNif1 z;yls)u*q6>x1>JL%?zc`vPUgBd;x@!Fa4c#m2X3Y_b` zY~;|isL#=|FomQ6_%%StX*98}#?S6~CuL8Cvh_LY0u{KYio?bhz^v&XK{WF7iz@K5 zOyV99(bXgU0kwZ!4n7v}0UW%1ne@j$cO52)k1BZo$?N$a$Udw@)`c1=bc|dT@*ogp zR8%-O7{VgQ@>}Nb_>S=tgaafTyha6;@3w4|@3NqC?fAe3k3q&7pXA>(;wkE(>wUqc1ooPW~+<+tVg*9c$??tR@>K={y>g@K4sq3B+7JmI^Z=F0je63Gs z+L79>SJlT;2tSB0Q$6<0S?Fazz6{?3#96NUswSf1-!&q?Tx z-{i_#fS^MsraHppI@&~A$Dy$;xMkJ0Fd^P?ZcRUkhN<4#_k_dEI})Eg9k`Cx43vFb`sXVBX3PO-g4Ka0BR+#R|l)CYg5L ztp!&C_EOCJdX}VoHq%Ud!H|i$;uhtD%}OvIP0mr6yu69Ts#QKrR>$t)fH70mOTnZb zHwt5ol_5S3LnU3gkwYkLakndJD#dMpgEf>M`*|JdVMi!+;ZMg&`%ZlU#P|bkcNBd2 z*^M>=o&TUVK!_nuHK9q#`)P=iT$6~Wk=#5lwBJFtO$SWv^&})nX4?LGu<*|=Uhxs6 zTy!W)33o!nvOtK?s<3lu254cJG;EkIEtrU!)~ls|4vOLP3SH>Yl-#R8V=v0FG|*FW z_=-PoDaTZH;6mdbn({;~EpGmTtmasv z@|7mk+AAr#B04rG(UbooxqjrYG8;%&Ic-l4s-BdcXEL84b~D4WQ^ul`K>n5ODJekQ zI5lr8h?rDBE2zKnua$ON3ofpb66x*lFT|d`vsaZ^1blw-fE=OyfwPkIKIY)8e}8j# zQt4N zuPmkE;RIjXo|fs;`;;!9k|KZ!HK#QAeg7);d_3FbsZyLTzI6*V=!>8jVc!alHADtI zh@@CbZe&RY81=cix#dVwdMT-aBgTx2@!2QnVfz=M;W-jhNl*Kq0JPm2!mq!JT`#!$ zgNP!zGW(X_l+?c3X^x$S7JSA^0{FH+LAalz0>|dnJ*piq`xpi8A-Y&pRPEmN>%>4) z3bKG+%s~H{t3ra+7@-7Mr6l~zVeROJ*6AS4N9=sjKe~Z;QoVL`E}?lF%EtLmdnTS5@B z4%X;j!f+`tgtY`l}rs}`r{{KZ^{m+}~vnOjkL#7SKPc$Yr#Y`OGOwPs8=$s>WF!>C JOGUqY|6fwR`3L|2 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png b/img/docs/asgb/asgb_lpp3_sys27_rate_and_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..58b5750809575b0530d7692d7c1b5c702ef8c763 GIT binary patch literal 16959 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 LS*k?R#Q(nl-rGvw literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage1_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..098f755b46e2d5cb0f931e6386a32b481a31c364 GIT binary patch literal 28371 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�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 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png b/img/docs/asgb/asgb_lpp3_unisim_stage2_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4451ec6ff8212084a79b3d3d24c60fee3f0973 GIT binary patch literal 40488 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

    !6pc~wB4dJ(J_ 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ⅈs zDg0#^J|(5Stu3no0K=F;>MTUgE90EOhq&cD!-`L#GI2N=%{~*8vL|}_H1g04r8tzp zcbl*|y6@HBbLn^q-|bcbaml`XTpe4<)|tMJ+Aq>Zd`uSD81Wsj&(&ywy}Iks6#3t7 z9sjS7h5>U>QBiS|5J@c~_WRlaSJ}n|mpwN}`=~YDRt+#4yb{XHbas>WZg{7yoLLJO z+EFZ_UZ|B$PB_%PNiF*(81-QbQ%wB5q-S~ff3=|0b{Ms8hR9h+a1Zrm@ZDNFUzmNh zhD4OA$S|V*As#}t-dkCTP-FuGgT~+uRZ~bX8Vn6L2=iizokjnEUc`UMIvnh-lt}7D z-$BxSih>4DP1VGR>5ad0O_G-Zy_`l>lqab++Kp3W<+7*bT?~7!r&z-0c!Sm<#6^Qg ztYHv)uui#>2^cslp<-}#1rrw0z)r00D3=fM=XH4$M2_(Cvvw8jZ3&_=iReCWG#;vF^uA5^U{yZi(w5!voij5#}No&&A z&scB&MN^)4N|R-zcaU44@r8~7@?WRbN>;63AQ}x11BV?s;!OY!>RLLK zi!}pxep&?%S0L&%N4SFf_fv;}HanqQCZ3&B%5NXm@Ig4G!|SN`_k&qz-u8!;qhrq} z?qa$3Nv&aWcN^=LJiR)2SBE@+sG6Q*SSr6HHw&7_RsZl%Xuj)S#F%((v0k(bFR3pT z3V(O|NTr{ay7}#t5qsNBFkU7BDHMC!KBUJyz=#Ag&#gswrRq@xXiAZaG$)`zLR;Zo zv^@9#gX(vxQAatyL$Wuf?Va9ne!v!!fVjN;pqMtD`~AXPx83z?2eHEVtLh4Q90gwf zU1t-runySVDy2pR#oW2>T#(kxAXvL+L5bZQkQCEfF7pWa^x84<4f@R18%R%@o;Omc z{=m>vQwAf^l7zHULZWE&^7nlLPb`|-y1-QXORH1ehT2D>ByC?Y9gN4;s@pmuU|JK* zbk3G!T6t1pK+ASt8(kQQPz1t^h)AI#;CNK9vW)A>2f%<~ol<=^Nom`9zA@^S&>Q@< zvyVaMIE$ u>$Pq3V&|)9zVj{!I6;8@{VXgj?(u>}e$Pl;Cd?xMKY8glQuPuhA^!$q{~(S4 literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model.png b/img/docs/asgb/asgb_sys27a_unisim_model.png new file mode 100644 index 0000000000000000000000000000000000000000..f942625e938b079eb2ac6a5e498a39794099cde9 GIT binary patch literal 11965 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 SKPBu3fRenrT#d~8;Qs|v;%Juu literal 0 HcmV?d00001 diff --git a/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png b/img/docs/asgb/asgb_sys27a_unisim_model_filtered.png new file mode 100644 index 0000000000000000000000000000000000000000..92d47f95f5f79e8661815a25aee13d29278c75ba GIT binary patch literal 7718 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 B;4c6G literal 0 HcmV?d00001 diff --git a/img/docs/asgb/ecalc_generic_chart_normalized.png b/img/docs/asgb/ecalc_generic_chart_normalized.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec88ae6ae498faaf5224a7415f8bb720c491ae5 GIT binary patch literal 21903 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 literal 0 HcmV?d00001 diff --git a/img/docs/changed_rate_resampling.png b/img/docs/changed_rate_resampling.png new file mode 100644 index 0000000000000000000000000000000000000000..001279ea62cb0b290286ecc16b38ce1b3dbe6390 GIT binary patch literal 237031 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≷?Gu@&hmiW*naLh2w>J!Zn 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�T+RaHT_$QDCP}4Z_^s?z1jCyA| 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 F{0H{b<4^zq literal 0 HcmV?d00001 diff --git a/img/favicon.svg b/img/favicon.svg new file mode 100644 index 0000000000..f0f7816130 --- /dev/null +++ b/img/favicon.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/logo.svg b/img/logo.svg new file mode 100644 index 0000000000..4dd3cb7b62 --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_mountain.svg b/img/undraw_docusaurus_mountain.svg new file mode 100644 index 0000000000..af961c49a8 --- /dev/null +++ b/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ + + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_react.svg b/img/undraw_docusaurus_react.svg new file mode 100644 index 0000000000..94b5cf08f8 --- /dev/null +++ b/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_tree.svg b/img/undraw_docusaurus_tree.svg new file mode 100644 index 0000000000..d9161d3392 --- /dev/null +++ b/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000000..02581562dd --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + +eCalc™ Docs + + + + +

    + + \ No newline at end of file diff --git a/katex/fonts/KaTeX_AMS-Regular.ttf b/katex/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c6f9a5e7c03f9e64e9c7b4773a8e37ade8eaf406 GIT binary patch literal 63632 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_AMS-Regular.woff2 b/katex/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0acaaff03d4bb7606de02a827aeee338e5a86910 GIT binary patch literal 28076 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 G2<`xUL{2yW literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/katex/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f522294ff0f3f8c52dfdaef7ebfaa06ebfcfaabf GIT binary patch literal 12344 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 Mepdy)y#Y}F4=Hd9=l}o! literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/katex/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..75344a1f98e37e2c631e178065854c3a81fb842f GIT binary patch literal 6908 zcmV8Fb8N1fhQaGDMf{_aR5Q!Ty=u~ zF9)2+5IRGd_aY*eXu*h4iwC8kb*{C_QN)VA7RMQTu+u)>xr{eg*P|+Ht6ytXr+d(m zZ~p#e2L!$$0|$%oOtI@cwhS2;jT&TD-BQw*ROSFERP599O_J6$GcUwoCkE!d0F$=B3ebZj) z%u2tl(MPUHcVnr%0uq2j$ZD?mW>&vQa*^&_boaZ?MJ~Oeyzo++dtr6}Y?ubX02szi zP*4Emv9VMKu55x7Pupj&vGqTAnT&D>y#d1ekyijf!(aEQSqT*TC&1j-cL)Ens*}5? zPXgozu7BUTz|2A2s#l8S0Ji^=-i#RP8zmtu&neZRA0(Ii3yrZrSlxAws(Hqkb;`{* z>R>b_>h+hM-@KF)45>S=iBNAa{5HRC7)rg~bN2%<09URSqJ=Y{XKexK#T$p9aTxCW zfMVV)pb*Y6X;Za6?`mTJ+yNk09iWQdW&i=IJjein4Vw%ws6B*-E-71rPx9U-XsEPF zmm?rfMCvR9vKSm8 zq$9HmqSC~h)zlKsuL8;5bO!Ba-LHXeIRiMz`dc@Z)3MNyNr{1@gs@BI+wX*usD~DY zPbI0rltnBWa6U%^ibIti;Oq^dR0Nl(5D1CA$jm7K1rY25IClUJc5L*Dj!LVl}LP@DA-7)NFisBt(l7XuEUU)kCh);s~U%Lr_B4Qz@mcgX6JTs?GR zquI!~$-qH^+!ku^dIm1q5=7u|ekQMzc`M*b@!WE016~Afc1}oVh}5E{0vI?n|P+~7zu3sKt42i}YK>7#Vt>J#blPO4(ls}XZP(i&kVgM|renp|k zuM`>VpVR@eKX-~SBuLUgIrRYeMKe4Xhju*60=Zq?eJ{e>&aRqV9M2FA0O^;w21s}o zrk^+wvH>P1_M*uX718dVBO;=F7ZXsUtW_mc_Lfy0XYLTOG1DT;#>T{U+$K(n8qJs+ zU-rnl72oxW-<-Y!p>G*9hITXEAZQZb@wTX&1g52vWZZ;F&A{0J3h#omqk38k3uZt( zDz8rq0W{-PAelERFf2+PbrY9^k|7cjCUXWY6EPQ)BW+O;aJ5R~$vTnQ9j#J`stC9- z9&_n(D%j|02cht~kcj~r)ZONOgejuA)uJzvCZ7Ad#st(&+{AyUv&GoUSZ59}Y&6;o81%yY-c{dOdBeheh9b>eAvKUb2uq;Ac z1f*r^X9Ua-AiT{1F?D&Sf^wd8lg16fMcJUlf|?X09Th4*1zTb#{KHfWPChmR8h8S^Gvowg;Kj&N zTItVfHH&h zW_Ap`=D)vMNyU&NtN8i8u+ph1Skh8vN>25-WSLmb-Yig5!|r3;N1#VyI(RIHaSl&T zY9ANFc=#kzy0jQ_vQGnx_H_Z>A{Q`*c+`~DD+HpXV5k{)PzEl`d$y8APY7^BV#VMQ z6h*7EkJDIp(Z}kalQaqY0q=*kT5XnG!}6?e7;%Xd%wU%If-(((YL;F(pi2FYn^kmV zxL(1?J<4{rGQc9rxeu5R1*pg_G26GfcdBkhCgET zp9UC%7m?xl_tP5bzwmNbW%45qd)}WEv9qs3l*ydrJc`Gt7oz9kC_Ur5VS1c_TosFI zRa#C`^HAmhax4J*Cyv@yi3G6!r{qQ^DKONVhTH0R3s*)1%}1T%rpH<(feTxr#D;^qxpXBbQBfwRvHVap_k85D>8&}5 z;ytfkPFGl*3S%|*rwrT2i3s`3QZ8QO)?50ExWZgf zD-Kx7%J%~*G;oh99SgpoZJT*=mzq$~DRK#88K${>f;yfWY$A{+wldpf?clzq;M;gJ zp+s+yPOC*Ls1Ih<^ieJG}N z@t~-V_`hb}7Nbro+N!urzqw#1ZoWj)?T4lo%giLb>9Dd zg=pkByj>PpRO_J`BuCq<+>_T_dYlZ)$lmT&YE4;J-ecRcC~Bh}m3ngK>eyA*@?3hO zDAS5xPV`Kc_+cl~XGc%gx&ejoHnH}UFornXV1Squ7B6b*E=~_6Qs*5Dia(xHWOz%i zLtW6!ZZ6aVCF4@_CXCXRCI@_NSxBtjpQVh%?|^He!sZW?!?rv`UT0}2qsPKH4G!u+ zKIN;B54kRF+VO$SH{#0=Iq;_b5{ZUIzxt{==TT0C)?0ySR?e$}L_3IatmN6Ksa9U5Du$7~ErjlW#IaM76x> z9le1qqFy*M!Hd-wM_lqfX1(r=!sorLFGFuunypI9cGptzpmq; z6{iqo^uO?SQfdc=Kd0JiJ75D|%0FY_YQY>K! z9j4kSPT0~}NvP$iyfTb(O26P=%?gw6=( z#_Cs;R>aM4xzS7pSCj%pBdSJy!u8`bf1xu&`P;@mcd*4%Wai5$`rv+3b8Sghdq%P? z_0o5!_9bHl4TOb|(7ms|302$|d0NTns;EKrEY;9Z{j9p3qE8EeG;1}={LeOXOLzGX z5(tF!Fi`xGsJ;P)f%~qPQJnlG**z?X!!B3fOuO_z*AG>gmZiy;B?viQ*xSZ*AGhtF z_}OWRC`{1`3@vO~&z?VdTqeD70^68Vta4qGTXqkAlo0rLZw_Xj&QNOdA4p88VNqGZ zX&V#*E))CB=31AN7Uzk#>r(uyJ6$MI+evYmNXq|NJ{r)=-x2Tq6sTADdL5T?Irt)^ z9;kxBiDa6h^avLkJ9av3Shx}A6XAz-@%z@dx&ri>!i>>SI%DL0Hq({Nmww7Xf@8Hg z*~d*MyjB%M@#uo6%!HZ*y=a+thJCZ6N5W>}(sJLG#uRsFhkUtDGIaWH1i$m04codW z0TY8ERE`XFx)K7j2p*YmYDSasqP%y<-af@Gi(h45VFHZFLWM(8g$cQ_Z&Dhe|5$G0VP4veZ?b=0ZxD9Bl_bS#@gyi3QPI8G5 zO_^>&9R!-R=Y#kVelpB(zavI7geJM004o57IA!%~CrQwJHf4tU2UTtZE>hKW=I!C% z`N<%^-@o5`hOjU~QCz5Tuqrd*!$nK_(?@Ow@|kqIIJwSeM;QzSrUSYa%jm2RLeKk{ zk2Njw9(mUnioCT0X#B9Xt#=jz^E=Z;{MQ-QrSd%0`0oDb$6Na2ht0o#iGbmSCsDYSF!@(Bg6KbXaBEkPXcO7M4G}Bnlt^GLXgoJ;~T%V2F1@Vg1Br| z0kh7l-fx3>sv-^SNE6Uk3cxkCDSoRo;|ULu8Dih_V-@}%>)IaXN{qw$pFpXTn;S-5 zmkF&XUR7POId&`Iw|PP4?|hPj*?lIYX0oUlQ_4Wb^+cEsX@1}GVp_6dzv=>8?)3)y z9i>HJ@uBk9Um4n@@$wF?i&5TGxG=O>Tq6F!zTMlmDM8A{A=zkS-sz8GWw*9aRDSXO z%26rFVX(gs)aDB^jeGqID97&nygCfpk3`wZc!aF}7VzV8&~;}u+0O8E?~{QC?thj@ zgVIv9W2XEde?+-xgqTdf*AjqEPsobI(e4T_Ho=O$S?s*xz`ee|?W2&SbF$(i)DHqcN-t^IFaoXDbJ$m;g z$9~Cyid7_ff$Efy@>6|uB+s39zb1|HWPUDr8xuOdpU!@)}e3lsV2%0cZk z;}+A@`oKI4`VnRgvi;A@BD1Y~?1>_ui6IYy@3TOl0IHfrc<%vYlCjdK+1Rfe>;cJi zYG>GX>w<4*qWR|wiw0{_#7W*Q`wn*)T#~r3E8oVAFQzbNy(u$c!cfjew*}=fX}U@0 zv&^mAnDrPnH_su6w-@cM9w$l?xZFjFEvdq>z(`io)RAvN0giSmlMERp%{*(L`?EmG zjrxsBsE>ZL&`MWe&LGFQX^+-Lr9+}%K7{Y;oRmZBah=q9TP)XRE4-xN75r}K+PC3` zqjDQcJKsinv(aFGkW00|zbJI`22b^vlG4;vw_98~PLpvvH^%sD(|rL8J9TEVJ}6+c zGGJ_PetSs5hN?`~W0lKU;aEg5i01JJ3nLuO~JGjek7<2W!ey6w$yR45g{R{W8lyrez_-r28_YB5LT|I+*NTuf1bl@;e4xt&82kTjAbdG{)gR2NGU z9V|cRaATskab66|c#=Q7uqknJUvyToHtN)fTEt|yKU?kes}N&8L9w-y^;y?dq)62m znBeU})(ZKgc;>;hF^+he75!}FCodj@{makaAJ)_XRZz!SX{k0@7rTYUVbaEHviJ$& zu&?YNLV0s})vcF44dv7HEq8-2V;rt_+c%xDb(_9HB`zKzajG{&1_x=p;=WL4M9%(d zq1s=g6$=y02fv6OS9D396|~{Gm0_#Snee-9F!C2+HtgnvbT56w;j+_9b-|=)rYONQ z3~KT_7B#uuezSjK^E$)YOx`=m*yshuhVSPIxFZ}<NKwTQdr#D@u>5alBOER& z86Y_dk6)KGqpOBD7UUKV?JaCsSh(8JhQT^9l5tx==;DRR?)U7UK+S`Y)UHil<&j*) zr!vBp`ehc%JrbHrsw7*^fvt-td{u@(3G~nGPkBkOE_jvxBT+nwE#_nm5arx~aywC` z$k|}vpsrd`C!au|;~s0c(ww=X85_?KpfvE-qSBLm7B!VaaEBGrjWVUrZ_I@7Svm7* zAibC|5PQvs*8jbg*@ta~1W}w!cYjx-KNLXM30~$B9*0f*~*9!c`VoQa(BUyB6 z>cM#BL|OB~ubY}v(iYV9S}>7NW^owABN83kl}Ou|Ih+~$H5x~8zzqK9{jPUX~H|{Bqt*km+SQFYc4+C#AnixIm(Igk3ouVbmK0} z;W&JsPbL<(RM)Km*&mJwVQx5p&z7RJ#X#SL!A_5himYSg(A7fb%Ix>cvj{c=l8OI_ zPA?`GsY7cS^|)ENDg^}|fO&K_oCxhYk{TB+hHUrAqXX)&bXpPHmGB?IuF!-fMx(Xj1@Z7LYtX7*GKa~9YoWe#0HD$rG`)06%$wu&iQ#MvU0`5~0RX^efNUa2 zZSzD3+vSO{Y!4?QY^R+_OTUV|PKgKEAqv9YjP z7^8%(Woe3At!^D|%a~&V)^fGr0K+B?$7$kVv{ew=IR&*I;~1NG)Rd7{gHklieW*|c zm$aDmVy8z3H=aqhT7!E5_T;7GwQJM!%3a>py0xYxUTHYW>>iA}9j(dvs_lZyX-}+7 zoFf$OIk*nx-eB8}bhQCw`;`)c-JI(#jK(22GL&^dfZskZ8U{ zZpm?1v+{19?dAb+K&ka>49`*k+iqC7Pt2=95j`a(ok#2TlS`#p!{thM?>5Fc3f6J| zfn7eOSP-@vO6|dYa~gM8mbvObT)Ued#WJ}*oFe}O#yD*{RqXQ&)dcl z>#WkUD+QDFIIhLYl4U)@;goriI|7?oty?vf+>uSRrXYG+fdBZLWr&xm8$s?~a&)S) z=~n$m^kvi1(eq*8%a6YRMkeMG`n7EW1ql`+lwFu`5h6t$MDMK{E%#qrRLTpuzU~fy z;QaCn{F{BFJ^;}F?i%uYGyh5;Aifzzx)E&ofgNMaOcjRa0;hZ<7~no@b=K~7zvI17 z4mHY9J&pkzn%F31$=u~mVv~R^d}j6K1iCxXAvOZC{a$!SER?`981pokH CFgb+) literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Fraktur-Bold.ttf b/katex/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4e98259c3b54076d684bf3459baeaeae8dbce97a GIT binary patch literal 19584 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..395f28beac23c7b0f7f3a1e714bd8dac253dd3bc GIT binary patch literal 11348 zcmV-aEUVLZPew8T0RR9104!7h4gdfE08HQj04x0f0RR9100000000000000000000 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 Y{My=5Zj3WbM|mX<0#Lulu=APmKiR?A3IG5A literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Bold.woff b/katex/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..f38136ac1cc2dcdc9d9b10b8521487468b1f768c GIT binary patch literal 29912 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 bnfbLfgSm6Day;iB;wah|00962|Nj6Fv8wea literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Bold.woff2 b/katex/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ab2ad21da6fbe6c171bb869240954d0ead8f68fd GIT binary patch literal 25324 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 PaXk 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-BoldItalic.woff b/katex/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..67807b0bd4f867853271f5917fb3adf377f93f53 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.ttf b/katex/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0e9b0f354ad460202bba554359f5adcc8da666b7 GIT binary patch literal 33580 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.woff b/katex/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..6f43b594b6c1d863a0e3f93b001f8dd503316464 GIT binary patch literal 19676 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Italic.woff2 b/katex/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b50920e138807f385d0b0359f4f0f09891f18406 GIT binary patch literal 16988 zcmV(>K-j-`Pew8T0RR91076^<4gdfE0E4su073x(0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Regular.ttf b/katex/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dd45e1ed2e18b32c516d9b481ebed3cb8bffa711 GIT binary patch literal 53580 zcmd442bd&Rc`n@NRIci-?&_|t>YUT0p3ptrljF|J##wFDMrl{lYJ<`$AR#0nAqkX0 zB*_AcWPEL|Ot6Fyw%{5tV8CQ!urb%h27>@|eYu1m8*T6Zo>M&=KoUHD{`)-t&g@Kg zRdv<(edo*JjF0$yKGS!HPw*Yux?^x;=`S{p`+QG+5JwMPdez~Rm4EvFoX_`^?ehsc zFTL@G9K9;u_W3?l!})!epFDciCG}Ic`g|WchMV}09=`r0j)#1{udKsw_2`v1U;ang zqqx`bO~kGc*cp6`!wRHLPmGDvmsI z*~kcup8C-U`BPl8>Lb3tqM!E#eQBTiv=h=P9qEfSTa6JXYEwln7OE8*aqz}_J=$!o z7UQvUjZiC0No_WsO9mo67A?{@M+#7xRgd8%o*f;Adap z7`erk{R?~jMllgDR&oQ=t)6u71r7nWvC}hx2H1A^4g$7)yG9gFg?0n5F_>%`Rl2Vk zS@6aqNKsMjF33eiW)uPv;nDW_Z*UBE0+PjwgdglPjrN%N)7~CY^oQv-@=?5!bvbYW zc`~TW7hP;eZ@5m@gX{wD@HrQlp^w#qxue_+?)KiMBp9)GK>h2_pSM9N-iiqZLd zfhqyNBy8S71ljPe(3JowQ+`SJr4k5AxI&T%er^Wa``V{JLq0-j#9Xz|4Rs5=j&G^x88+PKDM3+Xqqt5z`Sj zn{mbT9x>RH=o#8Lp45f9d{HGU5Gmc8nWti;Sa0+SGNqH6K>DW}&pJ7wIwBGhC6p3- zXK&xk0oPFLbrP8D8@Hs0lXaaeq3aCtpMnui9U5IZ5!DCl;feZOSc

    viU|OFj=e4 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

    Yqh7OdB% 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�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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Main-Regular.woff2 b/katex/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eb24a7ba282b03d830fa6c63ee897d92a5188736 GIT binary patch literal 26272 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�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 bkH82T%!~T~dOL3iZSfI!+IWoKhyte*`46Vs literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.ttf b/katex/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..728ce7a1e2cb689df32c3a6c26e1bd072dcf2acb GIT binary patch literal 31196 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 T)YS6}E-Q5R&CfXgJ?`xQe`ny2 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff b/katex/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..0ae390d74c9f665cf8b1e5ea5483395da7513444 GIT binary patch literal 18668 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�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 J00IC101u*7EU^Fp literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..29657023adc09956249f6295746c8ce4469b50d3 GIT binary patch literal 16400 zcmV+rK<~eIPew8T0RR9106-7`4gdfE0D43K06(+<0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-Italic.ttf b/katex/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..70d559b4e937ca1b805eb39f544cbebe3c58ca6f GIT binary patch literal 31308 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 G#ECDig^RoZ literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Math-Italic.woff b/katex/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..eb5159d4c1ca83fb92b3190223698427df0e010c GIT binary patch literal 18748 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Bold.woff b/katex/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..8d47c02d9408d34b2a9d566c0fe0d42bf82fb735 GIT binary patch literal 14408 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/katex/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cfaa3bda59246b49e94298478d6de3b3208066c8 GIT binary patch literal 12216 zcmV;pFGtXKPew8T0RR91057-z4gdfE0AMHp054wv0RR9100000000000000000000 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 G>;nKVNojrn literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Italic.ttf b/katex/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d5850df98ec19de2eee9ff922ef59586efe471d0 GIT binary patch literal 22364 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Italic.woff b/katex/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..7e02df963621a5e26d53d510f0b4992eebde1c60 GIT binary patch literal 14112 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 ZM6wWJ659DkbG}7@mjJD1@jO-Eqc8pH1xbNXy>V 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Regular.woff b/katex/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..31b84829b42edae20d0148eeec0d922dad2108c4 GIT binary patch literal 12316 zcmY*ZYjcwbulTEV8$@`t}$2ry4J=0ZF)l+l# zpT26!T|rzN00Q_HCOiPbe|MS7|EvEu|NlinnUMtmARGL)Du2U3tT8;o*w)Yi03gTu z)*Ar;5HJBcJxF6W7a{x9Ft`2on*;zLx&QzKI3tFCKIVqb-?2<+ z-#$?P3nX(JPqXiJL;(Pzx$kF}-5}`Z7N&+K001f5w-3jEFq#owv-mcC=Th{o6MlmX z;syA_!q&y(+t21Zp6eUe@7TDhHulEfek9*I;O#%q3=_K98hU)cm*l^kiT(o!BSM^= zp{?n6&N|<5#Q*?Up7GLe9S3`77XW|}?A!Lu3`l^!gY1Zdlj(OXUD$VA+BX_Z`$0oI z)|jfCMS4MbqPtJrX>HU7Kz77vT9+W%9Q%sHF^?#yVi6AVJVXl z-;%?+3k~e0qQknqT*k=JMcfHe^lphUw?@FYwL#43yHlh!H!V2hU)iIt7C3VG{ZM`n zuC>lH-?X>^TlRrjyH>v;5$Q1%xJd3XRT#)|k8bM=`S1y!-rnpESowWYY^{_7Q1O< zh29LgOFxY10>PiqG;&Xh^CLVB)$~hna!3=JSRZTf)LRoVHa1a*D-x!qi>%b+%T1GfWKU`8 zk-aOT=Z5BoG~{a~JU)CG5IsLWY93UTSt+x}IH-pTx$|{@d_`nEq%42E*x3H^efB#Z zgciSwlHjF|7<&7pqc?z7p@}lZ%2%U4@n_**&bEv>XNWPXrxKkIb*Grql;3kkXoPC5gq)=Ar!V*t(IKMtUraZmN^l3_p;+~W`5YMvl}oPcyFIjCs2c-zhF&sq za6P!$V7b0PWgq=z?u8esctZT=yPj1rEY*=Mxu#FSAdW=B{$TCG2RC&vLnTwjd z5RMA`eIyoE+0VP2H0jmZ_#|_q(+9m$9G)6Dxvlgjm7uhmM7eDDx)~m`{iqoZiL^u{wTK z?_#^-OM~IuT5gn%FgLj^{Vo>Si!4>`6vO@6PnzgN1c#<;CkP~Wf6Qi@^f9x?3_8+{ zSil^})Ki4{X&dDz+;)i<-??p|OYcF#+RxEFxcY`jKB(Xh%h)gU8793|iCiIliGw7> zi9AP*5S?KdbLf)}jNy3BDo12xSogA7xP;T){IN5-4_N&n%+J3ssvo>NXT9#iLR24- z6~d@xtv+z*ystY*FhVjKg_9!5ex=SeWf09x!m2*oLg2F9IRKM4`R4R0(n^46?Taw1Ua4 zonFj2OX)(mtVAomg6xy9*Ap>{N;Kog0>-0DDrZ~sp3b9)vzYWqUY4c<-YgEJihHjN z9f8`En)3NM^laCIujiQu{ENyP+_0{8=qJ~$_u(FfS|XM1=ML}A1dZQfaJ{H$9gs4; z3qn-J)=Tp}4jkE2qP8#71YOOMEA|XNr)mI+f{B2ZcD&YyPoK}=lK@2!C}}y5Y=uGz zYGAE$B@&q=TW_Kq>VqCe$)jofQ6w`cLbQAHla;J$oNc>a_86XMOxLQ(;le!-5ludZ zqG4-E>eXh(XvUuw&vCOL1k%pALZr~B%CAW`BzY}9MTKKNIy`X|B6lF+(GYK{-MUpS zVKDxhViAkWmtu6J^;Ptw0JfbzFEi!+OZu3v?iw;Q91sa*aeFxAm_|Xy7hjmUT*|*M zYGfxFLA1-oDMDS{E-i6?6;wFwpMAkQH6;2V#;%H|5r}~`al`|4z=-Lq!*WUfV zcSH;r&h0#4*b572LF%k;S>3Pmz0lI0x8{E0wvZ#WoRe%iAXxhCwf)|L$3M3ySy|H2 zqB_PjF`_ytu|h2@<@=KGg=8WsY&`^RU<`)fC6>@Y7mkAjpN%mo9i~tOd1G~;o?kv? zPMgIfqMnq=M`L?>-v&_9g&l^i7r*hHvrWkN!b)W(7q0C615Q+jfg`1eN@aezP=%E} z%JkZ%x-@K(I@`e*7hyRxxuHrYm@=o)vwvGipoo;?3q6*KT+d?66l8tgw-P}JfOmMG zb*_|INKMO^ajDQ;5>p-Q3O*L4Y&E&;3ExLdJN1JT!7|ospZR9abdbwGI0;H}RE}VW zz&3(29npU0Q+81CmHN}B+?W(w87V=jKK#yNyrm0s&lyW!fg8rd;bWIOeQJ6? zbJy_fpW!DJDI4G9_$k}DR=TTC%WbYMeM64@`+;&6Fg~La``}*FW=OFj`Ft3A-O4`d z@6Y<<3M`u3=Z(~(-Ds&aEbLzu7CT@`^Mp}w1P)6^UyiZ89x0xZ@DZmeL&4f{Txr5| z+2>vpZt4;gTTimOG`92+IkbDhALIwwsvY~eVaz!`m4_Q`#~JXsiy1Ef&>a_jhV-+` zNwOXF)SC`biCX;C!YMFz6Kmy~!8(3LxXMPXj!}0vh5P`)y1z%5V2OPEZPK`kk#4p9}*#oyTrkPn6ix5kP1`6hg9ea7rS)b;RZ8C?#5Y5N7 zA!J0d%9Be~=W` zV&R`_t_y}R0L4;(4{I!ZU#CQL-qUISdUc7L>2uqr#fRQ*^jTZ|#2L{>Xt2ir7}qZ)L~ieMGlDx!dee z598RDMXT=5nrnaYz7s+%m|qyzZSy|7u*H|)gPH-GM_&kpqaZx)4$ zBBg4EiwlbUf(;&li6wqy7R^<28{mww74_tJ??T!4wBcr}S8fWnR8x$0tFlm7Tmpz0 zcWABaKlAmV@Q<~I+APhtJ2gFGiL*A`$Pn6e-BrJ-mgnK|_GP4oYD~3mpT%yvVhggy z>sRGeD2G^0N>+4x`k4ON79hzB!_5X6<}}0!==D(HNbRn%C~8+Q1DQn!2!aw>T>d zYrcBR`Cw~MqsG4uhh>6R;BE|)y|EqRn->$6V?{{UqHzyxHnu`Yqfd}5E_X2=?5lTp z_aAE*R~R=ffrQCFGWuFrKaRI2Hl^lfSBr1uTOpa7$um67gmiyu%^g^xeYm<4wx8us zoR~mKv(?YCe_Wsq|12cYu=hj!Sr(;_Ep&gx?2sT^Ixb*@V}0WhdN8;pACxs=42gf! zC6$w#uDR=cL2TT$)0;*#bFkw1ly^~+j7-_Dk(X@`vau!5<+%IwB>ILf+X~Gu#yzc? zOa__R!}KYw-GlyG8Y=)j5FDG!9hj35XfOW{K~1_*g-^!oh|U%~$M3_D33i79)sI8< z)d>1P_3{_IM_1}4;yyJk?oM{WxU=O?4kG3dwJ7%U>Rq?vw+H&9(JPS*Y4k! zxilX}F?R|o18{_)cLyV|GkL7R_JQrJKL&@K)f^xHk>!ZoWH)-@Wv`{@^-jmu_9^(j zQX`6zd@K$*4`oEV=wBKE&KW?jcTN0;~`K}p$O*=EFfOMD$~ zH1(7M;doG=bQE9b`7Nx?NnqT2;k)Oj1IZS4d-@MfVYy&hj2W#EcxnIsLGcM2+N(9X z4W0BnHtSqg2o?Xm-B&ruF#Oa)t4mOOaqGdBro<0>J01AYTrgOL$J<2q>f8T;@#Y_1 zv=$)384|eSt06MVO(0j5JL(#xulzbRRJzF~8LQ)U@5m{6zYH zCT>)y79MT=(!Eyi^jozyD~Usm@Ceh)9P@Re8z~Iw#Z8CvY&n!eOyv~_?Gn5L(#Fa4 zOWPOL^x)14HcrA{YOFY5u4lfGiofY0sEw`_dYQuC>5z^c(yZ+WKLx{QTU$-cx95< zX^A=zL#~%YT+p*EdyMK3otynU5?affK3RxmwVltEn4#ccU>|uE1L81-sQr?Y_e(zD z2H)a>H*E5tmFq3FGvp0Shd~@P_XxTdc!%!2f(AnE~V>yCK9aINf zZqhdWAb|(v`dWmYJ>r-pftx+)dSziC;cI=%GBo{Q#wd_$|Xt9XN?>|4CQYP27 zG-_id)m+%LpO+2*N>!F+-in3*jsOtX@OU)`hyh5ApI- zoVdtN%1rmH{sx^<2F>vufh?<#Q>YwkqWp!OEQ-i^-%w_(2pJQ$WiX4R=vnQg+^EqH=eTOqe$mTnc5DRK?Nut=q%4fiya0g(7~Y^rT_vND6Hb z(*!6T18c!!mEb?<%tlxopCL{93*H?|2+Hm~c2S2B6vh5fB}8vSAOiQ<9qRQnWH!EV zqb&l3vh`o^NCTaN(FJ@Rw{w?+hgu5eF0+1T6_HTeI1fDP?HTol;ohuR9ms|EVJ&4R z4=>O9zgabt1fp_GSS5xla$A1Zz$-m`JUpDP@|Icxy9`b6vjNJ09-ak6d!K`7Ou~s~ zJN(sOyS?61LliDY(W7@L1v|X;5QMxB%dP#FquS6Ea3wDcvb7Kk3%0U!!lTxPd{9SC zqBIE~WMeYH=5d2I${|cV!%XNPoqUB%h9F@%^ z4bPGDE*HFxe8tDo6~4%Iv_P4$h4gbp#vIkZ`o#uNFxZ0kX}? zW;6dBX>P)D#Ia?ho16onLZnWC&IVC5dlT~gdC!*S-y68^e^6I2j6pKJ>;b#^&A2Zh ziWy_RruOtP8Qdyq z!0gl_tf+Habx9)g2VF>QI=(^=Q%bTYWa~=0tF&z=+QKh1HSgYGqS{cO+?SfaKz4`A z4{^_)BF4CpK+GOPT-lYawAn~>=qfHaB5%hhd~nLTiz=g5%)+q&7_4s?CskDg_`FAc z2knFY;QW2(4Rx?0Ug6P=44`s&$wMJ36@vP^HCjKLnC%!IvisoK4TXgUF>=(XquN|2gal*U zlhX&~dBukgjpl8IQ{UnQ%3#a!q=rUs9&AK7_FDuuQ)wqk0WW&xk*rdLbs*~;!Fxy} zb;394p$)t-BhX#sYFhNSy-3bljk`Xk1Dkwh1*slxa=#8AoIc4G-efRx z<3+)%-rdAMdi_@&(usbWBKQq(X!YCc@L(&yeG*9Fakm_Ix|UX^;M$2N<){X>QO80n zZ&><*7@YPVXgqb<&MtzLNmY_ZH~beSRrUu2i~JD{ggkP1r`A-HT&t?Ke;y~Qp{~dI zd8_UNDL<0L7LQ1KaLN5N_mSF$gYasQGk_#UbHyVZA)x`eH%4=%N8sXfrfTd5E06mZk`+fm{-C5=$HYEO|DQqnk| zoa9^Be>0b}eT}D?j{e+tcNv#|GAl+u)xY)TW@uyIUK`|r46RSxpPZZIvOtV{0ULl$ z6w|rtDeg7OCTzFMPVXEF_OU2!pR=%H!8uy2kg;~ZX#|s#xUW)VMMW2vPVnmQ*WBD_^6Z%!pbBM2d0lX=Zu)n6Gt3jd_XZ-?>uz`0eX_gn zyCPj@DJ_Q19ehO#ptn5i9Y}D@_TC-v=KgLBMuxfi9I(rHOXBZakue(A^ zFTk$B-&qCh;{BtCze2_=I9u0{ZdC6=Ylr=MK1k{$F60g(#y~=iiqjAh{@{#67ct!l z6roV3gDxa<&qzzKw|Y9AM2CIA`$t8OcjYebBdMZg(uJ7C*V5EP!7{@-4)Uua#*OM~ zeCs(KC*=`{c@0g;A?+<3MfXP2(nRs0!m!?`-}8mA#uwH!hZyz+FGXc3r;E+hXyy=q?+Fy#8 z`iw1Y7*G5n5lPRNX9ZiHL3$cPxE{}qd@IA(vhhDwy5$ELi+epLUHO!Yd7aC750@A5 z#?ECOcK__47wuyh#c+>XGWl$LnL8i*6zb^&Xsliunxy5c@Zd#d(u-B>F(1Zz3I&*1 z>-Z);pIu@6ouz$Chg;yIj^;z4>=hPjR%U88kAf(!)lWI>_a?C8QoY^~27`jWjJp=8Fc-)lWm2!D+(%b?c*xBB@g~Y`t19^7U2JG*w5&@cV{6X%TXON2cI|~@=4xH zdAb+8%ap`#Wja4(_AZH;RchMceT*hQ*#!cB=J?!8<<6J0ZGPnRhmAFb<@n_{$@nYm zy0R7jJ`AyJU z8AqUzTus=}db>v6T#Zd@tnVz3*6fajh2K!iy!7ue0dSerak)K0ij<{$-Ms$lz#~^% z2e_jMwzI|!X;j)nq%C0U*qHxHl@Es?Z@IbYY_We6kVG1n>AEXiZJ%M&#M!^ z&#AF7$pbP6LN-Q(V-iWt2Qu<@;`V1$+}5qAXl>RKGy@yy5Y5f5v$g%@=o2J;Y81zr ze4n6{_sak|3u||s=>P{=3rneDM#BnYKT;}3GASxoMaUBuC)eA5Hy}ao<=j#_;M=h7 zTdE#Euxge87JxJm@%-R87KIOBn-L!i!4dxwt&8*9;4~L0&WoV`E^-tz0MY zXX|?e?(c%Wn{2aKX z^ZZmuyOChpLHN)C)Xl7TGMX>+A^|sA!#6{m7sFtMu~@(V4HZlQ1JYKBaH;hXn zZ5fmn=?bR=Bs7rrhszcm4thp@^Ab-m)i%FMx&)=}iI`9dH_3F(WjDODCv%S8Mt@bx zVDKli<7QTa=bA@|H>OZGq?2#$EX^C#6ELMkrMW+N$LCbN+$3QV>to7oUviVQ;5`OTlyFcj$enQPPX z|K^z1B`#g$$pURYr`Xc&z9cf1F2U(@c8tx|jK#X=|5I?7~ zITd>8gIQJ_xwfBMnZsl@yHbI;`K2V)IIQjC-7x=5@8(O(Yt&XpX-DX2qZc?QAbB?{ZM6Laqn6me%Mo8QFYjDh!c-1C~k-QT|KghW5xu%u|$&Sl)ap$_* zi@L&<3(4tgi5?}Y(BN@9kdkmVuJZY_Fm?Kp(Z|WU6039$Yj{B4&whNkKN2UW1j6jp^xoz2eoC+)VhXOp%GpG>sAOh@ z0-=36-N&C)|C;i1K!N7&Zp^UO*4DwfRW%r&j<(S>xx|LH_ufsKe1gI}-27fv<~aBp zo(koSt`$uK`&aQr(oAxltreL6l1VK`_WeZlo#}brLIuMzQlRy^>hpYFI#C`MPIJ7? zPlTS|-mL9=9<<<7WGYek6Sl;D^4w(2V>VxKIR!FKFywFe7NC{C&o!6jtGzr*PC8C^ zYu!|oaIOId7+lGY)j`DUj3E*0GpTepNP@1TKCd5gzh(w;u~P*ZB!QKq%yVqeHLM@! z{-SdyCY8hZgs_FH>+>3@aZC|+`>@Pv5kbhCA&l6nNw+CeXxQ{>`2@iC-u4Cfx|r^h zPg42Sf zg;Aca9or+ZIg*lS3(pG#2NzdEOu3BxJh`7=ateV!Sn`OwH8qscZCClh=d?(Sa4MUE zFa`slb!!oT{L(aFH*fpn_?%M*qfGSZik`!{dp{9>kunfteN^Nxc!(Qym7fu#S?ZhP z&+UhH;Tg7gmyD$jm)+7KbxdY+P*4nZ06qf!iX1;Vo+R@=mjN03=c*TqDPB}qDLzWe z=Yf%xIdzkQR=t{0m)QR|qb~FDk*7YaQ<;*HhMA(n+rEhL1wxOhuNeoHDTvx)-;>6! zMnSpf_30Z{DF-Kc47kxn;5iHc7k+x1N#ly0s&n`QpAQi~87{urJNr*&1`U7lFV8*Y zx76ZN+*`Tx0}W#sKbi%xzgHBksiR%QA;Dyx0YmMkW>?*w!c~|uMS`TFdSgTJ&X*rwulm3*^iIACjPJ$2N2S*6!2v-ib1rG_23(p9z3U31c2LTM>Cqg2^HX<@&I$}TK8WIc= zCzAMgeX0fN8kri|3^^Ei2?YX$1w|Dl9c3C79hDu`_}fG42W-!`cKVefn5u`c%$Xz`?o$N%yvxWQ4%w9#Vg zz2;#!Jv@=sT|7iRX=xdzop$A%Teh+d5YT!#@jemsYyc1WxL=t;P*FNo+9iBNR?~suFN(vb_wr#!+$f2gV9#z`@ zLLmcB4^$a~nV>dp6IEUkM(90szU(@={_tgGA4 z$fEWVCN3r_s!)Bd?KLnSg+N!5Hi^Z^Q+TJQQ#UaR96a(&zV@Ix-@{As|S; zU$T^=b}87IQQn6!$O>_`8^=5w&)_`0K60x;cYNO+L~y+i&K*6ixZ40SVF5<{A|iOr zQ4!?v*=R#q<27^%=q9O77m*j8nW@d;?9C}(zERSBYCjYc2%)$TxWl~NT<5@+vxw`q z>r`j|&>;~Y^4UqftD&5$F@me;FrE(XVN9ma-mDndqL>K*+9D$S% zqP-t@vsWgd0RIa4`0t#n)K_7YEprsY1z315xbo7SWpGs76x*Y(_3<je3ZIP+Z z*(uFfPo8xv_zxst@K_leUMN$hPRub|;BVJ!Y+zU8T;t~zyYQM8%5sDoO$fsAum|$v z(@{-sXe@aFHoFAc*~VK%cR9wW zJO2Pk9m}E1C029-vrOOVJm<>=kZ>KrxY~|Fi$Gf7@6W+&^@7Z>zyhRf_Ui2NSML@@M zv;durr!g}W#%?9NOJ%OStC&$!+w0P57xKI~yP)>KSc|4Iq{~c42O$u3UgEGMk`i?-FewrHJyB*rPrwZ;MaCzK< zREF6}ic6q~>W3mGcytBY>`A;~{0mhib+tiAh=(kBdsgU`#Xz5&DH3Gw0b_c#eh~JS-5ybQl_67!On)$reGrg45ei$-*8C(ed!7pHp4cw#~b}8*8y; zd{5RnEe&#_*Ny@OB|A=hB&u6)oRcdj_Cc-Vn{XjTK%C8A=miOnEiMRoUIAk%n2YME zNqOQ&DRvNIOQnBu^Er0Q={!-6HbH%#hPZ{)@PCU(0z%%YRIDsr2L}rp)-df zoCx_{>|#JjE$z(;MsHc!UQAZs$I4rI8y_8eDj=W+kZUW-WXVYUF!(b+VDhNoMK3Qd zL!f{skRuf#zVu)oh<3CPl|$>BL+z2H_NfzI6YDNOiNmqvRIj(#1NFI~5$`<4S~#wu zk3=}zRpf`pli_?@Y_+N3IAX%g;8G8svf$fqy?^XyYmhJtCa!?VtJGX80?z`Df)P)Y5qb0^}| zu#%&kaHi5{xwXTh&7tHRdhkT%XrmeX-h?LE`Nt%eQ$^Z3mC~)s#6P+X6nbn|TXs?e zf0s~`PxU&5KLeaGoN9-xrG*1EHwSUocUas(2~&QHvskN~Zr9{CT&HQ5R$T|ztBY9# z!#=A*bD}Y%81WKEx_4EqEP%unS#_)Ba24#~R6`BR?IC%jc0 zx5F|&C1@3att@()LdIVqKN*Sca$!>;O1H|d_9@&cwvnK#cerT@qlXN>bh+*hwsY$Q z)SspQ(Cu1-k zRR_Ac)$C}!+3ff-)MOjSqe|TPbNgc00x9q@dqfDDil`XnNrk(KQs=L z6tJYg2r6HWy&6TCh9*KGQ!(5!MSd19+cIamNyuEwBpW}1JlNlK8CneuRL!yj-I|R^ z4!CUD3vmH^RUwz0)}oPXsZCyj&-0_xrG%enK_L4~DAv)}2^7&b$y$woTRUk4&jq*n z{FH25W;09Je!42Yje8{>H=$UM>7JWq_M|N+NB_)ee;3Eg0m$FB)WWQ}jZZprlYfFZ z`yi3cijb2BIWrrGX`7jF)Xj4L0q^yR!2dPNeXxt_bqmh_8UvI3Y??`1PV@2p&?@pP zVds(LKB*!fpwDC-}_i*-U{Sr7@2b)(zuJ_pdBg=~0SNFj5a%Q&e+mg#KB|G)>i zX3*jgj0#hjyiea6~%=9REJLT7zZ8h^O$=sy}TL(EhyU1}Tc$f*z10u7J4 zbEVU;+5A{+VMCUDQ0;*He%iS2vqdjF8Bv@iD-f7Sg_IjG3+E_wI><7S4l#z_GUn%G%b-FY?~WR7|ze8U7(nX!FAe=+k^8#L^g!VK%C zJtMl4)6>)2TjjBSK~dW8*yGV1&}ld}HAs9m7YgNPs7%pRN6|RpsOX3cTFNz~u$fsz z95huHjSoNlbp^7@3{z6DOCOKkwvp&l7jkZ>>XEsFQd(7L*A+j43*6>$T8Kvh!e)&vCQIGOZ)^Qt2mG(pDhwvUm66lhx9aS?nILUN+jH)Vn z7L%BHHu=?4ynHw&4ERg%{TVDc#ciKD^JhV0s%v&Zg=53B?oivx}%G%#2(Lm>v&^$-t3kiHwU&N=S)MPE`M?qNJv%s_Z^)X`bae?TM-5GG?l- z<2nW3y6HBe`?C4cD-z51Jg7Xw_tGx|U)%LOtbNn<(kGGY^E{-!^Y3=S{@2IT%rAPa zX3Ld)1|dJ2KEH`H$<4@BVRA|i>>-L?PD6x6Nd{%j z2gNy22_>C`B^{JSGmv#507e)#g4Ox{Aq~jFk`9buCC0&{2hqI~sQo4c1OW2&1wi~i DqysK0 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/katex/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a90eea85f6f7bded69ff5d40114447a6d8b48cfe GIT binary patch literal 10344 zcmV-uD3{lFPew8T0RR9104Qhx4gdfE08C&204NXu0RR9100000000000000000000 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 GG{*pT{>~Tx literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Script-Regular.ttf b/katex/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fd679bf374af72f2a183b97b40c9c7e9e51fbe5e GIT binary patch literal 16648 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Script-Regular.woff b/katex/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..0e7da821eee0dd05a0a6f0b16c2c1345dc573a84 GIT binary patch literal 10588 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size1-Regular.ttf b/katex/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..871fd7d19d8658f64d8696ed9cdfc82c821ed76d GIT binary patch literal 12228 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size1-Regular.woff2 b/katex/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c5a8462fbfe2c39a7c1857b9e296e62500a8a8a5 GIT binary patch literal 5468 zcmV-i6{G5RPew8T0RR9102N#S4gdfE059|a02KrP0RR9100000000000000000000 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 a^|k5z`r34UeQg~YeP3G~_EX$#+W!Ytlnjvo literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size2-Regular.woff b/katex/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..d241d9be2d317f7b39b401d96c8b18836acea0fa GIT binary patch literal 6188 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size2-Regular.woff2 b/katex/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e1bccfe2403a4ed770c1697ae7c15b9e1cd9bc4e GIT binary patch literal 5208 zcmV-e6sPNVPew8T0RR9102EjN4gdfE04)>%02BcL0RR9100000000000000000000 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 CPy?p` literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size3-Regular.woff b/katex/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e6e9b658dcf1cd031ac82b6b8f312444c55d4fc0 GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size4-Regular.ttf b/katex/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74f08921f00f71f413ca42c9d1c90202e672ef38 GIT binary patch literal 10364 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Size4-Regular.woff b/katex/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..e1ec5457664f438ce5a1cc6dd8409bf60ca7804b GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Typewriter-Regular.ttf b/katex/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c83252c5714c71a3e0ec62195884167339a0129b GIT binary patch literal 27556 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 MzaRX}iWL5T03x1QQ2+n{ literal 0 HcmV?d00001 diff --git a/katex/fonts/KaTeX_Typewriter-Regular.woff b/katex/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..2432419f28936aff53ddfa2a732d027e6a6648fd GIT binary patch literal 16028 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 G0ssIW.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/search-index.json b/search-index.json new file mode 100644 index 0000000000..6ab6302760 --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"API Reference","u":"/ecalc/docs/about/getting_started/","b":["Docs","Getting started"]},{"i":8,"t":"Python Library","u":"/ecalc/docs/about/getting_started/library/","b":["Docs","Getting started"]},{"i":10,"t":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","b":["Docs","Getting started"]},{"i":12,"t":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","b":["Docs","Getting started","CLI"]},{"i":26,"t":"v8.1 to v8.2","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","b":["Docs","Migrating eCalc versions"]},{"i":45,"t":"Migrating eCalc versions","u":"/ecalc/docs/about/migration_guides/","b":["Docs","Migrating eCalc versions"]},{"i":46,"t":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","b":["Docs","Migrating eCalc versions"]},{"i":55,"t":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","b":["Docs","Migrating eCalc versions"]},{"i":68,"t":"v8.3 to v8.4","u":"/ecalc/docs/about/migration_guides/v8-3_to_v8-4","b":["Docs","Migrating eCalc versions"]},{"i":70,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/cli/","b":["Docs","Getting started","CLI"]},{"i":74,"t":"v8.2 to v8.3","u":"/ecalc/docs/about/migration_guides/v8-2_to_v8-3","b":["Docs","Migrating eCalc versions"]},{"i":76,"t":"v8.5 to v8.6","u":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","b":["Docs","Migrating eCalc versions"]},{"i":79,"t":"v8.6 to v8.7","u":"/ecalc/docs/about/migration_guides/v8-6_to_v8-7","b":["Docs","Migrating eCalc versions"]},{"i":81,"t":"Output data","u":"/ecalc/docs/about/miscellaneous/","b":["Docs"]},{"i":87,"t":"v8.7 to v8.8","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","b":["Docs","Migrating eCalc versions"]},{"i":92,"t":"Modelling","u":"/ecalc/docs/about/modelling/","b":["Docs","Modelling guide"]},{"i":94,"t":"Examples","u":"/ecalc/docs/about/modelling/examples/","b":["Docs","Modelling guide","Examples"]},{"i":96,"t":"Advanced model example","u":"/ecalc/docs/about/modelling/examples/advanced","b":["Docs","Modelling guide","Examples"]},{"i":122,"t":"Facility inputs","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":128,"t":"Drogon model example","u":"/ecalc/docs/about/modelling/examples/drogon","b":["Docs","Modelling guide","Examples"]},{"i":151,"t":"Set up an eCalc Model","u":"/ecalc/docs/about/modelling/setup/","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":153,"t":"Simple model example","u":"/ecalc/docs/about/modelling/examples/simple","b":["Docs","Modelling guide","Examples"]},{"i":177,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":180,"t":"Pump chart","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs","Pump modelling"]},{"i":197,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":203,"t":"Sampled compressor model","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":216,"t":"File format","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","b":["Docs","Modelling guide","Setup an eCalc™ Model","File format and syntax"]},{"i":225,"t":"Expressions","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","b":["Docs","Modelling guide","Setup an eCalc™ Model","File format and syntax"]},{"i":234,"t":"Introduction to eCalc™","u":"/ecalc/docs/about/","b":["Docs"]},{"i":242,"t":"Generator modelling","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","b":["Docs","Modelling guide","Setup an eCalc™ Model","Facility inputs"]},{"i":252,"t":"Fuel types","u":"/ecalc/docs/about/modelling/setup/fuel_types","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":258,"t":"Compressor models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":260,"t":"Installations","u":"/ecalc/docs/about/modelling/setup/installations/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":275,"t":"COMPRESSOR Energy Usage Model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":281,"t":"DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/modelling/setup/installations/direct_consumers","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":283,"t":"COMPRESSOR_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":289,"t":"VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations","Compressor models"]},{"i":293,"t":"Generator sets in calculations","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":312,"t":"Models","u":"/ecalc/docs/about/modelling/setup/models/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":318,"t":"Pump models in calculations","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":336,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":338,"t":"Tabular models","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","b":["Docs","Modelling guide","Setup an eCalc™ Model","Installations"]},{"i":346,"t":"Compressor train types","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":348,"t":"Compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":380,"t":"Variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":382,"t":"Simplified variable speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":399,"t":"Fixed speed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling"]},{"i":408,"t":"Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":420,"t":"Time series","u":"/ecalc/docs/about/modelling/setup/time_series","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":430,"t":"Single speed compressor train","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models","Compressor modelling","Compressor train types"]},{"i":434,"t":"Fluid model","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":448,"t":"Theory","u":"/ecalc/docs/about/modelling/theory/","b":["Docs","Modelling guide","Theory"]},{"i":450,"t":"Pump modelling","u":"/ecalc/docs/about/modelling/theory/pump_modelling","b":["Docs","Modelling guide","Theory"]},{"i":452,"t":"eCalc™ Workflow","u":"/ecalc/docs/about/modelling/workflow/","b":["Docs","Modelling guide","eCalc™ Workflow"]},{"i":454,"t":"Turbine modelling","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","b":["Docs","Modelling guide","Setup an eCalc™ Model","Models"]},{"i":466,"t":"Reference documentation","u":"/ecalc/docs/about/references/","b":["Docs","Reference Documentation"]},{"i":467,"t":"Compressor modelling","u":"/ecalc/docs/about/modelling/theory/compressor_modelling","b":["Docs","Modelling guide","Theory"]},{"i":469,"t":"Generic Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","b":["Docs","Modelling guide","eCalc™ Workflow"]},{"i":484,"t":"Variables","u":"/ecalc/docs/about/modelling/setup/variables","b":["Docs","Modelling guide","Setup an eCalc™ Model"]},{"i":496,"t":"Keywords","u":"/ecalc/docs/about/references/keywords/","b":["Docs","Reference Documentation","YAML keywords"]},{"i":500,"t":"API reference","u":"/ecalc/docs/about/references/api/","b":["Docs","Reference Documentation"]},{"i":502,"t":"ecalc","u":"/ecalc/docs/about/references/cli_reference","b":["Docs","Reference Documentation"]},{"i":514,"t":"CATEGORY","u":"/ecalc/docs/about/references/keywords/CATEGORY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":522,"t":"ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":530,"t":"COMPRESSOR_MODEL","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":538,"t":"COMPRESSOR_TRAIN_MODEL","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":546,"t":"CONDITION","u":"/ecalc/docs/about/references/keywords/CONDITION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":554,"t":"CONSTANT","u":"/ecalc/docs/about/references/keywords/CONSTANT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":562,"t":"CONDITIONS","u":"/ecalc/docs/about/references/keywords/CONDITIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":568,"t":"CONSUMERS","u":"/ecalc/docs/about/references/keywords/CONSUMERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":576,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":586,"t":"CONSUMPTION_RATE_TYPE","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":594,"t":"CONTROL_MARGIN_UNIT","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":602,"t":"CURVE","u":"/ecalc/docs/about/references/keywords/CURVE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":609,"t":"CROSSOVER","u":"/ecalc/docs/about/references/keywords/CROSSOVER","b":["Docs","Reference Documentation","YAML keywords"]},{"i":615,"t":"DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":623,"t":"DIRECT_EMITTERS","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":631,"t":"CONTROL_MARGIN","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","b":["Docs","Reference Documentation","YAML keywords"]},{"i":650,"t":"DOWNSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":658,"t":"EMISSION_NAME","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","b":["Docs","Reference Documentation","YAML keywords"]},{"i":666,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":677,"t":"CURVES","u":"/ecalc/docs/about/references/keywords/CURVES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":684,"t":"EFFICIENCY","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":694,"t":"EMISSION","u":"/ecalc/docs/about/references/keywords/EMISSION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":702,"t":"EMISSION_RATE","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":710,"t":"EMITTER_MODEL","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":718,"t":"END","u":"/ecalc/docs/about/references/keywords/END","b":["Docs","Reference Documentation","YAML keywords"]},{"i":726,"t":"EMISSIONS","u":"/ecalc/docs/about/references/keywords/EMISSIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":734,"t":"EXTRAPOLATION","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":744,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":750,"t":"ENERGYFUNCTION","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":758,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":764,"t":"FILE","u":"/ecalc/docs/about/references/keywords/FILE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":772,"t":"FACTOR","u":"/ecalc/docs/about/references/keywords/FACTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":787,"t":"FLUID_DENSITY","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":795,"t":"FLUID_MODEL","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":802,"t":"FUEL","u":"/ecalc/docs/about/references/keywords/FUEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":810,"t":"EXPRESSION","u":"/ecalc/docs/about/references/keywords/EXPRESSION","b":["Docs","Reference Documentation","YAML keywords"]},{"i":818,"t":"FUEL_TYPES","u":"/ecalc/docs/about/references/keywords/FUEL_TYPES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":822,"t":"FUELRATE","u":"/ecalc/docs/about/references/keywords/FUELRATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":830,"t":"GENERATORSETS","u":"/ecalc/docs/about/references/keywords/GENERATORSETS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":834,"t":"HCEXPORT","u":"/ecalc/docs/about/references/keywords/HCEXPORT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":847,"t":"HEAD_MARGIN","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","b":["Docs","Reference Documentation","YAML keywords"]},{"i":855,"t":"HEAD","u":"/ecalc/docs/about/references/keywords/HEAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":866,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":874,"t":"INLET_TEMPERATURE","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":882,"t":"!include","u":"/ecalc/docs/about/references/keywords/include","b":["Docs","Reference Documentation","YAML keywords"]},{"i":893,"t":"INSTALLATIONS","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":897,"t":"INFLUENCE_TIME_VECTOR","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":905,"t":"INTERPOLATION_TYPE","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":915,"t":"INTERSTAGE_CONTROL_PRESSURE","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":923,"t":"LOWER_HEATING_VALUE","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":930,"t":"MAXIMUM_DISCHARGE_PRESSURE","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":938,"t":"MODELS","u":"/ecalc/docs/about/references/keywords/MODELS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":946,"t":"LOAD","u":"/ecalc/docs/about/references/keywords/LOAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":954,"t":"MAXIMUM_PRESSURE_RATIO_PER_STAGE","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":964,"t":"NAME","u":"/ecalc/docs/about/references/keywords/NAME","b":["Docs","Reference Documentation","YAML keywords"]},{"i":972,"t":"OPERATIONAL_SETTINGS","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":995,"t":"POWER_ADJUSTMENT_CONSTANT","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1003,"t":"PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1010,"t":"POWERLOSSFACTOR","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1018,"t":"RATE_PER_STREAM","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1026,"t":"RATE","u":"/ecalc/docs/about/references/keywords/RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1040,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/PUMPS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1050,"t":"REGULARITY","u":"/ecalc/docs/about/references/keywords/REGULARITY","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1067,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1074,"t":"START","u":"/ecalc/docs/about/references/keywords/START","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1082,"t":"STREAM","u":"/ecalc/docs/about/references/keywords/STREAM","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1090,"t":"STAGES","u":"/ecalc/docs/about/references/keywords/STAGES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1102,"t":"TIME_SERIES","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1112,"t":"SUCTION_PRESSURE","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1120,"t":"TOTAL_SYSTEM_RATE","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1128,"t":"STREAMS","u":"/ecalc/docs/about/references/keywords/STREAMS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1136,"t":"TURBINE_LOAD","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1143,"t":"TURBINE_EFFICIENCIES","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1150,"t":"TURBINE_MODEL","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1157,"t":"UNITS","u":"/ecalc/docs/about/references/keywords/UNITS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1170,"t":"VARIABLES","u":"/ecalc/docs/about/references/keywords/VARIABLES","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1174,"t":"UPSTREAM_PRESSURE_CONTROL","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1182,"t":"TYPE","u":"/ecalc/docs/about/references/keywords/TYPE","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1196,"t":"VENTING_EMITTERS","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","b":["Docs","Reference Documentation","YAML keywords"]},{"i":1210,"t":"---","u":"/ecalc/docs/changelog/separator","b":["Changelog"]},{"i":1211,"t":"eCalc v7.0","u":"/ecalc/docs/changelog/v7-0-release","b":["Changelog"]},{"i":1218,"t":"eCalc","u":"/ecalc/docs/changelog/latest","b":["Changelog"]},{"i":1222,"t":"eCalc v7.1","u":"/ecalc/docs/changelog/v7-1-release","b":["Changelog"]},{"i":1227,"t":"eCalc v7.2","u":"/ecalc/docs/changelog/v7-2-release","b":["Changelog"]},{"i":1232,"t":"eCalc v7.4","u":"/ecalc/docs/changelog/v7-4-release","b":["Changelog"]},{"i":1237,"t":"eCalc v7.5","u":"/ecalc/docs/changelog/v7-5-release","b":["Changelog"]},{"i":1244,"t":"eCalc v8.0","u":"/ecalc/docs/changelog/v8.0-release","b":["Changelog"]},{"i":1256,"t":"eCalc v7.6","u":"/ecalc/docs/changelog/v7-6-release","b":["Changelog"]},{"i":1259,"t":"Changelog","u":"/ecalc/docs/changelog/","b":["Changelog"]},{"i":1392,"t":"eCalc v8.1","u":"/ecalc/docs/changelog/v8.1-release","b":["Changelog"]},{"i":1402,"t":"eCalc v8.3","u":"/ecalc/docs/changelog/v8.3-release","b":["Changelog"]},{"i":1412,"t":"eCalc v8.2","u":"/ecalc/docs/changelog/v8.2-release","b":["Changelog"]},{"i":1418,"t":"eCalc","u":"/ecalc/docs/changelog/v8.10-release","b":["Changelog"]},{"i":1423,"t":"eCalc","u":"/ecalc/docs/changelog/v8.4-release","b":["Changelog"]},{"i":1429,"t":"eCalc v7.3","u":"/ecalc/docs/changelog/v7-3-release","b":["Changelog"]},{"i":1434,"t":"eCalc","u":"/ecalc/docs/changelog/v8.5-release","b":["Changelog"]},{"i":1441,"t":"eCalc","u":"/ecalc/docs/changelog/v8.7-release","b":["Changelog"]},{"i":1448,"t":"eCalc","u":"/ecalc/docs/changelog/v8.6-release","b":["Changelog"]},{"i":1455,"t":"eCalc","u":"/ecalc/docs/changelog/v8.8-release","b":["Changelog"]},{"i":1460,"t":"Get started","u":"/ecalc/docs/contribute/documentation-guide/documentation","b":["Contribute","Documentation"]},{"i":1470,"t":"Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","b":["Contribute","Documentation"]},{"i":1476,"t":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional-commits","b":["Contribute","Guides"]},{"i":1478,"t":"Get started","u":"/ecalc/docs/contribute/get-started","b":["Contribute"]},{"i":1500,"t":"Git","u":"/ecalc/docs/contribute/guides/git","b":["Contribute","Guides"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,3.801,1,3.497]],["t/8",[2,4.263,3,4.263]],["t/10",[4,5.556]],["t/12",[5,3.458,6,3.458,7,3.458]],["t/26",[8,3.497,9,3.497]],["t/45",[10,3.458,11,1.409,12,3.458]],["t/46",[13,4.263,14,3.801]],["t/55",[8,3.497,14,3.801]],["t/68",[15,3.497,16,4.263]],["t/70",[11,1.736,17,4.263]],["t/74",[9,3.497,15,3.497]],["t/76",[18,4.263,19,3.801]],["t/79",[19,3.801,20,3.801]],["t/81",[21,4.263,22,4.263]],["t/87",[20,3.801,23,4.263]],["t/92",[24,2.263]],["t/94",[25,4.261]],["t/96",[24,1.409,25,2.652,26,3.458]],["t/122",[27,4.263,28,4.263]],["t/128",[24,1.409,25,2.652,29,3.458]],["t/151",[11,1.185,24,1.185,30,2.594,31,2.909]],["t/153",[24,1.409,25,2.652,32,3.458]],["t/177",[24,1.736,33,3.088]],["t/180",[33,3.088,34,3.801]],["t/197",[24,1.736,35,3.801]],["t/203",[24,1.409,36,3.458,37,1.902]],["t/216",[38,3.801,39,4.263]],["t/225",[40,4.954]],["t/234",[11,1.736,41,4.263]],["t/242",[24,1.736,42,3.497]],["t/252",[43,3.801,44,3.497]],["t/258",[24,1.409,37,1.902,45,2.837]],["t/260",[46,4.954]],["t/275",[24,1.185,37,1.6,47,2.231,48,2.231]],["t/281",[24,1.185,47,2.231,48,2.231,49,2.909]],["t/283",[24,1.185,47,2.231,48,2.231,50,2.909]],["t/289",[24,1.185,47,2.231,48,2.231,51,2.909]],["t/293",[30,3.084,42,2.837,45,2.837]],["t/312",[24,2.263]],["t/318",[24,1.409,33,2.505,45,2.837]],["t/336",[24,1.736,37,2.345]],["t/338",[24,1.736,35,3.801]],["t/346",[37,1.902,44,2.837,52,2.505]],["t/348",[34,3.801,37,2.345]],["t/380",[37,1.6,52,2.107,53,2.107,54,2.107]],["t/382",[37,1.381,52,1.818,53,1.818,54,1.818,55,2.511]],["t/399",[54,2.107,56,2.909,57,2.594,58,2.909]],["t/408",[24,0.725,37,0.979,52,1.289,53,1.289,54,1.289,57,1.586,59,1.779,60,1.459]],["t/420",[61,4.263,62,4.263]],["t/430",[37,1.6,52,2.107,54,2.107,63,2.909]],["t/434",[24,1.736,64,4.263]],["t/448",[65,5.556]],["t/450",[24,1.736,33,3.088]],["t/452",[11,1.736,66,3.801]],["t/454",[24,1.736,67,4.263]],["t/466",[1,3.497,68,4.263]],["t/467",[24,1.736,37,2.345]],["t/469",[42,3.497,66,3.801]],["t/484",[53,4.024]],["t/496",[69,5.556]],["t/500",[0,3.801,1,3.497]],["t/502",[11,2.263]],["t/514",[70,5.556]],["t/522",[71,5.556]],["t/530",[72,5.556]],["t/538",[73,5.556]],["t/546",[74,4.954]],["t/554",[75,5.556]],["t/562",[74,4.954]],["t/568",[76,5.556]],["t/576",[37,3.056]],["t/586",[77,5.556]],["t/594",[78,5.556]],["t/602",[79,4.954]],["t/609",[80,5.556]],["t/615",[81,5.556]],["t/623",[82,5.556]],["t/631",[83,5.556]],["t/650",[84,5.556]],["t/658",[85,5.556]],["t/666",[86,5.556]],["t/677",[79,4.954]],["t/684",[87,5.556]],["t/694",[88,4.954]],["t/702",[89,5.556]],["t/710",[90,5.556]],["t/718",[91,5.556]],["t/726",[88,4.954]],["t/734",[92,5.556]],["t/744",[93,5.556]],["t/750",[94,5.556]],["t/758",[95,5.556]],["t/764",[38,4.954]],["t/772",[96,5.556]],["t/787",[97,5.556]],["t/795",[98,5.556]],["t/802",[43,4.954]],["t/810",[40,4.954]],["t/818",[99,5.556]],["t/822",[100,5.556]],["t/830",[101,5.556]],["t/834",[102,5.556]],["t/847",[103,5.556]],["t/855",[104,5.556]],["t/866",[105,5.556]],["t/874",[106,5.556]],["t/882",[107,5.556]],["t/893",[46,4.954]],["t/897",[108,5.556]],["t/905",[109,5.556]],["t/915",[110,5.556]],["t/923",[111,5.556]],["t/930",[112,5.556]],["t/938",[24,2.263]],["t/946",[113,5.556]],["t/954",[114,5.556]],["t/964",[115,5.556]],["t/972",[116,5.556]],["t/995",[117,5.556]],["t/1003",[118,5.556]],["t/1010",[119,5.556]],["t/1018",[120,5.556]],["t/1026",[121,5.556]],["t/1040",[33,4.024]],["t/1050",[122,5.556]],["t/1067",[123,5.556]],["t/1074",[124,4.557]],["t/1082",[60,4.557]],["t/1090",[125,5.556]],["t/1102",[126,5.556]],["t/1112",[127,5.556]],["t/1120",[128,5.556]],["t/1128",[60,4.557]],["t/1136",[129,5.556]],["t/1143",[130,5.556]],["t/1150",[131,5.556]],["t/1157",[132,5.556]],["t/1170",[53,4.024]],["t/1174",[133,5.556]],["t/1182",[44,4.557]],["t/1196",[134,5.556]],["t/1210",[]],["t/1211",[11,1.736,135,4.263]],["t/1218",[11,2.263]],["t/1222",[11,1.736,136,4.263]],["t/1227",[11,1.736,137,4.263]],["t/1232",[11,1.736,138,4.263]],["t/1237",[11,1.736,139,4.263]],["t/1244",[11,1.736,140,4.263]],["t/1256",[11,1.736,141,4.263]],["t/1259",[142,5.556]],["t/1392",[8,3.497,11,1.736]],["t/1402",[11,1.736,15,3.497]],["t/1412",[9,3.497,11,1.736]],["t/1418",[11,2.263]],["t/1423",[11,2.263]],["t/1429",[11,1.736,143,4.263]],["t/1434",[11,2.263]],["t/1441",[11,2.263]],["t/1448",[11,2.263]],["t/1455",[11,2.263]],["t/1460",[124,4.557]],["t/1470",[144,5.556]],["t/1476",[145,4.263,146,4.263]],["t/1478",[124,4.557]],["t/1500",[147,5.556]]],"invertedIndex":[["",{"_index":6,"t":{"12":{"position":[[4,1]]}}}],["adjust",{"_index":71,"t":{"522":{"position":[[0,10]]}}}],["advanc",{"_index":26,"t":{"96":{"position":[[0,8]]}}}],["api",{"_index":0,"t":{"1":{"position":[[0,3]]},"500":{"position":[[0,3]]}}}],["calcul",{"_index":45,"t":{"258":{"position":[[21,12]]},"293":{"position":[[18,12]]},"318":{"position":[[15,12]]}}}],["categori",{"_index":70,"t":{"514":{"position":[[0,8]]}}}],["changelog",{"_index":142,"t":{"1259":{"position":[[0,9]]}}}],["chart",{"_index":34,"t":{"180":{"position":[[5,5]]},"348":{"position":[[11,5]]}}}],["cli",{"_index":17,"t":{"70":{"position":[[6,3]]}}}],["commit",{"_index":146,"t":{"1476":{"position":[[13,7]]}}}],["compressor",{"_index":37,"t":{"203":{"position":[[8,10]]},"258":{"position":[[0,10]]},"275":{"position":[[0,10]]},"336":{"position":[[0,10]]},"346":{"position":[[0,10]]},"348":{"position":[[0,10]]},"380":{"position":[[15,10]]},"382":{"position":[[26,10]]},"408":{"position":[[15,10]]},"430":{"position":[[13,10]]},"467":{"position":[[0,10]]},"576":{"position":[[0,11]]}}}],["compressor_model",{"_index":72,"t":{"530":{"position":[[0,16]]}}}],["compressor_system",{"_index":50,"t":{"283":{"position":[[0,17]]}}}],["compressor_train_model",{"_index":73,"t":{"538":{"position":[[0,22]]}}}],["condit",{"_index":74,"t":{"546":{"position":[[0,9]]},"562":{"position":[[0,10]]}}}],["constant",{"_index":75,"t":{"554":{"position":[[0,8]]}}}],["consum",{"_index":76,"t":{"568":{"position":[[0,9]]}}}],["consumption_rate_typ",{"_index":77,"t":{"586":{"position":[[0,21]]}}}],["control",{"_index":58,"t":{"399":{"position":[[21,7]]}}}],["control_margin",{"_index":83,"t":{"631":{"position":[[0,14]]}}}],["control_margin_unit",{"_index":78,"t":{"594":{"position":[[0,19]]}}}],["convent",{"_index":145,"t":{"1476":{"position":[[0,12]]}}}],["crossov",{"_index":80,"t":{"609":{"position":[[0,9]]}}}],["curv",{"_index":79,"t":{"602":{"position":[[0,5]]},"677":{"position":[[0,6]]}}}],["data",{"_index":22,"t":{"81":{"position":[[7,4]]}}}],["direct",{"_index":49,"t":{"281":{"position":[[0,6]]}}}],["direct_emitt",{"_index":82,"t":{"623":{"position":[[0,15]]}}}],["discharge_pressur",{"_index":81,"t":{"615":{"position":[[0,18]]}}}],["document",{"_index":68,"t":{"466":{"position":[[10,13]]}}}],["downstream_pressure_control",{"_index":84,"t":{"650":{"position":[[0,27]]}}}],["drogon",{"_index":29,"t":{"128":{"position":[[0,6]]}}}],["ecalc",{"_index":11,"t":{"45":{"position":[[10,5]]},"70":{"position":[[0,5]]},"151":{"position":[[10,5]]},"234":{"position":[[16,6]]},"452":{"position":[[0,6]]},"502":{"position":[[0,5]]},"1211":{"position":[[0,5]]},"1218":{"position":[[0,5]]},"1222":{"position":[[0,5]]},"1227":{"position":[[0,5]]},"1232":{"position":[[0,5]]},"1237":{"position":[[0,5]]},"1244":{"position":[[0,5]]},"1256":{"position":[[0,5]]},"1392":{"position":[[0,5]]},"1402":{"position":[[0,5]]},"1412":{"position":[[0,5]]},"1418":{"position":[[0,5]]},"1423":{"position":[[0,5]]},"1429":{"position":[[0,5]]},"1434":{"position":[[0,5]]},"1441":{"position":[[0,5]]},"1448":{"position":[[0,5]]},"1455":{"position":[[0,5]]}}}],["effici",{"_index":87,"t":{"684":{"position":[[0,10]]}}}],["electricity2fuel",{"_index":86,"t":{"666":{"position":[[0,16]]}}}],["emiss",{"_index":88,"t":{"694":{"position":[[0,8]]},"726":{"position":[[0,9]]}}}],["emission_nam",{"_index":85,"t":{"658":{"position":[[0,13]]}}}],["emission_r",{"_index":89,"t":{"702":{"position":[[0,13]]}}}],["emitter_model",{"_index":90,"t":{"710":{"position":[[0,13]]}}}],["end",{"_index":91,"t":{"718":{"position":[[0,3]]}}}],["energi",{"_index":47,"t":{"275":{"position":[[11,6]]},"281":{"position":[[7,6]]},"283":{"position":[[18,6]]},"289":{"position":[[63,6]]}}}],["energy_usage_model",{"_index":93,"t":{"744":{"position":[[0,18]]}}}],["energyfunct",{"_index":94,"t":{"750":{"position":[[0,14]]}}}],["exampl",{"_index":25,"t":{"94":{"position":[[0,8]]},"96":{"position":[[15,7]]},"128":{"position":[[13,7]]},"153":{"position":[[13,7]]}}}],["express",{"_index":40,"t":{"225":{"position":[[0,11]]},"810":{"position":[[0,10]]}}}],["extrapol",{"_index":92,"t":{"734":{"position":[[0,13]]}}}],["facil",{"_index":27,"t":{"122":{"position":[[0,8]]}}}],["facility_input",{"_index":95,"t":{"758":{"position":[[0,15]]}}}],["factor",{"_index":96,"t":{"772":{"position":[[0,6]]}}}],["faq",{"_index":5,"t":{"12":{"position":[[0,3]]}}}],["file",{"_index":38,"t":{"216":{"position":[[0,4]]},"764":{"position":[[0,4]]}}}],["fix",{"_index":56,"t":{"399":{"position":[[0,5]]}}}],["fluid",{"_index":64,"t":{"434":{"position":[[0,5]]}}}],["fluid_dens",{"_index":97,"t":{"787":{"position":[[0,13]]}}}],["fluid_model",{"_index":98,"t":{"795":{"position":[[0,11]]}}}],["format",{"_index":39,"t":{"216":{"position":[[5,6]]}}}],["fuel",{"_index":43,"t":{"252":{"position":[[0,4]]},"802":{"position":[[0,4]]}}}],["fuel_typ",{"_index":99,"t":{"818":{"position":[[0,10]]}}}],["fuelconsum",{"_index":105,"t":{"866":{"position":[[0,13]]}}}],["fuelrat",{"_index":100,"t":{"822":{"position":[[0,8]]}}}],["gener",{"_index":42,"t":{"242":{"position":[[0,9]]},"293":{"position":[[0,9]]},"469":{"position":[[0,7]]}}}],["generatorset",{"_index":101,"t":{"830":{"position":[[0,13]]}}}],["git",{"_index":147,"t":{"1500":{"position":[[0,3]]}}}],["hcexport",{"_index":102,"t":{"834":{"position":[[0,8]]}}}],["head",{"_index":104,"t":{"855":{"position":[[0,4]]}}}],["head_margin",{"_index":103,"t":{"847":{"position":[[0,11]]}}}],["includ",{"_index":107,"t":{"882":{"position":[[0,8]]}}}],["influence_time_vector",{"_index":108,"t":{"897":{"position":[[0,21]]}}}],["inlet_temperatur",{"_index":106,"t":{"874":{"position":[[0,17]]}}}],["input",{"_index":28,"t":{"122":{"position":[[9,6]]}}}],["instal",{"_index":46,"t":{"260":{"position":[[0,13]]},"893":{"position":[[0,13]]}}}],["interpolation_typ",{"_index":109,"t":{"905":{"position":[[0,18]]}}}],["interstage_control_pressur",{"_index":110,"t":{"915":{"position":[[0,27]]}}}],["introduct",{"_index":41,"t":{"234":{"position":[[0,12]]}}}],["keyword",{"_index":69,"t":{"496":{"position":[[0,8]]}}}],["librari",{"_index":3,"t":{"8":{"position":[[7,7]]}}}],["load",{"_index":113,"t":{"946":{"position":[[0,4]]}}}],["lower_heating_valu",{"_index":111,"t":{"923":{"position":[[0,19]]}}}],["markdown",{"_index":144,"t":{"1470":{"position":[[0,8]]}}}],["maximum_discharge_pressur",{"_index":112,"t":{"930":{"position":[[0,26]]}}}],["maximum_pressure_ratio_per_stag",{"_index":114,"t":{"954":{"position":[[0,32]]}}}],["migrat",{"_index":10,"t":{"45":{"position":[[0,9]]}}}],["model",{"_index":24,"t":{"92":{"position":[[0,9]]},"96":{"position":[[9,5]]},"128":{"position":[[7,5]]},"151":{"position":[[16,5]]},"153":{"position":[[7,5]]},"177":{"position":[[5,9]]},"197":{"position":[[8,6]]},"203":{"position":[[19,5]]},"242":{"position":[[10,9]]},"258":{"position":[[11,6]]},"275":{"position":[[24,5]]},"281":{"position":[[20,5]]},"283":{"position":[[31,5]]},"289":{"position":[[76,5]]},"312":{"position":[[0,6]]},"318":{"position":[[5,6]]},"336":{"position":[[11,9]]},"338":{"position":[[8,6]]},"408":{"position":[[32,5]]},"434":{"position":[[6,5]]},"450":{"position":[[5,9]]},"454":{"position":[[8,9]]},"467":{"position":[[11,9]]},"938":{"position":[[0,6]]}}}],["multipl",{"_index":59,"t":{"408":{"position":[[43,8]]}}}],["name",{"_index":115,"t":{"964":{"position":[[0,4]]}}}],["operational_set",{"_index":116,"t":{"972":{"position":[[0,20]]}}}],["output",{"_index":21,"t":{"81":{"position":[[0,6]]}}}],["power_adjustment_const",{"_index":117,"t":{"995":{"position":[[0,25]]}}}],["powerlossfactor",{"_index":119,"t":{"1010":{"position":[[0,15]]}}}],["pressur",{"_index":57,"t":{"399":{"position":[[12,8]]},"408":{"position":[[64,9]]}}}],["pressure_control",{"_index":118,"t":{"1003":{"position":[[0,16]]}}}],["pump",{"_index":33,"t":{"177":{"position":[[0,4]]},"180":{"position":[[0,4]]},"318":{"position":[[0,4]]},"450":{"position":[[0,4]]},"1040":{"position":[[0,5]]}}}],["python",{"_index":2,"t":{"8":{"position":[[0,6]]}}}],["rate",{"_index":121,"t":{"1026":{"position":[[0,4]]}}}],["rate_fract",{"_index":123,"t":{"1067":{"position":[[0,14]]}}}],["rate_per_stream",{"_index":120,"t":{"1018":{"position":[[0,15]]}}}],["refer",{"_index":1,"t":{"1":{"position":[[4,9]]},"466":{"position":[[0,9]]},"500":{"position":[[4,9]]}}}],["regular",{"_index":122,"t":{"1050":{"position":[[0,10]]}}}],["sampl",{"_index":36,"t":{"203":{"position":[[0,7]]}}}],["seri",{"_index":62,"t":{"420":{"position":[[5,6]]}}}],["set",{"_index":30,"t":{"151":{"position":[[0,3]]},"293":{"position":[[10,4]]}}}],["simpl",{"_index":32,"t":{"153":{"position":[[0,6]]}}}],["simplifi",{"_index":55,"t":{"382":{"position":[[0,10]]}}}],["singl",{"_index":63,"t":{"430":{"position":[[0,6]]}}}],["speed",{"_index":54,"t":{"380":{"position":[[9,5]]},"382":{"position":[[20,5]]},"399":{"position":[[6,5]]},"408":{"position":[[9,5]]},"430":{"position":[[7,5]]}}}],["stage",{"_index":125,"t":{"1090":{"position":[[0,6]]}}}],["start",{"_index":124,"t":{"1074":{"position":[[0,5]]},"1460":{"position":[[4,7]]},"1478":{"position":[[4,7]]}}}],["stream",{"_index":60,"t":{"408":{"position":[[52,7]]},"1082":{"position":[[0,6]]},"1128":{"position":[[0,7]]}}}],["suction_pressur",{"_index":127,"t":{"1112":{"position":[[0,16]]}}}],["tabular",{"_index":35,"t":{"197":{"position":[[0,7]]},"338":{"position":[[0,7]]}}}],["theori",{"_index":65,"t":{"448":{"position":[[0,6]]}}}],["time",{"_index":61,"t":{"420":{"position":[[0,4]]}}}],["time_seri",{"_index":126,"t":{"1102":{"position":[[0,11]]}}}],["total_system_r",{"_index":128,"t":{"1120":{"position":[[0,17]]}}}],["train",{"_index":52,"t":{"346":{"position":[[11,5]]},"380":{"position":[[26,5]]},"382":{"position":[[37,5]]},"408":{"position":[[26,5]]},"430":{"position":[[24,5]]}}}],["troubleshoot",{"_index":7,"t":{"12":{"position":[[6,15]]}}}],["turbin",{"_index":67,"t":{"454":{"position":[[0,7]]}}}],["turbine_effici",{"_index":130,"t":{"1143":{"position":[[0,20]]}}}],["turbine_load",{"_index":129,"t":{"1136":{"position":[[0,12]]}}}],["turbine_model",{"_index":131,"t":{"1150":{"position":[[0,13]]}}}],["type",{"_index":44,"t":{"252":{"position":[[5,5]]},"346":{"position":[[17,5]]},"1182":{"position":[[0,4]]}}}],["unit",{"_index":132,"t":{"1157":{"position":[[0,5]]}}}],["up",{"_index":31,"t":{"151":{"position":[[4,2]]}}}],["upstream_pressure_control",{"_index":133,"t":{"1174":{"position":[[0,25]]}}}],["usag",{"_index":48,"t":{"275":{"position":[[18,5]]},"281":{"position":[[14,5]]},"283":{"position":[[25,5]]},"289":{"position":[[70,5]]}}}],["v7",{"_index":13,"t":{"46":{"position":[[0,2]]}}}],["v7.0",{"_index":135,"t":{"1211":{"position":[[6,4]]}}}],["v7.1",{"_index":136,"t":{"1222":{"position":[[6,4]]}}}],["v7.2",{"_index":137,"t":{"1227":{"position":[[6,4]]}}}],["v7.3",{"_index":143,"t":{"1429":{"position":[[6,4]]}}}],["v7.4",{"_index":138,"t":{"1232":{"position":[[6,4]]}}}],["v7.5",{"_index":139,"t":{"1237":{"position":[[6,4]]}}}],["v7.6",{"_index":141,"t":{"1256":{"position":[[6,4]]}}}],["v8",{"_index":14,"t":{"46":{"position":[[6,2]]},"55":{"position":[[0,2]]}}}],["v8.0",{"_index":140,"t":{"1244":{"position":[[6,4]]}}}],["v8.1",{"_index":8,"t":{"26":{"position":[[0,4]]},"55":{"position":[[6,4]]},"1392":{"position":[[6,4]]}}}],["v8.2",{"_index":9,"t":{"26":{"position":[[8,4]]},"74":{"position":[[0,4]]},"1412":{"position":[[6,4]]}}}],["v8.3",{"_index":15,"t":{"68":{"position":[[0,4]]},"74":{"position":[[8,4]]},"1402":{"position":[[6,4]]}}}],["v8.4",{"_index":16,"t":{"68":{"position":[[8,4]]}}}],["v8.5",{"_index":18,"t":{"76":{"position":[[0,4]]}}}],["v8.6",{"_index":19,"t":{"76":{"position":[[8,4]]},"79":{"position":[[0,4]]}}}],["v8.7",{"_index":20,"t":{"79":{"position":[[8,4]]},"87":{"position":[[0,4]]}}}],["v8.8",{"_index":23,"t":{"87":{"position":[[8,4]]}}}],["variabl",{"_index":53,"t":{"380":{"position":[[0,8]]},"382":{"position":[[11,8]]},"408":{"position":[[0,8]]},"484":{"position":[[0,9]]},"1170":{"position":[[0,9]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":51,"t":{"289":{"position":[[0,62]]}}}],["venting_emitt",{"_index":134,"t":{"1196":{"position":[[0,16]]}}}],["version",{"_index":12,"t":{"45":{"position":[[16,8]]}}}],["workflow",{"_index":66,"t":{"452":{"position":[[7,8]]},"469":{"position":[[8,8]]}}}],["yaml",{"_index":4,"t":{"10":{"position":[[0,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"What method should I choose?","u":"/ecalc/docs/about/getting_started/","h":"#what-method-should-i-choose","p":1},{"i":4,"t":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":1},{"i":6,"t":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":1},{"i":14,"t":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":12},{"i":16,"t":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":12},{"i":18,"t":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":12},{"i":20,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":12},{"i":22,"t":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":12},{"i":24,"t":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":12},{"i":28,"t":"Modelling","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#modelling","p":26},{"i":29,"t":"YAML","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#yaml","p":26},{"i":31,"t":"Result","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#result","p":26},{"i":32,"t":"Operational settings used is now 1-based","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#operational-settings-used-is-now-1-based","p":26},{"i":34,"t":"Resampling of rates changed from forward filling to average rates","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#resampling-of-rates-changed-from-forward-filling-to-average-rates","p":26},{"i":36,"t":"LTP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#ltp-tsv-file","p":26},{"i":38,"t":"STP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#stp-tsv-file","p":26},{"i":40,"t":"Emissions, structure and order","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#emissions-structure-and-order","p":26},{"i":42,"t":"Behaviour","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#behaviour","p":26},{"i":43,"t":"Conditions","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#conditions","p":26},{"i":48,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#yaml-migration","p":46},{"i":49,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#migration-overview","p":46},{"i":51,"t":"Main differences","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#main-differences","p":46},{"i":53,"t":"CLI migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#cli-migration","p":46},{"i":57,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#yaml-migration","p":55},{"i":58,"t":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":55},{"i":60,"t":"1. Changes to TIME_SERIES","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#1-changes-to-time_series","p":55},{"i":62,"t":"2. Not possible to have different interpolation types for vectors within one file","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#2-not-possible-to-have-different-interpolation-types-for-vectors-within-one-file","p":55},{"i":64,"t":"3. Empty data in time series columns no longer allowed","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#3-empty-data-in-time-series-columns-no-longer-allowed","p":55},{"i":66,"t":"4. New LTP Category: STEAM-TURBINE-GENERATOR","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#4--new-ltp-category-steam-turbine-generator","p":55},{"i":72,"t":"Example Usage","u":"/ecalc/docs/about/getting_started/cli/","h":"#example-usage","p":70},{"i":77,"t":"Economics","u":"/ecalc/docs/about/migration_guides/v8-5_to_v8-6","h":"#economics","p":76},{"i":83,"t":"Decimals and significant digits in eCalc","u":"/ecalc/docs/about/miscellaneous/","h":"#decimals-and-significant-digits-in-ecalc","p":81},{"i":85,"t":"Quality control","u":"/ecalc/docs/about/miscellaneous/","h":"#quality-control","p":81},{"i":89,"t":"Yaml migration","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","h":"#yaml-migration","p":87},{"i":90,"t":"1. Changes to VENTING_EMITTERS","u":"/ecalc/docs/about/migration_guides/v8.7_to_v8.8","h":"#1-changes-to-venting_emitters","p":87},{"i":98,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#yaml-model-overview","p":96},{"i":100,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#time_series","p":96},{"i":102,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#facility_inputs","p":96},{"i":104,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#fuel_types","p":96},{"i":106,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#models","p":96},{"i":108,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#variables","p":96},{"i":110,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installations","p":96},{"i":112,"t":"Installation A","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-a","p":96},{"i":114,"t":"Installation B","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#installation-b","p":96},{"i":116,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#energy_usage_model","p":96},{"i":118,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#full-ecalc-yaml-model","p":96},{"i":120,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/advanced","h":"#input-files","p":96},{"i":124,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#format","p":122},{"i":126,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/facility_inputs/","h":"#supported-types","p":122},{"i":130,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#yaml-model-overview","p":128},{"i":132,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#time_series","p":128},{"i":134,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility_inputs","p":128},{"i":136,"t":"MODELS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#models","p":128},{"i":138,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#fuel_types","p":128},{"i":140,"t":"INSTALLATIONS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#installations","p":128},{"i":142,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#generatorsets","p":128},{"i":144,"t":"Full Model","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#full-model","p":128},{"i":146,"t":"Input Data","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#input-data","p":128},{"i":147,"t":"Facility resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#facility-resources","p":128},{"i":149,"t":"Timeseries resources","u":"/ecalc/docs/about/modelling/examples/drogon","h":"#timeseries-resources","p":128},{"i":155,"t":"YAML model overview","u":"/ecalc/docs/about/modelling/examples/simple","h":"#yaml-model-overview","p":153},{"i":157,"t":"TIME_SERIES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#time_series","p":153},{"i":159,"t":"FACILITY_INPUTS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#facility_inputs","p":153},{"i":161,"t":"FUEL_TYPES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuel_types","p":153},{"i":163,"t":"VARIABLES","u":"/ecalc/docs/about/modelling/examples/simple","h":"#variables","p":153},{"i":165,"t":"INSTALLATION","u":"/ecalc/docs/about/modelling/examples/simple","h":"#installation","p":153},{"i":167,"t":"GENERATORSETS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#generatorsets","p":153},{"i":169,"t":"FUELCONSUMERS","u":"/ecalc/docs/about/modelling/examples/simple","h":"#fuelconsumers","p":153},{"i":171,"t":"ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/modelling/examples/simple","h":"#energy_usage_model","p":153},{"i":173,"t":"Full eCalc YAML model","u":"/ecalc/docs/about/modelling/examples/simple","h":"#full-ecalc-yaml-model","p":153},{"i":175,"t":"Input files","u":"/ecalc/docs/about/modelling/examples/simple","h":"#input-files","p":153},{"i":178,"t":"Attention","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/","h":"","p":177},{"i":182,"t":"PUMP_CHART_SINGLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_single_speed","p":180},{"i":184,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements","p":180},{"i":186,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format","p":180},{"i":188,"t":"PUMP_CHART_VARIABLE_SPEED","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#pump_chart_variable_speed","p":180},{"i":189,"t":"Description","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#description","p":180},{"i":191,"t":"Header Requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#header-requirements-1","p":180},{"i":193,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#format-1","p":180},{"i":195,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_charts","h":"#examples","p":180},{"i":199,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#header-and-unit-requirements","p":197},{"i":201,"t":"Example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/tabular","h":"#example","p":197},{"i":205,"t":"Format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#format","p":203},{"i":207,"t":"Header requirements for the sampled compressor csv file","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#header-requirements-for-the-sampled-compressor-csv-file","p":203},{"i":209,"t":"Units","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#units","p":203},{"i":211,"t":"Example tables","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#example-tables","p":203},{"i":212,"t":"1D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#1d-example","p":203},{"i":214,"t":"3D example","u":"/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_model","h":"#3d-example","p":203},{"i":218,"t":"Setup file syntax","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#setup-file-syntax","p":216},{"i":220,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#examples","p":216},{"i":221,"t":"YAML format example","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#yaml-format-example","p":216},{"i":223,"t":"Full examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/","h":"#full-examples","p":216},{"i":227,"t":"Available operators","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#available-operators","p":225},{"i":229,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#examples","p":225},{"i":230,"t":"Combining data from different reservoir inputs","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#combining-data-from-different-reservoir-inputs","p":225},{"i":232,"t":"Model of additional rate","u":"/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressions","h":"#model-of-additional-rate","p":225},{"i":236,"t":"What is eCalc™?","u":"/ecalc/docs/about/","h":"#what-is-ecalc","p":234},{"i":238,"t":"Why should I use eCalc™?","u":"/ecalc/docs/about/","h":"#why-should-i-use-ecalc","p":234},{"i":240,"t":"How to use eCalc™?","u":"/ecalc/docs/about/","h":"#how-to-use-ecalc","p":234},{"i":244,"t":"ELECTRICITY2FUEL","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#electricity2fuel","p":242},{"i":246,"t":"Facility input format","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#facility-input-format","p":242},{"i":248,"t":"Example table","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#table-example","p":242},{"i":250,"t":"Header and unit requirements","u":"/ecalc/docs/about/modelling/setup/facility_inputs/generator_modelling","h":"#header-and-unit-requirements","p":242},{"i":254,"t":"Format","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#format","p":252},{"i":256,"t":"Example","u":"/ecalc/docs/about/modelling/setup/fuel_types","h":"#example","p":252},{"i":262,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series","p":260},{"i":264,"t":"Time intervals for variables/expressions and models","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals-for-variablesexpressions-and-models","p":260},{"i":266,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#format","p":260},{"i":268,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#example","p":260},{"i":269,"t":"General structure","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#general-structure","p":260},{"i":271,"t":"Referring to time series","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#referring-to-time-series-1","p":260},{"i":273,"t":"Time intervals","u":"/ecalc/docs/about/modelling/setup/installations/","h":"#time-intervals","p":260},{"i":277,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#format","p":275},{"i":279,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor","h":"#example","p":275},{"i":285,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#format","p":283},{"i":287,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_system","h":"#example","p":283},{"i":291,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":289},{"i":295,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format","p":293},{"i":297,"t":"Electricity2fuel function","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#electricity2fuel-function","p":293},{"i":298,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description","p":293},{"i":300,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#format-1","p":293},{"i":302,"t":"Power from shore","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#power-from-shore","p":293},{"i":303,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-1","p":293},{"i":305,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example","p":293},{"i":307,"t":"Heaters and boilers","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#heaters-and-boilers","p":293},{"i":308,"t":"Description","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#description-2","p":293},{"i":310,"t":"Example: Boiler as generator set","u":"/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculations","h":"#example-boiler-as-generator-set","p":293},{"i":314,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/","h":"#format","p":312},{"i":316,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/models/","h":"#supported-types","p":312},{"i":320,"t":"PUMP energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump-energy-usage-model","p":318},{"i":322,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format","p":318},{"i":324,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example","p":318},{"i":326,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units","p":318},{"i":328,"t":"PUMP_SYSTEM energy usage model","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#pump_system-energy-usage-model","p":318},{"i":330,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#format-1","p":318},{"i":332,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#example-1","p":318},{"i":334,"t":"Units","u":"/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculations","h":"#units-1","p":318},{"i":340,"t":"Format","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#format","p":338},{"i":342,"t":"Example","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#example","p":338},{"i":344,"t":"COMPRESSOR_TABULAR input type","u":"/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculations","h":"#compressor_tabular-input-type","p":338},{"i":350,"t":"User defined single speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-single-speed-compressor-chart","p":348},{"i":352,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format","p":348},{"i":354,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example","p":348},{"i":356,"t":"User defined variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#user-defined-variable-speed-compressor-chart","p":348},{"i":358,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-2","p":348},{"i":360,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-2","p":348},{"i":362,"t":"Generic compressor chart with predefined design point","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-predefined-design-point","p":348},{"i":364,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-4","p":348},{"i":366,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-4","p":348},{"i":368,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-5","p":348},{"i":370,"t":"Generic compressor chart with design point calculated from input data","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#generic-compressor-chart-with-design-point-calculated-from-input-data","p":348},{"i":372,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-5","p":348},{"i":374,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#example-6","p":348},{"i":376,"t":"Surge control margin for variable speed compressor chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#surge-control-margin-for-variable-speed-compressor-chart","p":348},{"i":378,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/","h":"#format-6","p":348},{"i":384,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#format","p":382},{"i":386,"t":"Simplified compressor train model with known compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-known-compressor-stages","p":382},{"i":388,"t":"Simplified compressor train model with unknown number of compressor stages","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#simplified-compressor-train-model-with-unknown-number-of-compressor-stages","p":382},{"i":390,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#examples","p":382},{"i":391,"t":"A (single) compressor with a user-defined variable speed compressor chart and fluid composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-compressor-with-a-user-defined-variable-speed-compressor-chart-and-fluid-composition","p":382},{"i":393,"t":"A (single) turbine driven compressor with a generic compressor chart with design point and predefined composition","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-single-turbine-driven-compressor-with-a-generic-compressor-chart-with-design-point-and-predefined-composition","p":382},{"i":395,"t":"A compressor train with two stages where the first stage has unknown spec while the second has a predefined chart","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-with-two-stages-where-the-first-stage-has-unknown-spec-while-the-second-has-a-predefined-chart","p":382},{"i":397,"t":"A compressor train where the number of stages are unknown","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_model","h":"#a-compressor-train-where-the-number-of-stages-are-unknown","p":382},{"i":400,"t":"Theory","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#theory","p":399},{"i":402,"t":"Control modelling in eCalc™","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#control-modelling-in-ecalc","p":399},{"i":404,"t":"Pressure control methods - choking options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---choking-options","p":399},{"i":406,"t":"Pressure control methods - recirculation options","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/","h":"#pressure-control-methods---recirculation-options","p":399},{"i":410,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#format","p":408},{"i":412,"t":"Keyword usage","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#keyword-usage","p":408},{"i":414,"t":"INTERSTAGE_PRESSURE_CONTROL","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#interstage_pressure_control","p":408},{"i":416,"t":"Fixed pressure control","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#fixed-pressure-control","p":408},{"i":418,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressures","h":"#example","p":408},{"i":422,"t":"Supported types","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#supported-types","p":420},{"i":424,"t":"Format","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#format","p":420},{"i":426,"t":"Requirements","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#requirements","p":420},{"i":428,"t":"Example","u":"/ecalc/docs/about/modelling/setup/time_series","h":"#example","p":420},{"i":432,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_model","h":"#format","p":430},{"i":436,"t":"Fluid model using predefined composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-using-predefined-composition","p":434},{"i":438,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format","p":434},{"i":440,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#examples","p":434},{"i":442,"t":"Fluid model with user-specified composition","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#fluid-model-with-user-specified-composition","p":434},{"i":444,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#format-1","p":434},{"i":446,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/fluid_model","h":"#example","p":434},{"i":456,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format","p":454},{"i":458,"t":"Example","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#example","p":454},{"i":460,"t":"Combining a compressor train and a turbine into one model","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#combining-a-compressor-train-and-a-turbine-into-one-model","p":454},{"i":462,"t":"Format","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#format-1","p":454},{"i":464,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/models/turbine_modeling","h":"#examples","p":454},{"i":470,"t":"Simplified Process Flow Diagram","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#simplified-process-flow-diagram","p":469},{"i":472,"t":"Workflow","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow","p":469},{"i":473,"t":"Workflow Explanation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#workflow-explanation","p":469},{"i":474,"t":"Required Subsurface Profiles","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#required-subsurface-profiles","p":469},{"i":476,"t":"Facility Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#facility-information","p":469},{"i":478,"t":"Consumer Information","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#consumer-information","p":469},{"i":480,"t":"Validation","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#validation","p":469},{"i":482,"t":"Calibration","u":"/ecalc/docs/about/modelling/workflow/generic_workflow","h":"#calibration","p":469},{"i":486,"t":"Defining variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#defining-variables","p":484},{"i":488,"t":"Format","u":"/ecalc/docs/about/modelling/setup/variables","h":"#format","p":484},{"i":490,"t":"Examples","u":"/ecalc/docs/about/modelling/setup/variables","h":"#examples","p":484},{"i":492,"t":"Using variables","u":"/ecalc/docs/about/modelling/setup/variables","h":"#using-variables","p":484},{"i":494,"t":"Example","u":"/ecalc/docs/about/modelling/setup/variables","h":"#example","p":484},{"i":498,"t":"Top level keywords","u":"/ecalc/docs/about/references/keywords/","h":"#top-level-keywords","p":496},{"i":504,"t":"ecalc run","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-run","p":502},{"i":506,"t":"ecalc selftest","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-selftest","p":502},{"i":508,"t":"ecalc show","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show","p":502},{"i":510,"t":"ecalc show results","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-results","p":502},{"i":512,"t":"ecalc show yaml","u":"/ecalc/docs/about/references/cli_reference","h":"#ecalc-show-yaml","p":502},{"i":516,"t":"Description","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#description","p":514},{"i":518,"t":"Format","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#format","p":514},{"i":520,"t":"Example","u":"/ecalc/docs/about/references/keywords/CATEGORY","h":"#example","p":514},{"i":524,"t":"Description","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#description","p":522},{"i":526,"t":"Format","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#format","p":522},{"i":528,"t":"Example","u":"/ecalc/docs/about/references/keywords/ADJUSTMENT","h":"#example","p":522},{"i":532,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#description","p":530},{"i":534,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#format","p":530},{"i":536,"t":"Example","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_MODEL","h":"#example","p":530},{"i":540,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#description","p":538},{"i":542,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#format","p":538},{"i":544,"t":"Example","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODEL","h":"#example","p":538},{"i":548,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#description","p":546},{"i":550,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#format","p":546},{"i":552,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONDITION","h":"#example","p":546},{"i":556,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#description","p":554},{"i":558,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#format","p":554},{"i":560,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSTANT","h":"#example","p":554},{"i":564,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONDITIONS","h":"#description","p":562},{"i":566,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONDITIONS","h":"#format","p":562},{"i":570,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#description","p":568},{"i":572,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#format","p":568},{"i":574,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSUMERS","h":"#example","p":568},{"i":578,"t":"Description","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#description","p":576},{"i":580,"t":"Format","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#format","p":576},{"i":582,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#example-1","p":576},{"i":584,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEM","h":"#example-2-detailed","p":576},{"i":588,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#description","p":586},{"i":590,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#format","p":586},{"i":592,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPE","h":"#example","p":586},{"i":596,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#description","p":594},{"i":598,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#format","p":594},{"i":600,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNIT","h":"#example","p":594},{"i":603,"t":"Description","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#description","p":602},{"i":605,"t":"Format","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#format","p":602},{"i":607,"t":"Example","u":"/ecalc/docs/about/references/keywords/CURVE","h":"#example","p":602},{"i":611,"t":"Description","u":"/ecalc/docs/about/references/keywords/CROSSOVER","h":"#description","p":609},{"i":613,"t":"Example","u":"/ecalc/docs/about/references/keywords/CROSSOVER","h":"#example","p":609},{"i":617,"t":"Description","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#description","p":615},{"i":619,"t":"Format","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#format","p":615},{"i":621,"t":"Example","u":"/ecalc/docs/about/references/keywords/DISCHARGE_PRESSURE","h":"#example","p":615},{"i":625,"t":"Description","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#description","p":623},{"i":627,"t":"Format","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#format","p":623},{"i":629,"t":"Example","u":"/ecalc/docs/about/references/keywords/DIRECT_EMITTERS","h":"#example","p":623},{"i":633,"t":"Description","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#description","p":631},{"i":635,"t":"Use in Single speed compressor train model","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#use-in-single-speed-compressor-train-model","p":631},{"i":636,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#format","p":631},{"i":638,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#example","p":631},{"i":640,"t":"Use in Variable speed compressor train model","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model","p":631},{"i":641,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#format-1","p":631},{"i":643,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#example-1","p":631},{"i":645,"t":"Use in Variable speed compressor train model with multiple streams and pressures","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#use-in-variable-speed-compressor-train-model-with-multiple-streams-and-pressures","p":631},{"i":646,"t":"Format","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#format-2","p":631},{"i":648,"t":"Example","u":"/ecalc/docs/about/references/keywords/CONTROL_MARGIN","h":"#example-2","p":631},{"i":652,"t":"Description","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#description","p":650},{"i":654,"t":"Format","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#format","p":650},{"i":656,"t":"Example","u":"/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROL","h":"#example","p":650},{"i":660,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#description","p":658},{"i":662,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#format","p":658},{"i":664,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_NAME","h":"#example","p":658},{"i":668,"t":"Description","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#description","p":666},{"i":670,"t":"Format","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#format","p":666},{"i":672,"t":"Example","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example","p":666},{"i":673,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example-1","p":666},{"i":675,"t":"Example 2","u":"/ecalc/docs/about/references/keywords/ELECTRICITY2FUEL","h":"#example-2","p":666},{"i":678,"t":"Description","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#description","p":677},{"i":680,"t":"Format","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#format","p":677},{"i":682,"t":"Example","u":"/ecalc/docs/about/references/keywords/CURVES","h":"#example","p":677},{"i":685,"t":"Description","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#description","p":684},{"i":687,"t":"Format","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#format","p":684},{"i":688,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#compressors","p":684},{"i":690,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#pumps","p":684},{"i":692,"t":"Example","u":"/ecalc/docs/about/references/keywords/EFFICIENCY","h":"#example","p":684},{"i":696,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#description","p":694},{"i":698,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#format","p":694},{"i":700,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION","h":"#example","p":694},{"i":704,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#description","p":702},{"i":706,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#format","p":702},{"i":708,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSION_RATE","h":"#example","p":702},{"i":712,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#description","p":710},{"i":714,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#format","p":710},{"i":716,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMITTER_MODEL","h":"#example","p":710},{"i":720,"t":"Description","u":"/ecalc/docs/about/references/keywords/END","h":"#description","p":718},{"i":722,"t":"Format","u":"/ecalc/docs/about/references/keywords/END","h":"#format","p":718},{"i":724,"t":"Example","u":"/ecalc/docs/about/references/keywords/END","h":"#example","p":718},{"i":728,"t":"Description","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#description","p":726},{"i":730,"t":"Format","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#format","p":726},{"i":732,"t":"Example","u":"/ecalc/docs/about/references/keywords/EMISSIONS","h":"#example","p":726},{"i":736,"t":"Description","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#description","p":734},{"i":738,"t":"Format","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#format","p":734},{"i":740,"t":"Requirements","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#requirements","p":734},{"i":742,"t":"Example","u":"/ecalc/docs/about/references/keywords/EXTRAPOLATION","h":"#example","p":734},{"i":746,"t":"Description","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","h":"#description","p":744},{"i":748,"t":"Temporal energy usage model","u":"/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODEL","h":"#temporal-energy-usage-model","p":744},{"i":752,"t":"Description","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#description","p":750},{"i":754,"t":"Format","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#format","p":750},{"i":756,"t":"Example","u":"/ecalc/docs/about/references/keywords/ENERGYFUNCTION","h":"#example","p":750},{"i":760,"t":"Description","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","h":"#description","p":758},{"i":762,"t":"Supported types","u":"/ecalc/docs/about/references/keywords/FACILITY_INPUTS","h":"#supported-types","p":758},{"i":766,"t":"Description","u":"/ecalc/docs/about/references/keywords/FILE","h":"#description","p":764},{"i":768,"t":"Format","u":"/ecalc/docs/about/references/keywords/FILE","h":"#format","p":764},{"i":770,"t":"Example","u":"/ecalc/docs/about/references/keywords/FILE","h":"#example","p":764},{"i":774,"t":"Description","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#description","p":772},{"i":776,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-adjustment","p":772},{"i":778,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-emissions","p":772},{"i":780,"t":"Format","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#format","p":772},{"i":782,"t":"Example","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#example","p":772},{"i":783,"t":"Use in ADJUSTMENT","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-adjustment-1","p":772},{"i":785,"t":"Use in EMISSIONS","u":"/ecalc/docs/about/references/keywords/FACTOR","h":"#use-in-emissions-1","p":772},{"i":789,"t":"Description","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#description","p":787},{"i":791,"t":"Format","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#format","p":787},{"i":793,"t":"Example","u":"/ecalc/docs/about/references/keywords/FLUID_DENSITY","h":"#example","p":787},{"i":796,"t":"Description","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#description","p":795},{"i":798,"t":"Format","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#format","p":795},{"i":800,"t":"Example","u":"/ecalc/docs/about/references/keywords/FLUID_MODEL","h":"#example","p":795},{"i":804,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#description","p":802},{"i":806,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#format","p":802},{"i":808,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUEL","h":"#example","p":802},{"i":812,"t":"Description","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#description","p":810},{"i":814,"t":"Format","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#format","p":810},{"i":816,"t":"Example","u":"/ecalc/docs/about/references/keywords/EXPRESSION","h":"#example","p":810},{"i":820,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUEL_TYPES","h":"#description","p":818},{"i":824,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#description","p":822},{"i":826,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#format","p":822},{"i":828,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUELRATE","h":"#example","p":822},{"i":832,"t":"Description","u":"/ecalc/docs/about/references/keywords/GENERATORSETS","h":"#description","p":830},{"i":836,"t":"Description","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#description","p":834},{"i":838,"t":"Format","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#format","p":834},{"i":840,"t":"Example","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#example","p":834},{"i":841,"t":"Basic usage","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#basic-usage","p":834},{"i":843,"t":"With time dependency","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#with-time-dependency","p":834},{"i":845,"t":"Full example","u":"/ecalc/docs/about/references/keywords/HCEXPORT","h":"#full-example","p":834},{"i":849,"t":"Description","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#description","p":847},{"i":851,"t":"Format","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#format","p":847},{"i":853,"t":"Example","u":"/ecalc/docs/about/references/keywords/HEAD_MARGIN","h":"#example","p":847},{"i":856,"t":"Description","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#description","p":855},{"i":858,"t":"Format","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#format","p":855},{"i":859,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#compressors","p":855},{"i":861,"t":"PUMPS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#pumps","p":855},{"i":863,"t":"Example","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#example","p":855},{"i":864,"t":"COMPRESSORS","u":"/ecalc/docs/about/references/keywords/HEAD","h":"#compressors-1","p":855},{"i":868,"t":"Description","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#description","p":866},{"i":870,"t":"Format","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#format","p":866},{"i":872,"t":"Example","u":"/ecalc/docs/about/references/keywords/FUELCONSUMERS","h":"#example","p":866},{"i":876,"t":"Description","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#description","p":874},{"i":878,"t":"Format","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#format","p":874},{"i":880,"t":"Example","u":"/ecalc/docs/about/references/keywords/INLET_TEMPERATURE","h":"#example","p":874},{"i":883,"t":"Description","u":"/ecalc/docs/about/references/keywords/include","h":"#description","p":882},{"i":885,"t":"Format","u":"/ecalc/docs/about/references/keywords/include","h":"#format","p":882},{"i":887,"t":"Example 1 - include map/object into list item","u":"/ecalc/docs/about/references/keywords/include","h":"#example-1---include-mapobject-into-list-item","p":882},{"i":889,"t":"Example 2 - include map/object into object value","u":"/ecalc/docs/about/references/keywords/include","h":"#example-2---include-mapobject-into-object-value","p":882},{"i":891,"t":"Example 3 - include list into object value","u":"/ecalc/docs/about/references/keywords/include","h":"#example-3---include-list-into-object-value","p":882},{"i":895,"t":"Description","u":"/ecalc/docs/about/references/keywords/INSTALLATIONS","h":"#description","p":893},{"i":899,"t":"Description","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#description","p":897},{"i":901,"t":"Format","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#format","p":897},{"i":903,"t":"Example","u":"/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTOR","h":"#example","p":897},{"i":907,"t":"Description","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#description","p":905},{"i":909,"t":"Format","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#format","p":905},{"i":911,"t":"Requirements","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#requirements","p":905},{"i":913,"t":"Example","u":"/ecalc/docs/about/references/keywords/INTERPOLATION_TYPE","h":"#example","p":905},{"i":917,"t":"Description","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#description","p":915},{"i":919,"t":"Use in MODELS","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-models","p":915},{"i":921,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSURE","h":"#use-in-energy_usage_model","p":915},{"i":924,"t":"Description","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#description","p":923},{"i":926,"t":"Format","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#format","p":923},{"i":928,"t":"Example","u":"/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUE","h":"#example","p":923},{"i":932,"t":"Description","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#description","p":930},{"i":934,"t":"Functionality","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#functionality","p":930},{"i":936,"t":"Format","u":"/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSURE","h":"#format","p":930},{"i":940,"t":"Description","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#description","p":938},{"i":942,"t":"Format","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#format","p":938},{"i":944,"t":"Supported Model types","u":"/ecalc/docs/about/references/keywords/MODELS","h":"#supported-model-types","p":938},{"i":948,"t":"Description","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#description","p":946},{"i":950,"t":"Format","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#format","p":946},{"i":952,"t":"Example","u":"/ecalc/docs/about/references/keywords/LOAD","h":"#example","p":946},{"i":956,"t":"Description","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#description","p":954},{"i":958,"t":"Functionality","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#functionality","p":954},{"i":960,"t":"Format","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#format","p":954},{"i":962,"t":"Example","u":"/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGE","h":"#example","p":954},{"i":966,"t":"Description","u":"/ecalc/docs/about/references/keywords/NAME","h":"#description","p":964},{"i":968,"t":"Format","u":"/ecalc/docs/about/references/keywords/NAME","h":"#format","p":964},{"i":970,"t":"Example","u":"/ecalc/docs/about/references/keywords/NAME","h":"#example","p":964},{"i":974,"t":"Description","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#description","p":972},{"i":976,"t":"RATES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#rates","p":972},{"i":978,"t":"RATE_FRACTIONS","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#rate_fractions","p":972},{"i":980,"t":"SUCTION_PRESSURES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#suction_pressures","p":972},{"i":982,"t":"DISCHARGE_PRESSURES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#discharge_pressures","p":972},{"i":984,"t":"FLUID_DENSITIES","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#fluid_densities","p":972},{"i":986,"t":"CROSSOVER","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#crossover","p":972},{"i":988,"t":"Example 1:","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example-1","p":972},{"i":990,"t":"Example 2:","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example-2","p":972},{"i":992,"t":"Format","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#format","p":972},{"i":993,"t":"Example","u":"/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGS","h":"#example","p":972},{"i":997,"t":"Description","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#description","p":995},{"i":999,"t":"Format","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#format","p":995},{"i":1001,"t":"Example","u":"/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANT","h":"#example","p":995},{"i":1004,"t":"Description","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#description","p":1003},{"i":1006,"t":"Format","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#format","p":1003},{"i":1008,"t":"Example","u":"/ecalc/docs/about/references/keywords/PRESSURE_CONTROL","h":"#example","p":1003},{"i":1012,"t":"Description","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#description","p":1010},{"i":1014,"t":"Format","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#format","p":1010},{"i":1016,"t":"Example","u":"/ecalc/docs/about/references/keywords/POWERLOSSFACTOR","h":"#example","p":1010},{"i":1020,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#description","p":1018},{"i":1022,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#format","p":1018},{"i":1024,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE_PER_STREAM","h":"#example","p":1018},{"i":1028,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE","h":"#description","p":1026},{"i":1030,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE","h":"#format","p":1026},{"i":1032,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE","h":"#example","p":1026},{"i":1034,"t":"Use in EMISSION for VENTING_EMITTERS (from eCalc v8.8)","u":"/ecalc/docs/about/references/keywords/RATE","h":"#use-in-emission-for-venting_emitters-from-ecalc-v88","p":1026},{"i":1036,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE","h":"#format-1","p":1026},{"i":1038,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE","h":"#example-1","p":1026},{"i":1042,"t":"Description","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#description","p":1040},{"i":1044,"t":"Format","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#format","p":1040},{"i":1046,"t":"Example 1","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#example-1","p":1040},{"i":1048,"t":"Example 2 (Detailed)","u":"/ecalc/docs/about/references/keywords/PUMPS","h":"#example-2-detailed","p":1040},{"i":1052,"t":"Description","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#description","p":1050},{"i":1054,"t":"Use in a DIRECT ENERGY USAGE MODEL","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#use-in-a-direct-energy-usage-model","p":1050},{"i":1056,"t":"Reporting","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#reporting","p":1050},{"i":1058,"t":"Format","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#format","p":1050},{"i":1060,"t":"Example","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#example","p":1050},{"i":1061,"t":"Constant regularity","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#constant-regularity","p":1050},{"i":1063,"t":"Regularity from time series data","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#regularity-from-time-series-data","p":1050},{"i":1065,"t":"Special: Combining calendar and stream day rates","u":"/ecalc/docs/about/references/keywords/REGULARITY","h":"#special-combining-calendar-and-stream-day-rates","p":1050},{"i":1068,"t":"Description","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#description","p":1067},{"i":1070,"t":"Format","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#format","p":1067},{"i":1072,"t":"Example","u":"/ecalc/docs/about/references/keywords/RATE_FRACTIONS","h":"#example","p":1067},{"i":1076,"t":"Description","u":"/ecalc/docs/about/references/keywords/START","h":"#description","p":1074},{"i":1078,"t":"Format","u":"/ecalc/docs/about/references/keywords/START","h":"#format","p":1074},{"i":1080,"t":"Example","u":"/ecalc/docs/about/references/keywords/START","h":"#example","p":1074},{"i":1084,"t":"Description","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#description","p":1082},{"i":1086,"t":"Format","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#format","p":1082},{"i":1088,"t":"Example","u":"/ecalc/docs/about/references/keywords/STREAM","h":"#example","p":1082},{"i":1092,"t":"Description","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#description","p":1090},{"i":1094,"t":"Format","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#format","p":1090},{"i":1096,"t":"Use in VARIABLE_SPEED_COMPRESSOR_TRAIN_MULTIPLE_STREAMS_AND_PRESSURES","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#use-in-variable_speed_compressor_train_multiple_streams_and_pressures","p":1090},{"i":1098,"t":"Format","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#format-1","p":1090},{"i":1100,"t":"Example","u":"/ecalc/docs/about/references/keywords/STAGES","h":"#example","p":1090},{"i":1104,"t":"Description","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#description","p":1102},{"i":1106,"t":"Required attributes","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#required-attributes","p":1102},{"i":1108,"t":"Attributes dependent on time series type","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#attributes-dependent-on-time-series-type","p":1102},{"i":1110,"t":"Example","u":"/ecalc/docs/about/references/keywords/TIME_SERIES","h":"#example","p":1102},{"i":1114,"t":"Description","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#description","p":1112},{"i":1116,"t":"Format","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#format","p":1112},{"i":1118,"t":"Example","u":"/ecalc/docs/about/references/keywords/SUCTION_PRESSURE","h":"#example","p":1112},{"i":1122,"t":"Description","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#description","p":1120},{"i":1124,"t":"Format","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#format","p":1120},{"i":1126,"t":"Example","u":"/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATE","h":"#example","p":1120},{"i":1130,"t":"Description","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#description","p":1128},{"i":1132,"t":"Format","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#format","p":1128},{"i":1134,"t":"Example","u":"/ecalc/docs/about/references/keywords/STREAMS","h":"#example","p":1128},{"i":1137,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#description","p":1136},{"i":1139,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#format","p":1136},{"i":1141,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_LOAD","h":"#example","p":1136},{"i":1144,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#description","p":1143},{"i":1146,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#format","p":1143},{"i":1148,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIES","h":"#example","p":1143},{"i":1151,"t":"Description","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#description","p":1150},{"i":1153,"t":"Format","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#format","p":1150},{"i":1155,"t":"Example","u":"/ecalc/docs/about/references/keywords/TURBINE_MODEL","h":"#example","p":1150},{"i":1158,"t":"Description","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#description","p":1157},{"i":1160,"t":"Format","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#format","p":1157},{"i":1161,"t":"Pumps","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#pumps","p":1157},{"i":1163,"t":"Compressors","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#compressors","p":1157},{"i":1165,"t":"Example","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#example","p":1157},{"i":1166,"t":"Pumps","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#pumps-1","p":1157},{"i":1168,"t":"Compressors","u":"/ecalc/docs/about/references/keywords/UNITS","h":"#compressors-1","p":1157},{"i":1172,"t":"Description","u":"/ecalc/docs/about/references/keywords/VARIABLES","h":"#description","p":1170},{"i":1176,"t":"Description","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#description","p":1174},{"i":1178,"t":"Format","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#format","p":1174},{"i":1180,"t":"Example","u":"/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROL","h":"#example","p":1174},{"i":1184,"t":"Description","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#description","p":1182},{"i":1186,"t":"Use in FACILITY_INPUTS","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-facility_inputs","p":1182},{"i":1188,"t":"Use in TIME_SERIES","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-time_series","p":1182},{"i":1190,"t":"Use in ENERGY_USAGE_MODEL","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-energy_usage_model","p":1182},{"i":1192,"t":"Use in MODELS","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#use-in-models","p":1182},{"i":1194,"t":"Format","u":"/ecalc/docs/about/references/keywords/TYPE","h":"#format","p":1182},{"i":1198,"t":"eCalc version 8.7 and before: Description","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#ecalc-version-87-and-before-description","p":1196},{"i":1200,"t":"Format","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#format","p":1196},{"i":1202,"t":"Example","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#example","p":1196},{"i":1204,"t":"eCalc from version 8.8: Description","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#ecalc-from-version-88-description","p":1196},{"i":1206,"t":"Format","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#format-1","p":1196},{"i":1208,"t":"Example","u":"/ecalc/docs/about/references/keywords/VENTING_EMITTERS","h":"#example-1","p":1196},{"i":1212,"t":"Features","u":"/ecalc/docs/changelog/v7-0-release","h":"#features","p":1211},{"i":1214,"t":"Fixes","u":"/ecalc/docs/changelog/v7-0-release","h":"#fixes","p":1211},{"i":1216,"t":"CLI","u":"/ecalc/docs/changelog/v7-0-release","h":"#cli","p":1211},{"i":1219,"t":"New Features","u":"/ecalc/docs/changelog/latest","h":"#new-features","p":1218},{"i":1220,"t":"Fixes","u":"/ecalc/docs/changelog/latest","h":"#fixes","p":1218},{"i":1221,"t":"Breaking changes","u":"/ecalc/docs/changelog/latest","h":"#breaking-changes","p":1218},{"i":1223,"t":"Features","u":"/ecalc/docs/changelog/v7-1-release","h":"#features","p":1222},{"i":1225,"t":"CLI","u":"/ecalc/docs/changelog/v7-1-release","h":"#cli","p":1222},{"i":1228,"t":"Features","u":"/ecalc/docs/changelog/v7-2-release","h":"#features","p":1227},{"i":1230,"t":"Fixes","u":"/ecalc/docs/changelog/v7-2-release","h":"#fixes","p":1227},{"i":1233,"t":"Features","u":"/ecalc/docs/changelog/v7-4-release","h":"#features","p":1232},{"i":1235,"t":"Fixes","u":"/ecalc/docs/changelog/v7-4-release","h":"#fixes","p":1232},{"i":1238,"t":"Features","u":"/ecalc/docs/changelog/v7-5-release","h":"#features","p":1237},{"i":1240,"t":"Fixes","u":"/ecalc/docs/changelog/v7-5-release","h":"#fixes","p":1237},{"i":1242,"t":"CLI","u":"/ecalc/docs/changelog/v7-5-release","h":"#cli","p":1237},{"i":1246,"t":"New features","u":"/ecalc/docs/changelog/v8.0-release","h":"#new-features","p":1244},{"i":1248,"t":"Experimental features","u":"/ecalc/docs/changelog/v8.0-release","h":"#experimental-features","p":1244},{"i":1250,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.0-release","h":"#breaking-changes","p":1244},{"i":1252,"t":"YAML","u":"/ecalc/docs/changelog/v8.0-release","h":"#yaml","p":1244},{"i":1254,"t":"CLI","u":"/ecalc/docs/changelog/v8.0-release","h":"#cli","p":1244},{"i":1257,"t":"Breaking changes","u":"/ecalc/docs/changelog/v7-6-release","h":"#breaking-changes","p":1256},{"i":1260,"t":"8.11.0 (2024-03-18)","u":"/ecalc/docs/changelog/","h":"#8110-2024-03-18","p":1259},{"i":1261,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features","p":1259},{"i":1263,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes","p":1259},{"i":1265,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation","p":1259},{"i":1267,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores","p":1259},{"i":1269,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring","p":1259},{"i":1271,"t":"8.10.0 (2024-02-16)","u":"/ecalc/docs/changelog/","h":"#8100-2024-02-16","p":1259},{"i":1272,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-1","p":1259},{"i":1274,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-1","p":1259},{"i":1276,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-1","p":1259},{"i":1278,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-1","p":1259},{"i":1280,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests","p":1259},{"i":1282,"t":"8.9.0 (2024-01-11)","u":"/ecalc/docs/changelog/","h":"#890-2024-01-11","p":1259},{"i":1283,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-2","p":1259},{"i":1285,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-2","p":1259},{"i":1287,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-2","p":1259},{"i":1289,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-2","p":1259},{"i":1291,"t":"8.8.0 (2023-12-27)","u":"/ecalc/docs/changelog/","h":"#880-2023-12-27","p":1259},{"i":1292,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes","p":1259},{"i":1294,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-1","p":1259},{"i":1296,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-3","p":1259},{"i":1298,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-3","p":1259},{"i":1300,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-3","p":1259},{"i":1302,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-3","p":1259},{"i":1304,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-1","p":1259},{"i":1306,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration","p":1259},{"i":1308,"t":"8.7.0 (2023-12-05)","u":"/ecalc/docs/changelog/","h":"#870-2023-12-05","p":1259},{"i":1309,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-4","p":1259},{"i":1311,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-4","p":1259},{"i":1313,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-4","p":1259},{"i":1315,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-4","p":1259},{"i":1317,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-1","p":1259},{"i":1319,"t":"8.7.0","u":"/ecalc/docs/changelog/","h":"#870","p":1259},{"i":1320,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-1","p":1259},{"i":1322,"t":"8.6.0 (2023-11-21)","u":"/ecalc/docs/changelog/","h":"#860-2023-11-21","p":1259},{"i":1323,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-2","p":1259},{"i":1325,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-2","p":1259},{"i":1327,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-5","p":1259},{"i":1329,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-5","p":1259},{"i":1331,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-5","p":1259},{"i":1333,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-5","p":1259},{"i":1335,"t":"8.5.0 (2023-10-30)","u":"/ecalc/docs/changelog/","h":"#850-2023-10-30","p":1259},{"i":1336,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-3","p":1259},{"i":1338,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-6","p":1259},{"i":1340,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-6","p":1259},{"i":1342,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-6","p":1259},{"i":1344,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-6","p":1259},{"i":1346,"t":"8.4.0 (2023-09-25)","u":"/ecalc/docs/changelog/","h":"#840-2023-09-25","p":1259},{"i":1347,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-4","p":1259},{"i":1349,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-7","p":1259},{"i":1351,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-7","p":1259},{"i":1353,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-7","p":1259},{"i":1355,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-7","p":1259},{"i":1357,"t":"8.3.0 (2023-08-11)","u":"/ecalc/docs/changelog/","h":"#830-2023-08-11","p":1259},{"i":1358,"t":"⚠ BREAKING CHANGES","u":"/ecalc/docs/changelog/","h":"#-breaking-changes-3","p":1259},{"i":1360,"t":"Features","u":"/ecalc/docs/changelog/","h":"#features-5","p":1259},{"i":1362,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-8","p":1259},{"i":1364,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-8","p":1259},{"i":1366,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-8","p":1259},{"i":1368,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-8","p":1259},{"i":1370,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-2","p":1259},{"i":1372,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-2","p":1259},{"i":1374,"t":"8.2.2 (2023-05-28)","u":"/ecalc/docs/changelog/","h":"#822-2023-05-28","p":1259},{"i":1375,"t":"Bug Fixes","u":"/ecalc/docs/changelog/","h":"#bug-fixes-9","p":1259},{"i":1377,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-3","p":1259},{"i":1379,"t":"Tests","u":"/ecalc/docs/changelog/","h":"#tests-3","p":1259},{"i":1381,"t":"Code Refactoring","u":"/ecalc/docs/changelog/","h":"#code-refactoring-9","p":1259},{"i":1383,"t":"Documentation","u":"/ecalc/docs/changelog/","h":"#documentation-9","p":1259},{"i":1385,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-9","p":1259},{"i":1387,"t":"8.2.1 (2023-05-09)","u":"/ecalc/docs/changelog/","h":"#821-2023-05-09","p":1259},{"i":1388,"t":"Miscellaneous Chores","u":"/ecalc/docs/changelog/","h":"#miscellaneous-chores-10","p":1259},{"i":1390,"t":"Continuous Integration","u":"/ecalc/docs/changelog/","h":"#continuous-integration-4","p":1259},{"i":1394,"t":"New features","u":"/ecalc/docs/changelog/v8.1-release","h":"#new-features","p":1392},{"i":1396,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.1-release","h":"#breaking-changes","p":1392},{"i":1398,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.1-release","h":"#input-yaml--resource-files","p":1392},{"i":1400,"t":"Output: LTP","u":"/ecalc/docs/changelog/v8.1-release","h":"#output-ltp","p":1392},{"i":1404,"t":"New Features","u":"/ecalc/docs/changelog/v8.3-release","h":"#new-features","p":1402},{"i":1406,"t":"Fixes","u":"/ecalc/docs/changelog/v8.3-release","h":"#fixes","p":1402},{"i":1408,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.3-release","h":"#breaking-changes","p":1402},{"i":1410,"t":"Input: YAML / Resource files","u":"/ecalc/docs/changelog/v8.3-release","h":"#input-yaml--resource-files","p":1402},{"i":1414,"t":"New features","u":"/ecalc/docs/changelog/v8.2-release","h":"#new-features","p":1412},{"i":1416,"t":"Fixes","u":"/ecalc/docs/changelog/v8.2-release","h":"#fixes","p":1412},{"i":1419,"t":"New Features","u":"/ecalc/docs/changelog/v8.10-release","h":"#new-features","p":1418},{"i":1420,"t":"Fixes","u":"/ecalc/docs/changelog/v8.10-release","h":"#fixes","p":1418},{"i":1422,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.10-release","h":"#breaking-changes","p":1418},{"i":1424,"t":"New Features","u":"/ecalc/docs/changelog/v8.4-release","h":"#new-features","p":1423},{"i":1426,"t":"Fixes","u":"/ecalc/docs/changelog/v8.4-release","h":"#fixes","p":1423},{"i":1428,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.4-release","h":"#breaking-changes","p":1423},{"i":1430,"t":"Features","u":"/ecalc/docs/changelog/v7-3-release","h":"#features","p":1429},{"i":1432,"t":"Fixes","u":"/ecalc/docs/changelog/v7-3-release","h":"#fixes","p":1429},{"i":1435,"t":"New Features","u":"/ecalc/docs/changelog/v8.5-release","h":"#new-features","p":1434},{"i":1437,"t":"Fixes","u":"/ecalc/docs/changelog/v8.5-release","h":"#fixes","p":1434},{"i":1439,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.5-release","h":"#breaking-changes","p":1434},{"i":1442,"t":"New Features","u":"/ecalc/docs/changelog/v8.7-release","h":"#new-features","p":1441},{"i":1444,"t":"Fixes","u":"/ecalc/docs/changelog/v8.7-release","h":"#fixes","p":1441},{"i":1446,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.7-release","h":"#breaking-changes","p":1441},{"i":1449,"t":"New Features","u":"/ecalc/docs/changelog/v8.6-release","h":"#new-features","p":1448},{"i":1451,"t":"Fixes","u":"/ecalc/docs/changelog/v8.6-release","h":"#fixes","p":1448},{"i":1453,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.6-release","h":"#breaking-changes","p":1448},{"i":1456,"t":"New Features","u":"/ecalc/docs/changelog/v8.8-release","h":"#new-features","p":1455},{"i":1458,"t":"Fixes","u":"/ecalc/docs/changelog/v8.8-release","h":"#fixes","p":1455},{"i":1459,"t":"Breaking changes","u":"/ecalc/docs/changelog/v8.8-release","h":"#breaking-changes","p":1455},{"i":1462,"t":"Prerequisites","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#prerequisites","p":1460},{"i":1464,"t":"Contributing","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#contributing","p":1460},{"i":1466,"t":"How it works","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#how-it-works","p":1460},{"i":1468,"t":"Special features","u":"/ecalc/docs/contribute/documentation-guide/documentation","h":"#special-features","p":1460},{"i":1472,"t":"Standard Markdown","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"#standard-markdown","p":1470},{"i":1474,"t":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":1470},{"i":1480,"t":"Prerequisites","u":"/ecalc/docs/contribute/get-started","h":"#prerequisites","p":1478},{"i":1482,"t":"How to contribute","u":"/ecalc/docs/contribute/get-started","h":"#how-to-contribute","p":1478},{"i":1484,"t":"Initiate change","u":"/ecalc/docs/contribute/get-started","h":"#initiate-change","p":1478},{"i":1486,"t":"Make a Pull Request","u":"/ecalc/docs/contribute/get-started","h":"#make-a-pull-request","p":1478},{"i":1488,"t":"Get code review","u":"/ecalc/docs/contribute/get-started","h":"#get-code-review","p":1478},{"i":1490,"t":"Guidelines","u":"/ecalc/docs/contribute/get-started","h":"#guidelines","p":1478},{"i":1492,"t":"Pull Requests","u":"/ecalc/docs/contribute/get-started","h":"#pull-requests","p":1478},{"i":1494,"t":"Git commit format","u":"/ecalc/docs/contribute/get-started","h":"#git-commit-format","p":1478},{"i":1496,"t":"Readability","u":"/ecalc/docs/contribute/get-started","h":"#readability","p":1478},{"i":1498,"t":"Code style","u":"/ecalc/docs/contribute/get-started","h":"#code-style","p":1478},{"i":1502,"t":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":1500},{"i":1504,"t":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":1500},{"i":1506,"t":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":1500},{"i":1508,"t":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":1500},{"i":1510,"t":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":1500},{"i":1512,"t":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":1500},{"i":1514,"t":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":1500},{"i":1516,"t":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":1500},{"i":1518,"t":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":1500},{"i":1520,"t":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":1500},{"i":1522,"t":"Commit changes","u":"/ecalc/docs/contribute/guides/git","h":"#commit-changes","p":1500},{"i":1524,"t":"Send changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-changes-to-github","p":1500},{"i":1526,"t":"Workflow examples","u":"/ecalc/docs/contribute/guides/git","h":"#workflow-examples","p":1500},{"i":1527,"t":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":1500},{"i":1529,"t":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":1500}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,4.965,1,5.771]],["t/4",[2,3.433,3,4.375]],["t/6",[4,5.771,5,5.771]],["t/14",[6,5.771,7,4.965]],["t/16",[7,2.648,8,2.819,9,2.819,10,1.892,11,3.078,12,3.078]],["t/18",[2,1.831,7,2.648,8,2.819,9,2.819,13,3.078,14,3.078]],["t/20",[15,5.285,16,5.285]],["t/22",[17,4.074,18,4.736,19,4.736]],["t/24",[15,5.285,16,5.285]],["t/28",[20,3.843]],["t/29",[10,4.541]],["t/31",[21,6.765]],["t/32",[22,2.819,23,2.648,24,1.703,25,3.078,26,2.198,27,3.078]],["t/34",[28,2.757,29,3.741,30,1.487,31,2.757,32,2.757,33,2.757]],["t/36",[34,4.074,35,4.337,36,3.216]],["t/38",[35,4.337,36,3.216,37,4.736]],["t/40",[38,3.877,39,4.337,40,4.736]],["t/42",[41,7.387]],["t/43",[42,7.387]],["t/48",[10,3.548,43,4.375]],["t/49",[43,4.375,44,4.535]],["t/51",[45,5.771,46,4.965]],["t/53",[3,4.375,43,4.375]],["t/57",[10,3.548,43,4.375]],["t/58",[43,4.375,44,4.535]],["t/60",[26,3.381,30,2.554,47,3.721]],["t/62",[36,1.548,46,1.962,48,1.729,49,2.28,50,2.28,51,1.628,52,2.28,53,2.28,54,2.088]],["t/64",[55,2.286,56,2.496,57,1.961,58,1.782,59,1.961,60,2.496,61,2.496,62,2.496]],["t/66",[34,2.371,63,2.757,64,1.793,65,2.757,66,2.757,67,2.371,68,2.09]],["t/72",[69,1.628,70,4.239]],["t/77",[71,7.387]],["t/83",[2,2.388,72,4.015,73,4.015,74,4.015]],["t/85",[75,5.771,76,4.375]],["t/89",[10,3.548,43,4.375]],["t/90",[26,3.381,30,2.554,77,4.337]],["t/98",[10,2.911,20,2.463,44,3.721]],["t/100",[47,5.804]],["t/102",[78,6.048]],["t/104",[79,6.355]],["t/106",[20,3.843]],["t/108",[80,5.138]],["t/110",[81,5.804]],["t/112",[81,5.804]],["t/114",[81,4.535,82,5.771]],["t/116",[83,6.048]],["t/118",[2,2.388,10,2.468,20,2.089,84,3.155]],["t/120",[36,3.919,85,4.014]],["t/124",[86,2.181]],["t/126",[51,4.12,87,4.535]],["t/130",[10,2.911,20,2.463,44,3.721]],["t/132",[47,5.804]],["t/134",[78,6.048]],["t/136",[20,3.843]],["t/138",[79,6.355]],["t/140",[81,5.804]],["t/142",[88,6.765]],["t/144",[20,3.002,84,4.535]],["t/146",[57,4.535,85,4.014]],["t/147",[89,4.965,90,4.726]],["t/149",[90,4.726,91,5.771]],["t/155",[10,2.911,20,2.463,44,3.721]],["t/157",[47,5.804]],["t/159",[78,6.048]],["t/161",[79,6.355]],["t/163",[80,5.138]],["t/165",[81,5.804]],["t/167",[88,6.765]],["t/169",[92,7.387]],["t/171",[83,6.048]],["t/173",[2,2.388,10,2.468,20,2.089,84,3.155]],["t/175",[36,3.919,85,4.014]],["t/178",[93,7.387]],["t/182",[94,7.387]],["t/184",[95,4.535,96,3.919]],["t/186",[86,2.181]],["t/188",[97,7.387]],["t/189",[98,2.475]],["t/191",[95,4.535,96,3.919]],["t/193",[86,2.181]],["t/195",[69,2.083]],["t/199",[95,3.721,96,3.216,99,3.721]],["t/201",[69,2.083]],["t/205",[86,2.181]],["t/207",[36,2.09,95,2.419,96,2.09,100,3.078,101,1.726,102,3.078]],["t/209",[99,5.804]],["t/211",[69,1.628,103,5.285]],["t/212",[69,1.628,104,5.771]],["t/214",[69,1.628,105,5.771]],["t/218",[36,3.216,106,4.736,107,4.736]],["t/220",[69,2.083]],["t/221",[10,2.911,69,1.336,86,1.398]],["t/223",[69,1.628,84,4.535]],["t/227",[22,5.285,108,5.771]],["t/229",[69,2.083]],["t/230",[46,2.998,57,2.738,85,2.424,109,2.998,110,3.485]],["t/232",[20,2.463,29,3.877,111,4.736]],["t/236",[2,4.394]],["t/238",[2,3.433,24,3.193]],["t/240",[2,3.433,24,3.193]],["t/244",[112,6.765]],["t/246",[85,3.294,86,1.398,89,4.074]],["t/248",[69,1.628,103,5.285]],["t/250",[95,3.721,96,3.216,99,3.721]],["t/254",[86,2.181]],["t/256",[69,2.083]],["t/262",[58,3.381,59,3.721,113,4.337]],["t/264",[20,2.089,58,2.866,114,3.677,115,4.015]],["t/266",[86,2.181]],["t/268",[69,2.083]],["t/269",[39,5.285,68,4.375]],["t/271",[58,3.381,59,3.721,113,4.337]],["t/273",[58,4.12,114,5.285]],["t/277",[86,2.181]],["t/279",[69,2.083]],["t/285",[86,2.181]],["t/287",[69,2.083]],["t/291",[86,2.181]],["t/295",[86,2.181]],["t/297",[112,5.285,116,4.965]],["t/298",[98,2.475]],["t/300",[86,2.181]],["t/302",[117,5.771,118,5.771]],["t/303",[98,2.475]],["t/305",[69,2.083]],["t/307",[119,5.771,120,5.285]],["t/308",[98,2.475]],["t/310",[23,3.454,68,3.044,69,1.132,120,3.677]],["t/314",[86,2.181]],["t/316",[51,4.12,87,4.535]],["t/320",[20,2.089,70,2.949,121,3.155,122,3.288]],["t/322",[86,2.181]],["t/324",[69,2.083]],["t/326",[99,5.804]],["t/328",[20,2.089,70,2.949,122,3.288,123,4.015]],["t/330",[86,2.181]],["t/332",[69,2.083]],["t/334",[99,5.804]],["t/340",[86,2.181]],["t/342",[69,2.083]],["t/344",[51,3.381,85,3.294,124,4.736]],["t/350",[101,1.726,125,2.52,126,2.52,127,2.52,128,2.261,129,2.198]],["t/352",[86,2.181]],["t/354",[69,2.083]],["t/356",[80,2.141,101,1.726,125,2.52,126,2.52,128,2.261,129,2.198]],["t/358",[86,2.181]],["t/360",[69,2.083]],["t/362",[68,2.334,101,1.726,129,2.198,130,2.52,131,2.648,132,2.648]],["t/364",[86,2.181]],["t/366",[69,2.083]],["t/368",[69,2.083]],["t/370",[57,1.961,68,1.892,85,1.736,101,1.4,129,1.782,131,2.147,132,2.147,133,2.496]],["t/372",[86,2.181]],["t/374",[69,2.083]],["t/376",[76,2.09,80,1.917,101,1.546,128,2.025,129,1.968,134,2.757,135,2.757]],["t/378",[86,2.181]],["t/384",[86,2.181]],["t/386",[20,1.434,101,2.562,136,2.371,137,1.968,138,2.757,139,2.257]],["t/388",[20,1.298,101,2.358,136,2.147,137,1.782,139,2.044,140,2.147,141,2.286]],["t/390",[69,2.083]],["t/391",[80,1.46,101,2.034,125,1.719,126,1.719,127,1.719,128,1.542,129,1.498,142,1.806,143,1.719]],["t/393",[67,1.673,68,1.474,101,1.903,127,1.592,129,1.388,130,1.592,131,1.673,132,1.673,143,1.592,144,1.944]],["t/395",[101,1.09,129,1.388,130,1.592,137,1.388,139,2.779,140,1.673,145,1.944,146,1.944,147,1.944,148,1.944]],["t/397",[101,1.954,137,2.488,139,2.853,140,2.998,141,3.191]],["t/400",[149,7.387]],["t/402",[2,2.817,20,2.463,76,3.59]],["t/404",[0,2.998,76,2.642,150,2.853,151,3.485,152,3.191]],["t/406",[0,2.998,76,2.642,150,2.853,152,3.191,153,3.485]],["t/410",[86,2.181]],["t/412",[70,4.239,154,5.285]],["t/414",[155,7.387]],["t/416",[76,3.59,150,3.877,156,2.522]],["t/418",[69,2.083]],["t/422",[51,4.12,87,4.535]],["t/424",[86,2.181]],["t/426",[96,5.016]],["t/428",[69,2.083]],["t/432",[86,2.181]],["t/436",[20,1.813,24,1.928,130,2.853,142,2.998,143,2.853]],["t/438",[86,2.181]],["t/440",[69,2.083]],["t/442",[20,1.813,125,2.853,142,2.998,143,2.853,157,3.485]],["t/444",[86,2.181]],["t/446",[69,2.083]],["t/456",[86,2.181]],["t/458",[69,2.083]],["t/460",[20,1.601,54,2.819,67,2.648,101,1.726,109,2.648,137,2.198]],["t/462",[86,2.181]],["t/464",[69,2.083]],["t/470",[136,3.454,158,4.015,159,4.015,160,4.015]],["t/472",[161,6.355]],["t/473",[161,4.965,162,5.771]],["t/474",[96,3.216,163,4.736,164,4.736]],["t/476",[89,4.965,165,5.285]],["t/478",[165,5.285,166,5.771]],["t/480",[167,7.387]],["t/482",[168,7.387]],["t/486",[80,4.014,126,4.726]],["t/488",[86,2.181]],["t/490",[69,2.083]],["t/492",[24,3.193,80,4.014]],["t/494",[69,2.083]],["t/498",[154,4.337,169,4.736,170,4.736]],["t/504",[2,3.433,171,5.771]],["t/506",[2,3.433,172,5.771]],["t/508",[2,3.433,173,4.965]],["t/510",[2,2.817,21,4.337,173,4.074]],["t/512",[2,2.817,10,2.911,173,4.074]],["t/516",[98,2.475]],["t/518",[86,2.181]],["t/520",[69,2.083]],["t/524",[98,2.475]],["t/526",[86,2.181]],["t/528",[69,2.083]],["t/532",[98,2.475]],["t/534",[86,2.181]],["t/536",[69,2.083]],["t/540",[98,2.475]],["t/542",[86,2.181]],["t/544",[69,2.083]],["t/548",[98,2.475]],["t/550",[86,2.181]],["t/552",[69,2.083]],["t/556",[98,2.475]],["t/558",[86,2.181]],["t/560",[69,2.083]],["t/564",[98,2.475]],["t/566",[86,2.181]],["t/570",[98,2.475]],["t/572",[86,2.181]],["t/574",[69,2.083]],["t/578",[98,2.475]],["t/580",[86,2.181]],["t/582",[26,4.12,69,1.628]],["t/584",[48,3.59,69,1.336,174,4.337]],["t/588",[98,2.475]],["t/590",[86,2.181]],["t/592",[69,2.083]],["t/596",[98,2.475]],["t/598",[86,2.181]],["t/600",[69,2.083]],["t/603",[98,2.475]],["t/605",[86,2.181]],["t/607",[69,2.083]],["t/611",[98,2.475]],["t/613",[69,2.083]],["t/617",[98,2.475]],["t/619",[86,2.181]],["t/621",[69,2.083]],["t/625",[98,2.475]],["t/627",[86,2.181]],["t/629",[69,2.083]],["t/633",[98,2.475]],["t/635",[20,1.601,24,1.703,101,1.726,127,2.52,128,2.261,137,2.198]],["t/636",[86,2.181]],["t/638",[69,2.083]],["t/640",[20,1.601,24,1.703,80,2.141,101,1.726,128,2.261,137,2.198]],["t/641",[86,2.181]],["t/643",[69,2.083]],["t/645",[20,1.186,24,1.262,80,1.586,101,1.279,128,1.675,137,1.628,150,1.867,175,2.28,176,2.088]],["t/646",[86,2.181]],["t/648",[69,2.083]],["t/652",[98,2.475]],["t/654",[86,2.181]],["t/656",[69,2.083]],["t/660",[98,2.475]],["t/662",[86,2.181]],["t/664",[69,2.083]],["t/668",[98,2.475]],["t/670",[86,2.181]],["t/672",[69,2.083]],["t/673",[26,4.12,69,1.628]],["t/675",[48,4.375,69,1.628]],["t/678",[98,2.475]],["t/680",[86,2.181]],["t/682",[69,2.083]],["t/685",[98,2.475]],["t/687",[86,2.181]],["t/688",[101,4.143]],["t/690",[121,5.804]],["t/692",[69,2.083]],["t/696",[98,2.475]],["t/698",[86,2.181]],["t/700",[69,2.083]],["t/704",[98,2.475]],["t/706",[86,2.181]],["t/708",[69,2.083]],["t/712",[98,2.475]],["t/714",[86,2.181]],["t/716",[69,2.083]],["t/720",[98,2.475]],["t/722",[86,2.181]],["t/724",[69,2.083]],["t/728",[98,2.475]],["t/730",[86,2.181]],["t/732",[69,2.083]],["t/736",[98,2.475]],["t/738",[86,2.181]],["t/740",[96,5.016]],["t/742",[69,2.083]],["t/746",[98,2.475]],["t/748",[20,2.089,70,2.949,122,3.288,177,4.015]],["t/752",[98,2.475]],["t/754",[86,2.181]],["t/756",[69,2.083]],["t/760",[98,2.475]],["t/762",[51,4.12,87,4.535]],["t/766",[98,2.475]],["t/768",[86,2.181]],["t/770",[69,2.083]],["t/774",[98,2.475]],["t/776",[24,3.193,178,5.285]],["t/778",[24,3.193,38,4.726]],["t/780",[86,2.181]],["t/782",[69,2.083]],["t/783",[24,3.193,178,5.285]],["t/785",[24,3.193,38,4.726]],["t/789",[98,2.475]],["t/791",[86,2.181]],["t/793",[69,2.083]],["t/796",[98,2.475]],["t/798",[86,2.181]],["t/800",[69,2.083]],["t/804",[98,2.475]],["t/806",[86,2.181]],["t/808",[69,2.083]],["t/812",[98,2.475]],["t/814",[86,2.181]],["t/816",[69,2.083]],["t/820",[98,2.475]],["t/824",[98,2.475]],["t/826",[86,2.181]],["t/828",[69,2.083]],["t/832",[98,2.475]],["t/836",[98,2.475]],["t/838",[86,2.181]],["t/840",[69,2.083]],["t/841",[70,4.239,179,5.771]],["t/843",[58,4.12,180,5.285]],["t/845",[69,1.628,84,4.535]],["t/849",[98,2.475]],["t/851",[86,2.181]],["t/853",[69,2.083]],["t/856",[98,2.475]],["t/858",[86,2.181]],["t/859",[101,4.143]],["t/861",[121,5.804]],["t/863",[69,2.083]],["t/864",[101,4.143]],["t/868",[98,2.475]],["t/870",[86,2.181]],["t/872",[69,2.083]],["t/876",[98,2.475]],["t/878",[86,2.181]],["t/880",[69,2.083]],["t/883",[98,2.475]],["t/885",[86,2.181]],["t/887",[26,2.198,69,0.868,181,2.648,182,2.819,183,2.819,184,3.078]],["t/889",[48,2.334,69,0.868,181,2.648,182,2.819,185,2.819,186,2.819]],["t/891",[55,2.819,69,0.868,181,2.648,183,2.819,185,2.819,186,2.819]],["t/895",[98,2.475]],["t/899",[98,2.475]],["t/901",[86,2.181]],["t/903",[69,2.083]],["t/907",[98,2.475]],["t/909",[86,2.181]],["t/911",[96,5.016]],["t/913",[69,2.083]],["t/917",[98,2.475]],["t/919",[20,3.002,24,3.193]],["t/921",[24,3.193,83,4.726]],["t/924",[98,2.475]],["t/926",[86,2.181]],["t/928",[69,2.083]],["t/932",[98,2.475]],["t/934",[116,6.355]],["t/936",[86,2.181]],["t/940",[98,2.475]],["t/942",[86,2.181]],["t/944",[20,2.463,51,3.381,87,3.721]],["t/948",[98,2.475]],["t/950",[86,2.181]],["t/952",[69,2.083]],["t/956",[98,2.475]],["t/958",[116,6.355]],["t/960",[86,2.181]],["t/962",[69,2.083]],["t/966",[98,2.475]],["t/968",[86,2.181]],["t/970",[69,2.083]],["t/974",[98,2.475]],["t/976",[29,6.048]],["t/978",[187,7.387]],["t/980",[188,7.387]],["t/982",[189,7.387]],["t/984",[190,7.387]],["t/986",[191,7.387]],["t/988",[26,4.12,69,1.628]],["t/990",[48,4.375,69,1.628]],["t/992",[86,2.181]],["t/993",[69,2.083]],["t/997",[98,2.475]],["t/999",[86,2.181]],["t/1001",[69,2.083]],["t/1004",[98,2.475]],["t/1006",[86,2.181]],["t/1008",[69,2.083]],["t/1012",[98,2.475]],["t/1014",[86,2.181]],["t/1016",[69,2.083]],["t/1020",[98,2.475]],["t/1022",[86,2.181]],["t/1024",[69,2.083]],["t/1028",[98,2.475]],["t/1030",[86,2.181]],["t/1032",[69,2.083]],["t/1034",[2,2.073,24,1.928,38,2.853,77,3.191,192,3.485]],["t/1036",[86,2.181]],["t/1038",[69,2.083]],["t/1042",[98,2.475]],["t/1044",[86,2.181]],["t/1046",[26,4.12,69,1.628]],["t/1048",[48,3.59,69,1.336,174,4.337]],["t/1052",[98,2.475]],["t/1054",[20,1.813,24,1.928,70,2.56,122,2.853,193,3.485]],["t/1056",[194,7.387]],["t/1058",[86,2.181]],["t/1060",[69,2.083]],["t/1061",[195,5.771,196,5.285]],["t/1063",[57,3.155,58,2.866,59,3.155,196,3.677]],["t/1065",[17,2.648,29,2.52,109,2.648,176,2.819,197,3.078,198,3.078]],["t/1068",[98,2.475]],["t/1070",[86,2.181]],["t/1072",[69,2.083]],["t/1076",[98,2.475]],["t/1078",[86,2.181]],["t/1080",[69,2.083]],["t/1084",[98,2.475]],["t/1086",[86,2.181]],["t/1088",[69,2.083]],["t/1092",[98,2.475]],["t/1094",[86,2.181]],["t/1096",[24,3.193,199,5.771]],["t/1098",[86,2.181]],["t/1100",[69,2.083]],["t/1104",[98,2.475]],["t/1106",[96,3.919,200,5.285]],["t/1108",[51,2.488,58,2.488,59,2.738,180,3.191,200,3.191]],["t/1110",[69,2.083]],["t/1114",[98,2.475]],["t/1116",[86,2.181]],["t/1118",[69,2.083]],["t/1122",[98,2.475]],["t/1124",[86,2.181]],["t/1126",[69,2.083]],["t/1130",[98,2.475]],["t/1132",[86,2.181]],["t/1134",[69,2.083]],["t/1137",[98,2.475]],["t/1139",[86,2.181]],["t/1141",[69,2.083]],["t/1144",[98,2.475]],["t/1146",[86,2.181]],["t/1148",[69,2.083]],["t/1151",[98,2.475]],["t/1153",[86,2.181]],["t/1155",[69,2.083]],["t/1158",[98,2.475]],["t/1160",[86,2.181]],["t/1161",[121,5.804]],["t/1163",[101,4.143]],["t/1165",[69,2.083]],["t/1166",[121,5.804]],["t/1168",[101,4.143]],["t/1172",[98,2.475]],["t/1176",[98,2.475]],["t/1178",[86,2.181]],["t/1180",[69,2.083]],["t/1184",[98,2.475]],["t/1186",[24,3.193,78,4.726]],["t/1188",[24,3.193,47,4.535]],["t/1190",[24,3.193,83,4.726]],["t/1192",[20,3.002,24,3.193]],["t/1194",[86,2.181]],["t/1198",[2,2.073,98,1.167,201,3.191,202,3.485,203,3.485]],["t/1200",[86,2.181]],["t/1202",[69,2.083]],["t/1204",[2,2.388,98,1.345,201,3.677,204,4.015]],["t/1206",[86,2.181]],["t/1208",[69,2.083]],["t/1212",[205,3.935]],["t/1214",[156,3.935]],["t/1216",[3,5.6]],["t/1219",[64,3.753,205,3.074]],["t/1220",[156,3.935]],["t/1221",[30,3.112,206,3.548]],["t/1223",[205,3.935]],["t/1225",[3,5.6]],["t/1228",[205,3.935]],["t/1230",[156,3.935]],["t/1233",[205,3.935]],["t/1235",[156,3.935]],["t/1238",[205,3.935]],["t/1240",[156,3.935]],["t/1242",[3,5.6]],["t/1246",[64,3.753,205,3.074]],["t/1248",[205,3.074,207,5.771]],["t/1250",[30,3.112,206,3.548]],["t/1252",[10,4.541]],["t/1254",[3,5.6]],["t/1257",[30,3.112,206,3.548]],["t/1260",[208,4.015,209,3.454,210,4.015,211,4.015]],["t/1261",[205,3.935]],["t/1263",[156,3.074,212,3.919]],["t/1265",[213,5.016]],["t/1267",[214,3.832,215,3.832]],["t/1269",[216,3.753,217,3.919]],["t/1271",[209,3.454,218,4.015,219,4.015,220,4.015]],["t/1272",[156,3.074,212,3.919]],["t/1274",[213,5.016]],["t/1276",[214,3.832,215,3.832]],["t/1278",[216,3.753,217,3.919]],["t/1280",[221,6.048]],["t/1282",[209,3.454,222,4.015,223,4.015,224,3.454]],["t/1283",[156,3.074,212,3.919]],["t/1285",[213,5.016]],["t/1287",[214,3.832,215,3.832]],["t/1289",[216,3.753,217,3.919]],["t/1291",[225,4.015,226,2.866,227,3.677,228,4.015]],["t/1292",[30,2.554,206,2.911,229,3.59]],["t/1294",[205,3.935]],["t/1296",[156,3.074,212,3.919]],["t/1298",[213,5.016]],["t/1300",[214,3.832,215,3.832]],["t/1302",[216,3.753,217,3.919]],["t/1304",[221,6.048]],["t/1306",[230,4.535,231,4.535]],["t/1308",[226,2.866,227,3.677,232,3.677,233,3.454]],["t/1309",[156,3.074,212,3.919]],["t/1311",[213,5.016]],["t/1313",[214,3.832,215,3.832]],["t/1315",[216,3.753,217,3.919]],["t/1317",[230,4.535,231,4.535]],["t/1319",[232,6.765]],["t/1320",[30,2.554,206,2.911,229,3.59]],["t/1322",[224,3.454,226,2.866,234,4.015,235,4.015]],["t/1323",[30,2.554,206,2.911,229,3.59]],["t/1325",[205,3.935]],["t/1327",[156,3.074,212,3.919]],["t/1329",[213,5.016]],["t/1331",[214,3.832,215,3.832]],["t/1333",[216,3.753,217,3.919]],["t/1335",[226,2.866,236,4.015,237,4.015,238,4.015]],["t/1336",[205,3.935]],["t/1338",[156,3.074,212,3.919]],["t/1340",[213,5.016]],["t/1342",[214,3.832,215,3.832]],["t/1344",[216,3.753,217,3.919]],["t/1346",[226,2.866,239,4.015,240,3.677,241,4.015]],["t/1347",[205,3.935]],["t/1349",[156,3.074,212,3.919]],["t/1351",[213,5.016]],["t/1353",[214,3.832,215,3.832]],["t/1355",[216,3.753,217,3.919]],["t/1357",[224,3.454,226,2.866,242,4.015,243,4.015]],["t/1358",[30,2.554,206,2.911,229,3.59]],["t/1360",[205,3.935]],["t/1362",[156,3.074,212,3.919]],["t/1364",[213,5.016]],["t/1366",[214,3.832,215,3.832]],["t/1368",[216,3.753,217,3.919]],["t/1370",[221,6.048]],["t/1372",[230,4.535,231,4.535]],["t/1374",[226,2.866,233,3.454,244,4.015,245,4.015]],["t/1375",[156,3.074,212,3.919]],["t/1377",[230,4.535,231,4.535]],["t/1379",[221,6.048]],["t/1381",[216,3.753,217,3.919]],["t/1383",[213,5.016]],["t/1385",[214,3.832,215,3.832]],["t/1387",[226,2.866,233,3.454,240,3.677,246,4.015]],["t/1388",[214,3.832,215,3.832]],["t/1390",[230,4.535,231,4.535]],["t/1394",[64,3.753,205,3.074]],["t/1396",[30,3.112,206,3.548]],["t/1398",[10,2.142,36,2.366,85,2.424,90,2.853,229,2.642]],["t/1400",[34,4.965,247,5.771]],["t/1404",[64,3.753,205,3.074]],["t/1406",[156,3.935]],["t/1408",[30,3.112,206,3.548]],["t/1410",[10,2.142,36,2.366,85,2.424,90,2.853,229,2.642]],["t/1414",[64,3.753,205,3.074]],["t/1416",[156,3.935]],["t/1419",[64,3.753,205,3.074]],["t/1420",[156,3.935]],["t/1422",[30,3.112,206,3.548]],["t/1424",[64,3.753,205,3.074]],["t/1426",[156,3.935]],["t/1428",[30,3.112,206,3.548]],["t/1430",[205,3.935]],["t/1432",[156,3.935]],["t/1435",[64,3.753,205,3.074]],["t/1437",[156,3.935]],["t/1439",[30,3.112,206,3.548]],["t/1442",[64,3.753,205,3.074]],["t/1444",[156,3.935]],["t/1446",[30,3.112,206,3.548]],["t/1449",[64,3.753,205,3.074]],["t/1451",[156,3.935]],["t/1453",[30,3.112,206,3.548]],["t/1456",[64,3.753,205,3.074]],["t/1458",[156,3.935]],["t/1459",[30,3.112,206,3.548]],["t/1462",[248,6.765]],["t/1464",[249,6.765]],["t/1466",[250,7.387]],["t/1468",[17,4.965,205,3.074]],["t/1472",[251,5.771,252,5.285]],["t/1474",[252,5.285,253,5.771]],["t/1480",[248,6.765]],["t/1482",[249,6.765]],["t/1484",[30,3.112,254,5.771]],["t/1486",[255,4.736,256,4.074,257,4.074]],["t/1488",[216,3.753,258,5.771]],["t/1490",[259,7.387]],["t/1492",[256,4.965,257,4.965]],["t/1494",[86,1.398,260,3.721,261,4.337]],["t/1496",[262,7.387]],["t/1498",[216,3.753,263,5.771]],["t/1502",[23,4.074,260,3.721,264,4.736]],["t/1504",[24,3.193,260,4.535]],["t/1506",[260,3.721,265,4.736,266,4.337]],["t/1508",[260,4.535,267,5.771]],["t/1510",[268,5.771,269,5.285]],["t/1512",[269,3.677,270,4.015,271,4.015,272,4.015]],["t/1514",[30,2.554,273,4.736,274,4.074]],["t/1516",[30,2.554,274,4.074,275,4.337]],["t/1518",[30,2.554,276,4.736,277,4.736]],["t/1520",[36,3.919,278,5.771]],["t/1522",[30,3.112,261,5.285]],["t/1524",[30,2.554,274,4.074,275,4.337]],["t/1526",[69,1.628,161,4.965]],["t/1527",[256,4.965,257,4.965]],["t/1529",[266,5.285,279,5.771]]],"invertedIndex":[["",{"_index":229,"t":{"1292":{"position":[[0,1]]},"1320":{"position":[[0,1]]},"1323":{"position":[[0,1]]},"1358":{"position":[[0,1]]},"1398":{"position":[[12,1]]},"1410":{"position":[[12,1]]}}}],["01",{"_index":223,"t":{"1282":{"position":[[12,2]]}}}],["02",{"_index":219,"t":{"1271":{"position":[[13,2]]}}}],["03",{"_index":210,"t":{"1260":{"position":[[13,2]]}}}],["05",{"_index":233,"t":{"1308":{"position":[[15,3]]},"1374":{"position":[[12,2]]},"1387":{"position":[[12,2]]}}}],["08",{"_index":243,"t":{"1357":{"position":[[12,2]]}}}],["09",{"_index":240,"t":{"1346":{"position":[[12,2]]},"1387":{"position":[[15,3]]}}}],["1",{"_index":26,"t":{"32":{"position":[[33,1]]},"60":{"position":[[0,2]]},"90":{"position":[[0,2]]},"582":{"position":[[8,1]]},"673":{"position":[[8,1]]},"887":{"position":[[8,1]]},"988":{"position":[[8,2]]},"1046":{"position":[[8,1]]}}}],["10",{"_index":237,"t":{"1335":{"position":[[12,2]]}}}],["11",{"_index":224,"t":{"1282":{"position":[[15,3]]},"1322":{"position":[[12,2]]},"1357":{"position":[[15,3]]}}}],["12",{"_index":227,"t":{"1291":{"position":[[12,2]]},"1308":{"position":[[12,2]]}}}],["16",{"_index":220,"t":{"1271":{"position":[[16,3]]}}}],["18",{"_index":211,"t":{"1260":{"position":[[16,3]]}}}],["1d",{"_index":104,"t":{"212":{"position":[[0,2]]}}}],["2",{"_index":48,"t":{"62":{"position":[[0,2]]},"584":{"position":[[8,1]]},"675":{"position":[[8,1]]},"889":{"position":[[8,1]]},"990":{"position":[[8,2]]},"1048":{"position":[[8,1]]}}}],["2023",{"_index":226,"t":{"1291":{"position":[[6,5]]},"1308":{"position":[[6,5]]},"1322":{"position":[[6,5]]},"1335":{"position":[[6,5]]},"1346":{"position":[[6,5]]},"1357":{"position":[[6,5]]},"1374":{"position":[[6,5]]},"1387":{"position":[[6,5]]}}}],["2024",{"_index":209,"t":{"1260":{"position":[[7,5]]},"1271":{"position":[[7,5]]},"1282":{"position":[[6,5]]}}}],["21",{"_index":235,"t":{"1322":{"position":[[15,3]]}}}],["25",{"_index":241,"t":{"1346":{"position":[[15,3]]}}}],["27",{"_index":228,"t":{"1291":{"position":[[15,3]]}}}],["28",{"_index":245,"t":{"1374":{"position":[[15,3]]}}}],["3",{"_index":55,"t":{"64":{"position":[[0,2]]},"891":{"position":[[8,1]]}}}],["30",{"_index":238,"t":{"1335":{"position":[[15,3]]}}}],["3d",{"_index":105,"t":{"214":{"position":[[0,2]]}}}],["4",{"_index":63,"t":{"66":{"position":[[0,2]]}}}],["8.10.0",{"_index":218,"t":{"1271":{"position":[[0,6]]}}}],["8.11.0",{"_index":208,"t":{"1260":{"position":[[0,6]]}}}],["8.2.1",{"_index":246,"t":{"1387":{"position":[[0,5]]}}}],["8.2.2",{"_index":244,"t":{"1374":{"position":[[0,5]]}}}],["8.3.0",{"_index":242,"t":{"1357":{"position":[[0,5]]}}}],["8.4.0",{"_index":239,"t":{"1346":{"position":[[0,5]]}}}],["8.5.0",{"_index":236,"t":{"1335":{"position":[[0,5]]}}}],["8.6.0",{"_index":234,"t":{"1322":{"position":[[0,5]]}}}],["8.7",{"_index":202,"t":{"1198":{"position":[[14,3]]}}}],["8.7.0",{"_index":232,"t":{"1308":{"position":[[0,5]]},"1319":{"position":[[0,5]]}}}],["8.8",{"_index":204,"t":{"1204":{"position":[[19,4]]}}}],["8.8.0",{"_index":225,"t":{"1291":{"position":[[0,5]]}}}],["8.9.0",{"_index":222,"t":{"1282":{"position":[[0,5]]}}}],["add",{"_index":278,"t":{"1520":{"position":[[0,3]]}}}],["addit",{"_index":111,"t":{"232":{"position":[[9,10]]}}}],["adjust",{"_index":178,"t":{"776":{"position":[[7,10]]},"783":{"position":[[7,10]]}}}],["allow",{"_index":62,"t":{"64":{"position":[[47,7]]}}}],["attent",{"_index":93,"t":{"178":{"position":[[0,9]]}}}],["attribut",{"_index":200,"t":{"1106":{"position":[[9,10]]},"1108":{"position":[[0,10]]}}}],["avail",{"_index":108,"t":{"227":{"position":[[0,9]]}}}],["averag",{"_index":33,"t":{"34":{"position":[[52,7]]}}}],["b",{"_index":82,"t":{"114":{"position":[[13,1]]}}}],["base",{"_index":27,"t":{"32":{"position":[[35,5]]}}}],["basic",{"_index":179,"t":{"841":{"position":[[0,5]]}}}],["befor",{"_index":203,"t":{"1198":{"position":[[22,7]]}}}],["behaviour",{"_index":41,"t":{"42":{"position":[[0,9]]}}}],["between",{"_index":271,"t":{"1512":{"position":[[7,7]]}}}],["boiler",{"_index":120,"t":{"307":{"position":[[12,7]]},"310":{"position":[[9,6]]}}}],["branch",{"_index":269,"t":{"1510":{"position":[[16,6]]},"1512":{"position":[[24,8]]}}}],["break",{"_index":206,"t":{"1221":{"position":[[0,8]]},"1250":{"position":[[0,8]]},"1257":{"position":[[0,8]]},"1292":{"position":[[2,8]]},"1320":{"position":[[2,8]]},"1323":{"position":[[2,8]]},"1358":{"position":[[2,8]]},"1396":{"position":[[0,8]]},"1408":{"position":[[0,8]]},"1422":{"position":[[0,8]]},"1428":{"position":[[0,8]]},"1439":{"position":[[0,8]]},"1446":{"position":[[0,8]]},"1453":{"position":[[0,8]]},"1459":{"position":[[0,8]]}}}],["bug",{"_index":212,"t":{"1263":{"position":[[0,3]]},"1272":{"position":[[0,3]]},"1283":{"position":[[0,3]]},"1296":{"position":[[0,3]]},"1309":{"position":[[0,3]]},"1327":{"position":[[0,3]]},"1338":{"position":[[0,3]]},"1349":{"position":[[0,3]]},"1362":{"position":[[0,3]]},"1375":{"position":[[0,3]]}}}],["calcul",{"_index":133,"t":{"370":{"position":[[43,10]]}}}],["calendar",{"_index":197,"t":{"1065":{"position":[[19,8]]}}}],["calibr",{"_index":168,"t":{"482":{"position":[[0,11]]}}}],["categori",{"_index":65,"t":{"66":{"position":[[12,9]]}}}],["chang",{"_index":30,"t":{"34":{"position":[[20,7]]},"60":{"position":[[3,7]]},"90":{"position":[[3,7]]},"1221":{"position":[[9,7]]},"1250":{"position":[[9,7]]},"1257":{"position":[[9,7]]},"1292":{"position":[[11,7]]},"1320":{"position":[[11,7]]},"1323":{"position":[[11,7]]},"1358":{"position":[[11,7]]},"1396":{"position":[[9,7]]},"1408":{"position":[[9,7]]},"1422":{"position":[[9,7]]},"1428":{"position":[[9,7]]},"1439":{"position":[[9,7]]},"1446":{"position":[[9,7]]},"1453":{"position":[[9,7]]},"1459":{"position":[[9,7]]},"1484":{"position":[[9,6]]},"1514":{"position":[[6,7]]},"1516":{"position":[[10,7]]},"1518":{"position":[[16,7]]},"1522":{"position":[[7,7]]},"1524":{"position":[[5,7]]}}}],["charact",{"_index":18,"t":{"22":{"position":[[8,10]]}}}],["chart",{"_index":129,"t":{"350":{"position":[[37,5]]},"356":{"position":[[39,5]]},"362":{"position":[[19,5]]},"370":{"position":[[19,5]]},"376":{"position":[[51,5]]},"391":{"position":[[68,5]]},"393":{"position":[[63,5]]},"395":{"position":[[108,5]]}}}],["check",{"_index":276,"t":{"1518":{"position":[[0,5]]}}}],["choke",{"_index":151,"t":{"404":{"position":[[27,7]]}}}],["choos",{"_index":1,"t":{"3":{"position":[[21,7]]}}}],["chore",{"_index":215,"t":{"1267":{"position":[[14,6]]},"1276":{"position":[[14,6]]},"1287":{"position":[[14,6]]},"1300":{"position":[[14,6]]},"1313":{"position":[[14,6]]},"1331":{"position":[[14,6]]},"1342":{"position":[[14,6]]},"1353":{"position":[[14,6]]},"1366":{"position":[[14,6]]},"1385":{"position":[[14,6]]},"1388":{"position":[[14,6]]}}}],["cli",{"_index":3,"t":{"4":{"position":[[6,3]]},"53":{"position":[[0,3]]},"1216":{"position":[[0,3]]},"1225":{"position":[[0,3]]},"1242":{"position":[[0,3]]},"1254":{"position":[[0,3]]}}}],["clone",{"_index":265,"t":{"1506":{"position":[[0,7]]}}}],["code",{"_index":216,"t":{"1269":{"position":[[0,4]]},"1278":{"position":[[0,4]]},"1289":{"position":[[0,4]]},"1302":{"position":[[0,4]]},"1315":{"position":[[0,4]]},"1333":{"position":[[0,4]]},"1344":{"position":[[0,4]]},"1355":{"position":[[0,4]]},"1368":{"position":[[0,4]]},"1381":{"position":[[0,4]]},"1488":{"position":[[4,4]]},"1498":{"position":[[0,4]]}}}],["column",{"_index":60,"t":{"64":{"position":[[29,7]]}}}],["combin",{"_index":109,"t":{"230":{"position":[[0,9]]},"460":{"position":[[0,9]]},"1065":{"position":[[9,9]]}}}],["commit",{"_index":261,"t":{"1494":{"position":[[4,6]]},"1522":{"position":[[0,6]]}}}],["composit",{"_index":143,"t":{"391":{"position":[[84,11]]},"393":{"position":[[102,11]]},"436":{"position":[[29,11]]},"442":{"position":[[32,11]]}}}],["compressor",{"_index":101,"t":{"207":{"position":[[36,10]]},"350":{"position":[[26,10]]},"356":{"position":[[28,10]]},"362":{"position":[[8,10]]},"370":{"position":[[8,10]]},"376":{"position":[[40,10]]},"386":{"position":[[11,10],[45,10]]},"388":{"position":[[11,10],[57,10]]},"391":{"position":[[11,10],[57,10]]},"393":{"position":[[26,10],[52,10]]},"395":{"position":[[2,10]]},"397":{"position":[[2,10]]},"460":{"position":[[12,10]]},"635":{"position":[[20,10]]},"640":{"position":[[22,10]]},"645":{"position":[[22,10]]},"688":{"position":[[0,11]]},"859":{"position":[[0,11]]},"864":{"position":[[0,11]]},"1163":{"position":[[0,11]]},"1168":{"position":[[0,11]]}}}],["compressor_tabular",{"_index":124,"t":{"344":{"position":[[0,18]]}}}],["condit",{"_index":42,"t":{"43":{"position":[[0,10]]}}}],["configur",{"_index":14,"t":{"18":{"position":[[36,13]]}}}],["constant",{"_index":195,"t":{"1061":{"position":[[0,8]]}}}],["consum",{"_index":166,"t":{"478":{"position":[[0,8]]}}}],["continu",{"_index":230,"t":{"1306":{"position":[[0,10]]},"1317":{"position":[[0,10]]},"1372":{"position":[[0,10]]},"1377":{"position":[[0,10]]},"1390":{"position":[[0,10]]}}}],["contribut",{"_index":249,"t":{"1464":{"position":[[0,12]]},"1482":{"position":[[7,10]]}}}],["control",{"_index":76,"t":{"85":{"position":[[8,7]]},"376":{"position":[[6,7]]},"402":{"position":[[0,7]]},"404":{"position":[[9,7]]},"406":{"position":[[9,7]]},"416":{"position":[[15,7]]}}}],["creat",{"_index":268,"t":{"1510":{"position":[[0,6]]}}}],["crossov",{"_index":191,"t":{"986":{"position":[[0,9]]}}}],["csv",{"_index":102,"t":{"207":{"position":[[47,3]]}}}],["data",{"_index":57,"t":{"64":{"position":[[9,4]]},"146":{"position":[[6,4]]},"230":{"position":[[10,4]]},"370":{"position":[[65,4]]},"1063":{"position":[[28,4]]}}}],["day",{"_index":198,"t":{"1065":{"position":[[39,3]]}}}],["decim",{"_index":72,"t":{"83":{"position":[[0,8]]}}}],["defin",{"_index":126,"t":{"350":{"position":[[5,7]]},"356":{"position":[[5,7]]},"391":{"position":[[34,7]]},"486":{"position":[[0,8]]}}}],["depend",{"_index":180,"t":{"843":{"position":[[10,10]]},"1108":{"position":[[11,9]]}}}],["descript",{"_index":98,"t":{"189":{"position":[[0,11]]},"298":{"position":[[0,11]]},"303":{"position":[[0,11]]},"308":{"position":[[0,11]]},"516":{"position":[[0,11]]},"524":{"position":[[0,11]]},"532":{"position":[[0,11]]},"540":{"position":[[0,11]]},"548":{"position":[[0,11]]},"556":{"position":[[0,11]]},"564":{"position":[[0,11]]},"570":{"position":[[0,11]]},"578":{"position":[[0,11]]},"588":{"position":[[0,11]]},"596":{"position":[[0,11]]},"603":{"position":[[0,11]]},"611":{"position":[[0,11]]},"617":{"position":[[0,11]]},"625":{"position":[[0,11]]},"633":{"position":[[0,11]]},"652":{"position":[[0,11]]},"660":{"position":[[0,11]]},"668":{"position":[[0,11]]},"678":{"position":[[0,11]]},"685":{"position":[[0,11]]},"696":{"position":[[0,11]]},"704":{"position":[[0,11]]},"712":{"position":[[0,11]]},"720":{"position":[[0,11]]},"728":{"position":[[0,11]]},"736":{"position":[[0,11]]},"746":{"position":[[0,11]]},"752":{"position":[[0,11]]},"760":{"position":[[0,11]]},"766":{"position":[[0,11]]},"774":{"position":[[0,11]]},"789":{"position":[[0,11]]},"796":{"position":[[0,11]]},"804":{"position":[[0,11]]},"812":{"position":[[0,11]]},"820":{"position":[[0,11]]},"824":{"position":[[0,11]]},"832":{"position":[[0,11]]},"836":{"position":[[0,11]]},"849":{"position":[[0,11]]},"856":{"position":[[0,11]]},"868":{"position":[[0,11]]},"876":{"position":[[0,11]]},"883":{"position":[[0,11]]},"895":{"position":[[0,11]]},"899":{"position":[[0,11]]},"907":{"position":[[0,11]]},"917":{"position":[[0,11]]},"924":{"position":[[0,11]]},"932":{"position":[[0,11]]},"940":{"position":[[0,11]]},"948":{"position":[[0,11]]},"956":{"position":[[0,11]]},"966":{"position":[[0,11]]},"974":{"position":[[0,11]]},"997":{"position":[[0,11]]},"1004":{"position":[[0,11]]},"1012":{"position":[[0,11]]},"1020":{"position":[[0,11]]},"1028":{"position":[[0,11]]},"1042":{"position":[[0,11]]},"1052":{"position":[[0,11]]},"1068":{"position":[[0,11]]},"1076":{"position":[[0,11]]},"1084":{"position":[[0,11]]},"1092":{"position":[[0,11]]},"1104":{"position":[[0,11]]},"1114":{"position":[[0,11]]},"1122":{"position":[[0,11]]},"1130":{"position":[[0,11]]},"1137":{"position":[[0,11]]},"1144":{"position":[[0,11]]},"1151":{"position":[[0,11]]},"1158":{"position":[[0,11]]},"1172":{"position":[[0,11]]},"1176":{"position":[[0,11]]},"1184":{"position":[[0,11]]},"1198":{"position":[[30,11]]},"1204":{"position":[[24,11]]}}}],["design",{"_index":131,"t":{"362":{"position":[[41,6]]},"370":{"position":[[30,6]]},"393":{"position":[[74,6]]}}}],["detail",{"_index":174,"t":{"584":{"position":[[10,10]]},"1048":{"position":[[10,10]]}}}],["diagram",{"_index":160,"t":{"470":{"position":[[24,7]]}}}],["differ",{"_index":46,"t":{"51":{"position":[[5,11]]},"62":{"position":[[24,9]]},"230":{"position":[[20,9]]}}}],["digit",{"_index":74,"t":{"83":{"position":[[25,6]]}}}],["direct",{"_index":193,"t":{"1054":{"position":[[9,6]]}}}],["discharge_pressur",{"_index":189,"t":{"982":{"position":[[0,19]]}}}],["document",{"_index":213,"t":{"1265":{"position":[[0,13]]},"1274":{"position":[[0,13]]},"1285":{"position":[[0,13]]},"1298":{"position":[[0,13]]},"1311":{"position":[[0,13]]},"1329":{"position":[[0,13]]},"1340":{"position":[[0,13]]},"1351":{"position":[[0,13]]},"1364":{"position":[[0,13]]},"1383":{"position":[[0,13]]}}}],["driven",{"_index":144,"t":{"393":{"position":[[19,6]]}}}],["due",{"_index":9,"t":{"16":{"position":[[15,3]]},"18":{"position":[[15,3]]}}}],["ecalc",{"_index":2,"t":{"4":{"position":[[0,5]]},"18":{"position":[[30,5]]},"83":{"position":[[35,5]]},"118":{"position":[[5,5]]},"173":{"position":[[5,5]]},"236":{"position":[[8,7]]},"238":{"position":[[17,7]]},"240":{"position":[[11,7]]},"402":{"position":[[21,6]]},"504":{"position":[[0,5]]},"506":{"position":[[0,5]]},"508":{"position":[[0,5]]},"510":{"position":[[0,5]]},"512":{"position":[[0,5]]},"1034":{"position":[[43,5]]},"1198":{"position":[[0,5]]},"1204":{"position":[[0,5]]}}}],["econom",{"_index":71,"t":{"77":{"position":[[0,9]]}}}],["electricity2fuel",{"_index":112,"t":{"244":{"position":[[0,16]]},"297":{"position":[[0,16]]}}}],["emiss",{"_index":38,"t":{"40":{"position":[[0,10]]},"778":{"position":[[7,9]]},"785":{"position":[[7,9]]},"1034":{"position":[[7,8]]}}}],["empti",{"_index":56,"t":{"64":{"position":[[3,5]]}}}],["energi",{"_index":122,"t":{"320":{"position":[[5,6]]},"328":{"position":[[12,6]]},"748":{"position":[[9,6]]},"1054":{"position":[[16,6]]}}}],["energy_usage_model",{"_index":83,"t":{"116":{"position":[[0,18]]},"171":{"position":[[0,18]]},"921":{"position":[[7,18]]},"1190":{"position":[[7,18]]}}}],["error",{"_index":7,"t":{"14":{"position":[[12,6]]},"16":{"position":[[0,5]]},"18":{"position":[[0,5]]}}}],["exampl",{"_index":69,"t":{"72":{"position":[[0,7]]},"195":{"position":[[0,8]]},"201":{"position":[[0,7]]},"211":{"position":[[0,7]]},"212":{"position":[[3,7]]},"214":{"position":[[3,7]]},"220":{"position":[[0,8]]},"221":{"position":[[12,7]]},"223":{"position":[[5,8]]},"229":{"position":[[0,8]]},"248":{"position":[[0,7]]},"256":{"position":[[0,7]]},"268":{"position":[[0,7]]},"279":{"position":[[0,7]]},"287":{"position":[[0,7]]},"305":{"position":[[0,7]]},"310":{"position":[[0,8]]},"324":{"position":[[0,7]]},"332":{"position":[[0,7]]},"342":{"position":[[0,7]]},"354":{"position":[[0,7]]},"360":{"position":[[0,7]]},"366":{"position":[[0,7]]},"368":{"position":[[0,7]]},"374":{"position":[[0,7]]},"390":{"position":[[0,8]]},"418":{"position":[[0,7]]},"428":{"position":[[0,7]]},"440":{"position":[[0,8]]},"446":{"position":[[0,7]]},"458":{"position":[[0,7]]},"464":{"position":[[0,8]]},"490":{"position":[[0,8]]},"494":{"position":[[0,7]]},"520":{"position":[[0,7]]},"528":{"position":[[0,7]]},"536":{"position":[[0,7]]},"544":{"position":[[0,7]]},"552":{"position":[[0,7]]},"560":{"position":[[0,7]]},"574":{"position":[[0,7]]},"582":{"position":[[0,7]]},"584":{"position":[[0,7]]},"592":{"position":[[0,7]]},"600":{"position":[[0,7]]},"607":{"position":[[0,7]]},"613":{"position":[[0,7]]},"621":{"position":[[0,7]]},"629":{"position":[[0,7]]},"638":{"position":[[0,7]]},"643":{"position":[[0,7]]},"648":{"position":[[0,7]]},"656":{"position":[[0,7]]},"664":{"position":[[0,7]]},"672":{"position":[[0,7]]},"673":{"position":[[0,7]]},"675":{"position":[[0,7]]},"682":{"position":[[0,7]]},"692":{"position":[[0,7]]},"700":{"position":[[0,7]]},"708":{"position":[[0,7]]},"716":{"position":[[0,7]]},"724":{"position":[[0,7]]},"732":{"position":[[0,7]]},"742":{"position":[[0,7]]},"756":{"position":[[0,7]]},"770":{"position":[[0,7]]},"782":{"position":[[0,7]]},"793":{"position":[[0,7]]},"800":{"position":[[0,7]]},"808":{"position":[[0,7]]},"816":{"position":[[0,7]]},"828":{"position":[[0,7]]},"840":{"position":[[0,7]]},"845":{"position":[[5,7]]},"853":{"position":[[0,7]]},"863":{"position":[[0,7]]},"872":{"position":[[0,7]]},"880":{"position":[[0,7]]},"887":{"position":[[0,7]]},"889":{"position":[[0,7]]},"891":{"position":[[0,7]]},"903":{"position":[[0,7]]},"913":{"position":[[0,7]]},"928":{"position":[[0,7]]},"952":{"position":[[0,7]]},"962":{"position":[[0,7]]},"970":{"position":[[0,7]]},"988":{"position":[[0,7]]},"990":{"position":[[0,7]]},"993":{"position":[[0,7]]},"1001":{"position":[[0,7]]},"1008":{"position":[[0,7]]},"1016":{"position":[[0,7]]},"1024":{"position":[[0,7]]},"1032":{"position":[[0,7]]},"1038":{"position":[[0,7]]},"1046":{"position":[[0,7]]},"1048":{"position":[[0,7]]},"1060":{"position":[[0,7]]},"1072":{"position":[[0,7]]},"1080":{"position":[[0,7]]},"1088":{"position":[[0,7]]},"1100":{"position":[[0,7]]},"1110":{"position":[[0,7]]},"1118":{"position":[[0,7]]},"1126":{"position":[[0,7]]},"1134":{"position":[[0,7]]},"1141":{"position":[[0,7]]},"1148":{"position":[[0,7]]},"1155":{"position":[[0,7]]},"1165":{"position":[[0,7]]},"1180":{"position":[[0,7]]},"1202":{"position":[[0,7]]},"1208":{"position":[[0,7]]},"1526":{"position":[[9,8]]}}}],["exist",{"_index":272,"t":{"1512":{"position":[[15,8]]}}}],["experiment",{"_index":207,"t":{"1248":{"position":[[0,12]]}}}],["explan",{"_index":162,"t":{"473":{"position":[[9,11]]}}}],["facil",{"_index":89,"t":{"147":{"position":[[0,8]]},"246":{"position":[[0,8]]},"476":{"position":[[0,8]]}}}],["facility_input",{"_index":78,"t":{"102":{"position":[[0,15]]},"134":{"position":[[0,15]]},"159":{"position":[[0,15]]},"1186":{"position":[[7,15]]}}}],["featur",{"_index":205,"t":{"1212":{"position":[[0,8]]},"1219":{"position":[[4,8]]},"1223":{"position":[[0,8]]},"1228":{"position":[[0,8]]},"1233":{"position":[[0,8]]},"1238":{"position":[[0,8]]},"1246":{"position":[[4,8]]},"1248":{"position":[[13,8]]},"1261":{"position":[[0,8]]},"1294":{"position":[[0,8]]},"1325":{"position":[[0,8]]},"1336":{"position":[[0,8]]},"1347":{"position":[[0,8]]},"1360":{"position":[[0,8]]},"1394":{"position":[[4,8]]},"1404":{"position":[[4,8]]},"1414":{"position":[[4,8]]},"1419":{"position":[[4,8]]},"1424":{"position":[[4,8]]},"1430":{"position":[[0,8]]},"1435":{"position":[[4,8]]},"1442":{"position":[[4,8]]},"1449":{"position":[[4,8]]},"1456":{"position":[[4,8]]},"1468":{"position":[[8,8]]}}}],["fetch",{"_index":273,"t":{"1514":{"position":[[0,5]]}}}],["file",{"_index":36,"t":{"36":{"position":[[9,4]]},"38":{"position":[[9,4]]},"62":{"position":[[77,4]]},"120":{"position":[[6,5]]},"175":{"position":[[6,5]]},"207":{"position":[[51,4]]},"218":{"position":[[6,4]]},"1398":{"position":[[23,5]]},"1410":{"position":[[23,5]]},"1520":{"position":[[4,5]]}}}],["fill",{"_index":32,"t":{"34":{"position":[[41,7]]}}}],["first",{"_index":146,"t":{"395":{"position":[[45,5]]}}}],["fix",{"_index":156,"t":{"416":{"position":[[0,5]]},"1214":{"position":[[0,5]]},"1220":{"position":[[0,5]]},"1230":{"position":[[0,5]]},"1235":{"position":[[0,5]]},"1240":{"position":[[0,5]]},"1263":{"position":[[4,5]]},"1272":{"position":[[4,5]]},"1283":{"position":[[4,5]]},"1296":{"position":[[4,5]]},"1309":{"position":[[4,5]]},"1327":{"position":[[4,5]]},"1338":{"position":[[4,5]]},"1349":{"position":[[4,5]]},"1362":{"position":[[4,5]]},"1375":{"position":[[4,5]]},"1406":{"position":[[0,5]]},"1416":{"position":[[0,5]]},"1420":{"position":[[0,5]]},"1426":{"position":[[0,5]]},"1432":{"position":[[0,5]]},"1437":{"position":[[0,5]]},"1444":{"position":[[0,5]]},"1451":{"position":[[0,5]]},"1458":{"position":[[0,5]]}}}],["flow",{"_index":159,"t":{"470":{"position":[[19,4]]}}}],["fluid",{"_index":142,"t":{"391":{"position":[[78,5]]},"436":{"position":[[0,5]]},"442":{"position":[[0,5]]}}}],["fluid_dens",{"_index":190,"t":{"984":{"position":[[0,15]]}}}],["fork",{"_index":279,"t":{"1529":{"position":[[0,4]]}}}],["format",{"_index":86,"t":{"124":{"position":[[0,6]]},"186":{"position":[[0,6]]},"193":{"position":[[0,6]]},"205":{"position":[[0,6]]},"221":{"position":[[5,6]]},"246":{"position":[[15,6]]},"254":{"position":[[0,6]]},"266":{"position":[[0,6]]},"277":{"position":[[0,6]]},"285":{"position":[[0,6]]},"291":{"position":[[0,6]]},"295":{"position":[[0,6]]},"300":{"position":[[0,6]]},"314":{"position":[[0,6]]},"322":{"position":[[0,6]]},"330":{"position":[[0,6]]},"340":{"position":[[0,6]]},"352":{"position":[[0,6]]},"358":{"position":[[0,6]]},"364":{"position":[[0,6]]},"372":{"position":[[0,6]]},"378":{"position":[[0,6]]},"384":{"position":[[0,6]]},"410":{"position":[[0,6]]},"424":{"position":[[0,6]]},"432":{"position":[[0,6]]},"438":{"position":[[0,6]]},"444":{"position":[[0,6]]},"456":{"position":[[0,6]]},"462":{"position":[[0,6]]},"488":{"position":[[0,6]]},"518":{"position":[[0,6]]},"526":{"position":[[0,6]]},"534":{"position":[[0,6]]},"542":{"position":[[0,6]]},"550":{"position":[[0,6]]},"558":{"position":[[0,6]]},"566":{"position":[[0,6]]},"572":{"position":[[0,6]]},"580":{"position":[[0,6]]},"590":{"position":[[0,6]]},"598":{"position":[[0,6]]},"605":{"position":[[0,6]]},"619":{"position":[[0,6]]},"627":{"position":[[0,6]]},"636":{"position":[[0,6]]},"641":{"position":[[0,6]]},"646":{"position":[[0,6]]},"654":{"position":[[0,6]]},"662":{"position":[[0,6]]},"670":{"position":[[0,6]]},"680":{"position":[[0,6]]},"687":{"position":[[0,6]]},"698":{"position":[[0,6]]},"706":{"position":[[0,6]]},"714":{"position":[[0,6]]},"722":{"position":[[0,6]]},"730":{"position":[[0,6]]},"738":{"position":[[0,6]]},"754":{"position":[[0,6]]},"768":{"position":[[0,6]]},"780":{"position":[[0,6]]},"791":{"position":[[0,6]]},"798":{"position":[[0,6]]},"806":{"position":[[0,6]]},"814":{"position":[[0,6]]},"826":{"position":[[0,6]]},"838":{"position":[[0,6]]},"851":{"position":[[0,6]]},"858":{"position":[[0,6]]},"870":{"position":[[0,6]]},"878":{"position":[[0,6]]},"885":{"position":[[0,6]]},"901":{"position":[[0,6]]},"909":{"position":[[0,6]]},"926":{"position":[[0,6]]},"936":{"position":[[0,6]]},"942":{"position":[[0,6]]},"950":{"position":[[0,6]]},"960":{"position":[[0,6]]},"968":{"position":[[0,6]]},"992":{"position":[[0,6]]},"999":{"position":[[0,6]]},"1006":{"position":[[0,6]]},"1014":{"position":[[0,6]]},"1022":{"position":[[0,6]]},"1030":{"position":[[0,6]]},"1036":{"position":[[0,6]]},"1044":{"position":[[0,6]]},"1058":{"position":[[0,6]]},"1070":{"position":[[0,6]]},"1078":{"position":[[0,6]]},"1086":{"position":[[0,6]]},"1094":{"position":[[0,6]]},"1098":{"position":[[0,6]]},"1116":{"position":[[0,6]]},"1124":{"position":[[0,6]]},"1132":{"position":[[0,6]]},"1139":{"position":[[0,6]]},"1146":{"position":[[0,6]]},"1153":{"position":[[0,6]]},"1160":{"position":[[0,6]]},"1178":{"position":[[0,6]]},"1194":{"position":[[0,6]]},"1200":{"position":[[0,6]]},"1206":{"position":[[0,6]]},"1494":{"position":[[11,6]]}}}],["forward",{"_index":31,"t":{"34":{"position":[[33,7]]}}}],["fuel_typ",{"_index":79,"t":{"104":{"position":[[0,10]]},"138":{"position":[[0,10]]},"161":{"position":[[0,10]]}}}],["fuelconsum",{"_index":92,"t":{"169":{"position":[[0,13]]}}}],["full",{"_index":84,"t":{"118":{"position":[[0,4]]},"144":{"position":[[0,4]]},"173":{"position":[[0,4]]},"223":{"position":[[0,4]]},"845":{"position":[[0,4]]}}}],["function",{"_index":116,"t":{"297":{"position":[[17,8]]},"934":{"position":[[0,13]]},"958":{"position":[[0,13]]}}}],["gener",{"_index":68,"t":{"66":{"position":[[36,9]]},"269":{"position":[[0,7]]},"310":{"position":[[19,9]]},"362":{"position":[[0,7]]},"370":{"position":[[0,7]]},"393":{"position":[[44,7]]}}}],["generatorset",{"_index":88,"t":{"142":{"position":[[0,13]]},"167":{"position":[[0,13]]}}}],["git",{"_index":260,"t":{"1494":{"position":[[0,3]]},"1502":{"position":[[11,3]]},"1504":{"position":[[6,3]]},"1506":{"position":[[10,3]]},"1508":{"position":[[5,3]]}}}],["github",{"_index":274,"t":{"1514":{"position":[[19,6]]},"1516":{"position":[[21,6]]},"1524":{"position":[[16,6]]}}}],["guidelin",{"_index":259,"t":{"1490":{"position":[[0,10]]}}}],["header",{"_index":95,"t":{"184":{"position":[[0,6]]},"191":{"position":[[0,6]]},"199":{"position":[[0,6]]},"207":{"position":[[0,6]]},"250":{"position":[[0,6]]}}}],["heater",{"_index":119,"t":{"307":{"position":[[0,7]]}}}],["includ",{"_index":181,"t":{"887":{"position":[[12,7]]},"889":{"position":[[12,7]]},"891":{"position":[[12,7]]}}}],["indent",{"_index":6,"t":{"14":{"position":[[0,11]]}}}],["inform",{"_index":165,"t":{"476":{"position":[[9,11]]},"478":{"position":[[9,11]]}}}],["initi",{"_index":254,"t":{"1484":{"position":[[0,8]]}}}],["input",{"_index":85,"t":{"120":{"position":[[0,5]]},"146":{"position":[[0,5]]},"175":{"position":[[0,5]]},"230":{"position":[[40,6]]},"246":{"position":[[9,5]]},"344":{"position":[[19,5]]},"370":{"position":[[59,5]]},"1398":{"position":[[0,6]]},"1410":{"position":[[0,6]]}}}],["instal",{"_index":81,"t":{"110":{"position":[[0,13]]},"112":{"position":[[0,12]]},"114":{"position":[[0,12]]},"140":{"position":[[0,13]]},"165":{"position":[[0,12]]}}}],["integr",{"_index":231,"t":{"1306":{"position":[[11,11]]},"1317":{"position":[[11,11]]},"1372":{"position":[[11,11]]},"1377":{"position":[[11,11]]},"1390":{"position":[[11,11]]}}}],["interpol",{"_index":50,"t":{"62":{"position":[[34,13]]}}}],["interstage_pressure_control",{"_index":155,"t":{"414":{"position":[[0,27]]}}}],["interv",{"_index":114,"t":{"264":{"position":[[5,9]]},"273":{"position":[[5,9]]}}}],["invalid",{"_index":13,"t":{"18":{"position":[[22,7]]}}}],["item",{"_index":184,"t":{"887":{"position":[[41,4]]}}}],["keyword",{"_index":154,"t":{"412":{"position":[[0,7]]},"498":{"position":[[10,8]]}}}],["known",{"_index":138,"t":{"386":{"position":[[39,5]]}}}],["level",{"_index":170,"t":{"498":{"position":[[4,5]]}}}],["librari",{"_index":5,"t":{"6":{"position":[[7,7]]}}}],["list",{"_index":183,"t":{"887":{"position":[[36,4]]},"891":{"position":[[20,4]]}}}],["longer",{"_index":61,"t":{"64":{"position":[[40,6]]}}}],["ltp",{"_index":34,"t":{"36":{"position":[[0,3]]},"66":{"position":[[8,3]]},"1400":{"position":[[8,3]]}}}],["main",{"_index":45,"t":{"51":{"position":[[0,4]]}}}],["make",{"_index":255,"t":{"1486":{"position":[[0,4]]}}}],["map/object",{"_index":182,"t":{"887":{"position":[[20,10]]},"889":{"position":[[20,10]]}}}],["margin",{"_index":135,"t":{"376":{"position":[[14,6]]}}}],["markdown",{"_index":252,"t":{"1472":{"position":[[9,8]]},"1474":{"position":[[0,8]]}}}],["messag",{"_index":8,"t":{"16":{"position":[[6,8]]},"18":{"position":[[6,8]]}}}],["method",{"_index":0,"t":{"3":{"position":[[5,6]]},"404":{"position":[[17,7]]},"406":{"position":[[17,7]]}}}],["migrat",{"_index":43,"t":{"48":{"position":[[5,9]]},"49":{"position":[[0,9]]},"53":{"position":[[4,9]]},"57":{"position":[[5,9]]},"58":{"position":[[0,9]]},"89":{"position":[[5,9]]}}}],["miscellan",{"_index":214,"t":{"1267":{"position":[[0,13]]},"1276":{"position":[[0,13]]},"1287":{"position":[[0,13]]},"1300":{"position":[[0,13]]},"1313":{"position":[[0,13]]},"1331":{"position":[[0,13]]},"1342":{"position":[[0,13]]},"1353":{"position":[[0,13]]},"1366":{"position":[[0,13]]},"1385":{"position":[[0,13]]},"1388":{"position":[[0,13]]}}}],["model",{"_index":20,"t":{"28":{"position":[[0,9]]},"98":{"position":[[5,5]]},"106":{"position":[[0,6]]},"118":{"position":[[16,5]]},"130":{"position":[[5,5]]},"136":{"position":[[0,6]]},"144":{"position":[[5,5]]},"155":{"position":[[5,5]]},"173":{"position":[[16,5]]},"232":{"position":[[0,5]]},"264":{"position":[[45,6]]},"320":{"position":[[18,5]]},"328":{"position":[[25,5]]},"386":{"position":[[28,5]]},"388":{"position":[[28,5]]},"402":{"position":[[8,9]]},"436":{"position":[[6,5]]},"442":{"position":[[6,5]]},"460":{"position":[[52,5]]},"635":{"position":[[37,5]]},"640":{"position":[[39,5]]},"645":{"position":[[39,5]]},"748":{"position":[[22,5]]},"919":{"position":[[7,6]]},"944":{"position":[[10,5]]},"1054":{"position":[[29,5]]},"1192":{"position":[[7,6]]}}}],["multipl",{"_index":175,"t":{"645":{"position":[[50,8]]}}}],["new",{"_index":64,"t":{"66":{"position":[[4,3]]},"1219":{"position":[[0,3]]},"1246":{"position":[[0,3]]},"1394":{"position":[[0,3]]},"1404":{"position":[[0,3]]},"1414":{"position":[[0,3]]},"1419":{"position":[[0,3]]},"1424":{"position":[[0,3]]},"1435":{"position":[[0,3]]},"1442":{"position":[[0,3]]},"1449":{"position":[[0,3]]},"1456":{"position":[[0,3]]}}}],["now",{"_index":25,"t":{"32":{"position":[[29,3]]}}}],["number",{"_index":141,"t":{"388":{"position":[[47,6]]},"397":{"position":[[29,6]]}}}],["object",{"_index":185,"t":{"889":{"position":[[36,6]]},"891":{"position":[[30,6]]}}}],["on",{"_index":54,"t":{"62":{"position":[[73,3]]},"460":{"position":[[48,3]]}}}],["oper",{"_index":22,"t":{"32":{"position":[[0,11]]},"227":{"position":[[10,9]]}}}],["option",{"_index":152,"t":{"404":{"position":[[35,7]]},"406":{"position":[[41,7]]}}}],["order",{"_index":40,"t":{"40":{"position":[[25,5]]}}}],["output",{"_index":247,"t":{"1400":{"position":[[0,7]]}}}],["overview",{"_index":44,"t":{"49":{"position":[[10,8]]},"58":{"position":[[10,8]]},"98":{"position":[[11,8]]},"130":{"position":[[11,8]]},"155":{"position":[[11,8]]}}}],["point",{"_index":132,"t":{"362":{"position":[[48,5]]},"370":{"position":[[37,5]]},"393":{"position":[[81,5]]}}}],["possibl",{"_index":49,"t":{"62":{"position":[[7,8]]}}}],["power",{"_index":117,"t":{"302":{"position":[[0,5]]}}}],["predefin",{"_index":130,"t":{"362":{"position":[[30,10]]},"393":{"position":[[91,10]]},"395":{"position":[[97,10]]},"436":{"position":[[18,10]]}}}],["prerequisit",{"_index":248,"t":{"1462":{"position":[[0,13]]},"1480":{"position":[[0,13]]}}}],["pressur",{"_index":150,"t":{"404":{"position":[[0,8]]},"406":{"position":[[0,8]]},"416":{"position":[[6,8]]},"645":{"position":[[71,9]]}}}],["problem",{"_index":12,"t":{"16":{"position":[[32,8]]}}}],["process",{"_index":158,"t":{"470":{"position":[[11,7]]}}}],["profil",{"_index":164,"t":{"474":{"position":[[20,8]]}}}],["propos",{"_index":15,"t":{"20":{"position":[[0,8]]},"24":{"position":[[0,8]]}}}],["pull",{"_index":256,"t":{"1486":{"position":[[7,4]]},"1492":{"position":[[0,4]]},"1527":{"position":[[0,4]]}}}],["pump",{"_index":121,"t":{"320":{"position":[[0,4]]},"690":{"position":[[0,5]]},"861":{"position":[[0,5]]},"1161":{"position":[[0,5]]},"1166":{"position":[[0,5]]}}}],["pump_chart_single_spe",{"_index":94,"t":{"182":{"position":[[0,23]]}}}],["pump_chart_variable_spe",{"_index":97,"t":{"188":{"position":[[0,25]]}}}],["pump_system",{"_index":123,"t":{"328":{"position":[[0,11]]}}}],["python",{"_index":4,"t":{"6":{"position":[[0,6]]}}}],["qualiti",{"_index":75,"t":{"85":{"position":[[0,7]]}}}],["rate",{"_index":29,"t":{"34":{"position":[[14,5],[60,5]]},"232":{"position":[[20,4]]},"976":{"position":[[0,5]]},"1065":{"position":[[43,5]]}}}],["rate_fract",{"_index":187,"t":{"978":{"position":[[0,14]]}}}],["read",{"_index":11,"t":{"16":{"position":[[27,4]]}}}],["readabl",{"_index":262,"t":{"1496":{"position":[[0,11]]}}}],["recircul",{"_index":153,"t":{"406":{"position":[[27,13]]}}}],["refactor",{"_index":217,"t":{"1269":{"position":[[5,11]]},"1278":{"position":[[5,11]]},"1289":{"position":[[5,11]]},"1302":{"position":[[5,11]]},"1315":{"position":[[5,11]]},"1333":{"position":[[5,11]]},"1344":{"position":[[5,11]]},"1355":{"position":[[5,11]]},"1368":{"position":[[5,11]]},"1381":{"position":[[5,11]]}}}],["refer",{"_index":113,"t":{"262":{"position":[[0,9]]},"271":{"position":[[0,9]]}}}],["regular",{"_index":196,"t":{"1061":{"position":[[9,10]]},"1063":{"position":[[0,10]]}}}],["report",{"_index":194,"t":{"1056":{"position":[[0,9]]}}}],["repositori",{"_index":266,"t":{"1506":{"position":[[14,10]]},"1529":{"position":[[9,10]]}}}],["request",{"_index":257,"t":{"1486":{"position":[[12,7]]},"1492":{"position":[[5,8]]},"1527":{"position":[[5,8]]}}}],["requir",{"_index":96,"t":{"184":{"position":[[7,12]]},"191":{"position":[[7,12]]},"199":{"position":[[16,12]]},"207":{"position":[[7,12]]},"250":{"position":[[16,12]]},"426":{"position":[[0,12]]},"474":{"position":[[0,8]]},"740":{"position":[[0,12]]},"911":{"position":[[0,12]]},"1106":{"position":[[0,8]]}}}],["resampl",{"_index":28,"t":{"34":{"position":[[0,10]]}}}],["reservoir",{"_index":110,"t":{"230":{"position":[[30,9]]}}}],["resourc",{"_index":90,"t":{"147":{"position":[[9,9]]},"149":{"position":[[11,9]]},"1398":{"position":[[14,8]]},"1410":{"position":[[14,8]]}}}],["result",{"_index":21,"t":{"31":{"position":[[0,6]]},"510":{"position":[[11,7]]}}}],["review",{"_index":258,"t":{"1488":{"position":[[9,6]]}}}],["run",{"_index":171,"t":{"504":{"position":[[6,3]]}}}],["sampl",{"_index":100,"t":{"207":{"position":[[28,7]]}}}],["second",{"_index":148,"t":{"395":{"position":[[84,6]]}}}],["selftest",{"_index":172,"t":{"506":{"position":[[6,8]]}}}],["send",{"_index":275,"t":{"1516":{"position":[[0,4]]},"1524":{"position":[[0,4]]}}}],["seri",{"_index":59,"t":{"64":{"position":[[22,6]]},"262":{"position":[[18,6]]},"271":{"position":[[18,6]]},"1063":{"position":[[21,6]]},"1108":{"position":[[29,6]]}}}],["set",{"_index":23,"t":{"32":{"position":[[12,8]]},"310":{"position":[[29,3]]},"1502":{"position":[[0,7]]}}}],["setup",{"_index":106,"t":{"218":{"position":[[0,5]]}}}],["shore",{"_index":118,"t":{"302":{"position":[[11,5]]}}}],["show",{"_index":173,"t":{"508":{"position":[[6,4]]},"510":{"position":[[6,4]]},"512":{"position":[[6,4]]}}}],["signific",{"_index":73,"t":{"83":{"position":[[13,11]]}}}],["simplifi",{"_index":136,"t":{"386":{"position":[[0,10]]},"388":{"position":[[0,10]]},"470":{"position":[[0,10]]}}}],["singl",{"_index":127,"t":{"350":{"position":[[13,6]]},"391":{"position":[[2,8]]},"393":{"position":[[2,8]]},"635":{"position":[[7,6]]}}}],["solut",{"_index":16,"t":{"20":{"position":[[9,8]]},"24":{"position":[[9,8]]}}}],["spec",{"_index":147,"t":{"395":{"position":[[69,4]]}}}],["special",{"_index":17,"t":{"22":{"position":[[0,7]]},"1065":{"position":[[0,8]]},"1468":{"position":[[0,7]]}}}],["specifi",{"_index":157,"t":{"442":{"position":[[22,9]]}}}],["speed",{"_index":128,"t":{"350":{"position":[[20,5]]},"356":{"position":[[22,5]]},"376":{"position":[[34,5]]},"391":{"position":[[51,5]]},"635":{"position":[[14,5]]},"640":{"position":[[16,5]]},"645":{"position":[[16,5]]}}}],["stage",{"_index":139,"t":{"386":{"position":[[56,6]]},"388":{"position":[[68,6]]},"395":{"position":[[28,6],[51,5]]},"397":{"position":[[39,6]]}}}],["standard",{"_index":251,"t":{"1472":{"position":[[0,8]]}}}],["statu",{"_index":277,"t":{"1518":{"position":[[6,6]]}}}],["steam",{"_index":66,"t":{"66":{"position":[[22,5]]}}}],["stp",{"_index":37,"t":{"38":{"position":[[0,3]]}}}],["stream",{"_index":176,"t":{"645":{"position":[[59,7]]},"1065":{"position":[[32,6]]}}}],["structur",{"_index":39,"t":{"40":{"position":[[11,9]]},"269":{"position":[[8,9]]}}}],["style",{"_index":263,"t":{"1498":{"position":[[5,5]]}}}],["subsurfac",{"_index":163,"t":{"474":{"position":[[9,10]]}}}],["suction_pressur",{"_index":188,"t":{"980":{"position":[[0,17]]}}}],["summari",{"_index":253,"t":{"1474":{"position":[[9,7]]}}}],["support",{"_index":87,"t":{"126":{"position":[[0,9]]},"316":{"position":[[0,9]]},"422":{"position":[[0,9]]},"762":{"position":[[0,9]]},"944":{"position":[[0,9]]}}}],["surg",{"_index":134,"t":{"376":{"position":[[0,5]]}}}],["switch",{"_index":270,"t":{"1512":{"position":[[0,6]]}}}],["syntax",{"_index":107,"t":{"218":{"position":[[11,6]]}}}],["tabl",{"_index":103,"t":{"211":{"position":[[8,6]]},"248":{"position":[[8,5]]}}}],["tell",{"_index":267,"t":{"1508":{"position":[[0,4]]}}}],["tempor",{"_index":177,"t":{"748":{"position":[[0,8]]}}}],["test",{"_index":221,"t":{"1280":{"position":[[0,5]]},"1304":{"position":[[0,5]]},"1370":{"position":[[0,5]]},"1379":{"position":[[0,5]]}}}],["theori",{"_index":149,"t":{"400":{"position":[[0,6]]}}}],["time",{"_index":58,"t":{"64":{"position":[[17,4]]},"262":{"position":[[13,4]]},"264":{"position":[[0,4]]},"271":{"position":[[13,4]]},"273":{"position":[[0,4]]},"843":{"position":[[5,4]]},"1063":{"position":[[16,4]]},"1108":{"position":[[24,4]]}}}],["time_seri",{"_index":47,"t":{"60":{"position":[[14,11]]},"100":{"position":[[0,11]]},"132":{"position":[[0,11]]},"157":{"position":[[0,11]]},"1188":{"position":[[7,11]]}}}],["timeseri",{"_index":91,"t":{"149":{"position":[[0,10]]}}}],["top",{"_index":169,"t":{"498":{"position":[[0,3]]}}}],["train",{"_index":137,"t":{"386":{"position":[[22,5]]},"388":{"position":[[22,5]]},"395":{"position":[[13,5]]},"397":{"position":[[13,5]]},"460":{"position":[[23,5]]},"635":{"position":[[31,5]]},"640":{"position":[[33,5]]},"645":{"position":[[33,5]]}}}],["tsv",{"_index":35,"t":{"36":{"position":[[4,4]]},"38":{"position":[[4,4]]}}}],["turbin",{"_index":67,"t":{"66":{"position":[[28,7]]},"393":{"position":[[11,7]]},"460":{"position":[[35,7]]}}}],["two",{"_index":145,"t":{"395":{"position":[[24,3]]}}}],["type",{"_index":51,"t":{"62":{"position":[[48,5]]},"126":{"position":[[10,5]]},"316":{"position":[[10,5]]},"344":{"position":[[25,4]]},"422":{"position":[[10,5]]},"762":{"position":[[10,5]]},"944":{"position":[[16,5]]},"1108":{"position":[[36,4]]}}}],["unicod",{"_index":19,"t":{"22":{"position":[[22,7]]}}}],["unit",{"_index":99,"t":{"199":{"position":[[11,4]]},"209":{"position":[[0,5]]},"250":{"position":[[11,4]]},"326":{"position":[[0,5]]},"334":{"position":[[0,5]]}}}],["unknown",{"_index":140,"t":{"388":{"position":[[39,7]]},"395":{"position":[[61,7]]},"397":{"position":[[50,7]]}}}],["up",{"_index":264,"t":{"1502":{"position":[[8,2]]}}}],["us",{"_index":24,"t":{"32":{"position":[[21,4]]},"238":{"position":[[13,3]]},"240":{"position":[[7,3]]},"436":{"position":[[12,5]]},"492":{"position":[[0,5]]},"635":{"position":[[0,3]]},"640":{"position":[[0,3]]},"645":{"position":[[0,3]]},"776":{"position":[[0,3]]},"778":{"position":[[0,3]]},"783":{"position":[[0,3]]},"785":{"position":[[0,3]]},"919":{"position":[[0,3]]},"921":{"position":[[0,3]]},"1034":{"position":[[0,3]]},"1054":{"position":[[0,3]]},"1096":{"position":[[0,3]]},"1186":{"position":[[0,3]]},"1188":{"position":[[0,3]]},"1190":{"position":[[0,3]]},"1192":{"position":[[0,3]]},"1504":{"position":[[0,5]]}}}],["usag",{"_index":70,"t":{"72":{"position":[[8,5]]},"320":{"position":[[12,5]]},"328":{"position":[[19,5]]},"412":{"position":[[8,5]]},"748":{"position":[[16,5]]},"841":{"position":[[6,5]]},"1054":{"position":[[23,5]]}}}],["user",{"_index":125,"t":{"350":{"position":[[0,4]]},"356":{"position":[[0,4]]},"391":{"position":[[29,4]]},"442":{"position":[[17,4]]}}}],["v8.8",{"_index":192,"t":{"1034":{"position":[[49,5]]}}}],["valid",{"_index":167,"t":{"480":{"position":[[0,10]]}}}],["valu",{"_index":186,"t":{"889":{"position":[[43,5]]},"891":{"position":[[37,5]]}}}],["variabl",{"_index":80,"t":{"108":{"position":[[0,9]]},"163":{"position":[[0,9]]},"356":{"position":[[13,8]]},"376":{"position":[[25,8]]},"391":{"position":[[42,8]]},"486":{"position":[[9,9]]},"492":{"position":[[6,9]]},"640":{"position":[[7,8]]},"645":{"position":[[7,8]]}}}],["variable_speed_compressor_train_multiple_streams_and_pressur",{"_index":199,"t":{"1096":{"position":[[7,62]]}}}],["variables/express",{"_index":115,"t":{"264":{"position":[[19,21]]}}}],["vector",{"_index":52,"t":{"62":{"position":[[58,7]]}}}],["venting_emitt",{"_index":77,"t":{"90":{"position":[[14,16]]},"1034":{"position":[[20,16]]}}}],["version",{"_index":201,"t":{"1198":{"position":[[6,7]]},"1204":{"position":[[11,7]]}}}],["within",{"_index":53,"t":{"62":{"position":[[66,6]]}}}],["work",{"_index":250,"t":{"1466":{"position":[[7,5]]}}}],["workflow",{"_index":161,"t":{"472":{"position":[[0,8]]},"473":{"position":[[0,8]]},"1526":{"position":[[0,8]]}}}],["yaml",{"_index":10,"t":{"16":{"position":[[22,4]]},"29":{"position":[[0,4]]},"48":{"position":[[0,4]]},"57":{"position":[[0,4]]},"89":{"position":[[0,4]]},"98":{"position":[[0,4]]},"118":{"position":[[11,4]]},"130":{"position":[[0,4]]},"155":{"position":[[0,4]]},"173":{"position":[[11,4]]},"221":{"position":[[0,4]]},"512":{"position":[[11,4]]},"1252":{"position":[[0,4]]},"1398":{"position":[[7,4]]},"1410":{"position":[[7,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"info Currently the only officially supported method is the eCalc CLI using eCalc YAML models. There are three options to run eCalc models: eCalc CLI eCalc Python library","s":"API Reference","u":"/ecalc/docs/about/getting_started/","h":"","p":1},{"i":5,"t":"Choose the eCalc CLI option if you: Don't know much about programming Have simple requirements Can define the eCalc models statically","s":"eCalc CLI","u":"/ecalc/docs/about/getting_started/","h":"#ecalc-cli","p":1},{"i":7,"t":"Choose the Python Library option if you: Are a developer or advanced user, and want to build eCalc models and get results programmatically Use Python, and you need to use (parts of) eCalc as a dependency Need access to \"inner core functionality\" of eCalc note Python Library is not yet officially available and not recommended to use due to upcoming breaking changes very soon","s":"Python Library","u":"/ecalc/docs/about/getting_started/","h":"#python-library","p":1},{"i":9,"t":"warning It is currently not recommended to use the Python library due to upcoming breaking changes. If you choose to use the Python library programmatically when creating eCalc models, there is a greater flexibility in dynamically changing the eCalc models. See all commands and options in the API reference","s":"Python Library","u":"/ecalc/docs/about/getting_started/library/","h":"","p":8},{"i":11,"t":"We have chosen the way to model eCalc models is in the YAML format. For a simple introduction to YAML, please see here The eCalc YAML model can either be run directly with the eCalc CLI or loaded using the Python library For getting started setting up your first eCalc YAML model, please see Setup an eCalc Model, look at some example YAMLs here and refer to the vocabulary that we use here.","s":"YAML","u":"/ecalc/docs/about/getting_started/yaml/","h":"","p":10},{"i":13,"t":"While running eCalc as a Unix command-line tool, you may come across seemingly incomprehensible error messages. This page tries to explain some common error messages and proposes how to fix them.","s":"FAQ / Troubleshooting","u":"/ecalc/docs/about/getting_started/cli/faq","h":"","p":12},{"i":15,"t":"In YAML, the indentation is very important and specifies the level in the hierarchy for the input. If you have the wrong indentation somewhere, you may get both YAML read errors and/or eCalc setup errors.","s":"Indentation errors","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#indentation-errors","p":12},{"i":17,"t":"The following error messages are common when you have formatting issues in your YAML file: mapping values are not allowed here while scanning a simple key in \"\", line , column could not find expected ':', line , column while parsing a block mapping in , line , column expected , but found ''","s":"Error messages due to YAML read problems","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-yaml-read-problems","p":12},{"i":19,"t":"The configuration expects a sub-hierarchy of data. After reading YAML, this data sub-hierarchy would be of object type dictionary (dict) and in some cases contain lists or other objects. If invalid data is input, the error message would indicate that the type is wrong because it is not a 'dict'/'list' or other type None should be instance of 'dict' None should be instance of 'list'","s":"Error messages due to invalid eCalc configuration","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#error-messages-due-to-invalid-ecalc-configuration","p":12},{"i":21,"t":"Check your YAML setup file for correct indentation and correct format of values for each eCalc key.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution","p":12},{"i":23,"t":"eCalc uses ruamel.yaml to read the YAML setup files. Some (text) files have an encoding not supported and will thus result in an error message. One example of this is an unrecognized \"BOM\" character in \"UTF-8 Unicode\". Error message while scanning a simple key in \"\", line , column 1 could not find expected ':', line , column 1","s":"Special characters in Unicode","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#special-characters-in-unicode","p":12},{"i":25,"t":"Check the encoding of your setupfile (and inputfiles): $ file .yml If the output of this is not \"ASCII text\", convert your file to \"US-ASCII\" using iconv. Example when .yml is of type \"UTF-8\" $ iconv -f UTF-8 -t US-ASCII//TRANSLIT -o .yml .yml Now try to run again using the new file .yml.","s":"Proposed solution","u":"/ecalc/docs/about/getting_started/cli/faq","h":"#proposed-solution-1","p":12},{"i":27,"t":"Model changes Result changes Behaviour","s":"v8.1 to v8.2","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"","p":26},{"i":30,"t":"LTP​ Two new consumer categories are added: HEATER and BOILER","s":"YAML","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#yaml","p":26},{"i":33,"t":"Consumer systems will now refer to the first operational setting as 1 instead of 0. 0 means that \"No setting was used\", indicating that none of the operational settings was able to handle the stream. This will make it easier for users to find the corresponding operational setting that is/was active for the different timesteps.","s":"Operational settings used is now 1-based","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#operational-settings-used-is-now-1-based","p":26},{"i":35,"t":"All calculations are performed on a global time vector, which is the union of all dates found in the input resource files (csv files) where INFLUENCE_TIME_VECTOR is set to True, dates found in the eCalc model yaml-file (temporal models), and dates in the requested output frequency. If the global time vector and the dates in the requested output frequency does not coincide fully, a resampling of the results needs to be performed. Previously this was done by simply picking the first available rate in the time interval (forward filling). The rates are thought to be constant in a period between two dates, hence the forward filling will disconnect the rates and the cumulative volumes. This has now been changed to calculating the average rate from all dates in the global time vector within a date range in the requested output frequency, to keep the rate and cumulative consistent with each other. This average will take into account the lengths of the periods and the regularity within each period. The figure below shows a comparison of how the resampling would previously have been done compared to how it is done now when making quarterly output from monthly results. TLDR; this change will make it possible to use the rate output data (rate from a point in time) from eCalc correctly.","s":"Resampling of rates changed from forward filling to average rates","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#resampling-of-rates-changed-from-forward-filling-to-average-rates","p":26},{"i":37,"t":"Column Total CO2 is removed from LTP output (both for fixed & mobile installations) Add relevant columns in ltp-file for the two new consumer categories HEATER and BOILER Re-order some of the columns in the ltp-file, for more logical order Turbine-columns are now filtered on the two consumer categories TURBINE-GENERATOR and GAS-DRIVEN-COMPRESSOR, as it is no longer only turbines that are consumers of FUEL-GAS","s":"LTP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#ltp-tsv-file","p":26},{"i":39,"t":"Report CO2 emissions for both fixed- and mobile installations Report CH4 emissions for fixed installations","s":"STP .tsv file","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#stp-tsv-file","p":26},{"i":41,"t":"The JSON result file has changed format for emissions. Emissions were previously listed in a list, but is now listed in a map: \"emissions\": [ { \"name\": \"co2\" ... to \"emissions\": { \"co2\": { \"name\": \"co2\" ... This will/may also affect the order of which emissions are presented in the result file, but should from now on be consistent.","s":"Emissions, structure and order","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#emissions-structure-and-order","p":26},{"i":44,"t":"eCalc will now consistently NOT evaluate and run calculations if a CONDITION is not fulfilled. Conditions can be set on most energy consumers, to indicate whether the consumer is active or not at a given timestep. Previously the consumer was evaluated even though a condition was not fulfilled to reflect \"what would have happened if it was active\". However this has proven to be difficult for users to understand and remember when the overall model result is being evaluated and analyzed. In order to prevent user errors, we have decided to consistently NOT evaluate a consumer for timesteps where it is disabled (conditions evaluated to true).","s":"Conditions","u":"/ecalc/docs/about/migration_guides/v8-1_to_v8-2","h":"#conditions","p":26},{"i":47,"t":"In this migration guide you will find: YAML changes CLI changes","s":"v7 to v8","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"","p":46},{"i":50,"t":"This doc guides you through migrating an existing eCalc™ model from version v7 to v8. We try to make this as easy as possible, and provide a step-by-step migration guide.","s":"Migration overview","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#migration-overview","p":46},{"i":52,"t":"All component names must be unique to avoid ambiguity in reporting UNITS are required when setting up compressor and pump charts Restrict allowed characters in component names and emission names NAME no longer used for LTP reporting, use CATEGORY instead Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS) 1. All component names must be unique​ All component names must be unique in order to avoid ambiguity in reporting. Components include asset/ecalc-model, installation, generator sets, electricity consumers, fuel consumers and direct emitters. main.yaml INSTALLATIONS: - NAME: Installation ... GENERATORSETS: - NAME: Genset ... CONSUMERS: - NAME: Consumer ... - NAME: Consumer ... - NAME: Genset ... FUELCONSUMERS: - NAME: FuelConsumer ... - NAME: FuelConsumer ... DIRECT_EMITTER: - NAME: DirectEmitter ... - NAME: DirectEmitter ... - NAME: Installation ... This model is no longer valid, and the duplicated installation names are highlighted. To make this model valid these names needs to be changed. For example: main.yaml INSTALLATIONS: - NAME: Installation_A ... GENERATORSETS: - NAME: Genset_A ... CONSUMERS: - NAME: Consumer_A ... - NAME: Consumer_B ... - NAME: Genset_B ... FUELCONSUMERS: - NAME: FuelConsumer_A ... - NAME: FuelConsumer_B ... DIRECT_EMITTER: - NAME: DirectEmitter_A ... - NAME: DirectEmitter_B ... - NAME: Installation_B ... This will make it possible to attribute results to each consumer by name, and removes any an ambiguity when interpreting eCalc™ results. See INSTALLATION, GENERATORSET, CONSUMERS, FUELCONSUMERS, VENTING_EMITTER for more details about the relevant keywords. Are you using power from shore? We have implemented temporal categories for consumers to support the power from shore implementation in use. Instead of duplicating the generator set and setting the POWER-FROM-SHORE category, it is now possible to change the category at a certain date. This is the same syntax as other temporal models. CATEGORY: 2020-01-01: TURBINE-GENERATOR 2030-01-01: POWER-FROM-SHORE See Power from shore for more information. 2. UNITS for pump and compressor charts​ Compressor and pump charts has previously had implicit units, without requiring the operator to specify what units are actually being used. This increases the risk of wrong specification, and makes it more difficult to hand over models. To amend this issue, and to open up for more flexibility in regard to units, it is now mandatory to specify. To keep the old defaults you can do the following: main.yaml FACILITY_INPUTS: - NAME: single_speed_pump_chart FILE: TYPE: PUMP_CHART_SINGLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE - NAME: variable_speed_pump_chart FILE: TYPE: PUMP_CHART_VARIABLE_SPEED UNITS: RATE: AM3_PER_HOUR HEAD: M EFFICIENCY: PERCENTAGE MODELS: - NAME: single_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: SINGLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: FRACTION CURVES: ... - NAME: variable_speed_compressor_chart TYPE: COMPRESSOR_CHART CHART_TYPE: VARIABLE_SPEED UNITS: HEAD: M RATE: AM3_PER_HOUR EFFICIENCY: FRACTION CURVES: ... ... See COMPRESSOR CHART and PUMP CHART for more details about the relevant keywords. 3. Restrict allowed characters in component names and emission names​ Component names can now only consist of letters (a-z, upper and lower case), numbers (0-9), underscore (_), hyphen (-) and space ( ). Emission names can now only consist of letters (a-z, upper and lower case), numbers (0-9) and underscore (_). 4. NAME no longer used for LTP reporting, use CATEGORY instead​ We have categories for FLARE and COLD-VENTING-FUGITIVE, and have introduced categories for LOADING and STORAGE. These should now be used instead of NAME. main.yaml INSTALLATIONS: - NAME: Installation_A ... GENERATORSETS: - NAME: Genset_A ... CONSUMERS: - NAME: Consumer_A ... FUELCONSUMERS: - NAME: loading # Name will no longer be used in LTP reporting CATEGORY: LOADING # Category must be used to include it in LTP reporting FUEL: Fuel_A ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: storage # Name will no longer be used in LTP reporting CATEGORY: STORAGE # Category must be used to include it in LTP reporting FUEL: Fuel_B ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: flare # Name will no longer be used in LTP reporting CATEGORY: FLARE # Category must be used to include it in LTP reporting FUEL: Fuel_C ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... - NAME: cold_venting_fugitives_nmvoc # Name will no longer be used in LTP reporting CATEGORY: COLD-VENTING-FUGITIVE # Category must be used to include it in LTP reporting FUEL: Fuel_D # The fuel specification determines what emissions will be used in LTP ENERGY_USAGE_MODEL: TYPE: DIRECT FUELRATE: Oil_rate_per_timestep ... ... 5. Not possible to use custom category names, pre-defined categories must be uppercase with hyphen as separator (i.e. FUEL-GAS)​ Only a limited pre-defined set of categories is valid input to the CATEGORY-keyword, it is no longer possible to use custom names. The input is case-sensitive and must match exactly with the pre-defined names. See CLI Docs for full documentation.","s":"Main differences","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#main-differences","p":46},{"i":54,"t":"This version includes some changes to how the CLI is invoked and changes to default behavior. Invoking eCalc™ directly is no longer supported, use ecalc run instead. Log level should be specified as the first argument + log to file Model yaml-file needs to come last Extrapolation (correction) is now always used and cannot be disabled Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export Simple results are now default for json 1. Invoking eCalc™ directly is no longer supported, use ecalc run instead.​ To make it possible to add ecalc show we added the ecalc run command. In v8 it is required to specify run when calculating a model. If you previously ran eCalc™ with this command $ ecalc ./my-model.yaml you should now use $ ecalc run ./my-model.yaml 2. Log level should be specified as the first argument + log to file​ Previously you could specify the --log argument after run, this is no longer possible. This is the new way of specifying log level. $ ecalc --log DEBUG run ./my-model.yaml In addition we are introducing --log-folder where you can direct and store the log in a given path to easily look at the log of running later than scrolling in the terminal window. Due to the excessive amount of logs that eCalc produces when running at low log levels, we have set the log to only log at WARNING and above (WARNING + ERROR messages). The user must make sure that the path/folder exists before running and that you have correct permissions, as eCalc will NOT do that for you. $ ecalc --log DEBUG --log-folder . run ./my-model.yaml As you see above, the argument MUST be added BEFORE the run argument. 3. Model yaml-file needs to come last​ When running eCalc™ you will now need to set the model file argument last. ecalc [OPTIONS] COMMAND [ARGS] [MODEL YAML-file] See the CLI Docs or run ecalc --help for the full documentation. 4. Extrapolation correction is no longer optional​ We have removed the extrapolation correction argument. eCalc™ will now always \"extrapolate\" values. The main reason for making this change was that the feature was in general always used, in addition to being a confusing term. Let us know if you have a use-case where this was needed. 5. Argument for LTP export has changed from: --centuries-ltp-export to --ltp-export​ To prepare for Open Source and to make the LTP export more agnostic (even though the column names are heavily affected by Centuries), we simplify the argument to get LTP results. See CLI Docs for full documentation. 6. Simple results are now default for json​ Detailed output (or any json) should mainly be used for QA and advanced users, and is no longer shown by default. To keep old behavior, the user now needs to use the --detailed-output option when running the CLI. See CLI reference docs for more details.","s":"CLI migration","u":"/ecalc/docs/about/migration_guides/v7_to_v8","h":"#cli-migration","p":46},{"i":56,"t":"In this migration guide you will find: YAML changes","s":"v8 to v8.1","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"","p":55},{"i":59,"t":"This doc guides you through migrating an existing eCalc™ model from version v8 to v8.1. We try to make this as easy as possible, and provide a step-by-step migration guide.","s":"Migration overview","u":"/ecalc/docs/about/migration_guides/v8_to_v81","h":"#migration-overview","p":55},{"i":61,"t":"RATE_INTERPOLATION_TYPE is renamed to INTERPOLATION_TYPE New time series type: DEFAULT with default RIGHT interpolation RESERVOIR type is removed Previously, it looked like this: TIME_SERIES: - NAME:

    Title

    Heading 2 ## Title

    Title

    Heading 3 ### Title

    Title

    Heading 4 #### Title

    Title

    Heading 5 ##### Title
    Title
    Heading 6 ###### Title
    Title
    Paragraph Just start typing

    Just start typing

    Bold **Text** Text Italic *Text* Text Strike ~~Text~~ Text Quoted (indent) > Text

    Text

    Code (inline) Statement Statement Code (fenced) Statement 1 Statement 2 Statement 3
    Statement 1Statement 2Statement 3
    List (unordered) * List item 1 * List item 2 * List item 3
    • List item 1
    • List item 2
    • List item 3
    List (ordered) 1. List item 1 2. List item 2 3. List item 3
    • List item 1
    • List item 2
    • List item 3
    Images ![Alternate text for image](path/to/image) \"Alternative Hyperlinks [Link text](https://www.google.com/)
    Link text note You may want to escape special html characters using \\, and replace the great than symbol with <, otherwise Docusaurus will confuse it with html code.","s":"Markdown summary","u":"/ecalc/docs/contribute/documentation-guide/markdown","h":"","p":1470},{"i":1477,"t":"Git commits are required to follow conventional commits. The message should be structured like this: [optional scope]: [optional body] [optional footer(s)] The type can be one of these types: feat, fix, build, ci, docs, style, refactor, test, and chore. The description should be lower-case for the first letter. For description of optional parts, please refer to the conventional Commits Docs. Here are some simple example conventional commits: feat: implement new awesome feature docs: add developer guidelines A more advanced example: fix: prevent racing of requests Introduce a request id and a reference to latest request. Dismiss incoming responses other than from latest request. Remove timeouts which were used to mitigate the racing issue but are obsolete now. Reviewed-by: Z Refs: #123","s":"Conventional Commits","u":"/ecalc/docs/contribute/guides/conventional-commits","h":"","p":1476},{"i":1479,"t":"Welcome! We are glad that you want to contribute to our project! 💖 This project accepts contributions via GitHub Pull Requests. This document outlines the process to help get your contribution accepted. There are many ways to contribute: Suggest features Suggest changes Report bugs You can start by looking through the GitHub Issues filtered by labels. info We follow some contributor guidelines that you will find in our contributor guidelines. Don't worry if your contribution does not follow all the guidelines. We will guide you in the code review process. The threshold for contributing is low, and we appreciate any contribution great or small. 🙏","s":"Get started","u":"/ecalc/docs/contribute/get-started","h":"","p":1478},{"i":1481,"t":"See Documentation guide for how to get started with contributions to this documentation.","s":"Prerequisites","u":"/ecalc/docs/contribute/get-started","h":"#prerequisites","p":1478},{"i":1483,"t":"Contribution is done in 3 simple steps:","s":"How to contribute","u":"/ecalc/docs/contribute/get-started","h":"#how-to-contribute","p":1478},{"i":1485,"t":"For major changes, please open an issue first to discuss what you would like to change. For smaller changes, it is sufficient to explain the change without referring to an issue.","s":"Initiate change","u":"/ecalc/docs/contribute/get-started","h":"#initiate-change","p":1478},{"i":1487,"t":"To contribute to the project, you will have to make the change and create a Pull Request on GitHub. How you do this depends on your role. Equinor internal contributors, you may open a Pull Request directly, Independent contributors, you will Fork the repository.","s":"Make a Pull Request","u":"/ecalc/docs/contribute/get-started","h":"#make-a-pull-request","p":1478},{"i":1489,"t":"Once a Pull Request has been made, we will give you feedback and maybe suggest changes. The core team looks at pull requests on a regular basis, we review the code and guide you if needed. Here you will find more information about the GitHub Code Review Process","s":"Get code review","u":"/ecalc/docs/contribute/get-started","h":"#get-code-review","p":1478},{"i":1491,"t":"For major changes, please open an issue first to discuss what you would like to change Work on your own fork of the main repo Use a separate branch for each issue you’re working on Use conventional commit. See our Git commit format for details, and our Git guide for our full guide Please include unit tests with all your code changes We follow Trunk Based Development style of working with short-lived feature branches.","s":"Guidelines","u":"/ecalc/docs/contribute/get-started","h":"#guidelines","p":1478},{"i":1493,"t":"Please try to make your Pull Requests easy to review for us. Make small pull requests. The smaller, the faster to review and the more likely it will be merged soon. Don't make changes unrelated to the goals of your PR. While you're writing up the pull request, you can add closes # in the message body where issue number is the issue you're fixing. Therefore, an example would be closes #42 would close issue #42.","s":"Pull Requests","u":"/ecalc/docs/contribute/get-started","h":"#pull-requests","p":1478},{"i":1495,"t":"Git commits are required to follow conventional commits. Please see our Conventional Commit Guide for examples.","s":"Git commit format","u":"/ecalc/docs/contribute/get-started","h":"#git-commit-format","p":1478},{"i":1497,"t":"We use the pre-commit hooks in order to ensure uniform formatting and to exclude potential code issues. We strive for readable code. A few good tips are: Self-documenting code with self-explaining variable names Composition over inheritance Functional code over Object-Oriented Code Rugged code to write more robust code Domain Driven Design to to match the code with the domain we are working on","s":"Readability","u":"/ecalc/docs/contribute/get-started","h":"#readability","p":1478},{"i":1499,"t":"Except for the pre-commits hooks mentioned above, we also strive to follow the following code style: Use capital letters for constants i.e. SECONDS_PER_HOUR Try to split methods/modules/classes into smaller bits of code Remove, do not comment out, unused code Use types and type hinting We comment the code when it is not self-explanatory Be consistent with existing code style - try to make it look like the code is written by one developer For Python, we follow PEP 8 – Style Guide for Python Code and PEP 20 - The Zen of Python: Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! Please reach out to us if you have any questions. 👋 Thank you for your contribution! 🎉","s":"Code style","u":"/ecalc/docs/contribute/get-started","h":"#code-style","p":1478},{"i":1501,"t":"Git is the version control system (VCS) that is responsible for tracking all changes done to the code base. Git is a distributed version control system that tracks changes in any set of computer files, and allows for collaborative development of source code and documentation. We use Git as a service through GitHub. See GitHub Docs for more information about GitHub and how to get started. info If you do not want to work with files locally, GitHub lets you complete many Git-related actions directly in the browser, including: Creating a repository Forking a repository Managing files","s":"Git","u":"/ecalc/docs/contribute/guides/git","h":"","p":1500},{"i":1503,"t":"Go to git-scm.com to download the appropriate git client unless it is already installed on your system. To verify that git is installed, you can run: git --version See GitHub Docs - Set up Git for detailed instructions.","s":"Setting up Git","u":"/ecalc/docs/contribute/guides/git","h":"#setting-up-git","p":1500},{"i":1505,"t":"Git is a powerful tool that can be used in many ways. We recommend the following resources: Introduction to git - GitHub - About git How to get out of git trouble Oh shit, Git!?! Below we will describe the most commonly used commands and scenarios when working with git. info In the following sections we use the syntax <some text> where you should fill in your own values, such as: <change type>: conventional commits change types such as feat, fix, docs, test, chore, refactor, etc. <issue number>: the GitHub Issue Number that you are solving. This may be omitted if you are fixing something tiny. <description>: a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.","s":"Using Git","u":"/ecalc/docs/contribute/guides/git","h":"#using-git","p":1500},{"i":1507,"t":"Navigate to the location where you want to store the code, and clone the repository: git clone git@github.com:equinor/ecalc.git This will create a local copy of a project that already exists remotely. The copy will be stored in a sub-folder, with the same name as the repository, ecalc/.","s":"Cloning a git repository","u":"/ecalc/docs/contribute/guides/git","h":"#cloning-a-git-repository","p":1500},{"i":1509,"t":"git config --global user.name \"My name\" git config --global user.email example@email.com This is what will show in the git log when you make changes.","s":"Tell Git who you are","u":"/ecalc/docs/contribute/guides/git","h":"#tell-git-who-you-are","p":1500},{"i":1511,"t":"In order to create a new local branch and switch to it: git checkout -b /- for new versions of git you may also use the more intuitive. git switch -c /-","s":"Create your own branch","u":"/ecalc/docs/contribute/guides/git","h":"#create-your-own-branch","p":1500},{"i":1513,"t":"git checkout ","s":"Switch between existing branches","u":"/ecalc/docs/contribute/guides/git","h":"#switch-between-existing-branches","p":1500},{"i":1515,"t":"git pull This will update the local branch you are currently in, with changes done in GitHub. git push --set-upstream origin /-","s":"Fetch changes from GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#fetch-changes-from-github","p":1500},{"i":1517,"t":"git push This will update the remove repository on GitHub. If it is the first time for a new branch you will also have to tell git that you are creating a new remote branch by using the command:","s":"Send your changes to GitHub","u":"/ecalc/docs/contribute/guides/git","h":"#send-your-changes-to-github","p":1500},{"i":1519,"t":"List the files you have changed and those you still need to add or commit: git status","s":"Check status of changes","u":"/ecalc/docs/contribute/guides/git","h":"#check-status-of-changes","p":1500},{"i":1521,"t":"Add new or changed files git add or adding everything in and below your working directory git add .","s":"Add files","u":"/ecalc/docs/contribute/guides/git","h":"#add-files","p":1500},{"i":1523,"t":"Commit any files you've added with git add, and also commit any files you've changed since then: git commit -m \": : /- Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" If your changes are in conflict with changes done by other, then you need to rebase and solve the change conflicts. This also ensures your code is running on the latest available code. git fetch git rebase origin/main Push changes to GitHub git push --set-upstream origin /- You can now Create a Pull Request","s":"Pull Requests","u":"/ecalc/docs/contribute/guides/git","h":"#pull-requests","p":1500},{"i":1530,"t":"For external developers, you will contribute to the project through forking. Here's a quick guide: Create your own fork of the repository Clone the project to your machine git clone git@github.com:equinor/ecalc.git To keep track of the original repository add another remote named upstream git remote add upstream git@github.com:equinor/template-fastapi-react.git Create a branch locally with a succinct but descriptive name and prefixed with change type. git checkout -b /- Make the changes in the created branch. Add and run tests for your changes if needed (we only take pull requests with passing tests). Add the changed files git add Commit your changes using the conventional commits formatting for the commit messages. git commit -m \": \" Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code. git fetch upstream git rebase upstream/main Push to your fork. git push origin feature/my-new-feature Submit a Pull Request from a fork. Please provide us with some explanation of why you made the changes you made. For new features make sure to explain a standard use case to us. That's it... thank you for your contribution! After your pull request is merged, you can safely delete your branch.","s":"Fork the repository","u":"/ecalc/docs/contribute/guides/git","h":"#fork-the-repository","p":1500}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,5.338,1,4.17,2,7.148,3,3.108,4,3.992,5,3.477,6,6.06,7,1.567,8,3.192,9,1.466,10,5.338,11,2.953,12,3.307,13,5.338,14,5.762]],["t/5",[5,3.078,6,5.209,9,1.26,11,3.227,15,6.494,16,6.296,17,6.124,18,6.494,19,8.515,20,5.052,21,2.691,22,2.358,23,7.347]],["t/7",[2,5.869,5,2.906,7,1.988,9,0.947,11,2.424,13,6.771,14,6.433,15,4.879,24,4.288,25,4.731,26,3.548,27,4.288,28,4.731,29,2.395,30,5.869,31,3.692,32,3.64,33,3.312,34,5.26,35,6.398,36,4.879,37,2.863,38,3.064,39,3.548,40,3.914,41,4.382,42,5.26,43,4.201,44,2.298,45,5.26,46,5.869]],["t/9",[1,3.801,5,2.743,7,1.876,9,1.381,11,2.692,13,6.391,14,6.899,15,5.418,30,6.517,40,4.346,41,4.866,42,5.841,43,4.666,44,3.352,47,4.666,48,4.215,49,6.517,50,6.13,51,6.13,52,2.778,53,4.577,54,6.13,55,2.327]],["t/11",[5,3.195,6,3.693,7,1.681,8,4.453,9,1.608,12,2.562,13,4.135,14,4.464,20,3.582,52,3.269,55,1.977,56,4.963,57,3.435,58,2.865,59,5.538,60,5.49,61,3.956,62,3.268,63,2.891,64,4.604,65,3.307,66,1.775,67,3.126,68,2.681,69,3.23,70,3.82,71,2.361,72,6.037]],["t/13",[5,2.348,12,3.389,53,5.145,73,7.986,74,4.81,75,6.09,76,5.905,77,7.986,78,7.986,79,5.001,80,5.323,81,6.566,82,5.6,83,6.306,84,4.738,85,7.986,86,3.164]],["t/15",[5,2.348,8,4.121,45,6.566,69,4.273,79,5.001,87,7.944,88,4.67,89,2.439,90,5.245,91,6.891,92,2.37,93,5.353,94,7.986,95,4.273,96,5.744,97,6.306]],["t/17",[8,2.545,20,3.685,58,2.948,61,2.562,65,3.403,74,5.863,79,3.088,80,3.287,84,3.685,98,2.948,99,3.863,100,1.776,101,7.001,102,2.146,103,3.183,104,5.698,105,4.255,106,5.698,107,6.393,108,5.614,109,4.748,110,3.863,111,5.978,112,1.135,113,5.107,114,8.93,115,5.698,116,4.164,117,3.93]],["t/19",[8,2.758,79,3.347,80,3.562,91,7.769,92,1.998,93,4.512,96,4.842,111,4.721,118,5.134,119,6.475,120,3.524,121,6.866,122,1.637,123,6.732,124,8.259,125,3.347,126,4.842,127,3.74,128,4.842,129,4.978,130,6.732,131,4.661,132,9.004]],["t/21",[5,2.571,8,3.583,58,4.151,69,4.68,87,6.907,100,2.501,102,3.021,105,5.991,133,5.862,134,6.137,135,3.356]],["t/23",[3,2.526,5,1.862,7,1.274,8,2.595,20,3.758,29,2.371,69,3.389,71,2.477,74,5.204,79,4.296,80,4.572,96,4.556,100,2.47,104,5.811,105,4.339,106,5.811,107,5.675,108,4.983,110,3.939,111,4.442,112,1.158,136,6.335,137,4.831,138,5.811,139,3.758,140,2.371,141,6.335,142,6.335,143,5.002,144,5.811,145,5.466,146,6.335,147,4.03]],["t/25",[7,1.749,12,2.715,71,2.502,82,4.486,100,2.826,112,1.59,115,5.869,122,1.032,133,4.288,137,4.879,138,5.869,144,7.98,145,7.506,148,6.398,149,8.699,150,3.12,151,8.699,152,4.879,153,8.699,154,5.26,155,6.398,156,6.398,157,5.52,158,8.699,159,6.398,160,6.398,161,2.934,162,5.52,163,3.064]],["t/27",[9,1.43,29,3.619,44,4.058,164,7.148]],["t/30",[163,4.429,165,5.007,166,4.598,167,2.938,168,3.304,169,4.511,170,6.84,171,6.652]],["t/33",[7,1.398,26,3.854,55,2.276,66,3.224,68,3.086,110,4.323,129,5.14,131,3.598,147,3.242,161,3.188,167,2.208,172,2.971,173,4.727,174,3.954,175,3.82,176,4.252,177,4.478,178,2.718,179,3.359,180,5.997,181,4.398,182,6.951,183,5.489,184,3.111,185,4.761]],["t/35",[5,1.631,7,0.701,8,1.428,9,0.821,29,2.077,31,1.479,39,1.933,44,1.993,66,1.025,68,1.548,92,1.034,100,1.976,117,3.51,120,1.211,135,2.129,150,4.195,161,2.544,166,1.733,179,2.681,186,2.337,187,3.8,188,4.734,189,2.955,190,4.452,191,2.865,192,4.975,193,2.507,194,1.585,195,2.289,196,2.168,197,2.577,198,4.1,199,4.97,200,3.485,201,3.007,202,3.89,203,3.341,204,3.985,205,2.752,206,3.485,207,2.157,208,2.444,209,4.231,210,3.89,211,3.485,212,1.64,213,5.11,214,1.669,215,2.444,216,3.485,217,4.787,218,2.507,219,4.102,220,2.903,221,3.007,222,2.336,223,2.168,224,2.865,225,2.658,226,2.752,227,2.099,228,2.387,229,1.786,230,1.909,231,3.007,232,2.507,233,3.485,234,3.007,235,3.485,236,1.716,237,1.933,238,2.577]],["t/37",[86,2.348,95,3.171,100,2.359,108,5.921,112,1.083,150,2.89,161,2.718,163,2.838,165,5.14,166,4.103,167,3.016,168,2.948,170,4.382,171,4.262,239,3.818,240,3.417,241,2.838,242,4.382,243,1.836,244,2.552,245,3.972,246,4.382,247,4.695,248,2.428,249,4.872,250,4.059,251,4.262,252,2.274,253,3.528,254,3.465,255,1.273,256,3.516,257,1.901]],["t/39",[86,4.216,95,4.68,240,5.044,242,6.468,243,3.298,258,6.223,259,4.084,260,5.862]],["t/41",[29,3.347,44,2.394,58,3.162,100,2.556,101,4.792,112,2.117,127,4.192,161,4.1,203,4.013,223,4.144,240,5.819,247,3.791,259,4.316,261,3.742,262,1.476,263,6.663,264,5.081,265,5.081]],["t/44",[5,1.665,9,0.838,12,2.404,26,4.434,29,2.121,66,1.665,79,2.816,129,4.189,161,2.598,167,3.198,183,6.314,185,5.477,186,2.387,196,3.523,203,3.412,223,4.973,247,3.223,266,6.123,267,4.506,268,7.335,269,1.915,270,3.88,271,2.37,272,3.972,273,4.657,274,5.665,275,4.32,276,5.665,277,5.197,278,4.32,279,5.665,280,5.197,281,3.313,282,5.665,283,5.197,284,5.197,285,4.888]],["t/47",[6,5.741,8,3.845,44,3.988,110,5.836,286,5.836,287,5.339]],["t/50",[5,2.348,9,1.182,82,5.6,179,3.859,236,3.932,286,6.256,287,5.723,288,4.738,289,4.273,290,5.47,291,4.544,292,7.986,293,6.566,294,6.566,295,4.886,296,5.723]],["t/52",[3,0.412,5,0.304,6,0.632,7,1.7,9,0.665,21,0.607,22,0.932,29,0.719,31,0.438,44,0.69,50,0.891,52,1.316,63,1.288,66,1.164,67,0.994,71,0.404,89,0.586,92,0.998,93,0.692,98,0.49,99,0.642,100,0.549,103,0.984,109,1.641,112,1.946,122,0.87,125,1.337,135,0.396,143,1.516,147,0.482,161,1.816,165,3.495,167,1.948,168,3.127,173,0.474,174,1.914,175,0.798,179,1.3,192,0.535,194,0.873,197,1.42,203,0.622,207,0.755,222,0.692,223,1.194,236,1.95,241,0.495,243,1.671,245,1.287,247,0.588,248,1.623,250,0.442,252,1.032,253,0.821,255,0.723,256,3.2,257,1.731,258,3.948,259,1.291,262,1.831,277,0.948,281,0.604,288,0.613,297,2.991,298,2.124,299,1.261,300,1.935,301,2.019,302,1.209,303,1.277,304,1.761,305,2.052,306,2.305,307,1.657,308,2.468,309,1.052,310,1.092,311,1.863,312,0.948,313,0.573,314,1.802,315,0.596,316,2.766,317,1.641,318,1.123,319,2.431,320,1.261,321,1.92,322,1.337,323,1.42,324,0.816,325,1.761,326,1.92,327,1.92,328,1.033,329,1.033,330,1.033,331,1.033,332,1.033,333,1.033,334,0.948,335,0.666,336,0.816,337,0.58,338,0.846,339,0.919,340,1.44,341,2.929,342,1.464,343,0.849,344,0.524,345,0.743,346,0.678,347,1.968,348,0.788,349,0.596,350,0.504,351,0.948,352,0.642,353,0.692,354,0.642,355,1.033,356,1.215,357,0.948,358,0.613,359,1.033,360,0.788,361,0.948,362,0.692,363,0.764,364,0.415,365,0.412,366,1.033,367,0.632,368,1.742,369,1.316,370,1.351,371,0.928,372,1.033,373,0.743,374,1.033,375,0.803,376,1.039,377,0.816,378,0.787,379,0.911,380,1.033,381,0.678,382,0.642,383,1.579,384,1.761,385,1.657,386,1.194,387,0.937,388,1.579,389,1.92,390,1.92,391,0.788,392,0.724,393,1.62,394,1.42,395,1.237,396,1.381,397,0.788,398,2.321,399,1.033,400,1.053,401,2.21,402,3.365,403,1.033,404,1.033,405,1.033,406,1.033,407,0.692,408,0.764,409,0.708,410,0.948,411,0.678,412,0.948,413,0.632,414,0.559]],["t/54",[3,1.228,5,2.85,6,3.514,7,1.474,8,1.699,9,0.85,11,1.572,12,3.963,17,1.248,20,1.826,21,0.549,25,1.283,26,2.3,29,1.553,31,2.438,41,1.189,44,2.064,47,2.022,52,1.963,53,2.672,55,0.568,57,0.988,62,1.666,66,0.905,68,1.367,70,1.098,76,2.276,79,0.863,80,0.918,89,1.754,90,3.296,100,1.817,102,0.6,108,1.001,112,1.34,125,0.863,134,2.894,147,0.81,150,1.501,161,3.154,163,0.831,165,3.968,169,1.501,174,1.751,179,2.426,186,0.731,203,1.854,222,1.163,230,0.951,236,1.516,241,0.831,244,0.748,248,1.261,252,0.666,256,3.408,261,2.329,262,0.286,264,1.324,271,0.726,272,1.217,273,1.427,281,1.015,285,1.498,288,2.461,290,1.189,291,0.988,293,1.427,311,0.817,314,0.789,338,1.827,350,0.847,360,1.324,363,1.283,364,2.015,382,1.079,392,1.217,397,1.324,408,1.283,413,1.883,414,1.666,415,3.805,416,2.531,417,6.678,418,5.807,419,2.841,420,3.122,421,2.841,422,3.181,423,3.41,424,1.736,425,3.071,426,2.656,427,1.707,428,2.214,429,1.883,430,1.324,431,1.498,432,1.163,433,1.736,434,1.736,435,1.498,436,1.498,437,1.427,438,1.14,439,1.371,440,1.686,441,1.118,442,1.736,443,1.577,444,1.736,445,1.498,446,1.163,447,1.062,448,1.217,449,1.118,450,1.498,451,1.324,452,1.427,453,1.015,454,1.736,455,1.736,456,1.045,457,1.498,458,1.736,459,1.736,460,1.248]],["t/56",[8,3.96,44,3.473,110,6.012,286,6.012,287,5.5]],["t/59",[5,2.348,9,1.182,82,5.6,179,3.859,236,3.932,286,6.256,287,5.723,288,4.738,289,4.273,290,5.47,291,4.544,293,6.566,294,6.566,295,4.886,296,5.723,461,6.09]],["t/61",[7,0.988,8,1.228,11,1.136,17,4.488,44,1.077,52,1.921,55,2.363,66,0.881,70,1.897,76,2.217,79,1.49,88,3.649,93,2.009,97,2.367,100,2.063,112,0.898,120,2.167,122,1.66,134,1.729,140,1.839,147,1.398,161,2.253,163,2.988,179,2.374,186,1.263,189,2.938,195,3.226,203,2.958,229,2.517,236,1.476,241,1.436,262,1.556,270,2.053,286,1.864,289,1.604,322,1.49,350,2.396,363,2.217,364,2.897,420,3.055,423,2.465,429,3.005,431,2.587,441,1.931,446,2.009,462,4.506,463,2.009,464,3.292,465,4.171,466,4.943,467,4.649,468,5.151,469,3.487,470,2.998,471,5.698,472,3.879,473,3.365,474,2.998,475,2.998,476,2.367,477,1.969,478,2.998,479,1.969,480,2.156,481,2.156,482,3.746,483,2.465,484,2.286,485,2.998,486,2.998,487,1.897,488,2.998,489,2.998,490,2.998,491,2.009]],["t/63",[4,3.857,5,2.213,7,1.047,26,4.175,31,2.21,44,1.87,66,2.848,82,3.651,88,3.044,92,1.545,100,1.488,122,1.427,161,3.452,164,3.85,184,3.369,189,1.789,190,6.622,203,3.136,207,2.48,215,3.651,256,3.089,271,2.178,309,2.852,465,2.539,467,6.242,484,3.97,492,8.843,493,3.97,494,3.238,495,3.85,496,4.111,497,4.776,498,5.206,499,5.206,500,2.614,501,3.002,502,1.723]],["t/65",[5,2.065,17,5.053,26,3.896,79,4.605,108,4.052,120,3.217,125,3.493,135,2.696,161,4.248,175,2.919,189,3.182,193,5.053,230,3.849,270,4.813,296,3.998,300,6.662,448,4.927,465,3.427,467,4.527,477,4.615,503,6.063,504,4.927,505,5.053,506,6.446,507,7.027]],["t/67",[7,0.859,9,0.632,21,1.35,52,1.671,57,2.431,63,4.773,66,1.911,71,1.671,88,2.498,108,2.464,112,0.781,122,0.689,163,3.768,165,3.519,167,1.357,168,2.322,169,2.084,229,2.189,239,4.188,247,2.431,250,4.429,252,4.197,258,4.601,262,1.073,264,3.258,269,2.197,281,2.498,289,2.286,295,3.977,309,2.34,314,1.943,318,2.498,340,1.553,400,1.337,422,1.976,479,2.806,508,8.94,509,4.273,510,2.313,511,7.23,512,3.159,513,3.513,514,3.919,515,3.919,516,4.273,517,4.273,518,1.928,519,3.159,520,3.374,521,3.513]],["t/69",[31,4.296,286,6.296]],["t/71",[0,4.426,1,4.686,5,2.921,6,6.078,7,1.761,11,2.449,13,6.806,14,7.347,32,3.676,34,5.313,40,5.358,41,4.426,42,5.313,43,4.244,44,2.321,52,2.527,53,6.401,55,2.116,57,3.676,62,3.498,74,5.275,174,3.676,289,3.458,336,5.103]],["t/73",[5,3.159,7,0.75,11,1.413,12,4.185,29,3.531,53,2.402,58,3.427,61,1.538,68,1.655,89,1.787,100,1.673,107,2.448,112,1.919,120,1.295,150,5.43,154,3.065,157,3.216,184,2.618,194,4.289,230,5.166,234,3.216,261,2.093,262,1.192,297,2.245,344,1.89,364,1.496,413,2.281,417,2.614,426,5.048,428,5.882,460,2.681,522,3.728,523,3.728,524,2.756,525,3.419,526,1.538,527,5.851,528,2.681,529,2.042,530,3.728,531,3.216,532,8.179,533,3.728,534,2.944,535,3.728,536,3.728,537,3.728]],["t/75",[9,1.197,31,3.432,44,2.905,122,1.636,125,4.02,140,3.028,166,4.02,167,3.221,189,2.778,220,4.232,256,4.798,358,4.798,400,2.531,538,5.816,539,6.978,540,5.539]],["t/78",[5,2.889,7,1.548,9,1.139,79,3.828,92,2.285,120,2.674,215,5.399,257,2.471,258,4.502,259,2.954,291,4.38,338,3.392,541,6.33,542,4.872,543,4.27,544,6.643,545,7.063,546,6.643,547,5.872,548,6.08,549,4.71]],["t/80",[8,3.845,44,3.372,92,2.785,100,2.683,262,1.549,320,6.163,337,5.27]],["t/82",[9,1.227,100,2.945,135,3.183,150,4.046,173,3.804,194,3.773,252,3.183,261,4.658,338,3.655,349,4.783,550,7.158,551,6.766,552,4.544,553,6.134]],["t/84",[1,2.271,5,1.248,26,2.354,32,2.415,61,1.751,86,1.681,89,1.296,92,2.326,96,3.052,103,2.174,150,4.848,161,1.946,173,1.946,175,2.687,176,2.597,220,2.221,248,3.59,271,2.706,322,2.11,386,2.64,387,4.601,457,7.562,501,2.447,505,4.652,511,3.489,549,2.597,554,4.244,555,8.04,556,4.244,557,7.562,558,3.893,559,3.138,560,3.489,561,3.662,562,8.654,563,3.052,564,4.244,565,3.893,566,3.893,567,3.893,568,4.244,569,6.762,570,4.244,571,4.244,572,4.244,573,3.662,574,3.237,575,2.907,576,6.468,577,7.837,578,6.468,579,2.907,580,6.468]],["t/86",[5,1.645,9,1.03,26,1.954,37,1.577,61,1.453,71,1.378,90,6.774,100,1.6,116,2.362,128,6.62,135,1.352,140,1.319,147,1.643,150,2.729,167,2.924,173,2.566,175,1.464,176,3.423,194,1.603,220,1.844,229,1.805,243,2.456,248,1.443,255,1.202,261,3.142,270,2.413,271,2.341,281,2.06,297,3.37,302,1.266,303,1.136,322,4.797,338,1.552,349,2.032,387,1.719,409,2.413,448,2.471,460,4.024,505,4.024,529,1.93,550,3.04,552,3.065,553,5.147,581,3.232,582,1.577,583,2.782,584,7.359,585,2.413,586,3.524,587,3.232,588,3.423,589,2.605,590,3.524,591,1.672,592,4.419,593,3.04,594,2.413,595,3.232,596,3.524,597,2.362,598,2.471,599,3.524,600,2.413,601,3.04,602,2.121,603,1.954,604,3.232,605,2.897,606,2.605]],["t/88",[8,3.96,44,3.473,110,6.012,286,6.012,287,5.5]],["t/91",[3,1.628,8,2.572,11,1.547,58,1.938,70,2.583,71,1.597,89,1.247,98,1.938,102,2.643,122,1.496,161,1.872,163,4.113,168,3.312,203,2.459,207,2.362,259,4.303,260,2.736,262,1.819,301,3.238,311,1.921,315,3.621,322,2.03,337,5.497,339,2.145,364,2.52,392,2.863,394,3.019,395,2.63,396,2.936,473,4.301,542,2.583,607,2.03,608,3.973,609,2.796,610,2.681,611,2.936,612,3.113,613,4.788,614,4.208,615,3.357]],["t/93",[5,2.475,7,0.961,8,2.897,44,3.342,69,3.785,92,1.419,100,2.66,112,2.061,122,0.771,192,4.358,221,4.125,244,2.059,245,3.204,262,1.167,291,4.024,311,3.327,361,4.385,364,1.919,365,1.906,417,4.959,469,2.31,502,1.582,528,3.438,574,3.646,607,2.377,616,2.502,617,2.879,618,3.438,619,3.535,620,5.23,621,3.93,622,5.394,623,4.781,624,4.781,625,6.103,626,4.781,627,7.073,628,4.125,629,2.449,630,2.249,631,4.781,632,4.781,633,4.125,634,3.646,635,4.781]],["t/95",[9,1.227,13,5.682,14,6.134,20,4.921,25,6.134,39,4.6,61,3.422,71,4.583,110,5.159,636,6.82,637,3.903,638,8.296,639,6.82]],["t/97",[7,0.563,9,0.687,20,1.662,25,2.072,29,1.049,33,3.975,37,2.079,45,2.304,63,3.316,66,2.035,71,1.817,95,1.499,98,1.33,122,0.452,127,1.164,140,1.049,167,3.197,172,1.198,184,1.254,187,1.919,207,1.858,229,1.436,240,1.616,243,2.565,248,1.148,252,2.657,253,3.282,255,0.998,257,2.944,260,1.878,267,1.254,269,0.947,302,2.138,313,2.576,314,2.707,340,2.79,393,4.17,422,2.752,427,1.554,438,1.84,447,1.714,500,3.476,502,1.538,510,4.481,518,1.264,519,2.072,629,1.436,630,1.318,640,1.068,641,1.773,642,1.773,643,2.213,644,2.072,645,2.213,646,2.213,647,5.804,648,1.878,649,1.805,650,1.594,651,2.67,652,1.805,653,2.802,654,4.018,655,3.669,656,4.985,657,2.137,658,3.531,659,1.517,660,2.889,661,1.805,662,2.072,663,2.137,664,2.015,665,2.304]],["t/99",[8,3.381,9,1.519,69,3.171,70,3.749,92,2.818,100,1.694,135,2.274,161,2.718,189,2.036,223,3.685,243,2.942,257,1.901,297,3.569,339,2.025,356,3.749,365,3.291,425,3.625,440,3.246,447,5.049,465,2.89,469,3.988,609,4.059,648,3.972,651,3.062,666,2.764,667,4.416,668,5.436,669,7.493]],["t/101",[52,2.689,100,2.611,108,3.965,117,4.351,120,2.388,122,1.11,125,3.418,189,2.362,194,3.128,262,1.507,309,3.767,338,3.03,364,2.76,425,4.207,465,3.354,468,4.141,469,4.413,529,3.767,552,3.767,651,2.945,670,5.244,671,5.653,672,4.821,673,6.308,674,5.085,675,6.308,676,5.085,677,5.933]],["t/103",[7,1.496,9,1.296,22,2.061,38,2.453,52,2.004,61,2.113,89,1.565,92,1.52,100,2.505,109,2.499,120,1.78,122,1.414,194,2.33,207,1.15,248,2.099,255,1.101,262,1.446,269,1.732,301,1.789,302,2.673,303,2.4,317,2.499,318,4.351,338,2.257,339,1.751,365,3.494,367,3.134,368,2.652,369,2.004,370,2.057,371,2.476,425,3.134,526,2.113,552,2.807,637,2.41,649,3.301,678,2.877,679,4.7,680,3.086,681,3.086,682,1.873,683,4.421,684,3.592,685,2.499,686,4.421,687,3.907,688,3.434,689,3.788,690,3.907]],["t/105",[7,1.17,22,1.612,61,2.4,71,2.275,166,2.893,168,2.911,240,5.422,243,2.525,253,3.483,257,2.615,259,3.608,260,6.302,262,1.834,425,3.56,647,4.08,667,4.36,691,4.985,692,6.699,693,4.784,694,5.219,695,5.338,696,7.769,697,7.031,698,5.338]],["t/107",[9,1.297,21,0.999,22,0.875,25,2.337,52,2.005,61,1.303,71,1.236,89,0.965,100,0.903,109,2.501,112,1.183,120,1.098,122,1.321,175,2.13,207,1.151,237,1.752,250,2.766,253,1.351,255,1.39,262,1.351,269,1.068,301,1.791,303,2.087,338,2.259,368,2.655,369,2.005,370,2.058,375,3.424,376,2.776,378,2.101,379,1.5,381,2.075,425,1.933,456,1.903,500,2.574,518,1.426,552,1.731,602,1.198,616,1.654,637,1.487,640,1.205,699,2.216,700,3.791,701,1.848,702,1.992,703,1.19,704,5.109,705,2.495,706,2.216,707,1.999,708,2.495,709,2.273,710,2.495,711,2.727,712,3.367,713,3.595,714,2.495,715,4.424,716,2.036,717,2.036,718,1.999,719,2.164,720,2.273,721,2.036,722,2.118,723,2.036,724,1.999,725,2.273,726,2.273,727,2.273,728,2.273,729,2.273,730,2.273,731,2.273,732,2.273,733,2.273,734,2.273,735,1.999,736,2.273,737,2.273,738,2.273,739,2.273,740,2.273,741,2.273,742,2.273,743,2.273,744,2.273,745,2.273,746,2.164,747,1.822,748,1.586,749,1.672,750,3.098,751,4.337]],["t/109",[7,1.106,9,1.159,12,1.463,24,2.311,40,2.109,44,1.239,55,1.129,89,1.68,98,1.636,100,0.986,102,3.704,103,1.766,108,1.988,112,1.667,174,1.962,175,2.85,179,1.666,180,2.975,184,1.543,189,1.185,194,1.568,207,1.235,244,1.485,253,1.474,262,0.908,267,1.543,278,2.629,299,2.264,323,4.067,346,3.612,347,5.332,348,5.233,393,2.077,425,2.109,460,3.956,469,1.666,491,2.311,518,1.556,528,2.48,543,3.05,559,2.55,618,2.48,650,1.962,651,2.759,652,2.221,658,2.046,665,2.835,676,2.55,709,2.48,752,2.975,753,3.172,754,2.629,755,3.163,756,2.835,757,2.48,758,5.074,759,2.221,760,2.629,761,2.975,762,2.723,763,2.975,764,6.294,765,4.746,766,2.723,767,2.975,768,2.629,769,4.746,770,5.045,771,2.723,772,2.629,773,5.045,774,2.48,775,2.975,776,3.163,777,2.835,778,2.264,779,2.975]],["t/111",[7,1.362,29,1.689,38,2.161,52,1.765,55,1.478,86,3.223,89,2.484,119,3.245,120,1.567,166,2.243,167,2.584,168,3.461,184,2.02,243,3.365,257,3.387,258,2.639,262,1.492,313,2.502,314,2.052,317,3.967,319,3.667,338,1.988,364,2.72,422,3.133,440,3.711,637,2.123,647,3.164,651,2.185,667,2.414,669,6.06,674,3.337,691,2.761,692,3.71,780,3.893,781,5.01,782,4.757,783,2.443,784,6.203,785,3.563]],["t/113",[22,1.103,37,1.782,63,3.606,64,3.036,66,2.491,69,2.13,86,2.984,139,2.362,140,1.491,167,2.392,168,3.61,172,2.633,243,1.908,250,1.702,252,3.517,253,2.633,255,1.618,257,2.417,262,1.723,302,3.482,314,1.811,317,1.942,318,3.601,319,2.155,340,2.238,365,1.588,393,4.536,400,2.868,422,1.841,438,2.615,500,1.999,510,4.077,526,1.642,552,2.181,656,4.536,657,3.036,658,4.468,662,2.944,669,6.143,685,1.942,691,2.436,782,2.328,784,3.036,786,2.863]],["t/115",[22,1.241,37,2.005,63,3.879,64,3.417,66,2.649,69,2.398,86,3.209,139,2.658,140,1.678,167,2.573,168,3.451,243,2.088,250,1.916,252,3.707,253,2.881,255,1.741,257,2.599,262,1.675,314,2.038,317,2.185,318,3.941,319,2.426,340,2.449,365,1.787,393,4.878,400,2.535,422,3.117,500,2.25,510,4.385,552,2.455,647,7.384,669,5.429,685,2.185,692,3.684,782,2.62,784,3.417,786,3.223]],["t/117",[7,0.939,9,0.85,12,1.378,18,0.982,22,1.452,29,0.881,31,0.998,33,1.681,37,1.453,44,0.845,52,0.92,63,3.328,66,0.691,68,1.442,86,1.589,89,0.393,92,0.382,102,0.812,112,0.593,122,0.999,147,0.6,161,0.59,166,1.994,167,0.747,168,2.212,172,2.456,175,3.021,184,1.453,192,1.218,196,0.801,204,1.356,207,1.56,210,0.903,212,1.107,214,0.617,253,2.241,255,1.735,257,1.042,262,1.333,266,0.742,267,1.795,269,1.098,302,2.496,303,1.293,314,1.824,322,0.64,338,1.431,344,1.647,346,1.545,348,1.794,350,0.628,365,0.513,382,3.851,393,3.157,400,2.063,401,1.545,422,1.854,427,0.714,440,1.779,443,1.205,456,0.775,479,1.545,500,1.181,502,0.778,510,3.11,518,1.061,526,0.97,552,1.288,559,1.739,583,1.017,629,0.66,630,0.606,641,0.815,644,0.952,647,3.675,651,1.997,654,1.231,656,2.415,658,3.11,661,4.247,665,2.67,669,0.863,686,1.111,689,3.876,701,0.753,702,0.5,703,1.51,746,1.611,758,1.739,760,1.794,761,1.111,762,1.017,763,1.111,765,1.111,767,1.111,768,0.982,769,2.029,771,1.017,780,1.111,786,1.692,787,1.857,788,1.545,789,1.181,790,1.857,791,0.982,792,1.288,793,3.851,794,2.158,795,1.611,796,0.689,797,3.513,798,0.863,799,1.737,800,1.181,801,1.244,802,1.181,803,1.338,804,1.934,805,1.338,806,3.109,807,1.987,808,3.109,809,1.934,810,1.111,811,1.059,812,1.847,813,1.111,814,0.982,815,0.982,816,1.181,817,1.181,818,1.321,819,2.158,820,1.181,821,2.158,822,0.815,823,2.029,824,1.111,825,3.46,826,1.181,827,1.375,828,2.965,829,2.352,830,1.934,831,1.181,832,1.181,833,1.017,834,0.952,835,1.181]],["t/119",[9,0.18,63,2.412,66,0.655,86,1.995,100,1.279,102,2.325,109,1.508,112,1.165,122,1.371,147,0.566,167,0.708,168,2.809,172,0.953,175,3.267,207,1.004,240,1.286,243,0.958,250,1.638,252,1.47,253,1.638,255,1.082,257,1.229,259,0.856,260,1.494,262,1.714,267,1.383,301,1.08,302,1.809,303,1.236,314,1.742,317,1.088,318,1.807,319,1.207,346,1.464,347,2.945,348,1.7,350,0.592,364,0.488,365,0.484,367,0.743,368,1.6,369,1.209,370,1.241,371,0.587,375,1.871,376,1.207,378,0.913,379,0.576,381,0.798,382,3.717,393,2.307,400,1.87,401,1.464,422,1.031,425,0.743,469,0.587,510,2.074,518,0.548,526,0.501,602,0.46,647,3.137,651,0.392,656,0.731,658,0.721,661,4.106,665,1.833,667,0.65,676,0.898,677,1.048,684,0.852,685,1.508,686,1.924,687,0.926,688,0.814,689,3.724,690,0.926,691,1.364,692,1.833,694,1.963,695,1.114,696,2.922,697,1.924,698,1.114,700,0.898,702,0.472,704,2.441,705,0.959,706,0.852,707,0.768,708,0.959,709,1.604,710,0.959,711,1.048,712,1.464,713,1.563,714,0.959,715,1.924,716,0.783,717,0.783,718,0.768,719,0.832,720,0.873,721,0.783,722,0.814,723,0.783,724,0.768,725,0.873,726,0.873,727,0.873,728,0.873,729,0.873,730,0.873,731,0.873,732,0.873,733,0.873,734,0.873,735,0.768,736,0.873,737,0.873,738,0.873,739,0.873,740,0.873,741,0.873,742,0.873,743,0.873,744,0.873,745,0.873,746,2.117,747,0.7,748,0.61,749,0.643,750,1.48,751,2.072,756,0.999,757,0.873,758,2.286,759,0.783,760,0.926,761,1.048,762,0.959,763,1.048,764,1.114,765,1.048,766,0.959,767,1.048,768,0.926,769,1.048,770,2.045,771,1.761,772,0.926,773,1.114,774,0.873,782,1.304,784,1.7,789,1.114,793,3.132,794,1.114,795,0.832,797,2.568,799,0.65,800,1.114,801,1.18,802,1.114,803,1.269,804,1.833,805,1.269,806,3.001,807,1.891,808,3.001,809,1.833,812,0.691,814,0.926,815,0.926,816,1.114,817,1.114,818,1.252,819,2.045,820,1.114,821,2.045,822,0.768,823,1.924,824,1.048,825,3.305,827,1.304,831,1.114,832,1.114,835,1.114]],["t/121",[109,1.701,112,1.014,175,3.434,192,1.036,207,1.041,257,1.119,340,0.727,369,1.364,370,1.4,518,0.902,643,1.58,644,1.479,659,1.888,677,1.726,682,1.275,684,1.403,687,1.525,690,1.525,697,1.726,707,1.266,709,5.945,711,1.726,714,1.58,759,3.576,771,3.661,772,1.525,807,2.133,811,1.644,836,3.487,837,2,838,3.487,839,3.487,840,2,841,3.251,842,4.414,843,3.487,844,1.835,845,6.342,846,3.251,847,1.644,848,3.487,849,2.445,850,2,851,2,852,6.913,853,2,854,1.835,855,1.58,856,2,857,2,858,2,859,1.58,860,2,861,1.835,862,2.389,863,3.199,864,3.487,865,1.644,866,1.525,867,1.835,868,2,869,1.644,870,2.337,871,5.091,872,3.811,873,1.726,874,2,875,1.835,876,2,877,2,878,2,879,2,880,2,881,1.726,882,2,883,3.487,884,2,885,2,886,3.487,887,2,888,2,889,2,890,3.487,891,1.726,892,1.835,893,2,894,8.267,895,4.789,896,5.091,897,5.55,898,2,899,2,900,2,901,2,902,4.636,903,2,904,5.55,905,1.835,906,2,907,4.636,908,2,909,5.55,910,3.199,911,2,912,3.487,913,2,914,3.487,915,3.487,916,5.091,917,7.881,918,2,919,3.487,920,2,921,2,922,2,923,1.835,924,2,925,4,926,2,927,3.487,928,4,929,2,930,2,931,2,932,2,933,2,934,2,935,4.253,936,2,937,2,938,3.811,939,2,940,2,941,2,942,2,943,3.487,944,2,945,1.835,946,2]],["t/123",[3,2.387,5,1.76,7,1.812,8,1.573,9,0.886,18,2.928,20,2.278,22,1.063,32,3.406,33,1.987,38,1.838,61,1.584,66,1.128,69,3.203,89,1.828,92,2.466,100,2.851,120,2.556,122,0.619,127,1.595,135,1.473,167,1.219,168,1.371,173,1.761,179,1.855,186,1.617,187,5.041,194,1.746,214,1.838,220,2.009,243,1.19,252,1.473,255,1.286,262,0.634,269,2.024,302,2.644,303,1.931,309,2.103,339,2.046,362,2.573,365,1.531,432,2.573,468,2.312,591,1.822,617,4.432,648,2.573,649,3.857,651,1.931,654,2.009,666,3.432,670,2.928,672,2.692,680,2.312,681,2.312,947,2.473,948,4.198,949,3.312,950,3.522,951,3.522,952,2.349,953,3.839,954,3.312,955,2.692,956,3.005,957,2.928,958,2.839,959,3.839,960,2.839,961,3.031]],["t/125",[9,1.139,21,2.434,55,2.522,71,3.011,92,2.917,100,2.201,122,1.586,135,2.954,167,2.446,229,3.945,262,1.622,302,2.766,349,4.44,365,3.07,552,4.218,553,5.693,666,3.591,962,7.063,963,7.7]],["t/127",[3,2.685,7,1.354,9,0.996,22,2.494,58,3.195,69,3.602,92,3.01,100,3.227,120,2.338,122,1.748,194,3.062,309,3.688,339,2.3,367,4.119,373,4.842,429,4.119,666,3.14,670,5.134,685,3.284,688,4.512,952,4.119,964,4.721,965,5.316,966,5.134]],["t/129",[29,1.726,33,3.564,37,2.063,63,4.376,66,2.422,71,1.803,98,2.188,120,1.601,122,0.744,127,1.915,167,3.471,187,3.157,207,1.545,212,3.876,229,2.361,243,1.428,246,3.408,252,2.641,253,3.522,255,0.99,257,2.209,302,2.473,313,2.556,340,3.554,350,3.357,388,3.79,438,3.027,500,3.456,510,2.495,518,3.717,603,2.556,636,3.79,648,3.089,649,2.97,650,2.622,651,2.657,654,3.602,656,4.146,658,4.084,662,3.408,703,1.736,967,4.609,968,4.228,969,3.977]],["t/131",[8,3.741,9,1.517,70,4.351,92,3.241,98,4.334,100,1.966,122,1.11,189,2.362,223,4.276,243,2.83,257,2.206,297,4.141,365,2.742,465,3.354,469,3.323,666,3.207,667,3.679,669,7.62,962,6.308,970,6.876]],["t/133",[100,3.018,122,1.392,125,4.29,262,1.424,364,3.464,468,5.197,469,4.17,634,6.581,646,6.814,651,2.783,971,9.108]],["t/135",[66,2.336,89,2.427,100,2.272,109,2.739,122,1.488,125,2.792,139,3.331,176,3.435,207,1.26,220,2.939,252,3.539,253,2.401,255,1.708,257,1.802,262,1.312,297,3.382,301,1.961,302,3.313,303,2.563,340,2.041,365,2.239,367,4.862,368,2.907,369,2.196,370,2.254,371,2.714,526,2.316,616,4.159,654,2.939,666,2.619,680,3.382,682,2.053,684,3.937,685,2.739,972,3.492,973,3.688,974,4.845,975,4.845,976,4.845]],["t/137",[7,1.751,9,1.202,22,0.862,31,1.322,52,1.218,61,1.285,71,2.505,89,1.547,92,1.504,102,1.75,120,1.082,122,1.034,125,2.519,126,2.24,174,1.772,207,0.699,212,1.465,240,1.796,248,1.276,252,3.117,255,1.745,262,1.057,301,1.088,303,2.96,338,1.372,354,1.937,369,1.218,370,2.034,375,2.12,376,1.686,378,1.276,387,1.519,411,2.045,440,1.706,495,2.303,502,1.677,551,2.045,602,1.92,603,3.552,604,2.857,616,1.63,656,1.875,702,1.969,703,1.173,706,2.183,716,2.006,718,1.97,746,2.133,747,2.922,748,1.563,749,1.648,750,1.491,790,2.459,795,2.133,973,2.045,977,2.857,978,2.857,979,2.857,980,3.747,981,2.24,982,2.375,983,1.97,984,2.459,985,1.847,986,2.303,987,4.648,988,2.857,989,3.644,990,5.267,991,3.114,992,2.24,993,1.905,994,4.648,995,3.1,996,2.375,997,2.857,998,2.857,999,2.303,1000,2.857,1001,2.375,1002,2.857,1003,2.375,1004,2.857,1005,2.459,1006,2.857,1007,2.459,1008,2.857,1009,2.459,1010,2.857,1011,2.459,1012,2.857,1013,2.459,1014,2.857,1015,4.001,1016,2.303,1017,2.857]],["t/139",[168,2.818,240,5.756,253,4.681,257,3.514,259,3.027,262,1.648,667,4.221,691,4.826,694,5.114,1018,9.157,1019,6.806,1020,5.673]],["t/141",[7,1.287,9,0.947,22,2.409,61,2.639,86,2.534,89,1.954,92,1.898,102,2.21,112,1.59,125,3.18,168,2.285,203,3.853,243,2.696,247,3.64,253,2.735,257,2.053,259,2.455,262,1.056,422,4.023,552,3.504,616,3.348,642,4.048,643,5.052,644,4.731,666,4.057,691,3.914,759,4.122,781,6.433,782,3.741,1021,4.048,1022,5.869,1023,5.26,1024,4.382]],["t/143",[7,1.607,9,0.649,10,1.275,22,1.665,31,1.39,41,1.275,52,0.728,61,1.808,63,3.828,66,1.288,68,0.826,71,0.728,89,1.338,92,0.972,102,0.643,120,0.646,122,0.97,125,1.628,135,1.256,139,1.104,140,1.226,147,1.527,166,0.925,167,1.392,168,2.715,172,2.57,173,2.01,174,1.059,175,0.773,176,1.139,184,0.833,198,1.104,203,1.121,207,1.349,212,0.876,214,0.891,220,0.974,237,1.032,246,2.421,248,0.763,250,0.796,252,2.744,253,1.4,254,1.088,255,1.791,257,0.597,262,1.319,281,1.915,302,3.616,303,1.939,313,1.816,314,1.994,317,0.908,338,0.82,340,0.676,344,0.944,350,1.597,365,0.742,369,0.728,370,0.747,388,1.53,400,1.881,422,0.861,427,1.032,500,3.018,502,1.451,526,0.768,540,2.243,552,1.02,592,1.47,603,1.816,616,0.974,629,2.246,630,2.062,637,1.54,641,1.178,651,0.6,656,1.121,658,1.942,660,2.726,661,2.824,666,0.868,682,0.68,685,0.908,693,3.604,701,1.088,702,0.723,703,1.988,746,1.275,793,2.726,796,0.996,797,2.194,799,0.996,801,0.985,803,1.863,805,1.863,806,2.2,808,2.2,812,1.059,818,1.045,834,1.376,952,1.139,955,1.305,969,1.606,973,1.222,974,1.606,975,2.825,984,2.585,1024,1.275,1025,1.861,1026,1.861,1027,1.606,1028,1.707,1029,2.497,1030,1.861,1031,1.707,1032,1.53,1033,1.199,1034,3.003,1035,1.53,1036,3.604,1037,1.707,1038,1.707,1039,1.376,1040,1.707,1041,1.606,1042,1.606,1043,3.003,1044,3.003,1045,1.707,1046,1.707,1047,1.606]],["t/145",[9,0.356,63,3.665,86,0.952,100,1.523,109,1.173,112,0.747,122,1.541,147,1.905,167,0.764,168,3.069,175,0.999,207,0.54,240,1.386,243,0.745,246,1.778,250,1.028,252,0.922,253,1.746,255,1.35,257,1.311,259,0.922,262,1.782,301,1.427,302,1.468,303,1.318,314,2.423,317,1.173,350,1.993,364,0.965,365,0.959,367,1.471,368,1.245,369,0.94,370,1.64,371,1.162,375,1.709,376,1.301,378,0.985,388,1.976,400,2.203,422,1.112,469,1.162,500,2.674,634,1.833,656,1.448,661,2.632,667,1.286,684,1.686,685,1.993,691,2.499,694,1.232,702,0.934,703,0.905,706,1.686,716,1.549,718,1.521,746,2.798,747,1.386,748,1.207,749,1.272,750,1.151,759,1.549,782,1.406,793,3.313,795,1.647,797,2.738,799,1.286,801,1.272,803,2.324,805,2.324,806,2.674,808,2.674,812,1.368,818,1.35,971,2.074,974,3.525,975,4.596,976,2.074,980,1.778,987,2.205,989,1.729,990,1.976,994,3.747,995,2.499,996,1.833,997,2.205,998,2.205,999,1.778,1000,2.205,1001,1.833,1002,2.205,1003,1.833,1004,2.205,1005,1.898,1006,2.205,1007,1.898,1008,2.205,1009,1.898,1010,2.205,1011,1.898,1012,2.205,1013,1.898,1014,2.205,1015,3.226,1016,1.778,1017,2.205,1018,2.205,1022,2.205,1023,1.976,1024,2.798,1028,2.205,1034,2.205,1036,3.359,1037,2.205,1038,2.205,1039,1.778,1043,2.205,1044,2.205,1045,2.205,1046,2.205,1047,2.074,1048,2.404,1049,2.404]],["t/148",[112,1.27,257,2.23,340,2.526,518,3.136,684,4.874,865,5.714,976,5.997,1050,6.376,1051,6.951,1052,6.951,1053,6.951,1054,6.951,1055,6.951,1056,6.951,1057,6.951,1058,6.951,1059,6.951,1060,6.951,1061,6.951,1062,6.951,1063,6.951,1064,6.951,1065,6.951,1066,6.951,1067,6.951,1068,6.951,1069,6.951,1070,6.951,1071,6.951,1072,6.951,1073,6.951]],["t/150",[971,6.978,1074,8.087,1075,8.087,1076,8.087,1077,8.087,1078,8.087,1079,8.087,1080,8.087,1081,8.087,1082,8.087,1083,8.087,1084,8.087,1085,8.087,1086,8.087,1087,8.087,1088,8.087,1089,8.087,1090,8.087]],["t/152",[5,1.819,7,1.244,8,2.535,9,1.438,11,1.518,12,1.7,33,2.074,37,1.793,48,2.377,55,1.312,61,1.653,62,2.169,66,1.819,67,3.204,69,2.144,71,1.567,88,2.343,89,1.89,92,3.186,100,2.162,122,0.646,135,1.537,150,1.954,167,1.966,179,1.936,189,1.376,220,2.097,243,1.918,250,1.713,252,1.537,253,1.713,255,1.975,257,2.426,270,2.744,281,2.343,303,1.996,309,2.195,311,1.885,340,2.249,356,2.535,362,2.685,365,1.598,440,2.195,469,1.936,510,2.169,585,2.744,616,3.956,617,2.413,649,2.581,651,2.743,666,1.869,667,2.144,947,2.581,1091,4.006,1092,2.962,1093,4.887,1094,2.962,1095,4.006,1096,1.528,1097,2.492,1098,4.006,1099,2.744]],["t/154",[29,1.251,33,3.981,37,1.495,63,2.568,66,1.576,71,1.306,98,2.545,122,0.539,127,1.388,140,1.251,167,3.219,187,2.288,207,2.275,212,3.161,229,1.711,240,1.926,243,2.383,252,2.058,253,3.844,255,1.152,257,3.032,297,2.012,302,2.414,313,1.852,314,2.439,340,2.795,393,2.012,422,2.48,438,2.194,443,1.711,500,1.677,502,1.775,510,3.637,518,1.507,629,1.711,630,1.572,642,2.114,643,2.638,644,2.47,645,2.638,646,2.638,648,2.239,649,2.152,650,1.9,651,2.716,654,3.516,655,2.638,656,5.415,657,2.547,658,4.996,659,1.808,660,3.335,661,2.152,662,2.47,663,2.547,664,2.402,709,2.402,774,2.402,779,2.882,783,2.903,968,3.064,1100,2.882,1101,5.363]],["t/156",[8,3.447,9,1.245,69,3.261,70,3.856,92,2.86,100,1.742,135,2.338,161,2.795,189,2.094,223,3.79,243,2.986,257,1.956,297,3.67,339,2.082,365,3.356,425,3.728,440,3.338,447,5.148,465,2.972,469,4.066,609,4.174,648,4.085,651,3.108,666,2.842,667,4.503,668,5.59,669,7.558]],["t/158",[52,2.689,100,2.611,108,3.965,117,4.351,120,2.388,122,1.11,125,3.418,189,2.362,194,3.128,262,1.507,309,3.767,338,3.03,364,2.76,425,4.207,465,3.354,468,4.141,469,4.413,529,3.767,552,3.767,651,2.945,670,5.244,671,7.507,672,4.821,673,6.308,674,5.085,675,6.308,676,5.085]],["t/160",[7,1.551,9,1.279,22,1.756,38,1.98,52,2.48,58,1.963,61,1.706,89,1.263,92,2.288,100,2.666,109,2.017,120,2.202,122,1.505,194,1.881,207,0.928,248,1.694,250,1.768,254,2.418,255,1.362,262,1.539,269,1.398,278,3.154,301,1.444,302,2.77,303,2.045,317,2.017,318,3.708,338,1.822,339,1.413,365,3.075,367,2.53,368,2.141,369,1.617,370,1.66,371,1.998,425,2.53,526,1.706,552,3.473,597,2.772,605,3.4,637,1.945,649,2.664,678,2.322,679,3.793,680,2.49,681,4.644,682,1.512,683,3.568,684,2.899,685,2.017,687,3.154,688,4.25,689,3.058,690,3.154,787,3.265,952,2.53,1102,3.568,1103,3.568,1104,3.568,1105,3.568,1106,3.568]],["t/162",[9,1.028,71,2.718,140,2.602,240,6.325,253,3.932,257,3.307,259,3.529,262,1.518,425,4.252,667,4.921,691,5.627,694,4.712,993,4.252,1019,5.997,1020,6.614,1107,8.436,1108,5.997,1109,5.997]],["t/164",[7,1.092,9,1.005,12,1.44,24,2.274,40,2.076,55,1.111,61,1.4,71,2.124,89,2.073,98,1.61,100,0.97,102,3.609,103,1.738,108,1.957,112,2.11,174,1.931,179,1.64,180,2.928,184,1.519,194,1.543,204,1.957,207,1.524,236,1.671,253,2.322,262,0.896,267,1.519,278,2.588,299,2.229,323,2.509,347,3.97,425,2.076,440,1.859,469,1.64,510,1.837,618,2.44,642,3.436,650,1.931,651,2.737,655,2.68,659,1.837,676,2.509,709,2.44,752,2.928,753,1.957,754,2.588,755,3.113,756,2.79,757,2.44,758,4.016,759,3.499,760,2.588,762,2.68,766,2.68,768,7.533,774,2.44,775,2.928,788,3.566,938,4.465,1110,2.928,1111,2.79,1112,2.928,1113,4.686,1114,2.928,1115,2.928,1116,2.928,1117,2.928,1118,3.113,1119,2.928,1120,3.113,1121,2.588,1122,3.393,1123,3.393,1124,2.79,1125,2.928]],["t/166",[55,1.941,89,2.9,119,4.262,167,3.016,243,3.345,257,3.464,262,1.567,313,3.286,314,2.695,317,4.025,319,3.208,364,3.313,422,3.817,440,4.521,637,2.788,651,2.662,667,3.171,669,5.531,674,4.382,691,3.625,780,5.113,781,6.102,782,4.826,783,3.208,784,4.519]],["t/168",[22,1.232,37,1.992,63,3.863,64,3.394,66,2.831,69,2.381,139,2.64,140,1.666,167,2.13,168,3.441,246,3.29,250,1.902,252,3.884,253,2.866,255,1.733,257,1.428,262,1.671,302,3.637,317,2.17,318,3.92,340,2.437,365,1.774,400,2.81,438,4.403,500,4.05,510,3.629,552,2.438,656,5.407,657,3.394,658,5.714,662,4.957,669,6.018,685,2.17,786,3.2]],["t/170",[167,2.417,168,3.484,253,4.17,255,2.314,257,2.441,262,1.61,314,3.461,319,4.118,393,6.485,400,3.053,422,4.511,425,4.655,669,6.538]],["t/172",[5,1.611,7,1.328,9,0.977,12,1.227,21,0.511,22,1.518,31,2.582,33,2.029,37,1.754,44,0.581,62,1.565,63,2.624,66,0.476,89,1.673,92,0.48,98,0.768,102,0.559,112,1.485,122,0.982,139,0.96,161,0.742,167,0.514,168,2.174,181,1.024,184,1.294,192,0.838,196,1.006,204,0.933,207,1.995,210,1.134,212,1.36,214,1.877,229,0.829,247,0.92,252,0.621,253,2.824,254,0.946,255,1.419,257,0.928,262,1.09,266,0.933,267,0.724,269,1.612,272,1.134,273,1.33,302,2.536,314,1.315,338,0.713,340,0.588,387,2.326,393,2.361,400,2.067,401,1.062,422,0.748,438,3.599,440,2.612,443,0.829,453,0.946,468,0.974,479,1.062,500,1.968,502,1.297,510,2.966,518,1.304,543,0.897,583,1.278,629,1.481,630,1.36,640,0.617,644,1.196,651,2.405,654,0.847,655,1.278,656,4.491,657,2.205,658,4.424,659,0.876,661,2.526,662,3.526,669,1.084,680,1.741,681,0.974,689,1.196,701,0.946,702,0.629,758,1.196,760,1.234,766,1.278,768,2.205,783,2.966,787,1.278,788,1.062,804,1.33,806,1.968,808,1.968,810,1.396,811,3.92,818,0.909,826,2.652,827,2.788,828,1.196,830,1.33,833,1.278,870,1.938,891,4.728,938,3.92,955,1.134,1096,0.617,1100,2.495,1102,1.396,1103,1.396,1105,1.396,1112,1.396,1113,4.114,1114,2.495,1115,1.396,1116,1.396,1117,2.495,1119,1.396,1121,1.234,1125,1.396,1126,1.33,1127,1.484,1128,1.484,1129,1.484,1130,1.484,1131,2.283,1132,1.396,1133,1.396,1134,1.484,1135,4.768,1136,2.891,1137,1.484,1138,1.484,1139,1.484]],["t/174",[5,1.624,7,1.111,31,2.345,63,2.209,66,0.584,100,1.969,102,2.714,109,0.97,112,1.943,122,1.475,167,0.631,168,2.647,207,1.546,240,1.146,243,1.075,250,0.85,252,1.331,253,2.681,254,1.162,255,1.48,257,1.113,259,0.763,262,1.67,267,0.89,301,0.694,302,2.253,314,1.578,317,0.97,318,2.028,319,1.076,347,2.698,364,0.798,365,0.793,367,1.216,368,1.029,369,0.777,370,0.798,371,0.961,387,2.695,393,2.089,400,2.156,401,1.306,422,0.919,425,1.216,438,1.306,469,0.961,500,1.741,510,1.076,518,0.897,642,1.258,651,1.119,656,2.089,657,1.516,658,2.058,659,1.877,661,2.973,662,1.47,667,1.064,671,1.634,676,1.47,680,1.197,684,1.394,685,1.692,687,1.516,688,2.325,689,2.565,690,1.516,691,2.122,694,1.018,709,1.43,756,1.634,757,1.43,758,2.565,759,2.235,760,1.516,762,1.57,766,1.57,768,5.992,774,1.43,782,1.162,784,1.516,804,1.634,806,2.316,808,2.316,818,1.116,827,3.231,870,2.325,938,2.852,952,1.216,1019,1.715,1020,1.43,1096,0.758,1100,1.715,1102,2.993,1103,2.993,1104,1.715,1105,2.993,1106,1.715,1107,1.824,1110,1.715,1111,1.634,1112,1.715,1113,2.993,1114,1.715,1115,1.715,1116,1.715,1117,1.715,1118,1.824,1119,1.715,1120,1.824,1121,1.516,1125,1.715,1127,1.824,1128,1.824,1129,1.824,1130,1.824,1131,2.739,1138,1.824]],["t/176",[112,0.46,175,1.764,192,1.303,346,1.653,347,6.67,348,1.919,643,1.987,644,1.861,671,2.069,684,1.765,687,1.919,690,1.919,771,1.987,774,3.054,811,2.069,844,2.309,845,2.309,854,3.896,859,6.191,861,2.309,865,5.321,866,1.919,867,2.309,871,2.309,891,2.172,892,2.309,895,2.172,896,2.309,905,2.309,923,2.309,925,2.172,928,2.172,935,3.896,945,5.054,1036,2.069,1050,5.054,1104,2.172,1106,2.172,1140,4.247,1141,4.247,1142,2.517,1143,2.517,1144,2.517,1145,2.517,1146,2.517,1147,2.517,1148,2.517,1149,2.517,1150,2.517,1151,2.517,1152,2.517,1153,2.517,1154,2.517,1155,2.517,1156,2.517,1157,2.517,1158,2.517,1159,2.517,1160,2.517,1161,2.517,1162,2.517,1163,2.517,1164,2.517,1165,2.172,1166,2.517,1167,2.517,1168,2.517,1169,2.517,1170,2.517,1171,2.517,1172,2.517,1173,2.517,1174,2.517,1175,2.517,1176,2.517,1177,2.517,1178,2.517,1179,2.517,1180,2.517,1181,2.517,1182,2.517,1183,2.517,1184,2.517,1185,2.517,1186,4.247,1187,8.579,1188,4.247,1189,2.517,1190,5.51,1191,2.517,1192,2.517,1193,2.517,1194,2.517,1195,6.472,1196,2.517,1197,2.309,1198,2.517,1199,2.517,1200,2.517,1201,2.517,1202,4.247,1203,2.517,1204,4.247,1205,2.517,1206,5.51,1207,4.247,1208,2.517,1209,5.51,1210,8.345,1211,2.517,1212,2.517,1213,2.517,1214,2.517,1215,2.517,1216,2.517,1217,2.517,1218,2.517,1219,2.517,1220,2.517,1221,2.517,1222,2.517,1223,2.517,1224,2.517]],["t/179",[5,2.49,9,1.253,29,2.303,33,3.185,36,4.692,44,2.21,61,2.538,95,3.292,117,3.893,122,0.993,139,3.65,172,2.63,210,4.314,243,1.907,302,4.063,310,3.5,501,3.548,503,5.309,526,2.538,640,2.346,651,1.984,656,3.706,682,3.096,702,3.291,1225,3.548,1226,4.124,1227,5.058,1228,6.153,1229,7.77,1230,6.153,1231,6.153,1232,6.153,1233,5.058]],["t/181",[3,1.195,5,0.881,7,0.603,9,0.444,12,2.085,22,1.998,67,2.543,74,1.806,102,1.697,120,2.506,122,0.484,135,1.15,166,1.49,173,1.375,184,2.198,198,2.914,207,1.92,214,2.352,229,2.517,237,2.724,266,1.729,269,1.66,289,1.604,302,3.839,303,2.327,306,2.053,310,1.706,339,1.024,340,1.09,344,1.52,369,3.686,379,2.331,409,2.053,440,1.642,500,1.505,502,2.388,526,2.574,548,2.367,573,4.238,579,2.053,588,3.005,618,2.156,640,1.873,651,1.584,681,1.806,682,3.567,779,2.587,834,2.217,960,2.217,961,3.879,981,2.156,1225,3.598,1234,2.998,1235,1.931,1236,5.616,1237,2.833,1238,3.746,1239,2.217,1240,4.506,1241,2.053,1242,2.286,1243,1.834,1244,2.286,1245,2.998,1246,1.806,1247,1.462,1248,1.897,1249,2.367,1250,2.156,1251,2.998,1252,4.238,1253,2.599,1254,2.75,1255,2.75,1256,2.75,1257,2.587,1258,1.969,1259,2.465,1260,1.864]],["t/183",[11,3.027,21,2.524,66,2.348,120,2.774,207,1.793,271,3.341,301,2.789,302,3.614,303,2.576,369,3.123,370,4.038,526,3.294,682,2.92,788,5.245,862,5.47,958,5.905,1261,6.891]],["t/185",[7,1.598,9,1.176,11,2.128,12,2.383,21,1.775,38,2.689,57,3.195,61,2.316,66,2.336,92,1.666,93,3.764,100,1.605,102,1.94,103,2.877,108,3.238,120,1.95,133,3.764,207,1.26,265,6.06,299,5.219,302,3.313,303,1.811,310,3.195,311,2.642,352,3.492,369,2.196,370,3.19,526,3.278,640,2.141,651,1.811,682,4.219,796,4.252,862,3.846,1021,3.553,1099,3.846,1262,4.282]],["t/187",[1,3.932,3,3.803,100,2.101,109,3.584,122,1.186,207,2.141,262,1.213,301,3.915,302,2.64,365,2.93,367,4.495,368,3.804,369,3.73,370,3.829,371,3.551,378,3.01,985,4.359,1263,6.34,1264,6.34]],["t/190",[11,2.953,21,2.463,66,2.291,120,2.707,207,1.749,271,3.26,301,2.722,302,3.558,303,2.513,369,3.047,370,3.976,651,2.513,682,3.621,788,5.118,862,5.338,958,5.762,1261,6.724,1265,7.793]],["t/192",[11,3.557,21,2.966,207,2.106,301,3.278,369,3.67,370,3.767,682,3.431]],["t/194",[1,3.932,3,3.803,100,2.101,109,3.584,122,1.186,207,2.141,262,1.213,301,3.915,302,2.64,365,2.93,368,3.804,369,3.73,370,3.829,371,3.551,373,5.284,378,3.01,985,4.359,1263,6.34,1264,6.34]],["t/196",[100,2.783,109,4.748,122,1.571,207,2.185,262,1.607,301,3.4,365,2.477,367,5.216,368,5.04,369,3.807,370,3.908,371,4.704,373,4.468,659,3.363,960,4.593,1266,6.212,1267,8.526,1268,6.212,1269,6.212,1270,6.212]],["t/198",[7,1.214,22,2.315,37,3.742,89,1.844,102,2.085,108,5.53,140,3.13,167,2.656,207,1.355,257,1.937,269,2.826,271,2.526,339,2.063,340,2.194,420,3.755,427,3.348,467,5.386,468,3.636,505,6.012,510,3.268,588,3.693,649,3.89,651,2.696,654,3.159,674,4.464,952,3.693,972,3.755,1235,3.89,1271,6.037,1272,5.538,1273,5.538,1274,5.538,1275,5.209,1276,5.538,1277,6.037]],["t/200",[22,2.107,37,3.405,56,6.255,167,3.099,181,4.814,250,3.253,254,5.704,257,3.13,301,2.657,340,3.545,518,3.433,620,5.626,651,3.146,783,4.118,1278,6.406,1279,6.979,1280,6.255]],["t/202",[37,1.74,38,1.862,92,0.673,100,1.944,112,1.529,122,0.976,147,1.058,167,1.235,168,1.389,175,1.615,207,1.665,243,1.873,255,0.835,257,1.637,262,1.496,269,1.314,340,0.824,365,2.712,382,2.418,400,1.217,518,1.023,637,2.844,651,1.95,659,2.104,660,2.418,680,2.341,722,2.606,783,2.104,796,1.214,806,1.952,808,1.952,827,2.273,862,1.554,865,1.865,872,1.865,895,1.957,910,2.081,925,1.957,928,1.957,952,4.161,969,3.354,1096,2.305,1131,3.07,1139,2.081,1276,2.081,1281,3.566,1282,3.888,1283,3.888,1284,2.268,1285,2.268,1286,2.268,1287,2.268,1288,4.97,1289,3.888,1290,2.268,1291,1.865,1292,2.268,1293,3.888,1294,7.676,1295,2.081,1296,2.081,1297,2.081,1298,2.081,1299,5.546,1300,2.081,1301,2.081,1302,2.081,1303,2.081,1304,3.566,1305,2.081,1306,2.081,1307,2.081,1308,2.081,1309,6.401,1310,2.081,1311,2.081,1312,4.68,1313,4.68,1314,7.676,1315,2.081,1316,2.081,1317,2.081,1318,2.081,1319,2.081,1320,2.081,1321,2.081,1322,2.081,1323,3.566,1324,2.081,1325,2.081,1326,2.081,1327,2.081,1328,2.081,1329,2.081,1330,6.805,1331,3.196,1332,2.081,1333,2.081,1334,2.081,1335,2.081,1336,3.354,1337,2.081,1338,2.081,1339,2.081,1340,2.081,1341,2.081,1342,2.081,1343,2.268,1344,1.865,1345,2.081]],["t/204",[5,0.831,7,0.568,9,1.141,12,1.2,21,0.893,22,2.302,40,1.729,62,1.53,66,1.376,67,3.1,74,1.702,75,2.156,89,0.863,92,1.389,100,0.808,108,1.63,120,0.982,125,1.405,135,1.085,173,2.146,186,1.191,194,2.129,207,1.731,236,1.392,237,3.321,239,4.97,250,2.56,254,3.502,255,1.891,257,1.502,269,2.608,271,1.182,295,1.729,310,1.608,313,1.567,340,1.701,369,1.105,386,2.91,420,4.33,440,1.548,448,1.982,467,1.821,500,2.349,502,2.913,518,2.702,529,2.563,542,1.788,588,1.729,597,1.895,602,1.071,609,1.936,629,2.398,630,2.202,640,3.356,651,0.912,681,2.818,703,2.622,783,1.53,786,2.033,957,2.156,993,1.729,1094,2.09,1235,4.97,1236,1.758,1237,1.63,1240,4.293,1241,1.936,1242,2.156,1243,1.729,1244,2.156,1246,1.702,1247,1.379,1248,1.788,1259,2.324,1273,2.593,1274,2.593,1346,2.156,1347,2.593,1348,4.68,1349,2.593,1350,2.324,1351,1.729,1352,2.593,1353,2.593,1354,1.729,1355,1.821,1356,2.827,1357,2.09,1358,2.232,1359,2.827,1360,2.827,1361,2.827,1362,2.827]],["t/206",[9,1.524,22,2.298,58,3.937,100,2.372,122,1.339,255,1.782,262,1.7,339,2.834,365,3.308,447,5.075,637,3.903,681,4.996,688,5.56,1363,8.296]],["t/208",[5,1.543,7,1.056,9,1.12,62,2.841,89,1.603,95,2.809,97,4.145,98,2.491,100,1.501,103,2.689,125,3.765,140,1.965,186,2.212,194,2.387,207,1.178,236,2.584,247,2.986,248,2.15,250,3.237,254,5.687,255,2.09,257,3.447,258,3.069,271,2.196,295,5.435,313,2.911,340,4.025,352,3.264,609,3.595,640,2.001,806,2.635,808,2.635,1021,4.791,1094,3.881,1236,3.264,1355,4.879,1364,5.249]],["t/210",[207,1.963,257,2.807,301,3.055,340,3.179,518,3.946,660,6.619,783,5.761,806,4.391,808,4.391,1365,7.191]],["t/213",[175,4.421,207,1.963,340,3.179,659,5.761,807,5.351,869,7.191,872,7.191,1366,8.747,1367,6.907,1368,8.747]],["t/215",[207,0.94,340,1.522,659,3.466,722,4.292,806,2.103,808,2.103,1294,9.734,1295,3.843,1296,3.843,1297,3.843,1298,3.843,1299,7.985,1300,3.843,1301,3.843,1302,3.843,1303,3.843,1304,5.874,1305,3.843,1306,3.843,1307,3.843,1308,3.843,1309,8.533,1310,3.843,1311,3.843,1312,7.131,1313,7.131,1314,9.734,1315,3.843,1316,3.843,1317,3.843,1318,3.843,1319,3.843,1320,3.843,1321,3.843,1322,3.843,1323,5.874,1324,3.843,1325,3.843,1326,3.843,1327,3.843,1328,3.843,1329,3.843,1330,9.072,1331,5.265,1332,3.843,1333,3.843,1334,3.843,1335,3.843,1336,5.525,1337,3.843,1338,3.843,1339,3.843,1340,3.843,1341,3.843,1342,3.843]],["t/217",[7,1.413,8,2.878,11,2.663,21,2.221,31,2.982,40,4.299,45,5.777,58,3.335,69,3.76,87,8.183,88,4.109,89,2.146,90,6.805,95,3.76,98,3.335,100,2.009,135,2.696,223,4.37,339,2.401,350,3.427,391,5.359,621,5.777,993,4.299,1226,4.709,1369,7.027,1370,7.027]],["t/219",[3,0.862,5,1.446,7,1.721,8,0.886,9,1.358,10,1.481,11,0.819,21,1.179,22,2.266,26,1.199,33,1.931,55,0.708,61,0.892,62,1.17,63,1.035,65,1.184,66,1.942,67,1.119,68,1.656,74,2.246,89,1.139,90,3.231,92,1.96,100,1.888,112,1.207,117,1.368,120,1.295,122,0.944,126,2.682,127,1.549,129,1.598,135,2.246,139,1.282,140,2.191,167,2.098,172,3.088,181,1.368,189,1.281,194,1.696,214,1.035,228,1.481,229,1.107,230,1.184,242,1.598,243,2.399,250,1.595,252,2.246,254,2.181,257,2.484,259,1.431,269,1.663,280,1.983,281,1.264,301,0.755,311,1.017,313,2.728,317,1.819,319,1.17,339,1.681,344,1.096,352,1.344,356,2.36,365,1.962,414,1.17,422,1,447,1.322,453,1.264,465,1.054,468,2.963,469,1.802,493,1.648,501,2.837,547,1.648,601,3.218,620,3.638,637,1.755,640,0.824,645,1.707,648,2.5,651,1.587,666,2.295,667,1.996,678,3.287,693,1.777,781,1.598,788,1.42,947,1.393,948,1.516,983,1.368,986,1.598,1020,1.555,1092,1.598,1096,0.824,1226,1.449,1278,1.42,1371,1.983,1372,2.162,1373,3.218,1374,1.865,1375,1.555,1376,3.218,1377,1.707,1378,3.73,1379,3.73,1380,2.162,1381,2.162,1382,2.162,1383,1.865,1384,1.983,1385,2.162,1386,1.983,1387,1.983,1388,2.162]],["t/222",[9,1.028,92,2.062,100,2.629,102,2.401,122,1.663,167,2.208,168,3.285,243,2.154,257,2.23,262,1.973,317,3.39,400,2.175,469,3.359,651,2.242,666,3.242,667,3.719,685,3.39,694,3.561,782,4.064,1096,2.65,1389,6.376]],["t/224",[57,5.188,61,3.761,71,3.566,133,6.112,345,6.558,487,5.769,1390,8.365,1391,9.119,1392,7.497]],["t/226",[3,1.921,15,3.673,22,2.342,26,2.671,31,2.044,37,3.183,47,3.163,48,2.857,52,1.884,62,2.607,71,1.884,92,1.429,100,1.377,117,3.047,120,2.47,122,0.777,163,3.406,166,2.394,167,1.53,169,3.469,172,3.04,179,2.328,186,2.029,194,2.191,207,1.596,222,3.228,223,4.423,248,1.973,255,1.528,267,3.183,269,2.404,289,2.577,299,3.163,349,2.777,421,3.299,441,3.103,464,3.228,466,3.299,467,3.103,468,2.901,502,2.798,651,3.212,785,3.803,796,2.577,1096,1.837,1375,3.464,1393,4.817,1394,4.817,1395,4.817,1396,4.418,1397,4.817,1398,3.464,1399,4.817,1400,4.817]],["t/228",[3,1.36,49,5.003,71,1.334,98,1.619,112,2.346,147,3.63,173,3.903,175,1.417,190,2.198,194,1.552,249,2.805,262,0.563,266,1.967,311,1.605,340,1.24,350,4.427,427,1.892,468,2.055,513,2.805,591,1.619,650,1.941,659,1.847,777,4.484,796,4.165,872,7.462,1096,1.301,1278,2.24,1398,2.453,1401,3.411,1402,3.411,1403,3.411,1404,3.411,1405,10.689,1406,3.129,1407,3.129,1408,7.783,1409,6.399,1410,5.454]],["t/231",[89,2.218,100,2.077,102,2.509,105,4.976,112,1.328,120,2.523,194,3.304,207,2.364,253,3.106,255,1.561,289,3.887,427,4.028,651,2.343,658,6.248,788,4.771,833,5.737,1291,5.973,1411,5.973,1412,5.973,1413,6.268,1414,6.268,1415,7.265,1416,7.265]],["t/233",[37,2.47,102,1.906,112,2.263,169,2.692,175,2.293,207,2.233,253,2.359,255,1.186,289,2.953,427,4.353,438,3.625,451,5.986,468,3.324,484,4.209,502,1.827,559,4.081,651,1.78,758,5.804,797,3.699,916,7.201,1412,4.538,1417,5.519,1418,5.519,1419,5.519,1420,5.519,1421,7.85,1422,5.519,1423,5.519,1424,5.519,1425,5.519,1426,7.85,1427,5.519]],["t/235",[5,2.571,24,5.862,220,4.577,281,5.114,562,8.023,1235,5.635,1428,10.643,1429,7.547,1430,8.747,1431,8.747,1432,8.747]],["t/237",[3,1.531,5,2.163,7,1.204,9,0.568,21,1.892,29,1.437,67,1.987,75,2.928,90,2.521,120,2.079,167,1.219,184,2.679,186,2.522,187,2.63,189,1.319,207,0.862,243,1.855,250,1.641,253,3.146,254,2.245,255,0.825,257,1.232,259,3.663,269,3.227,301,1.341,302,1.379,338,1.691,344,1.947,447,2.349,453,2.245,468,2.312,480,4.305,502,1.27,510,3.983,529,2.103,543,2.129,549,2.349,581,5.492,600,2.63,642,2.429,649,2.473,658,2.278,666,1.791,678,4.132,694,1.967,1092,2.839,1097,2.387,1225,2.214,1376,3.312,1433,3.839,1434,2.928,1435,3.839,1436,2.839,1437,2.928,1438,3.839,1439,3.312,1440,3.156,1441,3.522,1442,3.839,1443,3.522,1444,3.839,1445,5.987,1446,3.839,1447,3.522,1448,3.839,1449,6.05,1450,3.839,1451,3.522,1452,3.839,1453,3.839,1454,3.312,1455,3.839,1456,3.839,1457,3.839,1458,3.522,1459,3.839,1460,3.839]],["t/239",[5,2.291,7,1.567,223,4.846,259,4.178,269,3.348,654,4.078,958,5.762,1434,5.943,1436,5.762,1441,7.148,1458,7.148,1461,9.905,1462,6.724,1463,7.793,1464,7.793,1465,7.793,1466,7.793]],["t/241",[5,2.804,7,1.478,9,1.567,12,3.118,26,4.074,31,3.118,48,4.359,64,5.603,65,4.025,69,3.932,184,3.288,186,4.019,338,3.237,595,6.74,616,4.991,617,5.744,1454,6.34,1467,6.34,1468,7.348,1469,6.74]],["t/243",[5,2.819,9,0.893,32,3.435,38,2.891,55,1.977,66,1.775,84,3.582,140,2.26,172,2.581,210,4.233,215,4.233,243,1.871,248,2.473,250,2.581,252,4.171,257,2.683,269,2.041,309,3.307,311,2.84,313,4.636,318,3.53,340,3.038,438,5.49,451,6.375,526,2.49,549,3.693,649,3.89,664,6.012,1434,4.604,1454,5.209,1470,6.037,1471,4.604,1472,5.538]],["t/245",[7,1.326,31,2.799,63,3.158,65,3.612,66,1.938,71,2.579,89,2.712,163,3.158,176,4.034,189,2.265,214,3.158,229,3.378,252,3.852,257,3.221,311,3.102,313,5.567,339,2.253,365,2.63,460,4.742,637,3.102,654,3.451,685,3.216,955,4.624,957,7.656,1226,4.42,1473,4.42,1474,6.049]],["t/247",[100,3.299,122,1.431,194,4.033,252,3.402,262,1.771,365,3.536,429,5.425,685,4.325]],["t/249",[70,4.814,257,2.441,340,2.765,379,3.611,518,3.433,783,4.118,795,5.211,957,5.802,1475,7.609,1476,7.609,1477,9.755,1478,7.609,1479,7.609,1480,7.609,1481,7.609,1482,7.609,1483,7.609,1484,7.609,1485,7.609,1486,7.609,1487,7.609,1488,7.609]],["t/251",[257,2.926,301,3.185,340,3.314,362,6.112,518,4.114,783,4.936,1278,5.989,1489,6.573]],["t/253",[5,1.809,7,1.703,8,2.521,9,0.91,11,2.332,22,1.704,32,4.819,38,2.946,55,2.015,69,4.532,89,3.187,100,1.759,122,1.563,127,2.556,135,2.361,140,2.303,168,2.198,220,3.22,243,1.907,248,2.521,257,3.348,259,3.717,262,1.015,339,2.102,362,4.124,432,4.124,477,4.041,667,3.292,947,3.964,1490,5.058]],["t/255",[120,3.607,168,3.71,259,4.517,262,1.714,667,4.497,1491,8.404,1492,8.404,1493,8.404,1494,8.404]],["t/257",[7,1.438,22,1.344,32,2.761,71,1.898,92,1.44,112,1.826,122,1.154,168,2.555,184,2.172,240,4.897,243,2.216,257,3.206,259,3.596,260,4.793,262,1.901,310,2.761,356,3.07,382,4.448,413,2.969,473,3.324,640,1.85,667,2.597,672,3.403,691,4.375,694,5.119,696,5.454,1495,4.853,1496,4.853,1497,4.853,1498,4.853,1499,4.853,1500,6.982,1501,4.853,1502,4.853,1503,4.853]],["t/259",[9,1.254,10,2.727,11,2.334,61,2.54,71,1.557,86,1.577,112,1.126,122,1.215,166,1.979,167,1.956,168,3.028,172,1.702,184,2.756,186,1.678,220,2.084,243,1.908,250,3.623,252,2.363,253,3.918,254,3.601,255,2.302,257,1.278,262,1.399,301,1.391,313,3.415,317,3.004,318,2.328,319,3.334,400,2.357,422,1.841,551,2.615,600,2.727,605,3.273,616,4.435,633,3.435,637,3.543,658,2.362,678,2.236,685,1.942,691,2.436,754,3.036,790,3.144,799,3.295,973,2.615,1040,3.652,1094,5.569,1383,3.435,1384,3.652,1504,3.144,1505,3.982,1506,3.652,1507,3.982,1508,3.036]],["t/261",[5,1.636,7,1.119,8,2.281,9,0.824,11,2.11,38,2.666,66,1.636,100,1.592,165,3.013,167,2.916,168,1.989,172,2.38,184,2.491,220,2.913,242,4.116,243,3.492,252,3.522,257,1.786,269,2.67,301,2.758,339,2.699,362,3.731,510,3.013,543,3.087,585,3.813,617,3.353,637,2.619,785,4.396,788,5.187,972,3.462,983,3.522,1020,4.004,1235,3.587,1377,4.396,1392,4.577,1509,4.803,1510,4.803,1511,6.815,1512,5.567]],["t/263",[7,1.274,22,2.393,28,4.684,44,2.276,52,2.477,55,2.83,58,3.006,66,1.862,67,4.473,71,2.477,92,1.88,100,1.811,105,4.339,118,4.831,140,2.371,189,2.969,194,2.881,204,3.653,243,1.963,248,2.595,262,1.046,305,4.831,453,3.704,465,4.214,469,4.176,501,3.653,651,3.172,754,4.831,1096,2.415,1389,5.811,1513,4.556,1514,6.335]],["t/265",[3,1.522,7,0.767,9,1.33,20,2.264,22,1.65,26,2.116,31,1.62,33,3.085,38,1.827,41,2.614,52,1.492,58,1.811,63,1.827,68,3.99,71,1.492,98,1.811,102,1.318,120,1.325,167,1.893,175,3.441,179,1.844,184,1.708,189,3.716,192,4.289,207,1.337,208,5.14,213,4.406,214,1.827,243,1.183,248,1.563,252,1.464,257,2.352,269,1.29,271,1.596,338,1.681,340,1.387,345,2.745,364,1.532,443,4.604,448,2.676,493,2.91,501,2.201,502,1.263,524,4.406,591,1.811,598,2.676,616,1.997,640,1.455,652,2.459,654,1.997,685,1.861,782,2.231,788,2.506,810,3.293,947,2.459,1515,3.816,1516,3.501,1517,3.816,1518,3.501,1519,3.816,1520,3.816,1521,3.137,1522,2.91,1523,2.91,1524,2.91,1525,3.816,1526,4.638,1527,3.501]],["t/267",[66,1.94,112,0.797,147,5.011,167,2.097,168,3.174,227,5.351,243,3.744,252,2.533,257,3.223,259,2.533,262,1.467,314,3.002,317,3.22,319,3.573,337,3.707,350,5.241,356,7.308,422,3.053,781,4.881,782,3.86]],["t/270",[61,4.15,86,3.164,120,3.494,147,3.725,168,3.593,242,5.905,243,3.413,262,1.66,350,3.895,834,7.439,1528,7.986,1529,7.986]],["t/272",[5,2,7,1.368,22,2.511,26,3.773,52,2.661,61,2.806,71,2.661,98,3.229,105,4.66,112,1.243,177,4.383,184,4.058,189,2.337,296,3.871,338,2.998,453,3.978,468,4.098,469,3.288,495,5.031,589,5.031,634,5.188,651,2.194,676,5.031,757,4.893,1096,3.889,1414,5.87,1530,6.804,1531,6.804,1532,5.188]],["t/274",[7,1.445,71,4.096,112,1.313,189,3.229,289,3.844,339,2.454,344,3.643,347,6.497,652,4.628,757,5.166,782,6.125,1023,5.906,1096,3.584,1121,5.478,1473,4.815,1533,7.184,1534,6.198,1535,6.59,1536,7.184]],["t/276",[3,2.385,9,1.603,21,1.89,22,2.3,61,2.467,68,2.656,89,2.914,103,3.064,207,1.864,255,2.215,269,2.022,335,3.853,339,2.044,365,2.385,400,1.872,419,4.097,502,3.158,526,2.467,602,3.148,629,3.064,630,2.814,637,2.814,640,2.281,703,2.253,806,3.003,808,3.003,827,3.497,952,3.659,1246,3.602,1247,2.917,1473,4.009,1537,4.423]],["t/278",[9,1.028,37,3.111,55,3.012,92,2.062,122,1.663,207,2.064,255,2.215,262,1.518,267,4.116,269,2.349,400,2.175,502,3.044,629,3.561,630,3.27,666,3.242,806,3.489,808,3.489,827,4.064,1096,4.183]],["t/280",[122,1.431,207,1.99,255,1.905,400,2.775,806,4.452,808,4.452,827,5.185,1024,6.074,1345,8.134,1538,8.867,1539,8.867]],["t/282",[9,1.019,11,1.747,12,1.956,15,5.25,22,1.277,29,1.726,31,1.956,58,2.188,62,2.495,63,4.376,71,1.803,89,1.408,103,2.361,122,1.578,167,2.617,178,1.803,207,1.849,227,2.776,257,2.209,267,3.081,269,3.089,270,3.157,271,1.928,313,2.556,314,4.666,340,1.675,387,2.248,400,2.578,401,5.411,640,3.484,654,2.412,659,2.495,694,2.361,796,2.466,869,3.79,1096,2.625,1354,4.211,1540,3.977,1541,6.884,1542,3.089,1543,4.827,1544,4.609,1545,3.157,1546,3.515]],["t/284",[7,1.274,9,1.636,22,1.754,61,2.613,89,2.639,98,3.006,103,3.245,105,4.339,184,2.835,201,5.466,214,3.033,255,2.376,303,2.043,339,2.952,400,1.982,456,3.815,591,3.006,603,3.513,637,4.065,651,2.787,681,3.815,682,3.159,703,3.704,799,4.624]],["t/286",[9,1.028,22,1.925,55,3.012,66,2.043,92,2.062,120,2.414,122,1.484,172,2.971,173,3.188,207,1.56,239,4.478,255,2.357,262,1.81,267,4.116,400,2.175,666,3.242,799,3.719,801,3.677,803,3.954,805,3.954,1096,3.507]],["t/288",[112,1.753,122,0.974,175,2.508,207,1.876,255,1.297,262,1.583,350,4.078,400,1.889,799,3.23,801,5.074,803,3.435,805,3.435,806,4.197,808,4.197,870,5.603,1024,4.135,1291,6.873,1344,7.884,1409,8.51,1547,4.767,1548,6.602,1549,4.767,1550,4.767,1551,4.767,1552,4.963,1553,7.669]],["t/290",[9,1.658,103,4.25,122,1.339,178,3.244,255,2.214,269,2.804,502,2.745,591,3.937,640,3.163,651,2.675,682,3.032,703,3.88]],["t/292",[9,1.442,11,1.734,21,1.446,22,2.522,55,2.243,107,3.006,112,0.836,122,1.105,147,2.135,169,2.232,178,3.812,181,2.896,212,2.153,255,1.471,262,1.13,267,3.064,350,2.232,387,3.34,400,1.432,502,3.386,518,2.065,582,3.672,591,2.172,629,2.345,630,2.153,651,1.476,672,4.801,682,1.673,703,1.724,806,2.298,808,2.298,948,3.209,956,2.298,1096,4.044,1554,2.232,1555,7.486,1556,5.629,1557,4.667,1558,5.752,1559,2.639]],["t/294",[7,1.006,10,3.427,11,2.772,21,2.312,22,2.026,66,2.974,89,2.64,118,3.816,119,3.599,122,0.807,127,2.079,135,2.806,140,1.873,167,1.589,168,2.613,214,2.396,243,2.947,250,2.139,252,4.054,257,3.391,275,3.816,317,4.216,319,2.709,339,2.499,340,1.819,341,3.7,356,3.166,364,2.009,473,5.01,637,2.354,685,2.441,1226,3.354,1449,4.114,1560,4.59,1561,6.709,1562,4.317,1563,3.7,1564,3.951]],["t/296",[11,3.027,55,3.295,92,2.37,112,1.46,118,6.09,167,2.537,168,3.593,257,3.534,262,1.66,313,4.429,317,4.907,666,3.725,685,3.895]],["t/299",[9,0.966,22,1.808,37,2.921,63,3.126,66,2.592,173,2.993,184,4.47,189,3.03,207,1.465,208,4.577,212,3.071,252,3.832,257,2.83,289,3.493,311,3.071,340,3.63,370,2.62,416,5.366,617,3.931,685,4.301,957,4.978,1020,4.694,1029,4.978,1042,5.632,1097,5.484,1238,4.978]],["t/301",[192,5.748,685,5.415,1565,8.609,1566,8.609,1567,8.609]],["t/304",[1,4.12,5,2.263,9,1.139,22,2.132,38,3.687,168,2.75,177,4.961,184,3.446,257,2.471,340,3.572,341,7.268,549,4.71,640,2.936,685,3.755,964,5.399,1526,4.872,1568,7.063,1569,6.643,1570,5.872,1571,7.063]],["t/306",[7,1.362,89,2.069,92,1.339,95,2.414,100,1.937,112,1.487,122,0.728,167,2.152,168,3.23,175,3.379,179,2.181,189,1.55,192,2.336,221,3.893,250,1.929,252,1.731,257,2.174,262,1.343,317,3.304,340,3.522,341,6.686,346,4.449,347,6.349,348,5.167,365,3.244,413,2.761,518,2.036,637,3.187,640,1.721,685,5.148,783,2.443,870,3.024,1526,2.855,1572,8.135,1573,4.512,1574,6.775,1575,4.512,1576,3.563]],["t/309",[5,2.47,9,1.243,38,4.024,168,3.002,170,7.679,171,7.469,184,3.761,317,4.099,549,5.141,964,5.892,1569,7.251,1570,6.409,1571,7.709]],["t/311",[7,1.383,89,2.789,100,1.966,112,1.257,122,1.11,167,2.901,168,3.262,171,6.567,214,3.293,257,2.206,262,1.507,269,2.324,317,3.354,365,4.088,637,4.296,685,5.001,1029,5.244,1577,5.43,1578,9.132,1579,6.876,1580,6.876]],["t/313",[5,2.065,7,1.413,9,1.63,11,2.663,12,2.982,22,1.946,32,5.27,38,3.365,69,4.956,92,2.749,100,2.009,243,2.177,250,3.96,255,1.99,262,1.16,339,2.401,432,4.709,648,4.709,672,4.927,702,2.73,947,4.527,1581,7.027]],["t/315",[9,1.707,55,2.904,122,1.862,262,1.771,339,3.03,1582,7.651]],["t/317",[3,3.585,122,1.451,250,3.844,375,3.761,702,3.494,747,5.185,1357,6.648,1554,4.385,1583,6.304,1584,6.026]],["t/319",[22,2.599,55,3.074,302,3.372,303,3.027,365,3.742,400,2.937,616,4.911]],["t/321",[22,2.185,55,2.584,92,2.341,118,6.016,207,1.771,271,3.3,302,3.934,303,2.544,311,3.711,365,3.146,427,4.374,502,2.611,526,3.254,616,4.128,629,4.041,630,3.711,701,4.613,702,3.065]],["t/323",[37,3.18,55,2.327,92,2.108,122,1.506,207,2.094,267,4.176,269,2.401,302,3.352,400,2.223,502,3.088,629,3.64,630,3.342,666,3.313,701,4.154,702,2.76,806,3.567,808,3.567,818,3.989,827,4.154,1096,4.382]],["t/325",[122,1.392,207,1.937,302,3.1,382,5.367,400,2.7,661,5.56,759,5.56,806,4.332,808,4.332,818,4.846,827,5.046,1039,6.381,1585,8.629]],["t/327",[207,1.99,301,3.097,364,3.56,783,4.8,806,4.452,808,4.452,818,4.98,1035,7.29,1131,8.474,1365,7.29]],["t/329",[9,1.227,84,4.921,172,3.546,173,3.804,207,1.862,214,4.933,302,2.98,358,4.921,500,4.165,540,5.682,947,5.345,1437,6.326,1586,8.296,1587,7.609,1588,8.296]],["t/331",[9,0.77,22,2.085,47,3.419,55,1.705,56,4.28,66,3.021,92,1.545,120,1.808,122,0.84,125,2.588,128,3.744,129,3.85,150,2.539,152,3.97,172,2.226,173,4.443,175,2.163,189,1.789,207,1.169,239,3.354,255,1.119,262,1.243,267,3.369,296,2.962,302,2.705,303,1.679,318,3.044,400,1.629,419,3.566,501,3.002,588,3.185,666,2.428,701,3.044,702,2.023,803,2.962,805,4.283,812,2.962,818,2.924,1096,3.372,1099,3.566,1225,3.002,1589,5.206,1590,4.776,1591,4.492,1592,4.28,1593,4.28,1594,4.492,1595,5.206]],["t/333",[122,1.122,147,3.242,175,2.887,262,1.518,302,2.497,303,2.966,382,5.72,400,2.175,661,5.925,793,5.72,797,6.164,803,3.954,805,3.954,806,4.617,808,4.617,812,3.954,814,5.301,815,5.301,818,3.903,1039,5.14,1596,7.561,1597,6.951]],["t/335",[207,1.99,301,3.097,364,3.56,783,4.8,806,4.452,808,4.452,818,4.98,1035,7.29,1131,8.474,1365,7.29]],["t/337",[3,0.826,4,1.061,5,1.891,7,0.958,9,1.555,11,0.785,12,1.525,21,2.033,22,0.996,32,1.178,36,1.579,38,0.992,52,0.81,57,1.178,61,0.854,62,1.121,66,1.057,69,1.108,71,0.81,75,1.579,84,2.132,86,0.82,89,1.965,92,1.067,100,0.592,117,1.31,120,0.719,125,1.03,135,1.827,140,1.783,166,1.03,173,1.648,174,1.178,178,1.862,184,1.609,186,0.873,194,0.942,198,1.229,204,2.073,207,0.807,214,1.721,236,1.02,237,1.148,239,1.334,248,1.472,250,0.885,252,0.795,253,0.885,254,1.211,255,2.388,269,0.7,303,1.833,313,1.148,344,1.823,365,0.826,378,0.848,422,0.958,427,1.993,440,1.135,456,1.247,481,1.489,487,2.274,502,3.073,503,1.787,526,2.345,552,1.135,575,1.419,582,1.609,591,2.26,602,3.183,603,1.148,616,2.492,630,1.691,640,0.79,651,1.833,658,1.229,663,1.579,681,2.868,682,2.93,702,2.209,703,3.663,790,1.635,796,1.108,985,2.132,1021,1.31,1094,1.531,1227,1.703,1233,1.703,1235,1.334,1246,1.247,1247,1.01,1275,1.787,1346,1.579,1347,1.9,1355,3.068,1383,1.787,1513,1.489,1587,1.9,1598,2.071,1599,1.9,1600,1.787,1601,2.071,1602,2.071,1603,2.741,1604,2.071,1605,1.579,1606,1.531,1607,1.531,1608,1.9,1609,1.787]],["t/339",[9,1.017,15,5.244,26,5.064,92,2.71,120,3.172,122,1.11,128,4.945,139,4.079,150,4.454,190,4.43,204,3.965,237,3.813,269,2.324,271,2.877,391,5.244,420,5.679,460,4.945,467,4.43,588,4.207,640,2.622,651,2.945,1033,4.43,1272,6.308,1279,6.308,1473,4.609,1610,4.945]],["t/341",[22,2.132,37,3.446,55,2.522,92,2.285,122,1.586,262,1.622,267,4.399,269,2.603,400,2.409,651,3.492,666,3.591,680,4.637,827,4.502,952,4.71,1096,4.129]],["t/343",[122,1.273,207,1.771,253,3.372,262,1.807,400,2.469,642,4.991,651,2.544,680,4.751,827,4.613,992,5.673,1024,5.403,1096,4.176,1611,7.889,1612,7.889,1613,7.889,1614,7.889]],["t/345",[9,0.885,22,1.657,37,2.677,52,2.339,57,3.403,58,2.839,66,1.758,67,3.096,74,3.602,98,2.839,122,0.965,135,2.295,167,1.9,172,2.557,207,1.864,237,3.317,255,2.215,269,2.808,271,2.502,338,2.635,400,1.872,502,2.749,526,2.467,629,3.064,630,2.814,651,1.929,654,3.13,680,3.602,681,3.602,703,3.129,783,3.238,806,3.003,808,3.003,827,3.497,1096,3.639,1615,5.981,1616,5.981]],["t/347",[5,2,9,1.609,39,3.773,98,3.229,122,1.098,178,2.661,255,2.434,456,4.098,502,2.252,526,2.806,591,3.229,616,3.56,651,3.289,682,3.976,703,4.267,947,4.383,1617,5.594]],["t/349",[1,3.423,3,2.551,5,1.881,7,1.287,9,0.947,57,3.64,66,2.557,67,4.504,89,1.954,92,1.898,120,2.222,135,2.455,237,3.548,252,3.338,255,2.384,303,3.691,495,4.731,526,2.639,651,2.063,682,3.18,699,4.486,717,5.605,951,5.869,956,3.212,1225,3.689]],["t/351",[7,1.735,103,4.421,122,1.392,140,3.231,255,1.854,303,2.783,339,2.948,379,5.01,526,4.354,682,3.859]],["t/353",[1,2.928,3,3.111,9,0.81,55,1.792,102,3.141,109,2.669,122,0.883,127,3.777,207,2.225,262,1.288,301,3.462,303,3.197,368,2.833,369,3.876,370,3.979,371,2.644,375,2.289,376,2.962,377,4.321,378,2.242,379,4.974,387,2.669,682,2.852,712,3.594,985,5.881,1355,3.526,1618,3.935]],["t/355",[9,0.824,58,2.642,71,2.177,92,1.652,100,2.856,109,2.715,122,0.898,194,3.592,207,1.773,236,2.741,255,1.697,262,0.919,301,1.944,303,2.547,368,2.882,369,3.089,370,3.17,375,2.329,376,3.013,377,4.396,378,2.281,379,4.357,526,3.258,618,4.004,682,3.356,707,3.522,841,3.903,842,3.903,846,3.903,849,3.903,1619,5.107,1620,4.004,1621,4.004,1622,4.004,1623,4.004,1624,4.004,1625,4.004,1626,4.004,1627,4.004,1628,5.567]],["t/357",[7,1.491,9,0.575,22,2.054,37,2.705,38,1.861,48,2.305,52,1.519,74,5.458,75,2.963,92,1.793,103,1.991,120,1.349,122,0.627,134,2.24,135,1.491,166,1.932,176,2.377,184,2.705,186,1.637,201,3.352,207,0.872,220,2.033,237,3.351,248,2.475,255,1.797,269,1.313,303,2.923,311,1.828,336,3.068,338,1.712,339,1.328,344,1.97,350,1.895,379,3.519,385,5.214,386,3.758,409,2.661,466,2.661,557,3.352,573,3.352,579,2.661,582,3.744,585,2.661,651,2.392,678,2.182,682,3.661,701,2.272,813,3.352,1031,3.564,1032,3.194,1225,2.24,1236,3.758,1237,3.485,1241,2.661,1243,2.377,1260,2.416,1398,2.794,1537,2.873,1629,2.873,1630,3.564,1631,2.503,1632,3.352,1633,3.194,1634,3.885,1635,3.885,1636,3.885,1637,3.068]],["t/359",[1,2.286,3,2.592,9,0.632,31,1.813,55,1.399,102,3.443,109,2.084,112,0.781,122,0.689,127,4.14,166,2.124,207,2.237,262,1.073,301,3.072,303,3.444,368,2.212,369,3.897,370,4.001,371,2.065,375,1.787,376,2.313,378,1.75,379,5.382,381,2.806,387,3.171,682,3.215,712,2.806,985,5.913,1236,2.657,1355,4.188,1618,3.073,1638,3.513]],["t/361",[9,0.596,58,1.913,71,1.577,92,1.196,100,2.439,109,1.966,112,0.737,122,0.651,194,2.828,207,1.915,236,1.985,255,1.336,262,0.665,301,1.408,303,2.005,368,2.087,369,3.336,370,3.425,375,1.687,376,2.182,378,1.652,379,3.602,381,2.648,618,2.899,651,2.005,682,3.37,707,3.934,713,2.827,841,5.982,842,2.827,846,5.322,847,3.314,849,5.322,855,4.91,859,3.183,1620,2.899,1621,2.899,1622,2.899,1623,2.899,1624,2.899,1625,2.899,1626,2.899,1627,2.899,1639,3.698,1640,3.698,1641,3.698,1642,3.698,1643,3.698,1644,3.698,1645,3.698,1646,3.698,1647,3.698,1648,3.698,1649,3.698,1650,3.698,1651,3.478,1652,3.478,1653,3.478,1654,3.478,1655,3.478,1656,3.478,1657,3.478,1658,3.478,1659,3.478,1660,3.478,1661,3.478,1662,4.032]],["t/363",[1,1.499,3,1.117,4,2.38,7,0.934,38,1.342,41,1.919,48,1.662,55,0.918,61,1.156,66,1.366,68,1.244,86,1.11,92,1.766,109,1.367,111,1.965,120,2.405,184,2.664,186,1.957,207,1.968,219,2.072,220,2.431,228,1.919,231,4.009,236,1.38,237,4.257,252,3.176,255,2.211,267,1.254,271,1.172,272,1.965,301,2.079,303,3.318,353,3.114,369,2.327,370,1.865,379,3.286,386,1.743,440,1.535,480,2.015,502,0.927,543,1.554,549,3.641,550,2.418,566,2.57,585,1.919,592,2.213,609,1.919,619,3.435,678,1.574,699,6.147,701,1.638,787,2.213,796,2.486,983,1.773,984,2.213,985,3.531,1029,2.137,1236,1.743,1237,1.616,1241,1.919,1242,2.137,1243,1.714,1244,2.137,1247,2.266,1351,1.714,1462,2.418,1473,1.878,1537,2.072,1540,2.418,1606,3.435,1610,2.015,1631,2.993,1663,2.802,1664,2.418,1665,2.57,1666,2.418,1667,2.137,1668,2.57,1669,2.304,1670,4.262,1671,2.802,1672,2.418,1673,4.262,1674,2.802,1675,4.262,1676,2.802,1677,2.57,1678,1.535,1679,2.57,1680,2.802,1681,2.57]],["t/365",[1,3.292,3,3.378,9,0.91,55,2.015,86,2.437,109,3.001,122,0.993,207,2.174,255,1.322,262,1.398,301,3.645,303,1.984,368,3.185,369,3.788,370,3.888,371,2.973,375,2.574,376,3.33,378,2.521,387,3.001,699,5.939,705,4.859,706,4.314,708,4.859,710,4.859,712,4.041,985,6.191,1618,4.425]],["t/367",[3,2.802,4,3.6,9,1.371,38,3.365,88,4.109,122,1.134,207,1.577,255,1.51,262,1.16,301,2.454,368,3.638,369,2.748,370,2.821,375,2.939,376,3.804,378,2.878,456,4.232,651,2.266,682,2.569,703,2.647,704,5.549,705,5.549,706,4.927,707,4.446,708,5.549,710,5.549,712,4.615,774,5.053,870,4.709]],["t/369",[9,1.243,122,1.356,262,1.387,375,3.516,602,3.185,704,6.636,747,4.846,748,4.219,749,4.446,750,4.024,751,5.633,1682,8.404,1683,8.404,1684,5.756,1685,5.414]],["t/371",[4,1.515,7,1.243,9,0.719,12,2.061,29,1.107,37,1.323,41,2.025,44,1.062,66,2.323,67,2.514,88,1.729,89,0.903,92,1.834,102,1.021,120,3.471,125,1.47,139,1.754,140,1.818,166,1.47,174,2.763,179,1.429,189,1.016,207,1.774,220,1.547,231,2.551,232,2.126,237,5.679,248,1.211,251,2.126,252,2.746,255,1.929,269,0.999,272,2.073,289,1.582,303,2.549,369,1.899,379,2.305,413,1.809,439,2.335,441,1.905,480,2.126,487,1.871,500,2.438,501,1.705,505,2.126,526,2.003,529,1.62,543,1.64,563,2.126,588,1.809,589,3.591,640,1.127,699,5.017,703,1.829,717,1.905,796,1.582,799,1.582,956,1.484,973,1.942,1016,2.186,1041,2.551,1225,1.705,1236,1.839,1237,1.705,1248,1.871,1462,4.19,1473,3.255,1506,2.712,1537,2.186,1606,2.186,1610,3.493,1631,3.129,1664,2.551,1667,2.255,1669,5.883,1670,2.712,1672,5.333,1673,2.712,1686,2.957,1687,2.957,1688,2.957,1689,2.431,1690,2.957,1691,2.957,1692,2.335,1693,2.957,1694,2.551,1695,2.957,1696,2.957]],["t/373",[9,1.139,55,2.522,86,3.05,122,1.242,255,1.654,262,1.622,301,3.433,303,2.483,370,4.347,371,3.721,375,3.221,376,4.168,378,3.154,387,3.755,706,5.399,985,5.831,1016,5.693]],["t/375",[9,1.294,122,1.411,262,1.444,301,3.055,370,3.511,375,3.659,376,4.735,378,3.583,706,6.133,707,5.534,1015,6.907,1016,6.468]],["t/377",[1,2.333,7,1.327,9,0.977,22,1.207,66,1.281,67,2.257,92,1.294,102,1.506,117,2.758,135,1.673,163,2.088,178,1.705,181,2.758,184,2.954,186,2.781,204,2.514,207,1.482,214,2.088,215,3.057,236,2.146,244,1.877,255,2.051,271,1.824,303,2.129,310,2.48,344,2.211,354,4.105,369,1.705,370,1.75,371,3.19,378,2.704,379,3.133,467,2.809,502,1.443,529,2.388,582,3.977,591,3.133,600,2.986,602,2.502,651,2.569,682,3.672,703,2.486,1236,5.526,1237,5.124,1243,4.874,1253,2.306,1260,5.526,1697,3.761]],["t/379",[9,1.698,22,2.426,55,2.869,68,2.869,102,2.232,122,1.043,255,1.388,262,1.446,303,2.084,364,3.516,365,2.577,371,4.232,375,2.703,378,2.647,602,3.765,702,2.511,748,3.244,749,3.419,750,3.094,1247,3.152,1526,4.088,1584,4.331,1678,3.54,1698,3.834,1699,4.019,1700,3.953]],["t/381",[3,0.774,4,0.994,7,0.91,9,1.462,11,1.716,21,0.613,22,1.505,26,1.076,28,1.434,29,0.726,55,1.483,58,1.611,66,0.998,68,0.861,74,2.045,89,0.592,98,0.921,102,1.173,112,0.827,122,0.313,131,1.004,135,0.744,169,0.946,173,0.89,196,1.206,198,1.151,207,1.016,209,1.479,212,1.597,228,1.329,229,3.163,230,1.063,237,4.304,255,2.043,262,0.56,303,1.752,339,0.663,340,0.705,344,0.984,354,2.815,364,2.726,365,1.354,369,2.125,371,2.625,375,1.42,378,1.391,379,2.93,427,1.076,440,1.86,443,1.739,447,1.187,487,3.437,495,1.434,502,2.043,518,1.532,548,1.532,563,1.395,582,2.763,588,1.187,602,3.218,603,1.883,630,1.597,637,0.913,641,1.227,651,1.46,660,2.111,682,3.213,702,1.759,703,2.325,748,0.974,749,1.026,750,1.626,783,1.05,795,2.326,796,1.038,956,0.974,1041,1.674,1225,3.133,1226,1.3,1236,3.84,1237,2.611,1241,2.326,1243,3.324,1246,1.168,1247,1.656,1253,2.874,1258,2.23,1260,2.111,1351,1.187,1374,1.674,1471,2.589,1559,1.119,1584,1.3,1605,1.479,1638,1.595,1678,1.86,1684,1.329,1685,1.25,1698,2.014,1699,2.111,1700,2.077,1701,1.94,1702,1.674,1703,1.94,1704,1.94,1705,2.589,1706,2.51,1707,1.532,1708,1.674,1709,1.434,1710,1.274,1711,1.674,1712,1.674,1713,1.25,1714,1.395,1715,1.187,1716,1.434]],["t/383",[3,1.892,9,1.465,12,2.014,22,1.948,26,2.631,52,1.856,76,3.509,84,2.815,89,1.449,92,1.408,95,2.539,120,1.648,135,2.699,139,2.815,140,2.633,166,2.359,186,2.964,189,1.63,248,1.944,252,1.821,255,2.461,291,2.7,303,2.703,306,3.25,344,2.406,349,2.736,378,1.944,427,2.631,456,2.858,500,4.208,502,2.328,594,3.25,602,3.513,651,1.53,682,2.571,702,1.844,703,2.649,796,2.539,1021,3.002,1355,3.057,1593,3.901,1607,3.509,1637,3.747,1717,4.745,1718,2.815,1719,4.745,1720,4.353]],["t/385",[7,1.149,9,1.576,11,3.529,21,1.806,22,1.583,29,2.14,55,1.872,66,1.68,112,1.045,122,0.922,169,2.788,196,3.554,207,1.283,212,3.785,255,2.001,262,1.328,340,2.077,354,3.554,356,3.616,364,2.294,518,3.63,563,4.11,702,2.221,703,3.508,747,3.296,748,2.869,749,3.024,783,3.094,956,2.869,1253,3.024,1351,3.497,1559,3.296,1707,4.513,1708,4.931,1709,4.226,1710,3.753,1711,4.931,1712,4.931]],["t/387",[9,1.634,11,2.68,21,1.511,22,2.332,55,2.757,68,2.123,112,0.874,122,0.771,135,2.714,169,2.332,212,3.327,255,2.134,262,1.167,303,2.715,340,1.737,365,2.82,375,2.959,518,3.191,594,3.275,602,4.186,641,3.025,702,1.858,703,2.664,747,2.757,748,2.4,749,2.529,750,3.387,956,2.4,1247,4.106,1253,2.529,1559,2.757,1638,3.93,1678,4.611,1698,4.196,1707,3.775]],["t/389",[7,1.215,9,1.482,11,1.472,12,2.565,22,1.076,39,2.155,55,1.979,66,1.142,71,1.519,89,1.186,92,1.793,120,2.099,122,0.627,140,2.262,169,1.895,189,2.076,212,1.828,252,2.319,255,2.062,262,0.997,271,1.625,303,2.392,365,1.549,375,1.625,387,3.617,407,2.604,409,2.661,440,2.128,500,3.034,502,2.999,518,1.753,543,2.155,549,2.377,594,2.661,602,3.636,702,1.51,747,2.24,748,1.951,749,2.056,750,1.861,956,3.034,989,2.794,992,6.517,993,4.537,1033,2.503,1229,3.564,1247,1.895,1253,4.426,1559,2.24,1669,3.194,1678,2.128,1721,3.194,1722,3.194,1723,3.885,1724,2.24,1725,3.885,1726,3.885,1727,3.885,1728,3.885,1729,3.885]],["t/392",[9,0.604,109,1.991,122,1.235,207,1.717,240,2.354,262,1.263,301,1.426,368,2.114,369,2.992,370,3.071,375,2.627,376,2.21,378,1.672,379,1.938,381,2.681,602,1.547,682,2.295,702,1.586,707,2.583,713,4.402,716,2.63,718,2.583,719,2.796,747,2.354,748,2.05,749,2.16,750,1.955,751,2.736,841,5.364,842,2.863,846,5.364,847,3.357,849,4.402,855,3.224,859,3.224,995,3.841,996,3.113,999,3.019,1001,3.113,1003,3.113,1005,3.224,1007,3.224,1009,3.224,1011,3.224,1013,3.224,1620,2.936,1621,2.936,1622,2.936,1623,2.936,1624,2.936,1625,2.936,1626,2.936,1627,2.936,1651,3.523,1652,3.523,1653,3.523,1654,3.523,1655,3.523,1656,3.523,1657,3.523,1658,3.523,1659,3.523,1660,3.523,1661,3.523,1730,5.162,1731,3.745,1732,3.745,1733,3.745,1734,3.745,1735,3.745,1736,3.745,1737,3.745,1738,3.745,1739,3.745,1740,3.745,1741,3.745]],["t/394",[9,0.632,112,1.438,122,1.527,147,1.993,175,3.269,207,0.959,214,2.046,250,1.827,262,1.562,301,1.492,368,2.212,369,1.671,370,1.715,375,2.72,376,2.313,378,2.663,518,1.928,602,1.619,700,3.159,702,1.66,704,5.134,705,3.374,706,2.996,707,2.703,708,3.374,710,3.374,712,2.806,715,5.609,716,2.753,717,2.753,718,2.703,719,2.927,720,3.073,721,2.753,722,2.864,723,2.753,724,2.703,725,3.073,726,3.073,727,3.073,728,3.073,729,3.073,730,3.073,731,3.073,732,3.073,733,3.073,734,3.073,735,2.703,736,3.073,737,3.073,738,3.073,739,3.073,740,3.073,741,3.073,742,3.073,743,3.073,744,3.073,745,3.073,747,2.464,748,2.145,749,2.26,750,2.046,751,2.864,774,3.073,801,2.26,870,2.864,1357,3.159,1741,5.963,1742,4.807,1743,4.273,1744,3.159]],["t/396",[9,0.641,109,2.112,122,1.429,207,1.781,262,1.462,301,1.512,368,2.242,369,3.103,370,3.185,375,3.704,376,3.555,378,1.774,379,2.055,381,2.844,602,1.641,682,2.401,702,1.683,707,2.74,713,4.605,716,2.79,717,2.79,718,2.74,719,2.966,720,3.114,746,2.966,747,2.497,748,2.174,749,2.291,750,3.145,751,4.402,841,5.563,842,3.036,846,5.563,847,3.56,849,4.605,855,3.419,859,3.419,1015,5.186,1016,3.202,1620,3.114,1621,3.114,1622,3.114,1623,3.114,1624,3.114,1625,3.114,1626,3.114,1627,3.114,1651,3.736,1652,3.736,1653,3.736,1654,3.736,1655,3.736,1656,3.736,1657,3.736,1658,3.736,1659,3.736,1660,3.736,1661,3.736,1745,6.024,1746,3.56]],["t/398",[9,1.04,122,1.672,262,1.71,375,3.875,376,3.804,702,2.73,716,4.527,717,4.527,718,4.446,719,4.813,720,5.053,746,4.813,747,4.052,748,3.528,749,3.718,750,3.365,751,4.709,989,5.053,990,5.777,1015,7.315,1016,5.196,1745,8.497,1746,5.777]],["t/401",[4,3.943,5,0.827,7,0.938,10,1.928,31,1.194,33,1.457,44,2.145,57,1.601,65,1.542,68,1.25,98,1.336,112,0.852,125,2.318,135,1.08,139,1.67,173,3.804,184,1.26,187,1.928,205,2.222,207,1.862,228,1.928,229,2.389,236,1.386,237,4.871,255,2.166,271,1.177,289,1.506,352,1.75,354,5.715,369,3.244,379,3.652,386,3.713,447,1.722,502,2.547,505,2.024,512,3.448,526,1.161,552,2.554,553,2.081,574,2.146,582,3.931,583,2.222,682,2.182,701,1.646,703,1.06,956,1.413,983,1.781,984,2.222,986,2.081,1237,2.689,1241,3.194,1242,2.146,1243,1.722,1246,2.808,1247,2.912,1248,2.95,1250,4.293,1355,1.813,1471,2.146,1677,2.582,1697,2.428,1718,2.766,1747,3.833,1748,4.023,1749,2.582,1750,2.814,1751,4.001,1752,4.663,1753,5.151,1754,2.314,1755,2.814,1756,2.582,1757,2.428,1758,2.582,1759,2.814,1760,2.814,1761,4.663,1762,4.023,1763,4.663,1764,2.314]],["t/403",[4,2.905,5,1.053,9,0.839,10,3.884,11,1.358,21,2.529,29,1.341,41,2.454,57,2.038,61,1.478,88,2.095,134,2.066,135,1.375,140,2.123,173,2.6,204,2.066,207,0.804,215,2.512,248,1.468,253,3.008,255,1.873,271,1.499,309,1.962,357,3.286,407,2.401,422,3.7,427,1.987,443,1.835,480,5.061,502,3.586,526,1.478,529,3.855,552,3.106,575,2.454,582,1.603,600,2.454,602,2.667,603,3.144,616,2.967,617,2.158,629,1.835,630,3.764,637,1.685,658,2.125,682,3.187,703,3.014,1027,3.091,1032,2.945,1099,2.454,1126,2.945,1233,2.945,1236,2.228,1241,3.884,1247,1.747,1248,2.267,1250,2.576,1554,1.747,1570,2.732,1583,2.512,1584,2.401,1593,2.945,1603,2.732,1631,2.308,1747,4.661,1751,2.401,1753,3.091,1765,3.582,1766,3.582,1767,5.201]],["t/405",[1,1.983,4,1.899,5,1.089,11,1.405,21,1.841,22,1.026,29,2.18,61,1.529,86,1.468,92,2.419,166,4.053,176,2.267,186,1.562,204,2.137,207,1.83,215,2.599,253,1.584,255,1.752,269,1.253,271,2.436,284,5.342,354,3.622,369,1.449,502,3.855,512,4.306,529,3.19,543,2.055,575,2.539,582,1.659,603,2.055,629,4.54,630,4.426,640,1.413,652,2.388,682,2.63,702,1.44,703,2.71,977,3.4,1237,3.358,1244,2.826,1247,2.841,1248,5.607,1250,2.665,1259,3.047,1355,2.388,1631,2.388,1685,2.388,1713,2.388,1747,3.047,1751,2.484,1754,3.047,1756,3.4,1768,3.706,1769,3.706,1770,4.599,1771,3.706,1772,3.198,1773,3.4]],["t/407",[1,1.02,4,0.976,5,0.982,7,0.383,9,0.495,10,2.289,11,1.267,18,1.453,21,0.602,29,0.713,38,0.912,39,4.017,44,0.685,61,0.786,68,1.484,70,1.206,71,1.307,74,2.689,84,1.13,112,0.816,135,2.058,139,1.983,140,1.671,150,0.929,176,2.045,184,1.496,189,0.655,203,1.148,204,1.099,207,1.814,212,1.572,214,0.912,218,4.833,222,1.277,228,2.289,229,0.976,236,0.938,248,0.781,255,2.073,271,0.797,289,3.266,296,1.084,298,1.505,344,2.72,350,0.929,353,3.596,354,4.18,358,1.983,369,2.628,378,0.781,386,2.079,407,1.277,411,1.251,427,1.057,437,1.567,440,1.044,477,2.932,479,1.251,502,2.546,512,4.969,524,1.409,526,1.379,529,1.831,551,1.251,552,1.831,553,2.471,575,1.305,585,1.305,591,0.904,597,1.277,600,1.305,602,3.408,603,1.057,630,2.871,637,0.896,641,2.115,682,0.697,703,1.682,862,1.305,863,1.748,881,1.644,956,0.957,992,3.211,993,1.166,1225,3.52,1237,4.177,1241,4.181,1242,1.453,1243,1.166,1244,1.453,1253,1.768,1358,1.505,1473,2.24,1532,1.453,1570,2.549,1631,4.956,1669,1.567,1675,4.921,1679,4.095,1714,2.404,1715,2.045,1716,2.471,1753,2.884,1758,1.748,1762,1.644,1764,1.567,1774,1.644,1775,1.505,1776,1.453,1777,1.905,1778,1.905,1779,1.905,1780,4.464,1781,1.905,1782,1.905,1783,1.905,1784,1.905,1785,1.905,1786,1.905,1787,1.905,1788,5.365,1789,3.342,1790,1.905,1791,1.748]],["t/409",[9,1.126,25,5.626,70,4.814,71,2.975,97,7.703,122,1.228,178,2.975,228,5.211,229,3.898,248,3.117,255,2.096,502,2.518,582,3.405,591,3.611,603,4.219,703,3.674,1610,5.472,1792,4.902,1793,4.814,1794,6.979]],["t/411",[9,1.569,11,2.422,21,0.78,22,2.408,31,1.048,55,2.847,58,1.172,102,1.876,107,1.621,112,1.589,122,1.153,140,0.924,147,1.151,178,4.295,212,1.161,255,1.373,262,1.435,303,1.752,339,0.843,340,0.897,344,1.252,350,1.204,364,3.319,371,3.751,375,2.272,378,2.225,419,1.691,443,2.783,447,1.51,473,1.691,502,2.366,518,1.114,582,1.87,602,3.432,603,3.012,637,1.161,660,3.378,702,2.483,703,0.93,748,2.098,750,2.601,778,1.621,795,3.721,1246,1.487,1247,3.117,1253,1.306,1554,1.204,1557,1.404,1678,2.976,1698,3.223,1699,3.378,1700,3.323,1705,4.143,1706,4.017,1707,1.949,1792,3.5,1793,4.044,1795,1.949,1796,1.775,1797,2.264,1798,1.655,1799,1.621]],["t/413",[3,1.339,7,1.356,9,0.797,11,1.273,21,1.061,22,2.339,31,1.425,52,1.313,55,1.1,61,1.385,68,2.391,86,1.33,89,1.644,102,1.86,107,2.205,112,0.614,122,0.542,127,2.237,135,2.96,140,1.257,161,1.54,178,4.073,189,1.154,207,1.513,253,1.436,255,1.657,301,1.173,303,1.737,310,1.91,344,1.703,350,1.638,378,1.376,427,1.862,465,1.638,476,2.652,481,2.415,487,2.125,500,1.686,502,1.111,512,2.483,513,2.761,526,1.385,582,3.017,597,2.251,598,2.354,602,4.033,603,1.862,651,1.083,682,1.228,702,2.62,703,2.028,981,2.415,982,2.561,995,2.054,1021,2.125,1243,4.124,1246,2.022,1247,1.638,1260,4.193,1557,1.91,1678,2.95,1698,1.992,1699,2.088,1700,2.054,1705,2.561,1792,4.344,1793,4.88,1795,2.652,1796,2.415,1800,3.08,1801,3.776,1802,2.652,1803,2.897,1804,2.897,1805,3.08]],["t/415",[4,1.423,7,0.559,11,1.053,12,1.179,21,0.878,22,2.116,31,1.958,32,3.918,38,1.33,52,1.804,61,1.146,66,1.356,68,3.058,71,1.804,86,1.1,89,2.103,95,1.486,107,1.824,112,0.508,117,2.918,135,1.77,139,2.736,140,2.214,166,1.381,176,1.699,178,2.988,184,1.243,189,1.585,204,1.602,207,1.035,208,1.948,214,1.33,248,1.138,253,1.188,255,0.597,271,2.474,289,1.486,296,2.624,310,1.58,338,1.224,344,1.409,350,1.355,386,1.728,411,3.029,422,2.133,443,1.423,481,1.998,487,1.758,502,3.139,540,1.903,575,1.903,582,2.647,585,3.159,592,3.642,594,1.903,602,2.61,603,4.237,616,3.604,629,2.363,630,2.17,640,1.059,641,3.742,658,1.648,674,2.054,682,3.342,703,3.573,972,1.728,1250,1.998,1275,2.397,1398,1.998,1434,2.118,1557,3.365,1558,4.147,1603,2.118,1606,2.054,1607,3.411,1609,2.397,1747,6.282,1751,1.862,1793,1.758,1804,2.397,1806,2.284,1807,2.778,1808,2.778,1809,4.613,1810,2.397]],["t/417",[7,1.139,9,0.838,32,3.223,33,2.933,39,3.141,52,2.215,86,2.244,119,7.241,161,2.598,248,2.321,338,2.496,407,3.797,413,3.466,502,3.828,526,2.337,582,4.752,629,2.902,630,2.665,682,3.388,703,3.999,796,3.031,1246,3.412,1247,2.763,1558,5.607,1685,3.65,1713,3.65,1714,4.074,1715,3.466,1716,4.189,1811,5.665,1812,5.665]],["t/419",[9,0.817,122,1.606,178,3.573,262,1.642,375,4.163,602,3.462,748,3.941,750,4.765,751,3.699,801,2.92,807,3.377,828,4.081,1367,4.358,1554,2.692,1557,3.14,1715,4.802,1730,4.538,1792,5.057,1793,3.492,1798,3.699,1799,3.625,1813,6.199,1814,6.454,1815,4.762,1816,6.454,1817,4.081,1818,4.762,1819,4.762,1820,4.762,1821,4.762,1822,4.762,1823,4.762,1824,4.762]],["t/421",[5,1.264,8,1.762,9,1.169,22,1.81,32,2.447,33,2.227,38,2.06,55,1.409,66,1.264,69,3.496,71,1.682,76,3.18,89,1.995,92,1.939,100,2.713,120,2.269,122,0.694,125,2.138,140,2.446,167,1.366,172,1.839,189,3.032,194,1.956,220,2.251,243,2.025,245,2.883,262,1.078,264,3.28,269,1.454,339,1.47,362,2.883,379,2.041,429,3.997,432,2.883,453,3.821,465,2.098,468,6.254,469,2.078,479,2.825,637,2.023,651,3.061,652,2.771,788,5.189,965,3.396,966,3.28,1092,3.18,1226,2.883,1235,4.21,1398,5.682,1413,3.711,1513,3.093,1825,3.945,1826,3.945,1827,3.945]],["t/423",[3,3.861,7,1.512,58,3.569,89,2.296,92,2.231,100,2.15,122,1.728,163,3.601,189,2.583,194,4.403,236,3.702,362,5.04,364,3.019,461,5.734,465,3.668,466,5.151,467,4.845,472,5.938,494,4.676,620,5.56]],["t/425",[32,3.371,33,3.068,52,2.317,55,2.703,58,2.812,66,1.742,69,3.171,74,3.569,92,1.758,100,2.359,102,2.047,111,4.155,120,2.058,122,1.532,135,3.167,189,2.036,195,5.42,243,1.836,262,1.567,301,2.07,338,2.611,339,2.025,364,2.379,414,3.208,420,5.132,432,3.972,464,5.531,465,2.89,469,3.988,471,6.517,472,4.679,637,2.788,1774,5.113,1828,5.926,1829,5.926]],["t/427",[55,2.865,66,2.571,92,2.595,135,3.356,140,3.275,167,2.778,195,5.744,196,5.44,311,4.115,453,6.223,651,2.821]],["t/429",[100,2.916,112,1.243,122,1.646,195,4.468,196,4.231,255,1.462,262,1.683,364,3.64,393,4.098,420,4.231,464,4.56,466,4.66,469,3.288,494,4.231,501,3.923,502,2.252,629,3.486,630,3.201,634,5.188,651,2.194,1414,5.87,1710,4.468,1830,6.241,1831,6.804,1832,6.804,1833,6.241]],["t/431",[3,1.681,4,2.16,5,1.239,9,1.467,12,1.789,22,2.419,26,2.338,31,2.731,58,2.001,84,3.818,86,1.67,98,2.001,140,1.579,176,3.937,186,1.777,207,1.445,248,1.727,255,2.341,269,1.425,271,2.692,281,2.466,303,2.076,339,1.441,344,2.138,447,2.58,502,3.113,526,4.09,582,1.887,602,1.598,629,3.297,630,3.028,637,1.984,640,1.608,652,4.146,682,3.984,702,1.638,703,2.94,985,2.501,1355,5.628,1532,3.216,1600,3.638,1684,2.888,1834,4.217,1835,4.217]],["t/433",[4,1.856,7,1.15,9,1.496,11,2.686,21,1.145,22,1.584,29,1.356,55,2.322,66,1.065,68,1.609,112,1.296,122,0.585,135,1.39,169,1.767,196,2.253,207,0.813,212,2.691,255,1.73,262,0.944,303,1.845,340,1.317,354,2.253,364,2.296,365,2.281,375,2.393,443,2.931,502,2.901,518,2.581,563,2.605,582,2.56,602,3.832,603,3.172,630,1.704,641,2.292,660,4.408,702,1.408,703,2.67,748,1.819,749,1.917,750,2.739,783,1.961,956,1.819,1247,2.79,1253,3.027,1351,2.216,1559,2.089,1583,2.54,1638,2.978,1678,3.134,1684,2.481,1685,2.334,1698,3.394,1705,4.362,1706,4.23,1707,2.861,1708,3.126,1709,2.679,1710,2.379,1711,3.126,1712,3.126,1713,3.685,1714,2.605,1715,2.216,1716,2.679,1836,2.763]],["t/435",[5,1.115,7,1.193,9,1.222,29,1.42,31,1.61,32,2.158,39,2.104,44,2.131,51,3.273,135,1.456,163,1.817,186,2.499,218,2.728,223,2.359,248,1.554,253,3.122,255,0.815,269,1.282,289,2.03,297,3.572,310,2.158,349,2.188,354,2.359,364,1.523,378,1.554,427,2.104,481,2.728,500,1.905,502,1.255,543,3.289,555,3.48,603,3.289,640,1.447,642,2.4,656,2.285,678,2.13,701,2.218,702,2.305,719,5.002,978,3.48,979,3.48,980,4.386,981,2.728,982,4.523,983,2.4,995,2.321,996,2.893,999,2.805,1001,2.893,1003,2.893,1097,2.359,1537,2.805,1664,3.273,1665,3.48,1678,2.078,1746,3.119,1748,3.273,1764,3.119,1796,5.252,1803,3.273,1837,5.118,1838,3.119,1839,5.931,1840,3.794,1841,3.794,1842,3.794,1843,5.931,1844,3.794,1845,3.794,1846,3.794,1847,3.48,1848,3.119,1849,5.118,1850,5.931,1851,5.931,1852,5.931,1853,5.441,1854,3.794,1855,3.794,1856,2.996,1857,3.48,1858,3.48]],["t/437",[39,4.321,700,5.762,702,3.028,717,5.021,995,4.768,1746,6.407,1838,6.407,1859,7.148,1860,7.148,1861,7.793,1862,11.829,1863,7.793,1864,7.793,1865,7.148,1866,7.793,1867,7.793,1868,7.793]],["t/439",[9,1.648,55,2.682,122,1.322,262,1.839,702,3.971,716,5.276,717,6.584,718,5.182,720,5.89,995,5.01,1796,5.89]],["t/441",[9,1.463,71,3.402,122,1.595,262,1.631,364,3.492,700,6.433,702,4.122,716,6.369,717,6.834,718,5.504,719,5.959,720,7.109,980,4.731,1796,4.601,1860,5.869,1869,9.885]],["t/443",[5,2,11,2.578,21,2.15,32,3.871,66,2.998,88,5.302,89,2.769,135,3.479,140,2.547,175,2.826,205,5.372,297,5.461,378,4.178,437,5.594,795,4.66,834,5.031,966,5.188,995,5.547,999,6.705,1411,5.594,1692,5.372,1838,7.455]],["t/445",[9,1.398,21,1.856,55,1.923,122,0.947,240,3.386,262,1.353,378,4.972,656,3.536,702,3.186,716,3.783,718,3.715,995,5.017,996,4.478,999,4.342,1001,4.478,1003,4.478,1005,4.637,1007,4.637,1009,4.637,1011,4.637,1013,4.637,1796,4.223,1838,9.979]],["t/447",[9,1.323,55,2.182,122,1.075,240,3.842,262,1.476,656,4.013,702,3.474,716,4.293,718,4.215,719,4.564,866,5.081,995,5.47,996,5.081,999,4.927,1001,5.081,1003,5.081,1005,5.261,1007,5.261,1009,5.261,1011,5.261,1013,5.261,1731,6.112,1732,6.112,1733,6.112,1734,6.112,1735,6.112,1736,6.112,1737,6.112,1738,6.112,1739,6.112,1740,6.112]],["t/449",[5,2.719,7,1.86,36,7.054,255,1.988,302,3.323,616,4.84,617,5.571,1233,7.605]],["t/451",[5,2.023,7,0.927,22,1.277,61,1.901,112,1.67,173,3.778,181,2.916,186,3.85,212,2.168,214,2.207,220,2.412,222,3.089,232,3.315,255,0.99,271,1.928,302,4.013,303,1.487,340,1.675,369,2.692,370,1.85,420,2.867,502,2.278,526,1.901,551,3.027,629,2.361,630,2.168,648,3.089,682,1.685,693,3.79,701,2.695,702,2.675,776,4.228,955,3.232,958,3.408,1021,2.916,1042,5.939,1097,2.867,1237,2.658,1248,2.916,1434,3.515,1631,2.97,1848,6.773,1870,4.609,1871,4.609,1872,4.609,1873,4.609,1874,4.609,1875,4.609,1876,4.609,1877,4.609,1878,4.609,1879,4.609,1880,4.609,1881,4.609,1882,4.609]],["t/453",[4,4.543,5,2.607,9,1.312,21,2.803,66,2.607,67,4.591,68,3.937,189,3.046,616,4.64,1617,7.29,1883,6.762]],["t/455",[1,2.398,7,0.901,9,0.663,21,1.416,26,2.485,31,1.902,63,5.043,65,2.455,66,1.317,89,1.368,92,2,95,2.398,102,3.743,112,1.48,120,1.556,122,0.723,127,1.861,139,2.658,147,2.09,164,3.313,175,3.743,181,2.835,214,2.146,250,2.881,257,2.599,266,3.886,271,2.819,301,2.354,370,3.878,386,4.191,387,2.185,449,2.887,467,2.887,518,3.04,640,2.57,723,2.887,796,3.606,1238,5.14,1447,4.11,1884,5.322,1885,4.481,1886,4.481,1887,4.481,1888,4.481,1889,4.11,1890,3.866,1891,3.313]],["t/457",[9,1.323,11,2.525,102,3.486,122,1.075,127,3.714,147,3.107,169,3.25,175,3.714,181,4.215,212,3.134,214,3.19,250,3.822,262,1.476,340,2.421,370,2.675,378,2.729,386,4.144,518,3.006,721,4.293,723,4.293,724,4.215,735,4.215,862,4.564,956,3.345,1559,3.842,1884,5.261,1892,5.478,1893,5.478]],["t/459",[9,0.966,112,1.612,122,1.053,175,3.663,250,2.79,262,1.077,518,2.945,659,3.533,721,4.205,722,4.375,723,4.205,724,4.13,725,4.694,726,4.694,727,4.694,728,4.694,729,4.694,730,4.694,731,4.694,732,4.694,733,4.694,734,4.694,735,4.13,736,4.694,737,4.694,738,4.694,739,4.694,740,4.694,741,4.694,742,4.694,743,4.694,744,4.694,745,4.694,1559,3.764,1742,4.827]],["t/461",[9,1.673,21,2.377,31,3.191,92,2.231,186,4.079,250,4.578,254,4.397,255,2.301,257,2.413,340,2.733,640,2.867,664,5.408,703,4.033,1355,4.845]],["t/463",[9,1.676,11,2.578,22,2.511,55,3.34,122,1.646,169,3.318,212,3.201,250,4.36,255,1.462,262,1.497,518,3.069,688,4.56,703,2.563,801,3.6,956,3.416,1357,5.031,1559,3.923,1744,5.031,1894,9.067,1895,6.804]],["t/465",[9,1.525,92,2.062,122,1.663,250,2.971,255,1.493,262,1.518,659,4.978,664,4.999,666,3.242,746,4.761,801,4.866,1357,6.801,1559,5.303,1742,6.801,1744,6.801,1896,6.951,1897,6.951,1898,6.951,1899,6.951,1900,6.951]],["t/468",[5,1.064,7,1.424,9,1.296,11,0.556,12,1.124,18,1.118,21,0.837,22,0.406,23,1.265,29,0.549,31,1.881,39,0.813,44,1.3,50,1.265,51,3.122,52,2.003,62,0.794,69,0.785,71,0.574,84,1.571,86,0.581,89,0.808,95,1.417,98,0.696,102,0.507,112,0.936,125,2.203,135,1.016,140,1.917,147,1.235,163,0.702,164,1.084,166,0.729,169,0.715,172,0.627,173,0.673,174,2.059,178,2.003,184,1.185,186,2.816,187,1.005,198,0.87,207,0.594,209,1.118,212,0.69,214,0.702,218,1.904,219,1.084,228,1.005,229,0.751,230,0.803,241,0.702,248,1.085,253,2.443,255,2.066,266,0.846,267,0.656,269,0.496,271,1.854,275,1.118,289,1.417,303,0.473,340,0.962,344,1.342,349,1.527,352,0.912,354,0.912,356,0.928,369,1.733,370,1.453,378,0.601,407,0.983,422,0.678,440,0.803,456,0.883,481,1.904,484,1.118,502,2.899,505,1.055,526,1.092,543,0.813,552,0.803,582,1.983,589,1.084,591,0.696,594,1.813,602,1.003,603,2.007,617,1.594,619,1.084,629,0.751,630,1.702,640,0.559,651,1.167,663,1.118,678,3.753,682,2.72,702,2.752,703,2.668,796,1.417,955,1.028,981,1.055,982,2.019,983,0.928,985,4.414,986,1.084,992,1.055,995,1.62,1021,0.928,1097,0.912,1225,0.846,1242,1.118,1243,0.897,1244,1.118,1246,2.179,1247,2.161,1248,0.928,1355,1.706,1376,1.265,1569,2.284,1593,1.206,1600,1.265,1603,1.118,1605,2.76,1607,1.084,1608,1.345,1629,1.084,1631,0.945,1637,1.158,1678,1.982,1702,2.284,1720,1.345,1721,1.206,1748,1.265,1795,1.158,1796,1.055,1806,1.206,1837,2.284,1849,1.265,1856,1.158,1859,1.345,1884,2.091,1901,1.345,1902,1.467,1903,1.467,1904,2.647,1905,1.467,1906,1.467,1907,1.467,1908,1.467,1909,2.647,1910,3.619,1911,1.206,1912,1.467,1913,1.467,1914,1.467,1915,1.467,1916,1.467,1917,1.467,1918,1.467,1919,1.467,1920,1.467,1921,1.467,1922,1.467,1923,1.467,1924,2.647,1925,1.467,1926,1.467,1927,1.467,1928,1.467,1929,1.467,1930,1.467,1931,1.467,1932,1.467,1933,2.647,1934,1.265,1935,1.206,1936,1.345,1937,1.467]],["t/471",[5,2.065,7,1.413,9,1.04,135,3.554,229,4.746,252,2.696,253,3.004,296,3.998,301,2.454,311,3.306,427,3.896,456,4.232,520,5.549,551,4.615,605,5.777,606,6.85,642,4.446,666,3.277,678,3.946,1237,4.052,1540,6.063,1617,5.777,1776,5.359,1802,5.549,1883,7.064,1938,6.063]],["t/475",[7,1.647,55,2.682,92,2.43,120,2.845,167,2.601,189,2.814,207,1.838,227,4.932,245,5.489,465,3.994,666,3.82,783,4.433,1092,6.056,1354,5.01,1371,7.513,1542,5.489,1939,7.513]],["t/477",[4,1.694,5,1.563,9,1.448,22,0.916,33,2.753,37,1.48,61,1.364,63,4.685,67,1.712,71,2.08,84,1.961,89,1.01,122,0.533,139,1.961,167,2.119,168,1.181,183,2.611,189,1.136,207,1.497,212,4.21,220,2.783,253,2.274,255,1.143,257,1.706,259,1.269,269,2.584,271,1.383,281,1.933,302,1.911,309,2.913,311,1.555,314,1.504,340,1.933,343,2.718,349,1.906,422,1.529,427,2.949,447,2.023,451,2.521,456,3.203,500,2.67,502,1.76,505,2.378,510,1.79,543,1.833,579,2.265,622,2.521,642,4.221,646,2.611,654,3.491,666,3.565,678,1.857,785,2.611,957,2.521,983,2.092,995,2.023,1021,2.092,1047,2.853,1097,4.149,1099,2.265,1247,1.613,1249,2.611,1377,2.611,1398,2.378,1509,4.589,1510,2.853,1607,2.445,1637,2.611,1722,2.718,1891,2.445,1940,2.853,1941,3.033,1942,2.853,1943,3.306,1944,3.306,1945,6.672,1946,3.306,1947,3.306,1948,2.718,1949,3.306,1950,3.306]],["t/479",[4,2.218,5,1.93,7,2.015,9,0.972,12,1.838,37,1.938,39,3.642,40,2.649,61,1.786,66,1.273,140,2.97,167,1.375,169,2.112,173,1.986,176,4.018,212,2.037,237,2.401,248,1.774,250,1.851,252,4.365,253,1.851,255,2.153,257,1.389,290,2.966,303,2.118,310,2.463,340,2.387,358,2.569,370,2.636,379,4.517,421,4.498,496,3.419,619,3.202,666,2.02,674,3.202,699,3.036,778,2.844,952,2.649,955,3.036,983,2.74,985,2.569,1097,2.693,1373,3.736,1434,3.302,1629,3.202,1637,5.186,1951,4.33,1952,3.736,1953,4.33,1954,4.33,1955,4.33,1956,4.33]],["t/481",[5,1.768,9,1.093,12,1.639,17,2.777,21,2.335,26,2.142,40,2.363,61,1.593,66,1.768,68,1.715,71,1.51,84,3.568,89,1.179,92,1.785,99,3.741,102,2.078,120,1.341,128,4.326,133,4.031,167,2.87,173,3.388,176,3.68,179,1.866,187,2.645,207,0.867,237,4.624,252,1.482,255,1.292,268,3.543,270,2.645,278,2.945,281,2.258,295,2.363,302,2.161,303,2.914,318,2.258,322,4.145,340,1.404,343,3.175,353,2.588,356,3.805,369,2.352,407,2.588,409,4.12,437,3.175,443,3.081,448,2.708,479,2.536,480,2.777,529,2.116,575,2.645,585,2.645,588,2.363,622,2.945,956,3.02,973,2.536,1253,2.043,1449,4.945,1570,2.945,1632,3.332,1672,3.332,1772,3.332,1957,3.862,1958,3.332,1959,3.543,1960,3.862,1961,3.543,1962,3.862]],["t/483",[5,2.307,7,1.579,9,1.161,29,2.066,40,3.377,44,2.82,55,1.808,63,2.643,90,3.625,120,1.917,135,2.118,167,2.494,173,2.531,176,3.377,205,4.358,232,5.645,239,5.057,255,1.687,257,1.771,302,1.983,340,2.006,379,2.619,411,5.155,447,3.377,451,4.209,500,2.771,501,4.527,585,3.78,600,3.78,622,5.986,666,3.661,947,5.057,956,3.941,961,4.358,984,4.358,1545,3.78,1577,4.358,1883,4.209,1958,4.762,1963,5.519,1964,4.762]],["t/485",[5,2.759,9,1.389,11,3.557,12,3.983,38,4.494,339,3.207,651,3.027]],["t/487",[8,3.633,22,2.972,100,2.535,189,3.687,352,5.515,616,4.64,651,2.86,972,6.674]],["t/489",[102,3.558,189,2.85,262,1.7,651,3.779,972,5.159,1096,3.928,1522,6.326,1523,6.326,1524,6.326,1965,7.158]],["t/491",[102,3.74,112,1.796,189,2.645,346,5.057,347,6.67,350,4.794,651,3.17,972,4.788,1966,8.481,1967,9.343,1968,7.7]],["t/493",[7,2.158,8,3.633,22,2.456,100,2.535,220,4.64,272,6.217,651,3.461,986,6.557,1096,3.381]],["t/495",[7,1.692,22,1.688,86,2.414,102,3.59,112,1.993,168,3.006,207,1.368,243,2.607,255,1.31,262,1.389,350,4.104,616,3.189,651,3.517,778,4.002,827,3.564,1508,4.648,1966,5.258,1967,5.258,1969,6.094,1970,6.094,1971,6.094,1972,6.094,1973,6.094,1974,6.094,1975,6.094,1976,6.094,1977,6.094,1978,5.59]],["t/497",[5,2.825,7,1.495,8,3.936,9,1.422,22,2.059,39,4.122,81,6.111,90,4.881,100,2.125,339,3.638,529,4.071,650,4.229,958,5.496,1373,6.413,1392,7.9,1979,7.433,1980,7.433,1981,7.433,1982,6.111]],["t/499",[5,2.365,7,1.149,9,0.846,21,1.806,65,4.408,92,2.388,100,2.3,116,5.393,120,1.985,126,4.11,127,3.342,135,2.193,167,1.815,172,2.443,181,3.616,186,3.39,188,5.511,189,1.963,192,4.166,243,2.493,257,1.834,259,2.193,269,1.932,281,3.342,339,1.953,365,2.279,453,3.342,465,2.788,469,2.762,473,3.915,501,3.296,648,3.831,650,3.252,666,2.666,667,3.058,1377,4.513,1489,5.608,1983,5.715,1984,5.715]],["t/501",[14,6.94,54,8.098,55,3.074,61,3.871,117,5.938,252,3.601,1985,8.098]],["t/503",[0,4.641,1,2.414,5,2.658,6,4.145,9,1.002,11,3.083,12,2.875,53,5.825,66,1.326,80,2.387,89,2.069,90,2.963,100,1.937,112,0.825,230,5.782,243,2.521,291,5.144,305,3.441,349,2.602,364,2.72,417,6.794,428,4.872,429,4.145,430,3.441,445,5.846,446,3.024,640,1.721,798,3.024,1564,7.14,1724,2.602,1985,3.893,1986,4.512,1987,4.139,1988,4.512,1989,3.893,1990,4.512,1991,4.512,1992,6.775,1993,6.775,1994,3.71,1995,3.337,1996,4.139,1997,4.139]],["t/505",[5,1.216,6,1.493,8,1,9,0.797,11,2.691,12,1.756,20,2.455,21,0.771,29,1.549,53,1.572,58,3.011,66,0.717,67,1.263,69,2.214,80,1.291,89,1.264,92,1.882,100,2.03,102,1.861,107,1.603,112,0.446,120,2.466,131,1.263,137,1.861,147,1.138,150,4.997,154,2.006,157,2.106,165,2.916,167,0.775,175,2.238,189,1.851,190,1.572,191,2.006,192,2.142,194,1.882,195,1.603,196,2.573,199,2.976,207,0.548,214,1.169,217,2.106,230,1.337,244,1.051,245,2.773,261,3.025,262,0.889,269,1.399,271,1.021,295,2.531,296,1.388,305,1.861,309,2.267,338,1.823,340,0.887,350,1.19,356,2.618,364,3.097,418,1.755,422,2.934,427,2.295,428,1.755,429,1.493,446,1.636,451,3.156,465,1.19,477,1.603,491,1.636,518,1.101,529,1.337,531,2.106,534,3.267,538,1.755,543,2.295,597,1.636,606,3.06,625,2.106,640,1.578,666,1.138,681,1.47,796,1.306,952,2.531,955,1.711,966,1.861,1237,2.386,1280,2.006,1351,2.531,1354,1.493,1386,2.239,1443,3.796,1522,1.861,1523,1.861,1524,1.861,1546,1.861,1710,1.603,1965,4.648,1982,2.006,1995,1.805,1998,3.57,1999,2.441,2000,2.239,2001,2.239,2002,4.138,2003,4.138,2004,2.441,2005,4.648,2006,2.106,2007,2.441,2008,2.239,2009,2.239,2010,2.239,2011,3.796,2012,2.239,2013,2.239,2014,2.239]],["t/507",[5,3.078,11,3.968,80,4.505,112,1.556,230,4.664,243,2.639,446,5.707,640,3.247,1724,4.91,1995,6.296,1996,7.811,1997,7.811]],["t/509",[5,2.185,8,3.936,9,1.422,11,3.642,29,3.987,53,6.861,80,3.932,112,1.358,230,6.386,349,4.286,445,6.413,446,4.982,640,2.834,1995,5.496]],["t/511",[1,1.845,5,1.617,11,3.242,12,1.463,29,3.203,31,1.463,39,1.912,58,3.716,66,1.014,67,1.785,80,1.824,89,1.68,92,1.023,100,1.572,102,1.191,107,2.264,112,0.63,120,2.383,131,1.785,137,2.629,147,1.608,150,4.846,154,2.835,175,2.85,189,1.185,191,2.835,192,2.848,195,2.264,196,2.144,199,3.956,207,0.774,217,2.975,230,4.687,244,1.485,251,2.48,259,1.323,261,1.936,262,1.133,269,1.165,271,1.442,296,1.962,297,2.077,338,2.423,350,1.682,364,3.434,428,3.956,429,3.365,443,1.766,446,2.311,477,2.264,491,2.311,518,1.556,528,2.48,529,1.889,531,2.975,538,2.48,543,1.912,597,2.311,625,2.975,640,2.097,681,2.077,796,1.845,1354,2.109,1522,2.629,1523,2.629,1524,2.629,1546,2.629,1710,2.264,1718,2.046,1965,5.92,1995,2.55,2000,3.163,2008,3.163,2009,3.163,2010,3.163,2011,5.045,2012,3.163,2013,3.163,2014,3.163,2015,3.448,2016,2.975]],["t/513",[5,1.844,8,4.31,9,0.928,11,3.253,21,1.983,80,3.319,89,2.621,92,2.547,100,2.797,112,1.146,120,2.179,167,1.993,189,2.155,214,3.004,230,5.763,262,1.035,269,2.12,311,2.951,418,4.511,429,3.838,446,4.204,465,3.059,528,4.511,640,2.392,666,2.926,678,3.523,955,4.398,1995,4.638,1998,7.406]],["t/515",[5,2.407,9,1.212,21,2.588,112,2.132,131,4.24,167,2.601,168,2.925,243,3.167,319,4.433,667,4.382,1489,4.932,2017,4.333,2018,4.333]],["t/517",[5,0.648,7,0.763,11,1.439,16,1.631,21,0.697,22,0.611,38,1.818,52,0.863,60,1.449,63,4.292,66,0.648,71,0.863,86,2.351,89,0.674,92,1.126,103,2.56,112,0.403,120,1.318,122,0.613,125,1.887,127,1.577,129,5.402,163,4.292,167,2.624,168,3.475,170,1.631,171,1.587,175,1.577,178,0.863,205,1.742,218,2.73,229,1.945,236,1.086,242,2.807,243,2.264,250,2.136,252,2.566,253,2.136,254,1.29,255,1.57,257,1.218,259,1.456,262,0.825,267,1.699,269,0.746,271,0.923,289,1.18,302,1.795,306,1.511,314,3.042,318,4.272,319,2.055,322,1.097,339,1.707,340,1.816,341,1.631,343,1.814,385,1.903,393,2.286,394,2.807,395,2.446,396,2.73,398,1.903,409,1.511,410,2.024,411,1.449,412,2.024,422,1.02,430,1.682,461,1.682,494,1.372,500,1.108,501,1.272,508,4.311,510,3.212,511,3.121,520,1.742,521,1.814,526,0.91,642,2.402,651,0.711,652,1.421,658,1.309,667,2.031,682,1.388,700,1.631,964,2.662,1097,1.372,1346,1.682,1490,3.121,1500,1.814,1564,1.742,1568,2.024,1692,2.997,1847,2.024,2019,2.206,2020,2.206,2021,4.996,2022,1.547,2023,2.206,2024,2.206,2025,2.206,2026,2.024,2027,2.024,2028,5.934,2029,3.482,2030,3.275,2031,2.206,2032,2.206]],["t/519",[168,4.145]],["t/521",[63,5.055,86,3.419,112,1.577,168,3.082,175,3.585,262,1.424,267,3.862,400,2.7,408,6.381,510,4.671,757,6.206,2033,8.629]],["t/523",[5,2.571,9,1.294,21,2.765,112,1.945,212,4.115,365,4.244,694,4.481,956,4.391,2017,4.628,2018,4.628]],["t/525",[1,2.741,3,2.043,7,1.03,9,1.296,47,3.365,68,2.275,92,2.208,112,0.936,169,3.629,172,3.181,212,2.41,225,3.907,255,1.883,262,0.846,269,2.962,272,3.592,273,4.212,302,2.673,317,2.499,342,3.907,365,2.043,411,3.365,421,3.509,441,3.301,448,3.592,496,4.046,526,2.113,529,2.807,640,3.667,649,4.794,651,1.652,666,3.471,680,3.086,681,3.086,682,2.72,694,2.625,947,3.301,956,4.399,1252,4.421,1516,4.7,1724,2.954,1848,4.212,1891,3.788,2022,3.592,2034,4.421,2035,5.123]],["t/527",[102,3.835,147,4.377,350,4.577,956,5.936]],["t/529",[29,2.469,57,3.752,86,2.612,92,1.957,98,3.13,100,1.885,112,1.623,122,1.064,189,2.265,212,4.177,257,2.116,262,1.088,269,3.001,310,3.752,340,2.397,350,4.331,371,3.187,443,3.378,654,4.647,694,3.378,956,4.458,2036,5.69,2037,5.69,2038,5.69,2039,8.88,2040,5.69,2041,6.594,2042,6.594,2043,5.69]],["t/531",[21,2.882,112,1.667,131,4.721,400,3.415,801,4.825,1489,5.492,2017,4.825,2018,4.825]],["t/533",[7,2.107,9,1.55,38,3.44,84,4.262,172,4.018,236,3.537,255,2.478,269,2.428,339,2.454,344,4.766,449,4.628,640,2.739,703,2.706,717,4.628,972,4.467,1032,5.906,1227,5.906,2044,6.59]],["t/535",[9,1.294,55,2.865,112,1.599,122,1.411,255,2.465,262,1.757,400,2.737,799,4.68,801,4.628]],["t/537",[122,1.339,255,1.782,262,1.849,400,2.596,799,4.439,801,5.928,1547,6.55,1548,8.135,1549,6.55,1550,6.55,1551,6.55]],["t/539",[21,2.727,112,2.171,131,4.467,243,2.674,400,3.303,1489,5.197,1555,7.095,2017,4.566,2018,4.566]],["t/541",[7,1.783,9,1.588,22,2.456,55,2.904,122,1.431,255,1.905,365,3.536,400,2.775,703,3.34,1554,4.325]],["t/543",[9,1.562,55,2.826,92,2.561,122,1.703,255,2.268,400,2.7,666,4.025,703,3.25,1554,4.209,1555,7.095]],["t/545",[9,1.294,112,1.599,122,1.717,178,3.42,262,1.444,400,2.737,1554,5.191,1555,7.191,2045,10.643]],["t/547",[21,2.765,112,2.182,131,4.528,243,2.71,267,3.915,400,3.33,2017,4.628,2018,4.628]],["t/549",[3,2.407,7,1.681,9,0.893,21,1.908,27,4.046,33,3.126,37,2.702,63,2.891,71,2.361,86,2.392,89,2.553,167,2.656,168,2.157,175,3.473,189,2.074,212,2.84,237,3.348,266,4.821,267,4.865,269,2.826,270,4.135,339,2.856,465,2.945,471,4.767,510,4.525,574,4.604,593,5.209,617,3.636,640,2.302,654,3.159,1096,2.302,1710,3.965,2046,6.037]],["t/551",[267,5.193]],["t/553",[20,4.31,52,2.841,63,5.044,71,2.841,86,2.878,112,1.328,168,2.595,175,3.018,229,3.722,262,1.199,265,5.54,267,4.237,400,2.273,408,5.372,460,5.225,510,5.125,559,5.372,642,4.596,1096,3.61,2047,6.664,2048,7.265,2049,7.265]],["t/555",[21,2.842,112,1.978,131,4.655,212,4.23,365,3.585,956,5.433,2017,4.757,2018,4.757]],["t/557",[7,1.887,92,2.785,120,3.26,212,5.223,339,3.207,956,4.711]],["t/559",[102,3.497,212,4.763]],["t/561",[29,2.66,86,2.814,92,2.108,100,2.031,112,1.298,122,1.146,212,3.342,257,2.28,262,1.173,269,3.154,301,2.481,310,4.042,340,2.582,443,3.64,654,4.883,659,5.051,956,4.684,2036,6.13,2037,6.13,2038,6.13,2040,6.13,2043,6.13,2050,7.104,2051,7.104,2052,7.104]],["t/563",[21,2.765,112,2.182,131,4.528,243,2.71,267,3.915,400,3.33,2017,4.628,2018,4.628]],["t/565",[52,3.959,267,4.531]],["t/567",[267,5.424]],["t/569",[21,2.727,112,1.929,167,2.741,168,3.082,243,2.674,262,1.424,317,5.148,400,2.7,1489,5.197,2017,4.566,2018,4.566]],["t/571",[21,2.803,64,6.762,66,2.607,167,2.817,168,3.167,252,3.402,262,1.464,313,4.917,335,5.713,340,3.223,400,2.775]],["t/573",[9,1.33,167,3.438,168,3.866,262,1.786,269,3.039,400,2.814,640,3.429]],["t/575",[9,1.533,63,3.365,112,1.284,120,3.599,167,2.232,168,3.702,255,1.51,262,1.71,269,3.503,400,3.243,494,4.37,500,3.528,640,3.951,2053,7.027,2054,7.027,2055,7.027]],["t/577",[21,2.727,112,2.171,131,4.467,243,2.674,400,3.303,799,4.617,1489,5.197,2017,4.566,2018,4.566]],["t/579",[7,1.548,9,1.454,22,2.999,37,3.446,55,2.522,112,1.407,122,1.242,127,3.198,135,2.954,172,3.292,255,2.451,262,1.271,269,2.603,365,3.07,400,2.409,799,4.12]],["t/581",[9,1.1,11,2.817,52,2.907,55,2.434,66,2.185,92,2.205,122,1.199,172,3.177,173,3.409,207,1.668,239,4.789,255,2.288,262,1.586,338,3.275,400,2.326,666,3.467,783,4.023,799,3.977,801,3.932,803,4.229,805,5.467]],["t/583",[122,1.339,255,1.782,262,1.849,400,2.596,799,4.439,801,5.928,1547,6.55,1548,8.135,1549,6.55,1550,6.55,1551,6.55]],["t/585",[38,2.918,74,3.67,87,4.812,112,1.114,122,0.983,147,2.842,168,2.177,169,2.972,175,2.532,192,3.155,255,1.808,262,1.591,346,4.002,347,3.564,400,1.907,598,4.273,783,3.299,793,5.233,797,5.64,799,3.261,801,4.452,803,3.467,805,3.467,806,4.224,808,4.224,870,5.64,2056,6.094,2057,6.094,2058,6.094,2059,6.094,2060,6.094,2061,6.094,2062,6.094,2063,7.719]],["t/587",[21,2.765,112,2.182,131,4.528,243,2.71,400,3.33,1543,6.133,2017,4.628,2018,4.628]],["t/589",[7,0.758,29,1.412,31,1.601,38,1.806,63,1.806,66,2.139,88,2.205,89,1.803,92,1.752,112,0.689,122,0.609,164,2.789,173,1.73,178,3.219,186,1.589,207,2.466,213,2.789,219,5.38,222,2.528,227,4.382,229,1.932,252,1.447,257,1.894,266,2.175,267,1.688,269,1.275,271,1.578,281,2.205,301,1.317,314,1.715,336,2.978,353,2.528,358,2.237,364,1.514,401,2.477,526,1.556,541,3.101,551,2.477,582,1.688,594,2.583,614,4.876,619,2.789,640,1.438,654,1.974,678,2.118,694,1.932,956,1.893,1124,4.854,1132,3.254,1253,1.995,1354,6.926,1440,3.101,1542,4.876,1543,2.644,1791,5.416,1802,2.978,2064,5.548,2065,3.771,2066,3.771,2067,3.771,2068,2.978,2069,3.771,2070,3.46,2071,3.46,2072,3.46,2073,3.46,2074,3.46]],["t/591",[614,6.479,1543,8.393,2064,7.372]],["t/593",[12,2.283,29,2.886,63,2.577,89,1.643,92,2.287,112,0.983,122,0.868,147,2.51,150,2.624,152,5.879,162,4.643,167,2.449,189,1.848,207,2.337,227,4.643,232,3.87,257,2.89,258,3.146,266,3.103,271,3.225,301,1.879,336,4.249,401,3.534,413,3.292,614,6.037,654,2.816,659,2.913,678,3.022,694,2.757,709,3.87,797,3.606,862,3.686,870,3.606,1111,4.424,1225,3.103,1249,4.249,1543,5.405,2064,6.87,2075,5.381,2076,5.381,2077,5.381]],["t/595",[9,1.43,112,2.188,602,3.663]],["t/597",[1,2.928,9,1.154,22,2.518,52,2.14,66,1.609,67,2.833,178,2.14,184,2.449,207,1.228,214,2.62,236,2.694,248,2.242,255,2.252,271,2.289,301,1.911,303,2.516,338,2.411,339,1.87,371,2.644,378,2.242,502,1.811,582,4.07,591,2.597,602,2.074,651,3.38,682,3.831,703,2.939,1236,3.403,1237,3.155,1243,5.563,1253,2.895,1260,5.655,1700,3.348]],["t/599",[9,1.688,22,2.393,55,2.83,68,2.813,102,2.188,112,1.579,122,1.022,255,1.361,262,1.426,303,2.043,364,3.469,365,2.526,371,4.176,375,2.65,378,2.595,602,3.727,702,2.461,748,3.18,749,3.351,750,3.033,1247,3.09,1526,4.008,1584,4.246,1678,3.47,1698,3.758,1699,3.939,1700,3.875]],["t/601",[9,1.182,112,1.839,122,1.289,262,1.318,375,3.341,378,3.272,602,3.027,748,5.05,749,4.225,750,3.824,801,4.225,807,4.886,866,6.09,1584,5.353,1699,4.967,1700,4.886,1817,5.905]],["t/604",[7,2.107,8,3.493,9,0.919,22,2.696,31,2.636,62,4.615,89,2.604,100,3.139,125,3.088,194,3.878,207,1.394,255,1.832,281,3.632,303,2.003,338,2.737,339,2.913,369,2.429,370,2.494,379,4.047,526,3.517,551,4.08,637,2.923,682,3.559]],["t/606",[9,0.853,55,2.652,100,1.649,102,3.232,112,1.48,122,1.307,127,3.887,207,1.817,255,1.239,262,1.675,303,3.447,369,3.166,370,3.25,375,3.387,376,4.383,377,6.394,379,5.402,387,2.813,682,2.96,985,4.804,1355,3.715,2078,5.29]],["t/608",[9,0.996,100,1.925,112,1.646,122,1.453,207,1.511,262,1.486,369,2.633,370,2.703,375,4.244,376,3.644,377,5.316,379,4.273,682,2.461,707,4.26,714,5.316,841,4.721,842,4.721,846,4.721,849,4.721,1619,6.176,1620,4.842,1621,4.842,1622,4.842,1623,4.842,1624,4.842,1625,4.842,1626,4.842,1627,4.842]],["t/610",[21,2.656,112,2.211,131,4.351,243,2.604,400,2.63,805,5.908,822,5.317,1489,5.061,2017,4.446,2018,4.446]],["t/612",[7,0.772,22,1.063,38,1.838,61,1.584,67,1.987,68,2.658,71,1.501,74,3.605,89,1.828,102,1.326,127,1.595,140,1.437,147,1.791,167,3.507,169,1.872,175,1.595,186,1.617,207,2.143,230,2.103,236,3.623,249,3.156,269,1.298,271,1.606,299,2.521,322,2.976,358,5.664,386,2.387,387,1.872,502,3.16,529,2.103,559,4.427,560,3.156,575,2.63,597,2.573,630,2.816,641,3.788,654,2.009,778,2.521,791,4.565,796,2.054,822,5.259,1225,2.214,1237,4.243,1246,2.312,1248,2.429,1253,2.031,1437,7.281,1603,2.928,1718,2.278,1775,3.031,2022,2.692,2079,3.156,2080,3.522,2081,3.522,2082,3.156,2083,5.492,2084,3.522,2085,3.522,2086,3.522,2087,3.522]],["t/614",[112,1.743,122,1.186,175,3.052,255,1.579,262,1.748,382,5.932,400,2.299,799,3.932,801,5.603,803,4.18,805,4.18,822,4.649,1024,5.033,1547,5.802,1548,7.532,1549,5.802,1550,5.802,1551,5.802,1552,6.041]],["t/616",[21,2.622,112,2.245,131,4.295,243,2.57,400,3.224,805,4.719,808,4.165,1489,4.996,2017,4.389,2018,4.389]],["t/618",[7,2.195,22,2.526,122,1.471,400,2.854,502,3.018,630,4.29,805,5.188,1096,3.477]],["t/620",[502,3.248,630,4.617,808,4.927,1096,3.742]],["t/622",[112,1.794,660,6.104,661,6.323,808,4.927]],["t/624",[5,3.014,7,1.383,21,2.173,44,2.47,88,4.021,112,1.257,168,2.456,243,2.83,262,1.507,291,5.195,320,6.733,337,5.128,443,3.523,463,4.609,542,4.351,608,4.351,610,4.516,1489,4.141,2017,3.638,2018,3.638,2088,6.308,2089,5.43,2090,5.653,2091,5.43]],["t/626",[21,2.691,167,2.705,168,3.042,243,2.639,259,3.267,262,1.405,269,2.878,314,3.873,320,5.592,335,5.486,339,2.909,608,5.388,610,5.592,1610,6.124]],["t/628",[9,1.294,168,3.802,259,3.356,262,1.893,315,6.137,320,5.744,608,5.534,610,5.744]],["t/630",[9,1.411,112,1.343,120,3.313,168,3.407,260,4.925,262,1.574,315,5.5,320,4.825,394,7.053,395,6.145,396,6.859,608,6.035,610,6.264,2092,7.348,2093,7.348,2094,6.74]],["t/632",[9,1.43,112,2.188,602,3.663]],["t/634",[7,0.816,9,1.267,22,1.731,52,1.586,66,1.193,67,2.1,74,4.589,92,1.204,134,2.339,135,2.397,140,1.519,166,2.017,178,1.586,184,1.816,186,1.709,207,0.911,214,1.943,237,2.25,248,1.662,255,2.098,271,2.614,303,3.149,311,1.909,338,1.787,339,1.386,354,2.523,371,1.96,378,1.662,379,2.965,466,2.779,502,1.343,526,3.143,582,3.831,591,1.925,600,2.779,602,1.537,651,2.981,682,4.022,703,2.87,813,3.5,1236,4.739,1237,4.394,1241,2.779,1243,3.823,1253,2.146,1260,3.886,1629,3,1630,3.721,1631,2.614,1699,3.886,1700,2.482]],["t/637",[9,1.688,22,2.393,55,2.83,68,2.813,102,2.188,112,1.579,122,1.022,255,1.361,262,1.426,303,2.043,364,3.469,365,2.526,371,4.176,375,2.65,378,2.595,602,3.727,702,2.461,748,3.18,749,3.351,750,3.033,1247,3.09,1526,4.008,1583,4.442,1678,3.47,1698,3.758,1699,3.939,1700,3.875]],["t/639",[9,1.153,44,2.8,112,1.81,122,1.257,262,1.286,375,3.26,378,3.192,602,2.953,748,4.973,749,4.123,750,3.732,801,4.123,807,4.768,866,5.943,1583,5.464,1699,4.846,1700,4.768,1817,5.762,2095,7.793]],["t/642",[9,1.688,22,2.393,55,2.83,68,2.813,102,2.188,112,1.579,122,1.022,255,1.361,262,1.426,303,2.043,364,3.469,365,2.526,371,4.176,375,2.65,378,2.595,602,3.727,702,2.461,748,3.18,749,3.351,750,3.033,1247,3.09,1526,4.008,1584,4.246,1678,3.47,1698,3.758,1699,3.939,1700,3.875]],["t/644",[9,1.182,112,1.839,122,1.289,262,1.318,375,3.341,378,3.272,602,3.027,748,5.05,749,4.225,750,3.824,801,4.225,807,4.886,866,6.09,1584,5.353,1699,4.967,1700,4.886,1817,5.905]],["t/647",[9,1.551,11,2.877,22,2.102,55,3.019,102,1.393,107,2.648,112,1.559,122,1.377,140,1.509,147,1.88,178,4.437,255,0.866,262,1.73,303,1.3,350,1.966,364,2.496,371,3.005,375,1.687,378,1.652,443,2.065,473,2.761,502,2.512,582,2.783,602,2.877,603,2.236,660,2.507,702,2.949,748,3.122,750,1.931,778,2.648,795,2.761,1247,1.966,1554,1.966,1557,2.294,1678,2.208,1698,2.392,1699,2.507,1700,2.466,1705,3.074,1706,2.981,1792,4.006,1793,5.398,1797,3.698,1798,2.702,1799,2.648]],["t/649",[9,0.758,112,0.936,122,1.552,178,3.427,262,1.587,371,3.596,375,4.023,602,3.321,659,2.773,748,3.736,750,4.605,751,3.434,801,2.711,807,3.134,828,3.788,1367,5.876,1554,2.499,1557,2.915,1699,4.628,1700,4.552,1715,4.552,1730,4.212,1792,4.794,1793,3.242,1798,3.434,1799,3.365,1813,5.876,1814,6.118,1815,4.421,1816,6.118,1817,3.788,1818,4.421,1819,4.421,1820,4.421,1821,4.421,1822,4.421,1823,4.421,1824,4.421]],["t/651",[9,1.389,112,2.233,1557,5.339,1799,6.163]],["t/653",[4,3.722,7,1.904,9,1.075,52,2.841,89,2.218,122,1.172,178,2.841,220,3.802,248,2.976,255,1.561,339,3.599,502,3.486,582,3.251,591,3.448,651,2.343,682,2.656,703,2.736,1250,5.225,1554,3.543,1557,4.133,1558,5.094,1776,5.54]],["t/655",[9,1.5,112,2.186,122,1.305,255,1.738,262,1.673,602,3.065,1554,3.944,1557,4.601,1685,5.21,1713,5.21,1715,4.947,1799,5.311]],["t/657",[9,1.277,112,1.929,122,1.392,262,1.424,602,3.27,801,4.566,1554,4.209,1557,4.909,1685,5.56,1715,5.279,1798,5.784,1799,5.667]],["t/659",[5,3.118,7,1.287,21,2.022,88,3.741,112,1.59,131,3.312,174,3.64,259,3.338,262,1.056,271,2.676,291,5.624,311,3.01,320,5.713,337,4.885,339,2.972,443,3.278,542,5.504,609,4.382,610,5.713,1489,3.853,2017,3.385,2018,3.385,2089,5.052,2090,5.26,2091,5.052,2096,4.601,2097,5.26]],["t/661",[262,1.671,2098,9.286]],["t/663",[262,1.671,610,6.648]],["t/665",[260,6.479,337,6.344,610,6.349,640,3.686]],["t/667",[21,2.803,112,1.961,131,4.591,243,2.748,317,5.234,685,4.325,1489,5.34,2017,4.691,2018,4.691]],["t/669",[9,0.885,37,2.677,38,3.977,65,3.276,66,2.442,89,1.826,140,2.239,167,1.9,179,2.89,184,3.717,189,2.853,208,4.194,212,2.814,214,2.864,248,2.45,252,3.956,257,3.062,289,3.2,313,3.317,340,3.468,427,3.317,617,3.602,685,4.051,1029,4.561,1097,5.166,1225,3.449,1238,6.334,1472,5.486,1474,5.486,1577,4.723,2082,4.917,2099,5.981]],["t/671",[192,5.748,685,5.415,1565,8.609,1566,8.609,1567,8.609]],["t/674",[685,4.938,2100,10.124]],["t/676",[122,1.392,347,6.947,365,3.441,685,5.148,1121,6.581,1534,7.446,2101,8.629,2102,8.629,2103,8.629]],["t/679",[7,2.049,8,3.338,9,0.861,22,2.822,31,2.469,62,4.411,89,2.488,100,3.066,125,2.893,135,2.233,166,2.893,184,2.604,194,3.706,207,1.306,255,1.751,281,3.402,303,1.877,338,2.564,339,2.784,369,2.275,370,2.336,379,4.463,551,3.821,637,2.737,651,2.628,682,3.92]],["t/681",[9,0.697,55,2.291,100,1.347,102,3.572,112,1.279,122,1.129,127,4.295,207,2.073,255,1.012,262,1.524,303,3.547,369,3.612,370,3.708,375,2.927,376,3.787,379,5.506,381,4.594,387,3.412,682,3.377,985,5.48,1355,4.507,2078,4.321]],["t/683",[9,0.803,100,1.551,112,1.654,122,1.251,207,1.741,262,1.28,369,3.033,370,3.113,375,3.786,376,4.198,379,3.681,381,5.093,682,2.835,707,4.907,713,3.805,714,4.285,841,5.438,842,3.805,846,3.805,849,5.438,855,4.285,1620,3.902,1621,3.902,1622,3.902,1623,3.902,1624,3.902,1625,3.902,1626,3.902,1627,3.902,1639,4.977,1640,4.977,1641,4.977,1642,4.977,1643,4.977,1644,4.977,1645,4.977,1646,4.977,1647,4.977,1648,4.977,1649,4.977,1650,4.977]],["t/686",[7,1.66,9,0.877,22,2.844,57,3.371,61,2.444,66,2.426,102,3.28,166,2.946,207,1.33,226,4.679,255,1.773,271,3.452,301,2.07,302,2.965,303,1.911,309,3.246,339,2.025,365,2.363,369,2.317,370,4.122,371,2.864,378,2.428,379,2.812,387,2.89,411,3.892,616,4.969,637,4.467,651,1.911,833,4.679,1577,4.679]],["t/689",[9,1.153,66,2.291,102,2.692,112,1.81,122,1.598,255,2.128,262,1.635,301,2.722,303,3.194,370,3.976,371,3.766,375,3.26,376,4.218,378,3.192,379,3.698]],["t/691",[100,2.403,112,1.536,122,1.356,262,1.387,301,3.627,302,3.019,365,3.351,367,5.141,370,4.169,371,4.061,378,3.443,1263,7.251,1264,7.251]],["t/693",[9,1.017,109,3.354,122,1.11,207,2.05,262,1.135,301,2.402,368,3.56,369,3.571,370,3.666,375,2.877,376,3.722,378,2.817,379,3.264,381,4.516,682,2.514,707,4.351,713,4.821,841,4.821,842,4.821,846,4.821,849,4.821,1620,4.945,1621,4.945,1622,4.945,1623,4.945,1624,4.945,1625,4.945,1626,4.945,1627,4.945]],["t/695",[5,3.03,7,1.398,21,2.197,32,3.954,88,4.064,112,1.27,163,4.404,207,1.56,243,2.154,259,3.529,262,1.147,291,5.232,337,5.788,339,3.522,473,4.761,607,3.455,2017,3.677,2018,3.677,2089,5.489,2091,5.489,2096,4.999,2097,5.714]],["t/697",[7,1.53,21,2.405,29,2.848,37,3.405,66,2.867,67,3.939,89,2.323,120,3.388,186,3.206,189,2.614,207,1.708,243,2.358,259,4.131,262,1.256,266,4.387,314,3.461,335,4.902,465,3.711,798,5.099]],["t/699",[102,2.725,122,1.611,207,2.583,259,4.555,262,1.648,301,3.486,364,4.007,613,6.016,614,5.287]],["t/701",[102,3.106,122,1.451,207,2.018,259,3.45,260,6.026,262,1.484,301,3.14,392,6.304,613,6.857,614,6.026]],["t/703",[5,2.377,21,2.556,112,2.122,131,4.187,243,2.506,259,3.103,311,3.804,542,5.117,608,6.415,611,5.816,1489,4.87,2017,4.279,2018,4.279,2096,5.816]],["t/705",[7,2.213,22,2.562,122,1.493,207,2.076,259,3.549,608,5.852,1096,3.527]],["t/707",[189,3.224,207,2.106,259,3.601,465,4.577,611,6.749,612,7.157,1096,3.579]],["t/709",[112,1.794,611,7.058,612,7.485,1165,8.468]],["t/711",[5,3.105,7,1.274,21,2.002,88,3.704,112,1.797,163,3.033,243,1.963,259,3.315,291,5.595,320,5.675,337,4.852,339,3.36,443,3.245,542,5.467,608,5.467,609,6.736,611,4.556,2017,3.351,2018,3.351,2089,5.002,2090,5.208,2091,5.002,2096,4.556,2097,5.208]],["t/713",[7,1.478,9,1.087,21,2.322,29,2.751,37,3.288,66,2.804,67,3.804,89,2.244,120,3.313,186,3.096,189,2.524,207,1.649,243,2.277,259,4.063,266,4.237,314,3.342,315,4.237,465,3.584,611,5.284,612,5.603,617,4.425,798,4.925]],["t/715",[207,2.17,259,3.709,608,6.116,611,6.952,612,7.372]],["t/717",[112,1.767,392,6.778,608,6.116,611,6.952,612,7.372]],["t/719",[21,3.01,116,6.383,131,5.798,2017,5.039,2018,5.039]],["t/721",[5,2.171,27,2.588,40,3.68,44,1.387,62,2.091,65,2.116,66,1.768,89,2.256,116,6.415,120,3.139,134,2.227,147,1.801,150,3.603,164,2.856,176,2.363,179,2.906,185,2.645,186,3.112,188,4.12,189,1.327,190,2.488,192,4.678,199,2.777,213,2.856,236,1.902,237,2.142,259,1.482,269,1.305,295,4.519,311,1.817,322,1.92,339,1.32,347,4.876,349,2.227,419,4.12,422,1.786,441,2.488,479,2.536,482,5.633,491,2.588,501,3.468,519,2.856,582,1.728,641,2.444,754,2.945,828,2.856,830,3.175,1036,3.175,1187,3.332,1354,2.363,1692,3.05,1718,2.291,2104,5.517,2105,6.015,2106,7.387,2107,3.543,2108,3.543,2109,3.543,2110,3.175,2111,3.543,2112,3.862,2113,3.862,2114,3.543,2115,3.862,2116,3.543,2117,3.332,2118,3.332]],["t/723",[116,6.578,1522,7.485,1523,7.485,1524,7.485]],["t/725",[92,2.341,98,3.744,116,5.287,120,2.74,271,3.3,346,5.181,347,7.092,419,5.403,491,5.287,547,6.016,772,6.016,807,4.826,1440,6.485,2119,7.236,2120,7.236]],["t/727",[21,2.882,112,1.667,259,3.499,262,1.505,667,5.84,694,4.672,2017,4.825,2018,4.825]],["t/729",[7,1.69,21,2.656,89,2.566,127,3.491,135,3.225,140,3.146,248,3.443,257,2.697,259,4.324,262,1.387,694,4.305,1097,5.226,1288,6.909]],["t/731",[259,3.709,262,1.865,694,5.788]],["t/733",[27,5.489,71,3.203,98,3.887,112,1.497,240,5.893,244,3.527,259,3.921,262,1.352,528,5.89,640,3.123,667,4.382,694,4.196,696,6.246,1490,6.733,2121,7.513]],["t/735",[21,2.882,112,1.667,131,4.721,420,5.671,469,5.274,2017,4.825,2018,4.825,2122,9.119]],["t/737",[3,2.772,22,1.925,37,3.111,66,2.043,92,2.062,102,2.401,122,1.484,175,2.887,189,3.541,196,4.323,207,1.56,208,4.874,270,4.761,296,5.232,322,3.455,339,2.375,364,3.692,419,6.3,453,4.064,469,3.359,494,4.323,563,4.999,796,3.719,1710,6.04]],["t/739",[420,6.296,471,7.994]],["t/741",[66,2.68,122,1.471,364,4.381,420,5.671,421,6.246,494,5.671,1710,7.167]],["t/743",[52,3.898,469,4.816,2123,8.194]],["t/745",[21,2.27,63,3.44,112,1.914,122,1.159,167,2.282,207,1.612,243,2.226,255,1.544,267,4.206,302,2.581,319,3.888,400,2.248,401,4.718,651,2.317,803,4.087,805,4.087,806,3.606,808,3.606,818,4.034,827,4.2,1489,4.326,1543,5.037,1545,4.92,2017,3.801,2018,3.801]],["t/747",[3,2.027,7,1.022,9,1.418,11,1.926,22,2.049,29,1.903,37,2.275,39,2.819,66,2.175,67,2.631,89,1.552,120,2.57,122,1.77,135,1.95,167,1.615,184,2.275,186,4.037,189,1.746,255,1.092,266,2.931,267,3.311,269,3.707,302,1.826,311,2.391,314,2.312,339,2.528,465,2.479,640,4.182,680,3.061,798,3.407,799,2.72,812,2.892,1545,3.482,1554,2.479,2124,5.083,2125,5.083]],["t/749",[9,1.183,31,2.404,40,3.466,44,2.035,122,1.713,125,2.816,140,2.121,166,2.816,167,2.54,189,2.747,207,1.795,220,4.184,236,2.789,262,1.32,269,1.915,346,3.72,347,5.887,358,4.744,400,2.502,539,4.888,540,3.88,607,2.816,651,2.579,680,4.816,827,4.676,1024,5.477,1096,3.049,1197,5.197,1280,4.657,2126,5.197,2127,5.665,2128,5.665]],["t/751",[21,2.765,112,2.182,131,4.528,243,2.71,400,3.33,827,5.114,2017,4.628,2018,4.628]],["t/753",[7,1.495,9,1.767,22,2.059,37,3.326,55,2.434,92,2.205,98,3.528,255,1.597,269,3.805,302,2.67,335,4.789,640,4.06,666,3.467,680,4.476,973,4.881]],["t/755",[9,1.537,37,3.761,55,2.752,92,2.494,122,1.819,255,1.806,269,3.51,400,2.63,640,3.205,666,3.92,827,4.914]],["t/757",[86,2.326,100,2.344,112,1.727,122,1.525,167,1.865,168,3.653,243,1.819,250,2.51,252,2.253,253,2.51,254,3.433,255,2.395,257,1.884,262,1.776,317,2.864,318,3.433,319,3.178,365,2.342,400,2.566,429,3.592,633,5.066,685,2.864,688,3.936,691,3.592,827,4.795,1508,4.478,2129,9.449]],["t/759",[21,2.842,100,2.57,122,1.451,131,4.655,365,3.585,956,4.514,960,6.648,1489,5.415,2017,4.757,2018,4.757]],["t/761",[3,2.407,7,1.681,9,0.893,18,4.604,22,1.672,32,4.756,33,3.126,69,4.473,89,2.553,92,3.072,100,2.742,120,2.097,122,0.974,127,2.508,135,2.316,173,2.769,186,2.544,194,2.746,243,1.871,262,0.996,269,2.041,309,3.307,432,4.046,591,2.865,648,4.046,649,3.89,666,4.473,670,4.604,672,4.233,947,3.89,948,5.862,949,5.209,950,5.538]],["t/763",[3,3.378,7,1.237,9,0.91,22,2.346,52,2.406,58,2.92,69,3.292,92,3.097,100,3.129,120,2.137,122,1.766,135,2.361,194,2.798,309,3.37,338,2.711,339,2.102,367,3.764,373,4.425,429,3.764,440,3.37,640,2.346,666,3.951,670,4.692,685,3.001,688,4.124,952,3.764,964,4.314,965,4.859,966,4.692]],["t/765",[100,2.849,112,2.102]],["t/767",[55,2.945,89,2.746,92,2.668,100,3.094,194,4.09,429,6.621,965,7.1,966,6.857]],["t/769",[100,2.894,2130,10.124]],["t/771",[52,3.898,469,4.816,2123,8.194]],["t/773",[112,2.102,694,5.106]],["t/775",[5,2.065,7,2.084,33,3.638,47,4.615,96,5.053,100,2.009,118,5.359,184,3.145,229,3.6,244,3.026,339,3.764,387,3.427,414,3.804,416,5.777,694,5.644,754,5.359,947,4.527,1096,3.532,1124,5.777,2131,7.027,2132,7.027]],["t/777",[92,2.912,120,3.409,694,5.028,956,4.927]],["t/779",[7,1.69,22,2.328,102,2.903,240,5.988,243,2.604,253,3.593,257,2.697,301,2.935,526,3.467,645,6.636,694,4.305,696,6.409,1513,6.044,2133,8.404]],["t/781",[102,3.497,694,5.186]],["t/784",[29,2.631,86,2.784,92,2.085,100,2.009,112,1.284,122,1.134,189,2.414,257,2.255,262,1.16,269,3.131,310,3.998,340,2.554,371,3.396,382,4.37,443,3.6,654,4.847,694,3.6,956,4.65,2036,6.063,2037,6.063,2038,6.063,2040,6.063,2043,6.063,2134,9.263,2135,7.027,2136,7.027]],["t/786",[9,1.167,112,1.442,240,5.756,257,3.203,259,3.027,262,1.648,645,6.229,667,4.221,694,4.041,696,6.016,993,4.826,1020,5.673,1108,6.806,1109,6.806,2121,9.157,2137,7.889]],["t/788",[112,2.233,243,2.908,400,2.937,818,5.27]],["t/790",[7,1.834,22,2.526,122,1.471,269,3.082,302,3.276,640,3.477,701,5.332,702,3.543,2138,7.497]],["t/792",[102,3.339,701,5.653,702,3.756,818,5.429,1096,3.686]],["t/794",[112,1.794,818,5.511,1035,8.069,2139,8.468]],["t/797",[9,1.763,22,3.05,255,1.716,338,3.519,339,2.729,551,5.245,552,4.375,616,4.179,617,4.81,702,4.279,1097,4.967]],["t/799",[9,1.79,22,2.328,55,2.752,112,1.536,122,1.676,255,1.806,262,1.714,702,3.265,748,4.219]],["t/801",[9,1.197,112,1.478,122,1.636,262,1.673,700,5.98,702,3.142,716,5.21,717,5.21,718,5.117,719,5.539,720,5.816,748,5.561,1583,5.67,2140,8.087]],["t/803",[112,2.102,257,3.198]],["t/805",[7,2.007,22,2.185,62,4.27,66,2.934,122,1.273,184,4.467,189,3.429,208,6.999,243,2.444,257,3.203,317,3.847,319,4.27,339,2.695,1473,5.287]],["t/807",[192,5.748,257,3.562,667,6.326]],["t/809",[22,2.059,71,2.907,122,1.551,166,3.695,189,2.553,212,3.497,257,3.741,347,6.583,652,4.789,691,6.515,772,5.668,1021,4.703,1500,7.9,2141,7.433]],["t/811",[21,2.924,112,1.691,131,4.789,651,3.55,1096,3.527,2017,4.894,2018,4.894]],["t/813",[7,1.974,1096,4.346,2142,9.815]],["t/815",[1096,4.424]],["t/817",[55,3.347,112,2.132,175,3.402,189,2.814,465,3.994,651,2.641,1096,3.897,2143,8.19,2144,8.19,2145,8.19,2146,8.19,2147,8.19]],["t/819",[667,5.503]],["t/821",[7,1.726,9,0.928,11,2.377,22,1.737,32,4.883,52,2.453,55,2.054,69,4.593,89,3.213,122,1.698,127,2.606,135,2.407,140,2.348,168,2.241,243,1.944,248,3.516,257,3.535,259,3.754,262,1.035,338,2.764,432,4.204,477,4.12,640,2.392,947,4.041,1490,5.157]],["t/823",[112,2.233,243,2.908,400,2.937,401,6.163]],["t/825",[7,1.759,22,2.422,62,4.735,257,3.415,269,2.957,314,3.978,640,3.335,654,4.577,1096,4.058,2138,7.191]],["t/827",[122,1.676,207,2.331,257,2.697,267,4.648,314,3.822,400,2.63,401,5.519,654,4.398,1096,3.96,1543,5.892,2148,7.709]],["t/829",[112,1.81,122,1.598,189,2.677,207,2.223,212,3.666,257,3.178,314,4.505,400,3.1,401,6.505,652,5.021,869,6.407,2148,9.086,2149,7.793]],["t/831",[112,1.822,243,3.088,317,4.861]],["t/833",[10,4.517,11,2.499,21,2.806,52,2.579,66,3.157,89,2.014,119,4.742,127,2.739,135,3.407,140,3.324,167,2.095,168,2.356,243,2.043,248,2.701,252,4.121,317,4.331,319,3.57,338,2.905,339,3.034,637,3.102,640,2.515,685,3.216,1226,4.42,1449,5.421,1560,6.049]],["t/835",[112,1.822,243,3.088,782,5.828]],["t/837",[21,1.715,22,1.503,52,2.122,61,2.238,88,3.173,126,3.902,150,2.646,189,2.664,214,2.598,218,3.902,253,3.869,259,2.082,301,1.895,310,4.412,311,2.553,339,1.854,387,2.646,422,4.831,438,3.563,465,3.782,526,2.238,591,2.575,642,6.248,651,2.501,655,6.124,781,6.692,782,3.173,983,3.433,1096,2.957,1108,4.682,1109,4.682,1111,7.441,1411,4.461,2150,4.977,2151,5.426,2152,5.426,2153,5.426,2154,5.426]],["t/839",[112,2.084,192,5.465,782,6.172,783,6.173,1096,4.348]],["t/842",[112,2.047,757,6.849,759,6.136,782,5.569,2155,9.524]],["t/844",[65,5.426,67,4.034,71,3.047,112,1.81,253,3.331,347,6.7,422,3.604,432,5.223,510,4.218,759,5.021,782,4.557,1023,6.407,1121,5.943,1344,6.407,1534,6.724,1535,7.148]],["t/846",[9,0.893,61,3.449,66,2.457,71,2.361,91,5.209,112,1.753,120,3.595,167,2.656,230,3.307,243,1.871,252,3.208,257,3.077,262,1.38,317,4.078,319,4.525,325,5.538,334,5.538,691,3.693,759,5.386,782,5.608,834,7.654,2156,6.037,2157,6.037,2158,6.037,2159,6.037]],["t/848",[112,1.822,365,3.974,960,7.37]],["t/850",[5,1.471,12,2.124,22,1.386,66,1.471,102,3.65,112,0.915,120,3.003,140,1.873,186,3.642,220,2.618,271,2.093,289,2.677,302,2.628,303,2.788,310,2.847,339,1.71,340,2.658,369,4.268,440,4.007,443,2.564,548,3.951,588,3.061,682,1.829,796,2.677,834,3.7,956,2.512,961,5.776,1099,3.427,1225,2.885,1235,3.224,1252,6.311,1253,5.353,1254,4.59,1255,4.59,1256,6.709,1257,4.317,1260,5.376,1722,4.114]],["t/852",[89,2.785,108,5.258,369,3.566,960,6.743,1260,6.787,1353,8.365,1848,7.497,2160,9.119]],["t/854",[100,2.403,109,4.099,122,1.356,207,1.886,262,1.387,301,2.935,367,5.141,368,4.351,369,3.286,370,3.373,371,4.061,960,6.214,1165,7.251,2161,8.404,2162,8.404]],["t/857",[7,1.649,9,0.869,22,2.833,57,3.341,61,2.422,66,2.41,102,3.264,109,2.864,166,2.919,207,1.318,226,4.637,255,1.762,271,3.43,301,2.051,302,2.946,303,1.894,309,3.216,339,2.006,365,2.342,369,4,370,2.357,379,2.787,387,2.864,411,3.856,616,4.945,637,4.445,651,1.894,712,3.856,833,4.637,1577,4.637,1618,4.223]],["t/860",[3,3.266,9,1.212,55,2.682,109,3.994,112,2.036,262,1.687,301,3.569,303,2.641,369,3.997,712,5.378,985,4.859,1618,5.89]],["t/862",[3,3.308,109,4.046,112,1.883,262,1.7,301,3.598,302,2.98,303,2.675,365,3.308,369,4.029,712,5.448,985,4.921,1618,5.966]],["t/865",[9,1.017,109,3.354,122,1.11,207,2.05,262,1.135,301,2.402,368,3.56,369,3.571,370,3.666,375,2.877,376,3.722,378,2.817,379,3.264,381,4.516,682,2.514,707,4.351,713,4.821,841,4.821,842,4.821,846,4.821,849,4.821,1620,4.945,1621,4.945,1622,4.945,1623,4.945,1624,4.945,1625,4.945,1626,4.945,1627,4.945]],["t/867",[112,1.822,243,3.088,319,5.395]],["t/869",[7,1.586,11,2.989,21,2.493,122,1.273,167,2.506,168,2.818,243,2.444,252,3.027,257,3.514,262,1.302,319,4.27,335,5.082,339,2.695,364,3.167,400,2.469,1561,7.236,1610,5.673,2163,7.889]],["t/871",[9,1.277,167,2.741,168,3.77,257,3.387,262,1.742,269,2.917,319,4.671,356,5.46,400,2.7,640,3.29]],["t/873",[9,1.509,112,1.243,120,3.542,168,3.643,253,2.909,254,3.978,255,1.462,257,2.183,262,1.683,269,3.447,319,3.683,393,4.098,400,3.191,494,4.231,640,3.889,691,4.162,2164,6.804,2165,6.804,2166,6.804]],["t/875",[9,1.615,21,2.882,112,1.667,131,4.721,750,4.367,1489,5.492,2017,4.825,2018,4.825]],["t/877",[7,1.53,9,1.126,61,3.138,92,2.258,102,2.628,161,3.489,189,2.614,255,2.096,271,4.081,339,2.6,465,3.711,526,3.138,538,5.472,551,4.997,602,2.883,617,4.582,1247,3.711,1374,6.565,1678,5.344,2167,7.609]],["t/879",[9,1.562,112,1.929,262,1.742,602,4,749,4.566,750,4.132,1247,4.209,1678,4.727,1698,5.119]],["t/881",[9,1.33,112,1.978,262,1.484,602,3.407,749,5.726,750,4.306,807,5.501,2168,8.991]],["t/884",[7,2.105,9,1.26,100,2.434,101,6.124,102,3.916,105,5.832,127,3.537,309,4.664,311,4.925,1226,5.707]],["t/886",[5,2.47,7,1.69,8,4.254,52,3.286,96,6.044,163,4.024,230,4.603,311,4.886,618,6.044,678,4.719,1998,7.251,2027,7.709,2169,8.404]],["t/888",[7,1.461,112,2.04,127,3.018,243,2.934,262,1.842,311,4.454,316,7.784,344,3.684,526,2.997,948,5.094,1508,7.22,1521,5.973,2170,6.664,2171,9.468,2172,8.685]],["t/890",[7,1.354,101,4.842,102,3.11,105,4.611,112,1.646,122,1.453,243,2.79,255,1.935,262,1.788,311,4.236,316,7.402,319,4.874,344,3.414,400,2.818,1508,6.866,1521,5.535,2170,6.176,2173,9.004,2174,9.004]],["t/892",[7,1.445,101,5.166,102,3.246,105,4.92,112,2.031,127,2.984,243,2.912,262,1.834,311,4.422,316,7.727,344,3.643,1508,7.167,1521,5.906,2172,8.621,2175,9.399]],["t/894",[243,3.187]],["t/896",[9,0.956,52,2.527,66,1.899,167,2.782,172,2.762,184,2.892,242,4.778,243,3.557,248,2.647,252,2.479,269,2.184,301,3.059,338,2.847,339,2.208,510,3.498,543,3.583,617,3.892,637,3.04,640,2.464,785,5.103,788,5.752,972,4.019,983,4.088,1235,4.163,1377,5.103,1392,5.313,1509,5.575,1510,5.575,1511,7.557]],["t/898",[112,1.822,195,6.545,469,4.816]],["t/900",[21,2.556,89,2.469,92,2.4,140,3.028,188,5.539,189,3.805,190,6.533,195,5.311,196,6.306,296,4.601,364,3.246,407,5.42,453,4.729,2176,5.539]],["t/902",[195,6.648,471,7.994]],["t/904",[52,3.898,469,4.816,2123,8.194]],["t/906",[112,1.643,163,4.306,203,5.415,461,6.857,462,8.248,463,6.026,464,7.253,469,4.345,594,6.159]],["t/908",[1,4.031,7,0.648,21,1.019,22,1.816,89,0.984,92,1.546,98,1.53,100,1.49,102,1.8,103,2.669,120,3.234,122,1.428,184,3.701,189,3.532,190,2.077,194,1.466,207,2.175,208,4.599,209,2.458,210,3.653,214,3.607,220,1.687,229,1.651,230,1.766,236,1.587,271,3.151,296,5.297,322,2.59,339,1.101,344,1.635,362,2.16,364,2.633,407,2.16,453,3.047,464,3.492,466,4.492,467,6.45,468,1.941,469,1.558,476,2.545,484,3.974,494,3.24,496,4.115,502,1.067,504,3.653,543,1.787,563,3.747,574,2.458,591,1.53,594,3.569,598,2.26,949,2.781,964,2.26,983,2.039,1349,2.957,1718,1.912,1774,2.781,1889,4.78,1961,2.957,2177,5.211]],["t/910",[464,6.785,472,7.994]],["t/912",[66,3.181,89,3.305,122,1.746,364,3.609,464,7.253,494,5.592]],["t/914",[52,3.898,469,4.816,2123,8.194]],["t/916",[112,2.296,243,2.826,400,2.854,1557,5.188]],["t/918",[4,4.092,7,1.606,9,1.182,22,2.786,122,1.289,166,3.97,309,4.375,339,2.729,400,2.499,502,3.329,582,3.574,616,4.179,973,5.245,1250,5.744,1554,3.895,1558,5.6,1751,5.353]],["t/920",[4,3.025,7,0.758,9,1.517,22,2.015,31,3.088,38,1.806,52,1.475,55,2.383,58,1.79,68,1.675,89,2.222,112,1.81,122,0.953,135,1.447,139,2.237,166,1.875,178,3.495,248,1.545,255,1.769,262,0.974,271,1.578,303,1.904,338,1.662,339,2.486,375,2.47,443,1.932,448,2.644,502,2.408,540,2.583,582,2.642,585,2.583,591,1.79,602,3.12,603,3.274,637,1.774,651,1.216,682,1.379,703,2.74,750,2.827,1247,2.88,1250,2.712,1467,3.254,1554,1.839,1557,3.359,1558,2.644,1678,3.234,1685,3.804,1698,3.503,1713,3.804,1715,3.612,1751,2.528,1792,2.43,1798,3.957,1799,3.877,1806,3.101]],["t/922",[55,1.923,58,2.787,66,2.41,71,2.296,102,2.833,112,2.037,122,1.525,220,3.073,262,1.56,353,3.936,400,2.957,502,2.714,526,2.422,582,2.628,616,3.073,659,3.178,660,6.361,806,2.948,808,2.948,809,4.827,1096,2.239,1554,4.609,1557,4.665,1558,5.75,2178,5.386,2179,5.872,2180,5.872]],["t/925",[21,2.377,39,4.17,89,2.956,92,2.231,102,2.597,253,4.139,257,2.413,269,2.542,339,2.569,526,3.102,637,3.538,721,4.845,723,4.845,1020,5.408,1351,4.6,1352,6.898,1365,6.182,1744,5.56,1837,6.488,2181,6.898,2182,7.52,2183,7.52]],["t/927",[9,1.294,102,3.021,112,1.599,122,1.411,250,4.55,262,1.757,386,5.44,721,5.635,723,5.635,1884,6.907]],["t/929",[9,0.966,112,1.612,122,1.053,175,3.663,250,2.79,262,1.077,518,2.945,659,3.533,721,4.205,722,4.375,723,4.205,724,4.13,725,4.694,726,4.694,727,4.694,728,4.694,729,4.694,730,4.694,731,4.694,732,4.694,733,4.694,734,4.694,735,4.13,736,4.694,737,4.694,738,4.694,739,4.694,740,4.694,741,4.694,742,4.694,743,4.694,744,4.694,745,4.694,1559,3.764,1742,4.827]],["t/931",[9,1.475,112,1.822,1836,7.601]],["t/933",[66,2.934,236,3.884,243,2.444,255,1.695,299,5.181,436,6.806,480,5.673,502,3.624,592,6.229,630,4.696,1029,6.016,1253,4.174,1810,6.806,1836,6.016,2184,7.889,2185,7.889]],["t/935",[3,2.201,7,1.11,11,2.092,22,1.529,29,2.066,66,1.622,80,2.92,92,2.329,102,2.712,177,3.556,178,2.158,186,2.325,207,1.239,229,2.828,255,1.186,295,3.377,440,3.023,502,3.72,512,4.081,526,2.277,552,3.023,582,2.47,629,4.022,630,4.681,682,2.018,1021,3.492,1246,3.324,1248,4.967,1253,4.153,1684,3.78,1702,4.762,1713,5.057,1751,3.699,1836,6.967,2079,4.538,2186,5.519,2187,4.762,2188,5.063]],["t/937",[9,1.63,55,3.034,112,1.284,122,1.134,255,1.51,262,1.529,303,2.266,375,2.939,502,2.325,602,3.51,630,3.306,660,4.37,702,2.73,748,3.528,749,3.718,750,3.365,1247,3.427,1253,3.718,1583,4.927,1678,3.849,1684,4.813,1698,4.169,1713,4.527,1836,5.359]],["t/939",[9,1.522]],["t/941",[7,1.863,9,1.74,32,5.27,69,4.956,89,2.829,90,4.615,92,2.749,95,3.76,97,5.549,120,2.441,127,2.919,135,2.696,243,2.177,262,1.16,365,2.802,432,4.709,601,6.063,672,4.927,948,4.927,2189,6.063]],["t/943",[9,1.707,55,2.904,122,1.862,262,1.771,339,3.03,1582,7.651]],["t/945",[3,3.308,9,1.227,81,6.82,117,5.249,122,1.339,135,3.183,250,3.546,255,1.782,375,3.47,414,4.49,702,3.223,747,4.783,1357,6.134,1554,4.046,1583,5.816,1584,5.56]],["t/947",[63,4.494,112,2.233,243,2.908,400,2.937]],["t/949",[7,1.735,22,2.39,62,4.671,63,5.055,269,2.917,313,4.785,314,3.925,340,3.136,640,3.29,1096,4.025,2138,7.095]],["t/951",[63,4.855,122,1.636,207,1.815,267,4.538,314,3.678,340,2.939,387,3.944,400,2.531,654,4.232,694,4.143,1096,3.866,1543,5.67,1545,5.539,1546,6.167]],["t/953",[63,4.629,122,1.56,314,4.397,400,3.025,659,5.233]],["t/955",[9,1.475,112,1.822,989,7.168]],["t/957",[7,1.53,12,3.229,66,2.237,189,2.614,255,2.314,271,3.183,387,4.758,407,5.099,440,4.168,502,2.518,543,4.219,602,2.883,678,4.273,747,4.387,989,7.015,992,5.472,1033,4.902,1721,6.255,1948,6.255]],["t/959",[3,3.636,11,3.456,66,2.68,89,2.785,310,5.188,602,4.136,747,5.258,1948,7.497]],["t/961",[7,1.261,9,1.723,11,2.377,22,2.377,55,2.811,112,1.146,122,1.012,169,3.059,212,2.951,255,1.348,262,1.417,303,2.023,365,2.501,375,2.624,502,2.076,518,2.83,602,3.708,702,2.437,747,3.617,748,3.149,749,3.319,750,3.004,956,3.149,989,4.511,992,4.511,993,3.838,1247,3.059,1253,3.319,1559,3.617,1678,3.436]],["t/963",[9,1.243,112,1.536,122,1.356,262,1.387,375,3.516,746,5.756,747,4.846,748,4.219,749,4.446,750,4.024,751,5.633,989,6.044,990,6.909,2190,8.404,2191,8.404]],["t/965",[112,2.102,262,1.645]],["t/967",[52,3.516,71,3.516,168,3.212,229,4.606,262,1.786,307,7.758,383,7.392,621,7.392,2098,8.248]],["t/969",[262,1.915]],["t/971",[168,3.77,240,4.976,259,4.05,262,1.742,640,4.025,667,5.648,1500,7.095,2192,8.629]],["t/973",[112,2.233,243,2.908,400,2.937,805,5.339]],["t/975",[7,1.915,22,1.65,39,2.116,57,2.171,62,2.066,66,1.752,84,3.535,89,3.038,122,0.616,127,1.585,135,2.286,140,3.102,166,1.897,167,3.27,172,3.842,173,2.733,184,1.708,207,1.859,214,1.827,239,2.459,289,2.042,302,2.141,339,1.304,358,2.264,387,2.906,400,1.194,502,3.152,524,2.822,629,3.756,630,3.449,701,2.231,702,1.483,783,2.066,793,2.373,796,2.042,799,2.042,806,3.68,808,3.68,812,2.171,818,3.346,822,2.415,948,2.676,993,5.068,1096,3.427,1124,3.137,1437,2.91,1629,4.406,2193,3.816,2194,3.816,2195,3.816]],["t/977",[7,1.647,66,2.407,89,2.501,95,4.382,127,3.402,135,3.142,140,3.826,167,3.246,173,3.756,207,2.294,783,4.433,793,5.093,993,5.01,1096,3.123]],["t/979",[7,1.992,21,2.463,66,2.291,89,2.38,95,4.17,127,3.237,135,2.99,140,3.708,167,3.146,173,3.574,207,2.223,378,3.192,400,2.439,793,4.846,803,4.434,993,4.768,1096,2.972]],["t/981",[7,1.823,66,2.665,89,2.769,95,3.64,127,2.826,135,2.611,140,3.395,167,3.455,172,2.909,173,3.12,344,4.598,502,3.375,629,5.225,806,5.46,993,5.547,1096,3.457]],["t/983",[7,1.823,66,2.665,89,2.769,95,3.64,127,2.826,135,2.611,140,3.395,167,3.455,172,2.909,173,3.12,344,4.598,502,3.375,630,4.798,808,5.46,993,5.547,1096,3.457]],["t/985",[3,2.385,7,1.919,66,2.805,86,2.369,89,1.826,122,0.965,127,2.484,135,2.295,140,3.11,167,3.031,172,2.557,173,4.376,214,2.864,269,2.808,358,3.548,640,3.167,652,3.853,701,5.58,702,3.708,812,4.726,818,5.359,993,3.659,1096,2.281,1473,4.009,2138,6.829,2196,5.981,2197,5.981]],["t/987",[7,0.777,22,1.07,38,1.849,61,1.593,67,1.999,68,2.671,71,1.51,74,3.622,89,1.837,102,1.334,127,1.604,147,1.801,167,3.512,169,1.884,175,1.604,186,1.627,207,2.148,230,2.116,236,3.637,249,3.175,269,1.305,271,1.616,299,2.536,322,2.99,358,5.678,386,2.402,387,1.884,502,3.167,529,2.116,559,4.447,560,3.175,575,2.645,597,2.588,630,2.83,641,3.805,654,2.021,778,2.536,791,4.587,796,2.066,822,5.276,1225,2.227,1237,4.26,1246,2.326,1248,2.444,1253,2.043,1437,7.299,1603,2.945,1718,2.291,1775,3.05,2022,2.708,2080,3.543,2081,3.543,2082,4.945,2083,5.517,2084,3.543,2085,3.543,2086,3.543,2087,3.543]],["t/989",[68,3.378,166,3.782,167,3.608,175,3.16,207,2.189,350,3.711,358,5.787,436,6.565,543,4.219,641,6.172,678,4.273,822,4.814,1225,4.387,1437,7.439,2079,6.255,2198,7.609]],["t/991",[68,3.832,95,4.617,167,3.353,207,1.937,641,5.46,791,6.581,822,5.46,1225,4.976,2082,8.678,2199,8.629,2200,8.629]],["t/994",[112,1.935,122,1.028,147,1.941,175,3.216,207,1.43,255,0.894,262,1.544,302,1.495,303,2.055,350,3.108,382,5.396,400,1.994,661,4.105,759,4.105,793,3.963,797,4.271,799,2.227,801,4.097,803,3.625,805,3.625,806,4.356,808,4.356,812,2.368,814,3.174,815,3.174,818,3.578,822,2.633,870,4.271,1024,2.851,1039,3.077,1291,5.239,1344,6.366,1409,7.133,1547,3.286,1548,5.032,1549,3.286,1550,3.286,1551,3.286,1552,3.422,1553,5.845,1596,5.239,2201,6.372,2202,5.845,2203,6.372]],["t/996",[9,1.475,112,1.822,1559,5.747]],["t/998",[9,1.312,11,3.36,112,1.621,169,5.234,175,3.683,212,4.172,313,4.917,340,3.223,518,4,956,4.452]],["t/1000",[9,1.707,102,3.063,112,1.621,122,1.732,262,1.771,518,4,1559,5.113]],["t/1002",[9,1.349,112,1.667,122,1.471,262,1.505,518,4.114,659,4.936,747,5.258,1559,5.258,2204,9.119]],["t/1005",[4,4.78,9,1.381,21,2.245,22,1.968,98,3.372,117,4.495,131,3.678,135,2.726,255,2.239,364,2.852,502,3.088,552,3.892,582,4.663,650,4.042,1684,4.866,1685,4.577,1713,4.577,1714,5.109,1715,4.346,1716,5.253,1718,4.215,2181,6.517]],["t/1007",[4,3.992,9,1.611,112,1.81,122,1.598,131,4.034,255,1.674,262,1.635,364,3.128,502,2.579,582,3.488,1684,5.338,1685,5.021,1713,5.021,1714,5.604,1715,4.768,1716,5.762]],["t/1009",[9,1.369,112,1.691,122,1.493,262,1.527,1584,6.2,1684,6.336,1714,6.652,2205,9.25]],["t/1011",[112,2.233,243,2.908,400,2.937,1545,6.428]],["t/1013",[21,1.963,37,2.78,66,2.506,74,6.31,112,1.135,169,3.03,186,2.617,225,6.502,243,2.642,252,2.384,269,2.1,340,4.222,408,4.593,443,3.183,453,3.632,501,3.582,694,3.183,778,4.08,1545,4.255,1546,7.991,1609,5.36,2206,6.212,2207,5.698,2208,6.212,2209,6.212,2210,6.212,2211,6.212]],["t/1015",[1096,3.86,1545,6.934]],["t/1017",[112,1.741,1545,7.671,2207,10.273,2212,9.524]],["t/1019",[112,2.233,243,2.908,400,2.937,1556,7.716]],["t/1021",[7,2.158,22,2.456,122,1.431,127,3.683,135,3.402,178,3.468,207,1.99,400,2.775,1554,4.325,2213,8.867]],["t/1023",[207,2.536,1096,4.308,1556,7.948]],["t/1025",[1556,8.194,2214,9.142,2215,9.967]],["t/1027",[112,2.233,207,2.106,243,2.908,400,2.937]],["t/1029",[5,2.237,7,2.361,10,5.211,22,2.982,57,4.329,122,1.228,207,2.189,255,1.635,259,2.919,301,2.657,302,2.733,303,2.454,337,4.273,400,2.381,1096,2.901,2096,5.472]],["t/1031",[9,1.243,112,1.898,122,1.676,207,2.53,255,1.806,262,1.714,301,2.935,302,3.019,368,4.351,1096,3.205]],["t/1033",[112,1.961,122,1.431,207,2.409,262,1.464,301,3.097,302,3.186,368,4.591,373,6.377,2214,8.134]],["t/1035",[11,3.185,21,2.656,102,3.587,103,4.305,122,1.676,301,3.627,322,4.178,335,5.414,613,6.409,614,5.633,2064,6.409,2216,8.404]],["t/1037",[102,2.538,122,1.539,168,3.407,207,2.516,259,4.457,262,1.85,301,3.331,315,4.237,337,4.126,364,3.829,613,5.603,614,4.925]],["t/1039",[102,2.829,122,1.322,168,2.925,207,1.838,259,3.142,260,5.489,262,1.687,301,2.86,337,4.599,392,5.742,394,6.056,395,5.276,396,5.89,613,6.246,614,5.489,615,6.733]],["t/1041",[112,2.233,243,2.908,302,3.372,400,2.937]],["t/1043",[7,1.606,9,1.182,22,2.786,37,3.574,55,2.616,122,1.289,127,3.317,135,3.064,262,1.318,269,3.401,302,3.957,640,3.045,666,3.725,812,4.544,2217,7.986]],["t/1045",[9,1.277,55,2.826,92,2.561,122,1.392,255,1.854,262,1.742,302,3.792,303,2.783,400,2.7,666,4.025,812,4.909]],["t/1047",[122,1.411,262,1.757,302,3.142,303,3.432,400,2.737,812,4.976,814,6.67,815,6.67,1596,8.75]],["t/1049",[122,0.703,147,2.033,168,1.557,175,4.658,262,1.658,302,2.371,303,3.079,347,3.86,400,1.364,793,5.937,797,4.424,803,2.48,805,2.48,806,4.793,808,4.793,812,2.48,818,2.448,823,5.696,824,3.761,825,7.667,873,8.237,2139,3.761,2218,4.359,2219,4.359,2220,4.359,2221,4.359,2222,4.359,2223,4.359,2224,4.359,2225,4.359,2226,4.359,2227,4.359,2228,4.359,2229,4.359,2230,4.359,2231,8.757,2232,9.546]],["t/1051",[112,1.822,227,6.002,243,3.088]],["t/1053",[5,1.551,7,1.332,9,0.78,11,1.24,22,0.906,26,1.815,38,1.567,55,1.072,71,2.063,89,0.999,92,2.255,95,1.751,100,1.508,111,2.295,112,0.598,147,1.526,167,1.676,173,2.419,178,3.484,207,2.548,213,2.42,224,2.69,225,2.496,227,4.577,228,2.242,229,1.677,253,1.399,255,0.703,266,3.042,267,1.465,269,1.106,271,1.369,281,1.914,289,1.751,338,1.442,352,2.035,353,3.535,354,2.035,364,1.314,370,1.314,400,1.024,422,1.513,468,1.971,469,1.581,473,2.242,491,3.535,510,1.771,525,3.002,529,1.793,553,2.42,575,2.242,597,2.193,640,1.248,666,2.46,678,1.838,1021,2.071,1096,1.248,1097,2.035,1354,6.869,1398,2.353,1527,3.002,1537,3.9,1542,3.535,1633,2.69,1666,2.824,1681,3.002,1810,2.824,1939,3.002,1940,2.824,2068,2.584,2070,3.002,2071,3.002,2072,3.002,2073,3.002,2074,3.002,2233,3.273,2234,5.275,2235,3.002,2236,2.824,2237,3.273]],["t/1055",[7,0.998,9,1.273,38,3.483,52,1.942,89,2.221,92,1.473,112,1.926,122,1.174,178,4.258,207,2.365,255,1.067,266,4.194,269,2.458,302,1.784,314,3.308,338,2.188,339,1.697,364,1.993,400,1.554,552,2.72,587,4.555,614,4.875,640,2.773,680,2.99,799,2.657,812,2.825,1238,3.786,1354,6.968,1542,3.328,1543,6.034,2064,3.786,2238,4.965]],["t/1057",[12,2.404,29,2.121,38,2.713,41,3.88,100,1.62,178,2.215,184,2.535,189,1.946,207,2.383,213,4.189,218,5.751,219,4.189,225,4.32,227,3.412,256,3.361,257,1.818,258,5.419,261,3.181,265,4.32,301,3.237,310,3.223,340,2.059,358,3.361,448,5.607,491,5.359,543,3.141,589,4.189,678,4.49,983,3.584,986,4.189,1354,5.67,1542,5.359,2235,7.335,2239,4.888,2240,5.665,2241,5.665]],["t/1059",[89,2.566,168,3.71,227,6.788,243,3.492,262,1.714,387,4.099,526,3.467,1096,3.96]],["t/1062",[227,6.097,2242,9.286]],["t/1064",[227,6.097,2243,10.124]],["t/1066",[7,1.226,31,2.586,71,2.383,86,2.414,112,1.538,140,2.282,178,3.769,204,3.514,207,2.531,227,5.068,243,1.888,453,3.564,469,2.945,551,4.002,664,6.052,988,5.59,1096,2.324,1110,5.258,1354,6.899,1542,6.46,1802,4.812,2242,7.719,2244,6.094,2245,8.415,2246,6.094]],["t/1069",[4,2.928,7,1.618,21,1.806,38,2.737,66,1.68,68,4.135,89,2.844,95,3.058,125,2.841,127,2.374,135,2.193,140,3.012,166,2.841,167,2.556,172,2.443,173,3.69,207,2.391,255,1.228,301,1.996,302,3.345,310,3.252,344,2.898,378,4.364,400,1.789,793,3.554,803,3.252,973,3.753,993,3.497,1096,2.179,1097,5.004,1358,6.354]],["t/1071",[55,2.928,112,1.634,122,1.075,147,4.17,172,2.848,207,1.495,262,1.78,302,3.625,303,3.478,350,4.361,378,4.418,400,2.085,701,3.896,702,2.589,793,5.561,803,3.791,805,3.791,812,3.791,818,3.742]],["t/1073",[122,1.086,147,3.14,175,2.797,262,1.486,302,2.419,303,2.904,382,5.599,400,2.107,661,5.801,759,4.337,793,5.599,797,6.035,803,3.83,805,3.83,806,4.52,808,4.52,812,3.83,814,5.134,815,5.134,818,5.056,1039,4.978,1596,7.402,2139,5.809,2202,6.176]],["t/1075",[65,5.634]],["t/1077",[5,1.667,7,0.72,17,2.576,22,0.992,27,2.401,40,4.305,55,1.173,62,1.939,65,4.383,66,1.667,68,2.518,89,2.149,112,0.655,116,2.401,120,3.498,133,2.401,134,3.27,150,3.432,164,2.649,165,1.939,176,4.305,179,3.4,186,2.389,188,3.884,189,1.948,190,2.308,192,3.643,213,2.649,259,1.375,269,1.211,278,2.732,295,3.469,296,2.038,311,1.685,322,1.781,338,1.578,346,5.725,347,4.679,349,2.066,364,1.438,422,1.657,441,3.653,443,1.835,464,2.401,479,2.353,482,4.324,491,2.401,501,2.066,519,2.649,567,3.286,582,2.538,641,2.267,828,4.193,830,4.661,1187,3.091,1249,2.829,1354,2.192,1387,3.286,1692,2.829,1805,3.286,1883,2.732,1940,3.091,2107,3.286,2108,3.286,2109,3.286,2110,2.945,2111,3.286,2116,3.286,2117,3.091,2118,3.091,2126,3.286,2247,3.286,2248,5.67,2249,3.582,2250,3.582]],["t/1079",[65,5.376,1522,7.485,1523,7.485,1524,7.485]],["t/1081",[65,4.321,68,3.503,92,2.341,98,3.744,120,2.74,271,3.3,346,5.181,347,7.092,491,5.287,547,6.016,772,6.016,807,4.826,1440,6.485,2119,7.236,2120,7.236]],["t/1083",[9,1.294,38,4.188,112,2.097,178,4.162,339,2.989,450,7.547,602,3.315,973,5.744,1554,4.266]],["t/1085",[7,2.088,9,1.243,22,2.328,55,2.752,122,1.356,178,3.286,203,5.061,339,3.548,602,3.936,637,3.954,973,5.519,1554,4.099]],["t/1087",[9,1.607,11,3.43,22,2.148,31,2.303,55,3.421,112,1.417,122,1.251,140,2.031,178,4.675,255,1.666,262,1.28,303,2.501,375,3.244,602,3.43,750,3.714,778,3.563,1247,3.782,1554,2.646,1678,4.248,1698,4.601,1792,3.496,1793,4.907]],["t/1089",[9,1.26,112,1.913,122,1.374,178,3.33,262,1.405,375,3.562,602,3.227,750,4.078,801,4.505,807,5.209,1554,4.153,1813,6.724,1817,6.296]],["t/1091",[9,1.43,112,2.188,178,3.78]],["t/1093",[7,1.759,9,1.575,22,2.948,122,1.411,135,3.356,255,1.879,339,2.989,602,3.315,603,4.85,703,3.294]],["t/1095",[9,1.658,22,2.035,55,2.406,68,3.263,112,1.743,122,1.539,255,2.049,262,1.574,303,2.37,365,2.93,375,3.074,602,4.013,749,3.887,750,3.519,1247,3.584,1678,4.025,1698,4.359]],["t/1097",[7,0.961,21,1.511,22,2.577,31,2.029,55,1.566,68,3.141,89,1.46,107,3.14,112,0.874,122,0.771,127,1.986,135,3.23,140,1.79,178,4.207,207,1.889,253,2.044,255,1.52,303,1.542,350,2.332,378,1.958,427,2.651,476,3.775,500,2.4,513,3.93,597,3.204,598,3.352,602,4.348,603,2.651,702,1.858,703,1.801,995,2.925,1021,3.025,1246,2.879,1557,2.72,1678,3.874,1698,2.836,1792,4.557,1793,5.326,1795,3.775,1800,4.385,1801,4.959,1802,3.775,1803,4.125,1804,4.125]],["t/1099",[9,1.445,11,2.888,22,1.731,31,1.722,55,3.028,102,2.158,112,1.393,122,1.008,140,1.519,178,4.379,255,1.343,262,1.031,303,2.015,364,3.436,371,4.137,375,2.614,378,2.56,443,3.201,502,2.833,582,2.796,602,3.503,603,3.465,660,3.886,750,2.992,778,2.664,795,4.28,1247,3.048,1554,1.979,1557,2.308,1678,3.423,1698,3.707,1699,3.886,1700,3.823,1705,4.765,1706,4.62,1792,2.614,1793,3.953,1798,2.719,1799,2.664]],["t/1101",[9,0.947,112,1.169,122,1.032,178,3.402,262,1.056,375,4.437,602,3.746,750,5.08,751,4.288,801,3.385,807,3.914,828,4.731,1367,5.052,1554,3.12,1557,3.64,1715,5.322,1798,4.288,1799,4.201,1813,5.052,1814,5.26,1816,5.26,1817,4.731,1818,5.52,1819,5.52,1820,5.52,1821,5.52,1822,5.52,1823,5.52,1824,5.52]],["t/1103",[112,1.85,469,4.892]],["t/1105",[9,1.257,22,1.981,33,2.512,55,1.589,66,1.426,71,1.898,76,3.588,89,2.184,92,1.44,100,1.387,120,2.484,122,0.783,125,2.412,140,2.677,167,1.542,172,2.075,189,3.219,194,2.207,243,2.216,245,3.253,262,1.18,264,3.701,269,1.64,339,1.658,379,2.303,429,2.969,432,3.253,453,4.182,465,2.367,468,6.51,479,3.187,637,2.283,651,3.222,652,3.127,788,5.577,1092,3.588,1226,3.253,1235,4.608,1398,6.108,1413,4.187,1513,3.49,1825,4.452,1826,4.452,1827,4.452]],["t/1107",[55,2.682,92,2.43,100,2.922,122,1.649,189,3.511,262,1.687,335,5.276,364,3.288,429,5.01,465,4.985,494,5.093,650,4.659]],["t/1109",[11,3.367,21,2.393,22,2.097,66,1.543,102,1.813,140,1.965,175,2.18,188,3.595,189,3.805,190,4.879,195,3.447,196,6.413,207,1.7,208,3.68,214,2.513,270,3.595,271,2.196,296,5.533,364,3.904,407,3.518,419,5.187,420,3.264,453,3.069,464,3.518,466,5.187,467,3.382,472,4.145,484,4.003,494,3.264,496,4.145,650,2.986,796,2.809,1710,6.387,2176,3.595]],["t/1111",[52,2.661,100,2.592,112,1.243,122,1.463,189,2.337,195,4.468,196,4.231,248,2.787,255,1.462,262,1.497,338,2.998,364,2.731,393,4.098,420,4.231,464,4.56,465,3.318,466,4.66,469,3.288,494,4.231,501,3.923,502,2.252,629,3.486,630,3.201,634,5.188,640,2.594,651,2.194,1710,4.468,1830,6.241,1833,6.241,2251,6.804]],["t/1113",[112,2.296,243,2.826,400,2.854,806,4.578]],["t/1115",[7,2.235,9,1.063,22,1.99,38,3.44,86,2.846,92,2.132,102,3.246,122,1.159,189,2.468,301,2.509,358,4.262,400,2.248,465,3.504,502,3.467,629,4.815,652,4.628,660,4.467,805,4.087,1096,3.584,2252,7.184]],["t/1117",[502,3.248,629,5.028,806,4.927,2178,9.003]],["t/1119",[659,5.48,806,5.082]],["t/1121",[112,2.233,243,2.908,400,2.937,803,5.339]],["t/1123",[7,1.808,22,2.49,122,1.451,172,3.844,207,2.018,239,5.793,400,2.814,783,4.867,799,4.811,812,5.115]],["t/1125",[22,2.786,122,1.623,172,4.301,207,2.258,239,6.481,400,3.148,783,4.323,799,4.273,803,5.723,812,4.544,1096,3.836]],["t/1127",[112,1.599,122,1.717,400,3.33,799,4.68,803,6.055,812,4.976,1024,5.991,1039,6.468,1552,7.191]],["t/1129",[9,1.43,112,2.188,178,3.78]],["t/1131",[7,1.478,9,1.567,89,2.244,122,1.186,127,3.052,135,2.819,178,4.141,255,1.579,339,2.511,344,3.726,481,5.284,487,4.649,702,3.706,703,2.768,973,4.825,981,5.284,982,5.603,1554,3.584,1792,4.734,1793,4.649,1796,5.284]],["t/1133",[9,1.693,22,2.409,55,2.849,107,4.201,112,1.59,122,1.712,147,2.984,178,4.148,262,1.966,350,3.12,702,3.38,748,4.367,1554,3.12,1792,5.605,1793,4.048]],["t/1135",[9,1.126,112,1.391,122,1.833,178,2.975,262,1.874,748,4.897,801,4.025,1554,3.711,1730,6.255,1792,6.285,1793,4.814,1813,6.008,1814,6.255,1815,6.565,1816,6.255]],["t/1138",[21,2.656,89,3.171,102,2.903,181,5.317,226,6.636,339,2.871,518,3.791,637,3.954,724,5.317,735,5.317,796,4.497,1744,6.214,1892,6.909,1893,6.909]],["t/1140",[9,1.277,102,2.981,112,1.577,122,1.392,127,3.585,250,4.512,262,1.742,340,3.136,724,5.46,1892,7.095,1893,7.095]],["t/1142",[9,0.966,112,1.612,122,1.053,175,3.663,250,2.79,262,1.077,518,2.945,659,3.533,721,4.205,722,4.375,723,4.205,724,4.13,725,4.694,726,4.694,727,4.694,728,4.694,729,4.694,730,4.694,731,4.694,732,4.694,733,4.694,734,4.694,735,4.13,736,4.694,737,4.694,738,4.694,739,4.694,740,4.694,741,4.694,742,4.694,743,4.694,744,4.694,745,4.694,1559,3.764,1742,4.827]],["t/1145",[21,2.727,89,3.223,102,2.981,181,5.46,226,6.814,339,2.948,378,3.535,637,4.06,724,5.46,735,5.46,796,4.617,1744,6.381]],["t/1147",[9,1.197,102,2.793,112,1.478,122,1.305,127,3.359,147,3.772,175,4.212,181,5.117,214,3.872,250,4.335,262,1.673,370,3.246,378,3.313,735,5.117,862,5.539]],["t/1149",[9,0.966,112,1.612,122,1.053,175,3.663,250,2.79,262,1.077,518,2.945,659,3.533,721,4.205,722,4.375,723,4.205,724,4.13,725,4.694,726,4.694,727,4.694,728,4.694,729,4.694,730,4.694,731,4.694,732,4.694,733,4.694,734,4.694,735,4.13,736,4.694,737,4.694,738,4.694,739,4.694,740,4.694,741,4.694,742,4.694,743,4.694,744,4.694,745,4.694,1559,3.764,1742,4.827]],["t/1152",[7,1.429,9,1.381,21,2.245,31,3.015,57,4.042,61,2.93,89,2.849,92,2.108,204,4.097,250,4.454,253,3.037,255,1.526,317,3.465,519,5.253,603,3.939,616,3.718,617,4.279,637,3.342,703,2.676,721,4.577,724,4.495,735,4.495,1094,5.253,1744,5.253,2253,7.104]],["t/1154",[9,1.323,11,2.525,102,3.486,122,1.075,127,3.714,147,3.107,169,3.25,175,3.714,181,4.215,212,3.134,214,3.19,250,3.822,262,1.476,340,2.421,370,2.675,378,2.729,386,4.144,518,3.006,721,4.293,723,4.293,724,4.215,735,4.215,862,4.564,956,3.345,1559,3.842,1884,5.261,1892,5.478,1893,5.478]],["t/1156",[9,0.966,112,1.612,122,1.053,175,3.663,250,2.79,262,1.077,518,2.945,659,3.533,721,4.205,722,4.375,723,4.205,724,4.13,725,4.694,726,4.694,727,4.694,728,4.694,729,4.694,730,4.694,731,4.694,732,4.694,733,4.694,734,4.694,735,4.13,736,4.694,737,4.694,738,4.694,739,4.694,740,4.694,741,4.694,742,4.694,743,4.694,744,4.694,745,4.694,1559,3.764,1742,4.827]],["t/1159",[9,1.243,21,2.656,89,3.442,220,4.398,255,2.231,301,2.935,302,3.731,303,2.71,339,2.871,365,3.351,1537,6.214]],["t/1162",[1,3.887,3,3.775,109,3.543,112,1.328,207,2.125,262,1.563,301,3.898,302,3.401,303,2.343,365,2.897,368,3.761,369,3.702,370,3.801,371,3.511,378,2.976,712,4.771,985,4.31,1618,5.225]],["t/1164",[1,3.844,3,3.748,9,1.063,55,2.353,109,3.504,112,1.718,207,2.109,262,1.551,301,3.881,303,2.317,368,3.719,369,3.675,370,3.773,371,3.471,378,2.943,712,4.718,985,5.576,1618,5.166]],["t/1167",[109,4.209,112,1.577,122,1.392,207,1.937,262,1.424,301,3.014,365,3.441,367,5.279,368,4.467,369,3.375,370,3.464,371,4.17,2254,8.629]],["t/1169",[9,1.243,109,4.099,112,1.536,122,1.356,207,1.886,262,1.387,301,2.935,368,4.351,369,3.286,370,3.373,375,3.516,376,4.549,378,3.443,381,5.519,713,5.892]],["t/1171",[651,3.317]],["t/1173",[7,2.304,8,3.192,22,2.743,61,3.215,100,2.228,189,2.677,339,2.663,349,4.494,500,3.912,553,5.762,651,3.512,986,5.762,1096,2.972,1607,5.762,1694,6.724]],["t/1175",[9,1.389,112,2.233,1557,5.339,1798,6.29]],["t/1177",[4,3.68,7,1.89,9,1.063,52,2.809,89,2.194,122,1.159,178,2.809,220,3.759,248,2.943,255,1.544,339,3.579,443,3.68,502,3.467,582,3.215,591,3.409,651,2.317,682,2.626,703,2.706,1554,3.504,1557,4.087,1558,5.037,1751,4.815,1776,5.478]],["t/1179",[9,1.5,112,2.186,122,1.305,255,1.738,262,1.673,602,3.065,1554,3.944,1557,4.601,1685,5.21,1713,5.21,1715,4.947,1798,5.42]],["t/1181",[9,1.277,112,1.929,122,1.392,262,1.424,602,3.27,801,4.566,1554,4.209,1557,4.909,1685,5.56,1715,5.279,1798,5.784,1799,5.667]],["t/1183",[112,2.201,122,1.584]],["t/1185",[7,1.783,29,3.32,33,4.591,44,3.186,103,4.543,122,1.732,416,7.29,421,6.074,2255,8.823]],["t/1187",[367,5.914,373,6.952,685,4.715,688,6.479,952,5.914]],["t/1189",[364,4.064,494,6.296]],["t/1191",[255,2.017,302,3.372,314,4.269,680,5.652,799,5.022,812,5.339,1554,4.577]],["t/1193",[250,4.012,702,3.647,747,5.412,1357,6.94,1554,4.577,1583,6.58,1584,6.29]],["t/1195",[122,1.872]],["t/1197",[5,2.959,7,1.139,21,1.79,22,1.569,88,3.313,112,1.035,122,0.914,161,2.598,163,3.829,168,2.024,207,1.271,236,2.789,243,2.478,259,3.068,262,0.935,291,5.273,301,1.979,320,5.251,337,5.654,339,3.167,443,2.902,473,5.477,607,2.816,608,5.059,609,5.477,610,5.251,1489,3.412,2017,2.997,2018,2.997,2089,4.473,2090,4.657,2091,4.473,2096,4.074,2097,4.657]],["t/1199",[21,2.691,167,2.705,168,3.042,243,2.639,259,3.267,262,1.405,269,2.878,314,3.873,335,5.486,337,4.782,339,2.909,608,5.388,610,5.592,1610,6.124]],["t/1201",[9,1.294,168,3.802,259,3.356,262,1.893,315,6.137,337,4.912,608,5.534,610,5.744]],["t/1203",[9,1.411,112,1.343,120,3.313,168,3.407,260,4.925,262,1.574,315,5.5,337,4.126,394,7.053,395,6.145,396,6.859,608,6.035,610,6.264,615,6.041,2094,6.74,2256,6.74]],["t/1205",[21,3.055,168,3.453,259,3.709,262,1.596,335,6.228]],["t/1207",[120,3.167,168,3.898,259,4.188,262,1.801,315,5.258,337,5.121]],["t/1209",[112,1.442,120,3.467,168,3.566,259,4.416,262,1.648,337,4.43,394,7.381,395,6.431,396,7.179,615,6.485,2256,7.236]],["t/1213",[3,2.516,7,1.269,9,1.512,21,1.299,39,2.278,40,2.514,52,1.607,92,1.219,95,2.198,103,2.105,112,0.751,127,2.621,161,2.894,174,3.59,178,1.607,203,2.475,204,2.369,212,1.933,244,4.227,255,1.65,267,4.392,297,2.475,301,2.204,302,1.476,303,2.035,339,2.156,370,1.649,414,2.224,427,2.278,495,3.038,502,1.36,526,2.603,542,2.6,549,2.514,591,1.95,640,1.567,651,1.325,656,3.8,682,1.502,694,2.105,702,2.985,703,1.548,718,2.6,786,2.955,956,2.063,995,2.514,1096,2.406,1412,3.378,1504,3.244,1554,2.004,1559,2.369,1563,3.038,1629,3.038,1853,3.769,1857,3.769,1858,3.769,2257,4.109,2258,4.109,2259,2.475,2260,2.814,2261,6.31,2262,6.31]],["t/1215",[5,1.844,44,2.254,58,2.977,79,3.118,108,3.617,120,2.179,140,3.213,175,2.606,177,7.33,185,4.297,192,3.247,194,2.853,227,3.778,259,3.293,391,4.784,422,2.901,482,4.784,491,5.753,591,2.977,781,4.638,1288,5.157,1406,5.754,1526,5.431,1592,5.157,1801,4.398,2150,7.873,2263,5.754,2264,6.273,2265,6.273,2266,6.273,2267,6.273]],["t/1217",[3,3.667,6,4.252,7,1.398,24,4.659,47,4.565,79,3.455,80,3.677,86,3.643,99,4.323,127,2.887,161,3.188,192,3.598,244,3.961,267,3.111,339,2.375,349,4.008,417,4.874,426,5.997,449,4.478,529,3.807,549,4.252,606,5.14,685,3.39,1237,4.008,1667,5.301,2259,4.186,2268,6.951,2269,6.376]],["t/1224",[3,0.851,5,0.627,7,0.979,8,0.874,9,0.316,12,1.565,17,2.652,21,0.674,43,1.401,44,0.766,47,2.421,52,2.804,55,0.699,63,1.766,66,1.084,71,1.904,89,0.651,93,1.43,100,1.054,101,1.534,102,0.737,103,1.093,108,1.23,112,1.31,120,0.741,122,0.595,125,1.06,163,2.332,165,2.636,168,2.747,169,1.798,175,0.886,186,1.553,189,0.733,194,1.677,207,0.828,229,2.495,243,0.661,244,2.821,247,1.213,248,0.874,250,2.48,252,2.514,253,2.082,254,3.392,255,1.9,256,1.265,257,1.183,258,4.193,262,1.269,264,1.627,269,0.721,296,1.213,303,1.189,309,1.168,314,0.97,317,1.04,318,2.156,340,3.093,341,2.726,349,1.23,350,1.798,364,0.856,400,1.154,456,1.285,477,1.401,493,2.812,502,0.706,511,1.754,514,1.957,515,4.467,518,1.663,520,3.846,521,3.031,526,0.88,582,1.65,640,1.406,651,2.48,654,1.929,672,1.496,681,1.285,682,2.12,685,2.375,688,1.43,703,1.389,870,1.43,1033,1.374,1096,1.857,1243,2.256,1260,2.293,1261,1.84,1278,1.401,1346,1.627,1518,1.957,1526,2.333,1605,2.812,1709,2.726,1775,1.684,1934,3.181,1966,1.84,1967,1.84,1978,3.382,1987,1.957,1995,1.577,2187,3.181,2239,1.84,2270,2.133,2271,2.133,2272,2.133,2273,3.687,2274,1.957,2275,1.957,2276,1.957,2277,1.957,2278,2.133,2279,2.133,2280,2.133,2281,1.461,2282,2.133,2283,2.133]],["t/1226",[3,3.034,7,1.53,31,3.229,36,5.802,58,3.611,95,4.071,150,3.711,163,3.643,244,3.277,256,4.514,261,5.478,295,4.655,363,5.626,418,5.472,430,5.802,753,4.387,1094,5.626,1610,5.472,1911,6.255,2284,6.979,2285,4.582,2286,7.609]],["t/1229",[1,1.145,3,0.853,5,2.83,6,1.309,7,1.169,8,2.382,9,1.063,12,3.269,16,2.734,26,1.187,27,1.434,29,3.75,31,0.908,43,2.428,44,2.088,47,2.428,52,0.837,53,4.229,58,3.865,66,1.93,71,0.837,82,1.501,89,1.491,96,1.539,100,1.662,111,1.501,112,1.062,116,1.434,120,0.743,150,3.504,163,1.025,165,1.158,167,1.175,168,2.345,174,1.218,177,1.379,194,2.986,228,1.466,230,5.386,239,2.382,243,0.663,244,1.593,250,0.915,251,1.539,252,2.519,257,0.687,261,3.686,262,1.589,275,1.632,297,3.954,311,1.74,313,1.187,317,1.044,318,1.251,340,0.778,341,1.582,352,2.3,356,2.34,362,1.434,397,2.82,418,3.511,425,3.557,430,1.632,440,1.172,446,1.434,449,1.379,460,1.539,487,1.354,494,1.331,501,1.234,529,2.026,542,3.089,547,1.632,549,1.309,583,1.69,685,1.804,952,1.309,964,1.501,1093,1.69,1099,1.466,1532,1.632,1718,1.27,1770,1.69,1911,3.04,1959,1.963,2006,1.846,2016,1.846,2260,1.466,2275,1.963,2276,1.963,2277,1.963,2287,2.14,2288,2.14,2289,2.14,2290,2.14,2291,1.963,2292,2.14,2293,2.14,2294,2.14,2295,1.963]],["t/1231",[4,3.43,7,1.689,9,0.79,12,1.41,29,1.999,47,2.182,56,2.732,66,1.57,68,1.476,79,1.652,92,0.986,95,1.778,101,2.39,103,1.703,110,3.321,120,1.855,125,2.655,127,1.38,134,1.916,140,1.244,150,1.621,161,1.524,167,1.696,169,1.621,172,2.862,173,1.524,174,3.038,175,1.38,185,2.276,186,1.4,207,1.199,232,2.39,237,1.843,238,2.457,241,1.591,245,3.579,248,3.141,252,1.275,255,1.927,258,1.943,266,1.916,269,1.805,271,1.39,275,2.534,301,1.161,303,1.072,311,1.563,323,2.457,363,2.457,364,1.334,414,1.799,417,3.744,493,2.534,497,4.899,502,1.767,526,1.371,540,2.276,542,2.103,563,2.39,588,2.033,598,2.33,629,1.703,637,1.563,640,1.267,651,1.072,663,2.534,682,1.215,699,2.33,703,2.011,753,1.916,799,1.778,1225,1.916,1590,3.048,1591,4.608,1605,2.534,1689,2.732,1754,2.732,1772,2.867,1934,2.867,2259,2.001,2260,2.276,2296,4.899,2297,3.323,2298,3.048,2299,5.504,2300,5.34,2301,2.732,2302,3.323,2303,3.323,2304,5.34,2305,3.048,2306,2.732,2307,3.323,2308,3.048,2309,3.323]],["t/1234",[3,1.195,5,1.444,8,1.228,9,1.068,11,2.365,12,2.085,22,0.83,26,1.662,29,2.336,43,4.098,44,2.592,55,2.044,58,1.423,66,1.444,89,1.5,103,2.517,110,1.864,120,1.041,127,1.245,140,1.839,150,2.396,167,1.56,169,3.044,172,2.1,178,3.816,207,0.673,214,1.436,215,2.102,236,1.476,237,1.662,244,3.429,252,1.885,255,1.55,256,1.779,257,0.962,261,2.758,269,1.013,289,1.604,301,1.047,303,1.584,314,1.364,315,1.729,322,1.49,339,1.024,340,2.268,344,1.52,362,2.009,364,1.203,367,1.834,369,1.172,370,1.203,373,2.156,375,1.254,379,1.423,414,1.623,427,1.662,480,2.156,493,2.286,502,0.992,524,2.217,584,3.746,588,1.834,591,1.423,602,2.735,630,1.41,640,1.143,682,1.796,699,3.444,703,1.129,750,1.436,778,1.969,952,1.834,1021,1.897,1225,2.833,1236,3.055,1247,1.462,1248,1.897,1260,1.864,1278,1.969,1436,2.217,1570,2.286,1678,1.642,1697,2.587,1698,1.779,1713,1.931,1793,3.108,1801,2.102,1935,2.465,2255,2.465,2310,4.038,2311,2.998,2312,2.998,2313,2.998,2314,4.912,2315,2.998,2316,2.75,2317,2.998]],["t/1236",[3,2.902,5,1.461,7,1.463,9,0.45,12,1.29,21,0.961,29,2.359,58,1.443,66,1.461,68,1.35,79,1.511,89,1.517,92,1.474,96,2.187,100,1.421,108,2.865,120,1.056,122,0.491,129,3.674,134,1.753,140,1.138,150,1.483,161,3.949,163,1.456,165,2.69,167,1.578,178,1.189,185,2.083,186,2.655,188,2.083,189,1.707,190,1.959,203,1.831,207,0.682,229,1.558,238,3.674,244,1.309,246,2.248,248,1.246,255,1.564,256,1.804,257,2.022,261,1.707,269,1.028,303,1.603,322,2.47,340,2.29,344,1.542,353,2.038,364,1.221,400,1.972,420,3.919,421,2.083,439,2.401,500,1.526,502,2.085,504,2.132,526,1.254,582,1.361,584,3.789,602,1.152,630,1.43,640,1.159,651,0.981,666,2.318,680,2.993,682,2.304,703,2.373,1226,2.038,1235,1.959,1236,1.891,1237,1.753,1248,1.924,1262,3.789,1718,2.948,1762,2.623,1799,1.997,2117,2.623,2188,2.789,2189,2.623,2301,2.5,2310,2.5,2316,2.789,2318,3.04,2319,3.04,2320,3.04,2321,3.04,2322,3.04,2323,3.04,2324,7.277,2325,3.04,2326,3.04,2327,2.789,2328,4.969,2329,3.04,2330,3.04]],["t/1239",[3,3.849,8,3.066,9,0.764,12,2.192,100,2.14,102,1.784,127,2.145,128,3.714,131,2.674,161,2.368,174,4.258,185,3.538,193,3.714,194,3.404,199,3.714,202,3.621,209,3.939,210,3.621,241,2.473,244,3.791,255,1.891,303,1.666,317,2.519,322,2.567,419,3.538,422,2.388,526,3.087,584,3.939,620,3.819,651,2.414,682,3.218,703,2.819,964,3.621,1225,2.978,1469,4.737,1684,5.127,1709,3.819,2259,3.11,2331,5.165,2332,7.485,2333,5.165,2334,5.165,2335,4.737,2336,5.165,2337,5.165]],["t/1241",[9,1.292,12,1.789,22,1.168,29,1.579,65,3.525,68,1.872,89,1.288,103,2.16,128,3.032,134,2.431,143,5.082,165,2.282,167,2.479,177,4.146,179,2.038,189,2.211,197,5.772,203,2.539,207,1.752,227,2.539,244,1.816,247,3.662,255,1.383,257,1.353,262,1.062,295,2.58,296,2.399,299,2.769,317,3.139,318,3.763,322,3.199,340,3.419,352,2.622,400,1.319,411,2.769,413,2.58,422,1.95,435,3.638,441,2.717,443,2.16,502,1.395,504,2.956,588,2.58,591,2.001,651,2.517,664,3.032,682,1.541,694,2.16,703,1.588,1033,4.146,1093,3.33,1096,1.608,1526,4.072,1546,3.216,1964,3.638,2104,3.868,2338,6.436,2339,4.217,2340,4.217,2341,4.217,2342,3.467,2343,4.217,2344,4.217]],["t/1243",[7,1.299,20,5.196,29,3.279,79,3.212,80,3.419,120,2.244,121,4.928,150,4.272,179,3.123,230,3.54,236,3.182,244,3.772,245,4.331,248,2.647,259,2.479,269,2.184,296,4.983,322,4.939,418,7.145,456,3.892,529,3.54,543,3.583,598,4.531,654,3.381,1099,4.426,1576,6.916,2068,5.103,2345,6.462]],["t/1245",[5,2.47,61,4.284,163,4.973,293,6.909,324,6.636,449,5.414,787,6.636,1767,7.709,2236,7.251,2260,5.756,2269,7.709,2346,8.404,2347,8.404]],["t/1247",[7,1.249,9,0.919,44,3.497,63,2.975,108,5.614,150,3.03,161,2.849,165,3.363,168,2.219,169,4.159,194,2.825,241,2.975,255,1.335,256,3.685,258,3.632,259,2.384,261,3.489,262,1.025,301,2.17,302,2.232,340,2.258,387,3.03,393,3.741,396,4.468,398,5.36,456,3.741,463,5.715,512,4.593,557,5.36,1278,4.08,2259,3.741,2296,5.698,2298,5.698,2308,5.698,2310,5.107,2348,6.212]],["t/1249",[9,1.409,244,4.102,255,2.046,340,3.461,409,6.523,1253,5.039]],["t/1251",[5,3.155,31,3.763,43,5.823,44,3.186,222,5.943,241,4.246,300,6.377,452,7.29,549,5.425,2259,5.34]],["t/1253",[7,1.958,21,1.963,22,1.721,66,1.826,67,3.216,103,3.183,143,4.905,165,3.363,168,3.477,174,3.534,236,3.059,253,2.656,255,1.335,256,3.685,257,1.993,258,4.986,259,2.384,262,1.812,297,5.135,298,4.905,299,4.08,300,4.468,301,2.17,302,2.232,303,2.003,304,5.698,305,4.737,306,4.255,307,5.36,308,5.698,309,3.403,310,3.534]],["t/1255",[3,2.363,5,2.426,7,1.66,8,2.428,9,0.877,12,2.515,20,3.516,29,2.219,31,2.515,44,2.129,62,3.208,68,2.631,76,4.382,89,1.81,90,3.892,100,2.359,112,1.083,133,3.972,134,3.417,161,3.785,165,5.14,174,3.371,256,3.516,261,3.328,285,5.113,286,3.685,287,3.371,364,2.379,415,5.436,417,5.787,418,5.935,419,4.059,420,3.685,421,4.059,422,4.391,423,4.872,487,3.749]],["t/1258",[21,2.842,52,3.516,161,4.123,255,1.932,301,3.14,302,3.23,303,3.49,375,3.761,689,6.648]],["t/1262",[8,3.154,9,1.139,12,3.268,55,2.522,79,3.828,100,2.81,133,5.16,244,3.316,290,5.274,322,5.383,1096,2.936,2349,7.063,2350,7.7,2351,7.7,2352,7.7,2353,7.7,2354,7.063,2355,7.7,2356,7.7]],["t/1264",[244,3.984,255,1.988,322,4.598,582,4.14,602,3.505,1260,5.753,2357,9.25,2358,9.25]],["t/1266",[86,3.204,241,3.872,598,5.67,1258,5.311,2088,7.418,2260,6.945,2359,7.497,2360,6.945,2361,8.087,2362,8.087,2363,8.087,2364,8.087,2365,8.087,2366,8.087,2367,8.087]],["t/1268",[29,2.239,33,3.096,53,3.853,86,2.369,103,3.064,202,4.194,230,3.276,288,3.548,313,3.317,315,3.449,319,3.238,340,2.174,352,3.72,395,3.853,540,4.097,569,5.161,607,4.129,1262,4.561,1375,4.301,1411,4.917,1471,4.561,1724,3.449,1952,5.161,2176,4.097,2368,5.981,2369,5.981,2370,5.981,2371,8.753,2372,5.981,2373,5.981,2374,5.981,2375,5.981,2376,5.981,2377,5.981,2378,4.561,2379,6.334,2380,5.981,2381,5.981,2382,5.981,2383,5.981,2384,5.981,2385,5.981]],["t/1270",[29,2.848,121,5.802,161,3.489,177,4.902,186,3.206,187,5.211,241,3.643,271,3.183,569,8.417,881,6.565,1096,2.901,1258,4.997,2299,6.255,2371,6.979,2386,7.609,2387,7.609,2388,7.609,2389,7.609,2390,6.565,2391,6.565,2392,7.609,2393,7.609]],["t/1273",[4,1.651,7,1.319,8,2.687,9,1.224,11,1.222,13,2.208,29,1.207,37,1.443,48,1.912,55,1.056,58,1.53,66,0.947,79,2.59,80,1.705,99,2.005,113,4.284,122,0.52,124,2.957,127,1.339,131,1.669,152,2.458,177,2.077,178,1.26,191,2.65,192,1.669,202,2.26,241,2.495,244,2.244,252,2.516,261,1.81,262,0.532,269,1.09,295,1.972,305,2.458,322,2.59,352,2.005,495,2.383,502,1.724,526,1.33,542,2.039,561,2.781,582,1.443,591,1.53,607,2.59,640,1.229,651,1.04,682,1.905,703,1.963,786,2.318,1096,2.501,1592,2.65,1724,1.859,1985,8.034,2285,1.941,2349,2.957,2394,2.957,2395,4.115,2396,3.223,2397,3.223,2398,6.193,2399,2.957,2400,3.223,2401,2.65,2402,3.223,2403,3.223,2404,3.223,2405,3.223,2406,3.223,2407,3.223,2408,5.392,2409,3.223,2410,3.223,2411,5.211,2412,5.211,2413,3.223,2414,5.211,2415,3.223,2416,3.223,2417,2.957,2418,3.223,2419,3.223,2420,3.223,2421,3.223,2422,3.223,2423,3.223,2424,3.223,2425,3.223,2426,3.223,2427,3.223,2428,3.223,2429,3.223,2430,3.223,2431,3.223,2432,3.223,2433,3.223,2434,3.223,2435,3.223,2436,3.223,2437,3.223,2438,3.223,2439,3.223,2440,3.223]],["t/1275",[0,3.401,5,2.53,8,2.034,9,1.273,20,2.946,65,2.72,71,1.942,79,2.468,86,2.881,111,3.481,163,2.378,189,1.706,241,3.483,255,1.067,262,0.82,286,3.088,287,2.825,288,2.946,302,1.784,303,1.601,315,2.863,395,3.199,413,3.038,465,2.422,526,2.048,582,2.222,607,4.71,636,4.082,650,2.825,651,2.346,682,2.659,972,3.088,1471,3.786,2285,2.99,2441,4.555,2442,4.965,2443,4.965,2444,4.965,2445,4.965,2446,4.965,2447,4.965,2448,3.786,2449,3.921,2450,4.965,2451,4.965,2452,4.965,2453,4.965,2454,4.965,2455,4.965,2456,4.965,2457,4.965,2458,4.965,2459,4.965,2460,4.965,2461,4.965,2462,4.965,2463,4.965]],["t/1277",[4,1.921,7,1.182,9,0.555,13,2.568,33,3.043,58,2.789,79,1.864,80,1.984,86,2.871,88,2.192,122,0.948,192,1.941,241,4.267,288,4.868,303,1.209,392,2.629,408,2.772,414,2.03,542,4.586,606,2.772,607,4.913,640,1.43,807,2.294,1262,2.859,1375,4.227,1576,2.961,1724,3.389,1948,3.083,2259,2.258,2284,3.439,2378,4.482,2464,4.832,2465,5.391,2466,3.439,2467,3.439,2468,3.75,2469,3.75,2470,3.75,2471,3.439,2472,3.75,2473,3.75,2474,3.235,2475,3.75,2476,2.859,2477,3.75,2478,3.235,2479,3.75,2480,3.75,2481,3.75,2482,3.75,2483,3.75,2484,3.75,2485,3.75,2486,3.75,2487,3.75,2488,3.75,2489,3.75,2490,3.75,2491,3.75,2492,3.75,2493,3.75,2494,3.75,2495,3.75,2496,3.75,2497,3.75,2498,3.75,2499,3.235,2500,3.75,2501,3.75,2502,3.75,2503,3.75,2504,3.75,2505,3.75,2506,3.75,2507,3.75,2508,2.697,2509,3.75,2510,3.75,2511,3.75,2512,3.75,2513,3.75,2514,3.75,2515,3.75,2516,3.75]],["t/1279",[31,3.476,103,4.196,178,3.203,193,5.89,241,4.894,297,4.932,1562,7.066,2022,5.742,2517,8.19,2518,8.19,2519,8.19,2520,8.19,2521,8.19,2522,7.066,2523,8.19,2524,8.19]],["t/1281",[8,3.845,79,4.665,244,4.042,322,4.665,1724,5.412,2525,9.385,2526,9.385]],["t/1284",[12,4.042,16,7.042,639,7.83,1504,7.521,2527,9.524,2528,9.524]],["t/1286",[241,3.777,255,1.695,286,4.906,287,4.488,288,4.68,387,3.847,502,2.611,541,6.485,602,2.989,607,3.922,992,5.673,993,4.826,1253,4.174,2529,7.889,2530,7.889,2531,6.806,2532,7.889,2533,7.889,2534,7.889,2535,7.889]],["t/1288",[2379,7.485,2464,8.069,2536,9.815,2537,9.815]],["t/1290",[29,3.275,100,2.501,186,3.685,269,2.957,463,5.862,1258,6.989,1504,6.907,2538,8.747,2539,7.191,2540,8.747,2541,8.747]],["t/1293",[29,3.513,165,5.08,311,4.415,314,4.269,315,5.412,422,4.34,2542,8.609]],["t/1295",[122,1.493,207,2.076,244,3.984,315,6.347,395,5.959,2543,9.25,2544,9.25]],["t/1297",[3,2.713,4,3.486,29,2.547,134,5.229,165,4.908,185,4.66,241,3.258,311,3.201,314,3.094,315,5.229,395,4.383,422,3.146,467,4.383,1092,5.031,1396,6.241,2360,4.66,2398,5.594,2542,6.241,2545,6.804,2546,6.804,2547,6.804,2548,6.241,2549,6.804,2550,6.804,2551,6.804,2552,6.804,2553,6.804,2554,6.241,2555,6.804,2556,6.804]],["t/1299",[55,2.353,71,2.809,241,4.501,257,2.305,288,5.576,544,6.198,546,6.198,607,4.672,636,5.906,980,5.312,1358,5.673,2096,5.166,2260,4.92,2557,7.184,2558,7.184,2559,7.184,2560,7.184,2561,7.184,2562,7.184,2563,7.184,2564,7.184,2565,7.184,2566,7.184,2567,7.184,2568,7.184]],["t/1301",[3,2.342,5,1.726,8,2.405,9,0.869,22,1.626,33,4.245,44,2.109,165,3.178,244,2.529,251,4.223,607,5.349,642,3.715,948,4.117,2285,3.536,2378,4.478,2395,4.637,2398,6.742,2508,5.897,2569,5.872,2570,5.386,2571,5.872,2572,7.522,2573,5.872,2574,5.872,2575,5.872,2576,5.386,2577,5.872,2578,5.872,2579,4.827,2580,5.386,2581,5.872,2582,5.872,2583,5.872,2584,5.872,2585,5.872,2586,5.872,2587,5.872,2588,5.872,2589,5.872,2590,5.872]],["t/1303",[7,1.712,8,3.488,20,5.052,29,3.188,189,2.925,265,6.494,465,4.153,1258,5.592,2391,7.347,2395,6.724,2591,8.515,2592,8.515,2593,8.515,2594,8.515]],["t/1305",[207,2.17,607,4.806,1253,5.115,1724,5.574,2572,8.868]],["t/1307",[244,4.102,306,6.523,2595,9.524,2596,5.923,2597,9.524,2598,9.524]],["t/1310",[9,1.55,29,3.519,79,3.571,80,3.801,92,2.132,140,2.689,178,2.809,192,3.719,250,3.071,255,1.544,290,4.92,591,3.409,1563,5.312,1594,6.198,1994,5.906,2281,4.92,2599,7.184,2600,7.184,2601,7.184,2602,7.184,2603,7.184,2604,7.184,2605,7.184,2606,6.59,2607,7.184]],["t/1312",[0,6.246,44,3.276,262,1.505,314,4.147,315,5.258,414,4.936,607,4.533,2608,9.119,2609,9.119]],["t/1314",[86,3.888,2610,8.468,2611,9.815,2612,9.815]],["t/1316",[37,3.574,44,3.614,122,1.289,207,1.793,241,3.824,259,3.064,262,1.318,314,3.632,315,4.605,323,5.905,395,5.145,875,7.326,1354,4.886,1542,5.353,2613,7.986,2614,6.891,2615,7.986,2616,7.986]],["t/1318",[1576,7.634,2360,6.621,2617,9.667,2618,9.667,2619,9.667]],["t/1321",[8,3.789,44,3.323,92,2.745,100,2.644,262,1.527,320,6.075,337,5.194,2614,7.981]],["t/1324",[5,2.291,8,3.192,44,2.8,92,2.312,100,2.228,122,1.257,167,2.475,172,3.331,241,3.732,244,3.356,262,1.286,320,5.118,337,4.376,463,5.223,1375,5.604,2614,6.724,2620,7.148,2621,7.148,2622,7.793,2623,7.793,2624,7.793]],["t/1326",[3,3.07,8,4.027,122,1.242,194,3.502,207,1.728,311,3.622,422,3.561,651,2.483,703,2.9,1278,5.057,2285,4.637,2295,7.063,2539,6.33,2625,7.7,2626,7.7,2627,7.7,2628,7.7,2629,7.7,2630,7.063,2631,7.7,2632,7.7]],["t/1328",[9,1.063,65,3.935,93,4.815,102,2.481,150,3.504,177,4.628,179,3.471,185,4.92,188,4.92,189,2.468,190,4.628,192,3.719,197,5.312,198,4.262,199,5.166,223,5.845,456,4.326,703,2.706,1033,4.628,1605,5.478,1775,5.673,2633,7.184,2634,6.59,2635,7.184,2636,7.184,2637,7.184,2638,7.184]],["t/1330",[607,4.879,2360,6.723,2639,9.815,2640,9.815]],["t/1332",[9,0.687,33,2.404,65,2.543,67,2.404,84,2.754,92,2.054,102,1.604,116,3.112,163,2.223,179,2.243,186,1.956,189,2.842,192,2.404,202,4.853,207,1.042,214,2.223,236,2.286,237,2.574,244,2.981,252,2.655,255,1.487,296,2.641,303,1.497,311,2.184,322,2.308,441,2.991,465,3.375,526,1.915,607,3.44,628,4.006,639,3.817,651,1.497,682,2.53,703,1.749,1351,2.84,1689,3.817,1709,3.433,1724,3.991,2259,2.796,2260,4.74,2263,4.259,2360,3.18,2554,4.259,2634,6.348,2641,4.643,2642,4.643,2643,8.274,2644,4.643,2645,4.643,2646,4.643,2647,4.643,2648,4.643,2649,4.643,2650,4.643,2651,4.643,2652,4.643,2653,6.921,2654,4.643,2655,4.643,2656,4.643,2657,4.643]],["t/1334",[5,1.365,7,1.392,8,1.902,11,1.759,29,1.738,58,2.203,84,4.909,100,1.327,122,0.749,167,2.198,172,3.92,178,2.706,185,3.18,186,1.956,193,3.339,223,2.887,241,2.223,244,1.999,252,1.781,262,0.766,265,3.54,267,2.078,297,2.796,309,2.543,322,2.308,463,4.638,588,2.84,1258,3.049,1278,3.049,1375,3.339,1576,3.666,2285,4.168,2391,4.006,2395,6.534,2539,6.802,2620,4.259,2621,4.259,2630,4.259,2658,4.643,2659,4.643,2660,4.643,2661,4.643,2662,4.643,2663,4.259,2664,4.643,2665,4.643,2666,4.643,2667,4.643,2668,4.643,2669,4.643,2670,4.643,2671,4.643,2672,4.643,2673,4.259,2674,4.643,2675,4.643,2676,4.643,2677,4.643,2678,4.643,2679,4.643,2680,4.643,2681,4.643,2682,4.643]],["t/1337",[3,2.999,29,2.815,172,4.139,178,4.187,244,4.17,255,1.616,262,1.241,267,3.365,302,2.701,591,3.569,822,4.758,2285,5.831,2683,7.52,2684,7.52,2685,7.52,2686,7.52,2687,7.52,2688,7.52,2689,7.52]],["t/1339",[5,1.742,7,1.192,8,2.428,9,0.877,16,4.382,21,1.873,29,2.219,55,1.941,93,3.972,100,2.359,120,2.058,165,3.208,170,4.382,171,4.262,172,2.533,174,3.371,178,2.317,207,1.33,262,0.978,288,3.516,298,4.679,322,2.946,591,2.812,607,2.946,782,3.465,1033,3.818,2285,3.569,2690,5.926,2691,5.926,2692,5.926,2693,5.926,2694,5.926,2695,5.926,2696,5.926,2697,5.926,2698,5.926,2699,5.926,2700,5.926,2701,5.436,2702,5.926,2703,5.926,2704,5.436,2705,5.926,2706,5.926,2707,5.926,2708,5.926]],["t/1341",[42,6.909,244,3.619,339,2.871,504,5.892,582,3.761,607,4.178,1243,5.141,1260,5.226,2260,5.756,2360,5.756,2709,8.404,2710,8.404,2711,7.709,2712,8.404,2713,8.404]],["t/1343",[4,1.405,6,1.678,7,0.551,9,0.675,13,1.878,26,1.521,29,1.027,33,2.363,47,1.801,79,1.363,80,1.451,86,1.086,100,0.784,122,0.442,133,1.838,134,2.632,140,1.027,172,2.506,177,2.94,178,1.072,186,1.155,198,3.477,207,0.615,230,1.502,244,3.916,248,1.123,255,1.468,269,0.927,291,2.596,302,0.985,303,0.884,306,1.878,350,1.338,352,1.705,370,1.832,382,1.705,392,3.2,413,2.792,447,1.678,449,1.767,502,2.261,582,1.227,584,2.091,591,1.301,602,1.729,607,4.071,640,1.046,702,1.066,703,1.033,822,1.735,1235,1.767,1243,1.678,1258,1.801,1260,1.705,1375,1.972,1526,2.887,1631,2.94,1724,3.94,1911,2.255,2285,1.652,2306,2.255,2379,2.091,2417,2.516,2464,6.237,2465,6.267,2466,2.516,2467,2.516,2471,2.516,2596,1.705,2714,2.742,2715,2.742,2716,5.861,2717,2.742,2718,2.742,2719,2.366,2720,2.742,2721,2.742,2722,2.742,2723,2.516,2724,4.186,2725,2.742,2726,2.742,2727,2.742,2728,2.742,2729,2.742,2730,2.742,2731,2.742,2732,2.742,2733,2.742,2734,2.742,2735,2.742,2736,2.742,2737,2.742,2738,2.742,2739,2.742,2740,2.742,2741,2.742,2742,2.742,2743,2.742,2744,2.742,2745,2.742,2746,2.742,2747,2.742,2748,2.742,2749,2.742,2750,2.742,2751,2.742,2752,2.742,2753,2.742,2754,2.742,2755,2.742,2756,2.742,2757,2.742,2758,2.742,2759,2.742,2760,2.742,2761,2.742,2762,2.742,2763,2.742,2764,2.742,2765,2.742,2766,2.366,2767,2.742,2768,2.742,2769,2.742,2770,2.742,2771,2.742]],["t/1345",[7,1.022,9,1.095,28,3.759,66,1.494,84,3.015,92,2.195,121,3.876,172,3.729,173,3.393,178,3.411,197,3.759,227,3.061,241,3.543,255,1.092,266,2.931,267,2.275,309,2.784,322,3.678,342,3.876,463,4.959,639,4.179,703,1.915,822,3.216,873,4.386,1258,5.729,2285,4.456,2539,6.083,2663,4.663,2673,4.663,2724,4.663,2772,5.083,2773,5.083,2774,5.083,2775,5.083,2776,5.083,2777,5.083,2778,5.083,2779,5.083,2780,5.083,2781,5.083,2782,5.083,2783,5.083,2784,5.083,2785,5.083,2786,5.083,2787,5.083,2788,5.083,2789,5.083,2790,5.083,2791,5.083,2792,5.083]],["t/1348",[3,3.721,66,2.088,90,4.666,92,2.108,150,3.465,172,3.037,173,3.258,197,5.253,244,4.765,255,2.005,502,3.088,1246,4.279,1247,3.465,2247,6.517,2285,5.619,2793,7.104,2794,7.104,2795,7.104,2796,7.104,2797,7.104,2798,7.104,2799,7.104]],["t/1350",[5,1.583,6,2.054,7,0.675,8,1.376,12,1.425,29,2.016,34,2.761,66,0.987,99,2.088,122,0.869,127,1.395,134,1.936,150,1.638,162,2.897,167,1.067,172,4.452,177,3.469,178,1.313,179,1.623,186,2.269,192,1.738,198,1.992,207,1.895,238,2.483,239,2.163,243,1.041,244,2.319,252,2.066,255,1.449,261,1.886,262,0.554,266,1.936,297,3.243,299,2.205,302,1.935,335,3.469,353,2.251,413,2.054,421,2.3,482,2.561,500,1.686,502,1.111,524,2.483,591,1.594,602,1.273,681,2.022,703,1.265,798,2.251,822,2.125,1096,1.28,1526,2.125,1754,2.761,1764,2.761,1794,3.08,2063,3.08,2281,2.3,2285,6.114,2408,2.761,2766,2.897,2800,3.358,2801,3.358,2802,3.358,2803,3.358,2804,2.897,2805,3.358,2806,3.358,2807,3.358,2808,3.358,2809,3.358,2810,3.358,2811,3.358,2812,3.358,2813,3.358,2814,3.358,2815,3.358,2816,3.358,2817,3.358,2818,3.358,2819,3.358,2820,3.358,2821,3.358,2822,3.358,2823,3.08,2824,3.358,2825,3.358,2826,3.358,2827,3.358,2828,2.897,2829,3.358,2830,3.358,2831,3.358,2832,3.358,2833,3.358,2834,3.358,2835,3.358,2836,3.08,2837,3.358]],["t/1352",[92,1.711,134,3.325,150,2.813,179,3.913,238,5.987,244,4.37,247,3.281,252,3.59,255,1.239,502,1.908,552,3.159,606,6.919,607,4.025,620,4.264,1409,4.741,1545,3.95,1776,4.398,1883,8.452,2360,5.546,2474,6.986,2711,5.29,2838,5.767,2839,5.767,2840,5.767,2841,5.767,2842,5.767,2843,8.097,2844,5.767,2845,5.767,2846,5.29,2847,5.767,2848,5.767]],["t/1354",[5,1.193,6,2.482,9,0.6,29,1.519,79,2.017,86,2.475,100,1.786,122,0.655,134,2.339,152,3.094,166,2.017,169,1.979,178,2.443,186,1.709,189,1.394,193,2.918,194,1.845,207,0.911,230,2.222,241,1.943,244,3.282,255,1.343,262,0.67,267,1.816,288,2.407,322,2.017,413,2.482,428,2.918,443,2.078,463,2.719,465,1.979,502,2.068,504,2.845,591,1.925,602,1.537,607,3.106,701,2.372,703,1.528,981,2.918,1096,1.547,1247,1.979,1248,2.567,1278,2.664,1351,2.482,1436,3,1592,3.335,1631,2.614,1706,3,1724,2.339,1795,3.204,1801,2.845,2044,3.721,2359,3,2360,2.779,2390,3.5,2464,3.335,2508,2.918,2804,3.5,2823,5.732,2849,4.057,2850,4.057,2851,4.057,2852,4.057,2853,4.057,2854,4.057,2855,4.057,2856,4.057,2857,4.057,2858,4.057,2859,4.057,2860,4.057,2861,3.721,2862,4.057,2863,4.057,2864,4.057,2865,4.057,2866,4.057,2867,4.057,2868,4.057,2869,4.057,2870,4.057,2871,4.057,2872,4.057,2873,4.057,2874,4.057,2875,4.057,2876,4.057,2877,4.057]],["t/1356",[7,1.385,8,2.821,9,0.513,29,1.298,37,2.472,44,1.245,66,1.624,79,2.746,80,2.923,84,4.085,92,1.639,93,3.702,122,0.891,167,1.101,172,3.358,173,1.59,189,1.191,241,2.645,243,1.074,252,3.937,255,1.187,257,1.772,267,1.551,312,3.18,314,1.577,315,1.999,339,1.887,379,2.622,465,1.691,526,1.43,534,2.737,651,1.118,666,1.617,682,2.019,793,2.156,1258,3.628,1563,2.563,1856,2.737,2259,3.327,2285,4.147,2395,2.737,2408,8.184,2766,2.991,2828,2.991,2878,3.467,2879,3.467,2880,3.467,2881,3.467,2882,3.467,2883,3.467,2884,3.467,2885,3.467,2886,3.467,2887,3.467,2888,3.467,2889,3.467,2890,3.467,2891,3.467,2892,3.467,2893,3.467,2894,3.467,2895,3.467,2896,3.467,2897,3.467,2898,3.467,2899,3.467,2900,3.467,2901,3.467,2902,3.467,2903,3.467,2904,3.467,2905,3.467,2906,3.467,2907,3.467,2908,3.467,2909,3.467,2910,3.467,2911,3.467,2912,3.467,2913,3.467,2914,3.467,2915,3.467,2916,3.467]],["t/1359",[9,1.369,44,3.323,103,4.739,122,1.493,189,3.178,269,3.127,358,5.488,2917,8.485]],["t/1361",[100,2.683,150,4.577,261,5.27,302,3.372,369,3.67,2918,9.385,2919,9.385]],["t/1363",[9,0.858,29,2.683,48,2.186,86,1.46,93,3.886,103,1.888,113,4.767,166,1.832,173,2.659,178,1.441,179,2.802,184,2.595,189,1.266,197,2.725,202,4.065,207,1.301,238,2.725,255,1.246,259,1.414,261,4.025,267,2.595,296,2.097,299,2.42,302,1.324,309,2.019,322,4.394,387,1.797,391,2.81,421,2.524,441,2.374,502,2.372,526,1.52,538,2.65,591,1.749,602,1.397,629,1.888,630,2.728,682,1.347,702,1.432,703,2.7,777,3.03,796,1.972,1096,1.405,1246,2.219,1247,1.797,1309,3.18,1390,3.38,1526,5.142,1699,2.292,1700,2.254,1718,2.186,1722,3.03,1801,2.584,1836,2.81,2189,3.18,2281,2.524,2401,3.03,2408,4.767,2920,3.685,2921,3.685,2922,3.685,2923,3.685,2924,3.685,2925,3.685,2926,3.685,2927,3.685,2928,3.685,2929,3.685,2930,3.18,2931,3.685,2932,3.685,2933,3.38,2934,3.685,2935,3.685,2936,3.685,2937,3.685,2938,3.685,2939,3.685,2940,3.685,2941,3.685,2942,3.685,2943,3.685,2944,3.685,2945,3.685,2946,3.685,2947,3.685]],["t/1365",[9,0.803,44,2.786,71,2.122,86,3.072,89,1.657,165,4.198,170,4.012,171,3.902,241,2.598,252,2.082,255,1.166,269,1.834,286,5.628,287,4.412,288,3.219,318,3.173,349,3.129,414,2.937,607,5.193,972,3.374,1331,4.461,2005,6.691,2360,6.199,2390,4.682,2948,5.426,2949,5.426,2950,5.426,2951,5.426,2952,9.05,2953,5.426,2954,5.426,2955,5.426,2956,5.426,2957,5.426,2958,5.426,2959,5.426,2960,5.426,2961,5.426,2962,5.426,2963,5.426,2964,5.426,2965,5.426]],["t/1367",[6,1.643,7,0.902,8,1.1,9,0.397,21,0.849,22,0.744,33,2.989,44,0.965,79,1.335,80,1.421,86,2.671,100,0.768,103,1.376,108,1.548,122,1.21,127,1.115,133,3.005,140,1.005,165,1.453,169,1.31,173,1.231,178,1.05,189,0.922,212,2.11,220,1.405,241,1.286,243,1.389,244,4.033,251,3.225,255,1.449,257,1.439,259,1.03,262,0.953,267,1.202,269,1.516,291,1.528,298,3.541,303,0.866,317,1.31,322,1.335,339,0.917,340,1.63,358,1.593,379,2.128,393,1.617,409,1.839,414,2.427,456,1.617,502,2.682,591,1.274,607,2.229,629,1.376,630,1.263,640,1.024,702,2.243,703,2.175,948,1.883,956,2.898,972,1.67,995,1.643,1288,2.207,1346,2.048,1350,2.207,1407,2.463,1558,4.048,1563,1.985,1724,3.329,1801,3.144,2079,2.207,2110,2.207,2255,2.207,2259,2.701,2354,2.463,2360,3.071,2378,2.048,2399,2.463,2401,4.747,2441,2.463,2576,2.463,2917,2.463,2933,2.463,2966,2.685,2967,2.685,2968,2.685,2969,2.685,2970,2.463,2971,2.685,2972,2.685,2973,2.685,2974,2.685,2975,2.685,2976,5.774,2977,2.685,2978,4.484,2979,2.685,2980,2.685,2981,2.685,2982,2.685,2983,2.685,2984,2.685,2985,2.685,2986,2.685,2987,2.685,2988,2.685,2989,2.685,2990,2.685,2991,2.463,2992,2.685,2993,2.685,2994,2.685,2995,2.685,2996,2.685,2997,2.685,2998,2.685,2999,2.685,3000,2.685,3001,2.685,3002,2.685,3003,2.685,3004,2.463,3005,2.685]],["t/1369",[7,1.618,48,3.391,101,4.11,121,4.359,126,4.11,127,3.342,167,1.815,172,2.443,186,3.39,241,2.737,262,0.943,414,3.094,702,2.221,753,3.296,809,4.699,1033,3.682,1258,3.753,1849,6.943,1994,4.699,2259,3.442,2285,3.442,2508,6.697,2579,4.699,3006,5.715,3007,8.046,3008,5.715,3009,5.715,3010,5.715,3011,5.715,3012,5.715,3013,5.715,3014,5.715,3015,5.715,3016,5.715,3017,5.715,3018,5.715,3019,5.715,3020,5.715,3021,5.715,3022,5.715,3023,5.715,3024,5.715,3025,5.715,3026,5.715]],["t/1371",[178,3.724,244,4.102,702,3.701,1724,5.492,1801,6.678,3027,9.524]],["t/1373",[3,2.3,28,4.264,48,3.421,54,4.976,55,1.889,60,3.787,66,2.38,86,3.208,99,3.586,134,3.325,241,2.761,252,2.213,288,4.804,291,3.281,306,3.95,323,4.264,345,4.147,364,2.315,453,3.372,607,4.025,980,4.264,1336,4.976,1883,4.398,1964,4.976,2260,5.546,2398,4.741,2478,4.976,2596,3.586,2719,4.976,3028,4.147,3029,5.767,3030,5.767,3031,5.767,3032,5.767,3033,5.767,3034,5.767,3035,4.976,3036,5.767,3037,5.767,3038,5.767,3039,5.767,3040,5.767,3041,5.767,3042,5.767,3043,5.767]],["t/1376",[37,3.215,86,2.846,103,3.68,122,1.159,150,3.504,167,2.985,172,3.071,247,4.087,254,4.2,259,2.756,313,3.983,561,6.198,646,5.673,798,4.815,2034,6.198,2285,4.326,2401,5.906,2508,5.166,2579,5.906,2930,6.198,3044,7.184,3045,7.184,3046,7.184,3047,7.184,3048,7.184,3049,7.184,3050,7.184]],["t/1378",[7,1.606,241,3.824,1227,8.271,1436,5.905,1724,6.351,2508,5.744,2579,6.566,2861,7.326,3051,7.986,3052,10.06,3053,7.986,3054,7.986,3055,7.986,3056,7.986,3057,7.986]],["t/1380",[95,4.745,167,3.409,172,3.791,232,6.377,257,2.845,340,3.223,1238,6.762,2285,5.34,2548,8.134,3058,8.867]],["t/1382",[37,4.493,79,3.278,86,2.612,122,1.62,152,5.029,179,3.187,207,1.48,241,4.252,248,3.638,262,1.088,272,4.624,301,2.303,323,4.876,463,4.42,651,2.127,753,3.803,1093,5.207,1351,4.034,2187,5.69,2499,5.69,2610,5.69,3059,6.594,3060,6.594,3061,6.594,3062,6.594,3063,6.594,3064,6.594,3065,6.594,3066,6.594,3067,6.594]],["t/1384",[37,3.969,244,3.819,255,1.905,502,2.935,582,3.969,607,4.408,2231,8.134,2531,7.651,3068,8.867,3069,8.867,3070,8.867]],["t/1386",[3,1.207,4,1.55,29,1.853,33,1.567,37,4.234,44,1.778,62,1.638,66,0.89,86,1.199,92,0.898,102,1.045,119,2.176,134,1.745,167,3.344,172,3.102,186,1.275,202,2.122,207,0.679,241,2.37,244,2.705,247,1.722,255,0.65,257,0.971,266,2.854,267,4.234,269,1.023,286,1.882,287,1.722,302,1.087,314,1.376,322,1.504,340,1.1,414,1.638,443,2.536,607,3.607,640,1.154,650,1.722,654,1.584,722,2.028,798,2.028,952,1.851,965,2.39,972,3.078,982,2.308,1258,5.255,1350,2.488,1436,2.238,1526,3.132,1582,2.611,1633,2.488,1666,4.271,1724,3.622,1938,2.611,2022,2.122,2285,2.981,2359,2.238,2378,2.308,2508,2.176,2531,2.611,2610,4.271,3071,3.026,3072,10.073,3073,3.026,3074,3.026,3075,3.026,3076,3.026,3077,3.026,3078,4.95,3079,3.026,3080,3.026,3081,3.026,3082,3.026,3083,3.026,3084,3.026,3085,3.026,3086,3.026,3087,3.026,3088,3.026,3089,3.026,3090,3.026,3091,3.026,3092,3.026,3093,3.026,3094,3.026,3095,4.95,3096,3.026,3097,3.026,3098,3.026,3099,3.026,3100,3.026,3101,3.026]],["t/1389",[414,4.867,607,4.47,2260,6.159,2327,8.248,2596,5.592,2704,8.248,3102,8.991,3103,8.991,3104,8.991,3105,8.991]],["t/1391",[1367,7.634,1436,7.148,3106,9.667,3107,9.667,3108,9.667]],["t/1393",[5,2.759,61,3.871,324,7.411,461,7.157,579,6.428,2029,8.609,2379,7.157]],["t/1395",[86,4.01,2281,6.934]],["t/1397",[5,3.155,31,3.763,43,5.823,44,3.186,222,5.943,241,4.246,300,6.377,452,7.29,549,5.425,2259,5.34]],["t/1399",[79,4.54,100,1.966,120,2.388,122,1.11,163,4.373,168,2.456,193,6.567,250,2.94,252,2.638,256,4.079,300,6.567,335,4.43,397,5.244,431,5.933,463,4.609,469,3.323,477,4.516,482,5.244,504,4.821,508,5.933,519,5.085,520,5.43,521,5.653,538,4.945,777,5.653,1718,4.079,3109,6.876,3110,6.876]],["t/1401",[44,2.766,108,5.668,133,5.16,163,4.707,165,5.321,168,2.75,247,4.38,262,1.271,286,4.788,287,4.38,397,5.872,411,5.057,422,4.546,423,6.33,487,4.872,1350,6.33,3111,7.063,3112,7.7]],["t/1403",[5,2.537,44,3.1,52,3.375,61,3.56,245,5.784,286,5.367,287,4.909,324,6.814,338,3.802,579,5.911,2030,7.446,2379,6.581,2846,7.916]],["t/1405",[39,4.374,52,3.085,70,4.991,88,4.613,99,4.906,100,2.255,128,5.673,161,3.618,189,2.71,261,4.43,302,3.586,369,3.904,446,5.287,961,7.882,1941,7.236,3113,7.236,3114,7.889]],["t/1407",[5,2.237,9,1.126,29,2.848,44,2.733,86,3.014,93,5.099,111,5.335,178,2.975,207,1.708,255,1.635,267,3.405,281,4.449,477,4.997,607,3.782,701,4.449,702,2.956,703,2.866,1351,5.968,1801,5.335,2281,6.682,2301,6.255]],["t/1409",[5,3.155,31,3.763,43,5.823,44,3.186,222,5.943,241,4.246,300,6.377,452,7.29,549,5.425,2259,5.34]],["t/1411",[9,1.197,31,3.432,44,2.905,122,1.636,125,4.02,140,3.028,166,4.02,167,3.221,189,2.778,220,4.232,256,4.798,358,4.798,400,2.531,538,5.816,539,6.978,540,5.539]],["t/1413",[5,2.537,44,3.1,52,3.375,61,3.56,245,5.784,286,5.367,287,4.909,324,6.814,338,3.802,461,6.581,579,5.911,2030,7.446,2379,6.581]],["t/1415",[6,3.435,7,1.598,8,2.3,9,0.831,39,3.114,43,3.688,66,1.651,86,2.225,100,1.605,120,1.95,147,2.619,150,4.499,161,2.575,163,2.689,165,3.04,168,2.006,169,2.739,173,2.575,174,4.521,175,2.333,186,2.366,199,4.039,202,3.937,207,1.784,209,4.282,210,3.937,219,4.152,247,3.195,256,3.331,259,2.155,261,3.153,266,3.238,267,2.513,271,2.349,418,4.039,422,4.638,500,3.99,717,3.618,1710,3.688,2005,7.958,2034,4.845,3115,5.616]],["t/1417",[7,1.626,9,1.197,21,2.556,86,3.204,161,3.709,238,5.98,439,6.386,502,2.676,582,4.538,682,2.956,798,6.796,1554,3.944,1715,6.203,3116,10.139]],["t/1421",[39,3.38,112,1.114,126,4.383,161,2.795,179,2.945,186,2.568,194,3.827,207,1.368,224,5.01,225,4.648,255,1.808,256,3.616,261,5.412,301,2.939,340,3.058,441,3.926,526,2.514,560,5.01,589,4.506,651,1.966,682,3.076,703,3.169,775,5.258,1099,4.174,1253,4.452,1259,5.01,1278,4.002,1351,3.728,1591,5.258,1856,4.812,2096,4.383,2310,5.01,2394,5.59,3117,6.094,3118,6.094]],["t/1425",[29,3.171,79,3.059,80,3.255,89,1.879,92,1.826,95,3.292,120,2.137,122,0.993,125,3.059,150,3.001,161,2.822,178,2.406,183,6.688,184,2.754,186,3.569,198,5.746,207,1.901,236,3.029,244,2.65,255,1.322,502,3.622,582,2.754,1246,5.101,1247,4.131,1354,5.182,1471,4.692,1542,4.124,1667,4.692,2259,3.706,3119,6.153]],["t/1427",[17,4.601,31,2.715,86,2.534,177,4.122,178,2.502,207,2.381,241,3.064,247,3.64,255,2.384,353,6.625,479,4.201,502,2.117,524,4.731,591,3.036,594,4.382,602,2.424,651,2.063,681,5.953,682,2.339,702,2.486,703,2.41,798,4.288,1631,4.122,1856,5.052,1935,5.26,2281,4.382,3120,6.398,3121,6.398]],["t/1431",[9,0.928,11,3.987,39,3.478,43,4.12,44,3.958,84,3.721,86,2.485,140,2.348,161,2.877,163,3.004,169,3.059,255,1.348,262,1.035,281,3.668,502,2.841,526,2.587,582,3.841,600,4.297,682,3.138,703,3.233,1241,5.879,1473,4.204,1685,4.041,1713,4.041,1714,4.511,1715,3.838,1716,4.638,3122,6.273,3123,6.273]],["t/1433",[3,3.488,9,1.294,161,4.011,165,4.735,167,2.778,172,3.739,207,1.963,255,1.879,258,6.223,340,3.179,1718,5.189]],["t/1436",[1,3.142,29,3.07,47,3.856,57,3.341,82,4.117,100,1.679,110,3.652,117,3.715,122,0.947,169,2.864,173,2.693,178,2.296,207,1.318,236,2.891,237,3.256,244,2.529,248,2.405,255,2.03,261,3.297,275,4.478,303,3.047,349,3.386,417,4.117,502,1.943,584,6.254,591,2.787,649,3.783,651,2.645,682,2.998,702,2.282,703,2.212,958,4.342,1235,5.283,1631,3.783,2006,5.066,2047,5.386,3124,5.872,3125,5.872,3126,5.872]],["t/1438",[5,1.375,7,0.94,79,2.325,80,2.474,86,1.853,134,2.697,135,1.794,161,2.145,163,2.239,165,2.531,168,1.67,170,3.458,171,3.363,174,2.661,184,2.093,186,3.501,207,1.865,214,2.239,219,3.458,248,1.916,251,3.363,255,1.785,258,2.734,259,2.67,271,2.911,303,2.244,311,2.2,342,3.566,354,2.908,371,2.26,378,1.916,379,2.219,582,3.114,588,2.861,600,3.203,607,2.325,651,1.508,682,3.597,964,3.279,1236,6.119,1237,5.307,1243,2.861,1253,2.474,1260,4.327,1262,3.566,1532,3.566,1606,3.458,1935,3.845,2259,2.816,2306,3.845,2970,6.383,3127,4.676,3128,4.676]],["t/1440",[131,5.325]],["t/1443",[0,4.866,5,2.088,44,3.352,95,3.801,122,1.146,207,2.094,257,2.28,259,2.726,262,1.173,290,4.866,314,3.231,315,5.38,322,3.532,339,3.188,395,4.577,414,5.051,607,3.532,650,4.042,1354,5.708,1542,6.253,3004,6.517,3129,7.104]],["t/1445",[9,1.517,29,3.419,68,3.053,79,3.418,80,3.638,86,3.618,92,2.04,140,2.574,178,2.689,192,3.56,250,2.94,255,1.962,258,4.021,290,4.71,303,2.218,504,4.821,591,3.264,664,4.945,1532,5.244,1594,7.879,2259,4.141,2281,6.255,2606,6.308,2836,6.308,3130,6.876]],["t/1447",[5,2.263,7,1.977,8,3.154,44,3.531,92,2.285,100,2.201,150,3.755,262,1.271,271,3.221,291,4.38,315,4.44,320,6.455,337,4.324,339,2.631,353,5.16,542,4.872,549,4.71,1262,5.872,2301,6.33]],["t/1450",[9,0.81,12,2.322,29,2.049,44,1.966,79,2.72,92,2.315,122,0.883,140,2.049,163,4.354,169,2.669,178,2.14,194,2.489,207,1.751,232,3.935,252,2.994,255,1.954,303,1.765,311,2.574,354,3.403,363,4.046,369,2.14,422,2.531,476,4.321,477,3.594,501,3.155,502,1.811,651,1.765,682,2,753,3.155,798,3.668,1278,3.594,1354,4.773,1542,3.668,1689,7.476,2259,3.296,2723,5.02,3131,5.472,3132,5.472,3133,5.472,3134,5.472,3135,5.472,3136,5.472,3137,5.472,3138,5.472,3139,5.472,3140,5.472]],["t/1452",[65,5.077,86,2.244,116,5.359,150,2.763,179,2.738,186,2.387,188,3.88,189,1.946,190,3.65,192,4.798,198,4.744,199,5.751,202,5.607,204,4.611,207,1.271,218,4.074,223,3.523,234,4.888,255,1.217,258,5.419,272,3.972,352,3.523,441,3.65,456,3.412,501,3.267,529,3.103,588,3.466,703,2.134,983,3.584,1033,3.65,1253,2.997,1351,3.466,1706,4.189,1891,4.189,2114,7.335,2281,3.88,2299,4.657,3141,5.665,3142,5.665,3143,5.665]],["t/1454",[5,2.804,7,1.478,9,1.087,79,3.653,92,2.18,120,2.552,161,3.37,215,5.152,256,4.359,257,2.358,258,4.296,259,2.819,291,4.18,338,3.237,541,6.041,542,4.649,543,4.074,544,6.34,545,6.74,546,6.34,547,7.274,548,5.802,549,4.495,1770,5.802]],["t/1457",[3,2.685,5,1.979,9,0.996,12,2.857,29,2.52,68,2.989,89,2.056,140,3.371,178,2.633,184,3.013,207,2.021,246,4.978,248,2.758,258,3.937,291,5.122,295,4.119,337,3.781,363,4.978,477,4.421,607,3.347,614,4.512,1253,3.562,1709,4.978,1891,4.978,2064,5.134,2299,5.535,2359,4.978,2508,4.842,2570,6.176,2580,6.176,2828,5.809]],["t/1461",[7,1.712,61,3.512,110,5.296,252,3.267,288,5.052,413,5.209,414,5.667,428,6.124,1281,7.811,2476,8.646,3144,7.811]],["t/1463",[0,3.349,5,1.437,7,1.891,12,3.052,27,3.277,34,4.02,40,2.991,44,2.584,61,2.017,66,1.437,67,2.531,98,2.321,179,2.363,236,2.408,243,1.515,345,3.517,350,2.385,356,3.094,409,3.349,414,2.647,435,4.219,504,3.428,519,5.318,543,4.73,660,3.041,753,2.82,954,4.219,1133,4.219,1280,4.02,1375,5.172,1473,3.277,1599,4.485,1942,4.219,2176,3.349,2448,3.729,2476,3.729,2522,4.219,2701,4.485,3145,3.277,3146,3.616,3147,4.485,3148,4.485,3149,3.616,3150,4.89,3151,4.89,3152,4.89,3153,4.89,3154,4.89,3155,4.147,3156,4.485,3157,4.89,3158,4.89,3159,4.89,3160,4.89,3161,4.89,3162,4.89,3163,7.192,3164,4.219,3165,4.485]],["t/1465",[7,1.808,60,5.905,110,5.592,248,3.683,338,3.961,414,4.867,3155,6.695,3166,7.758]],["t/1467",[7,1.523,23,4.529,28,3.881,44,1.886,48,3.114,52,2.053,81,7.304,179,3.659,252,2.014,295,3.211,340,1.908,413,3.211,414,4.809,447,3.211,449,4.879,487,3.321,510,2.841,526,2.165,616,2.747,1439,4.529,1504,4.145,1668,4.815,1806,4.315,1865,4.815,1989,4.529,2022,3.68,2274,4.815,2448,6.775,2476,6.775,3144,8.149,3164,4.529,3167,5.249,3168,4.815,3169,5.249,3170,5.249,3171,5.249,3172,5.249,3173,5.249,3174,5.249,3175,5.249,3176,5.249,3177,5.249,3178,5.249,3179,5.249,3180,5.249,3181,5.249,3182,4.315,3183,5.249]],["t/1469",[7,2.118,60,4.771,61,2.997,66,2.135,110,4.518,114,6.664,127,3.018,183,5.737,247,4.133,369,2.841,449,4.68,606,5.372,753,4.189,972,4.518,981,5.225,2022,5.094,2342,5.973,2474,6.268,3165,6.664,3184,7.265,3185,7.265,3186,7.265,3187,7.265,3188,6.664,3189,7.265]],["t/1471",[7,1.808,37,4.024,345,6.466,628,7.758,1351,5.501,1412,7.392,2448,8.253,2476,8.253]],["t/1473",[61,3.761,112,1.667,345,6.558,1351,5.579,1757,9.417,2448,6.954,3182,7.497,3190,9.119]],["t/1475",[7,1.003,27,2.047,38,1.463,65,2.732,87,2.412,98,2.367,112,1.891,122,0.493,127,3.944,137,6.581,143,2.412,147,3.751,247,1.738,350,3.922,369,3.375,382,5.002,392,2.142,408,2.259,438,2.006,450,2.636,457,2.636,558,6.694,593,2.636,609,2.092,681,1.84,753,3.646,972,1.9,1629,2.259,1773,2.802,1938,4.304,2335,2.802,2342,2.512,2448,2.33,2449,2.412,2476,2.33,3188,7.916,3191,3.055,3192,6.322,3193,3.055,3194,3.055,3195,3.055,3196,3.055,3197,3.055,3198,3.055,3199,3.055,3200,3.055,3201,3.055,3202,3.055,3203,3.055,3204,3.055,3205,3.055,3206,3.055,3207,3.055,3208,3.055,3209,3.055,3210,3.055,3211,3.055,3212,3.055,3213,3.055,3214,3.055,3215,3.055,3216,3.055,3217,10.555,3218,4.988,3219,4.988,3220,4.988,3221,4.988,3222,3.055,3223,3.055,3224,3.055,3225,3.055,3226,3.055,3227,3.055,3228,3.055,3229,3.055,3230,3.055,3231,2.636,3232,3.055,3233,3.055]],["t/1477",[7,0.889,11,3.044,20,2.622,21,1.397,24,2.962,25,3.268,28,3.268,32,2.514,55,2.184,60,2.902,61,1.823,68,1.962,71,2.608,80,2.338,86,2.642,98,2.097,99,2.748,122,1.076,125,2.197,140,1.654,161,2.027,163,2.116,198,5.308,241,2.116,244,1.903,248,1.81,283,4.054,288,4.766,342,3.37,383,3.633,384,4.054,386,2.748,397,3.37,449,2.847,650,4.57,1257,3.813,1511,3.813,1724,2.548,1890,3.813,2359,4.932,2449,3.49,2478,3.813,2522,3.813,2596,5.564,3155,2.548,3234,6.126,3235,4.419,3236,4.419,3237,4.054,3238,4.419,3239,6.118,3240,4.054,3241,4.054,3242,4.419,3243,4.054,3244,6.67,3245,4.419,3246,4.419,3247,4.419,3248,4.419,3249,3.633,3250,4.419,3251,4.419]],["t/1479",[0,3.655,16,3.946,27,3.576,44,1.917,57,3.036,65,2.923,70,3.376,98,3.637,99,3.318,110,3.318,112,1.4,198,3.166,251,3.837,258,3.12,287,3.036,289,2.855,414,2.888,439,4.214,446,3.576,449,3.438,538,5.511,678,4.303,753,3.077,1239,5.666,1513,3.837,1617,4.387,1694,4.604,1891,3.946,2176,7.623,2281,3.655,3145,5.136,3166,6.612,3231,4.604,3243,8.225,3249,4.387,3252,4.895,3253,5.336,3254,3.946,3255,7.029,3256,5.336,3257,5.336,3258,5.336,3259,5.336]],["t/1481",[52,3.724,65,5.217,287,5.418,414,6.062,2176,6.523]],["t/1483",[20,5.735,204,5.574,296,5.5,382,6.012,2176,6.621]],["t/1485",[44,4.21,55,2.717,60,5.448,68,3.683,83,6.55,99,6.407,352,5.159,360,6.326,579,5.682,1667,6.326,1749,7.609,3260,7.609]],["t/1487",[33,4.034,44,2.8,48,4.623,62,4.218,179,3.766,198,5.876,360,5.943,1239,5.762,1429,6.724,1607,5.762,2176,5.338,3145,5.223,3146,5.762,3166,8.546,3254,7.324,3261,7.793,3262,7.148,3263,6.407]],["t/1489",[31,3.049,36,5.478,44,2.581,61,2.963,70,4.545,110,4.467,198,5.576,227,4.326,248,2.943,287,4.087,349,4.142,529,3.935,622,5.478,678,4.034,753,5.42,1467,6.198,1936,6.59,3145,4.815,3148,6.59,3249,7.727,3254,6.95,3255,6.59,3264,7.184,3265,7.184]],["t/1491",[7,1.66,24,3.972,44,3.411,52,2.317,58,2.812,60,5.42,68,2.631,98,2.812,99,5.132,135,2.274,287,4.695,301,2.07,309,3.246,311,2.788,338,2.611,360,4.519,413,3.625,447,3.625,449,3.818,500,2.975,753,3.417,1667,4.519,1718,5.633,1724,3.417,1942,5.113,1982,4.872,2449,4.679,2596,5.132,3028,5.935,3155,4.759,3234,4.519,3260,5.436,3263,4.872,3266,5.926,3267,5.926,3268,5.926]],["t/1493",[16,4.423,44,2.149,46,5.486,60,3.928,67,3.096,71,2.339,80,3.164,82,4.194,86,2.369,99,6.412,179,4.611,198,5.661,244,2.576,248,2.45,294,4.917,387,4.051,479,3.928,528,4.301,579,4.097,980,4.423,1331,6.829,1563,4.423,1633,7.845,1891,4.423,2305,5.486,3237,5.486,3249,6.829,3254,7.056,3269,5.981,3270,5.981,3271,7.619]],["t/1495",[21,2.765,52,3.42,60,5.744,71,3.42,98,4.151,287,4.976,2596,7.134,3155,5.044,3234,8.116]],["t/1497",[7,1.192,37,2.652,58,2.812,83,4.679,99,3.685,121,4.519,247,3.371,248,2.428,254,3.465,262,0.978,306,4.059,358,4.896,411,3.892,414,3.208,528,4.262,589,4.382,618,4.262,619,4.382,651,1.911,699,4.155,753,6.745,995,3.625,1033,3.818,1562,5.113,1718,3.516,1901,7.57,2306,4.872,2596,3.685,3035,5.113,3111,5.436,3272,5.926,3273,5.926,3274,5.436,3275,5.436,3276,7.57,3277,5.926,3278,5.926]],["t/1499",[7,0.999,13,4.316,20,1.804,24,2.038,43,1.997,57,2.827,60,1.997,68,1.35,70,1.924,79,1.511,82,3.484,83,3.924,98,2.991,112,1.152,122,0.802,125,1.511,140,2.724,145,2.623,161,2.279,179,1.469,212,1.43,223,1.891,241,1.456,248,1.246,287,1.73,290,2.083,294,2.5,300,2.187,306,2.083,310,1.73,342,3.789,351,2.789,383,2.5,440,1.665,466,2.083,487,3.144,506,2.789,540,2.083,565,5.78,574,2.319,579,2.083,619,2.248,620,3.674,621,2.5,663,3.789,683,2.623,752,2.623,753,5.239,807,1.86,1093,2.401,1132,2.623,1134,2.789,1358,2.401,1451,5.78,1721,2.5,1770,2.401,2068,2.401,2110,2.5,2118,2.623,2176,2.083,2236,8.178,2342,4.085,2449,4.976,2499,2.623,2596,1.891,2991,2.789,3035,2.623,3231,2.623,3271,2.789,3274,2.789,3275,2.789,3276,2.789,3279,3.04,3280,3.04,3281,3.04,3282,3.04,3283,3.04,3284,3.04,3285,4.969,3286,3.04,3287,3.04,3288,3.04,3289,3.04,3290,3.04,3291,3.04,3292,3.04,3293,3.04,3294,6.301,3295,3.04,3296,3.04,3297,3.04,3298,4.558,3299,3.04,3300,3.04,3301,3.04,3302,3.04,3303,3.04,3304,4.969,3305,3.04,3306,3.04,3307,3.04,3308,3.04,3309,3.04,3310,3.04,3311,3.04,3312,2.789]],["t/1501",[0,3.625,7,1.064,24,3.547,27,3.547,44,2.737,48,3.14,52,2.069,62,2.865,65,2.899,66,1.556,100,2.551,103,2.711,172,3.256,204,3.052,248,2.168,288,3.14,289,2.832,291,4.334,311,2.49,349,3.052,414,2.865,453,3.094,500,2.657,582,3.409,753,4.393,790,4.179,954,4.566,1097,3.291,1133,4.566,1439,4.566,1513,3.806,1564,4.179,1718,3.14,1890,4.566,2719,4.566,3145,6.543,3146,5.633,3147,4.854,3149,3.913,3155,5.629,3263,4.351,3313,5.292,3314,6.573,3315,5.292,3316,5.292]],["t/1503",[12,3.154,52,2.907,66,2.185,67,3.848,172,3.177,243,2.978,288,4.409,291,4.229,338,3.275,481,5.345,1126,6.111,1632,6.413,3145,4.982,3155,6.722,3156,6.818,3168,6.818,3298,6.818,3317,7.433,3318,7.433,3319,7.433]],["t/1505",[0,3.227,7,1.678,40,2.882,44,2.513,53,3.035,57,2.68,59,4.321,75,3.592,86,3.306,98,3.32,99,4.351,102,1.627,113,3.873,122,1.129,126,3.388,137,3.592,193,3.388,210,3.303,229,2.413,288,2.795,340,1.712,345,3.388,387,3.412,391,3.592,487,2.98,501,2.716,543,3.879,591,2.236,616,2.465,617,2.837,753,2.716,1027,4.064,1513,3.388,1606,3.483,1718,2.795,1724,2.716,1757,4.064,1982,3.873,2022,3.303,2239,4.064,2255,3.873,2596,2.93,2930,4.064,3145,4.689,3155,5.963,3234,3.592,3239,4.321,3240,4.321,3241,4.321,3320,4.711,3321,4.711,3322,4.711,3323,4.711,3324,4.711,3325,4.711,3326,4.711,3327,4.711,3328,4.711,3329,4.711]],["t/1507",[5,2.185,27,4.982,48,4.409,119,5.345,262,1.227,290,5.091,344,3.769,428,5.345,430,7.328,753,4.286,1126,6.111,1239,5.496,1989,6.413,1994,7.9,3146,7.105,3149,5.496,3155,4.286,3164,6.413,3330,8.291,3331,6.413,3332,6.413]],["t/1509",[44,3.019,179,4.061,188,7.113,230,4.603,262,1.387,417,5.892,3155,6.499,3333,10.385,3334,8.404,3335,8.404,3336,8.404]],["t/1511",[7,1.478,48,4.359,122,1.539,163,4.567,247,4.18,248,3.01,291,4.18,387,4.652,647,5.152,650,5.426,1952,8.23,2001,6.74,3028,5.284,3149,5.433,3155,6.107,3337,6.041,3338,9.538,3339,7.348]],["t/1513",[262,1.62,3028,7.058,3155,5.659,3337,8.069]],["t/1515",[1,4.327,44,3.643,66,2.377,204,4.663,387,3.944,483,6.649,607,4.02,650,4.601,1751,5.42,3028,5.816,3145,5.42,3149,5.98,3155,5.847,3254,5.98,3340,6.649,3341,6.978]],["t/1517",[7,1.626,48,4.798,53,5.21,68,3.591,163,4.855,189,2.778,241,3.872,607,4.02,3028,7.292,3145,5.42,3146,5.98,3155,5.847,3332,6.978,3340,6.649,3342,8.087]],["t/1519",[31,3.816,44,3.23,100,2.57,127,3.735,244,3.872,1099,6.159,1770,7.1,2596,5.592,3155,5.185,3343,8.991]],["t/1521",[44,3.019,100,2.403,112,1.536,163,4.024,169,4.099,229,4.305,244,4.854,1137,7.709,1718,4.986,2016,7.251,2291,7.709,3155,5.988]],["t/1523",[32,3.83,44,3.645,100,2.574,109,3.284,122,1.086,169,3.284,203,4.055,244,3.878,602,2.551,650,3.83,678,3.781,786,4.842,1239,4.978,1564,5.316,1958,5.809,2026,6.176,2378,6.866,2596,6.736,3113,6.176,3155,6.245,3314,5.809,3344,9.004]],["t/1525",[7,1.712,44,3.761,53,5.486,98,4.041,109,4.153,122,1.374,247,4.844,650,4.844,791,6.494,1249,6.724,2596,5.296,3145,5.707,3155,4.91]],["t/1528",[5,1.216,7,0.832,12,1.755,24,2.772,31,1.755,39,2.293,44,4.1,48,3.762,58,1.963,62,2.238,66,1.216,80,2.188,100,1.182,109,2.017,122,1.023,161,1.896,198,3.762,204,2.385,244,2.731,262,0.683,287,2.353,360,3.154,387,3.093,429,2.53,483,3.4,534,3.265,647,2.899,650,4.919,753,3.656,1033,2.664,1239,3.058,1429,3.568,1606,3.058,1751,2.772,2359,3.058,2596,5.377,2804,5.471,3028,2.974,3145,2.772,3146,3.058,3149,3.058,3155,5.907,3182,3.4,3234,3.154,3252,3.793,3254,4.689,3262,3.793,3330,5.471,3331,3.568,3337,3.4,3340,5.213,3341,5.471,3345,3.793,3346,3.793,3347,3.793,3348,3.793,3349,5.816,3350,3.793,3351,4.135]],["t/1530",[7,1.031,12,2.176,24,2.118,31,1.341,39,1.752,44,3.572,48,3.839,58,1.5,60,2.075,80,1.672,83,2.495,100,0.903,109,1.541,122,0.827,125,1.571,163,2.455,179,2.478,198,4.417,222,2.118,224,2.598,244,3.525,262,0.846,287,1.798,289,1.691,295,1.933,387,1.541,429,1.933,441,3.304,443,1.619,449,3.304,453,1.848,483,4.216,534,2.495,622,3.91,647,2.216,650,3.681,753,2.957,778,2.075,791,2.41,1033,2.036,1239,3.791,1346,2.41,1351,1.933,1563,2.337,1724,2.957,1751,4.99,1776,2.41,2068,2.495,2176,3.512,2359,2.337,2596,4.63,3028,4.653,3146,3.791,3149,2.337,3155,5.547,3182,2.598,3234,2.41,3254,5.505,3263,6.121,3312,2.899,3314,2.727,3330,4.424,3331,2.727,3332,4.424,3337,2.598,3340,4.216,3341,2.727,3345,2.899,3346,2.899,3347,2.899,3348,2.899,3349,4.703,3350,2.899,3352,3.16,3353,3.16,3354,3.16,3355,3.16,3356,3.16,3357,3.16,3358,3.16,3359,3.16,3360,3.16,3361,3.16]]],"invertedIndex":[["",{"_index":112,"t":{"17":{"position":[[222,4]]},"23":{"position":[[326,4]]},"25":{"position":[[55,1],[214,1]]},"37":{"position":[[60,1]]},"41":{"position":[[140,1],[142,1],[158,3],[178,1],[187,1],[203,3]]},"52":{"position":[[669,3],[703,3],[735,3],[756,3],[775,3],[815,3],[840,3],[882,3],[908,3],[933,3],[1142,3],[1178,3],[1212,3],[1235,3],[1256,3],[1298,3],[1325,3],[1369,3],[1397,3],[1424,3],[3043,3],[3200,3],[3204,3],[3475,1],[3477,1],[3489,1],[3491,2],[3870,3],[3906,3],[3940,3],[3975,1],[4040,1],[4173,3],[4193,1],[4258,1],[4391,3],[4409,1],[4472,1],[4605,3],[4646,1],[4725,1],[4793,1],[4929,3],[4933,3]]},"54":{"position":[[218,1],[712,1],[755,1],[838,1],[985,1],[1363,1],[1523,1],[1556,1]]},"61":{"position":[[1145,3],[1374,3]]},"67":{"position":[[712,1]]},"73":{"position":[[93,1],[179,1],[227,1],[295,1],[457,1],[542,1],[622,1],[733,1],[824,1]]},"93":{"position":[[259,1],[282,1],[315,1],[317,1],[389,1],[416,1],[482,1],[509,1],[621,3]]},"107":{"position":[[672,1],[893,1],[999,1]]},"109":{"position":[[364,3],[381,3],[524,1],[564,3],[572,3],[590,1]]},"117":{"position":[[1776,1],[3557,1],[4284,1]]},"119":{"position":[[963,1],[1184,1],[1288,1],[1850,3],[1867,3],[2010,1],[2050,3],[2058,3],[2076,1]]},"121":{"position":[[51,1],[411,1],[533,1],[548,4]]},"141":{"position":[[382,3],[400,3]]},"145":{"position":[[1220,3],[1238,3]]},"148":{"position":[[23,1]]},"164":{"position":[[364,3],[381,3],[390,1],[500,1],[502,1],[519,3],[538,3],[558,1],[566,3],[586,1],[588,1],[597,3],[617,1],[626,3],[646,1],[755,3],[832,1]]},"172":{"position":[[224,1],[515,3],[1158,1],[1569,1],[1602,1],[2011,1],[2139,1],[2167,1],[2315,1],[2346,1],[2359,1]]},"174":{"position":[[586,1],[675,3],[692,3],[701,1],[811,1],[813,1],[830,3],[849,3],[869,1],[877,3],[897,1],[899,1],[908,3],[928,1],[937,3],[957,1],[1066,3],[1143,1],[1598,1],[2176,1],[2207,1]]},"176":{"position":[[797,2]]},"202":{"position":[[369,4],[534,1],[805,1],[1630,3],[1784,1],[1855,3],[1861,1],[1913,1]]},"219":{"position":[[1480,4],[2271,3],[2328,3],[2364,3],[2441,3]]},"228":{"position":[[95,2],[168,3],[210,3],[214,3],[218,2],[221,3],[225,3],[229,3],[322,3],[337,3],[343,1],[345,1],[367,1],[369,1],[374,3],[401,3],[407,3],[428,3],[434,3],[452,3],[458,1],[460,1],[474,1],[484,3],[490,1],[492,3],[498,1],[518,3],[532,1],[539,3],[551,2],[581,3],[595,2],[603,3],[615,1],[638,3],[652,1],[659,3],[671,2],[704,3],[718,2],[726,3],[738,2],[755,3],[769,2],[775,3],[787,2],[808,1],[810,1],[822,2],[828,3]]},"231":{"position":[[253,3]]},"233":{"position":[[164,1],[353,3],[357,1],[372,1],[376,1],[378,3],[388,3],[392,1],[401,3],[405,1],[414,1],[416,1],[425,1],[427,1],[429,3]]},"257":{"position":[[175,1],[307,1],[348,1],[385,1],[565,1]]},"259":{"position":[[971,3],[1096,3]]},"267":{"position":[[899,3]]},"272":{"position":[[201,3]]},"274":{"position":[[216,3]]},"288":{"position":[[314,3],[499,3],[522,3]]},"292":{"position":[[356,3]]},"296":{"position":[[186,3]]},"306":{"position":[[70,1],[518,3],[753,3]]},"311":{"position":[[376,3]]},"359":{"position":[[763,3]]},"361":{"position":[[396,1]]},"381":{"position":[[2318,3],[2704,1],[2798,1]]},"385":{"position":[[537,1]]},"387":{"position":[[617,3]]},"394":{"position":[[632,1],[736,1],[837,1]]},"401":{"position":[[1175,1],[1191,1]]},"407":{"position":[[1529,1],[2530,1],[2603,1]]},"411":{"position":[[164,1],[201,1],[273,1],[558,3],[604,1],[1062,3],[1687,3],[2016,3]]},"413":{"position":[[662,4]]},"415":{"position":[[87,4]]},"429":{"position":[[176,1]]},"433":{"position":[[197,1],[927,3],[1313,1]]},"451":{"position":[[286,1],[299,1],[453,1],[488,1]]},"455":{"position":[[403,1],[430,1],[473,1]]},"459":{"position":[[79,1],[183,1]]},"468":{"position":[[1191,1],[1423,1],[1448,1],[1640,1],[2032,1]]},"491":{"position":[[50,3],[134,3]]},"495":{"position":[[163,3],[263,3],[282,3],[382,3],[444,3]]},"503":{"position":[[163,1]]},"505":{"position":[[41,1]]},"507":{"position":[[55,1]]},"509":{"position":[[60,1]]},"511":{"position":[[75,1]]},"513":{"position":[[75,1]]},"515":{"position":[[12,1],[28,1],[30,5],[36,1]]},"517":{"position":[[953,1]]},"521":{"position":[[123,1]]},"523":{"position":[[12,1],[30,1]]},"525":{"position":[[525,1]]},"529":{"position":[[362,1],[366,1]]},"531":{"position":[[19,1]]},"535":{"position":[[136,3]]},"539":{"position":[[14,1],[16,5],[22,1],[43,1]]},"545":{"position":[[124,3]]},"547":{"position":[[14,1],[16,5],[22,1],[43,1]]},"553":{"position":[[217,1]]},"555":{"position":[[16,1],[29,1]]},"561":{"position":[[327,1]]},"563":{"position":[[14,1],[16,5],[22,1],[43,1]]},"569":{"position":[[14,1],[30,1]]},"575":{"position":[[211,3]]},"577":{"position":[[14,1],[16,5],[22,1],[43,1]]},"579":{"position":[[66,1]]},"585":{"position":[[279,1]]},"587":{"position":[[14,1],[16,5],[22,1],[43,1]]},"589":{"position":[[1096,1]]},"593":{"position":[[106,3]]},"595":{"position":[[7,1],[9,5],[15,1]]},"599":{"position":[[134,3],[453,4]]},"601":{"position":[[96,3],[232,4]]},"606":{"position":[[95,3],[422,3]]},"608":{"position":[[105,3],[281,3]]},"610":{"position":[[14,1],[16,5],[22,1],[43,1],[66,1]]},"614":{"position":[[314,3],[354,3]]},"616":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"622":{"position":[[24,1]]},"624":{"position":[[77,1]]},"630":{"position":[[130,3]]},"632":{"position":[[7,1],[9,5],[15,1]]},"637":{"position":[[132,3],[451,4]]},"639":{"position":[[94,3],[230,4]]},"642":{"position":[[134,3],[453,4]]},"644":{"position":[[96,3],[232,4]]},"647":{"position":[[98,4],[330,3],[376,1],[1053,3]]},"649":{"position":[[102,4]]},"651":{"position":[[7,1],[9,5],[15,1],[45,1]]},"655":{"position":[[109,3],[121,3],[201,1],[218,1],[241,3]]},"657":{"position":[[102,3],[114,3]]},"659":{"position":[[54,5],[60,1]]},"667":{"position":[[14,1],[30,1]]},"681":{"position":[[97,3],[656,3]]},"683":{"position":[[109,3],[345,1],[453,3]]},"689":{"position":[[106,3],[155,3]]},"691":{"position":[[109,3]]},"695":{"position":[[43,1]]},"703":{"position":[[68,1],[70,5],[76,1],[92,1]]},"709":{"position":[[20,1]]},"711":{"position":[[65,1],[67,5],[73,1]]},"717":{"position":[[34,1]]},"727":{"position":[[11,1]]},"733":{"position":[[146,1]]},"735":{"position":[[12,1]]},"745":{"position":[[14,1],[16,5],[22,1]]},"751":{"position":[[14,1],[16,5],[22,1],[43,1]]},"757":{"position":[[95,3],[382,3],[532,3]]},"765":{"position":[[0,3],[4,1]]},"773":{"position":[[0,5],[6,1]]},"784":{"position":[[324,1]]},"786":{"position":[[143,1]]},"788":{"position":[[14,1],[16,5],[22,1],[43,1]]},"794":{"position":[[20,1]]},"799":{"position":[[126,3]]},"801":{"position":[[194,3]]},"803":{"position":[[0,3],[4,1]]},"811":{"position":[[10,1]]},"817":{"position":[[71,3],[107,3],[144,1],[205,3]]},"823":{"position":[[14,1],[16,5],[22,1],[43,1]]},"829":{"position":[[70,1],[170,1]]},"831":{"position":[[14,1]]},"835":{"position":[[14,1]]},"839":{"position":[[23,1],[69,1],[102,1]]},"842":{"position":[[23,3],[41,3]]},"844":{"position":[[132,3],[151,3]]},"846":{"position":[[134,3],[160,3],[342,3]]},"848":{"position":[[16,1]]},"850":{"position":[[598,1]]},"860":{"position":[[47,3],[125,3],[129,4]]},"862":{"position":[[43,3],[121,3]]},"867":{"position":[[14,1]]},"873":{"position":[[212,3]]},"875":{"position":[[7,1]]},"879":{"position":[[29,3],[121,3]]},"881":{"position":[[33,3],[93,3]]},"888":{"position":[[146,3],[189,3],[260,3],[286,3]]},"890":{"position":[[235,3],[376,3]]},"892":{"position":[[167,3],[193,3],[264,3],[290,3]]},"898":{"position":[[12,1]]},"906":{"position":[[12,1]]},"916":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"920":{"position":[[371,3],[598,3],[814,1],[831,1],[901,1],[918,1],[941,3]]},"922":{"position":[[273,3],[366,3],[446,3],[485,3],[578,3],[603,1]]},"927":{"position":[[48,3]]},"929":{"position":[[79,1],[183,1]]},"931":{"position":[[7,1]]},"937":{"position":[[350,3]]},"947":{"position":[[14,1],[16,5],[22,1],[43,1]]},"955":{"position":[[7,1]]},"961":{"position":[[494,3]]},"963":{"position":[[247,3]]},"965":{"position":[[0,5],[6,1]]},"973":{"position":[[14,1],[16,5],[22,1],[43,1]]},"994":{"position":[[314,3],[499,3],[522,3],[842,3],[862,3],[871,3],[892,3],[913,3]]},"996":{"position":[[7,1]]},"998":{"position":[[85,1]]},"1000":{"position":[[48,3]]},"1002":{"position":[[83,3]]},"1007":{"position":[[59,3],[155,1]]},"1009":{"position":[[74,3]]},"1011":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1013":{"position":[[357,1]]},"1017":{"position":[[54,3]]},"1019":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1027":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1031":{"position":[[77,3],[109,3]]},"1033":{"position":[[65,3],[97,3]]},"1041":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1051":{"position":[[14,1]]},"1053":{"position":[[519,1]]},"1055":{"position":[[491,1],[524,1],[542,1],[573,1],[598,1],[621,1]]},"1066":{"position":[[424,3],[444,3]]},"1071":{"position":[[266,3],[315,3]]},"1077":{"position":[[233,1]]},"1083":{"position":[[7,1],[9,5],[15,1]]},"1087":{"position":[[98,3],[327,3]]},"1089":{"position":[[102,3],[194,3]]},"1091":{"position":[[7,1],[9,5],[15,1]]},"1095":{"position":[[53,3],[263,4]]},"1097":{"position":[[459,4]]},"1099":{"position":[[98,4],[513,3],[1138,3]]},"1101":{"position":[[102,4]]},"1103":{"position":[[12,1]]},"1111":{"position":[[111,1]]},"1113":{"position":[[14,1],[16,5],[22,1],[43,1],[45,5],[51,1]]},"1121":{"position":[[14,1],[16,5],[22,1],[43,1]]},"1127":{"position":[[149,3]]},"1129":{"position":[[7,1],[9,5],[15,1]]},"1133":{"position":[[325,3],[371,3]]},"1135":{"position":[[275,3]]},"1140":{"position":[[48,3]]},"1142":{"position":[[79,1],[183,1]]},"1147":{"position":[[48,3]]},"1149":{"position":[[79,1],[183,1]]},"1156":{"position":[[79,1],[183,1]]},"1162":{"position":[[43,3]]},"1164":{"position":[[47,3],[249,4]]},"1167":{"position":[[73,3]]},"1169":{"position":[[164,3]]},"1175":{"position":[[7,1],[9,5],[15,1],[45,1]]},"1179":{"position":[[109,3],[121,3],[199,1],[216,1],[239,3]]},"1181":{"position":[[102,3],[114,3]]},"1183":{"position":[[0,5],[6,1],[13,1]]},"1197":{"position":[[66,1]]},"1203":{"position":[[132,3]]},"1209":{"position":[[103,3]]},"1213":{"position":[[946,3]]},"1224":{"position":[[312,1],[630,3],[634,3],[722,3],[1985,3],[2113,3]]},"1229":{"position":[[628,3],[632,3],[720,3],[2101,3]]},"1255":{"position":[[124,1]]},"1421":{"position":[[405,3]]},"1473":{"position":[[61,1]]},"1475":{"position":[[97,1],[130,2],[164,3],[199,4],[235,5],[272,6],[464,1],[719,1],[733,1],[747,1],[1224,2]]},"1479":{"position":[[65,2],[653,2]]},"1499":{"position":[[470,1],[1405,2],[1441,2]]},"1521":{"position":[[109,1]]}}}],["0",{"_index":175,"t":{"33":{"position":[[81,2],[84,1]]},"52":{"position":[[3445,2],[3578,2]]},"65":{"position":[[250,2]]},"84":{"position":[[712,1],[726,3]]},"86":{"position":[[364,2]]},"107":{"position":[[919,3],[1026,3]]},"109":{"position":[[526,1],[592,2],[644,2]]},"117":{"position":[[1778,2],[2389,2],[2392,2],[2395,2],[2487,2],[2490,2],[2493,2],[2525,2],[2528,2],[2612,2],[4286,1]]},"119":{"position":[[1208,3],[1315,3],[2012,1],[2078,2],[2130,2],[3490,2],[3493,2],[3496,2],[3588,2],[3591,2],[3594,2],[3626,2],[3629,2],[3713,2]]},"121":{"position":[[356,2],[359,1],[427,2],[430,1],[1834,2],[1837,2],[1840,2],[1843,2],[1846,1]]},"143":{"position":[[1617,1]]},"145":{"position":[[1611,1]]},"176":{"position":[[406,2],[409,1]]},"202":{"position":[[89,2],[92,1]]},"213":{"position":[[11,1],[13,1]]},"228":{"position":[[246,1]]},"233":{"position":[[374,1]]},"265":{"position":[[703,1],[785,1],[888,1],[957,1]]},"288":{"position":[[382,1]]},"306":{"position":[[88,2],[91,1],[97,1]]},"331":{"position":[[694,1]]},"333":{"position":[[249,2]]},"394":{"position":[[656,3],[763,3],[857,1]]},"443":{"position":[[181,1]]},"455":{"position":[[268,1],[769,2],[872,2],[905,2]]},"457":{"position":[[220,1],[245,1]]},"459":{"position":[[103,3],[210,3]]},"505":{"position":[[1530,2],[1654,1],[1677,2]]},"511":{"position":[[563,2],[687,1],[710,2]]},"517":{"position":[[955,2],[1391,1]]},"521":{"position":[[125,1]]},"549":{"position":[[171,1],[216,2]]},"553":{"position":[[219,1]]},"585":{"position":[[335,2]]},"612":{"position":[[1039,1]]},"614":{"position":[[376,2]]},"737":{"position":[[216,1]]},"817":{"position":[[146,2]]},"929":{"position":[[103,3],[210,3]]},"987":{"position":[[1032,1]]},"989":{"position":[[232,2]]},"994":{"position":[[382,1],[635,2],[978,2]]},"998":{"position":[[87,2]]},"1049":{"position":[[408,2],[411,2],[414,2],[417,2],[494,2],[497,2],[500,2],[585,2],[588,2],[679,2]]},"1073":{"position":[[247,2]]},"1109":{"position":[[278,1]]},"1142":{"position":[[103,3],[210,3]]},"1147":{"position":[[120,1],[145,1]]},"1149":{"position":[[103,3],[210,3]]},"1154":{"position":[[220,1],[245,1]]},"1156":{"position":[[103,3],[210,3]]},"1215":{"position":[[230,1]]},"1224":{"position":[[802,1]]},"1231":{"position":[[1118,2]]},"1415":{"position":[[443,1]]}}}],["0,0",{"_index":1050,"t":{"148":{"position":[[39,3]]},"176":{"position":[[50,3],[310,3],[662,3]]}}}],["0.0",{"_index":795,"t":{"117":{"position":[[689,4],[1358,4]]},"119":{"position":[[2989,4]]},"137":{"position":[[1096,3]]},"145":{"position":[[378,3]]},"249":{"position":[[77,3]]},"381":{"position":[[1749,4],[2162,4]]},"411":{"position":[[906,4],[1408,4],[1860,4]]},"443":{"position":[[256,3]]},"647":{"position":[[774,4]]},"1099":{"position":[[357,4],[859,4]]}}}],["0.00",{"_index":1475,"t":{"249":{"position":[[71,5]]}}}],["0.00024",{"_index":1499,"t":{"257":{"position":[[487,7]]}}}],["0.00091",{"_index":1496,"t":{"257":{"position":[[377,7]]}}}],["0.0063",{"_index":1014,"t":{"137":{"position":[[1350,6]]},"145":{"position":[[632,6]]}}}],["0.01",{"_index":697,"t":{"105":{"position":[[306,4],[422,4]]},"119":{"position":[[453,4],[569,4]]},"121":{"position":[[361,5]]}}}],["0.05",{"_index":2207,"t":{"1013":{"position":[[224,4]]},"1017":{"position":[[17,4],[58,4]]}}}],["0.071218218251483",{"_index":1012,"t":{"137":{"position":[[1322,17]]},"145":{"position":[[604,17]]}}}],["0.1",{"_index":866,"t":{"121":{"position":[[432,4]]},"176":{"position":[[411,4]]},"447":{"position":[[130,3]]},"601":{"position":[[198,3]]},"639":{"position":[[196,3]]},"644":{"position":[[198,3]]}}}],["0.1,50000",{"_index":1158,"t":{"176":{"position":[[314,9]]}}}],["0.10",{"_index":1476,"t":{"249":{"position":[[81,5]]}}}],["0.104982143381498",{"_index":1010,"t":{"137":{"position":[[1293,17]]},"145":{"position":[[575,17]]}}}],["0.138",{"_index":736,"t":{"107":{"position":[[1030,6]]},"119":{"position":[[1319,6]]},"394":{"position":[[767,6]]},"459":{"position":[[214,6]]},"929":{"position":[[214,6]]},"1142":{"position":[[214,6]]},"1149":{"position":[[214,6]]},"1156":{"position":[[214,6]]}}}],["0.197937",{"_index":1739,"t":{"392":{"position":[[692,8]]},"447":{"position":[[287,8]]}}}],["0.2",{"_index":2232,"t":{"1049":{"position":[[745,5],[751,4],[756,4],[761,4],[766,4]]}}}],["0.210",{"_index":737,"t":{"107":{"position":[[1037,6]]},"119":{"position":[[1326,6]]},"394":{"position":[[774,6]]},"459":{"position":[[221,6]]},"929":{"position":[[221,6]]},"1142":{"position":[[221,6]]},"1149":{"position":[[221,6]]},"1156":{"position":[[221,6]]}}}],["0.210714",{"_index":1738,"t":{"392":{"position":[[672,8]]},"447":{"position":[[267,8]]}}}],["0.25",{"_index":825,"t":{"117":{"position":[[2677,6],[2684,5],[2690,5],[2696,5]]},"119":{"position":[[3778,6],[3785,5],[3791,5],[3797,5]]},"1049":{"position":[[654,6],[661,5],[667,5],[673,5]]}}}],["0.255",{"_index":738,"t":{"107":{"position":[[1044,6]]},"119":{"position":[[1333,6]]},"394":{"position":[[781,6]]},"459":{"position":[[228,6]]},"929":{"position":[[228,6]]},"1142":{"position":[[228,6]]},"1149":{"position":[[228,6]]},"1156":{"position":[[228,6]]}}}],["0.2739",{"_index":1301,"t":{"202":{"position":[[911,6]]},"215":{"position":[[114,6]]}}}],["0.286",{"_index":739,"t":{"107":{"position":[[1051,6]]},"119":{"position":[[1340,6]]},"394":{"position":[[788,6]]},"459":{"position":[[235,6]]},"929":{"position":[[235,6]]},"1142":{"position":[[235,6]]},"1149":{"position":[[235,6]]},"1156":{"position":[[235,6]]}}}],["0.310",{"_index":740,"t":{"107":{"position":[[1058,6]]},"119":{"position":[[1347,6]]},"394":{"position":[[795,6]]},"459":{"position":[[242,6]]},"929":{"position":[[242,6]]},"1142":{"position":[[242,6]]},"1149":{"position":[[242,6]]},"1156":{"position":[[242,6]]}}}],["0.328",{"_index":741,"t":{"107":{"position":[[1065,6]]},"119":{"position":[[1354,6]]},"394":{"position":[[802,6]]},"459":{"position":[[249,6]]},"929":{"position":[[249,6]]},"1142":{"position":[[249,6]]},"1149":{"position":[[249,6]]},"1156":{"position":[[249,6]]}}}],["0.33",{"_index":823,"t":{"117":{"position":[[2593,6],[2600,5]]},"119":{"position":[[3694,6],[3701,5]]},"1049":{"position":[[566,6],[573,5]]}}}],["0.34",{"_index":824,"t":{"117":{"position":[[2606,5]]},"119":{"position":[[3707,5]]},"1049":{"position":[[579,5]]}}}],["0.342",{"_index":742,"t":{"107":{"position":[[1072,6]]},"119":{"position":[[1361,6]]},"394":{"position":[[809,6]]},"459":{"position":[[256,6]]},"929":{"position":[[256,6]]},"1142":{"position":[[256,6]]},"1149":{"position":[[256,6]]},"1156":{"position":[[256,6]]}}}],["0.353",{"_index":743,"t":{"107":{"position":[[1079,6]]},"119":{"position":[[1368,6]]},"394":{"position":[[816,6]]},"459":{"position":[[263,6]]},"929":{"position":[[263,6]]},"1142":{"position":[[263,6]]},"1149":{"position":[[263,6]]},"1156":{"position":[[263,6]]}}}],["0.360",{"_index":744,"t":{"107":{"position":[[1086,6]]},"119":{"position":[[1375,6]]},"394":{"position":[[823,6]]},"459":{"position":[[270,6]]},"929":{"position":[[270,6]]},"1142":{"position":[[270,6]]},"1149":{"position":[[270,6]]},"1156":{"position":[[270,6]]}}}],["0.362",{"_index":745,"t":{"107":{"position":[[1093,6]]},"119":{"position":[[1382,6]]},"394":{"position":[[830,6]]},"459":{"position":[[277,6]]},"929":{"position":[[277,6]]},"1142":{"position":[[277,6]]},"1149":{"position":[[277,6]]},"1156":{"position":[[277,6]]}}}],["0.3664",{"_index":1296,"t":{"202":{"position":[[856,6]]},"215":{"position":[[65,6]]}}}],["0.368",{"_index":1306,"t":{"202":{"position":[[965,5]]},"215":{"position":[[162,5]]}}}],["0.368786",{"_index":1740,"t":{"392":{"position":[[711,8]]},"447":{"position":[[306,8]]}}}],["0.45077",{"_index":1736,"t":{"392":{"position":[[634,7]]},"447":{"position":[[229,7]]}}}],["0.5",{"_index":797,"t":{"117":{"position":[[806,5],[812,5],[1426,5],[1432,4],[2514,5],[2520,4]]},"119":{"position":[[3057,5],[3063,4],[3615,5],[3621,4]]},"143":{"position":[[1684,3],[1690,3]]},"145":{"position":[[1678,3],[1684,3]]},"233":{"position":[[433,3]]},"333":{"position":[[314,5],[320,4]]},"585":{"position":[[401,5],[407,4]]},"593":{"position":[[399,3]]},"994":{"position":[[1043,5],[1049,4]]},"1049":{"position":[[483,5],[489,4]]},"1073":{"position":[[312,5],[318,4]]}}}],["0.510676386339746",{"_index":997,"t":{"137":{"position":[[1110,17]]},"145":{"position":[[392,17]]}}}],["0.691702",{"_index":1737,"t":{"392":{"position":[[652,8]]},"447":{"position":[[247,8]]}}}],["0.70",{"_index":849,"t":{"121":{"position":[[161,5],[310,5]]},"355":{"position":[[278,5]]},"361":{"position":[[283,5],[423,5],[581,5]]},"392":{"position":[[283,5],[441,5]]},"396":{"position":[[381,5],[539,5]]},"608":{"position":[[227,5]]},"683":{"position":[[232,5],[372,5]]},"693":{"position":[[283,5]]},"865":{"position":[[283,5]]}}}],["0.72",{"_index":841,"t":{"121":{"position":[[92,5],[185,5],[285,5]]},"355":{"position":[[259,6]]},"361":{"position":[[264,6],[398,5],[550,6],[575,5]]},"392":{"position":[[264,6],[410,6],[435,5]]},"396":{"position":[[362,6],[508,6],[533,5]]},"608":{"position":[[208,6]]},"683":{"position":[[213,6],[347,5]]},"693":{"position":[[264,6]]},"865":{"position":[[264,6]]}}}],["0.73",{"_index":855,"t":{"121":{"position":[[210,5]]},"361":{"position":[[417,5],[557,5]]},"392":{"position":[[417,5]]},"396":{"position":[[515,5]]},"683":{"position":[[366,5]]}}}],["0.74",{"_index":846,"t":{"121":{"position":[[138,5],[235,5],[260,5]]},"355":{"position":[[272,5]]},"361":{"position":[[277,5],[563,5],[569,5]]},"392":{"position":[[277,5],[423,5],[429,5]]},"396":{"position":[[375,5],[521,5],[527,5]]},"608":{"position":[[221,5]]},"683":{"position":[[226,5]]},"693":{"position":[[277,5]]},"865":{"position":[[277,5]]}}}],["0.7401",{"_index":1311,"t":{"202":{"position":[[1019,6]]},"215":{"position":[[210,6]]}}}],["0.74373",{"_index":1731,"t":{"392":{"position":[[549,7]]},"447":{"position":[[144,7]]}}}],["0.748",{"_index":1650,"t":{"361":{"position":[[410,6]]},"683":{"position":[[359,6]]}}}],["0.75",{"_index":707,"t":{"107":{"position":[[434,4]]},"119":{"position":[[725,4]]},"121":{"position":[[115,5]]},"355":{"position":[[266,5]]},"361":{"position":[[271,5],[404,5]]},"367":{"position":[[143,4]]},"375":{"position":[[129,4]]},"392":{"position":[[271,5]]},"394":{"position":[[143,4]]},"396":{"position":[[369,5]]},"608":{"position":[[215,5]]},"683":{"position":[[220,5],[353,5]]},"693":{"position":[[271,5]]},"865":{"position":[[271,5]]}}}],["0.8",{"_index":987,"t":{"137":{"position":[[578,3],[1478,3]]},"145":{"position":[[760,3]]}}}],["0.849146377471569",{"_index":1006,"t":{"137":{"position":[[1237,17]]},"145":{"position":[[519,17]]}}}],["0.95",{"_index":2242,"t":{"1062":{"position":[[12,4]]},"1066":{"position":[[379,4],[448,4]]}}}],["0.99",{"_index":2241,"t":{"1057":{"position":[[459,4]]}}}],["0078405",{"_index":2832,"t":{"1350":{"position":[[970,9]]}}}],["0088232",{"_index":3088,"t":{"1386":{"position":[[574,9]]}}}],["00:00:00",{"_index":1187,"t":{"176":{"position":[[850,9],[916,9],[982,9],[1048,9],[1114,9],[1180,9],[1246,9],[1312,9],[1378,9],[1444,9],[1510,9],[1576,9]]},"721":{"position":[[346,11]]},"1077":{"position":[[389,11]]}}}],["00ad854",{"_index":2752,"t":{"1343":{"position":[[935,9]]}}}],["00cd9c5",{"_index":2412,"t":{"1273":{"position":[[399,9],[502,9]]}}}],["01",{"_index":347,"t":{"52":{"position":[[2036,2],[2039,3],[2066,2],[2069,3]]},"109":{"position":[[682,3],[703,2],[706,3],[757,3],[779,2],[782,3]]},"119":{"position":[[2168,3],[2189,2],[2192,3],[2243,3],[2265,2],[2268,3]]},"164":{"position":[[951,3],[973,2],[976,3]]},"174":{"position":[[1262,3],[1284,2],[1287,3]]},"176":{"position":[[844,2],[847,2],[910,2],[913,2],[976,2],[979,2],[1042,2],[1045,2],[1108,2],[1111,2],[1177,2],[1240,2],[1243,2],[1306,2],[1309,2],[1372,2],[1375,2],[1438,2],[1441,2],[1504,2],[1507,2],[1570,2],[1573,2]]},"274":{"position":[[169,2],[172,3],[195,2],[198,3]]},"306":{"position":[[385,2],[388,3],[415,2],[418,3],[462,2],[465,3],[489,2],[492,3]]},"491":{"position":[[110,2],[113,3],[145,2],[148,3]]},"585":{"position":[[119,3]]},"676":{"position":[[23,2],[26,3],[79,2],[82,3]]},"721":{"position":[[207,2],[210,3],[685,2],[688,3]]},"725":{"position":[[28,2],[31,2],[41,2],[44,2],[126,2],[129,2]]},"749":{"position":[[279,2],[282,3],[417,2],[420,3]]},"809":{"position":[[146,2],[149,3],[167,2],[170,3]]},"844":{"position":[[85,2],[88,3],[111,2],[114,3]]},"1049":{"position":[[63,2],[66,3]]},"1077":{"position":[[268,2],[271,3],[702,2],[705,3]]},"1081":{"position":[[28,2],[31,2],[41,2],[44,2],[129,2],[132,2]]}}}],["01.01.2020",{"_index":893,"t":{"121":{"position":[[802,11]]}}}],["01.01.2020,329327.76,2301.9189,3796.9621",{"_index":1075,"t":{"150":{"position":[[49,40]]}}}],["01.01.2021",{"_index":898,"t":{"121":{"position":[[851,11]]}}}],["01.01.2021,533620.39,3699.8435,8533.0322",{"_index":1076,"t":{"150":{"position":[[90,40]]}}}],["01.01.2022",{"_index":899,"t":{"121":{"position":[[900,11]]}}}],["01.01.2022,416004.76,2837.5915,9434.1385",{"_index":1077,"t":{"150":{"position":[[131,40]]}}}],["01.01.2023",{"_index":900,"t":{"121":{"position":[[949,11]]}}}],["01.01.2023,340118.19,2280.7372,10019.154",{"_index":1078,"t":{"150":{"position":[[172,40]]}}}],["01.01.2024",{"_index":903,"t":{"121":{"position":[[998,11]]}}}],["01.01.2024,290127.01,1905.7952,10428.387",{"_index":1079,"t":{"150":{"position":[[213,40]]}}}],["01.01.2025",{"_index":908,"t":{"121":{"position":[[1047,11]]}}}],["01.01.2025,253292.19,1635.7671,10725.254",{"_index":1080,"t":{"150":{"position":[[254,40]]}}}],["01.01.2026",{"_index":913,"t":{"121":{"position":[[1096,11]]}}}],["01.01.2026,223584.53,1426.9726,10954.338",{"_index":1081,"t":{"150":{"position":[[295,40]]}}}],["01.01.2027",{"_index":918,"t":{"121":{"position":[[1145,11]]}}}],["01.01.2027,198453.07,1249.781,11153.675",{"_index":1082,"t":{"150":{"position":[[336,39]]}}}],["01.01.2028",{"_index":920,"t":{"121":{"position":[[1194,11]]}}}],["01.01.2028,177306.77,1099.8572,11318.01",{"_index":1083,"t":{"150":{"position":[[376,39]]}}}],["01.01.2029",{"_index":921,"t":{"121":{"position":[[1243,11]]}}}],["01.01.2029,159723.78,977.37529,11450.614",{"_index":1084,"t":{"150":{"position":[[416,40]]}}}],["01.01.2030",{"_index":922,"t":{"121":{"position":[[1292,11]]}}}],["01.01.2030,145056.33,875.30836,11561.335",{"_index":1085,"t":{"150":{"position":[[457,40]]}}}],["01.01.2031",{"_index":924,"t":{"121":{"position":[[1341,11]]}}}],["01.01.2031,132577.75,788.45521,11654.645",{"_index":1086,"t":{"150":{"position":[[498,40]]}}}],["01.01.2032",{"_index":926,"t":{"121":{"position":[[1390,11]]}}}],["01.01.2032,122166.68,715.64707,11734.129",{"_index":1087,"t":{"150":{"position":[[539,40]]}}}],["01.01.2033",{"_index":929,"t":{"121":{"position":[[1439,11]]}}}],["01.01.2033,113070.74,653.71407,11802.565",{"_index":1088,"t":{"150":{"position":[[580,40]]}}}],["01.01.2034",{"_index":930,"t":{"121":{"position":[[1488,11]]}}}],["01.01.2034,105114.67,600.04874,11860.717",{"_index":1089,"t":{"150":{"position":[[621,40]]}}}],["01.01.2035",{"_index":931,"t":{"121":{"position":[[1537,11]]}}}],["01.01.2035,98147.958,553.56297,11910.283",{"_index":1090,"t":{"150":{"position":[[662,40]]}}}],["01.01.2036",{"_index":934,"t":{"121":{"position":[[1586,11]]}}}],["01.01.2037",{"_index":936,"t":{"121":{"position":[[1634,11]]}}}],["01.01.2038",{"_index":939,"t":{"121":{"position":[[1681,11]]}}}],["01.01.2039",{"_index":941,"t":{"121":{"position":[[1728,11]]}}}],["01.01.2040",{"_index":944,"t":{"121":{"position":[[1775,11]]}}}],["01.01.2041",{"_index":946,"t":{"121":{"position":[[1822,11]]}}}],["016c0bd",{"_index":2381,"t":{"1268":{"position":[[358,9]]}}}],["018b472",{"_index":2779,"t":{"1345":{"position":[[162,9]]}}}],["030a44b",{"_index":2895,"t":{"1356":{"position":[[379,9]]}}}],["0346929",{"_index":3042,"t":{"1373":{"position":[[339,9]]}}}],["035aad1",{"_index":2768,"t":{"1343":{"position":[[1258,9]]}}}],["03abf64",{"_index":2876,"t":{"1354":{"position":[[750,9]]}}}],["04",{"_index":2057,"t":{"585":{"position":[[116,2]]}}}],["0595fbd",{"_index":2452,"t":{"1275":{"position":[[248,9]]}}}],["059dab5",{"_index":3050,"t":{"1376":{"position":[[222,9]]}}}],["06",{"_index":770,"t":{"109":{"position":[[679,2],[754,2]]},"119":{"position":[[2165,2],[2240,2]]}}}],["064adfa",{"_index":3069,"t":{"1384":{"position":[[41,9]]}}}],["08394a3",{"_index":3060,"t":{"1382":{"position":[[44,9]]}}}],["087867c",{"_index":2734,"t":{"1343":{"position":[[444,9]]}}}],["09ef23",{"_index":3075,"t":{"1386":{"position":[[203,10]]}}}],["09f52bd",{"_index":2568,"t":{"1299":{"position":[[224,9]]}}}],["0a0b2f",{"_index":3020,"t":{"1369":{"position":[[356,9]]}}}],["0a75da4",{"_index":2351,"t":{"1262":{"position":[[50,9]]}}}],["0b027ef",{"_index":2588,"t":{"1301":{"position":[[349,9]]}}}],["0ba8f8f",{"_index":3027,"t":{"1371":{"position":[[33,9]]}}}],["0c45251",{"_index":2716,"t":{"1343":{"position":[[87,9],[261,9],[1443,9]]}}}],["0d1ce6f",{"_index":2978,"t":{"1367":{"position":[[440,9],[709,9]]}}}],["0e30ab2",{"_index":3022,"t":{"1369":{"position":[[397,9]]}}}],["0f1e6f8",{"_index":2358,"t":{"1264":{"position":[[57,9]]}}}],["0f30f49",{"_index":2877,"t":{"1354":{"position":[[782,9]]}}}],["0f3ddca",{"_index":2969,"t":{"1367":{"position":[[86,9]]}}}],["0|1|2",{"_index":2009,"t":{"505":{"position":[[1501,8]]},"511":{"position":[[534,8]]}}}],["1",{"_index":147,"t":{"23":{"position":[[300,1],[348,1]]},"33":{"position":[[68,1]]},"52":{"position":[[380,2]]},"54":{"position":[[457,2]]},"61":{"position":[[1632,1]]},"86":{"position":[[279,2]]},"117":{"position":[[2385,3]]},"119":{"position":[[3486,3]]},"143":{"position":[[1613,1],[2488,1]]},"145":{"position":[[1607,1],[1991,1]]},"202":{"position":[[94,2]]},"228":{"position":[[251,2],[341,1],[772,2],[825,2]]},"267":{"position":[[45,2],[110,2],[175,2],[221,2],[285,2],[343,2],[413,2],[453,2]]},"270":{"position":[[76,1]]},"292":{"position":[[323,2]]},"333":{"position":[[245,3]]},"394":{"position":[[863,1]]},"411":{"position":[[364,2]]},"455":{"position":[[274,2]]},"457":{"position":[[226,1]]},"468":{"position":[[1653,2],[1729,1]]},"505":{"position":[[1586,2]]},"511":{"position":[[619,2]]},"527":{"position":[[24,3]]},"585":{"position":[[331,3]]},"593":{"position":[[578,1]]},"612":{"position":[[1092,1]]},"647":{"position":[[136,2]]},"721":{"position":[[775,1]]},"987":{"position":[[1085,1]]},"994":{"position":[[974,3]]},"1049":{"position":[[404,3]]},"1053":{"position":[[1324,2]]},"1071":{"position":[[250,2],[299,2]]},"1073":{"position":[[243,3]]},"1133":{"position":[[131,2]]},"1147":{"position":[[126,1]]},"1154":{"position":[[226,1]]},"1415":{"position":[[424,1]]},"1475":{"position":[[95,1],[579,1],[731,1],[846,2],[859,1]]}}}],["1,3",{"_index":1179,"t":{"176":{"position":[[666,3]]}}}],["1,4.1",{"_index":1142,"t":{"176":{"position":[[54,5]]}}}],["1.0",{"_index":794,"t":{"117":{"position":[[683,5],[1352,5]]},"119":{"position":[[2983,5]]}}}],["1.00e+06",{"_index":1294,"t":{"202":{"position":[[835,9],[863,9],[890,9],[918,9],[944,9],[971,9],[998,9],[1026,9]]},"215":{"position":[[47,8],[72,8],[96,8],[121,8],[144,8],[168,8],[192,8],[217,8]]}}}],["1.03",{"_index":2134,"t":{"784":{"position":[[169,4],[326,4]]}}}],["1.05",{"_index":2039,"t":{"529":{"position":[[205,4],[368,4]]}}}],["1.1",{"_index":517,"t":{"67":{"position":[[708,3]]}}}],["1.1.2005",{"_index":1101,"t":{"154":{"position":[[952,9],[1001,9]]}}}],["1.10e+07",{"_index":1330,"t":{"202":{"position":[[1267,9],[1294,9],[1321,9],[1348,9],[1375,9],[1402,9]]},"215":{"position":[[431,8],[455,8],[479,8],[503,8],[527,8],[551,8]]}}}],["1.3.3",{"_index":2741,"t":{"1343":{"position":[[599,5]]}}}],["1.3.4",{"_index":2742,"t":{"1343":{"position":[[608,5]]}}}],["1.34903656604691",{"_index":1008,"t":{"137":{"position":[[1265,16]]},"145":{"position":[[547,16]]}}}],["1.399",{"_index":1329,"t":{"202":{"position":[[1234,5]]},"215":{"position":[[401,5]]}}}],["1.95",{"_index":1325,"t":{"202":{"position":[[1181,4]]},"215":{"position":[[354,4]]}}}],["1/0",{"_index":2046,"t":{"549":{"position":[[548,4]]}}}],["10",{"_index":659,"t":{"97":{"position":[[911,2]]},"121":{"position":[[371,3],[443,3]]},"154":{"position":[[730,2]]},"164":{"position":[[948,2]]},"172":{"position":[[1566,2]]},"174":{"position":[[1259,2],[2173,2]]},"196":{"position":[[526,2]]},"202":{"position":[[845,3],[873,3]]},"213":{"position":[[22,2],[33,2]]},"215":{"position":[[56,2],[81,2]]},"228":{"position":[[371,2]]},"282":{"position":[[751,2]]},"459":{"position":[[311,2]]},"465":{"position":[[212,2],[540,2]]},"561":{"position":[[40,2],[176,2]]},"593":{"position":[[67,2]]},"649":{"position":[[384,2]]},"922":{"position":[[600,2]]},"929":{"position":[[311,2]]},"953":{"position":[[39,2]]},"1002":{"position":[[114,2]]},"1119":{"position":[[18,2]]},"1142":{"position":[[311,2]]},"1149":{"position":[[311,2]]},"1156":{"position":[[311,2]]}}}],["10.0",{"_index":1165,"t":{"176":{"position":[[422,5]]},"709":{"position":[[15,4]]},"854":{"position":[[147,4]]}}}],["10.71,83277.09",{"_index":1056,"t":{"148":{"position":[[112,14]]}}}],["10.9074631209139",{"_index":1002,"t":{"137":{"position":[[1184,16]]},"145":{"position":[[466,16]]}}}],["100",{"_index":862,"t":{"121":{"position":[[367,3],[475,4]]},"183":{"position":[[192,6]]},"185":{"position":[[85,5]]},"190":{"position":[[207,6]]},"202":{"position":[[1909,3]]},"407":{"position":[[2609,4]]},"457":{"position":[[247,5]]},"593":{"position":[[580,6]]},"1147":{"position":[[147,5]]},"1154":{"position":[[247,5]]}}}],["100.0",{"_index":1170,"t":{"176":{"position":[[460,6]]}}}],["1000",{"_index":759,"t":{"109":{"position":[[385,4]]},"119":{"position":[[1871,4]]},"121":{"position":[[814,5],[863,5],[912,5],[1598,5]]},"141":{"position":[[404,4]]},"145":{"position":[[1242,4]]},"164":{"position":[[385,4],[415,4]]},"174":{"position":[[696,4],[726,4]]},"325":{"position":[[157,4]]},"842":{"position":[[45,4]]},"844":{"position":[[155,4]]},"846":{"position":[[164,4],[371,4]]},"994":{"position":[[836,5],[1117,4]]},"1073":{"position":[[386,4]]}}}],["1000.0",{"_index":1597,"t":{"333":{"position":[[198,6]]}}}],["10000",{"_index":709,"t":{"107":{"position":[[452,5]]},"109":{"position":[[768,5]]},"119":{"position":[[743,5],[2254,5]]},"121":{"position":[[574,5],[595,5],[616,5],[637,5],[658,5],[679,5],[700,5],[721,5],[1792,6]]},"154":{"position":[[981,5]]},"164":{"position":[[962,5]]},"174":{"position":[[1273,5]]},"593":{"position":[[120,5]]}}}],["100000",{"_index":869,"t":{"121":{"position":[[457,6]]},"213":{"position":[[15,6]]},"282":{"position":[[814,6]]},"829":{"position":[[63,6]]}}}],["1000000",{"_index":872,"t":{"121":{"position":[[480,7],[1513,8],[1562,8]]},"202":{"position":[[104,8]]},"213":{"position":[[25,7]]},"228":{"position":[[543,7],[607,7],[663,7],[730,7],[779,7],[832,7]]}}}],["100000000,4.1",{"_index":1143,"t":{"176":{"position":[[60,13]]}}}],["10054",{"_index":1649,"t":{"361":{"position":[[377,6]]},"683":{"position":[[326,6]]}}}],["1010",{"_index":1130,"t":{"172":{"position":[[1543,4]]},"174":{"position":[[2150,4]]}}}],["1025",{"_index":1034,"t":{"143":{"position":[[1279,4],[1566,4]]},"145":{"position":[[1560,4]]}}}],["1026",{"_index":819,"t":{"117":{"position":[[2253,4],[3155,4]]},"119":{"position":[[3354,4],[4054,4]]}}}],["103",{"_index":2986,"t":{"1367":{"position":[[939,6]]}}}],["1030",{"_index":2139,"t":{"794":{"position":[[15,4]]},"1049":{"position":[[359,4]]},"1073":{"position":[[198,4]]}}}],["104",{"_index":2932,"t":{"1363":{"position":[[564,6]]}}}],["1050",{"_index":2202,"t":{"994":{"position":[[866,4],[1124,4]]},"1073":{"position":[[393,4]]}}}],["10500",{"_index":852,"t":{"121":{"position":[[191,5],[216,5],[241,5],[266,5],[291,5],[316,5]]}}}],["106",{"_index":3036,"t":{"1373":{"position":[[208,6]]}}}],["106.2",{"_index":1321,"t":{"202":{"position":[[1147,6]]},"215":{"position":[[324,5]]}}}],["107",{"_index":2939,"t":{"1363":{"position":[[692,6]]}}}],["10767",{"_index":1651,"t":{"361":{"position":[[438,5]]},"392":{"position":[[298,5]]},"396":{"position":[[396,5]]}}}],["109",{"_index":3010,"t":{"1369":{"position":[[123,6]]}}}],["10b5e07",{"_index":2904,"t":{"1356":{"position":[[738,9]]}}}],["10eadjusted​=eoriginal​−10",{"_index":2052,"t":{"561":{"position":[[351,26]]}}}],["11.399",{"_index":729,"t":{"107":{"position":[[951,7]]},"119":{"position":[[1240,7]]},"394":{"position":[[688,7]]},"459":{"position":[[135,7]]},"929":{"position":[[135,7]]},"1142":{"position":[[135,7]]},"1149":{"position":[[135,7]]},"1156":{"position":[[135,7]]}}}],["11.8",{"_index":1100,"t":{"154":{"position":[[453,4]]},"172":{"position":[[122,4],[219,4]]},"174":{"position":[[1593,4]]}}}],["11.89",{"_index":1335,"t":{"202":{"position":[[1315,5]]},"215":{"position":[[473,5]]}}}],["11.9,89808.09",{"_index":1057,"t":{"148":{"position":[[127,13]]}}}],["110",{"_index":3012,"t":{"1369":{"position":[[162,6]]}}}],["1100",{"_index":932,"t":{"121":{"position":[[1549,5]]}}}],["112",{"_index":3025,"t":{"1369":{"position":[[461,6]]}}}],["11276",{"_index":1648,"t":{"361":{"position":[[370,6]]},"683":{"position":[[319,6]]}}}],["116",{"_index":2949,"t":{"1365":{"position":[[51,6]]}}}],["118",{"_index":3008,"t":{"1369":{"position":[[84,6]]}}}],["119",{"_index":3021,"t":{"1369":{"position":[[390,6]]}}}],["11973",{"_index":1661,"t":{"361":{"position":[[530,7]]},"392":{"position":[[390,7]]},"396":{"position":[[488,7]]}}}],["12",{"_index":1036,"t":{"143":{"position":[[1340,2],[1637,2],[1712,2]]},"145":{"position":[[1631,2],[1706,2]]},"176":{"position":[[1174,2]]},"721":{"position":[[417,2]]}}}],["12.72",{"_index":1295,"t":{"202":{"position":[[849,6]]},"215":{"position":[[59,5]]}}}],["120",{"_index":809,"t":{"117":{"position":[[1404,3],[1478,3]]},"119":{"position":[[3035,3],[3109,3]]},"922":{"position":[[666,3]]},"1369":{"position":[[349,6]]}}}],["1200",{"_index":864,"t":{"121":{"position":[[383,4],[1500,5]]}}}],["12000",{"_index":861,"t":{"121":{"position":[[303,6]]},"176":{"position":[[1403,6]]}}}],["1200000",{"_index":897,"t":{"121":{"position":[[843,7],[892,7],[941,7],[990,7]]}}}],["123",{"_index":3251,"t":{"1477":{"position":[[811,4]]}}}],["12425",{"_index":1647,"t":{"361":{"position":[[363,6]]},"683":{"position":[[312,6]]}}}],["125",{"_index":1790,"t":{"407":{"position":[[2558,4]]}}}],["126000",{"_index":1167,"t":{"176":{"position":[[440,6]]}}}],["13",{"_index":1043,"t":{"143":{"position":[[2145,2],[2508,2]]},"145":{"position":[[2011,2]]}}}],["13.673",{"_index":730,"t":{"107":{"position":[[959,7]]},"119":{"position":[[1248,7]]},"394":{"position":[[696,7]]},"459":{"position":[[143,7]]},"929":{"position":[[143,7]]},"1142":{"position":[[143,7]]},"1149":{"position":[[143,7]]},"1156":{"position":[[143,7]]}}}],["130000",{"_index":1191,"t":{"176":{"position":[[898,6]]}}}],["1300000",{"_index":907,"t":{"121":{"position":[[1039,7],[1333,7],[1382,7]]}}}],["131",{"_index":2917,"t":{"1359":{"position":[[50,6]]},"1367":{"position":[[769,6]]}}}],["13182",{"_index":1646,"t":{"361":{"position":[[356,6]]},"683":{"position":[[305,6]]}}}],["133",{"_index":2961,"t":{"1365":{"position":[[372,6]]}}}],["13454",{"_index":1660,"t":{"361":{"position":[[523,6]]},"392":{"position":[[383,6]]},"396":{"position":[[481,6]]}}}],["13500",{"_index":860,"t":{"121":{"position":[[278,6]]}}}],["1350000",{"_index":912,"t":{"121":{"position":[[1088,7],[1284,7]]}}}],["136",{"_index":2975,"t":{"1367":{"position":[[298,6]]}}}],["137750",{"_index":1283,"t":{"202":{"position":[[97,6],[113,6]]}}}],["13845",{"_index":1645,"t":{"361":{"position":[[348,7]]},"683":{"position":[[297,7]]}}}],["14",{"_index":2231,"t":{"1049":{"position":[[438,2],[521,2],[609,2],[700,2],[789,2]]},"1384":{"position":[[86,5]]}}}],["14.28,102781.8",{"_index":1058,"t":{"148":{"position":[[141,14]]}}}],["14.35",{"_index":1327,"t":{"202":{"position":[[1207,5]]},"215":{"position":[[377,5]]}}}],["140",{"_index":2796,"t":{"1348":{"position":[[123,6]]}}}],["14000",{"_index":1206,"t":{"176":{"position":[[1139,6],[1469,6],[1601,6]]}}}],["1400000",{"_index":917,"t":{"121":{"position":[[1137,7],[1186,7],[1235,7],[1626,7],[1673,7],[1720,7],[1767,7],[1814,7]]}}}],["140c448",{"_index":2806,"t":{"1350":{"position":[[166,9]]}}}],["141",{"_index":2859,"t":{"1354":{"position":[[490,6]]}}}],["14500",{"_index":858,"t":{"121":{"position":[[253,6]]}}}],["145579",{"_index":1284,"t":{"202":{"position":[[129,6]]}}}],["146",{"_index":2849,"t":{"1354":{"position":[[66,6]]}}}],["14640",{"_index":1659,"t":{"361":{"position":[[516,6]]},"392":{"position":[[376,6]]},"396":{"position":[[474,6]]}}}],["147",{"_index":2818,"t":{"1350":{"position":[[524,6]]}}}],["14c1793",{"_index":2385,"t":{"1268":{"position":[[408,9]]}}}],["15",{"_index":1367,"t":{"213":{"position":[[44,2]]},"419":{"position":[[732,2]]},"649":{"position":[[491,2],[839,2]]},"1101":{"position":[[564,2]]},"1391":{"position":[[23,5]]}}}],["15.947",{"_index":731,"t":{"107":{"position":[[967,7]]},"119":{"position":[[1256,7]]},"394":{"position":[[704,7]]},"459":{"position":[[151,7]]},"929":{"position":[[151,7]]},"1142":{"position":[[151,7]]},"1149":{"position":[[151,7]]},"1156":{"position":[[151,7]]}}}],["150",{"_index":1409,"t":{"228":{"position":[[534,4],[598,4],[654,4],[721,4]]},"288":{"position":[[443,3],[449,3],[587,3],[593,3]]},"994":{"position":[[443,3],[449,3],[587,3],[593,3]]},"1352":{"position":[[191,6]]}}}],["1500",{"_index":1113,"t":{"164":{"position":[[560,5],[834,4]]},"172":{"position":[[1160,5],[1209,4],[2075,4],[2169,5]]},"174":{"position":[[871,5],[1145,4]]}}}],["15000",{"_index":945,"t":{"121":{"position":[[1807,6]]},"176":{"position":[[1007,6],[1205,6],[1337,6]]}}}],["1500000",{"_index":933,"t":{"121":{"position":[[1578,7]]}}}],["152",{"_index":2794,"t":{"1348":{"position":[[65,6]]}}}],["153",{"_index":2868,"t":{"1354":{"position":[[661,6]]}}}],["153335",{"_index":1285,"t":{"202":{"position":[[145,6]]}}}],["153f7c4",{"_index":2563,"t":{"1299":{"position":[[159,9]]}}}],["155",{"_index":2063,"t":{"585":{"position":[[379,3],[453,3]]},"1350":{"position":[[963,6]]}}}],["155.6",{"_index":1326,"t":{"202":{"position":[[1200,6]]},"215":{"position":[[371,5]]}}}],["15500",{"_index":856,"t":{"121":{"position":[[228,6]]}}}],["15546",{"_index":1658,"t":{"361":{"position":[[509,6]]},"392":{"position":[[369,6]]},"396":{"position":[[467,6]]}}}],["157",{"_index":2882,"t":{"1356":{"position":[[93,6]]}}}],["158b90d",{"_index":2418,"t":{"1273":{"position":[[677,9]]}}}],["159",{"_index":2894,"t":{"1356":{"position":[[372,6]]}}}],["16",{"_index":3079,"t":{"1386":{"position":[[306,5]]}}}],["16.66,115784.9",{"_index":1059,"t":{"148":{"position":[[156,14]]}}}],["16.94",{"_index":1340,"t":{"202":{"position":[[1369,5]]},"215":{"position":[[521,5]]}}}],["160",{"_index":2888,"t":{"1356":{"position":[[235,6]]}}}],["16000",{"_index":854,"t":{"121":{"position":[[203,6]]},"176":{"position":[[1073,6],[1535,6]]}}}],["16081",{"_index":1657,"t":{"361":{"position":[[502,6]]},"392":{"position":[[362,6]]},"396":{"position":[[460,6]]}}}],["161",{"_index":2820,"t":{"1350":{"position":[[567,6]]}}}],["161022",{"_index":1286,"t":{"202":{"position":[[161,6]]}}}],["164",{"_index":2822,"t":{"1350":{"position":[[697,6]]}}}],["16447",{"_index":1656,"t":{"361":{"position":[[494,7]]},"392":{"position":[[354,7]]},"396":{"position":[[452,7]]}}}],["165",{"_index":2892,"t":{"1356":{"position":[[326,6]]}}}],["16500",{"_index":851,"t":{"121":{"position":[[178,6]]}}}],["166",{"_index":2802,"t":{"1350":{"position":[[98,6]]}}}],["167",{"_index":2810,"t":{"1350":{"position":[[270,6]]}}}],["168644",{"_index":1287,"t":{"202":{"position":[[177,6]]}}}],["16b9ccc",{"_index":2664,"t":{"1334":{"position":[[158,9]]}}}],["16d54f1",{"_index":3040,"t":{"1373":{"position":[[305,9]]}}}],["17.1",{"_index":1861,"t":{"437":{"position":[[74,5]]}}}],["17.8,119883.6",{"_index":1060,"t":{"148":{"position":[[171,13]]}}}],["170",{"_index":2808,"t":{"1350":{"position":[[200,6]]}}}],["17000",{"_index":938,"t":{"121":{"position":[[1666,6],[1713,6],[1760,6]]},"164":{"position":[[590,6],[619,6]]},"172":{"position":[[2215,5],[2257,5],[2329,5],[2340,5]]},"174":{"position":[[901,6],[930,6]]}}}],["17000,6",{"_index":1182,"t":{"176":{"position":[[684,7]]}}}],["170000",{"_index":1196,"t":{"176":{"position":[[964,6]]}}}],["171",{"_index":2912,"t":{"1356":{"position":[[977,6]]}}}],["172",{"_index":2830,"t":{"1350":{"position":[[902,6]]}}}],["173",{"_index":2898,"t":{"1356":{"position":[[514,6]]}}}],["174",{"_index":2915,"t":{"1356":{"position":[[1035,6]]}}}],["175",{"_index":2900,"t":{"1356":{"position":[[614,6]]}}}],["17500,9",{"_index":1183,"t":{"176":{"position":[[692,7]]}}}],["1756aac",{"_index":2516,"t":{"1277":{"position":[[910,9]]}}}],["176",{"_index":2896,"t":{"1356":{"position":[[417,6]]}}}],["179",{"_index":2890,"t":{"1356":{"position":[[279,6]]}}}],["18",{"_index":2382,"t":{"1268":{"position":[[384,2]]}}}],["18.223",{"_index":732,"t":{"107":{"position":[[975,7]]},"119":{"position":[[1264,7]]},"394":{"position":[[712,7]]},"459":{"position":[[159,7]]},"929":{"position":[[159,7]]},"1142":{"position":[[159,7]]},"1149":{"position":[[159,7]]},"1156":{"position":[[159,7]]}}}],["18.3",{"_index":1863,"t":{"437":{"position":[[93,5]]}}}],["180",{"_index":2884,"t":{"1356":{"position":[[141,6]]}}}],["180.8",{"_index":1339,"t":{"202":{"position":[[1362,6]]},"215":{"position":[[515,5]]}}}],["18000",{"_index":935,"t":{"121":{"position":[[1619,6],[1698,6],[1745,6]]},"176":{"position":[[875,6],[1271,6]]}}}],["181",{"_index":2875,"t":{"1354":{"position":[[743,6]]}}}],["182",{"_index":2886,"t":{"1356":{"position":[[188,6]]}}}],["18500",{"_index":1114,"t":{"164":{"position":[[648,6]]},"172":{"position":[[2225,5],[2361,6]]},"174":{"position":[[959,6]]}}}],["185f624",{"_index":2484,"t":{"1277":{"position":[[317,9]]}}}],["186",{"_index":2866,"t":{"1354":{"position":[[614,6]]}}}],["187",{"_index":2851,"t":{"1354":{"position":[[152,6]]}}}],["188",{"_index":2825,"t":{"1350":{"position":[[806,6]]}}}],["1882",{"_index":1777,"t":{"407":{"position":[[1027,4]]}}}],["189",{"_index":2862,"t":{"1354":{"position":[[527,6]]}}}],["19.04,128788",{"_index":1061,"t":{"148":{"position":[[185,12]]}}}],["19.3",{"_index":1017,"t":{"137":{"position":[[1756,4]]},"145":{"position":[[1038,4]]}}}],["19.4",{"_index":1864,"t":{"437":{"position":[[115,5]]}}}],["190",{"_index":2812,"t":{"1350":{"position":[[378,6]]}}}],["19000",{"_index":1194,"t":{"176":{"position":[[941,6]]}}}],["191",{"_index":2853,"t":{"1354":{"position":[[225,6]]}}}],["193",{"_index":2902,"t":{"1356":{"position":[[663,6]]}}}],["194",{"_index":2684,"t":{"1337":{"position":[[79,6]]}}}],["195",{"_index":2816,"t":{"1350":{"position":[[472,6]]}}}],["196",{"_index":2771,"t":{"1343":{"position":[[1436,6]]}}}],["197",{"_index":2805,"t":{"1350":{"position":[[159,6]]}}}],["198",{"_index":2857,"t":{"1354":{"position":[[439,6]]}}}],["199",{"_index":2834,"t":{"1350":{"position":[[1028,6]]}}}],["1994",{"_index":2141,"t":{"809":{"position":[[141,4]]}}}],["1995",{"_index":1120,"t":{"164":{"position":[[943,4]]},"174":{"position":[[1254,4]]}}}],["1
  • list",{"_index":3219,"t":{"1475":{"position":[[779,14],[909,14]]}}}],["1stat",{"_index":3213,"t":{"1475":{"position":[[632,23]]}}}],["1_stage_chart",{"_index":1817,"t":{"419":{"position":[[303,13]]},"601":{"position":[[168,13]]},"639":{"position":[[166,13]]},"644":{"position":[[168,13]]},"649":{"position":[[308,13]]},"1089":{"position":[[134,13]]},"1101":{"position":[[135,13]]}}}],["1_stage_inlet",{"_index":1813,"t":{"419":{"position":[[119,13],[349,13]]},"649":{"position":[[124,13],[354,13]]},"1089":{"position":[[180,13]]},"1101":{"position":[[181,13]]},"1135":{"position":[[119,13]]}}}],["1ab5105",{"_index":2425,"t":{"1273":{"position":[[910,9]]}}}],["1b2ee32",{"_index":2416,"t":{"1273":{"position":[[633,9]]}}}],["1bde68a",{"_index":2990,"t":{"1367":{"position":[[1079,9]]}}}],["1d",{"_index":1276,"t":{"198":{"position":[[442,2]]},"202":{"position":[[0,2]]}}}],["1da1999",{"_index":3070,"t":{"1384":{"position":[[92,9]]}}}],["1e",{"_index":580,"t":{"84":{"position":[[675,2],[686,2]]}}}],["1e6",{"_index":576,"t":{"84":{"position":[[588,3],[609,4]]}}}],["1ee5bfd",{"_index":3095,"t":{"1386":{"position":[[1150,9],[1353,9]]}}}],["1fe9dd0",{"_index":2625,"t":{"1326":{"position":[[22,9]]}}}],["1st",{"_index":828,"t":{"117":{"position":[[3191,3],[3212,3],[3698,3],[3719,3]]},"172":{"position":[[2706,3]]},"419":{"position":[[592,4]]},"649":{"position":[[699,4]]},"721":{"position":[[402,3]]},"1077":{"position":[[449,3],[753,3]]},"1101":{"position":[[424,4]]}}}],["1}{n",{"_index":1922,"t":{"468":{"position":[[1721,6]]}}}],["1}κ−1κ∗polytropic_effici",{"_index":1932,"t":{"468":{"position":[[2066,29]]}}}],["2",{"_index":350,"t":{"52":{"position":[[2133,2]]},"54":{"position":[[783,2]]},"61":{"position":[[942,1],[1057,1]]},"117":{"position":[[2483,3]]},"119":{"position":[[3584,3]]},"129":{"position":[[502,1],[646,1]]},"143":{"position":[[2777,1],[2939,1]]},"145":{"position":[[2117,1],[2279,1]]},"217":{"position":[[215,1]]},"228":{"position":[[335,1],[405,1],[432,1],[456,1],[488,1],[496,1]]},"267":{"position":[[486,2],[551,2],[616,2],[662,2],[726,2],[784,2],[854,2],[894,2]]},"270":{"position":[[157,1]]},"288":{"position":[[503,1],[526,1]]},"292":{"position":[[351,2]]},"357":{"position":[[930,2]]},"407":{"position":[[2374,1]]},"411":{"position":[[472,2]]},"413":{"position":[[659,2]]},"415":{"position":[[84,2]]},"491":{"position":[[54,1],[138,1]]},"495":{"position":[[386,1],[448,1]]},"505":{"position":[[1620,2]]},"511":{"position":[[653,2]]},"527":{"position":[[48,3]]},"529":{"position":[[195,1],[364,1]]},"647":{"position":[[244,2]]},"989":{"position":[[228,3]]},"994":{"position":[[503,1],[526,1]]},"1071":{"position":[[262,3],[311,3]]},"1097":{"position":[[456,2]]},"1133":{"position":[[239,2]]},"1224":{"position":[[1989,1],[2117,2]]},"1343":{"position":[[487,1]]},"1463":{"position":[[363,2]]},"1475":{"position":[[128,1],[591,1],[745,1],[861,2],[874,1]]}}}],["2.15",{"_index":1495,"t":{"257":{"position":[[343,4]]}}}],["2.156",{"_index":1320,"t":{"202":{"position":[[1127,5]]},"215":{"position":[[306,5]]}}}],["2.19",{"_index":1107,"t":{"162":{"position":[[120,4],[228,4]]},"174":{"position":[[581,4]]}}}],["2.20",{"_index":695,"t":{"105":{"position":[[273,4]]},"119":{"position":[[420,4]]}}}],["2.293",{"_index":1298,"t":{"202":{"position":[[884,5]]},"215":{"position":[[90,5]]}}}],["2.352",{"_index":725,"t":{"107":{"position":[[923,6]]},"119":{"position":[[1212,6]]},"394":{"position":[[660,6]]},"459":{"position":[[107,6]]},"929":{"position":[[107,6]]},"1142":{"position":[[107,6]]},"1149":{"position":[[107,6]]},"1156":{"position":[[107,6]]}}}],["2.38,37766.13",{"_index":1051,"t":{"148":{"position":[[43,13]]}}}],["2.415619",{"_index":1732,"t":{"392":{"position":[[562,8]]},"447":{"position":[[157,8]]}}}],["2.416",{"_index":1018,"t":{"139":{"position":[[33,6],[119,5]]},"145":{"position":[[1131,5]]}}}],["2.44965511776504",{"_index":998,"t":{"137":{"position":[[1133,16]]},"145":{"position":[[415,16]]}}}],["2.5",{"_index":2121,"t":{"733":{"position":[[142,3]]},"786":{"position":[[20,3],[139,3]]}}}],["2.5.16",{"_index":2509,"t":{"1277":{"position":[[789,6]]}}}],["2.5.9",{"_index":2580,"t":{"1301":{"position":[[225,5]]},"1457":{"position":[[26,6]]}}}],["2.611471",{"_index":1735,"t":{"392":{"position":[[615,8]]},"447":{"position":[[210,8]]}}}],["2.7085",{"_index":1501,"t":{"257":{"position":[[558,6]]}}}],["2.73",{"_index":1498,"t":{"257":{"position":[[462,4]]}}}],["20",{"_index":807,"t":{"117":{"position":[[1381,2],[1455,2],[4520,2]]},"119":{"position":[[3012,2],[3086,2],[4824,2]]},"121":{"position":[[379,3],[453,3]]},"213":{"position":[[55,2]]},"419":{"position":[[336,2]]},"601":{"position":[[147,2]]},"639":{"position":[[145,2]]},"644":{"position":[[147,2]]},"649":{"position":[[341,2]]},"725":{"position":[[71,2]]},"881":{"position":[[84,2]]},"1081":{"position":[[72,2]]},"1089":{"position":[[167,2]]},"1101":{"position":[[168,2]]},"1277":{"position":[[249,2]]},"1499":{"position":[[508,2]]}}}],["20.0",{"_index":1166,"t":{"176":{"position":[[434,5]]}}}],["20.496",{"_index":733,"t":{"107":{"position":[[983,7]]},"119":{"position":[[1272,7]]},"394":{"position":[[720,7]]},"459":{"position":[[167,7]]},"929":{"position":[[167,7]]},"1142":{"position":[[167,7]]},"1149":{"position":[[167,7]]},"1156":{"position":[[167,7]]}}}],["200",{"_index":661,"t":{"97":{"position":[[944,3]]},"117":{"position":[[2451,5],[2457,4],[2462,4],[2467,4],[2571,3],[2655,3],[2742,3],[3136,3],[4543,3]]},"119":{"position":[[3552,5],[3558,4],[3563,4],[3568,4],[3672,3],[3756,3],[3843,3],[4035,3],[4847,3]]},"143":{"position":[[1347,3],[1660,3],[1735,3]]},"145":{"position":[[1654,3],[1729,3]]},"154":{"position":[[763,3]]},"172":{"position":[[785,3],[1598,3],[3615,3]]},"174":{"position":[[1855,3],[2203,3],[2791,3]]},"325":{"position":[[138,3]]},"333":{"position":[[292,3],[365,3]]},"622":{"position":[[20,3]]},"994":{"position":[[1021,3],[1094,3]]},"1073":{"position":[[290,3],[363,3]]}}}],["2000",{"_index":772,"t":{"109":{"position":[[717,4]]},"119":{"position":[[2203,4]]},"121":{"position":[[711,5]]},"725":{"position":[[34,4]]},"809":{"position":[[162,4]]},"1081":{"position":[[34,4]]}}}],["20000",{"_index":894,"t":{"121":{"position":[[820,6],[869,6],[918,6],[1212,6],[1261,6],[1310,6],[1359,6],[1571,6],[1651,6]]}}}],["200000",{"_index":943,"t":{"121":{"position":[[1752,7],[1799,7]]}}}],["2000000",{"_index":928,"t":{"121":{"position":[[1431,7],[1480,7],[1529,7]]},"176":{"position":[[1526,8]]},"202":{"position":[[120,8]]}}}],["200000000,4.1",{"_index":1144,"t":{"176":{"position":[[74,13]]}}}],["2001",{"_index":1534,"t":{"274":{"position":[[164,4]]},"676":{"position":[[18,4]]},"844":{"position":[[80,4]]}}}],["2005",{"_index":1121,"t":{"164":{"position":[[968,4]]},"172":{"position":[[2721,5]]},"174":{"position":[[1279,4]]},"274":{"position":[[190,4]]},"676":{"position":[[74,4]]},"844":{"position":[[106,4]]}}}],["2008",{"_index":1854,"t":{"435":{"position":[[828,5]]}}}],["2010",{"_index":1968,"t":{"491":{"position":[[105,4]]}}}],["2019",{"_index":2219,"t":{"1049":{"position":[[58,4]]}}}],["202",{"_index":2872,"t":{"1354":{"position":[[711,6]]}}}],["2020",{"_index":346,"t":{"52":{"position":[[2031,4]]},"109":{"position":[[674,4],[749,4]]},"117":{"position":[[3203,4],[3710,4]]},"119":{"position":[[2160,4],[2235,4]]},"176":{"position":[[839,4]]},"306":{"position":[[380,4],[457,4]]},"491":{"position":[[140,4]]},"585":{"position":[[111,4]]},"725":{"position":[[121,4]]},"749":{"position":[[274,4]]},"1077":{"position":[[263,4],[293,4],[453,5],[697,4],[757,5]]},"1081":{"position":[[124,4]]}}}],["2021",{"_index":1192,"t":{"176":{"position":[[905,4]]}}}],["2022",{"_index":1197,"t":{"176":{"position":[[971,4]]},"749":{"position":[[412,4]]}}}],["2023",{"_index":1200,"t":{"176":{"position":[[1037,4]]}}}],["2024",{"_index":1204,"t":{"176":{"position":[[1103,4],[1169,4]]}}}],["2026",{"_index":1212,"t":{"176":{"position":[[1235,4]]}}}],["2027",{"_index":1215,"t":{"176":{"position":[[1301,4]]}}}],["2028",{"_index":1218,"t":{"176":{"position":[[1367,4]]}}}],["2029",{"_index":1220,"t":{"176":{"position":[[1433,4]]}}}],["203",{"_index":2712,"t":{"1341":{"position":[[102,6]]}}}],["2030",{"_index":348,"t":{"52":{"position":[[2061,4]]},"109":{"position":[[698,4],[774,4],[1224,5]]},"117":{"position":[[3227,5],[3734,5]]},"119":{"position":[[2184,4],[2260,4]]},"176":{"position":[[1499,4]]},"306":{"position":[[410,4],[484,4]]}}}],["2031",{"_index":1223,"t":{"176":{"position":[[1565,4]]}}}],["204",{"_index":2778,"t":{"1345":{"position":[[155,6]]}}}],["2040",{"_index":2120,"t":{"725":{"position":[[47,5]]},"1081":{"position":[[47,5]]}}}],["205",{"_index":2762,"t":{"1343":{"position":[[1163,6]]}}}],["2050",{"_index":889,"t":{"121":{"position":[[690,5]]}}}],["2079",{"_index":2106,"t":{"721":{"position":[[250,4],[411,5],[680,4]]}}}],["2080",{"_index":2105,"t":{"721":{"position":[[202,4],[406,4]]}}}],["209",{"_index":2727,"t":{"1343":{"position":[[306,6]]}}}],["21.1",{"_index":1866,"t":{"437":{"position":[[135,5]]}}}],["21.42,141791.2",{"_index":1062,"t":{"148":{"position":[[198,14]]}}}],["21.4201,166554.2",{"_index":1063,"t":{"148":{"position":[[213,16]]}}}],["2100",{"_index":887,"t":{"121":{"position":[[669,5]]}}}],["21000",{"_index":902,"t":{"121":{"position":[[967,6],[1326,6],[1522,6]]}}}],["210000",{"_index":1199,"t":{"176":{"position":[[1030,6]]}}}],["210000000,4.1",{"_index":1145,"t":{"176":{"position":[[88,13]]}}}],["211",{"_index":2754,"t":{"1343":{"position":[[987,6]]}}}],["212",{"_index":2756,"t":{"1343":{"position":[[1024,6]]}}}],["213",{"_index":2699,"t":{"1339":{"position":[[173,6]]}}}],["214",{"_index":2695,"t":{"1339":{"position":[[133,6]]}}}],["215",{"_index":2747,"t":{"1343":{"position":[[784,6]]}}}],["2150",{"_index":885,"t":{"121":{"position":[[648,5]]}}}],["216",{"_index":2705,"t":{"1339":{"position":[[295,6]]}}}],["219",{"_index":2721,"t":{"1343":{"position":[[180,6]]}}}],["21deeb7",{"_index":2728,"t":{"1343":{"position":[[313,9]]}}}],["22.46",{"_index":1313,"t":{"202":{"position":[[1047,5],[1261,5],[1423,5]]},"215":{"position":[[235,5],[425,5],[569,5]]}}}],["22.767",{"_index":734,"t":{"107":{"position":[[991,7]]},"119":{"position":[[1280,7]]},"394":{"position":[[728,7]]},"459":{"position":[[175,7]]},"929":{"position":[[175,7]]},"1142":{"position":[[175,7]]},"1149":{"position":[[175,7]]},"1156":{"position":[[175,7]]}}}],["220",{"_index":2730,"t":{"1343":{"position":[[374,6]]}}}],["2200",{"_index":882,"t":{"121":{"position":[[627,5]]}}}],["22000",{"_index":904,"t":{"121":{"position":[[1016,6],[1277,6],[1375,6],[1604,6]]}}}],["220000.0",{"_index":1480,"t":{"249":{"position":[[115,8]]}}}],["2200000",{"_index":1190,"t":{"176":{"position":[[889,8],[955,8],[1021,8]]}}}],["220000000,4.4",{"_index":1146,"t":{"176":{"position":[[102,13]]}}}],["221",{"_index":2736,"t":{"1343":{"position":[[494,6]]}}}],["22100",{"_index":927,"t":{"121":{"position":[[1408,6],[1457,6]]}}}],["222",{"_index":2743,"t":{"1343":{"position":[[614,6]]}}}],["223",{"_index":2733,"t":{"1343":{"position":[[437,6]]}}}],["224",{"_index":2775,"t":{"1345":{"position":[[85,6]]}}}],["2250",{"_index":879,"t":{"121":{"position":[[606,5]]}}}],["2279ef4",{"_index":2819,"t":{"1350":{"position":[[531,9]]}}}],["229",{"_index":2749,"t":{"1343":{"position":[[846,6]]}}}],["22ef8f7",{"_index":2640,"t":{"1330":{"position":[[24,9]]}}}],["230",{"_index":2751,"t":{"1343":{"position":[[928,6]]}}}],["2300",{"_index":876,"t":{"121":{"position":[[585,5]]}}}],["23000",{"_index":909,"t":{"121":{"position":[[1065,6],[1228,6],[1424,6],[1473,6]]}}}],["2300000",{"_index":1202,"t":{"176":{"position":[[1087,8],[1153,8]]}}}],["230000000,4.8",{"_index":1147,"t":{"176":{"position":[[116,13]]}}}],["231.6",{"_index":1312,"t":{"202":{"position":[[1040,6],[1254,6],[1416,6]]},"215":{"position":[[229,5],[419,5],[563,5]]}}}],["232",{"_index":2772,"t":{"1345":{"position":[[37,6]]}}}],["2322",{"_index":1781,"t":{"407":{"position":[[1411,4]]}}}],["232f83b",{"_index":2685,"t":{"1337":{"position":[[86,9]]}}}],["233",{"_index":2745,"t":{"1343":{"position":[[717,6]]}}}],["2350",{"_index":874,"t":{"121":{"position":[[564,5]]}}}],["236",{"_index":2688,"t":{"1337":{"position":[[175,6]]}}}],["237",{"_index":2707,"t":{"1339":{"position":[[362,6]]}}}],["238",{"_index":2693,"t":{"1339":{"position":[[83,6]]}}}],["239",{"_index":2709,"t":{"1341":{"position":[[42,6]]}}}],["23:59:59",{"_index":2113,"t":{"721":{"position":[[423,10]]}}}],["24",{"_index":3092,"t":{"1386":{"position":[[945,5]]}}}],["24.6",{"_index":1868,"t":{"437":{"position":[[161,5]]}}}],["24000",{"_index":914,"t":{"121":{"position":[[1114,6],[1179,6]]}}}],["240000",{"_index":1203,"t":{"176":{"position":[[1096,6]]}}}],["2400000",{"_index":1210,"t":{"176":{"position":[[1219,8],[1285,8],[1351,8],[1417,8],[1483,8],[1549,8],[1615,8]]}}}],["240000000,5.1",{"_index":1148,"t":{"176":{"position":[[130,13]]}}}],["241",{"_index":2453,"t":{"1275":{"position":[[320,6]]}}}],["2415534",{"_index":2927,"t":{"1363":{"position":[[390,9]]}}}],["242",{"_index":2686,"t":{"1337":{"position":[[123,6]]}}}],["243",{"_index":2702,"t":{"1339":{"position":[[235,6]]}}}],["244",{"_index":2787,"t":{"1345":{"position":[[431,6]]}}}],["245",{"_index":2790,"t":{"1345":{"position":[[525,6]]}}}],["2455e34",{"_index":2860,"t":{"1354":{"position":[[497,9]]}}}],["246",{"_index":2785,"t":{"1345":{"position":[[367,6]]}}}],["247",{"_index":2760,"t":{"1343":{"position":[[1097,6]]}}}],["248dabb",{"_index":3006,"t":{"1369":{"position":[[19,9]]}}}],["24c27bb",{"_index":2817,"t":{"1350":{"position":[[479,9]]}}}],["25",{"_index":1789,"t":{"407":{"position":[[2527,2],[2600,2]]}}}],["250",{"_index":873,"t":{"121":{"position":[[559,4]]},"1049":{"position":[[461,3],[544,3],[632,3],[723,3],[812,3]]},"1345":{"position":[[574,6]]}}}],["2500",{"_index":901,"t":{"121":{"position":[[961,5]]}}}],["25000",{"_index":916,"t":{"121":{"position":[[1130,6],[1163,6],[1506,6],[1555,6]]},"233":{"position":[[166,5],[382,5]]}}}],["250000",{"_index":1169,"t":{"176":{"position":[[453,6]]}}}],["2500000",{"_index":1221,"t":{"176":{"position":[[1460,8]]}}}],["250000000,5.4",{"_index":1149,"t":{"176":{"position":[[144,13]]}}}],["2507bb9",{"_index":2907,"t":{"1356":{"position":[[842,9]]}}}],["250928c",{"_index":3047,"t":{"1376":{"position":[[115,9]]}}}],["251",{"_index":2650,"t":{"1332":{"position":[[386,6]]}}}],["252",{"_index":2652,"t":{"1332":{"position":[[474,6]]}}}],["253",{"_index":2781,"t":{"1345":{"position":[[205,6]]}}}],["254",{"_index":2691,"t":{"1339":{"position":[[33,6]]}}}],["255",{"_index":2767,"t":{"1343":{"position":[[1251,6]]}}}],["256",{"_index":2783,"t":{"1345":{"position":[[313,6]]}}}],["257",{"_index":2676,"t":{"1334":{"position":[[524,6]]}}}],["258",{"_index":2764,"t":{"1343":{"position":[[1217,6]]}}}],["259",{"_index":2758,"t":{"1343":{"position":[[1061,6]]}}}],["26",{"_index":1299,"t":{"202":{"position":[[900,3],[928,3],[1063,3],[1090,3]]},"215":{"position":[[105,2],[130,2],[250,2],[274,2]]}}}],["26.21",{"_index":1297,"t":{"202":{"position":[[877,6]]},"215":{"position":[[84,5]]}}}],["260",{"_index":2658,"t":{"1334":{"position":[[55,6]]}}}],["26000",{"_index":911,"t":{"121":{"position":[[1081,6]]}}}],["2600000",{"_index":1366,"t":{"213":{"position":[[36,7]]}}}],["260000000,5.8",{"_index":1150,"t":{"176":{"position":[[158,13]]}}}],["261",{"_index":2637,"t":{"1328":{"position":[[240,6]]}}}],["261749f",{"_index":2530,"t":{"1286":{"position":[[48,9]]}}}],["263",{"_index":2635,"t":{"1328":{"position":[[165,6]]}}}],["264",{"_index":2639,"t":{"1330":{"position":[[17,6]]}}}],["267",{"_index":2678,"t":{"1334":{"position":[[578,6]]}}}],["269",{"_index":2633,"t":{"1328":{"position":[[95,6]]}}}],["27",{"_index":3094,"t":{"1386":{"position":[[1144,5]]}}}],["270000000,6.1",{"_index":1151,"t":{"176":{"position":[[172,13]]}}}],["271",{"_index":2670,"t":{"1334":{"position":[[349,6]]}}}],["272",{"_index":2631,"t":{"1326":{"position":[[150,6]]}}}],["272f0d7",{"_index":3062,"t":{"1382":{"position":[[93,9]]}}}],["276",{"_index":2648,"t":{"1332":{"position":[[305,6]]}}}],["277",{"_index":2646,"t":{"1332":{"position":[[150,6]]}}}],["279",{"_index":2626,"t":{"1326":{"position":[[75,6]]}}}],["28.56,205563.6",{"_index":1064,"t":{"148":{"position":[[230,14]]}}}],["28000",{"_index":906,"t":{"121":{"position":[[1032,6]]}}}],["280000",{"_index":1208,"t":{"176":{"position":[[1162,6]]}}}],["280000.0",{"_index":1482,"t":{"249":{"position":[[131,8]]}}}],["280000000,6.4",{"_index":1152,"t":{"176":{"position":[[186,13]]}}}],["282",{"_index":2621,"t":{"1324":{"position":[[26,6]]},"1334":{"position":[[392,6]]}}}],["284",{"_index":2660,"t":{"1334":{"position":[[103,6]]}}}],["285",{"_index":2571,"t":{"1301":{"position":[[42,6]]}}}],["288",{"_index":2654,"t":{"1332":{"position":[[591,6]]}}}],["28885f2",{"_index":2582,"t":{"1301":{"position":[[238,9]]}}}],["289",{"_index":2656,"t":{"1332":{"position":[[649,6]]}}}],["2895ae7",{"_index":3057,"t":{"1378":{"position":[[145,9]]}}}],["2900",{"_index":1620,"t":{"355":{"position":[[187,6]]},"361":{"position":[[192,6]]},"392":{"position":[[192,6]]},"396":{"position":[[290,6]]},"608":{"position":[[136,6]]},"683":{"position":[[141,6]]},"693":{"position":[[192,6]]},"865":{"position":[[192,6]]}}}],["290000000,6.8",{"_index":1153,"t":{"176":{"position":[[200,13]]}}}],["291",{"_index":2455,"t":{"1275":{"position":[[415,6]]}}}],["293",{"_index":2611,"t":{"1314":{"position":[[9,6]]}}}],["294",{"_index":2618,"t":{"1318":{"position":[[29,6]]}}}],["296",{"_index":2599,"t":{"1310":{"position":[[78,6]]}}}],["2961d2f",{"_index":2446,"t":{"1275":{"position":[[165,9]]}}}],["2981f2c",{"_index":2703,"t":{"1339":{"position":[[242,9]]}}}],["2
  • list",{"_index":3220,"t":{"1475":{"position":[[799,14],[929,14]]}}}],["2stat",{"_index":3214,"t":{"1475":{"position":[[656,23]]}}}],["2_stage_chart",{"_index":1818,"t":{"419":{"position":[[383,13]]},"649":{"position":[[439,13]]},"1101":{"position":[[215,13]]}}}],["2_stage_outlet",{"_index":1816,"t":{"419":{"position":[[245,14],[485,14]]},"649":{"position":[[250,14],[592,14]]},"1101":{"position":[[317,14]]},"1135":{"position":[[245,14]]}}}],["2a1e8b0",{"_index":2980,"t":{"1367":{"position":[[616,9]]}}}],["2af9d13",{"_index":2356,"t":{"1262":{"position":[[172,9]]}}}],["2be1736",{"_index":2402,"t":{"1273":{"position":[[114,9]]}}}],["2bef707",{"_index":2964,"t":{"1365":{"position":[[440,9]]}}}],["2cb09e2",{"_index":2572,"t":{"1301":{"position":[[49,9],[408,9]]},"1305":{"position":[[31,9]]}}}],["2d",{"_index":2929,"t":{"1363":{"position":[[430,2]]}}}],["2df3bdf",{"_index":2957,"t":{"1365":{"position":[[216,9]]}}}],["2ea517",{"_index":3037,"t":{"1373":{"position":[[215,9]]}}}],["2f95c29",{"_index":2873,"t":{"1354":{"position":[[718,9]]}}}],["2nd",{"_index":1821,"t":{"419":{"position":[[601,3]]},"649":{"position":[[708,3]]},"1101":{"position":[[433,3]]}}}],["3",{"_index":382,"t":{"52":{"position":[[3290,2]]},"54":{"position":[[1648,2]]},"117":{"position":[[2417,3],[2421,2],[2424,2],[2427,2],[2549,1],[2633,1],[2720,1],[3114,1]]},"119":{"position":[[3518,3],[3522,2],[3525,2],[3528,2],[3650,1],[3734,1],[3821,1],[4013,1]]},"202":{"position":[[1601,1],[1859,1]]},"257":{"position":[[39,1],[80,1]]},"325":{"position":[[116,1]]},"333":{"position":[[270,1],[343,1]]},"614":{"position":[[369,3],[373,2]]},"784":{"position":[[38,2]]},"994":{"position":[[628,3],[632,2],[999,1],[1072,1]]},"1073":{"position":[[268,1],[341,1]]},"1343":{"position":[[546,1]]},"1475":{"position":[[162,1],[603,1],[759,1],[876,2],[889,1]]},"1483":{"position":[[24,1]]}}}],["3,3,0",{"_index":2200,"t":{"991":{"position":[[124,7]]}}}],["3.0.11",{"_index":2732,"t":{"1343":{"position":[[421,6]]}}}],["3.3.2",{"_index":2467,"t":{"1277":{"position":[[30,5]]},"1343":{"position":[[431,5]]}}}],["3.452",{"_index":1342,"t":{"202":{"position":[[1396,5]]},"215":{"position":[[545,5]]}}}],["3.5",{"_index":990,"t":{"137":{"position":[[821,3],[986,4],[1679,3]]},"145":{"position":[[961,3]]},"398":{"position":[[360,3]]},"963":{"position":[[181,3]]}}}],["3.678",{"_index":1338,"t":{"202":{"position":[[1342,5]]},"215":{"position":[[497,5]]}}}],["30",{"_index":751,"t":{"107":{"position":[[1264,2],[1349,2],[1434,2]]},"119":{"position":[[1553,2],[1638,2],[1723,2]]},"369":{"position":[[271,2]]},"392":{"position":[[879,2]]},"394":{"position":[[497,2]]},"396":{"position":[[794,2],[872,2]]},"398":{"position":[[437,2]]},"419":{"position":[[416,2]]},"649":{"position":[[472,2]]},"963":{"position":[[244,2]]},"1101":{"position":[[248,2]]}}}],["300",{"_index":875,"t":{"121":{"position":[[580,4]]},"1316":{"position":[[42,6]]}}}],["3000",{"_index":839,"t":{"121":{"position":[[80,5],[1010,5]]}}}],["30000",{"_index":896,"t":{"121":{"position":[[836,6],[885,6],[934,6],[983,6]]},"176":{"position":[[1014,6]]}}}],["300000.0",{"_index":1484,"t":{"249":{"position":[[146,8]]}}}],["3000000",{"_index":925,"t":{"121":{"position":[[1366,8],[1415,8],[1464,8]]},"176":{"position":[[1592,8]]},"202":{"position":[[136,8]]}}}],["3000000,50000",{"_index":1159,"t":{"176":{"position":[[324,13]]}}}],["300000000,7.1",{"_index":1154,"t":{"176":{"position":[[214,13]]}}}],["302",{"_index":2581,"t":{"1301":{"position":[[231,6]]}}}],["303",{"_index":2614,"t":{"1316":{"position":[[102,6]]},"1321":{"position":[[72,6]]},"1324":{"position":[[208,6]]}}}],["304",{"_index":2604,"t":{"1310":{"position":[[180,6]]}}}],["305",{"_index":2542,"t":{"1293":{"position":[[45,6]]},"1297":{"position":[[150,6]]}}}],["30553e0",{"_index":2839,"t":{"1352":{"position":[[75,9]]}}}],["307",{"_index":2577,"t":{"1301":{"position":[[169,6]]}}}],["31",{"_index":2112,"t":{"721":{"position":[[420,2]]}}}],["31.36",{"_index":1300,"t":{"202":{"position":[[904,6]]},"215":{"position":[[108,5]]}}}],["310",{"_index":2608,"t":{"1312":{"position":[[65,6]]}}}],["310000",{"_index":1211,"t":{"176":{"position":[[1228,6]]}}}],["311",{"_index":2602,"t":{"1310":{"position":[[136,6]]}}}],["312",{"_index":2543,"t":{"1295":{"position":[[42,6]]}}}],["313",{"_index":2472,"t":{"1277":{"position":[[106,6]]}}}],["315",{"_index":2585,"t":{"1301":{"position":[[305,6]]}}}],["317c958",{"_index":2362,"t":{"1266":{"position":[[39,9]]}}}],["318",{"_index":2591,"t":{"1303":{"position":[[35,6]]}}}],["319",{"_index":2555,"t":{"1297":{"position":[[263,6]]}}}],["320",{"_index":2597,"t":{"1307":{"position":[[26,6]]}}}],["3201",{"_index":1785,"t":{"407":{"position":[[1654,5]]}}}],["321",{"_index":2552,"t":{"1297":{"position":[[195,6]]}}}],["322",{"_index":2558,"t":{"1299":{"position":[[31,6]]}}}],["323",{"_index":2560,"t":{"1299":{"position":[[106,6]]}}}],["324",{"_index":2545,"t":{"1297":{"position":[[39,6]]}}}],["3250,250,2640,59",{"_index":1173,"t":{"176":{"position":[[516,16]]}}}],["3250,360,2490,68",{"_index":1174,"t":{"176":{"position":[[533,16]]}}}],["3250,500,2342,77",{"_index":1175,"t":{"176":{"position":[[550,16]]}}}],["3250,600,2210,80",{"_index":1176,"t":{"176":{"position":[[567,16]]}}}],["3250,667,2068,78",{"_index":1177,"t":{"176":{"position":[[584,16]]}}}],["3250,735,1870,74",{"_index":1178,"t":{"176":{"position":[[601,16]]}}}],["326",{"_index":2583,"t":{"1301":{"position":[[268,6]]}}}],["327",{"_index":2589,"t":{"1301":{"position":[[375,6]]}}}],["328",{"_index":2593,"t":{"1303":{"position":[[92,6]]}}}],["32885b5",{"_index":2789,"t":{"1345":{"position":[[481,9]]}}}],["329c8e9",{"_index":2987,"t":{"1367":{"position":[[946,9]]}}}],["32f0289",{"_index":2556,"t":{"1297":{"position":[[270,9]]}}}],["33.32,231569.8",{"_index":1065,"t":{"148":{"position":[[245,14]]}}}],["33000",{"_index":1195,"t":{"176":{"position":[[948,6],[1080,6],[1410,6],[1608,6]]}}}],["330000.0",{"_index":1486,"t":{"249":{"position":[[161,8]]}}}],["331",{"_index":2574,"t":{"1301":{"position":[[99,6]]}}}],["332",{"_index":2549,"t":{"1297":{"position":[[88,6]]}}}],["333",{"_index":2587,"t":{"1301":{"position":[[342,6]]}}}],["334",{"_index":2562,"t":{"1299":{"position":[[152,6]]}}}],["335",{"_index":2534,"t":{"1286":{"position":[[151,6]]}}}],["337",{"_index":2459,"t":{"1275":{"position":[[519,6]]}}}],["338",{"_index":2529,"t":{"1286":{"position":[[41,6]]}}}],["339",{"_index":2532,"t":{"1286":{"position":[[101,6]]}}}],["34",{"_index":1304,"t":{"202":{"position":[[954,3],[981,3]]},"215":{"position":[[153,2],[177,2]]}}}],["34000",{"_index":1189,"t":{"176":{"position":[[882,6]]}}}],["341",{"_index":2510,"t":{"1277":{"position":[[796,6]]}}}],["343",{"_index":2536,"t":{"1288":{"position":[[13,6]]}}}],["347",{"_index":2523,"t":{"1279":{"position":[[137,6]]}}}],["349",{"_index":2432,"t":{"1273":{"position":[[1084,6]]}}}],["34cebc4",{"_index":2605,"t":{"1310":{"position":[[187,9]]}}}],["35",{"_index":1820,"t":{"419":{"position":[[472,2]]},"649":{"position":[[579,2]]},"1101":{"position":[[304,2]]}}}],["350",{"_index":878,"t":{"121":{"position":[[601,4]]}}}],["3500",{"_index":843,"t":{"121":{"position":[[103,5],[1059,5]]}}}],["35000",{"_index":1207,"t":{"176":{"position":[[1146,6],[1542,6]]}}}],["350000",{"_index":1214,"t":{"176":{"position":[[1294,6]]}}}],["350000.0",{"_index":1488,"t":{"249":{"position":[[176,8]]}}}],["3500000",{"_index":1188,"t":{"176":{"position":[[866,8],[1394,8]]}}}],["3500000,130000",{"_index":1160,"t":{"176":{"position":[[338,14]]}}}],["3503",{"_index":1621,"t":{"355":{"position":[[194,5]]},"361":{"position":[[199,5]]},"392":{"position":[[199,5]]},"396":{"position":[[297,5]]},"608":{"position":[[143,5]]},"683":{"position":[[148,5]]},"693":{"position":[[199,5]]},"865":{"position":[[199,5]]}}}],["351",{"_index":2469,"t":{"1277":{"position":[[45,6]]}}}],["352",{"_index":2457,"t":{"1275":{"position":[[462,6]]}}}],["357",{"_index":2500,"t":{"1277":{"position":[[637,6]]}}}],["358",{"_index":2396,"t":{"1273":{"position":[[37,6]]}}}],["359",{"_index":2403,"t":{"1273":{"position":[[151,6]]}}}],["35a3640",{"_index":2999,"t":{"1367":{"position":[[1248,9]]}}}],["35c4f68",{"_index":2706,"t":{"1339":{"position":[[302,9]]}}}],["36.93",{"_index":1315,"t":{"202":{"position":[[1067,6]]},"215":{"position":[[253,5]]}}}],["36000",{"_index":1209,"t":{"176":{"position":[[1212,6],[1278,6],[1476,6]]}}}],["36000,13",{"_index":1184,"t":{"176":{"position":[[700,8]]}}}],["3600000",{"_index":1193,"t":{"176":{"position":[[932,8]]}}}],["361",{"_index":2406,"t":{"1273":{"position":[[235,6]]}}}],["362",{"_index":2504,"t":{"1277":{"position":[[718,6]]}}}],["3622927",{"_index":2415,"t":{"1273":{"position":[[556,9]]}}}],["3632fbd",{"_index":2450,"t":{"1275":{"position":[[208,9]]}}}],["3634a9e",{"_index":2694,"t":{"1339":{"position":[[90,9]]}}}],["364",{"_index":2497,"t":{"1277":{"position":[[599,6]]}}}],["367",{"_index":2480,"t":{"1277":{"position":[[252,6]]}}}],["368",{"_index":2462,"t":{"1275":{"position":[[620,6]]}}}],["369",{"_index":2445,"t":{"1275":{"position":[[158,6]]}}}],["3700000",{"_index":1198,"t":{"176":{"position":[[998,8]]}}}],["3708",{"_index":1640,"t":{"361":{"position":[[309,6]]},"683":{"position":[[258,6]]}}}],["371",{"_index":2518,"t":{"1279":{"position":[[29,6]]}}}],["373",{"_index":2506,"t":{"1277":{"position":[[755,6]]}}}],["374",{"_index":2413,"t":{"1273":{"position":[[495,6]]}}}],["377",{"_index":2438,"t":{"1273":{"position":[[1210,6]]}}}],["378",{"_index":2525,"t":{"1281":{"position":[[36,6]]}}}],["38",{"_index":722,"t":{"107":{"position":[[890,2]]},"119":{"position":[[1181,2]]},"202":{"position":[[1116,3],[1143,3]]},"215":{"position":[[297,2],[321,2]]},"394":{"position":[[629,2]]},"459":{"position":[[76,2]]},"929":{"position":[[76,2]]},"1142":{"position":[[76,2]]},"1149":{"position":[[76,2]]},"1156":{"position":[[76,2]]},"1386":{"position":[[647,5]]}}}],["38.08,257576.1",{"_index":1066,"t":{"148":{"position":[[260,14]]}}}],["380",{"_index":2486,"t":{"1277":{"position":[[405,6]]}}}],["38000",{"_index":1216,"t":{"176":{"position":[[1344,6]]}}}],["3800000",{"_index":1201,"t":{"176":{"position":[[1064,8]]}}}],["381",{"_index":2494,"t":{"1277":{"position":[[556,6]]}}}],["382",{"_index":2430,"t":{"1273":{"position":[[1029,6]]}}}],["383e7f6",{"_index":2389,"t":{"1270":{"position":[[153,9]]}}}],["384",{"_index":2489,"t":{"1277":{"position":[[454,6]]}}}],["386",{"_index":2451,"t":{"1275":{"position":[[241,6]]}}}],["387",{"_index":2512,"t":{"1277":{"position":[[846,6]]}}}],["388",{"_index":2352,"t":{"1262":{"position":[[111,6]]}}}],["38870a3",{"_index":2948,"t":{"1365":{"position":[[31,9]]}}}],["389db6f",{"_index":3097,"t":{"1386":{"position":[[1180,9]]}}}],["39",{"_index":3046,"t":{"1376":{"position":[[109,5]]}}}],["390",{"_index":2392,"t":{"1270":{"position":[[216,6]]}}}],["390000",{"_index":1217,"t":{"176":{"position":[[1360,6]]}}}],["3900000",{"_index":1205,"t":{"176":{"position":[[1130,8]]}}}],["392",{"_index":2368,"t":{"1268":{"position":[[45,6]]}}}],["393",{"_index":2361,"t":{"1266":{"position":[[32,6]]}}}],["394",{"_index":2366,"t":{"1266":{"position":[[125,6]]}}}],["395",{"_index":2363,"t":{"1266":{"position":[[82,6]]}}}],["399",{"_index":2384,"t":{"1268":{"position":[[401,6]]}}}],["39c5c36",{"_index":3003,"t":{"1367":{"position":[[1347,9]]}}}],["39df792",{"_index":2974,"t":{"1367":{"position":[[206,9]]}}}],["3
  • .yml",{"_index":160,"t":{"25":{"position":[[313,6]]}}}],["8b97673",{"_index":2710,"t":{"1341":{"position":[[49,9]]}}}],["8be87dd",{"_index":2881,"t":{"1356":{"position":[[49,9]]}}}],["8c2c786",{"_index":2600,"t":{"1310":{"position":[[85,9]]}}}],["8cf9e1b",{"_index":2683,"t":{"1337":{"position":[[30,9]]}}}],["8d03822",{"_index":2615,"t":{"1316":{"position":[[109,9]]}}}],["8e76c8a",{"_index":3085,"t":{"1386":{"position":[[479,9]]}}}],["8f0d716",{"_index":2962,"t":{"1365":{"position":[[379,9]]}}}],["8feaf6c",{"_index":2433,"t":{"1273":{"position":[[1091,9]]}}}],["9",{"_index":388,"t":{"52":{"position":[[3448,3],[3581,2]]},"129":{"position":[[358,1]]},"143":{"position":[[2855,1]]},"145":{"position":[[2195,1]]}}}],["9.125",{"_index":728,"t":{"107":{"position":[[944,6]]},"119":{"position":[[1233,6]]},"394":{"position":[[681,6]]},"459":{"position":[[128,6]]},"929":{"position":[[128,6]]},"1142":{"position":[[128,6]]},"1149":{"position":[[128,6]]},"1156":{"position":[[128,6]]}}}],["9.52,76775.52",{"_index":1055,"t":{"148":{"position":[[98,13]]}}}],["9.557",{"_index":1322,"t":{"202":{"position":[[1154,5]]},"215":{"position":[[330,5]]}}}],["9.712",{"_index":1333,"t":{"202":{"position":[[1288,5]]},"215":{"position":[[449,5]]}}}],["90",{"_index":2926,"t":{"1363":{"position":[[384,5]]}}}],["900",{"_index":937,"t":{"121":{"position":[[1646,4]]}}}],["9000",{"_index":923,"t":{"121":{"position":[[1304,5]]},"176":{"position":[[860,5]]}}}],["9000,4",{"_index":1181,"t":{"176":{"position":[[677,6]]}}}],["91",{"_index":2973,"t":{"1367":{"position":[[200,5]]}}}],["924526a",{"_index":2885,"t":{"1356":{"position":[[148,9]]}}}],["92cb4fa",{"_index":3044,"t":{"1376":{"position":[[56,9]]}}}],["93",{"_index":1778,"t":{"407":{"position":[[1052,2]]}}}],["9329ae2",{"_index":2619,"t":{"1318":{"position":[[36,9]]}}}],["936b941",{"_index":3067,"t":{"1382":{"position":[[291,9]]}}}],["93de4f4",{"_index":3064,"t":{"1382":{"position":[[199,9]]}}}],["94",{"_index":2981,"t":{"1367":{"position":[[703,5]]}}}],["94.12",{"_index":1310,"t":{"202":{"position":[[1012,6]]},"215":{"position":[[204,5]]}}}],["94.17",{"_index":1328,"t":{"202":{"position":[[1227,6]]},"215":{"position":[[395,5]]}}}],["94.24",{"_index":1307,"t":{"202":{"position":[[985,6]]},"215":{"position":[[180,5]]}}}],["9428979",{"_index":2887,"t":{"1356":{"position":[[195,9]]}}}],["9482421",{"_index":3049,"t":{"1376":{"position":[[166,9]]}}}],["94be7fa",{"_index":3014,"t":{"1369":{"position":[[212,9]]}}}],["95",{"_index":2979,"t":{"1367":{"position":[[610,5]]}}}],["9502bcc",{"_index":2899,"t":{"1356":{"position":[[521,9]]}}}],["950b0fd",{"_index":2511,"t":{"1277":{"position":[[803,9]]}}}],["9629f22",{"_index":2675,"t":{"1334":{"position":[[479,9]]}}}],["963d9ea",{"_index":2561,"t":{"1299":{"position":[[113,9]]}}}],["97",{"_index":2989,"t":{"1367":{"position":[[1073,5]]}}}],["97.79",{"_index":1341,"t":{"202":{"position":[[1389,6]]},"215":{"position":[[539,5]]}}}],["975d3b1",{"_index":2437,"t":{"1273":{"position":[[1170,9]]}}}],["9765874",{"_index":2428,"t":{"1273":{"position":[[981,9]]}}}],["98198fc",{"_index":2666,"t":{"1334":{"position":[[234,9]]}}}],["9886",{"_index":1639,"t":{"361":{"position":[[298,4]]},"683":{"position":[[247,4]]}}}],["990f3c2",{"_index":2609,"t":{"1312":{"position":[[72,9]]}}}],["9a54f51",{"_index":3080,"t":{"1386":{"position":[[312,9]]}}}],["9b7b308",{"_index":2997,"t":{"1367":{"position":[[1200,9]]}}}],["9b95ee5",{"_index":2795,"t":{"1348":{"position":[[72,9]]}}}],["9c3af00",{"_index":3096,"t":{"1386":{"position":[[1165,9]]}}}],["9d66de6",{"_index":3104,"t":{"1389":{"position":[[39,9]]}}}],["9de403c",{"_index":2944,"t":{"1363":{"position":[[907,9]]}}}],["9f4a4af",{"_index":2967,"t":{"1367":{"position":[[18,9]]}}}],["9f580c1",{"_index":2889,"t":{"1356":{"position":[[242,9]]}}}],["_",{"_index":390,"t":{"52":{"position":[[3463,4],[3599,4]]}}}],["_type_handl",{"_index":2482,"t":{"1277":{"position":[[278,13]]}}}],["a01a215",{"_index":3011,"t":{"1369":{"position":[[130,9]]}}}],["a135a97",{"_index":2513,"t":{"1277":{"position":[[853,9]]}}}],["a16a695",{"_index":2947,"t":{"1363":{"position":[[1070,9]]}}}],["a18de1",{"_index":2925,"t":{"1363":{"position":[[302,9]]}}}],["a1d2ce6",{"_index":2788,"t":{"1345":{"position":[[438,9]]}}}],["a22ffe8",{"_index":2454,"t":{"1275":{"position":[[327,9]]}}}],["a27c392",{"_index":2821,"t":{"1350":{"position":[[574,9]]}}}],["a2b5c1a",{"_index":3054,"t":{"1378":{"position":[[99,9]]}}}],["a310df2",{"_index":2753,"t":{"1343":{"position":[[956,9]]}}}],["a35c604",{"_index":2507,"t":{"1277":{"position":[[762,9]]}}}],["a4fff16",{"_index":2629,"t":{"1326":{"position":[[118,9]]}}}],["a50148c",{"_index":2672,"t":{"1334":{"position":[[399,9]]}}}],["a71abf",{"_index":2848,"t":{"1352":{"position":[[427,9]]}}}],["a7b22e2",{"_index":3059,"t":{"1382":{"position":[[18,9]]}}}],["a9cca9",{"_index":2473,"t":{"1277":{"position":[[113,9]]}}}],["a_genset",{"_index":2275,"t":{"1224":{"position":[[621,8]]},"1229":{"position":[[619,8]]}}}],["a_single_speed_pump",{"_index":1266,"t":{"196":{"position":[[25,19]]}}}],["a_single_speed_pump_with_head_margin_appli",{"_index":1270,"t":{"196":{"position":[[341,44]]}}}],["a_variable_speed_pump",{"_index":1268,"t":{"196":{"position":[[180,21]]}}}],["aa65163",{"_index":2763,"t":{"1343":{"position":[[1170,9]]}}}],["ab25e05",{"_index":2893,"t":{"1356":{"position":[[333,9]]}}}],["ab80399",{"_index":2442,"t":{"1275":{"position":[[17,9]]}}}],["abbb704",{"_index":2528,"t":{"1284":{"position":[[37,9]]}}}],["abil",{"_index":3159,"t":{"1463":{"position":[[470,7]]}}}],["abov",{"_index":440,"t":{"54":{"position":[[1348,5],[1589,6]]},"99":{"position":[[505,6]]},"111":{"position":[[360,6],[410,6]]},"117":{"position":[[1968,6],[2852,6],[2909,6]]},"137":{"position":[[980,5]]},"152":{"position":[[960,5]]},"156":{"position":[[475,6]]},"164":{"position":[[1338,6]]},"166":{"position":[[324,6],[374,6]]},"172":{"position":[[1203,5],[2251,5],[2438,5],[2881,6]]},"181":{"position":[[1182,5]]},"204":{"position":[[1118,7]]},"337":{"position":[[1702,6]]},"363":{"position":[[1298,5]]},"381":{"position":[[662,5],[889,5]]},"389":{"position":[[310,5]]},"407":{"position":[[991,6]]},"468":{"position":[[2502,5]]},"763":{"position":[[432,5]]},"850":{"position":[[174,5],[410,5]]},"935":{"position":[[380,5]]},"957":{"position":[[290,5]]},"1229":{"position":[[1903,6]]},"1499":{"position":[[43,6]]}}}],["absolut",{"_index":965,"t":{"127":{"position":[[223,8]]},"421":{"position":[[962,8]]},"763":{"position":[[223,8]]},"767":{"position":[[32,9]]},"1386":{"position":[[275,8]]}}}],["accept",{"_index":538,"t":{"75":{"position":[[16,8]]},"505":{"position":[[1555,9]]},"511":{"position":[[588,9]]},"877":{"position":[[252,8]]},"1363":{"position":[[238,7]]},"1399":{"position":[[16,6]]},"1411":{"position":[[16,8]]},"1479":{"position":[[81,7],[194,9]]}}}],["access",{"_index":34,"t":{"7":{"position":[[209,6]]},"71":{"position":[[288,10]]},"1350":{"position":[[1053,8]]},"1463":{"position":[[39,6]]}}}],["accompani",{"_index":1540,"t":{"282":{"position":[[113,11]]},"363":{"position":[[1717,11]]},"471":{"position":[[284,11]]}}}],["accord",{"_index":1582,"t":{"315":{"position":[[82,9]]},"943":{"position":[[82,9]]},"1386":{"position":[[549,9]]}}}],["account",{"_index":225,"t":{"35":{"position":[[931,7]]},"525":{"position":[[161,7]]},"1013":{"position":[[30,7],[571,9]]},"1053":{"position":[[725,7]]},"1057":{"position":[[227,7]]},"1421":{"position":[[98,7]]}}}],["accur",{"_index":566,"t":{"84":{"position":[[261,8]]},"363":{"position":[[388,8]]}}}],["accuraci",{"_index":557,"t":{"84":{"position":[[84,10],[424,8],[459,8],[511,8]]},"357":{"position":[[933,8]]},"1247":{"position":[[13,8]]}}}],["achiev",{"_index":1440,"t":{"237":{"position":[[192,7]]},"589":{"position":[[784,10]]},"725":{"position":[[95,8]]},"1081":{"position":[[96,8]]}}}],["act",{"_index":2125,"t":{"747":{"position":[[649,3]]}}}],["action",{"_index":2719,"t":{"1343":{"position":[[161,7]]},"1373":{"position":[[137,6]]},"1501":{"position":[[485,7]]}}}],["actions/cach",{"_index":2466,"t":{"1277":{"position":[[11,13]]},"1343":{"position":[[402,13]]}}}],["actions/checkout",{"_index":2735,"t":{"1343":{"position":[[465,16]]}}}],["actions/setup",{"_index":2471,"t":{"1277":{"position":[[73,13]]},"1343":{"position":[[522,13]]}}}],["activ",{"_index":183,"t":{"33":{"position":[[293,6]]},"44":{"position":[[179,6],[341,8]]},"477":{"position":[[1421,11]]},"1425":{"position":[[96,6],[135,7]]},"1469":{"position":[[55,9]]}}}],["actual",{"_index":353,"t":{"52":{"position":[[2293,8]]},"363":{"position":[[129,6],[1318,6]]},"407":{"position":[[1005,6],[1205,6],[1304,6],[1389,6]]},"481":{"position":[[888,6]]},"589":{"position":[[861,6]]},"922":{"position":[[132,6]]},"1053":{"position":[[69,6],[137,6]]},"1236":{"position":[[86,8]]},"1350":{"position":[[301,6]]},"1427":{"position":[[0,6],[61,6],[172,6]]},"1447":{"position":[[200,6]]}}}],["ad",{"_index":169,"t":{"30":{"position":[[37,6]]},"54":{"position":[[574,5],[1617,5]]},"67":{"position":[[444,5]]},"226":{"position":[[188,5],[418,6]]},"233":{"position":[[269,5]]},"292":{"position":[[618,5]]},"381":{"position":[[2423,5]]},"385":{"position":[[255,5]]},"387":{"position":[[722,5]]},"389":{"position":[[1130,5]]},"433":{"position":[[1032,5]]},"457":{"position":[[313,5]]},"463":{"position":[[457,5]]},"468":{"position":[[952,5]]},"479":{"position":[[291,6]]},"525":{"position":[[198,5],[352,5]]},"585":{"position":[[10,6]]},"612":{"position":[[309,5]]},"961":{"position":[[474,5]]},"987":{"position":[[302,5]]},"998":{"position":[[32,5],[57,5]]},"1013":{"position":[[21,5]]},"1154":{"position":[[313,5]]},"1224":{"position":[[172,5],[943,5]]},"1231":{"position":[[730,5]]},"1234":{"position":[[0,5],[58,5],[451,5]]},"1247":{"position":[[128,5],[270,5]]},"1354":{"position":[[242,6]]},"1367":{"position":[[558,5]]},"1415":{"position":[[367,5]]},"1431":{"position":[[78,6]]},"1436":{"position":[[0,5]]},"1450":{"position":[[0,5]]},"1521":{"position":[[47,6]]},"1523":{"position":[[24,5]]}}}],["add",{"_index":244,"t":{"37":{"position":[[84,3]]},"54":{"position":[[556,3]]},"93":{"position":[[332,3]]},"109":{"position":[[1127,4]]},"377":{"position":[[56,3]]},"505":{"position":[[547,3]]},"511":{"position":[[1010,3]]},"733":{"position":[[28,3]]},"775":{"position":[[34,3]]},"1213":{"position":[[0,3],[164,3],[244,3],[340,3],[397,3],[506,3]]},"1217":{"position":[[54,3],[169,3]]},"1224":{"position":[[0,3],[317,3],[815,3],[1276,3],[1484,3]]},"1226":{"position":[[14,3]]},"1229":{"position":[[0,3],[738,3]]},"1234":{"position":[[133,3],[209,3],[245,3],[298,3],[384,3]]},"1236":{"position":[[435,3]]},"1239":{"position":[[0,3],[87,3],[287,3]]},"1241":{"position":[[0,3]]},"1243":{"position":[[0,3],[192,3]]},"1249":{"position":[[0,3]]},"1262":{"position":[[0,3]]},"1264":{"position":[[0,3]]},"1273":{"position":[[0,3],[54,3]]},"1281":{"position":[[0,3]]},"1295":{"position":[[0,3]]},"1301":{"position":[[0,3]]},"1307":{"position":[[0,3]]},"1324":{"position":[[104,3]]},"1332":{"position":[[0,3],[49,3]]},"1334":{"position":[[0,3]]},"1337":{"position":[[0,3],[40,3]]},"1341":{"position":[[0,3]]},"1343":{"position":[[0,3],[37,3],[97,3],[146,3],[197,3],[235,3],[271,3],[328,3]]},"1348":{"position":[[0,3],[82,3],[140,3],[183,3]]},"1350":{"position":[[0,3],[57,3]]},"1352":{"position":[[0,3],[54,3],[85,3],[150,3]]},"1354":{"position":[[0,3],[83,3],[169,3]]},"1367":{"position":[[0,3],[28,3],[62,3],[96,3],[151,3],[216,3],[315,3],[410,3],[450,3]]},"1371":{"position":[[0,3]]},"1384":{"position":[[0,3]]},"1386":{"position":[[0,3],[38,3],[83,3]]},"1425":{"position":[[0,3]]},"1436":{"position":[[449,3]]},"1477":{"position":[[508,3]]},"1493":{"position":[[269,3]]},"1519":{"position":[[60,3]]},"1521":{"position":[[0,3],[29,3],[105,3]]},"1523":{"position":[[39,4],[283,3]]},"1528":{"position":[[366,3],[392,3]]},"1530":{"position":[[256,3],[301,3],[555,3],[649,3],[675,3]]}}}],["addit",{"_index":427,"t":{"54":{"position":[[1028,8],[2118,8]]},"97":{"position":[[146,8]]},"117":{"position":[[128,10]]},"143":{"position":[[1939,10]]},"198":{"position":[[0,10]]},"228":{"position":[[326,8]]},"231":{"position":[[97,10]]},"233":{"position":[[61,10],[252,8]]},"321":{"position":[[122,9]]},"337":{"position":[[1264,9],[2257,10]]},"381":{"position":[[354,9]]},"383":{"position":[[533,9]]},"403":{"position":[[534,10]]},"407":{"position":[[1842,10]]},"413":{"position":[[579,9]]},"435":{"position":[[293,8]]},"471":{"position":[[259,9]]},"477":{"position":[[1255,10],[1436,10]]},"505":{"position":[[906,8],[1078,8]]},"669":{"position":[[329,10]]},"1097":{"position":[[376,9]]},"1213":{"position":[[309,10]]},"1234":{"position":[[137,10]]}}}],["addition",{"_index":1031,"t":{"143":{"position":[[933,12]]},"357":{"position":[[355,13]]}}}],["adiabat",{"_index":1903,"t":{"468":{"position":[[896,11]]}}}],["adjust",{"_index":956,"t":{"123":{"position":[[965,11],[1001,10]]},"292":{"position":[[607,10]]},"349":{"position":[[296,8]]},"371":{"position":[[1291,10]]},"381":{"position":[[2412,10]]},"385":{"position":[[244,10]]},"387":{"position":[[711,10]]},"389":{"position":[[529,8],[1119,10]]},"401":{"position":[[888,8]]},"407":{"position":[[2161,6]]},"433":{"position":[[1021,10]]},"457":{"position":[[302,10]]},"463":{"position":[[446,10]]},"481":{"position":[[1095,11],[1178,11]]},"483":{"position":[[462,11],[493,11]]},"523":{"position":[[32,10]]},"525":{"position":[[179,11],[245,10],[314,10]]},"527":{"position":[[0,11],[12,11],[36,11]]},"529":{"position":[[173,11],[510,11]]},"555":{"position":[[18,10],[78,10]]},"557":{"position":[[37,10]]},"561":{"position":[[153,11],[460,11]]},"589":{"position":[[697,9]]},"759":{"position":[[60,10]]},"777":{"position":[[0,10]]},"784":{"position":[[149,11],[466,11]]},"850":{"position":[[345,6]]},"961":{"position":[[463,10]]},"998":{"position":[[21,10]]},"1154":{"position":[[302,10]]},"1213":{"position":[[456,6]]},"1367":{"position":[[226,10],[328,6],[1457,10]]}}}],["admonit",{"_index":3165,"t":{"1463":{"position":[[708,11]]},"1469":{"position":[[139,11]]}}}],["advanc",{"_index":25,"t":{"7":{"position":[[60,8]]},"54":{"position":[[2620,8]]},"95":{"position":[[44,8]]},"97":{"position":[[87,8]]},"107":{"position":[[5,8]]},"409":{"position":[[31,8]]},"1477":{"position":[[540,8]]}}}],["advanced_compressor_train",{"_index":2045,"t":{"545":{"position":[[16,25],[241,25]]}}}],["ae6ade9",{"_index":2651,"t":{"1332":{"position":[[393,9]]}}}],["af32274",{"_index":2655,"t":{"1332":{"position":[[598,9]]}}}],["af68417",{"_index":2421,"t":{"1273":{"position":[[794,9]]}}}],["af6bee9",{"_index":2715,"t":{"1343":{"position":[[27,9]]}}}],["aff50d7",{"_index":2458,"t":{"1275":{"position":[[469,9]]}}}],["affect",{"_index":264,"t":{"41":{"position":[[226,6]]},"54":{"position":[[2407,8]]},"67":{"position":[[85,7]]},"421":{"position":[[507,9]]},"1105":{"position":[[421,9]]},"1224":{"position":[[1212,8]]}}}],["again",{"_index":162,"t":{"25":{"position":[[335,5]]},"593":{"position":[[294,5]]},"1350":{"position":[[846,5]]}}}],["against",{"_index":1964,"t":{"483":{"position":[[132,7]]},"1241":{"position":[[561,7]]},"1373":{"position":[[25,7]]}}}],["aggreg",{"_index":1594,"t":{"331":{"position":[[701,11]]},"1310":{"position":[[110,11]]},"1445":{"position":[[92,11],[169,10]]}}}],["agnost",{"_index":454,"t":{"54":{"position":[[2356,8]]}}}],["ahead",{"_index":1795,"t":{"411":{"position":[[186,5]]},"413":{"position":[[383,5]]},"468":{"position":[[2622,6]]},"1097":{"position":[[180,5]]},"1354":{"position":[[18,5]]}}}],["ain't",{"_index":1979,"t":{"497":{"position":[[54,5]]}}}],["algorithm",{"_index":1689,"t":{"371":{"position":[[645,9]]},"1231":{"position":[[228,11]]},"1332":{"position":[[224,9]]},"1450":{"position":[[448,10],[467,9],[573,9]]}}}],["align",{"_index":3004,"t":{"1367":{"position":[[1383,7]]},"1443":{"position":[[46,9]]}}}],["alkan",{"_index":1839,"t":{"435":{"position":[[224,7],[342,7]]}}}],["alloc",{"_index":2081,"t":{"612":{"position":[[251,9]]},"987":{"position":[[244,9]]}}}],["allow",{"_index":103,"t":{"17":{"position":[[114,7]]},"52":{"position":[[138,7],[3302,7]]},"84":{"position":[[901,5]]},"109":{"position":[[179,8]]},"164":{"position":[[179,8]]},"185":{"position":[[222,5]]},"208":{"position":[[51,8]]},"276":{"position":[[79,7]]},"282":{"position":[[29,6]]},"284":{"position":[[145,7]]},"290":{"position":[[24,6]]},"351":{"position":[[28,6]]},"357":{"position":[[30,6]]},"517":{"position":[[476,7],[1906,7],[2037,7]]},"908":{"position":[[108,7],[229,8]]},"1035":{"position":[[67,7]]},"1185":{"position":[[33,7]]},"1213":{"position":[[519,7]]},"1224":{"position":[[1088,5]]},"1231":{"position":[[117,5]]},"1234":{"position":[[972,5],[1666,7]]},"1241":{"position":[[607,7]]},"1253":{"position":[[138,7]]},"1268":{"position":[[0,5]]},"1279":{"position":[[0,5]]},"1359":{"position":[[22,7]]},"1363":{"position":[[324,5]]},"1367":{"position":[[741,7]]},"1376":{"position":[[0,5]]},"1501":{"position":[[206,6]]}}}],["alon",{"_index":1599,"t":{"337":{"position":[[69,5]]},"1463":{"position":[[146,6]]}}}],["along",{"_index":1697,"t":{"377":{"position":[[513,5]]},"401":{"position":[[1780,6]]},"1234":{"position":[[648,5]]}}}],["alreadi",{"_index":1126,"t":{"172":{"position":[[437,7]]},"403":{"position":[[811,7]]},"1503":{"position":[[70,7]]},"1507":{"position":[[176,7]]}}}],["alt=\"altern",{"_index":3225,"t":{"1475":{"position":[[1037,16]]}}}],["altern",{"_index":1629,"t":{"357":{"position":[[437,9]]},"468":{"position":[[3104,11]]},"479":{"position":[[74,11]]},"634":{"position":[[153,9]]},"975":{"position":[[517,14],[772,14]]},"1213":{"position":[[784,13]]},"1475":{"position":[[968,11]]}}}],["although",{"_index":3294,"t":{"1499":{"position":[[797,8],[1024,8],[1117,8]]}}}],["alway",{"_index":421,"t":{"54":{"position":[[301,6],[1998,6],[2102,6]]},"226":{"position":[[81,6]]},"479":{"position":[[508,6],[715,6]]},"525":{"position":[[125,6]]},"741":{"position":[[42,6]]},"1185":{"position":[[12,6]]},"1236":{"position":[[793,6]]},"1255":{"position":[[207,6]]},"1350":{"position":[[943,6]]},"1363":{"position":[[891,6]]}}}],["am3/h",{"_index":1788,"t":{"407":{"position":[[2421,5],[2469,5],[2563,7],[2614,6]]}}}],["am3/hr",{"_index":1675,"t":{"363":{"position":[[1380,6],[1427,6]]},"407":{"position":[[1032,7],[1416,6],[1445,6],[1660,7]]}}}],["am3_per_hour",{"_index":368,"t":{"52":{"position":[[2696,12],[2842,12],[3001,12],[3158,12]]},"103":{"position":[[591,12]]},"107":{"position":[[487,12],[651,12]]},"119":{"position":[[297,12],[778,12],[942,12]]},"135":{"position":[[567,12]]},"145":{"position":[[237,12]]},"160":{"position":[[955,12]]},"174":{"position":[[485,12]]},"187":{"position":[[142,12]]},"194":{"position":[[144,12]]},"196":{"position":[[128,12],[289,12],[469,12]]},"353":{"position":[[135,12]]},"355":{"position":[[118,12]]},"359":{"position":[[137,12]]},"361":{"position":[[122,12]]},"365":{"position":[[293,12]]},"367":{"position":[[195,12]]},"392":{"position":[[122,12]]},"394":{"position":[[195,12]]},"396":{"position":[[220,12]]},"693":{"position":[[122,12]]},"854":{"position":[[67,12]]},"865":{"position":[[122,12]]},"1031":{"position":[[94,14]]},"1033":{"position":[[82,14]]},"1162":{"position":[[87,12]]},"1164":{"position":[[91,12]]},"1167":{"position":[[90,12]]},"1169":{"position":[[122,12]]}}}],["ambigu",{"_index":300,"t":{"52":{"position":[[44,9],[472,9],[1521,9]]},"65":{"position":[[171,9],[317,11]]},"1251":{"position":[[65,9]]},"1253":{"position":[[44,9]]},"1397":{"position":[[65,9]]},"1399":{"position":[[103,11],[303,9]]},"1409":{"position":[[65,9]]},"1499":{"position":[[911,10]]}}}],["amend",{"_index":359,"t":{"52":{"position":[[2414,5]]}}}],["amongst",{"_index":991,"t":{"137":{"position":[[894,7]]}}}],["amount",{"_index":437,"t":{"54":{"position":[[1234,6]]},"407":{"position":[[1832,6]]},"443":{"position":[[374,6]]},"481":{"position":[[996,6]]}}}],["analys",{"_index":3119,"t":{"1425":{"position":[[241,7]]}}}],["analyz",{"_index":282,"t":{"44":{"position":[[480,9]]}}}],["and/or",{"_index":97,"t":{"15":{"position":[[178,6]]},"61":{"position":[[1207,6]]},"208":{"position":[[6,7]]},"409":{"position":[[109,6],[133,6]]},"941":{"position":[[219,6]]}}}],["annot",{"_index":3191,"t":{"1475":{"position":[[41,10]]}}}],["anoth",{"_index":778,"t":{"109":{"position":[[1132,7]]},"411":{"position":[[1335,7]]},"479":{"position":[[298,7]]},"495":{"position":[[314,7]]},"612":{"position":[[73,7]]},"647":{"position":[[701,7]]},"987":{"position":[[55,7]]},"1013":{"position":[[121,7]]},"1087":{"position":[[600,7]]},"1099":{"position":[[786,7]]},"1234":{"position":[[1336,7]]},"1530":{"position":[[260,7]]}}}],["anti",{"_index":1242,"t":{"181":{"position":[[546,5]]},"204":{"position":[[1438,5]]},"363":{"position":[[513,5]]},"401":{"position":[[499,4]]},"407":{"position":[[1180,4]]},"468":{"position":[[3792,4]]}}}],["anyon",{"_index":2198,"t":{"989":{"position":[[209,7]]}}}],["anyth",{"_index":2026,"t":{"517":{"position":[[1109,8]]},"1523":{"position":[[233,8]]}}}],["anywher",{"_index":1385,"t":{"219":{"position":[[2228,8]]}}}],["api",{"_index":54,"t":{"9":{"position":[[294,3]]},"501":{"position":[[10,3]]},"1373":{"position":[[73,3]]}}}],["appli",{"_index":964,"t":{"127":{"position":[[88,7]]},"304":{"position":[[122,8]]},"309":{"position":[[71,8]]},"517":{"position":[[979,8],[1129,5]]},"763":{"position":[[88,7]]},"908":{"position":[[140,8]]},"1229":{"position":[[481,5]]},"1239":{"position":[[334,5]]},"1438":{"position":[[168,8]]}}}],["applic",{"_index":1504,"t":{"259":{"position":[[339,10]]},"1213":{"position":[[435,10]]},"1284":{"position":[[18,11]]},"1290":{"position":[[26,11]]},"1467":{"position":[[98,11]]}}}],["apply_condit",{"_index":2928,"t":{"1363":{"position":[[405,15]]}}}],["appreci",{"_index":3259,"t":{"1479":{"position":[[609,10]]}}}],["approach",{"_index":1456,"t":{"237":{"position":[[924,8]]}}}],["appropri",{"_index":3318,"t":{"1503":{"position":[[34,11]]}}}],["approxim",{"_index":1929,"t":{"468":{"position":[[1977,12]]}}}],["archiv",{"_index":2874,"t":{"1354":{"position":[[735,7]]}}}],["area",{"_index":1235,"t":{"181":{"position":[[287,5]]},"198":{"position":[[345,5]]},"204":{"position":[[151,4],[1273,5],[1535,4],[1593,4],[1679,5]]},"235":{"position":[[113,5]]},"261":{"position":[[259,5]]},"337":{"position":[[805,4]]},"421":{"position":[[414,5],[448,4]]},"850":{"position":[[200,4]]},"896":{"position":[[186,5]]},"1105":{"position":[[328,5],[362,4]]},"1236":{"position":[[600,4]]},"1343":{"position":[[47,4]]},"1436":{"position":[[12,4],[133,4]]}}}],["aren't",{"_index":3293,"t":{"1499":{"position":[[755,6]]}}}],["arg",{"_index":445,"t":{"54":{"position":[[1786,6]]},"503":{"position":[[0,5],[189,9]]},"509":{"position":[[91,9]]}}}],["arg1",{"_index":2292,"t":{"1229":{"position":[[2096,4]]}}}],["argn",{"_index":2293,"t":{"1229":{"position":[[2105,5]]}}}],["argument",{"_index":418,"t":{"54":{"position":[[209,8],[336,8],[829,8],[892,8],[1600,8],[1638,9],[1747,8],[1972,9],[2215,8],[2447,8]]},"505":{"position":[[74,10]]},"513":{"position":[[114,10]]},"1226":{"position":[[203,9]]},"1229":{"position":[[931,9],[1081,8],[2057,8]]},"1243":{"position":[[22,8],[212,8],[239,8]]},"1255":{"position":[[115,8],[242,8]]},"1415":{"position":[[62,8]]}}}],["aris",{"_index":1635,"t":{"357":{"position":[[974,5]]}}}],["array",{"_index":2930,"t":{"1363":{"position":[[439,6]]},"1376":{"position":[[86,5]]},"1505":{"position":[[672,5]]}}}],["ascii",{"_index":151,"t":{"25":{"position":[[107,6],[146,6]]}}}],["ascii//translit",{"_index":156,"t":{"25":{"position":[[237,15]]}}}],["asid",{"_index":1750,"t":{"401":{"position":[[391,6]]}}}],["asset",{"_index":595,"t":{"86":{"position":[[699,5]]},"241":{"position":[[55,6]]}}}],["asset/ecalc",{"_index":312,"t":{"52":{"position":[[515,11]]},"1356":{"position":[[68,11]]}}}],["asset_result_dto",{"_index":2807,"t":{"1350":{"position":[[183,16]]}}}],["associ",{"_index":1490,"t":{"253":{"position":[[130,10]]},"517":{"position":[[2120,10],[2173,10]]},"733":{"position":[[46,10]]},"821":{"position":[[60,10]]}}}],["assum",{"_index":1021,"t":{"141":{"position":[[229,7]]},"185":{"position":[[71,7]]},"208":{"position":[[478,6],[550,6]]},"337":{"position":[[1807,7]]},"383":{"position":[[122,7]]},"413":{"position":[[327,7]]},"451":{"position":[[17,7]]},"468":{"position":[[3181,6]]},"477":{"position":[[533,7]]},"809":{"position":[[72,7]]},"935":{"position":[[531,9]]},"1053":{"position":[[1387,7]]},"1097":{"position":[[124,7]]},"1234":{"position":[[1681,8]]}}}],["assumpt",{"_index":1637,"t":{"357":{"position":[[1004,11]]},"383":{"position":[[142,10]]},"468":{"position":[[3304,11]]},"477":{"position":[[77,11]]},"479":{"position":[[807,10],[874,10]]}}}],["asv",{"_index":1241,"t":{"181":{"position":[[542,3]]},"204":{"position":[[1434,3]]},"357":{"position":[[600,5]]},"363":{"position":[[509,3]]},"381":{"position":[[1093,3],[1263,3]]},"401":{"position":[[1531,3],[1835,3]]},"403":{"position":[[91,3],[320,4]]},"407":{"position":[[83,3],[190,4],[521,3],[737,3],[1464,5]]},"634":{"position":[[404,5]]},"1431":{"position":[[95,3],[194,4]]}}}],["asv_balanced_margin",{"_index":3122,"t":{"1431":{"position":[[383,20]]}}}],["asv_with_balanced_pressure_ratio",{"_index":3123,"t":{"1431":{"position":[[442,34]]}}}],["atom",{"_index":1846,"t":{"435":{"position":[[376,5]]}}}],["attach",{"_index":1507,"t":{"259":{"position":[[689,8]]}}}],["attent",{"_index":1228,"t":{"179":{"position":[[152,9]]}}}],["attribut",{"_index":335,"t":{"52":{"position":[[1458,9]]},"276":{"position":[[271,10]]},"571":{"position":[[63,10]]},"626":{"position":[[111,10]]},"697":{"position":[[207,10]]},"753":{"position":[[130,10]]},"869":{"position":[[101,10]]},"1035":{"position":[[4,9]]},"1107":{"position":[[0,10]]},"1199":{"position":[[112,10]]},"1205":{"position":[[4,10]]},"1350":{"position":[[447,10],[953,9]]},"1399":{"position":[[280,11]]}}}],["august",{"_index":3142,"t":{"1452":{"position":[[418,6]]}}}],["auto",{"_index":498,"t":{"63":{"position":[[414,4]]}}}],["automat",{"_index":495,"t":{"63":{"position":[[296,13]]},"137":{"position":[[847,13]]},"272":{"position":[[360,14]]},"349":{"position":[[282,13]]},"381":{"position":[[471,9]]},"1213":{"position":[[874,13]]},"1273":{"position":[[763,13]]}}}],["avail",{"_index":39,"t":{"7":{"position":[[297,9]]},"35":{"position":[[486,9]]},"95":{"position":[[96,9]]},"347":{"position":[[66,9]]},"389":{"position":[[656,9]]},"407":{"position":[[370,9],[615,10],[1914,9],[2313,9],[2427,9],[2475,9],[2539,9]]},"417":{"position":[[4,9]]},"435":{"position":[[958,9]]},"437":{"position":[[0,9]]},"468":{"position":[[3721,9]]},"479":{"position":[[642,10],[698,10]]},"497":{"position":[[175,9]]},"511":{"position":[[57,10]]},"747":{"position":[[363,9]]},"925":{"position":[[204,9]]},"975":{"position":[[928,9]]},"1213":{"position":[[212,9]]},"1405":{"position":[[174,9]]},"1415":{"position":[[7,9]]},"1421":{"position":[[312,9]]},"1431":{"position":[[217,9]]},"1528":{"position":[[723,9]]},"1530":{"position":[[963,9]]}}}],["averag",{"_index":219,"t":{"35":{"position":[[734,7],[908,7]]},"363":{"position":[[40,9]]},"468":{"position":[[2203,7]]},"589":{"position":[[520,9],[664,7],[747,7]]},"1057":{"position":[[431,7]]},"1415":{"position":[[261,7]]},"1438":{"position":[[209,7]]}}}],["avoid",{"_index":299,"t":{"52":{"position":[[38,5],[466,5]]},"109":{"position":[[219,5]]},"164":{"position":[[219,5]]},"185":{"position":[[374,5],[416,5]]},"226":{"position":[[428,5]]},"612":{"position":[[346,5]]},"933":{"position":[[164,5]]},"987":{"position":[[339,5]]},"1241":{"position":[[671,5]]},"1253":{"position":[[38,5]]},"1350":{"position":[[115,5]]},"1363":{"position":[[0,5]]}}}],["awar",{"_index":564,"t":{"84":{"position":[[225,5]]}}}],["away",{"_index":2084,"t":{"612":{"position":[[409,4]]},"987":{"position":[[402,4]]}}}],["awesom",{"_index":3242,"t":{"1477":{"position":[[486,7]]}}}],["b",{"_index":647,"t":{"97":{"position":[[369,2],[1152,1],[1249,1],[1319,1],[1402,1],[1431,1]]},"105":{"position":[[121,1]]},"111":{"position":[[777,1]]},"115":{"position":[[42,2],[302,1],[339,1],[459,1],[556,1],[653,1],[736,1]]},"117":{"position":[[3537,1],[3590,1],[3677,1],[3930,1],[4049,1],[4343,1]]},"119":{"position":[[4201,1],[4321,1],[4418,1],[4524,1],[4647,1]]},"1511":{"position":[[70,1]]},"1528":{"position":[[311,1]]},"1530":{"position":[[470,1]]}}}],["b02d68d",{"_index":2897,"t":{"1356":{"position":[[424,9]]}}}],["b066c74",{"_index":2636,"t":{"1328":{"position":[[172,9]]}}}],["b0e3466",{"_index":2632,"t":{"1326":{"position":[[157,9]]}}}],["b183db7",{"_index":2537,"t":{"1288":{"position":[[20,9]]}}}],["b1b4acf",{"_index":2584,"t":{"1301":{"position":[[275,9]]}}}],["b1c5b23",{"_index":2844,"t":{"1352":{"position":[[294,9]]}}}],["b257567",{"_index":2649,"t":{"1332":{"position":[[312,9]]}}}],["b373726",{"_index":2505,"t":{"1277":{"position":[[725,9]]}}}],["b3a073b",{"_index":2503,"t":{"1277":{"position":[[688,9]]}}}],["b424176",{"_index":2847,"t":{"1352":{"position":[[387,9]]}}}],["b428c03",{"_index":2377,"t":{"1268":{"position":[[293,9]]}}}],["b44f8c8",{"_index":2540,"t":{"1290":{"position":[[67,9]]}}}],["b477b15",{"_index":2905,"t":{"1356":{"position":[[778,9]]}}}],["b580e3d",{"_index":2791,"t":{"1345":{"position":[[532,9]]}}}],["b5d3451",{"_index":2440,"t":{"1273":{"position":[[1246,9]]}}}],["b61a0f",{"_index":2801,"t":{"1350":{"position":[[47,9]]}}}],["b78b035",{"_index":3073,"t":{"1386":{"position":[[73,9]]}}}],["b87fd2f",{"_index":2410,"t":{"1273":{"position":[[353,9]]}}}],["b904",{"_index":3086,"t":{"1386":{"position":[[496,4]]}}}],["ba48dcd",{"_index":2616,"t":{"1316":{"position":[[146,9]]}}}],["ba788fd",{"_index":2908,"t":{"1356":{"position":[[889,9]]}}}],["ba9235",{"_index":2823,"t":{"1350":{"position":[[704,9]]},"1354":{"position":[[314,9],[393,9]]}}}],["back",{"_index":1249,"t":{"181":{"position":[[873,4]]},"477":{"position":[[708,4]]},"593":{"position":[[289,4]]},"1077":{"position":[[875,4]]},"1525":{"position":[[25,4]]}}}],["backfil",{"_index":2248,"t":{"1077":{"position":[[829,9],[883,8]]}}}],["backward",{"_index":1349,"t":{"204":{"position":[[732,8]]},"908":{"position":[[1019,9]]}}}],["bad",{"_index":2991,"t":{"1367":{"position":[[1116,3]]},"1499":{"position":[[1215,3]]}}}],["bad_fuel_ga",{"_index":692,"t":{"105":{"position":[[56,13],[327,12]]},"111":{"position":[[831,12]]},"115":{"position":[[393,12]]},"119":{"position":[[474,12],[4255,12]]}}}],["badg",{"_index":3089,"t":{"1386":{"position":[[588,6]]}}}],["bar",{"_index":660,"t":{"97":{"position":[[914,3],[948,4]]},"143":{"position":[[1351,3],[2148,3],[2160,3]]},"154":{"position":[[733,3],[767,4]]},"202":{"position":[[816,6],[823,6]]},"210":{"position":[[54,3],[77,3]]},"381":{"position":[[1828,5],[2241,5]]},"411":{"position":[[985,5],[1556,5],[2008,5]]},"433":{"position":[[318,3],[658,5],[919,5]]},"622":{"position":[[26,5]]},"647":{"position":[[922,5]]},"922":{"position":[[183,4],[605,3],[641,4],[670,4]]},"937":{"position":[[201,4]]},"1099":{"position":[[436,5],[1007,5]]},"1115":{"position":[[316,4]]},"1463":{"position":[[640,4]]}}}],["bara",{"_index":1131,"t":{"172":{"position":[[1571,6],[1604,6]]},"174":{"position":[[2178,4],[2209,4]]},"202":{"position":[[1863,6],[1915,6]]},"327":{"position":[[53,4],[77,4]]},"335":{"position":[[53,4],[77,4]]}}}],["barycentr",{"_index":1273,"t":{"198":{"position":[[286,11]]},"204":{"position":[[1192,11]]}}}],["base",{"_index":500,"t":{"63":{"position":[[459,5]]},"97":{"position":[[564,4],[613,4],[1228,4],[1277,4]]},"107":{"position":[[153,5],[193,5]]},"113":{"position":[[192,4]]},"115":{"position":[[190,4]]},"117":{"position":[[78,4],[3515,4]]},"129":{"position":[[22,5],[306,4]]},"143":{"position":[[2535,4],[2687,4],[2728,4],[2806,4],[2890,4]]},"145":{"position":[[2068,4],[2146,4],[2230,4]]},"154":{"position":[[403,4]]},"168":{"position":[[192,4],[458,4],[489,4]]},"172":{"position":[[78,4],[139,4],[170,4]]},"174":{"position":[[1513,4],[1544,4]]},"181":{"position":[[30,5]]},"204":{"position":[[960,5],[1218,5]]},"329":{"position":[[135,5]]},"371":{"position":[[428,5],[610,5]]},"383":{"position":[[130,5],[197,5],[729,5]]},"389":{"position":[[203,6],[550,6]]},"413":{"position":[[875,5]]},"435":{"position":[[931,5]]},"477":{"position":[[119,4],[1005,4]]},"483":{"position":[[529,4]]},"517":{"position":[[558,4]]},"575":{"position":[[155,4]]},"1097":{"position":[[672,5]]},"1173":{"position":[[135,5]]},"1236":{"position":[[857,5]]},"1350":{"position":[[1023,4]]},"1415":{"position":[[426,5],[445,6]]},"1491":{"position":[[351,5]]},"1501":{"position":[[102,5]]}}}],["base_production_load_mw",{"_index":764,"t":{"109":{"position":[[528,24],[924,23],[1103,23]]},"119":{"position":[[2014,24]]}}}],["base_profile.csv",{"_index":677,"t":{"101":{"position":[[314,16]]},"119":{"position":[[56,16]]},"121":{"position":[[727,16]]}}}],["baseload",{"_index":1047,"t":{"143":{"position":[[2787,8]]},"145":{"position":[[2127,8]]},"477":{"position":[[513,11]]}}}],["bash|zsh|fish|powershell|pwsh",{"_index":1992,"t":{"503":{"position":[[384,32],[479,32]]}}}],["basi",{"_index":3265,"t":{"1489":{"position":[[138,6]]}}}],["basic",{"_index":2008,"t":{"505":{"position":[[1424,5]]},"511":{"position":[[472,5]]}}}],["bcc2f81",{"_index":2737,"t":{"1343":{"position":[[501,9]]}}}],["bce91cb",{"_index":2931,"t":{"1363":{"position":[[457,9]]}}}],["bd9d684",{"_index":2661,"t":{"1334":{"position":[[110,9]]}}}],["be",{"_index":281,"t":{"44":{"position":[[460,5]]},"52":{"position":[[2302,5]]},"54":{"position":[[2130,5]]},"67":{"position":[[810,5]]},"86":{"position":[[649,5]]},"143":{"position":[[711,5],[2614,5]]},"152":{"position":[[129,6]]},"219":{"position":[[974,5]]},"235":{"position":[[25,5]]},"431":{"position":[[117,5]]},"477":{"position":[[382,5]]},"481":{"position":[[188,5]]},"499":{"position":[[193,5]]},"589":{"position":[[479,5]]},"604":{"position":[[271,5]]},"679":{"position":[[338,5]]},"1053":{"position":[[212,5]]},"1407":{"position":[[170,5]]},"1431":{"position":[[114,5]]}}}],["be148ba",{"_index":2533,"t":{"1286":{"position":[[108,9]]}}}],["be435c3",{"_index":3101,"t":{"1386":{"position":[[1321,9]]}}}],["be9426a",{"_index":3029,"t":{"1373":{"position":[[48,9]]}}}],["beat",{"_index":3295,"t":{"1499":{"position":[[819,5]]}}}],["beauti",{"_index":3287,"t":{"1499":{"position":[[532,9]]}}}],["becom",{"_index":786,"t":{"113":{"position":[[373,8]]},"115":{"position":[[309,8]]},"117":{"position":[[3400,8],[3907,8]]},"168":{"position":[[338,8]]},"204":{"position":[[1045,6]]},"1213":{"position":[[742,6]]},"1273":{"position":[[541,8]]},"1523":{"position":[[292,6]]}}}],["befor",{"_index":443,"t":{"54":{"position":[[1434,6],[1623,6]]},"117":{"position":[[3303,6],[3810,6]]},"154":{"position":[[945,6]]},"172":{"position":[[2797,6]]},"265":{"position":[[670,6],[729,6],[798,6],[890,6],[959,6]]},"381":{"position":[[1799,6],[2212,6]]},"403":{"position":[[1022,6]]},"411":{"position":[[956,6],[1527,6],[1979,6]]},"415":{"position":[[299,6]]},"433":{"position":[[629,6],[890,6]]},"481":{"position":[[0,6],[1078,6]]},"511":{"position":[[37,6]]},"529":{"position":[[499,6]]},"561":{"position":[[449,6]]},"624":{"position":[[322,7]]},"647":{"position":[[893,6]]},"659":{"position":[[370,7]]},"711":{"position":[[394,7]]},"784":{"position":[[455,6]]},"850":{"position":[[492,6]]},"920":{"position":[[1090,6]]},"1013":{"position":[[538,7]]},"1077":{"position":[[490,6]]},"1099":{"position":[[407,6],[978,6]]},"1177":{"position":[[195,8]]},"1197":{"position":[[512,7]]},"1241":{"position":[[247,6]]},"1354":{"position":[[51,6]]},"1386":{"position":[[925,6],[981,6]]},"1530":{"position":[[837,6]]}}}],["beforehand",{"_index":2288,"t":{"1229":{"position":[[195,11]]}}}],["begin",{"_index":1387,"t":{"219":{"position":[[2383,9]]},"1077":{"position":[[35,5]]}}}],["behav",{"_index":813,"t":{"117":{"position":[[1921,7]]},"357":{"position":[[423,7]]},"634":{"position":[[139,7]]}}}],["behavior",{"_index":416,"t":{"54":{"position":[[84,9],[2683,9]]},"299":{"position":[[4,8]]},"775":{"position":[[255,8]]},"1185":{"position":[[78,9]]}}}],["behaviour",{"_index":164,"t":{"27":{"position":[[29,9]]},"63":{"position":[[356,9]]},"455":{"position":[[809,9]]},"468":{"position":[[675,9]]},"589":{"position":[[366,10]]},"721":{"position":[[979,10]]},"1077":{"position":[[975,10]]}}}],["behind",{"_index":503,"t":{"65":{"position":[[141,6]]},"179":{"position":[[407,6]]},"337":{"position":[[2551,6]]}}}],["belong",{"_index":2019,"t":{"517":{"position":[[74,6]]}}}],["below",{"_index":229,"t":{"35":{"position":[[1016,5]]},"61":{"position":[[928,5],[1072,6]]},"67":{"position":[[610,6]]},"86":{"position":[[1379,6]]},"97":{"position":[[444,6]]},"125":{"position":[[45,6]]},"129":{"position":[[186,6]]},"154":{"position":[[283,6]]},"172":{"position":[[2069,5]]},"181":{"position":[[304,5],[576,5]]},"219":{"position":[[1670,5]]},"245":{"position":[[285,6]]},"381":{"position":[[512,5],[754,5],[836,5],[969,5],[1141,5]]},"401":{"position":[[687,6],[849,5]]},"407":{"position":[[777,6]]},"409":{"position":[[176,5]]},"468":{"position":[[3999,5]]},"471":{"position":[[10,5],[194,5]]},"517":{"position":[[325,6],[1043,6]]},"553":{"position":[[26,5]]},"589":{"position":[[766,5]]},"775":{"position":[[339,6]]},"908":{"position":[[1338,5]]},"935":{"position":[[507,5]]},"967":{"position":[[87,6]]},"1053":{"position":[[970,6]]},"1224":{"position":[[216,6],[538,6],[987,6]]},"1236":{"position":[[610,6]]},"1505":{"position":[[179,5]]},"1521":{"position":[[72,5]]}}}],["better",{"_index":2236,"t":{"1053":{"position":[[1014,6]]},"1245":{"position":[[82,6]]},"1499":{"position":[[545,6],[575,6],[607,6],[639,6],[672,6],[702,6],[1098,6],[1141,6]]}}}],["between",{"_index":214,"t":{"35":{"position":[[590,7]]},"117":{"position":[[546,7]]},"123":{"position":[[900,7]]},"143":{"position":[[98,7]]},"172":{"position":[[339,7],[1961,7],[2207,7]]},"181":{"position":[[56,7],[655,7]]},"219":{"position":[[118,7]]},"245":{"position":[[59,7]]},"265":{"position":[[544,7]]},"284":{"position":[[322,7]]},"294":{"position":[[630,7]]},"311":{"position":[[24,7]]},"329":{"position":[[73,7],[122,7]]},"337":{"position":[[386,7],[2306,7]]},"377":{"position":[[278,7]]},"394":{"position":[[849,7]]},"407":{"position":[[1725,7]]},"415":{"position":[[837,7]]},"451":{"position":[[381,7]]},"455":{"position":[[260,7]]},"457":{"position":[[212,7]]},"468":{"position":[[1537,7]]},"505":{"position":[[185,7]]},"513":{"position":[[215,7]]},"597":{"position":[[181,7]]},"634":{"position":[[542,7]]},"669":{"position":[[43,7]]},"837":{"position":[[550,7]]},"908":{"position":[[819,7],[937,7],[1145,7],[1305,7]]},"975":{"position":[[950,7]]},"985":{"position":[[475,7]]},"1109":{"position":[[126,7]]},"1147":{"position":[[112,7]]},"1154":{"position":[[212,7]]},"1234":{"position":[[1438,7]]},"1332":{"position":[[344,7]]},"1438":{"position":[[536,7]]}}}],["bewar",{"_index":1686,"t":{"371":{"position":[[8,6]]}}}],["bfs_tree",{"_index":2628,"t":{"1326":{"position":[[100,8]]}}}],["binari",{"_index":653,"t":{"97":{"position":[[646,6]]}}}],["bit",{"_index":3282,"t":{"1499":{"position":[[207,4]]}}}],["block",{"_index":114,"t":{"17":{"position":[[264,5],[324,6],[347,7]]},"1469":{"position":[[132,6]]}}}],["blockquote>

    text

    /statement/pumpstexttexttitletitletitletitletitletitlelink",{"_index":3228,"t":{"1475":{"position":[[1121,35]]}}}],["html",{"_index":3192,"t":{"1475":{"position":[[82,4],[1202,4],[1313,4]]}}}],["hull",{"_index":1359,"t":{"204":{"position":[[1144,4]]}}}],["hydrocarbon",{"_index":781,"t":{"111":{"position":[[31,11],[239,11]]},"141":{"position":[[110,11],[178,11]]},"166":{"position":[[31,11],[239,11]]},"219":{"position":[[1460,11]]},"267":{"position":[[234,12],[675,12]]},"837":{"position":[[31,12],[374,11],[394,11]]},"1215":{"position":[[331,11]]}}}],["hydrocarbon_export_sm3_per_day",{"_index":756,"t":{"109":{"position":[[312,31]]},"119":{"position":[[1798,31]]},"164":{"position":[[312,31]]},"174":{"position":[[623,31]]}}}],["hyperlink",{"_index":3226,"t":{"1475":{"position":[[1070,10]]}}}],["hyphen",{"_index":308,"t":{"52":{"position":[[344,6],[3468,6],[5029,6]]},"1253":{"position":[[344,6]]}}}],["i.",{"_index":310,"t":{"52":{"position":[[364,5],[5049,5]]},"179":{"position":[[212,5]]},"181":{"position":[[610,5]]},"185":{"position":[[411,4]]},"204":{"position":[[1333,5]]},"257":{"position":[[64,5]]},"377":{"position":[[222,4]]},"413":{"position":[[1236,4]]},"415":{"position":[[1680,4]]},"435":{"position":[[116,4]]},"479":{"position":[[418,4]]},"529":{"position":[[283,4]]},"561":{"position":[[252,4]]},"784":{"position":[[247,4]]},"837":{"position":[[145,6],[513,5]]},"850":{"position":[[229,6]]},"959":{"position":[[118,4]]},"1057":{"position":[[277,4]]},"1069":{"position":[[366,4]]},"1253":{"position":[[364,5]]},"1499":{"position":[[135,4]]}}}],["i_butan",{"_index":1005,"t":{"137":{"position":[[1227,9]]},"145":{"position":[[509,9]]},"392":{"position":[[624,9]]},"445":{"position":[[285,9]]},"447":{"position":[[219,9]]}}}],["i_pentan",{"_index":1009,"t":{"137":{"position":[[1282,10]]},"145":{"position":[[564,10]]},"392":{"position":[[661,10]]},"445":{"position":[[337,10]]},"447":{"position":[[256,10]]}}}],["iconv",{"_index":153,"t":{"25":{"position":[[159,6],[216,5]]}}}],["id",{"_index":2522,"t":{"1279":{"position":[[116,2]]},"1463":{"position":[[510,3]]},"1477":{"position":[[610,2]]}}}],["idea",{"_index":1451,"t":{"237":{"position":[[695,4]]},"1499":{"position":[[1219,5],[1284,5],[1323,4]]}}}],["ident",{"_index":1032,"t":{"143":{"position":[[1102,10]]},"357":{"position":[[903,9]]},"403":{"position":[[427,10]]},"533":{"position":[[270,9]]}}}],["identifi",{"_index":968,"t":{"129":{"position":[[102,11]]},"154":{"position":[[199,11]]}}}],["ie",{"_index":567,"t":{"84":{"position":[[285,3]]},"1077":{"position":[[897,3]]}}}],["ignor",{"_index":547,"t":{"78":{"position":[[158,7]]},"219":{"position":[[2352,8]]},"725":{"position":[[53,8]]},"1081":{"position":[[53,8]]},"1229":{"position":[[2228,6]]},"1454":{"position":[[125,8],[228,8]]}}}],["illustr",{"_index":605,"t":{"86":{"position":[[1352,11]]},"160":{"position":[[377,13]]},"259":{"position":[[172,11]]},"471":{"position":[[16,11]]}}}],["imag",{"_index":1938,"t":{"471":{"position":[[4,5]]},"1386":{"position":[[284,5]]},"1475":{"position":[[961,6],[1063,6]]}}}],["image](path/to/imag",{"_index":3222,"t":{"1475":{"position":[[989,21]]}}}],["img",{"_index":3223,"t":{"1475":{"position":[[1011,4]]}}}],["impact",{"_index":1693,"t":{"371":{"position":[[1243,8]]}}}],["implement",{"_index":342,"t":{"52":{"position":[[1725,11],[1803,14]]},"525":{"position":[[393,11]]},"1345":{"position":[[0,9]]},"1438":{"position":[[317,11]]},"1477":{"position":[[472,9]]},"1499":{"position":[[1173,14],[1232,14]]}}}],["impli",{"_index":2024,"t":{"517":{"position":[[908,5]]}}}],["implicit",{"_index":351,"t":{"52":{"position":[[2220,8]]},"1499":{"position":[[587,9]]}}}],["implicitli",{"_index":2109,"t":{"721":{"position":[[328,10]]},"1077":{"position":[[371,10]]}}}],["import",{"_index":88,"t":{"15":{"position":[[33,9]]},"61":{"position":[[660,9],[781,10],[1378,9]]},"63":{"position":[[382,9]]},"67":{"position":[[717,9]]},"152":{"position":[[1068,9]]},"217":{"position":[[161,10]]},"367":{"position":[[267,9]]},"371":{"position":[[1519,9]]},"403":{"position":[[189,9]]},"443":{"position":[[278,9],[402,10]]},"589":{"position":[[0,9]]},"624":{"position":[[190,9]]},"659":{"position":[[137,9]]},"695":{"position":[[127,9]]},"711":{"position":[[158,9]]},"837":{"position":[[525,9]]},"1197":{"position":[[180,9]]},"1277":{"position":[[592,6]]},"1405":{"position":[[118,9]]}}}],["improv",{"_index":2259,"t":{"1213":{"position":[[550,7]]},"1217":{"position":[[79,7]]},"1231":{"position":[[899,8]]},"1239":{"position":[[437,8]]},"1247":{"position":[[0,8]]},"1251":{"position":[[41,9]]},"1277":{"position":[[359,7]]},"1332":{"position":[[216,7]]},"1356":{"position":[[434,7],[531,7]]},"1367":{"position":[[998,7],[1089,7]]},"1369":{"position":[[179,7]]},"1397":{"position":[[41,9]]},"1409":{"position":[[41,9]]},"1425":{"position":[[383,8]]},"1438":{"position":[[722,8]]},"1445":{"position":[[265,7]]},"1450":{"position":[[439,8]]}}}],["in",{"_index":1826,"t":{"421":{"position":[[493,3]]},"1105":{"position":[[407,3]]}}}],["includ",{"_index":311,"t":{"52":{"position":[[507,7],[4067,7],[4285,7],[4499,7],[4752,7]]},"54":{"position":[[13,8]]},"91":{"position":[[211,9]]},"93":{"position":[[107,8],[203,7]]},"152":{"position":[[554,8]]},"185":{"position":[[205,8]]},"219":{"position":[[719,9]]},"228":{"position":[[59,7]]},"243":{"position":[[162,8]]},"245":{"position":[[201,7]]},"299":{"position":[[130,9]]},"321":{"position":[[209,9]]},"357":{"position":[[526,7]]},"427":{"position":[[71,7]]},"471":{"position":[[117,8]]},"477":{"position":[[974,8]]},"513":{"position":[[58,9]]},"634":{"position":[[330,7]]},"659":{"position":[[31,8]]},"703":{"position":[[31,8]]},"721":{"position":[[258,8]]},"747":{"position":[[194,9]]},"837":{"position":[[498,8]]},"884":{"position":[[12,8],[64,8]]},"886":{"position":[[0,8],[102,8]]},"888":{"position":[[0,8],[96,8]]},"890":{"position":[[0,8],[179,8]]},"892":{"position":[[0,8],[98,8]]},"1077":{"position":[[301,8]]},"1229":{"position":[[88,7],[121,9]]},"1231":{"position":[[1009,8]]},"1293":{"position":[[0,7]]},"1297":{"position":[[105,7]]},"1326":{"position":[[32,7]]},"1332":{"position":[[506,7]]},"1438":{"position":[[111,8]]},"1450":{"position":[[256,8]]},"1491":{"position":[[289,7]]},"1501":{"position":[[518,10]]}}}],["incom",{"_index":3246,"t":{"1477":{"position":[[656,8]]}}}],["incomprehens",{"_index":78,"t":{"13":{"position":[[79,16]]}}}],["incompress",{"_index":1870,"t":{"451":{"position":[[25,15]]}}}],["inconsist",{"_index":3048,"t":{"1376":{"position":[[141,12]]}}}],["incorrect",{"_index":2117,"t":{"721":{"position":[[1057,10]]},"1077":{"position":[[1182,10]]},"1236":{"position":[[747,9]]}}}],["incorrectli",{"_index":1935,"t":{"468":{"position":[[3188,12]]},"1234":{"position":[[1696,14]]},"1427":{"position":[[16,11]]},"1438":{"position":[[21,11]]}}}],["increas",{"_index":354,"t":{"52":{"position":[[2319,9]]},"137":{"position":[[885,8]]},"377":{"position":[[196,8],[338,8]]},"381":{"position":[[1063,10],[1233,10],[2672,8]]},"385":{"position":[[505,8]]},"401":{"position":[[118,8],[1106,8],[1238,8],[1283,10],[1435,9],[1449,10],[1557,8],[1729,10]]},"405":{"position":[[967,9],[1111,9]]},"407":{"position":[[863,10],[1245,10],[1374,10],[2273,9],[2514,9],[2588,8]]},"433":{"position":[[1281,8]]},"435":{"position":[[618,9]]},"468":{"position":[[491,10]]},"634":{"position":[[626,8]]},"1053":{"position":[[1031,8]]},"1438":{"position":[[461,8]]},"1450":{"position":[[493,8]]}}}],["indent",{"_index":87,"t":{"15":{"position":[[13,11],[121,11]]},"21":{"position":[[39,11]]},"217":{"position":[[124,12],[141,11],[200,11]]},"585":{"position":[[43,9]]},"1475":{"position":[[455,8]]}}}],["independ",{"_index":1607,"t":{"337":{"position":[[1881,14]]},"383":{"position":[[246,13]]},"415":{"position":[[472,14],[1634,11]]},"468":{"position":[[3394,13]]},"477":{"position":[[560,11]]},"1173":{"position":[[159,12]]},"1487":{"position":[[207,11]]}}}],["indepthli",{"_index":1951,"t":{"479":{"position":[[34,9]]}}}],["index",{"_index":2087,"t":{"612":{"position":[[1094,5]]},"987":{"position":[[1087,5]]}}}],["indic",{"_index":129,"t":{"19":{"position":[[237,8]]},"33":{"position":[[120,10]]},"44":{"position":[[146,8]]},"219":{"position":[[2278,8]]},"331":{"position":[[617,9]]},"517":{"position":[[1468,8],[1540,8],[1621,8],[1733,8],[1805,8],[1863,8]]},"1236":{"position":[[153,9],[207,9]]}}}],["individu",{"_index":600,"t":{"86":{"position":[[1132,10]]},"237":{"position":[[1094,10]]},"259":{"position":[[471,10]]},"377":{"position":[[377,12]]},"403":{"position":[[309,10]]},"407":{"position":[[179,10]]},"483":{"position":[[282,10]]},"634":{"position":[[660,10]]},"1431":{"position":[[183,10]]},"1438":{"position":[[400,12]]}}}],["individual_asv_pressur",{"_index":1714,"t":{"381":{"position":[[2800,24]]},"407":{"position":[[391,23],[1934,24]]},"417":{"position":[[68,23]]},"433":{"position":[[199,24]]},"1005":{"position":[[208,23]]},"1007":{"position":[[157,24]]},"1009":{"position":[[96,23]]},"1431":{"position":[[404,23]]}}}],["individual_asv_r",{"_index":1715,"t":{"381":{"position":[[2825,20]]},"407":{"position":[[415,19],[2205,20]]},"417":{"position":[[92,19]]},"419":{"position":[[572,19],[640,19]]},"433":{"position":[[224,19]]},"649":{"position":[[679,19],[747,19]]},"655":{"position":[[220,20]]},"657":{"position":[[218,19]]},"920":{"position":[[833,20],[920,20]]},"1005":{"position":[[232,19]]},"1007":{"position":[[182,20]]},"1101":{"position":[[404,19],[472,19]]},"1179":{"position":[[218,20]]},"1181":{"position":[[218,19]]},"1417":{"position":[[130,19],[163,19]]},"1431":{"position":[[349,19]]}}}],["infeas",{"_index":1256,"t":{"181":{"position":[[1224,10]]},"850":{"position":[[218,10],[621,11]]}}}],["infinit",{"_index":2280,"t":{"1224":{"position":[[1619,8]]}}}],["influenc",{"_index":1763,"t":{"401":{"position":[[1306,9],[1607,11]]}}}],["influence_time_vector",{"_index":195,"t":{"35":{"position":[[140,21]]},"61":{"position":[[282,22],[556,22]]},"425":{"position":[[128,22],[357,22]]},"427":{"position":[[31,21]]},"429":{"position":[[271,22]]},"505":{"position":[[432,21]]},"511":{"position":[[895,21]]},"898":{"position":[[14,21]]},"900":{"position":[[200,21]]},"902":{"position":[[0,22]]},"1109":{"position":[[382,21]]},"1111":{"position":[[206,22]]}}}],["info",{"_index":0,"t":{"2":{"position":[[0,4]]},"71":{"position":[[0,4]]},"503":{"position":[[58,4],[270,5]]},"1275":{"position":[[439,4]]},"1312":{"position":[[26,4]]},"1443":{"position":[[129,4]]},"1463":{"position":[[424,4]]},"1479":{"position":[[355,4]]},"1501":{"position":[[391,4]]},"1505":{"position":[[271,4]]}}}],["inform",{"_index":349,"t":{"52":{"position":[[2120,12]]},"82":{"position":[[84,11]]},"86":{"position":[[114,11]]},"125":{"position":[[89,12]]},"226":{"position":[[802,12]]},"383":{"position":[[517,12]]},"435":{"position":[[71,11]]},"468":{"position":[[168,11],[3624,11]]},"477":{"position":[[1266,12]]},"503":{"position":[[753,11]]},"509":{"position":[[16,11]]},"721":{"position":[[607,11]]},"1077":{"position":[[634,11]]},"1173":{"position":[[172,11]]},"1217":{"position":[[156,12]]},"1224":{"position":[[2143,12]]},"1365":{"position":[[128,11]]},"1436":{"position":[[251,11]]},"1489":{"position":[[213,11]]},"1501":{"position":[[342,11]]}}}],["ingo",{"_index":1792,"t":{"409":{"position":[[101,7]]},"411":{"position":[[373,7],[481,7],[853,7]]},"413":{"position":[[132,7],[562,7],[732,7]]},"419":{"position":[[139,7],[202,7]]},"647":{"position":[[145,7],[253,7]]},"649":{"position":[[144,7],[207,7]]},"920":{"position":[[576,7]]},"1087":{"position":[[303,7]]},"1097":{"position":[[359,7],[529,7]]},"1099":{"position":[[304,7]]},"1131":{"position":[[247,7]]},"1133":{"position":[[140,7],[248,7]]},"1135":{"position":[[139,7],[202,7]]}}}],["ingoing/outgo",{"_index":2318,"t":{"1236":{"position":[[15,16]]}}}],["inherit",{"_index":1562,"t":{"294":{"position":[[497,7]]},"1279":{"position":[[53,11]]},"1497":{"position":[[229,11]]}}}],["init",{"_index":2417,"t":{"1273":{"position":[[653,4]]},"1343":{"position":[[4,4]]}}}],["initi",{"_index":2327,"t":{"1236":{"position":[[1097,11]]},"1389":{"position":[[0,7]]}}}],["inject",{"_index":658,"t":{"97":{"position":[[866,9],[963,9],[1060,9]]},"109":{"position":[[1165,9]]},"113":{"position":[[218,9],[286,9],[793,9]]},"117":{"position":[[165,9],[1488,9],[1582,9],[1804,9],[2026,9],[2817,9]]},"119":{"position":[[3127,9]]},"129":{"position":[[517,9],[587,9]]},"143":{"position":[[748,9],[1383,9]]},"154":{"position":[[465,9],[539,9],[685,9],[782,9],[877,9]]},"168":{"position":[[218,9],[258,9],[287,9],[545,9],[728,9]]},"172":{"position":[[233,9],[355,9],[545,9],[1621,9],[1693,9],[1808,9],[1912,9],[1969,8],[2505,9]]},"174":{"position":[[1615,9],[2232,9]]},"231":{"position":[[23,9],[58,9],[108,9]]},"237":{"position":[[439,9]]},"259":{"position":[[885,9]]},"337":{"position":[[2507,9]]},"403":{"position":[[1057,10]]},"415":{"position":[[2045,9]]},"517":{"position":[[709,9]]}}}],["injection_compressor",{"_index":1550,"t":{"288":{"position":[[211,20]]},"537":{"position":[[211,20]]},"583":{"position":[[211,20]]},"614":{"position":[[211,20]]},"994":{"position":[[211,20]]}}}],["injection_compressor_refer",{"_index":1551,"t":{"288":{"position":[[250,30]]},"537":{"position":[[250,30]]},"583":{"position":[[250,30]]},"614":{"position":[[250,30]]},"994":{"position":[[250,30]]}}}],["inlet",{"_index":1247,"t":{"181":{"position":[[682,5]]},"204":{"position":[[206,5]]},"276":{"position":[[475,5]]},"337":{"position":[[860,5]]},"363":{"position":[[1467,5],[1484,6]]},"379":{"position":[[182,6]]},"381":{"position":[[1512,6],[1924,6]]},"387":{"position":[[91,5],[275,6],[455,6]]},"389":{"position":[[1035,6]]},"401":{"position":[[1078,5],[1132,5],[1323,5]]},"403":{"position":[[1125,5]]},"405":{"position":[[910,5],[941,5]]},"411":{"position":[[279,5],[681,6],[1087,6],[1712,6]]},"413":{"position":[[1132,5]]},"417":{"position":[[281,5]]},"433":{"position":[[425,6],[685,6]]},"468":{"position":[[1890,5],[2181,5],[2889,5],[4045,5]]},"477":{"position":[[723,5]]},"599":{"position":[[185,6]]},"637":{"position":[[183,6]]},"642":{"position":[[185,6]]},"647":{"position":[[453,6]]},"877":{"position":[[102,5]]},"879":{"position":[[80,6]]},"920":{"position":[[404,6],[623,6]]},"937":{"position":[[253,6]]},"961":{"position":[[379,6]]},"1087":{"position":[[131,6],[352,6]]},"1095":{"position":[[104,6]]},"1099":{"position":[[132,6],[538,6]]},"1234":{"position":[[1088,6]]},"1348":{"position":[[15,5]]},"1354":{"position":[[36,5]]},"1363":{"position":[[186,5]]},"1425":{"position":[[14,5],[153,5]]}}}],["inlet/outlet",{"_index":1395,"t":{"226":{"position":[[350,12]]}}}],["inlet_temperatur",{"_index":750,"t":{"107":{"position":[[1245,18],[1330,18],[1415,18]]},"119":{"position":[[1534,18],[1619,18],[1704,18]]},"137":{"position":[[1737,18]]},"145":{"position":[[1019,18]]},"369":{"position":[[252,18]]},"379":{"position":[[163,18]]},"381":{"position":[[1493,18],[1905,18]]},"387":{"position":[[256,18],[436,18]]},"389":{"position":[[1016,18]]},"392":{"position":[[860,18]]},"394":{"position":[[478,18]]},"396":{"position":[[775,18],[853,18]]},"398":{"position":[[418,18]]},"411":{"position":[[662,18],[1068,18],[1693,18]]},"419":{"position":[[317,18],[397,18],[453,18],[713,18]]},"433":{"position":[[406,18],[666,18]]},"599":{"position":[[166,18]]},"601":{"position":[[128,18]]},"637":{"position":[[164,18]]},"639":{"position":[[126,18]]},"642":{"position":[[166,18]]},"644":{"position":[[128,18]]},"647":{"position":[[434,18]]},"649":{"position":[[322,18],[453,18],[560,18],[820,18]]},"875":{"position":[[9,17]]},"879":{"position":[[61,18]]},"881":{"position":[[65,18]]},"920":{"position":[[385,18],[604,18]]},"937":{"position":[[234,18]]},"961":{"position":[[360,18]]},"963":{"position":[[225,18]]},"1087":{"position":[[112,18],[333,18]]},"1089":{"position":[[148,18]]},"1095":{"position":[[85,18]]},"1099":{"position":[[113,18],[519,18]]},"1101":{"position":[[149,18],[229,18],[285,18],[545,18]]},"1234":{"position":[[1069,18]]}}}],["inlin",{"_index":2335,"t":{"1239":{"position":[[503,6]]},"1475":{"position":[[513,8]]}}}],["inner",{"_index":35,"t":{"7":{"position":[[219,6]]}}}],["innov",{"_index":1430,"t":{"235":{"position":[[87,10]]}}}],["input",{"_index":92,"t":{"15":{"position":[[92,6]]},"19":{"position":[[206,6]]},"35":{"position":[[101,5]]},"52":{"position":[[2642,5],[2786,5],[5120,5],[5201,5]]},"63":{"position":[[344,6]]},"78":{"position":[[67,5]]},"80":{"position":[[65,5]]},"84":{"position":[[279,5],[335,5],[505,5]]},"93":{"position":[[284,5]]},"99":{"position":[[61,6],[108,5],[137,5]]},"103":{"position":[[15,5]]},"117":{"position":[[724,5]]},"123":{"position":[[106,5],[233,5],[318,6],[389,5]]},"125":{"position":[[14,5],[66,6]]},"127":{"position":[[13,5],[126,5],[197,5]]},"131":{"position":[[65,5],[80,6],[93,6],[110,5]]},"137":{"position":[[277,5],[355,5]]},"141":{"position":[[73,6]]},"143":{"position":[[1904,5],[2005,8]]},"152":{"position":[[136,5],[163,5],[267,5],[435,5],[579,5],[659,5],[835,6],[980,6],[1078,6]]},"156":{"position":[[61,6],[108,5],[137,5]]},"160":{"position":[[15,5],[478,5],[520,5]]},"172":{"position":[[1762,5]]},"185":{"position":[[266,5]]},"202":{"position":[[582,5]]},"204":{"position":[[312,8],[1164,5]]},"219":{"position":[[53,6],[211,5],[290,5],[661,5],[779,5]]},"222":{"position":[[42,7]]},"226":{"position":[[123,7]]},"257":{"position":[[574,5]]},"263":{"position":[[295,5]]},"278":{"position":[[169,6]]},"286":{"position":[[221,7]]},"296":{"position":[[158,5]]},"306":{"position":[[25,5]]},"313":{"position":[[157,5],[257,5]]},"321":{"position":[[111,7]]},"323":{"position":[[120,6]]},"331":{"position":[[152,7]]},"337":{"position":[[965,5],[1000,8]]},"339":{"position":[[186,5],[221,5]]},"341":{"position":[[128,6]]},"349":{"position":[[330,5]]},"355":{"position":[[311,5]]},"357":{"position":[[494,5],[764,5]]},"361":{"position":[[614,5]]},"363":{"position":[[969,5],[1060,5],[1546,8]]},"371":{"position":[[414,5],[623,8],[703,5]]},"377":{"position":[[145,6]]},"383":{"position":[[738,5]]},"389":{"position":[[213,5],[560,5]]},"405":{"position":[[181,6],[235,7],[305,6],[357,7]]},"421":{"position":[[111,6],[936,5]]},"423":{"position":[[185,6]]},"425":{"position":[[236,5]]},"427":{"position":[[13,5]]},"455":{"position":[[660,5],[695,5]]},"461":{"position":[[191,5]]},"465":{"position":[[313,5]]},"475":{"position":[[109,8]]},"481":{"position":[[145,5],[1163,5]]},"499":{"position":[[104,5],[427,5]]},"505":{"position":[[140,7],[157,6],[415,5],[1261,5]]},"511":{"position":[[878,5]]},"513":{"position":[[170,7],[187,6]]},"517":{"position":[[244,5],[353,5]]},"525":{"position":[[110,5],[220,6]]},"529":{"position":[[13,5]]},"543":{"position":[[162,6]]},"557":{"position":[[51,5]]},"561":{"position":[[13,5]]},"581":{"position":[[147,7]]},"589":{"position":[[44,5],[148,5]]},"593":{"position":[[179,5],[365,6]]},"634":{"position":[[298,5]]},"725":{"position":[[9,5]]},"737":{"position":[[107,6]]},"753":{"position":[[67,6]]},"755":{"position":[[110,6]]},"761":{"position":[[31,5],[158,5],[243,6],[314,5]]},"763":{"position":[[13,5],[126,5],[197,5],[395,6]]},"767":{"position":[[49,5]]},"777":{"position":[[14,5]]},"784":{"position":[[13,5]]},"877":{"position":[[66,5]]},"900":{"position":[[37,5]]},"908":{"position":[[119,6],[545,5]]},"925":{"position":[[133,8]]},"935":{"position":[[199,8],[306,5]]},"941":{"position":[[61,5],[208,5]]},"1045":{"position":[[118,7]]},"1053":{"position":[[251,5],[635,5],[1074,6],[1344,5]]},"1055":{"position":[[254,5]]},"1081":{"position":[[9,5]]},"1105":{"position":[[25,6]]},"1107":{"position":[[119,5]]},"1115":{"position":[[304,8]]},"1152":{"position":[[333,8]]},"1213":{"position":[[320,5]]},"1231":{"position":[[846,5]]},"1236":{"position":[[909,6],[987,6]]},"1310":{"position":[[231,5]]},"1321":{"position":[[56,5]]},"1324":{"position":[[192,5]]},"1332":{"position":[[292,5],[468,5]]},"1345":{"position":[[79,5],[307,5]]},"1348":{"position":[[86,5]]},"1352":{"position":[[154,5]]},"1356":{"position":[[481,5],[579,5]]},"1386":{"position":[[562,5]]},"1425":{"position":[[58,5]]},"1445":{"position":[[307,5]]},"1447":{"position":[[56,5]]},"1450":{"position":[[77,5],[407,5]]},"1454":{"position":[[50,5]]}}}],["input;.is_valid",{"_index":586,"t":{"86":{"position":[[249,15]]}}}],["name>:.yml",{"_index":158,"t":{"25":{"position":[[256,31],[360,32]]}}}],["next",{"_index":598,"t":{"86":{"position":[[913,4]]},"265":{"position":[[570,4]]},"413":{"position":[[992,4]]},"585":{"position":[[30,4]]},"908":{"position":[[1169,4]]},"1097":{"position":[[789,4]]},"1231":{"position":[[103,4]]},"1243":{"position":[[101,4]]},"1266":{"position":[[54,4]]}}}],["nice",{"_index":2346,"t":{"1245":{"position":[[60,4]]}}}],["nitrogen",{"_index":996,"t":{"137":{"position":[[1100,9]]},"145":{"position":[[382,9]]},"392":{"position":[[539,9]]},"435":{"position":[[312,8]]},"445":{"position":[[154,9]]},"447":{"position":[[134,9]]}}}],["nmvoc",{"_index":2970,"t":{"1367":{"position":[[129,5]]},"1438":{"position":[[0,5],[150,6]]}}}],["nnn",{"_index":1909,"t":{"468":{"position":[[1243,3],[1792,3]]}}}],["no_flow",{"_index":2725,"t":{"1343":{"position":[[239,7]]}}}],["no_flow_r",{"_index":3124,"t":{"1436":{"position":[[22,12]]}}}],["node",{"_index":1375,"t":{"219":{"position":[[437,4]]},"226":{"position":[[309,4]]},"1268":{"position":[[376,4]]},"1277":{"position":[[213,4],[244,4]]},"1324":{"position":[[85,5]]},"1334":{"position":[[265,5]]},"1343":{"position":[[536,4]]},"1463":{"position":[[382,5],[489,5]]}}}],["nodejs.org",{"_index":3157,"t":{"1463":{"position":[[402,10]]}}}],["non",{"_index":493,"t":{"63":{"position":[[58,3]]},"219":{"position":[[1811,3]]},"265":{"position":[[839,3]]},"1224":{"position":[[1173,3],[1615,3]]},"1231":{"position":[[188,3]]},"1234":{"position":[[1457,3]]}}}],["none",{"_index":131,"t":{"19":{"position":[[317,4],[351,4]]},"33":{"position":[[136,4]]},"381":{"position":[[2860,5]]},"505":{"position":[[585,5]]},"511":{"position":[[1048,5]]},"515":{"position":[[135,4]]},"531":{"position":[[96,4]]},"539":{"position":[[126,4]]},"547":{"position":[[112,4]]},"555":{"position":[[89,4]]},"563":{"position":[[113,4]]},"577":{"position":[[121,4]]},"587":{"position":[[124,4]]},"610":{"position":[[138,4]]},"616":{"position":[[151,4]]},"659":{"position":[[132,4]]},"667":{"position":[[102,4]]},"703":{"position":[[161,4]]},"719":{"position":[[42,4],[47,4]]},"735":{"position":[[79,4]]},"751":{"position":[[117,4]]},"759":{"position":[[55,4]]},"811":{"position":[[71,4]]},"875":{"position":[[73,4]]},"1005":{"position":[[263,4]]},"1007":{"position":[[217,5]]},"1239":{"position":[[121,4]]},"1273":{"position":[[920,4]]},"1440":{"position":[[0,4]]}}}],["none|year|month|day",{"_index":2000,"t":{"505":{"position":[[273,22]]},"511":{"position":[[736,22]]}}}],["normal",{"_index":1692,"t":{"371":{"position":[[1214,8]]},"443":{"position":[[334,10]]},"517":{"position":[[2111,8],[2164,8]]},"721":{"position":[[563,8]]},"1077":{"position":[[591,8]]}}}],["notat",{"_index":2935,"t":{"1363":{"position":[[598,8]]}}}],["note",{"_index":38,"t":{"7":{"position":[[255,4]]},"103":{"position":[[277,4]]},"111":{"position":[[417,4]]},"123":{"position":[[0,4]]},"160":{"position":[[391,4]]},"185":{"position":[[131,4]]},"202":{"position":[[546,4],[551,4]]},"243":{"position":[[359,4]]},"253":{"position":[[0,4]]},"261":{"position":[[0,4]]},"265":{"position":[[624,4]]},"304":{"position":[[0,4]]},"309":{"position":[[0,4]]},"313":{"position":[[0,4]]},"337":{"position":[[982,5]]},"357":{"position":[[716,4]]},"363":{"position":[[1340,4]]},"367":{"position":[[280,4]]},"407":{"position":[[446,4]]},"415":{"position":[[0,4]]},"421":{"position":[[0,4]]},"485":{"position":[[0,4]]},"517":{"position":[[339,4],[841,4]]},"533":{"position":[[89,4]]},"585":{"position":[[0,4]]},"589":{"position":[[641,4]]},"612":{"position":[[1075,4]]},"669":{"position":[[122,4],[127,4]]},"920":{"position":[[0,4]]},"987":{"position":[[1068,4]]},"1053":{"position":[[1164,4]]},"1055":{"position":[[13,5],[232,4]]},"1057":{"position":[[115,4]]},"1069":{"position":[[462,4]]},"1083":{"position":[[32,4]]},"1115":{"position":[[270,4]]},"1475":{"position":[[1166,4]]}}}],["noth",{"_index":792,"t":{"117":{"position":[[645,7]]}}}],["now",{"_index":161,"t":{"25":{"position":[[320,3]]},"33":{"position":[[22,3]]},"35":{"position":[[698,3],[1122,3]]},"37":{"position":[[260,3]]},"41":{"position":[[106,3],[312,3]]},"44":{"position":[[11,3]]},"52":{"position":[[1916,3],[2494,3],[3380,3],[3513,3],[3793,3]]},"54":{"position":[[297,3],[436,3],[747,3],[1716,3],[1994,3],[2535,3],[2702,3]]},"61":{"position":[[450,4],[801,3]]},"63":{"position":[[369,3],[582,3]]},"65":{"position":[[87,3],[253,3]]},"84":{"position":[[971,3]]},"91":{"position":[[511,4]]},"99":{"position":[[446,3]]},"117":{"position":[[8,3]]},"156":{"position":[[416,3]]},"172":{"position":[[8,3]]},"413":{"position":[[1196,4]]},"417":{"position":[[176,3]]},"877":{"position":[[182,4]]},"1197":{"position":[[316,3]]},"1213":{"position":[[208,3],[605,3]]},"1217":{"position":[[138,3]]},"1231":{"position":[[958,3]]},"1236":{"position":[[82,3],[139,3],[203,3],[553,3],[737,3],[838,3]]},"1239":{"position":[[523,3]]},"1247":{"position":[[193,3]]},"1255":{"position":[[203,3],[342,3]]},"1258":{"position":[[10,3]]},"1270":{"position":[[47,3]]},"1405":{"position":[[158,3]]},"1415":{"position":[[420,3]]},"1417":{"position":[[212,3]]},"1421":{"position":[[196,3]]},"1425":{"position":[[225,3]]},"1431":{"position":[[295,4]]},"1433":{"position":[[21,3]]},"1438":{"position":[[133,3]]},"1454":{"position":[[118,3]]},"1477":{"position":[[785,4]]},"1499":{"position":[[1091,3],[1161,4]]},"1528":{"position":[[877,3]]}}}],["nox",{"_index":3128,"t":{"1438":{"position":[[120,4]]}}}],["num",{"_index":2871,"t":{"1354":{"position":[[692,3]]}}}],["number",{"_index":387,"t":{"52":{"position":[[3437,7],[3570,7]]},"84":{"position":[[164,8],[568,7],[654,7],[816,7],[923,6]]},"86":{"position":[[780,6]]},"137":{"position":[[753,6]]},"172":{"position":[[738,6],[805,6],[3568,6],[3635,6]]},"174":{"position":[[1808,6],[1875,6],[2744,6],[2811,6]]},"282":{"position":[[681,9]]},"292":{"position":[[642,6],[703,6]]},"353":{"position":[[340,7]]},"359":{"position":[[343,7],[572,7]]},"365":{"position":[[179,8]]},"373":{"position":[[172,8]]},"389":{"position":[[9,6],[150,6],[239,6]]},"455":{"position":[[252,7]]},"606":{"position":[[146,7]]},"612":{"position":[[975,6]]},"681":{"position":[[149,7],[378,7]]},"686":{"position":[[366,7]]},"775":{"position":[[159,7]]},"837":{"position":[[49,6]]},"857":{"position":[[346,7]]},"951":{"position":[[174,9]]},"957":{"position":[[89,6],[184,6]]},"975":{"position":[[1292,6],[1327,6]]},"987":{"position":[[968,6]]},"1059":{"position":[[40,6]]},"1247":{"position":[[90,6]]},"1286":{"position":[[79,6]]},"1363":{"position":[[607,7]]},"1493":{"position":[[288,7],[328,6]]},"1505":{"position":[[498,8],[524,6]]},"1511":{"position":[[96,7],[217,7]]},"1515":{"position":[[146,7]]},"1528":{"position":[[334,7],[847,7]]},"1530":{"position":[[493,7]]}}}],["numbers/result",{"_index":554,"t":{"84":{"position":[[7,14]]}}}],["numer",{"_index":2299,"t":{"1231":{"position":[[207,7],[279,7],[477,7]]},"1270":{"position":[[16,6]]},"1452":{"position":[[23,9]]},"1457":{"position":[[56,9]]}}}],["numeric_method",{"_index":3100,"t":{"1386":{"position":[[1305,15]]}}}],["numpi",{"_index":2401,"t":{"1273":{"position":[[98,5]]},"1363":{"position":[[433,5]]},"1367":{"position":[[1173,5],[1214,5],[1234,5]]},"1376":{"position":[[80,5]]}}}],["nvm",{"_index":3158,"t":{"1463":{"position":[[420,3]]}}}],["o",{"_index":157,"t":{"25":{"position":[[254,1]]},"73":{"position":[[635,1]]},"505":{"position":[[684,2]]}}}],["object",{"_index":121,"t":{"19":{"position":[[107,6],[178,8]]},"1243":{"position":[[275,6]]},"1270":{"position":[[138,7]]},"1345":{"position":[[552,6]]},"1369":{"position":[[77,6]]},"1497":{"position":[[262,6]]}}}],["obsolet",{"_index":3248,"t":{"1477":{"position":[[776,8]]}}}],["obtain",{"_index":1802,"t":{"413":{"position":[[831,9]]},"471":{"position":[[234,6]]},"589":{"position":[[513,6]]},"1066":{"position":[[180,6]]},"1097":{"position":[[628,9]]}}}],["obviou",{"_index":3304,"t":{"1499":{"position":[[1002,7],[1053,7]]}}}],["oc",{"_index":2167,"t":{"877":{"position":[[172,3]]}}}],["occur",{"_index":1847,"t":{"435":{"position":[[386,6]]},"517":{"position":[[1000,6]]}}}],["offer",{"_index":1454,"t":{"237":{"position":[[891,8]]},"241":{"position":[[215,8]]},"243":{"position":[[403,5]]}}}],["offici",{"_index":2,"t":{"2":{"position":[[24,10]]},"7":{"position":[[286,10]]}}}],["offset",{"_index":490,"t":{"61":{"position":[[1622,6]]}}}],["offshor",{"_index":520,"t":{"67":{"position":[[793,8]]},"471":{"position":[[76,8]]},"517":{"position":[[1412,8]]},"1224":{"position":[[27,8],[68,8],[254,8]]},"1399":{"position":[[209,8]]}}}],["oh",{"_index":3321,"t":{"1505":{"position":[[163,2]]}}}],["oil",{"_index":642,"t":{"97":{"position":[[208,3]]},"141":{"position":[[264,3]]},"154":{"position":[[85,3]]},"164":{"position":[[427,3],[1111,3]]},"174":{"position":[[738,3]]},"237":{"position":[[93,3]]},"343":{"position":[[150,3]]},"435":{"position":[[437,5]]},"471":{"position":[[85,3]]},"477":{"position":[[1015,3],[1058,3],[1151,3]]},"517":{"position":[[1549,3],[1630,3]]},"553":{"position":[[76,3]]},"837":{"position":[[59,3],[325,3],[349,3],[420,3]]},"1301":{"position":[[81,3]]}}}],["oil/ga",{"_index":1271,"t":{"198":{"position":[[153,8]]}}}],["oil_prod",{"_index":643,"t":{"97":{"position":[[212,10]]},"121":{"position":[[750,9]]},"141":{"position":[[268,10]]},"154":{"position":[[89,10]]},"176":{"position":[[736,9]]}}}],["oil_rate_per_timestep",{"_index":402,"t":{"52":{"position":[[4151,21],[4369,21],[4583,21],[4907,21]]}}}],["old",{"_index":363,"t":{"52":{"position":[[2532,3]]},"54":{"position":[[2679,3]]},"61":{"position":[[980,3]]},"1226":{"position":[[138,3]]},"1231":{"position":[[554,3]]},"1450":{"position":[[548,3]]},"1457":{"position":[[98,3]]}}}],["old_setup_file_name_utf",{"_index":159,"t":{"25":{"position":[[288,24]]}}}],["omit",{"_index":3327,"t":{"1505":{"position":[[565,7]]}}}],["on",{"_index":140,"t":{"23":{"position":[[144,3]]},"61":{"position":[[846,3],[853,3]]},"75":{"position":[[77,3]]},"86":{"position":[[830,3]]},"97":{"position":[[313,3]]},"113":{"position":[[9,3]]},"115":{"position":[[9,3]]},"143":{"position":[[9,3],[1010,3]]},"154":{"position":[[33,3]]},"162":{"position":[[30,3]]},"168":{"position":[[9,3]]},"198":{"position":[[351,3],[449,3]]},"208":{"position":[[33,3]]},"219":{"position":[[1068,3],[1367,3],[1896,3],[1958,3]]},"243":{"position":[[213,3]]},"253":{"position":[[332,3]]},"263":{"position":[[29,3]]},"294":{"position":[[172,3]]},"337":{"position":[[267,3],[559,3],[2422,3]]},"351":{"position":[[65,3]]},"371":{"position":[[968,3],[1445,3]]},"383":{"position":[[609,3],[670,3]]},"389":{"position":[[52,3],[472,3]]},"403":{"position":[[238,3],[625,3]]},"407":{"position":[[143,3],[461,3],[490,3]]},"411":{"position":[[1260,3]]},"413":{"position":[[548,3]]},"415":{"position":[[54,3],[64,5],[1533,3]]},"421":{"position":[[208,3],[259,3]]},"427":{"position":[[9,3]]},"431":{"position":[[53,3]]},"443":{"position":[[314,3]]},"468":{"position":[[159,3],[2356,3],[2637,3],[4028,3],[4131,3]]},"479":{"position":[[231,3],[439,3],[489,3]]},"612":{"position":[[57,3]]},"634":{"position":[[242,4]]},"647":{"position":[[626,3]]},"669":{"position":[[215,3]]},"729":{"position":[[13,3]]},"749":{"position":[[118,3]]},"821":{"position":[[262,3]]},"833":{"position":[[20,3],[321,3]]},"850":{"position":[[337,3]]},"900":{"position":[[177,3]]},"975":{"position":[[573,3],[830,3],[1057,3],[1128,3]]},"977":{"position":[[12,3],[137,3]]},"979":{"position":[[12,3],[216,3]]},"981":{"position":[[12,3],[302,3]]},"983":{"position":[[12,3],[314,3]]},"985":{"position":[[92,3],[303,3]]},"1066":{"position":[[139,3]]},"1069":{"position":[[12,3],[233,3]]},"1087":{"position":[[525,3]]},"1097":{"position":[[345,3]]},"1099":{"position":[[711,3]]},"1105":{"position":[[122,3],[173,3]]},"1109":{"position":[[541,3]]},"1215":{"position":[[127,3],[279,3]]},"1231":{"position":[[1191,3]]},"1234":{"position":[[1261,3],[1545,3]]},"1236":{"position":[[1327,3]]},"1310":{"position":[[69,3]]},"1343":{"position":[[1149,3]]},"1367":{"position":[[851,3]]},"1411":{"position":[[77,3]]},"1431":{"position":[[64,3]]},"1445":{"position":[[69,3]]},"1450":{"position":[[535,4]]},"1457":{"position":[[224,3],[264,3]]},"1477":{"position":[[192,3]]},"1499":{"position":[[428,3],[970,3],[996,3],[1305,3]]}}}],["onc",{"_index":1467,"t":{"241":{"position":[[106,4]]},"920":{"position":[[83,4]]},"1489":{"position":[[0,4]]}}}],["onshor",{"_index":2273,"t":{"1224":{"position":[[444,7],[753,7]]}}}],["onshore_pow",{"_index":2277,"t":{"1224":{"position":[[708,13]]},"1229":{"position":[[706,13]]}}}],["onto",{"_index":3355,"t":{"1530":{"position":[[889,4]]}}}],["open",{"_index":360,"t":{"52":{"position":[[2439,4]]},"54":{"position":[[2312,4]]},"1485":{"position":[[26,4]]},"1487":{"position":[[177,4]]},"1491":{"position":[[26,4]]},"1528":{"position":[[51,4]]}}}],["oper",{"_index":173,"t":{"33":{"position":[[45,11],[148,11],[261,11]]},"52":{"position":[[2258,8]]},"82":{"position":[[103,9]]},"84":{"position":[[746,7]]},"86":{"position":[[481,9],[503,11]]},"123":{"position":[[483,9]]},"143":{"position":[[615,11],[2061,11],[2099,11]]},"181":{"position":[[275,11]]},"204":{"position":[[139,11],[1667,11]]},"228":{"position":[[80,9],[120,9],[200,9],[268,9],[293,8]]},"286":{"position":[[321,12]]},"299":{"position":[[212,11]]},"329":{"position":[[152,11]]},"331":{"position":[[307,12],[467,11],[497,11],[636,11]]},"337":{"position":[[413,11],[793,11]]},"381":{"position":[[532,11]]},"401":{"position":[[612,9],[748,9],[820,9],[1004,9],[1366,9],[1647,9]]},"403":{"position":[[613,8],[819,8]]},"451":{"position":[[758,11],[920,9],[941,11]]},"468":{"position":[[774,11]]},"479":{"position":[[380,7]]},"481":{"position":[[446,9],[602,9],[858,11]]},"483":{"position":[[103,11]]},"581":{"position":[[235,12]]},"589":{"position":[[711,9]]},"761":{"position":[[408,9]]},"975":{"position":[[19,11],[980,11]]},"977":{"position":[[141,11]]},"979":{"position":[[220,11]]},"981":{"position":[[162,11]]},"983":{"position":[[168,11]]},"985":{"position":[[357,11],[407,11],[497,11]]},"1053":{"position":[[121,10],[856,9]]},"1069":{"position":[[237,11],[337,11]]},"1231":{"position":[[1266,11]]},"1345":{"position":[[236,11],[400,11]]},"1348":{"position":[[208,11]]},"1356":{"position":[[717,11]]},"1363":{"position":[[50,11],[843,11]]},"1367":{"position":[[476,11]]},"1415":{"position":[[395,11]]},"1436":{"position":[[67,11]]}}}],["operational_set",{"_index":805,"t":{"117":{"position":[[1312,21],[2345,21]]},"119":{"position":[[2943,21],[3446,21]]},"143":{"position":[[1571,21],[2446,21]]},"145":{"position":[[1565,21],[1949,21]]},"286":{"position":[[299,21]]},"288":{"position":[[332,21]]},"331":{"position":[[285,21],[350,20]]},"333":{"position":[[205,21]]},"581":{"position":[[213,21],[262,20]]},"585":{"position":[[291,21]]},"610":{"position":[[45,20],[117,20]]},"614":{"position":[[332,21]]},"616":{"position":[[130,20]]},"618":{"position":[[79,20]]},"745":{"position":[[223,20]]},"973":{"position":[[45,20]]},"994":{"position":[[332,21],[934,21]]},"1049":{"position":[[364,21]]},"1071":{"position":[[199,21]]},"1073":{"position":[[203,21]]},"1115":{"position":[[77,20]]}}}],["opportun",{"_index":1464,"t":{"239":{"position":[[213,13]]}}}],["opposit",{"_index":587,"t":{"86":{"position":[[330,8]]},"1055":{"position":[[290,8]]}}}],["optim",{"_index":2663,"t":{"1334":{"position":[[148,9]]},"1345":{"position":[[500,12]]}}}],["option",{"_index":11,"t":{"2":{"position":[[110,7]]},"5":{"position":[[21,6]]},"7":{"position":[[26,6]]},"9":{"position":[[279,7]]},"54":{"position":[[1768,9],[1917,9],[2741,6]]},"61":{"position":[[1059,8]]},"71":{"position":[[352,7]]},"73":{"position":[[449,7]]},"91":{"position":[[231,10]]},"152":{"position":[[1048,9]]},"183":{"position":[[78,10]]},"185":{"position":[[20,9]]},"190":{"position":[[93,10]]},"192":{"position":[[49,9]]},"217":{"position":[[283,8]]},"219":{"position":[[493,8]]},"253":{"position":[[392,10]]},"259":{"position":[[20,7],[156,7]]},"261":{"position":[[571,9]]},"282":{"position":[[331,6]]},"292":{"position":[[585,9]]},"294":{"position":[[29,9],[372,11]]},"296":{"position":[[70,9]]},"313":{"position":[[27,8]]},"337":{"position":[[598,7]]},"381":{"position":[[2390,9],[2458,9],[2548,9]]},"385":{"position":[[222,9],[290,9],[380,10]]},"387":{"position":[[689,9],[757,9]]},"389":{"position":[[1097,9]]},"403":{"position":[[496,7]]},"405":{"position":[[682,7]]},"407":{"position":[[362,7],[675,7]]},"411":{"position":[[1212,10],[1288,9],[1367,9],[2035,9]]},"413":{"position":[[1088,9]]},"415":{"position":[[203,8]]},"433":{"position":[[999,9],[1067,9],[1157,9]]},"443":{"position":[[153,8]]},"457":{"position":[[280,9]]},"463":{"position":[[424,9]]},"468":{"position":[[3748,7]]},"485":{"position":[[30,8]]},"503":{"position":[[114,6],[171,9],[199,8]]},"505":{"position":[[53,9],[222,8],[317,7],[1494,6],[1522,7]]},"507":{"position":[[72,9],[82,8]]},"509":{"position":[[73,9],[101,8]]},"511":{"position":[[96,9],[106,8],[527,6],[555,7],[780,7]]},"513":{"position":[[93,9],[252,8]]},"517":{"position":[[161,8],[181,8]]},"581":{"position":[[174,9]]},"647":{"position":[[578,10],[654,9],[733,9]]},"747":{"position":[[610,8]]},"821":{"position":[[322,10]]},"833":{"position":[[236,9]]},"869":{"position":[[178,8]]},"935":{"position":[[11,8]]},"959":{"position":[[11,8]]},"961":{"position":[[441,9]]},"998":{"position":[[0,8]]},"1035":{"position":[[57,9]]},"1053":{"position":[[1021,6]]},"1087":{"position":[[477,10],[553,9],[632,9]]},"1099":{"position":[[663,10],[739,9],[818,9]]},"1109":{"position":[[196,9],[404,9],[428,9]]},"1154":{"position":[[280,9]]},"1234":{"position":[[1213,10],[1289,9],[1368,9]]},"1273":{"position":[[697,8]]},"1334":{"position":[[4,6]]},"1431":{"position":[[47,7],[68,6],[170,7],[227,7]]},"1477":{"position":[[139,9],[155,9],[352,8]]}}}],["order",{"_index":247,"t":{"37":{"position":[[174,5],[234,5]]},"41":{"position":[[237,5]]},"44":{"position":[[493,5]]},"52":{"position":[[457,5]]},"67":{"position":[[279,5]]},"141":{"position":[[163,5]]},"172":{"position":[[3293,5]]},"208":{"position":[[383,5]]},"1224":{"position":[[1375,5]]},"1241":{"position":[[404,5],[482,5]]},"1352":{"position":[[216,5]]},"1376":{"position":[[216,5]]},"1386":{"position":[[568,5]]},"1401":{"position":[[49,5]]},"1415":{"position":[[132,5]]},"1427":{"position":[[154,5]]},"1469":{"position":[[208,6]]},"1475":{"position":[[836,9]]},"1497":{"position":[[31,5]]},"1511":{"position":[[3,5]]},"1525":{"position":[[3,5]]}}}],["orient",{"_index":3277,"t":{"1497":{"position":[[269,8]]}}}],["origin",{"_index":483,"t":{"61":{"position":[[1411,6]]},"1515":{"position":[[118,6]]},"1528":{"position":[[819,6]]},"1530":{"position":[[236,8],[1051,6]]}}}],["origin/main",{"_index":3351,"t":{"1528":{"position":[[760,11]]}}}],["other",{"_index":1517,"t":{"265":{"position":[[261,6]]}}}],["otherwis",{"_index":593,"t":{"86":{"position":[[676,9]]},"549":{"position":[[246,9]]},"1475":{"position":[[1271,9]]}}}],["out",{"_index":487,"t":{"61":{"position":[[1528,3]]},"224":{"position":[[83,3]]},"337":{"position":[[2199,3],[2412,3]]},"371":{"position":[[1576,4]]},"381":{"position":[[720,3],[812,3],[865,3],[927,3]]},"413":{"position":[[33,3]]},"415":{"position":[[1739,3]]},"1131":{"position":[[148,3]]},"1229":{"position":[[231,3]]},"1255":{"position":[[369,3]]},"1401":{"position":[[207,3]]},"1467":{"position":[[222,3]]},"1499":{"position":[[243,4],[1368,3]]},"1505":{"position":[[144,3]]}}}],["outgo",{"_index":1793,"t":{"409":{"position":[[116,8]]},"411":{"position":[[595,8],[634,8],[1271,8],[1350,8]]},"413":{"position":[[160,8],[716,9],[937,8],[1039,8]]},"415":{"position":[[1895,8]]},"419":{"position":[[266,8]]},"647":{"position":[[367,8],[406,8],[637,8],[716,8]]},"649":{"position":[[271,8]]},"1087":{"position":[[536,8],[615,8]]},"1097":{"position":[[513,9],[734,8],[836,8]]},"1099":{"position":[[722,8],[801,8]]},"1131":{"position":[[275,8]]},"1133":{"position":[[362,8]]},"1135":{"position":[[266,8]]},"1234":{"position":[[1272,8],[1351,8]]}}}],["outlet",{"_index":1246,"t":{"181":{"position":[[667,6]]},"204":{"position":[[223,6]]},"276":{"position":[[543,6]]},"337":{"position":[[877,6]]},"381":{"position":[[227,6]]},"401":{"position":[[1264,6],[1464,6]]},"411":{"position":[[211,6]]},"413":{"position":[[794,6]]},"417":{"position":[[291,6]]},"468":{"position":[[2376,6],[2865,6],[4135,6]]},"612":{"position":[[667,6]]},"935":{"position":[[581,6]]},"987":{"position":[[660,6]]},"1097":{"position":[[591,6]]},"1348":{"position":[[26,6]]},"1363":{"position":[[195,6]]},"1425":{"position":[[25,6],[164,6]]}}}],["outlin",{"_index":1617,"t":{"347":{"position":[[13,8]]},"453":{"position":[[18,7]]},"471":{"position":[[205,7]]},"1479":{"position":[[143,8]]}}}],["output",{"_index":150,"t":{"25":{"position":[[85,6]]},"35":{"position":[[265,6],[340,6],[825,6],[1148,6],[1233,6]]},"37":{"position":[[37,6]]},"54":{"position":[[2566,6],[2734,6]]},"73":{"position":[[78,6],[134,6],[148,6],[165,6],[184,6],[266,6],[334,6],[416,6],[480,6],[517,6],[607,6],[724,8]]},"82":{"position":[[26,9]]},"84":{"position":[[0,6],[240,6],[440,7],[452,6],[548,7],[955,7]]},"86":{"position":[[216,6],[1316,6]]},"152":{"position":[[786,8]]},"331":{"position":[[585,6]]},"339":{"position":[[237,6],[298,6]]},"407":{"position":[[2660,7]]},"505":{"position":[[237,6],[309,7],[609,6],[660,6],[675,7],[689,6],[751,7],[844,6],[927,7],[1099,7],[1250,6],[1350,7],[1376,6],[1392,7]]},"511":{"position":[[195,6],[332,6],[352,6],[416,7],[424,6],[440,7],[719,6],[772,7]]},"593":{"position":[[264,6]]},"721":{"position":[[274,7],[816,6],[1086,6]]},"837":{"position":[[116,6]]},"1077":{"position":[[317,7],[1140,6],[1283,7]]},"1226":{"position":[[26,6]]},"1229":{"position":[[535,7],[1472,6],[1524,6],[1602,7],[1770,6],[1986,6]]},"1231":{"position":[[18,7]]},"1234":{"position":[[50,7],[237,7]]},"1236":{"position":[[132,6]]},"1243":{"position":[[205,6],[232,6]]},"1247":{"position":[[71,6]]},"1328":{"position":[[78,6]]},"1348":{"position":[[116,6]]},"1350":{"position":[[895,6]]},"1352":{"position":[[184,6]]},"1361":{"position":[[0,6]]},"1376":{"position":[[176,6]]},"1415":{"position":[[92,6],[245,9],[335,6]]},"1425":{"position":[[325,6]]},"1447":{"position":[[171,6]]},"1452":{"position":[[214,6]]}}}],["outputfold",{"_index":2003,"t":{"505":{"position":[[706,12],[725,13]]}}}],["outputfrequ",{"_index":1999,"t":{"505":{"position":[[257,15]]}}}],["outsid",{"_index":588,"t":{"86":{"position":[[491,7],[534,7]]},"181":{"position":[[1235,8],[1388,7]]},"198":{"position":[[330,7]]},"204":{"position":[[1253,7]]},"331":{"position":[[439,7]]},"339":{"position":[[209,7]]},"371":{"position":[[896,7]]},"381":{"position":[[563,7]]},"481":{"position":[[762,7]]},"850":{"position":[[236,7]]},"1231":{"position":[[1290,7]]},"1234":{"position":[[189,7]]},"1241":{"position":[[725,7]]},"1334":{"position":[[617,7]]},"1438":{"position":[[674,7]]},"1452":{"position":[[355,7]]}}}],["over",{"_index":358,"t":{"52":{"position":[[2398,4]]},"75":{"position":[[59,4]]},"329":{"position":[[67,5]]},"407":{"position":[[525,4],[2016,4]]},"479":{"position":[[746,4]]},"589":{"position":[[677,4]]},"612":{"position":[[47,4],[216,4],[328,4],[432,4],[1021,4],[1060,4]]},"749":{"position":[[60,4],[151,4]]},"975":{"position":[[944,5]]},"985":{"position":[[185,4]]},"987":{"position":[[47,4],[209,4],[321,4],[425,4],[1014,4],[1053,4]]},"989":{"position":[[37,4],[201,4]]},"1057":{"position":[[464,4]]},"1115":{"position":[[238,4]]},"1359":{"position":[[40,4]]},"1367":{"position":[[759,4]]},"1411":{"position":[[59,4]]},"1497":{"position":[[224,4],[257,4]]}}}],["overal",{"_index":280,"t":{"44":{"position":[[436,7]]},"219":{"position":[[4,7]]}}}],["overdefin",{"_index":1835,"t":{"431":{"position":[[324,11]]}}}],["overrid",{"_index":1561,"t":{"294":{"position":[[404,8],[725,8]]},"869":{"position":[[206,8]]}}}],["overshoot",{"_index":2085,"t":{"612":{"position":[[501,12]]},"987":{"position":[[494,12]]}}}],["overview",{"_index":1392,"t":{"224":{"position":[[48,8]]},"261":{"position":[[529,8]]},"497":{"position":[[109,8],[159,8]]},"896":{"position":[[368,8]]}}}],["ownership",{"_index":3039,"t":{"1373":{"position":[[284,9]]}}}],["p1p_1p1",{"_index":1878,"t":{"451":{"position":[[530,8]]}}}],["p1p_{1}p1",{"_index":1418,"t":{"233":{"position":[[117,10]]}}}],["p1v1n=p2v2np_\\mathrm{1",{"_index":1905,"t":{"468":{"position":[[1152,23]]}}}],["p2p_2p2",{"_index":1879,"t":{"451":{"position":[[543,8]]}}}],["p2p_{2}p2",{"_index":1419,"t":{"233":{"position":[[132,11]]}}}],["p>just",{"_index":3200,"t":{"1475":{"position":[[328,7]]}}}],["p_1)}{liquid\\_dens",{"_index":1876,"t":{"451":{"position":[[466,21]]}}}],["p_\\mathrm{2",{"_index":1907,"t":{"468":{"position":[[1193,12]]}}}],["p_{1",{"_index":1424,"t":{"233":{"position":[[211,5]]}}}],["p_{2",{"_index":1423,"t":{"233":{"position":[[203,5]]}}}],["packag",{"_index":2766,"t":{"1343":{"position":[[1242,8]]},"1350":{"position":[[151,7]]},"1356":{"position":[[770,7]]}}}],["page",{"_index":81,"t":{"13":{"position":[[117,4]]},"497":{"position":[[95,4]]},"945":{"position":[[320,5]]},"1467":{"position":[[93,4],[355,6],[440,6]]}}}],["paragraph",{"_index":3199,"t":{"1475":{"position":[[300,9]]}}}],["parallel",{"_index":1227,"t":{"179":{"position":[[142,9]]},"337":{"position":[[312,8]]},"533":{"position":[[301,9]]},"1378":{"position":[[41,11],[122,11]]}}}],["paramet",{"_index":1374,"t":{"219":{"position":[[296,10]]},"381":{"position":[[153,10]]},"877":{"position":[[72,9]]}}}],["parenthes",{"_index":1407,"t":{"228":{"position":[[462,11]]},"1367":{"position":[[632,11]]}}}],["pars",{"_index":113,"t":{"17":{"position":[[254,7]]},"1273":{"position":[[614,7],[840,7]]},"1363":{"position":[[581,5],[645,5]]},"1505":{"position":[[678,7]]}}}],["parsed/convert",{"_index":2420,"t":{"1273":{"position":[[777,16]]}}}],["part",{"_index":32,"t":{"7":{"position":[[171,6]]},"71":{"position":[[240,4]]},"84":{"position":[[839,5]]},"123":{"position":[[80,4],[260,4]]},"243":{"position":[[107,4]]},"253":{"position":[[75,4],[273,4]]},"257":{"position":[[279,4]]},"313":{"position":[[131,4],[284,4]]},"337":{"position":[[2378,4]]},"415":{"position":[[291,5],[691,4],[866,5],[1368,4]]},"417":{"position":[[478,4]]},"421":{"position":[[76,4]]},"425":{"position":[[333,4]]},"435":{"position":[[418,4]]},"443":{"position":[[219,4]]},"695":{"position":[[191,4]]},"761":{"position":[[5,4],[185,4]]},"821":{"position":[[5,4],[203,4]]},"941":{"position":[[108,4],[158,4]]},"1477":{"position":[[361,6]]},"1523":{"position":[[301,4]]}}}],["particular",{"_index":1805,"t":{"413":{"position":[[1155,10]]},"1077":{"position":[[181,10]]}}}],["pass",{"_index":2068,"t":{"589":{"position":[[600,6]]},"1053":{"position":[[81,7]]},"1243":{"position":[[77,7]]},"1499":{"position":[[853,4]]},"1530":{"position":[[633,7]]}}}],["past",{"_index":599,"t":{"86":{"position":[[1054,4]]}}}],["patch",{"_index":2324,"t":{"1236":{"position":[[1000,7],[1150,7],[1269,7],[1454,7]]}}}],["path",{"_index":429,"t":{"54":{"position":[[1069,6],[1126,4]]},"61":{"position":[[267,5],[541,5]]},"127":{"position":[[184,5]]},"247":{"position":[[54,4]]},"421":{"position":[[678,4],[923,5]]},"503":{"position":[[75,4],[289,5]]},"505":{"position":[[719,5]]},"511":{"position":[[274,5],[346,5]]},"513":{"position":[[268,5]]},"757":{"position":[[89,5]]},"763":{"position":[[184,5]]},"767":{"position":[[14,4],[65,4]]},"1105":{"position":[[592,4]]},"1107":{"position":[[111,4]]},"1528":{"position":[[396,5]]},"1530":{"position":[[679,5]]}}}],["path/fold",{"_index":442,"t":{"54":{"position":[[1415,11]]}}}],["path/to/file.csv",{"_index":2130,"t":{"769":{"position":[[6,19]]}}}],["path_to_chart_file>.csv",{"_index":2162,"t":{"854":{"position":[[109,24]]}}}],["path_to_fil",{"_index":1828,"t":{"425":{"position":[[113,14]]}}}],["path_to_file.csv",{"_index":1264,"t":{"187":{"position":[[53,18]]},"194":{"position":[[53,18]]},"691":{"position":[[53,18]]}}}],["path_to_model1/model_data.csv",{"_index":1830,"t":{"429":{"position":[[46,30]]},"1111":{"position":[[46,30]]}}}],["path_to_tiein/tie_in_field.csv",{"_index":1831,"t":{"429":{"position":[[110,31]]}}}],["pattern",{"_index":1370,"t":{"217":{"position":[[70,7]]}}}],["pdoc",{"_index":2527,"t":{"1284":{"position":[[10,4]]}}}],["pe",{"_index":1939,"t":{"475":{"position":[[74,2]]},"1053":{"position":[[400,4]]}}}],["peng",{"_index":978,"t":{"137":{"position":[[106,4]]},"435":{"position":[[1008,5]]}}}],["pentan",{"_index":1841,"t":{"435":{"position":[[274,8]]}}}],["pep",{"_index":3285,"t":{"1499":{"position":[[464,3],[504,3]]}}}],["per",{"_index":993,"t":{"137":{"position":[[950,3]]},"162":{"position":[[132,3]]},"204":{"position":[[826,3]]},"217":{"position":[[224,3]]},"389":{"position":[[95,3],[347,3],[879,3]]},"407":{"position":[[195,3]]},"786":{"position":[[31,3]]},"961":{"position":[[223,3]]},"975":{"position":[[605,3],[864,3],[1086,3],[1143,3]]},"977":{"position":[[27,3]]},"979":{"position":[[27,3]]},"981":{"position":[[27,3],[334,3]]},"983":{"position":[[27,3],[348,3]]},"985":{"position":[[107,3]]},"1069":{"position":[[27,3]]},"1286":{"position":[[23,3]]}}}],["percentag",{"_index":371,"t":{"52":{"position":[[2729,10],[2875,10]]},"103":{"position":[[624,10]]},"119":{"position":[[330,10]]},"135":{"position":[[592,10]]},"145":{"position":[[262,10]]},"160":{"position":[[980,10]]},"174":{"position":[[510,10]]},"187":{"position":[[259,12]]},"194":{"position":[[261,12]]},"196":{"position":[[161,10],[322,10],[502,10]]},"353":{"position":[[280,12]]},"359":{"position":[[282,12]]},"365":{"position":[[438,12]]},"373":{"position":[[242,12]]},"377":{"position":[[131,10],[232,10]]},"379":{"position":[[415,11],[438,11]]},"381":{"position":[[1868,11],[1891,11],[2281,11],[2304,11]]},"411":{"position":[[1025,11],[1048,11],[1447,11],[1470,11],[1899,11],[1922,11]]},"529":{"position":[[49,11]]},"597":{"position":[[135,10]]},"599":{"position":[[418,11],[441,11]]},"634":{"position":[[474,10]]},"637":{"position":[[416,11],[439,11]]},"642":{"position":[[418,11],[441,11]]},"647":{"position":[[813,11],[836,11]]},"649":{"position":[[408,10],[515,10]]},"686":{"position":[[122,11]]},"689":{"position":[[135,11]]},"691":{"position":[[159,12]]},"784":{"position":[[41,11]]},"854":{"position":[[92,10]]},"1099":{"position":[[476,11],[499,11],[898,11],[921,11]]},"1162":{"position":[[224,12]]},"1164":{"position":[[236,12]]},"1167":{"position":[[123,10]]},"1438":{"position":[[490,10]]}}}],["perform",{"_index":187,"t":{"35":{"position":[[21,9],[422,10]]},"97":{"position":[[389,9]]},"123":{"position":[[624,11],[676,11],[732,11]]},"129":{"position":[[131,9]]},"154":{"position":[[228,9]]},"237":{"position":[[292,8]]},"401":{"position":[[148,10]]},"468":{"position":[[630,7]]},"481":{"position":[[788,11]]},"1270":{"position":[[51,9]]}}}],["period",{"_index":213,"t":{"35":{"position":[[583,6],[958,7],[997,7]]},"265":{"position":[[223,7],[304,7]]},"589":{"position":[[684,6]]},"721":{"position":[[223,6]]},"1053":{"position":[[1097,7]]},"1057":{"position":[[478,6]]},"1077":{"position":[[928,8]]}}}],["period,period",{"_index":2909,"t":{"1356":{"position":[[910,14]]}}}],["permiss",{"_index":444,"t":{"54":{"position":[[1475,12]]}}}],["person",{"_index":3173,"t":{"1467":{"position":[[303,9]]}}}],["phase",{"_index":1665,"t":{"363":{"position":[[306,6]]},"435":{"position":[[443,5]]}}}],["physic",{"_index":1452,"t":{"237":{"position":[[709,8]]}}}],["pick",{"_index":206,"t":{"35":{"position":[[468,7]]}}}],["pin",{"_index":2998,"t":{"1367":{"position":[[1210,3]]}}}],["place",{"_index":754,"t":{"109":{"position":[[101,7]]},"164":{"position":[[101,7]]},"259":{"position":[[244,6]]},"263":{"position":[[81,6]]},"721":{"position":[[880,6]]},"775":{"position":[[94,6]]}}}],["placehold",{"_index":669,"t":{"99":{"position":[[313,13],[344,13],[370,13],[395,13],[424,13],[462,12]]},"111":{"position":[[713,13],[742,13],[875,13],[904,13]]},"113":{"position":[[670,13],[765,13],[852,13],[923,13],[1004,13]]},"115":{"position":[[610,13],[691,13],[779,13]]},"117":{"position":[[30,12]]},"131":{"position":[[209,13],[240,13],[262,13],[288,13],[317,13]]},"156":{"position":[[283,13],[314,13],[340,13],[365,13],[394,13],[432,12]]},"166":{"position":[[495,13],[524,13]]},"168":{"position":[[519,13],[607,13],[696,13],[778,13]]},"170":{"position":[[139,13],[224,13]]},"172":{"position":[[30,12]]}}}],["placement",{"_index":1755,"t":{"401":{"position":[[582,9]]}}}],["plan",{"_index":1447,"t":{"237":{"position":[[376,5]]},"455":{"position":[[134,8]]}}}],["platform",{"_index":1377,"t":{"219":{"position":[[1314,8]]},"261":{"position":[[195,9]]},"477":{"position":[[1376,9]]},"499":{"position":[[341,10]]},"896":{"position":[[122,9]]}}}],["platform_a",{"_index":1528,"t":{"270":{"position":[[22,10]]}}}],["platform_b",{"_index":1529,"t":{"270":{"position":[[102,10]]}}}],["platforms/rig",{"_index":1098,"t":{"152":{"position":[[880,15]]}}}],["pleas",{"_index":60,"t":{"11":{"position":[[103,6],[281,6]]},"517":{"position":[[332,6]]},"1373":{"position":[[15,6]]},"1465":{"position":[[43,6]]},"1469":{"position":[[65,6]]},"1477":{"position":[[368,6]]},"1485":{"position":[[19,6]]},"1491":{"position":[[19,6],[282,6]]},"1493":{"position":[[0,6]]},"1495":{"position":[[57,6]]},"1499":{"position":[[1355,6]]},"1530":{"position":[[1116,6]]}}}],["plot",{"_index":1961,"t":{"481":{"position":[[909,7]]},"908":{"position":[[1333,4]]}}}],["plu",{"_index":1412,"t":{"231":{"position":[[87,4]]},"233":{"position":[[51,4]]},"1213":{"position":[[304,4]]},"1471":{"position":[[41,4]]}}}],["poetri",{"_index":2740,"t":{"1343":{"position":[[587,6]]}}}],["point",{"_index":237,"t":{"35":{"position":[[1258,5]]},"107":{"position":[[169,6]]},"143":{"position":[[2073,6]]},"181":{"position":[[326,5],[1381,6]]},"204":{"position":[[91,5],[366,5],[1039,5]]},"337":{"position":[[745,5]]},"339":{"position":[[202,6]]},"345":{"position":[[113,5]]},"349":{"position":[[242,5]]},"357":{"position":[[250,6],[534,6]]},"363":{"position":[[679,5],[730,6],[947,5],[1038,5],[1162,7]]},"371":{"position":[[376,5],[508,5],[679,5],[792,6],[831,6],[889,6],[921,5],[1066,6],[1085,6],[1228,6],[1466,6]]},"381":{"position":[[544,6],[610,6],[645,6],[737,6],[829,6],[882,6],[944,6],[1116,6]]},"401":{"position":[[622,7],[720,5],[758,6],[830,5],[1014,6],[1376,6],[1657,6]]},"479":{"position":[[930,7]]},"481":{"position":[[456,6],[612,7],[753,5],[870,6]]},"549":{"position":[[112,6]]},"634":{"position":[[338,6]]},"721":{"position":[[745,6]]},"1231":{"position":[[824,5]]},"1234":{"position":[[377,6]]},"1332":{"position":[[298,6]]},"1436":{"position":[[79,5]]}}}],["polytrop",{"_index":985,"t":{"137":{"position":[[461,10]]},"187":{"position":[[172,11]]},"194":{"position":[[174,11]]},"337":{"position":[[1206,10],[1558,10]]},"353":{"position":[[165,11],[238,11],[412,10],[478,10]]},"359":{"position":[[167,11],[240,11],[415,10],[481,10],[644,10],[710,10]]},"363":{"position":[[1615,10],[1740,10],[1762,11]]},"365":{"position":[[131,11],[236,10],[323,11],[396,11]]},"373":{"position":[[124,11],[200,11]]},"431":{"position":[[643,10]]},"468":{"position":[[721,10],[989,10],[1110,10],[1254,10],[1545,10],[1803,10],[1954,10],[2264,10],[2430,10],[2508,10]]},"479":{"position":[[830,10]]},"606":{"position":[[218,10],[284,10]]},"681":{"position":[[221,10],[287,10],[450,10],[516,10]]},"860":{"position":[[64,11]]},"862":{"position":[[60,11]]},"1162":{"position":[[117,11]]},"1164":{"position":[[121,11],[194,11]]}}}],["polytropic\\_efficiency}{\\kappa",{"_index":1931,"t":{"468":{"position":[[2034,30]]}}}],["polytropic_effici",{"_index":706,"t":{"107":{"position":[[411,22]]},"119":{"position":[[702,22]]},"137":{"position":[[1455,22]]},"145":{"position":[[737,22]]},"365":{"position":[[108,22]]},"367":{"position":[[120,22]]},"373":{"position":[[101,22]]},"375":{"position":[[106,22]]},"394":{"position":[[120,22]]}}}],["polytropic_efficiencyκ−1\\frac{\\kappa",{"_index":1930,"t":{"468":{"position":[[1993,38]]}}}],["polytropic_head=nn−1zrt1mw((p1p2)n−1n−1)polytropic\\_head",{"_index":1915,"t":{"468":{"position":[[1583,56]]}}}],["poorli",{"_index":2265,"t":{"1215":{"position":[[144,6]]}}}],["portfolio",{"_index":1457,"t":{"237":{"position":[[971,9]]}}}],["posit",{"_index":559,"t":{"84":{"position":[[123,8]]},"109":{"position":[[1183,9]]},"117":{"position":[[183,9],[1822,9]]},"233":{"position":[[306,9]]},"553":{"position":[[94,9]]},"612":{"position":[[894,8],[933,8]]},"987":{"position":[[887,8],[926,8]]}}}],["possibl",{"_index":236,"t":{"35":{"position":[[1208,8]]},"50":{"position":[[117,9]]},"52":{"position":[[259,8],[1446,8],[1920,8],[4944,8],[5167,8]]},"54":{"position":[[544,8],[930,9]]},"59":{"position":[[119,9]]},"61":{"position":[[944,13]]},"164":{"position":[[1179,8]]},"204":{"position":[[718,8]]},"208":{"position":[[338,8]]},"337":{"position":[[2153,8]]},"355":{"position":[[299,8]]},"361":{"position":[[602,8]]},"363":{"position":[[571,8]]},"377":{"position":[[44,8]]},"401":{"position":[[189,8]]},"407":{"position":[[268,8]]},"423":{"position":[[109,8]]},"517":{"position":[[296,8]]},"533":{"position":[[161,8]]},"597":{"position":[[399,8]]},"612":{"position":[[623,8],[727,8],[1065,9]]},"721":{"position":[[1048,8]]},"749":{"position":[[6,8]]},"908":{"position":[[571,8]]},"933":{"position":[[44,8]]},"987":{"position":[[616,8],[720,8],[1058,9]]},"1197":{"position":[[320,8]]},"1234":{"position":[[616,8]]},"1243":{"position":[[39,8]]},"1253":{"position":[[259,8]]},"1332":{"position":[[491,11]]},"1425":{"position":[[229,8]]},"1436":{"position":[[42,8]]},"1463":{"position":[[95,8]]}}}],["potenti",{"_index":589,"t":{"86":{"position":[[521,12]]},"272":{"position":[[285,9]]},"371":{"position":[[978,9],[1393,9]]},"468":{"position":[[4088,11]]},"1057":{"position":[[239,9]]},"1421":{"position":[[58,9]]},"1497":{"position":[[81,9]]}}}],["power",{"_index":340,"t":{"52":{"position":[[1699,5],[1786,5],[1883,5],[2073,5],[2094,5]]},"67":{"position":[[507,5]]},"97":{"position":[[587,5],[687,5],[785,5],[980,5],[1251,5]]},"113":{"position":[[56,5],[159,5]]},"115":{"position":[[56,5],[158,5]]},"121":{"position":[[399,6]]},"129":{"position":[[327,5],[385,5],[471,5],[532,5],[615,5]]},"135":{"position":[[337,5]]},"143":{"position":[[106,5]]},"148":{"position":[[11,6]]},"152":{"position":[[337,5],[935,5]]},"154":{"position":[[424,5],[486,5],[604,5],[797,5]]},"168":{"position":[[56,5],[159,5]]},"172":{"position":[[402,5]]},"181":{"position":[[1318,5]]},"198":{"position":[[206,5]]},"200":{"position":[[20,5],[33,5]]},"202":{"position":[[799,5]]},"204":{"position":[[909,5],[940,5]]},"208":{"position":[[0,5],[244,5],[281,5],[358,5],[408,5],[456,5],[620,5]]},"210":{"position":[[15,5]]},"213":{"position":[[5,5]]},"215":{"position":[[41,5]]},"228":{"position":[[438,5]]},"243":{"position":[[71,5],[259,5]]},"249":{"position":[[42,6]]},"251":{"position":[[22,5]]},"265":{"position":[[848,5]]},"282":{"position":[[662,6]]},"294":{"position":[[800,5]]},"299":{"position":[[123,6],[144,5],[343,5]]},"304":{"position":[[5,5],[135,5]]},"306":{"position":[[58,6],[235,5],[422,5],[525,5],[696,5]]},"381":{"position":[[2488,5]]},"385":{"position":[[320,5]]},"387":{"position":[[787,5]]},"411":{"position":[[2065,5]]},"433":{"position":[[1097,5]]},"451":{"position":[[209,5]]},"457":{"position":[[125,5]]},"461":{"position":[[133,5]]},"468":{"position":[[104,5],[1337,5]]},"477":{"position":[[9,5],[1163,5]]},"479":{"position":[[128,5],[470,5]]},"481":{"position":[[1006,5]]},"483":{"position":[[413,5]]},"505":{"position":[[1460,6]]},"517":{"position":[[1330,5],[1486,6],[1742,5]]},"529":{"position":[[296,6]]},"561":{"position":[[265,6]]},"571":{"position":[[29,5]]},"669":{"position":[[64,5],[234,5],[451,5]]},"784":{"position":[[260,6]]},"850":{"position":[[318,5],[499,5]]},"949":{"position":[[82,5]]},"951":{"position":[[155,6]]},"998":{"position":[[79,5]]},"1013":{"position":[[42,5],[107,5],[175,5],[237,5],[261,5],[496,5],[546,5]]},"1057":{"position":[[50,5]]},"1140":{"position":[[76,5]]},"1154":{"position":[[125,5]]},"1224":{"position":[[51,5],[366,5],[393,5],[673,5],[761,5],[789,5],[874,5],[1282,5],[1412,5]]},"1229":{"position":[[671,5]]},"1234":{"position":[[249,5],[1536,5],[1690,5]]},"1236":{"position":[[783,5],[874,5],[952,5]]},"1241":{"position":[[12,5],[137,5],[190,5],[275,6],[302,5]]},"1247":{"position":[[162,5]]},"1249":{"position":[[12,5]]},"1268":{"position":[[210,5]]},"1367":{"position":[[220,5],[1451,5]]},"1380":{"position":[[47,5]]},"1386":{"position":[[1089,5]]},"1421":{"position":[[76,5],[399,5]]},"1433":{"position":[[0,5]]},"1467":{"position":[[164,5]]},"1505":{"position":[[9,8]]}}}],["power,fuel",{"_index":1162,"t":{"176":{"position":[[379,10]]}}}],["power/energi",{"_index":2258,"t":{"1213":{"position":[[463,12]]}}}],["power=head∗mass_rateefficiency.pow",{"_index":1871,"t":{"451":{"position":[[249,36]]}}}],["power=polytropic_head∗mass_rateefficiencypow",{"_index":1912,"t":{"468":{"position":[[1376,46]]}}}],["power_adjustment_const",{"_index":1559,"t":{"292":{"position":[[558,26]]},"381":{"position":[[2363,26]]},"385":{"position":[[195,26]]},"387":{"position":[[662,26]]},"389":{"position":[[1070,26]]},"433":{"position":[[972,26]]},"457":{"position":[[253,26]]},"459":{"position":[[284,26]]},"463":{"position":[[397,26]]},"465":{"position":[[185,26],[513,26]]},"929":{"position":[[284,26]]},"961":{"position":[[414,26]]},"996":{"position":[[9,25]]},"1000":{"position":[[52,26]]},"1002":{"position":[[87,26]]},"1142":{"position":[[284,26]]},"1149":{"position":[[284,26]]},"1154":{"position":[[253,26]]},"1156":{"position":[[284,26]]},"1213":{"position":[[401,25]]}}}],["power_from_shor",{"_index":2276,"t":{"1224":{"position":[[646,16]]},"1229":{"position":[[644,16]]}}}],["power_loss_factor",{"_index":2906,"t":{"1356":{"position":[[809,17]]}}}],["power_r",{"_index":2308,"t":{"1231":{"position":[[995,10]]},"1247":{"position":[[148,10]]}}}],["power_unit",{"_index":3118,"t":{"1421":{"position":[[259,10]]}}}],["powerlossfactor",{"_index":1545,"t":{"282":{"position":[[645,16]]},"483":{"position":[[593,16]]},"745":{"position":[[244,15]]},"747":{"position":[[590,15]]},"951":{"position":[[138,16]]},"1011":{"position":[[45,15]]},"1013":{"position":[[198,15]]},"1015":{"position":[[0,16]]},"1017":{"position":[[0,16],[22,16]]},"1352":{"position":[[89,15]]}}}],["powerlossfactor}powerrequired​=1−powerlossfactorpowersubsea",{"_index":2210,"t":{"1013":{"position":[[383,61]]}}}],["powerrequired=powersubsea1−powerlossfactorpower_{requir",{"_index":2208,"t":{"1013":{"position":[[298,58]]}}}],["powersubseapower_{subsea}powersubsea",{"_index":2211,"t":{"1013":{"position":[[451,37]]}}}],["pr",{"_index":980,"t":{"137":{"position":[[120,4],[1073,2]]},"145":{"position":[[355,2]]},"435":{"position":[[954,3],[1005,2]]},"441":{"position":[[242,2]]},"1299":{"position":[[176,2]]},"1373":{"position":[[22,2]]},"1493":{"position":[[215,3]]}}}],["practic",{"_index":574,"t":{"84":{"position":[[530,9]]},"93":{"position":[[56,8]]},"401":{"position":[[669,8]]},"549":{"position":[[227,9]]},"908":{"position":[[1408,9]]},"1499":{"position":[[806,12]]}}}],["pre",{"_index":306,"t":{"52":{"position":[[298,3],[4983,3],[5081,3],[5257,3]]},"181":{"position":[[39,3]]},"383":{"position":[[651,4]]},"517":{"position":[[205,3]]},"1253":{"position":[[298,3]]},"1307":{"position":[[15,3]]},"1343":{"position":[[945,3]]},"1373":{"position":[[356,3]]},"1497":{"position":[[11,3]]},"1499":{"position":[[15,3]]}}}],["pre>stat",{"_index":3212,"t":{"1475":{"position":[[605,26]]}}}],["preced",{"_index":1388,"t":{"219":{"position":[[2431,9]]}}}],["precis",{"_index":2386,"t":{"1270":{"position":[[34,9]]}}}],["precompressor",{"_index":631,"t":{"93":{"position":[[468,13]]}}}],["predefin",{"_index":717,"t":{"107":{"position":[[796,10]]},"119":{"position":[[1087,10]]},"349":{"position":[[131,10],[161,10]]},"371":{"position":[[1048,10]]},"394":{"position":[[296,10]]},"396":{"position":[[593,10]]},"398":{"position":[[154,10]]},"437":{"position":[[10,10]]},"439":{"position":[[83,10],[138,10]]},"441":{"position":[[14,10],[104,10],[220,10],[409,10]]},"533":{"position":[[23,10]]},"801":{"position":[[58,10]]},"1415":{"position":[[22,10]]}}}],["predefined_single_speed_compressor_chart",{"_index":1619,"t":{"355":{"position":[[16,40]]},"608":{"position":[[16,40]]}}}],["predefined_variable_speed_compressor_chart",{"_index":713,"t":{"107":{"position":[[545,42],[1455,42]]},"119":{"position":[[836,42],[1744,42]]},"361":{"position":[[16,42]]},"392":{"position":[[16,42],[900,42]]},"396":{"position":[[114,42],[893,42]]},"683":{"position":[[16,42]]},"693":{"position":[[16,42]]},"865":{"position":[[16,42]]},"1169":{"position":[[16,42]]}}}],["predict",{"_index":2034,"t":{"525":{"position":[[69,9]]},"1376":{"position":[[206,9]]},"1415":{"position":[[122,9]]}}}],["prefer",{"_index":3303,"t":{"1499":{"position":[[980,10]]}}}],["prefix",{"_index":534,"t":{"73":{"position":[[714,6]]},"505":{"position":[[801,7],[833,6]]},"1356":{"position":[[1003,6]]},"1528":{"position":[[270,8]]},"1530":{"position":[[429,8]]}}}],["prepar",{"_index":452,"t":{"54":{"position":[[2300,7]]},"1251":{"position":[[79,7]]},"1397":{"position":[[79,7]]},"1409":{"position":[[79,7]]}}}],["prerequisit",{"_index":3150,"t":{"1463":{"position":[[283,14]]}}}],["presampl",{"_index":1897,"t":{"465":{"position":[[237,10]]}}}],["present",{"_index":265,"t":{"41":{"position":[[266,9]]},"185":{"position":[[251,7],[363,7]]},"553":{"position":[[55,7]]},"1057":{"position":[[151,7]]},"1303":{"position":[[22,12]]},"1334":{"position":[[330,12]]}}}],["preserv",{"_index":2336,"t":{"1239":{"position":[[530,9]]}}}],["pressur",{"_index":502,"t":{"63":{"position":[[520,9]]},"93":{"position":[[449,8]]},"97":{"position":[[899,8],[932,8]]},"117":{"position":[[1855,8],[1878,8]]},"137":{"position":[[876,8],[935,8]]},"143":{"position":[[594,10],[1328,8],[2207,8]]},"154":{"position":[[718,8],[751,8]]},"172":{"position":[[1246,8],[1269,8],[3259,8]]},"181":{"position":[[71,9],[635,8],[716,8],[849,8]]},"204":{"position":[[114,9],[212,10],[230,9],[387,9],[407,9],[1490,8],[1554,8]]},"226":{"position":[[279,8],[334,8],[401,8]]},"233":{"position":[[107,9]]},"237":{"position":[[771,9]]},"265":{"position":[[318,8]]},"276":{"position":[[451,8],[522,8],[550,8]]},"278":{"position":[[257,8],[309,8]]},"290":{"position":[[127,10]]},"292":{"position":[[264,9],[415,8],[467,8],[537,8],[901,8],[953,8]]},"321":{"position":[[66,9]]},"323":{"position":[[192,8],[244,8]]},"337":{"position":[[768,9],[866,10],[884,9],[1311,8],[1353,8],[1409,9],[1794,9],[1836,8],[2100,10],[2268,8],[2447,8],[2529,9]]},"345":{"position":[[446,8],[498,8]]},"347":{"position":[[296,9]]},"363":{"position":[[1491,8]]},"377":{"position":[[829,10]]},"381":{"position":[[211,8],[270,9],[1784,9],[2197,9],[2736,8]]},"383":{"position":[[108,9],[162,8]]},"389":{"position":[[80,8],[123,8],[290,8],[332,8],[864,8]]},"401":{"position":[[963,8],[1084,9],[1166,8],[1271,8],[1471,10]]},"403":{"position":[[545,8],[699,8],[735,9],[874,8],[1012,9],[1131,8],[1150,8],[1226,8],[1248,9],[1312,8],[1352,9]]},"405":{"position":[[151,8],[202,8],[293,8],[324,8],[428,8],[451,9],[486,8],[706,8],[754,8],[806,8],[893,9],[916,8],[999,8],[1044,8],[1183,8],[1243,9]]},"407":{"position":[[929,8],[1125,9],[1348,9],[1568,9],[1963,8],[2006,9],[2120,8],[2180,8]]},"409":{"position":[[146,8]]},"411":{"position":[[941,9],[1512,9],[1618,9],[1666,9],[1964,9]]},"413":{"position":[[1138,8]]},"415":{"position":[[366,9],[569,8],[788,9],[1014,8],[1109,8],[1291,8],[1481,8],[1939,8],[2067,9]]},"417":{"position":[[14,8],[147,8],[298,9],[351,8],[387,8],[418,8],[445,9],[530,8]]},"429":{"position":[[232,9]]},"431":{"position":[[360,8],[383,9],[422,8],[523,9],[547,10]]},"433":{"position":[[135,8],[306,8],[339,8],[614,9],[875,9]]},"435":{"position":[[628,8]]},"451":{"position":[[398,9],[587,10]]},"468":{"position":[[303,9],[446,8],[1569,9],[2383,8],[2598,9],[2970,8],[3015,8],[3251,8],[3333,9],[3650,8],[3711,9],[3731,8],[4074,9],[4171,8],[4297,10]]},"477":{"position":[[698,9],[739,9]]},"597":{"position":[[367,10]]},"612":{"position":[[464,8],[565,8],[641,8],[674,8],[709,9],[739,9]]},"618":{"position":[[29,8]]},"620":{"position":[[31,8]]},"634":{"position":[[872,10]]},"647":{"position":[[878,9],[984,9],[1032,9]]},"653":{"position":[[162,8],[220,8],[348,10]]},"908":{"position":[[419,8]]},"918":{"position":[[197,8],[268,8]]},"920":{"position":[[984,8],[1122,9],[1273,9]]},"922":{"position":[[164,8],[419,8]]},"933":{"position":[[63,8],[145,8],[187,9]]},"935":{"position":[[218,9],[330,9],[362,8],[430,8],[498,8],[683,8],[719,8]]},"937":{"position":[[189,8]]},"957":{"position":[[270,8]]},"961":{"position":[[208,8]]},"975":{"position":[[382,8],[475,8],[585,8],[633,8],[730,8],[844,8]]},"981":{"position":[[63,8],[228,8],[314,8]]},"983":{"position":[[65,8],[238,8],[328,8]]},"987":{"position":[[457,8],[558,8],[634,8],[667,8],[702,9],[732,9]]},"1005":{"position":[[133,8],[300,8]]},"1007":{"position":[[93,8]]},"1099":{"position":[[392,9],[963,9],[1069,9],[1117,9]]},"1111":{"position":[[167,9]]},"1115":{"position":[[27,8],[208,8],[280,8]]},"1117":{"position":[[27,8]]},"1177":{"position":[[162,8],[219,8],[347,10]]},"1213":{"position":[[153,10]]},"1224":{"position":[[1160,8]]},"1231":{"position":[[1066,9],[1150,9]]},"1234":{"position":[[714,8]]},"1236":{"position":[[503,8],[527,8],[1184,8]]},"1241":{"position":[[75,8]]},"1273":{"position":[[485,9],[706,8]]},"1286":{"position":[[8,8]]},"1343":{"position":[[668,9],[751,9],[918,9],[1409,9]]},"1348":{"position":[[33,9],[103,9]]},"1350":{"position":[[929,9]]},"1352":{"position":[[171,9]]},"1354":{"position":[[4,8],[42,8]]},"1363":{"position":[[21,8],[490,8],[534,8]]},"1367":{"position":[[289,8],[372,9],[512,8],[539,8],[597,8],[1519,8]]},"1384":{"position":[[69,8]]},"1417":{"position":[[195,8]]},"1425":{"position":[[43,9],[103,8],[171,9],[208,10],[280,10]]},"1427":{"position":[[308,9]]},"1431":{"position":[[30,8],[239,8]]},"1436":{"position":[[395,9]]},"1450":{"position":[[68,8]]}}}],["pressure/suct",{"_index":1787,"t":{"407":{"position":[[1989,16]]}}}],["pressure_control",{"_index":1684,"t":{"369":{"position":[[130,17]]},"381":{"position":[[2706,17]]},"431":{"position":[[830,17]]},"433":{"position":[[105,17]]},"935":{"position":[[96,16]]},"937":{"position":[[105,17]]},"1005":{"position":[[0,16]]},"1007":{"position":[[63,17]]},"1009":{"position":[[78,17]]},"1239":{"position":[[23,16],[103,17]]}}}],["pressure_drop_ahead_of_stag",{"_index":1705,"t":{"381":{"position":[[1754,29],[2167,29]]},"411":{"position":[[911,29],[1482,29],[1934,29]]},"413":{"position":[[1056,28]]},"433":{"position":[[584,29],[845,29]]},"647":{"position":[[848,29]]},"1099":{"position":[[362,29],[933,29]]}}}],["prevent",{"_index":283,"t":{"44":{"position":[[502,7]]},"1477":{"position":[[563,7]]}}}],["preview",{"_index":3163,"t":{"1463":{"position":[[564,7],[661,7]]}}}],["previou",{"_index":476,"t":{"61":{"position":[[698,8]]},"413":{"position":[[815,8]]},"908":{"position":[[961,8]]},"1097":{"position":[[612,8]]},"1450":{"position":[[526,8]]}}}],["previous",{"_index":203,"t":{"35":{"position":[[433,10],[1069,10]]},"41":{"position":[[70,10]]},"44":{"position":[[214,10]]},"52":{"position":[[2205,10]]},"54":{"position":[[672,10],[853,10]]},"61":{"position":[[146,11],[1007,10]]},"63":{"position":[[0,10]]},"91":{"position":[[256,11]]},"141":{"position":[[34,10]]},"143":{"position":[[479,10]]},"407":{"position":[[3,10]]},"906":{"position":[[46,10]]},"1085":{"position":[[187,10]]},"1213":{"position":[[653,10]]},"1236":{"position":[[1404,10]]},"1241":{"position":[[593,10]]},"1523":{"position":[[256,10]]}}}],["price",{"_index":546,"t":{"78":{"position":[[101,5]]},"1299":{"position":[[73,5]]},"1454":{"position":[[84,5]]}}}],["priorit",{"_index":2309,"t":{"1231":{"position":[[1254,11]]}}}],["prioritazion",{"_index":2307,"t":{"1231":{"position":[[581,12]]}}}],["prioriti",{"_index":2662,"t":{"1334":{"position":[[139,8]]}}}],["priorityoptim",{"_index":2680,"t":{"1334":{"position":[[599,17]]}}}],["problem",{"_index":1532,"t":{"272":{"position":[[331,7]]},"407":{"position":[[216,7]]},"431":{"position":[[313,7]]},"1229":{"position":[[235,8]]},"1438":{"position":[[608,7]]},"1445":{"position":[[192,7]]}}}],["process",{"_index":678,"t":{"103":{"position":[[30,10]]},"160":{"position":[[30,10]]},"219":{"position":[[1783,10],[1997,9],[2050,9],[2081,9]]},"237":{"position":[[120,11],[797,10],[1064,10]]},"259":{"position":[[482,7]]},"357":{"position":[[804,7]]},"363":{"position":[[276,7]]},"435":{"position":[[557,8]]},"468":{"position":[[129,8],[377,8],[927,7],[1000,8],[1121,7],[2247,8],[2275,7],[3937,7]]},"471":{"position":[[41,7]]},"477":{"position":[[824,9]]},"513":{"position":[[47,10]]},"589":{"position":[[1021,7]]},"593":{"position":[[441,7]]},"886":{"position":[[111,10]]},"957":{"position":[[48,7]]},"989":{"position":[[133,9]]},"1053":{"position":[[838,7]]},"1057":{"position":[[262,7],[376,7]]},"1479":{"position":[[156,7],[554,8]]},"1489":{"position":[[254,7]]},"1523":{"position":[[224,8]]}}}],["produc",{"_index":438,"t":{"54":{"position":[[1260,8]]},"97":{"position":[[751,8]]},"113":{"position":[[240,8]]},"129":{"position":[[434,8]]},"154":{"position":[[572,8]]},"168":{"position":[[240,8],[629,8]]},"172":{"position":[[832,8],[1303,8],[1982,8],[2046,8],[2184,8]]},"174":{"position":[[1910,8]]},"233":{"position":[[37,8]]},"243":{"position":[[50,9],[132,7]]},"837":{"position":[[558,8]]},"1475":{"position":[[52,8]]}}}],["produced_water_reinjection_condit",{"_index":1117,"t":{"164":{"position":[[772,37]]},"172":{"position":[[991,36],[1085,36]]},"174":{"position":[[1083,37]]}}}],["produced_water_reinjection_total_system_rate_m3_per_day",{"_index":1118,"t":{"164":{"position":[[839,56]]},"174":{"position":[[1150,56]]}}}],["product",{"_index":510,"t":{"67":{"position":[[113,10]]},"97":{"position":[[569,10],[602,10],[840,10],[1085,10],[1233,10],[1266,10]]},"113":{"position":[[197,10],[599,10],[634,10]]},"115":{"position":[[195,10],[539,10],[574,10]]},"117":{"position":[[83,10],[207,10],[242,10],[3520,10],[3573,10],[3608,10],[4126,10]]},"119":{"position":[[2516,10],[2551,10],[4401,10],[4436,10]]},"129":{"position":[[311,10]]},"152":{"position":[[211,10]]},"154":{"position":[[408,10],[659,10],[902,10]]},"164":{"position":[[1115,10]]},"168":{"position":[[197,10],[463,10]]},"172":{"position":[[83,10],[144,10],[934,10],[1189,10],[1834,10]]},"174":{"position":[[1518,10]]},"198":{"position":[[162,11]]},"237":{"position":[[105,10],[424,10],[750,10]]},"261":{"position":[[209,10]]},"477":{"position":[[579,10]]},"517":{"position":[[600,10],[763,10],[816,10],[934,10]]},"521":{"position":[[55,10]]},"549":{"position":[[319,10],[388,11]]},"553":{"position":[[80,10],[144,10]]},"844":{"position":[[49,10]]},"896":{"position":[[136,10]]},"1053":{"position":[[378,10]]},"1467":{"position":[[322,8]]}}}],["production/inject",{"_index":1944,"t":{"477":{"position":[[388,21]]}}}],["production_data.csv",{"_index":671,"t":{"101":{"position":[[81,20]]},"158":{"position":[[81,20],[300,19]]},"174":{"position":[[42,19]]},"176":{"position":[[709,19]]}}}],["production_load",{"_index":2048,"t":{"553":{"position":[[112,15]]}}}],["profil",{"_index":1092,"t":{"152":{"position":[[222,8]]},"219":{"position":[[323,10]]},"237":{"position":[[449,8]]},"421":{"position":[[590,8]]},"475":{"position":[[15,8]]},"1105":{"position":[[504,8]]},"1297":{"position":[[255,7]]}}}],["prognosi",{"_index":1443,"t":{"237":{"position":[[253,9]]},"505":{"position":[[956,9],[1129,9]]}}}],["program",{"_index":19,"t":{"5":{"position":[[58,11]]}}}],["programmat",{"_index":30,"t":{"7":{"position":[[122,16]]},"9":{"position":[[140,16]]}}}],["project",{"_index":1239,"t":{"181":{"position":[[486,9]]},"1479":{"position":[[56,8],[73,7]]},"1487":{"position":[[21,8]]},"1507":{"position":[[163,7]]},"1523":{"position":[[174,7]]},"1528":{"position":[[137,7]]},"1530":{"position":[[52,7],[148,7]]}}}],["prone",{"_index":3110,"t":{"1399":{"position":[[323,6]]}}}],["propan",{"_index":1003,"t":{"137":{"position":[[1201,8]]},"145":{"position":[[483,8]]},"392":{"position":[[606,8]]},"435":{"position":[[257,8]]},"445":{"position":[[260,8]]},"447":{"position":[[201,8]]}}}],["proper",{"_index":2344,"t":{"1241":{"position":[[766,6]]}}}],["properli",{"_index":2317,"t":{"1234":{"position":[[1635,9]]}}}],["properti",{"_index":1856,"t":{"435":{"position":[[898,10]]},"468":{"position":[[3147,8]]},"1356":{"position":[[692,10]]},"1421":{"position":[[357,8]]},"1427":{"position":[[140,10]]}}}],["properties/st",{"_index":1701,"t":{"381":{"position":[[119,16]]}}}],["propos",{"_index":85,"t":{"13":{"position":[[170,8]]}}}],["proven",{"_index":276,"t":{"44":{"position":[[367,6]]}}}],["provid",{"_index":295,"t":{"50":{"position":[[131,7]]},"59":{"position":[[133,7]]},"67":{"position":[[169,8],[319,8]]},"204":{"position":[[899,7]]},"208":{"position":[[317,9],[465,9],[537,9]]},"481":{"position":[[1151,7]]},"505":{"position":[[985,8],[1158,8]]},"721":{"position":[[442,7],[594,7],[647,8]]},"935":{"position":[[478,7]]},"1077":{"position":[[467,7],[620,8]]},"1226":{"position":[[152,9]]},"1241":{"position":[[265,9]]},"1273":{"position":[[1154,7]]},"1457":{"position":[[154,7]]},"1467":{"position":[[213,8]]},"1530":{"position":[[1123,7]]}}}],["publish",{"_index":3106,"t":{"1391":{"position":[[7,7]]}}}],["pull",{"_index":3254,"t":{"1479":{"position":[[114,4]]},"1487":{"position":[[76,4],[184,4]]},"1489":{"position":[[7,4],[111,4]]},"1493":{"position":[[24,4],[72,4],[247,4]]},"1515":{"position":[[4,4]]},"1528":{"position":[[58,4],[890,4]]},"1530":{"position":[[614,4],[857,4],[1090,4],[1316,4]]}}}],["pump",{"_index":302,"t":{"52":{"position":[[117,4],[2146,4],[2189,4],[3233,4]]},"86":{"position":[[459,6]]},"97":{"position":[[778,4],[886,4],[973,4]]},"103":{"position":[[135,4],[265,4]]},"113":{"position":[[267,4],[296,5],[803,4],[827,4],[881,4],[898,4]]},"117":{"position":[[1498,4],[1680,4],[2036,4],[2060,4],[2103,6],[2753,4],[2920,4],[2963,4],[2980,4],[3011,4]]},"119":{"position":[[3137,4],[3161,4],[3204,6],[3862,4],[3879,4],[3910,4]]},"123":{"position":[[691,5],[697,5],[1099,4]]},"125":{"position":[[115,4]]},"129":{"position":[[527,4],[610,4]]},"135":{"position":[[104,4],[205,4],[249,4]]},"143":{"position":[[251,5],[468,6],[513,4],[655,5],[706,4],[776,5],[824,5],[857,4],[920,4],[989,4],[1014,4],[1046,4],[1094,4],[1204,4],[1226,4],[1403,4],[1446,6],[2632,5]]},"145":{"position":[[1397,4],[1440,6]]},"154":{"position":[[599,4],[705,4],[792,4]]},"160":{"position":[[135,4],[298,5],[323,4]]},"168":{"position":[[268,4],[297,5],[656,4],[671,4],[738,4],[753,4]]},"172":{"position":[[859,4],[1051,4],[1330,4],[1345,4],[1376,4],[1631,4],[2515,4],[2530,4]]},"174":{"position":[[1937,4],[1952,4],[1983,4],[2242,4],[2257,4]]},"179":{"position":[[0,5],[62,7],[133,5],[166,4],[285,5],[431,5]]},"181":{"position":[[17,5],[124,4],[148,6],[178,4],[216,5],[235,5],[245,4],[372,4],[798,4],[896,5],[919,6],[1024,4],[1244,4]]},"183":{"position":[[0,4],[33,5]]},"185":{"position":[[187,5],[399,4],[470,4]]},"187":{"position":[[225,5]]},"190":{"position":[[0,4],[41,5]]},"194":{"position":[[227,5]]},"237":{"position":[[577,5]]},"319":{"position":[[0,4]]},"321":{"position":[[22,5],[32,4],[149,4]]},"323":{"position":[[26,4],[130,4]]},"325":{"position":[[26,4]]},"329":{"position":[[18,5]]},"331":{"position":[[72,6],[129,4]]},"333":{"position":[[38,6]]},"449":{"position":[[32,4]]},"451":{"position":[[41,4],[112,6],[227,4],[560,4],[666,4],[728,5],[787,5],[810,6],[915,4]]},"477":{"position":[[1026,6],[1062,6]]},"481":{"position":[[548,4],[649,6]]},"483":{"position":[[313,4]]},"517":{"position":[[1189,4],[1207,6],[1229,6]]},"525":{"position":[[51,6],[527,4]]},"686":{"position":[[46,4],[436,6]]},"691":{"position":[[125,5]]},"745":{"position":[[260,5]]},"747":{"position":[[427,4]]},"753":{"position":[[175,4]]},"790":{"position":[[37,4]]},"850":{"position":[[17,4],[244,4]]},"857":{"position":[[40,4],[422,6]]},"862":{"position":[[25,5]]},"975":{"position":[[1033,4],[1090,5]]},"994":{"position":[[676,6]]},"1029":{"position":[[139,4]]},"1031":{"position":[[51,5]]},"1033":{"position":[[28,4]]},"1041":{"position":[[45,5]]},"1043":{"position":[[25,5],[73,4],[159,4]]},"1045":{"position":[[38,6],[95,4]]},"1047":{"position":[[38,6]]},"1049":{"position":[[33,4],[88,6]]},"1055":{"position":[[537,4]]},"1069":{"position":[[376,4],[396,6],[413,4]]},"1071":{"position":[[38,6],[53,5],[98,5]]},"1073":{"position":[[38,6]]},"1159":{"position":[[45,4],[122,5]]},"1162":{"position":[[25,5],[190,5]]},"1191":{"position":[[18,4]]},"1213":{"position":[[291,4]]},"1247":{"position":[[44,4]]},"1253":{"position":[[117,4]]},"1258":{"position":[[64,4]]},"1275":{"position":[[315,4]]},"1337":{"position":[[4,4]]},"1343":{"position":[[288,4]]},"1350":{"position":[[255,4],[1070,4]]},"1361":{"position":[[7,4]]},"1363":{"position":[[709,4]]},"1386":{"position":[[862,4]]},"1405":{"position":[[46,4],[92,4]]}}}],["pump'",{"_index":1234,"t":{"181":{"position":[[268,6]]}}}],["pump/compressor",{"_index":590,"t":{"86":{"position":[[546,15]]}}}],["pump1",{"_index":814,"t":{"117":{"position":[[2118,5]]},"119":{"position":[[3219,5]]},"333":{"position":[[53,5]]},"994":{"position":[[691,5]]},"1047":{"position":[[53,5]]},"1073":{"position":[[53,5]]}}}],["pump2",{"_index":815,"t":{"117":{"position":[[2150,5]]},"119":{"position":[[3251,5]]},"333":{"position":[[105,5]]},"994":{"position":[[743,5]]},"1047":{"position":[[105,5]]},"1073":{"position":[[105,5]]}}}],["pump3",{"_index":816,"t":{"117":{"position":[[2182,5]]},"119":{"position":[[3283,5]]}}}],["pump4",{"_index":817,"t":{"117":{"position":[[2214,5]]},"119":{"position":[[3315,5]]}}}],["pump_",{"_index":2228,"t":{"1049":{"position":[[275,6]]}}}],["pump_a",{"_index":2220,"t":{"1049":{"position":[[103,6]]}}}],["pump_a_lp",{"_index":1037,"t":{"143":{"position":[[1461,9]]},"145":{"position":[[1455,9]]}}}],["pump_b",{"_index":2222,"t":{"1049":{"position":[[146,6]]}}}],["pump_b_lp",{"_index":1038,"t":{"143":{"position":[[1493,9]]},"145":{"position":[[1487,9]]}}}],["pump_c",{"_index":2224,"t":{"1049":{"position":[[189,6]]}}}],["pump_chart",{"_index":689,"t":{"103":{"position":[[516,10]]},"117":{"position":[[2131,10],[2163,10],[2195,10],[2227,10],[2871,10],[3074,10]]},"119":{"position":[[222,10],[3232,10],[3264,10],[3296,10],[3328,10],[3973,10]]},"160":{"position":[[872,10]]},"172":{"position":[[1450,10]]},"174":{"position":[[402,10],[2057,10]]},"1258":{"position":[[27,10]]}}}],["pump_chart.csv",{"_index":690,"t":{"103":{"position":[[533,14]]},"119":{"position":[[239,14]]},"121":{"position":[[488,14]]},"160":{"position":[[889,14]]},"174":{"position":[[419,14]]},"176":{"position":[[474,14]]}}}],["pump_chart_single_spe",{"_index":367,"t":{"52":{"position":[[2659,23]]},"103":{"position":[[554,23]]},"119":{"position":[[260,23]]},"127":{"position":[[332,23]]},"135":{"position":[[267,24],[522,23]]},"145":{"position":[[192,23]]},"160":{"position":[[910,23]]},"174":{"position":[[440,23]]},"187":{"position":[[78,23]]},"196":{"position":[[91,23],[432,23]]},"691":{"position":[[78,23]]},"763":{"position":[[332,23]]},"854":{"position":[[22,23]]},"1167":{"position":[[49,23]]},"1187":{"position":[[44,23]]},"1234":{"position":[[397,23]]}}}],["pump_chart_variable_spe",{"_index":373,"t":{"52":{"position":[[2803,25]]},"127":{"position":[[356,25]]},"194":{"position":[[78,25]]},"196":{"position":[[250,25]]},"763":{"position":[[356,25]]},"1033":{"position":[[39,25]]},"1187":{"position":[[68,25]]},"1234":{"position":[[425,25]]}}}],["pump_d",{"_index":2226,"t":{"1049":{"position":[[232,6]]}}}],["pump_nam",{"_index":2161,"t":{"854":{"position":[[6,9]]}}}],["pump_sampl",{"_index":1105,"t":{"160":{"position":[[814,12]]},"172":{"position":[[2587,12]]},"174":{"position":[[344,12],[2314,12]]}}}],["pump_sampled.csv",{"_index":1106,"t":{"160":{"position":[[833,16]]},"174":{"position":[[363,16]]},"176":{"position":[[618,16]]}}}],["pump_system",{"_index":812,"t":{"117":{"position":[[1909,11],[1979,11],[2091,11]]},"119":{"position":[[3192,11]]},"143":{"position":[[1434,11]]},"145":{"position":[[1428,11]]},"331":{"position":[[26,11]]},"333":{"position":[[26,11]]},"747":{"position":[[432,11]]},"975":{"position":[[73,11]]},"985":{"position":[[67,12],[217,12]]},"994":{"position":[[664,11]]},"1043":{"position":[[36,11]]},"1045":{"position":[[26,11]]},"1047":{"position":[[26,11]]},"1049":{"position":[[76,11]]},"1055":{"position":[[586,11]]},"1071":{"position":[[26,11]]},"1073":{"position":[[26,11]]},"1123":{"position":[[100,12]]},"1125":{"position":[[26,11]]},"1127":{"position":[[26,11]]},"1191":{"position":[[41,11]]}}}],["pure",{"_index":1272,"t":{"198":{"position":[[281,4]]},"339":{"position":[[15,4]]}}}],["puriti",{"_index":3296,"t":{"1499":{"position":[[825,7]]}}}],["purpos",{"_index":1937,"t":{"468":{"position":[[3232,9]]}}}],["push",{"_index":3340,"t":{"1515":{"position":[[98,4]]},"1517":{"position":[[4,4]]},"1528":{"position":[[772,4],[799,4]]},"1530":{"position":[[1023,4],[1046,4]]}}}],["put",{"_index":834,"t":{"117":{"position":[[4226,3]]},"143":{"position":[[542,3]]},"181":{"position":[[1099,3]]},"270":{"position":[[84,3],[165,3]]},"443":{"position":[[252,3]]},"846":{"position":[[219,3],[278,3],[426,3],[485,3]]},"850":{"position":[[91,3]]}}}],["pvt",{"_index":1636,"t":{"357":{"position":[[1000,3]]}}}],["pycharm",{"_index":3160,"t":{"1463":{"position":[[522,8]]}}}],["pydant",{"_index":2398,"t":{"1273":{"position":[[58,8],[658,8],[743,8],[901,8]]},"1297":{"position":[[76,8]]},"1301":{"position":[[256,8],[366,8]]},"1373":{"position":[[168,8]]}}}],["pydantic.v1",{"_index":2496,"t":{"1277":{"position":[[580,11]]}}}],["pypi",{"_index":3107,"t":{"1391":{"position":[[18,4]]}}}],["python",{"_index":13,"t":{"2":{"position":[[155,6]]},"7":{"position":[[11,6],[143,7],[260,6]]},"9":{"position":[[51,6],[125,6]]},"11":{"position":[[206,6]]},"71":{"position":[[63,6],[127,6],[258,6]]},"95":{"position":[[113,6]]},"1273":{"position":[[107,6]]},"1277":{"position":[[87,6]]},"1343":{"position":[[1085,6]]},"1499":{"position":[[446,7],[488,6],[524,7]]}}}],["q",{"_index":1417,"t":{"233":{"position":[[88,1]]}}}],["q=25000⋅p1⋅(p2−p1)q",{"_index":1420,"t":{"233":{"position":[[144,19]]}}}],["qa",{"_index":459,"t":{"54":{"position":[[2613,2]]}}}],["qualiti",{"_index":581,"t":{"86":{"position":[[13,7]]},"237":{"position":[[205,7],[946,7]]}}}],["quantiti",{"_index":1365,"t":{"210":{"position":[[0,8]]},"327":{"position":[[0,8]]},"335":{"position":[[0,8]]},"925":{"position":[[177,8]]}}}],["quarter",{"_index":1943,"t":{"477":{"position":[[326,8]]}}}],["quarterli",{"_index":233,"t":{"35":{"position":[[1138,9]]}}}],["queri",{"_index":3127,"t":{"1438":{"position":[[97,5]]}}}],["question",{"_index":3311,"t":{"1499":{"position":[[1394,10]]}}}],["queue",{"_index":2994,"t":{"1367":{"position":[[1157,5]]}}}],["quick",{"_index":3182,"t":{"1467":{"position":[[590,5]]},"1473":{"position":[[10,5]]},"1528":{"position":[[114,5]]},"1530":{"position":[[86,5]]}}}],["quickli",{"_index":1391,"t":{"224":{"position":[[33,7]]}}}],["quot",{"_index":3208,"t":{"1475":{"position":[[448,6]]}}}],["quota",{"_index":545,"t":{"78":{"position":[[91,5]]},"1454":{"position":[[74,5]]}}}],["r",{"_index":1918,"t":{"468":{"position":[[1664,1]]}}}],["race",{"_index":3244,"t":{"1477":{"position":[[571,6],[755,6]]}}}],["rais",{"_index":2187,"t":{"935":{"position":[[284,7]]},"1224":{"position":[[1193,5],[1691,5]]},"1382":{"position":[[103,5]]}}}],["ran",{"_index":424,"t":{"54":{"position":[[683,3]]}}}],["rang",{"_index":221,"t":{"35":{"position":[[802,5]]},"93":{"position":[[458,5]]},"306":{"position":[[568,5]]}}}],["rate",{"_index":207,"t":{"35":{"position":[[496,4],[545,5],[655,5],[742,4],[855,4],[1228,4],[1245,5]]},"52":{"position":[[2690,5],[2836,5],[2995,5],[3152,5]]},"63":{"position":[[48,5],[62,5],[92,4],[261,5],[426,5],[479,4],[534,6]]},"91":{"position":[[35,4],[205,5],[432,4],[610,5],[633,5],[655,4],[696,4],[882,5]]},"97":{"position":[[746,4],[851,4],[876,5],[1070,4],[1096,4],[1391,4]]},"103":{"position":[[585,5]]},"107":{"position":[[481,5],[645,5]]},"109":{"position":[[1175,4],[1203,4]]},"117":{"position":[[175,4],[527,4],[606,4],[755,5],[1592,4],[1814,4],[2827,5],[3085,5],[4137,4],[4463,5]]},"119":{"position":[[291,5],[772,5],[936,5],[3984,5],[4767,5]]},"121":{"position":[[21,5],[345,5],[503,5]]},"129":{"position":[[447,4],[597,4]]},"135":{"position":[[561,5]]},"137":{"position":[[370,4]]},"143":{"position":[[605,5],[758,5],[905,5],[959,4],[1117,4]]},"145":{"position":[[231,5]]},"154":{"position":[[549,4],[567,4],[670,4],[695,5],[887,4],[913,4],[976,4],[1025,4],[1132,4]]},"160":{"position":[[949,5]]},"164":{"position":[[407,4],[1126,5],[1162,6]]},"172":{"position":[[365,4],[429,4],[659,5],[945,4],[1461,5],[1703,5],[1714,4],[1858,4],[1922,4],[2061,4],[2199,4],[2619,4],[3105,4],[3492,5]]},"174":{"position":[[479,5],[718,4],[1729,5],[2068,5],[2346,4],[2668,5]]},"181":{"position":[[64,6],[298,5],[348,4],[410,4],[478,4],[991,4]]},"183":{"position":[[63,4]]},"185":{"position":[[10,4]]},"187":{"position":[[109,5],[115,5]]},"190":{"position":[[78,4]]},"192":{"position":[[0,5]]},"194":{"position":[[111,5],[117,5]]},"196":{"position":[[122,5],[283,5],[463,5]]},"198":{"position":[[147,5]]},"202":{"position":[[78,5],[504,4],[570,4],[638,4],[755,5],[1752,4]]},"204":{"position":[[104,5],[198,7],[372,6],[1343,5],[1372,6]]},"208":{"position":[[78,4]]},"210":{"position":[[24,4]]},"213":{"position":[[0,4]]},"215":{"position":[[0,4]]},"226":{"position":[[167,5],[224,4]]},"231":{"position":[[4,4],[68,4],[118,4]]},"233":{"position":[[4,4],[46,4],[298,4],[327,5]]},"237":{"position":[[761,5]]},"265":{"position":[[277,4],[875,4]]},"276":{"position":[[282,5],[404,4]]},"278":{"position":[[206,5],[212,5]]},"280":{"position":[[82,5]]},"282":{"position":[[423,4],[581,4],[766,4]]},"286":{"position":[[279,4]]},"288":{"position":[[356,6],[475,6]]},"299":{"position":[[105,4]]},"321":{"position":[[37,5]]},"323":{"position":[[141,5],[147,5]]},"325":{"position":[[77,5]]},"327":{"position":[[23,4]]},"329":{"position":[[104,4]]},"331":{"position":[[210,4]]},"335":{"position":[[23,4]]},"337":{"position":[[758,5],[852,7]]},"343":{"position":[[107,4]]},"345":{"position":[[385,5],[391,5]]},"353":{"position":[[102,5],[108,5],[348,5],[363,4]]},"355":{"position":[[112,5],[181,5]]},"357":{"position":[[245,4]]},"359":{"position":[[104,5],[110,5],[351,5],[366,4],[580,5],[595,4]]},"361":{"position":[[116,5],[186,5],[303,5],[444,5]]},"363":{"position":[[742,5],[838,5],[1148,4],[1325,4],[1354,4],[1459,4],[1564,5]]},"365":{"position":[[209,5],[260,5],[266,5]]},"367":{"position":[[189,5]]},"371":{"position":[[146,5],[305,4],[884,4],[1187,4],[1374,5]]},"377":{"position":[[262,4],[482,4]]},"381":{"position":[[1078,4],[1248,4],[2588,4]]},"385":{"position":[[421,4]]},"392":{"position":[[116,5],[186,5],[304,5]]},"394":{"position":[[189,5]]},"396":{"position":[[214,5],[284,5],[402,5]]},"401":{"position":[[942,6],[1154,4],[1204,6],[1329,4],[1486,4],[1705,4]]},"403":{"position":[[682,4]]},"405":{"position":[[173,4],[270,4],[414,5],[952,4]]},"407":{"position":[[855,4],[1019,4],[1217,4],[1316,4],[1403,4],[1649,4],[1742,4],[1798,4],[2235,4]]},"413":{"position":[[908,4],[969,4],[1027,4]]},"415":{"position":[[356,5],[812,6]]},"431":{"position":[[346,5],[508,6]]},"433":{"position":[[1197,4]]},"468":{"position":[[277,5],[836,5]]},"475":{"position":[[48,4]]},"477":{"position":[[590,4],[838,4],[1155,4]]},"481":{"position":[[700,4]]},"495":{"position":[[242,5]]},"505":{"position":[[522,5]]},"511":{"position":[[985,5]]},"581":{"position":[[197,4]]},"589":{"position":[[50,5],[79,5],[112,5],[208,4],[473,5],[548,6],[672,4],[868,4],[958,4],[1091,4],[1175,5]]},"593":{"position":[[23,4],[189,4],[256,4],[316,4],[517,4]]},"597":{"position":[[165,4]]},"604":{"position":[[374,5]]},"606":{"position":[[154,5],[169,4]]},"608":{"position":[[130,5]]},"612":{"position":[[25,5],[84,4],[273,4],[296,4],[414,5],[514,4]]},"634":{"position":[[526,4]]},"679":{"position":[[442,5]]},"681":{"position":[[157,5],[172,4],[386,5],[401,4]]},"683":{"position":[[135,5],[252,5]]},"686":{"position":[[419,4]]},"693":{"position":[[116,5],[186,5]]},"695":{"position":[[122,4]]},"697":{"position":[[227,4]]},"699":{"position":[[34,5],[57,5],[79,4],[120,4]]},"701":{"position":[[22,5]]},"705":{"position":[[28,4]]},"707":{"position":[[25,4]]},"713":{"position":[[240,4]]},"715":{"position":[[42,4]]},"737":{"position":[[179,5]]},"745":{"position":[[266,4]]},"749":{"position":[[381,4],[515,4]]},"827":{"position":[[49,4],[111,4]]},"829":{"position":[[14,5],[86,4]]},"854":{"position":[[61,5]]},"857":{"position":[[405,4]]},"865":{"position":[[116,5],[186,5]]},"908":{"position":[[352,5],[651,5],[796,5],[859,4],[911,4],[1067,4],[1119,4],[1270,4]]},"935":{"position":[[312,5]]},"951":{"position":[[93,4]]},"975":{"position":[[111,4],[224,6],[250,4],[1157,6]]},"977":{"position":[[55,4],[100,5]]},"979":{"position":[[55,4],[179,5]]},"987":{"position":[[23,5],[75,4],[266,4],[289,4],[407,5],[507,4]]},"989":{"position":[[59,4],[120,4]]},"991":{"position":[[55,4]]},"994":{"position":[[356,6],[475,6]]},"1021":{"position":[[19,4]]},"1023":{"position":[[19,5],[39,5]]},"1027":{"position":[[45,4]]},"1029":{"position":[[51,4],[203,4]]},"1031":{"position":[[0,5],[6,5],[88,5]]},"1033":{"position":[[0,5],[76,5]]},"1037":{"position":[[94,5],[117,5],[139,4],[180,4]]},"1039":{"position":[[97,5]]},"1053":{"position":[[76,4],[144,4],[183,6],[244,6],[300,6],[431,5],[514,4],[598,5],[668,4],[705,4],[797,4],[813,4],[919,5],[1169,5],[1350,5],[1414,6]]},"1055":{"position":[[82,6],[260,4],[279,4],[354,4],[376,5],[474,4]]},"1057":{"position":[[9,5],[67,5],[108,6],[136,5],[216,4]]},"1066":{"position":[[58,5],[106,4],[200,5],[271,4],[310,4],[402,5]]},"1069":{"position":[[55,4],[187,5],[278,4],[447,4],[544,4]]},"1071":{"position":[[162,5]]},"1097":{"position":[[705,4],[766,4],[824,4]]},"1109":{"position":[[103,5],[241,5]]},"1123":{"position":[[32,4]]},"1125":{"position":[[88,4],[212,4]]},"1162":{"position":[[54,5],[60,5]]},"1164":{"position":[[58,5],[64,5]]},"1167":{"position":[[84,5]]},"1169":{"position":[[116,5]]},"1197":{"position":[[366,5]]},"1224":{"position":[[1182,5],[1748,4]]},"1231":{"position":[[250,4],[678,5]]},"1234":{"position":[[315,4]]},"1236":{"position":[[630,6]]},"1241":{"position":[[143,4],[196,4],[308,4]]},"1295":{"position":[[12,4]]},"1305":{"position":[[26,4]]},"1316":{"position":[[16,4]]},"1326":{"position":[[40,4]]},"1332":{"position":[[431,4]]},"1339":{"position":[[100,4]]},"1343":{"position":[[275,4]]},"1350":{"position":[[247,4],[308,4],[622,4],[776,4],[1062,4]]},"1354":{"position":[[87,4]]},"1363":{"position":[[871,4],[943,4]]},"1382":{"position":[[194,4]]},"1386":{"position":[[1108,4]]},"1407":{"position":[[164,5]]},"1415":{"position":[[269,5],[318,5]]},"1421":{"position":[[32,4]]},"1425":{"position":[[299,4],[332,4]]},"1427":{"position":[[7,4],[68,4],[179,4],[326,4]]},"1433":{"position":[[6,4]]},"1436":{"position":[[453,4]]},"1438":{"position":[[237,4],[520,4],[665,4]]},"1443":{"position":[[16,4],[70,4]]},"1450":{"position":[[60,4],[243,4]]},"1452":{"position":[[80,4]]},"1457":{"position":[[170,4],[245,4]]}}}],["rate,fuel",{"_index":1156,"t":{"176":{"position":[[279,9]]}}}],["rate,head,efficiency,spe",{"_index":1068,"t":{"148":{"position":[[308,26]]}}}],["rate,pow",{"_index":1140,"t":{"176":{"position":[[23,10],[635,10]]}}}],["rate/head",{"_index":1041,"t":{"143":{"position":[[1984,9]]},"371":{"position":[[816,9]]},"381":{"position":[[551,11]]}}}],["rate.csv",{"_index":1363,"t":{"206":{"position":[[118,18]]}}}],["satisfi",{"_index":1954,"t":{"479":{"position":[[458,7]]}}}],["save",{"_index":3113,"t":{"1405":{"position":[[3,4]]},"1523":{"position":[[151,4]]}}}],["scale",{"_index":1674,"t":{"363":{"position":[[1239,7]]}}}],["scan",{"_index":104,"t":{"17":{"position":[[133,8]]},"23":{"position":[[239,8]]}}}],["scenario",{"_index":1027,"t":{"143":{"position":[[237,9]]},"403":{"position":[[518,9]]},"1505":{"position":[[238,9]]}}}],["schema",{"_index":2408,"t":{"1273":{"position":[[261,6],[311,6],[1239,6]]},"1350":{"position":[[560,6]]},"1356":{"position":[[86,6],[134,6],[181,6],[228,6],[272,6],[319,6],[365,6],[410,6]]},"1363":{"position":[[231,6],[317,6]]}}}],["scienc",{"_index":2177,"t":{"908":{"position":[[997,7],[1201,7]]}}}],["scientif",{"_index":2934,"t":{"1363":{"position":[[587,10]]}}}],["scm.com",{"_index":3317,"t":{"1503":{"position":[[10,7]]}}}],["scope",{"_index":3236,"t":{"1477":{"position":[[117,7]]}}}],["scroll",{"_index":433,"t":{"54":{"position":[[1179,9]]}}}],["sd",{"_index":2233,"t":{"1053":{"position":[[178,4]]}}}],["sea",{"_index":662,"t":{"97":{"position":[[953,3]]},"113":{"position":[[276,3]]},"129":{"position":[[507,3]]},"154":{"position":[[772,3]]},"168":{"position":[[277,3],[718,3]]},"172":{"position":[[1611,3],[2111,4],[2292,4],[2495,3]]},"174":{"position":[[2222,3]]}}}],["sea_wat",{"_index":2444,"t":{"1275":{"position":[[123,9]]}}}],["sea_water_injection_rate_m3_per_day",{"_index":1112,"t":{"164":{"position":[[442,36]]},"172":{"position":[[2402,35]]},"174":{"position":[[753,36]]}}}],["seawat",{"_index":826,"t":{"117":{"position":[[2808,8]]},"172":{"position":[[1684,8],[1903,8]]}}}],["seawater_inj",{"_index":1135,"t":{"172":{"position":[[1927,15],[1998,12],[2126,12],[2302,12]]}}}],["secant",{"_index":2304,"t":{"1231":{"position":[[441,6],[558,6]]}}}],["second",{"_index":641,"t":{"97":{"position":[[160,6]]},"117":{"position":[[660,6]]},"143":{"position":[[913,6]]},"381":{"position":[[2024,6]]},"387":{"position":[[555,6]]},"407":{"position":[[2454,6],[2575,6]]},"415":{"position":[[684,6],[859,6],[1454,6]]},"433":{"position":[[785,6]]},"612":{"position":[[926,6],[949,6]]},"721":{"position":[[305,7]]},"987":{"position":[[919,6],[942,6]]},"989":{"position":[[150,6],[171,6]]},"991":{"position":[[14,6]]},"1077":{"position":[[348,7]]}}}],["seconds\\_per\\_day}{lower\\_heating\\_valu",{"_index":1887,"t":{"455":{"position":[[432,40]]}}}],["seconds_per_hour",{"_index":3280,"t":{"1499":{"position":[[140,16]]}}}],["section",{"_index":616,"t":{"93":{"position":[[5,7]]},"107":{"position":[[86,8]]},"135":{"position":[[56,7],[192,8]]},"137":{"position":[[10,7]]},"141":{"position":[[21,8]]},"143":{"position":[[2599,8]]},"152":{"position":[[5,7],[88,8],[795,7]]},"241":{"position":[[97,8],[277,8]]},"259":{"position":[[114,7],[258,9],[302,7],[521,8]]},"265":{"position":[[51,7]]},"319":{"position":[[47,8]]},"321":{"position":[[191,7]]},"337":{"position":[[1023,8],[1062,7],[2027,8]]},"347":{"position":[[5,7]]},"403":{"position":[[82,8],[504,8]]},"415":{"position":[[625,7],[1037,7],[1214,7],[1461,8]]},"449":{"position":[[5,7]]},"453":{"position":[[5,7]]},"487":{"position":[[35,7]]},"495":{"position":[[36,8]]},"686":{"position":[[203,8],[300,8],[483,8]]},"797":{"position":[[110,8]]},"857":{"position":[[195,8],[280,8],[469,8]]},"918":{"position":[[140,9]]},"922":{"position":[[30,7]]},"1152":{"position":[[103,8]]},"1467":{"position":[[632,8]]},"1505":{"position":[[293,8]]}}}],["see",{"_index":52,"t":{"9":{"position":[[258,3]]},"11":{"position":[[110,3],[288,3]]},"52":{"position":[[1565,3],[2090,3],[3208,3],[5276,3]]},"54":{"position":[[1585,3],[1811,3],[2476,3],[2770,3]]},"61":{"position":[[924,3],[1068,3]]},"67":{"position":[[590,3]]},"71":{"position":[[331,3]]},"101":{"position":[[221,3]]},"103":{"position":[[148,3]]},"107":{"position":[[95,3],[1498,3]]},"111":{"position":[[557,3]]},"117":{"position":[[922,3],[1975,3]]},"137":{"position":[[381,3]]},"143":{"position":[[1222,3]]},"158":{"position":[[221,3]]},"160":{"position":[[148,3],[470,3]]},"226":{"position":[[770,3]]},"263":{"position":[[375,3]]},"265":{"position":[[589,3]]},"272":{"position":[[98,3]]},"337":{"position":[[2001,3]]},"345":{"position":[[176,3]]},"357":{"position":[[637,3]]},"383":{"position":[[486,3]]},"413":{"position":[[1318,3]]},"415":{"position":[[140,3],[1126,4]]},"417":{"position":[[520,3]]},"425":{"position":[[478,3]]},"468":{"position":[[599,3],[3059,3],[3456,3],[3830,3],[4229,3]]},"517":{"position":[[1031,3]]},"553":{"position":[[254,3]]},"565":{"position":[[0,3]]},"581":{"position":[[258,3]]},"597":{"position":[[473,3]]},"634":{"position":[[883,3]]},"653":{"position":[[280,3]]},"743":{"position":[[0,3]]},"763":{"position":[[382,3]]},"771":{"position":[[0,3]]},"821":{"position":[[353,3]]},"833":{"position":[[361,3]]},"837":{"position":[[586,3]]},"886":{"position":[[79,3]]},"896":{"position":[[398,3]]},"904":{"position":[[0,3]]},"914":{"position":[[0,3]]},"920":{"position":[[1205,3]]},"967":{"position":[[75,3]]},"1055":{"position":[[382,3]]},"1111":{"position":[[281,3]]},"1177":{"position":[[279,3]]},"1213":{"position":[[85,3]]},"1224":{"position":[[196,3],[518,3],[967,3],[1424,3],[1546,3],[2120,3]]},"1229":{"position":[[2171,3]]},"1258":{"position":[[60,3]]},"1403":{"position":[[77,3]]},"1405":{"position":[[79,6]]},"1413":{"position":[[77,3]]},"1467":{"position":[[615,3]]},"1481":{"position":[[0,3]]},"1491":{"position":[[206,3]]},"1495":{"position":[[64,3]]},"1501":{"position":[[317,3]]},"1503":{"position":[[164,3]]}}}],["seemingli",{"_index":77,"t":{"13":{"position":[[69,9]]}}}],["seen",{"_index":553,"t":{"82":{"position":[[151,4]]},"86":{"position":[[190,4],[596,4],[1160,5]]},"125":{"position":[[40,4]]},"401":{"position":[[682,4]]},"407":{"position":[[758,4],[800,4]]},"1053":{"position":[[951,4]]},"1173":{"position":[[226,4]]}}}],["select",{"_index":604,"t":{"86":{"position":[[1326,9]]},"137":{"position":[[137,8]]}}}],["self",{"_index":3276,"t":{"1497":{"position":[[154,4],[181,4]]},"1499":{"position":[[322,4]]}}}],["selftest",{"_index":1996,"t":{"503":{"position":[[680,9]]},"507":{"position":[[63,8]]}}}],["send",{"_index":791,"t":{"117":{"position":[[597,4]]},"612":{"position":[[581,9],[1010,4]]},"987":{"position":[[574,9],[1003,4]]},"991":{"position":[[40,4]]},"1525":{"position":[[12,4]]},"1530":{"position":[[848,4]]}}}],["sens",{"_index":1962,"t":{"481":{"position":[[1195,6]]}}}],["sensit",{"_index":410,"t":{"52":{"position":[[5215,9]]},"517":{"position":[[367,10]]}}}],["separ",{"_index":309,"t":{"52":{"position":[[354,9],[5039,9]]},"63":{"position":[[600,8]]},"67":{"position":[[402,10]]},"101":{"position":[[65,9]]},"123":{"position":[[353,9]]},"127":{"position":[[156,9]]},"152":{"position":[[79,8]]},"158":{"position":[[65,9]]},"243":{"position":[[288,8]]},"403":{"position":[[140,8]]},"477":{"position":[[688,9],[729,9]]},"505":{"position":[[1042,9],[1215,9]]},"686":{"position":[[169,8]]},"761":{"position":[[278,9]]},"763":{"position":[[156,9]]},"857":{"position":[[161,8]]},"884":{"position":[[24,8]]},"918":{"position":[[131,8]]},"1224":{"position":[[411,10]]},"1253":{"position":[[354,9]]},"1334":{"position":[[92,10]]},"1345":{"position":[[491,8]]},"1363":{"position":[[670,10]]},"1491":{"position":[[132,8]]}}}],["seri",{"_index":465,"t":{"61":{"position":[[66,6],[206,6],[428,6],[482,6],[1106,6],[1337,6]]},"63":{"position":[[77,7]]},"65":{"position":[[22,6]]},"99":{"position":[[54,6]]},"101":{"position":[[119,6]]},"131":{"position":[[58,6]]},"156":{"position":[[54,6]]},"158":{"position":[[119,6]]},"219":{"position":[[707,6]]},"263":{"position":[[288,6],[384,6]]},"413":{"position":[[1248,6]]},"421":{"position":[[328,6]]},"423":{"position":[[19,6]]},"425":{"position":[[71,6]]},"475":{"position":[[128,6]]},"499":{"position":[[469,6]]},"505":{"position":[[133,6]]},"513":{"position":[[163,6]]},"549":{"position":[[131,6]]},"697":{"position":[[165,6]]},"707":{"position":[[58,7]]},"713":{"position":[[170,6]]},"747":{"position":[[166,6]]},"817":{"position":[[10,6]]},"837":{"position":[[193,6],[265,6]]},"877":{"position":[[237,6]]},"1105":{"position":[[242,6]]},"1107":{"position":[[51,6],[68,6]]},"1111":{"position":[[290,6]]},"1115":{"position":[[169,6]]},"1275":{"position":[[455,6]]},"1303":{"position":[[61,6]]},"1332":{"position":[[188,6],[372,6]]},"1354":{"position":[[145,6]]},"1356":{"position":[[403,6]]}}}],["serial",{"_index":2422,"t":{"1273":{"position":[[822,13]]}}}],["servic",{"_index":3315,"t":{"1501":{"position":[[293,7]]}}}],["set",{"_index":66,"t":{"11":{"position":[[241,7]]},"33":{"position":[[57,7],[101,7],[160,8],[273,7]]},"35":{"position":[[165,3]]},"44":{"position":[[113,3]]},"52":{"position":[[91,7],[558,5],[1863,3],[1871,7],[5093,3]]},"54":{"position":[[1309,3],[1728,3]]},"61":{"position":[[919,4]]},"63":{"position":[[110,3],[186,3],[310,3],[436,3]]},"67":{"position":[[345,4],[727,3]]},"97":{"position":[[487,3],[503,3],[1148,3],[1164,3]]},"113":{"position":[[23,4],[38,3],[184,3],[515,3]]},"115":{"position":[[23,4],[38,3],[183,3],[455,3]]},"117":{"position":[[865,7],[1617,3]]},"119":{"position":[[2432,3],[4317,3]]},"123":{"position":[[651,3]]},"129":{"position":[[48,4],[229,3],[245,3]]},"135":{"position":[[129,3],[306,3]]},"143":{"position":[[23,3],[60,3],[627,9]]},"152":{"position":[[286,5],[731,3]]},"154":{"position":[[326,3],[342,3]]},"168":{"position":[[23,4],[38,3],[184,3],[327,3],[380,3]]},"172":{"position":[[971,3]]},"174":{"position":[[1435,3]]},"183":{"position":[[185,3]]},"185":{"position":[[49,3],[101,3]]},"190":{"position":[[200,3]]},"204":{"position":[[24,3],[97,3]]},"219":{"position":[[582,3],[933,4],[1421,3],[1761,6],[1949,4]]},"243":{"position":[[345,3]]},"245":{"position":[[128,4]]},"261":{"position":[[158,8]]},"263":{"position":[[21,3]]},"267":{"position":[[74,3],[515,3]]},"286":{"position":[[334,8]]},"294":{"position":[[197,4],[205,5],[294,3],[605,4],[689,3]]},"299":{"position":[[28,3],[250,4]]},"331":{"position":[[320,8],[479,8],[509,7],[600,3],[648,8]]},"337":{"position":[[425,9],[751,3]]},"345":{"position":[[281,3]]},"349":{"position":[[32,3],[105,3]]},"363":{"position":[[660,4],[688,3]]},"371":{"position":[[245,3],[536,7],[637,4],[666,3],[1427,3]]},"377":{"position":[[697,7]]},"381":{"position":[[464,3],[2616,3]]},"385":{"position":[[449,3]]},"389":{"position":[[141,4]]},"415":{"position":[[1427,3],[1630,3]]},"421":{"position":[[633,3]]},"425":{"position":[[441,3]]},"427":{"position":[[53,3]]},"433":{"position":[[1225,3]]},"443":{"position":[[32,7],[77,7],[174,3]]},"453":{"position":[[64,7]]},"455":{"position":[[898,3]]},"479":{"position":[[10,4]]},"481":{"position":[[164,3],[952,4]]},"503":{"position":[[242,3]]},"505":{"position":[[454,3]]},"511":{"position":[[917,3]]},"517":{"position":[[217,3]]},"571":{"position":[[54,4]]},"581":{"position":[[248,9]]},"589":{"position":[[286,7],[432,3],[624,3]]},"597":{"position":[[235,7]]},"634":{"position":[[703,7]]},"669":{"position":[[117,4],[171,3]]},"686":{"position":[[258,3],[339,3]]},"689":{"position":[[171,4]]},"697":{"position":[[107,3],[153,3]]},"713":{"position":[[112,3],[158,3]]},"721":{"position":[[339,3],[520,3]]},"737":{"position":[[209,3]]},"741":{"position":[[5,3]]},"747":{"position":[[108,3],[154,3]]},"805":{"position":[[117,3],[182,3]]},"833":{"position":[[45,4],[53,5],[142,3],[375,4]]},"846":{"position":[[208,4],[415,4]]},"850":{"position":[[459,3]]},"857":{"position":[[244,3],[319,3]]},"896":{"position":[[85,8]]},"912":{"position":[[50,3],[123,3]]},"922":{"position":[[57,3],[176,3]]},"933":{"position":[[27,4],[115,7]]},"935":{"position":[[20,7]]},"957":{"position":[[209,3]]},"959":{"position":[[20,7]]},"975":{"position":[[31,8],[992,8]]},"977":{"position":[[153,8]]},"979":{"position":[[232,8]]},"981":{"position":[[174,8],[207,3]]},"983":{"position":[[180,8],[215,3]]},"985":{"position":[[299,3],[369,9],[509,9]]},"1013":{"position":[[217,3],[285,4]]},"1069":{"position":[[249,8]]},"1077":{"position":[[382,3],[546,3]]},"1105":{"position":[[547,3]]},"1109":{"position":[[271,3]]},"1224":{"position":[[482,4],[1637,7]]},"1229":{"position":[[319,5],[413,4],[442,3],[464,4],[1297,3]]},"1231":{"position":[[1095,4],[1278,7]]},"1234":{"position":[[285,3],[761,3]]},"1236":{"position":[[800,3],[853,3]]},"1253":{"position":[[91,7]]},"1273":{"position":[[343,3]]},"1345":{"position":[[412,8]]},"1348":{"position":[[220,8]]},"1350":{"position":[[84,3]]},"1356":{"position":[[315,3],[729,8]]},"1373":{"position":[[272,3],[367,8]]},"1386":{"position":[[1085,3]]},"1415":{"position":[[407,8]]},"1463":{"position":[[371,3]]},"1469":{"position":[[191,3]]},"1501":{"position":[[179,3]]},"1503":{"position":[[182,3]]},"1515":{"position":[[105,3]]},"1528":{"position":[[806,3]]}}}],["set_regular",{"_index":2697,"t":{"1339":{"position":[[150,14]]}}}],["setting.yml",{"_index":149,"t":{"25":{"position":[[62,15],[179,15]]}}}],["seven",{"_index":1845,"t":{"435":{"position":[[355,5]]}}}],["sever",{"_index":1226,"t":{"179":{"position":[[125,7]]},"217":{"position":[[96,7]]},"219":{"position":[[1374,7]]},"245":{"position":[[161,7]]},"294":{"position":[[179,7]]},"381":{"position":[[524,7]]},"421":{"position":[[274,7]]},"833":{"position":[[27,7]]},"884":{"position":[[49,7]]},"1105":{"position":[[188,7]]},"1236":{"position":[[7,7]]}}}],["shaft",{"_index":1355,"t":{"204":{"position":[[954,5]]},"208":{"position":[[275,5],[402,5]]},"337":{"position":[[132,5],[247,6],[1903,5]]},"353":{"position":[[309,6]]},"359":{"position":[[312,6],[541,6]]},"383":{"position":[[363,5]]},"401":{"position":[[94,6]]},"405":{"position":[[49,5]]},"431":{"position":[[110,6],[160,5],[242,5],[283,5]]},"461":{"position":[[127,5]]},"468":{"position":[[2735,6],[3529,5]]},"606":{"position":[[115,6]]},"681":{"position":[[118,6],[347,6]]}}}],["share",{"_index":1586,"t":{"329":{"position":[[29,5]]}}}],["shell",{"_index":1993,"t":{"503":{"position":[[454,6],[546,6]]}}}],["shift",{"_index":984,"t":{"137":{"position":[[334,7]]},"143":{"position":[[1891,7],[2041,7]]},"363":{"position":[[1084,5]]},"401":{"position":[[774,7]]},"483":{"position":[[540,8]]}}}],["shit",{"_index":3322,"t":{"1505":{"position":[[166,5]]}}}],["shore",{"_index":341,"t":{"52":{"position":[[1710,6],[1797,5],[1894,5],[2084,5],[2105,5]]},"294":{"position":[[811,6]]},"304":{"position":[[16,5],[146,5]]},"306":{"position":[[246,5],[433,5],[536,5],[707,5]]},"517":{"position":[[1341,5]]},"1224":{"position":[[377,5],[684,5]]},"1229":{"position":[[682,5]]}}}],["short",{"_index":1982,"t":{"497":{"position":[[210,5]]},"505":{"position":[[1118,5]]},"1491":{"position":[[391,5]]},"1505":{"position":[[626,5]]}}}],["show",{"_index":230,"t":{"35":{"position":[[1022,5]]},"54":{"position":[[566,4]]},"65":{"position":[[91,4]]},"73":{"position":[[4,4],[191,4],[235,4],[303,4],[465,4],[792,4]]},"219":{"position":[[1676,6]]},"381":{"position":[[518,5]]},"468":{"position":[[4005,5]]},"503":{"position":[[124,4],[334,4],[463,4],[512,4],[603,4],[731,5],[748,4]]},"505":{"position":[[1688,4]]},"507":{"position":[[99,4]]},"509":{"position":[[11,4],[68,4],[118,4],[165,4],[185,4]]},"511":{"position":[[0,4],[83,4],[159,4],[221,4],[1062,4]]},"513":{"position":[[0,4],[27,4],[83,4],[332,4]]},"612":{"position":[[795,4]]},"846":{"position":[[8,7]]},"886":{"position":[[53,4]]},"908":{"position":[[1344,5]]},"987":{"position":[[788,4]]},"1229":{"position":[[16,4],[136,4],[742,4],[981,4],[1105,4],[1366,4],[1694,4],[1733,4],[1755,4],[1789,4],[1838,4],[1910,4],[1958,4],[2327,4]]},"1243":{"position":[[282,7]]},"1268":{"position":[[91,4]]},"1343":{"position":[[966,4]]},"1354":{"position":[[476,7]]},"1509":{"position":[[107,4]]}}}],["shown",{"_index":460,"t":{"54":{"position":[[2653,5]]},"73":{"position":[[59,5]]},"86":{"position":[[268,5],[352,5]]},"109":{"position":[[915,5],[983,5]]},"245":{"position":[[279,5]]},"339":{"position":[[284,6]]},"553":{"position":[[20,5]]},"1229":{"position":[[1897,5]]}}}],["side",{"_index":1806,"t":{"415":{"position":[[428,4]]},"468":{"position":[[153,5]]},"920":{"position":[[1164,6]]},"1467":{"position":[[127,4]]}}}],["sign",{"_index":578,"t":{"84":{"position":[[649,4],[796,5]]}}}],["signifi",{"_index":2086,"t":{"612":{"position":[[1041,9]]},"987":{"position":[[1034,9]]}}}],["signific",{"_index":555,"t":{"84":{"position":[[57,11],[189,11],[859,12],[933,11]]},"435":{"position":[[457,11]]}}}],["significantli",{"_index":1712,"t":{"381":{"position":[[2689,14]]},"385":{"position":[[522,14]]},"433":{"position":[[1298,14]]}}}],["silenc",{"_index":3299,"t":{"1499":{"position":[[886,9]]}}}],["silent",{"_index":3297,"t":{"1499":{"position":[[858,9]]}}}],["sim",{"_index":676,"t":{"101":{"position":[[290,3]]},"109":{"position":[[827,3]]},"119":{"position":[[32,3]]},"158":{"position":[[290,3]]},"164":{"position":[[1021,3]]},"174":{"position":[[32,3]]},"272":{"position":[[13,3]]}}}],["sim1",{"_index":634,"t":{"93":{"position":[[548,4]]},"133":{"position":[[96,4]]},"145":{"position":[[21,4]]},"272":{"position":[[229,4]]},"429":{"position":[[21,4]]},"1111":{"position":[[21,4]]}}}],["sim1:col1",{"_index":1967,"t":{"491":{"position":[[40,9],[124,9],[159,9]]},"495":{"position":[[372,9]]},"1224":{"position":[[1975,9]]}}}],["sim1:gas_prod",{"_index":2214,"t":{"1025":{"position":[[19,13]]},"1033":{"position":[[6,13]]}}}],["sim1:gas_sal",{"_index":2215,"t":{"1025":{"position":[[35,14]]}}}],["sim1;discharge_pressur",{"_index":1539,"t":{"280":{"position":[[162,23]]}}}],["sim1;gas_inj",{"_index":1291,"t":{"202":{"position":[[521,12]]},"231":{"position":[[240,12]]},"288":{"position":[[386,12],[530,12]]},"994":{"position":[[386,12],[530,12]]}}}],["sim1;gas_lift",{"_index":1552,"t":{"288":{"position":[[318,13]]},"614":{"position":[[318,13]]},"994":{"position":[[318,13]]},"1127":{"position":[[153,13]]}}}],["sim1;gas_prod",{"_index":1024,"t":{"141":{"position":[[386,13]]},"143":{"position":[[2432,13]]},"145":{"position":[[1224,13],[1935,13]]},"280":{"position":[[88,13]]},"288":{"position":[[300,13]]},"343":{"position":[[124,13]]},"614":{"position":[[300,13]]},"749":{"position":[[398,13],[532,13]]},"994":{"position":[[300,13]]},"1127":{"position":[[135,13]]}}}],["sim1;gas_prod_b",{"_index":2245,"t":{"1066":{"position":[[315,17],[428,15]]}}}],["sim1;gas_sal",{"_index":1344,"t":{"202":{"position":[[1769,14]]},"288":{"position":[[365,14],[484,14],[507,14]]},"844":{"position":[[136,14]]},"994":{"position":[[365,14],[484,14],[507,14]]}}}],["sim1;gor",{"_index":1612,"t":{"343":{"position":[[172,8]]}}}],["sim1;inj_pressur",{"_index":1553,"t":{"288":{"position":[[455,17],[599,17]]},"994":{"position":[[455,17],[599,17]]}}}],["sim1;oil",{"_index":1408,"t":{"228":{"position":[[522,9],[585,9],[642,9],[708,9]]}}}],["sim1;oil_prod",{"_index":1023,"t":{"141":{"position":[[368,13]]},"145":{"position":[[1206,13]]},"274":{"position":[[176,13]]},"844":{"position":[[92,13]]}}}],["sim1;oil_prod:pla",{"_index":2049,"t":{"553":{"position":[[199,17]]}}}],["sim1;powerloss",{"_index":2212,"t":{"1017":{"position":[[39,14]]}}}],["sim1;regular",{"_index":2243,"t":{"1064":{"position":[[12,15]]}}}],["sim1;suction_pressur",{"_index":1345,"t":{"202":{"position":[[1833,21]]},"280":{"position":[[120,21]]}}}],["sim1;temp",{"_index":1614,"t":{"343":{"position":[[217,9]]}}}],["sim1;water_inj",{"_index":1039,"t":{"143":{"position":[[1536,14]]},"145":{"position":[[1530,14]]},"325":{"position":[[83,14]]},"333":{"position":[[168,14]]},"994":{"position":[[806,14]]},"1073":{"position":[[168,14]]},"1127":{"position":[[57,14]]}}}],["sim1;water_prod",{"_index":2201,"t":{"994":{"position":[[846,15],[896,16]]}}}],["sim1;water_prod:field_a",{"_index":1530,"t":{"272":{"position":[[177,23]]}}}],["sim2",{"_index":1414,"t":{"231":{"position":[[184,6]]},"272":{"position":[[238,4]]},"429":{"position":[[85,4]]}}}],["sim2:gas_prod_a",{"_index":2246,"t":{"1066":{"position":[[408,15]]}}}],["sim2:oil_prod",{"_index":1535,"t":{"274":{"position":[[202,13]]},"844":{"position":[[118,13]]}}}],["sim2;gas_inj",{"_index":1416,"t":{"231":{"position":[[257,12]]}}}],["sim2;gas_prod_a",{"_index":2244,"t":{"1066":{"position":[[276,17]]}}}],["sim2;gas_sal",{"_index":1536,"t":{"274":{"position":[[220,14]]}}}],["sim2;water_prod",{"_index":2203,"t":{"994":{"position":[[875,16],[917,16]]}}}],["sim2;water_prod:field_b",{"_index":1531,"t":{"272":{"position":[[205,23]]}}}],["sim8;gas_prod",{"_index":2062,"t":{"585":{"position":[[265,13]]}}}],["sim8;water_inj",{"_index":2230,"t":{"1049":{"position":[[329,14]]}}}],["sim:gas_prod",{"_index":1123,"t":{"164":{"position":[[1132,12]]}}}],["sim:oil_prod",{"_index":1122,"t":{"164":{"position":[[1091,12]]}}}],["sim;col1",{"_index":1970,"t":{"495":{"position":[[74,8]]}}}],["sim;col2",{"_index":1972,"t":{"495":{"position":[[101,8]]}}}],["sim;flag",{"_index":1410,"t":{"228":{"position":[[759,9],[812,9]]}}}],["sim;ga",{"_index":1405,"t":{"228":{"position":[[359,7],[393,7],[420,7],[444,7],[476,7],[510,7],[573,7],[630,7],[696,7],[747,7],[800,7]]}}}],["sim;gas_inj",{"_index":1116,"t":{"164":{"position":[[743,11]]},"172":{"position":[[503,11]]},"174":{"position":[[1054,11]]}}}],["sim;gas_lift",{"_index":766,"t":{"109":{"position":[[576,13]]},"119":{"position":[[2062,13]]},"164":{"position":[[759,12]]},"172":{"position":[[519,13]]},"174":{"position":[[1070,12]]}}}],["sim;gas_prod",{"_index":758,"t":{"109":{"position":[[368,12],[426,12],[511,12]]},"117":{"position":[[4208,13],[4271,12]]},"119":{"position":[[1854,12],[1912,12],[1997,12]]},"164":{"position":[[368,12],[691,12]]},"172":{"position":[[3176,13]]},"174":{"position":[[679,12],[1002,12]]},"233":{"position":[[340,12],[359,12]]}}}],["sim;gas_sal",{"_index":2155,"t":{"842":{"position":[[27,13]]}}}],["sim;gas_sales:field_a",{"_index":2157,"t":{"846":{"position":[[138,21]]}}}],["sim;gas_sales:field_b",{"_index":2159,"t":{"846":{"position":[[346,24]]}}}],["sim;oil_prod",{"_index":757,"t":{"109":{"position":[[351,12]]},"119":{"position":[[1837,12]]},"164":{"position":[[351,12]]},"174":{"position":[[662,12]]},"272":{"position":[[0,12]]},"274":{"position":[[101,12]]},"521":{"position":[[110,12]]},"842":{"position":[[10,12]]}}}],["sim;oil_prod:field_a",{"_index":2156,"t":{"846":{"position":[[113,20]]}}}],["sim;oil_prod:field_b",{"_index":2158,"t":{"846":{"position":[[321,20]]}}}],["sim;p1",{"_index":1426,"t":{"233":{"position":[[394,6],[418,6]]}}}],["sim;p2",{"_index":1427,"t":{"233":{"position":[[407,6]]}}}],["sim;water_inj",{"_index":762,"t":{"109":{"position":[[468,13]]},"117":{"position":[[1661,14]]},"119":{"position":[[1954,13]]},"164":{"position":[[486,13]]},"174":{"position":[[797,13]]}}}],["sim;water_prod",{"_index":768,"t":{"109":{"position":[[629,14]]},"117":{"position":[[1761,14]]},"119":{"position":[[2115,14]]},"164":{"position":[[504,14],[523,14],[542,15],[570,15],[601,15],[630,15],[817,14],[903,14]]},"172":{"position":[[1031,15],[1143,14]]},"174":{"position":[[815,14],[834,14],[853,15],[881,15],[912,15],[941,15],[1128,14],[1214,14]]}}}],["similar",{"_index":519,"t":{"67":{"position":[[773,8]]},"97":{"position":[[21,7]]},"721":{"position":[[971,7]]},"1077":{"position":[[967,7]]},"1152":{"position":[[233,7]]},"1399":{"position":[[198,7]]},"1463":{"position":[[348,7],[552,8]]}}}],["similarli",{"_index":1771,"t":{"405":{"position":[[243,10]]}}}],["simpl",{"_index":20,"t":{"5":{"position":[[75,6]]},"11":{"position":[[74,6]]},"17":{"position":[[144,6]]},"23":{"position":[[250,6]]},"54":{"position":[[417,6],[2516,6]]},"95":{"position":[[29,6]]},"97":{"position":[[32,6]]},"123":{"position":[[958,6]]},"265":{"position":[[201,6]]},"505":{"position":[[998,6],[1171,6]]},"553":{"position":[[2,6]]},"1243":{"position":[[198,6],[225,6]]},"1255":{"position":[[323,6]]},"1275":{"position":[[46,6]]},"1303":{"position":[[5,6]]},"1477":{"position":[[429,6]]},"1483":{"position":[[26,6]]},"1499":{"position":[[597,6]]}}}],["simple_compressor",{"_index":2204,"t":{"1002":{"position":[[16,17]]}}}],["simpler",{"_index":776,"t":{"109":{"position":[[1057,7]]},"451":{"position":[[63,7]]}}}],["simpli",{"_index":205,"t":{"35":{"position":[[461,6]]},"401":{"position":[[1550,6]]},"443":{"position":[[245,6]]},"483":{"position":[[575,6]]},"517":{"position":[[859,6]]}}}],["simplifi",{"_index":456,"t":{"54":{"position":[[2434,8]]},"107":{"position":[[246,10]]},"117":{"position":[[400,10]]},"284":{"position":[[190,10]]},"337":{"position":[[1613,10]]},"347":{"position":[[183,10]]},"367":{"position":[[295,10]]},"383":{"position":[[4,10]]},"468":{"position":[[3460,10]]},"471":{"position":[[30,10]]},"477":{"position":[[25,8],[881,8]]},"1224":{"position":[[1769,10]]},"1243":{"position":[[257,10]]},"1247":{"position":[[108,10]]},"1328":{"position":[[137,10]]},"1367":{"position":[[1305,8]]},"1452":{"position":[[91,10]]}}}],["simplified_compressor_model",{"_index":1741,"t":{"392":{"position":[[728,27]]},"394":{"position":[[347,27],[962,27]]}}}],["simplified_compressor_model_with_turbin",{"_index":1743,"t":{"394":{"position":[[873,40]]}}}],["simplified_compressor_train_model",{"_index":746,"t":{"107":{"position":[[1108,33]]},"117":{"position":[[1157,33],[1226,33]]},"119":{"position":[[1397,33],[2788,33],[2857,33]]},"137":{"position":[[1518,33]]},"143":{"position":[[2379,33]]},"145":{"position":[[800,33],[1882,33]]},"396":{"position":[[641,33]]},"398":{"position":[[202,33]]},"465":{"position":[[111,33]]},"963":{"position":[[16,33]]}}}],["simplified_compressor_train_model_with_turbin",{"_index":1896,"t":{"465":{"position":[[16,46]]}}}],["simplified_variable_speed_compressor_train",{"_index":747,"t":{"107":{"position":[[1148,42]]},"119":{"position":[[1437,42]]},"137":{"position":[[593,42],[1558,42]]},"145":{"position":[[840,42]]},"317":{"position":[[78,42]]},"369":{"position":[[61,42]]},"385":{"position":[[35,42]]},"387":{"position":[[145,42]]},"389":{"position":[[720,42]]},"392":{"position":[[762,42]]},"394":{"position":[[381,42]]},"396":{"position":[[681,42]]},"398":{"position":[[242,42]]},"945":{"position":[[78,42]]},"957":{"position":[[116,42]]},"959":{"position":[[54,42]]},"961":{"position":[[35,42]]},"963":{"position":[[56,42]]},"1002":{"position":[[40,42]]},"1193":{"position":[[163,42]]}}}],["simul",{"_index":1398,"t":{"226":{"position":[[483,10]]},"228":{"position":[[13,10]]},"357":{"position":[[812,10]]},"415":{"position":[[1198,11]]},"421":{"position":[[222,10],[388,10],[870,10]]},"477":{"position":[[147,10]]},"1053":{"position":[[1190,11]]},"1105":{"position":[[136,10],[302,10],[784,10]]}}}],["singl",{"_index":526,"t":{"73":{"position":[[210,6]]},"103":{"position":[[252,6]]},"113":{"position":[[874,6]]},"117":{"position":[[2746,6],[2956,6]]},"119":{"position":[[3855,6]]},"135":{"position":[[218,6]]},"143":{"position":[[699,6]]},"160":{"position":[[310,6]]},"179":{"position":[[18,6]]},"181":{"position":[[222,6],[359,6],[906,6]]},"183":{"position":[[20,6]]},"185":{"position":[[174,6],[432,6]]},"243":{"position":[[422,6]]},"276":{"position":[[133,6]]},"321":{"position":[[15,6]]},"337":{"position":[[19,6],[446,6],[515,6],[1070,6]]},"345":{"position":[[223,6]]},"347":{"position":[[109,6]]},"349":{"position":[[142,6]]},"351":{"position":[[4,6],[37,6]]},"355":{"position":[[317,6],[396,6]]},"371":{"position":[[320,6],[362,6]]},"401":{"position":[[198,7]]},"403":{"position":[[365,6]]},"407":{"position":[[632,6],[944,6]]},"413":{"position":[[1208,6]]},"417":{"position":[[205,6]]},"431":{"position":[[4,6],[65,6],[123,6],[576,6],[727,6],[781,6]]},"451":{"position":[[797,6]]},"468":{"position":[[3577,6],[3834,6]]},"517":{"position":[[1194,6]]},"525":{"position":[[538,7]]},"589":{"position":[[812,6]]},"604":{"position":[[22,6],[84,6]]},"634":{"position":[[52,6],[213,6],[730,6]]},"779":{"position":[[2,6]]},"837":{"position":[[181,6]]},"877":{"position":[[218,6]]},"888":{"position":[[49,6]]},"922":{"position":[[209,6]]},"925":{"position":[[147,6]]},"935":{"position":[[54,6]]},"1059":{"position":[[33,6]]},"1213":{"position":[[611,6],[834,6]]},"1224":{"position":[[1094,6]]},"1231":{"position":[[123,6]]},"1236":{"position":[[309,6]]},"1239":{"position":[[44,6],[391,6]]},"1273":{"position":[[380,6]]},"1275":{"position":[[302,6]]},"1332":{"position":[[87,6]]},"1356":{"position":[[490,6]]},"1363":{"position":[[277,6]]},"1421":{"position":[[110,6]]},"1431":{"position":[[261,6]]},"1467":{"position":[[86,6]]}}}],["single_spe",{"_index":377,"t":{"52":{"position":[[2967,12]]},"353":{"position":[[82,12]]},"355":{"position":[[92,12]]},"606":{"position":[[82,12],[409,12]]},"608":{"position":[[92,12]]}}}],["single_speed_compressor",{"_index":2140,"t":{"801":{"position":[[109,23]]}}}],["single_speed_compressor_chart",{"_index":374,"t":{"52":{"position":[[2902,29]]}}}],["single_speed_compressor_train",{"_index":1583,"t":{"317":{"position":[[48,29]]},"403":{"position":[[635,32]]},"433":{"position":[[35,29]]},"637":{"position":[[35,29]]},"639":{"position":[[39,29]]},"801":{"position":[[139,29]]},"937":{"position":[[35,29]]},"945":{"position":[[48,29]]},"1193":{"position":[[101,29]]}}}],["single_speed_pump",{"_index":2254,"t":{"1167":{"position":[[25,17]]}}}],["single_speed_pump_chart",{"_index":366,"t":{"52":{"position":[[2606,23]]}}}],["singular",{"_index":1759,"t":{"401":{"position":[[739,8]]}}}],["site",{"_index":3144,"t":{"1461":{"position":[[5,4]]},"1467":{"position":[[58,4],[192,4],[298,4]]}}}],["situat",{"_index":1754,"t":{"401":{"position":[[568,9]]},"405":{"position":[[5,9]]},"1231":{"position":[[255,9]]},"1350":{"position":[[595,10]]}}}],["six",{"_index":1091,"t":{"152":{"position":[[75,3]]}}}],["skeleton",{"_index":962,"t":{"125":{"position":[[28,8]]},"131":{"position":[[144,8]]}}}],["skew",{"_index":1696,"t":{"371":{"position":[[1406,4]]}}}],["skip",{"_index":1576,"t":{"306":{"position":[[582,4]]},"1243":{"position":[[6,4],[51,4]]},"1277":{"position":[[654,4]]},"1318":{"position":[[0,4]]},"1334":{"position":[[14,4]]}}}],["slight",{"_index":3140,"t":{"1450":{"position":[[595,6]]}}}],["slightli",{"_index":2131,"t":{"775":{"position":[[236,8]]}}}],["slot",{"_index":2321,"t":{"1236":{"position":[[367,5]]}}}],["sm3",{"_index":1109,"t":{"162":{"position":[[136,3]]},"786":{"position":[[35,3]]},"837":{"position":[[78,4]]}}}],["sm3/cd",{"_index":3136,"t":{"1450":{"position":[[325,6]]}}}],["sm3/d",{"_index":865,"t":{"121":{"position":[[419,7]]},"148":{"position":[[31,7]]},"176":{"position":[[800,6],[807,6],[826,6],[833,5]]},"202":{"position":[[807,8]]}}}],["sm3/day",{"_index":783,"t":{"111":{"position":[[261,7]]},"154":{"position":[[987,8],[1035,7]]},"166":{"position":[[261,7]]},"172":{"position":[[370,9],[1214,8],[2080,8],[2231,8],[2263,7]]},"200":{"position":[[61,7]]},"202":{"position":[[536,9],[1786,9]]},"204":{"position":[[834,9]]},"210":{"position":[[29,7],[86,7]]},"249":{"position":[[61,9]]},"251":{"position":[[40,7]]},"306":{"position":[[78,9]]},"327":{"position":[[28,7]]},"335":{"position":[[28,7]]},"345":{"position":[[408,10]]},"381":{"position":[[2593,9]]},"385":{"position":[[426,9]]},"433":{"position":[[1202,9]]},"475":{"position":[[53,7]]},"581":{"position":[[202,10]]},"585":{"position":[[281,9]]},"839":{"position":[[25,9],[71,9],[104,9]]},"975":{"position":[[116,9]]},"977":{"position":[[60,9]]},"1123":{"position":[[37,9]]},"1125":{"position":[[107,10]]}}}],["sm3/day],[mw",{"_index":1141,"t":{"176":{"position":[[34,15],[646,15]]}}}],["sm3/day],[sm3/day",{"_index":1157,"t":{"176":{"position":[[289,20]]}}}],["sm3/hr",{"_index":1676,"t":{"363":{"position":[[1409,7]]}}}],["sm3/sd",{"_index":3135,"t":{"1450":{"position":[[296,6]]}}}],["small",{"_index":1891,"t":{"455":{"position":[[828,5]]},"477":{"position":[[771,5]]},"525":{"position":[[420,5]]},"1452":{"position":[[17,5]]},"1457":{"position":[[50,5]]},"1479":{"position":[[646,6]]},"1493":{"position":[[66,5]]}}}],["smaller",{"_index":579,"t":{"84":{"position":[[662,7]]},"181":{"position":[[691,7]]},"357":{"position":[[942,8]]},"477":{"position":[[442,7]]},"1393":{"position":[[17,7]]},"1403":{"position":[[17,7]]},"1413":{"position":[[17,7]]},"1485":{"position":[[92,7]]},"1493":{"position":[[91,8]]},"1499":{"position":[[199,7]]}}}],["snake_cas",{"_index":2829,"t":{"1350":{"position":[[876,10]]}}}],["snapshot",{"_index":2378,"t":{"1268":{"position":[[310,9]]},"1277":{"position":[[820,8],[870,9]]},"1301":{"position":[[399,8]]},"1367":{"position":[[1435,9]]},"1386":{"position":[[1343,9]]},"1523":{"position":[[158,8],[313,8]]}}}],["snok/instal",{"_index":2739,"t":{"1343":{"position":[[574,12]]}}}],["soav",{"_index":1850,"t":{"435":{"position":[[783,6],[983,6]]}}}],["softwar",{"_index":1433,"t":{"237":{"position":[[12,8]]}}}],["sole",{"_index":1506,"t":{"259":{"position":[[637,6]]},"371":{"position":[[1431,6]]}}}],["solut",{"_index":1570,"t":{"304":{"position":[[186,8]]},"309":{"position":[[138,8]]},"403":{"position":[[329,8]]},"407":{"position":[[277,10],[569,8]]},"481":{"position":[[251,10]]},"1234":{"position":[[632,8]]}}}],["solv",{"_index":1606,"t":{"337":{"position":[[1859,6]]},"363":{"position":[[856,7],[1121,5]]},"371":{"position":[[804,6]]},"415":{"position":[[465,6]]},"1438":{"position":[[597,6]]},"1505":{"position":[[544,8]]},"1528":{"position":[[642,5]]}}}],["some_compressor_chart",{"_index":2191,"t":{"963":{"position":[[203,21]]}}}],["some_facility_input",{"_index":2036,"t":{"529":{"position":[[108,19]]},"561":{"position":[[88,19]]},"784":{"position":[[84,19]]}}}],["some_fluid_model",{"_index":2190,"t":{"963":{"position":[[112,16]]}}}],["some_yaml_file.yaml",{"_index":2169,"t":{"886":{"position":[[9,21]]}}}],["somebodi",{"_index":486,"t":{"61":{"position":[[1501,8]]}}}],["somedirectemitt",{"_index":2092,"t":{"630":{"position":[[25,17]]}}}],["somedirectory/foo/bar",{"_index":533,"t":{"73":{"position":[[637,23]]}}}],["someelectricalconsum",{"_index":2053,"t":{"575":{"position":[[19,22]]}}}],["somelocation/myfield.yaml",{"_index":523,"t":{"73":{"position":[[105,26]]}}}],["somelocation/myfield.yml",{"_index":532,"t":{"73":{"position":[[563,25],[661,25],[766,25],[848,25]]}}}],["someotherdirectemitt",{"_index":2093,"t":{"630":{"position":[[142,22]]}}}],["someotherelectricalconsum",{"_index":2054,"t":{"575":{"position":[[117,27]]}}}],["someotherfuelconsum",{"_index":2166,"t":{"873":{"position":[[224,21]]}}}],["someotherventingemitt",{"_index":2256,"t":{"1203":{"position":[[144,23]]},"1209":{"position":[[115,23]]}}}],["someth",{"_index":2239,"t":{"1057":{"position":[[439,9]]},"1224":{"position":[[2222,9]]},"1505":{"position":[[591,9]]}}}],["someventingemitt",{"_index":615,"t":{"91":{"position":[[811,18]]},"1039":{"position":[[26,18]]},"1203":{"position":[[26,18]]},"1209":{"position":[[26,18]]}}}],["somewher",{"_index":94,"t":{"15":{"position":[[133,10]]}}}],["soon",{"_index":46,"t":{"7":{"position":[[372,4]]},"1493":{"position":[[159,5]]}}}],["sort",{"_index":1560,"t":{"294":{"position":[[232,4]]},"833":{"position":[[80,4]]}}}],["sourc",{"_index":453,"t":{"54":{"position":[[2317,6]]},"172":{"position":[[1768,7]]},"219":{"position":[[667,8]]},"237":{"position":[[880,7]]},"263":{"position":[[301,6]]},"272":{"position":[[272,7]]},"421":{"position":[[282,7],[640,7]]},"427":{"position":[[19,6],[79,7]]},"499":{"position":[[433,7]]},"737":{"position":[[192,6]]},"900":{"position":[[43,6]]},"908":{"position":[[35,6],[701,6]]},"1013":{"position":[[267,6]]},"1066":{"position":[[130,8]]},"1105":{"position":[[196,7],[554,7]]},"1109":{"position":[[254,6]]},"1373":{"position":[[298,6]]},"1501":{"position":[[246,6]]},"1530":{"position":[[907,7]]}}}],["space",{"_index":391,"t":{"52":{"position":[[3483,5]]},"217":{"position":[[217,6]]},"339":{"position":[[173,5]]},"1215":{"position":[[190,6]]},"1363":{"position":[[651,6]]},"1505":{"position":[[706,6]]}}}],["span",{"_index":1347,"t":{"204":{"position":[[130,4]]},"337":{"position":[[784,4]]}}}],["spars",{"_index":3291,"t":{"1499":{"position":[[692,6]]}}}],["special",{"_index":2342,"t":{"1241":{"position":[[615,7]]},"1469":{"position":[[20,7]]},"1475":{"position":[[1194,7]]},"1499":{"position":[[741,7],[762,7]]}}}],["specif",{"_index":356,"t":{"52":{"position":[[2347,14],[4804,13]]},"99":{"position":[[162,14]]},"152":{"position":[[871,8]]},"219":{"position":[[1428,14],[1489,14]]},"257":{"position":[[244,13]]},"267":{"position":[[78,14],[143,14],[190,13],[254,13],[312,13],[382,13],[519,14],[584,14],[631,13],[695,13],[753,13],[823,13]]},"294":{"position":[[435,13]]},"385":{"position":[[180,14]]},"468":{"position":[[231,13]]},"481":{"position":[[320,8],[515,8]]},"505":{"position":[[937,8],[1109,8]]},"871":{"position":[[113,14]]},"1229":{"position":[[922,8],[1124,8]]},"1463":{"position":[[680,8]]}}}],["specifi",{"_index":89,"t":{"15":{"position":[[47,9]]},"52":{"position":[[2270,7],[2511,8]]},"54":{"position":[[186,9],[627,7],[806,9],[874,7],[963,10]]},"73":{"position":[[589,7],[687,7]]},"84":{"position":[[915,7]]},"91":{"position":[[173,10]]},"103":{"position":[[3,7]]},"107":{"position":[[127,8]]},"109":{"position":[[38,7],[257,7]]},"111":{"position":[[192,8],[334,9],[386,9]]},"117":{"position":[[4301,10]]},"123":{"position":[[188,9],[379,9]]},"135":{"position":[[38,9],[170,9]]},"137":{"position":[[495,10],[738,10]]},"141":{"position":[[136,10]]},"143":{"position":[[326,9],[2167,9],[2581,9]]},"152":{"position":[[623,9],[846,9]]},"160":{"position":[[3,7]]},"164":{"position":[[38,7],[257,7],[1191,7]]},"166":{"position":[[192,8],[298,9],[350,9]]},"172":{"position":[[2376,9],[2476,10],[2901,10],[3280,9],[3334,10]]},"198":{"position":[[71,9]]},"204":{"position":[[283,9]]},"208":{"position":[[350,7]]},"217":{"position":[[111,9]]},"219":{"position":[[1924,10],[1986,10]]},"231":{"position":[[151,9]]},"245":{"position":[[31,10],[349,9]]},"253":{"position":[[93,9],[188,9],[360,9],[403,7]]},"276":{"position":[[19,9],[347,9],[394,9]]},"282":{"position":[[341,7]]},"284":{"position":[[26,9],[411,10]]},"294":{"position":[[258,9],[478,10],[557,10]]},"306":{"position":[[99,7],[286,9]]},"311":{"position":[[0,7],[235,9]]},"337":{"position":[[937,9],[1190,9],[1542,9],[2296,9],[2437,9]]},"349":{"position":[[225,9]]},"371":{"position":[[521,9]]},"381":{"position":[[386,10]]},"383":{"position":[[565,10]]},"389":{"position":[[60,7]]},"413":{"position":[[192,10],[469,9]]},"415":{"position":[[40,9],[109,9],[241,9],[1514,9]]},"421":{"position":[[655,9],[894,9]]},"423":{"position":[[121,8]]},"443":{"position":[[19,9],[190,10]]},"455":{"position":[[124,9]]},"468":{"position":[[267,9],[755,9]]},"477":{"position":[[1464,9]]},"481":{"position":[[714,10]]},"503":{"position":[[444,9],[536,9]]},"505":{"position":[[117,10],[354,10]]},"511":{"position":[[314,9],[817,10]]},"513":{"position":[[147,10],[308,9]]},"517":{"position":[[32,7]]},"549":{"position":[[59,9],[429,10]]},"589":{"position":[[124,7],[225,9]]},"593":{"position":[[0,10]]},"604":{"position":[[72,7],[330,9]]},"612":{"position":[[10,9],[982,9]]},"653":{"position":[[232,9]]},"669":{"position":[[17,9]]},"679":{"position":[[74,7],[398,9]]},"697":{"position":[[13,9]]},"713":{"position":[[18,9]]},"721":{"position":[[178,7],[908,7],[1004,10]]},"729":{"position":[[65,9]]},"747":{"position":[[23,9]]},"761":{"position":[[113,9],[304,9]]},"767":{"position":[[0,9]]},"821":{"position":[[23,9],[118,9],[290,9],[333,7]]},"833":{"position":[[106,9]]},"852":{"position":[[23,9]]},"900":{"position":[[100,10]]},"908":{"position":[[522,9]]},"912":{"position":[[29,9],[102,9]]},"920":{"position":[[28,9],[243,10],[1020,9]]},"925":{"position":[[40,9],[96,9]]},"941":{"position":[[16,9],[176,9]]},"959":{"position":[[141,10]]},"975":{"position":[[169,9],[405,9],[565,7],[656,9],[822,7],[903,7],[1049,7]]},"977":{"position":[[40,10]]},"979":{"position":[[40,10]]},"981":{"position":[[40,10],[294,7]]},"983":{"position":[[40,10],[306,7]]},"985":{"position":[[120,10]]},"987":{"position":[[10,9],[975,9]]},"1053":{"position":[[1269,10]]},"1055":{"position":[[123,9],[221,10]]},"1059":{"position":[[18,9]]},"1069":{"position":[[40,10],[263,10],[533,10]]},"1077":{"position":[[255,7],[661,10],[1082,10]]},"1097":{"position":[[266,9]]},"1105":{"position":[[569,9],[808,9]]},"1131":{"position":[[307,10]]},"1138":{"position":[[33,9],[89,9]]},"1145":{"position":[[41,9],[97,9]]},"1152":{"position":[[62,10],[218,9]]},"1159":{"position":[[31,9],[107,10],[141,9]]},"1177":{"position":[[231,9]]},"1224":{"position":[[1885,9]]},"1229":{"position":[[910,7],[1439,9],[1511,10]]},"1234":{"position":[[811,10],[1520,7]]},"1236":{"position":[[887,9],[961,9]]},"1241":{"position":[[455,9]]},"1255":{"position":[[92,9]]},"1365":{"position":[[171,7]]},"1425":{"position":[[291,7]]},"1457":{"position":[[293,10]]}}}],["specifications/data",{"_index":1727,"t":{"389":{"position":[[629,19]]}}}],["speed",{"_index":682,"t":{"103":{"position":[[259,5]]},"121":{"position":[[45,5],[527,5]]},"135":{"position":[[225,6]]},"143":{"position":[[507,5]]},"160":{"position":[[317,5]]},"179":{"position":[[25,5],[44,6]]},"181":{"position":[[210,5],[229,5],[366,5],[433,5],[452,6],[603,6],[835,5],[913,5],[1084,5]]},"183":{"position":[[27,5]]},"185":{"position":[[91,6],[141,5],[181,5],[232,5],[334,6],[354,5],[439,5],[464,5]]},"190":{"position":[[29,5],[71,6]]},"192":{"position":[[15,5]]},"284":{"position":[[210,5],[249,5]]},"290":{"position":[[72,5]]},"292":{"position":[[209,5]]},"337":{"position":[[26,5],[44,6],[1077,5],[1284,5],[1428,5],[1633,5],[1909,5],[2045,5]]},"347":{"position":[[116,5],[154,5],[203,5],[241,5]]},"349":{"position":[[149,5],[181,5]]},"351":{"position":[[11,5],[69,6]]},"353":{"position":[[302,6],[316,5]]},"355":{"position":[[169,6],[324,5],[403,5]]},"357":{"position":[[13,5],[96,7],[150,5],[190,5],[288,5],[675,5],[738,5]]},"359":{"position":[[305,6],[319,5],[534,6],[548,5]]},"361":{"position":[[174,6],[291,6],[431,6],[629,5],[711,5]]},"367":{"position":[[315,5]]},"377":{"position":[[15,5],[327,6],[399,5],[523,5],[733,5],[774,5]]},"381":{"position":[[57,6],[142,5],[173,5],[327,5],[429,5],[582,5],[700,5],[792,5],[907,5],[1007,5],[1048,5]]},"383":{"position":[[24,5],[392,6]]},"392":{"position":[[174,6],[291,6]]},"396":{"position":[[272,6],[389,6]]},"401":{"position":[[64,5],[206,5],[414,5]]},"403":{"position":[[629,5],[843,6],[1088,5],[1182,5],[1280,5]]},"405":{"position":[[36,5],[480,5],[853,5]]},"407":{"position":[[951,5]]},"413":{"position":[[1356,5]]},"415":{"position":[[520,5],[597,5],[735,5],[831,5],[917,5],[954,5],[1071,5],[1414,5]]},"417":{"position":[[212,5],[231,5],[495,5]]},"431":{"position":[[11,5],[72,5],[130,5],[226,6],[248,5],[289,5],[583,5],[734,5],[788,5]]},"451":{"position":[[804,5]]},"468":{"position":[[2697,5],[2814,6],[2914,6],[3072,5],[3141,5],[3420,5],[3480,5],[3590,6],[3841,5],[4242,5]]},"517":{"position":[[1201,5],[1223,5]]},"525":{"position":[[546,6],[562,5]]},"597":{"position":[[73,5],[271,5],[312,5],[454,5],[511,5]]},"604":{"position":[[29,5],[91,5],[367,6]]},"606":{"position":[[108,6],[122,5]]},"608":{"position":[[118,6]]},"634":{"position":[[59,5],[96,5],[220,5],[258,5],[591,6],[671,5],[737,5],[776,5],[817,5],[921,5]]},"653":{"position":[[293,5]]},"679":{"position":[[31,5],[95,5],[296,6],[435,6],[493,6]]},"681":{"position":[[111,6],[125,5],[340,6],[354,5]]},"683":{"position":[[123,6],[240,6]]},"693":{"position":[[174,6]]},"850":{"position":[[76,5]]},"865":{"position":[[174,6]]},"920":{"position":[[1218,5]]},"935":{"position":[[61,5]]},"1177":{"position":[[292,5]]},"1213":{"position":[[98,5]]},"1224":{"position":[[1101,5],[1120,5],[1521,5],[1584,5]]},"1231":{"position":[[143,5]]},"1234":{"position":[[666,5],[734,5]]},"1236":{"position":[[273,5],[316,5],[1245,5]]},"1239":{"position":[[64,5],[139,5],[398,5]]},"1241":{"position":[[60,5]]},"1273":{"position":[[387,5],[435,5]]},"1275":{"position":[[309,5],[392,5]]},"1332":{"position":[[94,5],[263,5]]},"1356":{"position":[[497,5],[597,5]]},"1363":{"position":[[284,5]]},"1417":{"position":[[189,5]]},"1421":{"position":[[117,5],[154,5]]},"1427":{"position":[[259,5]]},"1431":{"position":[[24,5],[268,5]]},"1436":{"position":[[99,5],[315,5]]},"1438":{"position":[[250,5],[342,5],[422,6],[585,6],[715,6]]},"1450":{"position":[[378,5]]}}}],["speed,rate,head,effici",{"_index":1172,"t":{"176":{"position":[[489,26]]}}}],["speed/minimum",{"_index":1251,"t":{"181":{"position":[[938,13]]}}}],["spell",{"_index":2864,"t":{"1354":{"position":[[548,8]]}}}],["spellcheck",{"_index":2617,"t":{"1318":{"position":[[5,13]]}}}],["spelling/dash",{"_index":2020,"t":{"517":{"position":[[420,13]]}}}],["split",{"_index":540,"t":{"75":{"position":[[142,5]]},"143":{"position":[[972,5],[1138,5]]},"329":{"position":[[116,5]]},"415":{"position":[[276,5]]},"749":{"position":[[218,5]]},"920":{"position":[[1075,5]]},"1231":{"position":[[668,9]]},"1268":{"position":[[178,5]]},"1411":{"position":[[142,5]]},"1499":{"position":[[164,5]]}}}],["splitting/halv",{"_index":1688,"t":{"371":{"position":[[124,17]]}}}],["spread",{"_index":1670,"t":{"363":{"position":[[641,6],[722,7]]},"371":{"position":[[763,6]]}}}],["sqrt{p_{1",{"_index":1422,"t":{"233":{"position":[[178,11]]}}}],["src=\"path/image.jpg",{"_index":3224,"t":{"1475":{"position":[[1016,20]]}}}],["srk",{"_index":719,"t":{"107":{"position":[[818,3]]},"119":{"position":[[1109,3]]},"392":{"position":[[522,3]]},"394":{"position":[[318,3]]},"396":{"position":[[615,3]]},"398":{"position":[[176,3]]},"435":{"position":[[779,3],[947,3],[979,3]]},"441":{"position":[[126,3],[299,3]]},"447":{"position":[[106,3]]},"801":{"position":[[80,3]]}}}],["stack",{"_index":536,"t":{"73":{"position":[[797,5]]}}}],["stage",{"_index":602,"t":{"86":{"position":[[1193,5],[1258,5]]},"107":{"position":[[1235,7]]},"119":{"position":[[1524,7]]},"137":{"position":[[775,7],[966,5]]},"204":{"position":[[271,7]]},"276":{"position":[[494,6],[571,6]]},"337":{"position":[[563,6],[925,7],[1254,6],[1606,6],[1819,6],[1875,5],[2216,6],[2318,7],[2426,5]]},"369":{"position":[[181,7]]},"377":{"position":[[599,7],[712,6]]},"379":{"position":[[153,7],[216,6],[288,6]]},"381":{"position":[[1483,7],[1546,6],[1618,6],[1728,6],[1818,5],[1958,6],[2031,6],[2141,6],[2231,5],[2344,5]]},"383":{"position":[[102,5],[190,6],[634,6],[695,6]]},"387":{"position":[[20,6],[43,5],[246,7],[309,6],[381,6],[489,6],[562,6],[643,5]]},"389":{"position":[[30,6],[99,6],[351,6],[883,6],[958,7],[1062,7]]},"392":{"position":[[850,7]]},"394":{"position":[[468,7]]},"396":{"position":[[765,7]]},"403":{"position":[[242,6],[296,5],[372,5]]},"407":{"position":[[158,6],[199,6],[476,5],[639,5],[2037,5],[2264,5],[2340,6],[2376,5],[2407,5],[2508,5],[2582,5],[2772,5]]},"411":{"position":[[195,5],[236,5],[652,7],[715,6],[975,5],[1121,6],[1546,5],[1746,6],[1998,5]]},"413":{"position":[[203,6],[231,6],[272,6],[416,6],[488,6],[509,6],[645,6],[652,6],[824,6],[997,6],[1166,5]]},"415":{"position":[[77,6],[133,6],[1708,5],[1773,5]]},"419":{"position":[[275,7],[605,5],[673,5]]},"431":{"position":[[692,5]]},"433":{"position":[[396,7],[459,6],[531,6],[648,5],[719,6],[792,6],[909,5],[953,5]]},"468":{"position":[[3286,7],[3370,5]]},"595":{"position":[[17,6]]},"597":{"position":[[250,6]]},"599":{"position":[[156,7],[219,6],[291,6]]},"601":{"position":[[118,7]]},"632":{"position":[[17,6]]},"634":{"position":[[718,6]]},"637":{"position":[[154,7],[217,6],[289,6]]},"639":{"position":[[116,7]]},"642":{"position":[[156,7],[219,6],[291,6]]},"644":{"position":[[118,7]]},"647":{"position":[[424,7],[487,6],[912,5]]},"649":{"position":[[280,7],[712,5],[780,5]]},"655":{"position":[[113,7]]},"657":{"position":[[106,7]]},"877":{"position":[[136,6]]},"879":{"position":[[51,7],[114,6]]},"881":{"position":[[55,7]]},"920":{"position":[[52,6],[375,7],[438,6],[657,6]]},"937":{"position":[[224,7],[287,6]]},"957":{"position":[[172,7]]},"959":{"position":[[110,7],[126,6]]},"961":{"position":[[227,6],[302,7],[406,7]]},"1083":{"position":[[17,6]]},"1085":{"position":[[136,6],[176,5]]},"1087":{"position":[[102,7],[165,6],[386,6]]},"1089":{"position":[[106,7]]},"1093":{"position":[[36,5]]},"1095":{"position":[[75,7],[138,6],[210,6]]},"1097":{"position":[[0,6],[28,6],[69,6],[213,6],[285,6],[306,6],[442,6],[449,6],[621,6],[794,6]]},"1099":{"position":[[103,7],[166,6],[426,5],[572,6],[997,5]]},"1101":{"position":[[107,7],[437,5],[505,5]]},"1179":{"position":[[113,7]]},"1181":{"position":[[106,7]]},"1234":{"position":[[824,5],[1052,6],[1059,7],[1122,6]]},"1236":{"position":[[69,5]]},"1264":{"position":[[33,5]]},"1286":{"position":[[27,5]]},"1343":{"position":[[130,5],[1377,5]]},"1350":{"position":[[652,5]]},"1354":{"position":[[27,5]]},"1363":{"position":[[330,6]]},"1427":{"position":[[356,5]]},"1523":{"position":[[267,6]]}}}],["stand",{"_index":1598,"t":{"337":{"position":[[63,5]]}}}],["standalon",{"_index":1719,"t":{"383":{"position":[[295,10]]}}}],["standard",{"_index":1351,"t":{"204":{"position":[[804,8]]},"363":{"position":[[1555,8]]},"381":{"position":[[2579,8]]},"385":{"position":[[412,8]]},"433":{"position":[[1188,8]]},"505":{"position":[[918,8],[1090,8]]},"925":{"position":[[230,8]]},"1332":{"position":[[422,8]]},"1354":{"position":[[342,8]]},"1382":{"position":[[185,8]]},"1407":{"position":[[101,8],[155,8]]},"1421":{"position":[[23,8]]},"1452":{"position":[[71,8]]},"1471":{"position":[[16,8]]},"1473":{"position":[[27,8]]},"1530":{"position":[[1234,8]]}}}],["standard_conditions_dens",{"_index":2946,"t":{"1363":{"position":[[1019,27]]}}}],["start",{"_index":65,"t":{"11":{"position":[[233,7]]},"17":{"position":[[363,7]]},"219":{"position":[[2291,5]]},"241":{"position":[[269,7]]},"245":{"position":[[248,8]]},"401":{"position":[[842,6]]},"455":{"position":[[758,5]]},"499":{"position":[[352,5],[368,5]]},"669":{"position":[[353,8]]},"721":{"position":[[952,5]]},"844":{"position":[[31,6],[60,5]]},"1075":{"position":[[0,5]]},"1077":{"position":[[11,5],[417,6],[560,5],[1159,6]]},"1079":{"position":[[0,6]]},"1081":{"position":[[117,6]]},"1241":{"position":[[240,6],[820,7]]},"1275":{"position":[[96,7]]},"1328":{"position":[[12,5]]},"1332":{"position":[[514,5]]},"1452":{"position":[[131,5],[334,5],[406,8]]},"1475":{"position":[[315,5],[336,5]]},"1479":{"position":[[292,5]]},"1481":{"position":[[39,7]]},"1501":{"position":[[382,8]]}}}],["stash",{"_index":2095,"t":{"639":{"position":[[235,7]]}}}],["state",{"_index":982,"t":{"137":{"position":[[158,5]]},"413":{"position":[[98,5]]},"435":{"position":[[607,5],[718,5]]},"468":{"position":[[427,5],[580,5]]},"1131":{"position":[[213,5]]},"1386":{"position":[[248,6]]}}}],["statement",{"_index":558,"t":{"84":{"position":[[100,9]]},"1475":{"position":[[522,9],[569,9],[581,9],[593,9]]}}}],["static",{"_index":23,"t":{"5":{"position":[[123,10]]},"468":{"position":[[222,8]]},"1467":{"position":[[51,6]]}}}],["statu",{"_index":3343,"t":{"1519":{"position":[[79,6]]}}}],["status",{"_index":3125,"t":{"1436":{"position":[[51,8]]}}}],["stay",{"_index":2126,"t":{"749":{"position":[[105,5]]},"1077":{"position":[[1230,4]]}}}],["steam",{"_index":508,"t":{"67":{"position":[[32,5],[191,5],[366,5],[473,5],[528,5],[644,5],[749,5]]},"517":{"position":[[1667,5],[1758,5],[1814,5]]},"1399":{"position":[[141,5]]}}}],["steamgen",{"_index":516,"t":{"67":{"position":[[625,8]]}}}],["steamturbinegeneratorconsumpt",{"_index":3112,"t":{"1401":{"position":[[135,32]]}}}],["step",{"_index":296,"t":{"50":{"position":[[141,4],[149,4]]},"59":{"position":[[143,4],[151,4]]},"65":{"position":[[68,6]]},"272":{"position":[[310,6]]},"331":{"position":[[423,5]]},"407":{"position":[[2084,4]]},"415":{"position":[[1357,6],[1572,5]]},"471":{"position":[[250,5]]},"505":{"position":[[383,5]]},"511":{"position":[[846,5]]},"737":{"position":[[238,4],[283,4]]},"900":{"position":[[23,5]]},"908":{"position":[[683,5],[842,6],[890,4],[975,5],[1098,4],[1179,5],[1322,6]]},"1077":{"position":[[687,4]]},"1109":{"position":[[149,5],[300,4],[345,4],[470,5]]},"1224":{"position":[[1226,5]]},"1241":{"position":[[176,4]]},"1243":{"position":[[71,5],[106,5]]},"1332":{"position":[[445,5]]},"1363":{"position":[[931,5]]},"1483":{"position":[[33,6]]}}}],["still",{"_index":1099,"t":{"152":{"position":[[1062,5]]},"185":{"position":[[311,5]]},"331":{"position":[[407,5]]},"403":{"position":[[854,5]]},"477":{"position":[[1344,5]]},"850":{"position":[[612,5]]},"1229":{"position":[[2337,5]]},"1243":{"position":[[122,5]]},"1421":{"position":[[306,5]]},"1519":{"position":[[46,5]]}}}],["stone",{"_index":1703,"t":{"381":{"position":[[846,5]]}}}],["stop",{"_index":2104,"t":{"721":{"position":[[29,4],[859,5]]},"1241":{"position":[[117,5]]}}}],["storag",{"_index":398,"t":{"52":{"position":[[3771,8],[4185,7],[4250,7]]},"517":{"position":[[1586,7]]},"1247":{"position":[[254,7]]}}}],["store",{"_index":430,"t":{"54":{"position":[[1101,5]]},"503":{"position":[[295,5]]},"517":{"position":[[1647,7]]},"1226":{"position":[[174,6]]},"1229":{"position":[[850,5]]},"1507":{"position":[[43,5],[218,6]]}}}],["stp",{"_index":2005,"t":{"505":{"position":[[1063,3],[1139,5],[1188,3]]},"1365":{"position":[[273,3],[487,3]]},"1415":{"position":[[0,3],[73,3],[376,3]]}}}],["str",{"_index":2517,"t":{"1279":{"position":[[6,3]]}}}],["strategi",{"_index":1588,"t":{"329":{"position":[[164,11]]}}}],["stream",{"_index":178,"t":{"33":{"position":[[192,7]]},"282":{"position":[[383,6]]},"290":{"position":[[115,7]]},"292":{"position":[[252,7],[316,6],[344,6],[378,6],[713,7]]},"337":{"position":[[2088,7],[2178,7],[2396,6]]},"347":{"position":[[284,7]]},"377":{"position":[[817,7]]},"409":{"position":[[125,7]]},"411":{"position":[[170,7],[218,6],[264,8],[285,7],[357,6],[465,6],[579,6],[643,8],[798,7],[817,6],[829,8],[866,8],[1204,7],[1236,6],[1248,7],[1280,7],[1311,6],[1323,7],[1359,7]]},"413":{"position":[[0,7],[43,7],[140,6],[552,6],[680,6],[740,6],[764,6],[801,6],[946,6],[1048,7]]},"415":{"position":[[1659,7],[1749,6],[1805,7],[1872,7],[1904,6]]},"419":{"position":[[102,8],[339,7],[475,7]]},"468":{"position":[[2872,6],[2895,6],[4051,7],[4142,6],[4285,7]]},"517":{"position":[[827,6]]},"545":{"position":[[111,8]]},"589":{"position":[[68,6],[584,6],[833,6],[1035,6]]},"597":{"position":[[355,7]]},"634":{"position":[[860,7]]},"647":{"position":[[103,8],[129,6],[237,6],[351,6],[415,8],[570,7],[602,6],[614,7],[646,7],[677,6],[689,7],[725,7]]},"649":{"position":[[107,8],[344,7],[582,7]]},"653":{"position":[[336,7]]},"920":{"position":[[521,7],[540,6],[552,8],[589,8],[1261,7]]},"935":{"position":[[588,6]]},"1021":{"position":[[33,6]]},"1053":{"position":[[167,6],[233,6],[420,6],[458,6],[908,6],[1214,6]]},"1055":{"position":[[71,6],[343,6],[526,6],[544,6],[575,6],[600,6],[623,6]]},"1057":{"position":[[97,6]]},"1066":{"position":[[30,6],[95,6],[299,6]]},"1083":{"position":[[24,7],[77,7]]},"1085":{"position":[[206,8]]},"1087":{"position":[[248,7],[267,6],[279,8],[316,8],[469,7],[501,6],[513,7],[545,7],[576,6],[588,7],[624,7]]},"1089":{"position":[[170,7]]},"1091":{"position":[[17,7]]},"1097":{"position":[[349,6],[477,6],[537,6],[561,6],[598,6],[743,6],[845,7]]},"1099":{"position":[[249,7],[268,6],[280,8],[317,8],[655,7],[687,6],[699,7],[731,7],[762,6],[774,7],[810,7]]},"1101":{"position":[[171,7],[307,7]]},"1129":{"position":[[17,7]]},"1131":{"position":[[115,7],[158,7],[255,6]]},"1133":{"position":[[98,8],[124,6],[232,6],[346,6]]},"1135":{"position":[[102,8]]},"1177":{"position":[[335,7]]},"1213":{"position":[[141,7]]},"1234":{"position":[[907,6],[991,7],[1205,7],[1237,6],[1249,7],[1281,7],[1312,6],[1324,7],[1360,7]]},"1236":{"position":[[32,7]]},"1273":{"position":[[473,7]]},"1279":{"position":[[22,6]]},"1310":{"position":[[52,7]]},"1334":{"position":[[416,6],[499,6]]},"1337":{"position":[[44,6],[105,7],[167,7]]},"1339":{"position":[[119,7]]},"1343":{"position":[[1397,7]]},"1345":{"position":[[19,7],[69,6],[474,6]]},"1350":{"position":[[672,7]]},"1354":{"position":[[288,7],[385,7]]},"1363":{"position":[[202,7]]},"1367":{"position":[[360,7]]},"1371":{"position":[[19,6]]},"1407":{"position":[[29,7]]},"1425":{"position":[[355,6]]},"1427":{"position":[[296,7]]},"1436":{"position":[[383,7]]},"1445":{"position":[[52,7]]},"1450":{"position":[[307,9]]},"1457":{"position":[[228,7]]}}}],["stream/calendar",{"_index":2238,"t":{"1055":{"position":[[493,15]]}}}],["stream_day",{"_index":614,"t":{"91":{"position":[[715,11],[914,10]]},"589":{"position":[[342,11],[414,10],[845,11]]},"591":{"position":[[107,11]]},"593":{"position":[[149,10],[215,10],[354,10]]},"699":{"position":[[139,11]]},"701":{"position":[[54,10]]},"1035":{"position":[[115,10]]},"1037":{"position":[[199,11]]},"1039":{"position":[[129,10]]},"1055":{"position":[[203,10],[268,10]]},"1457":{"position":[[314,11]]}}}],["streamcondit",{"_index":2673,"t":{"1334":{"position":[[426,16]]},"1345":{"position":[[455,15]]}}}],["strict",{"_index":1369,"t":{"217":{"position":[[63,6]]}}}],["strike",{"_index":3206,"t":{"1475":{"position":[[416,6]]}}}],["string",{"_index":2255,"t":{"1185":{"position":[[21,7],[41,8]]},"1234":{"position":[[951,6]]},"1367":{"position":[[695,7]]},"1505":{"position":[[731,7]]}}}],["strive",{"_index":3274,"t":{"1497":{"position":[[107,6]]},"1499":{"position":[[58,6]]}}}],["strong>text/[opt",{"_index":3235,"t":{"1477":{"position":[[101,15]]}}}],["typer",{"_index":3000,"t":{"1367":{"position":[[1285,5]]}}}],["typic",{"_index":983,"t":{"137":{"position":[[310,9]]},"219":{"position":[[823,10]]},"261":{"position":[[171,9]]},"363":{"position":[[594,9]]},"401":{"position":[[16,9]]},"435":{"position":[[185,7]]},"468":{"position":[[1091,9]]},"477":{"position":[[233,9]]},"479":{"position":[[182,9]]},"837":{"position":[[283,9]]},"896":{"position":[[98,9]]},"908":{"position":[[362,9]]},"1057":{"position":[[362,9]]},"1452":{"position":[[264,10]]}}}],["typing
  • list",{"_index":3218,"t":{"1475":{"position":[[761,12],[891,12]]}}}],["ultra_dri",{"_index":1860,"t":{"437":{"position":[[64,9]]},"441":{"position":[[255,9]]}}}],["ultra_rich",{"_index":1867,"t":{"437":{"position":[[150,10]]}}}],["unabl",{"_index":1030,"t":{"143":{"position":[[865,6]]}}}],["unbias",{"_index":1255,"t":{"181":{"position":[[1130,9]]},"850":{"position":[[122,9]]}}}],["under",{"_index":637,"t":{"95":{"position":[[128,5]]},"103":{"position":[[330,5]]},"107":{"position":[[70,5]]},"111":{"position":[[344,5]]},"143":{"position":[[151,5],[336,5]]},"160":{"position":[[444,5]]},"166":{"position":[[308,5]]},"202":{"position":[[331,5],[593,6],[643,5],[1574,5]]},"206":{"position":[[40,5]]},"219":{"position":[[1862,5],[2175,5]]},"245":{"position":[[292,5]]},"259":{"position":[[282,5],[310,5],[497,5]]},"261":{"position":[[458,5]]},"276":{"position":[[29,5]]},"284":{"position":[[36,5],[153,5]]},"294":{"position":[[152,5]]},"306":{"position":[[124,5],[296,5]]},"311":{"position":[[67,5],[245,5]]},"381":{"position":[[1314,5]]},"403":{"position":[[341,5]]},"407":{"position":[[227,5]]},"411":{"position":[[21,5]]},"421":{"position":[[773,5]]},"425":{"position":[[10,5]]},"431":{"position":[[869,5]]},"604":{"position":[[283,5]]},"679":{"position":[[350,5]]},"686":{"position":[[183,5],[287,5],[457,5]]},"833":{"position":[[0,5]]},"857":{"position":[[175,5],[267,5],[443,5]]},"896":{"position":[[297,5]]},"920":{"position":[[118,5]]},"925":{"position":[[50,5]]},"1085":{"position":[[126,5]]},"1105":{"position":[[687,5]]},"1138":{"position":[[43,5]]},"1145":{"position":[[51,5]]},"1152":{"position":[[86,5]]},"1231":{"position":[[971,5]]}}}],["underscor",{"_index":389,"t":{"52":{"position":[[3452,10],[3588,10]]}}}],["understand",{"_index":278,"t":{"44":{"position":[[403,10]]},"109":{"position":[[155,10]]},"160":{"position":[[505,10]]},"164":{"position":[[155,10]]},"481":{"position":[[417,10]]},"1077":{"position":[[1057,14]]}}}],["understood",{"_index":475,"t":{"61":{"position":[[678,10]]}}}],["undocu",{"_index":3068,"t":{"1384":{"position":[[18,12]]}}}],["unicod",{"_index":146,"t":{"23":{"position":[[209,9]]}}}],["unifi",{"_index":1673,"t":{"363":{"position":[[1170,7],[1251,7]]},"371":{"position":[[441,7]]}}}],["uniform",{"_index":3272,"t":{"1497":{"position":[[47,7]]}}}],["union",{"_index":191,"t":{"35":{"position":[[69,5]]},"505":{"position":[[402,5]]},"511":{"position":[[865,5]]},"1273":{"position":[[1119,5]]}}}],["uniqu",{"_index":298,"t":{"52":{"position":[[28,6],[411,7],[447,6]]},"407":{"position":[[562,6]]},"1253":{"position":[[28,6]]},"1339":{"position":[[57,6]]},"1367":{"position":[[794,6],[822,6]]}}}],["unisim",{"_index":1634,"t":{"357":{"position":[[916,6]]}}}],["unit",{"_index":301,"t":{"52":{"position":[[67,5],[2136,5],[2229,6],[2283,5],[2481,6],[2683,6],[2829,6],[2980,6],[3137,6]]},"91":{"position":[[49,4],[242,4],[639,5],[660,5],[897,5]]},"103":{"position":[[578,6]]},"107":{"position":[[474,6],[638,6]]},"119":{"position":[[284,6],[765,6],[929,6]]},"135":{"position":[[546,6]]},"137":{"position":[[1482,6]]},"145":{"position":[[216,6],[764,6]]},"160":{"position":[[934,6]]},"174":{"position":[[464,6]]},"183":{"position":[[122,5]]},"187":{"position":[[102,6],[121,5],[189,5],[242,4]]},"190":{"position":[[137,5]]},"192":{"position":[[43,5]]},"194":{"position":[[104,6],[123,5],[191,5],[244,4]]},"196":{"position":[[115,6],[276,6],[456,6]]},"200":{"position":[[7,4]]},"210":{"position":[[9,5]]},"219":{"position":[[1333,6]]},"237":{"position":[[533,5]]},"251":{"position":[[7,4]]},"259":{"position":[[490,6]]},"261":{"position":[[220,5],[272,5]]},"327":{"position":[[17,5]]},"335":{"position":[[17,5]]},"353":{"position":[[95,6],[114,5],[182,5],[261,5]]},"355":{"position":[[105,6]]},"359":{"position":[[97,6],[116,5],[184,5],[263,5]]},"361":{"position":[[109,6]]},"363":{"position":[[1374,5],[1421,5],[1668,6]]},"365":{"position":[[253,6],[272,5],[340,5],[419,5]]},"367":{"position":[[182,6]]},"373":{"position":[[181,6],[223,5]]},"375":{"position":[[134,6]]},"392":{"position":[[109,6]]},"394":{"position":[[182,6]]},"396":{"position":[[207,6]]},"413":{"position":[[1407,4]]},"425":{"position":[[275,6]]},"455":{"position":[[591,5],[940,5]]},"471":{"position":[[112,4]]},"561":{"position":[[49,7]]},"589":{"position":[[1029,5]]},"593":{"position":[[449,4]]},"597":{"position":[[25,4]]},"686":{"position":[[225,5]]},"689":{"position":[[99,6]]},"691":{"position":[[102,6],[142,4]]},"693":{"position":[[109,6]]},"699":{"position":[[63,5],[84,5]]},"701":{"position":[[37,5]]},"779":{"position":[[20,4]]},"837":{"position":[[340,5]]},"854":{"position":[[46,6]]},"857":{"position":[[217,5]]},"860":{"position":[[51,6],[81,5]]},"862":{"position":[[47,6],[77,5]]},"865":{"position":[[109,6]]},"896":{"position":[[147,5],[199,5]]},"1029":{"position":[[128,5]]},"1031":{"position":[[81,6]]},"1033":{"position":[[69,6]]},"1035":{"position":[[39,4],[86,4]]},"1037":{"position":[[123,5],[144,5]]},"1039":{"position":[[112,5]]},"1057":{"position":[[270,6],[287,5],[384,5]]},"1069":{"position":[[349,4]]},"1115":{"position":[[224,4]]},"1159":{"position":[[0,5]]},"1162":{"position":[[47,6],[66,5],[134,5],[207,4]]},"1164":{"position":[[51,6],[70,5],[138,5],[217,5]]},"1167":{"position":[[77,6]]},"1169":{"position":[[109,6]]},"1197":{"position":[[339,4]]},"1213":{"position":[[248,6],[326,4]]},"1231":{"position":[[908,5]]},"1234":{"position":[[388,5]]},"1247":{"position":[[134,5]]},"1253":{"position":[[67,5]]},"1258":{"position":[[0,5]]},"1382":{"position":[[59,5]]},"1421":{"position":[[298,4],[352,4]]},"1491":{"position":[[297,4]]}}}],["unix",{"_index":73,"t":{"13":{"position":[[25,4]]}}}],["unknown",{"_index":1948,"t":{"477":{"position":[[863,8]]},"957":{"position":[[164,7]]},"959":{"position":[[102,7]]},"1277":{"position":[[386,7]]}}}],["unless",{"_index":3298,"t":{"1499":{"position":[[868,6],[1070,6]]},"1503":{"position":[[57,6]]}}}],["unnecessari",{"_index":2390,"t":{"1270":{"position":[[170,11]]},"1354":{"position":[[594,11]]},"1365":{"position":[[116,11]]}}}],["unord",{"_index":3216,"t":{"1475":{"position":[[707,11]]}}}],["unrealist",{"_index":1672,"t":{"363":{"position":[[826,11]]},"371":{"position":[[1167,11],[1449,11],[1547,11]]},"481":{"position":[[239,11]]}}}],["unrecogn",{"_index":141,"t":{"23":{"position":[[170,12]]}}}],["unrel",{"_index":3269,"t":{"1493":{"position":[[184,9]]}}}],["until",{"_index":1702,"t":{"381":{"position":[[191,5]]},"468":{"position":[[2317,5],[2950,5]]},"935":{"position":[[455,5]]}}}],["unus",{"_index":2499,"t":{"1277":{"position":[[623,6]]},"1382":{"position":[[216,6]]},"1499":{"position":[[248,6]]}}}],["unwant",{"_index":1687,"t":{"371":{"position":[[101,8]]}}}],["up",{"_index":67,"t":{"11":{"position":[[249,2]]},"52":{"position":[[99,2],[2444,2]]},"152":{"position":[[108,2],[735,2]]},"181":{"position":[[496,2],[761,2]]},"204":{"position":[[28,2],[1405,2],[1579,2]]},"219":{"position":[[586,2]]},"237":{"position":[[921,2]]},"263":{"position":[[25,3],[118,2]]},"345":{"position":[[285,2]]},"349":{"position":[[36,2],[109,2]]},"371":{"position":[[249,2],[544,2]]},"377":{"position":[[705,2]]},"453":{"position":[[72,2]]},"477":{"position":[[713,2]]},"505":{"position":[[551,2]]},"511":{"position":[[1014,2]]},"597":{"position":[[243,2]]},"612":{"position":[[749,3]]},"634":{"position":[[711,2]]},"697":{"position":[[111,2]]},"713":{"position":[[116,2]]},"747":{"position":[[112,2]]},"844":{"position":[[66,3]]},"987":{"position":[[742,3]]},"1253":{"position":[[99,2]]},"1332":{"position":[[133,2]]},"1463":{"position":[[375,2]]},"1493":{"position":[[240,2]]},"1503":{"position":[[186,2]]}}}],["upcom",{"_index":42,"t":{"7":{"position":[[341,8]]},"9":{"position":[[73,8]]},"71":{"position":[[94,8]]},"1341":{"position":[[80,8]]}}}],["updat",{"_index":607,"t":{"91":{"position":[[0,6]]},"93":{"position":[[511,7]]},"695":{"position":[[202,7]]},"749":{"position":[[18,6]]},"1197":{"position":[[209,7]]},"1268":{"position":[[268,6],[303,6]]},"1273":{"position":[[670,6],[894,6]]},"1275":{"position":[[266,6],[337,6],[432,6],[479,6]]},"1277":{"position":[[166,6],[206,6],[698,6],[735,6],[772,6],[813,6],[863,6]]},"1286":{"position":[[118,6]]},"1299":{"position":[[123,6],[169,6]]},"1301":{"position":[[208,6],[285,6],[322,6],[359,6],[392,6]]},"1305":{"position":[[0,6]]},"1312":{"position":[[0,6]]},"1330":{"position":[[0,6]]},"1332":{"position":[[557,6],[608,6]]},"1339":{"position":[[190,6]]},"1341":{"position":[[59,6]]},"1343":{"position":[[1004,6],[1041,6],[1078,6],[1114,6],[1180,6],[1284,7]]},"1352":{"position":[[361,6],[397,6]]},"1354":{"position":[[728,6],[760,6]]},"1365":{"position":[[226,6],[293,6],[328,6],[389,6],[450,6]]},"1367":{"position":[[1357,6],[1428,6]]},"1373":{"position":[[195,6],[349,6]]},"1384":{"position":[[51,6]]},"1386":{"position":[[1190,6],[1241,6],[1284,6],[1331,6]]},"1389":{"position":[[49,6]]},"1407":{"position":[[131,8]]},"1438":{"position":[[365,7]]},"1443":{"position":[[103,6]]},"1457":{"position":[[0,7]]},"1515":{"position":[[19,6]]},"1517":{"position":[[19,6]]}}}],["upgrad",{"_index":2379,"t":{"1268":{"position":[[330,7],[368,7]]},"1288":{"position":[[0,7]]},"1343":{"position":[[1234,7]]},"1393":{"position":[[25,7]]},"1403":{"position":[[25,7]]},"1413":{"position":[[25,7]]}}}],["upload",{"_index":2332,"t":{"1239":{"position":[[303,9],[458,9]]}}}],["upon",{"_index":1766,"t":{"403":{"position":[[470,4]]}}}],["upper",{"_index":385,"t":{"52":{"position":[[3414,5],[3547,5]]},"357":{"position":[[134,5],[272,5]]},"517":{"position":[[401,5]]}}}],["uppercas",{"_index":307,"t":{"52":{"position":[[329,9],[5014,9]]},"967":{"position":[[55,9]]},"1253":{"position":[[329,9]]}}}],["upstream",{"_index":1751,"t":{"401":{"position":[[441,8],[1040,8],[1799,8]]},"403":{"position":[[11,8]]},"405":{"position":[[554,8]]},"415":{"position":[[1268,8]]},"918":{"position":[[173,8]]},"920":{"position":[[960,8]]},"935":{"position":[[544,8]]},"1177":{"position":[[186,8]]},"1515":{"position":[[109,8]]},"1528":{"position":[[810,8]]},"1530":{"position":[[281,8],[305,8],[898,8],[989,8]]}}}],["upstream/downstream",{"_index":1695,"t":{"371":{"position":[[1307,19]]}}}],["upstream/main",{"_index":3356,"t":{"1530":{"position":[[1009,13]]}}}],["upstream_chok",{"_index":1685,"t":{"369":{"position":[[148,14]]},"381":{"position":[[2782,15]]},"405":{"position":[[726,15]]},"417":{"position":[[53,14]]},"433":{"position":[[181,15]]},"655":{"position":[[203,14]]},"657":{"position":[[174,14]]},"920":{"position":[[816,14],[903,14]]},"1005":{"position":[[193,14]]},"1007":{"position":[[139,15]]},"1179":{"position":[[201,14]]},"1181":{"position":[[174,14]]},"1431":{"position":[[300,14]]}}}],["upstream_pressure_control",{"_index":1798,"t":{"411":{"position":[[1591,26]]},"419":{"position":[[545,26]]},"647":{"position":[[957,26]]},"649":{"position":[[652,26]]},"657":{"position":[[147,26]]},"920":{"position":[[169,25],[769,26]]},"1099":{"position":[[1042,26]]},"1101":{"position":[[377,26]]},"1175":{"position":[[47,25]]},"1179":{"position":[[154,26]]},"1181":{"position":[[147,26]]}}}],["upstream_pressure_control/downstream_pressure_control",{"_index":1807,"t":{"415":{"position":[[1131,55]]}}}],["upward",{"_index":1595,"t":{"331":{"position":[[713,7]]}}}],["url",{"_index":2704,"t":{"1339":{"position":[[282,4]]},"1389":{"position":[[70,3]]}}}],["us",{"_index":7,"t":{"2":{"position":[[69,5]]},"7":{"position":[[139,3],[167,3],[330,3]]},"9":{"position":[[43,3],[117,3]]},"11":{"position":[[196,5],[382,3]]},"23":{"position":[[6,4]]},"25":{"position":[[153,5],[341,5]]},"33":{"position":[[113,6]]},"35":{"position":[[1220,3]]},"52":{"position":[[210,4],[234,3],[271,3],[1693,5],[1821,4],[2308,5],[3622,4],[3646,3],[3800,4],[4000,4],[4059,4],[4218,4],[4277,4],[4434,4],[4491,4],[4671,4],[4744,4],[4852,4],[4956,3],[5179,3]]},"54":{"position":[[143,3],[308,4],[509,3],[751,3],[2109,5],[2180,3],[2604,4],[2715,3]]},"61":{"position":[[1018,4],[1450,4]]},"63":{"position":[[117,3]]},"67":{"position":[[816,5]]},"71":{"position":[[36,3],[173,3]]},"73":{"position":[[0,3]]},"78":{"position":[[62,4]]},"93":{"position":[[30,3]]},"97":{"position":[[75,3]]},"103":{"position":[[51,5],[82,4]]},"105":{"position":[[80,4]]},"109":{"position":[[831,5],[885,3]]},"111":{"position":[[442,4],[516,4]]},"117":{"position":[[2862,4],[3255,3],[3344,5],[3762,3],[3851,5]]},"123":{"position":[[225,4],[460,5],[592,4],[991,5],[1076,4]]},"127":{"position":[[35,5]]},"137":{"position":[[199,3],[453,5],[549,4],[585,5],[645,4],[712,5]]},"141":{"position":[[155,4]]},"143":{"position":[[27,4],[664,5],[717,4],[838,5],[946,4],[1065,4],[1293,5],[1806,5],[1831,3]]},"152":{"position":[[467,3],[611,4]]},"160":{"position":[[51,5],[82,4],[349,4]]},"164":{"position":[[1025,5],[1075,3]]},"172":{"position":[[727,4],[794,4],[2749,3],[2838,5],[3212,4],[3557,4],[3624,4]]},"174":{"position":[[1797,4],[1864,4],[2733,4],[2800,4]]},"181":{"position":[[1368,4]]},"185":{"position":[[154,4],[422,5]]},"198":{"position":[[81,5]]},"204":{"position":[[848,3]]},"208":{"position":[[156,4]]},"217":{"position":[[193,3]]},"219":{"position":[[382,4],[513,4],[980,4],[1039,4],[1153,4],[1187,4],[2265,5],[2371,4],[2448,4]]},"237":{"position":[[703,5],[907,4]]},"239":{"position":[[3,5]]},"241":{"position":[[3,3]]},"245":{"position":[[359,5]]},"253":{"position":[[151,4],[308,3]]},"257":{"position":[[118,4],[196,3]]},"261":{"position":[[608,3]]},"263":{"position":[[91,5]]},"265":{"position":[[653,5]]},"272":{"position":[[158,5]]},"274":{"position":[[13,4]]},"284":{"position":[[115,5]]},"294":{"position":[[396,4]]},"306":{"position":[[227,3],[545,4]]},"311":{"position":[[186,3]]},"313":{"position":[[249,4]]},"337":{"position":[[1373,4],[1922,4],[1968,5]]},"349":{"position":[[24,4]]},"351":{"position":[[76,5]]},"357":{"position":[[104,5],[721,5],[832,4]]},"363":{"position":[[29,4],[71,4]]},"371":{"position":[[20,5],[354,5],[658,4]]},"377":{"position":[[174,4],[570,4]]},"381":{"position":[[1083,5],[1253,5],[2644,3]]},"385":{"position":[[477,3]]},"389":{"position":[[426,3],[945,4]]},"401":{"position":[[315,5],[546,4]]},"407":{"position":[[1170,5]]},"413":{"position":[[118,4],[627,4],[1265,4]]},"415":{"position":[[1553,4]]},"417":{"position":[[167,5]]},"423":{"position":[[139,4]]},"433":{"position":[[332,3],[1253,3]]},"435":{"position":[[739,5],[838,4]]},"449":{"position":[[67,4]]},"451":{"position":[[657,4]]},"455":{"position":[[185,5]]},"468":{"position":[[559,5],[2645,3],[2797,5],[2827,4],[3043,3],[3440,3],[3786,5],[3814,3],[4192,3]]},"471":{"position":[[167,3]]},"475":{"position":[[163,4]]},"479":{"position":[[98,5],[248,5],[518,5],[606,4],[737,3],[799,3]]},"483":{"position":[[442,6],[585,5]]},"493":{"position":[[17,4],[81,4]]},"495":{"position":[[0,5],[286,5]]},"497":{"position":[[25,5]]},"499":{"position":[[199,4]]},"517":{"position":[[24,4],[1025,5]]},"525":{"position":[[409,4]]},"533":{"position":[[116,4],[149,5],[173,3]]},"541":{"position":[[76,4]]},"549":{"position":[[103,5],[296,3]]},"557":{"position":[[28,4]]},"579":{"position":[[0,4]]},"589":{"position":[[981,4]]},"604":{"position":[[5,5],[247,5],[277,5],[321,5]]},"612":{"position":[[1088,3]]},"618":{"position":[[0,4],[100,5]]},"624":{"position":[[299,3]]},"634":{"position":[[604,4]]},"653":{"position":[[16,4],[105,4]]},"659":{"position":[[347,3]]},"679":{"position":[[5,5],[252,5],[344,5],[389,5]]},"686":{"position":[[32,4],[157,4]]},"695":{"position":[[300,5]]},"697":{"position":[[99,4]]},"705":{"position":[[0,4],[62,5]]},"711":{"position":[[371,3]]},"713":{"position":[[104,4]]},"729":{"position":[[50,3]]},"747":{"position":[[100,4]]},"753":{"position":[[87,4]]},"761":{"position":[[150,4],[385,5]]},"763":{"position":[[35,5]]},"775":{"position":[[26,4],[78,4],[300,5]]},"779":{"position":[[72,4]]},"790":{"position":[[0,4]]},"805":{"position":[[51,4],[134,4]]},"813":{"position":[[37,5]]},"821":{"position":[[81,4],[238,3]]},"825":{"position":[[0,4]]},"857":{"position":[[26,4],[149,4]]},"869":{"position":[[198,4]]},"877":{"position":[[18,4]]},"884":{"position":[[8,3],[80,4]]},"886":{"position":[[43,3]]},"888":{"position":[[16,4]]},"890":{"position":[[16,4]]},"892":{"position":[[16,4]]},"908":{"position":[[255,5]]},"918":{"position":[[119,4]]},"920":{"position":[[78,4]]},"935":{"position":[[692,5]]},"941":{"position":[[53,4],[267,3]]},"949":{"position":[[0,4]]},"957":{"position":[[36,4]]},"961":{"position":[[289,4]]},"975":{"position":[[0,4],[218,5],[557,4],[814,4],[895,4],[1024,4]]},"977":{"position":[[89,3]]},"979":{"position":[[99,5],[168,3]]},"981":{"position":[[91,3],[183,3]]},"983":{"position":[[93,3],[189,3]]},"985":{"position":[[171,5],[230,3],[379,3]]},"987":{"position":[[1081,3]]},"1021":{"position":[[0,4],[136,5]]},"1029":{"position":[[12,4],[32,4],[90,5],[110,4],[184,4]]},"1043":{"position":[[0,4]]},"1053":{"position":[[1146,5],[1256,4],[1356,4]]},"1055":{"position":[[437,3]]},"1066":{"position":[[89,3]]},"1069":{"position":[[99,5],[176,3]]},"1077":{"position":[[197,5]]},"1085":{"position":[[121,4],[160,4]]},"1093":{"position":[[16,4]]},"1097":{"position":[[424,4]]},"1115":{"position":[[0,4],[98,5],[156,5],[183,4]]},"1123":{"position":[[0,4]]},"1131":{"position":[[233,4]]},"1152":{"position":[[5,5]]},"1173":{"position":[[16,4],[54,4],[92,3],[203,5]]},"1177":{"position":[[16,4],[105,4]]},"1185":{"position":[[117,5]]},"1197":{"position":[[489,3]]},"1213":{"position":[[696,3],[893,5]]},"1217":{"position":[[232,5]]},"1224":{"position":[[1991,3],[2236,5],[2273,3]]},"1226":{"position":[[186,5]]},"1229":{"position":[[1029,4],[1073,3],[1868,5],[2081,3]]},"1231":{"position":[[44,4],[386,3],[411,3],[469,4],[781,5]]},"1236":{"position":[[547,5],[637,3],[1198,5],[1311,5]]},"1243":{"position":[[221,3]]},"1247":{"position":[[343,4]]},"1253":{"position":[[210,4],[234,3],[271,3]]},"1255":{"position":[[49,3],[214,4]]},"1273":{"position":[[1101,3],[1135,3],[1191,5]]},"1277":{"position":[[240,3],[890,3]]},"1303":{"position":[[52,3]]},"1334":{"position":[[541,3],[595,3]]},"1339":{"position":[[252,3]]},"1343":{"position":[[1145,3]]},"1345":{"position":[[542,3]]},"1350":{"position":[[1011,3]]},"1356":{"position":[[899,3],[943,3],[994,3]]},"1367":{"position":[[1050,5],[1331,3]]},"1369":{"position":[[251,4],[407,3]]},"1378":{"position":[[109,3]]},"1415":{"position":[[58,3],[255,5]]},"1417":{"position":[[124,5]]},"1438":{"position":[[429,5]]},"1447":{"position":[[73,5],[245,5]]},"1454":{"position":[[189,4]]},"1461":{"position":[[71,5]]},"1463":{"position":[[123,5],[416,3],[503,3],[720,4]]},"1465":{"position":[[34,3]]},"1467":{"position":[[271,4],[409,3]]},"1469":{"position":[[49,5],[115,5],[160,5]]},"1471":{"position":[[11,4]]},"1475":{"position":[[14,3],[1218,5]]},"1477":{"position":[[734,4]]},"1491":{"position":[[126,3],[181,3]]},"1497":{"position":[[3,3]]},"1499":{"position":[[101,3],[260,3]]},"1501":{"position":[[280,3]]},"1505":{"position":[[35,4],[220,4],[305,3]]},"1511":{"position":[[155,3]]},"1517":{"position":[[176,5]]},"1525":{"position":[[50,3]]},"1528":{"position":[[442,5]]},"1530":{"position":[[725,5],[1243,3]]}}}],["usabl",{"_index":2347,"t":{"1245":{"position":[[89,10]]}}}],["usag",{"_index":640,"t":{"97":{"position":[[103,5]]},"107":{"position":[[43,5]]},"172":{"position":[[301,5]]},"179":{"position":[[261,5]]},"181":{"position":[[7,5],[92,6]]},"185":{"position":[[380,5]]},"204":{"position":[[257,5],[438,6],[505,5],[627,5],[781,5],[795,5],[974,6]]},"208":{"position":[[414,5]]},"219":{"position":[[541,5]]},"257":{"position":[[587,5]]},"265":{"position":[[792,5]]},"276":{"position":[[371,5]]},"282":{"position":[[18,5],[56,5],[205,5],[417,5]]},"290":{"position":[[12,5]]},"304":{"position":[[111,6]]},"306":{"position":[[51,6]]},"337":{"position":[[911,5]]},"339":{"position":[[269,5]]},"371":{"position":[[75,5]]},"405":{"position":[[396,5]]},"415":{"position":[[181,5]]},"431":{"position":[[492,5]]},"435":{"position":[[24,5]]},"455":{"position":[[286,5],[884,5]]},"461":{"position":[[236,6]]},"468":{"position":[[2766,5]]},"503":{"position":[[156,6]]},"505":{"position":[[34,6],[1453,6]]},"507":{"position":[[48,6]]},"509":{"position":[[53,6]]},"511":{"position":[[68,6],[485,5]]},"513":{"position":[[68,6]]},"525":{"position":[[86,5],[151,6],[270,5],[498,5]]},"533":{"position":[[76,5]]},"549":{"position":[[11,5]]},"573":{"position":[[84,5]]},"575":{"position":[[91,5],[193,5],[295,5]]},"589":{"position":[[253,5]]},"665":{"position":[[0,5]]},"733":{"position":[[64,5]]},"747":{"position":[[11,5],[66,5],[226,6],[252,5],[391,5],[678,5],[712,5]]},"753":{"position":[[103,5],[187,5],[216,5]]},"755":{"position":[[34,5]]},"763":{"position":[[464,6]]},"790":{"position":[[54,5]]},"821":{"position":[[391,6]]},"825":{"position":[[28,5]]},"833":{"position":[[403,6]]},"871":{"position":[[88,5]]},"873":{"position":[[106,5],[194,5],[313,5]]},"896":{"position":[[439,6]]},"949":{"position":[[28,5]]},"971":{"position":[[0,5],[43,5]]},"985":{"position":[[26,5],[263,5]]},"1043":{"position":[[55,5]]},"1053":{"position":[[34,5]]},"1055":{"position":[[39,5],[103,5]]},"1111":{"position":[[320,6]]},"1213":{"position":[[476,5]]},"1224":{"position":[[57,5],[809,5]]},"1231":{"position":[[887,5]]},"1234":{"position":[[93,5]]},"1236":{"position":[[1338,5]]},"1273":{"position":[[279,5]]},"1277":{"position":[[537,5]]},"1343":{"position":[[343,5]]},"1367":{"position":[[342,5]]},"1386":{"position":[[975,5]]}}}],["usage/emiss",{"_index":2025,"t":{"517":{"position":[[1079,15]]}}}],["used,th",{"_index":2065,"t":{"589":{"position":[[187,8]]}}}],["user",{"_index":26,"t":{"7":{"position":[[69,5]]},"33":{"position":[[229,5]]},"44":{"position":[[394,5],[510,4]]},"54":{"position":[[1386,4],[2629,6],[2697,4]]},"63":{"position":[[217,5],[339,4]]},"65":{"position":[[257,5]]},"84":{"position":[[907,4]]},"86":{"position":[[109,4]]},"219":{"position":[[40,4]]},"226":{"position":[[446,5]]},"241":{"position":[[176,4]]},"265":{"position":[[180,4]]},"272":{"position":[[56,4]]},"339":{"position":[[50,4],[127,4]]},"381":{"position":[[305,4]]},"383":{"position":[[424,4]]},"431":{"position":[[768,4]]},"455":{"position":[[776,4]]},"481":{"position":[[175,4]]},"1053":{"position":[[1331,4]]},"1229":{"position":[[422,5]]},"1234":{"position":[[1510,4]]},"1343":{"position":[[1321,4]]}}}],["user.email",{"_index":3335,"t":{"1509":{"position":[[60,10]]}}}],["user.nam",{"_index":3334,"t":{"1509":{"position":[[20,9]]}}}],["usual",{"_index":1472,"t":{"243":{"position":[[200,7]]},"669":{"position":[[249,7]]}}}],["utf",{"_index":144,"t":{"23":{"position":[[202,4]]},"25":{"position":[[206,4],[225,3]]}}}],["util",{"_index":3071,"t":{"1386":{"position":[[22,5]]}}}],["utilis",{"_index":973,"t":{"135":{"position":[[382,9]]},"137":{"position":[[288,9]]},"143":{"position":[[191,7]]},"259":{"position":[[38,7]]},"371":{"position":[[1504,8]]},"481":{"position":[[1061,8]]},"753":{"position":[[148,9]]},"918":{"position":[[25,8]]},"1069":{"position":[[520,8]]},"1083":{"position":[[101,8]]},"1085":{"position":[[25,8]]},"1131":{"position":[[25,8]]}}}],["v1",{"_index":2548,"t":{"1297":{"position":[[85,2]]},"1380":{"position":[[24,2]]}}}],["v2",{"_index":2285,"t":{"1226":{"position":[[80,2]]},"1273":{"position":[[667,2]]},"1275":{"position":[[225,2]]},"1301":{"position":[[265,2]]},"1326":{"position":[[134,2]]},"1334":{"position":[[225,2],[496,2]]},"1337":{"position":[[27,2],[76,2]]},"1339":{"position":[[80,2]]},"1343":{"position":[[1128,2]]},"1345":{"position":[[152,2],[428,2]]},"1348":{"position":[[163,2],[232,2]]},"1350":{"position":[[11,2],[68,2],[267,2],[421,2],[510,2],[557,2],[803,2],[987,2],[1082,2]]},"1356":{"position":[[714,2],[839,2],[886,2]]},"1369":{"position":[[16,2]]},"1376":{"position":[[53,2]]},"1380":{"position":[[30,2]]},"1386":{"position":[[58,2],[536,2]]}}}],["v3",{"_index":2284,"t":{"1226":{"position":[[23,2]]},"1277":{"position":[[187,2]]}}}],["v5.3.1",{"_index":623,"t":{"93":{"position":[[275,6]]}}}],["v7",{"_index":292,"t":{"50":{"position":[[76,2]]}}}],["v7.1",{"_index":2028,"t":{"517":{"position":[[1282,4],[1325,4],[1407,4],[1500,4]]}}}],["v7.2",{"_index":2027,"t":{"517":{"position":[[1183,5]]},"886":{"position":[[129,5]]}}}],["v7.4.1",{"_index":2325,"t":{"1236":{"position":[[1011,6]]}}}],["v7.4.2",{"_index":2328,"t":{"1236":{"position":[[1161,6],[1280,6]]}}}],["v7.4.3",{"_index":2330,"t":{"1236":{"position":[[1465,7]]}}}],["v8",{"_index":293,"t":{"50":{"position":[[82,3]]},"54":{"position":[[606,2]]},"59":{"position":[[76,2]]},"1245":{"position":[[7,2]]}}}],["v8.0",{"_index":2029,"t":{"517":{"position":[[1581,4],[1662,4]]},"1393":{"position":[[38,5]]}}}],["v8.1",{"_index":461,"t":{"59":{"position":[[82,5]]},"423":{"position":[[151,4]]},"517":{"position":[[1780,4]]},"906":{"position":[[40,5]]},"1393":{"position":[[7,4]]},"1413":{"position":[[38,5]]}}}],["v8.2",{"_index":2030,"t":{"517":{"position":[[1838,4],[1901,4]]},"1403":{"position":[[38,5]]},"1413":{"position":[[7,4]]}}}],["v8.3",{"_index":2846,"t":{"1352":{"position":[[382,4]]},"1403":{"position":[[7,4]]}}}],["v8.4",{"_index":2711,"t":{"1341":{"position":[[97,4]]},"1352":{"position":[[145,4]]}}}],["v8.6",{"_index":2653,"t":{"1332":{"position":[[578,4],[636,4]]}}}],["v8.7",{"_index":2088,"t":{"624":{"position":[[22,4]]},"1266":{"position":[[120,4]]}}}],["v8.8",{"_index":2096,"t":{"659":{"position":[[22,4]]},"695":{"position":[[23,5]]},"703":{"position":[[22,4]]},"711":{"position":[[22,4]]},"1029":{"position":[[178,5]]},"1197":{"position":[[46,5]]},"1299":{"position":[[139,4]]},"1421":{"position":[[231,5]]}}}],["v_\\mathrm{1}^n",{"_index":1906,"t":{"468":{"position":[[1176,14]]}}}],["v_\\mathrm{2}^np1​v1n​=p2​v2n",{"_index":1908,"t":{"468":{"position":[[1206,30]]}}}],["valid",{"_index":322,"t":{"52":{"position":[[961,6],[1042,5],[5114,5]]},"61":{"position":[[403,5]]},"84":{"position":[[113,5]]},"86":{"position":[[65,8],[85,8],[159,6],[312,6],[575,8],[1116,8],[1229,8]]},"91":{"position":[[459,5]]},"117":{"position":[[888,5]]},"481":{"position":[[69,5],[122,6],[262,8],[432,10]]},"517":{"position":[[238,5]]},"612":{"position":[[204,5],[443,6]]},"721":{"position":[[769,5]]},"737":{"position":[[13,5]]},"908":{"position":[[13,5],[727,5]]},"987":{"position":[[197,5],[436,6]]},"1035":{"position":[[147,5]]},"1077":{"position":[[734,5]]},"1234":{"position":[[1625,9]]},"1236":{"position":[[233,5],[577,5]]},"1239":{"position":[[256,5]]},"1241":{"position":[[395,8],[488,10]]},"1243":{"position":[[11,10],[60,10],[138,10]]},"1262":{"position":[[26,10],[87,10],[128,8]]},"1264":{"position":[[39,10]]},"1273":{"position":[[971,9],[1180,10]]},"1281":{"position":[[18,10]]},"1332":{"position":[[456,5]]},"1334":{"position":[[26,10]]},"1339":{"position":[[203,10]]},"1345":{"position":[[227,8],[292,8]]},"1354":{"position":[[173,10]]},"1363":{"position":[[36,10],[798,5],[829,10],[901,5],[917,8]]},"1367":{"position":[[462,10]]},"1386":{"position":[[235,5]]},"1443":{"position":[[294,5]]}}}],["valu",{"_index":102,"t":{"17":{"position":[[99,6]]},"21":{"position":[[73,6]]},"54":{"position":[[2019,7]]},"91":{"position":[[221,5],[616,6],[888,6]]},"109":{"position":[[80,6],[344,6],[419,6],[461,6],[504,6],[553,6],[622,6],[686,6],[710,6],[761,6],[786,6]]},"117":{"position":[[3297,5],[3804,5]]},"119":{"position":[[1830,6],[1905,6],[1947,6],[1990,6],[2039,6],[2108,6],[2172,6],[2196,6],[2247,6],[2272,6]]},"137":{"position":[[511,5],[569,5]]},"141":{"position":[[202,6]]},"143":{"position":[[1994,6]]},"164":{"position":[[80,6],[344,6],[479,6],[684,6],[736,6],[810,6],[896,6],[955,6],[980,6],[1246,7]]},"172":{"position":[[2791,5]]},"174":{"position":[[655,6],[790,6],[995,6],[1047,6],[1121,6],[1207,6],[1266,6],[1291,6]]},"181":{"position":[[1065,6],[1175,6]]},"185":{"position":[[109,6]]},"198":{"position":[[383,6]]},"222":{"position":[[149,6]]},"231":{"position":[[233,6]]},"233":{"position":[[333,6]]},"265":{"position":[[663,6]]},"353":{"position":[[368,6],[428,6],[500,6]]},"359":{"position":[[371,6],[431,6],[503,6],[600,6],[660,6],[732,6]]},"371":{"position":[[1192,6]]},"377":{"position":[[450,6]]},"379":{"position":[[366,5]]},"381":{"position":[[1743,5],[2156,5]]},"411":{"position":[[900,5],[1402,5],[1854,5]]},"413":{"position":[[1183,6],[1215,5]]},"425":{"position":[[434,6]]},"455":{"position":[[27,6],[106,5],[200,6],[241,6],[701,6],[839,7],[856,6],[922,5]]},"457":{"position":[[84,5],[131,6],[194,7]]},"468":{"position":[[2211,6]]},"481":{"position":[[705,5],[1048,5]]},"489":{"position":[[28,6],[117,6]]},"491":{"position":[[33,6],[117,6],[152,6]]},"495":{"position":[[67,6],[94,6],[365,6],[411,6]]},"505":{"position":[[568,6],[1052,8],[1225,8]]},"511":{"position":[[1031,6]]},"527":{"position":[[28,7],[52,7]]},"559":{"position":[[10,7]]},"599":{"position":[[369,5]]},"606":{"position":[[174,6],[234,6],[306,6]]},"612":{"position":[[873,6]]},"637":{"position":[[367,5]]},"642":{"position":[[369,5]]},"647":{"position":[[768,5]]},"681":{"position":[[177,6],[237,6],[309,6],[406,6],[466,6],[538,6]]},"686":{"position":[[265,6],[346,6],[424,7]]},"689":{"position":[[179,7]]},"699":{"position":[[40,6]]},"701":{"position":[[28,6]]},"737":{"position":[[264,5]]},"779":{"position":[[9,5]]},"781":{"position":[[8,7]]},"792":{"position":[[30,5]]},"850":{"position":[[58,6],[167,6],[403,6],[429,6],[485,6],[571,6]]},"857":{"position":[[251,6],[326,6],[410,7]]},"877":{"position":[[225,6]]},"884":{"position":[[88,5],[104,5],[127,5]]},"890":{"position":[[49,5],[65,5]]},"892":{"position":[[43,5],[59,5]]},"908":{"position":[[1048,7],[1250,7]]},"922":{"position":[[139,5],[216,5]]},"925":{"position":[[154,5]]},"927":{"position":[[88,5]]},"935":{"position":[[248,6],[525,5]]},"987":{"position":[[866,6]]},"1000":{"position":[[79,6]]},"1035":{"position":[[14,5],[75,6]]},"1037":{"position":[[100,6]]},"1039":{"position":[[103,6]]},"1099":{"position":[[351,5],[853,5]]},"1109":{"position":[[326,5]]},"1115":{"position":[[112,5],[289,6]]},"1138":{"position":[[185,7]]},"1140":{"position":[[82,6]]},"1145":{"position":[[182,7]]},"1147":{"position":[[94,7]]},"1154":{"position":[[84,5],[131,6],[194,7]]},"1224":{"position":[[1968,6]]},"1239":{"position":[[262,5]]},"1328":{"position":[[200,6]]},"1332":{"position":[[379,6]]},"1386":{"position":[[170,6]]},"1505":{"position":[[368,7]]}}}],["value/express",{"_index":2178,"t":{"922":{"position":[[428,17]]},"1117":{"position":[[36,17]]}}}],["valueerror",{"_index":2186,"t":{"935":{"position":[[257,10]]}}}],["valv",{"_index":1244,"t":{"181":{"position":[[558,7]]},"204":{"position":[[1471,6]]},"363":{"position":[[525,6]]},"405":{"position":[[548,5]]},"407":{"position":[[1191,6]]},"468":{"position":[[3803,7]]}}}],["valve)/recircul",{"_index":1362,"t":{"204":{"position":[[1450,20]]}}}],["var.base_production_load_mw",{"_index":789,"t":{"117":{"position":[[297,28]]},"119":{"position":[[2606,28]]}}}],["var.flare_a_fuel_rate_sm3_day",{"_index":831,"t":{"117":{"position":[[3484,30]]},"119":{"position":[[4149,30]]}}}],["var.flare_b_fuel_rate_sm3_day",{"_index":832,"t":{"117":{"position":[[3991,30]]},"119":{"position":[[4585,30]]}}}],["var.flare_fuel_rate_sm3_day",{"_index":1138,"t":{"172":{"position":[[2985,28]]},"174":{"position":[[2492,28]]}}}],["var.gas_export_condit",{"_index":835,"t":{"117":{"position":[[4437,25]]},"119":{"position":[[4741,25]]}}}],["var.gas_export_rate_sm3_per_day",{"_index":804,"t":{"117":{"position":[[1279,32],[4469,32]]},"119":{"position":[[2910,32],[4773,32]]},"172":{"position":[[3498,32]]},"174":{"position":[[2674,32]]}}}],["var.gas_injection_rate_sm3_per_day",{"_index":1127,"t":{"172":{"position":[[665,35]]},"174":{"position":[[1735,35]]}}}],["var.gas_ratea",{"_index":1975,"t":{"495":{"position":[[248,14]]}}}],["var.gas_rateb",{"_index":1976,"t":{"495":{"position":[[267,14]]}}}],["var.hydrocarbon_export_sm3_per_day",{"_index":784,"t":{"111":{"position":[[298,35],[631,35],[789,35]]},"113":{"position":[[415,35]]},"115":{"position":[[351,35]]},"119":{"position":[[2332,35],[4213,35]]},"166":{"position":[[429,35]]},"174":{"position":[[1351,35]]}}}],["var.produced_water_reinjection_condit",{"_index":1128,"t":{"172":{"position":[[1392,41]]},"174":{"position":[[1999,41]]}}}],["var.produced_water_reinjection_total_system_rate_m3_per_day",{"_index":1129,"t":{"172":{"position":[[1467,60]]},"174":{"position":[[2074,60]]}}}],["var.salt_water_inject",{"_index":1978,"t":{"495":{"position":[[418,25]]},"1224":{"position":[[2030,25],[2086,26]]}}}],["var.sea_water_injection_rate_m3_per_day",{"_index":1125,"t":{"164":{"position":[[1280,40]]},"172":{"position":[[2636,40]]},"174":{"position":[[2363,40]]}}}],["var.variable_name1",{"_index":2146,"t":{"817":{"position":[[185,19]]}}}],["var.variable_name2",{"_index":2147,"t":{"817":{"position":[[209,19]]}}}],["var.water_injection_condit",{"_index":821,"t":{"117":{"position":[[2314,30],[3027,30]]},"119":{"position":[[3415,30],[3926,30]]}}}],["var.water_injection_r",{"_index":820,"t":{"117":{"position":[[2277,25]]},"119":{"position":[[3378,25]]}}}],["vari",{"_index":652,"t":{"97":{"position":[[623,7]]},"109":{"position":[[957,7]]},"265":{"position":[[63,4]]},"274":{"position":[[134,6]]},"405":{"position":[[66,6]]},"421":{"position":[[829,7]]},"431":{"position":[[265,7],[303,5]]},"517":{"position":[[590,4]]},"809":{"position":[[40,7]]},"829":{"position":[[91,7]]},"985":{"position":[[452,4]]},"1105":{"position":[[743,7]]},"1115":{"position":[[233,4]]}}}],["variabl",{"_index":651,"t":{"97":{"position":[[507,8],[702,8],[800,8],[995,8],[1168,8],[1342,8]]},"99":{"position":[[192,9],[204,9],[384,10]]},"101":{"position":[[14,10],[164,9]]},"109":{"position":[[46,10],[200,8],[279,10],[301,10],[965,9]]},"111":{"position":[[289,8],[350,9]]},"117":{"position":[[463,8],[1515,8],[1628,8],[1704,9],[3354,8],[3861,8],[4056,8],[4168,8]]},"119":{"position":[[1787,10]]},"123":{"position":[[839,8],[908,9]]},"129":{"position":[[249,8],[400,8],[547,8]]},"133":{"position":[[14,10]]},"143":{"position":[[498,8]]},"152":{"position":[[187,10],[649,9],[668,9],[1089,10]]},"154":{"position":[[346,8],[501,8],[619,8],[812,8],[1086,8]]},"156":{"position":[[162,9],[174,9],[354,10]]},"158":{"position":[[14,10],[164,9]]},"164":{"position":[[46,10],[200,8],[279,10],[301,10],[1321,8]]},"166":{"position":[[289,8],[314,9]]},"172":{"position":[[460,8],[867,8],[982,8],[1075,9],[2393,8],[2600,10],[2848,8],[3029,8],[3136,8]]},"174":{"position":[[612,10],[2327,10]]},"179":{"position":[[35,8]]},"181":{"position":[[201,8],[443,8]]},"185":{"position":[[455,8]]},"190":{"position":[[20,8]]},"198":{"position":[[426,9],[453,8]]},"200":{"position":[[105,8],[186,9]]},"202":{"position":[[485,10],[624,8],[649,9],[1733,10]]},"204":{"position":[[1170,10]]},"219":{"position":[[743,10],[1142,10],[1171,9]]},"222":{"position":[[122,10]]},"226":{"position":[[4,9],[53,8],[466,9],[624,9],[695,9]]},"231":{"position":[[191,10]]},"233":{"position":[[316,10]]},"263":{"position":[[46,9],[171,9],[365,9]]},"272":{"position":[[87,10]]},"284":{"position":[[201,8],[240,8]]},"290":{"position":[[63,8]]},"292":{"position":[[200,8]]},"337":{"position":[[35,8],[1419,8],[1624,8],[2036,8]]},"339":{"position":[[81,10],[164,8]]},"341":{"position":[[152,10],[180,9],[227,9]]},"343":{"position":[[88,10]]},"345":{"position":[[165,10]]},"347":{"position":[[145,8],[194,8],[232,8]]},"349":{"position":[[172,8]]},"357":{"position":[[4,8],[666,8],[729,8]]},"361":{"position":[[620,8],[702,8]]},"367":{"position":[[306,8]]},"377":{"position":[[6,8],[724,8],[765,8]]},"381":{"position":[[318,8],[420,8],[573,8]]},"383":{"position":[[15,8]]},"413":{"position":[[1347,8]]},"421":{"position":[[137,10],[162,11],[335,10],[609,10],[804,9]]},"427":{"position":[[106,9]]},"429":{"position":[[183,8]]},"468":{"position":[[3063,8],[3471,8],[4233,8]]},"485":{"position":[[9,9]]},"487":{"position":[[0,9]]},"489":{"position":[[0,10],[11,9],[64,10],[75,9]]},"491":{"position":[[0,10],[72,10]]},"493":{"position":[[0,9],[108,10]]},"495":{"position":[[6,9],[45,10],[292,9],[322,9],[332,10]]},"517":{"position":[[1214,8]]},"525":{"position":[[553,8]]},"597":{"position":[[64,8],[262,8],[303,8],[445,8],[502,8]]},"634":{"position":[[87,8],[249,8],[767,8],[808,8],[912,8]]},"653":{"position":[[284,8]]},"679":{"position":[[22,8],[86,8]]},"686":{"position":[[377,10]]},"745":{"position":[[311,9]]},"749":{"position":[[362,10],[496,10]]},"811":{"position":[[0,9],[61,9]]},"817":{"position":[[154,8]]},"837":{"position":[[200,8],[272,10]]},"857":{"position":[[357,10]]},"920":{"position":[[1209,8]]},"1105":{"position":[[51,10],[76,11],[249,10],[523,10],[718,9]]},"1111":{"position":[[118,8]]},"1171":{"position":[[0,9]]},"1173":{"position":[[31,9],[118,9],[209,9]]},"1177":{"position":[[283,8]]},"1213":{"position":[[89,8]]},"1224":{"position":[[1111,8],[1512,8],[1575,8],[1868,9],[1935,10],[2000,8],[2124,9]]},"1231":{"position":[[134,8]]},"1236":{"position":[[1236,8]]},"1239":{"position":[[55,8],[130,8]]},"1241":{"position":[[51,8],[502,8],[536,8]]},"1273":{"position":[[426,8]]},"1275":{"position":[[82,8],[383,8]]},"1326":{"position":[[12,9]]},"1332":{"position":[[254,8]]},"1356":{"position":[[588,8]]},"1382":{"position":[[254,9]]},"1421":{"position":[[145,8]]},"1427":{"position":[[250,8]]},"1436":{"position":[[90,8],[306,8]]},"1438":{"position":[[333,8]]},"1450":{"position":[[369,8]]},"1497":{"position":[[197,8]]}}}],["variable + + + + +Search the documentation + + + + +

    Search the documentation

    + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..ceba1edbfd --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://equinor.github.io/ecalc/searchweekly0.5https://equinor.github.io/ecalc/versionsweekly0.5https://equinor.github.io/ecalc/docs/tagsweekly0.5https://equinor.github.io/ecalc/docs/tags/e-calcweekly0.5https://equinor.github.io/ecalc/docs/tags/releaseweekly0.5https://equinor.github.io/ecalc/docs/about/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/cli/faqweekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/library/weekly0.5https://equinor.github.io/ecalc/docs/about/getting_started/yaml/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v7_to_v8weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8_to_v81weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-1_to_v8-2weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-2_to_v8-3weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-3_to_v8-4weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-5_to_v8-6weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8-6_to_v8-7weekly0.5https://equinor.github.io/ecalc/docs/about/migration_guides/v8.7_to_v8.8weekly0.5https://equinor.github.io/ecalc/docs/about/miscellaneous/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/advancedweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/drogonweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/examples/simpleweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/generator_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/pump_modelling/pump_chartsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/sampled_compressor_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/facility_inputs/tabularweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/file_format_and_syntax/expressionsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/fuel_typesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressorweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/compressor_systemweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/compressor_models_in_calculations/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/direct_consumersweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/generator_sets_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/pump_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/installations/tabular_models_in_calculationsweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_charts/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/simplified_variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/single_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/compressor_models_types/variable_speed_compressor_train_model_with_multiple_streams_and_pressuresweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/compressor_modelling/fixed_speed_pressure_control/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/fluid_modelweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/models/turbine_modelingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/time_seriesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/setup/variablesweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/compressor_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/theory/pump_modellingweekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/weekly0.5https://equinor.github.io/ecalc/docs/about/modelling/workflow/generic_workflowweekly0.5https://equinor.github.io/ecalc/docs/about/references/weekly0.5https://equinor.github.io/ecalc/docs/about/references/api/weekly0.5https://equinor.github.io/ecalc/docs/about/references/cli_referenceweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/weekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ADJUSTMENTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CATEGORYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_SYSTEMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/COMPRESSOR_TRAIN_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONDITIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONDITIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONSUMPTION_RATE_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONTROL_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CONTROL_MARGIN_UNITweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CROSSOVERweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CURVEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/CURVESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DIRECT_EMITTERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/DOWNSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EFFICIENCYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ELECTRICITY2FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSION_NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSION_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMISSIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EMITTER_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENDweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENERGY_USAGE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/ENERGYFUNCTIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EXPRESSIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/EXTRAPOLATIONweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FACILITY_INPUTSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FILEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FLUID_DENSITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FLUID_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUEL_TYPESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELCONSUMERSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/FUELRATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/GENERATORSETSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HCEXPORTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HEADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/HEAD_MARGINweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/includeweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INFLUENCE_TIME_VECTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INLET_TEMPERATUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INSTALLATIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INTERPOLATION_TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/INTERSTAGE_CONTROL_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/LOADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/LOWER_HEATING_VALUEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MAXIMUM_DISCHARGE_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MAXIMUM_PRESSURE_RATIO_PER_STAGEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/MODELSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/NAMEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/OPERATIONAL_SETTINGSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/POWER_ADJUSTMENT_CONSTANTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/POWERLOSSFACTORweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/PUMPSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATE_FRACTIONSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/RATE_PER_STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/REGULARITYweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STAGESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STARTweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STREAMweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/STREAMSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/SUCTION_PRESSUREweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TIME_SERIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TOTAL_SYSTEM_RATEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_EFFICIENCIESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_LOADweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TURBINE_MODELweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/TYPEweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/UNITSweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/UPSTREAM_PRESSURE_CONTROLweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/VARIABLESweekly0.5https://equinor.github.io/ecalc/docs/about/references/keywords/VENTING_EMITTERSweekly0.5https://equinor.github.io/ecalc/docs/category/documentationweekly0.5https://equinor.github.io/ecalc/docs/category/guidesweekly0.5https://equinor.github.io/ecalc/docs/changelog/weekly0.5https://equinor.github.io/ecalc/docs/changelog/latestweekly0.5https://equinor.github.io/ecalc/docs/changelog/separatorweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-5-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v7-6-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.0-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.1-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.10-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.2-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.3-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.4-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.5-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.6-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.7-releaseweekly0.5https://equinor.github.io/ecalc/docs/changelog/v8.8-releaseweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/documentationweekly0.5https://equinor.github.io/ecalc/docs/contribute/documentation-guide/markdownweekly0.5https://equinor.github.io/ecalc/docs/contribute/get-startedweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/conventional-commitsweekly0.5https://equinor.github.io/ecalc/docs/contribute/guides/gitweekly0.5https://equinor.github.io/ecalc/weekly0.5 \ No newline at end of file diff --git a/versions/index.html b/versions/index.html new file mode 100644 index 0000000000..7d7e196c3f --- /dev/null +++ b/versions/index.html @@ -0,0 +1,13 @@ + + + + + +Versions | eCalc™ Docs + + + + +

    eCalc documentation versions

    Current version (Stable)

    Here you can find the documentation for current released version.

    NextDocumentationRelease Notes
    + + \ No newline at end of file
  • yt|;v>+BVefT1O_slmt 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�-q?%ckZO8uMasO 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 literal 0 HcmV?d00001 diff --git a/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png b/assets/images/process_compressor_train_multiple_streams-415751902a6078520845f70740eaa1af.png new file mode 100644 index 0000000000000000000000000000000000000000..25dbfc51024d0cc8896201680eb4d3fe345e655e GIT binary patch literal 59154 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 Ybd`DA$CodSqCShf+zHv_gZgg&2e{-c7XSbN literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG b/assets/images/pumpchart_eff-136e9a9dd1af0700084ddf17be0d4453.PNG new file mode 100644 index 0000000000000000000000000000000000000000..efd6e51377eca031930cc6fd5a54007f71914d7f GIT binary patch literal 12910 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 literal 0 HcmV?d00001 diff --git a/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG b/assets/images/pumpchart_head-ec0fc7f624752c8c95bd7c3f828090a3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..302a6588ea0110e02cd6875449793c60a10872ab GIT binary patch literal 14284 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 iPYGCJA?fDs+5Zm>nHLYJNs5dB0000AL zR_>K*+=X0b6mrQLF&49C&Hvl)dH&~|=WP3&=l7hwpWoi?>GfK>Hfw#?`hM1DeJ=0M zP4r&W3C-KF&3qd)Wy+MP2c{l?AWs!cN&SRavC;<<43rE7O*scn8*EVriyRo6RuCSbOtyuuoSa=wdY$z?=R-Sx;qsNhpx}_uuHL|+rFki)BXp^{%vFb+rDJMzNSu}K5e?hw|z~S>I05xveRe$xN7G7 zP1X`eJQplkeQDOh&DZWeEuO8Ww+EFwdZtEFUR|G~!TYwgf9&i(x3Pf#($4O%|d+1fg{=3=$t=8i;v7%maUA9?%KKZg=@ogQ(I)Khn1sK8?4@!2CL4 zd0P9BWp4CO&+2vQ%kFgaH_7kb^?At_gAe;lX zL{Kw=gMT-8bJs&6h|CP3qCO;CeoJ}6s-{s9G>g6y+k$46u8&DN?{$wRQwmQbNZ92a zXm`ABeQmSLQ&<1>wR9`4+a3!e+n`1V;g)?q`OYRaA04tH7I8%ocexCv%Mvd3C>24t z8GH%+x6Ia11kKFG3`r^$5TO$j94iQoq`#@4(Tc4zL@ zFKHUjYrVrAs%C%8ejcV1?iAA&H@nOHp3V{-nbE@{C}@{3hSJ+YaRQ6$QRgD#x9-Rc zmy4i~CzQ?{WW*DZ5kWi^LP7+6l{Ldn!86Rr7D0&-7!1xCLMbBXmoO1z!@`aaH6J4) z68Yfgr3Prf2)g;2!ihp0853(5%_2aaIZdT3!bxiy{uG{UW7Z-__9wX54essoCxN{i z;o#2QOOX10LeYqS0Nm4A$P_{7Tl#wN^D~UeZV2wOoQj1{BcxnKkeM?2?Y6QVo#2sH zEriPskWdHe#M+Kv5rjpGplKp#JcKn0R{J##5+}XqMM{+dvE&7ydy5FFslX{BsLTfg z5BtWH#FLl6<(r5|Lyia{)DUnIaa2dR3z>`rlig8F_3>L`s*8DDEMdeF=2wbDEZ4=_ zRIE+KHjLPEoWxcYTaIGOQS2p&eN(Y-Itc_Jwj9Nlqu6p3TaLer<@khdBhVtMJh5YC zXUqf!_!RR6n;P0wOy<&!Y|RdtaH6AQOD{!7U(|jPFl+kaY6+exz-mPhTwK|K?)GRk zBqTM^RKA`t&43b2k}HtowQj@i$5FyYn8EEN%oiZOQ?PIjyM(DoKaiE58(aLd%X<0j zyC-v0r`M0@2=#2LAJp&vYFjsIwBcl<^qL;4`W-kBaF-9lp8$&agf0BQCZ6^T&M<{w zR>MN;jWfiDm;1@L?1u?YH{*PSQXgWHLqC9F_nfZ7O;w0UhLeFRa> zna@PfYi|*BgeiE=6dq%@NQO~5n@HokkO4gr)o*F&x=V2lt?J0t8 z^b@6&F)zwQB{NHI;S>Vd`!{g^{thm#c#q#dj3IuGCMN37{ zQ`k-f)p@^#;A=olcL9&DNf-ow>4rxc6lZNMaa88-;qd;Ik#+I2i+S|F$^+u4%14IYVTCSp5xqNd&!$5^?4%yB%vN(+%YfP z=HWrZFx{lOQv(HRo^C6%Z@Xtpt**H~MKEsazX_x@fRwP#Gy+rx1r!tS+Sg#8Ijn$o zHB2Fez7G4jV~(*yXPZ~~gcD==uDl{SbSzxDCz!tP$UW?^pM$x86p}W0rG*(-KsnEk zKaW(???ra7Zv4wqBE$+&EY!Ydp(fs&n7{v79*`Sv0F6o&g~&(;rkQ++SU}&wlPJv} z3Tc<;HI*+!B|=YSxt;7VQI>n{;w&yJp-u%XXjUbs17$K>M<=yXOquk`r4*2%!^A6uGiALZBe3hCEU;3n$Y}`ER2VGe zu{fF`>L{~pD2S3tE+10BWXe}Izwh`!^C-8sx}0r3;&!2yZIe?_=T1Hw-l0vr-mv-I z@XI!b68E$fKgmpIUa59wJ0B<&B|bda z1R6H5THRRQMy-XLd1)f(q(=mQ&7ilhajc>AjELY!-N&amt6z8PI2gJ5TAXc_E|A?E zs#Gh2f^Wga=E&zCNx3qF2BVTic%=5RFvA|g22{;Xp8!?IJu<|-!&)r9+Z`FSchU<6 znb^`weBl;C(x=M<)6yJp;HYTwYlJx_>V}~d7bIZ9gw^RPf*4Gtq9rc=8ff$wLw~!m zN3yH`oQ4AHbe9Vq!L7yY^eXPGY?T$=6?LYdL+|dqHK_fDHtB!urr;ldYJ0;RK1rHF8Q|Ol{p#Ji z;)s%Y1@{qx!3yH*2NcK4aJI#ufnryYAS)(^1F86%huG1pDTh`V=GGyH|sj*=gBC%RTCvF!z6rBo0Nm zl9;HxB2BaM8N-Fzk1xBJWP4f9crQz*XYu?;oRtS)7oC)&G}i^!_VJ@N!^&&lJR&<% zM&U_&qBIRF2mszuTuRL{EFKzQN%+^tk#K#hi*9&472BzMJfqrwwR5A(m9Nx2%@V=% z^L(1^r(B+N(Y5rBcW>9+?XsmTBd+!c3jhrntwwxfVUjoHq6k_z;s!fh=AXqXeIDZ` z4ex2bT(e*WLXI7>wbB-Kzt8LQaPiPNFP-*TZ6Esa>(m_kx9^oxCs&t-a>1lCjyv*KH>Ys*BkQvmSw>%C#Pt zKIp`6<0@DOH&cZ7D5GXrJJQ&Pyiy>fDWDLrg?LBhTZtfNhR~WYWR2#rs;xdk_rkRP zkb_kH1yVikH z5`XxU9tE{x309m2#i1Hpz_U<;Ql`QF){j$%%w z>l;Qh`fT~3ejDz&9YR_d6BvB5(+7EW-12=CF0=YG+j+s$={eJUz z8%Z$O!6eowwL)T2>vd!b9s#cKKstLVGT$yrS zRoP;J8KQN&dCV)zaVkf+rq#TbyxiEDM=qP^d|@oeJ8f5OFh)q~u&~SKm?v+HU(5@BZxGbCtx& z%QUk}FHo+s3dkz=b6fnGE?sFpWvfquStC!Wt_pdLxyi6g^2AIWaKdE|0An(lS->`5 zsKfQa7b^3wQA3%Fve}^?ow_@QI!*GqM!KZVLS`s^21iB$)2^~D$VDq+6ESw#1;6&F zPQRrNOv!$Koo8rUTjO2eFT_i`nj=qYvlt&pK};zVMfxK2TsZobBU9QjgHA>jf|t8x zy`5Ifl)=gOuq~xZCQK(uhn5zX7S&6RM;^3nnyz)N;^)>ol8Gs=?#S@!fwRrR){;Au zgNKY^9+~R|hNEya1G5e|KC3r&>tZPqttQh@B5G#MoVs>e6tzApZGDMK=B%XauJ5Bx z-BoyN&Uvxlgj%rL1ltTzF_N;wi$tgfte1o z-R|cV5LwRC@KL~8y-ZBU3SVf;2VZ+Y1m@Jq7(fIzwEoWAl3wJ*P|)FZ9+EVQC3^Ps z2aHAKQOi;{IM^1|XOpC<{f2BGm&DKKD&7rQ$LXTet zHj1x+Av|T9C&D}6ZugLEkAeONSp173rKT*wA;ZmaUuwDiTN{cD=|^+WD~DBb>u`mn z_ALwL{Z*@Xg{I@Xc*Y9$s)1gKpZO+wJSLDBw-C%YoY>RF84~D|FHZLEF&{ z_O+!BJdOS~hu%2pdo9j@*YdE$^4YWUGV0DooSoKf6$zvEFs7Y5D8XA`hedT!TiN`0 zl%JAnu`IY0nO#Jtb#yje)Ys9>d-nYD&T3-`wA3EW4bm65nm!Y(KD6ex$$|;zkU?otWnK_9(iG7#^s>3lX2Czi9(qL|wi3S_ZePN=A z{=lmY8Jsb8Eu9uan)5l&ttjim)9!zv=KD+L>d4g-M>YE>`4vi_QZ%;h$cs5e2 z=Kgi_Me3dv7c=wo=RFL$lc_iF(G>NII@lS&g_Uq|YYuZt(GRqIK9Gq4uDz-fSS(ir z%|3j{S=CUOOh3*7c$_^YWO?^?Zxs^9FmU+_H#cKX&j&kl*Z3SZXv$uS#!-va*INY_ z*c^S8O73;SRlrlvQ0CbVfPS6R1y8U|Xn6So%%;m{@FsVI4d=wo^v_CVN={+MI;ii) zy0lTNtAs|i?BgN#-?3rthw!@-Cpi-mw4MEABb{W_vYs1t!asPTNI`GU~`Mz;Wst*cBRtG;LbZt z^mHt~plW}16QO~BBQpb^!z{BgbxpSSZ)`CvFZ3z3Py6V(q2)mo$Et-{TBL#A9~*Yq zIBdC;nHXOcZ$v+6oRia+LX;FKqLo1f3LK$w$>F&uKbS+2#C)uBYKHp*4t$1z=$$q&TbxGeBdFE&xd zY`Kh5lCn#ti-{I$do?TG@7R`x#}D=(1v$_5G>)Ac*velYaVusbGXC7P!!Bd{n@*Rn zhG1ZO@H!@R`er6 zCS4dM|e)90)g&fw#~EprZUy3h(f}w0^X8? z@2ONQxp;jf;^Oikso}9K{MZ(sug8CrFGP^eTS!Lkpmm!0DMFtICTeBZ7A^G)d+oQL zO~@ygwjJAx`S6zdDofq`aw4nFo1{o{IM8tRm$<$jrG3IE-LlukFC}_~|14_$pFLj; zvHb;MfPYzhT1>0I9&Bb?f}l2(P?L4o7J-C+9Z9xG35&8u;Yhk(=M+kCf#rRD&%QW= z20n7{vrW58UDe`yEu*JcU-qk#T{owDBG;YY={_WN9R>`vK{WSqZX?cU_I*;>2i@7R6A{>JerOMU;s z5x*CmnG{ugUX|B!RfUyRnKB9m1~0nMMFSg_@0U^uDCZ?u1egEBquHY=TNVVCRj2HU zRFkn^kYse_`n*pqY|gN<7D01gV#y-N9Hfr~1i_qobVvlPj-D_> z!wGXrsf<7~K@#lF!;-ayWhh-tH!|KZyGknjOtjLTsPpfTTtj3d|pT!=U z7jbD7jGcc6<|cAUJbhIIxW?>fn45!Eg1Zfo`v(5$M@arCsJTF1$c+7z(<_;6->{rZ5Hk&xvt#n4?!YKcds=;ESiis-b zRPpC8mZ@TyDppit?JqW|#3q&4PW>nR6tVFy_Ne|>KUM5eiQQDO?=J>a#3+>*r4mDb zVmwt0QvY>8YGNJS`5evwX@5?v=C2%5Xn~o4>JL&EvnH2bM}MNZ!0?afWBa4(#gA8_8F$+;2N*Y2R?D{ngutg9~GV zg=_uasIFvVJ-ydT3bvHJf4oL-4Xga1M{p{2_Ki=9x{7;BdK!AG!(JSx&B-NSNwn0^ zzJWeX*(VrvT$lU9y;~u}>noM?UJg7A3A1Z^AGmMdZVSCtQ}#|Z|6xj;@Rsl@NLdP| zUHFJ;<~9tGIl43WGu-yE9L)K3`@f^3G% z!YtxPx&e$i@S=GCfUEM$TwAL@Q~c&ZURA$d0^`70dIlA(wpg+(Ti}N1ULJ7xf*^LONcqF z&U4HjzWCOYD>`T zxtck9Z|dyLkI!6v@c47xm3#H~p4wgCowiIjY0ezy;a%E$d6{OI>qx9HXwDwg?)?CwbE`r-lm$Ebd_^e zck3W=umg47mFvVMV=I_1EKih{=1~IO$OY1Zt#9Q6?}XPRy-&eNT}Lw7JiZKRSibLA zQmMZG-sTR+tgOq91#rLK|7l)}?TAovWob>)=Ihs!w%uB0W0SJyas9IL&D#4;zV<$8 zZmRR{e$ToMj!RpeFq@m*Yae&4s_cH&v-!XWwqj@{_ft@D=P+*kbZuT8>+s%{>-^@d zkdQEMNYS*CzFfMy)H-}`uXXaSRRLP}!snFtx_%m#H~Aw!r}lQ2%9qC>cOR2vdOKak!V@^{z6?j9h6xsyB)bsuZ2;xs1m z>MCA!R#_?ctyd@1GSH8#q>~qtTfgWVxmj#y?zy@mu3DI&yX$SH7Hl|cAM%8RU25Xy z3f0XxLxfs#C}sSM?bo{?2@(g-asuvTQuzltARcQ`E=Ro0ngYt&c+*(r9uwOcr5(7L z)qMEt2UZOO(~!ZH;<*$|({``{_2Iwbu?C~=;dVLLDvz$#!UZo9 zZi#+TXfSAVs5H@v)K%M6M?duF~ zaOf~mwWD^V--YEZZDE}kP*G9>S{lS~zYGs|Z%-R^yAx_}o}92XOsnB`+ujA#P#}~& z@Wo(C&h)dwn+C0HNm?bp5@kdd*dCp@pc^NEN<_E_WoV@JhRe5nSqQ zs|)_yzumTW&B_r}4Lma&sBg5C#TK|0xN zOpP6EOiAu-sfZR>&;)xj1=JS01Ggh`D!WW6w}tHP&LOIEP|YjGa-0K1@pPU`472&L zVx3{LU8}ht|E)R8K#KLTl9+oIe5TgKOA=~9RrP;qFEJ3s8B%su@~NQA!jCi>yC>-J z-lcZAxO>nQALEpa>Xwp2*88$B?&UK3U!FxS4iBQ;91nD!HlYUgs{s-jN+_-}0;6Vl zbSJ)wH9#O&Ww6y$Vy7A(WW;3_#)_c5>{3uE)H@A-f^-g($1NDa$Ut?GG~DOHJAEV`wvFvL7HC+AY)sE_3;A=H@ z?a8kzAamMeHf6+o{fEQ~=&Y6^^S)tEj7G`6IpnQY42AA9s-7N5|?l6YoZeG~2cIIA1l z?amY#e8!ypoC6ihRlW3tkGFWd0Qndo3lKeRHjoNFr*L7ki7s6ht3=6NtTKiwZZ5nt z$_xwTQiEja#%_|NS#QxU4ss=H!`xAPA9rYOU-JH^jdVS3>UfNi%gAVE!+>Q0NZ9s$ zUz?1py4^Q_0M zb31Io*%=+EDHGGw#204r)v+p`2R{?D<1$t7eJFX*ipvbPcTc*D+hUhGeI2ZVtLf^P zA=hnY#UbSqRgK!m-Os49Sa5|`PO`TnKR%=^Q z2@E8Mu-7xNh(!J@5tL{pWWhsC#Z2OS!x$(=*z5s&-DmN zjL7QMZ(WtF5wPJ#TtLT3LlLwYF4OElw;~gU)DSB6Gq@i-p3Q2dHe2y`VN(S2=`tu| zphvKpzTqk6gffb$E%SSel(Xu+Z=d8^ZaGjGyQeYxHuVrsJ~7p`r9CsXZ^2t1IOSws zbVFHW)f_ju`|^$GML&fSv}@wl|VPqV@At$Ct&KmT{$l^f3onQ^|Lp79jX$mH)D zKt@-hZ~d=Lntl28)-e&J&H$-{&FgN1a>C4o{xu_@kl;oLsz9*K0+ERi$IV)SJVri7 z;VVJMiu0W;;kJ>Mk@a8MSE$40#3H!a7_}u5FSuP$@ugXf9W)ePt^vcaJSk)@X`Ix< zg?=S^z5^SLEv2k3r51ht zk@iKGOtuM8k{aIT?RxTIC!?;Zt6)>-7pwAH$HKUD zpc_NdE~jjnu`SXnut;$)&3<0ex}&_XU75+&DfTf+YcGUqkRSJTBDG`*VCyJ^h#<3} zM1S*6k1GXwQJ-#^1-_**SHCefW#968^vm|1<|MkiDnsUU!w&u7_s3SA{bX6SlC9m1 z?TCurL46-{Wz_=woe)^yQIw}m0|(Juj4T3G_$3N^Rq2?W!mVfMhm$AI`WIusA{bcUbx~zV?Ar@^Y?H?TM+CFSLIUL#@(8zV}a_)@2F>Q!EnFCaY`?{sHW6BjV_F6yp z8~QKcsia?DGX1r;QH1KS&Xh%xA7Am4!+)CfF=ypt8l{qrD^ecxt$|Uip_YJ&A*;gd zj0VKjw<uu!gaRrthSm9LnMI+*9VNm--3-|STH{jfVX?H!Zcp|h0&isb4 zOoy*bj9n?vH5=NKcutQX(n+n`GH?lGjSQaze&XbRSNQ>HRp|XuzXI1D& z-IiNe*H}Bz*YfV;hgt6KKL)m&ilFl>Nzfo7VHH{#Y<#Fw=wR7|YjAH%nDIz~*=*`^(A}pc{nMz;xw9)tokJQNqzi?FwO73D|ch9~x8M3SQ zm+M>q_C4s=l}4lYrEnHDcv~)TsKqyM5E&Qy^rUf9!A$V(%9yAP==jAdRVD?%vj}aP zEmxv=aOQh^8ky5nNs(ZLD4CTCyu7@7Vxwe|}cDv`=`pH9ls1h#QQ{GYP3uAe*C{DUR?J2DeHeqo5menad2KK4q3l zA1k4t*X&$d(jsmbR+h0;9H>}u8KH<$nTk10EN`YN&4$zBoY|MwMbV*EkhBHV z7t#=7_7T7xMc5&MIo*%9n#SU%VobqqjPioeMv;r|>E0f|W1C?jPsI(e{KpS2`J|`a znpS>zWmAF0J=zYdd9=G-ndldWp9<>=T~o-CI)o*bb&_g(CM~ZY#gD?pQL;NIKT%q8 zjx7#Qq?}UzCGke$tb_ypQuy-o$INH7)Naizsr^CY+KG@SQ?~*~97uu^@HM_fKCLiO z{YQ%~0}+&xT>hFs;Lf_C@y$*H{h$$r6h9dBF=_4EL2UWv`}-MM0|cs^qr1n?gs-A! zExc~Bz~S@6)tt=AW3Xp3jm^DT|3hXzt+Bn&Ro3@}$C3auUuz$?o=4|-9^V$Oe`{!6 z3l;+4Sms^ZKsxpxB7q8k9#8eJ^w;8z4TvBCnP^p=pBXo1A!Hica9LLnc}~t#^MuM0 zs-nBGo@b|(e0xXyOZ!Um>H;rLXo1>tDMxzK1X9*E=W)vgyEkNDsKK2z9+(Od_W*2Hr9o4Yd(=&E6boWVUC zBy}BZ8r|GUHweOB9e}?}-ac~o)ym+x#0=X0{zF;v!)gZ$ znfUVOMQYA9RVfu|Gd^TE4;L1kDTp(#TM?ria*@)ITwb&aWn45idW0dB{>#vwfCA0C ztsB1NavAdd7eJM-QDSo?kukKdaWp=4gP~Q9Rae57?nSZrVa*vune_u{1}f{nH0`b% zm2&WHl@cuD=4BLS8AJmn>w=6FQtF@+^$|@e4clvt6Wt^_)CGBi1P$%PdT~0rwvhSk^vSYk2?M%oP=o6L9jNpM!TuTS5rUFxR8vi5! zTCJ!}XMgDl-qD!N3ZzOE=yqD#?yp<&98^SwTh)7HDGn`9d?uW5uvDrNyr`ctlJ=i1 zCjDp66BnO~3o8G51(o7=_Md-elcE+Arqp-@wME9au?GPNef&$62(pox)AY`hfnPTU z)se@$fe-!YjkUn61|jySy`TysDwf@v0{P8C9-xt?p-=$ilBQ zF<=fI|5{9)i1?h{>pjS!w4LtY%K(SkvJ6K;;E!+u{Jsld-SsU1#<1Pg75L9etH1O4 z01FV)!ErX zy@FHjV_v&lZr^UVIhNRB*Q#ju@mk9k`EI9k>M=(z=%hM0yjN}Hw@Br?oEwiB+g<57 zJznLwC2t2ydElB{)0x}pk4op<3GKZzOV`cq)Ex^49cNwLdu^XuTS`?5WQWdOjLXy|RAdu?t zk7Jk=f@BW8poa6~BAGnb&fpSK*czqspu0&Y8>zDXN|;_nW88z-)Gd5BTg!Sk;NJ9| zZhwDrf2TvAyw5V-!jF`^XOUaSU4Ow`1!}}=%FN}<&$2FeWGW1dqKOuD>d)dWL5~$& z9`opQkT!A6M+T*ypE`w;IcY1}Yb`)HaHKUjU~P*lGICSO@@rFd)*m}TRvh9H&tCgO zMWHwh^M4P+{E;*ghj@O+NtOS~(2;niwRonrxEIs!I1o_mTL0%=>%S7M#4y0WZivS3 z30wU2VSqo8h_<==SlY9b|PpAD-;=^Ho_xqUSN_9NW7f+ z3}nH3i=ZP+!E>hY7`sI>jMCXe8sCKs05Ho39FNZnHd${Z^^g85O(F5U|5#8!Oy9pA zeJ4k`Kg;>M19TKrjD1q3WG4%w^2x%T#(LCs6_nxaJS$<;%?=`UmDwN(fN0~}8B^ea z5t@StN~_rFhfLC-&=>=m9qLR@urP`}1MV|?&~&#c_lgMeE`{H3APEf@3==OmY*_Ej!TSZfDEo0jt7yeC=1HyO333Nd3FwEAc3YMf~*VI z6wWR9%2B|t!$Bmzm9ZR{{@5OWIQVe;0%4Q12>NLR9{FHZg#{C4<2}MiJ&MpW9q6&M zs%!sD!tl@jEWee=+$%W_0>PjMbkqT1k_Z~;AXbC&gFK!J1jmqZB`~{ZS+?*NGQcEi zNE3;;2ese(|5Q5t*R$>ZEB3fJuqO`ei35AzF%O6Xd*Z;}f5>Qpum6TJ{JzY+-!k9D z`MrO3`%e6P-)F$>zw5n<1AE_xBo_zvelLt$9N7DNIP?D%06=`r_rV+Dz}|P_#ES!a zzhm;AII#D9*n+?1&5M67e!t?t-tQ2x zND~U5`4@7_kPwqum`_rlA+veHKdFl;*K0DrZYW!3sRi>%bGz%gVqU-BfQ26JT@%Ujyd+#yrO}ALo#&f=f<*{Wc|22 z_XW3(N7*O4?XRqH{P1J>%?kOo1Id9{xPI|2n=7kso-@CB>~!Ysb!+!t^;~qyzuuQ-w27J#EL=P^@D+^CP3Gi^ApI=3^pO8+(ufz5$tF~pK^=H) zBekX3Ryb!E6l5!GzknCK0rXw8feV&i~bO zfTn}Lz6C#Lp9tDw4Epj)t?a;`P`Ii*5hR@V0aW^jyaPGWZ_NIQoz@7`qTy;b=)+U; z#t`(mk->rsK%T-@!$mMx?>78ZcEmvLD|_-?O-f5wN9u?kXkCD2f^?IrX=1`n!VY4> zi8)UEss6jH70bB)Rn>@b6&&!dGR$4WKL=;A zUP$FvJ?Ca;Wo2Wp&_3Vz)SDj<+{w)iAj=kHTIr{Q_BbbN&DFG*#QZ>l)58`OtkAj1 zdAgRqIq*iCWPSe`FKTRj^Xr4Tnc0KBMyJ@y1~2sng7&H<9KTs)xqL^;a(%CZxr(tC zvP!!oQ|~-I>zwx}K4pe=UH5LUfavGZueI*w$^7vDciIvE{Xe@7{T{T?`RYSRj)@?x zW?>p-;C3_IcZ3rsT*7+Wf$4PMiB9}1&;iTG5p+cj4sz{TTS=I!E(1UD0=BYmm%XVHB7_qz1<7z!CjI_f*^*bUX)MqK05%i8B>VM>t?SQJ{-3O$5yzx-^Q+^h+h?4`G{em@hNH9AplX)d<<} zj$FU^0e^4iZT>?ftpkhnBAx;_IX)9i`C)7%b$pV;r--03FXm`C3vXkBy1@$+?mG5F zc@yCdN&~NNfMEEBEh+&f#JqzWS0G={!T2>W4KJjJ(yu@r&!-UEN2Uk~Yw8OUZnjPY z9moSde=}(FW|l~(-2#=!hv06|DtBD1T4HS66oz2l;vV7Aei38{I-I>yWr!b0Od&B3 ziN7+j91;sgvFi9UDA(x!y$uNxK>3ea+HN8jC#eWizz9z#+-TZMqNZ->6hQDXH>%+) z!J(`e!Xp-xWk!>3ej1PGpASWpebRj(nPL)VP)XRZ1am}C+Z)ikSJl6I?;g zwgMSgvr%13_`qV`Y)J}-0XxgR8d1J!t9kY3_18=xnDthiYw)MbH6UH1pw^V>m>$<~ z5SVk*pQE;AaCXGh(_$(B_DXcLMo7UVTbH(d#~$ZH*Vdq$<=dj zIz=ROrLXBSQ9_e@YXUg$bh-Yd;zks?>bdX9&82>EpAMXSc9S;B6)rofUH#%{@1B&y zdmq+3=zF~)F?q+W#m|o{EZPaiFi8jl;od6BaW-y7zTAOVS_3YZ5lDjASd9NGCKgGR zK*l3kk9%2nh~k$bsMj(Y=Hvs@`87TEgFl#LA$zQxGO^D82bk+vM#YDRsh-15_)5wE zC|=%XCs+z|*U`aHjBYS_@hAAbEpauI5AIra1_O5f8*e`+Q_}l&B;o7~7H;?xFsZGs z3oa8&D#PHBGx$buUR4M({^?^;*GKkbmy=L{u0CN26`clv%NOzq^%X(C^i8}AqdYl7 znONXR#oUX5+0N7$lfX^CjSuVngk1vT9b;wTuT`)7Dqk@tU4X&?Cmo?qtY$asfelu5 z0@rp`!|3gW@J}D%k)^K@wCyr*a!f3~$Y9~$JlUEm-ZT-kU(^u@@#Md?2TzRUN)SsAg1#qgvc?!`>8~$;ILZ67Z9Ho&ynIarRmW=s);lKy z#-xptpHaBWX~`grNiLJYcRmXjK?#Q~zL@+o43H?00N&i)H6T_QG(Z9l`!Mx1Ty}tG zMMP3VNZ3tJ1rcOi5c`1+Ud69DD3Mr1;sZY~ak(&x!dqM<1AkSa+SQox=YmgQ^Qlw- z62GSqHXn;R!Hay#WeOJ~^C-O4TrzR~Jo(wU-XxcsO~z(LnfDk2iy6d~W?Mq}35+Md z@&ha&W>PVeikVa_NyU;>EJ=T5FHEYe#p+(H?!`9g|1|ag+iX&bB+{8q%^(llMZxU9 zab8s=MVfMg)ZD}AiOAYO?S%Q{t8{79mXmv>z$OvQVn$Z*F*Xo;TFBZ}n4iIXlk+@IQ`o?&lEHMTc%lVA2)GR(kRf!TUe2Ci9$spDrKIy& zWr)j9=rg*;veQko>Z6SfB+o8;?V;c0{QTLTt4q4OW|_W9eO95(56kUae7+2X1?CHt z=_-|;s^@PxVSR_!`Ym~K61_z4-SCxBgw$&{huj^{qNTxS}(tudz?j z?TcIb67#_?x;@*%oHc{?Id=y+Hz&p{le@n4gxQ|^VR2y)K{E#K=}Z;?;1=L^+(W)) zUx}*rAFF$KGg%K^^?C_8tb-R-TBKCxRPTN~KaRZ#C2n_Z9~qR{9$;suFI3wVByD7w zBisDmp|xep9NA8|OcTT`x3VS-$-u|GMp{f6&t>&afIFRrxeEY1xWrbd91DEv?Tkng z-U?FR=7D%)@qDEBLlJ;Pw$e`n?4un??9-Yy4*bv%5FG6crH;5$fpfdWWG(#F!wlaH z1DI(CaE;IW1DufMm4aC21%mPLj!cgP@goH=tp;54oc;|D3BfoZ7FkH*%?6pwvN}XW z6~GA8%_?OGxBdx}dlxCUNEqmfO3aD|@XM!fsKk7=u3!7T;!~R{|vp;&D_!HqX%11uZc?0Gj^j{BhdapLPj+!9LDef}k8(5eINf=9tL?#jq z?1fgW*q6vhuL>sL1aQab4Nlz{EC+vV_EV$`)O*4NGPDSQEv$!>S-=gy_-8vP%PF1N z0IndnC=(?j2!cnG{O30H`S~A!i%)_`vl2DSP#8!+Airb>uEMIH7^iFEF(A$=ypI1U zf>PZLDKsu=d>eTdJb?SD!J{31@|*v$U5P*2R==C)nG{Sywx>>(3P1jC6-YZa3xfx4 zy#w577e;ZOFa$W%R+^Lua!M@e5W25c8x%oTsKe&OBDmQYwIvcSxLr^=-!n-&_`(8B zLAo+g3^JBKKV!!7WN^k;wqWrIcq0BF_$GUeLFT&_BtFD65c9xah6kn%m-0dCOH>Q6 zZL9(G?1}Y*QSy5GfUy4!Jy=8q=|>-fCr+{rlV@A}J(eWc9Xhtf?TypWR?%*q60LM(z zLC=8{xlbr_*xm^YWw1bliL_@Qgk2%%V{pWU6E)O@{t$g*Z+RC(Mjpz@)zcLhJlhiZl?#X}Hj_(86FFU8W064H-8c&LAG@*^xDkiOYL5TgcEyJOALRH< zUdcQXhD?%YaI1?nu1-rPUcDI-LHmA5D%ZJI_qUe7c^qUwl|jUZj>Gdr5JN^Mf%p^KYkvd{CR1wSb@TvToiRutCepvDmA=6Q?lPICe z;I>GWrA-+!wMd5+&iRJ@zR9(R1B~Ij^qm6#0k_DCF7Djhx#zm;sV6FhB+z1~3B&}I znVGi21Q0VqMz_%YSYHim^evsr^4?wJu;;ocF++^EaHV&ZZmmA6GQVVKU!!-S)4sg0 zQj1#sh!qvfhO%|7_7o*Z8A(a4U7A;r7pLP(yC1i8^AzGC1tdOqq6|zOE|+!n;H`mM zl=*JRvBf@__zuh*t(Hat)X3kbw z5?^&K+6udawQ|N7MM|z-m=l*0U<_R0`SvjiCL~^NP&P}l|J)}B*V!Yt&%G`o=BEum zx!!jAgR1M#cVx!C2GHE^1a-GKr|YIKiS+diQ8)i7VfJqGh1FGx&Y!{#G#_3kdsAi6 z>g%%%bm1$N#pG5JKSvms6kyfd&%cd~lV6pL6`N|7c@o&6@XmzhBSG>-nPk55yO}dr#ieQTFA1U+nlhKz!r= z+*fv1W;7`Vok9R}vhXxuzuaiwSXHs=C>FNI*zk~PfUlmtLeFxGUDfrn8c%G*9%{sRy2q8A zZ`gc>wmRxfLfk4#F(r}Y-zi*VzQN!MipkrMNr58eUCmD3#c(h>~7JKcrZ&1M(&x;HC85`xYqeRwv?w8iGGX0wa7L0}w-4^np_R5Q9#QgrLM(5pM8s%poZ|K%m0I*fTvjA4Huu)2s@?}j zyDq;@H`4!v6@|s;x=(NZIeo+4FNYb%dLIk+K|Rno4^9cMxdD2yb(G(Hi_49KDQnIu zK4l*?Id;D4Iq8k7+bxbKD1TuU${9k*Bkbu1ns{P8w_>gNgCMCf>AhnMwJxtOhaqlD z^o6E)#d>IkiJH%>KBwHLTGJV(MF+ZU8!6B^QC;d2D>-p6*s;0vV|DdFMe_PB?`x&t ziDZpHAi0EphdZ!Xn+7VneQ*odO&Tug%YP5*ITv%#N-_F~_tx|L=}UJ{_Q&{VOqjhs zsCDW?-vD)h7D4iD4;N?jDrX(c`MKnCRj$a$-U83|aHs3J)0F+4c~ZL;ciug6Ysmc8 zslHsXY7b0tm}xVsO;CV%LnPp8Pmvb_pL=a3RgAKkG&;t`Pe8B-lepa2j1#}X1>KBT zWFgcBY+YALfvHQzP9K^oQmZGlI-ERsF7usbE@E#{z5KY-tAISDOlE-PwfGfUKwga; z9>OJ1UG*t$*Oic)Tr3>GtE-$?66)g(s~g zIZgUu*}1Xlg(KY#I_^!nXri!SQ2#6|Tvf^)TXwe0`3C#hP@~ap&rkAC954Qquv3#K z*jQkGseA3wtUbpVN4cAWy0$}7A8u{EzA>lMl z00Mp_pwS3KKpf5!h=E|tZy4~T@GlaIbFo4h@k8Q*-6T-xU#VI5`Q|?r`fG!@KWWg>N>eR zU$QAr$0s;?n{~Sby0#l#m3jQl$`q|fUiRHzcdRF^d(|@5ykY?wj-CN1$_P5aQq=y) zdO`2gEe&2n{$YbUog(5*RxayGpeR@Q1dkU|_^Kd}C30Bx zmG$(tr!k=JUz->Y@%BK77WKu6075Ku5*KT-v7_Kk+;eJeDQ||k-%oq!m7%2@FVY## zDEE~(bi6Pp$Kk#Cl{@TMaa?kZ0TMDa8Ik%PTZJUD6M;XbJ~=16B@*@J6!_FVAE>bF zs|(R|dHRHYEsvb9QGVP|JatYaKcY5M)n%aAj`$KLNtHqR8BT^V zC019OO0UfxtaOJ?Y;phYVCmQEDzjn%wyJ9?@lT_r**vljsJwyWu~yy0IPDJVELeuF z=aprh)o|~`q-jx}Te!d)|Bh3Q${36uR8sJ&@+&_bg{tYQax4e15Fofj}h zjgE5@{VG&qGqIdUw5{;)+>F{~NFWT3igD7#b%jZN1O`jqa>=Phii10=?!1^2am~KD z8`sSIQ)o??g2;pAU4z;_!CIaQA3!JYk(d_i7#IHqxET-uGL}HNZt*`S7QI=nc9Vo!>MA$w)kRjyT1+)v^{hol z_AJVw@qR_t3EZ%5R`Jm%mV#ZB4mu87tX=hqqfL<~yTUV9^+ry4d|T&Sjb~iur$1or zIom66DVQi|DDBf_21pfEJ`&#g0fogut8T3awnW*-*M=X^di+t#2cXECq@}v9OzFw9Fm6PyZyQE?8^e- zk;B9c>JN4xpT#>c*>^a)CfhX~%L`LpuwLLoYwS$kWpLDL+3u;>hAP*Uh!iPjqlKMa5VH zs|=rjs@(UAcjx7DB?9FQb{lvxV?n1m` z<8_O=E@cZSS5NqJowck;AD-9r7^`P{mDN&MI+HJ}JlT`ev@lqn*IE6*_j>Swjs>r2 zM+#Q%fjoa1s-&=_WqcN!?KoP`dD7}!IVX}yEY=-S2d&?5}8(Tnsb{E${wxE>~v!?$|Qk%KT%O8WUtRT6FUdd>N@@y;!%xJ{$dW(6x4j zXIH&lPUQWAfj&Ktmgsre#@-t3%3HVO0!KbScgHL9txjd_7Q!>191}z}n~J{I_{1_k zes{GGZ8*InnV@K=x8>RDMT^1@9MoMEU0`tELMDRI{>Z7+u~g{-XXC5vJ3_z<)IP%% zQTY$(L-cb5os6=c^(#V$96QzRpZ8Q*LMz;} zTx{!Sh26Pa75gR=$Iif=H&;6FAM&5iiR>p6I6og>RabG^QeHeJoKSE&@Wko7Po&$c zxWjL1wjc4{?zF9~%0xAO8syo+& zdUiZCvM7BJw>;s&n8%%TvG;CwPxr=#eYkZ5@bLoO?|1(v(DMK2&p2-yofoTrhx7d_ z+7{-o>91|B_^)mn6-BteqvLf6L!l4f=R{7G%-x`lOh4A8NLMmP3sf{ueEn-3NMwXf^*zG*wZVgXnr8!;fyItLDWB{ck^M{&g>4@fxy*_9!XNvMbh